@dipscope/type-manager 7.2.0 → 8.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 (642) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +160 -167
  3. package/dist/es2015/constants/default-value-resolver.js +2 -0
  4. package/dist/es2015/constants/default-value-resolver.js.map +1 -0
  5. package/dist/es2015/constants/empty-array.js +2 -0
  6. package/dist/es2015/constants/empty-array.js.map +1 -0
  7. package/dist/es2015/constants/empty-map.js +2 -0
  8. package/dist/es2015/constants/empty-map.js.map +1 -0
  9. package/dist/es2015/constants/index.js +5 -0
  10. package/dist/es2015/constants/index.js.map +1 -0
  11. package/dist/es2015/constants/null-value-resolver.js +2 -0
  12. package/dist/es2015/constants/null-value-resolver.js.map +1 -0
  13. package/dist/es2015/custom-key.js.map +1 -1
  14. package/dist/es2015/factories/type-factory.js +22 -23
  15. package/dist/es2015/factories/type-factory.js.map +1 -1
  16. package/dist/es2015/functions/get-own-reflect-metadata.js +1 -2
  17. package/dist/es2015/functions/get-own-reflect-metadata.js.map +1 -1
  18. package/dist/es2015/functions/get-reflect-metadata.js +1 -2
  19. package/dist/es2015/functions/get-reflect-metadata.js.map +1 -1
  20. package/dist/es2015/functions/get-words.js +61 -2
  21. package/dist/es2015/functions/get-words.js.map +1 -1
  22. package/dist/es2015/functions/index.js +0 -12
  23. package/dist/es2015/functions/index.js.map +1 -1
  24. package/dist/es2015/functions/json-parse.js.map +1 -1
  25. package/dist/es2015/functions/json-stringify.js +6 -5
  26. package/dist/es2015/functions/json-stringify.js.map +1 -1
  27. package/dist/es2015/functions/name-of.js +1 -5
  28. package/dist/es2015/functions/name-of.js.map +1 -1
  29. package/dist/es2015/index.js +17 -12
  30. package/dist/es2015/index.js.map +1 -1
  31. package/dist/es2015/inject-decorator.js +2 -0
  32. package/dist/es2015/inject-decorator.js.map +1 -0
  33. package/dist/es2015/inject-metadata.js +34 -33
  34. package/dist/es2015/inject-metadata.js.map +1 -1
  35. package/dist/es2015/inject-sorters/asc-inject-sorter.js +1 -9
  36. package/dist/es2015/inject-sorters/asc-inject-sorter.js.map +1 -1
  37. package/dist/es2015/inject-sorters/desc-inject-sorter.js +1 -9
  38. package/dist/es2015/inject-sorters/desc-inject-sorter.js.map +1 -1
  39. package/dist/es2015/inject-state.js +2 -0
  40. package/dist/es2015/inject-state.js.map +1 -0
  41. package/dist/es2015/inject-states/index.js +3 -0
  42. package/dist/es2015/inject-states/index.js.map +1 -0
  43. package/dist/es2015/inject-states/resolved-inject-state.js +10 -0
  44. package/dist/es2015/inject-states/resolved-inject-state.js.map +1 -0
  45. package/dist/es2015/inject-states/unresolved-inject-state.js +31 -0
  46. package/dist/es2015/inject-states/unresolved-inject-state.js.map +1 -0
  47. package/dist/es2015/inject.js +6 -8
  48. package/dist/es2015/inject.js.map +1 -1
  49. package/dist/es2015/injectors/singleton-injector.js +6 -10
  50. package/dist/es2015/injectors/singleton-injector.js.map +1 -1
  51. package/dist/es2015/logger-level.js +9 -0
  52. package/dist/es2015/logger-level.js.map +1 -0
  53. package/dist/es2015/logger.js +79 -0
  54. package/dist/es2015/logger.js.map +1 -0
  55. package/dist/es2015/metadata.js +45 -57
  56. package/dist/es2015/metadata.js.map +1 -1
  57. package/dist/es2015/null-value-resolver.js +2 -0
  58. package/dist/es2015/null-value-resolver.js.map +1 -0
  59. package/dist/es2015/nullable.js +2 -0
  60. package/dist/es2015/nullable.js.map +1 -0
  61. package/dist/es2015/optional.js +2 -0
  62. package/dist/es2015/optional.js.map +1 -0
  63. package/dist/es2015/property-decorator.js +2 -0
  64. package/dist/es2015/property-decorator.js.map +1 -0
  65. package/dist/es2015/property-extension-metadata-ctor-set-key.js +1 -1
  66. package/dist/es2015/property-extension-metadata-ctor-set-key.js.map +1 -1
  67. package/dist/es2015/property-extension-metadata.js.map +1 -1
  68. package/dist/es2015/property-metadata.js +224 -145
  69. package/dist/es2015/property-metadata.js.map +1 -1
  70. package/dist/es2015/property-sorters/asc-property-sorter.js +1 -9
  71. package/dist/es2015/property-sorters/asc-property-sorter.js.map +1 -1
  72. package/dist/es2015/property-sorters/desc-property-sorter.js +1 -9
  73. package/dist/es2015/property-sorters/desc-property-sorter.js.map +1 -1
  74. package/dist/es2015/property-state.js +2 -0
  75. package/dist/es2015/property-state.js.map +1 -0
  76. package/dist/es2015/property-states/index.js +3 -0
  77. package/dist/es2015/property-states/index.js.map +1 -0
  78. package/dist/es2015/property-states/resolved-property-state.js +27 -0
  79. package/dist/es2015/property-states/resolved-property-state.js.map +1 -0
  80. package/dist/es2015/property-states/unresolved-property-state.js +167 -0
  81. package/dist/es2015/property-states/unresolved-property-state.js.map +1 -0
  82. package/dist/es2015/property.js +44 -22
  83. package/dist/es2015/property.js.map +1 -1
  84. package/dist/es2015/reference-handlers/circular-reference-handler.js +2 -3
  85. package/dist/es2015/reference-handlers/circular-reference-handler.js.map +1 -1
  86. package/dist/es2015/reference-handlers/json-path-reference-handler.js +7 -6
  87. package/dist/es2015/reference-handlers/json-path-reference-handler.js.map +1 -1
  88. package/dist/es2015/reference-handlers/plain-reference-handler.js +2 -3
  89. package/dist/es2015/reference-handlers/plain-reference-handler.js.map +1 -1
  90. package/dist/es2015/serializer-context.js +65 -171
  91. package/dist/es2015/serializer-context.js.map +1 -1
  92. package/dist/es2015/serializers/any-serializer.js +4 -5
  93. package/dist/es2015/serializers/any-serializer.js.map +1 -1
  94. package/dist/es2015/serializers/array-buffer-serializer.js +8 -13
  95. package/dist/es2015/serializers/array-buffer-serializer.js.map +1 -1
  96. package/dist/es2015/serializers/array-serializer.js +18 -25
  97. package/dist/es2015/serializers/array-serializer.js.map +1 -1
  98. package/dist/es2015/serializers/boolean-serializer.js +12 -19
  99. package/dist/es2015/serializers/boolean-serializer.js.map +1 -1
  100. package/dist/es2015/serializers/data-view-serializer.js +8 -14
  101. package/dist/es2015/serializers/data-view-serializer.js.map +1 -1
  102. package/dist/es2015/serializers/date-serializer.js +8 -13
  103. package/dist/es2015/serializers/date-serializer.js.map +1 -1
  104. package/dist/es2015/serializers/float-32-array-serializer.js +8 -14
  105. package/dist/es2015/serializers/float-32-array-serializer.js.map +1 -1
  106. package/dist/es2015/serializers/float-64-array-serializer.js +8 -14
  107. package/dist/es2015/serializers/float-64-array-serializer.js.map +1 -1
  108. package/dist/es2015/serializers/int-16-array-serializer.js +8 -14
  109. package/dist/es2015/serializers/int-16-array-serializer.js.map +1 -1
  110. package/dist/es2015/serializers/int-32-array-serializer.js +8 -14
  111. package/dist/es2015/serializers/int-32-array-serializer.js.map +1 -1
  112. package/dist/es2015/serializers/int-8-array-serializer.js +8 -14
  113. package/dist/es2015/serializers/int-8-array-serializer.js.map +1 -1
  114. package/dist/es2015/serializers/map-serializer.js +42 -54
  115. package/dist/es2015/serializers/map-serializer.js.map +1 -1
  116. package/dist/es2015/serializers/number-serializer.js +10 -17
  117. package/dist/es2015/serializers/number-serializer.js.map +1 -1
  118. package/dist/es2015/serializers/set-serializer.js +19 -26
  119. package/dist/es2015/serializers/set-serializer.js.map +1 -1
  120. package/dist/es2015/serializers/string-serializer.js +12 -19
  121. package/dist/es2015/serializers/string-serializer.js.map +1 -1
  122. package/dist/es2015/serializers/type-serializer.js +64 -71
  123. package/dist/es2015/serializers/type-serializer.js.map +1 -1
  124. package/dist/es2015/serializers/uint-16-array-serializer.js +8 -14
  125. package/dist/es2015/serializers/uint-16-array-serializer.js.map +1 -1
  126. package/dist/es2015/serializers/uint-32-array-serializer.js +8 -14
  127. package/dist/es2015/serializers/uint-32-array-serializer.js.map +1 -1
  128. package/dist/es2015/serializers/uint-8-array-serializer.js +8 -14
  129. package/dist/es2015/serializers/uint-8-array-serializer.js.map +1 -1
  130. package/dist/es2015/serializers/uint-8-clamped-array-serializer.js +8 -14
  131. package/dist/es2015/serializers/uint-8-clamped-array-serializer.js.map +1 -1
  132. package/dist/es2015/serializers/unknown-serializer.js +4 -5
  133. package/dist/es2015/serializers/unknown-serializer.js.map +1 -1
  134. package/dist/es2015/type-decorator.js +2 -0
  135. package/dist/es2015/type-decorator.js.map +1 -0
  136. package/dist/es2015/type-entry.js +2 -0
  137. package/dist/es2015/type-entry.js.map +1 -0
  138. package/dist/es2015/type-extension-metadata-ctor-set-key.js +1 -1
  139. package/dist/es2015/type-extension-metadata-ctor-set-key.js.map +1 -1
  140. package/dist/es2015/type-extension-metadata.js.map +1 -1
  141. package/dist/es2015/type-manager.js +57 -55
  142. package/dist/es2015/type-manager.js.map +1 -1
  143. package/dist/es2015/type-metadata-symbol.js +1 -1
  144. package/dist/es2015/type-metadata-symbol.js.map +1 -1
  145. package/dist/es2015/type-metadata.js +465 -222
  146. package/dist/es2015/type-metadata.js.map +1 -1
  147. package/dist/es2015/type-scope.js +58 -0
  148. package/dist/es2015/type-scope.js.map +1 -0
  149. package/dist/es2015/type-state.js +2 -0
  150. package/dist/es2015/type-state.js.map +1 -0
  151. package/dist/es2015/type-states/index.js +3 -0
  152. package/dist/es2015/type-states/index.js.map +1 -0
  153. package/dist/es2015/type-states/resolved-type-state.js +44 -0
  154. package/dist/es2015/type-states/resolved-type-state.js.map +1 -0
  155. package/dist/es2015/type-states/unresolved-type-state.js +303 -0
  156. package/dist/es2015/type-states/unresolved-type-state.js.map +1 -0
  157. package/dist/es2015/type.js +3 -1
  158. package/dist/es2015/type.js.map +1 -1
  159. package/dist/es5/constants/default-value-resolver.js +2 -0
  160. package/dist/es5/constants/default-value-resolver.js.map +1 -0
  161. package/dist/es5/constants/empty-array.js +2 -0
  162. package/dist/es5/constants/empty-array.js.map +1 -0
  163. package/dist/es5/constants/empty-map.js +2 -0
  164. package/dist/es5/constants/empty-map.js.map +1 -0
  165. package/dist/es5/constants/index.js +5 -0
  166. package/dist/es5/constants/index.js.map +1 -0
  167. package/dist/es5/constants/null-value-resolver.js +2 -0
  168. package/dist/es5/constants/null-value-resolver.js.map +1 -0
  169. package/dist/es5/custom-key.js.map +1 -1
  170. package/dist/es5/factories/type-factory.js +63 -39
  171. package/dist/es5/factories/type-factory.js.map +1 -1
  172. package/dist/es5/functions/get-own-reflect-metadata.js +1 -2
  173. package/dist/es5/functions/get-own-reflect-metadata.js.map +1 -1
  174. package/dist/es5/functions/get-reflect-metadata.js +1 -2
  175. package/dist/es5/functions/get-reflect-metadata.js.map +1 -1
  176. package/dist/es5/functions/get-words.js +61 -2
  177. package/dist/es5/functions/get-words.js.map +1 -1
  178. package/dist/es5/functions/index.js +0 -12
  179. package/dist/es5/functions/index.js.map +1 -1
  180. package/dist/es5/functions/json-parse.js.map +1 -1
  181. package/dist/es5/functions/json-stringify.js +6 -5
  182. package/dist/es5/functions/json-stringify.js.map +1 -1
  183. package/dist/es5/functions/name-of.js +1 -5
  184. package/dist/es5/functions/name-of.js.map +1 -1
  185. package/dist/es5/index.js +17 -12
  186. package/dist/es5/index.js.map +1 -1
  187. package/dist/es5/inject-decorator.js +2 -0
  188. package/dist/es5/inject-decorator.js.map +1 -0
  189. package/dist/es5/inject-metadata.js +49 -34
  190. package/dist/es5/inject-metadata.js.map +1 -1
  191. package/dist/es5/inject-sorters/asc-inject-sorter.js +1 -9
  192. package/dist/es5/inject-sorters/asc-inject-sorter.js.map +1 -1
  193. package/dist/es5/inject-sorters/desc-inject-sorter.js +1 -9
  194. package/dist/es5/inject-sorters/desc-inject-sorter.js.map +1 -1
  195. package/dist/es5/inject-state.js +2 -0
  196. package/dist/es5/inject-state.js.map +1 -0
  197. package/dist/es5/inject-states/index.js +3 -0
  198. package/dist/es5/inject-states/index.js.map +1 -0
  199. package/dist/es5/inject-states/resolved-inject-state.js +12 -0
  200. package/dist/es5/inject-states/resolved-inject-state.js.map +1 -0
  201. package/dist/es5/inject-states/unresolved-inject-state.js +45 -0
  202. package/dist/es5/inject-states/unresolved-inject-state.js.map +1 -0
  203. package/dist/es5/inject.js +6 -8
  204. package/dist/es5/inject.js.map +1 -1
  205. package/dist/es5/injectors/singleton-injector.js +31 -22
  206. package/dist/es5/injectors/singleton-injector.js.map +1 -1
  207. package/dist/es5/logger-level.js +9 -0
  208. package/dist/es5/logger-level.js.map +1 -0
  209. package/dist/es5/logger.js +122 -0
  210. package/dist/es5/logger.js.map +1 -0
  211. package/dist/es5/metadata.js +44 -79
  212. package/dist/es5/metadata.js.map +1 -1
  213. package/dist/es5/null-value-resolver.js +2 -0
  214. package/dist/es5/null-value-resolver.js.map +1 -0
  215. package/dist/es5/nullable.js +2 -0
  216. package/dist/es5/nullable.js.map +1 -0
  217. package/dist/es5/optional.js +2 -0
  218. package/dist/es5/optional.js.map +1 -0
  219. package/dist/es5/property-decorator.js +2 -0
  220. package/dist/es5/property-decorator.js.map +1 -0
  221. package/dist/es5/property-extension-metadata-ctor-set-key.js +1 -1
  222. package/dist/es5/property-extension-metadata-ctor-set-key.js.map +1 -1
  223. package/dist/es5/property-extension-metadata.js.map +1 -1
  224. package/dist/es5/property-metadata.js +288 -162
  225. package/dist/es5/property-metadata.js.map +1 -1
  226. package/dist/es5/property-sorters/asc-property-sorter.js +1 -9
  227. package/dist/es5/property-sorters/asc-property-sorter.js.map +1 -1
  228. package/dist/es5/property-sorters/desc-property-sorter.js +1 -9
  229. package/dist/es5/property-sorters/desc-property-sorter.js.map +1 -1
  230. package/dist/es5/property-state.js +2 -0
  231. package/dist/es5/property-state.js.map +1 -0
  232. package/dist/es5/property-states/index.js +3 -0
  233. package/dist/es5/property-states/index.js.map +1 -0
  234. package/dist/es5/property-states/resolved-property-state.js +29 -0
  235. package/dist/es5/property-states/resolved-property-state.js.map +1 -0
  236. package/dist/es5/property-states/unresolved-property-state.js +249 -0
  237. package/dist/es5/property-states/unresolved-property-state.js.map +1 -0
  238. package/dist/es5/property.js +44 -22
  239. package/dist/es5/property.js.map +1 -1
  240. package/dist/es5/reference-handlers/circular-reference-handler.js +2 -3
  241. package/dist/es5/reference-handlers/circular-reference-handler.js.map +1 -1
  242. package/dist/es5/reference-handlers/json-path-reference-handler.js +10 -31
  243. package/dist/es5/reference-handlers/json-path-reference-handler.js.map +1 -1
  244. package/dist/es5/reference-handlers/plain-reference-handler.js +2 -3
  245. package/dist/es5/reference-handlers/plain-reference-handler.js.map +1 -1
  246. package/dist/es5/serializer-context.js +71 -237
  247. package/dist/es5/serializer-context.js.map +1 -1
  248. package/dist/es5/serializers/any-serializer.js +4 -5
  249. package/dist/es5/serializers/any-serializer.js.map +1 -1
  250. package/dist/es5/serializers/array-buffer-serializer.js +8 -13
  251. package/dist/es5/serializers/array-buffer-serializer.js.map +1 -1
  252. package/dist/es5/serializers/array-serializer.js +18 -31
  253. package/dist/es5/serializers/array-serializer.js.map +1 -1
  254. package/dist/es5/serializers/boolean-serializer.js +12 -19
  255. package/dist/es5/serializers/boolean-serializer.js.map +1 -1
  256. package/dist/es5/serializers/data-view-serializer.js +8 -14
  257. package/dist/es5/serializers/data-view-serializer.js.map +1 -1
  258. package/dist/es5/serializers/date-serializer.js +8 -13
  259. package/dist/es5/serializers/date-serializer.js.map +1 -1
  260. package/dist/es5/serializers/float-32-array-serializer.js +8 -14
  261. package/dist/es5/serializers/float-32-array-serializer.js.map +1 -1
  262. package/dist/es5/serializers/float-64-array-serializer.js +8 -14
  263. package/dist/es5/serializers/float-64-array-serializer.js.map +1 -1
  264. package/dist/es5/serializers/int-16-array-serializer.js +8 -14
  265. package/dist/es5/serializers/int-16-array-serializer.js.map +1 -1
  266. package/dist/es5/serializers/int-32-array-serializer.js +8 -14
  267. package/dist/es5/serializers/int-32-array-serializer.js.map +1 -1
  268. package/dist/es5/serializers/int-8-array-serializer.js +8 -14
  269. package/dist/es5/serializers/int-8-array-serializer.js.map +1 -1
  270. package/dist/es5/serializers/map-serializer.js +69 -55
  271. package/dist/es5/serializers/map-serializer.js.map +1 -1
  272. package/dist/es5/serializers/number-serializer.js +10 -17
  273. package/dist/es5/serializers/number-serializer.js.map +1 -1
  274. package/dist/es5/serializers/set-serializer.js +30 -27
  275. package/dist/es5/serializers/set-serializer.js.map +1 -1
  276. package/dist/es5/serializers/string-serializer.js +12 -19
  277. package/dist/es5/serializers/string-serializer.js.map +1 -1
  278. package/dist/es5/serializers/type-serializer.js +65 -101
  279. package/dist/es5/serializers/type-serializer.js.map +1 -1
  280. package/dist/es5/serializers/uint-16-array-serializer.js +8 -14
  281. package/dist/es5/serializers/uint-16-array-serializer.js.map +1 -1
  282. package/dist/es5/serializers/uint-32-array-serializer.js +8 -14
  283. package/dist/es5/serializers/uint-32-array-serializer.js.map +1 -1
  284. package/dist/es5/serializers/uint-8-array-serializer.js +8 -14
  285. package/dist/es5/serializers/uint-8-array-serializer.js.map +1 -1
  286. package/dist/es5/serializers/uint-8-clamped-array-serializer.js +8 -14
  287. package/dist/es5/serializers/uint-8-clamped-array-serializer.js.map +1 -1
  288. package/dist/es5/serializers/unknown-serializer.js +4 -5
  289. package/dist/es5/serializers/unknown-serializer.js.map +1 -1
  290. package/dist/es5/type-decorator.js +2 -0
  291. package/dist/es5/type-decorator.js.map +1 -0
  292. package/dist/es5/type-entry.js +2 -0
  293. package/dist/es5/type-entry.js.map +1 -0
  294. package/dist/es5/type-extension-metadata-ctor-set-key.js +1 -1
  295. package/dist/es5/type-extension-metadata-ctor-set-key.js.map +1 -1
  296. package/dist/es5/type-extension-metadata.js.map +1 -1
  297. package/dist/es5/type-manager.js +112 -63
  298. package/dist/es5/type-manager.js.map +1 -1
  299. package/dist/es5/type-metadata-symbol.js +1 -1
  300. package/dist/es5/type-metadata-symbol.js.map +1 -1
  301. package/dist/es5/type-metadata.js +597 -265
  302. package/dist/es5/type-metadata.js.map +1 -1
  303. package/dist/es5/type-scope.js +108 -0
  304. package/dist/es5/type-scope.js.map +1 -0
  305. package/dist/es5/type-state.js +2 -0
  306. package/dist/es5/type-state.js.map +1 -0
  307. package/dist/es5/type-states/index.js +3 -0
  308. package/dist/es5/type-states/index.js.map +1 -0
  309. package/dist/es5/type-states/resolved-type-state.js +46 -0
  310. package/dist/es5/type-states/resolved-type-state.js.map +1 -0
  311. package/dist/es5/type-states/unresolved-type-state.js +453 -0
  312. package/dist/es5/type-states/unresolved-type-state.js.map +1 -0
  313. package/dist/es5/type.js +3 -1
  314. package/dist/es5/type.js.map +1 -1
  315. package/dist/types/constants/default-value-resolver.d.ts +8 -0
  316. package/dist/types/constants/default-value-resolver.d.ts.map +1 -0
  317. package/dist/types/constants/empty-array.d.ts +7 -0
  318. package/dist/types/constants/empty-array.d.ts.map +1 -0
  319. package/dist/types/constants/empty-map.d.ts +7 -0
  320. package/dist/types/constants/empty-map.d.ts.map +1 -0
  321. package/dist/types/constants/index.d.ts +5 -0
  322. package/dist/types/constants/index.d.ts.map +1 -0
  323. package/dist/types/constants/null-value-resolver.d.ts +8 -0
  324. package/dist/types/constants/null-value-resolver.d.ts.map +1 -0
  325. package/dist/types/custom-key.d.ts +4 -3
  326. package/dist/types/custom-key.d.ts.map +1 -1
  327. package/dist/types/custom-option.d.ts +2 -2
  328. package/dist/types/custom-value.d.ts +2 -1
  329. package/dist/types/custom-value.d.ts.map +1 -1
  330. package/dist/types/factories/type-factory.d.ts +8 -5
  331. package/dist/types/factories/type-factory.d.ts.map +1 -1
  332. package/dist/types/factory.d.ts +7 -4
  333. package/dist/types/factory.d.ts.map +1 -1
  334. package/dist/types/functions/get-own-reflect-metadata.d.ts.map +1 -1
  335. package/dist/types/functions/get-reflect-metadata.d.ts.map +1 -1
  336. package/dist/types/functions/get-words.d.ts +3 -3
  337. package/dist/types/functions/get-words.d.ts.map +1 -1
  338. package/dist/types/functions/index.d.ts +0 -12
  339. package/dist/types/functions/index.d.ts.map +1 -1
  340. package/dist/types/functions/json-parse.d.ts +1 -1
  341. package/dist/types/functions/json-parse.d.ts.map +1 -1
  342. package/dist/types/functions/json-stringify.d.ts.map +1 -1
  343. package/dist/types/functions/name-of.d.ts.map +1 -1
  344. package/dist/types/generic-argument.d.ts +2 -2
  345. package/dist/types/generic-argument.d.ts.map +1 -1
  346. package/dist/types/generic-metadata.d.ts +2 -2
  347. package/dist/types/generic-metadata.d.ts.map +1 -1
  348. package/dist/types/index.d.ts +17 -12
  349. package/dist/types/index.d.ts.map +1 -1
  350. package/dist/types/inject-decorator.d.ts +7 -0
  351. package/dist/types/inject-decorator.d.ts.map +1 -0
  352. package/dist/types/inject-metadata.d.ts +52 -45
  353. package/dist/types/inject-metadata.d.ts.map +1 -1
  354. package/dist/types/inject-options.d.ts +8 -8
  355. package/dist/types/inject-options.d.ts.map +1 -1
  356. package/dist/types/inject-sorter.d.ts +3 -3
  357. package/dist/types/inject-sorter.d.ts.map +1 -1
  358. package/dist/types/inject-sorters/asc-inject-sorter.d.ts +3 -3
  359. package/dist/types/inject-sorters/asc-inject-sorter.d.ts.map +1 -1
  360. package/dist/types/inject-sorters/desc-inject-sorter.d.ts +3 -3
  361. package/dist/types/inject-sorters/desc-inject-sorter.d.ts.map +1 -1
  362. package/dist/types/inject-state.d.ts +36 -0
  363. package/dist/types/inject-state.d.ts.map +1 -0
  364. package/dist/types/inject-states/index.d.ts +3 -0
  365. package/dist/types/inject-states/index.d.ts.map +1 -0
  366. package/dist/types/inject-states/resolved-inject-state.d.ts +46 -0
  367. package/dist/types/inject-states/resolved-inject-state.d.ts.map +1 -0
  368. package/dist/types/inject-states/unresolved-inject-state.d.ts +49 -0
  369. package/dist/types/inject-states/unresolved-inject-state.d.ts.map +1 -0
  370. package/dist/types/inject.d.ts +5 -4
  371. package/dist/types/inject.d.ts.map +1 -1
  372. package/dist/types/injector.d.ts +4 -3
  373. package/dist/types/injector.d.ts.map +1 -1
  374. package/dist/types/injectors/singleton-injector.d.ts +5 -5
  375. package/dist/types/injectors/singleton-injector.d.ts.map +1 -1
  376. package/dist/types/logger-level.d.ts +31 -0
  377. package/dist/types/logger-level.d.ts.map +1 -0
  378. package/dist/types/logger.d.ts +125 -0
  379. package/dist/types/logger.d.ts.map +1 -0
  380. package/dist/types/metadata.d.ts +29 -39
  381. package/dist/types/metadata.d.ts.map +1 -1
  382. package/dist/types/null-value-resolver.d.ts +9 -0
  383. package/dist/types/null-value-resolver.d.ts.map +1 -0
  384. package/dist/types/nullable.d.ts +7 -0
  385. package/dist/types/nullable.d.ts.map +1 -0
  386. package/dist/types/optional.d.ts +7 -0
  387. package/dist/types/optional.d.ts.map +1 -0
  388. package/dist/types/property-decorator.d.ts +7 -0
  389. package/dist/types/property-decorator.d.ts.map +1 -0
  390. package/dist/types/property-extension-metadata-ctor-set-key.d.ts +1 -1
  391. package/dist/types/property-extension-metadata-ctor-set-key.d.ts.map +1 -1
  392. package/dist/types/property-extension-metadata-ctor.d.ts +2 -2
  393. package/dist/types/property-extension-metadata-ctor.d.ts.map +1 -1
  394. package/dist/types/property-extension-metadata.d.ts +7 -7
  395. package/dist/types/property-extension-metadata.d.ts.map +1 -1
  396. package/dist/types/property-metadata.d.ts +134 -119
  397. package/dist/types/property-metadata.d.ts.map +1 -1
  398. package/dist/types/property-options.d.ts +11 -10
  399. package/dist/types/property-options.d.ts.map +1 -1
  400. package/dist/types/property-sorter.d.ts +3 -3
  401. package/dist/types/property-sorter.d.ts.map +1 -1
  402. package/dist/types/property-sorters/asc-property-sorter.d.ts +3 -3
  403. package/dist/types/property-sorters/asc-property-sorter.d.ts.map +1 -1
  404. package/dist/types/property-sorters/desc-property-sorter.d.ts +3 -3
  405. package/dist/types/property-sorters/desc-property-sorter.d.ts.map +1 -1
  406. package/dist/types/property-state.d.ts +149 -0
  407. package/dist/types/property-state.d.ts.map +1 -0
  408. package/dist/types/property-states/index.d.ts +3 -0
  409. package/dist/types/property-states/index.d.ts.map +1 -0
  410. package/dist/types/property-states/resolved-property-state.d.ts +176 -0
  411. package/dist/types/property-states/resolved-property-state.d.ts.map +1 -0
  412. package/dist/types/property-states/unresolved-property-state.d.ts +162 -0
  413. package/dist/types/property-states/unresolved-property-state.d.ts.map +1 -0
  414. package/dist/types/property.d.ts +5 -4
  415. package/dist/types/property.d.ts.map +1 -1
  416. package/dist/types/reference-handlers/circular-reference-handler.d.ts.map +1 -1
  417. package/dist/types/reference-handlers/json-path-reference-handler.d.ts.map +1 -1
  418. package/dist/types/reference-handlers/plain-reference-handler.d.ts.map +1 -1
  419. package/dist/types/reference-value-setter.d.ts +1 -1
  420. package/dist/types/reference-value-setter.d.ts.map +1 -1
  421. package/dist/types/serializer-context.d.ts +70 -164
  422. package/dist/types/serializer-context.d.ts.map +1 -1
  423. package/dist/types/serializer.d.ts +8 -8
  424. package/dist/types/serializer.d.ts.map +1 -1
  425. package/dist/types/serializers/any-serializer.d.ts.map +1 -1
  426. package/dist/types/serializers/array-buffer-serializer.d.ts.map +1 -1
  427. package/dist/types/serializers/array-serializer.d.ts.map +1 -1
  428. package/dist/types/serializers/boolean-serializer.d.ts +1 -1
  429. package/dist/types/serializers/boolean-serializer.d.ts.map +1 -1
  430. package/dist/types/serializers/data-view-serializer.d.ts.map +1 -1
  431. package/dist/types/serializers/date-serializer.d.ts.map +1 -1
  432. package/dist/types/serializers/float-32-array-serializer.d.ts.map +1 -1
  433. package/dist/types/serializers/float-64-array-serializer.d.ts.map +1 -1
  434. package/dist/types/serializers/int-16-array-serializer.d.ts.map +1 -1
  435. package/dist/types/serializers/int-32-array-serializer.d.ts.map +1 -1
  436. package/dist/types/serializers/int-8-array-serializer.d.ts.map +1 -1
  437. package/dist/types/serializers/map-serializer.d.ts.map +1 -1
  438. package/dist/types/serializers/number-serializer.d.ts +1 -1
  439. package/dist/types/serializers/number-serializer.d.ts.map +1 -1
  440. package/dist/types/serializers/set-serializer.d.ts.map +1 -1
  441. package/dist/types/serializers/string-serializer.d.ts +1 -1
  442. package/dist/types/serializers/string-serializer.d.ts.map +1 -1
  443. package/dist/types/serializers/type-serializer.d.ts.map +1 -1
  444. package/dist/types/serializers/uint-16-array-serializer.d.ts.map +1 -1
  445. package/dist/types/serializers/uint-32-array-serializer.d.ts.map +1 -1
  446. package/dist/types/serializers/uint-8-array-serializer.d.ts.map +1 -1
  447. package/dist/types/serializers/uint-8-clamped-array-serializer.d.ts.map +1 -1
  448. package/dist/types/serializers/unknown-serializer.d.ts.map +1 -1
  449. package/dist/types/type-abstraction.d.ts +2 -2
  450. package/dist/types/type-abstraction.d.ts.map +1 -1
  451. package/dist/types/type-argument.d.ts +3 -3
  452. package/dist/types/type-argument.d.ts.map +1 -1
  453. package/dist/types/type-configuration.d.ts +4 -4
  454. package/dist/types/type-configuration.d.ts.map +1 -1
  455. package/dist/types/type-ctor.d.ts +2 -2
  456. package/dist/types/type-ctor.d.ts.map +1 -1
  457. package/dist/types/type-decorator.d.ts +7 -0
  458. package/dist/types/type-decorator.d.ts.map +1 -0
  459. package/dist/types/type-entry.d.ts +29 -0
  460. package/dist/types/type-entry.d.ts.map +1 -0
  461. package/dist/types/type-extension-metadata-ctor-set-key.d.ts +1 -1
  462. package/dist/types/type-extension-metadata-ctor-set-key.d.ts.map +1 -1
  463. package/dist/types/type-extension-metadata-ctor.d.ts +2 -2
  464. package/dist/types/type-extension-metadata-ctor.d.ts.map +1 -1
  465. package/dist/types/type-extension-metadata.d.ts +6 -6
  466. package/dist/types/type-extension-metadata.d.ts.map +1 -1
  467. package/dist/types/type-fn.d.ts +2 -2
  468. package/dist/types/type-fn.d.ts.map +1 -1
  469. package/dist/types/type-like.d.ts +2 -2
  470. package/dist/types/type-like.d.ts.map +1 -1
  471. package/dist/types/type-manager-options.d.ts.map +1 -1
  472. package/dist/types/type-manager.d.ts +120 -120
  473. package/dist/types/type-manager.d.ts.map +1 -1
  474. package/dist/types/type-metadata-symbol.d.ts +1 -1
  475. package/dist/types/type-metadata-symbol.d.ts.map +1 -1
  476. package/dist/types/type-metadata.d.ts +253 -152
  477. package/dist/types/type-metadata.d.ts.map +1 -1
  478. package/dist/types/type-options-base.d.ts +13 -12
  479. package/dist/types/type-options-base.d.ts.map +1 -1
  480. package/dist/types/type-options.d.ts +10 -10
  481. package/dist/types/type-options.d.ts.map +1 -1
  482. package/dist/types/type-resolver.d.ts +2 -2
  483. package/dist/types/type-resolver.d.ts.map +1 -1
  484. package/dist/types/type-scope.d.ts +68 -0
  485. package/dist/types/type-scope.d.ts.map +1 -0
  486. package/dist/types/type-state.d.ts +262 -0
  487. package/dist/types/type-state.d.ts.map +1 -0
  488. package/dist/types/type-states/index.d.ts +3 -0
  489. package/dist/types/type-states/index.d.ts.map +1 -0
  490. package/dist/types/type-states/resolved-type-state.d.ts +306 -0
  491. package/dist/types/type-states/resolved-type-state.d.ts.map +1 -0
  492. package/dist/types/type-states/unresolved-type-state.d.ts +275 -0
  493. package/dist/types/type-states/unresolved-type-state.d.ts.map +1 -0
  494. package/dist/types/type.d.ts +4 -3
  495. package/dist/types/type.d.ts.map +1 -1
  496. package/dist/umd/index.js +1 -1
  497. package/dist/umd/index.js.map +1 -1
  498. package/package.json +1 -7
  499. package/dist/es2015/custom-context.js +0 -59
  500. package/dist/es2015/custom-context.js.map +0 -1
  501. package/dist/es2015/functions/is-arrow-function.js +0 -5
  502. package/dist/es2015/functions/is-arrow-function.js.map +0 -1
  503. package/dist/es2015/functions/is-ctor-function.js +0 -5
  504. package/dist/es2015/functions/is-ctor-function.js.map +0 -1
  505. package/dist/es2015/functions/is-data-view.js +0 -4
  506. package/dist/es2015/functions/is-data-view.js.map +0 -1
  507. package/dist/es2015/functions/is-float-32-array.js +0 -4
  508. package/dist/es2015/functions/is-float-32-array.js.map +0 -1
  509. package/dist/es2015/functions/is-float-64-array.js +0 -4
  510. package/dist/es2015/functions/is-float-64-array.js.map +0 -1
  511. package/dist/es2015/functions/is-int-16-array.js +0 -4
  512. package/dist/es2015/functions/is-int-16-array.js.map +0 -1
  513. package/dist/es2015/functions/is-int-32-array.js +0 -4
  514. package/dist/es2015/functions/is-int-32-array.js.map +0 -1
  515. package/dist/es2015/functions/is-int-8-array.js +0 -4
  516. package/dist/es2015/functions/is-int-8-array.js.map +0 -1
  517. package/dist/es2015/functions/is-uint-16-array.js +0 -4
  518. package/dist/es2015/functions/is-uint-16-array.js.map +0 -1
  519. package/dist/es2015/functions/is-uint-32-array.js +0 -4
  520. package/dist/es2015/functions/is-uint-32-array.js.map +0 -1
  521. package/dist/es2015/functions/is-uint-8-array.js +0 -4
  522. package/dist/es2015/functions/is-uint-8-array.js.map +0 -1
  523. package/dist/es2015/functions/is-uint-8-clamped-array.js +0 -4
  524. package/dist/es2015/functions/is-uint-8-clamped-array.js.map +0 -1
  525. package/dist/es2015/generic-metadata-resolver.js +0 -2
  526. package/dist/es2015/generic-metadata-resolver.js.map +0 -1
  527. package/dist/es2015/generic-structure.js +0 -2
  528. package/dist/es2015/generic-structure.js.map +0 -1
  529. package/dist/es2015/inject-internals.js +0 -2
  530. package/dist/es2015/inject-internals.js.map +0 -1
  531. package/dist/es2015/log-level.js +0 -8
  532. package/dist/es2015/log-level.js.map +0 -1
  533. package/dist/es2015/log.js +0 -50
  534. package/dist/es2015/log.js.map +0 -1
  535. package/dist/es2015/property-internals.js +0 -2
  536. package/dist/es2015/property-internals.js.map +0 -1
  537. package/dist/es2015/serializer-context-options.js +0 -2
  538. package/dist/es2015/serializer-context-options.js.map +0 -1
  539. package/dist/es2015/type-context-entry.js +0 -9
  540. package/dist/es2015/type-context-entry.js.map +0 -1
  541. package/dist/es2015/type-context.js +0 -31
  542. package/dist/es2015/type-context.js.map +0 -1
  543. package/dist/es2015/type-internals.js +0 -2
  544. package/dist/es2015/type-internals.js.map +0 -1
  545. package/dist/es2015/type-metadata-resolver.js +0 -2
  546. package/dist/es2015/type-metadata-resolver.js.map +0 -1
  547. package/dist/es5/custom-context.js +0 -95
  548. package/dist/es5/custom-context.js.map +0 -1
  549. package/dist/es5/functions/is-arrow-function.js +0 -5
  550. package/dist/es5/functions/is-arrow-function.js.map +0 -1
  551. package/dist/es5/functions/is-ctor-function.js +0 -5
  552. package/dist/es5/functions/is-ctor-function.js.map +0 -1
  553. package/dist/es5/functions/is-data-view.js +0 -4
  554. package/dist/es5/functions/is-data-view.js.map +0 -1
  555. package/dist/es5/functions/is-float-32-array.js +0 -4
  556. package/dist/es5/functions/is-float-32-array.js.map +0 -1
  557. package/dist/es5/functions/is-float-64-array.js +0 -4
  558. package/dist/es5/functions/is-float-64-array.js.map +0 -1
  559. package/dist/es5/functions/is-int-16-array.js +0 -4
  560. package/dist/es5/functions/is-int-16-array.js.map +0 -1
  561. package/dist/es5/functions/is-int-32-array.js +0 -4
  562. package/dist/es5/functions/is-int-32-array.js.map +0 -1
  563. package/dist/es5/functions/is-int-8-array.js +0 -4
  564. package/dist/es5/functions/is-int-8-array.js.map +0 -1
  565. package/dist/es5/functions/is-uint-16-array.js +0 -4
  566. package/dist/es5/functions/is-uint-16-array.js.map +0 -1
  567. package/dist/es5/functions/is-uint-32-array.js +0 -4
  568. package/dist/es5/functions/is-uint-32-array.js.map +0 -1
  569. package/dist/es5/functions/is-uint-8-array.js +0 -4
  570. package/dist/es5/functions/is-uint-8-array.js.map +0 -1
  571. package/dist/es5/functions/is-uint-8-clamped-array.js +0 -4
  572. package/dist/es5/functions/is-uint-8-clamped-array.js.map +0 -1
  573. package/dist/es5/generic-metadata-resolver.js +0 -2
  574. package/dist/es5/generic-metadata-resolver.js.map +0 -1
  575. package/dist/es5/generic-structure.js +0 -2
  576. package/dist/es5/generic-structure.js.map +0 -1
  577. package/dist/es5/inject-internals.js +0 -2
  578. package/dist/es5/inject-internals.js.map +0 -1
  579. package/dist/es5/log-level.js +0 -8
  580. package/dist/es5/log-level.js.map +0 -1
  581. package/dist/es5/log.js +0 -65
  582. package/dist/es5/log.js.map +0 -1
  583. package/dist/es5/property-internals.js +0 -2
  584. package/dist/es5/property-internals.js.map +0 -1
  585. package/dist/es5/serializer-context-options.js +0 -2
  586. package/dist/es5/serializer-context-options.js.map +0 -1
  587. package/dist/es5/type-context-entry.js +0 -11
  588. package/dist/es5/type-context-entry.js.map +0 -1
  589. package/dist/es5/type-context.js +0 -33
  590. package/dist/es5/type-context.js.map +0 -1
  591. package/dist/es5/type-internals.js +0 -2
  592. package/dist/es5/type-internals.js.map +0 -1
  593. package/dist/es5/type-metadata-resolver.js +0 -2
  594. package/dist/es5/type-metadata-resolver.js.map +0 -1
  595. package/dist/types/custom-context.d.ts +0 -89
  596. package/dist/types/custom-context.d.ts.map +0 -1
  597. package/dist/types/functions/is-arrow-function.d.ts +0 -9
  598. package/dist/types/functions/is-arrow-function.d.ts.map +0 -1
  599. package/dist/types/functions/is-ctor-function.d.ts +0 -9
  600. package/dist/types/functions/is-ctor-function.d.ts.map +0 -1
  601. package/dist/types/functions/is-data-view.d.ts +0 -9
  602. package/dist/types/functions/is-data-view.d.ts.map +0 -1
  603. package/dist/types/functions/is-float-32-array.d.ts +0 -9
  604. package/dist/types/functions/is-float-32-array.d.ts.map +0 -1
  605. package/dist/types/functions/is-float-64-array.d.ts +0 -9
  606. package/dist/types/functions/is-float-64-array.d.ts.map +0 -1
  607. package/dist/types/functions/is-int-16-array.d.ts +0 -9
  608. package/dist/types/functions/is-int-16-array.d.ts.map +0 -1
  609. package/dist/types/functions/is-int-32-array.d.ts +0 -9
  610. package/dist/types/functions/is-int-32-array.d.ts.map +0 -1
  611. package/dist/types/functions/is-int-8-array.d.ts +0 -9
  612. package/dist/types/functions/is-int-8-array.d.ts.map +0 -1
  613. package/dist/types/functions/is-uint-16-array.d.ts +0 -9
  614. package/dist/types/functions/is-uint-16-array.d.ts.map +0 -1
  615. package/dist/types/functions/is-uint-32-array.d.ts +0 -9
  616. package/dist/types/functions/is-uint-32-array.d.ts.map +0 -1
  617. package/dist/types/functions/is-uint-8-array.d.ts +0 -9
  618. package/dist/types/functions/is-uint-8-array.d.ts.map +0 -1
  619. package/dist/types/functions/is-uint-8-clamped-array.d.ts +0 -9
  620. package/dist/types/functions/is-uint-8-clamped-array.d.ts.map +0 -1
  621. package/dist/types/generic-metadata-resolver.d.ts +0 -8
  622. package/dist/types/generic-metadata-resolver.d.ts.map +0 -1
  623. package/dist/types/generic-structure.d.ts +0 -8
  624. package/dist/types/generic-structure.d.ts.map +0 -1
  625. package/dist/types/inject-internals.d.ts +0 -15
  626. package/dist/types/inject-internals.d.ts.map +0 -1
  627. package/dist/types/log-level.d.ts +0 -12
  628. package/dist/types/log-level.d.ts.map +0 -1
  629. package/dist/types/log.d.ts +0 -96
  630. package/dist/types/log.d.ts.map +0 -1
  631. package/dist/types/property-internals.d.ts +0 -36
  632. package/dist/types/property-internals.d.ts.map +0 -1
  633. package/dist/types/serializer-context-options.d.ts +0 -51
  634. package/dist/types/serializer-context-options.d.ts.map +0 -1
  635. package/dist/types/type-context-entry.d.ts +0 -37
  636. package/dist/types/type-context-entry.d.ts.map +0 -1
  637. package/dist/types/type-context.d.ts +0 -71
  638. package/dist/types/type-context.d.ts.map +0 -1
  639. package/dist/types/type-internals.d.ts +0 -15
  640. package/dist/types/type-internals.d.ts.map +0 -1
  641. package/dist/types/type-metadata-resolver.d.ts +0 -9
  642. package/dist/types/type-metadata-resolver.d.ts.map +0 -1
