@elaraai/e3 1.0.29 → 1.0.31
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/src/environment-capture.d.ts +18 -0
- package/dist/src/environment-capture.d.ts.map +1 -1
- package/dist/src/environment-capture.js +479 -27
- package/dist/src/environment-capture.js.map +1 -1
- package/dist/src/environment-capture.spec.d.ts +6 -0
- package/dist/src/environment-capture.spec.d.ts.map +1 -0
- package/dist/src/environment-capture.spec.js +239 -0
- package/dist/src/environment-capture.spec.js.map +1 -0
- package/dist/src/environment.d.ts +14 -3
- package/dist/src/environment.d.ts.map +1 -1
- package/dist/src/environment.js +21 -1
- package/dist/src/environment.js.map +1 -1
- package/dist/src/export.d.ts.map +1 -1
- package/dist/src/export.js +34 -12
- package/dist/src/export.js.map +1 -1
- package/package.json +4 -3
|
@@ -3,6 +3,24 @@
|
|
|
3
3
|
* Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
|
|
4
4
|
*/
|
|
5
5
|
import { type EnvironmentDecl } from './environment.js';
|
|
6
|
+
/**
|
|
7
|
+
* Derive an EnvironmentSpec from a task/function's RUNNER platform references,
|
|
8
|
+
* for tasks that declare no explicit `environment`. Resolves each `{ custom }`
|
|
9
|
+
* platform name to its local workspace member and captures the union of their
|
|
10
|
+
* closures — so a project split into packages gets per-package change-detection
|
|
11
|
+
* granularity with zero `environment` boilerplate. The `environment` field
|
|
12
|
+
* remains the explicit override (and the only way to reach `tools` / `image`,
|
|
13
|
+
* which are never auto-derived).
|
|
14
|
+
*
|
|
15
|
+
* @param runtime - The runner runtime tag (e.g. `east-py`, `east-node`)
|
|
16
|
+
* @param customNames - The `{ custom: X }` platform names declared on the runner
|
|
17
|
+
* @param anchorDir - Directory the workspace is resolved from (the export cwd)
|
|
18
|
+
* @param owner - The declaring task/function name, for error messages
|
|
19
|
+
* @param addBlob - Stores a blob in the bundle's object store, returning its hash
|
|
20
|
+
* @returns The beast2-encoded EnvironmentSpec, or null when nothing local is
|
|
21
|
+
* referenced (no workspace, or every platform is a registry/first-party package)
|
|
22
|
+
*/
|
|
23
|
+
export declare function captureAutoEnvironment(runtime: string, customNames: string[], anchorDir: string, owner: string, addBlob: (data: Buffer) => string): Uint8Array | null;
|
|
6
24
|
/**
|
|
7
25
|
* Resolves an environment declaration to an encoded {@link EnvironmentSpec}
|
|
8
26
|
* at package export time.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment-capture.d.ts","sourceRoot":"","sources":["../../src/environment-capture.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"environment-capture.d.ts","sourceRoot":"","sources":["../../src/environment-capture.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA0BH,OAAO,EAA2B,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAwSjF;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EAAE,EACrB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAChC,UAAU,GAAG,IAAI,CAQnB;AAmMD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,eAAe,EACrB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAChC,UAAU,CA4EZ"}
|
|
@@ -21,10 +21,126 @@ import * as fs from 'node:fs';
|
|
|
21
21
|
import * as os from 'node:os';
|
|
22
22
|
import * as path from 'node:path';
|
|
23
23
|
import { execFileSync } from 'node:child_process';
|
|
24
|
-
import {
|
|
24
|
+
import { parse as parseToml } from 'smol-toml';
|
|
25
|
+
import { variant, none, encodeBeast2For } from '@elaraai/east';
|
|
25
26
|
import { EnvironmentSpecType } from '@elaraai/e3-types';
|
|
26
27
|
import { validateEnvironmentDecl } from './environment.js';
|
|
27
28
|
const encodeEnvironmentSpec = encodeBeast2For(EnvironmentSpecType);
|
|
29
|
+
/** Canonicalize a path for identity comparison — realpath when it exists,
|
|
30
|
+
* case-folded on win32 (uv.lock stores portable forward-slash relatives). */
|
|
31
|
+
function canonicalPath(p) {
|
|
32
|
+
let r = p;
|
|
33
|
+
try {
|
|
34
|
+
r = fs.realpathSync(p);
|
|
35
|
+
}
|
|
36
|
+
catch { /* may not exist yet */ }
|
|
37
|
+
return process.platform === 'win32' ? r.toLowerCase() : r;
|
|
38
|
+
}
|
|
39
|
+
/** The on-disk directory a lock `source` points at, with its kind — or null
|
|
40
|
+
* for registry/git/url sources (installed by uv sync, not captured). */
|
|
41
|
+
function localSource(root, source) {
|
|
42
|
+
if (!source)
|
|
43
|
+
return null;
|
|
44
|
+
for (const kind of ['editable', 'directory', 'virtual']) {
|
|
45
|
+
if (typeof source[kind] === 'string')
|
|
46
|
+
return { dir: path.resolve(root, source[kind]), kind };
|
|
47
|
+
}
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Find the workspace/standalone root governing `project` and the lock
|
|
52
|
+
* package (`subject`) whose local source resolves to it.
|
|
53
|
+
*
|
|
54
|
+
* @throws {Error} P3 (no lock in project or any ancestor), P5 (unsupported
|
|
55
|
+
* lock version), P4 (lock does not list a package at `project`)
|
|
56
|
+
*/
|
|
57
|
+
function discoverPythonRoot(project, owner) {
|
|
58
|
+
let dir = project;
|
|
59
|
+
let lockPath = null;
|
|
60
|
+
for (;;) {
|
|
61
|
+
const candidate = path.join(dir, 'uv.lock');
|
|
62
|
+
if (fs.existsSync(candidate)) {
|
|
63
|
+
lockPath = candidate;
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
const parent = path.dirname(dir);
|
|
67
|
+
if (parent === dir)
|
|
68
|
+
break;
|
|
69
|
+
dir = parent;
|
|
70
|
+
}
|
|
71
|
+
if (!lockPath) {
|
|
72
|
+
throw new Error(`Environment for '${owner}': no uv.lock in '${project}' or any parent — run 'uv lock' in ` +
|
|
73
|
+
`'${project}' (standalone), or add it to [tool.uv.workspace].members of the workspace root and 'uv lock' there`);
|
|
74
|
+
}
|
|
75
|
+
const root = path.dirname(lockPath);
|
|
76
|
+
const lock = parseToml(fs.readFileSync(lockPath, 'utf-8'));
|
|
77
|
+
if (lock.version !== 1) {
|
|
78
|
+
throw new Error(`Environment for '${owner}': unsupported uv.lock version ${lock.version} at '${root}' — update @elaraai/e3 or re-lock with a compatible uv`);
|
|
79
|
+
}
|
|
80
|
+
const projectCanon = canonicalPath(project);
|
|
81
|
+
const subject = (lock.package ?? []).find((p) => {
|
|
82
|
+
const local = localSource(root, p.source);
|
|
83
|
+
return local !== null && canonicalPath(local.dir) === projectCanon;
|
|
84
|
+
});
|
|
85
|
+
if (!subject) {
|
|
86
|
+
throw new Error(`Environment for '${owner}': uv.lock at '${root}' does not list a package at '${project}' — ` +
|
|
87
|
+
`the lockfile is out of date or the project is not a workspace member; run 'uv lock' at '${root}'`);
|
|
88
|
+
}
|
|
89
|
+
return { root, lock, subject: subject.name };
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* The transitive closure of LOCAL packages reachable from `subject` — the
|
|
93
|
+
* set whose sdists must ride the environment.
|
|
94
|
+
*
|
|
95
|
+
* Walks `dependencies` plus every optional-dependency and dev-dependency
|
|
96
|
+
* group (over-capture is sound: it only over-invalidates). Registry/git/url
|
|
97
|
+
* targets are skipped (uv sync installs them); a `path=<archive>` source is
|
|
98
|
+
* refused, and a virtual package contributes its deps but no sdist.
|
|
99
|
+
*
|
|
100
|
+
* @returns The buildable closure members, sorted by name
|
|
101
|
+
* @throws {Error} P6 (dangling edge), P7 (subject not packaged), P8 (source
|
|
102
|
+
* dir missing), P9 (local archive dependency)
|
|
103
|
+
*/
|
|
104
|
+
function pythonClosure(lock, root, subject, owner) {
|
|
105
|
+
const byName = new Map((lock.package ?? []).map((p) => [p.name, p]));
|
|
106
|
+
const build = new Map();
|
|
107
|
+
const seen = new Set();
|
|
108
|
+
const queue = [subject];
|
|
109
|
+
while (queue.length > 0) {
|
|
110
|
+
const name = queue.shift();
|
|
111
|
+
if (seen.has(name))
|
|
112
|
+
continue;
|
|
113
|
+
seen.add(name);
|
|
114
|
+
const pkg = byName.get(name);
|
|
115
|
+
if (!pkg) {
|
|
116
|
+
if (name === subject)
|
|
117
|
+
throw new Error(`Environment for '${owner}': subject '${name}' not in uv.lock`);
|
|
118
|
+
throw new Error(`Environment for '${owner}': uv.lock is inconsistent — depends on unknown '${name}'; run 'uv lock'`);
|
|
119
|
+
}
|
|
120
|
+
if (typeof pkg.source?.path === 'string') {
|
|
121
|
+
throw new Error(`Environment for '${owner}': local archive dependency '${name}' is not supported — use a directory/workspace source or a registry`);
|
|
122
|
+
}
|
|
123
|
+
const local = localSource(root, pkg.source);
|
|
124
|
+
if (!local)
|
|
125
|
+
continue; // registry/git/url — sync installs it; don't recurse
|
|
126
|
+
if (local.kind !== 'virtual') {
|
|
127
|
+
if (!fs.existsSync(local.dir)) {
|
|
128
|
+
throw new Error(`Environment for '${owner}': package '${name}' resolves to '${local.dir}' which does not exist — run 'uv lock' or fix its path`);
|
|
129
|
+
}
|
|
130
|
+
build.set(name, local.dir);
|
|
131
|
+
}
|
|
132
|
+
else if (name === subject) {
|
|
133
|
+
throw new Error(`Environment for '${owner}': '${name}' is a virtual package (no build-system) and cannot be an environment subject`);
|
|
134
|
+
}
|
|
135
|
+
for (const edge of [
|
|
136
|
+
...(pkg.dependencies ?? []),
|
|
137
|
+
...Object.values(pkg['optional-dependencies'] ?? {}).flat(),
|
|
138
|
+
...Object.values(pkg['dev-dependencies'] ?? {}).flat(),
|
|
139
|
+
])
|
|
140
|
+
queue.push(edge.name);
|
|
141
|
+
}
|
|
142
|
+
return [...build.entries()].map(([name, dir]) => ({ name, dir })).sort((a, b) => (a.name < b.name ? -1 : 1));
|
|
143
|
+
}
|
|
28
144
|
function readProjectFile(project, name, owner) {
|
|
29
145
|
const p = path.join(project, name);
|
|
30
146
|
if (!fs.existsSync(p)) {
|
|
@@ -33,6 +149,162 @@ function readProjectFile(project, name, owner) {
|
|
|
33
149
|
}
|
|
34
150
|
return fs.readFileSync(p);
|
|
35
151
|
}
|
|
152
|
+
/**
|
|
153
|
+
* Walk up from `start` to the nearest `uv.lock`, parse and version-check it.
|
|
154
|
+
* Returns the governing workspace/standalone root + parsed lock, or null when
|
|
155
|
+
* no lock exists in `start` or any ancestor (no uv workspace to derive from).
|
|
156
|
+
*
|
|
157
|
+
* @throws {Error} if a lock is found but its version is unsupported
|
|
158
|
+
*/
|
|
159
|
+
function findUvLock(start, owner) {
|
|
160
|
+
let dir = start;
|
|
161
|
+
for (;;) {
|
|
162
|
+
const candidate = path.join(dir, 'uv.lock');
|
|
163
|
+
if (fs.existsSync(candidate)) {
|
|
164
|
+
const lock = parseToml(fs.readFileSync(candidate, 'utf-8'));
|
|
165
|
+
if (lock.version !== 1) {
|
|
166
|
+
throw new Error(`Environment for '${owner}': unsupported uv.lock version ${lock.version} at '${dir}' — update @elaraai/e3 or re-lock with a compatible uv`);
|
|
167
|
+
}
|
|
168
|
+
return { root: dir, lock };
|
|
169
|
+
}
|
|
170
|
+
const parent = path.dirname(dir);
|
|
171
|
+
if (parent === dir)
|
|
172
|
+
return null;
|
|
173
|
+
dir = parent;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Build one sdist per closure member and store it, returning the sorted
|
|
178
|
+
* artifact set. Shared by the explicit `{ python }` capture and the derived
|
|
179
|
+
* platform capture so both produce byte-identical specs for the same closure.
|
|
180
|
+
*/
|
|
181
|
+
function buildMemberSdists(closure, owner, addBlob) {
|
|
182
|
+
const sdists = [];
|
|
183
|
+
for (const member of closure) {
|
|
184
|
+
// Build each closure member's sdist in its own out-dir so the artifact set
|
|
185
|
+
// is unambiguous. Installers derive the package name from the filename.
|
|
186
|
+
const outDir = fs.mkdtempSync(path.join(os.tmpdir(), 'e3-env-sdist-'));
|
|
187
|
+
try {
|
|
188
|
+
for (const a of buildArtifacts('uv', ['build', '--sdist', '--out-dir', outDir], member.dir, outDir, '.tar.gz', owner)) {
|
|
189
|
+
sdists.push({ filename: a.filename, hash: addBlob(a.data) });
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
finally {
|
|
193
|
+
fs.rmSync(outDir, { recursive: true, force: true });
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
sdists.sort((a, b) => (a.filename < b.filename ? -1 : 1));
|
|
197
|
+
return sdists;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Derive a python environment from the platform packages a task's runner
|
|
201
|
+
* references. Each `custom` name that resolves to a LOCAL workspace member
|
|
202
|
+
* (a directory/workspace/editable source in the governing `uv.lock`)
|
|
203
|
+
* contributes its transitive closure; the union rides ONE `python` spec —
|
|
204
|
+
* shared root manifest + lock, union of member sdists (byte-identical to the
|
|
205
|
+
* explicit capture of a project depending on all of them). Registry /
|
|
206
|
+
* first-party names (e.g. `east-py-std`) are skipped — `uv sync` installs
|
|
207
|
+
* them. Returns null when `anchorDir` has no uv workspace or no referenced
|
|
208
|
+
* name is a local member (nothing to capture beyond the ambient runtime).
|
|
209
|
+
*/
|
|
210
|
+
function capturePythonPlatforms(customNames, anchorDir, owner, addBlob) {
|
|
211
|
+
const found = findUvLock(anchorDir, owner);
|
|
212
|
+
if (!found)
|
|
213
|
+
return null;
|
|
214
|
+
const { root, lock } = found;
|
|
215
|
+
const subjects = customNames.filter((name) => {
|
|
216
|
+
const pkg = (lock.package ?? []).find((p) => p.name === name);
|
|
217
|
+
return pkg !== undefined && localSource(root, pkg.source) !== null;
|
|
218
|
+
});
|
|
219
|
+
if (subjects.length === 0)
|
|
220
|
+
return null;
|
|
221
|
+
// Union the referenced members' closures, deduped by package name.
|
|
222
|
+
const union = new Map();
|
|
223
|
+
for (const subject of subjects) {
|
|
224
|
+
for (const member of pythonClosure(lock, root, subject, owner))
|
|
225
|
+
union.set(member.name, member.dir);
|
|
226
|
+
}
|
|
227
|
+
const pyproject = addBlob(readProjectFile(root, 'pyproject.toml', owner));
|
|
228
|
+
const lockBlob = addBlob(readProjectFile(root, 'uv.lock', owner));
|
|
229
|
+
const members = [...union.entries()].map(([name, dir]) => ({ name, dir })).sort((a, b) => (a.name < b.name ? -1 : 1));
|
|
230
|
+
const sdists = buildMemberSdists(members, owner, addBlob);
|
|
231
|
+
return encodeEnvironmentSpec(variant('python', { pyproject, lock: lockBlob, sdists }));
|
|
232
|
+
}
|
|
233
|
+
/** Walk up from `start` to the nearest npm lockfile (not pnpm/yarn); null if none. */
|
|
234
|
+
function findNpmRoot(start) {
|
|
235
|
+
const names = ['package-lock.json', 'npm-shrinkwrap.json'];
|
|
236
|
+
let dir = start;
|
|
237
|
+
for (;;) {
|
|
238
|
+
const found = names.find((f) => fs.existsSync(path.join(dir, f)));
|
|
239
|
+
if (found)
|
|
240
|
+
return { root: dir, lock: JSON.parse(fs.readFileSync(path.join(dir, found), 'utf-8')) };
|
|
241
|
+
const parent = path.dirname(dir);
|
|
242
|
+
if (parent === dir)
|
|
243
|
+
return null;
|
|
244
|
+
dir = parent;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Derive a node environment from the platform packages a task's runner
|
|
249
|
+
* references. Each `custom` name that resolves to a LOCAL npm workspace member
|
|
250
|
+
* (matched by package.json name in the governing lockfile) is captured through
|
|
251
|
+
* the same `workspace_node` path as an explicit `{ node }`. Registry /
|
|
252
|
+
* first-party names are skipped. Returns null when `anchorDir` has no npm
|
|
253
|
+
* workspace or no referenced name is a local member.
|
|
254
|
+
*
|
|
255
|
+
* Multiple local node members in ONE task are not unioned yet (that needs a
|
|
256
|
+
* multi-subject `workspace_node` spec) — declare an explicit `environment`.
|
|
257
|
+
*/
|
|
258
|
+
function captureNodePlatforms(customNames, anchorDir, owner, addBlob) {
|
|
259
|
+
const found = findNpmRoot(anchorDir);
|
|
260
|
+
if (!found)
|
|
261
|
+
return null;
|
|
262
|
+
const { root, lock } = found;
|
|
263
|
+
const memberDirs = customNames
|
|
264
|
+
.map((name) => {
|
|
265
|
+
const entry = Object.entries(lock.packages ?? {}).find(([p, v]) => p !== '' && !p.startsWith('node_modules/') && v.name === name && v.link !== true);
|
|
266
|
+
return entry ? path.join(root, entry[0]) : null;
|
|
267
|
+
})
|
|
268
|
+
.filter((d) => d !== null);
|
|
269
|
+
if (memberDirs.length === 0)
|
|
270
|
+
return null;
|
|
271
|
+
if (memberDirs.length > 1) {
|
|
272
|
+
throw new Error(`Environment for '${owner}': a task referencing multiple local node packages ` +
|
|
273
|
+
`(${customNames.join(', ')}) needs an explicit \`environment\` — auto-union of npm ` +
|
|
274
|
+
`workspace members is not supported yet`);
|
|
275
|
+
}
|
|
276
|
+
// A single member reuses the explicit workspace_node capture verbatim.
|
|
277
|
+
return captureEnvironment({ node: { project: memberDirs[0] } }, owner, addBlob);
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Derive an EnvironmentSpec from a task/function's RUNNER platform references,
|
|
281
|
+
* for tasks that declare no explicit `environment`. Resolves each `{ custom }`
|
|
282
|
+
* platform name to its local workspace member and captures the union of their
|
|
283
|
+
* closures — so a project split into packages gets per-package change-detection
|
|
284
|
+
* granularity with zero `environment` boilerplate. The `environment` field
|
|
285
|
+
* remains the explicit override (and the only way to reach `tools` / `image`,
|
|
286
|
+
* which are never auto-derived).
|
|
287
|
+
*
|
|
288
|
+
* @param runtime - The runner runtime tag (e.g. `east-py`, `east-node`)
|
|
289
|
+
* @param customNames - The `{ custom: X }` platform names declared on the runner
|
|
290
|
+
* @param anchorDir - Directory the workspace is resolved from (the export cwd)
|
|
291
|
+
* @param owner - The declaring task/function name, for error messages
|
|
292
|
+
* @param addBlob - Stores a blob in the bundle's object store, returning its hash
|
|
293
|
+
* @returns The beast2-encoded EnvironmentSpec, or null when nothing local is
|
|
294
|
+
* referenced (no workspace, or every platform is a registry/first-party package)
|
|
295
|
+
*/
|
|
296
|
+
export function captureAutoEnvironment(runtime, customNames, anchorDir, owner, addBlob) {
|
|
297
|
+
if (customNames.length === 0)
|
|
298
|
+
return null;
|
|
299
|
+
// east-py resolves against a uv workspace, east-node against an npm
|
|
300
|
+
// workspace. east-c (tools) is never derived — it uses explicit
|
|
301
|
+
// `environment: { tools }`. Unknown runtimes never auto-derive.
|
|
302
|
+
if (runtime === 'east-py')
|
|
303
|
+
return capturePythonPlatforms(customNames, anchorDir, owner, addBlob);
|
|
304
|
+
if (runtime === 'east-node')
|
|
305
|
+
return captureNodePlatforms(customNames, anchorDir, owner, addBlob);
|
|
306
|
+
return null;
|
|
307
|
+
}
|
|
36
308
|
function buildArtifacts(command, args, project, outDir, extension, owner) {
|
|
37
309
|
try {
|
|
38
310
|
execFileSync(command, args, {
|
|
@@ -52,6 +324,148 @@ function buildArtifacts(command, args, project, outDir, extension, owner) {
|
|
|
52
324
|
}
|
|
53
325
|
return files.map((f) => ({ filename: f, data: fs.readFileSync(path.join(outDir, f)) }));
|
|
54
326
|
}
|
|
327
|
+
// ---------------------------------------------------------------------------
|
|
328
|
+
// Node (npm workspace) dependency-closure capture (#280)
|
|
329
|
+
//
|
|
330
|
+
// A `{ node: { project } }` declaration is either a self-contained project
|
|
331
|
+
// (its own lockfile — captured byte-identically to before) or an npm
|
|
332
|
+
// workspace member. For a member we capture the ROOT package.json + lockfile
|
|
333
|
+
// plus an `npm pack` tarball per LOCAL closure member; the materializer
|
|
334
|
+
// (#276) reconstructs a closure-only workspace and `npm ci`s it.
|
|
335
|
+
//
|
|
336
|
+
// Unlike python's `uv pip check`, `npm ci` is NOT a loud oracle — it will
|
|
337
|
+
// silently install a member's unlocked deps from the registry — so the
|
|
338
|
+
// closure walk validates the lock at export (N4/N5) rather than relying on
|
|
339
|
+
// a run-time gate. pnpm workspaces are refused here (N8) until #284.
|
|
340
|
+
// ---------------------------------------------------------------------------
|
|
341
|
+
const NODE_LOCKFILES = ['package-lock.json', 'npm-shrinkwrap.json', 'pnpm-lock.yaml'];
|
|
342
|
+
/** Workspace-relative POSIX path from the root to a dir. */
|
|
343
|
+
function posixRel(root, dir) {
|
|
344
|
+
return path.relative(root, dir).split(path.sep).join('/');
|
|
345
|
+
}
|
|
346
|
+
/** The union of every dependency section's package names. */
|
|
347
|
+
function allDepNames(e) {
|
|
348
|
+
if (!e)
|
|
349
|
+
return [];
|
|
350
|
+
return [
|
|
351
|
+
...Object.keys(e.dependencies ?? {}),
|
|
352
|
+
...Object.keys(e.devDependencies ?? {}),
|
|
353
|
+
...Object.keys(e.optionalDependencies ?? {}),
|
|
354
|
+
...Object.keys(e.peerDependencies ?? {}),
|
|
355
|
+
];
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* Detect whether `project` is a self-contained node project or an npm
|
|
359
|
+
* workspace member, and locate the governing root.
|
|
360
|
+
*
|
|
361
|
+
* @throws {Error} N1 (no lockfile anywhere), N8 (pnpm workspace — unsupported
|
|
362
|
+
* yet), N3 (project is the workspace root), N2 (not a member of the workspace)
|
|
363
|
+
*/
|
|
364
|
+
function discoverNodeRoot(project, owner) {
|
|
365
|
+
const ownLock = NODE_LOCKFILES.find((f) => fs.existsSync(path.join(project, f)));
|
|
366
|
+
if (ownLock) {
|
|
367
|
+
// A workspace ROOT also has its own lockfile — but capturing it packs the
|
|
368
|
+
// (usually code-less) root, not a member. Reject: the environment belongs
|
|
369
|
+
// on a member.
|
|
370
|
+
const pkg = JSON.parse(fs.readFileSync(path.join(project, 'package.json'), 'utf-8'));
|
|
371
|
+
if (Array.isArray(pkg.workspaces) && pkg.workspaces.length > 0) {
|
|
372
|
+
throw new Error(`Environment for '${owner}': declare the environment on a workspace member, not the workspace root '${project}'`);
|
|
373
|
+
}
|
|
374
|
+
return { mode: 'single', lockName: ownLock };
|
|
375
|
+
}
|
|
376
|
+
let dir = path.dirname(project);
|
|
377
|
+
for (;;) {
|
|
378
|
+
const found = NODE_LOCKFILES.find((f) => fs.existsSync(path.join(dir, f)));
|
|
379
|
+
if (found) {
|
|
380
|
+
if (found === 'pnpm-lock.yaml') {
|
|
381
|
+
throw new Error(`Environment for '${owner}': pnpm workspaces are not yet supported as environments — use npm workspaces or a single-project env`);
|
|
382
|
+
}
|
|
383
|
+
const root = dir;
|
|
384
|
+
if (path.resolve(root) === path.resolve(project)) {
|
|
385
|
+
throw new Error(`Environment for '${owner}': declare the environment on a workspace member, not the workspace root '${root}'`);
|
|
386
|
+
}
|
|
387
|
+
const lock = JSON.parse(fs.readFileSync(path.join(root, found), 'utf-8'));
|
|
388
|
+
const subject = posixRel(root, project);
|
|
389
|
+
if (!lock.packages || !(subject in lock.packages)) {
|
|
390
|
+
throw new Error(`Environment for '${owner}': '${project}' is not a member of the workspace at '${root}' — add it to "workspaces" and refresh the lockfile, or run 'npm install' in '${project}' for a standalone env`);
|
|
391
|
+
}
|
|
392
|
+
return { mode: 'workspace', root, lock, subject };
|
|
393
|
+
}
|
|
394
|
+
const parent = path.dirname(dir);
|
|
395
|
+
if (parent === dir)
|
|
396
|
+
break;
|
|
397
|
+
dir = parent;
|
|
398
|
+
}
|
|
399
|
+
throw new Error(`Environment for '${owner}': no lockfile in '${project}' or any parent — run 'npm install' there, or add it to a workspace and lock at the root`);
|
|
400
|
+
}
|
|
401
|
+
/**
|
|
402
|
+
* The transitive closure of LOCAL workspace members reachable from `subject`,
|
|
403
|
+
* with export-time lock validation.
|
|
404
|
+
*
|
|
405
|
+
* @returns Closure members (workspace-relative path + package name), sorted by path
|
|
406
|
+
* @throws {Error} N4 (a member's on-disk manifest drifted from the lock — npm
|
|
407
|
+
* ci would silently install unlocked deps), N5 (a dep shadows a workspace
|
|
408
|
+
* member name from the registry), N6 (root depends on a member), N7 (a local
|
|
409
|
+
* dep resolves outside the workspace)
|
|
410
|
+
*/
|
|
411
|
+
function npmClosure(lock, root, subject, owner) {
|
|
412
|
+
const pkgs = lock.packages ?? {};
|
|
413
|
+
const memberNames = new Set(Object.entries(pkgs)
|
|
414
|
+
.filter(([p, e]) => p !== '' && !p.includes('node_modules/') && typeof e.name === 'string')
|
|
415
|
+
.map(([, e]) => e.name));
|
|
416
|
+
// N6: the root manifest must not depend on a workspace member.
|
|
417
|
+
for (const dep of allDepNames(pkgs[''])) {
|
|
418
|
+
if (memberNames.has(dep)) {
|
|
419
|
+
throw new Error(`Environment for '${owner}': the workspace root depends on member '${dep}' — move member deps into the members that need them`);
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
const resolveDep = (fromPath, dep) => {
|
|
423
|
+
let dir = fromPath;
|
|
424
|
+
for (;;) {
|
|
425
|
+
const key = `${dir ? dir + '/' : ''}node_modules/${dep}`;
|
|
426
|
+
if (pkgs[key])
|
|
427
|
+
return pkgs[key];
|
|
428
|
+
if (!dir)
|
|
429
|
+
return null;
|
|
430
|
+
dir = dir.split('/').slice(0, -1).join('/');
|
|
431
|
+
}
|
|
432
|
+
};
|
|
433
|
+
const included = new Map(); // memberPath -> name
|
|
434
|
+
const seen = new Set();
|
|
435
|
+
const queue = [subject];
|
|
436
|
+
while (queue.length > 0) {
|
|
437
|
+
const memberPath = queue.shift();
|
|
438
|
+
if (seen.has(memberPath))
|
|
439
|
+
continue;
|
|
440
|
+
seen.add(memberPath);
|
|
441
|
+
const entry = pkgs[memberPath];
|
|
442
|
+
if (!entry)
|
|
443
|
+
continue;
|
|
444
|
+
included.set(memberPath, entry.name ?? path.basename(memberPath));
|
|
445
|
+
// N4: the locked dep sections must match the on-disk manifest.
|
|
446
|
+
const onDisk = JSON.parse(fs.readFileSync(path.join(root, ...memberPath.split('/'), 'package.json'), 'utf-8'));
|
|
447
|
+
for (const section of ['dependencies', 'devDependencies', 'optionalDependencies', 'peerDependencies']) {
|
|
448
|
+
if (JSON.stringify(onDisk[section] ?? {}) !== JSON.stringify(entry[section] ?? {})) {
|
|
449
|
+
throw new Error(`Environment for '${owner}': '${memberPath}/package.json' ${section} differ from the lockfile — run 'npm install' to refresh the lock before exporting`);
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
for (const dep of allDepNames(entry)) {
|
|
453
|
+
const resolved = resolveDep(memberPath, dep);
|
|
454
|
+
if (resolved?.link) {
|
|
455
|
+
const target = resolved.resolved ?? '';
|
|
456
|
+
if (target === '' || target.startsWith('..') || path.isAbsolute(target)) {
|
|
457
|
+
throw new Error(`Environment for '${owner}': local dependency '${dep}' of '${memberPath}' resolves outside the workspace ('${target}')`);
|
|
458
|
+
}
|
|
459
|
+
queue.push(target);
|
|
460
|
+
}
|
|
461
|
+
else if (memberNames.has(dep)) {
|
|
462
|
+
// N5: name collides with a workspace member but came from the registry.
|
|
463
|
+
throw new Error(`Environment for '${owner}': '${dep}' in '${memberPath}' is satisfied from the registry, not the workspace — align its version to the workspace member (or rename)`);
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
return [...included.entries()].map(([p, name]) => ({ path: p, name })).sort((a, b) => (a.path < b.path ? -1 : 1));
|
|
468
|
+
}
|
|
55
469
|
/**
|
|
56
470
|
* Resolves an environment declaration to an encoded {@link EnvironmentSpec}
|
|
57
471
|
* at package export time.
|
|
@@ -73,38 +487,76 @@ export function captureEnvironment(decl, owner, addBlob) {
|
|
|
73
487
|
validateEnvironmentDecl(decl, owner);
|
|
74
488
|
spec = variant('image', { digest: decl.image.digest });
|
|
75
489
|
}
|
|
490
|
+
else if ('tools' in decl) {
|
|
491
|
+
validateEnvironmentDecl(decl, owner);
|
|
492
|
+
// Capture each named prebuilt file as a blob under bin/<basename>,
|
|
493
|
+
// sorted by path so declaration order never affects the env hash. e3
|
|
494
|
+
// builds nothing here — the developer built these.
|
|
495
|
+
const files = decl.tools.files.map((f) => {
|
|
496
|
+
const p = path.resolve(f);
|
|
497
|
+
let stat;
|
|
498
|
+
try {
|
|
499
|
+
stat = fs.statSync(p); // follows symlinks — captures the target's bytes
|
|
500
|
+
}
|
|
501
|
+
catch {
|
|
502
|
+
throw new Error(`Environment for '${owner}': tools file '${f}' not found at '${p}' — build it before export (e3 does not build your binaries)`);
|
|
503
|
+
}
|
|
504
|
+
if (!stat.isFile()) {
|
|
505
|
+
throw new Error(`Environment for '${owner}': tools file '${f}' at '${p}' is not a regular file`);
|
|
506
|
+
}
|
|
507
|
+
return { path: `bin/${path.basename(p)}`, hash: addBlob(fs.readFileSync(p)) };
|
|
508
|
+
});
|
|
509
|
+
files.sort((a, b) => (a.path < b.path ? -1 : 1));
|
|
510
|
+
spec = variant('tools', { files });
|
|
511
|
+
}
|
|
76
512
|
else if ('python' in decl) {
|
|
77
513
|
const project = path.resolve(decl.python.project);
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
}
|
|
514
|
+
// Identity + closure come from the governing (root) lock; the ROOT
|
|
515
|
+
// manifest/lockfile are captured so materialization can `uv sync
|
|
516
|
+
// --all-packages` the whole third-party set. A member's own pyproject
|
|
517
|
+
// rides inside its sdist. For a standalone project root === project, so
|
|
518
|
+
// the captured spec is byte-identical to the pre-#278 single-project one.
|
|
519
|
+
const { root, lock, subject } = discoverPythonRoot(project, owner);
|
|
520
|
+
const pyproject = addBlob(readProjectFile(root, 'pyproject.toml', owner));
|
|
521
|
+
const lockBlob = addBlob(readProjectFile(root, 'uv.lock', owner));
|
|
522
|
+
const sdists = buildMemberSdists(pythonClosure(lock, root, subject, owner), owner, addBlob);
|
|
523
|
+
spec = variant('python', { pyproject, lock: lockBlob, sdists });
|
|
89
524
|
}
|
|
90
525
|
else {
|
|
91
526
|
const project = path.resolve(decl.node.project);
|
|
92
|
-
const
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
527
|
+
const disco = discoverNodeRoot(project, owner);
|
|
528
|
+
if (disco.mode === 'single') {
|
|
529
|
+
// Self-contained project — today's byte-identical capture.
|
|
530
|
+
const packageJson = addBlob(readProjectFile(project, 'package.json', owner));
|
|
531
|
+
const lock = addBlob(readProjectFile(project, disco.lockName, owner));
|
|
532
|
+
const outDir = fs.mkdtempSync(path.join(os.tmpdir(), 'e3-env-pack-'));
|
|
533
|
+
try {
|
|
534
|
+
const tarballs = buildArtifacts('npm', ['pack', '--pack-destination', outDir], project, outDir, '.tgz', owner).map((a) => addBlob(a.data));
|
|
535
|
+
spec = variant('node', { packageJson, lock, tarballs });
|
|
536
|
+
}
|
|
537
|
+
finally {
|
|
538
|
+
fs.rmSync(outDir, { recursive: true, force: true });
|
|
539
|
+
}
|
|
105
540
|
}
|
|
106
|
-
|
|
107
|
-
|
|
541
|
+
else {
|
|
542
|
+
// npm workspace member — capture the ROOT manifest/lock + a pack
|
|
543
|
+
// tarball per LOCAL closure member (validated against the lock).
|
|
544
|
+
const { root, lock, subject } = disco;
|
|
545
|
+
const packageJson = addBlob(readProjectFile(root, 'package.json', owner));
|
|
546
|
+
const lockBlob = addBlob(readProjectFile(root, 'package-lock.json', owner));
|
|
547
|
+
const closure = npmClosure(lock, root, subject, owner);
|
|
548
|
+
const members = closure.map((member) => {
|
|
549
|
+
const memberDir = path.join(root, ...member.path.split('/'));
|
|
550
|
+
const outDir = fs.mkdtempSync(path.join(os.tmpdir(), 'e3-env-pack-'));
|
|
551
|
+
try {
|
|
552
|
+
const built = buildArtifacts('npm', ['pack', '--pack-destination', outDir], memberDir, outDir, '.tgz', owner);
|
|
553
|
+
return { path: member.path, name: member.name, tarball: addBlob(built[0].data) };
|
|
554
|
+
}
|
|
555
|
+
finally {
|
|
556
|
+
fs.rmSync(outDir, { recursive: true, force: true });
|
|
557
|
+
}
|
|
558
|
+
});
|
|
559
|
+
spec = variant('workspace_node', { packageJson, lock: lockBlob, config: none, subject, members });
|
|
108
560
|
}
|
|
109
561
|
}
|
|
110
562
|
return encodeEnvironmentSpec(spec);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment-capture.js","sourceRoot":"","sources":["../../src/environment-capture.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"environment-capture.js","sourceRoot":"","sources":["../../src/environment-capture.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment-capture.spec.d.ts","sourceRoot":"","sources":["../../src/environment-capture.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,239 @@
|
|
|
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
|
+
* Python (uv) dependency-closure capture (#278) — the granularity contract.
|
|
7
|
+
*
|
|
8
|
+
* Builds a real uv workspace and asserts that capturing a member takes
|
|
9
|
+
* exactly its transitive LOCAL closure, and — the point of the whole epic —
|
|
10
|
+
* that editing a sibling *outside* that closure leaves the member's env
|
|
11
|
+
* spec byte-identical (no cross-invalidation), while editing a shared
|
|
12
|
+
* dependency changes it.
|
|
13
|
+
*
|
|
14
|
+
* uv-gated: self-skips where uv is unavailable, matching the integration
|
|
15
|
+
* e2e. (Sdist builds fetch the hatchling backend; CI has network.)
|
|
16
|
+
*/
|
|
17
|
+
import { describe, it, before } from 'node:test';
|
|
18
|
+
import * as assert from 'node:assert';
|
|
19
|
+
import * as fs from 'node:fs';
|
|
20
|
+
import * as os from 'node:os';
|
|
21
|
+
import * as path from 'node:path';
|
|
22
|
+
import { execFileSync } from 'node:child_process';
|
|
23
|
+
import { createHash } from 'node:crypto';
|
|
24
|
+
import { decodeBeast2For } from '@elaraai/east';
|
|
25
|
+
import { EnvironmentSpecType } from '@elaraai/e3-types';
|
|
26
|
+
import { captureEnvironment, captureAutoEnvironment } from './environment-capture.js';
|
|
27
|
+
function toolAvailable(cmd) {
|
|
28
|
+
try {
|
|
29
|
+
execFileSync(cmd, ['--version'], { stdio: 'ignore', shell: process.platform === 'win32' });
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/** Capture a member's env and return [sorted sdist filenames, spec-bytes sha]. */
|
|
37
|
+
function capture(project) {
|
|
38
|
+
const specBytes = captureEnvironment({ python: { project } }, 'test', (buf) => createHash('sha256').update(buf).digest('hex'));
|
|
39
|
+
const spec = decodeBeast2For(EnvironmentSpecType)(specBytes);
|
|
40
|
+
assert.ok(spec.type === 'python');
|
|
41
|
+
return {
|
|
42
|
+
sdists: spec.value.sdists.map((s) => s.filename.replace(/-0\.1\.0\.tar\.gz$/, '')).sort(),
|
|
43
|
+
specHash: createHash('sha256').update(specBytes).digest('hex'),
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
describe('python closure capture (#278)', () => {
|
|
47
|
+
const hasUv = toolAvailable('uv');
|
|
48
|
+
let ws;
|
|
49
|
+
before(() => {
|
|
50
|
+
if (!hasUv)
|
|
51
|
+
return;
|
|
52
|
+
ws = fs.mkdtempSync(path.join(os.tmpdir(), 'e3-cap-ws-'));
|
|
53
|
+
// A uv workspace: common (leaf) ← pricing; `other` is an unrelated
|
|
54
|
+
// sibling NOT in pricing's closure. All hatchling → deterministic sdists.
|
|
55
|
+
fs.writeFileSync(path.join(ws, 'pyproject.toml'), '[project]\nname = "root"\nversion = "0.1.0"\nrequires-python = ">=3.11"\n\n' +
|
|
56
|
+
'[tool.uv.workspace]\nmembers = ["packages/*"]\n\n' +
|
|
57
|
+
'[tool.uv.sources]\ncommon = { workspace = true }\n');
|
|
58
|
+
const mkMember = (name, deps, src = 'sources = {}') => {
|
|
59
|
+
const dir = path.join(ws, 'packages', name);
|
|
60
|
+
fs.mkdirSync(path.join(dir, 'src', name), { recursive: true });
|
|
61
|
+
fs.writeFileSync(path.join(dir, 'pyproject.toml'), `[project]\nname = "${name}"\nversion = "0.1.0"\nrequires-python = ">=3.11"\n` +
|
|
62
|
+
(deps.length ? `dependencies = [${deps.map((d) => `"${d}"`).join(', ')}]\n` : '') +
|
|
63
|
+
(deps.includes('common') ? '\n[tool.uv.sources]\ncommon = { workspace = true }\n' : '') +
|
|
64
|
+
'\n[build-system]\nrequires = ["hatchling"]\nbuild-backend = "hatchling.build"\n');
|
|
65
|
+
fs.writeFileSync(path.join(dir, 'src', name, '__init__.py'), `VALUE = "${name}-v1"\n`);
|
|
66
|
+
void src;
|
|
67
|
+
};
|
|
68
|
+
mkMember('common', []);
|
|
69
|
+
mkMember('pricing', ['common']);
|
|
70
|
+
mkMember('other', []);
|
|
71
|
+
execFileSync('uv', ['lock'], { cwd: ws, stdio: 'ignore', shell: process.platform === 'win32' });
|
|
72
|
+
});
|
|
73
|
+
it('captures exactly the transitive local closure of a member', { skip: hasUv ? false : 'uv not on PATH' }, () => {
|
|
74
|
+
assert.deepStrictEqual(capture(path.join(ws, 'packages', 'pricing')).sdists, ['common', 'pricing']);
|
|
75
|
+
assert.deepStrictEqual(capture(path.join(ws, 'packages', 'common')).sdists, ['common']);
|
|
76
|
+
assert.deepStrictEqual(capture(path.join(ws, 'packages', 'other')).sdists, ['other']);
|
|
77
|
+
});
|
|
78
|
+
it('does NOT cross-invalidate: editing an unrelated sibling leaves the spec byte-identical', { skip: hasUv ? false : 'uv not on PATH' }, () => {
|
|
79
|
+
const before = capture(path.join(ws, 'packages', 'pricing')).specHash;
|
|
80
|
+
const otherSrc = path.join(ws, 'packages', 'other', 'src', 'other', '__init__.py');
|
|
81
|
+
const orig = fs.readFileSync(otherSrc, 'utf-8');
|
|
82
|
+
try {
|
|
83
|
+
fs.writeFileSync(otherSrc, orig + '\nEDIT = 1\n');
|
|
84
|
+
assert.strictEqual(capture(path.join(ws, 'packages', 'pricing')).specHash, before, "editing 'other' must not change pricing's env spec");
|
|
85
|
+
}
|
|
86
|
+
finally {
|
|
87
|
+
fs.writeFileSync(otherSrc, orig);
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
it('DOES propagate a shared-dependency edit: editing common changes pricing', { skip: hasUv ? false : 'uv not on PATH' }, () => {
|
|
91
|
+
const before = capture(path.join(ws, 'packages', 'pricing')).specHash;
|
|
92
|
+
const commonSrc = path.join(ws, 'packages', 'common', 'src', 'common', '__init__.py');
|
|
93
|
+
const orig = fs.readFileSync(commonSrc, 'utf-8');
|
|
94
|
+
try {
|
|
95
|
+
fs.writeFileSync(commonSrc, orig + '\nEDIT = 1\n');
|
|
96
|
+
assert.notStrictEqual(capture(path.join(ws, 'packages', 'pricing')).specHash, before, "editing 'common' must change pricing's env spec");
|
|
97
|
+
}
|
|
98
|
+
finally {
|
|
99
|
+
fs.writeFileSync(commonSrc, orig);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
it('errors clearly when the project is not in any lockfile', { skip: hasUv ? false : 'uv not on PATH' }, () => {
|
|
103
|
+
const orphan = fs.mkdtempSync(path.join(os.tmpdir(), 'e3-orphan-'));
|
|
104
|
+
fs.writeFileSync(path.join(orphan, 'pyproject.toml'), '[project]\nname = "orphan"\nversion = "0.1.0"\n');
|
|
105
|
+
try {
|
|
106
|
+
assert.throws(() => capture(orphan), /no uv\.lock/);
|
|
107
|
+
}
|
|
108
|
+
finally {
|
|
109
|
+
fs.rmSync(orphan, { recursive: true, force: true });
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
it('auto-derives from platform refs: resolves { custom } → member, unions closures, skips registry names', { skip: hasUv ? false : 'uv not on PATH' }, () => {
|
|
113
|
+
const auto = (customs) => {
|
|
114
|
+
const bytes = captureAutoEnvironment('east-py', customs, ws, 'test', (b) => createHash('sha256').update(b).digest('hex'));
|
|
115
|
+
if (bytes === null)
|
|
116
|
+
return null;
|
|
117
|
+
const spec = decodeBeast2For(EnvironmentSpecType)(bytes);
|
|
118
|
+
assert.ok(spec.type === 'python');
|
|
119
|
+
return spec.value.sdists.map((s) => s.filename.replace(/-0\.1\.0\.tar\.gz$/, '')).sort();
|
|
120
|
+
};
|
|
121
|
+
assert.deepStrictEqual(auto(['pricing']), ['common', 'pricing'], 'a member ref pulls its transitive closure');
|
|
122
|
+
assert.deepStrictEqual(auto(['other']), ['other'], 'an independent member is captured alone');
|
|
123
|
+
assert.deepStrictEqual(auto(['pricing', 'other']), ['common', 'other', 'pricing'], 'multiple refs union their closures');
|
|
124
|
+
assert.strictEqual(auto(['east-py-std']), null, 'a non-member (registry/first-party) name derives nothing');
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
describe('node npm-workspace closure capture (#280)', () => {
|
|
128
|
+
let ws;
|
|
129
|
+
const npmShell = process.platform === 'win32';
|
|
130
|
+
const captureNode = (project) => {
|
|
131
|
+
const bytes = captureEnvironment({ node: { project } }, 'test', (b) => createHash('sha256').update(b).digest('hex'));
|
|
132
|
+
const spec = decodeBeast2For(EnvironmentSpecType)(bytes);
|
|
133
|
+
assert.ok(spec.type === 'workspace_node');
|
|
134
|
+
return { members: spec.value.members.map((m) => m.name).sort(), specHash: createHash('sha256').update(bytes).digest('hex') };
|
|
135
|
+
};
|
|
136
|
+
before(() => {
|
|
137
|
+
ws = fs.mkdtempSync(path.join(os.tmpdir(), 'e3-cap-nws-'));
|
|
138
|
+
fs.writeFileSync(path.join(ws, 'package.json'), JSON.stringify({ name: 'root', version: '1.0.0', private: true, workspaces: ['packages/*'] }));
|
|
139
|
+
const mk = (name, deps, code = 'module.exports.v=1;') => {
|
|
140
|
+
const dir = path.join(ws, 'packages', name);
|
|
141
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
142
|
+
fs.writeFileSync(path.join(dir, 'package.json'), JSON.stringify({ name: `@acme/${name}`, version: '1.0.0', main: 'index.js', ...(deps ? { dependencies: deps } : {}) }));
|
|
143
|
+
fs.writeFileSync(path.join(dir, 'index.js'), code);
|
|
144
|
+
};
|
|
145
|
+
mk('common');
|
|
146
|
+
mk('pricing', { '@acme/common': '1.0.0' });
|
|
147
|
+
mk('other');
|
|
148
|
+
execFileSync('npm', ['install', '--no-audit', '--no-fund'], { cwd: ws, stdio: 'ignore', shell: npmShell });
|
|
149
|
+
});
|
|
150
|
+
it('captures exactly the transitive local closure of a member', () => {
|
|
151
|
+
assert.deepStrictEqual(captureNode(path.join(ws, 'packages', 'pricing')).members, ['@acme/common', '@acme/pricing']);
|
|
152
|
+
assert.deepStrictEqual(captureNode(path.join(ws, 'packages', 'other')).members, ['@acme/other']);
|
|
153
|
+
});
|
|
154
|
+
it('does NOT cross-invalidate: editing an unrelated sibling leaves the spec byte-identical', () => {
|
|
155
|
+
const before = captureNode(path.join(ws, 'packages', 'pricing')).specHash;
|
|
156
|
+
const otherSrc = path.join(ws, 'packages', 'other', 'index.js');
|
|
157
|
+
const orig = fs.readFileSync(otherSrc, 'utf-8');
|
|
158
|
+
try {
|
|
159
|
+
fs.writeFileSync(otherSrc, orig + '\n// edit\n');
|
|
160
|
+
assert.strictEqual(captureNode(path.join(ws, 'packages', 'pricing')).specHash, before);
|
|
161
|
+
}
|
|
162
|
+
finally {
|
|
163
|
+
fs.writeFileSync(otherSrc, orig);
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
it('rejects a stale lock (N4): a member manifest dep not in the lock (npm ci would install it unpinned)', () => {
|
|
167
|
+
const pj = path.join(ws, 'packages', 'pricing', 'package.json');
|
|
168
|
+
const orig = fs.readFileSync(pj, 'utf-8');
|
|
169
|
+
try {
|
|
170
|
+
const obj = JSON.parse(orig);
|
|
171
|
+
obj.dependencies = { ...obj.dependencies, 'left-pad': '1.3.0' }; // added WITHOUT re-locking
|
|
172
|
+
fs.writeFileSync(pj, JSON.stringify(obj));
|
|
173
|
+
assert.throws(() => captureNode(path.join(ws, 'packages', 'pricing')), /differ from the lockfile/);
|
|
174
|
+
}
|
|
175
|
+
finally {
|
|
176
|
+
fs.writeFileSync(pj, orig);
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
it('errors when the environment is declared on the workspace root (N3)', () => {
|
|
180
|
+
assert.throws(() => captureEnvironment({ node: { project: ws } }, 'test', (b) => createHash('sha256').update(b).digest('hex')), /workspace member, not the workspace root/);
|
|
181
|
+
});
|
|
182
|
+
it('auto-derives from a { custom } member ref; multiple local members need an explicit env', () => {
|
|
183
|
+
const auto = (customs) => {
|
|
184
|
+
const bytes = captureAutoEnvironment('east-node', customs, ws, 'test', (b) => createHash('sha256').update(b).digest('hex'));
|
|
185
|
+
if (bytes === null)
|
|
186
|
+
return null;
|
|
187
|
+
const spec = decodeBeast2For(EnvironmentSpecType)(bytes);
|
|
188
|
+
assert.ok(spec.type === 'workspace_node');
|
|
189
|
+
return spec.value.members.map((m) => m.name).sort();
|
|
190
|
+
};
|
|
191
|
+
assert.deepStrictEqual(auto(['@acme/pricing']), ['@acme/common', '@acme/pricing'], 'a member ref pulls its transitive closure');
|
|
192
|
+
assert.deepStrictEqual(auto(['@acme/other']), ['@acme/other'], 'an independent member is captured alone');
|
|
193
|
+
assert.strictEqual(auto(['@elaraai/east-node-std']), null, 'a non-member name derives nothing');
|
|
194
|
+
assert.throws(() => auto(['@acme/pricing', '@acme/other']), /explicit `environment`/, 'multiple members need an explicit env for now');
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
describe('tools capture (#279)', () => {
|
|
198
|
+
let dir;
|
|
199
|
+
const cap = (files) => {
|
|
200
|
+
const blobs = new Map();
|
|
201
|
+
const bytes = captureEnvironment({ tools: { files: files } }, 'test', (b) => { const h = createHash('sha256').update(b).digest('hex'); blobs.set(h, b); return h; });
|
|
202
|
+
const spec = decodeBeast2For(EnvironmentSpecType)(bytes);
|
|
203
|
+
assert.ok(spec.type === 'tools');
|
|
204
|
+
return { paths: spec.value.files.map((f) => f.path), specHash: createHash('sha256').update(bytes).digest('hex'), blobs };
|
|
205
|
+
};
|
|
206
|
+
before(() => {
|
|
207
|
+
dir = fs.mkdtempSync(path.join(os.tmpdir(), 'e3-tools-cap-'));
|
|
208
|
+
fs.writeFileSync(path.join(dir, 'runner'), 'BINARY-BYTES');
|
|
209
|
+
fs.writeFileSync(path.join(dir, 'helper.dat'), 'DATA');
|
|
210
|
+
});
|
|
211
|
+
it('captures named files under bin/, sorted, decl-order-independent', () => {
|
|
212
|
+
const a = cap([path.join(dir, 'runner'), path.join(dir, 'helper.dat')]);
|
|
213
|
+
const b = cap([path.join(dir, 'helper.dat'), path.join(dir, 'runner')]);
|
|
214
|
+
assert.deepStrictEqual(a.paths, ['bin/helper.dat', 'bin/runner']);
|
|
215
|
+
assert.strictEqual(a.specHash, b.specHash, 'declaration order must not affect the env hash');
|
|
216
|
+
});
|
|
217
|
+
it('changes the env hash when a captured file changes (GAP-6)', () => {
|
|
218
|
+
const before = cap([path.join(dir, 'runner')]).specHash;
|
|
219
|
+
const orig = fs.readFileSync(path.join(dir, 'runner'));
|
|
220
|
+
try {
|
|
221
|
+
fs.writeFileSync(path.join(dir, 'runner'), 'REBUILT-BYTES');
|
|
222
|
+
assert.notStrictEqual(cap([path.join(dir, 'runner')]).specHash, before);
|
|
223
|
+
}
|
|
224
|
+
finally {
|
|
225
|
+
fs.writeFileSync(path.join(dir, 'runner'), orig);
|
|
226
|
+
}
|
|
227
|
+
});
|
|
228
|
+
it('rejects an empty file list (T1), a directory (T2), and colliding basenames (T3)', () => {
|
|
229
|
+
assert.throws(() => cap([]), /at least one file/);
|
|
230
|
+
assert.throws(() => cap([dir + '/']), /looks like a directory/);
|
|
231
|
+
fs.mkdirSync(path.join(dir, 'sub'), { recursive: true });
|
|
232
|
+
fs.writeFileSync(path.join(dir, 'sub', 'runner'), 'x');
|
|
233
|
+
assert.throws(() => cap([path.join(dir, 'runner'), path.join(dir, 'sub', 'runner')]), /collide on basename/);
|
|
234
|
+
});
|
|
235
|
+
it('errors when a named file does not exist (T4)', () => {
|
|
236
|
+
assert.throws(() => cap([path.join(dir, 'nonexistent')]), /not found/);
|
|
237
|
+
});
|
|
238
|
+
});
|
|
239
|
+
//# sourceMappingURL=environment-capture.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment-capture.spec.js","sourceRoot":"","sources":["../../src/environment-capture.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,9 +31,15 @@
|
|
|
31
31
|
* packages the project itself.
|
|
32
32
|
* - `image`: a full immutable digest reference (`repo@sha256:<64 hex>`);
|
|
33
33
|
* validated at definition time — mutable tags are rejected.
|
|
34
|
+
* - `tools`: `files` names ≥1 prebuilt file (a compiled binary, or any
|
|
35
|
+
* artifact) to capture as content-addressed blobs and place on the
|
|
36
|
+
* runner's PATH. e3 never builds these — the developer builds them
|
|
37
|
+
* however they like. The C story: embed east-c in your binary, run it via
|
|
38
|
+
* a `custom` runner, and attach `{ tools: { files: ['./build/runner'] } }`
|
|
39
|
+
* so a rebuild changes the environment hash and re-runs its tasks.
|
|
34
40
|
*
|
|
35
|
-
* Relative `project` paths resolve against the exporting process's
|
|
36
|
-
* directory.
|
|
41
|
+
* Relative `project`/`files` paths resolve against the exporting process's
|
|
42
|
+
* working directory.
|
|
37
43
|
*/
|
|
38
44
|
export type EnvironmentDecl = {
|
|
39
45
|
python: {
|
|
@@ -47,6 +53,10 @@ export type EnvironmentDecl = {
|
|
|
47
53
|
image: {
|
|
48
54
|
digest: string;
|
|
49
55
|
};
|
|
56
|
+
} | {
|
|
57
|
+
tools: {
|
|
58
|
+
files: [string, ...string[]];
|
|
59
|
+
};
|
|
50
60
|
};
|
|
51
61
|
/**
|
|
52
62
|
* Validates an environment declaration at definition time.
|
|
@@ -56,7 +66,8 @@ export type EnvironmentDecl = {
|
|
|
56
66
|
*
|
|
57
67
|
* @param decl - The declaration to validate
|
|
58
68
|
* @param owner - The declaring task/function name, for error messages
|
|
59
|
-
* @throws {Error} if an `image` reference is not a full sha256 digest
|
|
69
|
+
* @throws {Error} if an `image` reference is not a full sha256 digest, or a
|
|
70
|
+
* `tools` declaration is empty, names a directory, or has duplicate basenames
|
|
60
71
|
*/
|
|
61
72
|
export declare function validateEnvironmentDecl(decl: EnvironmentDecl, owner: string): void;
|
|
62
73
|
//# sourceMappingURL=environment.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../src/environment.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;;;;;;;GAiBG;AAEH
|
|
1
|
+
{"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../src/environment.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;;;;;;;GAiBG;AAEH;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,MAAM,eAAe,GACvB;IAAE,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAC7B;IAAE,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAC7B;IAAE,KAAK,EAAE;QAAE,KAAK,EAAE,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAA;KAAE,CAAA;CAAE,CAAC;AAIhD;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CA4BlF"}
|
package/dist/src/environment.js
CHANGED
|
@@ -11,7 +11,8 @@ const IMAGE_DIGEST_RE = /@sha256:[0-9a-f]{64}$/;
|
|
|
11
11
|
*
|
|
12
12
|
* @param decl - The declaration to validate
|
|
13
13
|
* @param owner - The declaring task/function name, for error messages
|
|
14
|
-
* @throws {Error} if an `image` reference is not a full sha256 digest
|
|
14
|
+
* @throws {Error} if an `image` reference is not a full sha256 digest, or a
|
|
15
|
+
* `tools` declaration is empty, names a directory, or has duplicate basenames
|
|
15
16
|
*/
|
|
16
17
|
export function validateEnvironmentDecl(decl, owner) {
|
|
17
18
|
if ('image' in decl) {
|
|
@@ -21,5 +22,24 @@ export function validateEnvironmentDecl(decl, owner) {
|
|
|
21
22
|
`would let the environment drift under a fixed hash`);
|
|
22
23
|
}
|
|
23
24
|
}
|
|
25
|
+
else if ('tools' in decl) {
|
|
26
|
+
const files = decl.tools.files;
|
|
27
|
+
if (files.length === 0) {
|
|
28
|
+
throw new Error(`Environment for '${owner}': tools.files must name at least one file`);
|
|
29
|
+
}
|
|
30
|
+
const basenames = new Set();
|
|
31
|
+
for (const f of files) {
|
|
32
|
+
if (f.endsWith('/') || f.endsWith('\\')) {
|
|
33
|
+
throw new Error(`Environment for '${owner}': tools file '${f}' looks like a directory — list files individually`);
|
|
34
|
+
}
|
|
35
|
+
// The env has one flat bin dir; case-insensitive because win32/macOS
|
|
36
|
+
// filesystems collapse case.
|
|
37
|
+
const base = f.replace(/[/\\]+$/, '').split(/[/\\]/).pop().toLowerCase();
|
|
38
|
+
if (basenames.has(base)) {
|
|
39
|
+
throw new Error(`Environment for '${owner}': tools files collide on basename '${base}' — each captured file needs a distinct name`);
|
|
40
|
+
}
|
|
41
|
+
basenames.add(base);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
24
44
|
}
|
|
25
45
|
//# sourceMappingURL=environment.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../../src/environment.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../../src/environment.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAgDH,MAAM,eAAe,GAAG,uBAAuB,CAAC;AAEhD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAAqB,EAAE,KAAa;IAC1E,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;QACpB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CACb,oBAAoB,KAAK,2CAA2C;gBACpE,wCAAwC,IAAI,CAAC,KAAK,CAAC,MAAM,2BAA2B;gBACpF,oDAAoD,CACrD,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,oBAAoB,KAAK,4CAA4C,CAAC,CAAC;QACzF,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;QACpC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxC,MAAM,IAAI,KAAK,CAAC,oBAAoB,KAAK,kBAAkB,CAAC,oDAAoD,CAAC,CAAC;YACpH,CAAC;YACD,qEAAqE;YACrE,6BAA6B;YAC7B,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAG,CAAC,WAAW,EAAE,CAAC;YAC1E,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxB,MAAM,IAAI,KAAK,CAAC,oBAAoB,KAAK,uCAAuC,IAAI,8CAA8C,CAAC,CAAC;YACtI,CAAC;YACD,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;AACH,CAAC"}
|
package/dist/src/export.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../src/export.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH,OAAO,IAAI,MAAM,MAAM,CAAC;AAIxB,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,YAAY,CAAC;AAK1D;;;;;;;;;;;;;;;GAeG;AAEH,wBAAsB,OAAO,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../src/export.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH,OAAO,IAAI,MAAM,MAAM,CAAC;AAIxB,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,YAAY,CAAC;AAK1D;;;;;;;;;;;;;;;GAeG;AAEH,wBAAsB,OAAO,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiRlH;AAOD;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAKrE"}
|
package/dist/src/export.js
CHANGED
|
@@ -14,10 +14,10 @@
|
|
|
14
14
|
import * as fs from 'node:fs';
|
|
15
15
|
import { createHash } from 'node:crypto';
|
|
16
16
|
import yazl from 'yazl';
|
|
17
|
-
import { variant, encodeBeast2For, encodeEastIR, EastIR, AsyncEastIR, printIdentifier, SortedMap, toEastTypeValue } from '@elaraai/east';
|
|
17
|
+
import { variant, some, none, encodeBeast2For, encodeEastIR, EastIR, AsyncEastIR, printIdentifier, SortedMap, toEastTypeValue } from '@elaraai/east';
|
|
18
18
|
import { DatasetRefType, PackageObjectType, TaskObjectType, FunctionObjectType, MutationObjectType, RecordObjectType } from '@elaraai/e3-types';
|
|
19
19
|
import { runnerToVariant } from './runner.js';
|
|
20
|
-
import { captureEnvironment } from './environment-capture.js';
|
|
20
|
+
import { captureEnvironment, captureAutoEnvironment } from './environment-capture.js';
|
|
21
21
|
/**
|
|
22
22
|
* Exports a package to a .zip bundle.
|
|
23
23
|
*
|
|
@@ -46,18 +46,40 @@ export async function export_(pkg, outputPath) {
|
|
|
46
46
|
// Resolve environment declarations to content-addressed EnvironmentSpec
|
|
47
47
|
// objects, once per distinct declaration per export run (a project capture
|
|
48
48
|
// shells out to uv/npm — identical declarations must not re-build).
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
49
|
+
// Environment spec hashes, memoized per distinct decl/derivation key (a
|
|
50
|
+
// capture shells out to uv/npm). '' marks a key that resolved to "no
|
|
51
|
+
// environment", so it is neither re-derived nor mistaken for a cache miss.
|
|
52
|
+
const environmentHashes = new Map();
|
|
53
|
+
const cachedEnvHash = (key, capture) => {
|
|
54
54
|
let hash = environmentHashes.get(key);
|
|
55
55
|
if (hash === undefined) {
|
|
56
|
-
const specData =
|
|
57
|
-
hash = addObject(zipfile, Buffer.from(specData));
|
|
56
|
+
const specData = capture();
|
|
57
|
+
hash = specData === null ? '' : addObject(zipfile, Buffer.from(specData));
|
|
58
58
|
environmentHashes.set(key, hash);
|
|
59
59
|
}
|
|
60
|
-
return
|
|
60
|
+
return hash === '' ? null : hash;
|
|
61
|
+
};
|
|
62
|
+
const environmentHashFor = (decl, runner, owner) => {
|
|
63
|
+
// An explicit `environment` wins (and is the only path to tools/image).
|
|
64
|
+
if (decl) {
|
|
65
|
+
return cachedEnvHash(`decl:${JSON.stringify(decl)}`, () => captureEnvironment(decl, owner, (blob) => addObject(zipfile, blob)));
|
|
66
|
+
}
|
|
67
|
+
// Otherwise derive it from the runner's `{ custom }` platform references, so
|
|
68
|
+
// a project split into workspace packages gets per-package change-detection
|
|
69
|
+
// granularity with no hand-written `environment`.
|
|
70
|
+
if (!runner || runner.runtime === 'custom')
|
|
71
|
+
return null;
|
|
72
|
+
const customs = (runner.platforms ?? [])
|
|
73
|
+
.filter((p) => typeof p === 'object' && p !== null && 'custom' in p)
|
|
74
|
+
.map((p) => p.custom);
|
|
75
|
+
if (customs.length === 0)
|
|
76
|
+
return null;
|
|
77
|
+
const key = `auto:${runner.runtime}:${[...customs].sort().join(',')}`;
|
|
78
|
+
return cachedEnvHash(key, () => captureAutoEnvironment(runner.runtime, customs, process.cwd(), owner, (blob) => addObject(zipfile, blob)));
|
|
79
|
+
};
|
|
80
|
+
const resolveEnvironment = (decl, runner, owner) => {
|
|
81
|
+
const hash = environmentHashFor(decl, runner, owner);
|
|
82
|
+
return hash === null ? none : some(hash);
|
|
61
83
|
};
|
|
62
84
|
// Create root structure as first entry
|
|
63
85
|
structures.set('', variant('struct', new SortedMap()));
|
|
@@ -163,7 +185,7 @@ export async function export_(pkg, outputPath) {
|
|
|
163
185
|
// customTask leaves TaskDef.runner undefined -> opaque custom
|
|
164
186
|
// (empty command: the wire field is informational for custom tasks).
|
|
165
187
|
runner: item.runner ? runnerToVariant(item.runner) : variant('custom', { command: [] }),
|
|
166
|
-
environment: resolveEnvironment(item.environment, item.name),
|
|
188
|
+
environment: resolveEnvironment(item.environment, item.runner, item.name),
|
|
167
189
|
};
|
|
168
190
|
// Serialize and add to zip
|
|
169
191
|
const taskEncoder = encodeBeast2For(TaskObjectType);
|
|
@@ -191,7 +213,7 @@ export async function export_(pkg, outputPath) {
|
|
|
191
213
|
inputTypes: fdef.inputTypes.map((t) => toEastTypeValue(t)),
|
|
192
214
|
outputType: toEastTypeValue(fdef.outputType),
|
|
193
215
|
runner: runnerToVariant(fdef.runner),
|
|
194
|
-
environment: resolveEnvironment(fdef.environment, fname),
|
|
216
|
+
environment: resolveEnvironment(fdef.environment, fdef.runner, fname),
|
|
195
217
|
};
|
|
196
218
|
const fnHash = addObject(zipfile, Buffer.from(functionEncoder(fnObject)));
|
|
197
219
|
functions.set(fname, fnHash);
|
package/dist/src/export.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/export.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/export.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErJ,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,cAAc,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAEhJ,OAAO,EAAE,eAAe,EAAe,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAGtF;;;;;;;;;;;;;;;GAeG;AACH,qDAAqD;AACrD,MAAM,CAAC,KAAK,UAAU,OAAO,CAAgC,GAAkB,EAAE,UAAkB;IACjG,MAAM,WAAW,GAAG,GAAG,UAAU,UAAU,CAAC;IAE5C,kBAAkB;IAClB,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;IAEnC,oEAAoE;IACpE,MAAM,KAAK,GAAG,IAAI,SAAS,EAAkB,CAAC,CAAC,2BAA2B;IAC1E,MAAM,UAAU,GAAG,IAAI,GAAG,EAAqB,CAAC,CAAC,iDAAiD;IAClG,MAAM,IAAI,GAAG,IAAI,SAAS,EAAsB,CAAC,CAAC,wBAAwB;IAE1E,wEAAwE;IACxE,2EAA2E;IAC3E,oEAAoE;IACpE,wEAAwE;IACxE,qEAAqE;IACrE,2EAA2E;IAC3E,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAkB,CAAC;IACpD,MAAM,aAAa,GAAG,CAAC,GAAW,EAAE,OAAgC,EAAiB,EAAE;QACrF,IAAI,IAAI,GAAG,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,MAAM,QAAQ,GAAG,OAAO,EAAE,CAAC;YAC3B,IAAI,GAAG,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC1E,iBAAiB,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACnC,CAAC,CAAC;IACF,MAAM,kBAAkB,GAAG,CAAC,IAAiC,EAAE,MAA0B,EAAE,KAAa,EAAiB,EAAE;QACzH,wEAAwE;QACxE,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,aAAa,CAAC,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAClI,CAAC;QACD,6EAA6E;QAC7E,4EAA4E;QAC5E,kDAAkD;QAClD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACxD,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;aACrC,MAAM,CAAC,CAAC,CAAC,EAA2B,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,QAAQ,IAAI,CAAC,CAAC;aAC5F,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACxB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACtC,MAAM,GAAG,GAAG,QAAQ,MAAM,CAAC,OAAO,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACtE,OAAO,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,sBAAsB,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7I,CAAC,CAAC;IACF,MAAM,kBAAkB,GAAG,CAAC,IAAiC,EAAE,MAA0B,EAAE,KAAa,EAAmD,EAAE;QAC3J,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QACrD,OAAO,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC,CAAC;IAEF,uCAAuC;IACvC,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC;IAEvD,sDAAsD;IACtD,4EAA4E;IAC5E,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC7B,6CAA6C;YAE7C,uBAAuB;YACvB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;gBACtD,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAC7B,MAAM,IAAI,KAAK,CAAC,8CAA8C,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC9F,CAAC;gBACD,OAAO,IAAI,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9C,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEZ,MAAM,eAAe,GAAG,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACnD,IAAI,CAAC,eAAe,IAAI,eAAe,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC1D,MAAM,IAAI,KAAK,CAAC,gDAAgD,UAAU,EAAE,CAAC,CAAC;YAChF,CAAC;YAED,mDAAmD;YACnD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAChD,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC7B,MAAM,IAAI,KAAK,CAAC,8CAA8C,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9F,CAAC;YACD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC;YAC3B,MAAM,IAAI,GAAG,GAAG,UAAU,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;YACtD,MAAM,cAAc,GAAc,OAAO,CAAC,QAAQ,EAAE,IAAI,SAAS,EAAE,CAAC,CAAC;YACrE,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;YAChD,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QAEvC,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACnC,2EAA2E;YAE3E,uBAAuB;YACvB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;gBACtD,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAC7B,MAAM,IAAI,KAAK,CAAC,8CAA8C,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC9F,CAAC;gBACD,OAAO,IAAI,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9C,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEZ,MAAM,eAAe,GAAG,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACnD,IAAI,CAAC,eAAe,IAAI,eAAe,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC1D,MAAM,IAAI,KAAK,CAAC,gDAAgD,UAAU,EAAE,CAAC,CAAC;YAChF,CAAC;YAED,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAChD,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC7B,MAAM,IAAI,KAAK,CAAC,8CAA8C,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9F,CAAC;YACD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC;YAE3B,uEAAuE;YACvE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBAClC,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBACzB,MAAM,IAAI,KAAK,CAAC,kCAAkC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;gBAChE,CAAC;gBACD,OAAO,GAAG,CAAC,KAAK,CAAC;YACnB,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAEb,6DAA6D;YAC7D,qEAAqE;YACrE,sEAAsE;YACtE,qEAAqE;YACrE,6BAA6B;YAC7B,IAAI,UAAsB,CAAC;YAC3B,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC/B,IAAI,SAAqB,CAAC;gBAC1B,IAAI,IAAI,CAAC,OAAO,YAAY,MAAM,IAAI,IAAI,CAAC,OAAO,YAAY,WAAW,EAAE,CAAC;oBAC1E,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACzC,CAAC;qBAAM,CAAC;oBACN,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvD,CAAC;gBACD,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;gBAC7D,UAAU,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;YAC1E,CAAC;iBAAM,CAAC;gBACN,UAAU,GAAG,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;YAC3C,CAAC;YAED,0CAA0C;YAC1C,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YAE9B,iFAAiF;YACjF,MAAM,UAAU,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;YACnD,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;YACvC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,QAAQ,OAAO,MAAM,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;YAE/F,gEAAgE;YAChE,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7C,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAElG,CAAC;aAAM,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAChC,+CAA+C;YAE/C,6CAA6C;YAC7C,2EAA2E;YAC3E,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAExD,kEAAkE;YAClE,4BAA4B;YAC5B,MAAM,aAAa,GAAG,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACjD,MAAM,aAAa,GAAG,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;YAErE,mBAAmB;YACnB,MAAM,UAAU,GAAG;gBACjB,SAAS,EAAE,aAAa;gBACxB,MAAM,EAAE,UAAU;gBAClB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;gBACxB,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;gBAC5E,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;gBAChF,kEAAkE;gBAClE,8DAA8D;gBAC9D,qEAAqE;gBACrE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,EAAc,EAAE,CAAC;gBACnG,WAAW,EAAE,kBAAkB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;aAC1E,CAAC;YAEF,2BAA2B;YAC3B,MAAM,WAAW,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;YACpD,MAAM,QAAQ,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;YACzC,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAE3D,2BAA2B;YAC3B,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAEjC,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,8BAA+B,IAAoC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9F,CAAC;IACH,CAAC;IAED,wEAAwE;IACxE,yEAAyE;IACzE,2EAA2E;IAC3E,MAAM,SAAS,GAAG,IAAI,SAAS,EAAkB,CAAC,CAAC,+BAA+B;IAClF,MAAM,eAAe,GAAG,eAAe,CAAC,kBAAkB,CAAC,CAAC;IAC5D,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1D,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAE/D,uEAAuE;QACvE,oDAAoD;QACpD,MAAM,QAAQ,GAAmB;YAC/B,MAAM,EAAE,UAAU;YAClB,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAC1D,UAAU,EAAE,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC;YAC5C,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;YACpC,WAAW,EAAE,kBAAkB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC;SACtE,CAAC;QACF,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC1E,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED,8EAA8E;IAC9E,0EAA0E;IAC1E,sEAAsE;IACtE,8EAA8E;IAC9E,oEAAoE;IACpE,MAAM,OAAO,GAAG,IAAI,SAAS,EAAkB,CAAC,CAAC,4BAA4B;IAC7E,MAAM,eAAe,GAAG,eAAe,CAAC,kBAAkB,CAAC,CAAC;IAC5D,MAAM,aAAa,GAAG,eAAe,CAAC,gBAAgB,CAAC,CAAC;IACxD,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QACxD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YACxC,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CAAC,kCAAkC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YAChE,CAAC;YACD,OAAO,GAAG,CAAC,KAAK,CAAC;QACnB,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEb,MAAM,SAAS,GAAG,IAAI,SAAS,EAAkB,CAAC,CAAC,8BAA8B;QACjF,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3D,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3C,MAAM,UAAU,GAAG,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YAC/D,MAAM,SAAS,GAAmB;gBAChC,MAAM,EAAE,UAAU;gBAClB,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;gBACtD,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;aACrC,CAAC;YACF,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAC5E,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAChC,CAAC;QAED,MAAM,SAAS,GAAiB,EAAE,IAAI,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC;QACnE,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC1E,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC9B,CAAC;IAED,yBAAyB;IACzB,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACzC,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IAED,qCAAqC;IACrC,MAAM,aAAa,GAAkB;QACnC,KAAK;QACL,IAAI,EAAE;YACJ,SAAS,EAAE,aAAa;YACxB,IAAI;SACL;QACD,SAAS;QACT,OAAO;KACR,CAAC;IACF,MAAM,oBAAoB,GAAG,eAAe,CAAC,iBAAiB,CAAC,CAAC;IAChE,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,aAAa,CAAC,CAAC;IAC9D,MAAM,WAAW,GAAG,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAEvE,qDAAqD;IACrD,MAAM,OAAO,GAAG,YAAY,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;IACtD,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;IAE5F,iCAAiC;IACjC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,MAAM,WAAW,GAAG,EAAE,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC;QACtD,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACvC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACzC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAChC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACjC,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,8BAA8B;IAC9B,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,MAAM,mBAAmB,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;AAExC;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,OAAqB,EAAE,IAAY;IAC3D,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7D,MAAM,IAAI,GAAG,WAAW,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IACnE,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;IAC9D,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elaraai/e3",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.31",
|
|
4
4
|
"description": "TypeScript SDK for authoring e3 packages",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/src/index.js",
|
|
@@ -17,11 +17,12 @@
|
|
|
17
17
|
}
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
|
+
"smol-toml": "^1.3.1",
|
|
20
21
|
"yazl": "^2.5.1",
|
|
21
|
-
"@elaraai/e3-types": "1.0.
|
|
22
|
+
"@elaraai/e3-types": "1.0.31"
|
|
22
23
|
},
|
|
23
24
|
"peerDependencies": {
|
|
24
|
-
"@elaraai/east": "1.0.
|
|
25
|
+
"@elaraai/east": "1.0.31"
|
|
25
26
|
},
|
|
26
27
|
"devDependencies": {
|
|
27
28
|
"@types/node": "^22.10.1",
|