@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,124 @@
|
|
|
1
|
+
import { Signal, SignalAdapter } from '@happyvertical/smrt-types';
|
|
2
|
+
/**
|
|
3
|
+
* Signal filter function
|
|
4
|
+
*
|
|
5
|
+
* @param signal - Signal to evaluate
|
|
6
|
+
* @returns True if signal should be sent to subscriber
|
|
7
|
+
*/
|
|
8
|
+
export type SignalFilter = (signal: Signal) => boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Signal subscriber callback
|
|
11
|
+
*/
|
|
12
|
+
export type SignalSubscriber = (signal: Signal) => void | Promise<void>;
|
|
13
|
+
/**
|
|
14
|
+
* Subscription configuration
|
|
15
|
+
*/
|
|
16
|
+
export interface Subscription {
|
|
17
|
+
/** Unique subscription ID */
|
|
18
|
+
id: string;
|
|
19
|
+
/** Callback to invoke with signals */
|
|
20
|
+
callback: SignalSubscriber;
|
|
21
|
+
/** Optional filter to apply before sending */
|
|
22
|
+
filter?: SignalFilter;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Pub/Sub Adapter - Broadcasts signals to subscribers
|
|
26
|
+
*
|
|
27
|
+
* Enables real-time updates for UI clients via WebSocket/SSE or
|
|
28
|
+
* internal event-driven architectures via callbacks.
|
|
29
|
+
*
|
|
30
|
+
* Features:
|
|
31
|
+
* - Multiple subscribers with independent filters
|
|
32
|
+
* - Fire-and-forget delivery (errors don't block other subscribers)
|
|
33
|
+
* - Flexible filtering (by class, method, type, etc.)
|
|
34
|
+
* - Subscription management (add, remove, list)
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```typescript
|
|
38
|
+
* const pubsub = new PubSubAdapter();
|
|
39
|
+
* signalBus.register(pubsub);
|
|
40
|
+
*
|
|
41
|
+
* // Subscribe to all error signals
|
|
42
|
+
* const subId = pubsub.subscribe(
|
|
43
|
+
* (signal) => console.error('Error:', signal),
|
|
44
|
+
* (signal) => signal.type === 'error'
|
|
45
|
+
* );
|
|
46
|
+
*
|
|
47
|
+
* // Later, unsubscribe
|
|
48
|
+
* pubsub.unsubscribe(subId);
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
export declare class PubSubAdapter implements SignalAdapter {
|
|
52
|
+
private subscriptions;
|
|
53
|
+
private nextSubscriptionId;
|
|
54
|
+
/**
|
|
55
|
+
* Handle a signal and broadcast to subscribers
|
|
56
|
+
*
|
|
57
|
+
* @param signal - Signal to broadcast
|
|
58
|
+
*/
|
|
59
|
+
handle(signal: Signal): Promise<void>;
|
|
60
|
+
/**
|
|
61
|
+
* Subscribe to signals
|
|
62
|
+
*
|
|
63
|
+
* @param callback - Function to call with matching signals
|
|
64
|
+
* @param filter - Optional filter to apply before sending
|
|
65
|
+
* @returns Subscription ID for later unsubscribe
|
|
66
|
+
*/
|
|
67
|
+
subscribe(callback: SignalSubscriber, filter?: SignalFilter): string;
|
|
68
|
+
/**
|
|
69
|
+
* Unsubscribe from signals
|
|
70
|
+
*
|
|
71
|
+
* @param subscriptionId - ID returned from subscribe()
|
|
72
|
+
* @returns True if subscription was found and removed
|
|
73
|
+
*/
|
|
74
|
+
unsubscribe(subscriptionId: string): boolean;
|
|
75
|
+
/**
|
|
76
|
+
* Get count of active subscriptions
|
|
77
|
+
*
|
|
78
|
+
* @returns Number of active subscribers
|
|
79
|
+
*/
|
|
80
|
+
get subscriberCount(): number;
|
|
81
|
+
/**
|
|
82
|
+
* Clear all subscriptions
|
|
83
|
+
*
|
|
84
|
+
* Removes all subscribers. Useful for cleanup or testing.
|
|
85
|
+
*/
|
|
86
|
+
clearSubscriptions(): void;
|
|
87
|
+
/**
|
|
88
|
+
* Create filter for specific class
|
|
89
|
+
*
|
|
90
|
+
* @param className - Class name to match
|
|
91
|
+
* @returns Filter function
|
|
92
|
+
*/
|
|
93
|
+
static filterByClass(className: string): SignalFilter;
|
|
94
|
+
/**
|
|
95
|
+
* Create filter for specific method
|
|
96
|
+
*
|
|
97
|
+
* @param methodName - Method name to match
|
|
98
|
+
* @returns Filter function
|
|
99
|
+
*/
|
|
100
|
+
static filterByMethod(methodName: string): SignalFilter;
|
|
101
|
+
/**
|
|
102
|
+
* Create filter for specific signal type
|
|
103
|
+
*
|
|
104
|
+
* @param type - Signal type to match
|
|
105
|
+
* @returns Filter function
|
|
106
|
+
*/
|
|
107
|
+
static filterByType(type: 'start' | 'step' | 'end' | 'error'): SignalFilter;
|
|
108
|
+
/**
|
|
109
|
+
* Create filter for specific class and method
|
|
110
|
+
*
|
|
111
|
+
* @param className - Class name to match
|
|
112
|
+
* @param methodName - Method name to match
|
|
113
|
+
* @returns Filter function
|
|
114
|
+
*/
|
|
115
|
+
static filterByClassAndMethod(className: string, methodName: string): SignalFilter;
|
|
116
|
+
/**
|
|
117
|
+
* Combine multiple filters with AND logic
|
|
118
|
+
*
|
|
119
|
+
* @param filters - Filters to combine
|
|
120
|
+
* @returns Combined filter function
|
|
121
|
+
*/
|
|
122
|
+
static combineFilters(...filters: SignalFilter[]): SignalFilter;
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=pubsub.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pubsub.d.ts","sourceRoot":"","sources":["../../src/adapters/pubsub.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAIvE;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;AAEvD;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAExE;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,6BAA6B;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,sCAAsC;IACtC,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,8CAA8C;IAC9C,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,aAAc,YAAW,aAAa;IACjD,OAAO,CAAC,aAAa,CAAwC;IAC7D,OAAO,CAAC,kBAAkB,CAAK;IAE/B;;;;OAIG;IACG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4B3C;;;;;;OAMG;IACH,SAAS,CAAC,QAAQ,EAAE,gBAAgB,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM;IAYpE;;;;;OAKG;IACH,WAAW,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO;IAI5C;;;;OAIG;IACH,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED;;;;OAIG;IACH,kBAAkB,IAAI,IAAI;IAI1B;;;;;OAKG;IACH,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY;IAIrD;;;;;OAKG;IACH,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,YAAY;IAIvD;;;;;OAKG;IACH,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,YAAY;IAI3E;;;;;;OAMG;IACH,MAAM,CAAC,sBAAsB,CAC3B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,YAAY;IAKf;;;;;OAKG;IACH,MAAM,CAAC,cAAc,CAAC,GAAG,OAAO,EAAE,YAAY,EAAE,GAAG,YAAY;CAGhE"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { createLogger } from "@happyvertical/logger";
|
|
2
|
+
const logger = createLogger({ level: "info" });
|
|
3
|
+
class PubSubAdapter {
|
|
4
|
+
subscriptions = /* @__PURE__ */ new Map();
|
|
5
|
+
nextSubscriptionId = 1;
|
|
6
|
+
/**
|
|
7
|
+
* Handle a signal and broadcast to subscribers
|
|
8
|
+
*
|
|
9
|
+
* @param signal - Signal to broadcast
|
|
10
|
+
*/
|
|
11
|
+
async handle(signal) {
|
|
12
|
+
const promises = [];
|
|
13
|
+
for (const subscription of this.subscriptions.values()) {
|
|
14
|
+
if (subscription.filter && !subscription.filter(signal)) {
|
|
15
|
+
continue;
|
|
16
|
+
}
|
|
17
|
+
const promise = (async () => {
|
|
18
|
+
try {
|
|
19
|
+
await subscription.callback(signal);
|
|
20
|
+
} catch (error) {
|
|
21
|
+
logger.error(`PubSubAdapter: Subscriber ${subscription.id} error`, {
|
|
22
|
+
error
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
})();
|
|
26
|
+
promises.push(promise);
|
|
27
|
+
}
|
|
28
|
+
await Promise.allSettled(promises);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Subscribe to signals
|
|
32
|
+
*
|
|
33
|
+
* @param callback - Function to call with matching signals
|
|
34
|
+
* @param filter - Optional filter to apply before sending
|
|
35
|
+
* @returns Subscription ID for later unsubscribe
|
|
36
|
+
*/
|
|
37
|
+
subscribe(callback, filter) {
|
|
38
|
+
const id = `sub-${this.nextSubscriptionId++}`;
|
|
39
|
+
this.subscriptions.set(id, {
|
|
40
|
+
id,
|
|
41
|
+
callback,
|
|
42
|
+
filter
|
|
43
|
+
});
|
|
44
|
+
return id;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Unsubscribe from signals
|
|
48
|
+
*
|
|
49
|
+
* @param subscriptionId - ID returned from subscribe()
|
|
50
|
+
* @returns True if subscription was found and removed
|
|
51
|
+
*/
|
|
52
|
+
unsubscribe(subscriptionId) {
|
|
53
|
+
return this.subscriptions.delete(subscriptionId);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Get count of active subscriptions
|
|
57
|
+
*
|
|
58
|
+
* @returns Number of active subscribers
|
|
59
|
+
*/
|
|
60
|
+
get subscriberCount() {
|
|
61
|
+
return this.subscriptions.size;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Clear all subscriptions
|
|
65
|
+
*
|
|
66
|
+
* Removes all subscribers. Useful for cleanup or testing.
|
|
67
|
+
*/
|
|
68
|
+
clearSubscriptions() {
|
|
69
|
+
this.subscriptions.clear();
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Create filter for specific class
|
|
73
|
+
*
|
|
74
|
+
* @param className - Class name to match
|
|
75
|
+
* @returns Filter function
|
|
76
|
+
*/
|
|
77
|
+
static filterByClass(className) {
|
|
78
|
+
return (signal) => signal.className === className;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Create filter for specific method
|
|
82
|
+
*
|
|
83
|
+
* @param methodName - Method name to match
|
|
84
|
+
* @returns Filter function
|
|
85
|
+
*/
|
|
86
|
+
static filterByMethod(methodName) {
|
|
87
|
+
return (signal) => signal.method === methodName;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Create filter for specific signal type
|
|
91
|
+
*
|
|
92
|
+
* @param type - Signal type to match
|
|
93
|
+
* @returns Filter function
|
|
94
|
+
*/
|
|
95
|
+
static filterByType(type) {
|
|
96
|
+
return (signal) => signal.type === type;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Create filter for specific class and method
|
|
100
|
+
*
|
|
101
|
+
* @param className - Class name to match
|
|
102
|
+
* @param methodName - Method name to match
|
|
103
|
+
* @returns Filter function
|
|
104
|
+
*/
|
|
105
|
+
static filterByClassAndMethod(className, methodName) {
|
|
106
|
+
return (signal) => signal.className === className && signal.method === methodName;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Combine multiple filters with AND logic
|
|
110
|
+
*
|
|
111
|
+
* @param filters - Filters to combine
|
|
112
|
+
* @returns Combined filter function
|
|
113
|
+
*/
|
|
114
|
+
static combineFilters(...filters) {
|
|
115
|
+
return (signal) => filters.every((filter) => filter(signal));
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
export {
|
|
119
|
+
PubSubAdapter
|
|
120
|
+
};
|
|
121
|
+
//# sourceMappingURL=pubsub.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pubsub.js","sources":["../../src/adapters/pubsub.ts"],"sourcesContent":["/**\n * Pub/Sub Adapter for Signal System\n *\n * Broadcasts signals to subscribers for real-time updates.\n * Supports multiple subscriber types (callbacks, WebSocket, SSE).\n */\n\nimport { createLogger } from '@happyvertical/logger';\nimport type { Signal, SignalAdapter } from '@happyvertical/smrt-types';\n\nconst logger = createLogger({ level: 'info' });\n\n/**\n * Signal filter function\n *\n * @param signal - Signal to evaluate\n * @returns True if signal should be sent to subscriber\n */\nexport type SignalFilter = (signal: Signal) => boolean;\n\n/**\n * Signal subscriber callback\n */\nexport type SignalSubscriber = (signal: Signal) => void | Promise<void>;\n\n/**\n * Subscription configuration\n */\nexport interface Subscription {\n /** Unique subscription ID */\n id: string;\n /** Callback to invoke with signals */\n callback: SignalSubscriber;\n /** Optional filter to apply before sending */\n filter?: SignalFilter;\n}\n\n/**\n * Pub/Sub Adapter - Broadcasts signals to subscribers\n *\n * Enables real-time updates for UI clients via WebSocket/SSE or\n * internal event-driven architectures via callbacks.\n *\n * Features:\n * - Multiple subscribers with independent filters\n * - Fire-and-forget delivery (errors don't block other subscribers)\n * - Flexible filtering (by class, method, type, etc.)\n * - Subscription management (add, remove, list)\n *\n * @example\n * ```typescript\n * const pubsub = new PubSubAdapter();\n * signalBus.register(pubsub);\n *\n * // Subscribe to all error signals\n * const subId = pubsub.subscribe(\n * (signal) => console.error('Error:', signal),\n * (signal) => signal.type === 'error'\n * );\n *\n * // Later, unsubscribe\n * pubsub.unsubscribe(subId);\n * ```\n */\nexport class PubSubAdapter implements SignalAdapter {\n private subscriptions: Map<string, Subscription> = new Map();\n private nextSubscriptionId = 1;\n\n /**\n * Handle a signal and broadcast to subscribers\n *\n * @param signal - Signal to broadcast\n */\n async handle(signal: Signal): Promise<void> {\n // Broadcast to all matching subscribers\n const promises: Promise<void>[] = [];\n\n for (const subscription of this.subscriptions.values()) {\n // Apply filter if present\n if (subscription.filter && !subscription.filter(signal)) {\n continue;\n }\n\n // Execute callback with error handling\n const promise = (async () => {\n try {\n await subscription.callback(signal);\n } catch (error) {\n logger.error(`PubSubAdapter: Subscriber ${subscription.id} error`, {\n error,\n });\n }\n })();\n\n promises.push(promise);\n }\n\n // Wait for all subscribers to process (fire-and-forget style)\n await Promise.allSettled(promises);\n }\n\n /**\n * Subscribe to signals\n *\n * @param callback - Function to call with matching signals\n * @param filter - Optional filter to apply before sending\n * @returns Subscription ID for later unsubscribe\n */\n subscribe(callback: SignalSubscriber, filter?: SignalFilter): string {\n const id = `sub-${this.nextSubscriptionId++}`;\n\n this.subscriptions.set(id, {\n id,\n callback,\n filter,\n });\n\n return id;\n }\n\n /**\n * Unsubscribe from signals\n *\n * @param subscriptionId - ID returned from subscribe()\n * @returns True if subscription was found and removed\n */\n unsubscribe(subscriptionId: string): boolean {\n return this.subscriptions.delete(subscriptionId);\n }\n\n /**\n * Get count of active subscriptions\n *\n * @returns Number of active subscribers\n */\n get subscriberCount(): number {\n return this.subscriptions.size;\n }\n\n /**\n * Clear all subscriptions\n *\n * Removes all subscribers. Useful for cleanup or testing.\n */\n clearSubscriptions(): void {\n this.subscriptions.clear();\n }\n\n /**\n * Create filter for specific class\n *\n * @param className - Class name to match\n * @returns Filter function\n */\n static filterByClass(className: string): SignalFilter {\n return (signal: Signal) => signal.className === className;\n }\n\n /**\n * Create filter for specific method\n *\n * @param methodName - Method name to match\n * @returns Filter function\n */\n static filterByMethod(methodName: string): SignalFilter {\n return (signal: Signal) => signal.method === methodName;\n }\n\n /**\n * Create filter for specific signal type\n *\n * @param type - Signal type to match\n * @returns Filter function\n */\n static filterByType(type: 'start' | 'step' | 'end' | 'error'): SignalFilter {\n return (signal: Signal) => signal.type === type;\n }\n\n /**\n * Create filter for specific class and method\n *\n * @param className - Class name to match\n * @param methodName - Method name to match\n * @returns Filter function\n */\n static filterByClassAndMethod(\n className: string,\n methodName: string,\n ): SignalFilter {\n return (signal: Signal) =>\n signal.className === className && signal.method === methodName;\n }\n\n /**\n * Combine multiple filters with AND logic\n *\n * @param filters - Filters to combine\n * @returns Combined filter function\n */\n static combineFilters(...filters: SignalFilter[]): SignalFilter {\n return (signal: Signal) => filters.every((filter) => filter(signal));\n }\n}\n"],"names":[],"mappings":";AAUA,MAAM,SAAS,aAAa,EAAE,OAAO,QAAQ;AAsDtC,MAAM,cAAuC;AAAA,EAC1C,oCAA+C,IAAA;AAAA,EAC/C,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO7B,MAAM,OAAO,QAA+B;AAE1C,UAAM,WAA4B,CAAA;AAElC,eAAW,gBAAgB,KAAK,cAAc,OAAA,GAAU;AAEtD,UAAI,aAAa,UAAU,CAAC,aAAa,OAAO,MAAM,GAAG;AACvD;AAAA,MACF;AAGA,YAAM,WAAW,YAAY;AAC3B,YAAI;AACF,gBAAM,aAAa,SAAS,MAAM;AAAA,QACpC,SAAS,OAAO;AACd,iBAAO,MAAM,6BAA6B,aAAa,EAAE,UAAU;AAAA,YACjE;AAAA,UAAA,CACD;AAAA,QACH;AAAA,MACF,GAAA;AAEA,eAAS,KAAK,OAAO;AAAA,IACvB;AAGA,UAAM,QAAQ,WAAW,QAAQ;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,UAAU,UAA4B,QAA+B;AACnE,UAAM,KAAK,OAAO,KAAK,oBAAoB;AAE3C,SAAK,cAAc,IAAI,IAAI;AAAA,MACzB;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD;AAED,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAY,gBAAiC;AAC3C,WAAO,KAAK,cAAc,OAAO,cAAc;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,kBAA0B;AAC5B,WAAO,KAAK,cAAc;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,qBAA2B;AACzB,SAAK,cAAc,MAAA;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,cAAc,WAAiC;AACpD,WAAO,CAAC,WAAmB,OAAO,cAAc;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,eAAe,YAAkC;AACtD,WAAO,CAAC,WAAmB,OAAO,WAAW;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,aAAa,MAAwD;AAC1E,WAAO,CAAC,WAAmB,OAAO,SAAS;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,uBACL,WACA,YACc;AACd,WAAO,CAAC,WACN,OAAO,cAAc,aAAa,OAAO,WAAW;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,kBAAkB,SAAuC;AAC9D,WAAO,CAAC,WAAmB,QAAQ,MAAM,CAAC,WAAW,OAAO,MAAM,CAAC;AAAA,EACrE;AACF;"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @smrt/core - Browser-safe entry point
|
|
3
|
+
*
|
|
4
|
+
* This entry point excludes Node.js-only code generators (CLI, REST, MCP)
|
|
5
|
+
* that contain shebangs and Node.js-specific APIs. Use this for browser
|
|
6
|
+
* builds, federation, and client-side applications.
|
|
7
|
+
*
|
|
8
|
+
* Excluded:
|
|
9
|
+
* - Code generators (CLIGenerator, APIGenerator, MCPGenerator)
|
|
10
|
+
* - Runtime manifest utilities (Node.js-only)
|
|
11
|
+
* - Prebuild utilities (Node.js-only)
|
|
12
|
+
*
|
|
13
|
+
* For Node.js applications, use the main entry point instead:
|
|
14
|
+
* import { ... } from '@happyvertical/smrt-core';
|
|
15
|
+
*/
|
|
16
|
+
export * from './adapters/index';
|
|
17
|
+
export * from './class';
|
|
18
|
+
export * from './collection';
|
|
19
|
+
export type { AiUsageConfig, GlobalSignalConfig, MetricsConfig, PubSubConfig, } from './config';
|
|
20
|
+
export { config } from './config';
|
|
21
|
+
export * from './errors';
|
|
22
|
+
export { type HierarchyView, SmrtHierarchical } from './hierarchical';
|
|
23
|
+
export { type JunctionAttachOptions, type JunctionFilterOptions, SmrtJunction, } from './junction';
|
|
24
|
+
export * from './object';
|
|
25
|
+
export { SmrtPolymorphicAssociation, type SmrtPolymorphicAssociationOptions, } from './polymorphic-association';
|
|
26
|
+
export * from './registry';
|
|
27
|
+
export { smrt as smrtRegistry } from './registry';
|
|
28
|
+
export * from './signals/index';
|
|
29
|
+
export * from './system/index';
|
|
30
|
+
export type { DiscoveryStrategy, ForgetOptions, ForgetScopeOptions, NoteMetadata, NoteOptions, RecallAllOptions, RecallOptions, SystemTableConfig, } from './system/types';
|
|
31
|
+
export * from './tools/index';
|
|
32
|
+
//# sourceMappingURL=browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,cAAc,kBAAkB,CAAC;AAEjC,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,YAAY,EACV,aAAa,EACb,kBAAkB,EAClB,aAAa,EACb,YAAY,GACb,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,KAAK,aAAa,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,YAAY,GACb,MAAM,YAAY,CAAC;AACpB,cAAc,UAAU,CAAC;AACzB,OAAO,EACL,0BAA0B,EAC1B,KAAK,iCAAiC,GACvC,MAAM,2BAA2B,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,IAAI,IAAI,YAAY,EAAE,MAAM,YAAY,CAAC;AAElD,cAAc,iBAAiB,CAAC;AAEhC,cAAc,gBAAgB,CAAC;AAC/B,YAAY,EACV,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AAExB,cAAc,eAAe,CAAC"}
|
package/dist/browser.js
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { AiUsageCollector, AiUsagePersistenceHandler } from "./adapters/ai-usage.js";
|
|
2
|
+
import { DEFAULT_AI_COST_RATES, estimateAiUsageCost } from "./adapters/cost-rates.js";
|
|
3
|
+
import { MetricsAdapter } from "./adapters/metrics.js";
|
|
4
|
+
import { PubSubAdapter } from "./adapters/pubsub.js";
|
|
5
|
+
import { SmrtClass } from "./class.js";
|
|
6
|
+
import { SmrtCollection } from "./collection.js";
|
|
7
|
+
import { config } from "./config.js";
|
|
8
|
+
import { AIError, ConfigurationError, DatabaseError, ErrorUtils, FilesystemError, NetworkError, RuntimeError, SmrtError, TenantIsolationError, ValidationError, ValidationReport, ValidationUtils } from "./errors.js";
|
|
9
|
+
import { SmrtHierarchical } from "./hierarchical.js";
|
|
10
|
+
import { SmrtJunction } from "./junction.js";
|
|
11
|
+
import { SmrtObject } from "./object.js";
|
|
12
|
+
import { SmrtPolymorphicAssociation } from "./polymorphic-association.js";
|
|
13
|
+
import { ObjectRegistry, smrt, smrt as smrt2 } from "./registry.js";
|
|
14
|
+
import { SignalBus } from "./signals/bus.js";
|
|
15
|
+
import { SignalSanitizer } from "./signals/sanitizer.js";
|
|
16
|
+
import { ensureDispatchSubscriptionsSystemTableCompatibility, ensureDispatchSystemTableCompatibility, ensureJobEventsSystemTableCompatibility, ensureJobsSystemTableCompatibility, ensureLegacySystemTableCompatibility, tableExists } from "./system/compatibility.js";
|
|
17
|
+
import { executeToolCall, executeToolCalls, formatToolResults, validateToolCall } from "./tools/tool-executor.js";
|
|
18
|
+
import { convertTypeToJsonSchema, generateToolFromMethod, generateToolManifest, shouldIncludeMethod } from "./tools/tool-generator.js";
|
|
19
|
+
import { SMRT_COLLECTION_BASE_NAMES, isSmrtCollectionExtendsName } from "./registry/collection-resolution.js";
|
|
20
|
+
export {
|
|
21
|
+
AIError,
|
|
22
|
+
AiUsageCollector,
|
|
23
|
+
AiUsagePersistenceHandler,
|
|
24
|
+
ConfigurationError,
|
|
25
|
+
DEFAULT_AI_COST_RATES,
|
|
26
|
+
DatabaseError,
|
|
27
|
+
ErrorUtils,
|
|
28
|
+
FilesystemError,
|
|
29
|
+
MetricsAdapter,
|
|
30
|
+
NetworkError,
|
|
31
|
+
ObjectRegistry,
|
|
32
|
+
PubSubAdapter,
|
|
33
|
+
RuntimeError,
|
|
34
|
+
SMRT_COLLECTION_BASE_NAMES,
|
|
35
|
+
SignalBus,
|
|
36
|
+
SignalSanitizer,
|
|
37
|
+
SmrtClass,
|
|
38
|
+
SmrtCollection,
|
|
39
|
+
SmrtError,
|
|
40
|
+
SmrtHierarchical,
|
|
41
|
+
SmrtJunction,
|
|
42
|
+
SmrtObject,
|
|
43
|
+
SmrtPolymorphicAssociation,
|
|
44
|
+
TenantIsolationError,
|
|
45
|
+
ValidationError,
|
|
46
|
+
ValidationReport,
|
|
47
|
+
ValidationUtils,
|
|
48
|
+
config,
|
|
49
|
+
convertTypeToJsonSchema,
|
|
50
|
+
ensureDispatchSubscriptionsSystemTableCompatibility,
|
|
51
|
+
ensureDispatchSystemTableCompatibility,
|
|
52
|
+
ensureJobEventsSystemTableCompatibility,
|
|
53
|
+
ensureJobsSystemTableCompatibility,
|
|
54
|
+
ensureLegacySystemTableCompatibility,
|
|
55
|
+
estimateAiUsageCost,
|
|
56
|
+
executeToolCall,
|
|
57
|
+
executeToolCalls,
|
|
58
|
+
formatToolResults,
|
|
59
|
+
generateToolFromMethod,
|
|
60
|
+
generateToolManifest,
|
|
61
|
+
isSmrtCollectionExtendsName,
|
|
62
|
+
shouldIncludeMethod,
|
|
63
|
+
smrt,
|
|
64
|
+
smrt2 as smrtRegistry,
|
|
65
|
+
tableExists,
|
|
66
|
+
validateToolCall
|
|
67
|
+
};
|
|
68
|
+
//# sourceMappingURL=browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { RelationshipMetadata } from './registry/types';
|
|
2
|
+
/**
|
|
3
|
+
* Compute the canonical child-accessor method name for a `@oneToMany` field.
|
|
4
|
+
*
|
|
5
|
+
* `terms` → `getTerms`, `relationshipsFrom` → `getRelationshipsFrom`. Exported
|
|
6
|
+
* so tests and tooling can derive the name without re-implementing the rule.
|
|
7
|
+
*
|
|
8
|
+
* @param fieldName - The `@oneToMany` property name on the parent class
|
|
9
|
+
* @returns The generated accessor method name
|
|
10
|
+
*/
|
|
11
|
+
export declare function childAccessorName(fieldName: string): string;
|
|
12
|
+
/**
|
|
13
|
+
* Install generated child accessors for a class's `@oneToMany` relationships.
|
|
14
|
+
*
|
|
15
|
+
* Called from the `@smrt()` decorator immediately after the class is
|
|
16
|
+
* registered, so `relationships` reflects the class's own (decorator- or
|
|
17
|
+
* manifest-derived) relationship metadata. Non-`oneToMany` entries are ignored,
|
|
18
|
+
* so callers may pass the unfiltered relationship list.
|
|
19
|
+
*
|
|
20
|
+
* @param ctor - The registered class constructor (its prototype is augmented)
|
|
21
|
+
* @param relationships - Relationship metadata for the class (from
|
|
22
|
+
* `ObjectRegistry.getRelationships`)
|
|
23
|
+
*/
|
|
24
|
+
export declare function applyOneToManyChildAccessors(ctor: {
|
|
25
|
+
prototype?: any;
|
|
26
|
+
} | undefined, relationships: RelationshipMetadata[] | undefined): void;
|
|
27
|
+
//# sourceMappingURL=child-accessors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"child-accessors.d.ts","sourceRoot":"","sources":["../src/child-accessors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE7D;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE;IAAE,SAAS,CAAC,EAAE,GAAG,CAAA;CAAE,GAAG,SAAS,EACrC,aAAa,EAAE,oBAAoB,EAAE,GAAG,SAAS,GAChD,IAAI,CAoCN"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
function childAccessorName(fieldName) {
|
|
2
|
+
return `get${fieldName.charAt(0).toUpperCase()}${fieldName.slice(1)}`;
|
|
3
|
+
}
|
|
4
|
+
function applyOneToManyChildAccessors(ctor, relationships) {
|
|
5
|
+
const prototype = ctor?.prototype;
|
|
6
|
+
if (!prototype || !relationships) {
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
for (const relationship of relationships) {
|
|
10
|
+
if (relationship.type !== "oneToMany") {
|
|
11
|
+
continue;
|
|
12
|
+
}
|
|
13
|
+
const fieldName = relationship.fieldName;
|
|
14
|
+
if (!fieldName) {
|
|
15
|
+
continue;
|
|
16
|
+
}
|
|
17
|
+
const accessorName = childAccessorName(fieldName);
|
|
18
|
+
if (accessorName in prototype) {
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
Object.defineProperty(prototype, accessorName, {
|
|
22
|
+
value: function generatedChildAccessor() {
|
|
23
|
+
return this.loadRelatedMany(fieldName);
|
|
24
|
+
},
|
|
25
|
+
writable: true,
|
|
26
|
+
enumerable: false,
|
|
27
|
+
configurable: true
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export {
|
|
32
|
+
applyOneToManyChildAccessors,
|
|
33
|
+
childAccessorName
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=child-accessors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"child-accessors.js","sources":["../src/child-accessors.ts"],"sourcesContent":["/**\n * R10 — consolidated child-accessor API for `@oneToMany` relationships.\n *\n * Before R10 every model hand-rolled its own child accessor (`getTerms`,\n * `getChildren`, `getForProfile`, …) with inconsistent names and shapes. This\n * module installs ONE canonical accessor per `@oneToMany` field at class\n * registration time: a `@oneToMany('Child') items` field gains a `getItems()`\n * instance method that delegates to the existing `loadRelatedMany('items')`\n * resolver — the same code path used for lazy loading and `include:` eager\n * loading, which itself queries through the child collection (the queryable\n * primitive).\n *\n * Two invariants make this safe to apply to every registered class:\n *\n * - **Additive.** If a method of the computed name already exists anywhere on\n * the prototype chain — a hand-rolled accessor like\n * `ProfileRelationship.getTerms()`, a differently-shaped `Profile.getMetadata()`,\n * or a `SmrtObject` base method — it is left untouched. The generated\n * accessor never renames or shadows an existing public signature.\n * - **Runtime-only.** Accessors are attached to the prototype at registration;\n * they are invisible to the build-time manifest, so they never leak into the\n * generated REST/CLI/MCP surface (those read `classInfo.tools`/scanned\n * methods, not the runtime prototype). They are a developer-ergonomics\n * convenience layered on top of `loadRelatedMany`.\n *\n * Multiplicity note: when the child class declares more than one foreign key\n * back to the parent (e.g. `ProfileRelationship.fromProfileId` /\n * `toProfileId`), annotate the `@oneToMany` with `{ foreignKey: 'fromProfileId' }`\n * so `loadRelatedMany` resolves the correct inverse side. Without it the\n * resolver falls back to the first matching foreign key (legacy behavior). An\n * explicit `foreignKey` that matches no inverse FK is treated as an error.\n *\n * STI note: a child class inherits the base's generated accessor through the\n * prototype chain. `loadRelatedMany` resolves the inverse FK against the\n * instance's class AND its registered ancestors (see\n * `ObjectRegistry.getInverseRelationshipsForSelf`), so calling the accessor on\n * an STI subclass instance resolves a `@oneToMany` declared on its base.\n */\n\nimport type { RelationshipMetadata } from './registry/types';\n\n/**\n * Compute the canonical child-accessor method name for a `@oneToMany` field.\n *\n * `terms` → `getTerms`, `relationshipsFrom` → `getRelationshipsFrom`. Exported\n * so tests and tooling can derive the name without re-implementing the rule.\n *\n * @param fieldName - The `@oneToMany` property name on the parent class\n * @returns The generated accessor method name\n */\nexport function childAccessorName(fieldName: string): string {\n return `get${fieldName.charAt(0).toUpperCase()}${fieldName.slice(1)}`;\n}\n\n/**\n * Install generated child accessors for a class's `@oneToMany` relationships.\n *\n * Called from the `@smrt()` decorator immediately after the class is\n * registered, so `relationships` reflects the class's own (decorator- or\n * manifest-derived) relationship metadata. Non-`oneToMany` entries are ignored,\n * so callers may pass the unfiltered relationship list.\n *\n * @param ctor - The registered class constructor (its prototype is augmented)\n * @param relationships - Relationship metadata for the class (from\n * `ObjectRegistry.getRelationships`)\n */\nexport function applyOneToManyChildAccessors(\n ctor: { prototype?: any } | undefined,\n relationships: RelationshipMetadata[] | undefined,\n): void {\n const prototype = ctor?.prototype;\n if (!prototype || !relationships) {\n return;\n }\n\n for (const relationship of relationships) {\n if (relationship.type !== 'oneToMany') {\n continue;\n }\n\n const fieldName = relationship.fieldName;\n if (!fieldName) {\n continue;\n }\n\n const accessorName = childAccessorName(fieldName);\n\n // Additive only: never shadow a hand-rolled accessor (or any inherited\n // method, including SmrtObject base methods) of the same name. `in`\n // walks the full prototype chain.\n if (accessorName in prototype) {\n continue;\n }\n\n Object.defineProperty(prototype, accessorName, {\n value: function generatedChildAccessor(this: {\n loadRelatedMany(field: string): Promise<any[]>;\n }): Promise<any[]> {\n return this.loadRelatedMany(fieldName);\n },\n writable: true,\n enumerable: false,\n configurable: true,\n });\n }\n}\n"],"names":[],"mappings":"AAkDO,SAAS,kBAAkB,WAA2B;AAC3D,SAAO,MAAM,UAAU,OAAO,CAAC,EAAE,YAAA,CAAa,GAAG,UAAU,MAAM,CAAC,CAAC;AACrE;AAcO,SAAS,6BACd,MACA,eACM;AACN,QAAM,YAAY,MAAM;AACxB,MAAI,CAAC,aAAa,CAAC,eAAe;AAChC;AAAA,EACF;AAEA,aAAW,gBAAgB,eAAe;AACxC,QAAI,aAAa,SAAS,aAAa;AACrC;AAAA,IACF;AAEA,UAAM,YAAY,aAAa;AAC/B,QAAI,CAAC,WAAW;AACd;AAAA,IACF;AAEA,UAAM,eAAe,kBAAkB,SAAS;AAKhD,QAAI,gBAAgB,WAAW;AAC7B;AAAA,IACF;AAEA,WAAO,eAAe,WAAW,cAAc;AAAA,MAC7C,OAAO,SAAS,yBAEG;AACjB,eAAO,KAAK,gBAAgB,SAAS;AAAA,MACvC;AAAA,MACA,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,cAAc;AAAA,IAAA,CACf;AAAA,EACH;AACF;"}
|