@intelligentgraphics/ig.gfx.packager 2.3.4 → 3.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/cli.js +8316 -0
- package/build/cli.js.map +1 -0
- package/build/commands/build.js +326 -0
- package/build/commands/build.js.map +1 -0
- package/build/commands/generate.js +216 -0
- package/build/commands/generate.js.map +1 -0
- package/build/commands/postinstall.js +78 -0
- package/build/commands/postinstall.js.map +1 -0
- package/build/commands/publishNpm.js +157 -0
- package/build/commands/publishNpm.js.map +1 -0
- package/build/commands/release.js +577 -0
- package/build/commands/release.js.map +1 -0
- package/build/dependencies.js +165 -0
- package/build/dependencies.js.map +1 -0
- package/build/index.js +6 -8762
- package/build/index.js.map +1 -1
- package/build/scripts.js +32 -0
- package/build/scripts.js.map +1 -0
- package/build/versionFile.js +182 -0
- package/build/versionFile.js.map +1 -0
- package/package.json +13 -16
- package/readme.md +51 -10
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var path = require('path');
|
|
5
|
+
var fs = require('fs');
|
|
6
|
+
var glob = require('glob');
|
|
7
|
+
var terser = require('terser');
|
|
8
|
+
var cli = require('../cli.js');
|
|
9
|
+
var ts = require('typescript');
|
|
10
|
+
var scripts = require('../scripts.js');
|
|
11
|
+
var typedoc = require('typedoc');
|
|
12
|
+
|
|
13
|
+
function _interopNamespaceDefault(e) {
|
|
14
|
+
var n = Object.create(null);
|
|
15
|
+
if (e) {
|
|
16
|
+
Object.keys(e).forEach(function (k) {
|
|
17
|
+
if (k !== 'default') {
|
|
18
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
19
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
20
|
+
enumerable: true,
|
|
21
|
+
get: function () { return e[k]; }
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
n.default = e;
|
|
27
|
+
return Object.freeze(n);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
var path__namespace = /*#__PURE__*/_interopNamespaceDefault(path);
|
|
31
|
+
var fs__namespace = /*#__PURE__*/_interopNamespaceDefault(fs);
|
|
32
|
+
var glob__namespace = /*#__PURE__*/_interopNamespaceDefault(glob);
|
|
33
|
+
var terser__namespace = /*#__PURE__*/_interopNamespaceDefault(terser);
|
|
34
|
+
var ts__namespace = /*#__PURE__*/_interopNamespaceDefault(ts);
|
|
35
|
+
var typedoc__namespace = /*#__PURE__*/_interopNamespaceDefault(typedoc);
|
|
36
|
+
|
|
37
|
+
const logPackageMessage = (name, step, index, total) => {
|
|
38
|
+
const numLength = total === undefined ? undefined : total.toString().length;
|
|
39
|
+
const indexString = total === undefined || total < 2 ? "" : `${index.toString().padStart(numLength, "0")}/${total} `;
|
|
40
|
+
const identifierString = `${indexString}${name.padEnd(15)}`;
|
|
41
|
+
console.log(`${identifierString} >> ${step}`);
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
const tryReadTsConfig = location => {
|
|
45
|
+
const {
|
|
46
|
+
config
|
|
47
|
+
} = ts__namespace.readConfigFile(path__namespace.join(location.scriptsDir, "tsconfig.json"), path => {
|
|
48
|
+
try {
|
|
49
|
+
return fs__namespace.readFileSync(path, "utf8");
|
|
50
|
+
} catch {
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
return config;
|
|
55
|
+
};
|
|
56
|
+
const build = async location => {
|
|
57
|
+
const config = tryReadTsConfig(location);
|
|
58
|
+
config.compilerOptions.lib = ["es5", "dom"];
|
|
59
|
+
const result = ts__namespace.convertCompilerOptionsFromJson(config.compilerOptions, location.scriptsDir);
|
|
60
|
+
const compilerOptions = {
|
|
61
|
+
...result.options,
|
|
62
|
+
removeComments: false,
|
|
63
|
+
declaration: true,
|
|
64
|
+
sourceMap: false,
|
|
65
|
+
outFile: "out.js",
|
|
66
|
+
target: ts__namespace.ScriptTarget.ES5,
|
|
67
|
+
noEmitOnError: true
|
|
68
|
+
};
|
|
69
|
+
const host = ts__namespace.createCompilerHost(compilerOptions);
|
|
70
|
+
host.getCurrentDirectory = () => location.scriptsDir;
|
|
71
|
+
let js;
|
|
72
|
+
let definitions;
|
|
73
|
+
host.writeFile = (fileName, data, writeByteOrderMark) => {
|
|
74
|
+
if (fileName.endsWith(".js")) {
|
|
75
|
+
js = data;
|
|
76
|
+
} else if (fileName.endsWith(".d.ts")) {
|
|
77
|
+
definitions = data;
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
const files = scripts.getPackageTypescriptFiles(location);
|
|
81
|
+
if (files.length === 0) {
|
|
82
|
+
throw new Error(`Expected typescript files to exist when building a package. Packages only consisting of animation jsons do not need to be built.`);
|
|
83
|
+
}
|
|
84
|
+
const programOptions = {
|
|
85
|
+
rootNames: files,
|
|
86
|
+
options: compilerOptions,
|
|
87
|
+
host
|
|
88
|
+
};
|
|
89
|
+
const program = ts__namespace.createProgram(programOptions);
|
|
90
|
+
const emitResult = program.emit();
|
|
91
|
+
const allDiagnostics = ts__namespace.getPreEmitDiagnostics(program);
|
|
92
|
+
if (!emitResult.emitSkipped) {
|
|
93
|
+
if (allDiagnostics.length > 0) {
|
|
94
|
+
console.log(allDiagnostics.map(createErrorMessage).join("\n"));
|
|
95
|
+
}
|
|
96
|
+
if (js === undefined || definitions === undefined) {
|
|
97
|
+
throw new Error(`Unexpected: no js or definitions were created`);
|
|
98
|
+
}
|
|
99
|
+
return {
|
|
100
|
+
js,
|
|
101
|
+
definitions
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
const error = allDiagnostics.map(createErrorMessage).join("\n");
|
|
105
|
+
throw new Error(error);
|
|
106
|
+
};
|
|
107
|
+
const createErrorMessage = diagnostic => {
|
|
108
|
+
if (!diagnostic.file) {
|
|
109
|
+
return `${ts__namespace.flattenDiagnosticMessageText(diagnostic.messageText, "\n")}`;
|
|
110
|
+
}
|
|
111
|
+
const {
|
|
112
|
+
line,
|
|
113
|
+
character
|
|
114
|
+
} = diagnostic.file.getLineAndCharacterOfPosition(diagnostic.start);
|
|
115
|
+
const message = ts__namespace.flattenDiagnosticMessageText(diagnostic.messageText, "\n");
|
|
116
|
+
return `${diagnostic.file.fileName} (${line + 1},${character + 1}): ${message}`;
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
const generateDocs = async (folderPath, declarationFile, outFolder, name) => {
|
|
120
|
+
const app = new typedoc__namespace.Application();
|
|
121
|
+
const mediaDir = path__namespace.join(folderPath, "Media");
|
|
122
|
+
app.bootstrap({
|
|
123
|
+
entryPoints: [declarationFile],
|
|
124
|
+
media: mediaDir,
|
|
125
|
+
out: outFolder
|
|
126
|
+
});
|
|
127
|
+
app.options.setCompilerOptions([declarationFile], {
|
|
128
|
+
target: ts.ScriptTarget.ES5
|
|
129
|
+
}, undefined);
|
|
130
|
+
app.options.setValue("name", name);
|
|
131
|
+
const [readmePath] = glob__namespace.sync("**/readme.md", {
|
|
132
|
+
absolute: true,
|
|
133
|
+
cwd: folderPath
|
|
134
|
+
});
|
|
135
|
+
if (readmePath) {
|
|
136
|
+
app.options.setValue("readme", readmePath);
|
|
137
|
+
}
|
|
138
|
+
const project = app.convert();
|
|
139
|
+
if (project) {
|
|
140
|
+
await app.generateDocs(project, outFolder);
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
const buildFolders = async options => {
|
|
145
|
+
if (options.outDir !== undefined && options.clean) {
|
|
146
|
+
fs__namespace.rmSync(options.outDir, {
|
|
147
|
+
recursive: true
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
const workspace = cli.detectWorkspace(options.cwd);
|
|
151
|
+
const folders = resolvePackagesFromArgs(options.directories, workspace);
|
|
152
|
+
if (folders.length === 0) {
|
|
153
|
+
return console.log(cli.translate("messages.buildSkipEmpty"));
|
|
154
|
+
}
|
|
155
|
+
const sortedPackages = buildSortedPackageMap(folders);
|
|
156
|
+
let index = 1;
|
|
157
|
+
for (const [, {
|
|
158
|
+
location
|
|
159
|
+
}] of sortedPackages) {
|
|
160
|
+
if (options.skipPackagesWithoutTsFiles && scripts.getPackageTypescriptFiles(location).length === 0) {
|
|
161
|
+
continue;
|
|
162
|
+
}
|
|
163
|
+
ensureTsConfig(location);
|
|
164
|
+
const data = cli.readPackageCreatorManifest(location);
|
|
165
|
+
const logStep = step => logPackageMessage(data.Package, step, index, sortedPackages.size);
|
|
166
|
+
logStep(cli.translate("messages.building"));
|
|
167
|
+
const buildResult = await build(location);
|
|
168
|
+
const banner = options.banner ? createBannerComment(options.banner) : undefined;
|
|
169
|
+
if (banner) {
|
|
170
|
+
buildResult.js = banner + "\n" + buildResult.js;
|
|
171
|
+
buildResult.definitions = banner + "\n" + buildResult.definitions;
|
|
172
|
+
}
|
|
173
|
+
const outputDirectory = options.outDir || location.scriptsDir;
|
|
174
|
+
fs__namespace.mkdirSync(outputDirectory, {
|
|
175
|
+
recursive: true
|
|
176
|
+
});
|
|
177
|
+
fs__namespace.writeFileSync(path__namespace.join(outputDirectory, `${data.Package}.js`), buildResult.js, {
|
|
178
|
+
encoding: "utf8"
|
|
179
|
+
});
|
|
180
|
+
fs__namespace.writeFileSync(path__namespace.join(outputDirectory, `${data.Package}.d.ts`), buildResult.definitions, {
|
|
181
|
+
encoding: "utf8"
|
|
182
|
+
});
|
|
183
|
+
if (options.minimize) {
|
|
184
|
+
const minifyResult = terser__namespace.minify(buildResult.js, {
|
|
185
|
+
ecma: 5
|
|
186
|
+
});
|
|
187
|
+
if (minifyResult.error || !minifyResult.code) {
|
|
188
|
+
console.warn("Not writing minified script version because of error", minifyResult.error);
|
|
189
|
+
}
|
|
190
|
+
const minifiedPath = path__namespace.join(outputDirectory, `${data.Package}.min.js`);
|
|
191
|
+
fs__namespace.writeFileSync(minifiedPath, minifyResult.code, {
|
|
192
|
+
encoding: "utf8"
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
if (location.path.includes("Basics")) {
|
|
196
|
+
fs__namespace.mkdirSync(path__namespace.join(options.cwd, "lib"), {
|
|
197
|
+
recursive: true
|
|
198
|
+
});
|
|
199
|
+
logStep(cli.translate("messages.basicsCopy"));
|
|
200
|
+
fs__namespace.writeFileSync(path__namespace.join(options.cwd, "lib", `${data.Package}.d.ts`), buildResult.definitions, {
|
|
201
|
+
encoding: "utf8"
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
if (options.docs) {
|
|
205
|
+
logStep(cli.translate("messages.docsGeneration"));
|
|
206
|
+
await generateDocs(location.scriptsDir, path__namespace.join(options.outDir || location.scriptsDir, `${data.Package}.d.ts`), path__namespace.join(options.cwd, "docs", data.Package), data.Package);
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
// logStep(translate("messages.built"));
|
|
210
|
+
|
|
211
|
+
index++;
|
|
212
|
+
}
|
|
213
|
+
};
|
|
214
|
+
const resolvePackagesFromArgs = (args = [], workspace) => {
|
|
215
|
+
const folders = new Map();
|
|
216
|
+
for (const arg of args) {
|
|
217
|
+
glob__namespace.sync(arg, {
|
|
218
|
+
cwd: workspace.path,
|
|
219
|
+
absolute: true
|
|
220
|
+
}).forEach(folder => {
|
|
221
|
+
try {
|
|
222
|
+
const location = cli.detectPackage(workspace, folder);
|
|
223
|
+
folders.set(folder, location);
|
|
224
|
+
} catch (err) {}
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
return Array.from(folders.values());
|
|
228
|
+
};
|
|
229
|
+
const ensureTsConfig = location => {
|
|
230
|
+
const tsconfigPath = path__namespace.join(location.scriptsDir, "tsconfig.json");
|
|
231
|
+
if (!fs__namespace.existsSync(tsconfigPath)) {
|
|
232
|
+
const content = {};
|
|
233
|
+
applyTsConfigOption(content);
|
|
234
|
+
fs__namespace.writeFileSync(tsconfigPath, JSON.stringify(content, undefined, "\t"), "utf8");
|
|
235
|
+
} else {
|
|
236
|
+
const content = JSON.parse(fs__namespace.readFileSync(tsconfigPath, "utf8"));
|
|
237
|
+
applyTsConfigOption(content);
|
|
238
|
+
fs__namespace.writeFileSync(tsconfigPath, JSON.stringify(content, undefined, "\t"), "utf8");
|
|
239
|
+
}
|
|
240
|
+
};
|
|
241
|
+
const applyTsConfigOption = data => {
|
|
242
|
+
data.compilerOptions = data.compilerOptions ?? {};
|
|
243
|
+
data.compilerOptions.target = "es5";
|
|
244
|
+
data.compilerOptions.lib = ["es5", "dom"];
|
|
245
|
+
};
|
|
246
|
+
const buildSortedPackageMap = folders => {
|
|
247
|
+
const packages = Array.from(folders).reduce((acc, location) => {
|
|
248
|
+
const data = cli.readPackageNpmManifest(location);
|
|
249
|
+
if (data !== undefined) {
|
|
250
|
+
acc[data.name] = {
|
|
251
|
+
data,
|
|
252
|
+
location
|
|
253
|
+
};
|
|
254
|
+
} else {
|
|
255
|
+
acc[location.path] = {
|
|
256
|
+
data: undefined,
|
|
257
|
+
location
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
return acc;
|
|
261
|
+
}, {});
|
|
262
|
+
const packageDependencies = Object.getOwnPropertyNames(packages).reduce((acc, packageName) => {
|
|
263
|
+
const packageData = packages[packageName];
|
|
264
|
+
if (packageData.data === undefined) {
|
|
265
|
+
acc[packageName] = [];
|
|
266
|
+
} else {
|
|
267
|
+
acc[packageName] = Object.getOwnPropertyNames({
|
|
268
|
+
...packageData.data.devDependencies,
|
|
269
|
+
...packageData.data.dependencies,
|
|
270
|
+
...packageData.data.peerDependencies
|
|
271
|
+
}).filter(packageName => packages[packageName] !== undefined);
|
|
272
|
+
}
|
|
273
|
+
return acc;
|
|
274
|
+
}, {});
|
|
275
|
+
const sortedPackages = cli.build.toposort(packageDependencies);
|
|
276
|
+
const result = new Map();
|
|
277
|
+
for (const packageName of sortedPackages) {
|
|
278
|
+
result.set(packageName, packages[packageName]);
|
|
279
|
+
}
|
|
280
|
+
return result;
|
|
281
|
+
};
|
|
282
|
+
const createBannerComment = banner => {
|
|
283
|
+
const bannerParts = [];
|
|
284
|
+
if (banner.text) {
|
|
285
|
+
bannerParts.push(" * " + banner.text);
|
|
286
|
+
}
|
|
287
|
+
{
|
|
288
|
+
const details = [];
|
|
289
|
+
if (banner.version) {
|
|
290
|
+
details.push(`Version: ${banner.version}`);
|
|
291
|
+
}
|
|
292
|
+
if (banner.commit) {
|
|
293
|
+
if (banner.commitDirty) {
|
|
294
|
+
details.push(`Commit: ${banner.commit} (dirty)`);
|
|
295
|
+
} else {
|
|
296
|
+
details.push(`Commit: ${banner.commit}`);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
if (banner.date) {
|
|
300
|
+
details.push(`Date: ${banner.date.toISOString()}`);
|
|
301
|
+
}
|
|
302
|
+
const detailsText = details.map(line => ` * ${line}`).join("\n");
|
|
303
|
+
if (detailsText) {
|
|
304
|
+
bannerParts.push(detailsText);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
const bannerText = bannerParts.join("\n\n");
|
|
308
|
+
if (bannerText) {
|
|
309
|
+
return `/*
|
|
310
|
+
${bannerText}
|
|
311
|
+
*
|
|
312
|
+
* @preserve
|
|
313
|
+
*/`;
|
|
314
|
+
}
|
|
315
|
+
return undefined;
|
|
316
|
+
};
|
|
317
|
+
|
|
318
|
+
var index = /*#__PURE__*/Object.freeze({
|
|
319
|
+
__proto__: null,
|
|
320
|
+
buildFolders: buildFolders
|
|
321
|
+
});
|
|
322
|
+
|
|
323
|
+
exports.buildFolders = buildFolders;
|
|
324
|
+
exports.index = index;
|
|
325
|
+
exports.logPackageMessage = logPackageMessage;
|
|
326
|
+
//# sourceMappingURL=build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.js","sources":["../../src/lib/log.ts","../../src/commands/build/tsc.ts","../../src/commands/build/docs.ts","../../src/commands/build/index.ts"],"sourcesContent":["export const logPackageMessage = (\n\tname: string,\n\tstep: string,\n\tindex?: number,\n\ttotal?: number,\n) => {\n\tconst numLength = total === undefined ? undefined : total.toString().length;\n\n\tconst indexString =\n\t\ttotal === undefined || total < 2\n\t\t\t? \"\"\n\t\t\t: `${index!.toString().padStart(numLength!, \"0\")}/${total} `;\n\n\tconst identifierString = `${indexString}${name.padEnd(15)}`;\n\n\tconsole.log(`${identifierString} >> ${step}`);\n};\n","import * as ts from \"typescript\";\nimport * as path from \"path\";\nimport * as fs from \"fs\";\n\nimport { PackageLocation } from \"../../lib/package\";\n\nimport { FolderBuilder } from \".\";\nimport { getPackageTypescriptFiles } from \"../../lib/scripts\";\n\nexport const tryReadTsConfig = (location: PackageLocation) => {\n\tconst { config } = ts.readConfigFile(\n\t\tpath.join(location.scriptsDir, \"tsconfig.json\"),\n\t\t(path) => {\n\t\t\ttry {\n\t\t\t\treturn fs.readFileSync(path, \"utf8\");\n\t\t\t} catch {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t},\n\t);\n\n\treturn config as {\n\t\tcompilerOptions: ts.CompilerOptions;\n\t};\n};\n\nexport const build: FolderBuilder = async (location: PackageLocation) => {\n\tconst config = tryReadTsConfig(location);\n\n\tconfig.compilerOptions.lib = [\"es5\", \"dom\"];\n\n\tconst result = ts.convertCompilerOptionsFromJson(\n\t\tconfig.compilerOptions,\n\t\tlocation.scriptsDir,\n\t);\n\n\tconst compilerOptions: ts.CompilerOptions = {\n\t\t...result.options,\n\t\tremoveComments: false,\n\t\tdeclaration: true,\n\t\tsourceMap: false,\n\t\toutFile: \"out.js\",\n\t\ttarget: ts.ScriptTarget.ES5,\n\t\tnoEmitOnError: true,\n\t};\n\n\tconst host = ts.createCompilerHost(compilerOptions);\n\thost.getCurrentDirectory = () => location.scriptsDir;\n\n\tlet js: string | undefined;\n\tlet definitions: string | undefined;\n\n\thost.writeFile = (fileName, data, writeByteOrderMark) => {\n\t\tif (fileName.endsWith(\".js\")) {\n\t\t\tjs = data;\n\t\t} else if (fileName.endsWith(\".d.ts\")) {\n\t\t\tdefinitions = data;\n\t\t}\n\t};\n\n\tconst files = getPackageTypescriptFiles(location);\n\n\tif (files.length === 0) {\n\t\tthrow new Error(\n\t\t\t`Expected typescript files to exist when building a package. Packages only consisting of animation jsons do not need to be built.`,\n\t\t);\n\t}\n\n\tconst programOptions: ts.CreateProgramOptions = {\n\t\trootNames: files,\n\t\toptions: compilerOptions,\n\t\thost,\n\t};\n\n\tconst program = ts.createProgram(programOptions);\n\tconst emitResult = program.emit();\n\tconst allDiagnostics = ts.getPreEmitDiagnostics(program);\n\n\tif (!emitResult.emitSkipped) {\n\t\tif (allDiagnostics.length > 0) {\n\t\t\tconsole.log(allDiagnostics.map(createErrorMessage).join(\"\\n\"));\n\t\t}\n\n\t\tif (js === undefined || definitions === undefined) {\n\t\t\tthrow new Error(`Unexpected: no js or definitions were created`);\n\t\t}\n\n\t\treturn { js, definitions };\n\t}\n\n\tconst error = allDiagnostics.map(createErrorMessage).join(\"\\n\");\n\n\tthrow new Error(error);\n};\n\nconst createErrorMessage = (diagnostic: ts.Diagnostic) => {\n\tif (!diagnostic.file) {\n\t\treturn `${ts.flattenDiagnosticMessageText(\n\t\t\tdiagnostic.messageText,\n\t\t\t\"\\n\",\n\t\t)}`;\n\t}\n\n\tconst { line, character } = diagnostic.file.getLineAndCharacterOfPosition(\n\t\tdiagnostic.start!,\n\t);\n\n\tconst message = ts.flattenDiagnosticMessageText(\n\t\tdiagnostic.messageText,\n\t\t\"\\n\",\n\t);\n\n\treturn `${diagnostic.file.fileName} (${line + 1},${\n\t\tcharacter + 1\n\t}): ${message}`;\n};\n","import * as typedoc from \"typedoc\";\nimport * as glob from \"glob\";\nimport { ScriptTarget } from \"typescript\";\nimport * as path from \"path\";\n\nexport const generateDocs = async (\n\tfolderPath: string,\n\tdeclarationFile: string,\n\toutFolder: string,\n\tname: string,\n) => {\n\tconst app = new typedoc.Application();\n\n\tconst mediaDir = path.join(folderPath, \"Media\");\n\n\tapp.bootstrap({\n\t\tentryPoints: [declarationFile],\n\t\tmedia: mediaDir,\n\t\tout: outFolder,\n\t});\n\n\tapp.options.setCompilerOptions(\n\t\t[declarationFile],\n\t\t{\n\t\t\ttarget: ScriptTarget.ES5,\n\t\t},\n\t\tundefined,\n\t);\n\n\tapp.options.setValue(\"name\", name);\n\n\tconst [readmePath] = glob.sync(\"**/readme.md\", {\n\t\tabsolute: true,\n\t\tcwd: folderPath,\n\t});\n\n\tif (readmePath) {\n\t\tapp.options.setValue(\"readme\", readmePath);\n\t}\n\n\tconst project = app.convert();\n\n\tif (project) {\n\t\tawait app.generateDocs(project, outFolder);\n\t}\n};\n","import * as path from \"path\";\nimport * as fs from \"fs\";\nimport * as glob from \"glob\";\nimport * as terser from \"terser\";\n\nimport { PackageJSON, toposort } from \"@intelligentgraphics/ig.tools.core\";\n\nimport { logPackageMessage } from \"../../lib/log\";\nimport { translate } from \"../../localization\";\nimport { build as tscBuild } from \"./tsc\";\nimport { generateDocs } from \"./docs\";\nimport {\n\tdetectPackage,\n\tPackageLocation,\n\treadPackageCreatorManifest,\n\treadPackageNpmManifest,\n} from \"../../lib/package\";\nimport { detectWorkspace, WorkspaceLocation } from \"../../lib/workspace\";\nimport { getPackageTypescriptFiles } from \"../../lib/scripts\";\n\nexport interface BannerOptions {\n\ttext: string | undefined;\n\tversion: string | undefined;\n\tcommit: string | undefined;\n\tcommitDirty: boolean | undefined;\n\tdate: Date | undefined;\n}\n\nexport interface BuildFoldersOptions {\n\tcwd: string;\n\tdirectories: string[];\n\toutDir?: string;\n\tminimize: boolean;\n\tbanner?: BannerOptions;\n\tclean?: boolean;\n\tdocs?: boolean;\n\tskipPackagesWithoutTsFiles?: boolean;\n}\n\nexport interface BuildFolderOptions extends BuildFoldersOptions {\n\toutFile: string;\n}\n\nexport interface FolderBuilderResult {\n\tjs: string;\n\tdefinitions: string;\n}\n\nexport type FolderBuilder = (\n\tlocation: PackageLocation,\n) => Promise<FolderBuilderResult>;\n\ntype FolderData = {\n\tlocation: PackageLocation;\n\tdata?: PackageJSON;\n};\n\nexport const buildFolders = async (options: BuildFoldersOptions) => {\n\tif (options.outDir !== undefined && options.clean) {\n\t\tfs.rmSync(options.outDir, { recursive: true });\n\t}\n\n\tconst workspace = detectWorkspace(options.cwd);\n\tconst folders = resolvePackagesFromArgs(options.directories, workspace);\n\n\tif (folders.length === 0) {\n\t\treturn console.log(translate(\"messages.buildSkipEmpty\"));\n\t}\n\n\tconst sortedPackages = buildSortedPackageMap(folders);\n\n\tlet index = 1;\n\n\tfor (const [, { location }] of sortedPackages) {\n\t\tif (\n\t\t\toptions.skipPackagesWithoutTsFiles &&\n\t\t\tgetPackageTypescriptFiles(location).length === 0\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tensureTsConfig(location);\n\n\t\tconst data = readPackageCreatorManifest(location);\n\n\t\tconst logStep = (step: string) =>\n\t\t\tlogPackageMessage(data.Package, step, index, sortedPackages.size);\n\n\t\tlogStep(translate(\"messages.building\"));\n\n\t\tconst buildResult = await tscBuild(location);\n\t\tconst banner = options.banner\n\t\t\t? createBannerComment(options.banner)\n\t\t\t: undefined;\n\n\t\tif (banner) {\n\t\t\tbuildResult.js = banner + \"\\n\" + buildResult.js;\n\t\t\tbuildResult.definitions = banner + \"\\n\" + buildResult.definitions;\n\t\t}\n\n\t\tconst outputDirectory = options.outDir || location.scriptsDir;\n\t\tfs.mkdirSync(outputDirectory, { recursive: true });\n\n\t\tfs.writeFileSync(\n\t\t\tpath.join(outputDirectory, `${data.Package}.js`),\n\t\t\tbuildResult.js,\n\t\t\t{ encoding: \"utf8\" },\n\t\t);\n\t\tfs.writeFileSync(\n\t\t\tpath.join(outputDirectory, `${data.Package}.d.ts`),\n\t\t\tbuildResult.definitions,\n\t\t\t{ encoding: \"utf8\" },\n\t\t);\n\n\t\tif (options.minimize) {\n\t\t\tconst minifyResult = terser.minify(buildResult.js, {\n\t\t\t\tecma: 5,\n\t\t\t});\n\n\t\t\tif (minifyResult.error || !minifyResult.code) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t\"Not writing minified script version because of error\",\n\t\t\t\t\tminifyResult.error,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst minifiedPath = path.join(\n\t\t\t\toutputDirectory,\n\t\t\t\t`${data.Package}.min.js`,\n\t\t\t);\n\t\t\tfs.writeFileSync(minifiedPath, minifyResult.code!, {\n\t\t\t\tencoding: \"utf8\",\n\t\t\t});\n\t\t}\n\n\t\tif (location.path.includes(\"Basics\")) {\n\t\t\tfs.mkdirSync(path.join(options.cwd, \"lib\"), {\n\t\t\t\trecursive: true,\n\t\t\t});\n\n\t\t\tlogStep(translate(\"messages.basicsCopy\"));\n\t\t\tfs.writeFileSync(\n\t\t\t\tpath.join(options.cwd, \"lib\", `${data.Package}.d.ts`),\n\t\t\t\tbuildResult.definitions,\n\t\t\t\t{ encoding: \"utf8\" },\n\t\t\t);\n\t\t}\n\n\t\tif (options.docs) {\n\t\t\tlogStep(translate(\"messages.docsGeneration\"));\n\t\t\tawait generateDocs(\n\t\t\t\tlocation.scriptsDir,\n\t\t\t\tpath.join(\n\t\t\t\t\toptions.outDir || location.scriptsDir,\n\t\t\t\t\t`${data.Package}.d.ts`,\n\t\t\t\t),\n\t\t\t\tpath.join(options.cwd, \"docs\", data.Package),\n\t\t\t\tdata.Package,\n\t\t\t);\n\t\t}\n\n\t\t// logStep(translate(\"messages.built\"));\n\n\t\tindex++;\n\t}\n};\n\nconst resolvePackagesFromArgs = (\n\targs: string[] = [],\n\tworkspace: WorkspaceLocation,\n) => {\n\tconst folders = new Map<string, PackageLocation>();\n\n\tfor (const arg of args) {\n\t\tglob.sync(arg, { cwd: workspace.path, absolute: true }).forEach(\n\t\t\t(folder) => {\n\t\t\t\ttry {\n\t\t\t\t\tconst location = detectPackage(workspace, folder);\n\t\t\t\t\tfolders.set(folder, location);\n\t\t\t\t} catch (err) {}\n\t\t\t},\n\t\t);\n\t}\n\n\treturn Array.from(folders.values());\n};\n\nconst ensureTsConfig = (location: PackageLocation) => {\n\tconst tsconfigPath = path.join(location.scriptsDir, \"tsconfig.json\");\n\n\tif (!fs.existsSync(tsconfigPath)) {\n\t\tconst content = {};\n\t\tapplyTsConfigOption(content);\n\n\t\tfs.writeFileSync(\n\t\t\ttsconfigPath,\n\t\t\tJSON.stringify(content, undefined, \"\\t\"),\n\t\t\t\"utf8\",\n\t\t);\n\t} else {\n\t\tconst content = JSON.parse(fs.readFileSync(tsconfigPath, \"utf8\"));\n\t\tapplyTsConfigOption(content);\n\t\tfs.writeFileSync(\n\t\t\ttsconfigPath,\n\t\t\tJSON.stringify(content, undefined, \"\\t\"),\n\t\t\t\"utf8\",\n\t\t);\n\t}\n};\n\nconst applyTsConfigOption = (data: {\n\tcompilerOptions?: { target?: string; lib?: string[] };\n}) => {\n\tdata.compilerOptions = data.compilerOptions ?? {};\n\tdata.compilerOptions.target = \"es5\";\n\tdata.compilerOptions.lib = [\"es5\", \"dom\"];\n};\n\nconst buildSortedPackageMap = (folders: PackageLocation[]) => {\n\tconst packages = Array.from(folders).reduce(\n\t\t(\n\t\t\tacc: Record<string, FolderData>,\n\t\t\tlocation,\n\t\t): Record<string, FolderData> => {\n\t\t\tconst data = readPackageNpmManifest(location);\n\n\t\t\tif (data !== undefined) {\n\t\t\t\tacc[data.name] = {\n\t\t\t\t\tdata,\n\t\t\t\t\tlocation,\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tacc[location.path] = {\n\t\t\t\t\tdata: undefined,\n\t\t\t\t\tlocation,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn acc;\n\t\t},\n\t\t{},\n\t);\n\n\tconst packageDependencies = Object.getOwnPropertyNames(packages).reduce(\n\t\t(acc, packageName) => {\n\t\t\tconst packageData = packages[packageName];\n\n\t\t\tif (packageData.data === undefined) {\n\t\t\t\tacc[packageName] = [];\n\t\t\t} else {\n\t\t\t\tacc[packageName] = Object.getOwnPropertyNames({\n\t\t\t\t\t...packageData.data.devDependencies,\n\t\t\t\t\t...packageData.data.dependencies,\n\t\t\t\t\t...packageData.data.peerDependencies,\n\t\t\t\t}).filter((packageName) => packages[packageName] !== undefined);\n\t\t\t}\n\n\t\t\treturn acc;\n\t\t},\n\t\t{},\n\t);\n\n\tconst sortedPackages = toposort(packageDependencies);\n\tconst result = new Map<string, FolderData>();\n\n\tfor (const packageName of sortedPackages) {\n\t\tresult.set(packageName, packages[packageName]);\n\t}\n\n\treturn result;\n};\n\nconst createBannerComment = (banner: BannerOptions) => {\n\tconst bannerParts: string[] = [];\n\n\tif (banner.text) {\n\t\tbannerParts.push(\" * \" + banner.text);\n\t}\n\n\t{\n\t\tconst details: string[] = [];\n\n\t\tif (banner.version) {\n\t\t\tdetails.push(`Version: ${banner.version}`);\n\t\t}\n\t\tif (banner.commit) {\n\t\t\tif (banner.commitDirty) {\n\t\t\t\tdetails.push(`Commit: ${banner.commit} (dirty)`);\n\t\t\t} else {\n\t\t\t\tdetails.push(`Commit: ${banner.commit}`);\n\t\t\t}\n\t\t}\n\t\tif (banner.date) {\n\t\t\tdetails.push(`Date: ${banner.date.toISOString()}`);\n\t\t}\n\n\t\tconst detailsText = details.map((line) => ` * ${line}`).join(\"\\n\");\n\t\tif (detailsText) {\n\t\t\tbannerParts.push(detailsText);\n\t\t}\n\t}\n\n\tconst bannerText = bannerParts.join(\"\\n\\n\");\n\n\tif (bannerText) {\n\t\treturn `/*\n${bannerText}\n*\n* @preserve\t\t\t\n*/`;\n\t}\n\n\treturn undefined;\n};\n"],"names":["logPackageMessage","name","step","index","total","numLength","undefined","toString","length","indexString","padStart","identifierString","padEnd","console","log","tryReadTsConfig","location","config","ts","readConfigFile","path","join","scriptsDir","fs","readFileSync","build","compilerOptions","lib","result","convertCompilerOptionsFromJson","options","removeComments","declaration","sourceMap","outFile","target","ScriptTarget","ES5","noEmitOnError","host","createCompilerHost","getCurrentDirectory","js","definitions","writeFile","fileName","data","writeByteOrderMark","endsWith","files","getPackageTypescriptFiles","Error","programOptions","rootNames","program","createProgram","emitResult","emit","allDiagnostics","getPreEmitDiagnostics","emitSkipped","map","createErrorMessage","error","diagnostic","file","flattenDiagnosticMessageText","messageText","line","character","getLineAndCharacterOfPosition","start","message","generateDocs","folderPath","declarationFile","outFolder","app","typedoc","Application","mediaDir","bootstrap","entryPoints","media","out","setCompilerOptions","setValue","readmePath","glob","sync","absolute","cwd","project","convert","buildFolders","outDir","clean","rmSync","recursive","workspace","detectWorkspace","folders","resolvePackagesFromArgs","directories","translate","sortedPackages","buildSortedPackageMap","skipPackagesWithoutTsFiles","ensureTsConfig","readPackageCreatorManifest","logStep","Package","size","buildResult","tscBuild","banner","createBannerComment","outputDirectory","mkdirSync","writeFileSync","encoding","minimize","minifyResult","terser","minify","ecma","code","warn","minifiedPath","includes","docs","args","Map","arg","forEach","folder","detectPackage","set","err","Array","from","values","tsconfigPath","existsSync","content","applyTsConfigOption","JSON","stringify","parse","packages","reduce","acc","readPackageNpmManifest","packageDependencies","Object","getOwnPropertyNames","packageName","packageData","devDependencies","dependencies","peerDependencies","filter","toposort","bannerParts","text","push","details","version","commit","commitDirty","date","toISOString","detailsText","bannerText"],"mappings":"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"}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var ts = require('typescript');
|
|
5
|
+
require('os');
|
|
6
|
+
var cli = require('../cli.js');
|
|
7
|
+
var scripts = require('../scripts.js');
|
|
8
|
+
require('update-notifier');
|
|
9
|
+
require('fs');
|
|
10
|
+
require('path');
|
|
11
|
+
require('yargs');
|
|
12
|
+
require('tslib');
|
|
13
|
+
require('child_process');
|
|
14
|
+
require('assert');
|
|
15
|
+
require('events');
|
|
16
|
+
require('buffer');
|
|
17
|
+
require('stream');
|
|
18
|
+
require('util');
|
|
19
|
+
require('constants');
|
|
20
|
+
require('write-pkg');
|
|
21
|
+
require('inquirer');
|
|
22
|
+
require('glob');
|
|
23
|
+
|
|
24
|
+
function _interopNamespaceDefault(e) {
|
|
25
|
+
var n = Object.create(null);
|
|
26
|
+
if (e) {
|
|
27
|
+
Object.keys(e).forEach(function (k) {
|
|
28
|
+
if (k !== 'default') {
|
|
29
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
30
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
31
|
+
enumerable: true,
|
|
32
|
+
get: function () { return e[k]; }
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
n.default = e;
|
|
38
|
+
return Object.freeze(n);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
var ts__namespace = /*#__PURE__*/_interopNamespaceDefault(ts);
|
|
42
|
+
|
|
43
|
+
function findTsNode(node, callback) {
|
|
44
|
+
let result;
|
|
45
|
+
ts__namespace.forEachChild(node, child => {
|
|
46
|
+
if (callback(child)) {
|
|
47
|
+
result = child;
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
return result;
|
|
52
|
+
}
|
|
53
|
+
function capitalizeFirstLetter(string) {
|
|
54
|
+
return (string === null || string === void 0 ? void 0 : string.charAt(0).toUpperCase()) + (string === null || string === void 0 ? void 0 : string.slice(1));
|
|
55
|
+
}
|
|
56
|
+
function parseDefault(value, type) {
|
|
57
|
+
const uType = capitalizeFirstLetter(type);
|
|
58
|
+
if (value === "null") return null;
|
|
59
|
+
switch (uType) {
|
|
60
|
+
case "LengthM":
|
|
61
|
+
case "ArcDEG":
|
|
62
|
+
case "Float":
|
|
63
|
+
return parseFloat(value);
|
|
64
|
+
case "Integer":
|
|
65
|
+
case "Int":
|
|
66
|
+
return parseInt(value);
|
|
67
|
+
case "Boolean":
|
|
68
|
+
case "Bool":
|
|
69
|
+
return value === "true";
|
|
70
|
+
case "Material":
|
|
71
|
+
case "String":
|
|
72
|
+
default:
|
|
73
|
+
return value.replace(/^"/, "").replace(/"$/, "");
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
function findEvaluatorNode(node) {
|
|
77
|
+
if (ts__namespace.isModuleDeclaration(node) && node.body && ts__namespace.isModuleDeclaration(node.body) && node.body.body) {
|
|
78
|
+
const classDeclaration = findTsNode(node.body.body, child => {
|
|
79
|
+
var _child$heritageClause;
|
|
80
|
+
if (!ts__namespace.isClassDeclaration(child)) {
|
|
81
|
+
return false;
|
|
82
|
+
}
|
|
83
|
+
const isEvaluator = (_child$heritageClause = child.heritageClauses) === null || _child$heritageClause === void 0 ? void 0 : _child$heritageClause.some(clause => {
|
|
84
|
+
if (clause.token !== ts__namespace.SyntaxKind.ExtendsKeyword) {
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
return clause.types.some(type => type.getText().includes("Evaluator"));
|
|
88
|
+
});
|
|
89
|
+
return isEvaluator ?? false;
|
|
90
|
+
});
|
|
91
|
+
return classDeclaration;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
function getParameter(evaluatorNode) {
|
|
95
|
+
var _evaluatorNode$member;
|
|
96
|
+
let memb = (_evaluatorNode$member = evaluatorNode.members) === null || _evaluatorNode$member === void 0 ? void 0 : _evaluatorNode$member.find(member => {
|
|
97
|
+
var _member$name;
|
|
98
|
+
return (member === null || member === void 0 ? void 0 : (_member$name = member.name) === null || _member$name === void 0 ? void 0 : _member$name.getText().toLowerCase()) == "create";
|
|
99
|
+
});
|
|
100
|
+
if (ts__namespace.isMethodDeclaration(memb)) {
|
|
101
|
+
return memb.parameters.find(para => para.name.getText().toLowerCase() == "parameters");
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
function findParametersInterface(node, interfaceName) {
|
|
105
|
+
if (ts__namespace.isModuleDeclaration(node) && node.body && ts__namespace.isModuleDeclaration(node.body) && node.body.body) {
|
|
106
|
+
const interfaceDeclaration = findTsNode(node.body.body, child => ts__namespace.isInterfaceDeclaration(child) && child.name.getText() == interfaceName);
|
|
107
|
+
return interfaceDeclaration;
|
|
108
|
+
}
|
|
109
|
+
return undefined;
|
|
110
|
+
}
|
|
111
|
+
function getModuleName(sourceFile) {
|
|
112
|
+
let fullName = "";
|
|
113
|
+
if (ts__namespace.isModuleDeclaration(sourceFile)) {
|
|
114
|
+
fullName += sourceFile.name.getText();
|
|
115
|
+
let packageB = sourceFile.body;
|
|
116
|
+
if (ts__namespace.isModuleDeclaration(packageB)) {
|
|
117
|
+
fullName += "." + packageB.name.getText();
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return fullName;
|
|
121
|
+
}
|
|
122
|
+
function genParameters(interfac) {
|
|
123
|
+
return interfac.members.map((member, i) => {
|
|
124
|
+
let para = {};
|
|
125
|
+
para.Name = member.name.getText();
|
|
126
|
+
if (para.Name.length > 45) throw new Error(`Parameter name length >45 '${para.Name}'`);
|
|
127
|
+
let rawDocTags = ts__namespace.getJSDocTags(member);
|
|
128
|
+
if (rawDocTags.length) {
|
|
129
|
+
let dict = getTagDict(rawDocTags);
|
|
130
|
+
if (dict.summary) para.Description = dict.summary;
|
|
131
|
+
if (dict.creatorType) para.Type = dict.creatorType;
|
|
132
|
+
if (dict.default && dict.creatorType) para.Default = parseDefault(dict.default, dict.creatorType);
|
|
133
|
+
para.DisplayIndex = i + 1;
|
|
134
|
+
}
|
|
135
|
+
return para;
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
function getTagDict(tags) {
|
|
139
|
+
let dict = {};
|
|
140
|
+
tags.forEach(tag => {
|
|
141
|
+
dict[tag.tagName.text] = tag.comment;
|
|
142
|
+
});
|
|
143
|
+
return dict;
|
|
144
|
+
}
|
|
145
|
+
function findParametersInterfaceInFiles(program, fileList, name) {
|
|
146
|
+
for (const file of fileList) {
|
|
147
|
+
const sourceFile = program.getSourceFile(file);
|
|
148
|
+
if (sourceFile === undefined) {
|
|
149
|
+
throw new Error(`Expected a source file to exist for file name "${file}"`);
|
|
150
|
+
}
|
|
151
|
+
let interfaceDeclaration;
|
|
152
|
+
ts__namespace.forEachChild(sourceFile, node => {
|
|
153
|
+
interfaceDeclaration = findParametersInterface(node, name);
|
|
154
|
+
return interfaceDeclaration !== undefined;
|
|
155
|
+
});
|
|
156
|
+
if (interfaceDeclaration !== undefined) {
|
|
157
|
+
return interfaceDeclaration;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return undefined;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Extracts and returns script array for _Index.json from a src folder
|
|
165
|
+
*
|
|
166
|
+
* @param folderPath path to a src folder
|
|
167
|
+
*/
|
|
168
|
+
function extract(location, ignore = []) {
|
|
169
|
+
const files = scripts.getPackageTypescriptFiles(location);
|
|
170
|
+
const filtered = files.filter(path => {
|
|
171
|
+
return !ignore.some(suffix => path.endsWith(suffix));
|
|
172
|
+
});
|
|
173
|
+
let arr = new Array();
|
|
174
|
+
let program = ts__namespace.createProgram(filtered, {
|
|
175
|
+
allowJs: true
|
|
176
|
+
});
|
|
177
|
+
program.getTypeChecker();
|
|
178
|
+
filtered.forEach(file => {
|
|
179
|
+
// Create a Program to represent the project, then pull out the
|
|
180
|
+
// source file to parse its AST.
|
|
181
|
+
const sourceFile = program.getSourceFile(file);
|
|
182
|
+
|
|
183
|
+
// Loop through the root AST nodes of the file
|
|
184
|
+
ts__namespace.forEachChild(sourceFile, node => {
|
|
185
|
+
let obj = {};
|
|
186
|
+
const evalNode = findEvaluatorNode(node);
|
|
187
|
+
if (evalNode === undefined) {
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
let moduleName = getModuleName(node);
|
|
191
|
+
if (evalNode.name === undefined) {
|
|
192
|
+
throw new Error(`Expected evaluator class to have a name`);
|
|
193
|
+
}
|
|
194
|
+
obj.Name = moduleName + "." + evalNode.name.getText();
|
|
195
|
+
if (obj.Name.length > 45) throw new Error(`Package name length >45 '${obj.Name}'`);
|
|
196
|
+
let para = getParameter(evalNode);
|
|
197
|
+
let paraName = (para === null || para === void 0 ? void 0 : para.type).typeName.getText();
|
|
198
|
+
let interfac = findParametersInterfaceInFiles(program, filtered, paraName);
|
|
199
|
+
if (interfac === undefined) {
|
|
200
|
+
throw new Error(`Failed to find parameters type declaration for evaluator ${evalNode.name.getText()}`);
|
|
201
|
+
}
|
|
202
|
+
let rawDocTags = ts__namespace.getJSDocTags(evalNode);
|
|
203
|
+
if (rawDocTags.length) {
|
|
204
|
+
let dict = getTagDict(rawDocTags);
|
|
205
|
+
if (dict.summary) obj.Description = dict.summary;
|
|
206
|
+
if (dict.creatorType) obj.Type = dict.creatorType;
|
|
207
|
+
}
|
|
208
|
+
obj.Parameters = genParameters(interfac);
|
|
209
|
+
arr.push(obj);
|
|
210
|
+
});
|
|
211
|
+
});
|
|
212
|
+
cli.writePackageCreatorIndex(location, arr);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
exports.extract = extract;
|
|
216
|
+
//# sourceMappingURL=generate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.js","sources":["../../src/commands/generate.ts"],"sourcesContent":["import * as ts from \"typescript\";\nimport os from \"os\";\n\nimport { PackageLocation, writePackageCreatorIndex } from \"../lib/package\";\nimport { getPackageTypescriptFiles } from \"../lib/scripts\";\n\ninterface IScript {\n\tName: string;\n\tDescription: string;\n\tType: TScriptType;\n\tParameters: IScriptParameter[];\n}\n\ninterface IScriptParameter {\n\tName: string;\n\tDescription: string;\n\tType: TType;\n\tDefault: string | number | boolean | null;\n\tDisplayIndex: number;\n}\n\ntype TScriptType = \"Evaluator\" | \"Interactor\";\n\ntype TType =\n\t| \"String\"\n\t| \"LengthM\"\n\t| \"Material\"\n\t| \"Boolean\"\n\t| \"Bool\"\n\t| \"ArcDEG\"\n\t| \"Integer\"\n\t| \"Int\"\n\t| \"Float\";\n\ntype TParams = {\n\t[key: string]: string;\n};\n\nfunction findTsNode<T extends ts.Node>(\n\tnode: ts.Node,\n\tcallback: (node: ts.Node) => node is T,\n): T | undefined;\nfunction findTsNode(\n\tnode: ts.Node,\n\tcallback: (node: ts.Node) => boolean,\n): ts.Node | undefined;\nfunction findTsNode(\n\tnode: ts.Node,\n\tcallback: (node: ts.Node) => boolean,\n): ts.Node | undefined {\n\tlet result: ts.Node | undefined;\n\n\tts.forEachChild(node, (child) => {\n\t\tif (callback(child)) {\n\t\t\tresult = child;\n\t\t\treturn true;\n\t\t}\n\t});\n\n\treturn result;\n}\n\nfunction getParamsFromJsDoc(text: string): TParams {\n\tlet lines = text.split(os.EOL);\n\tlet splitLines = lines.map((line) => line.split(\":\").map((s) => s.trim()));\n\tlet params = {};\n\tsplitLines\n\t\t.filter((line) => line.length > 1)\n\t\t.forEach((line) => {\n\t\t\tparams[line[0]] = line[1];\n\t\t});\n\n\treturn params;\n}\n\nfunction getDescFromJsDoc(text: string): string {\n\tlet lines = text.split(os.EOL);\n\tlet splitLines = lines.map((line) => line.split(\":\").map((s) => s.trim()));\n\tlet desc = \"\";\n\tsplitLines\n\t\t.filter((line) => line.length == 1)\n\t\t.forEach((line, i) => {\n\t\t\tdesc += (i == 0 ? \"\" : \" \") + line[0];\n\t\t});\n\n\treturn desc.substring(0, 98);\n}\n\nfunction capitalizeFirstLetter(string) {\n\treturn string?.charAt(0).toUpperCase() + string?.slice(1);\n}\n\nfunction parseDefault(value: string, type: string) {\n\tconst uType: TType = capitalizeFirstLetter(type);\n\tif (value === \"null\") return null;\n\tswitch (uType) {\n\t\tcase \"LengthM\":\n\t\tcase \"ArcDEG\":\n\t\tcase \"Float\":\n\t\t\treturn parseFloat(value);\n\t\tcase \"Integer\":\n\t\tcase \"Int\":\n\t\t\treturn parseInt(value);\n\t\tcase \"Boolean\":\n\t\tcase \"Bool\":\n\t\t\treturn value === \"true\";\n\t\tcase \"Material\":\n\t\tcase \"String\":\n\t\tdefault:\n\t\t\treturn value.replace(/^\"/, \"\").replace(/\"$/, \"\");\n\t}\n}\n\nfunction findEvaluatorNode(node: ts.Node): ts.ClassDeclaration | undefined {\n\tif (\n\t\tts.isModuleDeclaration(node) &&\n\t\tnode.body &&\n\t\tts.isModuleDeclaration(node.body) &&\n\t\tnode.body.body\n\t) {\n\t\tconst classDeclaration = findTsNode(\n\t\t\tnode.body.body,\n\t\t\t(child): child is ts.ClassDeclaration => {\n\t\t\t\tif (!ts.isClassDeclaration(child)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tconst isEvaluator = child.heritageClauses?.some((clause) => {\n\t\t\t\t\tif (clause.token !== ts.SyntaxKind.ExtendsKeyword) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn clause.types.some((type) =>\n\t\t\t\t\t\ttype.getText().includes(\"Evaluator\"),\n\t\t\t\t\t);\n\t\t\t\t});\n\n\t\t\t\treturn isEvaluator ?? false;\n\t\t\t},\n\t\t);\n\n\t\treturn classDeclaration;\n\t}\n}\n\nfunction getParameter(evaluatorNode: ts.ClassDeclaration) {\n\tlet memb = evaluatorNode.members?.find(\n\t\t(member) => member?.name?.getText().toLowerCase() == \"create\",\n\t);\n\tif (ts.isMethodDeclaration(memb!)) {\n\t\treturn memb.parameters.find(\n\t\t\t(para) => para.name.getText().toLowerCase() == \"parameters\",\n\t\t);\n\t}\n}\n\nfunction findParametersInterface(\n\tnode: ts.Node,\n\tinterfaceName: string,\n): ts.InterfaceDeclaration | undefined {\n\tif (\n\t\tts.isModuleDeclaration(node) &&\n\t\tnode.body &&\n\t\tts.isModuleDeclaration(node.body) &&\n\t\tnode.body.body\n\t) {\n\t\tconst interfaceDeclaration = findTsNode(\n\t\t\tnode.body.body,\n\t\t\t(child): child is ts.InterfaceDeclaration =>\n\t\t\t\tts.isInterfaceDeclaration(child) &&\n\t\t\t\tchild.name.getText() == interfaceName,\n\t\t);\n\n\t\treturn interfaceDeclaration;\n\t}\n\n\treturn undefined;\n}\n\nfunction getModuleName(sourceFile: ts.Node): string {\n\tlet fullName = \"\";\n\tif (ts.isModuleDeclaration(sourceFile)) {\n\t\tfullName += sourceFile.name.getText();\n\n\t\tlet packageB = sourceFile.body!;\n\t\tif (ts.isModuleDeclaration(packageB)) {\n\t\t\tfullName += \".\" + packageB.name.getText();\n\t\t}\n\t}\n\treturn fullName;\n}\n\nfunction genParameters(interfac: ts.InterfaceDeclaration): IScriptParameter[] {\n\treturn interfac.members.map((member, i) => {\n\t\tlet para = {} as IScriptParameter;\n\n\t\tpara.Name = member.name!.getText();\n\t\tif (para.Name.length > 45)\n\t\t\tthrow new Error(`Parameter name length >45 '${para.Name}'`);\n\n\t\tlet rawDocTags = ts.getJSDocTags(member);\n\t\tif (rawDocTags.length) {\n\t\t\tlet dict = getTagDict(rawDocTags);\n\t\t\tif (dict.summary) para.Description = dict.summary;\n\t\t\tif (dict.creatorType) para.Type = dict.creatorType as TType;\n\t\t\tif (dict.default && dict.creatorType)\n\t\t\t\tpara.Default = parseDefault(dict.default, dict.creatorType);\n\t\t\tpara.DisplayIndex = i + 1;\n\t\t}\n\t\treturn para;\n\t});\n}\n\ninterface IDocTags {\n\tdefault?: string;\n\tcreatorType?: string;\n\tsummary?: string;\n}\n\nfunction getTagDict(tags: any): IDocTags {\n\tlet dict = {};\n\ttags.forEach((tag) => {\n\t\tdict[tag.tagName.text] = tag.comment;\n\t});\n\treturn dict;\n}\n\nfunction findParametersInterfaceInFiles(\n\tprogram: ts.Program,\n\tfileList: string[],\n\tname: string,\n): ts.InterfaceDeclaration | undefined {\n\tfor (const file of fileList) {\n\t\tconst sourceFile = program.getSourceFile(file);\n\n\t\tif (sourceFile === undefined) {\n\t\t\tthrow new Error(\n\t\t\t\t`Expected a source file to exist for file name \"${file}\"`,\n\t\t\t);\n\t\t}\n\n\t\tlet interfaceDeclaration: ts.InterfaceDeclaration | undefined;\n\n\t\tts.forEachChild(sourceFile, (node) => {\n\t\t\tinterfaceDeclaration = findParametersInterface(node, name);\n\n\t\t\treturn interfaceDeclaration !== undefined;\n\t\t});\n\n\t\tif (interfaceDeclaration !== undefined) {\n\t\t\treturn interfaceDeclaration;\n\t\t}\n\t}\n\n\treturn undefined;\n}\n\n/**\n * Extracts and returns script array for _Index.json from a src folder\n *\n * @param folderPath path to a src folder\n */\nexport function extract(location: PackageLocation, ignore: string[] = []) {\n\tconst files = getPackageTypescriptFiles(location);\n\tconst filtered = files.filter((path) => {\n\t\treturn !ignore.some((suffix) => path.endsWith(suffix));\n\t});\n\tlet arr = new Array<IScript>();\n\n\tlet program = ts.createProgram(filtered, { allowJs: true });\n\tprogram.getTypeChecker();\n\tfiltered.forEach((file) => {\n\t\t// Create a Program to represent the project, then pull out the\n\t\t// source file to parse its AST.\n\t\tconst sourceFile = program.getSourceFile(file);\n\n\t\t// Loop through the root AST nodes of the file\n\t\tts.forEachChild(sourceFile!, (node) => {\n\t\t\tlet obj = {} as IScript;\n\t\t\tconst evalNode = findEvaluatorNode(node);\n\n\t\t\tif (evalNode === undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet moduleName = getModuleName(node);\n\n\t\t\tif (evalNode.name === undefined) {\n\t\t\t\tthrow new Error(`Expected evaluator class to have a name`);\n\t\t\t}\n\n\t\t\tobj.Name = moduleName + \".\" + evalNode.name.getText();\n\t\t\tif (obj.Name.length > 45)\n\t\t\t\tthrow new Error(`Package name length >45 '${obj.Name}'`);\n\n\t\t\tlet para = getParameter(evalNode);\n\t\t\tlet paraName = (para?.type as any).typeName.getText();\n\t\t\tlet interfac = findParametersInterfaceInFiles(\n\t\t\t\tprogram,\n\t\t\t\tfiltered,\n\t\t\t\tparaName,\n\t\t\t);\n\n\t\t\tif (interfac === undefined) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Failed to find parameters type declaration for evaluator ${evalNode.name.getText()}`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tlet rawDocTags = ts.getJSDocTags(evalNode);\n\t\t\tif (rawDocTags.length) {\n\t\t\t\tlet dict = getTagDict(rawDocTags);\n\t\t\t\tif (dict.summary) obj.Description = dict.summary;\n\t\t\t\tif (dict.creatorType)\n\t\t\t\t\tobj.Type = dict.creatorType as TScriptType;\n\t\t\t}\n\n\t\t\tobj.Parameters = genParameters(interfac);\n\t\t\tarr.push(obj);\n\t\t});\n\t});\n\n\twritePackageCreatorIndex(location, arr);\n}\n"],"names":["findTsNode","node","callback","result","ts","forEachChild","child","capitalizeFirstLetter","string","charAt","toUpperCase","slice","parseDefault","value","type","uType","parseFloat","parseInt","replace","findEvaluatorNode","isModuleDeclaration","body","classDeclaration","isClassDeclaration","isEvaluator","heritageClauses","some","clause","token","SyntaxKind","ExtendsKeyword","types","getText","includes","getParameter","evaluatorNode","memb","members","find","member","name","toLowerCase","isMethodDeclaration","parameters","para","findParametersInterface","interfaceName","interfaceDeclaration","isInterfaceDeclaration","undefined","getModuleName","sourceFile","fullName","packageB","genParameters","interfac","map","i","Name","length","Error","rawDocTags","getJSDocTags","dict","getTagDict","summary","Description","creatorType","Type","default","Default","DisplayIndex","tags","forEach","tag","tagName","text","comment","findParametersInterfaceInFiles","program","fileList","file","getSourceFile","extract","location","ignore","files","getPackageTypescriptFiles","filtered","filter","path","suffix","endsWith","arr","Array","createProgram","allowJs","getTypeChecker","obj","evalNode","moduleName","paraName","typeName","Parameters","push","writePackageCreatorIndex"],"mappings":"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"}
|