@angular/core 7.2.0-beta.0 → 7.2.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 (454) hide show
  1. package/bundles/core-testing.umd.js +194 -128
  2. package/bundles/core-testing.umd.js.map +1 -1
  3. package/bundles/core-testing.umd.min.js +10 -10
  4. package/bundles/core-testing.umd.min.js.map +1 -1
  5. package/bundles/core.umd.js +5582 -4512
  6. package/bundles/core.umd.js.map +1 -1
  7. package/bundles/core.umd.min.js +122 -129
  8. package/bundles/core.umd.min.js.map +1 -1
  9. package/core.d.ts +12 -12
  10. package/core.metadata.json +1 -1
  11. package/esm2015/core.externs.js +45 -35
  12. package/esm2015/core.js +12 -13
  13. package/esm2015/index.js +3 -4
  14. package/esm2015/public_api.js +3 -5
  15. package/esm2015/src/application_init.js +22 -10
  16. package/esm2015/src/application_module.js +6 -5
  17. package/esm2015/src/application_ref.js +94 -37
  18. package/esm2015/src/application_tokens.js +21 -16
  19. package/esm2015/src/change_detection/change_detection.js +8 -7
  20. package/esm2015/src/change_detection/change_detection_util.js +2 -4
  21. package/esm2015/src/change_detection/change_detector_ref.js +2 -3
  22. package/esm2015/src/change_detection/constants.js +30 -32
  23. package/esm2015/src/change_detection/differs/default_iterable_differ.js +108 -29
  24. package/esm2015/src/change_detection/differs/default_keyvalue_differ.js +53 -16
  25. package/esm2015/src/change_detection/differs/iterable_differs.js +100 -90
  26. package/esm2015/src/change_detection/differs/keyvalue_differs.js +85 -73
  27. package/esm2015/src/change_detection/pipe_transform.js +10 -5
  28. package/esm2015/src/change_detection.js +7 -3
  29. package/esm2015/src/codegen_private_exports.js +2 -3
  30. package/esm2015/src/console.js +3 -3
  31. package/esm2015/src/core.js +3 -4
  32. package/esm2015/src/core_private_export.js +2 -3
  33. package/esm2015/src/core_render3_private_export.js +13 -7
  34. package/esm2015/src/debug/debug_node.js +132 -90
  35. package/esm2015/src/di/defs.js +59 -50
  36. package/esm2015/src/di/forward_ref.js +5 -6
  37. package/esm2015/src/di/injectable.js +11 -11
  38. package/esm2015/src/di/injection_token.js +10 -6
  39. package/esm2015/src/di/injector.js +53 -43
  40. package/esm2015/src/di/injector_compatibility.js +13 -12
  41. package/esm2015/src/di/metadata.js +22 -13
  42. package/esm2015/src/di/provider.js +137 -120
  43. package/esm2015/src/di/r3_injector.js +127 -57
  44. package/esm2015/src/di/reflective_errors.js +19 -13
  45. package/esm2015/src/di/reflective_injector.js +20 -16
  46. package/esm2015/src/di/reflective_key.js +7 -5
  47. package/esm2015/src/di/reflective_provider.js +21 -20
  48. package/esm2015/src/di/scope.js +5 -5
  49. package/esm2015/src/di/util.js +13 -14
  50. package/esm2015/src/di.js +2 -3
  51. package/esm2015/src/error_handler.js +5 -4
  52. package/esm2015/src/errors.js +7 -8
  53. package/esm2015/src/event_emitter.js +3 -3
  54. package/esm2015/src/i18n/tokens.js +12 -10
  55. package/esm2015/src/is_dev_mode.js +2 -3
  56. package/esm2015/src/ivy_switch.js +2 -3
  57. package/esm2015/src/linker/compiler.js +9 -12
  58. package/esm2015/src/linker/component_factory.js +2 -3
  59. package/esm2015/src/linker/component_factory_resolver.js +24 -10
  60. package/esm2015/src/linker/element_ref.js +5 -3
  61. package/esm2015/src/linker/ng_module_factory.js +6 -5
  62. package/esm2015/src/linker/ng_module_factory_loader.js +63 -16
  63. package/esm2015/src/linker/query_list.js +16 -14
  64. package/esm2015/src/linker/system_js_ng_module_factory_loader.js +12 -5
  65. package/esm2015/src/linker/template_ref.js +2 -3
  66. package/esm2015/src/linker/view_container_ref.js +2 -3
  67. package/esm2015/src/linker/view_ref.js +13 -7
  68. package/esm2015/src/linker.js +3 -3
  69. package/esm2015/src/metadata/di.js +22 -15
  70. package/esm2015/src/metadata/directives.js +33 -19
  71. package/esm2015/src/metadata/lifecycle_hooks.js +81 -66
  72. package/esm2015/src/metadata/ng_module.js +82 -68
  73. package/esm2015/src/metadata/resource_loading.js +4 -3
  74. package/esm2015/src/metadata/view.js +25 -26
  75. package/esm2015/src/metadata.js +6 -3
  76. package/esm2015/src/platform_core_providers.js +5 -5
  77. package/esm2015/src/profile/profile.js +17 -13
  78. package/esm2015/src/profile/wtf_impl.js +36 -16
  79. package/esm2015/src/r3_symbols.js +18 -5
  80. package/esm2015/src/reflection/platform_reflection_capabilities.js +81 -40
  81. package/esm2015/src/reflection/reflection.js +5 -5
  82. package/esm2015/src/reflection/reflection_capabilities.js +38 -27
  83. package/esm2015/src/reflection/reflector.js +2 -3
  84. package/esm2015/src/reflection/types.js +2 -12
  85. package/esm2015/src/render/api.js +67 -47
  86. package/esm2015/src/render.js +3 -3
  87. package/esm2015/src/render3/assert.js +38 -3
  88. package/esm2015/src/render3/bindings.js +111 -0
  89. package/esm2015/src/render3/component.js +88 -77
  90. package/esm2015/src/render3/component_ref.js +86 -56
  91. package/esm2015/src/render3/context_discovery.js +94 -92
  92. package/esm2015/src/render3/definition.js +58 -51
  93. package/esm2015/src/render3/di.js +206 -166
  94. package/esm2015/src/render3/di_setup.js +51 -31
  95. package/esm2015/src/render3/discovery_utils.js +225 -39
  96. package/esm2015/src/render3/empty.js +28 -0
  97. package/esm2015/src/render3/errors.js +11 -15
  98. package/esm2015/src/render3/features/inherit_definition_feature.js +13 -10
  99. package/esm2015/src/render3/features/ng_onchanges_feature.js +15 -12
  100. package/esm2015/src/render3/features/providers_feature.js +2 -3
  101. package/esm2015/src/render3/fields.js +5 -5
  102. package/esm2015/src/render3/global_utils.js +22 -7
  103. package/esm2015/src/render3/global_utils_api.js +13 -7
  104. package/esm2015/src/render3/hooks.js +21 -26
  105. package/esm2015/src/render3/i18n.js +134 -115
  106. package/esm2015/src/render3/index.js +15 -7
  107. package/esm2015/src/render3/instructions.js +938 -813
  108. package/esm2015/src/render3/interfaces/container.js +37 -6
  109. package/esm2015/src/render3/interfaces/context.js +39 -37
  110. package/esm2015/src/render3/interfaces/definition.js +225 -265
  111. package/esm2015/src/render3/interfaces/i18n.js +179 -151
  112. package/esm2015/src/render3/interfaces/injector.js +95 -13
  113. package/esm2015/src/render3/interfaces/node.js +413 -382
  114. package/esm2015/src/render3/interfaces/player.js +78 -37
  115. package/esm2015/src/render3/interfaces/projection.js +5 -10
  116. package/esm2015/src/render3/interfaces/query.js +66 -60
  117. package/esm2015/src/render3/interfaces/renderer.js +292 -117
  118. package/esm2015/src/render3/interfaces/sanitization.js +2 -6
  119. package/esm2015/src/render3/interfaces/styling.js +322 -111
  120. package/esm2015/src/render3/interfaces/view.js +356 -298
  121. package/esm2015/src/render3/jit/compiler_facade.js +10 -4
  122. package/esm2015/src/render3/jit/compiler_facade_interface.js +195 -152
  123. package/esm2015/src/render3/jit/directive.js +26 -16
  124. package/esm2015/src/render3/jit/environment.js +8 -5
  125. package/esm2015/src/render3/jit/injectable.js +7 -10
  126. package/esm2015/src/render3/jit/module.js +309 -25
  127. package/esm2015/src/render3/jit/pipe.js +2 -3
  128. package/esm2015/src/render3/jit/util.js +2 -3
  129. package/esm2015/src/render3/metadata.js +11 -10
  130. package/esm2015/src/render3/ng_dev_mode.js +5 -6
  131. package/esm2015/src/render3/ng_module_ref.js +48 -22
  132. package/esm2015/src/render3/node_assert.js +2 -3
  133. package/esm2015/src/render3/node_manipulation.js +137 -117
  134. package/esm2015/src/render3/node_selector_matcher.js +46 -19
  135. package/esm2015/src/render3/pipe.js +36 -21
  136. package/esm2015/src/render3/players.js +17 -12
  137. package/esm2015/src/render3/pure_function.js +86 -39
  138. package/esm2015/src/render3/query.js +93 -80
  139. package/esm2015/src/render3/state.js +88 -203
  140. package/esm2015/src/render3/styling/class_and_style_bindings.js +963 -249
  141. package/esm2015/src/render3/styling/core_player_handler.js +6 -4
  142. package/esm2015/src/render3/styling/player_factory.js +3 -4
  143. package/esm2015/src/render3/styling/util.js +69 -31
  144. package/esm2015/src/render3/tokens.js +7 -6
  145. package/esm2015/src/render3/util.js +65 -55
  146. package/esm2015/src/render3/view_engine_compatibility.js +36 -59
  147. package/esm2015/src/render3/view_engine_compatibility_prebound.js +2 -3
  148. package/esm2015/src/render3/view_ref.js +58 -44
  149. package/esm2015/src/sanitization/bypass.js +29 -6
  150. package/esm2015/src/sanitization/html_sanitizer.js +48 -16
  151. package/esm2015/src/sanitization/inert_body.js +33 -18
  152. package/esm2015/src/sanitization/sanitization.js +35 -25
  153. package/esm2015/src/sanitization/security.js +3 -4
  154. package/esm2015/src/sanitization/style_sanitizer.js +10 -7
  155. package/esm2015/src/sanitization/url_sanitizer.js +9 -7
  156. package/esm2015/src/testability/testability.js +72 -42
  157. package/esm2015/src/type.js +6 -8
  158. package/esm2015/src/util/decorators.js +19 -14
  159. package/esm2015/src/util/lang.js +2 -3
  160. package/esm2015/src/util/ng_reflect.js +2 -3
  161. package/esm2015/src/util/noop.js +2 -3
  162. package/esm2015/src/util/property.js +3 -4
  163. package/esm2015/src/util.js +12 -4
  164. package/esm2015/src/version.js +6 -6
  165. package/esm2015/src/view/element.js +17 -17
  166. package/esm2015/src/view/entrypoint.js +15 -5
  167. package/esm2015/src/view/errors.js +4 -5
  168. package/esm2015/src/view/index.js +2 -3
  169. package/esm2015/src/view/ng_content.js +3 -4
  170. package/esm2015/src/view/ng_module.js +2 -3
  171. package/esm2015/src/view/provider.js +89 -24
  172. package/esm2015/src/view/pure_expression.js +14 -15
  173. package/esm2015/src/view/query.js +14 -14
  174. package/esm2015/src/view/refs.js +96 -38
  175. package/esm2015/src/view/services.js +64 -37
  176. package/esm2015/src/view/text.js +5 -6
  177. package/esm2015/src/view/types.js +390 -325
  178. package/esm2015/src/view/util.js +29 -24
  179. package/esm2015/src/view/view.js +43 -36
  180. package/esm2015/src/view/view_attach.js +9 -10
  181. package/esm2015/src/zone/ng_zone.js +29 -28
  182. package/esm2015/src/zone.js +3 -3
  183. package/esm2015/testing/index.js +2 -3
  184. package/esm2015/testing/public_api.js +4 -4
  185. package/esm2015/testing/src/async.js +2 -3
  186. package/esm2015/testing/src/async_fallback.js +8 -7
  187. package/esm2015/testing/src/async_test_completer.js +14 -6
  188. package/esm2015/testing/src/before_each.js +10 -4
  189. package/esm2015/testing/src/component_fixture.js +48 -17
  190. package/esm2015/testing/src/fake_async.js +9 -3
  191. package/esm2015/testing/src/fake_async_fallback.js +5 -5
  192. package/esm2015/testing/src/lang_utils.js +3 -4
  193. package/esm2015/testing/src/logger.js +2 -3
  194. package/esm2015/testing/src/metadata_override.js +2 -6
  195. package/esm2015/testing/src/metadata_overrider.js +9 -8
  196. package/esm2015/testing/src/ng_zone_mock.js +2 -3
  197. package/esm2015/testing/src/private_export_testing.js +2 -3
  198. package/esm2015/testing/src/r3_test_bed.js +324 -174
  199. package/esm2015/testing/src/resolvers.js +28 -11
  200. package/esm2015/testing/src/test_bed.js +123 -54
  201. package/esm2015/testing/src/test_bed_common.js +142 -85
  202. package/esm2015/testing/src/test_compiler.js +2 -3
  203. package/esm2015/testing/src/testing.js +3 -3
  204. package/esm2015/testing/src/testing_internal.js +17 -12
  205. package/esm2015/testing/testing.js +1 -2
  206. package/esm5/core.js +12 -13
  207. package/esm5/index.js +1 -2
  208. package/esm5/public_api.js +1 -2
  209. package/esm5/src/application_init.js +1 -2
  210. package/esm5/src/application_module.js +1 -2
  211. package/esm5/src/application_ref.js +1 -2
  212. package/esm5/src/application_tokens.js +1 -2
  213. package/esm5/src/change_detection/change_detection.js +1 -2
  214. package/esm5/src/change_detection/change_detection_util.js +1 -2
  215. package/esm5/src/change_detection/change_detector_ref.js +1 -2
  216. package/esm5/src/change_detection/constants.js +3 -4
  217. package/esm5/src/change_detection/differs/default_iterable_differ.js +1 -2
  218. package/esm5/src/change_detection/differs/default_keyvalue_differ.js +1 -2
  219. package/esm5/src/change_detection/differs/iterable_differs.js +1 -2
  220. package/esm5/src/change_detection/differs/keyvalue_differs.js +1 -2
  221. package/esm5/src/change_detection/pipe_transform.js +1 -2
  222. package/esm5/src/change_detection.js +1 -2
  223. package/esm5/src/codegen_private_exports.js +1 -2
  224. package/esm5/src/console.js +1 -2
  225. package/esm5/src/core.js +1 -2
  226. package/esm5/src/core_private_export.js +1 -2
  227. package/esm5/src/core_render3_private_export.js +7 -5
  228. package/esm5/src/debug/debug_node.js +79 -58
  229. package/esm5/src/di/defs.js +3 -4
  230. package/esm5/src/di/forward_ref.js +1 -2
  231. package/esm5/src/di/injectable.js +1 -2
  232. package/esm5/src/di/injection_token.js +1 -2
  233. package/esm5/src/di/injector.js +1 -2
  234. package/esm5/src/di/injector_compatibility.js +1 -2
  235. package/esm5/src/di/metadata.js +1 -2
  236. package/esm5/src/di/provider.js +1 -2
  237. package/esm5/src/di/r3_injector.js +48 -28
  238. package/esm5/src/di/reflective_errors.js +1 -2
  239. package/esm5/src/di/reflective_injector.js +1 -2
  240. package/esm5/src/di/reflective_key.js +1 -2
  241. package/esm5/src/di/reflective_provider.js +1 -2
  242. package/esm5/src/di/scope.js +1 -2
  243. package/esm5/src/di/util.js +1 -2
  244. package/esm5/src/di.js +1 -2
  245. package/esm5/src/error_handler.js +1 -2
  246. package/esm5/src/errors.js +1 -2
  247. package/esm5/src/event_emitter.js +1 -2
  248. package/esm5/src/i18n/tokens.js +1 -2
  249. package/esm5/src/is_dev_mode.js +1 -2
  250. package/esm5/src/ivy_switch.js +1 -2
  251. package/esm5/src/linker/compiler.js +1 -2
  252. package/esm5/src/linker/component_factory.js +1 -2
  253. package/esm5/src/linker/component_factory_resolver.js +1 -2
  254. package/esm5/src/linker/element_ref.js +1 -2
  255. package/esm5/src/linker/ng_module_factory.js +1 -2
  256. package/esm5/src/linker/ng_module_factory_loader.js +37 -13
  257. package/esm5/src/linker/query_list.js +1 -2
  258. package/esm5/src/linker/system_js_ng_module_factory_loader.js +1 -2
  259. package/esm5/src/linker/template_ref.js +1 -2
  260. package/esm5/src/linker/view_container_ref.js +1 -2
  261. package/esm5/src/linker/view_ref.js +1 -2
  262. package/esm5/src/linker.js +1 -2
  263. package/esm5/src/metadata/di.js +1 -2
  264. package/esm5/src/metadata/directives.js +1 -2
  265. package/esm5/src/metadata/lifecycle_hooks.js +1 -2
  266. package/esm5/src/metadata/ng_module.js +1 -2
  267. package/esm5/src/metadata/resource_loading.js +1 -2
  268. package/esm5/src/metadata/view.js +1 -2
  269. package/esm5/src/metadata.js +1 -2
  270. package/esm5/src/platform_core_providers.js +1 -2
  271. package/esm5/src/profile/profile.js +1 -2
  272. package/esm5/src/profile/wtf_impl.js +1 -2
  273. package/esm5/src/r3_symbols.js +1 -2
  274. package/esm5/src/reflection/platform_reflection_capabilities.js +1 -2
  275. package/esm5/src/reflection/reflection.js +1 -2
  276. package/esm5/src/reflection/reflection_capabilities.js +1 -2
  277. package/esm5/src/reflection/reflector.js +1 -2
  278. package/esm5/src/reflection/types.js +1 -2
  279. package/esm5/src/render/api.js +1 -2
  280. package/esm5/src/render.js +1 -2
  281. package/esm5/src/render3/assert.js +15 -2
  282. package/esm5/src/render3/bindings.js +63 -0
  283. package/esm5/src/render3/component.js +23 -16
  284. package/esm5/src/render3/component_ref.js +43 -36
  285. package/esm5/src/render3/context_discovery.js +68 -77
  286. package/esm5/src/render3/definition.js +30 -24
  287. package/esm5/src/render3/di.js +142 -135
  288. package/esm5/src/render3/di_setup.js +20 -21
  289. package/esm5/src/render3/discovery_utils.js +167 -36
  290. package/esm5/src/render3/empty.js +22 -0
  291. package/esm5/src/render3/errors.js +9 -12
  292. package/esm5/src/render3/features/inherit_definition_feature.js +3 -5
  293. package/esm5/src/render3/features/ng_onchanges_feature.js +11 -10
  294. package/esm5/src/render3/features/providers_feature.js +1 -2
  295. package/esm5/src/render3/fields.js +1 -2
  296. package/esm5/src/render3/global_utils.js +4 -3
  297. package/esm5/src/render3/global_utils_api.js +2 -3
  298. package/esm5/src/render3/hooks.js +14 -16
  299. package/esm5/src/render3/i18n.js +22 -27
  300. package/esm5/src/render3/index.js +5 -6
  301. package/esm5/src/render3/instructions.js +698 -593
  302. package/esm5/src/render3/interfaces/container.js +10 -3
  303. package/esm5/src/render3/interfaces/context.js +1 -2
  304. package/esm5/src/render3/interfaces/definition.js +1 -2
  305. package/esm5/src/render3/interfaces/i18n.js +1 -2
  306. package/esm5/src/render3/interfaces/injector.js +5 -6
  307. package/esm5/src/render3/interfaces/node.js +1 -2
  308. package/esm5/src/render3/interfaces/player.js +1 -2
  309. package/esm5/src/render3/interfaces/projection.js +1 -2
  310. package/esm5/src/render3/interfaces/query.js +1 -2
  311. package/esm5/src/render3/interfaces/renderer.js +1 -2
  312. package/esm5/src/render3/interfaces/sanitization.js +1 -2
  313. package/esm5/src/render3/interfaces/styling.js +1 -2
  314. package/esm5/src/render3/interfaces/view.js +3 -4
  315. package/esm5/src/render3/jit/compiler_facade.js +1 -2
  316. package/esm5/src/render3/jit/compiler_facade_interface.js +1 -2
  317. package/esm5/src/render3/jit/directive.js +19 -10
  318. package/esm5/src/render3/jit/environment.js +4 -2
  319. package/esm5/src/render3/jit/injectable.js +17 -18
  320. package/esm5/src/render3/jit/module.js +207 -13
  321. package/esm5/src/render3/jit/pipe.js +1 -2
  322. package/esm5/src/render3/jit/util.js +1 -2
  323. package/esm5/src/render3/metadata.js +1 -2
  324. package/esm5/src/render3/ng_dev_mode.js +1 -2
  325. package/esm5/src/render3/ng_module_ref.js +29 -11
  326. package/esm5/src/render3/node_assert.js +1 -2
  327. package/esm5/src/render3/node_manipulation.js +54 -50
  328. package/esm5/src/render3/node_selector_matcher.js +28 -9
  329. package/esm5/src/render3/pipe.js +33 -19
  330. package/esm5/src/render3/players.js +7 -9
  331. package/esm5/src/render3/pure_function.js +48 -38
  332. package/esm5/src/render3/query.js +8 -9
  333. package/esm5/src/render3/state.js +50 -135
  334. package/esm5/src/render3/styling/class_and_style_bindings.js +684 -214
  335. package/esm5/src/render3/styling/core_player_handler.js +1 -2
  336. package/esm5/src/render3/styling/player_factory.js +1 -2
  337. package/esm5/src/render3/styling/util.js +39 -22
  338. package/esm5/src/render3/tokens.js +1 -2
  339. package/esm5/src/render3/util.js +49 -37
  340. package/esm5/src/render3/view_engine_compatibility.js +20 -33
  341. package/esm5/src/render3/view_engine_compatibility_prebound.js +1 -2
  342. package/esm5/src/render3/view_ref.js +33 -30
  343. package/esm5/src/sanitization/bypass.js +1 -2
  344. package/esm5/src/sanitization/html_sanitizer.js +1 -2
  345. package/esm5/src/sanitization/inert_body.js +4 -5
  346. package/esm5/src/sanitization/sanitization.js +25 -20
  347. package/esm5/src/sanitization/security.js +1 -2
  348. package/esm5/src/sanitization/style_sanitizer.js +1 -2
  349. package/esm5/src/sanitization/url_sanitizer.js +1 -2
  350. package/esm5/src/testability/testability.js +1 -2
  351. package/esm5/src/type.js +1 -2
  352. package/esm5/src/util/decorators.js +1 -2
  353. package/esm5/src/util/lang.js +1 -2
  354. package/esm5/src/util/ng_reflect.js +1 -2
  355. package/esm5/src/util/noop.js +1 -2
  356. package/esm5/src/util/property.js +1 -2
  357. package/esm5/src/util.js +1 -2
  358. package/esm5/src/version.js +2 -3
  359. package/esm5/src/view/element.js +1 -2
  360. package/esm5/src/view/entrypoint.js +1 -2
  361. package/esm5/src/view/errors.js +1 -2
  362. package/esm5/src/view/index.js +1 -2
  363. package/esm5/src/view/ng_content.js +1 -2
  364. package/esm5/src/view/ng_module.js +1 -2
  365. package/esm5/src/view/provider.js +1 -2
  366. package/esm5/src/view/pure_expression.js +1 -2
  367. package/esm5/src/view/query.js +1 -2
  368. package/esm5/src/view/refs.js +1 -2
  369. package/esm5/src/view/services.js +1 -2
  370. package/esm5/src/view/text.js +1 -2
  371. package/esm5/src/view/types.js +1 -2
  372. package/esm5/src/view/util.js +1 -2
  373. package/esm5/src/view/view.js +1 -2
  374. package/esm5/src/view/view_attach.js +1 -2
  375. package/esm5/src/zone/ng_zone.js +1 -2
  376. package/esm5/src/zone.js +1 -2
  377. package/esm5/testing/index.js +1 -2
  378. package/esm5/testing/public_api.js +1 -2
  379. package/esm5/testing/src/async.js +1 -2
  380. package/esm5/testing/src/async_fallback.js +1 -2
  381. package/esm5/testing/src/async_test_completer.js +1 -2
  382. package/esm5/testing/src/before_each.js +1 -2
  383. package/esm5/testing/src/component_fixture.js +1 -2
  384. package/esm5/testing/src/fake_async.js +1 -2
  385. package/esm5/testing/src/fake_async_fallback.js +1 -2
  386. package/esm5/testing/src/lang_utils.js +1 -2
  387. package/esm5/testing/src/logger.js +1 -2
  388. package/esm5/testing/src/metadata_override.js +1 -2
  389. package/esm5/testing/src/metadata_overrider.js +1 -2
  390. package/esm5/testing/src/ng_zone_mock.js +1 -2
  391. package/esm5/testing/src/private_export_testing.js +1 -2
  392. package/esm5/testing/src/r3_test_bed.js +182 -121
  393. package/esm5/testing/src/resolvers.js +11 -7
  394. package/esm5/testing/src/test_bed.js +1 -2
  395. package/esm5/testing/src/test_bed_common.js +1 -2
  396. package/esm5/testing/src/test_compiler.js +1 -2
  397. package/esm5/testing/src/testing.js +1 -2
  398. package/esm5/testing/src/testing_internal.js +2 -3
  399. package/esm5/testing/testing.js +1 -2
  400. package/fesm2015/core.js +8560 -6153
  401. package/fesm2015/core.js.map +1 -1
  402. package/fesm2015/testing.js +351 -229
  403. package/fesm2015/testing.js.map +1 -1
  404. package/fesm5/core.js +5541 -4482
  405. package/fesm5/core.js.map +1 -1
  406. package/fesm5/testing.js +185 -130
  407. package/fesm5/testing.js.map +1 -1
  408. package/package.json +1 -1
  409. package/src/change_detection/constants.d.ts +2 -2
  410. package/src/core_render3_private_export.d.ts +6 -3
  411. package/src/di/injectable.d.ts +3 -2
  412. package/src/di/r3_injector.d.ts +1 -1
  413. package/src/linker/ng_module_factory_loader.d.ts +5 -1
  414. package/src/render3/assert.d.ts +6 -0
  415. package/src/render3/bindings.d.ts +20 -0
  416. package/src/render3/component.d.ts +3 -3
  417. package/src/render3/component_ref.d.ts +14 -4
  418. package/src/render3/context_discovery.d.ts +9 -9
  419. package/src/render3/definition.d.ts +8 -23
  420. package/src/render3/di.d.ts +19 -17
  421. package/src/render3/discovery_utils.d.ts +66 -8
  422. package/src/render3/empty.d.ts +16 -0
  423. package/src/render3/errors.d.ts +1 -1
  424. package/src/render3/global_utils_api.d.ts +1 -1
  425. package/src/render3/hooks.d.ts +7 -6
  426. package/src/render3/index.d.ts +4 -4
  427. package/src/render3/instructions.d.ts +163 -118
  428. package/src/render3/interfaces/container.d.ts +9 -8
  429. package/src/render3/interfaces/context.d.ts +3 -3
  430. package/src/render3/interfaces/definition.d.ts +2 -12
  431. package/src/render3/interfaces/i18n.d.ts +25 -25
  432. package/src/render3/interfaces/injector.d.ts +8 -9
  433. package/src/render3/interfaces/node.d.ts +56 -23
  434. package/src/render3/interfaces/renderer.d.ts +2 -1
  435. package/src/render3/interfaces/styling.d.ts +392 -117
  436. package/src/render3/interfaces/view.d.ts +49 -35
  437. package/src/render3/jit/compiler_facade_interface.d.ts +10 -3
  438. package/src/render3/jit/module.d.ts +9 -1
  439. package/src/render3/metadata.d.ts +1 -1
  440. package/src/render3/ng_module_ref.d.ts +8 -6
  441. package/src/render3/node_manipulation.d.ts +21 -27
  442. package/src/render3/node_selector_matcher.d.ts +2 -2
  443. package/src/render3/state.d.ts +11 -38
  444. package/src/render3/styling/class_and_style_bindings.d.ts +130 -43
  445. package/src/render3/styling/util.d.ts +9 -4
  446. package/src/render3/util.d.ts +31 -25
  447. package/src/render3/view_engine_compatibility.d.ts +5 -12
  448. package/src/render3/view_engine_compatibility_prebound.d.ts +2 -2
  449. package/src/render3/view_ref.d.ts +2 -2
  450. package/src/sanitization/sanitization.d.ts +3 -2
  451. package/testing/src/r3_test_bed.d.ts +15 -0
  452. package/testing/src/resolvers.d.ts +2 -2
  453. package/testing/testing.metadata.json +1 -1
  454. package/testing.d.ts +5 -0
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license Angular v7.2.0-beta.0
2
+ * @license Angular v7.2.0
3
3
  * (c) 2010-2018 Google, Inc. https://angular.io/
