@depup/nestjs__core 11.1.17-depup.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 (371) hide show
  1. package/LICENSE +22 -0
  2. package/PACKAGE.md +1 -0
  3. package/README.md +25 -0
  4. package/Readme.md +146 -0
  5. package/adapters/http-adapter.d.ts +80 -0
  6. package/adapters/http-adapter.js +90 -0
  7. package/adapters/index.d.ts +1 -0
  8. package/adapters/index.js +4 -0
  9. package/application-config.d.ts +47 -0
  10. package/application-config.js +107 -0
  11. package/changes.json +5 -0
  12. package/constants.d.ts +14 -0
  13. package/constants.js +21 -0
  14. package/discovery/discoverable-meta-host-collection.d.ts +46 -0
  15. package/discovery/discoverable-meta-host-collection.js +98 -0
  16. package/discovery/discovery-module.d.ts +5 -0
  17. package/discovery/discovery-module.js +19 -0
  18. package/discovery/discovery-service.d.ts +76 -0
  19. package/discovery/discovery-service.js +98 -0
  20. package/discovery/index.d.ts +2 -0
  21. package/discovery/index.js +5 -0
  22. package/errors/exception-handler.d.ts +4 -0
  23. package/errors/exception-handler.js +11 -0
  24. package/errors/exceptions/circular-dependency.exception.d.ts +4 -0
  25. package/errors/exceptions/circular-dependency.exception.js +11 -0
  26. package/errors/exceptions/index.d.ts +8 -0
  27. package/errors/exceptions/index.js +11 -0
  28. package/errors/exceptions/invalid-class-module.exception.d.ts +4 -0
  29. package/errors/exceptions/invalid-class-module.exception.js +11 -0
  30. package/errors/exceptions/invalid-class-scope.exception.d.ts +5 -0
  31. package/errors/exceptions/invalid-class-scope.exception.js +16 -0
  32. package/errors/exceptions/invalid-class.exception.d.ts +4 -0
  33. package/errors/exceptions/invalid-class.exception.js +11 -0
  34. package/errors/exceptions/invalid-exception-filter.exception.d.ts +4 -0
  35. package/errors/exceptions/invalid-exception-filter.exception.js +11 -0
  36. package/errors/exceptions/invalid-middleware-configuration.exception.d.ts +4 -0
  37. package/errors/exceptions/invalid-middleware-configuration.exception.js +11 -0
  38. package/errors/exceptions/invalid-middleware.exception.d.ts +4 -0
  39. package/errors/exceptions/invalid-middleware.exception.js +11 -0
  40. package/errors/exceptions/invalid-module.exception.d.ts +4 -0
  41. package/errors/exceptions/invalid-module.exception.js +11 -0
  42. package/errors/exceptions/runtime.exception.d.ts +4 -0
  43. package/errors/exceptions/runtime.exception.js +12 -0
  44. package/errors/exceptions/undefined-dependency.exception.d.ts +6 -0
  45. package/errors/exceptions/undefined-dependency.exception.js +11 -0
  46. package/errors/exceptions/undefined-forwardref.exception.d.ts +5 -0
  47. package/errors/exceptions/undefined-forwardref.exception.js +11 -0
  48. package/errors/exceptions/undefined-module.exception.d.ts +4 -0
  49. package/errors/exceptions/undefined-module.exception.js +11 -0
  50. package/errors/exceptions/unknown-dependencies.exception.d.ts +16 -0
  51. package/errors/exceptions/unknown-dependencies.exception.js +15 -0
  52. package/errors/exceptions/unknown-element.exception.d.ts +4 -0
  53. package/errors/exceptions/unknown-element.exception.js +11 -0
  54. package/errors/exceptions/unknown-export.exception.d.ts +4 -0
  55. package/errors/exceptions/unknown-export.exception.js +11 -0
  56. package/errors/exceptions/unknown-module.exception.d.ts +4 -0
  57. package/errors/exceptions/unknown-module.exception.js +10 -0
  58. package/errors/exceptions/unknown-request-mapping.exception.d.ts +5 -0
  59. package/errors/exceptions/unknown-request-mapping.exception.js +11 -0
  60. package/errors/exceptions-zone.d.ts +5 -0
  61. package/errors/exceptions-zone.js +34 -0
  62. package/errors/messages.d.ts +17 -0
  63. package/errors/messages.js +174 -0
  64. package/exceptions/base-exception-filter-context.d.ts +14 -0
  65. package/exceptions/base-exception-filter-context.js +56 -0
  66. package/exceptions/base-exception-filter.d.ts +20 -0
  67. package/exceptions/base-exception-filter.js +72 -0
  68. package/exceptions/exceptions-handler.d.ts +10 -0
  69. package/exceptions/exceptions-handler.js +34 -0
  70. package/exceptions/external-exception-filter-context.d.ts +12 -0
  71. package/exceptions/external-exception-filter-context.js +42 -0
  72. package/exceptions/external-exception-filter.d.ts +5 -0
  73. package/exceptions/external-exception-filter.js +15 -0
  74. package/exceptions/external-exceptions-handler.d.ts +9 -0
  75. package/exceptions/external-exceptions-handler.js +34 -0
  76. package/exceptions/index.d.ts +1 -0
  77. package/exceptions/index.js +4 -0
  78. package/guards/constants.d.ts +1 -0
  79. package/guards/constants.js +4 -0
  80. package/guards/guards-consumer.d.ts +9 -0
  81. package/guards/guards-consumer.js +39 -0
  82. package/guards/guards-context-creator.d.ts +17 -0
  83. package/guards/guards-context-creator.js +70 -0
  84. package/guards/index.d.ts +3 -0
  85. package/guards/index.js +6 -0
  86. package/helpers/barrier.d.ts +30 -0
  87. package/helpers/barrier.js +46 -0
  88. package/helpers/context-creator.d.ts +10 -0
  89. package/helpers/context-creator.js +33 -0
  90. package/helpers/context-id-factory.d.ts +41 -0
  91. package/helpers/context-id-factory.js +67 -0
  92. package/helpers/context-utils.d.ts +23 -0
  93. package/helpers/context-utils.js +55 -0
  94. package/helpers/execution-context-host.d.ts +19 -0
  95. package/helpers/execution-context-host.js +50 -0
  96. package/helpers/external-context-creator.d.ts +51 -0
  97. package/helpers/external-context-creator.js +166 -0
  98. package/helpers/external-proxy.d.ts +5 -0
  99. package/helpers/external-proxy.js +19 -0
  100. package/helpers/get-class-scope.d.ts +3 -0
  101. package/helpers/get-class-scope.js +8 -0
  102. package/helpers/handler-metadata-storage.d.ts +27 -0
  103. package/helpers/handler-metadata-storage.js +26 -0
  104. package/helpers/http-adapter-host.d.ts +51 -0
  105. package/helpers/http-adapter-host.js +73 -0
  106. package/helpers/index.d.ts +3 -0
  107. package/helpers/index.js +6 -0
  108. package/helpers/interfaces/external-handler-metadata.interface.d.ts +11 -0
  109. package/helpers/interfaces/external-handler-metadata.interface.js +2 -0
  110. package/helpers/interfaces/index.d.ts +2 -0
  111. package/helpers/interfaces/index.js +5 -0
  112. package/helpers/interfaces/params-metadata.interface.d.ts +6 -0
  113. package/helpers/interfaces/params-metadata.interface.js +2 -0
  114. package/helpers/is-durable.d.ts +2 -0
  115. package/helpers/is-durable.js +8 -0
  116. package/helpers/load-adapter.d.ts +1 -0
  117. package/helpers/load-adapter.js +15 -0
  118. package/helpers/messages.d.ts +7 -0
  119. package/helpers/messages.js +29 -0
  120. package/helpers/optional-require.d.ts +1 -0
  121. package/helpers/optional-require.js +11 -0
  122. package/helpers/rethrow.d.ts +1 -0
  123. package/helpers/rethrow.js +7 -0
  124. package/helpers/router-method-factory.d.ts +23 -0
  125. package/helpers/router-method-factory.js +33 -0
  126. package/hooks/before-app-shutdown.hook.d.ts +9 -0
  127. package/hooks/before-app-shutdown.hook.js +51 -0
  128. package/hooks/index.d.ts +5 -0
  129. package/hooks/index.js +8 -0
  130. package/hooks/on-app-bootstrap.hook.d.ts +8 -0
  131. package/hooks/on-app-bootstrap.hook.js +53 -0
  132. package/hooks/on-app-shutdown.hook.d.ts +9 -0
  133. package/hooks/on-app-shutdown.hook.js +54 -0
  134. package/hooks/on-module-destroy.hook.d.ts +8 -0
  135. package/hooks/on-module-destroy.hook.js +53 -0
  136. package/hooks/on-module-init.hook.d.ts +8 -0
  137. package/hooks/on-module-init.hook.js +53 -0
  138. package/hooks/utils/get-instances-grouped-by-hierarchy-level.d.ts +3 -0
  139. package/hooks/utils/get-instances-grouped-by-hierarchy-level.js +27 -0
  140. package/hooks/utils/get-sorted-hierarchy-levels.d.ts +1 -0
  141. package/hooks/utils/get-sorted-hierarchy-levels.js +7 -0
  142. package/index.d.ts +17 -0
  143. package/index.js +32 -0
  144. package/injector/abstract-instance-resolver.d.ts +16 -0
  145. package/injector/abstract-instance-resolver.js +49 -0
  146. package/injector/compiler.d.ts +18 -0
  147. package/injector/compiler.js +35 -0
  148. package/injector/constants.d.ts +3 -0
  149. package/injector/constants.js +8 -0
  150. package/injector/container.d.ts +67 -0
  151. package/injector/container.js +233 -0
  152. package/injector/helpers/provider-classifier.d.ts +4 -0
  153. package/injector/helpers/provider-classifier.js +16 -0
  154. package/injector/helpers/silent-logger.d.ts +10 -0
  155. package/injector/helpers/silent-logger.js +18 -0
  156. package/injector/helpers/transient-instances.d.ts +12 -0
  157. package/injector/helpers/transient-instances.js +28 -0
  158. package/injector/index.d.ts +6 -0
  159. package/injector/index.js +8 -0
  160. package/injector/injector.d.ts +104 -0
  161. package/injector/injector.js +554 -0
  162. package/injector/inquirer/index.d.ts +1 -0
  163. package/injector/inquirer/index.js +4 -0
  164. package/injector/inquirer/inquirer-constants.d.ts +1 -0
  165. package/injector/inquirer/inquirer-constants.js +4 -0
  166. package/injector/inquirer/inquirer-providers.d.ts +2 -0
  167. package/injector/inquirer/inquirer-providers.js +11 -0
  168. package/injector/instance-links-host.d.ts +22 -0
  169. package/injector/instance-links-host.js +56 -0
  170. package/injector/instance-loader.d.ts +23 -0
  171. package/injector/instance-loader.js +88 -0
  172. package/injector/instance-wrapper.d.ts +99 -0
  173. package/injector/instance-wrapper.js +350 -0
  174. package/injector/internal-core-module/index.d.ts +1 -0
  175. package/injector/internal-core-module/index.js +4 -0
  176. package/injector/internal-core-module/internal-core-module-factory.d.ts +9 -0
  177. package/injector/internal-core-module/internal-core-module-factory.js +52 -0
  178. package/injector/internal-core-module/internal-core-module.d.ts +5 -0
  179. package/injector/internal-core-module/internal-core-module.js +40 -0
  180. package/injector/internal-providers-storage.d.ts +9 -0
  181. package/injector/internal-providers-storage.js +19 -0
  182. package/injector/lazy-module-loader/lazy-module-loader-options.interface.d.ts +6 -0
  183. package/injector/lazy-module-loader/lazy-module-loader-options.interface.js +2 -0
  184. package/injector/lazy-module-loader/lazy-module-loader.d.ts +20 -0
  185. package/injector/lazy-module-loader/lazy-module-loader.js +49 -0
  186. package/injector/module-ref.d.ts +106 -0
  187. package/injector/module-ref.js +66 -0
  188. package/injector/module.d.ts +82 -0
  189. package/injector/module.js +432 -0
  190. package/injector/modules-container.d.ts +27 -0
  191. package/injector/modules-container.js +42 -0
  192. package/injector/opaque-key-factory/by-reference-module-opaque-key-factory.d.ts +15 -0
  193. package/injector/opaque-key-factory/by-reference-module-opaque-key-factory.js +41 -0
  194. package/injector/opaque-key-factory/deep-hashed-module-opaque-key-factory.d.ts +15 -0
  195. package/injector/opaque-key-factory/deep-hashed-module-opaque-key-factory.js +83 -0
  196. package/injector/opaque-key-factory/interfaces/module-opaque-key-factory.interface.d.ts +18 -0
  197. package/injector/opaque-key-factory/interfaces/module-opaque-key-factory.interface.js +2 -0
  198. package/injector/settlement-signal.d.ts +37 -0
  199. package/injector/settlement-signal.js +55 -0
  200. package/injector/topology-tree/topology-tree.d.ts +8 -0
  201. package/injector/topology-tree/topology-tree.js +51 -0
  202. package/injector/topology-tree/tree-node.d.ts +14 -0
  203. package/injector/topology-tree/tree-node.js +54 -0
  204. package/inspector/deterministic-uuid-registry.d.ts +6 -0
  205. package/inspector/deterministic-uuid-registry.js +24 -0
  206. package/inspector/graph-inspector.d.ts +26 -0
  207. package/inspector/graph-inspector.js +166 -0
  208. package/inspector/index.d.ts +4 -0
  209. package/inspector/index.js +7 -0
  210. package/inspector/initialize-on-preview.allowlist.d.ts +6 -0
  211. package/inspector/initialize-on-preview.allowlist.js +13 -0
  212. package/inspector/interfaces/edge.interface.d.ts +28 -0
  213. package/inspector/interfaces/edge.interface.js +2 -0
  214. package/inspector/interfaces/enhancer-metadata-cache-entry.interface.d.ts +12 -0
  215. package/inspector/interfaces/enhancer-metadata-cache-entry.interface.js +2 -0
  216. package/inspector/interfaces/entrypoint.interface.d.ts +23 -0
  217. package/inspector/interfaces/entrypoint.interface.js +2 -0
  218. package/inspector/interfaces/extras.interface.d.ts +18 -0
  219. package/inspector/interfaces/extras.interface.js +2 -0
  220. package/inspector/interfaces/node.interface.d.ts +48 -0
  221. package/inspector/interfaces/node.interface.js +2 -0
  222. package/inspector/interfaces/serialized-graph-json.interface.d.ts +14 -0
  223. package/inspector/interfaces/serialized-graph-json.interface.js +2 -0
  224. package/inspector/interfaces/serialized-graph-metadata.interface.d.ts +10 -0
  225. package/inspector/interfaces/serialized-graph-metadata.interface.js +2 -0
  226. package/inspector/noop-graph-inspector.d.ts +2 -0
  227. package/inspector/noop-graph-inspector.js +8 -0
  228. package/inspector/partial-graph.host.d.ts +7 -0
  229. package/inspector/partial-graph.host.js +15 -0
  230. package/inspector/serialized-graph.d.ts +52 -0
  231. package/inspector/serialized-graph.js +124 -0
  232. package/inspector/uuid-factory.d.ts +9 -0
  233. package/inspector/uuid-factory.js +22 -0
  234. package/interceptors/index.d.ts +2 -0
  235. package/interceptors/index.js +5 -0
  236. package/interceptors/interceptors-consumer.d.ts +9 -0
  237. package/interceptors/interceptors-consumer.js +37 -0
  238. package/interceptors/interceptors-context-creator.d.ts +16 -0
  239. package/interceptors/interceptors-context-creator.js +69 -0
  240. package/interfaces/index.d.ts +2 -0
  241. package/interfaces/index.js +2 -0
  242. package/interfaces/module-definition.interface.d.ts +3 -0
  243. package/interfaces/module-definition.interface.js +2 -0
  244. package/interfaces/module-override.interface.d.ts +5 -0
  245. package/interfaces/module-override.interface.js +2 -0
  246. package/internal.d.ts +38 -0
  247. package/internal.js +46 -0
  248. package/metadata-scanner.d.ts +17 -0
  249. package/metadata-scanner.js +83 -0
  250. package/middleware/builder.d.ts +15 -0
  251. package/middleware/builder.js +91 -0
  252. package/middleware/container.d.ts +14 -0
  253. package/middleware/container.js +49 -0
  254. package/middleware/index.d.ts +1 -0
  255. package/middleware/index.js +4 -0
  256. package/middleware/middleware-module.d.ts +33 -0
  257. package/middleware/middleware-module.js +208 -0
  258. package/middleware/resolver.d.ts +10 -0
  259. package/middleware/resolver.js +18 -0
  260. package/middleware/route-info-path-extractor.d.ts +15 -0
  261. package/middleware/route-info-path-extractor.js +81 -0
  262. package/middleware/routes-mapper.d.ts +19 -0
  263. package/middleware/routes-mapper.js +117 -0
  264. package/middleware/utils.d.ts +8 -0
  265. package/middleware/utils.js +106 -0
  266. package/nest-application-context.d.ts +173 -0
  267. package/nest-application-context.js +327 -0
  268. package/nest-application.d.ts +64 -0
  269. package/nest-application.js +328 -0
  270. package/nest-factory.d.ts +83 -0
  271. package/nest-factory.js +232 -0
  272. package/package.json +73 -0
  273. package/pipes/index.d.ts +3 -0
  274. package/pipes/index.js +6 -0
  275. package/pipes/params-token-factory.d.ts +5 -0
  276. package/pipes/params-token-factory.js +19 -0
  277. package/pipes/pipes-consumer.d.ts +10 -0
  278. package/pipes/pipes-consumer.js +21 -0
  279. package/pipes/pipes-context-creator.d.ts +17 -0
  280. package/pipes/pipes-context-creator.js +72 -0
  281. package/repl/assign-to-object.util.d.ts +5 -0
  282. package/repl/assign-to-object.util.js +14 -0
  283. package/repl/constants.d.ts +1 -0
  284. package/repl/constants.js +4 -0
  285. package/repl/index.d.ts +1 -0
  286. package/repl/index.js +4 -0
  287. package/repl/native-functions/debug-repl-fn.d.ts +9 -0
  288. package/repl/native-functions/debug-repl-fn.js +46 -0
  289. package/repl/native-functions/get-repl-fn.d.ts +7 -0
  290. package/repl/native-functions/get-repl-fn.js +19 -0
  291. package/repl/native-functions/help-repl-fn.d.ts +7 -0
  292. package/repl/native-functions/help-repl-fn.js +29 -0
  293. package/repl/native-functions/index.d.ts +6 -0
  294. package/repl/native-functions/index.js +9 -0
  295. package/repl/native-functions/methods-repl-fn.d.ts +8 -0
  296. package/repl/native-functions/methods-repl-fn.js +28 -0
  297. package/repl/native-functions/resolve-repl-fn.d.ts +7 -0
  298. package/repl/native-functions/resolve-repl-fn.js +18 -0
  299. package/repl/native-functions/select-relp-fn.d.ts +7 -0
  300. package/repl/native-functions/select-relp-fn.js +18 -0
  301. package/repl/repl-context.d.ts +26 -0
  302. package/repl/repl-context.js +126 -0
  303. package/repl/repl-function.d.ts +18 -0
  304. package/repl/repl-function.js +19 -0
  305. package/repl/repl-logger.d.ts +5 -0
  306. package/repl/repl-logger.js +22 -0
  307. package/repl/repl-native-commands.d.ts +2 -0
  308. package/repl/repl-native-commands.js +46 -0
  309. package/repl/repl.d.ts +3 -0
  310. package/repl/repl.interfaces.d.ts +16 -0
  311. package/repl/repl.interfaces.js +2 -0
  312. package/repl/repl.js +32 -0
  313. package/router/index.d.ts +3 -0
  314. package/router/index.js +8 -0
  315. package/router/interfaces/exceptions-filter.interface.d.ts +6 -0
  316. package/router/interfaces/exceptions-filter.interface.js +2 -0
  317. package/router/interfaces/exclude-route-metadata.interface.d.ts +15 -0
  318. package/router/interfaces/exclude-route-metadata.interface.js +2 -0
  319. package/router/interfaces/index.d.ts +1 -0
  320. package/router/interfaces/index.js +4 -0
  321. package/router/interfaces/resolver.interface.d.ts +5 -0
  322. package/router/interfaces/resolver.interface.js +2 -0
  323. package/router/interfaces/route-params-factory.interface.d.ts +8 -0
  324. package/router/interfaces/route-params-factory.interface.js +2 -0
  325. package/router/interfaces/route-path-metadata.interface.d.ts +32 -0
  326. package/router/interfaces/route-path-metadata.interface.js +2 -0
  327. package/router/interfaces/routes.interface.d.ts +7 -0
  328. package/router/interfaces/routes.interface.js +2 -0
  329. package/router/legacy-route-converter.d.ts +16 -0
  330. package/router/legacy-route-converter.js +61 -0
  331. package/router/paths-explorer.d.ts +18 -0
  332. package/router/paths-explorer.js +45 -0
  333. package/router/request/index.d.ts +1 -0
  334. package/router/request/index.js +5 -0
  335. package/router/request/request-constants.d.ts +2 -0
  336. package/router/request/request-constants.js +5 -0
  337. package/router/request/request-providers.d.ts +2 -0
  338. package/router/request/request-providers.js +11 -0
  339. package/router/route-params-factory.d.ts +9 -0
  340. package/router/route-params-factory.js +41 -0
  341. package/router/route-path-factory.d.ts +14 -0
  342. package/router/route-path-factory.js +101 -0
  343. package/router/router-exception-filters.d.ts +14 -0
  344. package/router/router-exception-filters.js +40 -0
  345. package/router/router-execution-context.d.ts +54 -0
  346. package/router/router-execution-context.js +186 -0
  347. package/router/router-explorer.d.ts +47 -0
  348. package/router/router-explorer.js +234 -0
  349. package/router/router-module.d.ts +19 -0
  350. package/router/router-module.js +80 -0
  351. package/router/router-proxy.d.ts +6 -0
  352. package/router/router-proxy.js +31 -0
  353. package/router/router-response-controller.d.ts +28 -0
  354. package/router/router-response-controller.js +98 -0
  355. package/router/routes-resolver.d.ts +27 -0
  356. package/router/routes-resolver.js +129 -0
  357. package/router/sse-stream.d.ts +43 -0
  358. package/router/sse-stream.js +83 -0
  359. package/router/utils/exclude-route.util.d.ts +4 -0
  360. package/router/utils/exclude-route.util.js +19 -0
  361. package/router/utils/flatten-route-paths.util.d.ts +6 -0
  362. package/router/utils/flatten-route-paths.util.js +25 -0
  363. package/router/utils/index.d.ts +2 -0
  364. package/router/utils/index.js +5 -0
  365. package/scanner.d.ts +89 -0
  366. package/scanner.js +416 -0
  367. package/services/index.d.ts +1 -0
  368. package/services/index.js +4 -0
  369. package/services/reflector.service.d.ts +111 -0
  370. package/services/reflector.service.js +100 -0
  371. package/tsconfig.build.json +21 -0
