@dipscope/type-manager 7.2.1 → 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 (621) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +159 -168
  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 +13 -12
  30. package/dist/es2015/index.js.map +1 -1
  31. package/dist/es2015/inject-metadata.js +34 -33
  32. package/dist/es2015/inject-metadata.js.map +1 -1
  33. package/dist/es2015/inject-sorters/asc-inject-sorter.js +1 -9
  34. package/dist/es2015/inject-sorters/asc-inject-sorter.js.map +1 -1
  35. package/dist/es2015/inject-sorters/desc-inject-sorter.js +1 -9
  36. package/dist/es2015/inject-sorters/desc-inject-sorter.js.map +1 -1
  37. package/dist/es2015/inject-state.js +2 -0
  38. package/dist/es2015/inject-state.js.map +1 -0
  39. package/dist/es2015/inject-states/index.js +3 -0
  40. package/dist/es2015/inject-states/index.js.map +1 -0
  41. package/dist/es2015/inject-states/resolved-inject-state.js +10 -0
  42. package/dist/es2015/inject-states/resolved-inject-state.js.map +1 -0
  43. package/dist/es2015/inject-states/unresolved-inject-state.js +31 -0
  44. package/dist/es2015/inject-states/unresolved-inject-state.js.map +1 -0
  45. package/dist/es2015/inject.js +6 -8
  46. package/dist/es2015/inject.js.map +1 -1
  47. package/dist/es2015/injectors/singleton-injector.js +6 -10
  48. package/dist/es2015/injectors/singleton-injector.js.map +1 -1
  49. package/dist/es2015/logger-level.js +9 -0
  50. package/dist/es2015/logger-level.js.map +1 -0
  51. package/dist/es2015/logger.js +79 -0
  52. package/dist/es2015/logger.js.map +1 -0
  53. package/dist/es2015/metadata.js +45 -57
  54. package/dist/es2015/metadata.js.map +1 -1
  55. package/dist/es2015/null-value-resolver.js +2 -0
  56. package/dist/es2015/null-value-resolver.js.map +1 -0
  57. package/dist/es2015/nullable.js +2 -0
  58. package/dist/es2015/nullable.js.map +1 -0
  59. package/dist/es2015/optional.js +2 -0
  60. package/dist/es2015/optional.js.map +1 -0
  61. package/dist/es2015/property-extension-metadata-ctor-set-key.js +1 -1
  62. package/dist/es2015/property-extension-metadata-ctor-set-key.js.map +1 -1
  63. package/dist/es2015/property-extension-metadata.js.map +1 -1
  64. package/dist/es2015/property-metadata.js +224 -145
  65. package/dist/es2015/property-metadata.js.map +1 -1
  66. package/dist/es2015/property-sorters/asc-property-sorter.js +1 -9
  67. package/dist/es2015/property-sorters/asc-property-sorter.js.map +1 -1
  68. package/dist/es2015/property-sorters/desc-property-sorter.js +1 -9
  69. package/dist/es2015/property-sorters/desc-property-sorter.js.map +1 -1
  70. package/dist/es2015/property-state.js +2 -0
  71. package/dist/es2015/property-state.js.map +1 -0
  72. package/dist/es2015/property-states/index.js +3 -0
  73. package/dist/es2015/property-states/index.js.map +1 -0
  74. package/dist/es2015/property-states/resolved-property-state.js +27 -0
  75. package/dist/es2015/property-states/resolved-property-state.js.map +1 -0
  76. package/dist/es2015/property-states/unresolved-property-state.js +167 -0
  77. package/dist/es2015/property-states/unresolved-property-state.js.map +1 -0
  78. package/dist/es2015/property.js +17 -19
  79. package/dist/es2015/property.js.map +1 -1
  80. package/dist/es2015/reference-handlers/circular-reference-handler.js +2 -3
  81. package/dist/es2015/reference-handlers/circular-reference-handler.js.map +1 -1
  82. package/dist/es2015/reference-handlers/json-path-reference-handler.js +7 -6
  83. package/dist/es2015/reference-handlers/json-path-reference-handler.js.map +1 -1
  84. package/dist/es2015/reference-handlers/plain-reference-handler.js +2 -3
  85. package/dist/es2015/reference-handlers/plain-reference-handler.js.map +1 -1
  86. package/dist/es2015/serializer-context.js +65 -171
  87. package/dist/es2015/serializer-context.js.map +1 -1
  88. package/dist/es2015/serializers/any-serializer.js +4 -5
  89. package/dist/es2015/serializers/any-serializer.js.map +1 -1
  90. package/dist/es2015/serializers/array-buffer-serializer.js +8 -13
  91. package/dist/es2015/serializers/array-buffer-serializer.js.map +1 -1
  92. package/dist/es2015/serializers/array-serializer.js +18 -25
  93. package/dist/es2015/serializers/array-serializer.js.map +1 -1
  94. package/dist/es2015/serializers/boolean-serializer.js +12 -19
  95. package/dist/es2015/serializers/boolean-serializer.js.map +1 -1
  96. package/dist/es2015/serializers/data-view-serializer.js +8 -14
  97. package/dist/es2015/serializers/data-view-serializer.js.map +1 -1
  98. package/dist/es2015/serializers/date-serializer.js +8 -13
  99. package/dist/es2015/serializers/date-serializer.js.map +1 -1
  100. package/dist/es2015/serializers/float-32-array-serializer.js +8 -14
  101. package/dist/es2015/serializers/float-32-array-serializer.js.map +1 -1
  102. package/dist/es2015/serializers/float-64-array-serializer.js +8 -14
  103. package/dist/es2015/serializers/float-64-array-serializer.js.map +1 -1
  104. package/dist/es2015/serializers/int-16-array-serializer.js +8 -14
  105. package/dist/es2015/serializers/int-16-array-serializer.js.map +1 -1
  106. package/dist/es2015/serializers/int-32-array-serializer.js +8 -14
  107. package/dist/es2015/serializers/int-32-array-serializer.js.map +1 -1
  108. package/dist/es2015/serializers/int-8-array-serializer.js +8 -14
  109. package/dist/es2015/serializers/int-8-array-serializer.js.map +1 -1
  110. package/dist/es2015/serializers/map-serializer.js +42 -54
  111. package/dist/es2015/serializers/map-serializer.js.map +1 -1
  112. package/dist/es2015/serializers/number-serializer.js +10 -17
  113. package/dist/es2015/serializers/number-serializer.js.map +1 -1
  114. package/dist/es2015/serializers/set-serializer.js +19 -26
  115. package/dist/es2015/serializers/set-serializer.js.map +1 -1
  116. package/dist/es2015/serializers/string-serializer.js +12 -19
  117. package/dist/es2015/serializers/string-serializer.js.map +1 -1
  118. package/dist/es2015/serializers/type-serializer.js +64 -71
  119. package/dist/es2015/serializers/type-serializer.js.map +1 -1
  120. package/dist/es2015/serializers/uint-16-array-serializer.js +8 -14
  121. package/dist/es2015/serializers/uint-16-array-serializer.js.map +1 -1
  122. package/dist/es2015/serializers/uint-32-array-serializer.js +8 -14
  123. package/dist/es2015/serializers/uint-32-array-serializer.js.map +1 -1
  124. package/dist/es2015/serializers/uint-8-array-serializer.js +8 -14
  125. package/dist/es2015/serializers/uint-8-array-serializer.js.map +1 -1
  126. package/dist/es2015/serializers/uint-8-clamped-array-serializer.js +8 -14
  127. package/dist/es2015/serializers/uint-8-clamped-array-serializer.js.map +1 -1
  128. package/dist/es2015/serializers/unknown-serializer.js +4 -5
  129. package/dist/es2015/serializers/unknown-serializer.js.map +1 -1
  130. package/dist/es2015/type-entry.js +2 -0
  131. package/dist/es2015/type-entry.js.map +1 -0
  132. package/dist/es2015/type-extension-metadata-ctor-set-key.js +1 -1
  133. package/dist/es2015/type-extension-metadata-ctor-set-key.js.map +1 -1
  134. package/dist/es2015/type-extension-metadata.js.map +1 -1
  135. package/dist/es2015/type-manager.js +55 -55
  136. package/dist/es2015/type-manager.js.map +1 -1
  137. package/dist/es2015/type-metadata-symbol.js +1 -1
  138. package/dist/es2015/type-metadata-symbol.js.map +1 -1
  139. package/dist/es2015/type-metadata.js +465 -226
  140. package/dist/es2015/type-metadata.js.map +1 -1
  141. package/dist/es2015/type-scope.js +6 -7
  142. package/dist/es2015/type-scope.js.map +1 -1
  143. package/dist/es2015/type-state.js +2 -0
  144. package/dist/es2015/type-state.js.map +1 -0
  145. package/dist/es2015/type-states/index.js +3 -0
  146. package/dist/es2015/type-states/index.js.map +1 -0
  147. package/dist/es2015/type-states/resolved-type-state.js +44 -0
  148. package/dist/es2015/type-states/resolved-type-state.js.map +1 -0
  149. package/dist/es2015/type-states/unresolved-type-state.js +303 -0
  150. package/dist/es2015/type-states/unresolved-type-state.js.map +1 -0
  151. package/dist/es2015/type.js.map +1 -1
  152. package/dist/es5/constants/default-value-resolver.js +2 -0
  153. package/dist/es5/constants/default-value-resolver.js.map +1 -0
  154. package/dist/es5/constants/empty-array.js +2 -0
  155. package/dist/es5/constants/empty-array.js.map +1 -0
  156. package/dist/es5/constants/empty-map.js +2 -0
  157. package/dist/es5/constants/empty-map.js.map +1 -0
  158. package/dist/es5/constants/index.js +5 -0
  159. package/dist/es5/constants/index.js.map +1 -0
  160. package/dist/es5/constants/null-value-resolver.js +2 -0
  161. package/dist/es5/constants/null-value-resolver.js.map +1 -0
  162. package/dist/es5/custom-key.js.map +1 -1
  163. package/dist/es5/factories/type-factory.js +63 -39
  164. package/dist/es5/factories/type-factory.js.map +1 -1
  165. package/dist/es5/functions/get-own-reflect-metadata.js +1 -2
  166. package/dist/es5/functions/get-own-reflect-metadata.js.map +1 -1
  167. package/dist/es5/functions/get-reflect-metadata.js +1 -2
  168. package/dist/es5/functions/get-reflect-metadata.js.map +1 -1
  169. package/dist/es5/functions/get-words.js +61 -2
  170. package/dist/es5/functions/get-words.js.map +1 -1
  171. package/dist/es5/functions/index.js +0 -12
  172. package/dist/es5/functions/index.js.map +1 -1
  173. package/dist/es5/functions/json-parse.js.map +1 -1
  174. package/dist/es5/functions/json-stringify.js +6 -5
  175. package/dist/es5/functions/json-stringify.js.map +1 -1
  176. package/dist/es5/functions/name-of.js +1 -5
  177. package/dist/es5/functions/name-of.js.map +1 -1
  178. package/dist/es5/index.js +13 -12
  179. package/dist/es5/index.js.map +1 -1
  180. package/dist/es5/inject-metadata.js +49 -34
  181. package/dist/es5/inject-metadata.js.map +1 -1
  182. package/dist/es5/inject-sorters/asc-inject-sorter.js +1 -9
  183. package/dist/es5/inject-sorters/asc-inject-sorter.js.map +1 -1
  184. package/dist/es5/inject-sorters/desc-inject-sorter.js +1 -9
  185. package/dist/es5/inject-sorters/desc-inject-sorter.js.map +1 -1
  186. package/dist/es5/inject-state.js +2 -0
  187. package/dist/es5/inject-state.js.map +1 -0
  188. package/dist/es5/inject-states/index.js +3 -0
  189. package/dist/es5/inject-states/index.js.map +1 -0
  190. package/dist/es5/inject-states/resolved-inject-state.js +12 -0
  191. package/dist/es5/inject-states/resolved-inject-state.js.map +1 -0
  192. package/dist/es5/inject-states/unresolved-inject-state.js +45 -0
  193. package/dist/es5/inject-states/unresolved-inject-state.js.map +1 -0
  194. package/dist/es5/inject.js +6 -8
  195. package/dist/es5/inject.js.map +1 -1
  196. package/dist/es5/injectors/singleton-injector.js +31 -22
  197. package/dist/es5/injectors/singleton-injector.js.map +1 -1
  198. package/dist/es5/logger-level.js +9 -0
  199. package/dist/es5/logger-level.js.map +1 -0
  200. package/dist/es5/logger.js +122 -0
  201. package/dist/es5/logger.js.map +1 -0
  202. package/dist/es5/metadata.js +44 -79
  203. package/dist/es5/metadata.js.map +1 -1
  204. package/dist/es5/null-value-resolver.js +2 -0
  205. package/dist/es5/null-value-resolver.js.map +1 -0
  206. package/dist/es5/nullable.js +2 -0
  207. package/dist/es5/nullable.js.map +1 -0
  208. package/dist/es5/optional.js +2 -0
  209. package/dist/es5/optional.js.map +1 -0
  210. package/dist/es5/property-extension-metadata-ctor-set-key.js +1 -1
  211. package/dist/es5/property-extension-metadata-ctor-set-key.js.map +1 -1
  212. package/dist/es5/property-extension-metadata.js.map +1 -1
  213. package/dist/es5/property-metadata.js +288 -162
  214. package/dist/es5/property-metadata.js.map +1 -1
  215. package/dist/es5/property-sorters/asc-property-sorter.js +1 -9
  216. package/dist/es5/property-sorters/asc-property-sorter.js.map +1 -1
  217. package/dist/es5/property-sorters/desc-property-sorter.js +1 -9
  218. package/dist/es5/property-sorters/desc-property-sorter.js.map +1 -1
  219. package/dist/es5/property-state.js +2 -0
  220. package/dist/es5/property-state.js.map +1 -0
  221. package/dist/es5/property-states/index.js +3 -0
  222. package/dist/es5/property-states/index.js.map +1 -0
  223. package/dist/es5/property-states/resolved-property-state.js +29 -0
  224. package/dist/es5/property-states/resolved-property-state.js.map +1 -0
  225. package/dist/es5/property-states/unresolved-property-state.js +249 -0
  226. package/dist/es5/property-states/unresolved-property-state.js.map +1 -0
  227. package/dist/es5/property.js +17 -19
  228. package/dist/es5/property.js.map +1 -1
  229. package/dist/es5/reference-handlers/circular-reference-handler.js +2 -3
  230. package/dist/es5/reference-handlers/circular-reference-handler.js.map +1 -1
  231. package/dist/es5/reference-handlers/json-path-reference-handler.js +10 -31
  232. package/dist/es5/reference-handlers/json-path-reference-handler.js.map +1 -1
  233. package/dist/es5/reference-handlers/plain-reference-handler.js +2 -3
  234. package/dist/es5/reference-handlers/plain-reference-handler.js.map +1 -1
  235. package/dist/es5/serializer-context.js +71 -237
  236. package/dist/es5/serializer-context.js.map +1 -1
  237. package/dist/es5/serializers/any-serializer.js +4 -5
  238. package/dist/es5/serializers/any-serializer.js.map +1 -1
  239. package/dist/es5/serializers/array-buffer-serializer.js +8 -13
  240. package/dist/es5/serializers/array-buffer-serializer.js.map +1 -1
  241. package/dist/es5/serializers/array-serializer.js +18 -31
  242. package/dist/es5/serializers/array-serializer.js.map +1 -1
  243. package/dist/es5/serializers/boolean-serializer.js +12 -19
  244. package/dist/es5/serializers/boolean-serializer.js.map +1 -1
  245. package/dist/es5/serializers/data-view-serializer.js +8 -14
  246. package/dist/es5/serializers/data-view-serializer.js.map +1 -1
  247. package/dist/es5/serializers/date-serializer.js +8 -13
  248. package/dist/es5/serializers/date-serializer.js.map +1 -1
  249. package/dist/es5/serializers/float-32-array-serializer.js +8 -14
  250. package/dist/es5/serializers/float-32-array-serializer.js.map +1 -1
  251. package/dist/es5/serializers/float-64-array-serializer.js +8 -14
  252. package/dist/es5/serializers/float-64-array-serializer.js.map +1 -1
  253. package/dist/es5/serializers/int-16-array-serializer.js +8 -14
  254. package/dist/es5/serializers/int-16-array-serializer.js.map +1 -1
  255. package/dist/es5/serializers/int-32-array-serializer.js +8 -14
  256. package/dist/es5/serializers/int-32-array-serializer.js.map +1 -1
  257. package/dist/es5/serializers/int-8-array-serializer.js +8 -14
  258. package/dist/es5/serializers/int-8-array-serializer.js.map +1 -1
  259. package/dist/es5/serializers/map-serializer.js +69 -55
  260. package/dist/es5/serializers/map-serializer.js.map +1 -1
  261. package/dist/es5/serializers/number-serializer.js +10 -17
  262. package/dist/es5/serializers/number-serializer.js.map +1 -1
  263. package/dist/es5/serializers/set-serializer.js +30 -27
  264. package/dist/es5/serializers/set-serializer.js.map +1 -1
  265. package/dist/es5/serializers/string-serializer.js +12 -19
  266. package/dist/es5/serializers/string-serializer.js.map +1 -1
  267. package/dist/es5/serializers/type-serializer.js +65 -101
  268. package/dist/es5/serializers/type-serializer.js.map +1 -1
  269. package/dist/es5/serializers/uint-16-array-serializer.js +8 -14
  270. package/dist/es5/serializers/uint-16-array-serializer.js.map +1 -1
  271. package/dist/es5/serializers/uint-32-array-serializer.js +8 -14
  272. package/dist/es5/serializers/uint-32-array-serializer.js.map +1 -1
  273. package/dist/es5/serializers/uint-8-array-serializer.js +8 -14
  274. package/dist/es5/serializers/uint-8-array-serializer.js.map +1 -1
  275. package/dist/es5/serializers/uint-8-clamped-array-serializer.js +8 -14
  276. package/dist/es5/serializers/uint-8-clamped-array-serializer.js.map +1 -1
  277. package/dist/es5/serializers/unknown-serializer.js +4 -5
  278. package/dist/es5/serializers/unknown-serializer.js.map +1 -1
  279. package/dist/es5/type-entry.js +2 -0
  280. package/dist/es5/type-entry.js.map +1 -0
  281. package/dist/es5/type-extension-metadata-ctor-set-key.js +1 -1
  282. package/dist/es5/type-extension-metadata-ctor-set-key.js.map +1 -1
  283. package/dist/es5/type-extension-metadata.js.map +1 -1
  284. package/dist/es5/type-manager.js +110 -63
  285. package/dist/es5/type-manager.js.map +1 -1
  286. package/dist/es5/type-metadata-symbol.js +1 -1
  287. package/dist/es5/type-metadata-symbol.js.map +1 -1
  288. package/dist/es5/type-metadata.js +597 -273
  289. package/dist/es5/type-metadata.js.map +1 -1
  290. package/dist/es5/type-scope.js +42 -37
  291. package/dist/es5/type-scope.js.map +1 -1
  292. package/dist/es5/type-state.js +2 -0
  293. package/dist/es5/type-state.js.map +1 -0
  294. package/dist/es5/type-states/index.js +3 -0
  295. package/dist/es5/type-states/index.js.map +1 -0
  296. package/dist/es5/type-states/resolved-type-state.js +46 -0
  297. package/dist/es5/type-states/resolved-type-state.js.map +1 -0
  298. package/dist/es5/type-states/unresolved-type-state.js +453 -0
  299. package/dist/es5/type-states/unresolved-type-state.js.map +1 -0
  300. package/dist/es5/type.js.map +1 -1
  301. package/dist/types/constants/default-value-resolver.d.ts +8 -0
  302. package/dist/types/constants/default-value-resolver.d.ts.map +1 -0
  303. package/dist/types/constants/empty-array.d.ts +7 -0
  304. package/dist/types/constants/empty-array.d.ts.map +1 -0
  305. package/dist/types/constants/empty-map.d.ts +7 -0
  306. package/dist/types/constants/empty-map.d.ts.map +1 -0
  307. package/dist/types/constants/index.d.ts +5 -0
  308. package/dist/types/constants/index.d.ts.map +1 -0
  309. package/dist/types/constants/null-value-resolver.d.ts +8 -0
  310. package/dist/types/constants/null-value-resolver.d.ts.map +1 -0
  311. package/dist/types/custom-key.d.ts +4 -3
  312. package/dist/types/custom-key.d.ts.map +1 -1
  313. package/dist/types/custom-option.d.ts +2 -2
  314. package/dist/types/custom-value.d.ts +2 -1
  315. package/dist/types/custom-value.d.ts.map +1 -1
  316. package/dist/types/factories/type-factory.d.ts +8 -5
  317. package/dist/types/factories/type-factory.d.ts.map +1 -1
  318. package/dist/types/factory.d.ts +7 -4
  319. package/dist/types/factory.d.ts.map +1 -1
  320. package/dist/types/functions/get-own-reflect-metadata.d.ts.map +1 -1
  321. package/dist/types/functions/get-reflect-metadata.d.ts.map +1 -1
  322. package/dist/types/functions/get-words.d.ts +3 -3
  323. package/dist/types/functions/get-words.d.ts.map +1 -1
  324. package/dist/types/functions/index.d.ts +0 -12
  325. package/dist/types/functions/index.d.ts.map +1 -1
  326. package/dist/types/functions/json-parse.d.ts +1 -1
  327. package/dist/types/functions/json-parse.d.ts.map +1 -1
  328. package/dist/types/functions/json-stringify.d.ts.map +1 -1
  329. package/dist/types/functions/name-of.d.ts.map +1 -1
  330. package/dist/types/generic-argument.d.ts +2 -2
  331. package/dist/types/generic-argument.d.ts.map +1 -1
  332. package/dist/types/generic-metadata.d.ts +2 -2
  333. package/dist/types/generic-metadata.d.ts.map +1 -1
  334. package/dist/types/index.d.ts +13 -12
  335. package/dist/types/index.d.ts.map +1 -1
  336. package/dist/types/inject-metadata.d.ts +52 -45
  337. package/dist/types/inject-metadata.d.ts.map +1 -1
  338. package/dist/types/inject-options.d.ts +8 -8
  339. package/dist/types/inject-options.d.ts.map +1 -1
  340. package/dist/types/inject-sorter.d.ts +3 -3
  341. package/dist/types/inject-sorter.d.ts.map +1 -1
  342. package/dist/types/inject-sorters/asc-inject-sorter.d.ts +3 -3
  343. package/dist/types/inject-sorters/asc-inject-sorter.d.ts.map +1 -1
  344. package/dist/types/inject-sorters/desc-inject-sorter.d.ts +3 -3
  345. package/dist/types/inject-sorters/desc-inject-sorter.d.ts.map +1 -1
  346. package/dist/types/inject-state.d.ts +36 -0
  347. package/dist/types/inject-state.d.ts.map +1 -0
  348. package/dist/types/inject-states/index.d.ts +3 -0
  349. package/dist/types/inject-states/index.d.ts.map +1 -0
  350. package/dist/types/inject-states/resolved-inject-state.d.ts +46 -0
  351. package/dist/types/inject-states/resolved-inject-state.d.ts.map +1 -0
  352. package/dist/types/inject-states/unresolved-inject-state.d.ts +49 -0
  353. package/dist/types/inject-states/unresolved-inject-state.d.ts.map +1 -0
  354. package/dist/types/inject.d.ts +3 -3
  355. package/dist/types/inject.d.ts.map +1 -1
  356. package/dist/types/injector.d.ts +4 -3
  357. package/dist/types/injector.d.ts.map +1 -1
  358. package/dist/types/injectors/singleton-injector.d.ts +5 -5
  359. package/dist/types/injectors/singleton-injector.d.ts.map +1 -1
  360. package/dist/types/logger-level.d.ts +31 -0
  361. package/dist/types/logger-level.d.ts.map +1 -0
  362. package/dist/types/logger.d.ts +125 -0
  363. package/dist/types/logger.d.ts.map +1 -0
  364. package/dist/types/metadata.d.ts +29 -39
  365. package/dist/types/metadata.d.ts.map +1 -1
  366. package/dist/types/null-value-resolver.d.ts +9 -0
  367. package/dist/types/null-value-resolver.d.ts.map +1 -0
  368. package/dist/types/nullable.d.ts +7 -0
  369. package/dist/types/nullable.d.ts.map +1 -0
  370. package/dist/types/optional.d.ts +7 -0
  371. package/dist/types/optional.d.ts.map +1 -0
  372. package/dist/types/property-extension-metadata-ctor-set-key.d.ts +1 -1
  373. package/dist/types/property-extension-metadata-ctor-set-key.d.ts.map +1 -1
  374. package/dist/types/property-extension-metadata-ctor.d.ts +2 -2
  375. package/dist/types/property-extension-metadata-ctor.d.ts.map +1 -1
  376. package/dist/types/property-extension-metadata.d.ts +7 -7
  377. package/dist/types/property-extension-metadata.d.ts.map +1 -1
  378. package/dist/types/property-metadata.d.ts +134 -119
  379. package/dist/types/property-metadata.d.ts.map +1 -1
  380. package/dist/types/property-options.d.ts +11 -10
  381. package/dist/types/property-options.d.ts.map +1 -1
  382. package/dist/types/property-sorter.d.ts +3 -3
  383. package/dist/types/property-sorter.d.ts.map +1 -1
  384. package/dist/types/property-sorters/asc-property-sorter.d.ts +3 -3
  385. package/dist/types/property-sorters/asc-property-sorter.d.ts.map +1 -1
  386. package/dist/types/property-sorters/desc-property-sorter.d.ts +3 -3
  387. package/dist/types/property-sorters/desc-property-sorter.d.ts.map +1 -1
  388. package/dist/types/property-state.d.ts +149 -0
  389. package/dist/types/property-state.d.ts.map +1 -0
  390. package/dist/types/property-states/index.d.ts +3 -0
  391. package/dist/types/property-states/index.d.ts.map +1 -0
  392. package/dist/types/property-states/resolved-property-state.d.ts +176 -0
  393. package/dist/types/property-states/resolved-property-state.d.ts.map +1 -0
  394. package/dist/types/property-states/unresolved-property-state.d.ts +162 -0
  395. package/dist/types/property-states/unresolved-property-state.d.ts.map +1 -0
  396. package/dist/types/property.d.ts +4 -4
  397. package/dist/types/property.d.ts.map +1 -1
  398. package/dist/types/reference-handlers/circular-reference-handler.d.ts.map +1 -1
  399. package/dist/types/reference-handlers/json-path-reference-handler.d.ts.map +1 -1
  400. package/dist/types/reference-handlers/plain-reference-handler.d.ts.map +1 -1
  401. package/dist/types/reference-value-setter.d.ts +1 -1
  402. package/dist/types/reference-value-setter.d.ts.map +1 -1
  403. package/dist/types/serializer-context.d.ts +70 -164
  404. package/dist/types/serializer-context.d.ts.map +1 -1
  405. package/dist/types/serializer.d.ts +8 -8
  406. package/dist/types/serializer.d.ts.map +1 -1
  407. package/dist/types/serializers/any-serializer.d.ts.map +1 -1
  408. package/dist/types/serializers/array-buffer-serializer.d.ts.map +1 -1
  409. package/dist/types/serializers/array-serializer.d.ts.map +1 -1
  410. package/dist/types/serializers/boolean-serializer.d.ts +1 -1
  411. package/dist/types/serializers/boolean-serializer.d.ts.map +1 -1
  412. package/dist/types/serializers/data-view-serializer.d.ts.map +1 -1
  413. package/dist/types/serializers/date-serializer.d.ts.map +1 -1
  414. package/dist/types/serializers/float-32-array-serializer.d.ts.map +1 -1
  415. package/dist/types/serializers/float-64-array-serializer.d.ts.map +1 -1
  416. package/dist/types/serializers/int-16-array-serializer.d.ts.map +1 -1
  417. package/dist/types/serializers/int-32-array-serializer.d.ts.map +1 -1
  418. package/dist/types/serializers/int-8-array-serializer.d.ts.map +1 -1
  419. package/dist/types/serializers/map-serializer.d.ts.map +1 -1
  420. package/dist/types/serializers/number-serializer.d.ts +1 -1
  421. package/dist/types/serializers/number-serializer.d.ts.map +1 -1
  422. package/dist/types/serializers/set-serializer.d.ts.map +1 -1
  423. package/dist/types/serializers/string-serializer.d.ts +1 -1
  424. package/dist/types/serializers/string-serializer.d.ts.map +1 -1
  425. package/dist/types/serializers/type-serializer.d.ts.map +1 -1
  426. package/dist/types/serializers/uint-16-array-serializer.d.ts.map +1 -1
  427. package/dist/types/serializers/uint-32-array-serializer.d.ts.map +1 -1
  428. package/dist/types/serializers/uint-8-array-serializer.d.ts.map +1 -1
  429. package/dist/types/serializers/uint-8-clamped-array-serializer.d.ts.map +1 -1
  430. package/dist/types/serializers/unknown-serializer.d.ts.map +1 -1
  431. package/dist/types/type-abstraction.d.ts +2 -2
  432. package/dist/types/type-abstraction.d.ts.map +1 -1
  433. package/dist/types/type-argument.d.ts +3 -3
  434. package/dist/types/type-argument.d.ts.map +1 -1
  435. package/dist/types/type-configuration.d.ts +4 -4
  436. package/dist/types/type-configuration.d.ts.map +1 -1
  437. package/dist/types/type-ctor.d.ts +2 -2
  438. package/dist/types/type-ctor.d.ts.map +1 -1
  439. package/dist/types/type-entry.d.ts +29 -0
  440. package/dist/types/type-entry.d.ts.map +1 -0
  441. package/dist/types/type-extension-metadata-ctor-set-key.d.ts +1 -1
  442. package/dist/types/type-extension-metadata-ctor-set-key.d.ts.map +1 -1
  443. package/dist/types/type-extension-metadata-ctor.d.ts +2 -2
  444. package/dist/types/type-extension-metadata-ctor.d.ts.map +1 -1
  445. package/dist/types/type-extension-metadata.d.ts +6 -6
  446. package/dist/types/type-extension-metadata.d.ts.map +1 -1
  447. package/dist/types/type-fn.d.ts +2 -2
  448. package/dist/types/type-fn.d.ts.map +1 -1
  449. package/dist/types/type-like.d.ts +2 -2
  450. package/dist/types/type-like.d.ts.map +1 -1
  451. package/dist/types/type-manager-options.d.ts.map +1 -1
  452. package/dist/types/type-manager.d.ts +116 -123
  453. package/dist/types/type-manager.d.ts.map +1 -1
  454. package/dist/types/type-metadata-symbol.d.ts +1 -1
  455. package/dist/types/type-metadata-symbol.d.ts.map +1 -1
  456. package/dist/types/type-metadata.d.ts +253 -152
  457. package/dist/types/type-metadata.d.ts.map +1 -1
  458. package/dist/types/type-options-base.d.ts +13 -12
  459. package/dist/types/type-options-base.d.ts.map +1 -1
  460. package/dist/types/type-options.d.ts +10 -10
  461. package/dist/types/type-options.d.ts.map +1 -1
  462. package/dist/types/type-resolver.d.ts +2 -2
  463. package/dist/types/type-resolver.d.ts.map +1 -1
  464. package/dist/types/type-scope.d.ts.map +1 -1
  465. package/dist/types/type-state.d.ts +262 -0
  466. package/dist/types/type-state.d.ts.map +1 -0
  467. package/dist/types/type-states/index.d.ts +3 -0
  468. package/dist/types/type-states/index.d.ts.map +1 -0
  469. package/dist/types/type-states/resolved-type-state.d.ts +306 -0
  470. package/dist/types/type-states/resolved-type-state.d.ts.map +1 -0
  471. package/dist/types/type-states/unresolved-type-state.d.ts +275 -0
  472. package/dist/types/type-states/unresolved-type-state.d.ts.map +1 -0
  473. package/dist/types/type.d.ts +2 -2
  474. package/dist/types/type.d.ts.map +1 -1
  475. package/dist/umd/index.js +1 -1
  476. package/dist/umd/index.js.map +1 -1
  477. package/package.json +1 -7
  478. package/dist/es2015/custom-context.js +0 -59
  479. package/dist/es2015/custom-context.js.map +0 -1
  480. package/dist/es2015/functions/is-arrow-function.js +0 -5
  481. package/dist/es2015/functions/is-arrow-function.js.map +0 -1
  482. package/dist/es2015/functions/is-ctor-function.js +0 -5
  483. package/dist/es2015/functions/is-ctor-function.js.map +0 -1
  484. package/dist/es2015/functions/is-data-view.js +0 -4
  485. package/dist/es2015/functions/is-data-view.js.map +0 -1
  486. package/dist/es2015/functions/is-float-32-array.js +0 -4
  487. package/dist/es2015/functions/is-float-32-array.js.map +0 -1
  488. package/dist/es2015/functions/is-float-64-array.js +0 -4
  489. package/dist/es2015/functions/is-float-64-array.js.map +0 -1
  490. package/dist/es2015/functions/is-int-16-array.js +0 -4
  491. package/dist/es2015/functions/is-int-16-array.js.map +0 -1
  492. package/dist/es2015/functions/is-int-32-array.js +0 -4
  493. package/dist/es2015/functions/is-int-32-array.js.map +0 -1
  494. package/dist/es2015/functions/is-int-8-array.js +0 -4
  495. package/dist/es2015/functions/is-int-8-array.js.map +0 -1
  496. package/dist/es2015/functions/is-uint-16-array.js +0 -4
  497. package/dist/es2015/functions/is-uint-16-array.js.map +0 -1
  498. package/dist/es2015/functions/is-uint-32-array.js +0 -4
  499. package/dist/es2015/functions/is-uint-32-array.js.map +0 -1
  500. package/dist/es2015/functions/is-uint-8-array.js +0 -4
  501. package/dist/es2015/functions/is-uint-8-array.js.map +0 -1
  502. package/dist/es2015/functions/is-uint-8-clamped-array.js +0 -4
  503. package/dist/es2015/functions/is-uint-8-clamped-array.js.map +0 -1
  504. package/dist/es2015/generic-metadata-resolver.js +0 -2
  505. package/dist/es2015/generic-metadata-resolver.js.map +0 -1
  506. package/dist/es2015/generic-structure.js +0 -2
  507. package/dist/es2015/generic-structure.js.map +0 -1
  508. package/dist/es2015/inject-internals.js +0 -2
  509. package/dist/es2015/inject-internals.js.map +0 -1
  510. package/dist/es2015/log-level.js +0 -8
  511. package/dist/es2015/log-level.js.map +0 -1
  512. package/dist/es2015/log.js +0 -50
  513. package/dist/es2015/log.js.map +0 -1
  514. package/dist/es2015/property-internals.js +0 -2
  515. package/dist/es2015/property-internals.js.map +0 -1
  516. package/dist/es2015/serializer-context-options.js +0 -2
  517. package/dist/es2015/serializer-context-options.js.map +0 -1
  518. package/dist/es2015/type-context-entry.js +0 -9
  519. package/dist/es2015/type-context-entry.js.map +0 -1
  520. package/dist/es2015/type-context.js +0 -31
  521. package/dist/es2015/type-context.js.map +0 -1
  522. package/dist/es2015/type-internals.js +0 -2
  523. package/dist/es2015/type-internals.js.map +0 -1
  524. package/dist/es2015/type-metadata-resolver.js +0 -2
  525. package/dist/es2015/type-metadata-resolver.js.map +0 -1
  526. package/dist/es5/custom-context.js +0 -95
  527. package/dist/es5/custom-context.js.map +0 -1
  528. package/dist/es5/functions/is-arrow-function.js +0 -5
  529. package/dist/es5/functions/is-arrow-function.js.map +0 -1
  530. package/dist/es5/functions/is-ctor-function.js +0 -5
  531. package/dist/es5/functions/is-ctor-function.js.map +0 -1
  532. package/dist/es5/functions/is-data-view.js +0 -4
  533. package/dist/es5/functions/is-data-view.js.map +0 -1
  534. package/dist/es5/functions/is-float-32-array.js +0 -4
  535. package/dist/es5/functions/is-float-32-array.js.map +0 -1
  536. package/dist/es5/functions/is-float-64-array.js +0 -4
  537. package/dist/es5/functions/is-float-64-array.js.map +0 -1
  538. package/dist/es5/functions/is-int-16-array.js +0 -4
  539. package/dist/es5/functions/is-int-16-array.js.map +0 -1
  540. package/dist/es5/functions/is-int-32-array.js +0 -4
  541. package/dist/es5/functions/is-int-32-array.js.map +0 -1
  542. package/dist/es5/functions/is-int-8-array.js +0 -4
  543. package/dist/es5/functions/is-int-8-array.js.map +0 -1
  544. package/dist/es5/functions/is-uint-16-array.js +0 -4
  545. package/dist/es5/functions/is-uint-16-array.js.map +0 -1
  546. package/dist/es5/functions/is-uint-32-array.js +0 -4
  547. package/dist/es5/functions/is-uint-32-array.js.map +0 -1
  548. package/dist/es5/functions/is-uint-8-array.js +0 -4
  549. package/dist/es5/functions/is-uint-8-array.js.map +0 -1
  550. package/dist/es5/functions/is-uint-8-clamped-array.js +0 -4
  551. package/dist/es5/functions/is-uint-8-clamped-array.js.map +0 -1
  552. package/dist/es5/generic-metadata-resolver.js +0 -2
  553. package/dist/es5/generic-metadata-resolver.js.map +0 -1
  554. package/dist/es5/generic-structure.js +0 -2
  555. package/dist/es5/generic-structure.js.map +0 -1
  556. package/dist/es5/inject-internals.js +0 -2
  557. package/dist/es5/inject-internals.js.map +0 -1
  558. package/dist/es5/log-level.js +0 -8
  559. package/dist/es5/log-level.js.map +0 -1
  560. package/dist/es5/log.js +0 -65
  561. package/dist/es5/log.js.map +0 -1
  562. package/dist/es5/property-internals.js +0 -2
  563. package/dist/es5/property-internals.js.map +0 -1
  564. package/dist/es5/serializer-context-options.js +0 -2
  565. package/dist/es5/serializer-context-options.js.map +0 -1
  566. package/dist/es5/type-context-entry.js +0 -11
  567. package/dist/es5/type-context-entry.js.map +0 -1
  568. package/dist/es5/type-context.js +0 -33
  569. package/dist/es5/type-context.js.map +0 -1
  570. package/dist/es5/type-internals.js +0 -2
  571. package/dist/es5/type-internals.js.map +0 -1
  572. package/dist/es5/type-metadata-resolver.js +0 -2
  573. package/dist/es5/type-metadata-resolver.js.map +0 -1
  574. package/dist/types/custom-context.d.ts +0 -89
  575. package/dist/types/custom-context.d.ts.map +0 -1
  576. package/dist/types/functions/is-arrow-function.d.ts +0 -9
  577. package/dist/types/functions/is-arrow-function.d.ts.map +0 -1
  578. package/dist/types/functions/is-ctor-function.d.ts +0 -9
  579. package/dist/types/functions/is-ctor-function.d.ts.map +0 -1
  580. package/dist/types/functions/is-data-view.d.ts +0 -9
  581. package/dist/types/functions/is-data-view.d.ts.map +0 -1
  582. package/dist/types/functions/is-float-32-array.d.ts +0 -9
  583. package/dist/types/functions/is-float-32-array.d.ts.map +0 -1
  584. package/dist/types/functions/is-float-64-array.d.ts +0 -9
  585. package/dist/types/functions/is-float-64-array.d.ts.map +0 -1
  586. package/dist/types/functions/is-int-16-array.d.ts +0 -9
  587. package/dist/types/functions/is-int-16-array.d.ts.map +0 -1
  588. package/dist/types/functions/is-int-32-array.d.ts +0 -9
  589. package/dist/types/functions/is-int-32-array.d.ts.map +0 -1
  590. package/dist/types/functions/is-int-8-array.d.ts +0 -9
  591. package/dist/types/functions/is-int-8-array.d.ts.map +0 -1
  592. package/dist/types/functions/is-uint-16-array.d.ts +0 -9
  593. package/dist/types/functions/is-uint-16-array.d.ts.map +0 -1
  594. package/dist/types/functions/is-uint-32-array.d.ts +0 -9
  595. package/dist/types/functions/is-uint-32-array.d.ts.map +0 -1
  596. package/dist/types/functions/is-uint-8-array.d.ts +0 -9
  597. package/dist/types/functions/is-uint-8-array.d.ts.map +0 -1
  598. package/dist/types/functions/is-uint-8-clamped-array.d.ts +0 -9
  599. package/dist/types/functions/is-uint-8-clamped-array.d.ts.map +0 -1
  600. package/dist/types/generic-metadata-resolver.d.ts +0 -8
  601. package/dist/types/generic-metadata-resolver.d.ts.map +0 -1
  602. package/dist/types/generic-structure.d.ts +0 -8
  603. package/dist/types/generic-structure.d.ts.map +0 -1
  604. package/dist/types/inject-internals.d.ts +0 -15
  605. package/dist/types/inject-internals.d.ts.map +0 -1
  606. package/dist/types/log-level.d.ts +0 -12
  607. package/dist/types/log-level.d.ts.map +0 -1
  608. package/dist/types/log.d.ts +0 -96
  609. package/dist/types/log.d.ts.map +0 -1
  610. package/dist/types/property-internals.d.ts +0 -36
  611. package/dist/types/property-internals.d.ts.map +0 -1
  612. package/dist/types/serializer-context-options.d.ts +0 -51
  613. package/dist/types/serializer-context-options.d.ts.map +0 -1
  614. package/dist/types/type-context-entry.d.ts +0 -37
  615. package/dist/types/type-context-entry.d.ts.map +0 -1
  616. package/dist/types/type-context.d.ts +0 -71
  617. package/dist/types/type-context.d.ts.map +0 -1
  618. package/dist/types/type-internals.d.ts +0 -15
  619. package/dist/types/type-internals.d.ts.map +0 -1
  620. package/dist/types/type-metadata-resolver.d.ts +0 -9
  621. package/dist/types/type-metadata-resolver.d.ts.map +0 -1
