awilixify 2.2.1 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/README.md +12 -6
  2. package/dist/index.d.ts +18 -0
  3. package/dist/index.js +15 -0
  4. package/dist/lib/decorators/decorator-state.d.ts +15 -0
  5. package/dist/lib/decorators/decorator-state.js +72 -0
  6. package/dist/lib/decorators/decorator-state.types.d.ts +35 -0
  7. package/dist/lib/decorators/decorator-state.types.js +1 -0
  8. package/dist/lib/di/common.types.d.ts +6 -0
  9. package/dist/lib/di/common.types.js +1 -0
  10. package/dist/lib/di/contexts/container-context-base.d.ts +53 -0
  11. package/dist/lib/di/contexts/container-context-base.js +194 -0
  12. package/dist/lib/di/contexts/context-overrides.d.ts +22 -0
  13. package/dist/lib/di/contexts/context-overrides.js +93 -0
  14. package/dist/lib/di/contexts/di-context-async.d.ts +14 -0
  15. package/dist/lib/di/contexts/di-context-async.js +112 -0
  16. package/dist/lib/di/contexts/di-context-base.d.ts +19 -0
  17. package/dist/lib/di/contexts/di-context-base.js +32 -0
  18. package/dist/lib/di/contexts/di-context.d.ts +7 -0
  19. package/dist/lib/di/contexts/di-context.js +9 -0
  20. package/dist/lib/di/contexts/module-graph-ensurer.d.ts +31 -0
  21. package/dist/lib/di/contexts/module-graph-ensurer.js +45 -0
  22. package/dist/lib/di/contexts/module-overrides.d.ts +70 -0
  23. package/dist/lib/di/contexts/module-overrides.js +3 -0
  24. package/dist/lib/di/contexts/override-value.types.d.ts +6 -0
  25. package/dist/lib/di/contexts/override-value.types.js +1 -0
  26. package/dist/lib/di/contexts/overrides-processor.d.ts +22 -0
  27. package/dist/lib/di/contexts/overrides-processor.js +93 -0
  28. package/dist/lib/di/contexts/provider-overrides.types.d.ts +19 -0
  29. package/dist/lib/di/contexts/provider-overrides.types.js +1 -0
  30. package/dist/lib/di/errors.d.ts +66 -0
  31. package/dist/lib/di/errors.js +148 -0
  32. package/dist/lib/di/modules/module-def.types.d.ts +117 -0
  33. package/dist/lib/di/modules/module-def.types.js +1 -0
  34. package/dist/lib/di/modules/module-factories.d.ts +16 -0
  35. package/dist/lib/di/modules/module-factories.js +46 -0
  36. package/dist/lib/di/modules/module-overrides.d.ts +70 -0
  37. package/dist/lib/di/modules/module-overrides.js +3 -0
  38. package/dist/lib/di/modules/module-ref.types.d.ts +13 -0
  39. package/dist/lib/di/modules/module-ref.types.js +1 -0
  40. package/dist/lib/di/modules/module.types.d.ts +178 -0
  41. package/dist/lib/di/modules/module.types.js +1 -0
  42. package/dist/lib/di/modules/provider-overrides.types.d.ts +19 -0
  43. package/dist/lib/di/modules/provider-overrides.types.js +1 -0
  44. package/dist/lib/di/modules/runtime-module.types.d.ts +25 -0
  45. package/dist/lib/di/modules/runtime-module.types.js +1 -0
  46. package/dist/lib/di/processors/controller-processor.d.ts +13 -0
  47. package/dist/lib/di/processors/controller-processor.js +76 -0
  48. package/dist/lib/di/processors/handler-processor.d.ts +15 -0
  49. package/dist/lib/di/processors/handler-processor.js +69 -0
  50. package/dist/lib/di/processors/initializer-processor.d.ts +19 -0
  51. package/dist/lib/di/processors/initializer-processor.js +91 -0
  52. package/dist/lib/di/processors/interceptor-processor.d.ts +18 -0
  53. package/dist/lib/di/processors/interceptor-processor.js +101 -0
  54. package/dist/lib/di/processors/keyed-feature-registrar.d.ts +19 -0
  55. package/dist/lib/di/processors/keyed-feature-registrar.js +112 -0
  56. package/dist/lib/di/processors/lifecycle-processor.d.ts +38 -0
  57. package/dist/lib/di/processors/lifecycle-processor.js +178 -0
  58. package/dist/lib/di/processors/overrides-processor.d.ts +24 -0
  59. package/dist/lib/di/processors/overrides-processor.js +69 -0
  60. package/dist/lib/di/providers/basic-provider-resolver.d.ts +35 -0
  61. package/dist/lib/di/providers/basic-provider-resolver.js +88 -0
  62. package/dist/lib/di/providers/provider-dependency-sorter.d.ts +9 -0
  63. package/dist/lib/di/providers/provider-dependency-sorter.js +76 -0
  64. package/dist/lib/di/providers/provider-resolver.d.ts +31 -0
  65. package/dist/lib/di/providers/provider-resolver.js +128 -0
  66. package/dist/lib/di/providers/provider.types.d.ts +1 -0
  67. package/dist/lib/di/providers/provider.types.js +1 -0
  68. package/dist/lib/di/providers/types/controller.types.d.ts +9 -0
  69. package/dist/lib/di/providers/types/controller.types.js +1 -0
  70. package/dist/lib/di/providers/types/decorator-context.types.d.ts +9 -0
  71. package/dist/lib/di/providers/types/decorator-context.types.js +1 -0
  72. package/dist/lib/di/providers/types/handler.types.d.ts +9 -0
  73. package/dist/lib/di/providers/types/handler.types.js +1 -0
  74. package/dist/lib/di/providers/types/index.d.ts +7 -0
  75. package/dist/lib/di/providers/types/index.js +7 -0
  76. package/dist/lib/di/providers/types/initializer.types.d.ts +16 -0
  77. package/dist/lib/di/providers/types/initializer.types.js +3 -0
  78. package/dist/lib/di/providers/types/interceptor.types.d.ts +18 -0
  79. package/dist/lib/di/providers/types/interceptor.types.js +1 -0
  80. package/dist/lib/di/providers/types/middleware.types.d.ts +10 -0
  81. package/dist/lib/di/providers/types/middleware.types.js +1 -0
  82. package/dist/lib/di/providers/types/provider.types.d.ts +26 -0
  83. package/dist/lib/di/providers/types/provider.types.js +1 -0
  84. package/dist/lib/di/request-scope-context.d.ts +5 -0
  85. package/dist/lib/di/request-scope-context.js +28 -0
  86. package/dist/lib/di/type-guards.d.ts +35 -0
  87. package/dist/lib/di/type-guards.js +84 -0
  88. package/dist/lib/http/decorators.d.ts +33 -0
  89. package/dist/lib/http/decorators.js +151 -0
  90. package/dist/lib/http/exceptions.d.ts +58 -0
  91. package/dist/lib/http/exceptions.js +71 -0
  92. package/dist/lib/http/http-verbs.d.ts +12 -0
  93. package/dist/lib/http/http-verbs.js +11 -0
  94. package/dist/lib/http/index.d.ts +3 -0
  95. package/dist/lib/http/index.js +3 -0
  96. package/dist/lib/http/openapi-builder.d.ts +27 -0
  97. package/dist/lib/http/openapi-builder.js +83 -0
  98. package/dist/lib/mediator/contract.types.d.ts +159 -0
  99. package/dist/lib/mediator/contract.types.js +1 -0
  100. package/dist/lib/mediator/errors.d.ts +15 -0
  101. package/dist/lib/mediator/errors.js +33 -0
  102. package/dist/lib/mediator/global-middlewares.types.d.ts +13 -0
  103. package/dist/lib/mediator/global-middlewares.types.js +1 -0
  104. package/dist/lib/mediator/handler.types.d.ts +16 -0
  105. package/dist/lib/mediator/handler.types.js +1 -0
  106. package/dist/lib/mediator/mediator.d.ts +21 -0
  107. package/dist/lib/mediator/mediator.js +123 -0
  108. package/dist/lib/mediator/mediator.types.d.ts +64 -0
  109. package/dist/lib/mediator/mediator.types.js +1 -0
  110. package/dist/lib/mediator/middleware.types.d.ts +41 -0
  111. package/dist/lib/mediator/middleware.types.js +1 -0
  112. package/dist/lib/mediator/result.d.ts +18 -0
  113. package/dist/lib/mediator/result.js +24 -0
  114. package/dist/lib/react/errors.d.ts +12 -0
  115. package/dist/lib/react/errors.js +24 -0
  116. package/dist/lib/react/react-component-processor.d.ts +10 -0
  117. package/dist/lib/react/react-component-processor.js +62 -0
  118. package/dist/lib/react/react-di-context.d.ts +21 -0
  119. package/dist/lib/react/react-di-context.js +55 -0
  120. package/dist/lib/react/react-module-factories.d.ts +6 -0
  121. package/dist/lib/react/react-module-factories.js +34 -0
  122. package/dist/lib/react/react-module.types.d.ts +183 -0
  123. package/dist/lib/react/react-module.types.js +1 -0
  124. package/dist/react.d.ts +4 -0
  125. package/dist/react.js +4 -0
  126. package/dist/tsconfig.tsbuildinfo +1 -0
  127. package/package.json +29 -3
