@servicetitan/startup 22.17.0 → 22.19.0

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 (321) hide show
  1. package/dist/cli/commands/build.d.ts +3 -2
  2. package/dist/cli/commands/build.d.ts.map +1 -1
  3. package/dist/cli/commands/build.js +1 -0
  4. package/dist/cli/commands/build.js.map +1 -1
  5. package/dist/cli/commands/bundle-package.d.ts +2 -1
  6. package/dist/cli/commands/bundle-package.d.ts.map +1 -1
  7. package/dist/cli/commands/bundle-package.js +4 -3
  8. package/dist/cli/commands/bundle-package.js.map +1 -1
  9. package/dist/cli/commands/mfe-publish.d.ts +1 -0
  10. package/dist/cli/commands/mfe-publish.d.ts.map +1 -1
  11. package/dist/cli/commands/mfe-publish.js +3 -2
  12. package/dist/cli/commands/mfe-publish.js.map +1 -1
  13. package/dist/cli/commands/start.d.ts +3 -2
  14. package/dist/cli/commands/start.d.ts.map +1 -1
  15. package/dist/cli/commands/start.js +3 -2
  16. package/dist/cli/commands/start.js.map +1 -1
  17. package/dist/cli/utils/bundle.d.ts +7 -2
  18. package/dist/cli/utils/bundle.d.ts.map +1 -1
  19. package/dist/cli/utils/bundle.js +28 -58
  20. package/dist/cli/utils/bundle.js.map +1 -1
  21. package/dist/cli/utils/set-node-options.d.ts.map +1 -1
  22. package/dist/cli/utils/set-node-options.js +1 -1
  23. package/dist/cli/utils/set-node-options.js.map +1 -1
  24. package/dist/utils/debug.d.ts +5 -0
  25. package/dist/utils/debug.d.ts.map +1 -0
  26. package/dist/utils/debug.js +19 -0
  27. package/dist/utils/debug.js.map +1 -0
  28. package/dist/utils/get-configuration.d.ts +1 -0
  29. package/dist/utils/get-configuration.d.ts.map +1 -1
  30. package/dist/utils/get-configuration.js +6 -1
  31. package/dist/utils/get-configuration.js.map +1 -1
  32. package/dist/utils/log.d.ts +6 -0
  33. package/dist/utils/log.d.ts.map +1 -1
  34. package/dist/utils/log.js +22 -0
  35. package/dist/utils/log.js.map +1 -1
  36. package/dist/webpack/__mocks__/file-rules.d.ts +3 -0
  37. package/dist/webpack/__mocks__/file-rules.d.ts.map +1 -0
  38. package/dist/webpack/__mocks__/file-rules.js +31 -0
  39. package/dist/webpack/__mocks__/file-rules.js.map +1 -0
  40. package/dist/webpack/__mocks__/index.d.ts +3 -0
  41. package/dist/webpack/__mocks__/index.d.ts.map +1 -0
  42. package/dist/webpack/__mocks__/index.js +19 -0
  43. package/dist/webpack/__mocks__/index.js.map +1 -0
  44. package/dist/webpack/__mocks__/style-rules.d.ts +8 -0
  45. package/dist/webpack/__mocks__/style-rules.d.ts.map +1 -0
  46. package/dist/webpack/__mocks__/style-rules.js +124 -0
  47. package/dist/webpack/__mocks__/style-rules.js.map +1 -0
  48. package/dist/webpack/configs/cache-config.d.ts +6 -0
  49. package/dist/webpack/configs/cache-config.d.ts.map +1 -0
  50. package/dist/webpack/configs/cache-config.js +24 -0
  51. package/dist/webpack/configs/cache-config.js.map +1 -0
  52. package/dist/webpack/configs/dev-server-config.d.ts +6 -0
  53. package/dist/webpack/configs/dev-server-config.d.ts.map +1 -0
  54. package/dist/webpack/configs/dev-server-config.js +27 -0
  55. package/dist/webpack/configs/dev-server-config.js.map +1 -0
  56. package/dist/webpack/configs/devtool-config.d.ts +6 -0
  57. package/dist/webpack/configs/devtool-config.d.ts.map +1 -0
  58. package/dist/webpack/configs/devtool-config.js +16 -0
  59. package/dist/webpack/configs/devtool-config.js.map +1 -0
  60. package/dist/webpack/configs/entry.config.d.ts +6 -0
  61. package/dist/webpack/configs/entry.config.d.ts.map +1 -0
  62. package/dist/webpack/configs/entry.config.js +14 -0
  63. package/dist/webpack/configs/entry.config.js.map +1 -0
  64. package/dist/webpack/configs/externals-config.d.ts +6 -0
  65. package/dist/webpack/configs/externals-config.d.ts.map +1 -0
  66. package/dist/webpack/configs/externals-config.js +16 -0
  67. package/dist/webpack/configs/externals-config.js.map +1 -0
  68. package/dist/webpack/configs/index.d.ts +13 -0
  69. package/dist/webpack/configs/index.d.ts.map +1 -0
  70. package/dist/webpack/configs/index.js +29 -0
  71. package/dist/webpack/configs/index.js.map +1 -0
  72. package/dist/webpack/configs/loaders/css-loader.d.ts +14 -0
  73. package/dist/webpack/configs/loaders/css-loader.d.ts.map +1 -0
  74. package/dist/webpack/configs/loaders/css-loader.js +17 -0
  75. package/dist/webpack/configs/loaders/css-loader.js.map +1 -0
  76. package/dist/webpack/configs/loaders/index.d.ts +5 -0
  77. package/dist/webpack/configs/loaders/index.d.ts.map +1 -0
  78. package/dist/webpack/configs/loaders/index.js +21 -0
  79. package/dist/webpack/configs/loaders/index.js.map +1 -0
  80. package/dist/webpack/configs/loaders/less-loader.d.ts +9 -0
  81. package/dist/webpack/configs/loaders/less-loader.d.ts.map +1 -0
  82. package/dist/webpack/configs/loaders/less-loader.js +8 -0
  83. package/dist/webpack/configs/loaders/less-loader.js.map +1 -0
  84. package/dist/webpack/configs/loaders/style-loader.d.ts +9 -0
  85. package/dist/webpack/configs/loaders/style-loader.d.ts.map +1 -0
  86. package/dist/webpack/configs/loaders/style-loader.js +13 -0
  87. package/dist/webpack/configs/loaders/style-loader.js.map +1 -0
  88. package/dist/webpack/configs/loaders/types.d.ts +4 -0
  89. package/dist/webpack/configs/loaders/types.d.ts.map +1 -0
  90. package/dist/webpack/configs/loaders/types.js +3 -0
  91. package/dist/webpack/configs/loaders/types.js.map +1 -0
  92. package/dist/webpack/configs/module-config.d.ts +6 -0
  93. package/dist/webpack/configs/module-config.d.ts.map +1 -0
  94. package/dist/webpack/configs/module-config.js +10 -0
  95. package/dist/webpack/configs/module-config.js.map +1 -0
  96. package/dist/webpack/configs/optimization-config.d.ts +6 -0
  97. package/dist/webpack/configs/optimization-config.d.ts.map +1 -0
  98. package/dist/webpack/configs/optimization-config.js +57 -0
  99. package/dist/webpack/configs/optimization-config.js.map +1 -0
  100. package/dist/webpack/configs/output-config.d.ts +6 -0
  101. package/dist/webpack/configs/output-config.d.ts.map +1 -0
  102. package/dist/webpack/configs/output-config.js +23 -0
  103. package/dist/webpack/configs/output-config.js.map +1 -0
  104. package/dist/webpack/configs/plugins/assets-manifest-plugin.d.ts +4 -0
  105. package/dist/webpack/configs/plugins/assets-manifest-plugin.d.ts.map +1 -0
  106. package/dist/webpack/configs/plugins/assets-manifest-plugin.js +34 -0
  107. package/dist/webpack/configs/plugins/assets-manifest-plugin.js.map +1 -0
  108. package/dist/webpack/configs/plugins/bundle-analyser-plugin.d.ts +3 -0
  109. package/dist/webpack/configs/plugins/bundle-analyser-plugin.d.ts.map +1 -0
  110. package/dist/webpack/configs/plugins/bundle-analyser-plugin.js +20 -0
  111. package/dist/webpack/configs/plugins/bundle-analyser-plugin.js.map +1 -0
  112. package/dist/webpack/configs/plugins/define-exposed-dependencies-plugin.d.ts +4 -0
  113. package/dist/webpack/configs/plugins/define-exposed-dependencies-plugin.d.ts.map +1 -0
  114. package/dist/webpack/configs/plugins/define-exposed-dependencies-plugin.js +25 -0
  115. package/dist/webpack/configs/plugins/define-exposed-dependencies-plugin.js.map +1 -0
  116. package/dist/webpack/configs/plugins/define-web-component-name-plugin.d.ts +4 -0
  117. package/dist/webpack/configs/plugins/define-web-component-name-plugin.d.ts.map +1 -0
  118. package/dist/webpack/configs/plugins/define-web-component-name-plugin.js +16 -0
  119. package/dist/webpack/configs/plugins/define-web-component-name-plugin.js.map +1 -0
  120. package/dist/webpack/configs/plugins/filter-warnings-plugin.d.ts +3 -0
  121. package/dist/webpack/configs/plugins/filter-warnings-plugin.d.ts.map +1 -0
  122. package/dist/webpack/configs/plugins/filter-warnings-plugin.js +14 -0
  123. package/dist/webpack/configs/plugins/filter-warnings-plugin.js.map +1 -0
  124. package/dist/webpack/configs/plugins/html-plugin.d.ts +4 -0
  125. package/dist/webpack/configs/plugins/html-plugin.d.ts.map +1 -0
  126. package/dist/webpack/configs/plugins/html-plugin.js +42 -0
  127. package/dist/webpack/configs/plugins/html-plugin.js.map +1 -0
  128. package/dist/webpack/configs/plugins/index.d.ts +12 -0
  129. package/dist/webpack/configs/plugins/index.d.ts.map +1 -0
  130. package/dist/webpack/configs/plugins/index.js +28 -0
  131. package/dist/webpack/configs/plugins/index.js.map +1 -0
  132. package/dist/webpack/configs/plugins/mini-css-extract-plugin.d.ts +4 -0
  133. package/dist/webpack/configs/plugins/mini-css-extract-plugin.d.ts.map +1 -0
  134. package/dist/webpack/configs/plugins/mini-css-extract-plugin.js +23 -0
  135. package/dist/webpack/configs/plugins/mini-css-extract-plugin.js.map +1 -0
  136. package/dist/webpack/configs/plugins/moment-locales-plugin.d.ts +4 -0
  137. package/dist/webpack/configs/plugins/moment-locales-plugin.d.ts.map +1 -0
  138. package/dist/webpack/configs/plugins/moment-locales-plugin.js +14 -0
  139. package/dist/webpack/configs/plugins/moment-locales-plugin.js.map +1 -0
  140. package/dist/webpack/configs/plugins/provide-react-plugin.d.ts +4 -0
  141. package/dist/webpack/configs/plugins/provide-react-plugin.d.ts.map +1 -0
  142. package/dist/webpack/configs/plugins/provide-react-plugin.js +14 -0
  143. package/dist/webpack/configs/plugins/provide-react-plugin.js.map +1 -0
  144. package/dist/webpack/configs/plugins/ts-checker-plugin.d.ts +4 -0
  145. package/dist/webpack/configs/plugins/ts-checker-plugin.d.ts.map +1 -0
  146. package/dist/webpack/configs/plugins/ts-checker-plugin.js +31 -0
  147. package/dist/webpack/configs/plugins/ts-checker-plugin.js.map +1 -0
  148. package/dist/webpack/configs/plugins/virtual-modules-plugin.d.ts +4 -0
  149. package/dist/webpack/configs/plugins/virtual-modules-plugin.d.ts.map +1 -0
  150. package/dist/webpack/configs/plugins/virtual-modules-plugin.js +42 -0
  151. package/dist/webpack/configs/plugins/virtual-modules-plugin.js.map +1 -0
  152. package/dist/webpack/configs/plugins-config.d.ts +6 -0
  153. package/dist/webpack/configs/plugins-config.d.ts.map +1 -0
  154. package/dist/webpack/configs/plugins-config.js +24 -0
  155. package/dist/webpack/configs/plugins-config.js.map +1 -0
  156. package/dist/webpack/configs/resolve-config.d.ts +6 -0
  157. package/dist/webpack/configs/resolve-config.d.ts.map +1 -0
  158. package/dist/webpack/configs/resolve-config.js +11 -0
  159. package/dist/webpack/configs/resolve-config.js.map +1 -0
  160. package/dist/webpack/configs/rules/css-rules.d.ts +4 -0
  161. package/dist/webpack/configs/rules/css-rules.d.ts.map +1 -0
  162. package/dist/webpack/configs/rules/css-rules.js +35 -0
  163. package/dist/webpack/configs/rules/css-rules.js.map +1 -0
  164. package/dist/webpack/configs/rules/font-rules.d.ts +4 -0
  165. package/dist/webpack/configs/rules/font-rules.d.ts.map +1 -0
  166. package/dist/webpack/configs/rules/font-rules.js +16 -0
  167. package/dist/webpack/configs/rules/font-rules.js.map +1 -0
  168. package/dist/webpack/configs/rules/image-rules.d.ts +4 -0
  169. package/dist/webpack/configs/rules/image-rules.d.ts.map +1 -0
  170. package/dist/webpack/configs/rules/image-rules.js +16 -0
  171. package/dist/webpack/configs/rules/image-rules.js.map +1 -0
  172. package/dist/webpack/configs/rules/index.d.ts +8 -0
  173. package/dist/webpack/configs/rules/index.d.ts.map +1 -0
  174. package/dist/webpack/configs/rules/index.js +24 -0
  175. package/dist/webpack/configs/rules/index.js.map +1 -0
  176. package/dist/webpack/configs/rules/js-rules.d.ts +4 -0
  177. package/dist/webpack/configs/rules/js-rules.d.ts.map +1 -0
  178. package/dist/webpack/configs/rules/js-rules.js +19 -0
  179. package/dist/webpack/configs/rules/js-rules.js.map +1 -0
  180. package/dist/webpack/configs/rules/less-rules.d.ts +4 -0
  181. package/dist/webpack/configs/rules/less-rules.d.ts.map +1 -0
  182. package/dist/webpack/configs/rules/less-rules.js +23 -0
  183. package/dist/webpack/configs/rules/less-rules.js.map +1 -0
  184. package/dist/webpack/configs/rules/scss-rules.d.ts +4 -0
  185. package/dist/webpack/configs/rules/scss-rules.d.ts.map +1 -0
  186. package/dist/webpack/configs/rules/scss-rules.js +23 -0
  187. package/dist/webpack/configs/rules/scss-rules.js.map +1 -0
  188. package/dist/webpack/configs/rules/tsx-rules.d.ts +4 -0
  189. package/dist/webpack/configs/rules/tsx-rules.d.ts.map +1 -0
  190. package/dist/webpack/configs/rules/tsx-rules.js +23 -0
  191. package/dist/webpack/configs/rules/tsx-rules.js.map +1 -0
  192. package/dist/webpack/configs/rules-config.d.ts +9 -0
  193. package/dist/webpack/configs/rules-config.d.ts.map +1 -0
  194. package/dist/webpack/configs/rules-config.js +31 -0
  195. package/dist/webpack/configs/rules-config.js.map +1 -0
  196. package/dist/webpack/configs/stats-config.d.ts +6 -0
  197. package/dist/webpack/configs/stats-config.d.ts.map +1 -0
  198. package/dist/webpack/configs/stats-config.js +16 -0
  199. package/dist/webpack/configs/stats-config.js.map +1 -0
  200. package/dist/webpack/configs/types.d.ts +15 -0
  201. package/dist/webpack/configs/types.d.ts.map +1 -0
  202. package/dist/webpack/configs/types.js +3 -0
  203. package/dist/webpack/configs/types.js.map +1 -0
  204. package/dist/webpack/configs/utils/generate-metadata.d.ts +3 -0
  205. package/dist/webpack/configs/utils/generate-metadata.d.ts.map +1 -0
  206. package/dist/webpack/configs/utils/generate-metadata.js +31 -0
  207. package/dist/webpack/configs/utils/generate-metadata.js.map +1 -0
  208. package/dist/webpack/configs/utils/get-startup-version.d.ts +2 -0
  209. package/dist/webpack/configs/utils/get-startup-version.d.ts.map +1 -0
  210. package/dist/webpack/configs/utils/get-startup-version.js +13 -0
  211. package/dist/webpack/configs/utils/get-startup-version.js.map +1 -0
  212. package/dist/webpack/configs/utils/index.d.ts +2 -0
  213. package/dist/webpack/configs/utils/index.d.ts.map +1 -0
  214. package/dist/webpack/configs/utils/index.js +18 -0
  215. package/dist/webpack/configs/utils/index.js.map +1 -0
  216. package/dist/webpack/create-webpack-config.d.ts +4 -0
  217. package/dist/webpack/create-webpack-config.d.ts.map +1 -0
  218. package/dist/webpack/create-webpack-config.js +67 -0
  219. package/dist/webpack/create-webpack-config.js.map +1 -0
  220. package/dist/webpack/index.d.ts +2 -10
  221. package/dist/webpack/index.d.ts.map +1 -1
  222. package/dist/webpack/index.js +16 -21
  223. package/dist/webpack/index.js.map +1 -1
  224. package/dist/webpack/types.d.ts +18 -0
  225. package/dist/webpack/types.d.ts.map +1 -0
  226. package/dist/webpack/types.js +3 -0
  227. package/dist/webpack/types.js.map +1 -0
  228. package/dist/webpack/utils/index.d.ts +5 -0
  229. package/dist/webpack/utils/index.d.ts.map +1 -0
  230. package/dist/webpack/utils/index.js +21 -0
  231. package/dist/webpack/utils/index.js.map +1 -0
  232. package/package.json +5 -4
  233. package/src/cli/commands/__tests__/build.test.ts +13 -0
  234. package/src/cli/commands/__tests__/bundle-package.test.ts +27 -4
  235. package/src/cli/commands/__tests__/mfe-package-publish.test.ts +10 -0
  236. package/src/cli/commands/__tests__/mfe-publish.test.ts +1 -0
  237. package/src/cli/commands/__tests__/start.test.ts +15 -0
  238. package/src/cli/commands/build.ts +4 -2
  239. package/src/cli/commands/bundle-package.ts +7 -4
  240. package/src/cli/commands/mfe-publish.ts +3 -1
  241. package/src/cli/commands/start.ts +6 -4
  242. package/src/cli/utils/__tests__/bundle.test.ts +142 -111
  243. package/src/cli/utils/__tests__/set-node-options.test.ts +4 -4
  244. package/src/cli/utils/bundle.ts +37 -118
  245. package/src/cli/utils/set-node-options.ts +2 -2
  246. package/src/utils/__tests__/get-configuration.test.ts +46 -0
  247. package/src/utils/__tests__/log.test.ts +43 -1
  248. package/src/utils/debug.ts +13 -0
  249. package/src/utils/get-configuration.ts +5 -1
  250. package/src/utils/log.ts +22 -0
  251. package/src/webpack/__mocks__/file-rules.ts +29 -0
  252. package/src/webpack/__mocks__/index.ts +2 -0
  253. package/src/webpack/__mocks__/style-rules.ts +126 -0
  254. package/src/webpack/__tests__/create-webpack-config-shared-dependencies.test.ts +162 -0
  255. package/src/webpack/__tests__/create-webpack-config-web-component.test.ts +331 -0
  256. package/src/webpack/__tests__/create-webpack-config.test.ts +400 -42
  257. package/src/webpack/configs/cache-config.ts +25 -0
  258. package/src/webpack/configs/dev-server-config.ts +43 -0
  259. package/src/webpack/configs/devtool-config.ts +18 -0
  260. package/src/webpack/configs/entry.config.ts +18 -0
  261. package/src/webpack/configs/externals-config.ts +21 -0
  262. package/src/webpack/configs/index.ts +12 -0
  263. package/src/webpack/configs/loaders/css-loader.ts +19 -0
  264. package/src/webpack/configs/loaders/index.ts +4 -0
  265. package/src/webpack/configs/loaders/less-loader.ts +3 -0
  266. package/src/webpack/configs/loaders/style-loader.ts +11 -0
  267. package/src/webpack/configs/loaders/types.ts +3 -0
  268. package/src/webpack/configs/module-config.ts +12 -0
  269. package/src/webpack/configs/optimization-config.ts +63 -0
  270. package/src/webpack/configs/output-config.ts +28 -0
  271. package/src/webpack/configs/plugins/assets-manifest-plugin.ts +34 -0
  272. package/src/webpack/configs/plugins/bundle-analyser-plugin.ts +18 -0
  273. package/src/webpack/configs/plugins/define-exposed-dependencies-plugin.ts +29 -0
  274. package/src/webpack/configs/plugins/define-web-component-name-plugin.ts +14 -0
  275. package/src/webpack/configs/plugins/filter-warnings-plugin.ts +12 -0
  276. package/src/webpack/configs/plugins/html-plugin.ts +53 -0
  277. package/src/webpack/configs/plugins/index.ts +11 -0
  278. package/src/webpack/configs/plugins/mini-css-extract-plugin.ts +19 -0
  279. package/src/webpack/configs/plugins/moment-locales-plugin.ts +8 -0
  280. package/src/webpack/configs/plugins/provide-react-plugin.ts +12 -0
  281. package/src/webpack/configs/plugins/ts-checker-plugin.ts +33 -0
  282. package/src/webpack/configs/plugins/virtual-modules-plugin.ts +42 -0
  283. package/src/webpack/configs/plugins-config.ts +38 -0
  284. package/src/webpack/configs/resolve-config.ts +13 -0
  285. package/src/webpack/configs/rules/css-rules.ts +36 -0
  286. package/src/webpack/configs/rules/font-rules.ts +14 -0
  287. package/src/webpack/configs/rules/image-rules.ts +14 -0
  288. package/src/webpack/configs/rules/index.ts +7 -0
  289. package/src/webpack/configs/rules/js-rules.ts +17 -0
  290. package/src/webpack/configs/rules/less-rules.ts +21 -0
  291. package/src/webpack/configs/rules/scss-rules.ts +21 -0
  292. package/src/webpack/configs/rules/tsx-rules.ts +22 -0
  293. package/src/webpack/configs/rules-config.ts +38 -0
  294. package/src/webpack/configs/stats-config.ts +18 -0
  295. package/src/webpack/configs/types.ts +15 -0
  296. package/src/webpack/configs/utils/__tests__/generate-metadata.test.ts +77 -0
  297. package/src/webpack/configs/utils/__tests__/get-startup-version.test.ts +27 -0
  298. package/src/webpack/configs/utils/generate-metadata.ts +30 -0
  299. package/src/webpack/configs/utils/get-startup-version.ts +8 -0
  300. package/src/webpack/configs/utils/index.ts +1 -0
  301. package/src/webpack/create-webpack-config.ts +110 -0
  302. package/src/webpack/index.ts +2 -52
  303. package/{dist/webpack/shared.config.d.ts → src/webpack/types.ts} +10 -4
  304. package/src/webpack/utils/index.ts +4 -0
  305. package/dist/webpack/development.config.d.ts +0 -11
  306. package/dist/webpack/development.config.d.ts.map +0 -1
  307. package/dist/webpack/development.config.js +0 -191
  308. package/dist/webpack/development.config.js.map +0 -1
  309. package/dist/webpack/production.config.d.ts +0 -14
  310. package/dist/webpack/production.config.d.ts.map +0 -1
  311. package/dist/webpack/production.config.js +0 -172
  312. package/dist/webpack/production.config.js.map +0 -1
  313. package/dist/webpack/shared.config.d.ts.map +0 -1
  314. package/dist/webpack/shared.config.js +0 -268
  315. package/dist/webpack/shared.config.js.map +0 -1
  316. package/src/webpack/__tests__/create-development-config.test.ts +0 -306
  317. package/src/webpack/__tests__/create-production-config.test.ts +0 -231
  318. package/src/webpack/__tests__/create-shared-config.test.ts +0 -508
  319. package/src/webpack/development.config.ts +0 -237
  320. package/src/webpack/production.config.ts +0 -197
  321. package/src/webpack/shared.config.ts +0 -360
