@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
@@ -0,0 +1,193 @@
1
+ import {
2
+ __hmr_import,
3
+ registerExportsForReactRefresh,
4
+ validateRefreshBoundaryAndEnqueueUpdate,
5
+ } from '../refresh-runtime.js';
6
+
7
+ declare global {
8
+ interface Window {
9
+ // eslint-disable-next-line @typescript-eslint/naming-convention
10
+ __registerBeforePerformReactRefresh: (callback: () => Promise<void>) => void;
11
+ }
12
+ }
13
+
14
+ describe('[startup] react refresh runtime helpers', () => {
15
+ const moduleId = '/dist/app.js';
16
+ const component = () => null;
17
+
18
+ let nextExports: Record<string, unknown>;
19
+ let prevExports: Record<string, unknown>;
20
+ let RefreshRuntime: {
21
+ isLikelyComponentType: jest.Mock;
22
+ performReactRefresh: jest.Mock;
23
+ register: jest.Mock;
24
+ };
25
+
26
+ beforeEach(() => {
27
+ jest.clearAllMocks();
28
+ jest.useFakeTimers();
29
+
30
+ RefreshRuntime = {
31
+ isLikelyComponentType: jest.fn(value => value === component),
32
+ performReactRefresh: jest.fn(),
33
+ register: jest.fn(),
34
+ };
35
+ Object.defineProperty(window, '__ReactRefreshRuntime', {
36
+ configurable: true,
37
+ value: RefreshRuntime,
38
+ });
39
+ });
40
+
41
+ afterEach(() => {
42
+ jest.useRealTimers();
43
+ });
44
+
45
+ describe('registerExportsForReactRefresh', () => {
46
+ const subject = () => {
47
+ const moduleExports = {
48
+ App: component,
49
+ count: 1,
50
+ };
51
+ Object.defineProperty(moduleExports, '__esModule', {
52
+ enumerable: true,
53
+ value: true,
54
+ });
55
+
56
+ registerExportsForReactRefresh(moduleId, moduleExports);
57
+ };
58
+
59
+ test('registers component exports', () => {
60
+ subject();
61
+
62
+ expect(RefreshRuntime.register).toHaveBeenCalledWith(
63
+ component,
64
+ `${moduleId} export App`
65
+ );
66
+ });
67
+
68
+ test('skips non-component exports', () => {
69
+ subject();
70
+
71
+ expect(RefreshRuntime.register).toHaveBeenCalledTimes(1);
72
+ });
73
+ });
74
+
75
+ describe('validateRefreshBoundaryAndEnqueueUpdate', () => {
76
+ beforeEach(() => {
77
+ prevExports = { App: component };
78
+ nextExports = { App: component };
79
+ });
80
+
81
+ const subject = () =>
82
+ validateRefreshBoundaryAndEnqueueUpdate(moduleId, prevExports, nextExports);
83
+
84
+ function itQueuesASingleRefresh() {
85
+ test('queues a single refresh', async () => {
86
+ subject();
87
+ await jest.advanceTimersByTimeAsync(16);
88
+
89
+ expect(RefreshRuntime.performReactRefresh).toHaveBeenCalledTimes(1);
90
+ });
91
+ }
92
+
93
+ itQueuesASingleRefresh();
94
+
95
+ describe('with a before refresh callback', () => {
96
+ const callback = jest.fn(async () => {});
97
+
98
+ beforeEach(() => window.__registerBeforePerformReactRefresh(callback));
99
+
100
+ test('runs the callback before refreshing', async () => {
101
+ subject();
102
+ await jest.advanceTimersByTimeAsync(16);
103
+
104
+ expect(callback).toHaveBeenCalledTimes(1);
105
+ expect(RefreshRuntime.performReactRefresh).toHaveBeenCalledTimes(1);
106
+ });
107
+ });
108
+
109
+ describe('with __esModule exports', () => {
110
+ beforeEach(() => {
111
+ Object.defineProperty(prevExports, '__esModule', {
112
+ enumerable: true,
113
+ value: true,
114
+ });
115
+ Object.defineProperty(nextExports, '__esModule', {
116
+ enumerable: true,
117
+ value: true,
118
+ });
119
+ });
120
+
121
+ itQueuesASingleRefresh();
122
+ });
123
+
124
+ describe('with unchanged non-component exports', () => {
125
+ const unchangedValue = { stable: true };
126
+
127
+ beforeEach(() => {
128
+ prevExports.value = unchangedValue;
129
+ nextExports.value = unchangedValue;
130
+ });
131
+
132
+ itQueuesASingleRefresh();
133
+ });
134
+
135
+ describe('with changed non-component exports', () => {
136
+ beforeEach(() => {
137
+ prevExports.value = 'before';
138
+ nextExports.value = 'after';
139
+ });
140
+
141
+ test('returns an incompatible export message', () => {
142
+ expect(subject()).toBe('Could not Fast Refresh ("value" export is incompatible).');
143
+ });
144
+ });
145
+
146
+ describe('with removed exports', () => {
147
+ beforeEach(() => {
148
+ prevExports.value = 'before';
149
+ });
150
+
151
+ test('returns an export removed message', () => {
152
+ expect(subject()).toBe('Could not Fast Refresh (export removed)');
153
+ });
154
+ });
155
+
156
+ describe('with new exports', () => {
157
+ beforeEach(() => {
158
+ nextExports.value = 'after';
159
+ });
160
+
161
+ test('returns a new export message', () => {
162
+ expect(subject()).toBe('Could not Fast Refresh (new export)');
163
+ });
164
+ });
165
+
166
+ describe('with getter exports', () => {
167
+ beforeEach(() => {
168
+ Object.defineProperty(nextExports, 'value', {
169
+ enumerable: true,
170
+ get: () => {
171
+ throw new Error('getter should not run');
172
+ },
173
+ });
174
+ Object.defineProperty(prevExports, 'value', {
175
+ enumerable: true,
176
+ value: 'before',
177
+ });
178
+ });
179
+
180
+ test('returns an invalidation message', () => {
181
+ expect(subject()).toContain('Could not Fast Refresh');
182
+ });
183
+ });
184
+ });
185
+
186
+ describe('__hmr_import', () => {
187
+ const subject = () => __hmr_import('missing-refresh-runtime-test-module');
188
+
189
+ test('delegates to native dynamic import', async () => {
190
+ await expect(subject()).rejects.toThrow();
191
+ });
192
+ });
193
+ });
@@ -0,0 +1 @@
1
+ export * from './react-refresh-plugin';
@@ -0,0 +1,144 @@
1
+ import fs from 'fs';
2
+ import MagicString from 'magic-string';
3
+ import path from 'path';
4
+ import type { Plugin } from 'vite';
5
+ import type { BuildContext } from '../../../core';
6
+ import { findPackages } from '../../../utils';
7
+
8
+ const RUNTIME_ID = '/@react-refresh';
9
+ const RUNTIME_HELPERS_PATH = path.join(__dirname, 'refresh-runtime.js');
10
+
11
+ /* Triggers injectIntoGlobalHook (via the virtual module's side effect) before app code executes. */
12
+ const preamble = `import "${RUNTIME_ID}";`;
13
+
14
+ /*
15
+ * Per-module locals satisfy swc's $RefreshReg$/$RefreshSig$ calls without relying on
16
+ * window globals. Scoping the registration id to the served module URL ensures host and
17
+ * MFE servers sharing one runtime singleton cannot produce colliding refresh families.
18
+ */
19
+ const modulePrelude = `import RefreshRuntime from "${RUNTIME_ID}";
20
+ const __react_refresh_id__ = import.meta.url.replace(/[?#].*$/, "");
21
+ var $RefreshReg$ = (type, id) => RefreshRuntime.register(type, __react_refresh_id__ + " " + id);
22
+ var $RefreshSig$ = () => RefreshRuntime.createSignatureFunctionForTransform();\n`;
23
+
24
+ /* Makes refreshable modules self-accepting and runs React Fast Refresh after safe updates. */
25
+ const postlude = `
26
+ import {
27
+ __hmr_import,
28
+ registerExportsForReactRefresh,
29
+ validateRefreshBoundaryAndEnqueueUpdate,
30
+ } from "${RUNTIME_ID}";
31
+ if (import.meta.hot) {
32
+ __hmr_import(__react_refresh_id__).then(currentExports => {
33
+ registerExportsForReactRefresh(__react_refresh_id__, currentExports);
34
+ import.meta.hot.accept(nextExports => {
35
+ if (!nextExports) {
36
+ return;
37
+ }
38
+
39
+ const invalidateMessage = validateRefreshBoundaryAndEnqueueUpdate(
40
+ __react_refresh_id__,
41
+ currentExports,
42
+ nextExports
43
+ );
44
+
45
+ if (invalidateMessage) {
46
+ import.meta.hot.invalidate(invalidateMessage);
47
+ }
48
+ });
49
+ });
50
+ }`;
51
+
52
+ function transformWithSourceMap(source: MagicString, id: string) {
53
+ return {
54
+ code: source.toString(),
55
+ map: source.generateMap({ hires: true, source: id }),
56
+ };
57
+ }
58
+
59
+ function normalizeSlashes(filePath: string) {
60
+ return filePath.replaceAll('\\', '/');
61
+ }
62
+
63
+ function getRefreshRuntimeCode() {
64
+ return `\
65
+ import _RefreshRuntime from "react-refresh/runtime";
66
+ const RefreshRuntime = window.__ReactRefreshRuntime || _RefreshRuntime;
67
+ if (!window.__ReactRefreshRuntime) {
68
+ _RefreshRuntime.injectIntoGlobalHook(window);
69
+ }
70
+ window.__ReactRefreshRuntime = RefreshRuntime;
71
+ ${fs.readFileSync(RUNTIME_HELPERS_PATH, 'utf8')}
72
+ export default RefreshRuntime;`;
73
+ }
74
+
75
+ /* Bridges swc's refresh markers to Vite HMR and the React Fast Refresh runtime. */
76
+ export function reactRefreshPlugin(context: BuildContext): Plugin | undefined {
77
+ if (context.build.isProduction) {
78
+ return;
79
+ }
80
+
81
+ const refreshableModuleDirs = findPackages().map(
82
+ ({ location }) => normalizeSlashes(location) + '/'
83
+ );
84
+
85
+ return {
86
+ name: 'react-refresh',
87
+ enforce: 'pre',
88
+ /* Serve react-refresh/runtime as an ESM virtual module. */
89
+ resolveId(source) {
90
+ if (source === RUNTIME_ID) {
91
+ return { id: RUNTIME_ID, moduleSideEffects: true };
92
+ }
93
+ },
94
+ load(id) {
95
+ if (id === RUNTIME_ID) {
96
+ return { code: getRefreshRuntimeCode() };
97
+ }
98
+ },
99
+ /* Inject the preamble before React and app code load. */
100
+ transformIndexHtml() {
101
+ return [
102
+ {
103
+ tag: 'script',
104
+ attrs: { type: 'module' },
105
+ children: preamble,
106
+ injectTo: 'head-prepend',
107
+ },
108
+ ];
109
+ },
110
+ /* Handle modules compiled with swc refresh markers. */
111
+ transform: {
112
+ filter: { code: /\$RefreshReg\$|\$RefreshSig\$/ },
113
+ handler(code, id) {
114
+ const normalizedId = normalizeSlashes(id);
115
+ const isRefreshableModule = refreshableModuleDirs.some(dir =>
116
+ normalizedId.startsWith(dir)
117
+ );
118
+
119
+ /* Prevent non-workspace libraries from registering duplicate refresh families. */
120
+ if (!isRefreshableModule) {
121
+ const source = new MagicString(code);
122
+ const noopPreamble =
123
+ 'var $RefreshReg$ = () => {};\nvar $RefreshSig$ = () => (t) => t;\n';
124
+ source.prepend(noopPreamble);
125
+ return transformWithSourceMap(source, id);
126
+ }
127
+
128
+ /*
129
+ * Workspace modules always get per-module refresh locals. This satisfies
130
+ * $RefreshSig$ calls in HOC-wrapped modules without relying on window globals.
131
+ * Modules with registered component families additionally get an HMR postlude.
132
+ */
133
+ const source = new MagicString(code);
134
+ source.prepend(modulePrelude);
135
+
136
+ if (code.includes('$RefreshReg$')) {
137
+ source.append(postlude);
138
+ }
139
+
140
+ return transformWithSourceMap(source, id);
141
+ },
142
+ },
143
+ };
144
+ }
@@ -0,0 +1,113 @@
1
+ /*
2
+ * MIT License
3
+ *
4
+ * Copyright (c) 2019-present, Yuxi (Evan) You and Vite contributors
5
+ *
6
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ * of this software and associated documentation files (the "Software"), to deal
8
+ * in the Software without restriction, including without limitation the rights
9
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ * copies of the Software, and to permit persons to whom the Software is
11
+ * furnished to do so, subject to the following conditions:
12
+ *
13
+ * The above copyright notice and this permission notice shall be included in all
14
+ * copies or substantial portions of the Software.
15
+ *
16
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ * SOFTWARE.
23
+ */
24
+
25
+ /*
26
+ * Adapted from https://github.com/vitejs/vite-plugin-react/blob/84693214ef8cccc3357561fe4654f401a30dab62/packages/common/refresh-runtime.js.
27
+ * Keep this local because the helpers are bundled into that plugin's virtual
28
+ * runtime and are not exposed as stable public package exports.
29
+ *
30
+ * This file is served inside the browser-only /@react-refresh virtual module.
31
+ * It relies on that module storing the runtime on window.__ReactRefreshRuntime.
32
+ */
33
+ const refreshCallbacks = [];
34
+
35
+ function getRefreshRuntime() {
36
+ return window.__ReactRefreshRuntime;
37
+ }
38
+
39
+ // Hook for integrations to finish async work before the debounced refresh flush.
40
+ window.__registerBeforePerformReactRefresh = callback => {
41
+ refreshCallbacks.push(callback);
42
+ };
43
+
44
+ function debounce(fn, delay) {
45
+ let handle;
46
+ return () => {
47
+ clearTimeout(handle);
48
+ handle = setTimeout(fn, delay);
49
+ };
50
+ }
51
+
52
+ const enqueueUpdate = debounce(async () => {
53
+ if (refreshCallbacks.length) {
54
+ await Promise.all(refreshCallbacks.map(callback => callback()));
55
+ }
56
+ getRefreshRuntime().performReactRefresh();
57
+ }, 16);
58
+
59
+ function predicateOnExport(moduleExports, predicate) {
60
+ for (const key in moduleExports) {
61
+ if (key === '__esModule') {
62
+ continue;
63
+ }
64
+ const descriptor = Object.getOwnPropertyDescriptor(moduleExports, key);
65
+ if (descriptor?.get) {
66
+ return key;
67
+ }
68
+ if (!predicate(key, moduleExports[key])) {
69
+ return key;
70
+ }
71
+ }
72
+ return true;
73
+ }
74
+
75
+ export function registerExportsForReactRefresh(id, moduleExports) {
76
+ for (const key in moduleExports) {
77
+ if (key === '__esModule') {
78
+ continue;
79
+ }
80
+ const exportValue = moduleExports[key];
81
+ if (getRefreshRuntime().isLikelyComponentType(exportValue)) {
82
+ getRefreshRuntime().register(exportValue, `${id} export ${key}`);
83
+ }
84
+ }
85
+ }
86
+
87
+ export function validateRefreshBoundaryAndEnqueueUpdate(id, prevExports, nextExports) {
88
+ if (predicateOnExport(prevExports, key => key in nextExports) !== true) {
89
+ return 'Could not Fast Refresh (export removed)';
90
+ }
91
+ if (predicateOnExport(nextExports, key => key in prevExports) !== true) {
92
+ return 'Could not Fast Refresh (new export)';
93
+ }
94
+
95
+ let hasExports = false;
96
+ const allExportsAreComponentsOrUnchanged = predicateOnExport(nextExports, (key, value) => {
97
+ hasExports = true;
98
+ if (getRefreshRuntime().isLikelyComponentType(value)) {
99
+ return true;
100
+ }
101
+ return prevExports[key] === nextExports[key];
102
+ });
103
+
104
+ if (hasExports && allExportsAreComponentsOrUnchanged === true) {
105
+ enqueueUpdate();
106
+ } else {
107
+ return `Could not Fast Refresh ("${allExportsAreComponentsOrUnchanged}" export is incompatible).`;
108
+ }
109
+ }
110
+
111
+ export function __hmr_import(module) {
112
+ return import(/* @vite-ignore */ module);
113
+ }
@@ -14,7 +14,7 @@ jest.mock('../../../../core', () => ({
14
14
  }));
