@kodexa-ai/document-wasm-ts 8.0.0-develop-20665016781 → 8.0.0-develop-20666282928

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.
Files changed (38) hide show
  1. package/dist/KddbDocument.d.ts +0 -9
  2. package/dist/KddbDocument.d.ts.map +1 -1
  3. package/dist/KddbDocument.js +0 -19
  4. package/dist/KddbDocument.js.map +1 -1
  5. package/dist/kodexa-shared-worker.js +594 -0
  6. package/dist/kodexa-shared-worker.js.map +7 -0
  7. package/dist/kodexa-worker.js +80 -21
  8. package/dist/kodexa-worker.js.map +3 -3
  9. package/dist/kodexa.wasm +0 -0
  10. package/dist/worker/KodexaSharedWorker.d.ts +267 -0
  11. package/dist/worker/KodexaSharedWorker.d.ts.map +1 -0
  12. package/dist/worker/KodexaSharedWorker.js +475 -0
  13. package/dist/worker/KodexaSharedWorker.js.map +1 -0
  14. package/dist/worker/KodexaWorker.d.ts +110 -0
  15. package/dist/worker/KodexaWorker.d.ts.map +1 -1
  16. package/dist/worker/KodexaWorker.js +163 -0
  17. package/dist/worker/KodexaWorker.js.map +1 -1
  18. package/dist/worker/KodexaWorkerDocument.d.ts +183 -0
  19. package/dist/worker/KodexaWorkerDocument.d.ts.map +1 -1
  20. package/dist/worker/KodexaWorkerDocument.js +458 -0
  21. package/dist/worker/KodexaWorkerDocument.js.map +1 -1
  22. package/dist/worker/KodexaWorkerNode.d.ts +22 -0
  23. package/dist/worker/KodexaWorkerNode.d.ts.map +1 -1
  24. package/dist/worker/KodexaWorkerNode.js +64 -3
  25. package/dist/worker/KodexaWorkerNode.js.map +1 -1
  26. package/dist/worker/index.d.ts +23 -6
  27. package/dist/worker/index.d.ts.map +1 -1
  28. package/dist/worker/index.js +21 -5
  29. package/dist/worker/index.js.map +1 -1
  30. package/dist/worker/kodexa-shared-worker.d.ts +20 -0
  31. package/dist/worker/kodexa-shared-worker.d.ts.map +1 -0
  32. package/dist/worker/kodexa-shared-worker.js +460 -0
  33. package/dist/worker/kodexa-shared-worker.js.map +1 -0
  34. package/dist/worker/kodexa-worker.js +110 -22
  35. package/dist/worker/kodexa-worker.js.map +1 -1
  36. package/dist/worker/types.d.ts +76 -1
  37. package/dist/worker/types.d.ts.map +1 -1
  38. package/package.json +1 -1
