@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,241 @@
|
|
|
1
|
+
import { ConfigurationError } from "../errors.js";
|
|
2
|
+
import { isQualifiedName, parseQualifiedName, createQualifiedName } from "../utils/qualified-names.js";
|
|
3
|
+
import { getClasses, verboseLog, getConstructorIndex } from "./shared-state.js";
|
|
4
|
+
function registryKeysBySimpleName(simpleName) {
|
|
5
|
+
const lower = simpleName.toLowerCase();
|
|
6
|
+
const classes = getClasses();
|
|
7
|
+
const seen = /* @__PURE__ */ new Map();
|
|
8
|
+
for (const [key, value] of classes.entries()) {
|
|
9
|
+
if (value.name?.toLowerCase() !== lower) continue;
|
|
10
|
+
const existing = seen.get(value);
|
|
11
|
+
if (!existing) {
|
|
12
|
+
seen.set(value, key);
|
|
13
|
+
continue;
|
|
14
|
+
}
|
|
15
|
+
if (key.includes(":") && !existing.includes(":")) {
|
|
16
|
+
seen.set(value, key);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return [...seen.values()];
|
|
20
|
+
}
|
|
21
|
+
function getCanonicalClassName(name) {
|
|
22
|
+
const keys = registryKeysBySimpleName(name);
|
|
23
|
+
if (keys.length === 1) return keys[0];
|
|
24
|
+
return void 0;
|
|
25
|
+
}
|
|
26
|
+
function hasClassCaseInsensitive(name) {
|
|
27
|
+
const lower = name.toLowerCase();
|
|
28
|
+
for (const value of getClasses().values()) {
|
|
29
|
+
if (value.name?.toLowerCase() === lower) return true;
|
|
30
|
+
}
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
function findClass(name) {
|
|
34
|
+
const classes = getClasses();
|
|
35
|
+
const registered = classes.get(name);
|
|
36
|
+
if (registered) {
|
|
37
|
+
return registered;
|
|
38
|
+
}
|
|
39
|
+
if (isQualifiedName(name)) {
|
|
40
|
+
const { packageName, className } = parseQualifiedName(name);
|
|
41
|
+
const keys2 = registryKeysBySimpleName(className);
|
|
42
|
+
if (keys2.length > 0) {
|
|
43
|
+
const exactPackageMatch = keys2.map((key) => classes.get(key)).find((candidate) => candidate?.packageName === packageName);
|
|
44
|
+
if (exactPackageMatch) {
|
|
45
|
+
return exactPackageMatch;
|
|
46
|
+
}
|
|
47
|
+
if (keys2.length === 1) {
|
|
48
|
+
const fallback = classes.get(keys2[0]);
|
|
49
|
+
if (fallback && !fallback.packageName) {
|
|
50
|
+
return fallback;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return void 0;
|
|
55
|
+
}
|
|
56
|
+
const keys = registryKeysBySimpleName(name);
|
|
57
|
+
if (keys.length > 0) {
|
|
58
|
+
if (keys.length === 1) {
|
|
59
|
+
return classes.get(keys[0]);
|
|
60
|
+
}
|
|
61
|
+
verboseLog(
|
|
62
|
+
`[registry] findClass("${name}") is ambiguous — ${keys.length} matches. Use qualified name (e.g., ${keys[0]}) for precision.`
|
|
63
|
+
);
|
|
64
|
+
return classes.get(keys[0]);
|
|
65
|
+
}
|
|
66
|
+
return void 0;
|
|
67
|
+
}
|
|
68
|
+
function findClassStrict(name, fromPackage) {
|
|
69
|
+
const classes = getClasses();
|
|
70
|
+
const registered = classes.get(name);
|
|
71
|
+
if (registered) {
|
|
72
|
+
return registered;
|
|
73
|
+
}
|
|
74
|
+
if (isQualifiedName(name)) {
|
|
75
|
+
return void 0;
|
|
76
|
+
}
|
|
77
|
+
if (fromPackage) {
|
|
78
|
+
const qualifiedAttempt = createQualifiedName(fromPackage, name);
|
|
79
|
+
const byQualified = classes.get(qualifiedAttempt);
|
|
80
|
+
if (byQualified) {
|
|
81
|
+
return byQualified;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
const keys = registryKeysBySimpleName(name);
|
|
85
|
+
if (keys.length > 0) {
|
|
86
|
+
if (keys.length === 1) {
|
|
87
|
+
return classes.get(keys[0]);
|
|
88
|
+
}
|
|
89
|
+
throw new ConfigurationError(
|
|
90
|
+
`Ambiguous class name "${name}" — found in ${keys.length} packages: ${keys.join(", ")}. Use a qualified name (e.g., ${keys[0]}) to disambiguate.`,
|
|
91
|
+
"CONFIG_AMBIGUOUS_CLASS",
|
|
92
|
+
{ className: name, candidates: keys }
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
return void 0;
|
|
96
|
+
}
|
|
97
|
+
function qualifyExtendsName(extendsValue, currentPackage) {
|
|
98
|
+
const classes = getClasses();
|
|
99
|
+
if (isQualifiedName(extendsValue)) {
|
|
100
|
+
return extendsValue;
|
|
101
|
+
}
|
|
102
|
+
if (extendsValue === "SmrtObject" || extendsValue === "SmrtClass" || extendsValue === "SmrtCollection") {
|
|
103
|
+
return extendsValue;
|
|
104
|
+
}
|
|
105
|
+
const samePackageQualified = createQualifiedName(
|
|
106
|
+
currentPackage,
|
|
107
|
+
extendsValue
|
|
108
|
+
);
|
|
109
|
+
if (classes.has(samePackageQualified)) {
|
|
110
|
+
return samePackageQualified;
|
|
111
|
+
}
|
|
112
|
+
const keys = registryKeysBySimpleName(extendsValue);
|
|
113
|
+
if (keys.length === 1) {
|
|
114
|
+
return keys[0];
|
|
115
|
+
}
|
|
116
|
+
return extendsValue;
|
|
117
|
+
}
|
|
118
|
+
function getClass(name) {
|
|
119
|
+
return findClass(name);
|
|
120
|
+
}
|
|
121
|
+
function getClassByConstructor(ctor) {
|
|
122
|
+
const registeredName = getConstructorIndex().get(ctor);
|
|
123
|
+
if (registeredName) {
|
|
124
|
+
return getClasses().get(registeredName);
|
|
125
|
+
}
|
|
126
|
+
return void 0;
|
|
127
|
+
}
|
|
128
|
+
function getClassByQualifiedName(qualifiedName) {
|
|
129
|
+
return getClasses().get(qualifiedName);
|
|
130
|
+
}
|
|
131
|
+
function getClassInPackage(packageName, className) {
|
|
132
|
+
const qualifiedName = createQualifiedName(packageName, className);
|
|
133
|
+
return getClasses().get(qualifiedName);
|
|
134
|
+
}
|
|
135
|
+
function findClassesByName(className) {
|
|
136
|
+
const matches = [];
|
|
137
|
+
const lowerName = className.toLowerCase();
|
|
138
|
+
for (const registered of getClasses().values()) {
|
|
139
|
+
if (registered.name.toLowerCase() === lowerName) {
|
|
140
|
+
matches.push(registered);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return matches;
|
|
144
|
+
}
|
|
145
|
+
function resolveType(shortName) {
|
|
146
|
+
if (shortName.includes(":") && shortName.startsWith("@")) {
|
|
147
|
+
const registered = getClassByQualifiedName(shortName);
|
|
148
|
+
if (!registered) {
|
|
149
|
+
throw new Error(
|
|
150
|
+
`Class "${shortName}" is not registered. Make sure the package is installed and the class is decorated with @smrt().`
|
|
151
|
+
);
|
|
152
|
+
}
|
|
153
|
+
return shortName;
|
|
154
|
+
}
|
|
155
|
+
const matches = findClassesByName(shortName);
|
|
156
|
+
if (matches.length === 0) {
|
|
157
|
+
throw new Error(
|
|
158
|
+
`Class "${shortName}" is not registered. Make sure the package is installed and the class is decorated with @smrt().`
|
|
159
|
+
);
|
|
160
|
+
}
|
|
161
|
+
if (matches.length > 1) {
|
|
162
|
+
const packageList = matches.map((m) => ` - ${m.qualifiedName}`).join("\n");
|
|
163
|
+
throw new Error(
|
|
164
|
+
`"${shortName}" is ambiguous. Found in multiple packages:
|
|
165
|
+
${packageList}
|
|
166
|
+
Use the fully qualified name instead.`
|
|
167
|
+
);
|
|
168
|
+
}
|
|
169
|
+
return matches[0].qualifiedName;
|
|
170
|
+
}
|
|
171
|
+
function getClassesByPackage(packageName) {
|
|
172
|
+
const result = /* @__PURE__ */ new Map();
|
|
173
|
+
for (const [name, registered] of getClasses().entries()) {
|
|
174
|
+
if (registered.packageName === packageName) {
|
|
175
|
+
result.set(name, registered);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return result;
|
|
179
|
+
}
|
|
180
|
+
function getClassesByVisibility(visibility) {
|
|
181
|
+
const result = /* @__PURE__ */ new Map();
|
|
182
|
+
for (const [name, registered] of getClasses().entries()) {
|
|
183
|
+
const classVisibility = registered.visibility || "public";
|
|
184
|
+
if (classVisibility === visibility) {
|
|
185
|
+
result.set(name, registered);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
return result;
|
|
189
|
+
}
|
|
190
|
+
function getPublicClasses() {
|
|
191
|
+
return getClassesByVisibility("public");
|
|
192
|
+
}
|
|
193
|
+
function getAllClasses() {
|
|
194
|
+
return new Map(getClasses());
|
|
195
|
+
}
|
|
196
|
+
function getClassNames() {
|
|
197
|
+
const names = Array.from(getClasses().values()).map((entry) => entry.name);
|
|
198
|
+
return Array.from(new Set(names));
|
|
199
|
+
}
|
|
200
|
+
function getQualifiedClassNames() {
|
|
201
|
+
const names = [];
|
|
202
|
+
const seenRegistrations = /* @__PURE__ */ new Set();
|
|
203
|
+
const seenNames = /* @__PURE__ */ new Set();
|
|
204
|
+
for (const [key, entry] of getClasses().entries()) {
|
|
205
|
+
if (seenRegistrations.has(entry)) {
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
208
|
+
seenRegistrations.add(entry);
|
|
209
|
+
const lookupName = entry.qualifiedName || key || entry.name;
|
|
210
|
+
if (seenNames.has(lookupName)) {
|
|
211
|
+
continue;
|
|
212
|
+
}
|
|
213
|
+
seenNames.add(lookupName);
|
|
214
|
+
names.push(lookupName);
|
|
215
|
+
}
|
|
216
|
+
return names;
|
|
217
|
+
}
|
|
218
|
+
function hasClass(name) {
|
|
219
|
+
return findClass(name) !== void 0;
|
|
220
|
+
}
|
|
221
|
+
export {
|
|
222
|
+
findClass,
|
|
223
|
+
findClassStrict,
|
|
224
|
+
findClassesByName,
|
|
225
|
+
getAllClasses,
|
|
226
|
+
getCanonicalClassName,
|
|
227
|
+
getClass,
|
|
228
|
+
getClassByConstructor,
|
|
229
|
+
getClassByQualifiedName,
|
|
230
|
+
getClassInPackage,
|
|
231
|
+
getClassNames,
|
|
232
|
+
getClassesByPackage,
|
|
233
|
+
getClassesByVisibility,
|
|
234
|
+
getPublicClasses,
|
|
235
|
+
getQualifiedClassNames,
|
|
236
|
+
hasClass,
|
|
237
|
+
hasClassCaseInsensitive,
|
|
238
|
+
qualifyExtendsName,
|
|
239
|
+
resolveType
|
|
240
|
+
};
|
|
241
|
+
//# sourceMappingURL=name-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"name-resolver.js","sources":["../../src/registry/name-resolver.ts"],"sourcesContent":["/**\n * Name resolution module for the SMRT ObjectRegistry.\n *\n * Handles class lookup, disambiguation, and qualified name resolution.\n * All functions operate on the shared globalThis state.\n *\n * Release B (#1133): classNameMap is gone — the eagerly-maintained\n * lowercase-simple-name → qualified-key[] index was removed in favor of\n * on-demand iteration over the `classes` Map. Production SMRT apps carry\n * a few hundred classes at most, so the linear scan is negligible and\n * removes an entire class of cache-sync bugs (#584, #847, #951).\n *\n * Extracted from registry.ts as part of issue #1006.\n * @see https://github.com/happyvertical/smrt/issues/1006\n * @see https://github.com/happyvertical/smrt/issues/1133\n */\n\nimport { ConfigurationError } from '../errors';\nimport type { QualifiedClassName, SmrtVisibility } from '../scanner/types.js';\nimport {\n createQualifiedName,\n isQualifiedName,\n parseQualifiedName,\n} from '../utils/qualified-names.js';\nimport { getClasses, getConstructorIndex, verboseLog } from './shared-state';\nimport type { RegisteredClass, SmrtObjectConstructor } from './types';\n\n// ── Simple-name iteration (replaces classNameMap reads) ─────────────\n\n/**\n * Return every registry key whose registered class has the given simple\n * name (case-insensitive). Replaces the old eagerly-maintained\n * `__smrtRegistryClassNameMap` lookup: we iterate `classes` instead.\n *\n * Cost is O(n) over the classes map; production SMRT apps hold low-\n * hundreds of entries so this is trivially fast. Returned keys preserve\n * insertion order, which makes the \"first match wins\" behavior of the old\n * map-based lookup deterministic in the same way.\n *\n * De-duplicates by RegisteredClass object identity so a class registered\n * under both a simple key and a promoted qualified key (a transitional\n * state during manifest merge) counts as a single entry — matching the\n * old classNameMap's behavior of storing each canonical qualified key once.\n * When that happens, the qualified key wins over the simple one.\n */\nfunction registryKeysBySimpleName(simpleName: string): string[] {\n const lower = simpleName.toLowerCase();\n const classes = getClasses();\n const seen = new Map<unknown, string>();\n\n for (const [key, value] of classes.entries()) {\n if (value.name?.toLowerCase() !== lower) continue;\n\n const existing = seen.get(value);\n if (!existing) {\n seen.set(value, key);\n continue;\n }\n\n // Two keys for the same object: prefer the qualified form.\n if (key.includes(':') && !existing.includes(':')) {\n seen.set(value, key);\n }\n }\n\n return [...seen.values()];\n}\n\n// ── Lookup functions ────────────────────────────────────────\n\n/**\n * Check if a class is already registered (case-insensitive).\n * Returns the canonical name if found, undefined otherwise. Returns\n * undefined if the simple name is ambiguous across multiple packages.\n */\nexport function getCanonicalClassName(name: string): string | undefined {\n const keys = registryKeysBySimpleName(name);\n if (keys.length === 1) return keys[0];\n // Zero matches, or ambiguous with >1 entries\n return undefined;\n}\n\n/**\n * Check if a class exists by name (case-insensitive).\n */\nexport function hasClassCaseInsensitive(name: string): boolean {\n const lower = name.toLowerCase();\n for (const value of getClasses().values()) {\n if (value.name?.toLowerCase() === lower) return true;\n }\n return false;\n}\n\n/**\n * Helper for class lookup with qualified name support.\n *\n * Lookup priority:\n * 1. Direct hit on classes map (works for qualified names as keys)\n * 2. If input contains ':', prefer direct qualified lookup, then fall back\n * to an exact/simple registration when runtime source imports registered\n * the class before package-qualified promotion happened\n * 3. Simple-name iteration by lowercase\n * - Unambiguous (1 match) → return it\n * - Ambiguous (>1 matches) → log warning, return first\n */\nexport function findClass(name: string): RegisteredClass | undefined {\n const classes = getClasses();\n\n // 1. Direct hit on classes map (fast path, works for qualified keys)\n const registered = classes.get(name);\n if (registered) {\n return registered;\n }\n\n // 2. Qualified lookup fallback for source-registered classes.\n // In workspace/dev mode a package can be imported from source before a\n // manifest-promoted qualified key exists. If we already have exactly the\n // requested package or a single unqualified registration for this class\n // name, treat it as the same class instead of forcing node_modules manifest\n // discovery.\n if (isQualifiedName(name)) {\n const { packageName, className } = parseQualifiedName(name);\n const keys = registryKeysBySimpleName(className);\n\n if (keys.length > 0) {\n const exactPackageMatch = keys\n .map((key) => classes.get(key))\n .find((candidate) => candidate?.packageName === packageName);\n\n if (exactPackageMatch) {\n return exactPackageMatch;\n }\n\n if (keys.length === 1) {\n const fallback = classes.get(keys[0]);\n if (fallback && !fallback.packageName) {\n return fallback;\n }\n }\n }\n\n return undefined;\n }\n\n // 3. Simple-name lookup\n const keys = registryKeysBySimpleName(name);\n if (keys.length > 0) {\n if (keys.length === 1) {\n return classes.get(keys[0]);\n }\n // Ambiguous — multiple packages define this class name\n // Return first match but log a warning (use resolveType() for strict behavior)\n verboseLog(\n `[registry] findClass(\"${name}\") is ambiguous — ${keys.length} matches. ` +\n `Use qualified name (e.g., ${keys[0]}) for precision.`,\n );\n return classes.get(keys[0]);\n }\n\n return undefined;\n}\n\n/**\n * Strict class lookup with package-aware disambiguation.\n *\n * Unlike `findClass()` which silently returns the first match when a simple\n * name is ambiguous, this method throws a `ConfigurationError` — making it\n * safe for inheritance-critical paths.\n *\n * @throws {ConfigurationError} When simple name is ambiguous and no package context resolves it\n * @see https://github.com/happyvertical/smrt/issues/1005\n */\nexport function findClassStrict(\n name: string,\n fromPackage?: string,\n): RegisteredClass | undefined {\n const classes = getClasses();\n\n // 1. Direct hit on classes map (fast path, works for qualified keys)\n const registered = classes.get(name);\n if (registered) {\n return registered;\n }\n\n // 2. If input is a qualified name, no fallback — it's not found\n if (isQualifiedName(name)) {\n return undefined;\n }\n\n // 3. If fromPackage provided, try constructing qualified name for direct lookup\n if (fromPackage) {\n const qualifiedAttempt = createQualifiedName(fromPackage, name);\n const byQualified = classes.get(qualifiedAttempt);\n if (byQualified) {\n return byQualified;\n }\n }\n\n // 4. Simple-name lookup\n const keys = registryKeysBySimpleName(name);\n if (keys.length > 0) {\n if (keys.length === 1) {\n return classes.get(keys[0]);\n }\n // Ambiguous — multiple packages define this class name\n // In strict mode, throw instead of silently returning first match\n throw new ConfigurationError(\n `Ambiguous class name \"${name}\" — found in ${keys.length} packages: ` +\n `${keys.join(', ')}. ` +\n `Use a qualified name (e.g., ${keys[0]}) to disambiguate.`,\n 'CONFIG_AMBIGUOUS_CLASS',\n { className: name, candidates: keys },\n );\n }\n\n return undefined;\n}\n\n/**\n * Qualify an `extends` value with the parent class's package name.\n *\n * @see https://github.com/happyvertical/smrt/issues/1004\n */\nexport function qualifyExtendsName(\n extendsValue: string,\n currentPackage: string,\n): string {\n const classes = getClasses();\n\n // Already qualified → pass through\n if (isQualifiedName(extendsValue)) {\n return extendsValue;\n }\n\n // Skip framework base classes (never registered with qualified names)\n if (\n extendsValue === 'SmrtObject' ||\n extendsValue === 'SmrtClass' ||\n extendsValue === 'SmrtCollection'\n ) {\n return extendsValue;\n }\n\n // Try same-package first (common case: child and parent in same package)\n const samePackageQualified = createQualifiedName(\n currentPackage,\n extendsValue,\n );\n if (classes.has(samePackageQualified)) {\n return samePackageQualified;\n }\n\n // Try to find the parent in any registered package\n const keys = registryKeysBySimpleName(extendsValue);\n if (keys.length === 1) {\n return keys[0];\n }\n\n // Fallback: return unmodified (backward compat)\n return extendsValue;\n}\n\n// ── Public lookup functions ─────────────────────────────────\n\n/**\n * Get a registered class by name (case-insensitive).\n */\nexport function getClass(name: string): RegisteredClass | undefined {\n return findClass(name);\n}\n\n/**\n * Get a registered class by its constructor reference (O(1) WeakMap lookup).\n */\nexport function getClassByConstructor(\n ctor: SmrtObjectConstructor,\n): RegisteredClass | undefined {\n const registeredName = getConstructorIndex().get(ctor);\n if (registeredName) {\n return getClasses().get(registeredName);\n }\n return undefined;\n}\n\n/**\n * Get a registered class by its qualified name (O(1) direct lookup).\n */\nexport function getClassByQualifiedName(\n qualifiedName: string,\n): RegisteredClass | undefined {\n return getClasses().get(qualifiedName);\n}\n\n/**\n * Get a registered class by package name and class name.\n */\nexport function getClassInPackage(\n packageName: string,\n className: string,\n): RegisteredClass | undefined {\n const qualifiedName = createQualifiedName(packageName, className);\n return getClasses().get(qualifiedName);\n}\n\n/**\n * Find all registered classes with a given simple class name.\n */\nexport function findClassesByName(className: string): RegisteredClass[] {\n const matches: RegisteredClass[] = [];\n const lowerName = className.toLowerCase();\n\n for (const registered of getClasses().values()) {\n if (registered.name.toLowerCase() === lowerName) {\n matches.push(registered);\n }\n }\n\n return matches;\n}\n\n/**\n * Resolve a short class name to its qualified name.\n * @throws {Error} If no class or ambiguous classes registered\n */\nexport function resolveType(shortName: string): QualifiedClassName {\n // If already qualified, validate and return\n if (shortName.includes(':') && shortName.startsWith('@')) {\n const registered = getClassByQualifiedName(shortName as QualifiedClassName);\n if (!registered) {\n throw new Error(\n `Class \"${shortName}\" is not registered. ` +\n `Make sure the package is installed and the class is decorated with @smrt().`,\n );\n }\n return shortName as QualifiedClassName;\n }\n\n // Find all classes with this short name\n const matches = findClassesByName(shortName);\n\n if (matches.length === 0) {\n throw new Error(\n `Class \"${shortName}\" is not registered. ` +\n `Make sure the package is installed and the class is decorated with @smrt().`,\n );\n }\n\n if (matches.length > 1) {\n const packageList = matches.map((m) => ` - ${m.qualifiedName}`).join('\\n');\n throw new Error(\n `\"${shortName}\" is ambiguous. Found in multiple packages:\\n${packageList}\\n` +\n `Use the fully qualified name instead.`,\n );\n }\n\n return matches[0].qualifiedName as QualifiedClassName;\n}\n\n/**\n * Get all registered classes from a specific package.\n */\nexport function getClassesByPackage(\n packageName: string,\n): Map<string, RegisteredClass> {\n const result = new Map<string, RegisteredClass>();\n\n for (const [name, registered] of getClasses().entries()) {\n if (registered.packageName === packageName) {\n result.set(name, registered);\n }\n }\n\n return result;\n}\n\n/**\n * Get all registered classes with a specific visibility level.\n */\nexport function getClassesByVisibility(\n visibility: SmrtVisibility,\n): Map<string, RegisteredClass> {\n const result = new Map<string, RegisteredClass>();\n\n for (const [name, registered] of getClasses().entries()) {\n const classVisibility = registered.visibility || 'public';\n if (classVisibility === visibility) {\n result.set(name, registered);\n }\n }\n\n return result;\n}\n\n/**\n * Get all public registered classes.\n */\nexport function getPublicClasses(): Map<string, RegisteredClass> {\n return getClassesByVisibility('public');\n}\n\n/**\n * Get all registered classes.\n */\nexport function getAllClasses(): Map<string, RegisteredClass> {\n return new Map(getClasses());\n}\n\n/**\n * Get class names (simple names, deduplicated).\n */\nexport function getClassNames(): string[] {\n const names = Array.from(getClasses().values()).map((entry) => entry.name);\n return Array.from(new Set(names));\n}\n\n/**\n * Get lookup names for every registered class without collapsing\n * cross-package simple-name collisions.\n *\n * Prefer each registration's qualified name when available, fall back to the\n * registry key, then to the simple class name for package-less registrations.\n * De-duplicates aliases that point to the same RegisteredClass object while\n * preserving distinct packages that intentionally share a simple class name.\n */\nexport function getQualifiedClassNames(): string[] {\n const names: string[] = [];\n const seenRegistrations = new Set<RegisteredClass>();\n const seenNames = new Set<string>();\n\n for (const [key, entry] of getClasses().entries()) {\n if (seenRegistrations.has(entry)) {\n continue;\n }\n seenRegistrations.add(entry);\n\n const lookupName = entry.qualifiedName || key || entry.name;\n if (seenNames.has(lookupName)) {\n continue;\n }\n\n seenNames.add(lookupName);\n names.push(lookupName);\n }\n\n return names;\n}\n\n/**\n * Check if a class is registered (case-insensitive).\n */\nexport function hasClass(name: string): boolean {\n return findClass(name) !== undefined;\n}\n"],"names":["keys"],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { RelationshipMetadata } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Build dependency graph from foreignKey relationships.
|
|
4
|
+
*
|
|
5
|
+
* Returns a map where keys are class names and values are arrays
|
|
6
|
+
* of class names that the key depends on (via foreignKey fields).
|
|
7
|
+
*/
|
|
8
|
+
export declare function getDependencyGraph(): Map<string, string[]>;
|
|
9
|
+
/**
|
|
10
|
+
* Build comprehensive relationship map from all field types.
|
|
11
|
+
*
|
|
12
|
+
* Returns a map containing all relationships (foreignKey, oneToMany, manyToMany)
|
|
13
|
+
* discovered in registered classes.
|
|
14
|
+
*/
|
|
15
|
+
export declare function getRelationshipMap(): Map<string, RelationshipMetadata[]>;
|
|
16
|
+
//# sourceMappingURL=relationship-graph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relationship-graph.d.ts","sourceRoot":"","sources":["../../src/registry/relationship-graph.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAEpD;;;;;GAKG;AACH,wBAAgB,kBAAkB,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAgC1D;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,IAAI,GAAG,CAAC,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAgExE"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { findClass } from "./name-resolver.js";
|
|
2
|
+
import { getClasses } from "./shared-state.js";
|
|
3
|
+
function getDependencyGraph() {
|
|
4
|
+
const classes = getClasses();
|
|
5
|
+
const graph = /* @__PURE__ */ new Map();
|
|
6
|
+
for (const [_key, entry] of classes) {
|
|
7
|
+
graph.set(entry.name || _key, []);
|
|
8
|
+
}
|
|
9
|
+
for (const [_key, registered] of classes) {
|
|
10
|
+
const simpleName = registered.name || _key;
|
|
11
|
+
const dependencies = [];
|
|
12
|
+
for (const [_fieldName, field] of registered.fields) {
|
|
13
|
+
if (field.type === "foreignKey" && field.related) {
|
|
14
|
+
const relatedClass = field.related;
|
|
15
|
+
if (relatedClass !== simpleName && findClass(relatedClass) !== void 0) {
|
|
16
|
+
dependencies.push(relatedClass);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
graph.set(simpleName, dependencies);
|
|
21
|
+
}
|
|
22
|
+
return graph;
|
|
23
|
+
}
|
|
24
|
+
function getRelationshipMap() {
|
|
25
|
+
const classes = getClasses();
|
|
26
|
+
const relationshipMap = /* @__PURE__ */ new Map();
|
|
27
|
+
for (const [_key, entry] of classes) {
|
|
28
|
+
relationshipMap.set(entry.name || _key, []);
|
|
29
|
+
}
|
|
30
|
+
for (const [_key, registered] of classes) {
|
|
31
|
+
const simpleName = registered.name || _key;
|
|
32
|
+
const relationships = [];
|
|
33
|
+
for (const [fieldName, field] of registered.fields) {
|
|
34
|
+
if (field.type === "foreignKey" && field.related) {
|
|
35
|
+
relationships.push({
|
|
36
|
+
sourceClass: simpleName,
|
|
37
|
+
fieldName,
|
|
38
|
+
targetClass: field.related,
|
|
39
|
+
type: "foreignKey",
|
|
40
|
+
options: field._meta
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
if (field.type === "crossPackageRef" && field.related) {
|
|
44
|
+
relationships.push({
|
|
45
|
+
sourceClass: simpleName,
|
|
46
|
+
fieldName,
|
|
47
|
+
targetClass: field.related,
|
|
48
|
+
type: "crossPackageRef",
|
|
49
|
+
options: field._meta
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
if (field.type === "oneToMany" && field.related) {
|
|
53
|
+
relationships.push({
|
|
54
|
+
sourceClass: simpleName,
|
|
55
|
+
fieldName,
|
|
56
|
+
targetClass: field.related,
|
|
57
|
+
type: "oneToMany",
|
|
58
|
+
options: field._meta
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
if (field.type === "manyToMany" && field.related) {
|
|
62
|
+
relationships.push({
|
|
63
|
+
sourceClass: simpleName,
|
|
64
|
+
fieldName,
|
|
65
|
+
targetClass: field.related,
|
|
66
|
+
type: "manyToMany",
|
|
67
|
+
options: field._meta
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
relationshipMap.set(simpleName, relationships);
|
|
72
|
+
}
|
|
73
|
+
return relationshipMap;
|
|
74
|
+
}
|
|
75
|
+
export {
|
|
76
|
+
getDependencyGraph,
|
|
77
|
+
getRelationshipMap
|
|
78
|
+
};
|
|
79
|
+
//# sourceMappingURL=relationship-graph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relationship-graph.js","sources":["../../src/registry/relationship-graph.ts"],"sourcesContent":["/**\n * Relationship graph and dependency resolution module for the SMRT ObjectRegistry.\n *\n * Builds relationship maps and dependency graphs from registered class fields.\n *\n * Extracted from registry.ts as part of issue #1006.\n * @see https://github.com/happyvertical/smrt/issues/1006\n */\n\nimport { findClass } from './name-resolver';\nimport { getClasses } from './shared-state';\nimport type { RelationshipMetadata } from './types';\n\n/**\n * Build dependency graph from foreignKey relationships.\n *\n * Returns a map where keys are class names and values are arrays\n * of class names that the key depends on (via foreignKey fields).\n */\nexport function getDependencyGraph(): Map<string, string[]> {\n const classes = getClasses();\n const graph = new Map<string, string[]>();\n\n // Initialize graph with all registered classes\n for (const [_key, entry] of classes) {\n graph.set(entry.name || _key, []);\n }\n\n // Scan all fields for foreignKey relationships\n for (const [_key, registered] of classes) {\n const simpleName = registered.name || _key;\n const dependencies: string[] = [];\n\n for (const [_fieldName, field] of registered.fields) {\n if (field.type === 'foreignKey' && field.related) {\n const relatedClass = field.related;\n // Skip self-references (table can reference itself after creation)\n // Only add if the related class is registered and not self\n if (\n relatedClass !== simpleName &&\n findClass(relatedClass) !== undefined\n ) {\n dependencies.push(relatedClass);\n }\n }\n }\n\n graph.set(simpleName, dependencies);\n }\n\n return graph;\n}\n\n/**\n * Build comprehensive relationship map from all field types.\n *\n * Returns a map containing all relationships (foreignKey, oneToMany, manyToMany)\n * discovered in registered classes.\n */\nexport function getRelationshipMap(): Map<string, RelationshipMetadata[]> {\n const classes = getClasses();\n const relationshipMap = new Map<string, RelationshipMetadata[]>();\n\n // Initialize map with all registered classes\n for (const [_key, entry] of classes) {\n relationshipMap.set(entry.name || _key, []);\n }\n\n // Scan all fields for relationship types\n for (const [_key, registered] of classes) {\n const simpleName = registered.name || _key;\n const relationships: RelationshipMetadata[] = [];\n\n for (const [fieldName, field] of registered.fields) {\n // Check for foreignKey relationships\n if (field.type === 'foreignKey' && field.related) {\n relationships.push({\n sourceClass: simpleName,\n fieldName,\n targetClass: field.related,\n type: 'foreignKey',\n options: field._meta,\n });\n }\n\n // Check for crossPackageRef relationships (cross-package, no DDL FK)\n if (field.type === 'crossPackageRef' && field.related) {\n relationships.push({\n sourceClass: simpleName,\n fieldName,\n targetClass: field.related,\n type: 'crossPackageRef',\n options: field._meta,\n });\n }\n\n // Check for oneToMany relationships\n if (field.type === 'oneToMany' && field.related) {\n relationships.push({\n sourceClass: simpleName,\n fieldName,\n targetClass: field.related,\n type: 'oneToMany',\n options: field._meta,\n });\n }\n\n // Check for manyToMany relationships\n if (field.type === 'manyToMany' && field.related) {\n relationships.push({\n sourceClass: simpleName,\n fieldName,\n targetClass: field.related,\n type: 'manyToMany',\n options: field._meta,\n });\n }\n }\n\n relationshipMap.set(simpleName, relationships);\n }\n\n return relationshipMap;\n}\n"],"names":[],"mappings":";;AAmBO,SAAS,qBAA4C;AAC1D,QAAM,UAAU,WAAA;AAChB,QAAM,4BAAY,IAAA;AAGlB,aAAW,CAAC,MAAM,KAAK,KAAK,SAAS;AACnC,UAAM,IAAI,MAAM,QAAQ,MAAM,CAAA,CAAE;AAAA,EAClC;AAGA,aAAW,CAAC,MAAM,UAAU,KAAK,SAAS;AACxC,UAAM,aAAa,WAAW,QAAQ;AACtC,UAAM,eAAyB,CAAA;AAE/B,eAAW,CAAC,YAAY,KAAK,KAAK,WAAW,QAAQ;AACnD,UAAI,MAAM,SAAS,gBAAgB,MAAM,SAAS;AAChD,cAAM,eAAe,MAAM;AAG3B,YACE,iBAAiB,cACjB,UAAU,YAAY,MAAM,QAC5B;AACA,uBAAa,KAAK,YAAY;AAAA,QAChC;AAAA,MACF;AAAA,IACF;AAEA,UAAM,IAAI,YAAY,YAAY;AAAA,EACpC;AAEA,SAAO;AACT;AAQO,SAAS,qBAA0D;AACxE,QAAM,UAAU,WAAA;AAChB,QAAM,sCAAsB,IAAA;AAG5B,aAAW,CAAC,MAAM,KAAK,KAAK,SAAS;AACnC,oBAAgB,IAAI,MAAM,QAAQ,MAAM,CAAA,CAAE;AAAA,EAC5C;AAGA,aAAW,CAAC,MAAM,UAAU,KAAK,SAAS;AACxC,UAAM,aAAa,WAAW,QAAQ;AACtC,UAAM,gBAAwC,CAAA;AAE9C,eAAW,CAAC,WAAW,KAAK,KAAK,WAAW,QAAQ;AAElD,UAAI,MAAM,SAAS,gBAAgB,MAAM,SAAS;AAChD,sBAAc,KAAK;AAAA,UACjB,aAAa;AAAA,UACb;AAAA,UACA,aAAa,MAAM;AAAA,UACnB,MAAM;AAAA,UACN,SAAS,MAAM;AAAA,QAAA,CAChB;AAAA,MACH;AAGA,UAAI,MAAM,SAAS,qBAAqB,MAAM,SAAS;AACrD,sBAAc,KAAK;AAAA,UACjB,aAAa;AAAA,UACb;AAAA,UACA,aAAa,MAAM;AAAA,UACnB,MAAM;AAAA,UACN,SAAS,MAAM;AAAA,QAAA,CAChB;AAAA,MACH;AAGA,UAAI,MAAM,SAAS,eAAe,MAAM,SAAS;AAC/C,sBAAc,KAAK;AAAA,UACjB,aAAa;AAAA,UACb;AAAA,UACA,aAAa,MAAM;AAAA,UACnB,MAAM;AAAA,UACN,SAAS,MAAM;AAAA,QAAA,CAChB;AAAA,MACH;AAGA,UAAI,MAAM,SAAS,gBAAgB,MAAM,SAAS;AAChD,sBAAc,KAAK;AAAA,UACjB,aAAa;AAAA,UACb;AAAA,UACA,aAAa,MAAM;AAAA,UACnB,MAAM;AAAA,UACN,SAAS,MAAM;AAAA,QAAA,CAChB;AAAA,MACH;AAAA,IACF;AAEA,oBAAgB,IAAI,YAAY,aAAa;AAAA,EAC/C;AAEA,SAAO;AACT;"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { FieldDefinition } from '../scanner/types.js';
|
|
2
|
+
import { ColumnDefinition, SchemaDefinition, SQLDataType } from '../schema/types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Get cached schema definition for a registered class
|
|
5
|
+
*
|
|
6
|
+
* @param name - Name of the registered class
|
|
7
|
+
* @returns Schema definition or undefined if not found
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* const schema = getSchema('Product');
|
|
11
|
+
* console.log(schema.tableName); // 'products'
|
|
12
|
+
* console.log(schema.ddl); // 'CREATE TABLE...'
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
export declare function getSchema(name: string): SchemaDefinition | undefined;
|
|
16
|
+
/**
|
|
17
|
+
* Get SQL DDL statement for a registered class
|
|
18
|
+
*
|
|
19
|
+
* @param name - Name of the registered class
|
|
20
|
+
* @returns SQL DDL statement or undefined if not found
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* const ddl = ObjectRegistry.getSchemaDDL('Product');
|
|
24
|
+
* await db.query(ddl);
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export declare function getSchemaDDL(name: string): string | undefined;
|
|
28
|
+
/**
|
|
29
|
+
* Get table name for a registered class
|
|
30
|
+
*
|
|
31
|
+
* @param name - Name of the registered class
|
|
32
|
+
* @returns Table name or undefined if not found
|
|
33
|
+
* @example
|
|
34
|
+
* ```typescript
|
|
35
|
+
* const tableName = getTableName('Product');
|
|
36
|
+
* console.log(tableName); // 'products'
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export declare function getTableName(name: string): string | undefined;
|
|
40
|
+
/**
|
|
41
|
+
* Get all pre-generated schemas for explicit adapter bootstrap paths.
|
|
42
|
+
*
|
|
43
|
+
* Returns schemas in SDK SchemaProvider format for all registered classes.
|
|
44
|
+
* Tooling and test helpers can pass these to `getDatabase()` when they want
|
|
45
|
+
* to bootstrap schema before runtime. Core runtime no longer does this
|
|
46
|
+
* implicitly.
|
|
47
|
+
*
|
|
48
|
+
* @returns Record of table names to schema definitions
|
|
49
|
+
* @example
|
|
50
|
+
* ```typescript
|
|
51
|
+
* const schemas = ObjectRegistry.getAllSchemas();
|
|
52
|
+
* const db = await getDatabase({ type: 'json', url: './data', schemas });
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
export declare function getAllSchemas(): Record<string, {
|
|
56
|
+
tableName: string;
|
|
57
|
+
ddl: string;
|
|
58
|
+
indexes?: string[];
|
|
59
|
+
}>;
|
|
60
|
+
/**
|
|
61
|
+
* Get all registered schemas as SchemaDefinition objects
|
|
62
|
+
*
|
|
63
|
+
* Similar to getAllSchemas(), but returns SchemaDefinition format suitable
|
|
64
|
+
* for use with SchemaComparer (migrations/differ.ts).
|
|
65
|
+
*
|
|
66
|
+
* Key difference: Indexes are kept as IndexDefinition objects instead of
|
|
67
|
+
* being converted to SQL strings.
|
|
68
|
+
*
|
|
69
|
+
* @returns Map of tableName to SchemaDefinition
|
|
70
|
+
*/
|
|
71
|
+
export declare function getAllSchemasAsDefinitions(): Record<string, SchemaDefinition>;
|
|
72
|
+
/**
|
|
73
|
+
* Generate DDL CREATE TABLE statement from columns
|
|
74
|
+
*
|
|
75
|
+
* Used internally by getAllSchemas() to regenerate DDL after merging
|
|
76
|
+
* columns from multiple STI subtypes that share the same table.
|
|
77
|
+
*
|
|
78
|
+
* @param tableName - Name of the table
|
|
79
|
+
* @param columns - Column definitions
|
|
80
|
+
* @returns DDL CREATE TABLE statement
|
|
81
|
+
*/
|
|
82
|
+
export declare function generateDDLFromColumns(tableName: string, columns: Record<string, ColumnDefinition>, isSTI?: boolean): string;
|
|
83
|
+
/**
|
|
84
|
+
* Format default value for SQL DDL.
|
|
85
|
+
*
|
|
86
|
+
* Thin wrapper over the shared, injection-safe formatter
|
|
87
|
+
* (`schema/sql-identifiers.ts`) so the registry schema-builder uses the same
|
|
88
|
+
* rules as the DDL strategies and schema generator: an allowlist of SQL
|
|
89
|
+
* keyword/function defaults (not "contains `(`"), type-driven literal quoting,
|
|
90
|
+
* and no folding of a literal string `"null"` into the SQL NULL keyword.
|
|
91
|
+
*
|
|
92
|
+
* @param value - Default value
|
|
93
|
+
* @param type - Column SQL type
|
|
94
|
+
* @returns Formatted SQL default value
|
|
95
|
+
*/
|
|
96
|
+
export declare function formatDefaultValue(value: any, type: string): string;
|
|
97
|
+
/**
|
|
98
|
+
* Convert a Map of field definitions to column definitions
|
|
99
|
+
*
|
|
100
|
+
* Used by getAllSchemas() to generate columns from fields when a class
|
|
101
|
+
* has no pre-generated schema (e.g., STI subclasses registered from manifest).
|
|
102
|
+
*
|
|
103
|
+
* @param fields - Map of field name to field definition
|
|
104
|
+
* @returns Record of column name to column definition
|
|
105
|
+
* @private
|
|
106
|
+
*/
|
|
107
|
+
export declare function fieldsToColumns(fields: Map<string, FieldDefinition>): Record<string, ColumnDefinition>;
|
|
108
|
+
/**
|
|
109
|
+
* Map field type to SQL data type
|
|
110
|
+
* @private
|
|
111
|
+
*/
|
|
112
|
+
export declare function mapFieldTypeToSQL(fieldType: FieldDefinition['type']): SQLDataType;
|
|
113
|
+
//# sourceMappingURL=schema-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-builder.d.ts","sourceRoot":"","sources":["../../src/registry/schema-builder.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAK3D,OAAO,KAAK,EACV,gBAAgB,EAEhB,gBAAgB,EAChB,WAAW,EACZ,MAAM,oBAAoB,CAAC;AAuI5B;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAIpE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE7D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAkB7D;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,IAAI,MAAM,CACrC,MAAM,EACN;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CACvD,CAwMA;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAgK7E;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,EACzC,KAAK,UAAQ,GACZ,MAAM,CAqDR;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,GACnC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CA+ElC;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,eAAe,CAAC,MAAM,CAAC,GACjC,WAAW,CAqBb"}
|