@navios/di 0.9.1 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -0
- package/README.md +28 -0
- package/coverage/block-navigation.js +1 -1
- package/coverage/clover.xml +1463 -3174
- package/coverage/coverage-final.json +56 -54
- package/coverage/index.html +179 -104
- package/coverage/sorter.js +21 -7
- package/coverage/src/{request-context-manager.mts.html → __tests__/gc/gc-test-utils.mts.html} +192 -231
- package/coverage/{lib → src/__tests__/gc}/index.html +25 -40
- package/coverage/src/container/abstract-container.mts.html +1066 -0
- package/coverage/src/container/container.mts.html +958 -0
- package/coverage/src/container/index.html +161 -0
- package/coverage/src/{testing → container}/index.mts.html +12 -9
- package/coverage/src/container/scoped-container.mts.html +907 -0
- package/coverage/src/decorators/factory.decorator.mts.html +68 -53
- package/coverage/src/decorators/index.html +34 -34
- package/coverage/src/decorators/index.mts.html +10 -10
- package/coverage/src/decorators/injectable.decorator.mts.html +144 -60
- package/coverage/src/enums/index.html +21 -21
- package/coverage/src/enums/index.mts.html +12 -12
- package/coverage/src/enums/injectable-scope.enum.mts.html +11 -8
- package/coverage/src/enums/injectable-type.enum.mts.html +10 -7
- package/coverage/src/errors/di-error.mts.html +380 -71
- package/coverage/src/errors/index.html +22 -127
- package/coverage/src/errors/index.mts.html +9 -33
- package/coverage/src/event-emitter.mts.html +35 -107
- package/coverage/src/index.html +14 -254
- package/coverage/src/index.mts.html +23 -50
- package/coverage/src/interfaces/container.interface.mts.html +370 -0
- package/coverage/src/interfaces/factory.interface.mts.html +12 -12
- package/coverage/src/interfaces/index.html +45 -30
- package/coverage/src/interfaces/index.mts.html +16 -13
- package/coverage/src/interfaces/on-service-destroy.interface.mts.html +1 -1
- package/coverage/src/interfaces/on-service-init.interface.mts.html +1 -1
- package/coverage/src/internal/context/async-local-storage.browser.mts.html +142 -0
- package/coverage/src/internal/context/async-local-storage.mts.html +292 -0
- package/coverage/src/{factory-context.mts.html → internal/context/async-local-storage.types.mts.html} +17 -17
- package/coverage/src/internal/context/factory-context.mts.html +142 -0
- package/coverage/src/internal/context/index.html +221 -0
- package/coverage/src/internal/context/index.mts.html +100 -0
- package/coverage/src/{service-locator-instance-holder.mts.html → internal/context/resolution-context.mts.html} +114 -78
- package/coverage/src/internal/context/service-initialization-context.mts.html +214 -0
- package/coverage/src/internal/context/sync-local-storage.mts.html +244 -0
- package/coverage/src/internal/core/index.html +206 -0
- package/coverage/src/internal/core/index.mts.html +103 -0
- package/coverage/src/internal/core/instance-resolver.mts.html +2533 -0
- package/coverage/src/{request-context-holder.mts.html → internal/core/name-resolver.mts.html} +245 -260
- package/coverage/src/{container.mts.html → internal/core/scope-tracker.mts.html} +352 -310
- package/coverage/src/{service-instantiator.mts.html → internal/core/service-initializer.mts.html} +254 -176
- package/coverage/src/internal/core/service-invalidator.mts.html +955 -0
- package/coverage/src/internal/core/token-resolver.mts.html +451 -0
- package/coverage/src/internal/holder/holder-storage.interface.mts.html +451 -0
- package/coverage/src/internal/holder/index.html +161 -0
- package/coverage/src/internal/holder/index.mts.html +94 -0
- package/coverage/src/internal/holder/instance-holder.mts.html +406 -0
- package/coverage/src/{service-locator.mts.html → internal/holder/unified-storage.mts.html} +376 -379
- package/coverage/{lib/testing → src/internal}/index.html +26 -11
- package/coverage/src/internal/index.mts.html +100 -0
- package/coverage/src/internal/lifecycle/circular-detector.mts.html +364 -0
- package/coverage/src/internal/lifecycle/index.html +146 -0
- package/coverage/src/internal/lifecycle/index.mts.html +91 -0
- package/coverage/src/{service-locator-event-bus.mts.html → internal/lifecycle/lifecycle-event-bus.mts.html} +104 -80
- package/coverage/src/internal/stub-factory-class.mts.html +133 -0
- package/coverage/src/symbols/index.html +14 -14
- package/coverage/src/symbols/index.mts.html +9 -9
- package/coverage/src/symbols/injectable-token.mts.html +9 -3
- package/coverage/src/testing/index.html +32 -32
- package/coverage/src/testing/test-container.mts.html +1576 -139
- package/coverage/src/testing/unit-test-container.mts.html +1888 -0
- package/coverage/src/token/index.html +146 -0
- package/coverage/{lib/testing/index.d.mts.html → src/token/index.mts.html} +11 -11
- package/coverage/src/{injection-token.mts.html → token/injection-token.mts.html} +225 -111
- package/coverage/src/{base-instance-holder-manager.mts.html → token/registry.mts.html} +188 -269
- package/coverage/src/{injector.mts.html → utils/default-injectors.mts.html} +31 -31
- package/coverage/src/utils/get-injectable-token.mts.html +19 -22
- package/coverage/src/utils/get-injectors.mts.html +684 -177
- package/coverage/src/utils/index.html +36 -36
- package/coverage/src/utils/index.mts.html +18 -12
- package/coverage/src/utils/types.mts.html +26 -11
- package/docs/examples/basic-usage.mts +1 -1
- package/docs/examples/factory-pattern.mts +3 -3
- package/docs/examples/request-scope-example.mts +1 -1
- package/docs/examples/service-lifecycle.mts +1 -1
- package/lib/browser/internal/core/instance-resolver.d.mts.map +1 -1
- package/lib/browser/internal/core/instance-resolver.mjs.map +1 -1
- package/lib/browser/utils/get-injectors.mjs +9 -12
- package/lib/browser/utils/get-injectors.mjs.map +1 -1
- package/lib/{container-D-0Ho3qL.d.cts → container-D3j3KuD9.d.mts} +5 -289
- package/lib/container-D3j3KuD9.d.mts.map +1 -0
- package/lib/{container-8-z89TyQ.mjs → container-qgHMgGNG.mjs} +12 -239
- package/lib/container-qgHMgGNG.mjs.map +1 -0
- package/lib/{container-CNiqesCL.d.mts → container-r1KP4F-n.d.cts} +5 -289
- package/lib/container-r1KP4F-n.d.cts.map +1 -0
- package/lib/{container-CaY2fDuk.cjs → container-ycYJgTq7.cjs} +50 -331
- package/lib/container-ycYJgTq7.cjs.map +1 -0
- package/lib/factory.decorator-D4mem6YQ.cjs +21 -0
- package/lib/factory.decorator-D4mem6YQ.cjs.map +1 -0
- package/lib/factory.decorator-_IPWcwQn.mjs +16 -0
- package/lib/factory.decorator-_IPWcwQn.mjs.map +1 -0
- package/lib/index.cjs +14 -24
- package/lib/index.cjs.map +1 -1
- package/lib/index.d.cts +3 -52
- package/lib/index.d.cts.map +1 -1
- package/lib/index.d.mts +3 -52
- package/lib/index.d.mts.map +1 -1
- package/lib/index.mjs +3 -13
- package/lib/index.mjs.map +1 -1
- package/lib/injectable.decorator-BNfWpjr_.d.cts +56 -0
- package/lib/injectable.decorator-BNfWpjr_.d.cts.map +1 -0
- package/lib/injectable.decorator-Bc05hRQU.d.mts +56 -0
- package/lib/injectable.decorator-Bc05hRQU.d.mts.map +1 -0
- package/lib/injectable.decorator-CyPrBzBN.mjs +227 -0
- package/lib/injectable.decorator-CyPrBzBN.mjs.map +1 -0
- package/lib/injectable.decorator-DbpiDrg-.cjs +281 -0
- package/lib/injectable.decorator-DbpiDrg-.cjs.map +1 -0
- package/lib/legacy-compat/index.cjs +114 -0
- package/lib/legacy-compat/index.cjs.map +1 -0
- package/lib/legacy-compat/index.d.cts +63 -0
- package/lib/legacy-compat/index.d.cts.map +1 -0
- package/lib/legacy-compat/index.d.mts +63 -0
- package/lib/legacy-compat/index.d.mts.map +1 -0
- package/lib/legacy-compat/index.mjs +111 -0
- package/lib/legacy-compat/index.mjs.map +1 -0
- package/lib/registry-DKbKWFvJ.d.cts +290 -0
- package/lib/registry-DKbKWFvJ.d.cts.map +1 -0
- package/lib/registry-n8JhJoxm.d.mts +290 -0
- package/lib/registry-n8JhJoxm.d.mts.map +1 -0
- package/lib/testing/index.cjs +23 -22
- package/lib/testing/index.cjs.map +1 -1
- package/lib/testing/index.d.cts +2 -1
- package/lib/testing/index.d.cts.map +1 -1
- package/lib/testing/index.d.mts +2 -1
- package/lib/testing/index.d.mts.map +1 -1
- package/lib/testing/index.mjs +2 -1
- package/lib/testing/index.mjs.map +1 -1
- package/package.json +11 -1
- package/project.json +8 -0
- package/src/__tests__/gc/basic-container.spec.mts +358 -0
- package/src/__tests__/gc/circular-dependencies.spec.mts +501 -0
- package/src/__tests__/gc/gc-test-utils.mts +136 -0
- package/src/__tests__/gc/memory-pressure.spec.mts +542 -0
- package/src/__tests__/gc/scoped-container.spec.mts +444 -0
- package/src/__tests__/gc/transient-services.spec.mts +326 -0
- package/src/__tests__/get-injectors.spec.mts +166 -0
- package/src/__tests__/scope-upgrade.spec.mts +0 -18
- package/src/internal/core/instance-resolver.mts +0 -1
- package/src/legacy-compat/context-compat.mts +95 -0
- package/src/legacy-compat/factory.decorator.mts +37 -0
- package/src/legacy-compat/index.mts +16 -0
- package/src/legacy-compat/injectable.decorator.mts +41 -0
- package/src/utils/get-injectors.mts +36 -32
- package/tsdown.config.mts +1 -1
- package/vitest.config.mts +3 -7
- package/coverage/docs/examples/basic-usage.mts.html +0 -376
- package/coverage/docs/examples/factory-pattern.mts.html +0 -1039
- package/coverage/docs/examples/index.html +0 -176
- package/coverage/docs/examples/injection-tokens.mts.html +0 -760
- package/coverage/docs/examples/request-scope-example.mts.html +0 -847
- package/coverage/docs/examples/service-lifecycle.mts.html +0 -1162
- package/coverage/lib/_tsup-dts-rollup.d.mts.html +0 -3445
- package/coverage/lib/index.d.mts.html +0 -313
- package/coverage/src/errors/errors.enum.mts.html +0 -118
- package/coverage/src/errors/factory-not-found.mts.html +0 -118
- package/coverage/src/errors/factory-token-not-resolved.mts.html +0 -118
- package/coverage/src/errors/instance-destroying.mts.html +0 -118
- package/coverage/src/errors/instance-expired.mts.html +0 -118
- package/coverage/src/errors/instance-not-found.mts.html +0 -118
- package/coverage/src/errors/unknown-error.mts.html +0 -118
- package/coverage/src/instance-resolver.mts.html +0 -1762
- package/coverage/src/registry.mts.html +0 -247
- package/coverage/src/service-invalidator.mts.html +0 -1372
- package/coverage/src/service-locator-manager.mts.html +0 -340
- package/coverage/src/token-processor.mts.html +0 -607
- package/coverage/src/utils/defer.mts.html +0 -118
- package/lib/container-8-z89TyQ.mjs.map +0 -1
- package/lib/container-CNiqesCL.d.mts.map +0 -1
- package/lib/container-CaY2fDuk.cjs.map +0 -1
- package/lib/container-D-0Ho3qL.d.cts.map +0 -1
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
const require_injectable_decorator = require('../injectable.decorator-DbpiDrg-.cjs');
|
|
2
|
+
const require_factory_decorator = require('../factory.decorator-D4mem6YQ.cjs');
|
|
3
|
+
|
|
4
|
+
//#region src/legacy-compat/context-compat.mts
|
|
5
|
+
/**
|
|
6
|
+
* Compatibility layer for converting legacy decorator signatures to Stage 3 format.
|
|
7
|
+
*
|
|
8
|
+
* This module provides utilities to create mock Stage 3 decorator contexts
|
|
9
|
+
* from legacy decorator arguments, and manages metadata storage using WeakMap.
|
|
10
|
+
*/ const classMetadataMap = /* @__PURE__ */ new WeakMap();
|
|
11
|
+
/**
|
|
12
|
+
* Gets the constructor from a prototype (for method decorators).
|
|
13
|
+
*/ function getConstructor(prototype) {
|
|
14
|
+
if (!prototype || typeof prototype !== "object") return null;
|
|
15
|
+
const constructor = prototype.constructor;
|
|
16
|
+
if (constructor && typeof constructor === "function") return constructor;
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Creates a mock ClassDecoratorContext for legacy class decorators.
|
|
21
|
+
* @internal
|
|
22
|
+
*/ function createClassContext(target) {
|
|
23
|
+
if (!classMetadataMap.has(target)) classMetadataMap.set(target, {});
|
|
24
|
+
const metadata = classMetadataMap.get(target);
|
|
25
|
+
return {
|
|
26
|
+
kind: "class",
|
|
27
|
+
name: target.name,
|
|
28
|
+
metadata,
|
|
29
|
+
addInitializer() {}
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Creates a mock ClassMethodDecoratorContext for legacy method decorators.
|
|
34
|
+
*
|
|
35
|
+
* Note: Method decorators need to share metadata with the class context
|
|
36
|
+
* because endpoint metadata is stored at the class level.
|
|
37
|
+
* @internal
|
|
38
|
+
*/ function createMethodContext(target, propertyKey, descriptor) {
|
|
39
|
+
const constructor = getConstructor(target);
|
|
40
|
+
if (!constructor) throw new Error("[Navios] Could not determine class constructor from method decorator target.");
|
|
41
|
+
if (!classMetadataMap.has(constructor)) classMetadataMap.set(constructor, {});
|
|
42
|
+
return {
|
|
43
|
+
kind: "method",
|
|
44
|
+
name: propertyKey,
|
|
45
|
+
metadata: classMetadataMap.get(constructor),
|
|
46
|
+
static: false,
|
|
47
|
+
private: false,
|
|
48
|
+
access: {
|
|
49
|
+
has: () => true,
|
|
50
|
+
get: () => descriptor.value,
|
|
51
|
+
set: () => {}
|
|
52
|
+
},
|
|
53
|
+
addInitializer() {}
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
//#endregion
|
|
58
|
+
//#region src/legacy-compat/injectable.decorator.mts
|
|
59
|
+
/**
|
|
60
|
+
* Legacy-compatible Injectable decorator.
|
|
61
|
+
*
|
|
62
|
+
* Works with TypeScript experimental decorators (legacy API).
|
|
63
|
+
*
|
|
64
|
+
* @param options - Injectable configuration options
|
|
65
|
+
* @returns A class decorator compatible with legacy decorator API
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* ```typescript
|
|
69
|
+
* @Injectable()
|
|
70
|
+
* export class UserService {
|
|
71
|
+
* getUser(id: string) {
|
|
72
|
+
* return { id, name: 'John' }
|
|
73
|
+
* }
|
|
74
|
+
* }
|
|
75
|
+
* ```
|
|
76
|
+
*/ function Injectable(options = {}) {
|
|
77
|
+
return function(target) {
|
|
78
|
+
const context = createClassContext(target);
|
|
79
|
+
return (Object.keys(options).length === 0 ? require_injectable_decorator.Injectable() : require_injectable_decorator.Injectable(options))(target, context);
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
//#endregion
|
|
84
|
+
//#region src/legacy-compat/factory.decorator.mts
|
|
85
|
+
/**
|
|
86
|
+
* Legacy-compatible Factory decorator.
|
|
87
|
+
*
|
|
88
|
+
* Works with TypeScript experimental decorators (legacy API).
|
|
89
|
+
*
|
|
90
|
+
* @param options - Factory configuration options
|
|
91
|
+
* @returns A class decorator compatible with legacy decorator API
|
|
92
|
+
*
|
|
93
|
+
* @example
|
|
94
|
+
* ```typescript
|
|
95
|
+
* @Factory()
|
|
96
|
+
* export class DatabaseConnectionFactory {
|
|
97
|
+
* create() {
|
|
98
|
+
* return { host: 'localhost', port: 5432 }
|
|
99
|
+
* }
|
|
100
|
+
* }
|
|
101
|
+
* ```
|
|
102
|
+
*/ function Factory(options = {}) {
|
|
103
|
+
return function(target) {
|
|
104
|
+
const context = createClassContext(target);
|
|
105
|
+
return (Object.keys(options).length === 0 ? require_factory_decorator.Factory() : require_factory_decorator.Factory(options))(target, context);
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
//#endregion
|
|
110
|
+
exports.Factory = Factory;
|
|
111
|
+
exports.Injectable = Injectable;
|
|
112
|
+
exports.createClassContext = createClassContext;
|
|
113
|
+
exports.createMethodContext = createMethodContext;
|
|
114
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["classMetadataMap","WeakMap","getConstructor","prototype","constructor","createClassContext","target","has","set","metadata","get","kind","name","addInitializer","createMethodContext","propertyKey","descriptor","Error","static","private","access","value","Injectable","OriginalInjectable","createClassContext","options","target","context","originalDecorator","Object","keys","length","Factory","OriginalFactory","createClassContext","options","target","context","originalDecorator","Object","keys","length"],"sources":["../../src/legacy-compat/context-compat.mts","../../src/legacy-compat/injectable.decorator.mts","../../src/legacy-compat/factory.decorator.mts"],"sourcesContent":["/**\n * Compatibility layer for converting legacy decorator signatures to Stage 3 format.\n *\n * This module provides utilities to create mock Stage 3 decorator contexts\n * from legacy decorator arguments, and manages metadata storage using WeakMap.\n */\n\nimport type { ClassType } from '../token/injection-token.mjs'\n\n// WeakMap to store metadata for legacy decorators\n// Keyed by class constructor for class decorators\n// For method decorators, we use the class constructor (extracted from the prototype)\nconst classMetadataMap = new WeakMap<ClassType, Record<string | symbol, any>>()\n\n/**\n * Gets the constructor from a prototype (for method decorators).\n */\nfunction getConstructor(prototype: any): ClassType | null {\n if (!prototype || typeof prototype !== 'object') {\n return null\n }\n // In legacy decorators, target is the prototype\n // The constructor is typically available via prototype.constructor\n const constructor = prototype.constructor\n if (constructor && typeof constructor === 'function') {\n return constructor as ClassType\n }\n return null\n}\n\n/**\n * Creates a mock ClassDecoratorContext for legacy class decorators.\n * @internal\n */\nexport function createClassContext(target: ClassType): ClassDecoratorContext {\n // Get or create metadata storage for this class\n if (!classMetadataMap.has(target)) {\n classMetadataMap.set(target, {})\n }\n const metadata = classMetadataMap.get(target)!\n\n return {\n kind: 'class',\n name: target.name,\n metadata,\n addInitializer() {\n // Legacy decorators don't support initializers\n },\n } as ClassDecoratorContext\n}\n\n/**\n * Creates a mock ClassMethodDecoratorContext for legacy method decorators.\n *\n * Note: Method decorators need to share metadata with the class context\n * because endpoint metadata is stored at the class level.\n * @internal\n */\nexport function createMethodContext(\n target: any,\n propertyKey: string | symbol,\n descriptor: PropertyDescriptor,\n): ClassMethodDecoratorContext {\n // For method decorators, target is the prototype\n // We need to get the class constructor to access class-level metadata\n const constructor = getConstructor(target)\n if (!constructor) {\n throw new Error(\n '[Navios] Could not determine class constructor from method decorator target.',\n )\n }\n\n // Get or create metadata storage for the class\n // Method decorators share metadata with the class\n if (!classMetadataMap.has(constructor)) {\n classMetadataMap.set(constructor, {})\n }\n const metadata = classMetadataMap.get(constructor)!\n\n return {\n kind: 'method',\n name: propertyKey,\n metadata,\n static: false, // We can't determine this from legacy decorators\n private: false, // We can't determine this from legacy decorators\n access: {\n has: () => true,\n get: () => descriptor.value,\n set: () => {},\n },\n addInitializer() {\n // Legacy decorators don't support initializers\n },\n } as ClassMethodDecoratorContext\n}\n","import type { ClassType } from '../token/injection-token.mjs'\n\nimport {\n Injectable as OriginalInjectable,\n type InjectableOptions,\n} from '../decorators/index.mjs'\n\nimport { createClassContext } from './context-compat.mjs'\n\nexport type { InjectableOptions }\n\n/**\n * Legacy-compatible Injectable decorator.\n *\n * Works with TypeScript experimental decorators (legacy API).\n *\n * @param options - Injectable configuration options\n * @returns A class decorator compatible with legacy decorator API\n *\n * @example\n * ```typescript\n * @Injectable()\n * export class UserService {\n * getUser(id: string) {\n * return { id, name: 'John' }\n * }\n * }\n * ```\n */\nexport function Injectable(options: InjectableOptions = {}) {\n return function (target: ClassType) {\n const context = createClassContext(target)\n // Use the no-args overload when options is empty, otherwise pass options\n const originalDecorator =\n Object.keys(options).length === 0\n ? OriginalInjectable()\n : // @ts-expect-error - InjectableOptions is a union type, we let runtime handle it\n OriginalInjectable(options)\n return originalDecorator(target, context)\n }\n}\n","import type { ClassType } from '../token/injection-token.mjs'\n\nimport { Factory as OriginalFactory, type FactoryOptions } from '../decorators/index.mjs'\n\nimport { createClassContext } from './context-compat.mjs'\n\nexport type { FactoryOptions }\n\n/**\n * Legacy-compatible Factory decorator.\n *\n * Works with TypeScript experimental decorators (legacy API).\n *\n * @param options - Factory configuration options\n * @returns A class decorator compatible with legacy decorator API\n *\n * @example\n * ```typescript\n * @Factory()\n * export class DatabaseConnectionFactory {\n * create() {\n * return { host: 'localhost', port: 5432 }\n * }\n * }\n * ```\n */\nexport function Factory(options: FactoryOptions = {}) {\n return function (target: ClassType) {\n const context = createClassContext(target)\n // Use the no-args overload when options is empty, otherwise pass options\n const originalDecorator =\n Object.keys(options).length === 0\n ? OriginalFactory()\n : OriginalFactory(options)\n return originalDecorator(target, context)\n }\n}\n"],"mappings":";;;;;;;;;GAYA,MAAMA,mCAAmB,IAAIC,SAAAA;;;GAK7B,SAASC,eAAeC,WAAc;AACpC,KAAI,CAACA,aAAa,OAAOA,cAAc,SACrC,QAAO;CAIT,MAAMC,cAAcD,UAAU;AAC9B,KAAIC,eAAe,OAAOA,gBAAgB,WACxC,QAAOA;AAET,QAAO;;;;;GAOT,SAAgBC,mBAAmBC,QAAiB;AAElD,KAAI,CAACN,iBAAiBO,IAAID,OAAAA,CACxBN,kBAAiBQ,IAAIF,QAAQ,EAAC,CAAA;CAEhC,MAAMG,WAAWT,iBAAiBU,IAAIJ,OAAAA;AAEtC,QAAO;EACLK,MAAM;EACNC,MAAMN,OAAOM;EACbH;EACAI,iBAAAA;EAGF;;;;;;;;GAUF,SAAgBC,oBACdR,QACAS,aACAC,YAA8B;CAI9B,MAAMZ,cAAcF,eAAeI,OAAAA;AACnC,KAAI,CAACF,YACH,OAAM,IAAIa,MACR,+EAAA;AAMJ,KAAI,CAACjB,iBAAiBO,IAAIH,YAAAA,CACxBJ,kBAAiBQ,IAAIJ,aAAa,EAAC,CAAA;AAIrC,QAAO;EACLO,MAAM;EACNC,MAAMG;EACNN,UALeT,iBAAiBU,IAAIN,YAAAA;EAMpCc,QAAQ;EACRC,SAAS;EACTC,QAAQ;GACNb,WAAW;GACXG,WAAWM,WAAWK;GACtBb,WAAK;GACP;EACAK,iBAAAA;EAGF;;;;;;;;;;;;;;;;;;;;;;GChEF,SAAgBS,WAAWG,UAA6B,EAAE,EAAA;AACxD,QAAO,SAAUC,QAAiB;EAChC,MAAMC,UAAUH,mBAAmBE,OAAAA;AAOnC,UAJEG,OAAOC,KAAKL,QAAAA,CAASM,WAAW,IAC5BR,yCAAAA,GAEAA,wCAAmBE,QAAAA,EACAC,QAAQC,QAAAA;;;;;;;;;;;;;;;;;;;;;;;GCZrC,SAAgBK,QAAQG,UAA0B,EAAE,EAAA;AAClD,QAAO,SAAUC,QAAiB;EAChC,MAAMC,UAAUH,mBAAmBE,OAAAA;AAMnC,UAHEG,OAAOC,KAAKL,QAAAA,CAASM,WAAW,IAC5BR,mCAAAA,GACAA,kCAAgBE,QAAAA,EACGC,QAAQC,QAAAA"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { w as ClassType } from "../registry-DKbKWFvJ.cjs";
|
|
2
|
+
import { i as FactoryOptions, n as InjectableOptions } from "../injectable.decorator-BNfWpjr_.cjs";
|
|
3
|
+
|
|
4
|
+
//#region src/legacy-compat/injectable.decorator.d.mts
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Legacy-compatible Injectable decorator.
|
|
8
|
+
*
|
|
9
|
+
* Works with TypeScript experimental decorators (legacy API).
|
|
10
|
+
*
|
|
11
|
+
* @param options - Injectable configuration options
|
|
12
|
+
* @returns A class decorator compatible with legacy decorator API
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* @Injectable()
|
|
17
|
+
* export class UserService {
|
|
18
|
+
* getUser(id: string) {
|
|
19
|
+
* return { id, name: 'John' }
|
|
20
|
+
* }
|
|
21
|
+
* }
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
declare function Injectable(options?: InjectableOptions): (target: ClassType) => ClassType;
|
|
25
|
+
//#endregion
|
|
26
|
+
//#region src/legacy-compat/factory.decorator.d.mts
|
|
27
|
+
/**
|
|
28
|
+
* Legacy-compatible Factory decorator.
|
|
29
|
+
*
|
|
30
|
+
* Works with TypeScript experimental decorators (legacy API).
|
|
31
|
+
*
|
|
32
|
+
* @param options - Factory configuration options
|
|
33
|
+
* @returns A class decorator compatible with legacy decorator API
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```typescript
|
|
37
|
+
* @Factory()
|
|
38
|
+
* export class DatabaseConnectionFactory {
|
|
39
|
+
* create() {
|
|
40
|
+
* return { host: 'localhost', port: 5432 }
|
|
41
|
+
* }
|
|
42
|
+
* }
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
declare function Factory(options?: FactoryOptions): (target: ClassType) => ClassType;
|
|
46
|
+
//#endregion
|
|
47
|
+
//#region src/legacy-compat/context-compat.d.mts
|
|
48
|
+
/**
|
|
49
|
+
* Creates a mock ClassDecoratorContext for legacy class decorators.
|
|
50
|
+
* @internal
|
|
51
|
+
*/
|
|
52
|
+
declare function createClassContext(target: ClassType): ClassDecoratorContext;
|
|
53
|
+
/**
|
|
54
|
+
* Creates a mock ClassMethodDecoratorContext for legacy method decorators.
|
|
55
|
+
*
|
|
56
|
+
* Note: Method decorators need to share metadata with the class context
|
|
57
|
+
* because endpoint metadata is stored at the class level.
|
|
58
|
+
* @internal
|
|
59
|
+
*/
|
|
60
|
+
declare function createMethodContext(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor): ClassMethodDecoratorContext;
|
|
61
|
+
//#endregion
|
|
62
|
+
export { Factory, type FactoryOptions, Injectable, type InjectableOptions, createClassContext, createMethodContext };
|
|
63
|
+
//# sourceMappingURL=index.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../../src/legacy-compat/injectable.decorator.mts","../../src/legacy-compat/factory.decorator.mts","../../src/legacy-compat/context-compat.mts"],"sourcesContent":[],"mappings":";;;;;;AA6BA;;;;;;;;ACHA;;;;;;;;ACQA;AAwBgB,iBF7BA,UAAA,CE6BmB,OAIhC,CADW,EFhCsB,iBEiCjC,CAAA,EAAA,CAAA,MAAA,EFhCwB,SEgCxB,EAAA,GFhCiC,SEgCN;;;;AFjC9B;;;;;;;;ACHA;;;;;;;;ACQA;AAwBgB,iBDhCA,OAAA,CCgCmB,OAGrB,CAAA,EDnCmB,cCmCnB,CAAA,EACX,CAAA,MAAA,EDnCwB,SCmCxB,EAAA,GDnCiC,SCmCN;;;;;;;iBA5Bd,kBAAA,SAA2B,YAAY;ADRvD;;;;;;;iBCgCgB,mBAAA,wDAGF,qBACX"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { w as ClassType } from "../registry-n8JhJoxm.mjs";
|
|
2
|
+
import { i as FactoryOptions, n as InjectableOptions } from "../injectable.decorator-Bc05hRQU.mjs";
|
|
3
|
+
|
|
4
|
+
//#region src/legacy-compat/injectable.decorator.d.mts
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Legacy-compatible Injectable decorator.
|
|
8
|
+
*
|
|
9
|
+
* Works with TypeScript experimental decorators (legacy API).
|
|
10
|
+
*
|
|
11
|
+
* @param options - Injectable configuration options
|
|
12
|
+
* @returns A class decorator compatible with legacy decorator API
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* @Injectable()
|
|
17
|
+
* export class UserService {
|
|
18
|
+
* getUser(id: string) {
|
|
19
|
+
* return { id, name: 'John' }
|
|
20
|
+
* }
|
|
21
|
+
* }
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
declare function Injectable(options?: InjectableOptions): (target: ClassType) => ClassType;
|
|
25
|
+
//#endregion
|
|
26
|
+
//#region src/legacy-compat/factory.decorator.d.mts
|
|
27
|
+
/**
|
|
28
|
+
* Legacy-compatible Factory decorator.
|
|
29
|
+
*
|
|
30
|
+
* Works with TypeScript experimental decorators (legacy API).
|
|
31
|
+
*
|
|
32
|
+
* @param options - Factory configuration options
|
|
33
|
+
* @returns A class decorator compatible with legacy decorator API
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```typescript
|
|
37
|
+
* @Factory()
|
|
38
|
+
* export class DatabaseConnectionFactory {
|
|
39
|
+
* create() {
|
|
40
|
+
* return { host: 'localhost', port: 5432 }
|
|
41
|
+
* }
|
|
42
|
+
* }
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
declare function Factory(options?: FactoryOptions): (target: ClassType) => ClassType;
|
|
46
|
+
//#endregion
|
|
47
|
+
//#region src/legacy-compat/context-compat.d.mts
|
|
48
|
+
/**
|
|
49
|
+
* Creates a mock ClassDecoratorContext for legacy class decorators.
|
|
50
|
+
* @internal
|
|
51
|
+
*/
|
|
52
|
+
declare function createClassContext(target: ClassType): ClassDecoratorContext;
|
|
53
|
+
/**
|
|
54
|
+
* Creates a mock ClassMethodDecoratorContext for legacy method decorators.
|
|
55
|
+
*
|
|
56
|
+
* Note: Method decorators need to share metadata with the class context
|
|
57
|
+
* because endpoint metadata is stored at the class level.
|
|
58
|
+
* @internal
|
|
59
|
+
*/
|
|
60
|
+
declare function createMethodContext(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor): ClassMethodDecoratorContext;
|
|
61
|
+
//#endregion
|
|
62
|
+
export { Factory, type FactoryOptions, Injectable, type InjectableOptions, createClassContext, createMethodContext };
|
|
63
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/legacy-compat/injectable.decorator.mts","../../src/legacy-compat/factory.decorator.mts","../../src/legacy-compat/context-compat.mts"],"sourcesContent":[],"mappings":";;;;;;AA6BA;;;;;;;;ACHA;;;;;;;;ACQA;AAwBgB,iBF7BA,UAAA,CE6BmB,OAIhC,CADW,EFhCsB,iBEiCjC,CAAA,EAAA,CAAA,MAAA,EFhCwB,SEgCxB,EAA2B,GFhCM,SEgCN;;;;AFjC9B;;;;;;;;ACHA;;;;;;;;ACQA;AAwBgB,iBDhCA,OAAA,CCgCmB,OAGrB,CAAA,EDnCmB,cCmCnB,CACX,EAAA,CAAA,MAAA,EDnCwB,SCmCxB,EAAA,GDnCiC,SCmCN;;;;;;;iBA5Bd,kBAAA,SAA2B,YAAY;ADRvD;;;;;;;iBCgCgB,mBAAA,wDAGF,qBACX"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { t as Injectable$1 } from "../injectable.decorator-CyPrBzBN.mjs";
|
|
2
|
+
import { t as Factory$1 } from "../factory.decorator-_IPWcwQn.mjs";
|
|
3
|
+
|
|
4
|
+
//#region src/legacy-compat/context-compat.mts
|
|
5
|
+
/**
|
|
6
|
+
* Compatibility layer for converting legacy decorator signatures to Stage 3 format.
|
|
7
|
+
*
|
|
8
|
+
* This module provides utilities to create mock Stage 3 decorator contexts
|
|
9
|
+
* from legacy decorator arguments, and manages metadata storage using WeakMap.
|
|
10
|
+
*/ const classMetadataMap = /* @__PURE__ */ new WeakMap();
|
|
11
|
+
/**
|
|
12
|
+
* Gets the constructor from a prototype (for method decorators).
|
|
13
|
+
*/ function getConstructor(prototype) {
|
|
14
|
+
if (!prototype || typeof prototype !== "object") return null;
|
|
15
|
+
const constructor = prototype.constructor;
|
|
16
|
+
if (constructor && typeof constructor === "function") return constructor;
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Creates a mock ClassDecoratorContext for legacy class decorators.
|
|
21
|
+
* @internal
|
|
22
|
+
*/ function createClassContext(target) {
|
|
23
|
+
if (!classMetadataMap.has(target)) classMetadataMap.set(target, {});
|
|
24
|
+
const metadata = classMetadataMap.get(target);
|
|
25
|
+
return {
|
|
26
|
+
kind: "class",
|
|
27
|
+
name: target.name,
|
|
28
|
+
metadata,
|
|
29
|
+
addInitializer() {}
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Creates a mock ClassMethodDecoratorContext for legacy method decorators.
|
|
34
|
+
*
|
|
35
|
+
* Note: Method decorators need to share metadata with the class context
|
|
36
|
+
* because endpoint metadata is stored at the class level.
|
|
37
|
+
* @internal
|
|
38
|
+
*/ function createMethodContext(target, propertyKey, descriptor) {
|
|
39
|
+
const constructor = getConstructor(target);
|
|
40
|
+
if (!constructor) throw new Error("[Navios] Could not determine class constructor from method decorator target.");
|
|
41
|
+
if (!classMetadataMap.has(constructor)) classMetadataMap.set(constructor, {});
|
|
42
|
+
return {
|
|
43
|
+
kind: "method",
|
|
44
|
+
name: propertyKey,
|
|
45
|
+
metadata: classMetadataMap.get(constructor),
|
|
46
|
+
static: false,
|
|
47
|
+
private: false,
|
|
48
|
+
access: {
|
|
49
|
+
has: () => true,
|
|
50
|
+
get: () => descriptor.value,
|
|
51
|
+
set: () => {}
|
|
52
|
+
},
|
|
53
|
+
addInitializer() {}
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
//#endregion
|
|
58
|
+
//#region src/legacy-compat/injectable.decorator.mts
|
|
59
|
+
/**
|
|
60
|
+
* Legacy-compatible Injectable decorator.
|
|
61
|
+
*
|
|
62
|
+
* Works with TypeScript experimental decorators (legacy API).
|
|
63
|
+
*
|
|
64
|
+
* @param options - Injectable configuration options
|
|
65
|
+
* @returns A class decorator compatible with legacy decorator API
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* ```typescript
|
|
69
|
+
* @Injectable()
|
|
70
|
+
* export class UserService {
|
|
71
|
+
* getUser(id: string) {
|
|
72
|
+
* return { id, name: 'John' }
|
|
73
|
+
* }
|
|
74
|
+
* }
|
|
75
|
+
* ```
|
|
76
|
+
*/ function Injectable(options = {}) {
|
|
77
|
+
return function(target) {
|
|
78
|
+
const context = createClassContext(target);
|
|
79
|
+
return (Object.keys(options).length === 0 ? Injectable$1() : Injectable$1(options))(target, context);
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
//#endregion
|
|
84
|
+
//#region src/legacy-compat/factory.decorator.mts
|
|
85
|
+
/**
|
|
86
|
+
* Legacy-compatible Factory decorator.
|
|
87
|
+
*
|
|
88
|
+
* Works with TypeScript experimental decorators (legacy API).
|
|
89
|
+
*
|
|
90
|
+
* @param options - Factory configuration options
|
|
91
|
+
* @returns A class decorator compatible with legacy decorator API
|
|
92
|
+
*
|
|
93
|
+
* @example
|
|
94
|
+
* ```typescript
|
|
95
|
+
* @Factory()
|
|
96
|
+
* export class DatabaseConnectionFactory {
|
|
97
|
+
* create() {
|
|
98
|
+
* return { host: 'localhost', port: 5432 }
|
|
99
|
+
* }
|
|
100
|
+
* }
|
|
101
|
+
* ```
|
|
102
|
+
*/ function Factory(options = {}) {
|
|
103
|
+
return function(target) {
|
|
104
|
+
const context = createClassContext(target);
|
|
105
|
+
return (Object.keys(options).length === 0 ? Factory$1() : Factory$1(options))(target, context);
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
//#endregion
|
|
110
|
+
export { Factory, Injectable, createClassContext, createMethodContext };
|
|
111
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["classMetadataMap","WeakMap","getConstructor","prototype","constructor","createClassContext","target","has","set","metadata","get","kind","name","addInitializer","createMethodContext","propertyKey","descriptor","Error","static","private","access","value","Injectable","OriginalInjectable","createClassContext","options","target","context","originalDecorator","Object","keys","length","Factory","OriginalFactory","createClassContext","options","target","context","originalDecorator","Object","keys","length"],"sources":["../../src/legacy-compat/context-compat.mts","../../src/legacy-compat/injectable.decorator.mts","../../src/legacy-compat/factory.decorator.mts"],"sourcesContent":["/**\n * Compatibility layer for converting legacy decorator signatures to Stage 3 format.\n *\n * This module provides utilities to create mock Stage 3 decorator contexts\n * from legacy decorator arguments, and manages metadata storage using WeakMap.\n */\n\nimport type { ClassType } from '../token/injection-token.mjs'\n\n// WeakMap to store metadata for legacy decorators\n// Keyed by class constructor for class decorators\n// For method decorators, we use the class constructor (extracted from the prototype)\nconst classMetadataMap = new WeakMap<ClassType, Record<string | symbol, any>>()\n\n/**\n * Gets the constructor from a prototype (for method decorators).\n */\nfunction getConstructor(prototype: any): ClassType | null {\n if (!prototype || typeof prototype !== 'object') {\n return null\n }\n // In legacy decorators, target is the prototype\n // The constructor is typically available via prototype.constructor\n const constructor = prototype.constructor\n if (constructor && typeof constructor === 'function') {\n return constructor as ClassType\n }\n return null\n}\n\n/**\n * Creates a mock ClassDecoratorContext for legacy class decorators.\n * @internal\n */\nexport function createClassContext(target: ClassType): ClassDecoratorContext {\n // Get or create metadata storage for this class\n if (!classMetadataMap.has(target)) {\n classMetadataMap.set(target, {})\n }\n const metadata = classMetadataMap.get(target)!\n\n return {\n kind: 'class',\n name: target.name,\n metadata,\n addInitializer() {\n // Legacy decorators don't support initializers\n },\n } as ClassDecoratorContext\n}\n\n/**\n * Creates a mock ClassMethodDecoratorContext for legacy method decorators.\n *\n * Note: Method decorators need to share metadata with the class context\n * because endpoint metadata is stored at the class level.\n * @internal\n */\nexport function createMethodContext(\n target: any,\n propertyKey: string | symbol,\n descriptor: PropertyDescriptor,\n): ClassMethodDecoratorContext {\n // For method decorators, target is the prototype\n // We need to get the class constructor to access class-level metadata\n const constructor = getConstructor(target)\n if (!constructor) {\n throw new Error(\n '[Navios] Could not determine class constructor from method decorator target.',\n )\n }\n\n // Get or create metadata storage for the class\n // Method decorators share metadata with the class\n if (!classMetadataMap.has(constructor)) {\n classMetadataMap.set(constructor, {})\n }\n const metadata = classMetadataMap.get(constructor)!\n\n return {\n kind: 'method',\n name: propertyKey,\n metadata,\n static: false, // We can't determine this from legacy decorators\n private: false, // We can't determine this from legacy decorators\n access: {\n has: () => true,\n get: () => descriptor.value,\n set: () => {},\n },\n addInitializer() {\n // Legacy decorators don't support initializers\n },\n } as ClassMethodDecoratorContext\n}\n","import type { ClassType } from '../token/injection-token.mjs'\n\nimport {\n Injectable as OriginalInjectable,\n type InjectableOptions,\n} from '../decorators/index.mjs'\n\nimport { createClassContext } from './context-compat.mjs'\n\nexport type { InjectableOptions }\n\n/**\n * Legacy-compatible Injectable decorator.\n *\n * Works with TypeScript experimental decorators (legacy API).\n *\n * @param options - Injectable configuration options\n * @returns A class decorator compatible with legacy decorator API\n *\n * @example\n * ```typescript\n * @Injectable()\n * export class UserService {\n * getUser(id: string) {\n * return { id, name: 'John' }\n * }\n * }\n * ```\n */\nexport function Injectable(options: InjectableOptions = {}) {\n return function (target: ClassType) {\n const context = createClassContext(target)\n // Use the no-args overload when options is empty, otherwise pass options\n const originalDecorator =\n Object.keys(options).length === 0\n ? OriginalInjectable()\n : // @ts-expect-error - InjectableOptions is a union type, we let runtime handle it\n OriginalInjectable(options)\n return originalDecorator(target, context)\n }\n}\n","import type { ClassType } from '../token/injection-token.mjs'\n\nimport { Factory as OriginalFactory, type FactoryOptions } from '../decorators/index.mjs'\n\nimport { createClassContext } from './context-compat.mjs'\n\nexport type { FactoryOptions }\n\n/**\n * Legacy-compatible Factory decorator.\n *\n * Works with TypeScript experimental decorators (legacy API).\n *\n * @param options - Factory configuration options\n * @returns A class decorator compatible with legacy decorator API\n *\n * @example\n * ```typescript\n * @Factory()\n * export class DatabaseConnectionFactory {\n * create() {\n * return { host: 'localhost', port: 5432 }\n * }\n * }\n * ```\n */\nexport function Factory(options: FactoryOptions = {}) {\n return function (target: ClassType) {\n const context = createClassContext(target)\n // Use the no-args overload when options is empty, otherwise pass options\n const originalDecorator =\n Object.keys(options).length === 0\n ? OriginalFactory()\n : OriginalFactory(options)\n return originalDecorator(target, context)\n }\n}\n"],"mappings":";;;;;;;;;GAYA,MAAMA,mCAAmB,IAAIC,SAAAA;;;GAK7B,SAASC,eAAeC,WAAc;AACpC,KAAI,CAACA,aAAa,OAAOA,cAAc,SACrC,QAAO;CAIT,MAAMC,cAAcD,UAAU;AAC9B,KAAIC,eAAe,OAAOA,gBAAgB,WACxC,QAAOA;AAET,QAAO;;;;;GAOT,SAAgBC,mBAAmBC,QAAiB;AAElD,KAAI,CAACN,iBAAiBO,IAAID,OAAAA,CACxBN,kBAAiBQ,IAAIF,QAAQ,EAAC,CAAA;CAEhC,MAAMG,WAAWT,iBAAiBU,IAAIJ,OAAAA;AAEtC,QAAO;EACLK,MAAM;EACNC,MAAMN,OAAOM;EACbH;EACAI,iBAAAA;EAGF;;;;;;;;GAUF,SAAgBC,oBACdR,QACAS,aACAC,YAA8B;CAI9B,MAAMZ,cAAcF,eAAeI,OAAAA;AACnC,KAAI,CAACF,YACH,OAAM,IAAIa,MACR,+EAAA;AAMJ,KAAI,CAACjB,iBAAiBO,IAAIH,YAAAA,CACxBJ,kBAAiBQ,IAAIJ,aAAa,EAAC,CAAA;AAIrC,QAAO;EACLO,MAAM;EACNC,MAAMG;EACNN,UALeT,iBAAiBU,IAAIN,YAAAA;EAMpCc,QAAQ;EACRC,SAAS;EACTC,QAAQ;GACNb,WAAW;GACXG,WAAWM,WAAWK;GACtBb,WAAK;GACP;EACAK,iBAAAA;EAGF;;;;;;;;;;;;;;;;;;;;;;GChEF,SAAgBS,WAAWG,UAA6B,EAAE,EAAA;AACxD,QAAO,SAAUC,QAAiB;EAChC,MAAMC,UAAUH,mBAAmBE,OAAAA;AAOnC,UAJEG,OAAOC,KAAKL,QAAAA,CAASM,WAAW,IAC5BR,cAAAA,GAEAA,aAAmBE,QAAAA,EACAC,QAAQC,QAAAA;;;;;;;;;;;;;;;;;;;;;;;GCZrC,SAAgBK,QAAQG,UAA0B,EAAE,EAAA;AAClD,QAAO,SAAUC,QAAiB;EAChC,MAAMC,UAAUH,mBAAmBE,OAAAA;AAMnC,UAHEG,OAAOC,KAAKL,QAAAA,CAASM,WAAW,IAC5BR,WAAAA,GACAA,UAAgBE,QAAAA,EACGC,QAAQC,QAAAA"}
|