@@ -1,200 +1,381 @@
1
- import { first, isEmpty, isFunction, isNil, isUndefined } from 'lodash';
2
- import { CustomContext } from './custom-context';
1
+ import { DEFAULT_VALUE_RESOLVER } from './constants/default-value-resolver';
2
+ import { EMPTY_ARRAY } from './constants/empty-array';
3
+ import { EMPTY_MAP } from './constants/empty-map';
4
+ import { NULL_VALUE_RESOLVER } from './constants/null-value-resolver';
3
5
  import { getOwnReflectMetadata } from './functions/get-own-reflect-metadata';
4
6
  import { nameOf } from './functions/name-of';
5
7
  import { InjectMetadata } from './inject-metadata';
6
8
  import { Metadata } from './metadata';
7
9
  import { PropertyMetadata } from './property-metadata';
8
- import { typeExtensionMetadataCtorSetKey } from './type-extension-metadata-ctor-set-key';
10
+ import { TYPE_EXTENSION_METADATA_CTOR_SET_KEY } from './type-extension-metadata-ctor-set-key';
11
+ import { ResolvedTypeState } from './type-states/resolved-type-state';
12
+ import { UnresolvedTypeState } from './type-states/unresolved-type-state';
9
13
  export class TypeMetadata extends Metadata {
10
- constructor(typeManager, typeFn, typeOptions, parentTypeMetadatas) {
11
- super(typeManager);
12
- this.childrenTypeMetadataMap = new Map();
13
- this.discriminantMap = new Map();
14
- this.propertyMetadataMap = new Map();
15
- this.injectMetadataMap = new Map();
14
+ constructor(typeManager, typeFnMap, typeMetadataSet, typeFn, typeOptions, parentTypeMetadata) {
15
+ super(typeManager, typeFnMap);
16
16
  this.typeName = nameOf(typeFn);
17
17
  this.typeFn = typeFn;
18
+ this.parentTypeMetadata = parentTypeMetadata;
18
19
  this.typeOptionsBase = typeManager.typeOptionsBase;
19
20
  this.typeOptions = this.constructTypeOptions(typeOptions);
20
- this.typeInternals = this.constructTypeInternals();
21
- this.parentTypeMetadatas = parentTypeMetadatas;
22
- this.deriveParentTypeMetadataProperties();
23
- this.hasDiscriminant(this.discriminant);
21
+ this.typeMetadataSet = typeMetadataSet;
22
+ this.currentTypeFnMap = typeFnMap;
23
+ this.currentChildTypeMetadataMap = new Map();
24
+ this.currentPropertyMetadataMap = new Map();
25
+ this.currentInjectMetadataMap = new Map();
26
+ this.currentTypeState = new UnresolvedTypeState(this);
27
+ this.extendParentTypeMetadata();
24
28
  this.configure(typeOptions);
25
29
  return;
26
30
  }
27
- get parentTypeMetadata() {
28
- return first(this.parentTypeMetadatas);
31
+ get typeState() {
32
+ return this.currentTypeState;
29
33
  }
30
- get alias() {
31
- return this.typeOptions.alias;
34
+ get injectMetadataMap() {
35
+ return this.currentTypeState.injectMetadataMap;
32
36
  }
33
- get customOptions() {
34
- return this.typeOptions.customOptions;
37
+ get propertyMetadataMap() {
38
+ return this.currentTypeState.propertyMetadataMap;
35
39
  }
36
- get customContext() {
37
- let customContext = this.typeInternals.customContext;
38
- if (isNil(customContext)) {
39
- this.typeOptions.customOptions = new Array();
40
- this.typeInternals.customContext = new CustomContext(this.typeOptions.customOptions);
41
- customContext = this.typeInternals.customContext;
42
- }
43
- return customContext;
40
+ get alias() {
41
+ return this.currentTypeState.alias;
42
+ }
43
+ get customValueMap() {
44
+ return this.currentTypeState.customValueMap;
44
45
  }
45
46
  get serializedNullValue() {
46
- if (this.preserveNull) {
47
- return null;
48
- }
49
- return this.serializedDefaultValue;
47
+ return this.currentTypeState.serializedNullValueResolver();
50
48
  }
51
49
  get serializedDefaultValue() {
52
- var _a;
53
- if (this.useDefaultValue) {
54
- const serializedDefaultValue = (_a = this.typeOptions.defaultValue) !== null && _a !== void 0 ? _a : this.typeOptions.serializedDefaultValue;
55
- const defaultValue = isFunction(serializedDefaultValue)
56
- ? serializedDefaultValue()
57
- : serializedDefaultValue;
58
- return defaultValue;
59
- }
60
- return undefined;
50
+ return this.currentTypeState.serializedDefaultValueResolver();
61
51
  }
62
52
  get deserializedNullValue() {
63
- if (this.preserveNull) {
64
- return null;
65
- }
66
- return this.deserializedDefaultValue;
53
+ return this.currentTypeState.deserializedNullValueResolver();
67
54
  }
68
55
  get deserializedDefaultValue() {
69
- var _a;
70
- if (this.useDefaultValue) {
71
- const deserializedDefaultValue = (_a = this.typeOptions.defaultValue) !== null && _a !== void 0 ? _a : this.typeOptions.deserializedDefaultValue;
72
- const defaultValue = isFunction(deserializedDefaultValue)
73
- ? deserializedDefaultValue()
74
- : deserializedDefaultValue;
75
- return defaultValue;
76
- }
77
- return undefined;
56
+ return this.currentTypeState.deserializedDefaultValueResolver();
78
57
  }
79
58
  get discriminant() {
80
- var _a;
81
- return (_a = this.typeOptions.discriminant) !== null && _a !== void 0 ? _a : this.typeName;
59
+ return this.currentTypeState.discriminant;
82
60
  }
83
61
  get discriminator() {
84
- var _a;
85
- return (_a = this.typeOptions.discriminator) !== null && _a !== void 0 ? _a : this.typeOptionsBase.discriminator;
62
+ return this.currentTypeState.discriminator;
86
63
  }
87
64
  get factory() {
88
- var _a;
89
- return (_a = this.typeOptions.factory) !== null && _a !== void 0 ? _a : this.typeOptionsBase.factory;
65
+ return this.currentTypeState.factory;
90
66
  }
91
67
  get injectable() {
92
- return this.typeOptions.injectable;
68
+ return this.currentTypeState.injectable;
93
69
  }
94
70
  get injector() {
95
- var _a;
96
- return (_a = this.typeOptions.injector) !== null && _a !== void 0 ? _a : this.typeOptionsBase.injector;
71
+ return this.currentTypeState.injector;
97
72
  }
98
- get log() {
99
- var _a;
100
- return (_a = this.typeOptions.log) !== null && _a !== void 0 ? _a : this.typeOptionsBase.log;
73
+ get logger() {
74
+ return this.currentTypeState.logger;
101
75
  }
102
76
  get namingConvention() {
103
- var _a;
104
- return (_a = this.typeOptions.namingConvention) !== null && _a !== void 0 ? _a : this.typeOptionsBase.namingConvention;
77
+ return this.currentTypeState.namingConvention;
105
78
  }
106
79
  get polymorphic() {
107
- return this.discriminantMap.size > 1;
80
+ return this.currentTypeState.polymorphic;
108
81
  }
109
82
  get preserveDiscriminator() {
110
- var _a;
111
- return (_a = this.typeOptions.preserveDiscriminator) !== null && _a !== void 0 ? _a : this.typeOptionsBase.preserveDiscriminator;
83
+ return this.currentTypeState.preserveDiscriminator;
112
84
  }
113
85
  get referenceHandler() {
114
- var _a;
115
- return (_a = this.typeOptions.referenceHandler) !== null && _a !== void 0 ? _a : this.typeOptionsBase.referenceHandler;
86
+ return this.currentTypeState.referenceHandler;
116
87
  }
117
88
  get serializer() {
118
- var _a;
119
- return (_a = this.typeOptions.serializer) !== null && _a !== void 0 ? _a : this.typeOptionsBase.serializer;
89
+ return this.currentTypeState.serializer;
120
90
  }
121
91
  get preserveNull() {
122
- var _a;
123
- return (_a = this.typeOptions.preserveNull) !== null && _a !== void 0 ? _a : this.typeOptionsBase.preserveNull;
92
+ return this.currentTypeState.preserveNull;
124
93
  }
125
94
  get useDefaultValue() {
126
- var _a;
127
- return (_a = this.typeOptions.useDefaultValue) !== null && _a !== void 0 ? _a : this.typeOptionsBase.useDefaultValue;
95
+ return this.currentTypeState.useDefaultValue;
128
96
  }
129
97
  get useImplicitConversion() {
130
- var _a;
131
- return (_a = this.typeOptions.useImplicitConversion) !== null && _a !== void 0 ? _a : this.typeOptionsBase.useImplicitConversion;
98
+ return this.currentTypeState.useImplicitConversion;
132
99
  }
133
100
  get propertySorter() {
134
- var _a;
135
- return (_a = this.typeOptions.propertySorter) !== null && _a !== void 0 ? _a : this.typeOptionsBase.propertySorter;
101
+ return this.currentTypeState.propertySorter;
136
102
  }
137
103
  get sortedPropertyMetadatas() {
138
- const propertySorter = this.propertySorter;
139
- const propertyMetadatas = this.propertyMetadataMap.values();
140
- if (isNil(propertySorter)) {
141
- return propertyMetadatas;
142
- }
143
- const sortedPropertyMetadatas = Array.from(propertyMetadatas).sort(propertySorter.sort);
144
- return sortedPropertyMetadatas[Symbol.iterator]();
104
+ return this.currentTypeState.sortedPropertyMetadatas;
145
105
  }
146
106
  get injectSorter() {
147
- var _a;
148
- return (_a = this.typeOptions.injectSorter) !== null && _a !== void 0 ? _a : this.typeOptionsBase.injectSorter;
107
+ return this.currentTypeState.injectSorter;
149
108
  }
150
109
  get sortedInjectMetadatas() {
151
- const injectSorter = this.injectSorter;
152
- const injectMetadatas = this.injectMetadataMap.values();
153
- if (isNil(injectSorter)) {
154
- return injectMetadatas;
155
- }
156
- const sortedInjectMetadatas = Array.from(injectMetadatas).sort(injectSorter.sort);
157
- return sortedInjectMetadatas[Symbol.iterator]();
110
+ return this.currentTypeState.sortedInjectMetadatas;
111
+ }
112
+ get parentTypeArguments() {
113
+ return this.currentTypeState.parentTypeArguments;
158
114
  }
159
115
  get propertyOptionsMap() {
160
- let propertyOptionsMap = this.typeOptions.propertyOptionsMap;
161
- if (isNil(propertyOptionsMap)) {
162
- propertyOptionsMap = new Map();
163
- this.typeOptions.propertyOptionsMap = propertyOptionsMap;
164
- }
165
- return propertyOptionsMap;
116
+ return this.currentTypeState.propertyOptionsMap;
166
117
  }
167
118
  get injectOptionsMap() {
168
- let injectOptionsMap = this.typeOptions.injectOptionsMap;
169
- if (isNil(injectOptionsMap)) {
170
- injectOptionsMap = new Map();
171
- this.typeOptions.injectOptionsMap = injectOptionsMap;
172
- }
173
- return injectOptionsMap;
174
- }
175
- get parentTypeFns() {
176
- return this.typeOptions.parentTypeFns;
119
+ return this.currentTypeState.injectOptionsMap;
177
120
  }
178
121
  constructTypeOptions(typeOptions) {
122
+ if (typeOptions.customValueMap === undefined) {
123
+ typeOptions.customValueMap = new Map();
124
+ }
125
+ if (typeOptions.propertyOptionsMap === undefined) {
126
+ typeOptions.propertyOptionsMap = new Map();
127
+ }
128
+ if (typeOptions.injectOptionsMap === undefined) {
129
+ typeOptions.injectOptionsMap = new Map();
130
+ }
179
131
  return typeOptions;
180
132
  }
181
- constructTypeInternals() {
182
- const customOptions = this.typeOptions.customOptions;
183
- const customContext = isNil(customOptions) ? undefined : new CustomContext(customOptions);
184
- const typeInternals = { customContext: customContext };
185
- return typeInternals;
133
+ configureTypeExtensionMetadata(typeExtensionMetadataCtor, typeExtensionOptions) {
134
+ const typeExtensionMetadataCtorSet = this.extractTypeExtensionMetadataCtorSet();
135
+ if (!typeExtensionMetadataCtorSet.has(typeExtensionMetadataCtor)) {
136
+ typeExtensionMetadataCtorSet.add(typeExtensionMetadataCtor);
137
+ }
138
+ const initialTypeExtensionOptions = typeExtensionOptions !== null && typeExtensionOptions !== void 0 ? typeExtensionOptions : {};
139
+ const typeExtensionMetadata = new typeExtensionMetadataCtor(this, initialTypeExtensionOptions);
140
+ return typeExtensionMetadata;
186
141
  }
187
- deriveParentTypeMetadataProperties() {
188
- if (isEmpty(this.parentTypeMetadatas)) {
189
- return this;
142
+ extractTypeExtensionMetadata(typeExtensionMetadataCtor) {
143
+ const typeExtensionMetadataCtorSet = this.extractTypeExtensionMetadataCtorSet();
144
+ if (!typeExtensionMetadataCtorSet.has(typeExtensionMetadataCtor)) {
145
+ return undefined;
146
+ }
147
+ const initialTypeExtensionOptions = {};
148
+ const typeExtensionMetadata = new typeExtensionMetadataCtor(this, initialTypeExtensionOptions);
149
+ return typeExtensionMetadata;
150
+ }
151
+ extractTypeExtensionMetadataCtorSet() {
152
+ let customValueMap = this.typeOptions.customValueMap;
153
+ if (customValueMap === undefined) {
154
+ customValueMap = new Map();
155
+ this.typeOptions.customValueMap = customValueMap;
156
+ }
157
+ let typeExtensionMetadataCtorSet = customValueMap.get(TYPE_EXTENSION_METADATA_CTOR_SET_KEY);
158
+ if (typeExtensionMetadataCtorSet === undefined) {
159
+ typeExtensionMetadataCtorSet = new Set();
160
+ customValueMap.set(TYPE_EXTENSION_METADATA_CTOR_SET_KEY, typeExtensionMetadataCtorSet);
161
+ }
162
+ return typeExtensionMetadataCtorSet;
163
+ }
164
+ resolveTypeState() {
165
+ const typeOptionsBase = this.typeOptionsBase;
166
+ const typeOptions = this.typeOptions;
167
+ const typeName = this.typeName;
168
+ const alias = typeOptions.alias;
169
+ const customValueMap = this.resolveCustomValueMap();
170
+ const preserveNull = typeOptions.preserveNull === undefined
171
+ ? typeOptionsBase.preserveNull
172
+ : typeOptions.preserveNull;
173
+ const useDefaultValue = typeOptions.useDefaultValue === undefined
174
+ ? typeOptionsBase.useDefaultValue
175
+ : typeOptions.useDefaultValue;
176
+ const useImplicitConversion = typeOptions.useImplicitConversion === undefined
177
+ ? typeOptionsBase.useImplicitConversion
178
+ : typeOptions.useImplicitConversion;
179
+ const serializedDefaultValue = typeOptions.defaultValue === undefined
180
+ ? typeOptions.serializedDefaultValue
181
+ : typeOptions.defaultValue;
182
+ const serializedDefaultValueResolver = useDefaultValue
183
+ ? (typeof serializedDefaultValue === 'function' ? serializedDefaultValue : () => serializedDefaultValue)
184
+ : DEFAULT_VALUE_RESOLVER;
185
+ const serializedNullValueResolver = preserveNull
186
+ ? NULL_VALUE_RESOLVER
187
+ : serializedDefaultValueResolver;
188
+ const deserializedDefaultValue = typeOptions.defaultValue === undefined
189
+ ? typeOptions.deserializedDefaultValue
190
+ : typeOptions.defaultValue;
191
+ const deserializedDefaultValueResolver = useDefaultValue
192
+ ? (typeof deserializedDefaultValue === 'function' ? deserializedDefaultValue : () => deserializedDefaultValue)
193
+ : DEFAULT_VALUE_RESOLVER;
194
+ const deserializedNullValueResolver = preserveNull
195
+ ? NULL_VALUE_RESOLVER
196
+ : deserializedDefaultValueResolver;
197
+ const discriminant = typeOptions.discriminant === undefined
198
+ ? typeName
199
+ : typeOptions.discriminant;
200
+ const discriminator = typeOptions.discriminator === undefined
201
+ ? typeOptionsBase.discriminator
202
+ : typeOptions.discriminator;
203
+ const factory = typeOptions.factory === undefined
204
+ ? typeOptionsBase.factory
205
+ : typeOptions.factory;
206
+ const injectable = typeOptions.injectable === true;
207
+ const injector = typeOptions.injector === undefined
208
+ ? typeOptionsBase.injector
209
+ : typeOptions.injector;
210
+ const logger = typeOptions.logger === undefined
211
+ ? typeOptionsBase.logger
212
+ : typeOptions.logger;
213
+ const namingConvention = typeOptions.namingConvention === undefined
214
+ ? typeOptionsBase.namingConvention
215
+ : typeOptions.namingConvention;
216
+ const parentTypeArguments = typeOptions.parentTypeArguments === undefined
217
+ ? EMPTY_ARRAY
218
+ : typeOptions.parentTypeArguments;
219
+ const ownParentTypeMetadatas = this.resolveOwnParentTypeMetadatas(parentTypeArguments);
220
+ const ownChildTypeMetadatas = this.resolveOwnChildTypeMetadatas();
221
+ const parentTypeMetadataSet = this.resolveParentTypeMetadataSet(this);
222
+ const parentTypeMetadatas = Array.from(parentTypeMetadataSet);
223
+ const childTypeMetadataSet = this.resolveChildTypeMetadataSet(this);
224
+ const childTypeMetadatas = Array.from(childTypeMetadataSet);
225
+ const typeMetadataMap = new Map();
226
+ const polymorphic = childTypeMetadatas.length > 1;
227
+ for (let i = 0; i < childTypeMetadatas.length; i++) {
228
+ const childTypeMetadata = childTypeMetadatas[i];
229
+ typeMetadataMap.set(childTypeMetadata.typeFn, childTypeMetadata);
230
+ }
231
+ const preserveDiscriminator = typeOptions.preserveDiscriminator === undefined
232
+ ? typeOptionsBase.preserveDiscriminator
233
+ : typeOptions.preserveDiscriminator;
234
+ const referenceHandler = typeOptions.referenceHandler === undefined
235
+ ? typeOptionsBase.referenceHandler
236
+ : typeOptions.referenceHandler;
237
+ const serializer = typeOptions.serializer === undefined
238
+ ? typeOptionsBase.serializer
239
+ : typeOptions.serializer;
240
+ const propertySorter = typeOptions.propertySorter === undefined
241
+ ? typeOptionsBase.propertySorter
242
+ : typeOptions.propertySorter;
243
+ const ownPropertyMetadataMap = this.currentPropertyMetadataMap;
244
+ const propertyMetadataMap = this.resolvePropertyMetadataMap(parentTypeMetadatas);
245
+ const sortedPropertyMetadatas = propertySorter === undefined
246
+ ? Array.from(propertyMetadataMap.values())
247
+ : Array.from(propertyMetadataMap.values()).sort(propertySorter.sort);
248
+ const injectMetadataMap = this.currentInjectMetadataMap;
249
+ const injectSorter = typeOptions.injectSorter === undefined
250
+ ? typeOptionsBase.injectSorter
251
+ : typeOptions.injectSorter;
252
+ const sortedInjectMetadatas = injectSorter === undefined
253
+ ? Array.from(injectMetadataMap.values())
254
+ : Array.from(injectMetadataMap.values()).sort(injectSorter.sort);
255
+ const propertyOptionsMap = typeOptions.propertyOptionsMap === undefined
256
+ ? EMPTY_MAP
257
+ : typeOptions.propertyOptionsMap;
258
+ const injectOptionsMap = typeOptions.injectOptionsMap === undefined
259
+ ? EMPTY_MAP
260
+ : typeOptions.injectOptionsMap;
261
+ const resolvedTypeState = new ResolvedTypeState(this, alias, customValueMap, serializedNullValueResolver, serializedDefaultValue, serializedDefaultValueResolver, deserializedNullValueResolver, deserializedDefaultValue, deserializedDefaultValueResolver, discriminant, discriminator, factory, injectable, injector, logger, namingConvention, polymorphic, typeMetadataMap, preserveDiscriminator, referenceHandler, serializer, preserveNull, useDefaultValue, useImplicitConversion, propertySorter, sortedPropertyMetadatas, injectSorter, sortedInjectMetadatas, parentTypeArguments, parentTypeMetadatas, ownParentTypeMetadatas, childTypeMetadatas, ownChildTypeMetadatas, propertyOptionsMap, propertyMetadataMap, ownPropertyMetadataMap, injectOptionsMap, injectMetadataMap);
262
+ this.currentTypeState = resolvedTypeState;
263
+ return resolvedTypeState;
264
+ }
265
+ unresolveTypeState() {
266
+ const unresolvedTypeState = new UnresolvedTypeState(this);
267
+ this.currentTypeState = unresolvedTypeState;
268
+ return unresolvedTypeState;
269
+ }
270
+ resolveCustomValueMap() {
271
+ const typeOptionsBase = this.typeOptionsBase;
272
+ const typeOptions = this.typeOptions;
273
+ const customValueMap = new Map();
274
+ if (typeOptions.customValueMap === undefined) {
275
+ return customValueMap;
276
+ }
277
+ const baseCustomValueMap = typeOptionsBase.customValueMap === undefined
278
+ ? EMPTY_MAP
279
+ : typeOptionsBase.customValueMap;
280
+ for (const [customKey, customValue] of typeOptions.customValueMap) {
281
+ if (customValue === undefined) {
282
+ customValueMap.set(customKey, baseCustomValueMap.get(customKey));
283
+ continue;
284
+ }
285
+ customValueMap.set(customKey, customValue);
286
+ }
287
+ return customValueMap;
288
+ }
289
+ resolveOwnParentTypeMetadatas(parentTypeArguments) {
290
+ const ownParentTypeMetadatas = new Array();
291
+ const parentTypeMetadatas = this.resolveTypeMetadatas(parentTypeArguments);
292
+ for (let i = parentTypeMetadatas.length - 1; i >= 0; i--) {
293
+ ownParentTypeMetadatas.push(parentTypeMetadatas[i]);
294
+ }
295
+ if (this.parentTypeMetadata !== undefined) {
296
+ ownParentTypeMetadatas.push(this.parentTypeMetadata);
297
+ }
298
+ return ownParentTypeMetadatas;
299
+ }
300
+ resolveOwnChildTypeMetadatas() {
301
+ const ownChildTypeMetadatas = new Array();
302
+ for (const childTypeMetadata of this.currentChildTypeMetadataMap.values()) {
303
+ ownChildTypeMetadatas.push(childTypeMetadata);
304
+ }
305
+ for (const setTypeMetadata of this.typeMetadataSet) {
306
+ const typeOptions = setTypeMetadata.typeOptions;
307
+ const parentTypeArguments = typeOptions.parentTypeArguments === undefined
308
+ ? EMPTY_ARRAY
309
+ : typeOptions.parentTypeArguments;
310
+ const parentTypeMetadatas = this.resolveTypeMetadatas(parentTypeArguments);
311
+ for (let i = 0; i < parentTypeMetadatas.length; i++) {
312
+ if (parentTypeMetadatas[i] === this) {
313
+ ownChildTypeMetadatas.push(setTypeMetadata);
314
+ break;
315
+ }
316
+ }
190
317
  }
191
- for (const parentTypeMetadata of this.parentTypeMetadatas) {
192
- for (const [propertyName, propertyMetadata] of parentTypeMetadata.propertyMetadataMap) {
193
- if (!this.propertyMetadataMap.has(propertyName)) {
194
- this.propertyMetadataMap.set(propertyName, propertyMetadata);
318
+ return ownChildTypeMetadatas;
319
+ }
320
+ resolveParentTypeMetadataSet(typeMetadata, parentTypeMetadataSet = new Set()) {
321
+ if (parentTypeMetadataSet.has(typeMetadata)) {
322
+ return parentTypeMetadataSet;
323
+ }
324
+ parentTypeMetadataSet.add(typeMetadata);
325
+ const typeOptions = typeMetadata.typeOptions;
326
+ const parentTypeArguments = typeOptions.parentTypeArguments === undefined
327
+ ? EMPTY_ARRAY
328
+ : typeOptions.parentTypeArguments;
329
+ const parentTypeMetadatas = this.resolveTypeMetadatas(parentTypeArguments);
330
+ for (let i = parentTypeMetadatas.length - 1; i >= 0; i--) {
331
+ this.resolveParentTypeMetadataSet(parentTypeMetadatas[i], parentTypeMetadataSet);
332
+ }
333
+ if (typeMetadata.parentTypeMetadata !== undefined) {
334
+ this.resolveParentTypeMetadataSet(typeMetadata.parentTypeMetadata, parentTypeMetadataSet);
335
+ }
336
+ return parentTypeMetadataSet;
337
+ }
338
+ resolveChildTypeMetadataSet(typeMetadata, childTypeMetadataSet = new Set()) {
339
+ if (childTypeMetadataSet.has(typeMetadata)) {
340
+ return childTypeMetadataSet;
341
+ }
342
+ childTypeMetadataSet.add(typeMetadata);
343
+ for (const childTypeMetadata of typeMetadata.currentChildTypeMetadataMap.values()) {
344
+ this.resolveChildTypeMetadataSet(childTypeMetadata, childTypeMetadataSet);
345
+ childTypeMetadata.unresolveTypeState();
346
+ }
347
+ for (const setTypeMetadata of this.typeMetadataSet) {
348
+ const typeOptions = setTypeMetadata.typeOptions;
349
+ const parentTypeArguments = typeOptions.parentTypeArguments === undefined
350
+ ? EMPTY_ARRAY
351
+ : typeOptions.parentTypeArguments;
352
+ const parentTypeMetadatas = this.resolveTypeMetadatas(parentTypeArguments);
353
+ for (let i = 0; i < parentTypeMetadatas.length; i++) {
354
+ if (parentTypeMetadatas[i] === typeMetadata) {
355
+ this.resolveChildTypeMetadataSet(setTypeMetadata, childTypeMetadataSet);
356
+ setTypeMetadata.unresolveTypeState();
357
+ break;
195
358
  }
196
359
  }
197
- parentTypeMetadata.childrenTypeMetadataMap.set(this.typeFn, this);
360
+ }
361
+ return childTypeMetadataSet;
362
+ }
363
+ resolvePropertyMetadataMap(parentTypeMetadatas) {
364
+ const propertyMetadataMap = new Map();
365
+ for (let i = parentTypeMetadatas.length - 1; i >= 0; i--) {
366
+ for (const [propertyName, propertyMetadata] of parentTypeMetadatas[i].currentPropertyMetadataMap) {
367
+ propertyMetadataMap.set(propertyName, propertyMetadata);
368
+ }
369
+ }
370
+ for (const propertyMetadata of this.currentPropertyMetadataMap.values()) {
371
+ propertyMetadata.unresolvePropertyState();
372
+ }
373
+ return propertyMetadataMap;
374
+ }
375
+ extendParentTypeMetadata() {
376
+ const parentTypeMetadata = this.parentTypeMetadata;
377
+ if (parentTypeMetadata !== undefined) {
378
+ parentTypeMetadata.currentChildTypeMetadataMap.set(this.typeFn, this);
198
379
  }
199
380
  return this;
200
381
  }
@@ -205,8 +386,8 @@ export class TypeMetadata extends Metadata {
205
386
  }
206
387
  const injectTypeFns = ((_a = getOwnReflectMetadata('design:paramtypes', this.typeFn)) !== null && _a !== void 0 ? _a : new Array());
207
388
  for (let injectIndex = 0; injectIndex < injectTypeFns.length; injectIndex++) {
208
- if (!this.injectMetadataMap.has(injectIndex)) {
209
- this.configureInjectMetadata(injectIndex, { typeFn: injectTypeFns[injectIndex] });
389
+ if (!this.currentInjectMetadataMap.has(injectIndex)) {
390
+ this.configureInjectMetadata(injectIndex, { typeArgument: injectTypeFns[injectIndex] });
210
391
  }
211
392
  }
212
393
  return this;
@@ -214,254 +395,316 @@ export class TypeMetadata extends Metadata {
214
395
  hasAlias(alias) {
215
396
  this.releaseAlias();
216
397
  this.typeOptions.alias = alias;
217
- if (!isNil(alias)) {
218
- this.typeFnMap.set(alias, this.typeFn);
398
+ if (alias !== undefined) {
399
+ this.currentTypeFnMap.set(alias, this.typeFn);
219
400
  }
401
+ this.currentTypeState = new UnresolvedTypeState(this);
220
402
  return this;
221
403
  }
222
404
  releaseAlias() {
223
- const alias = this.alias;
224
- if (!isNil(alias) && this.typeFnMap.has(alias)) {
225
- this.typeFnMap.delete(alias);
405
+ const alias = this.typeOptions.alias;
406
+ if (alias !== undefined && this.currentTypeFnMap.has(alias)) {
407
+ this.currentTypeFnMap.delete(alias);
408
+ }
409
+ return this;
410
+ }
411
+ hasCustomValueMap(customValueMap) {
412
+ let currentCustomValueMap = this.typeOptions.customValueMap;
413
+ if (currentCustomValueMap === undefined) {
414
+ currentCustomValueMap = new Map();
415
+ this.typeOptions.customValueMap = currentCustomValueMap;
416
+ }
417
+ if (customValueMap !== undefined) {
418
+ if (currentCustomValueMap !== customValueMap) {
419
+ currentCustomValueMap.clear();
420
+ }
421
+ for (const [customKey, customValue] of customValueMap) {
422
+ currentCustomValueMap.set(customKey, customValue);
423
+ }
226
424
  }
425
+ this.currentTypeState = new UnresolvedTypeState(this);
227
426
  return this;
228
427
  }
229
- hasCustomOption(customKey, customValue) {
230
- this.customContext.set(customKey, customValue);
428
+ hasCustomValue(customKey, customValue) {
429
+ let customValueMap = this.typeOptions.customValueMap;
430
+ if (customValueMap === undefined) {
431
+ customValueMap = new Map();
432
+ this.typeOptions.customValueMap = customValueMap;
433
+ }
434
+ customValueMap.set(customKey, customValue);
435
+ this.currentTypeState = new UnresolvedTypeState(this);
231
436
  return this;
232
437
  }
233
- extractCustomOption(customKey) {
234
- return this.customContext.get(customKey);
438
+ extractCustomValue(customKey) {
439
+ let customValue = this.typeState.customValueMap.get(customKey);
440
+ if (customValue === undefined && customKey.customValueResolver !== undefined) {
441
+ customValue = customKey.customValueResolver();
442
+ }
443
+ return customValue;
235
444
  }
236
445
  hasCustomOptions(customOptions) {
237
- if (!isNil(customOptions)) {
238
- this.customContext.configure(customOptions);
446
+ let customValueMap = this.typeOptions.customValueMap;
447
+ if (customValueMap === undefined) {
448
+ customValueMap = new Map();
449
+ this.typeOptions.customValueMap = customValueMap;
450
+ }
451
+ for (let i = 0; i < customOptions.length; i++) {
452
+ customValueMap.set(customOptions[i][0], customOptions[i][1]);
239
453
  }
454
+ this.currentTypeState = new UnresolvedTypeState(this);
240
455
  return this;
241
456
  }
242
457
  hasDefaultValue(defaultValue) {
243
458
  this.typeOptions.defaultValue = defaultValue;
459
+ this.currentTypeState = new UnresolvedTypeState(this);
244
460
  return this;
245
461
  }
246
462
  hasSerializedDefaultValue(serializedDefaultValue) {
247
463
  this.typeOptions.serializedDefaultValue = serializedDefaultValue;
464
+ this.currentTypeState = new UnresolvedTypeState(this);
248
465
  return this;
249
466
  }
250
467
  hasDeserializedDefaultValue(deserializedDefaultValue) {
251
468
  this.typeOptions.deserializedDefaultValue = deserializedDefaultValue;
469
+ this.currentTypeState = new UnresolvedTypeState(this);
252
470
  return this;
253
471
  }
254
472
  hasDiscriminator(discriminator) {
255
473
  this.typeOptions.discriminator = discriminator;
474
+ this.currentTypeState = new UnresolvedTypeState(this);
256
475
  return this;
257
476
  }
258
477
  hasDiscriminant(discriminant) {
259
478
  this.typeOptions.discriminant = discriminant;
260
- if (!isNil(discriminant)) {
261
- this.provideDiscriminant(this.typeFn, discriminant);
262
- }
263
- return this;
264
- }
265
- provideDiscriminant(typeFn, discriminant) {
266
- this.discriminantMap.set(typeFn, discriminant);
267
- if (!isEmpty(this.parentTypeMetadatas)) {
268
- for (const parentTypeMetadata of this.parentTypeMetadatas) {
269
- parentTypeMetadata.provideDiscriminant(typeFn, discriminant);
270
- }
271
- }
479
+ this.currentTypeState = new UnresolvedTypeState(this);
272
480
  return this;
273
481
  }
274
482
  hasFactory(factory) {
275
483
  this.typeOptions.factory = factory;
484
+ this.currentTypeState = new UnresolvedTypeState(this);
276
485
  return this;
277
486
  }
278
487
  isInjectable(injectable = true) {
279
488
  this.typeOptions.injectable = injectable;
489
+ this.currentTypeState = new UnresolvedTypeState(this);
280
490
  return this;
281
491
  }
282
492
  hasInjector(injector) {
283
493
  this.typeOptions.injector = injector;
494
+ this.currentTypeState = new UnresolvedTypeState(this);
284
495
  return this;
285
496
  }
286
- hasLog(log) {
287
- this.typeOptions.log = log;
497
+ hasLogger(logger) {
498
+ this.typeOptions.logger = logger;
499
+ this.currentTypeState = new UnresolvedTypeState(this);
288
500
  return this;
289
501
  }
290
502
  hasNamingConvention(namingConvention) {
291
503
  this.typeOptions.namingConvention = namingConvention;
504
+ this.currentTypeState = new UnresolvedTypeState(this);
292
505
  return this;
293
506
  }
294
507
  shouldPreserveDiscriminator(preserveDiscriminator = true) {
295
508
  this.typeOptions.preserveDiscriminator = preserveDiscriminator;
509
+ this.currentTypeState = new UnresolvedTypeState(this);
296
510
  return this;
297
511
  }
298
512
  hasReferenceHandler(referenceHandler) {
299
513
  this.typeOptions.referenceHandler = referenceHandler;
514
+ this.currentTypeState = new UnresolvedTypeState(this);
300
515
  return this;
301
516
  }
302
517
  hasSerializer(serializer) {
303
518
  this.typeOptions.serializer = serializer;
519
+ this.currentTypeState = new UnresolvedTypeState(this);
304
520
  return this;
305
521
  }
306
522
  shouldPreserveNull(preserveNull = true) {
307
523
  this.typeOptions.preserveNull = preserveNull;
524
+ this.currentTypeState = new UnresolvedTypeState(this);
308
525
  return this;
309
526
  }
310
527
  shouldUseDefaultValue(useDefaultValue = true) {
311
528
  this.typeOptions.useDefaultValue = useDefaultValue;
529
+ this.currentTypeState = new UnresolvedTypeState(this);
312
530
  return this;
313
531
  }
314
532
  shouldUseImplicitConversion(useImplicitConversion = true) {
315
533
  this.typeOptions.useImplicitConversion = useImplicitConversion;
534
+ this.currentTypeState = new UnresolvedTypeState(this);
316
535
  return this;
317
536
  }
318
537
  hasPropertySorter(propertySorter) {
319
538
  this.typeOptions.propertySorter = propertySorter;
539
+ this.currentTypeState = new UnresolvedTypeState(this);
320
540
  return this;
321
541
  }
322
542
  hasInjectSorter(injectSorter) {
323
543
  this.typeOptions.injectSorter = injectSorter;
544
+ this.currentTypeState = new UnresolvedTypeState(this);
545
+ return this;
546
+ }
547
+ hasParentTypeArguments(parentTypeArguments) {
548
+ this.typeOptions.parentTypeArguments = parentTypeArguments;
549
+ this.currentTypeState = new UnresolvedTypeState(this);
324
550
  return this;
325
551
  }
326
552
  configurePropertyMetadata(propertyName, propertyOptions) {
327
- let propertyMetadata = this.propertyMetadataMap.get(propertyName);
328
- if (isNil(propertyMetadata)) {
329
- propertyMetadata = new PropertyMetadata(this, propertyName, propertyOptions !== null && propertyOptions !== void 0 ? propertyOptions : {});
330
- this.propertyMetadataMap.set(propertyName, propertyMetadata);
331
- this.propertyOptionsMap.set(propertyName, propertyMetadata.propertyOptions);
553
+ let propertyOptionsMap = this.typeOptions.propertyOptionsMap;
554
+ if (propertyOptionsMap === undefined) {
555
+ propertyOptionsMap = new Map();
556
+ this.typeOptions.propertyOptionsMap = propertyOptionsMap;
557
+ }
558
+ let propertyMetadata = this.currentPropertyMetadataMap.get(propertyName);
559
+ if (propertyMetadata === undefined) {
560
+ propertyOptions = propertyOptions !== null && propertyOptions !== void 0 ? propertyOptions : {};
561
+ propertyMetadata = new PropertyMetadata(this.typeManager, this.currentTypeFnMap, this, propertyName, propertyOptions);
562
+ this.currentPropertyMetadataMap.set(propertyName, propertyMetadata);
563
+ propertyOptionsMap.set(propertyName, propertyOptions);
564
+ this.currentTypeState = new UnresolvedTypeState(this);
332
565
  return propertyMetadata;
333
566
  }
334
- if (!isNil(propertyOptions)) {
567
+ if (propertyOptions !== undefined) {
335
568
  propertyMetadata.configure(propertyOptions);
336
569
  }
570
+ this.currentTypeState = new UnresolvedTypeState(this);
337
571
  return propertyMetadata;
338
572
  }
339
573
  configureInjectMetadata(injectIndex, injectOptions) {
340
- let injectMetadata = this.injectMetadataMap.get(injectIndex);
341
- if (isNil(injectMetadata)) {
342
- injectMetadata = new InjectMetadata(this, injectIndex, injectOptions !== null && injectOptions !== void 0 ? injectOptions : {});
343
- this.injectMetadataMap.set(injectIndex, injectMetadata);
344
- this.injectOptionsMap.set(injectIndex, injectMetadata.injectOptions);
574
+ let injectOptionsMap = this.typeOptions.injectOptionsMap;
575
+ if (injectOptionsMap === undefined) {
576
+ injectOptionsMap = new Map();
577
+ this.typeOptions.injectOptionsMap = injectOptionsMap;
578
+ }
579
+ let injectMetadata = this.currentInjectMetadataMap.get(injectIndex);
580
+ if (injectMetadata === undefined) {
581
+ injectOptions = injectOptions !== null && injectOptions !== void 0 ? injectOptions : {};
582
+ injectMetadata = new InjectMetadata(this.typeManager, this.currentTypeFnMap, this, injectIndex, injectOptions);
583
+ this.currentInjectMetadataMap.set(injectIndex, injectMetadata);
584
+ injectOptionsMap.set(injectIndex, injectOptions);
585
+ this.currentTypeState = new UnresolvedTypeState(this);
345
586
  return injectMetadata;
346
587
  }
347
- if (!isNil(injectOptions)) {
588
+ if (injectOptions !== undefined) {
348
589
  injectMetadata.configure(injectOptions);
349
590
  }
591
+ this.currentTypeState = new UnresolvedTypeState(this);
350
592
  return injectMetadata;
351
593
  }
352
594
  hasPropertyMetadataMap(propertyOptionsMap) {
595
+ const currentPropertyOptionsMap = this.clearPropertyOptionsMap(propertyOptionsMap);
353
596
  for (const [propertyName, propertyOptions] of propertyOptionsMap) {
354
- this.configurePropertyMetadata(propertyName, propertyOptions);
597
+ const propertyMetadata = new PropertyMetadata(this.typeManager, this.currentTypeFnMap, this, propertyName, propertyOptions);
598
+ this.currentPropertyMetadataMap.set(propertyName, propertyMetadata);
599
+ currentPropertyOptionsMap.set(propertyName, propertyOptions);
355
600
  }
601
+ this.currentTypeState = new UnresolvedTypeState(this);
356
602
  return this;
357
603
  }
358
- hasInjectMetadataMap(injectOptionsMap) {
359
- for (const [injectIndex, injectOptions] of injectOptionsMap) {
360
- this.configureInjectMetadata(injectIndex, injectOptions);
604
+ clearPropertyOptionsMap(propertyOptionsMap) {
605
+ let currentPropertyOptionsMap = this.typeOptions.propertyOptionsMap;
606
+ if (currentPropertyOptionsMap === undefined) {
607
+ currentPropertyOptionsMap = new Map();
608
+ this.typeOptions.propertyOptionsMap = currentPropertyOptionsMap;
361
609
  }
362
- return this;
363
- }
364
- configureTypeExtensionMetadata(typeExtensionMetadataCtor, typeExtensionOptions) {
365
- const typeExtensionMetadataCtorSet = this.extractCustomOption(typeExtensionMetadataCtorSetKey);
366
- if (!typeExtensionMetadataCtorSet.has(typeExtensionMetadataCtor)) {
367
- typeExtensionMetadataCtorSet.add(typeExtensionMetadataCtor);
610
+ if (currentPropertyOptionsMap !== propertyOptionsMap) {
611
+ currentPropertyOptionsMap.clear();
612
+ this.currentPropertyMetadataMap.clear();
368
613
  }
369
- const initialTypeExtensionOptions = typeExtensionOptions !== null && typeExtensionOptions !== void 0 ? typeExtensionOptions : {};
370
- const typeExtensionMetadata = new typeExtensionMetadataCtor(this, initialTypeExtensionOptions);
371
- return typeExtensionMetadata;
614
+ return currentPropertyOptionsMap;
372
615
  }
373
- extractTypeExtensionMetadata(typeExtensionMetadataCtor) {
374
- const typeExtensionMetadataCtorSet = this.extractCustomOption(typeExtensionMetadataCtorSetKey);
375
- if (!typeExtensionMetadataCtorSet.has(typeExtensionMetadataCtor)) {
376
- return undefined;
616
+ hasInjectMetadataMap(injectOptionsMap) {
617
+ const currentInjectOptionsMap = this.clearInjectOptionsMap(injectOptionsMap);
618
+ for (const [injectIndex, injectOptions] of injectOptionsMap) {
619
+ const injectMetadata = new InjectMetadata(this.typeManager, this.currentTypeFnMap, this, injectIndex, injectOptions);
620
+ this.currentInjectMetadataMap.set(injectIndex, injectMetadata);
621
+ currentInjectOptionsMap.set(injectIndex, injectOptions);
377
622
  }
378
- const initialTypeExtensionOptions = {};
379
- const typeExtensionMetadata = new typeExtensionMetadataCtor(this, initialTypeExtensionOptions);
380
- return typeExtensionMetadata;
623
+ this.currentTypeState = new UnresolvedTypeState(this);
624
+ return this;
381
625
  }
382
- hasParentTypeFns(parentTypeFns) {
383
- if (isNil(this.typeOptions.parentTypeFns)) {
384
- this.typeOptions.parentTypeFns = new Array();
626
+ clearInjectOptionsMap(injectOptionsMap) {
627
+ let currentInjectOptionsMap = this.typeOptions.injectOptionsMap;
628
+ if (currentInjectOptionsMap === undefined) {
629
+ currentInjectOptionsMap = new Map();
630
+ this.typeOptions.injectOptionsMap = currentInjectOptionsMap;
385
631
  }
386
- for (const parentTypeFn of parentTypeFns) {
387
- const parentTypeMetadata = this.typeManager.extractTypeMetadata(parentTypeFn);
388
- this.parentTypeMetadatas.push(parentTypeMetadata);
389
- this.typeOptions.parentTypeFns.push(parentTypeFn);
632
+ if (currentInjectOptionsMap !== injectOptionsMap) {
633
+ currentInjectOptionsMap.clear();
634
+ this.currentInjectMetadataMap.clear();
390
635
  }
391
- this.deriveParentTypeMetadataProperties();
392
- this.hasDiscriminant(this.discriminant);
393
- return this;
636
+ return currentInjectOptionsMap;
394
637
  }
395
638
  configure(typeOptions) {
396
- if (!isUndefined(typeOptions.parentTypeFns)) {
397
- this.hasParentTypeFns(typeOptions.parentTypeFns);
398
- }
399
- if (!isUndefined(typeOptions.alias)) {
639
+ if (typeOptions.alias !== undefined) {
400
640
  this.hasAlias(typeOptions.alias);
401
641
  }
402
- if (!isUndefined(typeOptions.customOptions)) {
403
- this.hasCustomOptions(typeOptions.customOptions);
642
+ if (typeOptions.customValueMap !== undefined) {
643
+ this.hasCustomValueMap(typeOptions.customValueMap);
404
644
  }
405
- if (!isUndefined(typeOptions.defaultValue)) {
645
+ if (typeOptions.defaultValue !== undefined) {
406
646
  this.hasDefaultValue(typeOptions.defaultValue);
407
647
  }
408
- if (!isUndefined(typeOptions.serializedDefaultValue)) {
648
+ if (typeOptions.serializedDefaultValue !== undefined) {
409
649
  this.hasSerializedDefaultValue(typeOptions.serializedDefaultValue);
410
650
  }
411
- if (!isUndefined(typeOptions.deserializedDefaultValue)) {
651
+ if (typeOptions.deserializedDefaultValue !== undefined) {
412
652
  this.hasDeserializedDefaultValue(typeOptions.deserializedDefaultValue);
413
653
  }
414
- if (!isUndefined(typeOptions.discriminator)) {
654
+ if (typeOptions.discriminator !== undefined) {
415
655
  this.hasDiscriminator(typeOptions.discriminator);
416
656
  }
417
- if (!isUndefined(typeOptions.discriminant)) {
657
+ if (typeOptions.discriminant !== undefined) {
418
658
  this.hasDiscriminant(typeOptions.discriminant);
419
659
  }
420
- if (!isUndefined(typeOptions.factory)) {
660
+ if (typeOptions.factory !== undefined) {
421
661
  this.hasFactory(typeOptions.factory);
422
662
  }
423
- if (!isUndefined(typeOptions.injectable)) {
663
+ if (typeOptions.injectable !== undefined) {
424
664
  this.isInjectable(typeOptions.injectable);
425
665
  }
426
- if (!isUndefined(typeOptions.injector)) {
666
+ if (typeOptions.injector !== undefined) {
427
667
  this.hasInjector(typeOptions.injector);
428
668
  }
429
- if (!isUndefined(typeOptions.log)) {
430
- this.hasLog(typeOptions.log);
669
+ if (typeOptions.logger !== undefined) {
670
+ this.hasLogger(typeOptions.logger);
431
671
  }
432
- if (!isUndefined(typeOptions.namingConvention)) {
672
+ if (typeOptions.namingConvention !== undefined) {
433
673
  this.hasNamingConvention(typeOptions.namingConvention);
434
674
  }
435
- if (!isUndefined(typeOptions.preserveDiscriminator)) {
675
+ if (typeOptions.preserveDiscriminator !== undefined) {
436
676
  this.shouldPreserveDiscriminator(typeOptions.preserveDiscriminator);
437
677
  }
438
- if (!isUndefined(typeOptions.referenceHandler)) {
678
+ if (typeOptions.referenceHandler !== undefined) {
439
679
  this.hasReferenceHandler(typeOptions.referenceHandler);
440
680
  }
441
- if (!isUndefined(typeOptions.serializer)) {
681
+ if (typeOptions.serializer !== undefined) {
442
682
  this.hasSerializer(typeOptions.serializer);
443
683
  }
444
- if (!isUndefined(typeOptions.preserveNull)) {
684
+ if (typeOptions.preserveNull !== undefined) {
445
685
  this.shouldPreserveNull(typeOptions.preserveNull);
446
686
  }
447
- if (!isUndefined(typeOptions.useDefaultValue)) {
687
+ if (typeOptions.useDefaultValue !== undefined) {
448
688
  this.shouldUseDefaultValue(typeOptions.useDefaultValue);
449
689
  }
450
- if (!isUndefined(typeOptions.useImplicitConversion)) {
690
+ if (typeOptions.useImplicitConversion !== undefined) {
451
691
  this.shouldUseImplicitConversion(typeOptions.useImplicitConversion);
452
692
  }
453
- if (!isUndefined(typeOptions.propertyOptionsMap)) {
693
+ if (typeOptions.propertyOptionsMap !== undefined) {
454
694
  this.hasPropertyMetadataMap(typeOptions.propertyOptionsMap);
455
695
  }
456
- if (!isUndefined(typeOptions.injectOptionsMap)) {
696
+ if (typeOptions.injectOptionsMap !== undefined) {
457
697
  this.hasInjectMetadataMap(typeOptions.injectOptionsMap);
458
698
  }
459
- if (!isUndefined(typeOptions.propertySorter)) {
699
+ if (typeOptions.propertySorter !== undefined) {
460
700
  this.hasPropertySorter(typeOptions.propertySorter);
461
701
  }
462
- if (!isUndefined(typeOptions.injectSorter)) {
702
+ if (typeOptions.injectSorter !== undefined) {
463
703
  this.hasInjectSorter(typeOptions.injectSorter);
464
704
  }
705
+ if (typeOptions.parentTypeArguments !== undefined) {
706
+ this.hasParentTypeArguments(typeOptions.parentTypeArguments);
707
+ }
465
708
  return this;
466
709
  }
467
710
  }