@elliemae/pui-cli 9.0.0-next.4 → 9.0.0-next.41

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 (183) hide show
  1. package/app.tsconfig.json +1 -1
  2. package/dist/cjs/commands/lint.js +27 -8
  3. package/dist/cjs/commands/start.js +1 -1
  4. package/dist/cjs/commands/storybook.js +2 -2
  5. package/dist/cjs/commands/test.js +51 -22
  6. package/dist/cjs/commands/utils.js +33 -2
  7. package/dist/cjs/index.cjs +0 -2
  8. package/dist/cjs/index.js +4 -2
  9. package/dist/cjs/lint-config/eslint/common.cjs +3 -2
  10. package/dist/cjs/lint-config/eslint/typescript/common.cjs +3 -3
  11. package/dist/cjs/lint-config/stylelint.config.js +45 -0
  12. package/dist/cjs/monorepo/delete-merged-tags.js +1 -1
  13. package/dist/cjs/monorepo/set-registry-version.js +1 -1
  14. package/dist/cjs/monorepo/set-workspace-version.js +1 -1
  15. package/dist/cjs/pui-config.js +1 -1
  16. package/dist/cjs/release.config.js +46 -0
  17. package/dist/cjs/server/csp.js +2 -1
  18. package/dist/cjs/server/index.js +5 -0
  19. package/dist/cjs/server/utils.js +11 -4
  20. package/dist/cjs/server/wsServer.js +129 -0
  21. package/dist/cjs/testing/ExtendedJSDomEnv.cjs +27 -0
  22. package/dist/cjs/testing/extended/axe-core/getMessageAndPass.js +37 -0
  23. package/dist/cjs/testing/extended/axe-core/index.js +24 -0
  24. package/dist/cjs/testing/extended/axe-core/reporter.js +51 -0
  25. package/dist/cjs/testing/extended/axe-core/shouldIgnoreNodeViolation.js +31 -0
  26. package/dist/cjs/testing/extended/axe-core/toHaveNoViolations.js +43 -0
  27. package/dist/cjs/testing/jest.config.cjs +5 -2
  28. package/dist/cjs/testing/jest.polyfills.cjs +30 -0
  29. package/dist/cjs/testing/setup-test-env.js +0 -2
  30. package/dist/cjs/testing/setup-tests.js +26 -4
  31. package/dist/cjs/testing/vitest.config.js +8 -8
  32. package/dist/cjs/transpile/.swcrc +1 -1
  33. package/dist/cjs/transpile/esbuild.js +4 -4
  34. package/dist/cjs/update-notifier.js +1 -1
  35. package/dist/cjs/utils.js +1 -1
  36. package/dist/cjs/webpack/helpers.js +20 -8
  37. package/dist/cjs/webpack/webpack.base.babel.js +13 -27
  38. package/dist/cjs/webpack/webpack.dev.babel.js +14 -3
  39. package/dist/cjs/webpack/webpack.lib.base.babel.js +13 -5
  40. package/dist/cjs/webpack/webpack.lib.dev.babel.js +8 -12
  41. package/dist/cjs/webpack/webpack.lib.prod.babel.js +7 -6
  42. package/dist/cjs/webpack/webpack.prod.babel.js +3 -2
  43. package/dist/cjs/webpack/webpack.storybook.js +10 -11
  44. package/dist/esm/commands/lint.js +28 -8
  45. package/dist/esm/commands/start.js +1 -1
  46. package/dist/esm/commands/storybook.js +2 -2
  47. package/dist/esm/commands/test.js +51 -22
  48. package/dist/esm/commands/utils.js +33 -2
  49. package/dist/esm/index.cjs +0 -2
  50. package/dist/esm/index.js +4 -2
  51. package/dist/esm/lint-config/eslint/common.cjs +3 -2
  52. package/dist/esm/lint-config/eslint/typescript/common.cjs +3 -3
  53. package/dist/esm/lint-config/stylelint.config.js +25 -0
  54. package/dist/esm/monorepo/delete-merged-tags.js +1 -1
  55. package/dist/esm/monorepo/set-registry-version.js +1 -1
  56. package/dist/esm/monorepo/set-workspace-version.js +1 -1
  57. package/dist/esm/pui-config.js +1 -1
  58. package/dist/esm/release.config.js +26 -0
  59. package/dist/esm/server/csp.js +2 -1
  60. package/dist/esm/server/index.js +6 -1
  61. package/dist/esm/server/utils.js +11 -4
  62. package/dist/esm/server/wsServer.js +99 -0
  63. package/dist/esm/testing/ExtendedJSDomEnv.cjs +27 -0
  64. package/dist/esm/testing/extended/axe-core/getMessageAndPass.js +17 -0
  65. package/dist/esm/testing/extended/axe-core/index.js +4 -0
  66. package/dist/esm/testing/extended/axe-core/reporter.js +31 -0
  67. package/dist/esm/testing/extended/axe-core/shouldIgnoreNodeViolation.js +11 -0
  68. package/dist/esm/testing/extended/axe-core/toHaveNoViolations.js +23 -0
  69. package/dist/esm/testing/jest.config.cjs +5 -2
  70. package/dist/esm/testing/jest.polyfills.cjs +30 -0
  71. package/dist/esm/testing/setup-test-env.js +0 -2
  72. package/dist/esm/testing/setup-tests.js +26 -4
  73. package/dist/esm/testing/vitest.config.js +8 -8
  74. package/dist/esm/transpile/.swcrc +1 -1
  75. package/dist/esm/transpile/esbuild.js +4 -4
  76. package/dist/esm/update-notifier.js +1 -1
  77. package/dist/esm/utils.js +1 -1
  78. package/dist/esm/webpack/helpers.js +20 -8
  79. package/dist/esm/webpack/webpack.base.babel.js +13 -27
  80. package/dist/esm/webpack/webpack.dev.babel.js +14 -3
  81. package/dist/esm/webpack/webpack.lib.base.babel.js +13 -5
  82. package/dist/esm/webpack/webpack.lib.dev.babel.js +9 -13
  83. package/dist/esm/webpack/webpack.lib.prod.babel.js +12 -7
  84. package/dist/esm/webpack/webpack.prod.babel.js +3 -2
  85. package/dist/esm/webpack/webpack.storybook.js +11 -12
  86. package/dist/types/docusaurus.config.d.ts +2 -0
  87. package/dist/types/{babel.config.d.cts → lib/babel.config.d.cts} +7 -7
  88. package/dist/types/{commands → lib/commands}/build.d.ts +2 -2
  89. package/dist/types/{commands → lib/commands}/codemod.d.ts +2 -2
  90. package/dist/types/{commands → lib/commands}/lint.d.ts +3 -2
  91. package/dist/types/{commands → lib/commands}/pack.d.ts +2 -2
  92. package/dist/types/{commands → lib/commands}/start.d.ts +2 -2
  93. package/dist/types/{commands → lib/commands}/storybook.d.ts +2 -2
  94. package/dist/types/{commands → lib/commands}/test.d.ts +4 -2
  95. package/dist/types/{commands → lib/commands}/tscheck.d.ts +2 -2
  96. package/dist/types/lib/commands/utils.d.ts +39 -0
  97. package/dist/types/{commands → lib/commands}/version.d.ts +2 -2
  98. package/dist/types/{commands → lib/commands}/vitest.d.ts +2 -2
  99. package/dist/types/{index.d.cts → lib/index.d.cts} +1 -2
  100. package/dist/types/{index.d.ts → lib/index.d.ts} +3 -1
  101. package/dist/types/{lint-config → lib/lint-config}/commitlint.config.d.cts +1 -1
  102. package/dist/types/{lint-config → lib/lint-config}/eslint/common.d.cts +18 -12
  103. package/dist/types/{lint-config → lib/lint-config}/eslint/non-react.d.cts +8 -1
  104. package/dist/types/{lint-config → lib/lint-config}/eslint/react.d.cts +8 -1
  105. package/dist/types/{lint-config → lib/lint-config}/eslint/typescript/common.d.cts +6 -6
  106. package/dist/types/{lint-config → lib/lint-config}/eslint/typescript/non-react.d.cts +9 -2
  107. package/dist/types/{lint-config → lib/lint-config}/eslint/typescript/react.d.cts +9 -2
  108. package/dist/types/lib/lint-config/lint-staged.config.d.ts +5 -0
  109. package/dist/types/lib/lint-config/prettier.config.d.cts +8 -0
  110. package/dist/types/lib/lint-config/stylelint.config.d.ts +13 -0
  111. package/dist/types/lib/release.config.d.ts +10 -0
  112. package/dist/types/{server → lib/server}/csp.d.ts +2 -2
  113. package/dist/types/{server → lib/server}/utils.d.ts +1 -0
  114. package/dist/types/lib/server/wsServer.d.ts +13 -0
  115. package/dist/types/lib/testing/ExtendedJSDomEnv.d.cts +5 -0
  116. package/dist/types/lib/testing/extended/axe-core/getMessageAndPass.d.ts +8 -0
  117. package/dist/types/lib/testing/extended/axe-core/index.d.ts +1 -0
  118. package/dist/types/lib/testing/extended/axe-core/reporter.d.ts +2 -0
  119. package/dist/types/lib/testing/extended/axe-core/shouldIgnoreNodeViolation.d.ts +2 -0
  120. package/dist/types/lib/testing/extended/axe-core/toHaveNoViolations.d.ts +12 -0
  121. package/dist/types/lib/testing/jest.config.d.cts +44 -0
  122. package/dist/types/{testing → lib/testing}/jest.node.config.d.cts +3 -0
  123. package/dist/types/lib/testing/mocks/axios.d.ts +17 -0
  124. package/dist/types/{testing → lib/testing}/mocks/pui-diagnostics.d.ts +13 -13
  125. package/dist/types/lib/testing/setup-tests.d.ts +1 -0
  126. package/dist/types/lib/testing/vitest.config.d.ts +1 -0
  127. package/dist/types/lib/tests/basic.test.d.ts +0 -0
  128. package/dist/types/{transpile → lib/transpile}/esbuild.d.ts +3 -3
  129. package/dist/types/lib/typedoc.d.cts +3 -0
  130. package/dist/types/{webpack → lib/webpack}/helpers.d.ts +4 -1
  131. package/dist/types/{webpack → lib/webpack}/webpack.storybook.d.ts +0 -1
  132. package/nx.json +97 -0
  133. package/package.json +189 -178
  134. package/dist/cjs/lint-config/stylelint.config.cjs +0 -19
  135. package/dist/cjs/release.config.cjs +0 -24
  136. package/dist/esm/lint-config/stylelint.config.cjs +0 -19
  137. package/dist/esm/release.config.cjs +0 -24
  138. package/dist/types/commands/utils.d.ts +0 -17
  139. package/dist/types/lint-config/lint-staged.config.d.ts +0 -5
  140. package/dist/types/lint-config/prettier.config.d.cts +0 -8
  141. package/dist/types/lint-config/stylelint.config.d.cts +0 -10
  142. package/dist/types/release.config.d.cts +0 -7
  143. package/dist/types/testing/jest.config.d.cts +0 -41
  144. package/dist/types/testing/mocks/axios.d.ts +0 -17
  145. package/dist/types/testing/vitest.config.d.ts +0 -1
  146. package/dist/types/typedoc.d.cts +0 -3
  147. /package/dist/types/{cli.d.ts → lib/cli.d.ts} +0 -0
  148. /package/dist/types/{commands → lib/commands}/gendoc.d.ts +0 -0
  149. /package/dist/types/{dummy.d.ts → lib/dummy.d.ts} +0 -0
  150. /package/dist/types/{monorepo → lib/monorepo}/delete-merged-tags.d.ts +0 -0
  151. /package/dist/types/{monorepo → lib/monorepo}/set-registry-version.d.ts +0 -0
  152. /package/dist/types/{monorepo → lib/monorepo}/set-workspace-version.d.ts +0 -0
  153. /package/dist/types/{monorepo → lib/monorepo}/utils.d.cts +0 -0
  154. /package/dist/types/{monorepo → lib/monorepo}/utils.d.ts +0 -0
  155. /package/dist/types/{pui-config.d.ts → lib/pui-config.d.ts} +0 -0
  156. /package/dist/types/{server → lib/server}/appRoutes.d.ts +0 -0
  157. /package/dist/types/{server → lib/server}/index.d.ts +0 -0
  158. /package/dist/types/{server → lib/server}/logger.d.ts +0 -0
  159. /package/dist/types/{server → lib/server}/middlewares.d.ts +0 -0
  160. /package/dist/types/{testing/setup-react-env.d.ts → lib/testing/jest.polyfills.d.cts} +0 -0
  161. /package/dist/types/{testing → lib/testing}/mocks/cssModule.d.ts +0 -0
  162. /package/dist/types/{testing → lib/testing}/mocks/html.d.ts +0 -0
  163. /package/dist/types/{testing → lib/testing}/mocks/image.d.ts +0 -0
  164. /package/dist/types/{testing → lib/testing}/mocks/matchMedia.d.ts +0 -0
  165. /package/dist/types/{testing → lib/testing}/mocks/pui-app-loader.d.ts +0 -0
  166. /package/dist/types/{testing → lib/testing}/mocks/pui-user-monitoring.d.ts +0 -0
  167. /package/dist/types/{testing → lib/testing}/mocks/retry-axios.d.ts +0 -0
  168. /package/dist/types/{testing → lib/testing}/mocks/svg.d.ts +0 -0
  169. /package/dist/types/{testing → lib/testing}/mocks/webpack-hmr.d.ts +0 -0
  170. /package/dist/types/{testing → lib/testing}/resolver.d.cts +0 -0
  171. /package/dist/types/{testing/setup-test-env.d.ts → lib/testing/setup-react-env.d.ts} +0 -0
  172. /package/dist/types/{testing/setup-tests.d.ts → lib/testing/setup-test-env.d.ts} +0 -0
  173. /package/dist/types/{transpile → lib/transpile}/react-shim.d.ts +0 -0
  174. /package/dist/types/{transpile → lib/transpile}/swcrc.config.d.cts +0 -0
  175. /package/dist/types/{update-notifier.d.ts → lib/update-notifier.d.ts} +0 -0
  176. /package/dist/types/{utils.d.cts → lib/utils.d.cts} +0 -0
  177. /package/dist/types/{utils.d.ts → lib/utils.d.ts} +0 -0
  178. /package/dist/types/{webpack → lib/webpack}/webpack.base.babel.d.ts +0 -0
  179. /package/dist/types/{webpack → lib/webpack}/webpack.dev.babel.d.ts +0 -0
  180. /package/dist/types/{webpack → lib/webpack}/webpack.lib.base.babel.d.ts +0 -0
  181. /package/dist/types/{webpack → lib/webpack}/webpack.lib.dev.babel.d.ts +0 -0
  182. /package/dist/types/{webpack → lib/webpack}/webpack.lib.prod.babel.d.ts +0 -0
  183. /package/dist/types/{webpack → lib/webpack}/webpack.prod.babel.d.ts +0 -0
