@happyvertical/smrt-core 0.30.0
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/AGENTS.md +124 -0
- package/CLAUDE.md +1 -0
- package/LICENSE +7 -0
- package/README.md +265 -0
- package/bin/smrt-prebuild.js +26 -0
- package/dist/__tests__/fixtures/advisor-test-classes.d.ts +28 -0
- package/dist/__tests__/fixtures/advisor-test-classes.d.ts.map +1 -0
- package/dist/__tests__/fixtures/collection-coverage-fixtures.d.ts +12 -0
- package/dist/__tests__/fixtures/collection-coverage-fixtures.d.ts.map +1 -0
- package/dist/__tests__/fixtures/inheritance-resolver-fixtures.d.ts +28 -0
- package/dist/__tests__/fixtures/inheritance-resolver-fixtures.d.ts.map +1 -0
- package/dist/__tests__/fixtures/inheritance-test-classes.d.ts +43 -0
- package/dist/__tests__/fixtures/inheritance-test-classes.d.ts.map +1 -0
- package/dist/__tests__/fixtures/mcp-integration-test-classes.d.ts +18 -0
- package/dist/__tests__/fixtures/mcp-integration-test-classes.d.ts.map +1 -0
- package/dist/__tests__/fixtures/object-ai-memory-fixtures.d.ts +15 -0
- package/dist/__tests__/fixtures/object-ai-memory-fixtures.d.ts.map +1 -0
- package/dist/__tests__/fixtures/object-spec-test-classes.d.ts +13 -0
- package/dist/__tests__/fixtures/object-spec-test-classes.d.ts.map +1 -0
- package/dist/__tests__/fixtures/registry-test-classes.d.ts +23 -0
- package/dist/__tests__/fixtures/registry-test-classes.d.ts.map +1 -0
- package/dist/adapters/ai-usage.d.ts +23 -0
- package/dist/adapters/ai-usage.d.ts.map +1 -0
- package/dist/adapters/ai-usage.js +105 -0
- package/dist/adapters/ai-usage.js.map +1 -0
- package/dist/adapters/cost-rates.d.ts +20 -0
- package/dist/adapters/cost-rates.d.ts.map +1 -0
- package/dist/adapters/cost-rates.js +40 -0
- package/dist/adapters/cost-rates.js.map +1 -0
- package/dist/adapters/index.d.ts +19 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/metrics.d.ts +111 -0
- package/dist/adapters/metrics.d.ts.map +1 -0
- package/dist/adapters/metrics.js +169 -0
- package/dist/adapters/metrics.js.map +1 -0
- package/dist/adapters/pubsub.d.ts +124 -0
- package/dist/adapters/pubsub.d.ts.map +1 -0
- package/dist/adapters/pubsub.js +121 -0
- package/dist/adapters/pubsub.js.map +1 -0
- package/dist/browser.d.ts +32 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +68 -0
- package/dist/browser.js.map +1 -0
- package/dist/child-accessors.d.ts +27 -0
- package/dist/child-accessors.d.ts.map +1 -0
- package/dist/child-accessors.js +35 -0
- package/dist/child-accessors.js.map +1 -0
- package/dist/class.d.ts +313 -0
- package/dist/class.d.ts.map +1 -0
- package/dist/class.js +896 -0
- package/dist/class.js.map +1 -0
- package/dist/collection-cache.d.ts +110 -0
- package/dist/collection-cache.d.ts.map +1 -0
- package/dist/collection-cache.js +187 -0
- package/dist/collection-cache.js.map +1 -0
- package/dist/collection.d.ts +894 -0
- package/dist/collection.d.ts.map +1 -0
- package/dist/collection.js +1987 -0
- package/dist/collection.js.map +1 -0
- package/dist/config/global-config.d.ts +3 -0
- package/dist/config/global-config.d.ts.map +1 -0
- package/dist/config/global-config.js +19 -0
- package/dist/config/global-config.js.map +1 -0
- package/dist/config.d.ts +145 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +57 -0
- package/dist/config.js.map +1 -0
- package/dist/consumer-plugin/index.d.ts +22 -0
- package/dist/consumer-plugin/index.d.ts.map +1 -0
- package/dist/consumer-plugin/index.js +452 -0
- package/dist/consumer-plugin/index.js.map +1 -0
- package/dist/consumer-plugin.d.ts +8 -0
- package/dist/consumer-plugin.d.ts.map +1 -0
- package/dist/consumer-plugin.js +5 -0
- package/dist/consumer-plugin.js.map +1 -0
- package/dist/database.d.ts +95 -0
- package/dist/database.d.ts.map +1 -0
- package/dist/database.js +32 -0
- package/dist/database.js.map +1 -0
- package/dist/decorators/compatibility.d.ts +14 -0
- package/dist/decorators/compatibility.d.ts.map +1 -0
- package/dist/decorators/compatibility.js +111 -0
- package/dist/decorators/compatibility.js.map +1 -0
- package/dist/decorators/index.d.ts +381 -0
- package/dist/decorators/index.d.ts.map +1 -0
- package/dist/decorators/index.js +104 -0
- package/dist/decorators/index.js.map +1 -0
- package/dist/dispatch/bus.d.ts +306 -0
- package/dist/dispatch/bus.d.ts.map +1 -0
- package/dist/dispatch/bus.js +583 -0
- package/dist/dispatch/bus.js.map +1 -0
- package/dist/dispatch/collections/DispatchSubscriptions.d.ts +79 -0
- package/dist/dispatch/collections/DispatchSubscriptions.d.ts.map +1 -0
- package/dist/dispatch/collections/DispatchSubscriptions.js +243 -0
- package/dist/dispatch/collections/DispatchSubscriptions.js.map +1 -0
- package/dist/dispatch/collections/Dispatches.d.ts +98 -0
- package/dist/dispatch/collections/Dispatches.d.ts.map +1 -0
- package/dist/dispatch/collections/Dispatches.js +358 -0
- package/dist/dispatch/collections/Dispatches.js.map +1 -0
- package/dist/dispatch/index.d.ts +47 -0
- package/dist/dispatch/index.d.ts.map +1 -0
- package/dist/dispatch/models/Dispatch.d.ts +101 -0
- package/dist/dispatch/models/Dispatch.d.ts.map +1 -0
- package/dist/dispatch/models/Dispatch.js +162 -0
- package/dist/dispatch/models/Dispatch.js.map +1 -0
- package/dist/dispatch/models/DispatchSubscription.d.ts +83 -0
- package/dist/dispatch/models/DispatchSubscription.d.ts.map +1 -0
- package/dist/dispatch/models/DispatchSubscription.js +112 -0
- package/dist/dispatch/models/DispatchSubscription.js.map +1 -0
- package/dist/dispatch/tenant-resolver.d.ts +98 -0
- package/dist/dispatch/tenant-resolver.d.ts.map +1 -0
- package/dist/dispatch/tenant-resolver.js +32 -0
- package/dist/dispatch/tenant-resolver.js.map +1 -0
- package/dist/dispatch/types.d.ts +149 -0
- package/dist/dispatch/types.d.ts.map +1 -0
- package/dist/embeddings/hash.d.ts +33 -0
- package/dist/embeddings/hash.d.ts.map +1 -0
- package/dist/embeddings/hash.js +37 -0
- package/dist/embeddings/hash.js.map +1 -0
- package/dist/embeddings/index.d.ts +36 -0
- package/dist/embeddings/index.d.ts.map +1 -0
- package/dist/embeddings/provider.d.ts +75 -0
- package/dist/embeddings/provider.d.ts.map +1 -0
- package/dist/embeddings/provider.js +170 -0
- package/dist/embeddings/provider.js.map +1 -0
- package/dist/embeddings/similarity.d.ts +47 -0
- package/dist/embeddings/similarity.d.ts.map +1 -0
- package/dist/embeddings/similarity.js +64 -0
- package/dist/embeddings/similarity.js.map +1 -0
- package/dist/embeddings/storage.d.ts +125 -0
- package/dist/embeddings/storage.d.ts.map +1 -0
- package/dist/embeddings/storage.js +283 -0
- package/dist/embeddings/storage.js.map +1 -0
- package/dist/embeddings/types.d.ts +250 -0
- package/dist/embeddings/types.d.ts.map +1 -0
- package/dist/errors.d.ts +363 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +669 -0
- package/dist/errors.js.map +1 -0
- package/dist/generators/cli.d.ts +162 -0
- package/dist/generators/cli.d.ts.map +1 -0
- package/dist/generators/cli.js +462 -0
- package/dist/generators/cli.js.map +1 -0
- package/dist/generators/index.d.ts +13 -0
- package/dist/generators/index.d.ts.map +1 -0
- package/dist/generators/mcp-runtime-template.d.ts +60 -0
- package/dist/generators/mcp-runtime-template.d.ts.map +1 -0
- package/dist/generators/mcp-runtime-template.js +509 -0
- package/dist/generators/mcp-runtime-template.js.map +1 -0
- package/dist/generators/mcp.d.ts +231 -0
- package/dist/generators/mcp.d.ts.map +1 -0
- package/dist/generators/mcp.js +1220 -0
- package/dist/generators/mcp.js.map +1 -0
- package/dist/generators/rest.d.ts +171 -0
- package/dist/generators/rest.d.ts.map +1 -0
- package/dist/generators/rest.js +591 -0
- package/dist/generators/rest.js.map +1 -0
- package/dist/generators/swagger.d.ts +21 -0
- package/dist/generators/swagger.d.ts.map +1 -0
- package/dist/generators/swagger.js +307 -0
- package/dist/generators/swagger.js.map +1 -0
- package/dist/generators/tenant-gate.d.ts +74 -0
- package/dist/generators/tenant-gate.d.ts.map +1 -0
- package/dist/generators/tenant-gate.js +15 -0
- package/dist/generators/tenant-gate.js.map +1 -0
- package/dist/generators.d.ts +8 -0
- package/dist/generators.d.ts.map +1 -0
- package/dist/generators.js +19 -0
- package/dist/generators.js.map +1 -0
- package/dist/hierarchical.d.ts +103 -0
- package/dist/hierarchical.d.ts.map +1 -0
- package/dist/hierarchical.js +184 -0
- package/dist/hierarchical.js.map +1 -0
- package/dist/index.d.ts +57 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +202 -0
- package/dist/index.js.map +1 -0
- package/dist/interceptors.d.ts +251 -0
- package/dist/interceptors.d.ts.map +1 -0
- package/dist/interceptors.js +259 -0
- package/dist/interceptors.js.map +1 -0
- package/dist/junction.d.ts +99 -0
- package/dist/junction.d.ts.map +1 -0
- package/dist/junction.js +136 -0
- package/dist/junction.js.map +1 -0
- package/dist/knowledge.d.ts +11 -0
- package/dist/knowledge.d.ts.map +1 -0
- package/dist/knowledge.js +310 -0
- package/dist/knowledge.js.map +1 -0
- package/dist/lazy-config.d.ts +160 -0
- package/dist/lazy-config.d.ts.map +1 -0
- package/dist/lazy-config.js +146 -0
- package/dist/lazy-config.js.map +1 -0
- package/dist/manifest/discover-base-classes.d.ts +78 -0
- package/dist/manifest/discover-base-classes.d.ts.map +1 -0
- package/dist/manifest/discover-base-classes.js +85 -0
- package/dist/manifest/discover-base-classes.js.map +1 -0
- package/dist/manifest/discover-smrt-packages.d.ts +48 -0
- package/dist/manifest/discover-smrt-packages.d.ts.map +1 -0
- package/dist/manifest/discover-smrt-packages.js +361 -0
- package/dist/manifest/discover-smrt-packages.js.map +1 -0
- package/dist/manifest/generator.d.ts +93 -0
- package/dist/manifest/generator.d.ts.map +1 -0
- package/dist/manifest/generator.js +380 -0
- package/dist/manifest/generator.js.map +1 -0
- package/dist/manifest/index.d.ts +16 -0
- package/dist/manifest/index.d.ts.map +1 -0
- package/dist/manifest/index.js +51 -0
- package/dist/manifest/index.js.map +1 -0
- package/dist/manifest/manager.d.ts +51 -0
- package/dist/manifest/manager.d.ts.map +1 -0
- package/dist/manifest/manager.js +89 -0
- package/dist/manifest/manager.js.map +1 -0
- package/dist/manifest/manifest-loader.d.ts +187 -0
- package/dist/manifest/manifest-loader.d.ts.map +1 -0
- package/dist/manifest/manifest-loader.js +847 -0
- package/dist/manifest/manifest-loader.js.map +1 -0
- package/dist/manifest/sources/composite.d.ts +22 -0
- package/dist/manifest/sources/composite.d.ts.map +1 -0
- package/dist/manifest/sources/composite.js +60 -0
- package/dist/manifest/sources/composite.js.map +1 -0
- package/dist/manifest/sources/embedded.d.ts +7 -0
- package/dist/manifest/sources/embedded.d.ts.map +1 -0
- package/dist/manifest/sources/embedded.js +30 -0
- package/dist/manifest/sources/embedded.js.map +1 -0
- package/dist/manifest/sources/explicit-paths.d.ts +17 -0
- package/dist/manifest/sources/explicit-paths.d.ts.map +1 -0
- package/dist/manifest/sources/explicit-paths.js +35 -0
- package/dist/manifest/sources/explicit-paths.js.map +1 -0
- package/dist/manifest/sources/fallback.d.ts +25 -0
- package/dist/manifest/sources/fallback.d.ts.map +1 -0
- package/dist/manifest/sources/fallback.js +63 -0
- package/dist/manifest/sources/fallback.js.map +1 -0
- package/dist/manifest/sources/index.d.ts +17 -0
- package/dist/manifest/sources/index.d.ts.map +1 -0
- package/dist/manifest/sources/local-test.d.ts +7 -0
- package/dist/manifest/sources/local-test.d.ts.map +1 -0
- package/dist/manifest/sources/local-test.js +21 -0
- package/dist/manifest/sources/local-test.js.map +1 -0
- package/dist/manifest/sources/static.d.ts +7 -0
- package/dist/manifest/sources/static.d.ts.map +1 -0
- package/dist/manifest/sources/static.js +19 -0
- package/dist/manifest/sources/static.js.map +1 -0
- package/dist/manifest/sources/test.d.ts +7 -0
- package/dist/manifest/sources/test.d.ts.map +1 -0
- package/dist/manifest/sources/test.js +21 -0
- package/dist/manifest/sources/test.js.map +1 -0
- package/dist/manifest/sources/types.d.ts +79 -0
- package/dist/manifest/sources/types.d.ts.map +1 -0
- package/dist/manifest/sources/types.js +61 -0
- package/dist/manifest/sources/types.js.map +1 -0
- package/dist/manifest/static-manifest.d.ts +4 -0
- package/dist/manifest/static-manifest.d.ts.map +1 -0
- package/dist/manifest/static-manifest.js +1535 -0
- package/dist/manifest/static-manifest.js.map +1 -0
- package/dist/manifest/store.d.ts +111 -0
- package/dist/manifest/store.d.ts.map +1 -0
- package/dist/manifest/store.js +431 -0
- package/dist/manifest/store.js.map +1 -0
- package/dist/manifest/test-manifest-loader.d.ts +3 -0
- package/dist/manifest/test-manifest-loader.d.ts.map +1 -0
- package/dist/manifest/test-manifest-stub.d.ts +4 -0
- package/dist/manifest/test-manifest-stub.d.ts.map +1 -0
- package/dist/manifest/test-manifest-stub.js +80013 -0
- package/dist/manifest/test-manifest-stub.js.map +1 -0
- package/dist/manifest.d.ts +8 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +20 -0
- package/dist/manifest.js.map +1 -0
- package/dist/manifest.json +1489 -0
- package/dist/mcp-advisor/index.d.ts +499 -0
- package/dist/mcp-advisor/index.d.ts.map +1 -0
- package/dist/mcp-advisor/tools/add-ai-methods.d.ts +6 -0
- package/dist/mcp-advisor/tools/add-ai-methods.d.ts.map +1 -0
- package/dist/mcp-advisor/tools/configure-decorators.d.ts +6 -0
- package/dist/mcp-advisor/tools/configure-decorators.d.ts.map +1 -0
- package/dist/mcp-advisor/tools/generate-collection.d.ts +6 -0
- package/dist/mcp-advisor/tools/generate-collection.d.ts.map +1 -0
- package/dist/mcp-advisor/tools/generate-field-definitions.d.ts +6 -0
- package/dist/mcp-advisor/tools/generate-field-definitions.d.ts.map +1 -0
- package/dist/mcp-advisor/tools/generate-smrt-class.d.ts +6 -0
- package/dist/mcp-advisor/tools/generate-smrt-class.d.ts.map +1 -0
- package/dist/mcp-advisor/tools/get-object-config.d.ts +6 -0
- package/dist/mcp-advisor/tools/get-object-config.d.ts.map +1 -0
- package/dist/mcp-advisor/tools/get-object-schema.d.ts +10 -0
- package/dist/mcp-advisor/tools/get-object-schema.d.ts.map +1 -0
- package/dist/mcp-advisor/tools/list-registered-objects.d.ts +9 -0
- package/dist/mcp-advisor/tools/list-registered-objects.d.ts.map +1 -0
- package/dist/mcp-advisor/tools/preview-api-endpoints.d.ts +9 -0
- package/dist/mcp-advisor/tools/preview-api-endpoints.d.ts.map +1 -0
- package/dist/mcp-advisor/tools/preview-mcp-tools.d.ts +9 -0
- package/dist/mcp-advisor/tools/preview-mcp-tools.d.ts.map +1 -0
- package/dist/mcp-advisor/tools/validate-smrt-object.d.ts +6 -0
- package/dist/mcp-advisor/tools/validate-smrt-object.d.ts.map +1 -0
- package/dist/mcp-advisor/types.d.ts +209 -0
- package/dist/mcp-advisor/types.d.ts.map +1 -0
- package/dist/migrations/backfill-tracker.d.ts +84 -0
- package/dist/migrations/backfill-tracker.d.ts.map +1 -0
- package/dist/migrations/backfill-tracker.js +118 -0
- package/dist/migrations/backfill-tracker.js.map +1 -0
- package/dist/migrations/checksum.d.ts +43 -0
- package/dist/migrations/checksum.d.ts.map +1 -0
- package/dist/migrations/checksum.js +32 -0
- package/dist/migrations/checksum.js.map +1 -0
- package/dist/migrations/differ.d.ts +186 -0
- package/dist/migrations/differ.d.ts.map +1 -0
- package/dist/migrations/differ.js +601 -0
- package/dist/migrations/differ.js.map +1 -0
- package/dist/migrations/generator.d.ts +133 -0
- package/dist/migrations/generator.d.ts.map +1 -0
- package/dist/migrations/generator.js +328 -0
- package/dist/migrations/generator.js.map +1 -0
- package/dist/migrations/index.d.ts +20 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/migrations/orchestrate.d.ts +148 -0
- package/dist/migrations/orchestrate.d.ts.map +1 -0
- package/dist/migrations/orchestrate.js +118 -0
- package/dist/migrations/orchestrate.js.map +1 -0
- package/dist/migrations/tracker.d.ts +134 -0
- package/dist/migrations/tracker.d.ts.map +1 -0
- package/dist/migrations/tracker.js +624 -0
- package/dist/migrations/tracker.js.map +1 -0
- package/dist/migrations/types.d.ts +221 -0
- package/dist/migrations/types.d.ts.map +1 -0
- package/dist/migrations.d.ts +7 -0
- package/dist/migrations.d.ts.map +1 -0
- package/dist/migrations.js +26 -0
- package/dist/migrations.js.map +1 -0
- package/dist/node_modules/.pnpm/balanced-match@4.0.4/node_modules/balanced-match/dist/esm/index.js +56 -0
- package/dist/node_modules/.pnpm/balanced-match@4.0.4/node_modules/balanced-match/dist/esm/index.js.map +1 -0
- package/dist/node_modules/.pnpm/brace-expansion@5.0.5/node_modules/brace-expansion/dist/esm/index.js +163 -0
- package/dist/node_modules/.pnpm/brace-expansion@5.0.5/node_modules/brace-expansion/dist/esm/index.js.map +1 -0
- package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/assert-valid-pattern.js +13 -0
- package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/assert-valid-pattern.js.map +1 -0
- package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/ast.js +654 -0
- package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/ast.js.map +1 -0
- package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/brace-expressions.js +111 -0
- package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/brace-expressions.js.map +1 -0
- package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/escape.js +10 -0
- package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/escape.js.map +1 -0
- package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/index.js +824 -0
- package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/index.js.map +1 -0
- package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/unescape.js +10 -0
- package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/unescape.js.map +1 -0
- package/dist/object.d.ts +1202 -0
- package/dist/object.d.ts.map +1 -0
- package/dist/object.js +2731 -0
- package/dist/object.js.map +1 -0
- package/dist/polymorphic-association.d.ts +69 -0
- package/dist/polymorphic-association.d.ts.map +1 -0
- package/dist/polymorphic-association.js +96 -0
- package/dist/polymorphic-association.js.map +1 -0
- package/dist/prebuild/cli.d.ts +7 -0
- package/dist/prebuild/cli.d.ts.map +1 -0
- package/dist/prebuild/cli.js +29 -0
- package/dist/prebuild/cli.js.map +1 -0
- package/dist/prebuild/index.d.ts +22 -0
- package/dist/prebuild/index.d.ts.map +1 -0
- package/dist/prebuild/index.js +239 -0
- package/dist/prebuild/index.js.map +1 -0
- package/dist/prebuild.d.ts +8 -0
- package/dist/prebuild.d.ts.map +1 -0
- package/dist/prebuild.js +6 -0
- package/dist/prebuild.js.map +1 -0
- package/dist/registry/cache-config.d.ts +13 -0
- package/dist/registry/cache-config.d.ts.map +1 -0
- package/dist/registry/cache-config.js +17 -0
- package/dist/registry/cache-config.js.map +1 -0
- package/dist/registry/class-registration.d.ts +31 -0
- package/dist/registry/class-registration.d.ts.map +1 -0
- package/dist/registry/class-registration.js +1074 -0
- package/dist/registry/class-registration.js.map +1 -0
- package/dist/registry/collection-resolution.d.ts +45 -0
- package/dist/registry/collection-resolution.d.ts.map +1 -0
- package/dist/registry/collection-resolution.js +121 -0
- package/dist/registry/collection-resolution.js.map +1 -0
- package/dist/registry/collision-policy.d.ts +179 -0
- package/dist/registry/collision-policy.d.ts.map +1 -0
- package/dist/registry/collision-policy.js +153 -0
- package/dist/registry/collision-policy.js.map +1 -0
- package/dist/registry/diagnostics.d.ts +58 -0
- package/dist/registry/diagnostics.d.ts.map +1 -0
- package/dist/registry/diagnostics.js +54 -0
- package/dist/registry/diagnostics.js.map +1 -0
- package/dist/registry/embedding-manager.d.ts +23 -0
- package/dist/registry/embedding-manager.d.ts.map +1 -0
- package/dist/registry/embedding-manager.js +62 -0
- package/dist/registry/embedding-manager.js.map +1 -0
- package/dist/registry/index.d.ts +13 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/inheritance-resolver.d.ts +13 -0
- package/dist/registry/inheritance-resolver.d.ts.map +1 -0
- package/dist/registry/inheritance-resolver.js +244 -0
- package/dist/registry/inheritance-resolver.js.map +1 -0
- package/dist/registry/manifest-field-merge.d.ts +4 -0
- package/dist/registry/manifest-field-merge.d.ts.map +1 -0
- package/dist/registry/manifest-field-merge.js +82 -0
- package/dist/registry/manifest-field-merge.js.map +1 -0
- package/dist/registry/name-resolver.d.ts +102 -0
- package/dist/registry/name-resolver.d.ts.map +1 -0
- package/dist/registry/name-resolver.js +241 -0
- package/dist/registry/name-resolver.js.map +1 -0
- package/dist/registry/relationship-graph.d.ts +16 -0
- package/dist/registry/relationship-graph.d.ts.map +1 -0
- package/dist/registry/relationship-graph.js +79 -0
- package/dist/registry/relationship-graph.js.map +1 -0
- package/dist/registry/schema-builder.d.ts +113 -0
- package/dist/registry/schema-builder.d.ts.map +1 -0
- package/dist/registry/schema-builder.js +474 -0
- package/dist/registry/schema-builder.js.map +1 -0
- package/dist/registry/shared-state.d.ts +62 -0
- package/dist/registry/shared-state.d.ts.map +1 -0
- package/dist/registry/shared-state.js +135 -0
- package/dist/registry/shared-state.js.map +1 -0
- package/dist/registry/types.d.ts +667 -0
- package/dist/registry/types.d.ts.map +1 -0
- package/dist/registry/validator.d.ts +13 -0
- package/dist/registry/validator.d.ts.map +1 -0
- package/dist/registry/validator.js +138 -0
- package/dist/registry/validator.js.map +1 -0
- package/dist/registry.d.ts +1358 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +2301 -0
- package/dist/registry.js.map +1 -0
- package/dist/runtime/client.d.ts +34 -0
- package/dist/runtime/client.d.ts.map +1 -0
- package/dist/runtime/client.js +104 -0
- package/dist/runtime/client.js.map +1 -0
- package/dist/runtime/index.d.ts +10 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/mcp.d.ts +47 -0
- package/dist/runtime/mcp.d.ts.map +1 -0
- package/dist/runtime/mcp.js +72 -0
- package/dist/runtime/mcp.js.map +1 -0
- package/dist/runtime/server.d.ts +92 -0
- package/dist/runtime/server.d.ts.map +1 -0
- package/dist/runtime/server.js +390 -0
- package/dist/runtime/server.js.map +1 -0
- package/dist/runtime/types.d.ts +58 -0
- package/dist/runtime/types.d.ts.map +1 -0
- package/dist/runtime.d.ts +8 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +10 -0
- package/dist/runtime.js.map +1 -0
- package/dist/scanner/import-scanner.d.ts +7 -0
- package/dist/scanner/import-scanner.d.ts.map +1 -0
- package/dist/scanner/index.d.ts +12 -0
- package/dist/scanner/index.d.ts.map +1 -0
- package/dist/scanner/manifest-generator.d.ts +304 -0
- package/dist/scanner/manifest-generator.d.ts.map +1 -0
- package/dist/scanner/manifest-generator.js +1707 -0
- package/dist/scanner/manifest-generator.js.map +1 -0
- package/dist/scanner/test-file-patterns.d.ts +18 -0
- package/dist/scanner/test-file-patterns.d.ts.map +1 -0
- package/dist/scanner/test-file-patterns.js +16 -0
- package/dist/scanner/test-file-patterns.js.map +1 -0
- package/dist/scanner/types.d.ts +313 -0
- package/dist/scanner/types.d.ts.map +1 -0
- package/dist/scanner/types.js +2 -0
- package/dist/scanner/types.js.map +1 -0
- package/dist/scanner.d.ts +6 -0
- package/dist/scanner.d.ts.map +1 -0
- package/dist/scanner.js +6 -0
- package/dist/scanner.js.map +1 -0
- package/dist/schema/code-generator.d.ts +53 -0
- package/dist/schema/code-generator.d.ts.map +1 -0
- package/dist/schema/ddl/base-strategy.d.ts +80 -0
- package/dist/schema/ddl/base-strategy.d.ts.map +1 -0
- package/dist/schema/ddl/base-strategy.js +240 -0
- package/dist/schema/ddl/base-strategy.js.map +1 -0
- package/dist/schema/ddl/duckdb-strategy.d.ts +33 -0
- package/dist/schema/ddl/duckdb-strategy.d.ts.map +1 -0
- package/dist/schema/ddl/duckdb-strategy.js +74 -0
- package/dist/schema/ddl/duckdb-strategy.js.map +1 -0
- package/dist/schema/ddl/index.d.ts +53 -0
- package/dist/schema/ddl/index.d.ts.map +1 -0
- package/dist/schema/ddl/index.js +80 -0
- package/dist/schema/ddl/index.js.map +1 -0
- package/dist/schema/ddl/json-duckdb-strategy.d.ts +8 -0
- package/dist/schema/ddl/json-duckdb-strategy.d.ts.map +1 -0
- package/dist/schema/ddl/json-duckdb-strategy.js +14 -0
- package/dist/schema/ddl/json-duckdb-strategy.js.map +1 -0
- package/dist/schema/ddl/postgres-strategy.d.ts +29 -0
- package/dist/schema/ddl/postgres-strategy.d.ts.map +1 -0
- package/dist/schema/ddl/postgres-strategy.js +102 -0
- package/dist/schema/ddl/postgres-strategy.js.map +1 -0
- package/dist/schema/ddl/sqlite-strategy.d.ts +38 -0
- package/dist/schema/ddl/sqlite-strategy.d.ts.map +1 -0
- package/dist/schema/ddl/sqlite-strategy.js +74 -0
- package/dist/schema/ddl/sqlite-strategy.js.map +1 -0
- package/dist/schema/ddl/types.d.ts +114 -0
- package/dist/schema/ddl/types.d.ts.map +1 -0
- package/dist/schema/generator.d.ts +176 -0
- package/dist/schema/generator.d.ts.map +1 -0
- package/dist/schema/generator.js +1076 -0
- package/dist/schema/generator.js.map +1 -0
- package/dist/schema/index-utils.d.ts +19 -0
- package/dist/schema/index-utils.d.ts.map +1 -0
- package/dist/schema/index-utils.js +32 -0
- package/dist/schema/index-utils.js.map +1 -0
- package/dist/schema/index.d.ts +13 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/override-system.d.ts +43 -0
- package/dist/schema/override-system.d.ts.map +1 -0
- package/dist/schema/schema-aggregator.d.ts +112 -0
- package/dist/schema/schema-aggregator.d.ts.map +1 -0
- package/dist/schema/schema-manager.d.ts +95 -0
- package/dist/schema/schema-manager.d.ts.map +1 -0
- package/dist/schema/schema-manager.js +283 -0
- package/dist/schema/schema-manager.js.map +1 -0
- package/dist/schema/sql-identifiers.d.ts +107 -0
- package/dist/schema/sql-identifiers.d.ts.map +1 -0
- package/dist/schema/sql-identifiers.js +190 -0
- package/dist/schema/sql-identifiers.js.map +1 -0
- package/dist/schema/table-verifier.d.ts +10 -0
- package/dist/schema/table-verifier.d.ts.map +1 -0
- package/dist/schema/table-verifier.js +37 -0
- package/dist/schema/table-verifier.js.map +1 -0
- package/dist/schema/types.d.ts +241 -0
- package/dist/schema/types.d.ts.map +1 -0
- package/dist/schema/utils.d.ts +32 -0
- package/dist/schema/utils.d.ts.map +1 -0
- package/dist/schema/utils.js +134 -0
- package/dist/schema/utils.js.map +1 -0
- package/dist/scripts/create-wrappers.js +89 -0
- package/dist/scripts/generate-manifest.js +155 -0
- package/dist/scripts/generate-test-manifest.js +77 -0
- package/dist/scripts/migrate-datetime-to-timestamp.ts +310 -0
- package/dist/scripts/prepack.js +49 -0
- package/dist/signals/bus.d.ts +64 -0
- package/dist/signals/bus.d.ts.map +1 -0
- package/dist/signals/bus.js +102 -0
- package/dist/signals/bus.js.map +1 -0
- package/dist/signals/index.d.ts +11 -0
- package/dist/signals/index.d.ts.map +1 -0
- package/dist/signals/sanitizer.d.ts +54 -0
- package/dist/signals/sanitizer.d.ts.map +1 -0
- package/dist/signals/sanitizer.js +111 -0
- package/dist/signals/sanitizer.js.map +1 -0
- package/dist/smrt-knowledge.json +335 -0
- package/dist/system/compatibility.d.ts +8 -0
- package/dist/system/compatibility.d.ts.map +1 -0
- package/dist/system/compatibility.js +409 -0
- package/dist/system/compatibility.js.map +1 -0
- package/dist/system/index.d.ts +9 -0
- package/dist/system/index.d.ts.map +1 -0
- package/dist/system/schema.d.ts +69 -0
- package/dist/system/schema.d.ts.map +1 -0
- package/dist/system/schema.js +271 -0
- package/dist/system/schema.js.map +1 -0
- package/dist/system/types.d.ts +135 -0
- package/dist/system/types.d.ts.map +1 -0
- package/dist/system-fields.d.ts +44 -0
- package/dist/system-fields.d.ts.map +1 -0
- package/dist/system-fields.js +55 -0
- package/dist/system-fields.js.map +1 -0
- package/dist/table-cache.d.ts +28 -0
- package/dist/table-cache.d.ts.map +1 -0
- package/dist/table-cache.js +21 -0
- package/dist/table-cache.js.map +1 -0
- package/dist/test-utils.d.ts +140 -0
- package/dist/test-utils.d.ts.map +1 -0
- package/dist/testing/database.d.ts +73 -0
- package/dist/testing/database.d.ts.map +1 -0
- package/dist/testing/database.js +204 -0
- package/dist/testing/database.js.map +1 -0
- package/dist/testing/index.d.ts +21 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing.d.ts +6 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +5 -0
- package/dist/testing.js.map +1 -0
- package/dist/tools/index.d.ts +8 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/tool-executor.d.ts +101 -0
- package/dist/tools/tool-executor.d.ts.map +1 -0
- package/dist/tools/tool-executor.js +142 -0
- package/dist/tools/tool-executor.js.map +1 -0
- package/dist/tools/tool-generator.d.ts +54 -0
- package/dist/tools/tool-generator.d.ts.map +1 -0
- package/dist/tools/tool-generator.js +121 -0
- package/dist/tools/tool-generator.js.map +1 -0
- package/dist/utils/chunk.d.ts +32 -0
- package/dist/utils/chunk.d.ts.map +1 -0
- package/dist/utils/chunk.js +14 -0
- package/dist/utils/chunk.js.map +1 -0
- package/dist/utils/import-workspace-module.d.ts +8 -0
- package/dist/utils/import-workspace-module.d.ts.map +1 -0
- package/dist/utils/import-workspace-module.js +81 -0
- package/dist/utils/import-workspace-module.js.map +1 -0
- package/dist/utils/json.d.ts +102 -0
- package/dist/utils/json.d.ts.map +1 -0
- package/dist/utils/json.js +43 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/utils/lru-cache.d.ts +69 -0
- package/dist/utils/lru-cache.d.ts.map +1 -0
- package/dist/utils/lru-cache.js +100 -0
- package/dist/utils/lru-cache.js.map +1 -0
- package/dist/utils/naming.d.ts +16 -0
- package/dist/utils/naming.d.ts.map +1 -0
- package/dist/utils/naming.js +23 -0
- package/dist/utils/naming.js.map +1 -0
- package/dist/utils/qualified-names.d.ts +122 -0
- package/dist/utils/qualified-names.d.ts.map +1 -0
- package/dist/utils/qualified-names.js +82 -0
- package/dist/utils/qualified-names.js.map +1 -0
- package/dist/utils/scanner-module.d.ts +37 -0
- package/dist/utils/scanner-module.d.ts.map +1 -0
- package/dist/utils.d.ts +177 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +185 -0
- package/dist/utils.js.map +1 -0
- package/dist/vite-plugin/import-build-aware.d.ts +68 -0
- package/dist/vite-plugin/import-build-aware.d.ts.map +1 -0
- package/dist/vite-plugin/import-build-aware.js +72 -0
- package/dist/vite-plugin/import-build-aware.js.map +1 -0
- package/dist/vite-plugin/index.d.ts +59 -0
- package/dist/vite-plugin/index.d.ts.map +1 -0
- package/dist/vite-plugin/index.js +1400 -0
- package/dist/vite-plugin/index.js.map +1 -0
- package/dist/vite-plugin/sveltekit-generator.d.ts +66 -0
- package/dist/vite-plugin/sveltekit-generator.d.ts.map +1 -0
- package/dist/vite-plugin/sveltekit-generator.js +1375 -0
- package/dist/vite-plugin/sveltekit-generator.js.map +1 -0
- package/dist/vite-plugin/templates/default-ui.ts +432 -0
- package/dist/vite-plugin/templates/default.html +206 -0
- package/dist/vite-plugin.d.ts +8 -0
- package/dist/vite-plugin.d.ts.map +1 -0
- package/dist/vite-plugin.js +11 -0
- package/dist/vite-plugin.js.map +1 -0
- package/package.json +208 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { BaseDDLStrategy } from "./base-strategy.js";
|
|
2
|
+
import { DuckDBStrategy } from "./duckdb-strategy.js";
|
|
3
|
+
import { JsonDuckDBStrategy } from "./json-duckdb-strategy.js";
|
|
4
|
+
import { PostgresStrategy } from "./postgres-strategy.js";
|
|
5
|
+
import { SQLiteStrategy } from "./sqlite-strategy.js";
|
|
6
|
+
const strategies = {
|
|
7
|
+
sqlite: new SQLiteStrategy(),
|
|
8
|
+
duckdb: new DuckDBStrategy(),
|
|
9
|
+
json: new JsonDuckDBStrategy(),
|
|
10
|
+
postgres: new PostgresStrategy()
|
|
11
|
+
};
|
|
12
|
+
function getDDLStrategy(engine) {
|
|
13
|
+
const strategy = strategies[engine];
|
|
14
|
+
if (!strategy) {
|
|
15
|
+
throw new Error(`Unknown database engine: ${engine}`);
|
|
16
|
+
}
|
|
17
|
+
return strategy;
|
|
18
|
+
}
|
|
19
|
+
function getAllStrategies() {
|
|
20
|
+
return Object.values(strategies);
|
|
21
|
+
}
|
|
22
|
+
function generateDDLForEngine(schema, engine) {
|
|
23
|
+
const strategy = getDDLStrategy(engine);
|
|
24
|
+
return {
|
|
25
|
+
createTable: strategy.generateCreateTable(schema),
|
|
26
|
+
indexes: strategy.generateIndexes(schema),
|
|
27
|
+
triggers: strategy.generateTriggers(schema)
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function generateMultiEngineDDL(schema) {
|
|
31
|
+
return {
|
|
32
|
+
sqlite: generateDDLForEngine(schema, "sqlite"),
|
|
33
|
+
duckdb: generateDDLForEngine(schema, "duckdb"),
|
|
34
|
+
json: generateDDLForEngine(schema, "json"),
|
|
35
|
+
postgres: generateDDLForEngine(schema, "postgres")
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function detectEngine(url, type) {
|
|
39
|
+
if (type) {
|
|
40
|
+
switch (type.toLowerCase()) {
|
|
41
|
+
case "sqlite":
|
|
42
|
+
case "libsql":
|
|
43
|
+
return "sqlite";
|
|
44
|
+
case "duckdb":
|
|
45
|
+
case "json":
|
|
46
|
+
return "duckdb";
|
|
47
|
+
case "postgres":
|
|
48
|
+
case "postgresql":
|
|
49
|
+
case "pg":
|
|
50
|
+
return "postgres";
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const urlLower = url.toLowerCase();
|
|
54
|
+
if (urlLower.startsWith("postgres://") || urlLower.startsWith("postgresql://")) {
|
|
55
|
+
return "postgres";
|
|
56
|
+
}
|
|
57
|
+
if (urlLower.endsWith(".duckdb") || urlLower.includes("duckdb")) {
|
|
58
|
+
return "duckdb";
|
|
59
|
+
}
|
|
60
|
+
if (urlLower.endsWith(".json") || urlLower.includes("/json/") || urlLower.includes("-json")) {
|
|
61
|
+
return "duckdb";
|
|
62
|
+
}
|
|
63
|
+
if (urlLower.endsWith(".db") || urlLower.endsWith(".sqlite") || urlLower.endsWith(".sqlite3") || urlLower === ":memory:") {
|
|
64
|
+
return "sqlite";
|
|
65
|
+
}
|
|
66
|
+
return "sqlite";
|
|
67
|
+
}
|
|
68
|
+
export {
|
|
69
|
+
BaseDDLStrategy,
|
|
70
|
+
DuckDBStrategy,
|
|
71
|
+
JsonDuckDBStrategy,
|
|
72
|
+
PostgresStrategy,
|
|
73
|
+
SQLiteStrategy,
|
|
74
|
+
detectEngine,
|
|
75
|
+
generateDDLForEngine,
|
|
76
|
+
generateMultiEngineDDL,
|
|
77
|
+
getAllStrategies,
|
|
78
|
+
getDDLStrategy
|
|
79
|
+
};
|
|
80
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/schema/ddl/index.ts"],"sourcesContent":["/**\n * DDL Generator Module\n *\n * Per-engine DDL generation for SMRT schema management.\n * SMRT handles ALL database maintenance directly - SDK SQL remains a pure query/CRUD layer.\n */\n\nexport { BaseDDLStrategy } from './base-strategy.js';\nexport { DuckDBStrategy } from './duckdb-strategy.js';\nexport { JsonDuckDBStrategy } from './json-duckdb-strategy.js';\nexport { PostgresStrategy } from './postgres-strategy.js';\nexport { SQLiteStrategy } from './sqlite-strategy.js';\nexport * from './types.js';\n\nimport type { SchemaDefinition } from '../types.js';\nimport { DuckDBStrategy } from './duckdb-strategy.js';\nimport { JsonDuckDBStrategy } from './json-duckdb-strategy.js';\nimport { PostgresStrategy } from './postgres-strategy.js';\nimport { SQLiteStrategy } from './sqlite-strategy.js';\nimport type {\n DatabaseEngine,\n DDLStrategy,\n EngineSpecificDDL,\n MultiEngineDDL,\n} from './types.js';\n\n// Singleton instances for each strategy\nconst strategies: Record<DatabaseEngine, DDLStrategy> = {\n sqlite: new SQLiteStrategy(),\n duckdb: new DuckDBStrategy(),\n json: new JsonDuckDBStrategy(),\n postgres: new PostgresStrategy(),\n};\n\n/**\n * Get the DDL strategy for a specific database engine\n *\n * @param engine - The database engine type\n * @returns The DDL strategy for that engine\n */\nexport function getDDLStrategy(engine: DatabaseEngine): DDLStrategy {\n const strategy = strategies[engine];\n if (!strategy) {\n throw new Error(`Unknown database engine: ${engine}`);\n }\n return strategy;\n}\n\n/**\n * Get all available DDL strategies\n *\n * @returns Array of all DDL strategies\n */\nexport function getAllStrategies(): DDLStrategy[] {\n return Object.values(strategies);\n}\n\n/**\n * Generate DDL for a specific engine\n *\n * @param schema - The schema definition\n * @param engine - The target database engine\n * @returns Engine-specific DDL (createTable, indexes, triggers)\n */\nexport function generateDDLForEngine(\n schema: SchemaDefinition,\n engine: DatabaseEngine,\n): EngineSpecificDDL {\n const strategy = getDDLStrategy(engine);\n\n return {\n createTable: strategy.generateCreateTable(schema),\n indexes: strategy.generateIndexes(schema),\n triggers: strategy.generateTriggers(schema),\n };\n}\n\n/**\n * Generate DDL for all supported engines\n *\n * Useful for storing pre-generated DDL in manifest at build time.\n *\n * @param schema - The schema definition\n * @returns DDL for all engines\n */\nexport function generateMultiEngineDDL(\n schema: SchemaDefinition,\n): MultiEngineDDL {\n return {\n sqlite: generateDDLForEngine(schema, 'sqlite'),\n duckdb: generateDDLForEngine(schema, 'duckdb'),\n json: generateDDLForEngine(schema, 'json'),\n postgres: generateDDLForEngine(schema, 'postgres'),\n };\n}\n\n/**\n * Detect database engine from URL or connection type\n *\n * @param url - Database URL or path\n * @param type - Optional explicit type hint\n * @returns Detected database engine\n */\nexport function detectEngine(url: string, type?: string): DatabaseEngine {\n // Explicit type takes precedence\n if (type) {\n switch (type.toLowerCase()) {\n case 'sqlite':\n case 'libsql':\n return 'sqlite';\n case 'duckdb':\n case 'json':\n // Query-level compatibility treats JSON as DuckDB. DDL callers that\n // need JSON's UUID-as-TEXT behavior should detect the adapter\n // structurally (exportTable) or request the `json` strategy directly.\n return 'duckdb';\n case 'postgres':\n case 'postgresql':\n case 'pg':\n return 'postgres';\n default:\n // Fall through to URL detection\n break;\n }\n }\n\n // Detect from URL\n const urlLower = url.toLowerCase();\n\n if (\n urlLower.startsWith('postgres://') ||\n urlLower.startsWith('postgresql://')\n ) {\n return 'postgres';\n }\n\n if (urlLower.endsWith('.duckdb') || urlLower.includes('duckdb')) {\n return 'duckdb';\n }\n\n // JSON adapter detection - matches .json extension, /json/ path, or -json- in name\n // This is needed because JSON adapter uses DuckDB internally and requires\n // inline UNIQUE constraints for UPSERT to work\n if (\n urlLower.endsWith('.json') ||\n urlLower.includes('/json/') ||\n urlLower.includes('-json')\n ) {\n // Query-level compatibility treats JSON as DuckDB. DDL callers that need\n // JSON's UUID-as-TEXT behavior should detect the adapter structurally\n // (exportTable) or request the `json` strategy directly.\n return 'duckdb';\n }\n\n // Default to SQLite for file-based databases\n if (\n urlLower.endsWith('.db') ||\n urlLower.endsWith('.sqlite') ||\n urlLower.endsWith('.sqlite3') ||\n urlLower === ':memory:'\n ) {\n return 'sqlite';\n }\n\n // Default fallback\n return 'sqlite';\n}\n"],"names":["SQLiteStrategy","DuckDBStrategy","JsonDuckDBStrategy","PostgresStrategy"],"mappings":";;;;;AA2BA,MAAM,aAAkD;AAAA,EACtD,QAAQ,IAAIA,eAAAA;AAAAA,EACZ,QAAQ,IAAIC,eAAAA;AAAAA,EACZ,MAAM,IAAIC,mBAAAA;AAAAA,EACV,UAAU,IAAIC,iBAAAA;AAChB;AAQO,SAAS,eAAe,QAAqC;AAClE,QAAM,WAAW,WAAW,MAAM;AAClC,MAAI,CAAC,UAAU;AACb,UAAM,IAAI,MAAM,4BAA4B,MAAM,EAAE;AAAA,EACtD;AACA,SAAO;AACT;AAOO,SAAS,mBAAkC;AAChD,SAAO,OAAO,OAAO,UAAU;AACjC;AASO,SAAS,qBACd,QACA,QACmB;AACnB,QAAM,WAAW,eAAe,MAAM;AAEtC,SAAO;AAAA,IACL,aAAa,SAAS,oBAAoB,MAAM;AAAA,IAChD,SAAS,SAAS,gBAAgB,MAAM;AAAA,IACxC,UAAU,SAAS,iBAAiB,MAAM;AAAA,EAAA;AAE9C;AAUO,SAAS,uBACd,QACgB;AAChB,SAAO;AAAA,IACL,QAAQ,qBAAqB,QAAQ,QAAQ;AAAA,IAC7C,QAAQ,qBAAqB,QAAQ,QAAQ;AAAA,IAC7C,MAAM,qBAAqB,QAAQ,MAAM;AAAA,IACzC,UAAU,qBAAqB,QAAQ,UAAU;AAAA,EAAA;AAErD;AASO,SAAS,aAAa,KAAa,MAA+B;AAEvE,MAAI,MAAM;AACR,YAAQ,KAAK,eAAY;AAAA,MACvB,KAAK;AAAA,MACL,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AAAA,MACL,KAAK;AAIH,eAAO;AAAA,MACT,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACH,eAAO;AAAA,IAGP;AAAA,EAEN;AAGA,QAAM,WAAW,IAAI,YAAA;AAErB,MACE,SAAS,WAAW,aAAa,KACjC,SAAS,WAAW,eAAe,GACnC;AACA,WAAO;AAAA,EACT;AAEA,MAAI,SAAS,SAAS,SAAS,KAAK,SAAS,SAAS,QAAQ,GAAG;AAC/D,WAAO;AAAA,EACT;AAKA,MACE,SAAS,SAAS,OAAO,KACzB,SAAS,SAAS,QAAQ,KAC1B,SAAS,SAAS,OAAO,GACzB;AAIA,WAAO;AAAA,EACT;AAGA,MACE,SAAS,SAAS,KAAK,KACvB,SAAS,SAAS,SAAS,KAC3B,SAAS,SAAS,UAAU,KAC5B,aAAa,YACb;AACA,WAAO;AAAA,EACT;AAGA,SAAO;AACT;"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { SQLDataType } from '../types.js';
|
|
2
|
+
import { DuckDBStrategy } from './duckdb-strategy.js';
|
|
3
|
+
import { DatabaseEngine } from './types.js';
|
|
4
|
+
export declare class JsonDuckDBStrategy extends DuckDBStrategy {
|
|
5
|
+
readonly engine: DatabaseEngine;
|
|
6
|
+
mapType(type: SQLDataType): string;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=json-duckdb-strategy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-duckdb-strategy.d.ts","sourceRoot":"","sources":["../../../src/schema/ddl/json-duckdb-strategy.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,qBAAa,kBAAmB,SAAQ,cAAc;IACpD,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAU;IAEzC,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM;CAOnC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { DuckDBStrategy } from "./duckdb-strategy.js";
|
|
2
|
+
class JsonDuckDBStrategy extends DuckDBStrategy {
|
|
3
|
+
engine = "json";
|
|
4
|
+
mapType(type) {
|
|
5
|
+
if (type === "UUID") {
|
|
6
|
+
return "TEXT";
|
|
7
|
+
}
|
|
8
|
+
return super.mapType(type);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export {
|
|
12
|
+
JsonDuckDBStrategy
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=json-duckdb-strategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-duckdb-strategy.js","sources":["../../../src/schema/ddl/json-duckdb-strategy.ts"],"sourcesContent":["/**\n * JSON Adapter DDL Strategy\n *\n * The JSON adapter is backed by DuckDB, so it needs DuckDB's inline UNIQUE\n * constraints for UPSERT. However, DuckDB's Node API currently round-trips\n * native UUID values as their 128-bit numeric representation, so SMRT stores\n * UUID columns as TEXT for JSON-backed databases.\n */\n\nimport type { SQLDataType } from '../types.js';\nimport { DuckDBStrategy } from './duckdb-strategy.js';\nimport type { DatabaseEngine } from './types.js';\n\nexport class JsonDuckDBStrategy extends DuckDBStrategy {\n readonly engine: DatabaseEngine = 'json';\n\n mapType(type: SQLDataType): string {\n if (type === 'UUID') {\n return 'TEXT';\n }\n\n return super.mapType(type);\n }\n}\n"],"names":[],"mappings":";AAaO,MAAM,2BAA2B,eAAe;AAAA,EAC5C,SAAyB;AAAA,EAElC,QAAQ,MAA2B;AACjC,QAAI,SAAS,QAAQ;AACnB,aAAO;AAAA,IACT;AAEA,WAAO,MAAM,QAAQ,IAAI;AAAA,EAC3B;AACF;"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { SQLDataType, TriggerDefinition } from '../types.js';
|
|
2
|
+
import { BaseDDLStrategy } from './base-strategy.js';
|
|
3
|
+
import { DatabaseEngine } from './types.js';
|
|
4
|
+
export declare class PostgresStrategy extends BaseDDLStrategy {
|
|
5
|
+
readonly engine: DatabaseEngine;
|
|
6
|
+
/**
|
|
7
|
+
* Map types for PostgreSQL
|
|
8
|
+
* - JSON → JSONB (more efficient, supports indexing)
|
|
9
|
+
* - TIMESTAMP → TIMESTAMP WITH TIME ZONE (best practice)
|
|
10
|
+
*/
|
|
11
|
+
mapType(type: SQLDataType): string;
|
|
12
|
+
/**
|
|
13
|
+
* Generate trigger for PostgreSQL
|
|
14
|
+
*
|
|
15
|
+
* PostgreSQL triggers require a separate function, then the trigger.
|
|
16
|
+
* For updated_at timestamps, we generate both.
|
|
17
|
+
*/
|
|
18
|
+
protected generateTriggerStatement(tableName: string, trigger: TriggerDefinition): string;
|
|
19
|
+
/**
|
|
20
|
+
* PostgreSQL supports triggers
|
|
21
|
+
*/
|
|
22
|
+
supportsTriggers(): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* PostgreSQL doesn't require inline UNIQUE for UPSERT
|
|
25
|
+
* Both inline and separate indexes work with ON CONFLICT
|
|
26
|
+
*/
|
|
27
|
+
requiresInlineUnique(): boolean;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=postgres-strategy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres-strategy.d.ts","sourceRoot":"","sources":["../../../src/schema/ddl/postgres-strategy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,qBAAa,gBAAiB,SAAQ,eAAe;IACnD,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAc;IAE7C;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM;IAelC;;;;;OAKG;IACH,SAAS,CAAC,wBAAwB,CAChC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,iBAAiB,GACzB,MAAM;IAkDT;;OAEG;IACH,gBAAgB,IAAI,OAAO;IAI3B;;;OAGG;IACH,oBAAoB,IAAI,OAAO;CAGhC"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { BaseDDLStrategy } from "./base-strategy.js";
|
|
2
|
+
class PostgresStrategy extends BaseDDLStrategy {
|
|
3
|
+
engine = "postgres";
|
|
4
|
+
/**
|
|
5
|
+
* Map types for PostgreSQL
|
|
6
|
+
* - JSON → JSONB (more efficient, supports indexing)
|
|
7
|
+
* - TIMESTAMP → TIMESTAMP WITH TIME ZONE (best practice)
|
|
8
|
+
*/
|
|
9
|
+
mapType(type) {
|
|
10
|
+
switch (type) {
|
|
11
|
+
case "JSON":
|
|
12
|
+
return "JSONB";
|
|
13
|
+
// PostgreSQL JSONB is more efficient
|
|
14
|
+
case "TIMESTAMP":
|
|
15
|
+
return "TIMESTAMP";
|
|
16
|
+
// Could use TIMESTAMPTZ for timezone-aware
|
|
17
|
+
case "REAL":
|
|
18
|
+
return "DOUBLE PRECISION";
|
|
19
|
+
// PostgreSQL convention
|
|
20
|
+
case "UUID":
|
|
21
|
+
return "uuid";
|
|
22
|
+
// Native 16-byte uuid (R11) — vs 37-byte text
|
|
23
|
+
default:
|
|
24
|
+
return super.mapType(type);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Generate trigger for PostgreSQL
|
|
29
|
+
*
|
|
30
|
+
* PostgreSQL triggers require a separate function, then the trigger.
|
|
31
|
+
* For updated_at timestamps, we generate both.
|
|
32
|
+
*/
|
|
33
|
+
generateTriggerStatement(tableName, trigger) {
|
|
34
|
+
if (trigger.name.includes("updated_at")) {
|
|
35
|
+
const functionName = `update_${tableName}_updated_at`;
|
|
36
|
+
let sql2 = `-- Function for ${trigger.name}
|
|
37
|
+
`;
|
|
38
|
+
sql2 += `CREATE OR REPLACE FUNCTION ${functionName}()
|
|
39
|
+
`;
|
|
40
|
+
sql2 += `RETURNS TRIGGER AS $$
|
|
41
|
+
`;
|
|
42
|
+
sql2 += `BEGIN
|
|
43
|
+
`;
|
|
44
|
+
sql2 += ` NEW.updated_at = CURRENT_TIMESTAMP;
|
|
45
|
+
`;
|
|
46
|
+
sql2 += ` RETURN NEW;
|
|
47
|
+
`;
|
|
48
|
+
sql2 += `END;
|
|
49
|
+
`;
|
|
50
|
+
sql2 += `$$ LANGUAGE plpgsql;
|
|
51
|
+
|
|
52
|
+
`;
|
|
53
|
+
sql2 += `-- Trigger
|
|
54
|
+
`;
|
|
55
|
+
sql2 += `DROP TRIGGER IF EXISTS "${trigger.name}" ON "${tableName}";
|
|
56
|
+
`;
|
|
57
|
+
sql2 += `CREATE TRIGGER "${trigger.name}"
|
|
58
|
+
`;
|
|
59
|
+
sql2 += `${trigger.when} ${trigger.event} ON "${tableName}"
|
|
60
|
+
`;
|
|
61
|
+
sql2 += `FOR EACH ROW
|
|
62
|
+
`;
|
|
63
|
+
sql2 += `EXECUTE FUNCTION ${functionName}();`;
|
|
64
|
+
return sql2;
|
|
65
|
+
}
|
|
66
|
+
let sql = `DROP TRIGGER IF EXISTS "${trigger.name}" ON "${tableName}";
|
|
67
|
+
`;
|
|
68
|
+
sql += `CREATE TRIGGER "${trigger.name}"
|
|
69
|
+
`;
|
|
70
|
+
sql += `${trigger.when} ${trigger.event} ON "${tableName}"
|
|
71
|
+
`;
|
|
72
|
+
sql += `FOR EACH ROW
|
|
73
|
+
`;
|
|
74
|
+
if (trigger.condition) {
|
|
75
|
+
sql += `WHEN (${trigger.condition})
|
|
76
|
+
`;
|
|
77
|
+
}
|
|
78
|
+
if (trigger.body.includes("EXECUTE")) {
|
|
79
|
+
sql += trigger.body;
|
|
80
|
+
} else {
|
|
81
|
+
sql += `EXECUTE FUNCTION ${trigger.body}`;
|
|
82
|
+
}
|
|
83
|
+
return `${sql};`;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* PostgreSQL supports triggers
|
|
87
|
+
*/
|
|
88
|
+
supportsTriggers() {
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* PostgreSQL doesn't require inline UNIQUE for UPSERT
|
|
93
|
+
* Both inline and separate indexes work with ON CONFLICT
|
|
94
|
+
*/
|
|
95
|
+
requiresInlineUnique() {
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
export {
|
|
100
|
+
PostgresStrategy
|
|
101
|
+
};
|
|
102
|
+
//# sourceMappingURL=postgres-strategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres-strategy.js","sources":["../../../src/schema/ddl/postgres-strategy.ts"],"sourcesContent":["/**\n * PostgreSQL DDL Strategy\n *\n * PostgreSQL-specific DDL generation with the following characteristics:\n * - JSONB type for JSON columns (more efficient than JSON)\n * - Native BOOLEAN type\n * - Full trigger support with PL/pgSQL functions\n * - UNIQUE can be inline or separate indexes\n * - Supports CAST in DEFAULT values\n */\n\nimport type { SQLDataType, TriggerDefinition } from '../types.js';\nimport { BaseDDLStrategy } from './base-strategy.js';\nimport type { DatabaseEngine } from './types.js';\n\nexport class PostgresStrategy extends BaseDDLStrategy {\n readonly engine: DatabaseEngine = 'postgres';\n\n /**\n * Map types for PostgreSQL\n * - JSON → JSONB (more efficient, supports indexing)\n * - TIMESTAMP → TIMESTAMP WITH TIME ZONE (best practice)\n */\n mapType(type: SQLDataType): string {\n switch (type) {\n case 'JSON':\n return 'JSONB'; // PostgreSQL JSONB is more efficient\n case 'TIMESTAMP':\n return 'TIMESTAMP'; // Could use TIMESTAMPTZ for timezone-aware\n case 'REAL':\n return 'DOUBLE PRECISION'; // PostgreSQL convention\n case 'UUID':\n return 'uuid'; // Native 16-byte uuid (R11) — vs 37-byte text\n default:\n return super.mapType(type);\n }\n }\n\n /**\n * Generate trigger for PostgreSQL\n *\n * PostgreSQL triggers require a separate function, then the trigger.\n * For updated_at timestamps, we generate both.\n */\n protected generateTriggerStatement(\n tableName: string,\n trigger: TriggerDefinition,\n ): string {\n // For simple triggers, we need to create a function first\n // This is PostgreSQL's two-step trigger process\n\n // Check if this is an updated_at trigger\n if (trigger.name.includes('updated_at')) {\n // Generate the function and trigger for updated_at\n const functionName = `update_${tableName}_updated_at`;\n\n let sql = `-- Function for ${trigger.name}\\n`;\n sql += `CREATE OR REPLACE FUNCTION ${functionName}()\\n`;\n sql += `RETURNS TRIGGER AS $$\\n`;\n sql += `BEGIN\\n`;\n sql += ` NEW.updated_at = CURRENT_TIMESTAMP;\\n`;\n sql += ` RETURN NEW;\\n`;\n sql += `END;\\n`;\n sql += `$$ LANGUAGE plpgsql;\\n\\n`;\n\n sql += `-- Trigger\\n`;\n sql += `DROP TRIGGER IF EXISTS \"${trigger.name}\" ON \"${tableName}\";\\n`;\n sql += `CREATE TRIGGER \"${trigger.name}\"\\n`;\n sql += `${trigger.when} ${trigger.event} ON \"${tableName}\"\\n`;\n sql += `FOR EACH ROW\\n`;\n sql += `EXECUTE FUNCTION ${functionName}();`;\n\n return sql;\n }\n\n // For custom triggers, use the provided body\n let sql = `DROP TRIGGER IF EXISTS \"${trigger.name}\" ON \"${tableName}\";\\n`;\n sql += `CREATE TRIGGER \"${trigger.name}\"\\n`;\n sql += `${trigger.when} ${trigger.event} ON \"${tableName}\"\\n`;\n sql += `FOR EACH ROW\\n`;\n\n if (trigger.condition) {\n sql += `WHEN (${trigger.condition})\\n`;\n }\n\n // PostgreSQL triggers need EXECUTE FUNCTION or EXECUTE PROCEDURE\n // If body contains a function call, use it directly\n if (trigger.body.includes('EXECUTE')) {\n sql += trigger.body;\n } else {\n // Wrap in anonymous DO block or assume it's a function name\n sql += `EXECUTE FUNCTION ${trigger.body}`;\n }\n\n return `${sql};`;\n }\n\n /**\n * PostgreSQL supports triggers\n */\n supportsTriggers(): boolean {\n return true;\n }\n\n /**\n * PostgreSQL doesn't require inline UNIQUE for UPSERT\n * Both inline and separate indexes work with ON CONFLICT\n */\n requiresInlineUnique(): boolean {\n return false;\n }\n}\n"],"names":["sql"],"mappings":";AAeO,MAAM,yBAAyB,gBAAgB;AAAA,EAC3C,SAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOlC,QAAQ,MAA2B;AACjC,YAAQ,MAAA;AAAA,MACN,KAAK;AACH,eAAO;AAAA;AAAA,MACT,KAAK;AACH,eAAO;AAAA;AAAA,MACT,KAAK;AACH,eAAO;AAAA;AAAA,MACT,KAAK;AACH,eAAO;AAAA;AAAA,MACT;AACE,eAAO,MAAM,QAAQ,IAAI;AAAA,IAAA;AAAA,EAE/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQU,yBACR,WACA,SACQ;AAKR,QAAI,QAAQ,KAAK,SAAS,YAAY,GAAG;AAEvC,YAAM,eAAe,UAAU,SAAS;AAExC,UAAIA,OAAM,mBAAmB,QAAQ,IAAI;AAAA;AACzCA,cAAO,8BAA8B,YAAY;AAAA;AACjDA,cAAO;AAAA;AACPA,cAAO;AAAA;AACPA,cAAO;AAAA;AACPA,cAAO;AAAA;AACPA,cAAO;AAAA;AACPA,cAAO;AAAA;AAAA;AAEPA,cAAO;AAAA;AACPA,cAAO,2BAA2B,QAAQ,IAAI,SAAS,SAAS;AAAA;AAChEA,cAAO,mBAAmB,QAAQ,IAAI;AAAA;AACtCA,cAAO,GAAG,QAAQ,IAAI,IAAI,QAAQ,KAAK,QAAQ,SAAS;AAAA;AACxDA,cAAO;AAAA;AACPA,cAAO,oBAAoB,YAAY;AAEvC,aAAOA;AAAAA,IACT;AAGA,QAAI,MAAM,2BAA2B,QAAQ,IAAI,SAAS,SAAS;AAAA;AACnE,WAAO,mBAAmB,QAAQ,IAAI;AAAA;AACtC,WAAO,GAAG,QAAQ,IAAI,IAAI,QAAQ,KAAK,QAAQ,SAAS;AAAA;AACxD,WAAO;AAAA;AAEP,QAAI,QAAQ,WAAW;AACrB,aAAO,SAAS,QAAQ,SAAS;AAAA;AAAA,IACnC;AAIA,QAAI,QAAQ,KAAK,SAAS,SAAS,GAAG;AACpC,aAAO,QAAQ;AAAA,IACjB,OAAO;AAEL,aAAO,oBAAoB,QAAQ,IAAI;AAAA,IACzC;AAEA,WAAO,GAAG,GAAG;AAAA,EACf;AAAA;AAAA;AAAA;AAAA,EAKA,mBAA4B;AAC1B,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,uBAAgC;AAC9B,WAAO;AAAA,EACT;AACF;"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { SQLDataType } from '../types.js';
|
|
2
|
+
import { BaseDDLStrategy } from './base-strategy.js';
|
|
3
|
+
import { DatabaseEngine } from './types.js';
|
|
4
|
+
export declare class SQLiteStrategy extends BaseDDLStrategy {
|
|
5
|
+
readonly engine: DatabaseEngine;
|
|
6
|
+
/**
|
|
7
|
+
* SQLite JSON-path index expression — uses the JSON1 `json_extract` function
|
|
8
|
+
* since SQLite has no native `->>` operator pre-3.38 and we want broad
|
|
9
|
+
* compatibility with hosted SQLite/libSQL variants.
|
|
10
|
+
*/
|
|
11
|
+
protected formatJsonPathIndexExpression(jsonColumn: string, path: string): string;
|
|
12
|
+
/**
|
|
13
|
+
* Map types for SQLite
|
|
14
|
+
* - BOOLEAN → INTEGER (SQLite uses 0/1)
|
|
15
|
+
* - JSON → TEXT (SQLite stores JSON as text, uses JSON1 functions)
|
|
16
|
+
* - TIMESTAMP → DATETIME (SQLite convention)
|
|
17
|
+
*/
|
|
18
|
+
mapType(type: SQLDataType): string;
|
|
19
|
+
/**
|
|
20
|
+
* Format boolean as 0/1 for SQLite.
|
|
21
|
+
*
|
|
22
|
+
* `formatDefaultValue` is inherited from BaseDDLStrategy, which delegates to
|
|
23
|
+
* the shared safe formatter and bridges this override in as the boolean
|
|
24
|
+
* literals — so SQLite booleans render as 0/1 and no CAST expression is ever
|
|
25
|
+
* emitted in a DEFAULT clause.
|
|
26
|
+
*/
|
|
27
|
+
protected formatBooleanDefault(value: any): string;
|
|
28
|
+
/**
|
|
29
|
+
* SQLite supports triggers
|
|
30
|
+
*/
|
|
31
|
+
supportsTriggers(): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* SQLite doesn't require inline UNIQUE for UPSERT
|
|
34
|
+
* Both inline and separate indexes work
|
|
35
|
+
*/
|
|
36
|
+
requiresInlineUnique(): boolean;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=sqlite-strategy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite-strategy.d.ts","sourceRoot":"","sources":["../../../src/schema/ddl/sqlite-strategy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,qBAAa,cAAe,SAAQ,eAAe;IACjD,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAY;IAE3C;;;;OAIG;IACH,SAAS,CAAC,6BAA6B,CACrC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,GACX,MAAM;IAoBT;;;;;OAKG;IACH,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM;IAalC;;;;;;;OAOG;IACH,SAAS,CAAC,oBAAoB,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM;IAIlD;;OAEG;IACH,gBAAgB,IAAI,OAAO;IAI3B;;;OAGG;IACH,oBAAoB,IAAI,OAAO;CAGhC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { isSafeIdentifier, isSafeIdentifierPath, quoteIdentifier, quoteStringLiteral } from "../sql-identifiers.js";
|
|
2
|
+
import { BaseDDLStrategy } from "./base-strategy.js";
|
|
3
|
+
class SQLiteStrategy extends BaseDDLStrategy {
|
|
4
|
+
engine = "sqlite";
|
|
5
|
+
/**
|
|
6
|
+
* SQLite JSON-path index expression — uses the JSON1 `json_extract` function
|
|
7
|
+
* since SQLite has no native `->>` operator pre-3.38 and we want broad
|
|
8
|
+
* compatibility with hosted SQLite/libSQL variants.
|
|
9
|
+
*/
|
|
10
|
+
formatJsonPathIndexExpression(jsonColumn, path) {
|
|
11
|
+
if (!isSafeIdentifier(jsonColumn)) {
|
|
12
|
+
throw new Error(
|
|
13
|
+
`[DDL] Unsafe JSON-path index column "${jsonColumn}": must be a simple identifier`
|
|
14
|
+
);
|
|
15
|
+
}
|
|
16
|
+
if (!isSafeIdentifierPath(path)) {
|
|
17
|
+
throw new Error(
|
|
18
|
+
`[DDL] Unsafe JSON-path index path "${path}": must be a simple (dotted) identifier`
|
|
19
|
+
);
|
|
20
|
+
}
|
|
21
|
+
return `json_extract(${quoteIdentifier(jsonColumn)}, ${quoteStringLiteral(
|
|
22
|
+
`$.${path}`
|
|
23
|
+
)})`;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Map types for SQLite
|
|
27
|
+
* - BOOLEAN → INTEGER (SQLite uses 0/1)
|
|
28
|
+
* - JSON → TEXT (SQLite stores JSON as text, uses JSON1 functions)
|
|
29
|
+
* - TIMESTAMP → DATETIME (SQLite convention)
|
|
30
|
+
*/
|
|
31
|
+
mapType(type) {
|
|
32
|
+
switch (type) {
|
|
33
|
+
case "BOOLEAN":
|
|
34
|
+
return "INTEGER";
|
|
35
|
+
// SQLite uses 0/1 for booleans
|
|
36
|
+
case "JSON":
|
|
37
|
+
return "TEXT";
|
|
38
|
+
// SQLite stores JSON as TEXT
|
|
39
|
+
case "TIMESTAMP":
|
|
40
|
+
return "DATETIME";
|
|
41
|
+
// SQLite convention
|
|
42
|
+
default:
|
|
43
|
+
return super.mapType(type);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Format boolean as 0/1 for SQLite.
|
|
48
|
+
*
|
|
49
|
+
* `formatDefaultValue` is inherited from BaseDDLStrategy, which delegates to
|
|
50
|
+
* the shared safe formatter and bridges this override in as the boolean
|
|
51
|
+
* literals — so SQLite booleans render as 0/1 and no CAST expression is ever
|
|
52
|
+
* emitted in a DEFAULT clause.
|
|
53
|
+
*/
|
|
54
|
+
formatBooleanDefault(value) {
|
|
55
|
+
return value ? "1" : "0";
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* SQLite supports triggers
|
|
59
|
+
*/
|
|
60
|
+
supportsTriggers() {
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* SQLite doesn't require inline UNIQUE for UPSERT
|
|
65
|
+
* Both inline and separate indexes work
|
|
66
|
+
*/
|
|
67
|
+
requiresInlineUnique() {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
export {
|
|
72
|
+
SQLiteStrategy
|
|
73
|
+
};
|
|
74
|
+
//# sourceMappingURL=sqlite-strategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite-strategy.js","sources":["../../../src/schema/ddl/sqlite-strategy.ts"],"sourcesContent":["/**\n * SQLite DDL Strategy\n *\n * SQLite-specific DDL generation with the following characteristics:\n * - No CAST expressions in DEFAULT values\n * - BOOLEAN stored as INTEGER (0/1)\n * - JSON stored as TEXT (with JSON1 extension functions)\n * - Supports triggers with SQLite syntax\n * - UNIQUE can be inline or separate indexes\n */\n\nimport {\n isSafeIdentifier,\n isSafeIdentifierPath,\n quoteIdentifier,\n quoteStringLiteral,\n} from '../sql-identifiers.js';\nimport type { SQLDataType } from '../types.js';\nimport { BaseDDLStrategy } from './base-strategy.js';\nimport type { DatabaseEngine } from './types.js';\n\nexport class SQLiteStrategy extends BaseDDLStrategy {\n readonly engine: DatabaseEngine = 'sqlite';\n\n /**\n * SQLite JSON-path index expression — uses the JSON1 `json_extract` function\n * since SQLite has no native `->>` operator pre-3.38 and we want broad\n * compatibility with hosted SQLite/libSQL variants.\n */\n protected formatJsonPathIndexExpression(\n jsonColumn: string,\n path: string,\n ): string {\n // Column must be a simple identifier (no dots); only the path may be dotted.\n // Mirrors the `assertSafeJsonPathTarget` file-level helper in\n // base-strategy.ts so this SQLite override doesn't silently accept dotted\n // columns that PG/DuckDB (and renderIndexTarget) reject.\n if (!isSafeIdentifier(jsonColumn)) {\n throw new Error(\n `[DDL] Unsafe JSON-path index column \"${jsonColumn}\": must be a simple identifier`,\n );\n }\n if (!isSafeIdentifierPath(path)) {\n throw new Error(\n `[DDL] Unsafe JSON-path index path \"${path}\": must be a simple (dotted) identifier`,\n );\n }\n return `json_extract(${quoteIdentifier(jsonColumn)}, ${quoteStringLiteral(\n `$.${path}`,\n )})`;\n }\n\n /**\n * Map types for SQLite\n * - BOOLEAN → INTEGER (SQLite uses 0/1)\n * - JSON → TEXT (SQLite stores JSON as text, uses JSON1 functions)\n * - TIMESTAMP → DATETIME (SQLite convention)\n */\n mapType(type: SQLDataType): string {\n switch (type) {\n case 'BOOLEAN':\n return 'INTEGER'; // SQLite uses 0/1 for booleans\n case 'JSON':\n return 'TEXT'; // SQLite stores JSON as TEXT\n case 'TIMESTAMP':\n return 'DATETIME'; // SQLite convention\n default:\n return super.mapType(type);\n }\n }\n\n /**\n * Format boolean as 0/1 for SQLite.\n *\n * `formatDefaultValue` is inherited from BaseDDLStrategy, which delegates to\n * the shared safe formatter and bridges this override in as the boolean\n * literals — so SQLite booleans render as 0/1 and no CAST expression is ever\n * emitted in a DEFAULT clause.\n */\n protected formatBooleanDefault(value: any): string {\n return value ? '1' : '0';\n }\n\n /**\n * SQLite supports triggers\n */\n supportsTriggers(): boolean {\n return true;\n }\n\n /**\n * SQLite doesn't require inline UNIQUE for UPSERT\n * Both inline and separate indexes work\n */\n requiresInlineUnique(): boolean {\n return false;\n }\n}\n"],"names":[],"mappings":";;AAqBO,MAAM,uBAAuB,gBAAgB;AAAA,EACzC,SAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOxB,8BACR,YACA,MACQ;AAKR,QAAI,CAAC,iBAAiB,UAAU,GAAG;AACjC,YAAM,IAAI;AAAA,QACR,wCAAwC,UAAU;AAAA,MAAA;AAAA,IAEtD;AACA,QAAI,CAAC,qBAAqB,IAAI,GAAG;AAC/B,YAAM,IAAI;AAAA,QACR,sCAAsC,IAAI;AAAA,MAAA;AAAA,IAE9C;AACA,WAAO,gBAAgB,gBAAgB,UAAU,CAAC,KAAK;AAAA,MACrD,KAAK,IAAI;AAAA,IAAA,CACV;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,QAAQ,MAA2B;AACjC,YAAQ,MAAA;AAAA,MACN,KAAK;AACH,eAAO;AAAA;AAAA,MACT,KAAK;AACH,eAAO;AAAA;AAAA,MACT,KAAK;AACH,eAAO;AAAA;AAAA,MACT;AACE,eAAO,MAAM,QAAQ,IAAI;AAAA,IAAA;AAAA,EAE/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUU,qBAAqB,OAAoB;AACjD,WAAO,QAAQ,MAAM;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA,EAKA,mBAA4B;AAC1B,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,uBAAgC;AAC9B,WAAO;AAAA,EACT;AACF;"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { SchemaDefinition, SQLDataType } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Supported database engines
|
|
4
|
+
* - sqlite: SQLite/LibSQL databases
|
|
5
|
+
* - duckdb: DuckDB databases
|
|
6
|
+
* - json: JSON adapter backed by DuckDB, with UUID stored as TEXT for stable
|
|
7
|
+
* JS round-tripping
|
|
8
|
+
* - postgres: PostgreSQL databases
|
|
9
|
+
*/
|
|
10
|
+
export type DatabaseEngine = 'sqlite' | 'duckdb' | 'json' | 'postgres';
|
|
11
|
+
/**
|
|
12
|
+
* Engine-specific DDL output
|
|
13
|
+
*/
|
|
14
|
+
export interface EngineSpecificDDL {
|
|
15
|
+
/** CREATE TABLE statement */
|
|
16
|
+
createTable: string;
|
|
17
|
+
/** CREATE INDEX statements (separate from table for SQLite/Postgres) */
|
|
18
|
+
indexes: string[];
|
|
19
|
+
/** CREATE TRIGGER statements (not supported by DuckDB) */
|
|
20
|
+
triggers: string[];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Multi-engine DDL for manifest storage
|
|
24
|
+
*/
|
|
25
|
+
export interface MultiEngineDDL {
|
|
26
|
+
sqlite: EngineSpecificDDL;
|
|
27
|
+
duckdb: EngineSpecificDDL;
|
|
28
|
+
json: EngineSpecificDDL;
|
|
29
|
+
postgres: EngineSpecificDDL;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* DDL Generator Strategy Interface
|
|
33
|
+
*
|
|
34
|
+
* Each database engine implements this interface to generate
|
|
35
|
+
* engine-specific DDL from a SchemaDefinition.
|
|
36
|
+
*/
|
|
37
|
+
export interface DDLStrategy {
|
|
38
|
+
/** The database engine this strategy generates DDL for */
|
|
39
|
+
readonly engine: DatabaseEngine;
|
|
40
|
+
/**
|
|
41
|
+
* Generate CREATE TABLE statement
|
|
42
|
+
* @param schema - The schema definition to generate DDL for
|
|
43
|
+
* @returns CREATE TABLE SQL statement
|
|
44
|
+
*/
|
|
45
|
+
generateCreateTable(schema: SchemaDefinition): string;
|
|
46
|
+
/**
|
|
47
|
+
* Generate CREATE INDEX statements
|
|
48
|
+
* For DuckDB, UNIQUE indexes should be inline constraints, not separate indexes
|
|
49
|
+
* @param schema - The schema definition
|
|
50
|
+
* @returns Array of CREATE INDEX SQL statements
|
|
51
|
+
*/
|
|
52
|
+
generateIndexes(schema: SchemaDefinition): string[];
|
|
53
|
+
/**
|
|
54
|
+
* Generate CREATE TRIGGER statements
|
|
55
|
+
* DuckDB does not support triggers - returns empty array
|
|
56
|
+
* @param schema - The schema definition
|
|
57
|
+
* @returns Array of CREATE TRIGGER SQL statements
|
|
58
|
+
*/
|
|
59
|
+
generateTriggers(schema: SchemaDefinition): string[];
|
|
60
|
+
/**
|
|
61
|
+
* Map abstract SQL type to engine-specific type
|
|
62
|
+
* @param type - Abstract SQL data type
|
|
63
|
+
* @returns Engine-specific SQL type string
|
|
64
|
+
*/
|
|
65
|
+
mapType(type: SQLDataType): string;
|
|
66
|
+
/**
|
|
67
|
+
* Format a default value for the engine
|
|
68
|
+
* SQLite: No CAST expressions
|
|
69
|
+
* DuckDB/Postgres: Can use CAST
|
|
70
|
+
* @param value - The default value
|
|
71
|
+
* @param type - The column type
|
|
72
|
+
* @returns Formatted default value SQL
|
|
73
|
+
*/
|
|
74
|
+
formatDefaultValue(value: any, type: SQLDataType): string;
|
|
75
|
+
/**
|
|
76
|
+
* Whether this engine supports database triggers
|
|
77
|
+
* @returns true if triggers are supported
|
|
78
|
+
*/
|
|
79
|
+
supportsTriggers(): boolean;
|
|
80
|
+
/**
|
|
81
|
+
* Whether this engine requires inline UNIQUE constraints for UPSERT
|
|
82
|
+
* DuckDB requires this due to issue #12684
|
|
83
|
+
* @returns true if UNIQUE must be inline
|
|
84
|
+
*/
|
|
85
|
+
requiresInlineUnique(): boolean;
|
|
86
|
+
/**
|
|
87
|
+
* Generate a single column definition for use in ALTER TABLE ADD COLUMN
|
|
88
|
+
* @param columnName - The column name
|
|
89
|
+
* @param columnDef - The column definition
|
|
90
|
+
* @returns Column definition SQL fragment (e.g. '"name" TEXT DEFAULT '')
|
|
91
|
+
*/
|
|
92
|
+
generateColumnDefinition(columnName: string, columnDef: import('../types').ColumnDefinition): string;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Column generation options
|
|
96
|
+
*/
|
|
97
|
+
export interface ColumnGenerationOptions {
|
|
98
|
+
/** Include NOT NULL constraint */
|
|
99
|
+
includeNotNull?: boolean;
|
|
100
|
+
/** Include DEFAULT clause */
|
|
101
|
+
includeDefault?: boolean;
|
|
102
|
+
/** Include PRIMARY KEY constraint */
|
|
103
|
+
includePrimaryKey?: boolean;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Table generation options
|
|
107
|
+
*/
|
|
108
|
+
export interface TableGenerationOptions {
|
|
109
|
+
/** Whether to use IF NOT EXISTS */
|
|
110
|
+
ifNotExists?: boolean;
|
|
111
|
+
/** Additional table constraints to append */
|
|
112
|
+
additionalConstraints?: string[];
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/schema/ddl/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEjE;;;;;;;GAOG;AACH,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,6BAA6B;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,IAAI,EAAE,iBAAiB,CAAC;IACxB,QAAQ,EAAE,iBAAiB,CAAC;CAC7B;AAED;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAEhC;;;;OAIG;IACH,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAAC;IAEtD;;;;;OAKG;IACH,eAAe,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,EAAE,CAAC;IAEpD;;;;;OAKG;IACH,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,EAAE,CAAC;IAErD;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAAC;IAEnC;;;;;;;OAOG;IACH,kBAAkB,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,GAAG,MAAM,CAAC;IAE1D;;;OAGG;IACH,gBAAgB,IAAI,OAAO,CAAC;IAE5B;;;;OAIG;IACH,oBAAoB,IAAI,OAAO,CAAC;IAEhC;;;;;OAKG;IACH,wBAAwB,CACtB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,OAAO,UAAU,EAAE,gBAAgB,GAC7C,MAAM,CAAC;CACX;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,kCAAkC;IAClC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,6BAA6B;IAC7B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,qCAAqC;IACrC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,mCAAmC;IACnC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,6CAA6C;IAC7C,qBAAqB,CAAC,EAAE,MAAM,EAAE,CAAC;CAClC"}
|