{"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    // Public files are served by the strapi::public middleware at runtime, so they do not need to\n    // be copied into the admin build output.\n    publicDir: false,\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 allowlisted / opt-in pre-built ESM plugin UI kits (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","publicDir","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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"}