@@ -0,0 +1,460 @@
1
+ /**
2
+ * Kodexa SharedWorker Entry Point
3
+ *
4
+ * This SharedWorker owns the Go WASM instance and exposes an RPC-style API
5
+ * via MessagePort. Multiple tabs/windows can connect and share the same
6
+ * WASM instance and documents, with events broadcast to all interested ports.
7
+ *
8
+ * Key differences from dedicated worker:
9
+ * - Uses onconnect to handle multiple port connections
10
+ * - Tracks document subscriptions per port for event broadcasting
11
+ * - Reference counts documents to know when to clean up
12
+ *
13
+ * Initialization order (critical):
14
+ * 1. sql.js WASM loaded and bridge exposed to globalThis
15
+ * 2. wasm_exec.js loaded (defines globalThis.Go)
16
+ * 3. kodexa.wasm instantiated and Go runtime started
17
+ * 4. Worker signals 'ready' to each connected port
18
+ */
19
+ import { setSqlInstance, exposeBridgeFunctions, loadDirectOp } from '../wasm/sqljs-core';
20
+ // ============================================================================
21
+ // Port Management
22
+ // ============================================================================
23
+ /** Connected ports by ID */
24
+ const ports = new Map();
25
+ /** Counter for generating unique port IDs */
26
+ let nextPortId = 1;
27
+ /** Generate a unique port ID */
28
+ function generatePortId() {
29
+ return `port_${nextPortId++}_${Date.now()}`;
30
+ }
31
+ // ============================================================================
32
+ // Document State Management
33
+ // ============================================================================
34
+ /** Track which ports are subscribed to which documents for event broadcasting */
35
+ const documentSubscriptions = new Map(); // docRef -> Set<portId>
36
+ /** Track which ports are using which documents (for cleanup) */
37
+ const documentUsers = new Map(); // docRef -> Set<portId>
38
+ /**
39
+ * Subscribe a port to document events.
40
+ */
41
+ function subscribeToDocument(docRef, portId) {
42
+ if (!documentSubscriptions.has(docRef)) {
43
+ documentSubscriptions.set(docRef, new Set());
44
+ }
45
+ documentSubscriptions.get(docRef).add(portId);
46
+ console.log(`[shared-worker] Port ${portId} subscribed to document ${docRef}`);
47
+ }
48
+ /**
49
+ * Unsubscribe a port from document events.
50
+ */
51
+ function unsubscribeFromDocument(docRef, portId) {
52
+ const subscribers = documentSubscriptions.get(docRef);
53
+ if (subscribers) {
54
+ subscribers.delete(portId);
55
+ if (subscribers.size === 0) {
56
+ documentSubscriptions.delete(docRef);
57
+ }
58
+ console.log(`[shared-worker] Port ${portId} unsubscribed from document ${docRef}`);
59
+ }
60
+ }
61
+ /**
62
+ * Register a port as using a document (for reference counting).
63
+ */
64
+ function registerDocumentUser(docRef, portId) {
65
+ if (!documentUsers.has(docRef)) {
66
+ documentUsers.set(docRef, new Set());
67
+ }
68
+ documentUsers.get(docRef).add(portId);
69
+ }
70
+ /**
71
+ * Unregister a port from a document. Returns true if document should be freed.
72
+ */
73
+ function unregisterDocumentUser(docRef, portId) {
74
+ const users = documentUsers.get(docRef);
75
+ if (users) {
76
+ users.delete(portId);
77
+ if (users.size === 0) {
78
+ documentUsers.delete(docRef);
79
+ return true; // No more users, safe to free
80
+ }
81
+ }
82
+ return false;
83
+ }
84
+ /**
85
+ * Cleanup all resources associated with a port.
86
+ */
87
+ function cleanupPort(portId) {
88
+ console.log(`[shared-worker] Cleaning up port ${portId}`);
89
+ // Remove from all document subscriptions
90
+ for (const [docRef, subscribers] of documentSubscriptions) {
91
+ subscribers.delete(portId);
92
+ if (subscribers.size === 0) {
93
+ documentSubscriptions.delete(docRef);
94
+ }
95
+ }
96
+ // Unregister from all document users
97
+ for (const [docRef, users] of documentUsers) {
98
+ users.delete(portId);
99
+ if (users.size === 0) {
100
+ // No ports using this document, free it
101
+ console.log(`[shared-worker] Freeing document ${docRef} - no more users`);
102
+ try {
103
+ const freeDocument = self.freeDocument;
104
+ if (typeof freeDocument === 'function') {
105
+ freeDocument(docRef);
106
+ }
107
+ }
108
+ catch (error) {
109
+ console.error(`[shared-worker] Error freeing document ${docRef}:`, error);
110
+ }
111
+ documentUsers.delete(docRef);
112
+ }
113
+ }
114
+ // Remove port
115
+ ports.delete(portId);
116
+ }
117
+ // ============================================================================
118
+ // Event Broadcasting
119
+ // ============================================================================
120
+ /**
121
+ * Broadcast an event to all ports subscribed to a document.
122
+ */
123
+ function broadcastToSubscribers(docRef, eventType, detail) {
124
+ const subscribers = documentSubscriptions.get(docRef);
125
+ if (!subscribers || subscribers.size === 0) {
126
+ return;
127
+ }
128
+ const message = {
129
+ type: 'wasmEvent',
130
+ eventType,
131
+ detail,
132
+ documentRef: docRef,
133
+ };
134
+ for (const portId of subscribers) {
135
+ const port = ports.get(portId);
136
+ if (port) {
137
+ try {
138
+ port.postMessage(message);
139
+ }
140
+ catch (error) {
141
+ console.error(`[shared-worker] Error posting to port ${portId}:`, error);
142
+ }
143
+ }
144
+ }
145
+ }
146
+ /**
147
+ * Broadcast an event to ALL connected ports.
148
+ */
149
+ function broadcastToAll(message) {
150
+ for (const [portId, port] of ports) {
151
+ try {
152
+ port.postMessage(message);
153
+ }
154
+ catch (error) {
155
+ console.error(`[shared-worker] Error posting to port ${portId}:`, error);
156
+ }
157
+ }
158
+ }
159
+ // ============================================================================
160
+ // Worker State
161
+ // ============================================================================
162
+ let initialized = false;
163
+ let initPromise = null;
164
+ let config = {};
165
+ // ============================================================================
166
+ // Event Forwarding from WASM
167
+ // ============================================================================
168
+ /**
169
+ * Set up event forwarding from WASM to connected ports.
170
+ */
171
+ function setupEventForwarding() {
172
+ // Create a document shim for Go WASM to dispatch events
173
+ const documentShim = {
174
+ addEventListener: (type, handler) => {
175
+ console.log(`[shared-worker] Event listener registered for: ${type}`);
176
+ self.addEventListener(type, handler);
177
+ },
178
+ removeEventListener: (type, handler) => {
179
+ self.removeEventListener(type, handler);
180
+ },
181
+ dispatchEvent: (event) => {
182
+ // Dispatch locally first
183
+ self.dispatchEvent(event);
184
+ // Forward to interested ports
185
+ if (event instanceof CustomEvent) {
186
+ const detail = event.detail;
187
+ const docRef = detail?.docRef;
188
+ if (docRef !== undefined) {
189
+ // Document-specific event - broadcast to subscribers
190
+ broadcastToSubscribers(docRef, event.type, event.detail);
191
+ }
192
+ else {
193
+ // Global event - broadcast to all ports
194
+ broadcastToAll({
195
+ type: 'wasmEvent',
196
+ eventType: event.type,
197
+ detail: event.detail,
198
+ });
199
+ }
200
+ }
201
+ return true;
202
+ },
203
+ createElement: () => null,
204
+ body: null,
205
+ documentElement: null,
206
+ };
207
+ self.document = documentShim;
208
+ // Direct listener for kodexaDataChange events
209
+ self.addEventListener('kodexaDataChange', (event) => {
210
+ if (event instanceof CustomEvent) {
211
+ const detail = event.detail;
212
+ const docRef = detail?.docRef;
213
+ if (docRef !== undefined) {
214
+ broadcastToSubscribers(docRef, 'kodexaDataChange', event.detail);
215
+ }
216
+ else {
217
+ broadcastToAll({
218
+ type: 'wasmEvent',
219
+ eventType: 'kodexaDataChange',
220
+ detail: event.detail,
221
+ });
222
+ }
223
+ }
224
+ });
225
+ console.log('[shared-worker] Event forwarding configured');
226
+ }
227
+ // ============================================================================
228
+ // WASM Loading (same as dedicated worker)
229
+ // ============================================================================
230
+ async function initializeSqlJs() {
231
+ const sqlJsUrl = 'https://sql.js.org/dist/sql-wasm.js';
232
+ const sqlWasmUrl = 'https://sql.js.org/dist/sql-wasm.wasm';
233
+ try {
234
+ const response = await fetch(sqlJsUrl);
235
+ if (!response.ok) {
236
+ throw new Error(`Failed to fetch sql-wasm.js: ${response.statusText}`);
237
+ }
238
+ const code = await response.text();
239
+ const wrappedCode = `
240
+ (function(module, exports) {
241
+ ${code}
242
+ return module.exports;
243
+ })
244
+ `;
245
+ // eslint-disable-next-line no-eval
246
+ const moduleFactory = eval(wrappedCode);
247
+ const mockModule = { exports: {} };
248
+ const initSqlJs = moduleFactory(mockModule, mockModule.exports);
249
+ if (typeof initSqlJs !== 'function') {
250
+ throw new Error('initSqlJs not found after loading sql-wasm.js');
251
+ }
252
+ const sqlConfig = {
253
+ locateFile: () => sqlWasmUrl,
254
+ };
255
+ const SQL = await initSqlJs(sqlConfig);
256
+ setSqlInstance(SQL);
257
+ exposeBridgeFunctions();
258
+ // Expose loadDocument function
259
+ self.loadDocument = (bytes) => {
260
+ const handle = loadDirectOp(bytes);
261
+ if (handle === 0) {
262
+ console.error('[shared-worker] Failed to load database');
263
+ return 0;
264
+ }
265
+ return self.createDocumentFromHandle(handle);
266
+ };
267
+ console.log('[shared-worker] sql.js initialized from official CDN');
268
+ }
269
+ catch (error) {
270
+ console.error('[shared-worker] Failed to initialize sql.js:', error);
271
+ throw new Error(`Failed to initialize sql.js: ${error}`);
272
+ }
273
+ }
274
+ async function loadWasmExec() {
275
+ if (self.Go) {
276
+ return;
277
+ }
278
+ const baseUrl = config.wasmBaseUrl || self.location.origin;
279
+ const wasmExecUrl = `${baseUrl}/wasm_exec.js`;
280
+ try {
281
+ const response = await fetch(wasmExecUrl);
282
+ if (!response.ok) {
283
+ throw new Error(`Failed to fetch wasm_exec.js: ${response.statusText}`);
284
+ }
285
+ const code = await response.text();
286
+ // eslint-disable-next-line no-eval
287
+ eval(code);
288
+ console.log('[shared-worker] wasm_exec.js loaded');
289
+ }
290
+ catch (error) {
291
+ throw new Error(`Failed to load wasm_exec.js: ${error}`);
292
+ }
293
+ }
294
+ async function loadGoWasm() {
295
+ const baseUrl = config.wasmBaseUrl || self.location.origin;
296
+ const wasmUrl = `${baseUrl}/kodexa.wasm`;
297
+ const response = await fetch(wasmUrl);
298
+ if (!response.ok) {
299
+ throw new Error(`Failed to fetch kodexa.wasm: ${response.statusText}`);
300
+ }
301
+ const wasmBytes = await response.arrayBuffer();
302
+ const go = new self.Go();
303
+ const result = await WebAssembly.instantiate(wasmBytes, go.importObject);
304
+ go.run(result.instance);
305
+ const logLevel = config.logLevel || 'warn';
306
+ if (self.kodexa_setLogLevel) {
307
+ self.kodexa_setLogLevel(logLevel);
308
+ }
309
+ console.log('[shared-worker] Go WASM loaded');
310
+ }
311
+ async function initialize(workerConfig) {
312
+ if (initialized) {
313
+ return;
314
+ }
315
+ if (initPromise) {
316
+ return initPromise;
317
+ }
318
+ config = workerConfig || {};
319
+ initPromise = (async () => {
320
+ try {
321
+ setupEventForwarding();
322
+ await initializeSqlJs();
323
+ await loadWasmExec();
324
+ await loadGoWasm();
325
+ initialized = true;
326
+ console.log('[shared-worker] Kodexa WASM fully initialized');
327
+ }
328
+ catch (error) {
329
+ console.error('[shared-worker] Initialization failed:', error);
330
+ throw error;
331
+ }
332
+ })();
333
+ return initPromise;
334
+ }
335
+ // ============================================================================
336
+ // Message Handling
337
+ // ============================================================================
338
+ /**
339
+ * Handle RPC call from a port.
340
+ */
341
+ function handleCall(request) {
342
+ const { id, method, args, portId } = request;
343
+ try {
344
+ const fn = self[method];
345
+ if (typeof fn !== 'function') {
346
+ return {
347
+ id,
348
+ portId,
349
+ success: false,
350
+ error: `Function '${method}' not found on globalThis`,
351
+ };
352
+ }
353
+ const result = fn(...(args || []));
354
+ // Track document usage when creating/loading documents
355
+ if (method === 'createDocument' || method === 'createDocumentFromText' ||
356
+ method === 'createDocumentFromJson' || method === 'createDocumentFromKddbBytes' ||
357
+ method === 'loadDocument') {
358
+ if (typeof result === 'number' && result > 0) {
359
+ registerDocumentUser(result, portId);
360
+ }
361
+ }
362
+ // Track document disposal
363
+ if (method === 'freeDocument' && args && args.length > 0) {
364
+ const docRef = args[0];
365
+ const shouldFree = unregisterDocumentUser(docRef, portId);
366
+ if (!shouldFree) {
367
+ // Other ports still using this document, don't actually free it
368
+ return { id, portId, success: true, result: undefined };
369
+ }
370
+ }
371
+ return { id, portId, success: true, result };
372
+ }
373
+ catch (error) {
374
+ return {
375
+ id,
376
+ portId,
377
+ success: false,
378
+ error: error instanceof Error ? error.message : String(error),
379
+ };
380
+ }
381
+ }
382
+ /**
383
+ * Handle messages from a connected port.
384
+ */
385
+ function handlePortMessage(portId, port, event) {
386
+ const data = event.data;
387
+ // Handle init message
388
+ if ('type' in data && data.type === 'init') {
389
+ (async () => {
390
+ try {
391
+ await initialize(data.config);
392
+ const readyMessage = { type: 'ready', portId };
393
+ port.postMessage(readyMessage);
394
+ }
395
+ catch (error) {
396
+ const errorMessage = {
397
+ type: 'error',
398
+ error: error instanceof Error ? error.message : String(error),
399
+ };
400
+ port.postMessage(errorMessage);
401
+ }
402
+ })();
403
+ return;
404
+ }
405
+ // Handle subscription messages
406
+ if ('type' in data && data.type === 'subscribe') {
407
+ subscribeToDocument(data.docRef, portId);
408
+ return;
409
+ }
410
+ if ('type' in data && data.type === 'unsubscribe') {
411
+ unsubscribeFromDocument(data.docRef, portId);
412
+ return;
413
+ }
414
+ // Handle RPC call
415
+ if ('type' in data && data.type === 'call') {
416
+ if (!initialized) {
417
+ const response = {
418
+ id: data.id,
419
+ portId,
420
+ success: false,
421
+ error: 'Worker not initialized. Send init message first.',
422
+ };
423
+ port.postMessage(response);
424
+ return;
425
+ }
426
+ // Add portId to the request
427
+ const request = { ...data, portId };
428
+ const response = handleCall(request);
429
+ port.postMessage(response);
430
+ }
431
+ }
432
+ // ============================================================================
433
+ // SharedWorker Connection Handler
434
+ // ============================================================================
435
+ self.onconnect = (event) => {
436
+ const port = event.ports[0];
437
+ const portId = generatePortId();
438
+ console.log(`[shared-worker] New port connected: ${portId}`);
439
+ ports.set(portId, port);
440
+ // Set up message handler for this port
441
+ port.onmessage = (e) => handlePortMessage(portId, port, e);
442
+ // Handle port closure (tab closed)
443
+ // Note: Not all browsers reliably fire this event
444
+ port.onmessageerror = () => {
445
+ console.log(`[shared-worker] Port ${portId} message error, cleaning up`);
446
+ cleanupPort(portId);
447
+ };
448
+ // Start the port
449
+ port.start();
450
+ // If already initialized, send ready immediately
451
+ if (initialized) {
452
+ const readyMessage = { type: 'ready', portId };
453
+ port.postMessage(readyMessage);
454
+ }
455
+ // Send connected message so port knows its ID
456
+ port.postMessage({ type: 'connected', portId });
457
+ };
458
+ // Log that shared worker is ready for connections
459
+ console.log('[shared-worker] Kodexa SharedWorker ready for connections');
460
+ //# sourceMappingURL=kodexa-shared-worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kodexa-shared-worker.js","sourceRoot":"","sources":["../../src/worker/kodexa-shared-worker.ts"],"names":[],"mappings":"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"}
@@ -16,33 +16,118 @@ import { setSqlInstance, exposeBridgeFunctions, loadDirectOp } from '../wasm/sql
16
16
  let initialized = false;
