@nx/angular 0.0.0-pr-31222-862e973 → 0.0.0-pr-31313-387cdca

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 (477) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -1
  3. package/executors.d.ts +1 -6
  4. package/executors.js +2 -3
  5. package/executors.json +2 -2
  6. package/fesm2022/nx-angular-mf.mjs +64 -0
  7. package/fesm2022/nx-angular-mf.mjs.map +1 -1
  8. package/fesm2022/nx-angular.mjs +0 -352
  9. package/fesm2022/nx-angular.mjs.map +1 -1
  10. package/generators.d.ts +0 -1
  11. package/generators.js +0 -1
  12. package/generators.json +19 -18
  13. package/index.d.ts +1 -1
  14. package/mf/mf.d.ts +64 -0
  15. package/migrations.json +778 -1289
  16. package/module-federation/index.d.ts +5 -2
  17. package/module-federation/index.js +3 -4
  18. package/ng-package.json +2 -2
  19. package/package.json +17 -29
  20. package/src/builders/dev-server/dev-server.impl.js +6 -4
  21. package/src/builders/dev-server/lib/normalize-options.js +3 -0
  22. package/src/builders/dev-server/lib/validate-options.js +1 -9
  23. package/src/builders/dev-server/schema.d.ts +3 -0
  24. package/src/builders/dev-server/schema.json +8 -8
  25. package/src/builders/webpack-browser/schema.d.ts +0 -5
  26. package/src/builders/webpack-browser/schema.json +0 -2
  27. package/src/builders/webpack-browser/webpack-browser.impl.js +3 -4
  28. package/src/builders/webpack-server/schema.json +0 -1
  29. package/src/executors/application/application.impl.d.ts +1 -1
  30. package/src/executors/application/application.impl.js +4 -1
  31. package/src/executors/application/schema.json +78 -8
  32. package/src/executors/application/utils/normalize-options.d.ts +2 -0
  33. package/src/executors/application/utils/normalize-options.js +34 -0
  34. package/src/executors/application/utils/validate-options.js +18 -4
  35. package/src/executors/browser-esbuild/browser-esbuild.impl.d.ts +1 -1
  36. package/src/executors/browser-esbuild/browser-esbuild.impl.js +0 -9
  37. package/src/executors/browser-esbuild/schema.json +1 -3
  38. package/src/executors/delegate-build/delegate-build.impl.d.ts +1 -3
  39. package/src/executors/delegate-build/delegate-build.impl.js +0 -3
  40. package/src/executors/module-federation-dev-server/lib/index.d.ts +0 -2
  41. package/src/executors/module-federation-dev-server/lib/index.js +0 -2
  42. package/src/executors/module-federation-dev-server/lib/normalize-options.js +1 -0
  43. package/src/executors/module-federation-dev-server/lib/start-dev-remotes.d.ts +1 -1
  44. package/src/executors/module-federation-dev-server/module-federation-dev-server.impl.d.ts +1 -1
  45. package/src/executors/module-federation-dev-server/module-federation-dev-server.impl.js +5 -31
  46. package/src/executors/module-federation-dev-server/schema.d.ts +4 -0
  47. package/src/executors/module-federation-dev-server/schema.json +2 -1
  48. package/src/executors/module-federation-ssr-dev-server/lib/normalize-options.d.ts +2 -2
  49. package/src/executors/module-federation-ssr-dev-server/lib/normalize-options.js +1 -0
  50. package/src/executors/module-federation-ssr-dev-server/lib/start-dev-remotes.d.ts +1 -1
  51. package/src/executors/module-federation-ssr-dev-server/module-federation-ssr-dev-server.impl.d.ts +1 -1
  52. package/src/executors/module-federation-ssr-dev-server/module-federation-ssr-dev-server.impl.js +7 -35
  53. package/src/executors/module-federation-ssr-dev-server/schema.d.ts +8 -14
  54. package/src/executors/module-federation-ssr-dev-server/schema.json +1 -0
  55. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ng-package/entry-point/entry-point.d.ts +3 -0
  56. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ng-package/entry-point/entry-point.js +22 -0
  57. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ng-package/entry-point/write-bundles.di.d.ts +2 -0
  58. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ng-package/entry-point/write-bundles.di.js +17 -0
  59. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/{v17+/ng-package → ng-package}/entry-point/write-bundles.transform.d.ts +3 -1
  60. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ng-package/entry-point/write-bundles.transform.js +49 -0
  61. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ng-packagr.d.ts +2 -3
  62. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/ng-packagr.js +7 -26
  63. package/src/executors/ng-packagr-lite/ng-packagr-lite.impl.d.ts +1 -1
  64. package/src/executors/ng-packagr-lite/ng-packagr-lite.impl.js +1 -1
  65. package/src/executors/ng-packagr-lite/schema.json +3 -7
  66. package/src/executors/package/ng-packagr-adjustments/ng-packagr.d.ts +2 -3
  67. package/src/executors/package/ng-packagr-adjustments/ng-packagr.js +4 -21
  68. package/src/executors/package/package.impl.d.ts +2 -2
  69. package/src/executors/package/package.impl.js +6 -4
  70. package/src/executors/package/schema.d.ts +4 -6
  71. package/src/executors/package/schema.json +4 -10
  72. package/src/executors/utilities/ng-packagr/ng-packagr-version.d.ts +2 -0
  73. package/src/executors/utilities/ng-packagr/ng-packagr-version.js +11 -0
  74. package/src/executors/utilities/ng-packagr/package-imports.d.ts +1 -0
  75. package/src/executors/utilities/ng-packagr/package-imports.js +10 -0
  76. package/src/executors/utilities/ng-packagr/{stylesheet-processor.js → pre-v19/stylesheet-processor.js} +4 -4
  77. package/src/executors/utilities/ng-packagr/stylesheet-processor.di.d.ts +1 -1
  78. package/src/executors/utilities/ng-packagr/stylesheet-processor.di.js +23 -14
  79. package/src/executors/utilities/ng-packagr/tailwindcss.d.ts +0 -6
  80. package/src/executors/utilities/ng-packagr/tailwindcss.js +0 -32
  81. package/src/executors/utilities/ng-packagr/v19+/stylesheet-processor.d.ts +14 -0
  82. package/src/executors/utilities/ng-packagr/v19+/stylesheet-processor.js +99 -0
  83. package/src/generators/add-linting/add-linting.js +2 -17
  84. package/src/generators/add-linting/lib/create-eslint-configuration.d.ts +2 -2
  85. package/src/generators/add-linting/lib/create-eslint-configuration.js +2 -2
  86. package/src/generators/add-linting/schema.d.ts +1 -0
  87. package/src/generators/application/application.d.ts +0 -1
  88. package/src/generators/application/application.js +24 -9
  89. package/src/generators/application/files/ng-module/src/app/app.component.html__tpl__ +8 -1
  90. package/src/generators/application/files/ng-module/src/app/app.component.ts__tpl__ +4 -5
  91. package/src/generators/application/files/nx-welcome/claimed/ng-module/src/app/nx-welcome.component.ts__tpl__ +2 -1
  92. package/src/generators/application/files/nx-welcome/claimed/standalone/src/app/nx-welcome.component.ts__tpl__ +2 -2
  93. package/src/generators/application/files/nx-welcome/not-configured/ng-module/src/app/nx-welcome.component.ts__tpl__ +2 -1
  94. package/src/generators/application/files/nx-welcome/not-configured/standalone/src/app/nx-welcome.component.ts__tpl__ +2 -2
  95. package/src/generators/application/files/nx-welcome/unclaimed/ng-module/src/app/nx-welcome.component.ts__tpl__ +2 -1
  96. package/src/generators/application/files/nx-welcome/unclaimed/standalone/src/app/nx-welcome.component.ts__tpl__ +2 -2
  97. package/src/generators/application/files/rspack-ssr/server.ts__tmpl__ +72 -0
  98. package/src/generators/application/files/standalone-components/src/app/app.component.html__tpl__ +8 -1
  99. package/src/generators/application/files/standalone-components/src/app/app.component.ts__tpl__ +4 -6
  100. package/src/generators/application/lib/add-e2e.js +2 -9
  101. package/src/generators/application/lib/add-linting.js +2 -2
  102. package/src/generators/application/lib/add-serve-static-target.d.ts +1 -1
  103. package/src/generators/application/lib/add-serve-static-target.js +2 -3
  104. package/src/generators/application/lib/add-unit-test-runner.js +20 -7
  105. package/src/generators/application/lib/create-files.js +4 -1
  106. package/src/generators/application/lib/create-project.js +25 -31
  107. package/src/generators/application/lib/normalize-options.d.ts +1 -1
  108. package/src/generators/application/lib/normalize-options.js +14 -15
  109. package/src/generators/application/schema.d.ts +5 -6
  110. package/src/generators/application/schema.json +16 -21
  111. package/src/generators/component/component.d.ts +0 -1
  112. package/src/generators/component/component.js +4 -7
  113. package/src/generators/component/files/__fileName__.__style__ +1 -1
  114. package/src/generators/component/files/__fileName__.spec.ts__tpl__ +1 -1
  115. package/src/generators/component/files/__fileName__.ts__tpl__ +5 -13
  116. package/src/generators/component/lib/normalize-options.js +8 -6
  117. package/src/generators/component/schema.d.ts +3 -18
  118. package/src/generators/component/schema.json +11 -28
  119. package/src/generators/component-story/files/__componentFileName__.stories.ts__tmpl__ +4 -4
  120. package/src/generators/component-test/component-test.js +1 -1
  121. package/src/generators/convert-to-application-executor/convert-to-application-executor.js +1 -4
  122. package/src/generators/convert-to-application-executor/schema.json +1 -1
  123. package/src/generators/convert-to-rspack/convert-to-rspack.d.ts +4 -0
  124. package/src/generators/convert-to-rspack/convert-to-rspack.js +357 -0
  125. package/src/generators/convert-to-rspack/lib/create-config.d.ts +2 -0
  126. package/src/generators/convert-to-rspack/lib/create-config.js +45 -0
  127. package/src/generators/convert-to-rspack/lib/get-custom-webpack-config.d.ts +6 -0
  128. package/src/generators/convert-to-rspack/lib/get-custom-webpack-config.js +77 -0
  129. package/src/generators/convert-to-rspack/lib/update-tsconfig.d.ts +2 -0
  130. package/src/generators/convert-to-rspack/lib/update-tsconfig.js +26 -0
  131. package/src/generators/convert-to-rspack/lib/validate-supported-executor.d.ts +2 -0
  132. package/src/generators/convert-to-rspack/lib/validate-supported-executor.js +14 -0
  133. package/src/generators/convert-to-rspack/schema.d.ts +5 -0
  134. package/src/generators/convert-to-rspack/schema.json +30 -0
  135. package/src/generators/cypress-component-configuration/cypress-component-configuration.d.ts +1 -2
  136. package/src/generators/cypress-component-configuration/cypress-component-configuration.js +1 -7
  137. package/src/generators/directive/directive.js +5 -0
  138. package/src/generators/directive/files/__fileName__.ts__tpl__ +2 -2
  139. package/src/generators/directive/lib/normalize-options.js +6 -7
  140. package/src/generators/directive/schema.d.ts +2 -17
  141. package/src/generators/directive/schema.json +20 -28
  142. package/src/generators/federate-module/lib/add-remote.js +0 -3
  143. package/src/generators/federate-module/schema.d.ts +0 -2
  144. package/src/generators/federate-module/schema.json +19 -16
  145. package/src/generators/host/files/common/{v17+/src → src}/main.server.ts__tmpl__ +1 -1
  146. package/src/generators/host/files/js/webpack.server.config.js__tmpl__ +1 -1
  147. package/src/generators/host/files/ts/webpack.server.config.ts__tmpl__ +1 -1
  148. package/src/generators/host/host.d.ts +1 -2
  149. package/src/generators/host/host.js +33 -25
  150. package/src/generators/host/lib/update-ssr-setup.js +7 -3
  151. package/src/generators/host/schema.d.ts +4 -5
  152. package/src/generators/host/schema.json +34 -27
  153. package/src/generators/init/init.js +3 -1
  154. package/src/generators/library/files/base/README.md__tpl__ +2 -2
  155. package/src/generators/library/lib/add-project.d.ts +1 -1
  156. package/src/generators/library/lib/add-project.js +7 -1
  157. package/src/generators/library/lib/add-standalone-component.js +4 -3
  158. package/src/generators/library/lib/normalize-options.js +4 -5
  159. package/src/generators/library/lib/normalized-schema.d.ts +2 -3
  160. package/src/generators/library/library.d.ts +0 -1
  161. package/src/generators/library/library.js +27 -19
  162. package/src/generators/library/schema.d.ts +2 -5
  163. package/src/generators/library/schema.json +9 -20
  164. package/src/generators/move/lib/update-secondary-entry-points.js +1 -0
  165. package/src/generators/move/move.d.ts +3 -1
  166. package/src/generators/move/move.js +4 -8
  167. package/src/generators/move/schema.d.ts +0 -3
  168. package/src/generators/move/schema.json +0 -5
  169. package/src/generators/ng-add/migrators/builders/angular-devkit-karma.migrator.js +1 -1
  170. package/src/generators/ng-add/migrators/builders/angular-devkit-ng-packagr.migrator.js +4 -3
  171. package/src/generators/ng-add/migrators/builders/angular-eslint-lint.migrator.js +1 -1
  172. package/src/generators/ng-add/migrators/builders/builder.migrator.d.ts +2 -2
  173. package/src/generators/ng-add/migrators/builders/builder.migrator.js +4 -4
  174. package/src/generators/ng-add/migrators/projects/e2e.migrator.js +4 -4
  175. package/src/generators/ng-add/migrators/projects/project.migrator.js +1 -1
  176. package/src/generators/ng-add/utilities/validation-logging.js +5 -4
  177. package/src/generators/ng-add/utilities/workspace.js +5 -2
  178. package/src/generators/ngrx/ngrx.d.ts +3 -0
  179. package/src/generators/ngrx/ngrx.js +3 -0
  180. package/src/generators/ngrx/schema.json +1 -1
  181. package/src/generators/ngrx-feature-store/schema.d.ts +1 -1
  182. package/src/generators/ngrx-root-store/lib/add-imports.js +4 -4
  183. package/src/generators/ngrx-root-store/lib/normalize-options.js +3 -2
  184. package/src/generators/pipe/files/__fileName__.ts__tpl__ +2 -2
  185. package/src/generators/pipe/lib/normalize-options.js +6 -7
  186. package/src/generators/pipe/pipe.js +5 -0
  187. package/src/generators/pipe/schema.d.ts +2 -17
  188. package/src/generators/pipe/schema.json +20 -28
  189. package/src/generators/remote/files/base/webpack.server.config.js__tmpl__ +1 -1
  190. package/src/generators/remote/files/base-ts/webpack.server.config.ts__tmpl__ +1 -1
  191. package/src/generators/remote/files/common/{v17+/src → src}/main.server.ts__tmpl__ +1 -1
  192. package/src/generators/remote/lib/update-ssr-setup.js +7 -3
  193. package/src/generators/remote/remote.d.ts +1 -2
  194. package/src/generators/remote/remote.js +38 -14
  195. package/src/generators/remote/schema.d.ts +4 -5
  196. package/src/generators/remote/schema.json +32 -25
  197. package/src/generators/scam/lib/normalize-options.js +6 -7
  198. package/src/generators/scam/scam.js +0 -2
  199. package/src/generators/scam/schema.d.ts +3 -17
  200. package/src/generators/scam/schema.json +16 -30
  201. package/src/generators/scam-directive/lib/normalize-options.js +6 -7
  202. package/src/generators/scam-directive/scam-directive.js +0 -2
  203. package/src/generators/scam-directive/schema.d.ts +3 -17
  204. package/src/generators/scam-directive/schema.json +16 -31
  205. package/src/generators/scam-pipe/lib/normalize-options.js +6 -7
  206. package/src/generators/scam-pipe/scam-pipe.js +0 -2
  207. package/src/generators/scam-pipe/schema.d.ts +3 -17
  208. package/src/generators/scam-pipe/schema.json +16 -31
  209. package/src/generators/scam-to-standalone/lib/convert-scam-to-standalone.d.ts +1 -1
  210. package/src/generators/scam-to-standalone/lib/convert-scam-to-standalone.js +5 -4
  211. package/src/generators/scam-to-standalone/lib/replace-module-usages-with-component.js +3 -1
  212. package/src/generators/setup-mf/files/entry-module-files/entry.component.ts__tmpl__ +2 -1
  213. package/src/generators/setup-mf/files/standalone-entry-component-files/entry.component.ts__tmpl__ +2 -2
  214. package/src/generators/setup-mf/files/ts-webpack/module-federation.config.ts__tmpl__ +4 -1
  215. package/src/generators/setup-mf/files/ts-webpack/webpack.config.ts__tmpl__ +1 -1
  216. package/src/generators/setup-mf/files/ts-webpack/webpack.prod.config.ts__tmpl__ +1 -1
  217. package/src/generators/setup-mf/files/webpack/module-federation.config.js__tmpl__ +3 -0
  218. package/src/generators/setup-mf/files/webpack/webpack.config.js__tmpl__ +1 -1
  219. package/src/generators/setup-mf/files/webpack/webpack.prod.config.js__tmpl__ +1 -1
  220. package/src/generators/setup-mf/lib/add-remote-entry.js +5 -0
  221. package/src/generators/setup-mf/lib/add-remote-to-host.js +21 -8
  222. package/src/generators/setup-mf/lib/fix-bootstrap.js +3 -2
  223. package/src/generators/setup-mf/lib/setup-serve-target.js +1 -0
  224. package/src/generators/setup-mf/lib/setup-tspath-for-remote.js +1 -1
  225. package/src/generators/setup-mf/schema.json +5 -3
  226. package/src/generators/setup-mf/setup-mf.js +5 -2
  227. package/src/generators/setup-ssr/files/{server → pre-v19/server}/application-builder/__serverFileName__ +1 -1
  228. package/src/generators/setup-ssr/files/{server/server-builder/v17+ → pre-v19/server/server-builder}/__serverFileName__ +1 -1
  229. package/src/generators/setup-ssr/files/v19+/application-builder/ngmodule-src/__main__ +1 -0
  230. package/src/generators/setup-ssr/files/v19+/application-builder/ngmodule-src/app/__rootModuleFileName__ +13 -0
  231. package/src/generators/setup-ssr/files/v19+/application-builder/ngmodule-src/app/app.routes.server.ts__tpl__ +8 -0
  232. package/src/generators/setup-ssr/files/v19+/application-builder/server/__serverFileName__ +66 -0
  233. package/src/generators/setup-ssr/files/v19+/application-builder/standalone-src/__main__ +7 -0
  234. package/src/generators/setup-ssr/files/v19+/application-builder/standalone-src/app/app.config.server.ts__tpl__ +14 -0
  235. package/src/generators/setup-ssr/files/v19+/application-builder/standalone-src/app/app.routes.server.ts__tpl__ +8 -0
  236. package/src/generators/setup-ssr/files/v19+/application-builder-common-engine/server/__serverFileName__ +67 -0
  237. package/src/generators/setup-ssr/files/v19+/server-builder/ngmodule-src/__main__ +1 -0
  238. package/src/generators/setup-ssr/files/v19+/server-builder/ngmodule-src/app/__rootModuleFileName__ +14 -0
  239. package/src/generators/setup-ssr/files/v19+/server-builder/root/tsconfig.server.json.template +16 -0
  240. package/src/generators/setup-ssr/files/{server/server-builder/pre-v17 → v19+/server-builder/server}/__serverFileName__ +25 -15
  241. package/src/generators/setup-ssr/files/v19+/server-builder/standalone-src/__main__ +7 -0
  242. package/src/generators/setup-ssr/files/v19+/server-builder/standalone-src/app/app.config.server.ts.template +11 -0
  243. package/src/generators/setup-ssr/lib/add-dependencies.js +6 -17
  244. package/src/generators/setup-ssr/lib/add-hydration.d.ts +2 -2
  245. package/src/generators/setup-ssr/lib/add-hydration.js +10 -2
  246. package/src/generators/setup-ssr/lib/add-server-file.d.ts +2 -2
  247. package/src/generators/setup-ssr/lib/add-server-file.js +24 -10
  248. package/src/generators/setup-ssr/lib/generate-files.d.ts +2 -2
  249. package/src/generators/setup-ssr/lib/generate-files.js +31 -8
  250. package/src/generators/setup-ssr/lib/generate-server-ts-config.d.ts +3 -3
  251. package/src/generators/setup-ssr/lib/generate-server-ts-config.js +24 -3
  252. package/src/generators/setup-ssr/lib/normalize-options.d.ts +3 -14
  253. package/src/generators/setup-ssr/lib/normalize-options.js +27 -6
  254. package/src/generators/setup-ssr/lib/set-router-initial-navigation.d.ts +2 -2
  255. package/src/generators/setup-ssr/lib/update-project-config.d.ts +3 -3
  256. package/src/generators/setup-ssr/lib/update-project-config.js +37 -24
  257. package/src/generators/setup-ssr/lib/validate-options.js +5 -0
  258. package/src/generators/setup-ssr/schema.d.ts +5 -0
  259. package/src/generators/setup-ssr/schema.json +6 -8
  260. package/src/generators/setup-ssr/setup-ssr.js +6 -11
  261. package/src/generators/setup-tailwind/lib/index.d.ts +1 -1
  262. package/src/generators/setup-tailwind/lib/index.js +1 -1
  263. package/src/generators/setup-tailwind/lib/update-application-styles.js +1 -1
  264. package/src/generators/setup-tailwind/lib/validate-build-target.d.ts +3 -0
  265. package/src/generators/setup-tailwind/lib/{add-tailwind-config-path-to-project.js → validate-build-target.js} +5 -15
  266. package/src/generators/setup-tailwind/setup-tailwind.js +4 -1
  267. package/src/generators/stories/schema.d.ts +0 -2
  268. package/src/generators/stories/schema.json +0 -10
  269. package/src/generators/stories/stories.js +2 -21
  270. package/src/generators/storybook-configuration/lib/generate-stories.js +0 -6
  271. package/src/generators/storybook-configuration/lib/generate-storybook-configuration.js +0 -2
  272. package/src/generators/storybook-configuration/schema.d.ts +0 -3
  273. package/src/generators/storybook-configuration/schema.json +0 -15
  274. package/src/generators/storybook-configuration/storybook-configuration.js +0 -3
  275. package/src/generators/utils/add-jest.d.ts +1 -0
  276. package/src/generators/utils/add-jest.js +5 -9
  277. package/src/generators/utils/add-vitest.d.ts +9 -0
  278. package/src/generators/utils/add-vitest.js +21 -0
  279. package/src/generators/utils/assert-mf-utils.d.ts +1 -0
  280. package/src/generators/utils/assert-mf-utils.js +11 -0
  281. package/src/generators/utils/ensure-angular-dependencies.js +0 -1
  282. package/src/generators/utils/storybook-ast/component-info.js +13 -3
  283. package/src/generators/utils/testing.js +15 -28
  284. package/src/generators/utils/validations.d.ts +1 -0
  285. package/src/generators/utils/validations.js +10 -0
  286. package/src/generators/utils/version-utils.d.ts +1 -0
  287. package/src/generators/utils/version-utils.js +7 -2
  288. package/src/migrations/update-16-2-0/switch-data-persistence-operators-imports-to-ngrx-router-store.js +4 -4
  289. package/src/migrations/update-19-6-0/turn-off-dts-by-default.js +2 -2
  290. package/src/migrations/update-20-2-0/add-localize-polyfill-to-targets.d.ts +3 -0
  291. package/src/migrations/update-20-2-0/add-localize-polyfill-to-targets.js +55 -0
  292. package/src/migrations/{update-14-2-0/remove-show-circular-dependencies-option.d.ts → update-20-2-0/disable-angular-eslint-prefer-standalone.d.ts} +1 -1
  293. package/src/migrations/update-20-2-0/disable-angular-eslint-prefer-standalone.js +55 -0
  294. package/src/migrations/update-20-2-0/migrate-mf-imports-to-new-package.d.ts +2 -0
  295. package/src/migrations/update-20-2-0/migrate-mf-imports-to-new-package.js +61 -0
  296. package/src/migrations/update-20-2-0/migrate-with-mf-import-to-new-package.d.ts +2 -0
  297. package/src/migrations/update-20-2-0/migrate-with-mf-import-to-new-package.js +41 -0
  298. package/src/migrations/update-20-2-0/remove-angular-eslint-rules.d.ts +3 -0
  299. package/src/migrations/update-20-2-0/remove-angular-eslint-rules.js +62 -0
  300. package/src/migrations/update-20-2-0/remove-tailwind-config-from-ng-packagr-executors.d.ts +3 -0
  301. package/src/migrations/update-20-2-0/remove-tailwind-config-from-ng-packagr-executors.js +73 -0
  302. package/src/migrations/{update-14-5-2 → update-20-2-0}/update-angular-cli.d.ts +1 -0
  303. package/src/migrations/{update-16-1-0 → update-20-2-0}/update-angular-cli.js +1 -1
  304. package/src/migrations/{update-14-2-0/update-libraries-secondary-entrypoints.d.ts → update-20-2-0/update-angular-ssr-imports-to-use-node-entry-point.d.ts} +1 -1
  305. package/src/migrations/update-20-2-0/update-angular-ssr-imports-to-use-node-entry-point.js +55 -0
  306. package/src/migrations/update-20-3-0/ensure-nx-module-federation-package.d.ts +2 -0
  307. package/src/migrations/update-20-3-0/ensure-nx-module-federation-package.js +18 -0
  308. package/src/migrations/{update-14-2-0 → update-20-4-0}/update-angular-cli.d.ts +1 -0
  309. package/src/migrations/{update-14-2-0 → update-20-4-0}/update-angular-cli.js +4 -3
  310. package/src/migrations/{update-14-6-0 → update-20-5-0}/update-angular-cli.d.ts +1 -0
  311. package/src/migrations/{update-14-5-2 → update-20-5-0}/update-angular-cli.js +4 -3
  312. package/src/migrations/{update-14-2-0/update-ngcc-target.d.ts → update-21-0-0/change-data-persistence-operators-imports-to-ngrx-router-store-data-persistence.d.ts} +1 -1
  313. package/src/migrations/update-21-0-0/change-data-persistence-operators-imports-to-ngrx-router-store-data-persistence.js +122 -0
  314. package/src/migrations/update-21-0-0/set-continuous-option.d.ts +3 -0
  315. package/src/migrations/update-21-0-0/set-continuous-option.js +29 -0
  316. package/src/plugins/plugin.js +7 -2
  317. package/src/utils/backward-compatible-versions.d.ts +4 -4
  318. package/src/utils/backward-compatible-versions.js +27 -23
  319. package/src/utils/nx-devkit/ast-utils.d.ts +3 -2
  320. package/src/utils/nx-devkit/ast-utils.js +22 -4
  321. package/src/utils/test-runners.d.ts +2 -1
  322. package/src/utils/test-runners.js +1 -0
  323. package/src/utils/versions.d.ts +13 -11
  324. package/src/utils/versions.js +14 -12
  325. package/esm2022/index.mjs +0 -2
  326. package/esm2022/mf/index.mjs +0 -2
  327. package/esm2022/mf/mf.mjs +0 -52
  328. package/esm2022/mf/nx-angular-mf.mjs +0 -5
  329. package/esm2022/nx-angular.mjs +0 -5
  330. package/esm2022/src/runtime/nx/data-persistence.mjs +0 -349
  331. package/esm2022/testing/index.mjs +0 -2
  332. package/esm2022/testing/nx-angular-testing.mjs +0 -5
  333. package/esm2022/testing/src/testing-utils.mjs +0 -38
  334. package/fesm2022/nx-angular-testing.mjs +0 -45
  335. package/fesm2022/nx-angular-testing.mjs.map +0 -1
  336. package/src/executors/module-federation-dev-server/lib/build-static-remotes.d.ts +0 -4
  337. package/src/executors/module-federation-dev-server/lib/build-static-remotes.js +0 -65
  338. package/src/executors/module-federation-dev-server/lib/start-static-remotes-file-server.d.ts +0 -9
  339. package/src/executors/module-federation-dev-server/lib/start-static-remotes-file-server.js +0 -51
  340. package/src/executors/module-federation-ssr-dev-server/lib/build-static-remotes.d.ts +0 -4
  341. package/src/executors/module-federation-ssr-dev-server/lib/build-static-remotes.js +0 -65
  342. package/src/executors/module-federation-ssr-dev-server/lib/start-static-remotes.d.ts +0 -4
  343. package/src/executors/module-federation-ssr-dev-server/lib/start-static-remotes.js +0 -41
  344. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/pre-v17/ng-package/entry-point/compile-ngc.di.d.ts +0 -14
  345. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/pre-v17/ng-package/entry-point/compile-ngc.di.js +0 -27
  346. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/pre-v17/ng-package/entry-point/compile-ngc.transform.d.ts +0 -12
  347. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/pre-v17/ng-package/entry-point/compile-ngc.transform.js +0 -53
  348. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/pre-v17/ng-package/entry-point/entry-point.di.d.ts +0 -15
  349. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/pre-v17/ng-package/entry-point/entry-point.di.js +0 -28
  350. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/pre-v17/ng-package/entry-point/entry-point.transform.d.ts +0 -30
  351. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/pre-v17/ng-package/entry-point/entry-point.transform.js +0 -52
  352. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/pre-v17/ng-package/entry-point/write-package.di.d.ts +0 -12
  353. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/pre-v17/ng-package/entry-point/write-package.di.js +0 -20
  354. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/pre-v17/ng-package/entry-point/write-package.transform.d.ts +0 -9
  355. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/pre-v17/ng-package/entry-point/write-package.transform.js +0 -320
  356. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/pre-v17/ng-package/options.di.d.ts +0 -14
  357. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/pre-v17/ng-package/options.di.js +0 -35
  358. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/pre-v17/ng-package/package.di.d.ts +0 -14
  359. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/pre-v17/ng-package/package.di.js +0 -37
  360. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/pre-v17/ngc/compile-source-files.d.ts +0 -12
  361. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/pre-v17/ngc/compile-source-files.js +0 -178
  362. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/pre-v17/styles/stylesheet-processor.d.ts +0 -42
  363. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/pre-v17/styles/stylesheet-processor.di.d.ts +0 -10
  364. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/pre-v17/styles/stylesheet-processor.di.js +0 -17
  365. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/pre-v17/styles/stylesheet-processor.js +0 -201
  366. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/v17+/ng-package/entry-point/write-bundles.di.d.ts +0 -2
  367. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/v17+/ng-package/entry-point/write-bundles.di.js +0 -12
  368. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/v17+/ng-package/entry-point/write-bundles.transform.js +0 -12
  369. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/v17+/ng-package/entry-point/write-package.di.d.ts +0 -8
  370. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/v17+/ng-package/entry-point/write-package.di.js +0 -18
  371. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/v17+/ng-package/entry-point/write-package.transform.d.ts +0 -8
  372. package/src/executors/ng-packagr-lite/ng-packagr-adjustments/v17+/ng-package/entry-point/write-package.transform.js +0 -286
  373. package/src/executors/package/ng-packagr-adjustments/ng-package/entry-point/compile-ngc.di.d.ts +0 -14
  374. package/src/executors/package/ng-packagr-adjustments/ng-package/entry-point/compile-ngc.di.js +0 -26
  375. package/src/executors/package/ng-packagr-adjustments/ng-package/entry-point/compile-ngc.transform.d.ts +0 -12
  376. package/src/executors/package/ng-packagr-adjustments/ng-package/entry-point/compile-ngc.transform.js +0 -71
  377. package/src/executors/package/ng-packagr-adjustments/ng-package/entry-point/entry-point.di.d.ts +0 -13
  378. package/src/executors/package/ng-packagr-adjustments/ng-package/entry-point/entry-point.di.js +0 -32
  379. package/src/executors/package/ng-packagr-adjustments/ng-package/options.di.d.ts +0 -14
  380. package/src/executors/package/ng-packagr-adjustments/ng-package/options.di.js +0 -35
  381. package/src/executors/package/ng-packagr-adjustments/ng-package/package.di.d.ts +0 -14
  382. package/src/executors/package/ng-packagr-adjustments/ng-package/package.di.js +0 -37
  383. package/src/executors/package/ng-packagr-adjustments/ngc/compile-source-files.d.ts +0 -13
  384. package/src/executors/package/ng-packagr-adjustments/ngc/compile-source-files.js +0 -183
  385. package/src/executors/package/ng-packagr-adjustments/styles/stylesheet-processor.d.ts +0 -36
  386. package/src/executors/package/ng-packagr-adjustments/styles/stylesheet-processor.di.d.ts +0 -10
  387. package/src/executors/package/ng-packagr-adjustments/styles/stylesheet-processor.di.js +0 -17
  388. package/src/executors/package/ng-packagr-adjustments/styles/stylesheet-processor.js +0 -194
  389. package/src/executors/package/ng-packagr-adjustments/utils/ng-compiler-cli.d.ts +0 -1
  390. package/src/executors/package/ng-packagr-adjustments/utils/ng-compiler-cli.js +0 -9
  391. package/src/generators/component-cypress-spec/component-cypress-spec.d.ts +0 -4
  392. package/src/generators/component-cypress-spec/component-cypress-spec.js +0 -35
  393. package/src/generators/component-cypress-spec/files/__componentFileName__.__fileExt__ +0 -17
  394. package/src/generators/component-cypress-spec/lib/get-args-default-value.d.ts +0 -2
  395. package/src/generators/component-cypress-spec/lib/get-args-default-value.js +0 -24
  396. package/src/generators/component-cypress-spec/lib/get-component-selector.d.ts +0 -2
  397. package/src/generators/component-cypress-spec/lib/get-component-selector.js +0 -23
  398. package/src/generators/component-cypress-spec/schema.d.ts +0 -10
  399. package/src/generators/component-cypress-spec/schema.json +0 -66
  400. package/src/generators/host/files/common/pre-v17/src/main.server.ts__tmpl__ +0 -66
  401. package/src/generators/remote/files/common/pre-v17/src/main.server.ts__tmpl__ +0 -72
  402. package/src/generators/setup-tailwind/lib/add-tailwind-config-path-to-project.d.ts +0 -3
  403. package/src/generators/stories/lib/get-e2e-project.d.ts +0 -2
  404. package/src/generators/stories/lib/get-e2e-project.js +0 -14
  405. package/src/generators/storybook-configuration/lib/validate-options.d.ts +0 -2
  406. package/src/generators/storybook-configuration/lib/validate-options.js +0 -8
  407. package/src/migrations/update-14-2-0/remove-show-circular-dependencies-option.js +0 -23
  408. package/src/migrations/update-14-2-0/update-libraries-secondary-entrypoints.js +0 -34
  409. package/src/migrations/update-14-2-0/update-ngcc-target.js +0 -17
  410. package/src/migrations/update-14-2-0/update-router-initial-navigation.d.ts +0 -2
  411. package/src/migrations/update-14-2-0/update-router-initial-navigation.js +0 -73
  412. package/src/migrations/update-14-2-0/update-tsconfig-target.d.ts +0 -2
  413. package/src/migrations/update-14-2-0/update-tsconfig-target.js +0 -155
  414. package/src/migrations/update-14-5-0/migrate-mfe-to-mf.d.ts +0 -5
  415. package/src/migrations/update-14-5-0/migrate-mfe-to-mf.js +0 -90
  416. package/src/migrations/update-14-6-0/update-angular-cli.js +0 -22
  417. package/src/migrations/update-14-8-0/rename-webpack-server.d.ts +0 -2
  418. package/src/migrations/update-14-8-0/rename-webpack-server.js +0 -21
  419. package/src/migrations/update-15-0-0/add-karma-inputs.d.ts +0 -2
  420. package/src/migrations/update-15-0-0/add-karma-inputs.js +0 -41
  421. package/src/migrations/update-15-0-0/switch-to-jasmine-marbles.d.ts +0 -2
  422. package/src/migrations/update-15-0-0/switch-to-jasmine-marbles.js +0 -102
  423. package/src/migrations/update-15-2-0/remove-browserlist-config.d.ts +0 -4
  424. package/src/migrations/update-15-2-0/remove-browserlist-config.js +0 -59
  425. package/src/migrations/update-15-2-0/remove-platform-server-exports.d.ts +0 -2
  426. package/src/migrations/update-15-2-0/remove-platform-server-exports.js +0 -62
  427. package/src/migrations/update-15-2-0/update-angular-cli.d.ts +0 -2
  428. package/src/migrations/update-15-2-0/update-angular-cli.js +0 -22
  429. package/src/migrations/update-15-2-0/update-karma-main-file.d.ts +0 -2
  430. package/src/migrations/update-15-2-0/update-karma-main-file.js +0 -72
  431. package/src/migrations/update-15-2-0/update-typescript-target.d.ts +0 -2
  432. package/src/migrations/update-15-2-0/update-typescript-target.js +0 -52
  433. package/src/migrations/update-15-2-0/update-workspace-config.d.ts +0 -2
  434. package/src/migrations/update-15-2-0/update-workspace-config.js +0 -24
  435. package/src/migrations/update-15-5-0/update-angular-cli.d.ts +0 -2
  436. package/src/migrations/update-15-5-0/update-angular-cli.js +0 -22
  437. package/src/migrations/update-15-7-0/install-required-packages.d.ts +0 -2
  438. package/src/migrations/update-15-7-0/install-required-packages.js +0 -36
  439. package/src/migrations/update-15-8-0/update-angular-cli.d.ts +0 -2
  440. package/src/migrations/update-15-8-0/update-angular-cli.js +0 -22
  441. package/src/migrations/update-15-9-0/update-file-server-executor.d.ts +0 -2
  442. package/src/migrations/update-15-9-0/update-file-server-executor.js +0 -42
  443. package/src/migrations/update-15-9-0/update-testing-tsconfig.d.ts +0 -3
  444. package/src/migrations/update-15-9-0/update-testing-tsconfig.js +0 -32
  445. package/src/migrations/update-16-0-0/remove-karma-defaults.d.ts +0 -2
  446. package/src/migrations/update-16-0-0/remove-karma-defaults.js +0 -52
  447. package/src/migrations/update-16-0-0/remove-library-generator-simple-module-name-option.d.ts +0 -2
  448. package/src/migrations/update-16-0-0/remove-library-generator-simple-module-name-option.js +0 -40
  449. package/src/migrations/update-16-0-0/remove-protractor-defaults.d.ts +0 -2
  450. package/src/migrations/update-16-0-0/remove-protractor-defaults.js +0 -52
  451. package/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.d.ts +0 -2
  452. package/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.js +0 -9
  453. package/src/migrations/update-16-1-0/extract-standalone-config-from-bootstrap.d.ts +0 -2
  454. package/src/migrations/update-16-1-0/extract-standalone-config-from-bootstrap.js +0 -127
  455. package/src/migrations/update-16-1-0/remove-ngcc-invocation.d.ts +0 -2
  456. package/src/migrations/update-16-1-0/remove-ngcc-invocation.js +0 -22
  457. package/src/migrations/update-16-1-0/remove-render-module-platform-server-exports.d.ts +0 -2
  458. package/src/migrations/update-16-1-0/remove-render-module-platform-server-exports.js +0 -62
  459. package/src/migrations/update-16-1-0/update-angular-cli.d.ts +0 -3
  460. package/src/migrations/update-16-1-0/update-server-executor-config.d.ts +0 -2
  461. package/src/migrations/update-16-1-0/update-server-executor-config.js +0 -26
  462. package/src/runtime/nx/data-persistence.d.ts +0 -276
  463. package/src/utils/mf/utils.d.ts +0 -15
  464. package/src/utils/mf/utils.js +0 -101
  465. package/src/utils/mf/with-module-federation-ssr.d.ts +0 -2
  466. package/src/utils/mf/with-module-federation-ssr.js +0 -68
  467. package/src/utils/mf/with-module-federation.d.ts +0 -2
  468. package/src/utils/mf/with-module-federation.js +0 -70
  469. package/testing/index.d.ts +0 -1
  470. package/testing/ng-package.json +0 -6
  471. package/testing/src/testing-utils.d.ts +0 -33
  472. /package/src/executors/utilities/ng-packagr/{stylesheet-processor.d.ts → pre-v19/stylesheet-processor.d.ts} +0 -0
  473. /package/src/generators/setup-ssr/files/{ngmodule/src → pre-v19/ngmodule-src}/__main__ +0 -0
  474. /package/src/generators/setup-ssr/files/{ngmodule/src → pre-v19/ngmodule-src}/app/__rootModuleFileName__ +0 -0
  475. /package/src/generators/setup-ssr/files/{root → pre-v19/root}/tsconfig.server.json__tpl__ +0 -0
  476. /package/src/generators/setup-ssr/files/{standalone/src → pre-v19/standalone-src}/__main__ +0 -0
  477. /package/src/generators/setup-ssr/files/{standalone/src → pre-v19/standalone-src}/app/app.config.server.ts__tpl__ +0 -0
