@livestore/sqlite-wasm 0.4.0-dev.3 → 0.4.0-dev.6

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 (79) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/browser/mod.d.ts +1 -0
  3. package/dist/browser/mod.d.ts.map +1 -1
  4. package/dist/browser/mod.js.map +1 -1
  5. package/dist/browser/opfs/AccessHandlePoolVFS.d.ts +7 -0
  6. package/dist/browser/opfs/AccessHandlePoolVFS.d.ts.map +1 -1
  7. package/dist/browser/opfs/AccessHandlePoolVFS.js +36 -1
  8. package/dist/browser/opfs/AccessHandlePoolVFS.js.map +1 -1
  9. package/dist/cf/BlockManager.d.ts +61 -0
  10. package/dist/cf/BlockManager.d.ts.map +1 -0
  11. package/dist/cf/BlockManager.js +157 -0
  12. package/dist/cf/BlockManager.js.map +1 -0
  13. package/dist/cf/CloudflareSqlVFS.d.ts +51 -0
  14. package/dist/cf/CloudflareSqlVFS.d.ts.map +1 -0
  15. package/dist/cf/CloudflareSqlVFS.js +351 -0
  16. package/dist/cf/CloudflareSqlVFS.js.map +1 -0
  17. package/dist/cf/CloudflareWorkerVFS.d.ts +72 -0
  18. package/dist/cf/CloudflareWorkerVFS.d.ts.map +1 -0
  19. package/dist/cf/CloudflareWorkerVFS.js +552 -0
  20. package/dist/cf/CloudflareWorkerVFS.js.map +1 -0
  21. package/dist/cf/mod.d.ts +43 -0
  22. package/dist/cf/mod.d.ts.map +1 -0
  23. package/dist/cf/mod.js +74 -0
  24. package/dist/cf/mod.js.map +1 -0
  25. package/dist/cf/test/async-storage/cloudflare-worker-vfs-advanced.test.d.ts +2 -0
  26. package/dist/cf/test/async-storage/cloudflare-worker-vfs-advanced.test.d.ts.map +1 -0
  27. package/dist/cf/test/async-storage/cloudflare-worker-vfs-advanced.test.js +314 -0
  28. package/dist/cf/test/async-storage/cloudflare-worker-vfs-advanced.test.js.map +1 -0
  29. package/dist/cf/test/async-storage/cloudflare-worker-vfs-core.test.d.ts +2 -0
  30. package/dist/cf/test/async-storage/cloudflare-worker-vfs-core.test.d.ts.map +1 -0
  31. package/dist/cf/test/async-storage/cloudflare-worker-vfs-core.test.js +266 -0
  32. package/dist/cf/test/async-storage/cloudflare-worker-vfs-core.test.js.map +1 -0
  33. package/dist/cf/test/async-storage/cloudflare-worker-vfs-integration.test.d.ts +2 -0
  34. package/dist/cf/test/async-storage/cloudflare-worker-vfs-integration.test.d.ts.map +1 -0
  35. package/dist/cf/test/async-storage/cloudflare-worker-vfs-integration.test.js +444 -0
  36. package/dist/cf/test/async-storage/cloudflare-worker-vfs-integration.test.js.map +1 -0
  37. package/dist/cf/test/async-storage/cloudflare-worker-vfs-reliability.test.d.ts +2 -0
  38. package/dist/cf/test/async-storage/cloudflare-worker-vfs-reliability.test.d.ts.map +1 -0
  39. package/dist/cf/test/async-storage/cloudflare-worker-vfs-reliability.test.js +334 -0
  40. package/dist/cf/test/async-storage/cloudflare-worker-vfs-reliability.test.js.map +1 -0
  41. package/dist/cf/test/sql/cloudflare-sql-vfs-core.test.d.ts +2 -0
  42. package/dist/cf/test/sql/cloudflare-sql-vfs-core.test.d.ts.map +1 -0
  43. package/dist/cf/test/sql/cloudflare-sql-vfs-core.test.js +354 -0
  44. package/dist/cf/test/sql/cloudflare-sql-vfs-core.test.js.map +1 -0
  45. package/dist/load-wasm/mod.node.d.ts.map +1 -1
  46. package/dist/load-wasm/mod.node.js +1 -2
  47. package/dist/load-wasm/mod.node.js.map +1 -1
  48. package/dist/load-wasm/mod.workerd.d.ts +2 -0
  49. package/dist/load-wasm/mod.workerd.d.ts.map +1 -0
  50. package/dist/load-wasm/mod.workerd.js +26 -0
  51. package/dist/load-wasm/mod.workerd.js.map +1 -0
  52. package/dist/make-sqlite-db.d.ts +1 -0
  53. package/dist/make-sqlite-db.d.ts.map +1 -1
  54. package/dist/make-sqlite-db.js.map +1 -1
  55. package/dist/node/NodeFS.d.ts +1 -2
  56. package/dist/node/NodeFS.d.ts.map +1 -1
  57. package/dist/node/NodeFS.js +1 -6
  58. package/dist/node/NodeFS.js.map +1 -1
  59. package/dist/node/mod.js +3 -8
  60. package/dist/node/mod.js.map +1 -1
  61. package/package.json +20 -7
  62. package/src/browser/mod.ts +1 -0
  63. package/src/browser/opfs/AccessHandlePoolVFS.ts +37 -1
  64. package/src/cf/BlockManager.ts +225 -0
  65. package/src/cf/CloudflareSqlVFS.ts +450 -0
  66. package/src/cf/CloudflareWorkerVFS.ts +664 -0
  67. package/src/cf/README.md +60 -0
  68. package/src/cf/mod.ts +143 -0
  69. package/src/cf/test/README.md +224 -0
  70. package/src/cf/test/async-storage/cloudflare-worker-vfs-advanced.test.ts +389 -0
  71. package/src/cf/test/async-storage/cloudflare-worker-vfs-core.test.ts +322 -0
  72. package/src/cf/test/async-storage/cloudflare-worker-vfs-integration.test.ts +567 -0
  73. package/src/cf/test/async-storage/cloudflare-worker-vfs-reliability.test.ts +403 -0
  74. package/src/cf/test/sql/cloudflare-sql-vfs-core.test.ts +433 -0
  75. package/src/load-wasm/mod.node.ts +1 -2
  76. package/src/load-wasm/mod.workerd.ts +26 -0
  77. package/src/make-sqlite-db.ts +1 -0
  78. package/src/node/NodeFS.ts +1 -9
  79. package/src/node/mod.ts +3 -10
