@elaraai/e3-core 0.0.1-alpha.2

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.
Files changed (63) hide show
  1. package/LICENSE.md +50 -0
  2. package/README.md +103 -0
  3. package/dist/src/dataflow.d.ts +136 -0
  4. package/dist/src/dataflow.d.ts.map +1 -0
  5. package/dist/src/dataflow.js +562 -0
  6. package/dist/src/dataflow.js.map +1 -0
  7. package/dist/src/errors.d.ts +125 -0
  8. package/dist/src/errors.d.ts.map +1 -0
  9. package/dist/src/errors.js +211 -0
  10. package/dist/src/errors.js.map +1 -0
  11. package/dist/src/executions.d.ts +176 -0
  12. package/dist/src/executions.d.ts.map +1 -0
  13. package/dist/src/executions.js +585 -0
  14. package/dist/src/executions.js.map +1 -0
  15. package/dist/src/formats.d.ts +38 -0
  16. package/dist/src/formats.d.ts.map +1 -0
  17. package/dist/src/formats.js +115 -0
  18. package/dist/src/formats.js.map +1 -0
  19. package/dist/src/gc.d.ts +54 -0
  20. package/dist/src/gc.d.ts.map +1 -0
  21. package/dist/src/gc.js +233 -0
  22. package/dist/src/gc.js.map +1 -0
  23. package/dist/src/index.d.ts +25 -0
  24. package/dist/src/index.d.ts.map +1 -0
  25. package/dist/src/index.js +72 -0
  26. package/dist/src/index.js.map +1 -0
  27. package/dist/src/objects.d.ts +62 -0
  28. package/dist/src/objects.d.ts.map +1 -0
  29. package/dist/src/objects.js +245 -0
  30. package/dist/src/objects.js.map +1 -0
  31. package/dist/src/packages.d.ts +93 -0
  32. package/dist/src/packages.d.ts.map +1 -0
  33. package/dist/src/packages.js +370 -0
  34. package/dist/src/packages.js.map +1 -0
  35. package/dist/src/repository.d.ts +38 -0
  36. package/dist/src/repository.d.ts.map +1 -0
  37. package/dist/src/repository.js +103 -0
  38. package/dist/src/repository.js.map +1 -0
  39. package/dist/src/tasks.d.ts +63 -0
  40. package/dist/src/tasks.d.ts.map +1 -0
  41. package/dist/src/tasks.js +145 -0
  42. package/dist/src/tasks.js.map +1 -0
  43. package/dist/src/test-helpers.d.ts +44 -0
  44. package/dist/src/test-helpers.d.ts.map +1 -0
  45. package/dist/src/test-helpers.js +141 -0
  46. package/dist/src/test-helpers.js.map +1 -0
  47. package/dist/src/trees.d.ts +178 -0
  48. package/dist/src/trees.d.ts.map +1 -0
  49. package/dist/src/trees.js +636 -0
  50. package/dist/src/trees.js.map +1 -0
  51. package/dist/src/workspaceLock.d.ts +67 -0
  52. package/dist/src/workspaceLock.d.ts.map +1 -0
  53. package/dist/src/workspaceLock.js +217 -0
  54. package/dist/src/workspaceLock.js.map +1 -0
  55. package/dist/src/workspaceStatus.d.ts +126 -0
  56. package/dist/src/workspaceStatus.d.ts.map +1 -0
  57. package/dist/src/workspaceStatus.js +352 -0
  58. package/dist/src/workspaceStatus.js.map +1 -0
  59. package/dist/src/workspaces.d.ts +150 -0
  60. package/dist/src/workspaces.d.ts.map +1 -0
  61. package/dist/src/workspaces.js +390 -0
  62. package/dist/src/workspaces.js.map +1 -0
  63. package/package.json +59 -0