4
4
  * License: MIT
5
5
  */
@@ -626,6 +626,17 @@
626
626
  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
627
627
  }
628
628
 
629
+ var __assign = function() {
630
+ __assign = Object.assign || function __assign(t) {
631
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
632
+ s = arguments[i];
633
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
634
+ }
635
+ return t;
636
+ };
637
+ return __assign.apply(this, arguments);
638
+ };
639
+
629
640
  function __decorate(decorators, target, key, desc) {
630
641
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
631
642
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -837,7 +848,9 @@
837
848
  this.overrides.clear();
838
849
  overrides.forEach(function (_a) {
839
850
  var _b = __read(_a, 2), type = _b[0], override = _b[1];
840
- return _this.overrides.set(type, override);
851
+ var overrides = _this.overrides.get(type) || [];
852
+ overrides.push(override);
853
+ _this.overrides.set(type, overrides);
841
854
  });
842
855
  };
843
856
  OverrideResolver.prototype.getAnnotation = function (type) {
@@ -845,14 +858,17 @@
845
858
  return reflection.annotations(type).find(function (a) { return a instanceof _this.type; }) || null;
846
859
  };
847
860
  OverrideResolver.prototype.resolve = function (type) {
861
+ var _this = this;
848
862
  var resolved = this.resolved.get(type) || null;
849
863
  if (!resolved) {
850
864
  resolved = this.getAnnotation(type);
851
865
  if (resolved) {
852
- var override = this.overrides.get(type);
853
- if (override) {
854
- var overrider = new MetadataOverrider();
855
- resolved = overrider.overrideMetadata(this.type, resolved, override);
866
+ var overrides = this.overrides.get(type);
867
+ if (overrides) {
868
+ var overrider_1 = new MetadataOverrider();
869
+ overrides.forEach(function (override) {
870
+ resolved = overrider_1.overrideMetadata(_this.type, resolved, override);
871
+ });
856
872
  }
857
873
  }
858
874
  this.resolved.set(type, resolved);
@@ -945,6 +961,7 @@
945
961
  * found in the LICENSE file at https://angular.io/license
946
962
  */
947
963
  var _nextRootElementId = 0;
964
+ var EMPTY_ARRAY = [];
948
965
  /**
949
966
  * @description
950
967
  * Configures and initializes environment for unit testing and provides methods for
@@ -967,6 +984,8 @@
967
984
  this._pipeOverrides = [];
968
985
  this._providerOverrides = [];
969
986
  this._rootProviderOverrides = [];
987
+ this._providerOverridesByToken = new Map();
988
+ this._templateOverrides = new Map();
970
989
  // test module configuration
971
990
  this._providers = [];
972
991
  this._declarations = [];
@@ -974,6 +993,7 @@
974
993
  this._schemas = [];
975
994
  this._activeFixtures = [];
976
995
  this._moduleRef = null;
996
+ this._testModuleType = null;
977
997
  this._instantiated = false;
978
998
  }
979
999
  /**
@@ -1049,7 +1069,10 @@
1049
1069
  return TestBedRender3;
1050
1070
  };
1051
1071
  TestBedRender3.prototype.overrideTemplateUsingTestingModule = function (component, template) {
1052
- throw new Error('Render3TestBed.overrideTemplateUsingTestingModule is not implemented yet');
1072
+ if (this._instantiated) {
1073
+ throw new Error('Cannot override template when the test module has already been instantiated');
1074
+ }
1075
+ this._templateOverrides.set(component, template);
1053
1076
  };
1054
1077
  TestBedRender3.overrideProvider = function (token, provider) {
1055
1078
  _getTestBedRender3().overrideProvider(token, provider);
@@ -1100,6 +1123,7 @@
1100
1123
  this.ngModule = null;
1101
1124
  };
1102
1125
  TestBedRender3.prototype.resetTestingModule = function () {
1126
+ core.ɵresetCompiledComponents();
1103
1127
  // reset metadata overrides
1104
1128
  this._moduleOverrides = [];
1105
1129
  this._componentOverrides = [];
@@ -1107,12 +1131,15 @@
1107
1131
  this._pipeOverrides = [];
1108
1132
  this._providerOverrides = [];
1109
1133
  this._rootProviderOverrides = [];
1134
+ this._providerOverridesByToken.clear();
1135
+ this._templateOverrides.clear();
1110
1136
  // reset test module config
1111
1137
  this._providers = [];
1112
1138
  this._declarations = [];
1113
1139
  this._imports = [];
1114
1140
  this._schemas = [];
1115
1141
  this._moduleRef = null;
1142
+ this._testModuleType = null;
1116
1143
  this._instantiated = false;
1117
1144
  this._activeFixtures.forEach(function (fixture) {
1118
1145
  try {
@@ -1191,16 +1218,18 @@
1191
1218
  * Overwrites all providers for the given token with the given provider definition.
1192
1219
  */
1193
1220
  TestBedRender3.prototype.overrideProvider = function (token, provider) {
1221
+ var providerDef = provider.useFactory ?
1222
+ { provide: token, useFactory: provider.useFactory, deps: provider.deps || [] } :
1223
+ { provide: token, useValue: provider.useValue };
1194
1224
  var injectableDef;
1195
1225
  var isRoot = (typeof token !== 'string' && (injectableDef = core.ɵgetInjectableDef(token)) &&
1196
1226
  injectableDef.providedIn === 'root');
1197
- var overrides = isRoot ? this._rootProviderOverrides : this._providerOverrides;
1198
- if (provider.useFactory) {
1199
- overrides.push({ provide: token, useFactory: provider.useFactory, deps: provider.deps || [] });
1200
- }
1201
- else {
1202
- overrides.push({ provide: token, useValue: provider.useValue });
1203
- }
1227
+ var overridesBucket = isRoot ? this._rootProviderOverrides : this._providerOverrides;
1228
+ overridesBucket.push(providerDef);
1229
+ // keep all overrides grouped by token as well for fast lookups using token
1230
+ var overridesForToken = this._providerOverridesByToken.get(token) || [];
1231
+ overridesForToken.push(providerDef);
1232
+ this._providerOverridesByToken.set(token, overridesForToken);
1204
1233
  };
1205
1234
  TestBedRender3.prototype.deprecatedOverrideProvider = function (token, provider) {
1206
1235
  throw new Error('No implemented in IVY');
@@ -1233,12 +1262,22 @@
1233
1262
  return;
1234
1263
  }
1235
1264
  var resolvers = this._getResolvers();
1236
- var testModuleType = this._createTestModule();
1237
- compileNgModule(testModuleType, resolvers);
1265
+ this._testModuleType = this._createTestModule();
1266
+ this._compileNgModule(this._testModuleType, resolvers);
1238
1267
  var parentInjector = this.platform.injector;
1239
- this._moduleRef = new core.ɵRender3NgModuleRef(testModuleType, parentInjector);
1268
+ this._moduleRef = new core.ɵRender3NgModuleRef(this._testModuleType, parentInjector);
1269
+ // ApplicationInitStatus.runInitializers() is marked @internal
1270
+ // to core. Cast it to any before accessing it.
1271
+ this._moduleRef.injector.get(core.ApplicationInitStatus).runInitializers();
1240
1272
  this._instantiated = true;
1241
1273
  };
1274
+ // get overrides for a specific provider (if any)
1275
+ TestBedRender3.prototype._getProviderOverrides = function (provider) {
1276
+ var token = typeof provider === 'object' && provider.hasOwnProperty('provide') ?
1277
+ provider.provide :
1278
+ provider;
1279
+ return this._providerOverridesByToken.get(token) || [];
1280
+ };
1242
1281
  // creates resolvers taking overrides into account
1243
1282
  TestBedRender3.prototype._getResolvers = function () {
1244
1283
  var module = new NgModuleResolver();
@@ -1285,128 +1324,155 @@
1285
1324
  }());
1286
1325
  return DynamicTestModule;
1287
1326
  };
