@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.
@@ -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
  };
@@ -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":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAEhC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AA4BnD,aAAa;AAEb,qBAAqB;AAErB,MAAM,cAAc,GAAG,CAAC,IAAY,EAAE,KAAiB,EAAU,EAAE;IAClE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACb,CAAC;IAED,2BAA2B;IAC3B,MAAM,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;IACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACtB,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACxB,CAAC;IACF,CAAC;IAED,MAAM,gBAAgB,GAAG,CAAC,GAAa,EAAU,EAAE;QAClD,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC;IAC9D,CAAC,CAAC;IAEF,uEAAuE;IACvE,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACtC,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;QACzD,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YACpB,OAAO,QAAQ,CAAC;QACjB,CAAC;QACD,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,IAAI,MAAM,GAAG,IAAI,CAAC;IAClB,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACjD,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7C,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC,CAAC;AAEF,aAAa;AAEb,MAAM,eAAe,GAAG,CAAC,QAAgB,EAAU,EAAE;IACpD,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3D,OAAO,YAAY,CAAC;IACrB,CAAC;IACD,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAChC,OAAO,MAAM,CAAC;IACf,CAAC;IACD,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAChE,OAAO,UAAU,CAAC;IACnB,CAAC;IACD,OAAO,YAAY,CAAC;AACrB,CAAC,CAAC;AAeF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAAE,OAAe,EAAE,IAAY,EAAsB,EAAE;IAC1F,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE;QAC1C,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;KAC/B,CAAC,CAAC;IAEH,gEAAgE;IAChE,gDAAgD;IAChD,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAElC,sEAAsE;IACtE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IAEtB,2BAA2B;IAE3B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAyC,CAAC;IACjE,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,MAAM,GAAG,KAAK,CAAC;IAEnB,MAAM,WAAW,GAAG,CAAC,OAAgC,EAAQ,EAAE;QAC9D,IAAI,MAAM,EAAE,CAAC;YACZ,OAAO;QACR,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QAEvC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,mBAAmB,UAAU,WAAW,IAAI,EAAE,CAAC,CAAC;IACnE,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,CAAC,MAAc,EAAE,MAAgB,EAAoB,EAAE;QAC1E,IAAI,MAAM,EAAE,CAAC;YACZ,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC;QACnE,CAAC;QAED,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;QACpB,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,EAAW,CAAC;QAElD,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC1B,WAAW,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAEpD,OAAO,QAAQ,CAAC,OAAO,CAAC;IACzB,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,CAAC,MAAc,EAAE,MAAgB,EAAQ,EAAE;QACnE,WAAW,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACjD,CAAC,CAAC;IAEF,6BAA6B;IAC7B,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAEjD,IAAI,MAAM,GAAW,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACrC,IAAI,aAAa,GAAG,CAAC,CAAC,CAAC;IAEvB,MAAM,aAAa,GAAG,GAAS,EAAE;QAChC,OAAO,IAAI,EAAE,CAAC;YACb,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC1B,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;gBACxD,IAAI,cAAc,KAAK,CAAC,CAAC,EAAE,CAAC;oBAC3B,MAAM;gBACP,CAAC;gBAED,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC;gBAC1D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;gBAEvD,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;gBAE7C,IAAI,CAAC,KAAK,EAAE,CAAC;oBACZ,SAAS;gBACV,CAAC;gBAED,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACxC,CAAC;YAED,IAAI,MAAM,CAAC,MAAM,GAAG,aAAa,EAAE,CAAC;gBACnC,MAAM;YACP,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;YACvD,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;YACxC,aAAa,GAAG,CAAC,CAAC,CAAC;YAEnB,IAAI,OAAuB,CAAC;YAC5B,IAAI,CAAC;gBACJ,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC;YAAC,MAAM,CAAC;gBACR,SAAS;YACV,CAAC;YAED,IAAI,OAAO,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;gBACxB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBACtC,IAAI,KAAK,EAAE,CAAC;oBACX,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBAE3B,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;wBACnB,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,aAAa,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;oBACtF,CAAC;yBAAM,CAAC;wBACP,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;oBAC/B,CAAC;gBACF,CAAC;qBAAM,IAAI,OAAO,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;oBACnC,0EAA0E;oBAC1E,WAAW,CAAC;wBACX,OAAO,EAAE,KAAK;wBACd,EAAE,EAAE,OAAO,CAAC,EAAE;wBACd,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,kBAAkB,EAAE;qBACpD,CAAC,CAAC;gBACJ,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC,CAAC;IAEF,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;QACzC,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACpE,aAAa,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,CAAC,KAAY,EAAQ,EAAE;QAC5C,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;YACjC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;QACD,OAAO,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC,CAAC;IAEF,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;QACzB,MAAM,GAAG,IAAI,CAAC;QACd,aAAa,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE;QAC9B,MAAM,GAAG,IAAI,CAAC;QACd,aAAa,CAAC,IAAI,KAAK,CAAC,4CAA4C,QAAQ,EAAE,CAAC,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;IAEH,aAAa;IAEb,+BAA+B;IAE/B,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;IAE7C,MAAM,WAAW,CAAC,YAAY,EAAE;QAC/B,SAAS,EAAE,OAAO,CAAC,GAAG;QACtB,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QAC/B,OAAO;QACP,YAAY,EAAE,EAAE;KAChB,CAAC,CAAC;IAEH,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAEhC,aAAa;IAEb,OAAO;QACN,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ;YAClC,MAAM,GAAG,GAAG,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC;YAC7C,MAAM,UAAU,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;YAE7C,gBAAgB,CAAC,sBAAsB,EAAE;gBACxC,YAAY,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE;aACzD,CAAC,CAAC;YAEH,MAAM,KAAK,GAAG,CAAC,MAAM,WAAW,CAAC,yBAAyB,EAAE;gBAC3D,YAAY,EAAE,EAAE,GAAG,EAAE;gBACrB,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE;aAC5C,CAAC,CAAsB,CAAC;YAEzB,gBAAgB,CAAC,uBAAuB,EAAE;gBACzC,YAAY,EAAE,EAAE,GAAG,EAAE;aACrB,CAAC,CAAC;YAEH,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAClC,OAAO,IAAI,CAAC;YACb,CAAC;YAED,OAAO,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACpC,CAAC;QAED,KAAK,CAAC,OAAO;YACZ,IAAI,CAAC,MAAM,EAAE,CAAC;gBACb,MAAM,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;gBACpC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAC1B,CAAC;YAED,IAAI,CAAC,MAAM,EAAE,CAAC;gBACb,KAAK,CAAC,IAAI,EAAE,CAAC;gBACb,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YAClE,CAAC;QACF,CAAC;KACD,CAAC;AACH,CAAC,CAAC"}
@@ -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,CAkFpB,CAAC"}
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"}
@@ -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
- await runGit([
17
- 'clone',
18
- '--filter=blob:none',
19
- '--depth',
20
- '1',
21
- '--sparse',
22
- ...(source.ref ? ['--branch', source.ref, '--single-branch'] : []),
23
- source.remote,
24
- cloneDir,
25
- ], { timeoutMs: 60_000 });
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
- throw err;
34
- }
35
- try {
36
- await runGit(['-C', cloneDir, 'sparse-checkout', 'set', '--no-cone', ...source.pattern], {
37
- timeoutMs: 30_000,
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
- throw err;
47
- }
48
- const pulled = new Map();
49
- for await (const filename of fs.glob(source.pattern, { cwd: cloneDir })) {
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
- const location = {
56
- absolutePath: absolute,
57
- relativePath: filename,
58
- sourceDescription: source.remote,
59
- };
60
- const doc = await parseLexiconFile(location);
61
- pulled.set(doc.id, { nsid: doc.id, doc, location });
62
- }
63
- // get the commit hash
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);
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
- throw err;
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":"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"}
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.6.1",
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.1",
31
+ "prettier": "^3.8.2",
32
32
  "@atcute/identity": "^1.1.4",
33
33
  "@atcute/identity-resolver": "^1.2.2",
34
- "@atcute/lexicons": "^1.2.10",
35
- "@atcute/lexicon-doc": "^2.1.2",
36
- "@atcute/lexicon-resolver": "^0.1.6"
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.5.2",
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
- if (spec.accept) {
662
- const accept = spec.accept.map((mime) => mime.replace(/\*\//g, '*\\/')).join(', ');
663
- lines.push(`@accept ${accept}`);
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
- return `${PURE} v.blob()`;
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
@@ -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 root files config
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
 
@@ -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
- let currentDir = configDirname;
30
- let found = false;
31
-
32
- while (currentDir !== path.dirname(currentDir)) {
33
- const candidatePath = path.join(currentDir, 'node_modules', packageName, 'package.json');
34
- try {
35
- const content = await fs.readFile(candidatePath, 'utf8');
36
- packageJson = JSON.parse(content);
37
- found = true;
38
- break;
39
- } catch (err: any) {
40
- // only continue to parent if file not found
41
- if (err.code !== 'ENOENT') {
42
- console.error(pc.bold(pc.red(`failed to read package.json for "${packageName}":`)));
43
- console.error(err);
44
- process.exit(1);
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
- // not found, try parent directory
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 (!found) {
53
- console.error(pc.bold(pc.red(`failed to resolve package "${packageName}"`)));
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 = config.imports ? await resolveImportsToMappings(config.imports, config.root) : [];
145
- const allMappings = [...importMappings, ...(config.mappings ?? [])];
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(config.files, config.root);
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, config.outdir);
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: config.modules?.importSuffix ?? '.js',
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
- export const lexiconConfigSchema = v.object({
131
- outdir: v.string().assert((value) => value.length > 0, `must not be empty`),
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: v
138
- .object({
139
- importSuffix: v
140
- .string()
141
- .assert((value) => value.length > 0, `must not be empty`)
142
- .optional(),
143
- })
144
- .partial()
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 interface NormalizedConfig extends LexiconConfig {
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
- return { ...configResult.value, root: configDirname };
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
  };