@haskou/ddd-kernel 2.0.15 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/dist/{RetryPredicate-CLVmhikX.d.cts → RetryPredicate-BKlKFvI4.d.cts} +1 -1
  2. package/dist/{RetryPredicate-Cs5bLFe9.d.ts → RetryPredicate-DG6jcGCX.d.ts} +1 -1
  3. package/dist/{ServiceClass-IInu6j5L.d.ts → ServiceClass-C-ZCUQWE.d.ts} +2 -4
  4. package/dist/{ServiceClass-D_0gCcMr.d.cts → ServiceClass-U0Vk46dN.d.cts} +2 -4
  5. package/dist/{ShutdownHook-D8r9l6N5.d.ts → ShutdownHook-BCQgEMUI.d.ts} +1 -1
  6. package/dist/{ShutdownHook-DC2sOpcz.d.cts → ShutdownHook-CCtg4Ypg.d.cts} +1 -1
  7. package/dist/adapters/index.cjs +28 -27
  8. package/dist/adapters/index.cjs.map +1 -1
  9. package/dist/adapters/index.d.cts +3 -3
  10. package/dist/adapters/index.d.ts +3 -3
  11. package/dist/adapters/index.js +28 -27
  12. package/dist/adapters/index.js.map +1 -1
  13. package/dist/adapters/pubsub/amqp/index.cjs +28 -27
  14. package/dist/adapters/pubsub/amqp/index.cjs.map +1 -1
  15. package/dist/adapters/pubsub/amqp/index.js +28 -27
  16. package/dist/adapters/pubsub/amqp/index.js.map +1 -1
  17. package/dist/adapters/pubsub/index.cjs +28 -27
  18. package/dist/adapters/pubsub/index.cjs.map +1 -1
  19. package/dist/adapters/pubsub/index.d.cts +3 -3
  20. package/dist/adapters/pubsub/index.d.ts +3 -3
  21. package/dist/adapters/pubsub/index.js +28 -27
  22. package/dist/adapters/pubsub/index.js.map +1 -1
  23. package/dist/adapters/ui/express/index.d.cts +2 -2
  24. package/dist/adapters/ui/express/index.d.ts +2 -2
  25. package/dist/adapters/ui/index.cjs +28 -27
  26. package/dist/adapters/ui/index.cjs.map +1 -1
  27. package/dist/adapters/ui/index.d.cts +2 -2
  28. package/dist/adapters/ui/index.d.ts +2 -2
  29. package/dist/adapters/ui/index.js +28 -27
  30. package/dist/adapters/ui/index.js.map +1 -1
  31. package/dist/adapters/ui/routes/index.cjs +28 -27
  32. package/dist/adapters/ui/routes/index.cjs.map +1 -1
  33. package/dist/adapters/ui/routes/index.js +28 -27
  34. package/dist/adapters/ui/routes/index.js.map +1 -1
  35. package/dist/contracts/index.d.cts +3 -3
  36. package/dist/contracts/index.d.ts +3 -3
  37. package/dist/contracts/kernel/index.d.cts +3 -3
  38. package/dist/contracts/kernel/index.d.ts +3 -3
  39. package/dist/index.cjs +28 -27
  40. package/dist/index.cjs.map +1 -1
  41. package/dist/index.d.cts +3 -3
  42. package/dist/index.d.ts +3 -3
  43. package/dist/index.js +28 -27
  44. package/dist/index.js.map +1 -1
  45. package/dist/infrastructure/dependency-injection/index.cjs +28 -27
  46. package/dist/infrastructure/dependency-injection/index.cjs.map +1 -1
  47. package/dist/infrastructure/dependency-injection/index.d.cts +6 -2
  48. package/dist/infrastructure/dependency-injection/index.d.ts +6 -2
  49. package/dist/infrastructure/dependency-injection/index.js +28 -27
  50. package/dist/infrastructure/dependency-injection/index.js.map +1 -1
  51. package/dist/infrastructure/express/index.d.cts +2 -2
  52. package/dist/infrastructure/express/index.d.ts +2 -2
  53. package/dist/infrastructure/scheduler/index.cjs +28 -27
  54. package/dist/infrastructure/scheduler/index.cjs.map +1 -1
  55. package/dist/infrastructure/scheduler/index.js +28 -27
  56. package/dist/infrastructure/scheduler/index.js.map +1 -1
  57. package/package.json +1 -1
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/contracts/kernel/KernelRoute.ts","../src/contracts/ui/HttpRouteStatusEnum.ts","../src/errors/KernelError.ts","../src/errors/DependencyNotFoundError.ts","../src/errors/HandlerNotFoundError.ts","../src/Kernel.ts","../src/adapters/kernel/console/ConsoleKernelLogger.ts","../src/infrastructure/dependency-injection/AutowireWarningFilter.ts","../src/infrastructure/dependency-injection/DependencyInjection.ts","../src/kernel/KernelEnvironmentValidationError.ts"],"sourcesContent":["export abstract class KernelRoute {\n declare protected readonly kernelRouteContract: never;\n}\n","export const HttpRouteStatusEnum = {\n BAD_REQUEST: 400,\n CONFLICT: 409,\n CREATED: 201,\n DEPRECATED: 299,\n FORBIDDEN: 403,\n INTERNAL_SERVER_ERROR: 500,\n NO_CONTENT: 204,\n NOT_FOUND: 404,\n OK: 200,\n PAYLOAD_TOO_LARGE: 413,\n SERVICE_UNAVAILABLE: 503,\n TOO_MANY_REQUESTS: 429,\n UNAUTHORIZED: 401,\n UNPROCESSABLE_ENTITY: 422,\n} as const;\n\nexport default HttpRouteStatusEnum;\n","export class KernelError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'KernelError';\n }\n}\n","import { KernelError } from './KernelError.js';\n\nexport class DependencyNotFoundError extends KernelError {\n constructor(token: string) {\n super(`Dependency not found for token \"${token}\".`);\n this.name = 'DependencyNotFoundError';\n }\n}\n","import { KernelError } from './KernelError.js';\n\nexport class HandlerNotFoundError extends KernelError {\n constructor(kind: string, name: string) {\n super(`${kind} handler not found for \"${name}\".`);\n this.name = 'HandlerNotFoundError';\n }\n}\n","import dotenv, { type DotenvConfigOutput } from 'dotenv';\nimport path from 'node:path';\n\nimport type {\n ConsumerMiddleware,\n KernelConsumer,\n KernelLogger,\n KernelRoute,\n ShutdownHook,\n} from './contracts/index.js';\nimport type { ServiceClass } from './infrastructure/dependency-injection/index.js';\nimport type { Initializer, Runtime } from './infrastructure/lifecycle/index.js';\nimport type { Scheduler } from './infrastructure/scheduler/index.js';\nimport type { KernelDependencyInjectionOptions } from './kernel/KernelDependencyInjectionOptions.js';\nimport type { KernelEnvironmentForSchema } from './kernel/KernelEnvironmentForSchema.js';\nimport type { KernelEnvironmentSchema } from './kernel/KernelEnvironmentSchema.js';\nimport type { KernelEnvironmentValue } from './kernel/KernelEnvironmentValue.js';\nimport type { KernelEnvironmentVariablesOptions } from './kernel/KernelEnvironmentVariablesOptions.js';\nimport type { KernelOptions } from './kernel/KernelOptions.js';\nimport type { ShutdownCandidate } from './kernel/ShutdownCandidate.js';\n\nimport { ConsoleKernelLogger } from './adapters/kernel/index.js';\nimport { DependencyInjection } from './infrastructure/dependency-injection/index.js';\nimport { KernelEnvironmentValidationError } from './kernel/KernelEnvironmentValidationError.js';\n\nexport type { KernelDependencyInjectionOptions } from './kernel/KernelDependencyInjectionOptions.js';\nexport type { KernelDefaultEnvironment } from './kernel/KernelDefaultEnvironment.js';\nexport type { KernelEnvironment } from './kernel/KernelEnvironment.js';\nexport type { KernelEnvironmentForSchema } from './kernel/KernelEnvironmentForSchema.js';\nexport type { KernelEnvironmentSchema } from './kernel/KernelEnvironmentSchema.js';\nexport type { KernelEnvironmentSchemaInput } from './kernel/KernelEnvironmentSchemaInput.js';\nexport type { KernelEnvironmentValue } from './kernel/KernelEnvironmentValue.js';\nexport type { KernelEnvironmentVariableDefinition } from './kernel/KernelEnvironmentVariableDefinition.js';\nexport type { KernelEnvironmentVariablePrimitive } from './kernel/KernelEnvironmentVariablePrimitive.js';\nexport type { KernelEnvironmentVariableResolvedValue } from './kernel/KernelEnvironmentVariableResolvedValue.js';\nexport type { KernelEnvironmentVariableType } from './kernel/KernelEnvironmentVariableType.js';\nexport type { KernelEnvironmentVariablesOptions } from './kernel/KernelEnvironmentVariablesOptions.js';\nexport type { KernelOptions } from './kernel/KernelOptions.js';\nexport { KernelEnvironmentValidationError } from './kernel/KernelEnvironmentValidationError.js';\n\nexport class Kernel<\n TEnvironmentSchema extends KernelEnvironmentSchema | undefined = undefined,\n> {\n private static readonly stateKey = Symbol.for(\n '@haskou/ddd-kernel/kernel-state',\n );\n\n private readonly consumerMiddlewares: ConsumerMiddleware[] = [];\n private readonly consumersList: KernelConsumer[] = [];\n private readonly loggerInstance: KernelLogger;\n private readonly routesList: ServiceClass<KernelRoute>[] = [];\n private readonly schedulersList: Scheduler[] = [];\n private readonly shutdownHooks: ShutdownHook[] = [];\n private dependencyInjectionInstance: DependencyInjection | undefined;\n private environmentVariables =\n process.env as KernelEnvironmentForSchema<TEnvironmentSchema>;\n\n private static get state(): {\n activeKernel?: Kernel<KernelEnvironmentSchema | undefined>;\n } {\n const stateContainer = globalThis as typeof globalThis & {\n [Kernel.stateKey]?: {\n activeKernel?: Kernel<KernelEnvironmentSchema | undefined>;\n };\n };\n\n stateContainer[Kernel.stateKey] = stateContainer[Kernel.stateKey] ?? {};\n\n return stateContainer[Kernel.stateKey] as {\n activeKernel?: Kernel<KernelEnvironmentSchema | undefined>;\n };\n }\n\n public static get configDirectory(): string {\n return path.resolve(Kernel.rootDirectory, 'config');\n }\n\n public static get consumers(): KernelConsumer[] {\n return Kernel.getActiveKernel().consumers;\n }\n\n public static get consumerMiddleware(): ConsumerMiddleware[] {\n return Kernel.getActiveKernel().consumerMiddleware;\n }\n\n public static get di(): DependencyInjection {\n return Kernel.getActiveKernel().di;\n }\n\n public static get environment(): NodeJS.ProcessEnv {\n return process.env;\n }\n\n public static get logger(): KernelLogger {\n return Kernel.getActiveKernel().logger;\n }\n\n public static get active(): Kernel<KernelEnvironmentSchema | undefined> {\n return Kernel.getActiveKernel();\n }\n\n public static get rootDirectory(): string {\n return process.cwd();\n }\n\n public static get routes(): ServiceClass<KernelRoute>[] {\n return Kernel.getActiveKernel().routes;\n }\n\n public static get schedulers(): Scheduler[] {\n return Kernel.getActiveKernel().schedulers;\n }\n\n public static get sourceDirectory(): string {\n return path.resolve(Kernel.rootDirectory, 'src');\n }\n\n private static getActiveKernel(): Kernel<\n KernelEnvironmentSchema | undefined\n > {\n if (!Kernel.state.activeKernel) {\n Kernel.state.activeKernel = new Kernel();\n }\n\n return Kernel.state.activeKernel;\n }\n\n private static assertRequiredEnvironmentVariable(\n name: string,\n value: string | undefined,\n schema: KernelEnvironmentSchema,\n ): void {\n if (schema[name]?.required === true && value === undefined) {\n throw new KernelEnvironmentValidationError(\n `Missing required environment variable \"${name}\".`,\n );\n }\n }\n\n private static assertRequiredEnvironmentVariableIsNotBlank(\n name: string,\n value: string,\n schema: KernelEnvironmentSchema,\n ): void {\n if (schema[name]?.required === true && value.trim() === '') {\n throw new KernelEnvironmentValidationError(\n `Blank required environment variable \"${name}\".`,\n );\n }\n }\n\n private static assertEnvironmentVariableChoice(\n name: string,\n value: KernelEnvironmentValue,\n schema: KernelEnvironmentSchema,\n ): void {\n const choices = schema[name]?.choices;\n\n if (choices && !choices.includes(value)) {\n throw new KernelEnvironmentValidationError(\n `Environment variable \"${name}\" must be one of: ${choices.join(', ')}.`,\n );\n }\n }\n\n private static getEnvironmentVariablesPath(\n environment: string,\n options: KernelEnvironmentVariablesOptions<\n KernelEnvironmentSchema | undefined\n >,\n ): string {\n return path.resolve(\n Kernel.rootDirectory,\n options.path ?? (environment ? `.env.${environment}` : '.env'),\n );\n }\n\n private static parseBooleanEnvironmentVariable(\n name: string,\n value: string,\n ): boolean {\n if (['1', 'true', 'yes', 'on'].includes(value.toLowerCase())) {\n return true;\n }\n\n if (['0', 'false', 'no', 'off'].includes(value.toLowerCase())) {\n return false;\n }\n\n throw new KernelEnvironmentValidationError(\n `Environment variable \"${name}\" has invalid boolean value \"${value}\".`,\n );\n }\n\n private static parseNumberEnvironmentVariable(\n name: string,\n value: string,\n ): number {\n const parsedValue = Number(value);\n\n if (Number.isFinite(parsedValue)) {\n return parsedValue;\n }\n\n throw new KernelEnvironmentValidationError(\n `Environment variable \"${name}\" has invalid number value \"${value}\".`,\n );\n }\n\n private static parseEnvironmentVariable(\n name: string,\n value: string,\n schema: KernelEnvironmentSchema,\n ): KernelEnvironmentValue {\n const definition = schema[name];\n\n if (definition.type === 'boolean') {\n const parsedValue = Kernel.parseBooleanEnvironmentVariable(name, value);\n\n Kernel.assertEnvironmentVariableChoice(name, parsedValue, schema);\n\n return parsedValue;\n }\n\n if (definition.type === 'number') {\n const parsedValue = Kernel.parseNumberEnvironmentVariable(name, value);\n\n Kernel.assertEnvironmentVariableChoice(name, parsedValue, schema);\n\n return parsedValue;\n }\n\n Kernel.assertEnvironmentVariableChoice(name, value, schema);\n\n return value;\n }\n\n private static getEnvironmentVariableValue(\n name: string,\n definition: KernelEnvironmentSchema[string],\n schema: KernelEnvironmentSchema,\n ): string | undefined {\n const value = process.env[name];\n\n Kernel.assertRequiredEnvironmentVariable(name, value, schema);\n\n if (value !== undefined) {\n Kernel.assertRequiredEnvironmentVariableIsNotBlank(name, value, schema);\n }\n\n if (value !== undefined && value.trim() !== '') {\n return value;\n }\n\n return definition.defaultValue?.toString();\n }\n\n private static shouldUnsetBlankOptionalEnvironmentVariable(\n name: string,\n value: string | undefined,\n valueOrDefault: string | undefined,\n schema: KernelEnvironmentSchema,\n ): boolean {\n return (\n value !== undefined &&\n value.trim() === '' &&\n valueOrDefault === undefined &&\n schema[name]?.required !== true\n );\n }\n\n private static validateEnvironmentVariables<\n TSchema extends KernelEnvironmentSchema,\n >(schema: TSchema): KernelEnvironmentForSchema<TSchema> {\n const environmentVariables: Record<\n string,\n KernelEnvironmentValue | undefined\n > = {};\n\n for (const [name, definition] of Object.entries(schema)) {\n const value = process.env[name];\n const valueOrDefault = Kernel.getEnvironmentVariableValue(\n name,\n definition,\n schema,\n );\n\n if (valueOrDefault !== undefined) {\n environmentVariables[name] = Kernel.parseEnvironmentVariable(\n name,\n valueOrDefault,\n schema,\n );\n } else if (\n Kernel.shouldUnsetBlankOptionalEnvironmentVariable(\n name,\n value,\n valueOrDefault,\n schema,\n )\n ) {\n environmentVariables[name] = undefined;\n }\n }\n\n return {\n ...process.env,\n ...environmentVariables,\n } as KernelEnvironmentForSchema<TSchema>;\n }\n\n public static loadEnvironmentVariables(\n environment?: string,\n options: KernelEnvironmentVariablesOptions<\n KernelEnvironmentSchema | undefined\n > = {},\n ): DotenvConfigOutput {\n const environmentName = environment ?? process.env.NODE_ENV ?? 'local';\n\n const result = dotenv.config({\n override: options.override,\n path: Kernel.getEnvironmentVariablesPath(environmentName, options),\n });\n\n if (options.schema) {\n Kernel.validateEnvironmentVariables(options.schema);\n }\n\n return result;\n }\n\n constructor(\n private readonly options: KernelOptions<TEnvironmentSchema> = {},\n ) {\n this.loggerInstance = options.logger ?? new ConsoleKernelLogger();\n this.dependencyInjectionInstance = options.di;\n Kernel.state.activeKernel = this;\n }\n\n private async closeCandidate(candidate: ShutdownCandidate): Promise<void> {\n if (candidate.shutdown) {\n await candidate.shutdown();\n\n return;\n }\n\n if (candidate.close) {\n await candidate.close();\n\n return;\n }\n\n if (candidate.stop) {\n await candidate.stop();\n\n return;\n }\n\n if (candidate.flush) {\n await candidate.flush();\n }\n }\n\n private getConsumerFromClass(\n ClassDefinition: ServiceClass<KernelConsumer>,\n ): KernelConsumer {\n return this.di.getService<KernelConsumer>(ClassDefinition);\n }\n\n private getInitializerFromClass(\n ClassDefinition: ServiceClass<Initializer>,\n ): Initializer {\n return this.di.getService<Initializer>(ClassDefinition);\n }\n\n private getRuntimeFromClass(ClassDefinition: ServiceClass<Runtime>): Runtime {\n return this.di.getService<Runtime>(ClassDefinition);\n }\n\n private getSchedulerFromClass(\n ClassDefinition: ServiceClass<Scheduler>,\n ): Scheduler {\n return this.di.getService<Scheduler>(ClassDefinition);\n }\n\n public get consumers(): KernelConsumer[] {\n return this.consumersList;\n }\n\n public get consumerMiddleware(): ConsumerMiddleware[] {\n return this.consumerMiddlewares;\n }\n\n public get di(): DependencyInjection {\n if (!this.dependencyInjectionInstance) {\n throw new Error('Kernel dependency injection has not been initialized.');\n }\n\n return this.dependencyInjectionInstance;\n }\n\n public get environment(): KernelEnvironmentForSchema<TEnvironmentSchema> {\n return this.environmentVariables;\n }\n\n public get logger(): KernelLogger {\n return this.loggerInstance;\n }\n\n public get routes(): ServiceClass<KernelRoute>[] {\n return this.routesList;\n }\n\n public get schedulers(): Scheduler[] {\n return this.schedulersList;\n }\n\n private getDependencyInjectionOptions(\n options: KernelDependencyInjectionOptions = {},\n ): Required<KernelDependencyInjectionOptions> {\n return {\n containerBuild:\n options.containerBuild ?? process.env.CONTAINER_BUILD === 'true',\n overrides: options.overrides ?? [],\n servicesYamlPath:\n options.servicesYamlPath ??\n this.options.servicesYamlPath ??\n path.resolve(Kernel.configDirectory, 'container', 'services.yaml'),\n sourceDirectory:\n options.sourceDirectory ??\n this.options.sourceDirectory ??\n Kernel.sourceDirectory,\n };\n }\n\n public async dependencyInjection(\n options: KernelDependencyInjectionOptions = {},\n ): Promise<void> {\n Kernel.state.activeKernel = this;\n this.dependencyInjectionInstance =\n this.dependencyInjectionInstance ??\n DependencyInjection.configure(\n this.getDependencyInjectionOptions(options),\n );\n\n await this.dependencyInjectionInstance.compile();\n Kernel.state.activeKernel = this;\n }\n\n public loadEnvironmentVariables(\n environment?: string,\n options: KernelEnvironmentVariablesOptions<\n KernelEnvironmentSchema | undefined\n > = {},\n ): DotenvConfigOutput {\n const result = Kernel.loadEnvironmentVariables(environment, {\n ...options,\n schema: options.schema ?? this.options.environmentSchema,\n });\n\n this.environmentVariables = this.options.environmentSchema\n ? Kernel.validateEnvironmentVariables(this.options.environmentSchema)\n : (process.env as KernelEnvironmentForSchema<TEnvironmentSchema>);\n\n return result;\n }\n\n public getRoutes(): ServiceClass<KernelRoute>[] {\n return this.routes;\n }\n\n public registerConsumerMiddleware(\n ...middlewares: ConsumerMiddleware[]\n ): void {\n this.consumerMiddlewares.push(...middlewares);\n }\n\n public registerConsumers(\n ...ClassDefinitions: ServiceClass<KernelConsumer>[]\n ): void {\n for (const ClassDefinition of ClassDefinitions) {\n this.consumersList.push(this.getConsumerFromClass(ClassDefinition));\n }\n }\n\n public registerConsumerInstances(...consumers: KernelConsumer[]): void {\n this.consumersList.push(...consumers);\n }\n\n public registerRoutes(\n ...ClassDefinitions: ServiceClass<KernelRoute>[]\n ): void {\n this.routesList.push(...ClassDefinitions);\n }\n\n public registerSchedulers(\n ...ClassDefinitions: ServiceClass<Scheduler>[]\n ): void {\n for (const ClassDefinition of ClassDefinitions) {\n this.schedulersList.push(this.getSchedulerFromClass(ClassDefinition));\n }\n }\n\n public registerSchedulerInstances(...schedulers: Scheduler[]): void {\n this.schedulersList.push(...schedulers);\n }\n\n public registerShutdownHook(hook: ShutdownHook): void {\n this.shutdownHooks.push(hook);\n }\n\n public removeConsumers(): void {\n this.consumersList.length = 0;\n }\n\n public removeRoutes(): void {\n this.routesList.length = 0;\n }\n\n public removeSchedulers(): void {\n this.schedulersList.length = 0;\n }\n\n public async runConsumers(): Promise<void> {\n for (const consumer of this.consumersList) {\n await consumer.init();\n }\n }\n\n public async runInitializers(\n ...ClassDefinitions: ServiceClass<Initializer>[]\n ): Promise<void> {\n for (const ClassDefinition of ClassDefinitions) {\n await this.getInitializerFromClass(ClassDefinition).ensure();\n }\n }\n\n public async runRuntimes(\n ...ClassDefinitions: ServiceClass<Runtime>[]\n ): Promise<void> {\n for (const ClassDefinition of ClassDefinitions) {\n const runtime = this.getRuntimeFromClass(ClassDefinition);\n\n await runtime.run();\n this.registerShutdownHook(() =>\n this.closeCandidate(runtime as ShutdownCandidate),\n );\n }\n }\n\n public async runSchedulerNowAndSchedule(\n ClassDefinition: ServiceClass<Scheduler>,\n ): Promise<void> {\n const scheduler = this.getSchedulerFromClass(ClassDefinition);\n\n await scheduler.runOnce();\n await scheduler.init();\n this.schedulersList.push(scheduler);\n }\n\n public async runSchedulers(): Promise<void> {\n for (const scheduler of this.schedulersList) {\n await scheduler.init();\n }\n }\n\n public async shutdown(): Promise<void> {\n for (const consumer of [...this.consumersList].reverse()) {\n await this.closeCandidate(consumer as ShutdownCandidate);\n }\n\n for (const scheduler of [...this.schedulersList].reverse()) {\n await this.closeCandidate(scheduler as ShutdownCandidate);\n }\n\n for (const hook of [...this.shutdownHooks].reverse()) {\n await hook();\n }\n\n await this.closeCandidate(this.loggerInstance as ShutdownCandidate);\n }\n}\n\nexport function createKernel<\n TEnvironmentSchema extends KernelEnvironmentSchema | undefined = undefined,\n>(options?: KernelOptions<TEnvironmentSchema>): Kernel<TEnvironmentSchema> {\n return new Kernel(options);\n}\n\nexport default Kernel;\n","import type { KernelLogger } from '../../../contracts/index.js';\n\nexport class ConsoleKernelLogger implements KernelLogger {\n public debug(message: string): void {\n // eslint-disable-next-line no-console\n console.debug(message);\n }\n\n public error(message: string): void {\n // eslint-disable-next-line no-console\n console.error(message);\n }\n\n public info(message: string): void {\n // eslint-disable-next-line no-console\n console.info(message);\n }\n\n public warn(message: string): void {\n // eslint-disable-next-line no-console\n console.warn(message);\n }\n}\n","import type { Logger } from 'node-dependency-injection';\n\nexport class AutowireWarningFilter implements Logger {\n constructor(private readonly logger: Logger) {}\n\n private isIgnorableAutowireWarning(message: string): boolean {\n return (\n message.startsWith(\n 'Autowire: file has export default declaration but no runtime default export:',\n ) ||\n message.startsWith('Autowire: failed to create definition for undefined:')\n );\n }\n\n public warn(message?: unknown, ...optionalParams: unknown[]): void {\n if (\n typeof message === 'string' &&\n this.isIgnorableAutowireWarning(message)\n ) {\n this.logger.debug?.(`Ignored ${message}`, ...optionalParams);\n\n return;\n }\n\n this.logger.warn(message, ...optionalParams);\n }\n\n public info(message?: unknown, ...optionalParams: unknown[]): void {\n this.logger.info?.(message, ...optionalParams);\n }\n\n public debug(message?: unknown, ...optionalParams: unknown[]): void {\n this.logger.debug?.(message, ...optionalParams);\n }\n}\n","import fs from 'fs-extra';\nimport {\n Autowire,\n ContainerBuilder,\n ServiceFile,\n YamlFileLoader,\n} from 'node-dependency-injection';\nimport path from 'node:path';\n\nimport type { ServiceResolver } from '../../contracts/index.js';\nimport type { ContainerInternals } from './ContainerInternals.js';\nimport type { DefinitionMetadata } from './DefinitionMetadata.js';\nimport type { DependencyInjectionOptions } from './DependencyInjectionOptions.js';\nimport type { DependencyOverride } from './DependencyOverride.js';\n\nimport { AutowireWarningFilter } from './AutowireWarningFilter.js';\n\nexport class DependencyInjection implements ServiceResolver {\n private static configuredInstance: DependencyInjection | undefined;\n private autowire: Autowire | undefined;\n private loader: YamlFileLoader | undefined;\n private readonly container: ContainerBuilder;\n private readonly overrideTokenIds = new Map<unknown, string>();\n\n public static configure(\n options: DependencyInjectionOptions,\n ): DependencyInjection {\n DependencyInjection.configuredInstance = new DependencyInjection(options);\n\n return DependencyInjection.configuredInstance;\n }\n\n public static get instance(): DependencyInjection {\n if (!DependencyInjection.configuredInstance) {\n throw new Error('DependencyInjection has not been configured.');\n }\n\n return DependencyInjection.configuredInstance;\n }\n\n constructor(\n private readonly options: DependencyInjectionOptions = {\n containerBuild: process.env.CONTAINER_BUILD === 'true',\n servicesYamlPath: path.resolve(\n process.cwd(),\n 'config',\n 'container',\n 'services.yaml',\n ),\n sourceDirectory: path.resolve(process.cwd(), 'src'),\n },\n ) {\n this.container = new ContainerBuilder(false, this.options.sourceDirectory);\n }\n\n private get definitions(): Map<string, DefinitionMetadata> {\n const container = this.container as unknown as ContainerInternals;\n\n return container._definitions || new Map();\n }\n\n private get aliases(): Map<string, string> {\n const container = this.container as unknown as ContainerInternals;\n\n return container._alias || new Map();\n }\n\n private async ensureFolderExists(filePath: string): Promise<void> {\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n }\n\n private getServiceClassName(serviceName: unknown): string | undefined {\n return typeof serviceName === 'function' ? serviceName.name : undefined;\n }\n\n private getOverrideId(prefix: string, token: unknown): string {\n const tokenName = this.getServiceClassName(token) ?? String(token);\n\n return `ddd-kernel.override.${prefix}.${tokenName}`;\n }\n\n private hasDirectService(serviceName: unknown): boolean {\n return (\n typeof serviceName === 'string' &&\n (this.definitions.has(serviceName) || this.aliases.has(serviceName))\n );\n }\n\n private ensureSyntheticService(id: string, value: unknown): void {\n const definition = this.container.register(id);\n\n definition.public = true;\n definition.synthetic = true;\n this.container.set(id, value);\n }\n\n private parentMatchesService(\n parentId: string | null | undefined,\n serviceClassName: string,\n ): boolean {\n if (!parentId) {\n return false;\n }\n\n const parentName = Buffer.from(parentId, 'base64').toString('utf8');\n\n return parentName.endsWith(`__${serviceClassName}__${serviceClassName}`);\n }\n\n private serviceIdMatchesService(\n serviceId: string,\n serviceClassName: string,\n ): boolean {\n const serviceName = Buffer.from(serviceId, 'base64').toString('utf8');\n\n return serviceName.endsWith(`__${serviceClassName}__${serviceClassName}`);\n }\n\n private serviceIdReferencesService(\n serviceId: string,\n serviceClassName: string,\n ): boolean {\n const serviceName = Buffer.from(serviceId, 'base64').toString('utf8');\n\n return serviceName.endsWith(`__${serviceClassName}`);\n }\n\n private getReferenceId(value: unknown): string | undefined {\n if (\n typeof value === 'object' &&\n value !== null &&\n 'id' in value &&\n typeof value.id === 'string'\n ) {\n return value.id;\n }\n\n return undefined;\n }\n\n private getDefinitionArgumentReferences(\n definition: DefinitionMetadata,\n ): string[] {\n return [\n ...(definition._args ?? []),\n ...(definition._appendArgs ?? []),\n ...(definition._overrideArgs ?? []),\n ].flatMap((argument) => {\n const referenceId = this.getReferenceId(argument);\n\n return referenceId ? [referenceId] : [];\n });\n }\n\n private findConcreteChildServiceId(serviceName: unknown): string | undefined {\n const serviceClassName = this.getServiceClassName(serviceName);\n\n if (!serviceClassName) {\n return undefined;\n }\n\n const matches = [...this.definitions.entries()]\n .filter(([, definition]) => definition._abstract !== true)\n .filter(([, definition]) =>\n this.parentMatchesService(definition._parent, serviceClassName),\n )\n .map(([id]) => id);\n\n return matches[matches.length - 1];\n }\n\n private findRegisteredServiceId(serviceName: unknown): string | undefined {\n const serviceClassName = this.getServiceClassName(serviceName);\n\n if (!serviceClassName) {\n return undefined;\n }\n\n const matches = [...this.definitions.keys()].filter((id) =>\n this.serviceIdMatchesService(id, serviceClassName),\n );\n\n return matches[matches.length - 1];\n }\n\n private findAliasServiceId(serviceName: unknown): string | undefined {\n const serviceClassName = this.getServiceClassName(serviceName);\n\n if (!serviceClassName) {\n return undefined;\n }\n\n const matches = [...this.aliases.keys()].filter((id) =>\n this.serviceIdMatchesService(id, serviceClassName),\n );\n\n return matches[matches.length - 1];\n }\n\n private findReferencedServiceIds(serviceName: unknown): string[] {\n const serviceClassName = this.getServiceClassName(serviceName);\n\n if (!serviceClassName) {\n return [];\n }\n\n return [\n ...new Set(\n [...this.definitions.values()]\n .flatMap((definition) =>\n this.getDefinitionArgumentReferences(definition),\n )\n .filter((id) =>\n this.serviceIdReferencesService(id, serviceClassName),\n ),\n ),\n ];\n }\n\n private getOverrideTokenIds(token: unknown): string[] {\n const tokenIds = [\n this.findRegisteredServiceId(token),\n this.findAliasServiceId(token),\n ...this.findReferencedServiceIds(token),\n ].filter((id): id is string => id !== undefined);\n const existingTokenIds = [...new Set(tokenIds)];\n\n if (existingTokenIds.length > 0) {\n return existingTokenIds;\n }\n\n const overrideTokenId = this.getOverrideId('token', token);\n\n this.ensureSyntheticService(overrideTokenId, undefined);\n\n return [overrideTokenId];\n }\n\n private getOverrideClassServiceId(\n ClassDefinition: new () => unknown,\n ): string {\n const registeredServiceId = this.findRegisteredServiceId(ClassDefinition);\n\n if (registeredServiceId) {\n return registeredServiceId;\n }\n\n const overrideClassId = this.getOverrideId('class', ClassDefinition);\n\n this.container.register(overrideClassId, ClassDefinition);\n\n return overrideClassId;\n }\n\n private applyClassOverride(override: DependencyOverride): void {\n if (!('useClass' in override)) {\n return;\n }\n\n const tokenIds = this.getOverrideTokenIds(override.token);\n const classId = this.getOverrideClassServiceId(override.useClass);\n\n this.overrideTokenIds.set(override.token, tokenIds[0]);\n for (const tokenId of tokenIds) {\n this.container.setAlias(tokenId, classId);\n }\n }\n\n private applyFactoryOverride(override: DependencyOverride): void {\n if (!('useFactory' in override)) {\n return;\n }\n\n const tokenIds = this.getOverrideTokenIds(override.token);\n const factoryId = this.getOverrideId('factory', override.token);\n\n this.ensureSyntheticService(factoryId, override.useFactory(this));\n this.overrideTokenIds.set(override.token, tokenIds[0]);\n for (const tokenId of tokenIds) {\n this.container.setAlias(tokenId, factoryId);\n }\n }\n\n private applyValueOverride(override: DependencyOverride): void {\n if (!('useValue' in override)) {\n return;\n }\n\n const tokenIds = this.getOverrideTokenIds(override.token);\n const valueId = this.getOverrideId('value', override.token);\n\n this.ensureSyntheticService(valueId, override.useValue);\n this.overrideTokenIds.set(override.token, tokenIds[0]);\n for (const tokenId of tokenIds) {\n this.container.setAlias(tokenId, valueId);\n }\n }\n\n private applyOverrides(): void {\n for (const override of this.options.overrides ?? []) {\n this.applyClassOverride(override);\n this.applyFactoryOverride(override);\n this.applyValueOverride(override);\n }\n }\n\n private async processAutowire(): Promise<void> {\n const previousLogger = this.container.logger;\n\n this.container.logger = new AutowireWarningFilter(previousLogger);\n\n try {\n await this.autowire?.process();\n } finally {\n this.container.logger = previousLogger;\n }\n }\n\n private registerParentAliases(): void {\n for (const [id, definition] of this.definitions.entries()) {\n if (definition._abstract === true || !definition._parent) {\n continue;\n }\n\n this.container.setAlias(definition._parent, id);\n }\n }\n\n public async compile(): Promise<void> {\n if (this.options.containerBuild) {\n await this.ensureFolderExists(this.options.servicesYamlPath);\n this.autowire = new Autowire(this.container);\n this.autowire.makeIdLegacy();\n this.autowire.serviceFile = new ServiceFile(\n this.options.servicesYamlPath,\n false,\n );\n await this.processAutowire();\n } else {\n this.loader = new YamlFileLoader(this.container);\n await this.loader.load(this.options.servicesYamlPath);\n }\n\n this.registerParentAliases();\n this.applyOverrides();\n await this.container.compile();\n }\n\n public getService<T>(serviceName: unknown): T {\n const overrideTokenId = this.overrideTokenIds.get(serviceName);\n\n if (overrideTokenId) {\n return this.container.get<T>(overrideTokenId);\n }\n\n const aliasServiceId = this.findAliasServiceId(serviceName);\n\n if (aliasServiceId) {\n return this.container.get<T>(aliasServiceId);\n }\n\n const childServiceId = this.findConcreteChildServiceId(serviceName);\n\n if (childServiceId) {\n return this.container.get<T>(childServiceId);\n }\n\n const registeredServiceId = this.findRegisteredServiceId(serviceName);\n\n if (registeredServiceId) {\n return this.container.get<T>(registeredServiceId);\n }\n\n // NDI 4 types only string IDs, but still resolves constructors and validates other tokens at runtime.\n return this.container.get<T>(serviceName as string);\n }\n\n public hasService(serviceName: unknown): boolean {\n return (\n this.overrideTokenIds.has(serviceName) ||\n this.findAliasServiceId(serviceName) !== undefined ||\n this.findConcreteChildServiceId(serviceName) !== undefined ||\n this.findRegisteredServiceId(serviceName) !== undefined ||\n this.hasDirectService(serviceName)\n );\n }\n}\n\nexport default DependencyInjection;\n","export class KernelEnvironmentValidationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'KernelEnvironmentValidationError';\n }\n}\n"],"mappings":"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","names":["path","path"]}
1
+ {"version":3,"sources":["../src/contracts/kernel/KernelRoute.ts","../src/contracts/ui/HttpRouteStatusEnum.ts","../src/errors/KernelError.ts","../src/errors/DependencyNotFoundError.ts","../src/errors/HandlerNotFoundError.ts","../src/Kernel.ts","../src/adapters/kernel/console/ConsoleKernelLogger.ts","../src/infrastructure/dependency-injection/AutowireWarningFilter.ts","../src/infrastructure/dependency-injection/DependencyInjection.ts","../src/kernel/KernelEnvironmentValidationError.ts"],"sourcesContent":["export abstract class KernelRoute {\n declare protected readonly kernelRouteContract: never;\n}\n","export const HttpRouteStatusEnum = {\n BAD_REQUEST: 400,\n CONFLICT: 409,\n CREATED: 201,\n DEPRECATED: 299,\n FORBIDDEN: 403,\n INTERNAL_SERVER_ERROR: 500,\n NO_CONTENT: 204,\n NOT_FOUND: 404,\n OK: 200,\n PAYLOAD_TOO_LARGE: 413,\n SERVICE_UNAVAILABLE: 503,\n TOO_MANY_REQUESTS: 429,\n UNAUTHORIZED: 401,\n UNPROCESSABLE_ENTITY: 422,\n} as const;\n\nexport default HttpRouteStatusEnum;\n","export class KernelError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'KernelError';\n }\n}\n","import { KernelError } from './KernelError.js';\n\nexport class DependencyNotFoundError extends KernelError {\n constructor(token: string) {\n super(`Dependency not found for token \"${token}\".`);\n this.name = 'DependencyNotFoundError';\n }\n}\n","import { KernelError } from './KernelError.js';\n\nexport class HandlerNotFoundError extends KernelError {\n constructor(kind: string, name: string) {\n super(`${kind} handler not found for \"${name}\".`);\n this.name = 'HandlerNotFoundError';\n }\n}\n","import dotenv, { type DotenvConfigOutput } from 'dotenv';\nimport path from 'node:path';\n\nimport type {\n ConsumerMiddleware,\n KernelConsumer,\n KernelLogger,\n KernelRoute,\n ShutdownHook,\n} from './contracts/index.js';\nimport type { ServiceClass } from './infrastructure/dependency-injection/index.js';\nimport type { Initializer, Runtime } from './infrastructure/lifecycle/index.js';\nimport type { Scheduler } from './infrastructure/scheduler/index.js';\nimport type { KernelDependencyInjectionOptions } from './kernel/KernelDependencyInjectionOptions.js';\nimport type { KernelEnvironmentForSchema } from './kernel/KernelEnvironmentForSchema.js';\nimport type { KernelEnvironmentSchema } from './kernel/KernelEnvironmentSchema.js';\nimport type { KernelEnvironmentValue } from './kernel/KernelEnvironmentValue.js';\nimport type { KernelEnvironmentVariablesOptions } from './kernel/KernelEnvironmentVariablesOptions.js';\nimport type { KernelOptions } from './kernel/KernelOptions.js';\nimport type { ShutdownCandidate } from './kernel/ShutdownCandidate.js';\n\nimport { ConsoleKernelLogger } from './adapters/kernel/index.js';\nimport { DependencyInjection } from './infrastructure/dependency-injection/index.js';\nimport { KernelEnvironmentValidationError } from './kernel/KernelEnvironmentValidationError.js';\n\nexport type { KernelDependencyInjectionOptions } from './kernel/KernelDependencyInjectionOptions.js';\nexport type { KernelDefaultEnvironment } from './kernel/KernelDefaultEnvironment.js';\nexport type { KernelEnvironment } from './kernel/KernelEnvironment.js';\nexport type { KernelEnvironmentForSchema } from './kernel/KernelEnvironmentForSchema.js';\nexport type { KernelEnvironmentSchema } from './kernel/KernelEnvironmentSchema.js';\nexport type { KernelEnvironmentSchemaInput } from './kernel/KernelEnvironmentSchemaInput.js';\nexport type { KernelEnvironmentValue } from './kernel/KernelEnvironmentValue.js';\nexport type { KernelEnvironmentVariableDefinition } from './kernel/KernelEnvironmentVariableDefinition.js';\nexport type { KernelEnvironmentVariablePrimitive } from './kernel/KernelEnvironmentVariablePrimitive.js';\nexport type { KernelEnvironmentVariableResolvedValue } from './kernel/KernelEnvironmentVariableResolvedValue.js';\nexport type { KernelEnvironmentVariableType } from './kernel/KernelEnvironmentVariableType.js';\nexport type { KernelEnvironmentVariablesOptions } from './kernel/KernelEnvironmentVariablesOptions.js';\nexport type { KernelOptions } from './kernel/KernelOptions.js';\nexport { KernelEnvironmentValidationError } from './kernel/KernelEnvironmentValidationError.js';\n\nexport class Kernel<\n TEnvironmentSchema extends KernelEnvironmentSchema | undefined = undefined,\n> {\n private static readonly stateKey = Symbol.for(\n '@haskou/ddd-kernel/kernel-state',\n );\n\n private readonly consumerMiddlewares: ConsumerMiddleware[] = [];\n private readonly consumersList: KernelConsumer[] = [];\n private readonly loggerInstance: KernelLogger;\n private readonly routesList: ServiceClass<KernelRoute>[] = [];\n private readonly schedulersList: Scheduler[] = [];\n private readonly shutdownHooks: ShutdownHook[] = [];\n private dependencyInjectionInstance: DependencyInjection | undefined;\n private environmentVariables =\n process.env as KernelEnvironmentForSchema<TEnvironmentSchema>;\n\n private static get state(): {\n activeKernel?: Kernel<KernelEnvironmentSchema | undefined>;\n } {\n const stateContainer = globalThis as typeof globalThis & {\n [Kernel.stateKey]?: {\n activeKernel?: Kernel<KernelEnvironmentSchema | undefined>;\n };\n };\n\n stateContainer[Kernel.stateKey] = stateContainer[Kernel.stateKey] ?? {};\n\n return stateContainer[Kernel.stateKey] as {\n activeKernel?: Kernel<KernelEnvironmentSchema | undefined>;\n };\n }\n\n public static get configDirectory(): string {\n return path.resolve(Kernel.rootDirectory, 'config');\n }\n\n public static get consumers(): KernelConsumer[] {\n return Kernel.getActiveKernel().consumers;\n }\n\n public static get consumerMiddleware(): ConsumerMiddleware[] {\n return Kernel.getActiveKernel().consumerMiddleware;\n }\n\n public static get di(): DependencyInjection {\n return Kernel.getActiveKernel().di;\n }\n\n public static get environment(): NodeJS.ProcessEnv {\n return process.env;\n }\n\n public static get logger(): KernelLogger {\n return Kernel.getActiveKernel().logger;\n }\n\n public static get active(): Kernel<KernelEnvironmentSchema | undefined> {\n return Kernel.getActiveKernel();\n }\n\n public static get rootDirectory(): string {\n return process.cwd();\n }\n\n public static get routes(): ServiceClass<KernelRoute>[] {\n return Kernel.getActiveKernel().routes;\n }\n\n public static get schedulers(): Scheduler[] {\n return Kernel.getActiveKernel().schedulers;\n }\n\n public static get sourceDirectory(): string {\n return path.resolve(Kernel.rootDirectory, 'src');\n }\n\n private static getActiveKernel(): Kernel<\n KernelEnvironmentSchema | undefined\n > {\n if (!Kernel.state.activeKernel) {\n Kernel.state.activeKernel = new Kernel();\n }\n\n return Kernel.state.activeKernel;\n }\n\n private static assertRequiredEnvironmentVariable(\n name: string,\n value: string | undefined,\n schema: KernelEnvironmentSchema,\n ): void {\n if (schema[name]?.required === true && value === undefined) {\n throw new KernelEnvironmentValidationError(\n `Missing required environment variable \"${name}\".`,\n );\n }\n }\n\n private static assertRequiredEnvironmentVariableIsNotBlank(\n name: string,\n value: string,\n schema: KernelEnvironmentSchema,\n ): void {\n if (schema[name]?.required === true && value.trim() === '') {\n throw new KernelEnvironmentValidationError(\n `Blank required environment variable \"${name}\".`,\n );\n }\n }\n\n private static assertEnvironmentVariableChoice(\n name: string,\n value: KernelEnvironmentValue,\n schema: KernelEnvironmentSchema,\n ): void {\n const choices = schema[name]?.choices;\n\n if (choices && !choices.includes(value)) {\n throw new KernelEnvironmentValidationError(\n `Environment variable \"${name}\" must be one of: ${choices.join(', ')}.`,\n );\n }\n }\n\n private static getEnvironmentVariablesPath(\n environment: string,\n options: KernelEnvironmentVariablesOptions<\n KernelEnvironmentSchema | undefined\n >,\n ): string {\n return path.resolve(\n Kernel.rootDirectory,\n options.path ?? (environment ? `.env.${environment}` : '.env'),\n );\n }\n\n private static parseBooleanEnvironmentVariable(\n name: string,\n value: string,\n ): boolean {\n if (['1', 'true', 'yes', 'on'].includes(value.toLowerCase())) {\n return true;\n }\n\n if (['0', 'false', 'no', 'off'].includes(value.toLowerCase())) {\n return false;\n }\n\n throw new KernelEnvironmentValidationError(\n `Environment variable \"${name}\" has invalid boolean value \"${value}\".`,\n );\n }\n\n private static parseNumberEnvironmentVariable(\n name: string,\n value: string,\n ): number {\n const parsedValue = Number(value);\n\n if (Number.isFinite(parsedValue)) {\n return parsedValue;\n }\n\n throw new KernelEnvironmentValidationError(\n `Environment variable \"${name}\" has invalid number value \"${value}\".`,\n );\n }\n\n private static parseEnvironmentVariable(\n name: string,\n value: string,\n schema: KernelEnvironmentSchema,\n ): KernelEnvironmentValue {\n const definition = schema[name];\n\n if (definition.type === 'boolean') {\n const parsedValue = Kernel.parseBooleanEnvironmentVariable(name, value);\n\n Kernel.assertEnvironmentVariableChoice(name, parsedValue, schema);\n\n return parsedValue;\n }\n\n if (definition.type === 'number') {\n const parsedValue = Kernel.parseNumberEnvironmentVariable(name, value);\n\n Kernel.assertEnvironmentVariableChoice(name, parsedValue, schema);\n\n return parsedValue;\n }\n\n Kernel.assertEnvironmentVariableChoice(name, value, schema);\n\n return value;\n }\n\n private static getEnvironmentVariableValue(\n name: string,\n definition: KernelEnvironmentSchema[string],\n schema: KernelEnvironmentSchema,\n ): string | undefined {\n const value = process.env[name];\n\n Kernel.assertRequiredEnvironmentVariable(name, value, schema);\n\n if (value !== undefined) {\n Kernel.assertRequiredEnvironmentVariableIsNotBlank(name, value, schema);\n }\n\n if (value !== undefined && value.trim() !== '') {\n return value;\n }\n\n return definition.defaultValue?.toString();\n }\n\n private static shouldUnsetBlankOptionalEnvironmentVariable(\n name: string,\n value: string | undefined,\n valueOrDefault: string | undefined,\n schema: KernelEnvironmentSchema,\n ): boolean {\n return (\n value !== undefined &&\n value.trim() === '' &&\n valueOrDefault === undefined &&\n schema[name]?.required !== true\n );\n }\n\n private static validateEnvironmentVariables<\n TSchema extends KernelEnvironmentSchema,\n >(schema: TSchema): KernelEnvironmentForSchema<TSchema> {\n const environmentVariables: Record<\n string,\n KernelEnvironmentValue | undefined\n > = {};\n\n for (const [name, definition] of Object.entries(schema)) {\n const value = process.env[name];\n const valueOrDefault = Kernel.getEnvironmentVariableValue(\n name,\n definition,\n schema,\n );\n\n if (valueOrDefault !== undefined) {\n environmentVariables[name] = Kernel.parseEnvironmentVariable(\n name,\n valueOrDefault,\n schema,\n );\n } else if (\n Kernel.shouldUnsetBlankOptionalEnvironmentVariable(\n name,\n value,\n valueOrDefault,\n schema,\n )\n ) {\n environmentVariables[name] = undefined;\n }\n }\n\n return {\n ...process.env,\n ...environmentVariables,\n } as KernelEnvironmentForSchema<TSchema>;\n }\n\n public static loadEnvironmentVariables(\n environment?: string,\n options: KernelEnvironmentVariablesOptions<\n KernelEnvironmentSchema | undefined\n > = {},\n ): DotenvConfigOutput {\n const environmentName = environment ?? process.env.NODE_ENV ?? 'local';\n\n const result = dotenv.config({\n override: options.override,\n path: Kernel.getEnvironmentVariablesPath(environmentName, options),\n });\n\n if (options.schema) {\n Kernel.validateEnvironmentVariables(options.schema);\n }\n\n return result;\n }\n\n constructor(\n private readonly options: KernelOptions<TEnvironmentSchema> = {},\n ) {\n this.loggerInstance = options.logger ?? new ConsoleKernelLogger();\n this.dependencyInjectionInstance = options.di;\n Kernel.state.activeKernel = this;\n }\n\n private async closeCandidate(candidate: ShutdownCandidate): Promise<void> {\n if (candidate.shutdown) {\n await candidate.shutdown();\n\n return;\n }\n\n if (candidate.close) {\n await candidate.close();\n\n return;\n }\n\n if (candidate.stop) {\n await candidate.stop();\n\n return;\n }\n\n if (candidate.flush) {\n await candidate.flush();\n }\n }\n\n private getConsumerFromClass(\n ClassDefinition: ServiceClass<KernelConsumer>,\n ): KernelConsumer {\n return this.di.getService<KernelConsumer>(ClassDefinition);\n }\n\n private getInitializerFromClass(\n ClassDefinition: ServiceClass<Initializer>,\n ): Initializer {\n return this.di.getService<Initializer>(ClassDefinition);\n }\n\n private getRuntimeFromClass(ClassDefinition: ServiceClass<Runtime>): Runtime {\n return this.di.getService<Runtime>(ClassDefinition);\n }\n\n private getSchedulerFromClass(\n ClassDefinition: ServiceClass<Scheduler>,\n ): Scheduler {\n return this.di.getService<Scheduler>(ClassDefinition);\n }\n\n public get consumers(): KernelConsumer[] {\n return this.consumersList;\n }\n\n public get consumerMiddleware(): ConsumerMiddleware[] {\n return this.consumerMiddlewares;\n }\n\n public get di(): DependencyInjection {\n if (!this.dependencyInjectionInstance) {\n throw new Error('Kernel dependency injection has not been initialized.');\n }\n\n return this.dependencyInjectionInstance;\n }\n\n public get environment(): KernelEnvironmentForSchema<TEnvironmentSchema> {\n return this.environmentVariables;\n }\n\n public get logger(): KernelLogger {\n return this.loggerInstance;\n }\n\n public get routes(): ServiceClass<KernelRoute>[] {\n return this.routesList;\n }\n\n public get schedulers(): Scheduler[] {\n return this.schedulersList;\n }\n\n private getDependencyInjectionOptions(\n options: KernelDependencyInjectionOptions = {},\n ): Required<KernelDependencyInjectionOptions> {\n return {\n containerBuild:\n options.containerBuild ?? process.env.CONTAINER_BUILD === 'true',\n overrides: options.overrides ?? [],\n servicesYamlPath:\n options.servicesYamlPath ??\n this.options.servicesYamlPath ??\n path.resolve(Kernel.configDirectory, 'container', 'services.yaml'),\n sourceDirectory:\n options.sourceDirectory ??\n this.options.sourceDirectory ??\n Kernel.sourceDirectory,\n };\n }\n\n public async dependencyInjection(\n options: KernelDependencyInjectionOptions = {},\n ): Promise<void> {\n Kernel.state.activeKernel = this;\n this.dependencyInjectionInstance =\n this.dependencyInjectionInstance ??\n DependencyInjection.configure(\n this.getDependencyInjectionOptions(options),\n );\n\n await this.dependencyInjectionInstance.compile();\n Kernel.state.activeKernel = this;\n }\n\n public loadEnvironmentVariables(\n environment?: string,\n options: KernelEnvironmentVariablesOptions<\n KernelEnvironmentSchema | undefined\n > = {},\n ): DotenvConfigOutput {\n const result = Kernel.loadEnvironmentVariables(environment, {\n ...options,\n schema: options.schema ?? this.options.environmentSchema,\n });\n\n this.environmentVariables = this.options.environmentSchema\n ? Kernel.validateEnvironmentVariables(this.options.environmentSchema)\n : (process.env as KernelEnvironmentForSchema<TEnvironmentSchema>);\n\n return result;\n }\n\n public getRoutes(): ServiceClass<KernelRoute>[] {\n return this.routes;\n }\n\n public registerConsumerMiddleware(\n ...middlewares: ConsumerMiddleware[]\n ): void {\n this.consumerMiddlewares.push(...middlewares);\n }\n\n public registerConsumers(\n ...ClassDefinitions: ServiceClass<KernelConsumer>[]\n ): void {\n for (const ClassDefinition of ClassDefinitions) {\n this.consumersList.push(this.getConsumerFromClass(ClassDefinition));\n }\n }\n\n public registerConsumerInstances(...consumers: KernelConsumer[]): void {\n this.consumersList.push(...consumers);\n }\n\n public registerRoutes(\n ...ClassDefinitions: ServiceClass<KernelRoute>[]\n ): void {\n this.routesList.push(...ClassDefinitions);\n }\n\n public registerSchedulers(\n ...ClassDefinitions: ServiceClass<Scheduler>[]\n ): void {\n for (const ClassDefinition of ClassDefinitions) {\n this.schedulersList.push(this.getSchedulerFromClass(ClassDefinition));\n }\n }\n\n public registerSchedulerInstances(...schedulers: Scheduler[]): void {\n this.schedulersList.push(...schedulers);\n }\n\n public registerShutdownHook(hook: ShutdownHook): void {\n this.shutdownHooks.push(hook);\n }\n\n public removeConsumers(): void {\n this.consumersList.length = 0;\n }\n\n public removeRoutes(): void {\n this.routesList.length = 0;\n }\n\n public removeSchedulers(): void {\n this.schedulersList.length = 0;\n }\n\n public async runConsumers(): Promise<void> {\n for (const consumer of this.consumersList) {\n await consumer.init();\n }\n }\n\n public async runInitializers(\n ...ClassDefinitions: ServiceClass<Initializer>[]\n ): Promise<void> {\n for (const ClassDefinition of ClassDefinitions) {\n await this.getInitializerFromClass(ClassDefinition).ensure();\n }\n }\n\n public async runRuntimes(\n ...ClassDefinitions: ServiceClass<Runtime>[]\n ): Promise<void> {\n for (const ClassDefinition of ClassDefinitions) {\n const runtime = this.getRuntimeFromClass(ClassDefinition);\n\n await runtime.run();\n this.registerShutdownHook(() =>\n this.closeCandidate(runtime as ShutdownCandidate),\n );\n }\n }\n\n public async runSchedulerNowAndSchedule(\n ClassDefinition: ServiceClass<Scheduler>,\n ): Promise<void> {\n const scheduler = this.getSchedulerFromClass(ClassDefinition);\n\n await scheduler.runOnce();\n await scheduler.init();\n this.schedulersList.push(scheduler);\n }\n\n public async runSchedulers(): Promise<void> {\n for (const scheduler of this.schedulersList) {\n await scheduler.init();\n }\n }\n\n public async shutdown(): Promise<void> {\n for (const consumer of [...this.consumersList].reverse()) {\n await this.closeCandidate(consumer as ShutdownCandidate);\n }\n\n for (const scheduler of [...this.schedulersList].reverse()) {\n await this.closeCandidate(scheduler as ShutdownCandidate);\n }\n\n for (const hook of [...this.shutdownHooks].reverse()) {\n await hook();\n }\n\n await this.closeCandidate(this.loggerInstance as ShutdownCandidate);\n }\n}\n\nexport function createKernel<\n TEnvironmentSchema extends KernelEnvironmentSchema | undefined = undefined,\n>(options?: KernelOptions<TEnvironmentSchema>): Kernel<TEnvironmentSchema> {\n return new Kernel(options);\n}\n\nexport default Kernel;\n","import type { KernelLogger } from '../../../contracts/index.js';\n\nexport class ConsoleKernelLogger implements KernelLogger {\n public debug(message: string): void {\n // eslint-disable-next-line no-console\n console.debug(message);\n }\n\n public error(message: string): void {\n // eslint-disable-next-line no-console\n console.error(message);\n }\n\n public info(message: string): void {\n // eslint-disable-next-line no-console\n console.info(message);\n }\n\n public warn(message: string): void {\n // eslint-disable-next-line no-console\n console.warn(message);\n }\n}\n","import type { Logger } from 'node-dependency-injection';\n\nexport class AutowireWarningFilter implements Logger {\n constructor(private readonly logger: Logger) {}\n\n private isIgnorableAutowireWarning(message: string): boolean {\n return (\n message.startsWith(\n 'Autowire: file has export default declaration but no runtime default export:',\n ) ||\n message.startsWith('Autowire: failed to create definition for undefined:')\n );\n }\n\n public warn(message?: unknown, ...optionalParams: unknown[]): void {\n if (\n typeof message === 'string' &&\n this.isIgnorableAutowireWarning(message)\n ) {\n this.logger.debug?.(`Ignored ${message}`, ...optionalParams);\n\n return;\n }\n\n this.logger.warn(message, ...optionalParams);\n }\n\n public info(message?: unknown, ...optionalParams: unknown[]): void {\n this.logger.info?.(message, ...optionalParams);\n }\n\n public debug(message?: unknown, ...optionalParams: unknown[]): void {\n this.logger.debug?.(message, ...optionalParams);\n }\n}\n","import fs from 'fs-extra';\nimport {\n Autowire,\n ContainerBuilder,\n ServiceFile,\n YamlFileLoader,\n} from 'node-dependency-injection';\nimport path from 'node:path';\n\nimport type { ServiceResolver } from '../../contracts/index.js';\nimport type { AutowireInternals } from './AutowireInternals.js';\nimport type { ContainerInternals } from './ContainerInternals.js';\nimport type { DefinitionMetadata } from './DefinitionMetadata.js';\nimport type { DependencyInjectionOptions } from './DependencyInjectionOptions.js';\nimport type { DependencyOverride } from './DependencyOverride.js';\n\nimport { AutowireWarningFilter } from './AutowireWarningFilter.js';\n\nexport class DependencyInjection implements ServiceResolver {\n private static configuredInstance: DependencyInjection | undefined;\n private loader: YamlFileLoader | undefined;\n private readonly container: ContainerBuilder;\n private readonly overrideTokenIds = new Map<unknown, string>();\n\n public static configure(\n options: DependencyInjectionOptions,\n ): DependencyInjection {\n DependencyInjection.configuredInstance = new DependencyInjection(options);\n\n return DependencyInjection.configuredInstance;\n }\n\n public static get instance(): DependencyInjection {\n if (!DependencyInjection.configuredInstance) {\n throw new Error('DependencyInjection has not been configured.');\n }\n\n return DependencyInjection.configuredInstance;\n }\n\n constructor(\n private readonly options: DependencyInjectionOptions = {\n containerBuild: process.env.CONTAINER_BUILD === 'true',\n servicesYamlPath: path.resolve(\n process.cwd(),\n 'config',\n 'container',\n 'services.yaml',\n ),\n sourceDirectory: path.resolve(process.cwd(), 'src'),\n },\n ) {\n this.container = new ContainerBuilder(false, this.options.sourceDirectory);\n }\n\n private get definitions(): Map<string, DefinitionMetadata> {\n const container = this.container as unknown as ContainerInternals;\n\n return container._definitions || new Map();\n }\n\n private get aliases(): Map<string, string> {\n const container = this.container as unknown as ContainerInternals;\n\n return container._alias || new Map();\n }\n\n private async ensureFolderExists(filePath: string): Promise<void> {\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n }\n\n private getServiceClassName(serviceName: unknown): string | undefined {\n return typeof serviceName === 'function' ? serviceName.name : undefined;\n }\n\n private getOverrideId(prefix: string, token: unknown): string {\n const tokenName = this.getServiceClassName(token) ?? String(token);\n\n return `ddd-kernel.override.${prefix}.${tokenName}`;\n }\n\n private hasDirectService(serviceName: unknown): boolean {\n return (\n typeof serviceName === 'string' &&\n (this.definitions.has(serviceName) || this.aliases.has(serviceName))\n );\n }\n\n private ensureSyntheticService(id: string, value: unknown): void {\n const definition = this.container.register(id);\n\n definition.public = true;\n definition.synthetic = true;\n this.container.set(id, value);\n }\n\n private idNamesService(id: string, serviceClassName: string): boolean {\n return path.posix.basename(id) === serviceClassName;\n }\n\n private getReferenceId(value: unknown): string | undefined {\n if (\n typeof value === 'object' &&\n value !== null &&\n 'id' in value &&\n typeof value.id === 'string'\n ) {\n return value.id;\n }\n\n return undefined;\n }\n\n private getDefinitionArgumentReferences(\n definition: DefinitionMetadata,\n ): string[] {\n return [\n ...(definition._args ?? []),\n ...(definition._appendArgs ?? []),\n ...(definition._overrideArgs ?? []),\n ].flatMap((argument) => {\n const referenceId = this.getReferenceId(argument);\n\n return referenceId ? [referenceId] : [];\n });\n }\n\n private findConcreteChildServiceId(serviceName: unknown): string | undefined {\n const serviceClassName = this.getServiceClassName(serviceName);\n\n if (!serviceClassName) {\n return undefined;\n }\n\n const matches = [...this.definitions.entries()]\n .filter(([, definition]) => definition._abstract !== true)\n .filter(\n ([, definition]) =>\n definition._parent &&\n this.idNamesService(definition._parent, serviceClassName),\n )\n .map(([id]) => id);\n\n return matches[matches.length - 1];\n }\n\n private findRegisteredServiceId(serviceName: unknown): string | undefined {\n const serviceClassName = this.getServiceClassName(serviceName);\n\n if (!serviceClassName) {\n return undefined;\n }\n\n const matches = [...this.definitions.keys()].filter((id) =>\n this.idNamesService(id, serviceClassName),\n );\n\n return matches[matches.length - 1];\n }\n\n private findAliasServiceId(serviceName: unknown): string | undefined {\n const serviceClassName = this.getServiceClassName(serviceName);\n\n if (!serviceClassName) {\n return undefined;\n }\n\n const matches = [...this.aliases.keys()].filter((id) =>\n this.idNamesService(id, serviceClassName),\n );\n\n return matches[matches.length - 1];\n }\n\n private findReferencedServiceIds(serviceName: unknown): string[] {\n const serviceClassName = this.getServiceClassName(serviceName);\n\n if (!serviceClassName) {\n return [];\n }\n\n return [\n ...new Set(\n [...this.definitions.values()]\n .flatMap((definition) =>\n this.getDefinitionArgumentReferences(definition),\n )\n .filter((id) => this.idNamesService(id, serviceClassName)),\n ),\n ];\n }\n\n private getOverrideTokenIds(token: unknown): string[] {\n const tokenIds = [\n this.findRegisteredServiceId(token),\n this.findAliasServiceId(token),\n ...this.findReferencedServiceIds(token),\n ].filter((id): id is string => id !== undefined);\n const existingTokenIds = [...new Set(tokenIds)];\n\n if (existingTokenIds.length > 0) {\n return existingTokenIds;\n }\n\n const overrideTokenId = this.getOverrideId('token', token);\n\n this.ensureSyntheticService(overrideTokenId, undefined);\n\n return [overrideTokenId];\n }\n\n private getOverrideClassServiceId(\n ClassDefinition: new () => unknown,\n ): string {\n const registeredServiceId = this.findRegisteredServiceId(ClassDefinition);\n\n if (registeredServiceId) {\n return registeredServiceId;\n }\n\n const overrideClassId = this.getOverrideId('class', ClassDefinition);\n\n this.container.register(overrideClassId, ClassDefinition);\n\n return overrideClassId;\n }\n\n private applyClassOverride(override: DependencyOverride): void {\n if (!('useClass' in override)) {\n return;\n }\n\n const tokenIds = this.getOverrideTokenIds(override.token);\n const classId = this.getOverrideClassServiceId(override.useClass);\n\n this.overrideTokenIds.set(override.token, tokenIds[0]);\n for (const tokenId of tokenIds) {\n this.container.setAlias(tokenId, classId);\n }\n }\n\n private applyFactoryOverride(override: DependencyOverride): void {\n if (!('useFactory' in override)) {\n return;\n }\n\n const tokenIds = this.getOverrideTokenIds(override.token);\n const factoryId = this.getOverrideId('factory', override.token);\n\n this.ensureSyntheticService(factoryId, override.useFactory(this));\n this.overrideTokenIds.set(override.token, tokenIds[0]);\n for (const tokenId of tokenIds) {\n this.container.setAlias(tokenId, factoryId);\n }\n }\n\n private applyValueOverride(override: DependencyOverride): void {\n if (!('useValue' in override)) {\n return;\n }\n\n const tokenIds = this.getOverrideTokenIds(override.token);\n const valueId = this.getOverrideId('value', override.token);\n\n this.ensureSyntheticService(valueId, override.useValue);\n this.overrideTokenIds.set(override.token, tokenIds[0]);\n for (const tokenId of tokenIds) {\n this.container.setAlias(tokenId, valueId);\n }\n }\n\n private applyOverrides(): void {\n for (const override of this.options.overrides ?? []) {\n this.applyClassOverride(override);\n this.applyFactoryOverride(override);\n this.applyValueOverride(override);\n }\n }\n\n private trackAutowireAliasIds(autowire: Autowire): Set<string> {\n const internals = autowire as unknown as AutowireInternals;\n const createLegacyServiceId = internals._getLegacyServiceId.bind(autowire);\n const aliasIds = new Set<string>();\n\n internals._getLegacyServiceId = async (...args) => {\n const id = await createLegacyServiceId(...args);\n\n if (!this.container.hasAlias(id) && !this.container.hasDefinition(id)) {\n aliasIds.add(id);\n }\n\n return id;\n };\n\n return aliasIds;\n }\n\n private async processAutowire(autowire: Autowire): Promise<void> {\n const previousLogger = this.container.logger;\n const autowireAliasIds = this.trackAutowireAliasIds(autowire);\n\n this.container.logger = new AutowireWarningFilter(previousLogger);\n\n try {\n await autowire.process();\n } finally {\n this.container.logger = previousLogger;\n }\n\n for (const id of autowireAliasIds) {\n this.aliases.delete(id);\n }\n }\n\n private registerParentAliases(): void {\n for (const [id, definition] of this.definitions.entries()) {\n if (definition._abstract === true || !definition._parent) {\n continue;\n }\n\n this.container.setAlias(definition._parent, id);\n }\n }\n\n public async compile(): Promise<void> {\n if (this.options.containerBuild) {\n await this.ensureFolderExists(this.options.servicesYamlPath);\n const autowire = new Autowire(this.container);\n\n autowire.serviceFile = new ServiceFile(\n this.options.servicesYamlPath,\n false,\n );\n await this.processAutowire(autowire);\n } else {\n this.loader = new YamlFileLoader(this.container);\n await this.loader.load(this.options.servicesYamlPath);\n }\n\n this.registerParentAliases();\n this.applyOverrides();\n await this.container.compile();\n }\n\n public getService<T>(serviceName: unknown): T {\n const overrideTokenId = this.overrideTokenIds.get(serviceName);\n\n if (overrideTokenId) {\n return this.container.get<T>(overrideTokenId);\n }\n\n const aliasServiceId = this.findAliasServiceId(serviceName);\n\n if (aliasServiceId) {\n return this.container.get<T>(aliasServiceId);\n }\n\n const childServiceId = this.findConcreteChildServiceId(serviceName);\n\n if (childServiceId) {\n return this.container.get<T>(childServiceId);\n }\n\n const registeredServiceId = this.findRegisteredServiceId(serviceName);\n\n if (registeredServiceId) {\n return this.container.get<T>(registeredServiceId);\n }\n\n // NDI 4 types only string IDs, but still resolves constructors and validates other tokens at runtime.\n return this.container.get<T>(serviceName as string);\n }\n\n public hasService(serviceName: unknown): boolean {\n return (\n this.overrideTokenIds.has(serviceName) ||\n this.findAliasServiceId(serviceName) !== undefined ||\n this.findConcreteChildServiceId(serviceName) !== undefined ||\n this.findRegisteredServiceId(serviceName) !== undefined ||\n this.hasDirectService(serviceName)\n );\n }\n}\n\nexport default DependencyInjection;\n","export class KernelEnvironmentValidationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'KernelEnvironmentValidationError';\n }\n}\n"],"mappings":"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","names":["path","path"]}
@@ -81,7 +81,6 @@ var DependencyInjection = class _DependencyInjection {
81
81
  }
82
82
  options;
83
83
  static configuredInstance;
84
- autowire;
85
84
  loader;
86
85
  container;
87
86
  overrideTokenIds = /* @__PURE__ */ new Map();
@@ -122,20 +121,8 @@ var DependencyInjection = class _DependencyInjection {
122
121
  definition.synthetic = true;
123
122
  this.container.set(id, value);
124
123
  }
125
- parentMatchesService(parentId, serviceClassName) {
126
- if (!parentId) {
127
- return false;
128
- }
129
- const parentName = Buffer.from(parentId, "base64").toString("utf8");
130
- return parentName.endsWith(`__${serviceClassName}__${serviceClassName}`);
131
- }
132
- serviceIdMatchesService(serviceId, serviceClassName) {
133
- const serviceName = Buffer.from(serviceId, "base64").toString("utf8");
134
- return serviceName.endsWith(`__${serviceClassName}__${serviceClassName}`);
135
- }
136
- serviceIdReferencesService(serviceId, serviceClassName) {
137
- const serviceName = Buffer.from(serviceId, "base64").toString("utf8");
138
- return serviceName.endsWith(`__${serviceClassName}`);
124
+ idNamesService(id, serviceClassName) {
125
+ return import_node_path.default.posix.basename(id) === serviceClassName;
139
126
  }
140
127
  getReferenceId(value) {
141
128
  if (typeof value === "object" && value !== null && "id" in value && typeof value.id === "string") {
@@ -159,7 +146,7 @@ var DependencyInjection = class _DependencyInjection {
159
146
  return void 0;
160
147
  }
161
148
  const matches = [...this.definitions.entries()].filter(([, definition]) => definition._abstract !== true).filter(
162
- ([, definition]) => this.parentMatchesService(definition._parent, serviceClassName)
149
+ ([, definition]) => definition._parent && this.idNamesService(definition._parent, serviceClassName)
163
150
  ).map(([id]) => id);
164
151
  return matches[matches.length - 1];
165
152
  }
@@ -169,7 +156,7 @@ var DependencyInjection = class _DependencyInjection {
169
156
  return void 0;
170
157
  }
171
158
  const matches = [...this.definitions.keys()].filter(
172
- (id) => this.serviceIdMatchesService(id, serviceClassName)
159
+ (id) => this.idNamesService(id, serviceClassName)
173
160
  );
174
161
  return matches[matches.length - 1];
175
162
  }
@@ -179,7 +166,7 @@ var DependencyInjection = class _DependencyInjection {
179
166
  return void 0;
180
167
  }
181
168
  const matches = [...this.aliases.keys()].filter(
182
- (id) => this.serviceIdMatchesService(id, serviceClassName)
169
+ (id) => this.idNamesService(id, serviceClassName)
183
170
  );
184
171
  return matches[matches.length - 1];
185
172
  }
@@ -192,9 +179,7 @@ var DependencyInjection = class _DependencyInjection {
192
179
  ...new Set(
193
180
  [...this.definitions.values()].flatMap(
194
181
  (definition) => this.getDefinitionArgumentReferences(definition)
195
- ).filter(
196
- (id) => this.serviceIdReferencesService(id, serviceClassName)
197
- )
182
+ ).filter((id) => this.idNamesService(id, serviceClassName))
198
183
  )
199
184
  ];
200
185
  }
