@livestore/sqlite-wasm 0.4.0-dev.2 → 0.4.0-dev.20

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 (97) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/FacadeVFS.d.ts.map +1 -1
  3. package/dist/FacadeVFS.js +4 -0
  4. package/dist/FacadeVFS.js.map +1 -1
  5. package/dist/browser/mod.d.ts +15 -7
  6. package/dist/browser/mod.d.ts.map +1 -1
  7. package/dist/browser/mod.js +49 -43
  8. package/dist/browser/mod.js.map +1 -1
  9. package/dist/browser/opfs/AccessHandlePoolVFS.d.ts +40 -17
  10. package/dist/browser/opfs/AccessHandlePoolVFS.d.ts.map +1 -1
  11. package/dist/browser/opfs/AccessHandlePoolVFS.js +211 -143
  12. package/dist/browser/opfs/AccessHandlePoolVFS.js.map +1 -1
  13. package/dist/browser/opfs/index.d.ts +3 -2
  14. package/dist/browser/opfs/index.d.ts.map +1 -1
  15. package/dist/browser/opfs/index.js +1 -1
  16. package/dist/browser/opfs/index.js.map +1 -1
  17. package/dist/browser/opfs/opfs-sah-pool.d.ts +1 -1
  18. package/dist/browser/opfs/opfs-sah-pool.d.ts.map +1 -1
  19. package/dist/browser/opfs/opfs-sah-pool.js +1 -1
  20. package/dist/browser/opfs/opfs-sah-pool.js.map +1 -1
  21. package/dist/cf/BlockManager.d.ts +61 -0
  22. package/dist/cf/BlockManager.d.ts.map +1 -0
  23. package/dist/cf/BlockManager.js +157 -0
  24. package/dist/cf/BlockManager.js.map +1 -0
  25. package/dist/cf/CloudflareSqlVFS.d.ts +51 -0
  26. package/dist/cf/CloudflareSqlVFS.d.ts.map +1 -0
  27. package/dist/cf/CloudflareSqlVFS.js +351 -0
  28. package/dist/cf/CloudflareSqlVFS.js.map +1 -0
  29. package/dist/cf/CloudflareWorkerVFS.d.ts +72 -0
  30. package/dist/cf/CloudflareWorkerVFS.d.ts.map +1 -0
  31. package/dist/cf/CloudflareWorkerVFS.js +552 -0
  32. package/dist/cf/CloudflareWorkerVFS.js.map +1 -0
  33. package/dist/cf/mod.d.ts +43 -0
  34. package/dist/cf/mod.d.ts.map +1 -0
  35. package/dist/cf/mod.js +74 -0
  36. package/dist/cf/mod.js.map +1 -0
  37. package/dist/cf/test/async-storage/cloudflare-worker-vfs-advanced.test.d.ts +2 -0
  38. package/dist/cf/test/async-storage/cloudflare-worker-vfs-advanced.test.d.ts.map +1 -0
  39. package/dist/cf/test/async-storage/cloudflare-worker-vfs-advanced.test.js +314 -0
  40. package/dist/cf/test/async-storage/cloudflare-worker-vfs-advanced.test.js.map +1 -0
  41. package/dist/cf/test/async-storage/cloudflare-worker-vfs-core.test.d.ts +2 -0
  42. package/dist/cf/test/async-storage/cloudflare-worker-vfs-core.test.d.ts.map +1 -0
  43. package/dist/cf/test/async-storage/cloudflare-worker-vfs-core.test.js +266 -0
  44. package/dist/cf/test/async-storage/cloudflare-worker-vfs-core.test.js.map +1 -0
  45. package/dist/cf/test/async-storage/cloudflare-worker-vfs-integration.test.d.ts +2 -0
  46. package/dist/cf/test/async-storage/cloudflare-worker-vfs-integration.test.d.ts.map +1 -0
  47. package/dist/cf/test/async-storage/cloudflare-worker-vfs-integration.test.js +462 -0
  48. package/dist/cf/test/async-storage/cloudflare-worker-vfs-integration.test.js.map +1 -0
  49. package/dist/cf/test/async-storage/cloudflare-worker-vfs-reliability.test.d.ts +2 -0
  50. package/dist/cf/test/async-storage/cloudflare-worker-vfs-reliability.test.d.ts.map +1 -0
  51. package/dist/cf/test/async-storage/cloudflare-worker-vfs-reliability.test.js +334 -0
  52. package/dist/cf/test/async-storage/cloudflare-worker-vfs-reliability.test.js.map +1 -0
  53. package/dist/cf/test/sql/cloudflare-sql-vfs-core.test.d.ts +2 -0
  54. package/dist/cf/test/sql/cloudflare-sql-vfs-core.test.d.ts.map +1 -0
  55. package/dist/cf/test/sql/cloudflare-sql-vfs-core.test.js +354 -0
  56. package/dist/cf/test/sql/cloudflare-sql-vfs-core.test.js.map +1 -0
  57. package/dist/load-wasm/mod.node.d.ts.map +1 -1
  58. package/dist/load-wasm/mod.node.js +1 -2
  59. package/dist/load-wasm/mod.node.js.map +1 -1
  60. package/dist/load-wasm/mod.workerd.d.ts +2 -0
  61. package/dist/load-wasm/mod.workerd.d.ts.map +1 -0
  62. package/dist/load-wasm/mod.workerd.js +28 -0
  63. package/dist/load-wasm/mod.workerd.js.map +1 -0
  64. package/dist/make-sqlite-db.d.ts +1 -0
  65. package/dist/make-sqlite-db.d.ts.map +1 -1
  66. package/dist/make-sqlite-db.js +29 -8
  67. package/dist/make-sqlite-db.js.map +1 -1
  68. package/dist/node/NodeFS.d.ts +1 -2
  69. package/dist/node/NodeFS.d.ts.map +1 -1
  70. package/dist/node/NodeFS.js +1 -6
  71. package/dist/node/NodeFS.js.map +1 -1
  72. package/dist/node/mod.d.ts.map +1 -1
  73. package/dist/node/mod.js +5 -10
  74. package/dist/node/mod.js.map +1 -1
  75. package/package.json +21 -8
  76. package/src/FacadeVFS.ts +5 -0
  77. package/src/browser/mod.ts +39 -13
  78. package/src/browser/opfs/AccessHandlePoolVFS.ts +387 -225
  79. package/src/browser/opfs/index.ts +4 -3
  80. package/src/browser/opfs/opfs-sah-pool.ts +1 -1
  81. package/src/cf/BlockManager.ts +225 -0
  82. package/src/cf/CloudflareSqlVFS.ts +450 -0
  83. package/src/cf/CloudflareWorkerVFS.ts +664 -0
  84. package/src/cf/README.md +60 -0
  85. package/src/cf/mod.ts +143 -0
  86. package/src/cf/test/README.md +224 -0
  87. package/src/cf/test/async-storage/cloudflare-worker-vfs-advanced.test.ts +389 -0
  88. package/src/cf/test/async-storage/cloudflare-worker-vfs-core.test.ts +322 -0
  89. package/src/cf/test/async-storage/cloudflare-worker-vfs-integration.test.ts +585 -0
  90. package/src/cf/test/async-storage/cloudflare-worker-vfs-reliability.test.ts +403 -0
  91. package/src/cf/test/sql/cloudflare-sql-vfs-core.test.ts +433 -0
  92. package/src/load-wasm/mod.node.ts +1 -2
  93. package/src/load-wasm/mod.workerd.ts +28 -0
  94. package/src/make-sqlite-db.ts +39 -8
  95. package/src/node/NodeFS.ts +1 -9
  96. package/src/node/mod.ts +5 -12
  97. package/src/ambient.d.ts +0 -18
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/browser/opfs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AAGhD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,MAAM,SAAS,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;AAC9D,MAAM,UAAU,GAAG,IAAI,GAAG,EAA+B,CAAA;AAEzD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EACzB,OAAO,EACP,SAAS,EACT,QAAQ,GAKT,EAAE,EAAE,CACH,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,kDAAkD;IAClD,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,eAAe,EAAE,GAAG,CAAC,CAAA;IAC3D,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAA;IAC/D,MAAM,OAAO,GAAG,OAAO,WAAW,EAAE,CAAA;IAEpC,IAAI,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,EAAE,CAAC;QAClD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,EAAG,OAAe,CAAC,MAAM,CAAC,CAAC,CAAA;QAEhH,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QAChC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;IAC9B,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;IACnE,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAE,CAAA;IAEpC,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CAAA;AAC3B,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/browser/opfs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAc,MAAM,yBAAyB,CAAA;AAI5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,MAAM,SAAS,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;AAC9D,MAAM,UAAU,GAAG,IAAI,GAAG,EAA+B,CAAA;AAEzD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EACzB,OAAO,EACP,SAAS,EACT,QAAQ,GAKT,EAAkG,EAAE,CACnG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,kDAAkD;IAClD,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,eAAe,EAAE,GAAG,CAAC,CAAA;IAC3D,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,CAAA;IAC/D,MAAM,OAAO,GAAG,OAAO,WAAW,EAAE,CAAA;IAEpC,IAAI,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,EAAE,CAAC;QAClD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,EAAG,OAAe,CAAC,MAAM,CAAC,CAAA;QAE1F,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QAChC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;IAC9B,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;IACnE,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAE,CAAA;IAEpC,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CAAA;AAC3B,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA"}
@@ -1,3 +1,3 @@
1
1
  export declare const HEADER_OFFSET_DATA = 4096;
