@elaraai/east-node-cli 1.0.70 → 1.0.72
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/check.d.ts +29 -0
- package/dist/check.d.ts.map +1 -0
- package/dist/check.js +204 -0
- package/dist/check.js.map +1 -0
- package/dist/check.spec.d.ts +6 -0
- package/dist/check.spec.d.ts.map +1 -0
- package/dist/check.spec.js +229 -0
- package/dist/check.spec.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +35 -0
- package/dist/cli.js.map +1 -1
- package/dist/lsp.d.ts +7 -0
- package/dist/lsp.d.ts.map +1 -0
- package/dist/lsp.js +37 -0
- package/dist/lsp.js.map +1 -0
- package/package.json +8 -2
package/dist/check.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/** The environment variable a module can read to skip its import-time work. */
|
|
2
|
+
export declare const GUARD = "EAST_CHECK";
|
|
3
|
+
/**
|
|
4
|
+
* One build failure — the record `east-py check --format json` emits, key for
|
|
5
|
+
* key (hence the snake_case), so a consumer merges the two without a mapping.
|
|
6
|
+
*/
|
|
7
|
+
export interface BuildFinding {
|
|
8
|
+
path: string;
|
|
9
|
+
line: number;
|
|
10
|
+
column: number;
|
|
11
|
+
end_line: number;
|
|
12
|
+
end_column: number;
|
|
13
|
+
rule: string;
|
|
14
|
+
code: string;
|
|
15
|
+
category: 'error' | 'warning' | 'suggestion';
|
|
16
|
+
message: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Import `modulePath` with the builders collecting, and report what failed.
|
|
20
|
+
*
|
|
21
|
+
* @param modulePath - The module to check (a path; built JavaScript, as the
|
|
22
|
+
* other CLI commands take)
|
|
23
|
+
* @returns The findings, in source order. A module that will not import at all
|
|
24
|
+
* yields one finding saying so — it cannot be checked until it does.
|
|
25
|
+
*/
|
|
26
|
+
export declare function checkModule(modulePath: string): Promise<BuildFinding[]>;
|
|
27
|
+
/** `file:line:col: category [rule] message` — the east-py check spelling. */
|
|
28
|
+
export declare function formatFinding(finding: BuildFinding): string;
|
|
29
|
+
//# sourceMappingURL=check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../src/check.ts"],"names":[],"mappings":"AAwFA,+EAA+E;AAC/E,eAAO,MAAM,KAAK,eAAe,CAAC;AAElC;;;GAGG;AACH,MAAM,WAAW,YAAY;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,YAAY,CAAC;IAC7C,OAAO,EAAE,MAAM,CAAC;CACnB;AAmBD;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAmF7E;AAqBD,6EAA6E;AAC7E,wBAAgB,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAE3D"}
|
package/dist/check.js
ADDED
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
|
+
* Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
|
|
4
|
+
*/
|
|
5
|
+
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
6
|
+
import { createRequire } from 'node:module';
|
|
7
|
+
import { resolve } from 'node:path';
|
|
8
|
+
import { East, locationsFromStack, normalizeFramePath } from '@elaraai/east';
|
|
9
|
+
/**
|
|
10
|
+
* `east-node check` (#686): the BUILD's own errors, at edit time — the
|
|
11
|
+
* TypeScript twin of `east-py check`.
|
|
12
|
+
*
|
|
13
|
+
* `tsc` type-checks the TypeScript around an East program; it does not build
|
|
14
|
+
* the program. East's own refusals — a body whose expression type differs from
|
|
15
|
+
* the declared output, a capture the builder rejects, an IR the analyzer
|
|
16
|
+
* rejects — happen when `East.function` runs at module load, and nothing
|
|
17
|
+
* surfaces them until something imports the module. This does.
|
|
18
|
+
*
|
|
19
|
+
* The builders are WRAPPED for the duration rather than changed: `East` is a
|
|
20
|
+
* plain object, so a checker can decorate `East.function` / `East.asyncFunction`
|
|
21
|
+
* around one import and put them back afterwards. That keeps a development
|
|
22
|
+
* tool out of the language runtime — no collect-mode in the core builder, and
|
|
23
|
+
* nothing for a normal build to pay or trip over.
|
|
24
|
+
*
|
|
25
|
+
* The `East` that gets wrapped is the one the CHECKED MODULE resolves, not this
|
|
26
|
+
* CLI's: a globally installed `east-node`, or any layout where the peer is not
|
|
27
|
+
* linked, gives the module its own copy of `@elaraai/east`, and decorating the
|
|
28
|
+
* checker's copy would leave every build in the module unwrapped — the first
|
|
29
|
+
* failure escaping as one `import` finding instead of every `build` finding.
|
|
30
|
+
*/
|
|
31
|
+
// This module's own normalized path. `locationsFromStack` drops East's frames,
|
|
32
|
+
// node internals and installed packages, but the CHECKER's own wrapper is none
|
|
33
|
+
// of those — without this the reported line is the wrapper's, not the author's.
|
|
34
|
+
// BOTH spellings are needed: under `--enable-source-maps` (which this package's
|
|
35
|
+
// own test script uses, and which anyone debugging will) `Error.stack` carries the
|
|
36
|
+
// TypeScript path a compiled frame maps back to, not the `dist` path this module
|
|
37
|
+
// was loaded from. Matching only the loaded path silently let the wrapper's own
|
|
38
|
+
// frame through, and every finding was reported against `check.ts`.
|
|
39
|
+
const SELF_PATHS = (() => {
|
|
40
|
+
const loaded = normalizeFramePath(fileURLToPath(import.meta.url));
|
|
41
|
+
const source = loaded.replace(/(^|\/)dist\//, '$1src/').replace(/\.js$/, '.ts');
|
|
42
|
+
return source === loaded ? [loaded] : [loaded, source];
|
|
43
|
+
})();
|
|
44
|
+
// A strictly increasing cache-buster. `Date.now()` alone has millisecond
|
|
45
|
+
// resolution, so two checks inside the same millisecond resolve to the SAME
|
|
46
|
+
// specifier and the second gets the module ESM already has — no rebuild, no
|
|
47
|
+
// findings, silently. That is wrong in a test and worse in a warm language
|
|
48
|
+
// server, where re-checks are exactly what happens fast.
|
|
49
|
+
let checkCounter = 0;
|
|
50
|
+
/** The author's frames, with the checker's own wrapper removed. */
|
|
51
|
+
function authorLocations(stack) {
|
|
52
|
+
return locationsFromStack(stack).filter((l) => !SELF_PATHS.includes(String(l.filename)));
|
|
53
|
+
}
|
|
54
|
+
// The builders as they were BEFORE anything decorated them, captured the first
|
|
55
|
+
// time each `East` instance is seen. Restoring to these — rather than to
|
|
56
|
+
// whatever was installed when a check started — is what makes an accidental
|
|
57
|
+
// overlap recoverable.
|
|
58
|
+
const PRISTINE = new WeakMap();
|
|
59
|
+
/** Whether a check currently has the builders decorated. */
|
|
60
|
+
let patching = false;
|
|
61
|
+
/**
|
|
62
|
+
* The `East` namespace `modulePath` builds with: its own resolution of
|
|
63
|
+
* `@elaraai/east`, or this CLI's when it has none (a module that does not
|
|
64
|
+
* import East has nothing to check, and the import will say so).
|
|
65
|
+
*/
|
|
66
|
+
async function eastFor(modulePath) {
|
|
67
|
+
try {
|
|
68
|
+
const resolved = createRequire(modulePath).resolve('@elaraai/east');
|
|
69
|
+
const loaded = (await import(pathToFileURL(resolved).href));
|
|
70
|
+
if (loaded.East !== undefined)
|
|
71
|
+
return loaded.East;
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
/* not resolvable from there */
|
|
75
|
+
}
|
|
76
|
+
return East;
|
|
77
|
+
}
|
|
78
|
+
/** The environment variable a module can read to skip its import-time work. */
|
|
79
|
+
export const GUARD = 'EAST_CHECK';
|
|
80
|
+
/** A stand-in for a function whose build failed, so the rest of the module loads. */
|
|
81
|
+
function placeholder(name, message) {
|
|
82
|
+
const fail = () => {
|
|
83
|
+
throw new Error(`${name} failed to build: ${message}`);
|
|
84
|
+
};
|
|
85
|
+
return new Proxy(fail, {
|
|
86
|
+
get: (target, key) => (key === 'name' ? name : Reflect.get(target, key)),
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Import `modulePath` with the builders collecting, and report what failed.
|
|
91
|
+
*
|
|
92
|
+
* @param modulePath - The module to check (a path; built JavaScript, as the
|
|
93
|
+
* other CLI commands take)
|
|
94
|
+
* @returns The findings, in source order. A module that will not import at all
|
|
95
|
+
* yields one finding saying so — it cannot be checked until it does.
|
|
96
|
+
*/
|
|
97
|
+
export async function checkModule(modulePath) {
|
|
98
|
+
const absolute = resolve(modulePath);
|
|
99
|
+
const collected = [];
|
|
100
|
+
let depth = 0;
|
|
101
|
+
if (patching) {
|
|
102
|
+
throw new Error('east-node check is already running in this process. It decorates the global ' +
|
|
103
|
+
'`East.function` builders around one import, so a second overlapping call would ' +
|
|
104
|
+
"restore the first call's wrappers permanently — after which every later build " +
|
|
105
|
+
'would push into a dead collector instead of throwing. Run checks one at a time.');
|
|
106
|
+
}
|
|
107
|
+
const east = await eastFor(absolute);
|
|
108
|
+
let original = PRISTINE.get(east);
|
|
109
|
+
if (original === undefined) {
|
|
110
|
+
original = { function: east.function, asyncFunction: east.asyncFunction };
|
|
111
|
+
PRISTINE.set(east, original);
|
|
112
|
+
}
|
|
113
|
+
patching = true;
|
|
114
|
+
const wrap = (build, entry) => (...args) => {
|
|
115
|
+
const top = depth++ === 0;
|
|
116
|
+
try {
|
|
117
|
+
return build(...args);
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
// A NESTED build's failure belongs to the enclosing build, which is
|
|
121
|
+
// the expression the author can act on; recording both would report
|
|
122
|
+
// one mistake twice.
|
|
123
|
+
if (!top)
|
|
124
|
+
throw error;
|
|
125
|
+
const e = error;
|
|
126
|
+
const name = (typeof args[2] === 'function' && args[2].name) || entry;
|
|
127
|
+
collected.push({
|
|
128
|
+
name,
|
|
129
|
+
kind: e?.constructor?.name ?? 'Error',
|
|
130
|
+
message: e?.message ?? String(error),
|
|
131
|
+
locations: authorLocations(e?.stack),
|
|
132
|
+
});
|
|
133
|
+
return placeholder(name, e?.message ?? String(error));
|
|
134
|
+
}
|
|
135
|
+
finally {
|
|
136
|
+
depth = Math.max(0, depth - 1);
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
const previousGuard = process.env[GUARD];
|
|
140
|
+
process.env[GUARD] = '1';
|
|
141
|
+
east.function = wrap(original.function, 'East.function');
|
|
142
|
+
east.asyncFunction = wrap(original.asyncFunction, 'East.asyncFunction');
|
|
143
|
+
const findings = [];
|
|
144
|
+
try {
|
|
145
|
+
// A cache-busting query keeps a re-check of the same module in a warm
|
|
146
|
+
// process from returning the already-loaded copy without rebuilding
|
|
147
|
+
// (see `checkCounter` — Date.now() alone is not unique enough).
|
|
148
|
+
await import(`${pathToFileURL(absolute).href}?east-check=${Date.now()}-${checkCounter++}`);
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
findings.push(importFailure(error, absolute));
|
|
152
|
+
}
|
|
153
|
+
finally {
|
|
154
|
+
// Restore the PRISTINE builders captured at module load, never whatever
|
|
155
|
+
// happened to be installed on entry: restoring a wrapper is how a
|
|
156
|
+
// second overlapping call would leave one installed for good.
|
|
157
|
+
east.function = original.function;
|
|
158
|
+
east.asyncFunction = original.asyncFunction;
|
|
159
|
+
patching = false;
|
|
160
|
+
if (previousGuard === undefined)
|
|
161
|
+
delete process.env[GUARD];
|
|
162
|
+
else
|
|
163
|
+
process.env[GUARD] = previousGuard;
|
|
164
|
+
}
|
|
165
|
+
for (const error of collected) {
|
|
166
|
+
const at = error.locations[0];
|
|
167
|
+
findings.push({
|
|
168
|
+
path: at ? String(at.filename) : absolute,
|
|
169
|
+
line: at ? Number(at.line) : 1,
|
|
170
|
+
column: at ? Math.max(Number(at.column), 1) : 1,
|
|
171
|
+
end_line: at ? Number(at.line) : 1,
|
|
172
|
+
end_column: (at ? Math.max(Number(at.column), 1) : 1) + 1,
|
|
173
|
+
rule: 'build',
|
|
174
|
+
code: 'EAS900',
|
|
175
|
+
category: 'error',
|
|
176
|
+
message: `${error.name}: ${error.message}`,
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
findings.sort((a, b) => a.path.localeCompare(b.path) || a.line - b.line || a.column - b.column);
|
|
180
|
+
return findings;
|
|
181
|
+
}
|
|
182
|
+
function importFailure(error, fallback) {
|
|
183
|
+
const e = error;
|
|
184
|
+
const at = authorLocations(e?.stack)[0];
|
|
185
|
+
const line = at ? Number(at.line) : 1;
|
|
186
|
+
const column = at ? Math.max(Number(at.column), 1) : 1;
|
|
187
|
+
return {
|
|
188
|
+
path: at ? String(at.filename) : fallback,
|
|
189
|
+
line,
|
|
190
|
+
column,
|
|
191
|
+
end_line: line,
|
|
192
|
+
end_column: column + 1,
|
|
193
|
+
rule: 'import',
|
|
194
|
+
code: 'EAS901',
|
|
195
|
+
category: 'error',
|
|
196
|
+
message: `${e?.constructor?.name ?? 'Error'}: ${e?.message ?? String(error)} — the module must ` +
|
|
197
|
+
`import before its East functions can be checked (set ${GUARD} to skip import-time work)`,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
/** `file:line:col: category [rule] message` — the east-py check spelling. */
|
|
201
|
+
export function formatFinding(finding) {
|
|
202
|
+
return `${finding.path}:${finding.line}:${finding.column}: ${finding.category} [${finding.rule}] ${finding.message}`;
|
|
203
|
+
}
|
|
204
|
+
//# sourceMappingURL=check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../src/check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.spec.d.ts","sourceRoot":"","sources":["../src/check.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
|
+
* Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Tests for `east-node check` (#686): the BUILD's own errors at their lines.
|
|
7
|
+
*
|
|
8
|
+
* `tsc` checks the TypeScript around an East program; it does not build it. A
|
|
9
|
+
* body whose expression type differs from the declared output type-checks
|
|
10
|
+
* clean and fails only when something imports the module — which is what this
|
|
11
|
+
* reports, and reports for EVERY broken function rather than the first.
|
|
12
|
+
*/
|
|
13
|
+
import { describe, it } from 'node:test';
|
|
14
|
+
import assert from 'node:assert/strict';
|
|
15
|
+
import { spawn, execFileSync } from 'node:child_process';
|
|
16
|
+
import { cpSync, mkdirSync, mkdtempSync, rmSync, symlinkSync, writeFileSync } from 'node:fs';
|
|
17
|
+
import { tmpdir } from 'node:os';
|
|
18
|
+
import { dirname, join } from 'node:path';
|
|
19
|
+
import { fileURLToPath } from 'node:url';
|
|
20
|
+
import { checkModule, formatFinding, GUARD } from './check.js';
|
|
21
|
+
const EAST = import.meta.resolve('@elaraai/east');
|
|
22
|
+
const THREE_BROKEN = `
|
|
23
|
+
import { East, IntegerType, StringType } from ${JSON.stringify(EAST)};
|
|
24
|
+
|
|
25
|
+
export const ok = East.function([IntegerType], IntegerType, ($, x) => x.add(1n));
|
|
26
|
+
export const wrongOut = East.function([IntegerType], StringType, ($, x) => x.add(1n));
|
|
27
|
+
export const alsoWrong = East.function([IntegerType], StringType, ($, x) => x.multiply(2n));
|
|
28
|
+
export const third = East.function([IntegerType], StringType, ($, x) => x.subtract(1n));
|
|
29
|
+
`;
|
|
30
|
+
const CLEAN = `
|
|
31
|
+
import { East, IntegerType } from ${JSON.stringify(EAST)};
|
|
32
|
+
export const double = East.function([IntegerType], IntegerType, ($, x) => x.multiply(2n));
|
|
33
|
+
`;
|
|
34
|
+
function moduleWith(source, name = 'mod.mjs') {
|
|
35
|
+
const dir = mkdtempSync(join(tmpdir(), 'east-node-check-'));
|
|
36
|
+
const path = join(dir, name);
|
|
37
|
+
writeFileSync(path, source);
|
|
38
|
+
return { path, dispose: () => rmSync(dir, { recursive: true, force: true }) };
|
|
39
|
+
}
|
|
40
|
+
describe('east-node check', () => {
|
|
41
|
+
it('reports every broken function, not just the first', async () => {
|
|
42
|
+
const mod = moduleWith(THREE_BROKEN);
|
|
43
|
+
try {
|
|
44
|
+
const findings = await checkModule(mod.path);
|
|
45
|
+
assert.equal(findings.length, 3, findings.map((f) => f.message).join('\n'));
|
|
46
|
+
assert.deepEqual([...new Set(findings.map((f) => f.rule))], ['build']);
|
|
47
|
+
}
|
|
48
|
+
finally {
|
|
49
|
+
mod.dispose();
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
it('reports a declared-output mismatch at the author line, which tsc cannot see', async () => {
|
|
53
|
+
const mod = moduleWith(THREE_BROKEN);
|
|
54
|
+
try {
|
|
55
|
+
const findings = await checkModule(mod.path);
|
|
56
|
+
// Lines 5, 6, 7 of the module (line 1 is the leading newline).
|
|
57
|
+
assert.deepEqual(findings.map((f) => f.line), [5, 6, 7]);
|
|
58
|
+
for (const finding of findings) {
|
|
59
|
+
assert.match(finding.message, /expected .String, found .Integer/);
|
|
60
|
+
assert.ok(finding.path.endsWith('mod.mjs'), `author file, got ${finding.path}`);
|
|
61
|
+
assert.ok(finding.column >= 1);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
finally {
|
|
65
|
+
mod.dispose();
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
it('reports nothing for a module that builds', async () => {
|
|
69
|
+
const mod = moduleWith(CLEAN);
|
|
70
|
+
try {
|
|
71
|
+
assert.deepEqual(await checkModule(mod.path), []);
|
|
72
|
+
}
|
|
73
|
+
finally {
|
|
74
|
+
mod.dispose();
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
it('says so when the module will not import at all', async () => {
|
|
78
|
+
const mod = moduleWith(`throw new Error('boom');\n`);
|
|
79
|
+
try {
|
|
80
|
+
const findings = await checkModule(mod.path);
|
|
81
|
+
assert.equal(findings.length, 1);
|
|
82
|
+
assert.equal(findings[0].rule, 'import');
|
|
83
|
+
assert.match(findings[0].message, /boom/);
|
|
84
|
+
assert.match(findings[0].message, new RegExp(GUARD));
|
|
85
|
+
}
|
|
86
|
+
finally {
|
|
87
|
+
mod.dispose();
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
it('sets the guard while checking and restores it afterwards', async () => {
|
|
91
|
+
const before = process.env[GUARD];
|
|
92
|
+
const mod = moduleWith(`
|
|
93
|
+
import { writeFileSync } from 'node:fs';
|
|
94
|
+
writeFileSync(process.env.EAST_CHECK_PROBE, process.env.${GUARD} ?? 'unset');
|
|
95
|
+
`);
|
|
96
|
+
const probe = join(tmpdir(), `east-check-probe-${Date.now()}`);
|
|
97
|
+
process.env['EAST_CHECK_PROBE'] = probe;
|
|
98
|
+
try {
|
|
99
|
+
await checkModule(mod.path);
|
|
100
|
+
const { readFileSync } = await import('node:fs');
|
|
101
|
+
assert.equal(readFileSync(probe, 'utf-8'), '1', 'a module must be able to see the guard');
|
|
102
|
+
}
|
|
103
|
+
finally {
|
|
104
|
+
delete process.env['EAST_CHECK_PROBE'];
|
|
105
|
+
rmSync(probe, { force: true });
|
|
106
|
+
mod.dispose();
|
|
107
|
+
}
|
|
108
|
+
assert.equal(process.env[GUARD], before, 'the guard must not leak out of the check');
|
|
109
|
+
});
|
|
110
|
+
it('re-checks a module rather than returning the cached import', async () => {
|
|
111
|
+
const mod = moduleWith(CLEAN);
|
|
112
|
+
try {
|
|
113
|
+
assert.deepEqual(await checkModule(mod.path), []);
|
|
114
|
+
writeFileSync(mod.path, THREE_BROKEN);
|
|
115
|
+
const findings = await checkModule(mod.path);
|
|
116
|
+
assert.equal(findings.length, 3, 'a warm process must not serve the stale module');
|
|
117
|
+
}
|
|
118
|
+
finally {
|
|
119
|
+
mod.dispose();
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
it('emits the east-py check record shape, key for key', async () => {
|
|
123
|
+
const mod = moduleWith(THREE_BROKEN);
|
|
124
|
+
try {
|
|
125
|
+
const [finding] = await checkModule(mod.path);
|
|
126
|
+
assert.deepEqual(Object.keys(finding).sort(), ['category', 'code', 'column', 'end_column', 'end_line', 'line', 'message', 'path', 'rule']);
|
|
127
|
+
}
|
|
128
|
+
finally {
|
|
129
|
+
mod.dispose();
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
it('wraps the East the MODULE resolves, not the checker\'s own copy', async () => {
|
|
133
|
+
// A second, distinct copy of @elaraai/east on disk: the module resolves
|
|
134
|
+
// it through its own node_modules, so it is a different module instance
|
|
135
|
+
// from the one this checker imported. Decorating the checker's copy
|
|
136
|
+
// would leave every build here unwrapped.
|
|
137
|
+
// the package root: `exports` maps only the entry, so walk up from it (dist/src/index.js)
|
|
138
|
+
const eastPackage = join(dirname(fileURLToPath(import.meta.resolve('@elaraai/east'))), '..', '..');
|
|
139
|
+
const dir = mkdtempSync(join(tmpdir(), 'east-node-check-other-'));
|
|
140
|
+
const copy = join(dir, 'node_modules', '@elaraai', 'east');
|
|
141
|
+
mkdirSync(copy, { recursive: true });
|
|
142
|
+
cpSync(join(eastPackage, 'package.json'), join(copy, 'package.json'));
|
|
143
|
+
cpSync(join(eastPackage, 'dist'), join(copy, 'dist'), { recursive: true });
|
|
144
|
+
symlinkSync(join(eastPackage, 'node_modules'), join(copy, 'node_modules'), 'junction');
|
|
145
|
+
const path = join(dir, 'mod.mjs');
|
|
146
|
+
writeFileSync(path, THREE_BROKEN.replace(JSON.stringify(EAST), JSON.stringify('@elaraai/east')));
|
|
147
|
+
try {
|
|
148
|
+
const findings = await checkModule(path);
|
|
149
|
+
assert.equal(findings.length, 3, findings.map((f) => `${f.rule}: ${f.message}`).join('\n'));
|
|
150
|
+
assert.deepEqual([...new Set(findings.map((f) => f.rule))], ['build']);
|
|
151
|
+
}
|
|
152
|
+
finally {
|
|
153
|
+
rmSync(dir, { recursive: true, force: true });
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
it('the CLI prints the same records as JSON and exits 1', () => {
|
|
157
|
+
const mod = moduleWith(THREE_BROKEN);
|
|
158
|
+
try {
|
|
159
|
+
let stdout = '';
|
|
160
|
+
try {
|
|
161
|
+
execFileSync(process.execPath, [join(process.cwd(), 'bin', 'east-node.mjs'), 'check', mod.path, '--format', 'json'], { encoding: 'utf-8' });
|
|
162
|
+
assert.fail('expected exit 1');
|
|
163
|
+
}
|
|
164
|
+
catch (error) {
|
|
165
|
+
const e = error;
|
|
166
|
+
assert.equal(e.status, 1);
|
|
167
|
+
stdout = e.stdout ?? '';
|
|
168
|
+
}
|
|
169
|
+
const records = JSON.parse(stdout);
|
|
170
|
+
assert.equal(records.length, 3);
|
|
171
|
+
assert.deepEqual(Object.keys(records[0]).sort(), ['category', 'code', 'column', 'end_column', 'end_line', 'line', 'message', 'path', 'rule']);
|
|
172
|
+
}
|
|
173
|
+
finally {
|
|
174
|
+
mod.dispose();
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
it('formats a finding the way east-py check does', async () => {
|
|
178
|
+
const mod = moduleWith(THREE_BROKEN);
|
|
179
|
+
try {
|
|
180
|
+
const [finding] = await checkModule(mod.path);
|
|
181
|
+
assert.match(formatFinding(finding), /^.+mod\.mjs:5:\d+: error \[build\] /);
|
|
182
|
+
}
|
|
183
|
+
finally {
|
|
184
|
+
mod.dispose();
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
});
|
|
188
|
+
describe('east-node lsp', () => {
|
|
189
|
+
it('serves the East language server over stdio, or says what to install when the optional peer is absent', async () => {
|
|
190
|
+
// The language service is an OPTIONAL peer: built here in a full
|
|
191
|
+
// workspace checkout, absent in a runner that built east-node alone.
|
|
192
|
+
// Both are legitimate environments, and the command has one right
|
|
193
|
+
// answer in each.
|
|
194
|
+
const specifier = '@elaraai/east-diagnostics';
|
|
195
|
+
let available = true;
|
|
196
|
+
try {
|
|
197
|
+
await import(specifier);
|
|
198
|
+
}
|
|
199
|
+
catch {
|
|
200
|
+
available = false;
|
|
201
|
+
}
|
|
202
|
+
const child = spawn(process.execPath, [join(process.cwd(), 'bin', 'east-node.mjs'), 'lsp'], { stdio: 'pipe' });
|
|
203
|
+
let out = '';
|
|
204
|
+
let err = '';
|
|
205
|
+
let exited;
|
|
206
|
+
child.stdout.on('data', (chunk) => { out += chunk.toString('utf8'); });
|
|
207
|
+
child.stderr.on('data', (chunk) => { err += chunk.toString('utf8'); });
|
|
208
|
+
child.on('exit', (code) => { exited = code; });
|
|
209
|
+
const body = JSON.stringify({ jsonrpc: '2.0', id: 1, method: 'initialize', params: { capabilities: {} } });
|
|
210
|
+
child.stdin.write(`Content-Length: ${Buffer.byteLength(body)}\r\n\r\n${body}`);
|
|
211
|
+
const deadline = Date.now() + 30_000;
|
|
212
|
+
while (!out.includes('"id":1') && exited === undefined && Date.now() < deadline)
|
|
213
|
+
await new Promise((r) => setTimeout(r, 50));
|
|
214
|
+
try {
|
|
215
|
+
if (available) {
|
|
216
|
+
assert.match(out, /textDocumentSync/, `the initialize reply: ${out.slice(0, 200)} / stderr: ${err}`);
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
assert.equal(exited, 1, `without the peer the command exits 1: stdout ${out.slice(0, 200)} / stderr ${err}`);
|
|
220
|
+
assert.match(err, /east-node lsp needs @elaraai\/east-diagnostics/);
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
finally {
|
|
224
|
+
child.stdin.end();
|
|
225
|
+
child.kill();
|
|
226
|
+
}
|
|
227
|
+
});
|
|
228
|
+
});
|
|
229
|
+
//# sourceMappingURL=check.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.spec.js","sourceRoot":"","sources":["../src/check.spec.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA6PH,wBAAgB,IAAI,IAAI,IAAI,CAsF3B"}
|
package/dist/cli.js
CHANGED
|
@@ -11,6 +11,8 @@ import { runProgram } from './runner.js';
|
|
|
11
11
|
import { writeSnapshot, readSnapshot } from './snapshot.js';
|
|
12
12
|
import { encodeRebuilt, isDirectory, transpile, transpileDir } from './transpile.js';
|
|
13
13
|
import { exportFunctionsFromModule } from './export-functions.js';
|
|
14
|
+
import { serve as serveLsp } from './lsp.js';
|
|
15
|
+
import { checkModule, formatFinding } from './check.js';
|
|
14
16
|
import { East } from '@elaraai/east';
|
|
15
17
|
const require = createRequire(import.meta.url);
|
|
16
18
|
const pkg = require('../package.json');
|
|
@@ -238,6 +240,39 @@ export function main() {
|
|
|
238
240
|
.option('--package-version <version>', 'The version recorded in the manifest (default: 0.0.0)')
|
|
239
241
|
.option('--only <name...>', 'Export only these functions of `eastFunctions` (default: all)')
|
|
240
242
|
.action(cmdExportFunctions);
|
|
243
|
+
program
|
|
244
|
+
.command('check')
|
|
245
|
+
.description("Build a module's East functions and report the build's own errors at their lines — the errors tsc cannot see")
|
|
246
|
+
.argument('<module...>', 'Path(s) to the built module(s) to check')
|
|
247
|
+
.option('--format <kind>', 'text (default) or json — the record shape `east-py check --format json` emits', 'text')
|
|
248
|
+
.action(async (modulePaths, options) => {
|
|
249
|
+
if (options.format !== 'text' && options.format !== 'json') {
|
|
250
|
+
return fail(`Error: --format must be text or json, got '${options.format}'`);
|
|
251
|
+
}
|
|
252
|
+
const findings = [];
|
|
253
|
+
for (const modulePath of modulePaths)
|
|
254
|
+
findings.push(...await checkModule(modulePath));
|
|
255
|
+
if (options.format === 'json') {
|
|
256
|
+
console.log(JSON.stringify(findings, null, 2));
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
for (const finding of findings)
|
|
260
|
+
console.log(formatFinding(finding));
|
|
261
|
+
console.log(findings.length === 0
|
|
262
|
+
? 'All clear.'
|
|
263
|
+
: `Found ${findings.length} build error${findings.length === 1 ? '' : 's'}.`);
|
|
264
|
+
}
|
|
265
|
+
if (findings.length > 0)
|
|
266
|
+
process.exit(1);
|
|
267
|
+
});
|
|
268
|
+
program
|
|
269
|
+
.command('lsp')
|
|
270
|
+
.description('Serve the East diagnostics as a Language Server over stdio (needs @elaraai/east-diagnostics)')
|
|
271
|
+
.action(async () => {
|
|
272
|
+
const code = await serveLsp();
|
|
273
|
+
if (code !== 0)
|
|
274
|
+
process.exit(code);
|
|
275
|
+
});
|
|
241
276
|
program
|
|
242
277
|
.command('version')
|
|
243
278
|
.description('Show version information')
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/lsp.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
|
+
* Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
|
|
4
|
+
*/
|
|
5
|
+
/** Serve the diagnostics over stdio until the client disconnects. */
|
|
6
|
+
export declare function serve(): Promise<number>;
|
|
7
|
+
//# sourceMappingURL=lsp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lsp.d.ts","sourceRoot":"","sources":["../src/lsp.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAoBH,qEAAqE;AACrE,wBAAsB,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,CAc7C"}
|
package/dist/lsp.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
|
+
* Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* `east-node lsp` (#686): the East diagnostics as a Language Server.
|
|
7
|
+
*
|
|
8
|
+
* The TypeScript rules and native type errors already reach editors two ways —
|
|
9
|
+
* `@elaraai/tsserver-plugin-east` rides the editor's own TypeScript service,
|
|
10
|
+
* and the Claude Code plugin runs the same server. Neither helps an editor that
|
|
11
|
+
* is not running tsserver with the plugin configured (nvim, helix, emacs), and
|
|
12
|
+
* python has had `east-py lsp` for exactly that since #638. This is its twin.
|
|
13
|
+
*
|
|
14
|
+
* `@elaraai/east-diagnostics` is imported lazily and is not a dependency of
|
|
15
|
+
* this CLI: a runner should not carry a language service. When it is absent the
|
|
16
|
+
* command says what to install and exits, the way `east-py lsp` does for pygls.
|
|
17
|
+
*/
|
|
18
|
+
const NEEDS_DIAGNOSTICS = 'east-node lsp needs @elaraai/east-diagnostics (and typescript) — install them with\n' +
|
|
19
|
+
' npm install --save-dev @elaraai/east-diagnostics typescript';
|
|
20
|
+
/** Serve the diagnostics over stdio until the client disconnects. */
|
|
21
|
+
export async function serve() {
|
|
22
|
+
// Indirect specifier: the dependency is OPTIONAL, so it must not be part of
|
|
23
|
+
// this CLI's build graph. A runner should not have to resolve a language
|
|
24
|
+
// service to compile.
|
|
25
|
+
const specifier = '@elaraai/east-diagnostics';
|
|
26
|
+
let runEastLsp;
|
|
27
|
+
try {
|
|
28
|
+
({ runEastLsp } = (await import(specifier)));
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
process.stderr.write(`${NEEDS_DIAGNOSTICS}\n`);
|
|
32
|
+
return 1;
|
|
33
|
+
}
|
|
34
|
+
runEastLsp();
|
|
35
|
+
return 0;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=lsp.js.map
|
package/dist/lsp.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lsp.js","sourceRoot":"","sources":["../src/lsp.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;;GAYG;AAEH,MAAM,iBAAiB,GACnB,sFAAsF;IACtF,+DAA+D,CAAC;AAEpE,qEAAqE;AACrE,MAAM,CAAC,KAAK,UAAU,KAAK;IACvB,4EAA4E;IAC5E,yEAAyE;IACzE,sBAAsB;IACtB,MAAM,SAAS,GAAG,2BAA2B,CAAC;IAC9C,IAAI,UAAoC,CAAC;IACzC,IAAI,CAAC;QACD,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,CAA+B,CAAC,CAAC;IAC/E,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,iBAAiB,IAAI,CAAC,CAAC;QAC/C,OAAO,CAAC,CAAC;IACb,CAAC;IACD,UAAU,EAAE,CAAC;IACb,OAAO,CAAC,CAAC;AACb,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elaraai/east-node-cli",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.72",
|
|
4
4
|
"description": "Command-line interface for running East IR programs with Node.js",
|
|
5
5
|
"bin": {
|
|
6
6
|
"east-node": "./bin/east-node.mjs"
|
|
@@ -44,7 +44,8 @@
|
|
|
44
44
|
"tar-stream": "^3.1.7"
|
|
45
45
|
},
|
|
46
46
|
"peerDependencies": {
|
|
47
|
-
"@elaraai/east": "1.0.
|
|
47
|
+
"@elaraai/east": "1.0.72",
|
|
48
|
+
"@elaraai/east-diagnostics": "1.0.72"
|
|
48
49
|
},
|
|
49
50
|
"devDependencies": {
|
|
50
51
|
"@types/node": "^22.18.1",
|
|
@@ -55,6 +56,11 @@
|
|
|
55
56
|
"eslint-plugin-headers": "^1.3.3",
|
|
56
57
|
"typescript": "~5.9.2"
|
|
57
58
|
},
|
|
59
|
+
"peerDependenciesMeta": {
|
|
60
|
+
"@elaraai/east-diagnostics": {
|
|
61
|
+
"optional": true
|
|
62
|
+
}
|
|
63
|
+
},
|
|
58
64
|
"scripts": {
|
|
59
65
|
"build": "tsc",
|
|
60
66
|
"lint": "eslint .",
|