15
15
 
16
16
  describe(sharedDependenciesPlugin.name, () => {
17
- const CSS_VIRTUAL_PREFIX = '\0SHARED_DEPENDENCY_CSS';
17
+ const CSS_VIRTUAL_PREFIX = '\0shared-dependencies:css:';
18
18
  const mockDependencies: Record<string, string> = {
19
19
  'react': 'globalReact',
20
20
  '@scope/lib': 'globalScopeLib',
@@ -32,7 +32,7 @@ describe(sharedDependenciesPlugin.name, () => {
32
32
  const subject = () => sharedDependenciesPlugin(options);
33
33
 
34
34
  test('returns plugin with correct name', () => {
35
- expect(subject().name).toBe('shared-dependencies');
35
+ expect(subject().name).toBe('st:shared-dependencies');
36
36
  });
37
37
 
38
38
  test('enforces pre', () => {
@@ -204,6 +204,21 @@ describe(sharedDependenciesPlugin.name, () => {
204
204
  });
205
205
  });
206
206
 
207
+ describe('load filter', () => {
208
+ const subject = () => {
209
+ const plugin = sharedDependenciesPlugin(options);
210
+ return (plugin.load as { filter: { id: RegExp } }).filter.id;
211
+ };
212
+
213
+ test('matches the CSS virtual module ids', () => {
214
+ expect(subject().test(`${CSS_VIRTUAL_PREFIX}design-system`)).toBe(true);
215
+ });
216
+
217
+ test('ignores ordinary module ids', () => {
218
+ expect(subject().test('/src/app.tsx')).toBe(false);
219
+ });
220
+ });
221
+
207
222
  describe('load', () => {
208
223
  const cssName = 'design-system';
209
224
  const cssImports = ['tokens.css', 'fonts.css'];
@@ -217,29 +232,19 @@ describe(sharedDependenciesPlugin.name, () => {
217
232
 
218
233
  const subject = () => {
219
234
  const plugin = sharedDependenciesPlugin(options);
220
- return (plugin.load as Function).call(plugin, id);
221
- };
222
-
223
- const itReturnsUndefined = () => {
224
- test('returns undefined', () => {
225
- expect(subject()).toBeUndefined();
226
- });
235
+ return (plugin.load as { handler: Function }).handler.call({}, id);
227
236
  };
228
237
 
229
238
  test('returns import statements', () => {
230
239
  expect(subject()).toBe(cssImports.map(p => `import '${p}';`).join('\n'));
231
240
  });
232
241
 
233
- describe('when id is not a CSS virtual module', () => {
234
- beforeEach(() => (id = ''));
235
-
236
- itReturnsUndefined();
237
- });
238
-
239
242
  describe('with unknown CSS module', () => {
240
243
  beforeEach(() => (id = CSS_VIRTUAL_PREFIX + 'unknown'));
241
244
 
242
- itReturnsUndefined();
245
+ test('returns undefined', () => {
246
+ expect(subject()).toBeUndefined();
247
+ });
243
248
  });
244
249
  });
245
250
 
@@ -20,7 +20,8 @@ export function sharedDependenciesPlugin({
20
20
  css,
21
21
  metadataDir,
22
22
  }: SharedDependenciesPluginOptions): Plugin {
23
- const CSS_VIRTUAL_PREFIX = '\0SHARED_DEPENDENCY_CSS';
23
+ const CSS_VIRTUAL_PREFIX = '\0shared-dependencies:css:';
24
+ const CSS_VIRTUAL_ID_PATTERN = new RegExp(`^${CSS_VIRTUAL_PREFIX}`);
24
25
 
25
26
  const dependencyNames = Object.keys(dependencies);
26
27
  const dependencySet = new Set(dependencyNames);
@@ -29,7 +30,7 @@ export function sharedDependenciesPlugin({
29
30
  let isProduction = false;
30
31
 
31
32
  return {
32
- name: 'shared-dependencies',
33
+ name: 'st:shared-dependencies',
33
34
  enforce: 'pre',
34
35
 
35
36
  config(_, env) {
@@ -100,16 +101,16 @@ export function sharedDependenciesPlugin({
100
101
  }
101
102
  },
102
103
 
103
- load(id: string) {
104
- if (!id.startsWith(CSS_VIRTUAL_PREFIX)) {
105
- return;
106
- }
107
- const name = id.slice(CSS_VIRTUAL_PREFIX.length);
108
- const imports = cssEntries[name];
109
- if (!imports) {
110
- return;
111
- }
112
- return imports.map(p => `import '${p}';`).join('\n');
104
+ load: {
105
+ filter: { id: CSS_VIRTUAL_ID_PATTERN },
106
+ handler(id: string) {
107
+ const name = id.slice(CSS_VIRTUAL_PREFIX.length);
108
+ const imports = cssEntries[name];
109
+ if (!imports) {
110
+ return;
111
+ }
112
+ return imports.map(p => `import '${p}';`).join('\n');
113
+ },
113
114
  },
114
115
 
115
116
  generateBundle(_options, bundle) {
@@ -7,7 +7,7 @@ export function styleUrlsPlugin(context: BuildContext): Plugin | undefined {
7
7
  const { isWebComponent } = context.package;
8
8
  if (isWebComponent && isProduction) {
9
9
  return {
10
- name: 'style-urls',
10
+ name: 'st:style-urls',
11
11
  transformIndexHtml: {
12
12
  order: 'post',
13
13
  handler(html, ctx) {
@@ -3,7 +3,8 @@ import type { Plugin } from 'vite';
3
3
  import { BuildContext, virtualModules } from '../../core';
4
4
 
5
5
  export function virtualModulesPlugin(context: BuildContext): Plugin | undefined {
6
- const VIRTUAL_PREFIX = '\0VIRTUAL';
6
+ const VIRTUAL_PREFIX = '\0virtual-modules:';
7
+ const VIRTUAL_ID_PATTERN = new RegExp(`^${VIRTUAL_PREFIX}`);
7
8
 
8
9
  const { destination } = context.package;
9
10
 
@@ -24,7 +25,7 @@ export function virtualModulesPlugin(context: BuildContext): Plugin | undefined
24
25
  }
25
26
 
26
27
  return {
27
- name: 'virtual-modules',
28
+ name: 'st:virtual-modules',
28
29
  resolveId(source, importer) {
29
30
  if (pluginModules[source]) {
30
31
  return VIRTUAL_PREFIX + source;
@@ -36,11 +37,11 @@ export function virtualModulesPlugin(context: BuildContext): Plugin | undefined
36
37
  }
37
38
  }
38
39
  },
39
- load(id) {
40
- if (id.startsWith(VIRTUAL_PREFIX)) {
41
- const idNoPrefix = id.slice(VIRTUAL_PREFIX.length);
42
- return pluginModules[idNoPrefix];
43
- }
40
+ load: {
41
+ filter: { id: VIRTUAL_ID_PATTERN },
42
+ handler(id) {
43
+ return pluginModules[id.slice(VIRTUAL_PREFIX.length)];
44
+ },
44
45
  },
45
46
  };
46
47
  }