@@ -263,14 +248,31 @@ var DependencyInjection = class _DependencyInjection {
263
248
  this.applyValueOverride(override);
264
249
  }
265
250
  }
266
- async processAutowire() {
251
+ trackAutowireAliasIds(autowire) {
252
+ const internals = autowire;
253
+ const createLegacyServiceId = internals._getLegacyServiceId.bind(autowire);
254
+ const aliasIds = /* @__PURE__ */ new Set();
255
+ internals._getLegacyServiceId = async (...args) => {
256
+ const id = await createLegacyServiceId(...args);
257
+ if (!this.container.hasAlias(id) && !this.container.hasDefinition(id)) {
258
+ aliasIds.add(id);
259
+ }
260
+ return id;
261
+ };
262
+ return aliasIds;
263
+ }
264
+ async processAutowire(autowire) {
267
265
  const previousLogger = this.container.logger;
266
+ const autowireAliasIds = this.trackAutowireAliasIds(autowire);
268
267
  this.container.logger = new AutowireWarningFilter(previousLogger);
269
268
  try {
270
- await this.autowire?.process();
269
+ await autowire.process();
271
270
  } finally {
272
271
  this.container.logger = previousLogger;
273
272
  }
273
+ for (const id of autowireAliasIds) {
274
+ this.aliases.delete(id);
275
+ }
274
276
  }
275
277
  registerParentAliases() {
276
278
  for (const [id, definition] of this.definitions.entries()) {
@@ -283,13 +285,12 @@ var DependencyInjection = class _DependencyInjection {
283
285
  async compile() {
284
286
  if (this.options.containerBuild) {
285
287
  await this.ensureFolderExists(this.options.servicesYamlPath);
286
- this.autowire = new import_node_dependency_injection.Autowire(this.container);
287
- this.autowire.makeIdLegacy();
288
- this.autowire.serviceFile = new import_node_dependency_injection.ServiceFile(
288
+ const autowire = new import_node_dependency_injection.Autowire(this.container);
289
+ autowire.serviceFile = new import_node_dependency_injection.ServiceFile(
289
290
  this.options.servicesYamlPath,
290
291
  false
291
292
  );
292
- await this.processAutowire();
293
+ await this.processAutowire(autowire);
293
294
  } else {
294
295
  this.loader = new import_node_dependency_injection.YamlFileLoader(this.container);
295
296
  await this.loader.load(this.options.servicesYamlPath);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/infrastructure/dependency-injection/index.ts","../../../src/infrastructure/dependency-injection/AutowireWarningFilter.ts","../../../src/infrastructure/dependency-injection/DependencyInjection.ts"],"sourcesContent":["export * from './AutowireWarningFilter.js';\nexport * from './ClassDependencyOverride.js';\nexport * from './ContainerDefinition.js';\nexport * from './ContainerInternals.js';\nexport * from './DefinitionMetadata.js';\nexport * from './DependencyAlias.js';\nexport * from './DependencyInjection.js';\nexport * from './DependencyInjectionOptions.js';\nexport * from './DependencyOverride.js';\nexport * from './DependencyOverrideFactory.js';\nexport * from './DependencyOverrideToken.js';\nexport * from './ExplicitServiceClass.js';\nexport * from './ExplicitServiceDefinition.js';\nexport * from './FactoryDependencyOverride.js';\nexport * from './ServiceClass.js';\nexport * from './ValueDependencyOverride.js';\n","import type { Logger } from 'node-dependency-injection';\n\nexport class AutowireWarningFilter implements Logger {\n constructor(private readonly logger: Logger) {}\n\n private isIgnorableAutowireWarning(message: string): boolean {\n return (\n message.startsWith(\n 'Autowire: file has export default declaration but no runtime default export:',\n ) ||\n message.startsWith('Autowire: failed to create definition for undefined:')\n );\n }\n\n public warn(message?: unknown, ...optionalParams: unknown[]): void {\n if (\n typeof message === 'string' &&\n this.isIgnorableAutowireWarning(message)\n ) {\n this.logger.debug?.(`Ignored ${message}`, ...optionalParams);\n\n return;\n }\n\n this.logger.warn(message, ...optionalParams);\n }\n\n public info(message?: unknown, ...optionalParams: unknown[]): void {\n this.logger.info?.(message, ...optionalParams);\n }\n\n public debug(message?: unknown, ...optionalParams: unknown[]): void {\n this.logger.debug?.(message, ...optionalParams);\n }\n}\n","import fs from 'fs-extra';\nimport {\n Autowire,\n ContainerBuilder,\n ServiceFile,\n YamlFileLoader,\n} from 'node-dependency-injection';\nimport path from 'node:path';\n\nimport type { ServiceResolver } from '../../contracts/index.js';\nimport type { ContainerInternals } from './ContainerInternals.js';\nimport type { DefinitionMetadata } from './DefinitionMetadata.js';\nimport type { DependencyInjectionOptions } from './DependencyInjectionOptions.js';\nimport type { DependencyOverride } from './DependencyOverride.js';\n\nimport { AutowireWarningFilter } from './AutowireWarningFilter.js';\n\nexport class DependencyInjection implements ServiceResolver {\n private static configuredInstance: DependencyInjection | undefined;\n private autowire: Autowire | undefined;\n private loader: YamlFileLoader | undefined;\n private readonly container: ContainerBuilder;\n private readonly overrideTokenIds = new Map<unknown, string>();\n\n public static configure(\n options: DependencyInjectionOptions,\n ): DependencyInjection {\n DependencyInjection.configuredInstance = new DependencyInjection(options);\n\n return DependencyInjection.configuredInstance;\n }\n\n public static get instance(): DependencyInjection {\n if (!DependencyInjection.configuredInstance) {\n throw new Error('DependencyInjection has not been configured.');\n }\n\n return DependencyInjection.configuredInstance;\n }\n\n constructor(\n private readonly options: DependencyInjectionOptions = {\n containerBuild: process.env.CONTAINER_BUILD === 'true',\n servicesYamlPath: path.resolve(\n process.cwd(),\n 'config',\n 'container',\n 'services.yaml',\n ),\n sourceDirectory: path.resolve(process.cwd(), 'src'),\n },\n ) {\n this.container = new ContainerBuilder(false, this.options.sourceDirectory);\n }\n\n private get definitions(): Map<string, DefinitionMetadata> {\n const container = this.container as unknown as ContainerInternals;\n\n return container._definitions || new Map();\n }\n\n private get aliases(): Map<string, string> {\n const container = this.container as unknown as ContainerInternals;\n\n return container._alias || new Map();\n }\n\n private async ensureFolderExists(filePath: string): Promise<void> {\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n }\n\n private getServiceClassName(serviceName: unknown): string | undefined {\n return typeof serviceName === 'function' ? serviceName.name : undefined;\n }\n\n private getOverrideId(prefix: string, token: unknown): string {\n const tokenName = this.getServiceClassName(token) ?? String(token);\n\n return `ddd-kernel.override.${prefix}.${tokenName}`;\n }\n\n private hasDirectService(serviceName: unknown): boolean {\n return (\n typeof serviceName === 'string' &&\n (this.definitions.has(serviceName) || this.aliases.has(serviceName))\n );\n }\n\n private ensureSyntheticService(id: string, value: unknown): void {\n const definition = this.container.register(id);\n\n definition.public = true;\n definition.synthetic = true;\n this.container.set(id, value);\n }\n\n private parentMatchesService(\n parentId: string | null | undefined,\n serviceClassName: string,\n ): boolean {\n if (!parentId) {\n return false;\n }\n\n const parentName = Buffer.from(parentId, 'base64').toString('utf8');\n\n return parentName.endsWith(`__${serviceClassName}__${serviceClassName}`);\n }\n\n private serviceIdMatchesService(\n serviceId: string,\n serviceClassName: string,\n ): boolean {\n const serviceName = Buffer.from(serviceId, 'base64').toString('utf8');\n\n return serviceName.endsWith(`__${serviceClassName}__${serviceClassName}`);\n }\n\n private serviceIdReferencesService(\n serviceId: string,\n serviceClassName: string,\n ): boolean {\n const serviceName = Buffer.from(serviceId, 'base64').toString('utf8');\n\n return serviceName.endsWith(`__${serviceClassName}`);\n }\n\n private getReferenceId(value: unknown): string | undefined {\n if (\n typeof value === 'object' &&\n value !== null &&\n 'id' in value &&\n typeof value.id === 'string'\n ) {\n return value.id;\n }\n\n return undefined;\n }\n\n private getDefinitionArgumentReferences(\n definition: DefinitionMetadata,\n ): string[] {\n return [\n ...(definition._args ?? []),\n ...(definition._appendArgs ?? []),\n ...(definition._overrideArgs ?? []),\n ].flatMap((argument) => {\n const referenceId = this.getReferenceId(argument);\n\n return referenceId ? [referenceId] : [];\n });\n }\n\n private findConcreteChildServiceId(serviceName: unknown): string | undefined {\n const serviceClassName = this.getServiceClassName(serviceName);\n\n if (!serviceClassName) {\n return undefined;\n }\n\n const matches = [...this.definitions.entries()]\n .filter(([, definition]) => definition._abstract !== true)\n .filter(([, definition]) =>\n this.parentMatchesService(definition._parent, serviceClassName),\n )\n .map(([id]) => id);\n\n return matches[matches.length - 1];\n }\n\n private findRegisteredServiceId(serviceName: unknown): string | undefined {\n const serviceClassName = this.getServiceClassName(serviceName);\n\n if (!serviceClassName) {\n return undefined;\n }\n\n const matches = [...this.definitions.keys()].filter((id) =>\n this.serviceIdMatchesService(id, serviceClassName),\n );\n\n return matches[matches.length - 1];\n }\n\n private findAliasServiceId(serviceName: unknown): string | undefined {\n const serviceClassName = this.getServiceClassName(serviceName);\n\n if (!serviceClassName) {\n return undefined;\n }\n\n const matches = [...this.aliases.keys()].filter((id) =>\n this.serviceIdMatchesService(id, serviceClassName),\n );\n\n return matches[matches.length - 1];\n }\n\n private findReferencedServiceIds(serviceName: unknown): string[] {\n const serviceClassName = this.getServiceClassName(serviceName);\n\n if (!serviceClassName) {\n return [];\n }\n\n return [\n ...new Set(\n [...this.definitions.values()]\n .flatMap((definition) =>\n this.getDefinitionArgumentReferences(definition),\n )\n .filter((id) =>\n this.serviceIdReferencesService(id, serviceClassName),\n ),\n ),\n ];\n }\n\n private getOverrideTokenIds(token: unknown): string[] {\n const tokenIds = [\n this.findRegisteredServiceId(token),\n this.findAliasServiceId(token),\n ...this.findReferencedServiceIds(token),\n ].filter((id): id is string => id !== undefined);\n const existingTokenIds = [...new Set(tokenIds)];\n\n if (existingTokenIds.length > 0) {\n return existingTokenIds;\n }\n\n const overrideTokenId = this.getOverrideId('token', token);\n\n this.ensureSyntheticService(overrideTokenId, undefined);\n\n return [overrideTokenId];\n }\n\n private getOverrideClassServiceId(\n ClassDefinition: new () => unknown,\n ): string {\n const registeredServiceId = this.findRegisteredServiceId(ClassDefinition);\n\n if (registeredServiceId) {\n return registeredServiceId;\n }\n\n const overrideClassId = this.getOverrideId('class', ClassDefinition);\n\n this.container.register(overrideClassId, ClassDefinition);\n\n return overrideClassId;\n }\n\n private applyClassOverride(override: DependencyOverride): void {\n if (!('useClass' in override)) {\n return;\n }\n\n const tokenIds = this.getOverrideTokenIds(override.token);\n const classId = this.getOverrideClassServiceId(override.useClass);\n\n this.overrideTokenIds.set(override.token, tokenIds[0]);\n for (const tokenId of tokenIds) {\n this.container.setAlias(tokenId, classId);\n }\n }\n\n private applyFactoryOverride(override: DependencyOverride): void {\n if (!('useFactory' in override)) {\n return;\n }\n\n const tokenIds = this.getOverrideTokenIds(override.token);\n const factoryId = this.getOverrideId('factory', override.token);\n\n this.ensureSyntheticService(factoryId, override.useFactory(this));\n this.overrideTokenIds.set(override.token, tokenIds[0]);\n for (const tokenId of tokenIds) {\n this.container.setAlias(tokenId, factoryId);\n }\n }\n\n private applyValueOverride(override: DependencyOverride): void {\n if (!('useValue' in override)) {\n return;\n }\n\n const tokenIds = this.getOverrideTokenIds(override.token);\n const valueId = this.getOverrideId('value', override.token);\n\n this.ensureSyntheticService(valueId, override.useValue);\n this.overrideTokenIds.set(override.token, tokenIds[0]);\n for (const tokenId of tokenIds) {\n this.container.setAlias(tokenId, valueId);\n }\n }\n\n private applyOverrides(): void {\n for (const override of this.options.overrides ?? []) {\n this.applyClassOverride(override);\n this.applyFactoryOverride(override);\n this.applyValueOverride(override);\n }\n }\n\n private async processAutowire(): Promise<void> {\n const previousLogger = this.container.logger;\n\n this.container.logger = new AutowireWarningFilter(previousLogger);\n\n try {\n await this.autowire?.process();\n } finally {\n this.container.logger = previousLogger;\n }\n }\n\n private registerParentAliases(): void {\n for (const [id, definition] of this.definitions.entries()) {\n if (definition._abstract === true || !definition._parent) {\n continue;\n }\n\n this.container.setAlias(definition._parent, id);\n }\n }\n\n public async compile(): Promise<void> {\n if (this.options.containerBuild) {\n await this.ensureFolderExists(this.options.servicesYamlPath);\n this.autowire = new Autowire(this.container);\n this.autowire.makeIdLegacy();\n this.autowire.serviceFile = new ServiceFile(\n this.options.servicesYamlPath,\n false,\n );\n await this.processAutowire();\n } else {\n this.loader = new YamlFileLoader(this.container);\n await this.loader.load(this.options.servicesYamlPath);\n }\n\n this.registerParentAliases();\n this.applyOverrides();\n await this.container.compile();\n }\n\n public getService<T>(serviceName: unknown): T {\n const overrideTokenId = this.overrideTokenIds.get(serviceName);\n\n if (overrideTokenId) {\n return this.container.get<T>(overrideTokenId);\n }\n\n const aliasServiceId = this.findAliasServiceId(serviceName);\n\n if (aliasServiceId) {\n return this.container.get<T>(aliasServiceId);\n }\n\n const childServiceId = this.findConcreteChildServiceId(serviceName);\n\n if (childServiceId) {\n return this.container.get<T>(childServiceId);\n }\n\n const registeredServiceId = this.findRegisteredServiceId(serviceName);\n\n if (registeredServiceId) {\n return this.container.get<T>(registeredServiceId);\n }\n\n // NDI 4 types only string IDs, but still resolves constructors and validates other tokens at runtime.\n return this.container.get<T>(serviceName as string);\n }\n\n public hasService(serviceName: unknown): boolean {\n return (\n this.overrideTokenIds.has(serviceName) ||\n this.findAliasServiceId(serviceName) !== undefined ||\n this.findConcreteChildServiceId(serviceName) !== undefined ||\n this.findRegisteredServiceId(serviceName) !== undefined ||\n this.hasDirectService(serviceName)\n );\n }\n}\n\nexport default DependencyInjection;\n"],"mappings":"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","names":["path","fs"]}
1
+ {"version":3,"sources":["../../../src/infrastructure/dependency-injection/index.ts","../../../src/infrastructure/dependency-injection/AutowireWarningFilter.ts","../../../src/infrastructure/dependency-injection/DependencyInjection.ts"],"sourcesContent":["export * from './AutowireInternals.js';\nexport * from './AutowireWarningFilter.js';\nexport * from './ClassDependencyOverride.js';\nexport * from './ContainerDefinition.js';\nexport * from './ContainerInternals.js';\nexport * from './DefinitionMetadata.js';\nexport * from './DependencyAlias.js';\nexport * from './DependencyInjection.js';\nexport * from './DependencyInjectionOptions.js';\nexport * from './DependencyOverride.js';\nexport * from './DependencyOverrideFactory.js';\nexport * from './DependencyOverrideToken.js';\nexport * from './ExplicitServiceClass.js';\nexport * from './ExplicitServiceDefinition.js';\nexport * from './FactoryDependencyOverride.js';\nexport * from './ServiceClass.js';\nexport * from './ValueDependencyOverride.js';\n","import type { Logger } from 'node-dependency-injection';\n\nexport class AutowireWarningFilter implements Logger {\n constructor(private readonly logger: Logger) {}\n\n private isIgnorableAutowireWarning(message: string): boolean {\n return (\n message.startsWith(\n 'Autowire: file has export default declaration but no runtime default export:',\n ) ||\n message.startsWith('Autowire: failed to create definition for undefined:')\n );\n }\n\n public warn(message?: unknown, ...optionalParams: unknown[]): void {\n if (\n typeof message === 'string' &&\n this.isIgnorableAutowireWarning(message)\n ) {\n this.logger.debug?.(`Ignored ${message}`, ...optionalParams);\n\n return;\n }\n\n this.logger.warn(message, ...optionalParams);\n }\n\n public info(message?: unknown, ...optionalParams: unknown[]): void {\n this.logger.info?.(message, ...optionalParams);\n }\n\n public debug(message?: unknown, ...optionalParams: unknown[]): void {\n this.logger.debug?.(message, ...optionalParams);\n }\n}\n","import fs from 'fs-extra';\nimport {\n Autowire,\n ContainerBuilder,\n ServiceFile,\n YamlFileLoader,\n} from 'node-dependency-injection';\nimport path from 'node:path';\n\nimport type { ServiceResolver } from '../../contracts/index.js';\nimport type { AutowireInternals } from './AutowireInternals.js';\nimport type { ContainerInternals } from './ContainerInternals.js';\nimport type { DefinitionMetadata } from './DefinitionMetadata.js';\nimport type { DependencyInjectionOptions } from './DependencyInjectionOptions.js';\nimport type { DependencyOverride } from './DependencyOverride.js';\n\nimport { AutowireWarningFilter } from './AutowireWarningFilter.js';\n\nexport class DependencyInjection implements ServiceResolver {\n private static configuredInstance: DependencyInjection | undefined;\n private loader: YamlFileLoader | undefined;\n private readonly container: ContainerBuilder;\n private readonly overrideTokenIds = new Map<unknown, string>();\n\n public static configure(\n options: DependencyInjectionOptions,\n ): DependencyInjection {\n DependencyInjection.configuredInstance = new DependencyInjection(options);\n\n return DependencyInjection.configuredInstance;\n }\n\n public static get instance(): DependencyInjection {\n if (!DependencyInjection.configuredInstance) {\n throw new Error('DependencyInjection has not been configured.');\n }\n\n return DependencyInjection.configuredInstance;\n }\n\n constructor(\n private readonly options: DependencyInjectionOptions = {\n containerBuild: process.env.CONTAINER_BUILD === 'true',\n servicesYamlPath: path.resolve(\n process.cwd(),\n 'config',\n 'container',\n 'services.yaml',\n ),\n sourceDirectory: path.resolve(process.cwd(), 'src'),\n },\n ) {\n this.container = new ContainerBuilder(false, this.options.sourceDirectory);\n }\n\n private get definitions(): Map<string, DefinitionMetadata> {\n const container = this.container as unknown as ContainerInternals;\n\n return container._definitions || new Map();\n }\n\n private get aliases(): Map<string, string> {\n const container = this.container as unknown as ContainerInternals;\n\n return container._alias || new Map();\n }\n\n private async ensureFolderExists(filePath: string): Promise<void> {\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n }\n\n private getServiceClassName(serviceName: unknown): string | undefined {\n return typeof serviceName === 'function' ? serviceName.name : undefined;\n }\n\n private getOverrideId(prefix: string, token: unknown): string {\n const tokenName = this.getServiceClassName(token) ?? String(token);\n\n return `ddd-kernel.override.${prefix}.${tokenName}`;\n }\n\n private hasDirectService(serviceName: unknown): boolean {\n return (\n typeof serviceName === 'string' &&\n (this.definitions.has(serviceName) || this.aliases.has(serviceName))\n );\n }\n\n private ensureSyntheticService(id: string, value: unknown): void {\n const definition = this.container.register(id);\n\n definition.public = true;\n definition.synthetic = true;\n this.container.set(id, value);\n }\n\n private idNamesService(id: string, serviceClassName: string): boolean {\n return path.posix.basename(id) === serviceClassName;\n }\n\n private getReferenceId(value: unknown): string | undefined {\n if (\n typeof value === 'object' &&\n value !== null &&\n 'id' in value &&\n typeof value.id === 'string'\n ) {\n return value.id;\n }\n\n return undefined;\n }\n\n private getDefinitionArgumentReferences(\n definition: DefinitionMetadata,\n ): string[] {\n return [\n ...(definition._args ?? []),\n ...(definition._appendArgs ?? []),\n ...(definition._overrideArgs ?? []),\n ].flatMap((argument) => {\n const referenceId = this.getReferenceId(argument);\n\n return referenceId ? [referenceId] : [];\n });\n }\n\n private findConcreteChildServiceId(serviceName: unknown): string | undefined {\n const serviceClassName = this.getServiceClassName(serviceName);\n\n if (!serviceClassName) {\n return undefined;\n }\n\n const matches = [...this.definitions.entries()]\n .filter(([, definition]) => definition._abstract !== true)\n .filter(\n ([, definition]) =>\n definition._parent &&\n this.idNamesService(definition._parent, serviceClassName),\n )\n .map(([id]) => id);\n\n return matches[matches.length - 1];\n }\n\n private findRegisteredServiceId(serviceName: unknown): string | undefined {\n const serviceClassName = this.getServiceClassName(serviceName);\n\n if (!serviceClassName) {\n return undefined;\n }\n\n const matches = [...this.definitions.keys()].filter((id) =>\n this.idNamesService(id, serviceClassName),\n );\n\n return matches[matches.length - 1];\n }\n\n private findAliasServiceId(serviceName: unknown): string | undefined {\n const serviceClassName = this.getServiceClassName(serviceName);\n\n if (!serviceClassName) {\n return undefined;\n }\n\n const matches = [...this.aliases.keys()].filter((id) =>\n this.idNamesService(id, serviceClassName),\n );\n\n return matches[matches.length - 1];\n }\n\n private findReferencedServiceIds(serviceName: unknown): string[] {\n const serviceClassName = this.getServiceClassName(serviceName);\n\n if (!serviceClassName) {\n return [];\n }\n\n return [\n ...new Set(\n [...this.definitions.values()]\n .flatMap((definition) =>\n this.getDefinitionArgumentReferences(definition),\n )\n .filter((id) => this.idNamesService(id, serviceClassName)),\n ),\n ];\n }\n\n private getOverrideTokenIds(token: unknown): string[] {\n const tokenIds = [\n this.findRegisteredServiceId(token),\n this.findAliasServiceId(token),\n ...this.findReferencedServiceIds(token),\n ].filter((id): id is string => id !== undefined);\n const existingTokenIds = [...new Set(tokenIds)];\n\n if (existingTokenIds.length > 0) {\n return existingTokenIds;\n }\n\n const overrideTokenId = this.getOverrideId('token', token);\n\n this.ensureSyntheticService(overrideTokenId, undefined);\n\n return [overrideTokenId];\n }\n\n private getOverrideClassServiceId(\n ClassDefinition: new () => unknown,\n ): string {\n const registeredServiceId = this.findRegisteredServiceId(ClassDefinition);\n\n if (registeredServiceId) {\n return registeredServiceId;\n }\n\n const overrideClassId = this.getOverrideId('class', ClassDefinition);\n\n this.container.register(overrideClassId, ClassDefinition);\n\n return overrideClassId;\n }\n\n private applyClassOverride(override: DependencyOverride): void {\n if (!('useClass' in override)) {\n return;\n }\n\n const tokenIds = this.getOverrideTokenIds(override.token);\n const classId = this.getOverrideClassServiceId(override.useClass);\n\n this.overrideTokenIds.set(override.token, tokenIds[0]);\n for (const tokenId of tokenIds) {\n this.container.setAlias(tokenId, classId);\n }\n }\n\n private applyFactoryOverride(override: DependencyOverride): void {\n if (!('useFactory' in override)) {\n return;\n }\n\n const tokenIds = this.getOverrideTokenIds(override.token);\n const factoryId = this.getOverrideId('factory', override.token);\n\n this.ensureSyntheticService(factoryId, override.useFactory(this));\n this.overrideTokenIds.set(override.token, tokenIds[0]);\n for (const tokenId of tokenIds) {\n this.container.setAlias(tokenId, factoryId);\n }\n }\n\n private applyValueOverride(override: DependencyOverride): void {\n if (!('useValue' in override)) {\n return;\n }\n\n const tokenIds = this.getOverrideTokenIds(override.token);\n const valueId = this.getOverrideId('value', override.token);\n\n this.ensureSyntheticService(valueId, override.useValue);\n this.overrideTokenIds.set(override.token, tokenIds[0]);\n for (const tokenId of tokenIds) {\n this.container.setAlias(tokenId, valueId);\n }\n }\n\n private applyOverrides(): void {\n for (const override of this.options.overrides ?? []) {\n this.applyClassOverride(override);\n this.applyFactoryOverride(override);\n this.applyValueOverride(override);\n }\n }\n\n private trackAutowireAliasIds(autowire: Autowire): Set<string> {\n const internals = autowire as unknown as AutowireInternals;\n const createLegacyServiceId = internals._getLegacyServiceId.bind(autowire);\n const aliasIds = new Set<string>();\n\n internals._getLegacyServiceId = async (...args) => {\n const id = await createLegacyServiceId(...args);\n\n if (!this.container.hasAlias(id) && !this.container.hasDefinition(id)) {\n aliasIds.add(id);\n }\n\n return id;\n };\n\n return aliasIds;\n }\n\n private async processAutowire(autowire: Autowire): Promise<void> {\n const previousLogger = this.container.logger;\n const autowireAliasIds = this.trackAutowireAliasIds(autowire);\n\n this.container.logger = new AutowireWarningFilter(previousLogger);\n\n try {\n await autowire.process();\n } finally {\n this.container.logger = previousLogger;\n }\n\n for (const id of autowireAliasIds) {\n this.aliases.delete(id);\n }\n }\n\n private registerParentAliases(): void {\n for (const [id, definition] of this.definitions.entries()) {\n if (definition._abstract === true || !definition._parent) {\n continue;\n }\n\n this.container.setAlias(definition._parent, id);\n }\n }\n\n public async compile(): Promise<void> {\n if (this.options.containerBuild) {\n await this.ensureFolderExists(this.options.servicesYamlPath);\n const autowire = new Autowire(this.container);\n\n autowire.serviceFile = new ServiceFile(\n this.options.servicesYamlPath,\n false,\n );\n await this.processAutowire(autowire);\n } else {\n this.loader = new YamlFileLoader(this.container);\n await this.loader.load(this.options.servicesYamlPath);\n }\n\n this.registerParentAliases();\n this.applyOverrides();\n await this.container.compile();\n }\n\n public getService<T>(serviceName: unknown): T {\n const overrideTokenId = this.overrideTokenIds.get(serviceName);\n\n if (overrideTokenId) {\n return this.container.get<T>(overrideTokenId);\n }\n\n const aliasServiceId = this.findAliasServiceId(serviceName);\n\n if (aliasServiceId) {\n return this.container.get<T>(aliasServiceId);\n }\n\n const childServiceId = this.findConcreteChildServiceId(serviceName);\n\n if (childServiceId) {\n return this.container.get<T>(childServiceId);\n }\n\n const registeredServiceId = this.findRegisteredServiceId(serviceName);\n\n if (registeredServiceId) {\n return this.container.get<T>(registeredServiceId);\n }\n\n // NDI 4 types only string IDs, but still resolves constructors and validates other tokens at runtime.\n return this.container.get<T>(serviceName as string);\n }\n\n public hasService(serviceName: unknown): boolean {\n return (\n this.overrideTokenIds.has(serviceName) ||\n this.findAliasServiceId(serviceName) !== undefined ||\n this.findConcreteChildServiceId(serviceName) !== undefined ||\n this.findRegisteredServiceId(serviceName) !== undefined ||\n this.hasDirectService(serviceName)\n );\n }\n}\n\nexport default DependencyInjection;\n"],"mappings":"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","names":["path","fs"]}
@@ -1,7 +1,11 @@
1
1
  import { Logger } from 'node-dependency-injection';
2
- export { C as ClassDependencyOverride, D as DependencyInjection, a as DependencyInjectionOptions, b as DependencyOverride, c as DependencyOverrideFactory, d as DependencyOverrideToken, F as FactoryDependencyOverride, S as ServiceClass, V as ValueDependencyOverride } from '../../ServiceClass-D_0gCcMr.cjs';
2
+ export { C as ClassDependencyOverride, D as DependencyInjection, a as DependencyInjectionOptions, b as DependencyOverride, c as DependencyOverrideFactory, d as DependencyOverrideToken, F as FactoryDependencyOverride, S as ServiceClass, V as ValueDependencyOverride } from '../../ServiceClass-U0Vk46dN.cjs';
3
3
  import '../../ServiceResolver-CQGmbk-X.cjs';
4
4
 
5
+ type AutowireInternals = {
6
+ _getLegacyServiceId: (...args: unknown[]) => Promise<string>;
7
+ };
8
+
5
9
  declare class AutowireWarningFilter implements Logger {
6
10
  private readonly logger;
7
11
  constructor(logger: Logger);
@@ -40,4 +44,4 @@ interface ExplicitServiceDefinition {
40
44
  readonly sourcePath: string;
41
45
  }
42
46
 
43
- export { AutowireWarningFilter, type ContainerDefinition, type ContainerInternals, type DefinitionMetadata, type DependencyAlias, type ExplicitServiceClass, type ExplicitServiceDefinition };
47
+ export { type AutowireInternals, AutowireWarningFilter, type ContainerDefinition, type ContainerInternals, type DefinitionMetadata, type DependencyAlias, type ExplicitServiceClass, type ExplicitServiceDefinition };
@@ -1,7 +1,11 @@
1
1
  import { Logger } from 'node-dependency-injection';
2
- export { C as ClassDependencyOverride, D as DependencyInjection, a as DependencyInjectionOptions, b as DependencyOverride, c as DependencyOverrideFactory, d as DependencyOverrideToken, F as FactoryDependencyOverride, S as ServiceClass, V as ValueDependencyOverride } from '../../ServiceClass-IInu6j5L.js';
2
+ export { C as ClassDependencyOverride, D as DependencyInjection, a as DependencyInjectionOptions, b as DependencyOverride, c as DependencyOverrideFactory, d as DependencyOverrideToken, F as FactoryDependencyOverride, S as ServiceClass, V as ValueDependencyOverride } from '../../ServiceClass-C-ZCUQWE.js';
3
3
  import '../../ServiceResolver-CQGmbk-X.js';
4
4
 
5
+ type AutowireInternals = {
6
+ _getLegacyServiceId: (...args: unknown[]) => Promise<string>;
7
+ };
8
+
5
9
  declare class AutowireWarningFilter implements Logger {
6
10
  private readonly logger;
7
11
  constructor(logger: Logger);
@@ -40,4 +44,4 @@ interface ExplicitServiceDefinition {
40
44
  readonly sourcePath: string;
41
45
  }
42
46
 
43
- export { AutowireWarningFilter, type ContainerDefinition, type ContainerInternals, type DefinitionMetadata, type DependencyAlias, type ExplicitServiceClass, type ExplicitServiceDefinition };
47
+ export { type AutowireInternals, AutowireWarningFilter, type ContainerDefinition, type ContainerInternals, type DefinitionMetadata, type DependencyAlias, type ExplicitServiceClass, type ExplicitServiceDefinition };
@@ -49,7 +49,6 @@ var DependencyInjection = class _DependencyInjection {
49
49
  }
50
50
  options;
51
51
  static configuredInstance;
52
- autowire;
53
52
  loader;
54
53
  container;
55
54
  overrideTokenIds = /* @__PURE__ */ new Map();
@@ -90,20 +89,8 @@ var DependencyInjection = class _DependencyInjection {
90
89
  definition.synthetic = true;
91
90
  this.container.set(id, value);
92
91
  }
93
- parentMatchesService(parentId, serviceClassName) {
94
- if (!parentId) {
95
- return false;
96
- }
97
- const parentName = Buffer.from(parentId, "base64").toString("utf8");
98
- return parentName.endsWith(`__${serviceClassName}__${serviceClassName}`);
99
- }
100
- serviceIdMatchesService(serviceId, serviceClassName) {
101
- const serviceName = Buffer.from(serviceId, "base64").toString("utf8");
102
- return serviceName.endsWith(`__${serviceClassName}__${serviceClassName}`);
103
- }
104
- serviceIdReferencesService(serviceId, serviceClassName) {
105
- const serviceName = Buffer.from(serviceId, "base64").toString("utf8");
106
- return serviceName.endsWith(`__${serviceClassName}`);
92
+ idNamesService(id, serviceClassName) {
93
+ return path.posix.basename(id) === serviceClassName;
107
94
  }
108
95
  getReferenceId(value) {
109
96
  if (typeof value === "object" && value !== null && "id" in value && typeof value.id === "string") {
@@ -127,7 +114,7 @@ var DependencyInjection = class _DependencyInjection {
127
114
  return void 0;
128
115
  }
129
116
  const matches = [...this.definitions.entries()].filter(([, definition]) => definition._abstract !== true).filter(
130
- ([, definition]) => this.parentMatchesService(definition._parent, serviceClassName)
117
+ ([, definition]) => definition._parent && this.idNamesService(definition._parent, serviceClassName)
131
118
  ).map(([id]) => id);
132
119
  return matches[matches.length - 1];
133
120
  }
@@ -137,7 +124,7 @@ var DependencyInjection = class _DependencyInjection {
137
124
  return void 0;
138
125
  }
139
126
  const matches = [...this.definitions.keys()].filter(
140
- (id) => this.serviceIdMatchesService(id, serviceClassName)
127
+ (id) => this.idNamesService(id, serviceClassName)
141
128
  );
142
129
  return matches[matches.length - 1];
143
130
  }
@@ -147,7 +134,7 @@ var DependencyInjection = class _DependencyInjection {
147
134
  return void 0;
148
135
  }
149
136
  const matches = [...this.aliases.keys()].filter(
150
- (id) => this.serviceIdMatchesService(id, serviceClassName)
137
+ (id) => this.idNamesService(id, serviceClassName)
151
138
  );
152
139
  return matches[matches.length - 1];
153
140
  }
@@ -160,9 +147,7 @@ var DependencyInjection = class _DependencyInjection {
160
147
  ...new Set(
161
148
  [...this.definitions.values()].flatMap(
162
149
  (definition) => this.getDefinitionArgumentReferences(definition)
163
- ).filter(
164
- (id) => this.serviceIdReferencesService(id, serviceClassName)
165
- )
150
+ ).filter((id) => this.idNamesService(id, serviceClassName))
166
151
  )
167
152
  ];
168
153
  }
@@ -231,14 +216,31 @@ var DependencyInjection = class _DependencyInjection {
231
216
  this.applyValueOverride(override);
232
217
  }
233
218
  }
234
- async processAutowire() {
219
+ trackAutowireAliasIds(autowire) {
220
+ const internals = autowire;
221
+ const createLegacyServiceId = internals._getLegacyServiceId.bind(autowire);
222
+ const aliasIds = /* @__PURE__ */ new Set();
223
+ internals._getLegacyServiceId = async (...args) => {
224
+ const id = await createLegacyServiceId(...args);
225
+ if (!this.container.hasAlias(id) && !this.container.hasDefinition(id)) {
226
+ aliasIds.add(id);
227
+ }
228
+ return id;
229
+ };
230
+ return aliasIds;
231
+ }
232
+ async processAutowire(autowire) {
235
233
  const previousLogger = this.container.logger;
234
+ const autowireAliasIds = this.trackAutowireAliasIds(autowire);
236
235
  this.container.logger = new AutowireWarningFilter(previousLogger);
237
236
  try {
238
- await this.autowire?.process();
237
+ await autowire.process();
239
238
  } finally {
240
239
  this.container.logger = previousLogger;
241
240
  }
241
+ for (const id of autowireAliasIds) {
242
+ this.aliases.delete(id);
243
+ }
242
244
  }
243
245
  registerParentAliases() {
244
246
  for (const [id, definition] of this.definitions.entries()) {
@@ -251,13 +253,12 @@ var DependencyInjection = class _DependencyInjection {
251
253
  async compile() {
252
254
  if (this.options.containerBuild) {
253
255
  await this.ensureFolderExists(this.options.servicesYamlPath);
254
- this.autowire = new Autowire(this.container);
255
- this.autowire.makeIdLegacy();
256
- this.autowire.serviceFile = new ServiceFile(
256
+ const autowire = new Autowire(this.container);
257
+ autowire.serviceFile = new ServiceFile(
257
258
  this.options.servicesYamlPath,
258
259
  false
259
260
  );
260
- await this.processAutowire();
261
+ await this.processAutowire(autowire);
261
262
  } else {
262
263
  this.loader = new YamlFileLoader(this.container);
263
264
  await this.loader.load(this.options.servicesYamlPath);