@endora-commerce/platform 0.100.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/LICENSE +21 -0
- package/README.md +58 -0
- package/dist/cli/dispatch.d.ts +146 -0
- package/dist/cli/dispatch.d.ts.map +1 -0
- package/dist/cli/dispatch.js +259 -0
- package/dist/cli/dispatch.js.map +1 -0
- package/dist/cli/index.d.ts +58 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +58 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/module-commands.d.ts +118 -0
- package/dist/cli/module-commands.d.ts.map +1 -0
- package/dist/cli/module-commands.js +120 -0
- package/dist/cli/module-commands.js.map +1 -0
- package/dist/commands/actor.d.ts +19 -0
- package/dist/commands/actor.d.ts.map +1 -0
- package/dist/commands/actor.js +45 -0
- package/dist/commands/actor.js.map +1 -0
- package/dist/commands/audit-from-context.d.ts +24 -0
- package/dist/commands/audit-from-context.d.ts.map +1 -0
- package/dist/commands/audit-from-context.js +28 -0
- package/dist/commands/audit-from-context.js.map +1 -0
- package/dist/commands/command-bus.d.ts +40 -0
- package/dist/commands/command-bus.d.ts.map +1 -0
- package/dist/commands/command-bus.js +46 -0
- package/dist/commands/command-bus.js.map +1 -0
- package/dist/commands/command.d.ts +76 -0
- package/dist/commands/command.d.ts.map +1 -0
- package/dist/commands/command.js +2 -0
- package/dist/commands/command.js.map +1 -0
- package/dist/commands/index.d.ts +65 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +57 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/reversible.d.ts +66 -0
- package/dist/commands/reversible.d.ts.map +1 -0
- package/dist/commands/reversible.js +41 -0
- package/dist/commands/reversible.js.map +1 -0
- package/dist/composition/compose-app.d.ts +305 -0
- package/dist/composition/compose-app.d.ts.map +1 -0
- package/dist/composition/compose-app.js +939 -0
- package/dist/composition/compose-app.js.map +1 -0
- package/dist/composition/index.d.ts +92 -0
- package/dist/composition/index.d.ts.map +1 -0
- package/dist/composition/index.js +175 -0
- package/dist/composition/index.js.map +1 -0
- package/dist/composition/newsletter-token-secret.d.ts +19 -0
- package/dist/composition/newsletter-token-secret.d.ts.map +1 -0
- package/dist/composition/newsletter-token-secret.js +24 -0
- package/dist/composition/newsletter-token-secret.js.map +1 -0
- package/dist/composition/process-runs-workers.d.ts +17 -0
- package/dist/composition/process-runs-workers.d.ts.map +1 -0
- package/dist/composition/process-runs-workers.js +19 -0
- package/dist/composition/process-runs-workers.js.map +1 -0
- package/dist/db/baseline-migration-inventory.d.ts +15 -0
- package/dist/db/baseline-migration-inventory.d.ts.map +1 -0
- package/dist/db/baseline-migration-inventory.js +115 -0
- package/dist/db/baseline-migration-inventory.js.map +1 -0
- package/dist/db/configured-entities.d.ts +74 -0
- package/dist/db/configured-entities.d.ts.map +1 -0
- package/dist/db/configured-entities.js +20 -0
- package/dist/db/configured-entities.js.map +1 -0
- package/dist/db/configured-migrations.d.ts +199 -0
- package/dist/db/configured-migrations.d.ts.map +1 -0
- package/dist/db/configured-migrations.js +181 -0
- package/dist/db/configured-migrations.js.map +1 -0
- package/dist/db/index.d.ts +54 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +54 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/migrate.d.ts +21 -0
- package/dist/db/migrate.d.ts.map +1 -0
- package/dist/db/migrate.js +48 -0
- package/dist/db/migrate.js.map +1 -0
- package/dist/db/migration-order.d.ts +159 -0
- package/dist/db/migration-order.d.ts.map +1 -0
- package/dist/db/migration-order.js +273 -0
- package/dist/db/migration-order.js.map +1 -0
- package/dist/db/mikro-orm.config.d.ts +51 -0
- package/dist/db/mikro-orm.config.d.ts.map +1 -0
- package/dist/db/mikro-orm.config.js +64 -0
- package/dist/db/mikro-orm.config.js.map +1 -0
- package/dist/db/orm.d.ts +40 -0
- package/dist/db/orm.d.ts.map +1 -0
- package/dist/db/orm.js +25 -0
- package/dist/db/orm.js.map +1 -0
- package/dist/db/platform-schema.d.ts +102 -0
- package/dist/db/platform-schema.d.ts.map +1 -0
- package/dist/db/platform-schema.js +79 -0
- package/dist/db/platform-schema.js.map +1 -0
- package/dist/db/pluralizing-naming-strategy.d.ts +16 -0
- package/dist/db/pluralizing-naming-strategy.d.ts.map +1 -0
- package/dist/db/pluralizing-naming-strategy.js +66 -0
- package/dist/db/pluralizing-naming-strategy.js.map +1 -0
- package/dist/demo/guard.d.ts +101 -0
- package/dist/demo/guard.d.ts.map +1 -0
- package/dist/demo/guard.js +168 -0
- package/dist/demo/guard.js.map +1 -0
- package/dist/demo/host-command.d.ts +133 -0
- package/dist/demo/host-command.d.ts.map +1 -0
- package/dist/demo/host-command.js +113 -0
- package/dist/demo/host-command.js.map +1 -0
- package/dist/demo/index.d.ts +82 -0
- package/dist/demo/index.d.ts.map +1 -0
- package/dist/demo/index.js +82 -0
- package/dist/demo/index.js.map +1 -0
- package/dist/demo/packages.d.ts +67 -0
- package/dist/demo/packages.d.ts.map +1 -0
- package/dist/demo/packages.js +132 -0
- package/dist/demo/packages.js.map +1 -0
- package/dist/demo/plan.d.ts +111 -0
- package/dist/demo/plan.d.ts.map +1 -0
- package/dist/demo/plan.js +74 -0
- package/dist/demo/plan.js.map +1 -0
- package/dist/demo/report.d.ts +17 -0
- package/dist/demo/report.d.ts.map +1 -0
- package/dist/demo/report.js +85 -0
- package/dist/demo/report.js.map +1 -0
- package/dist/demo/runner.d.ts +207 -0
- package/dist/demo/runner.d.ts.map +1 -0
- package/dist/demo/runner.js +169 -0
- package/dist/demo/runner.js.map +1 -0
- package/dist/demo/scope.d.ts +44 -0
- package/dist/demo/scope.d.ts.map +1 -0
- package/dist/demo/scope.js +44 -0
- package/dist/demo/scope.js.map +1 -0
- package/dist/env/index.d.ts +68 -0
- package/dist/env/index.d.ts.map +1 -0
- package/dist/env/index.js +427 -0
- package/dist/env/index.js.map +1 -0
- package/dist/events/bus.d.ts +29 -0
- package/dist/events/bus.d.ts.map +1 -0
- package/dist/events/bus.js +67 -0
- package/dist/events/bus.js.map +1 -0
- package/dist/events/index.d.ts +19 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +19 -0
- package/dist/events/index.js.map +1 -0
- package/dist/http/cursor.d.ts +10 -0
- package/dist/http/cursor.d.ts.map +1 -0
- package/dist/http/cursor.js +20 -0
- package/dist/http/cursor.js.map +1 -0
- package/dist/http/error-envelope.d.ts +127 -0
- package/dist/http/error-envelope.d.ts.map +1 -0
- package/dist/http/error-envelope.js +402 -0
- package/dist/http/error-envelope.js.map +1 -0
- package/dist/http/health.d.ts +88 -0
- package/dist/http/health.d.ts.map +1 -0
- package/dist/http/health.js +77 -0
- package/dist/http/health.js.map +1 -0
- package/dist/http/index.d.ts +50 -0
- package/dist/http/index.d.ts.map +1 -0
- package/dist/http/index.js +50 -0
- package/dist/http/index.js.map +1 -0
- package/dist/http/interceptors/dispatch.d.ts +14 -0
- package/dist/http/interceptors/dispatch.d.ts.map +1 -0
- package/dist/http/interceptors/dispatch.js +113 -0
- package/dist/http/interceptors/dispatch.js.map +1 -0
- package/dist/http/interceptors/index.d.ts +6 -0
- package/dist/http/interceptors/index.d.ts.map +1 -0
- package/dist/http/interceptors/index.js +5 -0
- package/dist/http/interceptors/index.js.map +1 -0
- package/dist/http/interceptors/registry.d.ts +44 -0
- package/dist/http/interceptors/registry.d.ts.map +1 -0
- package/dist/http/interceptors/registry.js +123 -0
- package/dist/http/interceptors/registry.js.map +1 -0
- package/dist/http/interceptors/route-table.d.ts +33 -0
- package/dist/http/interceptors/route-table.d.ts.map +1 -0
- package/dist/http/interceptors/route-table.js +39 -0
- package/dist/http/interceptors/route-table.js.map +1 -0
- package/dist/http/interceptors/types.d.ts +101 -0
- package/dist/http/interceptors/types.d.ts.map +1 -0
- package/dist/http/interceptors/types.js +2 -0
- package/dist/http/interceptors/types.js.map +1 -0
- package/dist/http/interceptors/validation.d.ts +22 -0
- package/dist/http/interceptors/validation.d.ts.map +1 -0
- package/dist/http/interceptors/validation.js +39 -0
- package/dist/http/interceptors/validation.js.map +1 -0
- package/dist/http/logger.d.ts +9 -0
- package/dist/http/logger.d.ts.map +1 -0
- package/dist/http/logger.js +25 -0
- package/dist/http/logger.js.map +1 -0
- package/dist/http/openapi.d.ts +21 -0
- package/dist/http/openapi.d.ts.map +1 -0
- package/dist/http/openapi.js +114 -0
- package/dist/http/openapi.js.map +1 -0
- package/dist/http/product-audience.d.ts +78 -0
- package/dist/http/product-audience.d.ts.map +1 -0
- package/dist/http/product-audience.js +92 -0
- package/dist/http/product-audience.js.map +1 -0
- package/dist/http/request-actor.d.ts +82 -0
- package/dist/http/request-actor.d.ts.map +1 -0
- package/dist/http/request-actor.js +2 -0
- package/dist/http/request-actor.js.map +1 -0
- package/dist/http/server.d.ts +60 -0
- package/dist/http/server.d.ts.map +1 -0
- package/dist/http/server.js +117 -0
- package/dist/http/server.js.map +1 -0
- package/dist/http/storefront-revalidator.d.ts +29 -0
- package/dist/http/storefront-revalidator.d.ts.map +1 -0
- package/dist/http/storefront-revalidator.js +34 -0
- package/dist/http/storefront-revalidator.js.map +1 -0
- package/dist/http/test-actor-carrier.d.ts +28 -0
- package/dist/http/test-actor-carrier.d.ts.map +1 -0
- package/dist/http/test-actor-carrier.js +10 -0
- package/dist/http/test-actor-carrier.js.map +1 -0
- package/dist/http/trusted-proxy.d.ts +48 -0
- package/dist/http/trusted-proxy.d.ts.map +1 -0
- package/dist/http/trusted-proxy.js +136 -0
- package/dist/http/trusted-proxy.js.map +1 -0
- package/dist/kernel/audit/audit-log-entry.entity.d.ts +33 -0
- package/dist/kernel/audit/audit-log-entry.entity.d.ts.map +1 -0
- package/dist/kernel/audit/audit-log-entry.entity.js +102 -0
- package/dist/kernel/audit/audit-log-entry.entity.js.map +1 -0
- package/dist/kernel/audit/audit-log-service.d.ts +63 -0
- package/dist/kernel/audit/audit-log-service.d.ts.map +1 -0
- package/dist/kernel/audit/audit-log-service.js +107 -0
- package/dist/kernel/audit/audit-log-service.js.map +1 -0
- package/dist/kernel/cache/in-process-cache-registry.d.ts +93 -0
- package/dist/kernel/cache/in-process-cache-registry.d.ts.map +1 -0
- package/dist/kernel/cache/in-process-cache-registry.js +78 -0
- package/dist/kernel/cache/in-process-cache-registry.js.map +1 -0
- package/dist/kernel/cache/shared-drop-marks.d.ts +39 -0
- package/dist/kernel/cache/shared-drop-marks.d.ts.map +1 -0
- package/dist/kernel/cache/shared-drop-marks.js +68 -0
- package/dist/kernel/cache/shared-drop-marks.js.map +1 -0
- package/dist/kernel/compose.d.ts +234 -0
- package/dist/kernel/compose.d.ts.map +1 -0
- package/dist/kernel/compose.js +279 -0
- package/dist/kernel/compose.js.map +1 -0
- package/dist/kernel/container.d.ts +95 -0
- package/dist/kernel/container.d.ts.map +1 -0
- package/dist/kernel/container.js +90 -0
- package/dist/kernel/container.js.map +1 -0
- package/dist/kernel/contribution-sinks.d.ts +106 -0
- package/dist/kernel/contribution-sinks.d.ts.map +1 -0
- package/dist/kernel/contribution-sinks.js +153 -0
- package/dist/kernel/contribution-sinks.js.map +1 -0
- package/dist/kernel/crypto/password-hasher.d.ts +3 -0
- package/dist/kernel/crypto/password-hasher.d.ts.map +1 -0
- package/dist/kernel/crypto/password-hasher.js +44 -0
- package/dist/kernel/crypto/password-hasher.js.map +1 -0
- package/dist/kernel/i18n/error-envelope-options.d.ts +56 -0
- package/dist/kernel/i18n/error-envelope-options.d.ts.map +1 -0
- package/dist/kernel/i18n/error-envelope-options.js +46 -0
- package/dist/kernel/i18n/error-envelope-options.js.map +1 -0
- package/dist/kernel/i18n/error-translation.d.ts +144 -0
- package/dist/kernel/i18n/error-translation.d.ts.map +1 -0
- package/dist/kernel/i18n/error-translation.js +84 -0
- package/dist/kernel/i18n/error-translation.js.map +1 -0
- package/dist/kernel/i18n/request-language.d.ts +80 -0
- package/dist/kernel/i18n/request-language.d.ts.map +1 -0
- package/dist/kernel/i18n/request-language.js +168 -0
- package/dist/kernel/i18n/request-language.js.map +1 -0
- package/dist/kernel/index.d.ts +142 -0
- package/dist/kernel/index.d.ts.map +1 -0
- package/dist/kernel/index.js +160 -0
- package/dist/kernel/index.js.map +1 -0
- package/dist/kernel/lazy-port.d.ts +59 -0
- package/dist/kernel/lazy-port.d.ts.map +1 -0
- package/dist/kernel/lazy-port.js +78 -0
- package/dist/kernel/lazy-port.js.map +1 -0
- package/dist/kernel/lifecycle/activation-resolver.d.ts +63 -0
- package/dist/kernel/lifecycle/activation-resolver.d.ts.map +1 -0
- package/dist/kernel/lifecycle/activation-resolver.js +70 -0
- package/dist/kernel/lifecycle/activation-resolver.js.map +1 -0
- package/dist/kernel/lifecycle/capability-registry.d.ts +145 -0
- package/dist/kernel/lifecycle/capability-registry.d.ts.map +1 -0
- package/dist/kernel/lifecycle/capability-registry.js +170 -0
- package/dist/kernel/lifecycle/capability-registry.js.map +1 -0
- package/dist/kernel/lifecycle/effective-state.d.ts +126 -0
- package/dist/kernel/lifecycle/effective-state.d.ts.map +1 -0
- package/dist/kernel/lifecycle/effective-state.js +111 -0
- package/dist/kernel/lifecycle/effective-state.js.map +1 -0
- package/dist/kernel/lifecycle/module-registration.entity.d.ts +57 -0
- package/dist/kernel/lifecycle/module-registration.entity.d.ts.map +1 -0
- package/dist/kernel/lifecycle/module-registration.entity.js +111 -0
- package/dist/kernel/lifecycle/module-registration.entity.js.map +1 -0
- package/dist/kernel/lifecycle/plugin-helpers.d.ts +165 -0
- package/dist/kernel/lifecycle/plugin-helpers.d.ts.map +1 -0
- package/dist/kernel/lifecycle/plugin-helpers.js +395 -0
- package/dist/kernel/lifecycle/plugin-helpers.js.map +1 -0
- package/dist/kernel/lifecycle/registry-cache.d.ts +318 -0
- package/dist/kernel/lifecycle/registry-cache.d.ts.map +1 -0
- package/dist/kernel/lifecycle/registry-cache.js +509 -0
- package/dist/kernel/lifecycle/registry-cache.js.map +1 -0
- package/dist/kernel/lifecycle/required-modules.d.ts +137 -0
- package/dist/kernel/lifecycle/required-modules.d.ts.map +1 -0
- package/dist/kernel/lifecycle/required-modules.js +80 -0
- package/dist/kernel/lifecycle/required-modules.js.map +1 -0
- package/dist/kernel/lifecycle/unique-module-ids.d.ts +58 -0
- package/dist/kernel/lifecycle/unique-module-ids.d.ts.map +1 -0
- package/dist/kernel/lifecycle/unique-module-ids.js +82 -0
- package/dist/kernel/lifecycle/unique-module-ids.js.map +1 -0
- package/dist/kernel/logging.d.ts +116 -0
- package/dist/kernel/logging.d.ts.map +1 -0
- package/dist/kernel/logging.js +71 -0
- package/dist/kernel/logging.js.map +1 -0
- package/dist/kernel/module-context.d.ts +563 -0
- package/dist/kernel/module-context.d.ts.map +1 -0
- package/dist/kernel/module-context.js +670 -0
- package/dist/kernel/module-context.js.map +1 -0
- package/dist/kernel/ports/audit.d.ts +115 -0
- package/dist/kernel/ports/audit.d.ts.map +1 -0
- package/dist/kernel/ports/audit.js +2 -0
- package/dist/kernel/ports/audit.js.map +1 -0
- package/dist/kernel/ports/organizations.d.ts +56 -0
- package/dist/kernel/ports/organizations.d.ts.map +1 -0
- package/dist/kernel/ports/organizations.js +2 -0
- package/dist/kernel/ports/organizations.js.map +1 -0
- package/dist/kernel/ports/provide.d.ts +14 -0
- package/dist/kernel/ports/provide.d.ts.map +1 -0
- package/dist/kernel/ports/provide.js +50 -0
- package/dist/kernel/ports/provide.js.map +1 -0
- package/dist/kernel/ports/require-admin.d.ts +61 -0
- package/dist/kernel/ports/require-admin.d.ts.map +1 -0
- package/dist/kernel/ports/require-admin.js +2 -0
- package/dist/kernel/ports/require-admin.js.map +1 -0
- package/dist/kernel/ports/require-customer.d.ts +17 -0
- package/dist/kernel/ports/require-customer.d.ts.map +1 -0
- package/dist/kernel/ports/require-customer.js +2 -0
- package/dist/kernel/ports/require-customer.js.map +1 -0
- package/dist/kernel/ports/sales-channel.d.ts +84 -0
- package/dist/kernel/ports/sales-channel.d.ts.map +1 -0
- package/dist/kernel/ports/sales-channel.js +2 -0
- package/dist/kernel/ports/sales-channel.js.map +1 -0
- package/dist/kernel/ports/settings.d.ts +59 -0
- package/dist/kernel/ports/settings.d.ts.map +1 -0
- package/dist/kernel/ports/settings.js +2 -0
- package/dist/kernel/ports/settings.js.map +1 -0
- package/dist/kernel/public-api-base-url.d.ts +98 -0
- package/dist/kernel/public-api-base-url.d.ts.map +1 -0
- package/dist/kernel/public-api-base-url.js +144 -0
- package/dist/kernel/public-api-base-url.js.map +1 -0
- package/dist/kernel/request-scope-hook.d.ts +63 -0
- package/dist/kernel/request-scope-hook.d.ts.map +1 -0
- package/dist/kernel/request-scope-hook.js +67 -0
- package/dist/kernel/request-scope-hook.js.map +1 -0
- package/dist/kernel/sales-channels/channel-bridge-registry.d.ts +109 -0
- package/dist/kernel/sales-channels/channel-bridge-registry.d.ts.map +1 -0
- package/dist/kernel/sales-channels/channel-bridge-registry.js +75 -0
- package/dist/kernel/sales-channels/channel-bridge-registry.js.map +1 -0
- package/dist/kernel/sales-channels/compose.d.ts +69 -0
- package/dist/kernel/sales-channels/compose.d.ts.map +1 -0
- package/dist/kernel/sales-channels/compose.js +43 -0
- package/dist/kernel/sales-channels/compose.js.map +1 -0
- package/dist/kernel/sales-channels/default-channel-reconciler.d.ts +66 -0
- package/dist/kernel/sales-channels/default-channel-reconciler.d.ts.map +1 -0
- package/dist/kernel/sales-channels/default-channel-reconciler.js +91 -0
- package/dist/kernel/sales-channels/default-channel-reconciler.js.map +1 -0
- package/dist/kernel/sales-channels/no-system-default-channel.error.d.ts +28 -0
- package/dist/kernel/sales-channels/no-system-default-channel.error.d.ts.map +1 -0
- package/dist/kernel/sales-channels/no-system-default-channel.error.js +33 -0
- package/dist/kernel/sales-channels/no-system-default-channel.error.js.map +1 -0
- package/dist/kernel/sales-channels/request-channel-assortment.d.ts +72 -0
- package/dist/kernel/sales-channels/request-channel-assortment.d.ts.map +1 -0
- package/dist/kernel/sales-channels/request-channel-assortment.js +83 -0
- package/dist/kernel/sales-channels/request-channel-assortment.js.map +1 -0
- package/dist/kernel/sales-channels/sales-channel-membership.service.d.ts +157 -0
- package/dist/kernel/sales-channels/sales-channel-membership.service.d.ts.map +1 -0
- package/dist/kernel/sales-channels/sales-channel-membership.service.js +302 -0
- package/dist/kernel/sales-channels/sales-channel-membership.service.js.map +1 -0
- package/dist/kernel/sales-channels/sales-channel-resolver.middleware.d.ts +76 -0
- package/dist/kernel/sales-channels/sales-channel-resolver.middleware.d.ts.map +1 -0
- package/dist/kernel/sales-channels/sales-channel-resolver.middleware.js +184 -0
- package/dist/kernel/sales-channels/sales-channel-resolver.middleware.js.map +1 -0
- package/dist/kernel/sales-channels/sales-channel-resolver.service.d.ts +82 -0
- package/dist/kernel/sales-channels/sales-channel-resolver.service.d.ts.map +1 -0
- package/dist/kernel/sales-channels/sales-channel-resolver.service.js +126 -0
- package/dist/kernel/sales-channels/sales-channel-resolver.service.js.map +1 -0
- package/dist/kernel/sales-channels/sales-channel.entity.d.ts +50 -0
- package/dist/kernel/sales-channels/sales-channel.entity.d.ts.map +1 -0
- package/dist/kernel/sales-channels/sales-channel.entity.js +132 -0
- package/dist/kernel/sales-channels/sales-channel.entity.js.map +1 -0
- package/dist/kernel/sales-channels/sales-channels-cache.d.ts +170 -0
- package/dist/kernel/sales-channels/sales-channels-cache.d.ts.map +1 -0
- package/dist/kernel/sales-channels/sales-channels-cache.js +243 -0
- package/dist/kernel/sales-channels/sales-channels-cache.js.map +1 -0
- package/dist/kernel/scope.d.ts +153 -0
- package/dist/kernel/scope.d.ts.map +1 -0
- package/dist/kernel/scope.js +172 -0
- package/dist/kernel/scope.js.map +1 -0
- package/dist/kernel/settings/compose.d.ts +49 -0
- package/dist/kernel/settings/compose.d.ts.map +1 -0
- package/dist/kernel/settings/compose.js +21 -0
- package/dist/kernel/settings/compose.js.map +1 -0
- package/dist/kernel/settings/manifest-reconciler.d.ts +78 -0
- package/dist/kernel/settings/manifest-reconciler.d.ts.map +1 -0
- package/dist/kernel/settings/manifest-reconciler.js +343 -0
- package/dist/kernel/settings/manifest-reconciler.js.map +1 -0
- package/dist/kernel/settings/secret-value-codec.d.ts +52 -0
- package/dist/kernel/settings/secret-value-codec.d.ts.map +1 -0
- package/dist/kernel/settings/secret-value-codec.js +102 -0
- package/dist/kernel/settings/secret-value-codec.js.map +1 -0
- package/dist/kernel/settings/setting-group.entity.d.ts +25 -0
- package/dist/kernel/settings/setting-group.entity.d.ts.map +1 -0
- package/dist/kernel/settings/setting-group.entity.js +79 -0
- package/dist/kernel/settings/setting-group.entity.js.map +1 -0
- package/dist/kernel/settings/setting-value.entity.d.ts +23 -0
- package/dist/kernel/settings/setting-value.entity.d.ts.map +1 -0
- package/dist/kernel/settings/setting-value.entity.js +66 -0
- package/dist/kernel/settings/setting-value.entity.js.map +1 -0
- package/dist/kernel/settings/setting.entity.d.ts +56 -0
- package/dist/kernel/settings/setting.entity.d.ts.map +1 -0
- package/dist/kernel/settings/setting.entity.js +147 -0
- package/dist/kernel/settings/setting.entity.js.map +1 -0
- package/dist/kernel/settings/settings-cache.d.ts +158 -0
- package/dist/kernel/settings/settings-cache.d.ts.map +1 -0
- package/dist/kernel/settings/settings-cache.js +253 -0
- package/dist/kernel/settings/settings-cache.js.map +1 -0
- package/dist/kernel/settings/settings.service.d.ts +142 -0
- package/dist/kernel/settings/settings.service.d.ts.map +1 -0
- package/dist/kernel/settings/settings.service.js +294 -0
- package/dist/kernel/settings/settings.service.js.map +1 -0
- package/dist/lifecycle/backend.d.ts +51 -0
- package/dist/lifecycle/backend.d.ts.map +1 -0
- package/dist/lifecycle/backend.js +40 -0
- package/dist/lifecycle/backend.js.map +1 -0
- package/dist/lifecycle/commands/activation.commands.d.ts +97 -0
- package/dist/lifecycle/commands/activation.commands.d.ts.map +1 -0
- package/dist/lifecycle/commands/activation.commands.js +142 -0
- package/dist/lifecycle/commands/activation.commands.js.map +1 -0
- package/dist/lifecycle/commands/disable.d.ts +3 -0
- package/dist/lifecycle/commands/disable.d.ts.map +1 -0
- package/dist/lifecycle/commands/disable.js +126 -0
- package/dist/lifecycle/commands/disable.js.map +1 -0
- package/dist/lifecycle/commands/enable.d.ts +3 -0
- package/dist/lifecycle/commands/enable.d.ts.map +1 -0
- package/dist/lifecycle/commands/enable.js +102 -0
- package/dist/lifecycle/commands/enable.js.map +1 -0
- package/dist/lifecycle/commands/install.d.ts +3 -0
- package/dist/lifecycle/commands/install.d.ts.map +1 -0
- package/dist/lifecycle/commands/install.js +263 -0
- package/dist/lifecycle/commands/install.js.map +1 -0
- package/dist/lifecycle/commands/operator-entry.d.ts +104 -0
- package/dist/lifecycle/commands/operator-entry.d.ts.map +1 -0
- package/dist/lifecycle/commands/operator-entry.js +127 -0
- package/dist/lifecycle/commands/operator-entry.js.map +1 -0
- package/dist/lifecycle/commands/operator-runtime.d.ts +147 -0
- package/dist/lifecycle/commands/operator-runtime.d.ts.map +1 -0
- package/dist/lifecycle/commands/operator-runtime.js +40 -0
- package/dist/lifecycle/commands/operator-runtime.js.map +1 -0
- package/dist/lifecycle/commands/status.d.ts +3 -0
- package/dist/lifecycle/commands/status.d.ts.map +1 -0
- package/dist/lifecycle/commands/status.js +108 -0
- package/dist/lifecycle/commands/status.js.map +1 -0
- package/dist/lifecycle/commands/uninstall.d.ts +3 -0
- package/dist/lifecycle/commands/uninstall.d.ts.map +1 -0
- package/dist/lifecycle/commands/uninstall.js +223 -0
- package/dist/lifecycle/commands/uninstall.js.map +1 -0
- package/dist/lifecycle/divergence-declaration.d.ts +74 -0
- package/dist/lifecycle/divergence-declaration.d.ts.map +1 -0
- package/dist/lifecycle/divergence-declaration.js +92 -0
- package/dist/lifecycle/divergence-declaration.js.map +1 -0
- package/dist/lifecycle/i18n/en.json +4 -0
- package/dist/lifecycle/i18n/pl.json +4 -0
- package/dist/lifecycle/index.d.ts +110 -0
- package/dist/lifecycle/index.d.ts.map +1 -0
- package/dist/lifecycle/index.js +189 -0
- package/dist/lifecycle/index.js.map +1 -0
- package/dist/lifecycle/manifest-registry.d.ts +244 -0
- package/dist/lifecycle/manifest-registry.d.ts.map +1 -0
- package/dist/lifecycle/manifest-registry.js +223 -0
- package/dist/lifecycle/manifest-registry.js.map +1 -0
- package/dist/lifecycle/manifest.d.ts +166 -0
- package/dist/lifecycle/manifest.d.ts.map +1 -0
- package/dist/lifecycle/manifest.js +121 -0
- package/dist/lifecycle/manifest.js.map +1 -0
- package/dist/lifecycle/plugin.d.ts +56 -0
- package/dist/lifecycle/plugin.d.ts.map +1 -0
- package/dist/lifecycle/plugin.js +59 -0
- package/dist/lifecycle/plugin.js.map +1 -0
- package/dist/lifecycle/resident.d.ts +16 -0
- package/dist/lifecycle/resident.d.ts.map +1 -0
- package/dist/lifecycle/resident.js +59 -0
- package/dist/lifecycle/resident.js.map +1 -0
- package/dist/lifecycle/routes.admin.d.ts +57 -0
- package/dist/lifecycle/routes.admin.d.ts.map +1 -0
- package/dist/lifecycle/routes.admin.js +162 -0
- package/dist/lifecycle/routes.admin.js.map +1 -0
- package/dist/lifecycle/routes.storefront.d.ts +26 -0
- package/dist/lifecycle/routes.storefront.d.ts.map +1 -0
- package/dist/lifecycle/routes.storefront.js +36 -0
- package/dist/lifecycle/routes.storefront.js.map +1 -0
- package/dist/lifecycle/services/deactivation-ledger.d.ts +216 -0
- package/dist/lifecycle/services/deactivation-ledger.d.ts.map +1 -0
- package/dist/lifecycle/services/deactivation-ledger.js +171 -0
- package/dist/lifecycle/services/deactivation-ledger.js.map +1 -0
- package/dist/lifecycle/services/dep-graph.d.ts +119 -0
- package/dist/lifecycle/services/dep-graph.d.ts.map +1 -0
- package/dist/lifecycle/services/dep-graph.js +334 -0
- package/dist/lifecycle/services/dep-graph.js.map +1 -0
- package/dist/lifecycle/services/gating-graph.d.ts +164 -0
- package/dist/lifecycle/services/gating-graph.d.ts.map +1 -0
- package/dist/lifecycle/services/gating-graph.js +203 -0
- package/dist/lifecycle/services/gating-graph.js.map +1 -0
- package/dist/lifecycle/services/lock.d.ts +27 -0
- package/dist/lifecycle/services/lock.d.ts.map +1 -0
- package/dist/lifecycle/services/lock.js +82 -0
- package/dist/lifecycle/services/lock.js.map +1 -0
- package/dist/lifecycle/services/manifest-loader.d.ts +125 -0
- package/dist/lifecycle/services/manifest-loader.d.ts.map +1 -0
- package/dist/lifecycle/services/manifest-loader.js +210 -0
- package/dist/lifecycle/services/manifest-loader.js.map +1 -0
- package/dist/lifecycle/services/migration-ownership.d.ts +36 -0
- package/dist/lifecycle/services/migration-ownership.d.ts.map +1 -0
- package/dist/lifecycle/services/migration-ownership.js +15 -0
- package/dist/lifecycle/services/migration-ownership.js.map +1 -0
- package/dist/lifecycle/services/module-id-claims.d.ts +38 -0
- package/dist/lifecycle/services/module-id-claims.d.ts.map +1 -0
- package/dist/lifecycle/services/module-id-claims.js +123 -0
- package/dist/lifecycle/services/module-id-claims.js.map +1 -0
- package/dist/lifecycle/services/module-origin.d.ts +55 -0
- package/dist/lifecycle/services/module-origin.d.ts.map +1 -0
- package/dist/lifecycle/services/module-origin.js +47 -0
- package/dist/lifecycle/services/module-origin.js.map +1 -0
- package/dist/lifecycle/services/orchestrator.d.ts +235 -0
- package/dist/lifecycle/services/orchestrator.d.ts.map +1 -0
- package/dist/lifecycle/services/orchestrator.js +954 -0
- package/dist/lifecycle/services/orchestrator.js.map +1 -0
- package/dist/lifecycle/services/presence-load.d.ts +281 -0
- package/dist/lifecycle/services/presence-load.d.ts.map +1 -0
- package/dist/lifecycle/services/presence-load.js +437 -0
- package/dist/lifecycle/services/presence-load.js.map +1 -0
- package/dist/lifecycle/services/static-registry.d.ts +47 -0
- package/dist/lifecycle/services/static-registry.d.ts.map +1 -0
- package/dist/lifecycle/services/static-registry.js +41 -0
- package/dist/lifecycle/services/static-registry.js.map +1 -0
- package/dist/migrations/20260424T165847_core_foundation_init.d.ts +25 -0
- package/dist/migrations/20260424T165847_core_foundation_init.d.ts.map +1 -0
- package/dist/migrations/20260424T165847_core_foundation_init.js +238 -0
- package/dist/migrations/20260424T165847_core_foundation_init.js.map +1 -0
- package/dist/migrations/20260425T050720_core_commerce_init.d.ts +19 -0
- package/dist/migrations/20260425T050720_core_commerce_init.d.ts.map +1 -0
- package/dist/migrations/20260425T050720_core_commerce_init.js +200 -0
- package/dist/migrations/20260425T050720_core_commerce_init.js.map +1 -0
- package/dist/migrations/20260430T101450_core_settings_init.d.ts +25 -0
- package/dist/migrations/20260430T101450_core_settings_init.d.ts.map +1 -0
- package/dist/migrations/20260430T101450_core_settings_init.js +113 -0
- package/dist/migrations/20260430T101450_core_settings_init.js.map +1 -0
- package/dist/migrations/20260430T170044_core_sales_channels_promote.d.ts +67 -0
- package/dist/migrations/20260430T170044_core_sales_channels_promote.d.ts.map +1 -0
- package/dist/migrations/20260430T170044_core_sales_channels_promote.js +101 -0
- package/dist/migrations/20260430T170044_core_sales_channels_promote.js.map +1 -0
- package/dist/migrations/20260506T200657_core_module_lifecycle_init.d.ts +21 -0
- package/dist/migrations/20260506T200657_core_module_lifecycle_init.d.ts.map +1 -0
- package/dist/migrations/20260506T200657_core_module_lifecycle_init.js +41 -0
- package/dist/migrations/20260506T200657_core_module_lifecycle_init.js.map +1 -0
- package/dist/migrations/20260514T111329_core_settings_global_value.d.ts +30 -0
- package/dist/migrations/20260514T111329_core_settings_global_value.d.ts.map +1 -0
- package/dist/migrations/20260514T111329_core_settings_global_value.js +34 -0
- package/dist/migrations/20260514T111329_core_settings_global_value.js.map +1 -0
- package/dist/migrations/20260611T140411_core_settings_secret_value_type.d.ts +26 -0
- package/dist/migrations/20260611T140411_core_settings_secret_value_type.d.ts.map +1 -0
- package/dist/migrations/20260611T140411_core_settings_secret_value_type.js +63 -0
- package/dist/migrations/20260611T140411_core_settings_secret_value_type.js.map +1 -0
- package/dist/migrations/20260611T140419_core_settings_enum_options.d.ts +19 -0
- package/dist/migrations/20260611T140419_core_settings_enum_options.d.ts.map +1 -0
- package/dist/migrations/20260611T140419_core_settings_enum_options.js +23 -0
- package/dist/migrations/20260611T140419_core_settings_enum_options.js.map +1 -0
- package/dist/migrations/20260629T090100_core_settings_hidden_flag.d.ts +20 -0
- package/dist/migrations/20260629T090100_core_settings_hidden_flag.d.ts.map +1 -0
- package/dist/migrations/20260629T090100_core_settings_hidden_flag.js +24 -0
- package/dist/migrations/20260629T090100_core_settings_hidden_flag.js.map +1 -0
- package/dist/migrations/20260717T134752_core_tenant_scope_indexes.d.ts +27 -0
- package/dist/migrations/20260717T134752_core_tenant_scope_indexes.d.ts.map +1 -0
- package/dist/migrations/20260717T134752_core_tenant_scope_indexes.js +32 -0
- package/dist/migrations/20260717T134752_core_tenant_scope_indexes.js.map +1 -0
- package/dist/migrations/20260721T011510_core_settings_credential_ref_value_type.d.ts +24 -0
- package/dist/migrations/20260721T011510_core_settings_credential_ref_value_type.d.ts.map +1 -0
- package/dist/migrations/20260721T011510_core_settings_credential_ref_value_type.js +57 -0
- package/dist/migrations/20260721T011510_core_settings_credential_ref_value_type.js.map +1 -0
- package/dist/migrations/20260816T203339_core_retire_core_activation_settings.d.ts +39 -0
- package/dist/migrations/20260816T203339_core_retire_core_activation_settings.d.ts.map +1 -0
- package/dist/migrations/20260816T203339_core_retire_core_activation_settings.js +59 -0
- package/dist/migrations/20260816T203339_core_retire_core_activation_settings.js.map +1 -0
- package/dist/migrations/20260919T101500_core_module_registrations_boot_converged.d.ts +34 -0
- package/dist/migrations/20260919T101500_core_module_registrations_boot_converged.d.ts.map +1 -0
- package/dist/migrations/20260919T101500_core_module_registrations_boot_converged.js +38 -0
- package/dist/migrations/20260919T101500_core_module_registrations_boot_converged.js.map +1 -0
- package/dist/migrations/baseline-migrations.generated.d.ts +2 -0
- package/dist/migrations/baseline-migrations.generated.d.ts.map +1 -0
- package/dist/migrations/baseline-migrations.generated.js +136 -0
- package/dist/migrations/baseline-migrations.generated.js.map +1 -0
- package/dist/migrations/index.d.ts +62 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/migrations/index.js +75 -0
- package/dist/migrations/index.js.map +1 -0
- package/dist/overlay/deployment-roots.d.ts +37 -0
- package/dist/overlay/deployment-roots.d.ts.map +1 -0
- package/dist/overlay/deployment-roots.js +90 -0
- package/dist/overlay/deployment-roots.js.map +1 -0
- package/dist/overlay/index.d.ts +62 -0
- package/dist/overlay/index.d.ts.map +1 -0
- package/dist/overlay/index.js +62 -0
- package/dist/overlay/index.js.map +1 -0
- package/dist/overlay/overlay-runtime.d.ts +173 -0
- package/dist/overlay/overlay-runtime.d.ts.map +1 -0
- package/dist/overlay/overlay-runtime.js +281 -0
- package/dist/overlay/overlay-runtime.js.map +1 -0
- package/dist/overlay/resolve-overlay.d.ts +41 -0
- package/dist/overlay/resolve-overlay.d.ts.map +1 -0
- package/dist/overlay/resolve-overlay.js +72 -0
- package/dist/overlay/resolve-overlay.js.map +1 -0
- package/dist/packages/index.d.ts +57 -0
- package/dist/packages/index.d.ts.map +1 -0
- package/dist/packages/index.js +57 -0
- package/dist/packages/index.js.map +1 -0
- package/dist/packages/installed-packages.d.ts +79 -0
- package/dist/packages/installed-packages.d.ts.map +1 -0
- package/dist/packages/installed-packages.js +312 -0
- package/dist/packages/installed-packages.js.map +1 -0
- package/dist/packages/package-entity-lookup.d.ts +120 -0
- package/dist/packages/package-entity-lookup.d.ts.map +1 -0
- package/dist/packages/package-entity-lookup.js +17 -0
- package/dist/packages/package-entity-lookup.js.map +1 -0
- package/dist/packages/package-runtime.d.ts +177 -0
- package/dist/packages/package-runtime.d.ts.map +1 -0
- package/dist/packages/package-runtime.js +386 -0
- package/dist/packages/package-runtime.js.map +1 -0
- package/dist/tenancy/derived-scope.d.ts +43 -0
- package/dist/tenancy/derived-scope.d.ts.map +1 -0
- package/dist/tenancy/derived-scope.js +76 -0
- package/dist/tenancy/derived-scope.js.map +1 -0
- package/dist/tenancy/escape-hatch.d.ts +30 -0
- package/dist/tenancy/escape-hatch.d.ts.map +1 -0
- package/dist/tenancy/escape-hatch.js +50 -0
- package/dist/tenancy/escape-hatch.js.map +1 -0
- package/dist/tenancy/filters.d.ts +87 -0
- package/dist/tenancy/filters.d.ts.map +1 -0
- package/dist/tenancy/filters.js +126 -0
- package/dist/tenancy/filters.js.map +1 -0
- package/dist/tenancy/index.d.ts +63 -0
- package/dist/tenancy/index.d.ts.map +1 -0
- package/dist/tenancy/index.js +61 -0
- package/dist/tenancy/index.js.map +1 -0
- package/dist/tenancy/org-scoped.decorator.d.ts +150 -0
- package/dist/tenancy/org-scoped.decorator.d.ts.map +1 -0
- package/dist/tenancy/org-scoped.decorator.js +339 -0
- package/dist/tenancy/org-scoped.decorator.js.map +1 -0
- package/dist/tenancy/org-write-guard.d.ts +106 -0
- package/dist/tenancy/org-write-guard.d.ts.map +1 -0
- package/dist/tenancy/org-write-guard.js +141 -0
- package/dist/tenancy/org-write-guard.js.map +1 -0
- package/dist/tenancy/resolve-tenant-context.d.ts +91 -0
- package/dist/tenancy/resolve-tenant-context.d.ts.map +1 -0
- package/dist/tenancy/resolve-tenant-context.js +85 -0
- package/dist/tenancy/resolve-tenant-context.js.map +1 -0
- package/dist/tenancy/scoped-em.d.ts +10 -0
- package/dist/tenancy/scoped-em.d.ts.map +1 -0
- package/dist/tenancy/scoped-em.js +11 -0
- package/dist/tenancy/scoped-em.js.map +1 -0
- package/dist/tenancy/tenant-context.d.ts +154 -0
- package/dist/tenancy/tenant-context.d.ts.map +1 -0
- package/dist/tenancy/tenant-context.js +109 -0
- package/dist/tenancy/tenant-context.js.map +1 -0
- package/package.json +123 -0
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
// Installed extension packages — the enumeration half (feature 080, T031).
|
|
2
|
+
//
|
|
3
|
+
// This answers one question: which `node_modules` directories does this
|
|
4
|
+
// platform read, and which of the packages in them claim to be Endora modules?
|
|
5
|
+
// Turning those claims into composer entries is `package-runtime.ts`'s job.
|
|
6
|
+
//
|
|
7
|
+
// ## What it can see
|
|
8
|
+
//
|
|
9
|
+
// - a package installed from a registry or from a tarball, in any layout that
|
|
10
|
+
// leaves the package inside the `node_modules` tree it was found under:
|
|
11
|
+
// npm/yarn's hoisted layout (a real directory), and pnpm's isolated layout
|
|
12
|
+
// (`node_modules/<name>` → `node_modules/.pnpm/<name>@<v>/node_modules/<name>`);
|
|
13
|
+
// - scoped and unscoped names alike, one level of `@scope/` deep, which is
|
|
14
|
+
// the whole of npm's namespace shape;
|
|
15
|
+
// - packages in **every** root {@link nodeModulesRootsFor} returns: the
|
|
16
|
+
// declared instance root first, then the `node_modules` chain above the
|
|
17
|
+
// running platform, which is Node's own resolution directory list.
|
|
18
|
+
//
|
|
19
|
+
// ## What it cannot see, deliberately
|
|
20
|
+
//
|
|
21
|
+
// - **a workspace member.** pnpm links one into `node_modules` from outside,
|
|
22
|
+
// so `<root>/node_modules/@endora-commerce/contracts` really is `packages/contracts`.
|
|
23
|
+
// Every such link is refused, and that is the point: this repository's own
|
|
24
|
+
// five `packages/*` must never be discovered as installed packages, and a
|
|
25
|
+
// module package that is a workspace member is a fact about *the tree* and
|
|
26
|
+
// belongs in the committed registry (D-149), not here. The predicate is
|
|
27
|
+
// where the link **lands** — the same property assertion A8 of D-110
|
|
28
|
+
// measures on the acceptance instance — and never "is there a symlink",
|
|
29
|
+
// which would refuse the only layout a real pnpm instance has;
|
|
30
|
+
// - **a `link:` or `file:` dependency onto a directory**, for the same reason
|
|
31
|
+
// and by the same rule. An author developing a module against a live
|
|
32
|
+
// instance has to `pnpm pack` and install the tarball, or point
|
|
33
|
+
// `ENDORA_INSTANCE_ROOT` at a directory whose `node_modules` holds a real
|
|
34
|
+
// install;
|
|
35
|
+
// - **anything nested inside another package's `node_modules`.** Only the top
|
|
36
|
+
// level of each root is enumerated. A transitive dependency that happens to
|
|
37
|
+
// carry an `endora` field is not something this instance installed;
|
|
38
|
+
// - **`.pnpm`, and any other dot-directory.** The store's contents are
|
|
39
|
+
// reached through the top-level link, so descending would find each package
|
|
40
|
+
// twice;
|
|
41
|
+
// - **a package that is installed but whose `package.json` cannot be read or
|
|
42
|
+
// parsed.** It is reported as `skipped`, never composed and never thrown
|
|
43
|
+
// at: one unreadable stranger must not stop a shop from booting.
|
|
44
|
+
//
|
|
45
|
+
// ## The containment test is over real paths on both sides, and that is load-bearing
|
|
46
|
+
//
|
|
47
|
+
// A workspace link is **relative** — `backend/node_modules/@endora-commerce/contracts ->
|
|
48
|
+
// ../../../packages/contracts` — so it re-roots with whatever directory it
|
|
49
|
+
// physically sits in. Issue #255 is that fact biting from the other side: a
|
|
50
|
+
// `node_modules` symlinked at another checkout's makes every `@endora-commerce/*` resolve
|
|
51
|
+
// into that checkout, while `pnpm ls` cheerfully reports the local path,
|
|
52
|
+
// because it answers from the manifest's `link:` declaration and never reads
|
|
53
|
+
// the symlink.
|
|
54
|
+
//
|
|
55
|
+
// So the predicate here `realpath`s the **root** as well as the candidate. What
|
|
56
|
+
// it asks is "did this package's install stay inside the directory the roots
|
|
57
|
+
// really are", never "does its path start with the string we were handed" — a
|
|
58
|
+
// prefix test over the declared path would accept a `node_modules` that is
|
|
59
|
+
// itself a link into somebody else's tree. Both wirings of the `@endora-commerce/*` case
|
|
60
|
+
// come out the same and correct: the link lands on `packages/<name>`, which is
|
|
61
|
+
// outside whichever `node_modules` it was reached through, so a workspace
|
|
62
|
+
// member is refused whether the instance's `node_modules` is its own, a copy,
|
|
63
|
+
// or a link at another checkout's.
|
|
64
|
+
//
|
|
65
|
+
// ## Cost
|
|
66
|
+
//
|
|
67
|
+
// One `readdir` per root, one `readdir` per `@scope`, one `lstat` + one
|
|
68
|
+
// `readFile` per candidate. `package-runtime.ts` memoises the result for the
|
|
69
|
+
// process, because an instance's `node_modules` does not change while the
|
|
70
|
+
// platform runs.
|
|
71
|
+
import { existsSync, readFileSync, readdirSync, realpathSync, statSync } from 'node:fs';
|
|
72
|
+
import { basename, dirname, isAbsolute, join, relative, resolve, sep } from 'node:path';
|
|
73
|
+
import { fileURLToPath } from 'node:url';
|
|
74
|
+
/**
|
|
75
|
+
* The environment variable naming the **instance** — the directory whose
|
|
76
|
+
* `node_modules` holds this platform's installed extension packages.
|
|
77
|
+
*
|
|
78
|
+
* Unset is the ordinary case and is not a degraded one: a deployed instance
|
|
79
|
+
* *is* the directory the platform runs from, so the chain above the running
|
|
80
|
+
* code already names it. The variable exists for the case where the two are not
|
|
81
|
+
* the same — a platform executed out of a checkout against an instance built
|
|
82
|
+
* somewhere else, which is exactly what D-110's acceptance criterion does.
|
|
83
|
+
*/
|
|
84
|
+
export const INSTANCE_ROOT_ENV = 'ENDORA_INSTANCE_ROOT';
|
|
85
|
+
/** `true` when `child` is inside `parent` (and is not `parent` itself). */
|
|
86
|
+
function isUnder(child, parent) {
|
|
87
|
+
const rel = relative(parent, child);
|
|
88
|
+
return rel !== '' && !rel.startsWith(`..${sep}`) && rel !== '..' && !isAbsolute(rel);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Every `node_modules` directory this platform reads, nearest first.
|
|
92
|
+
*
|
|
93
|
+
* The declared instance root comes first, then the chain above the running
|
|
94
|
+
* platform — in an instance, `<instance>/node_modules/@endora-commerce/platform`
|
|
95
|
+
* upward to the instance root; in this checkout, the platform package's own and
|
|
96
|
+
* the repository's. The chain is Node's own module-resolution directory list,
|
|
97
|
+
* which is the honest answer to "where would an installed package be": wherever
|
|
98
|
+
* `import` would find it. Roots that do not exist are dropped, so an empty
|
|
99
|
+
* result means *nothing to read* rather than *nothing found*.
|
|
100
|
+
*
|
|
101
|
+
* **The chain is derived from this file's own location and therefore moved with
|
|
102
|
+
* it** (`specs/110-instance-repository/` T113). It read from
|
|
103
|
+
* `backend/src/packages/` until the relocation, so `backend/node_modules` was on
|
|
104
|
+
* it and the platform package's was not; it now reads from
|
|
105
|
+
* `@endora-commerce/platform`, which is where the platform actually runs from in
|
|
106
|
+
* an instance, and is the reading `ENDORA_INSTANCE_ROOT` exists to override. No
|
|
107
|
+
* discovery is lost in this checkout: every `@endora-commerce/*` entry under
|
|
108
|
+
* `backend/node_modules` is a workspace link and is refused as one a few
|
|
109
|
+
* hundred lines down, which is what `installed-packages.test.ts` asserts either
|
|
110
|
+
* side of the move.
|
|
111
|
+
*/
|
|
112
|
+
export function nodeModulesRootsFor(env = process.env) {
|
|
113
|
+
const roots = [];
|
|
114
|
+
const push = (candidate) => {
|
|
115
|
+
if (!roots.includes(candidate))
|
|
116
|
+
roots.push(candidate);
|
|
117
|
+
};
|
|
118
|
+
const declared = env[INSTANCE_ROOT_ENV];
|
|
119
|
+
if (typeof declared === 'string' && declared.trim().length > 0) {
|
|
120
|
+
push(join(resolve(declared.trim()), 'node_modules'));
|
|
121
|
+
}
|
|
122
|
+
let directory = dirname(fileURLToPath(import.meta.url));
|
|
123
|
+
for (;;) {
|
|
124
|
+
if (basename(directory) !== 'node_modules')
|
|
125
|
+
push(join(directory, 'node_modules'));
|
|
126
|
+
const parent = dirname(directory);
|
|
127
|
+
if (parent === directory)
|
|
128
|
+
break;
|
|
129
|
+
directory = parent;
|
|
130
|
+
}
|
|
131
|
+
return roots.filter((root) => {
|
|
132
|
+
try {
|
|
133
|
+
return statSync(root).isDirectory();
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Read one candidate directory and classify it.
|
|
142
|
+
*
|
|
143
|
+
* `null` means "not a candidate at all" — no `package.json`, or one with no
|
|
144
|
+
* `endora` field. That is the overwhelmingly common case in any `node_modules`
|
|
145
|
+
* and is deliberately silent: reporting every ordinary dependency as `skipped`
|
|
146
|
+
* would bury the three answers that matter.
|
|
147
|
+
*/
|
|
148
|
+
function classify(directory, root) {
|
|
149
|
+
const manifestPath = join(directory, 'package.json');
|
|
150
|
+
if (!existsSync(manifestPath))
|
|
151
|
+
return null;
|
|
152
|
+
let parsed;
|
|
153
|
+
let raw;
|
|
154
|
+
try {
|
|
155
|
+
raw = readFileSync(manifestPath, 'utf8');
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
return {
|
|
159
|
+
skipped: {
|
|
160
|
+
kind: 'unreadable',
|
|
161
|
+
at: manifestPath,
|
|
162
|
+
reason: error instanceof Error ? error.message : String(error),
|
|
163
|
+
},
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
try {
|
|
167
|
+
parsed = JSON.parse(raw);
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
return {
|
|
171
|
+
skipped: {
|
|
172
|
+
kind: 'unreadable',
|
|
173
|
+
at: manifestPath,
|
|
174
|
+
reason: `package.json is not valid JSON: ${error instanceof Error ? error.message : String(error)}`,
|
|
175
|
+
},
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
const endora = parsed.endora;
|
|
179
|
+
if (endora === undefined || endora === null || typeof endora !== 'object')
|
|
180
|
+
return null;
|
|
181
|
+
const name = typeof parsed.name === 'string' ? parsed.name : basename(directory);
|
|
182
|
+
if (endora.type !== 'module') {
|
|
183
|
+
// A theme, a kit, a distribution meta-package. Reported rather than
|
|
184
|
+
// silent: it carries the field, so its author meant the platform to see it.
|
|
185
|
+
return { skipped: { kind: 'not-an-endora-module', name, at: manifestPath } };
|
|
186
|
+
}
|
|
187
|
+
if (typeof endora.id !== 'string' || endora.id.trim().length === 0) {
|
|
188
|
+
return {
|
|
189
|
+
skipped: {
|
|
190
|
+
kind: 'unreadable',
|
|
191
|
+
at: manifestPath,
|
|
192
|
+
reason: '`endora.type` is "module" but `endora.id` is missing or empty, so the package claims ' +
|
|
193
|
+
'no module id. The id is the platform\'s identity for a module (D-142); the npm name ' +
|
|
194
|
+
'is not, because an author may rename a package.',
|
|
195
|
+
},
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
// Where the install really landed. See the header: this is the whole of "a
|
|
199
|
+
// workspace member is not an installed package", and it is a property of the
|
|
200
|
+
// install rather than a claim the package makes about itself.
|
|
201
|
+
//
|
|
202
|
+
// `realpath` on **both** sides, unconditionally. Not "resolve the candidate
|
|
203
|
+
// if it happens to be a symlink and compare it to the path we were handed":
|
|
204
|
+
// a `node_modules` that is itself a link — a copied or aliased tree, issue
|
|
205
|
+
// #255's shape — would then refuse every real directory under it, and a
|
|
206
|
+
// declared root that is a link into another checkout would be trusted on its
|
|
207
|
+
// spelling.
|
|
208
|
+
let realPath;
|
|
209
|
+
let realRoot;
|
|
210
|
+
try {
|
|
211
|
+
realPath = realpathSync(directory);
|
|
212
|
+
realRoot = realpathSync(root);
|
|
213
|
+
}
|
|
214
|
+
catch (error) {
|
|
215
|
+
return {
|
|
216
|
+
skipped: {
|
|
217
|
+
kind: 'unreadable',
|
|
218
|
+
at: manifestPath,
|
|
219
|
+
reason: error instanceof Error ? error.message : String(error),
|
|
220
|
+
},
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
if (!isUnder(realPath, realRoot)) {
|
|
224
|
+
return { skipped: { kind: 'links-out-of-node-modules', name, at: directory, realPath } };
|
|
225
|
+
}
|
|
226
|
+
return {
|
|
227
|
+
package: {
|
|
228
|
+
id: endora.id.trim(),
|
|
229
|
+
name,
|
|
230
|
+
version: typeof parsed.version === 'string' ? parsed.version : '0.0.0',
|
|
231
|
+
directory,
|
|
232
|
+
manifestPath,
|
|
233
|
+
foundUnder: root,
|
|
234
|
+
},
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
/** Top-level candidate directories in one `node_modules`, `@scope/` expanded. */
|
|
238
|
+
function candidatesIn(root) {
|
|
239
|
+
const out = [];
|
|
240
|
+
let entries;
|
|
241
|
+
try {
|
|
242
|
+
entries = readdirSync(root);
|
|
243
|
+
}
|
|
244
|
+
catch {
|
|
245
|
+
return out;
|
|
246
|
+
}
|
|
247
|
+
for (const name of entries.sort()) {
|
|
248
|
+
// `.pnpm`, `.bin`, `.modules.yaml` — the store is reached through the
|
|
249
|
+
// top-level link, so descending finds every package a second time.
|
|
250
|
+
if (name.startsWith('.'))
|
|
251
|
+
continue;
|
|
252
|
+
const full = join(root, name);
|
|
253
|
+
if (!name.startsWith('@')) {
|
|
254
|
+
out.push(full);
|
|
255
|
+
continue;
|
|
256
|
+
}
|
|
257
|
+
let scoped;
|
|
258
|
+
try {
|
|
259
|
+
scoped = readdirSync(full);
|
|
260
|
+
}
|
|
261
|
+
catch {
|
|
262
|
+
continue;
|
|
263
|
+
}
|
|
264
|
+
for (const inner of scoped.sort()) {
|
|
265
|
+
if (inner.startsWith('.'))
|
|
266
|
+
continue;
|
|
267
|
+
out.push(join(full, inner));
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
return out;
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Scan the given `node_modules` roots for installed Endora module packages.
|
|
274
|
+
*
|
|
275
|
+
* A package found in more than one root is taken from the nearest one — the
|
|
276
|
+
* same precedence Node's resolver applies, so what the platform composes is
|
|
277
|
+
* what an `import` of that name in the instance would load.
|
|
278
|
+
*/
|
|
279
|
+
export function scanNodeModulesRoots(roots) {
|
|
280
|
+
const packages = new Map();
|
|
281
|
+
const skipped = [];
|
|
282
|
+
const rootsRead = [];
|
|
283
|
+
for (const root of roots) {
|
|
284
|
+
try {
|
|
285
|
+
if (!statSync(root).isDirectory())
|
|
286
|
+
continue;
|
|
287
|
+
}
|
|
288
|
+
catch {
|
|
289
|
+
continue;
|
|
290
|
+
}
|
|
291
|
+
rootsRead.push(root);
|
|
292
|
+
for (const directory of candidatesIn(root)) {
|
|
293
|
+
const verdict = classify(directory, root);
|
|
294
|
+
if (verdict === null)
|
|
295
|
+
continue;
|
|
296
|
+
if ('skipped' in verdict) {
|
|
297
|
+
skipped.push(verdict.skipped);
|
|
298
|
+
continue;
|
|
299
|
+
}
|
|
300
|
+
// Nearest root wins; a farther copy of the same npm package is shadowed
|
|
301
|
+
// exactly as it would be for an `import`.
|
|
302
|
+
if (!packages.has(verdict.package.name))
|
|
303
|
+
packages.set(verdict.package.name, verdict.package);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
return {
|
|
307
|
+
packages: [...packages.values()].sort((a, b) => a.name.localeCompare(b.name)),
|
|
308
|
+
skipped,
|
|
309
|
+
rootsRead,
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
//# sourceMappingURL=installed-packages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installed-packages.js","sourceRoot":"","sources":["../../src/packages/installed-packages.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,EAAE;AACF,wEAAwE;AACxE,+EAA+E;AAC/E,4EAA4E;AAC5E,EAAE;AACF,qBAAqB;AACrB,EAAE;AACF,gFAAgF;AAChF,4EAA4E;AAC5E,+EAA+E;AAC/E,qFAAqF;AACrF,6EAA6E;AAC7E,0CAA0C;AAC1C,0EAA0E;AAC1E,4EAA4E;AAC5E,uEAAuE;AACvE,EAAE;AACF,sCAAsC;AACtC,EAAE;AACF,+EAA+E;AAC/E,0FAA0F;AAC1F,+EAA+E;AAC/E,8EAA8E;AAC9E,+EAA+E;AAC/E,4EAA4E;AAC5E,yEAAyE;AACzE,4EAA4E;AAC5E,mEAAmE;AACnE,gFAAgF;AAChF,yEAAyE;AACzE,oEAAoE;AACpE,8EAA8E;AAC9E,eAAe;AACf,gFAAgF;AAChF,gFAAgF;AAChF,wEAAwE;AACxE,yEAAyE;AACzE,gFAAgF;AAChF,aAAa;AACb,+EAA+E;AAC/E,6EAA6E;AAC7E,qEAAqE;AACrE,EAAE;AACF,qFAAqF;AACrF,EAAE;AACF,yFAAyF;AACzF,2EAA2E;AAC3E,4EAA4E;AAC5E,0FAA0F;AAC1F,yEAAyE;AACzE,6EAA6E;AAC7E,eAAe;AACf,EAAE;AACF,gFAAgF;AAChF,6EAA6E;AAC7E,8EAA8E;AAC9E,2EAA2E;AAC3E,yFAAyF;AACzF,+EAA+E;AAC/E,0EAA0E;AAC1E,8EAA8E;AAC9E,mCAAmC;AACnC,EAAE;AACF,UAAU;AACV,EAAE;AACF,wEAAwE;AACxE,6EAA6E;AAC7E,0EAA0E;AAC1E,iBAAiB;AAEjB,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxF,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AACxF,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,sBAAsB,CAAC;AAoCxD,2EAA2E;AAC3E,SAAS,OAAO,CAAC,KAAa,EAAE,MAAc;IAC5C,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACpC,OAAO,GAAG,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC,IAAI,GAAG,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AACvF,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACtE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,IAAI,GAAG,CAAC,SAAiB,EAAQ,EAAE;QACvC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACxD,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACxC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/D,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACxD,SAAS,CAAC;QACR,IAAI,QAAQ,CAAC,SAAS,CAAC,KAAK,cAAc;YAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC;QAClF,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QAClC,IAAI,MAAM,KAAK,SAAS;YAAE,MAAM;QAChC,SAAS,GAAG,MAAM,CAAC;IACrB,CAAC;IAED,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QAC3B,IAAI,CAAC;YACH,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAcD;;;;;;;GAOG;AACH,SAAS,QAAQ,CACf,SAAiB,EACjB,IAAY;IAEZ,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IACrD,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,IAAI,CAAC;IAE3C,IAAI,MAAmB,CAAC;IACxB,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE;gBACP,IAAI,EAAE,YAAY;gBAClB,EAAE,EAAE,YAAY;gBAChB,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC/D;SACF,CAAC;IACJ,CAAC;IACD,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAgB,CAAC;IAC1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE;gBACP,IAAI,EAAE,YAAY;gBAClB,EAAE,EAAE,YAAY;gBAChB,MAAM,EAAE,mCACN,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CACvD,EAAE;aACH;SACF,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7B,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAEvF,MAAM,IAAI,GAAG,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAEjF,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,oEAAoE;QACpE,4EAA4E;QAC5E,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,CAAC;IAC/E,CAAC;IAED,IAAI,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ,IAAI,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnE,OAAO;YACL,OAAO,EAAE;gBACP,IAAI,EAAE,YAAY;gBAClB,EAAE,EAAE,YAAY;gBAChB,MAAM,EACJ,uFAAuF;oBACvF,sFAAsF;oBACtF,iDAAiD;aACpD;SACF,CAAC;IACJ,CAAC;IAED,2EAA2E;IAC3E,6EAA6E;IAC7E,8DAA8D;IAC9D,EAAE;IACF,4EAA4E;IAC5E,4EAA4E;IAC5E,2EAA2E;IAC3E,wEAAwE;IACxE,6EAA6E;IAC7E,YAAY;IACZ,IAAI,QAAgB,CAAC;IACrB,IAAI,QAAgB,CAAC;IACrB,IAAI,CAAC;QACH,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;QACnC,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE;gBACP,IAAI,EAAE,YAAY;gBAClB,EAAE,EAAE,YAAY;gBAChB,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC/D;SACF,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,2BAA2B,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,CAAC;IAC3F,CAAC;IAED,OAAO;QACL,OAAO,EAAE;YACP,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE;YACpB,IAAI;YACJ,OAAO,EAAE,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO;YACtE,SAAS;YACT,YAAY;YACZ,UAAU,EAAE,IAAI;SACjB;KACF,CAAC;AACJ,CAAC;AAED,iFAAiF;AACjF,SAAS,YAAY,CAAC,IAAY;IAChC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC;IACb,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QAClC,sEAAsE;QACtE,mEAAmE;QACnE,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACf,SAAS;QACX,CAAC;QACD,IAAI,MAAgB,CAAC;QACrB,IAAI,CAAC;YACH,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YAClC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YACpC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAwB;IAC3D,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA4B,CAAC;IACrD,MAAM,OAAO,GAAqB,EAAE,CAAC;IACrC,MAAM,SAAS,GAAa,EAAE,CAAC;IAE/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE;gBAAE,SAAS;QAC9C,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,KAAK,MAAM,SAAS,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3C,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAC1C,IAAI,OAAO,KAAK,IAAI;gBAAE,SAAS;YAC/B,IAAI,SAAS,IAAI,OAAO,EAAE,CAAC;gBACzB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC9B,SAAS;YACX,CAAC;YACD,wEAAwE;YACxE,0CAA0C;YAC1C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;gBAAE,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAC/F,CAAC;IACH,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC7E,OAAO;QACP,SAAS;KACV,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import type { EntityClass } from '@mikro-orm/core';
|
|
2
|
+
/**
|
|
3
|
+
* How a **host program** names one entity class out of a module package's
|
|
4
|
+
* published `entities` array, with the entity's own type (feature 080, T040b —
|
|
5
|
+
* criterion 7).
|
|
6
|
+
*
|
|
7
|
+
* ## The problem this exists for
|
|
8
|
+
*
|
|
9
|
+
* A module package publishes `export const entities = [...]` and **no entity
|
|
10
|
+
* class by name**, type-only exports included (D-168;
|
|
11
|
+
* `test/unit/packages/module-package-entity-surface.test.ts` is the arbiter, and
|
|
12
|
+
* `d169PortsFindings` shuts the `./ports` door on the same shape). That is the
|
|
13
|
+
* ruling's load-bearing half: `import { Megamenu } from
|
|
14
|
+
* '@endora-commerce/mod-megamenu/backend'` has to fail in a stranger's compiler,
|
|
15
|
+
* where none of this repository's checks run.
|
|
16
|
+
*
|
|
17
|
+
* A host program that has to **construct** one of those entities therefore picks
|
|
18
|
+
* it out of the array, and a `find` over a heterogeneous array returns the
|
|
19
|
+
* **union** of its constructors. Measured on `@endora-commerce/mod-returns`
|
|
20
|
+
* (eleven entities): `em.create(entityNamed(returnsEntities, 'ReturnReason'), …)`
|
|
21
|
+
* type-checks the payload against `RequiredEntityData<ReturnStatus>` — TypeScript
|
|
22
|
+
* collapses the union to one constituent and it is not the one asked for. The
|
|
23
|
+
* failure is silent whenever the two shapes happen to agree, which is the whole
|
|
24
|
+
* reason this is a mechanism and not a call-site fix.
|
|
25
|
+
*
|
|
26
|
+
* The union is precise only for a package publishing **one** entity, which is
|
|
27
|
+
* why `delivery_methods`, `payment_methods` and `taxes` went through the
|
|
28
|
+
* inferred form and `megamenu` could not.
|
|
29
|
+
*
|
|
30
|
+
* ## The mechanism
|
|
31
|
+
*
|
|
32
|
+
* Two halves, and the split is the whole content of this file:
|
|
33
|
+
*
|
|
34
|
+
* * the **runtime class** comes off the package's published `entities` array —
|
|
35
|
+
* the one array `entities-registry.generated.ts` hands the ORM, so there is
|
|
36
|
+
* exactly one of it in the process (D-160.6, D-160.6.1). Resolution is **by
|
|
37
|
+
* name and never by index**: a tuple index compiles for any ordering, so
|
|
38
|
+
* re-ordering the array in the package would silently re-point an insert at
|
|
39
|
+
* another table;
|
|
40
|
+
* * the **type** is supplied by the caller as `T`, from an `import type` of the
|
|
41
|
+
* entity's declaration inside the package's **built** artefact. It erases at
|
|
42
|
+
* compile time and constructs nothing, so no second copy exists and
|
|
43
|
+
* `check:singleton-identity` reads it for what it is (its `valueImportOrigins`
|
|
44
|
+
* skips a type-only import outright).
|
|
45
|
+
*
|
|
46
|
+
* ## Why the type import names `dist` and not `src`
|
|
47
|
+
*
|
|
48
|
+
* `backend/test/helpers/package-entities.ts` does the same split against the
|
|
49
|
+
* package's **source**, which is legal there and is refused here:
|
|
50
|
+
* `backend/tsconfig.build.json` sets `rootDir: ./src`, and a `.ts` outside it is
|
|
51
|
+
* **TS6059 even for an `import type`** — measured, because a type-only import
|
|
52
|
+
* still joins the program. A `.d.ts` does not: declaration files are exempt from
|
|
53
|
+
* the `rootDir` check, so the emitted declaration inside the package's own
|
|
54
|
+
* `dist` is the one spelling a file in this build may name. This file is in that
|
|
55
|
+
* build: `deploy/README.md` documents running the demo seed as
|
|
56
|
+
* `node dist/cli.js demo seed`, and D-165 makes the compiled tree the
|
|
57
|
+
* production path.
|
|
58
|
+
*
|
|
59
|
+
* That is not a workaround wearing a rule's clothes. The `.d.ts` inside `dist`
|
|
60
|
+
* is the declaration of the class the platform actually registered, which is the
|
|
61
|
+
* identity D-160.6 is about; the source spelling is the one that merely happens
|
|
62
|
+
* to be structurally identical.
|
|
63
|
+
*
|
|
64
|
+
* D-168 is untouched by either: the guarantee is about the **bare specifier** an
|
|
65
|
+
* installed consumer is limited to, and a package's `exports` map does not gate
|
|
66
|
+
* a filesystem path — the ruling's own delivery note says so. A stranger has no
|
|
67
|
+
* such path to write.
|
|
68
|
+
*
|
|
69
|
+
* ## What is checked, and where
|
|
70
|
+
*
|
|
71
|
+
* A name that is not in the array throws **here**, at module load, naming every
|
|
72
|
+
* class the array does declare. That is the one failure mode D-160.6 calls
|
|
73
|
+
* acceptable, precisely because it is loud.
|
|
74
|
+
*
|
|
75
|
+
* The remaining hazard is a call that asks for one entity's **type** while
|
|
76
|
+
* naming another's — both are members of the same package, so no constraint
|
|
77
|
+
* expressible on `T` can separate them (`EntityClass<T>` is
|
|
78
|
+
* `Function & { prototype: T }`, and `Function.prototype` is `any`, so the type
|
|
79
|
+
* argument is an assertion rather than a check). It is closed outside the type
|
|
80
|
+
* system, by `test/unit/packages/package-entity-lookup.test.ts`: it walks every
|
|
81
|
+
* host program that calls this, resolves each call's type argument back to its
|
|
82
|
+
* `import type`, and refuses a specifier whose original name is not the string
|
|
83
|
+
* literal beside it — and refuses one that is not the **emitted counterpart**,
|
|
84
|
+
* derived from the package's own `tsconfig.build.json`, of a file in that
|
|
85
|
+
* package declaring that class. So the `dist/…` path spelled at a call site is a
|
|
86
|
+
* checked copy of a derived fact rather than a written-down one (D-100).
|
|
87
|
+
*/
|
|
88
|
+
/**
|
|
89
|
+
* What a published `entities` array holds.
|
|
90
|
+
*
|
|
91
|
+
* Deliberately a construct signature and not `unknown`: it refuses an argument
|
|
92
|
+
* that is not an array of classes at all — the shape a package that lost its
|
|
93
|
+
* array answers with, since the host reads a missing `entities` export as `[]`
|
|
94
|
+
* and reports nothing.
|
|
95
|
+
*/
|
|
96
|
+
type PublishedEntityClass = abstract new (...args: never[]) => object;
|
|
97
|
+
/**
|
|
98
|
+
* The default `T`, whose whole job is to be unsatisfiable.
|
|
99
|
+
*
|
|
100
|
+
* Omitting the row type is the pre-repair shape and it has to be a compile
|
|
101
|
+
* error, not a quieter version of the same defect: with `T` free, it resolves to
|
|
102
|
+
* its own constraint and `em.create` then checks the payload against `object`,
|
|
103
|
+
* which accepts everything. That is *worse* than the union collapse this file
|
|
104
|
+
* exists for — the collapse at least errors when the two shapes disagree.
|
|
105
|
+
* So the default is a shape no entity has and no payload satisfies: the first
|
|
106
|
+
* `em.create` against it is TS2353 naming this interface, which is the
|
|
107
|
+
* instruction. It is a required, plainly-typed property on purpose — a `never`
|
|
108
|
+
* or a `unique symbol` key is filtered out of MikroORM's `RequiredEntityData`
|
|
109
|
+
* mapped type and accepts everything, measured both ways.
|
|
110
|
+
*
|
|
111
|
+
* The default is the *loud* half. The half a type cannot reach — a call that
|
|
112
|
+
* asks for one entity's row type while naming another's — belongs to
|
|
113
|
+
* `test/unit/packages/package-entity-lookup.test.ts`.
|
|
114
|
+
*/
|
|
115
|
+
export interface EntityRowTypeIsRequired {
|
|
116
|
+
readonly entityNamedNeedsTheRowTypeOfTheClassItIsAskedFor: 'see src/packages/package-entity-lookup.ts';
|
|
117
|
+
}
|
|
118
|
+
export declare function entityNamed<T extends object = EntityRowTypeIsRequired>(published: readonly PublishedEntityClass[], name: string, source?: string): EntityClass<T>;
|
|
119
|
+
export {};
|
|
120
|
+
//# sourceMappingURL=package-entity-lookup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-entity-lookup.d.ts","sourceRoot":"","sources":["../../src/packages/package-entity-lookup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqFG;AAEH;;;;;;;GAOG;AACH,KAAK,oBAAoB,GAAG,QAAQ,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,MAAM,CAAC;AAEtE;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,gDAAgD,EAAE,2CAA2C,CAAC;CACxG;AAED,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,GAAG,uBAAuB,EACpE,SAAS,EAAE,SAAS,oBAAoB,EAAE,EAC1C,IAAI,EAAE,MAAM,EACZ,MAAM,SAAkD,GACvD,WAAW,CAAC,CAAC,CAAC,CAmBhB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export function entityNamed(published, name, source = "a module package's published `entities` array") {
|
|
2
|
+
// The `typeof` test is not redundant with the parameter type: the array comes
|
|
3
|
+
// out of a package, which at runtime may be an installed one this repository
|
|
4
|
+
// never compiled, so its members are whatever that package put there.
|
|
5
|
+
const found = published.find((candidate) => typeof candidate === 'function' && candidate.name === name);
|
|
6
|
+
if (found === undefined) {
|
|
7
|
+
const declared = published
|
|
8
|
+
.map((candidate) => (typeof candidate === 'function' ? candidate.name : String(candidate)))
|
|
9
|
+
.join(', ');
|
|
10
|
+
throw new Error(`[package-entities] ${source} publishes no entity class named '${name}' ` +
|
|
11
|
+
`(it declares: ${declared || '(empty)'}). Either the class was renamed, or it was ` +
|
|
12
|
+
`left out of the array — which the host answers by mapping it to no table, ` +
|
|
13
|
+
`silently. See D-168.`);
|
|
14
|
+
}
|
|
15
|
+
return found;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=package-entity-lookup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-entity-lookup.js","sourceRoot":"","sources":["../../src/packages/package-entity-lookup.ts"],"names":[],"mappings":"AAyHA,MAAM,UAAU,WAAW,CACzB,SAA0C,EAC1C,IAAY,EACZ,MAAM,GAAG,+CAA+C;IAExD,8EAA8E;IAC9E,6EAA6E;IAC7E,sEAAsE;IACtE,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAC1B,CAAC,SAAS,EAAE,EAAE,CAAC,OAAO,SAAS,KAAK,UAAU,IAAI,SAAS,CAAC,IAAI,KAAK,IAAI,CAC1E,CAAC;IACF,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,QAAQ,GAAG,SAAS;aACvB,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,OAAO,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;aAC1F,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,IAAI,KAAK,CACb,sBAAsB,MAAM,qCAAqC,IAAI,IAAI;YACvE,iBAAiB,QAAQ,IAAI,SAAS,6CAA6C;YACnF,4EAA4E;YAC5E,sBAAsB,CACzB,CAAC;IACJ,CAAC;IACD,OAAO,KAAkC,CAAC;AAC5C,CAAC"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import type { MigrationObject } from '@mikro-orm/core';
|
|
2
|
+
import type { ModuleManifest, ModuleManifestExports } from '@endora-commerce/contracts';
|
|
3
|
+
import type { ModuleEntry } from '../kernel/compose.js';
|
|
4
|
+
import { type ModuleIdClaim } from '../lifecycle/services/module-id-claims.js';
|
|
5
|
+
/**
|
|
6
|
+
* One entry of a migration registry, as this reader produces them.
|
|
7
|
+
*
|
|
8
|
+
* **Declared here rather than imported**, for `manifest-registry.ts`'
|
|
9
|
+
* `DiscoveredManifestEntry` reason one directory over: the merge that turns
|
|
10
|
+
* these into an execution order is the host's
|
|
11
|
+
* (`backend/src/db/configured-migrations.ts`, moving under
|
|
12
|
+
* `specs/110-instance-repository/` T116), and the platform may not name a file
|
|
13
|
+
* in the tree that installs it (D-52/D-53). `tsc` is what holds the two shapes
|
|
14
|
+
* together — the host's `MigrationRegistryEntry` is structurally assignable to
|
|
15
|
+
* this one at the call site, so a field dropped on either side fails in the
|
|
16
|
+
* host's own type-check rather than at runtime.
|
|
17
|
+
*
|
|
18
|
+
* It is *not* a second answer to "what order do migrations run in": that is
|
|
19
|
+
* `migration-order.ts`' and the platform's `./migrations` subpath's, and this
|
|
20
|
+
* carries no ordering decision at all — only the three fields a reader of a
|
|
21
|
+
* package's `./migrations` export can fill in.
|
|
22
|
+
*/
|
|
23
|
+
export interface MigrationRegistryEntry {
|
|
24
|
+
/** Owning module id — a package's `endora.id` (D-142). */
|
|
25
|
+
moduleId: string;
|
|
26
|
+
/** The migration class. `cls.name` IS the migration name persisted in the DB. */
|
|
27
|
+
cls: MigrationObject['class'];
|
|
28
|
+
/** Absent means `'core'`; a producer outside the committed registry sets `'external'`. */
|
|
29
|
+
origin?: 'core' | 'external';
|
|
30
|
+
}
|
|
31
|
+
/** An installed package's manifest plus where on disk it came from. */
|
|
32
|
+
export interface PackageModuleManifest {
|
|
33
|
+
id: string;
|
|
34
|
+
manifest: ModuleManifest;
|
|
35
|
+
/**
|
|
36
|
+
* The resolved `package.json`.
|
|
37
|
+
*
|
|
38
|
+
* `dirname(filePath)` is how the i18n reconciler and the lifecycle
|
|
39
|
+
* orchestrator locate a module's assets, so this has to be a path *inside*
|
|
40
|
+
* the package directory. For a core module the anchor is `manifest.ts`; for a
|
|
41
|
+
* package it is the `package.json` that claimed the id — a file that
|
|
42
|
+
* genuinely exists in the published artefact, which the compiled root export
|
|
43
|
+
* (`dist/manifest.js`, whose directory holds no `i18n/`) does not give.
|
|
44
|
+
*/
|
|
45
|
+
filePath: string;
|
|
46
|
+
/** The npm package name, for diagnostics. Never the platform's identity. */
|
|
47
|
+
packageName: string;
|
|
48
|
+
installHook?: ModuleManifestExports['installHook'];
|
|
49
|
+
uninstallHook?: ModuleManifestExports['uninstallHook'];
|
|
50
|
+
/**
|
|
51
|
+
* This module's interest in every *other* module's install and hard
|
|
52
|
+
* uninstall — feature 080, T036a / D-159. Read here for the same reason the
|
|
53
|
+
* two hooks are: the export travels with the manifest, so an overlay module
|
|
54
|
+
* and an installed package declare one on exactly core's terms.
|
|
55
|
+
*/
|
|
56
|
+
lifecycleParticipant?: ModuleManifestExports['lifecycleParticipant'];
|
|
57
|
+
/**
|
|
58
|
+
* The operator commands this module declares — feature 080, T042b / D-160.9.
|
|
59
|
+
*
|
|
60
|
+
* This is the origin the shape was designed for: a file under `node_modules`
|
|
61
|
+
* can name no specifier that resolves to the instance's
|
|
62
|
+
* `backend/src/composition.ts`, so a package's CLI can only ever be a
|
|
63
|
+
* declaration the host invokes. Read here on exactly core's terms.
|
|
64
|
+
*/
|
|
65
|
+
cliCommands?: ModuleManifestExports['cliCommands'];
|
|
66
|
+
/**
|
|
67
|
+
* The module's recent-activity eligibility — feature 080, T042j / D-163.1.
|
|
68
|
+
*
|
|
69
|
+
* The declaration axis of D-163.1, and the reason it is a manifest export:
|
|
70
|
+
* the four host-owned action tables it replaced were closed lists of core
|
|
71
|
+
* module ids, so a package's audit row was silently absent from the dashboard
|
|
72
|
+
* card rather than refused. Read here on exactly core's terms.
|
|
73
|
+
*/
|
|
74
|
+
recentActivity?: ModuleManifestExports['recentActivity'];
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* The module-id claims of every installed module package under `roots`.
|
|
78
|
+
*
|
|
79
|
+
* Exported so the *overlay* seams can be held to one collision rule over one
|
|
80
|
+
* claimed set (feature 103, FR-004) without a second enumeration of what is
|
|
81
|
+
* installed: the scan below is memoised per root list, so asking here costs a
|
|
82
|
+
* map lookup on a boot that has already asked.
|
|
83
|
+
*/
|
|
84
|
+
export declare function installedPackageModuleIdClaims(roots: readonly string[]): ModuleIdClaim[];
|
|
85
|
+
/**
|
|
86
|
+
* The manifests of every installed module package, refusing an id two of them
|
|
87
|
+
* claim.
|
|
88
|
+
*
|
|
89
|
+
* A package with no `./backend` export still appears here: an admin- or
|
|
90
|
+
* storefront-only module has permissions, an activation control and i18n
|
|
91
|
+
* bundles, and dropping the manifest would take all three with it.
|
|
92
|
+
*/
|
|
93
|
+
export declare function packageModuleManifestsUnder(roots: readonly string[]): Promise<PackageModuleManifest[]>;
|
|
94
|
+
/** {@link packageModuleManifestsUnder} over the roots this platform reads. */
|
|
95
|
+
export declare function discoverPackageModuleManifests(env?: NodeJS.ProcessEnv): Promise<PackageModuleManifest[]>;
|
|
96
|
+
/**
|
|
97
|
+
* The composer entries of every installed module package, against explicit
|
|
98
|
+
* roots.
|
|
99
|
+
*
|
|
100
|
+
* Exported so the loader can be driven over a fixture instance that enters at
|
|
101
|
+
* the top of the analysis — a `node_modules` tree on disk, enumerated,
|
|
102
|
+
* `exports`-resolved and imported by the same code the deployment path runs —
|
|
103
|
+
* rather than by handing the last function a pre-built entry (issue #130).
|
|
104
|
+
*/
|
|
105
|
+
export declare function packageModuleEntriesUnder(roots: readonly string[]): Promise<ModuleEntry[]>;
|
|
106
|
+
/**
|
|
107
|
+
* Every installed module package this platform composes.
|
|
108
|
+
*
|
|
109
|
+
* Empty for an instance that installed none, which is every developer checkout
|
|
110
|
+
* and every test run — and empty is the whole story there: the composition is
|
|
111
|
+
* byte-for-byte what it was before this loader existed.
|
|
112
|
+
*/
|
|
113
|
+
export declare function loadPackageModuleEntries(env?: NodeJS.ProcessEnv): Promise<ModuleEntry[]>;
|
|
114
|
+
/**
|
|
115
|
+
* An entity class as the ORM configuration takes it.
|
|
116
|
+
*
|
|
117
|
+
* Deliberately structural and deliberately weak: the host cannot type-check a
|
|
118
|
+
* stranger's class against `EntityClass<T>` without importing the stranger, and
|
|
119
|
+
* MikroORM validates it anyway — something that is not an entity fails metadata
|
|
120
|
+
* discovery loudly and by name.
|
|
121
|
+
*/
|
|
122
|
+
export type EntityClassLike = new (...args: never[]) => object;
|
|
123
|
+
/** What one installed package contributes to the platform's schema. */
|
|
124
|
+
export interface PackageSchemaContribution {
|
|
125
|
+
/** The module id it claims (`endora.id`, D-142) — the migrations' `moduleId`. */
|
|
126
|
+
readonly id: string;
|
|
127
|
+
/** The npm package name. For humans, and for the template digest's path. */
|
|
128
|
+
readonly packageName: string;
|
|
129
|
+
readonly version: string;
|
|
130
|
+
/**
|
|
131
|
+
* The directory the `./migrations` subpath resolves into, or `null` when the
|
|
132
|
+
* package publishes no such subpath.
|
|
133
|
+
*
|
|
134
|
+
* The test harness digests the files under it (`test/template-identity.ts`,
|
|
135
|
+
* D-155.5): a package ships compiled `.js` with no `.ts` source to hash, so
|
|
136
|
+
* what it contributes to the migration-template identity as *content* is read
|
|
137
|
+
* from here rather than from any tree this repository owns.
|
|
138
|
+
*/
|
|
139
|
+
readonly migrationsDirectory: string | null;
|
|
140
|
+
/** Registry entries, already tagged `origin: 'external'`. */
|
|
141
|
+
readonly migrations: readonly MigrationRegistryEntry[];
|
|
142
|
+
/** The entity classes its `./backend` export declares. */
|
|
143
|
+
readonly entities: readonly EntityClassLike[];
|
|
144
|
+
/**
|
|
145
|
+
* The module ids this package's manifest declares it depends on — the edges
|
|
146
|
+
* its migrations are ordered by (`specs/110-instance-repository/` T141).
|
|
147
|
+
*
|
|
148
|
+
* It is read here, beside the migrations, because `configuredMigrationsFrom`
|
|
149
|
+
* is the one reader and it had no other source: it fell back to `[]` for any
|
|
150
|
+
* id the **host's** committed manifest index did not carry, and the comment
|
|
151
|
+
* beside that fallback claimed these were "read from the manifest the package
|
|
152
|
+
* published" when nothing read them. In this repository the index carries
|
|
153
|
+
* every module package, so the fallback was unreachable and the claim was
|
|
154
|
+
* never tested; in an instance the index does not exist, so **every** module
|
|
155
|
+
* was a graph root and the per-module order (feature 081) degenerated to the
|
|
156
|
+
* order `orderMigrations` breaks ties in.
|
|
157
|
+
*/
|
|
158
|
+
readonly dependencies: readonly string[];
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Every installed package's schema contribution, against explicit roots.
|
|
162
|
+
*
|
|
163
|
+
* Exported so a test can drive it over a `node_modules` tree on disk — the same
|
|
164
|
+
* entry point the deployment path takes, enumerated, `exports`-resolved and
|
|
165
|
+
* imported by the same code — rather than by handing a downstream function a
|
|
166
|
+
* pre-built entry (issue #130).
|
|
167
|
+
*/
|
|
168
|
+
export declare function packageSchemaContributionsUnder(roots: readonly string[]): Promise<PackageSchemaContribution[]>;
|
|
169
|
+
/**
|
|
170
|
+
* {@link packageSchemaContributionsUnder} over the roots this platform reads.
|
|
171
|
+
*
|
|
172
|
+
* Empty for an instance that installed no module package — every developer
|
|
173
|
+
* checkout and every test run — and empty means the ORM configuration is what
|
|
174
|
+
* it was before a package could ship schema at all.
|
|
175
|
+
*/
|
|
176
|
+
export declare function discoverPackageSchema(env?: NodeJS.ProcessEnv): Promise<PackageSchemaContribution[]>;
|
|
177
|
+
//# sourceMappingURL=package-runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-runtime.d.ts","sourceRoot":"","sources":["../../src/packages/package-runtime.ts"],"names":[],"mappings":"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"}
|