@angular/cdk 14.0.0-next.8 → 14.0.0-rc.1

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 (481) hide show
  1. package/a11y/_index.scss +11 -0
  2. package/a11y/index.d.ts +1119 -5
  3. package/a11y-prebuilt.css +1 -1
  4. package/accordion/index.d.ts +108 -6
  5. package/bidi/index.d.ts +77 -5
  6. package/clipboard/index.d.ts +112 -5
  7. package/coercion/index.d.ts +64 -5
  8. package/collections/index.d.ts +348 -5
  9. package/dialog/index.d.ts +410 -0
  10. package/drag-drop/index.d.ts +1456 -5
  11. package/esm2020/a11y/a11y-module.mjs +5 -5
  12. package/esm2020/a11y/aria-describer/aria-describer.mjs +4 -4
  13. package/esm2020/a11y/focus-monitor/focus-monitor.mjs +10 -10
  14. package/esm2020/a11y/focus-trap/configurable-focus-trap-factory.mjs +4 -4
  15. package/esm2020/a11y/focus-trap/focus-trap-manager.mjs +4 -4
  16. package/esm2020/a11y/focus-trap/focus-trap.mjs +7 -7
  17. package/esm2020/a11y/high-contrast-mode/high-contrast-mode-detector.mjs +10 -10
  18. package/esm2020/a11y/input-modality/input-modality-detector.mjs +4 -4
  19. package/esm2020/a11y/interactivity-checker/interactivity-checker.mjs +4 -4
  20. package/esm2020/a11y/live-announcer/live-announcer.mjs +22 -17
  21. package/esm2020/accordion/accordion-item.mjs +4 -4
  22. package/esm2020/accordion/accordion-module.mjs +5 -5
  23. package/esm2020/accordion/accordion.mjs +4 -4
  24. package/esm2020/bidi/bidi-module.mjs +5 -5
  25. package/esm2020/bidi/dir.mjs +4 -4
  26. package/esm2020/bidi/directionality.mjs +4 -4
  27. package/esm2020/clipboard/clipboard-module.mjs +5 -5
  28. package/esm2020/clipboard/clipboard.mjs +4 -4
  29. package/esm2020/clipboard/copy-to-clipboard.mjs +4 -4
  30. package/esm2020/collections/dispose-view-repeater-strategy.mjs +4 -4
  31. package/esm2020/collections/recycle-view-repeater-strategy.mjs +4 -4
  32. package/esm2020/collections/unique-selection-dispatcher.mjs +4 -4
  33. package/esm2020/dialog/dialog-config.mjs +63 -0
  34. package/esm2020/dialog/dialog-container.mjs +278 -0
  35. package/esm2020/dialog/dialog-injectors.mjs +26 -0
  36. package/esm2020/dialog/dialog-module.mjs +42 -0
  37. package/esm2020/dialog/dialog-ref.mjs +76 -0
  38. package/esm2020/dialog/dialog.mjs +298 -0
  39. package/esm2020/dialog/dialog_public_index.mjs +5 -0
  40. package/esm2020/dialog/index.mjs +9 -0
  41. package/esm2020/dialog/public-api.mjs +14 -0
  42. package/esm2020/drag-drop/directives/drag-handle.mjs +4 -4
  43. package/esm2020/drag-drop/directives/drag-placeholder.mjs +4 -4
  44. package/esm2020/drag-drop/directives/drag-preview.mjs +4 -4
  45. package/esm2020/drag-drop/directives/drag.mjs +11 -4
  46. package/esm2020/drag-drop/directives/drop-list-group.mjs +4 -4
  47. package/esm2020/drag-drop/directives/drop-list.mjs +4 -4
  48. package/esm2020/drag-drop/drag-drop-module.mjs +5 -5
  49. package/esm2020/drag-drop/drag-drop-registry.mjs +4 -4
  50. package/esm2020/drag-drop/drag-drop.mjs +4 -4
  51. package/esm2020/drag-drop/drop-list-ref.mjs +23 -23
  52. package/esm2020/layout/breakpoints-observer.mjs +4 -4
  53. package/esm2020/layout/layout-module.mjs +5 -5
  54. package/esm2020/layout/media-matcher.mjs +4 -4
  55. package/esm2020/menu/context-menu-trigger.mjs +212 -0
  56. package/esm2020/menu/index.mjs +9 -0
  57. package/esm2020/menu/menu-aim.mjs +203 -0
  58. package/esm2020/menu/menu-bar.mjs +133 -0
  59. package/esm2020/menu/menu-base.mjs +187 -0
  60. package/esm2020/menu/menu-errors.mjs +22 -0
  61. package/esm2020/menu/menu-group.mjs +30 -0
  62. package/esm2020/menu/menu-interface.mjs +11 -0
  63. package/esm2020/menu/menu-item-checkbox.mjs +49 -0
  64. package/esm2020/menu/menu-item-radio.mjs +71 -0
  65. package/esm2020/menu/menu-item-selectable.mjs +42 -0
  66. package/esm2020/menu/menu-item.mjs +259 -0
  67. package/esm2020/menu/menu-module.mjs +62 -0
  68. package/esm2020/menu/menu-stack.mjs +156 -0
  69. package/esm2020/menu/menu-trigger-base.mjs +107 -0
  70. package/esm2020/menu/menu-trigger.mjs +283 -0
  71. package/esm2020/menu/menu.mjs +134 -0
  72. package/esm2020/menu/menu_public_index.mjs +5 -0
  73. package/esm2020/menu/pointer-focus-tracker.mjs +51 -0
  74. package/esm2020/menu/public-api.mjs +24 -0
  75. package/esm2020/observers/observe-content.mjs +14 -14
  76. package/esm2020/overlay/dispatchers/base-overlay-dispatcher.mjs +4 -4
  77. package/esm2020/overlay/dispatchers/overlay-keyboard-dispatcher.mjs +4 -4
  78. package/esm2020/overlay/dispatchers/overlay-outside-click-dispatcher.mjs +4 -4
  79. package/esm2020/overlay/fullscreen-overlay-container.mjs +4 -4
  80. package/esm2020/overlay/overlay-container.mjs +4 -4
  81. package/esm2020/overlay/overlay-directives.mjs +7 -7
  82. package/esm2020/overlay/overlay-module.mjs +5 -5
  83. package/esm2020/overlay/overlay-ref.mjs +14 -5
  84. package/esm2020/overlay/overlay.mjs +14 -8
  85. package/esm2020/overlay/position/overlay-position-builder.mjs +4 -4
  86. package/esm2020/overlay/scroll/scroll-strategy-options.mjs +4 -4
  87. package/esm2020/platform/features/scrolling.mjs +4 -4
  88. package/esm2020/platform/platform-module.mjs +5 -5
  89. package/esm2020/platform/platform.mjs +4 -4
  90. package/esm2020/portal/dom-portal-outlet.mjs +26 -4
  91. package/esm2020/portal/portal-directives.mjs +17 -17
  92. package/esm2020/scrolling/fixed-size-virtual-scroll.mjs +4 -4
  93. package/esm2020/scrolling/scroll-dispatcher.mjs +4 -4
  94. package/esm2020/scrolling/scrollable.mjs +9 -9
  95. package/esm2020/scrolling/scrolling-module.mjs +9 -9
  96. package/esm2020/scrolling/viewport-ruler.mjs +4 -4
  97. package/esm2020/scrolling/virtual-for-of.mjs +7 -5
  98. package/esm2020/scrolling/virtual-scroll-viewport.mjs +6 -6
  99. package/esm2020/stepper/step-header.mjs +4 -4
  100. package/esm2020/stepper/step-label.mjs +4 -4
  101. package/esm2020/stepper/stepper-button.mjs +7 -7
  102. package/esm2020/stepper/stepper-module.mjs +5 -5
  103. package/esm2020/stepper/stepper.mjs +7 -7
  104. package/esm2020/table/cell.mjs +22 -22
  105. package/esm2020/table/coalesced-style-scheduler.mjs +4 -4
  106. package/esm2020/table/row.mjs +28 -28
  107. package/esm2020/table/table-module.mjs +5 -5
  108. package/esm2020/table/table.mjs +22 -22
  109. package/esm2020/table/text-column.mjs +5 -5
  110. package/esm2020/testing/selenium-webdriver/selenium-web-driver-harness-environment.mjs +1 -1
  111. package/esm2020/testing/test-element.mjs +1 -1
  112. package/esm2020/testing/testbed/fake-events/type-in-element.mjs +2 -2
  113. package/esm2020/text-field/autofill.mjs +7 -7
  114. package/esm2020/text-field/autosize.mjs +4 -4
  115. package/esm2020/text-field/text-field-module.mjs +5 -5
  116. package/esm2020/tree/nested-node.mjs +4 -4
  117. package/esm2020/tree/node.mjs +4 -4
  118. package/esm2020/tree/outlet.mjs +4 -4
  119. package/esm2020/tree/padding.mjs +4 -4
  120. package/esm2020/tree/toggle.mjs +4 -4
  121. package/esm2020/tree/tree-module.mjs +5 -5
  122. package/esm2020/tree/tree.mjs +7 -7
  123. package/esm2020/version.mjs +1 -1
  124. package/fesm2015/a11y.mjs +65 -60
  125. package/fesm2015/a11y.mjs.map +1 -1
  126. package/fesm2015/accordion.mjs +10 -10
  127. package/fesm2015/accordion.mjs.map +1 -1
  128. package/fesm2015/bidi.mjs +10 -10
  129. package/fesm2015/bidi.mjs.map +1 -1
  130. package/fesm2015/cdk.mjs +1 -1
  131. package/fesm2015/cdk.mjs.map +1 -1
  132. package/fesm2015/clipboard.mjs +10 -10
  133. package/fesm2015/clipboard.mjs.map +1 -1
  134. package/fesm2015/collections.mjs +9 -9
  135. package/fesm2015/collections.mjs.map +1 -1
  136. package/fesm2015/dialog.mjs +780 -0
  137. package/fesm2015/dialog.mjs.map +1 -0
  138. package/fesm2015/drag-drop.mjs +57 -50
  139. package/fesm2015/drag-drop.mjs.map +1 -1
  140. package/fesm2015/layout.mjs +10 -10
  141. package/fesm2015/layout.mjs.map +1 -1
  142. package/fesm2015/menu.mjs +1960 -0
  143. package/fesm2015/menu.mjs.map +1 -0
  144. package/fesm2015/observers.mjs +13 -13
  145. package/fesm2015/observers.mjs.map +1 -1
  146. package/fesm2015/overlay.mjs +57 -42
  147. package/fesm2015/overlay.mjs.map +1 -1
  148. package/fesm2015/platform.mjs +10 -10
  149. package/fesm2015/platform.mjs.map +1 -1
  150. package/fesm2015/portal.mjs +41 -20
  151. package/fesm2015/portal.mjs.map +1 -1
  152. package/fesm2015/scrolling.mjs +36 -34
  153. package/fesm2015/scrolling.mjs.map +1 -1
  154. package/fesm2015/stepper.mjs +22 -22
  155. package/fesm2015/stepper.mjs.map +1 -1
  156. package/fesm2015/table.mjs +80 -80
  157. package/fesm2015/table.mjs.map +1 -1
  158. package/fesm2015/testing/selenium-webdriver.mjs.map +1 -1
  159. package/fesm2015/testing/testbed.mjs +1 -1
  160. package/fesm2015/testing/testbed.mjs.map +1 -1
  161. package/fesm2015/testing.mjs.map +1 -1
  162. package/fesm2015/text-field.mjs +13 -13
  163. package/fesm2015/text-field.mjs.map +1 -1
  164. package/fesm2015/tree.mjs +25 -25
  165. package/fesm2015/tree.mjs.map +1 -1
  166. package/fesm2020/a11y.mjs +64 -59
  167. package/fesm2020/a11y.mjs.map +1 -1
  168. package/fesm2020/accordion.mjs +10 -10
  169. package/fesm2020/accordion.mjs.map +1 -1
  170. package/fesm2020/bidi.mjs +10 -10
  171. package/fesm2020/bidi.mjs.map +1 -1
  172. package/fesm2020/cdk.mjs +1 -1
  173. package/fesm2020/cdk.mjs.map +1 -1
  174. package/fesm2020/clipboard.mjs +10 -10
  175. package/fesm2020/clipboard.mjs.map +1 -1
  176. package/fesm2020/collections.mjs +9 -9
  177. package/fesm2020/collections.mjs.map +1 -1
  178. package/fesm2020/dialog.mjs +784 -0
  179. package/fesm2020/dialog.mjs.map +1 -0
  180. package/fesm2020/drag-drop.mjs +57 -50
  181. package/fesm2020/drag-drop.mjs.map +1 -1
  182. package/fesm2020/layout.mjs +10 -10
  183. package/fesm2020/layout.mjs.map +1 -1
  184. package/fesm2020/menu.mjs +1942 -0
  185. package/fesm2020/menu.mjs.map +1 -0
  186. package/fesm2020/observers.mjs +13 -13
  187. package/fesm2020/observers.mjs.map +1 -1
  188. package/fesm2020/overlay.mjs +57 -42
  189. package/fesm2020/overlay.mjs.map +1 -1
  190. package/fesm2020/platform.mjs +10 -10
  191. package/fesm2020/platform.mjs.map +1 -1
  192. package/fesm2020/portal.mjs +41 -20
  193. package/fesm2020/portal.mjs.map +1 -1
  194. package/fesm2020/scrolling.mjs +36 -34
  195. package/fesm2020/scrolling.mjs.map +1 -1
  196. package/fesm2020/stepper.mjs +22 -22
  197. package/fesm2020/stepper.mjs.map +1 -1
  198. package/fesm2020/table.mjs +80 -80
  199. package/fesm2020/table.mjs.map +1 -1
  200. package/fesm2020/testing/selenium-webdriver.mjs.map +1 -1
  201. package/fesm2020/testing/testbed.mjs +1 -1
  202. package/fesm2020/testing/testbed.mjs.map +1 -1
  203. package/fesm2020/testing.mjs.map +1 -1
  204. package/fesm2020/text-field.mjs +13 -13
  205. package/fesm2020/text-field.mjs.map +1 -1
  206. package/fesm2020/tree.mjs +25 -25
  207. package/fesm2020/tree.mjs.map +1 -1
  208. package/index.d.ts +6 -8
  209. package/keycodes/index.d.ts +247 -6
  210. package/layout/index.d.ts +91 -8
  211. package/menu/index.d.ts +893 -0
  212. package/observers/index.d.ts +89 -6
  213. package/overlay/_index.scss +4 -0
  214. package/overlay/index.d.ts +1202 -5
  215. package/overlay-prebuilt.css +1 -1
  216. package/package.json +34 -18
  217. package/platform/index.d.ts +104 -6
  218. package/portal/index.d.ts +325 -5
  219. package/schematics/index.d.ts +2 -1
  220. package/schematics/index.js +4 -4
  221. package/schematics/index.mjs +4 -4
  222. package/schematics/ng-add/index.js +1 -1
  223. package/schematics/ng-add/index.mjs +1 -1
  224. package/schematics/ng-update/data/constructor-checks.js +3 -3
  225. package/schematics/ng-update/data/constructor-checks.mjs +3 -3
  226. package/schematics/utils/ast/standalone.d.ts +26 -0
  227. package/schematics/utils/ast/standalone.js +191 -0
  228. package/schematics/utils/ast/standalone.mjs +191 -0
  229. package/schematics/utils/ast.js +5 -4
  230. package/schematics/utils/ast.mjs +5 -4
  231. package/schematics/utils/build-component.js +5 -5
  232. package/schematics/utils/build-component.mjs +5 -5
  233. package/schematics/utils/index.d.ts +1 -0
  234. package/schematics/utils/index.js +5 -1
  235. package/schematics/utils/index.mjs +5 -1
  236. package/schematics/utils/schematic-options.js +2 -2
  237. package/schematics/utils/schematic-options.mjs +2 -2
  238. package/scrolling/index.d.ts +647 -6
  239. package/stepper/index.d.ts +328 -6
  240. package/table/index.d.ts +1172 -5
  241. package/testing/index.d.ts +726 -5
  242. package/testing/selenium-webdriver/index.d.ts +134 -8
  243. package/testing/testbed/index.d.ts +161 -8
  244. package/text-field/index.d.ts +175 -6
  245. package/text-field-prebuilt.css +1 -1
  246. package/tree/index.d.ts +498 -6
  247. package/a11y/a11y-module.d.ts +0 -12
  248. package/a11y/a11y_public_index.d.ts +0 -4
  249. package/a11y/aria-describer/aria-describer.d.ts +0 -101
  250. package/a11y/aria-describer/aria-reference.d.ts +0 -22
  251. package/a11y/fake-event-detection.d.ts +0 -11
  252. package/a11y/focus-monitor/focus-monitor.d.ts +0 -209
  253. package/a11y/focus-trap/configurable-focus-trap-config.d.ts +0 -16
  254. package/a11y/focus-trap/configurable-focus-trap-factory.d.ts +0 -30
  255. package/a11y/focus-trap/configurable-focus-trap.d.ts +0 -33
  256. package/a11y/focus-trap/event-listener-inert-strategy.d.ts +0 -29
  257. package/a11y/focus-trap/focus-trap-inert-strategy.d.ts +0 -21
  258. package/a11y/focus-trap/focus-trap-manager.d.ts +0 -26
  259. package/a11y/focus-trap/focus-trap.d.ts +0 -163
  260. package/a11y/high-contrast-mode/high-contrast-mode-detector.d.ts +0 -48
  261. package/a11y/input-modality/input-modality-detector.d.ts +0 -99
  262. package/a11y/interactivity-checker/interactivity-checker.d.ts +0 -60
  263. package/a11y/key-manager/activedescendant-key-manager.d.ts +0 -35
  264. package/a11y/key-manager/focus-key-manager.d.ts +0 -37
  265. package/a11y/key-manager/list-key-manager.d.ts +0 -152
  266. package/a11y/live-announcer/live-announcer-tokens.d.ts +0 -22
  267. package/a11y/live-announcer/live-announcer.d.ts +0 -83
  268. package/a11y/package.json +0 -9
  269. package/a11y/public-api.d.ts +0 -25
  270. package/accordion/accordion-item.d.ts +0 -59
  271. package/accordion/accordion-module.d.ts +0 -8
  272. package/accordion/accordion.d.ts +0 -40
  273. package/accordion/accordion_public_index.d.ts +0 -4
  274. package/accordion/package.json +0 -9
  275. package/accordion/public-api.d.ts +0 -10
  276. package/bidi/bidi-module.d.ts +0 -7
  277. package/bidi/bidi_public_index.d.ts +0 -4
  278. package/bidi/dir-document-token.d.ts +0 -26
  279. package/bidi/dir.d.ts +0 -36
  280. package/bidi/directionality.d.ts +0 -26
  281. package/bidi/package.json +0 -9
  282. package/bidi/public-api.d.ts +0 -11
  283. package/clipboard/clipboard-module.d.ts +0 -7
  284. package/clipboard/clipboard.d.ts +0 -28
  285. package/clipboard/clipboard_public_index.d.ts +0 -4
  286. package/clipboard/copy-to-clipboard.d.ts +0 -49
  287. package/clipboard/package.json +0 -9
  288. package/clipboard/pending-copy.d.ts +0 -29
  289. package/clipboard/public-api.d.ts +0 -11
  290. package/coercion/array.d.ts +0 -10
  291. package/coercion/boolean-property.d.ts +0 -14
  292. package/coercion/css-pixel-value.d.ts +0 -9
  293. package/coercion/element.d.ts +0 -13
  294. package/coercion/number-property.d.ts +0 -20
  295. package/coercion/package.json +0 -9
  296. package/coercion/public-api.d.ts +0 -13
  297. package/coercion/string-array.d.ts +0 -25
  298. package/collections/array-data-source.d.ts +0 -16
  299. package/collections/collection-viewer.d.ts +0 -24
  300. package/collections/collections_public_index.d.ts +0 -4
  301. package/collections/data-source.d.ts +0 -30
  302. package/collections/dispose-view-repeater-strategy.d.ts +0 -22
  303. package/collections/package.json +0 -9
  304. package/collections/public-api.d.ts +0 -16
  305. package/collections/recycle-view-repeater-strategy.d.ts +0 -54
  306. package/collections/selection-model.d.ts +0 -95
  307. package/collections/tree-adapter.d.ts +0 -26
  308. package/collections/unique-selection-dispatcher.d.ts +0 -36
  309. package/collections/view-repeater.d.ts +0 -92
  310. package/drag-drop/client-rect.d.ts +0 -38
  311. package/drag-drop/clone-node.d.ts +0 -9
  312. package/drag-drop/directives/assertions.d.ts +0 -13
  313. package/drag-drop/directives/config.d.ts +0 -43
  314. package/drag-drop/directives/drag-handle.d.ts +0 -33
  315. package/drag-drop/directives/drag-placeholder.d.ts +0 -27
  316. package/drag-drop/directives/drag-preview.d.ts +0 -32
  317. package/drag-drop/directives/drag.d.ts +0 -160
  318. package/drag-drop/directives/drop-list-group.d.ts +0 -33
  319. package/drag-drop/directives/drop-list.d.ts +0 -123
  320. package/drag-drop/drag-drop-module.d.ts +0 -13
  321. package/drag-drop/drag-drop-registry.d.ts +0 -89
  322. package/drag-drop/drag-drop.d.ts +0 -36
  323. package/drag-drop/drag-drop_public_index.d.ts +0 -4
  324. package/drag-drop/drag-events.d.ts +0 -124
  325. package/drag-drop/drag-parent.d.ts +0 -15
  326. package/drag-drop/drag-ref.d.ts +0 -448
  327. package/drag-drop/drag-styling.d.ts +0 -42
  328. package/drag-drop/drag-utils.d.ts +0 -32
  329. package/drag-drop/drop-list-ref.d.ts +0 -312
  330. package/drag-drop/package.json +0 -9
  331. package/drag-drop/parent-position-tracker.d.ts +0 -39
  332. package/drag-drop/public-api.d.ts +0 -22
  333. package/drag-drop/transition-duration.d.ts +0 -9
  334. package/keycodes/keycodes.d.ts +0 -126
  335. package/keycodes/keycodes_public_index.d.ts +0 -4
  336. package/keycodes/modifiers.d.ts +0 -14
  337. package/keycodes/package.json +0 -9
  338. package/keycodes/public-api.d.ts +0 -9
  339. package/layout/breakpoints-observer.d.ts +0 -45
  340. package/layout/breakpoints.d.ts +0 -23
  341. package/layout/layout-module.d.ts +0 -6
  342. package/layout/layout_public_index.d.ts +0 -4
  343. package/layout/media-matcher.d.ts +0 -18
  344. package/layout/package.json +0 -9
  345. package/layout/public-api.d.ts +0 -11
  346. package/observers/observe-content.d.ts +0 -87
  347. package/observers/observers_public_index.d.ts +0 -4
  348. package/observers/package.json +0 -9
  349. package/observers/public-api.d.ts +0 -8
  350. package/overlay/dispatchers/base-overlay-dispatcher.d.ts +0 -24
  351. package/overlay/dispatchers/index.d.ts +0 -9
  352. package/overlay/dispatchers/overlay-keyboard-dispatcher.d.ts +0 -24
  353. package/overlay/dispatchers/overlay-outside-click-dispatcher.d.ts +0 -32
  354. package/overlay/fullscreen-overlay-container.d.ts +0 -35
  355. package/overlay/overlay-config.d.ts +0 -47
  356. package/overlay/overlay-container.d.ts +0 -25
  357. package/overlay/overlay-directives.d.ts +0 -148
  358. package/overlay/overlay-module.d.ts +0 -10
  359. package/overlay/overlay-ref.d.ts +0 -144
  360. package/overlay/overlay-reference.d.ts +0 -38
  361. package/overlay/overlay.d.ts +0 -75
  362. package/overlay/overlay_public_index.d.ts +0 -4
  363. package/overlay/package.json +0 -9
  364. package/overlay/position/connected-position.d.ts +0 -102
  365. package/overlay/position/flexible-connected-position-strategy.d.ts +0 -282
  366. package/overlay/position/global-position-strategy.d.ts +0 -99
  367. package/overlay/position/overlay-position-builder.d.ts +0 -32
  368. package/overlay/position/position-strategy.d.ts +0 -19
  369. package/overlay/position/scroll-clip.d.ts +0 -26
  370. package/overlay/public-api.d.ts +0 -23
  371. package/overlay/scroll/block-scroll-strategy.d.ts +0 -27
  372. package/overlay/scroll/close-scroll-strategy.d.ts +0 -40
  373. package/overlay/scroll/index.d.ts +0 -14
  374. package/overlay/scroll/noop-scroll-strategy.d.ts +0 -17
  375. package/overlay/scroll/reposition-scroll-strategy.d.ts +0 -39
  376. package/overlay/scroll/scroll-strategy-options.d.ts +0 -44
  377. package/overlay/scroll/scroll-strategy.d.ts +0 -25
  378. package/platform/features/input-types.d.ts +0 -9
  379. package/platform/features/passive-listeners.d.ts +0 -19
  380. package/platform/features/scrolling.d.ts +0 -32
  381. package/platform/features/shadow-dom.d.ts +0 -18
  382. package/platform/features/test-environment.d.ts +0 -9
  383. package/platform/package.json +0 -9
  384. package/platform/platform-module.d.ts +0 -6
  385. package/platform/platform.d.ts +0 -29
  386. package/platform/platform_public_index.d.ts +0 -4
  387. package/platform/public-api.d.ts +0 -14
  388. package/portal/dom-portal-outlet.d.ts +0 -60
  389. package/portal/package.json +0 -9
  390. package/portal/portal-directives.d.ts +0 -99
  391. package/portal/portal-errors.d.ts +0 -37
  392. package/portal/portal-injector.d.ts +0 -21
  393. package/portal/portal.d.ts +0 -140
  394. package/portal/portal_public_index.d.ts +0 -4
  395. package/portal/public-api.d.ts +0 -11
  396. package/public-api.d.ts +0 -8
  397. package/schematics/utils/vendored-ast-utils/index.d.ts +0 -70
  398. package/schematics/utils/vendored-ast-utils/index.js +0 -480
  399. package/schematics/utils/vendored-ast-utils/index.mjs +0 -480
  400. package/scrolling/fixed-size-virtual-scroll.d.ts +0 -97
  401. package/scrolling/package.json +0 -9
  402. package/scrolling/public-api.d.ts +0 -16
  403. package/scrolling/scroll-dispatcher.d.ts +0 -71
  404. package/scrolling/scrollable.d.ts +0 -85
  405. package/scrolling/scrolling-module.d.ts +0 -19
  406. package/scrolling/scrolling_public_index.d.ts +0 -4
  407. package/scrolling/viewport-ruler.d.ts +0 -63
  408. package/scrolling/virtual-for-of.d.ts +0 -117
  409. package/scrolling/virtual-scroll-repeater.d.ts +0 -16
  410. package/scrolling/virtual-scroll-strategy.d.ts +0 -38
  411. package/scrolling/virtual-scroll-viewport.d.ts +0 -147
  412. package/stepper/package.json +0 -9
  413. package/stepper/public-api.d.ts +0 -12
  414. package/stepper/step-header.d.ts +0 -18
  415. package/stepper/step-label.d.ts +0 -15
  416. package/stepper/stepper-button.d.ts +0 -20
  417. package/stepper/stepper-module.d.ts +0 -11
  418. package/stepper/stepper.d.ts +0 -233
  419. package/stepper/stepper_public_index.d.ts +0 -4
  420. package/table/can-stick.d.ts +0 -34
  421. package/table/cell.d.ts +0 -126
  422. package/table/coalesced-style-scheduler.d.ts +0 -46
  423. package/table/package.json +0 -9
  424. package/table/public-api.d.ts +0 -19
  425. package/table/row.d.ts +0 -175
  426. package/table/sticky-position-listener.d.ts +0 -31
  427. package/table/sticky-styler.d.ts +0 -126
  428. package/table/table-errors.d.ts +0 -48
  429. package/table/table-module.d.ts +0 -11
  430. package/table/table.d.ts +0 -494
  431. package/table/table_public_index.d.ts +0 -4
  432. package/table/text-column.d.ts +0 -73
  433. package/table/tokens.d.ts +0 -25
  434. package/testing/change-detection.d.ts +0 -83
  435. package/testing/component-harness.d.ts +0 -426
  436. package/testing/element-dimensions.d.ts +0 -16
  437. package/testing/harness-environment.d.ts +0 -62
  438. package/testing/package.json +0 -9
  439. package/testing/public-api.d.ts +0 -14
  440. package/testing/selenium-webdriver/package.json +0 -9
  441. package/testing/selenium-webdriver/public-api.d.ts +0 -9
  442. package/testing/selenium-webdriver/selenium-web-driver-element.d.ts +0 -91
  443. package/testing/selenium-webdriver/selenium-web-driver-harness-environment.d.ts +0 -66
  444. package/testing/selenium-webdriver/selenium-webdriver-keys.d.ts +0 -46
  445. package/testing/test-element-errors.d.ts +0 -12
  446. package/testing/test-element.d.ts +0 -135
  447. package/testing/testbed/fake-events/dispatch-events.d.ts +0 -39
  448. package/testing/testbed/fake-events/element-focus.d.ts +0 -18
  449. package/testing/testbed/fake-events/event-objects.d.ts +0 -39
  450. package/testing/testbed/fake-events/index.d.ts +0 -11
  451. package/testing/testbed/fake-events/type-in-element.d.ts +0 -41
  452. package/testing/testbed/package.json +0 -9
  453. package/testing/testbed/proxy-zone-types.d.ts +0 -29
  454. package/testing/testbed/public-api.d.ts +0 -9
  455. package/testing/testbed/task-state-zone-interceptor.d.ts +0 -37
  456. package/testing/testbed/testbed-harness-environment.d.ts +0 -64
  457. package/testing/testbed/unit-test-element.d.ts +0 -98
  458. package/testing/testbed/zone-types.d.ts +0 -22
  459. package/testing/text-filtering.d.ts +0 -13
  460. package/text-field/autofill.d.ts +0 -66
  461. package/text-field/autosize.d.ts +0 -95
  462. package/text-field/package.json +0 -9
  463. package/text-field/public-api.d.ts +0 -10
  464. package/text-field/text-field-module.d.ts +0 -8
  465. package/text-field/text-field_public_index.d.ts +0 -4
  466. package/tree/control/base-tree-control.d.ts +0 -54
  467. package/tree/control/flat-tree-control.d.ts +0 -34
  468. package/tree/control/nested-tree-control.d.ts +0 -31
  469. package/tree/control/tree-control.d.ts +0 -49
  470. package/tree/nested-node.d.ts +0 -38
  471. package/tree/node.d.ts +0 -40
  472. package/tree/outlet.d.ts +0 -26
  473. package/tree/package.json +0 -9
  474. package/tree/padding.d.ts +0 -60
  475. package/tree/public-api.d.ts +0 -19
  476. package/tree/toggle.d.ts +0 -25
  477. package/tree/tree-errors.d.ts +0 -32
  478. package/tree/tree-module.d.ts +0 -12
  479. package/tree/tree.d.ts +0 -128
  480. package/tree/tree_public_index.d.ts +0 -4
  481. package/version.d.ts +0 -10
