@livestore/cli 0.0.0-snapshot-0f27d343553b9bb260543bf20de36d216f53c5d8 → 0.0.0-snapshot-b2da08eec7583e23c0679970016a84b93438039e
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.d.ts +1 -15
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +1 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/mcp-coach.d.ts +2 -2
- package/dist/commands/mcp-coach.d.ts.map +1 -1
- package/dist/commands/mcp-tool-handlers.d.ts +1 -5
- package/dist/commands/mcp-tool-handlers.d.ts.map +1 -1
- package/dist/commands/mcp-tool-handlers.js +4 -42
- package/dist/commands/mcp-tool-handlers.js.map +1 -1
- package/dist/commands/mcp-tools-defs.d.ts +1 -31
- package/dist/commands/mcp-tools-defs.d.ts.map +1 -1
- package/dist/commands/mcp-tools-defs.js +5 -87
- package/dist/commands/mcp-tools-defs.js.map +1 -1
- package/dist/commands/new-project.d.ts +1 -1
- package/dist/mcp-runtime/runtime.d.ts +3 -4
- package/dist/mcp-runtime/runtime.d.ts.map +1 -1
- package/dist/mcp-runtime/runtime.js +53 -20
- package/dist/mcp-runtime/runtime.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -15
- package/src/cli.ts +1 -2
- package/src/commands/mcp-tool-handlers.ts +5 -50
- package/src/commands/mcp-tools-defs.ts +4 -92
- package/src/mcp-runtime/runtime.ts +65 -32
- package/dist/__tests__/fixtures/mock-config.d.ts +0 -56
- package/dist/__tests__/fixtures/mock-config.d.ts.map +0 -1
- package/dist/__tests__/fixtures/mock-config.js +0 -88
- package/dist/__tests__/fixtures/mock-config.js.map +0 -1
- package/dist/__tests__/sync-operations.test.d.ts +0 -2
- package/dist/__tests__/sync-operations.test.d.ts.map +0 -1
- package/dist/__tests__/sync-operations.test.js +0 -167
- package/dist/__tests__/sync-operations.test.js.map +0 -1
- package/dist/commands/import-export.d.ts +0 -34
- package/dist/commands/import-export.d.ts.map +0 -1
- package/dist/commands/import-export.js +0 -133
- package/dist/commands/import-export.js.map +0 -1
- package/dist/module-loader.d.ts +0 -22
- package/dist/module-loader.d.ts.map +0 -1
- package/dist/module-loader.js +0 -75
- package/dist/module-loader.js.map +0 -1
- package/dist/sync-operations.d.ts +0 -121
- package/dist/sync-operations.d.ts.map +0 -1
- package/dist/sync-operations.js +0 -180
- package/dist/sync-operations.js.map +0 -1
- package/src/__tests__/fixtures/mock-config.ts +0 -104
- package/src/__tests__/sync-operations.test.ts +0 -230
- package/src/commands/import-export.ts +0 -278
- package/src/module-loader.ts +0 -93
- package/src/sync-operations.ts +0 -360
|
@@ -1,167 +0,0 @@
|
|
|
1
|
-
import { Chunk, Effect, FetchHttpClient, Layer, Mailbox, Stream } from '@livestore/utils/effect';
|
|
2
|
-
import { PlatformNode } from '@livestore/utils/node';
|
|
3
|
-
import { Vitest } from '@livestore/utils-dev/node-vitest';
|
|
4
|
-
import { expect } from 'vitest';
|
|
5
|
-
import { pullEventsFromSyncBackend, pushEventsToSyncBackend } from "../sync-operations.js";
|
|
6
|
-
import { makeEventFactory, useMockConfig } from "./fixtures/mock-config.js";
|
|
7
|
-
const baseLayer = Layer.mergeAll(PlatformNode.NodeFileSystem.layer, FetchHttpClient.layer);
|
|
8
|
-
const withTestCtx = Vitest.makeWithTestCtx({ makeLayer: () => baseLayer });
|
|
9
|
-
/** Each test acquires its own temporary config module via useMockConfig, avoiding shared state. */
|
|
10
|
-
Vitest.describe('sync-operations', { timeout: 10_000 }, () => {
|
|
11
|
-
const storeId = 'test-store';
|
|
12
|
-
const clientId = 'test-client';
|
|
13
|
-
/** Collects the connect + disconnect lifecycle emitted by the mock sync backend. */
|
|
14
|
-
const expectConnectLifecycle = (mailbox) => Mailbox.toStream(mailbox).pipe(Stream.take(2), Stream.runCollect, Effect.map((chunk) => Chunk.toReadonlyArray(chunk)));
|
|
15
|
-
Vitest.scopedLive('exports events and releases the backend connection', (test) => Effect.gen(function* () {
|
|
16
|
-
const { mockBackend, connectionEvents, configPath } = yield* useMockConfig;
|
|
17
|
-
const factory = makeEventFactory();
|
|
18
|
-
const batch = [
|
|
19
|
-
factory.itemAdded.next({ id: 'e1', title: 'First' }),
|
|
20
|
-
factory.itemAdded.next({ id: 'e2', title: 'Second' }),
|
|
21
|
-
];
|
|
22
|
-
yield* mockBackend.advance(...batch);
|
|
23
|
-
const result = yield* pullEventsFromSyncBackend({
|
|
24
|
-
configPath,
|
|
25
|
-
storeId,
|
|
26
|
-
clientId,
|
|
27
|
-
});
|
|
28
|
-
expect(result.eventCount).toBe(2);
|
|
29
|
-
expect(result.data.events).toHaveLength(2);
|
|
30
|
-
const lifecycle = yield* expectConnectLifecycle(connectionEvents);
|
|
31
|
-
expect(lifecycle).toEqual(['connect', 'disconnect']);
|
|
32
|
-
}).pipe(withTestCtx(test)));
|
|
33
|
-
Vitest.scopedLive('fails import when backend is not empty', (test) => Effect.gen(function* () {
|
|
34
|
-
const { mockBackend, connectionEvents, configPath } = yield* useMockConfig;
|
|
35
|
-
const factory = makeEventFactory();
|
|
36
|
-
yield* mockBackend.advance(factory.itemAdded.next({ id: 'existing', title: 'Present' }));
|
|
37
|
-
const importBatch = [
|
|
38
|
-
factory.itemAdded.next({ id: 'incoming-1', title: 'Incoming' }),
|
|
39
|
-
factory.itemAdded.next({ id: 'incoming-2', title: 'Incoming 2' }),
|
|
40
|
-
];
|
|
41
|
-
const result = yield* pushEventsToSyncBackend({
|
|
42
|
-
configPath,
|
|
43
|
-
storeId,
|
|
44
|
-
clientId,
|
|
45
|
-
data: {
|
|
46
|
-
version: 1,
|
|
47
|
-
storeId,
|
|
48
|
-
exportedAt: new Date().toISOString(),
|
|
49
|
-
eventCount: importBatch.length,
|
|
50
|
-
events: importBatch,
|
|
51
|
-
},
|
|
52
|
-
force: false,
|
|
53
|
-
dryRun: false,
|
|
54
|
-
}).pipe(Effect.either);
|
|
55
|
-
expect(result._tag).toBe('Left');
|
|
56
|
-
if (result._tag === 'Left') {
|
|
57
|
-
expect(result.left._tag).toBe('ImportError');
|
|
58
|
-
}
|
|
59
|
-
const lifecycle = yield* expectConnectLifecycle(connectionEvents);
|
|
60
|
-
expect(lifecycle).toEqual(['connect', 'disconnect']);
|
|
61
|
-
}).pipe(withTestCtx(test)));
|
|
62
|
-
Vitest.scopedLive('supports dry-run import and releases backend', (test) => Effect.gen(function* () {
|
|
63
|
-
const { configPath, connectionEvents } = yield* useMockConfig;
|
|
64
|
-
const factory = makeEventFactory();
|
|
65
|
-
const importBatch = [factory.itemAdded.next({ id: 'dry-run', title: 'Simulated' })];
|
|
66
|
-
const result = yield* pushEventsToSyncBackend({
|
|
67
|
-
configPath,
|
|
68
|
-
storeId,
|
|
69
|
-
clientId,
|
|
70
|
-
data: {
|
|
71
|
-
version: 1,
|
|
72
|
-
storeId,
|
|
73
|
-
exportedAt: new Date().toISOString(),
|
|
74
|
-
eventCount: importBatch.length,
|
|
75
|
-
events: importBatch,
|
|
76
|
-
},
|
|
77
|
-
force: false,
|
|
78
|
-
dryRun: true,
|
|
79
|
-
});
|
|
80
|
-
expect(result.dryRun).toBe(true);
|
|
81
|
-
expect(result.eventCount).toBe(importBatch.length);
|
|
82
|
-
const lifecycle = yield* expectConnectLifecycle(connectionEvents);
|
|
83
|
-
expect(lifecycle).toEqual(['connect', 'disconnect']);
|
|
84
|
-
}).pipe(withTestCtx(test)));
|
|
85
|
-
Vitest.scopedLive('imports events into empty backend with progress and batching', (test) => Effect.gen(function* () {
|
|
86
|
-
const { mockBackend, configPath, connectionEvents } = yield* useMockConfig;
|
|
87
|
-
const factory = makeEventFactory();
|
|
88
|
-
const importBatch = Array.from({ length: 120 }, (_, idx) => factory.itemAdded.next({ id: `id-${idx + 1}`, title: `Item ${idx + 1}` }));
|
|
89
|
-
const progress = [];
|
|
90
|
-
const result = yield* pushEventsToSyncBackend({
|
|
91
|
-
configPath,
|
|
92
|
-
storeId,
|
|
93
|
-
clientId,
|
|
94
|
-
data: {
|
|
95
|
-
version: 1,
|
|
96
|
-
storeId,
|
|
97
|
-
exportedAt: new Date().toISOString(),
|
|
98
|
-
eventCount: importBatch.length,
|
|
99
|
-
events: importBatch,
|
|
100
|
-
},
|
|
101
|
-
force: false,
|
|
102
|
-
dryRun: false,
|
|
103
|
-
onProgress: (pushed, total) => Effect.sync(() => progress.push({ pushed, total })),
|
|
104
|
-
});
|
|
105
|
-
expect(result.dryRun).toBe(false);
|
|
106
|
-
expect(result.eventCount).toBe(importBatch.length);
|
|
107
|
-
expect(progress).toEqual([
|
|
108
|
-
{ pushed: 100, total: 120 },
|
|
109
|
-
{ pushed: 120, total: 120 },
|
|
110
|
-
]);
|
|
111
|
-
const pushedEvents = yield* mockBackend.pushedEvents.pipe(Stream.take(importBatch.length), Stream.runCollect, Effect.map((chunk) => Chunk.toReadonlyArray(chunk)));
|
|
112
|
-
expect(pushedEvents.map((event) => event.seqNum)).toHaveLength(importBatch.length);
|
|
113
|
-
const lifecycle = yield* expectConnectLifecycle(connectionEvents);
|
|
114
|
-
expect(lifecycle).toEqual(['connect', 'disconnect']);
|
|
115
|
-
}).pipe(withTestCtx(test)));
|
|
116
|
-
Vitest.scopedLive('allows force import on store ID mismatch', (test) => Effect.gen(function* () {
|
|
117
|
-
const { mockBackend, configPath, connectionEvents } = yield* useMockConfig;
|
|
118
|
-
const factory = makeEventFactory();
|
|
119
|
-
const importBatch = [factory.itemAdded.next({ id: 'force-1', title: 'Force' })];
|
|
120
|
-
const result = yield* pushEventsToSyncBackend({
|
|
121
|
-
configPath,
|
|
122
|
-
storeId,
|
|
123
|
-
clientId,
|
|
124
|
-
data: {
|
|
125
|
-
version: 1,
|
|
126
|
-
storeId: 'different-store',
|
|
127
|
-
exportedAt: new Date().toISOString(),
|
|
128
|
-
eventCount: importBatch.length,
|
|
129
|
-
events: importBatch,
|
|
130
|
-
},
|
|
131
|
-
force: true,
|
|
132
|
-
dryRun: false,
|
|
133
|
-
});
|
|
134
|
-
expect(result.dryRun).toBe(false);
|
|
135
|
-
expect(result.eventCount).toBe(importBatch.length);
|
|
136
|
-
const pushedEvents = yield* mockBackend.pushedEvents.pipe(Stream.take(1), Stream.runCollect, Effect.map((chunk) => Chunk.toReadonlyArray(chunk)));
|
|
137
|
-
expect(pushedEvents).toHaveLength(1);
|
|
138
|
-
const lifecycle = yield* expectConnectLifecycle(connectionEvents);
|
|
139
|
-
expect(lifecycle).toEqual(['connect', 'disconnect']);
|
|
140
|
-
}).pipe(withTestCtx(test)));
|
|
141
|
-
Vitest.scopedLive('rejects store ID mismatch without force', (test) => Effect.gen(function* () {
|
|
142
|
-
const { configPath, connectionEvents } = yield* useMockConfig;
|
|
143
|
-
const factory = makeEventFactory();
|
|
144
|
-
const importBatch = [factory.itemAdded.next({ id: 'mismatch', title: 'Mismatch' })];
|
|
145
|
-
const result = yield* pushEventsToSyncBackend({
|
|
146
|
-
configPath,
|
|
147
|
-
storeId,
|
|
148
|
-
clientId,
|
|
149
|
-
data: {
|
|
150
|
-
version: 1,
|
|
151
|
-
storeId: 'other-store',
|
|
152
|
-
exportedAt: new Date().toISOString(),
|
|
153
|
-
eventCount: importBatch.length,
|
|
154
|
-
events: importBatch,
|
|
155
|
-
},
|
|
156
|
-
force: false,
|
|
157
|
-
dryRun: false,
|
|
158
|
-
}).pipe(Effect.either);
|
|
159
|
-
expect(result._tag).toBe('Left');
|
|
160
|
-
if (result._tag === 'Left') {
|
|
161
|
-
expect(result.left._tag).toBe('ImportError');
|
|
162
|
-
}
|
|
163
|
-
const lifecycle = yield* expectConnectLifecycle(connectionEvents);
|
|
164
|
-
expect(lifecycle).toEqual(['connect', 'disconnect']);
|
|
165
|
-
}).pipe(withTestCtx(test)));
|
|
166
|
-
});
|
|
167
|
-
//# sourceMappingURL=sync-operations.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sync-operations.test.js","sourceRoot":"","sources":["../../src/__tests__/sync-operations.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import type { UnknownError } from '@livestore/common';
|
|
2
|
-
import { FileSystem, type HttpClient } from '@livestore/utils/effect';
|
|
3
|
-
import { Cli } from '@livestore/utils/node';
|
|
4
|
-
import * as SyncOps from '../sync-operations.ts';
|
|
5
|
-
export declare const exportCommand: Cli.Command.Command<"export", FileSystem.FileSystem | HttpClient.HttpClient, UnknownError | SyncOps.ConnectionError | SyncOps.ExportError, {
|
|
6
|
-
readonly config: string;
|
|
7
|
-
readonly storeId: string;
|
|
8
|
-
readonly clientId: string;
|
|
9
|
-
readonly output: string;
|
|
10
|
-
}>;
|
|
11
|
-
export declare const importCommand: Cli.Command.Command<"import", FileSystem.FileSystem | HttpClient.HttpClient, UnknownError | SyncOps.ConnectionError | SyncOps.ImportError, {
|
|
12
|
-
readonly config: string;
|
|
13
|
-
readonly storeId: string;
|
|
14
|
-
readonly clientId: string;
|
|
15
|
-
readonly force: boolean;
|
|
16
|
-
readonly dryRun: boolean;
|
|
17
|
-
readonly input: string;
|
|
18
|
-
}>;
|
|
19
|
-
export declare const syncCommand: Cli.Command.Command<"sync", FileSystem.FileSystem | HttpClient.HttpClient, UnknownError | SyncOps.ConnectionError | SyncOps.ExportError | SyncOps.ImportError, {
|
|
20
|
-
readonly subcommand: import("effect/Option").Option<{
|
|
21
|
-
readonly config: string;
|
|
22
|
-
readonly storeId: string;
|
|
23
|
-
readonly clientId: string;
|
|
24
|
-
readonly output: string;
|
|
25
|
-
} | {
|
|
26
|
-
readonly config: string;
|
|
27
|
-
readonly storeId: string;
|
|
28
|
-
readonly clientId: string;
|
|
29
|
-
readonly force: boolean;
|
|
30
|
-
readonly dryRun: boolean;
|
|
31
|
-
readonly input: string;
|
|
32
|
-
}>;
|
|
33
|
-
}>;
|
|
34
|
-
//# sourceMappingURL=import-export.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"import-export.d.ts","sourceRoot":"","sources":["../../src/commands/import-export.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAAmB,UAAU,EAAE,KAAK,UAAU,EAAc,MAAM,yBAAyB,CAAA;AAClG,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAA;AAC3C,OAAO,KAAK,OAAO,MAAM,uBAAuB,CAAA;AAiKhD,eAAO,MAAM,aAAa;;;;;EA6CzB,CAAA;AAED,eAAO,MAAM,aAAa;;;;;;;EA4DzB,CAAA;AAED,eAAO,MAAM,WAAW;;;;;;;;;;;;;;EAGvB,CAAA"}
|
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
import path from 'node:path';
|
|
2
|
-
import { Console, Effect, FileSystem } from '@livestore/utils/effect';
|
|
3
|
-
import { Cli } from '@livestore/utils/node';
|
|
4
|
-
import * as SyncOps from "../sync-operations.js";
|
|
5
|
-
const LARGE_EVENT_WARNING_THRESHOLD = 100_000;
|
|
6
|
-
/**
|
|
7
|
-
* Export events from the sync backend to a JSON file.
|
|
8
|
-
*/
|
|
9
|
-
const exportEvents = ({ configPath, storeId, clientId, outputPath, }) => Effect.gen(function* () {
|
|
10
|
-
yield* Console.log(`Connecting to sync backend...`);
|
|
11
|
-
const result = yield* SyncOps.pullEventsFromSyncBackend({ configPath, storeId, clientId });
|
|
12
|
-
yield* Console.log(`✓ Connected to sync backend: ${result.backendName}`);
|
|
13
|
-
yield* Console.log(`Pulled ${result.eventCount} events`);
|
|
14
|
-
if (result.eventCount > LARGE_EVENT_WARNING_THRESHOLD) {
|
|
15
|
-
yield* Console.log(`Warning: exporting ${result.eventCount} events may consume significant memory. Consider exporting on a machine with enough RAM.`);
|
|
16
|
-
}
|
|
17
|
-
const fs = yield* FileSystem.FileSystem;
|
|
18
|
-
const absOutputPath = path.isAbsolute(outputPath) ? outputPath : path.resolve(process.cwd(), outputPath);
|
|
19
|
-
yield* fs.writeFileString(absOutputPath, JSON.stringify(result.data, null, 2)).pipe(Effect.mapError((cause) => new SyncOps.ExportError({
|
|
20
|
-
cause,
|
|
21
|
-
note: `Failed to write export file: ${cause}`,
|
|
22
|
-
})));
|
|
23
|
-
yield* Console.log(`Exported ${result.eventCount} events to ${absOutputPath}`);
|
|
24
|
-
}).pipe(Effect.withSpan('cli:export'));
|
|
25
|
-
/**
|
|
26
|
-
* Import events from a JSON file to the sync backend.
|
|
27
|
-
*/
|
|
28
|
-
const importEvents = ({ configPath, storeId, clientId, inputPath, force, dryRun, }) => Effect.gen(function* () {
|
|
29
|
-
const fs = yield* FileSystem.FileSystem;
|
|
30
|
-
const absInputPath = path.isAbsolute(inputPath) ? inputPath : path.resolve(process.cwd(), inputPath);
|
|
31
|
-
const exists = yield* fs.exists(absInputPath).pipe(Effect.mapError((cause) => new SyncOps.ImportError({
|
|
32
|
-
cause,
|
|
33
|
-
note: `Failed to check file existence: ${cause}`,
|
|
34
|
-
})));
|
|
35
|
-
if (!exists) {
|
|
36
|
-
return yield* new SyncOps.ImportError({
|
|
37
|
-
cause: new Error(`File not found: ${absInputPath}`),
|
|
38
|
-
note: `Import file does not exist at ${absInputPath}`,
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
yield* Console.log(`Reading import file...`);
|
|
42
|
-
const fileContent = yield* fs.readFileString(absInputPath).pipe(Effect.mapError((cause) => new SyncOps.ImportError({
|
|
43
|
-
cause,
|
|
44
|
-
note: `Failed to read import file: ${cause}`,
|
|
45
|
-
})));
|
|
46
|
-
const parsedContent = yield* Effect.try({
|
|
47
|
-
try: () => JSON.parse(fileContent),
|
|
48
|
-
catch: (error) => new SyncOps.ImportError({
|
|
49
|
-
cause: new Error(`Failed to parse JSON: ${error instanceof Error ? error.message : String(error)}`),
|
|
50
|
-
note: `Invalid JSON in import file: ${error instanceof Error ? error.message : String(error)}`,
|
|
51
|
-
}),
|
|
52
|
-
});
|
|
53
|
-
/** Validate export file format before proceeding */
|
|
54
|
-
const validation = yield* SyncOps.validateExportData({ data: parsedContent, targetStoreId: storeId });
|
|
55
|
-
if (validation.storeIdMismatch) {
|
|
56
|
-
if (!force) {
|
|
57
|
-
return yield* new SyncOps.ImportError({
|
|
58
|
-
cause: new Error(`Store ID mismatch: file has '${validation.sourceStoreId}', expected '${storeId}'`),
|
|
59
|
-
note: `The export file was created for a different store. Use --force to import anyway.`,
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
yield* Console.log(`Store ID mismatch: file has '${validation.sourceStoreId}', importing to '${storeId}' (--force)`);
|
|
63
|
-
}
|
|
64
|
-
yield* Console.log(`Found ${validation.eventCount} events in export file`);
|
|
65
|
-
if (validation.eventCount > LARGE_EVENT_WARNING_THRESHOLD) {
|
|
66
|
-
yield* Console.log(`Warning: importing ${validation.eventCount} events may consume significant memory. Ensure the machine has enough RAM.`);
|
|
67
|
-
}
|
|
68
|
-
if (dryRun) {
|
|
69
|
-
yield* Console.log(`Dry run - validating import file...`);
|
|
70
|
-
yield* Console.log(`Dry run complete. ${validation.eventCount} events would be imported.`);
|
|
71
|
-
return;
|
|
72
|
-
}
|
|
73
|
-
yield* Console.log(`Checking for existing events...`);
|
|
74
|
-
yield* Console.log(`Connecting to sync backend...`);
|
|
75
|
-
yield* Console.log(`Pushing events to sync backend...`);
|
|
76
|
-
const result = yield* SyncOps.pushEventsToSyncBackend({
|
|
77
|
-
configPath,
|
|
78
|
-
storeId,
|
|
79
|
-
clientId,
|
|
80
|
-
data: parsedContent,
|
|
81
|
-
force,
|
|
82
|
-
dryRun: false,
|
|
83
|
-
onProgress: (pushed, total) => Console.log(` Pushed ${pushed}/${total} events`),
|
|
84
|
-
});
|
|
85
|
-
yield* Console.log(`✓ Connected to sync backend: ${result.backendName ?? 'unknown'}`);
|
|
86
|
-
yield* Console.log(`Successfully imported ${result.eventCount} events`);
|
|
87
|
-
}).pipe(Effect.withSpan('cli:import'));
|
|
88
|
-
export const exportCommand = Cli.Command.make('export', {
|
|
89
|
-
config: Cli.Options.text('config').pipe(Cli.Options.withAlias('c'), Cli.Options.withDescription('Path to the config module that exports schema and syncBackend')),
|
|
90
|
-
storeId: Cli.Options.text('store-id').pipe(Cli.Options.withAlias('i'), Cli.Options.withDescription('Store identifier')),
|
|
91
|
-
clientId: Cli.Options.text('client-id').pipe(Cli.Options.withDefault('cli-export'), Cli.Options.withDescription('Client identifier for the sync connection')),
|
|
92
|
-
output: Cli.Args.text({ name: 'file' }).pipe(Cli.Args.withDescription('Output JSON file path')),
|
|
93
|
-
}, Effect.fn(function* ({ config, storeId, clientId, output, }) {
|
|
94
|
-
yield* Console.log(`Exporting events from LiveStore...`);
|
|
95
|
-
yield* Console.log(` Config: ${config}`);
|
|
96
|
-
yield* Console.log(` Store ID: ${storeId}`);
|
|
97
|
-
yield* Console.log(` Output: ${output}`);
|
|
98
|
-
yield* Console.log('');
|
|
99
|
-
yield* exportEvents({
|
|
100
|
-
configPath: config,
|
|
101
|
-
storeId,
|
|
102
|
-
clientId,
|
|
103
|
-
outputPath: output,
|
|
104
|
-
}).pipe(Effect.scoped);
|
|
105
|
-
})).pipe(Cli.Command.withDescription('Export all events from the sync backend to a JSON file. Useful for backup and migration.'));
|
|
106
|
-
export const importCommand = Cli.Command.make('import', {
|
|
107
|
-
config: Cli.Options.text('config').pipe(Cli.Options.withAlias('c'), Cli.Options.withDescription('Path to the config module that exports schema and syncBackend')),
|
|
108
|
-
storeId: Cli.Options.text('store-id').pipe(Cli.Options.withAlias('i'), Cli.Options.withDescription('Store identifier')),
|
|
109
|
-
clientId: Cli.Options.text('client-id').pipe(Cli.Options.withDefault('cli-import'), Cli.Options.withDescription('Client identifier for the sync connection')),
|
|
110
|
-
force: Cli.Options.boolean('force').pipe(Cli.Options.withAlias('f'), Cli.Options.withDefault(false), Cli.Options.withDescription('Force import even if store ID does not match')),
|
|
111
|
-
dryRun: Cli.Options.boolean('dry-run').pipe(Cli.Options.withDefault(false), Cli.Options.withDescription('Validate the import file without actually importing')),
|
|
112
|
-
input: Cli.Args.text({ name: 'file' }).pipe(Cli.Args.withDescription('Input JSON file to import')),
|
|
113
|
-
}, Effect.fn(function* ({ config, storeId, clientId, force, dryRun, input, }) {
|
|
114
|
-
yield* Console.log(`Importing events to LiveStore...`);
|
|
115
|
-
yield* Console.log(` Config: ${config}`);
|
|
116
|
-
yield* Console.log(` Store ID: ${storeId}`);
|
|
117
|
-
yield* Console.log(` Input: ${input}`);
|
|
118
|
-
if (force)
|
|
119
|
-
yield* Console.log(` Force: enabled`);
|
|
120
|
-
if (dryRun)
|
|
121
|
-
yield* Console.log(` Dry run: enabled`);
|
|
122
|
-
yield* Console.log('');
|
|
123
|
-
yield* importEvents({
|
|
124
|
-
configPath: config,
|
|
125
|
-
storeId,
|
|
126
|
-
clientId,
|
|
127
|
-
inputPath: input,
|
|
128
|
-
force,
|
|
129
|
-
dryRun,
|
|
130
|
-
}).pipe(Effect.scoped);
|
|
131
|
-
})).pipe(Cli.Command.withDescription('Import events from a JSON file to the sync backend. The sync backend must be empty.'));
|
|
132
|
-
export const syncCommand = Cli.Command.make('sync').pipe(Cli.Command.withSubcommands([exportCommand, importCommand]), Cli.Command.withDescription('Import and export events from the sync backend'));
|
|
133
|
-
//# sourceMappingURL=import-export.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"import-export.js","sourceRoot":"","sources":["../../src/commands/import-export.ts"],"names":[],"mappings":"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"}
|
package/dist/module-loader.d.ts
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import type { SyncBackend } from '@livestore/common';
|
|
2
|
-
import { UnknownError } from '@livestore/common';
|
|
3
|
-
import { type LiveStoreSchema } from '@livestore/common/schema';
|
|
4
|
-
import { Effect, FileSystem, Schema } from '@livestore/utils/effect';
|
|
5
|
-
export interface ModuleConfig {
|
|
6
|
-
schema: LiveStoreSchema;
|
|
7
|
-
syncBackendConstructor: SyncBackend.SyncBackendConstructor;
|
|
8
|
-
syncPayloadSchema: Schema.Schema<any>;
|
|
9
|
-
syncPayload: unknown;
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Loads and validates a user config module.
|
|
13
|
-
* The module must export:
|
|
14
|
-
* - `schema`: A valid LiveStore schema
|
|
15
|
-
* - `syncBackend`: A sync backend constructor function
|
|
16
|
-
* - `syncPayloadSchema` (optional): Schema for validating syncPayload
|
|
17
|
-
* - `syncPayload` (optional): Payload data for the sync backend
|
|
18
|
-
*/
|
|
19
|
-
export declare const loadModuleConfig: ({ configPath, }: {
|
|
20
|
-
configPath: string;
|
|
21
|
-
}) => Effect.Effect<ModuleConfig, UnknownError, FileSystem.FileSystem>;
|
|
22
|
-
//# sourceMappingURL=module-loader.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"module-loader.d.ts","sourceRoot":"","sources":["../src/module-loader.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAqB,KAAK,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAElF,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAEpE,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,eAAe,CAAA;IACvB,sBAAsB,EAAE,WAAW,CAAC,sBAAsB,CAAA;IAC1D,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IACrC,WAAW,EAAE,OAAO,CAAA;CACrB;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,GAAI,iBAE9B;IACD,UAAU,EAAE,MAAM,CAAA;CACnB,KAAG,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,YAAY,EAAE,UAAU,CAAC,UAAU,CA6DP,CAAA"}
|
package/dist/module-loader.js
DELETED
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
|
|
2
|
-
if (typeof path === "string" && /^\.\.?\//.test(path)) {
|
|
3
|
-
return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
|
|
4
|
-
return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
|
|
5
|
-
});
|
|
6
|
-
}
|
|
7
|
-
return path;
|
|
8
|
-
};
|
|
9
|
-
/**
|
|
10
|
-
* Shared module loading utility for CLI and MCP.
|
|
11
|
-
* Loads and validates user config modules that export schema, syncBackend, and optional syncPayload.
|
|
12
|
-
*/
|
|
13
|
-
import path from 'node:path';
|
|
14
|
-
import { pathToFileURL } from 'node:url';
|
|
15
|
-
import { UnknownError } from '@livestore/common';
|
|
16
|
-
import { isLiveStoreSchema } from '@livestore/common/schema';
|
|
17
|
-
import { shouldNeverHappen } from '@livestore/utils';
|
|
18
|
-
import { Effect, FileSystem, Schema } from '@livestore/utils/effect';
|
|
19
|
-
/**
|
|
20
|
-
* Loads and validates a user config module.
|
|
21
|
-
* The module must export:
|
|
22
|
-
* - `schema`: A valid LiveStore schema
|
|
23
|
-
* - `syncBackend`: A sync backend constructor function
|
|
24
|
-
* - `syncPayloadSchema` (optional): Schema for validating syncPayload
|
|
25
|
-
* - `syncPayload` (optional): Payload data for the sync backend
|
|
26
|
-
*/
|
|
27
|
-
export const loadModuleConfig = ({ configPath, }) => Effect.gen(function* () {
|
|
28
|
-
const abs = path.isAbsolute(configPath) ? configPath : path.resolve(process.cwd(), configPath);
|
|
29
|
-
const fs = yield* FileSystem.FileSystem;
|
|
30
|
-
const exists = yield* fs.exists(abs).pipe(UnknownError.mapToUnknownError);
|
|
31
|
-
if (!exists) {
|
|
32
|
-
return yield* UnknownError.make({
|
|
33
|
-
cause: `Store module not found at ${abs}`,
|
|
34
|
-
note: 'Make sure the path points to a valid LiveStore module',
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
const mod = yield* Effect.tryPromise({
|
|
38
|
-
try: () => import(__rewriteRelativeImportExtension(pathToFileURL(abs).href)),
|
|
39
|
-
catch: (cause) => UnknownError.make({
|
|
40
|
-
cause,
|
|
41
|
-
note: `Failed to import module at ${abs}`,
|
|
42
|
-
}),
|
|
43
|
-
});
|
|
44
|
-
const schema = mod?.schema;
|
|
45
|
-
if (!isLiveStoreSchema(schema)) {
|
|
46
|
-
return yield* UnknownError.make({
|
|
47
|
-
cause: `Module at ${abs} must export a valid LiveStore 'schema'`,
|
|
48
|
-
note: `Ex: export { schema } from './src/livestore/schema.ts'`,
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
const syncBackendConstructor = mod?.syncBackend;
|
|
52
|
-
if (typeof syncBackendConstructor !== 'function') {
|
|
53
|
-
return yield* UnknownError.make({
|
|
54
|
-
cause: `Module at ${abs} must export a 'syncBackend' constructor`,
|
|
55
|
-
note: `Ex: export const syncBackend = makeWsSync({ url })`,
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
const syncPayloadSchemaExport = mod?.syncPayloadSchema;
|
|
59
|
-
const syncPayloadSchema = syncPayloadSchemaExport === undefined
|
|
60
|
-
? Schema.JsonValue
|
|
61
|
-
: Schema.isSchema(syncPayloadSchemaExport)
|
|
62
|
-
? syncPayloadSchemaExport
|
|
63
|
-
: shouldNeverHappen(`Exported 'syncPayloadSchema' from ${abs} must be an Effect Schema (received ${typeof syncPayloadSchemaExport}).`);
|
|
64
|
-
const syncPayloadExport = mod?.syncPayload;
|
|
65
|
-
const syncPayload = yield* (syncPayloadExport === undefined
|
|
66
|
-
? Effect.succeed(undefined)
|
|
67
|
-
: Schema.decodeUnknown(syncPayloadSchema)(syncPayloadExport)).pipe(UnknownError.mapToUnknownError);
|
|
68
|
-
return {
|
|
69
|
-
schema,
|
|
70
|
-
syncBackendConstructor,
|
|
71
|
-
syncPayloadSchema,
|
|
72
|
-
syncPayload,
|
|
73
|
-
};
|
|
74
|
-
}).pipe(Effect.withSpan('module-loader:loadModuleConfig'));
|
|
75
|
-
//# sourceMappingURL=module-loader.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"module-loader.js","sourceRoot":"","sources":["../src/module-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared sync operations for CLI and MCP.
|
|
3
|
-
* Contains the core logic for exporting and importing events from sync backends.
|
|
4
|
-
*/
|
|
5
|
-
import type { SyncBackend } from '@livestore/common';
|
|
6
|
-
import { UnknownError } from '@livestore/common';
|
|
7
|
-
import { Effect, type FileSystem, type HttpClient, Schema, type Scope } from '@livestore/utils/effect';
|
|
8
|
-
/**
|
|
9
|
-
* Schema for the export file format.
|
|
10
|
-
* Contains metadata about the export and an array of events in global encoded format.
|
|
11
|
-
*/
|
|
12
|
-
export declare const ExportFileSchema: Schema.Struct<{
|
|
13
|
-
/** Format version for future compatibility */
|
|
14
|
-
version: Schema.Literal<[1]>;
|
|
15
|
-
/** Store identifier */
|
|
16
|
-
storeId: typeof Schema.String;
|
|
17
|
-
/** ISO timestamp of when the export was created */
|
|
18
|
-
exportedAt: typeof Schema.String;
|
|
19
|
-
/** Total number of events in the export */
|
|
20
|
-
eventCount: typeof Schema.Number;
|
|
21
|
-
/** Array of events in global encoded format */
|
|
22
|
-
events: Schema.Array$<Schema.Struct<{
|
|
23
|
-
name: typeof Schema.String;
|
|
24
|
-
args: typeof Schema.Any;
|
|
25
|
-
seqNum: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventSequenceNumber">, number, never>;
|
|
26
|
-
parentSeqNum: Schema.BrandSchema<number & import("effect/Brand").Brand<"GlobalEventSequenceNumber">, number, never>;
|
|
27
|
-
clientId: typeof Schema.String;
|
|
28
|
-
sessionId: typeof Schema.String;
|
|
29
|
-
}>>;
|
|
30
|
-
}>;
|
|
31
|
-
export type ExportFile = typeof ExportFileSchema.Type;
|
|
32
|
-
declare const ConnectionError_base: Schema.TaggedErrorClass<ConnectionError, "ConnectionError", {
|
|
33
|
-
readonly _tag: Schema.tag<"ConnectionError">;
|
|
34
|
-
} & {
|
|
35
|
-
cause: typeof Schema.Defect;
|
|
36
|
-
note: typeof Schema.String;
|
|
37
|
-
}>;
|
|
38
|
-
export declare class ConnectionError extends ConnectionError_base {
|
|
39
|
-
}
|
|
40
|
-
declare const ExportError_base: Schema.TaggedErrorClass<ExportError, "ExportError", {
|
|
41
|
-
readonly _tag: Schema.tag<"ExportError">;
|
|
42
|
-
} & {
|
|
43
|
-
cause: typeof Schema.Defect;
|
|
44
|
-
note: typeof Schema.String;
|
|
45
|
-
}>;
|
|
46
|
-
export declare class ExportError extends ExportError_base {
|
|
47
|
-
}
|
|
48
|
-
declare const ImportError_base: Schema.TaggedErrorClass<ImportError, "ImportError", {
|
|
49
|
-
readonly _tag: Schema.tag<"ImportError">;
|
|
50
|
-
} & {
|
|
51
|
-
cause: typeof Schema.Defect;
|
|
52
|
-
note: typeof Schema.String;
|
|
53
|
-
}>;
|
|
54
|
-
export declare class ImportError extends ImportError_base {
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Creates a sync backend connection from a user module and verifies connectivity.
|
|
58
|
-
* This is a simplified version of the MCP runtime that only creates the sync backend.
|
|
59
|
-
*/
|
|
60
|
-
export declare const makeSyncBackend: ({ configPath, storeId, clientId, }: {
|
|
61
|
-
/** Absolute or cwd-relative path to a module exporting `schema` and `syncBackend`. */
|
|
62
|
-
configPath: string;
|
|
63
|
-
/** Identifier to scope the backend connection. */
|
|
64
|
-
storeId: string;
|
|
65
|
-
/** Client identifier used when establishing the sync connection. */
|
|
66
|
-
clientId: string;
|
|
67
|
-
}) => Effect.Effect<SyncBackend.SyncBackend, UnknownError | ConnectionError, FileSystem.FileSystem | HttpClient.HttpClient | Scope.Scope>;
|
|
68
|
-
export interface ExportResult {
|
|
69
|
-
storeId: string;
|
|
70
|
-
eventCount: number;
|
|
71
|
-
exportedAt: string;
|
|
72
|
-
backendName: string;
|
|
73
|
-
/** The export data as JSON string (for MCP) or written to file (for CLI) */
|
|
74
|
-
data: ExportFile;
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Core export operation - pulls all events from sync backend.
|
|
78
|
-
* Returns the export data structure without writing to file.
|
|
79
|
-
*/
|
|
80
|
-
export declare const pullEventsFromSyncBackend: ({ configPath, storeId, clientId, }: {
|
|
81
|
-
configPath: string;
|
|
82
|
-
storeId: string;
|
|
83
|
-
clientId: string;
|
|
84
|
-
}) => Effect.Effect<ExportResult, ExportError | UnknownError | ConnectionError, FileSystem.FileSystem | HttpClient.HttpClient | Scope.Scope>;
|
|
85
|
-
export interface ImportResult {
|
|
86
|
-
storeId: string;
|
|
87
|
-
eventCount: number;
|
|
88
|
-
/** Whether this was a dry run */
|
|
89
|
-
dryRun: boolean;
|
|
90
|
-
backendName?: string;
|
|
91
|
-
}
|
|
92
|
-
export interface ImportValidationResult {
|
|
93
|
-
storeId: string;
|
|
94
|
-
eventCount: number;
|
|
95
|
-
sourceStoreId: string;
|
|
96
|
-
storeIdMismatch: boolean;
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Validates an export file for import.
|
|
100
|
-
* Returns validation info without actually importing.
|
|
101
|
-
*/
|
|
102
|
-
export declare const validateExportData: ({ data, targetStoreId, }: {
|
|
103
|
-
data: unknown;
|
|
104
|
-
targetStoreId: string;
|
|
105
|
-
}) => Effect.Effect<ImportValidationResult, ImportError>;
|
|
106
|
-
/**
|
|
107
|
-
* Core import operation - pushes events to sync backend.
|
|
108
|
-
* Validates that the backend is empty before importing.
|
|
109
|
-
*/
|
|
110
|
-
export declare const pushEventsToSyncBackend: ({ configPath, storeId, clientId, data, force, dryRun, onProgress, }: {
|
|
111
|
-
configPath: string;
|
|
112
|
-
storeId: string;
|
|
113
|
-
clientId: string;
|
|
114
|
-
/** The export data to import (already parsed) */
|
|
115
|
-
data: unknown;
|
|
116
|
-
force: boolean;
|
|
117
|
-
dryRun: boolean;
|
|
118
|
-
onProgress?: (pushed: number, total: number) => Effect.Effect<void, never>;
|
|
119
|
-
}) => Effect.Effect<ImportResult, ImportError | UnknownError | ConnectionError, FileSystem.FileSystem | HttpClient.HttpClient | Scope.Scope>;
|
|
120
|
-
export {};
|
|
121
|
-
//# sourceMappingURL=sync-operations.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sync-operations.d.ts","sourceRoot":"","sources":["../src/sync-operations.ts"],"names":[],"mappings":"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"}
|