@elaraai/e3-core 0.0.2-beta.8 → 1.0.0
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/LICENSE.md +4 -0
- package/README.md +74 -35
- 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/api-compat.spec.d.ts +6 -0
- package/dist/src/dataflow/api-compat.spec.d.ts.map +1 -0
- package/dist/src/dataflow/api-compat.spec.js +182 -0
- package/dist/src/dataflow/api-compat.spec.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 +729 -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/InMemoryStateStore.spec.d.ts +6 -0
- package/dist/src/dataflow/state-store/InMemoryStateStore.spec.d.ts.map +1 -0
- package/dist/src/dataflow/state-store/InMemoryStateStore.spec.js +114 -0
- package/dist/src/dataflow/state-store/InMemoryStateStore.spec.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/steps.spec.d.ts +6 -0
- package/dist/src/dataflow/steps.spec.d.ts.map +1 -0
- package/dist/src/dataflow/steps.spec.js +343 -0
- package/dist/src/dataflow/steps.spec.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-orchestration.spec.d.ts +6 -0
- package/dist/src/dataflow-orchestration.spec.d.ts.map +1 -0
- package/dist/src/dataflow-orchestration.spec.js +1025 -0
- package/dist/src/dataflow-orchestration.spec.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/dataflow.spec.d.ts +6 -0
- package/dist/src/dataflow.spec.d.ts.map +1 -0
- package/dist/src/dataflow.spec.js +663 -0
- package/dist/src/dataflow.spec.js.map +1 -0
- 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/errors.spec.d.ts +6 -0
- package/dist/src/errors.spec.d.ts.map +1 -0
- package/dist/src/errors.spec.js +276 -0
- package/dist/src/errors.spec.js.map +1 -0
- 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 +113 -481
- package/dist/src/executions.js.map +1 -1
- package/dist/src/executions.spec.d.ts +6 -0
- package/dist/src/executions.spec.d.ts.map +1 -0
- package/dist/src/executions.spec.js +387 -0
- package/dist/src/executions.spec.js.map +1 -0
- package/dist/src/formats.d.ts +18 -2
- package/dist/src/formats.d.ts.map +1 -1
- package/dist/src/formats.js +34 -2
- package/dist/src/formats.js.map +1 -1
- package/dist/src/gc.spec.d.ts +6 -0
- package/dist/src/gc.spec.d.ts.map +1 -0
- package/dist/src/gc.spec.js +512 -0
- package/dist/src/gc.spec.js.map +1 -0
- package/dist/src/index.d.ts +20 -10
- 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 +7 -53
- package/dist/src/objects.d.ts.map +1 -1
- package/dist/src/objects.js +13 -232
- package/dist/src/objects.js.map +1 -1
- package/dist/src/objects.spec.d.ts +6 -0
- package/dist/src/objects.spec.d.ts.map +1 -0
- package/dist/src/objects.spec.js +247 -0
- package/dist/src/objects.spec.js.map +1 -0
- package/dist/src/packages.d.ts +41 -14
- package/dist/src/packages.d.ts.map +1 -1
- package/dist/src/packages.js +151 -89
- package/dist/src/packages.js.map +1 -1
- package/dist/src/packages.spec.d.ts +6 -0
- package/dist/src/packages.spec.d.ts.map +1 -0
- package/dist/src/packages.spec.js +324 -0
- package/dist/src/packages.spec.js.map +1 -0
- 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/InMemoryRepoStore.spec.d.ts +6 -0
- package/dist/src/storage/in-memory/InMemoryRepoStore.spec.d.ts.map +1 -0
- package/dist/src/storage/in-memory/InMemoryRepoStore.spec.js +187 -0
- package/dist/src/storage/in-memory/InMemoryRepoStore.spec.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 +364 -0
- package/dist/src/storage/local/LocalLockService.js.map +1 -0
- package/dist/src/storage/local/LocalLockService.spec.d.ts +6 -0
- package/dist/src/storage/local/LocalLockService.spec.d.ts.map +1 -0
- package/dist/src/storage/local/LocalLockService.spec.js +148 -0
- package/dist/src/storage/local/LocalLockService.spec.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/LocalRepoStore.spec.d.ts +6 -0
- package/dist/src/storage/local/LocalRepoStore.spec.d.ts.map +1 -0
- package/dist/src/storage/local/LocalRepoStore.spec.js +255 -0
- package/dist/src/storage/local/LocalRepoStore.spec.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/storage/local/repository.spec.d.ts +6 -0
- package/dist/src/storage/local/repository.spec.d.ts.map +1 -0
- package/dist/src/storage/local/repository.spec.js +186 -0
- package/dist/src/storage/local/repository.spec.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/tasks.spec.d.ts +6 -0
- package/dist/src/tasks.spec.d.ts.map +1 -0
- package/dist/src/tasks.spec.js +105 -0
- package/dist/src/tasks.spec.js.map +1 -0
- 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 +75 -0
- package/dist/src/transfer/InMemoryTransferBackend.d.ts.map +1 -0
- package/dist/src/transfer/InMemoryTransferBackend.js +211 -0
- package/dist/src/transfer/InMemoryTransferBackend.js.map +1 -0
- package/dist/src/transfer/index.d.ts +9 -0
- package/dist/src/transfer/index.d.ts.map +1 -0
- package/dist/src/transfer/index.js +11 -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/process.d.ts +55 -0
- package/dist/src/transfer/process.d.ts.map +1 -0
- package/dist/src/transfer/process.js +144 -0
- package/dist/src/transfer/process.js.map +1 -0
- package/dist/src/transfer/types.d.ts +106 -0
- package/dist/src/transfer/types.d.ts.map +1 -0
- package/dist/src/transfer/types.js +61 -0
- package/dist/src/transfer/types.js.map +1 -0
- package/dist/src/trees.d.ts +102 -63
- package/dist/src/trees.d.ts.map +1 -1
- package/dist/src/trees.js +319 -479
- package/dist/src/trees.js.map +1 -1
- package/dist/src/trees.spec.d.ts +6 -0
- package/dist/src/trees.spec.d.ts.map +1 -0
- package/dist/src/trees.spec.js +635 -0
- package/dist/src/trees.spec.js.map +1 -0
- 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 +46 -60
- package/dist/src/workspaceStatus.js.map +1 -1
- package/dist/src/workspaces.d.ts +46 -47
- package/dist/src/workspaces.d.ts.map +1 -1
- package/dist/src/workspaces.js +281 -221
- package/dist/src/workspaces.js.map +1 -1
- package/dist/src/workspaces.spec.d.ts +6 -0
- package/dist/src/workspaces.spec.d.ts.map +1 -0
- package/dist/src/workspaces.spec.js +273 -0
- package/dist/src/workspaces.spec.js.map +1 -0
- package/package.json +15 -15
- 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
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
|
+
* Licensed under BSL 1.1. See LICENSE for details.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Tests for packages.ts
|
|
7
|
+
*/
|
|
8
|
+
import { describe, it, beforeEach, afterEach } from 'node:test';
|
|
9
|
+
import assert from 'node:assert';
|
|
10
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
11
|
+
import { join } from 'node:path';
|
|
12
|
+
import { StringType, IntegerType, East } from '@elaraai/east';
|
|
13
|
+
import e3 from '@elaraai/e3';
|
|
14
|
+
import { packageImport, packageExport, packageRemove, packageList, packageResolve, packageRead, } from './packages.js';
|
|
15
|
+
import { objectRead } from './storage/local/LocalObjectStore.js';
|
|
16
|
+
import { PackageNotFoundError } from './errors.js';
|
|
17
|
+
import { createTestRepo, removeTestRepo, createTempDir, removeTempDir, zipEqual } from './test-helpers.js';
|
|
18
|
+
import { LocalStorage } from './storage/local/index.js';
|
|
19
|
+
describe('packages', () => {
|
|
20
|
+
let testRepo;
|
|
21
|
+
let tempDir;
|
|
22
|
+
let storage;
|
|
23
|
+
beforeEach(() => {
|
|
24
|
+
testRepo = createTestRepo();
|
|
25
|
+
tempDir = createTempDir();
|
|
26
|
+
storage = new LocalStorage();
|
|
27
|
+
});
|
|
28
|
+
afterEach(() => {
|
|
29
|
+
removeTestRepo(testRepo);
|
|
30
|
+
removeTempDir(tempDir);
|
|
31
|
+
});
|
|
32
|
+
describe('packageImport', () => {
|
|
33
|
+
it('imports empty package', async () => {
|
|
34
|
+
// Create and export a package using e3 SDK
|
|
35
|
+
const pkg = e3.package('empty-pkg', '1.0.0');
|
|
36
|
+
const zipPath = join(tempDir, 'empty.zip');
|
|
37
|
+
await e3.export(pkg, zipPath);
|
|
38
|
+
// Import into repository
|
|
39
|
+
const result = await packageImport(storage, testRepo, zipPath);
|
|
40
|
+
assert.strictEqual(result.name, 'empty-pkg');
|
|
41
|
+
assert.strictEqual(result.version, '1.0.0');
|
|
42
|
+
assert.strictEqual(typeof result.packageHash, 'string');
|
|
43
|
+
assert.strictEqual(result.packageHash.length, 64);
|
|
44
|
+
assert.ok(result.objectCount >= 1, `Expected at least 1 object, got ${result.objectCount}`);
|
|
45
|
+
});
|
|
46
|
+
it('imports package with input dataset', async () => {
|
|
47
|
+
const myInput = e3.input('greeting', StringType, 'hello');
|
|
48
|
+
const pkg = e3.package('input-pkg', '2.0.0', myInput);
|
|
49
|
+
const zipPath = join(tempDir, 'input.zip');
|
|
50
|
+
await e3.export(pkg, zipPath);
|
|
51
|
+
const result = await packageImport(storage, testRepo, zipPath);
|
|
52
|
+
assert.strictEqual(result.name, 'input-pkg');
|
|
53
|
+
assert.strictEqual(result.version, '2.0.0');
|
|
54
|
+
assert.ok(result.objectCount >= 2, `Expected at least 2 objects, got ${result.objectCount}`);
|
|
55
|
+
});
|
|
56
|
+
it('creates package ref file', async () => {
|
|
57
|
+
const pkg = e3.package('ref-test', '1.2.3');
|
|
58
|
+
const zipPath = join(tempDir, 'ref-test.zip');
|
|
59
|
+
await e3.export(pkg, zipPath);
|
|
60
|
+
const result = await packageImport(storage, testRepo, zipPath);
|
|
61
|
+
const refPath = join(testRepo, 'packages', 'ref-test', '1.2.3');
|
|
62
|
+
assert.ok(existsSync(refPath), 'Package ref file should exist');
|
|
63
|
+
const refContent = readFileSync(refPath, 'utf-8').trim();
|
|
64
|
+
assert.strictEqual(refContent, result.packageHash);
|
|
65
|
+
});
|
|
66
|
+
it('stores objects in correct location', async () => {
|
|
67
|
+
const pkg = e3.package('objects-test', '1.0.0');
|
|
68
|
+
const zipPath = join(tempDir, 'objects-test.zip');
|
|
69
|
+
await e3.export(pkg, zipPath);
|
|
70
|
+
const result = await packageImport(storage, testRepo, zipPath);
|
|
71
|
+
// Package object should be loadable
|
|
72
|
+
const packageObjectData = await objectRead(testRepo, result.packageHash);
|
|
73
|
+
assert.ok(packageObjectData.length > 0, 'Package object should have content');
|
|
74
|
+
});
|
|
75
|
+
it('handles re-import of same package', async () => {
|
|
76
|
+
const pkg = e3.package('reimport-test', '1.0.0');
|
|
77
|
+
const zipPath = join(tempDir, 'reimport-test.zip');
|
|
78
|
+
await e3.export(pkg, zipPath);
|
|
79
|
+
const result1 = await packageImport(storage, testRepo, zipPath);
|
|
80
|
+
const result2 = await packageImport(storage, testRepo, zipPath);
|
|
81
|
+
assert.strictEqual(result1.packageHash, result2.packageHash);
|
|
82
|
+
assert.strictEqual(result1.name, result2.name);
|
|
83
|
+
assert.strictEqual(result1.version, result2.version);
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
describe('packageList', () => {
|
|
87
|
+
it('returns empty array for no packages', async () => {
|
|
88
|
+
const packages = await packageList(storage, testRepo);
|
|
89
|
+
assert.deepStrictEqual(packages, []);
|
|
90
|
+
});
|
|
91
|
+
it('lists single package', async () => {
|
|
92
|
+
const pkg = e3.package('list-test', '1.0.0');
|
|
93
|
+
const zipPath = join(tempDir, 'list-test.zip');
|
|
94
|
+
await e3.export(pkg, zipPath);
|
|
95
|
+
await packageImport(storage, testRepo, zipPath);
|
|
96
|
+
const packages = await packageList(storage, testRepo);
|
|
97
|
+
assert.strictEqual(packages.length, 1);
|
|
98
|
+
assert.strictEqual(packages[0].name, 'list-test');
|
|
99
|
+
assert.strictEqual(packages[0].version, '1.0.0');
|
|
100
|
+
});
|
|
101
|
+
it('lists multiple packages', async () => {
|
|
102
|
+
// Create and import multiple packages
|
|
103
|
+
const pkg1 = e3.package('pkg-a', '1.0.0');
|
|
104
|
+
const pkg2 = e3.package('pkg-b', '2.0.0');
|
|
105
|
+
const pkg3 = e3.package('pkg-a', '1.1.0');
|
|
106
|
+
const zip1 = join(tempDir, 'pkg1.zip');
|
|
107
|
+
const zip2 = join(tempDir, 'pkg2.zip');
|
|
108
|
+
const zip3 = join(tempDir, 'pkg3.zip');
|
|
109
|
+
await e3.export(pkg1, zip1);
|
|
110
|
+
await e3.export(pkg2, zip2);
|
|
111
|
+
await e3.export(pkg3, zip3);
|
|
112
|
+
await packageImport(storage, testRepo, zip1);
|
|
113
|
+
await packageImport(storage, testRepo, zip2);
|
|
114
|
+
await packageImport(storage, testRepo, zip3);
|
|
115
|
+
const packages = await packageList(storage, testRepo);
|
|
116
|
+
assert.strictEqual(packages.length, 3);
|
|
117
|
+
// Sort for consistent comparison
|
|
118
|
+
packages.sort((a, b) => `${a.name}/${a.version}`.localeCompare(`${b.name}/${b.version}`));
|
|
119
|
+
assert.strictEqual(packages[0].name, 'pkg-a');
|
|
120
|
+
assert.strictEqual(packages[0].version, '1.0.0');
|
|
121
|
+
assert.strictEqual(packages[1].name, 'pkg-a');
|
|
122
|
+
assert.strictEqual(packages[1].version, '1.1.0');
|
|
123
|
+
assert.strictEqual(packages[2].name, 'pkg-b');
|
|
124
|
+
assert.strictEqual(packages[2].version, '2.0.0');
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
describe('packageResolve', () => {
|
|
128
|
+
it('resolves package to hash', async () => {
|
|
129
|
+
const pkg = e3.package('resolve-test', '1.0.0');
|
|
130
|
+
const zipPath = join(tempDir, 'resolve-test.zip');
|
|
131
|
+
await e3.export(pkg, zipPath);
|
|
132
|
+
const importResult = await packageImport(storage, testRepo, zipPath);
|
|
133
|
+
const resolvedHash = await packageResolve(storage, testRepo, 'resolve-test', '1.0.0');
|
|
134
|
+
assert.strictEqual(resolvedHash, importResult.packageHash);
|
|
135
|
+
});
|
|
136
|
+
it('throws for non-existent package', async () => {
|
|
137
|
+
await assert.rejects(async () => await packageResolve(storage, testRepo, 'nonexistent', '1.0.0'), PackageNotFoundError);
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
describe('packageRemove', () => {
|
|
141
|
+
it('removes package ref', async () => {
|
|
142
|
+
const pkg = e3.package('remove-test', '1.0.0');
|
|
143
|
+
const zipPath = join(tempDir, 'remove-test.zip');
|
|
144
|
+
await e3.export(pkg, zipPath);
|
|
145
|
+
await packageImport(storage, testRepo, zipPath);
|
|
146
|
+
// Verify package exists
|
|
147
|
+
let packages = await packageList(storage, testRepo);
|
|
148
|
+
assert.strictEqual(packages.length, 1);
|
|
149
|
+
// Remove package
|
|
150
|
+
await packageRemove(storage, testRepo, 'remove-test', '1.0.0');
|
|
151
|
+
// Verify package is gone
|
|
152
|
+
packages = await packageList(storage, testRepo);
|
|
153
|
+
assert.strictEqual(packages.length, 0);
|
|
154
|
+
});
|
|
155
|
+
it('throws for non-existent package', async () => {
|
|
156
|
+
await assert.rejects(async () => await packageRemove(storage, testRepo, 'nonexistent', '1.0.0'), PackageNotFoundError);
|
|
157
|
+
});
|
|
158
|
+
it('removes only specified version', async () => {
|
|
159
|
+
const pkg1 = e3.package('multi-ver', '1.0.0');
|
|
160
|
+
const pkg2 = e3.package('multi-ver', '2.0.0');
|
|
161
|
+
const zip1 = join(tempDir, 'multi-ver-1.zip');
|
|
162
|
+
const zip2 = join(tempDir, 'multi-ver-2.zip');
|
|
163
|
+
await e3.export(pkg1, zip1);
|
|
164
|
+
await e3.export(pkg2, zip2);
|
|
165
|
+
await packageImport(storage, testRepo, zip1);
|
|
166
|
+
await packageImport(storage, testRepo, zip2);
|
|
167
|
+
// Remove only v1
|
|
168
|
+
await packageRemove(storage, testRepo, 'multi-ver', '1.0.0');
|
|
169
|
+
const packages = await packageList(storage, testRepo);
|
|
170
|
+
assert.strictEqual(packages.length, 1);
|
|
171
|
+
assert.strictEqual(packages[0].version, '2.0.0');
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
describe('packageExport', () => {
|
|
175
|
+
it('exports empty package', async () => {
|
|
176
|
+
const pkg = e3.package('export-test', '1.0.0');
|
|
177
|
+
const importZip = join(tempDir, 'import.zip');
|
|
178
|
+
await e3.export(pkg, importZip);
|
|
179
|
+
await packageImport(storage, testRepo, importZip);
|
|
180
|
+
const exportZip = join(tempDir, 'export.zip');
|
|
181
|
+
const result = await packageExport(storage, testRepo, 'export-test', '1.0.0', exportZip);
|
|
182
|
+
assert.ok(existsSync(exportZip), 'Export zip should exist');
|
|
183
|
+
assert.strictEqual(result.packageHash.length, 64);
|
|
184
|
+
assert.ok(result.objectCount >= 1, `Expected at least 1 object, got ${result.objectCount}`);
|
|
185
|
+
});
|
|
186
|
+
it('exports package with input dataset', async () => {
|
|
187
|
+
const myInput = e3.input('greeting', StringType, 'hello');
|
|
188
|
+
const pkg = e3.package('export-input', '1.0.0', myInput);
|
|
189
|
+
const importZip = join(tempDir, 'import-input.zip');
|
|
190
|
+
await e3.export(pkg, importZip);
|
|
191
|
+
await packageImport(storage, testRepo, importZip);
|
|
192
|
+
const exportZip = join(tempDir, 'export-input.zip');
|
|
193
|
+
const result = await packageExport(storage, testRepo, 'export-input', '1.0.0', exportZip);
|
|
194
|
+
assert.ok(result.objectCount >= 2, `Expected at least 2 objects, got ${result.objectCount}`);
|
|
195
|
+
});
|
|
196
|
+
it('produces zip with same content as original', async () => {
|
|
197
|
+
const myInput = e3.input('name', StringType, 'world');
|
|
198
|
+
const pkg = e3.package('roundtrip', '1.0.0', myInput);
|
|
199
|
+
const originalZip = join(tempDir, 'original.zip');
|
|
200
|
+
await e3.export(pkg, originalZip);
|
|
201
|
+
await packageImport(storage, testRepo, originalZip);
|
|
202
|
+
const exportedZip = join(tempDir, 'exported.zip');
|
|
203
|
+
await packageExport(storage, testRepo, 'roundtrip', '1.0.0', exportedZip);
|
|
204
|
+
// Compare zip contents (not raw bytes, as order may differ)
|
|
205
|
+
const result = await zipEqual(originalZip, exportedZip);
|
|
206
|
+
assert.ok(result.equal, `Zips should have equal content: ${result.diff}`);
|
|
207
|
+
});
|
|
208
|
+
it('exported zip can be re-imported', async () => {
|
|
209
|
+
const pkg = e3.package('reimport', '1.0.0');
|
|
210
|
+
const importZip = join(tempDir, 'reimport-import.zip');
|
|
211
|
+
await e3.export(pkg, importZip);
|
|
212
|
+
await packageImport(storage, testRepo, importZip);
|
|
213
|
+
const exportZip = join(tempDir, 'reimport-export.zip');
|
|
214
|
+
await packageExport(storage, testRepo, 'reimport', '1.0.0', exportZip);
|
|
215
|
+
// Create a second repo and import the exported zip
|
|
216
|
+
const testRepo2 = createTestRepo();
|
|
217
|
+
const storage2 = new LocalStorage();
|
|
218
|
+
try {
|
|
219
|
+
const result = await packageImport(storage2, testRepo2, exportZip);
|
|
220
|
+
assert.strictEqual(result.name, 'reimport');
|
|
221
|
+
assert.strictEqual(result.version, '1.0.0');
|
|
222
|
+
}
|
|
223
|
+
finally {
|
|
224
|
+
removeTestRepo(testRepo2);
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
it('throws for non-existent package', async () => {
|
|
228
|
+
const exportZip = join(tempDir, 'nonexistent.zip');
|
|
229
|
+
await assert.rejects(async () => await packageExport(storage, testRepo, 'nonexistent', '1.0.0', exportZip), PackageNotFoundError);
|
|
230
|
+
});
|
|
231
|
+
});
|
|
232
|
+
describe('packages with tasks', () => {
|
|
233
|
+
it('imports and reads package with single East task', async () => {
|
|
234
|
+
// Create package with a single task
|
|
235
|
+
const input_x = e3.input('x', IntegerType, 10n);
|
|
236
|
+
const task_double = e3.task('double', [input_x], East.function([IntegerType], IntegerType, ($, x) => x.multiply(2n)));
|
|
237
|
+
const pkg = e3.package('single-task', '1.0.0', task_double);
|
|
238
|
+
const zipPath = join(tempDir, 'single-task.zip');
|
|
239
|
+
await e3.export(pkg, zipPath);
|
|
240
|
+
// Import and read
|
|
241
|
+
const importResult = await packageImport(storage, testRepo, zipPath);
|
|
242
|
+
assert.strictEqual(importResult.name, 'single-task');
|
|
243
|
+
assert.strictEqual(importResult.version, '1.0.0');
|
|
244
|
+
// Read the package object to verify tasks are present
|
|
245
|
+
const pkgObject = await packageRead(storage, testRepo, 'single-task', '1.0.0');
|
|
246
|
+
assert.strictEqual(pkgObject.tasks.size, 1);
|
|
247
|
+
assert.ok(pkgObject.tasks.has('double'), 'Should have double task');
|
|
248
|
+
});
|
|
249
|
+
it('imports and reads package with two tasks (simpler than diamond)', async () => {
|
|
250
|
+
// Simpler test: two independent tasks to isolate the issue
|
|
251
|
+
const input_a = e3.input('a', IntegerType, 10n);
|
|
252
|
+
const input_b = e3.input('b', IntegerType, 5n);
|
|
253
|
+
const task_left = e3.task('left', [input_a], East.function([IntegerType], IntegerType, ($, a) => a.multiply(2n)));
|
|
254
|
+
const task_right = e3.task('right', [input_b], East.function([IntegerType], IntegerType, ($, b) => b.multiply(3n)));
|
|
255
|
+
const pkg = e3.package('two-task-test', '1.0.0', task_left, task_right);
|
|
256
|
+
const zipPath = join(tempDir, 'two-task.zip');
|
|
257
|
+
await e3.export(pkg, zipPath);
|
|
258
|
+
// Import
|
|
259
|
+
const importResult = await packageImport(storage, testRepo, zipPath);
|
|
260
|
+
assert.strictEqual(importResult.name, 'two-task-test');
|
|
261
|
+
assert.strictEqual(importResult.version, '1.0.0');
|
|
262
|
+
// Read the package object
|
|
263
|
+
const pkgObject = await packageRead(storage, testRepo, 'two-task-test', '1.0.0');
|
|
264
|
+
// Should have both tasks
|
|
265
|
+
assert.strictEqual(pkgObject.tasks.size, 2);
|
|
266
|
+
assert.ok(pkgObject.tasks.has('left'), 'Should have left task');
|
|
267
|
+
assert.ok(pkgObject.tasks.has('right'), 'Should have right task');
|
|
268
|
+
});
|
|
269
|
+
it('imports and reads package with diamond dependency (multiple tasks)', async () => {
|
|
270
|
+
// Create diamond dependency pattern:
|
|
271
|
+
// input_a, input_b -> task_left, task_right -> task_merge
|
|
272
|
+
const input_a = e3.input('a', IntegerType, 10n);
|
|
273
|
+
const input_b = e3.input('b', IntegerType, 5n);
|
|
274
|
+
const task_left = e3.task('left', [input_a, input_b], East.function([IntegerType, IntegerType], IntegerType, ($, a, b) => a.add(b)));
|
|
275
|
+
const task_right = e3.task('right', [input_a, input_b], East.function([IntegerType, IntegerType], IntegerType, ($, a, b) => a.multiply(b)));
|
|
276
|
+
const task_merge = e3.task('merge', [task_left.output, task_right.output], East.function([IntegerType, IntegerType], IntegerType, ($, left, right) => left.add(right)));
|
|
277
|
+
const pkg = e3.package('diamond-test', '1.0.0', task_merge);
|
|
278
|
+
const zipPath = join(tempDir, 'diamond.zip');
|
|
279
|
+
await e3.export(pkg, zipPath);
|
|
280
|
+
// Import
|
|
281
|
+
const importResult = await packageImport(storage, testRepo, zipPath);
|
|
282
|
+
assert.strictEqual(importResult.name, 'diamond-test');
|
|
283
|
+
assert.strictEqual(importResult.version, '1.0.0');
|
|
284
|
+
// Read the package object
|
|
285
|
+
const pkgObject = await packageRead(storage, testRepo, 'diamond-test', '1.0.0');
|
|
286
|
+
// Should have all 3 tasks
|
|
287
|
+
assert.strictEqual(pkgObject.tasks.size, 3);
|
|
288
|
+
assert.ok(pkgObject.tasks.has('left'), 'Should have left task');
|
|
289
|
+
assert.ok(pkgObject.tasks.has('right'), 'Should have right task');
|
|
290
|
+
assert.ok(pkgObject.tasks.has('merge'), 'Should have merge task');
|
|
291
|
+
// Verify task hashes are present (tasks Map contains name -> hash)
|
|
292
|
+
const mergeTaskHash = pkgObject.tasks.get('merge');
|
|
293
|
+
assert.ok(typeof mergeTaskHash === 'string', 'Task hash should be a string');
|
|
294
|
+
assert.strictEqual(mergeTaskHash.length, 64, 'Task hash should be 64 chars (SHA256)');
|
|
295
|
+
});
|
|
296
|
+
it('roundtrip export of package with tasks preserves content', async () => {
|
|
297
|
+
const input_x = e3.input('x', IntegerType, 10n);
|
|
298
|
+
const task_double = e3.task('double', [input_x], East.function([IntegerType], IntegerType, ($, x) => x.multiply(2n)));
|
|
299
|
+
const pkg = e3.package('task-roundtrip', '1.0.0', task_double);
|
|
300
|
+
const originalZip = join(tempDir, 'task-original.zip');
|
|
301
|
+
await e3.export(pkg, originalZip);
|
|
302
|
+
await packageImport(storage, testRepo, originalZip);
|
|
303
|
+
// Export from repo
|
|
304
|
+
const exportedZip = join(tempDir, 'task-exported.zip');
|
|
305
|
+
await packageExport(storage, testRepo, 'task-roundtrip', '1.0.0', exportedZip);
|
|
306
|
+
// Import into second repo
|
|
307
|
+
const testRepo2 = createTestRepo();
|
|
308
|
+
const storage2 = new LocalStorage();
|
|
309
|
+
try {
|
|
310
|
+
const result = await packageImport(storage2, testRepo2, exportedZip);
|
|
311
|
+
assert.strictEqual(result.name, 'task-roundtrip');
|
|
312
|
+
assert.strictEqual(result.version, '1.0.0');
|
|
313
|
+
// Verify tasks are preserved
|
|
314
|
+
const pkgObject = await packageRead(storage2, testRepo2, 'task-roundtrip', '1.0.0');
|
|
315
|
+
assert.strictEqual(pkgObject.tasks.size, 1);
|
|
316
|
+
assert.ok(pkgObject.tasks.has('double'));
|
|
317
|
+
}
|
|
318
|
+
finally {
|
|
319
|
+
removeTestRepo(testRepo2);
|
|
320
|
+
}
|
|
321
|
+
});
|
|
322
|
+
});
|
|
323
|
+
});
|
|
324
|
+
//# sourceMappingURL=packages.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packages.spec.js","sourceRoot":"","sources":["../../src/packages.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
|
+
* Licensed under BSL 1.1. See LICENSE for details.
|
|
4
|
+
*/
|
|
5
|
+
import type { RepoStore, RepoStatus, RepoMetadata, BatchResult, GcObjectScanResult, GcRootScanResult } from '../interfaces.js';
|
|
6
|
+
/**
|
|
7
|
+
* In-memory implementation of RepoStore for testing.
|
|
8
|
+
*
|
|
9
|
+
* Stores all data in memory maps. Useful for unit tests
|
|
10
|
+
* where filesystem access is not needed.
|
|
11
|
+
*
|
|
12
|
+
* All methods are synchronous but return Promises to match the interface.
|
|
13
|
+
*/
|
|
14
|
+
export declare class InMemoryRepoStore implements RepoStore {
|
|
15
|
+
private repos;
|
|
16
|
+
list(): Promise<string[]>;
|
|
17
|
+
exists(repo: string): Promise<boolean>;
|
|
18
|
+
getMetadata(repo: string): Promise<RepoMetadata | null>;
|
|
19
|
+
create(repo: string): Promise<void>;
|
|
20
|
+
setStatus(repo: string, status: RepoStatus, expected?: RepoStatus | RepoStatus[]): Promise<void>;
|
|
21
|
+
remove(repo: string): Promise<void>;
|
|
22
|
+
deleteRefsBatch(_repo: string, _cursor?: string): Promise<BatchResult>;
|
|
23
|
+
deleteObjectsBatch(_repo: string, _cursor?: string): Promise<BatchResult>;
|
|
24
|
+
gcScanPackageRoots(_repo: string, _cursor?: unknown): Promise<GcRootScanResult>;
|
|
25
|
+
gcScanWorkspaceRoots(_repo: string, _cursor?: unknown): Promise<GcRootScanResult>;
|
|
26
|
+
gcScanExecutionRoots(_repo: string, _cursor?: unknown): Promise<GcRootScanResult>;
|
|
27
|
+
gcScanObjects(_repo: string, _cursor?: unknown): Promise<GcObjectScanResult>;
|
|
28
|
+
gcDeleteObjects(_repo: string, _hashes: string[]): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Clear all repositories.
|
|
31
|
+
* Useful for test cleanup.
|
|
32
|
+
*/
|
|
33
|
+
clear(): void;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=InMemoryRepoStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InMemoryRepoStore.d.ts","sourceRoot":"","sources":["../../../../src/storage/in-memory/InMemoryRepoStore.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,UAAU,EACV,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,kBAAkB,CAAC;AAO1B;;;;;;;GAOG;AAEH,qBAAa,iBAAkB,YAAW,SAAS;IACjD,OAAO,CAAC,KAAK,CAAmC;IAM1C,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAIzB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAItC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAQvD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAcnC,SAAS,CACb,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,UAAU,EAClB,QAAQ,CAAC,EAAE,UAAU,GAAG,UAAU,EAAE,GACnC,OAAO,CAAC,IAAI,CAAC;IAuBV,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQnC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAKtE,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IASzE,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAI/E,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAIjF,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAIjF,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAI5E,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAQtE;;;OAGG;IACH,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
|
+
* Licensed under BSL 1.1. See LICENSE for details.
|
|
4
|
+
*/
|
|
5
|
+
import { RepoNotFoundError, RepoAlreadyExistsError, RepoStatusConflictError, } from '../../errors.js';
|
|
6
|
+
/**
|
|
7
|
+
* In-memory implementation of RepoStore for testing.
|
|
8
|
+
*
|
|
9
|
+
* Stores all data in memory maps. Useful for unit tests
|
|
10
|
+
* where filesystem access is not needed.
|
|
11
|
+
*
|
|
12
|
+
* All methods are synchronous but return Promises to match the interface.
|
|
13
|
+
*/
|
|
14
|
+
/* eslint-disable @typescript-eslint/require-await */
|
|
15
|
+
export class InMemoryRepoStore {
|
|
16
|
+
repos = new Map();
|
|
17
|
+
// ===========================================================================
|
|
18
|
+
// Queries
|
|
19
|
+
// ===========================================================================
|
|
20
|
+
async list() {
|
|
21
|
+
return [...this.repos.keys()];
|
|
22
|
+
}
|
|
23
|
+
async exists(repo) {
|
|
24
|
+
return this.repos.has(repo);
|
|
25
|
+
}
|
|
26
|
+
async getMetadata(repo) {
|
|
27
|
+
return this.repos.get(repo) ?? null;
|
|
28
|
+
}
|
|
29
|
+
// ===========================================================================
|
|
30
|
+
// Lifecycle
|
|
31
|
+
// ===========================================================================
|
|
32
|
+
async create(repo) {
|
|
33
|
+
if (this.repos.has(repo)) {
|
|
34
|
+
throw new RepoAlreadyExistsError(repo);
|
|
35
|
+
}
|
|
36
|
+
const now = new Date().toISOString();
|
|
37
|
+
this.repos.set(repo, {
|
|
38
|
+
name: repo,
|
|
39
|
+
status: 'active',
|
|
40
|
+
createdAt: now,
|
|
41
|
+
statusChangedAt: now,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
async setStatus(repo, status, expected) {
|
|
45
|
+
const current = this.repos.get(repo);
|
|
46
|
+
if (!current) {
|
|
47
|
+
throw new RepoNotFoundError(repo);
|
|
48
|
+
}
|
|
49
|
+
// Check expected status (CAS)
|
|
50
|
+
if (expected !== undefined) {
|
|
51
|
+
const expectedArray = Array.isArray(expected) ? expected : [expected];
|
|
52
|
+
if (!expectedArray.includes(current.status)) {
|
|
53
|
+
throw new RepoStatusConflictError(repo, expected, current.status);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
// Update status
|
|
57
|
+
const now = new Date().toISOString();
|
|
58
|
+
this.repos.set(repo, {
|
|
59
|
+
...current,
|
|
60
|
+
status,
|
|
61
|
+
statusChangedAt: now,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
async remove(repo) {
|
|
65
|
+
this.repos.delete(repo);
|
|
66
|
+
}
|
|
67
|
+
// ===========================================================================
|
|
68
|
+
// Batched Deletion
|
|
69
|
+
// ===========================================================================
|
|
70
|
+
async deleteRefsBatch(_repo, _cursor) {
|
|
71
|
+
// In-memory doesn't have refs to delete
|
|
72
|
+
return { status: 'done', deleted: 0 };
|
|
73
|
+
}
|
|
74
|
+
async deleteObjectsBatch(_repo, _cursor) {
|
|
75
|
+
// In-memory doesn't have objects to delete
|
|
76
|
+
return { status: 'done', deleted: 0 };
|
|
77
|
+
}
|
|
78
|
+
// ===========================================================================
|
|
79
|
+
// GC Primitives
|
|
80
|
+
// ===========================================================================
|
|
81
|
+
async gcScanPackageRoots(_repo, _cursor) {
|
|
82
|
+
return { roots: [] };
|
|
83
|
+
}
|
|
84
|
+
async gcScanWorkspaceRoots(_repo, _cursor) {
|
|
85
|
+
return { roots: [] };
|
|
86
|
+
}
|
|
87
|
+
async gcScanExecutionRoots(_repo, _cursor) {
|
|
88
|
+
return { roots: [] };
|
|
89
|
+
}
|
|
90
|
+
async gcScanObjects(_repo, _cursor) {
|
|
91
|
+
return { objects: [] };
|
|
92
|
+
}
|
|
93
|
+
async gcDeleteObjects(_repo, _hashes) {
|
|
94
|
+
// Nothing to delete
|
|
95
|
+
}
|
|
96
|
+
// ===========================================================================
|
|
97
|
+
// Test Utilities
|
|
98
|
+
// ===========================================================================
|
|
99
|
+
/**
|
|
100
|
+
* Clear all repositories.
|
|
101
|
+
* Useful for test cleanup.
|
|
102
|
+
*/
|
|
103
|
+
clear() {
|
|
104
|
+
this.repos.clear();
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=InMemoryRepoStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InMemoryRepoStore.js","sourceRoot":"","sources":["../../../../src/storage/in-memory/InMemoryRepoStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InMemoryRepoStore.spec.d.ts","sourceRoot":"","sources":["../../../../src/storage/in-memory/InMemoryRepoStore.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|