@@ -25,13 +25,13 @@ exports.parse5 = void 0;
25
25
  __exportStar(require("./utils"), exports);
26
26
  __exportStar(require("./ng-update/public-api"), exports);
27
27
  __exportStar(require("./update-tool/public-api"), exports);
28
- // Re-exported so that Angular Material schematic code can consume the
29
- // vendored "@schematics/angular" AST utils.
30
- __exportStar(require("./utils/vendored-ast-utils"), exports);
28
+ // Re-exported so that Angular Material schematic code can consume the same AST utils as the CDK.
29
+ __exportStar(require("@schematics/angular/utility/ast-utils"), exports);
30
+ __exportStar(require("@schematics/angular/utility/ng-ast-utils"), exports);
31
31
  // Re-export parse5 from the CDK. Material schematics code cannot simply import
32
32
  // "parse5" because it could result in a different version. As long as we import
33
33
  // it from within the CDK, it will always be the correct version that is specified
34
34
  // in the CDK "package.json" as optional dependency.
35
35
  const parse5 = require("parse5");
36
36
  exports.parse5 = parse5;
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2RrL3NjaGVtYXRpY3MvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSCwwQ0FBd0I7QUFDeEIseURBQXVDO0FBQ3ZDLDJEQUF5QztBQUV6QyxzRUFBc0U7QUFDdEUsNENBQTRDO0FBQzVDLDZEQUEyQztBQUUzQywrRUFBK0U7QUFDL0UsZ0ZBQWdGO0FBQ2hGLGtGQUFrRjtBQUNsRixvREFBb0Q7QUFDcEQsaUNBQWlDO0FBQ3pCLHdCQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9uZy11cGRhdGUvcHVibGljLWFwaSc7XG5leHBvcnQgKiBmcm9tICcuL3VwZGF0ZS10b29sL3B1YmxpYy1hcGknO1xuXG4vLyBSZS1leHBvcnRlZCBzbyB0aGF0IEFuZ3VsYXIgTWF0ZXJpYWwgc2NoZW1hdGljIGNvZGUgY2FuIGNvbnN1bWUgdGhlXG4vLyB2ZW5kb3JlZCBcIkBzY2hlbWF0aWNzL2FuZ3VsYXJcIiBBU1QgdXRpbHMuXG5leHBvcnQgKiBmcm9tICcuL3V0aWxzL3ZlbmRvcmVkLWFzdC11dGlscyc7XG5cbi8vIFJlLWV4cG9ydCBwYXJzZTUgZnJvbSB0aGUgQ0RLLiBNYXRlcmlhbCBzY2hlbWF0aWNzIGNvZGUgY2Fubm90IHNpbXBseSBpbXBvcnRcbi8vIFwicGFyc2U1XCIgYmVjYXVzZSBpdCBjb3VsZCByZXN1bHQgaW4gYSBkaWZmZXJlbnQgdmVyc2lvbi4gQXMgbG9uZyBhcyB3ZSBpbXBvcnRcbi8vIGl0IGZyb20gd2l0aGluIHRoZSBDREssIGl0IHdpbGwgYWx3YXlzIGJlIHRoZSBjb3JyZWN0IHZlcnNpb24gdGhhdCBpcyBzcGVjaWZpZWRcbi8vIGluIHRoZSBDREsgXCJwYWNrYWdlLmpzb25cIiBhcyBvcHRpb25hbCBkZXBlbmRlbmN5LlxuaW1wb3J0ICogYXMgcGFyc2U1IGZyb20gJ3BhcnNlNSc7XG5leHBvcnQge3BhcnNlNX07XG4iXX0=
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2RrL3NjaGVtYXRpY3MvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSCwwQ0FBd0I7QUFDeEIseURBQXVDO0FBQ3ZDLDJEQUF5QztBQUV6QyxpR0FBaUc7QUFDakcsd0VBQXNEO0FBQ3RELDJFQUF5RDtBQUV6RCwrRUFBK0U7QUFDL0UsZ0ZBQWdGO0FBQ2hGLGtGQUFrRjtBQUNsRixvREFBb0Q7QUFDcEQsaUNBQWlDO0FBQ3pCLHdCQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9uZy11cGRhdGUvcHVibGljLWFwaSc7XG5leHBvcnQgKiBmcm9tICcuL3VwZGF0ZS10b29sL3B1YmxpYy1hcGknO1xuXG4vLyBSZS1leHBvcnRlZCBzbyB0aGF0IEFuZ3VsYXIgTWF0ZXJpYWwgc2NoZW1hdGljIGNvZGUgY2FuIGNvbnN1bWUgdGhlIHNhbWUgQVNUIHV0aWxzIGFzIHRoZSBDREsuXG5leHBvcnQgKiBmcm9tICdAc2NoZW1hdGljcy9hbmd1bGFyL3V0aWxpdHkvYXN0LXV0aWxzJztcbmV4cG9ydCAqIGZyb20gJ0BzY2hlbWF0aWNzL2FuZ3VsYXIvdXRpbGl0eS9uZy1hc3QtdXRpbHMnO1xuXG4vLyBSZS1leHBvcnQgcGFyc2U1IGZyb20gdGhlIENESy4gTWF0ZXJpYWwgc2NoZW1hdGljcyBjb2RlIGNhbm5vdCBzaW1wbHkgaW1wb3J0XG4vLyBcInBhcnNlNVwiIGJlY2F1c2UgaXQgY291bGQgcmVzdWx0IGluIGEgZGlmZmVyZW50IHZlcnNpb24uIEFzIGxvbmcgYXMgd2UgaW1wb3J0XG4vLyBpdCBmcm9tIHdpdGhpbiB0aGUgQ0RLLCBpdCB3aWxsIGFsd2F5cyBiZSB0aGUgY29ycmVjdCB2ZXJzaW9uIHRoYXQgaXMgc3BlY2lmaWVkXG4vLyBpbiB0aGUgQ0RLIFwicGFja2FnZS5qc29uXCIgYXMgb3B0aW9uYWwgZGVwZW5kZW5jeS5cbmltcG9ydCAqIGFzIHBhcnNlNSBmcm9tICdwYXJzZTUnO1xuZXhwb3J0IHtwYXJzZTV9O1xuIl19
@@ -28,7 +28,7 @@ function default_1() {
28
28
  // In order to align the CDK version with other Angular dependencies that are setup by
29
29
  // `@schematics/angular`, we use tilde instead of caret. This is default for Angular
30
30
  // dependencies in new CLI projects.
31
- (0, package_config_1.addPackageToPackageJson)(host, '@angular/cdk', `~14.0.0-next.8`);
31
+ (0, package_config_1.addPackageToPackageJson)(host, '@angular/cdk', `~14.0.0-rc.1`);
32
32
  // Add a task to run the package manager. This is necessary because we updated the
33
33
  // workspace "package.json" file and we want lock files to reflect the new version range.
34
34
  context.addTask(new tasks_1.NodePackageInstallTask());
@@ -28,7 +28,7 @@ function default_1() {
28
28
  // In order to align the CDK version with other Angular dependencies that are setup by
29
29
  // `@schematics/angular`, we use tilde instead of caret. This is default for Angular
30
30
  // dependencies in new CLI projects.
31
- (0, package_config_1.addPackageToPackageJson)(host, '@angular/cdk', `~14.0.0-next.8`);
31
+ (0, package_config_1.addPackageToPackageJson)(host, '@angular/cdk', `~14.0.0-rc.1`);
32
32
  // Add a task to run the package manager. This is necessary because we updated the
33
33
  // workspace "package.json" file and we want lock files to reflect the new version range.
34
34
  context.addTask(new tasks_1.NodePackageInstallTask());
@@ -18,8 +18,8 @@ exports.constructorChecks = {
18
18
  [target_version_1.TargetVersion.V13]: [
19
19
  {
20
20
  pr: 'https://github.com/angular/components/pull/23328',
21
- changes: ['CdkStepper']
22
- }
21
+ changes: ['CdkStepper'],
22
+ },
23
23
  ],
24
24
  [target_version_1.TargetVersion.V12]: [
25
25
  {
@@ -77,4 +77,4 @@ exports.constructorChecks = {
77
77
  [target_version_1.TargetVersion.V7]: [],
78
78
  [target_version_1.TargetVersion.V6]: [],
79
79
  };
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0b3ItY2hlY2tzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2Nkay9zY2hlbWF0aWNzL25nLXVwZGF0ZS9kYXRhL2NvbnN0cnVjdG9yLWNoZWNrcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7QUFFSCxxRUFBK0Q7QUFLL0Q7Ozs7R0FJRztBQUNVLFFBQUEsaUJBQWlCLEdBQWlEO0lBQzdFLENBQUMsOEJBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNuQjtZQUNFLEVBQUUsRUFBRSxrREFBa0Q7WUFDdEQsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO1NBQ3hCO0tBQ0Y7SUFDRCxDQUFDLDhCQUFhLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDbkI7WUFDRSxFQUFFLEVBQUUsa0RBQWtEO1lBQ3RELE9BQU8sRUFBRSxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUM7U0FDdEM7UUFDRDtZQUNFLEVBQUUsRUFBRSxvREFBb0Q7WUFDeEQsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO1NBQ3hCO0tBQ0Y7SUFDRCxDQUFDLDhCQUFhLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDbkI7WUFDRSxFQUFFLEVBQUUsa0RBQWtEO1lBQ3RELE9BQU8sRUFBRSxDQUFDLGtCQUFrQixFQUFFLGVBQWUsRUFBRSwwQkFBMEIsQ0FBQztTQUMzRTtRQUNEO1lBQ0UsRUFBRSxFQUFFLGtEQUFrRDtZQUN0RCxPQUFPLEVBQUUsQ0FBQyxhQUFhLENBQUM7U0FDekI7UUFDRDtZQUNFLEVBQUUsRUFBRSxrREFBa0Q7WUFDdEQsT0FBTyxFQUFFLENBQUMsb0JBQW9CLENBQUM7U0FDaEM7UUFDRDtZQUNFLEVBQUUsRUFBRSxrREFBa0Q7WUFDdEQsT0FBTyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsNEJBQTRCLEVBQUUsWUFBWSxFQUFFLFNBQVMsQ0FBQztTQUNyRjtLQUNGO0lBQ0QsQ0FBQyw4QkFBYSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ25CO1lBQ0UsRUFBRSxFQUFFLGtEQUFrRDtZQUN0RCxPQUFPLEVBQUUsQ0FBQyxVQUFVLENBQUM7U0FDdEI7S0FDRjtJQUNELENBQUMsOEJBQWEsQ0FBQyxFQUFFLENBQUMsRUFBRTtRQUNsQjtZQUNFLEVBQUUsRUFBRSxrREFBa0Q7WUFDdEQsT0FBTyxFQUFFLENBQUMsYUFBYSxDQUFDO1NBQ3pCO0tBQ0Y7SUFDRCxDQUFDLDhCQUFhLENBQUMsRUFBRSxDQUFDLEVBQUU7UUFDbEI7WUFDRSxFQUFFLEVBQUUsa0RBQWtEO1lBQ3RELE9BQU8sRUFBRTtnQkFDUCxTQUFTO2dCQUNULGFBQWE7Z0JBQ2IsMkJBQTJCO2dCQUMzQixtQ0FBbUM7Z0JBQ25DLHdCQUF3QjtnQkFDeEIsVUFBVTthQUNYO1NBQ0Y7S0FDRjtJQUNELENBQUMsOEJBQWEsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ3RCLENBQUMsOEJBQWEsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0NBQ3ZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtUYXJnZXRWZXJzaW9ufSBmcm9tICcuLi8uLi91cGRhdGUtdG9vbC90YXJnZXQtdmVyc2lvbic7XG5pbXBvcnQge1ZlcnNpb25DaGFuZ2VzfSBmcm9tICcuLi8uLi91cGRhdGUtdG9vbC92ZXJzaW9uLWNoYW5nZXMnO1xuXG5leHBvcnQgdHlwZSBDb25zdHJ1Y3RvckNoZWNrc1VwZ3JhZGVEYXRhID0gc3RyaW5nO1xuXG4vKipcbiAqIExpc3Qgb2YgY2xhc3MgbmFtZXMgZm9yIHdoaWNoIHRoZSBjb25zdHJ1Y3RvciBzaWduYXR1cmUgaGFzIGJlZW4gY2hhbmdlZC4gVGhlIG5ldyBjb25zdHJ1Y3RvclxuICogc2lnbmF0dXJlIHR5cGVzIGRvbid0IG5lZWQgdG8gYmUgc3RvcmVkIGhlcmUgYmVjYXVzZSB0aGUgc2lnbmF0dXJlIHdpbGwgYmUgZGV0ZXJtaW5lZFxuICogYXV0b21hdGljYWxseSB0aHJvdWdoIHR5cGUgY2hlY2tpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBjb25zdHJ1Y3RvckNoZWNrczogVmVyc2lvbkNoYW5nZXM8Q29uc3RydWN0b3JDaGVja3NVcGdyYWRlRGF0YT4gPSB7XG4gIFtUYXJnZXRWZXJzaW9uLlYxM106IFtcbiAgICB7XG4gICAgICBwcjogJ2h0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2NvbXBvbmVudHMvcHVsbC8yMzMyOCcsXG4gICAgICBjaGFuZ2VzOiBbJ0Nka1N0ZXBwZXInXVxuICAgIH1cbiAgXSxcbiAgW1RhcmdldFZlcnNpb24uVjEyXTogW1xuICAgIHtcbiAgICAgIHByOiAnaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9wdWxsLzIxODc2JyxcbiAgICAgIGNoYW5nZXM6IFsnQ2RrVGFibGUnLCAnU3RpY2t5U3R5bGVyJ10sXG4gICAgfSxcbiAgICB7XG4gICAgICBwcjogJ2h0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2NvbXBvbmVudHMvaXNzdWVzLzIxOTAwJyxcbiAgICAgIGNoYW5nZXM6IFsnQ2RrU3RlcHBlciddLFxuICAgIH0sXG4gIF0sXG4gIFtUYXJnZXRWZXJzaW9uLlYxMV06IFtcbiAgICB7XG4gICAgICBwcjogJ2h0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2NvbXBvbmVudHMvcHVsbC8yMDQ1NCcsXG4gICAgICBjaGFuZ2VzOiBbJ1Njcm9sbERpc3BhdGNoZXInLCAnVmlld3BvcnRSdWxlcicsICdDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQnXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByOiAnaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9wdWxsLzIwNTAwJyxcbiAgICAgIGNoYW5nZXM6IFsnQ2RrRHJvcExpc3QnXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByOiAnaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9wdWxsLzIwNTcyJyxcbiAgICAgIGNoYW5nZXM6IFsnQ2RrVHJlZU5vZGVQYWRkaW5nJ10sXG4gICAgfSxcbiAgICB7XG4gICAgICBwcjogJ2h0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2NvbXBvbmVudHMvcHVsbC8yMDUxMScsXG4gICAgICBjaGFuZ2VzOiBbJ092ZXJsYXlDb250YWluZXInLCAnRnVsbHNjcmVlbk92ZXJsYXlDb250YWluZXInLCAnT3ZlcmxheVJlZicsICdPdmVybGF5J10sXG4gICAgfSxcbiAgXSxcbiAgW1RhcmdldFZlcnNpb24uVjEwXTogW1xuICAgIHtcbiAgICAgIHByOiAnaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9wdWxsLzE5MzQ3JyxcbiAgICAgIGNoYW5nZXM6IFsnUGxhdGZvcm0nXSxcbiAgICB9LFxuICBdLFxuICBbVGFyZ2V0VmVyc2lvbi5WOV06IFtcbiAgICB7XG4gICAgICBwcjogJ2h0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2NvbXBvbmVudHMvcHVsbC8xNzA4NCcsXG4gICAgICBjaGFuZ2VzOiBbJ0Ryb3BMaXN0UmVmJ10sXG4gICAgfSxcbiAgXSxcbiAgW1RhcmdldFZlcnNpb24uVjhdOiBbXG4gICAge1xuICAgICAgcHI6ICdodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9jb21wb25lbnRzL3B1bGwvMTU2NDcnLFxuICAgICAgY2hhbmdlczogW1xuICAgICAgICAnQ2RrRHJhZycsXG4gICAgICAgICdDZGtEcm9wTGlzdCcsXG4gICAgICAgICdDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5JyxcbiAgICAgICAgJ0ZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneScsXG4gICAgICAgICdPdmVybGF5UG9zaXRpb25CdWlsZGVyJyxcbiAgICAgICAgJ0Nka1RhYmxlJyxcbiAgICAgIF0sXG4gICAgfSxcbiAgXSxcbiAgW1RhcmdldFZlcnNpb24uVjddOiBbXSxcbiAgW1RhcmdldFZlcnNpb24uVjZdOiBbXSxcbn07XG4iXX0=
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0b3ItY2hlY2tzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2Nkay9zY2hlbWF0aWNzL25nLXVwZGF0ZS9kYXRhL2NvbnN0cnVjdG9yLWNoZWNrcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7QUFFSCxxRUFBK0Q7QUFLL0Q7Ozs7R0FJRztBQUNVLFFBQUEsaUJBQWlCLEdBQWlEO0lBQzdFLENBQUMsOEJBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNuQjtZQUNFLEVBQUUsRUFBRSxrREFBa0Q7WUFDdEQsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO1NBQ3hCO0tBQ0Y7SUFDRCxDQUFDLDhCQUFhLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDbkI7WUFDRSxFQUFFLEVBQUUsa0RBQWtEO1lBQ3RELE9BQU8sRUFBRSxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUM7U0FDdEM7UUFDRDtZQUNFLEVBQUUsRUFBRSxvREFBb0Q7WUFDeEQsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO1NBQ3hCO0tBQ0Y7SUFDRCxDQUFDLDhCQUFhLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDbkI7WUFDRSxFQUFFLEVBQUUsa0RBQWtEO1lBQ3RELE9BQU8sRUFBRSxDQUFDLGtCQUFrQixFQUFFLGVBQWUsRUFBRSwwQkFBMEIsQ0FBQztTQUMzRTtRQUNEO1lBQ0UsRUFBRSxFQUFFLGtEQUFrRDtZQUN0RCxPQUFPLEVBQUUsQ0FBQyxhQUFhLENBQUM7U0FDekI7UUFDRDtZQUNFLEVBQUUsRUFBRSxrREFBa0Q7WUFDdEQsT0FBTyxFQUFFLENBQUMsb0JBQW9CLENBQUM7U0FDaEM7UUFDRDtZQUNFLEVBQUUsRUFBRSxrREFBa0Q7WUFDdEQsT0FBTyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsNEJBQTRCLEVBQUUsWUFBWSxFQUFFLFNBQVMsQ0FBQztTQUNyRjtLQUNGO0lBQ0QsQ0FBQyw4QkFBYSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ25CO1lBQ0UsRUFBRSxFQUFFLGtEQUFrRDtZQUN0RCxPQUFPLEVBQUUsQ0FBQyxVQUFVLENBQUM7U0FDdEI7S0FDRjtJQUNELENBQUMsOEJBQWEsQ0FBQyxFQUFFLENBQUMsRUFBRTtRQUNsQjtZQUNFLEVBQUUsRUFBRSxrREFBa0Q7WUFDdEQsT0FBTyxFQUFFLENBQUMsYUFBYSxDQUFDO1NBQ3pCO0tBQ0Y7SUFDRCxDQUFDLDhCQUFhLENBQUMsRUFBRSxDQUFDLEVBQUU7UUFDbEI7WUFDRSxFQUFFLEVBQUUsa0RBQWtEO1lBQ3RELE9BQU8sRUFBRTtnQkFDUCxTQUFTO2dCQUNULGFBQWE7Z0JBQ2IsMkJBQTJCO2dCQUMzQixtQ0FBbUM7Z0JBQ25DLHdCQUF3QjtnQkFDeEIsVUFBVTthQUNYO1NBQ0Y7S0FDRjtJQUNELENBQUMsOEJBQWEsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ3RCLENBQUMsOEJBQWEsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0NBQ3ZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtUYXJnZXRWZXJzaW9ufSBmcm9tICcuLi8uLi91cGRhdGUtdG9vbC90YXJnZXQtdmVyc2lvbic7XG5pbXBvcnQge1ZlcnNpb25DaGFuZ2VzfSBmcm9tICcuLi8uLi91cGRhdGUtdG9vbC92ZXJzaW9uLWNoYW5nZXMnO1xuXG5leHBvcnQgdHlwZSBDb25zdHJ1Y3RvckNoZWNrc1VwZ3JhZGVEYXRhID0gc3RyaW5nO1xuXG4vKipcbiAqIExpc3Qgb2YgY2xhc3MgbmFtZXMgZm9yIHdoaWNoIHRoZSBjb25zdHJ1Y3RvciBzaWduYXR1cmUgaGFzIGJlZW4gY2hhbmdlZC4gVGhlIG5ldyBjb25zdHJ1Y3RvclxuICogc2lnbmF0dXJlIHR5cGVzIGRvbid0IG5lZWQgdG8gYmUgc3RvcmVkIGhlcmUgYmVjYXVzZSB0aGUgc2lnbmF0dXJlIHdpbGwgYmUgZGV0ZXJtaW5lZFxuICogYXV0b21hdGljYWxseSB0aHJvdWdoIHR5cGUgY2hlY2tpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBjb25zdHJ1Y3RvckNoZWNrczogVmVyc2lvbkNoYW5nZXM8Q29uc3RydWN0b3JDaGVja3NVcGdyYWRlRGF0YT4gPSB7XG4gIFtUYXJnZXRWZXJzaW9uLlYxM106IFtcbiAgICB7XG4gICAgICBwcjogJ2h0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2NvbXBvbmVudHMvcHVsbC8yMzMyOCcsXG4gICAgICBjaGFuZ2VzOiBbJ0Nka1N0ZXBwZXInXSxcbiAgICB9LFxuICBdLFxuICBbVGFyZ2V0VmVyc2lvbi5WMTJdOiBbXG4gICAge1xuICAgICAgcHI6ICdodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9jb21wb25lbnRzL3B1bGwvMjE4NzYnLFxuICAgICAgY2hhbmdlczogWydDZGtUYWJsZScsICdTdGlja3lTdHlsZXInXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByOiAnaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9pc3N1ZXMvMjE5MDAnLFxuICAgICAgY2hhbmdlczogWydDZGtTdGVwcGVyJ10sXG4gICAgfSxcbiAgXSxcbiAgW1RhcmdldFZlcnNpb24uVjExXTogW1xuICAgIHtcbiAgICAgIHByOiAnaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9wdWxsLzIwNDU0JyxcbiAgICAgIGNoYW5nZXM6IFsnU2Nyb2xsRGlzcGF0Y2hlcicsICdWaWV3cG9ydFJ1bGVyJywgJ0Nka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCddLFxuICAgIH0sXG4gICAge1xuICAgICAgcHI6ICdodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9jb21wb25lbnRzL3B1bGwvMjA1MDAnLFxuICAgICAgY2hhbmdlczogWydDZGtEcm9wTGlzdCddLFxuICAgIH0sXG4gICAge1xuICAgICAgcHI6ICdodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9jb21wb25lbnRzL3B1bGwvMjA1NzInLFxuICAgICAgY2hhbmdlczogWydDZGtUcmVlTm9kZVBhZGRpbmcnXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByOiAnaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9wdWxsLzIwNTExJyxcbiAgICAgIGNoYW5nZXM6IFsnT3ZlcmxheUNvbnRhaW5lcicsICdGdWxsc2NyZWVuT3ZlcmxheUNvbnRhaW5lcicsICdPdmVybGF5UmVmJywgJ092ZXJsYXknXSxcbiAgICB9LFxuICBdLFxuICBbVGFyZ2V0VmVyc2lvbi5WMTBdOiBbXG4gICAge1xuICAgICAgcHI6ICdodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9jb21wb25lbnRzL3B1bGwvMTkzNDcnLFxuICAgICAgY2hhbmdlczogWydQbGF0Zm9ybSddLFxuICAgIH0sXG4gIF0sXG4gIFtUYXJnZXRWZXJzaW9uLlY5XTogW1xuICAgIHtcbiAgICAgIHByOiAnaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9wdWxsLzE3MDg0JyxcbiAgICAgIGNoYW5nZXM6IFsnRHJvcExpc3RSZWYnXSxcbiAgICB9LFxuICBdLFxuICBbVGFyZ2V0VmVyc2lvbi5WOF06IFtcbiAgICB7XG4gICAgICBwcjogJ2h0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2NvbXBvbmVudHMvcHVsbC8xNTY0NycsXG4gICAgICBjaGFuZ2VzOiBbXG4gICAgICAgICdDZGtEcmFnJyxcbiAgICAgICAgJ0Nka0Ryb3BMaXN0JyxcbiAgICAgICAgJ0Nvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3knLFxuICAgICAgICAnRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5JyxcbiAgICAgICAgJ092ZXJsYXlQb3NpdGlvbkJ1aWxkZXInLFxuICAgICAgICAnQ2RrVGFibGUnLFxuICAgICAgXSxcbiAgICB9LFxuICBdLFxuICBbVGFyZ2V0VmVyc2lvbi5WN106IFtdLFxuICBbVGFyZ2V0VmVyc2lvbi5WNl06IFtdLFxufTtcbiJdfQ==
@@ -18,8 +18,8 @@ exports.constructorChecks = {
18
18
  [target_version_1.TargetVersion.V13]: [
19
19
  {
20
20
  pr: 'https://github.com/angular/components/pull/23328',
21
- changes: ['CdkStepper']
22
- }
21
+ changes: ['CdkStepper'],
22
+ },
23
23
  ],
24
24
  [target_version_1.TargetVersion.V12]: [
25
25
  {
@@ -77,4 +77,4 @@ exports.constructorChecks = {
77
77
  [target_version_1.TargetVersion.V7]: [],
78
78
  [target_version_1.TargetVersion.V6]: [],
79
79
  };
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0b3ItY2hlY2tzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2Nkay9zY2hlbWF0aWNzL25nLXVwZGF0ZS9kYXRhL2NvbnN0cnVjdG9yLWNoZWNrcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7QUFFSCxxRUFBK0Q7QUFLL0Q7Ozs7R0FJRztBQUNVLFFBQUEsaUJBQWlCLEdBQWlEO0lBQzdFLENBQUMsOEJBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNuQjtZQUNFLEVBQUUsRUFBRSxrREFBa0Q7WUFDdEQsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO1NBQ3hCO0tBQ0Y7SUFDRCxDQUFDLDhCQUFhLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDbkI7WUFDRSxFQUFFLEVBQUUsa0RBQWtEO1lBQ3RELE9BQU8sRUFBRSxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUM7U0FDdEM7UUFDRDtZQUNFLEVBQUUsRUFBRSxvREFBb0Q7WUFDeEQsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO1NBQ3hCO0tBQ0Y7SUFDRCxDQUFDLDhCQUFhLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDbkI7WUFDRSxFQUFFLEVBQUUsa0RBQWtEO1lBQ3RELE9BQU8sRUFBRSxDQUFDLGtCQUFrQixFQUFFLGVBQWUsRUFBRSwwQkFBMEIsQ0FBQztTQUMzRTtRQUNEO1lBQ0UsRUFBRSxFQUFFLGtEQUFrRDtZQUN0RCxPQUFPLEVBQUUsQ0FBQyxhQUFhLENBQUM7U0FDekI7UUFDRDtZQUNFLEVBQUUsRUFBRSxrREFBa0Q7WUFDdEQsT0FBTyxFQUFFLENBQUMsb0JBQW9CLENBQUM7U0FDaEM7UUFDRDtZQUNFLEVBQUUsRUFBRSxrREFBa0Q7WUFDdEQsT0FBTyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsNEJBQTRCLEVBQUUsWUFBWSxFQUFFLFNBQVMsQ0FBQztTQUNyRjtLQUNGO0lBQ0QsQ0FBQyw4QkFBYSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ25CO1lBQ0UsRUFBRSxFQUFFLGtEQUFrRDtZQUN0RCxPQUFPLEVBQUUsQ0FBQyxVQUFVLENBQUM7U0FDdEI7S0FDRjtJQUNELENBQUMsOEJBQWEsQ0FBQyxFQUFFLENBQUMsRUFBRTtRQUNsQjtZQUNFLEVBQUUsRUFBRSxrREFBa0Q7WUFDdEQsT0FBTyxFQUFFLENBQUMsYUFBYSxDQUFDO1NBQ3pCO0tBQ0Y7SUFDRCxDQUFDLDhCQUFhLENBQUMsRUFBRSxDQUFDLEVBQUU7UUFDbEI7WUFDRSxFQUFFLEVBQUUsa0RBQWtEO1lBQ3RELE9BQU8sRUFBRTtnQkFDUCxTQUFTO2dCQUNULGFBQWE7Z0JBQ2IsMkJBQTJCO2dCQUMzQixtQ0FBbUM7Z0JBQ25DLHdCQUF3QjtnQkFDeEIsVUFBVTthQUNYO1NBQ0Y7S0FDRjtJQUNELENBQUMsOEJBQWEsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ3RCLENBQUMsOEJBQWEsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0NBQ3ZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtUYXJnZXRWZXJzaW9ufSBmcm9tICcuLi8uLi91cGRhdGUtdG9vbC90YXJnZXQtdmVyc2lvbic7XG5pbXBvcnQge1ZlcnNpb25DaGFuZ2VzfSBmcm9tICcuLi8uLi91cGRhdGUtdG9vbC92ZXJzaW9uLWNoYW5nZXMnO1xuXG5leHBvcnQgdHlwZSBDb25zdHJ1Y3RvckNoZWNrc1VwZ3JhZGVEYXRhID0gc3RyaW5nO1xuXG4vKipcbiAqIExpc3Qgb2YgY2xhc3MgbmFtZXMgZm9yIHdoaWNoIHRoZSBjb25zdHJ1Y3RvciBzaWduYXR1cmUgaGFzIGJlZW4gY2hhbmdlZC4gVGhlIG5ldyBjb25zdHJ1Y3RvclxuICogc2lnbmF0dXJlIHR5cGVzIGRvbid0IG5lZWQgdG8gYmUgc3RvcmVkIGhlcmUgYmVjYXVzZSB0aGUgc2lnbmF0dXJlIHdpbGwgYmUgZGV0ZXJtaW5lZFxuICogYXV0b21hdGljYWxseSB0aHJvdWdoIHR5cGUgY2hlY2tpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBjb25zdHJ1Y3RvckNoZWNrczogVmVyc2lvbkNoYW5nZXM8Q29uc3RydWN0b3JDaGVja3NVcGdyYWRlRGF0YT4gPSB7XG4gIFtUYXJnZXRWZXJzaW9uLlYxM106IFtcbiAgICB7XG4gICAgICBwcjogJ2h0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2NvbXBvbmVudHMvcHVsbC8yMzMyOCcsXG4gICAgICBjaGFuZ2VzOiBbJ0Nka1N0ZXBwZXInXVxuICAgIH1cbiAgXSxcbiAgW1RhcmdldFZlcnNpb24uVjEyXTogW1xuICAgIHtcbiAgICAgIHByOiAnaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9wdWxsLzIxODc2JyxcbiAgICAgIGNoYW5nZXM6IFsnQ2RrVGFibGUnLCAnU3RpY2t5U3R5bGVyJ10sXG4gICAgfSxcbiAgICB7XG4gICAgICBwcjogJ2h0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2NvbXBvbmVudHMvaXNzdWVzLzIxOTAwJyxcbiAgICAgIGNoYW5nZXM6IFsnQ2RrU3RlcHBlciddLFxuICAgIH0sXG4gIF0sXG4gIFtUYXJnZXRWZXJzaW9uLlYxMV06IFtcbiAgICB7XG4gICAgICBwcjogJ2h0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2NvbXBvbmVudHMvcHVsbC8yMDQ1NCcsXG4gICAgICBjaGFuZ2VzOiBbJ1Njcm9sbERpc3BhdGNoZXInLCAnVmlld3BvcnRSdWxlcicsICdDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQnXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByOiAnaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9wdWxsLzIwNTAwJyxcbiAgICAgIGNoYW5nZXM6IFsnQ2RrRHJvcExpc3QnXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByOiAnaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9wdWxsLzIwNTcyJyxcbiAgICAgIGNoYW5nZXM6IFsnQ2RrVHJlZU5vZGVQYWRkaW5nJ10sXG4gICAgfSxcbiAgICB7XG4gICAgICBwcjogJ2h0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2NvbXBvbmVudHMvcHVsbC8yMDUxMScsXG4gICAgICBjaGFuZ2VzOiBbJ092ZXJsYXlDb250YWluZXInLCAnRnVsbHNjcmVlbk92ZXJsYXlDb250YWluZXInLCAnT3ZlcmxheVJlZicsICdPdmVybGF5J10sXG4gICAgfSxcbiAgXSxcbiAgW1RhcmdldFZlcnNpb24uVjEwXTogW1xuICAgIHtcbiAgICAgIHByOiAnaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9wdWxsLzE5MzQ3JyxcbiAgICAgIGNoYW5nZXM6IFsnUGxhdGZvcm0nXSxcbiAgICB9LFxuICBdLFxuICBbVGFyZ2V0VmVyc2lvbi5WOV06IFtcbiAgICB7XG4gICAgICBwcjogJ2h0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2NvbXBvbmVudHMvcHVsbC8xNzA4NCcsXG4gICAgICBjaGFuZ2VzOiBbJ0Ryb3BMaXN0UmVmJ10sXG4gICAgfSxcbiAgXSxcbiAgW1RhcmdldFZlcnNpb24uVjhdOiBbXG4gICAge1xuICAgICAgcHI6ICdodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9jb21wb25lbnRzL3B1bGwvMTU2NDcnLFxuICAgICAgY2hhbmdlczogW1xuICAgICAgICAnQ2RrRHJhZycsXG4gICAgICAgICdDZGtEcm9wTGlzdCcsXG4gICAgICAgICdDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5JyxcbiAgICAgICAgJ0ZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneScsXG4gICAgICAgICdPdmVybGF5UG9zaXRpb25CdWlsZGVyJyxcbiAgICAgICAgJ0Nka1RhYmxlJyxcbiAgICAgIF0sXG4gICAgfSxcbiAgXSxcbiAgW1RhcmdldFZlcnNpb24uVjddOiBbXSxcbiAgW1RhcmdldFZlcnNpb24uVjZdOiBbXSxcbn07XG4iXX0=
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RydWN0b3ItY2hlY2tzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2Nkay9zY2hlbWF0aWNzL25nLXVwZGF0ZS9kYXRhL2NvbnN0cnVjdG9yLWNoZWNrcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7QUFFSCxxRUFBK0Q7QUFLL0Q7Ozs7R0FJRztBQUNVLFFBQUEsaUJBQWlCLEdBQWlEO0lBQzdFLENBQUMsOEJBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNuQjtZQUNFLEVBQUUsRUFBRSxrREFBa0Q7WUFDdEQsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO1NBQ3hCO0tBQ0Y7SUFDRCxDQUFDLDhCQUFhLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDbkI7WUFDRSxFQUFFLEVBQUUsa0RBQWtEO1lBQ3RELE9BQU8sRUFBRSxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUM7U0FDdEM7UUFDRDtZQUNFLEVBQUUsRUFBRSxvREFBb0Q7WUFDeEQsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO1NBQ3hCO0tBQ0Y7SUFDRCxDQUFDLDhCQUFhLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDbkI7WUFDRSxFQUFFLEVBQUUsa0RBQWtEO1lBQ3RELE9BQU8sRUFBRSxDQUFDLGtCQUFrQixFQUFFLGVBQWUsRUFBRSwwQkFBMEIsQ0FBQztTQUMzRTtRQUNEO1lBQ0UsRUFBRSxFQUFFLGtEQUFrRDtZQUN0RCxPQUFPLEVBQUUsQ0FBQyxhQUFhLENBQUM7U0FDekI7UUFDRDtZQUNFLEVBQUUsRUFBRSxrREFBa0Q7WUFDdEQsT0FBTyxFQUFFLENBQUMsb0JBQW9CLENBQUM7U0FDaEM7UUFDRDtZQUNFLEVBQUUsRUFBRSxrREFBa0Q7WUFDdEQsT0FBTyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsNEJBQTRCLEVBQUUsWUFBWSxFQUFFLFNBQVMsQ0FBQztTQUNyRjtLQUNGO0lBQ0QsQ0FBQyw4QkFBYSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ25CO1lBQ0UsRUFBRSxFQUFFLGtEQUFrRDtZQUN0RCxPQUFPLEVBQUUsQ0FBQyxVQUFVLENBQUM7U0FDdEI7S0FDRjtJQUNELENBQUMsOEJBQWEsQ0FBQyxFQUFFLENBQUMsRUFBRTtRQUNsQjtZQUNFLEVBQUUsRUFBRSxrREFBa0Q7WUFDdEQsT0FBTyxFQUFFLENBQUMsYUFBYSxDQUFDO1NBQ3pCO0tBQ0Y7SUFDRCxDQUFDLDhCQUFhLENBQUMsRUFBRSxDQUFDLEVBQUU7UUFDbEI7WUFDRSxFQUFFLEVBQUUsa0RBQWtEO1lBQ3RELE9BQU8sRUFBRTtnQkFDUCxTQUFTO2dCQUNULGFBQWE7Z0JBQ2IsMkJBQTJCO2dCQUMzQixtQ0FBbUM7Z0JBQ25DLHdCQUF3QjtnQkFDeEIsVUFBVTthQUNYO1NBQ0Y7S0FDRjtJQUNELENBQUMsOEJBQWEsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ3RCLENBQUMsOEJBQWEsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0NBQ3ZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtUYXJnZXRWZXJzaW9ufSBmcm9tICcuLi8uLi91cGRhdGUtdG9vbC90YXJnZXQtdmVyc2lvbic7XG5pbXBvcnQge1ZlcnNpb25DaGFuZ2VzfSBmcm9tICcuLi8uLi91cGRhdGUtdG9vbC92ZXJzaW9uLWNoYW5nZXMnO1xuXG5leHBvcnQgdHlwZSBDb25zdHJ1Y3RvckNoZWNrc1VwZ3JhZGVEYXRhID0gc3RyaW5nO1xuXG4vKipcbiAqIExpc3Qgb2YgY2xhc3MgbmFtZXMgZm9yIHdoaWNoIHRoZSBjb25zdHJ1Y3RvciBzaWduYXR1cmUgaGFzIGJlZW4gY2hhbmdlZC4gVGhlIG5ldyBjb25zdHJ1Y3RvclxuICogc2lnbmF0dXJlIHR5cGVzIGRvbid0IG5lZWQgdG8gYmUgc3RvcmVkIGhlcmUgYmVjYXVzZSB0aGUgc2lnbmF0dXJlIHdpbGwgYmUgZGV0ZXJtaW5lZFxuICogYXV0b21hdGljYWxseSB0aHJvdWdoIHR5cGUgY2hlY2tpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBjb25zdHJ1Y3RvckNoZWNrczogVmVyc2lvbkNoYW5nZXM8Q29uc3RydWN0b3JDaGVja3NVcGdyYWRlRGF0YT4gPSB7XG4gIFtUYXJnZXRWZXJzaW9uLlYxM106IFtcbiAgICB7XG4gICAgICBwcjogJ2h0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2NvbXBvbmVudHMvcHVsbC8yMzMyOCcsXG4gICAgICBjaGFuZ2VzOiBbJ0Nka1N0ZXBwZXInXSxcbiAgICB9LFxuICBdLFxuICBbVGFyZ2V0VmVyc2lvbi5WMTJdOiBbXG4gICAge1xuICAgICAgcHI6ICdodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9jb21wb25lbnRzL3B1bGwvMjE4NzYnLFxuICAgICAgY2hhbmdlczogWydDZGtUYWJsZScsICdTdGlja3lTdHlsZXInXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByOiAnaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9pc3N1ZXMvMjE5MDAnLFxuICAgICAgY2hhbmdlczogWydDZGtTdGVwcGVyJ10sXG4gICAgfSxcbiAgXSxcbiAgW1RhcmdldFZlcnNpb24uVjExXTogW1xuICAgIHtcbiAgICAgIHByOiAnaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9wdWxsLzIwNDU0JyxcbiAgICAgIGNoYW5nZXM6IFsnU2Nyb2xsRGlzcGF0Y2hlcicsICdWaWV3cG9ydFJ1bGVyJywgJ0Nka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCddLFxuICAgIH0sXG4gICAge1xuICAgICAgcHI6ICdodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9jb21wb25lbnRzL3B1bGwvMjA1MDAnLFxuICAgICAgY2hhbmdlczogWydDZGtEcm9wTGlzdCddLFxuICAgIH0sXG4gICAge1xuICAgICAgcHI6ICdodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9jb21wb25lbnRzL3B1bGwvMjA1NzInLFxuICAgICAgY2hhbmdlczogWydDZGtUcmVlTm9kZVBhZGRpbmcnXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByOiAnaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9wdWxsLzIwNTExJyxcbiAgICAgIGNoYW5nZXM6IFsnT3ZlcmxheUNvbnRhaW5lcicsICdGdWxsc2NyZWVuT3ZlcmxheUNvbnRhaW5lcicsICdPdmVybGF5UmVmJywgJ092ZXJsYXknXSxcbiAgICB9LFxuICBdLFxuICBbVGFyZ2V0VmVyc2lvbi5WMTBdOiBbXG4gICAge1xuICAgICAgcHI6ICdodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9jb21wb25lbnRzL3B1bGwvMTkzNDcnLFxuICAgICAgY2hhbmdlczogWydQbGF0Zm9ybSddLFxuICAgIH0sXG4gIF0sXG4gIFtUYXJnZXRWZXJzaW9uLlY5XTogW1xuICAgIHtcbiAgICAgIHByOiAnaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9wdWxsLzE3MDg0JyxcbiAgICAgIGNoYW5nZXM6IFsnRHJvcExpc3RSZWYnXSxcbiAgICB9LFxuICBdLFxuICBbVGFyZ2V0VmVyc2lvbi5WOF06IFtcbiAgICB7XG4gICAgICBwcjogJ2h0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2NvbXBvbmVudHMvcHVsbC8xNTY0NycsXG4gICAgICBjaGFuZ2VzOiBbXG4gICAgICAgICdDZGtEcmFnJyxcbiAgICAgICAgJ0Nka0Ryb3BMaXN0JyxcbiAgICAgICAgJ0Nvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3knLFxuICAgICAgICAnRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5JyxcbiAgICAgICAgJ092ZXJsYXlQb3NpdGlvbkJ1aWxkZXInLFxuICAgICAgICAnQ2RrVGFibGUnLFxuICAgICAgXSxcbiAgICB9LFxuICBdLFxuICBbVGFyZ2V0VmVyc2lvbi5WN106IFtdLFxuICBbVGFyZ2V0VmVyc2lvbi5WNl06IFtdLFxufTtcbiJdfQ==
@@ -0,0 +1,26 @@
1
+ /**
2
+ * @license
3
+ * Copyright Google LLC All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be
6
+ * found in the LICENSE file at https://angular.io/license
7
+ */
8
+ import { Tree } from '@angular-devkit/schematics';
9
+ import * as ts from 'typescript';
10
+ /**
11
+ * Checks whether the providers from a module are being imported in a `bootstrapApplication` call.
12
+ * @param tree File tree of the project.
13
+ * @param filePath Path of the file in which to check.
14
+ * @param className Class name of the module to search for.
15
+ */
16
+ export declare function importsProvidersFrom(tree: Tree, filePath: string, className: string): boolean;
17
+ /**
18
+ * Adds an `importProvidersFrom` call to the `bootstrapApplication` call.
19
+ * @param tree File tree of the project.
20
+ * @param filePath Path to the file that should be updated.
21
+ * @param moduleName Name of the module that should be imported.
22
+ * @param modulePath Path from which to import the module.
23
+ */
24
+ export declare function addModuleImportToStandaloneBootstrap(tree: Tree, filePath: string, moduleName: string, modulePath: string): void;
25
+ /** Finds the call to `bootstrapApplication` within a file. */
26
+ export declare function findBootstrapApplicationCall(sourceFile: ts.SourceFile): ts.CallExpression | null;
@@ -0,0 +1,191 @@
1
+ "use strict";
2
+ /**
3
+ * @license
4
+ * Copyright Google LLC All Rights Reserved.
5
+ *
6
+ * Use of this source code is governed by an MIT-style license that can be
7
+ * found in the LICENSE file at https://angular.io/license
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.findBootstrapApplicationCall = exports.addModuleImportToStandaloneBootstrap = exports.importsProvidersFrom = void 0;
11
+ const schematics_1 = require("@angular-devkit/schematics");
12
+ const change_1 = require("@schematics/angular/utility/change");
13
+ const ts = require("typescript");
14
+ const ast_utils_1 = require("@schematics/angular/utility/ast-utils");
15
+ /**
16
+ * Checks whether the providers from a module are being imported in a `bootstrapApplication` call.
17
+ * @param tree File tree of the project.
18
+ * @param filePath Path of the file in which to check.
19
+ * @param className Class name of the module to search for.
20
+ */
21
+ function importsProvidersFrom(tree, filePath, className) {
22
+ const sourceFile = ts.createSourceFile(filePath, tree.readText(filePath), ts.ScriptTarget.Latest, true);
23
+ const bootstrapCall = findBootstrapApplicationCall(sourceFile);
24
+ const importProvidersFromCall = bootstrapCall ? findImportProvidersFromCall(bootstrapCall) : null;
25
+ return (!!importProvidersFromCall &&
26
+ importProvidersFromCall.arguments.some(arg => ts.isIdentifier(arg) && arg.text === className));
27
+ }
28
+ exports.importsProvidersFrom = importsProvidersFrom;
29
+ /**
30
+ * Adds an `importProvidersFrom` call to the `bootstrapApplication` call.
31
+ * @param tree File tree of the project.
32
+ * @param filePath Path to the file that should be updated.
33
+ * @param moduleName Name of the module that should be imported.
34
+ * @param modulePath Path from which to import the module.
35
+ */
36
+ function addModuleImportToStandaloneBootstrap(tree, filePath, moduleName, modulePath) {
37
+ const sourceFile = ts.createSourceFile(filePath, tree.readText(filePath), ts.ScriptTarget.Latest, true);
38
+ const bootstrapCall = findBootstrapApplicationCall(sourceFile);
39
+ if (!bootstrapCall) {
40
+ throw new schematics_1.SchematicsException(`Could not find bootstrapApplication call in ${filePath}`);
41
+ }
42
+ const recorder = tree.beginUpdate(filePath);
43
+ const importCall = findImportProvidersFromCall(bootstrapCall);
44
+ const printer = ts.createPrinter();
45
+ const sourceText = sourceFile.getText();
46
+ // Add imports to the module being added and `importProvidersFrom`. We don't
47
+ // have to worry about duplicates, because `insertImport` handles them.
48
+ [
49
+ (0, ast_utils_1.insertImport)(sourceFile, sourceText, moduleName, modulePath),
50
+ (0, ast_utils_1.insertImport)(sourceFile, sourceText, 'importProvidersFrom', '@angular/core'),
51
+ ].forEach(change => {
52
+ if (change instanceof change_1.InsertChange) {
53
+ recorder.insertLeft(change.pos, change.toAdd);
54
+ }
55
+ });
56
+ // If there is an `importProvidersFrom` call already, reuse it.
57
+ if (importCall) {
58
+ recorder.insertRight(importCall.arguments[importCall.arguments.length - 1].getEnd(), `, ${moduleName}`);
59
+ }
60
+ else if (bootstrapCall.arguments.length === 1) {
61
+ // Otherwise if there is no options parameter to `bootstrapApplication`,
62
+ // create an object literal with a `providers` array and the import.
63
+ const newCall = ts.factory.updateCallExpression(bootstrapCall, bootstrapCall.expression, bootstrapCall.typeArguments, [
64
+ ...bootstrapCall.arguments,
65
+ ts.factory.createObjectLiteralExpression([createProvidersAssignment(moduleName)], true),
66
+ ]);
67
+ recorder.remove(bootstrapCall.getStart(), bootstrapCall.getWidth());
68
+ recorder.insertRight(bootstrapCall.getStart(), printer.printNode(ts.EmitHint.Unspecified, newCall, sourceFile));
69
+ }
70
+ else {
71
+ const providersLiteral = findProvidersLiteral(bootstrapCall);
72
+ if (providersLiteral) {
73
+ // If there's a `providers` array, add the import to it.
74
+ const newProvidersLiteral = ts.factory.updateArrayLiteralExpression(providersLiteral, [
75
+ ...providersLiteral.elements,
76
+ createImportProvidersFromCall(moduleName),
77
+ ]);
78
+ recorder.remove(providersLiteral.getStart(), providersLiteral.getWidth());
79
+ recorder.insertRight(providersLiteral.getStart(), printer.printNode(ts.EmitHint.Unspecified, newProvidersLiteral, sourceFile));
80
+ }
81
+ else {
82
+ // Otherwise add a `providers` array to the existing object literal.
83
+ const optionsLiteral = bootstrapCall.arguments[1];
84
+ const newOptionsLiteral = ts.factory.updateObjectLiteralExpression(optionsLiteral, [
85
+ ...optionsLiteral.properties,
86
+ createProvidersAssignment(moduleName),
87
+ ]);
88
+ recorder.remove(optionsLiteral.getStart(), optionsLiteral.getWidth());
89
+ recorder.insertRight(optionsLiteral.getStart(), printer.printNode(ts.EmitHint.Unspecified, newOptionsLiteral, sourceFile));
90
+ }
91
+ }
92
+ tree.commitUpdate(recorder);
93
+ }
94
+ exports.addModuleImportToStandaloneBootstrap = addModuleImportToStandaloneBootstrap;
95
+ /** Finds the call to `bootstrapApplication` within a file. */
96
+ function findBootstrapApplicationCall(sourceFile) {
97
+ const localName = findImportLocalName(sourceFile, 'bootstrapApplication', '@angular/platform-browser');
98
+ return localName ? findCall(sourceFile, localName) : null;
99
+ }
100
+ exports.findBootstrapApplicationCall = findBootstrapApplicationCall;
101
+ /** Find a call to `importProvidersFrom` within a `bootstrapApplication` call. */
102
+ function findImportProvidersFromCall(bootstrapCall) {
103
+ const providersLiteral = findProvidersLiteral(bootstrapCall);
104
+ const importProvidersName = findImportLocalName(bootstrapCall.getSourceFile(), 'importProvidersFrom', '@angular/core');
105
+ if (providersLiteral && importProvidersName) {
106
+ for (const element of providersLiteral.elements) {
107
+ // Look for an array element that calls the `importProvidersFrom` function.
108
+ if (ts.isCallExpression(element) &&
109
+ ts.isIdentifier(element.expression) &&
110
+ element.expression.text === importProvidersName) {
111
+ return element;
112
+ }
113
+ }
114
+ }
115
+ return null;
116
+ }
117
+ /** Finds the `providers` array literal within a `bootstrapApplication` call. */
118
+ function findProvidersLiteral(bootstrapCall) {
119
+ // The imports have to be in the second argument of
120
+ // the function which has to be an object literal.
121
+ if (bootstrapCall.arguments.length > 1 &&
122
+ ts.isObjectLiteralExpression(bootstrapCall.arguments[1])) {
123
+ for (const prop of bootstrapCall.arguments[1].properties) {
124
+ if (ts.isPropertyAssignment(prop) &&
125
+ ts.isIdentifier(prop.name) &&
126
+ prop.name.text === 'providers' &&
127
+ ts.isArrayLiteralExpression(prop.initializer)) {
128
+ return prop.initializer;
129
+ }
130
+ }
131
+ }
132
+ return null;
133
+ }
134
+ /**
135
+ * Finds the local name of an imported symbol. Could be the symbol name itself or its alias.
136
+ * @param sourceFile File within which to search for the import.
137
+ * @param name Actual name of the import, not its local alias.
138
+ * @param moduleName Name of the module from which the symbol is imported.
139
+ */
140
+ function findImportLocalName(sourceFile, name, moduleName) {
141
+ for (const node of sourceFile.statements) {
142
+ // Only look for top-level imports.
143
+ if (!ts.isImportDeclaration(node) ||
144
+ !ts.isStringLiteral(node.moduleSpecifier) ||
145
+ node.moduleSpecifier.text !== moduleName) {
146
+ continue;
147
+ }
148
+ // Filter out imports that don't have the right shape.
149
+ if (!node.importClause ||
150
+ !node.importClause.namedBindings ||
151
+ !ts.isNamedImports(node.importClause.namedBindings)) {
152
+ continue;
153
+ }
154
+ // Look through the elements of the declaration for the specific import.
155
+ for (const element of node.importClause.namedBindings.elements) {
156
+ if ((element.propertyName || element.name).text === name) {
157
+ // The local name is always in `name`.
158
+ return element.name.text;
159
+ }
160
+ }
161
+ }
162
+ return null;
163
+ }
164
+ /**
165
+ * Finds a call to a function with a specific name.
166
+ * @param rootNode Node from which to start searching.
167
+ * @param name Name of the function to search for.
168
+ */
169
+ function findCall(rootNode, name) {
170
+ let result = null;
171
+ rootNode.forEachChild(function walk(node) {
172
+ if (ts.isCallExpression(node) &&
173
+ ts.isIdentifier(node.expression) &&
174
+ node.expression.text === name) {
175
+ result = node;
176
+ }
177
+ if (!result) {
178
+ node.forEachChild(walk);
179
+ }
180
+ });
181
+ return result;
182
+ }
183
+ /** Creates an `importProvidersFrom({{moduleName}})` call. */
184
+ function createImportProvidersFromCall(moduleName) {
185
+ return ts.factory.createCallChain(ts.factory.createIdentifier('importProvidersFrom'), undefined, undefined, [ts.factory.createIdentifier(moduleName)]);
186
+ }
187
+ /** Creates a `providers: [importProvidersFrom({{moduleName}})]` property assignment. */
188
+ function createProvidersAssignment(moduleName) {
189
+ return ts.factory.createPropertyAssignment('providers', ts.factory.createArrayLiteralExpression([createImportProvidersFromCall(moduleName)]));
190
+ }
191
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhbmRhbG9uZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jZGsvc2NoZW1hdGljcy91dGlscy9hc3Qvc3RhbmRhbG9uZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7QUFFSCwyREFBcUU7QUFDckUsK0RBQWdFO0FBQ2hFLGlDQUFpQztBQUNqQyxxRUFBbUU7QUFFbkU7Ozs7O0dBS0c7QUFDSCxTQUFnQixvQkFBb0IsQ0FBQyxJQUFVLEVBQUUsUUFBZ0IsRUFBRSxTQUFpQjtJQUNsRixNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQ3BDLFFBQVEsRUFDUixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUN2QixFQUFFLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFDdEIsSUFBSSxDQUNMLENBQUM7SUFFRixNQUFNLGFBQWEsR0FBRyw0QkFBNEIsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMvRCxNQUFNLHVCQUF1QixHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsMkJBQTJCLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUVsRyxPQUFPLENBQ0wsQ0FBQyxDQUFDLHVCQUF1QjtRQUN6Qix1QkFBdUIsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUM5RixDQUFDO0FBQ0osQ0FBQztBQWZELG9EQWVDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBZ0Isb0NBQW9DLENBQ2xELElBQVUsRUFDVixRQUFnQixFQUNoQixVQUFrQixFQUNsQixVQUFrQjtJQUVsQixNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQ3BDLFFBQVEsRUFDUixJQUFJLENBQUMsUUFBUSxD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LElBQUksQ0FBQyxVQUFVLENBQUM7WUFDaEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUM3QjtZQUNBLE1BQU0sR0FBRyxJQUFJLENBQUM7U0FDZjtRQUVELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDWCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsNkRBQTZEO0FBQzdELFNBQVMsNkJBQTZCLENBQUMsVUFBa0I7SUFDdkQsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FDL0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxxQkFBcUIsQ0FBQyxFQUNsRCxTQUFTLEVBQ1QsU0FBUyxFQUNULENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUMxQyxDQUFDO0FBQ0osQ0FBQztBQUVELHdGQUF3RjtBQUN4RixTQUFTLHlCQUF5QixDQUFDLFVBQWtCO0lBQ25ELE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FDeEMsV0FBVyxFQUNYLEVBQUUsQ0FBQyxPQUFPLENBQUMsNEJBQTRCLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQ3JGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7U2NoZW1hdGljc0V4Y2VwdGlvbiwgVHJlZX0gZnJvbSAnQGFuZ3VsYXItZGV2a2l0L3NjaGVtYXRpY3MnO1xuaW1wb3J0IHtJbnNlcnRDaGFuZ2V9IGZyb20gJ0BzY2hlbWF0aWNzL2FuZ3VsYXIvdXRpbGl0eS9jaGFuZ2UnO1xuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5pbXBvcnQge2luc2VydEltcG9ydH0gZnJvbSAnQHNjaGVtYXRpY3MvYW5ndWxhci91dGlsaXR5L2FzdC11dGlscyc7XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHByb3ZpZGVycyBmcm9tIGEgbW9kdWxlIGFyZSBiZWluZyBpbXBvcnRlZCBpbiBhIGBib290c3RyYXBBcHBsaWNhdGlvbmAgY2FsbC5cbiAqIEBwYXJhbSB0cmVlIEZpbGUgdHJlZSBvZiB0aGUgcHJvamVjdC5cbiAqIEBwYXJhbSBmaWxlUGF0aCBQYXRoIG9mIHRoZSBmaWxlIGluIHdoaWNoIHRvIGNoZWNrLlxuICogQHBhcmFtIGNsYXNzTmFtZSBDbGFzcyBuYW1lIG9mIHRoZSBtb2R1bGUgdG8gc2VhcmNoIGZvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGltcG9ydHNQcm92aWRlcnNGcm9tKHRyZWU6IFRyZWUsIGZpbGVQYXRoOiBzdHJpbmcsIGNsYXNzTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IHNvdXJjZUZpbGUgPSB0cy5jcmVhdGVTb3VyY2VGaWxlKFxuICAgIGZpbGVQYXRoLFxuICAgIHRyZWUucmVhZFRleHQoZmlsZVBhdGgpLFxuICAgIHRzLlNjcmlwdFRhcmdldC5MYXRlc3QsXG4gICAgdHJ1ZSxcbiAgKTtcblxuICBjb25zdCBib290c3RyYXBDYWxsID0gZmluZEJvb3RzdHJhcEFwcGxpY2F0aW9uQ2FsbChzb3VyY2VGaWxlKTtcbiAgY29uc3QgaW1wb3J0UHJvdmlkZXJzRnJvbUNhbGwgPSBib290c3RyYXBDYWxsID8gZmluZEltcG9ydFByb3ZpZGVyc0Zyb21DYWxsKGJvb3RzdHJhcENhbGwpIDogbnVsbDtcblxuICByZXR1cm4gKFxuICAgICEhaW1wb3J0UHJvdmlkZXJzRnJvbUNhbGwgJiZcbiAgICBpbXBvcnRQcm92aWRlcnNGcm9tQ2FsbC5hcmd1bWVudHMuc29tZShhcmcgPT4gdHMuaXNJZGVudGlmaWVyKGFyZykgJiYgYXJnLnRleHQgPT09IGNsYXNzTmFtZSlcbiAgKTtcbn1cblxuLyoqXG4gKiBBZGRzIGFuIGBpbXBvcnRQcm92aWRlcnNGcm9tYCBjYWxsIHRvIHRoZSBgYm9vdHN0cmFwQXBwbGljYXRpb25gIGNhbGwuXG4gKiBAcGFyYW0gdHJlZSBGaWxlIHRyZWUgb2YgdGhlIHByb2plY3QuXG4gKiBAcGFyYW0gZmlsZVBhdGggUGF0aCB0byB0aGUgZmlsZSB0aGF0IHNob3VsZCBiZSB1cGRhdGVkLlxuICogQHBhcmFtIG1vZHVsZU5hbWUgTmFtZSBvZiB0aGUgbW9kdWxlIHRoYXQgc2hvdWxkIGJlIGltcG9ydGVkLlxuICogQHBhcmFtIG1vZHVsZVBhdGggUGF0aCBmcm9tIHdoaWNoIHRvIGltcG9ydCB0aGUgbW9kdWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkTW9kdWxlSW1wb3J0VG9TdGFuZGFsb25lQm9vdHN0cmFwKFxuICB0cmVlOiBUcmVlLFxuICBmaWxlUGF0aDogc3RyaW5nLFxuICBtb2R1bGVOYW1lOiBzdHJpbmcsXG4gIG1vZHVsZVBhdGg6IHN0cmluZyxcbikge1xuICBjb25zdCBzb3VyY2VGaWxlID0gdHMuY3JlYXRlU291cmNlRmlsZShcbiAgICBmaWxlUGF0aCxcbiAgICB0cmVlLnJlYWRUZXh0KGZpbGVQYXRoKSxcbiAgICB0cy5TY3JpcHRUYXJnZXQuTGF0ZXN0LFxuICAgIHRydWUsXG4gICk7XG5cbiAgY29uc3QgYm9vdHN0cmFwQ2FsbCA9IGZpbmRCb290c3RyYXBBcHBsaWNhdGlvbkNhbGwoc291cmNlRmlsZSk7XG5cbiAgaWYgKCFib290c3RyYXBDYWxsKSB7XG4gICAgdGhyb3cgbmV3IFNjaGVtYXRpY3NFeGNlcHRpb24oYENvdWxkIG5vdCBmaW5kIGJvb3RzdHJhcEFwcGxpY2F0aW9uIGNhbGwgaW4gJHtmaWxlUGF0aH1gKTtcbiAgfVxuXG4gIGNvbnN0IHJlY29yZGVyID0gdHJlZS5iZWdpblVwZGF0ZShmaWxlUGF0aCk7XG4gIGNvbnN0IGltcG9ydENhbGwgPSBmaW5kSW1wb3J0UHJvdmlkZXJzRnJvbUNhbGwoYm9vdHN0cmFwQ2FsbCk7XG4gIGNvbnN0IHByaW50ZXIgPSB0cy5jcmVhdGVQcmludGVyKCk7XG4gIGNvbnN0IHNvdXJjZVRleHQgPSBzb3VyY2VGaWxlLmdldFRleHQoKTtcblxuICAvLyBBZGQgaW1wb3J0cyB0byB0aGUgbW9kdWxlIGJlaW5nIGFkZGVkIGFuZCBgaW1wb3J0UHJvdmlkZXJzRnJvbWAuIFdlIGRvbid0XG4gIC8vIGhhdmUgdG8gd29ycnkgYWJvdXQgZHVwbGljYXRlcywgYmVjYXVzZSBgaW5zZXJ0SW1wb3J0YCBoYW5kbGVzIHRoZW0uXG4gIFtcbiAgICBpbnNlcnRJbXBvcnQoc291cmNlRmlsZSwgc291cmNlVGV4dCwgbW9kdWxlTmFtZSwgbW9kdWxlUGF0aCksXG4gICAgaW5zZXJ0SW1wb3J0KHNvdXJjZUZpbGUsIHNvdXJjZVRleHQsICdpbXBvcnRQcm92aWRlcnNGcm9tJywgJ0Bhbmd1bGFyL2NvcmUnKSxcbiAgXS5mb3JFYWNoKGNoYW5nZSA9PiB7XG4gICAgaWYgKGNoYW5nZSBpbnN0YW5jZW9mIEluc2VydENoYW5nZSkge1xuICAgICAgcmVjb3JkZXIuaW5zZXJ0TGVmdChjaGFuZ2UucG9zLCBjaGFuZ2UudG9BZGQpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gSWYgdGhlcmUgaXMgYW4gYGltcG9ydFByb3ZpZGVyc0Zyb21gIGNhbGwgYWxyZWFkeSwgcmV1c2UgaXQuXG4gIGlmIChpbXBvcnRDYWxsKSB7XG4gICAgcmVjb3JkZXIuaW5zZXJ0UmlnaHQoXG4gICAgICBpbXBvcnRDYWxsLmFyZ3VtZW50c1tpbXBvcnRDYWxsLmFyZ3VtZW50cy5sZW5ndGggLSAxXS5nZXRFbmQoKSxcbiAgICAgIGAsICR7bW9kdWxlTmFtZX1gLFxuICAgICk7XG4gIH0gZWxzZSBpZiAoYm9vdHN0cmFwQ2FsbC5hcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgLy8gT3RoZXJ3aXNlIGlmIHRoZXJlIGlzIG5vIG9wdGlvbnMgcGFyYW1ldGVyIHRvIGBib290c3RyYXBBcHBsaWNhdGlvbmAsXG4gICAgLy8gY3JlYXRlIGFuIG9iamVjdCBsaXRlcmFsIHdpdGggYSBgcHJvdmlkZXJzYCBhcnJheSBhbmQgdGhlIGltcG9ydC5cbiAgICBjb25zdCBuZXdDYWxsID0gdHMuZmFjdG9yeS51cGRhdGVDYWxsRXhwcmVzc2lvbihcbiAgICAgIGJvb3RzdHJhcENhbGwsXG4gICAgICBib290c3RyYXBDYWxsLmV4cHJlc3Npb24sXG4gICAgICBib290c3RyYXBDYWxsLnR5cGVBcmd1bWVudHMsXG4gICAgICBbXG4gICAgICAgIC4uLmJvb3RzdHJhcENhbGwuYXJndW1lbnRzLFxuICAgICAgICB0cy5mYWN0b3J5LmNyZWF0ZU9iamVjdExpdGVyYWxFeHByZXNzaW9uKFtjcmVhdGVQcm92aWRlcnNBc3NpZ25tZW50KG1vZHVsZU5hbWUpXSwgdHJ1ZSksXG4gICAgICBdLFxuICAgICk7XG5cbiAgICByZWNvcmRlci5yZW1vdmUoYm9vdHN0cmFwQ2FsbC5nZXRTdGFydCgpLCBib290c3RyYXBDYWxsLmdldFdpZHRoKCkpO1xuICAgIHJlY29yZGVyLmluc2VydFJpZ2h0KFxuICAgICAgYm9vdHN0cmFwQ2FsbC5nZXRTdGFydCgpLFxuICAgICAgcHJpbnRlci5wcmludE5vZGUodHMuRW1pdEhpbnQuVW5zcGVjaWZpZWQsIG5ld0NhbGwsIHNvdXJjZUZpbGUpLFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgcHJvdmlkZXJzTGl0ZXJhbCA9IGZpbmRQcm92aWRlcnNMaXRlcmFsKGJvb3RzdHJhcENhbGwpO1xuXG4gICAgaWYgKHByb3ZpZGVyc0xpdGVyYWwpIHtcbiAgICAgIC8vIElmIHRoZXJlJ3MgYSBgcHJvdmlkZXJzYCBhcnJheSwgYWRkIHRoZSBpbXBvcnQgdG8gaXQuXG4gICAgICBjb25zdCBuZXdQcm92aWRlcnNMaXRlcmFsID0gdHMuZmFjdG9yeS51cGRhdGVBcnJheUxpdGVyYWxFeHByZXNzaW9uKHByb3ZpZGVyc0xpdGVyYWwsIFtcbiAgICAgICAgLi4ucHJvdmlkZXJzTGl0ZXJhbC5lbGVtZW50cyxcbiAgICAgICAgY3JlYXRlSW1wb3J0UHJvdmlkZXJzRnJvbUNhbGwobW9kdWxlTmFtZSksXG4gICAgICBdKTtcbiAgICAgIHJlY29yZGVyLnJlbW92ZShwcm92aWRlcnNMaXRlcmFsLmdldFN0YXJ0KCksIHByb3ZpZGVyc0xpdGVyYWwuZ2V0V2lkdGgoKSk7XG4gICAgICByZWNvcmRlci5pbnNlcnRSaWdodChcbiAgICAgICAgcHJvdmlkZXJzTGl0ZXJhbC5nZXRTdGFydCgpLFxuICAgICAgICBwcmludGVyLnByaW50Tm9kZSh0cy5FbWl0SGludC5VbnNwZWNpZmllZCwgbmV3UHJvdmlkZXJzTGl0ZXJhbCwgc291cmNlRmlsZSksXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPdGhlcndpc2UgYWRkIGEgYHByb3ZpZGVyc2AgYXJyYXkgdG8gdGhlIGV4aXN0aW5nIG9iamVjdCBsaXRlcmFsLlxuICAgICAgY29uc3Qgb3B0aW9uc0xpdGVyYWwgPSBib290c3RyYXBDYWxsLmFyZ3VtZW50c1sxXSBhcyB0cy5PYmplY3RMaXRlcmFsRXhwcmVzc2lvbjtcbiAgICAgIGNvbnN0IG5ld09wdGlvbnNMaXRlcmFsID0gdHMuZmFjdG9yeS51cGRhdGVPYmplY3RMaXRlcmFsRXhwcmVzc2lvbihvcHRpb25zTGl0ZXJhbCwgW1xuICAgICAgICAuLi5vcHRpb25zTGl0ZXJhbC5wcm9wZXJ0aWVzLFxuICAgICAgICBjcmVhdGVQcm92aWRlcnNBc3NpZ25tZW50KG1vZHVsZU5hbWUpLFxuICAgICAgXSk7XG4gICAgICByZWNvcmRlci5yZW1vdmUob3B0aW9uc0xpdGVyYWwuZ2V0U3RhcnQoKSwgb3B0aW9uc0xpdGVyYWwuZ2V0V2lkdGgoKSk7XG4gICAgICByZWNvcmRlci5pbnNlcnRSaWdodChcbiAgICAgICAgb3B0aW9uc0xpdGVyYWwuZ2V0U3RhcnQoKSxcbiAgICAgICAgcHJpbnRlci5wcmludE5vZGUodHMuRW1pdEhpbnQuVW5zcGVjaWZpZWQsIG5ld09wdGlvbnNMaXRlcmFsLCBzb3VyY2VGaWxlKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgdHJlZS5jb21taXRVcGRhdGUocmVjb3JkZXIpO1xufVxuXG4vKiogRmluZHMgdGhlIGNhbGwgdG8gYGJvb3RzdHJhcEFwcGxpY2F0aW9uYCB3aXRoaW4gYSBmaWxlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRCb290c3RyYXBBcHBsaWNhdGlvbkNhbGwoc291cmNlRmlsZTogdHMuU291cmNlRmlsZSk6IHRzLkNhbGxFeHByZXNzaW9uIHwgbnVsbCB7XG4gIGNvbnN0IGxvY2FsTmFtZSA9IGZpbmRJbXBvcnRMb2NhbE5hbWUoXG4gICAgc291cmNlRmlsZSxcbiAgICAnYm9vdHN0cmFwQXBwbGljYXRpb24nLFxuICAgICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJyxcbiAgKTtcblxuICByZXR1cm4gbG9jYWxOYW1lID8gZmluZENhbGwoc291cmNlRmlsZSwgbG9jYWxOYW1lKSA6IG51bGw7XG59XG5cbi8qKiBGaW5kIGEgY2FsbCB0byBgaW1wb3J0UHJvdmlkZXJzRnJvbWAgd2l0aGluIGEgYGJvb3RzdHJhcEFwcGxpY2F0aW9uYCBjYWxsLiAqL1xuZnVuY3Rpb24gZmluZEltcG9ydFByb3ZpZGVyc0Zyb21DYWxsKGJvb3RzdHJhcENhbGw6IHRzLkNhbGxFeHByZXNzaW9uKTogdHMuQ2FsbEV4cHJlc3Npb24gfCBudWxsIHtcbiAgY29uc3QgcHJvdmlkZXJzTGl0ZXJhbCA9IGZpbmRQcm92aWRlcnNMaXRlcmFsKGJvb3RzdHJhcENhbGwpO1xuICBjb25zdCBpbXBvcnRQcm92aWRlcnNOYW1lID0gZmluZEltcG9ydExvY2FsTmFtZShcbiAgICBib290c3RyYXBDYWxsLmdldFNvdXJjZUZpbGUoKSxcbiAgICAnaW1wb3J0UHJvdmlkZXJzRnJvbScsXG4gICAgJ0Bhbmd1bGFyL2NvcmUnLFxuICApO1xuXG4gIGlmIChwcm92aWRlcnNMaXRlcmFsICYmIGltcG9ydFByb3ZpZGVyc05hbWUpIHtcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgcHJvdmlkZXJzTGl0ZXJhbC5lbGVtZW50cykge1xuICAgICAgLy8gTG9vayBmb3IgYW4gYXJyYXkgZWxlbWVudCB0aGF0IGNhbGxzIHRoZSBgaW1wb3J0UHJvdmlkZXJzRnJvbWAgZnVuY3Rpb24uXG4gICAgICBpZiAoXG4gICAgICAgIHRzLmlzQ2FsbEV4cHJlc3Npb24oZWxlbWVudCkgJiZcbiAgICAgICAgdHMuaXNJZGVudGlmaWVyKGVsZW1lbnQuZXhwcmVzc2lvbikgJiZcbiAgICAgICAgZWxlbWVudC5leHByZXNzaW9uLnRleHQgPT09IGltcG9ydFByb3ZpZGVyc05hbWVcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqIEZpbmRzIHRoZSBgcHJvdmlkZXJzYCBhcnJheSBsaXRlcmFsIHdpdGhpbiBhIGBib290c3RyYXBBcHBsaWNhdGlvbmAgY2FsbC4gKi9cbmZ1bmN0aW9uIGZpbmRQcm92aWRlcnNMaXRlcmFsKGJvb3RzdHJhcENhbGw6IHRzLkNhbGxFeHByZXNzaW9uKTogdHMuQXJyYXlMaXRlcmFsRXhwcmVzc2lvbiB8IG51bGwge1xuICAvLyBUaGUgaW1wb3J0cyBoYXZlIHRvIGJlIGluIHRoZSBzZWNvbmQgYXJndW1lbnQgb2ZcbiAgLy8gdGhlIGZ1bmN0aW9uIHdoaWNoIGhhcyB0byBiZSBhbiBvYmplY3QgbGl0ZXJhbC5cbiAgaWYgKFxuICAgIGJvb3RzdHJhcENhbGwuYXJndW1lbnRzLmxlbmd0aCA+IDEgJiZcbiAgICB0cy5pc09iamVjdExpdGVyYWxFeHByZXNzaW9uKGJvb3RzdHJhcENhbGwuYXJndW1lbnRzWzFdKVxuICApIHtcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgYm9vdHN0cmFwQ2FsbC5hcmd1bWVudHNbMV0ucHJvcGVydGllcykge1xuICAgICAgaWYgKFxuICAgICAgICB0cy5pc1Byb3BlcnR5QXNzaWdubWVudChwcm9wKSAmJlxuICAgICAgICB0cy5pc0lkZW50aWZpZXIocHJvcC5uYW1lKSAmJlxuICAgICAgICBwcm9wLm5hbWUudGV4dCA9PT0gJ3Byb3ZpZGVycycgJiZcbiAgICAgICAgdHMuaXNBcnJheUxpdGVyYWxFeHByZXNzaW9uKHByb3AuaW5pdGlhbGl6ZXIpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHByb3AuaW5pdGlhbGl6ZXI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIGxvY2FsIG5hbWUgb2YgYW4gaW1wb3J0ZWQgc3ltYm9sLiBDb3VsZCBiZSB0aGUgc3ltYm9sIG5hbWUgaXRzZWxmIG9yIGl0cyBhbGlhcy5cbiAqIEBwYXJhbSBzb3VyY2VGaWxlIEZpbGUgd2l0aGluIHdoaWNoIHRvIHNlYXJjaCBmb3IgdGhlIGltcG9ydC5cbiAqIEBwYXJhbSBuYW1lIEFjdHVhbCBuYW1lIG9mIHRoZSBpbXBvcnQsIG5vdCBpdHMgbG9jYWwgYWxpYXMuXG4gKiBAcGFyYW0gbW9kdWxlTmFtZSBOYW1lIG9mIHRoZSBtb2R1bGUgZnJvbSB3aGljaCB0aGUgc3ltYm9sIGlzIGltcG9ydGVkLlxuICovXG5mdW5jdGlvbiBmaW5kSW1wb3J0TG9jYWxOYW1lKFxuICBzb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlLFxuICBuYW1lOiBzdHJpbmcsXG4gIG1vZHVsZU5hbWU6IHN0cmluZyxcbik6IHN0cmluZyB8IG51bGwge1xuICBmb3IgKGNvbnN0IG5vZGUgb2Ygc291cmNlRmlsZS5zdGF0ZW1lbnRzKSB7XG4gICAgLy8gT25seSBsb29rIGZvciB0b3AtbGV2ZWwgaW1wb3J0cy5cbiAgICBpZiAoXG4gICAgICAhdHMuaXNJbXBvcnREZWNsYXJhdGlvbihub2RlKSB8fFxuICAgICAgIXRzLmlzU3RyaW5nTGl0ZXJhbChub2RlLm1vZHVsZVNwZWNpZmllcikgfHxcbiAgICAgIG5vZGUubW9kdWxlU3BlY2lmaWVyLnRleHQgIT09IG1vZHVsZU5hbWVcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIEZpbHRlciBvdXQgaW1wb3J0cyB0aGF0IGRvbid0IGhhdmUgdGhlIHJpZ2h0IHNoYXBlLlxuICAgIGlmIChcbiAgICAgICFub2RlLmltcG9ydENsYXVzZSB8fFxuICAgICAgIW5vZGUuaW1wb3J0Q2xhdXNlLm5hbWVkQmluZGluZ3MgfHxcbiAgICAgICF0cy5pc05hbWVkSW1wb3J0cyhub2RlLmltcG9ydENsYXVzZS5uYW1lZEJpbmRpbmdzKVxuICAgICkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gTG9vayB0aHJvdWdoIHRoZSBlbGVtZW50cyBvZiB0aGUgZGVjbGFyYXRpb24gZm9yIHRoZSBzcGVjaWZpYyBpbXBvcnQuXG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIG5vZGUuaW1wb3J0Q2xhdXNlLm5hbWVkQmluZGluZ3MuZWxlbWVudHMpIHtcbiAgICAgIGlmICgoZWxlbWVudC5wcm9wZXJ0eU5hbWUgfHwgZWxlbWVudC5uYW1lKS50ZXh0ID09PSBuYW1lKSB7XG4gICAgICAgIC8vIFRoZSBsb2NhbCBuYW1lIGlzIGFsd2F5cyBpbiBgbmFtZWAuXG4gICAgICAgIHJldHVybiBlbGVtZW50Lm5hbWUudGV4dDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBGaW5kcyBhIGNhbGwgdG8gYSBmdW5jdGlvbiB3aXRoIGEgc3BlY2lmaWMgbmFtZS5cbiAqIEBwYXJhbSByb290Tm9kZSBOb2RlIGZyb20gd2hpY2ggdG8gc3RhcnQgc2VhcmNoaW5nLlxuICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgZnVuY3Rpb24gdG8gc2VhcmNoIGZvci5cbiAqL1xuZnVuY3Rpb24gZmluZENhbGwocm9vdE5vZGU6IHRzLk5vZGUsIG5hbWU6IHN0cmluZyk6IHRzLkNhbGxFeHByZXNzaW9uIHwgbnVsbCB7XG4gIGxldCByZXN1bHQ6IHRzLkNhbGxFeHByZXNzaW9uIHwgbnVsbCA9IG51bGw7XG5cbiAgcm9vdE5vZGUuZm9yRWFjaENoaWxkKGZ1bmN0aW9uIHdhbGsobm9kZSkge1xuICAgIGlmIChcbiAgICAgIHRzLmlzQ2FsbEV4cHJlc3Npb24obm9kZSkgJiZcbiAgICAgIHRzLmlzSWRlbnRpZmllcihub2RlLmV4cHJlc3Npb24pICYmXG4gICAgICBub2RlLmV4cHJlc3Npb24udGV4dCA9PT0gbmFtZVxuICAgICkge1xuICAgICAgcmVzdWx0ID0gbm9kZTtcbiAgICB9XG5cbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgbm9kZS5mb3JFYWNoQ2hpbGQod2Fsayk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKiogQ3JlYXRlcyBhbiBgaW1wb3J0UHJvdmlkZXJzRnJvbSh7e21vZHVsZU5hbWV9fSlgIGNhbGwuICovXG5mdW5jdGlvbiBjcmVhdGVJbXBvcnRQcm92aWRlcnNGcm9tQ2FsbChtb2R1bGVOYW1lOiBzdHJpbmcpOiB0cy5DYWxsRXhwcmVzc2lvbiB7XG4gIHJldHVybiB0cy5mYWN0b3J5LmNyZWF0ZUNhbGxDaGFpbihcbiAgICB0cy5mYWN0b3J5LmNyZWF0ZUlkZW50aWZpZXIoJ2ltcG9ydFByb3ZpZGVyc0Zyb20nKSxcbiAgICB1bmRlZmluZWQsXG4gICAgdW5kZWZpbmVkLFxuICAgIFt0cy5mYWN0b3J5LmNyZWF0ZUlkZW50aWZpZXIobW9kdWxlTmFtZSldLFxuICApO1xufVxuXG4vKiogQ3JlYXRlcyBhIGBwcm92aWRlcnM6IFtpbXBvcnRQcm92aWRlcnNGcm9tKHt7bW9kdWxlTmFtZX19KV1gIHByb3BlcnR5IGFzc2lnbm1lbnQuICovXG5mdW5jdGlvbiBjcmVhdGVQcm92aWRlcnNBc3NpZ25tZW50KG1vZHVsZU5hbWU6IHN0cmluZyk6IHRzLlByb3BlcnR5QXNzaWdubWVudCB7XG4gIHJldHVybiB0cy5mYWN0b3J5LmNyZWF0ZVByb3BlcnR5QXNzaWdubWVudChcbiAgICAncHJvdmlkZXJzJyxcbiAgICB0cy5mYWN0b3J5LmNyZWF0ZUFycmF5TGl0ZXJhbEV4cHJlc3Npb24oW2NyZWF0ZUltcG9ydFByb3ZpZGVyc0Zyb21DYWxsKG1vZHVsZU5hbWUpXSksXG4gICk7XG59XG4iXX0=
@@ -0,0 +1,191 @@
1
+ "use strict";
2
+ /**
3
+ * @license
4
+ * Copyright Google LLC All Rights Reserved.
5
+ *
6
+ * Use of this source code is governed by an MIT-style license that can be
7
+ * found in the LICENSE file at https://angular.io/license
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.findBootstrapApplicationCall = exports.addModuleImportToStandaloneBootstrap = exports.importsProvidersFrom = void 0;
11
+ const schematics_1 = require("@angular-devkit/schematics");
12
+ const change_1 = require("@schematics/angular/utility/change");
13
+ const ts = require("typescript");
14
+ const ast_utils_1 = require("@schematics/angular/utility/ast-utils");
15
+ /**
16
+ * Checks whether the providers from a module are being imported in a `bootstrapApplication` call.
17
+ * @param tree File tree of the project.
18
+ * @param filePath Path of the file in which to check.
19
+ * @param className Class name of the module to search for.
20
+ */
21
+ function importsProvidersFrom(tree, filePath, className) {
22
+ const sourceFile = ts.createSourceFile(filePath, tree.readText(filePath), ts.ScriptTarget.Latest, true);
23
+ const bootstrapCall = findBootstrapApplicationCall(sourceFile);
24
+ const importProvidersFromCall = bootstrapCall ? findImportProvidersFromCall(bootstrapCall) : null;
25
+ return (!!importProvidersFromCall &&
26
+ importProvidersFromCall.arguments.some(arg => ts.isIdentifier(arg) && arg.text === className));
27
+ }
28
+ exports.importsProvidersFrom = importsProvidersFrom;
29
+ /**
30
+ * Adds an `importProvidersFrom` call to the `bootstrapApplication` call.
31
+ * @param tree File tree of the project.
32
+ * @param filePath Path to the file that should be updated.
33
+ * @param moduleName Name of the module that should be imported.
34
+ * @param modulePath Path from which to import the module.
35
+ */
36
+ function addModuleImportToStandaloneBootstrap(tree, filePath, moduleName, modulePath) {
37
+ const sourceFile = ts.createSourceFile(filePath, tree.readText(filePath), ts.ScriptTarget.Latest, true);
38
+ const bootstrapCall = findBootstrapApplicationCall(sourceFile);
39
+ if (!bootstrapCall) {
40
+ throw new schematics_1.SchematicsException(`Could not find bootstrapApplication call in ${filePath}`);
41
+ }
42
+ const recorder = tree.beginUpdate(filePath);
43
+ const importCall = findImportProvidersFromCall(bootstrapCall);
44
+ const printer = ts.createPrinter();
45
+ const sourceText = sourceFile.getText();
46
+ // Add imports to the module being added and `importProvidersFrom`. We don't
47
+ // have to worry about duplicates, because `insertImport` handles them.
48
+ [
49
+ (0, ast_utils_1.insertImport)(sourceFile, sourceText, moduleName, modulePath),
50
+ (0, ast_utils_1.insertImport)(sourceFile, sourceText, 'importProvidersFrom', '@angular/core'),
51
+ ].forEach(change => {
52
+ if (change instanceof change_1.InsertChange) {
53
+ recorder.insertLeft(change.pos, change.toAdd);
54
+ }
55
+ });
56
+ // If there is an `importProvidersFrom` call already, reuse it.
57
+ if (importCall) {
58
+ recorder.insertRight(importCall.arguments[importCall.arguments.length - 1].getEnd(), `, ${moduleName}`);
59
+ }
60
+ else if (bootstrapCall.arguments.length === 1) {
61
+ // Otherwise if there is no options parameter to `bootstrapApplication`,
62
+ // create an object literal with a `providers` array and the import.
63
+ const newCall = ts.factory.updateCallExpression(bootstrapCall, bootstrapCall.expression, bootstrapCall.typeArguments, [
64
+ ...bootstrapCall.arguments,
65
+ ts.factory.createObjectLiteralExpression([createProvidersAssignment(moduleName)], true),
66
+ ]);
67
+ recorder.remove(bootstrapCall.getStart(), bootstrapCall.getWidth());
68
+ recorder.insertRight(bootstrapCall.getStart(), printer.printNode(ts.EmitHint.Unspecified, newCall, sourceFile));
69
+ }
70
+ else {
71
+ const providersLiteral = findProvidersLiteral(bootstrapCall);
72
+ if (providersLiteral) {
73
+ // If there's a `providers` array, add the import to it.
74
+ const newProvidersLiteral = ts.factory.updateArrayLiteralExpression(providersLiteral, [
75
+ ...providersLiteral.elements,
76
+ createImportProvidersFromCall(moduleName),
77
+ ]);
78
+ recorder.remove(providersLiteral.getStart(), providersLiteral.getWidth());
79
+ recorder.insertRight(providersLiteral.getStart(), printer.printNode(ts.EmitHint.Unspecified, newProvidersLiteral, sourceFile));
80
+ }
81
+ else {
82
+ // Otherwise add a `providers` array to the existing object literal.
83
+ const optionsLiteral = bootstrapCall.arguments[1];
84
+ const newOptionsLiteral = ts.factory.updateObjectLiteralExpression(optionsLiteral, [
85
+ ...optionsLiteral.properties,
86
+ createProvidersAssignment(moduleName),
87
+ ]);
88
+ recorder.remove(optionsLiteral.getStart(), optionsLiteral.getWidth());
89
+ recorder.insertRight(optionsLiteral.getStart(), printer.printNode(ts.EmitHint.Unspecified, newOptionsLiteral, sourceFile));
90
+ }
91
+ }
92
+ tree.commitUpdate(recorder);
93
+ }
94
+ exports.addModuleImportToStandaloneBootstrap = addModuleImportToStandaloneBootstrap;
95
+ /** Finds the call to `bootstrapApplication` within a file. */
96
+ function findBootstrapApplicationCall(sourceFile) {
97
+ const localName = findImportLocalName(sourceFile, 'bootstrapApplication', '@angular/platform-browser');
98
+ return localName ? findCall(sourceFile, localName) : null;
99
+ }
100
+ exports.findBootstrapApplicationCall = findBootstrapApplicationCall;
101
+ /** Find a call to `importProvidersFrom` within a `bootstrapApplication` call. */
102
+ function findImportProvidersFromCall(bootstrapCall) {
103
+ const providersLiteral = findProvidersLiteral(bootstrapCall);
104
+ const importProvidersName = findImportLocalName(bootstrapCall.getSourceFile(), 'importProvidersFrom', '@angular/core');
105
+ if (providersLiteral && importProvidersName) {
106
+ for (const element of providersLiteral.elements) {
107
+ // Look for an array element that calls the `importProvidersFrom` function.
108
+ if (ts.isCallExpression(element) &&
109
+ ts.isIdentifier(element.expression) &&
110
+ element.expression.text === importProvidersName) {
111
+ return element;
112
+ }
113
+ }
114
+ }
115
+ return null;
116
+ }
117
+ /** Finds the `providers` array literal within a `bootstrapApplication` call. */
118
+ function findProvidersLiteral(bootstrapCall) {
119
+ // The imports have to be in the second argument of
120
+ // the function which has to be an object literal.
121
+ if (bootstrapCall.arguments.length > 1 &&
122
+ ts.isObjectLiteralExpression(bootstrapCall.arguments[1])) {
123
+ for (const prop of bootstrapCall.arguments[1].properties) {
124
+ if (ts.isPropertyAssignment(prop) &&
125
+ ts.isIdentifier(prop.name) &&
126
+ prop.name.text === 'providers' &&
127
+ ts.isArrayLiteralExpression(prop.initializer)) {
128
+ return prop.initializer;
129
+ }
130
+ }
131
+ }
132
+ return null;
133
+ }
134
+ /**
135
+ * Finds the local name of an imported symbol. Could be the symbol name itself or its alias.
136
+ * @param sourceFile File within which to search for the import.
137
+ * @param name Actual name of the import, not its local alias.
138
+ * @param moduleName Name of the module from which the symbol is imported.
139
+ */
140
+ function findImportLocalName(sourceFile, name, moduleName) {
141
+ for (const node of sourceFile.statements) {
142
+ // Only look for top-level imports.
143
+ if (!ts.isImportDeclaration(node) ||
144
+ !ts.isStringLiteral(node.moduleSpecifier) ||
145
+ node.moduleSpecifier.text !== moduleName) {
146
+ continue;
147
+ }
148
+ // Filter out imports that don't have the right shape.
149
+ if (!node.importClause ||
150
+ !node.importClause.namedBindings ||
151
+ !ts.isNamedImports(node.importClause.namedBindings)) {
152
+ continue;
153
+ }
154
+ // Look through the elements of the declaration for the specific import.
155
+ for (const element of node.importClause.namedBindings.elements) {
156
+ if ((element.propertyName || element.name).text === name) {
157
+ // The local name is always in `name`.
158
+ return element.name.text;
159
+ }
160
+ }
161
+ }
162
+ return null;
163
+ }
164
+ /**
165
+ * Finds a call to a function with a specific name.
166
+ * @param rootNode Node from which to start searching.
167
+ * @param name Name of the function to search for.
168
+ */
169
+ function findCall(rootNode, name) {
170
+ let result = null;
171
+ rootNode.forEachChild(function walk(node) {
172
+ if (ts.isCallExpression(node) &&
173
+ ts.isIdentifier(node.expression) &&
174
+ node.expression.text === name) {
175
+ result = node;
176
+ }
177
+ if (!result) {
178
+ node.forEachChild(walk);
179
+ }
180
+ });
181
+ return result;
182
+ }
183
+ /** Creates an `importProvidersFrom({{moduleName}})` call. */
184
+ function createImportProvidersFromCall(moduleName) {
185
+ return ts.factory.createCallChain(ts.factory.createIdentifier('importProvidersFrom'), undefined, undefined, [ts.factory.createIdentifier(moduleName)]);
186
+ }
187
+ /** Creates a `providers: [importProvidersFrom({{moduleName}})]` property assignment. */
188
+ function createProvidersAssignment(moduleName) {
189
+ return ts.factory.createPropertyAssignment('providers', ts.factory.createArrayLiteralExpression([createImportProvidersFromCall(moduleName)]));
190
+ }
191
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhbmRhbG9uZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jZGsvc2NoZW1hdGljcy91dGlscy9hc3Qvc3RhbmRhbG9uZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7QUFFSCwyREFBcUU7QUFDckUsK0RBQWdFO0FBQ2hFLGlDQUFpQztBQUNqQyxxRUFBbUU7QUFFbkU7Ozs7O0dBS0c7QUFDSCxTQUFnQixvQkFBb0IsQ0FBQyxJQUFVLEVBQUUsUUFBZ0IsRUFBRSxTQUFpQjtJQUNsRixNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQ3BDLFFBQVEsRUFDUixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUN2QixFQUFFLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFDdEIsSUFBSSxDQUNMLENBQUM7SUFFRixNQUFNLGFBQWEsR0FBRyw0QkFBNEIsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMvRCxNQUFNLHVCQUF1QixHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsMkJBQTJCLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUVsRyxPQUFPLENBQ0wsQ0FBQyxDQUFDLHVCQUF1QjtRQUN6Qix1QkFBdUIsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUM5RixDQUFDO0FBQ0osQ0FBQztBQWZELG9EQWVDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBZ0Isb0NBQW9DLENBQ2xELElBQVUsRUFDVixRQUFnQixFQUNoQixVQUFrQixFQUNsQixVQUFrQjtJQUVsQixNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUMsZ0JBQWdCLENBQ3BDLFFBQVEsRUFDUixJQUFJLENBQUMsUUFBUSxD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LElBQUksQ0FBQyxVQUFVLENBQUM7WUFDaEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUM3QjtZQUNBLE1BQU0sR0FBRyxJQUFJLENBQUM7U0FDZjtRQUVELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDWCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsNkRBQTZEO0FBQzdELFNBQVMsNkJBQTZCLENBQUMsVUFBa0I7SUFDdkQsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FDL0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxxQkFBcUIsQ0FBQyxFQUNsRCxTQUFTLEVBQ1QsU0FBUyxFQUNULENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUMxQyxDQUFDO0FBQ0osQ0FBQztBQUVELHdGQUF3RjtBQUN4RixTQUFTLHlCQUF5QixDQUFDLFVBQWtCO0lBQ25ELE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FDeEMsV0FBVyxFQUNYLEVBQUUsQ0FBQyxPQUFPLENBQUMsNEJBQTRCLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQ3JGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7U2NoZW1hdGljc0V4Y2VwdGlvbiwgVHJlZX0gZnJvbSAnQGFuZ3VsYXItZGV2a2l0L3NjaGVtYXRpY3MnO1xuaW1wb3J0IHtJbnNlcnRDaGFuZ2V9IGZyb20gJ0BzY2hlbWF0aWNzL2FuZ3VsYXIvdXRpbGl0eS9jaGFuZ2UnO1xuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5pbXBvcnQge2luc2VydEltcG9ydH0gZnJvbSAnQHNjaGVtYXRpY3MvYW5ndWxhci91dGlsaXR5L2FzdC11dGlscyc7XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgdGhlIHByb3ZpZGVycyBmcm9tIGEgbW9kdWxlIGFyZSBiZWluZyBpbXBvcnRlZCBpbiBhIGBib290c3RyYXBBcHBsaWNhdGlvbmAgY2FsbC5cbiAqIEBwYXJhbSB0cmVlIEZpbGUgdHJlZSBvZiB0aGUgcHJvamVjdC5cbiAqIEBwYXJhbSBmaWxlUGF0aCBQYXRoIG9mIHRoZSBmaWxlIGluIHdoaWNoIHRvIGNoZWNrLlxuICogQHBhcmFtIGNsYXNzTmFtZSBDbGFzcyBuYW1lIG9mIHRoZSBtb2R1bGUgdG8gc2VhcmNoIGZvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGltcG9ydHNQcm92aWRlcnNGcm9tKHRyZWU6IFRyZWUsIGZpbGVQYXRoOiBzdHJpbmcsIGNsYXNzTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IHNvdXJjZUZpbGUgPSB0cy5jcmVhdGVTb3VyY2VGaWxlKFxuICAgIGZpbGVQYXRoLFxuICAgIHRyZWUucmVhZFRleHQoZmlsZVBhdGgpLFxuICAgIHRzLlNjcmlwdFRhcmdldC5MYXRlc3QsXG4gICAgdHJ1ZSxcbiAgKTtcblxuICBjb25zdCBib290c3RyYXBDYWxsID0gZmluZEJvb3RzdHJhcEFwcGxpY2F0aW9uQ2FsbChzb3VyY2VGaWxlKTtcbiAgY29uc3QgaW1wb3J0UHJvdmlkZXJzRnJvbUNhbGwgPSBib290c3RyYXBDYWxsID8gZmluZEltcG9ydFByb3ZpZGVyc0Zyb21DYWxsKGJvb3RzdHJhcENhbGwpIDogbnVsbDtcblxuICByZXR1cm4gKFxuICAgICEhaW1wb3J0UHJvdmlkZXJzRnJvbUNhbGwgJiZcbiAgICBpbXBvcnRQcm92aWRlcnNGcm9tQ2FsbC5hcmd1bWVudHMuc29tZShhcmcgPT4gdHMuaXNJZGVudGlmaWVyKGFyZykgJiYgYXJnLnRleHQgPT09IGNsYXNzTmFtZSlcbiAgKTtcbn1cblxuLyoqXG4gKiBBZGRzIGFuIGBpbXBvcnRQcm92aWRlcnNGcm9tYCBjYWxsIHRvIHRoZSBgYm9vdHN0cmFwQXBwbGljYXRpb25gIGNhbGwuXG4gKiBAcGFyYW0gdHJlZSBGaWxlIHRyZWUgb2YgdGhlIHByb2plY3QuXG4gKiBAcGFyYW0gZmlsZVBhdGggUGF0aCB0byB0aGUgZmlsZSB0aGF0IHNob3VsZCBiZSB1cGRhdGVkLlxuICogQHBhcmFtIG1vZHVsZU5hbWUgTmFtZSBvZiB0aGUgbW9kdWxlIHRoYXQgc2hvdWxkIGJlIGltcG9ydGVkLlxuICogQHBhcmFtIG1vZHVsZVBhdGggUGF0aCBmcm9tIHdoaWNoIHRvIGltcG9ydCB0aGUgbW9kdWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkTW9kdWxlSW1wb3J0VG9TdGFuZGFsb25lQm9vdHN0cmFwKFxuICB0cmVlOiBUcmVlLFxuICBmaWxlUGF0aDogc3RyaW5nLFxuICBtb2R1bGVOYW1lOiBzdHJpbmcsXG4gIG1vZHVsZVBhdGg6IHN0cmluZyxcbikge1xuICBjb25zdCBzb3VyY2VGaWxlID0gdHMuY3JlYXRlU291cmNlRmlsZShcbiAgICBmaWxlUGF0aCxcbiAgICB0cmVlLnJlYWRUZXh0KGZpbGVQYXRoKSxcbiAgICB0cy5TY3JpcHRUYXJnZXQuTGF0ZXN0LFxuICAgIHRydWUsXG4gICk7XG5cbiAgY29uc3QgYm9vdHN0cmFwQ2FsbCA9IGZpbmRCb290c3RyYXBBcHBsaWNhdGlvbkNhbGwoc291cmNlRmlsZSk7XG5cbiAgaWYgKCFib290c3RyYXBDYWxsKSB7XG4gICAgdGhyb3cgbmV3IFNjaGVtYXRpY3NFeGNlcHRpb24oYENvdWxkIG5vdCBmaW5kIGJvb3RzdHJhcEFwcGxpY2F0aW9uIGNhbGwgaW4gJHtmaWxlUGF0aH1gKTtcbiAgfVxuXG4gIGNvbnN0IHJlY29yZGVyID0gdHJlZS5iZWdpblVwZGF0ZShmaWxlUGF0aCk7XG4gIGNvbnN0IGltcG9ydENhbGwgPSBmaW5kSW1wb3J0UHJvdmlkZXJzRnJvbUNhbGwoYm9vdHN0cmFwQ2FsbCk7XG4gIGNvbnN0IHByaW50ZXIgPSB0cy5jcmVhdGVQcmludGVyKCk7XG4gIGNvbnN0IHNvdXJjZVRleHQgPSBzb3VyY2VGaWxlLmdldFRleHQoKTtcblxuICAvLyBBZGQgaW1wb3J0cyB0byB0aGUgbW9kdWxlIGJlaW5nIGFkZGVkIGFuZCBgaW1wb3J0UHJvdmlkZXJzRnJvbWAuIFdlIGRvbid0XG4gIC8vIGhhdmUgdG8gd29ycnkgYWJvdXQgZHVwbGljYXRlcywgYmVjYXVzZSBgaW5zZXJ0SW1wb3J0YCBoYW5kbGVzIHRoZW0uXG4gIFtcbiAgICBpbnNlcnRJbXBvcnQoc291cmNlRmlsZSwgc291cmNlVGV4dCwgbW9kdWxlTmFtZSwgbW9kdWxlUGF0aCksXG4gICAgaW5zZXJ0SW1wb3J0KHNvdXJjZUZpbGUsIHNvdXJjZVRleHQsICdpbXBvcnRQcm92aWRlcnNGcm9tJywgJ0Bhbmd1bGFyL2NvcmUnKSxcbiAgXS5mb3JFYWNoKGNoYW5nZSA9PiB7XG4gICAgaWYgKGNoYW5nZSBpbnN0YW5jZW9mIEluc2VydENoYW5nZSkge1xuICAgICAgcmVjb3JkZXIuaW5zZXJ0TGVmdChjaGFuZ2UucG9zLCBjaGFuZ2UudG9BZGQpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gSWYgdGhlcmUgaXMgYW4gYGltcG9ydFByb3ZpZGVyc0Zyb21gIGNhbGwgYWxyZWFkeSwgcmV1c2UgaXQuXG4gIGlmIChpbXBvcnRDYWxsKSB7XG4gICAgcmVjb3JkZXIuaW5zZXJ0UmlnaHQoXG4gICAgICBpbXBvcnRDYWxsLmFyZ3VtZW50c1tpbXBvcnRDYWxsLmFyZ3VtZW50cy5sZW5ndGggLSAxXS5nZXRFbmQoKSxcbiAgICAgIGAsICR7bW9kdWxlTmFtZX1gLFxuICAgICk7XG4gIH0gZWxzZSBpZiAoYm9vdHN0cmFwQ2FsbC5hcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgLy8gT3RoZXJ3aXNlIGlmIHRoZXJlIGlzIG5vIG9wdGlvbnMgcGFyYW1ldGVyIHRvIGBib290c3RyYXBBcHBsaWNhdGlvbmAsXG4gICAgLy8gY3JlYXRlIGFuIG9iamVjdCBsaXRlcmFsIHdpdGggYSBgcHJvdmlkZXJzYCBhcnJheSBhbmQgdGhlIGltcG9ydC5cbiAgICBjb25zdCBuZXdDYWxsID0gdHMuZmFjdG9yeS51cGRhdGVDYWxsRXhwcmVzc2lvbihcbiAgICAgIGJvb3RzdHJhcENhbGwsXG4gICAgICBib290c3RyYXBDYWxsLmV4cHJlc3Npb24sXG4gICAgICBib290c3RyYXBDYWxsLnR5cGVBcmd1bWVudHMsXG4gICAgICBbXG4gICAgICAgIC4uLmJvb3RzdHJhcENhbGwuYXJndW1lbnRzLFxuICAgICAgICB0cy5mYWN0b3J5LmNyZWF0ZU9iamVjdExpdGVyYWxFeHByZXNzaW9uKFtjcmVhdGVQcm92aWRlcnNBc3NpZ25tZW50KG1vZHVsZU5hbWUpXSwgdHJ1ZSksXG4gICAgICBdLFxuICAgICk7XG5cbiAgICByZWNvcmRlci5yZW1vdmUoYm9vdHN0cmFwQ2FsbC5nZXRTdGFydCgpLCBib290c3RyYXBDYWxsLmdldFdpZHRoKCkpO1xuICAgIHJlY29yZGVyLmluc2VydFJpZ2h0KFxuICAgICAgYm9vdHN0cmFwQ2FsbC5nZXRTdGFydCgpLFxuICAgICAgcHJpbnRlci5wcmludE5vZGUodHMuRW1pdEhpbnQuVW5zcGVjaWZpZWQsIG5ld0NhbGwsIHNvdXJjZUZpbGUpLFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgcHJvdmlkZXJzTGl0ZXJhbCA9IGZpbmRQcm92aWRlcnNMaXRlcmFsKGJvb3RzdHJhcENhbGwpO1xuXG4gICAgaWYgKHByb3ZpZGVyc0xpdGVyYWwpIHtcbiAgICAgIC8vIElmIHRoZXJlJ3MgYSBgcHJvdmlkZXJzYCBhcnJheSwgYWRkIHRoZSBpbXBvcnQgdG8gaXQuXG4gICAgICBjb25zdCBuZXdQcm92aWRlcnNMaXRlcmFsID0gdHMuZmFjdG9yeS51cGRhdGVBcnJheUxpdGVyYWxFeHByZXNzaW9uKHByb3ZpZGVyc0xpdGVyYWwsIFtcbiAgICAgICAgLi4ucHJvdmlkZXJzTGl0ZXJhbC5lbGVtZW50cyxcbiAgICAgICAgY3JlYXRlSW1wb3J0UHJvdmlkZXJzRnJvbUNhbGwobW9kdWxlTmFtZSksXG4gICAgICBdKTtcbiAgICAgIHJlY29yZGVyLnJlbW92ZShwcm92aWRlcnNMaXRlcmFsLmdldFN0YXJ0KCksIHByb3ZpZGVyc0xpdGVyYWwuZ2V0V2lkdGgoKSk7XG4gICAgICByZWNvcmRlci5pbnNlcnRSaWdodChcbiAgICAgICAgcHJvdmlkZXJzTGl0ZXJhbC5nZXRTdGFydCgpLFxuICAgICAgICBwcmludGVyLnByaW50Tm9kZSh0cy5FbWl0SGludC5VbnNwZWNpZmllZCwgbmV3UHJvdmlkZXJzTGl0ZXJhbCwgc291cmNlRmlsZSksXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPdGhlcndpc2UgYWRkIGEgYHByb3ZpZGVyc2AgYXJyYXkgdG8gdGhlIGV4aXN0aW5nIG9iamVjdCBsaXRlcmFsLlxuICAgICAgY29uc3Qgb3B0aW9uc0xpdGVyYWwgPSBib290c3RyYXBDYWxsLmFyZ3VtZW50c1sxXSBhcyB0cy5PYmplY3RMaXRlcmFsRXhwcmVzc2lvbjtcbiAgICAgIGNvbnN0IG5ld09wdGlvbnNMaXRlcmFsID0gdHMuZmFjdG9yeS51cGRhdGVPYmplY3RMaXRlcmFsRXhwcmVzc2lvbihvcHRpb25zTGl0ZXJhbCwgW1xuICAgICAgICAuLi5vcHRpb25zTGl0ZXJhbC5wcm9wZXJ0aWVzLFxuICAgICAgICBjcmVhdGVQcm92aWRlcnNBc3NpZ25tZW50KG1vZHVsZU5hbWUpLFxuICAgICAgXSk7XG4gICAgICByZWNvcmRlci5yZW1vdmUob3B0aW9uc0xpdGVyYWwuZ2V0U3RhcnQoKSwgb3B0aW9uc0xpdGVyYWwuZ2V0V2lkdGgoKSk7XG4gICAgICByZWNvcmRlci5pbnNlcnRSaWdodChcbiAgICAgICAgb3B0aW9uc0xpdGVyYWwuZ2V0U3RhcnQoKSxcbiAgICAgICAgcHJpbnRlci5wcmludE5vZGUodHMuRW1pdEhpbnQuVW5zcGVjaWZpZWQsIG5ld09wdGlvbnNMaXRlcmFsLCBzb3VyY2VGaWxlKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgdHJlZS5jb21taXRVcGRhdGUocmVjb3JkZXIpO1xufVxuXG4vKiogRmluZHMgdGhlIGNhbGwgdG8gYGJvb3RzdHJhcEFwcGxpY2F0aW9uYCB3aXRoaW4gYSBmaWxlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRCb290c3RyYXBBcHBsaWNhdGlvbkNhbGwoc291cmNlRmlsZTogdHMuU291cmNlRmlsZSk6IHRzLkNhbGxFeHByZXNzaW9uIHwgbnVsbCB7XG4gIGNvbnN0IGxvY2FsTmFtZSA9IGZpbmRJbXBvcnRMb2NhbE5hbWUoXG4gICAgc291cmNlRmlsZSxcbiAgICAnYm9vdHN0cmFwQXBwbGljYXRpb24nLFxuICAgICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJyxcbiAgKTtcblxuICByZXR1cm4gbG9jYWxOYW1lID8gZmluZENhbGwoc291cmNlRmlsZSwgbG9jYWxOYW1lKSA6IG51bGw7XG59XG5cbi8qKiBGaW5kIGEgY2FsbCB0byBgaW1wb3J0UHJvdmlkZXJzRnJvbWAgd2l0aGluIGEgYGJvb3RzdHJhcEFwcGxpY2F0aW9uYCBjYWxsLiAqL1xuZnVuY3Rpb24gZmluZEltcG9ydFByb3ZpZGVyc0Zyb21DYWxsKGJvb3RzdHJhcENhbGw6IHRzLkNhbGxFeHByZXNzaW9uKTogdHMuQ2FsbEV4cHJlc3Npb24gfCBudWxsIHtcbiAgY29uc3QgcHJvdmlkZXJzTGl0ZXJhbCA9IGZpbmRQcm92aWRlcnNMaXRlcmFsKGJvb3RzdHJhcENhbGwpO1xuICBjb25zdCBpbXBvcnRQcm92aWRlcnNOYW1lID0gZmluZEltcG9ydExvY2FsTmFtZShcbiAgICBib290c3RyYXBDYWxsLmdldFNvdXJjZUZpbGUoKSxcbiAgICAnaW1wb3J0UHJvdmlkZXJzRnJvbScsXG4gICAgJ0Bhbmd1bGFyL2NvcmUnLFxuICApO1xuXG4gIGlmIChwcm92aWRlcnNMaXRlcmFsICYmIGltcG9ydFByb3ZpZGVyc05hbWUpIHtcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgcHJvdmlkZXJzTGl0ZXJhbC5lbGVtZW50cykge1xuICAgICAgLy8gTG9vayBmb3IgYW4gYXJyYXkgZWxlbWVudCB0aGF0IGNhbGxzIHRoZSBgaW1wb3J0UHJvdmlkZXJzRnJvbWAgZnVuY3Rpb24uXG4gICAgICBpZiAoXG4gICAgICAgIHRzLmlzQ2FsbEV4cHJlc3Npb24oZWxlbWVudCkgJiZcbiAgICAgICAgdHMuaXNJZGVudGlmaWVyKGVsZW1lbnQuZXhwcmVzc2lvbikgJiZcbiAgICAgICAgZWxlbWVudC5leHByZXNzaW9uLnRleHQgPT09IGltcG9ydFByb3ZpZGVyc05hbWVcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqIEZpbmRzIHRoZSBgcHJvdmlkZXJzYCBhcnJheSBsaXRlcmFsIHdpdGhpbiBhIGBib290c3RyYXBBcHBsaWNhdGlvbmAgY2FsbC4gKi9cbmZ1bmN0aW9uIGZpbmRQcm92aWRlcnNMaXRlcmFsKGJvb3RzdHJhcENhbGw6IHRzLkNhbGxFeHByZXNzaW9uKTogdHMuQXJyYXlMaXRlcmFsRXhwcmVzc2lvbiB8IG51bGwge1xuICAvLyBUaGUgaW1wb3J0cyBoYXZlIHRvIGJlIGluIHRoZSBzZWNvbmQgYXJndW1lbnQgb2ZcbiAgLy8gdGhlIGZ1bmN0aW9uIHdoaWNoIGhhcyB0byBiZSBhbiBvYmplY3QgbGl0ZXJhbC5cbiAgaWYgKFxuICAgIGJvb3RzdHJhcENhbGwuYXJndW1lbnRzLmxlbmd0aCA+IDEgJiZcbiAgICB0cy5pc09iamVjdExpdGVyYWxFeHByZXNzaW9uKGJvb3RzdHJhcENhbGwuYXJndW1lbnRzWzFdKVxuICApIHtcbiAgICBmb3IgKGNvbnN0IHByb3Agb2YgYm9vdHN0cmFwQ2FsbC5hcmd1bWVudHNbMV0ucHJvcGVydGllcykge1xuICAgICAgaWYgKFxuICAgICAgICB0cy5pc1Byb3BlcnR5QXNzaWdubWVudChwcm9wKSAmJlxuICAgICAgICB0cy5pc0lkZW50aWZpZXIocHJvcC5uYW1lKSAmJlxuICAgICAgICBwcm9wLm5hbWUudGV4dCA9PT0gJ3Byb3ZpZGVycycgJiZcbiAgICAgICAgdHMuaXNBcnJheUxpdGVyYWxFeHByZXNzaW9uKHByb3AuaW5pdGlhbGl6ZXIpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHByb3AuaW5pdGlhbGl6ZXI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogRmluZHMgdGhlIGxvY2FsIG5hbWUgb2YgYW4gaW1wb3J0ZWQgc3ltYm9sLiBDb3VsZCBiZSB0aGUgc3ltYm9sIG5hbWUgaXRzZWxmIG9yIGl0cyBhbGlhcy5cbiAqIEBwYXJhbSBzb3VyY2VGaWxlIEZpbGUgd2l0aGluIHdoaWNoIHRvIHNlYXJjaCBmb3IgdGhlIGltcG9ydC5cbiAqIEBwYXJhbSBuYW1lIEFjdHVhbCBuYW1lIG9mIHRoZSBpbXBvcnQsIG5vdCBpdHMgbG9jYWwgYWxpYXMuXG4gKiBAcGFyYW0gbW9kdWxlTmFtZSBOYW1lIG9mIHRoZSBtb2R1bGUgZnJvbSB3aGljaCB0aGUgc3ltYm9sIGlzIGltcG9ydGVkLlxuICovXG5mdW5jdGlvbiBmaW5kSW1wb3J0TG9jYWxOYW1lKFxuICBzb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlLFxuICBuYW1lOiBzdHJpbmcsXG4gIG1vZHVsZU5hbWU6IHN0cmluZyxcbik6IHN0cmluZyB8IG51bGwge1xuICBmb3IgKGNvbnN0IG5vZGUgb2Ygc291cmNlRmlsZS5zdGF0ZW1lbnRzKSB7XG4gICAgLy8gT25seSBsb29rIGZvciB0b3AtbGV2ZWwgaW1wb3J0cy5cbiAgICBpZiAoXG4gICAgICAhdHMuaXNJbXBvcnREZWNsYXJhdGlvbihub2RlKSB8fFxuICAgICAgIXRzLmlzU3RyaW5nTGl0ZXJhbChub2RlLm1vZHVsZVNwZWNpZmllcikgfHxcbiAgICAgIG5vZGUubW9kdWxlU3BlY2lmaWVyLnRleHQgIT09IG1vZHVsZU5hbWVcbiAgICApIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIEZpbHRlciBvdXQgaW1wb3J0cyB0aGF0IGRvbid0IGhhdmUgdGhlIHJpZ2h0IHNoYXBlLlxuICAgIGlmIChcbiAgICAgICFub2RlLmltcG9ydENsYXVzZSB8fFxuICAgICAgIW5vZGUuaW1wb3J0Q2xhdXNlLm5hbWVkQmluZGluZ3MgfHxcbiAgICAgICF0cy5pc05hbWVkSW1wb3J0cyhub2RlLmltcG9ydENsYXVzZS5uYW1lZEJpbmRpbmdzKVxuICAgICkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gTG9vayB0aHJvdWdoIHRoZSBlbGVtZW50cyBvZiB0aGUgZGVjbGFyYXRpb24gZm9yIHRoZSBzcGVjaWZpYyBpbXBvcnQuXG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIG5vZGUuaW1wb3J0Q2xhdXNlLm5hbWVkQmluZGluZ3MuZWxlbWVudHMpIHtcbiAgICAgIGlmICgoZWxlbWVudC5wcm9wZXJ0eU5hbWUgfHwgZWxlbWVudC5uYW1lKS50ZXh0ID09PSBuYW1lKSB7XG4gICAgICAgIC8vIFRoZSBsb2NhbCBuYW1lIGlzIGFsd2F5cyBpbiBgbmFtZWAuXG4gICAgICAgIHJldHVybiBlbGVtZW50Lm5hbWUudGV4dDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBGaW5kcyBhIGNhbGwgdG8gYSBmdW5jdGlvbiB3aXRoIGEgc3BlY2lmaWMgbmFtZS5cbiAqIEBwYXJhbSByb290Tm9kZSBOb2RlIGZyb20gd2hpY2ggdG8gc3RhcnQgc2VhcmNoaW5nLlxuICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgZnVuY3Rpb24gdG8gc2VhcmNoIGZvci5cbiAqL1xuZnVuY3Rpb24gZmluZENhbGwocm9vdE5vZGU6IHRzLk5vZGUsIG5hbWU6IHN0cmluZyk6IHRzLkNhbGxFeHByZXNzaW9uIHwgbnVsbCB7XG4gIGxldCByZXN1bHQ6IHRzLkNhbGxFeHByZXNzaW9uIHwgbnVsbCA9IG51bGw7XG5cbiAgcm9vdE5vZGUuZm9yRWFjaENoaWxkKGZ1bmN0aW9uIHdhbGsobm9kZSkge1xuICAgIGlmIChcbiAgICAgIHRzLmlzQ2FsbEV4cHJlc3Npb24obm9kZSkgJiZcbiAgICAgIHRzLmlzSWRlbnRpZmllcihub2RlLmV4cHJlc3Npb24pICYmXG4gICAgICBub2RlLmV4cHJlc3Npb24udGV4dCA9PT0gbmFtZVxuICAgICkge1xuICAgICAgcmVzdWx0ID0gbm9kZTtcbiAgICB9XG5cbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgbm9kZS5mb3JFYWNoQ2hpbGQod2Fsayk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKiogQ3JlYXRlcyBhbiBgaW1wb3J0UHJvdmlkZXJzRnJvbSh7e21vZHVsZU5hbWV9fSlgIGNhbGwuICovXG5mdW5jdGlvbiBjcmVhdGVJbXBvcnRQcm92aWRlcnNGcm9tQ2FsbChtb2R1bGVOYW1lOiBzdHJpbmcpOiB0cy5DYWxsRXhwcmVzc2lvbiB7XG4gIHJldHVybiB0cy5mYWN0b3J5LmNyZWF0ZUNhbGxDaGFpbihcbiAgICB0cy5mYWN0b3J5LmNyZWF0ZUlkZW50aWZpZXIoJ2ltcG9ydFByb3ZpZGVyc0Zyb20nKSxcbiAgICB1bmRlZmluZWQsXG4gICAgdW5kZWZpbmVkLFxuICAgIFt0cy5mYWN0b3J5LmNyZWF0ZUlkZW50aWZpZXIobW9kdWxlTmFtZSldLFxuICApO1xufVxuXG4vKiogQ3JlYXRlcyBhIGBwcm92aWRlcnM6IFtpbXBvcnRQcm92aWRlcnNGcm9tKHt7bW9kdWxlTmFtZX19KV1gIHByb3BlcnR5IGFzc2lnbm1lbnQuICovXG5mdW5jdGlvbiBjcmVhdGVQcm92aWRlcnNBc3NpZ25tZW50KG1vZHVsZU5hbWU6IHN0cmluZyk6IHRzLlByb3BlcnR5QXNzaWdubWVudCB7XG4gIHJldHVybiB0cy5mYWN0b3J5LmNyZWF0ZVByb3BlcnR5QXNzaWdubWVudChcbiAgICAncHJvdmlkZXJzJyxcbiAgICB0cy5mYWN0b3J5LmNyZWF0ZUFycmF5TGl0ZXJhbEV4cHJlc3Npb24oW2NyZWF0ZUltcG9ydFByb3ZpZGVyc0Zyb21DYWxsKG1vZHVsZU5hbWUpXSksXG4gICk7XG59XG4iXX0=