skir-internal 0.0.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/README.md +2 -0
- package/dist/casing.d.ts +8 -0
- package/dist/casing.d.ts.map +1 -0
- package/dist/casing.js +43 -0
- package/dist/casing.js.map +1 -0
- package/dist/casing.test.d.ts.map +1 -0
- package/dist/casing.test.js +136 -0
- package/dist/casing.test.js.map +1 -0
- package/dist/command_line_parser.d.ts +33 -0
- package/dist/command_line_parser.d.ts.map +1 -0
- package/dist/command_line_parser.js +168 -0
- package/dist/command_line_parser.js.map +1 -0
- package/dist/command_line_parser.test.d.ts +2 -0
- package/dist/command_line_parser.test.d.ts.map +1 -0
- package/dist/command_line_parser.test.js +297 -0
- package/dist/command_line_parser.test.js.map +1 -0
- package/dist/compatibility_checker.d.ts +74 -0
- package/dist/compatibility_checker.d.ts.map +1 -0
- package/dist/compatibility_checker.js +341 -0
- package/dist/compatibility_checker.js.map +1 -0
- package/dist/compatibility_checker.test.d.ts +2 -0
- package/dist/compatibility_checker.test.d.ts.map +1 -0
- package/dist/compatibility_checker.test.js +582 -0
- package/dist/compatibility_checker.test.js.map +1 -0
- package/dist/compiler.d.ts.map +1 -0
- package/dist/compiler.js +375 -0
- package/dist/compiler.js.map +1 -0
- package/dist/config.d.ts +47 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +23 -0
- package/dist/config.js.map +1 -0
- package/dist/definition_finder.d.ts +12 -0
- package/dist/definition_finder.d.ts.map +1 -0
- package/dist/definition_finder.js +180 -0
- package/dist/definition_finder.js.map +1 -0
- package/dist/definition_finder.test.d.ts +2 -0
- package/dist/definition_finder.test.d.ts.map +1 -0
- package/dist/definition_finder.test.js +164 -0
- package/dist/definition_finder.test.js.map +1 -0
- package/dist/doc_comment_parser.d.ts +3 -0
- package/dist/doc_comment_parser.d.ts.map +1 -0
- package/dist/doc_comment_parser.js +219 -0
- package/dist/doc_comment_parser.js.map +1 -0
- package/dist/doc_comment_parser.test.d.ts +2 -0
- package/dist/doc_comment_parser.test.d.ts.map +1 -0
- package/dist/doc_comment_parser.test.js +494 -0
- package/dist/doc_comment_parser.test.js.map +1 -0
- package/dist/encoding.d.ts +2 -0
- package/dist/encoding.d.ts.map +1 -0
- package/dist/encoding.js +38 -0
- package/dist/encoding.js.map +1 -0
- package/dist/encoding.test.d.ts +2 -0
- package/dist/encoding.test.d.ts.map +1 -0
- package/dist/encoding.test.js +23 -0
- package/dist/encoding.test.js.map +1 -0
- package/dist/error_renderer.d.ts +10 -0
- package/dist/error_renderer.d.ts.map +1 -0
- package/dist/error_renderer.js +266 -0
- package/dist/error_renderer.js.map +1 -0
- package/dist/formatter.d.ts +16 -0
- package/dist/formatter.d.ts.map +1 -0
- package/dist/formatter.js +220 -0
- package/dist/formatter.js.map +1 -0
- package/dist/formatter.test.d.ts +2 -0
- package/dist/formatter.test.d.ts.map +1 -0
- package/dist/formatter.test.js +390 -0
- package/dist/formatter.test.js.map +1 -0
- package/dist/formatter2.d.ts +3 -0
- package/dist/formatter2.d.ts.map +1 -0
- package/dist/formatter2.js +67 -0
- package/dist/formatter2.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/index.test.d.ts.map +1 -0
- package/dist/index.test.js +14 -0
- package/dist/index.test.js.map +1 -0
- package/dist/io.d.ts.map +1 -0
- package/dist/io.js +22 -0
- package/dist/io.js.map +1 -0
- package/dist/language_server.d.ts +15 -0
- package/dist/language_server.d.ts.map +1 -0
- package/dist/language_server.js +248 -0
- package/dist/language_server.js.map +1 -0
- package/dist/literals.d.ts +13 -0
- package/dist/literals.d.ts.map +1 -0
- package/dist/literals.js +100 -0
- package/dist/literals.js.map +1 -0
- package/dist/literals.test.d.ts.map +1 -0
- package/dist/literals.test.js +149 -0
- package/dist/literals.test.js.map +1 -0
- package/dist/module_collector.d.ts +3 -0
- package/dist/module_collector.d.ts.map +1 -0
- package/dist/module_collector.js +22 -0
- package/dist/module_collector.js.map +1 -0
- package/dist/module_set.d.ts +40 -0
- package/dist/module_set.d.ts.map +1 -0
- package/dist/module_set.js +1178 -0
- package/dist/module_set.js.map +1 -0
- package/dist/module_set.test.d.ts.map +1 -0
- package/dist/module_set.test.js +1897 -0
- package/dist/module_set.test.js.map +1 -0
- package/dist/parser.d.ts +7 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +1075 -0
- package/dist/parser.js.map +1 -0
- package/dist/parser.test.d.ts.map +1 -0
- package/dist/parser.test.js +1594 -0
- package/dist/parser.test.js.map +1 -0
- package/dist/project_initializer.d.ts +2 -0
- package/dist/project_initializer.d.ts.map +1 -0
- package/dist/project_initializer.js +30 -0
- package/dist/project_initializer.js.map +1 -0
- package/dist/snapshotter.d.ts +9 -0
- package/dist/snapshotter.d.ts.map +1 -0
- package/dist/snapshotter.js +144 -0
- package/dist/snapshotter.js.map +1 -0
- package/dist/tokenizer.d.ts +10 -0
- package/dist/tokenizer.d.ts.map +1 -0
- package/dist/tokenizer.js +198 -0
- package/dist/tokenizer.js.map +1 -0
- package/dist/tokenizer.test.d.ts.map +1 -0
- package/dist/tokenizer.test.js +441 -0
- package/dist/tokenizer.test.js.map +1 -0
- package/dist/types.d.ts +439 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +58 -0
- package/src/casing.ts +53 -0
- package/src/types.ts +585 -0
package/dist/compiler.js
ADDED
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import * as fs from "fs/promises";
|
|
3
|
+
import { glob } from "glob";
|
|
4
|
+
import * as paths from "path";
|
|
5
|
+
import Watcher from "watcher";
|
|
6
|
+
import * as yaml from "yaml";
|
|
7
|
+
import { fromZodError } from "zod-validation-error";
|
|
8
|
+
import { parseCommandLine } from "./command_line_parser.js";
|
|
9
|
+
import { SkirConfig } from "./config.js";
|
|
10
|
+
import { makeGray, makeGreen, makeRed, renderErrors, } from "./error_renderer.js";
|
|
11
|
+
import { formatModule } from "./formatter.js";
|
|
12
|
+
import { REAL_FILE_SYSTEM } from "./io.js";
|
|
13
|
+
import { collectModules } from "./module_collector.js";
|
|
14
|
+
import { initializeProject } from "./project_initializer.js";
|
|
15
|
+
import { takeSnapshot, viewSnapshot } from "./snapshotter.js";
|
|
16
|
+
import { tokenizeModule } from "./tokenizer.js";
|
|
17
|
+
async function makeGeneratorBundle(config, root) {
|
|
18
|
+
const mod = await import(config.mod);
|
|
19
|
+
const generator = mod.GENERATOR;
|
|
20
|
+
if (typeof generator !== "object") {
|
|
21
|
+
throw new Error(`Cannot import GENERATOR from module ${config.mod}`);
|
|
22
|
+
}
|
|
23
|
+
// Validate the generator config.
|
|
24
|
+
const parsedConfig = generator.configType.safeParse(config.config);
|
|
25
|
+
if (!parsedConfig.success) {
|
|
26
|
+
const { id } = generator;
|
|
27
|
+
console.error(makeRed(`Invalid config for ${id} generator`));
|
|
28
|
+
const validationError = fromZodError(parsedConfig.error);
|
|
29
|
+
console.error(validationError.toString());
|
|
30
|
+
process.exit(1);
|
|
31
|
+
}
|
|
32
|
+
let skiroutDirs;
|
|
33
|
+
if (config.skiroutDir === undefined) {
|
|
34
|
+
skiroutDirs = ["skirout"];
|
|
35
|
+
}
|
|
36
|
+
else if (typeof config.skiroutDir === "string") {
|
|
37
|
+
skiroutDirs = [config.skiroutDir];
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
skiroutDirs = config.skiroutDir;
|
|
41
|
+
}
|
|
42
|
+
skiroutDirs = skiroutDirs.map((d) => paths.join(root, d));
|
|
43
|
+
return {
|
|
44
|
+
generator,
|
|
45
|
+
config: parsedConfig.data,
|
|
46
|
+
skiroutDirs: skiroutDirs,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
class WatchModeMainLoop {
|
|
50
|
+
constructor(srcDir, generatorBundles, watchModeOn) {
|
|
51
|
+
this.srcDir = srcDir;
|
|
52
|
+
this.generatorBundles = generatorBundles;
|
|
53
|
+
this.watchModeOn = watchModeOn;
|
|
54
|
+
this.skiroutDirs = new Set();
|
|
55
|
+
this.generating = false;
|
|
56
|
+
this.mustRegenerate = false;
|
|
57
|
+
this.lastWriteBatch = {
|
|
58
|
+
pathToFile: new Map(),
|
|
59
|
+
writeTime: new Date(0),
|
|
60
|
+
};
|
|
61
|
+
for (const generatorBundle of generatorBundles) {
|
|
62
|
+
for (const skiroutDir of generatorBundle.skiroutDirs) {
|
|
63
|
+
this.skiroutDirs.add(skiroutDir);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
checkNoOverlappingSkiroutDirs([...this.skiroutDirs]);
|
|
67
|
+
}
|
|
68
|
+
async start() {
|
|
69
|
+
await this.generate();
|
|
70
|
+
const watcher = new Watcher(this.srcDir, {
|
|
71
|
+
renameDetection: true,
|
|
72
|
+
recursive: true,
|
|
73
|
+
persistent: true,
|
|
74
|
+
});
|
|
75
|
+
watcher.on("all", (_, targetPath, targetPathNext) => {
|
|
76
|
+
if (targetPath.endsWith(".skir") ||
|
|
77
|
+
(targetPathNext && targetPathNext.endsWith(".skir"))) {
|
|
78
|
+
this.triggerGeneration();
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
triggerGeneration() {
|
|
83
|
+
if (this.generating) {
|
|
84
|
+
this.mustRegenerate = true;
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
if (this.timeoutId !== undefined) {
|
|
88
|
+
globalThis.clearTimeout(this.timeoutId);
|
|
89
|
+
}
|
|
90
|
+
const delayMillis = 200;
|
|
91
|
+
const callback = () => {
|
|
92
|
+
try {
|
|
93
|
+
this.generate();
|
|
94
|
+
}
|
|
95
|
+
catch (e) {
|
|
96
|
+
const message = e && typeof e === "object" && "message" in e ? e.message : e;
|
|
97
|
+
console.error(message);
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
this.timeoutId = globalThis.setTimeout(callback, delayMillis);
|
|
101
|
+
}
|
|
102
|
+
async generate() {
|
|
103
|
+
this.generating = true;
|
|
104
|
+
this.timeoutId = undefined;
|
|
105
|
+
this.mustRegenerate = false;
|
|
106
|
+
if (this.watchModeOn) {
|
|
107
|
+
console.clear();
|
|
108
|
+
}
|
|
109
|
+
try {
|
|
110
|
+
const moduleSet = await collectModules(this.srcDir);
|
|
111
|
+
const errors = moduleSet.errors.filter((e) => !e.errorIsInOtherModule);
|
|
112
|
+
if (errors.length) {
|
|
113
|
+
renderErrors(errors);
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
if (moduleSet.recordMap.size <= 0) {
|
|
118
|
+
console.error(makeRed("No skir modules found in source directory"));
|
|
119
|
+
}
|
|
120
|
+
await this.doGenerate(moduleSet);
|
|
121
|
+
if (this.watchModeOn) {
|
|
122
|
+
const date = new Date().toLocaleTimeString("en-US");
|
|
123
|
+
const successMessage = `Generation succeeded at ${date}`;
|
|
124
|
+
console.log(makeGreen(successMessage));
|
|
125
|
+
console.log("\nWaiting for changes in files matching:");
|
|
126
|
+
const glob = paths.resolve(paths.join(this.srcDir, "/**/*.skir"));
|
|
127
|
+
console.log(` ${glob}`);
|
|
128
|
+
}
|
|
129
|
+
return true;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
finally {
|
|
133
|
+
this.generating = false;
|
|
134
|
+
if (this.mustRegenerate) {
|
|
135
|
+
this.triggerGeneration();
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
async doGenerate(moduleSet) {
|
|
140
|
+
const { skiroutDirs } = this;
|
|
141
|
+
const preExistingAbsolutePaths = new Set();
|
|
142
|
+
for (const skiroutDir of skiroutDirs) {
|
|
143
|
+
await fs.mkdir(skiroutDir, { recursive: true });
|
|
144
|
+
// Collect all the files in all the skirout dirs.
|
|
145
|
+
(await glob(paths.join(skiroutDir, "**/*"), { withFileTypes: true })).forEach((p) => preExistingAbsolutePaths.add(p.fullpath()));
|
|
146
|
+
}
|
|
147
|
+
const pathToFile = new Map();
|
|
148
|
+
const pathToGenerator = new Map();
|
|
149
|
+
for (const generator of this.generatorBundles) {
|
|
150
|
+
const files = generator.generator.generateCode({
|
|
151
|
+
modules: moduleSet.resolvedModules,
|
|
152
|
+
recordMap: moduleSet.recordMap,
|
|
153
|
+
config: generator.config,
|
|
154
|
+
}).files;
|
|
155
|
+
for (const file of files) {
|
|
156
|
+
const { path } = file;
|
|
157
|
+
if (pathToFile.has(path)) {
|
|
158
|
+
throw new Error(`Multiple generators produce ${path}`);
|
|
159
|
+
}
|
|
160
|
+
pathToFile.set(path, file);
|
|
161
|
+
pathToGenerator.set(path, generator);
|
|
162
|
+
for (const skiroutDir of generator.skiroutDirs) {
|
|
163
|
+
// Remove this path and all its parents from the set of paths to remove
|
|
164
|
+
// at the end of the generation.
|
|
165
|
+
for (let pathToKeep = path; pathToKeep !== "."; pathToKeep = paths.dirname(pathToKeep)) {
|
|
166
|
+
preExistingAbsolutePaths.delete(paths.resolve(paths.join(skiroutDir, pathToKeep)));
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
// Write or override all the generated files.
|
|
172
|
+
const { lastWriteBatch } = this;
|
|
173
|
+
await Promise.all(Array.from(pathToFile).map(async ([p, newFile]) => {
|
|
174
|
+
const oldFile = lastWriteBatch.pathToFile.get(p);
|
|
175
|
+
const generator = pathToGenerator.get(p);
|
|
176
|
+
for (const skiroutDir of generator.skiroutDirs) {
|
|
177
|
+
const fsPath = paths.join(skiroutDir, p);
|
|
178
|
+
if (oldFile?.code === newFile.code) {
|
|
179
|
+
const mtime = (await fs.stat(fsPath)).mtime;
|
|
180
|
+
if (mtime !== null &&
|
|
181
|
+
mtime.getDate() <= lastWriteBatch.writeTime.getDate()) {
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
await fs.mkdir(paths.dirname(fsPath), { recursive: true });
|
|
186
|
+
await fs.writeFile(fsPath, newFile.code, "utf-8");
|
|
187
|
+
}
|
|
188
|
+
}));
|
|
189
|
+
// Remove all the pre-existing paths which haven't been overridden.
|
|
190
|
+
await Promise.all(Array.from(preExistingAbsolutePaths)
|
|
191
|
+
.sort((a, b) => b.localeCompare(a, "en-US"))
|
|
192
|
+
.map(async (p) => {
|
|
193
|
+
try {
|
|
194
|
+
await fs.rm(p, { force: true, recursive: true });
|
|
195
|
+
}
|
|
196
|
+
catch (e) {
|
|
197
|
+
// Ignore error.
|
|
198
|
+
}
|
|
199
|
+
}));
|
|
200
|
+
this.lastWriteBatch = {
|
|
201
|
+
pathToFile: pathToFile,
|
|
202
|
+
writeTime: new Date(),
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
async function isDirectory(path) {
|
|
207
|
+
try {
|
|
208
|
+
return (await fs.lstat(path)).isDirectory();
|
|
209
|
+
}
|
|
210
|
+
catch (e) {
|
|
211
|
+
return false;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
function checkNoOverlappingSkiroutDirs(skiroutDirs) {
|
|
215
|
+
for (let i = 0; i < skiroutDirs.length; ++i) {
|
|
216
|
+
for (let j = i + 1; j < skiroutDirs.length; ++j) {
|
|
217
|
+
const dirA = paths.normalize(skiroutDirs[i]);
|
|
218
|
+
const dirB = paths.normalize(skiroutDirs[j]);
|
|
219
|
+
if (dirA.startsWith(dirB + paths.sep) ||
|
|
220
|
+
dirB.startsWith(dirA + paths.sep)) {
|
|
221
|
+
throw new Error(`Overlapping skirout directories: ${dirA} and ${dirB}`);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
async function format(root, mode) {
|
|
227
|
+
const skirFiles = await glob(paths.join(root, "**/*.skir"), {
|
|
228
|
+
withFileTypes: true,
|
|
229
|
+
});
|
|
230
|
+
const pathToFormatResult = new Map();
|
|
231
|
+
for await (const skirFile of skirFiles) {
|
|
232
|
+
if (!skirFile.isFile) {
|
|
233
|
+
continue;
|
|
234
|
+
}
|
|
235
|
+
const unformattedCode = REAL_FILE_SYSTEM.readTextFile(skirFile.fullpath());
|
|
236
|
+
if (unformattedCode === undefined) {
|
|
237
|
+
throw new Error(`Cannot read ${skirFile.fullpath()}`);
|
|
238
|
+
}
|
|
239
|
+
const tokens = tokenizeModule(unformattedCode, "");
|
|
240
|
+
if (tokens.errors.length) {
|
|
241
|
+
renderErrors(tokens.errors);
|
|
242
|
+
process.exit(1);
|
|
243
|
+
}
|
|
244
|
+
const formattedCode = formatModule(tokens.result).newSourceCode;
|
|
245
|
+
pathToFormatResult.set(skirFile.fullpath(), {
|
|
246
|
+
formattedCode: formattedCode,
|
|
247
|
+
alreadyFormatted: formattedCode === unformattedCode,
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
let numFilesNotFormatted = 0;
|
|
251
|
+
for (const [path, result] of pathToFormatResult) {
|
|
252
|
+
const relativePath = paths.relative(root, path).replace(/\\/g, "/");
|
|
253
|
+
if (mode === "fix") {
|
|
254
|
+
if (result.alreadyFormatted) {
|
|
255
|
+
console.log(`${makeGray(relativePath)} (unchanged)`);
|
|
256
|
+
}
|
|
257
|
+
else {
|
|
258
|
+
REAL_FILE_SYSTEM.writeTextFile(path, result.formattedCode);
|
|
259
|
+
console.log(makeGray(relativePath));
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
const _ = mode;
|
|
264
|
+
if (result.alreadyFormatted) {
|
|
265
|
+
console.log(`${makeGray(relativePath)} (OK)`);
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
console.log(makeRed(relativePath));
|
|
269
|
+
++numFilesNotFormatted;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
if (numFilesNotFormatted) {
|
|
274
|
+
console.log();
|
|
275
|
+
console.log(makeRed(`${numFilesNotFormatted} file${numFilesNotFormatted > 1 ? "s" : ""} not formatted; run with 'format fix' to format ${numFilesNotFormatted > 1 ? "them" : "it"}`));
|
|
276
|
+
process.exit(1);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
async function main() {
|
|
280
|
+
const args = parseCommandLine(process.argv.slice(2));
|
|
281
|
+
const root = args.root || ".";
|
|
282
|
+
if (!(await isDirectory(root))) {
|
|
283
|
+
console.error(makeRed(`Not a directory: ${root}`));
|
|
284
|
+
process.exit(1);
|
|
285
|
+
}
|
|
286
|
+
switch (args.kind) {
|
|
287
|
+
case "init": {
|
|
288
|
+
initializeProject(root);
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
case "help":
|
|
292
|
+
case "error": {
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
// Use an absolute path to make error messages more helpful.
|
|
297
|
+
const skirConfigPath = paths.resolve(paths.join(root, "skir.yml"));
|
|
298
|
+
const skirConfigContents = REAL_FILE_SYSTEM.readTextFile(skirConfigPath);
|
|
299
|
+
if (skirConfigContents === undefined) {
|
|
300
|
+
console.error(makeRed(`Cannot find ${skirConfigPath}`));
|
|
301
|
+
process.exit(1);
|
|
302
|
+
}
|
|
303
|
+
let skirConfig;
|
|
304
|
+
{
|
|
305
|
+
// `yaml.parse` fail with a helpful error message, no need to add context.
|
|
306
|
+
const parseResult = SkirConfig.safeParse(yaml.parse(skirConfigContents));
|
|
307
|
+
if (parseResult.success) {
|
|
308
|
+
skirConfig = parseResult.data;
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
console.error(makeRed("Invalid skir config"));
|
|
312
|
+
console.error(` Path: ${skirConfigPath}`);
|
|
313
|
+
const validationError = fromZodError(parseResult.error);
|
|
314
|
+
console.error(validationError.toString());
|
|
315
|
+
process.exit(1);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
const srcDir = paths.join(root, skirConfig.srcDir || ".");
|
|
319
|
+
switch (args.kind) {
|
|
320
|
+
case "format": {
|
|
321
|
+
// Check or fix the formatting to the .skir files in the source directory.
|
|
322
|
+
await format(srcDir, args.subcommand === "check" ? "check" : "fix");
|
|
323
|
+
break;
|
|
324
|
+
}
|
|
325
|
+
case "gen": {
|
|
326
|
+
// Run the skir code generators in watch mode or once.
|
|
327
|
+
const generatorBundles = await Promise.all(skirConfig.generators.map((config) => makeGeneratorBundle(config, root)));
|
|
328
|
+
// Sort for consistency.
|
|
329
|
+
generatorBundles.sort((a, b) => {
|
|
330
|
+
const aId = a.generator.id;
|
|
331
|
+
const bId = b.generator.id;
|
|
332
|
+
return aId.localeCompare(bId, "en-US");
|
|
333
|
+
});
|
|
334
|
+
// Look for duplicates.
|
|
335
|
+
for (let i = 0; i < generatorBundles.length - 1; ++i) {
|
|
336
|
+
const { id } = generatorBundles[i].generator;
|
|
337
|
+
if (id === generatorBundles[i + 1].generator.id) {
|
|
338
|
+
console.error(makeRed(`Duplicate generator: ${id}`));
|
|
339
|
+
process.exit(1);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
const watch = args.subcommand === "watch";
|
|
343
|
+
const watchModeMainLoop = new WatchModeMainLoop(srcDir, generatorBundles, watch);
|
|
344
|
+
if (watch) {
|
|
345
|
+
await watchModeMainLoop.start();
|
|
346
|
+
}
|
|
347
|
+
else {
|
|
348
|
+
const success = await watchModeMainLoop.generate();
|
|
349
|
+
process.exit(success ? 0 : 1);
|
|
350
|
+
}
|
|
351
|
+
break;
|
|
352
|
+
}
|
|
353
|
+
case "snapshot": {
|
|
354
|
+
if (args.subcommand === "view") {
|
|
355
|
+
viewSnapshot({
|
|
356
|
+
rootDir: root,
|
|
357
|
+
});
|
|
358
|
+
}
|
|
359
|
+
else {
|
|
360
|
+
takeSnapshot({
|
|
361
|
+
rootDir: root,
|
|
362
|
+
srcDir: srcDir,
|
|
363
|
+
check: args.subcommand === "check",
|
|
364
|
+
});
|
|
365
|
+
}
|
|
366
|
+
break;
|
|
367
|
+
}
|
|
368
|
+
default: {
|
|
369
|
+
const _ = args;
|
|
370
|
+
throw new TypeError(_);
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
main();
|
|
375
|
+
//# sourceMappingURL=compiler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compiler.js","sourceRoot":"","sources":["../src/compiler.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const GeneratorConfig: z.ZodObject<{
|
|
3
|
+
mod: z.ZodString;
|
|
4
|
+
config: z.ZodAny;
|
|
5
|
+
skiroutDir: z.ZodOptional<z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodArray<z.ZodString, "many">]>>;
|
|
6
|
+
}, "strict", z.ZodTypeAny, {
|
|
7
|
+
mod: string;
|
|
8
|
+
config?: any;
|
|
9
|
+
skiroutDir?: string | string[] | undefined;
|
|
10
|
+
}, {
|
|
11
|
+
mod: string;
|
|
12
|
+
config?: any;
|
|
13
|
+
skiroutDir?: string | string[] | undefined;
|
|
14
|
+
}>;
|
|
15
|
+
export type GeneratorConfig = z.infer<typeof GeneratorConfig>;
|
|
16
|
+
export declare const SkirConfig: z.ZodObject<{
|
|
17
|
+
generators: z.ZodArray<z.ZodObject<{
|
|
18
|
+
mod: z.ZodString;
|
|
19
|
+
config: z.ZodAny;
|
|
20
|
+
skiroutDir: z.ZodOptional<z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodArray<z.ZodString, "many">]>>;
|
|
21
|
+
}, "strict", z.ZodTypeAny, {
|
|
22
|
+
mod: string;
|
|
23
|
+
config?: any;
|
|
24
|
+
skiroutDir?: string | string[] | undefined;
|
|
25
|
+
}, {
|
|
26
|
+
mod: string;
|
|
27
|
+
config?: any;
|
|
28
|
+
skiroutDir?: string | string[] | undefined;
|
|
29
|
+
}>, "many">;
|
|
30
|
+
srcDir: z.ZodOptional<z.ZodString>;
|
|
31
|
+
}, "strict", z.ZodTypeAny, {
|
|
32
|
+
generators: {
|
|
33
|
+
mod: string;
|
|
34
|
+
config?: any;
|
|
35
|
+
skiroutDir?: string | string[] | undefined;
|
|
36
|
+
}[];
|
|
37
|
+
srcDir?: string | undefined;
|
|
38
|
+
}, {
|
|
39
|
+
generators: {
|
|
40
|
+
mod: string;
|
|
41
|
+
config?: any;
|
|
42
|
+
skiroutDir?: string | string[] | undefined;
|
|
43
|
+
}[];
|
|
44
|
+
srcDir?: string | undefined;
|
|
45
|
+
}>;
|
|
46
|
+
export type SkirConfig = z.infer<typeof SkirConfig>;
|
|
47
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,eAAe;;;;;;;;;;;;EAcjB,CAAC;AAEZ,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE9D,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAKZ,CAAC;AAEZ,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const GeneratorConfig = z
|
|
3
|
+
.object({
|
|
4
|
+
mod: z.string(),
|
|
5
|
+
config: z.any(),
|
|
6
|
+
skiroutDir: z
|
|
7
|
+
.union([
|
|
8
|
+
z
|
|
9
|
+
.string()
|
|
10
|
+
.regex(/^.*\/skirout$/)
|
|
11
|
+
.optional(),
|
|
12
|
+
z.array(z.string().regex(/^.*\/skirout$/)),
|
|
13
|
+
])
|
|
14
|
+
.optional(),
|
|
15
|
+
})
|
|
16
|
+
.strict();
|
|
17
|
+
export const SkirConfig = z
|
|
18
|
+
.object({
|
|
19
|
+
generators: z.array(GeneratorConfig),
|
|
20
|
+
srcDir: z.string().optional(),
|
|
21
|
+
})
|
|
22
|
+
.strict();
|
|
23
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC;KAC7B,MAAM,CAAC;IACN,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,MAAM,EAAE,CAAC,CAAC,GAAG,EAAE;IACf,UAAU,EAAE,CAAC;SACV,KAAK,CAAC;QACL,CAAC;aACE,MAAM,EAAE;aACR,KAAK,CAAC,eAAe,CAAC;aACtB,QAAQ,EAAE;QACb,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;KAC3C,CAAC;SACD,QAAQ,EAAE;CACd,CAAC;KACD,MAAM,EAAE,CAAC;AAIZ,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC;KACxB,MAAM,CAAC;IACN,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC;IACpC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC;KACD,MAAM,EAAE,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utilities to help implement the jump-to-definition functionality for skir
|
|
3
|
+
* files in IDEs.
|
|
4
|
+
*/
|
|
5
|
+
import type { Module, Token } from "./types.js";
|
|
6
|
+
export interface DefinitionMatch {
|
|
7
|
+
modulePath: string;
|
|
8
|
+
position: number;
|
|
9
|
+
}
|
|
10
|
+
export declare function findDefinition(module: Module, position: number): DefinitionMatch | null;
|
|
11
|
+
export declare function findTokensWithDefinition(module: Module): readonly Token[];
|
|
12
|
+
//# sourceMappingURL=definition_finder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definition_finder.d.ts","sourceRoot":"","sources":["../src/definition_finder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAe,MAAM,EAAgB,KAAK,EAAE,MAAM,YAAY,CAAC;AAE3E,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,eAAe,GAAG,IAAI,CAExB;AAgID,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,KAAK,EAAE,CAIzE"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
export function findDefinition(module, position) {
|
|
2
|
+
return findDefinitionInDeclarations(module.declarations, position);
|
|
3
|
+
}
|
|
4
|
+
function findDefinitionInDeclarations(declarations, position) {
|
|
5
|
+
for (const declaration of declarations) {
|
|
6
|
+
const maybeMatch = findDefinitionInDeclaration(declaration, position);
|
|
7
|
+
if (maybeMatch) {
|
|
8
|
+
return maybeMatch;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
function findDefinitionInDeclaration(declaration, position) {
|
|
14
|
+
switch (declaration.kind) {
|
|
15
|
+
case "constant": {
|
|
16
|
+
if (declaration.type) {
|
|
17
|
+
const maybeMatch = findDefinitionInResolvedType(declaration.type, position);
|
|
18
|
+
if (maybeMatch) {
|
|
19
|
+
return maybeMatch;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
case "field": {
|
|
25
|
+
if (declaration.type) {
|
|
26
|
+
return findDefinitionInResolvedType(declaration.type, position);
|
|
27
|
+
}
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
case "import":
|
|
31
|
+
case "import-alias": {
|
|
32
|
+
if (tokenContains(declaration.modulePath, position) &&
|
|
33
|
+
declaration.resolvedModulePath) {
|
|
34
|
+
return {
|
|
35
|
+
modulePath: declaration.resolvedModulePath,
|
|
36
|
+
position: 0,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
case "method": {
|
|
42
|
+
if (declaration.requestType) {
|
|
43
|
+
const maybeMatch = findDefinitionInResolvedType(declaration.requestType, position);
|
|
44
|
+
if (maybeMatch) {
|
|
45
|
+
return maybeMatch;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if (declaration.responseType) {
|
|
49
|
+
const maybeMatch = findDefinitionInResolvedType(declaration.responseType, position);
|
|
50
|
+
if (maybeMatch) {
|
|
51
|
+
return maybeMatch;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
case "record": {
|
|
57
|
+
return findDefinitionInDeclarations(declaration.fields, position);
|
|
58
|
+
}
|
|
59
|
+
case "removed": {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
function findDefinitionInResolvedType(type, position) {
|
|
65
|
+
switch (type.kind) {
|
|
66
|
+
case "array": {
|
|
67
|
+
if (type.key) {
|
|
68
|
+
for (const item of type.key.path) {
|
|
69
|
+
if (tokenContains(item.name, position)) {
|
|
70
|
+
const maybeMatch = tokenToMatch(item.name);
|
|
71
|
+
if (maybeMatch) {
|
|
72
|
+
return maybeMatch;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return findDefinitionInResolvedType(type.item, position);
|
|
78
|
+
}
|
|
79
|
+
case "optional": {
|
|
80
|
+
return findDefinitionInResolvedType(type.other, position);
|
|
81
|
+
}
|
|
82
|
+
case "primitive": {
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
case "record": {
|
|
86
|
+
for (const namePart of type.nameParts) {
|
|
87
|
+
if (tokenContains(namePart.token, position)) {
|
|
88
|
+
return tokenToMatch(namePart.declaration.name);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
function tokenContains(token, position) {
|
|
96
|
+
const end = token.position + token.text.length;
|
|
97
|
+
return position >= token.position && position < end;
|
|
98
|
+
}
|
|
99
|
+
function tokenToMatch(token) {
|
|
100
|
+
return {
|
|
101
|
+
modulePath: token.line.modulePath,
|
|
102
|
+
position: token.position,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
export function findTokensWithDefinition(module) {
|
|
106
|
+
const finder = new TokensWithDefinitionFinder();
|
|
107
|
+
finder.findInDeclarations(module.declarations);
|
|
108
|
+
return finder.tokens;
|
|
109
|
+
}
|
|
110
|
+
class TokensWithDefinitionFinder {
|
|
111
|
+
constructor() {
|
|
112
|
+
this.tokens = [];
|
|
113
|
+
}
|
|
114
|
+
findInDeclarations(declarations) {
|
|
115
|
+
for (const declaration of declarations) {
|
|
116
|
+
this.findInDeclaration(declaration);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
findInDeclaration(declaration) {
|
|
120
|
+
switch (declaration.kind) {
|
|
121
|
+
case "constant":
|
|
122
|
+
case "field": {
|
|
123
|
+
if (declaration.type) {
|
|
124
|
+
this.findInResolvedType(declaration.type);
|
|
125
|
+
}
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
case "import":
|
|
129
|
+
case "import-alias": {
|
|
130
|
+
this.tokens.push(declaration.modulePath);
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
case "method": {
|
|
134
|
+
if (declaration.requestType) {
|
|
135
|
+
this.findInResolvedType(declaration.requestType);
|
|
136
|
+
}
|
|
137
|
+
if (declaration.responseType) {
|
|
138
|
+
this.findInResolvedType(declaration.responseType);
|
|
139
|
+
}
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
142
|
+
case "record": {
|
|
143
|
+
this.findInDeclarations(declaration.fields);
|
|
144
|
+
return null;
|
|
145
|
+
}
|
|
146
|
+
case "removed": {
|
|
147
|
+
return null;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
findInResolvedType(type) {
|
|
152
|
+
switch (type.kind) {
|
|
153
|
+
case "array": {
|
|
154
|
+
if (type.key) {
|
|
155
|
+
for (const item of type.key.path) {
|
|
156
|
+
if (item.declaration) {
|
|
157
|
+
this.tokens.push(item.name);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return this.findInResolvedType(type.item);
|
|
162
|
+
}
|
|
163
|
+
case "optional": {
|
|
164
|
+
return this.findInResolvedType(type.other);
|
|
165
|
+
}
|
|
166
|
+
case "primitive": {
|
|
167
|
+
return null;
|
|
168
|
+
}
|
|
169
|
+
case "record": {
|
|
170
|
+
for (const namePart of type.nameParts) {
|
|
171
|
+
if (namePart.declaration) {
|
|
172
|
+
this.tokens.push(namePart.token);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return null;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=definition_finder.js.map
|