@@ -1,4 +1,3 @@
1
- import fs from 'fs';
2
1
  import mockFS from 'mock-fs';
3
2
  import path from 'path';
4
3
  import webpack from 'webpack';
@@ -44,45 +43,36 @@ describe('[startup] Cli Utils', () => {
44
43
  return expect.stringContaining(name);
45
44
  }
46
45
 
47
- function generatedMetadata(destination: string) {
48
- return JSON.parse(fs.readFileSync(`${destination}/metadata.json`, 'utf8'));
49
- }
50
-
51
46
  function packageFS() {
52
47
  return { 'package.json': JSON.stringify(pkg) };
53
48
  }
54
49
 
55
- function webComponentFS(startupVersion: string) {
56
- return {
57
- 'package.json': JSON.stringify({ ...pkg, cli: { 'web-component': true } }),
58
- // eslint-disable-next-line @typescript-eslint/naming-convention
59
- 'node_modules': {
60
- '@servicetitan': {
61
- 'package.json': JSON.stringify({ version: startupVersion }),
62
- 'startup': { 'index.js': '' },
63
- },
64
- },
65
- };
50
+ function webComponentFS() {
51
+ return { 'package.json': JSON.stringify({ ...pkg, cli: { 'web-component': true } }) };
66
52
  }
67
53
 
68
54
  describe(`${bundle.name}`, () => {
69
- const customProdConfig = { configuration: { foo: 'bar' }, plugins: { baz: 'qux' } };
55
+ const prodConfig = { configuration: { foo: 'bar' }, plugins: { baz: 'qux' } };
56
+ const customConfig = { configuration: { baz: 'qux' }, plugins: { foo: 'bar' } };
57
+ const customConfigFileName = 'custom.prod.config.js';
70
58
  const stats: Partial<webpack.Stats> = { hasErrors: () => false, toString: () => 'foo' };
71
- let buildStat: boolean;
59
+
60
+ let options: Parameters<typeof bundle>[0];
72
61
  let stdoutSpy: jest.SpyInstance;
73
62
 
74
63
  beforeEach(() => {
75
64
  mockFS(packageFS());
65
+ options = { buildStat: false };
66
+ stdoutSpy = jest.spyOn(process.stdout, 'write').mockImplementation(jest.fn());
67
+ compiler.run = jest.fn(callback => callback(null, stats as any));
76
68
  // Allows config file to be loaded with require(...)
77
- jest.doMock(path.resolve(webpackProdConfigFileName), () => customProdConfig, {
69
+ jest.doMock(path.resolve(webpackProdConfigFileName), () => prodConfig, {
78
70
  virtual: true,
79
71
  });
80
- buildStat = false;
81
- stdoutSpy = jest.spyOn(process.stdout, 'write').mockImplementation(jest.fn());
82
- compiler.run = jest.fn(callback => callback(null, stats as any));
72
+ jest.doMock(path.resolve(customConfigFileName), () => customConfig, { virtual: true });
83
73
  });
84
74
 
85
- const subject = async () => bundle(buildStat);
75
+ const subject = async () => bundle(options);
86
76
 
87
77
  test('runs webpack and outputs stats', async () => {
88
78
  const toStringSpy = jest.spyOn(stats, 'toString');
@@ -91,7 +81,7 @@ describe('[startup] Cli Utils', () => {
91
81
 
92
82
  expect(createWebpackConfig).toHaveBeenCalledWith(
93
83
  { configuration: { mode: 'production' } },
94
- { buildStat, name: expectPackageName() }
84
+ { buildStat: options?.buildStat, name: expectPackageName() }
95
85
  );
96
86
  expect(webpack).toHaveBeenCalledWith(createWebpackResult);
97
87
  expect(compiler.run).toHaveBeenCalled();
@@ -137,99 +127,105 @@ describe('[startup] Cli Utils', () => {
137
127
  });
138
128
  });
139
129
 
130
+ function itUsesConfig(params: { config: () => Record<string, any>; name: string }) {
131
+ test(`uses ${params.name}`, async () => {
132
+ await subject();
133
+
134
+ expect(webpack).toHaveBeenCalledWith(params.config());
135
+ });
136
+ }
137
+
140
138
  describe(`with ${webpackProdConfigFileName} config`, () => {
141
- beforeEach(() => mockFS({ ...packageFS(), [webpackProdConfigFileName]: '' }));
139
+ const FS = { ...packageFS(), [webpackProdConfigFileName]: '' };
142
140
 
143
- test('uses config', async () => {
144
- await subject();
141
+ beforeEach(() => mockFS(FS));
142
+
143
+ itUsesConfig({ name: webpackProdConfigFileName, config: () => prodConfig });
144
+
145
+ describe('with custom config', () => {
146
+ beforeEach(() => {
147
+ options = { config: customConfigFileName };
148
+ mockFS({ ...FS, [customConfigFileName]: '' });
149
+ });
145
150
 
146
- expect(webpack).toHaveBeenCalledWith(customProdConfig);
151
+ itUsesConfig({ name: 'custom config', config: () => customConfig });
152
+
153
+ describe('when custom config file does not exist', () => {
154
+ beforeEach(() => (options!.config = 'bogus.config.js'));
155
+
156
+ itUsesConfig({ name: webpackProdConfigFileName, config: () => prodConfig });
157
+ });
147
158
  });
148
159
  });
149
160
 
150
161
  describe('when package is a web component', () => {
151
162
  const source = 'src';
152
163
  const destination = 'dist';
153
- const startupVersion = '1.0.0';
154
164
  const dependencies = { foo: '1.0.1' };
155
165
  const sharedDependencies = { react: 'SharedDependencies.React' };
156
166
 
157
167
  beforeEach(() => {
158
- mockFS(webComponentFS(startupVersion));
168
+ mockFS(webComponentFS());
159
169
  jest.mocked(getFolders).mockReturnValue({ source, destination });
160
170
  jest.mocked(getPackageData).mockReturnValue({ dependencies });
161
171
  jest.mocked(loadSharedDependencies).mockReturnValue(sharedDependencies);
162
172
  });
163
173
 
164
174
  test('builds full and "embed" packages', async () => {
165
- const options = { buildStat, name: expectPackageName() };
175
+ const createOptions = { buildStat: options?.buildStat, name: expectPackageName() };
166
176
  const overrides = { configuration: { mode: 'production' } };
167
177
 
168
178
  await subject();
169
179
 
170
- expect(createWebpackConfig).toHaveBeenCalledWith(overrides, options);
180
+ expect(createWebpackConfig).toHaveBeenCalledWith(overrides, createOptions);
171
181
  expect(createWebpackConfig).toHaveBeenCalledWith(overrides, {
172
- ...options,
182
+ ...createOptions,
173
183
  embed: true,
174
184
  });
175
185
  expect(compiler.run).toHaveBeenCalledTimes(2);
176
186
  });
177
187
 
178
- test('generates package metadata', async () => {
179
- await subject();
180
-
181
- expect(generatedMetadata(destination)).toEqual({
182
- name: expectPackageName(),
183
- bundledWith: { '@servicetitan/startup': startupVersion },
184
- dependencies,
185
- sharedDependencies,
186
- entrypoints: {},
187
- });
188
- });
188
+ function itUsesConfig(params: { config: () => Record<string, any>; name: string }) {
189
+ test(`uses ${params.name}`, async () => {
190
+ const { configuration, plugins } = params.config();
191
+ const createOptions = {
192
+ buildStat: options?.buildStat,
193
+ name: expectPackageName(),
194
+ };
195
+ const overrides = {
196
+ configuration: { mode: 'production', ...configuration },
197
+ plugins,
198
+ };
189
199
 
190
- describe('when package has entrypoints', () => {
191
- const full = { css: 'foo', js: 'bar ' };
192
- const light = { css: 'baz', js: 'qux' };
200
+ await subject();
193
201
 
194
- beforeEach(() => {
195
- mockFS({
196
- ...webComponentFS(startupVersion),
197
- dist: {
198
- bundle: {
199
- full: { 'entrypoints.json': JSON.stringify(full) },
200
- light: { 'entrypoints.json': JSON.stringify(light) },
201
- },
202
- },
202
+ expect(createWebpackConfig).toHaveBeenCalledWith(overrides, createOptions);
203
+ expect(createWebpackConfig).toHaveBeenCalledWith(overrides, {
204
+ ...createOptions,
205
+ embed: true,
203
206
  });
204
207
  });
208
+ }
205
209
 
206
- test('adds entrypoints to package metadata', async () => {
207
- await subject();
210
+ describe(`with ${webpackProdConfigFileName} config`, () => {
211
+ const FS = { ...webComponentFS(), [webpackProdConfigFileName]: '' };
208
212
 
209
- expect(generatedMetadata(destination)).toEqual(
210
- expect.objectContaining({ entrypoints: { full, light } })
211
- );
212
- });
213
- });
213
+ beforeEach(() => mockFS(FS));
214
214
 
215
- describe(`with ${webpackProdConfigFileName} config`, () => {
216
- beforeEach(() => {
217
- mockFS({ ...webComponentFS(startupVersion), [webpackProdConfigFileName]: '' });
218
- });
215
+ itUsesConfig({ name: webpackProdConfigFileName, config: () => prodConfig });
219
216
 
220
- test('uses config', async () => {
221
- const options = { buildStat, name: expectPackageName() };
222
- const overrides = {
223
- configuration: { mode: 'production', ...customProdConfig.configuration },
224
- plugins: customProdConfig.plugins,
225
- };
217
+ describe('with custom config', () => {
218
+ beforeEach(() => {
219
+ options = { config: customConfigFileName };
220
+ mockFS({ ...FS, [customConfigFileName]: '' });
221
+ });
226
222
 
227
- await subject();
223
+ itUsesConfig({ name: 'custom config', config: () => customConfig });
228
224
 
229
- expect(createWebpackConfig).toHaveBeenCalledWith(overrides, options);
230
- expect(createWebpackConfig).toHaveBeenCalledWith(overrides, {
231
- ...options,
232
- embed: true,
225
+ describe('when custom config file does not exist', () => {
226
+ beforeEach(() => (options!.config = 'bogus.config.js'));
227
+
228
+ itUsesConfig({ name: webpackProdConfigFileName, config: () => prodConfig });
233
229
  });
234
230
  });
235
231
  });
@@ -237,22 +233,26 @@ describe('[startup] Cli Utils', () => {
237
233
  });
238
234
 
239
235
  describe(`${bundleWatch.name}`, () => {
240
- const customDevConfig = {
236
+ const devConfig = {
241
237
  devServer: { host: 'http://127.0.0.0', port: '9000' },
242
238
  configuration: { foo: 'bar' },
243
239
  plugins: { baz: 'qux' },
244
240
  };
241
+ const customConfig = {
242
+ devServer: { port: 9009 },
243
+ configuration: { baz: 'qux' },
244
+ plugins: { foo: 'bar' },
245
+ };
246
+ const customConfigFileName = 'custom.dev.config.js';
247
+ let options: Parameters<typeof bundle>[0];
245
248
 
246
249
  function stopWatching(callback?: Function) {
247
250
  setTimeout(() => callback?.(new Error('stopped')), 0);
248
251
  }
249
252
 
250
253
  beforeEach(() => {
254
+ options = undefined;
251
255
  mockFS(packageFS());
252
- // Allows config file to be loaded with require(...)
253
- jest.doMock(path.resolve(webpackDevConfigFileName), () => customDevConfig, {
254
- virtual: true,
255
- });
256
256
  jest.mocked(WebpackDevServer).mockImplementation((): any => ({
257
257
  listen: jest.fn((_0: number, _1: string, callback?: (error?: Error) => void) =>
258
258
  stopWatching(callback)
@@ -263,10 +263,13 @@ describe('[startup] Cli Utils', () => {
263
263
  stopWatching(callback);
264
264
  return { compiler, close: compiler.close };
265
265
  });
266
+ // Allows config files to be loaded with require(...)
267
+ jest.doMock(path.resolve(customConfigFileName), () => customConfig, { virtual: true });
268
+ jest.doMock(path.resolve(webpackDevConfigFileName), () => devConfig, { virtual: true });
266
269
  });
267
270
 
268
271
  const subject = async () => {
269
- await expect(bundleWatch()).rejects.toThrowError('stopped');
272
+ await expect(bundleWatch(options)).rejects.toThrowError('stopped');
270
273
  };
271
274
 
272
275
  test('runs webpack development server', async () => {
@@ -280,45 +283,53 @@ describe('[startup] Cli Utils', () => {
280
283
  expect(WebpackDevServer).toHaveBeenCalledWith(compiler, {});
281
284
  });
282
285
 
283
- describe(`with ${webpackDevConfigFileName} config`, () => {
284
- beforeEach(() => mockFS({ ...packageFS(), [webpackDevConfigFileName]: '' }));
285
-
286
- test('uses config', async () => {
287
- const { devServer, ...config } = customDevConfig;
286
+ function itUsesConfig(params: { name: string; config: () => Record<string, any> }) {
287
+ test(`uses ${params.name}`, async () => {
288
+ const { devServer, ...config } = params.config();
288
289
 
289
290
  await subject();
290
291
 
291
292
  expect(webpack).toHaveBeenCalledWith(config);
292
293
  expect(WebpackDevServer).toHaveBeenCalledWith(compiler, devServer);
293
294
  });
295
+ }
296
+
297
+ describe(`with ${webpackDevConfigFileName} config`, () => {
298
+ const FS = { ...packageFS(), [webpackDevConfigFileName]: '' };
299
+
300
+ beforeEach(() => mockFS(FS));
301
+
302
+ itUsesConfig({ name: webpackDevConfigFileName, config: () => devConfig });
303
+
304
+ describe('with custom config', () => {
305
+ beforeEach(() => {
306
+ options = { config: customConfigFileName };
307
+ mockFS({ ...FS, [customConfigFileName]: '' });
308
+ });
309
+
310
+ itUsesConfig({ name: 'custom config', config: () => customConfig });
311
+
312
+ describe('when custom config does not exist', () => {
313
+ beforeEach(() => (options!.config = 'bogus.config.js'));
314
+
315
+ itUsesConfig({ name: webpackDevConfigFileName, config: () => devConfig });
316
+ });
317
+ });
294
318
  });
295
319
 
296
320
  describe('when package is a web component', () => {
297
321
  const source = 'src';
298
322
  const destination = 'dist';
299
- const startupVersion = '1.0.0';
300
323
  const dependencies = { foo: '1.0.1' };
301
324
  const sharedDependencies = { react: 'SharedDependencies.React' };
302
325
 
303
326
  beforeEach(() => {
304
- mockFS(webComponentFS(startupVersion));
327
+ mockFS(webComponentFS());
305
328
  jest.mocked(getFolders).mockReturnValue({ source, destination });
306
329
  jest.mocked(getPackageData).mockReturnValue({ dependencies });
307
330
  jest.mocked(loadSharedDependencies).mockReturnValue(sharedDependencies);
308
331
  });
309
332
 
310
- test('generates package metadata', async () => {
311
- await subject();
312
-
313
- expect(generatedMetadata(destination)).toEqual({
314
- name: expectPackageName(),
315
- bundledWith: { '@servicetitan/startup': startupVersion },
316
- dependencies,
317
- sharedDependencies,
318
- entrypoints: {},
319
- });
320
- });
321
-
322
333
  test('runs webpack and webpack development server', async () => {
323
334
  const options = { name: expectPackageName() };
324
335
  const overrides = { configuration: { mode: 'development' } };
@@ -335,16 +346,13 @@ describe('[startup] Cli Utils', () => {
335
346
  expect(WebpackDevServer).toHaveBeenCalledWith(compiler, {});
336
347
  });
337
348
 
338
- describe(`with ${webpackDevConfigFileName} config`, () => {
339
- beforeEach(() => {
340
- mockFS({ ...webComponentFS(startupVersion), [webpackDevConfigFileName]: '' });
341
- });
342
-
343
- test('uses config', async () => {
349
+ function itUsesConfig(params: { name: string; config: () => Record<string, any> }) {
350
+ test(`uses ${params.name}`, async () => {
344
351
  const options = { name: expectPackageName() };
352
+ const { configuration, plugins } = params.config();
345
353
  const overrides = {
346
- configuration: { mode: 'development', ...customDevConfig.configuration },
347
- plugins: customDevConfig.plugins,
354
+ configuration: { mode: 'development', ...configuration },
355
+ plugins,
348
356
  };
349
357
 
350
358
  await subject();
@@ -355,6 +363,29 @@ describe('[startup] Cli Utils', () => {
355
363
  embed: true,
356
364
  });
357
365
  });
366
+ }
367
+
368
+ describe(`with ${webpackDevConfigFileName} config`, () => {
369
+ const FS = { ...webComponentFS(), [webpackDevConfigFileName]: '' };
370
+
371
+ beforeEach(() => mockFS(FS));
372
+
373
+ itUsesConfig({ name: webpackDevConfigFileName, config: () => devConfig });
374
+
375
+ describe('with custom config', () => {
376
+ beforeEach(() => {
377
+ options = { config: customConfigFileName };
378
+ mockFS({ ...FS, [customConfigFileName]: '' });
379
+ });
380
+
381
+ itUsesConfig({ name: 'custom config', config: () => customConfig });
382
+
383
+ describe('when custom config does not exist', () => {
384
+ beforeEach(() => (options!.config = 'bogus.config.js'));
385
+
386
+ itUsesConfig({ name: webpackDevConfigFileName, config: () => devConfig });
387
+ });
388
+ });
358
389
  });
359
390
  });
360
391
  });
@@ -1,5 +1,5 @@
1
1
  import os from 'os';
2
- import { getConfiguration } from '../../../utils';
2
+ import { getConfigurationSafe } from '../../../utils';
3
3
  import { CommandName } from '../../../utils/get-configuration';
4
4
 
5
5
  import { setNodeOptions } from '../set-node-options';
@@ -9,7 +9,7 @@ jest.mock('os', () => ({
9
9
  }));
10
10
 
11
11
  jest.mock('../../../utils', () => ({
12
- getConfiguration: jest.fn(() => ({})),
12
+ getConfigurationSafe: jest.fn(() => ({})),
13
13
  }));
14
14
 
15
15
  describe(`[startup] utils:${setNodeOptions.name}`, () => {
@@ -76,7 +76,7 @@ describe(`[startup] utils:${setNodeOptions.name}`, () => {
76
76
 
77
77
  beforeEach(() => {
78
78
  options = ['--no-warning', '--test'];
79
- (getConfiguration as jest.Mock).mockImplementation(() => ({
79
+ (getConfigurationSafe as jest.Mock).mockImplementation(() => ({
80
80
  // eslint-disable-next-line @typescript-eslint/naming-convention
81
81
  NODE_OPTIONS: options,
82
82
  }));
@@ -117,7 +117,7 @@ describe(`[startup] utils:${setNodeOptions.name}`, () => {
117
117
  const options = ['--no-warning', '--test'];
118
118
 
119
119
  beforeEach(() =>
120
- (getConfiguration as jest.Mock).mockReturnValue({
120
+ (getConfigurationSafe as jest.Mock).mockReturnValue({
121
121
  // eslint-disable-next-line @typescript-eslint/naming-convention
122
122
  [command]: { NODE_OPTIONS: options },
123
123
  })
@@ -6,18 +6,14 @@ import { getPortPromise } from 'portfinder';
6
6
  import webpack, { Configuration } from 'webpack';
7
7
  import WebpackDevServer from 'webpack-dev-server';
8
8
 
9
- import {
10
- getFolders,
11
- getPackageName,
12
- getPackageData,
13
- isWebComponent,
14
- loadSharedDependencies,
15
- readJson,
16
- log,
17
- readJsonSafe,
18
- } from '../../utils';
9
+ import { getPackageName, isWebComponent, log } from '../../utils';
19
10
  import { Overrides, createWebpackConfig } from '../../webpack';
20
11
 
12
+ interface Options {
13
+ buildStat?: boolean;
14
+ config?: string;
15
+ }
16
+
21
17
  function getName() {
22
18
  const packageName = getPackageName()
23
19
  .replace(/\//g, '-')
@@ -30,48 +26,15 @@ function getName() {
30
26
  export const webpackDevConfigFileName = 'webpack.dev.config.js';
31
27
  export const webpackProdConfigFileName = 'webpack.prod.config.js';
32
28
 
33
- function generateWebComponentMetadata(name: string) {
34
- const { destination } = getFolders();
35
- const packageData = getPackageData();
36
-
37
- const sharedDependencies = loadSharedDependencies(
38
- packageData.dependencies,
39
- packageData.sharedDependencies
40
- );
41
-
42
- if (!fs.existsSync(`./${destination}`)) {
43
- fs.mkdirSync(`./${destination}`, { recursive: true });
44
- }
45
-
46
- const entryPointsFull = readJsonSafe(path.join('dist', 'bundle', 'full', 'entrypoints.json'));
47
- const entryPointsLight = readJsonSafe(path.join('dist', 'bundle', 'light', 'entrypoints.json'));
48
-
49
- fs.writeFileSync(
50
- `./${destination}/metadata.json`,
51
- JSON.stringify({
52
- name,
53
- bundledWith: {
54
- '@servicetitan/startup': readJson(
55
- path.join(
56
- path.dirname(require.resolve('@servicetitan/startup')),
57
- '../package.json'
58
- )
59
- ).version,
60
- },
61
- sharedDependencies,
62
- dependencies: packageData.dependencies,
63
- entrypoints: {
64
- ...(entryPointsFull ? { full: entryPointsFull } : {}),
65
- ...(entryPointsLight ? { light: entryPointsLight } : {}),
66
- },
67
- }),
68
- 'utf8'
69
- );
70
- }
71
-
72
- export async function bundle(buildStat: boolean) {
29
+ export async function bundle(options: Options = {}) {
73
30
  log.info('Bundling the package...');
74
31
 
32
+ const name = getName();
33
+ const mode = 'production';
34
+ const fallback = `./${webpackProdConfigFileName}`;
35
+ const config = readWebpackConfig({ ...options, fallback });
36
+ const { buildStat } = options;
37
+
75
38
  const run = async (config: Configuration) => {
76
39
  const compiler = webpack(config);
77
40
 
@@ -92,54 +55,28 @@ export async function bundle(buildStat: boolean) {
92
55
  process.stdout.write(stats.toString(config.stats) + '\n');
93
56
  };
94
57
 
95
- const name = getName();
96
- const configRelativePath = `./${webpackProdConfigFileName}`;
97
-
98
58
  if (isWebComponent()) {
99
- let webpackConfig: Overrides = {
100
- configuration: { mode: 'production' },
59
+ const webpackConfig: Overrides = {
60
+ configuration: { ...config?.configuration, mode },
61
+ plugins: config?.plugins,
101
62
  };
102
63
 
103
- if (fs.existsSync(configRelativePath)) {
104
- const { configuration, plugins } = require(path.resolve(configRelativePath));
105
-
106
- webpackConfig = {
107
- configuration: {
108
- ...configuration,
109
- ...webpackConfig.configuration,
110
- },
111
- plugins: {
112
- ...plugins,
113
- ...webpackConfig.plugins,
114
- },
115
- };
116
- }
117
-
118
64
  return Promise.all([
119
65
  run(createWebpackConfig(webpackConfig, { embed: true, name, buildStat })),
120
66
  run(createWebpackConfig(webpackConfig, { name, buildStat })),
121
- ]).then(result => {
122
- generateWebComponentMetadata(name);
123
-
124
- return result;
125
- });
67
+ ]);
126
68
  }
127
69
 
128
- return run(
129
- fs.existsSync(configRelativePath)
130
- ? require(path.resolve(configRelativePath))
131
- : createWebpackConfig(
132
- {
133
- configuration: { mode: 'production' },
134
- },
135
- { buildStat, name }
136
- )
137
- );
70
+ return run(config ?? createWebpackConfig({ configuration: { mode } }, { buildStat, name }));
138
71
  }
139
72
 
140
- export async function bundleWatch() {
73
+ export async function bundleWatch(options: Options = {}) {
141
74
  log.info('Bundling the package...');
142
75
 
76
+ const name = getName();
77
+ const mode = 'development';
78
+ const config = readWebpackConfig({ ...options, fallback: `./${webpackDevConfigFileName}` });
79
+
143
80
  const runServe = async ({ devServer = {}, ...config }: Configuration) => {
144
81
  const compiler = webpack(config);
145
82
  const host = devServer.host ?? 'localhost';
@@ -174,45 +111,27 @@ export async function bundleWatch() {
174
111
  });
175
112
  };
176
113
 
177
- const name = getName();
178
- const configRelativePath = `./${webpackDevConfigFileName}`;
179
-
180
114
  if (isWebComponent()) {
181
- generateWebComponentMetadata(name);
182
-
183
- let webpackConfig: Overrides = {
184
- configuration: { mode: 'development' },
115
+ const webpackConfig: Overrides = {
116
+ configuration: { ...config?.configuration, mode },
117
+ plugins: config?.plugins,
185
118
  };
186
119
 
187
- if (fs.existsSync(configRelativePath)) {
188
- const { configuration, plugins } = require(path.resolve(configRelativePath));
189
-
190
- webpackConfig = {
191
- configuration: {
192
- ...configuration,
193
- ...webpackConfig.configuration,
194
- },
195
- plugins: {
196
- ...plugins,
197
- ...webpackConfig.plugins,
198
- },
199
- };
200
- }
201
-
202
120
  return Promise.all([
203
121
  run(createWebpackConfig(webpackConfig, { embed: true, name })),
204
122
  runServe(createWebpackConfig(webpackConfig, { name })),
205
123
  ]);
206
124
  }
207
125
 
208
- return runServe(
209
- fs.existsSync(configRelativePath)
210
- ? require(path.resolve(configRelativePath))
211
- : createWebpackConfig(
212
- {
213
- configuration: { mode: 'development' },
214
- },
215
- { name }
216
- )
217
- );
126
+ return runServe(config ?? createWebpackConfig({ configuration: { mode } }, { name }));
127
+ }
128
+
129
+ function readWebpackConfig({ config, fallback }: Options & { fallback: string }) {
130
+ return readConfig(config) ?? readConfig(fallback);
131
+ }
132
+
133
+ function readConfig(relativePath?: string): Record<string, any> | undefined {
134
+ if (relativePath && fs.existsSync(relativePath)) {
135
+ return require(path.resolve(relativePath));
136
+ }
218
137
  }
@@ -1,5 +1,5 @@
1
1
  import os from 'os';
2
- import { CommandName, NodeConfiguration, getConfiguration } from '../../utils';
2
+ import { CommandName, NodeConfiguration, getConfigurationSafe } from '../../utils';
3
3
 
4
4
  const MAX_OLD_SPACE_SIZE_OPTION = 'max_old_space_size';
5
5
  const DEFAULT_MAX_OLD_SPACE_SIZE_MB = 8192;
@@ -11,7 +11,7 @@ const MIN_REMAINING_MEMORY_MB = 512;
11
11
  * @returns whether process's NODE_OPTIONS were changed
12
12
  */
13
13
  export function setNodeOptions(command: CommandName) {
14
- const cliConfig = getConfiguration();
14
+ const cliConfig = getConfigurationSafe();
15
15
  const cmdConfig: NodeConfiguration = cliConfig[command];
16
16
 
17
17
  const cmdNodeOptions = cmdConfig?.NODE_OPTIONS?.join(' ') ?? '';