@elliemae/pui-cli 8.62.2 → 9.0.0-alpha.10

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 (290) 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.c1821d28.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.00e13c37.js +2 -0
  106. package/build/docs/assets/js/main.00e13c37.js.LICENSE.txt +51 -0
  107. package/build/docs/assets/js/runtime~main.cb214d1a.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 +150 -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 +271 -0
  157. package/dist/cjs/testing/jest.config.cjs +5 -9
  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/helpers.js +2 -6
  164. package/dist/cjs/webpack/prop-types-shim.js +0 -1
  165. package/dist/cjs/webpack/webpack.dev.babel.js +1 -23
  166. package/dist/cjs/webpack/webpack.lib.base.babel.js +0 -8
  167. package/dist/esm/cli.js +3 -13
  168. package/dist/esm/commands/build.js +1 -2
  169. package/dist/esm/commands/buildcdn.js +1 -2
  170. package/dist/esm/commands/codemod.js +1 -2
  171. package/dist/esm/commands/gendoc.js +1 -2
  172. package/dist/esm/commands/lint.js +11 -9
  173. package/dist/esm/commands/pack.js +1 -2
  174. package/dist/esm/commands/skills.js +175 -0
  175. package/dist/esm/commands/start.js +1 -2
  176. package/dist/esm/commands/storybook.js +1 -2
  177. package/dist/esm/commands/test.js +1 -3
  178. package/dist/esm/commands/tscheck.js +1 -2
  179. package/dist/esm/commands/utils.js +17 -13
  180. package/dist/esm/commands/version.js +1 -2
  181. package/dist/esm/commands/vitest.js +1 -3
  182. package/dist/esm/index.cjs +13 -1
  183. package/dist/esm/index.js +13 -1
  184. package/dist/esm/lint-config/eslint/common.cjs +1 -1
  185. package/dist/esm/lint-config/eslint/flat/common.mjs +169 -0
  186. package/dist/esm/lint-config/eslint/flat/compat.mjs +27 -0
  187. package/dist/esm/lint-config/eslint/flat/index.mjs +21 -0
  188. package/dist/esm/lint-config/eslint/flat/non-react-export.mjs +10 -0
  189. package/dist/esm/lint-config/eslint/flat/non-react.mjs +6 -0
  190. package/dist/esm/lint-config/eslint/flat/presets.mjs +96 -0
  191. package/dist/esm/lint-config/eslint/flat/react-export.mjs +7 -0
  192. package/dist/esm/lint-config/eslint/flat/react.mjs +59 -0
  193. package/dist/esm/lint-config/eslint/flat/rules.mjs +185 -0
  194. package/dist/esm/lint-config/eslint/typescript/non-react.cjs +1 -1
  195. package/dist/esm/lint-config/eslint/typescript/react.cjs +1 -1
  196. package/dist/esm/lint-config/stylelint/config.mjs +27 -0
  197. package/dist/esm/lint-config/stylelint/export.mjs +1 -0
  198. package/dist/esm/lint-config/stylelint.config.cjs +3 -19
  199. package/dist/esm/monorepo/utils.cjs +16 -8
  200. package/dist/esm/monorepo/utils.js +5 -8
  201. package/dist/esm/{release.config.cjs → release.config.mjs} +3 -2
  202. package/dist/esm/{semantic-release-plugin.cjs → semantic-release-plugin.mjs} +3 -3
  203. package/dist/esm/skills/migrate-to-pui-cli-9/SKILL.md +271 -0
  204. package/dist/esm/testing/jest.config.cjs +5 -9
  205. package/dist/esm/testing/resolver.cjs +1 -1
  206. package/dist/esm/testing/setup-react-env.js +1 -1
  207. package/dist/esm/testing/vitest.config.js +2 -1
  208. package/dist/esm/transpile/esbuild.js +1 -1
  209. package/dist/esm/webpack/csp-plugin.js +2 -4
  210. package/dist/esm/webpack/helpers.js +2 -6
  211. package/dist/esm/webpack/prop-types-shim.js +0 -1
  212. package/dist/esm/webpack/webpack.dev.babel.js +2 -26
  213. package/dist/esm/webpack/webpack.lib.base.babel.js +0 -8
  214. package/dist/types/docusaurus.config.d.ts +3 -2
  215. package/dist/types/lib/commands/build.d.ts +1 -1
  216. package/dist/types/lib/commands/buildcdn.d.ts +1 -1
  217. package/dist/types/lib/commands/codemod.d.ts +1 -1
  218. package/dist/types/lib/commands/gendoc.d.ts +1 -1
  219. package/dist/types/lib/commands/lint.d.ts +1 -1
  220. package/dist/types/lib/commands/pack.d.ts +1 -1
  221. package/dist/types/lib/commands/skills.d.ts +11 -0
  222. package/dist/types/lib/commands/start.d.ts +1 -1
  223. package/dist/types/lib/commands/storybook.d.ts +1 -1
  224. package/dist/types/lib/commands/test.d.ts +1 -1
  225. package/dist/types/lib/commands/tscheck.d.ts +1 -1
  226. package/dist/types/lib/commands/utils.d.ts +43 -2
  227. package/dist/types/lib/commands/version.d.ts +1 -1
  228. package/dist/types/lib/commands/vitest.d.ts +1 -1
  229. package/dist/types/lib/index.d.cts +6 -2
  230. package/dist/types/lib/index.d.ts +5 -1
  231. package/dist/types/lib/lint-config/eslint/flat/common.d.mts +6 -0
  232. package/dist/types/lib/lint-config/eslint/flat/compat.d.mts +9 -0
  233. package/dist/types/lib/lint-config/eslint/flat/index.d.mts +6 -0
  234. package/dist/types/lib/lint-config/eslint/flat/non-react-export.d.mts +4 -0
  235. package/dist/types/lib/lint-config/eslint/flat/non-react.d.mts +3 -0
  236. package/dist/types/lib/lint-config/eslint/flat/presets.d.mts +34 -0
  237. package/dist/types/lib/lint-config/eslint/flat/react-export.d.mts +4 -0
  238. package/dist/types/lib/lint-config/eslint/flat/react.d.mts +4 -0
  239. package/dist/types/lib/lint-config/eslint/flat/rules.d.mts +361 -0
  240. package/dist/types/lib/lint-config/stylelint/config.d.mts +3 -0
  241. package/dist/types/lib/lint-config/stylelint/export.d.mts +1 -0
  242. package/dist/types/lib/lint-config/stylelint.config.d.cts +2 -10
  243. package/dist/types/lib/release.config.d.mts +10 -0
  244. package/dist/types/lib/semantic-release-plugin.d.mts +4 -0
  245. package/dist/types/lib/server/appRoutes.d.ts +1 -1
  246. package/dist/types/lib/server/csp.d.ts +1 -1
  247. package/dist/types/lib/server/middlewares.d.ts +1 -1
  248. package/dist/types/lib/webpack/csp-plugin.d.ts +3 -3
  249. package/dist/types/lib/webpack/helpers.d.ts +1 -6
  250. package/dist/types/lib/webpack/interceptor-middleware.d.ts +2 -2
  251. package/dist/types/lib/webpack/webpack.base.babel.d.ts +1 -1
  252. package/dist/types/lib/webpack/webpack.lib.base.babel.d.ts +1 -1
  253. package/dist/types/lib/webpack/webpack.lib.prod.babel.d.ts +1 -1
  254. package/dist/types/lib/webpack/webpack.prod.babel.d.ts +1 -1
  255. package/dist/types/lib/webpack/webpack.storybook.d.ts +1 -1
  256. package/dist/types/tsconfig.tsbuildinfo +1 -1
  257. package/lib/lint-config/commitlint.config.cjs +1 -0
  258. package/lib/lint-config/eslint/common.cjs +164 -0
  259. package/lib/lint-config/eslint/flat/common.mjs +169 -0
  260. package/lib/lint-config/eslint/flat/compat.mjs +27 -0
  261. package/lib/lint-config/eslint/flat/index.mjs +21 -0
  262. package/lib/lint-config/eslint/flat/non-react-export.mjs +10 -0
  263. package/lib/lint-config/eslint/flat/non-react.mjs +6 -0
  264. package/lib/lint-config/eslint/flat/presets.mjs +96 -0
  265. package/lib/lint-config/eslint/flat/react-export.mjs +7 -0
  266. package/lib/lint-config/eslint/flat/react.mjs +59 -0
  267. package/lib/lint-config/eslint/flat/rules.mjs +185 -0
  268. package/lib/lint-config/eslint/non-react.cjs +14 -0
  269. package/lib/lint-config/eslint/react.cjs +26 -0
  270. package/lib/lint-config/eslint/typescript/common.cjs +49 -0
  271. package/lib/lint-config/eslint/typescript/non-react.cjs +12 -0
  272. package/lib/lint-config/eslint/typescript/react.cjs +19 -0
  273. package/lib/lint-config/lint-staged.config.js +15 -0
  274. package/lib/lint-config/prettier.config.cjs +8 -0
  275. package/lib/lint-config/stylelint/config.mjs +27 -0
  276. package/lib/lint-config/stylelint/export.mjs +1 -0
  277. package/lib/lint-config/stylelint.config.cjs +3 -0
  278. package/lib/release.config.mjs +28 -0
  279. package/lib/semantic-release-plugin.mjs +30 -0
  280. package/lib/skills/migrate-to-pui-cli-9/SKILL.md +271 -0
  281. package/library.tsconfig.json +1 -1
  282. package/package.json +103 -89
  283. package/dist/cjs/server/versionPathMiddleware.js +0 -44
  284. package/dist/cjs/testing/setup-env.js +0 -8
  285. package/dist/esm/server/versionPathMiddleware.js +0 -24
  286. package/dist/esm/testing/setup-env.js +0 -7
  287. package/dist/types/lib/release.config.d.cts +0 -7
  288. package/dist/types/lib/semantic-release-plugin.d.cts +0 -1
  289. package/dist/types/lib/server/versionPathMiddleware.d.ts +0 -8
  290. package/dist/types/lib/testing/setup-env.d.ts +0 -1
