@elaraai/e3-core 0.0.2-beta.4 → 0.0.2-beta.40
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/README.md +25 -22
- package/dist/src/dataflow/api-compat.d.ts +90 -0
- package/dist/src/dataflow/api-compat.d.ts.map +1 -0
- package/dist/src/dataflow/api-compat.js +139 -0
- package/dist/src/dataflow/api-compat.js.map +1 -0
- package/dist/src/dataflow/index.d.ts +18 -0
- package/dist/src/dataflow/index.d.ts.map +1 -0
- package/dist/src/dataflow/index.js +23 -0
- package/dist/src/dataflow/index.js.map +1 -0
- package/dist/src/dataflow/orchestrator/LocalOrchestrator.d.ts +76 -0
- package/dist/src/dataflow/orchestrator/LocalOrchestrator.d.ts.map +1 -0
- package/dist/src/dataflow/orchestrator/LocalOrchestrator.js +695 -0
- package/dist/src/dataflow/orchestrator/LocalOrchestrator.js.map +1 -0
- package/dist/src/dataflow/orchestrator/index.d.ts +12 -0
- package/dist/src/dataflow/orchestrator/index.d.ts.map +1 -0
- package/dist/src/dataflow/orchestrator/index.js +12 -0
- package/dist/src/dataflow/orchestrator/index.js.map +1 -0
- package/dist/src/dataflow/orchestrator/interfaces.d.ts +163 -0
- package/dist/src/dataflow/orchestrator/interfaces.d.ts.map +1 -0
- package/dist/src/dataflow/orchestrator/interfaces.js +52 -0
- package/dist/src/dataflow/orchestrator/interfaces.js.map +1 -0
- package/dist/src/dataflow/state-store/FileStateStore.d.ts +67 -0
- package/dist/src/dataflow/state-store/FileStateStore.d.ts.map +1 -0
- package/dist/src/dataflow/state-store/FileStateStore.js +300 -0
- package/dist/src/dataflow/state-store/FileStateStore.js.map +1 -0
- package/dist/src/dataflow/state-store/InMemoryStateStore.d.ts +42 -0
- package/dist/src/dataflow/state-store/InMemoryStateStore.d.ts.map +1 -0
- package/dist/src/dataflow/state-store/InMemoryStateStore.js +229 -0
- package/dist/src/dataflow/state-store/InMemoryStateStore.js.map +1 -0
- package/dist/src/dataflow/state-store/index.d.ts +13 -0
- package/dist/src/dataflow/state-store/index.d.ts.map +1 -0
- package/dist/src/dataflow/state-store/index.js +13 -0
- package/dist/src/dataflow/state-store/index.js.map +1 -0
- package/dist/src/dataflow/state-store/interfaces.d.ts +159 -0
- package/dist/src/dataflow/state-store/interfaces.d.ts.map +1 -0
- package/dist/src/dataflow/state-store/interfaces.js +6 -0
- package/dist/src/dataflow/state-store/interfaces.js.map +1 -0
- package/dist/src/dataflow/steps.d.ts +222 -0
- package/dist/src/dataflow/steps.d.ts.map +1 -0
- package/dist/src/dataflow/steps.js +707 -0
- package/dist/src/dataflow/steps.js.map +1 -0
- package/dist/src/dataflow/types.d.ts +127 -0
- package/dist/src/dataflow/types.d.ts.map +1 -0
- package/dist/src/dataflow/types.js +7 -0
- package/dist/src/dataflow/types.js.map +1 -0
- package/dist/src/dataflow.d.ts +113 -38
- package/dist/src/dataflow.d.ts.map +1 -1
- package/dist/src/dataflow.js +269 -416
- package/dist/src/dataflow.js.map +1 -1
- package/dist/src/dataset-refs.d.ts +124 -0
- package/dist/src/dataset-refs.d.ts.map +1 -0
- package/dist/src/dataset-refs.js +319 -0
- package/dist/src/dataset-refs.js.map +1 -0
- package/dist/src/errors.d.ts +39 -9
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +51 -8
- package/dist/src/errors.js.map +1 -1
- package/dist/src/execution/LocalTaskRunner.d.ts +73 -0
- package/dist/src/execution/LocalTaskRunner.d.ts.map +1 -0
- package/dist/src/execution/LocalTaskRunner.js +399 -0
- package/dist/src/execution/LocalTaskRunner.js.map +1 -0
- package/dist/src/execution/MockTaskRunner.d.ts +49 -0
- package/dist/src/execution/MockTaskRunner.d.ts.map +1 -0
- package/dist/src/execution/MockTaskRunner.js +54 -0
- package/dist/src/execution/MockTaskRunner.js.map +1 -0
- package/dist/src/execution/index.d.ts +16 -0
- package/dist/src/execution/index.d.ts.map +1 -0
- package/dist/src/execution/index.js +8 -0
- package/dist/src/execution/index.js.map +1 -0
- package/dist/src/execution/interfaces.d.ts +246 -0
- package/dist/src/execution/interfaces.d.ts.map +1 -0
- package/dist/src/execution/interfaces.js +6 -0
- package/dist/src/execution/interfaces.js.map +1 -0
- package/dist/src/execution/processHelpers.d.ts +20 -0
- package/dist/src/execution/processHelpers.d.ts.map +1 -0
- package/dist/src/execution/processHelpers.js +62 -0
- package/dist/src/execution/processHelpers.js.map +1 -0
- package/dist/src/executions.d.ts +71 -104
- package/dist/src/executions.d.ts.map +1 -1
- package/dist/src/executions.js +110 -476
- package/dist/src/executions.js.map +1 -1
- package/dist/src/index.d.ts +19 -9
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +48 -18
- package/dist/src/index.js.map +1 -1
- package/dist/src/objects.d.ts +8 -51
- package/dist/src/objects.d.ts.map +1 -1
- package/dist/src/objects.js +13 -230
- package/dist/src/objects.js.map +1 -1
- package/dist/src/packages.d.ts +22 -14
- package/dist/src/packages.d.ts.map +1 -1
- package/dist/src/packages.js +134 -88
- package/dist/src/packages.js.map +1 -1
- package/dist/src/storage/in-memory/InMemoryRepoStore.d.ts +35 -0
- package/dist/src/storage/in-memory/InMemoryRepoStore.d.ts.map +1 -0
- package/dist/src/storage/in-memory/InMemoryRepoStore.js +107 -0
- package/dist/src/storage/in-memory/InMemoryRepoStore.js.map +1 -0
- package/dist/src/storage/in-memory/InMemoryStorage.d.ts +139 -0
- package/dist/src/storage/in-memory/InMemoryStorage.d.ts.map +1 -0
- package/dist/src/storage/in-memory/InMemoryStorage.js +439 -0
- package/dist/src/storage/in-memory/InMemoryStorage.js.map +1 -0
- package/dist/src/storage/in-memory/index.d.ts +12 -0
- package/dist/src/storage/in-memory/index.d.ts.map +1 -0
- package/dist/src/storage/in-memory/index.js +12 -0
- package/dist/src/storage/in-memory/index.js.map +1 -0
- package/dist/src/storage/index.d.ts +18 -0
- package/dist/src/storage/index.d.ts.map +1 -0
- package/dist/src/storage/index.js +10 -0
- package/dist/src/storage/index.js.map +1 -0
- package/dist/src/storage/interfaces.d.ts +581 -0
- package/dist/src/storage/interfaces.d.ts.map +1 -0
- package/dist/src/storage/interfaces.js +6 -0
- package/dist/src/storage/interfaces.js.map +1 -0
- package/dist/src/storage/local/LocalBackend.d.ts +56 -0
- package/dist/src/storage/local/LocalBackend.d.ts.map +1 -0
- package/dist/src/storage/local/LocalBackend.js +145 -0
- package/dist/src/storage/local/LocalBackend.js.map +1 -0
- package/dist/src/storage/local/LocalDatasetRefStore.d.ts +22 -0
- package/dist/src/storage/local/LocalDatasetRefStore.d.ts.map +1 -0
- package/dist/src/storage/local/LocalDatasetRefStore.js +118 -0
- package/dist/src/storage/local/LocalDatasetRefStore.js.map +1 -0
- package/dist/src/storage/local/LocalLockService.d.ts +111 -0
- package/dist/src/storage/local/LocalLockService.d.ts.map +1 -0
- package/dist/src/storage/local/LocalLockService.js +355 -0
- package/dist/src/storage/local/LocalLockService.js.map +1 -0
- package/dist/src/storage/local/LocalLogStore.d.ts +23 -0
- package/dist/src/storage/local/LocalLogStore.d.ts.map +1 -0
- package/dist/src/storage/local/LocalLogStore.js +66 -0
- package/dist/src/storage/local/LocalLogStore.js.map +1 -0
- package/dist/src/storage/local/LocalObjectStore.d.ts +55 -0
- package/dist/src/storage/local/LocalObjectStore.d.ts.map +1 -0
- package/dist/src/storage/local/LocalObjectStore.js +300 -0
- package/dist/src/storage/local/LocalObjectStore.js.map +1 -0
- package/dist/src/storage/local/LocalRefStore.d.ts +50 -0
- package/dist/src/storage/local/LocalRefStore.d.ts.map +1 -0
- package/dist/src/storage/local/LocalRefStore.js +337 -0
- package/dist/src/storage/local/LocalRefStore.js.map +1 -0
- package/dist/src/storage/local/LocalRepoStore.d.ts +55 -0
- package/dist/src/storage/local/LocalRepoStore.d.ts.map +1 -0
- package/dist/src/storage/local/LocalRepoStore.js +365 -0
- package/dist/src/storage/local/LocalRepoStore.js.map +1 -0
- package/dist/src/storage/local/gc.d.ts +92 -0
- package/dist/src/storage/local/gc.d.ts.map +1 -0
- package/dist/src/storage/local/gc.js +377 -0
- package/dist/src/storage/local/gc.js.map +1 -0
- package/dist/src/storage/local/index.d.ts +18 -0
- package/dist/src/storage/local/index.d.ts.map +1 -0
- package/dist/src/storage/local/index.js +18 -0
- package/dist/src/storage/local/index.js.map +1 -0
- package/dist/src/storage/local/localHelpers.d.ts +25 -0
- package/dist/src/storage/local/localHelpers.d.ts.map +1 -0
- package/dist/src/storage/local/localHelpers.js +69 -0
- package/dist/src/storage/local/localHelpers.js.map +1 -0
- package/dist/src/{repository.d.ts → storage/local/repository.d.ts} +8 -4
- package/dist/src/storage/local/repository.d.ts.map +1 -0
- package/dist/src/{repository.js → storage/local/repository.js} +31 -29
- package/dist/src/storage/local/repository.js.map +1 -0
- package/dist/src/tasks.d.ts +16 -10
- package/dist/src/tasks.d.ts.map +1 -1
- package/dist/src/tasks.js +35 -41
- package/dist/src/tasks.js.map +1 -1
- package/dist/src/test-helpers.d.ts +5 -4
- package/dist/src/test-helpers.d.ts.map +1 -1
- package/dist/src/test-helpers.js +9 -21
- package/dist/src/test-helpers.js.map +1 -1
- package/dist/src/transfer/InMemoryTransferBackend.d.ts +66 -0
- package/dist/src/transfer/InMemoryTransferBackend.d.ts.map +1 -0
- package/dist/src/transfer/InMemoryTransferBackend.js +166 -0
- package/dist/src/transfer/InMemoryTransferBackend.js.map +1 -0
- package/dist/src/transfer/index.d.ts +8 -0
- package/dist/src/transfer/index.d.ts.map +1 -0
- package/dist/src/transfer/index.js +9 -0
- package/dist/src/transfer/index.js.map +1 -0
- package/dist/src/transfer/interfaces.d.ts +103 -0
- package/dist/src/transfer/interfaces.d.ts.map +1 -0
- package/dist/src/transfer/interfaces.js +6 -0
- package/dist/src/transfer/interfaces.js.map +1 -0
- package/dist/src/transfer/types.d.ts +79 -0
- package/dist/src/transfer/types.d.ts.map +1 -0
- package/dist/src/transfer/types.js +58 -0
- package/dist/src/transfer/types.js.map +1 -0
- package/dist/src/trees.d.ts +147 -59
- package/dist/src/trees.d.ts.map +1 -1
- package/dist/src/trees.js +372 -419
- package/dist/src/trees.js.map +1 -1
- package/dist/src/uuid.d.ts +26 -0
- package/dist/src/uuid.d.ts.map +1 -0
- package/dist/src/uuid.js +80 -0
- package/dist/src/uuid.js.map +1 -0
- package/dist/src/workspaceStatus.d.ts +6 -4
- package/dist/src/workspaceStatus.d.ts.map +1 -1
- package/dist/src/workspaceStatus.js +43 -49
- package/dist/src/workspaceStatus.js.map +1 -1
- package/dist/src/workspaces.d.ts +35 -47
- package/dist/src/workspaces.d.ts.map +1 -1
- package/dist/src/workspaces.js +194 -156
- package/dist/src/workspaces.js.map +1 -1
- package/package.json +4 -4
- package/dist/src/gc.d.ts +0 -54
- package/dist/src/gc.d.ts.map +0 -1
- package/dist/src/gc.js +0 -233
- package/dist/src/gc.js.map +0 -1
- package/dist/src/repository.d.ts.map +0 -1
- package/dist/src/repository.js.map +0 -1
- package/dist/src/workspaceLock.d.ts +0 -67
- package/dist/src/workspaceLock.d.ts.map +0 -1
- package/dist/src/workspaceLock.js +0 -217
- package/dist/src/workspaceLock.js.map +0 -1
|
@@ -2,51 +2,58 @@
|
|
|
2
2
|
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
3
|
* Licensed under BSL 1.1. See LICENSE for details.
|
|
4
4
|
*/
|
|
5
|
+
/**
|
|
6
|
+
* Local filesystem repository initialization and discovery.
|
|
7
|
+
*
|
|
8
|
+
* This module handles creating and finding e3 repositories on the local
|
|
9
|
+
* filesystem. It is used by the CLI and local development tools.
|
|
10
|
+
*/
|
|
5
11
|
import * as fs from 'fs';
|
|
6
12
|
import * as path from 'path';
|
|
7
13
|
/**
|
|
8
14
|
* Initialize a new e3 repository
|
|
9
15
|
*
|
|
10
|
-
* Creates:
|
|
16
|
+
* Creates the repository directory structure:
|
|
11
17
|
* - objects/
|
|
12
18
|
* - packages/
|
|
13
19
|
* - executions/
|
|
14
20
|
* - workspaces/
|
|
15
21
|
*
|
|
22
|
+
* The repository IS the specified directory - subdirectories are created directly within it.
|
|
23
|
+
*
|
|
16
24
|
* Pure business logic - no UI dependencies
|
|
17
25
|
*/
|
|
18
26
|
export function repoInit(repoPath) {
|
|
19
27
|
const targetPath = path.resolve(repoPath);
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
if (fs.existsSync(e3Dir)) {
|
|
28
|
+
// Check if directory already is a valid repository
|
|
29
|
+
if (isValidRepository(targetPath)) {
|
|
23
30
|
return {
|
|
24
31
|
success: false,
|
|
25
|
-
|
|
32
|
+
repoPath: targetPath,
|
|
26
33
|
alreadyExists: true,
|
|
27
|
-
error: new Error(`e3 repository already exists at ${
|
|
34
|
+
error: new Error(`e3 repository already exists at ${targetPath}`),
|
|
28
35
|
};
|
|
29
36
|
}
|
|
30
37
|
try {
|
|
31
|
-
// Create
|
|
32
|
-
fs.mkdirSync(
|
|
38
|
+
// Create the repository directory if it doesn't exist
|
|
39
|
+
fs.mkdirSync(targetPath, { recursive: true });
|
|
33
40
|
// Create objects directory (content-addressed storage)
|
|
34
|
-
fs.mkdirSync(path.join(
|
|
41
|
+
fs.mkdirSync(path.join(targetPath, 'objects'), { recursive: true });
|
|
35
42
|
// Create packages directory (package refs: packages/<name>/<version> -> hash)
|
|
36
|
-
fs.mkdirSync(path.join(
|
|
43
|
+
fs.mkdirSync(path.join(targetPath, 'packages'), { recursive: true });
|
|
37
44
|
// Create executions directory (execution cache: executions/<hash>/output -> hash)
|
|
38
|
-
fs.mkdirSync(path.join(
|
|
45
|
+
fs.mkdirSync(path.join(targetPath, 'executions'), { recursive: true });
|
|
39
46
|
// Create workspaces directory (workspace state)
|
|
40
|
-
fs.mkdirSync(path.join(
|
|
47
|
+
fs.mkdirSync(path.join(targetPath, 'workspaces'), { recursive: true });
|
|
41
48
|
return {
|
|
42
49
|
success: true,
|
|
43
|
-
|
|
50
|
+
repoPath: targetPath,
|
|
44
51
|
};
|
|
45
52
|
}
|
|
46
53
|
catch (error) {
|
|
47
54
|
return {
|
|
48
55
|
success: false,
|
|
49
|
-
|
|
56
|
+
repoPath: targetPath,
|
|
50
57
|
error: error instanceof Error ? error : new Error(String(error)),
|
|
51
58
|
};
|
|
52
59
|
}
|
|
@@ -62,9 +69,11 @@ function isValidRepository(repoPath) {
|
|
|
62
69
|
/**
|
|
63
70
|
* Find the e3 repository directory
|
|
64
71
|
*
|
|
65
|
-
*
|
|
72
|
+
* Checks:
|
|
66
73
|
* 1. E3_REPO environment variable
|
|
67
|
-
* 2.
|
|
74
|
+
* 2. The provided startPath (if given)
|
|
75
|
+
*
|
|
76
|
+
* Returns null if no valid repository is found.
|
|
68
77
|
*/
|
|
69
78
|
export function repoFind(startPath) {
|
|
70
79
|
// 1. Check E3_REPO environment variable
|
|
@@ -74,19 +83,12 @@ export function repoFind(startPath) {
|
|
|
74
83
|
return repoPath;
|
|
75
84
|
}
|
|
76
85
|
}
|
|
77
|
-
// 2. Check
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
return e3Dir;
|
|
83
|
-
}
|
|
84
|
-
const parentDir = path.dirname(currentDir);
|
|
85
|
-
if (parentDir === currentDir) {
|
|
86
|
-
// Reached root
|
|
87
|
-
break;
|
|
86
|
+
// 2. Check the provided path
|
|
87
|
+
if (startPath !== undefined) {
|
|
88
|
+
const repoPath = path.resolve(startPath);
|
|
89
|
+
if (fs.existsSync(repoPath) && isValidRepository(repoPath)) {
|
|
90
|
+
return repoPath;
|
|
88
91
|
}
|
|
89
|
-
currentDir = parentDir;
|
|
90
92
|
}
|
|
91
93
|
return null;
|
|
92
94
|
}
|
|
@@ -96,7 +98,7 @@ export function repoFind(startPath) {
|
|
|
96
98
|
export function repoGet(repoPath) {
|
|
97
99
|
const repo = repoFind(repoPath);
|
|
98
100
|
if (!repo) {
|
|
99
|
-
throw new Error('e3 repository not found. Run `e3
|
|
101
|
+
throw new Error('e3 repository not found. Run `e3 repo create` to create one.');
|
|
100
102
|
}
|
|
101
103
|
return repo;
|
|
102
104
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository.js","sourceRoot":"","sources":["../../../../src/storage/local/repository.ts"],"names":[],"mappings":"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"}
|
package/dist/src/tasks.d.ts
CHANGED
|
@@ -3,20 +3,23 @@
|
|
|
3
3
|
* Licensed under BSL 1.1. See LICENSE for details.
|
|
4
4
|
*/
|
|
5
5
|
import { type TaskObject } from '@elaraai/e3-types';
|
|
6
|
+
import type { StorageBackend } from './storage/interfaces.js';
|
|
6
7
|
/**
|
|
7
8
|
* List task names in a package.
|
|
8
9
|
*
|
|
9
|
-
* @param
|
|
10
|
+
* @param storage - Storage backend
|
|
11
|
+
* @param repo - Repository identifier
|
|
10
12
|
* @param name - Package name
|
|
11
13
|
* @param version - Package version
|
|
12
14
|
* @returns Array of task names
|
|
13
15
|
* @throws If package not found
|
|
14
16
|
*/
|
|
15
|
-
export declare function packageListTasks(
|
|
17
|
+
export declare function packageListTasks(storage: StorageBackend, repo: string, name: string, version: string): Promise<string[]>;
|
|
16
18
|
/**
|
|
17
19
|
* Get task details from a package.
|
|
18
20
|
*
|
|
19
|
-
* @param
|
|
21
|
+
* @param storage - Storage backend
|
|
22
|
+
* @param repo - Repository identifier
|
|
20
23
|
* @param name - Package name
|
|
21
24
|
* @param version - Package version
|
|
22
25
|
* @param taskName - Name of the task
|
|
@@ -24,22 +27,24 @@ export declare function packageListTasks(repoPath: string, name: string, version
|
|
|
24
27
|
* @throws {PackageNotFoundError} If package not found
|
|
25
28
|
* @throws {TaskNotFoundError} If task not found in package
|
|
26
29
|
*/
|
|
27
|
-
export declare function packageGetTask(
|
|
30
|
+
export declare function packageGetTask(storage: StorageBackend, repo: string, name: string, version: string, taskName: string): Promise<TaskObject>;
|
|
28
31
|
/**
|
|
29
32
|
* List task names in a workspace.
|
|
30
33
|
*
|
|
31
34
|
* Tasks are defined by the deployed package.
|
|
32
35
|
*
|
|
33
|
-
* @param
|
|
36
|
+
* @param storage - Storage backend
|
|
37
|
+
* @param repo - Repository identifier
|
|
34
38
|
* @param ws - Workspace name
|
|
35
39
|
* @returns Array of task names
|
|
36
40
|
* @throws If workspace not found or not deployed
|
|
37
41
|
*/
|
|
38
|
-
export declare function workspaceListTasks(
|
|
42
|
+
export declare function workspaceListTasks(storage: StorageBackend, repo: string, ws: string): Promise<string[]>;
|
|
39
43
|
/**
|
|
40
44
|
* Get task hash from a workspace.
|
|
41
45
|
*
|
|
42
|
-
* @param
|
|
46
|
+
* @param storage - Storage backend
|
|
47
|
+
* @param repo - Repository identifier
|
|
43
48
|
* @param ws - Workspace name
|
|
44
49
|
* @param taskName - Name of the task
|
|
45
50
|
* @returns The hash of the TaskObject
|
|
@@ -47,17 +52,18 @@ export declare function workspaceListTasks(repoPath: string, ws: string): Promis
|
|
|
47
52
|
* @throws {WorkspaceNotDeployedError} If workspace not deployed
|
|
48
53
|
* @throws {TaskNotFoundError} If task not found
|
|
49
54
|
*/
|
|
50
|
-
export declare function workspaceGetTaskHash(
|
|
55
|
+
export declare function workspaceGetTaskHash(storage: StorageBackend, repo: string, ws: string, taskName: string): Promise<string>;
|
|
51
56
|
/**
|
|
52
57
|
* Get task details from a workspace.
|
|
53
58
|
*
|
|
54
59
|
* Tasks are defined by the deployed package.
|
|
55
60
|
*
|
|
56
|
-
* @param
|
|
61
|
+
* @param storage - Storage backend
|
|
62
|
+
* @param repo - Repository identifier
|
|
57
63
|
* @param ws - Workspace name
|
|
58
64
|
* @param taskName - Name of the task
|
|
59
65
|
* @returns The TaskObject containing runner, inputs, and output
|
|
60
66
|
* @throws If workspace not deployed or task not found
|
|
61
67
|
*/
|
|
62
|
-
export declare function workspaceGetTask(
|
|
68
|
+
export declare function workspaceGetTask(storage: StorageBackend, repo: string, ws: string, taskName: string): Promise<TaskObject>;
|
|
63
69
|
//# sourceMappingURL=tasks.d.ts.map
|
package/dist/src/tasks.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/tasks.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH,OAAO,EAIL,KAAK,UAAU,EAChB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/tasks.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH,OAAO,EAIL,KAAK,UAAU,EAChB,MAAM,mBAAmB,CAAC;AAO3B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAM9D;;;;;;;;;GASG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,EAAE,CAAC,CAGnB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,UAAU,CAAC,CAWrB;AAoCD;;;;;;;;;;GAUG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,MAAM,EAAE,CAAC,CAGnB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CASjB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,UAAU,CAAC,CAKrB"}
|
package/dist/src/tasks.js
CHANGED
|
@@ -14,31 +14,30 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import { decodeBeast2For } from '@elaraai/east';
|
|
16
16
|
import { PackageObjectType, TaskObjectType, WorkspaceStateType, } from '@elaraai/e3-types';
|
|
17
|
-
import { objectRead } from './objects.js';
|
|
18
17
|
import { packageRead } from './packages.js';
|
|
19
|
-
import { TaskNotFoundError, WorkspaceNotFoundError, WorkspaceNotDeployedError,
|
|
20
|
-
import * as fs from 'fs/promises';
|
|
21
|
-
import * as path from 'path';
|
|
18
|
+
import { TaskNotFoundError, WorkspaceNotFoundError, WorkspaceNotDeployedError, } from './errors.js';
|
|
22
19
|
// =============================================================================
|
|
23
20
|
// Package Task Operations
|
|
24
21
|
// =============================================================================
|
|
25
22
|
/**
|
|
26
23
|
* List task names in a package.
|
|
27
24
|
*
|
|
28
|
-
* @param
|
|
25
|
+
* @param storage - Storage backend
|
|
26
|
+
* @param repo - Repository identifier
|
|
29
27
|
* @param name - Package name
|
|
30
28
|
* @param version - Package version
|
|
31
29
|
* @returns Array of task names
|
|
32
30
|
* @throws If package not found
|
|
33
31
|
*/
|
|
34
|
-
export async function packageListTasks(
|
|
35
|
-
const pkg = await packageRead(
|
|
32
|
+
export async function packageListTasks(storage, repo, name, version) {
|
|
33
|
+
const pkg = await packageRead(storage, repo, name, version);
|
|
36
34
|
return Array.from(pkg.tasks.keys());
|
|
37
35
|
}
|
|
38
36
|
/**
|
|
39
37
|
* Get task details from a package.
|
|
40
38
|
*
|
|
41
|
-
* @param
|
|
39
|
+
* @param storage - Storage backend
|
|
40
|
+
* @param repo - Repository identifier
|
|
42
41
|
* @param name - Package name
|
|
43
42
|
* @param version - Package version
|
|
44
43
|
* @param taskName - Name of the task
|
|
@@ -46,13 +45,13 @@ export async function packageListTasks(repoPath, name, version) {
|
|
|
46
45
|
* @throws {PackageNotFoundError} If package not found
|
|
47
46
|
* @throws {TaskNotFoundError} If task not found in package
|
|
48
47
|
*/
|
|
49
|
-
export async function packageGetTask(
|
|
50
|
-
const pkg = await packageRead(
|
|
48
|
+
export async function packageGetTask(storage, repo, name, version, taskName) {
|
|
49
|
+
const pkg = await packageRead(storage, repo, name, version);
|
|
51
50
|
const taskHash = pkg.tasks.get(taskName);
|
|
52
51
|
if (!taskHash) {
|
|
53
52
|
throw new TaskNotFoundError(taskName);
|
|
54
53
|
}
|
|
55
|
-
const taskData = await
|
|
54
|
+
const taskData = await storage.objects.read(repo, taskHash);
|
|
56
55
|
const decoder = decodeBeast2For(TaskObjectType);
|
|
57
56
|
return decoder(Buffer.from(taskData));
|
|
58
57
|
}
|
|
@@ -60,35 +59,27 @@ export async function packageGetTask(repoPath, name, version, taskName) {
|
|
|
60
59
|
// Workspace Task Operations
|
|
61
60
|
// =============================================================================
|
|
62
61
|
/**
|
|
63
|
-
* Read workspace state from
|
|
62
|
+
* Read workspace state from storage.
|
|
64
63
|
* @throws {WorkspaceNotFoundError} If workspace doesn't exist
|
|
65
64
|
* @throws {WorkspaceNotDeployedError} If workspace exists but not deployed
|
|
66
65
|
*/
|
|
67
|
-
async function readWorkspaceState(
|
|
68
|
-
const
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
if (data.length === 0) {
|
|
72
|
-
throw new WorkspaceNotDeployedError(ws);
|
|
73
|
-
}
|
|
74
|
-
const decoder = decodeBeast2For(WorkspaceStateType);
|
|
75
|
-
return decoder(data);
|
|
66
|
+
async function readWorkspaceState(storage, repo, ws) {
|
|
67
|
+
const data = await storage.refs.workspaceRead(repo, ws);
|
|
68
|
+
if (data === null) {
|
|
69
|
+
throw new WorkspaceNotFoundError(ws);
|
|
76
70
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
throw err;
|
|
80
|
-
if (isNotFoundError(err)) {
|
|
81
|
-
throw new WorkspaceNotFoundError(ws);
|
|
82
|
-
}
|
|
83
|
-
throw err;
|
|
71
|
+
if (data.length === 0) {
|
|
72
|
+
throw new WorkspaceNotDeployedError(ws);
|
|
84
73
|
}
|
|
74
|
+
const decoder = decodeBeast2For(WorkspaceStateType);
|
|
75
|
+
return decoder(Buffer.from(data));
|
|
85
76
|
}
|
|
86
77
|
/**
|
|
87
78
|
* Get the deployed package object for a workspace.
|
|
88
79
|
*/
|
|
89
|
-
async function getWorkspacePackageObject(
|
|
90
|
-
const state = await readWorkspaceState(
|
|
91
|
-
const pkgData = await
|
|
80
|
+
async function getWorkspacePackageObject(storage, repo, ws) {
|
|
81
|
+
const state = await readWorkspaceState(storage, repo, ws);
|
|
82
|
+
const pkgData = await storage.objects.read(repo, state.packageHash);
|
|
92
83
|
const decoder = decodeBeast2For(PackageObjectType);
|
|
93
84
|
return decoder(Buffer.from(pkgData));
|
|
94
85
|
}
|
|
@@ -97,19 +88,21 @@ async function getWorkspacePackageObject(repoPath, ws) {
|
|
|
97
88
|
*
|
|
98
89
|
* Tasks are defined by the deployed package.
|
|
99
90
|
*
|
|
100
|
-
* @param
|
|
91
|
+
* @param storage - Storage backend
|
|
92
|
+
* @param repo - Repository identifier
|
|
101
93
|
* @param ws - Workspace name
|
|
102
94
|
* @returns Array of task names
|
|
103
95
|
* @throws If workspace not found or not deployed
|
|
104
96
|
*/
|
|
105
|
-
export async function workspaceListTasks(
|
|
106
|
-
const pkg = await getWorkspacePackageObject(
|
|
97
|
+
export async function workspaceListTasks(storage, repo, ws) {
|
|
98
|
+
const pkg = await getWorkspacePackageObject(storage, repo, ws);
|
|
107
99
|
return Array.from(pkg.tasks.keys());
|
|
108
100
|
}
|
|
109
101
|
/**
|
|
110
102
|
* Get task hash from a workspace.
|
|
111
103
|
*
|
|
112
|
-
* @param
|
|
104
|
+
* @param storage - Storage backend
|
|
105
|
+
* @param repo - Repository identifier
|
|
113
106
|
* @param ws - Workspace name
|
|
114
107
|
* @param taskName - Name of the task
|
|
115
108
|
* @returns The hash of the TaskObject
|
|
@@ -117,8 +110,8 @@ export async function workspaceListTasks(repoPath, ws) {
|
|
|
117
110
|
* @throws {WorkspaceNotDeployedError} If workspace not deployed
|
|
118
111
|
* @throws {TaskNotFoundError} If task not found
|
|
119
112
|
*/
|
|
120
|
-
export async function workspaceGetTaskHash(
|
|
121
|
-
const pkg = await getWorkspacePackageObject(
|
|
113
|
+
export async function workspaceGetTaskHash(storage, repo, ws, taskName) {
|
|
114
|
+
const pkg = await getWorkspacePackageObject(storage, repo, ws);
|
|
122
115
|
const taskHash = pkg.tasks.get(taskName);
|
|
123
116
|
if (!taskHash) {
|
|
124
117
|
throw new TaskNotFoundError(taskName);
|
|
@@ -130,15 +123,16 @@ export async function workspaceGetTaskHash(repoPath, ws, taskName) {
|
|
|
130
123
|
*
|
|
131
124
|
* Tasks are defined by the deployed package.
|
|
132
125
|
*
|
|
133
|
-
* @param
|
|
126
|
+
* @param storage - Storage backend
|
|
127
|
+
* @param repo - Repository identifier
|
|
134
128
|
* @param ws - Workspace name
|
|
135
129
|
* @param taskName - Name of the task
|
|
136
130
|
* @returns The TaskObject containing runner, inputs, and output
|
|
137
131
|
* @throws If workspace not deployed or task not found
|
|
138
132
|
*/
|
|
139
|
-
export async function workspaceGetTask(
|
|
140
|
-
const taskHash = await workspaceGetTaskHash(
|
|
141
|
-
const taskData = await
|
|
133
|
+
export async function workspaceGetTask(storage, repo, ws, taskName) {
|
|
134
|
+
const taskHash = await workspaceGetTaskHash(storage, repo, ws, taskName);
|
|
135
|
+
const taskData = await storage.objects.read(repo, taskHash);
|
|
142
136
|
const decoder = decodeBeast2For(TaskObjectType);
|
|
143
137
|
return decoder(Buffer.from(taskData));
|
|
144
138
|
}
|
package/dist/src/tasks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/tasks.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;GASG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,kBAAkB,GAEnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/tasks.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
3
|
* Licensed under BSL 1.1. See LICENSE for details.
|
|
4
4
|
*/
|
|
5
|
+
export { InMemoryStorage } from './storage/in-memory/InMemoryStorage.js';
|
|
5
6
|
/**
|
|
6
7
|
* Creates a temporary directory for testing
|
|
7
8
|
* @returns Path to temporary directory
|
|
@@ -14,14 +15,14 @@ export declare function createTempDir(): string;
|
|
|
14
15
|
export declare function removeTempDir(dir: string): void;
|
|
15
16
|
/**
|
|
16
17
|
* Creates a temporary e3 repository for testing
|
|
17
|
-
* @returns Path to
|
|
18
|
+
* @returns Path to the repository directory
|
|
18
19
|
*/
|
|
19
20
|
export declare function createTestRepo(): string;
|
|
20
21
|
/**
|
|
21
|
-
* Remove a test repository
|
|
22
|
-
* @param
|
|
22
|
+
* Remove a test repository
|
|
23
|
+
* @param repoPath Path to repository directory
|
|
23
24
|
*/
|
|
24
|
-
export declare function removeTestRepo(
|
|
25
|
+
export declare function removeTestRepo(repoPath: string): void;
|
|
25
26
|
/**
|
|
26
27
|
* Read all entries from a zip file
|
|
27
28
|
* @param zipPath Path to zip file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-helpers.d.ts","sourceRoot":"","sources":["../../src/test-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"test-helpers.d.ts","sourceRoot":"","sources":["../../src/test-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AAEzE;;;GAGG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE/C;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAOvC;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAErD;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAgClF;AAED;;;;;;;;GAQG;AACH,wBAAsB,QAAQ,CAC5B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAoC5C"}
|
package/dist/src/test-helpers.js
CHANGED
|
@@ -10,7 +10,9 @@ import { mkdtempSync, rmSync } from 'node:fs';
|
|
|
10
10
|
import { tmpdir } from 'node:os';
|
|
11
11
|
import { join } from 'node:path';
|
|
12
12
|
import yauzl from 'yauzl';
|
|
13
|
-
import { repoInit } from './repository.js';
|
|
13
|
+
import { repoInit } from './storage/local/repository.js';
|
|
14
|
+
// Re-export InMemoryStorage for test consumers
|
|
15
|
+
export { InMemoryStorage } from './storage/in-memory/InMemoryStorage.js';
|
|
14
16
|
/**
|
|
15
17
|
* Creates a temporary directory for testing
|
|
16
18
|
* @returns Path to temporary directory
|
|
@@ -25,13 +27,9 @@ export function createTempDir() {
|
|
|
25
27
|
export function removeTempDir(dir) {
|
|
26
28
|
rmSync(dir, { recursive: true, force: true });
|
|
27
29
|
}
|
|
28
|
-
/**
|
|
29
|
-
* Track parent directories for cleanup
|
|
30
|
-
*/
|
|
31
|
-
const parentDirs = new Map();
|
|
32
30
|
/**
|
|
33
31
|
* Creates a temporary e3 repository for testing
|
|
34
|
-
* @returns Path to
|
|
32
|
+
* @returns Path to the repository directory
|
|
35
33
|
*/
|
|
36
34
|
export function createTestRepo() {
|
|
37
35
|
const dir = createTempDir();
|
|
@@ -39,24 +37,14 @@ export function createTestRepo() {
|
|
|
39
37
|
if (!result.success) {
|
|
40
38
|
throw new Error(`Failed to create test repository: ${result.error?.message}`);
|
|
41
39
|
}
|
|
42
|
-
|
|
43
|
-
parentDirs.set(result.e3Dir, dir);
|
|
44
|
-
return result.e3Dir;
|
|
40
|
+
return result.repoPath;
|
|
45
41
|
}
|
|
46
42
|
/**
|
|
47
|
-
* Remove a test repository
|
|
48
|
-
* @param
|
|
43
|
+
* Remove a test repository
|
|
44
|
+
* @param repoPath Path to repository directory
|
|
49
45
|
*/
|
|
50
|
-
export function removeTestRepo(
|
|
51
|
-
|
|
52
|
-
if (parentDir) {
|
|
53
|
-
removeTempDir(parentDir);
|
|
54
|
-
parentDirs.delete(e3Dir);
|
|
55
|
-
}
|
|
56
|
-
else {
|
|
57
|
-
// Fallback: remove the .e3 directory itself
|
|
58
|
-
removeTempDir(e3Dir);
|
|
59
|
-
}
|
|
46
|
+
export function removeTestRepo(repoPath) {
|
|
47
|
+
removeTempDir(repoPath);
|
|
60
48
|
}
|
|
61
49
|
/**
|
|
62
50
|
* Read all entries from a zip file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-helpers.js","sourceRoot":"","sources":["../../src/test-helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"test-helpers.js","sourceRoot":"","sources":["../../src/test-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
|
+
* Licensed under BSL 1.1. See LICENSE for details.
|
|
4
|
+
*/
|
|
5
|
+
import type { TransferBackend, DatasetUploadStore, DatasetDownloadStore, PackageImportStore, PackageExportStore } from './interfaces.js';
|
|
6
|
+
import type { DatasetUpload, PackageImport, PackageExport } from './types.js';
|
|
7
|
+
declare class InMemoryDatasetUploadStore implements DatasetUploadStore {
|
|
8
|
+
private readonly baseUrl;
|
|
9
|
+
private readonly records;
|
|
10
|
+
constructor(baseUrl: string);
|
|
11
|
+
create(id: string, record: DatasetUpload): Promise<void>;
|
|
12
|
+
get(id: string): Promise<DatasetUpload | null>;
|
|
13
|
+
delete(id: string): Promise<void>;
|
|
14
|
+
getUploadUrl(id: string, _repo: string, _hash: string): Promise<string>;
|
|
15
|
+
commitObject(_repo: string, _hash: string, uploadId: string): Promise<void>;
|
|
16
|
+
clear(): void;
|
|
17
|
+
}
|
|
18
|
+
declare class InMemoryDatasetDownloadStore implements DatasetDownloadStore {
|
|
19
|
+
private readonly baseUrl;
|
|
20
|
+
private readonly records;
|
|
21
|
+
constructor(baseUrl: string);
|
|
22
|
+
getDownloadUrl(repo: string, hash: string): Promise<string>;
|
|
23
|
+
get(id: string): Promise<{
|
|
24
|
+
repo: string;
|
|
25
|
+
hash: string;
|
|
26
|
+
} | null>;
|
|
27
|
+
delete(id: string): Promise<void>;
|
|
28
|
+
clear(): void;
|
|
29
|
+
}
|
|
30
|
+
declare class InMemoryPackageImportStore implements PackageImportStore {
|
|
31
|
+
private readonly baseUrl;
|
|
32
|
+
private readonly records;
|
|
33
|
+
constructor(baseUrl: string);
|
|
34
|
+
create(id: string, record: PackageImport): Promise<void>;
|
|
35
|
+
get(id: string): Promise<PackageImport | null>;
|
|
36
|
+
updateStatus(id: string, status: PackageImport['status']): Promise<void>;
|
|
37
|
+
delete(id: string): Promise<void>;
|
|
38
|
+
getUploadUrl(id: string, _repo: string): Promise<string>;
|
|
39
|
+
execute(id: string, _repo: string): Promise<void>;
|
|
40
|
+
clear(): void;
|
|
41
|
+
}
|
|
42
|
+
declare class InMemoryPackageExportStore implements PackageExportStore {
|
|
43
|
+
private readonly baseUrl;
|
|
44
|
+
private readonly records;
|
|
45
|
+
constructor(baseUrl: string);
|
|
46
|
+
create(id: string, record: PackageExport): Promise<void>;
|
|
47
|
+
get(id: string): Promise<PackageExport | null>;
|
|
48
|
+
updateStatus(id: string, status: PackageExport['status']): Promise<void>;
|
|
49
|
+
delete(id: string): Promise<void>;
|
|
50
|
+
getDownloadUrl(id: string, _repo: string): Promise<string>;
|
|
51
|
+
execute(id: string, _repo: string): Promise<void>;
|
|
52
|
+
clear(): void;
|
|
53
|
+
}
|
|
54
|
+
export interface InMemoryTransferBackendOptions {
|
|
55
|
+
baseUrl?: string;
|
|
56
|
+
}
|
|
57
|
+
export declare class InMemoryTransferBackend implements TransferBackend {
|
|
58
|
+
readonly datasetUpload: InMemoryDatasetUploadStore;
|
|
59
|
+
readonly datasetDownload: InMemoryDatasetDownloadStore;
|
|
60
|
+
readonly packageImport: InMemoryPackageImportStore;
|
|
61
|
+
readonly packageExport: InMemoryPackageExportStore;
|
|
62
|
+
constructor(options: InMemoryTransferBackendOptions);
|
|
63
|
+
clear(): void;
|
|
64
|
+
}
|
|
65
|
+
export {};
|
|
66
|
+
//# sourceMappingURL=InMemoryTransferBackend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InMemoryTransferBackend.d.ts","sourceRoot":"","sources":["../../../src/transfer/InMemoryTransferBackend.ts"],"names":[],"mappings":"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"}
|