@@ -0,0 +1,444 @@
1
+ /// <reference types="vitest/globals" />
2
+ import * as VFS from '@livestore/wa-sqlite/src/VFS.js';
3
+ import { beforeEach, describe, expect, it } from 'vitest';
4
+ import { CloudflareWorkerVFS } from "../../mod.js";
5
+ describe('CloudflareWorkerVFS - Integration Tests', () => {
6
+ let vfs;
7
+ let mockStorage;
8
+ let storageData;
9
+ let storageOperations;
10
+ beforeEach(async () => {
11
+ storageData = new Map();
12
+ storageOperations = [];
13
+ mockStorage = {
14
+ get: (async (_key) => {
15
+ if (Array.isArray(_key)) {
16
+ storageOperations.push(`get-batch: ${_key.length} keys`);
17
+ const result = new Map();
18
+ for (const k of _key) {
19
+ const value = storageData.get(k);
20
+ if (value !== undefined) {
21
+ result.set(k, value);
22
+ }
23
+ }
24
+ return result;
25
+ }
26
+ else {
27
+ storageOperations.push(`get: ${_key}`);
28
+ return storageData.get(_key);
29
+ }
30
+ }),
31
+ put: async (_key, _value) => {
32
+ if (typeof _key === 'string') {
33
+ storageOperations.push(`put: ${_key}`);
34
+ storageData.set(_key, _value);
35
+ }
36
+ else {
37
+ storageOperations.push(`put-batch: ${Object.keys(_key).length} keys`);
38
+ for (const [k, v] of Object.entries(_key)) {
39
+ storageData.set(k, v);
40
+ }
41
+ }
42
+ },
43
+ delete: (async (_key) => {
44
+ if (Array.isArray(_key)) {
45
+ storageOperations.push(`delete-batch: ${_key.length} keys`);
46
+ let count = 0;
47
+ for (const k of _key) {
48
+ if (storageData.delete(k))
49
+ count++;
50
+ }
51
+ return count;
52
+ }
53
+ else {
54
+ storageOperations.push(`delete: ${_key}`);
55
+ return storageData.delete(_key);
56
+ }
57
+ }),
58
+ list: async () => {
59
+ storageOperations.push('list');
60
+ return new Map(storageData);
61
+ },
62
+ sync: async () => {
63
+ storageOperations.push('sync');
64
+ },
65
+ transactionSync: (fn) => {
66
+ storageOperations.push('transactionSync');
67
+ return fn();
68
+ },
69
+ deleteAll: async () => {
70
+ storageOperations.push('deleteAll');
71
+ storageData.clear();
72
+ },
73
+ transaction: async (fn) => {
74
+ storageOperations.push('transaction');
75
+ return await fn({});
76
+ },
77
+ getCurrentBookmark: async () => {
78
+ storageOperations.push('getCurrentBookmark');
79
+ return '';
80
+ },
81
+ getBookmarkForTime: async (_time) => {
82
+ storageOperations.push('getBookmarkForTime');
83
+ return '';
84
+ },
85
+ onNextSessionRestoreBookmark: async (_bookmark) => {
86
+ storageOperations.push('onNextSessionRestoreBookmark');
87
+ return '';
88
+ },
89
+ getAlarm: async () => null,
90
+ setAlarm: async (_timestamp) => { },
91
+ deleteAlarm: async () => { },
92
+ sql: {},
93
+ };
94
+ vfs = new CloudflareWorkerVFS('test-integration-vfs', mockStorage, {});
95
+ await vfs.isReady();
96
+ });
97
+ describe('Storage Integration', () => {
98
+ it('should integrate properly with DurableObjectStorage API', async () => {
99
+ const path = '/test/storage-integration.db';
100
+ const fileId = 1;
101
+ const flags = VFS.SQLITE_OPEN_CREATE | VFS.SQLITE_OPEN_READWRITE;
102
+ const pOutFlags = new DataView(new ArrayBuffer(4));
103
+ storageOperations.length = 0;
104
+ vfs.jOpen(path, fileId, flags, pOutFlags);
105
+ // Write data that will trigger storage operations
106
+ const testData = new TextEncoder().encode('Storage integration test');
107
+ expect(vfs.jWrite(fileId, testData, 0)).toBe(VFS.SQLITE_OK);
108
+ // Sync to ensure storage operations occur
109
+ expect(vfs.jSync(fileId, VFS.SQLITE_SYNC_NORMAL)).toBe(VFS.SQLITE_OK);
110
+ expect(vfs.jClose(fileId)).toBe(VFS.SQLITE_OK);
111
+ // Wait for async operations
112
+ await new Promise((resolve) => setTimeout(resolve, 20));
113
+ // Verify storage operations occurred
114
+ expect(storageOperations.length).toBeGreaterThan(0);
115
+ // Verify metadata and chunk keys exist in storage
116
+ const metadataKey = `file:${path}:meta`;
117
+ const chunkKey = `file:${path}:0`;
118
+ expect(storageData.has(metadataKey)).toBe(true);
119
+ expect(storageData.has(chunkKey)).toBe(true);
120
+ // Verify stored data integrity
121
+ const metadata = storageData.get(metadataKey);
122
+ expect(metadata.size).toBe(testData.length);
123
+ expect(metadata.flags).toBe(flags);
124
+ const chunk = storageData.get(chunkKey);
125
+ expect(chunk.slice(0, testData.length)).toEqual(testData);
126
+ });
127
+ it('should handle storage key collisions gracefully', async () => {
128
+ const paths = ['/test/path:with:colons.db', '/test/path_with_colons.db', '/test/pathwithcolons.db'];
129
+ for (let i = 0; i < paths.length; i++) {
130
+ const fileId = i + 1;
131
+ const flags = VFS.SQLITE_OPEN_CREATE | VFS.SQLITE_OPEN_READWRITE;
132
+ const pOutFlags = new DataView(new ArrayBuffer(4));
133
+ expect(vfs.jOpen(paths[i] ?? '', fileId, flags, pOutFlags)).toBe(VFS.SQLITE_OK);
134
+ const testData = new TextEncoder().encode(`Data for file ${i}`);
135
+ expect(vfs.jWrite(fileId, testData, 0)).toBe(VFS.SQLITE_OK);
136
+ expect(vfs.jClose(fileId)).toBe(VFS.SQLITE_OK);
137
+ }
138
+ // Wait for async operations
139
+ await new Promise((resolve) => setTimeout(resolve, 20));
140
+ // Verify all files have separate storage entries
141
+ for (const path of paths) {
142
+ const metadataKey = `file:${path}:meta`;
143
+ expect(storageData.has(metadataKey)).toBe(true);
144
+ }
145
+ // Verify no data corruption between files
146
+ for (let i = 0; i < paths.length; i++) {
147
+ const fileId = i + 1;
148
+ const flags = VFS.SQLITE_OPEN_READWRITE;
149
+ const pOutFlags = new DataView(new ArrayBuffer(4));
150
+ expect(vfs.jOpen(paths[i] ?? '', fileId, flags, pOutFlags)).toBe(VFS.SQLITE_OK);
151
+ const expectedData = new TextEncoder().encode(`Data for file ${i}`);
152
+ const readData = new Uint8Array(expectedData.length);
153
+ expect(vfs.jRead(fileId, readData, 0)).toBe(VFS.SQLITE_OK);
154
+ expect(readData).toEqual(expectedData);
155
+ expect(vfs.jClose(fileId)).toBe(VFS.SQLITE_OK);
156
+ }
157
+ });
158
+ it('should handle storage size limits correctly', async () => {
159
+ const path = '/test/size-limits.db';
160
+ const fileId = 1;
161
+ const flags = VFS.SQLITE_OPEN_CREATE | VFS.SQLITE_OPEN_READWRITE;
162
+ const pOutFlags = new DataView(new ArrayBuffer(4));
163
+ vfs.jOpen(path, fileId, flags, pOutFlags);
164
+ // Write data that approaches DurableObjectStorage limits (128 KiB per value)
165
+ const chunkSize = 64 * 1024; // VFS chunk size
166
+ const testData = new Uint8Array(chunkSize);
167
+ testData.fill(0xaa);
168
+ expect(vfs.jWrite(fileId, testData, 0)).toBe(VFS.SQLITE_OK);
169
+ expect(vfs.jClose(fileId)).toBe(VFS.SQLITE_OK);
170
+ // Wait for async operations
171
+ await new Promise((resolve) => setTimeout(resolve, 10));
172
+ // Verify chunk was stored correctly
173
+ const chunkKey = `file:${path}:0`;
174
+ expect(storageData.has(chunkKey)).toBe(true);
175
+ const storedChunk = storageData.get(chunkKey);
176
+ expect(storedChunk.length).toBe(chunkSize);
177
+ expect(storedChunk.length).toBeLessThanOrEqual(128 * 1024); // Within DO Storage limit
178
+ });
179
+ it('should handle batch operations efficiently', async () => {
180
+ const path = '/test/batch-operations.db';
181
+ const fileId = 1;
182
+ const flags = VFS.SQLITE_OPEN_CREATE | VFS.SQLITE_OPEN_READWRITE;
183
+ const pOutFlags = new DataView(new ArrayBuffer(4));
184
+ vfs.jOpen(path, fileId, flags, pOutFlags);
185
+ // Write data that spans multiple chunks
186
+ const chunkSize = 64 * 1024;
187
+ const numChunks = 3;
188
+ const totalData = new Uint8Array(chunkSize * numChunks);
189
+ for (let i = 0; i < totalData.length; i++) {
190
+ totalData[i] = (i * 3) % 256;
191
+ }
192
+ storageOperations.length = 0;
193
+ expect(vfs.jWrite(fileId, totalData, 0)).toBe(VFS.SQLITE_OK);
194
+ expect(vfs.jClose(fileId)).toBe(VFS.SQLITE_OK);
195
+ // Wait for async operations
196
+ await new Promise((resolve) => setTimeout(resolve, 20));
197
+ // Verify storage operations were batched efficiently
198
+ expect(storageOperations.length).toBeGreaterThan(0);
199
+ // Verify all chunks were stored
200
+ for (let i = 0; i < numChunks; i++) {
201
+ const chunkKey = `file:${path}:${i}`;
202
+ expect(storageData.has(chunkKey)).toBe(true);
203
+ }
204
+ // Verify data integrity
205
+ vfs.jOpen(path, fileId, flags, pOutFlags);
206
+ const readData = new Uint8Array(totalData.length);
207
+ expect(vfs.jRead(fileId, readData, 0)).toBe(VFS.SQLITE_OK);
208
+ expect(readData).toEqual(totalData);
209
+ expect(vfs.jClose(fileId)).toBe(VFS.SQLITE_OK);
210
+ });
211
+ });
212
+ describe('SQLite Integration', () => {
213
+ it('should handle SQLite database file format correctly', async () => {
214
+ const path = '/test/sqlite-format.db';
215
+ const fileId = 1;
216
+ const flags = VFS.SQLITE_OPEN_MAIN_DB | VFS.SQLITE_OPEN_CREATE | VFS.SQLITE_OPEN_READWRITE;
217
+ const pOutFlags = new DataView(new ArrayBuffer(4));
218
+ expect(vfs.jOpen(path, fileId, flags, pOutFlags)).toBe(VFS.SQLITE_OK);
219
+ // Write SQLite header
220
+ const sqliteHeader = new TextEncoder().encode('SQLite format 3\0');
221
+ expect(vfs.jWrite(fileId, sqliteHeader, 0)).toBe(VFS.SQLITE_OK);
222
+ // Write page size (typical SQLite page size is 4096)
223
+ const pageSize = new DataView(new ArrayBuffer(2));
224
+ pageSize.setUint16(0, 4096, false); // Big-endian as per SQLite format
225
+ const pageSizeBytes = new Uint8Array(pageSize.buffer);
226
+ expect(vfs.jWrite(fileId, pageSizeBytes, 16)).toBe(VFS.SQLITE_OK);
227
+ // Read back and verify header
228
+ const readHeader = new Uint8Array(sqliteHeader.length);
229
+ expect(vfs.jRead(fileId, readHeader, 0)).toBe(VFS.SQLITE_OK);
230
+ expect(readHeader).toEqual(sqliteHeader);
231
+ // Read back and verify page size
232
+ const readPageSize = new Uint8Array(2);
233
+ expect(vfs.jRead(fileId, readPageSize, 16)).toBe(VFS.SQLITE_OK);
234
+ expect(readPageSize).toEqual(pageSizeBytes);
235
+ expect(vfs.jClose(fileId)).toBe(VFS.SQLITE_OK);
236
+ });
237
+ it('should handle SQLite page-based I/O operations', async () => {
238
+ const path = '/test/sqlite-pages.db';
239
+ const fileId = 1;
240
+ const flags = VFS.SQLITE_OPEN_MAIN_DB | VFS.SQLITE_OPEN_CREATE | VFS.SQLITE_OPEN_READWRITE;
241
+ const pOutFlags = new DataView(new ArrayBuffer(4));
242
+ vfs.jOpen(path, fileId, flags, pOutFlags);
243
+ const pageSize = 4096;
244
+ const numPages = 10;
245
+ // Write multiple SQLite pages
246
+ for (let pageNum = 0; pageNum < numPages; pageNum++) {
247
+ const pageData = new Uint8Array(pageSize);
248
+ // Fill page with pattern (page number repeated)
249
+ pageData.fill(pageNum % 256);
250
+ const offset = pageNum * pageSize;
251
+ expect(vfs.jWrite(fileId, pageData, offset)).toBe(VFS.SQLITE_OK);
252
+ }
253
+ // Read back pages in different order
254
+ const readOrder = [3, 1, 7, 0, 9, 2, 5, 8, 4, 6];
255
+ for (const pageNum of readOrder) {
256
+ const readData = new Uint8Array(pageSize);
257
+ const offset = pageNum * pageSize;
258
+ expect(vfs.jRead(fileId, readData, offset)).toBe(VFS.SQLITE_OK);
259
+ // Verify page content
260
+ const expectedValue = pageNum % 256;
261
+ expect(readData.every((byte) => byte === expectedValue)).toBe(true);
262
+ }
263
+ expect(vfs.jClose(fileId)).toBe(VFS.SQLITE_OK);
264
+ });
265
+ it('should handle WAL mode operations', async () => {
266
+ const mainPath = '/test/wal-mode.db';
267
+ const walPath = '/test/wal-mode.db-wal';
268
+ const mainFileId = 1;
269
+ const walFileId = 2;
270
+ const mainFlags = VFS.SQLITE_OPEN_MAIN_DB | VFS.SQLITE_OPEN_CREATE | VFS.SQLITE_OPEN_READWRITE;
271
+ const walFlags = VFS.SQLITE_OPEN_WAL | VFS.SQLITE_OPEN_CREATE | VFS.SQLITE_OPEN_READWRITE;
272
+ const pOutFlags = new DataView(new ArrayBuffer(4));
273
+ // Open main database file
274
+ expect(vfs.jOpen(mainPath, mainFileId, mainFlags, pOutFlags)).toBe(VFS.SQLITE_OK);
275
+ // Write main database content
276
+ const dbContent = new TextEncoder().encode('SQLite format 3\0Main database content');
277
+ expect(vfs.jWrite(mainFileId, dbContent, 0)).toBe(VFS.SQLITE_OK);
278
+ // Open WAL file
279
+ expect(vfs.jOpen(walPath, walFileId, walFlags, pOutFlags)).toBe(VFS.SQLITE_OK);
280
+ // Write WAL header and entries
281
+ const walHeader = new Uint8Array(32);
282
+ walHeader.fill(0x37); // WAL magic number pattern
283
+ expect(vfs.jWrite(walFileId, walHeader, 0)).toBe(VFS.SQLITE_OK);
284
+ // Write WAL frames
285
+ const frameSize = 4096 + 24; // Page size + frame header
286
+ const numFrames = 5;
287
+ for (let frameNum = 0; frameNum < numFrames; frameNum++) {
288
+ const frameData = new Uint8Array(frameSize);
289
+ frameData.fill((frameNum + 1) % 256);
290
+ const offset = 32 + frameNum * frameSize; // After WAL header
291
+ expect(vfs.jWrite(walFileId, frameData, offset)).toBe(VFS.SQLITE_OK);
292
+ }
293
+ // Read back WAL header
294
+ const readWalHeader = new Uint8Array(32);
295
+ expect(vfs.jRead(walFileId, readWalHeader, 0)).toBe(VFS.SQLITE_OK);
296
+ expect(readWalHeader).toEqual(walHeader);
297
+ // Read back WAL frames
298
+ for (let frameNum = 0; frameNum < numFrames; frameNum++) {
299
+ const readFrameData = new Uint8Array(frameSize);
300
+ const offset = 32 + frameNum * frameSize;
301
+ expect(vfs.jRead(walFileId, readFrameData, offset)).toBe(VFS.SQLITE_OK);
302
+ const expectedValue = (frameNum + 1) % 256;
303
+ expect(readFrameData.every((byte) => byte === expectedValue)).toBe(true);
304
+ }
305
+ // Close both files
306
+ expect(vfs.jClose(mainFileId)).toBe(VFS.SQLITE_OK);
307
+ expect(vfs.jClose(walFileId)).toBe(VFS.SQLITE_OK);
308
+ });
309
+ it('should handle journal mode operations', async () => {
310
+ const mainPath = '/test/journal-mode.db';
311
+ const journalPath = '/test/journal-mode.db-journal';
312
+ const mainFileId = 1;
313
+ const journalFileId = 2;
314
+ const mainFlags = VFS.SQLITE_OPEN_MAIN_DB | VFS.SQLITE_OPEN_CREATE | VFS.SQLITE_OPEN_READWRITE;
315
+ const journalFlags = VFS.SQLITE_OPEN_MAIN_JOURNAL | VFS.SQLITE_OPEN_CREATE | VFS.SQLITE_OPEN_READWRITE;
316
+ const pOutFlags = new DataView(new ArrayBuffer(4));
317
+ // Open main database
318
+ expect(vfs.jOpen(mainPath, mainFileId, mainFlags, pOutFlags)).toBe(VFS.SQLITE_OK);
319
+ // Write database pages
320
+ const pageSize = 4096;
321
+ const dbPage = new Uint8Array(pageSize);
322
+ dbPage.fill(0xdb); // DB page pattern
323
+ expect(vfs.jWrite(mainFileId, dbPage, 0)).toBe(VFS.SQLITE_OK);
324
+ // Open journal file
325
+ expect(vfs.jOpen(journalPath, journalFileId, journalFlags, pOutFlags)).toBe(VFS.SQLITE_OK);
326
+ // Write journal header
327
+ const journalHeader = new TextEncoder().encode('Journal header\0\0\0\0');
328
+ expect(vfs.jWrite(journalFileId, journalHeader, 0)).toBe(VFS.SQLITE_OK);
329
+ // Write journal page (copy of original page for rollback)
330
+ const journalPage = new Uint8Array(pageSize);
331
+ journalPage.fill(0x4a); // Journal page pattern
332
+ expect(vfs.jWrite(journalFileId, journalPage, 512)).toBe(VFS.SQLITE_OK);
333
+ // Verify journal operations
334
+ const readJournalHeader = new Uint8Array(journalHeader.length);
335
+ expect(vfs.jRead(journalFileId, readJournalHeader, 0)).toBe(VFS.SQLITE_OK);
336
+ expect(readJournalHeader).toEqual(journalHeader);
337
+ const readJournalPage = new Uint8Array(pageSize);
338
+ expect(vfs.jRead(journalFileId, readJournalPage, 512)).toBe(VFS.SQLITE_OK);
339
+ expect(readJournalPage).toEqual(journalPage);
340
+ // Close files
341
+ expect(vfs.jClose(mainFileId)).toBe(VFS.SQLITE_OK);
342
+ expect(vfs.jClose(journalFileId)).toBe(VFS.SQLITE_OK);
343
+ });
344
+ it('should handle database file locking simulation', async () => {
345
+ const path = '/test/locking-simulation.db';
346
+ const fileId1 = 1;
347
+ const fileId2 = 2;
348
+ const flags = VFS.SQLITE_OPEN_MAIN_DB | VFS.SQLITE_OPEN_CREATE | VFS.SQLITE_OPEN_READWRITE;
349
+ const pOutFlags = new DataView(new ArrayBuffer(4));
350
+ // Open file with first handle
351
+ expect(vfs.jOpen(path, fileId1, flags, pOutFlags)).toBe(VFS.SQLITE_OK);
352
+ // Write data with first handle
353
+ const testData1 = new TextEncoder().encode('First connection data');
354
+ expect(vfs.jWrite(fileId1, testData1, 0)).toBe(VFS.SQLITE_OK);
355
+ // Open same file with second handle (simulates multiple connections)
356
+ expect(vfs.jOpen(path, fileId2, flags, pOutFlags)).toBe(VFS.SQLITE_OK);
357
+ // Read with second handle should see data from first handle
358
+ const readData = new Uint8Array(testData1.length);
359
+ expect(vfs.jRead(fileId2, readData, 0)).toBe(VFS.SQLITE_OK);
360
+ expect(readData).toEqual(testData1);
361
+ // Write with second handle
362
+ const testData2 = new TextEncoder().encode('Second connection data');
363
+ expect(vfs.jWrite(fileId2, testData2, 100)).toBe(VFS.SQLITE_OK);
364
+ // First handle should see data from second handle
365
+ const readData2 = new Uint8Array(testData2.length);
366
+ expect(vfs.jRead(fileId1, readData2, 100)).toBe(VFS.SQLITE_OK);
367
+ expect(readData2).toEqual(testData2);
368
+ // Close both handles
369
+ expect(vfs.jClose(fileId1)).toBe(VFS.SQLITE_OK);
370
+ expect(vfs.jClose(fileId2)).toBe(VFS.SQLITE_OK);
371
+ });
372
+ });
373
+ describe('End-to-End Integration', () => {
374
+ it('should handle complete SQLite workflow', async () => {
375
+ const dbPath = '/test/complete-workflow.db';
376
+ const walPath = '/test/complete-workflow.db-wal';
377
+ const journalPath = '/test/complete-workflow.db-journal';
378
+ const dbFileId = 1;
379
+ const walFileId = 2;
380
+ const journalFileId = 3;
381
+ const pOutFlags = new DataView(new ArrayBuffer(4));
382
+ // 1. Create main database
383
+ const dbFlags = VFS.SQLITE_OPEN_MAIN_DB | VFS.SQLITE_OPEN_CREATE | VFS.SQLITE_OPEN_READWRITE;
384
+ expect(vfs.jOpen(dbPath, dbFileId, dbFlags, pOutFlags)).toBe(VFS.SQLITE_OK);
385
+ // Write SQLite header and initial pages
386
+ const sqliteHeader = new TextEncoder().encode('SQLite format 3\0');
387
+ expect(vfs.jWrite(dbFileId, sqliteHeader, 0)).toBe(VFS.SQLITE_OK);
388
+ const pageSize = 4096;
389
+ const dbPage1 = new Uint8Array(pageSize);
390
+ dbPage1.fill(0x01);
391
+ expect(vfs.jWrite(dbFileId, dbPage1, pageSize)).toBe(VFS.SQLITE_OK);
392
+ // 2. Create journal for transaction
393
+ const journalFlags = VFS.SQLITE_OPEN_MAIN_JOURNAL | VFS.SQLITE_OPEN_CREATE | VFS.SQLITE_OPEN_READWRITE;
394
+ expect(vfs.jOpen(journalPath, journalFileId, journalFlags, pOutFlags)).toBe(VFS.SQLITE_OK);
395
+ // Write journal header and backup page
396
+ const journalHeader = new Uint8Array(512);
397
+ journalHeader.fill(0x30); // Journal header pattern
398
+ expect(vfs.jWrite(journalFileId, journalHeader, 0)).toBe(VFS.SQLITE_OK);
399
+ // 3. Modify database page (transaction)
400
+ const modifiedPage = new Uint8Array(pageSize);
401
+ modifiedPage.fill(0x02); // Modified page pattern
402
+ expect(vfs.jWrite(dbFileId, modifiedPage, pageSize)).toBe(VFS.SQLITE_OK);
403
+ // 4. Sync database (commit transaction)
404
+ expect(vfs.jSync(dbFileId, VFS.SQLITE_SYNC_NORMAL)).toBe(VFS.SQLITE_OK);
405
+ // 5. Delete journal (transaction committed)
406
+ expect(vfs.jClose(journalFileId)).toBe(VFS.SQLITE_OK);
407
+ expect(vfs.jDelete(journalPath, 0)).toBe(VFS.SQLITE_OK);
408
+ // 6. Switch to WAL mode
409
+ const walFlags = VFS.SQLITE_OPEN_WAL | VFS.SQLITE_OPEN_CREATE | VFS.SQLITE_OPEN_READWRITE;
410
+ expect(vfs.jOpen(walPath, walFileId, walFlags, pOutFlags)).toBe(VFS.SQLITE_OK);
411
+ // Write WAL header
412
+ const walHeader = new Uint8Array(32);
413
+ walHeader.fill(0x37); // WAL header pattern
414
+ expect(vfs.jWrite(walFileId, walHeader, 0)).toBe(VFS.SQLITE_OK);
415
+ // Write WAL frame
416
+ const walFrame = new Uint8Array(pageSize + 24); // Page + frame header
417
+ walFrame.fill(0x03); // WAL frame pattern
418
+ expect(vfs.jWrite(walFileId, walFrame, 32)).toBe(VFS.SQLITE_OK);
419
+ // 7. Verify all files are accessible and contain expected data
420
+ // Database file
421
+ const readHeader = new Uint8Array(sqliteHeader.length);
422
+ expect(vfs.jRead(dbFileId, readHeader, 0)).toBe(VFS.SQLITE_OK);
423
+ expect(readHeader).toEqual(sqliteHeader);
424
+ const readDbPage = new Uint8Array(pageSize);
425
+ expect(vfs.jRead(dbFileId, readDbPage, pageSize)).toBe(VFS.SQLITE_OK);
426
+ expect(readDbPage).toEqual(modifiedPage);
427
+ // WAL file
428
+ const readWalHeader = new Uint8Array(32);
429
+ expect(vfs.jRead(walFileId, readWalHeader, 0)).toBe(VFS.SQLITE_OK);
430
+ expect(readWalHeader).toEqual(walHeader);
431
+ // 8. Close all files
432
+ expect(vfs.jClose(dbFileId)).toBe(VFS.SQLITE_OK);
433
+ expect(vfs.jClose(walFileId)).toBe(VFS.SQLITE_OK);
434
+ // 9. Verify persistence across VFS sessions
435
+ await new Promise((resolve) => setTimeout(resolve, 20));
436
+ expect(vfs.jOpen(dbPath, dbFileId, dbFlags, pOutFlags)).toBe(VFS.SQLITE_OK);
437
+ const persistentReadHeader = new Uint8Array(sqliteHeader.length);
438
+ expect(vfs.jRead(dbFileId, persistentReadHeader, 0)).toBe(VFS.SQLITE_OK);
439
+ expect(persistentReadHeader).toEqual(sqliteHeader);
440
+ expect(vfs.jClose(dbFileId)).toBe(VFS.SQLITE_OK);
441
+ });
442
+ });
443
+ });
444
+ //# sourceMappingURL=cloudflare-worker-vfs-integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloudflare-worker-vfs-integration.test.js","sourceRoot":"","sources":["../../../../src/cf/test/async-storage/cloudflare-worker-vfs-integration.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cloudflare-worker-vfs-reliability.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloudflare-worker-vfs-reliability.test.d.ts","sourceRoot":"","sources":["../../../../src/cf/test/async-storage/cloudflare-worker-vfs-reliability.test.ts"],"names":[],"mappings":""}