@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.
- package/README.md +75 -0
- package/SPEC.md +60 -0
- package/dist/adapters/index.d.ts +14 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +15 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/bridge/index.d.ts +3 -0
- package/dist/bridge/index.d.ts.map +1 -0
- package/dist/bridge/index.js +2 -0
- package/dist/bridge/index.js.map +1 -0
- package/dist/bridge/storage-kind-bridge.d.ts +27 -0
- package/dist/bridge/storage-kind-bridge.d.ts.map +1 -0
- package/dist/bridge/storage-kind-bridge.js +110 -0
- package/dist/bridge/storage-kind-bridge.js.map +1 -0
- package/dist/bridge/types.d.ts +45 -0
- package/dist/bridge/types.d.ts.map +1 -0
- package/dist/bridge/types.js +8 -0
- package/dist/bridge/types.js.map +1 -0
- package/dist/cli/commands/list/storage.list.cli-command.descriptor.d.ts +4 -0
- package/dist/cli/commands/list/storage.list.cli-command.descriptor.d.ts.map +1 -0
- package/dist/cli/commands/list/storage.list.cli-command.descriptor.js +18 -0
- package/dist/cli/commands/list/storage.list.cli-command.descriptor.js.map +1 -0
- package/dist/cli/commands/list/storage.list.cli-command.impl.d.ts +11 -0
- package/dist/cli/commands/list/storage.list.cli-command.impl.d.ts.map +1 -0
- package/dist/cli/commands/list/storage.list.cli-command.impl.js +48 -0
- package/dist/cli/commands/list/storage.list.cli-command.impl.js.map +1 -0
- package/dist/cli/commands/sync/pull/storage.sync.pull.cli-command.descriptor.d.ts +4 -0
- package/dist/cli/commands/sync/pull/storage.sync.pull.cli-command.descriptor.d.ts.map +1 -0
- package/dist/cli/commands/sync/pull/storage.sync.pull.cli-command.descriptor.js +26 -0
- package/dist/cli/commands/sync/pull/storage.sync.pull.cli-command.descriptor.js.map +1 -0
- package/dist/cli/commands/sync/pull/storage.sync.pull.cli-command.impl.d.ts +13 -0
- package/dist/cli/commands/sync/pull/storage.sync.pull.cli-command.impl.d.ts.map +1 -0
- package/dist/cli/commands/sync/pull/storage.sync.pull.cli-command.impl.js +136 -0
- package/dist/cli/commands/sync/pull/storage.sync.pull.cli-command.impl.js.map +1 -0
- package/dist/cli/commands/sync/push/storage.sync.push.cli-command.descriptor.d.ts +4 -0
- package/dist/cli/commands/sync/push/storage.sync.push.cli-command.descriptor.d.ts.map +1 -0
- package/dist/cli/commands/sync/push/storage.sync.push.cli-command.descriptor.js +26 -0
- package/dist/cli/commands/sync/push/storage.sync.push.cli-command.descriptor.js.map +1 -0
- package/dist/cli/commands/sync/push/storage.sync.push.cli-command.impl.d.ts +13 -0
- package/dist/cli/commands/sync/push/storage.sync.push.cli-command.impl.d.ts.map +1 -0
- package/dist/cli/commands/sync/push/storage.sync.push.cli-command.impl.js +165 -0
- package/dist/cli/commands/sync/push/storage.sync.push.cli-command.impl.js.map +1 -0
- package/dist/cli/commands/sync/resolve/storage.sync.resolve.cli-command.descriptor.d.ts +4 -0
- package/dist/cli/commands/sync/resolve/storage.sync.resolve.cli-command.descriptor.d.ts.map +1 -0
- package/dist/cli/commands/sync/resolve/storage.sync.resolve.cli-command.descriptor.js +20 -0
- package/dist/cli/commands/sync/resolve/storage.sync.resolve.cli-command.descriptor.js.map +1 -0
- package/dist/cli/commands/sync/resolve/storage.sync.resolve.cli-command.impl.d.ts +12 -0
- package/dist/cli/commands/sync/resolve/storage.sync.resolve.cli-command.impl.d.ts.map +1 -0
- package/dist/cli/commands/sync/resolve/storage.sync.resolve.cli-command.impl.js +95 -0
- package/dist/cli/commands/sync/resolve/storage.sync.resolve.cli-command.impl.js.map +1 -0
- package/dist/cli/commands/sync/status/storage.sync.status.cli-command.descriptor.d.ts +4 -0
- package/dist/cli/commands/sync/status/storage.sync.status.cli-command.descriptor.d.ts.map +1 -0
- package/dist/cli/commands/sync/status/storage.sync.status.cli-command.descriptor.js +15 -0
- package/dist/cli/commands/sync/status/storage.sync.status.cli-command.descriptor.js.map +1 -0
- package/dist/cli/commands/sync/status/storage.sync.status.cli-command.impl.d.ts +13 -0
- package/dist/cli/commands/sync/status/storage.sync.status.cli-command.impl.d.ts.map +1 -0
- package/dist/cli/commands/sync/status/storage.sync.status.cli-command.impl.js +150 -0
- package/dist/cli/commands/sync/status/storage.sync.status.cli-command.impl.js.map +1 -0
- package/dist/cli/context.consumer.d.ts +26 -0
- package/dist/cli/context.consumer.d.ts.map +1 -0
- package/dist/cli/context.consumer.js +164 -0
- package/dist/cli/context.consumer.js.map +1 -0
- package/dist/cli/storage.cli-group.descriptor.d.ts +4 -0
- package/dist/cli/storage.cli-group.descriptor.d.ts.map +1 -0
- package/dist/cli/storage.cli-group.descriptor.js +11 -0
- package/dist/cli/storage.cli-group.descriptor.js.map +1 -0
- package/dist/cli/storage.sync.cli-group.descriptor.d.ts +4 -0
- package/dist/cli/storage.sync.cli-group.descriptor.d.ts.map +1 -0
- package/dist/cli/storage.sync.cli-group.descriptor.js +12 -0
- package/dist/cli/storage.sync.cli-group.descriptor.js.map +1 -0
- package/dist/cli/types.d.ts +26 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +11 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/client/index.d.ts +10 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +10 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/list-browsable-adapters.d.ts +31 -0
- package/dist/client/list-browsable-adapters.d.ts.map +1 -0
- package/dist/client/list-browsable-adapters.js +40 -0
- package/dist/client/list-browsable-adapters.js.map +1 -0
- package/dist/daemon/commands/sync.d.ts +23 -0
- package/dist/daemon/commands/sync.d.ts.map +1 -0
- package/dist/daemon/commands/sync.js +169 -0
- package/dist/daemon/commands/sync.js.map +1 -0
- package/dist/docs/adapters.docs.descriptor.d.ts +4 -0
- package/dist/docs/adapters.docs.descriptor.d.ts.map +1 -0
- package/dist/docs/adapters.docs.descriptor.js +223 -0
- package/dist/docs/adapters.docs.descriptor.js.map +1 -0
- package/dist/docs/manifests.docs.descriptor.d.ts +4 -0
- package/dist/docs/manifests.docs.descriptor.d.ts.map +1 -0
- package/dist/docs/manifests.docs.descriptor.js +316 -0
- package/dist/docs/manifests.docs.descriptor.js.map +1 -0
- package/dist/docs/records.docs.descriptor.d.ts +4 -0
- package/dist/docs/records.docs.descriptor.d.ts.map +1 -0
- package/dist/docs/records.docs.descriptor.js +269 -0
- package/dist/docs/records.docs.descriptor.js.map +1 -0
- package/dist/docs/sync.docs.descriptor.d.ts +4 -0
- package/dist/docs/sync.docs.descriptor.d.ts.map +1 -0
- package/dist/docs/sync.docs.descriptor.js +279 -0
- package/dist/docs/sync.docs.descriptor.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/adapter.d.ts +382 -0
- package/dist/interfaces/adapter.d.ts.map +1 -0
- package/dist/interfaces/adapter.js +11 -0
- package/dist/interfaces/adapter.js.map +1 -0
- package/dist/interfaces/document-store.d.ts +62 -0
- package/dist/interfaces/document-store.d.ts.map +1 -0
- package/dist/interfaces/document-store.js +8 -0
- package/dist/interfaces/document-store.js.map +1 -0
- package/dist/interfaces/index.d.ts +17 -0
- package/dist/interfaces/index.d.ts.map +1 -0
- package/dist/interfaces/index.js +24 -0
- package/dist/interfaces/index.js.map +1 -0
- package/dist/interfaces/key-value.d.ts +95 -0
- package/dist/interfaces/key-value.d.ts.map +1 -0
- package/dist/interfaces/key-value.js +8 -0
- package/dist/interfaces/key-value.js.map +1 -0
- package/dist/interfaces/query-builder.d.ts +31 -0
- package/dist/interfaces/query-builder.d.ts.map +1 -0
- package/dist/interfaces/query-builder.js +11 -0
- package/dist/interfaces/query-builder.js.map +1 -0
- package/dist/interfaces/record/index.d.ts +7 -0
- package/dist/interfaces/record/index.d.ts.map +1 -0
- package/dist/interfaces/record/index.js +7 -0
- package/dist/interfaces/record/index.js.map +1 -0
- package/dist/interfaces/record/interface.d.ts +593 -0
- package/dist/interfaces/record/interface.d.ts.map +1 -0
- package/dist/interfaces/record/interface.js +49 -0
- package/dist/interfaces/record/interface.js.map +1 -0
- package/dist/interfaces/repository.d.ts +262 -0
- package/dist/interfaces/repository.d.ts.map +1 -0
- package/dist/interfaces/repository.js +8 -0
- package/dist/interfaces/repository.js.map +1 -0
- package/dist/interfaces/schema/index.d.ts +8 -0
- package/dist/interfaces/schema/index.d.ts.map +1 -0
- package/dist/interfaces/schema/index.js +10 -0
- package/dist/interfaces/schema/index.js.map +1 -0
- package/dist/interfaces/schema/schema-interface.d.ts +516 -0
- package/dist/interfaces/schema/schema-interface.d.ts.map +1 -0
- package/dist/interfaces/schema/schema-interface.js +31 -0
- package/dist/interfaces/schema/schema-interface.js.map +1 -0
- package/dist/interfaces/schema/table-interface.d.ts +250 -0
- package/dist/interfaces/schema/table-interface.d.ts.map +1 -0
- package/dist/interfaces/schema/table-interface.js +31 -0
- package/dist/interfaces/schema/table-interface.js.map +1 -0
- package/dist/interfaces/storage-consumer-fs.d.ts +40 -0
- package/dist/interfaces/storage-consumer-fs.d.ts.map +1 -0
- package/dist/interfaces/storage-consumer-fs.js +42 -0
- package/dist/interfaces/storage-consumer-fs.js.map +1 -0
- package/dist/manifest/base.d.ts +187 -0
- package/dist/manifest/base.d.ts.map +1 -0
- package/dist/manifest/base.js +516 -0
- package/dist/manifest/base.js.map +1 -0
- package/dist/manifest/cloud-sync.consumer.d.ts +7 -0
- package/dist/manifest/cloud-sync.consumer.d.ts.map +1 -0
- package/dist/manifest/cloud-sync.consumer.js +82 -0
- package/dist/manifest/cloud-sync.consumer.js.map +1 -0
- package/dist/manifest/index.d.ts +7 -0
- package/dist/manifest/index.d.ts.map +1 -0
- package/dist/manifest/index.js +7 -0
- package/dist/manifest/index.js.map +1 -0
- package/dist/manifest/source-policy.d.ts +8 -0
- package/dist/manifest/source-policy.d.ts.map +1 -0
- package/dist/manifest/source-policy.js +62 -0
- package/dist/manifest/source-policy.js.map +1 -0
- package/dist/paths.d.ts +6 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +152 -0
- package/dist/paths.js.map +1 -0
- package/dist/policy/context.d.ts +9 -0
- package/dist/policy/context.d.ts.map +1 -0
- package/dist/policy/context.js +29 -0
- package/dist/policy/context.js.map +1 -0
- package/dist/policy/index.d.ts +4 -0
- package/dist/policy/index.d.ts.map +1 -0
- package/dist/policy/index.js +4 -0
- package/dist/policy/index.js.map +1 -0
- package/dist/policy/overrides.d.ts +40 -0
- package/dist/policy/overrides.d.ts.map +1 -0
- package/dist/policy/overrides.js +37 -0
- package/dist/policy/overrides.js.map +1 -0
- package/dist/policy/persistence.d.ts +38 -0
- package/dist/policy/persistence.d.ts.map +1 -0
- package/dist/policy/persistence.js +65 -0
- package/dist/policy/persistence.js.map +1 -0
- package/dist/policy/types.d.ts +21 -0
- package/dist/policy/types.d.ts.map +1 -0
- package/dist/policy/types.js +7 -0
- package/dist/policy/types.js.map +1 -0
- package/dist/record/base.d.ts +186 -0
- package/dist/record/base.d.ts.map +1 -0
- package/dist/record/base.js +1437 -0
- package/dist/record/base.js.map +1 -0
- package/dist/record/events.d.ts +71 -0
- package/dist/record/events.d.ts.map +1 -0
- package/dist/record/events.js +52 -0
- package/dist/record/events.js.map +1 -0
- package/dist/record/extensions.d.ts +51 -0
- package/dist/record/extensions.d.ts.map +1 -0
- package/dist/record/extensions.js +222 -0
- package/dist/record/extensions.js.map +1 -0
- package/dist/record/index.d.ts +7 -0
- package/dist/record/index.d.ts.map +1 -0
- package/dist/record/index.js +7 -0
- package/dist/record/index.js.map +1 -0
- package/dist/resolver/storage-backed-resolver.d.ts +23 -0
- package/dist/resolver/storage-backed-resolver.d.ts.map +1 -0
- package/dist/resolver/storage-backed-resolver.js +187 -0
- package/dist/resolver/storage-backed-resolver.js.map +1 -0
- package/dist/schemas/adapter-descriptor.d.ts +108 -0
- package/dist/schemas/adapter-descriptor.d.ts.map +1 -0
- package/dist/schemas/adapter-descriptor.js +101 -0
- package/dist/schemas/adapter-descriptor.js.map +1 -0
- package/dist/schemas/index.d.ts +14 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +12 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/manifest-descriptor.d.ts +110 -0
- package/dist/schemas/manifest-descriptor.d.ts.map +1 -0
- package/dist/schemas/manifest-descriptor.js +114 -0
- package/dist/schemas/manifest-descriptor.js.map +1 -0
- package/dist/schemas/record/descriptor.d.ts +570 -0
- package/dist/schemas/record/descriptor.d.ts.map +1 -0
- package/dist/schemas/record/descriptor.js +389 -0
- package/dist/schemas/record/descriptor.js.map +1 -0
- package/dist/schemas/record/index.d.ts +8 -0
- package/dist/schemas/record/index.d.ts.map +1 -0
- package/dist/schemas/record/index.js +7 -0
- package/dist/schemas/record/index.js.map +1 -0
- package/dist/schemas/record/relation.d.ts +36 -0
- package/dist/schemas/record/relation.d.ts.map +1 -0
- package/dist/schemas/record/relation.js +37 -0
- package/dist/schemas/record/relation.js.map +1 -0
- package/dist/schemas/schema/descriptor.d.ts +231 -0
- package/dist/schemas/schema/descriptor.d.ts.map +1 -0
- package/dist/schemas/schema/descriptor.js +205 -0
- package/dist/schemas/schema/descriptor.js.map +1 -0
- package/dist/schemas/schema/index.d.ts +7 -0
- package/dist/schemas/schema/index.d.ts.map +1 -0
- package/dist/schemas/schema/index.js +7 -0
- package/dist/schemas/schema/index.js.map +1 -0
- package/dist/schemas/sync-bridge-descriptor.d.ts +124 -0
- package/dist/schemas/sync-bridge-descriptor.d.ts.map +1 -0
- package/dist/schemas/sync-bridge-descriptor.js +67 -0
- package/dist/schemas/sync-bridge-descriptor.js.map +1 -0
- package/dist/server/manifest-route.d.ts +92 -0
- package/dist/server/manifest-route.d.ts.map +1 -0
- package/dist/server/manifest-route.js +226 -0
- package/dist/server/manifest-route.js.map +1 -0
- package/dist/storage-policy.context.descriptor.d.ts +16 -0
- package/dist/storage-policy.context.descriptor.d.ts.map +1 -0
- package/dist/storage-policy.context.descriptor.js +16 -0
- package/dist/storage-policy.context.descriptor.js.map +1 -0
- package/dist/storage-policy.context.server.d.ts +14 -0
- package/dist/storage-policy.context.server.d.ts.map +1 -0
- package/dist/storage-policy.context.server.js +27 -0
- package/dist/storage-policy.context.server.js.map +1 -0
- package/dist/storage.plugin.d.ts +38 -0
- package/dist/storage.plugin.d.ts.map +1 -0
- package/dist/storage.plugin.js +204 -0
- package/dist/storage.plugin.js.map +1 -0
- package/dist/sync/cloud-pull.d.ts +15 -0
- package/dist/sync/cloud-pull.d.ts.map +1 -0
- package/dist/sync/cloud-pull.js +130 -0
- package/dist/sync/cloud-pull.js.map +1 -0
- package/dist/sync/cloud-record-crud-config.d.ts +19 -0
- package/dist/sync/cloud-record-crud-config.d.ts.map +1 -0
- package/dist/sync/cloud-record-crud-config.js +22 -0
- package/dist/sync/cloud-record-crud-config.js.map +1 -0
- package/dist/sync/record-sync-bridge.d.ts +5 -0
- package/dist/sync/record-sync-bridge.d.ts.map +1 -0
- package/dist/sync/record-sync-bridge.js +121 -0
- package/dist/sync/record-sync-bridge.js.map +1 -0
- package/dist/sync/resolve-sync-target.d.ts +23 -0
- package/dist/sync/resolve-sync-target.d.ts.map +1 -0
- package/dist/sync/resolve-sync-target.js +45 -0
- package/dist/sync/resolve-sync-target.js.map +1 -0
- package/dist/sync/schemas/cloud-pull.d.ts +25 -0
- package/dist/sync/schemas/cloud-pull.d.ts.map +1 -0
- package/dist/sync/schemas/cloud-pull.js +7 -0
- package/dist/sync/schemas/cloud-pull.js.map +1 -0
- package/dist/sync/schemas/index.d.ts +9 -0
- package/dist/sync/schemas/index.d.ts.map +1 -0
- package/dist/sync/schemas/index.js +9 -0
- package/dist/sync/schemas/index.js.map +1 -0
- package/dist/sync/schemas/sync-helpers.d.ts +17 -0
- package/dist/sync/schemas/sync-helpers.d.ts.map +1 -0
- package/dist/sync/schemas/sync-helpers.js +7 -0
- package/dist/sync/schemas/sync-helpers.js.map +1 -0
- package/dist/sync/schemas/sync-state.d.ts +65 -0
- package/dist/sync/schemas/sync-state.d.ts.map +1 -0
- package/dist/sync/schemas/sync-state.js +32 -0
- package/dist/sync/schemas/sync-state.js.map +1 -0
- package/dist/sync/sync-bridge.d.ts +80 -0
- package/dist/sync/sync-bridge.d.ts.map +1 -0
- package/dist/sync/sync-bridge.js +617 -0
- package/dist/sync/sync-bridge.js.map +1 -0
- package/dist/sync/sync-manifest.d.ts +20 -0
- package/dist/sync/sync-manifest.d.ts.map +1 -0
- package/dist/sync/sync-manifest.js +140 -0
- package/dist/sync/sync-manifest.js.map +1 -0
- package/dist/sync/sync-state.consumer.d.ts +23 -0
- package/dist/sync/sync-state.consumer.d.ts.map +1 -0
- package/dist/sync/sync-state.consumer.js +111 -0
- package/dist/sync/sync-state.consumer.js.map +1 -0
- package/dist/transform/index.d.ts +75 -0
- package/dist/transform/index.d.ts.map +1 -0
- package/dist/transform/index.js +81 -0
- package/dist/transform/index.js.map +1 -0
- package/dist/transform/transform-descriptor.d.ts +51 -0
- package/dist/transform/transform-descriptor.d.ts.map +1 -0
- package/dist/transform/transform-descriptor.js +30 -0
- package/dist/transform/transform-descriptor.js.map +1 -0
- package/dist/tui/storage-explorer.descriptor.d.ts +14 -0
- package/dist/tui/storage-explorer.descriptor.d.ts.map +1 -0
- package/dist/tui/storage-explorer.descriptor.js +29 -0
- package/dist/tui/storage-explorer.descriptor.js.map +1 -0
- package/dist/tui/storage-explorer.impl.consumer.d.ts +11 -0
- package/dist/tui/storage-explorer.impl.consumer.d.ts.map +1 -0
- package/dist/tui/storage-explorer.impl.consumer.js +13 -0
- package/dist/tui/storage-explorer.impl.consumer.js.map +1 -0
- package/dist/tui/storage-open.descriptor.d.ts +14 -0
- package/dist/tui/storage-open.descriptor.d.ts.map +1 -0
- package/dist/tui/storage-open.descriptor.js +28 -0
- package/dist/tui/storage-open.descriptor.js.map +1 -0
- package/dist/tui/storage-open.impl.consumer.d.ts +11 -0
- package/dist/tui/storage-open.impl.consumer.d.ts.map +1 -0
- package/dist/tui/storage-open.impl.consumer.js +13 -0
- package/dist/tui/storage-open.impl.consumer.js.map +1 -0
- package/dist/utils/error-context.d.ts +2 -0
- package/dist/utils/error-context.d.ts.map +1 -0
- package/dist/utils/error-context.js +17 -0
- package/dist/utils/error-context.js.map +1 -0
- package/package.json +241 -0
- package/src/adapters/index.ts +13 -0
- package/src/bridge/index.ts +2 -0
- package/src/bridge/storage-kind-bridge.ts +131 -0
- package/src/bridge/types.ts +46 -0
- package/src/cli/commands/list/storage.list.cli-command.descriptor.ts +20 -0
- package/src/cli/commands/list/storage.list.cli-command.impl.ts +72 -0
- package/src/cli/commands/sync/pull/storage.sync.pull.cli-command.descriptor.ts +28 -0
- package/src/cli/commands/sync/pull/storage.sync.pull.cli-command.impl.ts +171 -0
- package/src/cli/commands/sync/push/storage.sync.push.cli-command.descriptor.ts +28 -0
- package/src/cli/commands/sync/push/storage.sync.push.cli-command.impl.ts +213 -0
- package/src/cli/commands/sync/resolve/storage.sync.resolve.cli-command.descriptor.ts +22 -0
- package/src/cli/commands/sync/resolve/storage.sync.resolve.cli-command.impl.ts +129 -0
- package/src/cli/commands/sync/status/storage.sync.status.cli-command.descriptor.ts +17 -0
- package/src/cli/commands/sync/status/storage.sync.status.cli-command.impl.ts +192 -0
- package/src/cli/context.consumer.ts +195 -0
- package/src/cli/storage.cli-group.descriptor.ts +13 -0
- package/src/cli/storage.sync.cli-group.descriptor.ts +14 -0
- package/src/cli/types.ts +25 -0
- package/src/client/index.ts +10 -0
- package/src/client/list-browsable-adapters.ts +42 -0
- package/src/daemon/commands/sync.ts +225 -0
- package/src/docs/adapters.docs.descriptor.ts +225 -0
- package/src/docs/manifests.docs.descriptor.ts +318 -0
- package/src/docs/records.docs.descriptor.ts +271 -0
- package/src/docs/sync.docs.descriptor.ts +281 -0
- package/src/index.ts +109 -0
- package/src/interfaces/adapter.ts +451 -0
- package/src/interfaces/document-store.ts +74 -0
- package/src/interfaces/index.ts +117 -0
- package/src/interfaces/key-value.ts +112 -0
- package/src/interfaces/query-builder.ts +31 -0
- package/src/interfaces/record/index.ts +58 -0
- package/src/interfaces/record/interface.ts +723 -0
- package/src/interfaces/repository.ts +300 -0
- package/src/interfaces/schema/index.ts +37 -0
- package/src/interfaces/schema/schema-interface.ts +586 -0
- package/src/interfaces/schema/table-interface.ts +314 -0
- package/src/interfaces/storage-consumer-fs.ts +66 -0
- package/src/manifest/base.ts +594 -0
- package/src/manifest/cloud-sync.consumer.ts +120 -0
- package/src/manifest/index.ts +7 -0
- package/src/manifest/source-policy.ts +74 -0
- package/src/paths.ts +171 -0
- package/src/policy/context.ts +30 -0
- package/src/policy/index.ts +20 -0
- package/src/policy/overrides.ts +46 -0
- package/src/policy/persistence.ts +117 -0
- package/src/policy/types.ts +28 -0
- package/src/record/base.ts +1872 -0
- package/src/record/events.ts +56 -0
- package/src/record/extensions.ts +308 -0
- package/src/record/index.ts +7 -0
- package/src/resolver/storage-backed-resolver.ts +255 -0
- package/src/schemas/adapter-descriptor.ts +128 -0
- package/src/schemas/index.ts +104 -0
- package/src/schemas/manifest-descriptor.ts +143 -0
- package/src/schemas/record/descriptor.ts +621 -0
- package/src/schemas/record/index.ts +60 -0
- package/src/schemas/record/relation.ts +49 -0
- package/src/schemas/schema/descriptor.ts +278 -0
- package/src/schemas/schema/index.ts +14 -0
- package/src/schemas/sync-bridge-descriptor.ts +143 -0
- package/src/server/manifest-route.ts +319 -0
- package/src/storage-policy.context.descriptor.ts +17 -0
- package/src/storage-policy.context.server.ts +34 -0
- package/src/storage.plugin.ts +264 -0
- package/src/sync/cloud-pull.ts +202 -0
- package/src/sync/cloud-record-crud-config.ts +41 -0
- package/src/sync/record-sync-bridge.ts +183 -0
- package/src/sync/resolve-sync-target.ts +57 -0
- package/src/sync/schemas/cloud-pull.ts +26 -0
- package/src/sync/schemas/index.ts +18 -0
- package/src/sync/schemas/sync-helpers.ts +18 -0
- package/src/sync/schemas/sync-state.ts +41 -0
- package/src/sync/sync-bridge.ts +763 -0
- package/src/sync/sync-manifest.ts +212 -0
- package/src/sync/sync-state.consumer.ts +144 -0
- package/src/transform/index.ts +130 -0
- package/src/transform/transform-descriptor.ts +53 -0
- package/src/tui/storage-explorer.descriptor.ts +32 -0
- package/src/tui/storage-explorer.impl.consumer.ts +14 -0
- package/src/tui/storage-open.descriptor.ts +31 -0
- package/src/tui/storage-open.impl.consumer.ts +14 -0
- package/src/utils/error-context.ts +19 -0
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Storage Plugin
|
|
3
|
+
*
|
|
4
|
+
* Registers storage/adapter, storage/manifest, and storage/record kinds with the runtime.
|
|
5
|
+
* This is the entry point for the storage module's runtime integration.
|
|
6
|
+
*
|
|
7
|
+
* Also registers storage-owned TUI surfaces during activation:
|
|
8
|
+
* - `storage.explorer` (tui/app) — interactive storage browser
|
|
9
|
+
* - `storage.open` (tui/command) — opens the explorer via `/storage`
|
|
10
|
+
*/
|
|
11
|
+
import { createRuntimePlugin, loader } from '@vibesdotdev/runtime';
|
|
12
|
+
import { createRuntimeImplementation } from '@vibesdotdev/runtime/factory/implementation';
|
|
13
|
+
import storagePolicyContextDescriptor from './storage-policy.context.descriptor';
|
|
14
|
+
import { loadStoragePolicyContext } from './storage-policy.context.server';
|
|
15
|
+
// CLI
|
|
16
|
+
import storageGroup from "./cli/storage.cli-group.descriptor.js";
|
|
17
|
+
import storageSyncGroup from "./cli/storage.sync.cli-group.descriptor.js";
|
|
18
|
+
import storageList from "./cli/commands/list/storage.list.cli-command.descriptor.js";
|
|
19
|
+
import storageSyncPull from "./cli/commands/sync/pull/storage.sync.pull.cli-command.descriptor.js";
|
|
20
|
+
import storageSyncPush from "./cli/commands/sync/push/storage.sync.push.cli-command.descriptor.js";
|
|
21
|
+
import storageSyncResolve from "./cli/commands/sync/resolve/storage.sync.resolve.cli-command.descriptor.js";
|
|
22
|
+
import storageSyncStatus from "./cli/commands/sync/status/storage.sync.status.cli-command.descriptor.js";
|
|
23
|
+
// TUI
|
|
24
|
+
import storageExplorerDescriptor from './tui/storage-explorer.descriptor';
|
|
25
|
+
import storageOpenDescriptor from './tui/storage-open.descriptor';
|
|
26
|
+
// Docs
|
|
27
|
+
import adaptersDescriptor from './docs/adapters.docs.descriptor';
|
|
28
|
+
import recordsDescriptor from './docs/records.docs.descriptor';
|
|
29
|
+
import syncDescriptor from './docs/sync.docs.descriptor';
|
|
30
|
+
import manifestsDescriptor from './docs/manifests.docs.descriptor';
|
|
31
|
+
import { StorageAdapterDescriptorSchema } from './schemas/adapter-descriptor';
|
|
32
|
+
import { StorageManifestDescriptorSchema } from './schemas/manifest-descriptor';
|
|
33
|
+
import { StorageRecordDescriptorSchema } from './schemas/record';
|
|
34
|
+
import { SyncBridgeDescriptorSchema } from './schemas/sync-bridge-descriptor';
|
|
35
|
+
import { StorageTransformDescriptorSchema } from './transform/transform-descriptor';
|
|
36
|
+
import { StorageManifest } from './manifest/base';
|
|
37
|
+
import { storageRecordEvents } from './record/events';
|
|
38
|
+
const storageRecordDefaultImplementation = (() => {
|
|
39
|
+
if (typeof globalThis !== 'undefined' && 'window' in globalThis)
|
|
40
|
+
return undefined;
|
|
41
|
+
try {
|
|
42
|
+
const runtimeRequire = import.meta.require;
|
|
43
|
+
if (typeof runtimeRequire !== 'function')
|
|
44
|
+
return undefined;
|
|
45
|
+
return runtimeRequire('./record/base.ts').StorageRecord;
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
})();
|
|
51
|
+
// Kind definitions - types are inferred to work with AnyKindDefinition
|
|
52
|
+
const storageAdapterKind = {
|
|
53
|
+
id: 'storage/adapter',
|
|
54
|
+
descriptorSchema: StorageAdapterDescriptorSchema,
|
|
55
|
+
/**
|
|
56
|
+
* Resolution strategy: Find adapter matching hardware target.
|
|
57
|
+
* Prefers persistent adapters over memory when available.
|
|
58
|
+
*
|
|
59
|
+
* No defaultImplementation — adapter packages register their own descriptor + loader
|
|
60
|
+
* via their plugin (e.g. `storageAdapterMemoryPlugin`). Consumers must register at
|
|
61
|
+
* least one adapter plugin matching their scope.
|
|
62
|
+
*/
|
|
63
|
+
resolve: (candidates, scope) => {
|
|
64
|
+
// Filter to candidates matching hardware
|
|
65
|
+
const matching = candidates.filter((d) => !d.hardware || d.hardware.length === 0 || d.hardware.includes(scope.hardware));
|
|
66
|
+
if (matching.length === 0)
|
|
67
|
+
return undefined;
|
|
68
|
+
// Prefer persistent adapters
|
|
69
|
+
const persistent = matching.filter((d) => d.persistent);
|
|
70
|
+
if (persistent.length > 0)
|
|
71
|
+
return persistent[0];
|
|
72
|
+
// Fall back to any matching
|
|
73
|
+
return matching[0];
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
const storageManifestKind = {
|
|
77
|
+
id: 'storage/manifest',
|
|
78
|
+
descriptorSchema: StorageManifestDescriptorSchema,
|
|
79
|
+
contexts: ['runtime/workspace-path'],
|
|
80
|
+
/**
|
|
81
|
+
* Default implementation: StorageManifest
|
|
82
|
+
*
|
|
83
|
+
* Base class providing document operations (load, save, exists, delete).
|
|
84
|
+
* Modules can extend this for custom methods.
|
|
85
|
+
* Constructor signature: (descriptor, context) - context provides runtime access.
|
|
86
|
+
*/
|
|
87
|
+
defaultImplementation: StorageManifest
|
|
88
|
+
// No custom resolve - manifests are looked up by ID, not scope-based
|
|
89
|
+
};
|
|
90
|
+
const storageRecordKind = {
|
|
91
|
+
id: 'storage/record',
|
|
92
|
+
descriptorSchema: StorageRecordDescriptorSchema,
|
|
93
|
+
contexts: ['runtime/workspace-path', 'storage/policy'],
|
|
94
|
+
...(storageRecordDefaultImplementation
|
|
95
|
+
? { defaultImplementation: storageRecordDefaultImplementation }
|
|
96
|
+
: {})
|
|
97
|
+
};
|
|
98
|
+
const storageSyncBridgeKind = {
|
|
99
|
+
id: 'storage/sync-bridge',
|
|
100
|
+
descriptorSchema: SyncBridgeDescriptorSchema
|
|
101
|
+
// No defaultImplementation — SyncBridge is server/CLI only.
|
|
102
|
+
// Implementations are registered by the bun loader during discovery.
|
|
103
|
+
};
|
|
104
|
+
const storageTransformKind = {
|
|
105
|
+
id: 'storage/transform',
|
|
106
|
+
descriptorSchema: StorageTransformDescriptorSchema
|
|
107
|
+
// No defaultImplementation — transforms are plugin-registered per
|
|
108
|
+
// manifest. The wire shape is `{ fromRow, toRow? }` (see
|
|
109
|
+
// `./transform/transform-descriptor.ts`). Consumers resolve via
|
|
110
|
+
// `resolveStorageTransform(runtime, id)`.
|
|
111
|
+
};
|
|
112
|
+
function loadTuiImplementation(kind, id, load) {
|
|
113
|
+
return async () => {
|
|
114
|
+
const mod = await load();
|
|
115
|
+
return createRuntimeImplementation({
|
|
116
|
+
kind,
|
|
117
|
+
id,
|
|
118
|
+
implementation: mod.default
|
|
119
|
+
});
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Storage plugin - registers storage kinds with the runtime.
|
|
124
|
+
*
|
|
125
|
+
* Kinds registered:
|
|
126
|
+
* - `storage/adapter` - Storage backends. Adapter implementations live in sibling
|
|
127
|
+
* packages (`storage-adapter-{memory,json,localdb,cloud-api,drizzle}`) and register
|
|
128
|
+
* themselves via their own plugins. The storage core does not import them.
|
|
129
|
+
* - `storage/manifest` - Storable data type definitions
|
|
130
|
+
* - `storage/record` - Single-table CRUD operations with relations
|
|
131
|
+
* - `storage/sync-bridge` - Declarative runtime kind ↔ cloud CRUD sync
|
|
132
|
+
*
|
|
133
|
+
* @example
|
|
134
|
+
* ```ts
|
|
135
|
+
* import { getVibesRuntime } from '@vibesdotdev/runtime/factory/plugin';
|
|
136
|
+
* import storagePlugin from './storage.plugin';
|
|
137
|
+
*
|
|
138
|
+
* const runtime = getVibesRuntime();
|
|
139
|
+
* await runtime.registerPlugin(storagePlugin);
|
|
140
|
+
*
|
|
141
|
+
* // Now you can query storage adapters
|
|
142
|
+
* const adapter = await runtime.query('storage/adapter')
|
|
143
|
+
* .forHardware('consumer')
|
|
144
|
+
* .resolve();
|
|
145
|
+
* ```
|
|
146
|
+
*/
|
|
147
|
+
export default createRuntimePlugin({
|
|
148
|
+
id: 'storage',
|
|
149
|
+
name: 'Storage Module',
|
|
150
|
+
description: 'Interface-driven storage providers for document and repository-style storage',
|
|
151
|
+
dependencies: ['context'],
|
|
152
|
+
kinds: [
|
|
153
|
+
storageAdapterKind,
|
|
154
|
+
storageManifestKind,
|
|
155
|
+
storageRecordKind,
|
|
156
|
+
storageSyncBridgeKind,
|
|
157
|
+
storageTransformKind
|
|
158
|
+
],
|
|
159
|
+
descriptors: [
|
|
160
|
+
storageGroup,
|
|
161
|
+
storageSyncGroup,
|
|
162
|
+
storageList,
|
|
163
|
+
storageSyncPull,
|
|
164
|
+
storageSyncPush,
|
|
165
|
+
storageSyncResolve,
|
|
166
|
+
storageSyncStatus,
|
|
167
|
+
...storageRecordEvents,
|
|
168
|
+
adaptersDescriptor,
|
|
169
|
+
recordsDescriptor,
|
|
170
|
+
syncDescriptor,
|
|
171
|
+
manifestsDescriptor
|
|
172
|
+
],
|
|
173
|
+
loaders: [
|
|
174
|
+
loader('storage.list', () => import('./cli/commands/list/storage.list.cli-command.impl.js')),
|
|
175
|
+
loader('storage.sync.push', () => import('./cli/commands/sync/push/storage.sync.push.cli-command.impl.js')),
|
|
176
|
+
loader('storage.sync.pull', () => import('./cli/commands/sync/pull/storage.sync.pull.cli-command.impl.js')),
|
|
177
|
+
loader('storage.sync.status', () => import('./cli/commands/sync/status/storage.sync.status.cli-command.impl.js')),
|
|
178
|
+
loader('storage.sync.resolve', () => import('./cli/commands/sync/resolve/storage.sync.resolve.cli-command.impl.js'))
|
|
179
|
+
],
|
|
180
|
+
onRegister: async (runtime) => {
|
|
181
|
+
// Register storage-owned TUI surfaces only when the tui/* kinds are
|
|
182
|
+
// available. The standard bootstrap (see apps/cli-bin defaults.ts)
|
|
183
|
+
// loads tui before storage. Keeping this conditional lets minimal
|
|
184
|
+
// test setups register storage without spinning up the TUI stack.
|
|
185
|
+
if (runtime.hasKind('tui/app')) {
|
|
186
|
+
runtime.registerDescriptor('tui/app', storageExplorerDescriptor);
|
|
187
|
+
runtime.registerLoader('tui/app', storageExplorerDescriptor.id, loadTuiImplementation('tui/app', storageExplorerDescriptor.id, () => import('./tui/storage-explorer.impl.consumer')));
|
|
188
|
+
}
|
|
189
|
+
if (runtime.hasKind('tui/command')) {
|
|
190
|
+
runtime.registerDescriptor('tui/command', storageOpenDescriptor);
|
|
191
|
+
runtime.registerLoader('tui/command', storageOpenDescriptor.id, loadTuiImplementation('tui/command', storageOpenDescriptor.id, () => import('./tui/storage-open.impl.consumer')));
|
|
192
|
+
}
|
|
193
|
+
// Register storage policy context
|
|
194
|
+
runtime.registerDescriptor('context', storagePolicyContextDescriptor);
|
|
195
|
+
runtime.registerLoader('context', storagePolicyContextDescriptor.id, async () => createRuntimeImplementation({
|
|
196
|
+
kind: 'context',
|
|
197
|
+
id: storagePolicyContextDescriptor.id,
|
|
198
|
+
implementation: {
|
|
199
|
+
provide: async () => loadStoragePolicyContext()
|
|
200
|
+
}
|
|
201
|
+
}));
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
//# sourceMappingURL=storage.plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.plugin.js","sourceRoot":"","sources":["../src/storage.plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,2BAA2B,EAAE,MAAM,6CAA6C,CAAC;AAE1F,OAAO,8BAA8B,MAAM,qCAAqC,CAAC;AACjF,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,MAAM;AACN,OAAO,YAAY,MAAM,uCAAuC,CAAC;AACjE,OAAO,gBAAgB,MAAM,4CAA4C,CAAC;AAC1E,OAAO,WAAW,MAAM,4DAA4D,CAAC;AACrF,OAAO,eAAe,MAAM,sEAAsE,CAAC;AACnG,OAAO,eAAe,MAAM,sEAAsE,CAAC;AACnG,OAAO,kBAAkB,MAAM,4EAA4E,CAAC;AAC5G,OAAO,iBAAiB,MAAM,0EAA0E,CAAC;AAEzG,MAAM;AACN,OAAO,yBAAyB,MAAM,mCAAmC,CAAC;AAC1E,OAAO,qBAAqB,MAAM,+BAA+B,CAAC;AAElE,OAAO;AACP,OAAO,kBAAkB,MAAM,iCAAiC,CAAC;AACjE,OAAO,iBAAiB,MAAM,gCAAgC,CAAC;AAC/D,OAAO,cAAc,MAAM,6BAA6B,CAAC;AACzD,OAAO,mBAAmB,MAAM,kCAAkC,CAAC;AAGnE,OAAO,EACN,8BAA8B,EAE9B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,+BAA+B,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,EAAE,6BAA6B,EAAgC,MAAM,kBAAkB,CAAC;AAC/F,OAAO,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAC9E,OAAO,EAAE,gCAAgC,EAAE,MAAM,kCAAkC,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD,MAAM,kCAAkC,GAKzB,CAAC,GAAG,EAAE;IACpB,IAAI,OAAO,UAAU,KAAK,WAAW,IAAI,QAAQ,IAAI,UAAU;QAAE,OAAO,SAAS,CAAC;IAClF,IAAI,CAAC;QACJ,MAAM,cAAc,GACnB,MAAM,CAAC,IAQP,CAAC,OAAO,CAAC;QACV,IAAI,OAAO,cAAc,KAAK,UAAU;YAAE,OAAO,SAAS,CAAC;QAC3D,OAAO,cAAc,CAAC,kBAAkB,CAAC,CAAC,aAAa,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,SAAS,CAAC;IAClB,CAAC;AACF,CAAC,CAAC,EAAE,CAAC;AAEL,uEAAuE;AACvE,MAAM,kBAAkB,GAAG;IAC1B,EAAE,EAAE,iBAAiB;IACrB,gBAAgB,EAAE,8BAA8B;IAEhD;;;;;;;OAOG;IACH,OAAO,EAAE,CAAC,UAAsC,EAAE,KAA2B,EAAE,EAAE;QAChF,yCAAyC;QACzC,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CACjC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CACpF,CAAC;QAEF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAE5C,6BAA6B;QAC7B,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QACxD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;QAEhD,4BAA4B;QAC5B,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;CACD,CAAC;AAEF,MAAM,mBAAmB,GAAG;IAC3B,EAAE,EAAE,kBAAkB;IACtB,gBAAgB,EAAE,+BAA+B;IACjD,QAAQ,EAAE,CAAC,wBAAwB,CAAC;IAEpC;;;;;;OAMG;IACH,qBAAqB,EAAE,eAAe;IAEtC,qEAAqE;CACrE,CAAC;AAEF,MAAM,iBAAiB,GAAG;IACzB,EAAE,EAAE,gBAAgB;IACpB,gBAAgB,EAAE,6BAA6B;IAC/C,QAAQ,EAAE,CAAC,wBAAwB,EAAE,gBAAgB,CAAC;IACtD,GAAG,CAAC,kCAAkC;QACrC,CAAC,CAAC,EAAE,qBAAqB,EAAE,kCAAkC,EAAE;QAC/D,CAAC,CAAC,EAAE,CAAC;CACN,CAAC;AAEF,MAAM,qBAAqB,GAAG;IAC7B,EAAE,EAAE,qBAAqB;IACzB,gBAAgB,EAAE,0BAA0B;IAE5C,4DAA4D;IAC5D,qEAAqE;CACrE,CAAC;AAEF,MAAM,oBAAoB,GAAG;IAC5B,EAAE,EAAE,mBAAmB;IACvB,gBAAgB,EAAE,gCAAgC;IAElD,kEAAkE;IAClE,yDAAyD;IACzD,gEAAgE;IAChE,0CAA0C;CAC1C,CAAC;AAEF,SAAS,qBAAqB,CAAI,IAAY,EAAE,EAAU,EAAE,IAAmC;IAC9F,OAAO,KAAK,IAAI,EAAE;QACjB,MAAM,GAAG,GAAG,MAAM,IAAI,EAAE,CAAC;QACzB,OAAO,2BAA2B,CAAC;YAClC,IAAI;YACJ,EAAE;YACF,cAAc,EAAE,GAAG,CAAC,OAAO;SAC3B,CAAC,CAAC;IACJ,CAAC,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAe,mBAAmB,CAAC;IAClC,EAAE,EAAE,SAAS;IACb,IAAI,EAAE,gBAAgB;IACtB,WAAW,EAAE,8EAA8E;IAC3F,YAAY,EAAE,CAAC,SAAS,CAAC;IACzB,KAAK,EAAE;QACN,kBAAkB;QAClB,mBAAmB;QACnB,iBAAiB;QACjB,qBAAqB;QACrB,oBAAoB;KACpB;IAED,WAAW,EAAE;QACZ,YAAY;QACZ,gBAAgB;QAChB,WAAW;QACX,eAAe;QACf,eAAe;QACf,kBAAkB;QAClB,iBAAiB;QACjB,GAAG,mBAAmB;QACtB,kBAAkB;QAClB,iBAAiB;QACjB,cAAc;QACd,mBAAmB;KACnB;IAED,OAAO,EAAE;QACR,MAAM,CAAC,cAAc,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,sDAAsD,CAAC,CAAC;QAC5F,MAAM,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAChC,MAAM,CAAC,gEAAgE,CAAC,CACxE;QACD,MAAM,CAAC,mBAAmB,EAAE,GAAG,EAAE,CAChC,MAAM,CAAC,gEAAgE,CAAC,CACxE;QACD,MAAM,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAClC,MAAM,CAAC,oEAAoE,CAAC,CAC5E;QACD,MAAM,CAAC,sBAAsB,EAAE,GAAG,EAAE,CACnC,MAAM,CAAC,sEAAsE,CAAC,CAC9E;KACD;IAED,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAC7B,oEAAoE;QACpE,mEAAmE;QACnE,kEAAkE;QAClE,kEAAkE;QAClE,IAAI,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,kBAAkB,CAAC,SAAS,EAAE,yBAAyB,CAAC,CAAC;YACjE,OAAO,CAAC,cAAc,CACrB,SAAS,EACT,yBAAyB,CAAC,EAAE,EAC5B,qBAAqB,CAAC,SAAS,EAAE,yBAAyB,CAAC,EAAE,EAAE,GAAG,EAAE,CACnE,MAAM,CAAC,sCAAsC,CAAC,CAC9C,CACD,CAAC;QACH,CAAC;QACD,IAAI,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;YACpC,OAAO,CAAC,kBAAkB,CAAC,aAAa,EAAE,qBAAqB,CAAC,CAAC;YACjE,OAAO,CAAC,cAAc,CACrB,aAAa,EACb,qBAAqB,CAAC,EAAE,EACxB,qBAAqB,CAAC,aAAa,EAAE,qBAAqB,CAAC,EAAE,EAAE,GAAG,EAAE,CACnE,MAAM,CAAC,kCAAkC,CAAC,CAC1C,CACD,CAAC;QACH,CAAC;QACD,kCAAkC;QAClC,OAAO,CAAC,kBAAkB,CAAC,SAAS,EAAE,8BAA8B,CAAC,CAAC;QACtE,OAAO,CAAC,cAAc,CAAC,SAAS,EAAE,8BAA8B,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE,CAC/E,2BAA2B,CAAC;YAC3B,IAAI,EAAE,SAAS;YACf,EAAE,EAAE,8BAA8B,CAAC,EAAE;YACrC,cAAc,EAAE;gBACf,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,wBAAwB,EAAE;aAC/C;SACD,CAAC,CACF,CAAC;IACH,CAAC;CACD,CAAC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cloud Pull Service
|
|
3
|
+
*
|
|
4
|
+
* Pulls data from cloud storage for manifests that have cloud-api configured.
|
|
5
|
+
* Used at daemon startup to hydrate local state from cloud, and by the
|
|
6
|
+
* sync job for bidirectional sync.
|
|
7
|
+
*/
|
|
8
|
+
import type { CloudPullOptions, CloudPullResult } from './schemas/cloud-pull';
|
|
9
|
+
export type { CloudPullOptions, CloudPullResult } from './schemas/cloud-pull';
|
|
10
|
+
/**
|
|
11
|
+
* Pull data from cloud for all eligible manifests.
|
|
12
|
+
* Called at daemon startup and periodically by the sync job.
|
|
13
|
+
*/
|
|
14
|
+
export declare function pullFromCloud(options?: CloudPullOptions): Promise<CloudPullResult>;
|
|
15
|
+
//# sourceMappingURL=cloud-pull.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-pull.d.ts","sourceRoot":"","sources":["../../src/sync/cloud-pull.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAW9E,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAI9E;;;GAGG;AACH,wBAAsB,aAAa,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC,CAoG5F"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cloud Pull Service
|
|
3
|
+
*
|
|
4
|
+
* Pulls data from cloud storage for manifests that have cloud-api configured.
|
|
5
|
+
* Used at daemon startup to hydrate local state from cloud, and by the
|
|
6
|
+
* sync job for bidirectional sync.
|
|
7
|
+
*/
|
|
8
|
+
import { getLogger } from '@vibesdotdev/logging';
|
|
9
|
+
const logger = getLogger('storage:cloud-pull');
|
|
10
|
+
import { loadSyncState, saveSyncState, getManifestSyncState, computeHash, markSynced, markConflict, markError } from './sync-state.consumer.js';
|
|
11
|
+
const LOG_PREFIX = '[cloud-pull]';
|
|
12
|
+
/**
|
|
13
|
+
* Pull data from cloud for all eligible manifests.
|
|
14
|
+
* Called at daemon startup and periodically by the sync job.
|
|
15
|
+
*/
|
|
16
|
+
export async function pullFromCloud(options = {}) {
|
|
17
|
+
const { manifestIds, force = false, dryRun = false } = options;
|
|
18
|
+
const result = { pulled: 0, skipped: 0, conflicts: 0, errors: 0, details: [] };
|
|
19
|
+
try {
|
|
20
|
+
const { getVibesRuntime } = await import('@vibesdotdev/runtime');
|
|
21
|
+
const { StorageManifest } = await import('../manifest/base.js');
|
|
22
|
+
const runtime = getVibesRuntime();
|
|
23
|
+
// Find manifests with cloud-api support
|
|
24
|
+
const descriptors = runtime.query('storage/manifest').descriptors();
|
|
25
|
+
const eligible = descriptors.filter((d) => {
|
|
26
|
+
if (!d.allowedAdapters?.includes('storage.cloud-api'))
|
|
27
|
+
return false;
|
|
28
|
+
if (manifestIds?.length && !manifestIds.includes(d.id))
|
|
29
|
+
return false;
|
|
30
|
+
return true;
|
|
31
|
+
});
|
|
32
|
+
if (eligible.length === 0) {
|
|
33
|
+
logger.debug(`${LOG_PREFIX} No eligible manifests for cloud pull`);
|
|
34
|
+
return result;
|
|
35
|
+
}
|
|
36
|
+
const syncState = await loadSyncState();
|
|
37
|
+
// Resolve cloud adapter once
|
|
38
|
+
const cloudAdapter = await runtime
|
|
39
|
+
.query('storage/adapter')
|
|
40
|
+
.filter((d) => d.id === 'storage.cloud-api')
|
|
41
|
+
.resolve();
|
|
42
|
+
if (!cloudAdapter) {
|
|
43
|
+
logger.debug(`${LOG_PREFIX} Cloud adapter not available`);
|
|
44
|
+
return result;
|
|
45
|
+
}
|
|
46
|
+
const adapter = cloudAdapter;
|
|
47
|
+
for (const descriptor of eligible) {
|
|
48
|
+
try {
|
|
49
|
+
const pullResult = await pullManifest(descriptor, adapter, syncState, new StorageManifest(descriptor.id), { force, dryRun });
|
|
50
|
+
result.details.push(pullResult);
|
|
51
|
+
switch (pullResult.action) {
|
|
52
|
+
case 'pulled':
|
|
53
|
+
result.pulled++;
|
|
54
|
+
break;
|
|
55
|
+
case 'conflict':
|
|
56
|
+
result.conflicts++;
|
|
57
|
+
break;
|
|
58
|
+
case 'error':
|
|
59
|
+
result.errors++;
|
|
60
|
+
break;
|
|
61
|
+
default:
|
|
62
|
+
result.skipped++;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
const msg = error.message;
|
|
67
|
+
logger.warn(`${LOG_PREFIX} Pull failed for ${descriptor.id}`, { error: msg });
|
|
68
|
+
markError(syncState, descriptor.id, msg);
|
|
69
|
+
result.details.push({ manifestId: descriptor.id, action: 'error', message: msg });
|
|
70
|
+
result.errors++;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (!dryRun) {
|
|
74
|
+
await saveSyncState(syncState);
|
|
75
|
+
}
|
|
76
|
+
logger.info(`${LOG_PREFIX} Pull complete`, {
|
|
77
|
+
pulled: result.pulled,
|
|
78
|
+
skipped: result.skipped,
|
|
79
|
+
conflicts: result.conflicts,
|
|
80
|
+
errors: result.errors
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
logger.error(`${LOG_PREFIX} Pull failed`, error);
|
|
85
|
+
}
|
|
86
|
+
return result;
|
|
87
|
+
}
|
|
88
|
+
async function pullManifest(descriptor, adapter, syncState, localManifest, options) {
|
|
89
|
+
const { id: manifestId, namespace, schema } = descriptor;
|
|
90
|
+
const cloudConfig = descriptor.adapterConfig?.['storage.cloud-api'] ?? {};
|
|
91
|
+
adapter.configure(cloudConfig);
|
|
92
|
+
const store = adapter.documentStore(namespace, schema);
|
|
93
|
+
// Load remote
|
|
94
|
+
let remoteData;
|
|
95
|
+
try {
|
|
96
|
+
remoteData = await store.load();
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
return { manifestId, action: 'skipped', message: 'Cloud not reachable' };
|
|
100
|
+
}
|
|
101
|
+
if (!remoteData) {
|
|
102
|
+
return { manifestId, action: 'skipped', message: 'No remote data' };
|
|
103
|
+
}
|
|
104
|
+
const remoteHash = computeHash(remoteData);
|
|
105
|
+
const prev = getManifestSyncState(syncState, manifestId);
|
|
106
|
+
// Load local for comparison
|
|
107
|
+
const localData = await localManifest.load();
|
|
108
|
+
const localHash = localData ? computeHash(localData) : null;
|
|
109
|
+
// Already in sync
|
|
110
|
+
if (localHash === remoteHash) {
|
|
111
|
+
markSynced(syncState, manifestId, remoteHash, 'pull');
|
|
112
|
+
return { manifestId, action: 'skipped', message: 'Already in sync' };
|
|
113
|
+
}
|
|
114
|
+
// Check for conflicts
|
|
115
|
+
const localChanged = localHash !== prev.localHash && localHash !== null;
|
|
116
|
+
const remoteChanged = remoteHash !== prev.remoteHash;
|
|
117
|
+
if (localChanged && remoteChanged && !options.force) {
|
|
118
|
+
markConflict(syncState, manifestId, localHash ?? '', remoteHash);
|
|
119
|
+
return { manifestId, action: 'conflict', message: 'Both sides changed' };
|
|
120
|
+
}
|
|
121
|
+
// Pull remote → local
|
|
122
|
+
if (options.dryRun) {
|
|
123
|
+
return { manifestId, action: 'pulled', message: '[dry-run] Would pull from cloud' };
|
|
124
|
+
}
|
|
125
|
+
await localManifest.save(remoteData);
|
|
126
|
+
markSynced(syncState, manifestId, remoteHash, 'pull');
|
|
127
|
+
logger.info(`${LOG_PREFIX} Pulled ${manifestId} from cloud`);
|
|
128
|
+
return { manifestId, action: 'pulled' };
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=cloud-pull.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-pull.js","sourceRoot":"","sources":["../../src/sync/cloud-pull.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve a record's cloud-API CRUD configuration from its descriptor.
|
|
3
|
+
*
|
|
4
|
+
* Reads `StorageRecordDescriptor` metadata only; consumed by storage core's
|
|
5
|
+
* `record-sync-bridge`. Storage core owns it because adapters depend on core,
|
|
6
|
+
* not the other way around.
|
|
7
|
+
*/
|
|
8
|
+
import type { StorageRecordDescriptor } from '../schemas/record';
|
|
9
|
+
export type CloudRecordCrudConfig = {
|
|
10
|
+
apiPath: string;
|
|
11
|
+
entityPath?: string;
|
|
12
|
+
listField?: string;
|
|
13
|
+
totalField?: string;
|
|
14
|
+
createMethod?: 'POST' | 'PUT';
|
|
15
|
+
updateMethod?: 'PUT' | 'PATCH';
|
|
16
|
+
deleteMethod?: 'DELETE';
|
|
17
|
+
};
|
|
18
|
+
export declare function resolveCloudRecordCrudConfig(descriptor: StorageRecordDescriptor): CloudRecordCrudConfig;
|
|
19
|
+
//# sourceMappingURL=cloud-record-crud-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-record-crud-config.d.ts","sourceRoot":"","sources":["../../src/sync/cloud-record-crud-config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAEjE,MAAM,MAAM,qBAAqB,GAAG;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAC9B,YAAY,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC;IAC/B,YAAY,CAAC,EAAE,QAAQ,CAAC;CACxB,CAAC;AAEF,wBAAgB,4BAA4B,CAC3C,UAAU,EAAE,uBAAuB,GACjC,qBAAqB,CAkBvB"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve a record's cloud-API CRUD configuration from its descriptor.
|
|
3
|
+
*
|
|
4
|
+
* Reads `StorageRecordDescriptor` metadata only; consumed by storage core's
|
|
5
|
+
* `record-sync-bridge`. Storage core owns it because adapters depend on core,
|
|
6
|
+
* not the other way around.
|
|
7
|
+
*/
|
|
8
|
+
export function resolveCloudRecordCrudConfig(descriptor) {
|
|
9
|
+
const remoteCrud = descriptor.remote?.adapter === 'storage.cloud-api' ? descriptor.remote.crud : null;
|
|
10
|
+
if (remoteCrud) {
|
|
11
|
+
return remoteCrud;
|
|
12
|
+
}
|
|
13
|
+
const raw = descriptor.adapterConfig?.['storage.cloud-api'];
|
|
14
|
+
const value = raw && typeof raw === 'object' && 'record' in raw ? raw.record : raw;
|
|
15
|
+
if (!value ||
|
|
16
|
+
typeof value !== 'object' ||
|
|
17
|
+
typeof value.apiPath !== 'string') {
|
|
18
|
+
throw new Error(`Record '${descriptor.id}' is missing storage.cloud-api remote CRUD metadata.`);
|
|
19
|
+
}
|
|
20
|
+
return value;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=cloud-record-crud-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-record-crud-config.js","sourceRoot":"","sources":["../../src/sync/cloud-record-crud-config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAcH,MAAM,UAAU,4BAA4B,CAC3C,UAAmC;IAEnC,MAAM,UAAU,GACf,UAAU,CAAC,MAAM,EAAE,OAAO,KAAK,mBAAmB,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACpF,IAAI,UAAU,EAAE,CAAC;QAChB,OAAO,UAAmC,CAAC;IAC5C,CAAC;IAED,MAAM,GAAG,GAAG,UAAU,CAAC,aAAa,EAAE,CAAC,mBAAmB,CAAC,CAAC;IAC5D,MAAM,KAAK,GACV,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,QAAQ,IAAI,GAAG,CAAC,CAAC,CAAE,GAA2B,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;IAC/F,IACC,CAAC,KAAK;QACN,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAQ,KAA+B,CAAC,OAAO,KAAK,QAAQ,EAC3D,CAAC;QACF,MAAM,IAAI,KAAK,CAAC,WAAW,UAAU,CAAC,EAAE,sDAAsD,CAAC,CAAC;IACjG,CAAC;IACD,OAAO,KAA8B,CAAC;AACvC,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { StorageRecordDescriptor } from '../schemas/record';
|
|
2
|
+
import type { SyncBridgeDescriptor } from '../schemas/sync-bridge-descriptor';
|
|
3
|
+
export declare function isSyncableStorageRecord(descriptor: StorageRecordDescriptor): boolean;
|
|
4
|
+
export declare function createRecordSyncBridgeDescriptor(descriptor: StorageRecordDescriptor): SyncBridgeDescriptor;
|
|
5
|
+
//# sourceMappingURL=record-sync-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-sync-bridge.d.ts","sourceRoot":"","sources":["../../src/sync/record-sync-bridge.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACX,uBAAuB,EAGvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AA0B9E,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,uBAAuB,GAAG,OAAO,CASpF;AAED,wBAAgB,gCAAgC,CAC/C,UAAU,EAAE,uBAAuB,GACjC,oBAAoB,CA4DtB"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { getVibesRuntime } from '@vibesdotdev/runtime';
|
|
2
|
+
import { resolveWorkspacePath } from '../paths.js';
|
|
3
|
+
import { StorageRecord } from '../record';
|
|
4
|
+
import { resolveCloudRecordCrudConfig } from './cloud-record-crud-config.js';
|
|
5
|
+
const PAGE_SIZE = 200;
|
|
6
|
+
export function isSyncableStorageRecord(descriptor) {
|
|
7
|
+
if (descriptor.enabled === false)
|
|
8
|
+
return false;
|
|
9
|
+
if (!descriptor.allowedAdapters.includes('storage.cloud-api'))
|
|
10
|
+
return false;
|
|
11
|
+
try {
|
|
12
|
+
resolveCloudRecordCrudConfig(descriptor);
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export function createRecordSyncBridgeDescriptor(descriptor) {
|
|
20
|
+
const sync = descriptor.sync;
|
|
21
|
+
const remote = resolveCloudRecordCrudConfig(descriptor);
|
|
22
|
+
const beforePush = sync?.beforePush;
|
|
23
|
+
const deleteRemote = sync?.deleteRemote;
|
|
24
|
+
return {
|
|
25
|
+
kind: 'storage/sync-bridge',
|
|
26
|
+
id: descriptor.id,
|
|
27
|
+
name: `${descriptor.name} Sync`,
|
|
28
|
+
description: `Syncs ${descriptor.name} through storage/record metadata`,
|
|
29
|
+
tags: [...(descriptor.tags ?? []), 'storage', 'record', 'sync'],
|
|
30
|
+
source: { runtimeKind: descriptor.id },
|
|
31
|
+
target: {
|
|
32
|
+
apiPath: remote.apiPath,
|
|
33
|
+
entityPath: remote.entityPath,
|
|
34
|
+
listField: remote.listField,
|
|
35
|
+
totalField: remote.totalField,
|
|
36
|
+
includeDeleted: Boolean(descriptor.softDelete)
|
|
37
|
+
},
|
|
38
|
+
sync: {
|
|
39
|
+
direction: 'bidirectional',
|
|
40
|
+
ownershipFilter: sync?.ownershipFilter ?? 'all',
|
|
41
|
+
conflictStrategy: sync?.conflictStrategy ?? 'local-wins',
|
|
42
|
+
sensitiveFields: sync?.sensitiveFields ?? [],
|
|
43
|
+
idField: sync?.idField ?? descriptor.primaryKey ?? 'id'
|
|
44
|
+
},
|
|
45
|
+
collect: () => collectRecordItems(descriptor, sync),
|
|
46
|
+
toRemote: sync?.toRemote,
|
|
47
|
+
fromRemote: sync?.fromRemote,
|
|
48
|
+
beforePush: beforePush
|
|
49
|
+
? (record, context) => beforePush(record, {
|
|
50
|
+
...context,
|
|
51
|
+
runtime: getVibesRuntime()
|
|
52
|
+
})
|
|
53
|
+
: undefined,
|
|
54
|
+
deleteRemote: deleteRemote
|
|
55
|
+
? (record, context) => deleteRemote(record, {
|
|
56
|
+
...context,
|
|
57
|
+
runtime: getVibesRuntime()
|
|
58
|
+
})
|
|
59
|
+
: undefined,
|
|
60
|
+
writePulled: (items) => writePulledRecordItems(descriptor, sync, items)
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
async function collectRecordItems(descriptor, sync) {
|
|
64
|
+
const runtime = getVibesRuntime();
|
|
65
|
+
const record = await resolveLocalRecord(descriptor);
|
|
66
|
+
const collect = sync?.collect;
|
|
67
|
+
if (collect) {
|
|
68
|
+
return collect({
|
|
69
|
+
runtime,
|
|
70
|
+
record: record
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
return listAllRecords(record);
|
|
74
|
+
}
|
|
75
|
+
async function writePulledRecordItems(descriptor, sync, items) {
|
|
76
|
+
const runtime = getVibesRuntime();
|
|
77
|
+
const record = (await resolveLocalRecord(descriptor));
|
|
78
|
+
const writePulled = sync?.writePulled;
|
|
79
|
+
if (writePulled) {
|
|
80
|
+
await writePulled(items, { runtime, record });
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const idField = sync?.idField ?? descriptor.primaryKey ?? 'id';
|
|
84
|
+
for (const item of items) {
|
|
85
|
+
const id = item[idField];
|
|
86
|
+
if (typeof id !== 'string')
|
|
87
|
+
continue;
|
|
88
|
+
await record.delete(id, { force: true }).catch(() => undefined);
|
|
89
|
+
await record.create(item);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
async function resolveLocalRecord(descriptor) {
|
|
93
|
+
const localAdapters = descriptor.persistence?.localAdapters ?? ['storage.localdb'];
|
|
94
|
+
const localDescriptor = {
|
|
95
|
+
...descriptor,
|
|
96
|
+
defaultAdapter: localAdapters[0] ?? descriptor.defaultAdapter,
|
|
97
|
+
persistence: {
|
|
98
|
+
...(descriptor.persistence ?? { mode: 'local-first' }),
|
|
99
|
+
mode: 'local-only',
|
|
100
|
+
localAdapters,
|
|
101
|
+
remoteAdapters: descriptor.persistence?.remoteAdapters ?? ['storage.cloud-api']
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
const record = new StorageRecord(localDescriptor, {
|
|
105
|
+
'runtime/workspace-path': resolveWorkspacePath()
|
|
106
|
+
});
|
|
107
|
+
await record.initialize();
|
|
108
|
+
return record;
|
|
109
|
+
}
|
|
110
|
+
async function listAllRecords(record) {
|
|
111
|
+
const items = [];
|
|
112
|
+
let offset = 0;
|
|
113
|
+
for (;;) {
|
|
114
|
+
const page = await record.list({ limit: PAGE_SIZE, offset, includeDeleted: true });
|
|
115
|
+
items.push(...page.items);
|
|
116
|
+
if (page.items.length < PAGE_SIZE)
|
|
117
|
+
return items;
|
|
118
|
+
offset += PAGE_SIZE;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=record-sync-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-sync-bridge.js","sourceRoot":"","sources":["../../src/sync/record-sync-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve Sync Target
|
|
3
|
+
*
|
|
4
|
+
* Resolves the current sync target URL, environment name, and auth token from the runtime.
|
|
5
|
+
* Used by CLI commands and sync-bridge to determine where to push/pull data.
|
|
6
|
+
*
|
|
7
|
+
* Resolution chain for sync target:
|
|
8
|
+
* 1. config/environment → apiUrl
|
|
9
|
+
* 2. VIBES_API_URL environment variable
|
|
10
|
+
* 3. 'unknown' (no target configured)
|
|
11
|
+
*
|
|
12
|
+
* Resolution chain for auth token:
|
|
13
|
+
* 1. config/environment → apiToken
|
|
14
|
+
* 2. config/manifest#auth → credentials.token (CLI credential store)
|
|
15
|
+
* 3. VIBES_AUTH_TOKEN environment variable
|
|
16
|
+
*/
|
|
17
|
+
export interface SyncTarget {
|
|
18
|
+
syncTarget: string;
|
|
19
|
+
envName: string;
|
|
20
|
+
apiToken?: string;
|
|
21
|
+
}
|
|
22
|
+
export declare function resolveSyncTarget(): Promise<SyncTarget>;
|
|
23
|
+
//# sourceMappingURL=resolve-sync-target.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-sync-target.d.ts","sourceRoot":"","sources":["../../src/sync/resolve-sync-target.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,MAAM,WAAW,UAAU;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,UAAU,CAAC,CA+B7D"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve Sync Target
|
|
3
|
+
*
|
|
4
|
+
* Resolves the current sync target URL, environment name, and auth token from the runtime.
|
|
5
|
+
* Used by CLI commands and sync-bridge to determine where to push/pull data.
|
|
6
|
+
*
|
|
7
|
+
* Resolution chain for sync target:
|
|
8
|
+
* 1. config/environment → apiUrl
|
|
9
|
+
* 2. VIBES_API_URL environment variable
|
|
10
|
+
* 3. 'unknown' (no target configured)
|
|
11
|
+
*
|
|
12
|
+
* Resolution chain for auth token:
|
|
13
|
+
* 1. config/environment → apiToken
|
|
14
|
+
* 2. config/manifest#auth → credentials.token (CLI credential store)
|
|
15
|
+
* 3. VIBES_AUTH_TOKEN environment variable
|
|
16
|
+
*/
|
|
17
|
+
import { getRuntimeEnv, getVibesRuntime } from '@vibesdotdev/runtime';
|
|
18
|
+
export async function resolveSyncTarget() {
|
|
19
|
+
let syncTarget = getRuntimeEnv('VIBES_API_URL') ?? 'unknown';
|
|
20
|
+
let envName = 'env';
|
|
21
|
+
let apiToken;
|
|
22
|
+
try {
|
|
23
|
+
const runtime = getVibesRuntime();
|
|
24
|
+
const env = (await runtime.query('config/environment').resolve());
|
|
25
|
+
if (env?.apiUrl)
|
|
26
|
+
syncTarget = env.apiUrl;
|
|
27
|
+
if (env?.name)
|
|
28
|
+
envName = env.name;
|
|
29
|
+
else if (env?.id)
|
|
30
|
+
envName = env.id;
|
|
31
|
+
if (env?.apiToken)
|
|
32
|
+
apiToken = env.apiToken;
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
// Environment resolution may fail; use fallback
|
|
36
|
+
}
|
|
37
|
+
// Credential store lives in the app layer; consumers must supply auth via
|
|
38
|
+
// environment config or VIBES_AUTH_TOKEN.
|
|
39
|
+
// Fallback to environment variable
|
|
40
|
+
if (!apiToken && getRuntimeEnv('VIBES_AUTH_TOKEN')) {
|
|
41
|
+
apiToken = getRuntimeEnv('VIBES_AUTH_TOKEN');
|
|
42
|
+
}
|
|
43
|
+
return { syncTarget, envName, apiToken };
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=resolve-sync-target.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-sync-target.js","sourceRoot":"","sources":["../../src/sync/resolve-sync-target.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAQtE,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACtC,IAAI,UAAU,GAAG,aAAa,CAAC,eAAe,CAAC,IAAI,SAAS,CAAC;IAC7D,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,QAA4B,CAAC;IAEjC,IAAI,CAAC;QACJ,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,OAAO,EAAE,CAKxD,CAAC;QAET,IAAI,GAAG,EAAE,MAAM;YAAE,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC;QACzC,IAAI,GAAG,EAAE,IAAI;YAAE,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC;aAC7B,IAAI,GAAG,EAAE,EAAE;YAAE,OAAO,GAAG,GAAG,CAAC,EAAE,CAAC;QACnC,IAAI,GAAG,EAAE,QAAQ;YAAE,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACR,gDAAgD;IACjD,CAAC;IAED,0EAA0E;IAC1E,0CAA0C;IAE1C,mCAAmC;IACnC,IAAI,CAAC,QAAQ,IAAI,aAAa,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACpD,QAAQ,GAAG,aAAa,CAAC,kBAAkB,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAC1C,CAAC"}
|