@livestore/cli 0.4.0 → 0.5.0-dev.1
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/.tsbuildinfo +1 -1
- package/dist/__tests__/fixtures/mock-config.d.ts +8 -9
- package/dist/__tests__/fixtures/mock-config.d.ts.map +1 -1
- package/dist/__tests__/fixtures/mock-config.js +18 -8
- package/dist/__tests__/fixtures/mock-config.js.map +1 -1
- package/dist/__tests__/sync-operations.test.js +32 -22
- package/dist/__tests__/sync-operations.test.js.map +1 -1
- package/dist/bin.js +7 -6
- package/dist/bin.js.map +1 -1
- package/dist/cli.d.ts +2 -23
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +4 -4
- package/dist/cli.js.map +1 -1
- package/dist/commands/__fixtures__/mcp-protocol-server.d.ts +2 -0
- package/dist/commands/__fixtures__/mcp-protocol-server.d.ts.map +1 -0
- package/dist/commands/__fixtures__/mcp-protocol-server.js +10 -0
- package/dist/commands/__fixtures__/mcp-protocol-server.js.map +1 -0
- package/dist/commands/import-export.d.ts +5 -19
- package/dist/commands/import-export.d.ts.map +1 -1
- package/dist/commands/import-export.js +13 -13
- package/dist/commands/import-export.js.map +1 -1
- package/dist/commands/mcp-coach.d.ts +8 -7
- package/dist/commands/mcp-coach.d.ts.map +1 -1
- package/dist/commands/mcp-coach.js +11 -11
- package/dist/commands/mcp-coach.js.map +1 -1
- package/dist/commands/mcp-protocols.d.ts +7 -0
- package/dist/commands/mcp-protocols.d.ts.map +1 -0
- package/dist/commands/mcp-protocols.js +12 -0
- package/dist/commands/mcp-protocols.js.map +1 -0
- package/dist/commands/mcp-protocols.test.d.ts +2 -0
- package/dist/commands/mcp-protocols.test.d.ts.map +1 -0
- package/dist/commands/mcp-protocols.test.js +60 -0
- package/dist/commands/mcp-protocols.test.js.map +1 -0
- package/dist/commands/mcp-stdio.test.d.ts +2 -0
- package/dist/commands/mcp-stdio.test.d.ts.map +1 -0
- package/dist/commands/mcp-stdio.test.js +79 -0
- package/dist/commands/mcp-stdio.test.js.map +1 -0
- package/dist/commands/mcp-tool-handlers.d.ts +1 -1
- package/dist/commands/mcp-tool-handlers.d.ts.map +1 -1
- package/dist/commands/mcp-tool-handlers.js +9 -8
- package/dist/commands/mcp-tool-handlers.js.map +1 -1
- package/dist/commands/mcp-tools-defs.d.ts +74 -73
- package/dist/commands/mcp-tools-defs.d.ts.map +1 -1
- package/dist/commands/mcp-tools-defs.js +64 -57
- package/dist/commands/mcp-tools-defs.js.map +1 -1
- package/dist/commands/mcp-tools-defs.test.d.ts +2 -0
- package/dist/commands/mcp-tools-defs.test.d.ts.map +1 -0
- package/dist/commands/mcp-tools-defs.test.js +11 -0
- package/dist/commands/mcp-tools-defs.test.js.map +1 -0
- package/dist/commands/mcp.d.ts +1 -3
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +15 -14
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/new-project.d.ts +19 -27
- package/dist/commands/new-project.d.ts.map +1 -1
- package/dist/commands/new-project.js +19 -18
- package/dist/commands/new-project.js.map +1 -1
- package/dist/mcp-content/architecture.d.ts +1 -1
- package/dist/mcp-content/architecture.d.ts.map +1 -1
- package/dist/mcp-content/architecture.js +3 -3
- package/dist/mcp-content/features.d.ts +1 -1
- package/dist/mcp-content/features.d.ts.map +1 -1
- package/dist/mcp-content/features.js +1 -1
- package/dist/mcp-content/getting-started.d.ts +1 -1
- package/dist/mcp-content/getting-started.d.ts.map +1 -1
- package/dist/mcp-content/getting-started.js +37 -37
- package/dist/mcp-content/overview.d.ts +1 -1
- package/dist/mcp-content/overview.d.ts.map +1 -1
- package/dist/mcp-content/overview.js +6 -6
- package/dist/mcp-content/schemas/blog.d.ts +1 -1
- package/dist/mcp-content/schemas/blog.d.ts.map +1 -1
- package/dist/mcp-content/schemas/blog.js +25 -25
- package/dist/mcp-content/schemas/ecommerce.d.ts +1 -1
- package/dist/mcp-content/schemas/ecommerce.d.ts.map +1 -1
- package/dist/mcp-content/schemas/ecommerce.js +67 -67
- package/dist/mcp-content/schemas/social.d.ts +1 -1
- package/dist/mcp-content/schemas/social.d.ts.map +1 -1
- package/dist/mcp-content/schemas/social.js +48 -48
- package/dist/mcp-content/schemas/todo.d.ts +1 -1
- package/dist/mcp-content/schemas/todo.d.ts.map +1 -1
- package/dist/mcp-content/schemas/todo.js +35 -35
- package/dist/mcp-runtime/runtime.d.ts +5 -5
- package/dist/mcp-runtime/runtime.d.ts.map +1 -1
- package/dist/mcp-runtime/runtime.js +5 -5
- package/dist/mcp-runtime/runtime.js.map +1 -1
- package/dist/mod.js +1 -1
- package/dist/module-loader.d.ts +2 -2
- package/dist/module-loader.d.ts.map +1 -1
- package/dist/module-loader.js +8 -8
- package/dist/module-loader.js.map +1 -1
- package/dist/package-manager.d.ts +3 -3
- package/dist/package-manager.d.ts.map +1 -1
- package/dist/package-manager.test.js +1 -1
- package/dist/sync-operations.d.ts +24 -30
- package/dist/sync-operations.d.ts.map +1 -1
- package/dist/sync-operations.js +15 -15
- package/dist/sync-operations.js.map +1 -1
- package/package.json +45 -59
- package/src/__tests__/fixtures/.gitignore +1 -0
- package/src/__tests__/fixtures/mock-config.ts +21 -10
- package/src/__tests__/sync-operations.test.ts +36 -35
- package/src/bin.ts +7 -6
- package/src/cli.ts +1 -1
- package/src/commands/__fixtures__/mcp-protocol-server.ts +12 -0
- package/src/commands/import-export.ts +29 -29
- package/src/commands/mcp-coach.ts +13 -12
- package/src/commands/mcp-protocols.test.ts +76 -0
- package/src/commands/mcp-protocols.ts +12 -0
- package/src/commands/mcp-stdio.test.ts +93 -0
- package/src/commands/mcp-tool-handlers.ts +11 -8
- package/src/commands/mcp-tools-defs.test.ts +13 -0
- package/src/commands/mcp-tools-defs.ts +57 -55
- package/src/commands/mcp.ts +9 -4
- package/src/commands/new-project.ts +50 -37
- package/src/mcp-content/architecture.ts +3 -3
- package/src/mcp-content/features.ts +1 -1
- package/src/mcp-content/getting-started.ts +37 -37
- package/src/mcp-content/overview.ts +6 -6
- package/src/mcp-content/schemas/blog.ts +25 -25
- package/src/mcp-content/schemas/ecommerce.ts +67 -67
- package/src/mcp-content/schemas/social.ts +48 -48
- package/src/mcp-content/schemas/todo.ts +35 -35
- package/src/mcp-runtime/runtime.ts +7 -7
- package/src/module-loader.ts +11 -12
- package/src/sync-operations.ts +26 -19
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
import { State } from '@livestore/common/schema';
|
|
2
2
|
import type { MockSyncBackend } from '@livestore/common/sync';
|
|
3
3
|
import { EventFactory } from '@livestore/common/testing';
|
|
4
|
-
import { Effect, FileSystem, type
|
|
5
|
-
declare const DynamicImportError_base: Schema.
|
|
6
|
-
readonly
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
path: typeof Schema.String;
|
|
10
|
-
}>;
|
|
4
|
+
import { Effect, FileSystem, type Queue, Schema, type SubscriptionRef } from '@livestore/utils/effect';
|
|
5
|
+
declare const DynamicImportError_base: Schema.Class<DynamicImportError, Schema.TaggedStruct<"DynamicImportError", {
|
|
6
|
+
readonly cause: Schema.Defect;
|
|
7
|
+
readonly path: Schema.String;
|
|
8
|
+
}>, import("effect/Cause").YieldableError>;
|
|
11
9
|
declare class DynamicImportError extends DynamicImportError_base {
|
|
12
10
|
}
|
|
13
11
|
export declare const events: {
|
|
@@ -38,8 +36,9 @@ export declare const schema: import("@livestore/common/schema").FromInputSchema.
|
|
|
38
36
|
export declare const useMockConfig: Effect.Effect<{
|
|
39
37
|
configPath: string;
|
|
40
38
|
mockBackend: MockSyncBackend;
|
|
41
|
-
connectionEvents:
|
|
42
|
-
|
|
39
|
+
connectionEvents: Queue.Queue<"connect" | "disconnect", never>;
|
|
40
|
+
disconnectShouldFail: SubscriptionRef.SubscriptionRef<boolean>;
|
|
41
|
+
}, DynamicImportError | import("effect/PlatformError").PlatformError, FileSystem.FileSystem | import("effect/Scope").Scope>;
|
|
43
42
|
export declare const makeEventFactory: () => {
|
|
44
43
|
itemAdded: {
|
|
45
44
|
next: (args: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-config.d.ts","sourceRoot":"","sources":["../../../src/__tests__/fixtures/mock-config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAsB,KAAK,EAAE,MAAM,0BAA0B,CAAA;AACpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"mock-config.d.ts","sourceRoot":"","sources":["../../../src/__tests__/fixtures/mock-config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAsB,KAAK,EAAE,MAAM,0BAA0B,CAAA;AACpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,KAAK,EAAE,MAAM,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAA;;;;;AAItG,cAAM,kBAAmB,SAAQ,uBAG/B;CAAG;AAaL,eAAO,MAAM,MAAM;IACjB,SAAS;;;;;;;CAIV,CAAA;AAWD,eAAO,MAAM,MAAM;;;;;;;;;;;EAAgC,CAAA;AAqCnD;;;GAGG;AACH,eAAO,MAAM,aAAa;;;;;2HAgCzB,CAAA;AAED,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;CAKzB,CAAA"}
|
|
@@ -13,7 +13,7 @@ import { EventFactory } from '@livestore/common/testing';
|
|
|
13
13
|
import { Effect, FileSystem, Schema } from '@livestore/utils/effect';
|
|
14
14
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
15
15
|
class DynamicImportError extends Schema.TaggedError()('DynamicImportError', {
|
|
16
|
-
cause: Schema.Defect,
|
|
16
|
+
cause: Schema.Defect(),
|
|
17
17
|
path: Schema.String,
|
|
18
18
|
}) {
|
|
19
19
|
}
|
|
@@ -46,21 +46,26 @@ const makeTempConfig = () => {
|
|
|
46
46
|
const moduleSource = `
|
|
47
47
|
import { schema } from ${JSON.stringify(schemaModuleUrl)}
|
|
48
48
|
import { makeMockSyncBackend } from '@livestore/common/sync'
|
|
49
|
-
import { Effect,
|
|
49
|
+
import { Effect, Queue, SubscriptionRef } from '@livestore/utils/effect'
|
|
50
50
|
|
|
51
51
|
export const mockBackend = await Effect.runPromise(Effect.scoped(makeMockSyncBackend({ startConnected: true })))
|
|
52
|
-
export const connectionEvents = await Effect.runPromise(
|
|
52
|
+
export const connectionEvents = await Effect.runPromise(Queue.make<'connect' | 'disconnect'>())
|
|
53
|
+
export const disconnectShouldFail = await Effect.runPromise(SubscriptionRef.make(false))
|
|
53
54
|
|
|
54
55
|
export { schema }
|
|
55
56
|
|
|
56
57
|
export const syncBackend = (_args) =>
|
|
57
58
|
mockBackend.makeSyncBackend.pipe(
|
|
58
|
-
Effect.tap(() =>
|
|
59
|
+
Effect.tap(() => Queue.offer(connectionEvents, 'connect')),
|
|
59
60
|
Effect.map((backend) => {
|
|
60
|
-
const disconnect =
|
|
61
|
+
const disconnect = SubscriptionRef.get(disconnectShouldFail).pipe(
|
|
62
|
+
Effect.flatMap((shouldFail) =>
|
|
63
|
+
shouldFail ? Effect.fail(new Error('disconnect failed')) : (backend.disconnect ?? Effect.void),
|
|
64
|
+
),
|
|
65
|
+
)
|
|
61
66
|
return {
|
|
62
67
|
...backend,
|
|
63
|
-
disconnect: disconnect.pipe(Effect.tap(() =>
|
|
68
|
+
disconnect: disconnect.pipe(Effect.tap(() => Queue.offer(connectionEvents, 'disconnect'))),
|
|
64
69
|
}
|
|
65
70
|
}),
|
|
66
71
|
)
|
|
@@ -81,10 +86,15 @@ export const useMockConfig = Effect.acquireRelease(Effect.gen(function* () {
|
|
|
81
86
|
try: () => import(__rewriteRelativeImportExtension(pathToFileURL(tempPath).href)),
|
|
82
87
|
catch: (cause) => new DynamicImportError({ cause, path: tempPath }),
|
|
83
88
|
}));
|
|
84
|
-
return {
|
|
89
|
+
return {
|
|
90
|
+
configPath: tempPath,
|
|
91
|
+
mockBackend: mod.mockBackend,
|
|
92
|
+
connectionEvents: mod.connectionEvents,
|
|
93
|
+
disconnectShouldFail: mod.disconnectShouldFail,
|
|
94
|
+
};
|
|
85
95
|
}), ({ configPath }) => Effect.gen(function* () {
|
|
86
96
|
const fs = yield* FileSystem.FileSystem;
|
|
87
|
-
yield* fs.remove(configPath, { recursive: false }).pipe(Effect.
|
|
97
|
+
yield* fs.remove(configPath, { recursive: false }).pipe(Effect.ignore);
|
|
88
98
|
}));
|
|
89
99
|
export const makeEventFactory = () => EventFactory.makeFactory(events)({
|
|
90
100
|
client: EventFactory.clientIdentity('cli-test-client'),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-config.js","sourceRoot":"","sources":["../../../src/__tests__/fixtures/mock-config.ts"],"names":[],"mappings":";;;;;;;;AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAEvD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAA;AAEpE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,MAAM,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"mock-config.js","sourceRoot":"","sources":["../../../src/__tests__/fixtures/mock-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Vitest } from '@livestore/utils-dev/node-vitest';
|
|
3
|
-
import { Chunk, Effect, FetchHttpClient, Layer, Mailbox, Stream } from '@livestore/utils/effect';
|
|
1
|
+
import { Effect, FetchHttpClient, Layer, Stream, SubscriptionRef } from '@livestore/utils/effect';
|
|
4
2
|
import { PlatformNode } from '@livestore/utils/node';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
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
7
|
const baseLayer = Layer.mergeAll(PlatformNode.NodeFileSystem.layer, FetchHttpClient.layer);
|
|
8
8
|
const withTestCtx = Vitest.makeWithTestCtx({ makeLayer: () => baseLayer });
|
|
9
9
|
/** Each test acquires its own temporary config module via useMockConfig, avoiding shared state. */
|
|
@@ -11,8 +11,8 @@ Vitest.describe('sync-operations', { timeout: 10_000 }, () => {
|
|
|
11
11
|
const storeId = 'test-store';
|
|
12
12
|
const clientId = 'test-client';
|
|
13
13
|
/** Collects the connect + disconnect lifecycle emitted by the mock sync backend. */
|
|
14
|
-
const expectConnectLifecycle = (mailbox) =>
|
|
15
|
-
Vitest.
|
|
14
|
+
const expectConnectLifecycle = (mailbox) => Stream.fromQueue(mailbox).pipe(Stream.take(2), Stream.runCollect);
|
|
15
|
+
Vitest.live('exports events and releases the backend connection', (test) => Effect.gen(function* () {
|
|
16
16
|
const { mockBackend, connectionEvents, configPath } = yield* useMockConfig;
|
|
17
17
|
const factory = makeEventFactory();
|
|
18
18
|
const batch = [
|
|
@@ -30,7 +30,17 @@ Vitest.describe('sync-operations', { timeout: 10_000 }, () => {
|
|
|
30
30
|
const lifecycle = yield* expectConnectLifecycle(connectionEvents);
|
|
31
31
|
expect(lifecycle).toEqual(['connect', 'disconnect']);
|
|
32
32
|
}).pipe(withTestCtx(test)));
|
|
33
|
-
Vitest.
|
|
33
|
+
Vitest.live('preserves a successful export when backend disconnect fails', (test) => Effect.gen(function* () {
|
|
34
|
+
const { configPath, disconnectShouldFail } = yield* useMockConfig;
|
|
35
|
+
yield* SubscriptionRef.set(disconnectShouldFail, true);
|
|
36
|
+
const result = yield* pullEventsFromSyncBackend({
|
|
37
|
+
configPath,
|
|
38
|
+
storeId,
|
|
39
|
+
clientId,
|
|
40
|
+
});
|
|
41
|
+
expect(result.eventCount).toBe(0);
|
|
42
|
+
}).pipe(withTestCtx(test)));
|
|
43
|
+
Vitest.live('fails import when backend is not empty', (test) => Effect.gen(function* () {
|
|
34
44
|
const { mockBackend, connectionEvents, configPath } = yield* useMockConfig;
|
|
35
45
|
const factory = makeEventFactory();
|
|
36
46
|
yield* mockBackend.advance(factory.itemAdded.next({ id: 'existing', title: 'Present' }));
|
|
@@ -51,15 +61,15 @@ Vitest.describe('sync-operations', { timeout: 10_000 }, () => {
|
|
|
51
61
|
},
|
|
52
62
|
force: false,
|
|
53
63
|
dryRun: false,
|
|
54
|
-
}).pipe(Effect.
|
|
55
|
-
expect(result._tag).toBe('
|
|
56
|
-
if (result._tag === '
|
|
57
|
-
expect(result.
|
|
64
|
+
}).pipe(Effect.result);
|
|
65
|
+
expect(result._tag).toBe('Failure');
|
|
66
|
+
if (result._tag === 'Failure') {
|
|
67
|
+
expect(result.failure._tag).toBe('ImportError');
|
|
58
68
|
}
|
|
59
69
|
const lifecycle = yield* expectConnectLifecycle(connectionEvents);
|
|
60
70
|
expect(lifecycle).toEqual(['connect', 'disconnect']);
|
|
61
71
|
}).pipe(withTestCtx(test)));
|
|
62
|
-
Vitest.
|
|
72
|
+
Vitest.live('supports dry-run import and releases backend', (test) => Effect.gen(function* () {
|
|
63
73
|
const { configPath, connectionEvents } = yield* useMockConfig;
|
|
64
74
|
const factory = makeEventFactory();
|
|
65
75
|
const importBatch = [factory.itemAdded.next({ id: 'dry-run', title: 'Simulated' })];
|
|
@@ -82,7 +92,7 @@ Vitest.describe('sync-operations', { timeout: 10_000 }, () => {
|
|
|
82
92
|
const lifecycle = yield* expectConnectLifecycle(connectionEvents);
|
|
83
93
|
expect(lifecycle).toEqual(['connect', 'disconnect']);
|
|
84
94
|
}).pipe(withTestCtx(test)));
|
|
85
|
-
Vitest.
|
|
95
|
+
Vitest.live('imports events into empty backend with progress and batching', (test) => Effect.gen(function* () {
|
|
86
96
|
const { mockBackend, configPath, connectionEvents } = yield* useMockConfig;
|
|
87
97
|
const factory = makeEventFactory();
|
|
88
98
|
const importBatch = Array.from({ length: 120 }, (_, idx) => factory.itemAdded.next({ id: `id-${idx + 1}`, title: `Item ${idx + 1}` }));
|
|
@@ -108,12 +118,12 @@ Vitest.describe('sync-operations', { timeout: 10_000 }, () => {
|
|
|
108
118
|
{ pushed: 100, total: 120 },
|
|
109
119
|
{ pushed: 120, total: 120 },
|
|
110
120
|
]);
|
|
111
|
-
const pushedEvents = yield* mockBackend.pushedEvents.pipe(Stream.take(importBatch.length), Stream.runCollect
|
|
121
|
+
const pushedEvents = yield* mockBackend.pushedEvents.pipe(Stream.take(importBatch.length), Stream.runCollect);
|
|
112
122
|
expect(pushedEvents.map((event) => event.seqNum)).toHaveLength(importBatch.length);
|
|
113
123
|
const lifecycle = yield* expectConnectLifecycle(connectionEvents);
|
|
114
124
|
expect(lifecycle).toEqual(['connect', 'disconnect']);
|
|
115
125
|
}).pipe(withTestCtx(test)));
|
|
116
|
-
Vitest.
|
|
126
|
+
Vitest.live('allows force import on store ID mismatch', (test) => Effect.gen(function* () {
|
|
117
127
|
const { mockBackend, configPath, connectionEvents } = yield* useMockConfig;
|
|
118
128
|
const factory = makeEventFactory();
|
|
119
129
|
const importBatch = [factory.itemAdded.next({ id: 'force-1', title: 'Force' })];
|
|
@@ -133,12 +143,12 @@ Vitest.describe('sync-operations', { timeout: 10_000 }, () => {
|
|
|
133
143
|
});
|
|
134
144
|
expect(result.dryRun).toBe(false);
|
|
135
145
|
expect(result.eventCount).toBe(importBatch.length);
|
|
136
|
-
const pushedEvents = yield* mockBackend.pushedEvents.pipe(Stream.take(1), Stream.runCollect
|
|
146
|
+
const pushedEvents = yield* mockBackend.pushedEvents.pipe(Stream.take(1), Stream.runCollect);
|
|
137
147
|
expect(pushedEvents).toHaveLength(1);
|
|
138
148
|
const lifecycle = yield* expectConnectLifecycle(connectionEvents);
|
|
139
149
|
expect(lifecycle).toEqual(['connect', 'disconnect']);
|
|
140
150
|
}).pipe(withTestCtx(test)));
|
|
141
|
-
Vitest.
|
|
151
|
+
Vitest.live('rejects store ID mismatch without force', (test) => Effect.gen(function* () {
|
|
142
152
|
const { configPath, connectionEvents } = yield* useMockConfig;
|
|
143
153
|
const factory = makeEventFactory();
|
|
144
154
|
const importBatch = [factory.itemAdded.next({ id: 'mismatch', title: 'Mismatch' })];
|
|
@@ -155,10 +165,10 @@ Vitest.describe('sync-operations', { timeout: 10_000 }, () => {
|
|
|
155
165
|
},
|
|
156
166
|
force: false,
|
|
157
167
|
dryRun: false,
|
|
158
|
-
}).pipe(Effect.
|
|
159
|
-
expect(result._tag).toBe('
|
|
160
|
-
if (result._tag === '
|
|
161
|
-
expect(result.
|
|
168
|
+
}).pipe(Effect.result);
|
|
169
|
+
expect(result._tag).toBe('Failure');
|
|
170
|
+
if (result._tag === 'Failure') {
|
|
171
|
+
expect(result.failure._tag).toBe('ImportError');
|
|
162
172
|
}
|
|
163
173
|
const lifecycle = yield* expectConnectLifecycle(connectionEvents);
|
|
164
174
|
expect(lifecycle).toEqual(['connect', 'disconnect']);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-operations.test.js","sourceRoot":"","sources":["../../src/__tests__/sync-operations.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"sync-operations.test.js","sourceRoot":"","sources":["../../src/__tests__/sync-operations.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAc,MAAM,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC7G,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAA;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AAC1F,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAE3E,MAAM,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,cAAc,CAAC,KAAK,EAAE,eAAe,CAAC,KAAK,CAAC,CAAA;AAC1F,MAAM,WAAW,GAAG,MAAM,CAAC,eAAe,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC,CAAA;AAE1E,mGAAmG;AACnG,MAAM,CAAC,QAAQ,CAAC,iBAAiB,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE;IAC3D,MAAM,OAAO,GAAG,YAAY,CAAA;IAC5B,MAAM,QAAQ,GAAG,aAAa,CAAA;IAE9B,oFAAoF;IACpF,MAAM,sBAAsB,GAAG,CAC7B,OAA8C,EACU,EAAE,CAC1D,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAA;IAEnE,MAAM,CAAC,IAAI,CAAC,oDAAoD,EAAE,CAAC,IAAwB,EAAE,EAAE,CAC7F,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC,CAAC,aAAa,CAAA;QAC1E,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAA;QAElC,MAAM,KAAK,GAAG;YACZ,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;YACpD,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;SACtD,CAAA;QAED,KAAK,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,CAAA;QAEpC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,yBAAyB,CAAC;YAC9C,UAAU;YACV,OAAO;YACP,QAAQ;SACT,CAAC,CAAA;QAEF,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QAE1C,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,CAAA;QACjE,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAA;IACtD,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAC3B,CAAA;IAED,MAAM,CAAC,IAAI,CAAC,6DAA6D,EAAE,CAAC,IAAwB,EAAE,EAAE,CACtG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,EAAE,UAAU,EAAE,oBAAoB,EAAE,GAAG,KAAK,CAAC,CAAC,aAAa,CAAA;QACjE,KAAK,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAA;QAEtD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,yBAAyB,CAAC;YAC9C,UAAU;YACV,OAAO;YACP,QAAQ;SACT,CAAC,CAAA;QAEF,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACnC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAC3B,CAAA;IAED,MAAM,CAAC,IAAI,CAAC,wCAAwC,EAAE,CAAC,IAAwB,EAAE,EAAE,CACjF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC,CAAC,aAAa,CAAA;QAC1E,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAA;QAElC,KAAK,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;QAExF,MAAM,WAAW,GAAG;YAClB,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;YAC/D,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;SAClE,CAAA;QAED,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,uBAAuB,CAAC;YAC5C,UAAU;YACV,OAAO;YACP,QAAQ;YACR,IAAI,EAAE;gBACJ,OAAO,EAAE,CAAC;gBACV,OAAO;gBACP,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACpC,UAAU,EAAE,WAAW,CAAC,MAAM;gBAC9B,MAAM,EAAE,WAAW;aACpB;YACD,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,KAAK;SACd,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAEtB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACnC,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QACjD,CAAC;QAED,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,CAAA;QACjE,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAA;IACtD,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAC3B,CAAA;IAED,MAAM,CAAC,IAAI,CAAC,8CAA8C,EAAE,CAAC,IAAwB,EAAE,EAAE,CACvF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,GAAG,KAAK,CAAC,CAAC,aAAa,CAAA;QAC7D,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAA;QAClC,MAAM,WAAW,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,CAAA;QAEnF,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,uBAAuB,CAAC;YAC5C,UAAU;YACV,OAAO;YACP,QAAQ;YACR,IAAI,EAAE;gBACJ,OAAO,EAAE,CAAC;gBACV,OAAO;gBACP,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACpC,UAAU,EAAE,WAAW,CAAC,MAAM;gBAC9B,MAAM,EAAE,WAAW;aACpB;YACD,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,IAAI;SACb,CAAC,CAAA;QAEF,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAChC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;QAElD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,CAAA;QACjE,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAA;IACtD,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAC3B,CAAA;IAED,MAAM,CAAC,IAAI,CAAC,8DAA8D,EAAE,CAAC,IAAwB,EAAE,EAAE,CACvG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,gBAAgB,EAAE,GAAG,KAAK,CAAC,CAAC,aAAa,CAAA;QAC1E,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAA;QAClC,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CACzD,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,GAAG,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,CAC1E,CAAA;QAED,MAAM,QAAQ,GAA6C,EAAE,CAAA;QAE7D,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,uBAAuB,CAAC;YAC5C,UAAU;YACV,OAAO;YACP,QAAQ;YACR,IAAI,EAAE;gBACJ,OAAO,EAAE,CAAC;gBACV,OAAO;gBACP,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACpC,UAAU,EAAE,WAAW,CAAC,MAAM;gBAC9B,MAAM,EAAE,WAAW;aACpB;YACD,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,KAAK;YACb,UAAU,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;SACnF,CAAC,CAAA;QAEF,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACjC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;QAClD,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC;YACvB,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;YAC3B,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;SAC5B,CAAC,CAAA;QAEF,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAA;QAC7G,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;QAElF,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,CAAA;QACjE,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAA;IACtD,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAC3B,CAAA;IAED,MAAM,CAAC,IAAI,CAAC,0CAA0C,EAAE,CAAC,IAAwB,EAAE,EAAE,CACnF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,gBAAgB,EAAE,GAAG,KAAK,CAAC,CAAC,aAAa,CAAA;QAC1E,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAA;QAClC,MAAM,WAAW,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;QAE/E,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,uBAAuB,CAAC;YAC5C,UAAU;YACV,OAAO;YACP,QAAQ;YACR,IAAI,EAAE;gBACJ,OAAO,EAAE,CAAC;gBACV,OAAO,EAAE,iBAAiB;gBAC1B,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACpC,UAAU,EAAE,WAAW,CAAC,MAAM;gBAC9B,MAAM,EAAE,WAAW;aACpB;YACD,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,KAAK;SACd,CAAC,CAAA;QAEF,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACjC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;QAElD,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAA;QAC5F,MAAM,CAAC,YAAY,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QAEpC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,CAAA;QACjE,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAA;IACtD,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAC3B,CAAA;IAED,MAAM,CAAC,IAAI,CAAC,yCAAyC,EAAE,CAAC,IAAwB,EAAE,EAAE,CAClF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,GAAG,KAAK,CAAC,CAAC,aAAa,CAAA;QAC7D,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAA;QAClC,MAAM,WAAW,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,CAAA;QAEnF,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,uBAAuB,CAAC;YAC5C,UAAU;YACV,OAAO;YACP,QAAQ;YACR,IAAI,EAAE;gBACJ,OAAO,EAAE,CAAC;gBACV,OAAO,EAAE,aAAa;gBACtB,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACpC,UAAU,EAAE,WAAW,CAAC,MAAM;gBAC9B,MAAM,EAAE,WAAW;aACpB;YACD,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,KAAK;SACd,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAEtB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACnC,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QACjD,CAAC;QAED,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,CAAA;QACjE,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAA;IACtD,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAC3B,CAAA;AACH,CAAC,CAAC,CAAA"}
|
package/dist/bin.js
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { liveStoreVersion } from '@livestore/common';
|
|
3
|
-
import { Console, Effect, FetchHttpClient, Layer, Logger,
|
|
3
|
+
import { Console, Effect, FetchHttpClient, Layer, Logger, References } from '@livestore/utils/effect';
|
|
4
4
|
import { Cli, PlatformNode } from '@livestore/utils/node';
|
|
5
|
-
import { command } from
|
|
5
|
+
import { command } from './cli.js';
|
|
6
6
|
const cli = Cli.Command.run(command, {
|
|
7
|
-
name: 'livestore',
|
|
8
7
|
version: liveStoreVersion,
|
|
9
8
|
});
|
|
10
|
-
const showExperimentalWarning = Console.
|
|
11
|
-
const layer = Layer.mergeAll(PlatformNode.
|
|
9
|
+
const showExperimentalWarning = Console.error('⚠️ Warning: LiveStore CLI is experimental and under active development');
|
|
10
|
+
const layer = Layer.mergeAll(PlatformNode.NodeServices.layer, FetchHttpClient.layer, Layer.succeed(References.MinimumLogLevel, 'Info'),
|
|
11
|
+
// Keep stdout available for command data and protocol transports such as MCP stdio.
|
|
12
|
+
Layer.succeed(Logger.LogToStderr, true));
|
|
12
13
|
Effect.gen(function* () {
|
|
13
14
|
yield* showExperimentalWarning;
|
|
14
|
-
return yield* cli
|
|
15
|
+
return yield* cli;
|
|
15
16
|
}).pipe(Effect.provide(layer), PlatformNode.NodeRuntime.runMain);
|
|
16
17
|
//# sourceMappingURL=bin.js.map
|
package/dist/bin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACrG,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAEzD,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAElC,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE;IACnC,OAAO,EAAE,gBAAgB;CAC1B,CAAC,CAAA;AAEF,MAAM,uBAAuB,GAAG,OAAO,CAAC,KAAK,CAAC,yEAAyE,CAAC,CAAA;AAExH,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAC1B,YAAY,CAAC,YAAY,CAAC,KAAK,EAC/B,eAAe,CAAC,KAAK,EACrB,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,eAAe,EAAE,MAAM,CAAC;AACjD,oFAAoF;AACpF,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,CACxC,CAAA;AAED,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,KAAK,CAAC,CAAC,uBAAuB,CAAA;IAC9B,OAAO,KAAK,CAAC,CAAC,GAAG,CAAA;AACnB,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA"}
|
package/dist/cli.d.ts
CHANGED
|
@@ -1,26 +1,5 @@
|
|
|
1
1
|
import { Cli } from '@livestore/utils/node';
|
|
2
|
-
export declare const command: Cli.Command.Command<"livestore",
|
|
2
|
+
export declare const command: Cli.Command.Command<"livestore", {
|
|
3
3
|
readonly verbose: boolean;
|
|
4
|
-
|
|
5
|
-
readonly subcommand: import("effect/Option").Option<{
|
|
6
|
-
readonly config: string;
|
|
7
|
-
readonly storeId: string;
|
|
8
|
-
readonly clientId: string;
|
|
9
|
-
readonly output: string;
|
|
10
|
-
} | {
|
|
11
|
-
readonly config: string;
|
|
12
|
-
readonly storeId: string;
|
|
13
|
-
readonly clientId: string;
|
|
14
|
-
readonly force: boolean;
|
|
15
|
-
readonly dryRun: boolean;
|
|
16
|
-
readonly input: string;
|
|
17
|
-
}>;
|
|
18
|
-
} | {
|
|
19
|
-
readonly subcommand: import("effect/Option").Option<{}>;
|
|
20
|
-
} | {
|
|
21
|
-
readonly example: import("effect/Option").Option<string>;
|
|
22
|
-
readonly ref: string;
|
|
23
|
-
readonly path: import("effect/Option").Option<string>;
|
|
24
|
-
}>;
|
|
25
|
-
}>;
|
|
4
|
+
} | {}, {}, import("./sync-operations.ts").ConnectionError | import("./commands/new-project.ts").ExampleNotFoundError | import("./sync-operations.ts").ExportError | import("effect/http/HttpClientError").HttpClientError | import("effect/Cause").IllegalArgumentError | import("./sync-operations.ts").ImportError | import("./commands/new-project.ts").NetworkError | import("./commands/new-project.ts").NoExamplesError | import("effect/PlatformError").PlatformError | import("effect/Terminal").QuitError | import("@livestore/common").UnknownError, import("effect/process/ChildProcessSpawner").ChildProcessSpawner | import("effect/http/HttpClient").HttpClient | Cli.Prompt.Environment>;
|
|
26
5
|
//# sourceMappingURL=cli.d.ts.map
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAA;AAM3C,eAAO,MAAM,OAAO
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAA;AAM3C,eAAO,MAAM,OAAO;;wqBAE0D,CAAA"}
|
package/dist/cli.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Cli } from '@livestore/utils/node';
|
|
2
|
-
import { syncCommand } from
|
|
3
|
-
import { mcpCommand } from
|
|
4
|
-
import { createCommand } from
|
|
2
|
+
import { syncCommand } from './commands/import-export.js';
|
|
3
|
+
import { mcpCommand } from './commands/mcp.js';
|
|
4
|
+
import { createCommand } from './commands/new-project.js';
|
|
5
5
|
export const command = Cli.Command.make('livestore', {
|
|
6
|
-
verbose: Cli.
|
|
6
|
+
verbose: Cli.Flag.Boolean('verbose').pipe(Cli.Flag.withDefault(false)),
|
|
7
7
|
}).pipe(Cli.Command.withSubcommands([mcpCommand, createCommand, syncCommand]));
|
|
8
8
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAA;AAE3C,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAEzD,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE;IACnD,OAAO,EAAE,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAA;AAE3C,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAEzD,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE;IACnD,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;CACvE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,UAAU,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-protocol-server.d.ts","sourceRoot":"","sources":["../../../src/commands/__fixtures__/mcp-protocol-server.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { McpServer } from 'effect/ai';
|
|
2
|
+
import { Effect, Layer } from '@livestore/utils/effect';
|
|
3
|
+
import { PlatformNode } from '@livestore/utils/node';
|
|
4
|
+
import { supportedMcpProtocols } from '../mcp-protocols.js';
|
|
5
|
+
McpServer.layerStdio({
|
|
6
|
+
name: 'livestore-mcp-protocol-test',
|
|
7
|
+
version: '0.0.0',
|
|
8
|
+
protocols: supportedMcpProtocols,
|
|
9
|
+
}).pipe(Layer.provide(PlatformNode.NodeStdio.layer), Layer.launch, Effect.scoped, PlatformNode.NodeRuntime.runMain);
|
|
10
|
+
//# sourceMappingURL=mcp-protocol-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-protocol-server.js","sourceRoot":"","sources":["../../../src/commands/__fixtures__/mcp-protocol-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAErC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAEpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAE3D,SAAS,CAAC,UAAU,CAAC;IACnB,IAAI,EAAE,6BAA6B;IACnC,OAAO,EAAE,OAAO;IAChB,SAAS,EAAE,qBAAqB;CACjC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA"}
|
|
@@ -2,33 +2,19 @@ import type { UnknownError } from '@livestore/common';
|
|
|
2
2
|
import { FileSystem, type HttpClient } from '@livestore/utils/effect';
|
|
3
3
|
import { Cli } from '@livestore/utils/node';
|
|
4
4
|
import * as SyncOps from '../sync-operations.ts';
|
|
5
|
-
export declare const exportCommand: Cli.Command.Command<"export",
|
|
5
|
+
export declare const exportCommand: Cli.Command.Command<"export", {
|
|
6
6
|
readonly config: string;
|
|
7
7
|
readonly storeId: string;
|
|
8
8
|
readonly clientId: string;
|
|
9
9
|
readonly output: string;
|
|
10
|
-
}>;
|
|
11
|
-
export declare const importCommand: Cli.Command.Command<"import",
|
|
10
|
+
}, {}, SyncOps.ConnectionError | SyncOps.ExportError | UnknownError, FileSystem.FileSystem | HttpClient.HttpClient>;
|
|
11
|
+
export declare const importCommand: Cli.Command.Command<"import", {
|
|
12
12
|
readonly config: string;
|
|
13
13
|
readonly storeId: string;
|
|
14
14
|
readonly clientId: string;
|
|
15
15
|
readonly force: boolean;
|
|
16
16
|
readonly dryRun: boolean;
|
|
17
17
|
readonly input: string;
|
|
18
|
-
}>;
|
|
19
|
-
export declare const syncCommand: Cli.Command.Command<"sync",
|
|
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
|
-
}>;
|
|
18
|
+
}, {}, SyncOps.ConnectionError | SyncOps.ImportError | UnknownError, FileSystem.FileSystem | HttpClient.HttpClient>;
|
|
19
|
+
export declare const syncCommand: Cli.Command.Command<"sync", {}, {}, SyncOps.ConnectionError | SyncOps.ExportError | SyncOps.ImportError | UnknownError, FileSystem.FileSystem | HttpClient.HttpClient>;
|
|
34
20
|
//# sourceMappingURL=import-export.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-export.d.ts","sourceRoot":"","sources":["../../src/commands/import-export.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAAmB,UAAU,EAAE,KAAK,UAAU,EAAsB,MAAM,yBAAyB,CAAA;AAC1G,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAA;AAE3C,OAAO,KAAK,OAAO,MAAM,uBAAuB,CAAA;AAoKhD,eAAO,MAAM,aAAa;;;;;
|
|
1
|
+
{"version":3,"file":"import-export.d.ts","sourceRoot":"","sources":["../../src/commands/import-export.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAAmB,UAAU,EAAE,KAAK,UAAU,EAAsB,MAAM,yBAAyB,CAAA;AAC1G,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAA;AAE3C,OAAO,KAAK,OAAO,MAAM,uBAAuB,CAAA;AAoKhD,eAAO,MAAM,aAAa;;;;;mHA6CzB,CAAA;AAED,eAAO,MAAM,aAAa;;;;;;;mHA4DzB,CAAA;AAED,eAAO,MAAM,WAAW,wKAGvB,CAAA"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
2
|
import { Console, Effect, FileSystem, Schema } from '@livestore/utils/effect';
|
|
3
3
|
import { Cli } from '@livestore/utils/node';
|
|
4
|
-
import * as SyncOps from
|
|
5
|
-
const jsonStringifyPretty =
|
|
6
|
-
const jsonParse = Schema.decodeUnknownSync(Schema.
|
|
4
|
+
import * as SyncOps from '../sync-operations.js';
|
|
5
|
+
const jsonStringifyPretty = (value) => JSON.stringify(value, null, 2);
|
|
6
|
+
const jsonParse = Schema.decodeUnknownSync(Schema.fromJsonString(Schema.Unknown));
|
|
7
7
|
const LARGE_EVENT_WARNING_THRESHOLD = 100_000;
|
|
8
8
|
/**
|
|
9
9
|
* Export events from the sync backend to a JSON file.
|
|
@@ -88,10 +88,10 @@ const importEvents = ({ configPath, storeId, clientId, inputPath, force, dryRun,
|
|
|
88
88
|
yield* Console.log(`Successfully imported ${result.eventCount} events`);
|
|
89
89
|
}).pipe(Effect.withSpan('cli:import'));
|
|
90
90
|
export const exportCommand = Cli.Command.make('export', {
|
|
91
|
-
config: Cli.
|
|
92
|
-
storeId: Cli.
|
|
93
|
-
clientId: Cli.
|
|
94
|
-
output: Cli.
|
|
91
|
+
config: Cli.Flag.String('config').pipe(Cli.Flag.withAlias('c'), Cli.Flag.withDescription('Path to the config module that exports schema and syncBackend')),
|
|
92
|
+
storeId: Cli.Flag.String('store-id').pipe(Cli.Flag.withAlias('i'), Cli.Flag.withDescription('Store identifier')),
|
|
93
|
+
clientId: Cli.Flag.String('client-id').pipe(Cli.Flag.withDefault('cli-export'), Cli.Flag.withDescription('Client identifier for the sync connection')),
|
|
94
|
+
output: Cli.Argument.String('file').pipe(Cli.Argument.withDescription('Output JSON file path')),
|
|
95
95
|
}, Effect.fn(function* ({ config, storeId, clientId, output, }) {
|
|
96
96
|
yield* Console.log(`Exporting events from LiveStore...`);
|
|
97
97
|
yield* Console.log(` Config: ${config}`);
|
|
@@ -106,12 +106,12 @@ export const exportCommand = Cli.Command.make('export', {
|
|
|
106
106
|
}).pipe(Effect.scoped);
|
|
107
107
|
})).pipe(Cli.Command.withDescription('Export all events from the sync backend to a JSON file. Useful for backup and migration.'));
|
|
108
108
|
export const importCommand = Cli.Command.make('import', {
|
|
109
|
-
config: Cli.
|
|
110
|
-
storeId: Cli.
|
|
111
|
-
clientId: Cli.
|
|
112
|
-
force: Cli.
|
|
113
|
-
dryRun: Cli.
|
|
114
|
-
input: Cli.
|
|
109
|
+
config: Cli.Flag.String('config').pipe(Cli.Flag.withAlias('c'), Cli.Flag.withDescription('Path to the config module that exports schema and syncBackend')),
|
|
110
|
+
storeId: Cli.Flag.String('store-id').pipe(Cli.Flag.withAlias('i'), Cli.Flag.withDescription('Store identifier')),
|
|
111
|
+
clientId: Cli.Flag.String('client-id').pipe(Cli.Flag.withDefault('cli-import'), Cli.Flag.withDescription('Client identifier for the sync connection')),
|
|
112
|
+
force: Cli.Flag.Boolean('force').pipe(Cli.Flag.withAlias('f'), Cli.Flag.withDefault(false), Cli.Flag.withDescription('Force import even if store ID does not match')),
|
|
113
|
+
dryRun: Cli.Flag.Boolean('dry-run').pipe(Cli.Flag.withDefault(false), Cli.Flag.withDescription('Validate the import file without actually importing')),
|
|
114
|
+
input: Cli.Argument.String('file').pipe(Cli.Argument.withDescription('Input JSON file to import')),
|
|
115
115
|
}, Effect.fn(function* ({ config, storeId, clientId, force, dryRun, input, }) {
|
|
116
116
|
yield* Console.log(`Importing events to LiveStore...`);
|
|
117
117
|
yield* Console.log(` Config: ${config}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-export.js","sourceRoot":"","sources":["../../src/commands/import-export.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAG5B,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAmB,MAAM,EAAc,MAAM,yBAAyB,CAAA;AAC1G,OAAO,EAAE,GAAG,EAAE,MAAM,uBAAuB,CAAA;AAE3C,OAAO,KAAK,OAAO,MAAM,uBAAuB,CAAA;AAEhD,MAAM,mBAAmB,GAAG,
|
|
1
|
+
{"version":3,"file":"import-export.js","sourceRoot":"","sources":["../../src/commands/import-export.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
import { AiError,
|
|
1
|
+
import { AiError, Tool } from 'effect/ai';
|
|
2
|
+
import { Effect, Schema } from '@livestore/utils/effect';
|
|
2
3
|
export declare const coachTool: Tool.Tool<"livestore_coach", {
|
|
3
4
|
readonly parameters: Schema.Struct<{
|
|
4
|
-
code: Schema.
|
|
5
|
-
codeType: Schema.optional<Schema.
|
|
5
|
+
readonly code: Schema.String;
|
|
6
|
+
readonly codeType: Schema.optional<Schema.String>;
|
|
6
7
|
}>;
|
|
7
8
|
readonly success: Schema.Struct<{
|
|
8
|
-
feedback: Schema.
|
|
9
|
-
score: Schema.optional<Schema.
|
|
10
|
-
suggestions: Schema
|
|
9
|
+
readonly feedback: Schema.String;
|
|
10
|
+
readonly score: Schema.optional<Schema.Finite>;
|
|
11
|
+
readonly suggestions: Schema.$Array<Schema.String>;
|
|
11
12
|
}>;
|
|
12
|
-
readonly failure:
|
|
13
|
+
readonly failure: typeof AiError.AiError;
|
|
13
14
|
readonly failureMode: "error";
|
|
14
15
|
}, never>;
|
|
15
16
|
type CoachToolHandlerInput = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-coach.d.ts","sourceRoot":"","sources":["../../src/commands/mcp-coach.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mcp-coach.d.ts","sourceRoot":"","sources":["../../src/commands/mcp-coach.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAyB,IAAI,EAAE,MAAM,WAAW,CAAA;AAGhE,OAAO,EAAU,MAAM,EAA0B,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAGxF,eAAO,MAAM,SAAS;;;;;;;;;;;;SA+BpB,CAAA;AAQF,KAAK,qBAAqB,GAAG;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACvC,CAAA;AAED,KAAK,eAAe,GAAG;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,CAAA;CAC/B,CAAA;AAED,uDAAuD;AACvD,eAAO,MAAM,gBAAgB,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,OAAO,CAAC,OAAO,CAyE3G,CAAA"}
|