@@ -0,0 +1,390 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Licensed under BSL 1.1. See LICENSE for details.
4
+ */
5
+ /**
6
+ * Workspace operations for e3 repositories.
7
+ *
8
+ * Workspaces are mutable working copies of packages. They allow:
9
+ * - Deploying a package to create a working environment
10
+ * - Modifying data (inputs/outputs)
11
+ * - Exporting changes back to a new package version
12
+ *
13
+ * State is stored in workspaces/<name>.beast2 as a single atomic file.
14
+ * No state file means the workspace does not exist.
15
+ */
16
+ import * as fs from 'fs/promises';
17
+ import { createWriteStream } from 'fs';
18
+ import * as path from 'path';
19
+ import yazl from 'yazl';
20
+ import { decodeBeast2For, encodeBeast2For } from '@elaraai/east';
21
+ import { PackageObjectType, WorkspaceStateType } from '@elaraai/e3-types';
22
+ import { objectRead, objectWrite } from './objects.js';
23
+ import { packageResolve, packageRead } from './packages.js';
24
+ import { WorkspaceNotFoundError, WorkspaceNotDeployedError, WorkspaceExistsError, isNotFoundError, } from './errors.js';
25
+ import { acquireWorkspaceLock } from './workspaceLock.js';
26
+ /**
27
+ * Get the path to a workspace's state file.
28
+ */
29
+ function statePath(repoPath, name) {
30
+ return path.join(repoPath, 'workspaces', `${name}.beast2`);
31
+ }
32
+ /**
33
+ * Atomically write workspace state.
34
+ */
35
+ async function writeState(repoPath, name, state) {
36
+ const wsDir = path.join(repoPath, 'workspaces');
37
+ const stateFile = statePath(repoPath, name);
38
+ // Ensure workspaces directory exists
39
+ await fs.mkdir(wsDir, { recursive: true });
40
+ const encoder = encodeBeast2For(WorkspaceStateType);
41
+ const data = encoder(state);
42
+ // Write atomically: write to temp file, then rename
43
+ const randomSuffix = Math.random().toString(36).slice(2, 10);
44
+ const tempPath = path.join(wsDir, `.${name}.${Date.now()}.${randomSuffix}.tmp`);
45
+ await fs.writeFile(tempPath, data);
46
+ await fs.rename(tempPath, stateFile);
47
+ }
48
+ /**
49
+ * Read workspace state.
50
+ * Returns { exists: false } if workspace doesn't exist.
51
+ * Returns { exists: true, deployed: false } if workspace exists but not deployed.
52
+ * Returns { exists: true, deployed: true, state } if workspace is deployed.
53
+ */
54
+ async function readState(repoPath, name) {
55
+ const stateFile = statePath(repoPath, name);
56
+ try {
57
+ const data = await fs.readFile(stateFile);
58
+ // Empty file means workspace exists but is not deployed
59
+ if (data.length === 0) {
60
+ return { exists: true, deployed: false };
61
+ }
62
+ const decoder = decodeBeast2For(WorkspaceStateType);
63
+ return { exists: true, deployed: true, state: decoder(data) };
64
+ }
65
+ catch (err) {
66
+ if (isNotFoundError(err)) {
67
+ return { exists: false };
68
+ }
69
+ throw err;
70
+ }
71
+ }
72
+ /**
73
+ * Read workspace state, throwing if workspace doesn't exist or is not deployed.
74
+ * @throws {WorkspaceNotFoundError} If workspace doesn't exist
75
+ * @throws {WorkspaceNotDeployedError} If workspace exists but has no package deployed
76
+ */
77
+ async function readStateOrThrow(repoPath, name) {
78
+ const result = await readState(repoPath, name);
79
+ if (!result.exists) {
80
+ throw new WorkspaceNotFoundError(name);
81
+ }
82
+ if (!result.deployed) {
83
+ throw new WorkspaceNotDeployedError(name);
84
+ }
85
+ return result.state;
86
+ }
87
+ /**
88
+ * Create an empty workspace.
89
+ *
90
+ * Creates an undeployed workspace (state file with null package info).
91
+ * Use workspaceDeploy to deploy a package.
92
+ *
93
+ * @param repoPath - Path to .e3 repository
94
+ * @param name - Workspace name
95
+ * @throws {WorkspaceExistsError} If workspace already exists
96
+ */
97
+ export async function workspaceCreate(repoPath, name) {
98
+ const stateFile = statePath(repoPath, name);
99
+ // Check if workspace already exists
100
+ try {
101
+ await fs.access(stateFile);
102
+ throw new WorkspaceExistsError(name);
103
+ }
104
+ catch (err) {
105
+ if (err instanceof WorkspaceExistsError)
106
+ throw err;
107
+ if (!isNotFoundError(err)) {
108
+ throw err;
109
+ }
110
+ }
111
+ // Create workspaces directory if needed
112
+ const wsDir = path.join(repoPath, 'workspaces');
113
+ await fs.mkdir(wsDir, { recursive: true });
114
+ // Create empty file to mark workspace as existing but not deployed
115
+ // We use an empty file rather than a state file since there's no valid state yet
116
+ await fs.writeFile(stateFile, '');
117
+ }
118
+ /**
119
+ * Remove a workspace.
120
+ *
121
+ * Objects remain until repoGc is run.
122
+ *
123
+ * Acquires a workspace lock to prevent removing a workspace while a dataflow
124
+ * is running. Throws WorkspaceLockError if the workspace is currently locked.
125
+ *
126
+ * @param repoPath - Path to .e3 repository
127
+ * @param name - Workspace name
128
+ * @param options - Optional settings including external lock
129
+ * @throws {WorkspaceNotFoundError} If workspace doesn't exist
130
+ * @throws {WorkspaceLockError} If workspace is locked by another process
131
+ */
132
+ export async function workspaceRemove(repoPath, name, options = {}) {
133
+ // Acquire lock if not provided externally
134
+ const externalLock = options.lock;
135
+ const lock = externalLock ?? await acquireWorkspaceLock(repoPath, name);
136
+ try {
137
+ const stateFile = statePath(repoPath, name);
138
+ try {
139
+ await fs.unlink(stateFile);
140
+ }
141
+ catch (err) {
142
+ if (isNotFoundError(err)) {
143
+ throw new WorkspaceNotFoundError(name);
144
+ }
145
+ throw err;
146
+ }
147
+ }
148
+ finally {
149
+ // Only release the lock if we acquired it internally
150
+ if (!externalLock) {
151
+ await lock.release();
152
+ }
153
+ }
154
+ }
155
+ /**
156
+ * List workspace names.
157
+ *
158
+ * @param repoPath - Path to .e3 repository
159
+ * @returns Array of workspace names
160
+ */
161
+ export async function workspaceList(repoPath) {
162
+ const workspacesDir = path.join(repoPath, 'workspaces');
163
+ const names = [];
164
+ try {
165
+ const entries = await fs.readdir(workspacesDir);
166
+ for (const entry of entries) {
167
+ if (entry.endsWith('.beast2')) {
168
+ names.push(entry.slice(0, -7)); // Remove .beast2 extension
169
+ }
170
+ }
171
+ }
172
+ catch {
173
+ // workspaces directory doesn't exist
174
+ }
175
+ return names;
176
+ }
177
+ /**
178
+ * Get the full state for a workspace.
179
+ *
180
+ * @param repoPath - Path to .e3 repository
181
+ * @param name - Workspace name
182
+ * @returns Workspace state, or null if workspace doesn't exist or is not deployed
183
+ */
184
+ export async function workspaceGetState(repoPath, name) {
185
+ const result = await readState(repoPath, name);
186
+ if (!result.exists || !result.deployed) {
187
+ return null;
188
+ }
189
+ return result.state;
190
+ }
191
+ /**
192
+ * Get the deployed package for a workspace.
193
+ *
194
+ * @param repoPath - Path to .e3 repository
195
+ * @param name - Workspace name
196
+ * @returns Package name, version, and hash
197
+ * @throws {WorkspaceNotFoundError} If workspace doesn't exist
198
+ * @throws {WorkspaceNotDeployedError} If workspace exists but has no package deployed
199
+ */
200
+ export async function workspaceGetPackage(repoPath, name) {
201
+ const state = await readStateOrThrow(repoPath, name);
202
+ return {
203
+ name: state.packageName,
204
+ version: state.packageVersion,
205
+ hash: state.packageHash,
206
+ };
207
+ }
208
+ /**
209
+ * Get the root tree hash for a workspace.
210
+ *
211
+ * @param repoPath - Path to .e3 repository
212
+ * @param name - Workspace name
213
+ * @returns Root tree object hash
214
+ * @throws {WorkspaceNotFoundError} If workspace doesn't exist
215
+ * @throws {WorkspaceNotDeployedError} If workspace exists but has no package deployed
216
+ */
217
+ export async function workspaceGetRoot(repoPath, name) {
218
+ const state = await readStateOrThrow(repoPath, name);
219
+ return state.rootHash;
220
+ }
221
+ /**
222
+ * Atomically update the root tree hash for a workspace.
223
+ *
224
+ * @param repoPath - Path to .e3 repository
225
+ * @param name - Workspace name
226
+ * @param hash - New root tree object hash
227
+ * @throws {WorkspaceNotFoundError} If workspace doesn't exist
228
+ * @throws {WorkspaceNotDeployedError} If workspace exists but has no package deployed
229
+ */
230
+ export async function workspaceSetRoot(repoPath, name, hash) {
231
+ const state = await readStateOrThrow(repoPath, name);
232
+ const newState = {
233
+ ...state,
234
+ rootHash: hash,
235
+ rootUpdatedAt: new Date(),
236
+ };
237
+ await writeState(repoPath, name, newState);
238
+ }
239
+ /**
240
+ * Deploy a package to a workspace.
241
+ *
242
+ * Creates the workspace if it doesn't exist. Writes state file atomically
243
+ * containing deployment info and root hash.
244
+ *
245
+ * Acquires a workspace lock to prevent conflicts with running dataflows
246
+ * or concurrent deploys. Throws WorkspaceLockError if the workspace is
247
+ * currently locked by another process.
248
+ *
249
+ * @param repoPath - Path to .e3 repository
250
+ * @param name - Workspace name
251
+ * @param pkgName - Package name
252
+ * @param pkgVersion - Package version
253
+ * @param options - Optional settings including external lock
254
+ * @throws {WorkspaceLockError} If workspace is locked by another process
255
+ */
256
+ export async function workspaceDeploy(repoPath, name, pkgName, pkgVersion, options = {}) {
257
+ // Acquire lock if not provided externally
258
+ const externalLock = options.lock;
259
+ const lock = externalLock ?? await acquireWorkspaceLock(repoPath, name);
260
+ try {
261
+ // Resolve package hash and read package object
262
+ const packageHash = await packageResolve(repoPath, pkgName, pkgVersion);
263
+ const pkg = await packageRead(repoPath, pkgName, pkgVersion);
264
+ const now = new Date();
265
+ const state = {
266
+ packageName: pkgName,
267
+ packageVersion: pkgVersion,
268
+ packageHash,
269
+ deployedAt: now,
270
+ rootHash: pkg.data.value,
271
+ rootUpdatedAt: now,
272
+ };
273
+ await writeState(repoPath, name, state);
274
+ }
275
+ finally {
276
+ // Only release the lock if we acquired it internally
277
+ if (!externalLock) {
278
+ await lock.release();
279
+ }
280
+ }
281
+ }
282
+ /**
283
+ * Fixed mtime for deterministic zip output (Unix epoch)
284
+ */
285
+ const DETERMINISTIC_MTIME = new Date(0);
286
+ /**
287
+ * Export a workspace as a package.
288
+ *
289
+ * 1. Read workspace state
290
+ * 2. Read deployed package structure using stored packageHash
291
+ * 3. Create new PackageObject with data.value set to current rootHash
292
+ * 4. Collect all referenced objects
293
+ * 5. Write to .zip
294
+ *
295
+ * @param repoPath - Path to .e3 repository
296
+ * @param name - Workspace name
297
+ * @param zipPath - Path to write the .zip file
298
+ * @param outputName - Package name (default: deployed package name)
299
+ * @param version - Package version (default: <pkgVersion>-<rootHash[0..8]>)
300
+ * @returns Export result with package info
301
+ * @throws {WorkspaceNotFoundError} If workspace doesn't exist
302
+ * @throws {WorkspaceNotDeployedError} If workspace exists but has no package deployed
303
+ */
304
+ export async function workspaceExport(repoPath, name, zipPath, outputName, version) {
305
+ const partialPath = `${zipPath}.partial`;
306
+ // Get workspace state
307
+ const state = await readStateOrThrow(repoPath, name);
308
+ // Read the deployed package object using the stored hash
309
+ const deployedPkgData = await objectRead(repoPath, state.packageHash);
310
+ const decoder = decodeBeast2For(PackageObjectType);
311
+ const deployedPkgObject = decoder(Buffer.from(deployedPkgData));
312
+ // Determine output name and version
313
+ const finalName = outputName ?? state.packageName;
314
+ const finalVersion = version ?? `${state.packageVersion}-${state.rootHash.slice(0, 8)}`;
315
+ // Create new PackageObject with updated root
316
+ const newPkgObject = {
317
+ tasks: deployedPkgObject.tasks,
318
+ data: {
319
+ structure: deployedPkgObject.data.structure,
320
+ value: state.rootHash,
321
+ },
322
+ };
323
+ // Encode and store the new package object
324
+ const encoder = encodeBeast2For(PackageObjectType);
325
+ const pkgData = encoder(newPkgObject);
326
+ const packageHash = await objectWrite(repoPath, pkgData);
327
+ // Create zip file
328
+ const zipfile = new yazl.ZipFile();
329
+ // Track which objects we've added to avoid duplicates
330
+ const addedObjects = new Set();
331
+ // Helper to add an object to the zip
332
+ const addObject = async (hash) => {
333
+ if (addedObjects.has(hash))
334
+ return;
335
+ addedObjects.add(hash);
336
+ const data = await objectRead(repoPath, hash);
337
+ const objPath = `objects/${hash.slice(0, 2)}/${hash.slice(2)}.beast2`;
338
+ zipfile.addBuffer(Buffer.from(data), objPath, { mtime: DETERMINISTIC_MTIME });
339
+ };
340
+ // Helper to collect children from a tree object (same as packages.ts)
341
+ const collectTreeChildren = async (treeData) => {
342
+ const dataStr = Buffer.from(treeData).toString('latin1');
343
+ const hashPattern = /[a-f0-9]{64}/g;
344
+ const matches = dataStr.matchAll(hashPattern);
345
+ for (const match of matches) {
346
+ const potentialHash = match[0];
347
+ if (addedObjects.has(potentialHash))
348
+ continue;
349
+ try {
350
+ await addObject(potentialHash);
351
+ const childData = await objectRead(repoPath, potentialHash);
352
+ await collectTreeChildren(childData);
353
+ }
354
+ catch {
355
+ addedObjects.delete(potentialHash);
356
+ }
357
+ }
358
+ };
359
+ // Add the package object
360
+ await addObject(packageHash);
361
+ // Collect all task objects
362
+ for (const taskHash of newPkgObject.tasks.values()) {
363
+ await addObject(taskHash);
364
+ }
365
+ // Collect the root tree and all its children
366
+ await addObject(state.rootHash);
367
+ const rootTreeData = await objectRead(repoPath, state.rootHash);
368
+ await collectTreeChildren(rootTreeData);
369
+ // Write the package ref
370
+ const refPath = `packages/${finalName}/${finalVersion}`;
371
+ zipfile.addBuffer(Buffer.from(packageHash + '\n'), refPath, { mtime: DETERMINISTIC_MTIME });
372
+ // Finalize and write zip to disk
373
+ await new Promise((resolve, reject) => {
374
+ const writeStream = createWriteStream(partialPath);
375
+ zipfile.outputStream.pipe(writeStream);
376
+ zipfile.outputStream.on('error', reject);
377
+ writeStream.on('error', reject);
378
+ writeStream.on('close', resolve);
379
+ zipfile.end();
380
+ });
381
+ // Atomic rename to final path
382
+ await fs.rename(partialPath, zipPath);
383
+ return {
384
+ packageHash,
385
+ objectCount: addedObjects.size,
386
+ name: finalName,
387
+ version: finalVersion,
388
+ };
389
+ }
390
+ //# sourceMappingURL=workspaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspaces.js","sourceRoot":"","sources":["../../src/workspaces.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "@elaraai/e3-core",
3
+ "version": "0.0.1-alpha.2",
4
+ "type": "module",
5
+ "description": "East Execution Engine Core - Programmatic API for e3 repository operations",
6
+ "main": "dist/src/index.js",
7
+ "types": "dist/src/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/src/index.d.ts",
11
+ "default": "./dist/src/index.js"
12
+ },
13
+ "./test": {
14
+ "types": "./dist/src/test-helpers.d.ts",
15
+ "default": "./dist/src/test-helpers.js"
16
+ }
17
+ },
18
+ "files": [
19
+ "dist/src",
20
+ "!dist/src/**/*.spec.*",
21
+ "README.md",
22
+ "LICENSE"
23
+ ],
24
+ "scripts": {
25
+ "build": "tsc --build",
26
+ "test": "npm run build && node --enable-source-maps --test 'dist/src/**/*.spec.js'",
27
+ "lint": "eslint .",
28
+ "lint:fix": "eslint . --fix"
29
+ },
30
+ "keywords": [
31
+ "east",
32
+ "e3",
33
+ "core",
34
+ "library"
35
+ ],
36
+ "license": "SEE LICENSE IN LICENSE",
37
+ "repository": {
38
+ "type": "git",
39
+ "url": "https://github.com/elaraai/e3",
40
+ "directory": "packages/e3-core"
41
+ },
42
+ "dependencies": {
43
+ "@elaraai/e3": "*",
44
+ "@elaraai/e3-types": "*",
45
+ "@elaraai/east": "^0.0.1-beta.14",
46
+ "yauzl": "^3.2.0",
47
+ "yazl": "^2.5.1"
48
+ },
49
+ "devDependencies": {
50
+ "@types/node": "^22.0.0",
51
+ "@types/yauzl": "^2.10.3",
52
+ "@types/yazl": "^2.4.5",
53
+ "@typescript-eslint/eslint-plugin": "^8.47.0",
54
+ "@typescript-eslint/parser": "^8.47.0",
55
+ "eslint": "^9.0.0",
56
+ "eslint-plugin-headers": "^1.3.3",
57
+ "typescript": "^5.6.0"
58
+ }
59
+ }