@@ -0,0 +1 @@
1
+ exports.commitlintConfig = { extends: ['@commitlint/config-conventional'] };
@@ -0,0 +1,164 @@
1
+
2
+ const prettierOptions = require("../prettier.config.cjs");
3
+ // const webpackConfig = require('../../webpack/webpack.prod.babel');
4
+
5
+ exports.baseExtends = [
6
+ "plugin:eslint-comments/recommended",
7
+ "plugin:import/recommended",
8
+ "plugin:prettier/recommended",
9
+ "plugin:jest/recommended",
10
+ "plugin:jsdoc/recommended",
11
+ "plugin:wdio/recommended",
12
+ "plugin:testing-library/dom",
13
+ "plugin:storybook/recommended",
14
+ ];
15
+
16
+ const basePlugins = ["testing-library", "jest", "jsdoc", "wdio", "import"];
17
+ exports.basePlugins = basePlugins;
18
+
19
+ exports.baseOverrides = [
20
+ {
21
+ files: ["*.func.spec.js", "*.visual.spec.js"],
22
+ rules: {
23
+ "jest/valid-expect": "off",
24
+ },
25
+ },
26
+ ];
27
+
28
+ const baseRules = {
29
+ "prettier/prettier": ["error", prettierOptions],
30
+ "arrow-body-style": [2, "as-needed"],
31
+ "class-methods-use-this": 0,
32
+ "import/imports-first": 0,
33
+ "import/newline-after-import": 0,
34
+ "import/no-dynamic-require": 0,
35
+ "import/no-extraneous-dependencies": 0,
36
+ "import/no-named-as-default": 0,
37
+ "import/no-unresolved": [
38
+ 2,
39
+ { caseSensitive: true, caseSensitiveStrict: true },
40
+ ], // Tip: https://github.com/import-js/eslint-plugin-import/issues/1868
41
+ "import/no-webpack-loader-syntax": 0,
42
+ "import/prefer-default-export": 0,
43
+ "import/extensions": [
44
+ 2,
45
+ "never",
46
+ {
47
+ json: "ignorePackages",
48
+ js: "ignorePackages",
49
+ },
50
+ ],
51
+ indent: [
52
+ 2,
53
+ 2,
54
+ {
55
+ SwitchCase: 1,
56
+ },
57
+ ],
58
+ "max-lines": ["error", { max: 120, skipComments: true }],
59
+ complexity: ["error", { max: 10 }],
60
+ "max-depth": ["error", { max: 4 }],
61
+ "max-lines-per-function": 0,
62
+ "max-nested-callbacks": ["error", { max: 3 }],
63
+ "max-params": ["error", { max: 3 }],
64
+ "max-statements": ["error", { max: 20 }],
65
+ "max-len": 0,
66
+ "newline-per-chained-call": 0,
67
+ "no-confusing-arrow": 0,
68
+ "no-console": 1,
69
+ "no-param-reassign": ["error", { props: false }],
70
+ "no-unused-vars": 2,
71
+ "no-use-before-define": 0,
72
+ "prefer-template": 2,
73
+ "require-yield": 0,
74
+ "jsdoc/require-jsdoc": 0,
75
+ "eslint-comments/disable-enable-pair": 0,
76
+ };
77
+
78
+ exports.baseRules = baseRules;
79
+
80
+ const reactRules = {
81
+ "jsx-a11y/aria-props": 2,
82
+ "jsx-a11y/heading-has-content": 0,
83
+ "jsx-a11y/label-has-associated-control": [
84
+ 2,
85
+ {
86
+ // NOTE: If this error triggers, either disable it or add
87
+ // your custom components, labels and attributes via these options
88
+ // See https://github.com/evcohen/eslint-plugin-jsx-a11y/blob/master/docs/rules/label-has-associated-control.md
89
+ controlComponents: ["Input"],
90
+ },
91
+ ],
92
+ "jsx-a11y/label-has-for": 0,
93
+ "jsx-a11y/mouse-events-have-key-events": 2,
94
+ "jsx-a11y/role-has-required-aria-props": 2,
95
+ "jsx-a11y/role-supports-aria-props": 2,
96
+ "react/destructuring-assignment": 0,
97
+ "react-hooks/rules-of-hooks": "error",
98
+ "react/jsx-closing-tag-location": 0,
99
+ "react/forbid-prop-types": 0,
100
+ "react/jsx-first-prop-new-line": [2, "multiline"],
101
+ "react/jsx-no-target-blank": 0,
102
+ "react/jsx-props-no-spreading": 0,
103
+ "react/jsx-uses-vars": 2,
104
+ "react/require-default-props": 0,
105
+ "react/require-extension": 0,
106
+ "react/self-closing-comp": 0,
107
+ "react/sort-comp": 0,
108
+ "react/react-in-jsx-scope": 0,
109
+ "react/jsx-filename-extension": [
110
+ 1,
111
+ { extensions: [".js", ".jsx", ".tsx", ".mdx"] },
112
+ ],
113
+ "react/function-component-definition": [
114
+ 2,
115
+ { namedComponents: "arrow-function" },
116
+ ],
117
+ "redux-saga/no-yield-in-race": 2,
118
+ "redux-saga/yield-effects": 2,
119
+ };
120
+ exports.reactRules = reactRules;
121
+
122
+ exports.baseConfig = {
123
+ parser: "@babel/eslint-parser",
124
+ plugins: basePlugins,
125
+ env: {
126
+ jest: true,
127
+ browser: true,
128
+ node: true,
129
+ es2021: true,
130
+ },
131
+ parserOptions: {
132
+ sourceType: "module",
133
+ ecmaFeatures: {
134
+ jsx: true,
135
+ },
136
+ babelOptions: {
137
+ plugins: ["@babel/plugin-syntax-import-assertions"],
138
+ },
139
+ },
140
+ settings: {
141
+ react: {
142
+ version: "detect",
143
+ },
144
+ jest: {
145
+ version: 28,
146
+ },
147
+ "import/resolver": {
148
+ node: {
149
+ extensions: [".js", ".jsx", ".ts", ".tsx"],
150
+ },
151
+ },
152
+ },
153
+ ignorePatterns: [
154
+ "/build/**/*",
155
+ "/node_modules/**/*",
156
+ "/dist/**/*",
157
+ "/reports/**/*",
158
+ "/coverage/**/*",
159
+ "/demo/**/*",
160
+ "/docs/**/*",
161
+ "/temp/**/*",
162
+ "**/vendor/*.js",
163
+ ],
164
+ };
@@ -0,0 +1,169 @@
1
+ import eslint from '@eslint/js';
2
+ import { defineConfig } from 'eslint/config';
3
+ import eslintConfigPrettier from 'eslint-config-prettier';
4
+ import importX from 'eslint-plugin-import-x';
5
+ import jest from 'eslint-plugin-jest';
6
+ import testingLibrary from 'eslint-plugin-testing-library';
7
+ import globals from 'globals';
8
+ import tseslint from 'typescript-eslint';
9
+ import {
10
+ jestRecommendedRules,
11
+ sharedCoreRules,
12
+ testFiles,
13
+ testFixtureFiles,
14
+ testJsxFiles,
15
+ testingLibraryDomRules,
16
+ testingLibraryReactRules,
17
+ wdioGlobals,
18
+ wdioPlugin,
19
+ wdioRecommendedRules,
20
+ wdioSpecFiles,
21
+ } from './presets.mjs';
22
+ import {
23
+ ignorePatterns,
24
+ jsRules,
25
+ typescriptRules,
26
+ typescriptStrictRules,
27
+ testFixtureRelaxedRules,
28
+ typescriptTestRelaxedRules,
29
+ } from './rules.mjs';
30
+
31
+ const tsconfigRootDir = process.cwd();
32
+
33
+ const typescriptParserOptions = {
34
+ projectService: true,
35
+ tsconfigRootDir,
36
+ };
37
+
38
+ /** Cached flat config arrays (only two variants: default + strict). */
39
+ const configCache = new Map();
40
+
41
+ /** @param {Record<string, unknown>} tsRules - `typescriptRules` or `typescriptStrictRules` */
42
+ export function createBaseFlatConfigs(tsRules) {
43
+ if (configCache.has(tsRules)) {
44
+ return configCache.get(tsRules);
45
+ }
46
+
47
+ const config = defineConfig(
48
+ { ignores: ignorePatterns },
49
+ eslint.configs.recommended,
50
+ eslintConfigPrettier,
51
+ {
52
+ plugins: {
53
+ 'import-x': importX,
54
+ },
55
+ languageOptions: {
56
+ ecmaVersion: 'latest',
57
+ sourceType: 'module',
58
+ parserOptions: {
59
+ ecmaFeatures: { jsx: true },
60
+ },
61
+ globals: {
62
+ ...globals.browser,
63
+ ...globals.node,
64
+ ...globals.es2021,
65
+ },
66
+ },
67
+ settings: {
68
+ 'import-x/resolver': {
69
+ node: { extensions: ['.js', '.jsx', '.ts', '.tsx'] },
70
+ typescript: { alwaysTryTypes: true },
71
+ },
72
+ },
73
+ rules: sharedCoreRules,
74
+ },
75
+ {
76
+ files: ['**/*.{js,jsx,mjs,cjs}'],
77
+ rules: jsRules,
78
+ },
79
+ ...tseslint.configs.recommendedTypeChecked.map((config) => ({
80
+ ...config,
81
+ files: ['**/*.{ts,tsx}'],
82
+ })),
83
+ {
84
+ files: ['**/*.{ts,tsx}'],
85
+ rules: tsRules,
86
+ languageOptions: {
87
+ parserOptions: typescriptParserOptions,
88
+ },
89
+ },
90
+ {
91
+ files: testFiles,
92
+ plugins: {
93
+ jest,
94
+ 'testing-library': testingLibrary,
95
+ },
96
+ languageOptions: {
97
+ globals: globals.jest,
98
+ },
99
+ settings: {
100
+ jest: { version: 'detect' },
101
+ },
102
+ rules: {
103
+ ...jestRecommendedRules,
104
+ ...testingLibraryDomRules,
105
+ 'testing-library/no-node-access': 'off',
106
+ ...typescriptTestRelaxedRules,
107
+ },
108
+ },
109
+ {
110
+ files: testJsxFiles,
111
+ rules: {
112
+ ...testingLibraryReactRules,
113
+ 'testing-library/no-node-access': 'off',
114
+ },
115
+ },
116
+ {
117
+ files: testFixtureFiles,
118
+ rules: testFixtureRelaxedRules,
119
+ },
120
+ {
121
+ files: wdioSpecFiles,
122
+ plugins: { wdio: wdioPlugin, jest },
123
+ languageOptions: { globals: wdioGlobals },
124
+ rules: {
125
+ ...wdioRecommendedRules,
126
+ // JS e2e specs are not type-checked; use await-expect instead of no-floating-promise.
127
+ 'wdio/await-expect': 'error',
128
+ 'wdio/no-floating-promise': 'off',
129
+ 'jest/valid-expect': 'off',
130
+ },
131
+ },
132
+ {
133
+ files: ['**/eslint.config.{mjs,cjs,js}'],
134
+ rules: { 'import-x/no-unresolved': 'off' },
135
+ },
136
+ {
137
+ files: ['**/scripts/**', '**/ci_cd/**'],
138
+ rules: {
139
+ 'no-console': 'off',
140
+ 'max-lines': 'off',
141
+ complexity: 'off',
142
+ },
143
+ },
144
+ {
145
+ files: ['**/lint-config/**'],
146
+ rules: {
147
+ 'max-lines': 'off',
148
+ 'import-x/no-named-as-default-member': 'off',
149
+ 'import-x/default': 'off',
150
+ },
151
+ },
152
+ {
153
+ files: ['**/*.d.ts'],
154
+ rules: {
155
+ '@typescript-eslint/no-explicit-any': 'off',
156
+ '@typescript-eslint/no-empty-object-type': 'off',
157
+ },
158
+ },
159
+ );
160
+
161
+ configCache.set(tsRules, config);
162
+ return config;
163
+ }
164
+
165
+ /** Default flat base — `no-unsafe-*` as warn in application TypeScript. */
166
+ export const baseFlatConfigs = createBaseFlatConfigs(typescriptRules);
167
+
168
+ /** Strict flat base — `no-unsafe-*` as error in application TypeScript. */
169
+ export const baseFlatConfigsStrict = createBaseFlatConfigs(typescriptStrictRules);
@@ -0,0 +1,27 @@
1
+ /**
2
+ * ESLint 10 removed deprecated context APIs (e.g. getSourceCode, getScope, getFilename).
3
+ * Wrap legacy plugins via @eslint/compat v2 (ESLint 10–aware fixupPluginRules).
4
+ */
5
+ import { fixupConfigRules, fixupPluginRules } from '@eslint/compat';
6
+ import react from 'eslint-plugin-react';
7
+ import reduxSaga from 'eslint-plugin-redux-saga';
8
+ import storybook from 'eslint-plugin-storybook';
9
+
10
+ const storybookFlat =
11
+ storybook.configs['flat/recommended'] ??
12
+ storybook.configs.recommended ??
13
+ [];
14
+
15
+ /** React — uses context.getFilename / getScope (eslint-plugin-react@7). */
16
+ /** @type {import('eslint').ESLint.Plugin} */
17
+ export const reactPlugin = fixupPluginRules(react);
18
+
19
+ /** Redux-saga — uses context.getScope in no-yield-in-race. */
20
+ /** @type {import('eslint').ESLint.Plugin} */
21
+ export const reduxSagaPlugin = fixupPluginRules(reduxSaga);
22
+
23
+ /** Storybook flat presets — uses legacy context APIs (eslint-plugin-storybook@0.12). */
24
+ /** @type {import('eslint').Linter.Config[]} */
25
+ export const storybookFlatConfigs = fixupConfigRules(
26
+ Array.isArray(storybookFlat) ? storybookFlat : [storybookFlat],
27
+ );
@@ -0,0 +1,21 @@
1
+ export { eslintFlatConfig, eslintFlatConfigStrict } from './react-export.mjs';
2
+ export {
3
+ eslintFlatBaseConfig,
4
+ eslintFlatBaseConfigStrict,
5
+ } from './non-react-export.mjs';
6
+ export { reactFlatConfigs, reactFlatConfigsStrict } from './react.mjs';
7
+ export {
8
+ nonReactFlatConfigs,
9
+ nonReactFlatConfigsStrict,
10
+ } from './non-react.mjs';
11
+ export {
12
+ baseFlatConfigs,
13
+ baseFlatConfigsStrict,
14
+ createBaseFlatConfigs,
15
+ } from './common.mjs';
16
+ export {
17
+ storybookFiles,
18
+ testFiles,
19
+ testFixtureFiles,
20
+ testJsxFiles,
21
+ } from './presets.mjs';
@@ -0,0 +1,10 @@
1
+ import {
2
+ nonReactFlatConfigs,
3
+ nonReactFlatConfigsStrict,
4
+ } from './non-react.mjs';
5
+
6
+ /** Flat ESLint config for non-React TypeScript libraries and services. */
7
+ export const eslintFlatBaseConfig = nonReactFlatConfigs;
8
+
9
+ /** Strict flat ESLint config for non-React TypeScript (`no-unsafe-*` as error). */
10
+ export const eslintFlatBaseConfigStrict = nonReactFlatConfigsStrict;
@@ -0,0 +1,6 @@
1
+ import { baseFlatConfigs, baseFlatConfigsStrict } from './common.mjs';
2
+
3
+ /** `defineConfig` already applied in `createBaseFlatConfigs`. */
4
+ export const nonReactFlatConfigs = baseFlatConfigs;
5
+
6
+ export const nonReactFlatConfigsStrict = baseFlatConfigsStrict;
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Preset rule bundles and file globs computed once at module load (not per config factory call).
3
+ */
4
+ import importX from 'eslint-plugin-import-x';
5
+ import jest from 'eslint-plugin-jest';
6
+ import jsxA11y from 'eslint-plugin-jsx-a11y';
7
+ import react from 'eslint-plugin-react';
8
+ import reactHooks from 'eslint-plugin-react-hooks';
9
+ import reduxSaga from 'eslint-plugin-redux-saga';
10
+ import testingLibrary from 'eslint-plugin-testing-library';
11
+ import wdio from 'eslint-plugin-wdio';
12
+ import { storybookFlatConfigs } from './compat.mjs';
13
+
14
+ /** Application and integration tests (Jest + relaxed type-checked rules). */
15
+ export const testFiles = [
16
+ '**/*.{test,spec}.{js,jsx,ts,tsx}',
17
+ '**/__tests__/**',
18
+ '**/lib/testing/**',
19
+ '**/mocks/**',
20
+ // PUI libs/apps co-locate tests under lib/ (e.g. pui-app-sdk, pui-app-loader).
21
+ 'lib/**/tests/**',
22
+ 'app/**/tests/**',
23
+ ];
24
+
25
+ /**
26
+ * Generated or vendored JS under test trees (checksum bundles, MSW endpoints, pinned assets).
27
+ * Not maintained source — relax structural rules only.
28
+ */
29
+ export const testFixtureFiles = [
30
+ '**/*.checksum*.js',
31
+ '**/*.endpoint.js',
32
+ '**/tests/**/latest/*.{js,cjs,mjs}',
33
+ '**/tests/**/[0-9]*.[0-9]*/*.{js,cjs,mjs}',
34
+ ];
35
+
36
+ export const testJsxFiles = ['**/*.{test,spec}.{jsx,tsx}'];
37
+
38
+ export const wdioSpecFiles = [
39
+ '**/*.func.spec.js',
40
+ '**/*.visual.spec.js',
41
+ '**/*e2e*.{js,ts}',
42
+ '**/e2e/**',
43
+ ];
44
+
45
+ export const storybookFiles = [
46
+ '**/*.stories.{js,jsx,ts,tsx}',
47
+ '**/.storybook/**',
48
+ ];
49
+
50
+ /** @type {import('eslint').Linter.RulesRecord} */
51
+ export const sharedCoreRules = {
52
+ ...importX.configs.recommended.rules,
53
+ 'import-x/named': 'off',
54
+ };
55
+
56
+ /** @type {import('eslint').Linter.RulesRecord} */
57
+ export const jestRecommendedRules = jest.configs.recommended.rules;
58
+
59
+ const testingLibraryDom =
60
+ testingLibrary.configs['flat/dom'] ?? testingLibrary.configs.dom;
61
+ const testingLibraryReact =
62
+ testingLibrary.configs['flat/react'] ?? testingLibrary.configs.react;
63
+
64
+ /** @type {import('eslint').Linter.RulesRecord} */
65
+ export const testingLibraryDomRules = testingLibraryDom?.rules ?? {};
66
+
67
+ /** @type {import('eslint').Linter.RulesRecord} */
68
+ export const testingLibraryReactRules = testingLibraryReact?.rules ?? {};
69
+
70
+ /** @type {import('eslint').Linter.RulesRecord} */
71
+ export const reactPresetRules = {
72
+ ...react.configs.recommended.rules,
73
+ ...reactHooks.configs.recommended.rules,
74
+ ...jsxA11y.flatConfigs.recommended.rules,
75
+ ...reduxSaga.configs.recommended.rules,
76
+ };
77
+
78
+ /**
79
+ * eslint-plugin-wdio v9 default export exposes config severities as `rules` when
80
+ * typescript-eslint is installed. Use flat/recommended's nested plugin instead.
81
+ */
82
+ const wdioFlatRecommended =
83
+ wdio.configs['flat/recommended'] ?? wdio.configs.recommended;
84
+
85
+ export const wdioPlugin = wdioFlatRecommended.plugins?.wdio ?? wdio;
86
+
87
+ /** @type {import('eslint').Linter.RulesRecord} */
88
+ export const wdioRecommendedRules = wdioFlatRecommended.rules ?? {};
89
+
90
+ /** @type {Record<string, boolean>} */
91
+ export const wdioGlobals =
92
+ wdioFlatRecommended.languageOptions?.globals ??
93
+ wdio.configs.recommended.globals ??
94
+ {};
95
+
96
+ export { storybookFlatConfigs };
@@ -0,0 +1,7 @@
1
+ import { reactFlatConfigs, reactFlatConfigsStrict } from './react.mjs';
2
+
3
+ /** Flat ESLint config for React + TypeScript PUI apps. */
4
+ export const eslintFlatConfig = reactFlatConfigs;
5
+
6
+ /** Strict flat ESLint config for React + TypeScript (errors on `no-unsafe-*` and `exhaustive-deps`). */
7
+ export const eslintFlatConfigStrict = reactFlatConfigsStrict;
@@ -0,0 +1,59 @@
1
+ import { defineConfig } from 'eslint/config';
2
+ import jsxA11y from 'eslint-plugin-jsx-a11y';
3
+ import reactHooks from 'eslint-plugin-react-hooks';
4
+ import { baseFlatConfigs, baseFlatConfigsStrict } from './common.mjs';
5
+ import { reactPlugin, reduxSagaPlugin } from './compat.mjs';
6
+ import {
7
+ reactPresetRules,
8
+ storybookFiles,
9
+ storybookFlatConfigs,
10
+ } from './presets.mjs';
11
+ import { reactRules, reactStrictRules } from './rules.mjs';
12
+
13
+ const reactPluginBlock = {
14
+ plugins: {
15
+ react: reactPlugin,
16
+ 'react-hooks': reactHooks,
17
+ 'jsx-a11y': jsxA11y,
18
+ 'redux-saga': reduxSagaPlugin,
19
+ },
20
+ settings: {
21
+ react: { version: 'detect' },
22
+ },
23
+ };
24
+
25
+ /**
26
+ * @param {import('eslint').Linter.Config[]} baseConfigs
27
+ * @param {typeof reactRules} puiReactRules
28
+ */
29
+ function createReactFlatConfigs(baseConfigs, puiReactRules) {
30
+ return defineConfig(
31
+ ...baseConfigs,
32
+ {
33
+ ...reactPluginBlock,
34
+ rules: {
35
+ ...reactPresetRules,
36
+ ...puiReactRules,
37
+ },
38
+ },
39
+ ...storybookFlatConfigs,
40
+ {
41
+ files: storybookFiles,
42
+ rules: {
43
+ 'react/jsx-props-no-spreading': 'off',
44
+ },
45
+ },
46
+ );
47
+ }
48
+
49
+ /** Default React flat config — migration-friendly type-safety warnings. */
50
+ export const reactFlatConfigs = createReactFlatConfigs(
51
+ baseFlatConfigs,
52
+ reactRules,
53
+ );
54
+
55
+ /** Strict React flat config — `no-unsafe-*` and `exhaustive-deps` as error. */
56
+ export const reactFlatConfigsStrict = createReactFlatConfigs(
57
+ baseFlatConfigsStrict,
58
+ reactStrictRules,
59
+ );