@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":"table-verifier.d.ts","sourceRoot":"","sources":["../../src/schema/table-verifier.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAsC5D;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAC1C,EAAE,EAAE,iBAAiB,EACrB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAYf"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { DatabaseError } from "../errors.js";
|
|
2
|
+
import { isTableVerified, markTableVerified } from "../table-cache.js";
|
|
3
|
+
const memoryVerificationKeys = /* @__PURE__ */ new WeakMap();
|
|
4
|
+
let nextMemoryVerificationId = 0;
|
|
5
|
+
function getVerificationKey(db) {
|
|
6
|
+
const dbWithConfig = db;
|
|
7
|
+
const dbid = dbWithConfig.dbid || dbWithConfig.config?.dbid;
|
|
8
|
+
if (dbid) {
|
|
9
|
+
return dbid;
|
|
10
|
+
}
|
|
11
|
+
const dbUrl = db.url || dbWithConfig.config?.url;
|
|
12
|
+
if (dbUrl && dbUrl !== ":memory:" && dbUrl !== "memory" && dbUrl !== "file::memory:") {
|
|
13
|
+
return dbUrl;
|
|
14
|
+
}
|
|
15
|
+
let memoryKey = memoryVerificationKeys.get(db);
|
|
16
|
+
if (!memoryKey) {
|
|
17
|
+
nextMemoryVerificationId += 1;
|
|
18
|
+
memoryKey = `memory:${nextMemoryVerificationId}`;
|
|
19
|
+
memoryVerificationKeys.set(db, memoryKey);
|
|
20
|
+
}
|
|
21
|
+
return memoryKey;
|
|
22
|
+
}
|
|
23
|
+
async function verifyPersistenceTable(db, tableName, className) {
|
|
24
|
+
const verificationKey = getVerificationKey(db);
|
|
25
|
+
if (isTableVerified(verificationKey, tableName)) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
const tableExists = await db.tableExists(tableName);
|
|
29
|
+
if (!tableExists) {
|
|
30
|
+
throw DatabaseError.schemaMissing(tableName, className);
|
|
31
|
+
}
|
|
32
|
+
markTableVerified(verificationKey, tableName);
|
|
33
|
+
}
|
|
34
|
+
export {
|
|
35
|
+
verifyPersistenceTable
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=table-verifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-verifier.js","sources":["../../src/schema/table-verifier.ts"],"sourcesContent":["import type { DatabaseInterface } from '@happyvertical/sql';\nimport { DatabaseError } from '../errors.js';\nimport { isTableVerified, markTableVerified } from '../table-cache.js';\n\nconst memoryVerificationKeys = new WeakMap<DatabaseInterface, string>();\nlet nextMemoryVerificationId = 0;\n\nfunction getVerificationKey(db: DatabaseInterface): string {\n const dbWithConfig = db as DatabaseInterface & {\n dbid?: string;\n config?: { dbid?: string; url?: string };\n };\n\n const dbid = dbWithConfig.dbid || dbWithConfig.config?.dbid;\n if (dbid) {\n return dbid;\n }\n\n const dbUrl = db.url || dbWithConfig.config?.url;\n if (\n dbUrl &&\n dbUrl !== ':memory:' &&\n dbUrl !== 'memory' &&\n dbUrl !== 'file::memory:'\n ) {\n return dbUrl;\n }\n\n let memoryKey = memoryVerificationKeys.get(db);\n if (!memoryKey) {\n nextMemoryVerificationId += 1;\n memoryKey = `memory:${nextMemoryVerificationId}`;\n memoryVerificationKeys.set(db, memoryKey);\n }\n\n return memoryKey;\n}\n\n/**\n * Verify that a model table already exists.\n *\n * Runtime no longer creates application tables implicitly. This helper is the\n * shared fail-fast path used by collections and objects before they touch app\n * tables, while still caching successful checks to avoid repeated round-trips.\n */\nexport async function verifyPersistenceTable(\n db: DatabaseInterface,\n tableName: string,\n className: string,\n): Promise<void> {\n const verificationKey = getVerificationKey(db);\n if (isTableVerified(verificationKey, tableName)) {\n return;\n }\n\n const tableExists = await db.tableExists(tableName);\n if (!tableExists) {\n throw DatabaseError.schemaMissing(tableName, className);\n }\n\n markTableVerified(verificationKey, tableName);\n}\n"],"names":[],"mappings":";;AAIA,MAAM,6CAA6B,QAAA;AACnC,IAAI,2BAA2B;AAE/B,SAAS,mBAAmB,IAA+B;AACzD,QAAM,eAAe;AAKrB,QAAM,OAAO,aAAa,QAAQ,aAAa,QAAQ;AACvD,MAAI,MAAM;AACR,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,GAAG,OAAO,aAAa,QAAQ;AAC7C,MACE,SACA,UAAU,cACV,UAAU,YACV,UAAU,iBACV;AACA,WAAO;AAAA,EACT;AAEA,MAAI,YAAY,uBAAuB,IAAI,EAAE;AAC7C,MAAI,CAAC,WAAW;AACd,gCAA4B;AAC5B,gBAAY,UAAU,wBAAwB;AAC9C,2BAAuB,IAAI,IAAI,SAAS;AAAA,EAC1C;AAEA,SAAO;AACT;AASA,eAAsB,uBACpB,IACA,WACA,WACe;AACf,QAAM,kBAAkB,mBAAmB,EAAE;AAC7C,MAAI,gBAAgB,iBAAiB,SAAS,GAAG;AAC/C;AAAA,EACF;AAEA,QAAM,cAAc,MAAM,GAAG,YAAY,SAAS;AAClD,MAAI,CAAC,aAAa;AAChB,UAAM,cAAc,cAAc,WAAW,SAAS;AAAA,EACxD;AAEA,oBAAkB,iBAAiB,SAAS;AAC9C;"}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema definition types for SMRT objects
|
|
3
|
+
* Used for build-time schema generation and runtime table management
|
|
4
|
+
*/
|
|
5
|
+
export type SQLDataType = 'TEXT' | 'INTEGER' | 'REAL' | 'BLOB' | 'BOOLEAN' | 'JSON' | 'TIMESTAMP' | 'UUID';
|
|
6
|
+
export interface ColumnDefinition {
|
|
7
|
+
type: SQLDataType;
|
|
8
|
+
primaryKey?: boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Non-DDL marker for SMRT-owned identifier/reference columns. The migration
|
|
11
|
+
* differ uses this to distinguish intentionally UUID-compatible references
|
|
12
|
+
* from plain text provenance fields whose names may also end in `_id`.
|
|
13
|
+
*/
|
|
14
|
+
referenceKind?: 'id' | 'foreignKey' | 'crossPackageRef' | 'tenantId';
|
|
15
|
+
unique?: boolean;
|
|
16
|
+
notNull?: boolean;
|
|
17
|
+
defaultValue?: any;
|
|
18
|
+
foreignKey?: {
|
|
19
|
+
table: string;
|
|
20
|
+
column: string;
|
|
21
|
+
onDelete?: 'CASCADE' | 'SET NULL' | 'RESTRICT';
|
|
22
|
+
onUpdate?: 'CASCADE' | 'SET NULL' | 'RESTRICT';
|
|
23
|
+
};
|
|
24
|
+
check?: string;
|
|
25
|
+
description?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface IndexDefinition {
|
|
28
|
+
name: string;
|
|
29
|
+
columns: string[];
|
|
30
|
+
unique?: boolean;
|
|
31
|
+
where?: string;
|
|
32
|
+
description?: string;
|
|
33
|
+
/**
|
|
34
|
+
* Expression-based index target.
|
|
35
|
+
*
|
|
36
|
+
* When set, the DDL strategy renders the index over a JSON path inside
|
|
37
|
+
* `column` rather than the `columns` list. Used today by `@meta({ indexed: true })`
|
|
38
|
+
* which targets a key inside the `_meta_data` JSONB column.
|
|
39
|
+
*/
|
|
40
|
+
jsonPath?: {
|
|
41
|
+
column: string;
|
|
42
|
+
path: string;
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
export interface TriggerDefinition {
|
|
46
|
+
name: string;
|
|
47
|
+
when: 'BEFORE' | 'AFTER' | 'INSTEAD OF';
|
|
48
|
+
event: 'INSERT' | 'UPDATE' | 'DELETE';
|
|
49
|
+
condition?: string;
|
|
50
|
+
body: string;
|
|
51
|
+
description?: string;
|
|
52
|
+
}
|
|
53
|
+
export interface ForeignKeyDefinition {
|
|
54
|
+
column: string;
|
|
55
|
+
referencesTable: string;
|
|
56
|
+
referencesColumn: string;
|
|
57
|
+
onDelete?: 'CASCADE' | 'SET NULL' | 'RESTRICT';
|
|
58
|
+
onUpdate?: 'CASCADE' | 'SET NULL' | 'RESTRICT';
|
|
59
|
+
}
|
|
60
|
+
export interface SchemaDefinition {
|
|
61
|
+
tableName: string;
|
|
62
|
+
/** SQL DDL statement for table creation (optional - may be generated lazily) */
|
|
63
|
+
ddl?: string;
|
|
64
|
+
columns: Record<string, ColumnDefinition>;
|
|
65
|
+
indexes: IndexDefinition[];
|
|
66
|
+
triggers: TriggerDefinition[];
|
|
67
|
+
foreignKeys: ForeignKeyDefinition[];
|
|
68
|
+
version: string;
|
|
69
|
+
dependencies: string[];
|
|
70
|
+
packageName?: string;
|
|
71
|
+
baseClass?: string;
|
|
72
|
+
}
|
|
73
|
+
export interface SchemaManifest {
|
|
74
|
+
version: string;
|
|
75
|
+
timestamp: number;
|
|
76
|
+
packageName: string;
|
|
77
|
+
schemas: Record<string, SchemaDefinition>;
|
|
78
|
+
dependencies: string[];
|
|
79
|
+
}
|
|
80
|
+
export interface SchemaOverride {
|
|
81
|
+
tableName: string;
|
|
82
|
+
addColumns?: Record<string, ColumnDefinition>;
|
|
83
|
+
removeColumns?: string[];
|
|
84
|
+
addIndexes?: IndexDefinition[];
|
|
85
|
+
removeIndexes?: string[];
|
|
86
|
+
addTriggers?: TriggerDefinition[];
|
|
87
|
+
removeTriggers?: string[];
|
|
88
|
+
packageName: string;
|
|
89
|
+
}
|
|
90
|
+
export interface SchemaMigration {
|
|
91
|
+
id: string;
|
|
92
|
+
version: string;
|
|
93
|
+
description: string;
|
|
94
|
+
up: string[];
|
|
95
|
+
down: string[];
|
|
96
|
+
dependencies: string[];
|
|
97
|
+
packageName: string;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Status of a schema migration in the tracking table
|
|
101
|
+
*/
|
|
102
|
+
export type MigrationStatus = 'pending' | 'running' | 'completed' | 'failed' | 'rolled_back';
|
|
103
|
+
/**
|
|
104
|
+
* Record stored in _smrt_schema_migrations table
|
|
105
|
+
* Tracks applied migrations for idempotency and audit
|
|
106
|
+
*/
|
|
107
|
+
export interface SchemaMigrationRecord {
|
|
108
|
+
/** UUID primary key */
|
|
109
|
+
id: string;
|
|
110
|
+
/** Migration name, e.g., '0001_initial_schema' */
|
|
111
|
+
name: string;
|
|
112
|
+
/** SMRT version when migration was created */
|
|
113
|
+
version: string;
|
|
114
|
+
/** SHA-256 checksum of migration SQL for idempotency */
|
|
115
|
+
checksum: string;
|
|
116
|
+
/** SHA-256 of what was actually applied (for drift detection) */
|
|
117
|
+
applied_checksum: string | null;
|
|
118
|
+
/** When the migration was applied */
|
|
119
|
+
applied_at: Date;
|
|
120
|
+
/** Execution duration in milliseconds */
|
|
121
|
+
execution_time_ms: number | null;
|
|
122
|
+
/** Source SMRT package that defined this migration */
|
|
123
|
+
package_name: string | null;
|
|
124
|
+
/** Original migration file path */
|
|
125
|
+
source_file: string | null;
|
|
126
|
+
/** Current migration status */
|
|
127
|
+
status: MigrationStatus;
|
|
128
|
+
/** Error message if status is 'failed' */
|
|
129
|
+
error_message: string | null;
|
|
130
|
+
/** Number of application attempts */
|
|
131
|
+
attempts: number;
|
|
132
|
+
/** Whether this migration can be rolled back */
|
|
133
|
+
is_reversible: boolean;
|
|
134
|
+
/** When the migration was rolled back (if applicable) */
|
|
135
|
+
rolled_back_at: Date | null;
|
|
136
|
+
/** Hostname or identifier of who/what applied the migration */
|
|
137
|
+
applied_by: string | null;
|
|
138
|
+
/** Batch number for migrations applied together */
|
|
139
|
+
batch: number | null;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Definition for a migration to be applied
|
|
143
|
+
* Used by db:diff generation and file parsing
|
|
144
|
+
*/
|
|
145
|
+
export interface MigrationDefinition {
|
|
146
|
+
/** Unique migration identifier, e.g., '0001_add_users_table' */
|
|
147
|
+
id: string;
|
|
148
|
+
/** Human-readable description */
|
|
149
|
+
description: string;
|
|
150
|
+
/** SMRT version this migration was created for */
|
|
151
|
+
version: string;
|
|
152
|
+
/** SQL statements to apply the migration */
|
|
153
|
+
up: string[];
|
|
154
|
+
/** SQL statements to rollback the migration */
|
|
155
|
+
down: string[];
|
|
156
|
+
/** Other migration IDs this depends on */
|
|
157
|
+
dependencies?: string[];
|
|
158
|
+
/** Package that defines this migration */
|
|
159
|
+
package_name?: string;
|
|
160
|
+
/** Source file path */
|
|
161
|
+
source_file?: string;
|
|
162
|
+
/** Whether this migration can be rolled back */
|
|
163
|
+
is_reversible?: boolean;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Result of applying a single migration
|
|
167
|
+
*/
|
|
168
|
+
export interface MigrationResult {
|
|
169
|
+
/** Whether the migration was successful (no errors) */
|
|
170
|
+
success: boolean;
|
|
171
|
+
/** Migration name */
|
|
172
|
+
name: string;
|
|
173
|
+
/** SHA-256 checksum of the migration */
|
|
174
|
+
checksum: string;
|
|
175
|
+
/** Execution duration in milliseconds */
|
|
176
|
+
execution_time_ms: number;
|
|
177
|
+
/** Whether the migration was actually applied (false if already applied) */
|
|
178
|
+
applied?: boolean;
|
|
179
|
+
/** Whether the migration was skipped (already applied with same checksum) */
|
|
180
|
+
skipped?: boolean;
|
|
181
|
+
/** Error if migration failed */
|
|
182
|
+
error?: Error | string;
|
|
183
|
+
/** Whether this was a rollback operation */
|
|
184
|
+
rolled_back?: boolean;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Drift detection result for a single migration
|
|
188
|
+
*/
|
|
189
|
+
export interface DriftReport {
|
|
190
|
+
/** Migration name */
|
|
191
|
+
migration_name: string;
|
|
192
|
+
/** Expected checksum from migration definition */
|
|
193
|
+
expected_checksum: string;
|
|
194
|
+
/** Actual checksum found in database */
|
|
195
|
+
actual_checksum: string;
|
|
196
|
+
/** Type of drift detected */
|
|
197
|
+
drift_type: 'file_modified' | 'db_modified' | 'missing_in_db' | 'unknown_in_db';
|
|
198
|
+
/** Suggested action to resolve the drift */
|
|
199
|
+
recommendation: string;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Schema difference for a single change
|
|
203
|
+
*/
|
|
204
|
+
export interface SchemaChange {
|
|
205
|
+
/** Type of change */
|
|
206
|
+
type: 'add_table' | 'drop_table' | 'add_column' | 'drop_column' | 'add_index' | 'drop_index' | 'type_mismatch' | 'type_upgrade';
|
|
207
|
+
/** Affected table name */
|
|
208
|
+
table: string;
|
|
209
|
+
/** Column or index name (if applicable) */
|
|
210
|
+
name?: string;
|
|
211
|
+
/** Column definition (for add_column) */
|
|
212
|
+
column?: ColumnDefinition;
|
|
213
|
+
/** Index definition (for add_index) */
|
|
214
|
+
index?: IndexDefinition;
|
|
215
|
+
/** For type mismatches and upgrades: expected vs actual */
|
|
216
|
+
mismatch?: {
|
|
217
|
+
expected: string;
|
|
218
|
+
actual: string;
|
|
219
|
+
};
|
|
220
|
+
/** Generated SQL statement */
|
|
221
|
+
sql?: string;
|
|
222
|
+
/**
|
|
223
|
+
* Generated SQL statements for changes that require multiple ordered steps.
|
|
224
|
+
* When omitted, callers should use the single `sql` statement.
|
|
225
|
+
*/
|
|
226
|
+
sqlStatements?: string[];
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Result of comparing manifest schema to database
|
|
230
|
+
*/
|
|
231
|
+
export interface SchemaDiff {
|
|
232
|
+
/** New tables to create */
|
|
233
|
+
added_tables: SchemaDefinition[];
|
|
234
|
+
/** Tables to drop (only if explicitly requested) */
|
|
235
|
+
dropped_tables: string[];
|
|
236
|
+
/** Changes to existing tables */
|
|
237
|
+
changes: SchemaChange[];
|
|
238
|
+
/** Whether any differences were found */
|
|
239
|
+
has_changes: boolean;
|
|
240
|
+
}
|
|
241
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/schema/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { DatabaseInterface } from '@happyvertical/sql';
|
|
2
|
+
import { DatabaseEngine } from './ddl/types.js';
|
|
3
|
+
export { isJsonPathIndex, renderIndexTarget } from './index-utils.js';
|
|
4
|
+
/**
|
|
5
|
+
* Generates a complete database schema SQL statement for a class
|
|
6
|
+
*
|
|
7
|
+
* This is a thin wrapper around SchemaGenerator that provides the
|
|
8
|
+
* single source of truth for schema generation. Uses ObjectRegistry
|
|
9
|
+
* cached fields from AST manifest for consistent schema generation.
|
|
10
|
+
*
|
|
11
|
+
* **Note**: Uses dynamic import for SchemaGenerator to avoid bundling
|
|
12
|
+
* Node.js-only code (node:crypto) in browser builds.
|
|
13
|
+
*
|
|
14
|
+
* @param ClassType - Class constructor to generate schema for
|
|
15
|
+
* @param providedFields - Optional fields map (used during registration)
|
|
16
|
+
* @returns SQL schema creation statement with CREATE TABLE and CREATE INDEX statements
|
|
17
|
+
*/
|
|
18
|
+
export declare function generateSchema(ClassType: new (...args: any[]) => any, providedFields?: Map<string, any>, options?: {
|
|
19
|
+
engine?: DatabaseEngine;
|
|
20
|
+
}): Promise<string>;
|
|
21
|
+
/**
|
|
22
|
+
* Ensure schema exists for a registered class.
|
|
23
|
+
*
|
|
24
|
+
* This compatibility helper is kept for tooling flows such as CLI commands that
|
|
25
|
+
* explicitly prepare schema ahead of runtime. Core runtime no longer calls this
|
|
26
|
+
* automatically.
|
|
27
|
+
*
|
|
28
|
+
* @deprecated Prefer explicit migration/bootstrap tooling. Runtime verifies
|
|
29
|
+
* schema and fails fast when tables are missing.
|
|
30
|
+
*/
|
|
31
|
+
export declare function ensureSchema(db: DatabaseInterface, className: string): Promise<void>;
|
|
32
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/schema/utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAG5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAKrD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAEtE;;;;;;;;;;;;;GAaG;AACH,wBAAsB,cAAc,CAClC,SAAS,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACtC,cAAc,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,EACjC,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,cAAc,CAAA;CAAO,mBAqI1C;AAED;;;;;;;;;GASG;AACH,wBAAsB,YAAY,CAChC,EAAE,EAAE,iBAAiB,EACrB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAyEf"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { ObjectRegistry } from "../registry.js";
|
|
2
|
+
import { tableNameFromClass } from "../utils.js";
|
|
3
|
+
import { SchemaManager } from "./schema-manager.js";
|
|
4
|
+
import { isJsonPathIndex, renderIndexTarget } from "./index-utils.js";
|
|
5
|
+
async function generateSchema(ClassType, providedFields, options = {}) {
|
|
6
|
+
const className = ClassType.name;
|
|
7
|
+
const tableName = tableNameFromClass(ClassType);
|
|
8
|
+
if (!providedFields || providedFields.size === 0) {
|
|
9
|
+
await ObjectRegistry.ensureManifestLoaded(className);
|
|
10
|
+
}
|
|
11
|
+
const cachedFields = providedFields && providedFields.size > 0 ? providedFields : await ObjectRegistry.getAllFields(className);
|
|
12
|
+
if (cachedFields.size === 0) {
|
|
13
|
+
const isTestEnv = process.env.NODE_ENV === "test" || process.env.VITEST === "true" || typeof globalThis.describe !== "undefined" || typeof globalThis.it !== "undefined";
|
|
14
|
+
const testHint = isTestEnv ? `
|
|
15
|
+
|
|
16
|
+
⚠️ Are you using 'smrt test'? Tests require manifest generation.
|
|
17
|
+
✅ Use: smrt test
|
|
18
|
+
❌ NOT: npx vitest
|
|
19
|
+
` : "";
|
|
20
|
+
const isRegistered = ObjectRegistry.hasClass(className);
|
|
21
|
+
if (isRegistered) {
|
|
22
|
+
throw new Error(
|
|
23
|
+
`No field metadata found for class '${className}'. The class is registered (decorator ran) but has no field definitions. This usually means the manifest file is missing or stale.` + testHint
|
|
24
|
+
);
|
|
25
|
+
} else {
|
|
26
|
+
throw new Error(
|
|
27
|
+
`Cannot generate schema for unregistered class '${className}'. Ensure the class is decorated with @smrt() for schema generation to work. Runtime introspection has been removed per issue #131.` + testHint
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
const tableStrategy = ObjectRegistry.getTableStrategy(className);
|
|
32
|
+
const { SchemaGenerator } = await import("./generator.js");
|
|
33
|
+
const generator = new SchemaGenerator();
|
|
34
|
+
const registeredClass = ObjectRegistry.getClass(className);
|
|
35
|
+
const runtimeSchemaConfig = registeredClass?.config ? {
|
|
36
|
+
conflictColumns: registeredClass.config.conflictColumns,
|
|
37
|
+
idType: registeredClass.config.idType,
|
|
38
|
+
registry: ObjectRegistry
|
|
39
|
+
} : void 0;
|
|
40
|
+
let schemaDefinition;
|
|
41
|
+
if (tableStrategy === "sti") {
|
|
42
|
+
const stiBase = ObjectRegistry.getSTIBase(className);
|
|
43
|
+
if (!stiBase) {
|
|
44
|
+
throw new Error(
|
|
45
|
+
`STI strategy detected for '${className}' but no STI base class found. This should not happen - please report this bug.`
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
const qualifiedClassName = registeredClass?.qualifiedName ?? registeredClass?.name ?? className;
|
|
49
|
+
if (qualifiedClassName === stiBase || className === stiBase) {
|
|
50
|
+
schemaDefinition = await generator.generateSTISchemaFromRegistry(
|
|
51
|
+
className,
|
|
52
|
+
tableName,
|
|
53
|
+
cachedFields,
|
|
54
|
+
runtimeSchemaConfig
|
|
55
|
+
);
|
|
56
|
+
} else {
|
|
57
|
+
return "";
|
|
58
|
+
}
|
|
59
|
+
} else {
|
|
60
|
+
schemaDefinition = generator.generateSchemaFromRegistry(
|
|
61
|
+
className,
|
|
62
|
+
tableName,
|
|
63
|
+
cachedFields,
|
|
64
|
+
runtimeSchemaConfig
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
if (registeredClass) {
|
|
68
|
+
registeredClass.schema = schemaDefinition;
|
|
69
|
+
registeredClass.schema.ddl = generator.generateSQL(
|
|
70
|
+
schemaDefinition,
|
|
71
|
+
"sqlite"
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
return generator.generateSQL(schemaDefinition, options.engine);
|
|
75
|
+
}
|
|
76
|
+
async function ensureSchema(db, className) {
|
|
77
|
+
const registered = ObjectRegistry.getClass(className);
|
|
78
|
+
if (!registered) {
|
|
79
|
+
throw new Error(
|
|
80
|
+
`Cannot ensure schema for unregistered class '${className}'. Ensure the class is decorated with @smrt() and registered in the ObjectRegistry.`
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
const tableStrategy = ObjectRegistry.getTableStrategy(className);
|
|
84
|
+
if (tableStrategy === "sti") {
|
|
85
|
+
const stiBase = ObjectRegistry.getSTIBase(className);
|
|
86
|
+
const qualifiedClassName = registered.qualifiedName ?? registered.name ?? className;
|
|
87
|
+
if (stiBase && stiBase !== qualifiedClassName && stiBase !== className) {
|
|
88
|
+
await ensureSchema(db, stiBase);
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
let schemaDefinition = ObjectRegistry.getSchema(className);
|
|
93
|
+
if (tableStrategy === "sti") {
|
|
94
|
+
const tableName = ObjectRegistry.getTableName(className);
|
|
95
|
+
if (tableName) {
|
|
96
|
+
const mergedSchema = ObjectRegistry.getAllSchemasAsDefinitions()[tableName];
|
|
97
|
+
if (mergedSchema) {
|
|
98
|
+
schemaDefinition = mergedSchema;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
if (!schemaDefinition?.tableName) {
|
|
103
|
+
const providedFields = registered.fields.size > 0 ? registered.fields : void 0;
|
|
104
|
+
await generateSchema(registered.constructor, providedFields);
|
|
105
|
+
schemaDefinition = ObjectRegistry.getSchema(className);
|
|
106
|
+
if (tableStrategy === "sti") {
|
|
107
|
+
const tableName = ObjectRegistry.getTableName(className);
|
|
108
|
+
if (tableName) {
|
|
109
|
+
const mergedSchema = ObjectRegistry.getAllSchemasAsDefinitions()[tableName];
|
|
110
|
+
if (mergedSchema) {
|
|
111
|
+
schemaDefinition = mergedSchema;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
if (!schemaDefinition?.tableName) {
|
|
117
|
+
throw new Error(
|
|
118
|
+
`No schema definition found for class '${className}'. Run the manifest generation/build step before preparing schema.`
|
|
119
|
+
);
|
|
120
|
+
}
|
|
121
|
+
const mergedSchemaDefinition = ObjectRegistry.getAllSchemasAsDefinitions()[schemaDefinition.tableName];
|
|
122
|
+
const effectiveSchemaDefinition = mergedSchemaDefinition ?? schemaDefinition;
|
|
123
|
+
const schemaManager = new SchemaManager(db, {
|
|
124
|
+
skipTriggers: typeof db.exportTable === "function"
|
|
125
|
+
});
|
|
126
|
+
await schemaManager.ensureTable(effectiveSchemaDefinition);
|
|
127
|
+
}
|
|
128
|
+
export {
|
|
129
|
+
ensureSchema,
|
|
130
|
+
generateSchema,
|
|
131
|
+
isJsonPathIndex,
|
|
132
|
+
renderIndexTarget
|
|
133
|
+
};
|
|
134
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../src/schema/utils.ts"],"sourcesContent":["/**\n * Schema generation utilities - Node.js only\n *\n * These functions use SchemaGenerator which depends on node:crypto.\n * Separated from main utils.ts to prevent bundling in browser builds.\n *\n * SMRT handles ALL database maintenance directly.\n * SDK SQL remains a pure query/CRUD layer.\n */\n\nimport type { DatabaseInterface } from '@happyvertical/sql';\nimport { ObjectRegistry } from '../registry.js';\nimport { tableNameFromClass } from '../utils.js';\nimport type { DatabaseEngine } from './ddl/types.js';\nimport { SchemaManager } from './schema-manager.js';\n\n// Index-rendering helpers live in a separate file to avoid pulling the\n// heavyweight registry/collection module graph into the DDL strategies.\nexport { isJsonPathIndex, renderIndexTarget } from './index-utils.js';\n\n/**\n * Generates a complete database schema SQL statement for a class\n *\n * This is a thin wrapper around SchemaGenerator that provides the\n * single source of truth for schema generation. Uses ObjectRegistry\n * cached fields from AST manifest for consistent schema generation.\n *\n * **Note**: Uses dynamic import for SchemaGenerator to avoid bundling\n * Node.js-only code (node:crypto) in browser builds.\n *\n * @param ClassType - Class constructor to generate schema for\n * @param providedFields - Optional fields map (used during registration)\n * @returns SQL schema creation statement with CREATE TABLE and CREATE INDEX statements\n */\nexport async function generateSchema(\n ClassType: new (...args: any[]) => any,\n providedFields?: Map<string, any>,\n options: { engine?: DatabaseEngine } = {},\n) {\n const className = ClassType.name;\n const tableName = tableNameFromClass(ClassType);\n\n // For external packages, ensure manifest is loaded before proceeding\n if (!providedFields || providedFields.size === 0) {\n await ObjectRegistry.ensureManifestLoaded(className);\n }\n\n // Use provided fields if available AND non-empty (during registration), otherwise get from registry\n // NEW: Use getAllFields() to include inherited fields from parent classes\n const cachedFields =\n providedFields && providedFields.size > 0\n ? providedFields\n : await ObjectRegistry.getAllFields(className);\n\n // Throw error if no fields found\n if (cachedFields.size === 0) {\n // Detect if running in test environment\n const isTestEnv =\n process.env.NODE_ENV === 'test' ||\n process.env.VITEST === 'true' ||\n typeof (globalThis as any).describe !== 'undefined' ||\n typeof (globalThis as any).it !== 'undefined';\n\n const testHint = isTestEnv\n ? `\\n\\n⚠️ Are you using 'smrt test'? ` +\n `Tests require manifest generation.\\n` +\n ` ✅ Use: smrt test\\n` +\n ` ❌ NOT: npx vitest\\n`\n : '';\n\n // Check if class is actually registered (decorator ran but no fields loaded)\n const isRegistered = ObjectRegistry.hasClass(className);\n\n if (isRegistered) {\n // Class registered but no fields - manifest problem\n throw new Error(\n `No field metadata found for class '${className}'. ` +\n `The class is registered (decorator ran) but has no field definitions. ` +\n `This usually means the manifest file is missing or stale.` +\n testHint,\n );\n } else {\n // Class not registered - decorator never ran\n throw new Error(\n `Cannot generate schema for unregistered class '${className}'. ` +\n `Ensure the class is decorated with @smrt() for schema generation to work. ` +\n `Runtime introspection has been removed per issue #131.` +\n testHint,\n );\n }\n }\n\n // Check if class uses STI strategy\n const tableStrategy = ObjectRegistry.getTableStrategy(className);\n\n // Dynamic import SchemaGenerator (Node.js-only, uses node:crypto)\n // This prevents bundling it into browser builds\n const { SchemaGenerator } = await import('./generator.js');\n const generator = new SchemaGenerator();\n const registeredClass = ObjectRegistry.getClass(className);\n const runtimeSchemaConfig = registeredClass?.config\n ? {\n conflictColumns: registeredClass.config.conflictColumns,\n idType: registeredClass.config.idType,\n registry: ObjectRegistry,\n }\n : undefined;\n\n let schemaDefinition: Awaited<\n ReturnType<\n InstanceType<typeof SchemaGenerator>['generateSchemaFromRegistry']\n >\n >;\n\n if (tableStrategy === 'sti') {\n // STI: Generate shared table for base class\n const stiBase = ObjectRegistry.getSTIBase(className);\n\n if (!stiBase) {\n throw new Error(\n `STI strategy detected for '${className}' but no STI base class found. ` +\n `This should not happen - please report this bug.`,\n );\n }\n\n // Only generate schema for the base class (not for children).\n // R5-canon: `getSTIBase` returns the qualified name; compare against\n // the qualified form of this class so an STI base isn't\n // mis-classified as a subclass and skipped.\n const qualifiedClassName =\n registeredClass?.qualifiedName ?? registeredClass?.name ?? className;\n if (qualifiedClassName === stiBase || className === stiBase) {\n // This is the base class - generate STI schema\n schemaDefinition = await generator.generateSTISchemaFromRegistry(\n className,\n tableName,\n cachedFields,\n runtimeSchemaConfig,\n );\n } else {\n // This is a child class - return null or empty schema\n // The base class schema already includes all fields\n // Child classes don't need their own tables\n return ''; // Empty SQL - table already created by base class\n }\n } else {\n // CTI: Generate separate table for each class\n schemaDefinition = generator.generateSchemaFromRegistry(\n className,\n tableName,\n cachedFields,\n runtimeSchemaConfig,\n );\n }\n\n // Store the full schema definition in the registry\n // This is critical for:\n // - STI tables where descendants have additional columns (issue #427)\n // - Per-engine DDL generation via SchemaManager\n if (registeredClass) {\n // Store the full SchemaDefinition for SchemaManager to use\n registeredClass.schema = schemaDefinition;\n // Also store generated DDL for backward compatibility\n registeredClass.schema.ddl = generator.generateSQL(\n schemaDefinition,\n 'sqlite',\n );\n }\n\n return generator.generateSQL(schemaDefinition, options.engine);\n}\n\n/**\n * Ensure schema exists for a registered class.\n *\n * This compatibility helper is kept for tooling flows such as CLI commands that\n * explicitly prepare schema ahead of runtime. Core runtime no longer calls this\n * automatically.\n *\n * @deprecated Prefer explicit migration/bootstrap tooling. Runtime verifies\n * schema and fails fast when tables are missing.\n */\nexport async function ensureSchema(\n db: DatabaseInterface,\n className: string,\n): Promise<void> {\n const registered = ObjectRegistry.getClass(className);\n if (!registered) {\n throw new Error(\n `Cannot ensure schema for unregistered class '${className}'. ` +\n `Ensure the class is decorated with @smrt() and registered in the ObjectRegistry.`,\n );\n }\n\n const tableStrategy = ObjectRegistry.getTableStrategy(className);\n if (tableStrategy === 'sti') {\n const stiBase = ObjectRegistry.getSTIBase(className);\n // R5-canon: `getSTIBase` returns the qualified name. Compare\n // against the qualified form of `className` so an STI base isn't\n // mis-classified as a child and recursed on. Falls back to a\n // simple-name compare for classes without a package context.\n const qualifiedClassName =\n registered.qualifiedName ?? registered.name ?? className;\n if (stiBase && stiBase !== qualifiedClassName && stiBase !== className) {\n await ensureSchema(db, stiBase);\n return;\n }\n }\n\n let schemaDefinition = ObjectRegistry.getSchema(className);\n if (tableStrategy === 'sti') {\n const tableName = ObjectRegistry.getTableName(className);\n if (tableName) {\n const mergedSchema =\n ObjectRegistry.getAllSchemasAsDefinitions()[tableName];\n if (mergedSchema) {\n schemaDefinition = mergedSchema;\n }\n }\n }\n\n if (!schemaDefinition?.tableName) {\n const providedFields =\n registered.fields.size > 0 ? registered.fields : undefined;\n await generateSchema(registered.constructor, providedFields);\n schemaDefinition = ObjectRegistry.getSchema(className);\n\n if (tableStrategy === 'sti') {\n const tableName = ObjectRegistry.getTableName(className);\n if (tableName) {\n const mergedSchema =\n ObjectRegistry.getAllSchemasAsDefinitions()[tableName];\n if (mergedSchema) {\n schemaDefinition = mergedSchema;\n }\n }\n }\n }\n\n if (!schemaDefinition?.tableName) {\n throw new Error(\n `No schema definition found for class '${className}'. ` +\n `Run the manifest generation/build step before preparing schema.`,\n );\n }\n\n // Use the merged table definition for shared tables (especially STI).\n // Per-class schema metadata can reflect only the current class, while\n // the database table must include columns from all classes sharing it.\n const mergedSchemaDefinition =\n ObjectRegistry.getAllSchemasAsDefinitions()[schemaDefinition.tableName];\n const effectiveSchemaDefinition = mergedSchemaDefinition ?? schemaDefinition;\n\n const schemaManager = new SchemaManager(db, {\n skipTriggers:\n typeof (db as { exportTable?: unknown }).exportTable === 'function',\n });\n await schemaManager.ensureTable(effectiveSchemaDefinition);\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Create wrapper files for subpath exports
|
|
4
|
+
*
|
|
5
|
+
* The Vite build with preserveModules creates flat numbered files (index17.js, etc)
|
|
6
|
+
* but package.json exports expect directory structure (vite-plugin/index.js, etc).
|
|
7
|
+
* This script creates wrapper files that re-export from the main index.js.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { mkdirSync, writeFileSync } from 'node:fs';
|
|
11
|
+
import { dirname, join } from 'node:path';
|
|
12
|
+
import { fileURLToPath } from 'node:url';
|
|
13
|
+
|
|
14
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
15
|
+
const distDir = join(__dirname, '../dist');
|
|
16
|
+
|
|
17
|
+
// Map of subpath exports to their exported symbols
|
|
18
|
+
const wrappers = [
|
|
19
|
+
{
|
|
20
|
+
path: 'vite-plugin/index.js',
|
|
21
|
+
exports: ['smrtPlugin'],
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
path: 'consumer-plugin/index.js',
|
|
25
|
+
exports: ['smrtConsumer'],
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
path: 'runtime/index.js',
|
|
29
|
+
exports: ['createMCPServer', 'createSmrtServer', 'createSmrtClient'],
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
path: 'prebuild/index.js',
|
|
33
|
+
exports: ['generateTypes', 'loadStaticManifest'],
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
path: 'fields/index.js',
|
|
37
|
+
exports: '*', // Re-export everything from fields
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
path: 'generators/cli.js',
|
|
41
|
+
exports: ['main'], // Import and run main for CLI
|
|
42
|
+
isCLI: true,
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
path: 'prebuild/cli.js',
|
|
46
|
+
exports: '*', // Re-export everything for prebuild CLI
|
|
47
|
+
},
|
|
48
|
+
];
|
|
49
|
+
|
|
50
|
+
// Create wrapper files
|
|
51
|
+
for (const wrapper of wrappers) {
|
|
52
|
+
const wrapperPath = join(distDir, wrapper.path);
|
|
53
|
+
const wrapperDir = dirname(wrapperPath);
|
|
54
|
+
|
|
55
|
+
// Create directory if it doesn't exist
|
|
56
|
+
mkdirSync(wrapperDir, { recursive: true });
|
|
57
|
+
|
|
58
|
+
// Generate export statement
|
|
59
|
+
const shebang = wrapper.isCLI ? '#!/usr/bin/env node\n' : '';
|
|
60
|
+
let content;
|
|
61
|
+
|
|
62
|
+
if (wrapper.isCLI && wrapper.exports.includes('main')) {
|
|
63
|
+
// CLI entry point - import and run main
|
|
64
|
+
content = `${shebang}// Auto-generated CLI entry point
|
|
65
|
+
import { main } from '../index.js';
|
|
66
|
+
|
|
67
|
+
main().catch((error) => {
|
|
68
|
+
console.error('Fatal error:', error);
|
|
69
|
+
process.exit(1);
|
|
70
|
+
});
|
|
71
|
+
`;
|
|
72
|
+
} else if (wrapper.exports === '*') {
|
|
73
|
+
// Wildcard export
|
|
74
|
+
content = `${shebang}// Auto-generated wrapper for subpath export
|
|
75
|
+
export * from '../index.js';
|
|
76
|
+
`;
|
|
77
|
+
} else {
|
|
78
|
+
// Named exports
|
|
79
|
+
content = `${shebang}// Auto-generated wrapper for subpath export
|
|
80
|
+
export { ${wrapper.exports.join(', ')} } from '../index.js';
|
|
81
|
+
`;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// Write wrapper file
|
|
85
|
+
writeFileSync(wrapperPath, content, 'utf-8');
|
|
86
|
+
console.log(`✓ Created wrapper: ${wrapper.path}`);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
console.log(`\n✅ Generated ${wrappers.length} wrapper files`);
|