@navios/di 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/CHANGELOG.md +146 -0
  2. package/README.md +196 -219
  3. package/docs/README.md +69 -11
  4. package/docs/api-reference.md +281 -117
  5. package/docs/container.md +220 -56
  6. package/docs/examples/request-scope-example.mts +2 -2
  7. package/docs/factory.md +3 -8
  8. package/docs/getting-started.md +37 -8
  9. package/docs/migration.md +318 -37
  10. package/docs/request-contexts.md +263 -175
  11. package/docs/scopes.md +79 -42
  12. package/lib/browser/index.d.mts +1577 -0
  13. package/lib/browser/index.d.mts.map +1 -0
  14. package/lib/browser/index.mjs +3012 -0
  15. package/lib/browser/index.mjs.map +1 -0
  16. package/lib/index-S_qX2VLI.d.mts +1211 -0
  17. package/lib/index-S_qX2VLI.d.mts.map +1 -0
  18. package/lib/index-fKPuT65j.d.cts +1206 -0
  19. package/lib/index-fKPuT65j.d.cts.map +1 -0
  20. package/lib/index.cjs +389 -0
  21. package/lib/index.cjs.map +1 -0
  22. package/lib/index.d.cts +376 -0
  23. package/lib/index.d.cts.map +1 -0
  24. package/lib/index.d.mts +371 -78
  25. package/lib/index.d.mts.map +1 -0
  26. package/lib/index.mjs +325 -63
  27. package/lib/index.mjs.map +1 -1
  28. package/lib/testing/index.cjs +9 -0
  29. package/lib/testing/index.d.cts +2 -0
  30. package/lib/testing/index.d.mts +2 -2
  31. package/lib/testing/index.mjs +2 -72
  32. package/lib/testing-BMGmmxH7.cjs +2895 -0
  33. package/lib/testing-BMGmmxH7.cjs.map +1 -0
  34. package/lib/testing-DCXz8AJD.mjs +2655 -0
  35. package/lib/testing-DCXz8AJD.mjs.map +1 -0
  36. package/package.json +26 -4
  37. package/project.json +2 -2
  38. package/src/__tests__/async-local-storage.browser.spec.mts +240 -0
  39. package/src/__tests__/async-local-storage.spec.mts +333 -0
  40. package/src/__tests__/container.spec.mts +30 -25
  41. package/src/__tests__/e2e.browser.spec.mts +790 -0
  42. package/src/__tests__/e2e.spec.mts +1222 -0
  43. package/src/__tests__/errors.spec.mts +6 -6
  44. package/src/__tests__/factory.spec.mts +1 -1
  45. package/src/__tests__/get-injectors.spec.mts +1 -1
  46. package/src/__tests__/injectable.spec.mts +1 -1
  47. package/src/__tests__/injection-token.spec.mts +1 -1
  48. package/src/__tests__/library-findings.spec.mts +563 -0
  49. package/src/__tests__/registry.spec.mts +2 -2
  50. package/src/__tests__/request-scope.spec.mts +266 -274
  51. package/src/__tests__/service-instantiator.spec.mts +19 -17
  52. package/src/__tests__/service-locator-event-bus.spec.mts +9 -9
  53. package/src/__tests__/service-locator-manager.spec.mts +15 -15
  54. package/src/__tests__/service-locator.spec.mts +167 -244
  55. package/src/__tests__/unified-api.spec.mts +27 -27
  56. package/src/__type-tests__/factory.spec-d.mts +2 -2
  57. package/src/__type-tests__/inject.spec-d.mts +2 -2
  58. package/src/__type-tests__/injectable.spec-d.mts +1 -1
  59. package/src/browser.mts +16 -0
  60. package/src/container/container.mts +319 -0
  61. package/src/container/index.mts +2 -0
  62. package/src/container/scoped-container.mts +350 -0
  63. package/src/decorators/factory.decorator.mts +4 -4
  64. package/src/decorators/injectable.decorator.mts +5 -5
  65. package/src/errors/di-error.mts +13 -7
  66. package/src/errors/index.mts +0 -8
  67. package/src/index.mts +156 -15
  68. package/src/interfaces/container.interface.mts +82 -0
  69. package/src/interfaces/factory.interface.mts +2 -2
  70. package/src/interfaces/index.mts +1 -0
  71. package/src/internal/context/async-local-storage.mts +120 -0
  72. package/src/internal/context/factory-context.mts +18 -0
  73. package/src/internal/context/index.mts +3 -0
  74. package/src/{request-context-holder.mts → internal/context/request-context.mts} +40 -27
  75. package/src/internal/context/resolution-context.mts +63 -0
  76. package/src/internal/context/sync-local-storage.mts +51 -0
  77. package/src/internal/core/index.mts +5 -0
  78. package/src/internal/core/instance-resolver.mts +641 -0
  79. package/src/{service-instantiator.mts → internal/core/instantiator.mts} +31 -27
  80. package/src/internal/core/invalidator.mts +437 -0
  81. package/src/internal/core/service-locator.mts +202 -0
  82. package/src/{token-processor.mts → internal/core/token-processor.mts} +79 -60
  83. package/src/{base-instance-holder-manager.mts → internal/holder/base-holder-manager.mts} +91 -21
  84. package/src/internal/holder/holder-manager.mts +85 -0
  85. package/src/internal/holder/holder-storage.interface.mts +116 -0
  86. package/src/internal/holder/index.mts +6 -0
  87. package/src/internal/holder/instance-holder.mts +109 -0
  88. package/src/internal/holder/request-storage.mts +134 -0
  89. package/src/internal/holder/singleton-storage.mts +105 -0
  90. package/src/internal/index.mts +4 -0
  91. package/src/internal/lifecycle/circular-detector.mts +77 -0
  92. package/src/internal/lifecycle/index.mts +2 -0
  93. package/src/{service-locator-event-bus.mts → internal/lifecycle/lifecycle-event-bus.mts} +12 -5
  94. package/src/testing/__tests__/test-container.spec.mts +2 -2
  95. package/src/testing/test-container.mts +4 -4
  96. package/src/token/index.mts +2 -0
  97. package/src/{injection-token.mts → token/injection-token.mts} +1 -1
  98. package/src/{registry.mts → token/registry.mts} +1 -1
  99. package/src/utils/get-injectable-token.mts +1 -1
  100. package/src/utils/get-injectors.mts +32 -15
  101. package/src/utils/types.mts +1 -1
  102. package/tsdown.config.mts +67 -0
  103. package/lib/_tsup-dts-rollup.d.mts +0 -1283
  104. package/lib/_tsup-dts-rollup.d.ts +0 -1283
  105. package/lib/chunk-44F3LXW5.mjs +0 -2043
  106. package/lib/chunk-44F3LXW5.mjs.map +0 -1
  107. package/lib/index.d.ts +0 -78
  108. package/lib/index.js +0 -2127
  109. package/lib/index.js.map +0 -1
  110. package/lib/testing/index.d.ts +0 -2
  111. package/lib/testing/index.js +0 -2060
  112. package/lib/testing/index.js.map +0 -1
  113. package/lib/testing/index.mjs.map +0 -1
  114. package/src/container.mts +0 -227
  115. package/src/factory-context.mts +0 -8
  116. package/src/instance-resolver.mts +0 -559
  117. package/src/request-context-manager.mts +0 -149
  118. package/src/service-invalidator.mts +0 -429
  119. package/src/service-locator-instance-holder.mts +0 -70
  120. package/src/service-locator-manager.mts +0 -85
  121. package/src/service-locator.mts +0 -246
  122. package/tsup.config.mts +0 -12
  123. /package/src/{injector.mts → injectors.mts} +0 -0
