Skip to content

Commit bcfb61c

Browse files
committed
🚑 Get the lib files from libs.json
1 parent 956af03 commit bcfb61c

File tree

11 files changed

+96
-51
lines changed

11 files changed

+96
-51
lines changed

build/diff.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { mkdir, readFile, rm, writeFile } from "fs/promises";
55
import path from "path";
66
import prettier from "prettier";
77
import { generate } from "./logic/generate";
8-
import { getLibFiles } from "./logic/getLibFiles";
8+
import { getLibFiles, tsLibDir } from "./logic/getLibFiles";
99
import { projectDir } from "./logic/projectDir";
1010

1111
const docsDir = path.join(projectDir, "docs");
@@ -20,17 +20,17 @@ async function main() {
2020
recursive: true,
2121
});
2222

23-
const { tsLibDir, libFiles } = await getLibFiles();
23+
const libFiles = await getLibFiles();
2424
const hasDiffFiles: string[] = [];
25-
for (const libFile of libFiles) {
26-
const betterLib = generate(tsLibDir, libFile, false);
25+
for (const [targetFile, sourceFile] of libFiles.entries()) {
26+
const betterLib = generate(tsLibDir, targetFile, sourceFile, false);
2727
if (betterLib === undefined) {
2828
continue;
2929
}
3030

31-
const diffFile = path.join(docsDiffDir, libFile + ".md");
31+
const diffFile = path.join(docsDiffDir, sourceFile + ".md");
3232

33-
const originalLib = await readFile(path.join(tsLibDir, libFile), "utf8");
33+
const originalLib = await readFile(path.join(tsLibDir, sourceFile), "utf8");
3434
const formattedOriginalLib = prettier.format(originalLib, {
3535
parser: "typescript",
3636
});
@@ -42,21 +42,21 @@ async function main() {
4242
}
4343

4444
const diffPatch = createPatch(
45-
libFile,
45+
sourceFile,
4646
formattedOriginalLib,
4747
formattedBetterLib
4848
);
4949

50-
const md = `# ${libFile} Diffs
50+
const md = `# ${sourceFile} Diffs
5151
5252
\`\`\`diff
5353
${diffPatch}
5454
\`\`\`
5555
`;
5656

5757
await writeFile(diffFile, md);
58-
console.log(libFile);
59-
hasDiffFiles.push(libFile);
58+
console.log(sourceFile);
59+
hasDiffFiles.push(sourceFile);
6060
}
6161
const diffDoc = `
6262
# Diffs

build/build.ts renamed to build/lib.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { mkdir, rm, writeFile } from "fs/promises";
22
import path from "path";
33
import prettier from "prettier";
44
import { generate } from "./logic/generate";
5-
import { getLibFiles } from "./logic/getLibFiles";
5+
import { getLibFiles, tsLibDir } from "./logic/getLibFiles";
66
import { projectDir } from "./logic/projectDir";
77

88
const distDir = path.join(projectDir, "generated");
@@ -17,20 +17,20 @@ async function main() {
1717
});
1818

1919
// copy TypeScript lib files
20-
const { tsLibDir, libFiles } = await getLibFiles();
20+
const libFiles = await getLibFiles();
2121

2222
// modify each lib file
23-
for (const libFile of libFiles) {
24-
let result = generate(tsLibDir, libFile, true);
23+
for (const [targetFile, sourceFile] of libFiles.entries()) {
24+
let result = generate(tsLibDir, targetFile, sourceFile, true);
2525
if (result === undefined) {
2626
continue;
2727
}
2828
result = prettier.format(result, {
2929
parser: "typescript",
3030
});
3131

32-
await writeFile(path.join(distDir, "lib." + libFile), result);
33-
console.log(libFile);
32+
await writeFile(path.join(distDir, targetFile), result);
33+
console.log(sourceFile);
3434
}
3535
}
3636

build/logic/generate.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import path from "path";
22
import ts from "typescript";
3-
import { alias } from "../alias";
3+
import { alias } from "../util/alias";
44
import { upsert } from "../util/upsert";
55
import { projectDir } from "./projectDir";
66

@@ -11,10 +11,11 @@ const betterLibDir = path.join(projectDir, "lib");
1111
*/
1212
export function generate(
1313
tsLibDir: string,
14-
libFile: string,
14+
targetFile: string,
15+
sourceFile: string,
1516
emitOriginalAsComment: boolean
1617
): string | undefined {
17-
const tsLibFile = path.join(tsLibDir, libFile);
18+
const tsLibFile = path.join(tsLibDir, sourceFile);
1819
const originalProgram = ts.createProgram([tsLibFile], {});
1920
const originalFile = originalProgram.getSourceFile(tsLibFile);
2021
if (!originalFile) {
@@ -27,7 +28,7 @@ export function generate(
2728
let result = `/// <reference no-default-lib="true"/>
2829
`;
2930

30-
const replacementTargets = scanBetterFile(printer, libFile);
31+
const replacementTargets = scanBetterFile(printer, targetFile);
3132

3233
if (replacementTargets.size === 0) {
3334
return result + originalFile.text;
@@ -189,11 +190,11 @@ type ReplacementTarget = (
189190
*/
190191
function scanBetterFile(
191192
printer: ts.Printer,
192-
libFile: string
193+
targetFile: string
193194
): Map<string, ReplacementTarget[]> {
194195
const replacementTargets = new Map<string, ReplacementTarget[]>();
195196
{
196-
const betterLibFile = path.join(betterLibDir, `lib.${libFile}`);
197+
const betterLibFile = path.join(betterLibDir, targetFile);
197198
const betterProgram = ts.createProgram([betterLibFile], {});
198199
const betterFile = betterProgram.getSourceFile(betterLibFile);
199200
if (betterFile) {

build/logic/getLibFiles.ts

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,23 @@
1-
import { readdir } from "fs/promises";
1+
import { readFile } from "fs/promises";
2+
import JSON5 from "json5";
23
import path from "path";
4+
import { array, record, string, unknown } from "../util/parsers";
35
import { projectDir } from "./projectDir";
46

5-
const tsDir = path.join(projectDir, "TypeScript");
6-
const tsLibDir = path.join(tsDir, "src", "lib");
7+
export const tsLibDir = path.join(projectDir, "TypeScript", "src", "lib");
78

8-
export async function getLibFiles(): Promise<{
9-
tsLibDir: string;
10-
libFiles: string[];
11-
}> {
12-
// copy TypeScript lib files
13-
const libs = await readdir(tsLibDir);
14-
const libFiles: string[] = libs.filter((libFile) =>
15-
/(?:^|\/|\\).+\.d\.ts$/.test(libFile)
9+
const libsFile = path.join(tsLibDir, "libs.json");
10+
11+
export const getLibFiles = async () => {
12+
const json5 = await readFile(libsFile, "utf8");
13+
const result = record(unknown)(JSON5.parse(json5));
14+
const libs = array(string)(result.libs);
15+
const paths = record(string)(result.paths);
16+
return new Map(
17+
libs.map((lib) => {
18+
const sourceFile = `${lib}.d.ts`;
19+
const targetFile = paths[lib] || `lib.${sourceFile}`;
20+
return [targetFile, sourceFile];
21+
})
1622
);
17-
return {
18-
tsLibDir,
19-
libFiles,
20-
};
21-
}
23+
};

build/package.ts

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import { mkdir, readdir, readFile, rm, symlink, writeFile } from "fs/promises";
22
import path from "path";
3+
import { name as rootPackageName, version } from "../package.json";
4+
import { projectDir } from "./logic/projectDir";
35

46
const scope = "better-typescript-lib";
57

6-
const projectDir = process.env.PROJECT || process.cwd();
78
const libDir = path.join(projectDir, "generated");
89
const templateDir = path.join(projectDir, "package-template");
910
const packageDir = path.join(projectDir, "dist-package");
@@ -18,13 +19,6 @@ async function main() {
1819
recursive: true,
1920
});
2021

21-
// Read version from root package.json
22-
const rootPackageJson = JSON.parse(
23-
await readFile(path.join(projectDir, "package.json"), "utf-8")
24-
);
25-
const rootPackageName: string = rootPackageJson.name;
26-
const version: string = rootPackageJson.version;
27-
2822
const packageTemplateFiles = await readdir(templateDir);
2923

3024
const libFiles = (await readdir(libDir)).filter((libFile) =>
@@ -33,6 +27,7 @@ async function main() {
3327

3428
const packageNames = new Set<string>();
3529
for (const libFile of libFiles) {
30+
if (libFile === "lib.d.ts") continue;
3631
console.log(`Processing ${libFile}`);
3732
const libFilePath = path.join(libDir, libFile);
3833
const { packageName, packagePath } =
File renamed without changes.

build/util/isNotNullish.ts

Lines changed: 0 additions & 3 deletions
This file was deleted.

build/util/parsers.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
export type Parser<A> = (input: unknown) => A;
2+
3+
export const unknown: Parser<unknown> = (input) => input;
4+
5+
export const string: Parser<string> = (input) => {
6+
if (typeof input === "string") return input;
7+
throw new TypeError(`Expected a string but received ${input}`);
8+
};
9+
10+
export const array =
11+
<A>(parser: Parser<A>): Parser<A[]> =>
12+
(input) => {
13+
if (!Array.isArray(input))
14+
throw new TypeError(`Expected an array but received ${input}`);
15+
const result = new Array<A>(input.length);
16+
for (let i = 0; i < input.length; i++) result[i] = parser(input[i]);
17+
return result;
18+
};
19+
20+
export const record =
21+
<A>(parser: Parser<A>): Parser<Record<string, A>> =>
22+
(input) => {
23+
if (typeof input !== "object" || input === null)
24+
throw new TypeError(`Expected a non-null object but received ${input}`);
25+
const result: Record<string, A> = {};
26+
for (const [key, value] of Object.entries(input))
27+
result[key] = parser(value);
28+
return result;
29+
};

package-lock.json

Lines changed: 19 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,14 @@
1010
"@types/node": "^16.9.6",
1111
"@types/prettier": "^2.6.0",
1212
"diff": "^5.0.0",
13+
"json5": "^2.2.3",
1314
"prettier": "^2.6.2",
1415
"tsd": "^0.25.0",
1516
"typescript": "^4.9.4"
1617
},
1718
"scripts": {
1819
"build:tsc": "tsc",
19-
"build:lib": "node dist/build/build.js",
20+
"build:lib": "node dist/build/lib.js",
2021
"build:package": "node dist/build/package.js",
2122
"build:diff": "node dist/build/diff.js",
2223
"test": "echo 'Please run tests in the tests/ directory' && exit 1"
@@ -31,4 +32,4 @@
3132
"types": []
3233
}
3334
}
34-
}
35+
}

tsconfig.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
// "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
4646
// "baseUrl": "./", /* Base directory to resolve non-absolute module names. */
4747
// "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
48+
"resolveJsonModule": true,
4849
// "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */
4950
// "typeRoots": [], /* List of folders to include type definitions from. */
5051
// "types": [], /* Type declaration files to be included in compilation. */

0 commit comments

Comments
 (0)