1327
+ TestBedRender3.prototype._getMetaWithOverrides = function (meta, type) {
1328
+ var _this = this;
1329
+ var overrides = {};
1330
+ if (meta.providers && meta.providers.length) {
1331
+ var providerOverrides = flatten(meta.providers, function (provider) { return _this._getProviderOverrides(provider); });
1332
+ if (providerOverrides.length) {
1333
+ overrides.providers = __spread(meta.providers, providerOverrides);
1334
+ }
1335
+ }
1336
+ var hasTemplateOverride = !!type && this._templateOverrides.has(type);
1337
+ if (hasTemplateOverride) {
1338
+ overrides.template = this._templateOverrides.get(type);
1339
+ }
1340
+ return Object.keys(overrides).length ? __assign({}, meta, overrides) : meta;
1341
+ };
1342
+ TestBedRender3.prototype._compileNgModule = function (moduleType, resolvers) {
1343
+ var _this = this;
1344
+ var ngModule = resolvers.module.resolve(moduleType);
1345
+ if (ngModule === null) {
1346
+ throw new Error(core.ɵstringify(moduleType) + " has not @NgModule annotation");
1347
+ }
1348
+ var metadata = this._getMetaWithOverrides(ngModule);
1349
+ core.ɵcompileNgModuleDefs(moduleType, metadata);
1350
+ var declarations = flatten(ngModule.declarations || EMPTY_ARRAY, core.resolveForwardRef);
1351
+ var compiledComponents = [];
1352
+ // Compile the components, directives and pipes declared by this module
1353
+ declarations.forEach(function (declaration) {
1354
+ var component = resolvers.component.resolve(declaration);
1355
+ if (component) {
1356
+ var metadata_1 = _this._getMetaWithOverrides(component, declaration);
1357
+ core.ɵcompileComponent(declaration, metadata_1);
1358
+ compiledComponents.push(declaration);
1359
+ return;
1360
+ }
1361
+ var directive = resolvers.directive.resolve(declaration);
1362
+ if (directive) {
1363
+ var metadata_2 = _this._getMetaWithOverrides(directive);
1364
+ core.ɵcompileDirective(declaration, metadata_2);
1365
+ return;
1366
+ }
1367
+ var pipe = resolvers.pipe.resolve(declaration);
1368
+ if (pipe) {
1369
+ core.ɵcompilePipe(declaration, pipe);
1370
+ return;
1371
+ }
1372
+ });
1373
+ // Compile transitive modules, components, directives and pipes
1374
+ var transitiveScope = this._transitiveScopesFor(moduleType, resolvers);
1375
+ compiledComponents.forEach(function (cmp) {
1376
+ var scope = _this._templateOverrides.has(cmp) ?
1377
+ // if we have template override via `TestBed.overrideTemplateUsingTestingModule` -
1378
+ // define Component scope as TestingModule scope, instead of the scope of NgModule
1379
+ // where this Component was declared
1380
+ _this._transitiveScopesFor(_this._testModuleType, resolvers) :
1381
+ transitiveScope;
1382
+ core.ɵpatchComponentDefWithScope(cmp.ngComponentDef, scope);
1383
+ });
1384
+ };
1385
+ /**
1386
+ * Compute the pair of transitive scopes (compilation scope and exported scope) for a given
1387
+ * module.
1388
+ *
1389
+ * This operation is memoized and the result is cached on the module's definition. It can be
1390
+ * called on modules with components that have not fully compiled yet, but the result should not
1391
+ * be used until they have.
1392
+ */
1393
+ TestBedRender3.prototype._transitiveScopesFor = function (moduleType, resolvers) {
1394
+ var _this = this;
1395
+ if (!isNgModule(moduleType)) {
1396
+ throw new Error(moduleType.name + " does not have an ngModuleDef");
1397
+ }
1398
+ var def = moduleType.ngModuleDef;
1399
+ if (def.transitiveCompileScopes !== null) {
1400
+ return def.transitiveCompileScopes;
1401
+ }
1402
+ var scopes = {
1403
+ compilation: {
1404
+ directives: new Set(),
1405
+ pipes: new Set(),
1406
+ },
1407
+ exported: {
1408
+ directives: new Set(),
1409
+ pipes: new Set(),
1410
+ },
1411
+ };
1412
+ def.declarations.forEach(function (declared) {
1413
+ var declaredWithDefs = declared;
1414
+ if (declaredWithDefs.ngPipeDef !== undefined) {
1415
+ scopes.compilation.pipes.add(declared);
1416
+ }
1417
+ else {
1418
+ scopes.compilation.directives.add(declared);
1419
+ }
1420
+ });
1421
+ def.imports.forEach(function (imported) {
1422
+ var ngModule = resolvers.module.resolve(imported);
1423
+ if (ngModule === null) {
1424
+ throw new Error("Importing " + imported.name + " which does not have an @ngModule");
1425
+ }
1426
+ else {
1427
+ _this._compileNgModule(imported, resolvers);
1428
+ }
1429
+ // When this module imports another, the imported module's exported directives and pipes are
1430
+ // added to the compilation scope of this module.
1431
+ var importedScope = _this._transitiveScopesFor(imported, resolvers);
1432
+ importedScope.exported.directives.forEach(function (entry) { return scopes.compilation.directives.add(entry); });
1433
+ importedScope.exported.pipes.forEach(function (entry) { return scopes.compilation.pipes.add(entry); });
1434
+ });
1435
+ def.exports.forEach(function (exported) {
1436
+ var exportedTyped = exported;
1437
+ // Either the type is a module, a pipe, or a component/directive (which may not have an
1438
+ // ngComponentDef as it might be compiled asynchronously).
1439
+ if (isNgModule(exportedTyped)) {
1440
+ // When this module exports another, the exported module's exported directives and pipes are
1441
+ // added to both the compilation and exported scopes of this module.
1442
+ var exportedScope = _this._transitiveScopesFor(exportedTyped, resolvers);
1443
+ exportedScope.exported.directives.forEach(function (entry) {
1444
+ scopes.compilation.directives.add(entry);
1445
+ scopes.exported.directives.add(entry);
1446
+ });
1447
+ exportedScope.exported.pipes.forEach(function (entry) {
1448
+ scopes.compilation.pipes.add(entry);
1449
+ scopes.exported.pipes.add(entry);
1450
+ });
1451
+ }
1452
+ else if (exportedTyped.ngPipeDef !== undefined) {
1453
+ scopes.exported.pipes.add(exportedTyped);
1454
+ }
1455
+ else {
1456
+ scopes.exported.directives.add(exportedTyped);
1457
+ }
1458
+ });
1459
+ def.transitiveCompileScopes = scopes;
1460
+ return scopes;
1461
+ };
1288
1462
  return TestBedRender3;
