@elliemae/pui-cli 9.0.0-alpha.1 → 9.0.0-alpha.11

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 (279) hide show
  1. package/README.md +43 -0
  2. package/app.tsconfig.json +1 -1
  3. package/build/docs/404.html +16 -0
  4. package/build/docs/api/functions/loadRoutes/index.html +22 -0
  5. package/build/docs/api/index.html +22 -0
  6. package/build/docs/api/type-aliases/LIB_NAME/index.html +17 -0
  7. package/build/docs/api/variables/babelConfig/index.html +40 -0
  8. package/build/docs/api/variables/commitlintConfig/index.html +20 -0
  9. package/build/docs/api/variables/eslintBaseConfig/index.html +132 -0
  10. package/build/docs/api/variables/eslintConfig/index.html +180 -0
  11. package/build/docs/api/variables/eslintFlatBaseConfig/index.html +18 -0
  12. package/build/docs/api/variables/eslintFlatBaseConfigStrict/index.html +18 -0
  13. package/build/docs/api/variables/eslintFlatConfig/index.html +18 -0
  14. package/build/docs/api/variables/eslintFlatConfigStrict/index.html +18 -0
  15. package/build/docs/api/variables/jestConfig/index.html +98 -0
  16. package/build/docs/api/variables/jestNodeConfig/index.html +98 -0
  17. package/build/docs/api/variables/lintStagedConfig/index.html +24 -0
  18. package/build/docs/api/variables/prettierConfig/index.html +30 -0
  19. package/build/docs/api/variables/stylelintConfig/index.html +17 -0
  20. package/build/docs/api/variables/vitestConfig/index.html +17 -0
  21. package/build/docs/assets/css/styles.74603f39.css +1 -0
  22. package/build/docs/assets/js/04ee7372.eaa386ed.js +1 -0
  23. package/build/docs/assets/js/0551d4dd.ebb18f4f.js +1 -0
  24. package/build/docs/assets/js/0a1d0315.fc8f91a7.js +1 -0
  25. package/build/docs/assets/js/1126.fa547e9c.js +1 -0
  26. package/build/docs/assets/js/1127.f28430e6.js +1 -0
  27. package/build/docs/assets/js/1298.fb0939c9.js +1 -0
  28. package/build/docs/assets/js/13097d8d.af480dfd.js +1 -0
  29. package/build/docs/assets/js/1617.b2623271.js +1 -0
  30. package/build/docs/assets/js/16b7bc88.c3779e27.js +1 -0
  31. package/build/docs/assets/js/1700.4f7a9007.js +1 -0
  32. package/build/docs/assets/js/17896441.84339068.js +1 -0
  33. package/build/docs/assets/js/1b9df811.aaa95da1.js +1 -0
  34. package/build/docs/assets/js/213.e69351b3.js +1 -0
  35. package/build/docs/assets/js/2297.e63290f4.js +1 -0
  36. package/build/docs/assets/js/232a0286.33b2782b.js +1 -0
  37. package/build/docs/assets/js/2399.cc5803e0.js +1 -0
  38. package/build/docs/assets/js/242.73516ab6.js +1 -0
  39. package/build/docs/assets/js/247.e1522e52.js +1 -0
  40. package/build/docs/assets/js/2673.da75a556.js +1 -0
  41. package/build/docs/assets/js/2805.f0505f8c.js +1 -0
  42. package/build/docs/assets/js/3395.eb3dad5b.js +1 -0
  43. package/build/docs/assets/js/3499.2d5c6821.js +1 -0
  44. package/build/docs/assets/js/3552.9272c0d9.js +1 -0
  45. package/build/docs/assets/js/3720.8e7f36d4.js +2 -0
  46. package/build/docs/assets/js/3720.8e7f36d4.js.LICENSE.txt +9 -0
  47. package/build/docs/assets/js/37d86055.47211796.js +1 -0
  48. package/build/docs/assets/js/3992.0ac29b2f.js +2 -0
  49. package/build/docs/assets/js/3992.0ac29b2f.js.LICENSE.txt +1 -0
  50. package/build/docs/assets/js/4069.301f1115.js +1 -0
  51. package/build/docs/assets/js/4134.553b3645.js +1 -0
  52. package/build/docs/assets/js/4257.9afce6ac.js +1 -0
  53. package/build/docs/assets/js/4772.6294b364.js +1 -0
  54. package/build/docs/assets/js/4884.9dbe23e5.js +1 -0
  55. package/build/docs/assets/js/4fb6949f.369cc1b9.js +1 -0
  56. package/build/docs/assets/js/5196.98f7e06a.js +1 -0
  57. package/build/docs/assets/js/5248.ee436cea.js +1 -0
  58. package/build/docs/assets/js/5428.71752e9a.js +1 -0
  59. package/build/docs/assets/js/5964.0728ed91.js +1 -0
  60. package/build/docs/assets/js/5968.5f4ccba7.js +1 -0
  61. package/build/docs/assets/js/5befad71.5f19afb5.js +1 -0
  62. package/build/docs/assets/js/5d5f1db0.c5aa5afa.js +1 -0
  63. package/build/docs/assets/js/5e8c322a.ef3b894b.js +1 -0
  64. package/build/docs/assets/js/5e95c892.f550b901.js +1 -0
  65. package/build/docs/assets/js/5fb3c522.da5628e8.js +1 -0
  66. package/build/docs/assets/js/6486.68ae0007.js +1 -0
  67. package/build/docs/assets/js/6704.2615a5c6.js +1 -0
  68. package/build/docs/assets/js/6bd11e52.08b95209.js +1 -0
  69. package/build/docs/assets/js/6e96545e.30c1b801.js +1 -0
  70. package/build/docs/assets/js/7080.efd5ba6c.js +1 -0
  71. package/build/docs/assets/js/71f6d02b.cfd98385.js +1 -0
  72. package/build/docs/assets/js/7201.e90ba636.js +1 -0
  73. package/build/docs/assets/js/7344.95656e38.js +1 -0
  74. package/build/docs/assets/js/7516.b6668d60.js +1 -0
  75. package/build/docs/assets/js/7525.a8d0db87.js +1 -0
  76. package/build/docs/assets/js/7540.7a4353cf.js +1 -0
  77. package/build/docs/assets/js/7985.8c6943d6.js +1 -0
  78. package/build/docs/assets/js/8049.8ba75278.js +1 -0
  79. package/build/docs/assets/js/80e87108.f9507b95.js +1 -0
  80. package/build/docs/assets/js/8152.f2bebb2f.js +1 -0
  81. package/build/docs/assets/js/821.8d4e2a80.js +1 -0
  82. package/build/docs/assets/js/8290.a4f7a2ca.js +1 -0
  83. package/build/docs/assets/js/8355.864847a1.js +1 -0
  84. package/build/docs/assets/js/8389.26a9caca.js +1 -0
  85. package/build/docs/assets/js/8585.3cb09ff7.js +1 -0
  86. package/build/docs/assets/js/8788.03856709.js +1 -0
  87. package/build/docs/assets/js/9178.50ac2954.js +1 -0
  88. package/build/docs/assets/js/9210.1ac21da8.js +1 -0
  89. package/build/docs/assets/js/9354.37ad86f9.js +1 -0
  90. package/build/docs/assets/js/936.c151b43f.js +1 -0
  91. package/build/docs/assets/js/9574.b172d607.js +1 -0
  92. package/build/docs/assets/js/97.70eddfb5.js +1 -0
  93. package/build/docs/assets/js/9852.f77caf52.js +1 -0
  94. package/build/docs/assets/js/9953.f6278635.js +1 -0
  95. package/build/docs/assets/js/a7bd4aaa.30ffad02.js +1 -0
  96. package/build/docs/assets/js/a94703ab.f1796514.js +1 -0
  97. package/build/docs/assets/js/aba21aa0.3bbcf0cc.js +1 -0
  98. package/build/docs/assets/js/b7b585d8.6d53e73f.js +1 -0
  99. package/build/docs/assets/js/b8ac1d98.62684003.js +1 -0
  100. package/build/docs/assets/js/bde5209a.f5bca8b2.js +1 -0
  101. package/build/docs/assets/js/c377a04b.0f8625c6.js +1 -0
  102. package/build/docs/assets/js/dfd75424.51c4e2cb.js +1 -0
  103. package/build/docs/assets/js/e5f79924.c793a74d.js +1 -0
  104. package/build/docs/assets/js/f736c962.dbd0d004.js +1 -0
  105. package/build/docs/assets/js/main.7f815b7e.js +2 -0
  106. package/build/docs/assets/js/main.7f815b7e.js.LICENSE.txt +51 -0
  107. package/build/docs/assets/js/runtime~main.f7c5bef0.js +1 -0
  108. package/build/docs/eslint-rules-migration/index.html +135 -0
  109. package/build/docs/img/favicon.ico +0 -0
  110. package/build/docs/img/logo.jpeg +0 -0
  111. package/build/docs/img/logo.svg +22 -0
  112. package/build/docs/img/readme.md +1 -0
  113. package/build/docs/index.html +179 -0
  114. package/build/docs/pui-cli-9-migration/index.html +180 -0
  115. package/build/docs/readme.md +1 -0
  116. package/build/docs/sitemap.xml +1 -0
  117. package/build/docs/ssl-certificate-setup/index.html +284 -0
  118. package/build/docs/stylelint-migration/index.html +57 -0
  119. package/build/docs/usage-guide/index.html +439 -0
  120. package/dist/cjs/cli.js +3 -13
  121. package/dist/cjs/commands/build.js +1 -2
  122. package/dist/cjs/commands/buildcdn.js +1 -2
  123. package/dist/cjs/commands/codemod.js +1 -12
  124. package/dist/cjs/commands/gendoc.js +1 -2
  125. package/dist/cjs/commands/lint.js +11 -9
  126. package/dist/cjs/commands/pack.js +1 -2
  127. package/dist/cjs/commands/skills.js +206 -0
  128. package/dist/cjs/commands/start.js +1 -2
  129. package/dist/cjs/commands/storybook.js +1 -12
  130. package/dist/cjs/commands/test.js +1 -13
  131. package/dist/cjs/commands/tscheck.js +1 -2
  132. package/dist/cjs/commands/utils.js +16 -12
  133. package/dist/cjs/commands/version.js +1 -12
  134. package/dist/cjs/commands/vitest.js +1 -13
  135. package/dist/cjs/index.cjs +13 -1
  136. package/dist/cjs/index.js +8 -2
  137. package/dist/cjs/lint-config/eslint/common.cjs +1 -1
  138. package/dist/cjs/lint-config/eslint/flat/common.mjs +169 -0
  139. package/dist/cjs/lint-config/eslint/flat/compat.mjs +27 -0
  140. package/dist/cjs/lint-config/eslint/flat/index.mjs +21 -0
  141. package/dist/cjs/lint-config/eslint/flat/non-react-export.mjs +10 -0
  142. package/dist/cjs/lint-config/eslint/flat/non-react.mjs +6 -0
  143. package/dist/cjs/lint-config/eslint/flat/presets.mjs +96 -0
  144. package/dist/cjs/lint-config/eslint/flat/react-export.mjs +7 -0
  145. package/dist/cjs/lint-config/eslint/flat/react.mjs +59 -0
  146. package/dist/cjs/lint-config/eslint/flat/rules.mjs +185 -0
  147. package/dist/cjs/lint-config/eslint/typescript/non-react.cjs +1 -1
  148. package/dist/cjs/lint-config/eslint/typescript/react.cjs +1 -1
  149. package/dist/cjs/lint-config/stylelint/config.mjs +27 -0
  150. package/dist/cjs/lint-config/stylelint/export.mjs +1 -0
  151. package/dist/cjs/lint-config/stylelint.config.cjs +3 -19
  152. package/dist/cjs/monorepo/utils.cjs +16 -8
  153. package/dist/cjs/monorepo/utils.js +5 -8
  154. package/dist/cjs/{release.config.cjs → release.config.mjs} +3 -2
  155. package/dist/cjs/{semantic-release-plugin.cjs → semantic-release-plugin.mjs} +3 -3
  156. package/dist/cjs/skills/migrate-to-pui-cli-9/SKILL.md +309 -0
  157. package/dist/cjs/testing/jest.config.cjs +4 -4
  158. package/dist/cjs/testing/resolver.cjs +1 -1
  159. package/dist/cjs/testing/setup-react-env.js +1 -1
  160. package/dist/cjs/testing/vitest.config.js +2 -1
  161. package/dist/cjs/transpile/esbuild.js +1 -1
  162. package/dist/cjs/webpack/csp-plugin.js +2 -4
  163. package/dist/cjs/webpack/prop-types-shim.js +0 -1
  164. package/dist/cjs/webpack/webpack.lib.base.babel.js +0 -8
  165. package/dist/esm/cli.js +3 -13
  166. package/dist/esm/commands/build.js +1 -2
  167. package/dist/esm/commands/buildcdn.js +1 -2
  168. package/dist/esm/commands/codemod.js +1 -2
  169. package/dist/esm/commands/gendoc.js +1 -2
  170. package/dist/esm/commands/lint.js +11 -9
  171. package/dist/esm/commands/pack.js +1 -2
  172. package/dist/esm/commands/skills.js +175 -0
  173. package/dist/esm/commands/start.js +1 -2
  174. package/dist/esm/commands/storybook.js +1 -2
  175. package/dist/esm/commands/test.js +1 -3
  176. package/dist/esm/commands/tscheck.js +1 -2
  177. package/dist/esm/commands/utils.js +17 -13
  178. package/dist/esm/commands/version.js +1 -2
  179. package/dist/esm/commands/vitest.js +1 -3
  180. package/dist/esm/index.cjs +13 -1
  181. package/dist/esm/index.js +13 -1
  182. package/dist/esm/lint-config/eslint/common.cjs +1 -1
  183. package/dist/esm/lint-config/eslint/flat/common.mjs +169 -0
  184. package/dist/esm/lint-config/eslint/flat/compat.mjs +27 -0
  185. package/dist/esm/lint-config/eslint/flat/index.mjs +21 -0
  186. package/dist/esm/lint-config/eslint/flat/non-react-export.mjs +10 -0
  187. package/dist/esm/lint-config/eslint/flat/non-react.mjs +6 -0
  188. package/dist/esm/lint-config/eslint/flat/presets.mjs +96 -0
  189. package/dist/esm/lint-config/eslint/flat/react-export.mjs +7 -0
  190. package/dist/esm/lint-config/eslint/flat/react.mjs +59 -0
  191. package/dist/esm/lint-config/eslint/flat/rules.mjs +185 -0
  192. package/dist/esm/lint-config/eslint/typescript/non-react.cjs +1 -1
  193. package/dist/esm/lint-config/eslint/typescript/react.cjs +1 -1
  194. package/dist/esm/lint-config/stylelint/config.mjs +27 -0
  195. package/dist/esm/lint-config/stylelint/export.mjs +1 -0
  196. package/dist/esm/lint-config/stylelint.config.cjs +3 -19
  197. package/dist/esm/monorepo/utils.cjs +16 -8
  198. package/dist/esm/monorepo/utils.js +5 -8
  199. package/dist/esm/{release.config.cjs → release.config.mjs} +3 -2
  200. package/dist/esm/{semantic-release-plugin.cjs → semantic-release-plugin.mjs} +3 -3
  201. package/dist/esm/skills/migrate-to-pui-cli-9/SKILL.md +309 -0
  202. package/dist/esm/testing/jest.config.cjs +4 -4
  203. package/dist/esm/testing/resolver.cjs +1 -1
  204. package/dist/esm/testing/setup-react-env.js +1 -1
  205. package/dist/esm/testing/vitest.config.js +2 -1
  206. package/dist/esm/transpile/esbuild.js +1 -1
  207. package/dist/esm/webpack/csp-plugin.js +2 -4
  208. package/dist/esm/webpack/prop-types-shim.js +0 -1
  209. package/dist/esm/webpack/webpack.lib.base.babel.js +0 -8
  210. package/dist/types/lib/commands/build.d.ts +1 -1
  211. package/dist/types/lib/commands/buildcdn.d.ts +1 -1
  212. package/dist/types/lib/commands/codemod.d.ts +1 -1
  213. package/dist/types/lib/commands/gendoc.d.ts +1 -1
  214. package/dist/types/lib/commands/lint.d.ts +1 -1
  215. package/dist/types/lib/commands/pack.d.ts +1 -1
  216. package/dist/types/lib/commands/skills.d.ts +11 -0
  217. package/dist/types/lib/commands/start.d.ts +1 -1
  218. package/dist/types/lib/commands/storybook.d.ts +1 -1
  219. package/dist/types/lib/commands/test.d.ts +1 -1
  220. package/dist/types/lib/commands/tscheck.d.ts +1 -1
  221. package/dist/types/lib/commands/utils.d.ts +43 -2
  222. package/dist/types/lib/commands/version.d.ts +1 -1
  223. package/dist/types/lib/commands/vitest.d.ts +1 -1
  224. package/dist/types/lib/index.d.cts +6 -2
  225. package/dist/types/lib/index.d.ts +5 -1
  226. package/dist/types/lib/lint-config/eslint/flat/common.d.mts +6 -0
  227. package/dist/types/lib/lint-config/eslint/flat/compat.d.mts +9 -0
  228. package/dist/types/lib/lint-config/eslint/flat/index.d.mts +6 -0
  229. package/dist/types/lib/lint-config/eslint/flat/non-react-export.d.mts +4 -0
  230. package/dist/types/lib/lint-config/eslint/flat/non-react.d.mts +3 -0
  231. package/dist/types/lib/lint-config/eslint/flat/presets.d.mts +34 -0
  232. package/dist/types/lib/lint-config/eslint/flat/react-export.d.mts +4 -0
  233. package/dist/types/lib/lint-config/eslint/flat/react.d.mts +4 -0
  234. package/dist/types/lib/lint-config/eslint/flat/rules.d.mts +361 -0
  235. package/dist/types/lib/lint-config/stylelint/config.d.mts +3 -0
  236. package/dist/types/lib/lint-config/stylelint/export.d.mts +1 -0
  237. package/dist/types/lib/lint-config/stylelint.config.d.cts +2 -10
  238. package/dist/types/lib/release.config.d.mts +10 -0
  239. package/dist/types/lib/semantic-release-plugin.d.mts +4 -0
  240. package/dist/types/lib/server/appRoutes.d.ts +1 -1
  241. package/dist/types/lib/server/csp.d.ts +1 -1
  242. package/dist/types/lib/server/middlewares.d.ts +1 -1
  243. package/dist/types/lib/webpack/csp-plugin.d.ts +3 -3
  244. package/dist/types/lib/webpack/helpers.d.ts +1 -1
  245. package/dist/types/lib/webpack/interceptor-middleware.d.ts +2 -2
  246. package/dist/types/lib/webpack/webpack.base.babel.d.ts +1 -1
  247. package/dist/types/lib/webpack/webpack.lib.base.babel.d.ts +1 -1
  248. package/dist/types/lib/webpack/webpack.lib.prod.babel.d.ts +1 -1
  249. package/dist/types/lib/webpack/webpack.prod.babel.d.ts +1 -1
  250. package/dist/types/lib/webpack/webpack.storybook.d.ts +1 -1
  251. package/dist/types/tsconfig.tsbuildinfo +1 -1
  252. package/lib/lint-config/commitlint.config.cjs +1 -0
  253. package/lib/lint-config/eslint/common.cjs +164 -0
  254. package/lib/lint-config/eslint/flat/common.mjs +169 -0
  255. package/lib/lint-config/eslint/flat/compat.mjs +27 -0
  256. package/lib/lint-config/eslint/flat/index.mjs +21 -0
  257. package/lib/lint-config/eslint/flat/non-react-export.mjs +10 -0
  258. package/lib/lint-config/eslint/flat/non-react.mjs +6 -0
  259. package/lib/lint-config/eslint/flat/presets.mjs +96 -0
  260. package/lib/lint-config/eslint/flat/react-export.mjs +7 -0
  261. package/lib/lint-config/eslint/flat/react.mjs +59 -0
  262. package/lib/lint-config/eslint/flat/rules.mjs +185 -0
  263. package/lib/lint-config/eslint/non-react.cjs +14 -0
  264. package/lib/lint-config/eslint/react.cjs +26 -0
  265. package/lib/lint-config/eslint/typescript/common.cjs +49 -0
  266. package/lib/lint-config/eslint/typescript/non-react.cjs +12 -0
  267. package/lib/lint-config/eslint/typescript/react.cjs +19 -0
  268. package/lib/lint-config/lint-staged.config.js +15 -0
  269. package/lib/lint-config/prettier.config.cjs +8 -0
  270. package/lib/lint-config/stylelint/config.mjs +27 -0
  271. package/lib/lint-config/stylelint/export.mjs +1 -0
  272. package/lib/lint-config/stylelint.config.cjs +3 -0
  273. package/lib/release.config.mjs +28 -0
  274. package/lib/semantic-release-plugin.mjs +30 -0
  275. package/lib/skills/migrate-to-pui-cli-9/SKILL.md +309 -0
  276. package/library.tsconfig.json +1 -1
  277. package/package.json +95 -90
  278. package/dist/types/lib/release.config.d.cts +0 -7
  279. package/dist/types/lib/semantic-release-plugin.d.cts +0 -1
