-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathdeclarations.js
More file actions
86 lines (72 loc) · 2.21 KB
/
declarations.js
File metadata and controls
86 lines (72 loc) · 2.21 KB
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import fs from "node:fs";
import child_process from "node:child_process";
import path from "node:path";
import prettier from "prettier";
const currentDirectory = import.meta.dirname;
const declarationsDir = path.resolve(currentDirectory, "declarations");
const fullstackedModulesDir = "fullstacked_modules";
const typesDirectory = "@types";
if (fs.existsSync(declarationsDir)) {
fs.rmSync(declarationsDir, { recursive: true });
}
child_process.execSync("npx tsc --project tsconfig.declarations.json", {
stdio: "inherit",
cwd: currentDirectory
});
const outTypesDirectory = path.resolve(
currentDirectory,
fullstackedModulesDir,
typesDirectory
);
if (fs.existsSync(outTypesDirectory)) {
fs.rmSync(outTypesDirectory, { recursive: true });
}
const declaredModules = [
"archive",
"connect",
"fs",
"fetch",
"platform",
"style"
];
function makeDeclaredModule(moduleName, filePath) {
const contents = fs.readFileSync(filePath, { encoding: "utf-8" });
const moduleDeclaration = `declare module "${moduleName}" {
${contents}
}`;
return prettier.format(moduleDeclaration, {
filepath: filePath,
tabWidth: 4
});
}
const generationPromises = declaredModules.map(async (m) => {
const declarationFile = path.resolve(
declarationsDir,
fullstackedModulesDir,
`${m}.d.ts`
);
const moduleDeclaration = await makeDeclaredModule(m, declarationFile);
const typeDirectory = path.resolve(outTypesDirectory, m);
fs.mkdirSync(typeDirectory, { recursive: true });
const moduleDeclarationFile = path.resolve(typeDirectory, "index.d.ts");
fs.writeFileSync(moduleDeclarationFile, moduleDeclaration);
});
await Promise.all(generationPromises);
fs.rmSync(declarationsDir, { recursive: true });
// csstype
const typeFile = path.resolve(
currentDirectory,
"node_modules",
"csstype",
"index.d.ts"
);
const declaredModule = await makeDeclaredModule("csstype", typeFile);
const directory = path.resolve(
currentDirectory,
fullstackedModulesDir,
typesDirectory,
"csstype"
);
fs.mkdirSync(directory, { recursive: true });
fs.writeFileSync(path.resolve(directory, "index.d.ts"), declaredModule);
// end csstype