@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.
Files changed (178) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +28 -0
  3. package/coverage/block-navigation.js +1 -1
  4. package/coverage/clover.xml +1463 -3174
  5. package/coverage/coverage-final.json +56 -54
  6. package/coverage/index.html +179 -104
  7. package/coverage/sorter.js +21 -7
  8. package/coverage/src/{request-context-manager.mts.html → __tests__/gc/gc-test-utils.mts.html} +192 -231
  9. package/coverage/{lib → src/__tests__/gc}/index.html +25 -40
  10. package/coverage/src/container/abstract-container.mts.html +1066 -0
  11. package/coverage/src/container/container.mts.html +958 -0
  12. package/coverage/src/container/index.html +161 -0
  13. package/coverage/src/{testing → container}/index.mts.html +12 -9
  14. package/coverage/src/container/scoped-container.mts.html +907 -0
  15. package/coverage/src/decorators/factory.decorator.mts.html +68 -53
  16. package/coverage/src/decorators/index.html +34 -34
  17. package/coverage/src/decorators/index.mts.html +10 -10
  18. package/coverage/src/decorators/injectable.decorator.mts.html +144 -60
  19. package/coverage/src/enums/index.html +21 -21
  20. package/coverage/src/enums/index.mts.html +12 -12
  21. package/coverage/src/enums/injectable-scope.enum.mts.html +11 -8
  22. package/coverage/src/enums/injectable-type.enum.mts.html +10 -7
  23. package/coverage/src/errors/di-error.mts.html +380 -71
  24. package/coverage/src/errors/index.html +22 -127
  25. package/coverage/src/errors/index.mts.html +9 -33
  26. package/coverage/src/event-emitter.mts.html +35 -107
  27. package/coverage/src/index.html +14 -254
  28. package/coverage/src/index.mts.html +23 -50
  29. package/coverage/src/interfaces/container.interface.mts.html +370 -0
  30. package/coverage/src/interfaces/factory.interface.mts.html +12 -12
  31. package/coverage/src/interfaces/index.html +45 -30
  32. package/coverage/src/interfaces/index.mts.html +16 -13
  33. package/coverage/src/interfaces/on-service-destroy.interface.mts.html +1 -1
  34. package/coverage/src/interfaces/on-service-init.interface.mts.html +1 -1
  35. package/coverage/src/internal/context/async-local-storage.browser.mts.html +142 -0
  36. package/coverage/src/internal/context/async-local-storage.mts.html +292 -0
  37. package/coverage/src/{factory-context.mts.html → internal/context/async-local-storage.types.mts.html} +17 -17
  38. package/coverage/src/internal/context/factory-context.mts.html +142 -0
  39. package/coverage/src/internal/context/index.html +221 -0
  40. package/coverage/src/internal/context/index.mts.html +100 -0
  41. package/coverage/src/{service-locator-instance-holder.mts.html → internal/context/resolution-context.mts.html} +114 -78
  42. package/coverage/src/internal/context/service-initialization-context.mts.html +214 -0
  43. package/coverage/src/internal/context/sync-local-storage.mts.html +244 -0
  44. package/coverage/src/internal/core/index.html +206 -0
  45. package/coverage/src/internal/core/index.mts.html +103 -0
  46. package/coverage/src/internal/core/instance-resolver.mts.html +2533 -0
  47. package/coverage/src/{request-context-holder.mts.html → internal/core/name-resolver.mts.html} +245 -260
  48. package/coverage/src/{container.mts.html → internal/core/scope-tracker.mts.html} +352 -310
  49. package/coverage/src/{service-instantiator.mts.html → internal/core/service-initializer.mts.html} +254 -176
  50. package/coverage/src/internal/core/service-invalidator.mts.html +955 -0
  51. package/coverage/src/internal/core/token-resolver.mts.html +451 -0
  52. package/coverage/src/internal/holder/holder-storage.interface.mts.html +451 -0
  53. package/coverage/src/internal/holder/index.html +161 -0
  54. package/coverage/src/internal/holder/index.mts.html +94 -0
  55. package/coverage/src/internal/holder/instance-holder.mts.html +406 -0
  56. package/coverage/src/{service-locator.mts.html → internal/holder/unified-storage.mts.html} +376 -379
  57. package/coverage/{lib/testing → src/internal}/index.html +26 -11
  58. package/coverage/src/internal/index.mts.html +100 -0
  59. package/coverage/src/internal/lifecycle/circular-detector.mts.html +364 -0
  60. package/coverage/src/internal/lifecycle/index.html +146 -0
  61. package/coverage/src/internal/lifecycle/index.mts.html +91 -0
  62. package/coverage/src/{service-locator-event-bus.mts.html → internal/lifecycle/lifecycle-event-bus.mts.html} +104 -80
  63. package/coverage/src/internal/stub-factory-class.mts.html +133 -0
  64. package/coverage/src/symbols/index.html +14 -14
  65. package/coverage/src/symbols/index.mts.html +9 -9
  66. package/coverage/src/symbols/injectable-token.mts.html +9 -3
  67. package/coverage/src/testing/index.html +32 -32
  68. package/coverage/src/testing/test-container.mts.html +1576 -139
  69. package/coverage/src/testing/unit-test-container.mts.html +1888 -0
  70. package/coverage/src/token/index.html +146 -0
  71. package/coverage/{lib/testing/index.d.mts.html → src/token/index.mts.html} +11 -11
  72. package/coverage/src/{injection-token.mts.html → token/injection-token.mts.html} +225 -111
  73. package/coverage/src/{base-instance-holder-manager.mts.html → token/registry.mts.html} +188 -269
  74. package/coverage/src/{injector.mts.html → utils/default-injectors.mts.html} +31 -31
  75. package/coverage/src/utils/get-injectable-token.mts.html +19 -22
  76. package/coverage/src/utils/get-injectors.mts.html +684 -177
  77. package/coverage/src/utils/index.html +36 -36
  78. package/coverage/src/utils/index.mts.html +18 -12
  79. package/coverage/src/utils/types.mts.html +26 -11
  80. package/docs/examples/basic-usage.mts +1 -1
  81. package/docs/examples/factory-pattern.mts +3 -3
  82. package/docs/examples/request-scope-example.mts +1 -1
  83. package/docs/examples/service-lifecycle.mts +1 -1
  84. package/lib/browser/internal/core/instance-resolver.d.mts.map +1 -1
  85. package/lib/browser/internal/core/instance-resolver.mjs.map +1 -1
  86. package/lib/browser/utils/get-injectors.mjs +9 -12
  87. package/lib/browser/utils/get-injectors.mjs.map +1 -1
  88. package/lib/{container-D-0Ho3qL.d.cts → container-D3j3KuD9.d.mts} +5 -289
  89. package/lib/container-D3j3KuD9.d.mts.map +1 -0
  90. package/lib/{container-8-z89TyQ.mjs → container-qgHMgGNG.mjs} +12 -239
  91. package/lib/container-qgHMgGNG.mjs.map +1 -0
  92. package/lib/{container-CNiqesCL.d.mts → container-r1KP4F-n.d.cts} +5 -289
  93. package/lib/container-r1KP4F-n.d.cts.map +1 -0
  94. package/lib/{container-CaY2fDuk.cjs → container-ycYJgTq7.cjs} +50 -331
  95. package/lib/container-ycYJgTq7.cjs.map +1 -0
  96. package/lib/factory.decorator-D4mem6YQ.cjs +21 -0
  97. package/lib/factory.decorator-D4mem6YQ.cjs.map +1 -0
  98. package/lib/factory.decorator-_IPWcwQn.mjs +16 -0
  99. package/lib/factory.decorator-_IPWcwQn.mjs.map +1 -0
  100. package/lib/index.cjs +14 -24
  101. package/lib/index.cjs.map +1 -1
  102. package/lib/index.d.cts +3 -52
  103. package/lib/index.d.cts.map +1 -1
  104. package/lib/index.d.mts +3 -52
  105. package/lib/index.d.mts.map +1 -1
  106. package/lib/index.mjs +3 -13
  107. package/lib/index.mjs.map +1 -1
  108. package/lib/injectable.decorator-BNfWpjr_.d.cts +56 -0
  109. package/lib/injectable.decorator-BNfWpjr_.d.cts.map +1 -0
  110. package/lib/injectable.decorator-Bc05hRQU.d.mts +56 -0
  111. package/lib/injectable.decorator-Bc05hRQU.d.mts.map +1 -0
  112. package/lib/injectable.decorator-CyPrBzBN.mjs +227 -0
  113. package/lib/injectable.decorator-CyPrBzBN.mjs.map +1 -0
  114. package/lib/injectable.decorator-DbpiDrg-.cjs +281 -0
  115. package/lib/injectable.decorator-DbpiDrg-.cjs.map +1 -0
  116. package/lib/legacy-compat/index.cjs +114 -0
  117. package/lib/legacy-compat/index.cjs.map +1 -0
  118. package/lib/legacy-compat/index.d.cts +63 -0
  119. package/lib/legacy-compat/index.d.cts.map +1 -0
  120. package/lib/legacy-compat/index.d.mts +63 -0
  121. package/lib/legacy-compat/index.d.mts.map +1 -0
  122. package/lib/legacy-compat/index.mjs +111 -0
  123. package/lib/legacy-compat/index.mjs.map +1 -0
  124. package/lib/registry-DKbKWFvJ.d.cts +290 -0
  125. package/lib/registry-DKbKWFvJ.d.cts.map +1 -0
  126. package/lib/registry-n8JhJoxm.d.mts +290 -0
  127. package/lib/registry-n8JhJoxm.d.mts.map +1 -0
  128. package/lib/testing/index.cjs +23 -22
  129. package/lib/testing/index.cjs.map +1 -1
  130. package/lib/testing/index.d.cts +2 -1
  131. package/lib/testing/index.d.cts.map +1 -1
  132. package/lib/testing/index.d.mts +2 -1
  133. package/lib/testing/index.d.mts.map +1 -1
  134. package/lib/testing/index.mjs +2 -1
  135. package/lib/testing/index.mjs.map +1 -1
  136. package/package.json +11 -1
  137. package/project.json +8 -0
  138. package/src/__tests__/gc/basic-container.spec.mts +358 -0
  139. package/src/__tests__/gc/circular-dependencies.spec.mts +501 -0
  140. package/src/__tests__/gc/gc-test-utils.mts +136 -0
  141. package/src/__tests__/gc/memory-pressure.spec.mts +542 -0
  142. package/src/__tests__/gc/scoped-container.spec.mts +444 -0
  143. package/src/__tests__/gc/transient-services.spec.mts +326 -0
  144. package/src/__tests__/get-injectors.spec.mts +166 -0
  145. package/src/__tests__/scope-upgrade.spec.mts +0 -18
  146. package/src/internal/core/instance-resolver.mts +0 -1
  147. package/src/legacy-compat/context-compat.mts +95 -0
  148. package/src/legacy-compat/factory.decorator.mts +37 -0
  149. package/src/legacy-compat/index.mts +16 -0
  150. package/src/legacy-compat/injectable.decorator.mts +41 -0
  151. package/src/utils/get-injectors.mts +36 -32
  152. package/tsdown.config.mts +1 -1
  153. package/vitest.config.mts +3 -7
  154. package/coverage/docs/examples/basic-usage.mts.html +0 -376
  155. package/coverage/docs/examples/factory-pattern.mts.html +0 -1039
  156. package/coverage/docs/examples/index.html +0 -176
  157. package/coverage/docs/examples/injection-tokens.mts.html +0 -760
  158. package/coverage/docs/examples/request-scope-example.mts.html +0 -847
  159. package/coverage/docs/examples/service-lifecycle.mts.html +0 -1162
  160. package/coverage/lib/_tsup-dts-rollup.d.mts.html +0 -3445
  161. package/coverage/lib/index.d.mts.html +0 -313
  162. package/coverage/src/errors/errors.enum.mts.html +0 -118
  163. package/coverage/src/errors/factory-not-found.mts.html +0 -118
  164. package/coverage/src/errors/factory-token-not-resolved.mts.html +0 -118
  165. package/coverage/src/errors/instance-destroying.mts.html +0 -118
  166. package/coverage/src/errors/instance-expired.mts.html +0 -118
  167. package/coverage/src/errors/instance-not-found.mts.html +0 -118
  168. package/coverage/src/errors/unknown-error.mts.html +0 -118
  169. package/coverage/src/instance-resolver.mts.html +0 -1762
  170. package/coverage/src/registry.mts.html +0 -247
  171. package/coverage/src/service-invalidator.mts.html +0 -1372
  172. package/coverage/src/service-locator-manager.mts.html +0 -340
  173. package/coverage/src/token-processor.mts.html +0 -607
  174. package/coverage/src/utils/defer.mts.html +0 -118
  175. package/lib/container-8-z89TyQ.mjs.map +0 -1
  176. package/lib/container-CNiqesCL.d.mts.map +0 -1
  177. package/lib/container-CaY2fDuk.cjs.map +0 -1
  178. 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"}