@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 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/scanner/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,oBAAoB,CAAC"}
|
package/dist/scanner.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scanner.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { SmartObjectDefinition } from '../scanner/types.js';
|
|
2
|
+
import { SchemaDefinition } from './types.js';
|
|
3
|
+
export declare class SchemaCodeGenerator {
|
|
4
|
+
/**
|
|
5
|
+
* Generate getSchema() method source code
|
|
6
|
+
*/
|
|
7
|
+
generateSchemaMethod(_objectDef: SmartObjectDefinition, schema: SchemaDefinition): string;
|
|
8
|
+
/**
|
|
9
|
+
* Generate complete schema file with all methods
|
|
10
|
+
*/
|
|
11
|
+
generateSchemaFile(schemas: Record<string, SchemaDefinition>): string;
|
|
12
|
+
/**
|
|
13
|
+
* Generate import statements
|
|
14
|
+
*/
|
|
15
|
+
private generateImports;
|
|
16
|
+
/**
|
|
17
|
+
* Generate getSchema method for a specific class
|
|
18
|
+
*/
|
|
19
|
+
private generateClassMethod;
|
|
20
|
+
/**
|
|
21
|
+
* Generate standalone getSchema method
|
|
22
|
+
*/
|
|
23
|
+
private generateMethod;
|
|
24
|
+
/**
|
|
25
|
+
* Generate schema object definition
|
|
26
|
+
*/
|
|
27
|
+
private generateSchemaObject;
|
|
28
|
+
/**
|
|
29
|
+
* Generate columns object
|
|
30
|
+
*/
|
|
31
|
+
private generateColumns;
|
|
32
|
+
/**
|
|
33
|
+
* Generate indexes array
|
|
34
|
+
*/
|
|
35
|
+
private generateIndexes;
|
|
36
|
+
/**
|
|
37
|
+
* Generate triggers array
|
|
38
|
+
*/
|
|
39
|
+
private generateTriggers;
|
|
40
|
+
/**
|
|
41
|
+
* Generate foreign keys array
|
|
42
|
+
*/
|
|
43
|
+
private generateForeignKeys;
|
|
44
|
+
/**
|
|
45
|
+
* Generate TypeScript type definition file
|
|
46
|
+
*/
|
|
47
|
+
generateTypeDefinitions(schemas: Record<string, SchemaDefinition>): string;
|
|
48
|
+
/**
|
|
49
|
+
* Generate schema manifest file
|
|
50
|
+
*/
|
|
51
|
+
generateManifest(packageName: string, schemas: Record<string, SchemaDefinition>): string;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=code-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-generator.d.ts","sourceRoot":"","sources":["../../src/schema/code-generator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,qBAAa,mBAAmB;IAC9B;;OAEG;IACH,oBAAoB,CAClB,UAAU,EAAE,qBAAqB,EACjC,MAAM,EAAE,gBAAgB,GACvB,MAAM;IAOT;;OAEG;IACH,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,MAAM;IASrE;;OAEG;IACH,OAAO,CAAC,eAAe;IAIvB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAa3B;;OAEG;IACH,OAAO,CAAC,cAAc;IAQtB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAc5B;;OAEG;IACH,OAAO,CAAC,eAAe;IAWvB;;OAEG;IACH,OAAO,CAAC,eAAe;IAYvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAYxB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAY3B;;OAEG;IACH,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,MAAM;IAe1E;;OAEG;IACH,gBAAgB,CACd,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GACxC,MAAM;CAuBV"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { ColumnDefinition, IndexDefinition, SchemaDefinition, SQLDataType, TriggerDefinition } from '../types.js';
|
|
2
|
+
import { DatabaseEngine, DDLStrategy } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Abstract base class for DDL strategies
|
|
5
|
+
*
|
|
6
|
+
* Implements common DDL generation patterns. Engine-specific strategies
|
|
7
|
+
* extend this class and override methods as needed.
|
|
8
|
+
*/
|
|
9
|
+
export declare abstract class BaseDDLStrategy implements DDLStrategy {
|
|
10
|
+
abstract readonly engine: DatabaseEngine;
|
|
11
|
+
/**
|
|
12
|
+
* Generate CREATE TABLE statement
|
|
13
|
+
*/
|
|
14
|
+
generateCreateTable(schema: SchemaDefinition): string;
|
|
15
|
+
/**
|
|
16
|
+
* Generate a single column definition
|
|
17
|
+
*
|
|
18
|
+
* Public so SchemaManager can reuse it for ALTER TABLE ADD COLUMN.
|
|
19
|
+
*/
|
|
20
|
+
generateColumnDefinition(columnName: string, columnDef: ColumnDefinition): string;
|
|
21
|
+
/**
|
|
22
|
+
* Generate inline UNIQUE constraints for composite indexes
|
|
23
|
+
* Used by engines that require inline UNIQUE for UPSERT to work (DuckDB)
|
|
24
|
+
*/
|
|
25
|
+
protected generateInlineUniqueConstraints(indexes: IndexDefinition[]): string[];
|
|
26
|
+
/**
|
|
27
|
+
* Generate CREATE INDEX statements
|
|
28
|
+
* Override in engine-specific strategies if needed
|
|
29
|
+
*/
|
|
30
|
+
generateIndexes(schema: SchemaDefinition): string[];
|
|
31
|
+
/**
|
|
32
|
+
* Render the SQL expression used to index a JSON path inside a JSONB column.
|
|
33
|
+
* Subclasses override for dialect-specific syntax.
|
|
34
|
+
*
|
|
35
|
+
* Default (ANSI-ish): `<jsonColumn>->>'<path>'` — works on Postgres.
|
|
36
|
+
*/
|
|
37
|
+
protected formatJsonPathIndexExpression(jsonColumn: string, path: string): string;
|
|
38
|
+
/**
|
|
39
|
+
* Generate CREATE TRIGGER statements
|
|
40
|
+
* Override in engine-specific strategies - DuckDB returns empty
|
|
41
|
+
*/
|
|
42
|
+
generateTriggers(schema: SchemaDefinition): string[];
|
|
43
|
+
/**
|
|
44
|
+
* Generate a single trigger statement
|
|
45
|
+
* Can be overridden for engine-specific trigger syntax
|
|
46
|
+
*/
|
|
47
|
+
protected generateTriggerStatement(tableName: string, trigger: TriggerDefinition): string;
|
|
48
|
+
/**
|
|
49
|
+
* Map abstract SQL type to engine-specific type
|
|
50
|
+
* Default implementation - override for engine-specific types
|
|
51
|
+
*/
|
|
52
|
+
mapType(type: SQLDataType): string;
|
|
53
|
+
/**
|
|
54
|
+
* Format default value for SQL.
|
|
55
|
+
*
|
|
56
|
+
* Delegates to the shared, injection-safe `formatDefaultValue`
|
|
57
|
+
* (`schema/sql-identifiers.ts`) so every DDL path uses one set of rules:
|
|
58
|
+
* an allowlist of SQL keyword/function defaults (not "contains `(`"),
|
|
59
|
+
* type-driven literal quoting, and no folding of the string `"null"` into
|
|
60
|
+
* the SQL NULL keyword. Boolean rendering is bridged through
|
|
61
|
+
* `formatBooleanDefault` so engine overrides (SQLite → 0/1) still apply.
|
|
62
|
+
*/
|
|
63
|
+
formatDefaultValue(value: any, type: SQLDataType): string;
|
|
64
|
+
/**
|
|
65
|
+
* Format boolean default
|
|
66
|
+
* Override for engines that use INTEGER (SQLite)
|
|
67
|
+
*/
|
|
68
|
+
protected formatBooleanDefault(value: any): string;
|
|
69
|
+
/**
|
|
70
|
+
* Whether this engine supports triggers
|
|
71
|
+
* Override in DuckDB strategy to return false
|
|
72
|
+
*/
|
|
73
|
+
supportsTriggers(): boolean;
|
|
74
|
+
/**
|
|
75
|
+
* Whether UNIQUE constraints must be inline for UPSERT
|
|
76
|
+
* Override in DuckDB strategy to return true
|
|
77
|
+
*/
|
|
78
|
+
requiresInlineUnique(): boolean;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=base-strategy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-strategy.d.ts","sourceRoot":"","sources":["../../../src/schema/ddl/base-strategy.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EAClB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA4B9D;;;;;GAKG;AACH,8BAAsB,eAAgB,YAAW,WAAW;IAC1D,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAEzC;;OAEG;IACH,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM;IAuBrD;;;;OAIG;IACH,wBAAwB,CACtB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,gBAAgB,GAC1B,MAAM;IAuCT;;;OAGG;IACH,SAAS,CAAC,+BAA+B,CACvC,OAAO,EAAE,eAAe,EAAE,GACzB,MAAM,EAAE;IAsBX;;;OAGG;IACH,eAAe,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,EAAE;IAwDnD;;;;;OAKG;IACH,SAAS,CAAC,6BAA6B,CACrC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,GACX,MAAM;IAKT;;;OAGG;IACH,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,EAAE;IAsBpD;;;OAGG;IACH,SAAS,CAAC,wBAAwB,CAChC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,iBAAiB,GACzB,MAAM;IAcT;;;OAGG;IACH,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM;IA2BlC;;;;;;;;;OASG;IACH,kBAAkB,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,GAAG,MAAM;IASzD;;;OAGG;IACH,SAAS,CAAC,oBAAoB,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM;IAIlD;;;OAGG;IACH,gBAAgB,IAAI,OAAO;IAI3B;;;OAGG;IACH,oBAAoB,IAAI,OAAO;CAGhC"}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import { createLogger } from "@happyvertical/logger";
|
|
2
|
+
import { quoteIdentifier, quoteStringLiteral, formatDefaultValue, isSafeIdentifier, isSafeIdentifierPath } from "../sql-identifiers.js";
|
|
3
|
+
const logger = createLogger({ level: "info" });
|
|
4
|
+
function assertSafeJsonPathTarget(jsonColumn, path) {
|
|
5
|
+
if (!isSafeIdentifier(jsonColumn)) {
|
|
6
|
+
throw new Error(
|
|
7
|
+
`[DDL] Unsafe JSON-path index column "${jsonColumn}": must be a simple identifier`
|
|
8
|
+
);
|
|
9
|
+
}
|
|
10
|
+
if (!isSafeIdentifierPath(path)) {
|
|
11
|
+
throw new Error(
|
|
12
|
+
`[DDL] Unsafe JSON-path index path "${path}": must be a simple (dotted) identifier`
|
|
13
|
+
);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
class BaseDDLStrategy {
|
|
17
|
+
/**
|
|
18
|
+
* Generate CREATE TABLE statement
|
|
19
|
+
*/
|
|
20
|
+
generateCreateTable(schema) {
|
|
21
|
+
const { tableName, columns, indexes = [] } = schema;
|
|
22
|
+
let sql = `CREATE TABLE IF NOT EXISTS ${quoteIdentifier(tableName)} (
|
|
23
|
+
`;
|
|
24
|
+
const columnDefs = [];
|
|
25
|
+
for (const [columnName, columnDef] of Object.entries(columns)) {
|
|
26
|
+
columnDefs.push(this.generateColumnDefinition(columnName, columnDef));
|
|
27
|
+
}
|
|
28
|
+
if (this.requiresInlineUnique() && indexes.length > 0) {
|
|
29
|
+
const uniqueConstraints = this.generateInlineUniqueConstraints(indexes);
|
|
30
|
+
columnDefs.push(...uniqueConstraints);
|
|
31
|
+
}
|
|
32
|
+
sql += columnDefs.map((def) => ` ${def}`).join(",\n");
|
|
33
|
+
sql += "\n);";
|
|
34
|
+
return sql;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Generate a single column definition
|
|
38
|
+
*
|
|
39
|
+
* Public so SchemaManager can reuse it for ALTER TABLE ADD COLUMN.
|
|
40
|
+
*/
|
|
41
|
+
generateColumnDefinition(columnName, columnDef) {
|
|
42
|
+
const parts = [
|
|
43
|
+
quoteIdentifier(columnName),
|
|
44
|
+
this.mapType(columnDef.type)
|
|
45
|
+
];
|
|
46
|
+
if (columnDef.primaryKey) {
|
|
47
|
+
parts.push("PRIMARY KEY");
|
|
48
|
+
}
|
|
49
|
+
if (columnDef.notNull && !columnDef.primaryKey) {
|
|
50
|
+
parts.push("NOT NULL");
|
|
51
|
+
}
|
|
52
|
+
if (columnDef.unique && !this.requiresInlineUnique()) {
|
|
53
|
+
parts.push("UNIQUE");
|
|
54
|
+
}
|
|
55
|
+
if (columnDef.defaultValue !== void 0) {
|
|
56
|
+
const formatted = this.formatDefaultValue(
|
|
57
|
+
columnDef.defaultValue,
|
|
58
|
+
columnDef.type
|
|
59
|
+
);
|
|
60
|
+
parts.push(`DEFAULT ${formatted}`);
|
|
61
|
+
}
|
|
62
|
+
if (columnDef.check) {
|
|
63
|
+
parts.push(`CHECK (${columnDef.check})`);
|
|
64
|
+
}
|
|
65
|
+
return parts.join(" ");
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Generate inline UNIQUE constraints for composite indexes
|
|
69
|
+
* Used by engines that require inline UNIQUE for UPSERT to work (DuckDB)
|
|
70
|
+
*/
|
|
71
|
+
generateInlineUniqueConstraints(indexes) {
|
|
72
|
+
const constraints = [];
|
|
73
|
+
if (!indexes || !Array.isArray(indexes)) {
|
|
74
|
+
return constraints;
|
|
75
|
+
}
|
|
76
|
+
for (const index of indexes) {
|
|
77
|
+
if (!index || !index.columns || !Array.isArray(index.columns)) {
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
if (index.unique && index.columns.length > 0) {
|
|
81
|
+
const columns = index.columns.map((c) => quoteIdentifier(c)).join(", ");
|
|
82
|
+
constraints.push(`UNIQUE(${columns})`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return constraints;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Generate CREATE INDEX statements
|
|
89
|
+
* Override in engine-specific strategies if needed
|
|
90
|
+
*/
|
|
91
|
+
generateIndexes(schema) {
|
|
92
|
+
const { tableName, indexes = [] } = schema;
|
|
93
|
+
const statements = [];
|
|
94
|
+
if (!indexes || indexes.length === 0) {
|
|
95
|
+
return statements;
|
|
96
|
+
}
|
|
97
|
+
for (const index of indexes) {
|
|
98
|
+
const jsonPath = index?.jsonPath?.column && index.jsonPath.path ? index.jsonPath : null;
|
|
99
|
+
if (!index || !jsonPath && (!index.columns || !Array.isArray(index.columns) || index.columns.length === 0)) {
|
|
100
|
+
logger.warn(`[DDL] Skipping malformed index: ${JSON.stringify(index)}`);
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
if (index.unique && this.requiresInlineUnique()) {
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
const indexType = index.unique ? "UNIQUE INDEX" : "INDEX";
|
|
107
|
+
const target = jsonPath ? `(${this.formatJsonPathIndexExpression(
|
|
108
|
+
jsonPath.column,
|
|
109
|
+
jsonPath.path
|
|
110
|
+
)})` : index.columns.map((c) => quoteIdentifier(c)).join(", ");
|
|
111
|
+
let sql = `CREATE ${indexType} IF NOT EXISTS ${quoteIdentifier(
|
|
112
|
+
index.name
|
|
113
|
+
)} ON ${quoteIdentifier(tableName)} (${target})`;
|
|
114
|
+
if (index.where) {
|
|
115
|
+
sql += ` WHERE ${index.where}`;
|
|
116
|
+
}
|
|
117
|
+
sql += ";";
|
|
118
|
+
statements.push(sql);
|
|
119
|
+
}
|
|
120
|
+
return statements;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Render the SQL expression used to index a JSON path inside a JSONB column.
|
|
124
|
+
* Subclasses override for dialect-specific syntax.
|
|
125
|
+
*
|
|
126
|
+
* Default (ANSI-ish): `<jsonColumn>->>'<path>'` — works on Postgres.
|
|
127
|
+
*/
|
|
128
|
+
formatJsonPathIndexExpression(jsonColumn, path) {
|
|
129
|
+
assertSafeJsonPathTarget(jsonColumn, path);
|
|
130
|
+
return `${quoteIdentifier(jsonColumn)}->>${quoteStringLiteral(path)}`;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Generate CREATE TRIGGER statements
|
|
134
|
+
* Override in engine-specific strategies - DuckDB returns empty
|
|
135
|
+
*/
|
|
136
|
+
generateTriggers(schema) {
|
|
137
|
+
if (!this.supportsTriggers()) {
|
|
138
|
+
return [];
|
|
139
|
+
}
|
|
140
|
+
const { tableName, triggers = [] } = schema;
|
|
141
|
+
const statements = [];
|
|
142
|
+
if (!triggers || triggers.length === 0) {
|
|
143
|
+
return statements;
|
|
144
|
+
}
|
|
145
|
+
for (const trigger of triggers) {
|
|
146
|
+
const sql = this.generateTriggerStatement(tableName, trigger);
|
|
147
|
+
if (sql) {
|
|
148
|
+
statements.push(sql);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return statements;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Generate a single trigger statement
|
|
155
|
+
* Can be overridden for engine-specific trigger syntax
|
|
156
|
+
*/
|
|
157
|
+
generateTriggerStatement(tableName, trigger) {
|
|
158
|
+
let sql = `CREATE TRIGGER IF NOT EXISTS ${quoteIdentifier(trigger.name)}
|
|
159
|
+
`;
|
|
160
|
+
sql += `${trigger.when} ${trigger.event} ON ${quoteIdentifier(tableName)}
|
|
161
|
+
`;
|
|
162
|
+
if (trigger.condition) {
|
|
163
|
+
sql += `WHEN ${trigger.condition}
|
|
164
|
+
`;
|
|
165
|
+
}
|
|
166
|
+
sql += `BEGIN
|
|
167
|
+
${trigger.body}
|
|
168
|
+
END;`;
|
|
169
|
+
return sql;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Map abstract SQL type to engine-specific type
|
|
173
|
+
* Default implementation - override for engine-specific types
|
|
174
|
+
*/
|
|
175
|
+
mapType(type) {
|
|
176
|
+
switch (type) {
|
|
177
|
+
case "TEXT":
|
|
178
|
+
return "TEXT";
|
|
179
|
+
case "INTEGER":
|
|
180
|
+
return "INTEGER";
|
|
181
|
+
case "REAL":
|
|
182
|
+
return "REAL";
|
|
183
|
+
case "BLOB":
|
|
184
|
+
return "BLOB";
|
|
185
|
+
case "BOOLEAN":
|
|
186
|
+
return "BOOLEAN";
|
|
187
|
+
case "JSON":
|
|
188
|
+
return "JSON";
|
|
189
|
+
case "TIMESTAMP":
|
|
190
|
+
return "TIMESTAMP";
|
|
191
|
+
case "UUID":
|
|
192
|
+
return "TEXT";
|
|
193
|
+
default:
|
|
194
|
+
return "TEXT";
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Format default value for SQL.
|
|
199
|
+
*
|
|
200
|
+
* Delegates to the shared, injection-safe `formatDefaultValue`
|
|
201
|
+
* (`schema/sql-identifiers.ts`) so every DDL path uses one set of rules:
|
|
202
|
+
* an allowlist of SQL keyword/function defaults (not "contains `(`"),
|
|
203
|
+
* type-driven literal quoting, and no folding of the string `"null"` into
|
|
204
|
+
* the SQL NULL keyword. Boolean rendering is bridged through
|
|
205
|
+
* `formatBooleanDefault` so engine overrides (SQLite → 0/1) still apply.
|
|
206
|
+
*/
|
|
207
|
+
formatDefaultValue(value, type) {
|
|
208
|
+
return formatDefaultValue(value, type, {
|
|
209
|
+
booleanLiterals: [
|
|
210
|
+
this.formatBooleanDefault(true),
|
|
211
|
+
this.formatBooleanDefault(false)
|
|
212
|
+
]
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Format boolean default
|
|
217
|
+
* Override for engines that use INTEGER (SQLite)
|
|
218
|
+
*/
|
|
219
|
+
formatBooleanDefault(value) {
|
|
220
|
+
return value ? "TRUE" : "FALSE";
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Whether this engine supports triggers
|
|
224
|
+
* Override in DuckDB strategy to return false
|
|
225
|
+
*/
|
|
226
|
+
supportsTriggers() {
|
|
227
|
+
return true;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Whether UNIQUE constraints must be inline for UPSERT
|
|
231
|
+
* Override in DuckDB strategy to return true
|
|
232
|
+
*/
|
|
233
|
+
requiresInlineUnique() {
|
|
234
|
+
return false;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
export {
|
|
238
|
+
BaseDDLStrategy
|
|
239
|
+
};
|
|
240
|
+
//# sourceMappingURL=base-strategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-strategy.js","sources":["../../../src/schema/ddl/base-strategy.ts"],"sourcesContent":["/**\n * Base DDL Strategy - Shared logic for all database engines\n *\n * Provides common DDL generation logic that engine-specific strategies\n * can override for their particular requirements.\n */\n\nimport { createLogger } from '@happyvertical/logger';\nimport {\n formatDefaultValue as formatDefaultValueShared,\n isSafeIdentifier,\n isSafeIdentifierPath,\n quoteIdentifier,\n quoteStringLiteral,\n} from '../sql-identifiers.js';\nimport type {\n ColumnDefinition,\n IndexDefinition,\n SchemaDefinition,\n SQLDataType,\n TriggerDefinition,\n} from '../types.js';\nimport type { DatabaseEngine, DDLStrategy } from './types.js';\n\nconst logger = createLogger({ level: 'info' });\n\n/**\n * Validate the column + JSON path used to build a JSON-path index expression.\n *\n * The path segment is embedded as a SQL string literal inside a dialect\n * function/operator (`json_extract(\"col\", '$.path')` / `\"col\"->>'path'`), and\n * the column as a delimited identifier. We escape both, but also reject paths\n * or columns that aren't simple (dotted) identifiers so a malformed `@meta`\n * field name can't smuggle structure into the expression even after escaping.\n * These names are developer-controlled build-time inputs, so an invalid one is\n * a programming error and throwing is the safest, loudest outcome.\n */\nfunction assertSafeJsonPathTarget(jsonColumn: string, path: string): void {\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}\n\n/**\n * Abstract base class for DDL strategies\n *\n * Implements common DDL generation patterns. Engine-specific strategies\n * extend this class and override methods as needed.\n */\nexport abstract class BaseDDLStrategy implements DDLStrategy {\n abstract readonly engine: DatabaseEngine;\n\n /**\n * Generate CREATE TABLE statement\n */\n generateCreateTable(schema: SchemaDefinition): string {\n const { tableName, columns, indexes = [] } = schema;\n\n let sql = `CREATE TABLE IF NOT EXISTS ${quoteIdentifier(tableName)} (\\n`;\n\n // Generate column definitions\n const columnDefs: string[] = [];\n for (const [columnName, columnDef] of Object.entries(columns)) {\n columnDefs.push(this.generateColumnDefinition(columnName, columnDef));\n }\n\n // Add inline UNIQUE constraints for engines that require them\n if (this.requiresInlineUnique() && indexes.length > 0) {\n const uniqueConstraints = this.generateInlineUniqueConstraints(indexes);\n columnDefs.push(...uniqueConstraints);\n }\n\n sql += columnDefs.map((def) => ` ${def}`).join(',\\n');\n sql += '\\n);';\n\n return sql;\n }\n\n /**\n * Generate a single column definition\n *\n * Public so SchemaManager can reuse it for ALTER TABLE ADD COLUMN.\n */\n generateColumnDefinition(\n columnName: string,\n columnDef: ColumnDefinition,\n ): string {\n const parts: string[] = [\n quoteIdentifier(columnName),\n this.mapType(columnDef.type),\n ];\n\n // Primary key\n if (columnDef.primaryKey) {\n parts.push('PRIMARY KEY');\n }\n\n // NOT NULL (skip for primary key - it's implicit)\n if (columnDef.notNull && !columnDef.primaryKey) {\n parts.push('NOT NULL');\n }\n\n // UNIQUE (for single-column unique, not composite)\n // Skip if engine requires inline unique - those are handled separately\n if (columnDef.unique && !this.requiresInlineUnique()) {\n parts.push('UNIQUE');\n }\n\n // DEFAULT value\n if (columnDef.defaultValue !== undefined) {\n const formatted = this.formatDefaultValue(\n columnDef.defaultValue,\n columnDef.type,\n );\n parts.push(`DEFAULT ${formatted}`);\n }\n\n // CHECK constraint\n if (columnDef.check) {\n parts.push(`CHECK (${columnDef.check})`);\n }\n\n return parts.join(' ');\n }\n\n /**\n * Generate inline UNIQUE constraints for composite indexes\n * Used by engines that require inline UNIQUE for UPSERT to work (DuckDB)\n */\n protected generateInlineUniqueConstraints(\n indexes: IndexDefinition[],\n ): string[] {\n const constraints: string[] = [];\n\n if (!indexes || !Array.isArray(indexes)) {\n return constraints;\n }\n\n for (const index of indexes) {\n // Skip malformed index entries\n if (!index || !index.columns || !Array.isArray(index.columns)) {\n continue;\n }\n\n if (index.unique && index.columns.length > 0) {\n const columns = index.columns.map((c) => quoteIdentifier(c)).join(', ');\n constraints.push(`UNIQUE(${columns})`);\n }\n }\n\n return constraints;\n }\n\n /**\n * Generate CREATE INDEX statements\n * Override in engine-specific strategies if needed\n */\n generateIndexes(schema: SchemaDefinition): string[] {\n const { tableName, indexes = [] } = schema;\n const statements: string[] = [];\n\n if (!indexes || indexes.length === 0) {\n return statements;\n }\n\n for (const index of indexes) {\n // Narrow the jsonPath target up-front so the formatter call doesn't\n // need optional-chained args (and so the malformed-entry check has a\n // single source of truth).\n const jsonPath =\n index?.jsonPath?.column && index.jsonPath.path ? index.jsonPath : null;\n if (\n !index ||\n (!jsonPath &&\n (!index.columns ||\n !Array.isArray(index.columns) ||\n index.columns.length === 0))\n ) {\n logger.warn(`[DDL] Skipping malformed index: ${JSON.stringify(index)}`);\n continue;\n }\n\n // Skip UNIQUE indexes if engine requires them inline\n if (index.unique && this.requiresInlineUnique()) {\n continue;\n }\n\n const indexType = index.unique ? 'UNIQUE INDEX' : 'INDEX';\n\n // JSON-path indexes use a dialect-specific expression\n const target = jsonPath\n ? `(${this.formatJsonPathIndexExpression(\n jsonPath.column,\n jsonPath.path,\n )})`\n : index.columns.map((c) => quoteIdentifier(c)).join(', ');\n\n let sql = `CREATE ${indexType} IF NOT EXISTS ${quoteIdentifier(\n index.name,\n )} ON ${quoteIdentifier(tableName)} (${target})`;\n\n // Partial index condition\n if (index.where) {\n sql += ` WHERE ${index.where}`;\n }\n\n sql += ';';\n statements.push(sql);\n }\n\n return statements;\n }\n\n /**\n * Render the SQL expression used to index a JSON path inside a JSONB column.\n * Subclasses override for dialect-specific syntax.\n *\n * Default (ANSI-ish): `<jsonColumn>->>'<path>'` — works on Postgres.\n */\n protected formatJsonPathIndexExpression(\n jsonColumn: string,\n path: string,\n ): string {\n assertSafeJsonPathTarget(jsonColumn, path);\n return `${quoteIdentifier(jsonColumn)}->>${quoteStringLiteral(path)}`;\n }\n\n /**\n * Generate CREATE TRIGGER statements\n * Override in engine-specific strategies - DuckDB returns empty\n */\n generateTriggers(schema: SchemaDefinition): string[] {\n if (!this.supportsTriggers()) {\n return [];\n }\n\n const { tableName, triggers = [] } = schema;\n const statements: string[] = [];\n\n if (!triggers || triggers.length === 0) {\n return statements;\n }\n\n for (const trigger of triggers) {\n const sql = this.generateTriggerStatement(tableName, trigger);\n if (sql) {\n statements.push(sql);\n }\n }\n\n return statements;\n }\n\n /**\n * Generate a single trigger statement\n * Can be overridden for engine-specific trigger syntax\n */\n protected generateTriggerStatement(\n tableName: string,\n trigger: TriggerDefinition,\n ): string {\n // Default SQLite-style trigger syntax\n let sql = `CREATE TRIGGER IF NOT EXISTS ${quoteIdentifier(trigger.name)}\\n`;\n sql += `${trigger.when} ${trigger.event} ON ${quoteIdentifier(tableName)}\\n`;\n\n if (trigger.condition) {\n sql += `WHEN ${trigger.condition}\\n`;\n }\n\n sql += `BEGIN\\n${trigger.body}\\nEND;`;\n\n return sql;\n }\n\n /**\n * Map abstract SQL type to engine-specific type\n * Default implementation - override for engine-specific types\n */\n mapType(type: SQLDataType): string {\n // Default mapping works for most engines\n switch (type) {\n case 'TEXT':\n return 'TEXT';\n case 'INTEGER':\n return 'INTEGER';\n case 'REAL':\n return 'REAL';\n case 'BLOB':\n return 'BLOB';\n case 'BOOLEAN':\n return 'BOOLEAN';\n case 'JSON':\n return 'JSON';\n case 'TIMESTAMP':\n return 'TIMESTAMP';\n case 'UUID':\n // Fallback for engines without a native uuid type (e.g. SQLite):\n // store as TEXT. PostgreSQL/DuckDB override this with their native\n // uuid type. (R11)\n return 'TEXT';\n default:\n return 'TEXT';\n }\n }\n\n /**\n * Format default value for SQL.\n *\n * Delegates to the shared, injection-safe `formatDefaultValue`\n * (`schema/sql-identifiers.ts`) so every DDL path uses one set of rules:\n * an allowlist of SQL keyword/function defaults (not \"contains `(`\"),\n * type-driven literal quoting, and no folding of the string `\"null\"` into\n * the SQL NULL keyword. Boolean rendering is bridged through\n * `formatBooleanDefault` so engine overrides (SQLite → 0/1) still apply.\n */\n formatDefaultValue(value: any, type: SQLDataType): string {\n return formatDefaultValueShared(value, type, {\n booleanLiterals: [\n this.formatBooleanDefault(true),\n this.formatBooleanDefault(false),\n ],\n });\n }\n\n /**\n * Format boolean default\n * Override for engines that use INTEGER (SQLite)\n */\n protected formatBooleanDefault(value: any): string {\n return value ? 'TRUE' : 'FALSE';\n }\n\n /**\n * Whether this engine supports triggers\n * Override in DuckDB strategy to return false\n */\n supportsTriggers(): boolean {\n return true;\n }\n\n /**\n * Whether UNIQUE constraints must be inline for UPSERT\n * Override in DuckDB strategy to return true\n */\n requiresInlineUnique(): boolean {\n return false;\n }\n}\n"],"names":["formatDefaultValueShared"],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { SchemaDefinition, SQLDataType } from '../types.js';
|
|
2
|
+
import { BaseDDLStrategy } from './base-strategy.js';
|
|
3
|
+
import { DatabaseEngine } from './types.js';
|
|
4
|
+
export declare class DuckDBStrategy extends BaseDDLStrategy {
|
|
5
|
+
readonly engine: DatabaseEngine;
|
|
6
|
+
/**
|
|
7
|
+
* Map types for DuckDB
|
|
8
|
+
* DuckDB has native support for most types
|
|
9
|
+
*/
|
|
10
|
+
mapType(type: SQLDataType): string;
|
|
11
|
+
/**
|
|
12
|
+
* Generate CREATE INDEX statements
|
|
13
|
+
*
|
|
14
|
+
* CRITICAL: Skip UNIQUE indexes - they must be inline constraints for UPSERT
|
|
15
|
+
*/
|
|
16
|
+
generateIndexes(schema: SchemaDefinition): string[];
|
|
17
|
+
/**
|
|
18
|
+
* DuckDB does NOT support triggers
|
|
19
|
+
*/
|
|
20
|
+
generateTriggers(_schema: SchemaDefinition): string[];
|
|
21
|
+
/**
|
|
22
|
+
* DuckDB does NOT support triggers
|
|
23
|
+
*/
|
|
24
|
+
supportsTriggers(): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* CRITICAL: DuckDB requires inline UNIQUE for UPSERT
|
|
27
|
+
*
|
|
28
|
+
* DuckDB issue #12684: ON CONFLICT only works with inline UNIQUE constraints,
|
|
29
|
+
* not with separate CREATE UNIQUE INDEX statements.
|
|
30
|
+
*/
|
|
31
|
+
requiresInlineUnique(): boolean;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=duckdb-strategy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"duckdb-strategy.d.ts","sourceRoot":"","sources":["../../../src/schema/ddl/duckdb-strategy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACjE,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;;;OAGG;IACH,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM;IAalC;;;;OAIG;IACH,eAAe,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,EAAE;IA2BnD;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,EAAE;IAIrD;;OAEG;IACH,gBAAgB,IAAI,OAAO;IAI3B;;;;;OAKG;IACH,oBAAoB,IAAI,OAAO;CAGhC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { renderIndexTarget } from "../index-utils.js";
|
|
2
|
+
import { BaseDDLStrategy } from "./base-strategy.js";
|
|
3
|
+
class DuckDBStrategy extends BaseDDLStrategy {
|
|
4
|
+
engine = "duckdb";
|
|
5
|
+
/**
|
|
6
|
+
* Map types for DuckDB
|
|
7
|
+
* DuckDB has native support for most types
|
|
8
|
+
*/
|
|
9
|
+
mapType(type) {
|
|
10
|
+
switch (type) {
|
|
11
|
+
case "TIMESTAMP":
|
|
12
|
+
return "TIMESTAMP";
|
|
13
|
+
// DuckDB supports TIMESTAMP natively
|
|
14
|
+
case "JSON":
|
|
15
|
+
return "JSON";
|
|
16
|
+
// DuckDB has native JSON type
|
|
17
|
+
case "UUID":
|
|
18
|
+
return "UUID";
|
|
19
|
+
// DuckDB has a native UUID type (R11)
|
|
20
|
+
default:
|
|
21
|
+
return super.mapType(type);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Generate CREATE INDEX statements
|
|
26
|
+
*
|
|
27
|
+
* CRITICAL: Skip UNIQUE indexes - they must be inline constraints for UPSERT
|
|
28
|
+
*/
|
|
29
|
+
generateIndexes(schema) {
|
|
30
|
+
const { tableName, indexes } = schema;
|
|
31
|
+
const statements = [];
|
|
32
|
+
for (const index of indexes) {
|
|
33
|
+
if (index.unique) {
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
const target = renderIndexTarget(index, this.engine);
|
|
37
|
+
if (!target) {
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
let sql = `CREATE INDEX IF NOT EXISTS "${index.name}" ON "${tableName}" (${target})`;
|
|
41
|
+
if (index.where) {
|
|
42
|
+
sql += ` WHERE ${index.where}`;
|
|
43
|
+
}
|
|
44
|
+
sql += ";";
|
|
45
|
+
statements.push(sql);
|
|
46
|
+
}
|
|
47
|
+
return statements;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* DuckDB does NOT support triggers
|
|
51
|
+
*/
|
|
52
|
+
generateTriggers(_schema) {
|
|
53
|
+
return [];
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* DuckDB does NOT support triggers
|
|
57
|
+
*/
|
|
58
|
+
supportsTriggers() {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* CRITICAL: DuckDB requires inline UNIQUE for UPSERT
|
|
63
|
+
*
|
|
64
|
+
* DuckDB issue #12684: ON CONFLICT only works with inline UNIQUE constraints,
|
|
65
|
+
* not with separate CREATE UNIQUE INDEX statements.
|
|
66
|
+
*/
|
|
67
|
+
requiresInlineUnique() {
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
export {
|
|
72
|
+
DuckDBStrategy
|
|
73
|
+
};
|
|
74
|
+
//# sourceMappingURL=duckdb-strategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"duckdb-strategy.js","sources":["../../../src/schema/ddl/duckdb-strategy.ts"],"sourcesContent":["/**\n * DuckDB DDL Strategy\n *\n * DuckDB-specific DDL generation with the following characteristics:\n * - UNIQUE constraints MUST be inline for UPSERT to work (DuckDB issue #12684)\n * - Supports CAST in DEFAULT values\n * - Native BOOLEAN, JSON types\n * - Does NOT support triggers\n *\n * CRITICAL: DuckDB's ON CONFLICT clause only works with inline UNIQUE constraints,\n * not with separate UNIQUE indexes. This is a known DuckDB limitation.\n */\n\nimport { renderIndexTarget } from '../index-utils.js';\nimport type { SchemaDefinition, SQLDataType } from '../types.js';\nimport { BaseDDLStrategy } from './base-strategy.js';\nimport type { DatabaseEngine } from './types.js';\n\nexport class DuckDBStrategy extends BaseDDLStrategy {\n readonly engine: DatabaseEngine = 'duckdb';\n\n /**\n * Map types for DuckDB\n * DuckDB has native support for most types\n */\n mapType(type: SQLDataType): string {\n switch (type) {\n case 'TIMESTAMP':\n return 'TIMESTAMP'; // DuckDB supports TIMESTAMP natively\n case 'JSON':\n return 'JSON'; // DuckDB has native JSON type\n case 'UUID':\n return 'UUID'; // DuckDB has a native UUID type (R11)\n default:\n return super.mapType(type);\n }\n }\n\n /**\n * Generate CREATE INDEX statements\n *\n * CRITICAL: Skip UNIQUE indexes - they must be inline constraints for UPSERT\n */\n generateIndexes(schema: SchemaDefinition): string[] {\n const { tableName, indexes } = schema;\n const statements: string[] = [];\n\n for (const index of indexes) {\n // Skip UNIQUE indexes - they're inline constraints\n if (index.unique) {\n continue;\n }\n\n const target = renderIndexTarget(index, this.engine);\n if (!target) {\n continue;\n }\n let sql = `CREATE INDEX IF NOT EXISTS \"${index.name}\" ON \"${tableName}\" (${target})`;\n\n if (index.where) {\n sql += ` WHERE ${index.where}`;\n }\n\n sql += ';';\n statements.push(sql);\n }\n\n return statements;\n }\n\n /**\n * DuckDB does NOT support triggers\n */\n generateTriggers(_schema: SchemaDefinition): string[] {\n return []; // DuckDB doesn't support triggers\n }\n\n /**\n * DuckDB does NOT support triggers\n */\n supportsTriggers(): boolean {\n return false;\n }\n\n /**\n * CRITICAL: DuckDB requires inline UNIQUE for UPSERT\n *\n * DuckDB issue #12684: ON CONFLICT only works with inline UNIQUE constraints,\n * not with separate CREATE UNIQUE INDEX statements.\n */\n requiresInlineUnique(): boolean {\n return true;\n }\n}\n"],"names":[],"mappings":";;AAkBO,MAAM,uBAAuB,gBAAgB;AAAA,EACzC,SAAyB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMlC,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,EAOA,gBAAgB,QAAoC;AAClD,UAAM,EAAE,WAAW,QAAA,IAAY;AAC/B,UAAM,aAAuB,CAAA;AAE7B,eAAW,SAAS,SAAS;AAE3B,UAAI,MAAM,QAAQ;AAChB;AAAA,MACF;AAEA,YAAM,SAAS,kBAAkB,OAAO,KAAK,MAAM;AACnD,UAAI,CAAC,QAAQ;AACX;AAAA,MACF;AACA,UAAI,MAAM,+BAA+B,MAAM,IAAI,SAAS,SAAS,MAAM,MAAM;AAEjF,UAAI,MAAM,OAAO;AACf,eAAO,UAAU,MAAM,KAAK;AAAA,MAC9B;AAEA,aAAO;AACP,iBAAW,KAAK,GAAG;AAAA,IACrB;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAiB,SAAqC;AACpD,WAAO,CAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,mBAA4B;AAC1B,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,uBAAgC;AAC9B,WAAO;AAAA,EACT;AACF;"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { SchemaDefinition } from '../types.js';
|
|
2
|
+
import { DatabaseEngine, DDLStrategy, EngineSpecificDDL, MultiEngineDDL } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* DDL Generator Module
|
|
5
|
+
*
|
|
6
|
+
* Per-engine DDL generation for SMRT schema management.
|
|
7
|
+
* SMRT handles ALL database maintenance directly - SDK SQL remains a pure query/CRUD layer.
|
|
8
|
+
*/
|
|
9
|
+
export { BaseDDLStrategy } from './base-strategy.js';
|
|
10
|
+
export { DuckDBStrategy } from './duckdb-strategy.js';
|
|
11
|
+
export { JsonDuckDBStrategy } from './json-duckdb-strategy.js';
|
|
12
|
+
export { PostgresStrategy } from './postgres-strategy.js';
|
|
13
|
+
export { SQLiteStrategy } from './sqlite-strategy.js';
|
|
14
|
+
export * from './types.js';
|
|
15
|
+
/**
|
|
16
|
+
* Get the DDL strategy for a specific database engine
|
|
17
|
+
*
|
|
18
|
+
* @param engine - The database engine type
|
|
19
|
+
* @returns The DDL strategy for that engine
|
|
20
|
+
*/
|
|
21
|
+
export declare function getDDLStrategy(engine: DatabaseEngine): DDLStrategy;
|
|
22
|
+
/**
|
|
23
|
+
* Get all available DDL strategies
|
|
24
|
+
*
|
|
25
|
+
* @returns Array of all DDL strategies
|
|
26
|
+
*/
|
|
27
|
+
export declare function getAllStrategies(): DDLStrategy[];
|
|
28
|
+
/**
|
|
29
|
+
* Generate DDL for a specific engine
|
|
30
|
+
*
|
|
31
|
+
* @param schema - The schema definition
|
|
32
|
+
* @param engine - The target database engine
|
|
33
|
+
* @returns Engine-specific DDL (createTable, indexes, triggers)
|
|
34
|
+
*/
|
|
35
|
+
export declare function generateDDLForEngine(schema: SchemaDefinition, engine: DatabaseEngine): EngineSpecificDDL;
|
|
36
|
+
/**
|
|
37
|
+
* Generate DDL for all supported engines
|
|
38
|
+
*
|
|
39
|
+
* Useful for storing pre-generated DDL in manifest at build time.
|
|
40
|
+
*
|
|
41
|
+
* @param schema - The schema definition
|
|
42
|
+
* @returns DDL for all engines
|
|
43
|
+
*/
|
|
44
|
+
export declare function generateMultiEngineDDL(schema: SchemaDefinition): MultiEngineDDL;
|
|
45
|
+
/**
|
|
46
|
+
* Detect database engine from URL or connection type
|
|
47
|
+
*
|
|
48
|
+
* @param url - Database URL or path
|
|
49
|
+
* @param type - Optional explicit type hint
|
|
50
|
+
* @returns Detected database engine
|
|
51
|
+
*/
|
|
52
|
+
export declare function detectEngine(url: string, type?: string): DatabaseEngine;
|
|
53
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/schema/ddl/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,cAAc,YAAY,CAAC;AAE3B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAKpD,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,iBAAiB,EACjB,cAAc,EACf,MAAM,YAAY,CAAC;AAUpB;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,WAAW,CAMlE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,WAAW,EAAE,CAEhD;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,cAAc,GACrB,iBAAiB,CAQnB;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,gBAAgB,GACvB,cAAc,CAOhB;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,cAAc,CA+DvE"}
|