@venok/core 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 (400) hide show
  1. package/application/config.d.ts +35 -0
  2. package/application/config.js +85 -0
  3. package/application/context.d.ts +198 -0
  4. package/application/context.js +325 -0
  5. package/application/factory.d.ts +43 -0
  6. package/application/factory.js +147 -0
  7. package/constants.d.ts +46 -0
  8. package/constants.js +53 -0
  9. package/context/creator.d.ts +9 -0
  10. package/context/creator.js +32 -0
  11. package/context/execution-host.d.ts +16 -0
  12. package/context/execution-host.js +30 -0
  13. package/context/external/creator.d.ts +63 -0
  14. package/context/external/creator.js +159 -0
  15. package/context/external/proxy.d.ts +5 -0
  16. package/context/external/proxy.js +19 -0
  17. package/decorators/apply.decorator.d.ts +10 -0
  18. package/decorators/apply.decorator.js +24 -0
  19. package/decorators/bind.decorator.d.ts +11 -0
  20. package/decorators/bind.decorator.js +20 -0
  21. package/decorators/catch.decorator.d.ts +17 -0
  22. package/decorators/catch.decorator.js +26 -0
  23. package/decorators/create-param.decorator.d.ts +29 -0
  24. package/decorators/create-param.decorator.js +51 -0
  25. package/decorators/dependencies.decorator.d.ts +6 -0
  26. package/decorators/dependencies.decorator.js +17 -0
  27. package/decorators/exception-filters.decorator.d.ts +21 -0
  28. package/decorators/exception-filters.decorator.js +41 -0
  29. package/decorators/global.decorator.d.ts +10 -0
  30. package/decorators/global.decorator.js +19 -0
  31. package/decorators/index.d.ts +15 -0
  32. package/decorators/index.js +31 -0
  33. package/decorators/inject.decorator.d.ts +26 -0
  34. package/decorators/inject.decorator.js +45 -0
  35. package/decorators/injectable.decorator.d.ts +40 -0
  36. package/decorators/injectable.decorator.js +51 -0
  37. package/decorators/module.decorator.d.ts +14 -0
  38. package/decorators/module.decorator.js +38 -0
  39. package/decorators/optional.decorator.d.ts +14 -0
  40. package/decorators/optional.decorator.js +30 -0
  41. package/decorators/set-metadata.decorator.d.ts +18 -0
  42. package/decorators/set-metadata.decorator.js +30 -0
  43. package/decorators/use-guards.decorator.d.ts +21 -0
  44. package/decorators/use-guards.decorator.js +40 -0
  45. package/decorators/use-interceptors.decorator.d.ts +21 -0
  46. package/decorators/use-interceptors.decorator.js +40 -0
  47. package/decorators/use-pipes.decorator.d.ts +21 -0
  48. package/decorators/use-pipes.decorator.js +39 -0
  49. package/discovery/meta-host-collection.d.ts +32 -0
  50. package/discovery/meta-host-collection.js +79 -0
  51. package/discovery/module.d.ts +5 -0
  52. package/discovery/module.js +24 -0
  53. package/discovery/service.d.ts +68 -0
  54. package/discovery/service.js +90 -0
  55. package/errors/exceptions/circular-dependency.exception.d.ts +4 -0
  56. package/errors/exceptions/circular-dependency.exception.js +11 -0
  57. package/errors/exceptions/index.d.ts +8 -0
  58. package/errors/exceptions/index.js +24 -0
  59. package/errors/exceptions/invalid-class-module.exception.d.ts +4 -0
  60. package/errors/exceptions/invalid-class-module.exception.js +11 -0
  61. package/errors/exceptions/invalid-class-scope.exception.d.ts +5 -0
  62. package/errors/exceptions/invalid-class-scope.exception.js +14 -0
  63. package/errors/exceptions/invalid-class.exception.d.ts +4 -0
  64. package/errors/exceptions/invalid-class.exception.js +11 -0
  65. package/errors/exceptions/invalid-exception-filter.exception.d.ts +4 -0
  66. package/errors/exceptions/invalid-exception-filter.exception.js +11 -0
  67. package/errors/exceptions/invalid-module.exception.d.ts +4 -0
  68. package/errors/exceptions/invalid-module.exception.js +11 -0
  69. package/errors/exceptions/runtime.exception.d.ts +4 -0
  70. package/errors/exceptions/runtime.exception.js +12 -0
  71. package/errors/exceptions/undefined-dependency.exception.d.ts +6 -0
  72. package/errors/exceptions/undefined-dependency.exception.js +11 -0
  73. package/errors/exceptions/undefined-forwardref.exception.d.ts +5 -0
  74. package/errors/exceptions/undefined-forwardref.exception.js +11 -0
  75. package/errors/exceptions/undefined-module.exception.d.ts +4 -0
  76. package/errors/exceptions/undefined-module.exception.js +11 -0
  77. package/errors/exceptions/unknown-dependencies.exception.d.ts +16 -0
  78. package/errors/exceptions/unknown-dependencies.exception.js +15 -0
  79. package/errors/exceptions/unknown-element.exception.d.ts +4 -0
  80. package/errors/exceptions/unknown-element.exception.js +12 -0
  81. package/errors/exceptions/unknown-export.exception.d.ts +4 -0
  82. package/errors/exceptions/unknown-export.exception.js +11 -0
  83. package/errors/exceptions/unknown-module.exception.d.ts +4 -0
  84. package/errors/exceptions/unknown-module.exception.js +10 -0
  85. package/errors/messages.d.ts +15 -0
  86. package/errors/messages.js +126 -0
  87. package/exceptions/external/filter-context.d.ts +10 -0
  88. package/exceptions/external/filter-context.js +37 -0
  89. package/exceptions/external/filter.d.ts +5 -0
  90. package/exceptions/external/filter.js +16 -0
  91. package/exceptions/external/handler.d.ts +9 -0
  92. package/exceptions/external/handler.js +31 -0
  93. package/exceptions/filter-context.d.ts +14 -0
  94. package/exceptions/filter-context.js +55 -0
  95. package/exceptions/select-exception-filter-metadata.d.ts +2 -0
  96. package/exceptions/select-exception-filter-metadata.js +6 -0
  97. package/exceptions/zone/handler.d.ts +5 -0
  98. package/exceptions/zone/handler.js +15 -0
  99. package/exceptions/zone/zone.d.ts +5 -0
  100. package/exceptions/zone/zone.js +32 -0
  101. package/guards/consumer.d.ts +9 -0
  102. package/guards/consumer.js +33 -0
  103. package/guards/context-creator.d.ts +17 -0
  104. package/guards/context-creator.js +69 -0
  105. package/guards/index.d.ts +2 -0
  106. package/guards/index.js +18 -0
  107. package/helpers/color.helper.d.ts +9 -0
  108. package/helpers/color.helper.js +14 -0
  109. package/helpers/context-id-factory.helper.d.ts +2 -0
  110. package/helpers/context-id-factory.helper.js +15 -0
  111. package/helpers/context.helper.d.ts +23 -0
  112. package/helpers/context.helper.js +49 -0
  113. package/helpers/extends-metadata.helper.d.ts +1 -0
  114. package/helpers/extends-metadata.helper.js +9 -0
  115. package/helpers/flatten.helper.d.ts +1 -0
  116. package/helpers/flatten.helper.js +9 -0
  117. package/helpers/messages.helper.d.ts +2 -0
  118. package/helpers/messages.helper.js +7 -0
  119. package/helpers/noop.helper.d.ts +1 -0
  120. package/helpers/noop.helper.js +5 -0
  121. package/helpers/random-string-generator.helper.d.ts +1 -0
  122. package/helpers/random-string-generator.helper.js +6 -0
  123. package/helpers/rethrow.helper.d.ts +1 -0
  124. package/helpers/rethrow.helper.js +7 -0
  125. package/helpers/shared.helper.d.ts +10 -0
  126. package/helpers/shared.helper.js +33 -0
  127. package/helpers/silent.helper.d.ts +10 -0
  128. package/helpers/silent.helper.js +18 -0
  129. package/helpers/transient.helper.d.ts +12 -0
  130. package/helpers/transient.helper.js +26 -0
  131. package/helpers/uuid.helper.d.ts +15 -0
  132. package/helpers/uuid.helper.js +54 -0
  133. package/helpers/validate-each.helper.d.ts +8 -0
  134. package/helpers/validate-each.helper.js +25 -0
  135. package/hooks/before-app-shutdown.hook.d.ts +9 -0
  136. package/hooks/before-app-shutdown.hook.js +45 -0
  137. package/hooks/index.d.ts +5 -0
  138. package/hooks/index.js +21 -0
  139. package/hooks/on-app-bootstrap.hook.d.ts +8 -0
  140. package/hooks/on-app-bootstrap.hook.js +45 -0
  141. package/hooks/on-app-shutdown.hook.d.ts +9 -0
  142. package/hooks/on-app-shutdown.hook.js +46 -0
  143. package/hooks/on-module-destroy.hook.d.ts +8 -0
  144. package/hooks/on-module-destroy.hook.js +45 -0
  145. package/hooks/on-module-init.hook.d.ts +8 -0
  146. package/hooks/on-module-init.hook.js +45 -0
  147. package/index.d.ts +10 -0
  148. package/index.js +32 -0
  149. package/injector/constants.d.ts +2 -0
  150. package/injector/constants.js +7 -0
  151. package/injector/container.d.ts +61 -0
  152. package/injector/container.js +194 -0
  153. package/injector/helpers/class-scope.helper.d.ts +2 -0
  154. package/injector/helpers/class-scope.helper.js +9 -0
  155. package/injector/helpers/classifier.helper.d.ts +4 -0
  156. package/injector/helpers/classifier.helper.js +17 -0
  157. package/injector/helpers/is-durable.helper.d.ts +2 -0
  158. package/injector/helpers/is-durable.helper.js +9 -0
  159. package/injector/index.d.ts +5 -0
  160. package/injector/index.js +20 -0
  161. package/injector/injector.d.ts +87 -0
  162. package/injector/injector.js +452 -0
  163. package/injector/instance/links-host.d.ts +22 -0
  164. package/injector/instance/links-host.js +50 -0
  165. package/injector/instance/loader.d.ts +21 -0
  166. package/injector/instance/loader.js +73 -0
  167. package/injector/instance/resolver.d.ts +16 -0
  168. package/injector/instance/resolver.js +43 -0
  169. package/injector/instance/wrapper.d.ts +90 -0
  170. package/injector/instance/wrapper.js +272 -0
  171. package/injector/internal-core-module/core-providers.d.ts +4 -0
  172. package/injector/internal-core-module/core-providers.js +21 -0
  173. package/injector/internal-core-module/internal-core-module-factory.d.ts +8 -0
  174. package/injector/internal-core-module/internal-core-module-factory.js +42 -0
  175. package/injector/internal-core-module/internal-core-module.d.ts +4 -0
  176. package/injector/internal-core-module/internal-core-module.js +31 -0
  177. package/injector/module/compiler.d.ts +19 -0
  178. package/injector/module/compiler.js +27 -0
  179. package/injector/module/container.d.ts +6 -0
  180. package/injector/module/container.js +24 -0
  181. package/injector/module/lazy/loader.d.ts +21 -0
  182. package/injector/module/lazy/loader.js +49 -0
  183. package/injector/module/lazy/options.d.ts +6 -0
  184. package/injector/module/lazy/options.js +2 -0
  185. package/injector/module/module.d.ts +74 -0
  186. package/injector/module/module.js +383 -0
  187. package/injector/module/ref.d.ts +106 -0
  188. package/injector/module/ref.js +62 -0
  189. package/injector/module/token-factory.d.ts +13 -0
  190. package/injector/module/token-factory.js +71 -0
  191. package/injector/settlement-signal.d.ts +37 -0
  192. package/injector/settlement-signal.js +55 -0
  193. package/inspector/graph-inspector.d.ts +26 -0
  194. package/inspector/graph-inspector.js +163 -0
  195. package/inspector/initialize-on-preview.allowlist.d.ts +6 -0
  196. package/inspector/initialize-on-preview.allowlist.js +13 -0
  197. package/inspector/interfaces/edge.interface.d.ts +28 -0
  198. package/inspector/interfaces/edge.interface.js +2 -0
  199. package/inspector/interfaces/enhancer-metadata-cache-entry.interface.d.ts +12 -0
  200. package/inspector/interfaces/enhancer-metadata-cache-entry.interface.js +2 -0
  201. package/inspector/interfaces/entrypoint.interface.d.ts +10 -0
  202. package/inspector/interfaces/entrypoint.interface.js +2 -0
  203. package/inspector/interfaces/extras.interface.d.ts +18 -0
  204. package/inspector/interfaces/extras.interface.js +2 -0
  205. package/inspector/interfaces/node.interface.d.ts +49 -0
  206. package/inspector/interfaces/node.interface.js +2 -0
  207. package/inspector/interfaces/serialized-graph-json.interface.d.ts +14 -0
  208. package/inspector/interfaces/serialized-graph-json.interface.js +2 -0
  209. package/inspector/interfaces/serialized-graph-metadata.interface.d.ts +10 -0
  210. package/inspector/interfaces/serialized-graph-metadata.interface.js +2 -0
  211. package/inspector/noop-graph-inspector.d.ts +2 -0
  212. package/inspector/noop-graph-inspector.js +8 -0
  213. package/inspector/partial-graph.host.d.ts +7 -0
  214. package/inspector/partial-graph.host.js +15 -0
  215. package/inspector/serialized-graph.d.ts +52 -0
  216. package/inspector/serialized-graph.js +121 -0
  217. package/interceptors/consumer.d.ts +9 -0
  218. package/interceptors/consumer.js +37 -0
  219. package/interceptors/context-creator.d.ts +17 -0
  220. package/interceptors/context-creator.js +67 -0
  221. package/interceptors/index.d.ts +2 -0
  222. package/interceptors/index.js +18 -0
  223. package/interfaces/abstract.interface.d.ts +3 -0
  224. package/interfaces/abstract.interface.js +2 -0
  225. package/interfaces/application/context-options.interface.d.ts +41 -0
  226. package/interfaces/application/context-options.interface.js +9 -0
  227. package/interfaces/application/context.interface.d.ts +162 -0
  228. package/interfaces/application/context.interface.js +2 -0
  229. package/interfaces/application/index.d.ts +1 -0
  230. package/interfaces/application/index.js +17 -0
  231. package/interfaces/context/arguments-host.interface.d.ts +22 -0
  232. package/interfaces/context/arguments-host.interface.js +2 -0
  233. package/interfaces/context/execution.interface.d.ts +18 -0
  234. package/interfaces/context/execution.interface.js +2 -0
  235. package/interfaces/features/exception-filter.interface.d.ts +21 -0
  236. package/interfaces/features/exception-filter.interface.js +2 -0
  237. package/interfaces/features/guards.interface.d.ts +20 -0
  238. package/interfaces/features/guards.interface.js +2 -0
  239. package/interfaces/features/interceptor.interface.d.ts +30 -0
  240. package/interfaces/features/interceptor.interface.js +2 -0
  241. package/interfaces/features/pipes.interface.d.ts +37 -0
  242. package/interfaces/features/pipes.interface.js +2 -0
  243. package/interfaces/helper.interface.d.ts +3 -0
  244. package/interfaces/helper.interface.js +2 -0
  245. package/interfaces/hooks/before-application-shutdown.interface.d.ts +3 -0
  246. package/interfaces/hooks/before-application-shutdown.interface.js +2 -0
  247. package/interfaces/hooks/index.d.ts +5 -0
  248. package/interfaces/hooks/index.js +21 -0
  249. package/interfaces/hooks/on-application-bootstrap.interface.d.ts +9 -0
  250. package/interfaces/hooks/on-application-bootstrap.interface.js +2 -0
  251. package/interfaces/hooks/on-application-shutdown.interface.d.ts +9 -0
  252. package/interfaces/hooks/on-application-shutdown.interface.js +2 -0
  253. package/interfaces/hooks/on-destroy.interface.d.ts +10 -0
  254. package/interfaces/hooks/on-destroy.interface.js +2 -0
  255. package/interfaces/hooks/on-init.interface.d.ts +8 -0
  256. package/interfaces/hooks/on-init.interface.js +2 -0
  257. package/interfaces/index.d.ts +6 -0
  258. package/interfaces/index.js +22 -0
  259. package/interfaces/injectable.interface.d.ts +1 -0
  260. package/interfaces/injectable.interface.js +2 -0
  261. package/interfaces/modules/configurable/async-options.interface.d.ts +42 -0
  262. package/interfaces/modules/configurable/async-options.interface.js +2 -0
  263. package/interfaces/modules/configurable/cls.interface.d.ts +13 -0
  264. package/interfaces/modules/configurable/cls.interface.js +2 -0
  265. package/interfaces/modules/configurable/host.interface.d.ts +62 -0
  266. package/interfaces/modules/configurable/host.interface.js +2 -0
  267. package/interfaces/modules/configurable/index.d.ts +3 -0
  268. package/interfaces/modules/configurable/index.js +19 -0
  269. package/interfaces/modules/definition.interface.d.ts +4 -0
  270. package/interfaces/modules/definition.interface.js +2 -0
  271. package/interfaces/modules/dynamic-module.interface.d.ts +23 -0
  272. package/interfaces/modules/dynamic-module.interface.js +2 -0
  273. package/interfaces/modules/forward-reference.interface.d.ts +3 -0
  274. package/interfaces/modules/forward-reference.interface.js +2 -0
  275. package/interfaces/modules/index.d.ts +9 -0
  276. package/interfaces/modules/index.js +25 -0
  277. package/interfaces/modules/injection-token.interface.d.ts +5 -0
  278. package/interfaces/modules/injection-token.interface.js +2 -0
  279. package/interfaces/modules/introspection-result.interface.d.ts +10 -0
  280. package/interfaces/modules/introspection-result.interface.js +2 -0
  281. package/interfaces/modules/module-metadata.interface.d.ts +24 -0
  282. package/interfaces/modules/module-metadata.interface.js +2 -0
  283. package/interfaces/modules/module.interface.d.ts +2 -0
  284. package/interfaces/modules/module.interface.js +2 -0
  285. package/interfaces/modules/optional-factory-dependency.interface.d.ts +8 -0
  286. package/interfaces/modules/optional-factory-dependency.interface.js +2 -0
  287. package/interfaces/modules/override.interface.d.ts +5 -0
  288. package/interfaces/modules/override.interface.js +2 -0
  289. package/interfaces/modules/provider.interface.d.ts +142 -0
  290. package/interfaces/modules/provider.interface.js +2 -0
  291. package/interfaces/scope.interface.d.ts +35 -0
  292. package/interfaces/scope.interface.js +23 -0
  293. package/interfaces/type.interface.d.ts +3 -0
  294. package/interfaces/type.interface.js +2 -0
  295. package/metadata-scanner.d.ts +4 -0
  296. package/metadata-scanner.js +34 -0
  297. package/module/configurable-module.builder.d.ts +93 -0
  298. package/module/configurable-module.builder.js +204 -0
  299. package/module/constants.d.ts +4 -0
  300. package/module/constants.js +7 -0
  301. package/module/helpers/generate-options-injection-token.helper.d.ts +1 -0
  302. package/module/helpers/generate-options-injection-token.helper.js +9 -0
  303. package/module/helpers/get-injection-providers.helper.d.ts +8 -0
  304. package/module/helpers/get-injection-providers.helper.js +36 -0
  305. package/module/helpers/index.d.ts +2 -0
  306. package/module/helpers/index.js +18 -0
  307. package/module/index.d.ts +2 -0
  308. package/module/index.js +18 -0
  309. package/package.json +35 -0
  310. package/pipes/consumer.d.ts +9 -0
  311. package/pipes/consumer.js +15 -0
  312. package/pipes/context-creator.d.ts +18 -0
  313. package/pipes/context-creator.js +70 -0
  314. package/pipes/index.d.ts +2 -0
  315. package/pipes/index.js +18 -0
  316. package/scanner.d.ts +81 -0
  317. package/scanner.js +374 -0
  318. package/services/console.service.d.ts +86 -0
  319. package/services/console.service.js +233 -0
  320. package/services/index.d.ts +1 -0
  321. package/services/index.js +17 -0
  322. package/services/logger.service.d.ts +157 -0
  323. package/services/logger.service.js +269 -0
  324. package/services/reflector.service.d.ts +110 -0
  325. package/services/reflector.service.js +87 -0
  326. package/test/context/execution-host.spec.d.ts +1 -0
  327. package/test/context/execution-host.spec.js +31 -0
  328. package/test/context/external/creator.spec.d.ts +1 -0
  329. package/test/context/external/creator.spec.js +149 -0
  330. package/test/context/external/proxy.spec.d.ts +1 -0
  331. package/test/context/external/proxy.spec.js +45 -0
  332. package/test/exceptions/external/handler.spec.d.ts +1 -0
  333. package/test/exceptions/external/handler.spec.js +89 -0
  334. package/test/exceptions/filter-context.spec.d.ts +2 -0
  335. package/test/exceptions/filter-context.spec.js +91 -0
  336. package/test/exceptions/messages.spec.d.ts +0 -0
  337. package/test/exceptions/messages.spec.js +201 -0
  338. package/test/exceptions/zona/handler.spec.d.ts +1 -0
  339. package/test/exceptions/zona/handler.spec.js +51 -0
  340. package/test/exceptions/zona/zone.spec.d.ts +1 -0
  341. package/test/exceptions/zona/zone.spec.js +66 -0
  342. package/test/guards/consumer.spec.d.ts +1 -0
  343. package/test/guards/consumer.spec.js +47 -0
  344. package/test/guards/context-creator.spec.d.ts +1 -0
  345. package/test/guards/context-creator.spec.js +138 -0
  346. package/test/helpers/context-id-factory.spec.d.ts +1 -0
  347. package/test/helpers/context-id-factory.spec.js +9 -0
  348. package/test/helpers/shared.spec.d.ts +1 -0
  349. package/test/helpers/shared.spec.js +122 -0
  350. package/test/hooks/before-app-shutdown.hook.spec.d.ts +1 -0
  351. package/test/hooks/before-app-shutdown.hook.spec.js +44 -0
  352. package/test/hooks/on-app-bootstrap.hook.spec.d.ts +1 -0
  353. package/test/hooks/on-app-bootstrap.hook.spec.js +43 -0
  354. package/test/hooks/on-app-shutdown.hook.spec.d.ts +1 -0
  355. package/test/hooks/on-app-shutdown.hook.spec.js +43 -0
  356. package/test/hooks/on-module-destroy.hook.spec.d.ts +1 -0
  357. package/test/hooks/on-module-destroy.hook.spec.js +43 -0
  358. package/test/hooks/on-module-init.hook.spec.d.ts +1 -0
  359. package/test/hooks/on-module-init.hook.spec.js +43 -0
  360. package/test/injector/compiler.spec.d.ts +1 -0
  361. package/test/injector/compiler.spec.js +42 -0
  362. package/test/injector/container.spec.d.ts +1 -0
  363. package/test/injector/container.spec.js +203 -0
  364. package/test/injector/helpers/classifier.spec.d.ts +1 -0
  365. package/test/injector/helpers/classifier.spec.js +102 -0
  366. package/test/injector/injector.spec.d.ts +1 -0
  367. package/test/injector/injector.spec.js +678 -0
  368. package/test/injector/instance/loader.spec.d.ts +1 -0
  369. package/test/injector/instance/loader.spec.js +108 -0
  370. package/test/injector/instance/wrapper.spec.d.ts +1 -0
  371. package/test/injector/instance/wrapper.spec.js +772 -0
  372. package/test/injector/internal-core-module/internal-core-module-factory.spec.d.ts +1 -0
  373. package/test/injector/internal-core-module/internal-core-module-factory.spec.js +27 -0
  374. package/test/injector/module/lazy/loader.spec.d.ts +1 -0
  375. package/test/injector/module/lazy/loader.spec.js +71 -0
  376. package/test/injector/module/module.spec.d.ts +1 -0
  377. package/test/injector/module/module.spec.js +410 -0
  378. package/test/injector/module/token-factory.spec.d.ts +1 -0
  379. package/test/injector/module/token-factory.spec.js +84 -0
  380. package/test/interceptors/consumer.spec.d.ts +1 -0
  381. package/test/interceptors/consumer.spec.js +136 -0
  382. package/test/interceptors/context-creator.spec.d.ts +1 -0
  383. package/test/interceptors/context-creator.spec.js +139 -0
  384. package/test/metadata-scanner.spec.d.ts +1 -0
  385. package/test/metadata-scanner.spec.js +41 -0
  386. package/test/module/configurable-module.builder.spec.d.ts +1 -0
  387. package/test/module/configurable-module.builder.spec.js +102 -0
  388. package/test/module/helpers/get-injection-providers.helper.spec.d.ts +1 -0
  389. package/test/module/helpers/get-injection-providers.helper.spec.js +49 -0
  390. package/test/pipes/consumer.spec.d.ts +1 -0
  391. package/test/pipes/consumer.spec.js +42 -0
  392. package/test/pipes/context-creator.spec.d.ts +1 -0
  393. package/test/pipes/context-creator.spec.js +108 -0
  394. package/test/scanner.spec.d.ts +1 -0
  395. package/test/scanner.spec.js +620 -0
  396. package/test/services/logger.service.spec.d.ts +1 -0
  397. package/test/services/logger.service.spec.js +487 -0
  398. package/test/services/reflector.service.spec.d.ts +1 -0
  399. package/test/services/reflector.service.spec.js +105 -0
  400. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const async_hooks_1 = require("async_hooks");
