@aigne/afs-did-space 1.12.0-beta.5

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 (510) hide show
  1. package/LICENSE.md +26 -0
  2. package/README.md +129 -0
  3. package/dist/_virtual/_@oxc-project_runtime@0.108.0/helpers/decorate.cjs +11 -0
  4. package/dist/_virtual/_@oxc-project_runtime@0.108.0/helpers/decorate.mjs +10 -0
  5. package/dist/_virtual/rolldown_runtime.cjs +29 -0
  6. package/dist/afs-metadata-context.cjs +20 -0
  7. package/dist/afs-metadata-context.d.cts +21 -0
  8. package/dist/afs-metadata-context.d.cts.map +1 -0
  9. package/dist/afs-metadata-context.d.mts +21 -0
  10. package/dist/afs-metadata-context.d.mts.map +1 -0
  11. package/dist/afs-metadata-context.mjs +18 -0
  12. package/dist/afs-metadata-context.mjs.map +1 -0
  13. package/dist/blocklet-hook.cjs +180 -0
  14. package/dist/blocklet-hook.d.cts +29 -0
  15. package/dist/blocklet-hook.d.cts.map +1 -0
  16. package/dist/blocklet-hook.d.mts +29 -0
  17. package/dist/blocklet-hook.d.mts.map +1 -0
  18. package/dist/blocklet-hook.mjs +178 -0
  19. package/dist/blocklet-hook.mjs.map +1 -0
  20. package/dist/changelog-schema.cjs +603 -0
  21. package/dist/changelog-schema.d.cts +395 -0
  22. package/dist/changelog-schema.d.cts.map +1 -0
  23. package/dist/changelog-schema.d.mts +395 -0
  24. package/dist/changelog-schema.d.mts.map +1 -0
  25. package/dist/changelog-schema.mjs +570 -0
  26. package/dist/changelog-schema.mjs.map +1 -0
  27. package/dist/changelog-write.cjs +80 -0
  28. package/dist/changelog-write.d.cts +70 -0
  29. package/dist/changelog-write.d.cts.map +1 -0
  30. package/dist/changelog-write.d.mts +70 -0
  31. package/dist/changelog-write.d.mts.map +1 -0
  32. package/dist/changelog-write.mjs +77 -0
  33. package/dist/changelog-write.mjs.map +1 -0
  34. package/dist/cid-byte-cache.cjs +126 -0
  35. package/dist/cid-byte-cache.d.cts +46 -0
  36. package/dist/cid-byte-cache.d.cts.map +1 -0
  37. package/dist/cid-byte-cache.d.mts +47 -0
  38. package/dist/cid-byte-cache.d.mts.map +1 -0
  39. package/dist/cid-byte-cache.mjs +125 -0
  40. package/dist/cid-byte-cache.mjs.map +1 -0
  41. package/dist/cid.cjs +68 -0
  42. package/dist/cid.d.cts +22 -0
  43. package/dist/cid.d.cts.map +1 -0
  44. package/dist/cid.d.mts +22 -0
  45. package/dist/cid.d.mts.map +1 -0
  46. package/dist/cid.mjs +65 -0
  47. package/dist/cid.mjs.map +1 -0
  48. package/dist/client.cjs +221 -0
  49. package/dist/client.d.cts +72 -0
  50. package/dist/client.d.cts.map +1 -0
  51. package/dist/client.d.mts +72 -0
  52. package/dist/client.d.mts.map +1 -0
  53. package/dist/client.mjs +220 -0
  54. package/dist/client.mjs.map +1 -0
  55. package/dist/cloudflare.cjs +510 -0
  56. package/dist/cloudflare.d.cts +307 -0
  57. package/dist/cloudflare.d.cts.map +1 -0
  58. package/dist/cloudflare.d.mts +308 -0
  59. package/dist/cloudflare.d.mts.map +1 -0
  60. package/dist/cloudflare.mjs +507 -0
  61. package/dist/cloudflare.mjs.map +1 -0
  62. package/dist/ctime-backfill.cjs +272 -0
  63. package/dist/ctime-backfill.d.cts +169 -0
  64. package/dist/ctime-backfill.d.cts.map +1 -0
  65. package/dist/ctime-backfill.d.mts +169 -0
  66. package/dist/ctime-backfill.d.mts.map +1 -0
  67. package/dist/ctime-backfill.mjs +267 -0
  68. package/dist/ctime-backfill.mjs.map +1 -0
  69. package/dist/d1-gc-queue.cjs +80 -0
  70. package/dist/d1-gc-queue.d.cts +59 -0
  71. package/dist/d1-gc-queue.d.cts.map +1 -0
  72. package/dist/d1-gc-queue.d.mts +59 -0
  73. package/dist/d1-gc-queue.d.mts.map +1 -0
  74. package/dist/d1-gc-queue.mjs +81 -0
  75. package/dist/d1-gc-queue.mjs.map +1 -0
  76. package/dist/d1-resolve-store.cjs +189 -0
  77. package/dist/d1-resolve-store.d.cts +93 -0
  78. package/dist/d1-resolve-store.d.cts.map +1 -0
  79. package/dist/d1-resolve-store.d.mts +93 -0
  80. package/dist/d1-resolve-store.d.mts.map +1 -0
  81. package/dist/d1-resolve-store.mjs +190 -0
  82. package/dist/d1-resolve-store.mjs.map +1 -0
  83. package/dist/d1-schema.cjs +361 -0
  84. package/dist/d1-schema.d.cts +237 -0
  85. package/dist/d1-schema.d.cts.map +1 -0
  86. package/dist/d1-schema.d.mts +237 -0
  87. package/dist/d1-schema.d.mts.map +1 -0
  88. package/dist/d1-schema.mjs +341 -0
  89. package/dist/d1-schema.mjs.map +1 -0
  90. package/dist/d1-share-store.cjs +0 -0
  91. package/dist/d1-share-store.d.cts +53 -0
  92. package/dist/d1-share-store.d.cts.map +1 -0
  93. package/dist/d1-share-store.d.mts +53 -0
  94. package/dist/d1-share-store.d.mts.map +1 -0
  95. package/dist/d1-share-store.mjs +0 -0
  96. package/dist/d1-share-store.mjs.map +1 -0
  97. package/dist/d1-tree-index.cjs +1098 -0
  98. package/dist/d1-tree-index.d.cts +203 -0
  99. package/dist/d1-tree-index.d.cts.map +1 -0
  100. package/dist/d1-tree-index.d.mts +203 -0
  101. package/dist/d1-tree-index.d.mts.map +1 -0
  102. package/dist/d1-tree-index.mjs +1094 -0
  103. package/dist/d1-tree-index.mjs.map +1 -0
  104. package/dist/data-backend.cjs +147 -0
  105. package/dist/data-backend.d.cts +30 -0
  106. package/dist/data-backend.d.cts.map +1 -0
  107. package/dist/data-backend.d.mts +30 -0
  108. package/dist/data-backend.d.mts.map +1 -0
  109. package/dist/data-backend.mjs +148 -0
  110. package/dist/data-backend.mjs.map +1 -0
  111. package/dist/dedup-backfill.cjs +278 -0
  112. package/dist/dedup-backfill.d.cts +165 -0
  113. package/dist/dedup-backfill.d.cts.map +1 -0
  114. package/dist/dedup-backfill.d.mts +165 -0
  115. package/dist/dedup-backfill.d.mts.map +1 -0
  116. package/dist/dedup-backfill.mjs +273 -0
  117. package/dist/dedup-backfill.mjs.map +1 -0
  118. package/dist/did-space-like.d.cts +2 -0
  119. package/dist/did-space-like.d.mts +2 -0
  120. package/dist/did-utils.cjs +44 -0
  121. package/dist/did-utils.d.cts +25 -0
  122. package/dist/did-utils.d.cts.map +1 -0
  123. package/dist/did-utils.d.mts +25 -0
  124. package/dist/did-utils.d.mts.map +1 -0
  125. package/dist/did-utils.mjs +43 -0
  126. package/dist/did-utils.mjs.map +1 -0
  127. package/dist/dirty-path-queue.cjs +31 -0
  128. package/dist/dirty-path-queue.d.cts +104 -0
  129. package/dist/dirty-path-queue.d.cts.map +1 -0
  130. package/dist/dirty-path-queue.d.mts +104 -0
  131. package/dist/dirty-path-queue.d.mts.map +1 -0
  132. package/dist/dirty-path-queue.mjs +31 -0
  133. package/dist/dirty-path-queue.mjs.map +1 -0
  134. package/dist/dirty-path-schema.cjs +142 -0
  135. package/dist/dirty-path-schema.d.cts +90 -0
  136. package/dist/dirty-path-schema.d.cts.map +1 -0
  137. package/dist/dirty-path-schema.d.mts +90 -0
  138. package/dist/dirty-path-schema.d.mts.map +1 -0
  139. package/dist/dirty-path-schema.mjs +136 -0
  140. package/dist/dirty-path-schema.mjs.map +1 -0
  141. package/dist/download-actions.cjs +43 -0
  142. package/dist/download-actions.mjs +40 -0
  143. package/dist/download-actions.mjs.map +1 -0
  144. package/dist/fs-object-store.cjs +153 -0
  145. package/dist/fs-object-store.d.cts +21 -0
  146. package/dist/fs-object-store.d.cts.map +1 -0
  147. package/dist/fs-object-store.d.mts +22 -0
  148. package/dist/fs-object-store.d.mts.map +1 -0
  149. package/dist/fs-object-store.mjs +153 -0
  150. package/dist/fs-object-store.mjs.map +1 -0
  151. package/dist/gc-queue.d.cts +43 -0
  152. package/dist/gc-queue.d.cts.map +1 -0
  153. package/dist/gc-queue.d.mts +43 -0
  154. package/dist/gc-queue.d.mts.map +1 -0
  155. package/dist/index.cjs +2712 -0
  156. package/dist/index.d.cts +504 -0
  157. package/dist/index.d.cts.map +1 -0
  158. package/dist/index.d.mts +505 -0
  159. package/dist/index.d.mts.map +1 -0
  160. package/dist/index.mjs +2537 -0
  161. package/dist/index.mjs.map +1 -0
  162. package/dist/inline-content-migration.cjs +212 -0
  163. package/dist/inline-content-migration.d.cts +110 -0
  164. package/dist/inline-content-migration.d.cts.map +1 -0
  165. package/dist/inline-content-migration.d.mts +111 -0
  166. package/dist/inline-content-migration.d.mts.map +1 -0
  167. package/dist/inline-content-migration.mjs +207 -0
  168. package/dist/inline-content-migration.mjs.map +1 -0
  169. package/dist/inline-content.cjs +145 -0
  170. package/dist/inline-content.d.cts +98 -0
  171. package/dist/inline-content.d.cts.map +1 -0
  172. package/dist/inline-content.d.mts +98 -0
  173. package/dist/inline-content.d.mts.map +1 -0
  174. package/dist/inline-content.mjs +137 -0
  175. package/dist/inline-content.mjs.map +1 -0
  176. package/dist/local-changelog.cjs +241 -0
  177. package/dist/local-changelog.d.cts +119 -0
  178. package/dist/local-changelog.d.cts.map +1 -0
  179. package/dist/local-changelog.d.mts +119 -0
  180. package/dist/local-changelog.d.mts.map +1 -0
  181. package/dist/local-changelog.mjs +240 -0
  182. package/dist/local-changelog.mjs.map +1 -0
  183. package/dist/local.cjs +435 -0
  184. package/dist/local.d.cts +254 -0
  185. package/dist/local.d.cts.map +1 -0
  186. package/dist/local.d.mts +254 -0
  187. package/dist/local.d.mts.map +1 -0
  188. package/dist/local.mjs +427 -0
  189. package/dist/local.mjs.map +1 -0
  190. package/dist/memory-gc-queue.cjs +36 -0
  191. package/dist/memory-gc-queue.d.cts +22 -0
  192. package/dist/memory-gc-queue.d.cts.map +1 -0
  193. package/dist/memory-gc-queue.d.mts +22 -0
  194. package/dist/memory-gc-queue.d.mts.map +1 -0
  195. package/dist/memory-gc-queue.mjs +36 -0
  196. package/dist/memory-gc-queue.mjs.map +1 -0
  197. package/dist/memory-tree-index.cjs +734 -0
  198. package/dist/memory-tree-index.d.cts +159 -0
  199. package/dist/memory-tree-index.d.cts.map +1 -0
  200. package/dist/memory-tree-index.d.mts +159 -0
  201. package/dist/memory-tree-index.d.mts.map +1 -0
  202. package/dist/memory-tree-index.mjs +735 -0
  203. package/dist/memory-tree-index.mjs.map +1 -0
  204. package/dist/metadata-db.cjs +562 -0
  205. package/dist/metadata-db.d.cts +102 -0
  206. package/dist/metadata-db.d.cts.map +1 -0
  207. package/dist/metadata-db.d.mts +102 -0
  208. package/dist/metadata-db.d.mts.map +1 -0
  209. package/dist/metadata-db.mjs +562 -0
  210. package/dist/metadata-db.mjs.map +1 -0
  211. package/dist/mime-utils.cjs +2 -0
  212. package/dist/mime-utils.d.cts +2 -0
  213. package/dist/mime-utils.d.mts +2 -0
  214. package/dist/mime-utils.mjs +3 -0
  215. package/dist/object-key.cjs +41 -0
  216. package/dist/object-key.d.cts +25 -0
  217. package/dist/object-key.d.cts.map +1 -0
  218. package/dist/object-key.d.mts +25 -0
  219. package/dist/object-key.d.mts.map +1 -0
  220. package/dist/object-key.mjs +40 -0
  221. package/dist/object-key.mjs.map +1 -0
  222. package/dist/packages/session/dist/index.cjs +788 -0
  223. package/dist/packages/session/dist/index.mjs +782 -0
  224. package/dist/packages/session/dist/index.mjs.map +1 -0
  225. package/dist/platform/r2/dist/types.d.cts +49 -0
  226. package/dist/platform/r2/dist/types.d.cts.map +1 -0
  227. package/dist/prefix-range.cjs +33 -0
  228. package/dist/prefix-range.d.cts +29 -0
  229. package/dist/prefix-range.d.cts.map +1 -0
  230. package/dist/prefix-range.d.mts +29 -0
  231. package/dist/prefix-range.d.mts.map +1 -0
  232. package/dist/prefix-range.mjs +33 -0
  233. package/dist/prefix-range.mjs.map +1 -0
  234. package/dist/prefixed-tree-index.cjs +238 -0
  235. package/dist/prefixed-tree-index.d.cts +85 -0
  236. package/dist/prefixed-tree-index.d.cts.map +1 -0
  237. package/dist/prefixed-tree-index.d.mts +85 -0
  238. package/dist/prefixed-tree-index.d.mts.map +1 -0
  239. package/dist/prefixed-tree-index.mjs +239 -0
  240. package/dist/prefixed-tree-index.mjs.map +1 -0
  241. package/dist/presign-signer.cjs +7 -0
  242. package/dist/presign-signer.d.cts +99 -0
  243. package/dist/presign-signer.d.cts.map +1 -0
  244. package/dist/presign-signer.d.mts +99 -0
  245. package/dist/presign-signer.d.mts.map +1 -0
  246. package/dist/presign-signer.mjs +7 -0
  247. package/dist/presign-signer.mjs.map +1 -0
  248. package/dist/providers/platform/r2/dist/index.d.mts +3 -0
  249. package/dist/providers/platform/r2/dist/types.d.mts +49 -0
  250. package/dist/providers/platform/r2/dist/types.d.mts.map +1 -0
  251. package/dist/reconcile.cjs +184 -0
  252. package/dist/reconcile.d.cts +26 -0
  253. package/dist/reconcile.d.cts.map +1 -0
  254. package/dist/reconcile.d.mts +26 -0
  255. package/dist/reconcile.d.mts.map +1 -0
  256. package/dist/reconcile.mjs +184 -0
  257. package/dist/reconcile.mjs.map +1 -0
  258. package/dist/reference-check.cjs +49 -0
  259. package/dist/reference-check.d.cts +10 -0
  260. package/dist/reference-check.d.cts.map +1 -0
  261. package/dist/reference-check.d.mts +10 -0
  262. package/dist/reference-check.d.mts.map +1 -0
  263. package/dist/reference-check.mjs +48 -0
  264. package/dist/reference-check.mjs.map +1 -0
  265. package/dist/remote-afs.cjs +681 -0
  266. package/dist/remote-afs.d.cts +236 -0
  267. package/dist/remote-afs.d.cts.map +1 -0
  268. package/dist/remote-afs.d.mts +236 -0
  269. package/dist/remote-afs.d.mts.map +1 -0
  270. package/dist/remote-afs.mjs +676 -0
  271. package/dist/remote-afs.mjs.map +1 -0
  272. package/dist/rename-guard.cjs +18 -0
  273. package/dist/rename-guard.mjs +18 -0
  274. package/dist/rename-guard.mjs.map +1 -0
  275. package/dist/resolve.cjs +260 -0
  276. package/dist/resolve.d.cts +113 -0
  277. package/dist/resolve.d.cts.map +1 -0
  278. package/dist/resolve.d.mts +113 -0
  279. package/dist/resolve.d.mts.map +1 -0
  280. package/dist/resolve.mjs +260 -0
  281. package/dist/resolve.mjs.map +1 -0
  282. package/dist/rsync-content.cjs +33 -0
  283. package/dist/rsync-content.mjs +33 -0
  284. package/dist/rsync-content.mjs.map +1 -0
  285. package/dist/rsync.cjs +400 -0
  286. package/dist/rsync.d.cts +157 -0
  287. package/dist/rsync.d.cts.map +1 -0
  288. package/dist/rsync.d.mts +157 -0
  289. package/dist/rsync.d.mts.map +1 -0
  290. package/dist/rsync.mjs +397 -0
  291. package/dist/rsync.mjs.map +1 -0
  292. package/dist/run-gc.cjs +57 -0
  293. package/dist/run-gc.d.cts +40 -0
  294. package/dist/run-gc.d.cts.map +1 -0
  295. package/dist/run-gc.d.mts +41 -0
  296. package/dist/run-gc.d.mts.map +1 -0
  297. package/dist/run-gc.mjs +57 -0
  298. package/dist/run-gc.mjs.map +1 -0
  299. package/dist/scope-id.cjs +70 -0
  300. package/dist/scope-id.d.cts +35 -0
  301. package/dist/scope-id.d.cts.map +1 -0
  302. package/dist/scope-id.d.mts +35 -0
  303. package/dist/scope-id.d.mts.map +1 -0
  304. package/dist/scope-id.mjs +68 -0
  305. package/dist/scope-id.mjs.map +1 -0
  306. package/dist/scope-migration-node.cjs +172 -0
  307. package/dist/scope-migration-node.d.cts +44 -0
  308. package/dist/scope-migration-node.d.cts.map +1 -0
  309. package/dist/scope-migration-node.d.mts +44 -0
  310. package/dist/scope-migration-node.d.mts.map +1 -0
  311. package/dist/scope-migration-node.mjs +171 -0
  312. package/dist/scope-migration-node.mjs.map +1 -0
  313. package/dist/scope-migration.cjs +155 -0
  314. package/dist/scope-migration.d.cts +65 -0
  315. package/dist/scope-migration.d.cts.map +1 -0
  316. package/dist/scope-migration.d.mts +65 -0
  317. package/dist/scope-migration.d.mts.map +1 -0
  318. package/dist/scope-migration.mjs +154 -0
  319. package/dist/scope-migration.mjs.map +1 -0
  320. package/dist/share-declaration.cjs +225 -0
  321. package/dist/share-declaration.d.cts +30 -0
  322. package/dist/share-declaration.d.cts.map +1 -0
  323. package/dist/share-declaration.d.mts +32 -0
  324. package/dist/share-declaration.d.mts.map +1 -0
  325. package/dist/share-declaration.mjs +221 -0
  326. package/dist/share-declaration.mjs.map +1 -0
  327. package/dist/share-hook.cjs +63 -0
  328. package/dist/share-hook.mjs +62 -0
  329. package/dist/share-hook.mjs.map +1 -0
  330. package/dist/share-resolve.cjs +176 -0
  331. package/dist/share-resolve.d.cts +36 -0
  332. package/dist/share-resolve.d.cts.map +1 -0
  333. package/dist/share-resolve.d.mts +36 -0
  334. package/dist/share-resolve.d.mts.map +1 -0
  335. package/dist/share-resolve.mjs +177 -0
  336. package/dist/share-resolve.mjs.map +1 -0
  337. package/dist/share-serve.cjs +145 -0
  338. package/dist/share-serve.d.cts +30 -0
  339. package/dist/share-serve.d.cts.map +1 -0
  340. package/dist/share-serve.d.mts +30 -0
  341. package/dist/share-serve.d.mts.map +1 -0
  342. package/dist/share-serve.mjs +144 -0
  343. package/dist/share-serve.mjs.map +1 -0
  344. package/dist/share-store.cjs +25 -0
  345. package/dist/share-store.d.cts +65 -0
  346. package/dist/share-store.d.cts.map +1 -0
  347. package/dist/share-store.d.mts +65 -0
  348. package/dist/share-store.d.mts.map +1 -0
  349. package/dist/share-store.mjs +25 -0
  350. package/dist/share-store.mjs.map +1 -0
  351. package/dist/share-virtual-path.cjs +102 -0
  352. package/dist/share-virtual-path.mjs +101 -0
  353. package/dist/share-virtual-path.mjs.map +1 -0
  354. package/dist/space-resolver.cjs +54 -0
  355. package/dist/space-resolver.d.cts +34 -0
  356. package/dist/space-resolver.d.cts.map +1 -0
  357. package/dist/space-resolver.d.mts +34 -0
  358. package/dist/space-resolver.d.mts.map +1 -0
  359. package/dist/space-resolver.mjs +55 -0
  360. package/dist/space-resolver.mjs.map +1 -0
  361. package/dist/sqlite-gc-queue.cjs +51 -0
  362. package/dist/sqlite-gc-queue.d.cts +22 -0
  363. package/dist/sqlite-gc-queue.d.cts.map +1 -0
  364. package/dist/sqlite-gc-queue.d.mts +22 -0
  365. package/dist/sqlite-gc-queue.d.mts.map +1 -0
  366. package/dist/sqlite-gc-queue.mjs +52 -0
  367. package/dist/sqlite-gc-queue.mjs.map +1 -0
  368. package/dist/sqlite-resolve-store.cjs +163 -0
  369. package/dist/sqlite-resolve-store.d.cts +50 -0
  370. package/dist/sqlite-resolve-store.d.cts.map +1 -0
  371. package/dist/sqlite-resolve-store.d.mts +50 -0
  372. package/dist/sqlite-resolve-store.d.mts.map +1 -0
  373. package/dist/sqlite-resolve-store.mjs +164 -0
  374. package/dist/sqlite-resolve-store.mjs.map +1 -0
  375. package/dist/sqlite-share-store.cjs +157 -0
  376. package/dist/sqlite-share-store.d.cts +31 -0
  377. package/dist/sqlite-share-store.d.cts.map +1 -0
  378. package/dist/sqlite-share-store.d.mts +31 -0
  379. package/dist/sqlite-share-store.d.mts.map +1 -0
  380. package/dist/sqlite-share-store.mjs +157 -0
  381. package/dist/sqlite-share-store.mjs.map +1 -0
  382. package/dist/sqlite-tree-index.cjs +901 -0
  383. package/dist/sqlite-tree-index.d.cts +107 -0
  384. package/dist/sqlite-tree-index.d.cts.map +1 -0
  385. package/dist/sqlite-tree-index.d.mts +107 -0
  386. package/dist/sqlite-tree-index.d.mts.map +1 -0
  387. package/dist/sqlite-tree-index.mjs +902 -0
  388. package/dist/sqlite-tree-index.mjs.map +1 -0
  389. package/dist/sync-engine.cjs +1324 -0
  390. package/dist/sync-engine.d.cts +473 -0
  391. package/dist/sync-engine.d.cts.map +1 -0
  392. package/dist/sync-engine.d.mts +473 -0
  393. package/dist/sync-engine.d.mts.map +1 -0
  394. package/dist/sync-engine.mjs +1315 -0
  395. package/dist/sync-engine.mjs.map +1 -0
  396. package/dist/sync-state.cjs +303 -0
  397. package/dist/sync-state.d.cts +224 -0
  398. package/dist/sync-state.d.cts.map +1 -0
  399. package/dist/sync-state.d.mts +224 -0
  400. package/dist/sync-state.d.mts.map +1 -0
  401. package/dist/sync-state.mjs +297 -0
  402. package/dist/sync-state.mjs.map +1 -0
  403. package/dist/timestamp.cjs +92 -0
  404. package/dist/timestamp.mjs +91 -0
  405. package/dist/timestamp.mjs.map +1 -0
  406. package/dist/transports/http.cjs +54 -0
  407. package/dist/transports/http.d.cts +26 -0
  408. package/dist/transports/http.d.cts.map +1 -0
  409. package/dist/transports/http.d.mts +26 -0
  410. package/dist/transports/http.d.mts.map +1 -0
  411. package/dist/transports/http.mjs +54 -0
  412. package/dist/transports/http.mjs.map +1 -0
  413. package/dist/transports/static.cjs +55 -0
  414. package/dist/transports/static.d.cts +28 -0
  415. package/dist/transports/static.d.cts.map +1 -0
  416. package/dist/transports/static.d.mts +28 -0
  417. package/dist/transports/static.d.mts.map +1 -0
  418. package/dist/transports/static.mjs +55 -0
  419. package/dist/transports/static.mjs.map +1 -0
  420. package/dist/transports/types.cjs +13 -0
  421. package/dist/transports/types.d.cts +72 -0
  422. package/dist/transports/types.d.cts.map +1 -0
  423. package/dist/transports/types.d.mts +72 -0
  424. package/dist/transports/types.d.mts.map +1 -0
  425. package/dist/transports/types.mjs +13 -0
  426. package/dist/transports/types.mjs.map +1 -0
  427. package/dist/transports/ws.cjs +207 -0
  428. package/dist/transports/ws.d.cts +47 -0
  429. package/dist/transports/ws.d.cts.map +1 -0
  430. package/dist/transports/ws.d.mts +47 -0
  431. package/dist/transports/ws.d.mts.map +1 -0
  432. package/dist/transports/ws.mjs +206 -0
  433. package/dist/transports/ws.mjs.map +1 -0
  434. package/dist/tree-index.cjs +333 -0
  435. package/dist/tree-index.d.cts +524 -0
  436. package/dist/tree-index.d.cts.map +1 -0
  437. package/dist/tree-index.d.mts +524 -0
  438. package/dist/tree-index.d.mts.map +1 -0
  439. package/dist/tree-index.mjs +322 -0
  440. package/dist/tree-index.mjs.map +1 -0
  441. package/dist/tree-query.cjs +655 -0
  442. package/dist/tree-query.d.cts +70 -0
  443. package/dist/tree-query.d.cts.map +1 -0
  444. package/dist/tree-query.d.mts +70 -0
  445. package/dist/tree-query.d.mts.map +1 -0
  446. package/dist/tree-query.mjs +648 -0
  447. package/dist/tree-query.mjs.map +1 -0
  448. package/dist/upload-actions.cjs +97 -0
  449. package/dist/upload-actions.d.cts +19 -0
  450. package/dist/upload-actions.d.cts.map +1 -0
  451. package/dist/upload-actions.d.mts +21 -0
  452. package/dist/upload-actions.d.mts.map +1 -0
  453. package/dist/upload-actions.mjs +90 -0
  454. package/dist/upload-actions.mjs.map +1 -0
  455. package/dist/upload-session-store.cjs +185 -0
  456. package/dist/upload-session-store.d.cts +99 -0
  457. package/dist/upload-session-store.d.cts.map +1 -0
  458. package/dist/upload-session-store.d.mts +99 -0
  459. package/dist/upload-session-store.d.mts.map +1 -0
  460. package/dist/upload-session-store.mjs +184 -0
  461. package/dist/upload-session-store.mjs.map +1 -0
  462. package/dist/url-normalize.cjs +61 -0
  463. package/dist/url-normalize.d.cts +33 -0
  464. package/dist/url-normalize.d.cts.map +1 -0
  465. package/dist/url-normalize.d.mts +33 -0
  466. package/dist/url-normalize.d.mts.map +1 -0
  467. package/dist/url-normalize.mjs +61 -0
  468. package/dist/url-normalize.mjs.map +1 -0
  469. package/dist/versioned-content-backends.cjs +155 -0
  470. package/dist/versioned-content-backends.d.cts +49 -0
  471. package/dist/versioned-content-backends.d.cts.map +1 -0
  472. package/dist/versioned-content-backends.d.mts +49 -0
  473. package/dist/versioned-content-backends.d.mts.map +1 -0
  474. package/dist/versioned-content-backends.mjs +154 -0
  475. package/dist/versioned-content-backends.mjs.map +1 -0
  476. package/dist/versioned-content-index.cjs +102 -0
  477. package/dist/versioned-content-index.d.cts +46 -0
  478. package/dist/versioned-content-index.d.cts.map +1 -0
  479. package/dist/versioned-content-index.d.mts +46 -0
  480. package/dist/versioned-content-index.d.mts.map +1 -0
  481. package/dist/versioned-content-index.mjs +103 -0
  482. package/dist/versioned-content-index.mjs.map +1 -0
  483. package/dist/versioned-content-store.cjs +121 -0
  484. package/dist/versioned-content-store.d.cts +90 -0
  485. package/dist/versioned-content-store.d.cts.map +1 -0
  486. package/dist/versioned-content-store.d.mts +90 -0
  487. package/dist/versioned-content-store.d.mts.map +1 -0
  488. package/dist/versioned-content-store.mjs +122 -0
  489. package/dist/versioned-content-store.mjs.map +1 -0
  490. package/dist/versioned-scope.cjs +39 -0
  491. package/dist/versioned-scope.d.cts +57 -0
  492. package/dist/versioned-scope.d.cts.map +1 -0
  493. package/dist/versioned-scope.d.mts +57 -0
  494. package/dist/versioned-scope.d.mts.map +1 -0
  495. package/dist/versioned-scope.mjs +37 -0
  496. package/dist/versioned-scope.mjs.map +1 -0
  497. package/migrations/0001_tree_entries.sql +17 -0
  498. package/migrations/0002_resolve_entries.sql +7 -0
  499. package/migrations/0003_entries_v2.sql +38 -0
  500. package/migrations/0004_gc_queue.sql +5 -0
  501. package/migrations/0006_resolve_enhance.sql +14 -0
  502. package/migrations/0007_resolve_created_at.sql +10 -0
  503. package/migrations/0008_changelog.sql +34 -0
  504. package/migrations/0009_device_sync_state.sql +29 -0
  505. package/migrations/0010_scope_meta.sql +33 -0
  506. package/migrations/0011_shares.sql +25 -0
  507. package/migrations/0012_scope_meta_file_count.sql +41 -0
  508. package/migrations/0013_scope_meta_total_bytes.sql +47 -0
  509. package/migrations/0014_rename_tables.sql +62 -0
  510. package/package.json +102 -0
