-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
/
Copy pathtest-typescript-patch.js
48 lines (41 loc) Β· 1.77 KB
/
test-typescript-patch.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
const {createRequire} = require(`module`);
const path = require(`path`);
const ts = require(`typescript`);
const tsconfigFile = ts.readJsonConfigFile(
require.resolve(`@yarnpkg/monorepo/package.json`),
ts.sys.readFile,
);
const compilerOptions = ts.parseJsonSourceFileConfigFileContent(
tsconfigFile,
ts.sys,
path.dirname(tsconfigFile.fileName),
);
const compilerHost = ts.createCompilerHost(compilerOptions);
const program = ts.createProgram(compilerOptions.fileNames, compilerOptions, compilerHost);
const moduleSpecifierResolutionHost = ts.createModuleSpecifierResolutionHost(program, compilerHost);
const yarnCorePkgDir = require.resolve(`@yarnpkg/core/package.json`).replace(`/package.json`, ``);
const fslibPkgDir = require.resolve(`@yarnpkg/fslib/package.json`).replace(`/package.json`, ``);
const libzipPkgDir = require.resolve(`@yarnpkg/libzip/package.json`).replace(`/package.json`, ``);
const rootSourceFile = program.getSourceFile(require.resolve(`${yarnCorePkgDir}/sources/Project.ts`));
const TESTS = [
[`${yarnCorePkgDir}/sources/Configuration.ts`, `./Configuration`],
[`${fslibPkgDir}/README.md`, `@yarnpkg/fslib/README.md`],
[`${fslibPkgDir}/package.json`, `@yarnpkg/fslib/package.json`],
[`${libzipPkgDir}/sources/ZipFS.ts`, `@yarnpkg/libzip/sources/ZipFS`],
[`${fslibPkgDir}/sources/index.ts`, `@yarnpkg/fslib`],
];
for (const [test, expected] of TESTS) {
const actual = ts.moduleSpecifiers.getModuleSpecifier(
compilerOptions,
rootSourceFile,
rootSourceFile.fileName,
createRequire(rootSourceFile.fileName).resolve(test),
moduleSpecifierResolutionHost,
);
if (actual === expected) {
console.log(`\x1b[32mβ\x1b[0m ${actual}`);
} else {
console.log(`\x1b[31mβ\x1b[0m ${actual} !== ${expected}`);
process.exitCode = 1;
}
}