@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
package/dist/cf/mod.js ADDED
@@ -0,0 +1,74 @@
1
+ // import path from 'node:path'
2
+ import { UnexpectedError } from '@livestore/common';
3
+ import { Effect } from '@livestore/utils/effect';
4
+ import { makeInMemoryDb } from "../in-memory-vfs.js";
5
+ import { makeSqliteDb } from "../make-sqlite-db.js";
6
+ import { CloudflareSqlVFS } from "./CloudflareSqlVFS.js";
7
+ export { BlockManager } from "./BlockManager.js";
8
+ export { CloudflareSqlVFS } from "./CloudflareSqlVFS.js";
9
+ export { CloudflareWorkerVFS } from "./CloudflareWorkerVFS.js";
10
+ export const sqliteDbFactory = ({ sqlite3 }) => (input) => Effect.gen(function* () {
11
+ if (input._tag === 'in-memory') {
12
+ const { dbPointer, vfs } = makeInMemoryDb(sqlite3);
13
+ return makeSqliteDb({
14
+ sqlite3,
15
+ metadata: {
16
+ _tag: 'in-memory',
17
+ vfs,
18
+ dbPointer,
19
+ persistenceInfo: { fileName: ':memory:' },
20
+ deleteDb: () => { },
21
+ configureDb: input.configureDb ?? (() => { }),
22
+ },
23
+ });
24
+ }
25
+ const { dbPointer, vfs } = yield* makeCloudflareFsDb({
26
+ sqlite3,
27
+ fileName: input.fileName,
28
+ // directory: input.directory,
29
+ storage: input.storage,
30
+ });
31
+ // const filePath = path.join(input.directory, input.fileName)
32
+ // const filePath = `${input.directory}/${input.fileName}`
33
+ return makeSqliteDb({
34
+ sqlite3,
35
+ metadata: {
36
+ _tag: 'storage',
37
+ vfs,
38
+ dbPointer,
39
+ persistenceInfo: { fileName: input.fileName },
40
+ // deleteDb: () => vfs.deleteDb(filePath),
41
+ // TODO: implement deleteDb
42
+ deleteDb: () => { },
43
+ configureDb: input.configureDb ?? (() => { }),
44
+ },
45
+ });
46
+ });
47
+ const makeCloudflareFsDb = ({ sqlite3, fileName,
48
+ // directory,
49
+ storage, }) => Effect.gen(function* () {
50
+ // NOTE to keep the filePath short, we use the directory name in the vfs name
51
+ // If this is becoming a problem, we can use a hashed version of the directory name
52
+ const vfsName = `cf-do-sqlite-${fileName}`;
53
+ if (sqlite3.vfs_registered.has(vfsName) === false) {
54
+ // TODO refactor with Effect FileSystem instead of using `node:fs` directly inside of CloudflareWorkerVFS
55
+ // const nodeFsVfs = new CloudflareWorkerVFS(vfsName, storage, (sqlite3 as any).module)
56
+ const nodeFsVfs = new CloudflareSqlVFS(vfsName, storage.sql, sqlite3.module);
57
+ // Initialize the VFS schema before registering it
58
+ const isReady = yield* Effect.promise(() => nodeFsVfs.isReady());
59
+ if (!isReady) {
60
+ throw new Error(`Failed to initialize CloudflareSqlVFS for ${vfsName}`);
61
+ }
62
+ // @ts-expect-error TODO fix types
63
+ sqlite3.vfs_register(nodeFsVfs, false);
64
+ }
65
+ // yield* fs.makeDirectory(directory, { recursive: true })
66
+ const FILE_NAME_MAX_LENGTH = 56;
67
+ if (fileName.length > FILE_NAME_MAX_LENGTH) {
68
+ throw new Error(`File name ${fileName} is too long. Maximum length is ${FILE_NAME_MAX_LENGTH} characters.`);
69
+ }
70
+ // NOTE SQLite will return a "disk I/O error" if the file path is too long.
71
+ const dbPointer = sqlite3.open_v2Sync(fileName, undefined, vfsName);
72
+ return { dbPointer, vfs: {} };
73
+ }).pipe(UnexpectedError.mapToUnexpectedError);
74
+ //# sourceMappingURL=mod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mod.js","sourceRoot":"","sources":["../../src/cf/mod.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cloudflare-worker-vfs-advanced.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloudflare-worker-vfs-advanced.test.d.ts","sourceRoot":"","sources":["../../../../src/cf/test/async-storage/cloudflare-worker-vfs-advanced.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,314 @@
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 - Advanced Features', () => {
6
+ let vfs;
7
+ let mockStorage;
8
+ let storageData;
9
+ beforeEach(async () => {
10
+ storageData = new Map();
11
+ mockStorage = {
12
+ get: (async (_key) => {
13
+ if (Array.isArray(_key)) {
14
+ return new Map();
15
+ }
16
+ return storageData.get(_key);
17
+ }),
18
+ put: async (_key, _value) => {
19
+ if (typeof _key === 'string') {
20
+ storageData.set(_key, _value);
21
+ }
22
+ else {
23
+ for (const [k, v] of Object.entries(_key)) {
24
+ storageData.set(k, v);
25
+ }
26
+ }
27
+ },
28
+ delete: (async (_key) => {
29
+ if (Array.isArray(_key)) {
30
+ let count = 0;
31
+ for (const k of _key) {
32
+ if (storageData.delete(k))
33
+ count++;
34
+ }
35
+ return count;
36
+ }
37
+ else {
38
+ return storageData.delete(_key);
39
+ }
40
+ }),
41
+ list: async () => new Map(storageData),
42
+ sync: async () => { },
43
+ transactionSync: (fn) => fn(),
44
+ deleteAll: async () => {
45
+ storageData.clear();
46
+ },
47
+ transaction: async (fn) => fn({}),
48
+ getCurrentBookmark: async () => '',
49
+ getBookmarkForTime: async (_time) => '',
50
+ onNextSessionRestoreBookmark: async (_bookmark) => '',
51
+ getAlarm: async () => null,
52
+ setAlarm: async (_timestamp) => { },
53
+ deleteAlarm: async () => { },
54
+ sql: {},
55
+ };
56
+ vfs = new CloudflareWorkerVFS('test-advanced-vfs', mockStorage, {});
57
+ await vfs.isReady();
58
+ });
59
+ describe('Large File Chunking', () => {
60
+ it('should handle large files with proper chunking', async () => {
61
+ const path = '/test/large-file.db';
62
+ const fileId = 1;
63
+ const flags = VFS.SQLITE_OPEN_CREATE | VFS.SQLITE_OPEN_READWRITE;
64
+ const pOutFlags = new DataView(new ArrayBuffer(4));
65
+ vfs.jOpen(path, fileId, flags, pOutFlags);
66
+ // Write 5 chunks worth of data
67
+ const chunkSize = 64 * 1024;
68
+ const numChunks = 5;
69
+ const totalSize = chunkSize * numChunks;
70
+ const largeData = new Uint8Array(totalSize);
71
+ // Fill with pattern for verification
72
+ for (let i = 0; i < totalSize; i++) {
73
+ largeData[i] = (i * 7) % 256;
74
+ }
75
+ expect(vfs.jWrite(fileId, largeData, 0)).toBe(VFS.SQLITE_OK);
76
+ // Verify file size
77
+ const pSize64 = new DataView(new ArrayBuffer(8));
78
+ expect(vfs.jFileSize(fileId, pSize64)).toBe(VFS.SQLITE_OK);
79
+ expect(pSize64.getBigInt64(0, true)).toBe(BigInt(totalSize));
80
+ // Read back in chunks to verify chunking works correctly
81
+ for (let chunkIdx = 0; chunkIdx < numChunks; chunkIdx++) {
82
+ const chunkData = new Uint8Array(chunkSize);
83
+ const offset = chunkIdx * chunkSize;
84
+ expect(vfs.jRead(fileId, chunkData, offset)).toBe(VFS.SQLITE_OK);
85
+ expect(chunkData).toEqual(largeData.slice(offset, offset + chunkSize));
86
+ }
87
+ expect(vfs.jClose(fileId)).toBe(VFS.SQLITE_OK);
88
+ });
89
+ it('should handle cross-chunk boundary operations', async () => {
90
+ const path = '/test/cross-chunk.db';
91
+ const fileId = 1;
92
+ const flags = VFS.SQLITE_OPEN_CREATE | VFS.SQLITE_OPEN_READWRITE;
93
+ const pOutFlags = new DataView(new ArrayBuffer(4));
94
+ vfs.jOpen(path, fileId, flags, pOutFlags);
95
+ const chunkSize = 64 * 1024;
96
+ // Write data spanning chunk boundaries
97
+ const spanData = new Uint8Array(chunkSize + 1000);
98
+ spanData.fill(0xaa);
99
+ const spanOffset = chunkSize - 500;
100
+ expect(vfs.jWrite(fileId, spanData, spanOffset)).toBe(VFS.SQLITE_OK);
101
+ // Read back cross-boundary data
102
+ const readData = new Uint8Array(spanData.length);
103
+ expect(vfs.jRead(fileId, readData, spanOffset)).toBe(VFS.SQLITE_OK);
104
+ expect(readData).toEqual(spanData);
105
+ expect(vfs.jClose(fileId)).toBe(VFS.SQLITE_OK);
106
+ });
107
+ });
108
+ describe('Cache Management', () => {
109
+ it('should handle cache operations correctly', async () => {
110
+ const path = '/test/cache-test.db';
111
+ const fileId = 1;
112
+ const flags = VFS.SQLITE_OPEN_CREATE | VFS.SQLITE_OPEN_READWRITE;
113
+ const pOutFlags = new DataView(new ArrayBuffer(4));
114
+ vfs.jOpen(path, fileId, flags, pOutFlags);
115
+ // Write data to populate cache
116
+ const testData = new TextEncoder().encode('Cache test data');
117
+ expect(vfs.jWrite(fileId, testData, 0)).toBe(VFS.SQLITE_OK);
118
+ // Multiple reads should use cache
119
+ for (let i = 0; i < 5; i++) {
120
+ const readData = new Uint8Array(testData.length);
121
+ expect(vfs.jRead(fileId, readData, 0)).toBe(VFS.SQLITE_OK);
122
+ expect(readData).toEqual(testData);
123
+ }
124
+ // Check cache statistics
125
+ const stats = vfs.getStats();
126
+ expect(stats.cachedChunks).toBeGreaterThan(0);
127
+ expect(stats.chunkSize).toBe(64 * 1024);
128
+ expect(vfs.jClose(fileId)).toBe(VFS.SQLITE_OK);
129
+ });
130
+ it('should handle large files that exceed cache capacity', async () => {
131
+ const path = '/test/cache-overflow.db';
132
+ const fileId = 1;
133
+ const flags = VFS.SQLITE_OPEN_CREATE | VFS.SQLITE_OPEN_READWRITE;
134
+ const pOutFlags = new DataView(new ArrayBuffer(4));
135
+ vfs.jOpen(path, fileId, flags, pOutFlags);
136
+ // Write many chunks to potentially exceed cache
137
+ const chunkSize = 64 * 1024;
138
+ const numChunks = 20; // Likely to exceed typical cache size
139
+ for (let i = 0; i < numChunks; i++) {
140
+ const chunkData = new Uint8Array(chunkSize);
141
+ chunkData.fill(i % 256);
142
+ const offset = i * chunkSize;
143
+ expect(vfs.jWrite(fileId, chunkData, offset)).toBe(VFS.SQLITE_OK);
144
+ }
145
+ // Verify all chunks can still be read correctly
146
+ for (let i = 0; i < numChunks; i++) {
147
+ const readData = new Uint8Array(chunkSize);
148
+ const offset = i * chunkSize;
149
+ const readResult = vfs.jRead(fileId, readData, offset);
150
+ if (readResult === VFS.SQLITE_OK) {
151
+ const expectedData = new Uint8Array(chunkSize);
152
+ expectedData.fill(i % 256);
153
+ expect(readData).toEqual(expectedData);
154
+ }
155
+ else {
156
+ // Cache miss is acceptable for this test - we're testing cache pressure
157
+ expect(readResult).toBe(VFS.SQLITE_IOERR_SHORT_READ);
158
+ }
159
+ }
160
+ expect(vfs.jClose(fileId)).toBe(VFS.SQLITE_OK);
161
+ });
162
+ });
163
+ describe('SQLite File Types', () => {
164
+ it('should handle main database files', async () => {
165
+ const path = '/test/main.db';
166
+ const fileId = 1;
167
+ const flags = VFS.SQLITE_OPEN_MAIN_DB | VFS.SQLITE_OPEN_CREATE | VFS.SQLITE_OPEN_READWRITE;
168
+ const pOutFlags = new DataView(new ArrayBuffer(4));
169
+ expect(vfs.jOpen(path, fileId, flags, pOutFlags)).toBe(VFS.SQLITE_OK);
170
+ expect(pOutFlags.getUint32(0, true)).toBe(flags);
171
+ // Write typical SQLite header
172
+ const header = new TextEncoder().encode('SQLite format 3\0');
173
+ expect(vfs.jWrite(fileId, header, 0)).toBe(VFS.SQLITE_OK);
174
+ // Read back header
175
+ const readHeader = new Uint8Array(header.length);
176
+ expect(vfs.jRead(fileId, readHeader, 0)).toBe(VFS.SQLITE_OK);
177
+ expect(readHeader).toEqual(header);
178
+ expect(vfs.jClose(fileId)).toBe(VFS.SQLITE_OK);
179
+ });
180
+ it('should handle WAL files', async () => {
181
+ const path = '/test/main.db-wal';
182
+ const fileId = 2;
183
+ const flags = VFS.SQLITE_OPEN_WAL | VFS.SQLITE_OPEN_CREATE | VFS.SQLITE_OPEN_READWRITE;
184
+ const pOutFlags = new DataView(new ArrayBuffer(4));
185
+ expect(vfs.jOpen(path, fileId, flags, pOutFlags)).toBe(VFS.SQLITE_OK);
186
+ // Write WAL data
187
+ const walData = new Uint8Array(1000);
188
+ walData.fill(0xee);
189
+ expect(vfs.jWrite(fileId, walData, 0)).toBe(VFS.SQLITE_OK);
190
+ // Verify WAL data
191
+ const readWalData = new Uint8Array(walData.length);
192
+ expect(vfs.jRead(fileId, readWalData, 0)).toBe(VFS.SQLITE_OK);
193
+ expect(readWalData).toEqual(walData);
194
+ expect(vfs.jClose(fileId)).toBe(VFS.SQLITE_OK);
195
+ });
196
+ it('should handle journal files', async () => {
197
+ const path = '/test/main.db-journal';
198
+ const fileId = 3;
199
+ const flags = VFS.SQLITE_OPEN_MAIN_JOURNAL | VFS.SQLITE_OPEN_CREATE | VFS.SQLITE_OPEN_READWRITE;
200
+ const pOutFlags = new DataView(new ArrayBuffer(4));
201
+ expect(vfs.jOpen(path, fileId, flags, pOutFlags)).toBe(VFS.SQLITE_OK);
202
+ // Write journal data
203
+ const journalData = new Uint8Array(500);
204
+ journalData.fill(0xff);
205
+ expect(vfs.jWrite(fileId, journalData, 0)).toBe(VFS.SQLITE_OK);
206
+ // Verify journal data
207
+ const readJournalData = new Uint8Array(journalData.length);
208
+ expect(vfs.jRead(fileId, readJournalData, 0)).toBe(VFS.SQLITE_OK);
209
+ expect(readJournalData).toEqual(journalData);
210
+ expect(vfs.jClose(fileId)).toBe(VFS.SQLITE_OK);
211
+ });
212
+ it('should handle temporary files', async () => {
213
+ const path = '/test/temp.db';
214
+ const fileId = 4;
215
+ const flags = VFS.SQLITE_OPEN_TEMP_DB | VFS.SQLITE_OPEN_CREATE | VFS.SQLITE_OPEN_READWRITE;
216
+ const pOutFlags = new DataView(new ArrayBuffer(4));
217
+ expect(vfs.jOpen(path, fileId, flags, pOutFlags)).toBe(VFS.SQLITE_OK);
218
+ // Write temporary data
219
+ const tempData = new TextEncoder().encode('Temporary database content');
220
+ expect(vfs.jWrite(fileId, tempData, 0)).toBe(VFS.SQLITE_OK);
221
+ // Read temporary data
222
+ const readTempData = new Uint8Array(tempData.length);
223
+ expect(vfs.jRead(fileId, readTempData, 0)).toBe(VFS.SQLITE_OK);
224
+ expect(readTempData).toEqual(tempData);
225
+ expect(vfs.jClose(fileId)).toBe(VFS.SQLITE_OK);
226
+ });
227
+ });
228
+ describe('Advanced Operations', () => {
229
+ it('should handle multiple files with different types simultaneously', async () => {
230
+ const files = [
231
+ {
232
+ path: '/test/multi-main.db',
233
+ id: 1,
234
+ flags: VFS.SQLITE_OPEN_MAIN_DB | VFS.SQLITE_OPEN_CREATE | VFS.SQLITE_OPEN_READWRITE,
235
+ },
236
+ {
237
+ path: '/test/multi-main.db-wal',
238
+ id: 2,
239
+ flags: VFS.SQLITE_OPEN_WAL | VFS.SQLITE_OPEN_CREATE | VFS.SQLITE_OPEN_READWRITE,
240
+ },
241
+ {
242
+ path: '/test/multi-main.db-journal',
243
+ id: 3,
244
+ flags: VFS.SQLITE_OPEN_MAIN_JOURNAL | VFS.SQLITE_OPEN_CREATE | VFS.SQLITE_OPEN_READWRITE,
245
+ },
246
+ ];
247
+ const pOutFlags = new DataView(new ArrayBuffer(4));
248
+ // Open all files
249
+ for (const file of files) {
250
+ expect(vfs.jOpen(file.path, file.id, file.flags, pOutFlags)).toBe(VFS.SQLITE_OK);
251
+ }
252
+ // Write different data to each file
253
+ for (let i = 0; i < files.length; i++) {
254
+ const data = new TextEncoder().encode(`File ${i} data`);
255
+ expect(vfs.jWrite(files[i]?.id ?? 0, data, 0)).toBe(VFS.SQLITE_OK);
256
+ }
257
+ // Verify each file has correct data
258
+ for (let i = 0; i < files.length; i++) {
259
+ const expected = new TextEncoder().encode(`File ${i} data`);
260
+ const actual = new Uint8Array(expected.length);
261
+ expect(vfs.jRead(files[i]?.id ?? 0, actual, 0)).toBe(VFS.SQLITE_OK);
262
+ expect(actual).toEqual(expected);
263
+ }
264
+ // Close all files
265
+ for (const file of files) {
266
+ expect(vfs.jClose(file.id)).toBe(VFS.SQLITE_OK);
267
+ }
268
+ });
269
+ it('should handle file truncation with chunking', async () => {
270
+ const path = '/test/truncate-chunks.db';
271
+ const fileId = 1;
272
+ const flags = VFS.SQLITE_OPEN_CREATE | VFS.SQLITE_OPEN_READWRITE;
273
+ const pOutFlags = new DataView(new ArrayBuffer(4));
274
+ vfs.jOpen(path, fileId, flags, pOutFlags);
275
+ const chunkSize = 64 * 1024;
276
+ // Write data spanning 3 chunks
277
+ const largeData = new Uint8Array(chunkSize * 3);
278
+ largeData.fill(0xdd);
279
+ expect(vfs.jWrite(fileId, largeData, 0)).toBe(VFS.SQLITE_OK);
280
+ // Truncate to 1.5 chunks
281
+ const truncateSize = chunkSize + chunkSize / 2;
282
+ expect(vfs.jTruncate(fileId, truncateSize)).toBe(VFS.SQLITE_OK);
283
+ // Verify new size
284
+ const pSize64 = new DataView(new ArrayBuffer(8));
285
+ expect(vfs.jFileSize(fileId, pSize64)).toBe(VFS.SQLITE_OK);
286
+ expect(pSize64.getBigInt64(0, true)).toBe(BigInt(truncateSize));
287
+ // Verify data integrity after truncation
288
+ const readData = new Uint8Array(truncateSize);
289
+ expect(vfs.jRead(fileId, readData, 0)).toBe(VFS.SQLITE_OK);
290
+ expect(readData).toEqual(largeData.slice(0, truncateSize));
291
+ expect(vfs.jClose(fileId)).toBe(VFS.SQLITE_OK);
292
+ });
293
+ it('should handle sync operations with proper flush behavior', async () => {
294
+ const path = '/test/sync-flush.db';
295
+ const fileId = 1;
296
+ const flags = VFS.SQLITE_OPEN_CREATE | VFS.SQLITE_OPEN_READWRITE;
297
+ const pOutFlags = new DataView(new ArrayBuffer(4));
298
+ vfs.jOpen(path, fileId, flags, pOutFlags);
299
+ // Write data
300
+ const testData = new TextEncoder().encode('Sync test data');
301
+ expect(vfs.jWrite(fileId, testData, 0)).toBe(VFS.SQLITE_OK);
302
+ // Test different sync modes
303
+ expect(vfs.jSync(fileId, VFS.SQLITE_SYNC_NORMAL)).toBe(VFS.SQLITE_OK);
304
+ expect(vfs.jSync(fileId, VFS.SQLITE_SYNC_FULL)).toBe(VFS.SQLITE_OK);
305
+ expect(vfs.jSync(fileId, VFS.SQLITE_SYNC_DATAONLY)).toBe(VFS.SQLITE_OK);
306
+ // Verify data is still accessible after sync
307
+ const readData = new Uint8Array(testData.length);
308
+ expect(vfs.jRead(fileId, readData, 0)).toBe(VFS.SQLITE_OK);
309
+ expect(readData).toEqual(testData);
310
+ expect(vfs.jClose(fileId)).toBe(VFS.SQLITE_OK);
311
+ });
312
+ });
313
+ });
314
+ //# sourceMappingURL=cloudflare-worker-vfs-advanced.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloudflare-worker-vfs-advanced.test.js","sourceRoot":"","sources":["../../../../src/cf/test/async-storage/cloudflare-worker-vfs-advanced.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cloudflare-worker-vfs-core.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloudflare-worker-vfs-core.test.d.ts","sourceRoot":"","sources":["../../../../src/cf/test/async-storage/cloudflare-worker-vfs-core.test.ts"],"names":[],"mappings":""}