@atcute/lex-cli 2.6.1 → 2.8.0
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/dist/codegen.d.ts.map +1 -1
- package/dist/codegen.js +38 -4
- package/dist/codegen.js.map +1 -1
- package/dist/commands/export.d.ts.map +1 -1
- package/dist/commands/export.js +6 -2
- package/dist/commands/export.js.map +1 -1
- package/dist/commands/generate.d.ts.map +1 -1
- package/dist/commands/generate.js +60 -27
- package/dist/commands/generate.js.map +1 -1
- package/dist/config.d.ts +30 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +56 -12
- package/dist/config.js.map +1 -1
- package/dist/lsp-client.d.ts.map +1 -1
- package/dist/lsp-client.js +10 -1
- package/dist/lsp-client.js.map +1 -1
- package/dist/pull-sources/git.d.ts.map +1 -1
- package/dist/pull-sources/git.js +61 -58
- package/dist/pull-sources/git.js.map +1 -1
- package/package.json +6 -6
- package/src/codegen.ts +48 -4
- package/src/commands/export.ts +7 -2
- package/src/commands/generate.ts +71 -29
- package/src/config.ts +77 -23
- package/src/lsp-client.ts +10 -1
- package/src/pull-sources/git.ts +64 -63
package/dist/lsp-client.js
CHANGED
|
@@ -59,6 +59,8 @@ export const createLspClient = async (command, root) => {
|
|
|
59
59
|
// prevent EPIPE crash when child exits mid-write; actual errors
|
|
60
60
|
// are handled by the close/error handlers below
|
|
61
61
|
child.stdin.on('error', () => { });
|
|
62
|
+
// drain stderr so a chatty server doesn't block on a full pipe buffer
|
|
63
|
+
child.stderr.resume();
|
|
62
64
|
// #region JSON-RPC framing
|
|
63
65
|
const pending = new Map();
|
|
64
66
|
let nextId = 1;
|
|
@@ -116,7 +118,6 @@ export const createLspClient = async (command, root) => {
|
|
|
116
118
|
catch {
|
|
117
119
|
continue;
|
|
118
120
|
}
|
|
119
|
-
// dispatch responses to pending requests, ignore everything else
|
|
120
121
|
if (message.id != null) {
|
|
121
122
|
const entry = pending.get(message.id);
|
|
122
123
|
if (entry) {
|
|
@@ -128,6 +129,14 @@ export const createLspClient = async (command, root) => {
|
|
|
128
129
|
entry.resolve(message.result);
|
|
129
130
|
}
|
|
130
131
|
}
|
|
132
|
+
else if (message.method != null) {
|
|
133
|
+
// server-initiated request — reply with MethodNotFound so it doesn't hang
|
|
134
|
+
sendMessage({
|
|
135
|
+
jsonrpc: '2.0',
|
|
136
|
+
id: message.id,
|
|
137
|
+
error: { code: -32601, message: `method not found` },
|
|
138
|
+
});
|
|
139
|
+
}
|
|
131
140
|
}
|
|
132
141
|
}
|
|
133
142
|
};
|
package/dist/lsp-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lsp-client.js","sourceRoot":"","sources":["../src/lsp-client.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"lsp-client.js","sourceRoot":"","sources":["../src/lsp-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/pull-sources/git.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAItD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAGpD,OAAO,KAAK,EAAE,UAAU,EAAiB,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5E;;;;;GAKG;AACH,eAAO,MAAM,aAAa,WACjB,eAAe,oBACL,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,UAAU,CAAC,KAC5D,OAAO,CAAC,UAAU,
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/pull-sources/git.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAItD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAGpD,OAAO,KAAK,EAAE,UAAU,EAAiB,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5E;;;;;GAKG;AACH,eAAO,MAAM,aAAa,WACjB,eAAe,oBACL,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,UAAU,CAAC,KAC5D,OAAO,CAAC,UAAU,CAmFpB,CAAC"}
|
package/dist/pull-sources/git.js
CHANGED
|
@@ -13,68 +13,71 @@ export const pullGitSource = async (source, parseLexiconFile) => {
|
|
|
13
13
|
const tempParent = await fs.mkdtemp(path.join(os.tmpdir(), 'lex-cli-pull-'));
|
|
14
14
|
const cloneDir = path.join(tempParent, 'repo');
|
|
15
15
|
try {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
catch (err) {
|
|
28
|
-
if (err instanceof GitError) {
|
|
29
|
-
console.error(pc.bold(pc.red(`git clone failed for ${source.remote}:`)));
|
|
30
|
-
console.error(err.stderr || err.message);
|
|
31
|
-
process.exit(1);
|
|
16
|
+
try {
|
|
17
|
+
await runGit([
|
|
18
|
+
'clone',
|
|
19
|
+
'--filter=blob:none',
|
|
20
|
+
'--depth',
|
|
21
|
+
'1',
|
|
22
|
+
'--sparse',
|
|
23
|
+
...(source.ref ? ['--branch', source.ref, '--single-branch'] : []),
|
|
24
|
+
source.remote,
|
|
25
|
+
cloneDir,
|
|
26
|
+
], { timeoutMs: 60_000 });
|
|
32
27
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
catch (err) {
|
|
41
|
-
if (err instanceof GitError) {
|
|
42
|
-
console.error(pc.bold(pc.red(`git sparse-checkout failed for ${source.remote}:`)));
|
|
43
|
-
console.error(err.stderr || err.message);
|
|
44
|
-
process.exit(1);
|
|
28
|
+
catch (err) {
|
|
29
|
+
if (err instanceof GitError) {
|
|
30
|
+
console.error(pc.bold(pc.red(`git clone failed for ${source.remote}:`)));
|
|
31
|
+
console.error(err.stderr || err.message);
|
|
32
|
+
process.exit(1);
|
|
33
|
+
}
|
|
34
|
+
throw err;
|
|
45
35
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
const absolute = path.join(cloneDir, filename);
|
|
51
|
-
const stat = await fs.stat(absolute);
|
|
52
|
-
if (!stat.isFile()) {
|
|
53
|
-
continue;
|
|
36
|
+
try {
|
|
37
|
+
await runGit(['-C', cloneDir, 'sparse-checkout', 'set', '--no-cone', ...source.pattern], {
|
|
38
|
+
timeoutMs: 30_000,
|
|
39
|
+
});
|
|
54
40
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
41
|
+
catch (err) {
|
|
42
|
+
if (err instanceof GitError) {
|
|
43
|
+
console.error(pc.bold(pc.red(`git sparse-checkout failed for ${source.remote}:`)));
|
|
44
|
+
console.error(err.stderr || err.message);
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
throw err;
|
|
48
|
+
}
|
|
49
|
+
const pulled = new Map();
|
|
50
|
+
for await (const filename of fs.glob(source.pattern, { cwd: cloneDir })) {
|
|
51
|
+
const absolute = path.join(cloneDir, filename);
|
|
52
|
+
const stat = await fs.stat(absolute);
|
|
53
|
+
if (!stat.isFile()) {
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
const location = {
|
|
57
|
+
absolutePath: absolute,
|
|
58
|
+
relativePath: filename,
|
|
59
|
+
sourceDescription: source.remote,
|
|
60
|
+
};
|
|
61
|
+
const doc = await parseLexiconFile(location);
|
|
62
|
+
pulled.set(doc.id, { nsid: doc.id, doc, location });
|
|
74
63
|
}
|
|
75
|
-
|
|
64
|
+
let rev;
|
|
65
|
+
try {
|
|
66
|
+
const result = await runGit(['-C', cloneDir, 'rev-parse', 'HEAD'], { timeoutMs: 10_000 });
|
|
67
|
+
rev = result.stdout.trim();
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
if (err instanceof GitError) {
|
|
71
|
+
console.error(pc.bold(pc.red(`git rev-parse failed for ${source.remote}:`)));
|
|
72
|
+
console.error(err.stderr || err.message);
|
|
73
|
+
process.exit(1);
|
|
74
|
+
}
|
|
75
|
+
throw err;
|
|
76
|
+
}
|
|
77
|
+
return { pulled, rev };
|
|
78
|
+
}
|
|
79
|
+
finally {
|
|
80
|
+
await fs.rm(tempParent, { recursive: true, force: true });
|
|
76
81
|
}
|
|
77
|
-
await fs.rm(tempParent, { recursive: true, force: true });
|
|
78
|
-
return { pulled, rev };
|
|
79
82
|
};
|
|
80
83
|
//# sourceMappingURL=git.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/pull-sources/git.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAIlC,OAAO,EAAE,MAAM,YAAY,CAAC;AAG5B,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAI7C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EACjC,MAAuB,EACvB,gBAA8D,EACxC,EAAE;IACxB,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,eAAe,CAAC,CAAC,CAAC;IAE7E,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAE/C,IAAI,CAAC;QACJ,MAAM,MAAM,CACX;
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/pull-sources/git.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atcute/lex-cli",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.8.0",
|
|
4
4
|
"description": "cli tool to generate type definitions for atcute",
|
|
5
5
|
"license": "0BSD",
|
|
6
6
|
"repository": {
|
|
@@ -28,15 +28,15 @@
|
|
|
28
28
|
"@optique/core": "^0.10.7",
|
|
29
29
|
"@optique/run": "^0.10.7",
|
|
30
30
|
"picocolors": "^1.1.1",
|
|
31
|
-
"prettier": "^3.8.
|
|
31
|
+
"prettier": "^3.8.2",
|
|
32
32
|
"@atcute/identity": "^1.1.4",
|
|
33
33
|
"@atcute/identity-resolver": "^1.2.2",
|
|
34
|
-
"@atcute/
|
|
35
|
-
"@atcute/lexicon-doc": "^2.
|
|
36
|
-
"@atcute/
|
|
34
|
+
"@atcute/lexicon-resolver": "^0.1.6",
|
|
35
|
+
"@atcute/lexicon-doc": "^2.2.0",
|
|
36
|
+
"@atcute/lexicons": "^1.3.0"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"@types/node": "^25.
|
|
39
|
+
"@types/node": "^25.6.0",
|
|
40
40
|
"tschema": "^3.2.0",
|
|
41
41
|
"@atcute/uint8array": "^1.1.1"
|
|
42
42
|
},
|
package/src/codegen.ts
CHANGED
|
@@ -59,6 +59,32 @@ const resolveExternalImport = (nsid: string, mappings: ImportMapping[]): ImportM
|
|
|
59
59
|
|
|
60
60
|
const PURE = `/*#__PURE__*/`;
|
|
61
61
|
|
|
62
|
+
const simplifyAccept = (accept: string[] | undefined): string[] | undefined => {
|
|
63
|
+
if (accept === undefined || accept.length === 0 || accept.includes('*/*')) {
|
|
64
|
+
return undefined;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const wildcards = new Set<string>();
|
|
68
|
+
for (const mime of accept) {
|
|
69
|
+
if (mime.endsWith('/*')) {
|
|
70
|
+
wildcards.add(mime.slice(0, mime.indexOf('/')));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
if (wildcards.size === 0) {
|
|
75
|
+
return accept;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const simplified = accept.filter((mime) => {
|
|
79
|
+
if (mime.endsWith('/*')) {
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
return !wildcards.has(mime.slice(0, mime.indexOf('/')));
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
return simplified.length > 0 ? simplified : undefined;
|
|
86
|
+
};
|
|
87
|
+
|
|
62
88
|
export function* generateLexiconApi(opts: LexiconApiOptions): Generator<SourceFile> {
|
|
63
89
|
const importExt = opts.modules?.importSuffix;
|
|
64
90
|
|
|
@@ -658,9 +684,10 @@ const generateJsdocField = (spec: LexUserType | LexRefVariant | LexUnknown) => {
|
|
|
658
684
|
break;
|
|
659
685
|
}
|
|
660
686
|
case 'blob': {
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
687
|
+
const accept = simplifyAccept(spec.accept);
|
|
688
|
+
if (accept) {
|
|
689
|
+
const formatted = accept.map((mime) => mime.replace(/\*\//g, '*\\/')).join(', ');
|
|
690
|
+
lines.push(`@accept ${formatted}`);
|
|
664
691
|
}
|
|
665
692
|
if (spec.maxSize !== undefined) {
|
|
666
693
|
lines.push(`@maxSize ${spec.maxSize}`);
|
|
@@ -890,7 +917,24 @@ const generateType = (
|
|
|
890
917
|
|
|
891
918
|
// LexBlob
|
|
892
919
|
case 'blob': {
|
|
893
|
-
|
|
920
|
+
let pipe: string[] = [];
|
|
921
|
+
|
|
922
|
+
if (spec.maxSize !== undefined) {
|
|
923
|
+
pipe.push(`${PURE} v.blobSize(${lit(spec.maxSize)})`);
|
|
924
|
+
}
|
|
925
|
+
|
|
926
|
+
const accept = simplifyAccept(spec.accept);
|
|
927
|
+
if (accept !== undefined) {
|
|
928
|
+
pipe.push(`${PURE} v.blobAccept(${lit(accept)})`);
|
|
929
|
+
}
|
|
930
|
+
|
|
931
|
+
let call = `${PURE} v.blob()`;
|
|
932
|
+
|
|
933
|
+
if (pipe.length !== 0) {
|
|
934
|
+
call = `${PURE} v.constrain(${call}, [ ${pipe.join(', ')} ])`;
|
|
935
|
+
}
|
|
936
|
+
|
|
937
|
+
return call;
|
|
894
938
|
}
|
|
895
939
|
|
|
896
940
|
// LexIpldType
|
package/src/commands/export.ts
CHANGED
|
@@ -68,8 +68,13 @@ export const runExport = async (args: ExportCommand): Promise<void> => {
|
|
|
68
68
|
const config = await loadConfig(args.config);
|
|
69
69
|
const exportConfig = ensureExportConfig(config);
|
|
70
70
|
|
|
71
|
-
// use export.files if specified, otherwise fall back to
|
|
72
|
-
const files = exportConfig.files ?? config.files;
|
|
71
|
+
// use export.files if specified, otherwise fall back to generate.files
|
|
72
|
+
const files = exportConfig.files ?? config.generate?.files;
|
|
73
|
+
if (!files || files.length === 0) {
|
|
74
|
+
console.error(pc.bold(pc.red(`export.files or generate.files must be specified`)));
|
|
75
|
+
process.exit(1);
|
|
76
|
+
}
|
|
77
|
+
|
|
73
78
|
const outdir = path.resolve(config.root, exportConfig.outdir);
|
|
74
79
|
const formatter = await createFormatter(config.formatter, config.root);
|
|
75
80
|
|
package/src/commands/generate.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as fs from 'node:fs/promises';
|
|
2
|
+
import * as module from 'node:module';
|
|
2
3
|
import * as path from 'node:path';
|
|
3
4
|
|
|
4
5
|
import { merge, object } from '@optique/core/constructs';
|
|
@@ -8,7 +9,7 @@ import { command, constant } from '@optique/core/primitives';
|
|
|
8
9
|
import pc from 'picocolors';
|
|
9
10
|
|
|
10
11
|
import { generateLexiconApi, type ImportMapping } from '../codegen.ts';
|
|
11
|
-
import { loadConfig } from '../config.ts';
|
|
12
|
+
import { loadConfig, type GenerateConfig, type NormalizedConfig } from '../config.ts';
|
|
12
13
|
import { createFormatter } from '../formatter.ts';
|
|
13
14
|
import { loadLexicons } from '../lexicon-loader.ts';
|
|
14
15
|
import { packageJsonSchema } from '../lexicon-metadata.ts';
|
|
@@ -22,40 +23,51 @@ const resolveImportsToMappings = async (
|
|
|
22
23
|
configDirname: string,
|
|
23
24
|
): Promise<ImportMapping[]> => {
|
|
24
25
|
const mappings: ImportMapping[] = [];
|
|
26
|
+
const require = module.createRequire(path.join(configDirname, '__lex_cli__.js'));
|
|
25
27
|
|
|
26
28
|
for (const packageName of imports) {
|
|
27
|
-
// walk up from config directory to find package in node_modules
|
|
28
29
|
let packageJson: unknown;
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
30
|
+
|
|
31
|
+
try {
|
|
32
|
+
const entryPath = require.resolve(packageName);
|
|
33
|
+
|
|
34
|
+
let currentDir = path.dirname(entryPath);
|
|
35
|
+
while (true) {
|
|
36
|
+
const candidatePath = path.join(currentDir, 'package.json');
|
|
37
|
+
try {
|
|
38
|
+
const content = await fs.readFile(candidatePath, 'utf8');
|
|
39
|
+
packageJson = JSON.parse(content);
|
|
40
|
+
break;
|
|
41
|
+
} catch (err: any) {
|
|
42
|
+
if (err.code !== 'ENOENT') {
|
|
43
|
+
console.error(pc.bold(pc.red(`failed to read package.json for "${packageName}":`)));
|
|
44
|
+
console.error(err);
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
if (currentDir === configDirname) {
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const parentDir = path.dirname(currentDir);
|
|
54
|
+
if (parentDir === currentDir) {
|
|
55
|
+
break;
|
|
45
56
|
}
|
|
46
57
|
|
|
47
|
-
|
|
48
|
-
currentDir = path.dirname(currentDir);
|
|
58
|
+
currentDir = parentDir;
|
|
49
59
|
}
|
|
60
|
+
} catch (err) {
|
|
61
|
+
console.error(pc.bold(pc.red(`failed to resolve package "${packageName}"`)));
|
|
62
|
+
console.error(err);
|
|
63
|
+
process.exit(1);
|
|
50
64
|
}
|
|
51
65
|
|
|
52
|
-
if (!
|
|
53
|
-
console.error(pc.bold(pc.red(`failed to
|
|
54
|
-
console.error(`Could not find package in node_modules starting from ${configDirname}`);
|
|
66
|
+
if (!packageJson) {
|
|
67
|
+
console.error(pc.bold(pc.red(`failed to locate package.json for "${packageName}"`)));
|
|
55
68
|
process.exit(1);
|
|
56
69
|
}
|
|
57
70
|
|
|
58
|
-
// validate package.json
|
|
59
71
|
const result = packageJsonSchema.try(packageJson, { mode: 'passthrough' });
|
|
60
72
|
if (!result.ok) {
|
|
61
73
|
console.error(pc.bold(pc.red(`invalid atcute:lexicons in "${packageName}":`)));
|
|
@@ -133,24 +145,54 @@ export const generateCommandSchema = command(
|
|
|
133
145
|
|
|
134
146
|
export type GenerateCommand = InferValue<typeof generateCommandSchema>;
|
|
135
147
|
|
|
148
|
+
type ResolvedGenerateConfig = GenerateConfig & { outdir: string; files: string[] };
|
|
149
|
+
|
|
150
|
+
const ensureGenerateConfig = (config: NormalizedConfig): ResolvedGenerateConfig => {
|
|
151
|
+
const generate = config.generate;
|
|
152
|
+
if (!generate) {
|
|
153
|
+
console.error(pc.bold(pc.red(`generate configuration missing`)));
|
|
154
|
+
process.exit(1);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
const { outdir, files } = generate;
|
|
158
|
+
if (!outdir) {
|
|
159
|
+
console.error(pc.bold(pc.red(`generate.outdir is required`)));
|
|
160
|
+
process.exit(1);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
if (!files || files.length === 0) {
|
|
164
|
+
console.error(pc.bold(pc.red(`generate.files is required`)));
|
|
165
|
+
process.exit(1);
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
return { ...generate, outdir, files };
|
|
169
|
+
};
|
|
170
|
+
|
|
136
171
|
/**
|
|
137
172
|
* runs the generate command to create type definitions from lexicon documents
|
|
138
173
|
* @param args parsed command arguments
|
|
139
174
|
*/
|
|
140
175
|
export const runGenerate = async (args: GenerateCommand): Promise<void> => {
|
|
141
176
|
const config = await loadConfig(args.config);
|
|
177
|
+
const generateConfig = ensureGenerateConfig(config);
|
|
142
178
|
|
|
143
179
|
// resolve imports to mappings
|
|
144
|
-
const importMappings =
|
|
145
|
-
|
|
180
|
+
const importMappings = generateConfig.imports
|
|
181
|
+
? await resolveImportsToMappings(generateConfig.imports, config.root)
|
|
182
|
+
: [];
|
|
183
|
+
const allMappings = [...importMappings, ...(generateConfig.mappings ?? [])];
|
|
146
184
|
|
|
147
185
|
// load lexicons from files
|
|
148
|
-
const loaded = await loadLexicons(
|
|
186
|
+
const loaded = await loadLexicons(generateConfig.files, config.root);
|
|
149
187
|
const documents = loaded.map((l) => l.doc);
|
|
150
188
|
|
|
151
|
-
const outdir = path.join(config.root,
|
|
189
|
+
const outdir = path.join(config.root, generateConfig.outdir);
|
|
152
190
|
const formatter = await createFormatter(config.formatter, config.root);
|
|
153
191
|
|
|
192
|
+
if (generateConfig.clean) {
|
|
193
|
+
await fs.rm(outdir, { recursive: true, force: true });
|
|
194
|
+
}
|
|
195
|
+
|
|
154
196
|
try {
|
|
155
197
|
const pending: Promise<void>[] = [];
|
|
156
198
|
|
|
@@ -158,7 +200,7 @@ export const runGenerate = async (args: GenerateCommand): Promise<void> => {
|
|
|
158
200
|
documents: documents,
|
|
159
201
|
mappings: allMappings,
|
|
160
202
|
modules: {
|
|
161
|
-
importSuffix:
|
|
203
|
+
importSuffix: generateConfig.modules?.importSuffix ?? '.js',
|
|
162
204
|
},
|
|
163
205
|
})) {
|
|
164
206
|
const filename = path.join(outdir, file.filename);
|
package/src/config.ts
CHANGED
|
@@ -79,15 +79,6 @@ const formatterConfigSchema = v.union(
|
|
|
79
79
|
}),
|
|
80
80
|
);
|
|
81
81
|
|
|
82
|
-
export type GitSourceConfig = v.Infer<typeof gitSourceConfigSchema>;
|
|
83
|
-
export type AtprotoNsidsSourceConfig = v.Infer<typeof atprotoNsidsSourceConfigSchema>;
|
|
84
|
-
export type AtprotoAuthoritySourceConfig = v.Infer<typeof atprotoAuthoritySourceConfigSchema>;
|
|
85
|
-
export type AtprotoSourceConfig = v.Infer<typeof atprotoSourceConfigSchema>;
|
|
86
|
-
export type SourceConfig = v.Infer<typeof sourceConfigSchema>;
|
|
87
|
-
export type PullConfig = v.Infer<typeof pullConfigSchema>;
|
|
88
|
-
export type ExportConfig = v.Infer<typeof exportConfigSchema>;
|
|
89
|
-
export type FormatterConfig = v.Infer<typeof formatterConfigSchema>;
|
|
90
|
-
|
|
91
82
|
const isValidLexiconPattern = (pattern: string): boolean => {
|
|
92
83
|
if (pattern.endsWith('.*')) {
|
|
93
84
|
return isNsid(`${pattern.slice(0, -2)}.x`);
|
|
@@ -127,32 +118,71 @@ const importMappingSchema: v.Type<ImportMapping> = v.object({
|
|
|
127
118
|
imports: mappingImports,
|
|
128
119
|
});
|
|
129
120
|
|
|
130
|
-
|
|
131
|
-
|
|
121
|
+
const modulesConfigSchema = v
|
|
122
|
+
.object({
|
|
123
|
+
importSuffix: v
|
|
124
|
+
.string()
|
|
125
|
+
.assert((value) => value.length > 0, `must not be empty`)
|
|
126
|
+
.optional(),
|
|
127
|
+
})
|
|
128
|
+
.partial();
|
|
129
|
+
|
|
130
|
+
const generateConfigSchema = v.object({
|
|
131
|
+
outdir: v
|
|
132
|
+
.string()
|
|
133
|
+
.assert((value) => value.length > 0, `must not be empty`)
|
|
134
|
+
.optional(),
|
|
132
135
|
files: v
|
|
133
136
|
.array(v.string().assert((value) => value.length > 0, `must not be empty`))
|
|
134
|
-
.assert((value) => value.length > 0, `must include at least one glob pattern`)
|
|
137
|
+
.assert((value) => value.length > 0, `must include at least one glob pattern`)
|
|
138
|
+
.optional(),
|
|
135
139
|
imports: v.array(v.string().assert((value) => value.length > 0, `must not be empty`)).optional(),
|
|
136
140
|
mappings: v.array(importMappingSchema).optional(),
|
|
137
|
-
modules:
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
141
|
+
modules: modulesConfigSchema.optional(),
|
|
142
|
+
clean: v.boolean().optional(),
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
export type GitSourceConfig = v.Infer<typeof gitSourceConfigSchema>;
|
|
146
|
+
export type AtprotoNsidsSourceConfig = v.Infer<typeof atprotoNsidsSourceConfigSchema>;
|
|
147
|
+
export type AtprotoAuthoritySourceConfig = v.Infer<typeof atprotoAuthoritySourceConfigSchema>;
|
|
148
|
+
export type AtprotoSourceConfig = v.Infer<typeof atprotoSourceConfigSchema>;
|
|
149
|
+
export type SourceConfig = v.Infer<typeof sourceConfigSchema>;
|
|
150
|
+
export type PullConfig = v.Infer<typeof pullConfigSchema>;
|
|
151
|
+
export type ExportConfig = v.Infer<typeof exportConfigSchema>;
|
|
152
|
+
export type FormatterConfig = v.Infer<typeof formatterConfigSchema>;
|
|
153
|
+
export type GenerateConfig = v.Infer<typeof generateConfigSchema>;
|
|
154
|
+
|
|
155
|
+
export const lexiconConfigSchema = v.object({
|
|
156
|
+
/** @deprecated moved to `generate.outdir` */
|
|
157
|
+
outdir: v
|
|
158
|
+
.string()
|
|
159
|
+
.assert((value) => value.length > 0, `must not be empty`)
|
|
160
|
+
.optional(),
|
|
161
|
+
/** @deprecated moved to `generate.files` */
|
|
162
|
+
files: v
|
|
163
|
+
.array(v.string().assert((value) => value.length > 0, `must not be empty`))
|
|
164
|
+
.assert((value) => value.length > 0, `must include at least one glob pattern`)
|
|
145
165
|
.optional(),
|
|
166
|
+
/** @deprecated moved to `generate.imports` */
|
|
167
|
+
imports: v.array(v.string().assert((value) => value.length > 0, `must not be empty`)).optional(),
|
|
168
|
+
/** @deprecated moved to `generate.mappings` */
|
|
169
|
+
mappings: v.array(importMappingSchema).optional(),
|
|
170
|
+
/** @deprecated moved to `generate.modules` */
|
|
171
|
+
modules: modulesConfigSchema.optional(),
|
|
146
172
|
formatter: formatterConfigSchema.optional((): FormatterConfig => ({ type: 'prettier' })),
|
|
173
|
+
generate: generateConfigSchema.optional(),
|
|
147
174
|
pull: pullConfigSchema.optional(),
|
|
148
175
|
export: exportConfigSchema.optional(),
|
|
149
176
|
});
|
|
150
177
|
|
|
151
178
|
export type LexiconConfig = v.Infer<typeof lexiconConfigSchema>;
|
|
152
179
|
|
|
153
|
-
export
|
|
180
|
+
export type NormalizedConfig = Omit<
|
|
181
|
+
LexiconConfig,
|
|
182
|
+
'outdir' | 'files' | 'imports' | 'mappings' | 'modules'
|
|
183
|
+
> & {
|
|
154
184
|
root: string;
|
|
155
|
-
}
|
|
185
|
+
};
|
|
156
186
|
|
|
157
187
|
export const loadConfig = async (configPath?: string): Promise<NormalizedConfig> => {
|
|
158
188
|
let configFilename: string | undefined;
|
|
@@ -207,5 +237,29 @@ export const loadConfig = async (configPath?: string): Promise<NormalizedConfig>
|
|
|
207
237
|
process.exit(1);
|
|
208
238
|
}
|
|
209
239
|
|
|
210
|
-
|
|
240
|
+
const { outdir, files, imports, mappings, modules, generate, ...rest } = configResult.value;
|
|
241
|
+
|
|
242
|
+
// back-compat: top-level generate options were moved into `generate.*`. merge the legacy
|
|
243
|
+
// top-level values into `generate`, with nested `generate.*` winning on conflicts. the result
|
|
244
|
+
// is only present if at least one generate-related option was provided anywhere.
|
|
245
|
+
const hasLegacyTopLevel =
|
|
246
|
+
outdir !== undefined ||
|
|
247
|
+
files !== undefined ||
|
|
248
|
+
imports !== undefined ||
|
|
249
|
+
mappings !== undefined ||
|
|
250
|
+
modules !== undefined;
|
|
251
|
+
|
|
252
|
+
let normalizedGenerate: GenerateConfig | undefined;
|
|
253
|
+
if (generate || hasLegacyTopLevel) {
|
|
254
|
+
normalizedGenerate = {
|
|
255
|
+
outdir: generate?.outdir ?? outdir,
|
|
256
|
+
files: generate?.files ?? files,
|
|
257
|
+
imports: generate?.imports ?? imports,
|
|
258
|
+
mappings: generate?.mappings ?? mappings,
|
|
259
|
+
modules: generate?.modules ?? modules,
|
|
260
|
+
clean: generate?.clean,
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
return { ...rest, generate: normalizedGenerate, root: configDirname };
|
|
211
265
|
};
|