@servicetitan/startup 36.4.0 → 37.0.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 (442) hide show
  1. package/bin/analyze.js +3 -0
  2. package/dist/cli/commands/build.d.ts.map +1 -1
  3. package/dist/cli/commands/build.js +4 -5
  4. package/dist/cli/commands/build.js.map +1 -1
  5. package/dist/cli/commands/bundle-vite.d.ts.map +1 -1
  6. package/dist/cli/commands/bundle-vite.js +18 -1
  7. package/dist/cli/commands/bundle-vite.js.map +1 -1
  8. package/dist/cli/commands/registry/build.d.ts +6 -0
  9. package/dist/cli/commands/registry/build.d.ts.map +1 -1
  10. package/dist/cli/commands/registry/build.js +10 -1
  11. package/dist/cli/commands/registry/build.js.map +1 -1
  12. package/dist/cli/commands/registry/command-registry.d.ts +12 -28
  13. package/dist/cli/commands/registry/command-registry.d.ts.map +1 -1
  14. package/dist/cli/commands/registry/command-registry.js +0 -3
  15. package/dist/cli/commands/registry/command-registry.js.map +1 -1
  16. package/dist/cli/commands/registry/start.d.ts +6 -0
  17. package/dist/cli/commands/registry/start.d.ts.map +1 -1
  18. package/dist/cli/commands/registry/start.js +10 -1
  19. package/dist/cli/commands/registry/start.js.map +1 -1
  20. package/dist/cli/commands/review/rules/index.d.ts.map +1 -1
  21. package/dist/cli/commands/review/rules/index.js +2 -0
  22. package/dist/cli/commands/review/rules/index.js.map +1 -1
  23. package/dist/cli/commands/review/rules/require-compatible-typescript.d.ts +13 -0
  24. package/dist/cli/commands/review/rules/require-compatible-typescript.d.ts.map +1 -0
  25. package/dist/cli/commands/review/rules/require-compatible-typescript.js +72 -0
  26. package/dist/cli/commands/review/rules/require-compatible-typescript.js.map +1 -0
  27. package/dist/cli/commands/start.d.ts.map +1 -1
  28. package/dist/cli/commands/start.js +3 -4
  29. package/dist/cli/commands/start.js.map +1 -1
  30. package/dist/cli/index.js +1 -1
  31. package/dist/cli/index.js.map +1 -1
  32. package/dist/cli/utils/get-bundle-command.d.ts +3 -0
  33. package/dist/cli/utils/get-bundle-command.d.ts.map +1 -0
  34. package/dist/cli/utils/get-bundle-command.js +16 -0
  35. package/dist/cli/utils/get-bundle-command.js.map +1 -0
  36. package/dist/cli/utils/get-exit-code.d.ts +12 -0
  37. package/dist/cli/utils/get-exit-code.d.ts.map +1 -0
  38. package/dist/cli/utils/get-exit-code.js +26 -0
  39. package/dist/cli/utils/get-exit-code.js.map +1 -0
  40. package/dist/cli/utils/index.d.ts +3 -0
  41. package/dist/cli/utils/index.d.ts.map +1 -1
  42. package/dist/cli/utils/index.js +3 -0
  43. package/dist/cli/utils/index.js.map +1 -1
  44. package/dist/cli/utils/resolve-bundler.d.ts +8 -0
  45. package/dist/cli/utils/resolve-bundler.d.ts.map +1 -0
  46. package/dist/cli/utils/resolve-bundler.js +24 -0
  47. package/dist/cli/utils/resolve-bundler.js.map +1 -0
  48. package/dist/core/bundle-report.d.ts +4 -0
  49. package/dist/core/bundle-report.d.ts.map +1 -0
  50. package/dist/core/bundle-report.js +43 -0
  51. package/dist/core/bundle-report.js.map +1 -0
  52. package/dist/core/check-resource/check-resource.d.ts +2 -2
  53. package/dist/core/check-resource/check-resource.d.ts.map +1 -1
  54. package/dist/core/check-resource/check-resource.js +20 -13
  55. package/dist/core/check-resource/check-resource.js.map +1 -1
  56. package/dist/core/check-resource/get-peer-dependency-meta.d.ts +11 -1
  57. package/dist/core/check-resource/get-peer-dependency-meta.d.ts.map +1 -1
  58. package/dist/core/check-resource/get-peer-dependency-meta.js +58 -2
  59. package/dist/core/check-resource/get-peer-dependency-meta.js.map +1 -1
  60. package/dist/core/check-resource/index.d.ts +1 -1
  61. package/dist/core/check-resource/index.d.ts.map +1 -1
  62. package/dist/core/check-resource/index.js.map +1 -1
  63. package/dist/core/check-resource/is-resolvable.d.ts +7 -0
  64. package/dist/core/check-resource/is-resolvable.d.ts.map +1 -0
  65. package/dist/core/check-resource/is-resolvable.js +31 -0
  66. package/dist/core/check-resource/is-resolvable.js.map +1 -0
  67. package/dist/core/check-resource/types.d.ts +1 -0
  68. package/dist/core/check-resource/types.d.ts.map +1 -1
  69. package/dist/core/chunk-patterns.d.ts +7 -0
  70. package/dist/core/chunk-patterns.d.ts.map +1 -0
  71. package/dist/core/chunk-patterns.js +37 -0
  72. package/dist/core/chunk-patterns.js.map +1 -0
  73. package/dist/core/create-build-context.d.ts +0 -1
  74. package/dist/core/create-build-context.d.ts.map +1 -1
  75. package/dist/core/create-build-context.js +2 -2
  76. package/dist/core/create-build-context.js.map +1 -1
  77. package/dist/core/create-extension-regexp.d.ts +5 -0
  78. package/dist/core/create-extension-regexp.d.ts.map +1 -0
  79. package/dist/core/create-extension-regexp.js +45 -0
  80. package/dist/core/create-extension-regexp.js.map +1 -0
  81. package/dist/core/get-process-env.d.ts +3 -0
  82. package/dist/core/get-process-env.d.ts.map +1 -0
  83. package/dist/core/get-process-env.js +25 -0
  84. package/dist/core/get-process-env.js.map +1 -0
  85. package/dist/core/index.d.ts +8 -1
  86. package/dist/core/index.d.ts.map +1 -1
  87. package/dist/core/index.js +8 -1
  88. package/dist/core/index.js.map +1 -1
  89. package/dist/core/moment-locales.d.ts +2 -0
  90. package/dist/core/moment-locales.d.ts.map +1 -0
  91. package/dist/core/moment-locales.js +21 -0
  92. package/dist/core/moment-locales.js.map +1 -0
  93. package/dist/core/resolve-output-path.d.ts +3 -0
  94. package/dist/core/resolve-output-path.d.ts.map +1 -0
  95. package/dist/core/resolve-output-path.js +25 -0
  96. package/dist/core/resolve-output-path.js.map +1 -0
  97. package/dist/core/resolve-output-root.d.ts +3 -0
  98. package/dist/core/resolve-output-root.d.ts.map +1 -0
  99. package/dist/core/resolve-output-root.js +23 -0
  100. package/dist/core/resolve-output-root.js.map +1 -0
  101. package/dist/core/sort-shared-css.d.ts +2 -0
  102. package/dist/core/sort-shared-css.d.ts.map +1 -0
  103. package/dist/core/sort-shared-css.js +20 -0
  104. package/dist/core/sort-shared-css.js.map +1 -0
  105. package/dist/core/types.d.ts +1 -1
  106. package/dist/core/types.d.ts.map +1 -1
  107. package/dist/cypress/config/index.d.ts +1 -0
  108. package/dist/cypress/config/index.d.ts.map +1 -1
  109. package/dist/cypress/config/index.js +1 -0
  110. package/dist/cypress/config/index.js.map +1 -1
  111. package/dist/cypress/config/vite-config.d.ts +3 -0
  112. package/dist/cypress/config/vite-config.d.ts.map +1 -0
  113. package/dist/cypress/config/vite-config.js +58 -0
  114. package/dist/cypress/config/vite-config.js.map +1 -0
  115. package/dist/storybook-config/index.d.ts +1 -0
  116. package/dist/storybook-config/index.d.ts.map +1 -1
  117. package/dist/storybook-config/index.js +1 -0
  118. package/dist/storybook-config/index.js.map +1 -1
  119. package/dist/storybook-config/vite-final.d.ts +7 -0
  120. package/dist/storybook-config/vite-final.d.ts.map +1 -0
  121. package/dist/storybook-config/vite-final.js +86 -0
  122. package/dist/storybook-config/vite-final.js.map +1 -0
  123. package/dist/utils/get-configuration.d.ts +15 -10
  124. package/dist/utils/get-configuration.d.ts.map +1 -1
  125. package/dist/utils/get-configuration.js +32 -2
  126. package/dist/utils/get-configuration.js.map +1 -1
  127. package/dist/utils/get-package-name.d.ts +2 -1
  128. package/dist/utils/get-package-name.d.ts.map +1 -1
  129. package/dist/utils/get-package-name.js +4 -2
  130. package/dist/utils/get-package-name.js.map +1 -1
  131. package/dist/utils/index.d.ts +1 -0
  132. package/dist/utils/index.d.ts.map +1 -1
  133. package/dist/utils/index.js.map +1 -1
  134. package/dist/utils/types.d.ts +2 -0
  135. package/dist/utils/types.d.ts.map +1 -0
  136. package/dist/utils/types.js +6 -0
  137. package/dist/utils/types.js.map +1 -0
  138. package/dist/utils/validate-shared-dependencies.d.ts.map +1 -1
  139. package/dist/utils/validate-shared-dependencies.js +4 -0
  140. package/dist/utils/validate-shared-dependencies.js.map +1 -1
  141. package/dist/vite/build-shared-dependencies.d.ts.map +1 -1
  142. package/dist/vite/build-shared-dependencies.js +1 -2
  143. package/dist/vite/build-shared-dependencies.js.map +1 -1
  144. package/dist/vite/config/asset-file-names.d.ts +4 -0
  145. package/dist/vite/config/asset-file-names.d.ts.map +1 -0
  146. package/dist/vite/config/asset-file-names.js +29 -0
  147. package/dist/vite/config/asset-file-names.js.map +1 -0
  148. package/dist/vite/config/base-config.d.ts.map +1 -1
  149. package/dist/vite/config/base-config.js +67 -40
  150. package/dist/vite/config/base-config.js.map +1 -1
  151. package/dist/vite/config/code-splitting.d.ts +4 -0
  152. package/dist/vite/config/code-splitting.d.ts.map +1 -0
  153. package/dist/vite/config/code-splitting.js +48 -0
  154. package/dist/vite/config/code-splitting.js.map +1 -0
  155. package/dist/vite/config/create-css-config.d.ts +3 -0
  156. package/dist/vite/config/create-css-config.d.ts.map +1 -0
  157. package/dist/vite/config/create-css-config.js +26 -0
  158. package/dist/vite/config/create-css-config.js.map +1 -0
  159. package/dist/vite/config/create-filtering-logger.d.ts +3 -0
  160. package/dist/vite/config/create-filtering-logger.d.ts.map +1 -0
  161. package/dist/vite/config/create-filtering-logger.js +37 -0
  162. package/dist/vite/config/create-filtering-logger.js.map +1 -0
  163. package/dist/vite/config/create-vite-build-context.d.ts +2 -1
  164. package/dist/vite/config/create-vite-build-context.d.ts.map +1 -1
  165. package/dist/vite/config/create-vite-build-context.js.map +1 -1
  166. package/dist/vite/config/create-vite-config.d.ts.map +1 -1
  167. package/dist/vite/config/create-vite-config.js +30 -13
  168. package/dist/vite/config/create-vite-config.js.map +1 -1
  169. package/dist/vite/config/get-warmup-client-files.d.ts +3 -0
  170. package/dist/vite/config/get-warmup-client-files.d.ts.map +1 -0
  171. package/dist/vite/config/get-warmup-client-files.js +26 -0
  172. package/dist/vite/config/get-warmup-client-files.js.map +1 -0
  173. package/dist/vite/index.html +1 -0
  174. package/dist/vite/plugins/bundle-stat-plugin.d.ts +4 -0
  175. package/dist/vite/plugins/bundle-stat-plugin.d.ts.map +1 -0
  176. package/dist/vite/plugins/bundle-stat-plugin.js +32 -0
  177. package/dist/vite/plugins/bundle-stat-plugin.js.map +1 -0
  178. package/dist/vite/plugins/chain-source-maps-plugin.d.ts +3 -0
  179. package/dist/vite/plugins/chain-source-maps-plugin.d.ts.map +1 -0
  180. package/dist/vite/plugins/chain-source-maps-plugin.js +37 -0
  181. package/dist/vite/plugins/chain-source-maps-plugin.js.map +1 -0
  182. package/dist/vite/plugins/clean-plugin.d.ts +4 -0
  183. package/dist/vite/plugins/clean-plugin.d.ts.map +1 -0
  184. package/dist/vite/plugins/clean-plugin.js +63 -0
  185. package/dist/vite/plugins/clean-plugin.js.map +1 -0
  186. package/dist/vite/plugins/design-system-guard-plugin.d.ts +4 -0
  187. package/dist/vite/plugins/design-system-guard-plugin.d.ts.map +1 -0
  188. package/dist/vite/plugins/design-system-guard-plugin.js +35 -0
  189. package/dist/vite/plugins/design-system-guard-plugin.js.map +1 -0
  190. package/dist/vite/plugins/ignore-modules-plugin.d.ts +17 -1
  191. package/dist/vite/plugins/ignore-modules-plugin.d.ts.map +1 -1
  192. package/dist/vite/plugins/ignore-modules-plugin.js +22 -8
  193. package/dist/vite/plugins/ignore-modules-plugin.js.map +1 -1
  194. package/dist/vite/plugins/index.d.ts +7 -0
  195. package/dist/vite/plugins/index.d.ts.map +1 -1
  196. package/dist/vite/plugins/index.js +7 -0
  197. package/dist/vite/plugins/index.js.map +1 -1
  198. package/dist/vite/plugins/istanbul-plugin.d.ts +4 -0
  199. package/dist/vite/plugins/istanbul-plugin.d.ts.map +1 -0
  200. package/dist/vite/plugins/istanbul-plugin.js +27 -0
  201. package/dist/vite/plugins/istanbul-plugin.js.map +1 -0
  202. package/dist/vite/plugins/magic-comments-plugin/index.d.ts +2 -0
  203. package/dist/vite/plugins/magic-comments-plugin/index.d.ts.map +1 -0
  204. package/dist/vite/plugins/magic-comments-plugin/index.js +20 -0
  205. package/dist/vite/plugins/magic-comments-plugin/index.js.map +1 -0
  206. package/dist/vite/plugins/magic-comments-plugin/magic-comments-plugin.d.ts +4 -0
  207. package/dist/vite/plugins/magic-comments-plugin/magic-comments-plugin.d.ts.map +1 -0
  208. package/dist/vite/plugins/magic-comments-plugin/magic-comments-plugin.js +63 -0
  209. package/dist/vite/plugins/magic-comments-plugin/magic-comments-plugin.js.map +1 -0
  210. package/dist/vite/plugins/magic-comments-plugin/parse-magic-comments.d.ts +6 -0
  211. package/dist/vite/plugins/magic-comments-plugin/parse-magic-comments.d.ts.map +1 -0
  212. package/dist/vite/plugins/magic-comments-plugin/parse-magic-comments.js +40 -0
  213. package/dist/vite/plugins/magic-comments-plugin/parse-magic-comments.js.map +1 -0
  214. package/dist/vite/plugins/metadata-plugin.js +2 -2
  215. package/dist/vite/plugins/metadata-plugin.js.map +1 -1
  216. package/dist/vite/plugins/moment-locales-plugin.d.ts +5 -0
  217. package/dist/vite/plugins/moment-locales-plugin.d.ts.map +1 -0
  218. package/dist/vite/plugins/moment-locales-plugin.js +50 -0
  219. package/dist/vite/plugins/moment-locales-plugin.js.map +1 -0
  220. package/dist/vite/plugins/shared-dependencies-plugin/assemble-iife.d.ts +14 -0
  221. package/dist/vite/plugins/shared-dependencies-plugin/assemble-iife.d.ts.map +1 -0
  222. package/dist/vite/plugins/shared-dependencies-plugin/assemble-iife.js +100 -0
  223. package/dist/vite/plugins/shared-dependencies-plugin/assemble-iife.js.map +1 -0
  224. package/dist/vite/plugins/shared-dependencies-plugin/assert-no-dynamic-css.d.ts +3 -0
  225. package/dist/vite/plugins/shared-dependencies-plugin/assert-no-dynamic-css.d.ts.map +1 -0
  226. package/dist/vite/plugins/shared-dependencies-plugin/assert-no-dynamic-css.js +56 -0
  227. package/dist/vite/plugins/shared-dependencies-plugin/assert-no-dynamic-css.js.map +1 -0
  228. package/dist/vite/plugins/shared-dependencies-plugin/flatten.d.ts +2 -0
  229. package/dist/vite/plugins/shared-dependencies-plugin/flatten.d.ts.map +1 -0
  230. package/dist/vite/plugins/shared-dependencies-plugin/flatten.js +19 -0
  231. package/dist/vite/plugins/shared-dependencies-plugin/flatten.js.map +1 -0
  232. package/dist/vite/plugins/shared-dependencies-plugin/index.d.ts +2 -0
  233. package/dist/vite/plugins/shared-dependencies-plugin/index.d.ts.map +1 -0
  234. package/dist/vite/plugins/shared-dependencies-plugin/index.js +20 -0
  235. package/dist/vite/plugins/shared-dependencies-plugin/index.js.map +1 -0
  236. package/dist/vite/plugins/shared-dependencies-plugin/shared-dependencies-plugin.d.ts.map +1 -0
  237. package/dist/vite/plugins/{shared-dependencies-plugin.js → shared-dependencies-plugin/shared-dependencies-plugin.js} +29 -107
  238. package/dist/vite/plugins/shared-dependencies-plugin/shared-dependencies-plugin.js.map +1 -0
  239. package/dist/vite/plugins/utils/import-esm.d.ts +2 -0
  240. package/dist/vite/plugins/utils/import-esm.d.ts.map +1 -0
  241. package/dist/vite/plugins/utils/import-esm.js +22 -0
  242. package/dist/vite/plugins/utils/import-esm.js.map +1 -0
  243. package/dist/vite/plugins/utils/index.d.ts +3 -0
  244. package/dist/vite/plugins/utils/index.d.ts.map +1 -0
  245. package/dist/vite/plugins/utils/index.js +21 -0
  246. package/dist/vite/plugins/utils/index.js.map +1 -0
  247. package/dist/webpack/configs/optimization-config.d.ts.map +1 -1
  248. package/dist/webpack/configs/optimization-config.js +53 -24
  249. package/dist/webpack/configs/optimization-config.js.map +1 -1
  250. package/dist/webpack/configs/output-config.d.ts.map +1 -1
  251. package/dist/webpack/configs/output-config.js +0 -1
  252. package/dist/webpack/configs/output-config.js.map +1 -1
  253. package/dist/webpack/configs/plugins/assets-manifest-plugin.d.ts.map +1 -1
  254. package/dist/webpack/configs/plugins/assets-manifest-plugin.js +11 -3
  255. package/dist/webpack/configs/plugins/assets-manifest-plugin.js.map +1 -1
  256. package/dist/webpack/configs/plugins/bundle-analyser-plugin.d.ts.map +1 -1
  257. package/dist/webpack/configs/plugins/bundle-analyser-plugin.js +2 -21
  258. package/dist/webpack/configs/plugins/bundle-analyser-plugin.js.map +1 -1
  259. package/dist/webpack/configs/plugins/define-process-env-plugin.d.ts +5 -0
  260. package/dist/webpack/configs/plugins/define-process-env-plugin.d.ts.map +1 -0
  261. package/dist/webpack/configs/plugins/define-process-env-plugin.js +20 -0
  262. package/dist/webpack/configs/plugins/define-process-env-plugin.js.map +1 -0
  263. package/dist/webpack/configs/plugins/ignore-plugin/empty-module.d.ts +2 -0
  264. package/dist/webpack/configs/plugins/ignore-plugin/empty-module.d.ts.map +1 -0
  265. package/dist/webpack/configs/plugins/ignore-plugin/empty-module.js +11 -0
  266. package/dist/webpack/configs/plugins/ignore-plugin/empty-module.js.map +1 -0
  267. package/dist/webpack/configs/plugins/ignore-plugin/ignore-plugin.d.ts +26 -3
  268. package/dist/webpack/configs/plugins/ignore-plugin/ignore-plugin.d.ts.map +1 -1
  269. package/dist/webpack/configs/plugins/ignore-plugin/ignore-plugin.js +41 -10
  270. package/dist/webpack/configs/plugins/ignore-plugin/ignore-plugin.js.map +1 -1
  271. package/dist/webpack/configs/plugins/index.d.ts +1 -0
  272. package/dist/webpack/configs/plugins/index.d.ts.map +1 -1
  273. package/dist/webpack/configs/plugins/index.js +1 -0
  274. package/dist/webpack/configs/plugins/index.js.map +1 -1
  275. package/dist/webpack/configs/plugins/moment-locales-plugin.d.ts.map +1 -1
  276. package/dist/webpack/configs/plugins/moment-locales-plugin.js +2 -5
  277. package/dist/webpack/configs/plugins/moment-locales-plugin.js.map +1 -1
  278. package/dist/webpack/configs/plugins-config.d.ts.map +1 -1
  279. package/dist/webpack/configs/plugins-config.js +1 -0
  280. package/dist/webpack/configs/plugins-config.js.map +1 -1
  281. package/dist/webpack/configs/rules/font-rules.d.ts.map +1 -1
  282. package/dist/webpack/configs/rules/font-rules.js +2 -1
  283. package/dist/webpack/configs/rules/font-rules.js.map +1 -1
  284. package/dist/webpack/configs/rules/image-rules.d.ts.map +1 -1
  285. package/dist/webpack/configs/rules/image-rules.js +2 -1
  286. package/dist/webpack/configs/rules/image-rules.js.map +1 -1
  287. package/dist/webpack/create-webpack-config.d.ts.map +1 -1
  288. package/dist/webpack/create-webpack-config.js +8 -3
  289. package/dist/webpack/create-webpack-config.js.map +1 -1
  290. package/dist/webpack/create-webpack-configs.d.ts.map +1 -1
  291. package/dist/webpack/create-webpack-configs.js +4 -12
  292. package/dist/webpack/create-webpack-configs.js.map +1 -1
  293. package/dist/webpack/types.d.ts +1 -1
  294. package/dist/webpack/types.d.ts.map +1 -1
  295. package/dist/webpack/utils/create-webpack-build-context.d.ts.map +1 -1
  296. package/dist/webpack/utils/create-webpack-build-context.js +1 -2
  297. package/dist/webpack/utils/create-webpack-build-context.js.map +1 -1
  298. package/package.json +22 -18
  299. package/src/cli/commands/__tests__/build.test.ts +33 -5
  300. package/src/cli/commands/__tests__/bundle-vite.test.ts +50 -1
  301. package/src/cli/commands/__tests__/start.test.ts +17 -4
  302. package/src/cli/commands/build.ts +5 -6
  303. package/src/cli/commands/bundle-vite.ts +13 -0
  304. package/src/cli/commands/registry/build.ts +6 -1
  305. package/src/cli/commands/registry/command-registry.ts +0 -1
  306. package/src/cli/commands/registry/start.ts +6 -1
  307. package/src/cli/commands/review/rules/__tests__/require-compatible-typescript.test.ts +127 -0
  308. package/src/cli/commands/review/rules/index.ts +2 -0
  309. package/src/cli/commands/review/rules/require-compatible-typescript.ts +64 -0
  310. package/src/cli/commands/start.ts +4 -4
  311. package/src/cli/index.ts +2 -2
  312. package/src/cli/utils/__tests__/get-bundle-command.test.ts +23 -0
  313. package/src/cli/utils/__tests__/get-exit-code.test.ts +41 -0
  314. package/src/cli/utils/__tests__/resolve-bundler.test.ts +64 -0
  315. package/src/cli/utils/get-bundle-command.ts +5 -0
  316. package/src/cli/utils/get-exit-code.ts +17 -0
  317. package/src/cli/utils/index.ts +3 -0
  318. package/src/cli/utils/resolve-bundler.ts +23 -0
  319. package/src/core/__tests__/bundle-report.test.ts +60 -0
  320. package/src/core/__tests__/create-extension-regexp.test.ts +32 -0
  321. package/src/core/__tests__/resolve-output-path.test.ts +45 -0
  322. package/src/core/__tests__/resolve-output-root.test.ts +37 -0
  323. package/src/core/__tests__/sort-shared-css.test.ts +39 -0
  324. package/src/core/bundle-report.ts +33 -0
  325. package/src/core/check-resource/__tests__/check-resource.test.ts +21 -7
  326. package/src/core/check-resource/__tests__/get-peer-dependency-meta.test.ts +70 -13
  327. package/src/core/check-resource/__tests__/is-resolvable.test.ts +20 -0
  328. package/src/core/check-resource/check-resource.ts +15 -14
  329. package/src/core/check-resource/get-peer-dependency-meta.ts +67 -4
  330. package/src/core/check-resource/index.ts +1 -1
  331. package/src/core/check-resource/is-resolvable.ts +19 -0
  332. package/src/core/check-resource/types.ts +2 -0
  333. package/src/core/chunk-patterns.ts +30 -0
  334. package/src/core/create-build-context.ts +2 -2
  335. package/src/core/create-extension-regexp.ts +7 -0
  336. package/src/core/get-process-env.ts +17 -0
  337. package/src/core/index.ts +8 -1
  338. package/src/core/moment-locales.ts +6 -0
  339. package/src/core/resolve-output-path.ts +10 -0
  340. package/src/core/resolve-output-root.ts +8 -0
  341. package/src/core/sort-shared-css.ts +7 -0
  342. package/src/core/types.ts +1 -1
  343. package/src/cypress/config/__tests__/vite-config.test.ts +72 -0
  344. package/src/cypress/config/index.ts +1 -0
  345. package/src/cypress/config/vite-config.ts +37 -0
  346. package/src/storybook-config/__tests__/vite-final.test.ts +122 -0
  347. package/src/storybook-config/index.ts +1 -0
  348. package/src/storybook-config/vite-final.ts +65 -0
  349. package/src/utils/__tests__/get-configuration.test.ts +82 -5
  350. package/src/utils/__tests__/get-package-name.test.ts +57 -0
  351. package/src/utils/__tests__/validate-shared-dependencies.test.ts +50 -35
  352. package/src/utils/get-configuration.ts +50 -15
  353. package/src/utils/get-package-name.ts +8 -2
  354. package/src/utils/index.ts +1 -0
  355. package/src/utils/types.ts +1 -0
  356. package/src/utils/validate-shared-dependencies.ts +15 -1
  357. package/src/vite/__tests__/build-shared-dependencies.test.ts +13 -26
  358. package/src/vite/__tests__/validate-shared-dependencies.test.ts +30 -19
  359. package/src/vite/build-shared-dependencies.ts +3 -7
  360. package/src/vite/config/__tests__/asset-file-names.test.ts +40 -0
  361. package/src/vite/config/__tests__/base-config.test.ts +99 -31
  362. package/src/vite/config/__tests__/code-splitting.test.ts +34 -0
  363. package/src/vite/config/__tests__/create-css-config.test.ts +58 -0
  364. package/src/vite/config/__tests__/create-filtering-logger.test.ts +51 -0
  365. package/src/vite/config/__tests__/create-vite-build-context.test.ts +5 -2
  366. package/src/vite/config/__tests__/create-vite-config.test.ts +91 -13
  367. package/src/vite/config/__tests__/get-warmup-client-files.test.ts +20 -0
  368. package/src/vite/config/asset-file-names.ts +20 -0
  369. package/src/vite/config/base-config.ts +45 -37
  370. package/src/vite/config/code-splitting.ts +23 -0
  371. package/src/vite/config/create-css-config.ts +16 -0
  372. package/src/vite/config/create-filtering-logger.ts +34 -0
  373. package/src/vite/config/create-vite-build-context.ts +3 -5
  374. package/src/vite/config/create-vite-config.ts +45 -12
  375. package/src/vite/config/get-warmup-client-files.ts +13 -0
  376. package/src/vite/index.html +1 -0
  377. package/src/vite/plugins/__tests__/bundle-stat-plugin.test.ts +70 -0
  378. package/src/vite/plugins/__tests__/chain-source-maps-plugin.test.ts +58 -0
  379. package/src/vite/plugins/__tests__/clean-plugin.test.ts +121 -0
  380. package/src/vite/plugins/__tests__/design-system-guard-plugin.test.ts +83 -0
  381. package/src/vite/plugins/__tests__/html-template.test.ts +6 -0
  382. package/src/vite/plugins/__tests__/ignore-modules-plugin.test.ts +29 -7
  383. package/src/vite/plugins/__tests__/istanbul-plugin.test.ts +62 -0
  384. package/src/vite/plugins/__tests__/moment-locales-plugin.test.ts +104 -0
  385. package/src/vite/plugins/bundle-stat-plugin.ts +24 -0
  386. package/src/vite/plugins/chain-source-maps-plugin.ts +26 -0
  387. package/src/vite/plugins/clean-plugin.ts +46 -0
  388. package/src/vite/plugins/design-system-guard-plugin.ts +34 -0
  389. package/src/vite/plugins/ignore-modules-plugin.ts +31 -5
  390. package/src/vite/plugins/index.ts +7 -0
  391. package/src/vite/plugins/istanbul-plugin.ts +19 -0
  392. package/src/vite/plugins/magic-comments-plugin/__tests__/magic-comments-plugin.test.ts +105 -0
  393. package/src/vite/plugins/magic-comments-plugin/__tests__/parse-magic-comments.test.ts +40 -0
  394. package/src/vite/plugins/magic-comments-plugin/index.ts +1 -0
  395. package/src/vite/plugins/magic-comments-plugin/magic-comments-plugin.ts +63 -0
  396. package/src/vite/plugins/magic-comments-plugin/parse-magic-comments.ts +39 -0
  397. package/src/vite/plugins/metadata-plugin.ts +1 -1
  398. package/src/vite/plugins/moment-locales-plugin.ts +41 -0
  399. package/src/vite/plugins/shared-dependencies-plugin/__tests__/assemble-iife.test.ts +29 -0
  400. package/src/vite/plugins/shared-dependencies-plugin/__tests__/assert-no-dynamic-css.test.ts +113 -0
  401. package/src/vite/plugins/shared-dependencies-plugin/__tests__/flatten.test.ts +23 -0
  402. package/src/vite/plugins/{__tests__ → shared-dependencies-plugin/__tests__}/shared-dependencies-plugin.test.ts +38 -4
  403. package/src/vite/plugins/shared-dependencies-plugin/assemble-iife.ts +114 -0
  404. package/src/vite/plugins/shared-dependencies-plugin/assert-no-dynamic-css.ts +58 -0
  405. package/src/vite/plugins/shared-dependencies-plugin/flatten.ts +8 -0
  406. package/src/vite/plugins/shared-dependencies-plugin/index.ts +1 -0
  407. package/src/vite/plugins/{shared-dependencies-plugin.ts → shared-dependencies-plugin/shared-dependencies-plugin.ts} +24 -115
  408. package/src/vite/plugins/utils/import-esm.ts +15 -0
  409. package/src/vite/plugins/utils/index.ts +2 -0
  410. package/src/vite/rolldown-oxc.d.ts +20 -0
  411. package/src/webpack/__tests__/bundle-webpack.test.ts +8 -8
  412. package/src/webpack/__tests__/create-webpack-config-shared-dependencies.test.ts +54 -5
  413. package/src/webpack/__tests__/create-webpack-config-web-component.test.ts +70 -12
  414. package/src/webpack/__tests__/create-webpack-config.test.ts +92 -9
  415. package/src/webpack/configs/optimization-config.ts +47 -25
  416. package/src/webpack/configs/output-config.ts +1 -2
  417. package/src/webpack/configs/plugins/assets-manifest-plugin.ts +16 -4
  418. package/src/webpack/configs/plugins/bundle-analyser-plugin.ts +3 -25
  419. package/src/webpack/configs/plugins/define-process-env-plugin.ts +10 -0
  420. package/src/webpack/configs/plugins/ignore-plugin/__tests__/ignore-plugin.test.ts +76 -24
  421. package/src/webpack/configs/plugins/ignore-plugin/empty-module.ts +7 -0
  422. package/src/webpack/configs/plugins/ignore-plugin/ignore-plugin.ts +59 -9
  423. package/src/webpack/configs/plugins/index.ts +1 -0
  424. package/src/webpack/configs/plugins/moment-locales-plugin.ts +2 -2
  425. package/src/webpack/configs/plugins-config.ts +2 -0
  426. package/src/webpack/configs/rules/font-rules.ts +2 -2
  427. package/src/webpack/configs/rules/image-rules.ts +2 -2
  428. package/src/webpack/create-webpack-config.ts +11 -4
  429. package/src/webpack/create-webpack-configs.ts +2 -8
  430. package/src/webpack/types.ts +1 -4
  431. package/src/webpack/utils/create-webpack-build-context.ts +1 -6
  432. package/tsconfig/base.json +1 -1
  433. package/tsconfig/types.d.ts +10 -0
  434. package/dist/core/get-output-path.d.ts +0 -3
  435. package/dist/core/get-output-path.d.ts.map +0 -1
  436. package/dist/core/get-output-path.js +0 -29
  437. package/dist/core/get-output-path.js.map +0 -1
  438. package/dist/vite/plugins/shared-dependencies-plugin.d.ts.map +0 -1
  439. package/dist/vite/plugins/shared-dependencies-plugin.js.map +0 -1
  440. package/src/core/__tests__/get-output-path.test.ts +0 -64
  441. package/src/core/get-output-path.ts +0 -15
  442. /package/dist/vite/plugins/{shared-dependencies-plugin.d.ts → shared-dependencies-plugin/shared-dependencies-plugin.d.ts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"moment-locales-plugin.d.ts","sourceRoot":"","sources":["../../../src/vite/plugins/moment-locales-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,EAAE,YAAY,EAAkB,MAAM,YAAY,CAAC;AAE1D,eAAO,MAAM,cAAc,qBAAqB,CAAC;AAYjD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CAyBlE"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
+ });
10
+ }
11
+ _export(exports, {
12
+ get VIRTUAL_MOMENT () {
13
+ return VIRTUAL_MOMENT;
14
+ },
15
+ get momentLocalesPlugin () {
16
+ return momentLocalesPlugin;
17
+ }
18
+ });
19
+ const _core = require("../../core");
20
+ const VIRTUAL_MOMENT = '\0VIRTUAL_MOMENT';
21
+ const UMD_LOCALE = /^moment\/locale\/(.+)$/;
22
+ function momentLocalesPlugin(_context) {
23
+ return {
24
+ name: 'moment-locales',
25
+ enforce: 'pre',
26
+ resolveId (source, importer, options) {
27
+ var _UMD_LOCALE_exec;
28
+ if (source === 'moment') {
29
+ return VIRTUAL_MOMENT;
30
+ }
31
+ // Redirect explicit UMD locale imports to the ESM build so they share that instance.
32
+ const locale = (_UMD_LOCALE_exec = UMD_LOCALE.exec(source)) === null || _UMD_LOCALE_exec === void 0 ? void 0 : _UMD_LOCALE_exec[1];
33
+ if (locale) {
34
+ return this.resolve(`moment/dist/locale/${locale}`, importer, options);
35
+ }
36
+ },
37
+ load (id) {
38
+ if (id === VIRTUAL_MOMENT) {
39
+ return [
40
+ ..._core.MOMENT_LOCALES.map((locale)=>`import 'moment/dist/locale/${locale}';`),
41
+ `import moment from 'moment/dist/moment.js';`,
42
+ `export * from 'moment/dist/moment.js';`,
43
+ `export default moment;`
44
+ ].join('\n');
45
+ }
46
+ }
47
+ };
48
+ }
49
+
50
+ //# sourceMappingURL=moment-locales-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/vite/plugins/moment-locales-plugin.ts"],"sourcesContent":["import type { Plugin } from 'vite';\nimport { BuildContext, MOMENT_LOCALES } from '../../core';\n\nexport const VIRTUAL_MOMENT = '\\0VIRTUAL_MOMENT';\n\nconst UMD_LOCALE = /^moment\\/locale\\/(.+)$/;\n\n/*\n * Statically bundle the supported moment locales for parity with webpack's\n * MomentLocalesPlugin. We need this because moment loads locales via a dynamic\n * require that, with Rolldown, never loads.\n *\n * Resolve everything through moment/dist (the ESM build) else Rolldown creates\n * a separate UMD instance from what the app uses.\n */\nexport function momentLocalesPlugin(_context: BuildContext): Plugin {\n return {\n name: 'moment-locales',\n enforce: 'pre',\n resolveId(source, importer, options) {\n if (source === 'moment') {\n return VIRTUAL_MOMENT;\n }\n // Redirect explicit UMD locale imports to the ESM build so they share that instance.\n const locale = UMD_LOCALE.exec(source)?.[1];\n if (locale) {\n return this.resolve(`moment/dist/locale/${locale}`, importer, options);\n }\n },\n load(id) {\n if (id === VIRTUAL_MOMENT) {\n return [\n ...MOMENT_LOCALES.map(locale => `import 'moment/dist/locale/${locale}';`),\n `import moment from 'moment/dist/moment.js';`,\n `export * from 'moment/dist/moment.js';`,\n `export default moment;`,\n ].join('\\n');\n }\n },\n };\n}\n"],"names":["VIRTUAL_MOMENT","momentLocalesPlugin","UMD_LOCALE","_context","name","enforce","resolveId","source","importer","options","locale","exec","resolve","load","id","MOMENT_LOCALES","map","join"],"mappings":";;;;;;;;;;;QAGaA;eAAAA;;QAYGC;eAAAA;;;sBAd6B;AAEtC,MAAMD,iBAAiB;AAE9B,MAAME,aAAa;AAUZ,SAASD,oBAAoBE,QAAsB;IACtD,OAAO;QACHC,MAAM;QACNC,SAAS;QACTC,WAAUC,MAAM,EAAEC,QAAQ,EAAEC,OAAO;gBAKhBP;YAJf,IAAIK,WAAW,UAAU;gBACrB,OAAOP;YACX;YACA,qFAAqF;YACrF,MAAMU,UAASR,mBAAAA,WAAWS,IAAI,CAACJ,qBAAhBL,uCAAAA,gBAAyB,CAAC,EAAE;YAC3C,IAAIQ,QAAQ;gBACR,OAAO,IAAI,CAACE,OAAO,CAAC,CAAC,mBAAmB,EAAEF,QAAQ,EAAEF,UAAUC;YAClE;QACJ;QACAI,MAAKC,EAAE;YACH,IAAIA,OAAOd,gBAAgB;gBACvB,OAAO;uBACAe,oBAAc,CAACC,GAAG,CAACN,CAAAA,SAAU,CAAC,2BAA2B,EAAEA,OAAO,EAAE,CAAC;oBACxE,CAAC,2CAA2C,CAAC;oBAC7C,CAAC,sCAAsC,CAAC;oBACxC,CAAC,sBAAsB,CAAC;iBAC3B,CAACO,IAAI,CAAC;YACX;QACJ;IACJ;AACJ"}
@@ -0,0 +1,14 @@
1
+ export interface ModuleFactory {
2
+ /** Module id used as the factory's key and require() argument (e.g. `react`, `./_chunk.js`). */
3
+ id: string;
4
+ /** The chunk's generated code, run inside `function(module, exports, require) { ... }`. */
5
+ code: string;
6
+ }
7
+ export interface Expose {
8
+ /** Global path the dependency is published under (e.g. `SharedDependencies.React`). */
9
+ variable: string;
10
+ /** Module id resolved through the scoped require when the global is accessed. */
11
+ dependency: string;
12
+ }
13
+ export declare function assembleIife(modules: ModuleFactory[], exposes: Expose[]): string;
14
+ //# sourceMappingURL=assemble-iife.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assemble-iife.d.ts","sourceRoot":"","sources":["../../../../src/vite/plugins/shared-dependencies-plugin/assemble-iife.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC1B,gGAAgG;IAChG,EAAE,EAAE,MAAM,CAAC;IACX,2FAA2F;IAC3F,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,MAAM;IACnB,uFAAuF;IACvF,QAAQ,EAAE,MAAM,CAAC;IACjB,iFAAiF;IACjF,UAAU,EAAE,MAAM,CAAC;CACtB;AAWD,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CA0FhF"}
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "assembleIife", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return assembleIife;
9
+ }
10
+ });
11
+ function indent(spaces) {
12
+ return ' '.repeat(spaces);
13
+ }
14
+ function assembleIife(modules, exposes) {
15
+ const factories = modules.map(({ id, code })=>`'${id}': function(module, exports, require) {\n${indent(12)}${code}\n${indent(8)}}`);
16
+ const exposeCalls = exposes.map(({ variable, dependency })=>`expose('${variable}', '${dependency}');`);
17
+ return `\
18
+ (function () {
19
+ const STORAGE_KEY = Symbol.for('SERVICETITAN_EXPOSE_LOADER_STORAGE');
20
+ const g = globalThis;
21
+
22
+ if (g[STORAGE_KEY] === undefined) {
23
+ g[STORAGE_KEY] = Object.assign(Object.create(null), {
24
+ clear(scope) {
25
+ delete this[scope];
26
+ },
27
+ });
28
+ }
29
+
30
+ var storage = g[STORAGE_KEY];
31
+
32
+ var modules = {
33
+ ${factories.join(`,\n${indent(8)}`)}
34
+ };
35
+
36
+ function createScopedRequire(scope) {
37
+ const cache = (storage[scope] = storage[scope] || Object.create(null));
38
+
39
+ function require(id) {
40
+ if (cache[id]) {
41
+ return cache[id].exports;
42
+ }
43
+ if (!modules[id]) {
44
+ throw new Error('Module not found: ' + id);
45
+ }
46
+
47
+ const module = (cache[id] = { id, loaded: false, exports: {} });
48
+ modules[id](module, module.exports, require);
49
+ module.loaded = true;
50
+
51
+ const keys = Object.keys(module.exports);
52
+ if (module.exports.__esModule && keys.length === 1 && keys[0] === 'default') {
53
+ module.exports = module.exports.default;
54
+ }
55
+
56
+ return module.exports;
57
+ }
58
+
59
+ Object.setPrototypeOf(require, {
60
+ resolve(id) {
61
+ return id;
62
+ },
63
+ });
64
+ return require;
65
+ }
66
+
67
+ function expose(path, moduleId) {
68
+ const parts = path.split('.');
69
+ let obj = g;
70
+
71
+ for (let i = 0; i < parts.length - 1; i++) {
72
+ if (obj[parts[i]] === undefined) {
73
+ obj[parts[i]] = Object.create(null);
74
+ }
75
+ obj = obj[parts[i]];
76
+ }
77
+
78
+ obj[parts[parts.length - 1]] = new Proxy(
79
+ Object.assign(Object.create(null), {
80
+ getStorage() {
81
+ return storage;
82
+ },
83
+ }),
84
+ {
85
+ get(target, scope, receiver) {
86
+ if (scope === 'getStorage') {
87
+ return Reflect.get(target, scope, receiver);
88
+ }
89
+ return createScopedRequire(scope)(moduleId);
90
+ },
91
+ }
92
+ );
93
+ }
94
+
95
+ ${exposeCalls.join(`\n${indent(4)}`)}
96
+ })();
97
+ `;
98
+ }
99
+
100
+ //# sourceMappingURL=assemble-iife.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/vite/plugins/shared-dependencies-plugin/assemble-iife.ts"],"sourcesContent":["export interface ModuleFactory {\n /** Module id used as the factory's key and require() argument (e.g. `react`, `./_chunk.js`). */\n id: string;\n /** The chunk's generated code, run inside `function(module, exports, require) { ... }`. */\n code: string;\n}\n\nexport interface Expose {\n /** Global path the dependency is published under (e.g. `SharedDependencies.React`). */\n variable: string;\n /** Module id resolved through the scoped require when the global is accessed. */\n dependency: string;\n}\n\nfunction indent(spaces: number) {\n return ' '.repeat(spaces);\n}\n\n/*\n * Wraps the bundle's module factories and expose calls in the runtime IIFE.\n * The IIFE installs a per-scope require system on globalThis so each MFE gets\n * isolated module instances of the shared dependencies.\n */\nexport function assembleIife(modules: ModuleFactory[], exposes: Expose[]): string {\n const factories = modules.map(\n ({ id, code }) =>\n `'${id}': function(module, exports, require) {\\n${indent(12)}${code}\\n${indent(8)}}`\n );\n const exposeCalls = exposes.map(\n ({ variable, dependency }) => `expose('${variable}', '${dependency}');`\n );\n\n return `\\\n(function () {\n const STORAGE_KEY = Symbol.for('SERVICETITAN_EXPOSE_LOADER_STORAGE');\n const g = globalThis;\n\n if (g[STORAGE_KEY] === undefined) {\n g[STORAGE_KEY] = Object.assign(Object.create(null), {\n clear(scope) {\n delete this[scope];\n },\n });\n }\n\n var storage = g[STORAGE_KEY];\n\n var modules = {\n ${factories.join(`,\\n${indent(8)}`)}\n };\n\n function createScopedRequire(scope) {\n const cache = (storage[scope] = storage[scope] || Object.create(null));\n\n function require(id) {\n if (cache[id]) {\n return cache[id].exports;\n }\n if (!modules[id]) {\n throw new Error('Module not found: ' + id);\n }\n\n const module = (cache[id] = { id, loaded: false, exports: {} });\n modules[id](module, module.exports, require);\n module.loaded = true;\n\n const keys = Object.keys(module.exports);\n if (module.exports.__esModule && keys.length === 1 && keys[0] === 'default') {\n module.exports = module.exports.default;\n }\n\n return module.exports;\n }\n\n Object.setPrototypeOf(require, {\n resolve(id) {\n return id;\n },\n });\n return require;\n }\n\n function expose(path, moduleId) {\n const parts = path.split('.');\n let obj = g;\n\n for (let i = 0; i < parts.length - 1; i++) {\n if (obj[parts[i]] === undefined) {\n obj[parts[i]] = Object.create(null);\n }\n obj = obj[parts[i]];\n }\n\n obj[parts[parts.length - 1]] = new Proxy(\n Object.assign(Object.create(null), {\n getStorage() {\n return storage;\n },\n }),\n {\n get(target, scope, receiver) {\n if (scope === 'getStorage') {\n return Reflect.get(target, scope, receiver);\n }\n return createScopedRequire(scope)(moduleId);\n },\n }\n );\n }\n\n ${exposeCalls.join(`\\n${indent(4)}`)}\n})();\n`;\n}\n"],"names":["assembleIife","indent","spaces","repeat","modules","exposes","factories","map","id","code","exposeCalls","variable","dependency","join"],"mappings":";;;;+BAuBgBA;;;eAAAA;;;AAThB,SAASC,OAAOC,MAAc;IAC1B,OAAO,IAAIC,MAAM,CAACD;AACtB;AAOO,SAASF,aAAaI,OAAwB,EAAEC,OAAiB;IACpE,MAAMC,YAAYF,QAAQG,GAAG,CACzB,CAAC,EAAEC,EAAE,EAAEC,IAAI,EAAE,GACT,CAAC,CAAC,EAAED,GAAG,yCAAyC,EAAEP,OAAO,MAAMQ,KAAK,EAAE,EAAER,OAAO,GAAG,CAAC,CAAC;IAE5F,MAAMS,cAAcL,QAAQE,GAAG,CAC3B,CAAC,EAAEI,QAAQ,EAAEC,UAAU,EAAE,GAAK,CAAC,QAAQ,EAAED,SAAS,IAAI,EAAEC,WAAW,GAAG,CAAC;IAG3E,OAAO,CAAC;;;;;;;;;;;;;;;;QAgBJ,EAAEN,UAAUO,IAAI,CAAC,CAAC,GAAG,EAAEZ,OAAO,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA8DxC,EAAES,YAAYG,IAAI,CAAC,CAAC,EAAE,EAAEZ,OAAO,IAAI,EAAE;;AAEzC,CAAC;AACD"}
@@ -0,0 +1,3 @@
1
+ import type { OutputBundle } from 'rolldown';
2
+ export declare function assertNoDynamicCss(bundle: OutputBundle): void;
3
+ //# sourceMappingURL=assert-no-dynamic-css.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assert-no-dynamic-css.d.ts","sourceRoot":"","sources":["../../../../src/vite/plugins/shared-dependencies-plugin/assert-no-dynamic-css.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAe,MAAM,UAAU,CAAC;AAQ1D,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAiB7D"}
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "assertNoDynamicCss", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return assertNoDynamicCss;
9
+ }
10
+ });
11
+ function assertNoDynamicCss(bundle) {
12
+ for (const entry of Object.values(bundle)){
13
+ if (!(entry.type === 'chunk' && entry.isEntry)) {
14
+ continue;
15
+ }
16
+ const includedCss = importedCss(entry);
17
+ const excludedCss = [
18
+ ...allCss(entry, bundle)
19
+ ].filter((css)=>!includedCss.has(css));
20
+ if (excludedCss.length > 0) {
21
+ throw new Error(`Shared dependency chunk "${entry.name}" pulls in CSS through a dynamic import ` + `(${excludedCss.join(', ')}). Shared dependencies only include statically imported ` + `CSS. Dynamically imported CSS will not load on the host.`);
22
+ }
23
+ }
24
+ }
25
+ /*
26
+ * Return every CSS file imported by the entry and recursively by anything it imports.
27
+ */ function allCss(entry, bundle) {
28
+ const result = new Set();
29
+ const visited = new Set();
30
+ const stack = [
31
+ entry
32
+ ];
33
+ while(stack.length > 0){
34
+ const chunk = stack.pop();
35
+ importedCss(chunk).forEach((file)=>result.add(file));
36
+ for (const fileName of [
37
+ ...chunk.imports,
38
+ ...chunk.dynamicImports
39
+ ]){
40
+ const imported = bundle[fileName];
41
+ if ((imported === null || imported === void 0 ? void 0 : imported.type) === 'chunk' && !visited.has(fileName)) {
42
+ visited.add(fileName);
43
+ stack.push(imported);
44
+ }
45
+ }
46
+ }
47
+ return result;
48
+ }
49
+ function importedCss(chunk) {
50
+ var _ref;
51
+ var _chunk_viteMetadata;
52
+ return (_ref = (_chunk_viteMetadata = // Vite adds `viteMetadata` to Rolldown chunks; cast because its type augmentation is not in scope here.
53
+ chunk.viteMetadata) === null || _chunk_viteMetadata === void 0 ? void 0 : _chunk_viteMetadata.importedCss) !== null && _ref !== void 0 ? _ref : new Set();
54
+ }
55
+
56
+ //# sourceMappingURL=assert-no-dynamic-css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/vite/plugins/shared-dependencies-plugin/assert-no-dynamic-css.ts"],"sourcesContent":["import type { OutputBundle, OutputChunk } from 'rolldown';\n\n/*\n * Output bundles only include statically imported CSS. CSS pulled in by a dynamic\n * import() lands in a separate async chunk that is omitted from entrypoints.json\n * and silently fails to load. Fail the build when the bundle references CSS that\n * does not land in entrypoints.json.\n */\nexport function assertNoDynamicCss(bundle: OutputBundle): void {\n for (const entry of Object.values(bundle)) {\n if (!(entry.type === 'chunk' && entry.isEntry)) {\n continue;\n }\n\n const includedCss = importedCss(entry);\n const excludedCss = [...allCss(entry, bundle)].filter(css => !includedCss.has(css));\n\n if (excludedCss.length > 0) {\n throw new Error(\n `Shared dependency chunk \"${entry.name}\" pulls in CSS through a dynamic import ` +\n `(${excludedCss.join(', ')}). Shared dependencies only include statically imported ` +\n `CSS. Dynamically imported CSS will not load on the host.`\n );\n }\n }\n}\n\n/*\n * Return every CSS file imported by the entry and recursively by anything it imports.\n */\nfunction allCss(entry: OutputChunk, bundle: OutputBundle): Set<string> {\n const result = new Set<string>();\n const visited = new Set<string>();\n const stack = [entry];\n\n while (stack.length > 0) {\n const chunk = stack.pop()!;\n importedCss(chunk).forEach(file => result.add(file));\n\n for (const fileName of [...chunk.imports, ...chunk.dynamicImports]) {\n const imported = bundle[fileName];\n if (imported?.type === 'chunk' && !visited.has(fileName)) {\n visited.add(fileName);\n stack.push(imported);\n }\n }\n }\n\n return result;\n}\n\nfunction importedCss(chunk: OutputChunk): ReadonlySet<string> {\n return (\n // Vite adds `viteMetadata` to Rolldown chunks; cast because its type augmentation is not in scope here.\n (chunk as { viteMetadata?: { importedCss?: Set<string> } }).viteMetadata?.importedCss ??\n new Set<string>()\n );\n}\n"],"names":["assertNoDynamicCss","bundle","entry","Object","values","type","isEntry","includedCss","importedCss","excludedCss","allCss","filter","css","has","length","Error","name","join","result","Set","visited","stack","chunk","pop","forEach","file","add","fileName","imports","dynamicImports","imported","push","viteMetadata"],"mappings":";;;;+BAQgBA;;;eAAAA;;;AAAT,SAASA,mBAAmBC,MAAoB;IACnD,KAAK,MAAMC,SAASC,OAAOC,MAAM,CAACH,QAAS;QACvC,IAAI,CAAEC,CAAAA,MAAMG,IAAI,KAAK,WAAWH,MAAMI,OAAO,AAAD,GAAI;YAC5C;QACJ;QAEA,MAAMC,cAAcC,YAAYN;QAChC,MAAMO,cAAc;eAAIC,OAAOR,OAAOD;SAAQ,CAACU,MAAM,CAACC,CAAAA,MAAO,CAACL,YAAYM,GAAG,CAACD;QAE9E,IAAIH,YAAYK,MAAM,GAAG,GAAG;YACxB,MAAM,IAAIC,MACN,CAAC,yBAAyB,EAAEb,MAAMc,IAAI,CAAC,wCAAwC,CAAC,GAC5E,CAAC,CAAC,EAAEP,YAAYQ,IAAI,CAAC,MAAM,wDAAwD,CAAC,GACpF,CAAC,wDAAwD,CAAC;QAEtE;IACJ;AACJ;AAEA;;CAEC,GACD,SAASP,OAAOR,KAAkB,EAAED,MAAoB;IACpD,MAAMiB,SAAS,IAAIC;IACnB,MAAMC,UAAU,IAAID;IACpB,MAAME,QAAQ;QAACnB;KAAM;IAErB,MAAOmB,MAAMP,MAAM,GAAG,EAAG;QACrB,MAAMQ,QAAQD,MAAME,GAAG;QACvBf,YAAYc,OAAOE,OAAO,CAACC,CAAAA,OAAQP,OAAOQ,GAAG,CAACD;QAE9C,KAAK,MAAME,YAAY;eAAIL,MAAMM,OAAO;eAAKN,MAAMO,cAAc;SAAC,CAAE;YAChE,MAAMC,WAAW7B,MAAM,CAAC0B,SAAS;YACjC,IAAIG,CAAAA,qBAAAA,+BAAAA,SAAUzB,IAAI,MAAK,WAAW,CAACe,QAAQP,GAAG,CAACc,WAAW;gBACtDP,QAAQM,GAAG,CAACC;gBACZN,MAAMU,IAAI,CAACD;YACf;QACJ;IACJ;IAEA,OAAOZ;AACX;AAEA,SAASV,YAAYc,KAAkB;;QAG/B;IAFJ,gBAEI,sBAAA,AADA,wGAAwG;IACvGA,MAA2DU,YAAY,cAAxE,0CAAA,oBAA0ExB,WAAW,uCACrF,IAAIW;AAEZ"}
@@ -0,0 +1,2 @@
1
+ export declare function flatten(dep: string): string;
2
+ //# sourceMappingURL=flatten.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flatten.d.ts","sourceRoot":"","sources":["../../../../src/vite/plugins/shared-dependencies-plugin/flatten.ts"],"names":[],"mappings":"AAKA,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE3C"}
@@ -0,0 +1,19 @@
1
+ /*
2
+ * Replaces `/` with `-` so scoped packages stay flat in Rolldown output.
3
+ * Without this, `@scope/foo` emits into a subdirectory and its require()
4
+ * calls use `../` paths that don't match the IIFE's flat module keys.
5
+ */ "use strict";
6
+ Object.defineProperty(exports, "__esModule", {
7
+ value: true
8
+ });
9
+ Object.defineProperty(exports, "flatten", {
10
+ enumerable: true,
11
+ get: function() {
12
+ return flatten;
13
+ }
14
+ });
15
+ function flatten(dep) {
16
+ return dep.replace(/\//g, '-');
17
+ }
18
+
19
+ //# sourceMappingURL=flatten.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/vite/plugins/shared-dependencies-plugin/flatten.ts"],"sourcesContent":["/*\n * Replaces `/` with `-` so scoped packages stay flat in Rolldown output.\n * Without this, `@scope/foo` emits into a subdirectory and its require()\n * calls use `../` paths that don't match the IIFE's flat module keys.\n */\nexport function flatten(dep: string): string {\n return dep.replace(/\\//g, '-');\n}\n"],"names":["flatten","dep","replace"],"mappings":"AAAA;;;;CAIC;;;;+BACeA;;;eAAAA;;;AAAT,SAASA,QAAQC,GAAW;IAC/B,OAAOA,IAAIC,OAAO,CAAC,OAAO;AAC9B"}
@@ -0,0 +1,2 @@
1
+ export * from './shared-dependencies-plugin';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/vite/plugins/shared-dependencies-plugin/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAC"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ _export_star(require("./shared-dependencies-plugin"), exports);
6
+ function _export_star(from, to) {
7
+ Object.keys(from).forEach(function(k) {
8
+ if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
9
+ Object.defineProperty(to, k, {
10
+ enumerable: true,
11
+ get: function() {
12
+ return from[k];
13
+ }
14
+ });
15
+ }
16
+ });
17
+ return from;
18
+ }
19
+
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/vite/plugins/shared-dependencies-plugin/index.ts"],"sourcesContent":["export * from './shared-dependencies-plugin';\n"],"names":[],"mappings":";;;;qBAAc"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-dependencies-plugin.d.ts","sourceRoot":"","sources":["../../../../src/vite/plugins/shared-dependencies-plugin/shared-dependencies-plugin.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAM9B,MAAM,WAAW,+BAA+B;IAC5C,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAKD,wBAAgB,wBAAwB,CAAC,EACrC,YAAY,EACZ,GAAG,EACH,WAAW,GACd,EAAE,+BAA+B,GAAG,MAAM,CAgK1C"}
@@ -10,22 +10,17 @@ Object.defineProperty(exports, "sharedDependenciesPlugin", {
10
10
  });