package/lib/index.d.mts CHANGED
@@ -1,78 +1,371 @@
1
- export { Factory } from './_tsup-dts-rollup.mjs';
2
- export { FactoryOptions } from './_tsup-dts-rollup.mjs';
3
- export { Injectable } from './_tsup-dts-rollup.mjs';
4
- export { InjectableOptions } from './_tsup-dts-rollup.mjs';
5
- export { InjectableScope } from './_tsup-dts-rollup.mjs';
6
- export { InjectableType } from './_tsup-dts-rollup.mjs';
7
- export { FactoryNotFound } from './_tsup-dts-rollup.mjs';
8
- export { FactoryTokenNotResolved } from './_tsup-dts-rollup.mjs';
9
- export { InstanceDestroying } from './_tsup-dts-rollup.mjs';
10
- export { InstanceNotFound } from './_tsup-dts-rollup.mjs';
11
- export { UnknownError } from './_tsup-dts-rollup.mjs';
12
- export { ErrorsEnum } from './_tsup-dts-rollup.mjs';
13
- export { DIErrorCode } from './_tsup-dts-rollup.mjs';
14
- export { DIError } from './_tsup-dts-rollup.mjs';
15
- export { Factorable } from './_tsup-dts-rollup.mjs';
16
- export { FactorableWithArgs } from './_tsup-dts-rollup.mjs';
17
- export { OnServiceInit } from './_tsup-dts-rollup.mjs';
18
- export { OnServiceDestroy } from './_tsup-dts-rollup.mjs';
19
- export { getInjectors } from './_tsup-dts-rollup.mjs';
20
- export { Injectors } from './_tsup-dts-rollup.mjs';
21
- export { getInjectableToken } from './_tsup-dts-rollup.mjs';
22
- export { Join } from './_tsup-dts-rollup.mjs';
23
- export { UnionToIntersection } from './_tsup-dts-rollup.mjs';
24
- export { UnionToOvlds } from './_tsup-dts-rollup.mjs';
25
- export { PopUnion } from './_tsup-dts-rollup.mjs';
26
- export { IsUnion } from './_tsup-dts-rollup.mjs';
27
- export { UnionToArray } from './_tsup-dts-rollup.mjs';
28
- export { InjectRequest } from './_tsup-dts-rollup.mjs';
29
- export { InjectState } from './_tsup-dts-rollup.mjs';
30
- export { BaseInstanceHolderManager_alias_1 as BaseInstanceHolderManager } from './_tsup-dts-rollup.mjs';
31
- export { EventsConfig_alias_1 as EventsConfig } from './_tsup-dts-rollup.mjs';
32
- export { EventsNames_alias_1 as EventsNames } from './_tsup-dts-rollup.mjs';
33
- export { EventsArgs_alias_1 as EventsArgs } from './_tsup-dts-rollup.mjs';
34
- export { ChannelEmitter_alias_1 as ChannelEmitter } from './_tsup-dts-rollup.mjs';
35
- export { EventEmitterInterface_alias_1 as EventEmitterInterface } from './_tsup-dts-rollup.mjs';
36
- export { EventEmitter_alias_1 as EventEmitter } from './_tsup-dts-rollup.mjs';
37
- export { FactoryContext_alias_1 as FactoryContext } from './_tsup-dts-rollup.mjs';
38
- export { ClassType } from './_tsup-dts-rollup.mjs';
39
- export { ClassTypeWithoutArguments } from './_tsup-dts-rollup.mjs';
40
- export { ClassTypeWithArgument } from './_tsup-dts-rollup.mjs';
41
- export { ClassTypeWithOptionalArgument } from './_tsup-dts-rollup.mjs';
42
- export { ClassTypeWithInstance } from './_tsup-dts-rollup.mjs';
43
- export { ClassTypeWithInstanceAndArgument } from './_tsup-dts-rollup.mjs';
44
- export { ClassTypeWithInstanceAndOptionalArgument } from './_tsup-dts-rollup.mjs';
45
- export { BaseInjectionTokenSchemaType } from './_tsup-dts-rollup.mjs';
46
- export { OptionalInjectionTokenSchemaType } from './_tsup-dts-rollup.mjs';
47
- export { InjectionTokenSchemaType } from './_tsup-dts-rollup.mjs';
48
- export { InjectionToken } from './_tsup-dts-rollup.mjs';
49
- export { BoundInjectionToken } from './_tsup-dts-rollup.mjs';
50
- export { FactoryInjectionToken } from './_tsup-dts-rollup.mjs';
51
- export { AnyInjectableType } from './_tsup-dts-rollup.mjs';
52
- export { InjectionTokenType } from './_tsup-dts-rollup.mjs';
53
- export { defaultInjectors } from './_tsup-dts-rollup.mjs';
54
- export { asyncInject } from './_tsup-dts-rollup.mjs';
55
- export { inject } from './_tsup-dts-rollup.mjs';
56
- export { optional } from './_tsup-dts-rollup.mjs';
57
- export { wrapSyncInit } from './_tsup-dts-rollup.mjs';
58
- export { provideFactoryContext } from './_tsup-dts-rollup.mjs';
59
- export { FactoryRecord } from './_tsup-dts-rollup.mjs';
60
- export { Registry } from './_tsup-dts-rollup.mjs';
61
- export { globalRegistry } from './_tsup-dts-rollup.mjs';
62
- export { ServiceInstantiator } from './_tsup-dts-rollup.mjs';
63
- export { ServiceLocator } from './_tsup-dts-rollup.mjs';
64
- export { ServiceLocatorEventBus } from './_tsup-dts-rollup.mjs';
65
- export { ServiceLocatorInstanceHolderStatus } from './_tsup-dts-rollup.mjs';
66
- export { ServiceLocatorInstanceEffect } from './_tsup-dts-rollup.mjs';
67
- export { ServiceLocatorInstanceDestroyListener } from './_tsup-dts-rollup.mjs';
68
- export { ServiceLocatorInstanceHolderCreating } from './_tsup-dts-rollup.mjs';
69
- export { ServiceLocatorInstanceHolderCreated } from './_tsup-dts-rollup.mjs';
70
- export { ServiceLocatorInstanceHolderDestroying } from './_tsup-dts-rollup.mjs';
71
- export { ServiceLocatorInstanceHolderError } from './_tsup-dts-rollup.mjs';
72
- export { ServiceLocatorInstanceHolder } from './_tsup-dts-rollup.mjs';
73
- export { ServiceLocatorManager } from './_tsup-dts-rollup.mjs';
74
- export { createRequestContextHolder } from './_tsup-dts-rollup.mjs';
75
- export { RequestContextHolder } from './_tsup-dts-rollup.mjs';
76
- export { DefaultRequestContextHolder } from './_tsup-dts-rollup.mjs';
77
- export { InjectableTokenMeta } from './_tsup-dts-rollup.mjs';
78
- export { Container_alias_1 as Container } from './_tsup-dts-rollup.mjs';
1
+ import { $ as Factorable, A as globalRegistry, B as ClassTypeWithInstanceAndOptionalArgument, C as InstanceHolderDestroying, D as DIErrorCode, E as DIError, F as BoundInjectionToken, G as InjectionTokenSchemaType, H as ClassTypeWithoutArguments, I as ClassType, J as FactoryContext, K as InjectionTokenType, L as ClassTypeWithArgument, M as InjectableScope, N as AnyInjectableType, O as FactoryRecord, P as BaseInjectionTokenSchemaType, Q as IContainer, R as ClassTypeWithInstance, S as InstanceHolderCreating, T as InstanceStatus, U as FactoryInjectionToken, V as ClassTypeWithOptionalArgument, W as InjectionToken, X as Injectors, Y as getInjectableToken, Z as getInjectors, _ as IHolderStorage, a as TokenProcessor, at as PopUnion, b as InstanceHolder, c as LifecycleEventBus, ct as UnionToOvlds, d as RequestContext, et as FactorableWithArgs, f as RequestContextHolder, g as HolderGetResult, h as HolderReadyResult, i as ServiceLocator, it as Join, j as InjectableType, k as Registry, l as ScopedContainer, m as BaseHolderManager, n as TestContainer, nt as InjectState, o as Invalidator, ot as UnionToArray, p as createRequestContext, q as OptionalInjectionTokenSchemaType, r as Container, rt as IsUnion, s as HolderManager, st as UnionToIntersection, t as TestBindingBuilder, tt as InjectRequest, u as DefaultRequestContext, v as InstanceDestroyListener, w as InstanceHolderError, x as InstanceHolderCreated, y as InstanceEffect, z as ClassTypeWithInstanceAndArgument } from "./index-S_qX2VLI.mjs";
2
+ import { ZodObject, ZodOptional, z } from "zod/v4";
3
+
4
+ //#region src/interfaces/on-service-init.interface.d.mts
5
+ interface OnServiceInit {
6
+ onServiceInit(): Promise<void> | void;
7
+ }
8
+ //#endregion
9
+ //#region src/interfaces/on-service-destroy.interface.d.mts
10
+ interface OnServiceDestroy {
11
+ onServiceDestroy(): Promise<void> | void;
12
+ }
13
+ //#endregion
14
+ //#region src/decorators/factory.decorator.d.mts
15
+ interface FactoryOptions {
16
+ scope?: InjectableScope;
17
+ token?: InjectionToken<any, any>;
18
+ registry?: Registry;
19
+ }
20
+ declare function Factory<R>(options?: {
21
+ scope?: InjectableScope;
22
+ registry?: Registry;
23
+ }): <T extends ClassTypeWithInstance<Factorable<R>>>(target: T, context?: ClassDecoratorContext) => T;
24
+ declare function Factory<R, S>(options: {
25
+ scope?: InjectableScope;
26
+ token: InjectionToken<R, S>;
27
+ registry?: Registry;
28
+ }): R extends undefined ? never : S extends InjectionTokenSchemaType ? <T extends ClassTypeWithInstance<FactorableWithArgs<R, S>>>(
29
+ // #2.2.1 Token have a schema
30
+ target: T, context?: ClassDecoratorContext) => T : S extends undefined ? <T extends ClassTypeWithInstance<Factorable<R>>>(
31
+ // #2.3.1 Token without a schema
32
+ target: T, context?: ClassDecoratorContext) => T : never;
33
+ //#endregion
34
+ //#region src/decorators/injectable.decorator.d.mts
35
+ interface InjectableOptions {
36
+ scope?: InjectableScope;
37
+ token?: InjectionToken<any, any>;
38
+ schema?: InjectionTokenSchemaType;
39
+ registry?: Registry;
40
+ }
41
+ declare function Injectable(): <T extends ClassTypeWithoutArguments>(target: T, context?: ClassDecoratorContext) => T;
42
+ declare function Injectable(options: {
43
+ scope?: InjectableScope;
44
+ registry: Registry;
45
+ }): <T extends ClassTypeWithoutArguments>(target: T, context?: ClassDecoratorContext) => T;
46
+ declare function Injectable(options: {
47
+ scope: InjectableScope;
48
+ }): <T extends ClassTypeWithoutArguments>(target: T, context?: ClassDecoratorContext) => T;
49
+ declare function Injectable<Schema extends InjectionTokenSchemaType>(options: {
50
+ scope?: InjectableScope;
51
+ schema: Schema;
52
+ registry?: Registry;
53
+ }): <T extends ClassTypeWithArgument<z.output<Schema>>>(target: T, context?: ClassDecoratorContext) => T;
54
+ declare function Injectable<Type, Schema>(options: {
55
+ scope?: InjectableScope;
56
+ token: InjectionToken<Type, Schema>;
57
+ registry?: Registry;
58
+ }): Schema extends BaseInjectionTokenSchemaType ? Type extends undefined ? <T extends ClassTypeWithArgument<z.output<Schema>>>(
59
+ // #3.1.1 Typeless token
60
+ target: T, context?: ClassDecoratorContext) => T : <T extends ClassTypeWithInstanceAndArgument<Type, z.output<Schema>>>(
61
+ // #3.1.2 Typed token
62
+ target: T, context?: ClassDecoratorContext) => T : Schema extends OptionalInjectionTokenSchemaType ? Type extends undefined ? <T extends ClassTypeWithOptionalArgument<z.output<Schema>>>(
63
+ // #3.2.1 Typeless token
64
+ target: T, context?: ClassDecoratorContext) => T : <T extends ClassTypeWithInstanceAndOptionalArgument<Type, z.output<Schema>>>(target: T, context?: ClassDecoratorContext) => T : Schema extends undefined ? <R extends ClassTypeWithInstance<Type>>(
65
+ // #3.3.1 Token must have a type
66
+ target: R, context?: ClassDecoratorContext) => R : never;
67
+ //#endregion
68
+ //#region src/symbols/injectable-token.d.mts
69
+ declare const InjectableTokenMeta: unique symbol;
70
+ //#endregion
71
+ //#region src/event-emitter.d.mts
72
+ type EventsConfig = {
73
+ [event: string]: any[];
74
+ };
75
+ type EventsNames<Events extends EventsConfig> = Exclude<keyof Events, symbol | number>;
76
+ type EventsArgs<Events extends EventsConfig, Name extends EventsNames<Events>> = Events[Name] extends any[] ? Events[Name] : [];
77
+ interface EventEmitterInterface<Events extends EventsConfig> {
78
+ on<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(event: E, listener: (...args: Args) => void | Promise<void>): () => void;
79
+ emit<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(event: E, ...args: Args): void | Promise<void>;
80
+ }
81
+ declare class EventEmitter<Events extends EventsConfig = {}> implements EventEmitterInterface<Events> {
82
+ private listeners;
83
+ on<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(event: E, listener: (...args: Args) => void | Promise<void>): () => void;
84
+ off<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(event: E, listener: (...args: Args) => void | Promise<void>): void;
85
+ once<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(event: E, listener: (...args: Args) => void | Promise<void>): () => void;
86
+ emit<E extends EventsNames<Events>, Args extends EventsArgs<Events, E>>(event: E, ...args: Args): Promise<any>;
87
+ }
88
+ //#endregion
89
+ //#region src/injectors.d.mts
90
+ declare const defaultInjectors: Injectors;
91
+ declare const asyncInject: Injectors['asyncInject'];
92
+ declare const inject: Injectors['inject'];
93
+ declare const optional: Injectors['optional'];
94
+ declare const wrapSyncInit: Injectors['wrapSyncInit'];
95
+ declare const provideFactoryContext: Injectors['provideFactoryContext'];
96
+ //#endregion
97
+ //#region src/internal/context/async-local-storage.d.mts
98
+ /**
99
+ * Cross-platform AsyncLocalStorage wrapper.
100
+ *
101
+ * Provides AsyncLocalStorage on Node.js/Bun and falls back to
102
+ * a synchronous-only polyfill in browser environments.
103
+ */
104
+ /**
105
+ * Interface matching the subset of AsyncLocalStorage API we use.
106
+ */
107
+ interface IAsyncLocalStorage<T> {
108
+ run<R>(store: T, fn: () => R): R;
109
+ getStore(): T | undefined;
110
+ }
111
+ //#endregion
112
+ //#region src/internal/context/resolution-context.d.mts
113
+ /**
114
+ * Data stored in the resolution context during service instantiation.
115
+ */
116
+ interface ResolutionContextData {
117
+ /** The holder that is currently being instantiated */
118
+ waiterHolder: InstanceHolder;
119
+ /** Function to get a holder by name (for cycle detection) */
120
+ getHolder: (name: string) => InstanceHolder | undefined;
121
+ }
122
+ /**
123
+ * AsyncLocalStorage for tracking the current resolution context.
124
+ *
125
+ * This allows tracking which service is being instantiated even across
126
+ * async boundaries (like when inject() is called inside a constructor).
127
+ * Essential for circular dependency detection.
128
+ */
129
+ declare const resolutionContext: IAsyncLocalStorage<ResolutionContextData>;
130
+ /**
131
+ * Runs a function within a resolution context.
132
+ *
133
+ * The context tracks which holder is currently being instantiated,
134
+ * allowing circular dependency detection to work correctly.
135
+ *
136
+ * @param waiterHolder The holder being instantiated
137
+ * @param getHolder Function to retrieve holders by name
138
+ * @param fn The function to run within the context
139
+ */
140
+ declare function withResolutionContext<T>(waiterHolder: InstanceHolder, getHolder: (name: string) => InstanceHolder | undefined, fn: () => T): T;
141
+ /**
142
+ * Gets the current resolution context, if any.
143
+ *
144
+ * Returns undefined if we're not inside a resolution context
145
+ * (e.g., when resolving a top-level service that has no parent).
146
+ */
147
+ declare function getCurrentResolutionContext(): ResolutionContextData | undefined;
148
+ /**
149
+ * Runs a function outside any resolution context.
150
+ *
151
+ * This is useful for async injections that should not participate
152
+ * in circular dependency detection since they don't block.
153
+ *
154
+ * @param fn The function to run without resolution context
155
+ */
156
+ declare function withoutResolutionContext<T>(fn: () => T): T;
157
+ //#endregion
158
+ //#region src/internal/holder/singleton-storage.d.mts
159
+ /**
160
+ * Storage implementation for Singleton-scoped services.
161
+ *
162
+ * Wraps a HolderManager instance and provides the IHolderStorage interface.
163
+ * This allows the InstanceResolver to work with singleton storage
164
+ * using the same interface as request-scoped storage.
165
+ */
166
+ declare class SingletonStorage implements IHolderStorage {
167
+ private readonly manager;
168
+ readonly scope = InjectableScope.Singleton;
169
+ constructor(manager: HolderManager);
170
+ get<T = unknown>(instanceName: string): HolderGetResult<T>;
171
+ set(instanceName: string, holder: InstanceHolder): void;
172
+ delete(instanceName: string): boolean;
173
+ createHolder<T>(instanceName: string, type: InjectableType, deps: Set<string>): [ReturnType<typeof Promise.withResolvers<[undefined, T]>>, InstanceHolder<T>];
174
+ handles(scope: InjectableScope): boolean;
175
+ getAllNames(): string[];
176
+ forEach(callback: (name: string, holder: InstanceHolder) => void): void;
177
+ findByInstance(instance: unknown): InstanceHolder | null;
178
+ findDependents(instanceName: string): string[];
179
+ }
180
+ //#endregion
181
+ //#region src/internal/holder/request-storage.d.mts
182
+ /**
183
+ * Storage implementation for Request-scoped services.
184
+ *
185
+ * Wraps a RequestContext instance from a ScopedContainer and provides
186
+ * the IHolderStorage interface. This allows the InstanceResolver to work
187
+ * with request-scoped storage using the same interface as singleton storage.
188
+ */
189
+ declare class RequestStorage implements IHolderStorage {
190
+ private readonly contextHolder;
191
+ private readonly holderManager;
192
+ readonly scope = InjectableScope.Request;
193
+ constructor(contextHolder: RequestContext, holderManager: BaseHolderManager);
194
+ get<T = unknown>(instanceName: string): HolderGetResult<T>;
195
+ set(instanceName: string, holder: InstanceHolder): void;
196
+ delete(instanceName: string): boolean;
197
+ createHolder<T>(instanceName: string, type: InjectableType, deps: Set<string>): [ReturnType<typeof Promise.withResolvers<[undefined, T]>>, InstanceHolder<T>];
198
+ handles(scope: InjectableScope): boolean;
199
+ getAllNames(): string[];
200
+ forEach(callback: (name: string, holder: InstanceHolder) => void): void;
201
+ findByInstance(instance: unknown): InstanceHolder | null;
202
+ findDependents(instanceName: string): string[];
203
+ }
204
+ //#endregion
205
+ //#region src/internal/lifecycle/circular-detector.d.mts
206
+ /**
207
+ * Detects circular dependencies by analyzing the waitingFor relationships
208
+ * between service holders.
209
+ *
210
+ * Uses BFS to traverse the waitingFor graph starting from a target holder
211
+ * and checks if following the chain leads back to the waiter, indicating a circular dependency.
212
+ */
213
+ declare class CircularDetector {
214
+ /**
215
+ * Detects if waiting for `targetName` from `waiterName` would create a cycle.
216
+ *
217
+ * This works by checking if `targetName` (or any holder in its waitingFor chain)
218
+ * is currently waiting for `waiterName`. If so, waiting would create a deadlock.
219
+ *
220
+ * @param waiterName The name of the holder that wants to wait
221
+ * @param targetName The name of the holder being waited on
222
+ * @param getHolder Function to retrieve a holder by name
223
+ * @returns The cycle path if a cycle is detected, null otherwise
224
+ */
225
+ static detectCycle(waiterName: string, targetName: string, getHolder: (name: string) => InstanceHolder | undefined): string[] | null;
226
+ /**
227
+ * Formats a cycle path into a human-readable string.
228
+ *
229
+ * @param cycle The cycle path (array of service names)
230
+ * @returns Formatted string like "ServiceA -> ServiceB -> ServiceA"
231
+ */
232
+ static formatCycle(cycle: string[]): string;
233
+ }
234
+ //#endregion
235
+ //#region src/internal/core/instantiator.d.mts
236
+ /**
237
+ * Creates service instances from registry records.
238
+ *
239
+ * Handles both class-based (@Injectable) and factory-based (@Factory) services,
240
+ * managing the instantiation lifecycle including sync initialization retries
241
+ * and lifecycle hook invocation (onServiceInit, onServiceDestroy).
242
+ */
243
+ declare class Instantiator {
244
+ private readonly injectors;
245
+ constructor(injectors: Injectors);
246
+ /**
247
+ * Instantiates a service based on its registry record.
248
+ * @param ctx The factory context for dependency injection
249
+ * @param record The factory record from the registry
250
+ * @param args Optional arguments for the service
251
+ * @returns Promise resolving to [undefined, instance] or [error]
252
+ */
253
+ instantiateService<T>(ctx: FactoryContext, record: FactoryRecord<T, any>, args?: any): Promise<[undefined, T] | [DIError]>;
254
+ /**
255
+ * Instantiates a class-based service (Injectable decorator).
256
+ * @param ctx The factory context for dependency injection
257
+ * @param record The factory record from the registry
258
+ * @param args Optional arguments for the service constructor
259
+ * @returns Promise resolving to [undefined, instance] or [error]
260
+ */
261
+ private instantiateClass;
262
+ /**
263
+ * Instantiates a factory-based service (Factory decorator).
264
+ * @param ctx The factory context for dependency injection
265
+ * @param record The factory record from the registry
266
+ * @param args Optional arguments for the factory
267
+ * @returns Promise resolving to [undefined, instance] or [error]
268
+ */
269
+ private instantiateFactory;
270
+ }
271
+ //#endregion
272
+ //#region src/internal/core/instance-resolver.d.mts
273
+ /**
274
+ * Resolves instances from tokens, handling caching, creation, and scope rules.
275
+ *
276
+ * Uses the Storage Strategy pattern for unified singleton/request-scoped handling.
277
+ * Coordinates with Instantiator for actual service creation.
278
+ */
279
+ declare class InstanceResolver {
280
+ private readonly registry;
281
+ private readonly manager;
282
+ private readonly instantiator;
283
+ private readonly tokenProcessor;
284
+ private readonly logger;
285
+ private readonly serviceLocator;
286
+ private readonly singletonStorage;
287
+ constructor(registry: Registry, manager: HolderManager, instantiator: Instantiator, tokenProcessor: TokenProcessor, logger: (Console | null) | undefined, serviceLocator: ServiceLocator);
288
+ /**
289
+ * Resolves an instance for the given token and arguments.
290
+ * This method is used for singleton and transient services.
291
+ *
292
+ * @param token The injection token
293
+ * @param args Optional arguments
294
+ * @param contextContainer The container to use for creating FactoryContext
295
+ */
296
+ resolveInstance(token: AnyInjectableType, args: any, contextContainer: IContainer): Promise<[undefined, any] | [DIError]>;
297
+ /**
298
+ * Resolves a request-scoped instance for a ScopedContainer.
299
+ * The service will be stored in the ScopedContainer's request context.
300
+ *
301
+ * @param token The injection token
302
+ * @param args Optional arguments
303
+ * @param scopedContainer The ScopedContainer that owns the request context
304
+ */
305
+ resolveRequestScopedInstance(token: AnyInjectableType, args: any, scopedContainer: ScopedContainer): Promise<[undefined, any] | [DIError]>;
306
+ /**
307
+ * Unified resolution method that works with any IHolderStorage.
308
+ * This eliminates duplication between singleton and request-scoped resolution.
309
+ *
310
+ * IMPORTANT: The check-and-store logic is carefully designed to avoid race conditions.
311
+ * The storage check and holder creation must happen synchronously (no awaits between).
312
+ *
313
+ * @param token The injection token
314
+ * @param args Optional arguments
315
+ * @param contextContainer The container for FactoryContext
316
+ * @param storage The storage strategy to use
317
+ * @param scopedContainer Optional scoped container for request-scoped services
318
+ */
319
+ private resolveWithStorage;
320
+ /**
321
+ * Handles storage error states (destroying, error, etc.).
322
+ * Returns a result if handled, null if should proceed with creation.
323
+ */
324
+ private handleStorageError;
325
+ /**
326
+ * Creates a new instance and stores it using the provided storage strategy.
327
+ * This unified method replaces instantiateServiceFromRegistry and createRequestScopedInstance.
328
+ *
329
+ * For transient services, the instance is created but not stored (no caching).
330
+ */
331
+ private createAndStoreInstance;
332
+ /**
333
+ * Creates a transient instance without storage or locking.
334
+ * Each call creates a new instance.
335
+ */
336
+ private createTransientInstance;
337
+ /**
338
+ * Gets a synchronous instance (for sync operations).
339
+ */
340
+ getSyncInstance<Instance, Schema extends InjectionTokenSchemaType | undefined>(token: AnyInjectableType, args: Schema extends ZodObject ? z.input<Schema> : Schema extends ZodOptional<ZodObject> ? z.input<Schema> | undefined : undefined, contextContainer: IContainer): Instance | null;
341
+ /**
342
+ * Internal method to resolve token args and create instance name.
343
+ * Handles factory token resolution and validation.
344
+ */
345
+ private resolveTokenAndPrepareInstanceName;
346
+ /**
347
+ * Waits for an instance holder to be ready and returns the appropriate result.
348
+ * Uses the shared utility from BaseHolderManager.
349
+ * Passes the current resolution context for circular dependency detection.
350
+ */
351
+ private waitForInstanceReady;
352
+ /**
353
+ * Handles the result of service instantiation.
354
+ */
355
+ private handleInstantiationResult;
356
+ /**
357
+ * Handles successful service instantiation.
358
+ */
359
+ private handleInstantiationSuccess;
360
+ /**
361
+ * Handles service instantiation errors.
362
+ */
363
+ private handleInstantiationError;
364
+ /**
365
+ * Creates a factory context for dependency injection during service instantiation.
366
+ */
367
+ private createFactoryContext;
368
+ }
369
+ //#endregion
370
+ export { type AnyInjectableType, BaseHolderManager, BoundInjectionToken, CircularDetector, type ClassType, type ClassTypeWithArgument, type ClassTypeWithInstance, type ClassTypeWithInstanceAndArgument, type ClassTypeWithInstanceAndOptionalArgument, type ClassTypeWithOptionalArgument, type ClassTypeWithoutArguments, Container, DIError, DIErrorCode, DefaultRequestContext, EventEmitter, Factorable, FactorableWithArgs, Factory, type FactoryContext, FactoryInjectionToken, FactoryOptions, type FactoryRecord, type HolderGetResult, HolderManager, type HolderReadyResult, IContainer, type IHolderStorage, InjectRequest, InjectState, Injectable, InjectableOptions, InjectableScope, InjectableTokenMeta, InjectableType, InjectionToken, type InjectionTokenSchemaType, type InjectionTokenType, Injectors, type InstanceDestroyListener, type InstanceEffect, type InstanceHolder, type InstanceHolderCreated, type InstanceHolderCreating, type InstanceHolderDestroying, type InstanceHolderError, InstanceResolver, InstanceStatus, Instantiator, Invalidator, IsUnion, Join, LifecycleEventBus, OnServiceDestroy, OnServiceInit, PopUnion, Registry, type RequestContext, type RequestContextHolder, RequestStorage, type ResolutionContextData, ScopedContainer, ServiceLocator, SingletonStorage, TestBindingBuilder, TestContainer, TokenProcessor, UnionToArray, UnionToIntersection, UnionToOvlds, asyncInject, createRequestContext, defaultInjectors, getCurrentResolutionContext, getInjectableToken, getInjectors, globalRegistry, inject, optional, provideFactoryContext, resolutionContext, withResolutionContext, withoutResolutionContext, wrapSyncInit };
371
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/interfaces/on-service-init.interface.mts","../src/interfaces/on-service-destroy.interface.mts","../src/decorators/factory.decorator.mts","../src/decorators/injectable.decorator.mts","../src/symbols/injectable-token.mts","../src/event-emitter.mts","../src/injectors.mts","../src/internal/context/async-local-storage.mts","../src/internal/context/resolution-context.mts","../src/internal/holder/singleton-storage.mts","../src/internal/holder/request-storage.mts","../src/internal/lifecycle/circular-detector.mts","../src/internal/core/instantiator.mts","../src/internal/core/instance-resolver.mts"],"sourcesContent":[],"mappings":";;;;UAAiB,aAAA;mBACE;;;;UCDF,gBAAA;sBACK;;;;UCWL,cAAA;UACP;UACA;EDdO,QAAA,CAAA,ECeJ,QDfoB;;iBCmBjB,kBANN;UAOA;EARO,QAAA,CAAA,EASJ,QATkB;CACrB,CAAA,EAAA,CAAA,UASK,qBATL,CAS2B,UAT3B,CASsC,CATtC,CAAA,CAAA,CAAA,CAAA,MAAA,EAUA,CAVA,EAAA,OAAA,CAAA,EAWE,qBAXF,EAAA,GAYL,CAZK;AACA,iBAcM,OAdN,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,OAAA,EAAA;EACG,KAAA,CAAA,EAcH,eAdG;EAAQ,KAAA,EAeZ,cAfY,CAeG,CAfH,EAeM,CAfN,CAAA;EAIL,QAAA,CAAA,EAYH,QAZU;CACb,CAAA,EAYN,CAZM,SAAA,SAAA,GAAA,KAAA,GAcN,CAdM,SAcI,wBAdJ,GAAA,CAAA,UAeO,qBAfP,CAe6B,kBAf7B,CAegD,CAfhD,EAemD,CAfnD,CAAA,CAAA,CAAA;AAAA;MACG,EAeG,CAfH,EAAA,OAAA,CAAA,EAgBK,qBAhBL,EAAA,GAiBF,CAjBE,GAkBP,CAlBO,SAAA,SAAA,GAAA,CAAA,UAmBM,qBAnBN,CAmB4B,UAnB5B,CAmBuC,CAnBvC,CAAA,CAAA,CAAA;AAAA;MACmC,EAmB9B,CAnB8B,EAAA,OAAA,CAAA,EAoB5B,qBApB4B,EAAA,GAqBnC,CArBmC,GAAA,KAAA;;;UCD/B,iBAAA;UACP;UACA;EFvBO,MAAA,CAAA,EEwBN,wBFvBW;aEwBT;;iBAGG,UAAA,CAAA,cAAyB,mCAC/B,aACE,0BACP;ADnBY,iBCoBD,UAAA,CDpBe,OAAA,EAAA;EACrB,KAAA,CAAA,ECoBA,eDpBA;EACA,QAAA,ECoBE,QDpBF;CACG,CAAA,EAAA,CAAA,UCoBE,yBDpBF,CAAA,CAAA,MAAA,ECqBH,CDrBG,EAAA,OAAA,CAAA,ECsBD,qBDtBC,EAAA,GCuBR,CDvBQ;AAAQ,iBCwBL,UAAA,CDxBK,OAAA,EAAA;EAIL,KAAA,ECqBP,eDrBc;CACb,CAAA,EAAA,CAAA,UCqBK,yBDrBL,CAAA,CAAA,MAAA,ECsBA,CDtBA,EAAA,OAAA,CAAA,ECuBE,qBDvBF,EAAA,GCwBL,CDxBK;AACG,iBCyBG,UDzBH,CAAA,eCyB6B,wBDzB7B,CAAA,CAAA,OAAA,EAAA;EACmC,KAAA,CAAA,ECyBtC,eDzBsC;EAAX,MAAA,EC0B3B,MD1B2B;EAAtB,QAAA,CAAA,EC2BF,QD3BE;CACL,CAAA,EAAA,CAAA,UC2BK,qBD3BL,CC2B2B,CAAA,CAAE,MD3B7B,CC2BoC,MD3BpC,CAAA,CAAA,CAAA,CAAA,MAAA,EC4BA,CD5BA,EAAA,OAAA,CAAA,EC6BE,qBD7BF,EAAA,GC8BL,CD9BK;AACE,iBCgCI,UDhCJ,CAAA,IAAA,EAAA,MAAA,CAAA,CAAA,OAAA,EAAA;EACP,KAAA,CAAA,ECgCK,eDhCL;EAAC,KAAA,ECiCG,cDjCH,CCiCkB,IDjClB,ECiCwB,MDjCxB,CAAA;EAGU,QAAA,CAAA,EC+BH,QD/BU;CACb,CAAA,EC+BN,MD/BM,SC+BS,4BD/BT,GCgCN,IDhCM,SAAA,SAAA,GAAA,CAAA,UCiCO,qBDjCP,CCiC6B,CAAA,CAAE,MDjC/B,CCiCsC,MDjCtC,CAAA,CAAA,CAAA;AAAA;MACc,ECiCR,CDjCQ,EAAA,OAAA,CAAA,ECkCN,qBDlCM,EAAA,GCmCb,CDnCa,GAAA,CAAA,UCoCP,gCDpCO,CCoC0B,IDpC1B,ECoCgC,CAAA,CAAE,MDpClC,CCoCyC,MDpCzC,CAAA,CAAA,CAAA;AAAA;MAAG,ECqCX,CDrCW,EAAA,OAAA,CAAA,ECsCT,qBDtCS,EAAA,GCuChB,CDvCgB,GCwCvB,MDxCuB,SCwCR,gCDxCQ,GCyCrB,IDzCqB,SAAA,SAAA,GAAA,CAAA,UC0CR,6BD1CQ,CC0CsB,CAAA,CAAE,MD1CxB,CC0C+B,MD1C/B,CAAA,CAAA,CAAA;AAAA;MAAlB,EC2CS,CD3CT,EAAA,OAAA,CAAA,EC4CW,qBD5CX,EAAA,GC6CI,CD7CJ,GAAA,CAAA,UCgDW,wCDhDX,CCiDG,IDjDH,ECkDG,CAAA,CAAE,MDlDL,CCkDY,MDlDZ,CAAA,CAAA,CAAA,CAAA,MAAA,ECqDS,CDrDT,EAAA,OAAA,CAAA,ECsDW,qBDtDX,EAAA,GCuDI,CDvDJ,GCwDH,MDxDG,SAAA,SAAA,GAAA,CAAA,UCyDU,qBDzDV,CCyDgC,IDzDhC,CAAA,CAAA;AAAA;MACI,ECyDK,CDzDL,EAAA,OAAA,CAAA,EC0DO,qBD1DP,EAAA,GC2DA,CD3DA,GAAA,KAAA;;;cE/BA;;;KCOD,YAAA;;;KAGA,2BAA2B,gBAAgB,cAC/C;ALXS,KKcL,ULdkB,CAAA,eKeb,YLdS,EAAA,aKeX,WLfW,CKeC,MLfD,CAAA,CAAA,GKgBtB,MLhBsB,CKgBf,ILhBe,CAAA,SAAA,GAAA,EAAA,GKgBO,MLhBP,CKgBc,ILhBd,CAAA,GAAA,EAAA;ACDT,UI+BA,qBJ9BK,CAAA,eI8BgC,YJ9BzB,CAAA,CAAA;eI+Bd,YAAY,sBAAsB,WAAW,QAAQ,WACzD,uBACa,gBAAgB;iBAEvB,YAAY,sBAAsB,WAAW,QAAQ,WAC3D,YACE,cACD;;AH3BK,cG+BJ,YH/BkB,CAAA,eG+BU,YH/BV,GAAA,CAAA,CAAA,CAAA,YGgClB,qBHhCkB,CGgCI,MHhCJ,CAAA,CAAA;EACrB,QAAA,SAAA;EACA,EAAA,CAAA,UGkCK,WHlCL,CGkCiB,MHlCjB,CAAA,EAAA,aGkCuC,UHlCvC,CGkCkD,MHlClD,EGkC0D,CHlC1D,CAAA,CAAA,CAAA,KAAA,EGmCC,CHnCD,EAAA,QAAA,EAAA,CAAA,GAAA,IAAA,EGoCc,IHpCd,EAAA,GAAA,IAAA,GGoC8B,OHpC9B,CAAA,IAAA,CAAA,CAAA,EAAA,GAAA,GAAA,IAAA;EACG,GAAA,CAAA,UGgDG,WHhDH,CGgDe,MHhDf,CAAA,EAAA,aGgDqC,UHhDrC,CGgDgD,MHhDhD,EGgDwD,CHhDxD,CAAA,CAAA,CAAA,KAAA,EGiDF,CHjDE,EAAA,QAAA,EAAA,CAAA,GAAA,IAAA,EGkDW,IHlDX,EAAA,GAAA,IAAA,GGkD2B,OHlD3B,CAAA,IAAA,CAAA,CAAA,EAAA,IAAA;EAAQ,IAAA,CAAA,UG8DJ,WH9DI,CG8DQ,MH9DR,CAAA,EAAA,aG8D8B,UH9D9B,CG8DyC,MH9DzC,EG8DiD,CH9DjD,CAAA,CAAA,CAAA,KAAA,EG+DV,CH/DU,EAAA,QAAA,EAAA,CAAA,GAAA,IAAA,EGgEG,IHhEH,EAAA,GAAA,IAAA,GGgEmB,OHhEnB,CAAA,IAAA,CAAA,CAAA,EAAA,GAAA,GAAA,IAAA;EAIL,IAAA,CAAA,UGuEO,WHvEA,CGuEY,MHvEZ,CAAA,EAAA,aGuEkC,UHvElC,CGuE6C,MHvE7C,EGuEqD,CHvErD,CAAA,CAAA,CAAA,KAAA,EGwEZ,CHxEY,EAAA,GAAA,IAAA,EGyEV,IHzEU,CAAA,EG0ElB,OH1EkB,CAAA,GAAA,CAAA;;;;cIfV,kBAAgB;cAEhB,aAAa;cAGb,QAAQ;ANTJ,cMWJ,QNXiB,EMWP,SNVG,CAAA,UAAA,CAAA;cMYb,cAAc;cAGd,uBAAuB;;;;;;;ANhBpC;;;;ACAA;UMYiB;gBACD,aAAa,IAAI;cACnB;ALFd;;;;;;AFZiB,UQOA,qBAAA,CRNE;;gBQQH;;EPTC,SAAA,EAAA,CAAA,IAAA,EAAA,MAAgB,EAAA,GOWF,cPVF,GAAA,SAAA;;;;ACW7B;;;;;AAOgB,cMEH,iBNFU,EMEO,kBNFP,CMEO,qBNFP,CAAA;;;;;;;;;;AASvB;AACU,iBMIM,qBNJN,CAAA,CAAA,CAAA,CAAA,YAAA,EMKM,cNLN,EAAA,SAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,GMMqB,cNNrB,GAAA,SAAA,EAAA,EAAA,EAAA,GAAA,GMOE,CNPF,CAAA,EMQP,CNRO;;;;;;;AAKI,iBMaE,2BAAA,CAAA,CNbF,EMaiC,qBNbjC,GAAA,SAAA;;;;;;;;;AAMsC,iBMmBpC,wBNnBoC,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,GAAA,GMmBE,CNnBF,CAAA,EMmBM,CNnBN;;;AFxCpD;;;;ACAA;;;cQiBa,gBAAA,YAA4B;EPLxB,iBAAc,OAAA;EACrB,SAAA,KAAA,GOKM,eAAA,CAAA,SAAA;EPJN,WAAA,CAAA,OAAA,EOM8B,aPN9B;EACG,GAAA,CAAA,IAAA,OAAA,CAAA,CAAA,YAAA,EAAA,MAAA,CAAA,EOO6B,ePP7B,COO6C,CPP7C,CAAA;EAAQ,GAAA,CAAA,YAAA,EAAA,MAAA,EAAA,MAAA,EO2Be,cP3Bf,CAAA,EAAA,IAAA;EAIL,MAAA,CAAA,YAAO,EAAA,MAAA,CAAA,EAAA,OAAA;EACb,YAAA,CAAA,CAAA,CAAA,CAAA,YAAA,EAAA,MAAA,EAAA,IAAA,EOgCA,cPhCA,EAAA,IAAA,EOiCA,GPjCA,CAAA,MAAA,CAAA,CAAA,EAAA,COmCN,UPlCS,CAAA,OOkCS,OAAA,CAAQ,aPlCjB,CAAA,CAAA,SAAA,EOkC2C,CPlC3C,CAAA,CAAA,CAAA,EOmCT,cPlC4C,COkC7B,CPlC6B,CAAA,CAAX;EAAtB,OAAA,CAAA,KAAA,EO4CE,eP5CF,CAAA,EAAA,OAAA;EACL,WAAA,CAAA,CAAA,EAAA,MAAA,EAAA;EACE,OAAA,CAAA,QAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EOuDyB,cPvDzB,EAAA,GAAA,IAAA,CAAA,EAAA,IAAA;EACP,cAAA,CAAA,QAAA,EAAA,OAAA,CAAA,EO6DgC,cP7DhC,GAAA,IAAA;EAAC,cAAA,CAAA,YAAA,EAAA,MAAA,CAAA,EAAA,MAAA,EAAA;AAGN;;;;;;AD5BA;;;;ACYiB,cQOJ,cAAA,YAA0B,cRPR,CAAA;EACrB,iBAAA,aAAA;EACA,iBAAA,aAAA;EACG,SAAA,KAAA,GQKG,eAAA,CAAA,OAAA;ERLK,WAAA,CAAA,aAAA,EQQe,cRRf,EAAA,aAAA,EQSe,iBRTf;EAIL,GAAA,CAAA,IAAA,OAAO,CAAA,CAAA,YAAA,EAAA,MAAA,CAAA,EQQmB,eRRnB,CQQmC,CRRnC,CAAA;EACb,GAAA,CAAA,YAAA,EAAA,MAAA,EAAA,MAAA,EQqC0B,cRrC1B,CAAA,EAAA,IAAA;EACG,MAAA,CAAA,YAAA,EAAA,MAAA,CAAA,EAAA,OAAA;EACmC,YAAA,CAAA,CAAA,CAAA,CAAA,YAAA,EAAA,MAAA,EAAA,IAAA,EQ6CtC,cR7CsC,EAAA,IAAA,EQ8CtC,GR9CsC,CAAA,MAAA,CAAA,CAAA,EAAA,CQgD5C,URhDiC,CAAA,OQgDf,OAAA,CAAQ,aRhDO,CAAA,CAAA,SAAA,EQgDmB,CRhDnB,CAAA,CAAA,CAAA,EQiDjC,cRjDW,CQiDI,CRjDJ,CAAA,CACL;EACE,OAAA,CAAA,KAAA,EQ2DK,eR3DL,CAAA,EAAA,OAAA;EACP,WAAA,CAAA,CAAA,EAAA,MAAA,EAAA;EAAC,OAAA,CAAA,QAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EQ0EqC,cR1ErC,EAAA,GAAA,IAAA,CAAA,EAAA,IAAA;EAGU,cAAO,CAAA,QAAA,EAAA,OAAA,CAAA,EQ6Ec,cR7Ed,GAAA,IAAA;EACb,cAAA,CAAA,YAAA,EAAA,MAAA,CAAA,EAAA,MAAA,EAAA;;;;;;;AF7BV;;;;ACAiB,cUSJ,gBAAA,CVRS;;;;ACWtB;;;;;AAOA;;;EAGgD,OAAA,WAAA,CAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,CAAA,IAAA,EAAA,MAAA,EAAA,GSEf,cTFe,GAAA,SAAA,CAAA,EAAA,MAAA,EAAA,GAAA,IAAA;EAAX;;;;;;EAMrB,OAAA,WAAO,CAAA,KAAA,EAAA,MAAA,EAAA,CAAA,EAAA,MAAA;;;;AF5BvB;;;;ACAA;;;cWca,YAAA;EVFI,iBAAc,SAAA;EACrB,WAAA,CAAA,SAAA,EUEgC,SVFhC;EACA;;;AAKV;;;;EAGqC,kBAAA,CAAA,CAAA,CAAA,CAAA,GAAA,EUG5B,cVH4B,EAAA,MAAA,EUIzB,aVJyB,CUIX,CVJW,EAAA,GAAA,CAAA,EAAA,IAAA,CAAA,EAAA,GAAA,CAAA,EUMhC,OVNgC,CAAA,CAAA,SAAA,EUMZ,CVNY,CAAA,GAAA,CUMN,OVNM,CAAA,CAAA;EAAtB;;;;;AAMf;;EAEwB,QAAA,gBAAA;EAAG;;;;;;;EAKkC,QAAA,kBAAA;;;;;;AAvB7D;;;;AAGqB,cW0BR,gBAAA,CX1BQ;EAIL,iBAAO,QAAA;EACb,iBAAA,OAAA;EACG,iBAAA,YAAA;EACmC,iBAAA,cAAA;EAAX,iBAAA,MAAA;EAAtB,iBAAA,cAAA;EACL,iBAAA,gBAAA;EACE,WAAA,CAAA,QAAA,EWqBmB,QXrBnB,EAAA,OAAA,EWsBkB,aXtBlB,EAAA,YAAA,EWuBuB,YXvBvB,EAAA,cAAA,EWwByB,cXxBzB,EAAA,MAAA,EAAA,CWyBiB,OXzBjB,GAAA,IAAA,CAAA,GAAA,SAAA,EAAA,cAAA,EW0ByB,cX1BzB;EACP;;AAGL;;;;;;EAII,eAAA,CAAA,KAAA,EWoCO,iBXpCP,EAAA,IAAA,EAAA,GAAA,EAAA,gBAAA,EWsCkB,UXtClB,CAAA,EWuCC,OXvCD,CAAA,CAAA,SAAA,EAAA,GAAA,CAAA,GAAA,CWuC6B,OXvC7B,CAAA,CAAA;EAEA;;;;;;;;EAIO,4BAAA,CAAA,KAAA,EWmDA,iBXnDA,EAAA,IAAA,EAAA,GAAA,EAAA,eAAA,EWqDU,eXrDV,CAAA,EWsDN,OXtDM,CAAA,CAAA,SAAA,EAAA,GAAA,CAAA,GAAA,CWsDsB,OXtDtB,CAAA,CAAA;EACL;;;;;;;;;;;AClBN;;EAEU,QAAA,kBAAA;EACC;;;AAIX;EAAyC,QAAA,kBAAA;EAC/B;;;;AAGV;;EAEY,QAAA,sBAAA;EACG;;;;EAGT,QAAA,uBAAA;EACU;;;EAGN,eAAA,CAAA,QAAA,EAAA,eUwVS,wBVxVT,GAAA,SAAA,CAAA,CAAA,KAAA,EU0VC,iBV1VD,EAAA,IAAA,EU2VA,MV3VA,SU2Ve,SV3Vf,GU4VF,CAAA,CAAE,KV5VA,CU4VM,MV5VN,CAAA,GU6VF,MV7VE,SU6Va,WV7Vb,CU6VyB,SV7VzB,CAAA,GU8VA,CAAA,CAAE,KV9VF,CU8VQ,MV9VR,CAAA,GAAA,SAAA,GAAA,SAAA,EAAA,gBAAA,EUgWY,UVhWZ,CAAA,EUiWL,QVjWK,GAAA,IAAA;EACE;;;AAGZ;EAA0C,QAAA,kCAAA;EAChC;;;;;EAGK,QAAA,oBAAA;EACL;;;EAEJ,QAAA,yBAAA;EAGU;;;EAEc,QAAA,0BAAA;EAArB;;;EAEU,QAAA,wBAAA;EACf;;;EACa,QAAA,oBAAA"}