@@ -0,0 +1,155 @@
1
+ const require_inline_content = require('./inline-content.cjs');
2
+ const require_d1_schema = require('./d1-schema.cjs');
3
+ const require_d1_tree_index = require('./d1-tree-index.cjs');
4
+ const require_memory_tree_index = require('./memory-tree-index.cjs');
5
+ const require_sqlite_tree_index = require('./sqlite-tree-index.cjs');
6
+
7
+ //#region src/versioned-content-backends.ts
8
+ /**
9
+ * VersionedScopeBackend implementations — one per storage primitive
10
+ * (Node libsql / CF D1 / in-memory tests), mirroring the TreeIndex trio.
11
+ * All entries machinery is the TreeIndex itself; these only bind scopes and
12
+ * own the `versioned_scopes` metadata table (DDL in `d1-schema.ts`).
13
+ */
14
+ function rowToMeta(row) {
15
+ return {
16
+ scope: row.scope,
17
+ scopeGroup: row.scope_group,
18
+ seedDigest: row.seed_digest ?? void 0,
19
+ ingestedAt: Number(row.ingested_at ?? 0),
20
+ fileCount: Number(row.file_count ?? 0)
21
+ };
22
+ }
23
+ var LibsqlVersionedScopeBackend = class {
24
+ inlineThreshold;
25
+ constructor(db, opts) {
26
+ this.db = db;
27
+ this.inlineThreshold = opts?.inlineThreshold ?? require_inline_content.DEFAULT_INLINE_THRESHOLD;
28
+ }
29
+ /** Idempotent CREATEs — call once at daemon startup. */
30
+ async ensureTable() {
31
+ await this.db.rawClient.execute(require_d1_schema.VERSIONED_SCOPES_TABLE_SQL);
32
+ for (const sql of require_d1_schema.VERSIONED_SCOPES_INDEX_SQL) await this.db.rawClient.execute(sql);
33
+ }
34
+ makeIndex(scope) {
35
+ return new require_sqlite_tree_index.SQLiteTreeIndex(this.db, scope, {
36
+ inlineCache: "on",
37
+ inlineThreshold: this.inlineThreshold
38
+ });
39
+ }
40
+ async getScopeMeta(scope) {
41
+ const row = (await this.db.rawClient.execute({
42
+ sql: "SELECT scope, scope_group, seed_digest, ingested_at, file_count FROM ds_versioned_scopes WHERE scope = ?",
43
+ args: [scope]
44
+ })).rows[0];
45
+ return row ? rowToMeta(row) : null;
46
+ }
47
+ async putScopeMeta(meta) {
48
+ await this.db.rawClient.execute({
49
+ sql: `INSERT INTO ds_versioned_scopes (scope, scope_group, seed_digest, ingested_at, file_count)
50
+ VALUES (?, ?, ?, ?, ?)
51
+ ON CONFLICT(scope) DO UPDATE SET
52
+ scope_group = excluded.scope_group,
53
+ seed_digest = excluded.seed_digest,
54
+ ingested_at = excluded.ingested_at,
55
+ file_count = excluded.file_count`,
56
+ args: [
57
+ meta.scope,
58
+ meta.scopeGroup,
59
+ meta.seedDigest ?? null,
60
+ meta.ingestedAt,
61
+ meta.fileCount
62
+ ]
63
+ });
64
+ }
65
+ async deleteScopeMeta(scope) {
66
+ await this.db.rawClient.execute({
67
+ sql: "DELETE FROM ds_versioned_scopes WHERE scope = ?",
68
+ args: [scope]
69
+ });
70
+ }
71
+ async listScopeMetaByGroup(scopeGroup) {
72
+ return (await this.db.rawClient.execute({
73
+ sql: "SELECT scope, scope_group, seed_digest, ingested_at, file_count FROM ds_versioned_scopes WHERE scope_group = ?",
74
+ args: [scopeGroup]
75
+ })).rows.map((row) => rowToMeta(row));
76
+ }
77
+ };
78
+ var D1VersionedScopeBackend = class {
79
+ inlineThreshold;
80
+ constructor(db, opts) {
81
+ this.db = db;
82
+ this.inlineThreshold = opts?.inlineThreshold ?? require_inline_content.DEFAULT_INLINE_THRESHOLD;
83
+ }
84
+ /**
85
+ * Idempotent CREATEs — production gets the table via the generated 0103
86
+ * migration; this guard covers tests + fresh-DB bootstrap.
87
+ */
88
+ async ensureTable() {
89
+ await this.db.prepare(require_d1_schema.VERSIONED_SCOPES_TABLE_SQL).run();
90
+ for (const sql of require_d1_schema.VERSIONED_SCOPES_INDEX_SQL) await this.db.prepare(sql).run();
91
+ }
92
+ makeIndex(scope) {
93
+ return new require_d1_tree_index.D1TreeIndex(this.db, scope, {
94
+ inlineCache: "on",
95
+ inlineThreshold: this.inlineThreshold
96
+ });
97
+ }
98
+ async getScopeMeta(scope) {
99
+ const row = await this.db.prepare("SELECT scope, scope_group, seed_digest, ingested_at, file_count FROM ds_versioned_scopes WHERE scope = ?").bind(scope).first();
100
+ return row ? rowToMeta(row) : null;
101
+ }
102
+ async putScopeMeta(meta) {
103
+ await this.db.prepare(`INSERT INTO ds_versioned_scopes (scope, scope_group, seed_digest, ingested_at, file_count)
104
+ VALUES (?, ?, ?, ?, ?)
105
+ ON CONFLICT(scope) DO UPDATE SET
106
+ scope_group = excluded.scope_group,
107
+ seed_digest = excluded.seed_digest,
108
+ ingested_at = excluded.ingested_at,
109
+ file_count = excluded.file_count`).bind(meta.scope, meta.scopeGroup, meta.seedDigest ?? null, meta.ingestedAt, meta.fileCount).run();
110
+ }
111
+ async deleteScopeMeta(scope) {
112
+ await this.db.prepare("DELETE FROM ds_versioned_scopes WHERE scope = ?").bind(scope).run();
113
+ }
114
+ async listScopeMetaByGroup(scopeGroup) {
115
+ const { results } = await this.db.prepare("SELECT scope, scope_group, seed_digest, ingested_at, file_count FROM ds_versioned_scopes WHERE scope_group = ?").bind(scopeGroup).all();
116
+ return results.map(rowToMeta);
117
+ }
118
+ };
119
+ var MemoryVersionedScopeBackend = class {
120
+ indexes = /* @__PURE__ */ new Map();
121
+ meta = /* @__PURE__ */ new Map();
122
+ inlineThreshold;
123
+ constructor(opts) {
124
+ this.inlineThreshold = opts?.inlineThreshold ?? require_inline_content.DEFAULT_INLINE_THRESHOLD;
125
+ }
126
+ makeIndex(scope) {
127
+ let index = this.indexes.get(scope);
128
+ if (!index) {
129
+ index = new require_memory_tree_index.MemoryTreeIndex({
130
+ scope,
131
+ inlineCache: "on",
132
+ inlineThreshold: this.inlineThreshold
133
+ });
134
+ this.indexes.set(scope, index);
135
+ }
136
+ return index;
137
+ }
138
+ async getScopeMeta(scope) {
139
+ return this.meta.get(scope) ?? null;
140
+ }
141
+ async putScopeMeta(meta) {
142
+ this.meta.set(meta.scope, { ...meta });
143
+ }
144
+ async deleteScopeMeta(scope) {
145
+ this.meta.delete(scope);
146
+ }
147
+ async listScopeMetaByGroup(scopeGroup) {
148
+ return [...this.meta.values()].filter((m) => m.scopeGroup === scopeGroup);
149
+ }
150
+ };
151
+
152
+ //#endregion
153
+ exports.D1VersionedScopeBackend = D1VersionedScopeBackend;
154
+ exports.LibsqlVersionedScopeBackend = LibsqlVersionedScopeBackend;
155
+ exports.MemoryVersionedScopeBackend = MemoryVersionedScopeBackend;
@@ -0,0 +1,49 @@
1
+ import { TreeIndex } from "./tree-index.cjs";
2
+ import { MetadataDB } from "./metadata-db.cjs";
3
+ import { VersionedScopeBackend, VersionedScopeMeta } from "./versioned-content-store.cjs";
4
+
5
+ //#region src/versioned-content-backends.d.ts
6
+ interface BackendOptions {
7
+ inlineThreshold?: number;
8
+ }
9
+ declare class LibsqlVersionedScopeBackend implements VersionedScopeBackend {
10
+ private readonly db;
11
+ private readonly inlineThreshold;
12
+ constructor(db: MetadataDB, opts?: BackendOptions);
13
+ /** Idempotent CREATEs — call once at daemon startup. */
14
+ ensureTable(): Promise<void>;
15
+ makeIndex(scope: string): TreeIndex;
16
+ getScopeMeta(scope: string): Promise<VersionedScopeMeta | null>;
17
+ putScopeMeta(meta: VersionedScopeMeta): Promise<void>;
18
+ deleteScopeMeta(scope: string): Promise<void>;
19
+ listScopeMetaByGroup(scopeGroup: string): Promise<VersionedScopeMeta[]>;
20
+ }
21
+ declare class D1VersionedScopeBackend implements VersionedScopeBackend {
22
+ private readonly db;
23
+ private readonly inlineThreshold;
24
+ constructor(db: D1Database, opts?: BackendOptions);
25
+ /**
26
+ * Idempotent CREATEs — production gets the table via the generated 0103
27
+ * migration; this guard covers tests + fresh-DB bootstrap.
28
+ */
29
+ ensureTable(): Promise<void>;
30
+ makeIndex(scope: string): TreeIndex;
31
+ getScopeMeta(scope: string): Promise<VersionedScopeMeta | null>;
32
+ putScopeMeta(meta: VersionedScopeMeta): Promise<void>;
33
+ deleteScopeMeta(scope: string): Promise<void>;
34
+ listScopeMetaByGroup(scopeGroup: string): Promise<VersionedScopeMeta[]>;
35
+ }
36
+ declare class MemoryVersionedScopeBackend implements VersionedScopeBackend {
37
+ private readonly indexes;
38
+ private readonly meta;
39
+ private readonly inlineThreshold;
40
+ constructor(opts?: BackendOptions);
41
+ makeIndex(scope: string): TreeIndex;
42
+ getScopeMeta(scope: string): Promise<VersionedScopeMeta | null>;
43
+ putScopeMeta(meta: VersionedScopeMeta): Promise<void>;
44
+ deleteScopeMeta(scope: string): Promise<void>;
45
+ listScopeMetaByGroup(scopeGroup: string): Promise<VersionedScopeMeta[]>;
46
+ }
47
+ //#endregion
48
+ export { D1VersionedScopeBackend, LibsqlVersionedScopeBackend, MemoryVersionedScopeBackend };
49
+ //# sourceMappingURL=versioned-content-backends.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versioned-content-backends.d.cts","names":[],"sources":["../src/versioned-content-backends.ts"],"mappings":";;;;;UAgBU,cAAA;EACR,eAAA;AAAA;AAAA,cAeW,2BAAA,YAAuC,qBAAA;EAAA,iBAI/B,EAAA;EAAA,iBAHF,eAAA;cAGE,EAAA,EAAI,UAAA,EACrB,IAAA,GAAO,cAAA;EAaiB;EAPpB,WAAA,CAAA,GAAe,OAAA;EAOrB,SAAA,CAAU,KAAA,WAAgB,SAAA;EAOpB,YAAA,CAAa,KAAA,WAAgB,OAAA,CAAQ,kBAAA;EASrC,YAAA,CAAa,IAAA,EAAM,kBAAA,GAAqB,OAAA;EAaxC,eAAA,CAAgB,KAAA,WAAgB,OAAA;EAOhC,oBAAA,CAAqB,UAAA,WAAqB,OAAA,CAAQ,kBAAA;AAAA;AAAA,cAW7C,uBAAA,YAAmC,qBAAA;EAAA,iBAI3B,EAAA;EAAA,iBAHF,eAAA;cAGE,EAAA,EAAI,UAAA,EACrB,IAAA,GAAO,cAAA;EAlEU;;;;EA2Eb,WAAA,CAAA,GAAe,OAAA;EAOrB,SAAA,CAAU,KAAA,WAAgB,SAAA;EAOpB,YAAA,CAAa,KAAA,WAAgB,OAAA,CAAQ,kBAAA;EAUrC,YAAA,CAAa,IAAA,EAAM,kBAAA,GAAqB,OAAA;EAexC,eAAA,CAAgB,KAAA,WAAgB,OAAA;EAIhC,oBAAA,CAAqB,UAAA,WAAqB,OAAA,CAAQ,kBAAA;AAAA;AAAA,cAa7C,2BAAA,YAAuC,qBAAA;EAAA,iBACjC,OAAA;EAAA,iBACA,IAAA;EAAA,iBACA,eAAA;cAEL,IAAA,GAAO,cAAA;EAInB,SAAA,CAAU,KAAA,WAAgB,SAAA;EAapB,YAAA,CAAa,KAAA,WAAgB,OAAA,CAAQ,kBAAA;EAIrC,YAAA,CAAa,IAAA,EAAM,kBAAA,GAAqB,OAAA;EAIxC,eAAA,CAAgB,KAAA,WAAgB,OAAA;EAIhC,oBAAA,CAAqB,UAAA,WAAqB,OAAA,CAAQ,kBAAA;AAAA"}
@@ -0,0 +1,49 @@
1
+ import { TreeIndex } from "./tree-index.mjs";
2
+ import { MetadataDB } from "./metadata-db.mjs";
3
+ import { VersionedScopeBackend, VersionedScopeMeta } from "./versioned-content-store.mjs";
4
+
5
+ //#region src/versioned-content-backends.d.ts
6
+ interface BackendOptions {
7
+ inlineThreshold?: number;
8
+ }
9
+ declare class LibsqlVersionedScopeBackend implements VersionedScopeBackend {
10
+ private readonly db;
11
+ private readonly inlineThreshold;
12
+ constructor(db: MetadataDB, opts?: BackendOptions);
13
+ /** Idempotent CREATEs — call once at daemon startup. */
14
+ ensureTable(): Promise<void>;
15
+ makeIndex(scope: string): TreeIndex;
16
+ getScopeMeta(scope: string): Promise<VersionedScopeMeta | null>;
17
+ putScopeMeta(meta: VersionedScopeMeta): Promise<void>;
18
+ deleteScopeMeta(scope: string): Promise<void>;
19
+ listScopeMetaByGroup(scopeGroup: string): Promise<VersionedScopeMeta[]>;
20
+ }
21
+ declare class D1VersionedScopeBackend implements VersionedScopeBackend {
22
+ private readonly db;
23
+ private readonly inlineThreshold;
24
+ constructor(db: D1Database, opts?: BackendOptions);
25
+ /**
26
+ * Idempotent CREATEs — production gets the table via the generated 0103
27
+ * migration; this guard covers tests + fresh-DB bootstrap.
28
+ */
29
+ ensureTable(): Promise<void>;
30
+ makeIndex(scope: string): TreeIndex;
31
+ getScopeMeta(scope: string): Promise<VersionedScopeMeta | null>;
32
+ putScopeMeta(meta: VersionedScopeMeta): Promise<void>;
33
+ deleteScopeMeta(scope: string): Promise<void>;
34
+ listScopeMetaByGroup(scopeGroup: string): Promise<VersionedScopeMeta[]>;
35
+ }
36
+ declare class MemoryVersionedScopeBackend implements VersionedScopeBackend {
37
+ private readonly indexes;
38
+ private readonly meta;
39
+ private readonly inlineThreshold;
40
+ constructor(opts?: BackendOptions);
41
+ makeIndex(scope: string): TreeIndex;
42
+ getScopeMeta(scope: string): Promise<VersionedScopeMeta | null>;
43
+ putScopeMeta(meta: VersionedScopeMeta): Promise<void>;
44
+ deleteScopeMeta(scope: string): Promise<void>;
45
+ listScopeMetaByGroup(scopeGroup: string): Promise<VersionedScopeMeta[]>;
46
+ }
47
+ //#endregion
48
+ export { D1VersionedScopeBackend, LibsqlVersionedScopeBackend, MemoryVersionedScopeBackend };
49
+ //# sourceMappingURL=versioned-content-backends.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versioned-content-backends.d.mts","names":[],"sources":["../src/versioned-content-backends.ts"],"mappings":";;;;;UAgBU,cAAA;EACR,eAAA;AAAA;AAAA,cAeW,2BAAA,YAAuC,qBAAA;EAAA,iBAI/B,EAAA;EAAA,iBAHF,eAAA;cAGE,EAAA,EAAI,UAAA,EACrB,IAAA,GAAO,cAAA;EAaiB;EAPpB,WAAA,CAAA,GAAe,OAAA;EAOrB,SAAA,CAAU,KAAA,WAAgB,SAAA;EAOpB,YAAA,CAAa,KAAA,WAAgB,OAAA,CAAQ,kBAAA;EASrC,YAAA,CAAa,IAAA,EAAM,kBAAA,GAAqB,OAAA;EAaxC,eAAA,CAAgB,KAAA,WAAgB,OAAA;EAOhC,oBAAA,CAAqB,UAAA,WAAqB,OAAA,CAAQ,kBAAA;AAAA;AAAA,cAW7C,uBAAA,YAAmC,qBAAA;EAAA,iBAI3B,EAAA;EAAA,iBAHF,eAAA;cAGE,EAAA,EAAI,UAAA,EACrB,IAAA,GAAO,cAAA;EAlEU;;;;EA2Eb,WAAA,CAAA,GAAe,OAAA;EAOrB,SAAA,CAAU,KAAA,WAAgB,SAAA;EAOpB,YAAA,CAAa,KAAA,WAAgB,OAAA,CAAQ,kBAAA;EAUrC,YAAA,CAAa,IAAA,EAAM,kBAAA,GAAqB,OAAA;EAexC,eAAA,CAAgB,KAAA,WAAgB,OAAA;EAIhC,oBAAA,CAAqB,UAAA,WAAqB,OAAA,CAAQ,kBAAA;AAAA;AAAA,cAa7C,2BAAA,YAAuC,qBAAA;EAAA,iBACjC,OAAA;EAAA,iBACA,IAAA;EAAA,iBACA,eAAA;cAEL,IAAA,GAAO,cAAA;EAInB,SAAA,CAAU,KAAA,WAAgB,SAAA;EAapB,YAAA,CAAa,KAAA,WAAgB,OAAA,CAAQ,kBAAA;EAIrC,YAAA,CAAa,IAAA,EAAM,kBAAA,GAAqB,OAAA;EAIxC,eAAA,CAAgB,KAAA,WAAgB,OAAA;EAIhC,oBAAA,CAAqB,UAAA,WAAqB,OAAA,CAAQ,kBAAA;AAAA"}
@@ -0,0 +1,154 @@
1
+ import { DEFAULT_INLINE_THRESHOLD } from "./inline-content.mjs";
2
+ import { VERSIONED_SCOPES_INDEX_SQL, VERSIONED_SCOPES_TABLE_SQL } from "./d1-schema.mjs";
3
+ import { D1TreeIndex } from "./d1-tree-index.mjs";
4
+ import { MemoryTreeIndex } from "./memory-tree-index.mjs";
5
+ import { SQLiteTreeIndex } from "./sqlite-tree-index.mjs";
6
+
7
+ //#region src/versioned-content-backends.ts
8
+ /**
9
+ * VersionedScopeBackend implementations — one per storage primitive
10
+ * (Node libsql / CF D1 / in-memory tests), mirroring the TreeIndex trio.
11
+ * All entries machinery is the TreeIndex itself; these only bind scopes and
12
+ * own the `versioned_scopes` metadata table (DDL in `d1-schema.ts`).
13
+ */
14
+ function rowToMeta(row) {
15
+ return {
16
+ scope: row.scope,
17
+ scopeGroup: row.scope_group,
18
+ seedDigest: row.seed_digest ?? void 0,
19
+ ingestedAt: Number(row.ingested_at ?? 0),
20
+ fileCount: Number(row.file_count ?? 0)
21
+ };
22
+ }
23
+ var LibsqlVersionedScopeBackend = class {
24
+ inlineThreshold;
25
+ constructor(db, opts) {
26
+ this.db = db;
27
+ this.inlineThreshold = opts?.inlineThreshold ?? DEFAULT_INLINE_THRESHOLD;
28
+ }
29
+ /** Idempotent CREATEs — call once at daemon startup. */
30
+ async ensureTable() {
31
+ await this.db.rawClient.execute(VERSIONED_SCOPES_TABLE_SQL);
32
+ for (const sql of VERSIONED_SCOPES_INDEX_SQL) await this.db.rawClient.execute(sql);
33
+ }
34
+ makeIndex(scope) {
35
+ return new SQLiteTreeIndex(this.db, scope, {
36
+ inlineCache: "on",
37
+ inlineThreshold: this.inlineThreshold
38
+ });
39
+ }
40
+ async getScopeMeta(scope) {
41
+ const row = (await this.db.rawClient.execute({
42
+ sql: "SELECT scope, scope_group, seed_digest, ingested_at, file_count FROM ds_versioned_scopes WHERE scope = ?",
43
+ args: [scope]
44
+ })).rows[0];
45
+ return row ? rowToMeta(row) : null;
46
+ }
47
+ async putScopeMeta(meta) {
48
+ await this.db.rawClient.execute({
49
+ sql: `INSERT INTO ds_versioned_scopes (scope, scope_group, seed_digest, ingested_at, file_count)
50
+ VALUES (?, ?, ?, ?, ?)
51
+ ON CONFLICT(scope) DO UPDATE SET
52
+ scope_group = excluded.scope_group,
53
+ seed_digest = excluded.seed_digest,
54
+ ingested_at = excluded.ingested_at,
55
+ file_count = excluded.file_count`,
56
+ args: [
57
+ meta.scope,
58
+ meta.scopeGroup,
59
+ meta.seedDigest ?? null,
60
+ meta.ingestedAt,
61
+ meta.fileCount
62
+ ]
63
+ });
64
+ }
65
+ async deleteScopeMeta(scope) {
66
+ await this.db.rawClient.execute({
67
+ sql: "DELETE FROM ds_versioned_scopes WHERE scope = ?",
68
+ args: [scope]
69
+ });
70
+ }
71
+ async listScopeMetaByGroup(scopeGroup) {
72
+ return (await this.db.rawClient.execute({
73
+ sql: "SELECT scope, scope_group, seed_digest, ingested_at, file_count FROM ds_versioned_scopes WHERE scope_group = ?",
74
+ args: [scopeGroup]
75
+ })).rows.map((row) => rowToMeta(row));
76
+ }
77
+ };
78
+ var D1VersionedScopeBackend = class {
79
+ inlineThreshold;
80
+ constructor(db, opts) {
81
+ this.db = db;
82
+ this.inlineThreshold = opts?.inlineThreshold ?? DEFAULT_INLINE_THRESHOLD;
83
+ }
84
+ /**
85
+ * Idempotent CREATEs — production gets the table via the generated 0103
86
+ * migration; this guard covers tests + fresh-DB bootstrap.
87
+ */
88
+ async ensureTable() {
89
+ await this.db.prepare(VERSIONED_SCOPES_TABLE_SQL).run();
90
+ for (const sql of VERSIONED_SCOPES_INDEX_SQL) await this.db.prepare(sql).run();
91
+ }
92
+ makeIndex(scope) {
93
+ return new D1TreeIndex(this.db, scope, {
94
+ inlineCache: "on",
95
+ inlineThreshold: this.inlineThreshold
96
+ });
97
+ }
98
+ async getScopeMeta(scope) {
99
+ const row = await this.db.prepare("SELECT scope, scope_group, seed_digest, ingested_at, file_count FROM ds_versioned_scopes WHERE scope = ?").bind(scope).first();
100
+ return row ? rowToMeta(row) : null;
101
+ }
102
+ async putScopeMeta(meta) {
103
+ await this.db.prepare(`INSERT INTO ds_versioned_scopes (scope, scope_group, seed_digest, ingested_at, file_count)
104
+ VALUES (?, ?, ?, ?, ?)
105
+ ON CONFLICT(scope) DO UPDATE SET
106
+ scope_group = excluded.scope_group,
107
+ seed_digest = excluded.seed_digest,
108
+ ingested_at = excluded.ingested_at,
109
+ file_count = excluded.file_count`).bind(meta.scope, meta.scopeGroup, meta.seedDigest ?? null, meta.ingestedAt, meta.fileCount).run();
110
+ }
111
+ async deleteScopeMeta(scope) {
112
+ await this.db.prepare("DELETE FROM ds_versioned_scopes WHERE scope = ?").bind(scope).run();
113
+ }
114
+ async listScopeMetaByGroup(scopeGroup) {
115
+ const { results } = await this.db.prepare("SELECT scope, scope_group, seed_digest, ingested_at, file_count FROM ds_versioned_scopes WHERE scope_group = ?").bind(scopeGroup).all();
116
+ return results.map(rowToMeta);
117
+ }
118
+ };
119
+ var MemoryVersionedScopeBackend = class {
120
+ indexes = /* @__PURE__ */ new Map();
121
+ meta = /* @__PURE__ */ new Map();
122
+ inlineThreshold;
123
+ constructor(opts) {
124
+ this.inlineThreshold = opts?.inlineThreshold ?? DEFAULT_INLINE_THRESHOLD;
125
+ }
126
+ makeIndex(scope) {
127
+ let index = this.indexes.get(scope);
128
+ if (!index) {
129
+ index = new MemoryTreeIndex({
130
+ scope,
131
+ inlineCache: "on",
132
+ inlineThreshold: this.inlineThreshold
133
+ });
134
+ this.indexes.set(scope, index);
135
+ }
136
+ return index;
137
+ }
138
+ async getScopeMeta(scope) {
139
+ return this.meta.get(scope) ?? null;
140
+ }
141
+ async putScopeMeta(meta) {
142
+ this.meta.set(meta.scope, { ...meta });
143
+ }
144
+ async deleteScopeMeta(scope) {
145
+ this.meta.delete(scope);
146
+ }
147
+ async listScopeMetaByGroup(scopeGroup) {
148
+ return [...this.meta.values()].filter((m) => m.scopeGroup === scopeGroup);
149
+ }
150
+ };
151
+
152
+ //#endregion
153
+ export { D1VersionedScopeBackend, LibsqlVersionedScopeBackend, MemoryVersionedScopeBackend };
154
+ //# sourceMappingURL=versioned-content-backends.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versioned-content-backends.mjs","names":[],"sources":["../src/versioned-content-backends.ts"],"sourcesContent":["/**\n * VersionedScopeBackend implementations — one per storage primitive\n * (Node libsql / CF D1 / in-memory tests), mirroring the TreeIndex trio.\n * All entries machinery is the TreeIndex itself; these only bind scopes and\n * own the `versioned_scopes` metadata table (DDL in `d1-schema.ts`).\n */\n\nimport { VERSIONED_SCOPES_INDEX_SQL, VERSIONED_SCOPES_TABLE_SQL } from \"./d1-schema.js\";\nimport { D1TreeIndex } from \"./d1-tree-index.js\";\nimport { DEFAULT_INLINE_THRESHOLD } from \"./inline-content.js\";\nimport { MemoryTreeIndex } from \"./memory-tree-index.js\";\nimport type { MetadataDB } from \"./metadata-db.js\";\nimport { SQLiteTreeIndex } from \"./sqlite-tree-index.js\";\nimport type { TreeIndex } from \"./tree-index.js\";\nimport type { VersionedScopeBackend, VersionedScopeMeta } from \"./versioned-content-store.js\";\n\ninterface BackendOptions {\n inlineThreshold?: number;\n}\n\nfunction rowToMeta(row: Record<string, unknown>): VersionedScopeMeta {\n return {\n scope: row.scope as string,\n scopeGroup: row.scope_group as string,\n seedDigest: (row.seed_digest as string | null) ?? undefined,\n ingestedAt: Number(row.ingested_at ?? 0),\n fileCount: Number(row.file_count ?? 0),\n };\n}\n\n// ── Node: libsql over a daemon-level MetadataDB ──────────────────────────────\n\nexport class LibsqlVersionedScopeBackend implements VersionedScopeBackend {\n private readonly inlineThreshold: number;\n\n constructor(\n private readonly db: MetadataDB,\n opts?: BackendOptions,\n ) {\n this.inlineThreshold = opts?.inlineThreshold ?? DEFAULT_INLINE_THRESHOLD;\n }\n\n /** Idempotent CREATEs — call once at daemon startup. */\n async ensureTable(): Promise<void> {\n await this.db.rawClient.execute(VERSIONED_SCOPES_TABLE_SQL);\n for (const sql of VERSIONED_SCOPES_INDEX_SQL) {\n await this.db.rawClient.execute(sql);\n }\n }\n\n makeIndex(scope: string): TreeIndex {\n return new SQLiteTreeIndex(this.db, scope, {\n inlineCache: \"on\",\n inlineThreshold: this.inlineThreshold,\n });\n }\n\n async getScopeMeta(scope: string): Promise<VersionedScopeMeta | null> {\n const r = await this.db.rawClient.execute({\n sql: \"SELECT scope, scope_group, seed_digest, ingested_at, file_count FROM ds_versioned_scopes WHERE scope = ?\",\n args: [scope],\n });\n const row = r.rows[0];\n return row ? rowToMeta(row as unknown as Record<string, unknown>) : null;\n }\n\n async putScopeMeta(meta: VersionedScopeMeta): Promise<void> {\n await this.db.rawClient.execute({\n sql: `INSERT INTO ds_versioned_scopes (scope, scope_group, seed_digest, ingested_at, file_count)\n VALUES (?, ?, ?, ?, ?)\n ON CONFLICT(scope) DO UPDATE SET\n scope_group = excluded.scope_group,\n seed_digest = excluded.seed_digest,\n ingested_at = excluded.ingested_at,\n file_count = excluded.file_count`,\n args: [meta.scope, meta.scopeGroup, meta.seedDigest ?? null, meta.ingestedAt, meta.fileCount],\n });\n }\n\n async deleteScopeMeta(scope: string): Promise<void> {\n await this.db.rawClient.execute({\n sql: \"DELETE FROM ds_versioned_scopes WHERE scope = ?\",\n args: [scope],\n });\n }\n\n async listScopeMetaByGroup(scopeGroup: string): Promise<VersionedScopeMeta[]> {\n const r = await this.db.rawClient.execute({\n sql: \"SELECT scope, scope_group, seed_digest, ingested_at, file_count FROM ds_versioned_scopes WHERE scope_group = ?\",\n args: [scopeGroup],\n });\n return r.rows.map((row) => rowToMeta(row as unknown as Record<string, unknown>));\n }\n}\n\n// ── Cloudflare: shared D1 binding ────────────────────────────────────────────\n\nexport class D1VersionedScopeBackend implements VersionedScopeBackend {\n private readonly inlineThreshold: number;\n\n constructor(\n private readonly db: D1Database,\n opts?: BackendOptions,\n ) {\n this.inlineThreshold = opts?.inlineThreshold ?? DEFAULT_INLINE_THRESHOLD;\n }\n\n /**\n * Idempotent CREATEs — production gets the table via the generated 0103\n * migration; this guard covers tests + fresh-DB bootstrap.\n */\n async ensureTable(): Promise<void> {\n await this.db.prepare(VERSIONED_SCOPES_TABLE_SQL).run();\n for (const sql of VERSIONED_SCOPES_INDEX_SQL) {\n await this.db.prepare(sql).run();\n }\n }\n\n makeIndex(scope: string): TreeIndex {\n return new D1TreeIndex(this.db, scope, {\n inlineCache: \"on\",\n inlineThreshold: this.inlineThreshold,\n });\n }\n\n async getScopeMeta(scope: string): Promise<VersionedScopeMeta | null> {\n const row = await this.db\n .prepare(\n \"SELECT scope, scope_group, seed_digest, ingested_at, file_count FROM ds_versioned_scopes WHERE scope = ?\",\n )\n .bind(scope)\n .first<Record<string, unknown>>();\n return row ? rowToMeta(row) : null;\n }\n\n async putScopeMeta(meta: VersionedScopeMeta): Promise<void> {\n await this.db\n .prepare(\n `INSERT INTO ds_versioned_scopes (scope, scope_group, seed_digest, ingested_at, file_count)\n VALUES (?, ?, ?, ?, ?)\n ON CONFLICT(scope) DO UPDATE SET\n scope_group = excluded.scope_group,\n seed_digest = excluded.seed_digest,\n ingested_at = excluded.ingested_at,\n file_count = excluded.file_count`,\n )\n .bind(meta.scope, meta.scopeGroup, meta.seedDigest ?? null, meta.ingestedAt, meta.fileCount)\n .run();\n }\n\n async deleteScopeMeta(scope: string): Promise<void> {\n await this.db.prepare(\"DELETE FROM ds_versioned_scopes WHERE scope = ?\").bind(scope).run();\n }\n\n async listScopeMetaByGroup(scopeGroup: string): Promise<VersionedScopeMeta[]> {\n const { results } = await this.db\n .prepare(\n \"SELECT scope, scope_group, seed_digest, ingested_at, file_count FROM ds_versioned_scopes WHERE scope_group = ?\",\n )\n .bind(scopeGroup)\n .all<Record<string, unknown>>();\n return results.map(rowToMeta);\n }\n}\n\n// ── In-memory (tests) ────────────────────────────────────────────────────────\n\nexport class MemoryVersionedScopeBackend implements VersionedScopeBackend {\n private readonly indexes = new Map<string, MemoryTreeIndex>();\n private readonly meta = new Map<string, VersionedScopeMeta>();\n private readonly inlineThreshold: number;\n\n constructor(opts?: BackendOptions) {\n this.inlineThreshold = opts?.inlineThreshold ?? DEFAULT_INLINE_THRESHOLD;\n }\n\n makeIndex(scope: string): TreeIndex {\n let index = this.indexes.get(scope);\n if (!index) {\n index = new MemoryTreeIndex({\n scope,\n inlineCache: \"on\",\n inlineThreshold: this.inlineThreshold,\n });\n this.indexes.set(scope, index);\n }\n return index;\n }\n\n async getScopeMeta(scope: string): Promise<VersionedScopeMeta | null> {\n return this.meta.get(scope) ?? null;\n }\n\n async putScopeMeta(meta: VersionedScopeMeta): Promise<void> {\n this.meta.set(meta.scope, { ...meta });\n }\n\n async deleteScopeMeta(scope: string): Promise<void> {\n this.meta.delete(scope);\n }\n\n async listScopeMetaByGroup(scopeGroup: string): Promise<VersionedScopeMeta[]> {\n return [...this.meta.values()].filter((m) => m.scopeGroup === scopeGroup);\n }\n}\n"],"mappings":";;;;;;;;;;;;;AAoBA,SAAS,UAAU,KAAkD;AACnE,QAAO;EACL,OAAO,IAAI;EACX,YAAY,IAAI;EAChB,YAAa,IAAI,eAAiC;EAClD,YAAY,OAAO,IAAI,eAAe,EAAE;EACxC,WAAW,OAAO,IAAI,cAAc,EAAE;EACvC;;AAKH,IAAa,8BAAb,MAA0E;CACxE,AAAiB;CAEjB,YACE,AAAiB,IACjB,MACA;EAFiB;AAGjB,OAAK,kBAAkB,MAAM,mBAAmB;;;CAIlD,MAAM,cAA6B;AACjC,QAAM,KAAK,GAAG,UAAU,QAAQ,2BAA2B;AAC3D,OAAK,MAAM,OAAO,2BAChB,OAAM,KAAK,GAAG,UAAU,QAAQ,IAAI;;CAIxC,UAAU,OAA0B;AAClC,SAAO,IAAI,gBAAgB,KAAK,IAAI,OAAO;GACzC,aAAa;GACb,iBAAiB,KAAK;GACvB,CAAC;;CAGJ,MAAM,aAAa,OAAmD;EAKpE,MAAM,OAJI,MAAM,KAAK,GAAG,UAAU,QAAQ;GACxC,KAAK;GACL,MAAM,CAAC,MAAM;GACd,CAAC,EACY,KAAK;AACnB,SAAO,MAAM,UAAU,IAA0C,GAAG;;CAGtE,MAAM,aAAa,MAAyC;AAC1D,QAAM,KAAK,GAAG,UAAU,QAAQ;GAC9B,KAAK;;;;;;;GAOL,MAAM;IAAC,KAAK;IAAO,KAAK;IAAY,KAAK,cAAc;IAAM,KAAK;IAAY,KAAK;IAAU;GAC9F,CAAC;;CAGJ,MAAM,gBAAgB,OAA8B;AAClD,QAAM,KAAK,GAAG,UAAU,QAAQ;GAC9B,KAAK;GACL,MAAM,CAAC,MAAM;GACd,CAAC;;CAGJ,MAAM,qBAAqB,YAAmD;AAK5E,UAJU,MAAM,KAAK,GAAG,UAAU,QAAQ;GACxC,KAAK;GACL,MAAM,CAAC,WAAW;GACnB,CAAC,EACO,KAAK,KAAK,QAAQ,UAAU,IAA0C,CAAC;;;AAMpF,IAAa,0BAAb,MAAsE;CACpE,AAAiB;CAEjB,YACE,AAAiB,IACjB,MACA;EAFiB;AAGjB,OAAK,kBAAkB,MAAM,mBAAmB;;;;;;CAOlD,MAAM,cAA6B;AACjC,QAAM,KAAK,GAAG,QAAQ,2BAA2B,CAAC,KAAK;AACvD,OAAK,MAAM,OAAO,2BAChB,OAAM,KAAK,GAAG,QAAQ,IAAI,CAAC,KAAK;;CAIpC,UAAU,OAA0B;AAClC,SAAO,IAAI,YAAY,KAAK,IAAI,OAAO;GACrC,aAAa;GACb,iBAAiB,KAAK;GACvB,CAAC;;CAGJ,MAAM,aAAa,OAAmD;EACpE,MAAM,MAAM,MAAM,KAAK,GACpB,QACC,2GACD,CACA,KAAK,MAAM,CACX,OAAgC;AACnC,SAAO,MAAM,UAAU,IAAI,GAAG;;CAGhC,MAAM,aAAa,MAAyC;AAC1D,QAAM,KAAK,GACR,QACC;;;;;;6CAOD,CACA,KAAK,KAAK,OAAO,KAAK,YAAY,KAAK,cAAc,MAAM,KAAK,YAAY,KAAK,UAAU,CAC3F,KAAK;;CAGV,MAAM,gBAAgB,OAA8B;AAClD,QAAM,KAAK,GAAG,QAAQ,kDAAkD,CAAC,KAAK,MAAM,CAAC,KAAK;;CAG5F,MAAM,qBAAqB,YAAmD;EAC5E,MAAM,EAAE,YAAY,MAAM,KAAK,GAC5B,QACC,iHACD,CACA,KAAK,WAAW,CAChB,KAA8B;AACjC,SAAO,QAAQ,IAAI,UAAU;;;AAMjC,IAAa,8BAAb,MAA0E;CACxE,AAAiB,0BAAU,IAAI,KAA8B;CAC7D,AAAiB,uBAAO,IAAI,KAAiC;CAC7D,AAAiB;CAEjB,YAAY,MAAuB;AACjC,OAAK,kBAAkB,MAAM,mBAAmB;;CAGlD,UAAU,OAA0B;EAClC,IAAI,QAAQ,KAAK,QAAQ,IAAI,MAAM;AACnC,MAAI,CAAC,OAAO;AACV,WAAQ,IAAI,gBAAgB;IAC1B;IACA,aAAa;IACb,iBAAiB,KAAK;IACvB,CAAC;AACF,QAAK,QAAQ,IAAI,OAAO,MAAM;;AAEhC,SAAO;;CAGT,MAAM,aAAa,OAAmD;AACpE,SAAO,KAAK,KAAK,IAAI,MAAM,IAAI;;CAGjC,MAAM,aAAa,MAAyC;AAC1D,OAAK,KAAK,IAAI,KAAK,OAAO,EAAE,GAAG,MAAM,CAAC;;CAGxC,MAAM,gBAAgB,OAA8B;AAClD,OAAK,KAAK,OAAO,MAAM;;CAGzB,MAAM,qBAAqB,YAAmD;AAC5E,SAAO,CAAC,GAAG,KAAK,KAAK,QAAQ,CAAC,CAAC,QAAQ,MAAM,EAAE,eAAe,WAAW"}
@@ -0,0 +1,102 @@
1
+ const require_cid = require('./cid.cjs');
2
+ const require_inline_content = require('./inline-content.cjs');
3
+
4
+ //#region src/versioned-content-index.ts
5
+ /**
6
+ * VersionedContentIndex — a PURE DERIVED INDEX over a TreeIndex (Layer 1
7
+ * machinery; contract in `inline-content.ts` clause 2b + `versioned-scope.ts`).
8
+ *
9
+ * NOT a CAS store: there is no object backend; the inline `content` column IS
10
+ * the primary data and the cid is merely a checksum. The authority is the
11
+ * ingested source (a package's immutable, per-version content) — rebuilding
12
+ * from source is always possible, so:
13
+ *
14
+ * - writes NEVER touch the changelog (`skipChangelog: true`, enforced HERE,
15
+ * not at call sites — a derived index has nothing to sync);
16
+ * - `deviceId` is the fixed sentinel {@link INGEST_DEVICE_ID};
17
+ * - content is REQUIRED on every write, and content over the threshold is
18
+ * a HARD ERROR (there is no blob to fall back to);
19
+ * - the wrapped index MUST be constructed with `inlineCache: "on"` and the
20
+ * same threshold — the first write VERIFIES the content actually landed
21
+ * inline and fails loudly on a misconfigured store.
22
+ *
23
+ * Kind-agnostic: this class never interprets what it stores. Consumers pick a
24
+ * scope key via `versionedScope(kind, packageId, versionToken)` and bind the
25
+ * wrapped TreeIndex to that scope; ingest/stale/cleanup live one level up.
26
+ */
27
+ var VersionedContentIndex = class {
28
+ index;
29
+ inlineThreshold;
30
+ /** First successful write verifies the wrapped index actually inlines. */
31
+ verifiedInline = false;
32
+ constructor(opts) {
33
+ this.index = opts.index;
34
+ this.inlineThreshold = opts.inlineThreshold ?? require_inline_content.DEFAULT_INLINE_THRESHOLD;
35
+ require_inline_content.assertInlineThreshold(this.inlineThreshold);
36
+ }
37
+ /** Write one file (idempotent upsert by path). */
38
+ async put(file, mtime = 0) {
39
+ await this.putBatch([file], mtime);
40
+ }
41
+ /**
42
+ * Write a batch of files (idempotent upsert by path). Enforces the derived-
43
+ * index invariants: content required, over-threshold hard error, changelog
44
+ * skipped, ingest device sentinel.
45
+ */
46
+ async putBatch(files, mtime = 0) {
47
+ if (files.length === 0) return;
48
+ const entries = [];
49
+ for (const file of files) {
50
+ if (typeof file.content !== "string") throw new Error(`VersionedContentIndex: content is required for "${file.path}"`);
51
+ if (file.content.includes("\0")) throw new Error(`VersionedContentIndex: "${file.path}" contains an embedded NUL — not storable as derived text content`);
52
+ const bytes = require_inline_content.utf8ByteLength(file.content);
53
+ if (bytes > this.inlineThreshold) throw new Error(`VersionedContentIndex: "${file.path}" is ${bytes} bytes — over the ${this.inlineThreshold}-byte inline threshold (a derived index has no blob fallback; raise the threshold or shrink the source)`);
54
+ const cid = await require_cid.computeCID(file.content);
55
+ entries.push({
56
+ path: file.path,
57
+ entry: {
58
+ cid,
59
+ size: bytes,
60
+ mtime,
61
+ ctime: mtime,
62
+ mimeType: file.mimeType,
63
+ content: file.content
64
+ }
65
+ });
66
+ }
67
+ await this.index.putBatch(entries, {
68
+ deviceId: require_inline_content.INGEST_DEVICE_ID,
69
+ skipChangelog: true
70
+ });
71
+ if (!this.verifiedInline) {
72
+ const probe = entries[0];
73
+ if ((await this.index.get(probe.path))?.content !== probe.entry.content) throw new Error("VersionedContentIndex: wrapped index did not store inline content — construct it with inlineCache: \"on\" and a matching threshold");
74
+ this.verifiedInline = true;
75
+ }
76
+ }
77
+ /** Read one file's content (null when absent). */
78
+ async get(path) {
79
+ return (await this.index.get(path))?.content ?? null;
80
+ }
81
+ /** Bulk read — one query, content included. */
82
+ async listEntries(prefix = "", limit = 1e3) {
83
+ return this.index.listEntries(prefix, {
84
+ includeContent: true,
85
+ limit
86
+ });
87
+ }
88
+ /** Does this scope hold any content? */
89
+ async hasContent() {
90
+ return this.index.hasChildren("");
91
+ }
92
+ /** Drop every row in the scope (version cleanup = one DELETE). */
93
+ async deleteAll() {
94
+ return this.index.deleteByPrefix("", {
95
+ deviceId: require_inline_content.INGEST_DEVICE_ID,
96
+ skipChangelog: true
97
+ });
98
+ }
99
+ };
100
+
101
+ //#endregion
102
+ exports.VersionedContentIndex = VersionedContentIndex;
@@ -0,0 +1,46 @@
1
+ import { TreeIndex, TreeIndexListEntriesResult } from "./tree-index.cjs";
2
+
3
+ //#region src/versioned-content-index.d.ts
4
+ interface VersionedContentFile {
5
+ /** Index-relative path (e.g. `general/title.json`). */
6
+ path: string;
7
+ /** Primary data — required (this store has no other copy). */
8
+ content: string;
9
+ mimeType?: string;
10
+ }
11
+ interface VersionedContentIndexOptions {
12
+ /**
13
+ * Scope-bound TreeIndex over the shared store. MUST be constructed with
14
+ * `inlineCache: "on"` and a threshold ≥ this index's threshold (verified on
15
+ * first write).
16
+ */
17
+ index: TreeIndex;
18
+ /** Max bytes per file — over it is a HARD ERROR. Default 4KB. */
19
+ inlineThreshold?: number;
20
+ }
21
+ declare class VersionedContentIndex {
22
+ private readonly index;
23
+ private readonly inlineThreshold;
24
+ /** First successful write verifies the wrapped index actually inlines. */
25
+ private verifiedInline;
26
+ constructor(opts: VersionedContentIndexOptions);
27
+ /** Write one file (idempotent upsert by path). */
28
+ put(file: VersionedContentFile, mtime?: number): Promise<void>;
29
+ /**
30
+ * Write a batch of files (idempotent upsert by path). Enforces the derived-
31
+ * index invariants: content required, over-threshold hard error, changelog
32
+ * skipped, ingest device sentinel.
33
+ */
34
+ putBatch(files: readonly VersionedContentFile[], mtime?: number): Promise<void>;
35
+ /** Read one file's content (null when absent). */
36
+ get(path: string): Promise<string | null>;
37
+ /** Bulk read — one query, content included. */
38
+ listEntries(prefix?: string, limit?: number): Promise<TreeIndexListEntriesResult>;
39
+ /** Does this scope hold any content? */
40
+ hasContent(): Promise<boolean>;
41
+ /** Drop every row in the scope (version cleanup = one DELETE). */
42
+ deleteAll(): Promise<number>;
43
+ }
44
+ //#endregion
45
+ export { VersionedContentFile, VersionedContentIndex, VersionedContentIndexOptions };
46
+ //# sourceMappingURL=versioned-content-index.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versioned-content-index.d.cts","names":[],"sources":["../src/versioned-content-index.ts"],"mappings":";;;UAgCiB,oBAAA;EAyBG;EAvBlB,IAAA;EA8BkD;EA5BlD,OAAA;EACA,QAAA;AAAA;AAAA,UAGe,4BAAA;EA0F+B;;;;;EApF9C,KAAA,EAAO,SAAA;EAOU;EALjB,eAAA;AAAA;AAAA,cAGW,qBAAA;EAAA,iBACM,KAAA;EAAA,iBACA,eAAA;EAWD;EAAA,QATR,cAAA;cAEI,IAAA,EAAM,4BAAA;EAOgC;EAA5C,GAAA,CAAI,IAAA,EAAM,oBAAA,EAAsB,KAAA,YAAY,OAAA;EASnB;;;;;EAAzB,QAAA,CAAS,KAAA,WAAgB,oBAAA,IAAwB,KAAA,YAAY,OAAA;EAmD1C;EAAnB,GAAA,CAAI,IAAA,WAAe,OAAA;EAMP;EAAZ,WAAA,CAAY,MAAA,WAAa,KAAA,YAAe,OAAA,CAAQ,0BAAA;EAAR;EAKxC,UAAA,CAAA,GAAc,OAAA;EAAd;EAKA,SAAA,CAAA,GAAa,OAAA;AAAA"}
@@ -0,0 +1,46 @@
1
+ import { TreeIndex, TreeIndexListEntriesResult } from "./tree-index.mjs";
2
+
3
+ //#region src/versioned-content-index.d.ts
4
+ interface VersionedContentFile {
5
+ /** Index-relative path (e.g. `general/title.json`). */
6
+ path: string;
7
+ /** Primary data — required (this store has no other copy). */
8
+ content: string;
9
+ mimeType?: string;
10
+ }
11
+ interface VersionedContentIndexOptions {
12
+ /**
13
+ * Scope-bound TreeIndex over the shared store. MUST be constructed with
14
+ * `inlineCache: "on"` and a threshold ≥ this index's threshold (verified on
15
+ * first write).
16
+ */
17
+ index: TreeIndex;
18
+ /** Max bytes per file — over it is a HARD ERROR. Default 4KB. */
19
+ inlineThreshold?: number;
20
+ }
21
+ declare class VersionedContentIndex {
22
+ private readonly index;
23
+ private readonly inlineThreshold;
24
+ /** First successful write verifies the wrapped index actually inlines. */
25
+ private verifiedInline;
26
+ constructor(opts: VersionedContentIndexOptions);
27
+ /** Write one file (idempotent upsert by path). */
28
+ put(file: VersionedContentFile, mtime?: number): Promise<void>;
29
+ /**
30
+ * Write a batch of files (idempotent upsert by path). Enforces the derived-
31
+ * index invariants: content required, over-threshold hard error, changelog
32
+ * skipped, ingest device sentinel.
33
+ */
34
+ putBatch(files: readonly VersionedContentFile[], mtime?: number): Promise<void>;
35
+ /** Read one file's content (null when absent). */
36
+ get(path: string): Promise<string | null>;
37
+ /** Bulk read — one query, content included. */
38
+ listEntries(prefix?: string, limit?: number): Promise<TreeIndexListEntriesResult>;
39
+ /** Does this scope hold any content? */
40
+ hasContent(): Promise<boolean>;
41
+ /** Drop every row in the scope (version cleanup = one DELETE). */
42
+ deleteAll(): Promise<number>;
43
+ }
44
+ //#endregion
45
+ export { VersionedContentFile, VersionedContentIndex, VersionedContentIndexOptions };
46
+ //# sourceMappingURL=versioned-content-index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versioned-content-index.d.mts","names":[],"sources":["../src/versioned-content-index.ts"],"mappings":";;;UAgCiB,oBAAA;EAyBG;EAvBlB,IAAA;EA8BkD;EA5BlD,OAAA;EACA,QAAA;AAAA;AAAA,UAGe,4BAAA;EA0F+B;;;;;EApF9C,KAAA,EAAO,SAAA;EAOU;EALjB,eAAA;AAAA;AAAA,cAGW,qBAAA;EAAA,iBACM,KAAA;EAAA,iBACA,eAAA;EAWD;EAAA,QATR,cAAA;cAEI,IAAA,EAAM,4BAAA;EAOgC;EAA5C,GAAA,CAAI,IAAA,EAAM,oBAAA,EAAsB,KAAA,YAAY,OAAA;EASnB;;;;;EAAzB,QAAA,CAAS,KAAA,WAAgB,oBAAA,IAAwB,KAAA,YAAY,OAAA;EAmD1C;EAAnB,GAAA,CAAI,IAAA,WAAe,OAAA;EAMP;EAAZ,WAAA,CAAY,MAAA,WAAa,KAAA,YAAe,OAAA,CAAQ,0BAAA;EAAR;EAKxC,UAAA,CAAA,GAAc,OAAA;EAAd;EAKA,SAAA,CAAA,GAAa,OAAA;AAAA"}