@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,154 @@
|
|
|
1
|
+
import type { ContainerInterface, DynamicModule, HashUtilInterface, InjectionToken, Module, ModuleContainerInterface, ModuleGraphInterface } from "../../interfaces";
|
|
2
|
+
/**
|
|
3
|
+
* Container is the core IoC (Inversion of Control) container that manages
|
|
4
|
+
* modules, providers, and dependency injection.
|
|
5
|
+
*
|
|
6
|
+
* The Container is responsible for:
|
|
7
|
+
* - Registering and managing modules
|
|
8
|
+
* - Building the dependency graph
|
|
9
|
+
* - Resolving dependencies and creating instances
|
|
10
|
+
* - Managing the lifecycle of providers
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const container = new Container(hashUtils);
|
|
15
|
+
* await container.run(AppModule);
|
|
16
|
+
* const service = await container.get(MyService);
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export declare class Container implements ContainerInterface {
|
|
20
|
+
private readonly hashUtils;
|
|
21
|
+
private readonly modulesContainer;
|
|
22
|
+
private _graph;
|
|
23
|
+
private moduleGraphResolver;
|
|
24
|
+
/**
|
|
25
|
+
* Creates a new Container instance.
|
|
26
|
+
*
|
|
27
|
+
* @param hashUtils - Utility for generating unique hashes for modules
|
|
28
|
+
*/
|
|
29
|
+
constructor(hashUtils: HashUtilInterface);
|
|
30
|
+
/**
|
|
31
|
+
* Adds a module to the container.
|
|
32
|
+
*
|
|
33
|
+
* This method registers a module and all its providers, imports, and exports
|
|
34
|
+
* in the container. The module can be either a static module class or a
|
|
35
|
+
* dynamic module with runtime configuration.
|
|
36
|
+
*
|
|
37
|
+
* @param module - The module to add (static or dynamic)
|
|
38
|
+
* @returns A promise that resolves to the module container
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```typescript
|
|
42
|
+
* await container.addModule(AppModule);
|
|
43
|
+
* await container.addModule(DatabaseModule.forRoot({ host: 'localhost' }));
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
addModule(module: Module | DynamicModule): Promise<ModuleContainerInterface>;
|
|
47
|
+
/**
|
|
48
|
+
* Replaces an existing module with a new module.
|
|
49
|
+
*
|
|
50
|
+
* This is useful for hot module replacement or testing scenarios where
|
|
51
|
+
* you need to swap out a module implementation.
|
|
52
|
+
*
|
|
53
|
+
* @param moduleToReplace - The module to be replaced
|
|
54
|
+
* @param newModule - The new module to use instead
|
|
55
|
+
* @returns A promise that resolves to the new module container
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* ```typescript
|
|
59
|
+
* await container.replaceModule(OldDatabaseModule, NewDatabaseModule);
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
replaceModule(moduleToReplace: Module, newModule: Module): Promise<ModuleContainerInterface>;
|
|
63
|
+
/**
|
|
64
|
+
* Retrieves a module container by its module class.
|
|
65
|
+
*
|
|
66
|
+
* @param module - The module class to look up
|
|
67
|
+
* @returns A promise that resolves to the module container, or undefined if not found
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```typescript
|
|
71
|
+
* const moduleContainer = await container.getModule(DatabaseModule);
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
getModule(module: Module): Promise<ModuleContainerInterface | undefined>;
|
|
75
|
+
/**
|
|
76
|
+
* Resolves and returns an instance of a provider by its injection token.
|
|
77
|
+
*
|
|
78
|
+
* This is the main method for retrieving dependencies from the container.
|
|
79
|
+
* The instance is created according to its scope:
|
|
80
|
+
* - Singleton: Same instance returned every time
|
|
81
|
+
* - Request: New instance for each get() call
|
|
82
|
+
* - Transient: New instance every time, even within the same dependency tree
|
|
83
|
+
*
|
|
84
|
+
* @template T - The type of the provider to resolve
|
|
85
|
+
* @param token - The injection token (class, string, or symbol)
|
|
86
|
+
* @returns A promise that resolves to the provider instance, or undefined if not found
|
|
87
|
+
*
|
|
88
|
+
* @example
|
|
89
|
+
* ```typescript
|
|
90
|
+
* const userService = await container.get(UserService);
|
|
91
|
+
* const config = await container.get('CONFIG');
|
|
92
|
+
* ```
|
|
93
|
+
*/
|
|
94
|
+
get<T>(token: InjectionToken): Promise<T | undefined>;
|
|
95
|
+
/**
|
|
96
|
+
* Initializes and runs the container with the specified root module.
|
|
97
|
+
*
|
|
98
|
+
* This method:
|
|
99
|
+
* 1. Registers the root module and all its dependencies
|
|
100
|
+
* 2. Builds the dependency graph
|
|
101
|
+
* 3. Validates the graph for circular dependencies and missing providers
|
|
102
|
+
* 4. Initializes all providers with lifecycle hooks
|
|
103
|
+
*
|
|
104
|
+
* This method must be called before using get() to resolve dependencies.
|
|
105
|
+
*
|
|
106
|
+
* @param rootModule - The root module of the application
|
|
107
|
+
* @returns A promise that resolves when initialization is complete
|
|
108
|
+
* @throws {Error} If there are circular dependencies or missing providers
|
|
109
|
+
*
|
|
110
|
+
* @example
|
|
111
|
+
* ```typescript
|
|
112
|
+
* const container = new Container(hashUtils);
|
|
113
|
+
* await container.run(AppModule);
|
|
114
|
+
* // Now you can use container.get() to resolve dependencies
|
|
115
|
+
* ```
|
|
116
|
+
*/
|
|
117
|
+
run(rootModule: Module): Promise<void>;
|
|
118
|
+
/**
|
|
119
|
+
* Gets the dependency graph.
|
|
120
|
+
*
|
|
121
|
+
* The graph contains all modules, providers, and their dependencies.
|
|
122
|
+
* It can be used for introspection and debugging.
|
|
123
|
+
*
|
|
124
|
+
* @returns The module graph
|
|
125
|
+
* @throws {Error} If the graph is not initialized (run() not called yet)
|
|
126
|
+
*
|
|
127
|
+
* @example
|
|
128
|
+
* ```typescript
|
|
129
|
+
* await container.run(AppModule);
|
|
130
|
+
* const graph = container.graph;
|
|
131
|
+
* console.log(graph.getAllNodes());
|
|
132
|
+
* ```
|
|
133
|
+
*/
|
|
134
|
+
get graph(): ModuleGraphInterface;
|
|
135
|
+
/**
|
|
136
|
+
* Gets all errors that occurred during graph compilation.
|
|
137
|
+
*
|
|
138
|
+
* Errors can include:
|
|
139
|
+
* - Circular dependencies
|
|
140
|
+
* - Missing providers
|
|
141
|
+
* - Unreachable dependencies
|
|
142
|
+
*
|
|
143
|
+
* @returns An array of graph errors
|
|
144
|
+
*
|
|
145
|
+
* @example
|
|
146
|
+
* ```typescript
|
|
147
|
+
* await container.run(AppModule);
|
|
148
|
+
* if (container.errors.length > 0) {
|
|
149
|
+
* console.error('Graph errors:', container.errors);
|
|
150
|
+
* }
|
|
151
|
+
* ```
|
|
152
|
+
*/
|
|
153
|
+
get errors(): import("@nexus-ioc/shared").GraphError[];
|
|
154
|
+
}
|
|
@@ -12,5 +12,5 @@ export declare class ModuleContainer implements ModuleContainerInterface {
|
|
|
12
12
|
get providers(): Provider[];
|
|
13
13
|
get exports(): InjectionToken[];
|
|
14
14
|
get<T>(token: InjectionToken): Promise<T | undefined>;
|
|
15
|
-
get errors(): import("
|
|
15
|
+
get errors(): import("@nexus-ioc/shared").GraphError[];
|
|
16
16
|
}
|
|
@@ -1,13 +1,21 @@
|
|
|
1
1
|
import type { InjectionToken, Module, NexusApplicationInterface, ScannerPluginInterface } from "../interfaces";
|
|
2
|
+
/**
|
|
3
|
+
* @deprecated
|
|
4
|
+
* It will be removed in version 1.0.0.
|
|
5
|
+
* these classes work the same way. For the new behavior, use @NexusApplications
|
|
6
|
+
*/
|
|
2
7
|
export declare class NexusApplicationsBrowser implements NexusApplicationInterface {
|
|
3
8
|
private readonly rootModule;
|
|
4
9
|
private readonly hashUtil;
|
|
5
10
|
private readonly scannerPlugins;
|
|
6
11
|
private readonly container;
|
|
12
|
+
private _parentContainer;
|
|
7
13
|
private constructor();
|
|
8
14
|
static create(rootModule: Module): NexusApplicationsBrowser;
|
|
9
15
|
bootstrap(): Promise<this>;
|
|
10
16
|
addScannerPlugin(scanner: ScannerPluginInterface | ScannerPluginInterface[]): this;
|
|
11
17
|
get<T>(token: InjectionToken): Promise<T | undefined>;
|
|
12
|
-
get errors(): import("
|
|
18
|
+
get errors(): import("@nexus-ioc/shared").GraphError[];
|
|
19
|
+
async(): this;
|
|
20
|
+
setParent(parentContainer: NexusApplicationInterface): this;
|
|
13
21
|
}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { type HashUtilInterface, type InjectionToken, type Module, type NexusApplicationInterface, type ScannerPluginInterface } from "../interfaces";
|
|
2
|
+
/**
|
|
3
|
+
* NexusApplications is the main application class that provides a high-level
|
|
4
|
+
* API for creating and managing IoC containers.
|
|
5
|
+
*
|
|
6
|
+
* This class wraps the Container and provides additional features:
|
|
7
|
+
* - Automatic singleton initialization
|
|
8
|
+
* - Scanner plugin support for custom metadata processing
|
|
9
|
+
* - Parent-child container hierarchies
|
|
10
|
+
* - Async/sync container modes
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const app = NexusApplications.create(AppModule);
|
|
15
|
+
* await app.bootstrap();
|
|
16
|
+
* const service = await app.get(MyService);
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export declare class NexusApplications implements NexusApplicationInterface {
|
|
20
|
+
private readonly rootModule;
|
|
21
|
+
private hashUtil;
|
|
22
|
+
private isAsyncContainer;
|
|
23
|
+
private readonly container;
|
|
24
|
+
private readonly scannerPlugins;
|
|
25
|
+
private _parentContainer;
|
|
26
|
+
/**
|
|
27
|
+
* Creates a new NexusApplications instance.
|
|
28
|
+
*
|
|
29
|
+
* @param rootModule - The root module of the application
|
|
30
|
+
* @param options - Optional configuration
|
|
31
|
+
* @param options.hashFn - Custom hash function for module identification
|
|
32
|
+
*/
|
|
33
|
+
private constructor();
|
|
34
|
+
/**
|
|
35
|
+
* Creates a new NexusApplications instance.
|
|
36
|
+
*
|
|
37
|
+
* This is the main entry point for creating an application.
|
|
38
|
+
*
|
|
39
|
+
* @param rootModule - The root module of the application
|
|
40
|
+
* @param options - Optional configuration
|
|
41
|
+
* @param options.hashFn - Custom hash function for module identification
|
|
42
|
+
* @returns A new NexusApplications instance
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* ```typescript
|
|
46
|
+
* const app = NexusApplications.create(AppModule);
|
|
47
|
+
* await app.bootstrap();
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
static create(rootModule: Module, options?: {
|
|
51
|
+
hashFn: new () => HashUtilInterface;
|
|
52
|
+
}): NexusApplications;
|
|
53
|
+
/**
|
|
54
|
+
* Bootstraps the application by initializing the container and all providers.
|
|
55
|
+
*
|
|
56
|
+
* This method:
|
|
57
|
+
* 1. Runs the container with the root module
|
|
58
|
+
* 2. Executes all registered scanner plugins
|
|
59
|
+
* 3. Pre-instantiates all singleton providers (unless async mode is enabled)
|
|
60
|
+
*
|
|
61
|
+
* @returns A promise that resolves to this instance for method chaining
|
|
62
|
+
* @throws {Error} If there are circular dependencies or missing providers
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```typescript
|
|
66
|
+
* const app = NexusApplications.create(AppModule);
|
|
67
|
+
* await app.bootstrap();
|
|
68
|
+
* // Application is now ready to use
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
71
|
+
bootstrap(): Promise<this>;
|
|
72
|
+
/**
|
|
73
|
+
* Adds one or more scanner plugins to the application.
|
|
74
|
+
*
|
|
75
|
+
* Scanner plugins are executed after the dependency graph is built
|
|
76
|
+
* and can be used to process custom metadata, validate the graph,
|
|
77
|
+
* or perform other initialization tasks.
|
|
78
|
+
*
|
|
79
|
+
* @param scanner - A single scanner plugin or an array of scanner plugins
|
|
80
|
+
* @returns This instance for method chaining
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* ```typescript
|
|
84
|
+
* const app = NexusApplications.create(AppModule)
|
|
85
|
+
* .addScannerPlugin(new CustomScanner())
|
|
86
|
+
* .addScannerPlugin([new Scanner1(), new Scanner2()]);
|
|
87
|
+
* await app.bootstrap();
|
|
88
|
+
* ```
|
|
89
|
+
*/
|
|
90
|
+
addScannerPlugin(scanner: ScannerPluginInterface | ScannerPluginInterface[]): this;
|
|
91
|
+
/**
|
|
92
|
+
* Resolves and returns an instance of a provider by its injection token.
|
|
93
|
+
*
|
|
94
|
+
* If the provider is not found in this container, it will attempt to
|
|
95
|
+
* resolve it from the parent container (if set).
|
|
96
|
+
*
|
|
97
|
+
* @template T - The type of the provider to resolve
|
|
98
|
+
* @param token - The injection token (class, string, or symbol)
|
|
99
|
+
* @returns A promise that resolves to the provider instance, or undefined if not found
|
|
100
|
+
*
|
|
101
|
+
* @example
|
|
102
|
+
* ```typescript
|
|
103
|
+
* const app = await NexusApplications.create(AppModule).bootstrap();
|
|
104
|
+
* const userService = await app.get(UserService);
|
|
105
|
+
* const config = await app.get('CONFIG');
|
|
106
|
+
* ```
|
|
107
|
+
*/
|
|
108
|
+
get<T>(token: InjectionToken): Promise<T | undefined>;
|
|
109
|
+
/**
|
|
110
|
+
* Gets all errors that occurred during graph compilation.
|
|
111
|
+
*
|
|
112
|
+
* @returns An array of graph errors
|
|
113
|
+
*
|
|
114
|
+
* @example
|
|
115
|
+
* ```typescript
|
|
116
|
+
* const app = await NexusApplications.create(AppModule).bootstrap();
|
|
117
|
+
* if (app.errors.length > 0) {
|
|
118
|
+
* console.error('Application errors:', app.errors);
|
|
119
|
+
* }
|
|
120
|
+
* ```
|
|
121
|
+
*/
|
|
122
|
+
get errors(): import("@nexus-ioc/shared").GraphError[];
|
|
123
|
+
/**
|
|
124
|
+
* Enables async mode for the container.
|
|
125
|
+
*
|
|
126
|
+
* In async mode, singleton providers are NOT pre-instantiated during
|
|
127
|
+
* bootstrap. They will be created lazily on first access via get().
|
|
128
|
+
* This can improve startup time for large applications.
|
|
129
|
+
*
|
|
130
|
+
* @returns This instance for method chaining
|
|
131
|
+
*
|
|
132
|
+
* @example
|
|
133
|
+
* ```typescript
|
|
134
|
+
* const app = NexusApplications.create(AppModule)
|
|
135
|
+
* .async();
|
|
136
|
+
* await app.bootstrap(); // Singletons are NOT created yet
|
|
137
|
+
* const service = await app.get(MyService); // Created on first access
|
|
138
|
+
* ```
|
|
139
|
+
*/
|
|
140
|
+
async(): this;
|
|
141
|
+
/**
|
|
142
|
+
* Sets a parent container for this application.
|
|
143
|
+
*
|
|
144
|
+
* When a provider is not found in this container, it will be looked up
|
|
145
|
+
* in the parent container. This enables hierarchical container structures.
|
|
146
|
+
*
|
|
147
|
+
* @param parentContainer - The parent container
|
|
148
|
+
* @returns This instance for method chaining
|
|
149
|
+
*
|
|
150
|
+
* @example
|
|
151
|
+
* ```typescript
|
|
152
|
+
* const parentApp = await NexusApplications.create(ParentModule).bootstrap();
|
|
153
|
+
* const childApp = await NexusApplications.create(ChildModule)
|
|
154
|
+
* .setParent(parentApp)
|
|
155
|
+
* .bootstrap();
|
|
156
|
+
* // childApp can access providers from parentApp
|
|
157
|
+
* ```
|
|
158
|
+
*/
|
|
159
|
+
setParent(parentContainer: NexusApplicationInterface): this;
|
|
160
|
+
}
|
|
@@ -1,13 +1,21 @@
|
|
|
1
1
|
import type { InjectionToken, Module, NexusApplicationInterface, ScannerPluginInterface } from "../interfaces";
|
|
2
|
+
/**
|
|
3
|
+
* @deprecated
|
|
4
|
+
* It will be removed in version 1.0.0.
|
|
5
|
+
* these classes work the same way. For the new behavior, use @NexusApplications
|
|
6
|
+
*/
|
|
2
7
|
export declare class NexusApplicationsServer implements NexusApplicationInterface {
|
|
3
8
|
private readonly rootModule;
|
|
4
9
|
private readonly hashUtil;
|
|
5
10
|
private readonly container;
|
|
6
11
|
private readonly scannerPlugins;
|
|
12
|
+
private _parentContainer;
|
|
7
13
|
private constructor();
|
|
8
14
|
static create(rootModule: Module): NexusApplicationsServer;
|
|
9
15
|
bootstrap(): Promise<this>;
|
|
10
16
|
addScannerPlugin(scanner: ScannerPluginInterface | ScannerPluginInterface[]): this;
|
|
11
17
|
get<T>(token: InjectionToken): Promise<T | undefined>;
|
|
12
|
-
get errors(): import("
|
|
18
|
+
get errors(): import("@nexus-ioc/shared").GraphError[];
|
|
19
|
+
async(): this;
|
|
20
|
+
setParent(parentContainer: NexusApplicationInterface): this;
|
|
13
21
|
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import "reflect-metadata";
|
|
2
|
+
import { type Type } from "../interfaces";
|
|
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 declare function Inject(token: Type | symbol | string): PropertyDecorator & ParameterDecorator;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import "reflect-metadata";
|
|
2
|
+
import type { InjectableOptions } from "../interfaces";
|
|
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 declare function Injectable(options?: InjectableOptions): ClassDecorator;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import "reflect-metadata";
|
|
2
|
+
import type { ModuleMetadata } from "../interfaces";
|
|
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 declare function NsModule(metadata: ModuleMetadata): ClassDecorator;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import "reflect-metadata";
|
|
2
|
+
/**
|
|
3
|
+
* Marks a dependency as optional.
|
|
4
|
+
*
|
|
5
|
+
* When a dependency is marked as optional, the container will not throw an error
|
|
6
|
+
* if the provider is not found. Instead, it will inject `undefined`.
|
|
7
|
+
*
|
|
8
|
+
* This is useful for:
|
|
9
|
+
* - Optional features that may not be available in all configurations
|
|
10
|
+
* - Graceful degradation when certain services are not registered
|
|
11
|
+
* - Testing scenarios where you want to omit certain dependencies
|
|
12
|
+
*
|
|
13
|
+
* @returns A decorator that can be applied to constructor parameters or properties
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* // Optional constructor parameter
|
|
18
|
+
* @Injectable()
|
|
19
|
+
* class UserService {
|
|
20
|
+
* constructor(
|
|
21
|
+
* private db: Database,
|
|
22
|
+
* @Optional() private cache?: CacheService
|
|
23
|
+
* ) {
|
|
24
|
+
* // cache will be undefined if CacheService is not registered
|
|
25
|
+
* }
|
|
26
|
+
* }
|
|
27
|
+
*
|
|
28
|
+
* // Optional property injection
|
|
29
|
+
* @Injectable()
|
|
30
|
+
* class ProductService {
|
|
31
|
+
* @Optional()
|
|
32
|
+
* @Inject('ANALYTICS')
|
|
33
|
+
* private analytics?: AnalyticsService;
|
|
34
|
+
*
|
|
35
|
+
* trackEvent(event: string) {
|
|
36
|
+
* // Only track if analytics service is available
|
|
37
|
+
* this.analytics?.track(event);
|
|
38
|
+
* }
|
|
39
|
+
* }
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export declare function Optional(): PropertyDecorator & ParameterDecorator;
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
export
|
|
2
|
-
export {
|
|
1
|
+
export { ContainerNotCompiledError } from "@nexus-ioc/shared";
|
|
2
|
+
export { Container } from "./core/modules/container";
|
|
3
|
+
export { NexusApplications } from "./core/nexus-applications";
|
|
4
|
+
export { Global } from "./decorators/global";
|
|
3
5
|
export { Inject } from "./decorators/inject";
|
|
4
6
|
export { Injectable } from "./decorators/injectable";
|
|
5
|
-
export {
|
|
7
|
+
export { NsModule } from "./decorators/nsModule";
|
|
6
8
|
export { Optional } from "./decorators/optional";
|
|
9
|
+
export * from "./interfaces";
|
|
7
10
|
export * from "./utils/helpers";
|