@elaraai/east-node-cli 1.0.69 → 1.0.71

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.
@@ -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":"AAAA;;;GAGG;AACH,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,kBAAkB,EAAiB,MAAM,eAAe,CAAC;AAE5F;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,+EAA+E;AAC/E,+EAA+E;AAC/E,gFAAgF;AAChF,gFAAgF;AAChF,mFAAmF;AACnF,iFAAiF;AACjF,gFAAgF;AAChF,oEAAoE;AACpE,MAAM,UAAU,GAAsB,CAAC,GAAG,EAAE;IACxC,MAAM,MAAM,GAAG,kBAAkB,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAChF,OAAO,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC3D,CAAC,CAAC,EAAE,CAAC;AAEL,yEAAyE;AACzE,4EAA4E;AAC5E,4EAA4E;AAC5E,2EAA2E;AAC3E,yDAAyD;AACzD,IAAI,YAAY,GAAG,CAAC,CAAC;AAErB,mEAAmE;AACnE,SAAS,eAAe,CAAC,KAAyB;IAC9C,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC7F,CAAC;AAQD,+EAA+E;AAC/E,yEAAyE;AACzE,4EAA4E;AAC5E,uBAAuB;AACvB,MAAM,QAAQ,GAAG,IAAI,OAAO,EAAyG,CAAC;AACtI,4DAA4D;AAC5D,IAAI,QAAQ,GAAG,KAAK,CAAC;AAErB;;;;GAIG;AACH,KAAK,UAAU,OAAO,CAAC,UAAkB;IACrC,IAAI,CAAC;QACD,MAAM,QAAQ,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QACpE,MAAM,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAA6B,CAAC;QACxF,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC,IAAI,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACL,+BAA+B;IACnC,CAAC;IACD,OAAO,IAAgC,CAAC;AAC5C,CAAC;AAED,+EAA+E;AAC/E,MAAM,CAAC,MAAM,KAAK,GAAG,YAAY,CAAC;AAyBlC,qFAAqF;AACrF,SAAS,WAAW,CAAC,IAAY,EAAE,OAAe;IAC9C,MAAM,IAAI,GAAG,GAAU,EAAE;QACrB,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,qBAAqB,OAAO,EAAE,CAAC,CAAC;IAC3D,CAAC,CAAC;IACF,OAAO,IAAI,KAAK,CAAC,IAAI,EAAE;QACnB,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAC3E,CAAC,CAAC;AACP,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,UAAkB;IAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACrC,MAAM,SAAS,GAAgB,EAAE,CAAC;IAClC,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,IAAI,QAAQ,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACX,8EAA8E;YAC9E,iFAAiF;YACjF,gFAAgF;YAChF,iFAAiF,CACpF,CAAC;IACN,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;IACrC,IAAI,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QACzB,QAAQ,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC;QAC1E,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACjC,CAAC;IACD,QAAQ,GAAG,IAAI,CAAC;IAChB,MAAM,IAAI,GAAG,CAAC,KAA8B,EAAE,KAAa,EAAE,EAAE,CAAC,CAAC,GAAG,IAAW,EAAO,EAAE;QACpF,MAAM,GAAG,GAAG,KAAK,EAAE,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC;YACD,OAAO,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,oEAAoE;YACpE,oEAAoE;YACpE,qBAAqB;YACrB,IAAI,CAAC,GAAG;gBAAE,MAAM,KAAK,CAAC;YACtB,MAAM,CAAC,GAAG,KAA8E,CAAC;YACzF,MAAM,IAAI,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;YACtE,SAAS,CAAC,IAAI,CAAC;gBACX,IAAI;gBACJ,IAAI,EAAE,CAAC,EAAE,WAAW,EAAE,IAAI,IAAI,OAAO;gBACrC,OAAO,EAAE,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC;gBACpC,SAAS,EAAE,eAAe,CAAC,CAAC,EAAE,KAAK,CAAC;aACvC,CAAC,CAAC;YACH,OAAO,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1D,CAAC;gBAAS,CAAC;YACP,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QACnC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;IACzB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IACzD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,oBAAoB,CAAC,CAAC;IAExE,MAAM,QAAQ,GAAmB,EAAE,CAAC;IACpC,IAAI,CAAC;QACD,sEAAsE;QACtE,oEAAoE;QACpE,gEAAgE;QAChE,MAAM,MAAM,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC,IAAI,eAAe,IAAI,CAAC,GAAG,EAAE,IAAI,YAAY,EAAE,EAAE,CAAC,CAAC;IAC/F,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;IAClD,CAAC;YAAS,CAAC;QACP,wEAAwE;QACxE,kEAAkE;QAClE,8DAA8D;QAC9D,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;QAClC,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC;QAC5C,QAAQ,GAAG,KAAK,CAAC;QACjB,IAAI,aAAa,KAAK,SAAS;YAAE,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;;YACtD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC;IAC5C,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;QAC5B,MAAM,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC9B,QAAQ,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ;YACzC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9B,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/C,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;YACzD,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE;SAC7C,CAAC,CAAC;IACP,CAAC;IACD,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;IAChG,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED,SAAS,aAAa,CAAC,KAAc,EAAE,QAAgB;IACnD,MAAM,CAAC,GAAG,KAA8E,CAAC;IACzF,MAAM,EAAE,GAAG,eAAe,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,OAAO;QACH,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ;QACzC,IAAI;QACJ,MAAM;QACN,QAAQ,EAAE,IAAI;QACd,UAAU,EAAE,MAAM,GAAG,CAAC;QACtB,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,OAAO;QACjB,OAAO,EAAE,GAAG,CAAC,EAAE,WAAW,EAAE,IAAI,IAAI,OAAO,KAAK,CAAC,EAAE,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,qBAAqB;YAC5F,wDAAwD,KAAK,4BAA4B;KAChG,CAAC;AACN,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,aAAa,CAAC,OAAqB;IAC/C,OAAO,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC;AACzH,CAAC"}
@@ -0,0 +1,6 @@
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
+ export {};
6
+ //# sourceMappingURL=check.spec.d.ts.map
@@ -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;AA2PH,wBAAgB,IAAI,IAAI,IAAI,CAwD3B"}
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/loader.d.ts CHANGED
@@ -79,6 +79,15 @@ export declare function loadEastIR(filePath: string): EastIR<any, any> | AsyncEa
79
79
  * @returns Decoded value