@@ -129,14 +129,16 @@ const plugins = [
129
129
  noErrorOnMissing: true,
130
130
  globOptions: {
131
131
  ignore: ["readme.md"]
132
- }
132
+ },
133
+ info: { minimized: true }
133
134
  },
134
135
  {
135
136
  from: "webroot",
136
137
  noErrorOnMissing: true,
137
138
  globOptions: {
138
139
  ignore: ["readme.md"]
139
- }
140
+ },
141
+ info: { minimized: true }
140
142
  }
141
143
  ])
142
144
  }),
@@ -145,7 +147,7 @@ const plugins = [
145
147
  fileName: "./latest/manifest.json",
146
148
  publicPath: "",
147
149
  map: (file) => {
148
- file.name = file.name.replace(/^latest\//, "");
150
+ file.name = file.name.replace(/^latest(\/|\\)/, "");
149
151
  return file;
150
152
  }
151
153
  }),
@@ -284,34 +286,18 @@ const baseConfig = (options) => ({
284
286
  mainFields: ["browser", "module", "main"],
285
287
  alias: {
286
288
  ...(0, import_helpers.getAlias)(),
287
- ...(options.resolve || {}).alias || {}
289
+ ...options.resolve?.alias ?? {}
288
290
  }
289
291
  },
292
+ externalsPresets: {
293
+ web: true
294
+ },
290
295
  externals: {
291
296
  "@elliemae/pui-user-monitoring": "emuiUserMonitoring",
292
297
  "@elliemae/pui-app-loader": "emuiAppLoader",
293
- "@elliemae/pui-diagnostics": "emuiDiagnostics",
294
- react: "emuiAppReactDependencies.react",
295
- "react-dom": "emuiAppReactDependencies.reactDOM",
296
- "@reduxjs/toolkit": "emuiAppReactDependencies.rtk",
297
- axios: "emuiAppReactDependencies.axios.default",
298
- dompurify: "emuiAppReactDependencies.dompurify",
299
- history: "emuiAppReactDependencies.history",
300
- immer: "emuiAppReactDependencies.immer",
301
- invariant: "emuiAppReactDependencies.invariant",
302
- "pubsub-js": "emuiAppReactDependencies.pubsubjs",
303
- "react-aria-live": "emuiAppReactDependencies.reactAriaLive",
304
- "react-helmet": "emuiAppReactDependencies.reactHelmet",
305
- "react-hook-form": "emuiAppReactDependencies.reactHookForm",
306
- "react-redux": "emuiAppReactDependencies.reactRedux",
307
- "react-router-dom": "emuiAppReactDependencies.reactRouterDOM",
308
- reduxInjectors: "emuiAppReactDependencies.reduxInjectors",
309
- reselect: "emuiAppReactDependencies.reselect",
310
- // "styled-components": "emuiAppReactDependencies.styledComponents",
311
- "styled-system": "emuiAppReactDependencies.styledSystem"
312
- // "@xstyled/styled-components": "emuiAppReactDependencies.xstyled",
298
+ "@elliemae/pui-diagnostics": "emuiDiagnostics"
313
299
  },
314
- devtool: options.devtool || "eval-source-map",
315
- performance: options.performance || {},
316
- devServer: options.devServer || {}
300
+ devtool: options.devtool ?? "eval-source-map",
301
+ performance: options.performance ?? {},
302
+ devServer: options.devServer ?? {}
317
303
  });