@@ -0,0 +1,432 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Module = void 0;
4
+ const constants_1 = require("@nestjs/common/constants");
5
+ const interfaces_1 = require("@nestjs/common/interfaces");
6
+ const random_string_generator_util_1 = require("@nestjs/common/utils/random-string-generator.util");
7
+ const shared_utils_1 = require("@nestjs/common/utils/shared.utils");
8
+ const iterare_1 = require("iterare");
9
+ const application_config_1 = require("../application-config");
10
+ const exceptions_1 = require("../errors/exceptions");
11
+ const context_id_factory_1 = require("../helpers/context-id-factory");
12
+ const get_class_scope_1 = require("../helpers/get-class-scope");
13
+ const is_durable_1 = require("../helpers/is-durable");
14
+ const uuid_factory_1 = require("../inspector/uuid-factory");
15
+ const constants_2 = require("./constants");
16
+ const instance_wrapper_1 = require("./instance-wrapper");
17
+ const module_ref_1 = require("./module-ref");
18
+ class Module {
19
+ constructor(_metatype, container) {
20
+ this._metatype = _metatype;
21
+ this.container = container;
22
+ this._imports = new Set();
23
+ this._providers = new Map();
24
+ this._injectables = new Map();
25
+ this._middlewares = new Map();
26
+ this._controllers = new Map();
27
+ this._entryProviderKeys = new Set();
28
+ this._exports = new Set();
29
+ this._distance = 0;
30
+ this._initOnPreview = false;
31
+ this._isGlobal = false;
32
+ this.addCoreProviders();
33
+ this._id = this.generateUuid();
34
+ }
35
+ get id() {
36
+ return this._id;
37
+ }
38
+ get token() {
39
+ return this._token;
40
+ }
41
+ set token(token) {
42
+ this._token = token;
43
+ }
44
+ get name() {
45
+ return this.metatype.name;
46
+ }
47
+ get isGlobal() {
48
+ return this._isGlobal;
49
+ }
50
+ set isGlobal(global) {
51
+ this._isGlobal = global;
52
+ }
53
+ get initOnPreview() {
54
+ return this._initOnPreview;
55
+ }
56
+ set initOnPreview(initOnPreview) {
57
+ this._initOnPreview = initOnPreview;
58
+ }
59
+ get providers() {
60
+ return this._providers;
61
+ }
62
+ get middlewares() {
63
+ return this._middlewares;
64
+ }
65
+ get imports() {
66
+ return this._imports;
67
+ }
68
+ get injectables() {
69
+ return this._injectables;
70
+ }
71
+ get controllers() {
72
+ return this._controllers;
73
+ }
74
+ get entryProviders() {
75
+ return Array.from(this._entryProviderKeys).map(token => this.providers.get(token));
76
+ }
77
+ get exports() {
78
+ return this._exports;
79
+ }
80
+ get instance() {
81
+ if (!this._providers.has(this._metatype)) {
82
+ throw new exceptions_1.RuntimeException();
83
+ }
84
+ const moduleRef = this._providers.get(this._metatype);
85
+ return moduleRef.instance;
86
+ }
87
+ get metatype() {
88
+ return this._metatype;
89
+ }
90
+ get distance() {
91
+ return this._distance;
92
+ }
93
+ set distance(value) {
94
+ this._distance = value;
95
+ }
96
+ addCoreProviders() {
97
+ this.addModuleAsProvider();
98
+ this.addModuleRef();
99
+ this.addApplicationConfig();
100
+ }
101
+ addModuleRef() {
102
+ const moduleRef = this.createModuleReferenceType();
103
+ this._providers.set(module_ref_1.ModuleRef, new instance_wrapper_1.InstanceWrapper({
104
+ token: module_ref_1.ModuleRef,
105
+ name: module_ref_1.ModuleRef.name,
106
+ metatype: module_ref_1.ModuleRef,
107
+ isResolved: true,
108
+ instance: new moduleRef(),
109
+ host: this,
110
+ }));
111
+ }
112
+ addModuleAsProvider() {
113
+ this._providers.set(this._metatype, new instance_wrapper_1.InstanceWrapper({
114
+ token: this._metatype,
115
+ name: this._metatype.name,
116
+ metatype: this._metatype,
117
+ isResolved: false,
118
+ instance: null,
119
+ host: this,
120
+ }));
121
+ }
122
+ addApplicationConfig() {
123
+ this._providers.set(application_config_1.ApplicationConfig, new instance_wrapper_1.InstanceWrapper({
124
+ token: application_config_1.ApplicationConfig,
125
+ name: application_config_1.ApplicationConfig.name,
126
+ isResolved: true,
127
+ instance: this.container.applicationConfig,
128
+ host: this,
129
+ }));
130
+ }
131
+ addInjectable(injectable, enhancerSubtype, host) {
132
+ if (this.isCustomProvider(injectable)) {
133
+ return this.addCustomProvider(injectable, this._injectables, enhancerSubtype);
134
+ }
135
+ let instanceWrapper = this.injectables.get(injectable);
136
+ if (!instanceWrapper) {
137
+ instanceWrapper = new instance_wrapper_1.InstanceWrapper({
138
+ token: injectable,
139
+ name: injectable.name,
140
+ metatype: injectable,
141
+ instance: null,
142
+ isResolved: false,
143
+ scope: (0, get_class_scope_1.getClassScope)(injectable),
144
+ durable: (0, is_durable_1.isDurable)(injectable),
145
+ subtype: enhancerSubtype,
146
+ host: this,
147
+ });
148
+ this._injectables.set(injectable, instanceWrapper);
149
+ }
150
+ if (host) {
151
+ const hostWrapper = this._controllers.get(host) || this._providers.get(host);
152
+ hostWrapper && hostWrapper.addEnhancerMetadata(instanceWrapper);
153
+ }
154
+ return instanceWrapper;
155
+ }
156
+ addProvider(provider, enhancerSubtype) {
157
+ if (this.isCustomProvider(provider)) {
158
+ if (this.isEntryProvider(provider.provide)) {
159
+ this._entryProviderKeys.add(provider.provide);
160
+ }
161
+ return this.addCustomProvider(provider, this._providers, enhancerSubtype);
162
+ }
163
+ const isAlreadyDeclared = this._providers.has(provider);
164
+ if ((this.isTransientProvider(provider) ||
165
+ this.isRequestScopeProvider(provider)) &&
166
+ isAlreadyDeclared) {
167
+ return provider;
168
+ }
169
+ this._providers.set(provider, new instance_wrapper_1.InstanceWrapper({
170
+ token: provider,
171
+ name: provider.name,
172
+ metatype: provider,
173
+ instance: null,
174
+ isResolved: false,
175
+ scope: (0, get_class_scope_1.getClassScope)(provider),
176
+ durable: (0, is_durable_1.isDurable)(provider),
177
+ host: this,
178
+ }));
179
+ if (this.isEntryProvider(provider)) {
180
+ this._entryProviderKeys.add(provider);
181
+ }
182
+ return provider;
183
+ }
184
+ isCustomProvider(provider) {
185
+ return !(0, shared_utils_1.isNil)(provider.provide);
186
+ }
187
+ addCustomProvider(provider, collection, enhancerSubtype) {
188
+ if (this.isCustomClass(provider)) {
189
+ this.addCustomClass(provider, collection, enhancerSubtype);
190
+ }
191
+ else if (this.isCustomValue(provider)) {
192
+ this.addCustomValue(provider, collection, enhancerSubtype);
193
+ }
194
+ else if (this.isCustomFactory(provider)) {
195
+ this.addCustomFactory(provider, collection, enhancerSubtype);
196
+ }
197
+ else if (this.isCustomUseExisting(provider)) {
198
+ this.addCustomUseExisting(provider, collection, enhancerSubtype);
199
+ }
200
+ return provider.provide;
201
+ }
202
+ isCustomClass(provider) {
203
+ return !(0, shared_utils_1.isUndefined)(provider.useClass);
204
+ }
205
+ isCustomValue(provider) {
206
+ return ((0, shared_utils_1.isObject)(provider) &&
207
+ Object.prototype.hasOwnProperty.call(provider, 'useValue'));
208
+ }
209
+ isCustomFactory(provider) {
210
+ return !(0, shared_utils_1.isUndefined)(provider.useFactory);
211
+ }
212
+ isCustomUseExisting(provider) {
213
+ return !(0, shared_utils_1.isUndefined)(provider.useExisting);
214
+ }
215
+ isDynamicModule(exported) {
216
+ return exported && exported.module;
217
+ }
218
+ addCustomClass(provider, collection, enhancerSubtype) {
219
+ let { scope, durable } = provider;
220
+ const { useClass } = provider;
221
+ if ((0, shared_utils_1.isUndefined)(scope)) {
222
+ scope = (0, get_class_scope_1.getClassScope)(useClass);
223
+ }
224
+ if ((0, shared_utils_1.isUndefined)(durable)) {
225
+ durable = (0, is_durable_1.isDurable)(useClass);
226
+ }
227
+ const token = provider.provide;
228
+ collection.set(token, new instance_wrapper_1.InstanceWrapper({
229
+ token,
230
+ name: useClass?.name || useClass,
231
+ metatype: useClass,
232
+ instance: null,
233
+ isResolved: false,
234
+ scope,
235
+ durable,
236
+ host: this,
237
+ subtype: enhancerSubtype,
238
+ }));
239
+ }
240
+ addCustomValue(provider, collection, enhancerSubtype) {
241
+ const { useValue: value, provide: providerToken } = provider;
242
+ const instanceDecorator = this.container.contextOptions?.instrument?.instanceDecorator;
243
+ collection.set(providerToken, new instance_wrapper_1.InstanceWrapper({
244
+ token: providerToken,
245
+ name: providerToken?.name || providerToken,
246
+ metatype: null,
247
+ instance: instanceDecorator ? instanceDecorator(value) : value,
248
+ isResolved: true,
249
+ async: value instanceof Promise,
250
+ host: this,
251
+ subtype: enhancerSubtype,
252
+ }));
253
+ }
254
+ addCustomFactory(provider, collection, enhancerSubtype) {
255
+ const { useFactory: factory, inject, scope, durable, provide: providerToken, } = provider;
256
+ collection.set(providerToken, new instance_wrapper_1.InstanceWrapper({
257
+ token: providerToken,
258
+ name: providerToken?.name || providerToken,
259
+ metatype: factory,
260
+ instance: null,
261
+ isResolved: false,
262
+ inject: inject || [],
263
+ scope,
264
+ durable,
265
+ host: this,
266
+ subtype: enhancerSubtype,
267
+ }));
268
+ }
269
+ addCustomUseExisting(provider, collection, enhancerSubtype) {
270
+ const { useExisting, provide: providerToken } = provider;
271
+ collection.set(providerToken, new instance_wrapper_1.InstanceWrapper({
272
+ token: providerToken,
273
+ name: providerToken?.name || providerToken,
274
+ metatype: (instance => instance),
275
+ instance: null,
276
+ isResolved: false,
277
+ inject: [useExisting],
278
+ host: this,
279
+ isAlias: true,
280
+ subtype: enhancerSubtype,
281
+ }));
282
+ }
283
+ addExportedProviderOrModule(toExport) {
284
+ const addExportedUnit = (token) => this._exports.add(this.validateExportedProvider(token));
285
+ if (this.isCustomProvider(toExport)) {
286
+ return this.addCustomExportedProvider(toExport);
287
+ }
288
+ else if ((0, shared_utils_1.isString)(toExport) || (0, shared_utils_1.isSymbol)(toExport)) {
289
+ return addExportedUnit(toExport);
290
+ }
291
+ else if (this.isDynamicModule(toExport)) {
292
+ const { module: moduleClassRef } = toExport;
293
+ return addExportedUnit(moduleClassRef);
294
+ }
295
+ addExportedUnit(toExport);
296
+ }
297
+ addCustomExportedProvider(provider) {
298
+ const provide = provider.provide;
299
+ if ((0, shared_utils_1.isString)(provide) || (0, shared_utils_1.isSymbol)(provide)) {
300
+ return this._exports.add(this.validateExportedProvider(provide));
301
+ }
302
+ this._exports.add(this.validateExportedProvider(provide));
303
+ }
304
+ validateExportedProvider(token) {
305
+ if (this._providers.has(token)) {
306
+ return token;
307
+ }
308
+ const imports = (0, iterare_1.iterate)(this._imports.values())
309
+ .filter(item => !!item)
310
+ .map(({ metatype }) => metatype)
311
+ .filter(metatype => !!metatype)
312
+ .toArray();
313
+ if (!imports.includes(token)) {
314
+ const { name } = this.metatype;
315
+ const providerName = (0, shared_utils_1.isFunction)(token) ? token.name : token;
316
+ throw new exceptions_1.UnknownExportException(providerName, name);
317
+ }
318
+ return token;
319
+ }
320
+ addController(controller) {
321
+ this._controllers.set(controller, new instance_wrapper_1.InstanceWrapper({
322
+ token: controller,
323
+ name: controller.name,
324
+ metatype: controller,
325
+ instance: null,
326
+ isResolved: false,
327
+ scope: (0, get_class_scope_1.getClassScope)(controller),
328
+ durable: (0, is_durable_1.isDurable)(controller),
329
+ host: this,
330
+ }));
331
+ this.assignControllerUniqueId(controller);
332
+ }
333
+ assignControllerUniqueId(controller) {
334
+ Object.defineProperty(controller, constants_2.CONTROLLER_ID_KEY, {
335
+ enumerable: false,
336
+ writable: false,
337
+ configurable: true,
338
+ value: (0, random_string_generator_util_1.randomStringGenerator)(),
339
+ });
340
+ }
341
+ addImport(moduleRef) {
342
+ this._imports.add(moduleRef);
343
+ }
344
+ replace(toReplace, options) {
345
+ if (options.isProvider && this.hasProvider(toReplace)) {
346
+ const originalProvider = this._providers.get(toReplace);
347
+ return originalProvider.mergeWith({ provide: toReplace, ...options });
348
+ }
349
+ else if (!options.isProvider && this.hasInjectable(toReplace)) {
350
+ const originalInjectable = this._injectables.get(toReplace);
351
+ return originalInjectable.mergeWith({
352
+ provide: toReplace,
353
+ ...options,
354
+ });
355
+ }
356
+ }
357
+ hasProvider(token) {
358
+ return this._providers.has(token);
359
+ }
360
+ hasInjectable(token) {
361
+ return this._injectables.has(token);
362
+ }
363
+ getProviderByKey(name) {
364
+ return this._providers.get(name);
365
+ }
366
+ getProviderById(id) {
367
+ return Array.from(this._providers.values()).find(item => item.id === id);
368
+ }
369
+ getControllerById(id) {
370
+ return Array.from(this._controllers.values()).find(item => item.id === id);
371
+ }
372
+ getInjectableById(id) {
373
+ return Array.from(this._injectables.values()).find(item => item.id === id);
374
+ }
375
+ getMiddlewareById(id) {
376
+ return Array.from(this._middlewares.values()).find(item => item.id === id);
377
+ }
378
+ getNonAliasProviders() {
379
+ return [...this._providers].filter(([_, wrapper]) => !wrapper.isAlias);
380
+ }
381
+ createModuleReferenceType() {
382
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
383
+ const self = this;
384
+ return class extends module_ref_1.ModuleRef {
385
+ constructor() {
386
+ super(self.container);
387
+ }
388
+ get(typeOrToken, options = {}) {
389
+ options.strict ??= true;
390
+ options.each ??= false;
391
+ return this.find(typeOrToken, options.strict
392
+ ? {
393
+ moduleId: self.id,
394
+ each: options.each,
395
+ }
396
+ : options);
397
+ }
398
+ resolve(typeOrToken, contextId = (0, context_id_factory_1.createContextId)(), options = {}) {
399
+ options.strict ??= true;
400
+ options.each ??= false;
401
+ return this.resolvePerContext(typeOrToken, self, contextId, options);
402
+ }
403
+ async create(type, contextId) {
404
+ if (!(type && (0, shared_utils_1.isFunction)(type) && type.prototype)) {
405
+ throw new exceptions_1.InvalidClassException(type);
406
+ }
407
+ return this.instantiateClass(type, self, contextId);
408
+ }
409
+ };
410
+ }
411
+ isEntryProvider(metatype) {
412
+ return typeof metatype === 'function'
413
+ ? !!Reflect.getMetadata(constants_1.ENTRY_PROVIDER_WATERMARK, metatype)
414
+ : false;
415
+ }
416
+ generateUuid() {
417
+ const prefix = 'M_';
418
+ const key = this.token
419
+ ? this.token.includes(':')
420
+ ? this.token.split(':')[1]
421
+ : this.token
422
+ : this.name;
423
+ return key ? uuid_factory_1.UuidFactory.get(`${prefix}_${key}`) : (0, random_string_generator_util_1.randomStringGenerator)();
424
+ }
425
+ isTransientProvider(provider) {
426
+ return (0, get_class_scope_1.getClassScope)(provider) === interfaces_1.Scope.TRANSIENT;
427
+ }
428
+ isRequestScopeProvider(provider) {
429
+ return (0, get_class_scope_1.getClassScope)(provider) === interfaces_1.Scope.REQUEST;
430
+ }
431
+ }
432
+ exports.Module = Module;
@@ -0,0 +1,27 @@
1
+ import { Observable } from 'rxjs';
2
+ import { Module } from './module';
3
+ export declare class ModulesContainer extends Map<string, Module> {
4
+ private readonly _applicationId;
5
+ private readonly _rpcTargetRegistry$;
6
+ /**
7
+ * Unique identifier of the application instance.
8
+ */
9
+ get applicationId(): string;
10
+ /**
11
+ * Retrieves a module by its identifier.
12
+ * @param id The identifier of the module to retrieve.
13
+ * @returns The module instance if found, otherwise undefined.
14
+ */
15
+ getById(id: string): Module | undefined;
16
+ /**
17
+ * Returns the RPC target registry as an observable.
18
+ * This registry contains all RPC targets registered in the application.
19
+ * @returns An observable that emits the RPC target registry.
20
+ */
21
+ getRpcTargetRegistry<T>(): Observable<T>;
22
+ /**
23
+ * Adds an RPC target to the registry.
24
+ * @param target The RPC target to add.
25
+ */
26
+ addRpcTarget<T>(target: T): void;
27
+ }
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ModulesContainer = void 0;
4
+ const rxjs_1 = require("rxjs");
5
+ const uid_1 = require("uid");
6
+ class ModulesContainer extends Map {
7
+ constructor() {
8
+ super(...arguments);
9
+ this._applicationId = (0, uid_1.uid)(21);
10
+ this._rpcTargetRegistry$ = new rxjs_1.ReplaySubject();
11
+ }
12
+ /**
13
+ * Unique identifier of the application instance.
14
+ */
15
+ get applicationId() {
16
+ return this._applicationId;
17
+ }
18
+ /**
19
+ * Retrieves a module by its identifier.
20
+ * @param id The identifier of the module to retrieve.
21
+ * @returns The module instance if found, otherwise undefined.
22
+ */
23
+ getById(id) {
24
+ return Array.from(this.values()).find(moduleRef => moduleRef.id === id);
25
+ }
26
+ /**
27
+ * Returns the RPC target registry as an observable.
28
+ * This registry contains all RPC targets registered in the application.
29
+ * @returns An observable that emits the RPC target registry.
30
+ */
31
+ getRpcTargetRegistry() {
32
+ return this._rpcTargetRegistry$.asObservable();
33
+ }
34
+ /**
35
+ * Adds an RPC target to the registry.
36
+ * @param target The RPC target to add.
37
+ */
38
+ addRpcTarget(target) {
39
+ this._rpcTargetRegistry$.next(target);
40
+ }
41
+ }
42
+ exports.ModulesContainer = ModulesContainer;
@@ -0,0 +1,15 @@
1
+ import { DynamicModule } from '@nestjs/common/interfaces/modules/dynamic-module.interface';
2
+ import { ForwardReference } from '@nestjs/common/interfaces/modules/forward-reference.interface';
3
+ import { Type } from '@nestjs/common/interfaces/type.interface';
4
+ import { ModuleOpaqueKeyFactory } from './interfaces/module-opaque-key-factory.interface';
5
+ export declare class ByReferenceModuleOpaqueKeyFactory implements ModuleOpaqueKeyFactory {
6
+ private readonly keyGenerationStrategy;
7
+ constructor(options?: {
8
+ keyGenerationStrategy: 'random' | 'shallow';
9
+ });
10
+ createForStatic(moduleCls: Type, originalRef?: Type | ForwardReference): string;
11
+ createForDynamic(moduleCls: Type<unknown>, dynamicMetadata: Omit<DynamicModule, 'module'>, originalRef: DynamicModule | ForwardReference): string;
12
+ private getOrCreateModuleId;
13
+ private hashString;
14
+ private generateRandomString;
15
+ }
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ByReferenceModuleOpaqueKeyFactory = void 0;
4
+ const random_string_generator_util_1 = require("@nestjs/common/utils/random-string-generator.util");
5
+ const crypto_1 = require("crypto");
6
+ const K_MODULE_ID = Symbol('K_MODULE_ID');
7
+ class ByReferenceModuleOpaqueKeyFactory {
8
+ constructor(options) {
9
+ this.keyGenerationStrategy = options?.keyGenerationStrategy ?? 'random';
10
+ }
11
+ createForStatic(moduleCls, originalRef = moduleCls) {
12
+ return this.getOrCreateModuleId(moduleCls, undefined, originalRef);
13
+ }
14
+ createForDynamic(moduleCls, dynamicMetadata, originalRef) {
15
+ return this.getOrCreateModuleId(moduleCls, dynamicMetadata, originalRef);
16
+ }
17
+ getOrCreateModuleId(moduleCls, dynamicMetadata, originalRef) {
18
+ if (originalRef[K_MODULE_ID]) {
19
+ return originalRef[K_MODULE_ID];
20
+ }
21
+ let moduleId;
22
+ if (this.keyGenerationStrategy === 'random') {
23
+ moduleId = this.generateRandomString();
24
+ }
25
+ else {
26
+ const delimiter = ':';
27
+ moduleId = dynamicMetadata
28
+ ? `${this.generateRandomString()}${delimiter}${this.hashString(moduleCls.name + JSON.stringify(dynamicMetadata))}`
29
+ : `${this.generateRandomString()}${delimiter}${this.hashString(moduleCls.toString())}`;
30
+ }
31
+ originalRef[K_MODULE_ID] = moduleId;
32
+ return moduleId;
33
+ }
34
+ hashString(value) {
35
+ return (0, crypto_1.createHash)('sha256').update(value).digest('hex');
36
+ }
37
+ generateRandomString() {
38
+ return (0, random_string_generator_util_1.randomStringGenerator)();
39
+ }
40
+ }
41
+ exports.ByReferenceModuleOpaqueKeyFactory = ByReferenceModuleOpaqueKeyFactory;
@@ -0,0 +1,15 @@
1
+ import { DynamicModule } from '@nestjs/common/interfaces/modules/dynamic-module.interface';
2
+ import { Type } from '@nestjs/common/interfaces/type.interface';
3
+ import { ModuleOpaqueKeyFactory } from './interfaces/module-opaque-key-factory.interface';
4
+ export declare class DeepHashedModuleOpaqueKeyFactory implements ModuleOpaqueKeyFactory {
5
+ private readonly moduleIdsCache;
6
+ private readonly moduleTokenCache;
7
+ private readonly logger;
8
+ createForStatic(moduleCls: Type): string;
9
+ createForDynamic(moduleCls: Type<unknown>, dynamicMetadata: Omit<DynamicModule, 'module'>): string;
10
+ getStringifiedOpaqueToken(opaqueToken: object | undefined): string;
11
+ getModuleId(metatype: Type<unknown>): string;
12
+ getModuleName(metatype: Type<any>): string;
13
+ private hashString;
14
+ private replacer;
15
+ }
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DeepHashedModuleOpaqueKeyFactory = void 0;
4
+ const logger_service_1 = require("@nestjs/common/services/logger.service");
5
+ const random_string_generator_util_1 = require("@nestjs/common/utils/random-string-generator.util");
6
+ const shared_utils_1 = require("@nestjs/common/utils/shared.utils");
7
+ const crypto_1 = require("crypto");
8
+ const fast_safe_stringify_1 = require("fast-safe-stringify");
9
+ const CLASS_STR = 'class ';
10
+ const CLASS_STR_LEN = CLASS_STR.length;
11
+ class DeepHashedModuleOpaqueKeyFactory {
12
+ constructor() {
13
+ this.moduleIdsCache = new WeakMap();
14
+ this.moduleTokenCache = new Map();
15
+ this.logger = new logger_service_1.Logger(DeepHashedModuleOpaqueKeyFactory.name, {
16
+ timestamp: true,
17
+ });
18
+ }
19
+ createForStatic(moduleCls) {
20
+ const moduleId = this.getModuleId(moduleCls);
21
+ const moduleName = this.getModuleName(moduleCls);
22
+ const key = `${moduleId}_${moduleName}`;
23
+ if (this.moduleTokenCache.has(key)) {
24
+ return this.moduleTokenCache.get(key);
25
+ }
26
+ const hash = this.hashString(key);
27
+ this.moduleTokenCache.set(key, hash);
28
+ return hash;
29
+ }
30
+ createForDynamic(moduleCls, dynamicMetadata) {
31
+ const moduleId = this.getModuleId(moduleCls);
32
+ const moduleName = this.getModuleName(moduleCls);
33
+ const opaqueToken = {
34
+ id: moduleId,
35
+ module: moduleName,
36
+ dynamic: dynamicMetadata,
37
+ };
38
+ const start = performance.now();
39
+ const opaqueTokenString = this.getStringifiedOpaqueToken(opaqueToken);
40
+ const timeSpentInMs = performance.now() - start;
41
+ if (timeSpentInMs > 10) {
42
+ const formattedTimeSpent = timeSpentInMs.toFixed(2);
43
+ this.logger.warn(`The module "${opaqueToken.module}" is taking ${formattedTimeSpent}ms to serialize, this may be caused by larger objects statically assigned to the module. Consider changing the "moduleIdGeneratorAlgorithm" option to "reference" to improve the performance.`);
44
+ }
45
+ return this.hashString(opaqueTokenString);
46
+ }
47
+ getStringifiedOpaqueToken(opaqueToken) {
48
+ // Uses safeStringify instead of JSON.stringify to support circular dynamic modules
49
+ // The replacer function is also required in order to obtain real class names
50
+ // instead of the unified "Function" key
51
+ return opaqueToken ? (0, fast_safe_stringify_1.default)(opaqueToken, this.replacer) : '';
52
+ }
53
+ getModuleId(metatype) {
54
+ let moduleId = this.moduleIdsCache.get(metatype);
55
+ if (moduleId) {
56
+ return moduleId;
57
+ }
58
+ moduleId = (0, random_string_generator_util_1.randomStringGenerator)();
59
+ this.moduleIdsCache.set(metatype, moduleId);
60
+ return moduleId;
61
+ }
62
+ getModuleName(metatype) {
63
+ return metatype.name;
64
+ }
65
+ hashString(value) {
66
+ return (0, crypto_1.createHash)('sha256').update(value).digest('hex');
67
+ }
68
+ replacer(key, value) {
69
+ if ((0, shared_utils_1.isFunction)(value)) {
70
+ const funcAsString = value.toString();
71
+ const isClass = funcAsString.slice(0, CLASS_STR_LEN) === CLASS_STR;
72
+ if (isClass) {
73
+ return value.name;
74
+ }
75
+ return funcAsString;
76
+ }
77
+ if ((0, shared_utils_1.isSymbol)(value)) {
78
+ return value.toString();
79
+ }
80
+ return value;
81
+ }
82
+ }
83
+ exports.DeepHashedModuleOpaqueKeyFactory = DeepHashedModuleOpaqueKeyFactory;
@@ -0,0 +1,18 @@
1
+ import { DynamicModule } from '@nestjs/common/interfaces/modules/dynamic-module.interface';
2
+ import { ForwardReference } from '@nestjs/common/interfaces/modules/forward-reference.interface';
3
+ import { Type } from '@nestjs/common/interfaces/type.interface';
4
+ export interface ModuleOpaqueKeyFactory {
5
+ /**
6
+ * Creates a unique opaque key for the given static module.
7
+ * @param moduleCls A static module class.
8
+ * @param originalRef Original object reference. In most cases, it's the same as `moduleCls`.
9
+ */
10
+ createForStatic(moduleCls: Type, originalRef: Type | ForwardReference): string;
11
+ /**
12
+ * Creates a unique opaque key for the given dynamic module.
13
+ * @param moduleCls A dynamic module class reference.
14
+ * @param dynamicMetadata Dynamic module metadata.
15
+ * @param originalRef Original object reference.
16
+ */
17
+ createForDynamic(moduleCls: Type<unknown>, dynamicMetadata: Omit<DynamicModule, 'module'>, originalRef: DynamicModule | ForwardReference): string;
18
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });