@strapi/strapi 5.50.1 → 5.51.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 (108) hide show
  1. package/dist/cli/commands/export/action.d.ts +3 -0
  2. package/dist/cli/commands/export/action.d.ts.map +1 -1
  3. package/dist/cli/commands/export/command.d.ts.map +1 -1
  4. package/dist/cli/commands/import/action.d.ts +3 -0
  5. package/dist/cli/commands/import/action.d.ts.map +1 -1
  6. package/dist/cli/commands/import/command.d.ts.map +1 -1
  7. package/dist/cli/commands/transfer/action.d.ts +3 -0
  8. package/dist/cli/commands/transfer/action.d.ts.map +1 -1
  9. package/dist/cli/commands/transfer/command.d.ts.map +1 -1
  10. package/dist/cli/utils/commander.d.ts +1 -1
  11. package/dist/cli/utils/commander.d.ts.map +1 -1
  12. package/dist/cli/utils/data-transfer.d.ts +56 -3
  13. package/dist/cli/utils/data-transfer.d.ts.map +1 -1
  14. package/dist/node/core/admin-vite-alias-modules.d.ts +9 -4
  15. package/dist/node/core/admin-vite-alias-modules.d.ts.map +1 -1
  16. package/dist/node/core/admin-vite-aliases.d.ts +22 -1
  17. package/dist/node/core/admin-vite-aliases.d.ts.map +1 -1
  18. package/dist/node/core/admin-vite-optimize-exclude.d.ts +38 -0
  19. package/dist/node/core/admin-vite-optimize-exclude.d.ts.map +1 -0
  20. package/dist/node/core/admin-vite-singleton-modules.d.ts +14 -0
  21. package/dist/node/core/admin-vite-singleton-modules.d.ts.map +1 -0
  22. package/dist/node/core/dependencies.d.ts.map +1 -1
  23. package/dist/node/core/resolve-module.d.ts +14 -2
  24. package/dist/node/core/resolve-module.d.ts.map +1 -1
  25. package/dist/node/create-build-context.d.ts.map +1 -1
  26. package/dist/node/vite/build.d.ts.map +1 -1
  27. package/dist/node/vite/config.d.ts.map +1 -1
  28. package/dist/node/vite/watch.d.ts.map +1 -1
  29. package/dist/node/webpack/config.d.ts.map +1 -1
  30. package/dist/package.json.js +1 -1
  31. package/dist/package.json.mjs +1 -1
  32. package/dist/src/cli/commands/export/action.js +10 -16
  33. package/dist/src/cli/commands/export/action.js.map +1 -1
  34. package/dist/src/cli/commands/export/action.mjs +11 -17
  35. package/dist/src/cli/commands/export/action.mjs.map +1 -1
  36. package/dist/src/cli/commands/export/command.js +1 -1
  37. package/dist/src/cli/commands/export/command.js.map +1 -1
  38. package/dist/src/cli/commands/export/command.mjs +2 -2
  39. package/dist/src/cli/commands/export/command.mjs.map +1 -1
  40. package/dist/src/cli/commands/import/action.js +11 -15
  41. package/dist/src/cli/commands/import/action.js.map +1 -1
  42. package/dist/src/cli/commands/import/action.mjs +12 -16
  43. package/dist/src/cli/commands/import/action.mjs.map +1 -1
  44. package/dist/src/cli/commands/import/command.js +1 -1
  45. package/dist/src/cli/commands/import/command.js.map +1 -1
  46. package/dist/src/cli/commands/import/command.mjs +2 -2
  47. package/dist/src/cli/commands/import/command.mjs.map +1 -1
  48. package/dist/src/cli/commands/transfer/action.js +10 -16
  49. package/dist/src/cli/commands/transfer/action.js.map +1 -1
  50. package/dist/src/cli/commands/transfer/action.mjs +11 -17
  51. package/dist/src/cli/commands/transfer/action.mjs.map +1 -1
  52. package/dist/src/cli/commands/transfer/command.js +1 -1
  53. package/dist/src/cli/commands/transfer/command.js.map +1 -1
  54. package/dist/src/cli/commands/transfer/command.mjs +2 -2
  55. package/dist/src/cli/commands/transfer/command.mjs.map +1 -1
  56. package/dist/src/cli/utils/data-transfer.js +166 -4
  57. package/dist/src/cli/utils/data-transfer.js.map +1 -1
  58. package/dist/src/cli/utils/data-transfer.mjs +155 -6
  59. package/dist/src/cli/utils/data-transfer.mjs.map +1 -1
  60. package/dist/src/node/core/admin-vite-alias-modules.js +13 -2
  61. package/dist/src/node/core/admin-vite-alias-modules.js.map +1 -1
  62. package/dist/src/node/core/admin-vite-alias-modules.mjs +13 -3
  63. package/dist/src/node/core/admin-vite-alias-modules.mjs.map +1 -1
  64. package/dist/src/node/core/admin-vite-aliases.js +44 -5
  65. package/dist/src/node/core/admin-vite-aliases.js.map +1 -1
  66. package/dist/src/node/core/admin-vite-aliases.mjs +44 -7
  67. package/dist/src/node/core/admin-vite-aliases.mjs.map +1 -1
  68. package/dist/src/node/core/admin-vite-optimize-exclude.js +162 -0
  69. package/dist/src/node/core/admin-vite-optimize-exclude.js.map +1 -0
  70. package/dist/src/node/core/admin-vite-optimize-exclude.mjs +149 -0
  71. package/dist/src/node/core/admin-vite-optimize-exclude.mjs.map +1 -0
  72. package/dist/src/node/core/admin-vite-singleton-modules.js +24 -0
  73. package/dist/src/node/core/admin-vite-singleton-modules.js.map +1 -0
  74. package/dist/src/node/core/admin-vite-singleton-modules.mjs +22 -0
  75. package/dist/src/node/core/admin-vite-singleton-modules.mjs.map +1 -0
  76. package/dist/src/node/core/dependencies.js +3 -2
  77. package/dist/src/node/core/dependencies.js.map +1 -1
  78. package/dist/src/node/core/dependencies.mjs +3 -2
  79. package/dist/src/node/core/dependencies.mjs.map +1 -1
  80. package/dist/src/node/core/resolve-module.js +25 -12
  81. package/dist/src/node/core/resolve-module.js.map +1 -1
  82. package/dist/src/node/core/resolve-module.mjs +25 -13
  83. package/dist/src/node/core/resolve-module.mjs.map +1 -1
  84. package/dist/src/node/create-build-context.js +6 -0
  85. package/dist/src/node/create-build-context.js.map +1 -1
  86. package/dist/src/node/create-build-context.mjs +6 -0
  87. package/dist/src/node/create-build-context.mjs.map +1 -1
  88. package/dist/src/node/vite/build.js +3 -0
  89. package/dist/src/node/vite/build.js.map +1 -1
  90. package/dist/src/node/vite/build.mjs +3 -0
  91. package/dist/src/node/vite/build.mjs.map +1 -1
  92. package/dist/src/node/vite/config.js +33 -16
  93. package/dist/src/node/vite/config.js.map +1 -1
  94. package/dist/src/node/vite/config.mjs +33 -12
  95. package/dist/src/node/vite/config.mjs.map +1 -1
  96. package/dist/src/node/vite/watch.js +3 -0
  97. package/dist/src/node/vite/watch.js.map +1 -1
  98. package/dist/src/node/vite/watch.mjs +3 -0
  99. package/dist/src/node/vite/watch.mjs.map +1 -1
  100. package/dist/src/node/webpack/config.js +5 -0
  101. package/dist/src/node/webpack/config.js.map +1 -1
  102. package/dist/src/node/webpack/config.mjs +5 -0
  103. package/dist/src/node/webpack/config.mjs.map +1 -1
  104. package/package.json +25 -24
  105. package/dist/cli/commands/plugin/init/files/typescript.d.ts +0 -22
  106. package/dist/cli/commands/plugin/init/files/typescript.d.ts.map +0 -1
  107. package/dist/test/mocks/inquirer.d.ts +0 -10
  108. package/dist/test/mocks/inquirer.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sources":["../../../../src/node/vite/config.ts"],"sourcesContent":["import type { InlineConfig, UserConfig } from 'vite';\nimport react from '@vitejs/plugin-react-swc';\n\nimport { getUserConfig } from '../core/config';\nimport { ADMIN_VITE_DEDUPE_MODULES } from '../core/admin-vite-alias-modules';\nimport { buildAdminViteResolveAliases } from '../core/admin-vite-aliases';\nimport { isDesignSystemLinked } from '../core/linked-packages';\nimport { loadStrapiMonorepo } from '../core/monorepo';\nimport { getMonorepoAliases } from '../core/aliases';\nimport type { BuildContext } from '../create-build-context';\nimport { buildFilesPlugin } from './plugins';\n\nconst resolveBaseConfig = async (ctx: BuildContext): Promise<InlineConfig> => {\n const { default: browserslistToEsbuild } = await import('browserslist-to-esbuild');\n const target = browserslistToEsbuild(ctx.target);\n const isMonorepoExampleApp = (ctx.strapi as any).internal_config?.uuid === 'getstarted';\n const designSystemLinked = isDesignSystemLinked();\n\n return {\n root: ctx.cwd,\n base: ctx.basePath,\n build: {\n emptyOutDir: false, // Rely on CLI to do this\n outDir: ctx.distDir,\n target,\n },\n cacheDir: 'node_modules/.strapi/vite',\n configFile: false,\n define: {\n process: {},\n 'process.env': JSON.stringify(ctx.env),\n },\n envPrefix: 'STRAPI_ADMIN_',\n optimizeDeps: {\n // When design-system is linked (portal:, file:, yarn link), exclude from pre-bundling\n // so changes are reflected without clearing node_modules/.strapi/vite cache\n ...(designSystemLinked && { exclude: ['@strapi/design-system'] }),\n include: [\n // pre-bundle React dependencies to avoid React duplicates,\n // even if React dependencies are not direct dependencies\n // https://react.dev/warnings/invalid-hook-call-warning#duplicate-react\n 'react',\n `react/jsx-runtime`,\n 'react-dom/client',\n 'styled-components',\n 'react-router-dom',\n // Admin + RTK Query share react-redux context; pre-bundle so dev chunks cannot load a\n // second copy (avoids \"could not find react-redux context value\" after upgrades / hoisting).\n 'react-redux',\n '@reduxjs/toolkit',\n // Pre-bundle design-system so plugin custom field chunks (dynamic imports) resolve\n // to the same instance as the main app. Otherwise TooltipProvider/DesignSystemProvider\n // context from the root is not seen by components in plugin chunks.\n // Omit when linked so local changes are picked up (see exclude above)\n ...(!designSystemLinked ? ['@strapi/design-system'] : []),\n '@radix-ui/react-tooltip',\n // Pre-bundle lodash: design-system uses named imports (e.g. assignWith) but lodash\n // is CommonJS-only; pre-bundling converts it to ESM for the browser\n 'lodash',\n // Pre-bundle prismjs so plugin chunks get a valid ESM namespace (prismjs is UMD and can\n // otherwise expose an empty object when bundled, causing \"Prism is not defined\" in admin).\n 'prismjs',\n /**\n * Pre-bundle other dependencies that would otherwise cause a page reload when imported.\n * See \"performance\" section: https://vite.dev/guide/dep-pre-bundling.html#the-why\n * Only include dependencies for our internal example apps, otherwise it will break\n * real user apps that may not have those dependencies.\n */\n ...(isMonorepoExampleApp\n ? [\n '@dnd-kit/core',\n '@dnd-kit/sortable',\n '@dnd-kit/utilities',\n '@dnd-kit/modifiers',\n '@radix-ui/react-toolbar',\n 'codemirror5',\n 'codemirror5/addon/display/placeholder',\n 'date-fns-tz',\n 'date-fns/format',\n 'date-fns/formatISO',\n 'highlight.js',\n 'lodash/capitalize',\n 'lodash/fp',\n 'lodash/groupBy',\n 'lodash/has',\n 'lodash/isNil',\n 'lodash/locale',\n 'lodash/map',\n 'lodash/mapValues',\n 'lodash/pull',\n 'lodash/size',\n 'lodash/sortBy',\n 'lodash/tail',\n 'lodash/toLower',\n 'lodash/toNumber',\n 'lodash/toString',\n 'lodash/truncate',\n 'lodash/uniq',\n 'lodash/upperFirst',\n 'markdown-it',\n 'markdown-it-abbr',\n 'markdown-it-container',\n 'markdown-it-deflist',\n 'markdown-it-emoji',\n 'markdown-it-footnote',\n 'markdown-it-ins',\n 'markdown-it-mark',\n 'markdown-it-sub',\n 'markdown-it-sup',\n 'prismjs/components/*.js',\n 'react-colorful',\n 'react-dnd-html5-backend',\n 'react-window',\n 'semver',\n 'semver/functions/lt',\n 'semver/functions/valid',\n 'slate',\n 'slate-history',\n 'slate-react',\n 'motion',\n ]\n : []),\n ],\n },\n resolve: {\n // https://react.dev/warnings/invalid-hook-call-warning#duplicate-react\n // Include design-system so plugin chunks use the same instance and inherit root context\n dedupe: [...ADMIN_VITE_DEDUPE_MODULES],\n // Explicit aliases ensure resolution under pnpm's strict dependency isolation,\n // where packages imported by plugins may not be resolvable from plugin chunks\n alias: buildAdminViteResolveAliases(),\n },\n plugins: [react(), buildFilesPlugin(ctx)],\n };\n};\n\nconst resolveProductionConfig = async (ctx: BuildContext): Promise<InlineConfig> => {\n const {\n options: { minify, sourcemaps },\n } = ctx;\n\n const baseConfig = await resolveBaseConfig(ctx);\n\n return {\n ...baseConfig,\n logLevel: 'silent',\n mode: 'production',\n build: {\n ...baseConfig.build,\n assetsDir: '',\n minify,\n sourcemap: sourcemaps,\n rollupOptions: {\n input: {\n strapi: ctx.entry,\n },\n },\n },\n };\n};\n\nconst resolveDevelopmentConfig = async (ctx: BuildContext): Promise<InlineConfig> => {\n const monorepo = await loadStrapiMonorepo(ctx.cwd);\n const baseConfig = await resolveBaseConfig(ctx);\n\n return {\n ...baseConfig,\n mode: 'development',\n resolve: {\n ...baseConfig.resolve,\n alias: {\n ...baseConfig.resolve?.alias,\n ...getMonorepoAliases({ monorepo }),\n },\n },\n server: {\n cors: false,\n /**\n * In middleware mode Strapi forwards the browser Host from reverse proxies (nginx, Traefik).\n * Vite 5+ blocks unknown hosts unless explicitly allowed (#23491).\n */\n allowedHosts: true,\n middlewareMode: true,\n open: ctx.options.open,\n hmr: {\n overlay: false,\n /**\n * Use Strapi's http.Server so HMR websockets reuse the app's listen port. A separate listener\n * plus clientPort pushes browsers toward host:5173-style URLs that fail behind proxies that\n * only expose the Strapi server port (#23491, #23008).\n */\n server: ctx.strapi.server.httpServer,\n },\n },\n appType: 'custom',\n };\n};\n\nconst USER_CONFIGS = ['vite.config.js', 'vite.config.mjs', 'vite.config.ts', 'vite.config.mts'];\n\ntype UserViteConfig = (config: UserConfig) => UserConfig;\n\nconst mergeConfigWithUserConfig = async (config: InlineConfig, ctx: BuildContext) => {\n const userConfig = await getUserConfig<UserViteConfig>(USER_CONFIGS, ctx);\n\n if (userConfig) {\n return userConfig(config);\n }\n\n return config;\n};\n\nexport { mergeConfigWithUserConfig, resolveProductionConfig, resolveDevelopmentConfig };\n"],"names":["resolveBaseConfig","ctx","default","browserslistToEsbuild","target","isMonorepoExampleApp","strapi","internal_config","uuid","designSystemLinked","isDesignSystemLinked","root","cwd","base","basePath","build","emptyOutDir","outDir","distDir","cacheDir","configFile","define","process","JSON","stringify","env","envPrefix","optimizeDeps","exclude","include","resolve","dedupe","ADMIN_VITE_DEDUPE_MODULES","alias","buildAdminViteResolveAliases","plugins","react","buildFilesPlugin","resolveProductionConfig","options","minify","sourcemaps","baseConfig","logLevel","mode","assetsDir","sourcemap","rollupOptions","input","entry","resolveDevelopmentConfig","monorepo","loadStrapiMonorepo","getMonorepoAliases","server","cors","allowedHosts","middlewareMode","open","hmr","overlay","httpServer","appType","USER_CONFIGS","mergeConfigWithUserConfig","config","userConfig","getUserConfig"],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sources":["../../../../src/node/vite/config.ts"],"sourcesContent":["import type { InlineConfig, UserConfig } from 'vite';\n\nimport { getUserConfig } from '../core/config';\nimport { ADMIN_VITE_DEDUPE_MODULES } from '../core/admin-vite-alias-modules';\nimport {\n buildAdminViteResolveAliases,\n getResolvableSingletonModules,\n} from '../core/admin-vite-aliases';\nimport { collectAdminOptimizeDepsExclude } from '../core/admin-vite-optimize-exclude';\nimport { isDesignSystemLinked } from '../core/linked-packages';\nimport { loadStrapiMonorepo } from '../core/monorepo';\nimport { getMonorepoAliases } from '../core/aliases';\nimport type { BuildContext } from '../create-build-context';\nimport { buildFilesPlugin } from './plugins';\n\nconst resolveBaseConfig = async (ctx: BuildContext): Promise<InlineConfig> => {\n const { default: browserslistToEsbuild } = await import('browserslist-to-esbuild');\n const target = browserslistToEsbuild(ctx.target);\n const isMonorepoExampleApp = (ctx.strapi as any).internal_config?.uuid === 'getstarted';\n const designSystemLinked = isDesignSystemLinked();\n const pluginOptimizeDepsExclude = await collectAdminOptimizeDepsExclude(ctx.cwd, ctx.plugins);\n const optimizeDepsExclude = [\n ...(designSystemLinked ? ['@strapi/design-system'] : []),\n ...pluginOptimizeDepsExclude,\n ];\n\n // Imported dynamically so this file's CJS build resolves Vite's ESM Node API instead of\n // its CJS entry, which emits \"The CJS build of Vite's Node API is deprecated\".\n // https://vite.dev/guide/troubleshooting.html#vite-cjs-node-api-deprecated\n const { default: react } = await import('@vitejs/plugin-react-swc');\n\n return {\n root: ctx.cwd,\n base: ctx.basePath,\n build: {\n emptyOutDir: false, // Rely on CLI to do this\n outDir: ctx.distDir,\n target,\n },\n cacheDir: 'node_modules/.strapi/vite',\n configFile: false,\n define: {\n process: {},\n 'process.env': JSON.stringify(ctx.env),\n },\n envPrefix: 'STRAPI_ADMIN_',\n optimizeDeps: {\n // Contract (#26964, #26944, #27014):\n // - CJS packages imported by @strapi/admin MUST be in optimizeDeps.include (invariant, lodash, …).\n // - The admin entry host (@strapi/strapi) MUST NOT be in optimizeDeps.exclude.\n // When design-system is linked (portal:, file:, yarn link), exclude from pre-bundling\n // so changes are reflected without clearing node_modules/.strapi/vite cache.\n // Also skip pre-built ESM plugin UI libraries with React peers (see collectAdminOptimizeDepsExclude).\n ...(optimizeDepsExclude.length > 0 && { exclude: optimizeDepsExclude }),\n include: [\n // pre-bundle React dependencies to avoid React duplicates,\n // even if React dependencies are not direct dependencies\n // https://react.dev/warnings/invalid-hook-call-warning#duplicate-react\n 'react',\n `react/jsx-runtime`,\n 'react-dom/client',\n 'styled-components',\n 'react-router-dom',\n // Admin + RTK Query share react-redux context; pre-bundle so dev chunks cannot load a\n // second copy (avoids \"could not find react-redux context value\" after upgrades / hoisting).\n 'react-redux',\n '@reduxjs/toolkit',\n // Pre-bundle design-system so plugin custom field chunks (dynamic imports) resolve\n // to the same instance as the main app. Otherwise TooltipProvider/DesignSystemProvider\n // context from the root is not seen by components in plugin chunks.\n // Omit when linked so local changes are picked up (see exclude above)\n ...(!designSystemLinked ? ['@strapi/design-system'] : []),\n '@radix-ui/react-tooltip',\n // CJS-only; required for @strapi/admin in dev (#26944, #26964, #27014).\n 'lodash',\n 'invariant',\n // UMD; without pre-bundling plugin chunks get empty namespace → \"Prism is not defined\" (#26964).\n 'prismjs',\n // Do NOT add `prismjs/components/*.js` to include. #26978 prebundled every language for\n // all apps; combined with #27014's optimizeDeps contract, Vite evaluates those chunks in\n // reverse import order so parents (e.g. basic before vbnet) load too late →\n // `Cannot set properties of undefined (setting 'comment')` and a blank admin in develop.\n // Keep `prismjs` only; let language components load as normal ESM side-effect imports.\n // CodeMirror must be a single instance across design-system, lang-json and uiw or the\n // JSON custom field crashes on instanceof checks. Pre-bundle for every build — dev and\n // production — not only monorepo examples. Use the resolvable subset so include stays in\n // lockstep with resolve.alias (an unresolvable singleton must not be forced into pre-bundling).\n ...getResolvableSingletonModules(),\n /**\n * Pre-bundle other dependencies that would otherwise cause a page reload when imported.\n * See \"performance\" section: https://vite.dev/guide/dep-pre-bundling.html#the-why\n * Only include dependencies for our internal example apps, otherwise it will break\n * real user apps that may not have those dependencies.\n */\n ...(isMonorepoExampleApp\n ? [\n '@dnd-kit/core',\n '@dnd-kit/sortable',\n '@dnd-kit/utilities',\n '@dnd-kit/modifiers',\n '@radix-ui/react-toolbar',\n 'codemirror5',\n 'codemirror5/addon/display/placeholder',\n 'date-fns-tz',\n 'date-fns/format',\n 'date-fns/formatISO',\n 'highlight.js',\n 'lodash/capitalize',\n 'lodash/fp',\n 'lodash/groupBy',\n 'lodash/has',\n 'lodash/isNil',\n 'lodash/locale',\n 'lodash/map',\n 'lodash/mapValues',\n 'lodash/pull',\n 'lodash/size',\n 'lodash/sortBy',\n 'lodash/tail',\n 'lodash/toLower',\n 'lodash/toNumber',\n 'lodash/toString',\n 'lodash/truncate',\n 'lodash/uniq',\n 'lodash/upperFirst',\n 'markdown-it',\n 'markdown-it-abbr',\n 'markdown-it-container',\n 'markdown-it-deflist',\n 'markdown-it-emoji',\n 'markdown-it-footnote',\n 'markdown-it-ins',\n 'markdown-it-mark',\n 'markdown-it-sub',\n 'markdown-it-sup',\n 'react-colorful',\n 'react-dnd-html5-backend',\n 'react-window',\n 'semver',\n 'semver/functions/lt',\n 'semver/functions/valid',\n 'slate',\n 'slate-history',\n 'slate-react',\n 'motion',\n ]\n : []),\n ],\n },\n resolve: {\n // https://react.dev/warnings/invalid-hook-call-warning#duplicate-react\n // Include design-system so plugin chunks use the same instance and inherit root context\n dedupe: [...ADMIN_VITE_DEDUPE_MODULES],\n // Explicit aliases ensure resolution under pnpm's strict dependency isolation,\n // where packages imported by plugins may not be resolvable from plugin chunks\n alias: buildAdminViteResolveAliases(),\n },\n plugins: [react(), buildFilesPlugin(ctx)],\n };\n};\n\nconst resolveProductionConfig = async (ctx: BuildContext): Promise<InlineConfig> => {\n const {\n options: { minify, sourcemaps },\n } = ctx;\n\n const baseConfig = await resolveBaseConfig(ctx);\n\n return {\n ...baseConfig,\n logLevel: 'silent',\n mode: 'production',\n build: {\n ...baseConfig.build,\n assetsDir: '',\n minify,\n sourcemap: sourcemaps,\n rollupOptions: {\n input: {\n strapi: ctx.entry,\n },\n },\n },\n };\n};\n\nconst resolveDevelopmentConfig = async (ctx: BuildContext): Promise<InlineConfig> => {\n const monorepo = await loadStrapiMonorepo(ctx.cwd);\n const baseConfig = await resolveBaseConfig(ctx);\n\n return {\n ...baseConfig,\n mode: 'development',\n resolve: {\n ...baseConfig.resolve,\n alias: {\n ...baseConfig.resolve?.alias,\n ...getMonorepoAliases({ monorepo }),\n },\n },\n server: {\n cors: false,\n /**\n * In middleware mode Strapi forwards the browser Host from reverse proxies (nginx, Traefik).\n * Vite 5+ blocks unknown hosts unless explicitly allowed (#23491).\n */\n allowedHosts: true,\n middlewareMode: true,\n open: ctx.options.open,\n hmr: {\n overlay: false,\n /**\n * Use Strapi's http.Server so HMR websockets reuse the app's listen port. A separate listener\n * plus clientPort pushes browsers toward host:5173-style URLs that fail behind proxies that\n * only expose the Strapi server port (#23491, #23008).\n */\n server: ctx.strapi.server.httpServer,\n },\n },\n appType: 'custom',\n };\n};\n\nconst USER_CONFIGS = ['vite.config.js', 'vite.config.mjs', 'vite.config.ts', 'vite.config.mts'];\n\ntype UserViteConfig = (config: UserConfig) => UserConfig;\n\nconst mergeConfigWithUserConfig = async (config: InlineConfig, ctx: BuildContext) => {\n const userConfig = await getUserConfig<UserViteConfig>(USER_CONFIGS, ctx);\n\n if (userConfig) {\n return userConfig(config);\n }\n\n return config;\n};\n\nexport { mergeConfigWithUserConfig, resolveProductionConfig, resolveDevelopmentConfig };\n"],"names":["resolveBaseConfig","ctx","default","browserslistToEsbuild","target","isMonorepoExampleApp","strapi","internal_config","uuid","designSystemLinked","isDesignSystemLinked","pluginOptimizeDepsExclude","collectAdminOptimizeDepsExclude","cwd","plugins","optimizeDepsExclude","react","root","base","basePath","build","emptyOutDir","outDir","distDir","cacheDir","configFile","define","process","JSON","stringify","env","envPrefix","optimizeDeps","length","exclude","include","getResolvableSingletonModules","resolve","dedupe","ADMIN_VITE_DEDUPE_MODULES","alias","buildAdminViteResolveAliases","buildFilesPlugin","resolveProductionConfig","options","minify","sourcemaps","baseConfig","logLevel","mode","assetsDir","sourcemap","rollupOptions","input","entry","resolveDevelopmentConfig","monorepo","loadStrapiMonorepo","getMonorepoAliases","server","cors","allowedHosts","middlewareMode","open","hmr","overlay","httpServer","appType","USER_CONFIGS","mergeConfigWithUserConfig","config","userConfig","getUserConfig"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import react from '@vitejs/plugin-react-swc';
2
1
  import { getUserConfig } from '../core/config.mjs';
3
2
  import { ADMIN_VITE_DEDUPE_MODULES } from '../core/admin-vite-alias-modules.mjs';
4
- import { buildAdminViteResolveAliases } from '../core/admin-vite-aliases.mjs';
3
+ import { buildAdminViteResolveAliases, getResolvableSingletonModules } from '../core/admin-vite-aliases.mjs';
4
+ import { collectAdminOptimizeDepsExclude } from '../core/admin-vite-optimize-exclude.mjs';
5
5
  import { isDesignSystemLinked } from '../core/linked-packages.mjs';
6
6
  import { loadStrapiMonorepo } from '../core/monorepo.mjs';
7
7
  import { getMonorepoAliases } from '../core/aliases.mjs';
@@ -12,6 +12,17 @@ const resolveBaseConfig = async (ctx)=>{
12
12
  const target = browserslistToEsbuild(ctx.target);
13
13
  const isMonorepoExampleApp = ctx.strapi.internal_config?.uuid === 'getstarted';
14
14
  const designSystemLinked = isDesignSystemLinked();
15
+ const pluginOptimizeDepsExclude = await collectAdminOptimizeDepsExclude(ctx.cwd, ctx.plugins);
16
+ const optimizeDepsExclude = [
17
+ ...designSystemLinked ? [
18
+ '@strapi/design-system'
19
+ ] : [],
20
+ ...pluginOptimizeDepsExclude
21
+ ];
22
+ // Imported dynamically so this file's CJS build resolves Vite's ESM Node API instead of
23
+ // its CJS entry, which emits "The CJS build of Vite's Node API is deprecated".
24
+ // https://vite.dev/guide/troubleshooting.html#vite-cjs-node-api-deprecated
25
+ const { default: react } = await import('@vitejs/plugin-react-swc');
15
26
  return {
16
27
  root: ctx.cwd,
17
28
  base: ctx.basePath,
@@ -28,12 +39,14 @@ const resolveBaseConfig = async (ctx)=>{
28
39
  },
29
40
  envPrefix: 'STRAPI_ADMIN_',
30
41
  optimizeDeps: {
42
+ // Contract (#26964, #26944, #27014):
43
+ // - CJS packages imported by @strapi/admin MUST be in optimizeDeps.include (invariant, lodash, …).
44
+ // - The admin entry host (@strapi/strapi) MUST NOT be in optimizeDeps.exclude.
31
45
  // When design-system is linked (portal:, file:, yarn link), exclude from pre-bundling
32
- // so changes are reflected without clearing node_modules/.strapi/vite cache
33
- ...designSystemLinked && {
34
- exclude: [
35
- '@strapi/design-system'
36
- ]
46
+ // so changes are reflected without clearing node_modules/.strapi/vite cache.
47
+ // Also skip pre-built ESM plugin UI libraries with React peers (see collectAdminOptimizeDepsExclude).
48
+ ...optimizeDepsExclude.length > 0 && {
49
+ exclude: optimizeDepsExclude
37
50
  },
38
51
  include: [
39
52
  // pre-bundle React dependencies to avoid React duplicates,
@@ -56,12 +69,21 @@ const resolveBaseConfig = async (ctx)=>{
56
69
  '@strapi/design-system'
57
70
  ] : [],
58
71
  '@radix-ui/react-tooltip',
59
- // Pre-bundle lodash: design-system uses named imports (e.g. assignWith) but lodash
60
- // is CommonJS-only; pre-bundling converts it to ESM for the browser
72
+ // CJS-only; required for @strapi/admin in dev (#26944, #26964, #27014).
61
73
  'lodash',
62
- // Pre-bundle prismjs so plugin chunks get a valid ESM namespace (prismjs is UMD and can
63
- // otherwise expose an empty object when bundled, causing "Prism is not defined" in admin).
74
+ 'invariant',
75
+ // UMD; without pre-bundling plugin chunks get empty namespace "Prism is not defined" (#26964).
64
76
  'prismjs',
77
+ // Do NOT add `prismjs/components/*.js` to include. #26978 prebundled every language for
78
+ // all apps; combined with #27014's optimizeDeps contract, Vite evaluates those chunks in
79
+ // reverse import order so parents (e.g. basic before vbnet) load too late →
80
+ // `Cannot set properties of undefined (setting 'comment')` and a blank admin in develop.
81
+ // Keep `prismjs` only; let language components load as normal ESM side-effect imports.
82
+ // CodeMirror must be a single instance across design-system, lang-json and uiw or the
83
+ // JSON custom field crashes on instanceof checks. Pre-bundle for every build — dev and
84
+ // production — not only monorepo examples. Use the resolvable subset so include stays in
85
+ // lockstep with resolve.alias (an unresolvable singleton must not be forced into pre-bundling).
86
+ ...getResolvableSingletonModules(),
65
87
  /**
66
88
  * Pre-bundle other dependencies that would otherwise cause a page reload when imported.
67
89
  * See "performance" section: https://vite.dev/guide/dep-pre-bundling.html#the-why
@@ -107,7 +129,6 @@ const resolveBaseConfig = async (ctx)=>{
107
129
  'markdown-it-mark',
108
130
  'markdown-it-sub',
109
131
  'markdown-it-sup',
110
- 'prismjs/components/*.js',
111
132
  'react-colorful',
112
133
  'react-dnd-html5-backend',
113
134
  'react-window',
@@ -1 +1 @@
1
- {"version":3,"file":"config.mjs","sources":["../../../../src/node/vite/config.ts"],"sourcesContent":["import type { InlineConfig, UserConfig } from 'vite';\nimport react from '@vitejs/plugin-react-swc';\n\nimport { getUserConfig } from '../core/config';\nimport { ADMIN_VITE_DEDUPE_MODULES } from '../core/admin-vite-alias-modules';\nimport { buildAdminViteResolveAliases } from '../core/admin-vite-aliases';\nimport { isDesignSystemLinked } from '../core/linked-packages';\nimport { loadStrapiMonorepo } from '../core/monorepo';\nimport { getMonorepoAliases } from '../core/aliases';\nimport type { BuildContext } from '../create-build-context';\nimport { buildFilesPlugin } from './plugins';\n\nconst resolveBaseConfig = async (ctx: BuildContext): Promise<InlineConfig> => {\n const { default: browserslistToEsbuild } = await import('browserslist-to-esbuild');\n const target = browserslistToEsbuild(ctx.target);\n const isMonorepoExampleApp = (ctx.strapi as any).internal_config?.uuid === 'getstarted';\n const designSystemLinked = isDesignSystemLinked();\n\n return {\n root: ctx.cwd,\n base: ctx.basePath,\n build: {\n emptyOutDir: false, // Rely on CLI to do this\n outDir: ctx.distDir,\n target,\n },\n cacheDir: 'node_modules/.strapi/vite',\n configFile: false,\n define: {\n process: {},\n 'process.env': JSON.stringify(ctx.env),\n },\n envPrefix: 'STRAPI_ADMIN_',\n optimizeDeps: {\n // When design-system is linked (portal:, file:, yarn link), exclude from pre-bundling\n // so changes are reflected without clearing node_modules/.strapi/vite cache\n ...(designSystemLinked && { exclude: ['@strapi/design-system'] }),\n include: [\n // pre-bundle React dependencies to avoid React duplicates,\n // even if React dependencies are not direct dependencies\n // https://react.dev/warnings/invalid-hook-call-warning#duplicate-react\n 'react',\n `react/jsx-runtime`,\n 'react-dom/client',\n 'styled-components',\n 'react-router-dom',\n // Admin + RTK Query share react-redux context; pre-bundle so dev chunks cannot load a\n // second copy (avoids \"could not find react-redux context value\" after upgrades / hoisting).\n 'react-redux',\n '@reduxjs/toolkit',\n // Pre-bundle design-system so plugin custom field chunks (dynamic imports) resolve\n // to the same instance as the main app. Otherwise TooltipProvider/DesignSystemProvider\n // context from the root is not seen by components in plugin chunks.\n // Omit when linked so local changes are picked up (see exclude above)\n ...(!designSystemLinked ? ['@strapi/design-system'] : []),\n '@radix-ui/react-tooltip',\n // Pre-bundle lodash: design-system uses named imports (e.g. assignWith) but lodash\n // is CommonJS-only; pre-bundling converts it to ESM for the browser\n 'lodash',\n // Pre-bundle prismjs so plugin chunks get a valid ESM namespace (prismjs is UMD and can\n // otherwise expose an empty object when bundled, causing \"Prism is not defined\" in admin).\n 'prismjs',\n /**\n * Pre-bundle other dependencies that would otherwise cause a page reload when imported.\n * See \"performance\" section: https://vite.dev/guide/dep-pre-bundling.html#the-why\n * Only include dependencies for our internal example apps, otherwise it will break\n * real user apps that may not have those dependencies.\n */\n ...(isMonorepoExampleApp\n ? [\n '@dnd-kit/core',\n '@dnd-kit/sortable',\n '@dnd-kit/utilities',\n '@dnd-kit/modifiers',\n '@radix-ui/react-toolbar',\n 'codemirror5',\n 'codemirror5/addon/display/placeholder',\n 'date-fns-tz',\n 'date-fns/format',\n 'date-fns/formatISO',\n 'highlight.js',\n 'lodash/capitalize',\n 'lodash/fp',\n 'lodash/groupBy',\n 'lodash/has',\n 'lodash/isNil',\n 'lodash/locale',\n 'lodash/map',\n 'lodash/mapValues',\n 'lodash/pull',\n 'lodash/size',\n 'lodash/sortBy',\n 'lodash/tail',\n 'lodash/toLower',\n 'lodash/toNumber',\n 'lodash/toString',\n 'lodash/truncate',\n 'lodash/uniq',\n 'lodash/upperFirst',\n 'markdown-it',\n 'markdown-it-abbr',\n 'markdown-it-container',\n 'markdown-it-deflist',\n 'markdown-it-emoji',\n 'markdown-it-footnote',\n 'markdown-it-ins',\n 'markdown-it-mark',\n 'markdown-it-sub',\n 'markdown-it-sup',\n 'prismjs/components/*.js',\n 'react-colorful',\n 'react-dnd-html5-backend',\n 'react-window',\n 'semver',\n 'semver/functions/lt',\n 'semver/functions/valid',\n 'slate',\n 'slate-history',\n 'slate-react',\n 'motion',\n ]\n : []),\n ],\n },\n resolve: {\n // https://react.dev/warnings/invalid-hook-call-warning#duplicate-react\n // Include design-system so plugin chunks use the same instance and inherit root context\n dedupe: [...ADMIN_VITE_DEDUPE_MODULES],\n // Explicit aliases ensure resolution under pnpm's strict dependency isolation,\n // where packages imported by plugins may not be resolvable from plugin chunks\n alias: buildAdminViteResolveAliases(),\n },\n plugins: [react(), buildFilesPlugin(ctx)],\n };\n};\n\nconst resolveProductionConfig = async (ctx: BuildContext): Promise<InlineConfig> => {\n const {\n options: { minify, sourcemaps },\n } = ctx;\n\n const baseConfig = await resolveBaseConfig(ctx);\n\n return {\n ...baseConfig,\n logLevel: 'silent',\n mode: 'production',\n build: {\n ...baseConfig.build,\n assetsDir: '',\n minify,\n sourcemap: sourcemaps,\n rollupOptions: {\n input: {\n strapi: ctx.entry,\n },\n },\n },\n };\n};\n\nconst resolveDevelopmentConfig = async (ctx: BuildContext): Promise<InlineConfig> => {\n const monorepo = await loadStrapiMonorepo(ctx.cwd);\n const baseConfig = await resolveBaseConfig(ctx);\n\n return {\n ...baseConfig,\n mode: 'development',\n resolve: {\n ...baseConfig.resolve,\n alias: {\n ...baseConfig.resolve?.alias,\n ...getMonorepoAliases({ monorepo }),\n },\n },\n server: {\n cors: false,\n /**\n * In middleware mode Strapi forwards the browser Host from reverse proxies (nginx, Traefik).\n * Vite 5+ blocks unknown hosts unless explicitly allowed (#23491).\n */\n allowedHosts: true,\n middlewareMode: true,\n open: ctx.options.open,\n hmr: {\n overlay: false,\n /**\n * Use Strapi's http.Server so HMR websockets reuse the app's listen port. A separate listener\n * plus clientPort pushes browsers toward host:5173-style URLs that fail behind proxies that\n * only expose the Strapi server port (#23491, #23008).\n */\n server: ctx.strapi.server.httpServer,\n },\n },\n appType: 'custom',\n };\n};\n\nconst USER_CONFIGS = ['vite.config.js', 'vite.config.mjs', 'vite.config.ts', 'vite.config.mts'];\n\ntype UserViteConfig = (config: UserConfig) => UserConfig;\n\nconst mergeConfigWithUserConfig = async (config: InlineConfig, ctx: BuildContext) => {\n const userConfig = await getUserConfig<UserViteConfig>(USER_CONFIGS, ctx);\n\n if (userConfig) {\n return userConfig(config);\n }\n\n return config;\n};\n\nexport { mergeConfigWithUserConfig, resolveProductionConfig, resolveDevelopmentConfig };\n"],"names":["resolveBaseConfig","ctx","default","browserslistToEsbuild","target","isMonorepoExampleApp","strapi","internal_config","uuid","designSystemLinked","isDesignSystemLinked","root","cwd","base","basePath","build","emptyOutDir","outDir","distDir","cacheDir","configFile","define","process","JSON","stringify","env","envPrefix","optimizeDeps","exclude","include","resolve","dedupe","ADMIN_VITE_DEDUPE_MODULES","alias","buildAdminViteResolveAliases","plugins","react","buildFilesPlugin","resolveProductionConfig","options","minify","sourcemaps","baseConfig","logLevel","mode","assetsDir","sourcemap","rollupOptions","input","entry","resolveDevelopmentConfig","monorepo","loadStrapiMonorepo","getMonorepoAliases","server","cors","allowedHosts","middlewareMode","open","hmr","overlay","httpServer","appType","USER_CONFIGS","mergeConfigWithUserConfig","config","userConfig","getUserConfig"],"mappings":"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"}
1
+ {"version":3,"file":"config.mjs","sources":["../../../../src/node/vite/config.ts"],"sourcesContent":["import type { InlineConfig, UserConfig } from 'vite';\n\nimport { getUserConfig } from '../core/config';\nimport { ADMIN_VITE_DEDUPE_MODULES } from '../core/admin-vite-alias-modules';\nimport {\n buildAdminViteResolveAliases,\n getResolvableSingletonModules,\n} from '../core/admin-vite-aliases';\nimport { collectAdminOptimizeDepsExclude } from '../core/admin-vite-optimize-exclude';\nimport { isDesignSystemLinked } from '../core/linked-packages';\nimport { loadStrapiMonorepo } from '../core/monorepo';\nimport { getMonorepoAliases } from '../core/aliases';\nimport type { BuildContext } from '../create-build-context';\nimport { buildFilesPlugin } from './plugins';\n\nconst resolveBaseConfig = async (ctx: BuildContext): Promise<InlineConfig> => {\n const { default: browserslistToEsbuild } = await import('browserslist-to-esbuild');\n const target = browserslistToEsbuild(ctx.target);\n const isMonorepoExampleApp = (ctx.strapi as any).internal_config?.uuid === 'getstarted';\n const designSystemLinked = isDesignSystemLinked();\n const pluginOptimizeDepsExclude = await collectAdminOptimizeDepsExclude(ctx.cwd, ctx.plugins);\n const optimizeDepsExclude = [\n ...(designSystemLinked ? ['@strapi/design-system'] : []),\n ...pluginOptimizeDepsExclude,\n ];\n\n // Imported dynamically so this file's CJS build resolves Vite's ESM Node API instead of\n // its CJS entry, which emits \"The CJS build of Vite's Node API is deprecated\".\n // https://vite.dev/guide/troubleshooting.html#vite-cjs-node-api-deprecated\n const { default: react } = await import('@vitejs/plugin-react-swc');\n\n return {\n root: ctx.cwd,\n base: ctx.basePath,\n build: {\n emptyOutDir: false, // Rely on CLI to do this\n outDir: ctx.distDir,\n target,\n },\n cacheDir: 'node_modules/.strapi/vite',\n configFile: false,\n define: {\n process: {},\n 'process.env': JSON.stringify(ctx.env),\n },\n envPrefix: 'STRAPI_ADMIN_',\n optimizeDeps: {\n // Contract (#26964, #26944, #27014):\n // - CJS packages imported by @strapi/admin MUST be in optimizeDeps.include (invariant, lodash, …).\n // - The admin entry host (@strapi/strapi) MUST NOT be in optimizeDeps.exclude.\n // When design-system is linked (portal:, file:, yarn link), exclude from pre-bundling\n // so changes are reflected without clearing node_modules/.strapi/vite cache.\n // Also skip pre-built ESM plugin UI libraries with React peers (see collectAdminOptimizeDepsExclude).\n ...(optimizeDepsExclude.length > 0 && { exclude: optimizeDepsExclude }),\n include: [\n // pre-bundle React dependencies to avoid React duplicates,\n // even if React dependencies are not direct dependencies\n // https://react.dev/warnings/invalid-hook-call-warning#duplicate-react\n 'react',\n `react/jsx-runtime`,\n 'react-dom/client',\n 'styled-components',\n 'react-router-dom',\n // Admin + RTK Query share react-redux context; pre-bundle so dev chunks cannot load a\n // second copy (avoids \"could not find react-redux context value\" after upgrades / hoisting).\n 'react-redux',\n '@reduxjs/toolkit',\n // Pre-bundle design-system so plugin custom field chunks (dynamic imports) resolve\n // to the same instance as the main app. Otherwise TooltipProvider/DesignSystemProvider\n // context from the root is not seen by components in plugin chunks.\n // Omit when linked so local changes are picked up (see exclude above)\n ...(!designSystemLinked ? ['@strapi/design-system'] : []),\n '@radix-ui/react-tooltip',\n // CJS-only; required for @strapi/admin in dev (#26944, #26964, #27014).\n 'lodash',\n 'invariant',\n // UMD; without pre-bundling plugin chunks get empty namespace → \"Prism is not defined\" (#26964).\n 'prismjs',\n // Do NOT add `prismjs/components/*.js` to include. #26978 prebundled every language for\n // all apps; combined with #27014's optimizeDeps contract, Vite evaluates those chunks in\n // reverse import order so parents (e.g. basic before vbnet) load too late →\n // `Cannot set properties of undefined (setting 'comment')` and a blank admin in develop.\n // Keep `prismjs` only; let language components load as normal ESM side-effect imports.\n // CodeMirror must be a single instance across design-system, lang-json and uiw or the\n // JSON custom field crashes on instanceof checks. Pre-bundle for every build — dev and\n // production — not only monorepo examples. Use the resolvable subset so include stays in\n // lockstep with resolve.alias (an unresolvable singleton must not be forced into pre-bundling).\n ...getResolvableSingletonModules(),\n /**\n * Pre-bundle other dependencies that would otherwise cause a page reload when imported.\n * See \"performance\" section: https://vite.dev/guide/dep-pre-bundling.html#the-why\n * Only include dependencies for our internal example apps, otherwise it will break\n * real user apps that may not have those dependencies.\n */\n ...(isMonorepoExampleApp\n ? [\n '@dnd-kit/core',\n '@dnd-kit/sortable',\n '@dnd-kit/utilities',\n '@dnd-kit/modifiers',\n '@radix-ui/react-toolbar',\n 'codemirror5',\n 'codemirror5/addon/display/placeholder',\n 'date-fns-tz',\n 'date-fns/format',\n 'date-fns/formatISO',\n 'highlight.js',\n 'lodash/capitalize',\n 'lodash/fp',\n 'lodash/groupBy',\n 'lodash/has',\n 'lodash/isNil',\n 'lodash/locale',\n 'lodash/map',\n 'lodash/mapValues',\n 'lodash/pull',\n 'lodash/size',\n 'lodash/sortBy',\n 'lodash/tail',\n 'lodash/toLower',\n 'lodash/toNumber',\n 'lodash/toString',\n 'lodash/truncate',\n 'lodash/uniq',\n 'lodash/upperFirst',\n 'markdown-it',\n 'markdown-it-abbr',\n 'markdown-it-container',\n 'markdown-it-deflist',\n 'markdown-it-emoji',\n 'markdown-it-footnote',\n 'markdown-it-ins',\n 'markdown-it-mark',\n 'markdown-it-sub',\n 'markdown-it-sup',\n 'react-colorful',\n 'react-dnd-html5-backend',\n 'react-window',\n 'semver',\n 'semver/functions/lt',\n 'semver/functions/valid',\n 'slate',\n 'slate-history',\n 'slate-react',\n 'motion',\n ]\n : []),\n ],\n },\n resolve: {\n // https://react.dev/warnings/invalid-hook-call-warning#duplicate-react\n // Include design-system so plugin chunks use the same instance and inherit root context\n dedupe: [...ADMIN_VITE_DEDUPE_MODULES],\n // Explicit aliases ensure resolution under pnpm's strict dependency isolation,\n // where packages imported by plugins may not be resolvable from plugin chunks\n alias: buildAdminViteResolveAliases(),\n },\n plugins: [react(), buildFilesPlugin(ctx)],\n };\n};\n\nconst resolveProductionConfig = async (ctx: BuildContext): Promise<InlineConfig> => {\n const {\n options: { minify, sourcemaps },\n } = ctx;\n\n const baseConfig = await resolveBaseConfig(ctx);\n\n return {\n ...baseConfig,\n logLevel: 'silent',\n mode: 'production',\n build: {\n ...baseConfig.build,\n assetsDir: '',\n minify,\n sourcemap: sourcemaps,\n rollupOptions: {\n input: {\n strapi: ctx.entry,\n },\n },\n },\n };\n};\n\nconst resolveDevelopmentConfig = async (ctx: BuildContext): Promise<InlineConfig> => {\n const monorepo = await loadStrapiMonorepo(ctx.cwd);\n const baseConfig = await resolveBaseConfig(ctx);\n\n return {\n ...baseConfig,\n mode: 'development',\n resolve: {\n ...baseConfig.resolve,\n alias: {\n ...baseConfig.resolve?.alias,\n ...getMonorepoAliases({ monorepo }),\n },\n },\n server: {\n cors: false,\n /**\n * In middleware mode Strapi forwards the browser Host from reverse proxies (nginx, Traefik).\n * Vite 5+ blocks unknown hosts unless explicitly allowed (#23491).\n */\n allowedHosts: true,\n middlewareMode: true,\n open: ctx.options.open,\n hmr: {\n overlay: false,\n /**\n * Use Strapi's http.Server so HMR websockets reuse the app's listen port. A separate listener\n * plus clientPort pushes browsers toward host:5173-style URLs that fail behind proxies that\n * only expose the Strapi server port (#23491, #23008).\n */\n server: ctx.strapi.server.httpServer,\n },\n },\n appType: 'custom',\n };\n};\n\nconst USER_CONFIGS = ['vite.config.js', 'vite.config.mjs', 'vite.config.ts', 'vite.config.mts'];\n\ntype UserViteConfig = (config: UserConfig) => UserConfig;\n\nconst mergeConfigWithUserConfig = async (config: InlineConfig, ctx: BuildContext) => {\n const userConfig = await getUserConfig<UserViteConfig>(USER_CONFIGS, ctx);\n\n if (userConfig) {\n return userConfig(config);\n }\n\n return config;\n};\n\nexport { mergeConfigWithUserConfig, resolveProductionConfig, resolveDevelopmentConfig };\n"],"names":["resolveBaseConfig","ctx","default","browserslistToEsbuild","target","isMonorepoExampleApp","strapi","internal_config","uuid","designSystemLinked","isDesignSystemLinked","pluginOptimizeDepsExclude","collectAdminOptimizeDepsExclude","cwd","plugins","optimizeDepsExclude","react","root","base","basePath","build","emptyOutDir","outDir","distDir","cacheDir","configFile","define","process","JSON","stringify","env","envPrefix","optimizeDeps","length","exclude","include","getResolvableSingletonModules","resolve","dedupe","ADMIN_VITE_DEDUPE_MODULES","alias","buildAdminViteResolveAliases","buildFilesPlugin","resolveProductionConfig","options","minify","sourcemaps","baseConfig","logLevel","mode","assetsDir","sourcemap","rollupOptions","input","entry","resolveDevelopmentConfig","monorepo","loadStrapiMonorepo","getMonorepoAliases","server","cors","allowedHosts","middlewareMode","open","hmr","overlay","httpServer","appType","USER_CONFIGS","mergeConfigWithUserConfig","config","userConfig","getUserConfig"],"mappings":"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"}
@@ -12,6 +12,9 @@ var fs__default = /*#__PURE__*/_interopDefault(fs);
12
12
  const watch = async (ctx)=>{
13
13
  const finalConfig = await config.mergeConfigWithUserConfig(await config.resolveDevelopmentConfig(ctx), ctx);
14
14
  ctx.logger.debug('Vite config', finalConfig);
15
+ // Imported dynamically so this file's CJS build resolves Vite's ESM Node API instead of
16
+ // its CJS entry, which emits "The CJS build of Vite's Node API is deprecated".
17
+ // https://vite.dev/guide/troubleshooting.html#vite-cjs-node-api-deprecated
15
18
  const { createServer } = await import('vite');
16
19
  const vite = await createServer(finalConfig);
17
20
  const viteMiddlewares = (koaCtx, next)=>{
@@ -1 +1 @@
1
- {"version":3,"file":"watch.js","sources":["../../../../src/node/vite/watch.ts"],"sourcesContent":["import path from 'node:path';\nimport fs from 'node:fs/promises';\nimport type { Core } from '@strapi/types';\n\nimport { mergeConfigWithUserConfig, resolveDevelopmentConfig } from './config';\n\nimport type { BuildContext } from '../create-build-context';\n\ninterface ViteWatcher {\n close(): Promise<void>;\n}\n\nconst watch = async (ctx: BuildContext): Promise<ViteWatcher> => {\n const finalConfig = await mergeConfigWithUserConfig(await resolveDevelopmentConfig(ctx), ctx);\n\n ctx.logger.debug('Vite config', finalConfig);\n\n const { createServer } = await import('vite');\n\n const vite = await createServer(finalConfig);\n\n const viteMiddlewares: Core.MiddlewareHandler = (koaCtx, next) => {\n return new Promise((resolve, reject) => {\n const prefix = ctx.basePath.replace(ctx.adminPath, '').replace(/\\/+$/, '');\n\n const originalPath = koaCtx.path;\n if (!koaCtx.path.startsWith(prefix)) {\n koaCtx.path = `${prefix}${koaCtx.path}`;\n }\n\n // Set cache-control headers to prevent caching issues during development restarts\n koaCtx.set('Cache-Control', 'no-store, no-cache, must-revalidate, proxy-revalidate');\n koaCtx.set('Pragma', 'no-cache');\n koaCtx.set('Expires', '0');\n koaCtx.set('Surrogate-Control', 'no-store');\n\n vite.middlewares(koaCtx.req, koaCtx.res, (err: unknown) => {\n if (err) {\n reject(err);\n } else {\n if (!koaCtx.res.headersSent) {\n koaCtx.path = originalPath;\n }\n\n resolve(next());\n }\n });\n });\n };\n\n const serveAdmin: Core.MiddlewareHandler = async (koaCtx, next) => {\n await next();\n\n if (koaCtx.method !== 'HEAD' && koaCtx.method !== 'GET') {\n return;\n }\n\n if (koaCtx.body != null || koaCtx.status !== 404) {\n return;\n }\n\n const url = koaCtx.originalUrl;\n\n try {\n let template = await fs.readFile(\n path.relative(ctx.cwd, '.strapi/client/index.html'),\n 'utf-8'\n );\n template = await vite.transformIndexHtml(url, template);\n\n koaCtx.type = 'html';\n koaCtx.body = template;\n } catch (error) {\n ctx.logger.error('Failed to serve admin panel in development mode:', error);\n // Don't fallback to other handlers in development mode to prevent MIME type conflicts\n koaCtx.status = 500;\n koaCtx.body = 'Admin panel temporarily unavailable during server restart';\n }\n };\n\n const adminRoute = `${ctx.adminPath}/:path*`;\n\n // Remove any existing admin routes to prevent conflicts during restart\n const existingRoutes = ctx.strapi.server.router.stack.filter(\n (layer) => layer.path === adminRoute\n );\n existingRoutes.forEach((route) => {\n const index = ctx.strapi.server.router.stack.indexOf(route);\n if (index > -1) {\n ctx.strapi.server.router.stack.splice(index, 1);\n }\n });\n\n ctx.strapi.server.router.get(adminRoute, serveAdmin);\n ctx.strapi.server.router.use(adminRoute, viteMiddlewares);\n\n return {\n async close() {\n await vite.close();\n },\n };\n};\n\nexport { watch };\nexport type { ViteWatcher };\n"],"names":["watch","ctx","finalConfig","mergeConfigWithUserConfig","resolveDevelopmentConfig","logger","debug","createServer","vite","viteMiddlewares","koaCtx","next","Promise","resolve","reject","prefix","basePath","replace","adminPath","originalPath","path","startsWith","set","middlewares","req","res","err","headersSent","serveAdmin","method","body","status","url","originalUrl","template","fs","readFile","relative","cwd","transformIndexHtml","type","error","adminRoute","existingRoutes","strapi","server","router","stack","filter","layer","forEach","route","index","indexOf","splice","get","use","close"],"mappings":"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"}
1
+ {"version":3,"file":"watch.js","sources":["../../../../src/node/vite/watch.ts"],"sourcesContent":["import path from 'node:path';\nimport fs from 'node:fs/promises';\nimport type { Core } from '@strapi/types';\n\nimport { mergeConfigWithUserConfig, resolveDevelopmentConfig } from './config';\n\nimport type { BuildContext } from '../create-build-context';\n\ninterface ViteWatcher {\n close(): Promise<void>;\n}\n\nconst watch = async (ctx: BuildContext): Promise<ViteWatcher> => {\n const finalConfig = await mergeConfigWithUserConfig(await resolveDevelopmentConfig(ctx), ctx);\n\n ctx.logger.debug('Vite config', finalConfig);\n\n // Imported dynamically so this file's CJS build resolves Vite's ESM Node API instead of\n // its CJS entry, which emits \"The CJS build of Vite's Node API is deprecated\".\n // https://vite.dev/guide/troubleshooting.html#vite-cjs-node-api-deprecated\n const { createServer } = await import('vite');\n\n const vite = await createServer(finalConfig);\n\n const viteMiddlewares: Core.MiddlewareHandler = (koaCtx, next) => {\n return new Promise((resolve, reject) => {\n const prefix = ctx.basePath.replace(ctx.adminPath, '').replace(/\\/+$/, '');\n\n const originalPath = koaCtx.path;\n if (!koaCtx.path.startsWith(prefix)) {\n koaCtx.path = `${prefix}${koaCtx.path}`;\n }\n\n // Set cache-control headers to prevent caching issues during development restarts\n koaCtx.set('Cache-Control', 'no-store, no-cache, must-revalidate, proxy-revalidate');\n koaCtx.set('Pragma', 'no-cache');\n koaCtx.set('Expires', '0');\n koaCtx.set('Surrogate-Control', 'no-store');\n\n vite.middlewares(koaCtx.req, koaCtx.res, (err: unknown) => {\n if (err) {\n reject(err);\n } else {\n if (!koaCtx.res.headersSent) {\n koaCtx.path = originalPath;\n }\n\n resolve(next());\n }\n });\n });\n };\n\n const serveAdmin: Core.MiddlewareHandler = async (koaCtx, next) => {\n await next();\n\n if (koaCtx.method !== 'HEAD' && koaCtx.method !== 'GET') {\n return;\n }\n\n if (koaCtx.body != null || koaCtx.status !== 404) {\n return;\n }\n\n const url = koaCtx.originalUrl;\n\n try {\n let template = await fs.readFile(\n path.relative(ctx.cwd, '.strapi/client/index.html'),\n 'utf-8'\n );\n template = await vite.transformIndexHtml(url, template);\n\n koaCtx.type = 'html';\n koaCtx.body = template;\n } catch (error) {\n ctx.logger.error('Failed to serve admin panel in development mode:', error);\n // Don't fallback to other handlers in development mode to prevent MIME type conflicts\n koaCtx.status = 500;\n koaCtx.body = 'Admin panel temporarily unavailable during server restart';\n }\n };\n\n const adminRoute = `${ctx.adminPath}/:path*`;\n\n // Remove any existing admin routes to prevent conflicts during restart\n const existingRoutes = ctx.strapi.server.router.stack.filter(\n (layer) => layer.path === adminRoute\n );\n existingRoutes.forEach((route) => {\n const index = ctx.strapi.server.router.stack.indexOf(route);\n if (index > -1) {\n ctx.strapi.server.router.stack.splice(index, 1);\n }\n });\n\n ctx.strapi.server.router.get(adminRoute, serveAdmin);\n ctx.strapi.server.router.use(adminRoute, viteMiddlewares);\n\n return {\n async close() {\n await vite.close();\n },\n };\n};\n\nexport { watch };\nexport type { ViteWatcher };\n"],"names":["watch","ctx","finalConfig","mergeConfigWithUserConfig","resolveDevelopmentConfig","logger","debug","createServer","vite","viteMiddlewares","koaCtx","next","Promise","resolve","reject","prefix","basePath","replace","adminPath","originalPath","path","startsWith","set","middlewares","req","res","err","headersSent","serveAdmin","method","body","status","url","originalUrl","template","fs","readFile","relative","cwd","transformIndexHtml","type","error","adminRoute","existingRoutes","strapi","server","router","stack","filter","layer","forEach","route","index","indexOf","splice","get","use","close"],"mappings":"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"}
@@ -5,6 +5,9 @@ import { mergeConfigWithUserConfig, resolveDevelopmentConfig } from './config.mj
5
5
  const watch = async (ctx)=>{
6
6
  const finalConfig = await mergeConfigWithUserConfig(await resolveDevelopmentConfig(ctx), ctx);
7
7
  ctx.logger.debug('Vite config', finalConfig);
8
+ // Imported dynamically so this file's CJS build resolves Vite's ESM Node API instead of
9
+ // its CJS entry, which emits "The CJS build of Vite's Node API is deprecated".
10
+ // https://vite.dev/guide/troubleshooting.html#vite-cjs-node-api-deprecated
8
11
  const { createServer } = await import('vite');
9
12
  const vite = await createServer(finalConfig);
10
13
  const viteMiddlewares = (koaCtx, next)=>{
@@ -1 +1 @@
1
- {"version":3,"file":"watch.mjs","sources":["../../../../src/node/vite/watch.ts"],"sourcesContent":["import path from 'node:path';\nimport fs from 'node:fs/promises';\nimport type { Core } from '@strapi/types';\n\nimport { mergeConfigWithUserConfig, resolveDevelopmentConfig } from './config';\n\nimport type { BuildContext } from '../create-build-context';\n\ninterface ViteWatcher {\n close(): Promise<void>;\n}\n\nconst watch = async (ctx: BuildContext): Promise<ViteWatcher> => {\n const finalConfig = await mergeConfigWithUserConfig(await resolveDevelopmentConfig(ctx), ctx);\n\n ctx.logger.debug('Vite config', finalConfig);\n\n const { createServer } = await import('vite');\n\n const vite = await createServer(finalConfig);\n\n const viteMiddlewares: Core.MiddlewareHandler = (koaCtx, next) => {\n return new Promise((resolve, reject) => {\n const prefix = ctx.basePath.replace(ctx.adminPath, '').replace(/\\/+$/, '');\n\n const originalPath = koaCtx.path;\n if (!koaCtx.path.startsWith(prefix)) {\n koaCtx.path = `${prefix}${koaCtx.path}`;\n }\n\n // Set cache-control headers to prevent caching issues during development restarts\n koaCtx.set('Cache-Control', 'no-store, no-cache, must-revalidate, proxy-revalidate');\n koaCtx.set('Pragma', 'no-cache');\n koaCtx.set('Expires', '0');\n koaCtx.set('Surrogate-Control', 'no-store');\n\n vite.middlewares(koaCtx.req, koaCtx.res, (err: unknown) => {\n if (err) {\n reject(err);\n } else {\n if (!koaCtx.res.headersSent) {\n koaCtx.path = originalPath;\n }\n\n resolve(next());\n }\n });\n });\n };\n\n const serveAdmin: Core.MiddlewareHandler = async (koaCtx, next) => {\n await next();\n\n if (koaCtx.method !== 'HEAD' && koaCtx.method !== 'GET') {\n return;\n }\n\n if (koaCtx.body != null || koaCtx.status !== 404) {\n return;\n }\n\n const url = koaCtx.originalUrl;\n\n try {\n let template = await fs.readFile(\n path.relative(ctx.cwd, '.strapi/client/index.html'),\n 'utf-8'\n );\n template = await vite.transformIndexHtml(url, template);\n\n koaCtx.type = 'html';\n koaCtx.body = template;\n } catch (error) {\n ctx.logger.error('Failed to serve admin panel in development mode:', error);\n // Don't fallback to other handlers in development mode to prevent MIME type conflicts\n koaCtx.status = 500;\n koaCtx.body = 'Admin panel temporarily unavailable during server restart';\n }\n };\n\n const adminRoute = `${ctx.adminPath}/:path*`;\n\n // Remove any existing admin routes to prevent conflicts during restart\n const existingRoutes = ctx.strapi.server.router.stack.filter(\n (layer) => layer.path === adminRoute\n );\n existingRoutes.forEach((route) => {\n const index = ctx.strapi.server.router.stack.indexOf(route);\n if (index > -1) {\n ctx.strapi.server.router.stack.splice(index, 1);\n }\n });\n\n ctx.strapi.server.router.get(adminRoute, serveAdmin);\n ctx.strapi.server.router.use(adminRoute, viteMiddlewares);\n\n return {\n async close() {\n await vite.close();\n },\n };\n};\n\nexport { watch };\nexport type { ViteWatcher };\n"],"names":["watch","ctx","finalConfig","mergeConfigWithUserConfig","resolveDevelopmentConfig","logger","debug","createServer","vite","viteMiddlewares","koaCtx","next","Promise","resolve","reject","prefix","basePath","replace","adminPath","originalPath","path","startsWith","set","middlewares","req","res","err","headersSent","serveAdmin","method","body","status","url","originalUrl","template","fs","readFile","relative","cwd","transformIndexHtml","type","error","adminRoute","existingRoutes","strapi","server","router","stack","filter","layer","forEach","route","index","indexOf","splice","get","use","close"],"mappings":"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"}
1
+ {"version":3,"file":"watch.mjs","sources":["../../../../src/node/vite/watch.ts"],"sourcesContent":["import path from 'node:path';\nimport fs from 'node:fs/promises';\nimport type { Core } from '@strapi/types';\n\nimport { mergeConfigWithUserConfig, resolveDevelopmentConfig } from './config';\n\nimport type { BuildContext } from '../create-build-context';\n\ninterface ViteWatcher {\n close(): Promise<void>;\n}\n\nconst watch = async (ctx: BuildContext): Promise<ViteWatcher> => {\n const finalConfig = await mergeConfigWithUserConfig(await resolveDevelopmentConfig(ctx), ctx);\n\n ctx.logger.debug('Vite config', finalConfig);\n\n // Imported dynamically so this file's CJS build resolves Vite's ESM Node API instead of\n // its CJS entry, which emits \"The CJS build of Vite's Node API is deprecated\".\n // https://vite.dev/guide/troubleshooting.html#vite-cjs-node-api-deprecated\n const { createServer } = await import('vite');\n\n const vite = await createServer(finalConfig);\n\n const viteMiddlewares: Core.MiddlewareHandler = (koaCtx, next) => {\n return new Promise((resolve, reject) => {\n const prefix = ctx.basePath.replace(ctx.adminPath, '').replace(/\\/+$/, '');\n\n const originalPath = koaCtx.path;\n if (!koaCtx.path.startsWith(prefix)) {\n koaCtx.path = `${prefix}${koaCtx.path}`;\n }\n\n // Set cache-control headers to prevent caching issues during development restarts\n koaCtx.set('Cache-Control', 'no-store, no-cache, must-revalidate, proxy-revalidate');\n koaCtx.set('Pragma', 'no-cache');\n koaCtx.set('Expires', '0');\n koaCtx.set('Surrogate-Control', 'no-store');\n\n vite.middlewares(koaCtx.req, koaCtx.res, (err: unknown) => {\n if (err) {\n reject(err);\n } else {\n if (!koaCtx.res.headersSent) {\n koaCtx.path = originalPath;\n }\n\n resolve(next());\n }\n });\n });\n };\n\n const serveAdmin: Core.MiddlewareHandler = async (koaCtx, next) => {\n await next();\n\n if (koaCtx.method !== 'HEAD' && koaCtx.method !== 'GET') {\n return;\n }\n\n if (koaCtx.body != null || koaCtx.status !== 404) {\n return;\n }\n\n const url = koaCtx.originalUrl;\n\n try {\n let template = await fs.readFile(\n path.relative(ctx.cwd, '.strapi/client/index.html'),\n 'utf-8'\n );\n template = await vite.transformIndexHtml(url, template);\n\n koaCtx.type = 'html';\n koaCtx.body = template;\n } catch (error) {\n ctx.logger.error('Failed to serve admin panel in development mode:', error);\n // Don't fallback to other handlers in development mode to prevent MIME type conflicts\n koaCtx.status = 500;\n koaCtx.body = 'Admin panel temporarily unavailable during server restart';\n }\n };\n\n const adminRoute = `${ctx.adminPath}/:path*`;\n\n // Remove any existing admin routes to prevent conflicts during restart\n const existingRoutes = ctx.strapi.server.router.stack.filter(\n (layer) => layer.path === adminRoute\n );\n existingRoutes.forEach((route) => {\n const index = ctx.strapi.server.router.stack.indexOf(route);\n if (index > -1) {\n ctx.strapi.server.router.stack.splice(index, 1);\n }\n });\n\n ctx.strapi.server.router.get(adminRoute, serveAdmin);\n ctx.strapi.server.router.use(adminRoute, viteMiddlewares);\n\n return {\n async close() {\n await vite.close();\n },\n };\n};\n\nexport { watch };\nexport type { ViteWatcher };\n"],"names":["watch","ctx","finalConfig","mergeConfigWithUserConfig","resolveDevelopmentConfig","logger","debug","createServer","vite","viteMiddlewares","koaCtx","next","Promise","resolve","reject","prefix","basePath","replace","adminPath","originalPath","path","startsWith","set","middlewares","req","res","err","headersSent","serveAdmin","method","body","status","url","originalUrl","template","fs","readFile","relative","cwd","transformIndexHtml","type","error","adminRoute","existingRoutes","strapi","server","router","stack","filter","layer","forEach","route","index","indexOf","splice","get","use","close"],"mappings":"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"}
@@ -14,6 +14,7 @@ var config = require('../core/config.js');
14
14
  var linkedPackages = require('../core/linked-packages.js');
15
15
  var aliases = require('../core/aliases.js');
16
16
  var resolveModule = require('../core/resolve-module.js');
17
+ var adminViteAliases = require('../core/admin-vite-aliases.js');
17
18
 
18
19
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
19
20
 
@@ -44,6 +45,10 @@ const resolveBaseConfig = async (ctx)=>{
44
45
  'react-router-dom': resolveModule.getModulePath('react-router-dom'),
45
46
  // Force single instance so plugin custom field chunks inherit root DesignSystemProvider context
46
47
  '@strapi/design-system': resolveModule.getModulePath('@strapi/design-system'),
48
+ // Force a single CodeMirror instance (resolved from design-system's closure) so the JSON
49
+ // custom field does not crash on cross-copy instanceof checks. Tolerant: unresolvable
50
+ // optional/transitive CodeMirror packages are skipped
51
+ ...Object.fromEntries(adminViteAliases.buildSingletonAliasEntries()),
47
52
  '@radix-ui/react-tooltip': resolveModule.getModulePath('@radix-ui/react-tooltip')
48
53
  },
49
54
  extensions: [
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sources":["../../../../src/node/webpack/config.ts"],"sourcesContent":["import ReactRefreshWebpackPlugin from '@pmmmwh/react-refresh-webpack-plugin';\nimport { EsbuildPlugin } from 'esbuild-loader';\nimport ForkTsCheckerPlugin from 'fork-ts-checker-webpack-plugin';\nimport HtmlWebpackPlugin from 'html-webpack-plugin';\nimport MiniCssExtractPlugin from 'mini-css-extract-plugin';\nimport crypto from 'node:crypto';\nimport path from 'node:path';\nimport { Configuration, DefinePlugin, HotModuleReplacementPlugin } from 'webpack';\nimport { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer';\n\nimport { loadStrapiMonorepo } from '../core/monorepo';\nimport type { BuildContext } from '../create-build-context';\nimport { getUserConfig } from '../core/config';\nimport { getLinkedDesignSystemPath } from '../core/linked-packages';\nimport { getMonorepoAliases } from '../core/aliases';\nimport { getModulePath } from '../core/resolve-module';\n\nconst resolveBaseConfig = async (ctx: BuildContext) => {\n const { default: browserslistToEsbuild } = await import('browserslist-to-esbuild');\n const target = browserslistToEsbuild(ctx.target);\n\n return {\n experiments: {\n topLevelAwait: true,\n },\n entry: {\n main: [`./${ctx.entry}`],\n },\n resolve: {\n alias: {\n react: getModulePath('react'),\n 'react-dom': getModulePath('react-dom'),\n 'styled-components': getModulePath('styled-components'),\n 'react-router-dom': getModulePath('react-router-dom'),\n // Force single instance so plugin custom field chunks inherit root DesignSystemProvider context\n '@strapi/design-system': getModulePath('@strapi/design-system'),\n '@radix-ui/react-tooltip': getModulePath('@radix-ui/react-tooltip'),\n },\n extensions: ['.js', '.jsx', '.react.js', '.ts', '.tsx'],\n },\n module: {\n rules: [\n {\n test: /\\.(ts|tsx)$/,\n loader: require.resolve('esbuild-loader'),\n options: {\n loader: 'tsx',\n target,\n jsx: 'automatic',\n },\n },\n {\n test: /\\.(js|jsx|mjs)$/,\n use: {\n loader: require.resolve('esbuild-loader'),\n options: {\n loader: 'jsx',\n target,\n jsx: 'automatic',\n },\n },\n },\n {\n test: /\\.m?js/,\n resolve: {\n fullySpecified: false,\n },\n },\n {\n test: /\\.css$/i,\n use: [require.resolve('style-loader'), require.resolve('css-loader')],\n },\n {\n test: /\\.(svg|eot|otf|ttf|woff|woff2)$/,\n type: 'asset/resource',\n },\n {\n test: [/\\.bmp$/, /\\.gif$/, /\\.jpe?g$/, /\\.png$/, /\\.ico$/],\n type: 'asset',\n parser: {\n dataUrlCondition: {\n maxSize: 1000,\n },\n },\n },\n {\n test: /\\.(mp4|webm)$/,\n type: 'asset',\n parser: {\n dataUrlCondition: {\n maxSize: 10000,\n },\n },\n },\n ],\n },\n plugins: [\n new HtmlWebpackPlugin({\n inject: true,\n template: path.resolve(ctx.runtimeDir, 'index.html'),\n }),\n new DefinePlugin(\n Object.entries(ctx.env).reduce<Record<string, string>>((acc, [key, value]) => {\n acc[`process.env.${key}`] = JSON.stringify(value);\n return acc;\n }, {})\n ),\n ctx.tsconfig &&\n new ForkTsCheckerPlugin({\n typescript: {\n configFile: ctx.tsconfig.path,\n configOverwrite: {\n compilerOptions: {\n sourceMap: ctx.options.sourcemaps,\n },\n },\n },\n }),\n ].filter(Boolean),\n };\n};\n\nconst resolveDevelopmentConfig = async (ctx: BuildContext): Promise<Configuration> => {\n const baseConfig = await resolveBaseConfig(ctx);\n const monorepo = await loadStrapiMonorepo(ctx.cwd);\n const linkedDesignSystemPath = getLinkedDesignSystemPath();\n\n return {\n ...baseConfig,\n cache: {\n type: 'filesystem',\n // version cache when there are changes to aliases\n buildDependencies: {\n config: [__filename],\n // When design-system is linked, invalidate cache when it changes\n ...(linkedDesignSystemPath && {\n designSystem: [path.join(linkedDesignSystemPath, 'dist')],\n }),\n },\n version: crypto\n .createHash('md5')\n .update(Object.entries(baseConfig.resolve.alias ?? {}).join())\n .digest('hex'),\n },\n resolve: {\n ...baseConfig.resolve,\n alias: {\n ...baseConfig.resolve.alias,\n ...getMonorepoAliases({ monorepo }),\n },\n },\n entry: {\n ...baseConfig.entry,\n main: [\n `${require.resolve('webpack-hot-middleware/client')}?path=/__webpack_hmr`,\n ...baseConfig.entry.main,\n ],\n },\n stats: 'errors-warnings',\n mode: 'development',\n devtool: 'inline-source-map',\n output: {\n filename: '[name].js',\n path: ctx.distPath,\n publicPath: `${ctx.basePath.replace(/\\/$/, '')}/`,\n },\n infrastructureLogging: {\n level: 'error',\n },\n plugins: [\n ...baseConfig.plugins,\n new HotModuleReplacementPlugin(),\n new ReactRefreshWebpackPlugin(),\n ],\n };\n};\n\nconst resolveProductionConfig = async (ctx: BuildContext): Promise<Configuration> => {\n const { default: browserslistToEsbuild } = await import('browserslist-to-esbuild');\n const target = browserslistToEsbuild(ctx.target);\n\n const baseConfig = await resolveBaseConfig(ctx);\n\n return {\n ...baseConfig,\n stats: 'errors-only',\n mode: 'production',\n bail: true,\n devtool: ctx.options.sourcemaps ? 'source-map' : false,\n output: {\n path: ctx.distPath,\n publicPath: `${ctx.basePath.replace(/\\/$/, '')}/`,\n // Utilize long-term caching by adding content hashes (not compilation hashes)\n // to compiled assets for production\n filename: '[name].[contenthash:8].js',\n chunkFilename: '[name].[contenthash:8].chunk.js',\n },\n optimization: {\n minimize: ctx.options.minify,\n minimizer: [\n new EsbuildPlugin({\n target,\n css: true, // Apply minification to CSS assets\n }),\n ],\n moduleIds: 'deterministic',\n runtimeChunk: true,\n },\n plugins: [\n ...baseConfig.plugins,\n new MiniCssExtractPlugin({\n filename: '[name].[chunkhash].css',\n chunkFilename: '[name].[chunkhash].chunkhash.css',\n ignoreOrder: true,\n }),\n ctx.options.stats && new BundleAnalyzerPlugin(),\n ].filter(Boolean),\n };\n};\n\nconst USER_CONFIGS = ['webpack.config.js', 'webpack.config.mjs', 'webpack.config.ts'];\n\ntype UserWebpackConfig = (config: Configuration, webpack: unknown) => Configuration;\n\nconst mergeConfigWithUserConfig = async (config: Configuration, ctx: BuildContext) => {\n const userConfig = await getUserConfig<UserWebpackConfig>(USER_CONFIGS, ctx);\n\n if (userConfig) {\n if (typeof userConfig === 'function') {\n const webpack = await import('webpack');\n return userConfig(config, webpack);\n }\n\n ctx.logger.warn(\n `You've exported something other than a function from ${path.join(\n ctx.appDir,\n 'src',\n 'admin',\n 'webpack.config'\n )}, this will ignored.`\n );\n }\n\n return config;\n};\n\nexport { mergeConfigWithUserConfig, resolveDevelopmentConfig, resolveProductionConfig };\n"],"names":["resolveBaseConfig","ctx","default","browserslistToEsbuild","target","experiments","topLevelAwait","entry","main","resolve","alias","react","getModulePath","extensions","module","rules","test","loader","require","options","jsx","use","fullySpecified","type","parser","dataUrlCondition","maxSize","plugins","HtmlWebpackPlugin","inject","template","path","runtimeDir","DefinePlugin","Object","entries","env","reduce","acc","key","value","JSON","stringify","tsconfig","ForkTsCheckerPlugin","typescript","configFile","configOverwrite","compilerOptions","sourceMap","sourcemaps","filter","Boolean","resolveDevelopmentConfig","baseConfig","monorepo","loadStrapiMonorepo","cwd","linkedDesignSystemPath","getLinkedDesignSystemPath","cache","buildDependencies","config","__filename","designSystem","join","version","crypto","createHash","update","digest","getMonorepoAliases","stats","mode","devtool","output","filename","distPath","publicPath","basePath","replace","infrastructureLogging","level","HotModuleReplacementPlugin","ReactRefreshWebpackPlugin","resolveProductionConfig","bail","chunkFilename","optimization","minimize","minify","minimizer","EsbuildPlugin","css","moduleIds","runtimeChunk","MiniCssExtractPlugin","ignoreOrder","BundleAnalyzerPlugin","USER_CONFIGS","mergeConfigWithUserConfig","userConfig","getUserConfig","webpack","logger","warn","appDir"],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sources":["../../../../src/node/webpack/config.ts"],"sourcesContent":["import ReactRefreshWebpackPlugin from '@pmmmwh/react-refresh-webpack-plugin';\nimport { EsbuildPlugin } from 'esbuild-loader';\nimport ForkTsCheckerPlugin from 'fork-ts-checker-webpack-plugin';\nimport HtmlWebpackPlugin from 'html-webpack-plugin';\nimport MiniCssExtractPlugin from 'mini-css-extract-plugin';\nimport crypto from 'node:crypto';\nimport path from 'node:path';\nimport { Configuration, DefinePlugin, HotModuleReplacementPlugin } from 'webpack';\nimport { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer';\n\nimport { loadStrapiMonorepo } from '../core/monorepo';\nimport type { BuildContext } from '../create-build-context';\nimport { getUserConfig } from '../core/config';\nimport { getLinkedDesignSystemPath } from '../core/linked-packages';\nimport { getMonorepoAliases } from '../core/aliases';\nimport { getModulePath } from '../core/resolve-module';\nimport { buildSingletonAliasEntries } from '../core/admin-vite-aliases';\n\nconst resolveBaseConfig = async (ctx: BuildContext) => {\n const { default: browserslistToEsbuild } = await import('browserslist-to-esbuild');\n const target = browserslistToEsbuild(ctx.target);\n\n return {\n experiments: {\n topLevelAwait: true,\n },\n entry: {\n main: [`./${ctx.entry}`],\n },\n resolve: {\n alias: {\n react: getModulePath('react'),\n 'react-dom': getModulePath('react-dom'),\n 'styled-components': getModulePath('styled-components'),\n 'react-router-dom': getModulePath('react-router-dom'),\n // Force single instance so plugin custom field chunks inherit root DesignSystemProvider context\n '@strapi/design-system': getModulePath('@strapi/design-system'),\n // Force a single CodeMirror instance (resolved from design-system's closure) so the JSON\n // custom field does not crash on cross-copy instanceof checks. Tolerant: unresolvable\n // optional/transitive CodeMirror packages are skipped\n ...Object.fromEntries(buildSingletonAliasEntries()),\n '@radix-ui/react-tooltip': getModulePath('@radix-ui/react-tooltip'),\n },\n extensions: ['.js', '.jsx', '.react.js', '.ts', '.tsx'],\n },\n module: {\n rules: [\n {\n test: /\\.(ts|tsx)$/,\n loader: require.resolve('esbuild-loader'),\n options: {\n loader: 'tsx',\n target,\n jsx: 'automatic',\n },\n },\n {\n test: /\\.(js|jsx|mjs)$/,\n use: {\n loader: require.resolve('esbuild-loader'),\n options: {\n loader: 'jsx',\n target,\n jsx: 'automatic',\n },\n },\n },\n {\n test: /\\.m?js/,\n resolve: {\n fullySpecified: false,\n },\n },\n {\n test: /\\.css$/i,\n use: [require.resolve('style-loader'), require.resolve('css-loader')],\n },\n {\n test: /\\.(svg|eot|otf|ttf|woff|woff2)$/,\n type: 'asset/resource',\n },\n {\n test: [/\\.bmp$/, /\\.gif$/, /\\.jpe?g$/, /\\.png$/, /\\.ico$/],\n type: 'asset',\n parser: {\n dataUrlCondition: {\n maxSize: 1000,\n },\n },\n },\n {\n test: /\\.(mp4|webm)$/,\n type: 'asset',\n parser: {\n dataUrlCondition: {\n maxSize: 10000,\n },\n },\n },\n ],\n },\n plugins: [\n new HtmlWebpackPlugin({\n inject: true,\n template: path.resolve(ctx.runtimeDir, 'index.html'),\n }),\n new DefinePlugin(\n Object.entries(ctx.env).reduce<Record<string, string>>((acc, [key, value]) => {\n acc[`process.env.${key}`] = JSON.stringify(value);\n return acc;\n }, {})\n ),\n ctx.tsconfig &&\n new ForkTsCheckerPlugin({\n typescript: {\n configFile: ctx.tsconfig.path,\n configOverwrite: {\n compilerOptions: {\n sourceMap: ctx.options.sourcemaps,\n },\n },\n },\n }),\n ].filter(Boolean),\n };\n};\n\nconst resolveDevelopmentConfig = async (ctx: BuildContext): Promise<Configuration> => {\n const baseConfig = await resolveBaseConfig(ctx);\n const monorepo = await loadStrapiMonorepo(ctx.cwd);\n const linkedDesignSystemPath = getLinkedDesignSystemPath();\n\n return {\n ...baseConfig,\n cache: {\n type: 'filesystem',\n // version cache when there are changes to aliases\n buildDependencies: {\n config: [__filename],\n // When design-system is linked, invalidate cache when it changes\n ...(linkedDesignSystemPath && {\n designSystem: [path.join(linkedDesignSystemPath, 'dist')],\n }),\n },\n version: crypto\n .createHash('md5')\n .update(Object.entries(baseConfig.resolve.alias ?? {}).join())\n .digest('hex'),\n },\n resolve: {\n ...baseConfig.resolve,\n alias: {\n ...baseConfig.resolve.alias,\n ...getMonorepoAliases({ monorepo }),\n },\n },\n entry: {\n ...baseConfig.entry,\n main: [\n `${require.resolve('webpack-hot-middleware/client')}?path=/__webpack_hmr`,\n ...baseConfig.entry.main,\n ],\n },\n stats: 'errors-warnings',\n mode: 'development',\n devtool: 'inline-source-map',\n output: {\n filename: '[name].js',\n path: ctx.distPath,\n publicPath: `${ctx.basePath.replace(/\\/$/, '')}/`,\n },\n infrastructureLogging: {\n level: 'error',\n },\n plugins: [\n ...baseConfig.plugins,\n new HotModuleReplacementPlugin(),\n new ReactRefreshWebpackPlugin(),\n ],\n };\n};\n\nconst resolveProductionConfig = async (ctx: BuildContext): Promise<Configuration> => {\n const { default: browserslistToEsbuild } = await import('browserslist-to-esbuild');\n const target = browserslistToEsbuild(ctx.target);\n\n const baseConfig = await resolveBaseConfig(ctx);\n\n return {\n ...baseConfig,\n stats: 'errors-only',\n mode: 'production',\n bail: true,\n devtool: ctx.options.sourcemaps ? 'source-map' : false,\n output: {\n path: ctx.distPath,\n publicPath: `${ctx.basePath.replace(/\\/$/, '')}/`,\n // Utilize long-term caching by adding content hashes (not compilation hashes)\n // to compiled assets for production\n filename: '[name].[contenthash:8].js',\n chunkFilename: '[name].[contenthash:8].chunk.js',\n },\n optimization: {\n minimize: ctx.options.minify,\n minimizer: [\n new EsbuildPlugin({\n target,\n css: true, // Apply minification to CSS assets\n }),\n ],\n moduleIds: 'deterministic',\n runtimeChunk: true,\n },\n plugins: [\n ...baseConfig.plugins,\n new MiniCssExtractPlugin({\n filename: '[name].[chunkhash].css',\n chunkFilename: '[name].[chunkhash].chunkhash.css',\n ignoreOrder: true,\n }),\n ctx.options.stats && new BundleAnalyzerPlugin(),\n ].filter(Boolean),\n };\n};\n\nconst USER_CONFIGS = ['webpack.config.js', 'webpack.config.mjs', 'webpack.config.ts'];\n\ntype UserWebpackConfig = (config: Configuration, webpack: unknown) => Configuration;\n\nconst mergeConfigWithUserConfig = async (config: Configuration, ctx: BuildContext) => {\n const userConfig = await getUserConfig<UserWebpackConfig>(USER_CONFIGS, ctx);\n\n if (userConfig) {\n if (typeof userConfig === 'function') {\n const webpack = await import('webpack');\n return userConfig(config, webpack);\n }\n\n ctx.logger.warn(\n `You've exported something other than a function from ${path.join(\n ctx.appDir,\n 'src',\n 'admin',\n 'webpack.config'\n )}, this will ignored.`\n );\n }\n\n return config;\n};\n\nexport { mergeConfigWithUserConfig, resolveDevelopmentConfig, resolveProductionConfig };\n"],"names":["resolveBaseConfig","ctx","default","browserslistToEsbuild","target","experiments","topLevelAwait","entry","main","resolve","alias","react","getModulePath","Object","fromEntries","buildSingletonAliasEntries","extensions","module","rules","test","loader","require","options","jsx","use","fullySpecified","type","parser","dataUrlCondition","maxSize","plugins","HtmlWebpackPlugin","inject","template","path","runtimeDir","DefinePlugin","entries","env","reduce","acc","key","value","JSON","stringify","tsconfig","ForkTsCheckerPlugin","typescript","configFile","configOverwrite","compilerOptions","sourceMap","sourcemaps","filter","Boolean","resolveDevelopmentConfig","baseConfig","monorepo","loadStrapiMonorepo","cwd","linkedDesignSystemPath","getLinkedDesignSystemPath","cache","buildDependencies","config","__filename","designSystem","join","version","crypto","createHash","update","digest","getMonorepoAliases","stats","mode","devtool","output","filename","distPath","publicPath","basePath","replace","infrastructureLogging","level","HotModuleReplacementPlugin","ReactRefreshWebpackPlugin","resolveProductionConfig","bail","chunkFilename","optimization","minimize","minify","minimizer","EsbuildPlugin","css","moduleIds","runtimeChunk","MiniCssExtractPlugin","ignoreOrder","BundleAnalyzerPlugin","USER_CONFIGS","mergeConfigWithUserConfig","userConfig","getUserConfig","webpack","logger","warn","appDir"],"mappings":"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"}
@@ -12,6 +12,7 @@ import { getUserConfig } from '../core/config.mjs';
12
12
  import { getLinkedDesignSystemPath } from '../core/linked-packages.mjs';
13
13
  import { getMonorepoAliases } from '../core/aliases.mjs';
14
14
  import { getModulePath } from '../core/resolve-module.mjs';
15
+ import { buildSingletonAliasEntries } from '../core/admin-vite-aliases.mjs';
15
16
 
16
17
  const resolveBaseConfig = async (ctx)=>{
17
18
  const { default: browserslistToEsbuild } = await import('browserslist-to-esbuild');
@@ -33,6 +34,10 @@ const resolveBaseConfig = async (ctx)=>{
33
34
  'react-router-dom': getModulePath('react-router-dom'),
34
35
  // Force single instance so plugin custom field chunks inherit root DesignSystemProvider context
35
36
  '@strapi/design-system': getModulePath('@strapi/design-system'),
37
+ // Force a single CodeMirror instance (resolved from design-system's closure) so the JSON
38
+ // custom field does not crash on cross-copy instanceof checks. Tolerant: unresolvable
39
+ // optional/transitive CodeMirror packages are skipped
40
+ ...Object.fromEntries(buildSingletonAliasEntries()),
36
41
  '@radix-ui/react-tooltip': getModulePath('@radix-ui/react-tooltip')
37
42
  },
38
43
  extensions: [
@@ -1 +1 @@
1
- {"version":3,"file":"config.mjs","sources":["../../../../src/node/webpack/config.ts"],"sourcesContent":["import ReactRefreshWebpackPlugin from '@pmmmwh/react-refresh-webpack-plugin';\nimport { EsbuildPlugin } from 'esbuild-loader';\nimport ForkTsCheckerPlugin from 'fork-ts-checker-webpack-plugin';\nimport HtmlWebpackPlugin from 'html-webpack-plugin';\nimport MiniCssExtractPlugin from 'mini-css-extract-plugin';\nimport crypto from 'node:crypto';\nimport path from 'node:path';\nimport { Configuration, DefinePlugin, HotModuleReplacementPlugin } from 'webpack';\nimport { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer';\n\nimport { loadStrapiMonorepo } from '../core/monorepo';\nimport type { BuildContext } from '../create-build-context';\nimport { getUserConfig } from '../core/config';\nimport { getLinkedDesignSystemPath } from '../core/linked-packages';\nimport { getMonorepoAliases } from '../core/aliases';\nimport { getModulePath } from '../core/resolve-module';\n\nconst resolveBaseConfig = async (ctx: BuildContext) => {\n const { default: browserslistToEsbuild } = await import('browserslist-to-esbuild');\n const target = browserslistToEsbuild(ctx.target);\n\n return {\n experiments: {\n topLevelAwait: true,\n },\n entry: {\n main: [`./${ctx.entry}`],\n },\n resolve: {\n alias: {\n react: getModulePath('react'),\n 'react-dom': getModulePath('react-dom'),\n 'styled-components': getModulePath('styled-components'),\n 'react-router-dom': getModulePath('react-router-dom'),\n // Force single instance so plugin custom field chunks inherit root DesignSystemProvider context\n '@strapi/design-system': getModulePath('@strapi/design-system'),\n '@radix-ui/react-tooltip': getModulePath('@radix-ui/react-tooltip'),\n },\n extensions: ['.js', '.jsx', '.react.js', '.ts', '.tsx'],\n },\n module: {\n rules: [\n {\n test: /\\.(ts|tsx)$/,\n loader: require.resolve('esbuild-loader'),\n options: {\n loader: 'tsx',\n target,\n jsx: 'automatic',\n },\n },\n {\n test: /\\.(js|jsx|mjs)$/,\n use: {\n loader: require.resolve('esbuild-loader'),\n options: {\n loader: 'jsx',\n target,\n jsx: 'automatic',\n },\n },\n },\n {\n test: /\\.m?js/,\n resolve: {\n fullySpecified: false,\n },\n },\n {\n test: /\\.css$/i,\n use: [require.resolve('style-loader'), require.resolve('css-loader')],\n },\n {\n test: /\\.(svg|eot|otf|ttf|woff|woff2)$/,\n type: 'asset/resource',\n },\n {\n test: [/\\.bmp$/, /\\.gif$/, /\\.jpe?g$/, /\\.png$/, /\\.ico$/],\n type: 'asset',\n parser: {\n dataUrlCondition: {\n maxSize: 1000,\n },\n },\n },\n {\n test: /\\.(mp4|webm)$/,\n type: 'asset',\n parser: {\n dataUrlCondition: {\n maxSize: 10000,\n },\n },\n },\n ],\n },\n plugins: [\n new HtmlWebpackPlugin({\n inject: true,\n template: path.resolve(ctx.runtimeDir, 'index.html'),\n }),\n new DefinePlugin(\n Object.entries(ctx.env).reduce<Record<string, string>>((acc, [key, value]) => {\n acc[`process.env.${key}`] = JSON.stringify(value);\n return acc;\n }, {})\n ),\n ctx.tsconfig &&\n new ForkTsCheckerPlugin({\n typescript: {\n configFile: ctx.tsconfig.path,\n configOverwrite: {\n compilerOptions: {\n sourceMap: ctx.options.sourcemaps,\n },\n },\n },\n }),\n ].filter(Boolean),\n };\n};\n\nconst resolveDevelopmentConfig = async (ctx: BuildContext): Promise<Configuration> => {\n const baseConfig = await resolveBaseConfig(ctx);\n const monorepo = await loadStrapiMonorepo(ctx.cwd);\n const linkedDesignSystemPath = getLinkedDesignSystemPath();\n\n return {\n ...baseConfig,\n cache: {\n type: 'filesystem',\n // version cache when there are changes to aliases\n buildDependencies: {\n config: [__filename],\n // When design-system is linked, invalidate cache when it changes\n ...(linkedDesignSystemPath && {\n designSystem: [path.join(linkedDesignSystemPath, 'dist')],\n }),\n },\n version: crypto\n .createHash('md5')\n .update(Object.entries(baseConfig.resolve.alias ?? {}).join())\n .digest('hex'),\n },\n resolve: {\n ...baseConfig.resolve,\n alias: {\n ...baseConfig.resolve.alias,\n ...getMonorepoAliases({ monorepo }),\n },\n },\n entry: {\n ...baseConfig.entry,\n main: [\n `${require.resolve('webpack-hot-middleware/client')}?path=/__webpack_hmr`,\n ...baseConfig.entry.main,\n ],\n },\n stats: 'errors-warnings',\n mode: 'development',\n devtool: 'inline-source-map',\n output: {\n filename: '[name].js',\n path: ctx.distPath,\n publicPath: `${ctx.basePath.replace(/\\/$/, '')}/`,\n },\n infrastructureLogging: {\n level: 'error',\n },\n plugins: [\n ...baseConfig.plugins,\n new HotModuleReplacementPlugin(),\n new ReactRefreshWebpackPlugin(),\n ],\n };\n};\n\nconst resolveProductionConfig = async (ctx: BuildContext): Promise<Configuration> => {\n const { default: browserslistToEsbuild } = await import('browserslist-to-esbuild');\n const target = browserslistToEsbuild(ctx.target);\n\n const baseConfig = await resolveBaseConfig(ctx);\n\n return {\n ...baseConfig,\n stats: 'errors-only',\n mode: 'production',\n bail: true,\n devtool: ctx.options.sourcemaps ? 'source-map' : false,\n output: {\n path: ctx.distPath,\n publicPath: `${ctx.basePath.replace(/\\/$/, '')}/`,\n // Utilize long-term caching by adding content hashes (not compilation hashes)\n // to compiled assets for production\n filename: '[name].[contenthash:8].js',\n chunkFilename: '[name].[contenthash:8].chunk.js',\n },\n optimization: {\n minimize: ctx.options.minify,\n minimizer: [\n new EsbuildPlugin({\n target,\n css: true, // Apply minification to CSS assets\n }),\n ],\n moduleIds: 'deterministic',\n runtimeChunk: true,\n },\n plugins: [\n ...baseConfig.plugins,\n new MiniCssExtractPlugin({\n filename: '[name].[chunkhash].css',\n chunkFilename: '[name].[chunkhash].chunkhash.css',\n ignoreOrder: true,\n }),\n ctx.options.stats && new BundleAnalyzerPlugin(),\n ].filter(Boolean),\n };\n};\n\nconst USER_CONFIGS = ['webpack.config.js', 'webpack.config.mjs', 'webpack.config.ts'];\n\ntype UserWebpackConfig = (config: Configuration, webpack: unknown) => Configuration;\n\nconst mergeConfigWithUserConfig = async (config: Configuration, ctx: BuildContext) => {\n const userConfig = await getUserConfig<UserWebpackConfig>(USER_CONFIGS, ctx);\n\n if (userConfig) {\n if (typeof userConfig === 'function') {\n const webpack = await import('webpack');\n return userConfig(config, webpack);\n }\n\n ctx.logger.warn(\n `You've exported something other than a function from ${path.join(\n ctx.appDir,\n 'src',\n 'admin',\n 'webpack.config'\n )}, this will ignored.`\n );\n }\n\n return config;\n};\n\nexport { mergeConfigWithUserConfig, resolveDevelopmentConfig, resolveProductionConfig };\n"],"names":["resolveBaseConfig","ctx","default","browserslistToEsbuild","target","experiments","topLevelAwait","entry","main","resolve","alias","react","getModulePath","extensions","module","rules","test","loader","require","options","jsx","use","fullySpecified","type","parser","dataUrlCondition","maxSize","plugins","HtmlWebpackPlugin","inject","template","path","runtimeDir","DefinePlugin","Object","entries","env","reduce","acc","key","value","JSON","stringify","tsconfig","ForkTsCheckerPlugin","typescript","configFile","configOverwrite","compilerOptions","sourceMap","sourcemaps","filter","Boolean","resolveDevelopmentConfig","baseConfig","monorepo","loadStrapiMonorepo","cwd","linkedDesignSystemPath","getLinkedDesignSystemPath","cache","buildDependencies","config","__filename","designSystem","join","version","crypto","createHash","update","digest","getMonorepoAliases","stats","mode","devtool","output","filename","distPath","publicPath","basePath","replace","infrastructureLogging","level","HotModuleReplacementPlugin","ReactRefreshWebpackPlugin","resolveProductionConfig","bail","chunkFilename","optimization","minimize","minify","minimizer","EsbuildPlugin","css","moduleIds","runtimeChunk","MiniCssExtractPlugin","ignoreOrder","BundleAnalyzerPlugin","USER_CONFIGS","mergeConfigWithUserConfig","userConfig","getUserConfig","webpack","logger","warn","appDir"],"mappings":"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"}
1
+ {"version":3,"file":"config.mjs","sources":["../../../../src/node/webpack/config.ts"],"sourcesContent":["import ReactRefreshWebpackPlugin from '@pmmmwh/react-refresh-webpack-plugin';\nimport { EsbuildPlugin } from 'esbuild-loader';\nimport ForkTsCheckerPlugin from 'fork-ts-checker-webpack-plugin';\nimport HtmlWebpackPlugin from 'html-webpack-plugin';\nimport MiniCssExtractPlugin from 'mini-css-extract-plugin';\nimport crypto from 'node:crypto';\nimport path from 'node:path';\nimport { Configuration, DefinePlugin, HotModuleReplacementPlugin } from 'webpack';\nimport { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer';\n\nimport { loadStrapiMonorepo } from '../core/monorepo';\nimport type { BuildContext } from '../create-build-context';\nimport { getUserConfig } from '../core/config';\nimport { getLinkedDesignSystemPath } from '../core/linked-packages';\nimport { getMonorepoAliases } from '../core/aliases';\nimport { getModulePath } from '../core/resolve-module';\nimport { buildSingletonAliasEntries } from '../core/admin-vite-aliases';\n\nconst resolveBaseConfig = async (ctx: BuildContext) => {\n const { default: browserslistToEsbuild } = await import('browserslist-to-esbuild');\n const target = browserslistToEsbuild(ctx.target);\n\n return {\n experiments: {\n topLevelAwait: true,\n },\n entry: {\n main: [`./${ctx.entry}`],\n },\n resolve: {\n alias: {\n react: getModulePath('react'),\n 'react-dom': getModulePath('react-dom'),\n 'styled-components': getModulePath('styled-components'),\n 'react-router-dom': getModulePath('react-router-dom'),\n // Force single instance so plugin custom field chunks inherit root DesignSystemProvider context\n '@strapi/design-system': getModulePath('@strapi/design-system'),\n // Force a single CodeMirror instance (resolved from design-system's closure) so the JSON\n // custom field does not crash on cross-copy instanceof checks. Tolerant: unresolvable\n // optional/transitive CodeMirror packages are skipped\n ...Object.fromEntries(buildSingletonAliasEntries()),\n '@radix-ui/react-tooltip': getModulePath('@radix-ui/react-tooltip'),\n },\n extensions: ['.js', '.jsx', '.react.js', '.ts', '.tsx'],\n },\n module: {\n rules: [\n {\n test: /\\.(ts|tsx)$/,\n loader: require.resolve('esbuild-loader'),\n options: {\n loader: 'tsx',\n target,\n jsx: 'automatic',\n },\n },\n {\n test: /\\.(js|jsx|mjs)$/,\n use: {\n loader: require.resolve('esbuild-loader'),\n options: {\n loader: 'jsx',\n target,\n jsx: 'automatic',\n },\n },\n },\n {\n test: /\\.m?js/,\n resolve: {\n fullySpecified: false,\n },\n },\n {\n test: /\\.css$/i,\n use: [require.resolve('style-loader'), require.resolve('css-loader')],\n },\n {\n test: /\\.(svg|eot|otf|ttf|woff|woff2)$/,\n type: 'asset/resource',\n },\n {\n test: [/\\.bmp$/, /\\.gif$/, /\\.jpe?g$/, /\\.png$/, /\\.ico$/],\n type: 'asset',\n parser: {\n dataUrlCondition: {\n maxSize: 1000,\n },\n },\n },\n {\n test: /\\.(mp4|webm)$/,\n type: 'asset',\n parser: {\n dataUrlCondition: {\n maxSize: 10000,\n },\n },\n },\n ],\n },\n plugins: [\n new HtmlWebpackPlugin({\n inject: true,\n template: path.resolve(ctx.runtimeDir, 'index.html'),\n }),\n new DefinePlugin(\n Object.entries(ctx.env).reduce<Record<string, string>>((acc, [key, value]) => {\n acc[`process.env.${key}`] = JSON.stringify(value);\n return acc;\n }, {})\n ),\n ctx.tsconfig &&\n new ForkTsCheckerPlugin({\n typescript: {\n configFile: ctx.tsconfig.path,\n configOverwrite: {\n compilerOptions: {\n sourceMap: ctx.options.sourcemaps,\n },\n },\n },\n }),\n ].filter(Boolean),\n };\n};\n\nconst resolveDevelopmentConfig = async (ctx: BuildContext): Promise<Configuration> => {\n const baseConfig = await resolveBaseConfig(ctx);\n const monorepo = await loadStrapiMonorepo(ctx.cwd);\n const linkedDesignSystemPath = getLinkedDesignSystemPath();\n\n return {\n ...baseConfig,\n cache: {\n type: 'filesystem',\n // version cache when there are changes to aliases\n buildDependencies: {\n config: [__filename],\n // When design-system is linked, invalidate cache when it changes\n ...(linkedDesignSystemPath && {\n designSystem: [path.join(linkedDesignSystemPath, 'dist')],\n }),\n },\n version: crypto\n .createHash('md5')\n .update(Object.entries(baseConfig.resolve.alias ?? {}).join())\n .digest('hex'),\n },\n resolve: {\n ...baseConfig.resolve,\n alias: {\n ...baseConfig.resolve.alias,\n ...getMonorepoAliases({ monorepo }),\n },\n },\n entry: {\n ...baseConfig.entry,\n main: [\n `${require.resolve('webpack-hot-middleware/client')}?path=/__webpack_hmr`,\n ...baseConfig.entry.main,\n ],\n },\n stats: 'errors-warnings',\n mode: 'development',\n devtool: 'inline-source-map',\n output: {\n filename: '[name].js',\n path: ctx.distPath,\n publicPath: `${ctx.basePath.replace(/\\/$/, '')}/`,\n },\n infrastructureLogging: {\n level: 'error',\n },\n plugins: [\n ...baseConfig.plugins,\n new HotModuleReplacementPlugin(),\n new ReactRefreshWebpackPlugin(),\n ],\n };\n};\n\nconst resolveProductionConfig = async (ctx: BuildContext): Promise<Configuration> => {\n const { default: browserslistToEsbuild } = await import('browserslist-to-esbuild');\n const target = browserslistToEsbuild(ctx.target);\n\n const baseConfig = await resolveBaseConfig(ctx);\n\n return {\n ...baseConfig,\n stats: 'errors-only',\n mode: 'production',\n bail: true,\n devtool: ctx.options.sourcemaps ? 'source-map' : false,\n output: {\n path: ctx.distPath,\n publicPath: `${ctx.basePath.replace(/\\/$/, '')}/`,\n // Utilize long-term caching by adding content hashes (not compilation hashes)\n // to compiled assets for production\n filename: '[name].[contenthash:8].js',\n chunkFilename: '[name].[contenthash:8].chunk.js',\n },\n optimization: {\n minimize: ctx.options.minify,\n minimizer: [\n new EsbuildPlugin({\n target,\n css: true, // Apply minification to CSS assets\n }),\n ],\n moduleIds: 'deterministic',\n runtimeChunk: true,\n },\n plugins: [\n ...baseConfig.plugins,\n new MiniCssExtractPlugin({\n filename: '[name].[chunkhash].css',\n chunkFilename: '[name].[chunkhash].chunkhash.css',\n ignoreOrder: true,\n }),\n ctx.options.stats && new BundleAnalyzerPlugin(),\n ].filter(Boolean),\n };\n};\n\nconst USER_CONFIGS = ['webpack.config.js', 'webpack.config.mjs', 'webpack.config.ts'];\n\ntype UserWebpackConfig = (config: Configuration, webpack: unknown) => Configuration;\n\nconst mergeConfigWithUserConfig = async (config: Configuration, ctx: BuildContext) => {\n const userConfig = await getUserConfig<UserWebpackConfig>(USER_CONFIGS, ctx);\n\n if (userConfig) {\n if (typeof userConfig === 'function') {\n const webpack = await import('webpack');\n return userConfig(config, webpack);\n }\n\n ctx.logger.warn(\n `You've exported something other than a function from ${path.join(\n ctx.appDir,\n 'src',\n 'admin',\n 'webpack.config'\n )}, this will ignored.`\n );\n }\n\n return config;\n};\n\nexport { mergeConfigWithUserConfig, resolveDevelopmentConfig, resolveProductionConfig };\n"],"names":["resolveBaseConfig","ctx","default","browserslistToEsbuild","target","experiments","topLevelAwait","entry","main","resolve","alias","react","getModulePath","Object","fromEntries","buildSingletonAliasEntries","extensions","module","rules","test","loader","require","options","jsx","use","fullySpecified","type","parser","dataUrlCondition","maxSize","plugins","HtmlWebpackPlugin","inject","template","path","runtimeDir","DefinePlugin","entries","env","reduce","acc","key","value","JSON","stringify","tsconfig","ForkTsCheckerPlugin","typescript","configFile","configOverwrite","compilerOptions","sourceMap","sourcemaps","filter","Boolean","resolveDevelopmentConfig","baseConfig","monorepo","loadStrapiMonorepo","cwd","linkedDesignSystemPath","getLinkedDesignSystemPath","cache","buildDependencies","config","__filename","designSystem","join","version","crypto","createHash","update","digest","getMonorepoAliases","stats","mode","devtool","output","filename","distPath","publicPath","basePath","replace","infrastructureLogging","level","HotModuleReplacementPlugin","ReactRefreshWebpackPlugin","resolveProductionConfig","bail","chunkFilename","optimization","minimize","minify","minimizer","EsbuildPlugin","css","moduleIds","runtimeChunk","MiniCssExtractPlugin","ignoreOrder","BundleAnalyzerPlugin","USER_CONFIGS","mergeConfigWithUserConfig","userConfig","getUserConfig","webpack","logger","warn","appDir"],"mappings":"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"}