1289
1463
  }());
1290
1464
  var testBed;
1291
1465
  function _getTestBedRender3() {
1292
1466
  return testBed = testBed || new TestBedRender3();
1293
1467
  }
1294
- // Module compiler
1295
- var EMPTY_ARRAY = [];
1296
- function compileNgModule(moduleType, resolvers) {
1297
- var ngModule = resolvers.module.resolve(moduleType);
1298
- if (ngModule === null) {
1299
- throw new Error(core.ɵstringify(moduleType) + " has not @NgModule annotation");
1300
- }
1301
- core.ɵcompileNgModuleDefs(moduleType, ngModule);
1302
- var declarations = flatten(ngModule.declarations || EMPTY_ARRAY);
1303
- var compiledComponents = [];
1304
- // Compile the components, directives and pipes declared by this module
1305
- declarations.forEach(function (declaration) {
1306
- var component = resolvers.component.resolve(declaration);
1307
- if (component) {
1308
- core.ɵcompileComponent(declaration, component);
1309
- compiledComponents.push(declaration);
1310
- return;
1311
- }
1312
- var directive = resolvers.directive.resolve(declaration);
1313
- if (directive) {
1314
- core.ɵcompileDirective(declaration, directive);
1315
- return;
1316
- }
1317
- var pipe = resolvers.pipe.resolve(declaration);
1318
- if (pipe) {
1319
- core.ɵcompilePipe(declaration, pipe);
1320
- return;
1321
- }
1322
- });
1323
- // Compile transitive modules, components, directives and pipes
1324
- var transitiveScope = transitiveScopesFor(moduleType, resolvers);
1325
- compiledComponents.forEach(function (cmp) { return core.ɵpatchComponentDefWithScope(cmp.ngComponentDef, transitiveScope); });
1326
- }
1327
- /**
1328
- * Compute the pair of transitive scopes (compilation scope and exported scope) for a given module.
1329
- *
1330
- * This operation is memoized and the result is cached on the module's definition. It can be called
1331
- * on modules with components that have not fully compiled yet, but the result should not be used
1332
- * until they have.
1333
- */
1334
- function transitiveScopesFor(moduleType, resolvers) {
1335
- if (!isNgModule(moduleType)) {
1336
- throw new Error(moduleType.name + " does not have an ngModuleDef");
1337
- }
1338
- var def = moduleType.ngModuleDef;
1339
- if (def.transitiveCompileScopes !== null) {
1340
- return def.transitiveCompileScopes;
1341
- }
1342
- var scopes = {
1343
- compilation: {
1344
- directives: new Set(),
1345
- pipes: new Set(),
1346
- },
1347
- exported: {
1348
- directives: new Set(),
1349
- pipes: new Set(),
1350
- },
1351
- };
1352
- def.declarations.forEach(function (declared) {
1353
- var declaredWithDefs = declared;
1354
- if (declaredWithDefs.ngPipeDef !== undefined) {
1355
- scopes.compilation.pipes.add(declared);
1356
- }
1357
- else {
1358
- scopes.compilation.directives.add(declared);
1359
- }
1360
- });
1361
- def.imports.forEach(function (imported) {
1362
- var ngModule = resolvers.module.resolve(imported);
1363
- if (ngModule === null) {
1364
- throw new Error("Importing " + imported.name + " which does not have an @ngModule");
1365
- }
1366
- else {
1367
- compileNgModule(imported, resolvers);
1368
- }
1369
- // When this module imports another, the imported module's exported directives and pipes are
1370
- // added to the compilation scope of this module.
1371
- var importedScope = transitiveScopesFor(imported, resolvers);
1372
- importedScope.exported.directives.forEach(function (entry) { return scopes.compilation.directives.add(entry); });
1373
- importedScope.exported.pipes.forEach(function (entry) { return scopes.compilation.pipes.add(entry); });
1374
- });
1375
- def.exports.forEach(function (exported) {
1376
- var exportedTyped = exported;
1377
- // Either the type is a module, a pipe, or a component/directive (which may not have an
1378
- // ngComponentDef as it might be compiled asynchronously).
1379
- if (isNgModule(exportedTyped)) {
1380
- // When this module exports another, the exported module's exported directives and pipes are
1381
- // added to both the compilation and exported scopes of this module.
1382
- var exportedScope = transitiveScopesFor(exportedTyped, resolvers);
1383
- exportedScope.exported.directives.forEach(function (entry) {
1384
- scopes.compilation.directives.add(entry);
1385
- scopes.exported.directives.add(entry);
1386
- });
1387
- exportedScope.exported.pipes.forEach(function (entry) {
1388
- scopes.compilation.pipes.add(entry);
1389
- scopes.exported.pipes.add(entry);
1390
- });
1391
- }
1392
- else if (exportedTyped.ngPipeDef !== undefined) {
1393
- scopes.exported.pipes.add(exportedTyped);
1394
- }
1395
- else {
1396
- scopes.exported.directives.add(exportedTyped);
1397
- }
1398
- });
1399
- def.transitiveCompileScopes = scopes;
1400
- return scopes;
1401
- }
1402
- function flatten(values) {
1468
+ function flatten(values, mapFn) {
1403
1469
  var out = [];
1404
1470
  values.forEach(function (value) {
1405
1471
  if (Array.isArray(value)) {
1406
- out.push.apply(out, __spread(flatten(value)));
1472
+ out.push.apply(out, __spread(flatten(value, mapFn)));
1407
1473
  }
1408
1474
  else {
1409
- out.push(value);
1475
+ out.push(mapFn ? mapFn(value) : value);
1410
1476
  }
1411
1477
  });
1412
1478
  return out;