@vibesdotdev/storage 0.0.1

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 (423) hide show
  1. package/README.md +75 -0
  2. package/SPEC.md +60 -0
  3. package/dist/adapters/index.d.ts +14 -0
  4. package/dist/adapters/index.d.ts.map +1 -0
  5. package/dist/adapters/index.js +15 -0
  6. package/dist/adapters/index.js.map +1 -0
  7. package/dist/bridge/index.d.ts +3 -0
  8. package/dist/bridge/index.d.ts.map +1 -0
  9. package/dist/bridge/index.js +2 -0
  10. package/dist/bridge/index.js.map +1 -0
  11. package/dist/bridge/storage-kind-bridge.d.ts +27 -0
  12. package/dist/bridge/storage-kind-bridge.d.ts.map +1 -0
  13. package/dist/bridge/storage-kind-bridge.js +110 -0
  14. package/dist/bridge/storage-kind-bridge.js.map +1 -0
  15. package/dist/bridge/types.d.ts +45 -0
  16. package/dist/bridge/types.d.ts.map +1 -0
  17. package/dist/bridge/types.js +8 -0
  18. package/dist/bridge/types.js.map +1 -0
  19. package/dist/cli/commands/list/storage.list.cli-command.descriptor.d.ts +4 -0
  20. package/dist/cli/commands/list/storage.list.cli-command.descriptor.d.ts.map +1 -0
  21. package/dist/cli/commands/list/storage.list.cli-command.descriptor.js +18 -0
  22. package/dist/cli/commands/list/storage.list.cli-command.descriptor.js.map +1 -0
  23. package/dist/cli/commands/list/storage.list.cli-command.impl.d.ts +11 -0
  24. package/dist/cli/commands/list/storage.list.cli-command.impl.d.ts.map +1 -0
  25. package/dist/cli/commands/list/storage.list.cli-command.impl.js +48 -0
  26. package/dist/cli/commands/list/storage.list.cli-command.impl.js.map +1 -0
  27. package/dist/cli/commands/sync/pull/storage.sync.pull.cli-command.descriptor.d.ts +4 -0
  28. package/dist/cli/commands/sync/pull/storage.sync.pull.cli-command.descriptor.d.ts.map +1 -0
  29. package/dist/cli/commands/sync/pull/storage.sync.pull.cli-command.descriptor.js +26 -0
  30. package/dist/cli/commands/sync/pull/storage.sync.pull.cli-command.descriptor.js.map +1 -0
  31. package/dist/cli/commands/sync/pull/storage.sync.pull.cli-command.impl.d.ts +13 -0
  32. package/dist/cli/commands/sync/pull/storage.sync.pull.cli-command.impl.d.ts.map +1 -0
  33. package/dist/cli/commands/sync/pull/storage.sync.pull.cli-command.impl.js +136 -0
  34. package/dist/cli/commands/sync/pull/storage.sync.pull.cli-command.impl.js.map +1 -0
  35. package/dist/cli/commands/sync/push/storage.sync.push.cli-command.descriptor.d.ts +4 -0
  36. package/dist/cli/commands/sync/push/storage.sync.push.cli-command.descriptor.d.ts.map +1 -0
  37. package/dist/cli/commands/sync/push/storage.sync.push.cli-command.descriptor.js +26 -0
  38. package/dist/cli/commands/sync/push/storage.sync.push.cli-command.descriptor.js.map +1 -0
  39. package/dist/cli/commands/sync/push/storage.sync.push.cli-command.impl.d.ts +13 -0
  40. package/dist/cli/commands/sync/push/storage.sync.push.cli-command.impl.d.ts.map +1 -0
  41. package/dist/cli/commands/sync/push/storage.sync.push.cli-command.impl.js +165 -0
  42. package/dist/cli/commands/sync/push/storage.sync.push.cli-command.impl.js.map +1 -0
  43. package/dist/cli/commands/sync/resolve/storage.sync.resolve.cli-command.descriptor.d.ts +4 -0
  44. package/dist/cli/commands/sync/resolve/storage.sync.resolve.cli-command.descriptor.d.ts.map +1 -0
  45. package/dist/cli/commands/sync/resolve/storage.sync.resolve.cli-command.descriptor.js +20 -0
  46. package/dist/cli/commands/sync/resolve/storage.sync.resolve.cli-command.descriptor.js.map +1 -0
  47. package/dist/cli/commands/sync/resolve/storage.sync.resolve.cli-command.impl.d.ts +12 -0
  48. package/dist/cli/commands/sync/resolve/storage.sync.resolve.cli-command.impl.d.ts.map +1 -0
  49. package/dist/cli/commands/sync/resolve/storage.sync.resolve.cli-command.impl.js +95 -0
  50. package/dist/cli/commands/sync/resolve/storage.sync.resolve.cli-command.impl.js.map +1 -0
  51. package/dist/cli/commands/sync/status/storage.sync.status.cli-command.descriptor.d.ts +4 -0
  52. package/dist/cli/commands/sync/status/storage.sync.status.cli-command.descriptor.d.ts.map +1 -0
  53. package/dist/cli/commands/sync/status/storage.sync.status.cli-command.descriptor.js +15 -0
  54. package/dist/cli/commands/sync/status/storage.sync.status.cli-command.descriptor.js.map +1 -0
  55. package/dist/cli/commands/sync/status/storage.sync.status.cli-command.impl.d.ts +13 -0
  56. package/dist/cli/commands/sync/status/storage.sync.status.cli-command.impl.d.ts.map +1 -0
  57. package/dist/cli/commands/sync/status/storage.sync.status.cli-command.impl.js +150 -0
  58. package/dist/cli/commands/sync/status/storage.sync.status.cli-command.impl.js.map +1 -0
  59. package/dist/cli/context.consumer.d.ts +26 -0
  60. package/dist/cli/context.consumer.d.ts.map +1 -0
  61. package/dist/cli/context.consumer.js +164 -0
  62. package/dist/cli/context.consumer.js.map +1 -0
  63. package/dist/cli/storage.cli-group.descriptor.d.ts +4 -0
  64. package/dist/cli/storage.cli-group.descriptor.d.ts.map +1 -0
  65. package/dist/cli/storage.cli-group.descriptor.js +11 -0
  66. package/dist/cli/storage.cli-group.descriptor.js.map +1 -0
  67. package/dist/cli/storage.sync.cli-group.descriptor.d.ts +4 -0
  68. package/dist/cli/storage.sync.cli-group.descriptor.d.ts.map +1 -0
  69. package/dist/cli/storage.sync.cli-group.descriptor.js +12 -0
  70. package/dist/cli/storage.sync.cli-group.descriptor.js.map +1 -0
  71. package/dist/cli/types.d.ts +26 -0
  72. package/dist/cli/types.d.ts.map +1 -0
  73. package/dist/cli/types.js +11 -0
  74. package/dist/cli/types.js.map +1 -0
  75. package/dist/client/index.d.ts +10 -0
  76. package/dist/client/index.d.ts.map +1 -0
  77. package/dist/client/index.js +10 -0
  78. package/dist/client/index.js.map +1 -0
  79. package/dist/client/list-browsable-adapters.d.ts +31 -0
  80. package/dist/client/list-browsable-adapters.d.ts.map +1 -0
  81. package/dist/client/list-browsable-adapters.js +40 -0
  82. package/dist/client/list-browsable-adapters.js.map +1 -0
  83. package/dist/daemon/commands/sync.d.ts +23 -0
  84. package/dist/daemon/commands/sync.d.ts.map +1 -0
  85. package/dist/daemon/commands/sync.js +169 -0
  86. package/dist/daemon/commands/sync.js.map +1 -0
  87. package/dist/docs/adapters.docs.descriptor.d.ts +4 -0
  88. package/dist/docs/adapters.docs.descriptor.d.ts.map +1 -0
  89. package/dist/docs/adapters.docs.descriptor.js +223 -0
  90. package/dist/docs/adapters.docs.descriptor.js.map +1 -0
  91. package/dist/docs/manifests.docs.descriptor.d.ts +4 -0
  92. package/dist/docs/manifests.docs.descriptor.d.ts.map +1 -0
  93. package/dist/docs/manifests.docs.descriptor.js +316 -0
  94. package/dist/docs/manifests.docs.descriptor.js.map +1 -0
  95. package/dist/docs/records.docs.descriptor.d.ts +4 -0
  96. package/dist/docs/records.docs.descriptor.d.ts.map +1 -0
  97. package/dist/docs/records.docs.descriptor.js +269 -0
  98. package/dist/docs/records.docs.descriptor.js.map +1 -0
  99. package/dist/docs/sync.docs.descriptor.d.ts +4 -0
  100. package/dist/docs/sync.docs.descriptor.d.ts.map +1 -0
  101. package/dist/docs/sync.docs.descriptor.js +279 -0
  102. package/dist/docs/sync.docs.descriptor.js.map +1 -0
  103. package/dist/index.d.ts +27 -0
  104. package/dist/index.d.ts.map +1 -0
  105. package/dist/index.js +29 -0
  106. package/dist/index.js.map +1 -0
  107. package/dist/interfaces/adapter.d.ts +382 -0
  108. package/dist/interfaces/adapter.d.ts.map +1 -0
  109. package/dist/interfaces/adapter.js +11 -0
  110. package/dist/interfaces/adapter.js.map +1 -0
  111. package/dist/interfaces/document-store.d.ts +62 -0
  112. package/dist/interfaces/document-store.d.ts.map +1 -0
  113. package/dist/interfaces/document-store.js +8 -0
  114. package/dist/interfaces/document-store.js.map +1 -0
  115. package/dist/interfaces/index.d.ts +17 -0
  116. package/dist/interfaces/index.d.ts.map +1 -0
  117. package/dist/interfaces/index.js +24 -0
  118. package/dist/interfaces/index.js.map +1 -0
  119. package/dist/interfaces/key-value.d.ts +95 -0
  120. package/dist/interfaces/key-value.d.ts.map +1 -0
  121. package/dist/interfaces/key-value.js +8 -0
  122. package/dist/interfaces/key-value.js.map +1 -0
  123. package/dist/interfaces/query-builder.d.ts +31 -0
  124. package/dist/interfaces/query-builder.d.ts.map +1 -0
  125. package/dist/interfaces/query-builder.js +11 -0
  126. package/dist/interfaces/query-builder.js.map +1 -0
  127. package/dist/interfaces/record/index.d.ts +7 -0
  128. package/dist/interfaces/record/index.d.ts.map +1 -0
  129. package/dist/interfaces/record/index.js +7 -0
  130. package/dist/interfaces/record/index.js.map +1 -0
  131. package/dist/interfaces/record/interface.d.ts +593 -0
  132. package/dist/interfaces/record/interface.d.ts.map +1 -0
  133. package/dist/interfaces/record/interface.js +49 -0
  134. package/dist/interfaces/record/interface.js.map +1 -0
  135. package/dist/interfaces/repository.d.ts +262 -0
  136. package/dist/interfaces/repository.d.ts.map +1 -0
  137. package/dist/interfaces/repository.js +8 -0
  138. package/dist/interfaces/repository.js.map +1 -0
  139. package/dist/interfaces/schema/index.d.ts +8 -0
  140. package/dist/interfaces/schema/index.d.ts.map +1 -0
  141. package/dist/interfaces/schema/index.js +10 -0
  142. package/dist/interfaces/schema/index.js.map +1 -0
  143. package/dist/interfaces/schema/schema-interface.d.ts +516 -0
  144. package/dist/interfaces/schema/schema-interface.d.ts.map +1 -0
  145. package/dist/interfaces/schema/schema-interface.js +31 -0
  146. package/dist/interfaces/schema/schema-interface.js.map +1 -0
  147. package/dist/interfaces/schema/table-interface.d.ts +250 -0
  148. package/dist/interfaces/schema/table-interface.d.ts.map +1 -0
  149. package/dist/interfaces/schema/table-interface.js +31 -0
  150. package/dist/interfaces/schema/table-interface.js.map +1 -0
  151. package/dist/interfaces/storage-consumer-fs.d.ts +40 -0
  152. package/dist/interfaces/storage-consumer-fs.d.ts.map +1 -0
  153. package/dist/interfaces/storage-consumer-fs.js +42 -0
  154. package/dist/interfaces/storage-consumer-fs.js.map +1 -0
  155. package/dist/manifest/base.d.ts +187 -0
  156. package/dist/manifest/base.d.ts.map +1 -0
  157. package/dist/manifest/base.js +516 -0
  158. package/dist/manifest/base.js.map +1 -0
  159. package/dist/manifest/cloud-sync.consumer.d.ts +7 -0
  160. package/dist/manifest/cloud-sync.consumer.d.ts.map +1 -0
  161. package/dist/manifest/cloud-sync.consumer.js +82 -0
  162. package/dist/manifest/cloud-sync.consumer.js.map +1 -0
  163. package/dist/manifest/index.d.ts +7 -0
  164. package/dist/manifest/index.d.ts.map +1 -0
  165. package/dist/manifest/index.js +7 -0
  166. package/dist/manifest/index.js.map +1 -0
  167. package/dist/manifest/source-policy.d.ts +8 -0
  168. package/dist/manifest/source-policy.d.ts.map +1 -0
  169. package/dist/manifest/source-policy.js +62 -0
  170. package/dist/manifest/source-policy.js.map +1 -0
  171. package/dist/paths.d.ts +6 -0
  172. package/dist/paths.d.ts.map +1 -0
  173. package/dist/paths.js +152 -0
  174. package/dist/paths.js.map +1 -0
  175. package/dist/policy/context.d.ts +9 -0
  176. package/dist/policy/context.d.ts.map +1 -0
  177. package/dist/policy/context.js +29 -0
  178. package/dist/policy/context.js.map +1 -0
  179. package/dist/policy/index.d.ts +4 -0
  180. package/dist/policy/index.d.ts.map +1 -0
  181. package/dist/policy/index.js +4 -0
  182. package/dist/policy/index.js.map +1 -0
  183. package/dist/policy/overrides.d.ts +40 -0
  184. package/dist/policy/overrides.d.ts.map +1 -0
  185. package/dist/policy/overrides.js +37 -0
  186. package/dist/policy/overrides.js.map +1 -0
  187. package/dist/policy/persistence.d.ts +38 -0
  188. package/dist/policy/persistence.d.ts.map +1 -0
  189. package/dist/policy/persistence.js +65 -0
  190. package/dist/policy/persistence.js.map +1 -0
  191. package/dist/policy/types.d.ts +21 -0
  192. package/dist/policy/types.d.ts.map +1 -0
  193. package/dist/policy/types.js +7 -0
  194. package/dist/policy/types.js.map +1 -0
  195. package/dist/record/base.d.ts +186 -0
  196. package/dist/record/base.d.ts.map +1 -0
  197. package/dist/record/base.js +1437 -0
  198. package/dist/record/base.js.map +1 -0
  199. package/dist/record/events.d.ts +71 -0
  200. package/dist/record/events.d.ts.map +1 -0
  201. package/dist/record/events.js +52 -0
  202. package/dist/record/events.js.map +1 -0
  203. package/dist/record/extensions.d.ts +51 -0
  204. package/dist/record/extensions.d.ts.map +1 -0
  205. package/dist/record/extensions.js +222 -0
  206. package/dist/record/extensions.js.map +1 -0
  207. package/dist/record/index.d.ts +7 -0
  208. package/dist/record/index.d.ts.map +1 -0
  209. package/dist/record/index.js +7 -0
  210. package/dist/record/index.js.map +1 -0
  211. package/dist/resolver/storage-backed-resolver.d.ts +23 -0
  212. package/dist/resolver/storage-backed-resolver.d.ts.map +1 -0
  213. package/dist/resolver/storage-backed-resolver.js +187 -0
  214. package/dist/resolver/storage-backed-resolver.js.map +1 -0
  215. package/dist/schemas/adapter-descriptor.d.ts +108 -0
  216. package/dist/schemas/adapter-descriptor.d.ts.map +1 -0
  217. package/dist/schemas/adapter-descriptor.js +101 -0
  218. package/dist/schemas/adapter-descriptor.js.map +1 -0
  219. package/dist/schemas/index.d.ts +14 -0
  220. package/dist/schemas/index.d.ts.map +1 -0
  221. package/dist/schemas/index.js +12 -0
  222. package/dist/schemas/index.js.map +1 -0
  223. package/dist/schemas/manifest-descriptor.d.ts +110 -0
  224. package/dist/schemas/manifest-descriptor.d.ts.map +1 -0
  225. package/dist/schemas/manifest-descriptor.js +114 -0
  226. package/dist/schemas/manifest-descriptor.js.map +1 -0
  227. package/dist/schemas/record/descriptor.d.ts +570 -0
  228. package/dist/schemas/record/descriptor.d.ts.map +1 -0
  229. package/dist/schemas/record/descriptor.js +389 -0
  230. package/dist/schemas/record/descriptor.js.map +1 -0
  231. package/dist/schemas/record/index.d.ts +8 -0
  232. package/dist/schemas/record/index.d.ts.map +1 -0
  233. package/dist/schemas/record/index.js +7 -0
  234. package/dist/schemas/record/index.js.map +1 -0
  235. package/dist/schemas/record/relation.d.ts +36 -0
  236. package/dist/schemas/record/relation.d.ts.map +1 -0
  237. package/dist/schemas/record/relation.js +37 -0
  238. package/dist/schemas/record/relation.js.map +1 -0
  239. package/dist/schemas/schema/descriptor.d.ts +231 -0
  240. package/dist/schemas/schema/descriptor.d.ts.map +1 -0
  241. package/dist/schemas/schema/descriptor.js +205 -0
  242. package/dist/schemas/schema/descriptor.js.map +1 -0
  243. package/dist/schemas/schema/index.d.ts +7 -0
  244. package/dist/schemas/schema/index.d.ts.map +1 -0
  245. package/dist/schemas/schema/index.js +7 -0
  246. package/dist/schemas/schema/index.js.map +1 -0
  247. package/dist/schemas/sync-bridge-descriptor.d.ts +124 -0
  248. package/dist/schemas/sync-bridge-descriptor.d.ts.map +1 -0
  249. package/dist/schemas/sync-bridge-descriptor.js +67 -0
  250. package/dist/schemas/sync-bridge-descriptor.js.map +1 -0
  251. package/dist/server/manifest-route.d.ts +92 -0
  252. package/dist/server/manifest-route.d.ts.map +1 -0
  253. package/dist/server/manifest-route.js +226 -0
  254. package/dist/server/manifest-route.js.map +1 -0
  255. package/dist/storage-policy.context.descriptor.d.ts +16 -0
  256. package/dist/storage-policy.context.descriptor.d.ts.map +1 -0
  257. package/dist/storage-policy.context.descriptor.js +16 -0
  258. package/dist/storage-policy.context.descriptor.js.map +1 -0
  259. package/dist/storage-policy.context.server.d.ts +14 -0
  260. package/dist/storage-policy.context.server.d.ts.map +1 -0
  261. package/dist/storage-policy.context.server.js +27 -0
  262. package/dist/storage-policy.context.server.js.map +1 -0
  263. package/dist/storage.plugin.d.ts +38 -0
  264. package/dist/storage.plugin.d.ts.map +1 -0
  265. package/dist/storage.plugin.js +204 -0
  266. package/dist/storage.plugin.js.map +1 -0
  267. package/dist/sync/cloud-pull.d.ts +15 -0
  268. package/dist/sync/cloud-pull.d.ts.map +1 -0
  269. package/dist/sync/cloud-pull.js +130 -0
  270. package/dist/sync/cloud-pull.js.map +1 -0
  271. package/dist/sync/cloud-record-crud-config.d.ts +19 -0
  272. package/dist/sync/cloud-record-crud-config.d.ts.map +1 -0
  273. package/dist/sync/cloud-record-crud-config.js +22 -0
  274. package/dist/sync/cloud-record-crud-config.js.map +1 -0
  275. package/dist/sync/record-sync-bridge.d.ts +5 -0
  276. package/dist/sync/record-sync-bridge.d.ts.map +1 -0
  277. package/dist/sync/record-sync-bridge.js +121 -0
  278. package/dist/sync/record-sync-bridge.js.map +1 -0
  279. package/dist/sync/resolve-sync-target.d.ts +23 -0
  280. package/dist/sync/resolve-sync-target.d.ts.map +1 -0
  281. package/dist/sync/resolve-sync-target.js +45 -0
  282. package/dist/sync/resolve-sync-target.js.map +1 -0
  283. package/dist/sync/schemas/cloud-pull.d.ts +25 -0
  284. package/dist/sync/schemas/cloud-pull.d.ts.map +1 -0
  285. package/dist/sync/schemas/cloud-pull.js +7 -0
  286. package/dist/sync/schemas/cloud-pull.js.map +1 -0
  287. package/dist/sync/schemas/index.d.ts +9 -0
  288. package/dist/sync/schemas/index.d.ts.map +1 -0
  289. package/dist/sync/schemas/index.js +9 -0
  290. package/dist/sync/schemas/index.js.map +1 -0
  291. package/dist/sync/schemas/sync-helpers.d.ts +17 -0
  292. package/dist/sync/schemas/sync-helpers.d.ts.map +1 -0
  293. package/dist/sync/schemas/sync-helpers.js +7 -0
  294. package/dist/sync/schemas/sync-helpers.js.map +1 -0
  295. package/dist/sync/schemas/sync-state.d.ts +65 -0
  296. package/dist/sync/schemas/sync-state.d.ts.map +1 -0
  297. package/dist/sync/schemas/sync-state.js +32 -0
  298. package/dist/sync/schemas/sync-state.js.map +1 -0
  299. package/dist/sync/sync-bridge.d.ts +80 -0
  300. package/dist/sync/sync-bridge.d.ts.map +1 -0
  301. package/dist/sync/sync-bridge.js +617 -0
  302. package/dist/sync/sync-bridge.js.map +1 -0
  303. package/dist/sync/sync-manifest.d.ts +20 -0
  304. package/dist/sync/sync-manifest.d.ts.map +1 -0
  305. package/dist/sync/sync-manifest.js +140 -0
  306. package/dist/sync/sync-manifest.js.map +1 -0
  307. package/dist/sync/sync-state.consumer.d.ts +23 -0
  308. package/dist/sync/sync-state.consumer.d.ts.map +1 -0
  309. package/dist/sync/sync-state.consumer.js +111 -0
  310. package/dist/sync/sync-state.consumer.js.map +1 -0
  311. package/dist/transform/index.d.ts +75 -0
  312. package/dist/transform/index.d.ts.map +1 -0
  313. package/dist/transform/index.js +81 -0
  314. package/dist/transform/index.js.map +1 -0
  315. package/dist/transform/transform-descriptor.d.ts +51 -0
  316. package/dist/transform/transform-descriptor.d.ts.map +1 -0
  317. package/dist/transform/transform-descriptor.js +30 -0
  318. package/dist/transform/transform-descriptor.js.map +1 -0
  319. package/dist/tui/storage-explorer.descriptor.d.ts +14 -0
  320. package/dist/tui/storage-explorer.descriptor.d.ts.map +1 -0
  321. package/dist/tui/storage-explorer.descriptor.js +29 -0
  322. package/dist/tui/storage-explorer.descriptor.js.map +1 -0
  323. package/dist/tui/storage-explorer.impl.consumer.d.ts +11 -0
  324. package/dist/tui/storage-explorer.impl.consumer.d.ts.map +1 -0
  325. package/dist/tui/storage-explorer.impl.consumer.js +13 -0
  326. package/dist/tui/storage-explorer.impl.consumer.js.map +1 -0
  327. package/dist/tui/storage-open.descriptor.d.ts +14 -0
  328. package/dist/tui/storage-open.descriptor.d.ts.map +1 -0
  329. package/dist/tui/storage-open.descriptor.js +28 -0
  330. package/dist/tui/storage-open.descriptor.js.map +1 -0
  331. package/dist/tui/storage-open.impl.consumer.d.ts +11 -0
  332. package/dist/tui/storage-open.impl.consumer.d.ts.map +1 -0
  333. package/dist/tui/storage-open.impl.consumer.js +13 -0
  334. package/dist/tui/storage-open.impl.consumer.js.map +1 -0
  335. package/dist/utils/error-context.d.ts +2 -0
  336. package/dist/utils/error-context.d.ts.map +1 -0
  337. package/dist/utils/error-context.js +17 -0
  338. package/dist/utils/error-context.js.map +1 -0
  339. package/package.json +241 -0
  340. package/src/adapters/index.ts +13 -0
  341. package/src/bridge/index.ts +2 -0
  342. package/src/bridge/storage-kind-bridge.ts +131 -0
  343. package/src/bridge/types.ts +46 -0
  344. package/src/cli/commands/list/storage.list.cli-command.descriptor.ts +20 -0
  345. package/src/cli/commands/list/storage.list.cli-command.impl.ts +72 -0
  346. package/src/cli/commands/sync/pull/storage.sync.pull.cli-command.descriptor.ts +28 -0
  347. package/src/cli/commands/sync/pull/storage.sync.pull.cli-command.impl.ts +171 -0
  348. package/src/cli/commands/sync/push/storage.sync.push.cli-command.descriptor.ts +28 -0
  349. package/src/cli/commands/sync/push/storage.sync.push.cli-command.impl.ts +213 -0
  350. package/src/cli/commands/sync/resolve/storage.sync.resolve.cli-command.descriptor.ts +22 -0
  351. package/src/cli/commands/sync/resolve/storage.sync.resolve.cli-command.impl.ts +129 -0
  352. package/src/cli/commands/sync/status/storage.sync.status.cli-command.descriptor.ts +17 -0
  353. package/src/cli/commands/sync/status/storage.sync.status.cli-command.impl.ts +192 -0
  354. package/src/cli/context.consumer.ts +195 -0
  355. package/src/cli/storage.cli-group.descriptor.ts +13 -0
  356. package/src/cli/storage.sync.cli-group.descriptor.ts +14 -0
  357. package/src/cli/types.ts +25 -0
  358. package/src/client/index.ts +10 -0
  359. package/src/client/list-browsable-adapters.ts +42 -0
  360. package/src/daemon/commands/sync.ts +225 -0
  361. package/src/docs/adapters.docs.descriptor.ts +225 -0
  362. package/src/docs/manifests.docs.descriptor.ts +318 -0
  363. package/src/docs/records.docs.descriptor.ts +271 -0
  364. package/src/docs/sync.docs.descriptor.ts +281 -0
  365. package/src/index.ts +109 -0
  366. package/src/interfaces/adapter.ts +451 -0
  367. package/src/interfaces/document-store.ts +74 -0
  368. package/src/interfaces/index.ts +117 -0
  369. package/src/interfaces/key-value.ts +112 -0
  370. package/src/interfaces/query-builder.ts +31 -0
  371. package/src/interfaces/record/index.ts +58 -0
  372. package/src/interfaces/record/interface.ts +723 -0
  373. package/src/interfaces/repository.ts +300 -0
  374. package/src/interfaces/schema/index.ts +37 -0
  375. package/src/interfaces/schema/schema-interface.ts +586 -0
  376. package/src/interfaces/schema/table-interface.ts +314 -0
  377. package/src/interfaces/storage-consumer-fs.ts +66 -0
  378. package/src/manifest/base.ts +594 -0
  379. package/src/manifest/cloud-sync.consumer.ts +120 -0
  380. package/src/manifest/index.ts +7 -0
  381. package/src/manifest/source-policy.ts +74 -0
  382. package/src/paths.ts +171 -0
  383. package/src/policy/context.ts +30 -0
  384. package/src/policy/index.ts +20 -0
  385. package/src/policy/overrides.ts +46 -0
  386. package/src/policy/persistence.ts +117 -0
  387. package/src/policy/types.ts +28 -0
  388. package/src/record/base.ts +1872 -0
  389. package/src/record/events.ts +56 -0
  390. package/src/record/extensions.ts +308 -0
  391. package/src/record/index.ts +7 -0
  392. package/src/resolver/storage-backed-resolver.ts +255 -0
  393. package/src/schemas/adapter-descriptor.ts +128 -0
  394. package/src/schemas/index.ts +104 -0
  395. package/src/schemas/manifest-descriptor.ts +143 -0
  396. package/src/schemas/record/descriptor.ts +621 -0
  397. package/src/schemas/record/index.ts +60 -0
  398. package/src/schemas/record/relation.ts +49 -0
  399. package/src/schemas/schema/descriptor.ts +278 -0
  400. package/src/schemas/schema/index.ts +14 -0
  401. package/src/schemas/sync-bridge-descriptor.ts +143 -0
  402. package/src/server/manifest-route.ts +319 -0
  403. package/src/storage-policy.context.descriptor.ts +17 -0
  404. package/src/storage-policy.context.server.ts +34 -0
  405. package/src/storage.plugin.ts +264 -0
  406. package/src/sync/cloud-pull.ts +202 -0
  407. package/src/sync/cloud-record-crud-config.ts +41 -0
  408. package/src/sync/record-sync-bridge.ts +183 -0
  409. package/src/sync/resolve-sync-target.ts +57 -0
  410. package/src/sync/schemas/cloud-pull.ts +26 -0
  411. package/src/sync/schemas/index.ts +18 -0
  412. package/src/sync/schemas/sync-helpers.ts +18 -0
  413. package/src/sync/schemas/sync-state.ts +41 -0
  414. package/src/sync/sync-bridge.ts +763 -0
  415. package/src/sync/sync-manifest.ts +212 -0
  416. package/src/sync/sync-state.consumer.ts +144 -0
  417. package/src/transform/index.ts +130 -0
  418. package/src/transform/transform-descriptor.ts +53 -0
  419. package/src/tui/storage-explorer.descriptor.ts +32 -0
  420. package/src/tui/storage-explorer.impl.consumer.ts +14 -0
  421. package/src/tui/storage-open.descriptor.ts +31 -0
  422. package/src/tui/storage-open.impl.consumer.ts +14 -0
  423. package/src/utils/error-context.ts +19 -0
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Storage Manifest Module
3
+ *
4
+ * Provides the StorageManifest base class for working with stored data.
5
+ */
6
+
7
+ export { StorageManifest } from './base';
@@ -0,0 +1,74 @@
1
+ import type { StorageScope } from '../schemas/manifest-descriptor.ts';
2
+
3
+ export type ManifestDataSource = 'user-localdb' | 'project-file' | 'cloud-api';
4
+
5
+ export const MANIFEST_SOURCE_PRECEDENCE: ManifestDataSource[] = [
6
+ 'cloud-api',
7
+ 'project-file',
8
+ 'user-localdb'
9
+ ];
10
+
11
+ const SOURCE_ADAPTER_CANDIDATES: Record<ManifestDataSource, string[]> = {
12
+ // `storage.memory` is included as the last-resort candidate for every
13
+ // source so tests can exercise source-policy code paths without
14
+ // spinning up a real localdb / drizzle / json file. Production
15
+ // descriptors don't list `storage.memory` in `allowedAdapters`, so
16
+ // this only kicks in when a descriptor explicitly opts in (test-only).
17
+ 'cloud-api': ['storage.cloud-api', 'storage.drizzle', 'storage.memory'],
18
+ 'project-file': ['storage.json', 'storage.memory'],
19
+ 'user-localdb': ['storage.localdb', 'storage.memory']
20
+ };
21
+
22
+ const ADAPTER_SOURCE_CANDIDATES: Record<string, ManifestDataSource[]> = {
23
+ 'storage.cloud-api': ['cloud-api'],
24
+ 'storage.drizzle': ['cloud-api'],
25
+ 'storage.json': ['project-file'],
26
+ 'storage.localdb': ['user-localdb'],
27
+ // `storage.memory` resolves back to `user-localdb` for round-trips —
28
+ // callers asking "which source does this adapter belong to?" get a
29
+ // sensible default. In practice memory adapters are test-only and
30
+ // the round-trip rarely matters.
31
+ 'storage.memory': ['user-localdb']
32
+ };
33
+
34
+ export function resolveAdapterForSource(
35
+ source: ManifestDataSource,
36
+ allowedAdapters: string[]
37
+ ): string | null {
38
+ const allowed = new Set(allowedAdapters);
39
+ for (const adapterId of SOURCE_ADAPTER_CANDIDATES[source]) {
40
+ if (allowed.has(adapterId)) return adapterId;
41
+ }
42
+ return null;
43
+ }
44
+
45
+ export function resolveScopeForSource(
46
+ source: ManifestDataSource,
47
+ fallbackScope: StorageScope = 'global'
48
+ ): StorageScope {
49
+ if (source === 'project-file') return 'project';
50
+ if (source === 'user-localdb') {
51
+ return fallbackScope === 'project' || fallbackScope === 'local' ? fallbackScope : 'global';
52
+ }
53
+ return 'global';
54
+ }
55
+
56
+ export function resolveAdapterOrderBySource(allowedAdapters: string[]): string[] {
57
+ const ordered: string[] = [];
58
+ for (const source of MANIFEST_SOURCE_PRECEDENCE) {
59
+ for (const adapterId of SOURCE_ADAPTER_CANDIDATES[source]) {
60
+ if (allowedAdapters.includes(adapterId) && !ordered.includes(adapterId)) {
61
+ ordered.push(adapterId);
62
+ }
63
+ }
64
+ }
65
+ for (const adapterId of allowedAdapters) {
66
+ if (!ordered.includes(adapterId)) ordered.push(adapterId);
67
+ }
68
+ return ordered;
69
+ }
70
+
71
+ export function resolveSourceFromAdapter(adapterId: string): ManifestDataSource | null {
72
+ const candidates = ADAPTER_SOURCE_CANDIDATES[adapterId];
73
+ return candidates?.[0] ?? null;
74
+ }
package/src/paths.ts ADDED
@@ -0,0 +1,171 @@
1
+ import type { KindContext } from '@vibesdotdev/runtime/schemas/kind';
2
+
3
+ const WINDOWS_DRIVE_PATTERN = /^[A-Za-z]:/;
4
+ const WINDOWS_DRIVE_ABSOLUTE_PATTERN = /^[A-Za-z]:[\\/]/;
5
+
6
+ function readEnv(name: string): string | undefined {
7
+ if (typeof process === 'undefined') return undefined;
8
+ const envSource = process['env'] as Record<string, string | undefined> | undefined;
9
+ return envSource?.[name];
10
+ }
11
+
12
+ function readWorkingDirectory(): string | undefined {
13
+ const fromEnv = readEnv('PWD') ?? readEnv('INIT_CWD');
14
+ if (fromEnv && fromEnv.trim().length > 0) return fromEnv;
15
+ if (typeof process === 'undefined') return undefined;
16
+ if (typeof process.cwd !== 'function') return undefined;
17
+ try {
18
+ return process.cwd();
19
+ } catch {
20
+ return undefined;
21
+ }
22
+ }
23
+
24
+ function toSlashSeparators(path: string): string {
25
+ return path.replaceAll('\\', '/');
26
+ }
27
+
28
+ function isAbsolutePath(path: string): boolean {
29
+ const normalized = toSlashSeparators(path);
30
+ return (
31
+ normalized.startsWith('/') ||
32
+ normalized.startsWith('//') ||
33
+ WINDOWS_DRIVE_ABSOLUTE_PATTERN.test(path)
34
+ );
35
+ }
36
+
37
+ function normalizePath(path: string): string {
38
+ const normalized = toSlashSeparators(path);
39
+
40
+ let prefix = '';
41
+ let absolute = false;
42
+ let rest = normalized;
43
+
44
+ if (normalized.startsWith('//')) {
45
+ absolute = true;
46
+ rest = normalized.slice(2);
47
+ const segments = rest.split('/').filter((segment) => segment.length > 0);
48
+ if (segments.length >= 2) {
49
+ prefix = `//${segments.shift()}/${segments.shift()}`;
50
+ rest = segments.join('/');
51
+ } else {
52
+ prefix = '//';
53
+ rest = segments.join('/');
54
+ }
55
+ } else if (WINDOWS_DRIVE_PATTERN.test(normalized)) {
56
+ prefix = normalized.slice(0, 2).toUpperCase();
57
+ rest = normalized.slice(2);
58
+ absolute = rest.startsWith('/');
59
+ } else if (normalized.startsWith('/')) {
60
+ absolute = true;
61
+ rest = normalized.slice(1);
62
+ }
63
+
64
+ const rawSegments = rest.split('/');
65
+ const segments: string[] = [];
66
+ for (const segment of rawSegments) {
67
+ if (segment.length === 0 || segment === '.') continue;
68
+ if (segment === '..') {
69
+ if (segments.length > 0 && segments[segments.length - 1] !== '..') {
70
+ segments.pop();
71
+ continue;
72
+ }
73
+ if (!absolute) segments.push('..');
74
+ continue;
75
+ }
76
+ segments.push(segment);
77
+ }
78
+
79
+ if (prefix.startsWith('//')) {
80
+ return segments.length > 0 ? `${prefix}/${segments.join('/')}` : prefix;
81
+ }
82
+
83
+ if (WINDOWS_DRIVE_PATTERN.test(prefix)) {
84
+ if (!absolute) {
85
+ return segments.length > 0 ? `${prefix}/${segments.join('/')}` : prefix;
86
+ }
87
+ return segments.length > 0 ? `${prefix}/${segments.join('/')}` : `${prefix}/`;
88
+ }
89
+
90
+ if (absolute) {
91
+ return segments.length > 0 ? `/${segments.join('/')}` : '/';
92
+ }
93
+
94
+ return segments.length > 0 ? segments.join('/') : '.';
95
+ }
96
+
97
+ function normalizeAbsolutePath(path: string | undefined): string | undefined {
98
+ if (!path) return undefined;
99
+ const trimmed = path.trim();
100
+ if (trimmed.length === 0) return undefined;
101
+
102
+ const cwd = readWorkingDirectory();
103
+ const absolutePath = isAbsolutePath(trimmed) ? trimmed : cwd ? `${cwd}/${trimmed}` : undefined;
104
+ if (!absolutePath) return undefined;
105
+
106
+ const normalized = normalizePath(absolutePath);
107
+ return isAbsolutePath(normalized) ? normalized : undefined;
108
+ }
109
+
110
+ function isRootPath(path: string): boolean {
111
+ const normalized = normalizePath(path);
112
+ return (
113
+ normalized === '/' || /^[A-Za-z]:\/$/.test(normalized) || /^\/\/[^/]+\/[^/]+$/.test(normalized)
114
+ );
115
+ }
116
+
117
+ export function resolveHomePath(): string {
118
+ return (
119
+ normalizeAbsolutePath(readEnv('HOME')) ??
120
+ normalizeAbsolutePath(readEnv('USERPROFILE')) ??
121
+ normalizeAbsolutePath(readEnv('TMPDIR')) ??
122
+ normalizeAbsolutePath(readEnv('TEMP')) ??
123
+ normalizeAbsolutePath(readEnv('TMP')) ??
124
+ normalizeAbsolutePath(readWorkingDirectory()) ??
125
+ '.'
126
+ );
127
+ }
128
+
129
+ function readContextWorkspacePath(
130
+ context: KindContext | Record<string, unknown> | undefined
131
+ ): string | undefined {
132
+ if (!context) return undefined;
133
+ const value = context['runtime/workspace-path'];
134
+ return typeof value === 'string' ? value : undefined;
135
+ }
136
+
137
+ export function resolveWorkspacePath(
138
+ context?: KindContext | Record<string, unknown>,
139
+ preferredWorkspacePath?: string
140
+ ): string {
141
+ const candidates = [
142
+ preferredWorkspacePath,
143
+ readContextWorkspacePath(context),
144
+ readEnv('VIBES_WORKSPACE_PATH'),
145
+ readEnv('PWD'),
146
+ readEnv('INIT_CWD')
147
+ ];
148
+
149
+ for (const candidate of candidates) {
150
+ const normalized = normalizeAbsolutePath(candidate);
151
+ if (!normalized) continue;
152
+ if (isRootPath(normalized)) continue;
153
+ return normalized;
154
+ }
155
+
156
+ return resolveHomePath();
157
+ }
158
+
159
+ export function resolveScopePathTemplate(pathTemplate: string, workspacePath: string): string {
160
+ const homePath = resolveHomePath();
161
+ const profile = readEnv('VIBES_PROFILE') || readEnv('VIBES_PROFILE_NAME') || '';
162
+ return pathTemplate
163
+ .replaceAll('{home}', homePath)
164
+ .replaceAll('{cwd}', workspacePath)
165
+ .replaceAll('{workspace}', workspacePath)
166
+ .replaceAll('{profile}', profile);
167
+ }
168
+
169
+ export function resolveAtlasDbPath(projectId: string, workspacePath: string): string {
170
+ return normalizePath(`${workspacePath}/.vibes/atlas/${projectId}.db`);
171
+ }
@@ -0,0 +1,30 @@
1
+ import { getRuntimeEnv } from '@vibesdotdev/runtime';
2
+ import { StoragePersistenceModeSchema } from './persistence';
3
+ import { StoragePolicyContextSchema, type StoragePolicyContextValue } from './overrides';
4
+
5
+ /**
6
+ * Load storage policy context with environment variable overrides.
7
+ *
8
+ * Returns the default storage policy, optionally overridden by environment
9
+ * variables VIBES_STORAGE_MODE and VIBES_STORAGE_DEFAULT_ADAPTER.
10
+ */
11
+ export async function loadStoragePolicyContext(): Promise<StoragePolicyContextValue> {
12
+ const defaultPolicy = StoragePolicyContextSchema.parse({});
13
+ return applyEnvOverrides(defaultPolicy);
14
+ }
15
+
16
+ function applyEnvOverrides(policy: StoragePolicyContextValue): StoragePolicyContextValue {
17
+ const mode = getRuntimeEnv('VIBES_STORAGE_MODE');
18
+ const defaultAdapter = getRuntimeEnv('VIBES_STORAGE_DEFAULT_ADAPTER');
19
+ if (!mode && !defaultAdapter) return policy;
20
+
21
+ const parsedMode = mode ? StoragePersistenceModeSchema.safeParse(mode) : null;
22
+ return {
23
+ ...policy,
24
+ default: {
25
+ ...(policy.default ?? {}),
26
+ ...(parsedMode?.success ? { mode: parsedMode.data } : {}),
27
+ ...(defaultAdapter ? { defaultAdapter } : {})
28
+ }
29
+ };
30
+ }
@@ -0,0 +1,20 @@
1
+ export {
2
+ StoragePersistenceModeSchema,
3
+ StoragePersistencePolicySchema,
4
+ resolveStoragePolicy,
5
+ isRemoteStorageAdapter,
6
+ type StoragePersistenceMode,
7
+ type StoragePersistencePolicy,
8
+ type StoragePolicyDescriptorDefaults,
9
+ type StoragePolicyOverrides,
10
+ type ResolvedStoragePolicy
11
+ } from './persistence';
12
+
13
+ export {
14
+ StoragePolicyContextSchema,
15
+ StoragePolicyOverrideSchema,
16
+ resolveStoragePolicyOverridesFromContext,
17
+ type StoragePolicyContextValue
18
+ } from './overrides';
19
+
20
+ export { loadStoragePolicyContext } from './context';
@@ -0,0 +1,46 @@
1
+ import * as z from 'zod/v4';
2
+ import { StoragePersistenceModeSchema, type StoragePolicyOverrides } from './persistence';
3
+
4
+ export const StoragePolicyOverrideSchema = z.object({
5
+ mode: StoragePersistenceModeSchema.optional(),
6
+ defaultAdapter: z.string().optional(),
7
+ localAdapters: z.array(z.string()).optional(),
8
+ remoteAdapters: z.array(z.string()).optional()
9
+ });
10
+
11
+ export const StoragePolicyContextSchema = z.object({
12
+ default: StoragePolicyOverrideSchema.optional(),
13
+ records: z.record(z.string(), StoragePolicyOverrideSchema).default({})
14
+ });
15
+
16
+ export type StoragePolicyContextValue = z.infer<typeof StoragePolicyContextSchema>;
17
+
18
+ export function resolveStoragePolicyOverridesFromContext(
19
+ policy: unknown,
20
+ recordId: string
21
+ ): StoragePolicyOverrides | undefined {
22
+ const parsed = StoragePolicyContextSchema.safeParse(policy);
23
+ if (!parsed.success) return undefined;
24
+
25
+ const base = parsed.data.default ?? {};
26
+ const record = parsed.data.records[recordId] ?? {};
27
+ const mode = record.mode ?? base.mode;
28
+ const localAdapters = record.localAdapters ?? base.localAdapters;
29
+ const remoteAdapters = record.remoteAdapters ?? base.remoteAdapters;
30
+ const defaultAdapter = record.defaultAdapter ?? base.defaultAdapter;
31
+
32
+ const persistence =
33
+ mode || localAdapters || remoteAdapters
34
+ ? {
35
+ ...(mode ? { mode } : {}),
36
+ ...(localAdapters ? { localAdapters } : {}),
37
+ ...(remoteAdapters ? { remoteAdapters } : {})
38
+ }
39
+ : undefined;
40
+
41
+ if (!persistence && !defaultAdapter) return undefined;
42
+ return {
43
+ ...(persistence ? { persistence } : {}),
44
+ ...(defaultAdapter ? { defaultAdapter } : {})
45
+ };
46
+ }
@@ -0,0 +1,117 @@
1
+ import * as z from 'zod/v4';
2
+
3
+ export const StoragePersistenceModeSchema = z.enum([
4
+ 'local-only',
5
+ 'local-first',
6
+ 'remote-first',
7
+ 'remote-only'
8
+ ]);
9
+
10
+ export const StoragePersistencePolicySchema = z.object({
11
+ mode: StoragePersistenceModeSchema.default('local-first'),
12
+ localAdapters: z.array(z.string()).optional(),
13
+ remoteAdapters: z.array(z.string()).optional()
14
+ });
15
+
16
+ export type StoragePersistenceMode = z.infer<typeof StoragePersistenceModeSchema>;
17
+ export type StoragePersistencePolicy = z.infer<typeof StoragePersistencePolicySchema>;
18
+
19
+ export interface StoragePolicyDescriptorDefaults {
20
+ allowedAdapters: string[];
21
+ defaultAdapter?: string;
22
+ persistence?: StoragePersistencePolicy;
23
+ }
24
+
25
+ export interface StoragePolicyOverrides {
26
+ persistence?: Partial<StoragePersistencePolicy>;
27
+ defaultAdapter?: string;
28
+ }
29
+
30
+ export interface ResolvedStoragePolicy {
31
+ mode: StoragePersistenceMode;
32
+ defaultAdapter: string | null;
33
+ adapterOrder: string[];
34
+ localAdapters: string[];
35
+ remoteAdapters: string[];
36
+ }
37
+
38
+ const REMOTE_STORAGE_ADAPTERS = new Set(['storage.cloud-api', 'storage.drizzle']);
39
+
40
+ export function resolveStoragePolicy(
41
+ descriptor: StoragePolicyDescriptorDefaults,
42
+ overrides?: StoragePolicyOverrides
43
+ ): ResolvedStoragePolicy {
44
+ const base = descriptor.persistence ?? { mode: 'local-first' };
45
+ const persistence = StoragePersistencePolicySchema.parse({
46
+ ...base,
47
+ ...overrides?.persistence
48
+ });
49
+ const allowedAdapters = unique(descriptor.allowedAdapters);
50
+ const localAdapters = unique(
51
+ persistence.localAdapters ??
52
+ allowedAdapters.filter((adapterId) => !isRemoteStorageAdapter(adapterId))
53
+ ).filter((adapterId) => allowedAdapters.includes(adapterId));
54
+ const remoteAdapters = unique(
55
+ persistence.remoteAdapters ??
56
+ allowedAdapters.filter((adapterId) => isRemoteStorageAdapter(adapterId))
57
+ ).filter((adapterId) => allowedAdapters.includes(adapterId));
58
+ const orderedByMode = orderAdaptersByMode(persistence.mode, localAdapters, remoteAdapters);
59
+ const defaultAdapter = resolveDefaultAdapter(
60
+ overrides?.defaultAdapter ?? descriptor.defaultAdapter ?? null,
61
+ allowedAdapters,
62
+ orderedByMode
63
+ );
64
+
65
+ return {
66
+ mode: persistence.mode,
67
+ defaultAdapter,
68
+ adapterOrder: defaultAdapter ? prioritize(defaultAdapter, orderedByMode) : orderedByMode,
69
+ localAdapters,
70
+ remoteAdapters
71
+ };
72
+ }
73
+
74
+ export function isRemoteStorageAdapter(adapterId: string): boolean {
75
+ return REMOTE_STORAGE_ADAPTERS.has(adapterId);
76
+ }
77
+
78
+ function orderAdaptersByMode(
79
+ mode: StoragePersistenceMode,
80
+ localAdapters: string[],
81
+ remoteAdapters: string[]
82
+ ): string[] {
83
+ switch (mode) {
84
+ case 'local-only':
85
+ return [...localAdapters];
86
+ case 'remote-only':
87
+ return [...remoteAdapters];
88
+ case 'remote-first':
89
+ return [...remoteAdapters, ...localAdapters];
90
+ case 'local-first':
91
+ default:
92
+ return [...localAdapters, ...remoteAdapters];
93
+ }
94
+ }
95
+
96
+ function resolveDefaultAdapter(
97
+ defaultAdapter: string | null,
98
+ allowedAdapters: string[],
99
+ orderedByMode: string[]
100
+ ): string | null {
101
+ if (
102
+ defaultAdapter &&
103
+ allowedAdapters.includes(defaultAdapter) &&
104
+ orderedByMode.includes(defaultAdapter)
105
+ ) {
106
+ return defaultAdapter;
107
+ }
108
+ return orderedByMode[0] ?? null;
109
+ }
110
+
111
+ function prioritize(adapterId: string, orderedAdapters: string[]): string[] {
112
+ return [adapterId, ...orderedAdapters.filter((candidate) => candidate !== adapterId)];
113
+ }
114
+
115
+ function unique(values: string[]): string[] {
116
+ return [...new Set(values)];
117
+ }
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Storage Policy Types
3
+ *
4
+ * Defines the types and interfaces for storage policy resolution and overrides.
5
+ */
6
+
7
+ export interface StoragePolicy {
8
+ mode: "persistent" | "ephemeral" | "cached";
9
+ adapter: string;
10
+ namespace: string;
11
+ ttl?: number;
12
+ compression?: boolean;
13
+ encryption?: boolean;
14
+ }
15
+
16
+ export interface StoragePolicyOverride {
17
+ [key: string]: unknown;
18
+ }
19
+
20
+ export interface StoragePolicyContext {
21
+ resolveStoragePolicy: (
22
+ namespace: string,
23
+ options?: Record<string, unknown>,
24
+ ) => Promise<StoragePolicy>;
25
+ resolveStoragePolicyOverrides: (
26
+ context: Record<string, unknown>,
27
+ ) => Promise<StoragePolicyOverride>;
28
+ }