@nexus-ioc/core 0.4.1 → 0.6.1
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/README.md +20 -9
- package/dist/cjs/browser.js.map +1 -0
- package/dist/cjs/core/graph/analyze-module.js.map +1 -0
- package/dist/cjs/core/graph/analyze-provider.js.map +1 -0
- package/dist/cjs/core/graph/helpers/index.js.map +1 -0
- package/dist/{core → cjs/core}/graph/module-graph.js +28 -21
- package/dist/cjs/core/graph/module-graph.js.map +1 -0
- package/dist/cjs/core/graph/providers/analyze-class-provider.js.map +1 -0
- package/dist/cjs/core/graph/providers/analyze-factory-provider.js.map +1 -0
- package/dist/cjs/core/graph/providers/analyze-function-provider.js.map +1 -0
- package/dist/cjs/core/graph/providers/analyze-value-provider.js.map +1 -0
- package/dist/cjs/core/graph/providers/provider-factory.js.map +1 -0
- package/dist/cjs/core/modules/container.js +182 -0
- package/dist/cjs/core/modules/container.js.map +1 -0
- package/dist/cjs/core/modules/module-container-factory.js.map +1 -0
- package/dist/{core → cjs/core}/modules/module-container.js +0 -1
- package/dist/cjs/core/modules/module-container.js.map +1 -0
- package/dist/{core → cjs/core}/modules/module-token-factory.js +10 -11
- package/dist/cjs/core/modules/module-token-factory.js.map +1 -0
- package/dist/cjs/core/modules/modules-container.js.map +1 -0
- package/dist/{core → cjs/core}/nexus-applications.browser.js +19 -2
- package/dist/cjs/core/nexus-applications.browser.js.map +1 -0
- package/dist/cjs/core/nexus-applications.js +204 -0
- package/dist/cjs/core/nexus-applications.js.map +1 -0
- package/dist/{core → cjs/core}/nexus-applications.server.js +19 -2
- package/dist/cjs/core/nexus-applications.server.js.map +1 -0
- package/dist/{core → cjs/core}/resolver/providers-container.js +1 -1
- package/dist/cjs/core/resolver/providers-container.js.map +1 -0
- package/dist/{core → cjs/core}/resolver/resolver.js +53 -14
- package/dist/cjs/core/resolver/resolver.js.map +1 -0
- package/dist/{decorators → cjs/decorators}/global.js +1 -1
- package/dist/cjs/decorators/global.js.map +1 -0
- package/dist/{decorators → cjs/decorators}/inject.js +39 -0
- package/dist/cjs/decorators/inject.js.map +1 -0
- package/dist/cjs/decorators/injectable.js +46 -0
- package/dist/cjs/decorators/injectable.js.map +1 -0
- package/dist/cjs/decorators/nsModule.js +57 -0
- package/dist/cjs/decorators/nsModule.js.map +1 -0
- package/dist/cjs/decorators/optional.js +60 -0
- package/dist/cjs/decorators/optional.js.map +1 -0
- package/dist/{index.js → cjs/index.js} +13 -6
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/interfaces/abstract.interface.js.map +1 -0
- package/dist/cjs/interfaces/constants.js.map +1 -0
- package/dist/cjs/interfaces/dynamic-module.interface.js.map +1 -0
- package/dist/{interfaces → cjs/interfaces}/index.js +6 -6
- package/dist/cjs/interfaces/index.js.map +1 -0
- package/dist/cjs/interfaces/injectable.interface.js.map +1 -0
- package/dist/cjs/interfaces/injection-token.interface.js.map +1 -0
- package/dist/cjs/interfaces/module-metadata.interface.js.map +1 -0
- package/dist/cjs/interfaces/module-types.interface.js.map +1 -0
- package/dist/cjs/interfaces/modules/container.interface.js.map +1 -0
- package/dist/{interfaces → cjs/interfaces}/modules/index.js +1 -1
- package/dist/cjs/interfaces/modules/index.js.map +1 -0
- package/dist/cjs/interfaces/modules/module-container-factory.interface.js.map +1 -0
- package/dist/cjs/interfaces/modules/module-container.interface.js.map +1 -0
- package/dist/cjs/interfaces/modules/module-graph.interface.js.map +1 -0
- package/dist/cjs/interfaces/modules/module-token-factory.interface.js.map +1 -0
- package/dist/cjs/interfaces/modules/modules-container.interface.js.map +1 -0
- package/dist/cjs/interfaces/modules/provider-token-factory.interface.js.map +1 -0
- package/dist/cjs/interfaces/nexus-application.interface.js.map +1 -0
- package/dist/cjs/interfaces/on-module-init.interface.js.map +1 -0
- package/dist/{interfaces → cjs/interfaces}/plugins/index.js +1 -1
- package/dist/cjs/interfaces/plugins/index.js.map +1 -0
- package/dist/cjs/interfaces/plugins/module-plugin.interface.js.map +1 -0
- package/dist/cjs/interfaces/plugins/scanner-plugin.interface.js.map +1 -0
- package/dist/cjs/interfaces/scope.interface.js +59 -0
- package/dist/cjs/interfaces/scope.interface.js.map +1 -0
- package/dist/cjs/interfaces/type.interface.js.map +1 -0
- package/dist/cjs/interfaces/utils/hash-utils.interface.js.map +1 -0
- package/dist/cjs/interfaces/utils/index.js.map +1 -0
- package/dist/{interfaces → cjs/interfaces}/validate-module-keys.js +1 -1
- package/dist/cjs/interfaces/validate-module-keys.js.map +1 -0
- package/dist/cjs/server.js.map +1 -0
- package/dist/{utils → cjs/utils}/hash-utils.browser.js +5 -3
- package/dist/cjs/utils/hash-utils.browser.js.map +1 -0
- package/dist/cjs/utils/hash-utils.js +25 -0
- package/dist/cjs/utils/hash-utils.js.map +1 -0
- package/dist/{utils → cjs/utils}/hash-utils.server.js +5 -3
- package/dist/cjs/utils/hash-utils.server.js.map +1 -0
- package/dist/{utils → cjs/utils}/helpers.js +2 -7
- package/dist/cjs/utils/helpers.js.map +1 -0
- package/dist/{utils → cjs/utils}/shared.utils.js +15 -16
- package/dist/cjs/utils/shared.utils.js.map +1 -0
- package/dist/esm/browser.js +2 -0
- package/dist/esm/browser.js.map +1 -0
- package/dist/esm/core/graph/analyze-module.js +78 -0
- package/dist/esm/core/graph/analyze-module.js.map +1 -0
- package/dist/esm/core/graph/analyze-provider.js +53 -0
- package/dist/esm/core/graph/analyze-provider.js.map +1 -0
- package/dist/esm/core/graph/helpers/index.js +17 -0
- package/dist/esm/core/graph/helpers/index.js.map +1 -0
- package/dist/esm/core/graph/module-graph.js +402 -0
- package/dist/esm/core/graph/module-graph.js.map +1 -0
- package/dist/esm/core/graph/providers/analyze-class-provider.js +13 -0
- package/dist/esm/core/graph/providers/analyze-class-provider.js.map +1 -0
- package/dist/esm/core/graph/providers/analyze-factory-provider.js +13 -0
- package/dist/esm/core/graph/providers/analyze-factory-provider.js.map +1 -0
- package/dist/esm/core/graph/providers/analyze-function-provider.js +7 -0
- package/dist/esm/core/graph/providers/analyze-function-provider.js.map +1 -0
- package/dist/esm/core/graph/providers/analyze-value-provider.js +13 -0
- package/dist/esm/core/graph/providers/analyze-value-provider.js.map +1 -0
- package/dist/esm/core/graph/providers/provider-factory.js +21 -0
- package/dist/esm/core/graph/providers/provider-factory.js.map +1 -0
- package/dist/esm/core/modules/container.js +178 -0
- package/dist/esm/core/modules/container.js.map +1 -0
- package/dist/esm/core/modules/module-container-factory.js +21 -0
- package/dist/esm/core/modules/module-container-factory.js.map +1 -0
- package/dist/esm/core/modules/module-container.js +58 -0
- package/dist/esm/core/modules/module-container.js.map +1 -0
- package/dist/esm/core/modules/module-token-factory.js +43 -0
- package/dist/esm/core/modules/module-token-factory.js.map +1 -0
- package/dist/esm/core/modules/modules-container.js +39 -0
- package/dist/esm/core/modules/modules-container.js.map +1 -0
- package/dist/esm/core/nexus-applications.browser.js +49 -0
- package/dist/esm/core/nexus-applications.browser.js.map +1 -0
- package/dist/esm/core/nexus-applications.js +200 -0
- package/dist/esm/core/nexus-applications.js.map +1 -0
- package/dist/esm/core/nexus-applications.server.js +49 -0
- package/dist/esm/core/nexus-applications.server.js.map +1 -0
- package/dist/esm/core/resolver/providers-container.js +4 -0
- package/dist/esm/core/resolver/providers-container.js.map +1 -0
- package/dist/esm/core/resolver/resolver.js +161 -0
- package/dist/esm/core/resolver/resolver.js.map +1 -0
- package/dist/esm/decorators/global.js +9 -0
- package/dist/esm/decorators/global.js.map +1 -0
- package/dist/esm/decorators/inject.js +63 -0
- package/dist/esm/decorators/inject.js.map +1 -0
- package/dist/esm/decorators/injectable.js +43 -0
- package/dist/esm/decorators/injectable.js.map +1 -0
- package/dist/esm/decorators/nsModule.js +54 -0
- package/dist/esm/decorators/nsModule.js.map +1 -0
- package/dist/esm/decorators/optional.js +57 -0
- package/dist/esm/decorators/optional.js.map +1 -0
- package/dist/esm/index.js +12 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/interfaces/abstract.interface.js +2 -0
- package/dist/esm/interfaces/abstract.interface.js.map +1 -0
- package/dist/esm/interfaces/constants.js +13 -0
- package/dist/esm/interfaces/constants.js.map +1 -0
- package/dist/esm/interfaces/dynamic-module.interface.js +2 -0
- package/dist/esm/interfaces/dynamic-module.interface.js.map +1 -0
- package/dist/esm/interfaces/index.js +16 -0
- package/dist/esm/interfaces/index.js.map +1 -0
- package/dist/esm/interfaces/injectable.interface.js +2 -0
- package/dist/esm/interfaces/injectable.interface.js.map +1 -0
- package/dist/esm/interfaces/injection-token.interface.js +2 -0
- package/dist/esm/interfaces/injection-token.interface.js.map +1 -0
- package/dist/esm/interfaces/module-metadata.interface.js +2 -0
- package/dist/esm/interfaces/module-metadata.interface.js.map +1 -0
- package/dist/esm/interfaces/module-types.interface.js +2 -0
- package/dist/esm/interfaces/module-types.interface.js.map +1 -0
- package/dist/esm/interfaces/modules/container.interface.js +2 -0
- package/dist/esm/interfaces/modules/container.interface.js.map +1 -0
- package/dist/esm/interfaces/modules/index.js +8 -0
- package/dist/esm/interfaces/modules/index.js.map +1 -0
- package/dist/esm/interfaces/modules/module-container-factory.interface.js +2 -0
- package/dist/esm/interfaces/modules/module-container-factory.interface.js.map +1 -0
- package/dist/esm/interfaces/modules/module-container.interface.js +2 -0
- package/dist/esm/interfaces/modules/module-container.interface.js.map +1 -0
- package/dist/esm/interfaces/modules/module-graph.interface.js +13 -0
- package/dist/esm/interfaces/modules/module-graph.interface.js.map +1 -0
- package/dist/esm/interfaces/modules/module-token-factory.interface.js +2 -0
- package/dist/esm/interfaces/modules/module-token-factory.interface.js.map +1 -0
- package/dist/esm/interfaces/modules/modules-container.interface.js +2 -0
- package/dist/esm/interfaces/modules/modules-container.interface.js.map +1 -0
- package/dist/esm/interfaces/modules/provider-token-factory.interface.js +2 -0
- package/dist/esm/interfaces/modules/provider-token-factory.interface.js.map +1 -0
- package/dist/esm/interfaces/nexus-application.interface.js +2 -0
- package/dist/esm/interfaces/nexus-application.interface.js.map +1 -0
- package/dist/esm/interfaces/on-module-init.interface.js +2 -0
- package/dist/esm/interfaces/on-module-init.interface.js.map +1 -0
- package/dist/esm/interfaces/plugins/index.js +3 -0
- package/dist/esm/interfaces/plugins/index.js.map +1 -0
- package/dist/esm/interfaces/plugins/module-plugin.interface.js +2 -0
- package/dist/esm/interfaces/plugins/module-plugin.interface.js.map +1 -0
- package/dist/esm/interfaces/plugins/scanner-plugin.interface.js +2 -0
- package/dist/esm/interfaces/plugins/scanner-plugin.interface.js.map +1 -0
- package/dist/esm/interfaces/scope.interface.js +56 -0
- package/dist/esm/interfaces/scope.interface.js.map +1 -0
- package/dist/esm/interfaces/type.interface.js +2 -0
- package/dist/esm/interfaces/type.interface.js.map +1 -0
- package/dist/esm/interfaces/utils/hash-utils.interface.js +2 -0
- package/dist/esm/interfaces/utils/hash-utils.interface.js.map +1 -0
- package/dist/esm/interfaces/utils/index.js +2 -0
- package/dist/esm/interfaces/utils/index.js.map +1 -0
- package/dist/esm/interfaces/validate-module-keys.js +21 -0
- package/dist/esm/interfaces/validate-module-keys.js.map +1 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/server.js +2 -0
- package/dist/esm/server.js.map +1 -0
- package/dist/esm/utils/hash-utils.browser.js +20 -0
- package/dist/esm/utils/hash-utils.browser.js.map +1 -0
- package/dist/esm/utils/hash-utils.js +21 -0
- package/dist/esm/utils/hash-utils.js.map +1 -0
- package/dist/esm/utils/hash-utils.server.js +17 -0
- package/dist/esm/utils/hash-utils.server.js.map +1 -0
- package/dist/esm/utils/helpers.js +63 -0
- package/dist/esm/utils/helpers.js.map +1 -0
- package/dist/esm/utils/shared.utils.js +49 -0
- package/dist/esm/utils/shared.utils.js.map +1 -0
- package/dist/tsconfig.cjs.tsbuildinfo +1 -0
- package/dist/tsconfig.esm.tsbuildinfo +1 -0
- package/dist/{core → types/core}/graph/analyze-module.d.ts +4 -4
- package/dist/{core → types/core}/graph/analyze-provider.d.ts +4 -4
- package/dist/{core → types/core}/graph/module-graph.d.ts +1 -1
- package/dist/{core → types/core}/graph/providers/analyze-class-provider.d.ts +2 -2
- package/dist/{core → types/core}/graph/providers/analyze-factory-provider.d.ts +2 -2
- package/dist/{core → types/core}/graph/providers/analyze-value-provider.d.ts +1 -1
- package/dist/types/core/modules/container.d.ts +154 -0
- package/dist/{core → types/core}/modules/module-container.d.ts +1 -1
- package/dist/{core → types/core}/modules/module-token-factory.d.ts +1 -1
- package/dist/{core → types/core}/nexus-applications.browser.d.ts +9 -1
- package/dist/types/core/nexus-applications.d.ts +160 -0
- package/dist/{core → types/core}/nexus-applications.server.d.ts +9 -1
- package/dist/types/decorators/inject.d.ts +42 -0
- package/dist/types/decorators/injectable.d.ts +37 -0
- package/dist/types/decorators/nsModule.d.ts +44 -0
- package/dist/types/decorators/optional.d.ts +42 -0
- package/dist/{index.d.ts → types/index.d.ts} +6 -3
- package/dist/types/interfaces/module-types.interface.d.ts +158 -0
- package/dist/types/interfaces/modules/container.interface.d.ts +8 -0
- package/dist/types/interfaces/modules/module-container.interface.d.ts +1 -0
- package/dist/{interfaces → types/interfaces}/modules/module-graph.interface.d.ts +3 -23
- package/dist/{interfaces → types/interfaces}/nexus-application.interface.d.ts +2 -0
- package/dist/types/interfaces/on-module-init.interface.d.ts +51 -0
- package/dist/types/interfaces/scope.interface.d.ts +54 -0
- package/dist/types/interfaces/utils/hash-utils.interface.d.ts +1 -0
- package/dist/{interfaces → types/interfaces}/validate-module-keys.d.ts +1 -1
- package/dist/{utils → types/utils}/hash-utils.browser.d.ts +2 -1
- package/dist/types/utils/hash-utils.d.ts +7 -0
- package/dist/{utils → types/utils}/hash-utils.server.d.ts +2 -1
- package/dist/{utils → types/utils}/helpers.d.ts +0 -1
- package/package.json +83 -61
- package/dist/browser.js.map +0 -1
- package/dist/core/graph/analyze-module.js.map +0 -1
- package/dist/core/graph/analyze-provider.js.map +0 -1
- package/dist/core/graph/helpers/index.js.map +0 -1
- package/dist/core/graph/module-graph.js.map +0 -1
- package/dist/core/graph/providers/analyze-class-provider.js.map +0 -1
- package/dist/core/graph/providers/analyze-factory-provider.js.map +0 -1
- package/dist/core/graph/providers/analyze-function-provider.js.map +0 -1
- package/dist/core/graph/providers/analyze-value-provider.js.map +0 -1
- package/dist/core/graph/providers/provider-factory.js.map +0 -1
- package/dist/core/modules/container.d.ts +0 -15
- package/dist/core/modules/container.js +0 -40
- package/dist/core/modules/container.js.map +0 -1
- package/dist/core/modules/module-container-factory.js.map +0 -1
- package/dist/core/modules/module-container.js.map +0 -1
- package/dist/core/modules/module-token-factory.js.map +0 -1
- package/dist/core/modules/modules-container.js.map +0 -1
- package/dist/core/nexus-applications.browser.js.map +0 -1
- package/dist/core/nexus-applications.server.js.map +0 -1
- package/dist/core/resolver/providers-container.js.map +0 -1
- package/dist/core/resolver/resolver.js.map +0 -1
- package/dist/decorators/global.js.map +0 -1
- package/dist/decorators/inject.d.ts +0 -3
- package/dist/decorators/inject.js.map +0 -1
- package/dist/decorators/injectable.d.ts +0 -3
- package/dist/decorators/injectable.js +0 -12
- package/dist/decorators/injectable.js.map +0 -1
- package/dist/decorators/nsModule.d.ts +0 -3
- package/dist/decorators/nsModule.js +0 -16
- package/dist/decorators/nsModule.js.map +0 -1
- package/dist/decorators/optional.d.ts +0 -2
- package/dist/decorators/optional.js +0 -20
- package/dist/decorators/optional.js.map +0 -1
- package/dist/errors/container-not-compiled.error.d.ts +0 -3
- package/dist/errors/container-not-compiled.error.js +0 -12
- package/dist/errors/container-not-compiled.error.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/interfaces/abstract.interface.js.map +0 -1
- package/dist/interfaces/constants.js.map +0 -1
- package/dist/interfaces/dynamic-module.interface.js.map +0 -1
- package/dist/interfaces/index.js.map +0 -1
- package/dist/interfaces/injectable.interface.js.map +0 -1
- package/dist/interfaces/injection-token.interface.js.map +0 -1
- package/dist/interfaces/module-metadata.interface.js.map +0 -1
- package/dist/interfaces/module-types.interface.d.ts +0 -20
- package/dist/interfaces/module-types.interface.js.map +0 -1
- package/dist/interfaces/modules/container.interface.d.ts +0 -16
- package/dist/interfaces/modules/container.interface.js.map +0 -1
- package/dist/interfaces/modules/index.js.map +0 -1
- package/dist/interfaces/modules/module-container-factory.interface.js.map +0 -1
- package/dist/interfaces/modules/module-container.interface.d.ts +0 -13
- package/dist/interfaces/modules/module-container.interface.js.map +0 -1
- package/dist/interfaces/modules/module-graph.interface.js.map +0 -1
- package/dist/interfaces/modules/module-token-factory.interface.js.map +0 -1
- package/dist/interfaces/modules/modules-container.interface.js.map +0 -1
- package/dist/interfaces/modules/provider-token-factory.interface.js.map +0 -1
- package/dist/interfaces/nexus-application.interface.js.map +0 -1
- package/dist/interfaces/on-module-init.interface.d.ts +0 -3
- package/dist/interfaces/on-module-init.interface.js.map +0 -1
- package/dist/interfaces/plugins/index.js.map +0 -1
- package/dist/interfaces/plugins/module-plugin.interface.js.map +0 -1
- package/dist/interfaces/plugins/scanner-plugin.interface.js.map +0 -1
- package/dist/interfaces/scope.interface.d.ts +0 -4
- package/dist/interfaces/scope.interface.js +0 -9
- package/dist/interfaces/scope.interface.js.map +0 -1
- package/dist/interfaces/type.interface.js.map +0 -1
- package/dist/interfaces/utils/hash-utils.interface.d.ts +0 -5
- package/dist/interfaces/utils/hash-utils.interface.js.map +0 -1
- package/dist/interfaces/utils/index.js.map +0 -1
- package/dist/interfaces/validate-module-keys.js.map +0 -1
- package/dist/server.js.map +0 -1
- package/dist/utils/hash-utils.browser.js.map +0 -1
- package/dist/utils/hash-utils.server.js.map +0 -1
- package/dist/utils/helpers.js.map +0 -1
- package/dist/utils/random-string-generator.util.d.ts +0 -1
- package/dist/utils/random-string-generator.util.js +0 -7
- package/dist/utils/random-string-generator.util.js.map +0 -1
- package/dist/utils/shared.utils.js.map +0 -1
- package/dist/{browser.js → cjs/browser.js} +0 -0
- package/dist/{core → cjs/core}/graph/analyze-module.js +0 -0
- package/dist/{core → cjs/core}/graph/analyze-provider.js +0 -0
- package/dist/{core → cjs/core}/graph/helpers/index.js +0 -0
- package/dist/{core → cjs/core}/graph/providers/analyze-class-provider.js +0 -0
- package/dist/{core → cjs/core}/graph/providers/analyze-factory-provider.js +0 -0
- package/dist/{core → cjs/core}/graph/providers/analyze-function-provider.js +0 -0
- package/dist/{core → cjs/core}/graph/providers/analyze-value-provider.js +0 -0
- package/dist/{core → cjs/core}/graph/providers/provider-factory.js +0 -0
- package/dist/{core → cjs/core}/modules/module-container-factory.js +0 -0
- package/dist/{core → cjs/core}/modules/modules-container.js +0 -0
- package/dist/{interfaces → cjs/interfaces}/abstract.interface.js +0 -0
- package/dist/{interfaces → cjs/interfaces}/constants.js +0 -0
- package/dist/{interfaces → cjs/interfaces}/dynamic-module.interface.js +0 -0
- package/dist/{interfaces → cjs/interfaces}/injectable.interface.js +0 -0
- package/dist/{interfaces → cjs/interfaces}/injection-token.interface.js +0 -0
- package/dist/{interfaces → cjs/interfaces}/module-metadata.interface.js +0 -0
- package/dist/{interfaces → cjs/interfaces}/module-types.interface.js +0 -0
- package/dist/{interfaces → cjs/interfaces}/modules/container.interface.js +0 -0
- package/dist/{interfaces → cjs/interfaces}/modules/module-container-factory.interface.js +0 -0
- package/dist/{interfaces → cjs/interfaces}/modules/module-container.interface.js +0 -0
- package/dist/{interfaces → cjs/interfaces}/modules/module-graph.interface.js +0 -0
- package/dist/{interfaces → cjs/interfaces}/modules/module-token-factory.interface.js +0 -0
- package/dist/{interfaces → cjs/interfaces}/modules/modules-container.interface.js +0 -0
- package/dist/{interfaces → cjs/interfaces}/modules/provider-token-factory.interface.js +0 -0
- package/dist/{interfaces → cjs/interfaces}/nexus-application.interface.js +0 -0
- package/dist/{interfaces → cjs/interfaces}/on-module-init.interface.js +0 -0
- package/dist/{interfaces → cjs/interfaces}/plugins/module-plugin.interface.js +0 -0
- package/dist/{interfaces → cjs/interfaces}/plugins/scanner-plugin.interface.js +0 -0
- package/dist/{interfaces → cjs/interfaces}/type.interface.js +0 -0
- package/dist/{interfaces → cjs/interfaces}/utils/hash-utils.interface.js +0 -0
- package/dist/{interfaces → cjs/interfaces}/utils/index.js +0 -0
- package/dist/{server.js → cjs/server.js} +0 -0
- package/dist/{browser.d.ts → types/browser.d.ts} +0 -0
- package/dist/{core → types/core}/graph/helpers/index.d.ts +0 -0
- package/dist/{core → types/core}/graph/providers/analyze-function-provider.d.ts +0 -0
- package/dist/{core → types/core}/graph/providers/provider-factory.d.ts +0 -0
- package/dist/{core → types/core}/modules/module-container-factory.d.ts +0 -0
- package/dist/{core → types/core}/modules/modules-container.d.ts +0 -0
- package/dist/{core → types/core}/resolver/providers-container.d.ts +0 -0
- package/dist/{core → types/core}/resolver/resolver.d.ts +0 -0
- package/dist/{decorators → types/decorators}/global.d.ts +0 -0
- package/dist/{interfaces → types/interfaces}/abstract.interface.d.ts +0 -0
- package/dist/{interfaces → types/interfaces}/constants.d.ts +0 -0
- package/dist/{interfaces → types/interfaces}/dynamic-module.interface.d.ts +0 -0
- package/dist/{interfaces → types/interfaces}/index.d.ts +6 -6
- package/dist/{interfaces → types/interfaces}/injectable.interface.d.ts +0 -0
- package/dist/{interfaces → types/interfaces}/injection-token.interface.d.ts +0 -0
- package/dist/{interfaces → types/interfaces}/module-metadata.interface.d.ts +0 -0
- package/dist/{interfaces → types/interfaces}/modules/index.d.ts +1 -1
- package/dist/{interfaces → types/interfaces}/modules/module-container-factory.interface.d.ts +0 -0
- package/dist/{interfaces → types/interfaces}/modules/module-token-factory.interface.d.ts +0 -0
- package/dist/{interfaces → types/interfaces}/modules/modules-container.interface.d.ts +0 -0
- package/dist/{interfaces → types/interfaces}/modules/provider-token-factory.interface.d.ts +0 -0
- package/dist/{interfaces → types/interfaces}/plugins/index.d.ts +1 -1
- /package/dist/{interfaces → types/interfaces}/plugins/module-plugin.interface.d.ts +0 -0
- /package/dist/{interfaces → types/interfaces}/plugins/scanner-plugin.interface.d.ts +0 -0
- /package/dist/{interfaces → types/interfaces}/type.interface.d.ts +0 -0
- /package/dist/{interfaces → types/interfaces}/utils/index.d.ts +0 -0
- /package/dist/{server.d.ts → types/server.d.ts} +0 -0
- /package/dist/{utils → types/utils}/shared.utils.d.ts +0 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { HashUtilsServer } from "../utils/hash-utils.server.js";
|
|
2
|
+
import { Container } from "./modules/container.js";
|
|
3
|
+
/**
|
|
4
|
+
* @deprecated
|
|
5
|
+
* It will be removed in version 1.0.0.
|
|
6
|
+
* these classes work the same way. For the new behavior, use @NexusApplications
|
|
7
|
+
*/
|
|
8
|
+
export class NexusApplicationsServer {
|
|
9
|
+
constructor(rootModule) {
|
|
10
|
+
this.rootModule = rootModule;
|
|
11
|
+
this.hashUtil = new HashUtilsServer();
|
|
12
|
+
this.container = new Container(this.hashUtil);
|
|
13
|
+
this.scannerPlugins = [];
|
|
14
|
+
this._parentContainer = null;
|
|
15
|
+
}
|
|
16
|
+
static create(rootModule) {
|
|
17
|
+
return new NexusApplicationsServer(rootModule);
|
|
18
|
+
}
|
|
19
|
+
async bootstrap() {
|
|
20
|
+
await this.container.run(this.rootModule);
|
|
21
|
+
for (const scannerPlugin of this.scannerPlugins) {
|
|
22
|
+
await scannerPlugin.scan(this.container.graph);
|
|
23
|
+
}
|
|
24
|
+
return this;
|
|
25
|
+
}
|
|
26
|
+
addScannerPlugin(scanner) {
|
|
27
|
+
const plugins = Array.isArray(scanner) ? scanner : [scanner];
|
|
28
|
+
this.scannerPlugins.push(...plugins);
|
|
29
|
+
return this;
|
|
30
|
+
}
|
|
31
|
+
async get(token) {
|
|
32
|
+
const dependency = await this.container.get(token);
|
|
33
|
+
if (!dependency) {
|
|
34
|
+
return this._parentContainer?.get(token);
|
|
35
|
+
}
|
|
36
|
+
return dependency;
|
|
37
|
+
}
|
|
38
|
+
get errors() {
|
|
39
|
+
return this.container.errors;
|
|
40
|
+
}
|
|
41
|
+
async() {
|
|
42
|
+
return this;
|
|
43
|
+
}
|
|
44
|
+
setParent(parentContainer) {
|
|
45
|
+
this._parentContainer = parentContainer;
|
|
46
|
+
return this;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=nexus-applications.server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nexus-applications.server.js","sourceRoot":"","sources":["../../../src/core/nexus-applications.server.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD;;;;GAIG;AACH,MAAM,OAAO,uBAAuB;IAMnC,YAAqC,UAAkB;QAAlB,eAAU,GAAV,UAAU,CAAQ;QALtC,aAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;QACjC,cAAS,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzC,mBAAc,GAA6B,EAAE,CAAC;QACvD,qBAAgB,GAAqC,IAAI,CAAC;IAER,CAAC;IAE3D,MAAM,CAAC,MAAM,CAAC,UAAkB;QAC/B,OAAO,IAAI,uBAAuB,CAAC,UAAU,CAAC,CAAC;IAChD,CAAC;IAEM,KAAK,CAAC,SAAS;QACrB,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE1C,KAAK,MAAM,aAAa,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACjD,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAChD,CAAC;QAED,OAAO,IAAI,CAAC;IACb,CAAC;IAEM,gBAAgB,CACtB,OAA0D;QAE1D,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC7D,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC;IACb,CAAC;IAEM,KAAK,CAAC,GAAG,CAAI,KAAqB;QACxC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAI,KAAK,CAAC,CAAC;QAEtD,IAAI,CAAC,UAAU,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAI,KAAK,CAAC,CAAC;QAC7C,CAAC;QAED,OAAO,UAAU,CAAC;IACnB,CAAC;IAED,IAAW,MAAM;QAChB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED,KAAK;QACJ,OAAO,IAAI,CAAC;IACb,CAAC;IAEM,SAAS,CAAC,eAA0C;QAC1D,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;QACxC,OAAO,IAAI,CAAC;IACb,CAAC;CACD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providers-container.js","sourceRoot":"","sources":["../../../../src/core/resolver/providers-container.ts"],"names":[],"mappings":"AAEA,kEAAkE;AAClE,MAAM,OAAO,kBAAmB,SAAQ,GAAwB;CAAG"}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { EdgeTypeEnum, Scope, } from "../../interfaces/index.js";
|
|
2
|
+
import { isClassProvider, isFactoryProvider, isValueProvider, } from "../../utils/helpers.js";
|
|
3
|
+
import { ProvidersContainer } from "./providers-container.js";
|
|
4
|
+
function isCircularDependencyFn(fn) {
|
|
5
|
+
// @ts-expect-error
|
|
6
|
+
return !!(typeof fn === "function" && fn.dependencyName);
|
|
7
|
+
}
|
|
8
|
+
export class Resolver {
|
|
9
|
+
constructor(graph) {
|
|
10
|
+
this.graph = graph;
|
|
11
|
+
this.providersContainer = new ProvidersContainer();
|
|
12
|
+
}
|
|
13
|
+
async resolveProvider(token, resolveCache = new ProvidersContainer(), isCircularDependency = false) {
|
|
14
|
+
const node = this.graph.getNode(token);
|
|
15
|
+
if (!node) {
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
// Get the scope of the provider
|
|
19
|
+
const scope = node.scope;
|
|
20
|
+
// For Transient scope, always create a new instance (no caching at all)
|
|
21
|
+
if (scope === Scope.Transient) {
|
|
22
|
+
const [instance] = await this.createInstance(node, resolveCache, isCircularDependency);
|
|
23
|
+
return instance;
|
|
24
|
+
}
|
|
25
|
+
// For Singleton scope, check global cache first
|
|
26
|
+
if (scope === Scope.Singleton && this.providersContainer.has(token)) {
|
|
27
|
+
return this.providersContainer.get(token);
|
|
28
|
+
}
|
|
29
|
+
// For Request and Singleton scopes, check resolve cache (within current resolution tree)
|
|
30
|
+
if (resolveCache.has(token)) {
|
|
31
|
+
return resolveCache.get(token);
|
|
32
|
+
}
|
|
33
|
+
const [instance, saveInCache] = await this.createInstance(node, resolveCache, isCircularDependency);
|
|
34
|
+
// Add to resolve cache for current resolution context (for Request and Singleton)
|
|
35
|
+
// This ensures same instance is used within a single dependency resolution tree
|
|
36
|
+
if (scope === Scope.Singleton || scope === Scope.Request) {
|
|
37
|
+
resolveCache.set(token, instance);
|
|
38
|
+
}
|
|
39
|
+
// Only save to global cache for Singleton scope
|
|
40
|
+
if (saveInCache) {
|
|
41
|
+
this.providersContainer.set(token, instance);
|
|
42
|
+
}
|
|
43
|
+
return instance;
|
|
44
|
+
}
|
|
45
|
+
async createInstance(node, resolveCache, isCircularDependency = false) {
|
|
46
|
+
const provider = node.metatype;
|
|
47
|
+
const dependencies = this.graph
|
|
48
|
+
.getEdge(node.id)
|
|
49
|
+
.filter((edge) => edge.type === EdgeTypeEnum.DEPENDENCY &&
|
|
50
|
+
edge.metadata.inject === "constructor" &&
|
|
51
|
+
edge.metadata.unreached === false)
|
|
52
|
+
.map((edge) => {
|
|
53
|
+
if (edge.metadata.isCircular) {
|
|
54
|
+
const circularResolver = () => new Proxy({}, {
|
|
55
|
+
get: (_, prop) => {
|
|
56
|
+
const instance = resolveCache.get(edge.target);
|
|
57
|
+
return instance?.[prop];
|
|
58
|
+
},
|
|
59
|
+
});
|
|
60
|
+
circularResolver.dependencyName = edge.target;
|
|
61
|
+
return circularResolver;
|
|
62
|
+
}
|
|
63
|
+
return edge.target;
|
|
64
|
+
});
|
|
65
|
+
const depsChunks = dependencies.reduce((prev, depToken) => {
|
|
66
|
+
if (isCircularDependencyFn(depToken)) {
|
|
67
|
+
prev[0].push(depToken);
|
|
68
|
+
prev[1].push(null);
|
|
69
|
+
return prev;
|
|
70
|
+
}
|
|
71
|
+
prev[0].push(null);
|
|
72
|
+
prev[1].push(depToken);
|
|
73
|
+
return prev;
|
|
74
|
+
}, [[], []]);
|
|
75
|
+
// biome-ignore lint/suspicious/noExplicitAny: dependency resolution
|
|
76
|
+
let resolvedDependencies = [];
|
|
77
|
+
for (const depToken of dependencies) {
|
|
78
|
+
if (isCircularDependencyFn(depToken)) {
|
|
79
|
+
if (isCircularDependency) {
|
|
80
|
+
resolvedDependencies.push(depToken);
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
const instance = await this.resolveProvider(
|
|
84
|
+
// @ts-expect-error
|
|
85
|
+
depToken.dependencyName, resolveCache, true);
|
|
86
|
+
resolvedDependencies.push(instance);
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
const instance = await this.resolveProvider(depToken, resolveCache);
|
|
90
|
+
resolvedDependencies.push(instance);
|
|
91
|
+
}
|
|
92
|
+
resolvedDependencies = resolvedDependencies.map((dependency, index) => {
|
|
93
|
+
if (depsChunks[0]?.[index]) {
|
|
94
|
+
return depsChunks[0]?.[index];
|
|
95
|
+
}
|
|
96
|
+
return dependency;
|
|
97
|
+
});
|
|
98
|
+
// biome-ignore lint/suspicious/noExplicitAny: instance creation
|
|
99
|
+
let instance;
|
|
100
|
+
let saveInCache = true;
|
|
101
|
+
const deps = resolvedDependencies.map((depToken) => isCircularDependencyFn(depToken) ? depToken() : depToken);
|
|
102
|
+
if (isClassProvider(provider)) {
|
|
103
|
+
instance = new provider.useClass(...deps);
|
|
104
|
+
await this.injectPropertyDependencies(instance, node, resolveCache);
|
|
105
|
+
// Determine caching strategy based on scope
|
|
106
|
+
const scope = node.scope;
|
|
107
|
+
saveInCache = scope === Scope.Singleton;
|
|
108
|
+
}
|
|
109
|
+
else if (isValueProvider(provider)) {
|
|
110
|
+
instance = provider.useValue;
|
|
111
|
+
// Value providers are always singleton
|
|
112
|
+
saveInCache = true;
|
|
113
|
+
}
|
|
114
|
+
else if (isFactoryProvider(provider)) {
|
|
115
|
+
instance = await provider.useFactory(...deps);
|
|
116
|
+
// Check scope for factory providers
|
|
117
|
+
const scope = node.scope;
|
|
118
|
+
saveInCache = scope === Scope.Singleton;
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
instance = new provider(...deps);
|
|
122
|
+
await this.injectPropertyDependencies(instance, node, resolveCache);
|
|
123
|
+
// Check scope for function providers
|
|
124
|
+
const scope = node.scope;
|
|
125
|
+
saveInCache = scope === Scope.Singleton;
|
|
126
|
+
}
|
|
127
|
+
// Call lifecycle hook with error handling
|
|
128
|
+
if (instance?.onModuleInit) {
|
|
129
|
+
try {
|
|
130
|
+
await instance.onModuleInit();
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
// Re-throw with additional context about which provider failed
|
|
134
|
+
const providerName = typeof provider === "function"
|
|
135
|
+
? provider.name
|
|
136
|
+
: provider.provide?.toString() ||
|
|
137
|
+
"Unknown";
|
|
138
|
+
const errorMessage = `Failed to initialize provider "${providerName}": ${error instanceof Error ? error.message : String(error)}`;
|
|
139
|
+
const wrappedError = new Error(errorMessage);
|
|
140
|
+
// Preserve original error stack if available
|
|
141
|
+
if (error instanceof Error && error.stack) {
|
|
142
|
+
wrappedError.stack = `${wrappedError.stack}\nCaused by: ${error.stack}`;
|
|
143
|
+
}
|
|
144
|
+
throw wrappedError;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return [instance, saveInCache];
|
|
148
|
+
}
|
|
149
|
+
async injectPropertyDependencies(instance, node, resolveCache) {
|
|
150
|
+
const dependencies = this.graph
|
|
151
|
+
.getEdge(node.id)
|
|
152
|
+
.filter((edge) => edge.type === EdgeTypeEnum.DEPENDENCY &&
|
|
153
|
+
edge.metadata.inject === "property" &&
|
|
154
|
+
edge.metadata.unreached === false &&
|
|
155
|
+
edge.metadata.isCircular === false);
|
|
156
|
+
for (const edge of dependencies) {
|
|
157
|
+
instance[edge.metadata.key] = await this.resolveProvider(edge.target, resolveCache);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../../../src/core/resolver/resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import "reflect-metadata";
|
|
2
|
+
import { MODULE_GLOBAL_WATERMARK } from "../interfaces/index.js";
|
|
3
|
+
export function Global() {
|
|
4
|
+
// biome-ignore lint/complexity/noBannedTypes: Function type needed for decorator
|
|
5
|
+
return (target) => {
|
|
6
|
+
Reflect.defineMetadata(MODULE_GLOBAL_WATERMARK, true, target);
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=global.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"global.js","sourceRoot":"","sources":["../../../src/decorators/global.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAExD,MAAM,UAAU,MAAM;IACrB,iFAAiF;IACjF,OAAO,CAAC,MAAgB,EAAE,EAAE;QAC3B,OAAO,CAAC,cAAc,CAAC,uBAAuB,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC/D,CAAC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import "reflect-metadata";
|
|
2
|
+
import { INJECT_WATERMARK, PROPERTY_DEPS_METADATA, SELF_DECLARED_DEPS_METADATA, } from "../interfaces/index.js";
|
|
3
|
+
/**
|
|
4
|
+
* Explicitly specifies the injection token for a constructor parameter or property.
|
|
5
|
+
*
|
|
6
|
+
* This decorator is used when:
|
|
7
|
+
* - You need to inject a provider by a string or symbol token
|
|
8
|
+
* - TypeScript's reflection cannot determine the type (e.g., interfaces, circular dependencies)
|
|
9
|
+
* - You want to inject a different implementation than the declared type
|
|
10
|
+
*
|
|
11
|
+
* @param token - The injection token (class, string, or symbol)
|
|
12
|
+
* @returns A decorator that can be applied to constructor parameters or properties
|
|
13
|
+
* @throws {Error} If the token is undefined (often due to circular dependencies)
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* // Constructor parameter injection
|
|
18
|
+
* @Injectable()
|
|
19
|
+
* class UserService {
|
|
20
|
+
* constructor(
|
|
21
|
+
* @Inject('DATABASE_CONFIG') private config: DatabaseConfig,
|
|
22
|
+
* @Inject(Logger) private logger: Logger
|
|
23
|
+
* ) {}
|
|
24
|
+
* }
|
|
25
|
+
*
|
|
26
|
+
* // Property injection
|
|
27
|
+
* @Injectable()
|
|
28
|
+
* class ProductService {
|
|
29
|
+
* @Inject('CACHE_MANAGER')
|
|
30
|
+
* private cache: CacheManager;
|
|
31
|
+
* }
|
|
32
|
+
*
|
|
33
|
+
* // Resolving circular dependencies
|
|
34
|
+
* @Injectable()
|
|
35
|
+
* class ServiceA {
|
|
36
|
+
* constructor(
|
|
37
|
+
* @Inject(forwardRef(() => ServiceB)) private serviceB: ServiceB
|
|
38
|
+
* ) {}
|
|
39
|
+
* }
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export function Inject(token) {
|
|
43
|
+
return (target, propertyKey, parameterIndex) => {
|
|
44
|
+
Reflect.defineMetadata(INJECT_WATERMARK, true, target);
|
|
45
|
+
const type = token ||
|
|
46
|
+
Reflect.getMetadata("design:type", target, propertyKey);
|
|
47
|
+
if (!type) {
|
|
48
|
+
throw new Error(`
|
|
49
|
+
Token is undefined at index: ${parameterIndex}. This often occurs due to circular dependencies.
|
|
50
|
+
Ensure there are no circular dependencies in your files or barrel files.`);
|
|
51
|
+
}
|
|
52
|
+
if (parameterIndex === undefined) {
|
|
53
|
+
let properties = Reflect.getMetadata(PROPERTY_DEPS_METADATA, target) || [];
|
|
54
|
+
properties = [...properties, { key: propertyKey, type }];
|
|
55
|
+
Reflect.defineMetadata(PROPERTY_DEPS_METADATA, properties, target.constructor);
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
let dependencies = Reflect.getMetadata(SELF_DECLARED_DEPS_METADATA, target) || [];
|
|
59
|
+
dependencies = [...dependencies, { index: parameterIndex, param: type }];
|
|
60
|
+
Reflect.defineMetadata(SELF_DECLARED_DEPS_METADATA, dependencies, target);
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=inject.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inject.js","sourceRoot":"","sources":["../../../src/decorators/inject.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EACN,gBAAgB,EAChB,sBAAsB,EACtB,2BAA2B,GAE3B,MAAM,eAAe,CAAC;AAEvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,MAAM,UAAU,MAAM,CACrB,KAA6B;IAE7B,OAAO,CACN,MAAc,EACd,WAA6B,EAC7B,cAAuB,EACtB,EAAE;QACH,OAAO,CAAC,cAAc,CAAC,gBAAgB,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAEvD,MAAM,IAAI,GACT,KAAK;YACL,OAAO,CAAC,WAAW,CAAC,aAAa,EAAE,MAAM,EAAE,WAAqB,CAAC,CAAC;QAEnE,IAAI,CAAC,IAAI,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC;mCACgB,cAAc;yEACwB,CAAC,CAAC;QACzE,CAAC;QAED,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;YAClC,IAAI,UAAU,GACb,OAAO,CAAC,WAAW,CAAC,sBAAsB,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;YAE3D,UAAU,GAAG,CAAC,GAAG,UAAU,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;YACzD,OAAO,CAAC,cAAc,CACrB,sBAAsB,EACtB,UAAU,EACV,MAAM,CAAC,WAAW,CAClB,CAAC;YACF,OAAO;QACR,CAAC;QAED,IAAI,YAAY,GACf,OAAO,CAAC,WAAW,CAAC,2BAA2B,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;QAEhE,YAAY,GAAG,CAAC,GAAG,YAAY,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACzE,OAAO,CAAC,cAAc,CAAC,2BAA2B,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;IAC3E,CAAC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import "reflect-metadata";
|
|
2
|
+
import { INJECTABLE_OPTIONS, INJECTABLE_WATERMARK, Scope } from "../interfaces/index.js";
|
|
3
|
+
/**
|
|
4
|
+
* Marks a class as injectable, making it available for dependency injection.
|
|
5
|
+
*
|
|
6
|
+
* This decorator must be applied to any class that you want to use as a provider
|
|
7
|
+
* in the IoC container. It configures the scope and other options for the provider.
|
|
8
|
+
*
|
|
9
|
+
* @param options - Configuration options for the injectable
|
|
10
|
+
* @param options.scope - The lifecycle scope of the provider:
|
|
11
|
+
* - `Scope.Singleton` (default): One instance shared across the entire application
|
|
12
|
+
* - `Scope.Request`: New instance for each container.get() call
|
|
13
|
+
* - `Scope.Transient`: New instance every time, even within the same dependency tree
|
|
14
|
+
* @returns A class decorator
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* // Singleton scope (default)
|
|
19
|
+
* @Injectable()
|
|
20
|
+
* class UserService {
|
|
21
|
+
* constructor(private db: Database) {}
|
|
22
|
+
* }
|
|
23
|
+
*
|
|
24
|
+
* // Request scope
|
|
25
|
+
* @Injectable({ scope: Scope.Request })
|
|
26
|
+
* class RequestContext {
|
|
27
|
+
* requestId = Math.random();
|
|
28
|
+
* }
|
|
29
|
+
*
|
|
30
|
+
* // Transient scope
|
|
31
|
+
* @Injectable({ scope: Scope.Transient })
|
|
32
|
+
* class Logger {
|
|
33
|
+
* timestamp = Date.now();
|
|
34
|
+
* }
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export function Injectable(options = { scope: Scope.Singleton }) {
|
|
38
|
+
return (target) => {
|
|
39
|
+
Reflect.defineMetadata(INJECTABLE_OPTIONS, options, target);
|
|
40
|
+
Reflect.defineMetadata(INJECTABLE_WATERMARK, true, target);
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=injectable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injectable.js","sourceRoot":"","sources":["../../../src/decorators/injectable.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEhF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,MAAM,UAAU,UAAU,CACzB,UAA6B,EAAE,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE;IAEvD,OAAO,CAAC,MAAM,EAAE,EAAE;QACjB,OAAO,CAAC,cAAc,CAAC,kBAAkB,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5D,OAAO,CAAC,cAAc,CAAC,oBAAoB,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5D,CAAC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import "reflect-metadata";
|
|
2
|
+
import { MODULE_METADATA, MODULE_WATERMARK, validateModuleKeys, } from "../interfaces/index.js";
|
|
3
|
+
/**
|
|
4
|
+
* Defines a module in the application.
|
|
5
|
+
*
|
|
6
|
+
* A module is a class annotated with @NsModule() decorator that organizes
|
|
7
|
+
* the application structure. Modules can:
|
|
8
|
+
* - Declare providers that will be instantiated by the container
|
|
9
|
+
* - Import other modules to use their exported providers
|
|
10
|
+
* - Export providers to make them available to other modules
|
|
11
|
+
*
|
|
12
|
+
* @param metadata - Module configuration
|
|
13
|
+
* @param metadata.imports - Modules whose exported providers should be available in this module
|
|
14
|
+
* @param metadata.providers - Providers that belong to this module
|
|
15
|
+
* @param metadata.exports - Providers or modules to export (make available to importing modules)
|
|
16
|
+
* @returns A class decorator
|
|
17
|
+
* @throws {Error} If invalid metadata keys are provided
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* // Basic module
|
|
22
|
+
* @NsModule({
|
|
23
|
+
* providers: [UserService, UserRepository],
|
|
24
|
+
* exports: [UserService]
|
|
25
|
+
* })
|
|
26
|
+
* class UserModule {}
|
|
27
|
+
*
|
|
28
|
+
* // Module with imports
|
|
29
|
+
* @NsModule({
|
|
30
|
+
* imports: [DatabaseModule, LoggerModule],
|
|
31
|
+
* providers: [ProductService],
|
|
32
|
+
* exports: [ProductService]
|
|
33
|
+
* })
|
|
34
|
+
* class ProductModule {}
|
|
35
|
+
*
|
|
36
|
+
* // Root module
|
|
37
|
+
* @NsModule({
|
|
38
|
+
* imports: [UserModule, ProductModule],
|
|
39
|
+
* providers: [AppService]
|
|
40
|
+
* })
|
|
41
|
+
* class AppModule {}
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export function NsModule(metadata) {
|
|
45
|
+
const propsKeys = Object.keys(metadata);
|
|
46
|
+
validateModuleKeys(propsKeys);
|
|
47
|
+
return (target) => {
|
|
48
|
+
Reflect.defineMetadata(MODULE_WATERMARK, true, target);
|
|
49
|
+
Reflect.defineMetadata(MODULE_METADATA.IMPORTS, metadata.imports || [], target);
|
|
50
|
+
Reflect.defineMetadata(MODULE_METADATA.EXPORTS, metadata.exports || [], target);
|
|
51
|
+
Reflect.defineMetadata(MODULE_METADATA.PROVIDERS, metadata.providers || [], target);
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=nsModule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nsModule.js","sourceRoot":"","sources":["../../../src/decorators/nsModule.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAE1B,OAAO,EACN,eAAe,EACf,gBAAgB,EAChB,kBAAkB,GAClB,MAAM,eAAe,CAAC;AAEvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,MAAM,UAAU,QAAQ,CAAC,QAAwB;IAChD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAE9B,OAAO,CAAC,MAAM,EAAE,EAAE;QACjB,OAAO,CAAC,cAAc,CAAC,gBAAgB,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QACvD,OAAO,CAAC,cAAc,CACrB,eAAe,CAAC,OAAO,EACvB,QAAQ,CAAC,OAAO,IAAI,EAAE,EACtB,MAAM,CACN,CAAC;QACF,OAAO,CAAC,cAAc,CACrB,eAAe,CAAC,OAAO,EACvB,QAAQ,CAAC,OAAO,IAAI,EAAE,EACtB,MAAM,CACN,CAAC;QACF,OAAO,CAAC,cAAc,CACrB,eAAe,CAAC,SAAS,EACzB,QAAQ,CAAC,SAAS,IAAI,EAAE,EACxB,MAAM,CACN,CAAC;IACH,CAAC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import "reflect-metadata";
|
|
2
|
+
import { OPTIONAL_WATERMARK, PROPERTY_OPTIONAL_DEPS_METADATA, SELF_DECLARED_OPTIONAL_DEPS_METADATA, } from "../interfaces/index.js";
|
|
3
|
+
/**
|
|
4
|
+
* Marks a dependency as optional.
|
|
5
|
+
*
|
|
6
|
+
* When a dependency is marked as optional, the container will not throw an error
|
|
7
|
+
* if the provider is not found. Instead, it will inject `undefined`.
|
|
8
|
+
*
|
|
9
|
+
* This is useful for:
|
|
10
|
+
* - Optional features that may not be available in all configurations
|
|
11
|
+
* - Graceful degradation when certain services are not registered
|
|
12
|
+
* - Testing scenarios where you want to omit certain dependencies
|
|
13
|
+
*
|
|
14
|
+
* @returns A decorator that can be applied to constructor parameters or properties
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* // Optional constructor parameter
|
|
19
|
+
* @Injectable()
|
|
20
|
+
* class UserService {
|
|
21
|
+
* constructor(
|
|
22
|
+
* private db: Database,
|
|
23
|
+
* @Optional() private cache?: CacheService
|
|
24
|
+
* ) {
|
|
25
|
+
* // cache will be undefined if CacheService is not registered
|
|
26
|
+
* }
|
|
27
|
+
* }
|
|
28
|
+
*
|
|
29
|
+
* // Optional property injection
|
|
30
|
+
* @Injectable()
|
|
31
|
+
* class ProductService {
|
|
32
|
+
* @Optional()
|
|
33
|
+
* @Inject('ANALYTICS')
|
|
34
|
+
* private analytics?: AnalyticsService;
|
|
35
|
+
*
|
|
36
|
+
* trackEvent(event: string) {
|
|
37
|
+
* // Only track if analytics service is available
|
|
38
|
+
* this.analytics?.track(event);
|
|
39
|
+
* }
|
|
40
|
+
* }
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export function Optional() {
|
|
44
|
+
return (target, propertyKey, parameterIndex) => {
|
|
45
|
+
Reflect.defineMetadata(OPTIONAL_WATERMARK, true, target);
|
|
46
|
+
if (parameterIndex === undefined) {
|
|
47
|
+
let properties = Reflect.getMetadata(PROPERTY_OPTIONAL_DEPS_METADATA, target) || [];
|
|
48
|
+
properties = [...properties, { key: propertyKey }];
|
|
49
|
+
Reflect.defineMetadata(PROPERTY_OPTIONAL_DEPS_METADATA, properties, target.constructor);
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
let properties = Reflect.getMetadata(SELF_DECLARED_OPTIONAL_DEPS_METADATA, target) || [];
|
|
53
|
+
properties = [...properties, { index: parameterIndex }];
|
|
54
|
+
Reflect.defineMetadata(SELF_DECLARED_OPTIONAL_DEPS_METADATA, properties, target);
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=optional.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optional.js","sourceRoot":"","sources":["../../../src/decorators/optional.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAC;AAC1B,OAAO,EACN,kBAAkB,EAClB,+BAA+B,EAC/B,oCAAoC,GACpC,MAAM,eAAe,CAAC;AAEvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAM,UAAU,QAAQ;IACvB,OAAO,CACN,MAAc,EACd,WAA6B,EAC7B,cAAuB,EACtB,EAAE;QACH,OAAO,CAAC,cAAc,CAAC,kBAAkB,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAEzD,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;YAClC,IAAI,UAAU,GACb,OAAO,CAAC,WAAW,CAAC,+BAA+B,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;YAEpE,UAAU,GAAG,CAAC,GAAG,UAAU,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAC;YACnD,OAAO,CAAC,cAAc,CACrB,+BAA+B,EAC/B,UAAU,EACV,MAAM,CAAC,WAAW,CAClB,CAAC;YACF,OAAO;QACR,CAAC;QAED,IAAI,UAAU,GACb,OAAO,CAAC,WAAW,CAAC,oCAAoC,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;QAEzE,UAAU,GAAG,CAAC,GAAG,UAAU,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;QACxD,OAAO,CAAC,cAAc,CACrB,oCAAoC,EACpC,UAAU,EACV,MAAM,CACN,CAAC;IACH,CAAC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// Re-export shared types and errors
|
|
2
|
+
export { ContainerNotCompiledError } from "@nexus-ioc/shared";
|
|
3
|
+
export { Container } from "./core/modules/container.js";
|
|
4
|
+
export { NexusApplications } from "./core/nexus-applications.js";
|
|
5
|
+
export { Global } from "./decorators/global.js";
|
|
6
|
+
export { Inject } from "./decorators/inject.js";
|
|
7
|
+
export { Injectable } from "./decorators/injectable.js";
|
|
8
|
+
export { NsModule } from "./decorators/nsModule.js";
|
|
9
|
+
export { Optional } from "./decorators/optional.js";
|
|
10
|
+
export * from "./interfaces/index.js";
|
|
11
|
+
export * from "./utils/helpers.js";
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abstract.interface.js","sourceRoot":"","sources":["../../../src/interfaces/abstract.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export const INJECTABLE_WATERMARK = "__injectable__";
|
|
2
|
+
export const INJECTABLE_OPTIONS = "__injectable:options__";
|
|
3
|
+
export const INJECT_WATERMARK = "__inject__";
|
|
4
|
+
export const OPTIONAL_WATERMARK = "__optional__";
|
|
5
|
+
export const MODULE_WATERMARK = "__module__";
|
|
6
|
+
export const MODULE_GLOBAL_WATERMARK = "__module:global__";
|
|
7
|
+
export const PROVIDER_TOKEN_WATERMARK = "__provider__token__";
|
|
8
|
+
export const MODULE_TOKEN_WATERMARK = "__module__token__";
|
|
9
|
+
export const SELF_DECLARED_DEPS_METADATA = "self:paramtypes";
|
|
10
|
+
export const PROPERTY_DEPS_METADATA = "self:properties_metadata";
|
|
11
|
+
export const SELF_DECLARED_OPTIONAL_DEPS_METADATA = "self:paramtypes:optional";
|
|
12
|
+
export const PROPERTY_OPTIONAL_DEPS_METADATA = "self:properties_metadata:optional";
|
|
13
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/interfaces/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,oBAAoB,GAAG,gBAAgB,CAAC;AACrD,MAAM,CAAC,MAAM,kBAAkB,GAAG,wBAAwB,CAAC;AAC3D,MAAM,CAAC,MAAM,gBAAgB,GAAG,YAAY,CAAC;AAC7C,MAAM,CAAC,MAAM,kBAAkB,GAAG,cAAc,CAAC;AACjD,MAAM,CAAC,MAAM,gBAAgB,GAAG,YAAY,CAAC;AAC7C,MAAM,CAAC,MAAM,uBAAuB,GAAG,mBAAmB,CAAC;AAE3D,MAAM,CAAC,MAAM,wBAAwB,GAAG,qBAAqB,CAAC;AAC9D,MAAM,CAAC,MAAM,sBAAsB,GAAG,mBAAmB,CAAC;AAE1D,MAAM,CAAC,MAAM,2BAA2B,GAAG,iBAAiB,CAAC;AAC7D,MAAM,CAAC,MAAM,sBAAsB,GAAG,0BAA0B,CAAC;AACjE,MAAM,CAAC,MAAM,oCAAoC,GAAG,0BAA0B,CAAC;AAC/E,MAAM,CAAC,MAAM,+BAA+B,GAC3C,mCAAmC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamic-module.interface.js","sourceRoot":"","sources":["../../../src/interfaces/dynamic-module.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export * from "./abstract.interface.js";
|
|
2
|
+
export * from "./constants.js";
|
|
3
|
+
export * from "./dynamic-module.interface.js";
|
|
4
|
+
export * from "./injectable.interface.js";
|
|
5
|
+
export * from "./injection-token.interface.js";
|
|
6
|
+
export * from "./module-metadata.interface.js";
|
|
7
|
+
export * from "./module-types.interface.js";
|
|
8
|
+
export * from "./modules/index.js";
|
|
9
|
+
export * from "./nexus-application.interface.js";
|
|
10
|
+
export * from "./on-module-init.interface.js";
|
|
11
|
+
export * from "./plugins/index.js";
|
|
12
|
+
export * from "./scope.interface.js";
|
|
13
|
+
export * from "./type.interface.js";
|
|
14
|
+
export * from "./utils/index.js";
|
|
15
|
+
export * from "./validate-module-keys.js";
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/interfaces/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,WAAW,CAAC;AAC1B,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,SAAS,CAAC;AACxB,cAAc,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injectable.interface.js","sourceRoot":"","sources":["../../../src/interfaces/injectable.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injection-token.interface.js","sourceRoot":"","sources":["../../../src/interfaces/injection-token.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module-metadata.interface.js","sourceRoot":"","sources":["../../../src/interfaces/module-metadata.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module-types.interface.js","sourceRoot":"","sources":["../../../src/interfaces/module-types.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"container.interface.js","sourceRoot":"","sources":["../../../../src/interfaces/modules/container.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from "./container.interface.js";
|
|
2
|
+
export * from "./module-container.interface.js";
|
|
3
|
+
export * from "./module-container-factory.interface.js";
|
|
4
|
+
export * from "./module-graph.interface.js";
|
|
5
|
+
export * from "./module-token-factory.interface.js";
|
|
6
|
+
export * from "./modules-container.interface.js";
|
|
7
|
+
export * from "./provider-token-factory.interface.js";
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/interfaces/modules/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sCAAsC,CAAC;AACrD,cAAc,0BAA0B,CAAC;AACzC,cAAc,kCAAkC,CAAC;AACjD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oCAAoC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module-container-factory.interface.js","sourceRoot":"","sources":["../../../../src/interfaces/modules/module-container-factory.interface.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module-container.interface.js","sourceRoot":"","sources":["../../../../src/interfaces/modules/module-container.interface.ts"],"names":[],"mappings":""}
|