@servicetitan/startup 38.0.0 → 38.1.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 (395) hide show
  1. package/bin/js-yaml.js +2 -2
  2. package/dist/cli/commands/build.d.ts.map +1 -1
  3. package/dist/cli/commands/build.js +22 -9
  4. package/dist/cli/commands/build.js.map +1 -1
  5. package/dist/cli/commands/bundle-package.d.ts +6 -0
  6. package/dist/cli/commands/bundle-package.d.ts.map +1 -0
  7. package/dist/cli/commands/bundle-package.js +59 -0
  8. package/dist/cli/commands/bundle-package.js.map +1 -0
  9. package/dist/cli/commands/bundle-vite.js +13 -4
  10. package/dist/cli/commands/bundle-vite.js.map +1 -1
  11. package/dist/cli/commands/bundle-webpack.js +13 -4
  12. package/dist/cli/commands/bundle-webpack.js.map +1 -1
  13. package/dist/cli/commands/clean.js +13 -4
  14. package/dist/cli/commands/clean.js.map +1 -1
  15. package/dist/cli/commands/command.d.ts +9 -0
  16. package/dist/cli/commands/command.d.ts.map +1 -0
  17. package/dist/cli/commands/command.js +35 -0
  18. package/dist/cli/commands/command.js.map +1 -0
  19. package/dist/cli/commands/convert-eslint-config.js +14 -7
  20. package/dist/cli/commands/convert-eslint-config.js.map +1 -1
  21. package/dist/cli/commands/eslint.js +13 -4
  22. package/dist/cli/commands/eslint.js.map +1 -1
  23. package/dist/cli/commands/init.js +13 -4
  24. package/dist/cli/commands/init.js.map +1 -1
  25. package/dist/cli/commands/install.js +13 -4
  26. package/dist/cli/commands/install.js.map +1 -1
  27. package/dist/cli/commands/kendo-ui-license.js +13 -4
  28. package/dist/cli/commands/kendo-ui-license.js.map +1 -1
  29. package/dist/cli/commands/lint.js +13 -4
  30. package/dist/cli/commands/lint.js.map +1 -1
  31. package/dist/cli/commands/mfe-check.d.ts.map +1 -1
  32. package/dist/cli/commands/mfe-check.js +15 -7
  33. package/dist/cli/commands/mfe-check.js.map +1 -1
  34. package/dist/cli/commands/mfe-generate-metadata.js +13 -4
  35. package/dist/cli/commands/mfe-generate-metadata.js.map +1 -1
  36. package/dist/cli/commands/mfe-list.js +13 -4
  37. package/dist/cli/commands/mfe-list.js.map +1 -1
  38. package/dist/cli/commands/mfe-package-clean.js +13 -4
  39. package/dist/cli/commands/mfe-package-clean.js.map +1 -1
  40. package/dist/cli/commands/mfe-package-publish.js +13 -4
  41. package/dist/cli/commands/mfe-package-publish.js.map +1 -1
  42. package/dist/cli/commands/mfe-package-rollback.js +13 -4
  43. package/dist/cli/commands/mfe-package-rollback.js.map +1 -1
  44. package/dist/cli/commands/mfe-publish.js +13 -4
  45. package/dist/cli/commands/mfe-publish.js.map +1 -1
  46. package/dist/cli/commands/mfe-purge-cache.js +13 -4
  47. package/dist/cli/commands/mfe-purge-cache.js.map +1 -1
  48. package/dist/cli/commands/prepare-package.js +13 -4
  49. package/dist/cli/commands/prepare-package.js.map +1 -1
  50. package/dist/cli/commands/registry/build.d.ts +1 -1
  51. package/dist/cli/commands/registry/build.d.ts.map +1 -1
  52. package/dist/cli/commands/registry/build.js +3 -5
  53. package/dist/cli/commands/registry/build.js.map +1 -1
  54. package/dist/cli/commands/registry/bundle-package.d.ts +41 -0
  55. package/dist/cli/commands/registry/bundle-package.d.ts.map +1 -0
  56. package/dist/cli/commands/registry/bundle-package.js +54 -0
  57. package/dist/cli/commands/registry/bundle-package.js.map +1 -0
  58. package/dist/cli/commands/registry/command-registry.d.ts +42 -2
  59. package/dist/cli/commands/registry/command-registry.d.ts.map +1 -1
  60. package/dist/cli/commands/registry/command-registry.js +10 -19
  61. package/dist/cli/commands/registry/command-registry.js.map +1 -1
  62. package/dist/cli/commands/registry/start.d.ts +1 -1
  63. package/dist/cli/commands/registry/start.d.ts.map +1 -1
  64. package/dist/cli/commands/registry/start.js +3 -5
  65. package/dist/cli/commands/registry/start.js.map +1 -1
  66. package/dist/cli/commands/review/review.js +14 -7
  67. package/dist/cli/commands/review/review.js.map +1 -1
  68. package/dist/cli/commands/review/rules/no-deprecated-content-base.js +1 -3
  69. package/dist/cli/commands/review/rules/no-deprecated-content-base.js.map +1 -1
  70. package/dist/cli/commands/review/rules/no-direct-peer-dependencies.js +1 -3
  71. package/dist/cli/commands/review/rules/no-direct-peer-dependencies.js.map +1 -1
  72. package/dist/cli/commands/review/rules/no-typescript-entry-point.js +1 -3
  73. package/dist/cli/commands/review/rules/no-typescript-entry-point.js.map +1 -1
  74. package/dist/cli/commands/review/rules/prefer-open-ended-peer-dependencies.js +5 -12
  75. package/dist/cli/commands/review/rules/prefer-open-ended-peer-dependencies.js.map +1 -1
  76. package/dist/cli/commands/review/rules/require-compatible-launch-darkly-sdk.js +5 -12
  77. package/dist/cli/commands/review/rules/require-compatible-launch-darkly-sdk.js.map +1 -1
  78. package/dist/cli/commands/review/rules/require-explicit-side-effects.js +1 -3
  79. package/dist/cli/commands/review/rules/require-explicit-side-effects.js.map +1 -1
  80. package/dist/cli/commands/review/rules/require-one-collection-version.js +1 -3
  81. package/dist/cli/commands/review/rules/require-one-collection-version.js.map +1 -1
  82. package/dist/cli/commands/review/rules/require-servicetitan-scope.js +1 -3
  83. package/dist/cli/commands/review/rules/require-servicetitan-scope.js.map +1 -1
  84. package/dist/cli/commands/review/rules/require-tsconfig-references.js +1 -3
  85. package/dist/cli/commands/review/rules/require-tsconfig-references.js.map +1 -1
  86. package/dist/cli/commands/review/utils/compare-version.js +8 -19
  87. package/dist/cli/commands/review/utils/compare-version.js.map +1 -1
  88. package/dist/cli/commands/run-task.d.ts +1 -0
  89. package/dist/cli/commands/run-task.d.ts.map +1 -1
  90. package/dist/cli/commands/run-task.js +20 -6
  91. package/dist/cli/commands/run-task.js.map +1 -1
  92. package/dist/cli/commands/start.d.ts.map +1 -1
  93. package/dist/cli/commands/start.js +28 -13
  94. package/dist/cli/commands/start.js.map +1 -1
  95. package/dist/cli/commands/stylelint.js +13 -4
  96. package/dist/cli/commands/stylelint.js.map +1 -1
  97. package/dist/cli/commands/styles-check.js +13 -4
  98. package/dist/cli/commands/styles-check.js.map +1 -1
  99. package/dist/cli/commands/test/runners/jest.js +1 -3
  100. package/dist/cli/commands/test/runners/jest.js.map +1 -1
  101. package/dist/cli/commands/test/tests.js +13 -4
  102. package/dist/cli/commands/test/tests.js.map +1 -1
  103. package/dist/cli/commands/types.d.ts +1 -6
  104. package/dist/cli/commands/types.d.ts.map +1 -1
  105. package/dist/cli/commands/types.js +2 -20
  106. package/dist/cli/commands/types.js.map +1 -1
  107. package/dist/cli/commands/upload-sourcemaps.js +17 -13
  108. package/dist/cli/commands/upload-sourcemaps.js.map +1 -1
  109. package/dist/cli/index.js +1 -0
  110. package/dist/cli/index.js.map +1 -1
  111. package/dist/cli/tasks/cli-task.d.ts +3 -0
  112. package/dist/cli/tasks/cli-task.d.ts.map +1 -1
  113. package/dist/cli/tasks/cli-task.js +41 -9
  114. package/dist/cli/tasks/cli-task.js.map +1 -1
  115. package/dist/cli/tasks/swc-compile-package/get-swc-options.d.ts +9 -1
  116. package/dist/cli/tasks/swc-compile-package/get-swc-options.d.ts.map +1 -1
  117. package/dist/cli/tasks/swc-compile-package/get-swc-options.js +18 -2
  118. package/dist/cli/tasks/swc-compile-package/get-swc-options.js.map +1 -1
  119. package/dist/cli/tasks/swc-compile-package/swc-compile-package.d.ts +3 -1
  120. package/dist/cli/tasks/swc-compile-package/swc-compile-package.d.ts.map +1 -1
  121. package/dist/cli/tasks/swc-compile-package/swc-compile-package.js +17 -3
  122. package/dist/cli/tasks/swc-compile-package/swc-compile-package.js.map +1 -1
  123. package/dist/cli/tasks/task.d.ts +2 -1
  124. package/dist/cli/tasks/task.d.ts.map +1 -1
  125. package/dist/cli/tasks/task.js +6 -3
  126. package/dist/cli/tasks/task.js.map +1 -1
  127. package/dist/cli/tasks/tsc-compile/tsc-compile.js +1 -3
  128. package/dist/cli/tasks/tsc-compile/tsc-compile.js.map +1 -1
  129. package/dist/cli/utils/cli-npm.d.ts.map +1 -1
  130. package/dist/cli/utils/cli-npm.js +8 -1
  131. package/dist/cli/utils/cli-npm.js.map +1 -1
  132. package/dist/cli/utils/cli-os.d.ts +1 -0
  133. package/dist/cli/utils/cli-os.d.ts.map +1 -1
  134. package/dist/cli/utils/cli-os.js +20 -0
  135. package/dist/cli/utils/cli-os.js.map +1 -1
  136. package/dist/cli/utils/compile.d.ts.map +1 -1
  137. package/dist/cli/utils/compile.js +7 -4
  138. package/dist/cli/utils/compile.js.map +1 -1
  139. package/dist/cli/utils/copy-files.js +1 -0
  140. package/dist/cli/utils/copy-files.js.map +1 -1
  141. package/dist/cli/utils/index.d.ts +1 -1
  142. package/dist/cli/utils/index.d.ts.map +1 -1
  143. package/dist/cli/utils/index.js +1 -1
  144. package/dist/cli/utils/index.js.map +1 -1
  145. package/dist/cli/utils/process-tree.js +2 -6
  146. package/dist/cli/utils/process-tree.js.map +1 -1
  147. package/dist/cli/utils/resolve-bundler.d.ts.map +1 -1
  148. package/dist/cli/utils/resolve-bundler.js +2 -1
  149. package/dist/cli/utils/resolve-bundler.js.map +1 -1
  150. package/dist/cli/utils/ts-config.d.ts +1 -1
  151. package/dist/cli/utils/ts-config.d.ts.map +1 -1
  152. package/dist/cli/utils/ts-config.js +1 -3
  153. package/dist/cli/utils/ts-config.js.map +1 -1
  154. package/dist/cli/utils/with-exponential-backoff.d.ts +7 -0
  155. package/dist/cli/utils/with-exponential-backoff.d.ts.map +1 -0
  156. package/dist/cli/utils/with-exponential-backoff.js +28 -0
  157. package/dist/cli/utils/with-exponential-backoff.js.map +1 -0
  158. package/dist/core/constants.d.ts +2 -0
  159. package/dist/core/constants.d.ts.map +1 -1
  160. package/dist/core/constants.js +6 -1
  161. package/dist/core/constants.js.map +1 -1
  162. package/dist/postinstall.js +118 -0
  163. package/dist/scripts/generate-bin-wrappers.js +203 -0
  164. package/dist/storybook-config/swc.d.ts +6 -0
  165. package/dist/storybook-config/swc.d.ts.map +1 -1
  166. package/dist/storybook-config/webpack-final.d.ts.map +1 -1
  167. package/dist/storybook-config/webpack-final.js +2 -1
  168. package/dist/storybook-config/webpack-final.js.map +1 -1
  169. package/dist/utils/exit-when-parent-exits.d.ts +6 -0
  170. package/dist/utils/exit-when-parent-exits.d.ts.map +1 -0
  171. package/dist/utils/exit-when-parent-exits.js +37 -0
  172. package/dist/utils/exit-when-parent-exits.js.map +1 -0
  173. package/dist/utils/find-up.d.ts +1 -1
  174. package/dist/utils/find-up.d.ts.map +1 -1
  175. package/dist/utils/find-up.js +2 -2
  176. package/dist/utils/find-up.js.map +1 -1
  177. package/dist/utils/get-configuration.d.ts +6 -3
  178. package/dist/utils/get-configuration.d.ts.map +1 -1
  179. package/dist/utils/get-configuration.js +10 -2
  180. package/dist/utils/get-configuration.js.map +1 -1
  181. package/dist/utils/index.d.ts +1 -0
  182. package/dist/utils/index.d.ts.map +1 -1
  183. package/dist/utils/index.js +1 -0
  184. package/dist/utils/index.js.map +1 -1
  185. package/dist/utils/log.js +1 -3
  186. package/dist/utils/log.js.map +1 -1
  187. package/dist/vite/build-shared-dependencies.d.ts.map +1 -1
  188. package/dist/vite/build-shared-dependencies.js +2 -0
  189. package/dist/vite/build-shared-dependencies.js.map +1 -1
  190. package/dist/vite/config/base-config.d.ts.map +1 -1
  191. package/dist/vite/config/base-config.js +12 -1
  192. package/dist/vite/config/base-config.js.map +1 -1
  193. package/dist/vite/config/create-vite-config.js +7 -2
  194. package/dist/vite/config/create-vite-config.js.map +1 -1
  195. package/dist/vite/config/load-config-file.js +8 -19
  196. package/dist/vite/config/load-config-file.js.map +1 -1
  197. package/dist/vite/index.d.ts +2 -0
  198. package/dist/vite/index.d.ts.map +1 -1
  199. package/dist/vite/index.html +2 -2
  200. package/dist/vite/index.js +16 -0
  201. package/dist/vite/index.js.map +1 -1
  202. package/dist/vite/plugins/chain-source-maps-plugin.js +1 -1
  203. package/dist/vite/plugins/chain-source-maps-plugin.js.map +1 -1
  204. package/dist/vite/plugins/clean-plugin.js +1 -1
  205. package/dist/vite/plugins/clean-plugin.js.map +1 -1
  206. package/dist/vite/plugins/css-injector-plugin.js +1 -1
  207. package/dist/vite/plugins/css-injector-plugin.js.map +1 -1
  208. package/dist/vite/plugins/design-system-guard-plugin.d.ts.map +1 -1
  209. package/dist/vite/plugins/design-system-guard-plugin.js +10 -5
  210. package/dist/vite/plugins/design-system-guard-plugin.js.map +1 -1
  211. package/dist/vite/plugins/dev-server-routing-plugin.js +1 -1
  212. package/dist/vite/plugins/dev-server-routing-plugin.js.map +1 -1
  213. package/dist/vite/plugins/externals-plugin.d.ts.map +1 -1
  214. package/dist/vite/plugins/externals-plugin.js +11 -5
  215. package/dist/vite/plugins/externals-plugin.js.map +1 -1
  216. package/dist/vite/plugins/html-plugin.d.ts.map +1 -1
  217. package/dist/vite/plugins/html-plugin.js +5 -3
  218. package/dist/vite/plugins/html-plugin.js.map +1 -1
  219. package/dist/vite/plugins/ignore-modules-plugin.d.ts +2 -2
  220. package/dist/vite/plugins/ignore-modules-plugin.d.ts.map +1 -1
  221. package/dist/vite/plugins/ignore-modules-plugin.js +36 -24
  222. package/dist/vite/plugins/ignore-modules-plugin.js.map +1 -1
  223. package/dist/vite/plugins/index.d.ts +3 -0
  224. package/dist/vite/plugins/index.d.ts.map +1 -1
  225. package/dist/vite/plugins/index.js +3 -0
  226. package/dist/vite/plugins/index.js.map +1 -1
  227. package/dist/vite/plugins/less-tilde-plugin.d.ts +8 -0
  228. package/dist/vite/plugins/less-tilde-plugin.d.ts.map +1 -0
  229. package/dist/vite/plugins/less-tilde-plugin.js +53 -0
  230. package/dist/vite/plugins/less-tilde-plugin.js.map +1 -0
  231. package/dist/vite/plugins/magic-comments-plugin/magic-comments-plugin.js +1 -1
  232. package/dist/vite/plugins/magic-comments-plugin/magic-comments-plugin.js.map +1 -1
  233. package/dist/vite/plugins/metadata-plugin.js +1 -1
  234. package/dist/vite/plugins/metadata-plugin.js.map +1 -1
  235. package/dist/vite/plugins/moment-locales-plugin.d.ts +1 -1
  236. package/dist/vite/plugins/moment-locales-plugin.d.ts.map +1 -1
  237. package/dist/vite/plugins/moment-locales-plugin.js +30 -14
  238. package/dist/vite/plugins/moment-locales-plugin.js.map +1 -1
  239. package/dist/vite/plugins/react-refresh-plugin/index.d.ts +2 -0
  240. package/dist/vite/plugins/react-refresh-plugin/index.d.ts.map +1 -0
  241. package/dist/vite/plugins/react-refresh-plugin/index.js +20 -0
  242. package/dist/vite/plugins/react-refresh-plugin/index.js.map +1 -0
  243. package/dist/vite/plugins/react-refresh-plugin/react-refresh-plugin.d.ts +4 -0
  244. package/dist/vite/plugins/react-refresh-plugin/react-refresh-plugin.d.ts.map +1 -0
  245. package/dist/vite/plugins/react-refresh-plugin/react-refresh-plugin.js +143 -0
  246. package/dist/vite/plugins/react-refresh-plugin/react-refresh-plugin.js.map +1 -0
  247. package/dist/vite/plugins/react-refresh-plugin/refresh-runtime.js +113 -0
  248. package/dist/vite/plugins/shared-dependencies-plugin/shared-dependencies-plugin.d.ts.map +1 -1
  249. package/dist/vite/plugins/shared-dependencies-plugin/shared-dependencies-plugin.js +14 -11
  250. package/dist/vite/plugins/shared-dependencies-plugin/shared-dependencies-plugin.js.map +1 -1
  251. package/dist/vite/plugins/style-urls-plugin.js +1 -1
  252. package/dist/vite/plugins/style-urls-plugin.js.map +1 -1
  253. package/dist/vite/plugins/virtual-modules-plugin.d.ts.map +1 -1
  254. package/dist/vite/plugins/virtual-modules-plugin.js +9 -6
  255. package/dist/vite/plugins/virtual-modules-plugin.js.map +1 -1
  256. package/dist/vite/plugins/window-externals-plugin.d.ts +22 -0
  257. package/dist/vite/plugins/window-externals-plugin.d.ts.map +1 -0
  258. package/dist/vite/plugins/window-externals-plugin.js +74 -0
  259. package/dist/vite/plugins/window-externals-plugin.js.map +1 -0
  260. package/dist/webpack/bundle-webpack.d.ts.map +1 -1
  261. package/dist/webpack/bundle-webpack.js +6 -1
  262. package/dist/webpack/bundle-webpack.js.map +1 -1
  263. package/dist/webpack/configs/optimization-config.js +4 -4
  264. package/dist/webpack/configs/optimization-config.js.map +1 -1
  265. package/dist/webpack/configs/output-config.js +1 -1
  266. package/dist/webpack/configs/output-config.js.map +1 -1
  267. package/dist/webpack/configs/plugins/ignore-plugin/ignore-plugin.js +1 -3
  268. package/dist/webpack/configs/plugins/ignore-plugin/ignore-plugin.js.map +1 -1
  269. package/dist/webpack/loaders/expose-loader/__tests__/__mocks__/configuration.expose-loader.js +13 -0
  270. package/dist/webpack/loaders/expose-loader/__tests__/__mocks__/index.js +1 -0
  271. package/dist/webpack/utils/index.d.ts +1 -0
  272. package/dist/webpack/utils/index.d.ts.map +1 -1
  273. package/dist/webpack/utils/index.js +1 -0
  274. package/dist/webpack/utils/index.js.map +1 -1
  275. package/dist/webpack/utils/normalize-proxy-config.d.ts +6 -0
  276. package/dist/webpack/utils/normalize-proxy-config.d.ts.map +1 -0
  277. package/dist/webpack/utils/normalize-proxy-config.js +52 -0
  278. package/dist/webpack/utils/normalize-proxy-config.js.map +1 -0
  279. package/package.json +24 -21
  280. package/src/cli/commands/__tests__/build.test.ts +33 -19
  281. package/src/cli/commands/__tests__/bundle-package.test.ts +65 -0
  282. package/src/cli/commands/__tests__/command.test.ts +42 -0
  283. package/src/cli/commands/__tests__/mfe-check.test.ts +26 -5
  284. package/src/cli/commands/__tests__/run-task.test.ts +20 -1
  285. package/src/cli/commands/__tests__/start.test.ts +35 -15
  286. package/src/cli/commands/build.ts +6 -5
  287. package/src/cli/commands/bundle-package.ts +20 -0
  288. package/src/cli/commands/command.ts +14 -0
  289. package/src/cli/commands/mfe-check.ts +6 -10
  290. package/src/cli/commands/registry/build.ts +3 -2
  291. package/src/cli/commands/registry/bundle-package.ts +22 -0
  292. package/src/cli/commands/registry/command-registry.ts +2 -0
  293. package/src/cli/commands/registry/start.ts +3 -2
  294. package/src/cli/commands/run-task.ts +8 -2
  295. package/src/cli/commands/start.ts +9 -5
  296. package/src/cli/commands/types.ts +2 -6
  297. package/src/cli/index.ts +3 -0
  298. package/src/cli/tasks/__tests__/cli-task.test.ts +181 -69
  299. package/src/cli/tasks/__tests__/task.test.ts +40 -45
  300. package/src/cli/tasks/cli-task.ts +43 -2
  301. package/src/cli/tasks/swc-compile-package/__tests__/get-swc-options.test.ts +46 -4
  302. package/src/cli/tasks/swc-compile-package/__tests__/swc-compile-package.test.ts +25 -4
  303. package/src/cli/tasks/swc-compile-package/get-swc-options.ts +14 -1
  304. package/src/cli/tasks/swc-compile-package/swc-compile-package.ts +6 -2
  305. package/src/cli/tasks/task.ts +8 -2
  306. package/src/cli/tasks/tsc-compile/__tests__/tsc-compile.test.ts +8 -32
  307. package/src/cli/tasks/tsc-compile-package/__tests__/tsc-compile-package.test.ts +10 -19
  308. package/src/cli/utils/__tests__/cli-npm.test.ts +33 -0
  309. package/src/cli/utils/__tests__/cli-os.test.ts +86 -3
  310. package/src/cli/utils/__tests__/compile.test.ts +37 -2
  311. package/src/cli/utils/__tests__/copy-files.test.ts +1 -1
  312. package/src/cli/utils/__tests__/with-exponential-backoff.test.ts +119 -0
  313. package/src/cli/utils/cli-npm.ts +19 -4
  314. package/src/cli/utils/cli-os.ts +14 -0
  315. package/src/cli/utils/compile.ts +8 -1
  316. package/src/cli/utils/copy-files.ts +1 -1
  317. package/src/cli/utils/index.ts +1 -1
  318. package/src/cli/utils/resolve-bundler.ts +2 -1
  319. package/src/cli/utils/ts-config.ts +1 -1
  320. package/src/cli/utils/with-exponential-backoff.ts +28 -0
  321. package/src/core/constants.ts +2 -0
  322. package/src/storybook-config/__tests__/vite-final.test.ts +6 -0
  323. package/src/storybook-config/__tests__/webpack-final.test.ts +26 -12
  324. package/src/storybook-config/webpack-final.ts +10 -4
  325. package/src/utils/__tests__/exit-when-parent-exits.test.ts +87 -0
  326. package/src/utils/__tests__/find-up.test.ts +49 -0
  327. package/src/utils/__tests__/get-configuration.test.ts +62 -0
  328. package/src/utils/exit-when-parent-exits.ts +33 -0
  329. package/src/utils/find-up.ts +2 -2
  330. package/src/utils/get-configuration.ts +14 -5
  331. package/src/utils/index.ts +1 -0
  332. package/src/vite/__tests__/build-shared-dependencies.test.ts +39 -5
  333. package/src/vite/build-shared-dependencies.ts +2 -1
  334. package/src/vite/config/__tests__/base-config.test.ts +12 -4
  335. package/src/vite/config/__tests__/create-css-config.test.ts +2 -6
  336. package/src/vite/config/__tests__/create-vite-config.test.ts +6 -3
  337. package/src/vite/config/base-config.ts +13 -1
  338. package/src/vite/config/create-vite-config.ts +6 -3
  339. package/src/vite/index.html +2 -2
  340. package/src/vite/index.ts +2 -0
  341. package/src/vite/plugins/__tests__/chain-source-maps-plugin.test.ts +1 -1
  342. package/src/vite/plugins/__tests__/clean-plugin.test.ts +1 -1
  343. package/src/vite/plugins/__tests__/css-injector-plugin.test.ts +1 -1
  344. package/src/vite/plugins/__tests__/design-system-guard-plugin.test.ts +15 -3
  345. package/src/vite/plugins/__tests__/dev-server-routing-plugin.test.ts +1 -1
  346. package/src/vite/plugins/__tests__/externals-plugin.test.ts +24 -3
  347. package/src/vite/plugins/__tests__/html-plugin.test.ts +10 -3
  348. package/src/vite/plugins/__tests__/html-template.test.ts +10 -2
  349. package/src/vite/plugins/__tests__/ignore-modules-plugin.test.ts +30 -6
  350. package/src/vite/plugins/__tests__/less-tilde-plugin.test.ts +91 -0
  351. package/src/vite/plugins/__tests__/metadata-plugin.test.ts +1 -1
  352. package/src/vite/plugins/__tests__/moment-locales-plugin.test.ts +35 -25
  353. package/src/vite/plugins/__tests__/style-urls-plugin.test.ts +1 -1
  354. package/src/vite/plugins/__tests__/virtual-modules-plugin.test.ts +20 -9
  355. package/src/vite/plugins/__tests__/window-externals-plugin.test.ts +128 -0
  356. package/src/vite/plugins/chain-source-maps-plugin.ts +1 -1
  357. package/src/vite/plugins/clean-plugin.ts +1 -1
  358. package/src/vite/plugins/css-injector-plugin.ts +1 -1
  359. package/src/vite/plugins/design-system-guard-plugin.ts +11 -8
  360. package/src/vite/plugins/dev-server-routing-plugin.ts +1 -1
  361. package/src/vite/plugins/externals-plugin.ts +15 -6
  362. package/src/vite/plugins/html-plugin.ts +4 -2
  363. package/src/vite/plugins/ignore-modules-plugin.ts +32 -23
  364. package/src/vite/plugins/index.ts +3 -0
  365. package/src/vite/plugins/less-tilde-plugin.ts +64 -0
  366. package/src/vite/plugins/magic-comments-plugin/magic-comments-plugin.ts +1 -1
  367. package/src/vite/plugins/metadata-plugin.ts +1 -1
  368. package/src/vite/plugins/moment-locales-plugin.ts +24 -14
  369. package/src/vite/plugins/react-refresh-plugin/README.md +165 -0
  370. package/src/vite/plugins/react-refresh-plugin/__tests__/react-refresh-plugin.test.ts +366 -0
  371. package/src/vite/plugins/react-refresh-plugin/__tests__/refresh-runtime.test.ts +193 -0
  372. package/src/vite/plugins/react-refresh-plugin/index.ts +1 -0
  373. package/src/vite/plugins/react-refresh-plugin/react-refresh-plugin.ts +144 -0
  374. package/src/vite/plugins/react-refresh-plugin/refresh-runtime.js +113 -0
  375. package/src/vite/plugins/shared-dependencies-plugin/__tests__/shared-dependencies-plugin.test.ts +21 -16
  376. package/src/vite/plugins/shared-dependencies-plugin/shared-dependencies-plugin.ts +13 -12
  377. package/src/vite/plugins/style-urls-plugin.ts +1 -1
  378. package/src/vite/plugins/virtual-modules-plugin.ts +8 -7
  379. package/src/vite/plugins/window-externals-plugin.ts +94 -0
  380. package/src/webpack/__tests__/bundle-webpack.test.ts +32 -0
  381. package/src/webpack/__tests__/create-webpack-config-web-component.test.ts +17 -5
  382. package/src/webpack/__tests__/create-webpack-config.test.ts +10 -6
  383. package/src/webpack/bundle-webpack.ts +7 -1
  384. package/src/webpack/configs/optimization-config.ts +3 -3
  385. package/src/webpack/configs/output-config.ts +1 -1
  386. package/src/webpack/utils/__tests__/normalize-proxy-config.test.ts +121 -0
  387. package/src/webpack/utils/index.ts +1 -0
  388. package/src/webpack/utils/normalize-proxy-config.ts +59 -0
  389. package/tsconfig/types.d.ts +10 -0
  390. package/dist/cli/utils/get-bundle-command.d.ts +0 -3
  391. package/dist/cli/utils/get-bundle-command.d.ts.map +0 -1
  392. package/dist/cli/utils/get-bundle-command.js +0 -16
  393. package/dist/cli/utils/get-bundle-command.js.map +0 -1
  394. package/src/cli/utils/__tests__/get-bundle-command.test.ts +0 -23
  395. package/src/cli/utils/get-bundle-command.ts +0 -5
