@nexus-ioc/core 0.4.2 → 0.6.2
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/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/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/cjs/utils/hash-utils.server.js.map +1 -0
- package/dist/{utils → cjs/utils}/helpers.js +2 -1
- 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/{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/{core → types/core}/graph/providers/provider-factory.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}/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/types/utils/hash-utils.d.ts +7 -0
- package/package.json +82 -60
- 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/module-token-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/{utils → cjs/utils}/hash-utils.browser.js +0 -0
- package/dist/{utils → cjs/utils}/hash-utils.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}/modules/module-container-factory.d.ts +0 -0
- package/dist/{core → types/core}/modules/module-token-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}/hash-utils.browser.d.ts +0 -0
- /package/dist/{utils → types/utils}/hash-utils.server.d.ts +0 -0
- /package/dist/{utils → types/utils}/helpers.d.ts +0 -0
- /package/dist/{utils → types/utils}/shared.utils.d.ts +0 -0
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NexusApplications = void 0;
|
|
4
|
+
const interfaces_1 = require("../interfaces");
|
|
5
|
+
const hash_utils_1 = require("../utils/hash-utils");
|
|
6
|
+
const container_1 = require("./modules/container");
|
|
7
|
+
/**
|
|
8
|
+
* NexusApplications is the main application class that provides a high-level
|
|
9
|
+
* API for creating and managing IoC containers.
|
|
10
|
+
*
|
|
11
|
+
* This class wraps the Container and provides additional features:
|
|
12
|
+
* - Automatic singleton initialization
|
|
13
|
+
* - Scanner plugin support for custom metadata processing
|
|
14
|
+
* - Parent-child container hierarchies
|
|
15
|
+
* - Async/sync container modes
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* const app = NexusApplications.create(AppModule);
|
|
20
|
+
* await app.bootstrap();
|
|
21
|
+
* const service = await app.get(MyService);
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
class NexusApplications {
|
|
25
|
+
/**
|
|
26
|
+
* Creates a new NexusApplications instance.
|
|
27
|
+
*
|
|
28
|
+
* @param rootModule - The root module of the application
|
|
29
|
+
* @param options - Optional configuration
|
|
30
|
+
* @param options.hashFn - Custom hash function for module identification
|
|
31
|
+
*/
|
|
32
|
+
constructor(rootModule, options) {
|
|
33
|
+
this.rootModule = rootModule;
|
|
34
|
+
this.hashUtil = new hash_utils_1.HashUtil();
|
|
35
|
+
this.isAsyncContainer = false;
|
|
36
|
+
this.container = new container_1.Container(this.hashUtil);
|
|
37
|
+
this.scannerPlugins = [];
|
|
38
|
+
this._parentContainer = null;
|
|
39
|
+
if (options?.hashFn && typeof options?.hashFn === "function") {
|
|
40
|
+
this.hashUtil = new options.hashFn();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Creates a new NexusApplications instance.
|
|
45
|
+
*
|
|
46
|
+
* This is the main entry point for creating an application.
|
|
47
|
+
*
|
|
48
|
+
* @param rootModule - The root module of the application
|
|
49
|
+
* @param options - Optional configuration
|
|
50
|
+
* @param options.hashFn - Custom hash function for module identification
|
|
51
|
+
* @returns A new NexusApplications instance
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```typescript
|
|
55
|
+
* const app = NexusApplications.create(AppModule);
|
|
56
|
+
* await app.bootstrap();
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
static create(rootModule, options) {
|
|
60
|
+
return new NexusApplications(rootModule, options);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Bootstraps the application by initializing the container and all providers.
|
|
64
|
+
*
|
|
65
|
+
* This method:
|
|
66
|
+
* 1. Runs the container with the root module
|
|
67
|
+
* 2. Executes all registered scanner plugins
|
|
68
|
+
* 3. Pre-instantiates all singleton providers (unless async mode is enabled)
|
|
69
|
+
*
|
|
70
|
+
* @returns A promise that resolves to this instance for method chaining
|
|
71
|
+
* @throws {Error} If there are circular dependencies or missing providers
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```typescript
|
|
75
|
+
* const app = NexusApplications.create(AppModule);
|
|
76
|
+
* await app.bootstrap();
|
|
77
|
+
* // Application is now ready to use
|
|
78
|
+
* ```
|
|
79
|
+
*/
|
|
80
|
+
async bootstrap() {
|
|
81
|
+
await this.container.run(this.rootModule);
|
|
82
|
+
for (const scannerPlugin of this.scannerPlugins) {
|
|
83
|
+
await scannerPlugin.scan(this.container.graph);
|
|
84
|
+
}
|
|
85
|
+
if (!this.isAsyncContainer) {
|
|
86
|
+
for (const [token, node] of this.container.graph.nodes) {
|
|
87
|
+
if (node.type === interfaces_1.NodeTypeEnum.PROVIDER &&
|
|
88
|
+
node.scope === interfaces_1.Scope.Singleton) {
|
|
89
|
+
await this.container.get(token);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return this;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Adds one or more scanner plugins to the application.
|
|
97
|
+
*
|
|
98
|
+
* Scanner plugins are executed after the dependency graph is built
|
|
99
|
+
* and can be used to process custom metadata, validate the graph,
|
|
100
|
+
* or perform other initialization tasks.
|
|
101
|
+
*
|
|
102
|
+
* @param scanner - A single scanner plugin or an array of scanner plugins
|
|
103
|
+
* @returns This instance for method chaining
|
|
104
|
+
*
|
|
105
|
+
* @example
|
|
106
|
+
* ```typescript
|
|
107
|
+
* const app = NexusApplications.create(AppModule)
|
|
108
|
+
* .addScannerPlugin(new CustomScanner())
|
|
109
|
+
* .addScannerPlugin([new Scanner1(), new Scanner2()]);
|
|
110
|
+
* await app.bootstrap();
|
|
111
|
+
* ```
|
|
112
|
+
*/
|
|
113
|
+
addScannerPlugin(scanner) {
|
|
114
|
+
const plugins = Array.isArray(scanner) ? scanner : [scanner];
|
|
115
|
+
this.scannerPlugins.push(...plugins);
|
|
116
|
+
return this;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Resolves and returns an instance of a provider by its injection token.
|
|
120
|
+
*
|
|
121
|
+
* If the provider is not found in this container, it will attempt to
|
|
122
|
+
* resolve it from the parent container (if set).
|
|
123
|
+
*
|
|
124
|
+
* @template T - The type of the provider to resolve
|
|
125
|
+
* @param token - The injection token (class, string, or symbol)
|
|
126
|
+
* @returns A promise that resolves to the provider instance, or undefined if not found
|
|
127
|
+
*
|
|
128
|
+
* @example
|
|
129
|
+
* ```typescript
|
|
130
|
+
* const app = await NexusApplications.create(AppModule).bootstrap();
|
|
131
|
+
* const userService = await app.get(UserService);
|
|
132
|
+
* const config = await app.get('CONFIG');
|
|
133
|
+
* ```
|
|
134
|
+
*/
|
|
135
|
+
async get(token) {
|
|
136
|
+
const dependency = await this.container.get(token);
|
|
137
|
+
// Check for undefined specifically, not falsy values (null, 0, false, etc. are valid)
|
|
138
|
+
if (dependency === undefined) {
|
|
139
|
+
return this._parentContainer?.get(token);
|
|
140
|
+
}
|
|
141
|
+
return dependency;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Gets all errors that occurred during graph compilation.
|
|
145
|
+
*
|
|
146
|
+
* @returns An array of graph errors
|
|
147
|
+
*
|
|
148
|
+
* @example
|
|
149
|
+
* ```typescript
|
|
150
|
+
* const app = await NexusApplications.create(AppModule).bootstrap();
|
|
151
|
+
* if (app.errors.length > 0) {
|
|
152
|
+
* console.error('Application errors:', app.errors);
|
|
153
|
+
* }
|
|
154
|
+
* ```
|
|
155
|
+
*/
|
|
156
|
+
get errors() {
|
|
157
|
+
return this.container.errors;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Enables async mode for the container.
|
|
161
|
+
*
|
|
162
|
+
* In async mode, singleton providers are NOT pre-instantiated during
|
|
163
|
+
* bootstrap. They will be created lazily on first access via get().
|
|
164
|
+
* This can improve startup time for large applications.
|
|
165
|
+
*
|
|
166
|
+
* @returns This instance for method chaining
|
|
167
|
+
*
|
|
168
|
+
* @example
|
|
169
|
+
* ```typescript
|
|
170
|
+
* const app = NexusApplications.create(AppModule)
|
|
171
|
+
* .async();
|
|
172
|
+
* await app.bootstrap(); // Singletons are NOT created yet
|
|
173
|
+
* const service = await app.get(MyService); // Created on first access
|
|
174
|
+
* ```
|
|
175
|
+
*/
|
|
176
|
+
async() {
|
|
177
|
+
this.isAsyncContainer = true;
|
|
178
|
+
return this;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Sets a parent container for this application.
|
|
182
|
+
*
|
|
183
|
+
* When a provider is not found in this container, it will be looked up
|
|
184
|
+
* in the parent container. This enables hierarchical container structures.
|
|
185
|
+
*
|
|
186
|
+
* @param parentContainer - The parent container
|
|
187
|
+
* @returns This instance for method chaining
|
|
188
|
+
*
|
|
189
|
+
* @example
|
|
190
|
+
* ```typescript
|
|
191
|
+
* const parentApp = await NexusApplications.create(ParentModule).bootstrap();
|
|
192
|
+
* const childApp = await NexusApplications.create(ChildModule)
|
|
193
|
+
* .setParent(parentApp)
|
|
194
|
+
* .bootstrap();
|
|
195
|
+
* // childApp can access providers from parentApp
|
|
196
|
+
* ```
|
|
197
|
+
*/
|
|
198
|
+
setParent(parentContainer) {
|
|
199
|
+
this._parentContainer = parentContainer;
|
|
200
|
+
return this;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
exports.NexusApplications = NexusApplications;
|
|
204
|
+
//# sourceMappingURL=nexus-applications.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nexus-applications.js","sourceRoot":"","sources":["../../../src/core/nexus-applications.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,12 +3,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.NexusApplicationsServer = void 0;
|
|
4
4
|
const hash_utils_server_1 = require("../utils/hash-utils.server");
|
|
5
5
|
const container_1 = require("./modules/container");
|
|
6
|
+
/**
|
|
7
|
+
* @deprecated
|
|
8
|
+
* It will be removed in version 1.0.0.
|
|
9
|
+
* these classes work the same way. For the new behavior, use @NexusApplications
|
|
10
|
+
*/
|
|
6
11
|
class NexusApplicationsServer {
|
|
7
12
|
constructor(rootModule) {
|
|
8
13
|
this.rootModule = rootModule;
|
|
9
14
|
this.hashUtil = new hash_utils_server_1.HashUtilsServer();
|
|
10
15
|
this.container = new container_1.Container(this.hashUtil);
|
|
11
16
|
this.scannerPlugins = [];
|
|
17
|
+
this._parentContainer = null;
|
|
12
18
|
}
|
|
13
19
|
static create(rootModule) {
|
|
14
20
|
return new NexusApplicationsServer(rootModule);
|
|
@@ -25,12 +31,23 @@ class NexusApplicationsServer {
|
|
|
25
31
|
this.scannerPlugins.push(...plugins);
|
|
26
32
|
return this;
|
|
27
33
|
}
|
|
28
|
-
get(token) {
|
|
29
|
-
|
|
34
|
+
async get(token) {
|
|
35
|
+
const dependency = await this.container.get(token);
|
|
36
|
+
if (!dependency) {
|
|
37
|
+
return this._parentContainer?.get(token);
|
|
38
|
+
}
|
|
39
|
+
return dependency;
|
|
30
40
|
}
|
|
31
41
|
get errors() {
|
|
32
42
|
return this.container.errors;
|
|
33
43
|
}
|
|
44
|
+
async() {
|
|
45
|
+
return this;
|
|
46
|
+
}
|
|
47
|
+
setParent(parentContainer) {
|
|
48
|
+
this._parentContainer = parentContainer;
|
|
49
|
+
return this;
|
|
50
|
+
}
|
|
34
51
|
}
|
|
35
52
|
exports.NexusApplicationsServer = NexusApplicationsServer;
|
|
36
53
|
//# 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,kEAA6D;AAC7D,mDAAgD;AAEhD;;;;GAIG;AACH,MAAa,uBAAuB;IAMnC,YAAqC,UAAkB;QAAlB,eAAU,GAAV,UAAU,CAAQ;QALtC,aAAQ,GAAG,IAAI,mCAAe,EAAE,CAAC;QACjC,cAAS,GAAG,IAAI,qBAAS,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;AApDD,0DAoDC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ProvidersContainer = void 0;
|
|
4
|
-
// biome-ignore lint/suspicious/noExplicitAny:
|
|
4
|
+
// biome-ignore lint/suspicious/noExplicitAny: providers container
|
|
5
5
|
class ProvidersContainer extends Map {
|
|
6
6
|
}
|
|
7
7
|
exports.ProvidersContainer = ProvidersContainer;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providers-container.js","sourceRoot":"","sources":["../../../../src/core/resolver/providers-container.ts"],"names":[],"mappings":";;;AAEA,kEAAkE;AAClE,MAAa,kBAAmB,SAAQ,GAAwB;CAAG;AAAnE,gDAAmE"}
|
|
@@ -14,18 +14,32 @@ class Resolver {
|
|
|
14
14
|
this.providersContainer = new providers_container_1.ProvidersContainer();
|
|
15
15
|
}
|
|
16
16
|
async resolveProvider(token, resolveCache = new providers_container_1.ProvidersContainer(), isCircularDependency = false) {
|
|
17
|
-
if (this.providersContainer.has(token)) {
|
|
18
|
-
return this.providersContainer.get(token);
|
|
19
|
-
}
|
|
20
17
|
const node = this.graph.getNode(token);
|
|
21
18
|
if (!node) {
|
|
22
|
-
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
// Get the scope of the provider
|
|
22
|
+
const scope = node.scope;
|
|
23
|
+
// For Transient scope, always create a new instance (no caching at all)
|
|
24
|
+
if (scope === interfaces_1.Scope.Transient) {
|
|
25
|
+
const [instance] = await this.createInstance(node, resolveCache, isCircularDependency);
|
|
26
|
+
return instance;
|
|
23
27
|
}
|
|
28
|
+
// For Singleton scope, check global cache first
|
|
29
|
+
if (scope === interfaces_1.Scope.Singleton && this.providersContainer.has(token)) {
|
|
30
|
+
return this.providersContainer.get(token);
|
|
31
|
+
}
|
|
32
|
+
// For Request and Singleton scopes, check resolve cache (within current resolution tree)
|
|
24
33
|
if (resolveCache.has(token)) {
|
|
25
34
|
return resolveCache.get(token);
|
|
26
35
|
}
|
|
27
36
|
const [instance, saveInCache] = await this.createInstance(node, resolveCache, isCircularDependency);
|
|
28
|
-
|
|
37
|
+
// Add to resolve cache for current resolution context (for Request and Singleton)
|
|
38
|
+
// This ensures same instance is used within a single dependency resolution tree
|
|
39
|
+
if (scope === interfaces_1.Scope.Singleton || scope === interfaces_1.Scope.Request) {
|
|
40
|
+
resolveCache.set(token, instance);
|
|
41
|
+
}
|
|
42
|
+
// Only save to global cache for Singleton scope
|
|
29
43
|
if (saveInCache) {
|
|
30
44
|
this.providersContainer.set(token, instance);
|
|
31
45
|
}
|
|
@@ -61,23 +75,21 @@ class Resolver {
|
|
|
61
75
|
prev[1].push(depToken);
|
|
62
76
|
return prev;
|
|
63
77
|
}, [[], []]);
|
|
64
|
-
// biome-ignore lint/suspicious/noExplicitAny:
|
|
78
|
+
// biome-ignore lint/suspicious/noExplicitAny: dependency resolution
|
|
65
79
|
let resolvedDependencies = [];
|
|
66
80
|
for (const depToken of dependencies) {
|
|
67
81
|
if (isCircularDependencyFn(depToken)) {
|
|
68
|
-
// @ts-ignore
|
|
69
82
|
if (isCircularDependency) {
|
|
70
83
|
resolvedDependencies.push(depToken);
|
|
71
84
|
continue;
|
|
72
85
|
}
|
|
73
86
|
const instance = await this.resolveProvider(
|
|
74
|
-
// @ts-
|
|
87
|
+
// @ts-expect-error
|
|
75
88
|
depToken.dependencyName, resolveCache, true);
|
|
76
89
|
resolvedDependencies.push(instance);
|
|
77
90
|
continue;
|
|
78
91
|
}
|
|
79
92
|
const instance = await this.resolveProvider(depToken, resolveCache);
|
|
80
|
-
this.providersContainer.set(depToken, instance);
|
|
81
93
|
resolvedDependencies.push(instance);
|
|
82
94
|
}
|
|
83
95
|
resolvedDependencies = resolvedDependencies.map((dependency, index) => {
|
|
@@ -86,28 +98,55 @@ class Resolver {
|
|
|
86
98
|
}
|
|
87
99
|
return dependency;
|
|
88
100
|
});
|
|
89
|
-
// biome-ignore lint/suspicious/noExplicitAny:
|
|
101
|
+
// biome-ignore lint/suspicious/noExplicitAny: instance creation
|
|
90
102
|
let instance;
|
|
91
103
|
let saveInCache = true;
|
|
92
104
|
const deps = resolvedDependencies.map((depToken) => isCircularDependencyFn(depToken) ? depToken() : depToken);
|
|
93
105
|
if ((0, helpers_1.isClassProvider)(provider)) {
|
|
94
106
|
instance = new provider.useClass(...deps);
|
|
95
107
|
await this.injectPropertyDependencies(instance, node, resolveCache);
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
108
|
+
// Determine caching strategy based on scope
|
|
109
|
+
const scope = node.scope;
|
|
110
|
+
saveInCache = scope === interfaces_1.Scope.Singleton;
|
|
99
111
|
}
|
|
100
112
|
else if ((0, helpers_1.isValueProvider)(provider)) {
|
|
101
113
|
instance = provider.useValue;
|
|
114
|
+
// Value providers are always singleton
|
|
115
|
+
saveInCache = true;
|
|
102
116
|
}
|
|
103
117
|
else if ((0, helpers_1.isFactoryProvider)(provider)) {
|
|
104
118
|
instance = await provider.useFactory(...deps);
|
|
119
|
+
// Check scope for factory providers
|
|
120
|
+
const scope = node.scope;
|
|
121
|
+
saveInCache = scope === interfaces_1.Scope.Singleton;
|
|
105
122
|
}
|
|
106
123
|
else {
|
|
107
124
|
instance = new provider(...deps);
|
|
108
125
|
await this.injectPropertyDependencies(instance, node, resolveCache);
|
|
126
|
+
// Check scope for function providers
|
|
127
|
+
const scope = node.scope;
|
|
128
|
+
saveInCache = scope === interfaces_1.Scope.Singleton;
|
|
129
|
+
}
|
|
130
|
+
// Call lifecycle hook with error handling
|
|
131
|
+
if (instance?.onModuleInit) {
|
|
132
|
+
try {
|
|
133
|
+
await instance.onModuleInit();
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
// Re-throw with additional context about which provider failed
|
|
137
|
+
const providerName = typeof provider === "function"
|
|
138
|
+
? provider.name
|
|
139
|
+
: provider.provide?.toString() ||
|
|
140
|
+
"Unknown";
|
|
141
|
+
const errorMessage = `Failed to initialize provider "${providerName}": ${error instanceof Error ? error.message : String(error)}`;
|
|
142
|
+
const wrappedError = new Error(errorMessage);
|
|
143
|
+
// Preserve original error stack if available
|
|
144
|
+
if (error instanceof Error && error.stack) {
|
|
145
|
+
wrappedError.stack = `${wrappedError.stack}\nCaused by: ${error.stack}`;
|
|
146
|
+
}
|
|
147
|
+
throw wrappedError;
|
|
148
|
+
}
|
|
109
149
|
}
|
|
110
|
-
instance?.onModuleInit?.();
|
|
111
150
|
return [instance, saveInCache];
|
|
112
151
|
}
|
|
113
152
|
async injectPropertyDependencies(instance, node, resolveCache) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../../../src/core/resolver/resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ exports.Global = Global;
|
|
|
4
4
|
require("reflect-metadata");
|
|
5
5
|
const interfaces_1 = require("../interfaces");
|
|
6
6
|
function Global() {
|
|
7
|
-
// biome-ignore lint/complexity/noBannedTypes:
|
|
7
|
+
// biome-ignore lint/complexity/noBannedTypes: Function type needed for decorator
|
|
8
8
|
return (target) => {
|
|
9
9
|
Reflect.defineMetadata(interfaces_1.MODULE_GLOBAL_WATERMARK, true, target);
|
|
10
10
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"global.js","sourceRoot":"","sources":["../../../src/decorators/global.ts"],"names":[],"mappings":";;AAGA,wBAKC;AARD,4BAA0B;AAC1B,8CAAwD;AAExD,SAAgB,MAAM;IACrB,iFAAiF;IACjF,OAAO,CAAC,MAAgB,EAAE,EAAE;QAC3B,OAAO,CAAC,cAAc,CAAC,oCAAuB,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC/D,CAAC,CAAC;AACH,CAAC"}
|
|
@@ -3,6 +3,45 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.Inject = Inject;
|
|
4
4
|
require("reflect-metadata");
|
|
5
5
|
const interfaces_1 = require("../interfaces");
|
|
6
|
+
/**
|
|
7
|
+
* Explicitly specifies the injection token for a constructor parameter or property.
|
|
8
|
+
*
|
|
9
|
+
* This decorator is used when:
|
|
10
|
+
* - You need to inject a provider by a string or symbol token
|
|
11
|
+
* - TypeScript's reflection cannot determine the type (e.g., interfaces, circular dependencies)
|
|
12
|
+
* - You want to inject a different implementation than the declared type
|
|
13
|
+
*
|
|
14
|
+
* @param token - The injection token (class, string, or symbol)
|
|
15
|
+
* @returns A decorator that can be applied to constructor parameters or properties
|
|
16
|
+
* @throws {Error} If the token is undefined (often due to circular dependencies)
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* // Constructor parameter injection
|
|
21
|
+
* @Injectable()
|
|
22
|
+
* class UserService {
|
|
23
|
+
* constructor(
|
|
24
|
+
* @Inject('DATABASE_CONFIG') private config: DatabaseConfig,
|
|
25
|
+
* @Inject(Logger) private logger: Logger
|
|
26
|
+
* ) {}
|
|
27
|
+
* }
|
|
28
|
+
*
|
|
29
|
+
* // Property injection
|
|
30
|
+
* @Injectable()
|
|
31
|
+
* class ProductService {
|
|
32
|
+
* @Inject('CACHE_MANAGER')
|
|
33
|
+
* private cache: CacheManager;
|
|
34
|
+
* }
|
|
35
|
+
*
|
|
36
|
+
* // Resolving circular dependencies
|
|
37
|
+
* @Injectable()
|
|
38
|
+
* class ServiceA {
|
|
39
|
+
* constructor(
|
|
40
|
+
* @Inject(forwardRef(() => ServiceB)) private serviceB: ServiceB
|
|
41
|
+
* ) {}
|
|
42
|
+
* }
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
6
45
|
function Inject(token) {
|
|
7
46
|
return (target, propertyKey, parameterIndex) => {
|
|
8
47
|
Reflect.defineMetadata(interfaces_1.INJECT_WATERMARK, true, target);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inject.js","sourceRoot":"","sources":["../../../src/decorators/inject.ts"],"names":[],"mappings":";;AA+CA,wBAuCC;AAtFD,4BAA0B;AAC1B,8CAKuB;AAEvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,SAAgB,MAAM,CACrB,KAA6B;IAE7B,OAAO,CACN,MAAc,EACd,WAA6B,EAC7B,cAAuB,EACtB,EAAE;QACH,OAAO,CAAC,cAAc,CAAC,6BAAgB,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,mCAAsB,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,mCAAsB,EACtB,UAAU,EACV,MAAM,CAAC,WAAW,CAClB,CAAC;YACF,OAAO;QACR,CAAC;QAED,IAAI,YAAY,GACf,OAAO,CAAC,WAAW,CAAC,wCAA2B,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,wCAA2B,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;IAC3E,CAAC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Injectable = Injectable;
|
|
4
|
+
require("reflect-metadata");
|
|
5
|
+
const interfaces_1 = require("../interfaces");
|
|
6
|
+
/**
|
|
7
|
+
* Marks a class as injectable, making it available for dependency injection.
|
|
8
|
+
*
|
|
9
|
+
* This decorator must be applied to any class that you want to use as a provider
|
|
10
|
+
* in the IoC container. It configures the scope and other options for the provider.
|
|
11
|
+
*
|
|
12
|
+
* @param options - Configuration options for the injectable
|
|
13
|
+
* @param options.scope - The lifecycle scope of the provider:
|
|
14
|
+
* - `Scope.Singleton` (default): One instance shared across the entire application
|
|
15
|
+
* - `Scope.Request`: New instance for each container.get() call
|
|
16
|
+
* - `Scope.Transient`: New instance every time, even within the same dependency tree
|
|
17
|
+
* @returns A class decorator
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* // Singleton scope (default)
|
|
22
|
+
* @Injectable()
|
|
23
|
+
* class UserService {
|
|
24
|
+
* constructor(private db: Database) {}
|
|
25
|
+
* }
|
|
26
|
+
*
|
|
27
|
+
* // Request scope
|
|
28
|
+
* @Injectable({ scope: Scope.Request })
|
|
29
|
+
* class RequestContext {
|
|
30
|
+
* requestId = Math.random();
|
|
31
|
+
* }
|
|
32
|
+
*
|
|
33
|
+
* // Transient scope
|
|
34
|
+
* @Injectable({ scope: Scope.Transient })
|
|
35
|
+
* class Logger {
|
|
36
|
+
* timestamp = Date.now();
|
|
37
|
+
* }
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
function Injectable(options = { scope: interfaces_1.Scope.Singleton }) {
|
|
41
|
+
return (target) => {
|
|
42
|
+
Reflect.defineMetadata(interfaces_1.INJECTABLE_OPTIONS, options, target);
|
|
43
|
+
Reflect.defineMetadata(interfaces_1.INJECTABLE_WATERMARK, true, target);
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=injectable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injectable.js","sourceRoot":"","sources":["../../../src/decorators/injectable.ts"],"names":[],"mappings":";;AAsCA,gCAOC;AA7CD,4BAA0B;AAE1B,8CAAgF;AAEhF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,SAAgB,UAAU,CACzB,UAA6B,EAAE,KAAK,EAAE,kBAAK,CAAC,SAAS,EAAE;IAEvD,OAAO,CAAC,MAAM,EAAE,EAAE;QACjB,OAAO,CAAC,cAAc,CAAC,+BAAkB,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5D,OAAO,CAAC,cAAc,CAAC,iCAAoB,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5D,CAAC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NsModule = NsModule;
|
|
4
|
+
require("reflect-metadata");
|
|
5
|
+
const interfaces_1 = require("../interfaces");
|
|
6
|
+
/**
|
|
7
|
+
* Defines a module in the application.
|
|
8
|
+
*
|
|
9
|
+
* A module is a class annotated with @NsModule() decorator that organizes
|
|
10
|
+
* the application structure. Modules can:
|
|
11
|
+
* - Declare providers that will be instantiated by the container
|
|
12
|
+
* - Import other modules to use their exported providers
|
|
13
|
+
* - Export providers to make them available to other modules
|
|
14
|
+
*
|
|
15
|
+
* @param metadata - Module configuration
|
|
16
|
+
* @param metadata.imports - Modules whose exported providers should be available in this module
|
|
17
|
+
* @param metadata.providers - Providers that belong to this module
|
|
18
|
+
* @param metadata.exports - Providers or modules to export (make available to importing modules)
|
|
19
|
+
* @returns A class decorator
|
|
20
|
+
* @throws {Error} If invalid metadata keys are provided
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```typescript
|
|
24
|
+
* // Basic module
|
|
25
|
+
* @NsModule({
|
|
26
|
+
* providers: [UserService, UserRepository],
|
|
27
|
+
* exports: [UserService]
|
|
28
|
+
* })
|
|
29
|
+
* class UserModule {}
|
|
30
|
+
*
|
|
31
|
+
* // Module with imports
|
|
32
|
+
* @NsModule({
|
|
33
|
+
* imports: [DatabaseModule, LoggerModule],
|
|
34
|
+
* providers: [ProductService],
|
|
35
|
+
* exports: [ProductService]
|
|
36
|
+
* })
|
|
37
|
+
* class ProductModule {}
|
|
38
|
+
*
|
|
39
|
+
* // Root module
|
|
40
|
+
* @NsModule({
|
|
41
|
+
* imports: [UserModule, ProductModule],
|
|
42
|
+
* providers: [AppService]
|
|
43
|
+
* })
|
|
44
|
+
* class AppModule {}
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
function NsModule(metadata) {
|
|
48
|
+
const propsKeys = Object.keys(metadata);
|
|
49
|
+
(0, interfaces_1.validateModuleKeys)(propsKeys);
|
|
50
|
+
return (target) => {
|
|
51
|
+
Reflect.defineMetadata(interfaces_1.MODULE_WATERMARK, true, target);
|
|
52
|
+
Reflect.defineMetadata(interfaces_1.MODULE_METADATA.IMPORTS, metadata.imports || [], target);
|
|
53
|
+
Reflect.defineMetadata(interfaces_1.MODULE_METADATA.EXPORTS, metadata.exports || [], target);
|
|
54
|
+
Reflect.defineMetadata(interfaces_1.MODULE_METADATA.PROVIDERS, metadata.providers || [], target);
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=nsModule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nsModule.js","sourceRoot":"","sources":["../../../src/decorators/nsModule.ts"],"names":[],"mappings":";;AAiDA,4BAsBC;AAvED,4BAA0B;AAE1B,8CAIuB;AAEvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,SAAgB,QAAQ,CAAC,QAAwB;IAChD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxC,IAAA,+BAAkB,EAAC,SAAS,CAAC,CAAC;IAE9B,OAAO,CAAC,MAAM,EAAE,EAAE;QACjB,OAAO,CAAC,cAAc,CAAC,6BAAgB,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QACvD,OAAO,CAAC,cAAc,CACrB,4BAAe,CAAC,OAAO,EACvB,QAAQ,CAAC,OAAO,IAAI,EAAE,EACtB,MAAM,CACN,CAAC;QACF,OAAO,CAAC,cAAc,CACrB,4BAAe,CAAC,OAAO,EACvB,QAAQ,CAAC,OAAO,IAAI,EAAE,EACtB,MAAM,CACN,CAAC;QACF,OAAO,CAAC,cAAc,CACrB,4BAAe,CAAC,SAAS,EACzB,QAAQ,CAAC,SAAS,IAAI,EAAE,EACxB,MAAM,CACN,CAAC;IACH,CAAC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Optional = Optional;
|
|
4
|
+
require("reflect-metadata");
|
|
5
|
+
const interfaces_1 = require("../interfaces");
|
|
6
|
+
/**
|
|
7
|
+
* Marks a dependency as optional.
|
|
8
|
+
*
|
|
9
|
+
* When a dependency is marked as optional, the container will not throw an error
|
|
10
|
+
* if the provider is not found. Instead, it will inject `undefined`.
|
|
11
|
+
*
|
|
12
|
+
* This is useful for:
|
|
13
|
+
* - Optional features that may not be available in all configurations
|
|
14
|
+
* - Graceful degradation when certain services are not registered
|
|
15
|
+
* - Testing scenarios where you want to omit certain dependencies
|
|
16
|
+
*
|
|
17
|
+
* @returns A decorator that can be applied to constructor parameters or properties
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* // Optional constructor parameter
|
|
22
|
+
* @Injectable()
|
|
23
|
+
* class UserService {
|
|
24
|
+
* constructor(
|
|
25
|
+
* private db: Database,
|
|
26
|
+
* @Optional() private cache?: CacheService
|
|
27
|
+
* ) {
|
|
28
|
+
* // cache will be undefined if CacheService is not registered
|
|
29
|
+
* }
|
|
30
|
+
* }
|
|
31
|
+
*
|
|
32
|
+
* // Optional property injection
|
|
33
|
+
* @Injectable()
|
|
34
|
+
* class ProductService {
|
|
35
|
+
* @Optional()
|
|
36
|
+
* @Inject('ANALYTICS')
|
|
37
|
+
* private analytics?: AnalyticsService;
|
|
38
|
+
*
|
|
39
|
+
* trackEvent(event: string) {
|
|
40
|
+
* // Only track if analytics service is available
|
|
41
|
+
* this.analytics?.track(event);
|
|
42
|
+
* }
|
|
43
|
+
* }
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
function Optional() {
|
|
47
|
+
return (target, propertyKey, parameterIndex) => {
|
|
48
|
+
Reflect.defineMetadata(interfaces_1.OPTIONAL_WATERMARK, true, target);
|
|
49
|
+
if (parameterIndex === undefined) {
|
|
50
|
+
let properties = Reflect.getMetadata(interfaces_1.PROPERTY_OPTIONAL_DEPS_METADATA, target) || [];
|
|
51
|
+
properties = [...properties, { key: propertyKey }];
|
|
52
|
+
Reflect.defineMetadata(interfaces_1.PROPERTY_OPTIONAL_DEPS_METADATA, properties, target.constructor);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
let properties = Reflect.getMetadata(interfaces_1.SELF_DECLARED_OPTIONAL_DEPS_METADATA, target) || [];
|
|
56
|
+
properties = [...properties, { index: parameterIndex }];
|
|
57
|
+
Reflect.defineMetadata(interfaces_1.SELF_DECLARED_OPTIONAL_DEPS_METADATA, properties, target);
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=optional.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"optional.js","sourceRoot":"","sources":["../../../src/decorators/optional.ts"],"names":[],"mappings":";;AA+CA,4BA+BC;AA9ED,4BAA0B;AAC1B,8CAIuB;AAEvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,SAAgB,QAAQ;IACvB,OAAO,CACN,MAAc,EACd,WAA6B,EAC7B,cAAuB,EACtB,EAAE;QACH,OAAO,CAAC,cAAc,CAAC,+BAAkB,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAEzD,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;YAClC,IAAI,UAAU,GACb,OAAO,CAAC,WAAW,CAAC,4CAA+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,4CAA+B,EAC/B,UAAU,EACV,MAAM,CAAC,WAAW,CAClB,CAAC;YACF,OAAO;QACR,CAAC;QAED,IAAI,UAAU,GACb,OAAO,CAAC,WAAW,CAAC,iDAAoC,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,iDAAoC,EACpC,UAAU,EACV,MAAM,CACN,CAAC;IACH,CAAC,CAAC;AACH,CAAC"}
|