@@ -0,0 +1,148 @@
1
+ export class DuplicateControllersInModuleError extends Error {
2
+ constructor(moduleName) {
3
+ super(`Module "${moduleName}" has duplicate controllers in its controllers array.`);
4
+ this.name = "DuplicateControllersInModuleError";
5
+ }
6
+ }
7
+ export class ControllerAlreadyRegisteredError extends Error {
8
+ constructor(controllerName, moduleName) {
9
+ super(`Controller "${controllerName}" is already registered in module "${moduleName}". ` +
10
+ `Controllers must be unique across modules. ` +
11
+ `Exclude controllers from one of the module instances.`);
12
+ this.name = "ControllerAlreadyRegisteredError";
13
+ }
14
+ }
15
+ export class DependencyNotFoundError extends Error {
16
+ constructor(dependencyKey, moduleName) {
17
+ super(`"${dependencyKey}" does not exist in scope of ${moduleName} module`);
18
+ this.name = "DependencyNotFoundError";
19
+ }
20
+ }
21
+ export class CircularDependencyError extends Error {
22
+ constructor(moduleName, providerKeys) {
23
+ super(`Circular dependency detected in module "${moduleName}" for providers: ${providerKeys.join(", ")}`);
24
+ this.name = "CircularDependencyError";
25
+ }
26
+ }
27
+ export class DuplicateModuleImportError extends Error {
28
+ constructor(parentModuleName, importedModuleName) {
29
+ super(`Module "${parentModuleName}" has duplicate import of "${importedModuleName}"`);
30
+ this.name = "DuplicateModuleImportError";
31
+ }
32
+ }
33
+ export class ProviderNameConflictError extends Error {
34
+ constructor(moduleName, conflictingKeys) {
35
+ super(`Module "${moduleName}" has provider name conflicts with imported modules: ${conflictingKeys.join(", ")}`);
36
+ this.name = "ProviderNameConflictError";
37
+ }
38
+ }
39
+ export class ModuleFeatureOverrideNotFoundError extends Error {
40
+ constructor(moduleName, featureKind, featureKey) {
41
+ super(`Cannot override ${featureKind} "${featureKey}" in module "${moduleName}" because it is not declared by that module.`);
42
+ this.name = "ModuleFeatureOverrideNotFoundError";
43
+ }
44
+ }
45
+ export class ModuleOverrideTargetNotFoundError extends Error {
46
+ constructor(moduleName) {
47
+ super(`Module override target "${moduleName}" was not found in the bootstrapped module graph.`);
48
+ this.name = "ModuleOverrideTargetNotFoundError";
49
+ }
50
+ }
51
+ export class CircularModuleDependencyError extends Error {
52
+ constructor(moduleName, chain) {
53
+ super(`Circular module dependency detected: ${chain.join(" -> ")} -> ${moduleName}`);
54
+ this.name = "CircularModuleDependencyError";
55
+ }
56
+ }
57
+ export class GlobalModuleImportsGlobalModuleError extends Error {
58
+ constructor(moduleName, importedGlobalModuleName) {
59
+ super(`Global module "${moduleName}" cannot import global module "${importedGlobalModuleName}". ` +
60
+ `Register both modules in DIContext.globalModules without importing one from another.`);
61
+ this.name = "GlobalModuleImportsGlobalModuleError";
62
+ }
63
+ }
64
+ export class HandlerMissingStaticKeyError extends Error {
65
+ constructor(handlerName) {
66
+ super(`Handler class "${handlerName}" must have a static "key" property of type string. ` +
67
+ `Example: static readonly key = "my-handler" as const;`);
68
+ this.name = "HandlerMissingStaticKeyError";
69
+ }
70
+ }
71
+ export class FeatureNameConflictError extends Error {
72
+ constructor(moduleName, featureName, featureKey, existingModuleName) {
73
+ super(`Module "${moduleName}" has a ${featureName} named "${featureKey}" ` +
74
+ `that conflicts with a ${featureName} already registered from module "${existingModuleName}". ` +
75
+ `${featureName} names must be unique within a module scope.`);
76
+ this.name = "FeatureNameConflictError";
77
+ }
78
+ }
79
+ export class InvalidProviderDefinitionError extends Error {
80
+ constructor(moduleName, providerKey) {
81
+ super(`Module "${moduleName}" has invalid provider definition for key "${providerKey}". ` +
82
+ `Provider value is undefined or unsupported.`);
83
+ this.name = "InvalidProviderDefinitionError";
84
+ }
85
+ }
86
+ export class AsyncFactoryRequiresAsyncCreateError extends Error {
87
+ constructor(moduleName, providerKey) {
88
+ super(`Provider "${providerKey}" in module "${moduleName}" uses async useFactory. ` +
89
+ `Use AsyncDIContext to bootstrap modules with async factory providers.`);
90
+ this.name = "AsyncFactoryRequiresAsyncCreateError";
91
+ }
92
+ }
93
+ export class AsyncEagerFactoryRequiresInitError extends Error {
94
+ constructor(moduleName, providerKey) {
95
+ super(`Provider "${providerKey}" in module "${moduleName}" uses async useFactory with eager initialization. ` +
96
+ `Call app.init() before resolving this provider.`);
97
+ this.name = "AsyncEagerFactoryRequiresInitError";
98
+ }
99
+ }
100
+ export class AsyncFactoryRequiresSingletonLifetimeError extends Error {
101
+ constructor(moduleName, providerKey) {
102
+ super(`Provider "${providerKey}" in module "${moduleName}" uses async useFactory with a non-singleton lifetime. ` +
103
+ `Async factory providers are resolved during AsyncDIContext bootstrap, so they must use SINGLETON lifetime.`);
104
+ this.name = "AsyncFactoryRequiresSingletonLifetimeError";
105
+ }
106
+ }
107
+ export class EagerProviderRequiresSingletonLifetimeError extends Error {
108
+ constructor(moduleName, providerKey) {
109
+ super(`Provider "${providerKey}" in module "${moduleName}" uses eager initialization with a non-singleton lifetime. ` +
110
+ `Eager providers must use SINGLETON lifetime.`);
111
+ this.name = "EagerProviderRequiresSingletonLifetimeError";
112
+ }
113
+ }
114
+ export class EagerProviderInitDependencyNotFoundError extends Error {
115
+ constructor(moduleName, providerKey, dependencyKey) {
116
+ super(`Provider "${providerKey}" in module "${moduleName}" declares initAfter dependency "${dependencyKey}", ` +
117
+ `but that dependency is not an eager provider in the current application lifecycle.`);
118
+ this.name = "EagerProviderInitDependencyNotFoundError";
119
+ }
120
+ }
121
+ export class CircularProviderInitDependencyError extends Error {
122
+ constructor(providerKeys) {
123
+ super(`Circular eager provider init dependency detected: ${providerKeys.join(", ")}`);
124
+ this.name = "CircularProviderInitDependencyError";
125
+ }
126
+ }
127
+ export class AsyncModuleRequiresAsyncCreateError extends Error {
128
+ constructor(moduleName) {
129
+ super(`Module "${moduleName}" imports an async module. ` +
130
+ `Use AsyncDIContext to bootstrap modules with async imports.`);
131
+ this.name = "AsyncModuleRequiresAsyncCreateError";
132
+ }
133
+ }
134
+ export class DuplicateInitializerTokenError extends Error {
135
+ constructor(moduleName, initializerName, existingModuleName) {
136
+ super(`Initializer "${initializerName}" from module "${moduleName}" has a token conflict with an initializer already registered from module "${existingModuleName}". ` +
137
+ `Initializer tokens must be unique within a module scope.`);
138
+ this.name = "DuplicateInitializerTokenError";
139
+ }
140
+ }
141
+ export class MultipleInvokeInitializersPerMethodError extends Error {
142
+ constructor(moduleName, controllerName, methodName, initializerNames) {
143
+ super(`Controller method "${controllerName}.${methodName}" in module "${moduleName}" has multiple initializers that receive invoke: ${initializerNames.join(", ")}. ` +
144
+ `Only one invoke-enabled initializer is allowed per method. ` +
145
+ `Metadata-only initializers should set usesInvoke = false.`);
146
+ this.name = "MultipleInvokeInitializersPerMethodError";
147
+ }
148
+ }
@@ -0,0 +1,117 @@
1
+ import type { Mediator } from "../../mediator/mediator.js";
2
+ import type { EmptyObject } from "../common.types.js";
3
+ import type { ClassHandler, DefInitializerMap, DefInterceptorMap, DefPreHandlerMap, DefProviderMap } from "../providers/provider.types.js";
4
+ import type { ImportModule, ModuleDefinition, ModuleImport } from "./module.types.js";
5
+ export interface GlobalDependencies {
6
+ }
7
+ export type NormalizeGlobalDependencies<T> = [keyof T] extends [never] ? EmptyObject : T extends object ? T : EmptyObject;
8
+ export type InferGlobalDependencies<TModuleDef> = TModuleDef extends {
9
+ exports: infer TExports;
10
+ } ? NormalizeGlobalDependencies<TExports> : EmptyObject;
11
+ type HasDuplicates<T extends readonly unknown[]> = number extends T["length"] ? false : T extends readonly [infer Head, ...infer Tail] ? Head extends Tail[number] ? true : HasDuplicates<Tail> : false;
12
+ type KeysOf<T> = Extract<keyof T, string>;
13
+ type ValidExportKeys<TMap, TKeys> = [TMap] extends [Record<string, unknown>] ? TKeys extends readonly KeysOf<TMap>[] ? HasDuplicates<TKeys> extends true ? never : TKeys : readonly KeysOf<TMap>[] : never;
14
+ export type ModuleDef<D extends {
15
+ providers?: DefProviderMap;
16
+ interceptors?: DefInterceptorMap;
17
+ initializers?: DefInitializerMap;
18
+ imports?: readonly ModuleImport[];
19
+ queryHandlers?: readonly any[];
20
+ commandHandlers?: readonly any[];
21
+ queryPreHandlers?: DefPreHandlerMap;
22
+ commandPreHandlers?: DefPreHandlerMap;
23
+ exportKeys?: ValidExportKeys<D["providers"], D["exportKeys"]>;
24
+ exportQueryPreHandlerKeys?: ValidExportKeys<D["queryPreHandlers"], D["exportQueryPreHandlerKeys"]>;
25
+ exportCommandPreHandlerKeys?: ValidExportKeys<D["commandPreHandlers"], D["exportCommandPreHandlerKeys"]>;
26
+ exportInterceptorKeys?: ValidExportKeys<D["interceptors"], D["exportInterceptorKeys"]>;
27
+ exportInitializerKeys?: ValidExportKeys<D["initializers"], D["exportInitializerKeys"]>;
28
+ }> = {
29
+ providers: ExtractProviders<D["providers"]>;
30
+ exports: ExtractExports<ExtractProviders<D["providers"]>, D["exportKeys"]>;
31
+ queryPreHandlerExports: ExtractPreHandlerExports<ExtractPreHandlers<D["queryPreHandlers"]>, D["exportQueryPreHandlerKeys"]>;
32
+ commandPreHandlerExports: ExtractPreHandlerExports<ExtractPreHandlers<D["commandPreHandlers"]>, D["exportCommandPreHandlerKeys"]>;
33
+ interceptors: ExtractInterceptors<D["interceptors"]>;
34
+ imports: ExtractImports<D["imports"]>;
35
+ deps: ExtractDeps<D>;
36
+ queryHandlers: ExtractHandlers<D["queryHandlers"]>;
37
+ commandHandlers: ExtractHandlers<D["commandHandlers"]>;
38
+ queryPreHandlers: ExtractPreHandlers<D["queryPreHandlers"]>;
39
+ commandPreHandlers: ExtractPreHandlers<D["commandPreHandlers"]>;
40
+ initializers: ExtractInitializers<D["initializers"]>;
41
+ exportKeys: ExtractExportKeys<ExtractProviders<D["providers"]>, D["exportKeys"]>;
42
+ queryPreHandlerExportKeys: ExtractPreHandlerExportKeys<ExtractPreHandlers<D["queryPreHandlers"]>, D["exportQueryPreHandlerKeys"]>;
43
+ commandPreHandlerExportKeys: ExtractPreHandlerExportKeys<ExtractPreHandlers<D["commandPreHandlers"]>, D["exportCommandPreHandlerKeys"]>;
44
+ interceptorExportKeys: ExtractInterceptorExportKeys<ExtractInterceptors<D["interceptors"]>, D["exportInterceptorKeys"]>;
45
+ initializerExportKeys: ExtractInitializerExportKeys<ExtractInitializers<D["initializers"]>, D["exportInitializerKeys"]>;
46
+ };
47
+ type ExtractProviders<TProviders> = TProviders extends DefProviderMap ? TProviders : EmptyObject;
48
+ type ExtractPreHandlerExports<TMap, TKeys> = TMap extends DefPreHandlerMap ? TKeys extends readonly (keyof TMap)[] ? Pick<TMap, TKeys[number]> : EmptyObject : EmptyObject;
49
+ type ExtractPreHandlerExportKeys<TMap, TKeys> = TMap extends DefPreHandlerMap ? TKeys extends readonly (keyof TMap)[] ? TKeys : readonly [] : readonly [];
50
+ type ExtractExports<TProviders, TKeys> = TProviders extends DefProviderMap ? TKeys extends readonly (keyof TProviders)[] ? Pick<TProviders, TKeys[number]> : EmptyObject : EmptyObject;
51
+ type ExtractExportKeys<TProviders, TKeys> = TProviders extends DefProviderMap ? TKeys extends readonly (keyof TProviders)[] ? TKeys : readonly [] : readonly [];
52
+ type ExtractImports<TImports> = TImports extends readonly ModuleImport[] ? TImports : [];
53
+ type ExtractHandlers<THandlers> = THandlers extends readonly any[] ? THandlers : [];
54
+ type ExtractPreHandlers<TPreHandlers> = TPreHandlers extends DefPreHandlerMap ? TPreHandlers : EmptyObject;
55
+ type ExtractInterceptors<TInterceptors> = TInterceptors extends DefInterceptorMap ? TInterceptors : EmptyObject;
56
+ type ExtractInterceptorExportKeys<TInterceptors, TKeys> = TInterceptors extends DefInterceptorMap ? TKeys extends readonly (keyof TInterceptors)[] ? TKeys : readonly [] : readonly [];
57
+ type ExtractInitializers<TInitializers> = TInitializers extends DefInitializerMap ? TInitializers : EmptyObject;
58
+ type ExtractInitializerExportKeys<TInitializers, TKeys> = TInitializers extends DefInitializerMap ? TKeys extends readonly (keyof TInitializers)[] ? TKeys : readonly [] : readonly [];
59
+ type ExtractDeps<D extends {
60
+ providers?: DefProviderMap;
61
+ imports?: readonly ModuleImport[];
62
+ queryHandlers?: readonly any[];
63
+ commandHandlers?: readonly any[];
64
+ }> = ExtractProviders<D["providers"]> & ExtractImportsExports<D> & ExtractQueryMediator<D> & ExtractCommandMediator<D> & NormalizeGlobalDependencies<GlobalDependencies>;
65
+ type ExtractImportsExports<D extends {
66
+ imports?: readonly ModuleImport[];
67
+ }> = D["imports"] extends readonly ModuleImport[] ? ExtractExportsFromImports<D["imports"]> : EmptyObject;
68
+ type ExtractModuleDefFromModule<T> = Awaited<T> extends ImportModule<infer TDef extends ModuleDefinition> ? TDef : Awaited<T> extends {
69
+ exports: infer E;
70
+ } ? {
71
+ exports: E;
72
+ } : never;
73
+ type ExtractExportsFromImports<T extends readonly ModuleImport[]> = T extends readonly [
74
+ infer First,
75
+ ...infer Rest extends readonly ModuleImport[]
76
+ ] ? ExtractModuleDefFromModule<First> extends {
77
+ exports: infer E;
78
+ } ? E & ExtractExportsFromImports<Rest> : ExtractExportsFromImports<Rest> : EmptyObject;
79
+ type MediatorHandlerKey = "queryHandlers" | "commandHandlers";
80
+ type MediatorPreHandlerKey = "queryPreHandlers" | "commandPreHandlers";
81
+ type MediatorKindMap = {
82
+ query: {
83
+ handlerKey: "queryHandlers";
84
+ preHandlerKey: "queryPreHandlers";
85
+ preHandlerExportsKey: "queryPreHandlerExports";
86
+ mediatorKey: "queryMediator";
87
+ };
88
+ command: {
89
+ handlerKey: "commandHandlers";
90
+ preHandlerKey: "commandPreHandlers";
91
+ preHandlerExportsKey: "commandPreHandlerExports";
92
+ mediatorKey: "commandMediator";
93
+ };
94
+ };
95
+ type ExtractQueryMediator<D extends {
96
+ queryHandlers?: readonly any[];
97
+ queryPreHandlers?: DefPreHandlerMap;
98
+ imports?: readonly ModuleImport[];
99
+ }> = ExtractMediator<"query", D>;
100
+ type ExtractCommandMediator<D extends {
101
+ commandHandlers?: readonly any[];
102
+ commandPreHandlers?: DefPreHandlerMap;
103
+ imports?: readonly ModuleImport[];
104
+ }> = ExtractMediator<"command", D>;
105
+ type ExtractMediator<TKind extends keyof MediatorKindMap, D extends Partial<Record<MediatorHandlerKey, readonly any[]>> & Partial<Record<MediatorPreHandlerKey, DefPreHandlerMap>> & {
106
+ imports?: readonly ModuleImport[];
107
+ }> = D[MediatorKindMap[TKind]["handlerKey"]] extends readonly [any, ...any[]] ? {
108
+ [K in MediatorKindMap[TKind]["mediatorKey"]]: Mediator<ExtractContractsFromHandlers<D[MediatorKindMap[TKind]["handlerKey"]]>>;
109
+ } : EmptyObject;
110
+ type ExtractContractsFromHandlers<Handlers extends readonly any[]> = Handlers extends readonly [infer First, ...infer Rest] ? ExtractContractFromHandler<First> | ExtractContractsFromHandlers<Rest> : never;
111
+ type UnwrapClassHandler<H> = H extends ClassHandler ? H["useClass"] : H;
112
+ type ExtractContractFromHandler<H> = UnwrapClassHandler<H> extends new (...args: any[]) => infer I ? I extends {
113
+ contract: infer C;
114
+ } ? C : never : UnwrapClassHandler<H> extends {
115
+ contract: infer C;
116
+ } ? C : never;
117
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,16 @@
1
+ import type { FactoryProvider } from "../providers/provider.types.js";
2
+ import type { AnyModule, Module, ModuleDefinition } from "./module.types.js";
3
+ import type { GlobalDependencies, NormalizeGlobalDependencies } from "./module-def.types.js";
4
+ import type { ForwardRef } from "./module-ref.types.js";
5
+ export type ModuleOptions = {
6
+ hashNameFrom?: unknown;
7
+ hashLength?: number;
8
+ registerControllers?: boolean;
9
+ };
10
+ export declare function forwardRef<T extends AnyModule>(getter: () => T | Promise<T>): ForwardRef<T>;
11
+ type FactoryDeps<T> = (T extends {
12
+ deps: infer Deps;
13
+ } ? Deps : T) & NormalizeGlobalDependencies<GlobalDependencies>;
14
+ export declare function createFactoryProvider<TDeps extends Record<string, any>>(): <T extends object, const Keys extends readonly Extract<keyof FactoryDeps<TDeps>, string>[]>(provider: FactoryProvider<T, FactoryDeps<TDeps>, Keys>) => FactoryProvider<T, FactoryDeps<TDeps>, Keys>;
15
+ export declare function createModule<TDef extends ModuleDefinition>(module: Module<TDef>, options?: ModuleOptions): Module<TDef>;
16
+ export {};
@@ -0,0 +1,46 @@
1
+ import { createHash } from "node:crypto";
2
+ export function forwardRef(getter) {
3
+ return {
4
+ __forward_ref__: true,
5
+ resolve: getter,
6
+ };
7
+ }
8
+ export function createFactoryProvider() {
9
+ return (provider) => {
10
+ return provider;
11
+ };
12
+ }
13
+ export function createModule(module, options) {
14
+ const withOptions = {
15
+ ...module,
16
+ registerControllers: options?.registerControllers ?? true,
17
+ };
18
+ if (options?.hashNameFrom === undefined) {
19
+ return withOptions;
20
+ }
21
+ const hash = createHash("sha256")
22
+ .update(stableStringify(options.hashNameFrom))
23
+ .digest("hex")
24
+ .slice(0, Math.max(4, options.hashLength ?? 8));
25
+ return {
26
+ ...withOptions,
27
+ name: `${withOptions.name}_${hash}`,
28
+ };
29
+ }
30
+ function stableStringify(value) {
31
+ return JSON.stringify(sortRecursively(value));
32
+ }
33
+ function sortRecursively(value) {
34
+ if (Array.isArray(value)) {
35
+ return value.map(sortRecursively);
36
+ }
37
+ if (value && typeof value === "object") {
38
+ return Object.keys(value)
39
+ .sort()
40
+ .reduce((acc, key) => {
41
+ acc[key] = sortRecursively(value[key]);
42
+ return acc;
43
+ }, {});
44
+ }
45
+ return value;
46
+ }
@@ -0,0 +1,70 @@
1
+ import type { BuildResolverOptions, Constructor } from "awilix";
2
+ import type { EmptyObject } from "../common.types.js";
3
+ import type { AnyInitializer, AnyInterceptor, DefInitializerMap, DefInterceptorMap, DefPreHandlerMap, DefProviderMap, Provider } from "../providers/provider.types.js";
4
+ import type { RawValueObject } from "./module.types.js";
5
+ import type { InternalModuleLike } from "./runtime-module.types.js";
6
+ type OwnProviderMap<TModule> = TModule extends {
7
+ providers: infer TProviders extends DefProviderMap;
8
+ } ? TProviders : EmptyObject;
9
+ type OwnQueryPreHandlerMap<TModule> = TModule extends {
10
+ queryPreHandlers: infer TPreHandlers extends DefPreHandlerMap;
11
+ } ? TPreHandlers : EmptyObject;
12
+ type OwnCommandPreHandlerMap<TModule> = TModule extends {
13
+ commandPreHandlers: infer TPreHandlers extends DefPreHandlerMap;
14
+ } ? TPreHandlers : EmptyObject;
15
+ type OwnInterceptorMap<TModule> = TModule extends {
16
+ interceptors: infer TInterceptors extends DefInterceptorMap;
17
+ } ? TInterceptors : EmptyObject;
18
+ type OwnInitializerMap<TModule> = TModule extends {
19
+ initializers: infer TInitializers extends DefInitializerMap;
20
+ } ? TInitializers : EmptyObject;
21
+ type ModuleDeps<TModule> = TModule extends {
22
+ deps: infer TDeps extends Record<string, unknown>;
23
+ } ? TDeps : Record<string, unknown>;
24
+ type RuntimeProviderValue<T> = T extends {
25
+ useFactory: (...args: any[]) => infer R;
26
+ } ? Awaited<R> : T extends {
27
+ useClass: infer C extends new (...args: any[]) => any;
28
+ } ? InstanceType<C> : T extends new (...args: any[]) => infer I ? I : T;
29
+ type PublicShape<T> = Pick<T, keyof T>;
30
+ type ProviderOverride<TValue, TDeps extends Record<string, unknown>> = RuntimeProviderValue<TValue> extends object ? (Provider<PublicShape<RuntimeProviderValue<TValue>>, TDeps> & {
31
+ initAfter?: readonly Extract<keyof TDeps, string>[];
32
+ }) | RawValueObject<PublicShape<RuntimeProviderValue<TValue>>> : RuntimeProviderValue<TValue>;
33
+ type ProviderOverridesFor<TModule> = {
34
+ [K in Extract<keyof OwnProviderMap<TModule>, string>]?: ProviderOverride<OwnProviderMap<TModule>[K], ModuleDeps<TModule>>;
35
+ };
36
+ type MiddlewareOverride<TValue> = TValue extends object ? Constructor<PublicShape<RuntimeProviderValue<TValue>>> | ({
37
+ useClass: Constructor<PublicShape<RuntimeProviderValue<TValue>>>;
38
+ } & BuildResolverOptions<any>) : RuntimeProviderValue<TValue> extends object ? never : RuntimeProviderValue<TValue>;
39
+ type PreHandlerOverridesFor<TMap> = {
40
+ [K in Extract<keyof TMap, string>]?: MiddlewareOverride<TMap[K]>;
41
+ };
42
+ type InterceptorOverridesFor<TModule> = {
43
+ [K in Extract<keyof OwnInterceptorMap<TModule>, string>]?: AnyInterceptor;
44
+ };
45
+ type InitializerOverridesFor<TModule> = {
46
+ [K in Extract<keyof OwnInitializerMap<TModule>, string>]?: AnyInitializer;
47
+ };
48
+ export type ModuleFeatureOverridesFor<TModule> = {
49
+ providers?: ProviderOverridesFor<TModule>;
50
+ queryPreHandlers?: PreHandlerOverridesFor<OwnQueryPreHandlerMap<TModule>>;
51
+ commandPreHandlers?: PreHandlerOverridesFor<OwnCommandPreHandlerMap<TModule>>;
52
+ interceptors?: InterceptorOverridesFor<TModule>;
53
+ initializers?: InitializerOverridesFor<TModule>;
54
+ };
55
+ export type ModuleOverride<TModule extends InternalModuleLike = InternalModuleLike> = {
56
+ module: TModule;
57
+ overrides: ModuleFeatureOverridesFor<TModule>;
58
+ };
59
+ export type AnyModuleOverride = {
60
+ module: InternalModuleLike;
61
+ overrides: {
62
+ providers?: Record<string, unknown>;
63
+ queryPreHandlers?: Record<string, unknown>;
64
+ commandPreHandlers?: Record<string, unknown>;
65
+ interceptors?: Record<string, unknown>;
66
+ initializers?: Record<string, unknown>;
67
+ };
68
+ };
69
+ export declare function overrideModule<TModule extends InternalModuleLike>(module: TModule, overrides: ModuleFeatureOverridesFor<TModule>): ModuleOverride<TModule>;
70
+ export {};
@@ -0,0 +1,3 @@
1
+ export function overrideModule(module, overrides) {
2
+ return { module, overrides };
3
+ }
@@ -0,0 +1,13 @@
1
+ export type ForwardRef<T = any> = {
2
+ __forward_ref__: true;
3
+ resolve: () => T | Promise<T>;
4
+ };
5
+ declare const moduleRefMarker: unique symbol;
6
+ export type ModuleRef<T> = {
7
+ [moduleRefMarker]: true;
8
+ exports: T extends {
9
+ exports: infer E;
10
+ } ? E : never;
11
+ };
12
+ export type AnyModuleRef = ModuleRef<any>;
13
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,178 @@
1
+ import type { BuildResolverOptions, Constructor, ContainerOptions } from "awilix";
2
+ import type { EmptyObject } from "../common.types.js";
3
+ import type { AnyController, AnyInterceptor, ClassHandler, ClassMiddleware, DefInitializerMap, DefInterceptorMap, DefPreHandlerMap, DefProviderMap, Provider } from "../providers/provider.types.js";
4
+ import type { ForwardRef, ModuleRef } from "./module-ref.types.js";
5
+ import type { InternalModuleLike } from "./runtime-module.types.js";
6
+ declare const importModuleDefMarker: unique symbol;
7
+ export type ImportModule<TDef extends ModuleDefinition = ModuleDefinition> = {
8
+ name: string;
9
+ imports?: readonly unknown[];
10
+ exports?: readonly string[];
11
+ [importModuleDefMarker]?: TDef;
12
+ };
13
+ export type AnyModule = InternalModuleLike & ImportModule<any>;
14
+ export type ModuleImport = AnyModule | Promise<AnyModule> | ModuleRef<any>;
15
+ export type ModuleDefinition = {
16
+ providers?: DefProviderMap;
17
+ exports?: DefProviderMap;
18
+ imports?: ModuleImport[];
19
+ queryHandlers?: readonly any[];
20
+ commandHandlers?: readonly any[];
21
+ queryPreHandlers?: DefPreHandlerMap;
22
+ commandPreHandlers?: DefPreHandlerMap;
23
+ interceptors?: DefInterceptorMap;
24
+ initializers?: DefInitializerMap;
25
+ exportKeys?: readonly string[];
26
+ queryPreHandlerExportKeys?: readonly string[];
27
+ commandPreHandlerExportKeys?: readonly string[];
28
+ interceptorExportKeys?: readonly string[];
29
+ initializerExportKeys?: readonly string[];
30
+ };
31
+ type NormalizeModuleDef<Def extends ModuleDefinition> = {
32
+ deps: Def extends {
33
+ deps: infer D extends Record<string, unknown>;
34
+ } ? D : Record<string, unknown>;
35
+ providers: Def["providers"] extends DefProviderMap ? Def["providers"] : EmptyObject;
36
+ exports: Def["exports"] extends DefProviderMap ? Def["exports"] : EmptyObject;
37
+ imports: Def["imports"] extends readonly unknown[] ? Def["imports"] : readonly [];
38
+ queryHandlers: Def["queryHandlers"] extends readonly any[] ? Def["queryHandlers"] : readonly [];
39
+ commandHandlers: Def["commandHandlers"] extends readonly any[] ? Def["commandHandlers"] : readonly [];
40
+ queryPreHandlers: Def["queryPreHandlers"] extends DefPreHandlerMap ? Def["queryPreHandlers"] : EmptyObject;
41
+ commandPreHandlers: Def["commandPreHandlers"] extends DefPreHandlerMap ? Def["commandPreHandlers"] : EmptyObject;
42
+ initializers: Def["initializers"] extends DefInitializerMap ? Def["initializers"] : EmptyObject;
43
+ interceptors: Def["interceptors"] extends DefInterceptorMap ? Def["interceptors"] : EmptyObject;
44
+ exportKeys: Def["exportKeys"] extends readonly string[] ? Def["exportKeys"] : readonly [];
45
+ queryPreHandlerExportKeys: Def["queryPreHandlerExportKeys"] extends readonly string[] ? Def["queryPreHandlerExportKeys"] : readonly [];
46
+ commandPreHandlerExportKeys: Def["commandPreHandlerExportKeys"] extends readonly string[] ? Def["commandPreHandlerExportKeys"] : readonly [];
47
+ initializerExportKeys: Def["initializerExportKeys"] extends readonly string[] ? Def["initializerExportKeys"] : readonly [];
48
+ interceptorExportKeys: Def["interceptorExportKeys"] extends readonly string[] ? Def["interceptorExportKeys"] : readonly [];
49
+ };
50
+ export type Module<Def extends ModuleDefinition> = {
51
+ name: string;
52
+ controllers?: AnyController[];
53
+ containerOptions?: ContainerOptions;
54
+ providerOptions?: Partial<BuildResolverOptions<any>>;
55
+ [importModuleDefMarker]?: Def;
56
+ } & ModuleFromNormalized<NormalizeModuleDef<Def>>;
57
+ type ModuleFromNormalized<Def extends {
58
+ deps: Record<string, unknown>;
59
+ providers: DefProviderMap | EmptyObject;
60
+ exports: DefProviderMap | EmptyObject;
61
+ imports: readonly unknown[];
62
+ queryHandlers: readonly any[];
63
+ commandHandlers: readonly any[];
64
+ interceptors: DefInterceptorMap | EmptyObject;
65
+ initializers: DefInitializerMap | EmptyObject;
66
+ queryPreHandlers: DefPreHandlerMap | EmptyObject;
67
+ commandPreHandlers: DefPreHandlerMap | EmptyObject;
68
+ exportKeys: readonly string[];
69
+ queryPreHandlerExportKeys: readonly string[];
70
+ commandPreHandlerExportKeys: readonly string[];
71
+ initializerExportKeys: readonly string[];
72
+ interceptorExportKeys: readonly string[];
73
+ }> = WithProviders<Def["providers"], Def["deps"]> & WithImports<Def["imports"]> & WithQueryHandlers<Def["queryHandlers"]> & WithCommandHandlers<Def["commandHandlers"]> & WithQueryPreHandlers<Def["queryPreHandlers"]> & WithCommandPreHandlers<Def["commandPreHandlers"]> & WithInitializers<Def["initializers"]> & WithInterceptors<Def["interceptors"]> & WithExports<Def["exportKeys"]> & WithQueryPreHandlerExports<Def["queryPreHandlerExportKeys"]> & WithCommandPreHandlerExports<Def["commandPreHandlerExportKeys"]> & WithInitializerExports<Def["initializerExportKeys"]> & WithInterceptorExports<Def["interceptorExportKeys"]>;
74
+ type WithProviders<TProviders extends DefProviderMap | EmptyObject, TDeps extends Record<string, unknown>> = TProviders extends EmptyObject ? {
75
+ providers?: EmptyObject;
76
+ } : {
77
+ providers: ToModuleProviderMap<TProviders, TDeps>;
78
+ };
79
+ type WithExports<TKeys extends readonly string[]> = TKeys extends readonly [] ? {
80
+ exports?: readonly [];
81
+ } : {
82
+ exports: TKeys;
83
+ };
84
+ type ToModuleProviderMap<T extends DefProviderMap, DepsMap extends Record<string, unknown> = Record<string, unknown>> = [keyof T] extends [never] ? EmptyObject : {
85
+ [K in keyof T]: T[K] extends object ? (Provider<T[K], DepsMap> & {
86
+ initAfter?: readonly Extract<keyof DepsMap, string>[];
87
+ }) | RawValueObject<T[K]> : T[K];
88
+ };
89
+ export type RawValueObject<T> = T & {
90
+ useClass?: never;
91
+ useFactory?: never;
92
+ lifetime?: never;
93
+ allowCircular?: never;
94
+ eager?: never;
95
+ initAfter?: never;
96
+ };
97
+ type WithQueryHandlers<THandlers extends readonly any[]> = THandlers extends readonly [] ? {
98
+ queryHandlers?: readonly [];
99
+ } : {
100
+ queryHandlers: ToModuleHandlerArray<THandlers>;
101
+ };
102
+ type WithCommandHandlers<THandlers extends readonly any[]> = THandlers extends readonly [] ? {
103
+ commandHandlers?: readonly [];
104
+ } : {
105
+ commandHandlers: ToModuleHandlerArray<THandlers>;
106
+ };
107
+ type ToModuleHandlerArray<T extends readonly any[]> = T extends readonly [] ? readonly [] : {
108
+ readonly [K in keyof T]: Constructor<T[K]> | ClassHandler<Constructor<T[K]>>;
109
+ };
110
+ type ToModulePreHandlerMap<T extends DefPreHandlerMap> = [keyof T] extends [
111
+ never
112
+ ] ? EmptyObject : {
113
+ [K in keyof T]: Constructor<T[K]> | ClassMiddleware<Constructor<T[K]>>;
114
+ };
115
+ type WithQueryPreHandlers<TPreHandlers extends DefPreHandlerMap | EmptyObject> = TPreHandlers extends EmptyObject ? {
116
+ queryPreHandlers?: EmptyObject;
117
+ } : {
118
+ queryPreHandlers: ToModulePreHandlerMap<TPreHandlers>;
119
+ };
120
+ type WithCommandPreHandlers<TPreHandlers extends DefPreHandlerMap | EmptyObject> = TPreHandlers extends EmptyObject ? {
121
+ commandPreHandlers?: EmptyObject;
122
+ } : {
123
+ commandPreHandlers: ToModulePreHandlerMap<TPreHandlers>;
124
+ };
125
+ type WithQueryPreHandlerExports<TKeys extends readonly string[]> = TKeys extends readonly [] ? {
126
+ queryPreHandlerExports?: readonly [];
127
+ } : {
128
+ queryPreHandlerExports: TKeys;
129
+ };
130
+ type WithCommandPreHandlerExports<TKeys extends readonly string[]> = TKeys extends readonly [] ? {
131
+ commandPreHandlerExports?: readonly [];
132
+ } : {
133
+ commandPreHandlerExports: TKeys;
134
+ };
135
+ type WithInitializers<TInitializers extends DefInitializerMap | EmptyObject> = TInitializers extends EmptyObject ? {
136
+ initializers?: EmptyObject;
137
+ } : {
138
+ initializers: TInitializers;
139
+ };
140
+ type WithInitializerExports<TKeys extends readonly string[]> = TKeys extends readonly [] ? {
141
+ initializerExports?: readonly [];
142
+ } : {
143
+ initializerExports: TKeys;
144
+ };
145
+ type ToModuleInterceptorMap<T extends DefInterceptorMap> = [keyof T] extends [
146
+ never
147
+ ] ? EmptyObject : {
148
+ [K in keyof T]: AnyInterceptor;
149
+ };
150
+ type WithInterceptors<TInterceptors extends DefInterceptorMap | EmptyObject> = TInterceptors extends EmptyObject ? {
151
+ interceptors?: EmptyObject;
152
+ } : {
153
+ interceptors: ToModuleInterceptorMap<TInterceptors>;
154
+ };
155
+ type WithInterceptorExports<TKeys extends readonly string[]> = TKeys extends readonly [] ? {
156
+ interceptorExports?: readonly [];
157
+ } : {
158
+ interceptorExports: TKeys;
159
+ };
160
+ type WithImports<TImports extends readonly unknown[]> = 0 extends 1 & TImports ? {
161
+ imports?: (AnyModule | Promise<AnyModule> | ForwardRef)[];
162
+ } : TImports extends readonly [] ? {
163
+ imports?: [];
164
+ } : {
165
+ imports: WithForwardRefImports<TImports>;
166
+ };
167
+ type WithForwardRefImports<T extends readonly unknown[]> = {
168
+ [K in keyof T]: T[K] extends ModuleRef<infer MDef> ? ForwardRef<ForwardRefModule<MDef>> : Awaited<T[K]> extends ImportModule<any> ? T[K] : T[K];
169
+ };
170
+ type ForwardRefModule<MDef> = MDef extends {
171
+ exports: infer E extends DefProviderMap;
172
+ providers: infer P extends DefProviderMap;
173
+ } ? {
174
+ name: string;
175
+ exports: readonly Extract<keyof E, string>[];
176
+ providers: ToModuleProviderMap<P, any>;
177
+ } : AnyModule;
178
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,19 @@
1
+ import type { EmptyObject } from "../common.types.js";
2
+ import type { Module, ModuleDefinition, RawValueObject } from "./module.types.js";
3
+ import type { AnyProvider, DefProviderMap, Provider } from "../providers/provider.types.js";
4
+ type ModuleDefFrom<TModule> = TModule extends Module<infer TDef extends ModuleDefinition> ? TDef : never;
5
+ type OwnProviderMap<TModule> = ModuleDefFrom<TModule> extends {
6
+ providers: infer TProviders extends DefProviderMap;
7
+ } ? TProviders : EmptyObject;
8
+ type ModuleDeps<TModule> = ModuleDefFrom<TModule> extends {
9
+ deps: infer TDeps extends Record<string, unknown>;
10
+ } ? TDeps : Record<string, unknown>;
11
+ type PublicShape<T> = Pick<T, keyof T>;
12
+ type ProviderOverride<TValue, TDeps extends Record<string, unknown>> = TValue extends object ? (Provider<PublicShape<TValue>, TDeps> & {
13
+ initAfter?: readonly Extract<keyof TDeps, string>[];
14
+ }) | RawValueObject<PublicShape<TValue>> : TValue;
15
+ export type ProviderOverridesFor<TModule> = {
16
+ [K in Extract<keyof OwnProviderMap<TModule>, string>]?: ProviderOverride<OwnProviderMap<TModule>[K], ModuleDeps<TModule>>;
17
+ };
18
+ export type AnyProviderOverrides = Record<string, AnyProvider>;
19
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,25 @@
1
+ import type { BuildResolverOptions, ContainerOptions } from "awilix";
2
+ import type { AnyController, AnyInitializer, AnyInterceptor, AnyMiddleware, AnyProvider } from "../providers/provider.types.js";
3
+ import type { ForwardRef } from "./module-ref.types.js";
4
+ export interface InternalModuleLike {
5
+ name: string;
6
+ imports?: readonly (InternalModuleLike | Promise<InternalModuleLike> | ForwardRef<InternalModuleLike>)[];
7
+ providers?: Record<string, AnyProvider>;
8
+ exports?: readonly string[];
9
+ components?: Record<string, (...args: any[]) => unknown>;
10
+ componentExports?: readonly string[];
11
+ controllers?: AnyController[];
12
+ registerControllers?: boolean;
13
+ containerOptions?: ContainerOptions;
14
+ providerOptions?: Partial<BuildResolverOptions<any>>;
15
+ queryHandlers?: readonly any[];
16
+ commandHandlers?: readonly any[];
17
+ queryPreHandlers?: Record<string, AnyMiddleware>;
18
+ commandPreHandlers?: Record<string, AnyMiddleware>;
19
+ queryPreHandlerExports?: readonly string[];
20
+ commandPreHandlerExports?: readonly string[];
21
+ interceptors?: Record<string, AnyInterceptor>;
22
+ interceptorExports?: readonly string[];
23
+ initializers?: Record<string, AnyInitializer>;
24
+ initializerExports?: readonly string[];
25
+ }