@stoneforge/quarry 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +13 -0
- package/README.md +160 -0
- package/dist/api/index.d.ts +8 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +8 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/quarry-api.d.ts +268 -0
- package/dist/api/quarry-api.d.ts.map +1 -0
- package/dist/api/quarry-api.js +3905 -0
- package/dist/api/quarry-api.js.map +1 -0
- package/dist/api/types.d.ts +1359 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +204 -0
- package/dist/api/types.js.map +1 -0
- package/dist/bin/sf.d.ts +3 -0
- package/dist/bin/sf.d.ts.map +1 -0
- package/dist/bin/sf.js +9 -0
- package/dist/bin/sf.js.map +1 -0
- package/dist/cli/commands/admin.d.ts +11 -0
- package/dist/cli/commands/admin.d.ts.map +1 -0
- package/dist/cli/commands/admin.js +465 -0
- package/dist/cli/commands/admin.js.map +1 -0
- package/dist/cli/commands/alias.d.ts +8 -0
- package/dist/cli/commands/alias.d.ts.map +1 -0
- package/dist/cli/commands/alias.js +70 -0
- package/dist/cli/commands/alias.js.map +1 -0
- package/dist/cli/commands/channel.d.ts +13 -0
- package/dist/cli/commands/channel.d.ts.map +1 -0
- package/dist/cli/commands/channel.js +680 -0
- package/dist/cli/commands/channel.js.map +1 -0
- package/dist/cli/commands/completion.d.ts +8 -0
- package/dist/cli/commands/completion.d.ts.map +1 -0
- package/dist/cli/commands/completion.js +87 -0
- package/dist/cli/commands/completion.js.map +1 -0
- package/dist/cli/commands/config.d.ts +12 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +242 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/crud.d.ts +64 -0
- package/dist/cli/commands/crud.d.ts.map +1 -0
- package/dist/cli/commands/crud.js +805 -0
- package/dist/cli/commands/crud.js.map +1 -0
- package/dist/cli/commands/dep.d.ts +16 -0
- package/dist/cli/commands/dep.d.ts.map +1 -0
- package/dist/cli/commands/dep.js +499 -0
- package/dist/cli/commands/dep.js.map +1 -0
- package/dist/cli/commands/document.d.ts +12 -0
- package/dist/cli/commands/document.d.ts.map +1 -0
- package/dist/cli/commands/document.js +1039 -0
- package/dist/cli/commands/document.js.map +1 -0
- package/dist/cli/commands/embeddings.d.ts +12 -0
- package/dist/cli/commands/embeddings.d.ts.map +1 -0
- package/dist/cli/commands/embeddings.js +273 -0
- package/dist/cli/commands/embeddings.js.map +1 -0
- package/dist/cli/commands/entity.d.ts +16 -0
- package/dist/cli/commands/entity.d.ts.map +1 -0
- package/dist/cli/commands/entity.js +522 -0
- package/dist/cli/commands/entity.js.map +1 -0
- package/dist/cli/commands/gc.d.ts +10 -0
- package/dist/cli/commands/gc.d.ts.map +1 -0
- package/dist/cli/commands/gc.js +257 -0
- package/dist/cli/commands/gc.js.map +1 -0
- package/dist/cli/commands/help.d.ts +11 -0
- package/dist/cli/commands/help.d.ts.map +1 -0
- package/dist/cli/commands/help.js +169 -0
- package/dist/cli/commands/help.js.map +1 -0
- package/dist/cli/commands/history.d.ts +9 -0
- package/dist/cli/commands/history.d.ts.map +1 -0
- package/dist/cli/commands/history.js +160 -0
- package/dist/cli/commands/history.js.map +1 -0
- package/dist/cli/commands/identity.d.ts +18 -0
- package/dist/cli/commands/identity.d.ts.map +1 -0
- package/dist/cli/commands/identity.js +698 -0
- package/dist/cli/commands/identity.js.map +1 -0
- package/dist/cli/commands/inbox.d.ts +20 -0
- package/dist/cli/commands/inbox.d.ts.map +1 -0
- package/dist/cli/commands/inbox.js +493 -0
- package/dist/cli/commands/inbox.js.map +1 -0
- package/dist/cli/commands/init.d.ts +20 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +144 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/install.d.ts +9 -0
- package/dist/cli/commands/install.d.ts.map +1 -0
- package/dist/cli/commands/install.js +200 -0
- package/dist/cli/commands/install.js.map +1 -0
- package/dist/cli/commands/library.d.ts +12 -0
- package/dist/cli/commands/library.d.ts.map +1 -0
- package/dist/cli/commands/library.js +665 -0
- package/dist/cli/commands/library.js.map +1 -0
- package/dist/cli/commands/message.d.ts +11 -0
- package/dist/cli/commands/message.d.ts.map +1 -0
- package/dist/cli/commands/message.js +608 -0
- package/dist/cli/commands/message.js.map +1 -0
- package/dist/cli/commands/plan.d.ts +17 -0
- package/dist/cli/commands/plan.d.ts.map +1 -0
- package/dist/cli/commands/plan.js +698 -0
- package/dist/cli/commands/plan.js.map +1 -0
- package/dist/cli/commands/playbook.d.ts +12 -0
- package/dist/cli/commands/playbook.d.ts.map +1 -0
- package/dist/cli/commands/playbook.js +730 -0
- package/dist/cli/commands/playbook.js.map +1 -0
- package/dist/cli/commands/reset.d.ts +12 -0
- package/dist/cli/commands/reset.d.ts.map +1 -0
- package/dist/cli/commands/reset.js +306 -0
- package/dist/cli/commands/reset.js.map +1 -0
- package/dist/cli/commands/serve.d.ts +11 -0
- package/dist/cli/commands/serve.d.ts.map +1 -0
- package/dist/cli/commands/serve.js +106 -0
- package/dist/cli/commands/serve.js.map +1 -0
- package/dist/cli/commands/stats.d.ts +8 -0
- package/dist/cli/commands/stats.d.ts.map +1 -0
- package/dist/cli/commands/stats.js +82 -0
- package/dist/cli/commands/stats.js.map +1 -0
- package/dist/cli/commands/sync.d.ts +14 -0
- package/dist/cli/commands/sync.d.ts.map +1 -0
- package/dist/cli/commands/sync.js +370 -0
- package/dist/cli/commands/sync.js.map +1 -0
- package/dist/cli/commands/task.d.ts +25 -0
- package/dist/cli/commands/task.d.ts.map +1 -0
- package/dist/cli/commands/task.js +1153 -0
- package/dist/cli/commands/task.js.map +1 -0
- package/dist/cli/commands/team.d.ts +13 -0
- package/dist/cli/commands/team.d.ts.map +1 -0
- package/dist/cli/commands/team.js +471 -0
- package/dist/cli/commands/team.js.map +1 -0
- package/dist/cli/commands/workflow.d.ts +16 -0
- package/dist/cli/commands/workflow.d.ts.map +1 -0
- package/dist/cli/commands/workflow.js +753 -0
- package/dist/cli/commands/workflow.js.map +1 -0
- package/dist/cli/completion.d.ts +28 -0
- package/dist/cli/completion.d.ts.map +1 -0
- package/dist/cli/completion.js +295 -0
- package/dist/cli/completion.js.map +1 -0
- package/dist/cli/db.d.ts +38 -0
- package/dist/cli/db.d.ts.map +1 -0
- package/dist/cli/db.js +90 -0
- package/dist/cli/db.js.map +1 -0
- package/dist/cli/formatter.d.ts +87 -0
- package/dist/cli/formatter.d.ts.map +1 -0
- package/dist/cli/formatter.js +464 -0
- package/dist/cli/formatter.js.map +1 -0
- package/dist/cli/index.d.ts +33 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +38 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/parser.d.ts +45 -0
- package/dist/cli/parser.d.ts.map +1 -0
- package/dist/cli/parser.js +256 -0
- package/dist/cli/parser.js.map +1 -0
- package/dist/cli/plugin-loader.d.ts +39 -0
- package/dist/cli/plugin-loader.d.ts.map +1 -0
- package/dist/cli/plugin-loader.js +165 -0
- package/dist/cli/plugin-loader.js.map +1 -0
- package/dist/cli/plugin-registry.d.ts +50 -0
- package/dist/cli/plugin-registry.d.ts.map +1 -0
- package/dist/cli/plugin-registry.js +206 -0
- package/dist/cli/plugin-registry.js.map +1 -0
- package/dist/cli/plugin-types.d.ts +106 -0
- package/dist/cli/plugin-types.d.ts.map +1 -0
- package/dist/cli/plugin-types.js +103 -0
- package/dist/cli/plugin-types.js.map +1 -0
- package/dist/cli/runner.d.ts +35 -0
- package/dist/cli/runner.d.ts.map +1 -0
- package/dist/cli/runner.js +340 -0
- package/dist/cli/runner.js.map +1 -0
- package/dist/cli/suggest.d.ts +15 -0
- package/dist/cli/suggest.d.ts.map +1 -0
- package/dist/cli/suggest.js +49 -0
- package/dist/cli/suggest.js.map +1 -0
- package/dist/cli/types.d.ts +138 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +63 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/config/config.d.ts +86 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +348 -0
- package/dist/config/config.js.map +1 -0
- package/dist/config/defaults.d.ts +66 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +114 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/duration.d.ts +75 -0
- package/dist/config/duration.d.ts.map +1 -0
- package/dist/config/duration.js +190 -0
- package/dist/config/duration.js.map +1 -0
- package/dist/config/env.d.ts +67 -0
- package/dist/config/env.d.ts.map +1 -0
- package/dist/config/env.js +207 -0
- package/dist/config/env.js.map +1 -0
- package/dist/config/file.d.ts +97 -0
- package/dist/config/file.d.ts.map +1 -0
- package/dist/config/file.js +365 -0
- package/dist/config/file.js.map +1 -0
- package/dist/config/index.d.ts +35 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +41 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/merge.d.ts +53 -0
- package/dist/config/merge.d.ts.map +1 -0
- package/dist/config/merge.js +226 -0
- package/dist/config/merge.js.map +1 -0
- package/dist/config/types.d.ts +257 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +72 -0
- package/dist/config/types.js.map +1 -0
- package/dist/config/validation.d.ts +55 -0
- package/dist/config/validation.d.ts.map +1 -0
- package/dist/config/validation.js +251 -0
- package/dist/config/validation.js.map +1 -0
- package/dist/http/index.d.ts +8 -0
- package/dist/http/index.d.ts.map +1 -0
- package/dist/http/index.js +12 -0
- package/dist/http/index.js.map +1 -0
- package/dist/http/sync-handlers.d.ts +162 -0
- package/dist/http/sync-handlers.d.ts.map +1 -0
- package/dist/http/sync-handlers.js +271 -0
- package/dist/http/sync-handlers.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +69 -0
- package/dist/index.js.map +1 -0
- package/dist/server/index.d.ts +34 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +3329 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/static.d.ts +18 -0
- package/dist/server/static.d.ts.map +1 -0
- package/dist/server/static.js +71 -0
- package/dist/server/static.js.map +1 -0
- package/dist/server/ws/broadcaster.d.ts +8 -0
- package/dist/server/ws/broadcaster.d.ts.map +1 -0
- package/dist/server/ws/broadcaster.js +7 -0
- package/dist/server/ws/broadcaster.js.map +1 -0
- package/dist/server/ws/handler.d.ts +55 -0
- package/dist/server/ws/handler.d.ts.map +1 -0
- package/dist/server/ws/handler.js +160 -0
- package/dist/server/ws/handler.js.map +1 -0
- package/dist/services/blocked-cache.d.ts +297 -0
- package/dist/services/blocked-cache.d.ts.map +1 -0
- package/dist/services/blocked-cache.js +755 -0
- package/dist/services/blocked-cache.js.map +1 -0
- package/dist/services/dependency.d.ts +205 -0
- package/dist/services/dependency.d.ts.map +1 -0
- package/dist/services/dependency.js +566 -0
- package/dist/services/dependency.js.map +1 -0
- package/dist/services/embeddings/fusion.d.ts +33 -0
- package/dist/services/embeddings/fusion.d.ts.map +1 -0
- package/dist/services/embeddings/fusion.js +34 -0
- package/dist/services/embeddings/fusion.js.map +1 -0
- package/dist/services/embeddings/index.d.ts +12 -0
- package/dist/services/embeddings/index.d.ts.map +1 -0
- package/dist/services/embeddings/index.js +10 -0
- package/dist/services/embeddings/index.js.map +1 -0
- package/dist/services/embeddings/local-provider.d.ts +31 -0
- package/dist/services/embeddings/local-provider.d.ts.map +1 -0
- package/dist/services/embeddings/local-provider.js +80 -0
- package/dist/services/embeddings/local-provider.js.map +1 -0
- package/dist/services/embeddings/service.d.ts +76 -0
- package/dist/services/embeddings/service.d.ts.map +1 -0
- package/dist/services/embeddings/service.js +153 -0
- package/dist/services/embeddings/service.js.map +1 -0
- package/dist/services/embeddings/types.d.ts +70 -0
- package/dist/services/embeddings/types.d.ts.map +1 -0
- package/dist/services/embeddings/types.js +8 -0
- package/dist/services/embeddings/types.js.map +1 -0
- package/dist/services/id-length-cache.d.ts +156 -0
- package/dist/services/id-length-cache.d.ts.map +1 -0
- package/dist/services/id-length-cache.js +197 -0
- package/dist/services/id-length-cache.js.map +1 -0
- package/dist/services/inbox.d.ts +147 -0
- package/dist/services/inbox.d.ts.map +1 -0
- package/dist/services/inbox.js +428 -0
- package/dist/services/inbox.js.map +1 -0
- package/dist/services/index.d.ts +10 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +10 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/priority-service.d.ts +145 -0
- package/dist/services/priority-service.d.ts.map +1 -0
- package/dist/services/priority-service.js +272 -0
- package/dist/services/priority-service.js.map +1 -0
- package/dist/services/search-utils.d.ts +47 -0
- package/dist/services/search-utils.d.ts.map +1 -0
- package/dist/services/search-utils.js +83 -0
- package/dist/services/search-utils.js.map +1 -0
- package/dist/sync/hash.d.ts +48 -0
- package/dist/sync/hash.d.ts.map +1 -0
- package/dist/sync/hash.js +136 -0
- package/dist/sync/hash.js.map +1 -0
- package/dist/sync/index.d.ts +11 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/index.js +16 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/sync/merge.d.ts +80 -0
- package/dist/sync/merge.d.ts.map +1 -0
- package/dist/sync/merge.js +310 -0
- package/dist/sync/merge.js.map +1 -0
- package/dist/sync/serialization.d.ts +132 -0
- package/dist/sync/serialization.d.ts.map +1 -0
- package/dist/sync/serialization.js +306 -0
- package/dist/sync/serialization.js.map +1 -0
- package/dist/sync/service.d.ts +102 -0
- package/dist/sync/service.d.ts.map +1 -0
- package/dist/sync/service.js +493 -0
- package/dist/sync/service.js.map +1 -0
- package/dist/sync/types.d.ts +275 -0
- package/dist/sync/types.d.ts.map +1 -0
- package/dist/sync/types.js +76 -0
- package/dist/sync/types.js.map +1 -0
- package/dist/systems/identity.d.ts +479 -0
- package/dist/systems/identity.d.ts.map +1 -0
- package/dist/systems/identity.js +817 -0
- package/dist/systems/identity.js.map +1 -0
- package/dist/systems/index.d.ts +8 -0
- package/dist/systems/index.d.ts.map +1 -0
- package/dist/systems/index.js +29 -0
- package/dist/systems/index.js.map +1 -0
- package/package.json +121 -0
- package/web/assets/charts-vendor-D1YcbGux.js +55 -0
- package/web/assets/dnd-vendor-DmxE-_ZH.js +5 -0
- package/web/assets/editor-vendor-BxraAWts.js +279 -0
- package/web/assets/index-B77vv208.js +341 -0
- package/web/assets/index-CF_XnVLh.css +1 -0
- package/web/assets/router-vendor-BCKpRBrB.js +41 -0
- package/web/assets/ui-vendor-DUahGnbT.js +45 -0
- package/web/assets/utils-vendor-CfYKiENT.js +813 -0
- package/web/favicon.ico +0 -0
- package/web/index.html +23 -0
- package/web/logo.png +0 -0
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sync Serialization - JSONL format serialization and parsing
|
|
3
|
+
*
|
|
4
|
+
* Handles conversion between Element/Dependency objects and JSONL format.
|
|
5
|
+
* All timestamps are normalized to ISO 8601 format.
|
|
6
|
+
*/
|
|
7
|
+
import { ValidationError, ErrorCode, isElement, validateElement, isDependency, validateDependency } from '@stoneforge/core';
|
|
8
|
+
import { getTypePriority } from './types.js';
|
|
9
|
+
// ============================================================================
|
|
10
|
+
// Element Serialization
|
|
11
|
+
// ============================================================================
|
|
12
|
+
/**
|
|
13
|
+
* Serialize an element to JSONL format
|
|
14
|
+
*
|
|
15
|
+
* @param element - Element to serialize
|
|
16
|
+
* @returns JSON string ready for JSONL file
|
|
17
|
+
*/
|
|
18
|
+
export function serializeElement(element) {
|
|
19
|
+
// Validate element before serializing
|
|
20
|
+
if (!isElement(element)) {
|
|
21
|
+
throw new ValidationError('Cannot serialize invalid element', ErrorCode.INVALID_INPUT, { element });
|
|
22
|
+
}
|
|
23
|
+
// Create serialized form with all fields inline
|
|
24
|
+
const serialized = {
|
|
25
|
+
...element,
|
|
26
|
+
id: element.id,
|
|
27
|
+
type: element.type,
|
|
28
|
+
createdAt: element.createdAt,
|
|
29
|
+
updatedAt: element.updatedAt,
|
|
30
|
+
createdBy: element.createdBy,
|
|
31
|
+
tags: [...element.tags],
|
|
32
|
+
metadata: { ...element.metadata },
|
|
33
|
+
};
|
|
34
|
+
return JSON.stringify(serialized);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Parse a JSONL line into an element
|
|
38
|
+
*
|
|
39
|
+
* @param line - JSON string from JSONL file
|
|
40
|
+
* @returns Parsed element
|
|
41
|
+
* @throws ValidationError if parsing fails
|
|
42
|
+
*/
|
|
43
|
+
export function parseElement(line) {
|
|
44
|
+
if (!line || line.trim().length === 0) {
|
|
45
|
+
throw new ValidationError('Cannot parse empty line as element', ErrorCode.INVALID_INPUT, { line });
|
|
46
|
+
}
|
|
47
|
+
let parsed;
|
|
48
|
+
try {
|
|
49
|
+
parsed = JSON.parse(line);
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
throw new ValidationError(`Invalid JSON in element line: ${err instanceof Error ? err.message : 'unknown error'}`, ErrorCode.INVALID_INPUT, { line: line.substring(0, 100) });
|
|
53
|
+
}
|
|
54
|
+
// Validate as element
|
|
55
|
+
return validateElement(parsed);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Try to parse a JSONL line into an element
|
|
59
|
+
*
|
|
60
|
+
* @param line - JSON string from JSONL file
|
|
61
|
+
* @returns Parsed element or null if invalid
|
|
62
|
+
*/
|
|
63
|
+
export function tryParseElement(line) {
|
|
64
|
+
try {
|
|
65
|
+
return parseElement(line);
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// ============================================================================
|
|
72
|
+
// Dependency Serialization
|
|
73
|
+
// ============================================================================
|
|
74
|
+
/**
|
|
75
|
+
* Serialize a dependency to JSONL format
|
|
76
|
+
*
|
|
77
|
+
* @param dependency - Dependency to serialize
|
|
78
|
+
* @returns JSON string ready for JSONL file
|
|
79
|
+
*/
|
|
80
|
+
export function serializeDependency(dependency) {
|
|
81
|
+
// Validate dependency before serializing
|
|
82
|
+
if (!isDependency(dependency)) {
|
|
83
|
+
throw new ValidationError('Cannot serialize invalid dependency', ErrorCode.INVALID_INPUT, { dependency });
|
|
84
|
+
}
|
|
85
|
+
const serialized = {
|
|
86
|
+
blockedId: dependency.blockedId,
|
|
87
|
+
blockerId: dependency.blockerId,
|
|
88
|
+
type: dependency.type,
|
|
89
|
+
createdAt: dependency.createdAt,
|
|
90
|
+
createdBy: dependency.createdBy,
|
|
91
|
+
};
|
|
92
|
+
// Only include metadata if non-empty
|
|
93
|
+
if (Object.keys(dependency.metadata).length > 0) {
|
|
94
|
+
serialized.metadata = { ...dependency.metadata };
|
|
95
|
+
}
|
|
96
|
+
return JSON.stringify(serialized);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Parse a JSONL line into a dependency
|
|
100
|
+
*
|
|
101
|
+
* @param line - JSON string from JSONL file
|
|
102
|
+
* @returns Parsed dependency
|
|
103
|
+
* @throws ValidationError if parsing fails
|
|
104
|
+
*/
|
|
105
|
+
export function parseDependency(line) {
|
|
106
|
+
if (!line || line.trim().length === 0) {
|
|
107
|
+
throw new ValidationError('Cannot parse empty line as dependency', ErrorCode.INVALID_INPUT, { line });
|
|
108
|
+
}
|
|
109
|
+
let parsed;
|
|
110
|
+
try {
|
|
111
|
+
parsed = JSON.parse(line);
|
|
112
|
+
}
|
|
113
|
+
catch (err) {
|
|
114
|
+
throw new ValidationError(`Invalid JSON in dependency line: ${err instanceof Error ? err.message : 'unknown error'}`, ErrorCode.INVALID_INPUT, { line: line.substring(0, 100) });
|
|
115
|
+
}
|
|
116
|
+
// Ensure metadata exists (defaults to empty object)
|
|
117
|
+
if (typeof parsed === 'object' && parsed !== null) {
|
|
118
|
+
const obj = parsed;
|
|
119
|
+
if (obj.metadata === undefined) {
|
|
120
|
+
obj.metadata = {};
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// Validate as dependency
|
|
124
|
+
return validateDependency(parsed);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Try to parse a JSONL line into a dependency
|
|
128
|
+
*
|
|
129
|
+
* @param line - JSON string from JSONL file
|
|
130
|
+
* @returns Parsed dependency or null if invalid
|
|
131
|
+
*/
|
|
132
|
+
export function tryParseDependency(line) {
|
|
133
|
+
try {
|
|
134
|
+
return parseDependency(line);
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
// ============================================================================
|
|
141
|
+
// Batch Serialization
|
|
142
|
+
// ============================================================================
|
|
143
|
+
/**
|
|
144
|
+
* Serialize multiple elements to JSONL content
|
|
145
|
+
*
|
|
146
|
+
* @param elements - Elements to serialize
|
|
147
|
+
* @returns JSONL content (multiple lines)
|
|
148
|
+
*/
|
|
149
|
+
export function serializeElements(elements) {
|
|
150
|
+
return elements.map(serializeElement).join('\n');
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Serialize multiple dependencies to JSONL content
|
|
154
|
+
*
|
|
155
|
+
* @param dependencies - Dependencies to serialize
|
|
156
|
+
* @returns JSONL content (multiple lines)
|
|
157
|
+
*/
|
|
158
|
+
export function serializeDependencies(dependencies) {
|
|
159
|
+
return dependencies.map(serializeDependency).join('\n');
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Parse JSONL content into elements
|
|
163
|
+
*
|
|
164
|
+
* @param content - JSONL content (multiple lines)
|
|
165
|
+
* @returns Array of parsed elements and any errors
|
|
166
|
+
*/
|
|
167
|
+
export function parseElements(content) {
|
|
168
|
+
const lines = content.split('\n').filter((line) => line.trim().length > 0);
|
|
169
|
+
const elements = [];
|
|
170
|
+
const errors = [];
|
|
171
|
+
for (let i = 0; i < lines.length; i++) {
|
|
172
|
+
const line = lines[i];
|
|
173
|
+
try {
|
|
174
|
+
elements.push(parseElement(line));
|
|
175
|
+
}
|
|
176
|
+
catch (err) {
|
|
177
|
+
errors.push({
|
|
178
|
+
line: i + 1,
|
|
179
|
+
message: err instanceof Error ? err.message : 'Unknown error',
|
|
180
|
+
content: line.substring(0, 100),
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
return { elements, errors };
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Parse JSONL content into dependencies
|
|
188
|
+
*
|
|
189
|
+
* @param content - JSONL content (multiple lines)
|
|
190
|
+
* @returns Array of parsed dependencies and any errors
|
|
191
|
+
*/
|
|
192
|
+
export function parseDependencies(content) {
|
|
193
|
+
const lines = content.split('\n').filter((line) => line.trim().length > 0);
|
|
194
|
+
const dependencies = [];
|
|
195
|
+
const errors = [];
|
|
196
|
+
for (let i = 0; i < lines.length; i++) {
|
|
197
|
+
const line = lines[i];
|
|
198
|
+
try {
|
|
199
|
+
dependencies.push(parseDependency(line));
|
|
200
|
+
}
|
|
201
|
+
catch (err) {
|
|
202
|
+
errors.push({
|
|
203
|
+
line: i + 1,
|
|
204
|
+
message: err instanceof Error ? err.message : 'Unknown error',
|
|
205
|
+
content: line.substring(0, 100),
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
return { dependencies, errors };
|
|
210
|
+
}
|
|
211
|
+
// ============================================================================
|
|
212
|
+
// Ordering
|
|
213
|
+
// ============================================================================
|
|
214
|
+
/**
|
|
215
|
+
* Sort elements for export ordering
|
|
216
|
+
*
|
|
217
|
+
* Order by:
|
|
218
|
+
* 1. Type (entities first for references)
|
|
219
|
+
* 2. Creation time
|
|
220
|
+
* 3. ID (for stability)
|
|
221
|
+
*
|
|
222
|
+
* @param elements - Elements to sort
|
|
223
|
+
* @returns Sorted elements (new array)
|
|
224
|
+
*/
|
|
225
|
+
export function sortElementsForExport(elements) {
|
|
226
|
+
return [...elements].sort((a, b) => {
|
|
227
|
+
// First by type priority
|
|
228
|
+
const typeDiff = getTypePriority(a.type) - getTypePriority(b.type);
|
|
229
|
+
if (typeDiff !== 0)
|
|
230
|
+
return typeDiff;
|
|
231
|
+
// Then by creation time
|
|
232
|
+
const timeDiff = a.createdAt.localeCompare(b.createdAt);
|
|
233
|
+
if (timeDiff !== 0)
|
|
234
|
+
return timeDiff;
|
|
235
|
+
// Finally by ID for stability
|
|
236
|
+
return a.id.localeCompare(b.id);
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Sort dependencies for export ordering
|
|
241
|
+
*
|
|
242
|
+
* Order by:
|
|
243
|
+
* 1. Creation time
|
|
244
|
+
* 2. Blocked ID
|
|
245
|
+
* 3. Blocker ID
|
|
246
|
+
* 4. Type (for stability)
|
|
247
|
+
*
|
|
248
|
+
* @param dependencies - Dependencies to sort
|
|
249
|
+
* @returns Sorted dependencies (new array)
|
|
250
|
+
*/
|
|
251
|
+
export function sortDependenciesForExport(dependencies) {
|
|
252
|
+
return [...dependencies].sort((a, b) => {
|
|
253
|
+
// First by creation time
|
|
254
|
+
const timeDiff = a.createdAt.localeCompare(b.createdAt);
|
|
255
|
+
if (timeDiff !== 0)
|
|
256
|
+
return timeDiff;
|
|
257
|
+
// Then by blocked ID
|
|
258
|
+
const blockedDiff = a.blockedId.localeCompare(b.blockedId);
|
|
259
|
+
if (blockedDiff !== 0)
|
|
260
|
+
return blockedDiff;
|
|
261
|
+
// Then by blocker ID
|
|
262
|
+
const blockerDiff = a.blockerId.localeCompare(b.blockerId);
|
|
263
|
+
if (blockerDiff !== 0)
|
|
264
|
+
return blockerDiff;
|
|
265
|
+
// Finally by type for stability
|
|
266
|
+
return a.type.localeCompare(b.type);
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
// ============================================================================
|
|
270
|
+
// Validation Helpers
|
|
271
|
+
// ============================================================================
|
|
272
|
+
/**
|
|
273
|
+
* Check if an object looks like a serialized element
|
|
274
|
+
* (less strict than isElement, for initial parsing)
|
|
275
|
+
*/
|
|
276
|
+
export function isSerializedElement(value) {
|
|
277
|
+
if (typeof value !== 'object' || value === null) {
|
|
278
|
+
return false;
|
|
279
|
+
}
|
|
280
|
+
const obj = value;
|
|
281
|
+
// Check required fields exist
|
|
282
|
+
return (typeof obj.id === 'string' &&
|
|
283
|
+
typeof obj.type === 'string' &&
|
|
284
|
+
typeof obj.createdAt === 'string' &&
|
|
285
|
+
typeof obj.updatedAt === 'string' &&
|
|
286
|
+
typeof obj.createdBy === 'string' &&
|
|
287
|
+
Array.isArray(obj.tags) &&
|
|
288
|
+
typeof obj.metadata === 'object' &&
|
|
289
|
+
obj.metadata !== null);
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Check if an object looks like a serialized dependency
|
|
293
|
+
*/
|
|
294
|
+
export function isSerializedDependency(value) {
|
|
295
|
+
if (typeof value !== 'object' || value === null) {
|
|
296
|
+
return false;
|
|
297
|
+
}
|
|
298
|
+
const obj = value;
|
|
299
|
+
// Check required fields exist
|
|
300
|
+
return (typeof obj.blockedId === 'string' &&
|
|
301
|
+
typeof obj.blockerId === 'string' &&
|
|
302
|
+
typeof obj.type === 'string' &&
|
|
303
|
+
typeof obj.createdAt === 'string' &&
|
|
304
|
+
typeof obj.createdBy === 'string');
|
|
305
|
+
}
|
|
306
|
+
//# sourceMappingURL=serialization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serialization.js","sourceRoot":"","sources":["../../src/sync/serialization.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sync Service - Full export and import implementation
|
|
3
|
+
*
|
|
4
|
+
* Implements the sync operations specified in api/sync.md:
|
|
5
|
+
* - Full and incremental export to JSONL
|
|
6
|
+
* - Import with merge strategy
|
|
7
|
+
* - Conflict resolution
|
|
8
|
+
*/
|
|
9
|
+
import type { StorageBackend } from '@stoneforge/storage';
|
|
10
|
+
import type { ExportResult, ImportResult as SyncImportResult, ExportOptions as SyncExportOptions, ImportOptions as SyncImportOptions } from './types.js';
|
|
11
|
+
/**
|
|
12
|
+
* Service for handling JSONL export and import operations
|
|
13
|
+
*/
|
|
14
|
+
export declare class SyncService {
|
|
15
|
+
private backend;
|
|
16
|
+
constructor(backend: StorageBackend);
|
|
17
|
+
/**
|
|
18
|
+
* Export elements to JSONL format
|
|
19
|
+
*
|
|
20
|
+
* @param options - Export configuration
|
|
21
|
+
* @returns Export result with file paths and counts
|
|
22
|
+
*/
|
|
23
|
+
export(options: SyncExportOptions): Promise<ExportResult>;
|
|
24
|
+
/**
|
|
25
|
+
* Export synchronously (useful for CLI and testing)
|
|
26
|
+
*/
|
|
27
|
+
exportSync(options: SyncExportOptions): ExportResult;
|
|
28
|
+
/**
|
|
29
|
+
* Export to string (for API and in-memory use)
|
|
30
|
+
*/
|
|
31
|
+
exportToString(options?: {
|
|
32
|
+
includeEphemeral?: boolean;
|
|
33
|
+
includeDependencies?: boolean;
|
|
34
|
+
}): {
|
|
35
|
+
elements: string;
|
|
36
|
+
dependencies?: string;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Import elements from JSONL files
|
|
40
|
+
*
|
|
41
|
+
* @param options - Import configuration
|
|
42
|
+
* @returns Import result with counts and conflicts
|
|
43
|
+
*/
|
|
44
|
+
import(options: SyncImportOptions): Promise<SyncImportResult>;
|
|
45
|
+
/**
|
|
46
|
+
* Import synchronously
|
|
47
|
+
*/
|
|
48
|
+
importSync(options: SyncImportOptions): SyncImportResult;
|
|
49
|
+
/**
|
|
50
|
+
* Import from JSONL strings (for API and in-memory use)
|
|
51
|
+
*/
|
|
52
|
+
importFromStrings(elementsContent: string, dependenciesContent: string, options?: Partial<SyncImportOptions>): SyncImportResult;
|
|
53
|
+
/**
|
|
54
|
+
* Get all elements from storage
|
|
55
|
+
*/
|
|
56
|
+
private getAllElements;
|
|
57
|
+
/**
|
|
58
|
+
* Filter out tasks that are children of ephemeral workflows
|
|
59
|
+
*/
|
|
60
|
+
private filterOutEphemeralTasks;
|
|
61
|
+
/**
|
|
62
|
+
* Get dirty elements data (for incremental export)
|
|
63
|
+
*/
|
|
64
|
+
private getDirtyElementsData;
|
|
65
|
+
/**
|
|
66
|
+
* Get all dependencies from storage
|
|
67
|
+
*/
|
|
68
|
+
private getAllDependencies;
|
|
69
|
+
/**
|
|
70
|
+
* Get a single element by ID
|
|
71
|
+
*/
|
|
72
|
+
private getElement;
|
|
73
|
+
/**
|
|
74
|
+
* Convert database row to Element
|
|
75
|
+
*/
|
|
76
|
+
private rowToElement;
|
|
77
|
+
/**
|
|
78
|
+
* Serialize elements to JSONL, skipping any that fail validation.
|
|
79
|
+
*/
|
|
80
|
+
private serializeElementsSafe;
|
|
81
|
+
/**
|
|
82
|
+
* Insert an element into storage (within transaction)
|
|
83
|
+
*/
|
|
84
|
+
private insertElement;
|
|
85
|
+
/**
|
|
86
|
+
* Update an element in storage (within transaction)
|
|
87
|
+
*/
|
|
88
|
+
private updateElement;
|
|
89
|
+
/**
|
|
90
|
+
* Insert a dependency into storage (within transaction)
|
|
91
|
+
*/
|
|
92
|
+
private insertDependency;
|
|
93
|
+
/**
|
|
94
|
+
* Delete a dependency from storage (within transaction)
|
|
95
|
+
*/
|
|
96
|
+
private deleteDependency;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Create a new SyncService instance
|
|
100
|
+
*/
|
|
101
|
+
export declare function createSyncService(backend: StorageBackend): SyncService;
|
|
102
|
+
//# sourceMappingURL=service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/sync/service.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAG1D,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,IAAI,gBAAgB,EAChC,aAAa,IAAI,iBAAiB,EAClC,aAAa,IAAI,iBAAiB,EAInC,MAAM,YAAY,CAAC;AA+CpB;;GAEG;AACH,qBAAa,WAAW;IACV,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,cAAc;IAM3C;;;;;OAKG;IACG,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC;IAsD/D;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,YAAY;IAsDpD;;OAEG;IACH,cAAc,CAAC,OAAO,CAAC,EAAE;QAAE,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG;QACvF,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB;IAsBD;;;;;OAKG;IACG,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAqBnE;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,gBAAgB;IAqBxD;;OAEG;IACH,iBAAiB,CACf,eAAe,EAAE,MAAM,EACvB,mBAAmB,EAAE,MAAM,EAC3B,OAAO,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GACnC,gBAAgB;IAmInB;;OAEG;IACH,OAAO,CAAC,cAAc;IAoBtB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA8B/B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAiB5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAa1B;;OAEG;IACH,OAAO,CAAC,UAAU;IAUlB;;OAEG;IACH,OAAO,CAAC,YAAY;IAqBpB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAc7B;;OAEG;IACH,OAAO,CAAC,aAAa;IA2BrB;;OAEG;IACH,OAAO,CAAC,aAAa;IA2BrB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAoBxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAYzB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,GAAG,WAAW,CAEtE"}
|