17
17
  let initPromise = null;
18
18
  let config = {};
19
+ /**
20
+ * Set up event forwarding from WASM to main thread.
21
+ * The Go WASM runtime dispatches events using CustomEvent on a document-like object.
22
+ * In worker context, we create a shim that captures these events and forwards them.
23
+ */
24
+ function setupEventForwarding() {
25
+ // Create a document shim that the Go WASM can use to dispatch events
26
+ // This allows the existing Go code to work unchanged in worker context
27
+ const documentShim = {
28
+ addEventListener: (type, handler) => {
29
+ console.log(`[worker] Event listener registered for: ${type}`);
30
+ self.addEventListener(type, handler);
31
+ },
32
+ removeEventListener: (type, handler) => {
33
+ self.removeEventListener(type, handler);
34
+ },
35
+ dispatchEvent: (event) => {
36
+ // When Go dispatches an event, forward it to both:
37
+ // 1. Local listeners in the worker (for any worker-side handling)
38
+ // 2. Main thread via postMessage
39
+ self.dispatchEvent(event);
40
+ // Forward to main thread
41
+ if (event instanceof CustomEvent) {
42
+ const message = {
43
+ type: 'wasmEvent',
44
+ eventType: event.type,
45
+ detail: event.detail,
46
+ };
47
+ self.postMessage(message);
48
+ }
49
+ return true;
50
+ },
51
+ createElement: () => null, // No-op for worker
52
+ body: null,
53
+ documentElement: null,
54
+ };
55
+ // Expose the shim as 'document' in worker global scope
56
+ // This allows Go WASM code that uses document.dispatchEvent to work
57
+ self.document = documentShim;
58
+ // Also set up a direct listener on self for kodexaDataChange events
59
+ // in case Go uses a different mechanism
60
+ self.addEventListener('kodexaDataChange', (event) => {
61
+ if (event instanceof CustomEvent) {
62
+ const message = {
63
+ type: 'wasmEvent',
64
+ eventType: 'kodexaDataChange',
65
+ detail: event.detail,
66
+ };
67
+ self.postMessage(message);
68
+ }
69
+ });
70
+ console.log('[worker] Event forwarding configured');
71
+ }
19
72
  /**
20
73
  * Initialize sql.js in the worker context.
21
- * Uses dynamic import from ESM CDN for browser workers.
74
+ * Uses the official sql.js CDN which provides proper browser-only builds.
75
+ *
76
+ * NOTE: We use fetch + eval instead of importScripts because:
77
+ * - The worker is loaded as a module worker (type: "module")
78
+ * - Module workers don't support importScripts()
79
+ * - esm.sh bundles Node.js polyfills that break in browser workers
80
+ * - The official CDN provides a pure browser UMD build
22
81
  */
