@beehexa/hexasync-template-engine 2608.21.2 → 2610.3.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/capabilityPolicy.d.ts +29 -0
- package/dist/capabilityPolicy.d.ts.map +1 -0
- package/dist/capabilityPolicy.js +46 -0
- package/dist/capabilityPolicy.js.map +1 -0
- package/dist/compositeFlow.d.ts +23 -0
- package/dist/compositeFlow.d.ts.map +1 -0
- package/dist/compositeFlow.js +350 -0
- package/dist/compositeFlow.js.map +1 -0
- package/dist/connectionEditing.d.ts +124 -0
- package/dist/connectionEditing.d.ts.map +1 -0
- package/dist/connectionEditing.js +122 -0
- package/dist/connectionEditing.js.map +1 -0
- package/dist/editDiagnostics.d.ts +80 -0
- package/dist/editDiagnostics.d.ts.map +1 -0
- package/dist/editDiagnostics.js +130 -0
- package/dist/editDiagnostics.js.map +1 -0
- package/dist/extensionRegistry.d.ts +31 -0
- package/dist/extensionRegistry.d.ts.map +1 -0
- package/dist/extensionRegistry.js +48 -0
- package/dist/extensionRegistry.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -1
- package/dist/layout.d.ts +414 -0
- package/dist/layout.d.ts.map +1 -0
- package/dist/layout.js +460 -0
- package/dist/layout.js.map +1 -0
- package/dist/nodeExtensions.d.ts +17 -0
- package/dist/nodeExtensions.d.ts.map +1 -0
- package/dist/nodeExtensions.js +39 -0
- package/dist/nodeExtensions.js.map +1 -0
- package/dist/nodeResolution.d.ts +29 -0
- package/dist/nodeResolution.d.ts.map +1 -0
- package/dist/nodeResolution.js +77 -0
- package/dist/nodeResolution.js.map +1 -0
- package/dist/presentationOverlay.d.ts +29 -0
- package/dist/presentationOverlay.d.ts.map +1 -0
- package/dist/presentationOverlay.js +128 -0
- package/dist/presentationOverlay.js.map +1 -0
- package/dist/presentationReconciliation.d.ts +59 -0
- package/dist/presentationReconciliation.d.ts.map +1 -0
- package/dist/presentationReconciliation.js +54 -0
- package/dist/presentationReconciliation.js.map +1 -0
- package/dist/presentationStorage.d.ts +168 -0
- package/dist/presentationStorage.d.ts.map +1 -0
- package/dist/presentationStorage.js +405 -0
- package/dist/presentationStorage.js.map +1 -0
- package/dist/semanticTransactions.d.ts +107 -0
- package/dist/semanticTransactions.d.ts.map +1 -0
- package/dist/semanticTransactions.js +86 -0
- package/dist/semanticTransactions.js.map +1 -0
- package/dist/stepFormEditing.d.ts +47 -0
- package/dist/stepFormEditing.d.ts.map +1 -0
- package/dist/stepFormEditing.js +259 -0
- package/dist/stepFormEditing.js.map +1 -0
- package/dist/themeStyles.d.ts +26 -0
- package/dist/themeStyles.d.ts.map +1 -0
- package/dist/themeStyles.js +71 -0
- package/dist/themeStyles.js.map +1 -0
- package/dist/visualResources.d.ts +30 -0
- package/dist/visualResources.d.ts.map +1 -0
- package/dist/visualResources.js +89 -0
- package/dist/visualResources.js.map +1 -0
- package/dist/vnextFlow.d.ts +57 -0
- package/dist/vnextFlow.d.ts.map +1 -0
- package/dist/vnextFlow.js +333 -0
- package/dist/vnextFlow.js.map +1 -0
- package/package.json +16 -12
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import type { SerializedPresentationOverlay } from './presentationOverlay.js';
|
|
2
|
+
export interface PresentationStorageKey {
|
|
3
|
+
readonly projectId: string;
|
|
4
|
+
readonly graphId: string;
|
|
5
|
+
readonly schemaVersion: number;
|
|
6
|
+
readonly sourceFingerprint: string;
|
|
7
|
+
}
|
|
8
|
+
export interface PresentationStorageDiagnostic {
|
|
9
|
+
readonly code: string;
|
|
10
|
+
readonly message: string;
|
|
11
|
+
}
|
|
12
|
+
export type HostStorageBackend = 'memory' | 'localstorage' | 'embedded' | 'sidecar' | 'remote' | 'host-rpc';
|
|
13
|
+
export type StorageBackend = 'indexeddb' | HostStorageBackend;
|
|
14
|
+
export type StorageOperation = 'load' | 'save' | 'delete';
|
|
15
|
+
export type PresentationStorageResult = {
|
|
16
|
+
readonly status: 'success';
|
|
17
|
+
readonly backend: StorageBackend;
|
|
18
|
+
readonly revision: number | null;
|
|
19
|
+
readonly overlay?: SerializedPresentationOverlay | null;
|
|
20
|
+
readonly fallback?: true;
|
|
21
|
+
} | {
|
|
22
|
+
readonly status: 'conflict';
|
|
23
|
+
readonly backend: StorageBackend;
|
|
24
|
+
readonly expectedRevision: number | null;
|
|
25
|
+
readonly actualRevision: number | null;
|
|
26
|
+
readonly fallback?: true;
|
|
27
|
+
} | {
|
|
28
|
+
readonly status: 'error';
|
|
29
|
+
readonly backend: StorageBackend;
|
|
30
|
+
readonly operation: StorageOperation;
|
|
31
|
+
readonly diagnostic: PresentationStorageDiagnostic;
|
|
32
|
+
readonly fallback?: true;
|
|
33
|
+
};
|
|
34
|
+
export interface PresentationStore {
|
|
35
|
+
readonly backend: StorageBackend;
|
|
36
|
+
load(input: {
|
|
37
|
+
readonly key: PresentationStorageKey;
|
|
38
|
+
}): Promise<PresentationStorageResult>;
|
|
39
|
+
save(input: {
|
|
40
|
+
readonly key: PresentationStorageKey;
|
|
41
|
+
readonly overlay: SerializedPresentationOverlay;
|
|
42
|
+
readonly expectedRevision: number | null;
|
|
43
|
+
}): Promise<PresentationStorageResult>;
|
|
44
|
+
delete(input: {
|
|
45
|
+
readonly key: PresentationStorageKey;
|
|
46
|
+
readonly expectedRevision: number | null;
|
|
47
|
+
}): Promise<PresentationStorageResult>;
|
|
48
|
+
}
|
|
49
|
+
interface RequestLike {
|
|
50
|
+
result?: unknown;
|
|
51
|
+
error?: unknown;
|
|
52
|
+
onsuccess: ((event: unknown) => void) | null;
|
|
53
|
+
onerror: ((event: unknown) => void) | null;
|
|
54
|
+
}
|
|
55
|
+
interface ObjectStoreLike {
|
|
56
|
+
get(key: string): RequestLike;
|
|
57
|
+
put(value: unknown, key?: string): RequestLike;
|
|
58
|
+
delete(key: string): RequestLike;
|
|
59
|
+
}
|
|
60
|
+
interface TransactionLike {
|
|
61
|
+
error?: unknown;
|
|
62
|
+
oncomplete: ((event: unknown) => void) | null;
|
|
63
|
+
onerror: ((event: unknown) => void) | null;
|
|
64
|
+
onabort: ((event: unknown) => void) | null;
|
|
65
|
+
objectStore(name: string): ObjectStoreLike;
|
|
66
|
+
}
|
|
67
|
+
interface DatabaseLike {
|
|
68
|
+
objectStoreNames: {
|
|
69
|
+
contains(name: string): boolean;
|
|
70
|
+
};
|
|
71
|
+
createObjectStore(name: string): unknown;
|
|
72
|
+
transaction(name: string, mode: 'readonly' | 'readwrite'): TransactionLike;
|
|
73
|
+
close(): void;
|
|
74
|
+
}
|
|
75
|
+
interface OpenRequestLike extends RequestLike {
|
|
76
|
+
result?: DatabaseLike;
|
|
77
|
+
onupgradeneeded: ((event: unknown) => void) | null;
|
|
78
|
+
onblocked?: ((event: unknown) => void) | null;
|
|
79
|
+
}
|
|
80
|
+
interface IndexedDbLike {
|
|
81
|
+
open(name: string, version?: number): OpenRequestLike;
|
|
82
|
+
}
|
|
83
|
+
export interface StoredOverlay {
|
|
84
|
+
readonly revision: number;
|
|
85
|
+
readonly overlay: SerializedPresentationOverlay | null;
|
|
86
|
+
}
|
|
87
|
+
export interface BrowserPresentationStoreOptions {
|
|
88
|
+
readonly namespace: string;
|
|
89
|
+
readonly indexedDB?: IndexedDbLike;
|
|
90
|
+
readonly fallback?: 'memory';
|
|
91
|
+
}
|
|
92
|
+
/** Creates the browser-default presentation store. Memory use is never implicit. */
|
|
93
|
+
export declare function createBrowserPresentationStore(options: BrowserPresentationStoreOptions): PresentationStore;
|
|
94
|
+
export type PresentationBackingPortResult = {
|
|
95
|
+
readonly status: 'success';
|
|
96
|
+
readonly revision: number;
|
|
97
|
+
} | {
|
|
98
|
+
readonly status: 'conflict';
|
|
99
|
+
readonly actualRevision: number | null;
|
|
100
|
+
} | {
|
|
101
|
+
readonly status: 'error';
|
|
102
|
+
readonly diagnostic: PresentationStorageDiagnostic;
|
|
103
|
+
};
|
|
104
|
+
/** Host-neutral durable storage boundary. Implementations must make compareAndSet atomic. */
|
|
105
|
+
export interface PresentationBackingPort {
|
|
106
|
+
read(storageKey: string): Promise<StoredOverlay | null>;
|
|
107
|
+
compareAndSet(input: {
|
|
108
|
+
readonly storageKey: string;
|
|
109
|
+
readonly expectedRevision: number | null;
|
|
110
|
+
readonly overlay: SerializedPresentationOverlay | null;
|
|
111
|
+
}): Promise<PresentationBackingPortResult>;
|
|
112
|
+
}
|
|
113
|
+
export interface HostPresentationStoreOptions {
|
|
114
|
+
readonly backend: HostStorageBackend;
|
|
115
|
+
readonly namespace: string;
|
|
116
|
+
readonly port: PresentationBackingPort;
|
|
117
|
+
}
|
|
118
|
+
export interface LegacyPositionSnapshot {
|
|
119
|
+
readonly token: string;
|
|
120
|
+
readonly positions: Readonly<Record<string, {
|
|
121
|
+
readonly x: number;
|
|
122
|
+
readonly y: number;
|
|
123
|
+
}>>;
|
|
124
|
+
}
|
|
125
|
+
export interface LegacyPositionSource {
|
|
126
|
+
read(): Promise<LegacyPositionSnapshot | null>;
|
|
127
|
+
delete(input: {
|
|
128
|
+
readonly expectedToken: string;
|
|
129
|
+
}): Promise<{
|
|
130
|
+
readonly status: 'success';
|
|
131
|
+
} | {
|
|
132
|
+
readonly status: 'conflict';
|
|
133
|
+
readonly diagnostic: PresentationStorageDiagnostic;
|
|
134
|
+
} | {
|
|
135
|
+
readonly status: 'error';
|
|
136
|
+
readonly diagnostic: PresentationStorageDiagnostic;
|
|
137
|
+
}>;
|
|
138
|
+
}
|
|
139
|
+
export type LegacyPositionMigrationResult = {
|
|
140
|
+
readonly status: 'migrated';
|
|
141
|
+
readonly backend: StorageBackend;
|
|
142
|
+
readonly revision: number;
|
|
143
|
+
} | {
|
|
144
|
+
readonly status: 'not-found';
|
|
145
|
+
readonly backend: StorageBackend;
|
|
146
|
+
readonly revision: number | null;
|
|
147
|
+
} | {
|
|
148
|
+
readonly status: 'conflict';
|
|
149
|
+
readonly backend: StorageBackend;
|
|
150
|
+
readonly expectedRevision: number | null;
|
|
151
|
+
readonly actualRevision: number | null;
|
|
152
|
+
} | {
|
|
153
|
+
readonly status: 'error';
|
|
154
|
+
readonly backend: StorageBackend;
|
|
155
|
+
readonly operation: StorageOperation;
|
|
156
|
+
readonly diagnostic: PresentationStorageDiagnostic;
|
|
157
|
+
};
|
|
158
|
+
/** Creates a storage adapter whose only host capability is the injected compare-and-set port. */
|
|
159
|
+
export declare function createHostPresentationStore(options: HostPresentationStoreOptions): PresentationStore;
|
|
160
|
+
/** Migrates legacy name-keyed positions only after durable save and exact read-back verification. */
|
|
161
|
+
export declare function migrateLegacyPositions(input: {
|
|
162
|
+
readonly store: PresentationStore;
|
|
163
|
+
readonly key: PresentationStorageKey;
|
|
164
|
+
readonly legacySource: LegacyPositionSource;
|
|
165
|
+
readonly canonicalNodeIds: Readonly<Record<string, string>>;
|
|
166
|
+
}): Promise<LegacyPositionMigrationResult>;
|
|
167
|
+
export {};
|
|
168
|
+
//# sourceMappingURL=presentationStorage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presentationStorage.d.ts","sourceRoot":"","sources":["../src/presentationStorage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,405 @@
|
|
|
1
|
+
const STORE_NAME = 'presentation-overlays';
|
|
2
|
+
const clone = (value) => structuredClone(value);
|
|
3
|
+
const storageKey = (key) => JSON.stringify([
|
|
4
|
+
key.projectId,
|
|
5
|
+
key.graphId,
|
|
6
|
+
key.sourceFingerprint,
|
|
7
|
+
key.schemaVersion,
|
|
8
|
+
]);
|
|
9
|
+
const validateKey = (key) => {
|
|
10
|
+
if (!key || typeof key.projectId !== 'string' || !key.projectId || typeof key.graphId !== 'string' || !key.graphId ||
|
|
11
|
+
typeof key.sourceFingerprint !== 'string' || !key.sourceFingerprint || !Number.isSafeInteger(key.schemaVersion) || key.schemaVersion < 1) {
|
|
12
|
+
throw new TypeError('Presentation storage key requires non-blank projectId, graphId, sourceFingerprint and a positive safe schemaVersion.');
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
const nextRevision = (revision) => {
|
|
16
|
+
const next = (revision ?? 0) + 1;
|
|
17
|
+
if (!Number.isSafeInteger(next))
|
|
18
|
+
throw new RangeError('Presentation storage revision is exhausted.');
|
|
19
|
+
return next;
|
|
20
|
+
};
|
|
21
|
+
const errorResult = (operation, code, error, backend = 'indexeddb', fallback) => ({
|
|
22
|
+
status: 'error',
|
|
23
|
+
backend,
|
|
24
|
+
operation,
|
|
25
|
+
diagnostic: { code, message: error instanceof Error ? error.message : String(error) },
|
|
26
|
+
...(fallback ? { fallback } : {}),
|
|
27
|
+
});
|
|
28
|
+
const openDatabase = (indexedDB, namespace) => new Promise((resolve, reject) => {
|
|
29
|
+
let request;
|
|
30
|
+
try {
|
|
31
|
+
request = indexedDB.open(`hexasync-workflow-designer:${namespace}`, 1);
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
reject(error);
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
request.onupgradeneeded = () => {
|
|
38
|
+
try {
|
|
39
|
+
const database = request.result;
|
|
40
|
+
if (database && !database.objectStoreNames.contains(STORE_NAME))
|
|
41
|
+
database.createObjectStore(STORE_NAME);
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
reject(error);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
request.onblocked = () => reject(new Error('IndexedDB upgrade is blocked.'));
|
|
48
|
+
request.onerror = () => reject(request.error ?? new Error('IndexedDB open failed.'));
|
|
49
|
+
request.onsuccess = () => request.result ? resolve(request.result) : reject(new Error('IndexedDB returned no database.'));
|
|
50
|
+
});
|
|
51
|
+
const requestError = (request, fallback) => request.error ?? new Error(fallback);
|
|
52
|
+
const memoryStore = (fallback) => {
|
|
53
|
+
const records = new Map();
|
|
54
|
+
const metadata = { backend: 'memory', fallback };
|
|
55
|
+
return {
|
|
56
|
+
backend: 'memory',
|
|
57
|
+
async load({ key }) {
|
|
58
|
+
validateKey(key);
|
|
59
|
+
const record = records.get(storageKey(key));
|
|
60
|
+
if (!record?.overlay)
|
|
61
|
+
return { status: 'success', ...metadata, revision: null, overlay: null };
|
|
62
|
+
try {
|
|
63
|
+
return { status: 'success', ...metadata, revision: record.revision, overlay: clone(record.overlay) };
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
return errorResult('load', 'PRESENTATION_STORAGE_CLONE_FAILED', error, 'memory', true);
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
async save({ key, overlay, expectedRevision }) {
|
|
70
|
+
validateKey(key);
|
|
71
|
+
validateOverlay(key, overlay);
|
|
72
|
+
const id = storageKey(key);
|
|
73
|
+
const current = records.get(id);
|
|
74
|
+
const visibleRevision = current?.overlay ? current.revision : null;
|
|
75
|
+
if (visibleRevision !== expectedRevision)
|
|
76
|
+
return { status: 'conflict', ...metadata, expectedRevision, actualRevision: current?.revision ?? null };
|
|
77
|
+
try {
|
|
78
|
+
const revision = nextRevision(current?.revision ?? null);
|
|
79
|
+
records.set(id, { revision, overlay: clone(overlay) });
|
|
80
|
+
return { status: 'success', ...metadata, revision };
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
return errorResult('save', 'PRESENTATION_STORAGE_WRITE_FAILED', error, 'memory', true);
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
async delete({ key, expectedRevision }) {
|
|
87
|
+
validateKey(key);
|
|
88
|
+
const id = storageKey(key);
|
|
89
|
+
const current = records.get(id);
|
|
90
|
+
const actualRevision = current?.overlay ? current.revision : null;
|
|
91
|
+
if (actualRevision !== expectedRevision)
|
|
92
|
+
return { status: 'conflict', ...metadata, expectedRevision, actualRevision: current?.revision ?? null };
|
|
93
|
+
try {
|
|
94
|
+
const revision = nextRevision(current?.revision ?? null);
|
|
95
|
+
records.set(id, { revision, overlay: null });
|
|
96
|
+
return { status: 'success', ...metadata, revision };
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
return errorResult('delete', 'PRESENTATION_STORAGE_WRITE_FAILED', error, 'memory', true);
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
};
|
|
104
|
+
/** Creates the browser-default presentation store. Memory use is never implicit. */
|
|
105
|
+
export function createBrowserPresentationStore(options) {
|
|
106
|
+
if (!options || typeof options.namespace !== 'string' || !options.namespace.trim())
|
|
107
|
+
throw new TypeError('namespace must be a non-blank string.');
|
|
108
|
+
const browserIndexedDb = options.indexedDB ?? globalThis.indexedDB;
|
|
109
|
+
if (!browserIndexedDb) {
|
|
110
|
+
if (options.fallback === 'memory')
|
|
111
|
+
return memoryStore(true);
|
|
112
|
+
const unavailable = (operation) => Promise.resolve(errorResult(operation, 'PRESENTATION_STORAGE_INDEXEDDB_UNAVAILABLE', new Error('IndexedDB is unavailable.')));
|
|
113
|
+
return {
|
|
114
|
+
backend: 'indexeddb',
|
|
115
|
+
load: () => unavailable('load'),
|
|
116
|
+
save: () => unavailable('save'),
|
|
117
|
+
delete: () => unavailable('delete'),
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
const indexedDB = browserIndexedDb;
|
|
121
|
+
const transaction = async (operation, mode, run) => {
|
|
122
|
+
let database;
|
|
123
|
+
try {
|
|
124
|
+
database = await openDatabase(indexedDB, options.namespace);
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
return errorResult(operation, 'PRESENTATION_STORAGE_OPEN_FAILED', error);
|
|
128
|
+
}
|
|
129
|
+
return new Promise(resolve => {
|
|
130
|
+
let settled = false;
|
|
131
|
+
const finish = (result) => {
|
|
132
|
+
if (settled)
|
|
133
|
+
return;
|
|
134
|
+
settled = true;
|
|
135
|
+
database.close();
|
|
136
|
+
resolve(result);
|
|
137
|
+
};
|
|
138
|
+
const fail = (error) => finish(errorResult(operation, 'PRESENTATION_STORAGE_TRANSACTION_FAILED', error));
|
|
139
|
+
try {
|
|
140
|
+
const tx = database.transaction(STORE_NAME, mode);
|
|
141
|
+
let completion;
|
|
142
|
+
const complete = (result) => { completion = result; };
|
|
143
|
+
tx.oncomplete = () => finish(completion ?? errorResult(operation, 'PRESENTATION_STORAGE_TRANSACTION_FAILED', new Error('IndexedDB transaction completed without a result.')));
|
|
144
|
+
tx.onerror = () => fail(tx.error ?? new Error('IndexedDB transaction failed.'));
|
|
145
|
+
tx.onabort = () => fail(tx.error ?? new Error('IndexedDB transaction aborted.'));
|
|
146
|
+
run(tx.objectStore(STORE_NAME), complete, fail);
|
|
147
|
+
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
fail(error);
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
};
|
|
153
|
+
return {
|
|
154
|
+
backend: 'indexeddb',
|
|
155
|
+
load: ({ key }) => {
|
|
156
|
+
validateKey(key);
|
|
157
|
+
return transaction('load', 'readonly', (store, complete, fail) => {
|
|
158
|
+
const request = store.get(storageKey(key));
|
|
159
|
+
request.onerror = () => fail(requestError(request, 'IndexedDB read failed.'));
|
|
160
|
+
request.onsuccess = () => {
|
|
161
|
+
try {
|
|
162
|
+
const record = request.result;
|
|
163
|
+
complete({ status: 'success', backend: 'indexeddb', revision: record?.overlay ? record.revision : null, overlay: record?.overlay ? clone(record.overlay) : null });
|
|
164
|
+
}
|
|
165
|
+
catch (error) {
|
|
166
|
+
fail(error);
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
});
|
|
170
|
+
},
|
|
171
|
+
save: ({ key, overlay, expectedRevision }) => {
|
|
172
|
+
validateKey(key);
|
|
173
|
+
validateOverlay(key, overlay);
|
|
174
|
+
return transaction('save', 'readwrite', (store, complete, fail) => {
|
|
175
|
+
const id = storageKey(key);
|
|
176
|
+
const read = store.get(id);
|
|
177
|
+
read.onerror = () => fail(requestError(read, 'IndexedDB read failed.'));
|
|
178
|
+
read.onsuccess = () => {
|
|
179
|
+
try {
|
|
180
|
+
const current = read.result;
|
|
181
|
+
const visibleRevision = current?.overlay ? current.revision : null;
|
|
182
|
+
if (visibleRevision !== expectedRevision) {
|
|
183
|
+
complete({ status: 'conflict', backend: 'indexeddb', expectedRevision, actualRevision: current?.revision ?? null });
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
const revision = nextRevision(current?.revision ?? null);
|
|
187
|
+
const write = store.put({ revision, overlay: clone(overlay) }, id);
|
|
188
|
+
write.onerror = () => fail(requestError(write, 'IndexedDB write failed.'));
|
|
189
|
+
write.onsuccess = () => complete({ status: 'success', backend: 'indexeddb', revision });
|
|
190
|
+
}
|
|
191
|
+
catch (error) {
|
|
192
|
+
fail(error);
|
|
193
|
+
}
|
|
194
|
+
};
|
|
195
|
+
});
|
|
196
|
+
},
|
|
197
|
+
delete: ({ key, expectedRevision }) => {
|
|
198
|
+
validateKey(key);
|
|
199
|
+
return transaction('delete', 'readwrite', (store, complete, fail) => {
|
|
200
|
+
const id = storageKey(key);
|
|
201
|
+
const read = store.get(id);
|
|
202
|
+
read.onerror = () => fail(requestError(read, 'IndexedDB read failed.'));
|
|
203
|
+
read.onsuccess = () => {
|
|
204
|
+
try {
|
|
205
|
+
const current = read.result;
|
|
206
|
+
const actualRevision = current?.overlay ? current.revision : null;
|
|
207
|
+
if (actualRevision !== expectedRevision) {
|
|
208
|
+
complete({ status: 'conflict', backend: 'indexeddb', expectedRevision, actualRevision: current?.revision ?? null });
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
const revision = nextRevision(current?.revision ?? null);
|
|
212
|
+
const deletion = store.put({ revision, overlay: null }, id);
|
|
213
|
+
deletion.onerror = () => fail(requestError(deletion, 'IndexedDB delete failed.'));
|
|
214
|
+
deletion.onsuccess = () => complete({ status: 'success', backend: 'indexeddb', revision });
|
|
215
|
+
}
|
|
216
|
+
catch (error) {
|
|
217
|
+
fail(error);
|
|
218
|
+
}
|
|
219
|
+
};
|
|
220
|
+
});
|
|
221
|
+
},
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
const namespacedStorageKey = (namespace, key) => JSON.stringify([
|
|
225
|
+
namespace,
|
|
226
|
+
key.projectId,
|
|
227
|
+
key.graphId,
|
|
228
|
+
key.sourceFingerprint,
|
|
229
|
+
key.schemaVersion,
|
|
230
|
+
]);
|
|
231
|
+
const validateOverlay = (key, overlay) => {
|
|
232
|
+
if (!overlay || overlay.schemaVersion !== key.schemaVersion || overlay.sourceFingerprint !== key.sourceFingerprint) {
|
|
233
|
+
throw new TypeError('Presentation overlay schemaVersion and sourceFingerprint must match its storage key.');
|
|
234
|
+
}
|
|
235
|
+
};
|
|
236
|
+
const validRevision = (value) => Number.isSafeInteger(value) && value > 0;
|
|
237
|
+
const portFailure = (backend, operation, error) => errorResult(operation, 'PRESENTATION_STORAGE_PORT_FAILED', error, backend);
|
|
238
|
+
/** Creates a storage adapter whose only host capability is the injected compare-and-set port. */
|
|
239
|
+
export function createHostPresentationStore(options) {
|
|
240
|
+
if (!options || !['memory', 'localstorage', 'embedded', 'sidecar', 'remote', 'host-rpc'].includes(options.backend)) {
|
|
241
|
+
throw new TypeError('backend must name a supported host presentation storage adapter.');
|
|
242
|
+
}
|
|
243
|
+
if (typeof options.namespace !== 'string' || !options.namespace.trim())
|
|
244
|
+
throw new TypeError('namespace must be a non-blank string.');
|
|
245
|
+
if (!options.port || typeof options.port.read !== 'function' || typeof options.port.compareAndSet !== 'function') {
|
|
246
|
+
throw new TypeError('port must provide read and compareAndSet operations.');
|
|
247
|
+
}
|
|
248
|
+
const { backend, namespace, port } = options;
|
|
249
|
+
const load = async ({ key }) => {
|
|
250
|
+
validateKey(key);
|
|
251
|
+
try {
|
|
252
|
+
const record = await port.read(namespacedStorageKey(namespace, key));
|
|
253
|
+
if (record === null)
|
|
254
|
+
return { status: 'success', backend, revision: null, overlay: null };
|
|
255
|
+
if (!validRevision(record.revision))
|
|
256
|
+
throw new Error('Backing port returned an invalid revision.');
|
|
257
|
+
if (record.overlay === null)
|
|
258
|
+
return { status: 'success', backend, revision: null, overlay: null };
|
|
259
|
+
validateOverlay(key, record.overlay);
|
|
260
|
+
return { status: 'success', backend, revision: record.revision, overlay: clone(record.overlay) };
|
|
261
|
+
}
|
|
262
|
+
catch (error) {
|
|
263
|
+
return portFailure(backend, 'load', error);
|
|
264
|
+
}
|
|
265
|
+
};
|
|
266
|
+
const write = async (operation, key, overlay, expectedRevision) => {
|
|
267
|
+
validateKey(key);
|
|
268
|
+
if (overlay)
|
|
269
|
+
validateOverlay(key, overlay);
|
|
270
|
+
try {
|
|
271
|
+
const result = await port.compareAndSet({
|
|
272
|
+
storageKey: namespacedStorageKey(namespace, key),
|
|
273
|
+
expectedRevision,
|
|
274
|
+
overlay: overlay ? clone(overlay) : null,
|
|
275
|
+
});
|
|
276
|
+
if (result.status === 'error')
|
|
277
|
+
return { status: 'error', backend, operation, diagnostic: result.diagnostic };
|
|
278
|
+
if (result.status === 'conflict') {
|
|
279
|
+
if (result.actualRevision !== null && !validRevision(result.actualRevision))
|
|
280
|
+
throw new Error('Backing port returned an invalid conflict revision.');
|
|
281
|
+
return { status: 'conflict', backend, expectedRevision, actualRevision: result.actualRevision };
|
|
282
|
+
}
|
|
283
|
+
if (!validRevision(result.revision))
|
|
284
|
+
throw new Error('Backing port returned an invalid durable revision.');
|
|
285
|
+
return { status: 'success', backend, revision: result.revision };
|
|
286
|
+
}
|
|
287
|
+
catch (error) {
|
|
288
|
+
return portFailure(backend, operation, error);
|
|
289
|
+
}
|
|
290
|
+
};
|
|
291
|
+
return {
|
|
292
|
+
backend,
|
|
293
|
+
load,
|
|
294
|
+
save: ({ key, overlay, expectedRevision }) => write('save', key, overlay, expectedRevision),
|
|
295
|
+
delete: ({ key, expectedRevision }) => write('delete', key, null, expectedRevision),
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
const presentationEqual = (left, right) => {
|
|
299
|
+
if (left === right)
|
|
300
|
+
return true;
|
|
301
|
+
if (Array.isArray(left) || Array.isArray(right)) {
|
|
302
|
+
return Array.isArray(left) && Array.isArray(right) && left.length === right.length && left.every((value, index) => presentationEqual(value, right[index]));
|
|
303
|
+
}
|
|
304
|
+
if (!left || !right || typeof left !== 'object' || typeof right !== 'object')
|
|
305
|
+
return false;
|
|
306
|
+
const leftRecord = left;
|
|
307
|
+
const rightRecord = right;
|
|
308
|
+
const leftKeys = Object.keys(leftRecord).sort();
|
|
309
|
+
const rightKeys = Object.keys(rightRecord).sort();
|
|
310
|
+
return leftKeys.length === rightKeys.length && leftKeys.every((key, index) => key === rightKeys[index] && presentationEqual(leftRecord[key], rightRecord[key]));
|
|
311
|
+
};
|
|
312
|
+
const migrationError = (backend, operation, code, error) => ({
|
|
313
|
+
status: 'error',
|
|
314
|
+
backend,
|
|
315
|
+
operation,
|
|
316
|
+
diagnostic: { code, message: error instanceof Error ? error.message : String(error) },
|
|
317
|
+
});
|
|
318
|
+
/** Migrates legacy name-keyed positions only after durable save and exact read-back verification. */
|
|
319
|
+
export async function migrateLegacyPositions(input) {
|
|
320
|
+
const { store, key, legacySource, canonicalNodeIds } = input;
|
|
321
|
+
validateKey(key);
|
|
322
|
+
let snapshot;
|
|
323
|
+
try {
|
|
324
|
+
snapshot = await legacySource.read();
|
|
325
|
+
}
|
|
326
|
+
catch (error) {
|
|
327
|
+
return migrationError(store.backend, 'load', 'LEGACY_POSITION_READ_FAILED', error);
|
|
328
|
+
}
|
|
329
|
+
let existing;
|
|
330
|
+
try {
|
|
331
|
+
existing = await store.load({ key });
|
|
332
|
+
}
|
|
333
|
+
catch (error) {
|
|
334
|
+
return migrationError(store.backend, 'load', 'LEGACY_POSITION_STORAGE_LOAD_FAILED', error);
|
|
335
|
+
}
|
|
336
|
+
if (existing.status !== 'success')
|
|
337
|
+
return existing;
|
|
338
|
+
if (existing.overlay && !validRevision(existing.revision)) {
|
|
339
|
+
return migrationError(store.backend, 'load', 'LEGACY_POSITION_INVALID_REVISION', new Error('Stored overlay has no valid durable revision.'));
|
|
340
|
+
}
|
|
341
|
+
if (snapshot === null)
|
|
342
|
+
return { status: 'not-found', backend: store.backend, revision: existing.revision };
|
|
343
|
+
let overlay;
|
|
344
|
+
try {
|
|
345
|
+
if (typeof snapshot.token !== 'string' || !snapshot.token)
|
|
346
|
+
throw new Error('Legacy position snapshot has no deletion token.');
|
|
347
|
+
const canonicalTargets = new Set();
|
|
348
|
+
const nodes = Object.fromEntries(Object.entries(snapshot.positions).map(([legacyId, position]) => {
|
|
349
|
+
const canonicalId = canonicalNodeIds[legacyId];
|
|
350
|
+
if (!canonicalId || !canonicalId.includes('|node|'))
|
|
351
|
+
throw new Error(`Legacy node '${legacyId}' has no canonical node identity.`);
|
|
352
|
+
if (canonicalTargets.has(canonicalId))
|
|
353
|
+
throw new Error(`Multiple legacy nodes map to canonical node '${canonicalId}'.`);
|
|
354
|
+
canonicalTargets.add(canonicalId);
|
|
355
|
+
if (!position || !Number.isFinite(position.x) || !Number.isFinite(position.y))
|
|
356
|
+
throw new Error(`Legacy node '${legacyId}' has an invalid position.`);
|
|
357
|
+
return [canonicalId, { position: { x: position.x, y: position.y } }];
|
|
358
|
+
}));
|
|
359
|
+
overlay = { schemaVersion: key.schemaVersion, sourceFingerprint: key.sourceFingerprint, nodes, ports: {}, edges: {} };
|
|
360
|
+
}
|
|
361
|
+
catch (error) {
|
|
362
|
+
return migrationError(store.backend, 'save', 'LEGACY_POSITION_CONVERSION_FAILED', error);
|
|
363
|
+
}
|
|
364
|
+
if (existing.overlay && !presentationEqual(existing.overlay, overlay)) {
|
|
365
|
+
return { status: 'conflict', backend: store.backend, expectedRevision: null, actualRevision: existing.revision };
|
|
366
|
+
}
|
|
367
|
+
let revision = existing.revision;
|
|
368
|
+
if (!existing.overlay) {
|
|
369
|
+
let saved;
|
|
370
|
+
try {
|
|
371
|
+
saved = await store.save({ key, overlay, expectedRevision: existing.revision });
|
|
372
|
+
}
|
|
373
|
+
catch (error) {
|
|
374
|
+
return migrationError(store.backend, 'save', 'LEGACY_POSITION_STORAGE_SAVE_FAILED', error);
|
|
375
|
+
}
|
|
376
|
+
if (saved.status !== 'success')
|
|
377
|
+
return saved;
|
|
378
|
+
if (!validRevision(saved.revision)) {
|
|
379
|
+
return migrationError(store.backend, 'save', 'LEGACY_POSITION_INVALID_REVISION', new Error('Saved overlay has no valid durable revision.'));
|
|
380
|
+
}
|
|
381
|
+
revision = saved.revision;
|
|
382
|
+
}
|
|
383
|
+
let verified;
|
|
384
|
+
try {
|
|
385
|
+
verified = await store.load({ key });
|
|
386
|
+
}
|
|
387
|
+
catch (error) {
|
|
388
|
+
return migrationError(store.backend, 'load', 'LEGACY_POSITION_STORAGE_LOAD_FAILED', error);
|
|
389
|
+
}
|
|
390
|
+
if (verified.status !== 'success')
|
|
391
|
+
return verified;
|
|
392
|
+
if (!validRevision(verified.revision) || verified.revision !== revision || !verified.overlay || !presentationEqual(verified.overlay, overlay)) {
|
|
393
|
+
return migrationError(store.backend, 'load', 'LEGACY_POSITION_VERIFICATION_FAILED', new Error('Saved presentation overlay could not be verified.'));
|
|
394
|
+
}
|
|
395
|
+
try {
|
|
396
|
+
const deleted = await legacySource.delete({ expectedToken: snapshot.token });
|
|
397
|
+
if (deleted.status !== 'success')
|
|
398
|
+
return { status: 'error', backend: store.backend, operation: 'delete', diagnostic: deleted.diagnostic };
|
|
399
|
+
}
|
|
400
|
+
catch (error) {
|
|
401
|
+
return migrationError(store.backend, 'delete', 'LEGACY_POSITION_DELETE_FAILED', error);
|
|
402
|
+
}
|
|
403
|
+
return { status: 'migrated', backend: store.backend, revision: verified.revision };
|
|
404
|
+
}
|
|
405
|
+
//# sourceMappingURL=presentationStorage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"presentationStorage.js","sourceRoot":"","sources":["../src/presentationStorage.ts"],"names":[],"mappings":"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"}
|