7
+ const chai_1 = require("chai");
8
+ const rxjs_1 = require("rxjs");
9
+ const sinon_1 = __importDefault(require("sinon"));
10
+ const interceptors_1 = require("@venok/core/interceptors");
11
+ describe("InterceptorsConsumer", () => {
12
+ let consumer;
13
+ let interceptors;
14
+ beforeEach(() => {
15
+ consumer = new interceptors_1.InterceptorsConsumer();
16
+ interceptors = [
17
+ {
18
+ intercept: sinon_1.default.stub().callsFake((ctx, handler) => handler.handle()),
19
+ },
20
+ {
21
+ intercept: sinon_1.default.stub().callsFake(async (ctx, handler) => handler.handle()),
22
+ },
23
+ ];
24
+ });
25
+ describe("intercept", () => {
26
+ describe("when interceptors array is empty", () => {
27
+ let next;
28
+ beforeEach(() => {
29
+ next = sinon_1.default.spy();
30
+ });
31
+ it("should call next()", async () => {
32
+ await consumer.intercept([], null, { constructor: null }, null, next);
33
+ (0, chai_1.expect)(next.calledOnce).to.be.true;
34
+ });
35
+ });
36
+ describe("when interceptors array is not empty", () => {
37
+ let next;
38
+ beforeEach(() => {
39
+ next = sinon_1.default.stub().returns(Promise.resolve(""));
40
+ });
41
+ it("does not call `intercept` (lazy evaluation)", async () => {
42
+ await consumer.intercept(interceptors, null, { constructor: null }, null, next);
43
+ (0, chai_1.expect)(interceptors[0].intercept.called).to.be.false;
44
+ (0, chai_1.expect)(interceptors[1].intercept.called).to.be.false;
45
+ });
46
+ it("should call every `intercept` method when subscribe", async () => {
47
+ const intercepted = await consumer.intercept(interceptors, null, { constructor: null }, null, next);
48
+ await transformToResult(intercepted);
49
+ (0, chai_1.expect)(interceptors[0].intercept.calledOnce).to.be.true;
50
+ (0, chai_1.expect)(interceptors[1].intercept.calledOnce).to.be.true;
51
+ });
52
+ it("should not call `next` (lazy evaluation)", async () => {
53
+ await consumer.intercept(interceptors, null, { constructor: null }, null, next);
54
+ (0, chai_1.expect)(next.called).to.be.false;
55
+ });
56
+ it("should call `next` when subscribe", async () => {
57
+ const intercepted = await consumer.intercept(interceptors, null, { constructor: null }, null, next);
58
+ await transformToResult(intercepted);
59
+ (0, chai_1.expect)(next.called).to.be.true;
60
+ });
61
+ });
62
+ describe("when AsyncLocalStorage is used", () => {
63
+ it("should allow an interceptor to set values in AsyncLocalStorage that are accesible from the controller", async () => {
64
+ const storage = new async_hooks_1.AsyncLocalStorage();
65
+ class StorageInterceptor {
66
+ intercept(_context, next) {
67
+ return storage.run({ value: "hello" }, () => next.handle());
68
+ }
69
+ }
70
+ const next = () => {
71
+ return Promise.resolve(storage.getStore().value);
72
+ };
73
+ const intercepted = await consumer.intercept([new StorageInterceptor()], null, { constructor: null }, null, next);
74
+ const result = await transformToResult(intercepted);
75
+ (0, chai_1.expect)(result).to.equal("hello");
76
+ });
77
+ });
78
+ describe("when retrying is enabled", () => {
79
+ it("should retry a specified amount of times", async () => {
80
+ let count = 0;
81
+ const next = () => {
82
+ count++;
83
+ if (count < 3) {
84
+ return Promise.reject(new Error("count not reached"));
85
+ }
86
+ return Promise.resolve(count);
87
+ };
88
+ class RetryInterceptor {
89
+ intercept(_context, next) {
90
+ return next.handle().pipe((0, rxjs_1.retry)(4));
91
+ }
92
+ }
93
+ const intercepted = await consumer.intercept([new RetryInterceptor()], null, { constructor: null }, null, next);
94
+ (0, chai_1.expect)(await transformToResult(intercepted)).to.equal(3);
95
+ });
96
+ });
97
+ });
98
+ describe("createContext", () => {
99
+ it("should return execution context object", () => {
100
+ const instance = { constructor: {} };
101
+ const callback = () => null;
102
+ const context = consumer.createContext([], instance, callback);
103
+ (0, chai_1.expect)(context.getClass()).to.be.eql(instance.constructor);
104
+ (0, chai_1.expect)(context.getHandler()).to.be.eql(callback);
105
+ });
106
+ });
107
+ describe("transformDeferred", () => {
108
+ describe("when next() result is plain value", () => {
109
+ it("should return Observable", async () => {
110
+ const val = 3;
111
+ const next = async () => val;
112
+ (0, chai_1.expect)(await (0, rxjs_1.lastValueFrom)(consumer.transformDeferred(next))).to.be.eql(val);
113
+ });
114
+ });
115
+ describe("when next() result is Promise", () => {
116
+ it("should return Observable", async () => {
117
+ const val = 3;
118
+ const next = async () => val;
119
+ (0, chai_1.expect)(await (0, rxjs_1.lastValueFrom)(consumer.transformDeferred(next))).to.be.eql(val);
120
+ });
121
+ });
122
+ describe("when next() result is Observable", () => {
123
+ it("should return Observable", async () => {
124
+ const val = 3;
125
+ const next = async () => (0, rxjs_1.of)(val);
126
+ (0, chai_1.expect)(await (0, rxjs_1.lastValueFrom)(consumer.transformDeferred(next))).to.be.eql(val);
127
+ });
128
+ });
129
+ });
130
+ });
131
+ async function transformToResult(resultOrDeferred) {
132
+ if (resultOrDeferred && typeof resultOrDeferred.subscribe === "function") {
133
+ return (0, rxjs_1.lastValueFrom)(resultOrDeferred);
134
+ }
135
+ return resultOrDeferred;
136
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const chai_1 = require("chai");
7
+ const rxjs_1 = require("rxjs");
8
+ const sinon_1 = __importDefault(require("sinon"));
9
+ const interceptors_1 = require("@venok/core/interceptors");
10
+ const config_1 = require("@venok/core/application/config");
11
+ const wrapper_1 = require("@venok/core/injector/instance/wrapper");
12
+ class Interceptor {
13
+ }
14
+ describe("InterceptorsContextCreator", () => {
15
+ let interceptorsContextCreator;
16
+ let interceptors;
17
+ let applicationConfig;
18
+ let container;
19
+ let getSpy;
20
+ class Interceptor1 {
21
+ }
22
+ class Interceptor2 {
23
+ }
24
+ beforeEach(() => {
25
+ interceptors = [
26
+ {
27
+ name: Interceptor1.name,
28
+ token: Interceptor1,
29
+ metatype: Interceptor1,
30
+ getInstanceByContextId: () => interceptors[0],
31
+ instance: {
32
+ intercept: () => (0, rxjs_1.of)(true),
33
+ },
34
+ },
35
+ {
36
+ name: Interceptor2.name,
37
+ token: Interceptor2,
38
+ metatype: Interceptor2,
39
+ getInstanceByContextId: () => interceptors[1],
40
+ instance: {
41
+ intercept: () => (0, rxjs_1.of)(true),
42
+ },
43
+ },
44
+ {},
45
+ undefined,
46
+ ];
47
+ getSpy = sinon_1.default.stub().returns({
48
+ injectables: new Map([
49
+ [Interceptor1, interceptors[0]],
50
+ [Interceptor2, interceptors[1]],
51
+ ]),
52
+ });
53
+ container = {
54
+ getModules: () => ({
55
+ get: getSpy,
56
+ }),
57
+ };
58
+ applicationConfig = new config_1.ApplicationConfig();
59
+ interceptorsContextCreator = new interceptors_1.InterceptorsContextCreator(container, applicationConfig);
60
+ });
61
+ describe("createConcreteContext", () => {
62
+ describe("when `moduleContext` is nil", () => {
63
+ it("should return empty array", () => {
64
+ const result = interceptorsContextCreator.createConcreteContext(interceptors);
65
+ (0, chai_1.expect)(result).to.be.empty;
66
+ });
67
+ });
68
+ describe("when `moduleContext` is defined", () => {
69
+ beforeEach(() => {
70
+ interceptorsContextCreator["moduleContext"] = "test";
71
+ });
72
+ it("should filter metatypes", () => {
73
+ const interceptorTypeRefs = [interceptors[0].metatype, interceptors[1].instance];
74
+ (0, chai_1.expect)(interceptorsContextCreator.createConcreteContext(interceptorTypeRefs)).to.have.length(2);
75
+ });
76
+ });
77
+ });
78
+ describe("getInterceptorInstance", () => {
79
+ describe("when param is an object", () => {
80
+ it("should return instance", () => {
81
+ const instance = { intercept: () => null };
82
+ (0, chai_1.expect)(interceptorsContextCreator.getInterceptorInstance(instance)).to.be.eql(instance);
83
+ });
84
+ });
85
+ describe("when param is a constructor", () => {
86
+ it("should pick instance from container", () => {
87
+ const wrapper = {
88
+ instance: "test",
89
+ getInstanceByContextId: () => wrapper,
90
+ };
91
+ sinon_1.default.stub(interceptorsContextCreator, "getInstanceByMetatype").callsFake(() => wrapper);
92
+ (0, chai_1.expect)(interceptorsContextCreator.getInterceptorInstance(Interceptor)).to.be.eql(wrapper.instance);
93
+ });
94
+ it("should return null", () => {
95
+ sinon_1.default.stub(interceptorsContextCreator, "getInstanceByMetatype").callsFake(() => null);
96
+ (0, chai_1.expect)(interceptorsContextCreator.getInterceptorInstance(Interceptor)).to.be.eql(null);
97
+ });
98
+ });
99
+ });
100
+ describe("getInstanceByMetatype", () => {
101
+ describe('when "moduleContext" is nil', () => {
102
+ it("should return undefined", () => {
103
+ interceptorsContextCreator.moduleContext = undefined;
104
+ (0, chai_1.expect)(interceptorsContextCreator.getInstanceByMetatype(null)).to.be.undefined;
105
+ });
106
+ });
107
+ describe('when "moduleContext" is not nil', () => {
108
+ beforeEach(() => {
109
+ interceptorsContextCreator.moduleContext = "test";
110
+ });
111
+ describe("and when module exists", () => {
112
+ it("should return undefined", () => {
113
+ (0, chai_1.expect)(interceptorsContextCreator.getInstanceByMetatype(class {
114
+ })).to.be.undefined;
115
+ });
116
+ });
117
+ });
118
+ });
119
+ describe("getGlobalMetadata", () => {
120
+ describe("when contextId is static and inquirerId is nil", () => {
121
+ it("should return global interceptors", () => {
122
+ const expectedResult = applicationConfig.getGlobalInterceptors();
123
+ (0, chai_1.expect)(interceptorsContextCreator.getGlobalMetadata()).to.be.equal(expectedResult);
124
+ });
125
+ });
126
+ describe("otherwise", () => {
127
+ it("should merge static global with request/transient scoped interceptors", () => {
128
+ const globalInterceptors = ["test"];
129
+ const instanceWrapper = new wrapper_1.InstanceWrapper();
130
+ const instance = "request-scoped";
131
+ const scopedInterceptorWrappers = [instanceWrapper];
132
+ sinon_1.default.stub(applicationConfig, "getGlobalInterceptors").callsFake(() => globalInterceptors);
133
+ sinon_1.default.stub(applicationConfig, "getGlobalRequestInterceptors").callsFake(() => scopedInterceptorWrappers);
134
+ sinon_1.default.stub(instanceWrapper, "getInstanceByContextId").callsFake(() => ({ instance }));
135
+ (0, chai_1.expect)(interceptorsContextCreator.getGlobalMetadata({ id: 3 })).to.contains(instance, ...globalInterceptors);
136
+ });
137
+ });
138
+ });
139
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const chai_1 = require("chai");
4
+ const metadata_scanner_1 = require("@venok/core/metadata-scanner");
5
+ describe("MetadataScanner", () => {
6
+ let scanner;
7
+ beforeEach(() => {
8
+ scanner = new metadata_scanner_1.MetadataScanner();
9
+ });
10
+ describe("scanFromPrototype", () => {
11
+ class Parent {
12
+ constructor() { }
13
+ testParent() { }
14
+ testParent2() { }
15
+ get propParent() {
16
+ return "";
17
+ }
18
+ set valParent(value) { }
19
+ }
20
+ class Test extends Parent {
21
+ constructor() {
22
+ super();
23
+ }
24
+ get prop() {
25
+ return "";
26
+ }
27
+ set val(value) { }
28
+ test() { }
29
+ test2() { }
30
+ }
31
+ it("should return only methods", () => {
32
+ const methods = scanner.getAllMethodNames(Test.prototype);
33
+ (0, chai_1.expect)(methods).to.eql(["test", "test2", "testParent", "testParent2"]);
34
+ });
35
+ it("should return the same instance for the same prototype", () => {
36
+ const methods1 = scanner.getAllMethodNames(Test.prototype);
37
+ const methods2 = scanner.getAllMethodNames(Test.prototype);
38
+ (0, chai_1.expect)(methods1 === methods2).to.eql(true);
39
+ });
40
+ });
41
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const chai_1 = require("chai");
4
+ const module_1 = require("@venok/core/module");
5
+ describe("ConfigurableModuleBuilder", () => {
6
+ describe("setExtras", () => {
7
+ it("should apply module definition transformer function and return typed builder", () => {
8
+ const { ConfigurableModuleClass } = new module_1.ConfigurableModuleBuilder()
9
+ .setExtras({ isGlobal: false }, (definition, extras) => ({
10
+ ...definition,
11
+ global: extras.isGlobal,
12
+ }))
13
+ .build();
14
+ (0, chai_1.expect)(ConfigurableModuleClass.register({
15
+ // No type error
16
+ isGlobal: true,
17
+ })).to.deep.include({
18
+ global: true,
19
+ });
20
+ });
21
+ });
22
+ describe("setClassMethodName", () => {
23
+ it("should set static class method name and return typed builder", () => {
24
+ const { ConfigurableModuleClass } = new module_1.ConfigurableModuleBuilder().setClassMethodName("forRoot").build();
25
+ (0, chai_1.expect)(ConfigurableModuleClass.forRoot).to.not.be.undefined;
26
+ (0, chai_1.expect)(ConfigurableModuleClass.forRootAsync).to.not.be.undefined;
27
+ (0, chai_1.expect)(ConfigurableModuleClass.register).to.be.undefined;
28
+ });
29
+ });
30
+ describe("setFactoryMethodName", () => {
31
+ it("should set configuration factory class method name and return typed builder", () => {
32
+ const { ConfigurableModuleClass } = new module_1.ConfigurableModuleBuilder().setFactoryMethodName("createOptions").build();
33
+ (0, chai_1.expect)(ConfigurableModuleClass.registerAsync({
34
+ useClass: class {
35
+ // No type error
36
+ createOptions() { }
37
+ },
38
+ })).to.not.be.undefined;
39
+ });
40
+ });
41
+ describe("build", () => {
42
+ it('should return a fully typed "ConfigurableModuleClass"', () => {
43
+ const { ConfigurableModuleClass, OPTIONS_TYPE, ASYNC_OPTIONS_TYPE, MODULE_OPTIONS_TOKEN } = new module_1.ConfigurableModuleBuilder({
44
+ moduleName: "RandomTest",
45
+ alwaysTransient: true,
46
+ })
47
+ .setFactoryMethodName("createOptions")
48
+ .setClassMethodName("forFeature")
49
+ .setExtras({ isGlobal: false, extraProviders: [] }, (definition, extras) => ({
50
+ ...definition,
51
+ global: extras.isGlobal,
52
+ providers: definition.providers?.concat(extras.extraProviders),
53
+ }))
54
+ .build();
55
+ const provideInjectionTokensFrom = [
56
+ {
57
+ provide: "a",
58
+ useFactory: () => { },
59
+ inject: ["b"],
60
+ },
61
+ {
62
+ provide: "b",
63
+ useFactory: () => { },
64
+ inject: ["x"],
65
+ },
66
+ {
67
+ provide: "c",
68
+ useFactory: () => { },
69
+ inject: ["y"],
70
+ },
71
+ ];
72
+ const definition = ConfigurableModuleClass.forFeatureAsync({
73
+ useFactory: () => { },
74
+ inject: ["a"],
75
+ provideInjectionTokensFrom,
76
+ isGlobal: true,
77
+ extraProviders: ["test"],
78
+ });
79
+ (0, chai_1.expect)(definition.global).to.equal(true);
80
+ (0, chai_1.expect)(definition.providers).to.have.length(5);
81
+ (0, chai_1.expect)(definition.providers).to.deep.contain("test");
82
+ (0, chai_1.expect)(definition.providers).to.include.members(provideInjectionTokensFrom.slice(0, 2));
83
+ (0, chai_1.expect)(definition.providers).not.to.include(provideInjectionTokensFrom[2]);
84
+ (0, chai_1.expect)(MODULE_OPTIONS_TOKEN).to.equal("RANDOM_TEST_MODULE_OPTIONS");
85
+ (0, chai_1.expect)(definition.providers[0].provide).to.equal("RANDOM_TEST_MODULE_OPTIONS");
86
+ try {
87
+ (0, chai_1.expect)(ASYNC_OPTIONS_TYPE.imports).to.equal(undefined);
88
+ }
89
+ catch (err) {
90
+ (0, chai_1.expect)(err).to.be.instanceOf(Error);
91
+ (0, chai_1.expect)(err.message).to.equal('"ASYNC_OPTIONS_TYPE" is not supposed to be used as a value.');
92
+ }
93
+ try {
94
+ (0, chai_1.expect)(OPTIONS_TYPE.isGlobal).to.equal(undefined);
95
+ }
96
+ catch (err) {
97
+ (0, chai_1.expect)(err).to.be.instanceOf(Error);
98
+ (0, chai_1.expect)(err.message).to.equal('"OPTIONS_TYPE" is not supposed to be used as a value.');
99
+ }
100
+ });
101
+ });
102
+ });
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const chai_1 = require("chai");
4
+ const helpers_1 = require("@venok/core/module/helpers");
5
+ describe("getInjectionProviders", () => {
6
+ it("should take only required providers", () => {
7
+ class C {
8
+ }
9
+ C.token = "a";
10
+ const p = [
11
+ {
12
+ provide: "a",
13
+ useValue: "a",
14
+ },
15
+ {
16
+ provide: "b",
17
+ useValue: "b",
18
+ },
19
+ C,
20
+ {
21
+ provide: "d",
22
+ useFactory: (c, b) => [c, b],
23
+ inject: [
24
+ C,
25
+ {
26
+ token: "b",
27
+ optional: true,
28
+ },
29
+ "x",
30
+ ],
31
+ },
32
+ {
33
+ provide: "e",
34
+ useFactory: (d, b) => [d, b],
35
+ inject: ["d", "b"],
36
+ },
37
+ {
38
+ provide: "f",
39
+ useValue: "f",
40
+ },
41
+ ];
42
+ // should not include 'a' and 'f'
43
+ const expected = p.slice(1, -1);
44
+ const result = (0, helpers_1.getInjectionProviders)(p, ["e"]);
45
+ (0, chai_1.expect)(result).to.have.length(expected.length);
46
+ (0, chai_1.expect)(result).to.have.members(expected);
47
+ (0, chai_1.expect)(result).not.to.have.members([p[0], p[5]]);
48
+ });
49
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const chai_1 = require("chai");
7
+ const sinon_1 = __importDefault(require("sinon"));
8
+ const pipes_1 = require("@venok/core/pipes");
9
+ const createPipe = (transform) => ({ transform });
10
+ describe("PipesConsumer", () => {
11
+ let consumer;
12
+ beforeEach(() => {
13
+ consumer = new pipes_1.PipesConsumer();
14
+ });
15
+ describe("apply", () => {
16
+ let value, metatype, type, stringifiedType, transforms, data;
17
+ beforeEach(() => {
18
+ value = 0;
19
+ data = null;
20
+ (metatype = {}), (type = "query");
21
+ stringifiedType = "query";
22
+ transforms = [
23
+ createPipe(sinon_1.default.stub().callsFake((val) => val + 1)),
24
+ createPipe(sinon_1.default.stub().callsFake((val) => Promise.resolve(val + 1))),
25
+ createPipe(sinon_1.default.stub().callsFake((val) => val + 1)),
26
+ ];
27
+ });
28
+ it("should call all transform functions", (done) => {
29
+ consumer.apply(value, { metatype, type, data }, transforms).then(() => {
30
+ (0, chai_1.expect)(transforms.reduce((prev, next) => prev && next.transform.called, true)).to.be.true;
31
+ done();
32
+ });
33
+ });
34
+ it("should return expected result", (done) => {
35
+ const expectedResult = 3;
36
+ consumer.apply(value, { metatype, type, data }, transforms).then((result) => {
37
+ (0, chai_1.expect)(result).to.be.eql(expectedResult);
38
+ done();
39
+ });
40
+ });
41
+ });
42
+ });
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const chai_1 = require("chai");
7
+ const sinon_1 = __importDefault(require("sinon"));
8
+ const pipes_1 = require("@venok/core/pipes");
9
+ const container_1 = require("@venok/core/injector/container");
10
+ const config_1 = require("@venok/core/application/config");
11
+ const wrapper_1 = require("@venok/core/injector/instance/wrapper");
12
+ class Pipe {
13
+ }
14
+ describe("PipesContextCreator", () => {
15
+ let creator;
16
+ let container;
17
+ let applicationConfig;
18
+ beforeEach(() => {
19
+ container = new container_1.VenokContainer();
20
+ applicationConfig = new config_1.ApplicationConfig();
21
+ creator = new pipes_1.PipesContextCreator(container, applicationConfig);
22
+ });
23
+ describe("createConcreteContext", () => {
24
+ describe("when metadata is empty or undefined", () => {
25
+ it("should return empty array", () => {
26
+ (0, chai_1.expect)(creator.createConcreteContext(undefined)).to.be.deep.equal([]);
27
+ (0, chai_1.expect)(creator.createConcreteContext([])).to.be.deep.equal([]);
28
+ });
29
+ });
30
+ describe("when metadata is not empty or undefined", () => {
31
+ const metadata = [null, {}, { transform: () => ({}) }];
32
+ it("should return expected array", () => {
33
+ const transforms = creator.createConcreteContext(metadata);
34
+ (0, chai_1.expect)(transforms).to.have.length(1);
35
+ });
36
+ });
37
+ });
38
+ describe("getPipeInstance", () => {
39
+ describe("when param is an object", () => {
40
+ it("should return instance", () => {
41
+ const instance = { transform: () => null };
42
+ (0, chai_1.expect)(creator.getPipeInstance(instance)).to.be.eql(instance);
43
+ });
44
+ });
45
+ describe("when param is a constructor", () => {
46
+ it("should pick instance from container", () => {
47
+ const wrapper = {
48
+ instance: "test",
49
+ getInstanceByContextId: () => wrapper,
50
+ };
51
+ sinon_1.default.stub(creator, "getInstanceByMetatype").callsFake(() => wrapper);
52
+ (0, chai_1.expect)(creator.getPipeInstance(Pipe)).to.be.eql(wrapper.instance);
53
+ });
54
+ it("should return null", () => {
55
+ sinon_1.default.stub(creator, "getInstanceByMetatype").callsFake(() => null);
56
+ (0, chai_1.expect)(creator.getPipeInstance(Pipe)).to.be.eql(null);
57
+ });
58
+ });
59
+ });
60
+ describe("getInstanceByMetatype", () => {
61
+ describe('when "moduleContext" is nil', () => {
62
+ it("should return undefined", () => {
63
+ creator.moduleContext = undefined;
64
+ (0, chai_1.expect)(creator.getInstanceByMetatype(null)).to.be.undefined;
65
+ });
66
+ });
67
+ describe('when "moduleContext" is not nil', () => {
68
+ beforeEach(() => {
69
+ creator.moduleContext = "test";
70
+ });
71
+ describe("and when module exists", () => {
72
+ it("should return undefined", () => {
73
+ sinon_1.default.stub(container.getModules(), "get").callsFake(() => undefined);
74
+ (0, chai_1.expect)(creator.getInstanceByMetatype(null)).to.be.undefined;
75
+ });
76
+ });
77
+ describe("and when module does not exist", () => {
78
+ it("should return instance", () => {
79
+ const instance = { test: true };
80
+ const module = { injectables: { get: () => instance } };
81
+ sinon_1.default.stub(container.getModules(), "get").callsFake(() => module);
82
+ (0, chai_1.expect)(creator.getInstanceByMetatype(class Test {
83
+ })).to.be.eql(instance);
84
+ });
85
+ });
86
+ });
87
+ });
88
+ describe("getGlobalMetadata", () => {
89
+ describe("when contextId is static and inquirerId is nil", () => {
90
+ it("should return global pipes", () => {
91
+ const expectedResult = applicationConfig.getGlobalPipes();
92
+ (0, chai_1.expect)(creator.getGlobalMetadata()).to.be.equal(expectedResult);
93
+ });
94
+ });
95
+ describe("otherwise", () => {
96
+ it("should merge static global with request/transient scoped pipes", () => {
97
+ const globalPipes = ["test"];
98
+ const instanceWrapper = new wrapper_1.InstanceWrapper();
99
+ const instance = "request-scoped";
100
+ const scopedPipeWrappers = [instanceWrapper];
101
+ sinon_1.default.stub(applicationConfig, "getGlobalPipes").callsFake(() => globalPipes);
102
+ sinon_1.default.stub(applicationConfig, "getGlobalRequestPipes").callsFake(() => scopedPipeWrappers);
103
+ sinon_1.default.stub(instanceWrapper, "getInstanceByContextId").callsFake(() => ({ instance }));
104
+ (0, chai_1.expect)(creator.getGlobalMetadata({ id: 3 })).to.contains(instance, ...globalPipes);
105
+ });
106
+ });
107
+ });
108
+ });
@@ -0,0 +1 @@
1
+ export {};