@@ -1,349 +0,0 @@
1
- import { ROUTER_NAVIGATION } from '@ngrx/router-store';
2
- import { isObservable, of } from 'rxjs';
3
- import { catchError, concatMap, filter, groupBy, map, mergeMap, switchMap, } from 'rxjs/operators';
4
- /**
5
- * @whatItDoes Handles pessimistic updates (updating the server first).
6
- *
7
- * Updating the server, when implemented naively, suffers from race conditions and poor error handling.
8
- *
9
- * `pessimisticUpdate` addresses these problems. It runs all fetches in order, which removes race conditions
10
- * and forces the developer to handle errors.
11
- *
12
- * ## Example:
13
- *
14
- * ```typescript
15
- * @Injectable()
16
- * class TodoEffects {
17
- * updateTodo$ = createEffect(() =>
18
- * this.actions$.pipe(
19
- * ofType('UPDATE_TODO'),
20
- * pessimisticUpdate({
21
- * // provides an action
22
- * run: (action: UpdateTodo) => {
23
- * // update the backend first, and then dispatch an action that will
24
- * // update the client side
25
- * return this.backend.updateTodo(action.todo.id, action.todo).pipe(
26
- * map((updated) => ({
27
- * type: 'UPDATE_TODO_SUCCESS',
28
- * todo: updated,
29
- * }))
30
- * );
31
- * },
32
- * onError: (action: UpdateTodo, error: any) => {
33
- * // we don't need to undo the changes on the client side.
34
- * // we can dispatch an error, or simply log the error here and return `null`
35
- * return null;
36
- * },
37
- * })
38
- * )
39
- * );
40
- *
41
- * constructor(private actions$: Actions, private backend: Backend) {}
42
- * }
43
- * ```
44
- *
45
- * Note that if you don't return a new action from the run callback, you must set the dispatch property
46
- * of the effect to false, like this:
47
- *
48
- * ```typescript
49
- * class TodoEffects {
50
- * updateTodo$ = createEffect(() =>
51
- * this.actions$.pipe(
52
- * //...
53
- * ), { dispatch: false }
54
- * );
55
- * }
56
- * ```
57
- *
58
- * @param opts
59
- *
60
- * @deprecated This will be removed in Nx v21. Import `pessimisticUpdate` from `@ngrx/router-store/data-persistence` instead.
61
- */
62
- export function pessimisticUpdate(opts) {
63
- return (source) => {
64
- return source.pipe(mapActionAndState(), concatMap(runWithErrorHandling(opts.run, opts.onError)));
65
- };
66
- }
67
- /**
68
- * @whatItDoes Handles optimistic updates (updating the client first).
69
- *
70
- * It runs all fetches in order, which removes race conditions and forces the developer to handle errors.
71
- *
72
- * When using `optimisticUpdate`, in case of a failure, the developer has already updated the state locally,
73
- * so the developer must provide an undo action.
74
- *
75
- * The error handling must be done in the callback, or by means of the undo action.
76
- *
77
- * ## Example:
78
- *
79
- * ```typescript
80
- * @Injectable()
81
- * class TodoEffects {
82
- * updateTodo$ = createEffect(() =>
83
- * this.actions$.pipe(
84
- * ofType('UPDATE_TODO'),
85
- * optimisticUpdate({
86
- * // provides an action
87
- * run: (action: UpdateTodo) => {
88
- * return this.backend.updateTodo(action.todo.id, action.todo).pipe(
89
- * mapTo({
90
- * type: 'UPDATE_TODO_SUCCESS',
91
- * })
92
- * );
93
- * },
94
- * undoAction: (action: UpdateTodo, error: any) => {
95
- * // dispatch an undo action to undo the changes in the client state
96
- * return {
97
- * type: 'UNDO_TODO_UPDATE',
98
- * todo: action.todo,
99
- * };
100
- * },
101
- * })
102
- * )
103
- * );
104
- *
105
- * constructor(private actions$: Actions, private backend: Backend) {}
106
- * }
107
- * ```
108
- *
109
- * Note that if you don't return a new action from the run callback, you must set the dispatch property
110
- * of the effect to false, like this:
111
- *
112
- * ```typescript
113
- * class TodoEffects {
114
- * updateTodo$ = createEffect(() =>
115
- * this.actions$.pipe(
116
- * //...
117
- * ), { dispatch: false }
118
- * );
119
- * }
120
- * ```
121
- *
122
- * @param opts
123
- *
124
- * @deprecated This will be removed in Nx v21. Import `optimisticUpdate` from `@ngrx/router-store/data-persistence` instead.
125
- */
126
- export function optimisticUpdate(opts) {
127
- return (source) => {
128
- return source.pipe(mapActionAndState(), concatMap(runWithErrorHandling(opts.run, opts.undoAction)));
129
- };
130
- }
131
- /**
132
- * @whatItDoes Handles data fetching.
133
- *
134
- * Data fetching implemented naively suffers from race conditions and poor error handling.
135
- *
136
- * `fetch` addresses these problems. It runs all fetches in order, which removes race conditions
137
- * and forces the developer to handle errors.
138
- *
139
- * ## Example:
140
- *
141
- * ```typescript
142
- * @Injectable()
143
- * class TodoEffects {
144
- * loadTodos$ = createEffect(() =>
145
- * this.actions$.pipe(
146
- * ofType('GET_TODOS'),
147
- * fetch({
148
- * // provides an action
149
- * run: (a: GetTodos) => {
150
- * return this.backend.getAll().pipe(
151
- * map((response) => ({
152
- * type: 'TODOS',
153
- * todos: response.todos,
154
- * }))
155
- * );
156
- * },
157
- * onError: (action: GetTodos, error: any) => {
158
- * // dispatch an undo action to undo the changes in the client state
159
- * return null;
160
- * },
161
- * })
162
- * )
163
- * );
164
- *
165
- * constructor(private actions$: Actions, private backend: Backend) {}
166
- * }
167
- * ```
168
- *
169
- * This is correct, but because it set the concurrency to 1, it may not be performant.
170
- *
171
- * To fix that, you can provide the `id` function, like this:
172
- *
173
- * ```typescript
174
- * @Injectable()
175
- * class TodoEffects {
176
- * loadTodo$ = createEffect(() =>
177
- * this.actions$.pipe(
178
- * ofType('GET_TODO'),
179
- * fetch({
180
- * id: (todo: GetTodo) => {
181
- * return todo.id;
182
- * },
183
- * // provides an action
184
- * run: (todo: GetTodo) => {
185
- * return this.backend.getTodo(todo.id).map((response) => ({
186
- * type: 'LOAD_TODO_SUCCESS',
187
- * todo: response.todo,
188
- * }));
189
- * },
190
- * onError: (action: GetTodo, error: any) => {
191
- * // dispatch an undo action to undo the changes in the client state
192
- * return null;
193
- * },
194
- * })
195
- * )
196
- * );
197
- *
198
- * constructor(private actions$: Actions, private backend: Backend) {}
199
- * }
200
- * ```
201
- *
202
- * With this setup, the requests for Todo 1 will run concurrently with the requests for Todo 2.
203
- *
204
- * In addition, if there are multiple requests for Todo 1 scheduled, it will only run the last one.
205
- *
206
- * @param opts
207
- *
208
- * @deprecated This will be removed in Nx v21. Import `fetch` from `@ngrx/router-store/data-persistence` instead.
209
- */
210
- export function fetch(opts) {
211
- return (source) => {
212
- if (opts.id) {
213
- const groupedFetches = source.pipe(mapActionAndState(), groupBy(([action, ...store]) => {
214
- return opts.id(action, ...store);
215
- }));
216
- return groupedFetches.pipe(mergeMap((pairs) => pairs.pipe(switchMap(runWithErrorHandling(opts.run, opts.onError)))));
217
- }
218
- return source.pipe(mapActionAndState(), concatMap(runWithErrorHandling(opts.run, opts.onError)));
219
- };
220
- }
221
- /**
222
- * @whatItDoes Handles data fetching as part of router navigation.
223
- *
224
- * Data fetching implemented naively suffers from race conditions and poor error handling.
225
- *
226
- * `navigation` addresses these problems.
227
- *
228
- * It checks if an activated router state contains the passed in component type, and, if it does, runs the `run`
229
- * callback. It provides the activated snapshot associated with the component and the current state. And it only runs
230
- * the last request.
231
- *
232
- * ## Example:
233
- *
234
- * ```typescript
235
- * @Injectable()
236
- * class TodoEffects {
237
- * loadTodo$ = createEffect(() =>
238
- * this.actions$.pipe(
239
- * // listens for the routerNavigation action from @ngrx/router-store
240
- * navigation(TodoComponent, {
241
- * run: (activatedRouteSnapshot: ActivatedRouteSnapshot) => {
242
- * return this.backend
243
- * .fetchTodo(activatedRouteSnapshot.params['id'])
244
- * .pipe(
245
- * map((todo) => ({
246
- * type: 'LOAD_TODO_SUCCESS',
247
- * todo: todo,
248
- * }))
249
- * );
250
- * },
251
- * onError: (
252
- * activatedRouteSnapshot: ActivatedRouteSnapshot,
253
- * error: any
254
- * ) => {
255
- * // we can log and error here and return null
256
- * // we can also navigate back
257
- * return null;
258
- * },
259
- * })
260
- * )
261
- * );
262
- *
263
- * constructor(private actions$: Actions, private backend: Backend) {}
264
- * }
265
- * ```
266
- *
267
- * @param component
268
- * @param opts
269
- *
270
- * @deprecated This will be removed in Nx v21. Import `navigation` from `@ngrx/router-store/data-persistence` instead.
271
- */
272
- export function navigation(component, opts) {
273
- return (source) => {
274
- const nav = source.pipe(mapActionAndState(), filter(([action]) => isStateSnapshot(action)), map(([action, ...slices]) => {
275
- if (!isStateSnapshot(action)) {
276
- // Because of the above filter we'll never get here,
277
- // but this properly type narrows `action`
278
- return;
279
- }
280
- return [
281
- findSnapshot(component, action.payload.routerState.root),
282
- ...slices,
283
- ];
284
- }), filter(([snapshot]) => !!snapshot));
285
- return nav.pipe(switchMap(runWithErrorHandling(opts.run, opts.onError)));
286
- };
287
- }
288
- function isStateSnapshot(action) {
289
- return action.type === ROUTER_NAVIGATION;
290
- }
291
- function runWithErrorHandling(run, onError) {
292
- return ([action, ...slices]) => {
293
- try {
294
- const r = wrapIntoObservable(run(action, ...slices));
295
- return r.pipe(catchError((e) => wrapIntoObservable(onError(action, e))));
296
- }
297
- catch (e) {
298
- return wrapIntoObservable(onError(action, e));
299
- }
300
- };
301
- }
302
- /**
303
- * @whatItDoes maps Observable<Action | [Action, State]> to
304
- * Observable<[Action, State]>
305
- */
306
- function mapActionAndState() {
307
- return (source) => {
308
- return source.pipe(map((value) => normalizeActionAndState(value)));
309
- };
310
- }
311
- /**
312
- * @whatItDoes Normalizes either a bare action or an array of action and slices
313
- * into an array of action and slices (or undefined)
314
- */
315
- function normalizeActionAndState(args) {
316
- let action, slices;
317
- if (args instanceof Array) {
318
- [action, ...slices] = args;
319
- }
320
- else {
321
- slices = [];
322
- action = args;
323
- }
324
- return [action, ...slices];
325
- }
326
- function findSnapshot(component, s) {
327
- if (s.routeConfig && s.routeConfig.component === component) {
328
- return s;
329
- }
330
- for (const c of s.children) {
331
- const ss = findSnapshot(component, c);
332
- if (ss) {
333
- return ss;
334
- }
335
- }
336
- return null;
337
- }
338
- function wrapIntoObservable(obj) {
339
- if (isObservable(obj)) {
340
- return obj;
341
- }
342
- else if (!obj) {
343
- return of();
344
- }
345
- else {
346
- return of(obj);
347
- }
348
- }
349
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1wZXJzaXN0ZW5jZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXIvc3JjL3J1bnRpbWUvbngvZGF0YS1wZXJzaXN0ZW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUd2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN4QyxPQUFPLEVBQ0wsVUFBVSxFQUNWLFNBQVMsRUFDVCxNQUFNLEVBQ04sT0FBTyxFQUNQLEdBQUcsRUFDSCxRQUFRLEVBQ1IsU0FBUyxHQUNWLE1BQU0sZ0JBQWdCLENBQUM7QUFxQ3hCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5REc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQy9CLElBQWlDO0lBRWpDLE9BQU8sQ0FBQyxNQUFnQyxFQUFzQixFQUFFO1FBQzlELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FDaEIsaUJBQWlCLEVBQUUsRUFDbkIsU0FBUyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQ3hELENBQUM7SUFDSixDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwREc7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLElBQWdDO0lBRWhDLE9BQU8sQ0FBQyxNQUFnQyxFQUFzQixFQUFFO1FBQzlELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FDaEIsaUJBQWlCLEVBQUUsRUFDbkIsU0FBUyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQzNELENBQUM7SUFDSixDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThFRztBQUNILE1BQU0sVUFBVSxLQUFLLENBQ25CLElBQXFCO0lBRXJCLE9BQU8sQ0FBQyxNQUFnQyxFQUFzQixFQUFFO1FBQzlELElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ1osTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FDaEMsaUJBQWlCLEVBQUUsRUFDbkIsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsRUFBRSxFQUFFO2dCQUM3QixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUM7WUFDbkMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztZQUVGLE9BQU8sY0FBYyxDQUFDLElBQUksQ0FDeEIsUUFBUSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDakIsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUNwRSxDQUNGLENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUNoQixpQkFBaUIsRUFBRSxFQUNuQixTQUFTLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FDeEQsQ0FBQztJQUNKLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrREc7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUN4QixTQUFvQixFQUNwQixJQUE2QjtJQUU3QixPQUFPLENBQUMsTUFBZ0MsRUFBRSxFQUFFO1FBQzFDLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQ3JCLGlCQUFpQixFQUFFLEVBQ25CLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUM3QyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUU7WUFDMUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUM3QixvREFBb0Q7Z0JBQ3BELDBDQUEwQztnQkFDMUMsT0FBTztZQUNULENBQUM7WUFFRCxPQUFPO2dCQUNMLFlBQVksQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO2dCQUN4RCxHQUFHLE1BQU07YUFDd0IsQ0FBQztRQUN0QyxDQUFDLENBQUMsRUFDRixNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQ25DLENBQUM7UUFFRixPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxlQUFlLENBQ3RCLE1BQVc7SUFFWCxPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssaUJBQWlCLENBQUM7QUFDM0MsQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQzNCLEdBQTBELEVBQzFELE9BQVk7SUFFWixPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQVksRUFBaUIsRUFBRTtRQUN2RCxJQUFJLENBQUM7WUFDSCxNQUFNLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNyRCxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNFLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsT0FBTyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEQsQ0FBQztJQUNILENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLGlCQUFpQjtJQUN4QixPQUFPLENBQUMsTUFBa0QsRUFBRSxFQUFFO1FBQzVELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FDaEIsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQWMsQ0FBQyxDQUM1RCxDQUFDO0lBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsdUJBQXVCLENBQzlCLElBQW9DO0lBRXBDLElBQUksTUFBUyxFQUFFLE1BQVMsQ0FBQztJQUV6QixJQUFJLElBQUksWUFBWSxLQUFLLEVBQUUsQ0FBQztRQUMxQixDQUFDLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQztJQUM3QixDQUFDO1NBQU0sQ0FBQztRQUNOLE1BQU0sR0FBRyxFQUFPLENBQUM7UUFDakIsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDO0FBQzdCLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FDbkIsU0FBb0IsRUFDcEIsQ0FBeUI7SUFFekIsSUFBSSxDQUFDLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzNELE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUNELEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzNCLE1BQU0sRUFBRSxHQUFHLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEMsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUNQLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFJLEdBQTZCO0lBQzFELElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDdEIsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO1NBQU0sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLE9BQU8sRUFBRSxFQUFFLENBQUM7SUFDZCxDQUFDO1NBQU0sQ0FBQztRQUNOLE9BQU8sRUFBRSxDQUFDLEdBQVEsQ0FBQyxDQUFDO0lBQ3RCLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7XG4gIEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXG4gIFJvdXRlclN0YXRlU25hcHNob3QsXG59IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgdHlwZSB7IFJvdXRlck5hdmlnYXRpb25BY3Rpb24gfSBmcm9tICdAbmdyeC9yb3V0ZXItc3RvcmUnO1xuaW1wb3J0IHsgUk9VVEVSX05BVklHQVRJT04gfSBmcm9tICdAbmdyeC9yb3V0ZXItc3RvcmUnO1xuaW1wb3J0IHR5cGUgeyBBY3Rpb24gfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgdHlwZSB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGlzT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIGNhdGNoRXJyb3IsXG4gIGNvbmNhdE1hcCxcbiAgZmlsdGVyLFxuICBncm91cEJ5LFxuICBtYXAsXG4gIG1lcmdlTWFwLFxuICBzd2l0Y2hNYXAsXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuZXhwb3J0IGludGVyZmFjZSBQZXNzaW1pc3RpY1VwZGF0ZU9wdHM8VCBleHRlbmRzIEFycmF5PHVua25vd24+LCBBPiB7XG4gIHJ1bihhOiBBLCAuLi5zbGljZXM6IFsuLi5UXSk6IE9ic2VydmFibGU8QWN0aW9uPiB8IEFjdGlvbiB8IHZvaWQ7XG4gIG9uRXJyb3IoYTogQSwgZTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHwgYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wdGltaXN0aWNVcGRhdGVPcHRzPFQgZXh0ZW5kcyBBcnJheTx1bmtub3duPiwgQT4ge1xuICBydW4oYTogQSwgLi4uc2xpY2VzOiBbLi4uVF0pOiBPYnNlcnZhYmxlPEFjdGlvbj4gfCBBY3Rpb24gfCB2b2lkO1xuICB1bmRvQWN0aW9uKGE6IEEsIGU6IGFueSk6IE9ic2VydmFibGU8QWN0aW9uPiB8IEFjdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGZXRjaE9wdHM8VCBleHRlbmRzIEFycmF5PHVua25vd24+LCBBPiB7XG4gIGlkPyhhOiBBLCAuLi5zbGljZXM6IFsuLi5UXSk6IGFueTtcbiAgcnVuKGE6IEEsIC4uLnNsaWNlczogWy4uLlRdKTogT2JzZXJ2YWJsZTxBY3Rpb24+IHwgQWN0aW9uIHwgdm9pZDtcbiAgb25FcnJvcj8oYTogQSwgZTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHwgYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhhbmRsZU5hdmlnYXRpb25PcHRzPFQgZXh0ZW5kcyBBcnJheTx1bmtub3duPj4ge1xuICBydW4oXG4gICAgYTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcbiAgICAuLi5zbGljZXM6IFsuLi5UXVxuICApOiBPYnNlcnZhYmxlPEFjdGlvbj4gfCBBY3Rpb24gfCB2b2lkO1xuICBvbkVycm9yPyhhOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBlOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4gfCBhbnk7XG59XG5cbmV4cG9ydCB0eXBlIEFjdGlvbk9yQWN0aW9uV2l0aFN0YXRlczxUIGV4dGVuZHMgQXJyYXk8dW5rbm93bj4sIEE+ID1cbiAgfCBBXG4gIHwgW0EsIC4uLlRdO1xuZXhwb3J0IHR5cGUgQWN0aW9uT3JBY3Rpb25XaXRoU3RhdGU8VCwgQT4gPSBBY3Rpb25PckFjdGlvbldpdGhTdGF0ZXM8W1RdLCBBPjtcbmV4cG9ydCB0eXBlIEFjdGlvblN0YXRlc1N0cmVhbTxUIGV4dGVuZHMgQXJyYXk8dW5rbm93bj4sIEE+ID0gT2JzZXJ2YWJsZTxcbiAgQWN0aW9uT3JBY3Rpb25XaXRoU3RhdGVzPFQsIEE+XG4+O1xuZXhwb3J0IHR5cGUgQWN0aW9uU3RhdGVTdHJlYW08VCwgQT4gPSBPYnNlcnZhYmxlPFxuICBBY3Rpb25PckFjdGlvbldpdGhTdGF0ZXM8W1RdLCBBPlxuPjtcblxuLyoqXG4gKiBAd2hhdEl0RG9lcyBIYW5kbGVzIHBlc3NpbWlzdGljIHVwZGF0ZXMgKHVwZGF0aW5nIHRoZSBzZXJ2ZXIgZmlyc3QpLlxuICpcbiAqIFVwZGF0aW5nIHRoZSBzZXJ2ZXIsIHdoZW4gaW1wbGVtZW50ZWQgbmFpdmVseSwgc3VmZmVycyBmcm9tIHJhY2UgY29uZGl0aW9ucyBhbmQgcG9vciBlcnJvciBoYW5kbGluZy5cbiAqXG4gKiBgcGVzc2ltaXN0aWNVcGRhdGVgIGFkZHJlc3NlcyB0aGVzZSBwcm9ibGVtcy4gSXQgcnVucyBhbGwgZmV0Y2hlcyBpbiBvcmRlciwgd2hpY2ggcmVtb3ZlcyByYWNlIGNvbmRpdGlvbnNcbiAqIGFuZCBmb3JjZXMgdGhlIGRldmVsb3BlciB0byBoYW5kbGUgZXJyb3JzLlxuICpcbiAqICMjIEV4YW1wbGU6XG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogQEluamVjdGFibGUoKVxuICogY2xhc3MgVG9kb0VmZmVjdHMge1xuICogICB1cGRhdGVUb2RvJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PlxuICogICAgIHRoaXMuYWN0aW9ucyQucGlwZShcbiAqICAgICAgIG9mVHlwZSgnVVBEQVRFX1RPRE8nKSxcbiAqICAgICAgIHBlc3NpbWlzdGljVXBkYXRlKHtcbiAqICAgICAgICAgLy8gcHJvdmlkZXMgYW4gYWN0aW9uXG4gKiAgICAgICAgIHJ1bjogKGFjdGlvbjogVXBkYXRlVG9kbykgPT4ge1xuICogICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgYmFja2VuZCBmaXJzdCwgYW5kIHRoZW4gZGlzcGF0Y2ggYW4gYWN0aW9uIHRoYXQgd2lsbFxuICogICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgY2xpZW50IHNpZGVcbiAqICAgICAgICAgICByZXR1cm4gdGhpcy5iYWNrZW5kLnVwZGF0ZVRvZG8oYWN0aW9uLnRvZG8uaWQsIGFjdGlvbi50b2RvKS5waXBlKFxuICogICAgICAgICAgICAgbWFwKCh1cGRhdGVkKSA9PiAoe1xuICogICAgICAgICAgICAgICB0eXBlOiAnVVBEQVRFX1RPRE9fU1VDQ0VTUycsXG4gKiAgICAgICAgICAgICAgIHRvZG86IHVwZGF0ZWQsXG4gKiAgICAgICAgICAgICB9KSlcbiAqICAgICAgICAgICApO1xuICogICAgICAgICB9LFxuICogICAgICAgICBvbkVycm9yOiAoYWN0aW9uOiBVcGRhdGVUb2RvLCBlcnJvcjogYW55KSA9PiB7XG4gKiAgICAgICAgICAgLy8gd2UgZG9uJ3QgbmVlZCB0byB1bmRvIHRoZSBjaGFuZ2VzIG9uIHRoZSBjbGllbnQgc2lkZS5cbiAqICAgICAgICAgICAvLyB3ZSBjYW4gZGlzcGF0Y2ggYW4gZXJyb3IsIG9yIHNpbXBseSBsb2cgdGhlIGVycm9yIGhlcmUgYW5kIHJldHVybiBgbnVsbGBcbiAqICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAqICAgICAgICAgfSxcbiAqICAgICAgIH0pXG4gKiAgICAgKVxuICogICApO1xuICpcbiAqICAgY29uc3RydWN0b3IocHJpdmF0ZSBhY3Rpb25zJDogQWN0aW9ucywgcHJpdmF0ZSBiYWNrZW5kOiBCYWNrZW5kKSB7fVxuICogfVxuICogYGBgXG4gKlxuICogTm90ZSB0aGF0IGlmIHlvdSBkb24ndCByZXR1cm4gYSBuZXcgYWN0aW9uIGZyb20gdGhlIHJ1biBjYWxsYmFjaywgeW91IG11c3Qgc2V0IHRoZSBkaXNwYXRjaCBwcm9wZXJ0eVxuICogb2YgdGhlIGVmZmVjdCB0byBmYWxzZSwgbGlrZSB0aGlzOlxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNsYXNzIFRvZG9FZmZlY3RzIHtcbiAqICAgdXBkYXRlVG9kbyQgPSBjcmVhdGVFZmZlY3QoKCkgPT5cbiAqICAgICB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gKiAgICAgICAvLy4uLlxuICogICAgICksIHsgZGlzcGF0Y2g6IGZhbHNlIH1cbiAqICAgKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBvcHRzXG4gKlxuICogQGRlcHJlY2F0ZWQgVGhpcyB3aWxsIGJlIHJlbW92ZWQgaW4gTnggdjIxLiBJbXBvcnQgYHBlc3NpbWlzdGljVXBkYXRlYCBmcm9tIGBAbmdyeC9yb3V0ZXItc3RvcmUvZGF0YS1wZXJzaXN0ZW5jZWAgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBlc3NpbWlzdGljVXBkYXRlPFQgZXh0ZW5kcyBBcnJheTx1bmtub3duPiwgQSBleHRlbmRzIEFjdGlvbj4oXG4gIG9wdHM6IFBlc3NpbWlzdGljVXBkYXRlT3B0czxULCBBPlxuKSB7XG4gIHJldHVybiAoc291cmNlOiBBY3Rpb25TdGF0ZXNTdHJlYW08VCwgQT4pOiBPYnNlcnZhYmxlPEFjdGlvbj4gPT4ge1xuICAgIHJldHVybiBzb3VyY2UucGlwZShcbiAgICAgIG1hcEFjdGlvbkFuZFN0YXRlKCksXG4gICAgICBjb25jYXRNYXAocnVuV2l0aEVycm9ySGFuZGxpbmcob3B0cy5ydW4sIG9wdHMub25FcnJvcikpXG4gICAgKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBAd2hhdEl0RG9lcyBIYW5kbGVzIG9wdGltaXN0aWMgdXBkYXRlcyAodXBkYXRpbmcgdGhlIGNsaWVudCBmaXJzdCkuXG4gKlxuICogSXQgcnVucyBhbGwgZmV0Y2hlcyBpbiBvcmRlciwgd2hpY2ggcmVtb3ZlcyByYWNlIGNvbmRpdGlvbnMgYW5kIGZvcmNlcyB0aGUgZGV2ZWxvcGVyIHRvIGhhbmRsZSBlcnJvcnMuXG4gKlxuICogV2hlbiB1c2luZyBgb3B0aW1pc3RpY1VwZGF0ZWAsIGluIGNhc2Ugb2YgYSBmYWlsdXJlLCB0aGUgZGV2ZWxvcGVyIGhhcyBhbHJlYWR5IHVwZGF0ZWQgdGhlIHN0YXRlIGxvY2FsbHksXG4gKiBzbyB0aGUgZGV2ZWxvcGVyIG11c3QgcHJvdmlkZSBhbiB1bmRvIGFjdGlvbi5cbiAqXG4gKiBUaGUgZXJyb3IgaGFuZGxpbmcgbXVzdCBiZSBkb25lIGluIHRoZSBjYWxsYmFjaywgb3IgYnkgbWVhbnMgb2YgdGhlIHVuZG8gYWN0aW9uLlxuICpcbiAqICMjIEV4YW1wbGU6XG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogQEluamVjdGFibGUoKVxuICogY2xhc3MgVG9kb0VmZmVjdHMge1xuICogICB1cGRhdGVUb2RvJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PlxuICogICAgIHRoaXMuYWN0aW9ucyQucGlwZShcbiAqICAgICAgIG9mVHlwZSgnVVBEQVRFX1RPRE8nKSxcbiAqICAgICAgIG9wdGltaXN0aWNVcGRhdGUoe1xuICogICAgICAgICAvLyBwcm92aWRlcyBhbiBhY3Rpb25cbiAqICAgICAgICAgcnVuOiAoYWN0aW9uOiBVcGRhdGVUb2RvKSA9PiB7XG4gKiAgICAgICAgICAgcmV0dXJuIHRoaXMuYmFja2VuZC51cGRhdGVUb2RvKGFjdGlvbi50b2RvLmlkLCBhY3Rpb24udG9kbykucGlwZShcbiAqICAgICAgICAgICAgIG1hcFRvKHtcbiAqICAgICAgICAgICAgICAgdHlwZTogJ1VQREFURV9UT0RPX1NVQ0NFU1MnLFxuICogICAgICAgICAgICAgfSlcbiAqICAgICAgICAgICApO1xuICogICAgICAgICB9LFxuICogICAgICAgICB1bmRvQWN0aW9uOiAoYWN0aW9uOiBVcGRhdGVUb2RvLCBlcnJvcjogYW55KSA9PiB7XG4gKiAgICAgICAgICAgLy8gZGlzcGF0Y2ggYW4gdW5kbyBhY3Rpb24gdG8gdW5kbyB0aGUgY2hhbmdlcyBpbiB0aGUgY2xpZW50IHN0YXRlXG4gKiAgICAgICAgICAgcmV0dXJuIHtcbiAqICAgICAgICAgICAgIHR5cGU6ICdVTkRPX1RPRE9fVVBEQVRFJyxcbiAqICAgICAgICAgICAgIHRvZG86IGFjdGlvbi50b2RvLFxuICogICAgICAgICAgIH07XG4gKiAgICAgICAgIH0sXG4gKiAgICAgICB9KVxuICogICAgIClcbiAqICAgKTtcbiAqXG4gKiAgIGNvbnN0cnVjdG9yKHByaXZhdGUgYWN0aW9ucyQ6IEFjdGlvbnMsIHByaXZhdGUgYmFja2VuZDogQmFja2VuZCkge31cbiAqIH1cbiAqIGBgYFxuICpcbiAqIE5vdGUgdGhhdCBpZiB5b3UgZG9uJ3QgcmV0dXJuIGEgbmV3IGFjdGlvbiBmcm9tIHRoZSBydW4gY2FsbGJhY2ssIHlvdSBtdXN0IHNldCB0aGUgZGlzcGF0Y2ggcHJvcGVydHlcbiAqIG9mIHRoZSBlZmZlY3QgdG8gZmFsc2UsIGxpa2UgdGhpczpcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjbGFzcyBUb2RvRWZmZWN0cyB7XG4gKiAgIHVwZGF0ZVRvZG8kID0gY3JlYXRlRWZmZWN0KCgpID0+XG4gKiAgICAgdGhpcy5hY3Rpb25zJC5waXBlKFxuICogICAgICAgLy8uLi5cbiAqICAgICApLCB7IGRpc3BhdGNoOiBmYWxzZSB9XG4gKiAgICk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gb3B0c1xuICpcbiAqIEBkZXByZWNhdGVkIFRoaXMgd2lsbCBiZSByZW1vdmVkIGluIE54IHYyMS4gSW1wb3J0IGBvcHRpbWlzdGljVXBkYXRlYCBmcm9tIGBAbmdyeC9yb3V0ZXItc3RvcmUvZGF0YS1wZXJzaXN0ZW5jZWAgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9wdGltaXN0aWNVcGRhdGU8VCBleHRlbmRzIEFycmF5PHVua25vd24+LCBBIGV4dGVuZHMgQWN0aW9uPihcbiAgb3B0czogT3B0aW1pc3RpY1VwZGF0ZU9wdHM8VCwgQT5cbikge1xuICByZXR1cm4gKHNvdXJjZTogQWN0aW9uU3RhdGVzU3RyZWFtPFQsIEE+KTogT2JzZXJ2YWJsZTxBY3Rpb24+ID0+IHtcbiAgICByZXR1cm4gc291cmNlLnBpcGUoXG4gICAgICBtYXBBY3Rpb25BbmRTdGF0ZSgpLFxuICAgICAgY29uY2F0TWFwKHJ1bldpdGhFcnJvckhhbmRsaW5nKG9wdHMucnVuLCBvcHRzLnVuZG9BY3Rpb24pKVxuICAgICk7XG4gIH07XG59XG5cbi8qKlxuICogQHdoYXRJdERvZXMgSGFuZGxlcyBkYXRhIGZldGNoaW5nLlxuICpcbiAqIERhdGEgZmV0Y2hpbmcgaW1wbGVtZW50ZWQgbmFpdmVseSBzdWZmZXJzIGZyb20gcmFjZSBjb25kaXRpb25zIGFuZCBwb29yIGVycm9yIGhhbmRsaW5nLlxuICpcbiAqIGBmZXRjaGAgYWRkcmVzc2VzIHRoZXNlIHByb2JsZW1zLiBJdCBydW5zIGFsbCBmZXRjaGVzIGluIG9yZGVyLCB3aGljaCByZW1vdmVzIHJhY2UgY29uZGl0aW9uc1xuICogYW5kIGZvcmNlcyB0aGUgZGV2ZWxvcGVyIHRvIGhhbmRsZSBlcnJvcnMuXG4gKlxuICogIyMgRXhhbXBsZTpcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBASW5qZWN0YWJsZSgpXG4gKiBjbGFzcyBUb2RvRWZmZWN0cyB7XG4gKiAgIGxvYWRUb2RvcyQgPSBjcmVhdGVFZmZlY3QoKCkgPT5cbiAqICAgICB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gKiAgICAgICBvZlR5cGUoJ0dFVF9UT0RPUycpLFxuICogICAgICAgZmV0Y2goe1xuICogICAgICAgICAvLyBwcm92aWRlcyBhbiBhY3Rpb25cbiAqICAgICAgICAgcnVuOiAoYTogR2V0VG9kb3MpID0+IHtcbiAqICAgICAgICAgICByZXR1cm4gdGhpcy5iYWNrZW5kLmdldEFsbCgpLnBpcGUoXG4gKiAgICAgICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiAoe1xuICogICAgICAgICAgICAgICB0eXBlOiAnVE9ET1MnLFxuICogICAgICAgICAgICAgICB0b2RvczogcmVzcG9uc2UudG9kb3MsXG4gKiAgICAgICAgICAgICB9KSlcbiAqICAgICAgICAgICApO1xuICogICAgICAgICB9LFxuICogICAgICAgICBvbkVycm9yOiAoYWN0aW9uOiBHZXRUb2RvcywgZXJyb3I6IGFueSkgPT4ge1xuICogICAgICAgICAgIC8vIGRpc3BhdGNoIGFuIHVuZG8gYWN0aW9uIHRvIHVuZG8gdGhlIGNoYW5nZXMgaW4gdGhlIGNsaWVudCBzdGF0ZVxuICogICAgICAgICAgIHJldHVybiBudWxsO1xuICogICAgICAgICB9LFxuICogICAgICAgfSlcbiAqICAgICApXG4gKiAgICk7XG4gKlxuICogICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFjdGlvbnMkOiBBY3Rpb25zLCBwcml2YXRlIGJhY2tlbmQ6IEJhY2tlbmQpIHt9XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBUaGlzIGlzIGNvcnJlY3QsIGJ1dCBiZWNhdXNlIGl0IHNldCB0aGUgY29uY3VycmVuY3kgdG8gMSwgaXQgbWF5IG5vdCBiZSBwZXJmb3JtYW50LlxuICpcbiAqIFRvIGZpeCB0aGF0LCB5b3UgY2FuIHByb3ZpZGUgdGhlIGBpZGAgZnVuY3Rpb24sIGxpa2UgdGhpczpcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBASW5qZWN0YWJsZSgpXG4gKiBjbGFzcyBUb2RvRWZmZWN0cyB7XG4gKiAgIGxvYWRUb2RvJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PlxuICogICAgIHRoaXMuYWN0aW9ucyQucGlwZShcbiAqICAgICAgIG9mVHlwZSgnR0VUX1RPRE8nKSxcbiAqICAgICAgIGZldGNoKHtcbiAqICAgICAgICAgaWQ6ICh0b2RvOiBHZXRUb2RvKSA9PiB7XG4gKiAgICAgICAgICAgcmV0dXJuIHRvZG8uaWQ7XG4gKiAgICAgICAgIH0sXG4gKiAgICAgICAgIC8vIHByb3ZpZGVzIGFuIGFjdGlvblxuICogICAgICAgICBydW46ICh0b2RvOiBHZXRUb2RvKSA9PiB7XG4gKiAgICAgICAgICAgcmV0dXJuIHRoaXMuYmFja2VuZC5nZXRUb2RvKHRvZG8uaWQpLm1hcCgocmVzcG9uc2UpID0+ICh7XG4gKiAgICAgICAgICAgICB0eXBlOiAnTE9BRF9UT0RPX1NVQ0NFU1MnLFxuICogICAgICAgICAgICAgdG9kbzogcmVzcG9uc2UudG9kbyxcbiAqICAgICAgICAgICB9KSk7XG4gKiAgICAgICAgIH0sXG4gKiAgICAgICAgIG9uRXJyb3I6IChhY3Rpb246IEdldFRvZG8sIGVycm9yOiBhbnkpID0+IHtcbiAqICAgICAgICAgICAvLyBkaXNwYXRjaCBhbiB1bmRvIGFjdGlvbiB0byB1bmRvIHRoZSBjaGFuZ2VzIGluIHRoZSBjbGllbnQgc3RhdGVcbiAqICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAqICAgICAgICAgfSxcbiAqICAgICAgIH0pXG4gKiAgICAgKVxuICogICApO1xuICpcbiAqICAgY29uc3RydWN0b3IocHJpdmF0ZSBhY3Rpb25zJDogQWN0aW9ucywgcHJpdmF0ZSBiYWNrZW5kOiBCYWNrZW5kKSB7fVxuICogfVxuICogYGBgXG4gKlxuICogV2l0aCB0aGlzIHNldHVwLCB0aGUgcmVxdWVzdHMgZm9yIFRvZG8gMSB3aWxsIHJ1biBjb25jdXJyZW50bHkgd2l0aCB0aGUgcmVxdWVzdHMgZm9yIFRvZG8gMi5cbiAqXG4gKiBJbiBhZGRpdGlvbiwgaWYgdGhlcmUgYXJlIG11bHRpcGxlIHJlcXVlc3RzIGZvciBUb2RvIDEgc2NoZWR1bGVkLCBpdCB3aWxsIG9ubHkgcnVuIHRoZSBsYXN0IG9uZS5cbiAqXG4gKiBAcGFyYW0gb3B0c1xuICpcbiAqIEBkZXByZWNhdGVkIFRoaXMgd2lsbCBiZSByZW1vdmVkIGluIE54IHYyMS4gSW1wb3J0IGBmZXRjaGAgZnJvbSBgQG5ncngvcm91dGVyLXN0b3JlL2RhdGEtcGVyc2lzdGVuY2VgIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmZXRjaDxUIGV4dGVuZHMgQXJyYXk8dW5rbm93bj4sIEEgZXh0ZW5kcyBBY3Rpb24+KFxuICBvcHRzOiBGZXRjaE9wdHM8VCwgQT5cbikge1xuICByZXR1cm4gKHNvdXJjZTogQWN0aW9uU3RhdGVzU3RyZWFtPFQsIEE+KTogT2JzZXJ2YWJsZTxBY3Rpb24+ID0+IHtcbiAgICBpZiAob3B0cy5pZCkge1xuICAgICAgY29uc3QgZ3JvdXBlZEZldGNoZXMgPSBzb3VyY2UucGlwZShcbiAgICAgICAgbWFwQWN0aW9uQW5kU3RhdGUoKSxcbiAgICAgICAgZ3JvdXBCeSgoW2FjdGlvbiwgLi4uc3RvcmVdKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIG9wdHMuaWQoYWN0aW9uLCAuLi5zdG9yZSk7XG4gICAgICAgIH0pXG4gICAgICApO1xuXG4gICAgICByZXR1cm4gZ3JvdXBlZEZldGNoZXMucGlwZShcbiAgICAgICAgbWVyZ2VNYXAoKHBhaXJzKSA9PlxuICAgICAgICAgIHBhaXJzLnBpcGUoc3dpdGNoTWFwKHJ1bldpdGhFcnJvckhhbmRsaW5nKG9wdHMucnVuLCBvcHRzLm9uRXJyb3IpKSlcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc291cmNlLnBpcGUoXG4gICAgICBtYXBBY3Rpb25BbmRTdGF0ZSgpLFxuICAgICAgY29uY2F0TWFwKHJ1bldpdGhFcnJvckhhbmRsaW5nKG9wdHMucnVuLCBvcHRzLm9uRXJyb3IpKVxuICAgICk7XG4gIH07XG59XG5cbi8qKlxuICogQHdoYXRJdERvZXMgSGFuZGxlcyBkYXRhIGZldGNoaW5nIGFzIHBhcnQgb2Ygcm91dGVyIG5hdmlnYXRpb24uXG4gKlxuICogRGF0YSBmZXRjaGluZyBpbXBsZW1lbnRlZCBuYWl2ZWx5IHN1ZmZlcnMgZnJvbSByYWNlIGNvbmRpdGlvbnMgYW5kIHBvb3IgZXJyb3IgaGFuZGxpbmcuXG4gKlxuICogYG5hdmlnYXRpb25gIGFkZHJlc3NlcyB0aGVzZSBwcm9ibGVtcy5cbiAqXG4gKiBJdCBjaGVja3MgaWYgYW4gYWN0aXZhdGVkIHJvdXRlciBzdGF0ZSBjb250YWlucyB0aGUgcGFzc2VkIGluIGNvbXBvbmVudCB0eXBlLCBhbmQsIGlmIGl0IGRvZXMsIHJ1bnMgdGhlIGBydW5gXG4gKiBjYWxsYmFjay4gSXQgcHJvdmlkZXMgdGhlIGFjdGl2YXRlZCBzbmFwc2hvdCBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbXBvbmVudCBhbmQgdGhlIGN1cnJlbnQgc3RhdGUuIEFuZCBpdCBvbmx5IHJ1bnNcbiAqIHRoZSBsYXN0IHJlcXVlc3QuXG4gKlxuICogIyMgRXhhbXBsZTpcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBASW5qZWN0YWJsZSgpXG4gKiBjbGFzcyBUb2RvRWZmZWN0cyB7XG4gKiAgIGxvYWRUb2RvJCA9IGNyZWF0ZUVmZmVjdCgoKSA9PlxuICogICAgIHRoaXMuYWN0aW9ucyQucGlwZShcbiAqICAgICAgIC8vIGxpc3RlbnMgZm9yIHRoZSByb3V0ZXJOYXZpZ2F0aW9uIGFjdGlvbiBmcm9tIEBuZ3J4L3JvdXRlci1zdG9yZVxuICogICAgICAgbmF2aWdhdGlvbihUb2RvQ29tcG9uZW50LCB7XG4gKiAgICAgICAgIHJ1bjogKGFjdGl2YXRlZFJvdXRlU25hcHNob3Q6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpID0+IHtcbiAqICAgICAgICAgICByZXR1cm4gdGhpcy5iYWNrZW5kXG4gKiAgICAgICAgICAgICAuZmV0Y2hUb2RvKGFjdGl2YXRlZFJvdXRlU25hcHNob3QucGFyYW1zWydpZCddKVxuICogICAgICAgICAgICAgLnBpcGUoXG4gKiAgICAgICAgICAgICAgIG1hcCgodG9kbykgPT4gKHtcbiAqICAgICAgICAgICAgICAgICB0eXBlOiAnTE9BRF9UT0RPX1NVQ0NFU1MnLFxuICogICAgICAgICAgICAgICAgIHRvZG86IHRvZG8sXG4gKiAgICAgICAgICAgICAgIH0pKVxuICogICAgICAgICAgICAgKTtcbiAqICAgICAgICAgfSxcbiAqICAgICAgICAgb25FcnJvcjogKFxuICogICAgICAgICAgIGFjdGl2YXRlZFJvdXRlU25hcHNob3Q6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXG4gKiAgICAgICAgICAgZXJyb3I6IGFueVxuICogICAgICAgICApID0+IHtcbiAqICAgICAgICAgICAvLyB3ZSBjYW4gbG9nIGFuZCBlcnJvciBoZXJlIGFuZCByZXR1cm4gbnVsbFxuICogICAgICAgICAgIC8vIHdlIGNhbiBhbHNvIG5hdmlnYXRlIGJhY2tcbiAqICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAqICAgICAgICAgfSxcbiAqICAgICAgIH0pXG4gKiAgICAgKVxuICogICApO1xuICpcbiAqICAgY29uc3RydWN0b3IocHJpdmF0ZSBhY3Rpb25zJDogQWN0aW9ucywgcHJpdmF0ZSBiYWNrZW5kOiBCYWNrZW5kKSB7fVxuICogfVxuICogYGBgXG4gKlxuICogQHBhcmFtIGNvbXBvbmVudFxuICogQHBhcmFtIG9wdHNcbiAqXG4gKiBAZGVwcmVjYXRlZCBUaGlzIHdpbGwgYmUgcmVtb3ZlZCBpbiBOeCB2MjEuIEltcG9ydCBgbmF2aWdhdGlvbmAgZnJvbSBgQG5ncngvcm91dGVyLXN0b3JlL2RhdGEtcGVyc2lzdGVuY2VgIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuYXZpZ2F0aW9uPFQgZXh0ZW5kcyBBcnJheTx1bmtub3duPiwgQSBleHRlbmRzIEFjdGlvbj4oXG4gIGNvbXBvbmVudDogVHlwZTxhbnk+LFxuICBvcHRzOiBIYW5kbGVOYXZpZ2F0aW9uT3B0czxUPlxuKSB7XG4gIHJldHVybiAoc291cmNlOiBBY3Rpb25TdGF0ZXNTdHJlYW08VCwgQT4pID0+IHtcbiAgICBjb25zdCBuYXYgPSBzb3VyY2UucGlwZShcbiAgICAgIG1hcEFjdGlvbkFuZFN0YXRlKCksXG4gICAgICBmaWx0ZXIoKFthY3Rpb25dKSA9PiBpc1N0YXRlU25hcHNob3QoYWN0aW9uKSksXG4gICAgICBtYXAoKFthY3Rpb24sIC4uLnNsaWNlc10pID0+IHtcbiAgICAgICAgaWYgKCFpc1N0YXRlU25hcHNob3QoYWN0aW9uKSkge1xuICAgICAgICAgIC8vIEJlY2F1c2Ugb2YgdGhlIGFib3ZlIGZpbHRlciB3ZSdsbCBuZXZlciBnZXQgaGVyZSxcbiAgICAgICAgICAvLyBidXQgdGhpcyBwcm9wZXJseSB0eXBlIG5hcnJvd3MgYGFjdGlvbmBcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIGZpbmRTbmFwc2hvdChjb21wb25lbnQsIGFjdGlvbi5wYXlsb2FkLnJvdXRlclN0YXRlLnJvb3QpLFxuICAgICAgICAgIC4uLnNsaWNlcyxcbiAgICAgICAgXSBhcyBbQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgLi4uVF07XG4gICAgICB9KSxcbiAgICAgIGZpbHRlcigoW3NuYXBzaG90XSkgPT4gISFzbmFwc2hvdClcbiAgICApO1xuXG4gICAgcmV0dXJuIG5hdi5waXBlKHN3aXRjaE1hcChydW5XaXRoRXJyb3JIYW5kbGluZyhvcHRzLnJ1biwgb3B0cy5vbkVycm9yKSkpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBpc1N0YXRlU25hcHNob3QoXG4gIGFjdGlvbjogYW55XG4pOiBhY3Rpb24gaXMgUm91dGVyTmF2aWdhdGlvbkFjdGlvbjxSb3V0ZXJTdGF0ZVNuYXBzaG90PiB7XG4gIHJldHVybiBhY3Rpb24udHlwZSA9PT0gUk9VVEVSX05BVklHQVRJT047XG59XG5cbmZ1bmN0aW9uIHJ1bldpdGhFcnJvckhhbmRsaW5nPFQgZXh0ZW5kcyBBcnJheTx1bmtub3duPiwgQSwgUj4oXG4gIHJ1bjogKGE6IEEsIC4uLnNsaWNlczogWy4uLlRdKSA9PiBPYnNlcnZhYmxlPFI+IHwgUiB8IHZvaWQsXG4gIG9uRXJyb3I6IGFueVxuKSB7XG4gIHJldHVybiAoW2FjdGlvbiwgLi4uc2xpY2VzXTogW0EsIC4uLlRdKTogT2JzZXJ2YWJsZTxSPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHIgPSB3cmFwSW50b09ic2VydmFibGUocnVuKGFjdGlvbiwgLi4uc2xpY2VzKSk7XG4gICAgICByZXR1cm4gci5waXBlKGNhdGNoRXJyb3IoKGUpID0+IHdyYXBJbnRvT2JzZXJ2YWJsZShvbkVycm9yKGFjdGlvbiwgZSkpKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHdyYXBJbnRvT2JzZXJ2YWJsZShvbkVycm9yKGFjdGlvbiwgZSkpO1xuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBAd2hhdEl0RG9lcyBtYXBzIE9ic2VydmFibGU8QWN0aW9uIHwgW0FjdGlvbiwgU3RhdGVdPiB0b1xuICogT2JzZXJ2YWJsZTxbQWN0aW9uLCBTdGF0ZV0+XG4gKi9cbmZ1bmN0aW9uIG1hcEFjdGlvbkFuZFN0YXRlPFQgZXh0ZW5kcyBBcnJheTx1bmtub3duPiwgQT4oKSB7XG4gIHJldHVybiAoc291cmNlOiBPYnNlcnZhYmxlPEFjdGlvbk9yQWN0aW9uV2l0aFN0YXRlczxULCBBPj4pID0+IHtcbiAgICByZXR1cm4gc291cmNlLnBpcGUoXG4gICAgICBtYXAoKHZhbHVlKSA9PiBub3JtYWxpemVBY3Rpb25BbmRTdGF0ZSh2YWx1ZSkgYXMgW0EsIC4uLlRdKVxuICAgICk7XG4gIH07XG59XG5cbi8qKlxuICogQHdoYXRJdERvZXMgTm9ybWFsaXplcyBlaXRoZXIgYSBiYXJlIGFjdGlvbiBvciBhbiBhcnJheSBvZiBhY3Rpb24gYW5kIHNsaWNlc1xuICogaW50byBhbiBhcnJheSBvZiBhY3Rpb24gYW5kIHNsaWNlcyAob3IgdW5kZWZpbmVkKVxuICovXG5mdW5jdGlvbiBub3JtYWxpemVBY3Rpb25BbmRTdGF0ZTxUIGV4dGVuZHMgQXJyYXk8dW5rbm93bj4sIEE+KFxuICBhcmdzOiBBY3Rpb25PckFjdGlvbldpdGhTdGF0ZXM8VCwgQT5cbik6IFtBLCAuLi5UXSB7XG4gIGxldCBhY3Rpb246IEEsIHNsaWNlczogVDtcblxuICBpZiAoYXJncyBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgW2FjdGlvbiwgLi4uc2xpY2VzXSA9IGFyZ3M7XG4gIH0gZWxzZSB7XG4gICAgc2xpY2VzID0gW10gYXMgVDtcbiAgICBhY3Rpb24gPSBhcmdzO1xuICB9XG5cbiAgcmV0dXJuIFthY3Rpb24sIC4uLnNsaWNlc107XG59XG5cbmZ1bmN0aW9uIGZpbmRTbmFwc2hvdChcbiAgY29tcG9uZW50OiBUeXBlPGFueT4sXG4gIHM6IEFjdGl2YXRlZFJvdXRlU25hcHNob3Rcbik6IEFjdGl2YXRlZFJvdXRlU25hcHNob3Qge1xuICBpZiAocy5yb3V0ZUNvbmZpZyAmJiBzLnJvdXRlQ29uZmlnLmNvbXBvbmVudCA9PT0gY29tcG9uZW50KSB7XG4gICAgcmV0dXJuIHM7XG4gIH1cbiAgZm9yIChjb25zdCBjIG9mIHMuY2hpbGRyZW4pIHtcbiAgICBjb25zdCBzcyA9IGZpbmRTbmFwc2hvdChjb21wb25lbnQsIGMpO1xuICAgIGlmIChzcykge1xuICAgICAgcmV0dXJuIHNzO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gd3JhcEludG9PYnNlcnZhYmxlPE8+KG9iajogT2JzZXJ2YWJsZTxPPiB8IE8gfCB2b2lkKTogT2JzZXJ2YWJsZTxPPiB7XG4gIGlmIChpc09ic2VydmFibGUob2JqKSkge1xuICAgIHJldHVybiBvYmo7XG4gIH0gZWxzZSBpZiAoIW9iaikge1xuICAgIHJldHVybiBvZigpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBvZihvYmogYXMgTyk7XG4gIH1cbn1cbiJdfQ==
@@ -1,2 +0,0 @@
1
- export { readAll, readFirst } from './src/testing-utils';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyL3Rlc3RpbmcvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IHJlYWRBbGwsIHJlYWRGaXJzdCB9IGZyb20gJy4vc3JjL3Rlc3RpbmctdXRpbHMnO1xuIl19
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './index';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibngtYW5ndWxhci10ZXN0aW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci90ZXN0aW5nL254LWFuZ3VsYXItdGVzdGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
@@ -1,38 +0,0 @@
1
- import { first, toArray } from 'rxjs/operators';
2
- /**
3
- * @deprecated This will be removed in Nx v21. If using RxJS 7, use `firstValueFrom(obs$.pipe(toArray()))`
4
- * or `lastValueFrom(obs$.pipe(toArray()))`. If using RxJS 6, use `obs$.pipe(toArray()).toPromise()`.
5
- *
6
- * @whatItDoes reads all the values from an observable and returns a promise
7
- * with an array of all values. This should be used in combination with async/await.
8
- *
9
- * ## Example
10
- *
11
- * ```typescript
12
- * const obs = of(1, 2, 3, 4);
13
- * const res = await readAll(obs)
14
- * expect(res).toEqual([1, 2, 3, 4]);
15
- * ```
16
- */
17
- export function readAll(o) {
18
- return o.pipe(toArray()).toPromise();
19
- }
20
- /**
21
- * @deprecated This will be removed in Nx v21. Since RxJS 7, use `firstValueFrom(obs$)`. If using RxJS 6,
22
- * use `obs$.pipe(first()).toPromise()`.
23
- *
24
- * @whatItDoes reads the first value from an observable and returns a promise
25
- * with it. This should be used in combination with async/await.
26
- *
27
- * ## Example
28
- *
29
- * ```typescript
30
- * const obs = of(1, 2, 3, 4);
31
- * const res = await readFirst(obs)
32
- * expect(res).toEqual(1);
33
- * ```
34
- */
35
- export function readFirst(o) {
36
- return o.pipe(first()).toPromise();
37
- }
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdGluZy11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXIvdGVzdGluZy9zcmMvdGVzdGluZy11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWhEOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxVQUFVLE9BQU8sQ0FBSSxDQUFnQjtJQUN6QyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN2QyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFJLENBQWdCO0lBQzNDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3JDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpcnN0LCB0b0FycmF5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIFRoaXMgd2lsbCBiZSByZW1vdmVkIGluIE54IHYyMS4gSWYgdXNpbmcgUnhKUyA3LCB1c2UgYGZpcnN0VmFsdWVGcm9tKG9icyQucGlwZSh0b0FycmF5KCkpKWBcbiAqIG9yIGBsYXN0VmFsdWVGcm9tKG9icyQucGlwZSh0b0FycmF5KCkpKWAuIElmIHVzaW5nIFJ4SlMgNiwgdXNlIGBvYnMkLnBpcGUodG9BcnJheSgpKS50b1Byb21pc2UoKWAuXG4gKlxuICogQHdoYXRJdERvZXMgcmVhZHMgYWxsIHRoZSB2YWx1ZXMgZnJvbSBhbiBvYnNlcnZhYmxlIGFuZCByZXR1cm5zIGEgcHJvbWlzZVxuICogd2l0aCBhbiBhcnJheSBvZiBhbGwgdmFsdWVzLiBUaGlzIHNob3VsZCBiZSB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggYXN5bmMvYXdhaXQuXG4gKlxuICogIyMgRXhhbXBsZVxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IG9icyA9IG9mKDEsIDIsIDMsIDQpO1xuICogY29uc3QgcmVzID0gYXdhaXQgcmVhZEFsbChvYnMpXG4gKiBleHBlY3QocmVzKS50b0VxdWFsKFsxLCAyLCAzLCA0XSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlYWRBbGw8VD4obzogT2JzZXJ2YWJsZTxUPik6IFByb21pc2U8VFtdPiB7XG4gIHJldHVybiBvLnBpcGUodG9BcnJheSgpKS50b1Byb21pc2UoKTtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBUaGlzIHdpbGwgYmUgcmVtb3ZlZCBpbiBOeCB2MjEuIFNpbmNlIFJ4SlMgNywgdXNlIGBmaXJzdFZhbHVlRnJvbShvYnMkKWAuIElmIHVzaW5nIFJ4SlMgNixcbiAqIHVzZSBgb2JzJC5waXBlKGZpcnN0KCkpLnRvUHJvbWlzZSgpYC5cbiAqXG4gKiBAd2hhdEl0RG9lcyByZWFkcyB0aGUgZmlyc3QgdmFsdWUgZnJvbSBhbiBvYnNlcnZhYmxlIGFuZCByZXR1cm5zIGEgcHJvbWlzZVxuICogd2l0aCBpdC4gVGhpcyBzaG91bGQgYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIGFzeW5jL2F3YWl0LlxuICpcbiAqICMjIEV4YW1wbGVcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBvYnMgPSBvZigxLCAyLCAzLCA0KTtcbiAqIGNvbnN0IHJlcyA9IGF3YWl0IHJlYWRGaXJzdChvYnMpXG4gKiBleHBlY3QocmVzKS50b0VxdWFsKDEpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWFkRmlyc3Q8VD4obzogT2JzZXJ2YWJsZTxUPik6IFByb21pc2U8VD4ge1xuICByZXR1cm4gby5waXBlKGZpcnN0KCkpLnRvUHJvbWlzZSgpO1xufVxuIl19
@@ -1,45 +0,0 @@
1
- import { toArray, first } from 'rxjs/operators';
2
-
3
- /**
4
- * @deprecated This will be removed in Nx v21. If using RxJS 7, use `firstValueFrom(obs$.pipe(toArray()))`
5
- * or `lastValueFrom(obs$.pipe(toArray()))`. If using RxJS 6, use `obs$.pipe(toArray()).toPromise()`.
6
- *
7
- * @whatItDoes reads all the values from an observable and returns a promise
8
- * with an array of all values. This should be used in combination with async/await.
9
- *
10
- * ## Example
11
- *
12
- * ```typescript
13
- * const obs = of(1, 2, 3, 4);
14
- * const res = await readAll(obs)
15
- * expect(res).toEqual([1, 2, 3, 4]);
16
- * ```
17
- */
18
- function readAll(o) {
19
- return o.pipe(toArray()).toPromise();
20
- }
21
- /**
22
- * @deprecated This will be removed in Nx v21. Since RxJS 7, use `firstValueFrom(obs$)`. If using RxJS 6,
23
- * use `obs$.pipe(first()).toPromise()`.
24
- *
25
- * @whatItDoes reads the first value from an observable and returns a promise
26
- * with it. This should be used in combination with async/await.
27
- *
28
- * ## Example
29
- *
30
- * ```typescript
31
- * const obs = of(1, 2, 3, 4);
32
- * const res = await readFirst(obs)
33
- * expect(res).toEqual(1);
34
- * ```
35
- */
36
- function readFirst(o) {
37
- return o.pipe(first()).toPromise();
38
- }
39
-
40
- /**
41
- * Generated bundle index. Do not edit.
42
- */
43
-
44
- export { readAll, readFirst };
45
- //# sourceMappingURL=nx-angular-testing.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"nx-angular-testing.mjs","sources":["../../../../packages/angular/testing/src/testing-utils.ts","../../../../packages/angular/testing/nx-angular-testing.ts"],"sourcesContent":["import type { Observable } from 'rxjs';\nimport { first, toArray } from 'rxjs/operators';\n\n/**\n * @deprecated This will be removed in Nx v21. If using RxJS 7, use `firstValueFrom(obs$.pipe(toArray()))`\n * or `lastValueFrom(obs$.pipe(toArray()))`. If using RxJS 6, use `obs$.pipe(toArray()).toPromise()`.\n *\n * @whatItDoes reads all the values from an observable and returns a promise\n * with an array of all values. This should be used in combination with async/await.\n *\n * ## Example\n *\n * ```typescript\n * const obs = of(1, 2, 3, 4);\n * const res = await readAll(obs)\n * expect(res).toEqual([1, 2, 3, 4]);\n * ```\n */\nexport function readAll<T>(o: Observable<T>): Promise<T[]> {\n return o.pipe(toArray()).toPromise();\n}\n\n/**\n * @deprecated This will be removed in Nx v21. Since RxJS 7, use `firstValueFrom(obs$)`. If using RxJS 6,\n * use `obs$.pipe(first()).toPromise()`.\n *\n * @whatItDoes reads the first value from an observable and returns a promise\n * with it. This should be used in combination with async/await.\n *\n * ## Example\n *\n * ```typescript\n * const obs = of(1, 2, 3, 4);\n * const res = await readFirst(obs)\n * expect(res).toEqual(1);\n * ```\n */\nexport function readFirst<T>(o: Observable<T>): Promise<T> {\n return o.pipe(first()).toPromise();\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;AAGA;;;;;;;;;;;;;;AAcG;AACG,SAAU,OAAO,CAAI,CAAgB,EAAA;IACzC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;AACvC,CAAC;AAED;;;;;;;;;;;;;;AAcG;AACG,SAAU,SAAS,CAAI,CAAgB,EAAA;IAC3C,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;AACrC;;ACvCA;;AAEG;;;;"}
@@ -1,4 +0,0 @@
1
- import { type Schema } from '../schema';
2
- import { type ExecutorContext } from '@nx/devkit';
3
- import type { StaticRemotesConfig } from '@nx/webpack/src/utils/module-federation/parse-static-remotes-config';
4
- export declare function buildStaticRemotes(staticRemotesConfig: StaticRemotesConfig, nxBin: any, context: ExecutorContext, options: Schema): Promise<Record<string, string>>;
@@ -1,65 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.buildStaticRemotes = buildStaticRemotes;
4
- const devkit_1 = require("@nx/devkit");
5
- const cache_directory_1 = require("nx/src/utils/cache-directory");
6
- const node_child_process_1 = require("node:child_process");
7
- const node_path_1 = require("node:path");
8
- const node_fs_1 = require("node:fs");
9
- async function buildStaticRemotes(staticRemotesConfig, nxBin, context, options) {
10
- if (!staticRemotesConfig.remotes.length) {
11
- return;
12
- }
13
- const mappedLocationOfRemotes = {};
14
- for (const app of staticRemotesConfig.remotes) {
15
- mappedLocationOfRemotes[app] = `http${options.ssl ? 's' : ''}://${options.host}:${options.staticRemotesPort}/${staticRemotesConfig.config[app].urlSegment}`;
16
- }
17
- await new Promise((res, rej) => {
18
- devkit_1.logger.info(`NX Building ${staticRemotesConfig.remotes.length} static remotes...`);
19
- const staticProcess = (0, node_child_process_1.fork)(nxBin, [
20
- 'run-many',
21
- `--target=build`,
22
- `--projects=${staticRemotesConfig.remotes.join(',')}`,
23
- ...(context.configurationName
24
- ? [`--configuration=${context.configurationName}`]
25
- : []),
26
- ...(options.parallel ? [`--parallel=${options.parallel}`] : []),
27
- ], {
28
- cwd: context.root,
29
- stdio: ['ignore', 'pipe', 'pipe', 'ipc'],
30
- });
31
- // File to debug build failures e.g. 2024-01-01T00_00_0_0Z-build.log'
32
- const remoteBuildLogFile = (0, node_path_1.join)(cache_directory_1.workspaceDataDirectory, `${new Date().toISOString().replace(/[:\.]/g, '_')}-build.log`);
33
- const stdoutStream = (0, node_fs_1.createWriteStream)(remoteBuildLogFile);
34
- staticProcess.stdout.on('data', (data) => {
35
- const ANSII_CODE_REGEX = /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g;
36
- const stdoutString = data.toString().replace(ANSII_CODE_REGEX, '');
37
- stdoutStream.write(stdoutString);
38
- // in addition to writing into the stdout stream, also show error directly in console
39
- // so the error is easily discoverable. 'ERROR in' is the key word to search in webpack output.
40
- if (stdoutString.includes('ERROR in')) {
41
- devkit_1.logger.log(stdoutString);
42
- }
43
- if (stdoutString.includes('Successfully ran target build')) {
44
- staticProcess.stdout.removeAllListeners('data');
45
- devkit_1.logger.info(`NX Built ${staticRemotesConfig.remotes.length} static remotes`);
46
- res();
47
- }
48
- });
49
- staticProcess.stderr.on('data', (data) => devkit_1.logger.info(data.toString()));
50
- staticProcess.once('exit', (code) => {
51
- stdoutStream.end();
52
- staticProcess.stdout.removeAllListeners('data');
53
- staticProcess.stderr.removeAllListeners('data');
54
- if (code !== 0) {
55
- rej(`Remote failed to start. A complete log can be found in: ${remoteBuildLogFile}`);
56
- }
57
- else {
58
- res();
59
- }
60
- });
61
- process.on('SIGTERM', () => staticProcess.kill('SIGTERM'));
62
- process.on('exit', () => staticProcess.kill('SIGTERM'));
63
- });
64
- return mappedLocationOfRemotes;
65
- }
@@ -1,9 +0,0 @@
1
- import { type ExecutorContext } from '@nx/devkit';
2
- import { type Schema } from '../schema';
3
- import type { StaticRemotesConfig } from '@nx/webpack/src/utils/module-federation/parse-static-remotes-config';
4
- export declare function startStaticRemotesFileServer(staticRemotesConfig: StaticRemotesConfig, context: ExecutorContext, options: Schema): AsyncGenerator<{
5
- success: boolean;
6
- baseUrl: string;
7
- }, {
8
- success: boolean;
9
- }, unknown>;
@@ -1,51 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.startStaticRemotesFileServer = startStaticRemotesFileServer;
4
- const tslib_1 = require("tslib");
5
- const devkit_1 = require("@nx/devkit");
6
- const file_server_impl_1 = tslib_1.__importDefault(require("@nx/web/src/executors/file-server/file-server.impl"));
7
- const path_1 = require("path");
8
- const fs_1 = require("fs");
9
- function startStaticRemotesFileServer(staticRemotesConfig, context, options) {
10
- if (!staticRemotesConfig.remotes ||
11
- staticRemotesConfig.remotes.length === 0) {
12
- return;
13
- }
14
- let shouldMoveToCommonLocation = false;
15
- let commonOutputDirectory;
16
- for (const app of staticRemotesConfig.remotes) {
17
- const remoteBasePath = staticRemotesConfig.config[app].basePath;
18
- if (!commonOutputDirectory) {
19
- commonOutputDirectory = remoteBasePath;
20
- }
21
- else if (commonOutputDirectory !== remoteBasePath) {
22
- shouldMoveToCommonLocation = true;
23
- break;
24
- }
25
- }
26
- if (shouldMoveToCommonLocation) {
27
- commonOutputDirectory = (0, path_1.join)(devkit_1.workspaceRoot, 'tmp/static-remotes');
28
- for (const app of staticRemotesConfig.remotes) {
29
- const remoteConfig = staticRemotesConfig.config[app];
30
- (0, fs_1.cpSync)(remoteConfig.outputPath, (0, path_1.join)(commonOutputDirectory, remoteConfig.urlSegment), {
31
- force: true,
32
- recursive: true,
33
- });
34
- }
35
- }
36
- const staticRemotesIter = (0, file_server_impl_1.default)({
37
- cors: true,
38
- watch: false,
39
- staticFilePath: commonOutputDirectory,
40
- parallel: false,
41
- spa: false,
42
- withDeps: false,
43
- host: options.host,
44
- port: options.staticRemotesPort,
45
- ssl: options.ssl,
46
- sslCert: options.sslCert,
47
- sslKey: options.sslKey,
48
- cacheSeconds: -1,
49
- }, context);
50
- return staticRemotesIter;
51
- }
@@ -1,4 +0,0 @@
1
- import type { Schema } from '../schema';
2
- import { type ExecutorContext } from '@nx/devkit';
3
- import type { StaticRemotesConfig } from '@nx/webpack/src/utils/module-federation/parse-static-remotes-config';
4
- export declare function buildStaticRemotes(staticRemotesConfig: StaticRemotesConfig, nxBin: any, context: ExecutorContext, options: Schema): Promise<Record<string, string>>;