11
11
  const _crypto = /*#__PURE__*/ _interop_require_default(require("crypto"));
12
12
  const _path = /*#__PURE__*/ _interop_require_default(require("path"));
13
- const _core = require("../../core");
13
+ const _core = require("../../../core");
14
+ const _assembleiife = require("./assemble-iife");
15
+ const _assertnodynamiccss = require("./assert-no-dynamic-css");
16
+ const _flatten = require("./flatten");
14
17
  function _interop_require_default(obj) {
15
18
  return obj && obj.__esModule ? obj : {
16
19
  default: obj
17
20
  };
18
21
  }
19
- /*
20
- * Replaces `/` with `-` so scoped packages stay flat in Rolldown output.
21
- * Without this, `@scope/foo` emits into a subdirectory and its require()
22
- * calls use `../` paths that don't match the IIFE's flat module keys.
23
- */ function flatName(dep) {
24
- return dep.replace('/', '-');
25
- }
26
- function indent(spaces) {
27
- return ' '.repeat(spaces);
28
- }
22
+ // Suffix for the CJS entry files emitted by `entryFileNames` below.
23
+ const ENTRY_FILE_SUFFIX = '.cjs.js';
29
24
  function sharedDependenciesPlugin({ dependencies, css, metadataDir }) {
30
25
  const CSS_VIRTUAL_PREFIX = '\0SHARED_DEPENDENCY_CSS';
31
26
  const dependencyNames = Object.keys(dependencies);
@@ -40,7 +35,7 @@ function sharedDependenciesPlugin({ dependencies, css, metadataDir }) {
40
35
  isProduction = env.mode === _core.bundleConstants.mode.production;
41
36
  const input = {};
42
37
  for (const dependency of dependencyNames){
43
- input[flatName(dependency)] = dependency;
38
+ input[(0, _flatten.flatten)(dependency)] = dependency;
44
39
  }
45
40
  for (const name of cssInputNames){
46
41
  input[name] = CSS_VIRTUAL_PREFIX + name;
@@ -48,7 +43,7 @@ function sharedDependenciesPlugin({ dependencies, css, metadataDir }) {
48
43
  return {
49
44
  // Relative base so CSS font URLs resolve from the CSS file's directory, not site root
50
45
  base: './',
51
- // Must match host build mode mismatch causes react-dom/client usingClientEntryPoint errors
46
+ // Must match host build mode; mismatch causes react-dom/client usingClientEntryPoint errors
52
47
  define: {
53
48
  'process.env.NODE_ENV': JSON.stringify(env.mode)
54
49
  },
@@ -63,14 +58,14 @@ function sharedDependenciesPlugin({ dependencies, css, metadataDir }) {
63
58
  * code in function(module, exports, require) { ... }
64
59
  */ format: 'cjs',
65
60
  exports: 'named',
66
- entryFileNames: '[name].cjs.js',
61
+ entryFileNames: `[name]${ENTRY_FILE_SUFFIX}`,
67
62
  chunkFileNames: '_[name]-[hash].js',
68
63
  assetFileNames: (assetInfo)=>{
69
64
  var _ref, _rawName_split_pop;
70
65
  var _assetInfo_names;
71
66
  const rawName = (_ref = (_assetInfo_names = assetInfo.names) === null || _assetInfo_names === void 0 ? void 0 : _assetInfo_names[0]) !== null && _ref !== void 0 ? _ref : '';
72
67
  const ext = (_rawName_split_pop = rawName.split('.').pop()) !== null && _rawName_split_pop !== void 0 ? _rawName_split_pop : '';
73
- // Strip scope prefix added by flatName (e.g. @servicetitan-anvil2 anvil2)
68
+ // Strip scope prefix added by flatten (e.g. @servicetitan-anvil2 to anvil2)
74
69
  const name = rawName.replace(/^@[^-]+-/, '').replace(/\.[^.]+$/, '');
75
70
  if (ext === 'css') {
76
71
  return isProduction ? `${name}.[hash].bundle[extname]` : `${name}.bundle[extname]`;
@@ -110,32 +105,42 @@ function sharedDependenciesPlugin({ dependencies, css, metadataDir }) {
110
105
  return imports.map((p)=>`import '${p}';`).join('\n');
111
106
  },
112
107
  generateBundle (_options, bundle) {
113
- const factories = [];
108
+ (0, _assertnodynamiccss.assertNoDynamicCss)(bundle);
109
+ const modules = [];
114
110
  const exposes = [];
115
111
  for (const [fileName, chunk] of Object.entries(bundle)){
116
112
  if (chunk.type !== 'chunk') {
117
113
  continue;
118
114
  }
119
115
  if (!chunk.isEntry) {
120
- factories.push(`'./${fileName}': function(module, exports, require) {\n${indent(12)}${chunk.code}\n${indent(8)}}`);
116
+ modules.push({
117
+ id: `./${fileName}`,
118
+ code: chunk.code
119
+ });
121
120
  delete bundle[fileName];
122
121
  }
123
122
  }
124
123
  for (const [dependency, variable] of Object.entries(dependencies)){
125
- const entryFileName = `${flatName(dependency)}.cjs.js`;
124
+ const entryFileName = `${(0, _flatten.flatten)(dependency)}${ENTRY_FILE_SUFFIX}`;
126
125
  const chunk = bundle[entryFileName];
127
126
  if ((chunk === null || chunk === void 0 ? void 0 : chunk.type) !== 'chunk') {
128
127
  var _ref;
129
128
  throw new Error(`Expected entry chunk for ${dependency}, got type: ${(_ref = chunk === null || chunk === void 0 ? void 0 : chunk.type) !== null && _ref !== void 0 ? _ref : 'undefined'}`);
130
129
  }
131
- factories.push(`'${dependency}': function(module, exports, require) {\n${indent(12)}${chunk.code}\n${indent(8)}}`);
132
- exposes.push(`expose('${variable}', '${dependency}');`);
130
+ modules.push({
131
+ id: dependency,
132
+ code: chunk.code
133
+ });
134
+ exposes.push({
135
+ variable,
136
+ dependency
137
+ });
133
138
  delete bundle[entryFileName];
134
139
  }
135
140
  for (const name of cssInputNames){
136
- delete bundle[`${name}.cjs.js`];
141
+ delete bundle[`${name}${ENTRY_FILE_SUFFIX}`];
137
142
  }
138
- const code = assembleIIFE(factories, exposes);
143
+ const code = (0, _assembleiife.assembleIife)(modules, exposes);
139
144
  const hash = _crypto.default.createHash('md5').update(code).digest('hex').slice(0, 20);
140
145
  const sharedFileName = isProduction ? `shared.${hash}.bundle.js` : 'shared.bundle.js';
141
146
  this.emitFile({
@@ -143,7 +148,7 @@ function sharedDependenciesPlugin({ dependencies, css, metadataDir }) {
143
148
  fileName: sharedFileName,
144
149
  source: code
145
150
  });
146
- const cssFiles = Object.keys(bundle).filter((f)=>f.endsWith('.bundle.css'));
151
+ const cssFiles = (0, _core.sortSharedCss)(Object.keys(bundle).filter((f)=>f.endsWith('.bundle.css')));
147
152
  const entrypoints = {
148
153
  css: cssFiles,
149
154
  js: [
@@ -160,93 +165,10 @@ function sharedDependenciesPlugin({ dependencies, css, metadataDir }) {
160
165
  /*
161
166
  * dir is always set when build.outDir is configured (our case).
162
167
  * Rolldown types it as optional, but falling back to '' would
163
- * silently resolve to cwd better to crash than write wrong metadata.
168
+ * silently resolve to cwd; better to crash than write wrong metadata.
164
169
  */ (0, _core.generateExposedDependenciesMetadata)(metadataDir, ()=>_path.default.resolve(options.dir, 'entrypoints.json'));
165
170
  } : undefined
166
171
  };
167
172
  }
168
- function assembleIIFE(factories, exposes) {
169
- return `\
170
- (function () {
171
- const STORAGE_KEY = Symbol.for('SERVICETITAN_EXPOSE_LOADER_STORAGE');
172
- const g = globalThis;
173
-
174
- if (g[STORAGE_KEY] === undefined) {
175
- g[STORAGE_KEY] = Object.assign(Object.create(null), {
176
- clear(scope) {
177
- delete this[scope];
178
- },
179
- });
180
- }
181
-
182
- var storage = g[STORAGE_KEY];
183
-
184
- var modules = {
185
- ${factories.join(`,\n${indent(8)}`)}
186
- };
187
-
188
- function createScopedRequire(scope) {
189
- const cache = (storage[scope] = storage[scope] || Object.create(null));
190
-
191
- function require(id) {
192
- if (cache[id]) {
193
- return cache[id].exports;
194
- }
195
- if (!modules[id]) {
196
- throw new Error('Module not found: ' + id);
197
- }
198
-
199
- const module = (cache[id] = { id, loaded: false, exports: {} });
200
- modules[id](module, module.exports, require);
201
- module.loaded = true;
202
-
203
- const keys = Object.keys(module.exports);
204
- if (module.exports.__esModule && keys.length === 1 && keys[0] === 'default') {
205
- module.exports = module.exports.default;
206
- }
207
-
208
- return module.exports;
209
- }
210
-
211
- Object.setPrototypeOf(require, {
212
- resolve(id) {
213
- return id;
214
- },
215
- });
216
- return require;
217
- }
218
-
219
- function expose(path, moduleId) {
220
- const parts = path.split('.');
221
- let obj = g;
222
-
223
- for (let i = 0; i < parts.length - 1; i++) {
224
- if (obj[parts[i]] === undefined) {
225
- obj[parts[i]] = Object.create(null);
226
- }
227
- obj = obj[parts[i]];
228
- }
229
-
230
- obj[parts[parts.length - 1]] = new Proxy(
231
- Object.assign(Object.create(null), {
232
- getStorage() {
233
- return storage;
234
- },
235
- }),
236
- {
237
- get(target, scope, receiver) {
238
- if (scope === 'getStorage') {
239
- return Reflect.get(target, scope, receiver);
240
- }
241
- return createScopedRequire(scope)(moduleId);
242
- },
243
- }
244
- );
245
- }
246
-
247
- ${exposes.join(`\n${indent(4)}`)}
248
- })();
249
- `;
250
- }
251
173
 
252
174
  //# sourceMappingURL=shared-dependencies-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/vite/plugins/shared-dependencies-plugin/shared-dependencies-plugin.ts"],"sourcesContent":["import crypto from 'crypto';\nimport path from 'path';\nimport { Plugin } from 'vite';\nimport { bundleConstants, generateExposedDependenciesMetadata, sortSharedCss } from '../../../core';\nimport { assembleIife, Expose, ModuleFactory } from './assemble-iife';\nimport { assertNoDynamicCss } from './assert-no-dynamic-css';\nimport { flatten } from './flatten';\n\nexport interface SharedDependenciesPluginOptions {\n dependencies: Record<string, string>;\n css?: Record<string, string[]>;\n metadataDir?: string;\n}\n\n// Suffix for the CJS entry files emitted by `entryFileNames` below.\nconst ENTRY_FILE_SUFFIX = '.cjs.js';\n\nexport function sharedDependenciesPlugin({\n dependencies,\n css,\n metadataDir,\n}: SharedDependenciesPluginOptions): Plugin {\n const CSS_VIRTUAL_PREFIX = '\\0SHARED_DEPENDENCY_CSS';\n\n const dependencyNames = Object.keys(dependencies);\n const dependencySet = new Set(dependencyNames);\n const cssEntries = css ?? {};\n const cssInputNames = Object.keys(cssEntries);\n let isProduction = false;\n\n return {\n name: 'shared-dependencies',\n enforce: 'pre',\n\n config(_, env) {\n isProduction = env.mode === bundleConstants.mode.production;\n\n const input: Record<string, string> = {};\n for (const dependency of dependencyNames) {\n input[flatten(dependency)] = dependency;\n }\n for (const name of cssInputNames) {\n input[name] = CSS_VIRTUAL_PREFIX + name;\n }\n\n return {\n // Relative base so CSS font URLs resolve from the CSS file's directory, not site root\n base: './',\n // Must match host build mode; mismatch causes react-dom/client usingClientEntryPoint errors\n define: {\n 'process.env.NODE_ENV': JSON.stringify(env.mode),\n },\n build: {\n rolldownOptions: {\n // Vite defaults to false which strips all CJS exports from entry chunks\n preserveEntrySignatures: 'exports-only',\n input,\n output: {\n /*\n * CJS format + named exports: the factory system wraps each entry's\n * code in function(module, exports, require) { ... }\n */\n format: 'cjs',\n exports: 'named',\n entryFileNames: `[name]${ENTRY_FILE_SUFFIX}`,\n chunkFileNames: '_[name]-[hash].js',\n assetFileNames: assetInfo => {\n const rawName = assetInfo.names?.[0] ?? '';\n const ext = rawName.split('.').pop() ?? '';\n // Strip scope prefix added by flatten (e.g. @servicetitan-anvil2 to anvil2)\n const name = rawName\n .replace(/^@[^-]+-/, '')\n .replace(/\\.[^.]+$/, '');\n if (ext === 'css') {\n return isProduction\n ? `${name}.[hash].bundle[extname]`\n : `${name}.bundle[extname]`;\n }\n return isProduction\n ? `${name}.[hash][extname]`\n : `${name}[extname]`;\n },\n },\n // Disabled: we don't know which exports MFEs will use at runtime\n treeshake: false,\n },\n },\n };\n },\n\n resolveId(source: string, importer: string | undefined) {\n if (source.startsWith(CSS_VIRTUAL_PREFIX)) {\n return source;\n }\n if (!importer) {\n return;\n }\n if (dependencySet.has(source)) {\n return { id: source, external: true };\n }\n },\n\n load(id: string) {\n if (!id.startsWith(CSS_VIRTUAL_PREFIX)) {\n return;\n }\n const name = id.slice(CSS_VIRTUAL_PREFIX.length);\n const imports = cssEntries[name];\n if (!imports) {\n return;\n }\n return imports.map(p => `import '${p}';`).join('\\n');\n },\n\n generateBundle(_options, bundle) {\n assertNoDynamicCss(bundle);\n\n const modules: ModuleFactory[] = [];\n const exposes: Expose[] = [];\n\n for (const [fileName, chunk] of Object.entries(bundle)) {\n if (chunk.type !== 'chunk') {\n continue;\n }\n if (!chunk.isEntry) {\n modules.push({ id: `./${fileName}`, code: chunk.code });\n delete bundle[fileName];\n }\n }\n\n for (const [dependency, variable] of Object.entries(dependencies)) {\n const entryFileName = `${flatten(dependency)}${ENTRY_FILE_SUFFIX}`;\n const chunk = bundle[entryFileName];\n if (chunk?.type !== 'chunk') {\n throw new Error(\n `Expected entry chunk for ${dependency}, got type: ${chunk?.type ?? 'undefined'}`\n );\n }\n modules.push({ id: dependency, code: chunk.code });\n exposes.push({ variable, dependency });\n delete bundle[entryFileName];\n }\n\n for (const name of cssInputNames) {\n delete bundle[`${name}${ENTRY_FILE_SUFFIX}`];\n }\n\n const code = assembleIife(modules, exposes);\n const hash = crypto.createHash('md5').update(code).digest('hex').slice(0, 20);\n const sharedFileName = isProduction ? `shared.${hash}.bundle.js` : 'shared.bundle.js';\n\n this.emitFile({\n type: 'asset',\n fileName: sharedFileName,\n source: code,\n });\n\n const cssFiles = sortSharedCss(\n Object.keys(bundle).filter(f => f.endsWith('.bundle.css'))\n );\n const entrypoints = { css: cssFiles, js: [sharedFileName] };\n this.emitFile({\n type: 'asset',\n fileName: 'entrypoints.json',\n source: JSON.stringify(entrypoints, null, 2),\n });\n },\n\n writeBundle: metadataDir\n ? options => {\n /*\n * dir is always set when build.outDir is configured (our case).\n * Rolldown types it as optional, but falling back to '' would\n * silently resolve to cwd; better to crash than write wrong metadata.\n */\n generateExposedDependenciesMetadata(metadataDir, () =>\n path.resolve(options.dir!, 'entrypoints.json')\n );\n }\n : undefined,\n };\n}\n"],"names":["sharedDependenciesPlugin","ENTRY_FILE_SUFFIX","dependencies","css","metadataDir","CSS_VIRTUAL_PREFIX","dependencyNames","Object","keys","dependencySet","Set","cssEntries","cssInputNames","isProduction","name","enforce","config","_","env","mode","bundleConstants","production","input","dependency","flatten","base","define","JSON","stringify","build","rolldownOptions","preserveEntrySignatures","output","format","exports","entryFileNames","chunkFileNames","assetFileNames","assetInfo","rawName","names","ext","split","pop","replace","treeshake","resolveId","source","importer","startsWith","has","id","external","load","slice","length","imports","map","p","join","generateBundle","_options","bundle","assertNoDynamicCss","modules","exposes","fileName","chunk","entries","type","isEntry","push","code","variable","entryFileName","Error","assembleIife","hash","crypto","createHash","update","digest","sharedFileName","emitFile","cssFiles","sortSharedCss","filter","f","endsWith","entrypoints","js","writeBundle","options","generateExposedDependenciesMetadata","path","resolve","dir","undefined"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function importEsm<T = unknown>(specifier: string): Promise<T>;
2
+ //# sourceMappingURL=import-esm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-esm.d.ts","sourceRoot":"","sources":["../../../../src/vite/plugins/utils/import-esm.ts"],"names":[],"mappings":"AAYA,wBAAgB,SAAS,CAAC,CAAC,GAAG,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAEpE"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "importEsm", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return importEsm;
9
+ }
10
+ });
11
+ /*
12
+ * Load an ES module from CommonJS output. SWC rewrites a plain dynamic
13
+ * import() to require(), which throws on ESM-only packages (those whose
14
+ * package exports have no "require" entry, e.g. vite-plugin-istanbul). Hiding
15
+ * the import() inside a Function keeps it native so it isn't rewritten.
16
+ */ // eslint-disable-next-line @typescript-eslint/no-implied-eval
17
+ const nativeImport = new Function('specifier', 'return import(specifier)');
18
+ function importEsm(specifier) {
19
+ return nativeImport(specifier);
20
+ }
21
+
22
+ //# sourceMappingURL=import-esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/vite/plugins/utils/import-esm.ts"],"sourcesContent":["/*\n * Load an ES module from CommonJS output. SWC rewrites a plain dynamic\n * import() to require(), which throws on ESM-only packages (those whose\n * package exports have no \"require\" entry, e.g. vite-plugin-istanbul). Hiding\n * the import() inside a Function keeps it native so it isn't rewritten.\n */\n// eslint-disable-next-line @typescript-eslint/no-implied-eval\nconst nativeImport = new Function('specifier', 'return import(specifier)') as (\n specifier: string\n) => Promise<unknown>;\n\n/* istanbul ignore next -- native import can't run in jest; verified at runtime */\nexport function importEsm<T = unknown>(specifier: string): Promise<T> {\n return nativeImport(specifier) as Promise<T>;\n}\n"],"names":["importEsm","nativeImport","Function","specifier"],"mappings":";;;;+BAYgBA;;;eAAAA;;;AAZhB;;;;;CAKC,GACD,8DAA8D;AAC9D,MAAMC,eAAe,IAAIC,SAAS,aAAa;AAKxC,SAASF,UAAuBG,SAAiB;IACpD,OAAOF,aAAaE;AACxB"}
@@ -0,0 +1,3 @@
1
+ export * from './get-css-file-names';
2
+ export * from './import-esm';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/vite/plugins/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC"}