@substrate-ai/core 0.19.54 → 0.20.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.
- package/README.md +33 -33
- package/dist/config/types.d.ts +17 -17
- package/package.json +16 -2
- package/dist/__tests__/adapter.test.d.ts +0 -12
- package/dist/__tests__/adapter.test.d.ts.map +0 -1
- package/dist/__tests__/adapter.test.js +0 -259
- package/dist/__tests__/adapter.test.js.map +0 -1
- package/dist/__tests__/event-bus.test.d.ts +0 -14
- package/dist/__tests__/event-bus.test.d.ts.map +0 -1
- package/dist/__tests__/event-bus.test.js +0 -199
- package/dist/__tests__/event-bus.test.js.map +0 -1
- package/dist/__tests__/output-quality.test.d.ts +0 -8
- package/dist/__tests__/output-quality.test.d.ts.map +0 -1
- package/dist/__tests__/output-quality.test.js +0 -166
- package/dist/__tests__/output-quality.test.js.map +0 -1
- package/dist/__tests__/schema-suffix.test.d.ts +0 -9
- package/dist/__tests__/schema-suffix.test.d.ts.map +0 -1
- package/dist/__tests__/schema-suffix.test.js +0 -126
- package/dist/__tests__/schema-suffix.test.js.map +0 -1
- package/dist/__tests__/yaml-parser.test.d.ts +0 -18
- package/dist/__tests__/yaml-parser.test.d.ts.map +0 -1
- package/dist/__tests__/yaml-parser.test.js +0 -475
- package/dist/__tests__/yaml-parser.test.js.map +0 -1
- package/dist/__type-checks__.d.ts +0 -11
- package/dist/__type-checks__.d.ts.map +0 -1
- package/dist/__type-checks__.js +0 -19
- package/dist/__type-checks__.js.map +0 -1
- package/dist/adapters/__tests__/adapter-output-normalizer.test.d.ts +0 -12
- package/dist/adapters/__tests__/adapter-output-normalizer.test.d.ts.map +0 -1
- package/dist/adapters/__tests__/adapter-output-normalizer.test.js +0 -193
- package/dist/adapters/__tests__/adapter-output-normalizer.test.js.map +0 -1
- package/dist/persistence/dolt-adapter-transaction.test.d.ts +0 -10
- package/dist/persistence/dolt-adapter-transaction.test.d.ts.map +0 -1
- package/dist/persistence/dolt-adapter-transaction.test.js +0 -359
- package/dist/persistence/dolt-adapter-transaction.test.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,55 +1,55 @@
|
|
|
1
1
|
# @substrate-ai/core
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Transport-agnostic primitives for the [Substrate](https://github.com/johnplanow/substrate) platform. This is the foundation package — adapters, dispatch, routing, persistence, telemetry, cost tracking, event bus, and supervisor analysis — kept free of SDLC-specific concerns so downstream packages (`@substrate-ai/sdlc`, `@substrate-ai/factory`, or custom orchestrators) can compose the pieces they need.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Install
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
```bash
|
|
8
|
+
npm install @substrate-ai/core
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Node 22 or later is required. If you plan to use the Dolt persistence adapter in socket mode, also install `mysql2` — it is declared as an optional peer dependency so consumers who only use the CLI or file-backed adapters skip the transitive binary.
|
|
12
|
+
|
|
13
|
+
## Modules
|
|
14
|
+
|
|
15
|
+
| Namespace | Representative exports |
|
|
8
16
|
|---|---|
|
|
9
17
|
| **adapters** | `WorkerAdapter`, `AdapterRegistry`, `SpawnCommand`, `AdapterOptions` |
|
|
18
|
+
| **budget** | `BudgetTracker` |
|
|
10
19
|
| **config** | `SubstrateConfig`, config loader, validation helpers |
|
|
11
|
-
| **dispatch** | `Dispatcher`, `DispatchRequest`, `DispatchHandle`, `DispatchResult`, `DispatchConfig` |
|
|
12
|
-
| **events** | `TypedEventBus`, `TypedEventBusImpl`, `createEventBus`, `CoreEvents`, `EventMap`, `EventHandler` |
|
|
13
|
-
| **git** | Git utilities, worktree management, `GitManager` |
|
|
14
|
-
| **persistence** | `DatabaseAdapter`, `DatabaseAdapterConfig`, `SyncAdapter`, `isSyncAdapter`, `InitSchemaFn` |
|
|
15
|
-
| **routing** | `RoutingDecision`, `RoutingPolicy`, `IRoutingResolver`, `ModelResolution` |
|
|
16
|
-
| **telemetry** | Telemetry pipeline, scoring modules, `ITelemetryPersistence`, `estimateCost` |
|
|
17
|
-
| **supervisor** | Analysis engine, experimenter framework |
|
|
18
|
-
| **budget** | `BudgetTracker` interface and implementation |
|
|
19
|
-
| **cost-tracker** | Token rates, cost tracking, `CostEntry`, `TaskCostSummary`, `SessionCostSummary` |
|
|
20
|
-
| **monitor** | `MonitorAgent`, `RecommendationEngine`, `ReportGenerator`, `TaskTypeClassifier` |
|
|
21
|
-
| **version-manager** | `VersionManager`, `VersionManagerImpl`, `UpdateChecker`, `VersionCache` |
|
|
22
20
|
| **context** | `ContextCompiler`, `TaskDescriptor`, `CompileResult` |
|
|
21
|
+
| **cost-tracker** | `CostTracker`, `CostEntry`, `TaskCostSummary`, `TOKEN_RATES` |
|
|
22
|
+
| **dispatch** | `Dispatcher`, `DispatchRequest`, `DispatchHandle`, `DispatchResult` |
|
|
23
|
+
| **events** | `TypedEventBus`, `createEventBus`, `CoreEvents`, `EventMap`, `EventHandler` |
|
|
24
|
+
| **git** | Git utilities, worktree management, `GitManager` |
|
|
25
|
+
| **llm** | `callLLM`, `LLMCallParams`, `LLMCallResult` (default stub — provide your own implementation) |
|
|
26
|
+
| **monitor** | `MonitorAgent`, `RecommendationEngine`, `ReportGenerator` |
|
|
27
|
+
| **persistence** | `DatabaseAdapter`, `SyncAdapter`, `createDatabaseAdapter` |
|
|
23
28
|
| **quality-gates** | `QualityGate`, `GatePipeline`, `GateResult` |
|
|
29
|
+
| **routing** | `RoutingDecision`, `RoutingPolicy`, `IRoutingResolver` |
|
|
30
|
+
| **supervisor** | Analysis engine, experimenter framework |
|
|
31
|
+
| **telemetry** | Telemetry pipeline, scoring modules, `estimateCost` |
|
|
32
|
+
| **version-manager** | `VersionManager`, `UpdateChecker`, `VersionCache` |
|
|
24
33
|
|
|
25
34
|
## Usage
|
|
26
35
|
|
|
27
36
|
```typescript
|
|
28
|
-
|
|
29
|
-
import { createEventBus, TypedEventBus } from '@substrate-ai/core';
|
|
37
|
+
import { createEventBus, type TypedEventBus } from '@substrate-ai/core'
|
|
30
38
|
|
|
31
|
-
const bus: TypedEventBus = createEventBus()
|
|
32
|
-
bus.on('story:complete', (event) => console.log('Story done:', event.storyKey))
|
|
39
|
+
const bus: TypedEventBus = createEventBus()
|
|
40
|
+
bus.on('story:complete', (event) => console.log('Story done:', event.storyKey))
|
|
33
41
|
```
|
|
34
42
|
|
|
35
43
|
```typescript
|
|
36
|
-
|
|
37
|
-
import { AdapterRegistry, WorkerAdapter } from '@substrate-ai/core';
|
|
44
|
+
import { AdapterRegistry } from '@substrate-ai/core'
|
|
38
45
|
|
|
39
|
-
const registry = new AdapterRegistry()
|
|
40
|
-
registry.register('claude', myClaudeAdapter)
|
|
41
|
-
const adapter
|
|
46
|
+
const registry = new AdapterRegistry()
|
|
47
|
+
registry.register('claude', myClaudeAdapter)
|
|
48
|
+
const adapter = registry.get('claude')
|
|
42
49
|
```
|
|
43
50
|
|
|
44
|
-
|
|
45
|
-
// Persistence — create a database adapter for pipeline state
|
|
46
|
-
import { DatabaseAdapterConfig, createDatabaseAdapter } from '@substrate-ai/core';
|
|
47
|
-
|
|
48
|
-
const config: DatabaseAdapterConfig = { backend: 'dolt', basePath: '.substrate' };
|
|
49
|
-
const db = await createDatabaseAdapter(config);
|
|
50
|
-
await db.initSchema(mySchema);
|
|
51
|
-
```
|
|
51
|
+
## Versioning
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
This package releases in lockstep with `substrate-ai` on every `v*` tag push. Pick any version ≥ `0.20.1` — all four `@substrate-ai/*` packages publish together with verified npm provenance.
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
See the [main repository](https://github.com/johnplanow/substrate) for the full platform documentation.
|
package/dist/config/types.d.ts
CHANGED
|
@@ -12,9 +12,9 @@ import { z } from 'zod';
|
|
|
12
12
|
import type { ILogger } from '../dispatch/types.js';
|
|
13
13
|
/** Subscription routing modes */
|
|
14
14
|
export declare const SubscriptionRoutingSchema: z.ZodEnum<{
|
|
15
|
-
auto: "auto";
|
|
16
15
|
subscription: "subscription";
|
|
17
16
|
api: "api";
|
|
17
|
+
auto: "auto";
|
|
18
18
|
disabled: "disabled";
|
|
19
19
|
}>;
|
|
20
20
|
export type SubscriptionRouting = z.infer<typeof SubscriptionRoutingSchema>;
|
|
@@ -29,9 +29,9 @@ export declare const ProviderConfigSchema: z.ZodObject<{
|
|
|
29
29
|
enabled: z.ZodBoolean;
|
|
30
30
|
cli_path: z.ZodOptional<z.ZodString>;
|
|
31
31
|
subscription_routing: z.ZodEnum<{
|
|
32
|
-
auto: "auto";
|
|
33
32
|
subscription: "subscription";
|
|
34
33
|
api: "api";
|
|
34
|
+
auto: "auto";
|
|
35
35
|
disabled: "disabled";
|
|
36
36
|
}>;
|
|
37
37
|
max_concurrent: z.ZodNumber;
|
|
@@ -49,9 +49,9 @@ export declare const ProvidersSchema: z.ZodObject<{
|
|
|
49
49
|
enabled: z.ZodBoolean;
|
|
50
50
|
cli_path: z.ZodOptional<z.ZodString>;
|
|
51
51
|
subscription_routing: z.ZodEnum<{
|
|
52
|
-
auto: "auto";
|
|
53
52
|
subscription: "subscription";
|
|
54
53
|
api: "api";
|
|
54
|
+
auto: "auto";
|
|
55
55
|
disabled: "disabled";
|
|
56
56
|
}>;
|
|
57
57
|
max_concurrent: z.ZodNumber;
|
|
@@ -66,9 +66,9 @@ export declare const ProvidersSchema: z.ZodObject<{
|
|
|
66
66
|
enabled: z.ZodBoolean;
|
|
67
67
|
cli_path: z.ZodOptional<z.ZodString>;
|
|
68
68
|
subscription_routing: z.ZodEnum<{
|
|
69
|
-
auto: "auto";
|
|
70
69
|
subscription: "subscription";
|
|
71
70
|
api: "api";
|
|
71
|
+
auto: "auto";
|
|
72
72
|
disabled: "disabled";
|
|
73
73
|
}>;
|
|
74
74
|
max_concurrent: z.ZodNumber;
|
|
@@ -83,9 +83,9 @@ export declare const ProvidersSchema: z.ZodObject<{
|
|
|
83
83
|
enabled: z.ZodBoolean;
|
|
84
84
|
cli_path: z.ZodOptional<z.ZodString>;
|
|
85
85
|
subscription_routing: z.ZodEnum<{
|
|
86
|
-
auto: "auto";
|
|
87
86
|
subscription: "subscription";
|
|
88
87
|
api: "api";
|
|
88
|
+
auto: "auto";
|
|
89
89
|
disabled: "disabled";
|
|
90
90
|
}>;
|
|
91
91
|
max_concurrent: z.ZodNumber;
|
|
@@ -99,21 +99,21 @@ export declare const ProvidersSchema: z.ZodObject<{
|
|
|
99
99
|
}, z.core.$strict>;
|
|
100
100
|
export type ProvidersConfig = z.infer<typeof ProvidersSchema>;
|
|
101
101
|
export declare const LogLevelSchema: z.ZodEnum<{
|
|
102
|
-
error: "error";
|
|
103
102
|
trace: "trace";
|
|
104
103
|
debug: "debug";
|
|
105
104
|
info: "info";
|
|
106
105
|
warn: "warn";
|
|
106
|
+
error: "error";
|
|
107
107
|
fatal: "fatal";
|
|
108
108
|
}>;
|
|
109
109
|
export type LogLevelValue = z.infer<typeof LogLevelSchema>;
|
|
110
110
|
export declare const GlobalSettingsSchema: z.ZodObject<{
|
|
111
111
|
log_level: z.ZodEnum<{
|
|
112
|
-
error: "error";
|
|
113
112
|
trace: "trace";
|
|
114
113
|
debug: "debug";
|
|
115
114
|
info: "info";
|
|
116
115
|
warn: "warn";
|
|
116
|
+
error: "error";
|
|
117
117
|
fatal: "fatal";
|
|
118
118
|
}>;
|
|
119
119
|
max_concurrent_tasks: z.ZodNumber;
|
|
@@ -164,11 +164,11 @@ export declare const SubstrateConfigSchema: z.ZodObject<{
|
|
|
164
164
|
}>>;
|
|
165
165
|
global: z.ZodObject<{
|
|
166
166
|
log_level: z.ZodEnum<{
|
|
167
|
-
error: "error";
|
|
168
167
|
trace: "trace";
|
|
169
168
|
debug: "debug";
|
|
170
169
|
info: "info";
|
|
171
170
|
warn: "warn";
|
|
171
|
+
error: "error";
|
|
172
172
|
fatal: "fatal";
|
|
173
173
|
}>;
|
|
174
174
|
max_concurrent_tasks: z.ZodNumber;
|
|
@@ -182,9 +182,9 @@ export declare const SubstrateConfigSchema: z.ZodObject<{
|
|
|
182
182
|
enabled: z.ZodBoolean;
|
|
183
183
|
cli_path: z.ZodOptional<z.ZodString>;
|
|
184
184
|
subscription_routing: z.ZodEnum<{
|
|
185
|
-
auto: "auto";
|
|
186
185
|
subscription: "subscription";
|
|
187
186
|
api: "api";
|
|
187
|
+
auto: "auto";
|
|
188
188
|
disabled: "disabled";
|
|
189
189
|
}>;
|
|
190
190
|
max_concurrent: z.ZodNumber;
|
|
@@ -199,9 +199,9 @@ export declare const SubstrateConfigSchema: z.ZodObject<{
|
|
|
199
199
|
enabled: z.ZodBoolean;
|
|
200
200
|
cli_path: z.ZodOptional<z.ZodString>;
|
|
201
201
|
subscription_routing: z.ZodEnum<{
|
|
202
|
-
auto: "auto";
|
|
203
202
|
subscription: "subscription";
|
|
204
203
|
api: "api";
|
|
204
|
+
auto: "auto";
|
|
205
205
|
disabled: "disabled";
|
|
206
206
|
}>;
|
|
207
207
|
max_concurrent: z.ZodNumber;
|
|
@@ -216,9 +216,9 @@ export declare const SubstrateConfigSchema: z.ZodObject<{
|
|
|
216
216
|
enabled: z.ZodBoolean;
|
|
217
217
|
cli_path: z.ZodOptional<z.ZodString>;
|
|
218
218
|
subscription_routing: z.ZodEnum<{
|
|
219
|
-
auto: "auto";
|
|
220
219
|
subscription: "subscription";
|
|
221
220
|
api: "api";
|
|
221
|
+
auto: "auto";
|
|
222
222
|
disabled: "disabled";
|
|
223
223
|
}>;
|
|
224
224
|
max_concurrent: z.ZodNumber;
|
|
@@ -258,9 +258,9 @@ export declare const PartialProviderConfigSchema: z.ZodObject<{
|
|
|
258
258
|
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
259
259
|
cli_path: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
260
260
|
subscription_routing: z.ZodOptional<z.ZodEnum<{
|
|
261
|
-
auto: "auto";
|
|
262
261
|
subscription: "subscription";
|
|
263
262
|
api: "api";
|
|
263
|
+
auto: "auto";
|
|
264
264
|
disabled: "disabled";
|
|
265
265
|
}>>;
|
|
266
266
|
max_concurrent: z.ZodOptional<z.ZodNumber>;
|
|
@@ -274,11 +274,11 @@ export declare const PartialProviderConfigSchema: z.ZodObject<{
|
|
|
274
274
|
export type PartialProviderConfig = z.infer<typeof PartialProviderConfigSchema>;
|
|
275
275
|
export declare const PartialGlobalSettingsSchema: z.ZodObject<{
|
|
276
276
|
log_level: z.ZodOptional<z.ZodEnum<{
|
|
277
|
-
error: "error";
|
|
278
277
|
trace: "trace";
|
|
279
278
|
debug: "debug";
|
|
280
279
|
info: "info";
|
|
281
280
|
warn: "warn";
|
|
281
|
+
error: "error";
|
|
282
282
|
fatal: "fatal";
|
|
283
283
|
}>>;
|
|
284
284
|
max_concurrent_tasks: z.ZodOptional<z.ZodNumber>;
|
|
@@ -297,11 +297,11 @@ export declare const PartialSubstrateConfigSchema: z.ZodObject<{
|
|
|
297
297
|
}>>;
|
|
298
298
|
global: z.ZodOptional<z.ZodObject<{
|
|
299
299
|
log_level: z.ZodOptional<z.ZodEnum<{
|
|
300
|
-
error: "error";
|
|
301
300
|
trace: "trace";
|
|
302
301
|
debug: "debug";
|
|
303
302
|
info: "info";
|
|
304
303
|
warn: "warn";
|
|
304
|
+
error: "error";
|
|
305
305
|
fatal: "fatal";
|
|
306
306
|
}>>;
|
|
307
307
|
max_concurrent_tasks: z.ZodOptional<z.ZodNumber>;
|
|
@@ -315,9 +315,9 @@ export declare const PartialSubstrateConfigSchema: z.ZodObject<{
|
|
|
315
315
|
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
316
316
|
cli_path: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
317
317
|
subscription_routing: z.ZodOptional<z.ZodEnum<{
|
|
318
|
-
auto: "auto";
|
|
319
318
|
subscription: "subscription";
|
|
320
319
|
api: "api";
|
|
320
|
+
auto: "auto";
|
|
321
321
|
disabled: "disabled";
|
|
322
322
|
}>>;
|
|
323
323
|
max_concurrent: z.ZodOptional<z.ZodNumber>;
|
|
@@ -332,9 +332,9 @@ export declare const PartialSubstrateConfigSchema: z.ZodObject<{
|
|
|
332
332
|
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
333
333
|
cli_path: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
334
334
|
subscription_routing: z.ZodOptional<z.ZodEnum<{
|
|
335
|
-
auto: "auto";
|
|
336
335
|
subscription: "subscription";
|
|
337
336
|
api: "api";
|
|
337
|
+
auto: "auto";
|
|
338
338
|
disabled: "disabled";
|
|
339
339
|
}>>;
|
|
340
340
|
max_concurrent: z.ZodOptional<z.ZodNumber>;
|
|
@@ -349,9 +349,9 @@ export declare const PartialSubstrateConfigSchema: z.ZodObject<{
|
|
|
349
349
|
enabled: z.ZodOptional<z.ZodBoolean>;
|
|
350
350
|
cli_path: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
351
351
|
subscription_routing: z.ZodOptional<z.ZodEnum<{
|
|
352
|
-
auto: "auto";
|
|
353
352
|
subscription: "subscription";
|
|
354
353
|
api: "api";
|
|
354
|
+
auto: "auto";
|
|
355
355
|
disabled: "disabled";
|
|
356
356
|
}>>;
|
|
357
357
|
max_concurrent: z.ZodOptional<z.ZodNumber>;
|
package/package.json
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@substrate-ai/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.20.2",
|
|
4
4
|
"type": "module",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "https://github.com/johnplanow/substrate.git",
|
|
9
|
+
"directory": "packages/core"
|
|
10
|
+
},
|
|
5
11
|
"main": "./dist/index.js",
|
|
6
12
|
"types": "./dist/index.d.ts",
|
|
7
13
|
"exports": {
|
|
@@ -16,12 +22,20 @@
|
|
|
16
22
|
"scripts": {
|
|
17
23
|
"build": "tsc -b"
|
|
18
24
|
},
|
|
25
|
+
"engines": {
|
|
26
|
+
"node": ">=22.0.0"
|
|
27
|
+
},
|
|
19
28
|
"dependencies": {
|
|
20
29
|
"js-yaml": "^4.1.1",
|
|
21
30
|
"semver": "^7.6.3",
|
|
22
31
|
"zod": "^4.3.6"
|
|
23
32
|
},
|
|
24
|
-
"
|
|
33
|
+
"peerDependencies": {
|
|
25
34
|
"mysql2": "^3.20.0"
|
|
35
|
+
},
|
|
36
|
+
"peerDependenciesMeta": {
|
|
37
|
+
"mysql2": {
|
|
38
|
+
"optional": true
|
|
39
|
+
}
|
|
26
40
|
}
|
|
27
41
|
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Unit tests for packages/core/src/persistence/adapter.ts
|
|
3
|
-
*
|
|
4
|
-
* Tests the createDatabaseAdapter() factory function with all three backend
|
|
5
|
-
* modes (auto, memory, dolt), Dolt availability detection, fallback logic,
|
|
6
|
-
* and warning messages.
|
|
7
|
-
*
|
|
8
|
-
* All filesystem and child_process interactions are mocked — no real Dolt
|
|
9
|
-
* installation is required.
|
|
10
|
-
*/
|
|
11
|
-
export {};
|
|
12
|
-
//# sourceMappingURL=adapter.test.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/adapter.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
|
|
@@ -1,259 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Unit tests for packages/core/src/persistence/adapter.ts
|
|
3
|
-
*
|
|
4
|
-
* Tests the createDatabaseAdapter() factory function with all three backend
|
|
5
|
-
* modes (auto, memory, dolt), Dolt availability detection, fallback logic,
|
|
6
|
-
* and warning messages.
|
|
7
|
-
*
|
|
8
|
-
* All filesystem and child_process interactions are mocked — no real Dolt
|
|
9
|
-
* installation is required.
|
|
10
|
-
*/
|
|
11
|
-
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
12
|
-
import { createDatabaseAdapter } from '../persistence/adapter.js';
|
|
13
|
-
import { DoltDatabaseAdapter } from '../persistence/dolt-adapter.js';
|
|
14
|
-
import { InMemoryDatabaseAdapter } from '../persistence/memory-adapter.js';
|
|
15
|
-
// ---------------------------------------------------------------------------
|
|
16
|
-
// Mock node:child_process and node:fs
|
|
17
|
-
// ---------------------------------------------------------------------------
|
|
18
|
-
vi.mock('node:child_process', () => ({
|
|
19
|
-
spawnSync: vi.fn(),
|
|
20
|
-
}));
|
|
21
|
-
vi.mock('node:fs', () => ({
|
|
22
|
-
existsSync: vi.fn(),
|
|
23
|
-
}));
|
|
24
|
-
import { spawnSync } from 'node:child_process';
|
|
25
|
-
import { existsSync } from 'node:fs';
|
|
26
|
-
const mockedSpawnSync = vi.mocked(spawnSync);
|
|
27
|
-
const mockedExistsSync = vi.mocked(existsSync);
|
|
28
|
-
// ---------------------------------------------------------------------------
|
|
29
|
-
// Helper: create a mock DoltClientLike factory
|
|
30
|
-
// ---------------------------------------------------------------------------
|
|
31
|
-
function makeMockDoltClientFactory() {
|
|
32
|
-
const mockClient = {
|
|
33
|
-
query: vi.fn().mockResolvedValue([]),
|
|
34
|
-
close: vi.fn().mockResolvedValue(undefined),
|
|
35
|
-
};
|
|
36
|
-
const factory = vi.fn().mockReturnValue(mockClient);
|
|
37
|
-
return { factory, mockClient };
|
|
38
|
-
}
|
|
39
|
-
// ---------------------------------------------------------------------------
|
|
40
|
-
// Helper: configure mocks so isDoltAvailable returns true
|
|
41
|
-
// ---------------------------------------------------------------------------
|
|
42
|
-
function configureDoltAvailable() {
|
|
43
|
-
mockedExistsSync.mockReturnValue(true);
|
|
44
|
-
mockedSpawnSync.mockReturnValue({
|
|
45
|
-
status: 0,
|
|
46
|
-
pid: 1,
|
|
47
|
-
output: [],
|
|
48
|
-
stdout: Buffer.from(''),
|
|
49
|
-
stderr: Buffer.from(''),
|
|
50
|
-
signal: null,
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
// ---------------------------------------------------------------------------
|
|
54
|
-
// Helper: configure mocks so isDoltAvailable returns false (no .dolt dir)
|
|
55
|
-
// ---------------------------------------------------------------------------
|
|
56
|
-
function configureDoltUnavailable() {
|
|
57
|
-
mockedExistsSync.mockReturnValue(false);
|
|
58
|
-
mockedSpawnSync.mockReturnValue({
|
|
59
|
-
error: new Error('ENOENT'),
|
|
60
|
-
status: null,
|
|
61
|
-
pid: 0,
|
|
62
|
-
output: [],
|
|
63
|
-
stdout: Buffer.from(''),
|
|
64
|
-
stderr: Buffer.from(''),
|
|
65
|
-
signal: null,
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
// ---------------------------------------------------------------------------
|
|
69
|
-
// Helper: configure mocks so .dolt dir exists but binary fails
|
|
70
|
-
// ---------------------------------------------------------------------------
|
|
71
|
-
function configureDoltDirExistsBinaryFails() {
|
|
72
|
-
mockedExistsSync.mockReturnValue(true);
|
|
73
|
-
mockedSpawnSync.mockReturnValue({
|
|
74
|
-
error: new Error('ENOENT'),
|
|
75
|
-
status: null,
|
|
76
|
-
pid: 0,
|
|
77
|
-
output: [],
|
|
78
|
-
stdout: Buffer.from(''),
|
|
79
|
-
stderr: Buffer.from(''),
|
|
80
|
-
signal: null,
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
// ---------------------------------------------------------------------------
|
|
84
|
-
// Tests
|
|
85
|
-
// ---------------------------------------------------------------------------
|
|
86
|
-
describe('createDatabaseAdapter', () => {
|
|
87
|
-
beforeEach(() => {
|
|
88
|
-
vi.clearAllMocks();
|
|
89
|
-
});
|
|
90
|
-
afterEach(() => {
|
|
91
|
-
vi.restoreAllMocks();
|
|
92
|
-
});
|
|
93
|
-
// -------------------------------------------------------------------------
|
|
94
|
-
// backend = 'memory'
|
|
95
|
-
// -------------------------------------------------------------------------
|
|
96
|
-
describe('backend = "memory"', () => {
|
|
97
|
-
it('returns an InMemoryDatabaseAdapter regardless of Dolt availability', () => {
|
|
98
|
-
configureDoltAvailable();
|
|
99
|
-
const adapter = createDatabaseAdapter({ backend: 'memory' });
|
|
100
|
-
expect(adapter).toBeInstanceOf(InMemoryDatabaseAdapter);
|
|
101
|
-
// Should not probe Dolt at all
|
|
102
|
-
expect(mockedExistsSync).not.toHaveBeenCalled();
|
|
103
|
-
expect(mockedSpawnSync).not.toHaveBeenCalled();
|
|
104
|
-
});
|
|
105
|
-
it('does not call the doltClientFactory when backend is memory', () => {
|
|
106
|
-
const { factory } = makeMockDoltClientFactory();
|
|
107
|
-
const adapter = createDatabaseAdapter({ backend: 'memory' }, factory);
|
|
108
|
-
expect(adapter).toBeInstanceOf(InMemoryDatabaseAdapter);
|
|
109
|
-
expect(factory).not.toHaveBeenCalled();
|
|
110
|
-
});
|
|
111
|
-
});
|
|
112
|
-
// -------------------------------------------------------------------------
|
|
113
|
-
// backend = 'dolt'
|
|
114
|
-
// -------------------------------------------------------------------------
|
|
115
|
-
describe('backend = "dolt"', () => {
|
|
116
|
-
it('returns a DoltDatabaseAdapter when factory is provided', () => {
|
|
117
|
-
const { factory, mockClient } = makeMockDoltClientFactory();
|
|
118
|
-
const adapter = createDatabaseAdapter({ backend: 'dolt', basePath: '/tmp/test-project' }, factory);
|
|
119
|
-
expect(adapter).toBeInstanceOf(DoltDatabaseAdapter);
|
|
120
|
-
expect(factory).toHaveBeenCalledWith('/tmp/test-project/.substrate/state');
|
|
121
|
-
});
|
|
122
|
-
it('falls back to InMemoryDatabaseAdapter when no factory is provided', () => {
|
|
123
|
-
const warnSpy = vi.spyOn(console, 'debug').mockImplementation(() => { });
|
|
124
|
-
const adapter = createDatabaseAdapter({ backend: 'dolt' });
|
|
125
|
-
expect(adapter).toBeInstanceOf(InMemoryDatabaseAdapter);
|
|
126
|
-
expect(warnSpy).toHaveBeenCalledWith(expect.stringContaining('no doltClientFactory provided'));
|
|
127
|
-
});
|
|
128
|
-
});
|
|
129
|
-
// -------------------------------------------------------------------------
|
|
130
|
-
// backend = 'auto'
|
|
131
|
-
// -------------------------------------------------------------------------
|
|
132
|
-
describe('backend = "auto"', () => {
|
|
133
|
-
it('returns DoltDatabaseAdapter when Dolt is available and factory provided', () => {
|
|
134
|
-
configureDoltAvailable();
|
|
135
|
-
const { factory } = makeMockDoltClientFactory();
|
|
136
|
-
const adapter = createDatabaseAdapter({ backend: 'auto', basePath: '/tmp/test-project' }, factory);
|
|
137
|
-
expect(adapter).toBeInstanceOf(DoltDatabaseAdapter);
|
|
138
|
-
expect(factory).toHaveBeenCalledWith('/tmp/test-project/.substrate/state');
|
|
139
|
-
});
|
|
140
|
-
it('returns InMemoryDatabaseAdapter when Dolt dir does not exist', () => {
|
|
141
|
-
configureDoltUnavailable();
|
|
142
|
-
const { factory } = makeMockDoltClientFactory();
|
|
143
|
-
const adapter = createDatabaseAdapter({ backend: 'auto', basePath: '/tmp/test-project' }, factory);
|
|
144
|
-
expect(adapter).toBeInstanceOf(InMemoryDatabaseAdapter);
|
|
145
|
-
// Factory should NOT be called since Dolt is unavailable
|
|
146
|
-
expect(factory).not.toHaveBeenCalled();
|
|
147
|
-
});
|
|
148
|
-
it('returns InMemoryDatabaseAdapter when no factory is provided even if Dolt is available', () => {
|
|
149
|
-
configureDoltAvailable();
|
|
150
|
-
const adapter = createDatabaseAdapter({
|
|
151
|
-
backend: 'auto',
|
|
152
|
-
basePath: '/tmp/test-project',
|
|
153
|
-
});
|
|
154
|
-
expect(adapter).toBeInstanceOf(InMemoryDatabaseAdapter);
|
|
155
|
-
});
|
|
156
|
-
it('defaults backend to "auto" when config is undefined', () => {
|
|
157
|
-
configureDoltUnavailable();
|
|
158
|
-
const adapter = createDatabaseAdapter();
|
|
159
|
-
expect(adapter).toBeInstanceOf(InMemoryDatabaseAdapter);
|
|
160
|
-
});
|
|
161
|
-
it('defaults basePath to process.cwd() when not specified', () => {
|
|
162
|
-
configureDoltAvailable();
|
|
163
|
-
const { factory } = makeMockDoltClientFactory();
|
|
164
|
-
const cwd = process.cwd();
|
|
165
|
-
const adapter = createDatabaseAdapter({ backend: 'auto' }, factory);
|
|
166
|
-
expect(adapter).toBeInstanceOf(DoltDatabaseAdapter);
|
|
167
|
-
expect(factory).toHaveBeenCalledWith(`${cwd}/.substrate/state`);
|
|
168
|
-
});
|
|
169
|
-
});
|
|
170
|
-
// -------------------------------------------------------------------------
|
|
171
|
-
// isDoltAvailable — retry logic
|
|
172
|
-
// -------------------------------------------------------------------------
|
|
173
|
-
describe('isDoltAvailable retry logic (via auto backend)', () => {
|
|
174
|
-
it('retries once when .dolt dir exists but binary fails, then succeeds', () => {
|
|
175
|
-
const warnSpy = vi.spyOn(console, 'warn').mockImplementation(() => { });
|
|
176
|
-
// .dolt directory exists
|
|
177
|
-
mockedExistsSync.mockReturnValue(true);
|
|
178
|
-
// First call to `dolt version` fails, retry succeeds
|
|
179
|
-
let callCount = 0;
|
|
180
|
-
mockedSpawnSync.mockImplementation((cmd) => {
|
|
181
|
-
if (cmd === 'dolt') {
|
|
182
|
-
callCount++;
|
|
183
|
-
if (callCount <= 1) {
|
|
184
|
-
// First attempt: binary unavailable
|
|
185
|
-
return {
|
|
186
|
-
error: new Error('ENOENT'),
|
|
187
|
-
status: null,
|
|
188
|
-
pid: 0,
|
|
189
|
-
output: [],
|
|
190
|
-
stdout: Buffer.from(''),
|
|
191
|
-
stderr: Buffer.from(''),
|
|
192
|
-
signal: null,
|
|
193
|
-
};
|
|
194
|
-
}
|
|
195
|
-
// Retry: binary available
|
|
196
|
-
return {
|
|
197
|
-
status: 0,
|
|
198
|
-
pid: 1,
|
|
199
|
-
output: [],
|
|
200
|
-
stdout: Buffer.from(''),
|
|
201
|
-
stderr: Buffer.from(''),
|
|
202
|
-
signal: null,
|
|
203
|
-
};
|
|
204
|
-
}
|
|
205
|
-
// sleep call
|
|
206
|
-
return {
|
|
207
|
-
status: 0,
|
|
208
|
-
pid: 1,
|
|
209
|
-
output: [],
|
|
210
|
-
stdout: Buffer.from(''),
|
|
211
|
-
stderr: Buffer.from(''),
|
|
212
|
-
signal: null,
|
|
213
|
-
};
|
|
214
|
-
});
|
|
215
|
-
const { factory } = makeMockDoltClientFactory();
|
|
216
|
-
const adapter = createDatabaseAdapter({ backend: 'auto', basePath: '/tmp/test-project' }, factory);
|
|
217
|
-
expect(adapter).toBeInstanceOf(DoltDatabaseAdapter);
|
|
218
|
-
// Should have warned about the retry
|
|
219
|
-
expect(warnSpy).toHaveBeenCalledWith(expect.stringContaining('retrying once'));
|
|
220
|
-
});
|
|
221
|
-
it('falls back to InMemory with warning when .dolt dir exists but binary fails on both attempts', () => {
|
|
222
|
-
const warnSpy = vi.spyOn(console, 'warn').mockImplementation(() => { });
|
|
223
|
-
configureDoltDirExistsBinaryFails();
|
|
224
|
-
const { factory } = makeMockDoltClientFactory();
|
|
225
|
-
const adapter = createDatabaseAdapter({ backend: 'auto', basePath: '/tmp/test-project' }, factory);
|
|
226
|
-
expect(adapter).toBeInstanceOf(InMemoryDatabaseAdapter);
|
|
227
|
-
// Should warn about retry and about final fallback
|
|
228
|
-
expect(warnSpy).toHaveBeenCalledWith(expect.stringContaining('retrying once'));
|
|
229
|
-
expect(warnSpy).toHaveBeenCalledWith(expect.stringContaining('still unavailable after retry'));
|
|
230
|
-
});
|
|
231
|
-
});
|
|
232
|
-
// -------------------------------------------------------------------------
|
|
233
|
-
// backendType property
|
|
234
|
-
// -------------------------------------------------------------------------
|
|
235
|
-
describe('backendType property', () => {
|
|
236
|
-
it('InMemoryDatabaseAdapter has backendType "memory"', () => {
|
|
237
|
-
configureDoltUnavailable();
|
|
238
|
-
const adapter = createDatabaseAdapter({ backend: 'memory' });
|
|
239
|
-
expect(adapter.backendType).toBe('memory');
|
|
240
|
-
});
|
|
241
|
-
it('DoltDatabaseAdapter has backendType "dolt"', () => {
|
|
242
|
-
configureDoltAvailable();
|
|
243
|
-
const { factory } = makeMockDoltClientFactory();
|
|
244
|
-
const adapter = createDatabaseAdapter({ backend: 'auto', basePath: '/tmp/test-project' }, factory);
|
|
245
|
-
expect(adapter.backendType).toBe('dolt');
|
|
246
|
-
});
|
|
247
|
-
});
|
|
248
|
-
// -------------------------------------------------------------------------
|
|
249
|
-
// Edge cases
|
|
250
|
-
// -------------------------------------------------------------------------
|
|
251
|
-
describe('edge cases', () => {
|
|
252
|
-
it('handles backend=undefined in config (defaults to auto)', () => {
|
|
253
|
-
configureDoltUnavailable();
|
|
254
|
-
const adapter = createDatabaseAdapter({ backend: 'auto' });
|
|
255
|
-
expect(adapter).toBeInstanceOf(InMemoryDatabaseAdapter);
|
|
256
|
-
});
|
|
257
|
-
});
|
|
258
|
-
});
|
|
259
|
-
//# sourceMappingURL=adapter.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.test.js","sourceRoot":"","sources":["../../src/__tests__/adapter.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAA;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAA;AAE1E,8EAA8E;AAC9E,sCAAsC;AACtC,8EAA8E;AAE9E,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC,CAAC;IACnC,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE;CACnB,CAAC,CAAC,CAAA;AAEH,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;IACxB,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE;CACpB,CAAC,CAAC,CAAA;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEpC,MAAM,eAAe,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;AAC5C,MAAM,gBAAgB,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;AAE9C,8EAA8E;AAC9E,+CAA+C;AAC/C,8EAA8E;AAE9E,SAAS,yBAAyB;IAChC,MAAM,UAAU,GAAG;QACjB,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACpC,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;KAC5C,CAAA;IACD,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,UAAU,CAAC,CAAA;IACnD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAA;AAChC,CAAC;AAED,8EAA8E;AAC9E,0DAA0D;AAC1D,8EAA8E;AAE9E,SAAS,sBAAsB;IAC7B,gBAAgB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IACtC,eAAe,CAAC,eAAe,CAAC;QAC9B,MAAM,EAAE,CAAC;QACT,GAAG,EAAE,CAAC;QACN,MAAM,EAAE,EAAE;QACV,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,MAAM,EAAE,IAAI;KAC8B,CAAC,CAAA;AAC/C,CAAC;AAED,8EAA8E;AAC9E,0EAA0E;AAC1E,8EAA8E;AAE9E,SAAS,wBAAwB;IAC/B,gBAAgB,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;IACvC,eAAe,CAAC,eAAe,CAAC;QAC9B,KAAK,EAAE,IAAI,KAAK,CAAC,QAAQ,CAAC;QAC1B,MAAM,EAAE,IAAI;QACZ,GAAG,EAAE,CAAC;QACN,MAAM,EAAE,EAAE;QACV,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,MAAM,EAAE,IAAI;KAC8B,CAAC,CAAA;AAC/C,CAAC;AAED,8EAA8E;AAC9E,+DAA+D;AAC/D,8EAA8E;AAE9E,SAAS,iCAAiC;IACxC,gBAAgB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;IACtC,eAAe,CAAC,eAAe,CAAC;QAC9B,KAAK,EAAE,IAAI,KAAK,CAAC,QAAQ,CAAC;QAC1B,MAAM,EAAE,IAAI;QACZ,GAAG,EAAE,CAAC;QACN,MAAM,EAAE,EAAE;QACV,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,MAAM,EAAE,IAAI;KAC8B,CAAC,CAAA;AAC/C,CAAC;AAED,8EAA8E;AAC9E,QAAQ;AACR,8EAA8E;AAE9E,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAA;IACpB,CAAC,CAAC,CAAA;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,eAAe,EAAE,CAAA;IACtB,CAAC,CAAC,CAAA;IAEF,4EAA4E;IAC5E,qBAAqB;IACrB,4EAA4E;IAE5E,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;YAC5E,sBAAsB,EAAE,CAAA;YAExB,MAAM,OAAO,GAAG,qBAAqB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAA;YAE5D,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,uBAAuB,CAAC,CAAA;YACvD,+BAA+B;YAC/B,MAAM,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;YAC/C,MAAM,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;QAChD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;YACpE,MAAM,EAAE,OAAO,EAAE,GAAG,yBAAyB,EAAE,CAAA;YAE/C,MAAM,OAAO,GAAG,qBAAqB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAA;YAErE,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,uBAAuB,CAAC,CAAA;YACvD,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;QACxC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,4EAA4E;IAC5E,mBAAmB;IACnB,4EAA4E;IAE5E,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAChC,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;YAChE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,yBAAyB,EAAE,CAAA;YAE3D,MAAM,OAAO,GAAG,qBAAqB,CACnC,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,mBAAmB,EAAE,EAClD,OAAO,CACR,CAAA;YAED,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAA;YACnD,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,oCAAoC,CAAC,CAAA;QAC5E,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;YAC3E,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;YAEvE,MAAM,OAAO,GAAG,qBAAqB,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAA;YAE1D,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,uBAAuB,CAAC,CAAA;YACvD,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAClC,MAAM,CAAC,gBAAgB,CAAC,+BAA+B,CAAC,CACzD,CAAA;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,4EAA4E;IAC5E,mBAAmB;IACnB,4EAA4E;IAE5E,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAChC,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;YACjF,sBAAsB,EAAE,CAAA;YACxB,MAAM,EAAE,OAAO,EAAE,GAAG,yBAAyB,EAAE,CAAA;YAE/C,MAAM,OAAO,GAAG,qBAAqB,CACnC,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,mBAAmB,EAAE,EAClD,OAAO,CACR,CAAA;YAED,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAA;YACnD,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,oCAAoC,CAAC,CAAA;QAC5E,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;YACtE,wBAAwB,EAAE,CAAA;YAC1B,MAAM,EAAE,OAAO,EAAE,GAAG,yBAAyB,EAAE,CAAA;YAE/C,MAAM,OAAO,GAAG,qBAAqB,CACnC,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,mBAAmB,EAAE,EAClD,OAAO,CACR,CAAA;YAED,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,uBAAuB,CAAC,CAAA;YACvD,yDAAyD;YACzD,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;QACxC,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,uFAAuF,EAAE,GAAG,EAAE;YAC/F,sBAAsB,EAAE,CAAA;YAExB,MAAM,OAAO,GAAG,qBAAqB,CAAC;gBACpC,OAAO,EAAE,MAAM;gBACf,QAAQ,EAAE,mBAAmB;aAC9B,CAAC,CAAA;YAEF,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,uBAAuB,CAAC,CAAA;QACzD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;YAC7D,wBAAwB,EAAE,CAAA;YAE1B,MAAM,OAAO,GAAG,qBAAqB,EAAE,CAAA;YAEvC,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,uBAAuB,CAAC,CAAA;QACzD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;YAC/D,sBAAsB,EAAE,CAAA;YACxB,MAAM,EAAE,OAAO,EAAE,GAAG,yBAAyB,EAAE,CAAA;YAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;YAEzB,MAAM,OAAO,GAAG,qBAAqB,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,CAAA;YAEnE,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAA;YACnD,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,GAAG,GAAG,mBAAmB,CAAC,CAAA;QACjE,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,4EAA4E;IAC5E,gCAAgC;IAChC,4EAA4E;IAE5E,QAAQ,CAAC,gDAAgD,EAAE,GAAG,EAAE;QAC9D,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;YAC5E,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;YACtE,yBAAyB;YACzB,gBAAgB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;YAEtC,qDAAqD;YACrD,IAAI,SAAS,GAAG,CAAC,CAAA;YACjB,eAAe,CAAC,kBAAkB,CAAC,CAAC,GAAW,EAAE,EAAE;gBACjD,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;oBACnB,SAAS,EAAE,CAAA;oBACX,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;wBACnB,oCAAoC;wBACpC,OAAO;4BACL,KAAK,EAAE,IAAI,KAAK,CAAC,QAAQ,CAAC;4BAC1B,MAAM,EAAE,IAAI;4BACZ,GAAG,EAAE,CAAC;4BACN,MAAM,EAAE,EAAE;4BACV,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;4BACvB,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;4BACvB,MAAM,EAAE,IAAI;yBAC8B,CAAA;oBAC9C,CAAC;oBACD,0BAA0B;oBAC1B,OAAO;wBACL,MAAM,EAAE,CAAC;wBACT,GAAG,EAAE,CAAC;wBACN,MAAM,EAAE,EAAE;wBACV,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;wBACvB,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;wBACvB,MAAM,EAAE,IAAI;qBAC8B,CAAA;gBAC9C,CAAC;gBACD,aAAa;gBACb,OAAO;oBACL,MAAM,EAAE,CAAC;oBACT,GAAG,EAAE,CAAC;oBACN,MAAM,EAAE,EAAE;oBACV,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;oBACvB,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;oBACvB,MAAM,EAAE,IAAI;iBAC8B,CAAA;YAC9C,CAAC,CAAC,CAAA;YAEF,MAAM,EAAE,OAAO,EAAE,GAAG,yBAAyB,EAAE,CAAA;YAE/C,MAAM,OAAO,GAAG,qBAAqB,CACnC,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,mBAAmB,EAAE,EAClD,OAAO,CACR,CAAA;YAED,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAA;YACnD,qCAAqC;YACrC,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAClC,MAAM,CAAC,gBAAgB,CAAC,eAAe,CAAC,CACzC,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,6FAA6F,EAAE,GAAG,EAAE;YACrG,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;YACtE,iCAAiC,EAAE,CAAA;YACnC,MAAM,EAAE,OAAO,EAAE,GAAG,yBAAyB,EAAE,CAAA;YAE/C,MAAM,OAAO,GAAG,qBAAqB,CACnC,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,mBAAmB,EAAE,EAClD,OAAO,CACR,CAAA;YAED,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,uBAAuB,CAAC,CAAA;YACvD,mDAAmD;YACnD,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAClC,MAAM,CAAC,gBAAgB,CAAC,eAAe,CAAC,CACzC,CAAA;YACD,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAClC,MAAM,CAAC,gBAAgB,CAAC,+BAA+B,CAAC,CACzD,CAAA;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,4EAA4E;IAC5E,uBAAuB;IACvB,4EAA4E;IAE5E,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACpC,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;YAC1D,wBAAwB,EAAE,CAAA;YAC1B,MAAM,OAAO,GAAG,qBAAqB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAA;YAC5D,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC5C,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,sBAAsB,EAAE,CAAA;YACxB,MAAM,EAAE,OAAO,EAAE,GAAG,yBAAyB,EAAE,CAAA;YAC/C,MAAM,OAAO,GAAG,qBAAqB,CACnC,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,mBAAmB,EAAE,EAClD,OAAO,CACR,CAAA;YACD,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAC1C,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,4EAA4E;IAC5E,aAAa;IACb,4EAA4E;IAE5E,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;YAChE,wBAAwB,EAAE,CAAA;YAE1B,MAAM,OAAO,GAAG,qBAAqB,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAA;YAE1D,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,uBAAuB,CAAC,CAAA;QACzD,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Unit tests for packages/core/src/events/event-bus.ts
|
|
3
|
-
*
|
|
4
|
-
* Tests the TypedEventBusImpl class and createEventBus factory:
|
|
5
|
-
* - Basic emit/on/off lifecycle
|
|
6
|
-
* - Typed event emission with correct payload delivery
|
|
7
|
-
* - Multiple handlers for same event
|
|
8
|
-
* - Handler removal (off)
|
|
9
|
-
* - Synchronous dispatch guarantee
|
|
10
|
-
* - Multiple event types coexisting
|
|
11
|
-
* - createEventBus factory returns working instance
|
|
12
|
-
*/
|
|
13
|
-
export {};
|
|
14
|
-
//# sourceMappingURL=event-bus.test.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"event-bus.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/event-bus.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}
|