@kodexa-ai/document-wasm-ts 2026.2.0-develop-21783247139 → 2026.2.0-develop-21888294639

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.
@@ -70,6 +70,8 @@ export declare class KodexaSharedWorker {
70
70
  private eventListeners;
71
71
  private documentInvalidatedListeners;
72
72
  private portId;
73
+ private heartbeatIntervalId;
74
+ private static readonly HEARTBEAT_INTERVAL_MS;
73
75
  private pendingSharedDocOps;
74
76
  private nextSharedDocOpId;
75
77
  /**
@@ -84,6 +86,7 @@ export declare class KodexaSharedWorker {
84
86
  private handleMessage;
85
87
  /**
86
88
  * Handle shared document operation responses.
89
+ * Matches responses to pending requests by requestId.
87
90
  */
88
91
  private handleSharedDocumentResponse;
89
92
  /**
@@ -369,6 +372,23 @@ export declare class KodexaSharedWorker {
369
372
  * @param engineRef Extraction engine reference
370
373
  */
371
374
  freeExtractionEngine(engineRef: number): Promise<void>;
375
+ /**
376
+ * Start sending periodic heartbeat messages to the SharedWorker.
377
+ * This allows the worker to detect when a port becomes stale
378
+ * (tab crash, mobile eviction, etc.).
379
+ */
380
+ private startHeartbeat;
381
+ /**
382
+ * Stop the heartbeat interval.
383
+ */
384
+ private stopHeartbeat;
385
+ /**
386
+ * Release a shared document synchronously (fire-and-forget).
387
+ * Used in beforeunload handlers where async operations are not guaranteed to complete.
388
+ *
389
+ * @param documentFamilyId - Document family ID to release
390
+ */
391
+ releaseSharedDocumentSync(documentFamilyId: string): void;
372
392
  /**
373
393
  * Disconnect from the SharedWorker.
374
394
  * This closes the port but doesn't terminate the worker (other tabs may still use it).
@@ -1 +1 @@
1
- {"version":3,"file":"KodexaSharedWorker.d.ts","sourceRoot":"","sources":["../../src/worker/KodexaSharedWorker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"KodexaSharedWorker.d.ts","sourceRoot":"","sources":["../../src/worker/KodexaSharedWorker.ts"],"names":[],"mappings":"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"}
@@ -40,6 +40,7 @@ export class KodexaSharedWorker {
40
40
  this.eventListeners = new Set();
41
41
  this.documentInvalidatedListeners = new Set();
42
42
  this.portId = null;
43
+ this.heartbeatIntervalId = null;
43
44
  // Pending shared document operations (for async response handling)
44
45
  this.pendingSharedDocOps = new Map();
45
46
  this.nextSharedDocOpId = 0;
@@ -137,16 +138,14 @@ export class KodexaSharedWorker {
137
138
  }
138
139
  /**
139
140
  * Handle shared document operation responses.
141
+ * Matches responses to pending requests by requestId.
140
142
  */
141
143
  handleSharedDocumentResponse(response) {
142
- // Shared document responses don't have request IDs in the current design,
143
- // so we use a simple "last pending" approach for now.
144
- // This works because shared document operations are typically sequential.
145
- // For a more robust solution, we could add request IDs.
146
- const pendingOps = Array.from(this.pendingSharedDocOps.entries());
147
- if (pendingOps.length > 0) {
148
- const [opId, handler] = pendingOps[0];
149
- this.pendingSharedDocOps.delete(opId);
144
+ const requestId = response.requestId;
145
+ if (requestId && this.pendingSharedDocOps.has(requestId)) {
146
+ // Match by requestId (preferred path)
147
+ const handler = this.pendingSharedDocOps.get(requestId);
148
+ this.pendingSharedDocOps.delete(requestId);
150
149
  if (response.success) {
151
150
  handler.resolve(response);
152
151
  }
@@ -154,6 +153,20 @@ export class KodexaSharedWorker {
154
153
  handler.reject(new Error(response.error || 'Shared document operation failed'));
155
154
  }
156
155
  }
156
+ else {
157
+ // Fallback for older workers that don't echo requestId: use FIFO
158
+ const pendingOps = Array.from(this.pendingSharedDocOps.entries());
159
+ if (pendingOps.length > 0) {
160
+ const [opId, handler] = pendingOps[0];
161
+ this.pendingSharedDocOps.delete(opId);
162
+ if (response.success) {
163
+ handler.resolve(response);
164
+ }
165
+ else {
166
+ handler.reject(new Error(response.error || 'Shared document operation failed'));
167
+ }
168
+ }
169
+ }
157
170
  }
158
171
  /**
159
172
  * Handle document invalidated notifications from other tabs.
@@ -219,6 +232,8 @@ export class KodexaSharedWorker {
219
232
  });
220
233
  // Wait for ready signal
221
234
  await this.ready;
235
+ // Start sending heartbeats to keep port alive in SharedWorker
236
+ this.startHeartbeat();
222
237
  }
223
238
  /**
224
239
  * Get the port ID assigned by the SharedWorker.
@@ -342,6 +357,7 @@ export class KodexaSharedWorker {
342
357
  type: 'loadSharedDocument',
343
358
  documentFamilyId,
344
359
  kddbBytes,
360
+ requestId: opId,
345
361
  });
346
362
  });
347
363
  }
@@ -371,6 +387,7 @@ export class KodexaSharedWorker {
371
387
  this.port.postMessage({
372
388
  type: 'releaseSharedDocument',
373
389
  documentFamilyId,
390
+ requestId: opId,
374
391
  });
375
392
  });
376
393
  }
@@ -399,6 +416,7 @@ export class KodexaSharedWorker {
399
416
  this.port.postMessage({
400
417
  type: 'isDocumentShared',
401
418
  documentFamilyId,
419
+ requestId: opId,
402
420
  });
403
421
  });
404
422
  }
@@ -424,6 +442,7 @@ export class KodexaSharedWorker {
424
442
  type: 'invalidateSharedDocument',
425
443
  documentFamilyId,
426
444
  reason,
445
+ requestId: opId,
427
446
  });
428
447
  });
429
448
  }
@@ -691,8 +710,56 @@ export class KodexaSharedWorker {
691
710
  await this.call('freeExtractionEngine', engineRef);
692
711
  }
693
712
  // ============================================================================
713
+ // Heartbeat
714
+ // ============================================================================
715
+ /**
716
+ * Start sending periodic heartbeat messages to the SharedWorker.
717
+ * This allows the worker to detect when a port becomes stale
718
+ * (tab crash, mobile eviction, etc.).
719
+ */
720
+ startHeartbeat() {
721
+ if (this.heartbeatIntervalId)
722
+ return;
723
+ this.heartbeatIntervalId = setInterval(() => {
724
+ if (!this.disconnected) {
725
+ try {
726
+ this.port.postMessage({ type: 'heartbeat' });
727
+ }
728
+ catch {
729
+ // Port may be broken - stop heartbeat
730
+ this.stopHeartbeat();
731
+ }
732
+ }
733
+ }, KodexaSharedWorker.HEARTBEAT_INTERVAL_MS);
734
+ }
735
+ /**
736
+ * Stop the heartbeat interval.
737
+ */
738
+ stopHeartbeat() {
739
+ if (this.heartbeatIntervalId) {
740
+ clearInterval(this.heartbeatIntervalId);
741
+ this.heartbeatIntervalId = null;
742
+ }
743
+ }
744
+ // ============================================================================
694
745
  // Lifecycle
695
746
  // ============================================================================
747
+ /**
748
+ * Release a shared document synchronously (fire-and-forget).
749
+ * Used in beforeunload handlers where async operations are not guaranteed to complete.
750
+ *
751
+ * @param documentFamilyId - Document family ID to release
752
+ */
753
+ releaseSharedDocumentSync(documentFamilyId) {
754
+ if (this.disconnected)
755
+ return;
756
+ try {
757
+ this.port.postMessage({ type: 'releaseSharedDocument', documentFamilyId });
758
+ }
759
+ catch {
760
+ // Port may already be closed
761
+ }
762
+ }
696
763
  /**
697
764
  * Disconnect from the SharedWorker.
698
765
  * This closes the port but doesn't terminate the worker (other tabs may still use it).
@@ -702,6 +769,15 @@ export class KodexaSharedWorker {
702
769
  return;
703
770
  }
704
771
  this.disconnected = true;
772
+ // Stop heartbeat before closing
773
+ this.stopHeartbeat();
774
+ // Tell the SharedWorker to clean up this port's resources
775
+ try {
776
+ this.port.postMessage({ type: 'disconnect' });
777
+ }
778
+ catch {
779
+ // Port may already be broken
780
+ }
705
781
  this.port.close();
706
782
  // Clear all event listeners
707
783
  this.eventListeners.clear();
@@ -736,4 +812,5 @@ export class KodexaSharedWorker {
736
812
  return this.disconnected;
737
813
  }
738
814
  }
815
+ KodexaSharedWorker.HEARTBEAT_INTERVAL_MS = 15000;
739
816
  //# sourceMappingURL=KodexaSharedWorker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"KodexaSharedWorker.js","sourceRoot":"","sources":["../../src/worker/KodexaSharedWorker.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * KodexaSharedWorker - Main Thread Proxy for SharedWorker WASM\n *\n * This class manages a SharedWorker that runs the Go WASM module.\n * Multiple tabs/windows can share the same worker instance, enabling\n * shared document state and cross-tab event synchronization.\n *\n * API is compatible with KodexaWorker - same methods, same return types.\n *\n * Usage:\n * ```typescript\n * const kodexa = new KodexaSharedWorker();\n * await kodexa.init();\n *\n * const doc = await kodexa.createDocument();\n * const root = await doc.getRoot();\n *\n * await doc.dispose();\n * kodexa.disconnect();\n * ```\n */\n\nimport type {\n SharedWorkerRequest,\n SharedWorkerResponse,\n SharedWorkerOutboundMessage,\n WorkerConfig,\n PendingRequest,\n WorkerWasmEventMessage,\n PortConnectedMessage,\n SharedWorkerReadyMessage,\n SharedDocumentResponse,\n SharedDocumentInvalidatedEvent,\n} from './types';\nimport { KodexaWorkerDocument } from './KodexaWorkerDocument';\n\n/**\n * Callback for document invalidation events.\n */\nexport type DocumentInvalidatedCallback = (documentFamilyId: string, reason: string, initiatorPortId: string) => void;\n\n/**\n * Callback for WASM events forwarded from the worker.\n */\nexport type WasmEventCallback = (eventType: string, detail: unknown) => void;\n\n/**\n * Options for creating a KodexaSharedWorker instance.\n */\nexport interface KodexaSharedWorkerOptions extends WorkerConfig {\n /**\n * URL to the shared worker script.\n * If not provided, uses the bundled shared worker from the package.\n */\n workerUrl?: string | URL;\n\n /**\n * Whether to dispatch forwarded WASM events as DOM CustomEvents on document.\n * Defaults to true for backwards compatibility with main-thread WASM code.\n */\n dispatchDomEvents?: boolean;\n\n /**\n * Name for the SharedWorker (for debugging).\n * Defaults to 'kodexa'.\n */\n name?: string;\n}\n\n/**\n * Main thread proxy for Kodexa SharedWorker.\n *\n * Creates and manages a connection to a SharedWorker that runs the Go WASM module.\n * Multiple KodexaSharedWorker instances in different tabs will share the same\n * underlying SharedWorker process.\n */\nexport class KodexaSharedWorker {\n private worker: SharedWorker;\n private port: MessagePort;\n private ready: Promise<void>;\n private readyResolve!: () => void;\n private readyReject!: (error: Error) => void;\n private pending = new Map<string, PendingRequest>();\n private nextId = 0;\n private disconnected = false;\n private config: WorkerConfig;\n private dispatchDomEvents: boolean;\n private eventListeners = new Set<WasmEventCallback>();\n private documentInvalidatedListeners = new Set<DocumentInvalidatedCallback>();\n private portId: string | null = null;\n\n // Pending shared document operations (for async response handling)\n private pendingSharedDocOps = new Map<string, {\n resolve: (value: any) => void;\n reject: (error: Error) => void;\n }>();\n private nextSharedDocOpId = 0;\n\n /**\n * Create a new KodexaSharedWorker instance.\n *\n * @param options Configuration options\n */\n constructor(options: KodexaSharedWorkerOptions = {}) {\n this.config = {\n wasmBaseUrl: options.wasmBaseUrl,\n logLevel: options.logLevel,\n wasmVersion: options.wasmVersion,\n };\n this.dispatchDomEvents = options.dispatchDomEvents !== false;\n\n // Determine worker URL\n let workerUrl: string | URL;\n if (options.workerUrl) {\n workerUrl = options.workerUrl;\n } else {\n // Default: use shared worker from same directory as this module\n // Note: import.meta.url requires ESM mode, fallback for CommonJS/test environments\n try {\n workerUrl = new URL('./kodexa-shared-worker.js', import.meta.url);\n } catch {\n // Fallback for environments without import.meta (e.g., Jest, CommonJS)\n workerUrl = './kodexa-shared-worker.js';\n }\n }\n\n const workerName = options.name || 'kodexa';\n this.worker = new SharedWorker(workerUrl, { type: 'module', name: workerName });\n this.port = this.worker.port;\n\n // Set up ready promise\n this.ready = new Promise((resolve, reject) => {\n this.readyResolve = resolve;\n this.readyReject = reject;\n });\n\n // Handle messages from worker\n this.port.onmessage = this.handleMessage.bind(this);\n this.port.onmessageerror = this.handleError.bind(this);\n\n // Start the port\n this.port.start();\n }\n\n /**\n * Handle messages from the worker.\n */\n private handleMessage(event: MessageEvent<SharedWorkerOutboundMessage>): void {\n const data = event.data;\n\n // Handle connected message (assigns port ID)\n if ('type' in data && data.type === 'connected') {\n const msg = data as PortConnectedMessage;\n this.portId = msg.portId;\n console.log(`[KodexaSharedWorker] Connected with port ID: ${this.portId}`);\n return;\n }\n\n // Handle ready message\n if ('type' in data && data.type === 'ready') {\n const msg = data as SharedWorkerReadyMessage;\n if (msg.portId) {\n this.portId = msg.portId;\n }\n this.readyResolve();\n return;\n }\n\n // Handle error message during initialization\n if ('type' in data && data.type === 'error') {\n this.readyReject(new Error(data.error));\n return;\n }\n\n // Handle forwarded WASM events\n if ('type' in data && data.type === 'wasmEvent') {\n this.handleWasmEvent(data as WorkerWasmEventMessage);\n return;\n }\n\n // Handle shared document response\n if ('type' in data && data.type === 'sharedDocumentResponse') {\n this.handleSharedDocumentResponse(data as SharedDocumentResponse);\n return;\n }\n\n // Handle document invalidated notification\n if ('type' in data && data.type === 'documentInvalidated') {\n this.handleDocumentInvalidated(data as SharedDocumentInvalidatedEvent);\n return;\n }\n\n // Handle RPC response\n if ('id' in data) {\n const response = data as SharedWorkerResponse;\n const handler = this.pending.get(response.id);\n if (handler) {\n this.pending.delete(response.id);\n if (response.success) {\n handler.resolve(response.result);\n } else {\n handler.reject(new Error(response.error || 'Unknown worker error'));\n }\n }\n }\n }\n\n /**\n * Handle shared document operation responses.\n */\n private handleSharedDocumentResponse(response: SharedDocumentResponse): void {\n // Shared document responses don't have request IDs in the current design,\n // so we use a simple \"last pending\" approach for now.\n // This works because shared document operations are typically sequential.\n // For a more robust solution, we could add request IDs.\n const pendingOps = Array.from(this.pendingSharedDocOps.entries());\n if (pendingOps.length > 0) {\n const [opId, handler] = pendingOps[0];\n this.pendingSharedDocOps.delete(opId);\n if (response.success) {\n handler.resolve(response);\n } else {\n handler.reject(new Error(response.error || 'Shared document operation failed'));\n }\n }\n }\n\n /**\n * Handle document invalidated notifications from other tabs.\n */\n private handleDocumentInvalidated(event: SharedDocumentInvalidatedEvent): void {\n console.log(`[KodexaSharedWorker] Document invalidated: ${event.documentFamilyId} by ${event.initiatorPortId}, reason: ${event.reason}`);\n\n // Notify all registered listeners\n for (const listener of this.documentInvalidatedListeners) {\n try {\n listener(event.documentFamilyId, event.reason, event.initiatorPortId);\n } catch (error) {\n console.error('[KodexaSharedWorker] Document invalidated listener error:', error);\n }\n }\n }\n\n /**\n * Handle WASM events forwarded from the worker.\n */\n private handleWasmEvent(message: WorkerWasmEventMessage): void {\n const { eventType, detail } = message;\n console.log(`[KodexaSharedWorker] handleWasmEvent received eventType=${eventType} listenerCount=${this.eventListeners.size}`);\n\n // Notify all registered listeners\n for (const listener of this.eventListeners) {\n try {\n console.log(`[KodexaSharedWorker] Calling listener for ${eventType}`);\n listener(eventType, detail);\n } catch (error) {\n console.error('[KodexaSharedWorker] Event listener error:', error);\n }\n }\n\n // Optionally dispatch as DOM event for backwards compatibility\n if (this.dispatchDomEvents && typeof document !== 'undefined') {\n const customEvent = new CustomEvent(eventType, { detail });\n document.dispatchEvent(customEvent);\n }\n }\n\n /**\n * Handle worker errors.\n */\n private handleError(event: MessageEvent): void {\n console.error('[KodexaSharedWorker] Worker message error:', event);\n this.readyReject(new Error('Worker message error'));\n\n // Reject all pending requests\n for (const [id, handler] of this.pending) {\n handler.reject(new Error('Worker connection error'));\n this.pending.delete(id);\n }\n }\n\n /**\n * Initialize the worker and load WASM.\n * Must be called before any other methods.\n */\n async init(): Promise<void> {\n if (this.disconnected) {\n throw new Error('Worker has been disconnected');\n }\n\n // Send init message to worker\n this.port.postMessage({\n type: 'init',\n config: this.config,\n });\n\n // Wait for ready signal\n await this.ready;\n }\n\n /**\n * Get the port ID assigned by the SharedWorker.\n */\n getPortId(): string | null {\n return this.portId;\n }\n\n /**\n * Call a Go WASM function in the worker.\n *\n * @param method Function name (e.g., 'createDocument', 'documentGetRoot')\n * @param args Arguments to pass to the function\n * @returns Promise that resolves with the function result\n */\n async call<T = unknown>(method: string, ...args: unknown[]): Promise<T> {\n if (this.disconnected) {\n throw new Error('Worker has been disconnected');\n }\n\n // Wait for initialization\n await this.ready;\n\n // Generate unique request ID (namespaced with port ID to avoid collisions)\n const id = `${this.portId || 'unknown'}_${++this.nextId}`;\n\n // Create promise for response\n return new Promise((resolve, reject) => {\n this.pending.set(id, {\n resolve: resolve as (value: unknown) => void,\n reject,\n });\n\n // Send request to worker\n const request: SharedWorkerRequest = {\n id,\n type: 'call',\n method,\n args,\n portId: this.portId || '',\n };\n this.port.postMessage(request);\n });\n }\n\n /**\n * Create a new empty document.\n */\n async createDocument(): Promise<KodexaWorkerDocument> {\n const docRef = await this.call<number>('createDocument');\n return new KodexaWorkerDocument(this as any, docRef);\n }\n\n /**\n * Create a document from text content.\n *\n * @param text Text content for the document\n */\n async fromText(text: string): Promise<KodexaWorkerDocument> {\n const docRef = await this.call<number>('createDocumentFromText', text);\n return new KodexaWorkerDocument(this as any, docRef);\n }\n\n /**\n * Create a document from JSON.\n *\n * @param json JSON string representing the document\n */\n async fromJson(json: string): Promise<KodexaWorkerDocument> {\n const docRef = await this.call<number>('createDocumentFromJson', json);\n return new KodexaWorkerDocument(this as any, docRef);\n }\n\n /**\n * Create a document from KDDB bytes.\n *\n * @param bytes KDDB file contents as Uint8Array\n */\n async fromKddb(bytes: Uint8Array): Promise<KodexaWorkerDocument> {\n // Use the loadDocument function which handles migration\n const docRef = await this.call<number>('loadDocument', bytes);\n if (docRef === 0) {\n throw new Error('Failed to load KDDB document');\n }\n return new KodexaWorkerDocument(this as any, docRef);\n }\n\n /**\n * Create a document from KDDB bytes (raw, no migration).\n *\n * @param bytes KDDB file contents as Uint8Array\n */\n async fromKddbBytes(bytes: Uint8Array): Promise<KodexaWorkerDocument> {\n const docRef = await this.call<number>('createDocumentFromKddbBytes', bytes);\n return new KodexaWorkerDocument(this as any, docRef);\n }\n\n // ============================================================================\n // Shared Document API (for cross-tab document sharing)\n // ============================================================================\n\n /**\n * Load or join a shared document by documentFamilyId.\n * If another tab has already loaded this document, returns the same docRef.\n * Both tabs operate on the same WASM document instance.\n *\n * @param documentFamilyId - Unique identifier for the document family\n * @param kddbBytes - KDDB bytes (required if document not already loaded by another tab)\n * @returns Object with document, shared status, and user count\n */\n async loadSharedDocument(\n documentFamilyId: string,\n kddbBytes?: Uint8Array\n ): Promise<{\n document: KodexaWorkerDocument;\n shared: boolean;\n userCount: number;\n }> {\n if (this.disconnected) {\n throw new Error('Worker has been disconnected');\n }\n\n await this.ready;\n\n return new Promise((resolve, reject) => {\n const opId = `sharedDoc_${++this.nextSharedDocOpId}`;\n this.pendingSharedDocOps.set(opId, {\n resolve: (response: SharedDocumentResponse) => {\n if (response.docRef === undefined) {\n reject(new Error('No docRef returned from loadSharedDocument'));\n return;\n }\n resolve({\n document: new KodexaWorkerDocument(this as any, response.docRef),\n shared: response.shared ?? false,\n userCount: response.userCount ?? 1,\n });\n },\n reject,\n });\n\n this.port.postMessage({\n type: 'loadSharedDocument',\n documentFamilyId,\n kddbBytes,\n });\n });\n }\n\n /**\n * Release this tab's reference to a shared document.\n * Document is freed from WASM memory only when all tabs release it.\n *\n * @param documentFamilyId - Document family ID to release\n * @returns Object with freed status and remaining user count\n */\n async releaseSharedDocument(documentFamilyId: string): Promise<{\n freed: boolean;\n remainingUsers?: number;\n }> {\n if (this.disconnected) {\n throw new Error('Worker has been disconnected');\n }\n\n await this.ready;\n\n return new Promise((resolve, reject) => {\n const opId = `sharedDoc_${++this.nextSharedDocOpId}`;\n this.pendingSharedDocOps.set(opId, {\n resolve: (response: SharedDocumentResponse) => {\n resolve({\n freed: response.freed ?? false,\n remainingUsers: response.remainingUsers,\n });\n },\n reject,\n });\n\n this.port.postMessage({\n type: 'releaseSharedDocument',\n documentFamilyId,\n });\n });\n }\n\n /**\n * Check if a document is already loaded as a shared document by another tab.\n *\n * @param documentFamilyId - Document family ID to check\n * @returns Object with shared status and optional docRef\n */\n async isDocumentShared(documentFamilyId: string): Promise<{\n shared: boolean;\n docRef?: number;\n }> {\n if (this.disconnected) {\n throw new Error('Worker has been disconnected');\n }\n\n await this.ready;\n\n return new Promise((resolve, reject) => {\n const opId = `sharedDoc_${++this.nextSharedDocOpId}`;\n this.pendingSharedDocOps.set(opId, {\n resolve: (response: SharedDocumentResponse) => {\n resolve({\n shared: response.shared ?? false,\n docRef: response.docRef,\n });\n },\n reject,\n });\n\n this.port.postMessage({\n type: 'isDocumentShared',\n documentFamilyId,\n });\n });\n }\n\n /**\n * Invalidate a shared document and notify other tabs.\n * Use this when you need to force-reload a document (e.g., after server update).\n *\n * @param documentFamilyId - Document family ID to invalidate\n * @param reason - Reason for invalidation (e.g., 'reload', 'server-update')\n */\n async invalidateSharedDocument(documentFamilyId: string, reason: string = 'reload'): Promise<void> {\n if (this.disconnected) {\n throw new Error('Worker has been disconnected');\n }\n\n await this.ready;\n\n return new Promise((resolve, reject) => {\n const opId = `sharedDoc_${++this.nextSharedDocOpId}`;\n this.pendingSharedDocOps.set(opId, {\n resolve: () => resolve(),\n reject,\n });\n\n this.port.postMessage({\n type: 'invalidateSharedDocument',\n documentFamilyId,\n reason,\n });\n });\n }\n\n /**\n * Subscribe to document invalidation events from other tabs.\n *\n * @param callback Function to call when a document is invalidated\n * @returns Unsubscribe function\n */\n onDocumentInvalidated(callback: DocumentInvalidatedCallback): () => void {\n this.documentInvalidatedListeners.add(callback);\n return () => {\n this.documentInvalidatedListeners.delete(callback);\n };\n }\n\n /**\n * Remove a document invalidation listener.\n *\n * @param callback The callback to remove\n */\n offDocumentInvalidated(callback: DocumentInvalidatedCallback): void {\n this.documentInvalidatedListeners.delete(callback);\n }\n\n /**\n * Get library version information.\n */\n async getLibraryVersion(): Promise<string> {\n return this.call<string>('getLibraryVersion');\n }\n\n /**\n * Get build information.\n */\n async getBuildInfo(): Promise<string> {\n return this.call<string>('getBuildInfo');\n }\n\n /**\n * Cleanup all resources in the worker.\n */\n async cleanup(): Promise<void> {\n await this.call('cleanup');\n }\n\n /**\n * Get active handle count (for debugging).\n */\n async getActiveHandles(): Promise<unknown> {\n return this.call('getActiveHandles');\n }\n\n /**\n * Set the log level for Go WASM logging.\n *\n * @param level Log level ('debug', 'info', 'warn', 'error')\n */\n async setLogLevel(level: 'debug' | 'info' | 'warn' | 'error'): Promise<string> {\n return this.call<string>('kodexa_setLogLevel', level);\n }\n\n /**\n * Request the WASM module to clean up all resources and prepare for shutdown.\n *\n * This method signals the Go WASM runtime to clean up all open documents,\n * release resources, and return shutdown status.\n *\n * Note: The calling code should handle any UI cleanup after receiving\n * a successful shutdown response.\n *\n * @returns Shutdown result object with success status, message, cleanup count, and version\n */\n async requestShutdown(): Promise<{\n success: boolean;\n message: string;\n documentsCleanedUp: number;\n version: string;\n }> {\n const result = await this.call<string>('requestShutdown');\n return JSON.parse(result);\n }\n\n // ============================================================================\n // Event Subscription API\n // ============================================================================\n\n /**\n * Subscribe to WASM events forwarded from the worker.\n * These events include data change events, validation events, etc.\n *\n * @param callback Function to call when an event is received\n * @returns Unsubscribe function\n */\n onWasmEvent(callback: WasmEventCallback): () => void {\n console.log(`[KodexaSharedWorker] onWasmEvent: registering listener, current count=${this.eventListeners.size}`);\n this.eventListeners.add(callback);\n console.log(`[KodexaSharedWorker] onWasmEvent: listener registered, new count=${this.eventListeners.size}`);\n return () => {\n this.eventListeners.delete(callback);\n };\n }\n\n /**\n * Remove a WASM event listener.\n *\n * @param callback The callback to remove\n */\n offWasmEvent(callback: WasmEventCallback): void {\n this.eventListeners.delete(callback);\n }\n\n /**\n * Enable or disable automatic DOM event dispatching.\n *\n * @param enabled Whether to dispatch DOM events\n */\n setDispatchDomEvents(enabled: boolean): void {\n this.dispatchDomEvents = enabled;\n }\n\n // ============================================================================\n // Document Subscription (SharedWorker-specific)\n // ============================================================================\n\n /**\n * Subscribe to events for a specific document.\n * This tells the SharedWorker to forward events for this document to this port.\n *\n * @param docRef Document reference\n * @param pattern Event pattern to subscribe to (e.g., '*' for all events)\n */\n async subscribeToDocument(docRef: number, pattern: string = '*'): Promise<void> {\n if (!this.portId) {\n throw new Error('Not connected to SharedWorker');\n }\n this.port.postMessage({\n type: 'subscribe',\n portId: this.portId,\n docRef,\n pattern,\n });\n }\n\n /**\n * Unsubscribe from events for a specific document.\n *\n * @param docRef Document reference\n */\n async unsubscribeFromDocument(docRef: number): Promise<void> {\n if (!this.portId) {\n throw new Error('Not connected to SharedWorker');\n }\n this.port.postMessage({\n type: 'unsubscribe',\n portId: this.portId,\n docRef,\n });\n }\n\n // ============================================================================\n // WASM Service Management (via Worker)\n // ============================================================================\n\n /**\n * Initialize the recalculation service in the worker.\n *\n * @param docRef Document reference\n * @param taxonomiesJson JSON string of taxonomies map\n */\n async initializeRecalculationService(docRef: number, taxonomiesJson: string): Promise<unknown> {\n return this.call('initializeRecalculationService', docRef, taxonomiesJson);\n }\n\n /**\n * Subscribe to WASM events for a document.\n *\n * @param docRef Document reference\n * @param pattern Event pattern to subscribe to\n */\n async subscribe(docRef: number, pattern: string): Promise<unknown> {\n return this.call('subscribe', docRef, pattern);\n }\n\n /**\n * Unsubscribe from WASM events for a document.\n *\n * @param docRef Document reference\n * @param pattern Event pattern to unsubscribe from\n */\n async unsubscribe(docRef: number, pattern: string): Promise<unknown> {\n return this.call('unsubscribe', docRef, pattern);\n }\n\n /**\n * Free the recalculation service for a document.\n *\n * @param docRef Document reference\n */\n async freeRecalculationService(docRef: number): Promise<unknown> {\n return this.call('freeRecalculationService', docRef);\n }\n\n /**\n * Force recalculation of all formulas for a document.\n * This is useful for debugging or when formula values need to be refreshed.\n *\n * @param docRef Document reference\n * @param taxonomyRef Optional taxonomy reference for multi-taxonomy documents\n * @returns Object with success status and count of taxonomies recalculated\n */\n async recalculateAll(\n docRef: number,\n taxonomyRef?: string,\n ): Promise<{ success: boolean; taxonomiesRecalculated: number; error?: string }> {\n return this.call('recalculateAll', docRef, taxonomyRef);\n }\n\n // ============================================================================\n // Formula Debug Info (via Worker)\n // ============================================================================\n\n /**\n * Get formula debug info for a formula evaluation.\n * Returns full AST debug tree with attribute references, taxon info, and intermediate results.\n *\n * @param docRef Document reference\n * @param formulaStr Formula string to evaluate\n * @param dataObjectId Data object ID for context\n * @param taxonomyRef Optional taxonomy reference for multi-taxonomy documents\n * @returns JSON string with result, debugInfo tree, and optional error\n */\n async getFormulaDebugInfo(\n docRef: number,\n formulaStr: string,\n dataObjectId: number,\n taxonomyRef?: string,\n ): Promise<string> {\n return this.call<string>('documentGetFormulaDebugInfo', docRef, formulaStr, dataObjectId, taxonomyRef);\n }\n\n /**\n * Evaluate a formula without debug info (lightweight).\n * Use this when you only need the result, not the debug tree.\n *\n * @param docRef Document reference\n * @param formulaStr Formula string to evaluate\n * @param dataObjectId Data object ID for context\n * @param taxonomyRef Optional taxonomy reference for multi-taxonomy documents\n * @returns JSON string with result and optional error\n */\n async evaluateFormula(\n docRef: number,\n formulaStr: string,\n dataObjectId: number,\n taxonomyRef?: string,\n ): Promise<string> {\n return this.call<string>('documentEvaluateFormula', docRef, formulaStr, dataObjectId, taxonomyRef);\n }\n\n // ============================================================================\n // Extraction Engine (via Worker)\n // ============================================================================\n\n /**\n * Create an extraction engine for a document.\n *\n * @param docRef Document reference\n * @param taxonomiesJson JSON string of taxonomies array\n * @returns Engine reference (0 on error)\n */\n async createExtractionEngine(docRef: number, taxonomiesJson: string): Promise<number> {\n return this.call<number>('createExtractionEngine', docRef, taxonomiesJson);\n }\n\n /**\n * Run extraction and save results to the document.\n *\n * @param engineRef Extraction engine reference\n * @returns Count of data objects extracted (-1 on error)\n */\n async processAndSaveExtraction(engineRef: number): Promise<number> {\n return this.call<number>('processAndSaveExtraction', engineRef);\n }\n\n /**\n * Get content exceptions from the extraction.\n *\n * @param engineRef Extraction engine reference\n * @returns JSON array of content exceptions\n */\n async getExtractionContentExceptions(engineRef: number): Promise<string> {\n return this.call<string>('getExtractionContentExceptions', engineRef);\n }\n\n /**\n * Get document taxon validations from the extraction.\n *\n * @param engineRef Extraction engine reference\n * @returns JSON array of validations\n */\n async getExtractionValidations(engineRef: number): Promise<string> {\n return this.call<string>('getExtractionValidations', engineRef);\n }\n\n /**\n * Free an extraction engine and release its resources.\n *\n * @param engineRef Extraction engine reference\n */\n async freeExtractionEngine(engineRef: number): Promise<void> {\n await this.call('freeExtractionEngine', engineRef);\n }\n\n // ============================================================================\n // Lifecycle\n // ============================================================================\n\n /**\n * Disconnect from the SharedWorker.\n * This closes the port but doesn't terminate the worker (other tabs may still use it).\n */\n disconnect(): void {\n if (this.disconnected) {\n return;\n }\n\n this.disconnected = true;\n this.port.close();\n\n // Clear all event listeners\n this.eventListeners.clear();\n this.documentInvalidatedListeners.clear();\n\n // Reject all pending requests\n for (const [id, handler] of this.pending) {\n handler.reject(new Error('Worker disconnected'));\n this.pending.delete(id);\n }\n\n // Reject all pending shared document operations\n for (const [id, handler] of this.pendingSharedDocOps) {\n handler.reject(new Error('Worker disconnected'));\n this.pendingSharedDocOps.delete(id);\n }\n }\n\n /**\n * Alias for disconnect() for API compatibility with KodexaWorker.\n */\n terminate(): void {\n this.disconnect();\n }\n\n /**\n * Check if the worker has been disconnected.\n */\n isDisconnected(): boolean {\n return this.disconnected;\n }\n\n /**\n * Alias for isDisconnected() for API compatibility with KodexaWorker.\n */\n isTerminated(): boolean {\n return this.disconnected;\n }\n}\n"]}
1
+ {"version":3,"file":"KodexaSharedWorker.js","sourceRoot":"","sources":["../../src/worker/KodexaSharedWorker.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * KodexaSharedWorker - Main Thread Proxy for SharedWorker WASM\n *\n * This class manages a SharedWorker that runs the Go WASM module.\n * Multiple tabs/windows can share the same worker instance, enabling\n * shared document state and cross-tab event synchronization.\n *\n * API is compatible with KodexaWorker - same methods, same return types.\n *\n * Usage:\n * ```typescript\n * const kodexa = new KodexaSharedWorker();\n * await kodexa.init();\n *\n * const doc = await kodexa.createDocument();\n * const root = await doc.getRoot();\n *\n * await doc.dispose();\n * kodexa.disconnect();\n * ```\n */\n\nimport type {\n SharedWorkerRequest,\n SharedWorkerResponse,\n SharedWorkerOutboundMessage,\n WorkerConfig,\n PendingRequest,\n WorkerWasmEventMessage,\n PortConnectedMessage,\n SharedWorkerReadyMessage,\n SharedDocumentResponse,\n SharedDocumentInvalidatedEvent,\n} from './types';\nimport { KodexaWorkerDocument } from './KodexaWorkerDocument';\n\n/**\n * Callback for document invalidation events.\n */\nexport type DocumentInvalidatedCallback = (documentFamilyId: string, reason: string, initiatorPortId: string) => void;\n\n/**\n * Callback for WASM events forwarded from the worker.\n */\nexport type WasmEventCallback = (eventType: string, detail: unknown) => void;\n\n/**\n * Options for creating a KodexaSharedWorker instance.\n */\nexport interface KodexaSharedWorkerOptions extends WorkerConfig {\n /**\n * URL to the shared worker script.\n * If not provided, uses the bundled shared worker from the package.\n */\n workerUrl?: string | URL;\n\n /**\n * Whether to dispatch forwarded WASM events as DOM CustomEvents on document.\n * Defaults to true for backwards compatibility with main-thread WASM code.\n */\n dispatchDomEvents?: boolean;\n\n /**\n * Name for the SharedWorker (for debugging).\n * Defaults to 'kodexa'.\n */\n name?: string;\n}\n\n/**\n * Main thread proxy for Kodexa SharedWorker.\n *\n * Creates and manages a connection to a SharedWorker that runs the Go WASM module.\n * Multiple KodexaSharedWorker instances in different tabs will share the same\n * underlying SharedWorker process.\n */\nexport class KodexaSharedWorker {\n private worker: SharedWorker;\n private port: MessagePort;\n private ready: Promise<void>;\n private readyResolve!: () => void;\n private readyReject!: (error: Error) => void;\n private pending = new Map<string, PendingRequest>();\n private nextId = 0;\n private disconnected = false;\n private config: WorkerConfig;\n private dispatchDomEvents: boolean;\n private eventListeners = new Set<WasmEventCallback>();\n private documentInvalidatedListeners = new Set<DocumentInvalidatedCallback>();\n private portId: string | null = null;\n private heartbeatIntervalId: ReturnType<typeof setInterval> | null = null;\n private static readonly HEARTBEAT_INTERVAL_MS = 15_000;\n\n // Pending shared document operations (for async response handling)\n private pendingSharedDocOps = new Map<string, {\n resolve: (value: any) => void;\n reject: (error: Error) => void;\n }>();\n private nextSharedDocOpId = 0;\n\n /**\n * Create a new KodexaSharedWorker instance.\n *\n * @param options Configuration options\n */\n constructor(options: KodexaSharedWorkerOptions = {}) {\n this.config = {\n wasmBaseUrl: options.wasmBaseUrl,\n logLevel: options.logLevel,\n wasmVersion: options.wasmVersion,\n };\n this.dispatchDomEvents = options.dispatchDomEvents !== false;\n\n // Determine worker URL\n let workerUrl: string | URL;\n if (options.workerUrl) {\n workerUrl = options.workerUrl;\n } else {\n // Default: use shared worker from same directory as this module\n // Note: import.meta.url requires ESM mode, fallback for CommonJS/test environments\n try {\n workerUrl = new URL('./kodexa-shared-worker.js', import.meta.url);\n } catch {\n // Fallback for environments without import.meta (e.g., Jest, CommonJS)\n workerUrl = './kodexa-shared-worker.js';\n }\n }\n\n const workerName = options.name || 'kodexa';\n this.worker = new SharedWorker(workerUrl, { type: 'module', name: workerName });\n this.port = this.worker.port;\n\n // Set up ready promise\n this.ready = new Promise((resolve, reject) => {\n this.readyResolve = resolve;\n this.readyReject = reject;\n });\n\n // Handle messages from worker\n this.port.onmessage = this.handleMessage.bind(this);\n this.port.onmessageerror = this.handleError.bind(this);\n\n // Start the port\n this.port.start();\n }\n\n /**\n * Handle messages from the worker.\n */\n private handleMessage(event: MessageEvent<SharedWorkerOutboundMessage>): void {\n const data = event.data;\n\n // Handle connected message (assigns port ID)\n if ('type' in data && data.type === 'connected') {\n const msg = data as PortConnectedMessage;\n this.portId = msg.portId;\n console.log(`[KodexaSharedWorker] Connected with port ID: ${this.portId}`);\n return;\n }\n\n // Handle ready message\n if ('type' in data && data.type === 'ready') {\n const msg = data as SharedWorkerReadyMessage;\n if (msg.portId) {\n this.portId = msg.portId;\n }\n this.readyResolve();\n return;\n }\n\n // Handle error message during initialization\n if ('type' in data && data.type === 'error') {\n this.readyReject(new Error(data.error));\n return;\n }\n\n // Handle forwarded WASM events\n if ('type' in data && data.type === 'wasmEvent') {\n this.handleWasmEvent(data as WorkerWasmEventMessage);\n return;\n }\n\n // Handle shared document response\n if ('type' in data && data.type === 'sharedDocumentResponse') {\n this.handleSharedDocumentResponse(data as SharedDocumentResponse);\n return;\n }\n\n // Handle document invalidated notification\n if ('type' in data && data.type === 'documentInvalidated') {\n this.handleDocumentInvalidated(data as SharedDocumentInvalidatedEvent);\n return;\n }\n\n // Handle RPC response\n if ('id' in data) {\n const response = data as SharedWorkerResponse;\n const handler = this.pending.get(response.id);\n if (handler) {\n this.pending.delete(response.id);\n if (response.success) {\n handler.resolve(response.result);\n } else {\n handler.reject(new Error(response.error || 'Unknown worker error'));\n }\n }\n }\n }\n\n /**\n * Handle shared document operation responses.\n * Matches responses to pending requests by requestId.\n */\n private handleSharedDocumentResponse(response: SharedDocumentResponse): void {\n const requestId = response.requestId;\n if (requestId && this.pendingSharedDocOps.has(requestId)) {\n // Match by requestId (preferred path)\n const handler = this.pendingSharedDocOps.get(requestId)!;\n this.pendingSharedDocOps.delete(requestId);\n if (response.success) {\n handler.resolve(response);\n } else {\n handler.reject(new Error(response.error || 'Shared document operation failed'));\n }\n } else {\n // Fallback for older workers that don't echo requestId: use FIFO\n const pendingOps = Array.from(this.pendingSharedDocOps.entries());\n if (pendingOps.length > 0) {\n const [opId, handler] = pendingOps[0];\n this.pendingSharedDocOps.delete(opId);\n if (response.success) {\n handler.resolve(response);\n } else {\n handler.reject(new Error(response.error || 'Shared document operation failed'));\n }\n }\n }\n }\n\n /**\n * Handle document invalidated notifications from other tabs.\n */\n private handleDocumentInvalidated(event: SharedDocumentInvalidatedEvent): void {\n console.log(`[KodexaSharedWorker] Document invalidated: ${event.documentFamilyId} by ${event.initiatorPortId}, reason: ${event.reason}`);\n\n // Notify all registered listeners\n for (const listener of this.documentInvalidatedListeners) {\n try {\n listener(event.documentFamilyId, event.reason, event.initiatorPortId);\n } catch (error) {\n console.error('[KodexaSharedWorker] Document invalidated listener error:', error);\n }\n }\n }\n\n /**\n * Handle WASM events forwarded from the worker.\n */\n private handleWasmEvent(message: WorkerWasmEventMessage): void {\n const { eventType, detail } = message;\n console.log(`[KodexaSharedWorker] handleWasmEvent received eventType=${eventType} listenerCount=${this.eventListeners.size}`);\n\n // Notify all registered listeners\n for (const listener of this.eventListeners) {\n try {\n console.log(`[KodexaSharedWorker] Calling listener for ${eventType}`);\n listener(eventType, detail);\n } catch (error) {\n console.error('[KodexaSharedWorker] Event listener error:', error);\n }\n }\n\n // Optionally dispatch as DOM event for backwards compatibility\n if (this.dispatchDomEvents && typeof document !== 'undefined') {\n const customEvent = new CustomEvent(eventType, { detail });\n document.dispatchEvent(customEvent);\n }\n }\n\n /**\n * Handle worker errors.\n */\n private handleError(event: MessageEvent): void {\n console.error('[KodexaSharedWorker] Worker message error:', event);\n this.readyReject(new Error('Worker message error'));\n\n // Reject all pending requests\n for (const [id, handler] of this.pending) {\n handler.reject(new Error('Worker connection error'));\n this.pending.delete(id);\n }\n }\n\n /**\n * Initialize the worker and load WASM.\n * Must be called before any other methods.\n */\n async init(): Promise<void> {\n if (this.disconnected) {\n throw new Error('Worker has been disconnected');\n }\n\n // Send init message to worker\n this.port.postMessage({\n type: 'init',\n config: this.config,\n });\n\n // Wait for ready signal\n await this.ready;\n\n // Start sending heartbeats to keep port alive in SharedWorker\n this.startHeartbeat();\n }\n\n /**\n * Get the port ID assigned by the SharedWorker.\n */\n getPortId(): string | null {\n return this.portId;\n }\n\n /**\n * Call a Go WASM function in the worker.\n *\n * @param method Function name (e.g., 'createDocument', 'documentGetRoot')\n * @param args Arguments to pass to the function\n * @returns Promise that resolves with the function result\n */\n async call<T = unknown>(method: string, ...args: unknown[]): Promise<T> {\n if (this.disconnected) {\n throw new Error('Worker has been disconnected');\n }\n\n // Wait for initialization\n await this.ready;\n\n // Generate unique request ID (namespaced with port ID to avoid collisions)\n const id = `${this.portId || 'unknown'}_${++this.nextId}`;\n\n // Create promise for response\n return new Promise((resolve, reject) => {\n this.pending.set(id, {\n resolve: resolve as (value: unknown) => void,\n reject,\n });\n\n // Send request to worker\n const request: SharedWorkerRequest = {\n id,\n type: 'call',\n method,\n args,\n portId: this.portId || '',\n };\n this.port.postMessage(request);\n });\n }\n\n /**\n * Create a new empty document.\n */\n async createDocument(): Promise<KodexaWorkerDocument> {\n const docRef = await this.call<number>('createDocument');\n return new KodexaWorkerDocument(this as any, docRef);\n }\n\n /**\n * Create a document from text content.\n *\n * @param text Text content for the document\n */\n async fromText(text: string): Promise<KodexaWorkerDocument> {\n const docRef = await this.call<number>('createDocumentFromText', text);\n return new KodexaWorkerDocument(this as any, docRef);\n }\n\n /**\n * Create a document from JSON.\n *\n * @param json JSON string representing the document\n */\n async fromJson(json: string): Promise<KodexaWorkerDocument> {\n const docRef = await this.call<number>('createDocumentFromJson', json);\n return new KodexaWorkerDocument(this as any, docRef);\n }\n\n /**\n * Create a document from KDDB bytes.\n *\n * @param bytes KDDB file contents as Uint8Array\n */\n async fromKddb(bytes: Uint8Array): Promise<KodexaWorkerDocument> {\n // Use the loadDocument function which handles migration\n const docRef = await this.call<number>('loadDocument', bytes);\n if (docRef === 0) {\n throw new Error('Failed to load KDDB document');\n }\n return new KodexaWorkerDocument(this as any, docRef);\n }\n\n /**\n * Create a document from KDDB bytes (raw, no migration).\n *\n * @param bytes KDDB file contents as Uint8Array\n */\n async fromKddbBytes(bytes: Uint8Array): Promise<KodexaWorkerDocument> {\n const docRef = await this.call<number>('createDocumentFromKddbBytes', bytes);\n return new KodexaWorkerDocument(this as any, docRef);\n }\n\n // ============================================================================\n // Shared Document API (for cross-tab document sharing)\n // ============================================================================\n\n /**\n * Load or join a shared document by documentFamilyId.\n * If another tab has already loaded this document, returns the same docRef.\n * Both tabs operate on the same WASM document instance.\n *\n * @param documentFamilyId - Unique identifier for the document family\n * @param kddbBytes - KDDB bytes (required if document not already loaded by another tab)\n * @returns Object with document, shared status, and user count\n */\n async loadSharedDocument(\n documentFamilyId: string,\n kddbBytes?: Uint8Array\n ): Promise<{\n document: KodexaWorkerDocument;\n shared: boolean;\n userCount: number;\n }> {\n if (this.disconnected) {\n throw new Error('Worker has been disconnected');\n }\n\n await this.ready;\n\n return new Promise((resolve, reject) => {\n const opId = `sharedDoc_${++this.nextSharedDocOpId}`;\n this.pendingSharedDocOps.set(opId, {\n resolve: (response: SharedDocumentResponse) => {\n if (response.docRef === undefined) {\n reject(new Error('No docRef returned from loadSharedDocument'));\n return;\n }\n resolve({\n document: new KodexaWorkerDocument(this as any, response.docRef),\n shared: response.shared ?? false,\n userCount: response.userCount ?? 1,\n });\n },\n reject,\n });\n\n this.port.postMessage({\n type: 'loadSharedDocument',\n documentFamilyId,\n kddbBytes,\n requestId: opId,\n });\n });\n }\n\n /**\n * Release this tab's reference to a shared document.\n * Document is freed from WASM memory only when all tabs release it.\n *\n * @param documentFamilyId - Document family ID to release\n * @returns Object with freed status and remaining user count\n */\n async releaseSharedDocument(documentFamilyId: string): Promise<{\n freed: boolean;\n remainingUsers?: number;\n }> {\n if (this.disconnected) {\n throw new Error('Worker has been disconnected');\n }\n\n await this.ready;\n\n return new Promise((resolve, reject) => {\n const opId = `sharedDoc_${++this.nextSharedDocOpId}`;\n this.pendingSharedDocOps.set(opId, {\n resolve: (response: SharedDocumentResponse) => {\n resolve({\n freed: response.freed ?? false,\n remainingUsers: response.remainingUsers,\n });\n },\n reject,\n });\n\n this.port.postMessage({\n type: 'releaseSharedDocument',\n documentFamilyId,\n requestId: opId,\n });\n });\n }\n\n /**\n * Check if a document is already loaded as a shared document by another tab.\n *\n * @param documentFamilyId - Document family ID to check\n * @returns Object with shared status and optional docRef\n */\n async isDocumentShared(documentFamilyId: string): Promise<{\n shared: boolean;\n docRef?: number;\n }> {\n if (this.disconnected) {\n throw new Error('Worker has been disconnected');\n }\n\n await this.ready;\n\n return new Promise((resolve, reject) => {\n const opId = `sharedDoc_${++this.nextSharedDocOpId}`;\n this.pendingSharedDocOps.set(opId, {\n resolve: (response: SharedDocumentResponse) => {\n resolve({\n shared: response.shared ?? false,\n docRef: response.docRef,\n });\n },\n reject,\n });\n\n this.port.postMessage({\n type: 'isDocumentShared',\n documentFamilyId,\n requestId: opId,\n });\n });\n }\n\n /**\n * Invalidate a shared document and notify other tabs.\n * Use this when you need to force-reload a document (e.g., after server update).\n *\n * @param documentFamilyId - Document family ID to invalidate\n * @param reason - Reason for invalidation (e.g., 'reload', 'server-update')\n */\n async invalidateSharedDocument(documentFamilyId: string, reason: string = 'reload'): Promise<void> {\n if (this.disconnected) {\n throw new Error('Worker has been disconnected');\n }\n\n await this.ready;\n\n return new Promise((resolve, reject) => {\n const opId = `sharedDoc_${++this.nextSharedDocOpId}`;\n this.pendingSharedDocOps.set(opId, {\n resolve: () => resolve(),\n reject,\n });\n\n this.port.postMessage({\n type: 'invalidateSharedDocument',\n documentFamilyId,\n reason,\n requestId: opId,\n });\n });\n }\n\n /**\n * Subscribe to document invalidation events from other tabs.\n *\n * @param callback Function to call when a document is invalidated\n * @returns Unsubscribe function\n */\n onDocumentInvalidated(callback: DocumentInvalidatedCallback): () => void {\n this.documentInvalidatedListeners.add(callback);\n return () => {\n this.documentInvalidatedListeners.delete(callback);\n };\n }\n\n /**\n * Remove a document invalidation listener.\n *\n * @param callback The callback to remove\n */\n offDocumentInvalidated(callback: DocumentInvalidatedCallback): void {\n this.documentInvalidatedListeners.delete(callback);\n }\n\n /**\n * Get library version information.\n */\n async getLibraryVersion(): Promise<string> {\n return this.call<string>('getLibraryVersion');\n }\n\n /**\n * Get build information.\n */\n async getBuildInfo(): Promise<string> {\n return this.call<string>('getBuildInfo');\n }\n\n /**\n * Cleanup all resources in the worker.\n */\n async cleanup(): Promise<void> {\n await this.call('cleanup');\n }\n\n /**\n * Get active handle count (for debugging).\n */\n async getActiveHandles(): Promise<unknown> {\n return this.call('getActiveHandles');\n }\n\n /**\n * Set the log level for Go WASM logging.\n *\n * @param level Log level ('debug', 'info', 'warn', 'error')\n */\n async setLogLevel(level: 'debug' | 'info' | 'warn' | 'error'): Promise<string> {\n return this.call<string>('kodexa_setLogLevel', level);\n }\n\n /**\n * Request the WASM module to clean up all resources and prepare for shutdown.\n *\n * This method signals the Go WASM runtime to clean up all open documents,\n * release resources, and return shutdown status.\n *\n * Note: The calling code should handle any UI cleanup after receiving\n * a successful shutdown response.\n *\n * @returns Shutdown result object with success status, message, cleanup count, and version\n */\n async requestShutdown(): Promise<{\n success: boolean;\n message: string;\n documentsCleanedUp: number;\n version: string;\n }> {\n const result = await this.call<string>('requestShutdown');\n return JSON.parse(result);\n }\n\n // ============================================================================\n // Event Subscription API\n // ============================================================================\n\n /**\n * Subscribe to WASM events forwarded from the worker.\n * These events include data change events, validation events, etc.\n *\n * @param callback Function to call when an event is received\n * @returns Unsubscribe function\n */\n onWasmEvent(callback: WasmEventCallback): () => void {\n console.log(`[KodexaSharedWorker] onWasmEvent: registering listener, current count=${this.eventListeners.size}`);\n this.eventListeners.add(callback);\n console.log(`[KodexaSharedWorker] onWasmEvent: listener registered, new count=${this.eventListeners.size}`);\n return () => {\n this.eventListeners.delete(callback);\n };\n }\n\n /**\n * Remove a WASM event listener.\n *\n * @param callback The callback to remove\n */\n offWasmEvent(callback: WasmEventCallback): void {\n this.eventListeners.delete(callback);\n }\n\n /**\n * Enable or disable automatic DOM event dispatching.\n *\n * @param enabled Whether to dispatch DOM events\n */\n setDispatchDomEvents(enabled: boolean): void {\n this.dispatchDomEvents = enabled;\n }\n\n // ============================================================================\n // Document Subscription (SharedWorker-specific)\n // ============================================================================\n\n /**\n * Subscribe to events for a specific document.\n * This tells the SharedWorker to forward events for this document to this port.\n *\n * @param docRef Document reference\n * @param pattern Event pattern to subscribe to (e.g., '*' for all events)\n */\n async subscribeToDocument(docRef: number, pattern: string = '*'): Promise<void> {\n if (!this.portId) {\n throw new Error('Not connected to SharedWorker');\n }\n this.port.postMessage({\n type: 'subscribe',\n portId: this.portId,\n docRef,\n pattern,\n });\n }\n\n /**\n * Unsubscribe from events for a specific document.\n *\n * @param docRef Document reference\n */\n async unsubscribeFromDocument(docRef: number): Promise<void> {\n if (!this.portId) {\n throw new Error('Not connected to SharedWorker');\n }\n this.port.postMessage({\n type: 'unsubscribe',\n portId: this.portId,\n docRef,\n });\n }\n\n // ============================================================================\n // WASM Service Management (via Worker)\n // ============================================================================\n\n /**\n * Initialize the recalculation service in the worker.\n *\n * @param docRef Document reference\n * @param taxonomiesJson JSON string of taxonomies map\n */\n async initializeRecalculationService(docRef: number, taxonomiesJson: string): Promise<unknown> {\n return this.call('initializeRecalculationService', docRef, taxonomiesJson);\n }\n\n /**\n * Subscribe to WASM events for a document.\n *\n * @param docRef Document reference\n * @param pattern Event pattern to subscribe to\n */\n async subscribe(docRef: number, pattern: string): Promise<unknown> {\n return this.call('subscribe', docRef, pattern);\n }\n\n /**\n * Unsubscribe from WASM events for a document.\n *\n * @param docRef Document reference\n * @param pattern Event pattern to unsubscribe from\n */\n async unsubscribe(docRef: number, pattern: string): Promise<unknown> {\n return this.call('unsubscribe', docRef, pattern);\n }\n\n /**\n * Free the recalculation service for a document.\n *\n * @param docRef Document reference\n */\n async freeRecalculationService(docRef: number): Promise<unknown> {\n return this.call('freeRecalculationService', docRef);\n }\n\n /**\n * Force recalculation of all formulas for a document.\n * This is useful for debugging or when formula values need to be refreshed.\n *\n * @param docRef Document reference\n * @param taxonomyRef Optional taxonomy reference for multi-taxonomy documents\n * @returns Object with success status and count of taxonomies recalculated\n */\n async recalculateAll(\n docRef: number,\n taxonomyRef?: string,\n ): Promise<{ success: boolean; taxonomiesRecalculated: number; error?: string }> {\n return this.call('recalculateAll', docRef, taxonomyRef);\n }\n\n // ============================================================================\n // Formula Debug Info (via Worker)\n // ============================================================================\n\n /**\n * Get formula debug info for a formula evaluation.\n * Returns full AST debug tree with attribute references, taxon info, and intermediate results.\n *\n * @param docRef Document reference\n * @param formulaStr Formula string to evaluate\n * @param dataObjectId Data object ID for context\n * @param taxonomyRef Optional taxonomy reference for multi-taxonomy documents\n * @returns JSON string with result, debugInfo tree, and optional error\n */\n async getFormulaDebugInfo(\n docRef: number,\n formulaStr: string,\n dataObjectId: number,\n taxonomyRef?: string,\n ): Promise<string> {\n return this.call<string>('documentGetFormulaDebugInfo', docRef, formulaStr, dataObjectId, taxonomyRef);\n }\n\n /**\n * Evaluate a formula without debug info (lightweight).\n * Use this when you only need the result, not the debug tree.\n *\n * @param docRef Document reference\n * @param formulaStr Formula string to evaluate\n * @param dataObjectId Data object ID for context\n * @param taxonomyRef Optional taxonomy reference for multi-taxonomy documents\n * @returns JSON string with result and optional error\n */\n async evaluateFormula(\n docRef: number,\n formulaStr: string,\n dataObjectId: number,\n taxonomyRef?: string,\n ): Promise<string> {\n return this.call<string>('documentEvaluateFormula', docRef, formulaStr, dataObjectId, taxonomyRef);\n }\n\n // ============================================================================\n // Extraction Engine (via Worker)\n // ============================================================================\n\n /**\n * Create an extraction engine for a document.\n *\n * @param docRef Document reference\n * @param taxonomiesJson JSON string of taxonomies array\n * @returns Engine reference (0 on error)\n */\n async createExtractionEngine(docRef: number, taxonomiesJson: string): Promise<number> {\n return this.call<number>('createExtractionEngine', docRef, taxonomiesJson);\n }\n\n /**\n * Run extraction and save results to the document.\n *\n * @param engineRef Extraction engine reference\n * @returns Count of data objects extracted (-1 on error)\n */\n async processAndSaveExtraction(engineRef: number): Promise<number> {\n return this.call<number>('processAndSaveExtraction', engineRef);\n }\n\n /**\n * Get content exceptions from the extraction.\n *\n * @param engineRef Extraction engine reference\n * @returns JSON array of content exceptions\n */\n async getExtractionContentExceptions(engineRef: number): Promise<string> {\n return this.call<string>('getExtractionContentExceptions', engineRef);\n }\n\n /**\n * Get document taxon validations from the extraction.\n *\n * @param engineRef Extraction engine reference\n * @returns JSON array of validations\n */\n async getExtractionValidations(engineRef: number): Promise<string> {\n return this.call<string>('getExtractionValidations', engineRef);\n }\n\n /**\n * Free an extraction engine and release its resources.\n *\n * @param engineRef Extraction engine reference\n */\n async freeExtractionEngine(engineRef: number): Promise<void> {\n await this.call('freeExtractionEngine', engineRef);\n }\n\n // ============================================================================\n // Heartbeat\n // ============================================================================\n\n /**\n * Start sending periodic heartbeat messages to the SharedWorker.\n * This allows the worker to detect when a port becomes stale\n * (tab crash, mobile eviction, etc.).\n */\n private startHeartbeat(): void {\n if (this.heartbeatIntervalId) return;\n this.heartbeatIntervalId = setInterval(() => {\n if (!this.disconnected) {\n try {\n this.port.postMessage({ type: 'heartbeat' });\n } catch {\n // Port may be broken - stop heartbeat\n this.stopHeartbeat();\n }\n }\n }, KodexaSharedWorker.HEARTBEAT_INTERVAL_MS);\n }\n\n /**\n * Stop the heartbeat interval.\n */\n private stopHeartbeat(): void {\n if (this.heartbeatIntervalId) {\n clearInterval(this.heartbeatIntervalId);\n this.heartbeatIntervalId = null;\n }\n }\n\n // ============================================================================\n // Lifecycle\n // ============================================================================\n\n /**\n * Release a shared document synchronously (fire-and-forget).\n * Used in beforeunload handlers where async operations are not guaranteed to complete.\n *\n * @param documentFamilyId - Document family ID to release\n */\n releaseSharedDocumentSync(documentFamilyId: string): void {\n if (this.disconnected) return;\n try {\n this.port.postMessage({ type: 'releaseSharedDocument', documentFamilyId });\n } catch {\n // Port may already be closed\n }\n }\n\n /**\n * Disconnect from the SharedWorker.\n * This closes the port but doesn't terminate the worker (other tabs may still use it).\n */\n disconnect(): void {\n if (this.disconnected) {\n return;\n }\n\n this.disconnected = true;\n\n // Stop heartbeat before closing\n this.stopHeartbeat();\n\n // Tell the SharedWorker to clean up this port's resources\n try {\n this.port.postMessage({ type: 'disconnect' });\n } catch {\n // Port may already be broken\n }\n\n this.port.close();\n\n // Clear all event listeners\n this.eventListeners.clear();\n this.documentInvalidatedListeners.clear();\n\n // Reject all pending requests\n for (const [id, handler] of this.pending) {\n handler.reject(new Error('Worker disconnected'));\n this.pending.delete(id);\n }\n\n // Reject all pending shared document operations\n for (const [id, handler] of this.pendingSharedDocOps) {\n handler.reject(new Error('Worker disconnected'));\n this.pendingSharedDocOps.delete(id);\n }\n }\n\n /**\n * Alias for disconnect() for API compatibility with KodexaWorker.\n */\n terminate(): void {\n this.disconnect();\n }\n\n /**\n * Check if the worker has been disconnected.\n */\n isDisconnected(): boolean {\n return this.disconnected;\n }\n\n /**\n * Alias for isDisconnected() for API compatibility with KodexaWorker.\n */\n isTerminated(): boolean {\n return this.disconnected;\n }\n}\n"]}
@@ -72,6 +72,7 @@ export declare class WorkerDataObjectAccessor {
72
72
  batchCopy(inputs: BatchCopyInput[]): Promise<BatchResult>;
73
73
  getRoots(): Promise<unknown[]>;
74
74
  getChildren(parentId: number): Promise<unknown[]>;
75
+ getDataExceptions(): Promise<unknown[]>;
75
76
  }
76
77
  /**
77
78
  * Accessor for data attribute operations.
@@ -407,6 +408,10 @@ export declare class KodexaWorkerDocument {
407
408
  * Get all data objects from the document.
408
409
  */
409
410
  getDataObjects(): Promise<unknown[]>;
411
+ /**
412
+ * Get all data exceptions from the document.
413
+ */
414
+ getDataExceptions(): Promise<unknown[]>;
410
415
  /**
411
416
  * Get data objects by group key.
412
417
  */
@@ -1 +1 @@
1
- {"version":3,"file":"KodexaWorkerDocument.d.ts","sourceRoot":"","sources":["../../src/worker/KodexaWorkerDocument.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"KodexaWorkerDocument.d.ts","sourceRoot":"","sources":["../../src/worker/KodexaWorkerDocument.ts"],"names":[],"mappings":"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"}
@@ -49,6 +49,9 @@ export class WorkerDataObjectAccessor {
49
49
  async getChildren(parentId) {
50
50
  return this.doc.getChildDataObjects(parentId);
51
51
  }
52
+ async getDataExceptions() {
53
+ return this.doc.getDataExceptions();
54
+ }
52
55
  }
53
56
  /**
54
57
  * Accessor for data attribute operations.
@@ -702,6 +705,15 @@ export class KodexaWorkerDocument {
702
705
  const objects = this.parseJson(resultJson);
703
706
  return Array.isArray(objects) ? objects : [];
704
707
  }
708
+ /**
709
+ * Get all data exceptions from the document.
710
+ */
711
+ async getDataExceptions() {
712
+ this.checkDisposed();
713
+ const resultJson = await this.worker.call('documentGetDataExceptions', this.docRef);
714
+ const exceptions = this.parseJson(resultJson);
715
+ return Array.isArray(exceptions) ? exceptions : [];
716
+ }
705
717
  /**
706
718
  * Get data objects by group key.
707
719
  */