@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,380 @@
|
|
|
1
|
+
import { existsSync, readFileSync, mkdirSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { isAbsolute, relative, resolve, dirname } from "node:path";
|
|
3
|
+
import fg from "fast-glob";
|
|
4
|
+
import { ManifestGenerator } from "../scanner/manifest-generator.js";
|
|
5
|
+
import { importWorkspaceModule } from "../utils/import-workspace-module.js";
|
|
6
|
+
import { discoverSmrtPackages, resolveManifestPath } from "./discover-smrt-packages.js";
|
|
7
|
+
import { ManifestManager } from "./manager.js";
|
|
8
|
+
async function importScanner() {
|
|
9
|
+
return importWorkspaceModule({
|
|
10
|
+
packageName: "@happyvertical/smrt-scanner",
|
|
11
|
+
distEntry: "packages/scanner/dist/index.js",
|
|
12
|
+
sourceEntry: "packages/scanner/src/index.ts",
|
|
13
|
+
purpose: "manifest generation"
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
class ManifestBuilder {
|
|
17
|
+
/**
|
|
18
|
+
* Generate manifest with specified options
|
|
19
|
+
*/
|
|
20
|
+
async generate(options = {}) {
|
|
21
|
+
const files = this.discoverFiles(options);
|
|
22
|
+
if (files.length === 0) {
|
|
23
|
+
console.log("[smrt] No source files found");
|
|
24
|
+
return this.createEmptyManifest(options);
|
|
25
|
+
}
|
|
26
|
+
console.log(`[smrt] Scanning ${files.length} source file(s)...`);
|
|
27
|
+
const scannerConfig = await this.configureScanner(options);
|
|
28
|
+
const scannedManifest = await this.scanAndBuildManifest(
|
|
29
|
+
scannerConfig,
|
|
30
|
+
options
|
|
31
|
+
);
|
|
32
|
+
const manifest = this.enrichManifest(
|
|
33
|
+
scannedManifest,
|
|
34
|
+
options,
|
|
35
|
+
scannerConfig
|
|
36
|
+
);
|
|
37
|
+
this.normalizeFilePaths(manifest);
|
|
38
|
+
await this.writeOutput(manifest, options);
|
|
39
|
+
return manifest;
|
|
40
|
+
}
|
|
41
|
+
normalizeFilePaths(manifest) {
|
|
42
|
+
const workspaceRoot = this.findWorkspaceRoot(process.cwd());
|
|
43
|
+
for (const obj of Object.values(manifest.objects || {})) {
|
|
44
|
+
if (obj.filePath && isAbsolute(obj.filePath)) {
|
|
45
|
+
obj.filePath = relative(workspaceRoot, obj.filePath).replace(
|
|
46
|
+
/\\/g,
|
|
47
|
+
"/"
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
findWorkspaceRoot(startDir) {
|
|
53
|
+
let current = resolve(startDir);
|
|
54
|
+
while (true) {
|
|
55
|
+
if (existsSync(resolve(current, "pnpm-workspace.yaml")) || existsSync(resolve(current, ".git"))) {
|
|
56
|
+
return current;
|
|
57
|
+
}
|
|
58
|
+
const parent = dirname(current);
|
|
59
|
+
if (parent === current) {
|
|
60
|
+
return resolve(startDir);
|
|
61
|
+
}
|
|
62
|
+
current = parent;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Discover source files based on include/exclude patterns
|
|
67
|
+
*/
|
|
68
|
+
discoverFiles(options) {
|
|
69
|
+
const include = options.include || ["src/**/*.ts"];
|
|
70
|
+
const exclude = options.exclude || ["src/**/*.d.ts", "node_modules/**"];
|
|
71
|
+
return fg.sync(include, {
|
|
72
|
+
absolute: true,
|
|
73
|
+
ignore: exclude
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Configure AST scanner with baseClasses, external packages, and vite config
|
|
78
|
+
*/
|
|
79
|
+
async configureScanner(options) {
|
|
80
|
+
let baseClasses = options.baseClasses || [
|
|
81
|
+
"SmrtObject",
|
|
82
|
+
"SmrtClass",
|
|
83
|
+
"SmrtCollection"
|
|
84
|
+
];
|
|
85
|
+
if (options.loadViteConfig) {
|
|
86
|
+
const viteBaseClasses = await this.loadViteConfigBaseClasses();
|
|
87
|
+
if (viteBaseClasses && viteBaseClasses.length > 0) {
|
|
88
|
+
baseClasses = viteBaseClasses;
|
|
89
|
+
console.log(
|
|
90
|
+
`[smrt] Using baseClasses from vite.config.ts: ${baseClasses.join(", ")}`
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
let smrtDependencies = [];
|
|
95
|
+
if (options.discoverExternalPackages) {
|
|
96
|
+
console.log("[smrt] Discovering external SMRT packages...");
|
|
97
|
+
smrtDependencies = discoverSmrtPackages();
|
|
98
|
+
console.log(
|
|
99
|
+
`[smrt] Found ${smrtDependencies.length} SMRT package(s): ${smrtDependencies.join(", ")}`
|
|
100
|
+
);
|
|
101
|
+
if (options.includeExternalBaseClasses) {
|
|
102
|
+
const externalClasses = await this.loadExternalBaseClasses(smrtDependencies);
|
|
103
|
+
if (externalClasses.length > 0) {
|
|
104
|
+
baseClasses = [...baseClasses, ...externalClasses];
|
|
105
|
+
console.log(
|
|
106
|
+
`[smrt] Added ${externalClasses.length} external base class(es) to scanner`
|
|
107
|
+
);
|
|
108
|
+
console.log(`[smrt] Total baseClasses: ${baseClasses.length}`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return {
|
|
113
|
+
baseClasses,
|
|
114
|
+
includePrivateMethods: options.includePrivateMethods ?? false,
|
|
115
|
+
includeStaticMethods: options.includeStaticMethods ?? true,
|
|
116
|
+
followImports: options.followImports ?? false,
|
|
117
|
+
smrtDependencies
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Scan files using OxcScanner and build manifest via ManifestAdapter.
|
|
122
|
+
*
|
|
123
|
+
* This replaces the old ASTScanner-based scanFiles() method.
|
|
124
|
+
* Uses the same OXC pipeline as the Vite plugin's scanWithOxc().
|
|
125
|
+
*/
|
|
126
|
+
async scanAndBuildManifest(config, options) {
|
|
127
|
+
const { OxcScanner, ManifestAdapter } = await importScanner();
|
|
128
|
+
const scanner = new OxcScanner({
|
|
129
|
+
cwd: process.cwd(),
|
|
130
|
+
include: options.include || ["src/**/*.ts"],
|
|
131
|
+
exclude: options.exclude || ["src/**/*.d.ts", "node_modules/**"],
|
|
132
|
+
baseClasses: config.baseClasses,
|
|
133
|
+
includePrivateMethods: config.includePrivateMethods,
|
|
134
|
+
includeStaticMethods: config.includeStaticMethods,
|
|
135
|
+
followImports: config.followImports
|
|
136
|
+
});
|
|
137
|
+
const { results, resolved } = await scanner.scanAndResolve();
|
|
138
|
+
let packageName;
|
|
139
|
+
let packageVersion;
|
|
140
|
+
let packageJson;
|
|
141
|
+
try {
|
|
142
|
+
const pkgPath = resolve(process.cwd(), "package.json");
|
|
143
|
+
const pkgContent = readFileSync(pkgPath, "utf-8");
|
|
144
|
+
packageJson = JSON.parse(pkgContent);
|
|
145
|
+
packageName = packageJson.name || void 0;
|
|
146
|
+
packageVersion = packageJson.version || void 0;
|
|
147
|
+
} catch {
|
|
148
|
+
}
|
|
149
|
+
const adapter = new ManifestAdapter();
|
|
150
|
+
const manifest = adapter.toManifest(resolved, {
|
|
151
|
+
packageName,
|
|
152
|
+
packageVersion,
|
|
153
|
+
typeAliases: results.typeAliases
|
|
154
|
+
});
|
|
155
|
+
if (config.smrtDependencies && config.smrtDependencies.length > 0) {
|
|
156
|
+
manifest.smrtDependencies = config.smrtDependencies;
|
|
157
|
+
}
|
|
158
|
+
const manifestGen = new ManifestGenerator();
|
|
159
|
+
manifestGen.injectTenantScopedFields(manifest);
|
|
160
|
+
manifestGen.mergeInheritedFields(manifest);
|
|
161
|
+
manifestGen.generateValidationRules(manifest);
|
|
162
|
+
manifestGen.generateSchemas(manifest);
|
|
163
|
+
manifestGen.assertTenantScopedSchemaContract(manifest);
|
|
164
|
+
manifestGen.generateAgentManifests(manifest, packageName, packageJson);
|
|
165
|
+
return manifest;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Enrich manifest with metadata (moduleType, smrtDependencies, packageInfo).
|
|
169
|
+
*
|
|
170
|
+
* Note: As of Issue #1013, this method no longer merges external package
|
|
171
|
+
* objects into the manifest. Dependencies are referenced via
|
|
172
|
+
* `smrtDependencies` and resolved at runtime by manifest-loader.ts.
|
|
173
|
+
*/
|
|
174
|
+
enrichManifest(manifest, options, scannerConfig) {
|
|
175
|
+
manifest.moduleType = options.moduleType || "smrt";
|
|
176
|
+
if (scannerConfig.smrtDependencies && scannerConfig.smrtDependencies.length > 0) {
|
|
177
|
+
manifest.smrtDependencies = scannerConfig.smrtDependencies;
|
|
178
|
+
}
|
|
179
|
+
if (options.injectPackageInfo) {
|
|
180
|
+
const packageInfo = this.readPackageJson();
|
|
181
|
+
if (packageInfo.name) {
|
|
182
|
+
manifest.packageName = packageInfo.name;
|
|
183
|
+
console.log(`[smrt] Injected package name: ${packageInfo.name}`);
|
|
184
|
+
} else {
|
|
185
|
+
console.warn(
|
|
186
|
+
"[smrt] Warning: Could not read package.json, packageName will be undefined"
|
|
187
|
+
);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return manifest;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Write manifest JSON and optional TypeScript stub
|
|
194
|
+
*/
|
|
195
|
+
async writeOutput(manifest, options) {
|
|
196
|
+
const manager = new ManifestManager(process.cwd());
|
|
197
|
+
const isTest = options.outputName?.includes("test") || options.stubName?.includes("test");
|
|
198
|
+
const mode = isTest ? "dev" : "build";
|
|
199
|
+
manager.write(manifest, mode);
|
|
200
|
+
const outputDir = options.outputDir || "src/manifest";
|
|
201
|
+
const outputName = options.outputName || "manifest.json";
|
|
202
|
+
mkdirSync(outputDir, { recursive: true });
|
|
203
|
+
const manifestPath = resolve(outputDir, outputName);
|
|
204
|
+
const unifiedPath = manager.getOutputPath(mode);
|
|
205
|
+
if (resolve(manifestPath) !== resolve(unifiedPath)) {
|
|
206
|
+
writeFileSync(manifestPath, JSON.stringify(manifest, null, 2));
|
|
207
|
+
}
|
|
208
|
+
if (options.generateTypeStub) {
|
|
209
|
+
const stubName = options.stubName || "manifest.ts";
|
|
210
|
+
const tsContent = this.generateTypeStub(manifest, stubName);
|
|
211
|
+
const stubPath = resolve(outputDir, stubName);
|
|
212
|
+
writeFileSync(stubPath, tsContent);
|
|
213
|
+
}
|
|
214
|
+
const objectCount = Object.keys(manifest.objects).length;
|
|
215
|
+
console.log(`[smrt] ✅ Generated manifest with ${objectCount} object(s)`);
|
|
216
|
+
console.log(`[smrt] Unified: ${unifiedPath}`);
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Generate TypeScript stub file with manifest constant
|
|
220
|
+
*/
|
|
221
|
+
generateTypeStub(manifest, filename) {
|
|
222
|
+
const isTestManifest = filename.includes("test");
|
|
223
|
+
const comment = isTestManifest ? `/**
|
|
224
|
+
* Test manifest stub
|
|
225
|
+
* This file is replaced by generate-test-manifest.js during pretest
|
|
226
|
+
* If tests run without pretest, this empty manifest is used
|
|
227
|
+
*
|
|
228
|
+
* DO NOT EDIT MANUALLY - This file is automatically generated
|
|
229
|
+
*/` : `/**
|
|
230
|
+
* Auto-generated static manifest
|
|
231
|
+
* Generated at build time from SMRT object scanning
|
|
232
|
+
* DO NOT EDIT - This file is automatically generated
|
|
233
|
+
*/`;
|
|
234
|
+
const exportName = isTestManifest ? "testManifest" : "staticManifest";
|
|
235
|
+
const isCorePackage = manifest.packageName === "@happyvertical/smrt-core";
|
|
236
|
+
const importPath = isCorePackage ? "../scanner/types.js" : "@happyvertical/smrt-core/scanner/types";
|
|
237
|
+
return `${comment}
|
|
238
|
+
|
|
239
|
+
import type { SmartObjectManifest } from '${importPath}';
|
|
240
|
+
|
|
241
|
+
export const ${exportName}: SmartObjectManifest = ${JSON.stringify(manifest, null, 2)} as const;
|
|
242
|
+
|
|
243
|
+
export default ${exportName};
|
|
244
|
+
`;
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Load baseClasses from vite.config.ts
|
|
248
|
+
*/
|
|
249
|
+
async loadViteConfigBaseClasses() {
|
|
250
|
+
try {
|
|
251
|
+
const viteConfigPath = resolve(process.cwd(), "vite.config.ts");
|
|
252
|
+
if (!existsSync(viteConfigPath)) {
|
|
253
|
+
console.log("[smrt] vite.config.ts not found");
|
|
254
|
+
return null;
|
|
255
|
+
}
|
|
256
|
+
console.log("[smrt] Found vite.config.ts, attempting to load...");
|
|
257
|
+
const { loadConfigFromFile } = await import("vite");
|
|
258
|
+
const loaded = await loadConfigFromFile(
|
|
259
|
+
{ command: "build", mode: "test" },
|
|
260
|
+
viteConfigPath
|
|
261
|
+
);
|
|
262
|
+
if (!loaded?.config?.plugins) {
|
|
263
|
+
console.log("[smrt] No plugins found in vite config");
|
|
264
|
+
return null;
|
|
265
|
+
}
|
|
266
|
+
console.log(
|
|
267
|
+
"[smrt] Vite config loaded, plugins:",
|
|
268
|
+
loaded.config.plugins.map((p) => p?.name)
|
|
269
|
+
);
|
|
270
|
+
const smrtPlugin = loaded.config.plugins.find(
|
|
271
|
+
(p) => p?.name === "smrt-auto-service"
|
|
272
|
+
);
|
|
273
|
+
if (!smrtPlugin) {
|
|
274
|
+
console.log(
|
|
275
|
+
"[smrt] smrt-auto-service plugin not found in plugins array"
|
|
276
|
+
);
|
|
277
|
+
return null;
|
|
278
|
+
}
|
|
279
|
+
console.log("[smrt] Found smrt-auto-service plugin");
|
|
280
|
+
let opts = smrtPlugin.api?.options || smrtPlugin.options || smrtPlugin._options;
|
|
281
|
+
if (!opts && typeof smrtPlugin.api === "function") {
|
|
282
|
+
try {
|
|
283
|
+
const api = smrtPlugin.api();
|
|
284
|
+
opts = api.options;
|
|
285
|
+
} catch (e) {
|
|
286
|
+
console.log("[smrt] Could not call plugin.api()");
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
if (opts?.baseClasses) {
|
|
290
|
+
console.log(
|
|
291
|
+
"[smrt] Plugin options:",
|
|
292
|
+
JSON.stringify({
|
|
293
|
+
baseClasses: opts.baseClasses,
|
|
294
|
+
followImports: opts.followImports
|
|
295
|
+
})
|
|
296
|
+
);
|
|
297
|
+
return opts.baseClasses;
|
|
298
|
+
}
|
|
299
|
+
console.log("[smrt] Could not access plugin options");
|
|
300
|
+
return null;
|
|
301
|
+
} catch (error) {
|
|
302
|
+
console.log("[smrt] Error loading vite.config.ts:", error.message);
|
|
303
|
+
console.log("[smrt] Using default baseClasses");
|
|
304
|
+
return null;
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Load base classes from external SMRT package manifests
|
|
309
|
+
*/
|
|
310
|
+
async loadExternalBaseClasses(packages) {
|
|
311
|
+
const externalBaseClasses = [];
|
|
312
|
+
for (const pkgName of packages) {
|
|
313
|
+
const manifestPath = resolveManifestPath(pkgName, process.cwd());
|
|
314
|
+
if (!manifestPath) {
|
|
315
|
+
console.log(`[smrt] ${pkgName}: no SMRT manifest resolved`);
|
|
316
|
+
continue;
|
|
317
|
+
}
|
|
318
|
+
try {
|
|
319
|
+
const manifestContent = readFileSync(manifestPath, "utf-8");
|
|
320
|
+
const manifest = JSON.parse(manifestContent);
|
|
321
|
+
const foundClassNames = [];
|
|
322
|
+
for (const objDef of Object.values(manifest.objects)) {
|
|
323
|
+
if (objDef.className) {
|
|
324
|
+
const className = objDef.className;
|
|
325
|
+
foundClassNames.push(className);
|
|
326
|
+
externalBaseClasses.push(className);
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
console.log(
|
|
330
|
+
`[smrt] ${pkgName}: found ${foundClassNames.length} class(es) - ${foundClassNames.join(", ")}`
|
|
331
|
+
);
|
|
332
|
+
} catch (error) {
|
|
333
|
+
console.log(
|
|
334
|
+
`[smrt] ${pkgName}: manifest not found or invalid - ${error.message}`
|
|
335
|
+
);
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
return externalBaseClasses;
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Read package.json from current working directory
|
|
342
|
+
*/
|
|
343
|
+
readPackageJson() {
|
|
344
|
+
try {
|
|
345
|
+
const packageJsonPath = resolve(process.cwd(), "package.json");
|
|
346
|
+
const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf-8"));
|
|
347
|
+
return {
|
|
348
|
+
name: packageJson.name,
|
|
349
|
+
version: packageJson.version
|
|
350
|
+
};
|
|
351
|
+
} catch (error) {
|
|
352
|
+
return {};
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Create empty manifest when no files found
|
|
357
|
+
*/
|
|
358
|
+
createEmptyManifest(options) {
|
|
359
|
+
const manifest = {
|
|
360
|
+
version: "1.0.0",
|
|
361
|
+
timestamp: Date.now(),
|
|
362
|
+
objects: {},
|
|
363
|
+
moduleType: options.moduleType || "smrt"
|
|
364
|
+
};
|
|
365
|
+
if (options.discoverExternalPackages) {
|
|
366
|
+
manifest.smrtDependencies = discoverSmrtPackages();
|
|
367
|
+
}
|
|
368
|
+
if (options.injectPackageInfo) {
|
|
369
|
+
const packageInfo = this.readPackageJson();
|
|
370
|
+
if (packageInfo.name) {
|
|
371
|
+
manifest.packageName = packageInfo.name;
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
return manifest;
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
export {
|
|
378
|
+
ManifestBuilder
|
|
379
|
+
};
|
|
380
|
+
//# sourceMappingURL=generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generator.js","sources":["../../src/manifest/generator.ts"],"sourcesContent":["/**\n * Manifest generation orchestrator\n * Consolidates manifest generation logic for both build and test manifests\n */\n\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport { dirname, isAbsolute, relative, resolve } from 'node:path';\nimport fg from 'fast-glob';\nimport { ManifestGenerator } from '../scanner/manifest-generator.js';\nimport type { SmartObjectManifest } from '../scanner/types.js';\nimport { importWorkspaceModule } from '../utils/import-workspace-module.js';\nimport type { ScannerModule } from '../utils/scanner-module.js';\nimport {\n discoverSmrtPackages,\n resolveManifestPath,\n} from './discover-smrt-packages.js';\nimport { ManifestManager } from './manager.js';\n\nasync function importScanner() {\n return importWorkspaceModule<ScannerModule>({\n packageName: '@happyvertical/smrt-scanner',\n distEntry: 'packages/scanner/dist/index.js',\n sourceEntry: 'packages/scanner/src/index.ts',\n purpose: 'manifest generation',\n });\n}\n\n/**\n * Options for ManifestBuilder.generate()\n *\n * Controls file discovery, scanner configuration, output generation, and metadata injection\n */\nexport interface ManifestBuilderOptions {\n // File Discovery\n include?: string[];\n exclude?: string[];\n followImports?: boolean;\n\n // Scanner Configuration\n baseClasses?: string[];\n loadViteConfig?: boolean;\n discoverExternalPackages?: boolean;\n includeExternalBaseClasses?: boolean;\n includePrivateMethods?: boolean;\n includeStaticMethods?: boolean;\n\n // Output Configuration\n outputDir?: string;\n outputName?: string;\n generateTypeStub?: boolean;\n stubName?: string;\n\n // Metadata\n injectPackageInfo?: boolean;\n moduleType?: string;\n\n // Tree Shaking (External Object Filtering)\n /**\n * @deprecated Tree shaking is no longer needed. The AST scanner no longer includes external objects in the manifest by default.\n */\n treeShake?: boolean;\n\n /**\n * @deprecated Whitelists are no longer needed. The AST scanner no longer includes external objects in the manifest by default.\n */\n externalObjectsWhitelist?: string[];\n}\n\ninterface ScannerConfig {\n baseClasses: string[];\n includePrivateMethods: boolean;\n includeStaticMethods: boolean;\n followImports: boolean;\n smrtDependencies?: string[];\n}\n\ninterface PackageInfo {\n name?: string;\n version?: string;\n}\n\n/**\n * Orchestrates manifest generation with configurable options\n *\n * Consolidates logic from generate-manifest.js and generate-test-manifest.js\n * into a single, testable, and maintainable service.\n */\nexport class ManifestBuilder {\n /**\n * Generate manifest with specified options\n */\n async generate(\n options: ManifestBuilderOptions = {},\n ): Promise<SmartObjectManifest> {\n // 1. Discover files to scan\n const files = this.discoverFiles(options);\n\n if (files.length === 0) {\n console.log('[smrt] No source files found');\n return this.createEmptyManifest(options);\n }\n\n console.log(`[smrt] Scanning ${files.length} source file(s)...`);\n\n // 2. Configure scanner (baseClasses, external packages, vite config)\n const scannerConfig = await this.configureScanner(options);\n\n // 3. Scan files with OXC scanner\n const scannedManifest = await this.scanAndBuildManifest(\n scannerConfig,\n options,\n );\n\n // 4. Enrich manifest with metadata (smrtDependencies, packageInfo)\n const manifest = this.enrichManifest(\n scannedManifest,\n options,\n scannerConfig,\n );\n\n // 5. Write output files\n this.normalizeFilePaths(manifest);\n await this.writeOutput(manifest, options);\n\n return manifest;\n }\n\n private normalizeFilePaths(manifest: SmartObjectManifest): void {\n const workspaceRoot = this.findWorkspaceRoot(process.cwd());\n\n for (const obj of Object.values(manifest.objects || {})) {\n if (obj.filePath && isAbsolute(obj.filePath)) {\n obj.filePath = relative(workspaceRoot, obj.filePath).replace(\n /\\\\/g,\n '/',\n );\n }\n }\n }\n\n private findWorkspaceRoot(startDir: string): string {\n let current = resolve(startDir);\n\n while (true) {\n if (\n existsSync(resolve(current, 'pnpm-workspace.yaml')) ||\n existsSync(resolve(current, '.git'))\n ) {\n return current;\n }\n\n const parent = dirname(current);\n if (parent === current) {\n return resolve(startDir);\n }\n current = parent;\n }\n }\n\n /**\n * Discover source files based on include/exclude patterns\n */\n private discoverFiles(options: ManifestBuilderOptions): string[] {\n const include = options.include || ['src/**/*.ts'];\n const exclude = options.exclude || ['src/**/*.d.ts', 'node_modules/**'];\n\n return fg.sync(include, {\n absolute: true,\n ignore: exclude,\n });\n }\n\n /**\n * Configure AST scanner with baseClasses, external packages, and vite config\n */\n private async configureScanner(\n options: ManifestBuilderOptions,\n ): Promise<ScannerConfig> {\n let baseClasses = options.baseClasses || [\n 'SmrtObject',\n 'SmrtClass',\n 'SmrtCollection',\n ];\n\n // Load from vite.config.ts if requested\n if (options.loadViteConfig) {\n const viteBaseClasses = await this.loadViteConfigBaseClasses();\n if (viteBaseClasses && viteBaseClasses.length > 0) {\n baseClasses = viteBaseClasses;\n console.log(\n `[smrt] Using baseClasses from vite.config.ts: ${baseClasses.join(', ')}`,\n );\n }\n }\n\n // Discover external SMRT packages\n let smrtDependencies: string[] = [];\n if (options.discoverExternalPackages) {\n console.log('[smrt] Discovering external SMRT packages...');\n smrtDependencies = discoverSmrtPackages();\n console.log(\n `[smrt] Found ${smrtDependencies.length} SMRT package(s): ${smrtDependencies.join(', ')}`,\n );\n\n // Optionally add external base classes\n if (options.includeExternalBaseClasses) {\n const externalClasses =\n await this.loadExternalBaseClasses(smrtDependencies);\n if (externalClasses.length > 0) {\n baseClasses = [...baseClasses, ...externalClasses];\n console.log(\n `[smrt] Added ${externalClasses.length} external base class(es) to scanner`,\n );\n console.log(`[smrt] Total baseClasses: ${baseClasses.length}`);\n }\n }\n }\n\n return {\n baseClasses,\n includePrivateMethods: options.includePrivateMethods ?? false,\n includeStaticMethods: options.includeStaticMethods ?? true,\n followImports: options.followImports ?? false,\n smrtDependencies,\n };\n }\n\n /**\n * Scan files using OxcScanner and build manifest via ManifestAdapter.\n *\n * This replaces the old ASTScanner-based scanFiles() method.\n * Uses the same OXC pipeline as the Vite plugin's scanWithOxc().\n */\n private async scanAndBuildManifest(\n config: ScannerConfig,\n options: ManifestBuilderOptions,\n ): Promise<SmartObjectManifest> {\n const { OxcScanner, ManifestAdapter } = await importScanner();\n\n const scanner = new OxcScanner({\n cwd: process.cwd(),\n include: options.include || ['src/**/*.ts'],\n exclude: options.exclude || ['src/**/*.d.ts', 'node_modules/**'],\n baseClasses: config.baseClasses,\n includePrivateMethods: config.includePrivateMethods,\n includeStaticMethods: config.includeStaticMethods,\n followImports: config.followImports,\n });\n\n const { results, resolved } = await scanner.scanAndResolve();\n\n // Read package.json for metadata\n let packageName: string | undefined;\n let packageVersion: string | undefined;\n let packageJson: any;\n try {\n const pkgPath = resolve(process.cwd(), 'package.json');\n const pkgContent = readFileSync(pkgPath, 'utf-8');\n packageJson = JSON.parse(pkgContent);\n packageName = packageJson.name || undefined;\n packageVersion = packageJson.version || undefined;\n } catch {\n // package.json not found - continue without packageName\n }\n\n // Convert to manifest format\n const adapter = new ManifestAdapter();\n const manifest = adapter.toManifest(resolved, {\n packageName,\n packageVersion,\n typeAliases: results.typeAliases,\n });\n\n // Set smrtDependencies BEFORE mergeInheritedFields so external packages can be loaded\n if (config.smrtDependencies && config.smrtDependencies.length > 0) {\n manifest.smrtDependencies = config.smrtDependencies;\n }\n\n // Run manifest generation passes (same as Vite plugin path)\n const manifestGen = new ManifestGenerator();\n manifestGen.injectTenantScopedFields(manifest);\n manifestGen.mergeInheritedFields(manifest);\n manifestGen.generateValidationRules(manifest);\n manifestGen.generateSchemas(manifest);\n manifestGen.assertTenantScopedSchemaContract(manifest);\n manifestGen.generateAgentManifests(manifest, packageName, packageJson);\n\n return manifest;\n }\n\n /**\n * Enrich manifest with metadata (moduleType, smrtDependencies, packageInfo).\n *\n * Note: As of Issue #1013, this method no longer merges external package\n * objects into the manifest. Dependencies are referenced via\n * `smrtDependencies` and resolved at runtime by manifest-loader.ts.\n */\n private enrichManifest(\n manifest: SmartObjectManifest,\n options: ManifestBuilderOptions,\n scannerConfig: ScannerConfig,\n ): SmartObjectManifest {\n // Add module type\n manifest.moduleType = options.moduleType || 'smrt';\n\n // Record dependency references (not their objects) so runtime\n // manifest-loader.ts can discover and load them on demand.\n if (\n scannerConfig.smrtDependencies &&\n scannerConfig.smrtDependencies.length > 0\n ) {\n manifest.smrtDependencies = scannerConfig.smrtDependencies;\n }\n\n // Inject package info\n if (options.injectPackageInfo) {\n const packageInfo = this.readPackageJson();\n if (packageInfo.name) {\n manifest.packageName = packageInfo.name;\n console.log(`[smrt] Injected package name: ${packageInfo.name}`);\n } else {\n console.warn(\n '[smrt] Warning: Could not read package.json, packageName will be undefined',\n );\n }\n }\n\n return manifest;\n }\n\n /**\n * Write manifest JSON and optional TypeScript stub\n */\n private async writeOutput(\n manifest: SmartObjectManifest,\n options: ManifestBuilderOptions,\n ): Promise<void> {\n const manager = new ManifestManager(process.cwd());\n const isTest =\n options.outputName?.includes('test') ||\n options.stubName?.includes('test');\n const mode = isTest ? 'dev' : 'build';\n\n // 1. Always write to the unified location via ManifestManager\n manager.write(manifest, mode);\n\n // 2. Legacy/Explicit Output (if requested or for stubs)\n const outputDir = options.outputDir || 'src/manifest';\n const outputName = options.outputName || 'manifest.json';\n\n // Ensure output directory exists for legacy/stubs\n mkdirSync(outputDir, { recursive: true });\n\n // Write JSON manifest to legacy location if different from unified path\n const manifestPath = resolve(outputDir, outputName);\n const unifiedPath = manager.getOutputPath(mode);\n\n if (resolve(manifestPath) !== resolve(unifiedPath)) {\n writeFileSync(manifestPath, JSON.stringify(manifest, null, 2));\n }\n\n // Write TypeScript stub if requested\n if (options.generateTypeStub) {\n const stubName = options.stubName || 'manifest.ts';\n const tsContent = this.generateTypeStub(manifest, stubName);\n const stubPath = resolve(outputDir, stubName);\n writeFileSync(stubPath, tsContent);\n }\n\n const objectCount = Object.keys(manifest.objects).length;\n console.log(`[smrt] ✅ Generated manifest with ${objectCount} object(s)`);\n console.log(`[smrt] Unified: ${unifiedPath}`);\n }\n\n /**\n * Generate TypeScript stub file with manifest constant\n */\n private generateTypeStub(\n manifest: SmartObjectManifest,\n filename: string,\n ): string {\n const isTestManifest = filename.includes('test');\n\n const comment = isTestManifest\n ? `/**\n * Test manifest stub\n * This file is replaced by generate-test-manifest.js during pretest\n * If tests run without pretest, this empty manifest is used\n *\n * DO NOT EDIT MANUALLY - This file is automatically generated\n */`\n : `/**\n * Auto-generated static manifest\n * Generated at build time from SMRT object scanning\n * DO NOT EDIT - This file is automatically generated\n */`;\n\n const exportName = isTestManifest ? 'testManifest' : 'staticManifest';\n\n // Use relative import for core package (to avoid self-reference during build),\n // package import for all other packages\n const isCorePackage = manifest.packageName === '@happyvertical/smrt-core';\n const importPath = isCorePackage\n ? '../scanner/types.js'\n : '@happyvertical/smrt-core/scanner/types';\n\n return `${comment}\n\nimport type { SmartObjectManifest } from '${importPath}';\n\nexport const ${exportName}: SmartObjectManifest = ${JSON.stringify(manifest, null, 2)} as const;\n\nexport default ${exportName};\n`;\n }\n\n /**\n * Load baseClasses from vite.config.ts\n */\n private async loadViteConfigBaseClasses(): Promise<string[] | null> {\n try {\n const viteConfigPath = resolve(process.cwd(), 'vite.config.ts');\n if (!existsSync(viteConfigPath)) {\n console.log('[smrt] vite.config.ts not found');\n return null;\n }\n\n console.log('[smrt] Found vite.config.ts, attempting to load...');\n\n // Use vite to load config which handles TypeScript\n const { loadConfigFromFile } = await import('vite');\n const loaded = await loadConfigFromFile(\n { command: 'build', mode: 'test' },\n viteConfigPath,\n );\n\n if (!loaded?.config?.plugins) {\n console.log('[smrt] No plugins found in vite config');\n return null;\n }\n\n console.log(\n '[smrt] Vite config loaded, plugins:',\n loaded.config.plugins.map((p: any) => p?.name),\n );\n\n // Find smrtPlugin in plugins array\n const smrtPlugin = loaded.config.plugins.find(\n (p: any) => p?.name === 'smrt-auto-service',\n );\n\n if (!smrtPlugin) {\n console.log(\n '[smrt] smrt-auto-service plugin not found in plugins array',\n );\n return null;\n }\n\n console.log('[smrt] Found smrt-auto-service plugin');\n\n // Try different ways to access options\n let opts =\n (smrtPlugin as any).api?.options ||\n (smrtPlugin as any).options ||\n (smrtPlugin as any)._options;\n\n if (!opts && typeof (smrtPlugin as any).api === 'function') {\n try {\n const api = (smrtPlugin as any).api();\n opts = api.options;\n } catch (e) {\n console.log('[smrt] Could not call plugin.api()');\n }\n }\n\n if (opts?.baseClasses) {\n console.log(\n '[smrt] Plugin options:',\n JSON.stringify({\n baseClasses: opts.baseClasses,\n followImports: opts.followImports,\n }),\n );\n return opts.baseClasses;\n }\n\n console.log('[smrt] Could not access plugin options');\n return null;\n } catch (error: any) {\n console.log('[smrt] Error loading vite.config.ts:', error.message);\n console.log('[smrt] Using default baseClasses');\n return null;\n }\n }\n\n /**\n * Load base classes from external SMRT package manifests\n */\n private async loadExternalBaseClasses(packages: string[]): Promise<string[]> {\n const externalBaseClasses: string[] = [];\n\n for (const pkgName of packages) {\n // Resolve the manifest the same way discovery does (honors `.smrt/` and\n // `src/manifest/`, not just `dist/`) so source-only workspace packages\n // still contribute base classes (#1378).\n const manifestPath = resolveManifestPath(pkgName, process.cwd());\n if (!manifestPath) {\n console.log(`[smrt] ${pkgName}: no SMRT manifest resolved`);\n continue;\n }\n\n try {\n const manifestContent = readFileSync(manifestPath, 'utf-8');\n const manifest = JSON.parse(manifestContent);\n\n // Extract all class names from this package\n const foundClassNames: string[] = [];\n for (const objDef of Object.values(manifest.objects)) {\n if ((objDef as any).className) {\n const className = (objDef as any).className;\n foundClassNames.push(className);\n externalBaseClasses.push(className);\n }\n }\n\n console.log(\n `[smrt] ${pkgName}: found ${foundClassNames.length} class(es) - ${foundClassNames.join(', ')}`,\n );\n } catch (error: any) {\n console.log(\n `[smrt] ${pkgName}: manifest not found or invalid - ${error.message}`,\n );\n }\n }\n\n return externalBaseClasses;\n }\n\n /**\n * Read package.json from current working directory\n */\n private readPackageJson(): PackageInfo {\n try {\n const packageJsonPath = resolve(process.cwd(), 'package.json');\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n return {\n name: packageJson.name,\n version: packageJson.version,\n };\n } catch (error) {\n return {};\n }\n }\n\n /**\n * Create empty manifest when no files found\n */\n private createEmptyManifest(\n options: ManifestBuilderOptions,\n ): SmartObjectManifest {\n const manifest: SmartObjectManifest = {\n version: '1.0.0',\n timestamp: Date.now(),\n objects: {},\n moduleType: options.moduleType || 'smrt',\n };\n\n if (options.discoverExternalPackages) {\n manifest.smrtDependencies = discoverSmrtPackages();\n }\n\n if (options.injectPackageInfo) {\n const packageInfo = this.readPackageJson();\n if (packageInfo.name) {\n manifest.packageName = packageInfo.name;\n }\n }\n\n return manifest;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { SmartObjectManifest } from '../scanner/types';
|
|
2
|
+
export { ManifestGenerator } from '../scanner/manifest-generator';
|
|
3
|
+
export type { SmartObjectDefinition, SmartObjectManifest, } from '../scanner/types';
|
|
4
|
+
export type { ManifestBuilderOptions } from './generator';
|
|
5
|
+
export { ManifestBuilder } from './generator';
|
|
6
|
+
export { ManifestManager } from './manager';
|
|
7
|
+
export { discoverManifestEntry, findManifestEntryByQualifiedName, loadExternalManifest, loadExternalManifestSync, loadLocalTestManifestSync, loadManifestFromPathSync, } from './manifest-loader';
|
|
8
|
+
export declare const manifest: SmartObjectManifest;
|
|
9
|
+
export declare const staticManifest: SmartObjectManifest;
|
|
10
|
+
export default manifest;
|
|
11
|
+
/**
|
|
12
|
+
* Get manifest data (static at runtime)
|
|
13
|
+
* No longer requires TypeScript compiler or file scanning.
|
|
14
|
+
*/
|
|
15
|
+
export declare function getManifest(): Promise<SmartObjectManifest>;
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/manifest/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAG5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,YAAY,EACV,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EACL,qBAAqB,EACrB,gCAAgC,EAChC,oBAAoB,EACpB,wBAAwB,EACxB,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,mBAAmB,CAAC;AAgC3B,eAAO,MAAM,QAAQ,qBAAuB,CAAC;AAC7C,eAAO,MAAM,cAAc,qBAAW,CAAC;AACvC,eAAe,QAAQ,CAAC;AAExB;;;GAGG;AACH,wBAAgB,WAAW,iCAE1B"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { ManifestGenerator } from "../scanner/manifest-generator.js";
|
|
5
|
+
import "fast-glob";
|
|
6
|
+
import "./discover-smrt-packages.js";
|
|
7
|
+
import { ManifestManager } from "./manager.js";
|
|
8
|
+
import { discoverManifestEntry, findManifestEntryByQualifiedName, loadExternalManifest, loadExternalManifestSync, loadLocalTestManifestSync, loadManifestFromPathSync } from "./manifest-loader.js";
|
|
9
|
+
const EMPTY_STATIC_MANIFEST = {
|
|
10
|
+
version: "1.0.0",
|
|
11
|
+
timestamp: 0,
|
|
12
|
+
objects: {},
|
|
13
|
+
packageName: "@happyvertical/smrt-core"
|
|
14
|
+
};
|
|
15
|
+
function loadStaticManifest() {
|
|
16
|
+
const currentDir = dirname(fileURLToPath(import.meta.url));
|
|
17
|
+
const manifestCandidates = [
|
|
18
|
+
join(currentDir, "static-manifest.json"),
|
|
19
|
+
join(currentDir, "..", "manifest.json"),
|
|
20
|
+
join(currentDir, "..", "..", "dist", "manifest.json")
|
|
21
|
+
];
|
|
22
|
+
for (const manifestPath of manifestCandidates) {
|
|
23
|
+
if (!existsSync(manifestPath)) {
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
return JSON.parse(readFileSync(manifestPath, "utf-8"));
|
|
28
|
+
} catch {
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return EMPTY_STATIC_MANIFEST;
|
|
32
|
+
}
|
|
33
|
+
const manifest = loadStaticManifest();
|
|
34
|
+
const staticManifest = manifest;
|
|
35
|
+
function getManifest() {
|
|
36
|
+
return Promise.resolve(manifest);
|
|
37
|
+
}
|
|
38
|
+
export {
|
|
39
|
+
ManifestGenerator,
|
|
40
|
+
ManifestManager,
|
|
41
|
+
discoverManifestEntry,
|
|
42
|
+
findManifestEntryByQualifiedName,
|
|
43
|
+
getManifest,
|
|
44
|
+
loadExternalManifest,
|
|
45
|
+
loadExternalManifestSync,
|
|
46
|
+
loadLocalTestManifestSync,
|
|
47
|
+
loadManifestFromPathSync,
|
|
48
|
+
manifest,
|
|
49
|
+
staticManifest
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/manifest/index.ts"],"sourcesContent":["/**\n * Static manifest module for runtime use\n * Uses pre-generated manifest from build time instead of runtime scanning\n */\n\nimport { existsSync, readFileSync } from 'node:fs';\nimport { dirname, join } from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport type { SmartObjectManifest } from '../scanner/types';\n\n// Re-export utility functions that work with static manifest\nexport { ManifestGenerator } from '../scanner/manifest-generator';\nexport type {\n SmartObjectDefinition,\n SmartObjectManifest,\n} from '../scanner/types';\nexport type { ManifestBuilderOptions } from './generator';\nexport { ManifestBuilder } from './generator';\nexport { ManifestManager } from './manager';\nexport {\n discoverManifestEntry,\n findManifestEntryByQualifiedName,\n loadExternalManifest,\n loadExternalManifestSync,\n loadLocalTestManifestSync,\n loadManifestFromPathSync,\n} from './manifest-loader';\n\nconst EMPTY_STATIC_MANIFEST: SmartObjectManifest = {\n version: '1.0.0',\n timestamp: 0,\n objects: {},\n packageName: '@happyvertical/smrt-core',\n};\n\nfunction loadStaticManifest(): SmartObjectManifest {\n const currentDir = dirname(fileURLToPath(import.meta.url));\n const manifestCandidates = [\n join(currentDir, 'static-manifest.json'),\n join(currentDir, '..', 'manifest.json'),\n join(currentDir, '..', '..', 'dist', 'manifest.json'),\n ];\n\n for (const manifestPath of manifestCandidates) {\n if (!existsSync(manifestPath)) {\n continue;\n }\n\n try {\n return JSON.parse(readFileSync(manifestPath, 'utf-8'));\n } catch {\n // Fall through to the next candidate or the empty manifest.\n }\n }\n\n return EMPTY_STATIC_MANIFEST;\n}\n\nexport const manifest = loadStaticManifest();\nexport const staticManifest = manifest;\nexport default manifest;\n\n/**\n * Get manifest data (static at runtime)\n * No longer requires TypeScript compiler or file scanning.\n */\nexport function getManifest() {\n return Promise.resolve(manifest);\n}\n"],"names":[],"mappings":";;;;;;;;AA4BA,MAAM,wBAA6C;AAAA,EACjD,SAAS;AAAA,EACT,WAAW;AAAA,EACX,SAAS,CAAA;AAAA,EACT,aAAa;AACf;AAEA,SAAS,qBAA0C;AACjD,QAAM,aAAa,QAAQ,cAAc,YAAY,GAAG,CAAC;AACzD,QAAM,qBAAqB;AAAA,IACzB,KAAK,YAAY,sBAAsB;AAAA,IACvC,KAAK,YAAY,MAAM,eAAe;AAAA,IACtC,KAAK,YAAY,MAAM,MAAM,QAAQ,eAAe;AAAA,EAAA;AAGtD,aAAW,gBAAgB,oBAAoB;AAC7C,QAAI,CAAC,WAAW,YAAY,GAAG;AAC7B;AAAA,IACF;AAEA,QAAI;AACF,aAAO,KAAK,MAAM,aAAa,cAAc,OAAO,CAAC;AAAA,IACvD,QAAQ;AAAA,IAER;AAAA,EACF;AAEA,SAAO;AACT;AAEO,MAAM,WAAW,mBAAA;AACjB,MAAM,iBAAiB;AAOvB,SAAS,cAAc;AAC5B,SAAO,QAAQ,QAAQ,QAAQ;AACjC;"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { SmartObjectManifest } from '../scanner/types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Reads, writes, and generates SMRT manifests for a project.
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* Manifests are JSON files containing class/field metadata produced by the AST scanner.
|
|
7
|
+
* Dev manifests live at `.smrt/manifest.json`; build manifests at `dist/manifest.json`.
|
|
8
|
+
* Workspace packages may also provide a checked-in source manifest at
|
|
9
|
+
* `src/manifest/manifest.json`. When loading a local project, the dev path takes
|
|
10
|
+
* priority; for external packages (dependencies), the build path takes priority
|
|
11
|
+
* to avoid pulling in test objects.
|
|
12
|
+
*/
|
|
13
|
+
export declare class ManifestManager {
|
|
14
|
+
private projectRoot;
|
|
15
|
+
constructor(projectRoot: string);
|
|
16
|
+
/**
|
|
17
|
+
* Get the standard output path for the manifest based on mode.
|
|
18
|
+
*/
|
|
19
|
+
getOutputPath(mode: 'dev' | 'build' | 'source'): string;
|
|
20
|
+
/**
|
|
21
|
+
* Loads the local manifest from the standard locations.
|
|
22
|
+
* Priority: .smrt/manifest.json -> dist/manifest.json -> src/manifest/manifest.json
|
|
23
|
+
*/
|
|
24
|
+
loadLocal(): SmartObjectManifest | null;
|
|
25
|
+
/**
|
|
26
|
+
* Loads the manifest for an external package (dependency).
|
|
27
|
+
* Priority: dist/manifest.json -> .smrt/manifest.json -> src/manifest/manifest.json
|
|
28
|
+
*
|
|
29
|
+
* External packages should prefer their production (dist) manifest
|
|
30
|
+
* over the dev/test (.smrt) manifest to avoid pulling in test objects
|
|
31
|
+
* and transitive dependencies. In a workspace, the checked-in source manifest
|
|
32
|
+
* provides the same package metadata even when the sibling package has not been built yet.
|
|
33
|
+
*/
|
|
34
|
+
loadForExternalPackage(): SmartObjectManifest | null;
|
|
35
|
+
private _loadFromPaths;
|
|
36
|
+
/**
|
|
37
|
+
* Writes a manifest to the standard location.
|
|
38
|
+
*/
|
|
39
|
+
write(manifest: SmartObjectManifest, mode?: 'dev' | 'build'): void;
|
|
40
|
+
/**
|
|
41
|
+
* Generates a manifest from scan results and writes it.
|
|
42
|
+
*/
|
|
43
|
+
generateFromScanResults(scanResults: any[], options: {
|
|
44
|
+
mode: 'dev' | 'build';
|
|
45
|
+
packageName?: string;
|
|
46
|
+
packageVersion?: string;
|
|
47
|
+
packageJson?: any;
|
|
48
|
+
smrtDependencies?: string[];
|
|
49
|
+
}): Promise<SmartObjectManifest>;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/manifest/manager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAI/D;;;;;;;;;;GAUG;AACH,qBAAa,eAAe;IACd,OAAO,CAAC,WAAW;gBAAX,WAAW,EAAE,MAAM;IAEvC;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM;IAUvD;;;OAGG;IACH,SAAS,IAAI,mBAAmB,GAAG,IAAI;IAQvC;;;;;;;;OAQG;IACH,sBAAsB,IAAI,mBAAmB,GAAG,IAAI;IAQpD,OAAO,CAAC,cAAc;IAiBtB;;OAEG;IACH,KAAK,CAAC,QAAQ,EAAE,mBAAmB,EAAE,IAAI,GAAE,KAAK,GAAG,OAAe,GAAG,IAAI;IAWzE;;OAEG;IACG,uBAAuB,CAC3B,WAAW,EAAE,GAAG,EAAE,EAClB,OAAO,EAAE;QACP,IAAI,EAAE,KAAK,GAAG,OAAO,CAAC;QACtB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,WAAW,CAAC,EAAE,GAAG,CAAC;QAClB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;KAC7B,GACA,OAAO,CAAC,mBAAmB,CAAC;CAMhC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { existsSync, readFileSync, mkdirSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { join, dirname } from "node:path";
|
|
3
|
+
import { createLogger } from "@happyvertical/logger";
|
|
4
|
+
import { ManifestGenerator } from "../scanner/manifest-generator.js";
|
|
5
|
+
const logger = createLogger({ level: "info" });
|
|
6
|
+
class ManifestManager {
|
|
7
|
+
constructor(projectRoot) {
|
|
8
|
+
this.projectRoot = projectRoot;
|
|
9
|
+
}
|
|
10
|
+
projectRoot;
|
|
11
|
+
/**
|
|
12
|
+
* Get the standard output path for the manifest based on mode.
|
|
13
|
+
*/
|
|
14
|
+
getOutputPath(mode) {
|
|
15
|
+
if (mode === "dev") {
|
|
16
|
+
return join(this.projectRoot, ".smrt/manifest.json");
|
|
17
|
+
}
|
|
18
|
+
if (mode === "source") {
|
|
19
|
+
return join(this.projectRoot, "src/manifest/manifest.json");
|
|
20
|
+
}
|
|
21
|
+
return join(this.projectRoot, "dist/manifest.json");
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Loads the local manifest from the standard locations.
|
|
25
|
+
* Priority: .smrt/manifest.json -> dist/manifest.json -> src/manifest/manifest.json
|
|
26
|
+
*/
|
|
27
|
+
loadLocal() {
|
|
28
|
+
return this._loadFromPaths([
|
|
29
|
+
this.getOutputPath("dev"),
|
|
30
|
+
this.getOutputPath("build"),
|
|
31
|
+
this.getOutputPath("source")
|
|
32
|
+
]);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Loads the manifest for an external package (dependency).
|
|
36
|
+
* Priority: dist/manifest.json -> .smrt/manifest.json -> src/manifest/manifest.json
|
|
37
|
+
*
|
|
38
|
+
* External packages should prefer their production (dist) manifest
|
|
39
|
+
* over the dev/test (.smrt) manifest to avoid pulling in test objects
|
|
40
|
+
* and transitive dependencies. In a workspace, the checked-in source manifest
|
|
41
|
+
* provides the same package metadata even when the sibling package has not been built yet.
|
|
42
|
+
*/
|
|
43
|
+
loadForExternalPackage() {
|
|
44
|
+
return this._loadFromPaths([
|
|
45
|
+
this.getOutputPath("build"),
|
|
46
|
+
this.getOutputPath("dev"),
|
|
47
|
+
this.getOutputPath("source")
|
|
48
|
+
]);
|
|
49
|
+
}
|
|
50
|
+
_loadFromPaths(paths) {
|
|
51
|
+
for (const path of paths) {
|
|
52
|
+
if (existsSync(path)) {
|
|
53
|
+
try {
|
|
54
|
+
const content = readFileSync(path, "utf-8");
|
|
55
|
+
return JSON.parse(content);
|
|
56
|
+
} catch (error) {
|
|
57
|
+
logger.error(`[ManifestManager] Failed to read manifest at ${path}`, {
|
|
58
|
+
error
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Writes a manifest to the standard location.
|
|
67
|
+
*/
|
|
68
|
+
write(manifest, mode = "dev") {
|
|
69
|
+
const outputPath = this.getOutputPath(mode);
|
|
70
|
+
const outputDir = dirname(outputPath);
|
|
71
|
+
if (!existsSync(outputDir)) {
|
|
72
|
+
mkdirSync(outputDir, { recursive: true });
|
|
73
|
+
}
|
|
74
|
+
writeFileSync(outputPath, JSON.stringify(manifest, null, 2));
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Generates a manifest from scan results and writes it.
|
|
78
|
+
*/
|
|
79
|
+
async generateFromScanResults(scanResults, options) {
|
|
80
|
+
const generator = new ManifestGenerator();
|
|
81
|
+
const manifest = generator.generateManifest(scanResults, options);
|
|
82
|
+
this.write(manifest, options.mode);
|
|
83
|
+
return manifest;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
export {
|
|
87
|
+
ManifestManager
|
|
88
|
+
};
|
|
89
|
+
//# sourceMappingURL=manager.js.map
|