@@ -1,339 +1,620 @@
1
- import { __extends, __read, __values } from "tslib";
2
- import { first, isEmpty, isFunction, isNil, isUndefined } from 'lodash';
3
- import { CustomContext } from './custom-context';
1
+ var __extends = (this && this.__extends) || (function () {
2
+ var extendStatics = function (d, b) {
3
+ extendStatics = Object.setPrototypeOf ||
4
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
5
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
6
+ return extendStatics(d, b);
7
+ };
8
+ return function (d, b) {
9
+ if (typeof b !== "function" && b !== null)
10
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
11
+ extendStatics(d, b);
12
+ function __() { this.constructor = d; }
13
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
14
+ };
15
+ })();
16
+ var __values = (this && this.__values) || function(o) {
17
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
18
+ if (m) return m.call(o);
19
+ if (o && typeof o.length === "number") return {
20
+ next: function () {
21
+ if (o && i >= o.length) o = void 0;
22
+ return { value: o && o[i++], done: !o };
23
+ }
24
+ };
25
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
26
+ };
27
+ var __read = (this && this.__read) || function (o, n) {
28
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
29
+ if (!m) return o;
30
+ var i = m.call(o), r, ar = [], e;
31
+ try {
32
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
33
+ }
34
+ catch (error) { e = { error: error }; }
35
+ finally {
36
+ try {
37
+ if (r && !r.done && (m = i["return"])) m.call(i);
38
+ }
39
+ finally { if (e) throw e.error; }
40
+ }
41
+ return ar;
42
+ };
43
+ import { DEFAULT_VALUE_RESOLVER } from './constants/default-value-resolver';
44
+ import { EMPTY_ARRAY } from './constants/empty-array';
45
+ import { EMPTY_MAP } from './constants/empty-map';
46
+ import { NULL_VALUE_RESOLVER } from './constants/null-value-resolver';
4
47
  import { getOwnReflectMetadata } from './functions/get-own-reflect-metadata';