80
80
  */
81
81
  export declare function loadInput(filePath: string, type: EastTypeValue): unknown;
82
+ /**
83
+ * Bytes a value from {@link loadInputLazy} has read from its file so far:
84
+ * the geometry (tail and head), every fence probe, and each segment frame
85
+ * decoded. `undefined` for any other value.
86
+ *
87
+ * @param value - a task input value
88
+ * @returns the byte count, or `undefined` when the value was not opened lazily
89
+ */
90
+ export declare function lazyInputBytesRead(value: unknown): number | undefined;
82
91
  /**
83
92
  * Opens an input file as a lazy pager-backed collection value, when it can
84
93
  * be: a beast2 v5 collection blob carrying a segment index. Size, iteration
@@ -86,10 +95,17 @@ export declare function loadInput(filePath: string, type: EastTypeValue): unknow
86
95
  * memory; any other operation hydrates transparently to the eager value's
87
96
  * exact semantics.
88
97
  *
98
+ * The file is never buffered whole: the value pages segment frames from an
99
+ * open descriptor through positioned reads (a Set or Dict input's first
100
+ * keyed read probes every segment's fence once), so its residency is the
101
+ * page cache and the process heap holds one decoded segment at a time — the
102
+ * difference between an out-of-memory kill and graceful eviction for an
103
+ * input near the runner's memory limit.
104
+ *
89
105
  * Returns `undefined` when the file cannot be served lazily (a non-beast2
90
- * format, a v4 or index-less blob, a non-collection root, or an element
91
- * shape carrying a `Ref` or function values) — the caller falls back to
92
- * {@link loadInput}.
106
+ * format, a v4 or index-less blob, a non-collection root, cross-segment
107
+ * aliasing, or an element shape carrying a `Ref` or function values) — the
108
+ * caller falls back to {@link loadInput}.
93
109
  *
94
110
  * The value opens **frozen**, like every task input, which is what makes
95
111
  * lazy service safe for any nested element shape: frozen values cannot be