23
82
  async function initializeSqlJs() {
24
- // For browser workers, we need to load sql.js from a CDN that supports ESM
25
- // We use the esm.sh CDN which provides ESM versions of npm packages
26
- const sqlJsUrl = 'https://esm.sh/sql.js@1.11.0';
27
- // Dynamic import from CDN
28
- const sqlJsModule = await import(/* webpackIgnore: true */ sqlJsUrl);
29
- const initSqlJs = sqlJsModule.default;
30
- // Configure sql.js WASM location
31
- const sqlConfig = {};
32
- sqlConfig.locateFile = () => 'https://sql.js.org/dist/sql-wasm.wasm';
33
- const SQL = await initSqlJs(sqlConfig);
34
- setSqlInstance(SQL);
35
- exposeBridgeFunctions();
36
- // Expose loadDocument function
37
- self.loadDocument = (bytes) => {
38
- const handle = loadDirectOp(bytes);
39
- if (handle === 0) {
40
- console.error('[worker] Failed to load database');
41
- return 0;
83
+ // Use the official sql.js CDN which has proper browser builds
84
+ const sqlJsUrl = 'https://sql.js.org/dist/sql-wasm.js';
85
+ const sqlWasmUrl = 'https://sql.js.org/dist/sql-wasm.wasm';
86
+ try {
87
+ // Load sql.js using fetch + eval (since module workers don't support importScripts)
88
+ const response = await fetch(sqlJsUrl);
89
+ if (!response.ok) {
90
+ throw new Error(`Failed to fetch sql-wasm.js: ${response.statusText}`);
42
91
  }
43
- return self.createDocumentFromHandle(handle);
44
- };
45
- console.log('[worker] sql.js initialized');
92
+ const code = await response.text();
93
+ // The UMD build checks for CommonJS (module.exports) before global assignment.
94
+ // We wrap the code to provide module/exports in scope for the UMD detection.
95
+ // UMD pattern: if (typeof exports === 'object' && typeof module === 'object') module.exports = initSqlJs;
96
+ const wrappedCode = `
97
+ (function(module, exports) {
98
+ ${code}
99
+ return module.exports;
100
+ })
101
+ `;
102
+ // eslint-disable-next-line no-eval
103
+ const moduleFactory = eval(wrappedCode);
104
+ const mockModule = { exports: {} };
105
+ const initSqlJs = moduleFactory(mockModule, mockModule.exports);
106
+ if (typeof initSqlJs !== 'function') {
107
+ throw new Error('initSqlJs not found after loading sql-wasm.js');
108
+ }
109
+ // Configure sql.js WASM location
110
+ const sqlConfig = {
111
+ locateFile: () => sqlWasmUrl,
112
+ };
113
+ const SQL = await initSqlJs(sqlConfig);
114
+ setSqlInstance(SQL);
115
+ exposeBridgeFunctions();
116
+ // Expose loadDocument function
117
+ self.loadDocument = (bytes) => {
118
+ const handle = loadDirectOp(bytes);
119
+ if (handle === 0) {
120
+ console.error('[worker] Failed to load database');
121
+ return 0;
122
+ }
123
+ return self.createDocumentFromHandle(handle);
124
+ };
125
+ console.log('[worker] sql.js initialized from official CDN');
126
+ }
127
+ catch (error) {
128
+ console.error('[worker] Failed to initialize sql.js:', error);
129
+ throw new Error(`Failed to initialize sql.js: ${error}`);
130
+ }
46
131
  }
47
132
  /**
48
133
  * Load wasm_exec.js in the worker context.
@@ -104,6 +189,9 @@ async function initialize(workerConfig) {
104
189
  config = workerConfig || {};
105
190
  initPromise = (async () => {
106
191
  try {
192
+ // Step 0: Set up event forwarding BEFORE loading WASM
193
+ // This ensures the document shim is in place when Go initializes
194
+ setupEventForwarding();
107
195
  // Step 1: Initialize sql.js (MUST be first)
108
196
  await initializeSqlJs();
109
197
  // Step 2: Load wasm_exec.js
@@ -1 +1 @@
1
- {"version":3,"file":"kodexa-worker.js","sourceRoot":"","sources":["../../src/worker/kodexa-worker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"kodexa-worker.js","sourceRoot":"","sources":["../../src/worker/kodexa-worker.ts"],"names":[],"mappings":"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"}