@lionweb/cli 0.9.0-beta.1 → 0.9.0-beta.3
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/CHANGELOG.md +20 -5
- package/dist/fs-utils.d.ts +3 -0
- package/dist/fs-utils.d.ts.map +1 -0
- package/dist/fs-utils.js +18 -0
- package/dist/fs-utils.js.map +1 -0
- package/dist/infer-languages-command.js +2 -2
- package/dist/infer-languages-command.js.map +1 -1
- package/dist/lionweb-cli.js +20 -6
- package/dist/lionweb-cli.js.map +1 -1
- package/dist/m2/diagram-command.d.ts.map +1 -0
- package/dist/m2/diagram-command.js +21 -0
- package/dist/m2/diagram-command.js.map +1 -0
- package/dist/m2/generate-class-core-types-command.d.ts +4 -0
- package/dist/m2/generate-class-core-types-command.d.ts.map +1 -0
- package/dist/m2/generate-class-core-types-command.js +62 -0
- package/dist/m2/generate-class-core-types-command.js.map +1 -0
- package/dist/m2/generate-ts-types-command.d.ts.map +1 -0
- package/dist/m2/generate-ts-types-command.js +41 -0
- package/dist/m2/generate-ts-types-command.js.map +1 -0
- package/package.json +7 -6
- package/src/fs-utils.ts +19 -0
- package/src/infer-languages-command.ts +3 -2
- package/src/lionweb-cli.ts +22 -6
- package/src/m2/diagram-command.ts +25 -0
- package/src/m2/generate-class-core-types-command.ts +76 -0
- package/src/m2/generate-ts-types-command.ts +56 -0
- package/dist/m3/diagram-command.d.ts.map +0 -1
- package/dist/m3/diagram-command.js +0 -22
- package/dist/m3/diagram-command.js.map +0 -1
- package/dist/m3/generate-ts-types-command.d.ts.map +0 -1
- package/dist/m3/generate-ts-types-command.js +0 -42
- package/dist/m3/generate-ts-types-command.js.map +0 -1
- package/src/m3/diagram-command.ts +0 -21
- package/src/m3/generate-ts-types-command.ts +0 -48
- /package/dist/{m3 → m2}/diagram-command.d.ts +0 -0
- /package/dist/{m3 → m2}/generate-ts-types-command.d.ts +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.9.0 — not yet released
|
|
4
|
+
|
|
5
|
+
* Add a command `generate-class-core-types` to invoke the `@lionweb/class-core-generator`.
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
## 0.8.0
|
|
9
|
+
|
|
10
|
+
(No changes)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
## 0.7.2
|
|
14
|
+
|
|
15
|
+
(No changes)
|
|
16
|
+
|
|
17
|
+
|
|
3
18
|
## 0.7.1
|
|
4
19
|
|
|
5
20
|
(The 0.7.0 release was deprecated because its `validation` package was faulty.)
|
|
@@ -16,7 +31,7 @@ Changes in this version:
|
|
|
16
31
|
|
|
17
32
|
Dependencies: `@lionweb/core` and `@lionweb/utilities` version 0.6.12
|
|
18
33
|
|
|
19
|
-
(
|
|
34
|
+
(No changes)
|
|
20
35
|
|
|
21
36
|
|
|
22
37
|
## 0.6.12
|
|
@@ -30,7 +45,7 @@ Dependencies: `@lionweb/core` and `@lionweb/utilities` version 0.6.11
|
|
|
30
45
|
|
|
31
46
|
Dependencies: `@lionweb/core` and `@lionweb/utilities` version 0.6.10
|
|
32
47
|
|
|
33
|
-
(
|
|
48
|
+
(No changes)
|
|
34
49
|
|
|
35
50
|
|
|
36
51
|
## 0.6.10
|
|
@@ -44,21 +59,21 @@ Dependencies: `@lionweb/core` and `@lionweb/utilities` version 0.6.9
|
|
|
44
59
|
|
|
45
60
|
Dependencies: `@lionweb/core` and `@lionweb/utilities` version 0.6.8
|
|
46
61
|
|
|
47
|
-
(
|
|
62
|
+
(No changes)
|
|
48
63
|
|
|
49
64
|
|
|
50
65
|
## 0.6.8
|
|
51
66
|
|
|
52
67
|
Dependencies: `@lionweb/core` and `@lionweb/utilities` version 0.6.7
|
|
53
68
|
|
|
54
|
-
(
|
|
69
|
+
(No changes)
|
|
55
70
|
|
|
56
71
|
|
|
57
72
|
## 0.6.7
|
|
58
73
|
|
|
59
74
|
Dependencies: `@lionweb/core` and `@lionweb/utilities` version 0.6.6
|
|
60
75
|
|
|
61
|
-
(
|
|
76
|
+
(No changes)
|
|
62
77
|
|
|
63
78
|
|
|
64
79
|
## 0.6.6
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs-utils.d.ts","sourceRoot":"","sources":["../src/fs-utils.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,iBAAiB,GAAU,MAAM,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAQhF,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,SAI1C,CAAA"}
|
package/dist/fs-utils.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { readFile } from "fs/promises";
|
|
2
|
+
import { existsSync, mkdirSync, statSync } from "fs";
|
|
3
|
+
export const tryReadFileAsText = async (path) => {
|
|
4
|
+
try {
|
|
5
|
+
return (await readFile(path)).toString();
|
|
6
|
+
}
|
|
7
|
+
catch (e) {
|
|
8
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
9
|
+
console.error(`"${path}" does not point to a readable file: ${e.message}`);
|
|
10
|
+
return undefined;
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
export const ensurePathSync = (path) => {
|
|
14
|
+
if (!(existsSync(path) && statSync(path).isDirectory())) {
|
|
15
|
+
mkdirSync(path);
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=fs-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs-utils.js","sourceRoot":"","sources":["../src/fs-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAA;AAEpD,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EAAE,IAAY,EAA+B,EAAE;IACjF,IAAI,CAAC;QACD,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;IAC5C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,8DAA8D;QAC9D,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,wCAAyC,CAAS,CAAC,OAAO,EAAE,CAAC,CAAA;QACnF,OAAO,SAAS,CAAA;IACpB,CAAC;AACL,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,IAAY,EAAE,EAAE;IAC3C,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;QACtD,SAAS,CAAC,IAAI,CAAC,CAAA;IACnB,CAAC;AACL,CAAC,CAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { serializeLanguages } from "@lionweb/core";
|
|
2
2
|
import { asPrettyJsonString } from "@lionweb/ts-utils";
|
|
3
3
|
import { inferLanguagesFromSerializationChunk, readSerializationChunk } from "@lionweb/utilities";
|
|
4
|
-
import {
|
|
4
|
+
import { writeFile } from "fs/promises";
|
|
5
5
|
import path from "path";
|
|
6
6
|
export const inferLanguages = async (filePath) => {
|
|
7
7
|
const dirName = path.dirname(filePath);
|
|
@@ -9,7 +9,7 @@ export const inferLanguages = async (filePath) => {
|
|
|
9
9
|
const languages = inferLanguagesFromSerializationChunk(chunk);
|
|
10
10
|
for (const language of languages) {
|
|
11
11
|
const languageFile = path.join(dirName, `${language.name}.language.json`);
|
|
12
|
-
|
|
12
|
+
await writeFile(languageFile, asPrettyJsonString(serializeLanguages(language)));
|
|
13
13
|
console.log(`Language ${language.name} has been generated: "${languageFile}"`);
|
|
14
14
|
}
|
|
15
15
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"infer-languages-command.js","sourceRoot":"","sources":["../src/infer-languages-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,oCAAoC,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AACjG,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"infer-languages-command.js","sourceRoot":"","sources":["../src/infer-languages-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,EAAE,oCAAoC,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AACjG,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,IAAI,MAAM,MAAM,CAAA;AAEvB,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,QAAgB,EAAE,EAAE;IACrD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IACtC,MAAM,KAAK,GAAG,MAAM,sBAAsB,CAAC,QAAQ,CAAC,CAAA;IAEpD,MAAM,SAAS,GAAG,oCAAoC,CAAC,KAAK,CAAC,CAAA;IAC7D,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QAC/B,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC,IAAI,gBAAgB,CAAC,CAAA;QACzE,MAAM,SAAS,CAAC,YAAY,EAAE,kBAAkB,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;QAC/E,OAAO,CAAC,GAAG,CAAC,YAAY,QAAQ,CAAC,IAAI,yBAAyB,YAAY,GAAG,CAAC,CAAA;IAClF,CAAC;AACL,CAAC,CAAA"}
|
package/dist/lionweb-cli.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { argv } from "process";
|
|
3
3
|
import { inferLanguages } from "./infer-languages-command.js";
|
|
4
|
-
import { diagramFromSerializationChunkAt } from "./
|
|
5
|
-
import {
|
|
4
|
+
import { diagramFromSerializationChunkAt } from "./m2/diagram-command.js";
|
|
5
|
+
import { generateClassCoreTypes, headerFlag, notVerboseFlag } from "./m2/generate-class-core-types-command.js";
|
|
6
|
+
import { generateTsTypesWith } from "./m2/generate-ts-types-command.js";
|
|
6
7
|
import { diffSerializationChunks } from "./serialization/diff-command.js";
|
|
7
8
|
import { executeMeasureCommand } from "./serialization/measure-command.js";
|
|
8
9
|
import { repairSerializationChunkAt } from "./serialization/repair-command.js";
|
|
@@ -19,6 +20,7 @@ const main = async (args) => {
|
|
|
19
20
|
const SORT_COMMAND = "sort";
|
|
20
21
|
const TEXTUALIZE_COMMAND = "textualize";
|
|
21
22
|
const VALIDATE_COMMAND = "validate";
|
|
23
|
+
const GENERATE_CLASS_CORE_TYPES = "generate-class-core-types";
|
|
22
24
|
const commands = [
|
|
23
25
|
DIAGRAM_COMMAND,
|
|
24
26
|
DIFF_COMMAND,
|
|
@@ -28,7 +30,8 @@ const main = async (args) => {
|
|
|
28
30
|
REPAIR_COMMAND,
|
|
29
31
|
SORT_COMMAND,
|
|
30
32
|
TEXTUALIZE_COMMAND,
|
|
31
|
-
VALIDATE_COMMAND
|
|
33
|
+
VALIDATE_COMMAND,
|
|
34
|
+
GENERATE_CLASS_CORE_TYPES
|
|
32
35
|
].sort();
|
|
33
36
|
if (args.length <= 2) {
|
|
34
37
|
console.log(`lionweb-cli is a LionWeb utility around LionWeb-TypeScript
|
|
@@ -123,7 +126,7 @@ textual syntax is used, unless a flag '--asRegular' is provided.
|
|
|
123
126
|
break;
|
|
124
127
|
}
|
|
125
128
|
case VALIDATE_COMMAND: {
|
|
126
|
-
if (commandArgs.length
|
|
129
|
+
if (commandArgs.length !== 1) {
|
|
127
130
|
console.log(`The ${VALIDATE_COMMAND} command validates a serialization chunk.
|
|
128
131
|
Usage: npx @lionweb/cli ${VALIDATE_COMMAND} <path_to_chunk>`);
|
|
129
132
|
}
|
|
@@ -133,14 +136,25 @@ Usage: npx @lionweb/cli ${VALIDATE_COMMAND} <path_to_chunk>`);
|
|
|
133
136
|
break;
|
|
134
137
|
}
|
|
135
138
|
case INFER_LANGUAGES_COMMAND: {
|
|
136
|
-
if (commandArgs.length
|
|
137
|
-
console.log(`The ${INFER_LANGUAGES_COMMAND} command infer language(s) from a given serialization chunk.
|
|
139
|
+
if (commandArgs.length !== 1) {
|
|
140
|
+
console.log(`The ${INFER_LANGUAGES_COMMAND} command infer language(s) from a given serialization chunk.
|
|
141
|
+
Usage: npx @lionweb/cli ${INFER_LANGUAGES_COMMAND} <path_to_chunk>`);
|
|
138
142
|
}
|
|
139
143
|
else {
|
|
140
144
|
await inferLanguages(commandArgs[0]);
|
|
141
145
|
}
|
|
142
146
|
return;
|
|
143
147
|
}
|
|
148
|
+
case GENERATE_CLASS_CORE_TYPES: {
|
|
149
|
+
if (commandArgs.length === 0) {
|
|
150
|
+
console.log(`The ${GENERATE_CLASS_CORE_TYPES} command generates an API that’s based on the @lionweb/class-core from a given serialization chunk containing one or more languages.
|
|
151
|
+
Usage: npx @lionweb/cli ${GENERATE_CLASS_CORE_TYPES} <path_to_chunk> <path_to_generate_to> [--${headerFlag} <path_to_file_with_header_text] [--${notVerboseFlag}]`);
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
await generateClassCoreTypes(commandArgs);
|
|
155
|
+
}
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
144
158
|
default: {
|
|
145
159
|
console.error(`command "${command}" is not recognized`);
|
|
146
160
|
}
|
package/dist/lionweb-cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lionweb-cli.js","sourceRoot":"","sources":["../src/lionweb-cli.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAE7D,OAAO,EAAE,+BAA+B,EAAE,MAAM,yBAAyB,CAAA;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAA;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAA;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAA;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAA;AAC9E,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAA;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAA;AAChF,OAAO,EAAE,mCAAmC,EAAE,MAAM,uBAAuB,CAAA;AAE3E,MAAM,IAAI,GAAG,KAAK,EAAE,IAAc,EAAE,EAAE;IAClC,MAAM,eAAe,GAAG,SAAS,CAAA;IACjC,MAAM,YAAY,GAAG,MAAM,CAAA;IAC3B,MAAM,yBAAyB,GAAG,mBAAmB,CAAA;IACrD,MAAM,uBAAuB,GAAG,iBAAiB,CAAA;IACjD,MAAM,eAAe,GAAG,SAAS,CAAA;IACjC,MAAM,cAAc,GAAG,QAAQ,CAAA;IAC/B,MAAM,YAAY,GAAG,MAAM,CAAA;IAC3B,MAAM,kBAAkB,GAAG,YAAY,CAAA;IACvC,MAAM,gBAAgB,GAAG,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"lionweb-cli.js","sourceRoot":"","sources":["../src/lionweb-cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagram-command.d.ts","sourceRoot":"","sources":["../../src/m2/diagram-command.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,+BAA+B,GAAU,MAAM,MAAM,kBAkBjE,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { AggregatingProblemReporter, deserializeLanguagesFrom } from "@lionweb/core";
|
|
2
|
+
import { generateMermaidForLanguage, generatePlantUmlForLanguage, tryReadSerializationChunk } from "@lionweb/utilities";
|
|
3
|
+
import { writeFile } from "fs/promises";
|
|
4
|
+
import { dirname } from "path";
|
|
5
|
+
export const diagramFromSerializationChunkAt = async (path) => {
|
|
6
|
+
const jsonOrError = await tryReadSerializationChunk(path);
|
|
7
|
+
if (jsonOrError instanceof Error) {
|
|
8
|
+
console.error(`"${path}" does not point to a valid JSON serialization of a language: ${jsonOrError.message}`);
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
const dir = dirname(path);
|
|
12
|
+
const problemReporter = new AggregatingProblemReporter();
|
|
13
|
+
const languages = deserializeLanguagesFrom({ serializationChunk: jsonOrError, problemReporter });
|
|
14
|
+
problemReporter.reportAllProblemsOnConsole();
|
|
15
|
+
await Promise.all(languages.flatMap((language) => [
|
|
16
|
+
writeFile(`${dir}/${language.name}.puml`, generatePlantUmlForLanguage(language)),
|
|
17
|
+
writeFile(`${dir}/${language.name}.md`, generateMermaidForLanguage(language))
|
|
18
|
+
]));
|
|
19
|
+
console.log(`generated diagrams: "${path}" -> "${dir}/"`);
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=diagram-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagram-command.js","sourceRoot":"","sources":["../../src/m2/diagram-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAA;AACpF,OAAO,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAA;AACvH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAE9B,MAAM,CAAC,MAAM,+BAA+B,GAAG,KAAK,EAAE,IAAY,EAAE,EAAE;IAClE,MAAM,WAAW,GAAG,MAAM,yBAAyB,CAAC,IAAI,CAAC,CAAA;IACzD,IAAI,WAAW,YAAY,KAAK,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,iEAAiE,WAAW,CAAC,OAAO,EAAE,CAAC,CAAA;QAC7G,OAAM;IACV,CAAC;IAED,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACzB,MAAM,eAAe,GAAG,IAAI,0BAA0B,EAAE,CAAA;IACxD,MAAM,SAAS,GAAG,wBAAwB,CAAC,EAAE,kBAAkB,EAAE,WAAW,EAAE,eAAe,EAAC,CAAC,CAAA;IAC/F,eAAe,CAAC,0BAA0B,EAAE,CAAA;IAC5C,MAAM,OAAO,CAAC,GAAG,CACb,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC;QAC5B,SAAS,CAAC,GAAG,GAAG,IAAI,QAAQ,CAAC,IAAI,OAAO,EAAE,2BAA2B,CAAC,QAAQ,CAAC,CAAC;QAChF,SAAS,CAAC,GAAG,GAAG,IAAI,QAAQ,CAAC,IAAI,KAAK,EAAE,0BAA0B,CAAC,QAAQ,CAAC,CAAC;KAChF,CAAC,CACL,CAAA;IACD,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,SAAS,GAAG,IAAI,CAAC,CAAA;AAC7D,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-class-core-types-command.d.ts","sourceRoot":"","sources":["../../src/m2/generate-class-core-types-command.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,UAAU,WAAW,CAAA;AAClC,eAAO,MAAM,cAAc,gBAAgB,CAAA;AAkD3C,eAAO,MAAM,sBAAsB,GAAU,MAAM,MAAM,EAAE,kBAiB1D,CAAA"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { exit } from "process";
|
|
2
|
+
import { generateApiFromLanguages } from "@lionweb/class-core-generator";
|
|
3
|
+
import { deserializeLanguages } from "@lionweb/core";
|
|
4
|
+
import { readSerializationChunk } from "@lionweb/utilities";
|
|
5
|
+
import { ensurePathSync, tryReadFileAsText } from "../fs-utils.js";
|
|
6
|
+
export const headerFlag = "header";
|
|
7
|
+
export const notVerboseFlag = "not-verbose";
|
|
8
|
+
const parseArgs = (args) => {
|
|
9
|
+
const properArgs = [];
|
|
10
|
+
let nextArgIsHeaderPath = false;
|
|
11
|
+
let notVerbose = false;
|
|
12
|
+
let headerPath;
|
|
13
|
+
let multipleHeaderPathsReported = false;
|
|
14
|
+
args.forEach((arg) => {
|
|
15
|
+
if (arg === `--${headerFlag}`) {
|
|
16
|
+
nextArgIsHeaderPath = true;
|
|
17
|
+
}
|
|
18
|
+
else if (arg === `--${notVerboseFlag}`) {
|
|
19
|
+
notVerbose = true;
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
if (nextArgIsHeaderPath) {
|
|
23
|
+
if (headerPath !== undefined && !multipleHeaderPathsReported) {
|
|
24
|
+
console.error(`Multiple header paths given: taking first, and ignoring the rest.`);
|
|
25
|
+
multipleHeaderPathsReported = true;
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
headerPath = arg;
|
|
29
|
+
nextArgIsHeaderPath = false;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
properArgs.push(arg);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
if (properArgs.length !== 2) {
|
|
38
|
+
console.error(`Expected 2 arguments <path_to_chunk> and <path_to_generate_in> but got ${properArgs} instead — exiting.`);
|
|
39
|
+
exit(2);
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
chunkPath: properArgs[0],
|
|
43
|
+
genPath: properArgs[1],
|
|
44
|
+
notVerbose,
|
|
45
|
+
headerPath
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
export const generateClassCoreTypes = async (args) => {
|
|
49
|
+
const { chunkPath, genPath, headerPath, notVerbose } = parseArgs(args);
|
|
50
|
+
ensurePathSync(genPath);
|
|
51
|
+
const jsonOrError = await readSerializationChunk(chunkPath);
|
|
52
|
+
if (jsonOrError instanceof Error) {
|
|
53
|
+
console.error(`"${chunkPath}" does not point to a valid JSON serialization of a language: ${jsonOrError.message}`);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const header = headerPath === undefined
|
|
57
|
+
? undefined
|
|
58
|
+
: await tryReadFileAsText(headerPath);
|
|
59
|
+
const languages = deserializeLanguages(jsonOrError);
|
|
60
|
+
generateApiFromLanguages(languages, genPath, { header, verbose: !notVerbose });
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=generate-class-core-types-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-class-core-types-command.js","sourceRoot":"","sources":["../../src/m2/generate-class-core-types-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAC9B,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAA;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAElE,MAAM,CAAC,MAAM,UAAU,GAAG,QAAQ,CAAA;AAClC,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CAAA;AAS3C,MAAM,SAAS,GAAG,CAAC,IAAc,EAAoC,EAAE;IACnE,MAAM,UAAU,GAAa,EAAE,CAAA;IAE/B,IAAI,mBAAmB,GAAG,KAAK,CAAA;IAC/B,IAAI,UAAU,GAAG,KAAK,CAAA;IACtB,IAAI,UAA8B,CAAA;IAClC,IAAI,2BAA2B,GAAG,KAAK,CAAA;IAEvC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QACjB,IAAI,GAAG,KAAK,KAAK,UAAU,EAAE,EAAE,CAAC;YAC5B,mBAAmB,GAAG,IAAI,CAAA;QAC9B,CAAC;aAAM,IAAI,GAAG,KAAK,KAAK,cAAc,EAAE,EAAE,CAAC;YACvC,UAAU,GAAG,IAAI,CAAA;QACrB,CAAC;aAAM,CAAC;YACJ,IAAI,mBAAmB,EAAE,CAAC;gBACtB,IAAI,UAAU,KAAK,SAAS,IAAI,CAAC,2BAA2B,EAAE,CAAC;oBAC3D,OAAO,CAAC,KAAK,CAAC,mEAAmE,CAAC,CAAA;oBAClF,2BAA2B,GAAG,IAAI,CAAA;gBACtC,CAAC;qBAAM,CAAC;oBACJ,UAAU,GAAG,GAAG,CAAA;oBAChB,mBAAmB,GAAG,KAAK,CAAA;gBAC/B,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACxB,CAAC;QACL,CAAC;IACL,CAAC,CAAC,CAAA;IAEF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,0EAA0E,UAAU,qBAAqB,CAAC,CAAA;QACxH,IAAI,CAAC,CAAC,CAAC,CAAA;IACX,CAAC;IAED,OAAO;QACH,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;QACxB,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;QACtB,UAAU;QACV,UAAU;KACb,CAAA;AACL,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,EAAE,IAAc,EAAE,EAAE;IAC3D,MAAM,EAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAA;IAEpE,cAAc,CAAC,OAAO,CAAC,CAAA;IAEvB,MAAM,WAAW,GAAG,MAAM,sBAAsB,CAAC,SAAS,CAAC,CAAA;IAC3D,IAAI,WAAW,YAAY,KAAK,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,IAAI,SAAS,iEAAiE,WAAW,CAAC,OAAO,EAAE,CAAC,CAAA;QAClH,OAAM;IACV,CAAC;IAED,MAAM,MAAM,GAAG,UAAU,KAAK,SAAS;QACnC,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,MAAM,iBAAiB,CAAC,UAAU,CAAC,CAAA;IAEzC,MAAM,SAAS,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAA;IACnD,wBAAwB,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,UAAU,EAAE,CAAC,CAAA;AAClF,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-ts-types-command.d.ts","sourceRoot":"","sources":["../../src/m2/generate-ts-types-command.ts"],"names":[],"mappings":"AA8CA,eAAO,MAAM,mBAAmB,GAAU,MAAM,MAAM,EAAE,kBASvD,CAAA"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { extname, join } from "path";
|
|
2
|
+
import { writeFile } from "fs/promises";
|
|
3
|
+
import { AggregatingProblemReporter, deserializeLanguagesFrom } from "@lionweb/core";
|
|
4
|
+
import { GenerationOptions, readSerializationChunk, tryReadSerializationChunk, tsTypeDefsForLanguage } from "@lionweb/utilities";
|
|
5
|
+
import { ensurePathSync } from "../fs-utils.js";
|
|
6
|
+
const generateTsTypesFromSerialization = async (path, generationOptions) => {
|
|
7
|
+
const genPath = path.substring(0, path.length - extname(path).length) + "_gen";
|
|
8
|
+
ensurePathSync(genPath);
|
|
9
|
+
const problemReporter = new AggregatingProblemReporter();
|
|
10
|
+
const jsonOrError = await tryReadSerializationChunk(path);
|
|
11
|
+
if (jsonOrError instanceof Error) {
|
|
12
|
+
console.error(`"${path}" does not point to a valid JSON serialization of a language: ${jsonOrError.message}`);
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
const languages = deserializeLanguagesFrom({ serializationChunk: await readSerializationChunk(path), problemReporter });
|
|
16
|
+
problemReporter.reportAllProblemsOnConsole();
|
|
17
|
+
await Promise.all(languages.map((language) => {
|
|
18
|
+
const fileName = `${language.name}.g.ts`;
|
|
19
|
+
const promise = writeFile(join(genPath, fileName), tsTypeDefsForLanguage(language, ...generationOptions));
|
|
20
|
+
console.log(`generated ${language.name}.g.ts for language "${language.name}"`);
|
|
21
|
+
return promise;
|
|
22
|
+
}));
|
|
23
|
+
console.log(`generated TS types: "${path}" -> "${genPath}"`);
|
|
24
|
+
if (languages.length > 1) {
|
|
25
|
+
const linesIndexTs = [
|
|
26
|
+
languages.map((language) => `export * as ${language.name.replaceAll(".", "_")} from "./${language.name}.g.js"`)
|
|
27
|
+
];
|
|
28
|
+
await writeFile(join(genPath, "index.g.ts"), linesIndexTs.join(`\n`) + `\n`);
|
|
29
|
+
console.log("generated index.g.ts");
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
export const generateTsTypesWith = async (args) => {
|
|
33
|
+
const generationOptions = args
|
|
34
|
+
.filter(arg => arg.startsWith("--"))
|
|
35
|
+
.map(option => option.substring(2).trim())
|
|
36
|
+
.filter(option => option in GenerationOptions)
|
|
37
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
38
|
+
.map(option => GenerationOptions[option]); // e.g. "assumeSealed" -> GenerationOptions.assumeSealed
|
|
39
|
+
args.filter(arg => !arg.startsWith("--")).forEach(path => generateTsTypesFromSerialization(path, generationOptions));
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=generate-ts-types-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-ts-types-command.js","sourceRoot":"","sources":["../../src/m2/generate-ts-types-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,OAAO,EAAE,0BAA0B,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAA;AACpF,OAAO,EACH,iBAAiB,EACjB,sBAAsB,EACtB,yBAAyB,EACzB,qBAAqB,EACxB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAE/C,MAAM,gCAAgC,GAAG,KAAK,EAAE,IAAY,EAAE,iBAAsC,EAAE,EAAE;IACpG,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,MAAM,CAAA;IAC9E,cAAc,CAAC,OAAO,CAAC,CAAA;IAEvB,MAAM,eAAe,GAAG,IAAI,0BAA0B,EAAE,CAAA;IACxD,MAAM,WAAW,GAAG,MAAM,yBAAyB,CAAC,IAAI,CAAC,CAAA;IACzD,IAAI,WAAW,YAAY,KAAK,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,iEAAiE,WAAW,CAAC,OAAO,EAAE,CAAC,CAAA;QAC7G,OAAM;IACV,CAAC;IAED,MAAM,SAAS,GAAG,wBAAwB,CAAC,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC,IAAI,CAAC,EAAE,eAAe,EAAE,CAAC,CAAA;IACvH,eAAe,CAAC,0BAA0B,EAAE,CAAA;IAE5C,MAAM,OAAO,CAAC,GAAG,CACb,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;QACvB,MAAM,QAAQ,GAAG,GAAG,QAAQ,CAAC,IAAI,OAAO,CAAA;QACxC,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,qBAAqB,CAAC,QAAQ,EAAE,GAAG,iBAAiB,CAAC,CAAC,CAAA;QACzG,OAAO,CAAC,GAAG,CAAC,aAAa,QAAQ,CAAC,IAAI,uBAAuB,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAA;QAC9E,OAAO,OAAO,CAAA;IAClB,CAAC,CAAC,CACL,CAAA;IAED,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,SAAS,OAAO,GAAG,CAAC,CAAA;IAE5D,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,YAAY,GAAG;YACjB,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,eAAe,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,YAAY,QAAQ,CAAC,IAAI,QAAQ,CAAC;SAClH,CAAA;QACD,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA;QAC5E,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA;IACvC,CAAC;AACL,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EAAE,IAAc,EAAE,EAAE;IACxD,MAAM,iBAAiB,GAAG,IAAI;SACzB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;SACnC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACzC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,IAAI,iBAAiB,CAAC;QAC9C,8DAA8D;SAC7D,GAAG,CAAC,MAAM,CAAC,EAAE,CAAE,iBAAyB,CAAC,MAAM,CAAC,CAAC,CAAA,CAAC,wDAAwD;IAE/G,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,gCAAgC,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAA;AACxH,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lionweb/cli",
|
|
3
|
-
"version": "0.9.0-beta.
|
|
3
|
+
"version": "0.9.0-beta.3",
|
|
4
4
|
"description": "LionWeb CLI for {Java|Type}Script",
|
|
5
5
|
"bin": {
|
|
6
6
|
"lionweb-cli": "./dist/lionweb-cli.js"
|
|
@@ -29,10 +29,11 @@
|
|
|
29
29
|
"release": "npm publish"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@lionweb/core": "0.9.0-beta.
|
|
33
|
-
"@lionweb/
|
|
34
|
-
"@lionweb/
|
|
35
|
-
"@lionweb/
|
|
36
|
-
"@lionweb/
|
|
32
|
+
"@lionweb/class-core-generator": "0.9.0-beta.3",
|
|
33
|
+
"@lionweb/core": "0.9.0-beta.3",
|
|
34
|
+
"@lionweb/json-diff": "0.9.0-beta.3",
|
|
35
|
+
"@lionweb/ts-utils": "0.9.0-beta.3",
|
|
36
|
+
"@lionweb/utilities": "0.9.0-beta.3",
|
|
37
|
+
"@lionweb/validation": "0.9.0-beta.3"
|
|
37
38
|
}
|
|
38
39
|
}
|
package/src/fs-utils.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { readFile } from "fs/promises"
|
|
2
|
+
import { existsSync, mkdirSync, statSync } from "fs"
|
|
3
|
+
|
|
4
|
+
export const tryReadFileAsText = async (path: string): Promise<string | undefined> => {
|
|
5
|
+
try {
|
|
6
|
+
return (await readFile(path)).toString()
|
|
7
|
+
} catch (e) {
|
|
8
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
9
|
+
console.error(`"${path}" does not point to a readable file: ${(e as any).message}`)
|
|
10
|
+
return undefined
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export const ensurePathSync = (path: string) => {
|
|
15
|
+
if (!(existsSync(path) && statSync(path).isDirectory())) {
|
|
16
|
+
mkdirSync(path)
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { serializeLanguages } from "@lionweb/core"
|
|
2
2
|
import { asPrettyJsonString } from "@lionweb/ts-utils"
|
|
3
3
|
import { inferLanguagesFromSerializationChunk, readSerializationChunk } from "@lionweb/utilities"
|
|
4
|
-
import {
|
|
4
|
+
import { writeFile } from "fs/promises"
|
|
5
5
|
import path from "path"
|
|
6
6
|
|
|
7
7
|
export const inferLanguages = async (filePath: string) => {
|
|
@@ -11,7 +11,8 @@ export const inferLanguages = async (filePath: string) => {
|
|
|
11
11
|
const languages = inferLanguagesFromSerializationChunk(chunk)
|
|
12
12
|
for (const language of languages) {
|
|
13
13
|
const languageFile = path.join(dirName, `${language.name}.language.json`)
|
|
14
|
-
|
|
14
|
+
await writeFile(languageFile, asPrettyJsonString(serializeLanguages(language)))
|
|
15
15
|
console.log(`Language ${language.name} has been generated: "${languageFile}"`)
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
|
+
|
package/src/lionweb-cli.ts
CHANGED
|
@@ -4,8 +4,9 @@
|
|
|
4
4
|
import { argv } from "process"
|
|
5
5
|
import { inferLanguages } from "./infer-languages-command.js"
|
|
6
6
|
|
|
7
|
-
import { diagramFromSerializationChunkAt } from "./
|
|
8
|
-
import {
|
|
7
|
+
import { diagramFromSerializationChunkAt } from "./m2/diagram-command.js"
|
|
8
|
+
import { generateClassCoreTypes, headerFlag, notVerboseFlag } from "./m2/generate-class-core-types-command.js"
|
|
9
|
+
import { generateTsTypesWith } from "./m2/generate-ts-types-command.js"
|
|
9
10
|
import { diffSerializationChunks } from "./serialization/diff-command.js"
|
|
10
11
|
import { executeMeasureCommand } from "./serialization/measure-command.js"
|
|
11
12
|
import { repairSerializationChunkAt } from "./serialization/repair-command.js"
|
|
@@ -23,6 +24,7 @@ const main = async (args: string[]) => {
|
|
|
23
24
|
const SORT_COMMAND = "sort"
|
|
24
25
|
const TEXTUALIZE_COMMAND = "textualize"
|
|
25
26
|
const VALIDATE_COMMAND = "validate"
|
|
27
|
+
const GENERATE_CLASS_CORE_TYPES = "generate-class-core-types"
|
|
26
28
|
|
|
27
29
|
const commands = [
|
|
28
30
|
DIAGRAM_COMMAND,
|
|
@@ -33,7 +35,8 @@ const main = async (args: string[]) => {
|
|
|
33
35
|
REPAIR_COMMAND,
|
|
34
36
|
SORT_COMMAND,
|
|
35
37
|
TEXTUALIZE_COMMAND,
|
|
36
|
-
VALIDATE_COMMAND
|
|
38
|
+
VALIDATE_COMMAND,
|
|
39
|
+
GENERATE_CLASS_CORE_TYPES
|
|
37
40
|
].sort()
|
|
38
41
|
|
|
39
42
|
if (args.length <= 2) {
|
|
@@ -145,7 +148,7 @@ textual syntax is used, unless a flag '--asRegular' is provided.
|
|
|
145
148
|
}
|
|
146
149
|
|
|
147
150
|
case VALIDATE_COMMAND: {
|
|
148
|
-
if (commandArgs.length
|
|
151
|
+
if (commandArgs.length !== 1) {
|
|
149
152
|
console.log(
|
|
150
153
|
`The ${VALIDATE_COMMAND} command validates a serialization chunk.
|
|
151
154
|
Usage: npx @lionweb/cli ${VALIDATE_COMMAND} <path_to_chunk>`
|
|
@@ -157,9 +160,10 @@ Usage: npx @lionweb/cli ${VALIDATE_COMMAND} <path_to_chunk>`
|
|
|
157
160
|
}
|
|
158
161
|
|
|
159
162
|
case INFER_LANGUAGES_COMMAND: {
|
|
160
|
-
if (commandArgs.length
|
|
163
|
+
if (commandArgs.length !== 1) {
|
|
161
164
|
console.log(
|
|
162
|
-
`The ${INFER_LANGUAGES_COMMAND} command infer language(s) from a given serialization chunk.
|
|
165
|
+
`The ${INFER_LANGUAGES_COMMAND} command infer language(s) from a given serialization chunk.
|
|
166
|
+
Usage: npx @lionweb/cli ${INFER_LANGUAGES_COMMAND} <path_to_chunk>`
|
|
163
167
|
)
|
|
164
168
|
} else {
|
|
165
169
|
await inferLanguages(commandArgs[0])
|
|
@@ -167,6 +171,18 @@ Usage: npx @lionweb/cli ${VALIDATE_COMMAND} <path_to_chunk>`
|
|
|
167
171
|
return
|
|
168
172
|
}
|
|
169
173
|
|
|
174
|
+
case GENERATE_CLASS_CORE_TYPES: {
|
|
175
|
+
if (commandArgs.length === 0) {
|
|
176
|
+
console.log(
|
|
177
|
+
`The ${GENERATE_CLASS_CORE_TYPES} command generates an API that’s based on the @lionweb/class-core from a given serialization chunk containing one or more languages.
|
|
178
|
+
Usage: npx @lionweb/cli ${GENERATE_CLASS_CORE_TYPES} <path_to_chunk> <path_to_generate_to> [--${headerFlag} <path_to_file_with_header_text] [--${notVerboseFlag}]`
|
|
179
|
+
)
|
|
180
|
+
} else {
|
|
181
|
+
await generateClassCoreTypes(commandArgs)
|
|
182
|
+
}
|
|
183
|
+
return
|
|
184
|
+
}
|
|
185
|
+
|
|
170
186
|
default: {
|
|
171
187
|
console.error(`command "${command}" is not recognized`)
|
|
172
188
|
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { AggregatingProblemReporter, deserializeLanguagesFrom } from "@lionweb/core"
|
|
2
|
+
import { generateMermaidForLanguage, generatePlantUmlForLanguage, tryReadSerializationChunk } from "@lionweb/utilities"
|
|
3
|
+
import { writeFile } from "fs/promises"
|
|
4
|
+
import { dirname } from "path"
|
|
5
|
+
|
|
6
|
+
export const diagramFromSerializationChunkAt = async (path: string) => {
|
|
7
|
+
const jsonOrError = await tryReadSerializationChunk(path)
|
|
8
|
+
if (jsonOrError instanceof Error) {
|
|
9
|
+
console.error(`"${path}" does not point to a valid JSON serialization of a language: ${jsonOrError.message}`)
|
|
10
|
+
return
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const dir = dirname(path)
|
|
14
|
+
const problemReporter = new AggregatingProblemReporter()
|
|
15
|
+
const languages = deserializeLanguagesFrom({ serializationChunk: jsonOrError, problemReporter})
|
|
16
|
+
problemReporter.reportAllProblemsOnConsole()
|
|
17
|
+
await Promise.all(
|
|
18
|
+
languages.flatMap((language) => [
|
|
19
|
+
writeFile(`${dir}/${language.name}.puml`, generatePlantUmlForLanguage(language)),
|
|
20
|
+
writeFile(`${dir}/${language.name}.md`, generateMermaidForLanguage(language))
|
|
21
|
+
])
|
|
22
|
+
)
|
|
23
|
+
console.log(`generated diagrams: "${path}" -> "${dir}/"`)
|
|
24
|
+
}
|
|
25
|
+
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { exit } from "process"
|
|
2
|
+
import { generateApiFromLanguages } from "@lionweb/class-core-generator"
|
|
3
|
+
import { deserializeLanguages } from "@lionweb/core"
|
|
4
|
+
import { readSerializationChunk } from "@lionweb/utilities"
|
|
5
|
+
import { ensurePathSync, tryReadFileAsText } from "../fs-utils.js"
|
|
6
|
+
|
|
7
|
+
export const headerFlag = "header"
|
|
8
|
+
export const notVerboseFlag = "not-verbose"
|
|
9
|
+
|
|
10
|
+
type ClassCoreTypesGeneratorArguments = {
|
|
11
|
+
chunkPath: string
|
|
12
|
+
genPath: string
|
|
13
|
+
notVerbose: boolean
|
|
14
|
+
headerPath?: string
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const parseArgs = (args: string[]): ClassCoreTypesGeneratorArguments => {
|
|
18
|
+
const properArgs: string[] = []
|
|
19
|
+
|
|
20
|
+
let nextArgIsHeaderPath = false
|
|
21
|
+
let notVerbose = false
|
|
22
|
+
let headerPath: string | undefined
|
|
23
|
+
let multipleHeaderPathsReported = false
|
|
24
|
+
|
|
25
|
+
args.forEach((arg) => {
|
|
26
|
+
if (arg === `--${headerFlag}`) {
|
|
27
|
+
nextArgIsHeaderPath = true
|
|
28
|
+
} else if (arg === `--${notVerboseFlag}`) {
|
|
29
|
+
notVerbose = true
|
|
30
|
+
} else {
|
|
31
|
+
if (nextArgIsHeaderPath) {
|
|
32
|
+
if (headerPath !== undefined && !multipleHeaderPathsReported) {
|
|
33
|
+
console.error(`Multiple header paths given: taking first, and ignoring the rest.`)
|
|
34
|
+
multipleHeaderPathsReported = true
|
|
35
|
+
} else {
|
|
36
|
+
headerPath = arg
|
|
37
|
+
nextArgIsHeaderPath = false
|
|
38
|
+
}
|
|
39
|
+
} else {
|
|
40
|
+
properArgs.push(arg)
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
if (properArgs.length !== 2) {
|
|
46
|
+
console.error(`Expected 2 arguments <path_to_chunk> and <path_to_generate_in> but got ${properArgs} instead — exiting.`)
|
|
47
|
+
exit(2)
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return {
|
|
51
|
+
chunkPath: properArgs[0],
|
|
52
|
+
genPath: properArgs[1],
|
|
53
|
+
notVerbose,
|
|
54
|
+
headerPath
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export const generateClassCoreTypes = async (args: string[]) => {
|
|
59
|
+
const {chunkPath, genPath, headerPath, notVerbose} = parseArgs(args)
|
|
60
|
+
|
|
61
|
+
ensurePathSync(genPath)
|
|
62
|
+
|
|
63
|
+
const jsonOrError = await readSerializationChunk(chunkPath)
|
|
64
|
+
if (jsonOrError instanceof Error) {
|
|
65
|
+
console.error(`"${chunkPath}" does not point to a valid JSON serialization of a language: ${jsonOrError.message}`)
|
|
66
|
+
return
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const header = headerPath === undefined
|
|
70
|
+
? undefined
|
|
71
|
+
: await tryReadFileAsText(headerPath)
|
|
72
|
+
|
|
73
|
+
const languages = deserializeLanguages(jsonOrError)
|
|
74
|
+
generateApiFromLanguages(languages, genPath, { header, verbose: !notVerbose })
|
|
75
|
+
}
|
|
76
|
+
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { extname, join } from "path"
|
|
2
|
+
import { writeFile } from "fs/promises"
|
|
3
|
+
|
|
4
|
+
import { AggregatingProblemReporter, deserializeLanguagesFrom } from "@lionweb/core"
|
|
5
|
+
import {
|
|
6
|
+
GenerationOptions,
|
|
7
|
+
readSerializationChunk,
|
|
8
|
+
tryReadSerializationChunk,
|
|
9
|
+
tsTypeDefsForLanguage
|
|
10
|
+
} from "@lionweb/utilities"
|
|
11
|
+
import { ensurePathSync } from "../fs-utils.js"
|
|
12
|
+
|
|
13
|
+
const generateTsTypesFromSerialization = async (path: string, generationOptions: GenerationOptions[]) => {
|
|
14
|
+
const genPath = path.substring(0, path.length - extname(path).length) + "_gen"
|
|
15
|
+
ensurePathSync(genPath)
|
|
16
|
+
|
|
17
|
+
const problemReporter = new AggregatingProblemReporter()
|
|
18
|
+
const jsonOrError = await tryReadSerializationChunk(path)
|
|
19
|
+
if (jsonOrError instanceof Error) {
|
|
20
|
+
console.error(`"${path}" does not point to a valid JSON serialization of a language: ${jsonOrError.message}`)
|
|
21
|
+
return
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const languages = deserializeLanguagesFrom({ serializationChunk: await readSerializationChunk(path), problemReporter })
|
|
25
|
+
problemReporter.reportAllProblemsOnConsole()
|
|
26
|
+
|
|
27
|
+
await Promise.all(
|
|
28
|
+
languages.map((language) => {
|
|
29
|
+
const fileName = `${language.name}.g.ts`
|
|
30
|
+
const promise = writeFile(join(genPath, fileName), tsTypeDefsForLanguage(language, ...generationOptions))
|
|
31
|
+
console.log(`generated ${language.name}.g.ts for language "${language.name}"`)
|
|
32
|
+
return promise
|
|
33
|
+
})
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
console.log(`generated TS types: "${path}" -> "${genPath}"`)
|
|
37
|
+
|
|
38
|
+
if (languages.length > 1) {
|
|
39
|
+
const linesIndexTs = [
|
|
40
|
+
languages.map((language) => `export * as ${language.name.replaceAll(".", "_")} from "./${language.name}.g.js"`)
|
|
41
|
+
]
|
|
42
|
+
await writeFile(join(genPath, "index.g.ts"), linesIndexTs.join(`\n`) + `\n`)
|
|
43
|
+
console.log("generated index.g.ts")
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export const generateTsTypesWith = async (args: string[]) => {
|
|
48
|
+
const generationOptions = args
|
|
49
|
+
.filter(arg => arg.startsWith("--"))
|
|
50
|
+
.map(option => option.substring(2).trim())
|
|
51
|
+
.filter(option => option in GenerationOptions)
|
|
52
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
53
|
+
.map(option => (GenerationOptions as any)[option]) // e.g. "assumeSealed" -> GenerationOptions.assumeSealed
|
|
54
|
+
|
|
55
|
+
args.filter(arg => !arg.startsWith("--")).forEach(path => generateTsTypesFromSerialization(path, generationOptions))
|
|
56
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"diagram-command.d.ts","sourceRoot":"","sources":["../../src/m3/diagram-command.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,+BAA+B,GAAU,MAAM,MAAM,kBAejE,CAAA"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { AggregatingProblemReporter, deserializeLanguagesFrom } from "@lionweb/core";
|
|
2
|
-
import { generateMermaidForLanguage, generatePlantUmlForLanguage, readSerializationChunk } from "@lionweb/utilities";
|
|
3
|
-
import { writeFileSync } from "fs";
|
|
4
|
-
import { dirname } from "path";
|
|
5
|
-
export const diagramFromSerializationChunkAt = async (path) => {
|
|
6
|
-
try {
|
|
7
|
-
const json = await readSerializationChunk(path);
|
|
8
|
-
const dir = dirname(path);
|
|
9
|
-
const problemReporter = new AggregatingProblemReporter();
|
|
10
|
-
const languages = deserializeLanguagesFrom({ serializationChunk: json, problemReporter });
|
|
11
|
-
problemReporter.reportAllProblemsOnConsole();
|
|
12
|
-
languages.forEach(language => {
|
|
13
|
-
writeFileSync(`${dir}/${language.name}.puml`, generatePlantUmlForLanguage(language));
|
|
14
|
-
writeFileSync(`${dir}/${language.name}.md`, generateMermaidForLanguage(language));
|
|
15
|
-
});
|
|
16
|
-
console.log(`generated diagrams: "${path}" -> "${dir}/"`);
|
|
17
|
-
}
|
|
18
|
-
catch (_) {
|
|
19
|
-
console.error(`"${path}" does not point to a valid JSON serialization of a language`);
|
|
20
|
-
}
|
|
21
|
-
};
|
|
22
|
-
//# sourceMappingURL=diagram-command.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"diagram-command.js","sourceRoot":"","sources":["../../src/m3/diagram-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAA;AACpF,OAAO,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AACpH,OAAO,EAAE,aAAa,EAAE,MAAM,IAAI,CAAA;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAE9B,MAAM,CAAC,MAAM,+BAA+B,GAAG,KAAK,EAAE,IAAY,EAAE,EAAE;IAClE,IAAI,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,sBAAsB,CAAC,IAAI,CAAC,CAAA;QAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;QACzB,MAAM,eAAe,GAAG,IAAI,0BAA0B,EAAE,CAAA;QACxD,MAAM,SAAS,GAAG,wBAAwB,CAAC,EAAE,kBAAkB,EAAE,IAAI,EAAE,eAAe,EAAC,CAAC,CAAA;QACxF,eAAe,CAAC,0BAA0B,EAAE,CAAA;QAC5C,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YACzB,aAAa,CAAC,GAAG,GAAG,IAAI,QAAQ,CAAC,IAAI,OAAO,EAAE,2BAA2B,CAAC,QAAQ,CAAC,CAAC,CAAA;YACpF,aAAa,CAAC,GAAG,GAAG,IAAI,QAAQ,CAAC,IAAI,KAAK,EAAE,0BAA0B,CAAC,QAAQ,CAAC,CAAC,CAAA;QACrF,CAAC,CAAC,CAAA;QACF,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,SAAS,GAAG,IAAI,CAAC,CAAA;IAC7D,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,8DAA8D,CAAC,CAAA;IACzF,CAAC;AACL,CAAC,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generate-ts-types-command.d.ts","sourceRoot":"","sources":["../../src/m3/generate-ts-types-command.ts"],"names":[],"mappings":"AAsCA,eAAO,MAAM,mBAAmB,GAAU,MAAM,MAAM,EAAE,kBASvD,CAAA"}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { extname, join } from "path";
|
|
2
|
-
import { existsSync, mkdirSync, statSync, writeFileSync } from "fs";
|
|
3
|
-
import { AggregatingProblemReporter, deserializeLanguagesFrom } from "@lionweb/core";
|
|
4
|
-
import { GenerationOptions, readSerializationChunk, tsTypeDefsForLanguage } from "@lionweb/utilities";
|
|
5
|
-
const generateTsTypesFromSerialization = async (path, generationOptions) => {
|
|
6
|
-
try {
|
|
7
|
-
const genPath = path.substring(0, path.length - extname(path).length) + "_gen";
|
|
8
|
-
if (!(existsSync(genPath) && statSync(genPath).isDirectory())) {
|
|
9
|
-
mkdirSync(genPath);
|
|
10
|
-
}
|
|
11
|
-
const problemReporter = new AggregatingProblemReporter();
|
|
12
|
-
const languages = deserializeLanguagesFrom({ serializationChunk: await readSerializationChunk(path), problemReporter });
|
|
13
|
-
problemReporter.reportAllProblemsOnConsole();
|
|
14
|
-
languages.forEach((language) => {
|
|
15
|
-
const fileName = `${language.name}.g.ts`;
|
|
16
|
-
writeFileSync(join(genPath, fileName), tsTypeDefsForLanguage(language, ...generationOptions));
|
|
17
|
-
console.log(`generated ${language.name}.g.ts for language "${language.name}"`);
|
|
18
|
-
});
|
|
19
|
-
console.log(`generated TS types: "${path}" -> "${genPath}"`);
|
|
20
|
-
if (languages.length > 1) {
|
|
21
|
-
const linesIndexTs = [
|
|
22
|
-
languages.map((language) => `export * as ${language.name.replaceAll(".", "_")} from "./${language.name}.g.js"`)
|
|
23
|
-
];
|
|
24
|
-
writeFileSync(join(genPath, "index.g.ts"), linesIndexTs.join(`\n`) + `\n`);
|
|
25
|
-
console.log("generated index.g.ts");
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
catch (e) {
|
|
29
|
-
console.error(`"${path}" does not point to a valid JSON serialization of a language`);
|
|
30
|
-
throw e;
|
|
31
|
-
}
|
|
32
|
-
};
|
|
33
|
-
export const generateTsTypesWith = async (args) => {
|
|
34
|
-
const generationOptions = args
|
|
35
|
-
.filter(arg => arg.startsWith("--"))
|
|
36
|
-
.map(option => option.substring(2).trim())
|
|
37
|
-
.filter(option => option in GenerationOptions)
|
|
38
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
39
|
-
.map(option => GenerationOptions[option]); // e.g. "assumeSealed" -> GenerationOptions.assumeSealed
|
|
40
|
-
args.filter(arg => !arg.startsWith("--")).forEach(path => generateTsTypesFromSerialization(path, generationOptions));
|
|
41
|
-
};
|
|
42
|
-
//# sourceMappingURL=generate-ts-types-command.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"generate-ts-types-command.js","sourceRoot":"","sources":["../../src/m3/generate-ts-types-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { AggregatingProblemReporter, deserializeLanguagesFrom } from "@lionweb/core"
|
|
2
|
-
import { generateMermaidForLanguage, generatePlantUmlForLanguage, readSerializationChunk } from "@lionweb/utilities"
|
|
3
|
-
import { writeFileSync } from "fs"
|
|
4
|
-
import { dirname } from "path"
|
|
5
|
-
|
|
6
|
-
export const diagramFromSerializationChunkAt = async (path: string) => {
|
|
7
|
-
try {
|
|
8
|
-
const json = await readSerializationChunk(path)
|
|
9
|
-
const dir = dirname(path)
|
|
10
|
-
const problemReporter = new AggregatingProblemReporter()
|
|
11
|
-
const languages = deserializeLanguagesFrom({ serializationChunk: json, problemReporter})
|
|
12
|
-
problemReporter.reportAllProblemsOnConsole()
|
|
13
|
-
languages.forEach(language => {
|
|
14
|
-
writeFileSync(`${dir}/${language.name}.puml`, generatePlantUmlForLanguage(language))
|
|
15
|
-
writeFileSync(`${dir}/${language.name}.md`, generateMermaidForLanguage(language))
|
|
16
|
-
})
|
|
17
|
-
console.log(`generated diagrams: "${path}" -> "${dir}/"`)
|
|
18
|
-
} catch (_) {
|
|
19
|
-
console.error(`"${path}" does not point to a valid JSON serialization of a language`)
|
|
20
|
-
}
|
|
21
|
-
}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { extname, join } from "path"
|
|
2
|
-
import { existsSync, mkdirSync, statSync, writeFileSync } from "fs"
|
|
3
|
-
|
|
4
|
-
import { AggregatingProblemReporter, deserializeLanguagesFrom } from "@lionweb/core"
|
|
5
|
-
import { GenerationOptions, readSerializationChunk, tsTypeDefsForLanguage } from "@lionweb/utilities"
|
|
6
|
-
|
|
7
|
-
const generateTsTypesFromSerialization = async (path: string, generationOptions: GenerationOptions[]) => {
|
|
8
|
-
try {
|
|
9
|
-
const genPath = path.substring(0, path.length - extname(path).length) + "_gen"
|
|
10
|
-
if (!(existsSync(genPath) && statSync(genPath).isDirectory())) {
|
|
11
|
-
mkdirSync(genPath)
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
const problemReporter = new AggregatingProblemReporter()
|
|
15
|
-
const languages = deserializeLanguagesFrom({ serializationChunk: await readSerializationChunk(path), problemReporter })
|
|
16
|
-
problemReporter.reportAllProblemsOnConsole()
|
|
17
|
-
|
|
18
|
-
languages.forEach((language) => {
|
|
19
|
-
const fileName = `${language.name}.g.ts`
|
|
20
|
-
writeFileSync(join(genPath, fileName), tsTypeDefsForLanguage(language, ...generationOptions))
|
|
21
|
-
console.log(`generated ${language.name}.g.ts for language "${language.name}"`)
|
|
22
|
-
})
|
|
23
|
-
|
|
24
|
-
console.log(`generated TS types: "${path}" -> "${genPath}"`)
|
|
25
|
-
|
|
26
|
-
if (languages.length > 1) {
|
|
27
|
-
const linesIndexTs = [
|
|
28
|
-
languages.map((language) => `export * as ${language.name.replaceAll(".", "_")} from "./${language.name}.g.js"`)
|
|
29
|
-
]
|
|
30
|
-
writeFileSync(join(genPath, "index.g.ts"), linesIndexTs.join(`\n`) + `\n`)
|
|
31
|
-
console.log("generated index.g.ts")
|
|
32
|
-
}
|
|
33
|
-
} catch (e) {
|
|
34
|
-
console.error(`"${path}" does not point to a valid JSON serialization of a language`)
|
|
35
|
-
throw e
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export const generateTsTypesWith = async (args: string[]) => {
|
|
40
|
-
const generationOptions = args
|
|
41
|
-
.filter(arg => arg.startsWith("--"))
|
|
42
|
-
.map(option => option.substring(2).trim())
|
|
43
|
-
.filter(option => option in GenerationOptions)
|
|
44
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
45
|
-
.map(option => (GenerationOptions as any)[option]) // e.g. "assumeSealed" -> GenerationOptions.assumeSealed
|
|
46
|
-
|
|
47
|
-
args.filter(arg => !arg.startsWith("--")).forEach(path => generateTsTypesFromSerialization(path, generationOptions))
|
|
48
|
-
}
|
|
File without changes
|
|
File without changes
|