@@ -7,7 +7,7 @@ jest.mock('../../../core', () => ({
7
7
  }));
8
8
 
9
9
  describe(virtualModulesPlugin.name, () => {
10
- const VIRTUAL_PREFIX = '\0VIRTUAL';
10
+ const VIRTUAL_PREFIX = '\0virtual-modules:';
11
11
  const indexCode = "import App from './app';\nregister(App, 'my-component');";
12
12
  const designSystemCss = '@import "design-system";';
13
13
 
@@ -33,7 +33,7 @@ describe(virtualModulesPlugin.name, () => {
33
33
  beforeEach(() => (modules.index = indexCode));
34
34
 
35
35
  test('returns plugin with correct name', () => {
36
- expect(subject()!.name).toBe('virtual-modules');
36
+ expect(subject()!.name).toBe('st:virtual-modules');
37
37
  });
38
38
 
39
39
  describe('resolveId', () => {
@@ -62,19 +62,30 @@ describe(virtualModulesPlugin.name, () => {
62
62
  });
63
63
  });
64
64
 
65
+ describe('load filter', () => {
66
+ const subject = () => {
67
+ const plugin = virtualModulesPlugin(context)!;
68
+ return (plugin.load as { filter: { id: RegExp } }).filter.id;
69
+ };
70
+
71
+ test('matches virtual module ids', () => {
72
+ expect(subject().test(`${VIRTUAL_PREFIX}./index`)).toBe(true);
73
+ });
74
+
75
+ test('ignores ordinary module ids', () => {
76
+ expect(subject().test('/src/app.tsx')).toBe(false);
77
+ });
78
+ });
79
+
65
80
  describe('load', () => {
66
81
  const subject = () => {
67
82
  const plugin = virtualModulesPlugin(context)!;
68
- return (id: string) => (plugin.load as Function).call(plugin, id);
83
+ return (id: string) => (plugin.load as { handler: Function }).handler.call({}, id);
69
84
  };
70
85
 
71
86
  test('returns module code for virtual id', () => {
72
87
  expect(subject()(`${VIRTUAL_PREFIX}./index`)).toBe(indexCode);
73
88
  });
74
-
75
- test('returns undefined for non-virtual id', () => {
76
- expect(subject()('./index')).toBeUndefined();
77
- });
78
89
  });
79
90
  });
80
91
 
@@ -90,8 +101,8 @@ describe(virtualModulesPlugin.name, () => {
90
101
 
91
102
  test('loads design system code', () => {
92
103
  const plugin = subject()!;
93
- const result = (plugin.load as Function).call(
94
- plugin,
104
+ const result = (plugin.load as { handler: Function }).handler.call(
105
+ {},
95
106
  `${VIRTUAL_PREFIX}./design-system.css`
96
107
  );
97
108
 
@@ -0,0 +1,128 @@
1
+ import { windowExternalsPlugin } from '../window-externals-plugin';
2
+
3
+ describe(`[startup] ${windowExternalsPlugin.name}`, () => {
4
+ const VIRTUAL_PREFIX = '\0window-externals:';
5
+ const plugin = windowExternalsPlugin({
6
+ jQuery: /^jquery$/,
7
+ moment: /^(moment|moment-timezone)$/,
8
+ accounting: { match: /^accounting$/, exports: ['formatMoney', 'formatNumber'] },
9
+ arcgis: { match: /^@arcgis\/core\//, member: s => s.split('/').pop() },
10
+ });
11
+
12
+ test("resolves before Vite's own resolver", () => {
13
+ expect(plugin.enforce).toBe('pre');
14
+ });
15
+
16
+ describe('resolveId filter', () => {
17
+ const subject = () => (plugin.resolveId as { filter: unknown }).filter;
18
+
19
+ test('scopes the hook to each entry regex', () => {
20
+ expect(subject()).toEqual({
21
+ id: [/^jquery$/, /^(moment|moment-timezone)$/, /^accounting$/, /^@arcgis\/core\//],
22
+ });
23
+ });
24
+ });
25
+
26
+ describe('resolveId', () => {
27
+ let source: string;
28
+
29
+ const subject = () =>
30
+ (plugin.resolveId as { handler: (s: string) => string | null }).handler(source);
31
+
32
+ function itClaimsTheId() {
33
+ test('claims the id', () => {
34
+ expect(subject()).toBe(`${VIRTUAL_PREFIX}${source}`);
35
+ });
36
+ }
37
+
38
+ describe('when source matches a regex entry', () => {
39
+ beforeEach(() => (source = 'jquery'));
40
+
41
+ itClaimsTheId();
42
+ });
43
+
44
+ describe.each(['moment', 'moment-timezone'])(
45
+ 'when source matches a multi-specifier regex',
46
+ specifier => {
47
+ beforeEach(() => (source = specifier));
48
+
49
+ itClaimsTheId();
50
+ }
51
+ );
52
+
53
+ describe('when source matches a { match, exports } entry', () => {
54
+ beforeEach(() => (source = 'accounting'));
55
+
56
+ itClaimsTheId();
57
+ });
58
+
59
+ describe('when source matches a { match, member } entry', () => {
60
+ beforeEach(() => (source = '@arcgis/core/views/MapView'));
61
+
62
+ itClaimsTheId();
63
+ });
64
+ });
65
+
66
+ describe('load filter', () => {
67
+ const subject = () => (plugin.load as { filter: { id: RegExp } }).filter.id;
68
+
69
+ test('matches the plugin virtual module ids', () => {
70
+ expect(subject().test(`${VIRTUAL_PREFIX}jquery`)).toBe(true);
71
+ });
72
+
73
+ test('ignores ordinary module ids', () => {
74
+ expect(subject().test('/src/app.tsx')).toBe(false);
75
+ });
76
+ });
77
+
78
+ describe('load', () => {
79
+ let id: string;
80
+
81
+ const subject = () =>
82
+ (plugin.load as { handler: (i: string) => string | null }).handler(id);
83
+
84
+ function itEmitsWindowGlobal(name: string) {
85
+ test('emits window.<global>', () => {
86
+ expect(subject()).toBe(`export default window.${name};`);
87
+ });
88
+ }
89
+
90
+ describe('when id matches a regex entry', () => {
91
+ beforeEach(() => (id = `${VIRTUAL_PREFIX}jquery`));
92
+
93
+ itEmitsWindowGlobal('jQuery');
94
+ });
95
+
96
+ describe.each(['moment', 'moment-timezone'])(
97
+ 'when id matches a multi-specifier regex',
98
+ specifier => {
99
+ beforeEach(() => (id = `${VIRTUAL_PREFIX}${specifier}`));
100
+
101
+ itEmitsWindowGlobal('moment');
102
+ }
103
+ );
104
+
105
+ describe('when id matches a { match, member } entry', () => {
106
+ beforeEach(() => (id = `${VIRTUAL_PREFIX}@arcgis/core/views/MapView`));
107
+
108
+ test('emits window.<global>[<member>]', () => {
109
+ expect(subject()).toBe('export default window.arcgis["MapView"];');
110
+ });
111
+ });
112
+
113
+ describe('when id matches a { match, exports } entry', () => {
114
+ beforeEach(() => (id = `${VIRTUAL_PREFIX}accounting`));
115
+
116
+ test('emits the default plus a named re-export per declared name', () => {
117
+ expect(subject()).toBe(
118
+ [
119
+ 'const _m = window.accounting;',
120
+ 'export default _m;',
121
+ 'export const formatMoney = _m.formatMoney;',
122
+ 'export const formatNumber = _m.formatNumber;',
123
+ ].join('\n')
124
+ );
125
+ });
126
+ });
127
+ });
128
+ });
@@ -9,7 +9,7 @@ import type { Plugin } from 'rolldown';
9
9
  */
10
10
  export function chainSourceMapsPlugin(): Plugin {
11
11
  return {
12
- name: 'chain-source-maps',
12
+ name: 'st:chain-source-maps',
13
13
  load(id) {
14
14
  const mapPath = `${id}.map`;
15
15
  if (id.endsWith('.js') && fs.existsSync(mapPath)) {
@@ -13,7 +13,7 @@ export function cleanPlugin(context: BuildContext): Plugin {
13
13
  let outDir = '';
14
14
 
15
15
  return {
16
- name: 'clean',
16
+ name: 'st:clean',
17
17
  apply: 'build',
18
18
  config: () => ({ build: { emptyOutDir: isWebComponent } }),
19
19
  configResolved(config) {
@@ -23,7 +23,7 @@ export function cssInjectorPlugin(context: BuildContext): Plugin | undefined {
23
23
  }
24
24
 
25
25
  return {
26
- name: 'mfe-css-injector',
26
+ name: 'st:mfe-css-injector',
27
27
  enforce: 'post',
28
28
  transform(code, id) {
29
29
  if (!id.endsWith('.css') && !id.endsWith('.less') && !id.endsWith('.scss')) {
@@ -20,15 +20,18 @@ export function designSystemGuardPlugin(context: BuildContext): Plugin {
20
20
  !emitExposedDependencies;
21
21
 
22
22
  return {
23
- name: 'design-system-guard',
23
+ name: 'st:design-system-guard',
24
24
  enforce: 'pre',
25
- resolveId(source, importer) {
26
- if (designSystemInSharedBundle && importer && DESIGN_SYSTEM_CSS.test(source)) {
27
- const filename = path.parse(importer).name;
28
- this.error(
29
- `do not import design-system.css in "${filename}"; it is automatically included as a shared dependency`
30
- );
31
- }
25
+ resolveId: {
26
+ filter: { id: DESIGN_SYSTEM_CSS },
27
+ handler(source, importer) {
28
+ if (designSystemInSharedBundle && importer && DESIGN_SYSTEM_CSS.test(source)) {
29
+ const filename = path.parse(importer).name;
30
+ this.error(
31
+ `do not import design-system.css in "${filename}"; it is automatically included as a shared dependency`
32
+ );
33
+ }
34
+ },
32
35
  },
33
36
  };
34
37
  }
@@ -38,7 +38,7 @@ export function devServerRoutingPlugin(context: BuildContext): Plugin {
38
38
  };
39
39
 
40
40
  return {
41
- name: 'dev-server-routing',
41
+ name: 'st:dev-server-routing',
42
42
 
43
43
  configResolved(config) {
44
44
  outDir = config.build.outDir;
@@ -3,6 +3,10 @@ import path from 'path';
3
3
  import type { Plugin } from 'vite';
4
4
  import { BuildContext, getExternals } from '../../core';
5
5
 
6
+ /* Dots are the only valid regex-special character in package names */
7
+ const buildEscapedRegExp = (dependency: string) =>
8
+ new RegExp(`^${dependency.replace(/\./g, '\\.')}$`);
9
+
6
10
  /*
7
11
  * Externalizes shared dependencies by redirecting imports to CJS proxy modules
8
12
  * that read from the host's global shared deps registry at runtime.
@@ -55,14 +59,14 @@ export function externalsPlugin(context: BuildContext): Plugin | undefined {
55
59
  const { isProduction } = context.build;
56
60
 
57
61
  return {
58
- name: 'externals',
62
+ name: 'st:externals',
59
63
  enforce: 'pre',
60
64
  config: isProduction
61
65
  ? undefined
62
66
  : () => ({
63
67
  resolve: {
64
68
  alias: Object.keys(entries).map(dep => ({
65
- find: new RegExp(`^${dep.replace('/', '\\/')}$`),
69
+ find: buildEscapedRegExp(dep),
66
70
  replacement: path.join(proxyNodeModules, dep),
67
71
  })),
68
72
  },
@@ -71,10 +75,15 @@ export function externalsPlugin(context: BuildContext): Plugin | undefined {
71
75
  },
72
76
  }),
73
77
  resolveId: isProduction
74
- ? (source: string) => {
75
- if (source in entries) {
76
- return path.join(proxyNodeModules, source, 'index.cjs');
77
- }
78
+ ? {
79
+ filter: {
80
+ id: Object.keys(entries).map(buildEscapedRegExp),
81
+ },
82
+ handler(source: string) {
83
+ if (source in entries) {
84
+ return path.join(proxyNodeModules, source, 'index.cjs');
85
+ }
86
+ },
78
87
  }
79
88
  : undefined,
80
89
  };
@@ -7,7 +7,7 @@ import { ViteBuildContext } from '../types';
7
7
 
8
8
  export function htmlPlugin(context: ViteBuildContext): Plugin {
9
9
  const { name, isProduction } = context.build;
10
- const { isWebComponent } = context.package;
10
+ const { isWebComponent, destination } = context.package;
11
11
  const { css, js } = getSharedEntryPoints(context);
12
12
  const { pluginOverrides } = context.bundlerConfig;
13
13
 
@@ -26,6 +26,7 @@ export function htmlPlugin(context: ViteBuildContext): Plugin {
26
26
  isProduction,
27
27
  isWebComponent,
28
28
  name,
29
+ tsOutDir: destination,
29
30
  });
30
31
  }
31
32
 
@@ -42,7 +43,7 @@ export function htmlPlugin(context: ViteBuildContext): Plugin {
42
43
  const VIRTUAL_HTML_PATH = path.resolve(INDEX_HTML);
43
44
 
44
45
  return {
45
- name: 'html',
46
+ name: 'st:html',
46
47
  /*
47
48
  * Auto-detect favicon.ico in vite's publicDir so projects following
48
49
  * the convention get a working favicon link without explicit config.
@@ -64,6 +65,7 @@ export function htmlPlugin(context: ViteBuildContext): Plugin {
64
65
  }
65
66
  let html = renderHtml();
66
67
  html = await server.transformIndexHtml(req.url, html);
68
+ res.setHeader('Content-Type', 'text/html');
67
69
  res.end(html);
68
70
  });
69
71
  };
@@ -2,8 +2,11 @@ import type { Plugin } from 'vite';
2
2
  import { checkResource } from '../../core';
3
3
  import type { PackageContext } from '../../core/types';
4
4
 
5
- export const THROW_PREFIX = '\0IGNORE_THROW:';
6
- export const EMPTY_PREFIX = '\0IGNORE_EMPTY:';
5
+ const VIRTUAL_PREFIX = '\0ignore-modules:';
6
+ const VIRTUAL_ID_PATTERN = new RegExp(`^${VIRTUAL_PREFIX}`);
7
+
8
+ export const THROW_PREFIX = `${VIRTUAL_PREFIX}throw:`;
9
+ export const EMPTY_PREFIX = `${VIRTUAL_PREFIX}empty:`;
7
10
 
8
11
  /**
9
12
  * Handles optional peer dependencies that are not installed.
@@ -26,29 +29,35 @@ export function ignoreModulesPlugin(context: {
26
29
  const checker = checkResource(context);
27
30
 
28
31
  return {
29
- name: 'ignore-modules',
32
+ name: 'st:ignore-modules',
30
33
  enforce: 'pre',
31
- resolveId(source, importer) {
32
- if (!importer) {
33
- return;
34
- }
35
- const mode = checker({ resource: source, importer });
36
- if (mode === 'throw') {
37
- return `${THROW_PREFIX}${source}`;
38
- }
39
- if (mode === 'empty') {
40
- return `${EMPTY_PREFIX}${source}`;
41
- }
34
+ resolveId: {
35
+ filter: { id: /^[@a-z]/ }, // Only bare specifiers can be optional peers
36
+ handler(source, importer) {
37
+ if (!importer) {
38
+ return;
39
+ }
40
+ const mode = checker({ resource: source, importer });
41
+ if (mode === 'throw') {
42
+ return `${THROW_PREFIX}${source}`;
43
+ }
44
+ if (mode === 'empty') {
45
+ return `${EMPTY_PREFIX}${source}`;
46
+ }
47
+ },
42
48
  },
43
- load(id) {
44
- if (id.startsWith(THROW_PREFIX)) {
45
- const source = id.slice(THROW_PREFIX.length);
46
- const message = JSON.stringify(`Cannot find module '${source}'`);
47
- return `throw Object.assign(new Error(${message}), { code: 'MODULE_NOT_FOUND' });`;
48
- }
49
- if (id.startsWith(EMPTY_PREFIX)) {
50
- return 'export {};';
51
- }
49
+ load: {
50
+ filter: { id: VIRTUAL_ID_PATTERN },
51
+ handler(id) {
52
+ if (id.startsWith(THROW_PREFIX)) {
53
+ const source = id.slice(THROW_PREFIX.length);
54
+ const message = JSON.stringify(`Cannot find module '${source}'`);
55
+ return `throw Object.assign(new Error(${message}), { code: 'MODULE_NOT_FOUND' });`;
56
+ }
57
+ if (id.startsWith(EMPTY_PREFIX)) {
58
+ return 'export {};';
59
+ }
60
+ },
52
61
  },
53
62
  };
54
63
  }
@@ -8,9 +8,12 @@ export * from './externals-plugin';
8
8
  export * from './html-plugin';
9
9
  export * from './ignore-modules-plugin';
10
10
  export * from './istanbul-plugin';
11
+ export * from './less-tilde-plugin';
11
12
  export * from './magic-comments-plugin';
12
13
  export * from './metadata-plugin';
13
14
  export * from './moment-locales-plugin';
15
+ export * from './react-refresh-plugin';
14
16
  export * from './style-urls-plugin';
15
17
  export * from './svgr-plugin';
16
18
  export * from './virtual-modules-plugin';
19
+ export * from './window-externals-plugin';
@@ -0,0 +1,64 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import { findUp } from '../../utils';
4
+
5
+ interface LessPluginManager {
6
+ addFileManager(manager: unknown): void;
7
+ }
8
+
9
+ /*
10
+ * Less plugin that resolves webpack-style `~pkg` imports (e.g. `~@servicetitan/tokens/...`) from
11
+ * node_modules. Vite's Less integration does not understand the `~` prefix, so without this every
12
+ * style importing a package with `~` fails to resolve. Mirrors the old less-loader behavior to
13
+ * ease webpack-to-Vite migration.
14
+ */
15
+ export function lessTildePlugin() {
16
+ return {
17
+ install(less: any, pluginManager: LessPluginManager) {
18
+ const TildeFileManager = createTildeFileManager(less);
19
+ pluginManager.addFileManager(new TildeFileManager());
20
+ },
21
+ };
22
+ }
23
+
24
+ /*
25
+ * A FileManager subclass bound to the Less instance Vite passes to the plugin. It claims `~`
26
+ * imports and rewrites them to a node_modules path before delegating to the base loader.
27
+ */
28
+ function createTildeFileManager(less: any) {
29
+ return class extends less.FileManager {
30
+ supports(filename: string) {
31
+ return filename.startsWith('~');
32
+ }
33
+
34
+ loadFile(
35
+ filename: string,
36
+ currentDirectory: string,
37
+ options: unknown,
38
+ environment: unknown
39
+ ) {
40
+ return super.loadFile(
41
+ resolveFromNodeModules(filename.slice(1), currentDirectory),
42
+ currentDirectory,
43
+ options,
44
+ environment
45
+ );
46
+ }
47
+ };
48
+ }
49
+
50
+ /*
51
+ * Resolve a bare `pkg/path` specifier against the nearest node_modules, walking up from the
52
+ * importing file's directory, so the import binds to the importer's dependencies (matching
53
+ * webpack, and covering both pnpm's symlinked store and npm's hoisted tree).
54
+ */
55
+ function resolveFromNodeModules(specifier: string, fromDirectory: string): string {
56
+ const withExtension = path.extname(specifier) ? specifier : `${specifier}.less`;
57
+
58
+ const resolved = findUp(directory => {
59
+ const candidate = path.join(directory, 'node_modules', withExtension);
60
+ return fs.existsSync(candidate) ? candidate : undefined;
61
+ }, fromDirectory);
62
+
63
+ return resolved ?? withExtension;
64
+ }
@@ -19,7 +19,7 @@ export function magicCommentsPlugin(context: ViteBuildContext): Plugin | undefin
19
19
  const moduleByName = new Map<string, string>();
20
20
 
21
21
  return {
22
- name: 'magic-comments',
22
+ name: 'st:magic-comments',
23
23
  apply: 'build',
24
24
  enforce: 'pre',
25
25
  config: () => ({
@@ -12,7 +12,7 @@ export function metadataPlugin(context: BuildContext): Plugin | undefined {
12
12
  let outDir = '';
13
13
 
14
14
  return {
15
- name: 'metadata',
15
+ name: 'st:metadata',
16
16
  configResolved(config) {
17
17
  outDir = config.build.outDir;
18
18
  },
@@ -1,7 +1,8 @@
1
1
  import type { Plugin } from 'vite';
2
2
  import { BuildContext, MOMENT_LOCALES } from '../../core';
3
3
 
4
- export const VIRTUAL_MOMENT = '\0VIRTUAL_MOMENT';
4
+ export const VIRTUAL_MOMENT = '\0moment-locales';
5
+ const VIRTUAL_ID_PATTERN = new RegExp(`^${VIRTUAL_MOMENT}`);
5
6
 
6
7
  const UMD_LOCALE = /^moment\/locale\/(.+)$/;
7
8
 
@@ -15,27 +16,36 @@ const UMD_LOCALE = /^moment\/locale\/(.+)$/;
15
16
  */
16
17
  export function momentLocalesPlugin(_context: BuildContext): Plugin {
17
18
  return {
18
- name: 'moment-locales',
19
+ name: 'st:moment-locales',
19
20
  enforce: 'pre',
20
- resolveId(source, importer, options) {
21
- if (source === 'moment') {
22
- return VIRTUAL_MOMENT;
23
- }
24
- // Redirect explicit UMD locale imports to the ESM build so they share that instance.
25
- const locale = UMD_LOCALE.exec(source)?.[1];
26
- if (locale) {
27
- return this.resolve(`moment/dist/locale/${locale}`, importer, options);
28
- }
21
+ resolveId: {
22
+ filter: { id: [/^moment$/, UMD_LOCALE] },
23
+ handler(source, importer, options) {
24
+ if (source === 'moment') {
25
+ return VIRTUAL_MOMENT;
26
+ }
27
+ // Redirect explicit UMD locale imports to the ESM build so they share that instance.
28
+ const locale = UMD_LOCALE.exec(source)?.[1];
29
+ if (locale) {
30
+ return this.resolve(`moment/dist/locale/${locale}`, importer, options);
31
+ }
32
+ },
29
33
  },
30
- load(id) {
31
- if (id === VIRTUAL_MOMENT) {
34
+ load: {
35
+ filter: { id: VIRTUAL_ID_PATTERN },
36
+ handler() {
32
37
  return [
33
38
  ...MOMENT_LOCALES.map(locale => `import 'moment/dist/locale/${locale}';`),
34
39
  `import moment from 'moment/dist/moment.js';`,
35
40
  `export * from 'moment/dist/moment.js';`,
36
41
  `export default moment;`,
42
+ /*
43
+ * moment attaches these to the function itself rather than declaring them as
44
+ * real ES named exports, so `export *` above doesn't forward them.
45
+ */
46
+ `export const isMoment = moment.isMoment;`,
37
47
  ].join('\n');
38
- }
48
+ },
39
49
  },
40
50
  };
41
51
  }