@@ -0,0 +1,180 @@
1
+ <!doctype html>
2
+ <html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-pui-cli-9-migration" data-has-hydrated="false">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="generator" content="Docusaurus v3.10.1">
6
+ <title data-rh="true">pui-cli 9 migration guide | Cli</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:url" content="https://pui.ice.com/cli/pui-cli-9-migration"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="pui-cli 9 migration guide | Cli"><meta data-rh="true" name="description" content="This guide helps PUI consumers upgrade apps and libraries from pui-cli 8 to pui-cli 9."><meta data-rh="true" property="og:description" content="This guide helps PUI consumers upgrade apps and libraries from pui-cli 8 to pui-cli 9."><link data-rh="true" rel="icon" href="/cli/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://pui.ice.com/cli/pui-cli-9-migration"><link data-rh="true" rel="alternate" href="https://pui.ice.com/cli/pui-cli-9-migration" hreflang="en"><link data-rh="true" rel="alternate" href="https://pui.ice.com/cli/pui-cli-9-migration" hreflang="x-default"><script data-rh="true" type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"pui-cli 9 migration guide","item":"https://pui.ice.com/cli/pui-cli-9-migration"}]}</script><link rel="stylesheet" href="/cli/assets/css/styles.74603f39.css">
7
+ <script src="/cli/assets/js/runtime~main.f7c5bef0.js" defer="defer"></script>
8
+ <script src="/cli/assets/js/main.7f815b7e.js" defer="defer"></script>
9
+ </head>
10
+ <body>
11
+ <svg style="display: none;"><defs>
12
+ <symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
13
+ </defs></svg>
14
+ <script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{const c=new URLSearchParams(window.location.search).entries();for(var[t,e]of c)if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id="__docusaurus"><div role="region" aria-label="Skip to main content"><a class="skipToContent__KB6" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><nav aria-label="Main" class="theme-layout-navbar navbar navbar--fixed-top"><div class="navbar__inner"><div class="theme-layout-navbar-left navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/cli/"><div class="navbar__logo"><img src="/cli/img/logo.svg" alt="Cli" class="themedComponent__Gxr themedComponent--light_euW4"><img src="/cli/img/logo.svg" alt="Cli" class="themedComponent__Gxr themedComponent--dark_cG3D"></div><b class="navbar__title text--truncate">Cli</b></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/cli/">Getting Started</a><a class="navbar__item navbar__link" href="/cli/api">API</a></div><div class="theme-layout-navbar-right navbar__items navbar__items--right"><a href="https://git.elliemae.io/platform-ui/pui-cli.git" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink__EWc"><use href="#theme-svg-external-link"></use></svg></a><div class="toggle_TGb8 colorModeToggle_zDjd"><button class="clean-btn toggleButton_pX7R toggleButtonDisabled_J9eq" type="button" disabled="" title="system mode" aria-label="Switch between dark and light mode (currently system mode)"><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_aiXM lightToggleIcon_TXA8"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_aiXM darkToggleIcon_koy3"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_aiXM systemToggleIcon_nzkW"><path fill="currentColor" d="m12 21c4.971 0 9-4.029 9-9s-4.029-9-9-9-9 4.029-9 9 4.029 9 9 9zm4.95-13.95c1.313 1.313 2.05 3.093 2.05 4.95s-0.738 3.637-2.05 4.95c-1.313 1.313-3.093 2.05-4.95 2.05v-14c1.857 0 3.637 0.737 4.95 2.05z"></path></svg></button></div><div class="navbarSearchContainer__iSk"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="theme-layout-main main-wrapper mainWrapper_KuT8"><div class="docsWrapper_VaWq"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_j5oK" type="button"></button><div class="docRoot_noFI"><aside class="theme-doc-sidebar-container docSidebarContainer_VgAC"><div class="sidebarViewport_KhCA"><div class="sidebar_kOfH"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_OmRr"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="categoryLink_jyam menu__link menu__link--sublist" href="/cli/api/"><span title="Cli API" class="categoryLinkLabel_sc1K">Cli API</span></a><button aria-label="Expand sidebar category &#x27;Cli API&#x27;" aria-expanded="false" type="button" class="clean-btn menu__caret"></button></div></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/cli/eslint-rules-migration"><span title="ESLint rules migration guide (legacy → ESLint 10 flat config)" class="linkLabel_gjq0">ESLint rules migration guide (legacy → ESLint 10 flat config)</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/cli/"><span title="PUI CLI Documentation" class="linkLabel_gjq0">PUI CLI Documentation</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" href="/cli/pui-cli-9-migration"><span title="pui-cli 9 migration guide" class="linkLabel_gjq0">pui-cli 9 migration guide</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/cli/ssl-certificate-setup"><span title="Trust SSL Certificate Guide" class="linkLabel_gjq0">Trust SSL Certificate Guide</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/cli/stylelint-migration"><span title="Stylelint migration guide (pui-cli 8 → 9 / Stylelint 17)" class="linkLabel_gjq0">Stylelint migration guide (pui-cli 8 → 9 / Stylelint 17)</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/cli/usage-guide"><span title="Usage Guide" class="linkLabel_gjq0">Usage Guide</span></a></li></ul></nav></div></div></aside><main class="docMainContainer_QTZx"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_zFNv"><div class="docItemContainer_gTAZ"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_WbZx" aria-label="Breadcrumbs"><ul class="breadcrumbs"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/cli/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_eRUI"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link">pui-cli 9 migration guide</span></li></ul></nav><div class="tocCollapsible_XRgF theme-doc-toc-mobile tocMobile_QmTN"><button type="button" class="clean-btn tocCollapsibleButton_wt2y">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>pui-cli 9 migration guide</h1></header>
15
+ <p>This guide helps PUI consumers upgrade apps and libraries from <strong>pui-cli 8</strong> to <strong>pui-cli 9</strong>.
16
+ For ESLint rule-level detail, see <a class="" href="/cli/eslint-rules-migration">ESLint rules migration guide</a>.</p>
17
+ <hr>
18
+ <h2 class="anchor anchorTargetStickyNavbar_jFbF" id="at-a-glance">At a glance<a href="#at-a-glance" class="hash-link" aria-label="Direct link to At a glance" title="Direct link to At a glance" translate="no">​</a></h2>
19
+ <table><thead><tr><th>Topic</th><th>pui-cli 8</th><th>pui-cli 9</th></tr></thead><tbody><tr><td>Node.js</td><td>20</td><td><strong>24</strong></td></tr><tr><td>pnpm</td><td>8–10</td><td><strong>11</strong></td></tr><tr><td>App/library bundler</td><td>Webpack</td><td><strong>Webpack</strong> (unchanged)</td></tr><tr><td>ESLint</td><td>8.x + <code>.eslintrc.cjs</code></td><td><strong>10.x</strong> + <code>eslint.config.mjs</code></td></tr><tr><td>Stylelint</td><td>15.x + <code>stylelint-config-styled-components</code></td><td><strong>17.x</strong> + <code>postcss-styled-syntax</code> (styled-components rules inlined)</td></tr><tr><td>Vitest (via <code>pui-cli vitest</code>)</td><td>1.x</td><td><strong>4.x</strong> (uses Vite internally; not the app bundler)</td></tr><tr><td>TypeScript lint</td><td><code>@typescript-eslint</code> v5</td><td><code>typescript-eslint</code> v8</td></tr><tr><td>Exported tsconfig</td><td><code>moduleResolution: &quot;node&quot;</code></td><td><strong><code>moduleResolution: &quot;bundler&quot;</code></strong></td></tr><tr><td>Shared config import</td><td><code>require(&#x27;@elliemae/pui-cli&#x27;).eslintConfig</code></td><td><code>import { eslintFlatConfig } from &#x27;@elliemae/pui-cli/eslint&#x27;</code></td></tr><tr><td>Stylelint import</td><td><code>require(&#x27;@elliemae/pui-cli&#x27;).stylelintConfig</code></td><td><code>import { stylelintConfig } from &#x27;@elliemae/pui-cli/stylelint&#x27;</code> (or keep CJS re-export)</td></tr><tr><td>semantic-release</td><td>21.x + <code>release.config.cjs</code></td><td><strong>25.x</strong> + <code>release.config.mjs</code> (ESM <code>extends</code> for shareable config)</td></tr><tr><td>Husky</td><td>8.x</td><td><strong>9.x</strong></td></tr><tr><td>Lerna (monorepos)</td><td>6.x</td><td><strong>9.x</strong> (via pui-cli; <code>bootstrap</code>/<code>add</code>/<code>link</code> removed)</td></tr><tr><td>Nx (monorepos)</td><td>15.x (<code>@nrwl/*</code>)</td><td><strong>22.x</strong> (<code>nx</code> + <code>@nx/workspace</code>; modern <code>nx.json</code>)</td></tr><tr><td>Cursor skill</td><td>—</td><td><code>pui-cli skills install migrate-to-pui-cli-9 --target all</code></td></tr></tbody></table>
20
+ <hr>
21
+ <h2 class="anchor anchorTargetStickyNavbar_jFbF" id="recommended-rollout">Recommended rollout<a href="#recommended-rollout" class="hash-link" aria-label="Direct link to Recommended rollout" title="Direct link to Recommended rollout" translate="no">​</a></h2>
22
+ <p>Ship in <strong>small PRs</strong> to reduce regression risk:</p>
23
+ <ol>
24
+ <li class=""><strong>Toolchain</strong> — Node 24 + pnpm 11 + CI image updates</li>
25
+ <li class=""><strong>Dependency bump</strong> — <code>@elliemae/pui-cli@9</code> without ESLint config change</li>
26
+ <li class=""><strong>ESLint flat config</strong> — add <code>eslint.config.mjs</code>, delete legacy ESLint files, fix lint</li>
27
+ <li class=""><strong>Stylelint 17</strong> — simplify <code>stylelint.config.cjs</code> (remove <code>stylelint-config-styled-components</code> overrides); optional <code>stylelint.config.mjs</code></li>
28
+ <li class=""><strong>Husky 9</strong> — update <code>prepare</code> script and hook files (if <code>.husky/</code> exists)</li>
29
+ <li class=""><strong>Vitest 4</strong> — only if the repo uses <code>pui-cli vitest</code> (see below)</li>
30
+ <li class=""><strong>semantic-release 25</strong> — migrate <code>release.config.cjs</code> → <code>release.config.mjs</code> (libraries that publish to npm)</li>
31
+ <li class=""><strong>Lerna 9 + Nx 22</strong> — monorepos only: update <code>nx.json</code>, remove <code>@nrwl/*</code> pins, verify <code>pui-cli version</code> / <code>nx run-many</code></li>
32
+ <li class=""><strong>Debt (optional)</strong> — remove temporary rule overrides, adopt strict config</li>
33
+ </ol>
34
+ <p>Each PR should pass: <code>lint</code>, <code>tscheck</code>, <code>test</code>, <code>build</code>.</p>
35
+ <hr>
36
+ <h2 class="anchor anchorTargetStickyNavbar_jFbF" id="step-by-step">Step-by-step<a href="#step-by-step" class="hash-link" aria-label="Direct link to Step-by-step" title="Direct link to Step-by-step" translate="no">​</a></h2>
37
+ <h3 class="anchor anchorTargetStickyNavbar_jFbF" id="1-upgrade-toolchain">1. Upgrade toolchain<a href="#1-upgrade-toolchain" class="hash-link" aria-label="Direct link to 1. Upgrade toolchain" title="Direct link to 1. Upgrade toolchain" translate="no">​</a></h3>
38
+ <div class="language-bash codeBlockContainer_uLrG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yDoo"><pre tabindex="0" class="prism-code language-bash codeBlock_whMN thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_r5mI"><div class="token-line" style="color:#393A34"><span class="token plain"># .node-version</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">24</span><br></div></code></pre></div></div>
39
+ <div class="language-json codeBlockContainer_uLrG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yDoo"><pre tabindex="0" class="prism-code language-json codeBlock_whMN thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_r5mI"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// package.json (root monorepos)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token property" style="color:#36acaa">&quot;packageManager&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;pnpm@11.x.x&quot;</span><br></div></code></pre></div></div>
40
+ <p>Update Jenkins/docker Node images before merging.</p>
41
+ <h3 class="anchor anchorTargetStickyNavbar_jFbF" id="2-upgrade-pui-cli">2. Upgrade pui-cli<a href="#2-upgrade-pui-cli" class="hash-link" aria-label="Direct link to 2. Upgrade pui-cli" title="Direct link to 2. Upgrade pui-cli" translate="no">​</a></h3>
42
+ <div class="language-bash codeBlockContainer_uLrG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yDoo"><pre tabindex="0" class="prism-code language-bash codeBlock_whMN thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_r5mI"><div class="token-line" style="color:#393A34"><span class="token plain">pnpm add -D @elliemae/pui-cli@9</span><br></div></code></pre></div></div>
43
+ <h3 class="anchor anchorTargetStickyNavbar_jFbF" id="3-add-flat-eslint-config">3. Add flat ESLint config<a href="#3-add-flat-eslint-config" class="hash-link" aria-label="Direct link to 3. Add flat ESLint config" title="Direct link to 3. Add flat ESLint config" translate="no">​</a></h3>
44
+ <p><strong>React app or library:</strong></p>
45
+ <div class="language-js codeBlockContainer_uLrG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yDoo"><pre tabindex="0" class="prism-code language-js codeBlock_whMN thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_r5mI"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// eslint.config.mjs</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> eslintFlatConfig </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;@elliemae/pui-cli/eslint&#x27;</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">default</span><span class="token plain"> eslintFlatConfig</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
46
+ <p><strong>Node / TS service:</strong></p>
47
+ <div class="language-js codeBlockContainer_uLrG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yDoo"><pre tabindex="0" class="prism-code language-js codeBlock_whMN thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_r5mI"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// eslint.config.mjs</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> eslintFlatBaseConfig </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;@elliemae/pui-cli/eslint&#x27;</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">default</span><span class="token plain"> eslintFlatBaseConfig</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
48
+ <p>Remove:</p>
49
+ <ul>
50
+ <li class=""><code>.eslintrc.cjs</code></li>
51
+ <li class=""><code>.eslintignore</code></li>
52
+ </ul>
53
+ <h3 class="anchor anchorTargetStickyNavbar_jFbF" id="4-update-stylelint-config">4. Update Stylelint config<a href="#4-update-stylelint-config" class="hash-link" aria-label="Direct link to 4. Update Stylelint config" title="Direct link to 4. Update Stylelint config" translate="no">​</a></h3>
54
+ <p>pui-cli 9 ships <strong>Stylelint 17</strong> with <code>stylelint-config-recommended@18</code> and <code>postcss-styled-syntax</code>. The unmaintained <code>stylelint-config-styled-components</code> package is removed; its rules are inlined in the shared config.</p>
55
+ <p><strong>Minimal (CJS — still supported):</strong></p>
56
+ <div class="language-javascript codeBlockContainer_uLrG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yDoo"><pre tabindex="0" class="prism-code language-javascript codeBlock_whMN thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_r5mI"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// stylelint.config.cjs</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> stylelintConfig </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">require</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">&#x27;@elliemae/pui-cli&#x27;</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">module</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">exports</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> stylelintConfig</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
57
+ <p>If your repo previously filtered out <code>stylelint-config-styled-components</code> from <code>extends</code>, delete that workaround — the base config no longer extends it.</p>
58
+ <p><strong>Recommended (ESM):</strong></p>
59
+ <div class="language-javascript codeBlockContainer_uLrG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yDoo"><pre tabindex="0" class="prism-code language-javascript codeBlock_whMN thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_r5mI"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// stylelint.config.mjs</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> stylelintConfig </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;@elliemae/pui-cli/stylelint&#x27;</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">default</span><span class="token plain"> stylelintConfig</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
60
+ <p><code>pui-cli lint</code> prefers <code>stylelint.config.mjs</code> when present, otherwise falls back to <code>stylelint.config.cjs</code>.</p>
61
+ <p>See <a class="" href="/cli/stylelint-migration">Stylelint migration guide</a> for version and rule changes.</p>
62
+ <h3 class="anchor anchorTargetStickyNavbar_jFbF" id="5-fix-lint">5. Fix lint<a href="#5-fix-lint" class="hash-link" aria-label="Direct link to 5. Fix lint" title="Direct link to 5. Fix lint" translate="no">​</a></h3>
63
+ <div class="language-bash codeBlockContainer_uLrG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yDoo"><pre tabindex="0" class="prism-code language-bash codeBlock_whMN thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_r5mI"><div class="token-line" style="color:#393A34"><span class="token plain">pnpm exec pui-cli lint --fix</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">pnpm exec pui-cli lint</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">pnpm exec pui-cli tscheck --files</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">pnpm test</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">pnpm run build</span><br></div></code></pre></div></div>
64
+ <h3 class="anchor anchorTargetStickyNavbar_jFbF" id="6-install-the-migration-skill-optional">6. Install the migration skill (optional)<a href="#6-install-the-migration-skill-optional" class="hash-link" aria-label="Direct link to 6. Install the migration skill (optional)" title="Direct link to 6. Install the migration skill (optional)" translate="no">​</a></h3>
65
+ <p>Gives Cursor, Claude Code, and GitHub Copilot agents a step-by-step playbook in the repo:</p>
66
+ <div class="language-bash codeBlockContainer_uLrG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yDoo"><pre tabindex="0" class="prism-code language-bash codeBlock_whMN thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_r5mI"><div class="token-line" style="color:#393A34"><span class="token plain">pnpm exec pui-cli skills list</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">pnpm exec pui-cli skills install migrate-to-pui-cli-9 --target all</span><br></div></code></pre></div></div>
67
+ <p>Skills are copied to <code>.cursor/skills/</code>, <code>.claude/skills/</code>, and <code>.github/skills/</code> (commit them if you want the whole team to share the same agent guidance).</p>
68
+ <hr>
69
+ <h2 class="anchor anchorTargetStickyNavbar_jFbF" id="temporary-overrides">Temporary overrides<a href="#temporary-overrides" class="hash-link" aria-label="Direct link to Temporary overrides" title="Direct link to Temporary overrides" translate="no">​</a></h2>
70
+ <p>Large repos may have pre-existing <code>any</code> usage. Legacy ESLint reported these as <strong>warnings</strong>; flat config defaults them to <strong>error</strong>.</p>
71
+ <p>Short-term override (remove in a follow-up):</p>
72
+ <div class="language-js codeBlockContainer_uLrG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yDoo"><pre tabindex="0" class="prism-code language-js codeBlock_whMN thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_r5mI"><div class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> eslintFlatConfig </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;@elliemae/pui-cli/eslint&#x27;</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">default</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token spread operator" style="color:#393A34">...</span><span class="token plain">eslintFlatConfig</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">rules</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token string-property property" style="color:#36acaa">&#x27;@typescript-eslint/no-explicit-any&#x27;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;warn&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
73
+ <p>Libraries with heavy decorator/micro-frontend typings may need additional one-off overrides — keep them minimal and tracked.</p>
74
+ <hr>
75
+ <h2 class="anchor anchorTargetStickyNavbar_jFbF" id="strict-config-after-cleanup">Strict config (after cleanup)<a href="#strict-config-after-cleanup" class="hash-link" aria-label="Direct link to Strict config (after cleanup)" title="Direct link to Strict config (after cleanup)" translate="no">​</a></h2>
76
+ <div class="language-js codeBlockContainer_uLrG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yDoo"><pre tabindex="0" class="prism-code language-js codeBlock_whMN thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_r5mI"><div class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports punctuation" style="color:#393A34">{</span><span class="token imports"> eslintFlatConfigStrict </span><span class="token imports punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;@elliemae/pui-cli/eslint&#x27;</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">default</span><span class="token plain"> eslintFlatConfigStrict</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
77
+ <p>Strict mode elevates <code>no-unsafe-*</code> and <code>exhaustive-deps</code> to error.</p>
78
+ <hr>
79
+ <h2 class="anchor anchorTargetStickyNavbar_jFbF" id="husky-9">Husky 9<a href="#husky-9" class="hash-link" aria-label="Direct link to Husky 9" title="Direct link to Husky 9" translate="no">​</a></h2>
80
+ <p>If your repo uses Husky 8 hooks from pui-cli boilerplate:</p>
81
+ <ol>
82
+ <li class="">Upgrade: <code>pnpm add -D husky@9</code></li>
83
+ <li class="">Update <code>package.json</code>:<!-- -->
84
+ <div class="language-diff codeBlockContainer_uLrG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yDoo"><pre tabindex="0" class="prism-code language-diff codeBlock_whMN thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_r5mI"><div class="token-line" style="color:#393A34"><span class="token plain">- &quot;prepare&quot;: &quot;[ -n \&quot;$CI\&quot; ] || husky install&quot;</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">+ &quot;prepare&quot;: &quot;[ -n \&quot;$CI\&quot; ] || husky&quot;</span><br></div></code></pre></div></div>
85
+ </li>
86
+ <li class="">Remove the shebang and <code>husky.sh</code> source from each hook in <code>.husky/</code>:<!-- -->
87
+ <div class="language-diff codeBlockContainer_uLrG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yDoo"><pre tabindex="0" class="prism-code language-diff codeBlock_whMN thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_r5mI"><div class="token-line" style="color:#393A34"><span class="token plain">- #!/bin/sh</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">- . &quot;$(dirname &quot;$0&quot;)/_/husky.sh&quot;</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">pnpm -s dlx lint-staged</span><br></div></code></pre></div></div>
88
+ </li>
89
+ <li class="">Delete <code>.husky/.gitignore</code> if present (v9 regenerates <code>.husky/_</code> on install).</li>
90
+ <li class="">Remove <code>husky-init</code> from devDependencies (use <code>pnpm exec husky init</code> for new projects).</li>
91
+ <li class="">Run <code>pnpm prepare</code> and verify with a test commit.</li>
92
+ </ol>
93
+ <p><strong>Environment variable changes:</strong> <code>HUSKY_SKIP_HOOKS</code> / <code>HUSKY_SKIP_INSTALL</code> → <code>HUSKY=0</code>; <code>HUSKY_GIT_PARAMS</code> → use <code>$1</code> in hook scripts.</p>
94
+ <hr>
95
+ <h2 class="anchor anchorTargetStickyNavbar_jFbF" id="vitest-4">Vitest 4<a href="#vitest-4" class="hash-link" aria-label="Direct link to Vitest 4" title="Direct link to Vitest 4" translate="no">​</a></h2>
96
+ <p>Skip this section if the repo uses Jest (<code>pui-cli test</code>) only. <strong>pui-cli 9 still builds apps and libraries with Webpack</strong>; Vite is used by Vitest (and optional <code>pui-cli buildCDN</code>), not for production bundling.</p>
97
+ <p>After bumping <code>@elliemae/pui-cli@9</code>, align local test dependencies with the versions pui-cli ships:</p>
98
+ <div class="language-bash codeBlockContainer_uLrG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yDoo"><pre tabindex="0" class="prism-code language-bash codeBlock_whMN thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_r5mI"><div class="token-line" style="color:#393A34"><span class="token plain">pnpm add -D vitest@4 @vitest/coverage-v8@4 vite@8 @vitejs/plugin-react@6 vite-tsconfig-paths@6</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">pnpm remove @vitest/coverage-c8 @types/uuid # if present; uuid 14+ includes types</span><br></div></code></pre></div></div>
99
+ <p><strong>Extend the shared config</strong> (recommended):</p>
100
+ <div class="language-typescript codeBlockContainer_uLrG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yDoo"><pre tabindex="0" class="prism-code language-typescript codeBlock_whMN thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_r5mI"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// vitest.config.ts</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> defineConfig</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> mergeConfig </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;vitest/config&#x27;</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">import</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> vitestConfig </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;@elliemae/pui-cli/vitest&#x27;</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">default</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">mergeConfig</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">vitestConfig</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">defineConfig</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> test</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// repo-specific overrides</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
101
+ <p><strong>If you spread <code>vitestConfig</code> manually</strong>, update any Vitest 1.x options:</p>
102
+ <table><thead><tr><th>pui-cli 8 / Vitest 1</th><th>pui-cli 9 / Vitest 4</th></tr></thead><tbody><tr><td><code>test.deps.optimizer.web</code></td><td><code>test.deps.optimizer.client</code></td></tr><tr><td><code>@vitest/coverage-c8</code></td><td><code>@vitest/coverage-v8</code> (coverage provider <code>v8</code>)</td></tr><tr><td><code>import { PluginOption } from &#x27;vite&#x27;</code></td><td><code>import type { PluginOption } from &#x27;vite&#x27;</code> (Vite 8)</td></tr></tbody></table>
103
+ <p><strong>TypeScript:</strong> exported <code>@elliemae/pui-cli/app.tsconfig.json</code> and <code>library.tsconfig.json</code> use <code>moduleResolution: &quot;bundler&quot;</code>. If your <code>tsconfig.json</code> extends them, reinstall pui-cli and re-run <code>tscheck</code>. Custom tsconfigs that import <code>vitest/config</code> or <code>vite</code> may need the same setting.</p>
104
+ <p><strong>Vitest config import:</strong> use <code>@elliemae/pui-cli/vitest</code> (not the package root). pui-cli 9 publishes <code>types</code> on each <code>package.json</code> <code>exports</code> entry so <code>tsc</code> resolves declarations under <code>moduleResolution: &quot;bundler&quot;</code> — no <code>tsconfig</code> <code>paths</code> workaround.</p>
105
+ <div class="language-bash codeBlockContainer_uLrG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yDoo"><pre tabindex="0" class="prism-code language-bash codeBlock_whMN thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_r5mI"><div class="token-line" style="color:#393A34"><span class="token plain">pnpm exec pui-cli vitest --passWithNoTests</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">pnpm exec pui-cli tscheck --files</span><br></div></code></pre></div></div>
106
+ <hr>
107
+ <h2 class="anchor anchorTargetStickyNavbar_jFbF" id="semantic-release-25">semantic-release 25<a href="#semantic-release-25" class="hash-link" aria-label="Direct link to semantic-release 25" title="Direct link to semantic-release 25" translate="no">​</a></h2>
108
+ <p>pui-cli 9 ships <strong>semantic-release 25</strong> with an ESM shareable config at <code>@elliemae/pui-cli/releaseConfig</code>. semantic-release 22+ loads ESM <code>extends</code> targets via dynamic <code>import()</code> — the old <code>release.config.cjs</code> + <code>require()</code> path no longer works for the shared config.</p>
109
+ <p><strong>Libraries that run <code>semantic-release</code> in CI</strong> should migrate in the same PR as the pui-cli 9 bump (or immediately after).</p>
110
+ <h3 class="anchor anchorTargetStickyNavbar_jFbF" id="1-upgrade-semantic-release-if-pinned-locally">1. Upgrade semantic-release (if pinned locally)<a href="#1-upgrade-semantic-release-if-pinned-locally" class="hash-link" aria-label="Direct link to 1. Upgrade semantic-release (if pinned locally)" title="Direct link to 1. Upgrade semantic-release (if pinned locally)" translate="no">​</a></h3>
111
+ <p>Most PUI libraries inherit semantic-release from <code>@elliemae/pui-cli</code>. If your <code>package.json</code> pins <code>semantic-release</code> or <code>@semantic-release/*</code> plugins directly, align with pui-cli 9:</p>
112
+ <div class="language-bash codeBlockContainer_uLrG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yDoo"><pre tabindex="0" class="prism-code language-bash codeBlock_whMN thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_r5mI"><div class="token-line" style="color:#393A34"><span class="token plain">pnpm add -D semantic-release@25 @semantic-release/changelog@6 @semantic-release/exec@7 @semantic-release/git@10</span><br></div></code></pre></div></div>
113
+ <p>Remove explicit pins if the repo only uses <code>pnpm release</code> and relies on pui-cli&#x27;s dependency tree.</p>
114
+ <h3 class="anchor anchorTargetStickyNavbar_jFbF" id="2-migrate-release-config-to-esm">2. Migrate release config to ESM<a href="#2-migrate-release-config-to-esm" class="hash-link" aria-label="Direct link to 2. Migrate release config to ESM" title="Direct link to 2. Migrate release config to ESM" translate="no">​</a></h3>
115
+ <p><strong>Before:</strong></p>
116
+ <div class="language-javascript codeBlockContainer_uLrG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yDoo"><pre tabindex="0" class="prism-code language-javascript codeBlock_whMN thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_r5mI"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// release.config.cjs</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">module</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">exports</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">extends</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;@elliemae/pui-cli/releaseConfig&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
117
+ <p><strong>After:</strong></p>
118
+ <div class="language-javascript codeBlockContainer_uLrG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yDoo"><pre tabindex="0" class="prism-code language-javascript codeBlock_whMN thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_r5mI"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// release.config.mjs</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token doc-comment comment" style="color:#999988;font-style:italic">/** </span><span class="token doc-comment comment keyword" style="color:#00009f;font-style:italic">@type</span><span class="token doc-comment comment" style="color:#999988;font-style:italic"> </span><span class="token doc-comment comment class-name punctuation" style="color:#393A34;font-style:italic">{</span><span class="token doc-comment comment class-name keyword" style="color:#00009f;font-style:italic">import</span><span class="token doc-comment comment class-name punctuation" style="color:#393A34;font-style:italic">(</span><span class="token doc-comment comment class-name string" style="color:#e3116c;font-style:italic">&#x27;semantic-release&#x27;</span><span class="token doc-comment comment class-name punctuation" style="color:#393A34;font-style:italic">)</span><span class="token doc-comment comment class-name punctuation" style="color:#393A34;font-style:italic">.</span><span class="token doc-comment comment class-name" style="color:#999988;font-style:italic">GlobalConfig</span><span class="token doc-comment comment class-name punctuation" style="color:#393A34;font-style:italic">}</span><span class="token doc-comment comment" style="color:#999988;font-style:italic"> */</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">default</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">extends</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;@elliemae/pui-cli/releaseConfig&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
119
+ <p>Delete <code>release.config.cjs</code> after adding <code>release.config.mjs</code>.</p>
120
+ <h3 class="anchor anchorTargetStickyNavbar_jFbF" id="3-custom-plugins-or-overrides">3. Custom plugins or overrides<a href="#3-custom-plugins-or-overrides" class="hash-link" aria-label="Direct link to 3. Custom plugins or overrides" title="Direct link to 3. Custom plugins or overrides" translate="no">​</a></h3>
121
+ <p>Keep repo-specific plugins as relative paths from the config file. ESM plugins use <code>export default</code>:</p>
122
+ <div class="language-javascript codeBlockContainer_uLrG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yDoo"><pre tabindex="0" class="prism-code language-javascript codeBlock_whMN thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_r5mI"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic">// release.config.mjs</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">default</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token keyword" style="color:#00009f">extends</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;@elliemae/pui-cli/releaseConfig&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token literal-property property" style="color:#36acaa">plugins</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;@semantic-release/commit-analyzer&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token comment" style="color:#999988;font-style:italic">// ...other plugins from the shared config if replacing extends entirely</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token string" style="color:#e3116c">&#x27;./my-custom-plugin.mjs&#x27;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">;</span><br></div></code></pre></div></div>
123
+ <p>CJS plugins (<code>.cjs</code>) still work when referenced by path.</p>
124
+ <h3 class="anchor anchorTargetStickyNavbar_jFbF" id="4-verify-locally">4. Verify locally<a href="#4-verify-locally" class="hash-link" aria-label="Direct link to 4. Verify locally" title="Direct link to 4. Verify locally" translate="no">​</a></h3>
125
+ <div class="language-bash codeBlockContainer_uLrG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yDoo"><pre tabindex="0" class="prism-code language-bash codeBlock_whMN thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_r5mI"><div class="token-line" style="color:#393A34"><span class="token plain">pnpm exec semantic-release --dry-run</span><br></div></code></pre></div></div>
126
+ <h3 class="anchor anchorTargetStickyNavbar_jFbF" id="agent-assisted-migration">Agent-assisted migration<a href="#agent-assisted-migration" class="hash-link" aria-label="Direct link to Agent-assisted migration" title="Direct link to Agent-assisted migration" translate="no">​</a></h3>
127
+ <p>Install the pui-cli 9 skill so Cursor / Copilot agents follow the full config migration playbook (ESLint, Stylelint, Vitest, Husky, and semantic-release):</p>
128
+ <div class="language-bash codeBlockContainer_uLrG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yDoo"><pre tabindex="0" class="prism-code language-bash codeBlock_whMN thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_r5mI"><div class="token-line" style="color:#393A34"><span class="token plain">pnpm exec pui-cli skills install migrate-to-pui-cli-9 --target all</span><br></div></code></pre></div></div>
129
+ <p>Then ask the agent to migrate configuration files for pui-cli 9.</p>
130
+ <hr>
131
+ <h2 class="anchor anchorTargetStickyNavbar_jFbF" id="lerna-9-and-nx-22-monorepos-only">Lerna 9 and Nx 22 (monorepos only)<a href="#lerna-9-and-nx-22-monorepos-only" class="hash-link" aria-label="Direct link to Lerna 9 and Nx 22 (monorepos only)" title="Direct link to Lerna 9 and Nx 22 (monorepos only)" translate="no">​</a></h2>
132
+ <p>Skip this section for single-package apps and libraries. PUI monorepos (for example <code>pui-microfe</code>, <code>pui-websocket</code>, <code>pui-mono-repo-boilerplate</code>) use <strong>Nx</strong> for task orchestration and <strong>Lerna</strong> (via <code>pui-cli version</code>) for independent package versioning.</p>
133
+ <p>pui-cli 9 ships <strong>lerna 9</strong> and <strong>nx 22</strong> (<code>nx</code> + <code>@nx/workspace</code>). After bumping <code>@elliemae/pui-cli@9</code>, reinstall so the workspace picks up the new CLIs:</p>
134
+ <div class="language-bash codeBlockContainer_uLrG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yDoo"><pre tabindex="0" class="prism-code language-bash codeBlock_whMN thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_r5mI"><div class="token-line" style="color:#393A34"><span class="token plain">pnpm install</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">pnpm exec nx --version # expect 22.x</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">pnpm exec lerna --version # expect 9.x</span><br></div></code></pre></div></div>
135
+ <h3 class="anchor anchorTargetStickyNavbar_jFbF" id="1-remove-legacy-nx-package-pins">1. Remove legacy Nx package pins<a href="#1-remove-legacy-nx-package-pins" class="hash-link" aria-label="Direct link to 1. Remove legacy Nx package pins" title="Direct link to 1. Remove legacy Nx package pins" translate="no">​</a></h3>
136
+ <p>Most monorepos inherit Nx and Lerna from pui-cli and do <strong>not</strong> pin them locally. If your root <code>package.json</code> still lists <code>@nrwl/cli</code>, <code>@nrwl/tao</code>, or <code>@nrwl/workspace</code>, remove those entries and any direct <code>lerna</code> / <code>nx</code> pins — pui-cli 9 provides them.</p>
137
+ <div class="language-bash codeBlockContainer_uLrG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yDoo"><pre tabindex="0" class="prism-code language-bash codeBlock_whMN thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_r5mI"><div class="token-line" style="color:#393A34"><span class="token plain">pnpm remove @nrwl/cli @nrwl/tao @nrwl/workspace lerna nx # only if explicitly pinned</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">pnpm install</span><br></div></code></pre></div></div>
138
+ <h3 class="anchor anchorTargetStickyNavbar_jFbF" id="2-migrate-nxjson">2. Migrate <code>nx.json</code><a href="#2-migrate-nxjson" class="hash-link" aria-label="Direct link to 2-migrate-nxjson" title="Direct link to 2-migrate-nxjson" translate="no">​</a></h3>
139
+ <p>Nx 15 configs use deprecated <code>@nrwl/workspace</code> presets, <code>tasksRunnerOptions</code>, and <code>targetDependencies</code>. Nx 22 uses <code>nx/presets/npm.json</code> (or <code>@nx/workspace/presets/npm.json</code>) and <code>targetDefaults.dependsOn</code>.</p>
140
+ <p><strong>Before (pui-cli 8 / Nx 15):</strong></p>
141
+ <div class="language-json codeBlockContainer_uLrG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yDoo"><pre tabindex="0" class="prism-code language-json codeBlock_whMN thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_r5mI"><div class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;extends&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;@nrwl/workspace/presets/npm.json&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;tasksRunnerOptions&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;default&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;runner&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;@nrwl/workspace/tasks-runners/default&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;options&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;cacheableOperations&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">&quot;build&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;test&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;lint&quot;</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;targetDependencies&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;build&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;target&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;build&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;projects&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;dependencies&quot;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;test&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;target&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;build&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;projects&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;dependencies&quot;</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
142
+ <p><strong>After (pui-cli 9 / Nx 22):</strong></p>
143
+ <div class="language-json codeBlockContainer_uLrG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yDoo"><pre tabindex="0" class="prism-code language-json codeBlock_whMN thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_r5mI"><div class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;$schema&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;./node_modules/nx/schemas/nx-schema.json&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;extends&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">&quot;nx/presets/npm.json&quot;</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;targetDefaults&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;build&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;dependsOn&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">&quot;^build&quot;</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;cache&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;test&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;dependsOn&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">&quot;^build&quot;</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;cache&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;dts&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;dependsOn&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">&quot;^dts&quot;</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;cache&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;lint&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;dependsOn&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">&quot;^dts&quot;</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;cache&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;dev&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;dependsOn&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">&quot;^dev&quot;</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;cache&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;storybook:start&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;dependsOn&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">&quot;^build&quot;</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;cache&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;storybook:build&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;dependsOn&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">&quot;^build&quot;</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;cache&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;prepare&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;dependsOn&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">&quot;^prepare&quot;</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;cache&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;package&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;dependsOn&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">[</span><span class="token string" style="color:#e3116c">&quot;^package&quot;</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;cache&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;postinstall&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;cache&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;compile:scss&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token property" style="color:#36acaa">&quot;cache&quot;</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token boolean" style="color:#36acaa">true</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></div></code></pre></div></div>
144
+ <p>Map each legacy <code>targetDependencies</code> entry to <code>&quot;dependsOn&quot;: [&quot;^&lt;target&gt;&quot;]</code> on the same target name. Targets that were only listed under <code>cacheableOperations</code> get <code>&quot;cache&quot;: true</code> in <code>targetDefaults</code>.</p>
145
+ <p><strong>Automated migration (optional):</strong> from the monorepo root after installing pui-cli 9:</p>
146
+ <div class="language-bash codeBlockContainer_uLrG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yDoo"><pre tabindex="0" class="prism-code language-bash codeBlock_whMN thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_r5mI"><div class="token-line" style="color:#393A34"><span class="token plain">pnpm exec nx migrate latest</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">pnpm exec nx migrate --run-migrations</span><br></div></code></pre></div></div>
147
+ <p>Review the generated migrations; they may simplify <code>nx.json</code> further. Commit the result with your pui-cli 9 bump.</p>
148
+ <h3 class="anchor anchorTargetStickyNavbar_jFbF" id="3-lerna-9-notes">3. Lerna 9 notes<a href="#3-lerna-9-notes" class="hash-link" aria-label="Direct link to 3. Lerna 9 notes" title="Direct link to 3. Lerna 9 notes" translate="no">​</a></h3>
149
+ <ul>
150
+ <li class=""><strong>Removed commands:</strong> <code>lerna bootstrap</code>, <code>lerna add</code>, and <code>lerna link</code> are gone. Use pnpm workspaces (<code>pnpm add &lt;pkg&gt; --filter &lt;lib&gt;</code>) for linking and dependency management.</li>
151
+ <li class=""><strong><code>lerna.json</code>:</strong> existing PUI repos can keep <code>npmClient: &quot;pnpm&quot;</code> and <code>useWorkspaces: true</code>. No change required unless you relied on removed commands.</li>
152
+ <li class=""><strong><code>pui-cli version</code>:</strong> unchanged — still wraps <code>lerna version --conventional-commits --exact --create-release github --force-publish --yes</code>.</li>
153
+ <li class=""><strong>Dry-run override:</strong> <code>semantic-version:dryrun:override</code> scripts that call <code>lerna version</code> directly continue to work with lerna 9.</li>
154
+ </ul>
155
+ <h3 class="anchor anchorTargetStickyNavbar_jFbF" id="4-verify-monorepo-workflows">4. Verify monorepo workflows<a href="#4-verify-monorepo-workflows" class="hash-link" aria-label="Direct link to 4. Verify monorepo workflows" title="Direct link to 4. Verify monorepo workflows" translate="no">​</a></h3>
156
+ <div class="language-bash codeBlockContainer_uLrG theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_yDoo"><pre tabindex="0" class="prism-code language-bash codeBlock_whMN thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_r5mI"><div class="token-line" style="color:#393A34"><span class="token plain">pnpm exec nx run-many --target=build --all --parallel</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">pnpm exec nx affected --target=test --uncommitted</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">pnpm exec pui-cli lint</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">pnpm exec pui-cli version --help # confirms pui-cli can invoke lerna 9</span><br></div></code></pre></div></div>
157
+ <hr>
158
+ <h2 class="anchor anchorTargetStickyNavbar_jFbF" id="ci-checklist">CI checklist<a href="#ci-checklist" class="hash-link" aria-label="Direct link to CI checklist" title="Direct link to CI checklist" translate="no">​</a></h2>
159
+ <ul class="contains-task-list containsTaskList_nAax">
160
+ <li class="task-list-item"><input type="checkbox" disabled=""> <!-- -->Node 24 in pipeline</li>
161
+ <li class="task-list-item"><input type="checkbox" disabled=""> <!-- -->pnpm 11 in pipeline</li>
162
+ <li class="task-list-item"><input type="checkbox" disabled=""> <code>pui-cli lint</code> (0 errors)</li>
163
+ <li class="task-list-item"><input type="checkbox" disabled=""> <code>pui-cli tscheck --files</code></li>
164
+ <li class="task-list-item"><input type="checkbox" disabled=""> <!-- -->Unit tests</li>
165
+ <li class="task-list-item"><input type="checkbox" disabled=""> <!-- -->Production build</li>
166
+ <li class="task-list-item"><input type="checkbox" disabled=""> <!-- -->lint-staged / husky hooks pass locally</li>
167
+ <li class="task-list-item"><input type="checkbox" disabled=""> <code>semantic-release --dry-run</code> (libraries that publish to npm)</li>
168
+ <li class="task-list-item"><input type="checkbox" disabled=""> <code>nx run-many --target=build --all</code> (monorepos)</li>
169
+ <li class="task-list-item"><input type="checkbox" disabled=""> <code>pui-cli version --help</code> or dry-run versioning (monorepos that publish packages)</li>
170
+ </ul>
171
+ <hr>
172
+ <h2 class="anchor anchorTargetStickyNavbar_jFbF" id="getting-help">Getting help<a href="#getting-help" class="hash-link" aria-label="Direct link to Getting help" title="Direct link to Getting help" translate="no">​</a></h2>
173
+ <ul>
174
+ <li class=""><strong>Rule changes:</strong> <a class="" href="/cli/eslint-rules-migration">eslint-rules-migration.md</a></li>
175
+ <li class=""><strong>Stylelint changes:</strong> <a class="" href="/cli/stylelint-migration">stylelint-migration.md</a></li>
176
+ <li class=""><strong>Commands:</strong> <a class="" href="/cli/usage-guide">usage guide</a></li>
177
+ <li class=""><strong>Platform team:</strong> <code>#pui-platform</code> or your team&#x27;s platform-ui channel</li>
178
+ </ul></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col noPrint_sn50"><a href="https://git.elliemae.io/platform-ui/pui-cli.git/docs/pui-cli-9-migration.md" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_sbI6" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div><div class="col lastUpdated_n07i"></div></div></footer></article><nav class="docusaurus-mt-lg pagination-nav" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/cli/"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">PUI CLI Documentation</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/cli/ssl-certificate-setup"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">Trust SSL Certificate Guide</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_gGRX thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#at-a-glance" class="table-of-contents__link toc-highlight">At a glance</a></li><li><a href="#recommended-rollout" class="table-of-contents__link toc-highlight">Recommended rollout</a></li><li><a href="#step-by-step" class="table-of-contents__link toc-highlight">Step-by-step</a><ul><li><a href="#1-upgrade-toolchain" class="table-of-contents__link toc-highlight">1. Upgrade toolchain</a></li><li><a href="#2-upgrade-pui-cli" class="table-of-contents__link toc-highlight">2. Upgrade pui-cli</a></li><li><a href="#3-add-flat-eslint-config" class="table-of-contents__link toc-highlight">3. Add flat ESLint config</a></li><li><a href="#4-update-stylelint-config" class="table-of-contents__link toc-highlight">4. Update Stylelint config</a></li><li><a href="#5-fix-lint" class="table-of-contents__link toc-highlight">5. Fix lint</a></li><li><a href="#6-install-the-migration-skill-optional" class="table-of-contents__link toc-highlight">6. Install the migration skill (optional)</a></li></ul></li><li><a href="#temporary-overrides" class="table-of-contents__link toc-highlight">Temporary overrides</a></li><li><a href="#strict-config-after-cleanup" class="table-of-contents__link toc-highlight">Strict config (after cleanup)</a></li><li><a href="#husky-9" class="table-of-contents__link toc-highlight">Husky 9</a></li><li><a href="#vitest-4" class="table-of-contents__link toc-highlight">Vitest 4</a></li><li><a href="#semantic-release-25" class="table-of-contents__link toc-highlight">semantic-release 25</a><ul><li><a href="#1-upgrade-semantic-release-if-pinned-locally" class="table-of-contents__link toc-highlight">1. Upgrade semantic-release (if pinned locally)</a></li><li><a href="#2-migrate-release-config-to-esm" class="table-of-contents__link toc-highlight">2. Migrate release config to ESM</a></li><li><a href="#3-custom-plugins-or-overrides" class="table-of-contents__link toc-highlight">3. Custom plugins or overrides</a></li><li><a href="#4-verify-locally" class="table-of-contents__link toc-highlight">4. Verify locally</a></li><li><a href="#agent-assisted-migration" class="table-of-contents__link toc-highlight">Agent-assisted migration</a></li></ul></li><li><a href="#lerna-9-and-nx-22-monorepos-only" class="table-of-contents__link toc-highlight">Lerna 9 and Nx 22 (monorepos only)</a><ul><li><a href="#1-remove-legacy-nx-package-pins" class="table-of-contents__link toc-highlight">1. Remove legacy Nx package pins</a></li><li><a href="#2-migrate-nxjson" class="table-of-contents__link toc-highlight">2. Migrate <code>nx.json</code></a></li><li><a href="#3-lerna-9-notes" class="table-of-contents__link toc-highlight">3. Lerna 9 notes</a></li><li><a href="#4-verify-monorepo-workflows" class="table-of-contents__link toc-highlight">4. Verify monorepo workflows</a></li></ul></li><li><a href="#ci-checklist" class="table-of-contents__link toc-highlight">CI checklist</a></li><li><a href="#getting-help" class="table-of-contents__link toc-highlight">Getting help</a></li></ul></div></div></div></div></main></div></div></div><footer class="theme-layout-footer footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/cli/">Getting Started</a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://icemortgagetechnology.slack.com/archives/C01M49EGP6Z" target="_blank" rel="noopener noreferrer" class="footer__link-item">Slack<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink__EWc"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://git.elliemae.io/platform-ui/pui-cli.git" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink__EWc"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2026 ICE.</div></div></div></footer></div>
179
+ </body>
180
+ </html>
@@ -0,0 +1 @@
1
+ # place any static assets inside this folder
@@ -0,0 +1 @@
1
+ <?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"><url><loc>https://pui.ice.com/cli/api/</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://pui.ice.com/cli/api/functions/loadRoutes</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://pui.ice.com/cli/api/type-aliases/LIB_NAME</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://pui.ice.com/cli/api/variables/babelConfig</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://pui.ice.com/cli/api/variables/commitlintConfig</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://pui.ice.com/cli/api/variables/eslintBaseConfig</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://pui.ice.com/cli/api/variables/eslintConfig</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://pui.ice.com/cli/api/variables/eslintFlatBaseConfig</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://pui.ice.com/cli/api/variables/eslintFlatBaseConfigStrict</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://pui.ice.com/cli/api/variables/eslintFlatConfig</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://pui.ice.com/cli/api/variables/eslintFlatConfigStrict</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://pui.ice.com/cli/api/variables/jestConfig</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://pui.ice.com/cli/api/variables/jestNodeConfig</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://pui.ice.com/cli/api/variables/lintStagedConfig</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://pui.ice.com/cli/api/variables/prettierConfig</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://pui.ice.com/cli/api/variables/stylelintConfig</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://pui.ice.com/cli/api/variables/vitestConfig</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://pui.ice.com/cli/eslint-rules-migration</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://pui.ice.com/cli/pui-cli-9-migration</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://pui.ice.com/cli/ssl-certificate-setup</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://pui.ice.com/cli/stylelint-migration</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://pui.ice.com/cli/usage-guide</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://pui.ice.com/cli/</loc><changefreq>weekly</changefreq><priority>0.5</priority></url></urlset>