@@ -43,6 +43,8 @@ var import_middlewares = require("../server/middlewares.js");
43
43
  var import_appRoutes = require("../server/appRoutes.js");
44
44
  var import_helpers = require("./helpers.js");
45
45
  var import_webpack_base_babel = require("./webpack.base.babel.js");
46
+ var import_utils = require("../server/utils.js");
47
+ var import_wsServer = require("../server/wsServer.js");
46
48
  const import_meta = {};
47
49
  const __filename = (0, import_node_url.fileURLToPath)(import_meta.url);
48
50
  const {
@@ -98,7 +100,7 @@ const devConfig = {
98
100
  // Add development plugins
99
101
  plugins: [
100
102
  new import_html_webpack_plugin.default({
101
- inject: !(0, import_helpers.isAppLoaderEnabled)(),
103
+ inject: !(0, import_helpers.isAppLoaderEnabled)() ? "head" : false,
102
104
  // Inject all files that are generated by webpack, e.g. bundle.js
103
105
  template: !(0, import_helpers.isAppLoaderEnabled)() ? "app/index.html" : "app/index-app-loader.html",
104
106
  emui: {
@@ -110,7 +112,8 @@ const devConfig = {
110
112
  diagnosticsScriptPath,
111
113
  encwLoaderScriptPath,
112
114
  googleTagManager: (0, import_helpers.isGoogleTagManagerEnabled)()
113
- }
115
+ },
116
+ scriptLoading: "defer"
114
117
  }),
115
118
  new import_circular_dependency_plugin.default({
116
119
  exclude: /a\.(js|ts|jsx|tsx)|node_modules/,
@@ -143,7 +146,7 @@ const devConfig = {
143
146
  },
144
147
  hot: true,
145
148
  open: [basePath],
146
- port: process.env.PORT || "auto",
149
+ port: process.env.PORT ?? "auto",
147
150
  setupMiddlewares: (middlewares, devServer) => {
148
151
  if (devServer.app) {
149
152
  (0, import_middlewares.setupDefaultMiddlewares)(devServer.app);
@@ -160,6 +163,14 @@ const devConfig = {
160
163
  }
161
164
  next();
162
165
  });
166
+ (0, import_wsServer.createWSServer)({
167
+ port: import_utils.wsPort
168
+ }).then(({ wsServer }) => {
169
+ if (devServer.app)
170
+ devServer.app.locals.wsServer = wsServer;
171
+ }).catch((err) => {
172
+ console.error(err);
173
+ });
163
174
  }
164
175
  return middlewares;
165
176
  }
@@ -84,14 +84,22 @@ const baseConfig = (options) => ({
84
84
  output: {
85
85
  clean: true,
86
86
  path: import_node_path.default.resolve(process.cwd(), "dist/umd"),
87
+ filename: "[name].js",
88
+ chunkFilename: "[name].[chunkhash].chunk.js",
89
+ assetModuleFilename: "assets/[name].[hash][ext][query]",
87
90
  publicPath: "auto",
88
91
  library: {
89
92
  name: (0, import_helpers.getLibraryVariableName)(),
90
- type: "umd"
93
+ type: "var"
94
+ // type: 'module',
91
95
  },
96
+ // module: true,
92
97
  ...options.output
93
98
  },
94
99
  // Merge with env dependent settings
100
+ // experiments: {
101
+ // outputModule: true,
102
+ // },
95
103
  optimization: options.optimization,
96
104
  module: {
97
105
  rules: [
@@ -204,7 +212,7 @@ const baseConfig = (options) => ({
204
212
  mainFields: ["browser", "module", "main"],
205
213
  alias: {
206
214
  ...(0, import_helpers.getAlias)(),
207
- ...(options.resolve || {}).alias || {}
215
+ ...options.resolve?.alias ?? {}
208
216
  },
209
217
  plugins: [new import_resolve_typescript_plugin.default({})]
210
218
  },
@@ -213,7 +221,7 @@ const baseConfig = (options) => ({
213
221
  "@elliemae/pui-app-loader": "emuiAppLoader",
214
222
  "@elliemae/pui-diagnostics": "emuiDiagnostics"
215
223
  },
216
- devtool: options.devtool || "eval-source-map",
217
- performance: options.performance || {},
218
- devServer: options.devServer || {}
224
+ devtool: options.devtool ?? "eval-source-map",
225
+ performance: options.performance ?? {},
226
+ devServer: options.devServer ?? {}
219
227
  });
@@ -42,22 +42,21 @@ var import_helpers = require("./helpers.js");
42
42
  var import_webpack_lib_base_babel = require("./webpack.lib.base.babel.js");
43
43
  const { basePath } = (0, import_helpers.getPaths)();
44
44
  const getHtmlWebpackPlugins = () => {
45
- const htmlTemplateFiles = import_fast_glob.default.sync([import_node_path.default.join(process.cwd(), "lib/*.html")]);
45
+ const htmlTemplateFiles = import_fast_glob.default.sync([
46
+ import_node_path.default.join(process.cwd(), "lib", "*.html").replace(/\\/g, "/")
47
+ ]);
46
48
  return htmlTemplateFiles.map(
47
49
  (htmlTemplateFile) => new import_html_webpack_plugin.default({
48
50
  template: htmlTemplateFile,
49
51
  filename: import_node_path.default.basename(htmlTemplateFile),
50
- inject: true
52
+ inject: "head",
53
+ scriptLoading: "defer",
54
+ library: (0, import_helpers.getLibraryVariableName)()
51
55
  })
52
56
  );
53
57
  };
54
58
  var webpack_lib_dev_babel_default = (0, import_webpack_lib_base_babel.baseConfig)({
55
59
  mode: "development",
56
- // output: {
57
- // filename: `js/${libraryName}.js`,
58
- // chunkFilename: `js/${libraryName}.chunk.js`,
59
- // assetModuleFilename: '[name][ext][query]',
60
- // },
61
60
  optimization: {
62
61
  splitChunks: {
63
62
  chunks: "all"
@@ -74,10 +73,7 @@ var webpack_lib_dev_babel_default = (0, import_webpack_lib_base_babel.baseConfig
74
73
  failOnError: false
75
74
  // show a warning when there is a circular dependency
76
75
  }),
77
- new import_mini_css_extract_plugin.default({
78
- // filename: `css/${libraryName}.css`,
79
- // chunkFilename: `css/${libraryName}.chunk.css`,
80
- }),
76
+ new import_mini_css_extract_plugin.default({}),
81
77
  new import_webpack.default.ProgressPlugin()
82
78
  ],
83
79
  devtool: "eval-source-map",
@@ -95,7 +91,7 @@ var webpack_lib_dev_babel_default = (0, import_webpack_lib_base_babel.baseConfig
95
91
  historyApiFallback: true,
96
92
  hot: true,
97
93
  open: [basePath],
98
- port: process.env.PORT || "auto",
94
+ port: process.env.PORT ?? "auto",
99
95
  headers: {
100
96
  "Access-Control-Allow-Origin": "*",
101
97
  "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, PATCH, OPTIONS"
@@ -41,12 +41,16 @@ var import_browserslist_to_esbuild = __toESM(require("browserslist-to-esbuild"),
41
41
  var import_helpers = require("./helpers.js");
42
42
  var import_webpack_lib_base_babel = require("./webpack.lib.base.babel.js");
43
43
  const getHtmlWebpackPlugins = () => {
44
- const htmlTemplateFiles = import_fast_glob.default.sync([import_node_path.default.join(process.cwd(), "lib/*.html")]);
44
+ const htmlTemplateFiles = import_fast_glob.default.sync([
45
+ import_node_path.default.join(process.cwd(), "lib", "*.html").replace(/\\/g, "/")
46
+ ]);
45
47
  return htmlTemplateFiles.map(
46
48
  (htmlTemplateFile) => new import_html_webpack_plugin.default({
47
49
  template: htmlTemplateFile,
48
50
  filename: import_node_path.default.basename(htmlTemplateFile),
49
- inject: true,
51
+ inject: "head",
52
+ scriptLoading: "defer",
53
+ library: (0, import_helpers.getLibraryVariableName)(),
50
54
  minify: {
51
55
  removeComments: true,
52
56
  collapseWhitespace: true,
@@ -82,10 +86,7 @@ const prodConfig = {
82
86
  },
83
87
  plugins: [
84
88
  ...getHtmlWebpackPlugins(),
85
- new import_mini_css_extract_plugin.default({
86
- // filename: `css/${libraryName}.[contenthash].css`,
87
- // chunkFilename: `css/${libraryName}.[contenthash].chunk.css`,
88
- }),
89
+ new import_mini_css_extract_plugin.default({}),
89
90
  ...(0, import_helpers.getCompressionPlugins)(true),
90
91
  new import_webpack_bundle_analyzer.BundleAnalyzerPlugin({
91
92
  analyzerMode: "static",
@@ -111,7 +111,7 @@ const {
111
111
  basePath
112
112
  } = (0, import_helpers.getPaths)();
113
113
  const htmlWebpackPlugin = new import_html_webpack_plugin.default({
114
- inject: !(0, import_helpers.isAppLoaderEnabled)(),
114
+ inject: !(0, import_helpers.isAppLoaderEnabled)() ? "head" : false,
115
115
  template: !(0, import_helpers.isAppLoaderEnabled)() ? "app/index.html" : "app/index-app-loader.html",
116
116
  minify: {
117
117
  removeComments: true,
@@ -134,7 +134,8 @@ const htmlWebpackPlugin = new import_html_webpack_plugin.default({
134
134
  diagnosticsScriptPath,
135
135
  encwLoaderScriptPath,
136
136
  googleTagManager: (0, import_helpers.isGoogleTagManagerEnabled)()
137
- }
137
+ },
138
+ scriptLoading: "defer"
138
139
  });
139
140
  const config = (0, import_webpack_base_babel.baseConfig)(getProdConfig());
140
141
  if (config.plugins)
@@ -28,7 +28,6 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
29
  var webpack_storybook_exports = {};
30
30
  __export(webpack_storybook_exports, {
31
- managerWebpack: () => managerWebpack,
32
31
  webpackFinal: () => webpackFinal
33
32
  });
34
33
  module.exports = __toCommonJS(webpack_storybook_exports);
@@ -97,15 +96,22 @@ const webpackFinal = (config, { configType }) => {
97
96
  config.plugins = config?.plugins?.concat((0, import_helpers.getCompressionPlugins)());
98
97
  }
99
98
  if (config.resolve) {
100
- config.resolve.alias = { ...config?.resolve?.alias, ...(0, import_helpers.getAlias)() };
99
+ config.resolve.alias = {
100
+ ...config?.resolve?.alias,
101
+ ...(0, import_helpers.getAlias)(),
102
+ ...(0, import_helpers.getLibraryAlias)(
103
+ "@reduxjs/toolkit/query/react",
104
+ "@reduxjs/toolkit/dist/query/react/rtk-query-react.modern.mjs"
105
+ )
106
+ };
101
107
  config.resolve.fallback = { ...config.resolve.fallback, crypto: false };
102
108
  config.resolve.extensions?.push(".svg");
103
109
  config.resolve.plugins = [
104
- ...config.resolve.plugins || [],
110
+ ...config.resolve.plugins ?? [],
105
111
  new import_resolve_typescript_plugin.default({})
106
112
  ];
107
113
  }
108
- config.externals = config.externals || {};
114
+ config.externals = config.externals ?? {};
109
115
  if (config.externals) {
110
116
  config.externals["@elliemae/pui-user-monitoring"] = "emuiUserMonitoring";
111
117
  config.externals["@elliemae/pui-app-loader"] = "emuiAppLoader";
@@ -113,10 +119,3 @@ const webpackFinal = (config, { configType }) => {
113
119
  }
114
120
  return config;
115
121
  };
116
- const managerWebpack = (config) => {
117
- if (config.plugins)
118
- config.plugins = config.plugins.concat((0, import_helpers.getCompressionPlugins)());
119
- if (config.resolve)
120
- config.resolve.alias = { ...config.resolve.alias, ...(0, import_helpers.getAlias)() };
121
- return config;
122
- };
@@ -1,25 +1,36 @@
1
1
  import path from "node:path";
2
+ import { inspect } from "node:util";
2
3
  import yargs from "yargs";
3
4
  import {
4
5
  exec,
6
+ logInfo,
5
7
  logError,
6
8
  logSuccess,
7
9
  getCIEnv,
8
10
  isTypeScriptEnabled
9
11
  } from "./utils.js";
10
- const lintCSS = async (fix = false) => {
11
- const fixIssues = fix ? "--fix" : "";
12
+ const lintCSS = async (args) => {
13
+ const fixIssues = args.fix ? "--fix" : "";
14
+ if (args.debug) {
15
+ const configPath = path.join(process.cwd(), "stylelint.config.mjs");
16
+ const config = await import(configPath);
17
+ logInfo("stylelint version:");
18
+ await exec(`stylelint ./{lib,app}/**/*.{js,jsx,ts,tsx} --version`);
19
+ logInfo("stylelint config:");
20
+ logInfo(inspect(config, { depth: null }));
21
+ }
12
22
  await exec(
13
23
  `stylelint ./{lib,app}/**/*.{js,jsx,ts,tsx} ${fixIssues} ${!getCIEnv() ? "--color" : "--no-color"} --allow-empty-input --config ${path.join(
14
24
  process.cwd(),
15
- "stylelint.config.cjs"
25
+ "stylelint.config.mjs"
16
26
  )}`
17
27
  );
18
28
  };
19
- const lintJS = async (fix = false) => {
20
- const fixIssues = fix ? "--fix" : "";
29
+ const lintJS = async (args) => {
30
+ const fixIssues = args.fix ? "--fix" : "";
31
+ const debugFlags = args.debug ? "--env-info --debug" : "";
21
32
  await exec(
22
- `eslint ${!getCIEnv() ? "--color" : "--no-color"} ${fixIssues} .`
33
+ `eslint ${!getCIEnv() ? "--color" : "--no-color"} ${fixIssues} ${debugFlags} .`
23
34
  );
24
35
  };
25
36
  const cmdArgs = {
@@ -37,6 +48,11 @@ const cmdArgs = {
37
48
  boolean: true,
38
49
  alias: "fix",
39
50
  default: false
51
+ },
52
+ debug: {
53
+ boolean: true,
54
+ alias: "debug",
55
+ default: false
40
56
  }
41
57
  };
42
58
  const lintCmd = {
@@ -46,10 +62,12 @@ const lintCmd = {
46
62
  await exec("tsc --noEmit --emitDeclarationOnly false");
47
63
  try {
48
64
  await exec("rimraf ./reports/eslint.json");
49
- await lintJS(argv.fix);
65
+ await lintJS({ ...argv });
50
66
  logSuccess("JS linting completed");
51
67
  } catch (err) {
52
68
  logError("JS linting failed");
69
+ if (argv.debug)
70
+ logError(err);
53
71
  yargs().exit(-1, err);
54
72
  return;
55
73
  }
@@ -57,10 +75,12 @@ const lintCmd = {
57
75
  if (argv.css) {
58
76
  try {
59
77
  await exec("rimraf ./reports/stylelint.json");
60
- await lintCSS(argv.fix);
78
+ await lintCSS({ ...argv });
61
79
  logSuccess("CSS linting completed");
62
80
  } catch (err) {
63
81
  logError("CSS linting failed");
82
+ if (argv.debug)
83
+ logError(err);
64
84
  yargs().exit(-1, err);
65
85
  }
66
86
  }
@@ -5,7 +5,7 @@ import { exec, logError, logSuccess, isApp } from "./utils.js";
5
5
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
6
6
  const startProdServer = async () => {
7
7
  await exec(
8
- `cross-env NODE_ENV=production ts-node --esm ${path.resolve(
8
+ `cross-env NODE_ENV=production tsx ${path.resolve(
9
9
  __dirname,
10
10
  "../server/index.js"
11
11
  )} --color always`
@@ -3,12 +3,12 @@ import { exec, logInfo, logError, logSuccess } from "./utils.js";
3
3
  const buildStoryBook = async (outputDir = "demo", isDoc = false) => {
4
4
  const additionalParams = isDoc ? `--docs -o ${outputDir}/docs` : `-o ${outputDir}`;
5
5
  await exec(
6
- `cross-env NODE_ENV=production build-storybook --quiet ${additionalParams}`
6
+ `cross-env NODE_ENV=production storybook build --quiet ${additionalParams}`
7
7
  );
8
8
  };
9
9
  const startStoryBook = async (isDoc = false) => {
10
10
  await exec(
11
- `cross-env NODE_ENV=development STORYBOOK_BUILD=true start-storybook ${isDoc ? "--docs" : ""} -p 11000 --quiet`
11
+ `cross-env STORYBOOK_BUILD=true storybook dev ${isDoc ? "--docs" : ""} -p 11000 --quiet`
12
12
  );
13
13
  };
14
14
  const cmdArgs = {
@@ -1,13 +1,5 @@
1
1
  import yargs from "yargs";
2
2
  import { exec, logError, logSuccess, getCIEnv } from "./utils.js";
3
- const test = async (commandOptions) => {
4
- await exec(`cross-env NODE_ENV=test jest ${commandOptions}`);
5
- };
6
- const debugTest = async () => {
7
- await exec(
8
- `node --inspect-brk ./node_modules/jest-cli/bin/jest.js --runInBand --watch`
9
- );
10
- };
11
3
  const cmdArgs = {
12
4
  fix: {
13
5
  boolean: true,
@@ -38,24 +30,61 @@ const cmdArgs = {
38
30
  boolean: true,
39
31
  alias: "s",
40
32
  default: false
33
+ },
34
+ coverage: {
35
+ string: true,
36
+ // we want to support "CI" | "false" | "true"
37
+ default: "true"
38
+ },
39
+ maxWorkers: {
40
+ string: true,
41
+ default: "50%"
41
42
  }
42
43
  };
44
+ const getJestFlags = (argv) => {
45
+ const flagsArray = [
46
+ argv.maxWorkers ? `--maxWorkers=${argv.maxWorkers}` : ""
47
+ ];
48
+ const isCi = getCIEnv();
49
+ switch (`${argv.coverage}`) {
50
+ case "CI":
51
+ if (isCi) {
52
+ flagsArray.push("--coverage");
53
+ }
54
+ break;
55
+ case "false":
56
+ break;
57
+ case "true":
58
+ default:
59
+ flagsArray.push("--coverage");
60
+ break;
61
+ }
62
+ if (argv.fix)
63
+ flagsArray.push("-u");
64
+ else if (argv.watch)
65
+ flagsArray.push("--watchAll");
66
+ if (argv.passWithNoTests)
67
+ flagsArray.push("--passWithNoTests");
68
+ if (argv.findReleatedTests)
69
+ flagsArray.push("--bail --findRelatedTests");
70
+ if (argv.silent)
71
+ flagsArray.push("--silent");
72
+ if (isCi)
73
+ flagsArray.push("--ci --no-colors");
74
+ return flagsArray.join(" ");
75
+ };
76
+ const test = async (argv) => {
77
+ const jestFlags = getJestFlags(argv);
78
+ await exec(`cross-env NODE_ENV=test jest ${jestFlags}`);
79
+ };
80
+ const debugTest = async () => {
81
+ await exec(
82
+ `node --inspect-brk ./node_modules/jest-cli/bin/jest.js --runInBand --watch`
83
+ );
84
+ };
43
85
  const testCmd = {
44
86
  // eslint-disable-next-line max-statements
45
87
  handler: async (argv) => {
46
- let commandOptions = "--coverage --maxWorkers=50%";
47
- if (argv.fix)
48
- commandOptions = "-u";
49
- else if (argv.watch)
50
- commandOptions = "--watchAll";
51
- if (getCIEnv())
52
- commandOptions += " --ci --no-colors";
53
- if (argv.passWithNoTests)
54
- commandOptions += " --passWithNoTests";
55
- if (argv.findReleatedTests)
56
- commandOptions += " --bail --findRelatedTests";
57
- if (argv.silent)
58
- commandOptions += " --silent";
59
88
  try {
60
89
  if (getCIEnv()) {
61
90
  await exec("rimraf ./reports");
@@ -63,7 +92,7 @@ const testCmd = {
63
92
  if (argv.debug) {
64
93
  await debugTest();
65
94
  } else {
66
- await test(commandOptions);
95
+ await test(argv);
67
96
  }
68
97
  logSuccess("Unit test execution completed");
69
98
  } catch (err) {
@@ -31,6 +31,7 @@ const browsersMapping = {
31
31
  };
32
32
  const exec = async (command, options = { stdio: "inherit" }) => execaCommand(command, options);
33
33
  const logInfo = console.log;
34
+ const logWarning = (...args) => console.log(chalk.yellow(...args));
34
35
  const logSuccess = (...args) => console.log(chalk.green(...args));
35
36
  const logError = console.error;
36
37
  const readPackageLock = async () => {
@@ -52,7 +53,7 @@ const getSupportedBrowsers = async () => {
52
53
  return browserVersions.reduce((acc, nameVersion) => {
53
54
  const [name, version] = nameVersion.split(" ");
54
55
  const versionRange = version.split("-");
55
- acc[browsersMapping[name]] = versionRange && versionRange[0] || version;
56
+ acc[browsersMapping[name]] = versionRange?.[0] ?? version;
56
57
  return acc;
57
58
  }, {});
58
59
  };
@@ -122,7 +123,9 @@ const updateManifestWithVersionInfo = async (dest) => {
122
123
  const updateRuntimeFile = async (src, dest, version) => {
123
124
  const latestJSFolder = "latest/js";
124
125
  const pipe = promisify(pipeline);
125
- const results = await fg([path.join(src, "runtime~app.*.js")]);
126
+ const results = await fg([
127
+ path.join(src, "runtime~app.*.js").replace(/\\/g, "/")
128
+ ]);
126
129
  if (!results?.length)
127
130
  throw new Error("Runtime file not found");
128
131
  const runtimeFilePath = results[0];
@@ -176,15 +179,43 @@ const isPathExist = async (pathToCheck) => {
176
179
  const isApp = async () => isPathExist(path.join(process.cwd(), "app"));
177
180
  const getCIEnv = () => process.env.CI === "true";
178
181
  const isTypeScriptEnabled = () => fs.existsSync(path.join(process.cwd(), "tsconfig.json"));
182
+ const getUnspecifiedOptions = (options, command) => {
183
+ const rawArgs = process.argv.slice(2);
184
+ const rawArgsMap = /* @__PURE__ */ new Map();
185
+ rawArgs.forEach((arg) => {
186
+ const [key, value] = arg.split("=");
187
+ const keyWithoutPrefix = key.replace(/^-{1,2}/, "");
188
+ rawArgsMap.set(keyWithoutPrefix, value || true);
189
+ });
190
+ const expectedOptionsMap = /* @__PURE__ */ new Map();
191
+ Object.entries(options).forEach(([key, value]) => {
192
+ expectedOptionsMap.set(key, value);
193
+ if (value.alias)
194
+ expectedOptionsMap.set(value.alias, value);
195
+ });
196
+ const unspecifiedOptions = {};
197
+ rawArgsMap.forEach((value, key) => {
198
+ if (key === command)
199
+ return;
200
+ if (key === "")
201
+ return;
202
+ if (!expectedOptionsMap.has(key)) {
203
+ unspecifiedOptions[key] = value;
204
+ }
205
+ });
206
+ return unspecifiedOptions;
207
+ };
179
208
  export {
180
209
  copyBuildAssetsToVersionedFolder,
181
210
  exec,
182
211
  getCIEnv,
212
+ getUnspecifiedOptions,
183
213
  isApp,
184
214
  isPathExist,
185
215
  isTypeScriptEnabled,
186
216
  logError,
187
217
  logInfo,
188
218
  logSuccess,
219
+ logWarning,
189
220
  writeAppInfo
190
221
  };
@@ -5,7 +5,6 @@ const {
5
5
  const {
6
6
  esReactConfig: eslintConfig,
7
7
  } = require('./lint-config/eslint/react.cjs');
8
- const { stylelintConfig } = require('./lint-config/stylelint.config.cjs');
9
8
  const { prettierConfig } = require('./lint-config/prettier.config.cjs');
10
9
  const { commitlintConfig } = require('./lint-config/commitlint.config.cjs');
11
10
  const { jestConfig } = require('./testing/jest.config.cjs');
@@ -15,7 +14,6 @@ module.exports = {
15
14
  babelConfig,
16
15
  eslintBaseConfig,
17
16
  eslintConfig,
18
- stylelintConfig,
19
17
  prettierConfig,
20
18
  commitlintConfig,
21
19
  jestConfig,
package/dist/esm/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { babelConfig } from "./babel.config.cjs";
2
2
  import { esConfig } from "./lint-config/eslint/non-react.cjs";
3
3
  import { esReactConfig } from "./lint-config/eslint/react.cjs";
4
- import { stylelintConfig } from "./lint-config/stylelint.config.cjs";
4
+ import { stylelintConfig } from "./lint-config/stylelint.config.js";
5
5
  import { prettierConfig } from "./lint-config/prettier.config.cjs";
6
6
  import { commitlintConfig } from "./lint-config/commitlint.config.cjs";
7
7
  import { jestConfig } from "./testing/jest.config.cjs";
@@ -9,6 +9,7 @@ import { vitestConfig } from "./testing/vitest.config.js";
9
9
  import { jestNodeConfig } from "./testing/jest.node.config.cjs";
10
10
  import { lintStagedConfig } from "./lint-config/lint-staged.config.js";
11
11
  import { loadRoutes } from "./server/appRoutes.js";
12
+ import { webpackFinal } from "./webpack/webpack.storybook.js";
12
13
  export {
13
14
  babelConfig,
14
15
  commitlintConfig,
@@ -20,5 +21,6 @@ export {
20
21
  loadRoutes,
21
22
  prettierConfig,
22
23
  stylelintConfig,
23
- vitestConfig
24
+ vitestConfig,
25
+ webpackFinal
24
26
  };
@@ -1,5 +1,5 @@
1
1
  /* eslint-disable max-lines */
2
- const prettierOptions = require("../prettier.config.cjs");
2
+ const { prettierConfig } = require("../prettier.config.cjs");
3
3
  // const webpackConfig = require('../../webpack/webpack.prod.babel');
4
4
 
5
5
  exports.baseExtends = [
@@ -26,7 +26,7 @@ exports.baseOverrides = [
26
26
  ];
27
27
 
28
28
  const baseRules = {
29
- "prettier/prettier": ["error", prettierOptions],
29
+ "prettier/prettier": ["error", prettierConfig],
30
30
  "arrow-body-style": [2, "as-needed"],
31
31
  "class-methods-use-this": 0,
32
32
  "import/imports-first": 0,
@@ -152,6 +152,7 @@ exports.baseConfig = {
152
152
  },
153
153
  ignorePatterns: [
154
154
  "/build/**/*",
155
+ "/node_modules/**/*",
155
156
  "/dist/**/*",
156
157
  "/reports/**/*",
157
158
  "/coverage/**/*",
@@ -1,9 +1,9 @@
1
1
  const { baseExtends, basePlugins } = require('../common.cjs');
2
2
 
3
3
  exports.tsBaseExtends = [
4
- 'plugin:@typescript-eslint/recommended',
5
4
  'plugin:import/typescript',
6
- 'plugin:@typescript-eslint/recommended-requiring-type-checking',
5
+ 'plugin:@typescript-eslint/recommended-type-checked',
6
+ 'plugin:@typescript-eslint/stylistic-type-checked',
7
7
  ].concat(baseExtends);
8
8
 
9
9
  exports.tsBaseRules = {
@@ -34,7 +34,7 @@ exports.tsBaseConfig = {
34
34
  plugins: ['@typescript-eslint'].concat(basePlugins),
35
35
  parserOptions: {
36
36
  tsconfigRootDir: process.cwd(),
37
- project: 'tsconfig.json',
37
+ project: true,
38
38
  },
39
39
  settings: {
40
40
  'import/resolver': {