2
- export declare const decodeSAHPoolFilename: (file: File) => Promise<string>;
2
+ export declare const decodeAccessHandlePoolFilename: (file: File) => Promise<string>;
3
3
  //# sourceMappingURL=opfs-sah-pool.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"opfs-sah-pool.d.ts","sourceRoot":"","sources":["../../../src/browser/opfs/opfs-sah-pool.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,kBAAkB,OAAc,CAAA;AAO7C,eAAO,MAAM,qBAAqB,GAAU,MAAM,IAAI,KAAG,OAAO,CAAC,MAAM,CA+BtE,CAAA"}
1
+ {"version":3,"file":"opfs-sah-pool.d.ts","sourceRoot":"","sources":["../../../src/browser/opfs/opfs-sah-pool.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,kBAAkB,OAAc,CAAA;AAO7C,eAAO,MAAM,8BAA8B,GAAU,MAAM,IAAI,KAAG,OAAO,CAAC,MAAM,CA+B/E,CAAA"}
@@ -9,7 +9,7 @@ const HEADER_OFFSET_DIGEST = HEADER_CORPUS_SIZE;
9
9
  export const HEADER_OFFSET_DATA = SECTOR_SIZE;
10
10
  const PERSISTENT_FILE_TYPES = VFS.SQLITE_OPEN_MAIN_DB | VFS.SQLITE_OPEN_MAIN_JOURNAL | VFS.SQLITE_OPEN_SUPER_JOURNAL | VFS.SQLITE_OPEN_WAL;
11
11
  const textDecoder = new TextDecoder();
12
- export const decodeSAHPoolFilename = async (file) => {
12
+ export const decodeAccessHandlePoolFilename = async (file) => {
13
13
  // Read the path and digest of the path from the file.
14
14
  const corpus = new Uint8Array(await file.slice(0, HEADER_CORPUS_SIZE).arrayBuffer());
15
15
  // Delete files not expected to be present.
@@ -1 +1 @@
1
- {"version":3,"file":"opfs-sah-pool.js","sourceRoot":"","sources":["../../../src/browser/opfs/opfs-sah-pool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"opfs-sah-pool.js","sourceRoot":"","sources":["../../../src/browser/opfs/opfs-sah-pool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import type { CfTypes } from '@livestore/common-cf';
2
+ export interface BlockRange {
3
+ startBlock: number;
4
+ endBlock: number;
5
+ startOffset: number;
6
+ endOffset: number;
7
+ }
8
+ export interface BlockData {
9
+ blockId: number;
10
+ data: Uint8Array;
11
+ }
12
+ /**
13
+ * BlockManager handles the conversion between file operations and block-based storage
14
+ * for the CloudflareSqlVFS. It manages fixed-size blocks stored in SQL tables.
15
+ */
16
+ export declare class BlockManager {
17
+ private readonly blockSize;
18
+ constructor(blockSize?: number);
19
+ /**
20
+ * Calculate which blocks are needed for a given file operation
21
+ */
22
+ calculateBlockRange(offset: number, length: number): BlockRange;
23
+ /**
24
+ * Read blocks from SQL storage and return as a Map
25
+ */
26
+ readBlocks(sql: CfTypes.SqlStorage, filePath: string, blockIds: number[]): Map<number, Uint8Array>;
27
+ /**
28
+ * Write blocks to SQL storage using exec for now (prepared statements later)
29
+ */
30
+ writeBlocks(sql: CfTypes.SqlStorage, filePath: string, blocks: Map<number, Uint8Array>): void;
31
+ /**
32
+ * Delete blocks at or after the specified block ID (used for truncation)
33
+ */
34
+ deleteBlocksAfter(sql: CfTypes.SqlStorage, filePath: string, startBlockId: number): void;
35
+ /**
36
+ * Split write data into blocks, handling partial blocks at boundaries
37
+ */
38
+ splitIntoBlocks(data: Uint8Array, offset: number): Map<number, {
39
+ blockId: number;
40
+ blockOffset: number;
41
+ data: Uint8Array;
42
+ }>;
43
+ /**
44
+ * Assemble read data from blocks into a continuous buffer
45
+ */
46
+ assembleBlocks(blocks: Map<number, Uint8Array>, range: BlockRange, requestedLength: number): Uint8Array;
47
+ /**
48
+ * Handle partial block writes by reading existing block, modifying, and returning complete block
49
+ */
50
+ mergePartialBlock(sql: CfTypes.SqlStorage, filePath: string, blockId: number, blockOffset: number, newData: Uint8Array): Uint8Array;
51
+ /**
52
+ * Get statistics about block usage for a file
53
+ */
54
+ getBlockStats(sql: CfTypes.SqlStorage, filePath: string): {
55
+ totalBlocks: number;
56
+ storedBlocks: number;
57
+ totalBytes: number;
58
+ };
59
+ getBlockSize(): number;
60
+ }
61
+ //# sourceMappingURL=BlockManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BlockManager.d.ts","sourceRoot":"","sources":["../../src/cf/BlockManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAEnD,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,UAAU,CAAA;CACjB;AAED;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;gBAEtB,SAAS,GAAE,MAAkB;IAIzC;;OAEG;IACH,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU;IAc/D;;OAEG;IACH,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC;IAyBlG;;OAEG;IACH,WAAW,CAAC,GAAG,EAAE,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,IAAI;IAe7F;;OAEG;IACH,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAIxF;;OAEG;IACH,eAAe,CACb,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,MAAM,GACb,GAAG,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,UAAU,CAAA;KAAE,CAAC;IAyB1E;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,GAAG,UAAU;IA6BvG;;OAEG;IACH,iBAAiB,CACf,GAAG,EAAE,OAAO,CAAC,UAAU,EACvB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,UAAU,GAClB,UAAU;IAab;;OAEG;IACH,aAAa,CACX,GAAG,EAAE,OAAO,CAAC,UAAU,EACvB,QAAQ,EAAE,MAAM,GACf;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE;IAmCpE,YAAY,IAAI,MAAM;CAGvB"}
@@ -0,0 +1,157 @@
1
+ /**
2
+ * BlockManager handles the conversion between file operations and block-based storage
3
+ * for the CloudflareSqlVFS. It manages fixed-size blocks stored in SQL tables.
4
+ */
5
+ export class BlockManager {
6
+ blockSize;
7
+ constructor(blockSize = 64 * 1024) {
8
+ this.blockSize = blockSize;
9
+ }
10
+ /**
11
+ * Calculate which blocks are needed for a given file operation
12
+ */
13
+ calculateBlockRange(offset, length) {
14
+ const startBlock = Math.floor(offset / this.blockSize);
15
+ const endBlock = Math.floor((offset + length - 1) / this.blockSize);
16
+ const startOffset = offset % this.blockSize;
17
+ const endOffset = ((offset + length - 1) % this.blockSize) + 1;
18
+ return {
19
+ startBlock,
20
+ endBlock,
21
+ startOffset,
22
+ endOffset,
23
+ };
24
+ }
25
+ /**
26
+ * Read blocks from SQL storage and return as a Map
27
+ */
28
+ readBlocks(sql, filePath, blockIds) {
29
+ const blocks = new Map();
30
+ if (blockIds.length === 0) {
31
+ return blocks;
32
+ }
33
+ // Build IN clause for efficient querying
34
+ const placeholders = blockIds.map(() => '?').join(',');
35
+ const query = `
36
+ SELECT block_id, block_data
37
+ FROM vfs_blocks
38
+ WHERE file_path = ? AND block_id IN (${placeholders})
39
+ ORDER BY block_id
40
+ `;
41
+ const cursor = sql.exec(query, filePath, ...blockIds);
42
+ for (const row of cursor) {
43
+ blocks.set(row.block_id, new Uint8Array(row.block_data));
44
+ }
45
+ return blocks;
46
+ }
47
+ /**
48
+ * Write blocks to SQL storage using exec for now (prepared statements later)
49
+ */
50
+ writeBlocks(sql, filePath, blocks) {
51
+ if (blocks.size === 0) {
52
+ return;
53
+ }
54
+ for (const [blockId, data] of blocks) {
55
+ sql.exec('INSERT OR REPLACE INTO vfs_blocks (file_path, block_id, block_data) VALUES (?, ?, ?)', filePath, blockId, data);
56
+ }
57
+ }
58
+ /**
59
+ * Delete blocks at or after the specified block ID (used for truncation)
60
+ */
61
+ deleteBlocksAfter(sql, filePath, startBlockId) {
62
+ sql.exec('DELETE FROM vfs_blocks WHERE file_path = ? AND block_id >= ?', filePath, startBlockId);
63
+ }
64
+ /**
65
+ * Split write data into blocks, handling partial blocks at boundaries
66
+ */
67
+ splitIntoBlocks(data, offset) {
68
+ const blocks = new Map();
69
+ let remainingData = data;
70
+ let currentOffset = offset;
71
+ while (remainingData.length > 0) {
72
+ const blockId = Math.floor(currentOffset / this.blockSize);
73
+ const blockOffset = currentOffset % this.blockSize;
74
+ const bytesToWrite = Math.min(remainingData.length, this.blockSize - blockOffset);
75
+ const blockData = remainingData.slice(0, bytesToWrite);
76
+ blocks.set(blockId, {
77
+ blockId,
78
+ blockOffset,
79
+ data: blockData,
80
+ });
81
+ remainingData = remainingData.slice(bytesToWrite);
82
+ currentOffset += bytesToWrite;
83
+ }
84
+ return blocks;
85
+ }
86
+ /**
87
+ * Assemble read data from blocks into a continuous buffer
88
+ */
89
+ assembleBlocks(blocks, range, requestedLength) {
90
+ const result = new Uint8Array(requestedLength);
91
+ let resultOffset = 0;
92
+ for (let blockId = range.startBlock; blockId <= range.endBlock; blockId++) {
93
+ const blockData = blocks.get(blockId);
94
+ if (!blockData) {
95
+ // Block not found - fill with zeros (sparse file behavior)
96
+ const zeroLength = Math.min(this.blockSize, requestedLength - resultOffset);
97
+ // result is already zero-filled by default
98
+ resultOffset += zeroLength;
99
+ continue;
100
+ }
101
+ // Calculate the slice of this block we need
102
+ const blockStartOffset = blockId === range.startBlock ? range.startOffset : 0;
103
+ const blockEndOffset = blockId === range.endBlock ? range.endOffset : blockData.length;
104
+ const sliceLength = blockEndOffset - blockStartOffset;
105
+ if (sliceLength > 0) {
106
+ const slice = blockData.slice(blockStartOffset, blockEndOffset);
107
+ result.set(slice, resultOffset);
108
+ resultOffset += sliceLength;
109
+ }
110
+ }
111
+ return result;
112
+ }
113
+ /**
114
+ * Handle partial block writes by reading existing block, modifying, and returning complete block
115
+ */
116
+ mergePartialBlock(sql, filePath, blockId, blockOffset, newData) {
117
+ // Read existing block data if it exists
118
+ const existingBlocks = this.readBlocks(sql, filePath, [blockId]);
119
+ const existingBlock = existingBlocks.get(blockId) || new Uint8Array(this.blockSize);
120
+ // Create a new block with the merged data
121
+ const mergedBlock = new Uint8Array(this.blockSize);
122
+ mergedBlock.set(existingBlock);
123
+ mergedBlock.set(newData, blockOffset);
124
+ return mergedBlock;
125
+ }
126
+ /**
127
+ * Get statistics about block usage for a file
128
+ */
129
+ getBlockStats(sql, filePath) {
130
+ const blockStatsCursor = sql.exec(`SELECT
131
+ COUNT(*) as stored_blocks,
132
+ COALESCE(SUM(LENGTH(block_data)), 0) as total_bytes
133
+ FROM vfs_blocks
134
+ WHERE file_path = ?`, filePath);
135
+ const result = blockStatsCursor.one();
136
+ // Get file size to calculate theoretical total blocks
137
+ const fileSizeCursor = sql.exec('SELECT file_size FROM vfs_files WHERE file_path = ?', filePath);
138
+ let fileSize = 0;
139
+ try {
140
+ const fileSizeResult = fileSizeCursor.one();
141
+ fileSize = fileSizeResult.file_size;
142
+ }
143
+ catch {
144
+ // File doesn't exist
145
+ }
146
+ const totalBlocks = Math.ceil(fileSize / this.blockSize);
147
+ return {
148
+ totalBlocks,
149
+ storedBlocks: result.stored_blocks,
150
+ totalBytes: result.total_bytes,
151
+ };
152
+ }
153
+ getBlockSize() {
154
+ return this.blockSize;
155
+ }
156
+ }
157
+ //# sourceMappingURL=BlockManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BlockManager.js","sourceRoot":"","sources":["../../src/cf/BlockManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import type { CfTypes } from '@livestore/common-cf';
2
+ import { FacadeVFS } from '../FacadeVFS.ts';
3
+ export interface SqlVfsOptions {
4
+ maxFiles?: number;
5
+ blockSize?: number;
6
+ }
7
+ /**
8
+ * VFS implementation using Cloudflare Durable Object SQL storage as the backend.
9
+ * This provides a synchronous VFS interface by leveraging SQL's synchronous API.
10
+ *
11
+ * Storage Strategy:
12
+ * - Files are stored as blocks in SQL tables for efficient I/O
13
+ * - File metadata stored in vfs_files table
14
+ * - File data stored as fixed-size blocks in vfs_blocks table
15
+ * - Synchronous operations via SQL's synchronous API
16
+ *
17
+ * Key advantages over async VFS:
18
+ * - No async/await complexity
19
+ * - Native SQL ACID properties
20
+ * - Efficient range queries for file operations
21
+ * - Built-in consistency and durability
22
+ */
23
+ export declare class CloudflareSqlVFS extends FacadeVFS {
24
+ #private;
25
+ log: null;
26
+ static create(name: string, sql: CfTypes.SqlStorage, module: any, options?: SqlVfsOptions): Promise<CloudflareSqlVFS>;
27
+ constructor(name: string, sql: CfTypes.SqlStorage, module: any, options?: SqlVfsOptions);
28
+ /**
29
+ * Initialize the VFS by setting up SQL schema
30
+ */
31
+ isReady(): Promise<boolean>;
32
+ jOpen(path: string, fileId: number, flags: number, pOutFlags: DataView): number;
33
+ jClose(fileId: number): number;
34
+ jRead(fileId: number, buffer: Uint8Array, offset: number): number;
35
+ jWrite(fileId: number, data: Uint8Array, offset: number): number;
36
+ jTruncate(fileId: number, size: number): number;
37
+ jSync(fileId: number, _flags: number): number;
38
+ jFileSize(fileId: number, pSize64: DataView): number;
39
+ jDelete(path: string, _syncDir: number): number;
40
+ jAccess(path: string, _flags: number, pResOut: DataView): number;
41
+ jSectorSize(_fileId: number): number;
42
+ jDeviceCharacteristics(_fileId: number): number;
43
+ getStats(): {
44
+ activeFiles: number;
45
+ openFiles: number;
46
+ maxFiles: number;
47
+ blockSize: number;
48
+ totalStoredBytes: number;
49
+ };
50
+ }
51
+ //# sourceMappingURL=CloudflareSqlVFS.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CloudflareSqlVFS.d.ts","sourceRoot":"","sources":["../../src/cf/CloudflareSqlVFS.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAEnD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AA6B3C,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,gBAAiB,SAAQ,SAAS;;IAC7C,GAAG,OAAO;WAUG,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAE,aAAkB;gBAMvF,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAE,aAAkB;IAO3F;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IA2FjC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,GAAG,MAAM;IAqD/E,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAK9B,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAwBjE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAgDhE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;IAuC/C,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAS7C,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,GAAG,MAAM;IAepD,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAU/C,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,GAAG,MAAM;IAWhE,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAIpC,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IA+B/C,QAAQ,IAAI;QACV,WAAW,EAAE,MAAM,CAAA;QACnB,SAAS,EAAE,MAAM,CAAA;QACjB,QAAQ,EAAE,MAAM,CAAA;QAChB,SAAS,EAAE,MAAM,CAAA;QACjB,gBAAgB,EAAE,MAAM,CAAA;KACzB;CAwBF"}