5
48
  import { nameOf } from './functions/name-of';
6
49
  import { InjectMetadata } from './inject-metadata';
7
50
  import { Metadata } from './metadata';
8
51
  import { PropertyMetadata } from './property-metadata';
9
- import { typeExtensionMetadataCtorSetKey } from './type-extension-metadata-ctor-set-key';
52
+ import { TYPE_EXTENSION_METADATA_CTOR_SET_KEY } from './type-extension-metadata-ctor-set-key';
53
+ import { ResolvedTypeState } from './type-states/resolved-type-state';
54
+ import { UnresolvedTypeState } from './type-states/unresolved-type-state';
10
55
  var TypeMetadata = (function (_super) {
11
56
  __extends(TypeMetadata, _super);
12
- function TypeMetadata(typeManager, typeFn, typeOptions, parentTypeMetadatas) {
13
- var _this = _super.call(this, typeManager) || this;
14
- _this.childrenTypeMetadataMap = new Map();
15
- _this.discriminantMap = new Map();
16
- _this.propertyMetadataMap = new Map();
17
- _this.injectMetadataMap = new Map();
57
+ function TypeMetadata(typeManager, typeFnMap, typeMetadataSet, typeFn, typeOptions, parentTypeMetadata) {
58
+ var _this = _super.call(this, typeManager, typeFnMap) || this;
18
59
  _this.typeName = nameOf(typeFn);
19
60
  _this.typeFn = typeFn;
61
+ _this.parentTypeMetadata = parentTypeMetadata;
20
62
  _this.typeOptionsBase = typeManager.typeOptionsBase;
21
63
  _this.typeOptions = _this.constructTypeOptions(typeOptions);
22
- _this.typeInternals = _this.constructTypeInternals();
23
- _this.parentTypeMetadatas = parentTypeMetadatas;
24
- _this.deriveParentTypeMetadataProperties();
25
- _this.hasDiscriminant(_this.discriminant);
64
+ _this.typeMetadataSet = typeMetadataSet;
65
+ _this.currentTypeFnMap = typeFnMap;
66
+ _this.currentChildTypeMetadataMap = new Map();
67
+ _this.currentPropertyMetadataMap = new Map();
68
+ _this.currentInjectMetadataMap = new Map();
69
+ _this.currentTypeState = new UnresolvedTypeState(_this);
70
+ _this.extendParentTypeMetadata();
26
71
  _this.configure(typeOptions);
27
72
  return _this;
28
73
  }
29
- Object.defineProperty(TypeMetadata.prototype, "parentTypeMetadata", {
74
+ Object.defineProperty(TypeMetadata.prototype, "typeState", {
30
75
  get: function () {
31
- return first(this.parentTypeMetadatas);
76
+ return this.currentTypeState;
32
77
  },
33
78
  enumerable: false,
34
79
  configurable: true
35
80
  });
36
- Object.defineProperty(TypeMetadata.prototype, "alias", {
81
+ Object.defineProperty(TypeMetadata.prototype, "injectMetadataMap", {
37
82
  get: function () {
38
- return this.typeOptions.alias;
83
+ return this.currentTypeState.injectMetadataMap;
39
84
  },
40
85
  enumerable: false,
41
86
  configurable: true
42
87
  });
43
- Object.defineProperty(TypeMetadata.prototype, "customOptions", {
88
+ Object.defineProperty(TypeMetadata.prototype, "propertyMetadataMap", {
44
89
  get: function () {
45
- return this.typeOptions.customOptions;
90
+ return this.currentTypeState.propertyMetadataMap;
46
91
  },
47
92
  enumerable: false,
48
93
  configurable: true
49
94
  });
50
- Object.defineProperty(TypeMetadata.prototype, "customContext", {
95
+ Object.defineProperty(TypeMetadata.prototype, "alias", {
51
96
  get: function () {
52
- var customContext = this.typeInternals.customContext;
53
- if (isNil(customContext)) {
54
- this.typeOptions.customOptions = new Array();
55
- this.typeInternals.customContext = new CustomContext(this.typeOptions.customOptions);
56
- customContext = this.typeInternals.customContext;
57
- }
58
- return customContext;
97
+ return this.currentTypeState.alias;
98
+ },
99
+ enumerable: false,
100
+ configurable: true
101
+ });
102
+ Object.defineProperty(TypeMetadata.prototype, "customValueMap", {
103
+ get: function () {
104
+ return this.currentTypeState.customValueMap;
59
105
  },
60
106
  enumerable: false,
61
107
  configurable: true
62
108
  });
63
109
  Object.defineProperty(TypeMetadata.prototype, "serializedNullValue", {
64
110
  get: function () {
65
- if (this.preserveNull) {
66
- return null;
67
- }
68
- return this.serializedDefaultValue;
111
+ return this.currentTypeState.serializedNullValueResolver();
69
112
  },
70
113
  enumerable: false,
71
114
  configurable: true
72
115
  });
73
116
  Object.defineProperty(TypeMetadata.prototype, "serializedDefaultValue", {
74
117
  get: function () {
75
- var _a;
76
- if (this.useDefaultValue) {
77
- var serializedDefaultValue = (_a = this.typeOptions.defaultValue) !== null && _a !== void 0 ? _a : this.typeOptions.serializedDefaultValue;
78
- var defaultValue = isFunction(serializedDefaultValue)
79
- ? serializedDefaultValue()
80
- : serializedDefaultValue;
81
- return defaultValue;
82
- }
83
- return undefined;
118
+ return this.currentTypeState.serializedDefaultValueResolver();
84
119
  },
85
120
  enumerable: false,
86
121
  configurable: true
87
122
  });
88
123
  Object.defineProperty(TypeMetadata.prototype, "deserializedNullValue", {
89
124
  get: function () {
90
- if (this.preserveNull) {
91
- return null;
92
- }
93
- return this.deserializedDefaultValue;
125
+ return this.currentTypeState.deserializedNullValueResolver();
94
126
  },
95
127
  enumerable: false,
96
128
  configurable: true
97
129
  });
98
130
  Object.defineProperty(TypeMetadata.prototype, "deserializedDefaultValue", {
99
131
  get: function () {
100
- var _a;
101
- if (this.useDefaultValue) {
102
- var deserializedDefaultValue = (_a = this.typeOptions.defaultValue) !== null && _a !== void 0 ? _a : this.typeOptions.deserializedDefaultValue;
103
- var defaultValue = isFunction(deserializedDefaultValue)
104
- ? deserializedDefaultValue()
105
- : deserializedDefaultValue;
106
- return defaultValue;
107
- }
108
- return undefined;
132
+ return this.currentTypeState.deserializedDefaultValueResolver();
109
133
  },
110
134
  enumerable: false,
111
135
  configurable: true
112
136
  });
113
137
  Object.defineProperty(TypeMetadata.prototype, "discriminant", {
114
138
  get: function () {
115
- var _a;
116
- return (_a = this.typeOptions.discriminant) !== null && _a !== void 0 ? _a : this.typeName;
139
+ return this.currentTypeState.discriminant;
117
140
  },
118
141
  enumerable: false,
119
142
  configurable: true
120
143
  });
121
144
  Object.defineProperty(TypeMetadata.prototype, "discriminator", {
122
145
  get: function () {
123
- var _a;
124
- return (_a = this.typeOptions.discriminator) !== null && _a !== void 0 ? _a : this.typeOptionsBase.discriminator;
146
+ return this.currentTypeState.discriminator;
125
147
  },
126
148
  enumerable: false,
127
149
  configurable: true
128
150
  });
129
151
  Object.defineProperty(TypeMetadata.prototype, "factory", {
130
152
  get: function () {
131
- var _a;
132
- return (_a = this.typeOptions.factory) !== null && _a !== void 0 ? _a : this.typeOptionsBase.factory;
153
+ return this.currentTypeState.factory;
133
154
  },
134
155
  enumerable: false,
135
156
  configurable: true
136
157
  });
137
158
  Object.defineProperty(TypeMetadata.prototype, "injectable", {
138
159
  get: function () {
139
- return this.typeOptions.injectable;
160
+ return this.currentTypeState.injectable;
140
161
  },
141
162
  enumerable: false,
142
163
  configurable: true
143
164
  });
144
165
  Object.defineProperty(TypeMetadata.prototype, "injector", {
145
166
  get: function () {
146
- var _a;
147
- return (_a = this.typeOptions.injector) !== null && _a !== void 0 ? _a : this.typeOptionsBase.injector;
167
+ return this.currentTypeState.injector;
148
168
  },
149
169
  enumerable: false,
150
170
  configurable: true
151
171
  });
152
- Object.defineProperty(TypeMetadata.prototype, "log", {
172
+ Object.defineProperty(TypeMetadata.prototype, "logger", {
153
173
  get: function () {
154
- var _a;
155
- return (_a = this.typeOptions.log) !== null && _a !== void 0 ? _a : this.typeOptionsBase.log;
174
+ return this.currentTypeState.logger;
156
175
  },
157
176
  enumerable: false,
158
177
  configurable: true
159
178
  });
160
179
  Object.defineProperty(TypeMetadata.prototype, "namingConvention", {
161
180
  get: function () {
162
- var _a;
163
- return (_a = this.typeOptions.namingConvention) !== null && _a !== void 0 ? _a : this.typeOptionsBase.namingConvention;
181
+ return this.currentTypeState.namingConvention;
164
182
  },
165
183
  enumerable: false,
166
184
  configurable: true
167
185
  });
168
186
  Object.defineProperty(TypeMetadata.prototype, "polymorphic", {
169
187
  get: function () {
170
- return this.discriminantMap.size > 1;
188
+ return this.currentTypeState.polymorphic;
171
189
  },
172
190
  enumerable: false,
173
191
  configurable: true
174
192
  });
175
193
  Object.defineProperty(TypeMetadata.prototype, "preserveDiscriminator", {
176
194
  get: function () {
177
- var _a;
178
- return (_a = this.typeOptions.preserveDiscriminator) !== null && _a !== void 0 ? _a : this.typeOptionsBase.preserveDiscriminator;
195
+ return this.currentTypeState.preserveDiscriminator;
179
196
  },
180
197
  enumerable: false,
181
198
  configurable: true
182
199
  });
183
200
  Object.defineProperty(TypeMetadata.prototype, "referenceHandler", {
184
201
  get: function () {
185
- var _a;
186
- return (_a = this.typeOptions.referenceHandler) !== null && _a !== void 0 ? _a : this.typeOptionsBase.referenceHandler;
202
+ return this.currentTypeState.referenceHandler;
187
203
  },
188
204
  enumerable: false,
189
205
  configurable: true
190
206
  });
191
207
  Object.defineProperty(TypeMetadata.prototype, "serializer", {
192
208
  get: function () {
193
- var _a;
194
- return (_a = this.typeOptions.serializer) !== null && _a !== void 0 ? _a : this.typeOptionsBase.serializer;
209
+ return this.currentTypeState.serializer;
195
210
  },
196
211
  enumerable: false,
197
212
  configurable: true
198
213
  });
199
214
  Object.defineProperty(TypeMetadata.prototype, "preserveNull", {
200
215
  get: function () {
201
- var _a;
202
- return (_a = this.typeOptions.preserveNull) !== null && _a !== void 0 ? _a : this.typeOptionsBase.preserveNull;
216
+ return this.currentTypeState.preserveNull;
203
217
  },
204
218
  enumerable: false,
205
219
  configurable: true
206
220
  });
207
221
  Object.defineProperty(TypeMetadata.prototype, "useDefaultValue", {
208
222
  get: function () {
209
- var _a;
210
- return (_a = this.typeOptions.useDefaultValue) !== null && _a !== void 0 ? _a : this.typeOptionsBase.useDefaultValue;
223
+ return this.currentTypeState.useDefaultValue;
211
224
  },
212
225
  enumerable: false,
213
226
  configurable: true
214
227
  });
215
228
  Object.defineProperty(TypeMetadata.prototype, "useImplicitConversion", {
216
229
  get: function () {
217
- var _a;
218
- return (_a = this.typeOptions.useImplicitConversion) !== null && _a !== void 0 ? _a : this.typeOptionsBase.useImplicitConversion;
230
+ return this.currentTypeState.useImplicitConversion;
219
231
  },
220
232
  enumerable: false,
221
233
  configurable: true
222
234
  });
223
235
  Object.defineProperty(TypeMetadata.prototype, "propertySorter", {
224
236
  get: function () {
225
- var _a;
226
- return (_a = this.typeOptions.propertySorter) !== null && _a !== void 0 ? _a : this.typeOptionsBase.propertySorter;
237
+ return this.currentTypeState.propertySorter;
227
238
  },
228
239
  enumerable: false,
229
240
  configurable: true
230
241
  });
231
242
  Object.defineProperty(TypeMetadata.prototype, "sortedPropertyMetadatas", {
232
243
  get: function () {
233
- var propertySorter = this.propertySorter;
234
- var propertyMetadatas = this.propertyMetadataMap.values();
235
- if (isNil(propertySorter)) {
236
- return propertyMetadatas;
237
- }
238
- var sortedPropertyMetadatas = Array.from(propertyMetadatas).sort(propertySorter.sort);
239
- return sortedPropertyMetadatas[Symbol.iterator]();
244
+ return this.currentTypeState.sortedPropertyMetadatas;
240
245
  },
241
246
  enumerable: false,
242
247
  configurable: true
243
248
  });
244
249
  Object.defineProperty(TypeMetadata.prototype, "injectSorter", {
245
250
  get: function () {
246
- var _a;
247
- return (_a = this.typeOptions.injectSorter) !== null && _a !== void 0 ? _a : this.typeOptionsBase.injectSorter;
251
+ return this.currentTypeState.injectSorter;
248
252
  },
249
253
  enumerable: false,
250
254
  configurable: true
251
255
  });
252
256
  Object.defineProperty(TypeMetadata.prototype, "sortedInjectMetadatas", {
253
257
  get: function () {
254
- var injectSorter = this.injectSorter;
255
- var injectMetadatas = this.injectMetadataMap.values();
256
- if (isNil(injectSorter)) {
257
- return injectMetadatas;
258
- }
259
- var sortedInjectMetadatas = Array.from(injectMetadatas).sort(injectSorter.sort);
260
- return sortedInjectMetadatas[Symbol.iterator]();
258
+ return this.currentTypeState.sortedInjectMetadatas;
261
259
  },
262
260
  enumerable: false,
263
261
  configurable: true
264
262
  });
265
- Object.defineProperty(TypeMetadata.prototype, "propertyOptionsMap", {
263
+ Object.defineProperty(TypeMetadata.prototype, "parentTypeArguments", {
266
264
  get: function () {
267
- var propertyOptionsMap = this.typeOptions.propertyOptionsMap;
268
- if (isNil(propertyOptionsMap)) {
269
- propertyOptionsMap = new Map();
270
- this.typeOptions.propertyOptionsMap = propertyOptionsMap;
271
- }
272
- return propertyOptionsMap;
265
+ return this.currentTypeState.parentTypeArguments;
273
266
  },
274
267
  enumerable: false,
275
268
  configurable: true
276
269
  });
277
- Object.defineProperty(TypeMetadata.prototype, "injectOptionsMap", {
270
+ Object.defineProperty(TypeMetadata.prototype, "propertyOptionsMap", {
278
271
  get: function () {
279
- var injectOptionsMap = this.typeOptions.injectOptionsMap;
280
- if (isNil(injectOptionsMap)) {
281
- injectOptionsMap = new Map();
282
- this.typeOptions.injectOptionsMap = injectOptionsMap;
283
- }
284
- return injectOptionsMap;
272
+ return this.currentTypeState.propertyOptionsMap;
285
273
  },
286
274
  enumerable: false,
287
275
  configurable: true
288
276
  });
289
- Object.defineProperty(TypeMetadata.prototype, "parentTypeFns", {
277
+ Object.defineProperty(TypeMetadata.prototype, "injectOptionsMap", {
290
278
  get: function () {
291
- return this.typeOptions.parentTypeFns;
279
+ return this.currentTypeState.injectOptionsMap;
292
280
  },
293
281
  enumerable: false,
294
282
  configurable: true
295
283
  });
296
284
  TypeMetadata.prototype.constructTypeOptions = function (typeOptions) {
285
+ if (typeOptions.customValueMap === undefined) {
286
+ typeOptions.customValueMap = new Map();
287
+ }
288
+ if (typeOptions.propertyOptionsMap === undefined) {
289
+ typeOptions.propertyOptionsMap = new Map();
290
+ }
291
+ if (typeOptions.injectOptionsMap === undefined) {
292
+ typeOptions.injectOptionsMap = new Map();
293
+ }
297
294
  return typeOptions;
298
295
  };
299
- TypeMetadata.prototype.constructTypeInternals = function () {
300
- var customOptions = this.typeOptions.customOptions;
301
- var customContext = isNil(customOptions) ? undefined : new CustomContext(customOptions);
302
- var typeInternals = { customContext: customContext };
303
- return typeInternals;
296
+ TypeMetadata.prototype.configureTypeExtensionMetadata = function (typeExtensionMetadataCtor, typeExtensionOptions) {
297
+ var typeExtensionMetadataCtorSet = this.extractTypeExtensionMetadataCtorSet();
298
+ if (!typeExtensionMetadataCtorSet.has(typeExtensionMetadataCtor)) {
299
+ typeExtensionMetadataCtorSet.add(typeExtensionMetadataCtor);
300
+ }
301
+ var initialTypeExtensionOptions = typeExtensionOptions !== null && typeExtensionOptions !== void 0 ? typeExtensionOptions : {};
302
+ var typeExtensionMetadata = new typeExtensionMetadataCtor(this, initialTypeExtensionOptions);
303
+ return typeExtensionMetadata;
304
304
  };
305
- TypeMetadata.prototype.deriveParentTypeMetadataProperties = function () {
306
- var e_1, _a, e_2, _b;
307
- if (isEmpty(this.parentTypeMetadatas)) {
308
- return this;
305
+ TypeMetadata.prototype.extractTypeExtensionMetadata = function (typeExtensionMetadataCtor) {
306
+ var typeExtensionMetadataCtorSet = this.extractTypeExtensionMetadataCtorSet();
307
+ if (!typeExtensionMetadataCtorSet.has(typeExtensionMetadataCtor)) {
308
+ return undefined;
309
309
  }
310
+ var initialTypeExtensionOptions = {};
311
+ var typeExtensionMetadata = new typeExtensionMetadataCtor(this, initialTypeExtensionOptions);
312
+ return typeExtensionMetadata;
313
+ };
314
+ TypeMetadata.prototype.extractTypeExtensionMetadataCtorSet = function () {
315
+ var customValueMap = this.typeOptions.customValueMap;
316
+ if (customValueMap === undefined) {
317
+ customValueMap = new Map();
318
+ this.typeOptions.customValueMap = customValueMap;
319
+ }
320
+ var typeExtensionMetadataCtorSet = customValueMap.get(TYPE_EXTENSION_METADATA_CTOR_SET_KEY);
321
+ if (typeExtensionMetadataCtorSet === undefined) {
322
+ typeExtensionMetadataCtorSet = new Set();
323
+ customValueMap.set(TYPE_EXTENSION_METADATA_CTOR_SET_KEY, typeExtensionMetadataCtorSet);
324
+ }
325
+ return typeExtensionMetadataCtorSet;
326
+ };
327
+ TypeMetadata.prototype.resolveTypeState = function () {
328
+ var typeOptionsBase = this.typeOptionsBase;
329
+ var typeOptions = this.typeOptions;
330
+ var typeName = this.typeName;
331
+ var alias = typeOptions.alias;
332
+ var customValueMap = this.resolveCustomValueMap();
333
+ var preserveNull = typeOptions.preserveNull === undefined
334
+ ? typeOptionsBase.preserveNull
335
+ : typeOptions.preserveNull;
336
+ var useDefaultValue = typeOptions.useDefaultValue === undefined
337
+ ? typeOptionsBase.useDefaultValue
338
+ : typeOptions.useDefaultValue;
339
+ var useImplicitConversion = typeOptions.useImplicitConversion === undefined
340
+ ? typeOptionsBase.useImplicitConversion
341
+ : typeOptions.useImplicitConversion;
342
+ var serializedDefaultValue = typeOptions.defaultValue === undefined
343
+ ? typeOptions.serializedDefaultValue
344
+ : typeOptions.defaultValue;
345
+ var serializedDefaultValueResolver = useDefaultValue
346
+ ? (typeof serializedDefaultValue === 'function' ? serializedDefaultValue : function () { return serializedDefaultValue; })
347
+ : DEFAULT_VALUE_RESOLVER;
348
+ var serializedNullValueResolver = preserveNull
349
+ ? NULL_VALUE_RESOLVER
350
+ : serializedDefaultValueResolver;
351
+ var deserializedDefaultValue = typeOptions.defaultValue === undefined
352
+ ? typeOptions.deserializedDefaultValue
353
+ : typeOptions.defaultValue;
354
+ var deserializedDefaultValueResolver = useDefaultValue
355
+ ? (typeof deserializedDefaultValue === 'function' ? deserializedDefaultValue : function () { return deserializedDefaultValue; })
356
+ : DEFAULT_VALUE_RESOLVER;
357
+ var deserializedNullValueResolver = preserveNull
358
+ ? NULL_VALUE_RESOLVER
359
+ : deserializedDefaultValueResolver;
360
+ var discriminant = typeOptions.discriminant === undefined
361
+ ? typeName
362
+ : typeOptions.discriminant;
363
+ var discriminator = typeOptions.discriminator === undefined
364
+ ? typeOptionsBase.discriminator
365
+ : typeOptions.discriminator;
366
+ var factory = typeOptions.factory === undefined
367
+ ? typeOptionsBase.factory
368
+ : typeOptions.factory;
369
+ var injectable = typeOptions.injectable === true;
370
+ var injector = typeOptions.injector === undefined
371
+ ? typeOptionsBase.injector
372
+ : typeOptions.injector;
373
+ var logger = typeOptions.logger === undefined
374
+ ? typeOptionsBase.logger
375
+ : typeOptions.logger;
376
+ var namingConvention = typeOptions.namingConvention === undefined
377
+ ? typeOptionsBase.namingConvention
378
+ : typeOptions.namingConvention;
379
+ var parentTypeArguments = typeOptions.parentTypeArguments === undefined
380
+ ? EMPTY_ARRAY
381
+ : typeOptions.parentTypeArguments;
382
+ var ownParentTypeMetadatas = this.resolveOwnParentTypeMetadatas(parentTypeArguments);
383
+ var ownChildTypeMetadatas = this.resolveOwnChildTypeMetadatas();
384
+ var parentTypeMetadataSet = this.resolveParentTypeMetadataSet(this);
385
+ var parentTypeMetadatas = Array.from(parentTypeMetadataSet);
386
+ var childTypeMetadataSet = this.resolveChildTypeMetadataSet(this);
387
+ var childTypeMetadatas = Array.from(childTypeMetadataSet);
388
+ var typeMetadataMap = new Map();
389
+ var polymorphic = childTypeMetadatas.length > 1;
390
+ for (var i = 0; i < childTypeMetadatas.length; i++) {
391
+ var childTypeMetadata = childTypeMetadatas[i];
392
+ typeMetadataMap.set(childTypeMetadata.typeFn, childTypeMetadata);
393
+ }
394
+ var preserveDiscriminator = typeOptions.preserveDiscriminator === undefined
395
+ ? typeOptionsBase.preserveDiscriminator
396
+ : typeOptions.preserveDiscriminator;
397
+ var referenceHandler = typeOptions.referenceHandler === undefined
398
+ ? typeOptionsBase.referenceHandler
399
+ : typeOptions.referenceHandler;
400
+ var serializer = typeOptions.serializer === undefined
401
+ ? typeOptionsBase.serializer
402
+ : typeOptions.serializer;
403
+ var propertySorter = typeOptions.propertySorter === undefined
404
+ ? typeOptionsBase.propertySorter
405
+ : typeOptions.propertySorter;
406
+ var ownPropertyMetadataMap = this.currentPropertyMetadataMap;
407
+ var propertyMetadataMap = this.resolvePropertyMetadataMap(parentTypeMetadatas);
408
+ var sortedPropertyMetadatas = propertySorter === undefined
409
+ ? Array.from(propertyMetadataMap.values())
410
+ : Array.from(propertyMetadataMap.values()).sort(propertySorter.sort);
411
+ var injectMetadataMap = this.currentInjectMetadataMap;
412
+ var injectSorter = typeOptions.injectSorter === undefined
413
+ ? typeOptionsBase.injectSorter
414
+ : typeOptions.injectSorter;
415
+ var sortedInjectMetadatas = injectSorter === undefined
416
+ ? Array.from(injectMetadataMap.values())
417
+ : Array.from(injectMetadataMap.values()).sort(injectSorter.sort);
418
+ var propertyOptionsMap = typeOptions.propertyOptionsMap === undefined
419
+ ? EMPTY_MAP
420
+ : typeOptions.propertyOptionsMap;
421
+ var injectOptionsMap = typeOptions.injectOptionsMap === undefined
422
+ ? EMPTY_MAP
423
+ : typeOptions.injectOptionsMap;
424
+ var 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);
425
+ this.currentTypeState = resolvedTypeState;
426
+ return resolvedTypeState;
427
+ };
428
+ TypeMetadata.prototype.unresolveTypeState = function () {
429
+ var unresolvedTypeState = new UnresolvedTypeState(this);
430
+ this.currentTypeState = unresolvedTypeState;
431
+ return unresolvedTypeState;
432
+ };
433
+ TypeMetadata.prototype.resolveCustomValueMap = function () {
434
+ var e_1, _a;
435
+ var typeOptionsBase = this.typeOptionsBase;
436
+ var typeOptions = this.typeOptions;
437
+ var customValueMap = new Map();
438
+ if (typeOptions.customValueMap === undefined) {
439
+ return customValueMap;
440
+ }
441
+ var baseCustomValueMap = typeOptionsBase.customValueMap === undefined
442
+ ? EMPTY_MAP
443
+ : typeOptionsBase.customValueMap;
310
444
  try {
311
- for (var _c = __values(this.parentTypeMetadatas), _d = _c.next(); !_d.done; _d = _c.next()) {
312
- var parentTypeMetadata = _d.value;
313
- try {
314
- for (var _e = (e_2 = void 0, __values(parentTypeMetadata.propertyMetadataMap)), _f = _e.next(); !_f.done; _f = _e.next()) {
315
- var _g = __read(_f.value, 2), propertyName = _g[0], propertyMetadata = _g[1];
316
- if (!this.propertyMetadataMap.has(propertyName)) {
317
- this.propertyMetadataMap.set(propertyName, propertyMetadata);
318
- }
319
- }
445
+ for (var _b = __values(typeOptions.customValueMap), _c = _b.next(); !_c.done; _c = _b.next()) {
446
+ var _d = __read(_c.value, 2), customKey = _d[0], customValue = _d[1];
447
+ if (customValue === undefined) {
448
+ customValueMap.set(customKey, baseCustomValueMap.get(customKey));
449
+ continue;
320
450
  }
321
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
322
- finally {
323
- try {
324
- if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
451
+ customValueMap.set(customKey, customValue);
452
+ }
453
+ }
454
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
455
+ finally {
456
+ try {
457
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
458
+ }
459
+ finally { if (e_1) throw e_1.error; }
460
+ }
461
+ return customValueMap;
462
+ };
463
+ TypeMetadata.prototype.resolveOwnParentTypeMetadatas = function (parentTypeArguments) {
464
+ var ownParentTypeMetadatas = new Array();
465
+ var parentTypeMetadatas = this.resolveTypeMetadatas(parentTypeArguments);
466
+ for (var i = parentTypeMetadatas.length - 1; i >= 0; i--) {
467
+ ownParentTypeMetadatas.push(parentTypeMetadatas[i]);
468
+ }
469
+ if (this.parentTypeMetadata !== undefined) {
470
+ ownParentTypeMetadatas.push(this.parentTypeMetadata);
471
+ }
472
+ return ownParentTypeMetadatas;
473
+ };
474
+ TypeMetadata.prototype.resolveOwnChildTypeMetadatas = function () {
475
+ var e_2, _a, e_3, _b;
476
+ var ownChildTypeMetadatas = new Array();
477
+ try {
478
+ for (var _c = __values(this.currentChildTypeMetadataMap.values()), _d = _c.next(); !_d.done; _d = _c.next()) {
479
+ var childTypeMetadata = _d.value;
480
+ ownChildTypeMetadatas.push(childTypeMetadata);
481
+ }
482
+ }
483
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
484
+ finally {
485
+ try {
486
+ if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
487
+ }
488
+ finally { if (e_2) throw e_2.error; }
489
+ }
490
+ try {
491
+ for (var _e = __values(this.typeMetadataSet), _f = _e.next(); !_f.done; _f = _e.next()) {
492
+ var setTypeMetadata = _f.value;
493
+ var typeOptions = setTypeMetadata.typeOptions;
494
+ var parentTypeArguments = typeOptions.parentTypeArguments === undefined
495
+ ? EMPTY_ARRAY
496
+ : typeOptions.parentTypeArguments;
497
+ var parentTypeMetadatas = this.resolveTypeMetadatas(parentTypeArguments);
498
+ for (var i = 0; i < parentTypeMetadatas.length; i++) {
499
+ if (parentTypeMetadatas[i] === this) {
500
+ ownChildTypeMetadatas.push(setTypeMetadata);
501
+ break;
325
502
  }
326
- finally { if (e_2) throw e_2.error; }
327
503
  }
328
- parentTypeMetadata.childrenTypeMetadataMap.set(this.typeFn, this);
329
504
  }
330
505
  }
331
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
506
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
507
+ finally {
508
+ try {
509
+ if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
510
+ }
511
+ finally { if (e_3) throw e_3.error; }
512
+ }
513
+ return ownChildTypeMetadatas;
514
+ };
515
+ TypeMetadata.prototype.resolveParentTypeMetadataSet = function (typeMetadata, parentTypeMetadataSet) {
516
+ if (parentTypeMetadataSet === void 0) { parentTypeMetadataSet = new Set(); }
517
+ if (parentTypeMetadataSet.has(typeMetadata)) {
518
+ return parentTypeMetadataSet;
519
+ }
520
+ parentTypeMetadataSet.add(typeMetadata);
521
+ var typeOptions = typeMetadata.typeOptions;
522
+ var parentTypeArguments = typeOptions.parentTypeArguments === undefined
523
+ ? EMPTY_ARRAY
524
+ : typeOptions.parentTypeArguments;
525
+ var parentTypeMetadatas = this.resolveTypeMetadatas(parentTypeArguments);
526
+ for (var i = parentTypeMetadatas.length - 1; i >= 0; i--) {
527
+ this.resolveParentTypeMetadataSet(parentTypeMetadatas[i], parentTypeMetadataSet);
528
+ }
529
+ if (typeMetadata.parentTypeMetadata !== undefined) {
530
+ this.resolveParentTypeMetadataSet(typeMetadata.parentTypeMetadata, parentTypeMetadataSet);
531
+ }
532
+ return parentTypeMetadataSet;
533
+ };
534
+ TypeMetadata.prototype.resolveChildTypeMetadataSet = function (typeMetadata, childTypeMetadataSet) {
535
+ var e_4, _a, e_5, _b;
536
+ if (childTypeMetadataSet === void 0) { childTypeMetadataSet = new Set(); }
537
+ if (childTypeMetadataSet.has(typeMetadata)) {
538
+ return childTypeMetadataSet;
539
+ }
540
+ childTypeMetadataSet.add(typeMetadata);
541
+ try {
542
+ for (var _c = __values(typeMetadata.currentChildTypeMetadataMap.values()), _d = _c.next(); !_d.done; _d = _c.next()) {
543
+ var childTypeMetadata = _d.value;
544
+ this.resolveChildTypeMetadataSet(childTypeMetadata, childTypeMetadataSet);
545
+ childTypeMetadata.unresolveTypeState();
546
+ }
547
+ }
548
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
332
549
  finally {
333
550
  try {
334
551
  if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
335
552
  }
336
- finally { if (e_1) throw e_1.error; }
553
+ finally { if (e_4) throw e_4.error; }
554
+ }
555
+ try {
556
+ for (var _e = __values(this.typeMetadataSet), _f = _e.next(); !_f.done; _f = _e.next()) {
557
+ var setTypeMetadata = _f.value;
558
+ var typeOptions = setTypeMetadata.typeOptions;
559
+ var parentTypeArguments = typeOptions.parentTypeArguments === undefined
560
+ ? EMPTY_ARRAY
561
+ : typeOptions.parentTypeArguments;
562
+ var parentTypeMetadatas = this.resolveTypeMetadatas(parentTypeArguments);
563
+ for (var i = 0; i < parentTypeMetadatas.length; i++) {
564
+ if (parentTypeMetadatas[i] === typeMetadata) {
565
+ this.resolveChildTypeMetadataSet(setTypeMetadata, childTypeMetadataSet);
566
+ setTypeMetadata.unresolveTypeState();
567
+ break;
568
+ }
569
+ }
570
+ }
571
+ }
572
+ catch (e_5_1) { e_5 = { error: e_5_1 }; }
573
+ finally {
574
+ try {
575
+ if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
576
+ }
577
+ finally { if (e_5) throw e_5.error; }
578
+ }
579
+ return childTypeMetadataSet;
580
+ };
581
+ TypeMetadata.prototype.resolvePropertyMetadataMap = function (parentTypeMetadatas) {
582
+ var e_6, _a, e_7, _b;
583
+ var propertyMetadataMap = new Map();
584
+ for (var i = parentTypeMetadatas.length - 1; i >= 0; i--) {
585
+ try {
586
+ for (var _c = (e_6 = void 0, __values(parentTypeMetadatas[i].currentPropertyMetadataMap)), _d = _c.next(); !_d.done; _d = _c.next()) {
587
+ var _e = __read(_d.value, 2), propertyName = _e[0], propertyMetadata = _e[1];
588
+ propertyMetadataMap.set(propertyName, propertyMetadata);
589
+ }
590
+ }
591
+ catch (e_6_1) { e_6 = { error: e_6_1 }; }
592
+ finally {
593
+ try {
594
+ if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
595
+ }
596
+ finally { if (e_6) throw e_6.error; }
597
+ }
598
+ }
599
+ try {
600
+ for (var _f = __values(this.currentPropertyMetadataMap.values()), _g = _f.next(); !_g.done; _g = _f.next()) {
601
+ var propertyMetadata = _g.value;
602
+ propertyMetadata.unresolvePropertyState();
603
+ }
604
+ }
605
+ catch (e_7_1) { e_7 = { error: e_7_1 }; }
606
+ finally {
607
+ try {
608
+ if (_g && !_g.done && (_b = _f.return)) _b.call(_f);
609
+ }
610
+ finally { if (e_7) throw e_7.error; }
611
+ }
612
+ return propertyMetadataMap;
613
+ };
614
+ TypeMetadata.prototype.extendParentTypeMetadata = function () {
615
+ var parentTypeMetadata = this.parentTypeMetadata;
616
+ if (parentTypeMetadata !== undefined) {
617
+ parentTypeMetadata.currentChildTypeMetadataMap.set(this.typeFn, this);
337
618
  }
338
619
  return this;
339
620
  };
@@ -344,8 +625,8 @@ var TypeMetadata = (function (_super) {
344
625
  }
345
626
  var injectTypeFns = ((_a = getOwnReflectMetadata('design:paramtypes', this.typeFn)) !== null && _a !== void 0 ? _a : new Array());
346
627
  for (var injectIndex = 0; injectIndex < injectTypeFns.length; injectIndex++) {
347
- if (!this.injectMetadataMap.has(injectIndex)) {
348
- this.configureInjectMetadata(injectIndex, { typeFn: injectTypeFns[injectIndex] });
628
+ if (!this.currentInjectMetadataMap.has(injectIndex)) {
629
+ this.configureInjectMetadata(injectIndex, { typeArgument: injectTypeFns[injectIndex] });
349
630
  }
350
631
  }
351
632
  return this;
@@ -353,311 +634,354 @@ var TypeMetadata = (function (_super) {
353
634
  TypeMetadata.prototype.hasAlias = function (alias) {
354
635
  this.releaseAlias();
355
636
  this.typeOptions.alias = alias;
356
- if (!isNil(alias)) {
357
- this.typeFnMap.set(alias, this.typeFn);
637
+ if (alias !== undefined) {
638
+ this.currentTypeFnMap.set(alias, this.typeFn);
358
639
  }
640
+ this.currentTypeState = new UnresolvedTypeState(this);
359
641
  return this;
360
642
  };
361
643
  TypeMetadata.prototype.releaseAlias = function () {
362
- var alias = this.alias;
363
- if (!isNil(alias) && this.typeFnMap.has(alias)) {
364
- this.typeFnMap.delete(alias);
644
+ var alias = this.typeOptions.alias;
645
+ if (alias !== undefined && this.currentTypeFnMap.has(alias)) {
646
+ this.currentTypeFnMap.delete(alias);
647
+ }
648
+ return this;
649
+ };
650
+ TypeMetadata.prototype.hasCustomValueMap = function (customValueMap) {
651
+ var e_8, _a;
652
+ var currentCustomValueMap = this.typeOptions.customValueMap;
653
+ if (currentCustomValueMap === undefined) {
654
+ currentCustomValueMap = new Map();
655
+ this.typeOptions.customValueMap = currentCustomValueMap;
656
+ }
657
+ if (customValueMap !== undefined) {
658
+ if (currentCustomValueMap !== customValueMap) {
659
+ currentCustomValueMap.clear();
660
+ }
661
+ try {
662
+ for (var customValueMap_1 = __values(customValueMap), customValueMap_1_1 = customValueMap_1.next(); !customValueMap_1_1.done; customValueMap_1_1 = customValueMap_1.next()) {
663
+ var _b = __read(customValueMap_1_1.value, 2), customKey = _b[0], customValue = _b[1];
664
+ currentCustomValueMap.set(customKey, customValue);
665
+ }
666
+ }
667
+ catch (e_8_1) { e_8 = { error: e_8_1 }; }
668
+ finally {
669
+ try {
670
+ if (customValueMap_1_1 && !customValueMap_1_1.done && (_a = customValueMap_1.return)) _a.call(customValueMap_1);
671
+ }
672
+ finally { if (e_8) throw e_8.error; }
673
+ }
365
674
  }
675
+ this.currentTypeState = new UnresolvedTypeState(this);
366
676
  return this;
367
677
  };
368
- TypeMetadata.prototype.hasCustomOption = function (customKey, customValue) {
369
- this.customContext.set(customKey, customValue);
678
+ TypeMetadata.prototype.hasCustomValue = function (customKey, customValue) {
679
+ var customValueMap = this.typeOptions.customValueMap;
680
+ if (customValueMap === undefined) {
681
+ customValueMap = new Map();
682
+ this.typeOptions.customValueMap = customValueMap;
683
+ }
684
+ customValueMap.set(customKey, customValue);
685
+ this.currentTypeState = new UnresolvedTypeState(this);
370
686
  return this;
371
687
  };
372
- TypeMetadata.prototype.extractCustomOption = function (customKey) {
373
- return this.customContext.get(customKey);
688
+ TypeMetadata.prototype.extractCustomValue = function (customKey) {
689
+ var customValue = this.typeState.customValueMap.get(customKey);
690
+ if (customValue === undefined && customKey.customValueResolver !== undefined) {
691
+ customValue = customKey.customValueResolver();
692
+ }
693
+ return customValue;
374
694
  };
375
695
  TypeMetadata.prototype.hasCustomOptions = function (customOptions) {
376
- if (!isNil(customOptions)) {
377
- this.customContext.configure(customOptions);
696
+ var customValueMap = this.typeOptions.customValueMap;
697
+ if (customValueMap === undefined) {
698
+ customValueMap = new Map();
699
+ this.typeOptions.customValueMap = customValueMap;
378
700
  }
701
+ for (var i = 0; i < customOptions.length; i++) {
702
+ customValueMap.set(customOptions[i][0], customOptions[i][1]);
703
+ }
704
+ this.currentTypeState = new UnresolvedTypeState(this);
379
705
  return this;
380
706
  };
381
707
  TypeMetadata.prototype.hasDefaultValue = function (defaultValue) {
382
708
  this.typeOptions.defaultValue = defaultValue;
709
+ this.currentTypeState = new UnresolvedTypeState(this);
383
710
  return this;
384
711
  };
385
712
  TypeMetadata.prototype.hasSerializedDefaultValue = function (serializedDefaultValue) {
386
713
  this.typeOptions.serializedDefaultValue = serializedDefaultValue;
714
+ this.currentTypeState = new UnresolvedTypeState(this);
387
715
  return this;
388
716
  };
389
717
  TypeMetadata.prototype.hasDeserializedDefaultValue = function (deserializedDefaultValue) {
390
718
  this.typeOptions.deserializedDefaultValue = deserializedDefaultValue;
719
+ this.currentTypeState = new UnresolvedTypeState(this);
391
720
  return this;
392
721
  };
393
722
  TypeMetadata.prototype.hasDiscriminator = function (discriminator) {
394
723
  this.typeOptions.discriminator = discriminator;
724
+ this.currentTypeState = new UnresolvedTypeState(this);
395
725
  return this;
396
726
  };
397
727
  TypeMetadata.prototype.hasDiscriminant = function (discriminant) {
398
728
  this.typeOptions.discriminant = discriminant;
399
- if (!isNil(discriminant)) {
400
- this.provideDiscriminant(this.typeFn, discriminant);
401
- }
402
- return this;
403
- };
404
- TypeMetadata.prototype.provideDiscriminant = function (typeFn, discriminant) {
405
- var e_3, _a;
406
- this.discriminantMap.set(typeFn, discriminant);
407
- if (!isEmpty(this.parentTypeMetadatas)) {
408
- try {
409
- for (var _b = __values(this.parentTypeMetadatas), _c = _b.next(); !_c.done; _c = _b.next()) {
410
- var parentTypeMetadata = _c.value;
411
- parentTypeMetadata.provideDiscriminant(typeFn, discriminant);
412
- }
413
- }
414
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
415
- finally {
416
- try {
417
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
418
- }
419
- finally { if (e_3) throw e_3.error; }
420
- }
421
- }
729
+ this.currentTypeState = new UnresolvedTypeState(this);
422
730
  return this;
423
731
  };
424
732
  TypeMetadata.prototype.hasFactory = function (factory) {
425
733
  this.typeOptions.factory = factory;
734
+ this.currentTypeState = new UnresolvedTypeState(this);
426
735
  return this;
427
736
  };
428
737
  TypeMetadata.prototype.isInjectable = function (injectable) {
429
738
  if (injectable === void 0) { injectable = true; }
430
739
  this.typeOptions.injectable = injectable;
740
+ this.currentTypeState = new UnresolvedTypeState(this);
431
741
  return this;
432
742
  };
433
743
  TypeMetadata.prototype.hasInjector = function (injector) {
434
744
  this.typeOptions.injector = injector;
745
+ this.currentTypeState = new UnresolvedTypeState(this);
435
746
  return this;
436
747
  };
437
- TypeMetadata.prototype.hasLog = function (log) {
438
- this.typeOptions.log = log;
748
+ TypeMetadata.prototype.hasLogger = function (logger) {
749
+ this.typeOptions.logger = logger;
750
+ this.currentTypeState = new UnresolvedTypeState(this);
439
751
  return this;
440
752
  };
441
753
  TypeMetadata.prototype.hasNamingConvention = function (namingConvention) {
442
754
  this.typeOptions.namingConvention = namingConvention;
755
+ this.currentTypeState = new UnresolvedTypeState(this);
443
756
  return this;
444
757
  };
445
758
  TypeMetadata.prototype.shouldPreserveDiscriminator = function (preserveDiscriminator) {
446
759
  if (preserveDiscriminator === void 0) { preserveDiscriminator = true; }
447
760
  this.typeOptions.preserveDiscriminator = preserveDiscriminator;
761
+ this.currentTypeState = new UnresolvedTypeState(this);
448
762
  return this;
449
763
  };
450
764
  TypeMetadata.prototype.hasReferenceHandler = function (referenceHandler) {
451
765
  this.typeOptions.referenceHandler = referenceHandler;
766
+ this.currentTypeState = new UnresolvedTypeState(this);
452
767
  return this;
453
768
  };
454
769
  TypeMetadata.prototype.hasSerializer = function (serializer) {
455
770
  this.typeOptions.serializer = serializer;
771
+ this.currentTypeState = new UnresolvedTypeState(this);
456
772
  return this;
457
773
  };
458
774
  TypeMetadata.prototype.shouldPreserveNull = function (preserveNull) {
459
775
  if (preserveNull === void 0) { preserveNull = true; }
460
776
  this.typeOptions.preserveNull = preserveNull;
777
+ this.currentTypeState = new UnresolvedTypeState(this);
461
778
  return this;
462
779
  };
463
780
  TypeMetadata.prototype.shouldUseDefaultValue = function (useDefaultValue) {
464
781
  if (useDefaultValue === void 0) { useDefaultValue = true; }
465
782
  this.typeOptions.useDefaultValue = useDefaultValue;
783
+ this.currentTypeState = new UnresolvedTypeState(this);
466
784
  return this;
467
785
  };
468
786
  TypeMetadata.prototype.shouldUseImplicitConversion = function (useImplicitConversion) {
469
787
  if (useImplicitConversion === void 0) { useImplicitConversion = true; }
470
788
  this.typeOptions.useImplicitConversion = useImplicitConversion;
789
+ this.currentTypeState = new UnresolvedTypeState(this);
471
790
  return this;
472
791
  };
473
792
  TypeMetadata.prototype.hasPropertySorter = function (propertySorter) {
474
793
  this.typeOptions.propertySorter = propertySorter;
794
+ this.currentTypeState = new UnresolvedTypeState(this);
475
795
  return this;
476
796
  };
477
797
  TypeMetadata.prototype.hasInjectSorter = function (injectSorter) {
478
798
  this.typeOptions.injectSorter = injectSorter;
799
+ this.currentTypeState = new UnresolvedTypeState(this);
800
+ return this;
801
+ };
802
+ TypeMetadata.prototype.hasParentTypeArguments = function (parentTypeArguments) {
803
+ this.typeOptions.parentTypeArguments = parentTypeArguments;
804
+ this.currentTypeState = new UnresolvedTypeState(this);
479
805
  return this;
480
806
  };
481
807
  TypeMetadata.prototype.configurePropertyMetadata = function (propertyName, propertyOptions) {
482
- var propertyMetadata = this.propertyMetadataMap.get(propertyName);
483
- if (isNil(propertyMetadata)) {
484
- propertyMetadata = new PropertyMetadata(this, propertyName, propertyOptions !== null && propertyOptions !== void 0 ? propertyOptions : {});
485
- this.propertyMetadataMap.set(propertyName, propertyMetadata);
486
- this.propertyOptionsMap.set(propertyName, propertyMetadata.propertyOptions);
808
+ var propertyOptionsMap = this.typeOptions.propertyOptionsMap;
809
+ if (propertyOptionsMap === undefined) {
810
+ propertyOptionsMap = new Map();
811
+ this.typeOptions.propertyOptionsMap = propertyOptionsMap;
812
+ }
813
+ var propertyMetadata = this.currentPropertyMetadataMap.get(propertyName);
814
+ if (propertyMetadata === undefined) {
815
+ propertyOptions = propertyOptions !== null && propertyOptions !== void 0 ? propertyOptions : {};
816
+ propertyMetadata = new PropertyMetadata(this.typeManager, this.currentTypeFnMap, this, propertyName, propertyOptions);
817
+ this.currentPropertyMetadataMap.set(propertyName, propertyMetadata);
818
+ propertyOptionsMap.set(propertyName, propertyOptions);
819
+ this.currentTypeState = new UnresolvedTypeState(this);
487
820
  return propertyMetadata;
488
821
  }
489
- if (!isNil(propertyOptions)) {
822
+ if (propertyOptions !== undefined) {
490
823
  propertyMetadata.configure(propertyOptions);
491
824
  }
825
+ this.currentTypeState = new UnresolvedTypeState(this);
492
826
  return propertyMetadata;
493
827
  };
494
828
  TypeMetadata.prototype.configureInjectMetadata = function (injectIndex, injectOptions) {
495
- var injectMetadata = this.injectMetadataMap.get(injectIndex);
496
- if (isNil(injectMetadata)) {
497
- injectMetadata = new InjectMetadata(this, injectIndex, injectOptions !== null && injectOptions !== void 0 ? injectOptions : {});
498
- this.injectMetadataMap.set(injectIndex, injectMetadata);
499
- this.injectOptionsMap.set(injectIndex, injectMetadata.injectOptions);
829
+ var injectOptionsMap = this.typeOptions.injectOptionsMap;
830
+ if (injectOptionsMap === undefined) {
831
+ injectOptionsMap = new Map();
832
+ this.typeOptions.injectOptionsMap = injectOptionsMap;
833
+ }
834
+ var injectMetadata = this.currentInjectMetadataMap.get(injectIndex);
835
+ if (injectMetadata === undefined) {
836
+ injectOptions = injectOptions !== null && injectOptions !== void 0 ? injectOptions : {};
837
+ injectMetadata = new InjectMetadata(this.typeManager, this.currentTypeFnMap, this, injectIndex, injectOptions);
838
+ this.currentInjectMetadataMap.set(injectIndex, injectMetadata);
839
+ injectOptionsMap.set(injectIndex, injectOptions);
840
+ this.currentTypeState = new UnresolvedTypeState(this);
500
841
  return injectMetadata;
501
842
  }
502
- if (!isNil(injectOptions)) {
843
+ if (injectOptions !== undefined) {
503
844
  injectMetadata.configure(injectOptions);
504
845
  }
846
+ this.currentTypeState = new UnresolvedTypeState(this);
505
847
  return injectMetadata;
506
848
  };
507
849
  TypeMetadata.prototype.hasPropertyMetadataMap = function (propertyOptionsMap) {
508
- var e_4, _a;
850
+ var e_9, _a;
851
+ var currentPropertyOptionsMap = this.clearPropertyOptionsMap(propertyOptionsMap);
509
852
  try {
510
853
  for (var propertyOptionsMap_1 = __values(propertyOptionsMap), propertyOptionsMap_1_1 = propertyOptionsMap_1.next(); !propertyOptionsMap_1_1.done; propertyOptionsMap_1_1 = propertyOptionsMap_1.next()) {
511
854
  var _b = __read(propertyOptionsMap_1_1.value, 2), propertyName = _b[0], propertyOptions = _b[1];
512
- this.configurePropertyMetadata(propertyName, propertyOptions);
855
+ var propertyMetadata = new PropertyMetadata(this.typeManager, this.currentTypeFnMap, this, propertyName, propertyOptions);
856
+ this.currentPropertyMetadataMap.set(propertyName, propertyMetadata);
857
+ currentPropertyOptionsMap.set(propertyName, propertyOptions);
513
858
  }
514
859
  }
515
- catch (e_4_1) { e_4 = { error: e_4_1 }; }
860
+ catch (e_9_1) { e_9 = { error: e_9_1 }; }
516
861
  finally {
517
862
  try {
518
863
  if (propertyOptionsMap_1_1 && !propertyOptionsMap_1_1.done && (_a = propertyOptionsMap_1.return)) _a.call(propertyOptionsMap_1);
519
864
  }
520
- finally { if (e_4) throw e_4.error; }
865
+ finally { if (e_9) throw e_9.error; }
521
866
  }
867
+ this.currentTypeState = new UnresolvedTypeState(this);
522
868
  return this;
523
869
  };
870
+ TypeMetadata.prototype.clearPropertyOptionsMap = function (propertyOptionsMap) {
871
+ var currentPropertyOptionsMap = this.typeOptions.propertyOptionsMap;
872
+ if (currentPropertyOptionsMap === undefined) {
873
+ currentPropertyOptionsMap = new Map();
874
+ this.typeOptions.propertyOptionsMap = currentPropertyOptionsMap;
875
+ }
876
+ if (currentPropertyOptionsMap !== propertyOptionsMap) {
877
+ currentPropertyOptionsMap.clear();
878
+ this.currentPropertyMetadataMap.clear();
879
+ }
880
+ return currentPropertyOptionsMap;
881
+ };
524
882
  TypeMetadata.prototype.hasInjectMetadataMap = function (injectOptionsMap) {
525
- var e_5, _a;
883
+ var e_10, _a;
884
+ var currentInjectOptionsMap = this.clearInjectOptionsMap(injectOptionsMap);
526
885
  try {
527
886
  for (var injectOptionsMap_1 = __values(injectOptionsMap), injectOptionsMap_1_1 = injectOptionsMap_1.next(); !injectOptionsMap_1_1.done; injectOptionsMap_1_1 = injectOptionsMap_1.next()) {
528
887
  var _b = __read(injectOptionsMap_1_1.value, 2), injectIndex = _b[0], injectOptions = _b[1];
529
- this.configureInjectMetadata(injectIndex, injectOptions);
888
+ var injectMetadata = new InjectMetadata(this.typeManager, this.currentTypeFnMap, this, injectIndex, injectOptions);
889
+ this.currentInjectMetadataMap.set(injectIndex, injectMetadata);
890
+ currentInjectOptionsMap.set(injectIndex, injectOptions);
530
891
  }
531
892
  }
532
- catch (e_5_1) { e_5 = { error: e_5_1 }; }
893
+ catch (e_10_1) { e_10 = { error: e_10_1 }; }
533
894
  finally {
534
895
  try {
535
896
  if (injectOptionsMap_1_1 && !injectOptionsMap_1_1.done && (_a = injectOptionsMap_1.return)) _a.call(injectOptionsMap_1);
536
897
  }
537
- finally { if (e_5) throw e_5.error; }
898
+ finally { if (e_10) throw e_10.error; }
538
899
  }
900
+ this.currentTypeState = new UnresolvedTypeState(this);
539
901
  return this;
540
902
  };
541
- TypeMetadata.prototype.configureTypeExtensionMetadata = function (typeExtensionMetadataCtor, typeExtensionOptions) {
542
- var typeExtensionMetadataCtorSet = this.extractCustomOption(typeExtensionMetadataCtorSetKey);
543
- if (!typeExtensionMetadataCtorSet.has(typeExtensionMetadataCtor)) {
544
- typeExtensionMetadataCtorSet.add(typeExtensionMetadataCtor);
903
+ TypeMetadata.prototype.clearInjectOptionsMap = function (injectOptionsMap) {
904
+ var currentInjectOptionsMap = this.typeOptions.injectOptionsMap;
905
+ if (currentInjectOptionsMap === undefined) {
906
+ currentInjectOptionsMap = new Map();
907
+ this.typeOptions.injectOptionsMap = currentInjectOptionsMap;
545
908
  }
546
- var initialTypeExtensionOptions = typeExtensionOptions !== null && typeExtensionOptions !== void 0 ? typeExtensionOptions : {};
547
- var typeExtensionMetadata = new typeExtensionMetadataCtor(this, initialTypeExtensionOptions);
548
- return typeExtensionMetadata;
549
- };
550
- TypeMetadata.prototype.extractTypeExtensionMetadata = function (typeExtensionMetadataCtor) {
551
- var typeExtensionMetadataCtorSet = this.extractCustomOption(typeExtensionMetadataCtorSetKey);
552
- if (!typeExtensionMetadataCtorSet.has(typeExtensionMetadataCtor)) {
553
- return undefined;
909
+ if (currentInjectOptionsMap !== injectOptionsMap) {
910
+ currentInjectOptionsMap.clear();
911
+ this.currentInjectMetadataMap.clear();
554
912
  }
555
- var initialTypeExtensionOptions = {};
556
- var typeExtensionMetadata = new typeExtensionMetadataCtor(this, initialTypeExtensionOptions);
557
- return typeExtensionMetadata;
558
- };
559
- TypeMetadata.prototype.hasParentTypeFns = function (parentTypeFns) {
560
- var e_6, _a;
561
- if (isNil(this.typeOptions.parentTypeFns)) {
562
- this.typeOptions.parentTypeFns = new Array();
563
- }
564
- var _loop_1 = function (parentTypeFn) {
565
- var parentTypeMetadata = this_1.typeManager.extractTypeMetadata(parentTypeFn);
566
- if (!this_1.parentTypeMetadatas.some(function (ptm) { return ptm === parentTypeMetadata; })) {
567
- this_1.parentTypeMetadatas.push(parentTypeMetadata);
568
- }
569
- if (!this_1.typeOptions.parentTypeFns.some(function (ptf) { return ptf === parentTypeFn; })) {
570
- this_1.typeOptions.parentTypeFns.push(parentTypeFn);
571
- }
572
- };
573
- var this_1 = this;
574
- try {
575
- for (var parentTypeFns_1 = __values(parentTypeFns), parentTypeFns_1_1 = parentTypeFns_1.next(); !parentTypeFns_1_1.done; parentTypeFns_1_1 = parentTypeFns_1.next()) {
576
- var parentTypeFn = parentTypeFns_1_1.value;
577
- _loop_1(parentTypeFn);
578
- }
579
- }
580
- catch (e_6_1) { e_6 = { error: e_6_1 }; }
581
- finally {
582
- try {
583
- if (parentTypeFns_1_1 && !parentTypeFns_1_1.done && (_a = parentTypeFns_1.return)) _a.call(parentTypeFns_1);
584
- }
585
- finally { if (e_6) throw e_6.error; }
586
- }
587
- this.deriveParentTypeMetadataProperties();
588
- this.hasDiscriminant(this.discriminant);
589
- return this;
913
+ return currentInjectOptionsMap;
590
914
  };
591
915
  TypeMetadata.prototype.configure = function (typeOptions) {
592
- if (!isUndefined(typeOptions.parentTypeFns)) {
593
- this.hasParentTypeFns(typeOptions.parentTypeFns);
594
- }
595
- if (!isUndefined(typeOptions.alias)) {
916
+ if (typeOptions.alias !== undefined) {
596
917
  this.hasAlias(typeOptions.alias);
597
918
  }
598
- if (!isUndefined(typeOptions.customOptions)) {
599
- this.hasCustomOptions(typeOptions.customOptions);
919
+ if (typeOptions.customValueMap !== undefined) {
920
+ this.hasCustomValueMap(typeOptions.customValueMap);
600
921
  }
601
- if (!isUndefined(typeOptions.defaultValue)) {
922
+ if (typeOptions.defaultValue !== undefined) {
602
923
  this.hasDefaultValue(typeOptions.defaultValue);
603
924
  }
604
- if (!isUndefined(typeOptions.serializedDefaultValue)) {
925
+ if (typeOptions.serializedDefaultValue !== undefined) {
605
926
  this.hasSerializedDefaultValue(typeOptions.serializedDefaultValue);
606
927
  }
607
- if (!isUndefined(typeOptions.deserializedDefaultValue)) {
928
+ if (typeOptions.deserializedDefaultValue !== undefined) {
608
929
  this.hasDeserializedDefaultValue(typeOptions.deserializedDefaultValue);
609
930
  }
610
- if (!isUndefined(typeOptions.discriminator)) {
931
+ if (typeOptions.discriminator !== undefined) {
611
932
  this.hasDiscriminator(typeOptions.discriminator);
612
933
  }
613
- if (!isUndefined(typeOptions.discriminant)) {
934
+ if (typeOptions.discriminant !== undefined) {
614
935
  this.hasDiscriminant(typeOptions.discriminant);
615
936
  }
616
- if (!isUndefined(typeOptions.factory)) {
937
+ if (typeOptions.factory !== undefined) {
617
938
  this.hasFactory(typeOptions.factory);
618
939
  }
619
- if (!isUndefined(typeOptions.injectable)) {
940
+ if (typeOptions.injectable !== undefined) {
620
941
  this.isInjectable(typeOptions.injectable);
621
942
  }
622
- if (!isUndefined(typeOptions.injector)) {
943
+ if (typeOptions.injector !== undefined) {
623
944
  this.hasInjector(typeOptions.injector);
624
945
  }
625
- if (!isUndefined(typeOptions.log)) {
626
- this.hasLog(typeOptions.log);
946
+ if (typeOptions.logger !== undefined) {
947
+ this.hasLogger(typeOptions.logger);
627
948
  }
628
- if (!isUndefined(typeOptions.namingConvention)) {
949
+ if (typeOptions.namingConvention !== undefined) {
629
950
  this.hasNamingConvention(typeOptions.namingConvention);
630
951
  }
631
- if (!isUndefined(typeOptions.preserveDiscriminator)) {
952
+ if (typeOptions.preserveDiscriminator !== undefined) {
632
953
  this.shouldPreserveDiscriminator(typeOptions.preserveDiscriminator);
633
954
  }
634
- if (!isUndefined(typeOptions.referenceHandler)) {
955
+ if (typeOptions.referenceHandler !== undefined) {
635
956
  this.hasReferenceHandler(typeOptions.referenceHandler);
636
957
  }
637
- if (!isUndefined(typeOptions.serializer)) {
958
+ if (typeOptions.serializer !== undefined) {
638
959
  this.hasSerializer(typeOptions.serializer);
639
960
  }
640
- if (!isUndefined(typeOptions.preserveNull)) {
961
+ if (typeOptions.preserveNull !== undefined) {
641
962
  this.shouldPreserveNull(typeOptions.preserveNull);
642
963
  }
643
- if (!isUndefined(typeOptions.useDefaultValue)) {
964
+ if (typeOptions.useDefaultValue !== undefined) {
644
965
  this.shouldUseDefaultValue(typeOptions.useDefaultValue);
645
966
  }
646
- if (!isUndefined(typeOptions.useImplicitConversion)) {
967
+ if (typeOptions.useImplicitConversion !== undefined) {
647
968
  this.shouldUseImplicitConversion(typeOptions.useImplicitConversion);
648
969
  }
649
- if (!isUndefined(typeOptions.propertyOptionsMap)) {
970
+ if (typeOptions.propertyOptionsMap !== undefined) {
650
971
  this.hasPropertyMetadataMap(typeOptions.propertyOptionsMap);
651
972
  }
652
- if (!isUndefined(typeOptions.injectOptionsMap)) {
973
+ if (typeOptions.injectOptionsMap !== undefined) {
653
974
  this.hasInjectMetadataMap(typeOptions.injectOptionsMap);
654
975
  }
655
- if (!isUndefined(typeOptions.propertySorter)) {
976
+ if (typeOptions.propertySorter !== undefined) {
656
977
  this.hasPropertySorter(typeOptions.propertySorter);
657
978
  }
658
- if (!isUndefined(typeOptions.injectSorter)) {
979
+ if (typeOptions.injectSorter !== undefined) {
659
980
  this.hasInjectSorter(typeOptions.injectSorter);
660
981
  }
982
+ if (typeOptions.parentTypeArguments !== undefined) {
983
+ this.hasParentTypeArguments(typeOptions.parentTypeArguments);
984
+ }
661
985
  return this;
662
986
  };
663
987
  return TypeMetadata;