@strapi/strapi 5.51.1 → 5.52.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.
- package/dist/node/core/admin-vite-alias-modules.d.ts +3 -3
- package/dist/node/core/admin-vite-alias-modules.d.ts.map +1 -1
- package/dist/node/core/admin-vite-optimize-exclude.d.ts +31 -1
- package/dist/node/core/admin-vite-optimize-exclude.d.ts.map +1 -1
- package/dist/package.json.js +1 -1
- package/dist/package.json.mjs +1 -1
- package/dist/src/cli/commands/export/action.js +1 -1
- package/dist/src/cli/commands/export/action.js.map +1 -1
- package/dist/src/cli/commands/export/action.mjs +1 -1
- package/dist/src/cli/commands/export/action.mjs.map +1 -1
- package/dist/src/cli/commands/import/action.js +2 -2
- package/dist/src/cli/commands/import/action.js.map +1 -1
- package/dist/src/cli/commands/import/action.mjs +2 -2
- package/dist/src/cli/commands/import/action.mjs.map +1 -1
- package/dist/src/cli/commands/transfer/action.js +2 -2
- package/dist/src/cli/commands/transfer/action.js.map +1 -1
- package/dist/src/cli/commands/transfer/action.mjs +2 -2
- package/dist/src/cli/commands/transfer/action.mjs.map +1 -1
- package/dist/src/cli/commands/transfer/command.js +1 -1
- package/dist/src/cli/commands/transfer/command.js.map +1 -1
- package/dist/src/cli/commands/transfer/command.mjs +1 -1
- package/dist/src/cli/commands/transfer/command.mjs.map +1 -1
- package/dist/src/cli/utils/commander.js +3 -3
- package/dist/src/cli/utils/commander.js.map +1 -1
- package/dist/src/cli/utils/commander.mjs +3 -3
- package/dist/src/cli/utils/commander.mjs.map +1 -1
- package/dist/src/cli/utils/data-transfer.js +1 -1
- package/dist/src/cli/utils/data-transfer.js.map +1 -1
- package/dist/src/cli/utils/data-transfer.mjs +1 -1
- package/dist/src/cli/utils/data-transfer.mjs.map +1 -1
- package/dist/src/cli/utils/helpers.js +1 -1
- package/dist/src/cli/utils/helpers.js.map +1 -1
- package/dist/src/cli/utils/helpers.mjs +1 -1
- package/dist/src/cli/utils/helpers.mjs.map +1 -1
- package/dist/src/cli/utils/telemetry.js +1 -1
- package/dist/src/cli/utils/telemetry.js.map +1 -1
- package/dist/src/cli/utils/telemetry.mjs +1 -1
- package/dist/src/cli/utils/telemetry.mjs.map +1 -1
- package/dist/src/node/core/admin-vite-alias-modules.js +11 -1
- package/dist/src/node/core/admin-vite-alias-modules.js.map +1 -1
- package/dist/src/node/core/admin-vite-alias-modules.mjs +11 -1
- package/dist/src/node/core/admin-vite-alias-modules.mjs.map +1 -1
- package/dist/src/node/core/admin-vite-optimize-exclude.js +42 -2
- package/dist/src/node/core/admin-vite-optimize-exclude.js.map +1 -1
- package/dist/src/node/core/admin-vite-optimize-exclude.mjs +40 -3
- package/dist/src/node/core/admin-vite-optimize-exclude.mjs.map +1 -1
- package/dist/src/node/core/dependencies.js +1 -1
- package/dist/src/node/core/dependencies.js.map +1 -1
- package/dist/src/node/core/dependencies.mjs +1 -1
- package/dist/src/node/core/dependencies.mjs.map +1 -1
- package/dist/src/node/core/files.js +1 -1
- package/dist/src/node/core/files.js.map +1 -1
- package/dist/src/node/core/files.mjs +1 -1
- package/dist/src/node/core/files.mjs.map +1 -1
- package/dist/src/node/vite/config.js +1 -1
- package/dist/src/node/vite/config.js.map +1 -1
- package/dist/src/node/vite/config.mjs +1 -1
- package/dist/src/node/vite/config.mjs.map +1 -1
- package/package.json +24 -24
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependencies.js","sources":["../../../../src/node/core/dependencies.ts"],"sourcesContent":["import os from 'node:os';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport crypto from 'node:crypto';\nimport semver, { SemVer } from 'semver';\nimport resolveFrom from 'resolve-from';\nimport execa, { CommonOptions, ExecaReturnValue } from 'execa';\nimport readPkgUp, { PackageJson } from 'read-pkg-up';\n\nimport type { Logger } from '../../cli/utils/logger';\nimport { getPackageManager } from './managers';\n\nconst CACHE_PATH = path.join('node_modules', '.strapi', 'deps-check.hash');\n\nconst hashPackageJson = async (cwd: string): Promise<string | null> => {\n try {\n const content = await fs.readFile(path.join(cwd, 'package.json'), 'utf8');\n return crypto.createHash('sha1').update(content).digest('hex');\n } catch {\n return null;\n }\n};\n\nconst readCachedHash = (cwd: string): Promise<string | null> =>\n fs.readFile(path.join(cwd, CACHE_PATH), 'utf8').catch(() => null);\n\nconst writeCachedHash = async (cwd: string, hash: string): Promise<void> => {\n try {\n await fs.mkdir(path.dirname(path.join(cwd, CACHE_PATH)), { recursive: true });\n await fs.writeFile(path.join(cwd, CACHE_PATH), hash, 'utf8');\n } catch {\n // best-effort cache write — silently ignore\n }\n};\n\n/**\n * From V5 this will be imported from the package.json of `@strapi/strapi`.\n */\nconst ADMIN_PEER_DEPS = {\n react: '^18.0.0',\n 'react-dom': '^18.0.0',\n 'react-router-dom': '^6.0.0',\n 'styled-components': '^6.0.0',\n} as const;\n\ninterface AdminPeerDep {\n name: string;\n wantedVersion: string;\n}\n\ninterface DeclaredAdminPeerDep extends AdminPeerDep {\n declaredVersion: string;\n}\n\nclass MissingAdminPeerDepsError extends Error {\n readonly missing: AdminPeerDep[];\n\n constructor(missing: AdminPeerDep[]) {\n super('Missing required dependencies. Please install them and re-run this command.');\n this.name = 'MissingAdminPeerDepsError';\n this.missing = missing;\n }\n}\n\nconst loadProjectPackageJson = async (cwd: string) => {\n const pkg = await readPkgUp({ cwd });\n\n if (!pkg) {\n throw new Error(`Could not find package.json at path: ${cwd}`);\n }\n\n if (!pkg.packageJson.dependencies) {\n throw new Error(`Could not find dependencies in package.json at path: ${cwd}`);\n }\n\n return pkg;\n};\n\n/**\n * Returns admin peer dependencies that are not declared in the project's package.json.\n */\nconst findUndeclaredAdminPeerDeps = async (cwd: string): Promise<AdminPeerDep[]> => {\n const pkg = await loadProjectPackageJson(cwd);\n\n return Object.entries(ADMIN_PEER_DEPS).reduce<AdminPeerDep[]>((missing, [name, version]) => {\n const declaredVersion =\n pkg.packageJson.dependencies?.[name] ?? pkg.packageJson.devDependencies?.[name];\n\n if (!declaredVersion) {\n missing.push({\n name,\n wantedVersion: version,\n });\n }\n\n return missing;\n }, []);\n};\n\nconst getDeclaredAdminPeerDeps = (packageJson: PackageJson): DeclaredAdminPeerDep[] => {\n return Object.entries(ADMIN_PEER_DEPS).reduce<DeclaredAdminPeerDep[]>(\n (declared, [name, version]) => {\n const declaredVersion =\n packageJson.dependencies?.[name] ?? packageJson.devDependencies?.[name];\n\n if (declaredVersion) {\n declared.push({\n name,\n wantedVersion: version,\n declaredVersion,\n });\n }\n\n return declared;\n },\n []\n );\n};\n\nconst getInstallCommandHint = (missing: AdminPeerDep[]) => {\n const packages = missing.map(({ name, wantedVersion }) => `${name}@${wantedVersion}`).join(' ');\n const packageManager = getPackageManager();\n\n if (packageManager === 'yarn') {\n return `yarn add ${packages}`;\n }\n\n if (packageManager === 'pnpm') {\n return `pnpm add --save-prod ${packages}`;\n }\n\n // Do not use --legacy-peer-deps: it rewrites package-lock in a mode that\n // breaks plain `npm ci` (#27019). Fresh apps install cleanly without it.\n return `npm install --save ${packages}`;\n};\n\nconst reportMissingAdminPeerDeps = (logger: Logger, missing: AdminPeerDep[]) => {\n logger.error(\n 'The Strapi admin is missing required dependencies:',\n os.EOL,\n missing.map(({ name, wantedVersion }) => ` - ${name}@${wantedVersion}`).join(os.EOL)\n );\n logger.error(\n 'Please install them manually before re-running this command:',\n os.EOL,\n ` ${getInstallCommandHint(missing)}`\n );\n};\n\n/**\n * Validates declared admin peer dependencies (versions and node_modules presence).\n */\nconst validateDeclaredAdminPeerDeps = async (cwd: string, logger: Logger) => {\n const pkg = await loadProjectPackageJson(cwd);\n const declared = getDeclaredAdminPeerDeps(pkg.packageJson);\n\n if (!declared.length) {\n return;\n }\n\n logger.debug('Loaded package.json:', os.EOL, pkg.packageJson);\n\n const errors: string[] = [];\n\n for (const dep of declared) {\n let minDeclaredVersion: SemVer | null = null;\n\n try {\n minDeclaredVersion = semver.minVersion(dep.declaredVersion);\n } catch (err) {\n // Intentional fall-through (variable will be left as null, throwing below)\n }\n\n if (!minDeclaredVersion) {\n errors.push(\n `The declared dependency, ${dep.name} has an invalid version in package.json: ${dep.declaredVersion}`\n );\n } else if (!semver.satisfies(minDeclaredVersion, dep.wantedVersion)) {\n logger.warn(\n [\n `Declared version of ${dep.name} (${minDeclaredVersion}) is not compatible with the version required by Strapi (${dep.wantedVersion}).`,\n 'You may experience issues, we recommend you change this.',\n ].join(os.EOL)\n );\n }\n\n const installedVersion = await getModuleVersion(dep.name, cwd);\n\n if (!installedVersion) {\n errors.push(\n `The declared dependency, ${dep.name} is not installed. You should install before re-running this command`\n );\n } else if (!semver.satisfies(installedVersion, dep.wantedVersion)) {\n logger.warn(\n [\n `Declared version of ${dep.name} (${installedVersion}) is not compatible with the version required by Strapi (${dep.wantedVersion}).`,\n 'You may experience issues, we recommend you change this.',\n ].join(os.EOL)\n );\n }\n }\n\n if (errors.length > 0 && process.env.NODE_ENV === 'development') {\n throw new Error(`${os.EOL}- ${errors.join(`${os.EOL}- `)}`);\n }\n};\n\nconst installAdminPeerDeps = async (\n missing: AdminPeerDep[],\n { cwd, logger }: { cwd: string; logger: Logger }\n) => {\n const packageManager = getPackageManager();\n\n if (!packageManager) {\n logger.error(\n 'Could not find a supported package manager, please install the dependencies manually.'\n );\n process.exit(1);\n }\n\n const execOptions: CommonOptions<'utf8'> = {\n encoding: 'utf8',\n cwd,\n stdio: 'inherit',\n };\n\n const packages = missing.map(({ name, wantedVersion }) => `${name}@${wantedVersion}`);\n\n let result: ExecaReturnValue<string> | undefined;\n\n if (packageManager === 'npm') {\n const npmArgs = ['install', '--save', ...packages];\n logger.info(`Running 'npm ${npmArgs.join(' ')}'`);\n result = await execa('npm', npmArgs, execOptions);\n } else if (packageManager === 'yarn') {\n const yarnArgs = ['add', ...packages];\n logger.info(`Running 'yarn ${yarnArgs.join(' ')}'`);\n result = await execa('yarn', yarnArgs, execOptions);\n } else if (packageManager === 'pnpm') {\n const pnpmArgs = ['add', '--save-prod', ...packages];\n logger.info(`Running 'pnpm ${pnpmArgs.join(' ')}'`);\n result = await execa('pnpm', pnpmArgs, execOptions);\n }\n\n if (result?.exitCode || result?.failed) {\n throw new Error('Package installation failed');\n }\n};\n\nconst reexecCurrentCommand = async (cwd: string) => {\n const [file, ...args] = process.argv;\n\n /**\n * Re-run the same command after installation e.g. strapi build because the yarn.lock might\n * not be the same and could break installations. It's not the best solution, but it works.\n */\n await execa(file, args, { cwd, stdio: 'inherit' });\n};\n\nconst getModule = async (name: string, cwd: string): Promise<PackageJson | null> => {\n const modulePackagePath = resolveFrom.silent(cwd, path.join(name, 'package.json'));\n if (!modulePackagePath) {\n return null;\n }\n const file = await fs.readFile(modulePackagePath, 'utf8').then((res) => JSON.parse(res));\n\n return file;\n};\n\nconst getModuleVersion = async (name: string, cwd: string): Promise<string | null> => {\n const pkg = await getModule(name, cwd);\n\n return pkg?.version || null;\n};\n\nexport {\n ADMIN_PEER_DEPS,\n findUndeclaredAdminPeerDeps,\n validateDeclaredAdminPeerDeps,\n installAdminPeerDeps,\n reexecCurrentCommand,\n reportMissingAdminPeerDeps,\n getInstallCommandHint,\n MissingAdminPeerDepsError,\n getModule,\n hashPackageJson,\n readCachedHash,\n writeCachedHash,\n};\nexport type { AdminPeerDep, PackageJson };\n"],"names":["CACHE_PATH","path","join","hashPackageJson","cwd","content","fs","readFile","crypto","createHash","update","digest","readCachedHash","catch","writeCachedHash","hash","mkdir","dirname","recursive","writeFile","ADMIN_PEER_DEPS","react","MissingAdminPeerDepsError","Error","missing","name","loadProjectPackageJson","pkg","readPkgUp","packageJson","dependencies","findUndeclaredAdminPeerDeps","Object","entries","reduce","version","declaredVersion","devDependencies","push","wantedVersion","getDeclaredAdminPeerDeps","declared","getInstallCommandHint","packages","map","packageManager","getPackageManager","reportMissingAdminPeerDeps","logger","error","os","EOL","validateDeclaredAdminPeerDeps","length","debug","errors","dep","minDeclaredVersion","semver","minVersion","err","satisfies","warn","installedVersion","getModuleVersion","process","env","NODE_ENV","installAdminPeerDeps","exit","execOptions","encoding","stdio","result","npmArgs","info","execa","yarnArgs","pnpmArgs","exitCode","failed","reexecCurrentCommand","file","args","argv","getModule","modulePackagePath","resolveFrom","silent","then","res","JSON","parse"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dependencies.js","sources":["../../../../src/node/core/dependencies.ts"],"sourcesContent":["import os from 'node:os';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport crypto from 'node:crypto';\nimport semver, { SemVer } from 'semver';\nimport resolveFrom from 'resolve-from';\nimport execa, { CommonOptions, ExecaReturnValue } from 'execa';\nimport readPkgUp, { PackageJson } from 'read-pkg-up';\n\nimport type { Logger } from '../../cli/utils/logger';\nimport { getPackageManager } from './managers';\n\nconst CACHE_PATH = path.join('node_modules', '.strapi', 'deps-check.hash');\n\nconst hashPackageJson = async (cwd: string): Promise<string | null> => {\n try {\n const content = await fs.readFile(path.join(cwd, 'package.json'), 'utf8');\n return crypto.createHash('sha1').update(content).digest('hex');\n } catch {\n return null;\n }\n};\n\nconst readCachedHash = (cwd: string): Promise<string | null> =>\n fs.readFile(path.join(cwd, CACHE_PATH), 'utf8').catch(() => null);\n\nconst writeCachedHash = async (cwd: string, hash: string): Promise<void> => {\n try {\n await fs.mkdir(path.dirname(path.join(cwd, CACHE_PATH)), { recursive: true });\n await fs.writeFile(path.join(cwd, CACHE_PATH), hash, 'utf8');\n } catch {\n // best-effort cache write — silently ignore\n }\n};\n\n/**\n * From V5 this will be imported from the package.json of `@strapi/strapi`.\n */\nconst ADMIN_PEER_DEPS = {\n react: '^18.0.0',\n 'react-dom': '^18.0.0',\n 'react-router-dom': '^6.0.0',\n 'styled-components': '^6.0.0',\n} as const;\n\ninterface AdminPeerDep {\n name: string;\n wantedVersion: string;\n}\n\ninterface DeclaredAdminPeerDep extends AdminPeerDep {\n declaredVersion: string;\n}\n\nclass MissingAdminPeerDepsError extends Error {\n readonly missing: AdminPeerDep[];\n\n constructor(missing: AdminPeerDep[]) {\n super('Missing required dependencies. Please install them and re-run this command.');\n this.name = 'MissingAdminPeerDepsError';\n this.missing = missing;\n }\n}\n\nconst loadProjectPackageJson = async (cwd: string) => {\n const pkg = await readPkgUp({ cwd });\n\n if (!pkg) {\n throw new Error(`Could not find package.json at path: ${cwd}`);\n }\n\n if (!pkg.packageJson.dependencies) {\n throw new Error(`Could not find dependencies in package.json at path: ${cwd}`);\n }\n\n return pkg;\n};\n\n/**\n * Returns admin peer dependencies that are not declared in the project's package.json.\n */\nconst findUndeclaredAdminPeerDeps = async (cwd: string): Promise<AdminPeerDep[]> => {\n const pkg = await loadProjectPackageJson(cwd);\n\n return Object.entries(ADMIN_PEER_DEPS).reduce<AdminPeerDep[]>((missing, [name, version]) => {\n const declaredVersion =\n pkg.packageJson.dependencies?.[name] ?? pkg.packageJson.devDependencies?.[name];\n\n if (!declaredVersion) {\n missing.push({\n name,\n wantedVersion: version,\n });\n }\n\n return missing;\n }, []);\n};\n\nconst getDeclaredAdminPeerDeps = (packageJson: PackageJson): DeclaredAdminPeerDep[] => {\n return Object.entries(ADMIN_PEER_DEPS).reduce<DeclaredAdminPeerDep[]>(\n (declared, [name, version]) => {\n const declaredVersion =\n packageJson.dependencies?.[name] ?? packageJson.devDependencies?.[name];\n\n if (declaredVersion) {\n declared.push({\n name,\n wantedVersion: version,\n declaredVersion,\n });\n }\n\n return declared;\n },\n []\n );\n};\n\nconst getInstallCommandHint = (missing: AdminPeerDep[]) => {\n const packages = missing.map(({ name, wantedVersion }) => `${name}@${wantedVersion}`).join(' ');\n const packageManager = getPackageManager();\n\n if (packageManager === 'yarn') {\n return `yarn add ${packages}`;\n }\n\n if (packageManager === 'pnpm') {\n return `pnpm add --save-prod ${packages}`;\n }\n\n // Do not use --legacy-peer-deps: it rewrites package-lock in a mode that\n // breaks plain `npm ci` (#27019). Fresh apps install cleanly without it.\n return `npm install --save ${packages}`;\n};\n\nconst reportMissingAdminPeerDeps = (logger: Logger, missing: AdminPeerDep[]) => {\n logger.error(\n 'The Strapi admin is missing required dependencies:',\n os.EOL,\n missing.map(({ name, wantedVersion }) => ` - ${name}@${wantedVersion}`).join(os.EOL)\n );\n logger.error(\n 'Please install them manually before re-running this command:',\n os.EOL,\n ` ${getInstallCommandHint(missing)}`\n );\n};\n\n/**\n * Validates declared admin peer dependencies (versions and node_modules presence).\n */\nconst validateDeclaredAdminPeerDeps = async (cwd: string, logger: Logger) => {\n const pkg = await loadProjectPackageJson(cwd);\n const declared = getDeclaredAdminPeerDeps(pkg.packageJson);\n\n if (!declared.length) {\n return;\n }\n\n logger.debug('Loaded package.json:', os.EOL, pkg.packageJson);\n\n const errors: string[] = [];\n\n for (const dep of declared) {\n let minDeclaredVersion: SemVer | null = null;\n\n try {\n minDeclaredVersion = semver.minVersion(dep.declaredVersion);\n } catch {\n // Intentional fall-through (variable will be left as null, throwing below)\n }\n\n if (!minDeclaredVersion) {\n errors.push(\n `The declared dependency, ${dep.name} has an invalid version in package.json: ${dep.declaredVersion}`\n );\n } else if (!semver.satisfies(minDeclaredVersion, dep.wantedVersion)) {\n logger.warn(\n [\n `Declared version of ${dep.name} (${minDeclaredVersion}) is not compatible with the version required by Strapi (${dep.wantedVersion}).`,\n 'You may experience issues, we recommend you change this.',\n ].join(os.EOL)\n );\n }\n\n const installedVersion = await getModuleVersion(dep.name, cwd);\n\n if (!installedVersion) {\n errors.push(\n `The declared dependency, ${dep.name} is not installed. You should install before re-running this command`\n );\n } else if (!semver.satisfies(installedVersion, dep.wantedVersion)) {\n logger.warn(\n [\n `Declared version of ${dep.name} (${installedVersion}) is not compatible with the version required by Strapi (${dep.wantedVersion}).`,\n 'You may experience issues, we recommend you change this.',\n ].join(os.EOL)\n );\n }\n }\n\n if (errors.length > 0 && process.env.NODE_ENV === 'development') {\n throw new Error(`${os.EOL}- ${errors.join(`${os.EOL}- `)}`);\n }\n};\n\nconst installAdminPeerDeps = async (\n missing: AdminPeerDep[],\n { cwd, logger }: { cwd: string; logger: Logger }\n) => {\n const packageManager = getPackageManager();\n\n if (!packageManager) {\n logger.error(\n 'Could not find a supported package manager, please install the dependencies manually.'\n );\n process.exit(1);\n }\n\n const execOptions: CommonOptions<'utf8'> = {\n encoding: 'utf8',\n cwd,\n stdio: 'inherit',\n };\n\n const packages = missing.map(({ name, wantedVersion }) => `${name}@${wantedVersion}`);\n\n let result: ExecaReturnValue<string> | undefined;\n\n if (packageManager === 'npm') {\n const npmArgs = ['install', '--save', ...packages];\n logger.info(`Running 'npm ${npmArgs.join(' ')}'`);\n result = await execa('npm', npmArgs, execOptions);\n } else if (packageManager === 'yarn') {\n const yarnArgs = ['add', ...packages];\n logger.info(`Running 'yarn ${yarnArgs.join(' ')}'`);\n result = await execa('yarn', yarnArgs, execOptions);\n } else if (packageManager === 'pnpm') {\n const pnpmArgs = ['add', '--save-prod', ...packages];\n logger.info(`Running 'pnpm ${pnpmArgs.join(' ')}'`);\n result = await execa('pnpm', pnpmArgs, execOptions);\n }\n\n if (result?.exitCode || result?.failed) {\n throw new Error('Package installation failed');\n }\n};\n\nconst reexecCurrentCommand = async (cwd: string) => {\n const [file, ...args] = process.argv;\n\n /**\n * Re-run the same command after installation e.g. strapi build because the yarn.lock might\n * not be the same and could break installations. It's not the best solution, but it works.\n */\n await execa(file, args, { cwd, stdio: 'inherit' });\n};\n\nconst getModule = async (name: string, cwd: string): Promise<PackageJson | null> => {\n const modulePackagePath = resolveFrom.silent(cwd, path.join(name, 'package.json'));\n if (!modulePackagePath) {\n return null;\n }\n const file = await fs.readFile(modulePackagePath, 'utf8').then((res) => JSON.parse(res));\n\n return file;\n};\n\nconst getModuleVersion = async (name: string, cwd: string): Promise<string | null> => {\n const pkg = await getModule(name, cwd);\n\n return pkg?.version || null;\n};\n\nexport {\n ADMIN_PEER_DEPS,\n findUndeclaredAdminPeerDeps,\n validateDeclaredAdminPeerDeps,\n installAdminPeerDeps,\n reexecCurrentCommand,\n reportMissingAdminPeerDeps,\n getInstallCommandHint,\n MissingAdminPeerDepsError,\n getModule,\n hashPackageJson,\n readCachedHash,\n writeCachedHash,\n};\nexport type { AdminPeerDep, PackageJson };\n"],"names":["CACHE_PATH","path","join","hashPackageJson","cwd","content","fs","readFile","crypto","createHash","update","digest","readCachedHash","catch","writeCachedHash","hash","mkdir","dirname","recursive","writeFile","ADMIN_PEER_DEPS","react","MissingAdminPeerDepsError","Error","missing","name","loadProjectPackageJson","pkg","readPkgUp","packageJson","dependencies","findUndeclaredAdminPeerDeps","Object","entries","reduce","version","declaredVersion","devDependencies","push","wantedVersion","getDeclaredAdminPeerDeps","declared","getInstallCommandHint","packages","map","packageManager","getPackageManager","reportMissingAdminPeerDeps","logger","error","os","EOL","validateDeclaredAdminPeerDeps","length","debug","errors","dep","minDeclaredVersion","semver","minVersion","satisfies","warn","installedVersion","getModuleVersion","process","env","NODE_ENV","installAdminPeerDeps","exit","execOptions","encoding","stdio","result","npmArgs","info","execa","yarnArgs","pnpmArgs","exitCode","failed","reexecCurrentCommand","file","args","argv","getModule","modulePackagePath","resolveFrom","silent","then","res","JSON","parse"],"mappings":"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"}
|
|
@@ -114,7 +114,7 @@ const reportMissingAdminPeerDeps = (logger, missing)=>{
|
|
|
114
114
|
let minDeclaredVersion = null;
|
|
115
115
|
try {
|
|
116
116
|
minDeclaredVersion = semver.minVersion(dep.declaredVersion);
|
|
117
|
-
} catch
|
|
117
|
+
} catch {
|
|
118
118
|
// Intentional fall-through (variable will be left as null, throwing below)
|
|
119
119
|
}
|
|
120
120
|
if (!minDeclaredVersion) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependencies.mjs","sources":["../../../../src/node/core/dependencies.ts"],"sourcesContent":["import os from 'node:os';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport crypto from 'node:crypto';\nimport semver, { SemVer } from 'semver';\nimport resolveFrom from 'resolve-from';\nimport execa, { CommonOptions, ExecaReturnValue } from 'execa';\nimport readPkgUp, { PackageJson } from 'read-pkg-up';\n\nimport type { Logger } from '../../cli/utils/logger';\nimport { getPackageManager } from './managers';\n\nconst CACHE_PATH = path.join('node_modules', '.strapi', 'deps-check.hash');\n\nconst hashPackageJson = async (cwd: string): Promise<string | null> => {\n try {\n const content = await fs.readFile(path.join(cwd, 'package.json'), 'utf8');\n return crypto.createHash('sha1').update(content).digest('hex');\n } catch {\n return null;\n }\n};\n\nconst readCachedHash = (cwd: string): Promise<string | null> =>\n fs.readFile(path.join(cwd, CACHE_PATH), 'utf8').catch(() => null);\n\nconst writeCachedHash = async (cwd: string, hash: string): Promise<void> => {\n try {\n await fs.mkdir(path.dirname(path.join(cwd, CACHE_PATH)), { recursive: true });\n await fs.writeFile(path.join(cwd, CACHE_PATH), hash, 'utf8');\n } catch {\n // best-effort cache write — silently ignore\n }\n};\n\n/**\n * From V5 this will be imported from the package.json of `@strapi/strapi`.\n */\nconst ADMIN_PEER_DEPS = {\n react: '^18.0.0',\n 'react-dom': '^18.0.0',\n 'react-router-dom': '^6.0.0',\n 'styled-components': '^6.0.0',\n} as const;\n\ninterface AdminPeerDep {\n name: string;\n wantedVersion: string;\n}\n\ninterface DeclaredAdminPeerDep extends AdminPeerDep {\n declaredVersion: string;\n}\n\nclass MissingAdminPeerDepsError extends Error {\n readonly missing: AdminPeerDep[];\n\n constructor(missing: AdminPeerDep[]) {\n super('Missing required dependencies. Please install them and re-run this command.');\n this.name = 'MissingAdminPeerDepsError';\n this.missing = missing;\n }\n}\n\nconst loadProjectPackageJson = async (cwd: string) => {\n const pkg = await readPkgUp({ cwd });\n\n if (!pkg) {\n throw new Error(`Could not find package.json at path: ${cwd}`);\n }\n\n if (!pkg.packageJson.dependencies) {\n throw new Error(`Could not find dependencies in package.json at path: ${cwd}`);\n }\n\n return pkg;\n};\n\n/**\n * Returns admin peer dependencies that are not declared in the project's package.json.\n */\nconst findUndeclaredAdminPeerDeps = async (cwd: string): Promise<AdminPeerDep[]> => {\n const pkg = await loadProjectPackageJson(cwd);\n\n return Object.entries(ADMIN_PEER_DEPS).reduce<AdminPeerDep[]>((missing, [name, version]) => {\n const declaredVersion =\n pkg.packageJson.dependencies?.[name] ?? pkg.packageJson.devDependencies?.[name];\n\n if (!declaredVersion) {\n missing.push({\n name,\n wantedVersion: version,\n });\n }\n\n return missing;\n }, []);\n};\n\nconst getDeclaredAdminPeerDeps = (packageJson: PackageJson): DeclaredAdminPeerDep[] => {\n return Object.entries(ADMIN_PEER_DEPS).reduce<DeclaredAdminPeerDep[]>(\n (declared, [name, version]) => {\n const declaredVersion =\n packageJson.dependencies?.[name] ?? packageJson.devDependencies?.[name];\n\n if (declaredVersion) {\n declared.push({\n name,\n wantedVersion: version,\n declaredVersion,\n });\n }\n\n return declared;\n },\n []\n );\n};\n\nconst getInstallCommandHint = (missing: AdminPeerDep[]) => {\n const packages = missing.map(({ name, wantedVersion }) => `${name}@${wantedVersion}`).join(' ');\n const packageManager = getPackageManager();\n\n if (packageManager === 'yarn') {\n return `yarn add ${packages}`;\n }\n\n if (packageManager === 'pnpm') {\n return `pnpm add --save-prod ${packages}`;\n }\n\n // Do not use --legacy-peer-deps: it rewrites package-lock in a mode that\n // breaks plain `npm ci` (#27019). Fresh apps install cleanly without it.\n return `npm install --save ${packages}`;\n};\n\nconst reportMissingAdminPeerDeps = (logger: Logger, missing: AdminPeerDep[]) => {\n logger.error(\n 'The Strapi admin is missing required dependencies:',\n os.EOL,\n missing.map(({ name, wantedVersion }) => ` - ${name}@${wantedVersion}`).join(os.EOL)\n );\n logger.error(\n 'Please install them manually before re-running this command:',\n os.EOL,\n ` ${getInstallCommandHint(missing)}`\n );\n};\n\n/**\n * Validates declared admin peer dependencies (versions and node_modules presence).\n */\nconst validateDeclaredAdminPeerDeps = async (cwd: string, logger: Logger) => {\n const pkg = await loadProjectPackageJson(cwd);\n const declared = getDeclaredAdminPeerDeps(pkg.packageJson);\n\n if (!declared.length) {\n return;\n }\n\n logger.debug('Loaded package.json:', os.EOL, pkg.packageJson);\n\n const errors: string[] = [];\n\n for (const dep of declared) {\n let minDeclaredVersion: SemVer | null = null;\n\n try {\n minDeclaredVersion = semver.minVersion(dep.declaredVersion);\n } catch (err) {\n // Intentional fall-through (variable will be left as null, throwing below)\n }\n\n if (!minDeclaredVersion) {\n errors.push(\n `The declared dependency, ${dep.name} has an invalid version in package.json: ${dep.declaredVersion}`\n );\n } else if (!semver.satisfies(minDeclaredVersion, dep.wantedVersion)) {\n logger.warn(\n [\n `Declared version of ${dep.name} (${minDeclaredVersion}) is not compatible with the version required by Strapi (${dep.wantedVersion}).`,\n 'You may experience issues, we recommend you change this.',\n ].join(os.EOL)\n );\n }\n\n const installedVersion = await getModuleVersion(dep.name, cwd);\n\n if (!installedVersion) {\n errors.push(\n `The declared dependency, ${dep.name} is not installed. You should install before re-running this command`\n );\n } else if (!semver.satisfies(installedVersion, dep.wantedVersion)) {\n logger.warn(\n [\n `Declared version of ${dep.name} (${installedVersion}) is not compatible with the version required by Strapi (${dep.wantedVersion}).`,\n 'You may experience issues, we recommend you change this.',\n ].join(os.EOL)\n );\n }\n }\n\n if (errors.length > 0 && process.env.NODE_ENV === 'development') {\n throw new Error(`${os.EOL}- ${errors.join(`${os.EOL}- `)}`);\n }\n};\n\nconst installAdminPeerDeps = async (\n missing: AdminPeerDep[],\n { cwd, logger }: { cwd: string; logger: Logger }\n) => {\n const packageManager = getPackageManager();\n\n if (!packageManager) {\n logger.error(\n 'Could not find a supported package manager, please install the dependencies manually.'\n );\n process.exit(1);\n }\n\n const execOptions: CommonOptions<'utf8'> = {\n encoding: 'utf8',\n cwd,\n stdio: 'inherit',\n };\n\n const packages = missing.map(({ name, wantedVersion }) => `${name}@${wantedVersion}`);\n\n let result: ExecaReturnValue<string> | undefined;\n\n if (packageManager === 'npm') {\n const npmArgs = ['install', '--save', ...packages];\n logger.info(`Running 'npm ${npmArgs.join(' ')}'`);\n result = await execa('npm', npmArgs, execOptions);\n } else if (packageManager === 'yarn') {\n const yarnArgs = ['add', ...packages];\n logger.info(`Running 'yarn ${yarnArgs.join(' ')}'`);\n result = await execa('yarn', yarnArgs, execOptions);\n } else if (packageManager === 'pnpm') {\n const pnpmArgs = ['add', '--save-prod', ...packages];\n logger.info(`Running 'pnpm ${pnpmArgs.join(' ')}'`);\n result = await execa('pnpm', pnpmArgs, execOptions);\n }\n\n if (result?.exitCode || result?.failed) {\n throw new Error('Package installation failed');\n }\n};\n\nconst reexecCurrentCommand = async (cwd: string) => {\n const [file, ...args] = process.argv;\n\n /**\n * Re-run the same command after installation e.g. strapi build because the yarn.lock might\n * not be the same and could break installations. It's not the best solution, but it works.\n */\n await execa(file, args, { cwd, stdio: 'inherit' });\n};\n\nconst getModule = async (name: string, cwd: string): Promise<PackageJson | null> => {\n const modulePackagePath = resolveFrom.silent(cwd, path.join(name, 'package.json'));\n if (!modulePackagePath) {\n return null;\n }\n const file = await fs.readFile(modulePackagePath, 'utf8').then((res) => JSON.parse(res));\n\n return file;\n};\n\nconst getModuleVersion = async (name: string, cwd: string): Promise<string | null> => {\n const pkg = await getModule(name, cwd);\n\n return pkg?.version || null;\n};\n\nexport {\n ADMIN_PEER_DEPS,\n findUndeclaredAdminPeerDeps,\n validateDeclaredAdminPeerDeps,\n installAdminPeerDeps,\n reexecCurrentCommand,\n reportMissingAdminPeerDeps,\n getInstallCommandHint,\n MissingAdminPeerDepsError,\n getModule,\n hashPackageJson,\n readCachedHash,\n writeCachedHash,\n};\nexport type { AdminPeerDep, PackageJson };\n"],"names":["CACHE_PATH","path","join","hashPackageJson","cwd","content","fs","readFile","crypto","createHash","update","digest","readCachedHash","catch","writeCachedHash","hash","mkdir","dirname","recursive","writeFile","ADMIN_PEER_DEPS","react","MissingAdminPeerDepsError","Error","missing","name","loadProjectPackageJson","pkg","readPkgUp","packageJson","dependencies","findUndeclaredAdminPeerDeps","Object","entries","reduce","version","declaredVersion","devDependencies","push","wantedVersion","getDeclaredAdminPeerDeps","declared","getInstallCommandHint","packages","map","packageManager","getPackageManager","reportMissingAdminPeerDeps","logger","error","os","EOL","validateDeclaredAdminPeerDeps","length","debug","errors","dep","minDeclaredVersion","semver","minVersion","err","satisfies","warn","installedVersion","getModuleVersion","process","env","NODE_ENV","installAdminPeerDeps","exit","execOptions","encoding","stdio","result","npmArgs","info","execa","yarnArgs","pnpmArgs","exitCode","failed","reexecCurrentCommand","file","args","argv","getModule","modulePackagePath","resolveFrom","silent","then","res","JSON","parse"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dependencies.mjs","sources":["../../../../src/node/core/dependencies.ts"],"sourcesContent":["import os from 'node:os';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport crypto from 'node:crypto';\nimport semver, { SemVer } from 'semver';\nimport resolveFrom from 'resolve-from';\nimport execa, { CommonOptions, ExecaReturnValue } from 'execa';\nimport readPkgUp, { PackageJson } from 'read-pkg-up';\n\nimport type { Logger } from '../../cli/utils/logger';\nimport { getPackageManager } from './managers';\n\nconst CACHE_PATH = path.join('node_modules', '.strapi', 'deps-check.hash');\n\nconst hashPackageJson = async (cwd: string): Promise<string | null> => {\n try {\n const content = await fs.readFile(path.join(cwd, 'package.json'), 'utf8');\n return crypto.createHash('sha1').update(content).digest('hex');\n } catch {\n return null;\n }\n};\n\nconst readCachedHash = (cwd: string): Promise<string | null> =>\n fs.readFile(path.join(cwd, CACHE_PATH), 'utf8').catch(() => null);\n\nconst writeCachedHash = async (cwd: string, hash: string): Promise<void> => {\n try {\n await fs.mkdir(path.dirname(path.join(cwd, CACHE_PATH)), { recursive: true });\n await fs.writeFile(path.join(cwd, CACHE_PATH), hash, 'utf8');\n } catch {\n // best-effort cache write — silently ignore\n }\n};\n\n/**\n * From V5 this will be imported from the package.json of `@strapi/strapi`.\n */\nconst ADMIN_PEER_DEPS = {\n react: '^18.0.0',\n 'react-dom': '^18.0.0',\n 'react-router-dom': '^6.0.0',\n 'styled-components': '^6.0.0',\n} as const;\n\ninterface AdminPeerDep {\n name: string;\n wantedVersion: string;\n}\n\ninterface DeclaredAdminPeerDep extends AdminPeerDep {\n declaredVersion: string;\n}\n\nclass MissingAdminPeerDepsError extends Error {\n readonly missing: AdminPeerDep[];\n\n constructor(missing: AdminPeerDep[]) {\n super('Missing required dependencies. Please install them and re-run this command.');\n this.name = 'MissingAdminPeerDepsError';\n this.missing = missing;\n }\n}\n\nconst loadProjectPackageJson = async (cwd: string) => {\n const pkg = await readPkgUp({ cwd });\n\n if (!pkg) {\n throw new Error(`Could not find package.json at path: ${cwd}`);\n }\n\n if (!pkg.packageJson.dependencies) {\n throw new Error(`Could not find dependencies in package.json at path: ${cwd}`);\n }\n\n return pkg;\n};\n\n/**\n * Returns admin peer dependencies that are not declared in the project's package.json.\n */\nconst findUndeclaredAdminPeerDeps = async (cwd: string): Promise<AdminPeerDep[]> => {\n const pkg = await loadProjectPackageJson(cwd);\n\n return Object.entries(ADMIN_PEER_DEPS).reduce<AdminPeerDep[]>((missing, [name, version]) => {\n const declaredVersion =\n pkg.packageJson.dependencies?.[name] ?? pkg.packageJson.devDependencies?.[name];\n\n if (!declaredVersion) {\n missing.push({\n name,\n wantedVersion: version,\n });\n }\n\n return missing;\n }, []);\n};\n\nconst getDeclaredAdminPeerDeps = (packageJson: PackageJson): DeclaredAdminPeerDep[] => {\n return Object.entries(ADMIN_PEER_DEPS).reduce<DeclaredAdminPeerDep[]>(\n (declared, [name, version]) => {\n const declaredVersion =\n packageJson.dependencies?.[name] ?? packageJson.devDependencies?.[name];\n\n if (declaredVersion) {\n declared.push({\n name,\n wantedVersion: version,\n declaredVersion,\n });\n }\n\n return declared;\n },\n []\n );\n};\n\nconst getInstallCommandHint = (missing: AdminPeerDep[]) => {\n const packages = missing.map(({ name, wantedVersion }) => `${name}@${wantedVersion}`).join(' ');\n const packageManager = getPackageManager();\n\n if (packageManager === 'yarn') {\n return `yarn add ${packages}`;\n }\n\n if (packageManager === 'pnpm') {\n return `pnpm add --save-prod ${packages}`;\n }\n\n // Do not use --legacy-peer-deps: it rewrites package-lock in a mode that\n // breaks plain `npm ci` (#27019). Fresh apps install cleanly without it.\n return `npm install --save ${packages}`;\n};\n\nconst reportMissingAdminPeerDeps = (logger: Logger, missing: AdminPeerDep[]) => {\n logger.error(\n 'The Strapi admin is missing required dependencies:',\n os.EOL,\n missing.map(({ name, wantedVersion }) => ` - ${name}@${wantedVersion}`).join(os.EOL)\n );\n logger.error(\n 'Please install them manually before re-running this command:',\n os.EOL,\n ` ${getInstallCommandHint(missing)}`\n );\n};\n\n/**\n * Validates declared admin peer dependencies (versions and node_modules presence).\n */\nconst validateDeclaredAdminPeerDeps = async (cwd: string, logger: Logger) => {\n const pkg = await loadProjectPackageJson(cwd);\n const declared = getDeclaredAdminPeerDeps(pkg.packageJson);\n\n if (!declared.length) {\n return;\n }\n\n logger.debug('Loaded package.json:', os.EOL, pkg.packageJson);\n\n const errors: string[] = [];\n\n for (const dep of declared) {\n let minDeclaredVersion: SemVer | null = null;\n\n try {\n minDeclaredVersion = semver.minVersion(dep.declaredVersion);\n } catch {\n // Intentional fall-through (variable will be left as null, throwing below)\n }\n\n if (!minDeclaredVersion) {\n errors.push(\n `The declared dependency, ${dep.name} has an invalid version in package.json: ${dep.declaredVersion}`\n );\n } else if (!semver.satisfies(minDeclaredVersion, dep.wantedVersion)) {\n logger.warn(\n [\n `Declared version of ${dep.name} (${minDeclaredVersion}) is not compatible with the version required by Strapi (${dep.wantedVersion}).`,\n 'You may experience issues, we recommend you change this.',\n ].join(os.EOL)\n );\n }\n\n const installedVersion = await getModuleVersion(dep.name, cwd);\n\n if (!installedVersion) {\n errors.push(\n `The declared dependency, ${dep.name} is not installed. You should install before re-running this command`\n );\n } else if (!semver.satisfies(installedVersion, dep.wantedVersion)) {\n logger.warn(\n [\n `Declared version of ${dep.name} (${installedVersion}) is not compatible with the version required by Strapi (${dep.wantedVersion}).`,\n 'You may experience issues, we recommend you change this.',\n ].join(os.EOL)\n );\n }\n }\n\n if (errors.length > 0 && process.env.NODE_ENV === 'development') {\n throw new Error(`${os.EOL}- ${errors.join(`${os.EOL}- `)}`);\n }\n};\n\nconst installAdminPeerDeps = async (\n missing: AdminPeerDep[],\n { cwd, logger }: { cwd: string; logger: Logger }\n) => {\n const packageManager = getPackageManager();\n\n if (!packageManager) {\n logger.error(\n 'Could not find a supported package manager, please install the dependencies manually.'\n );\n process.exit(1);\n }\n\n const execOptions: CommonOptions<'utf8'> = {\n encoding: 'utf8',\n cwd,\n stdio: 'inherit',\n };\n\n const packages = missing.map(({ name, wantedVersion }) => `${name}@${wantedVersion}`);\n\n let result: ExecaReturnValue<string> | undefined;\n\n if (packageManager === 'npm') {\n const npmArgs = ['install', '--save', ...packages];\n logger.info(`Running 'npm ${npmArgs.join(' ')}'`);\n result = await execa('npm', npmArgs, execOptions);\n } else if (packageManager === 'yarn') {\n const yarnArgs = ['add', ...packages];\n logger.info(`Running 'yarn ${yarnArgs.join(' ')}'`);\n result = await execa('yarn', yarnArgs, execOptions);\n } else if (packageManager === 'pnpm') {\n const pnpmArgs = ['add', '--save-prod', ...packages];\n logger.info(`Running 'pnpm ${pnpmArgs.join(' ')}'`);\n result = await execa('pnpm', pnpmArgs, execOptions);\n }\n\n if (result?.exitCode || result?.failed) {\n throw new Error('Package installation failed');\n }\n};\n\nconst reexecCurrentCommand = async (cwd: string) => {\n const [file, ...args] = process.argv;\n\n /**\n * Re-run the same command after installation e.g. strapi build because the yarn.lock might\n * not be the same and could break installations. It's not the best solution, but it works.\n */\n await execa(file, args, { cwd, stdio: 'inherit' });\n};\n\nconst getModule = async (name: string, cwd: string): Promise<PackageJson | null> => {\n const modulePackagePath = resolveFrom.silent(cwd, path.join(name, 'package.json'));\n if (!modulePackagePath) {\n return null;\n }\n const file = await fs.readFile(modulePackagePath, 'utf8').then((res) => JSON.parse(res));\n\n return file;\n};\n\nconst getModuleVersion = async (name: string, cwd: string): Promise<string | null> => {\n const pkg = await getModule(name, cwd);\n\n return pkg?.version || null;\n};\n\nexport {\n ADMIN_PEER_DEPS,\n findUndeclaredAdminPeerDeps,\n validateDeclaredAdminPeerDeps,\n installAdminPeerDeps,\n reexecCurrentCommand,\n reportMissingAdminPeerDeps,\n getInstallCommandHint,\n MissingAdminPeerDepsError,\n getModule,\n hashPackageJson,\n readCachedHash,\n writeCachedHash,\n};\nexport type { AdminPeerDep, PackageJson };\n"],"names":["CACHE_PATH","path","join","hashPackageJson","cwd","content","fs","readFile","crypto","createHash","update","digest","readCachedHash","catch","writeCachedHash","hash","mkdir","dirname","recursive","writeFile","ADMIN_PEER_DEPS","react","MissingAdminPeerDepsError","Error","missing","name","loadProjectPackageJson","pkg","readPkgUp","packageJson","dependencies","findUndeclaredAdminPeerDeps","Object","entries","reduce","version","declaredVersion","devDependencies","push","wantedVersion","getDeclaredAdminPeerDeps","declared","getInstallCommandHint","packages","map","packageManager","getPackageManager","reportMissingAdminPeerDeps","logger","error","os","EOL","validateDeclaredAdminPeerDeps","length","debug","errors","dep","minDeclaredVersion","semver","minVersion","satisfies","warn","installedVersion","getModuleVersion","process","env","NODE_ENV","installAdminPeerDeps","exit","execOptions","encoding","stdio","result","npmArgs","info","execa","yarnArgs","pnpmArgs","exitCode","failed","reexecCurrentCommand","file","args","argv","getModule","modulePackagePath","resolveFrom","silent","then","res","JSON","parse"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.js","sources":["../../../../src/node/core/files.ts"],"sourcesContent":["import path from 'node:path';\nimport { access } from 'node:fs/promises';\nimport { register } from 'esbuild-register/dist/node';\n\n/**\n * @internal\n */\nconst pathExists = async (path: string) => {\n try {\n await access(path);\n return true;\n } catch
|
|
1
|
+
{"version":3,"file":"files.js","sources":["../../../../src/node/core/files.ts"],"sourcesContent":["import path from 'node:path';\nimport { access } from 'node:fs/promises';\nimport { register } from 'esbuild-register/dist/node';\n\n/**\n * @internal\n */\nconst pathExists = async (path: string) => {\n try {\n await access(path);\n return true;\n } catch {\n return false;\n }\n};\n\n/**\n * @internal\n */\nconst loadFile = async (path: string): Promise<undefined | any> => {\n if (await pathExists(path)) {\n const esbuildOptions: Parameters<typeof register>[0] = {\n extensions: ['.js', '.mjs', '.ts'],\n };\n\n const { unregister } = register(esbuildOptions);\n\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const mod = require(path);\n\n unregister();\n\n /**\n * handles esm or cjs exporting.\n */\n const file = mod?.default || mod || undefined;\n\n return file;\n }\n\n return undefined;\n};\n\n/**\n * @internal\n *\n * @description Converts a system path to a module path mainly for `Windows` systems.\n * where the path separator is `\\` instead of `/`, on linux systems the path separator\n * is identical to the module path separator.\n */\nconst convertSystemPathToModulePath = (sysPath: string) => {\n if (process.platform === 'win32') {\n return sysPath.split(path.sep).join(path.posix.sep);\n }\n\n return sysPath;\n};\n\n/**\n * @internal\n *\n * @description Converts a module path to a system path, again largely used for Windows systems.\n * The original use case was plugins where the resolve path was in module format but we want to\n * have it relative to the runtime directory.\n */\nconst convertModulePathToSystemPath = (modulePath: string) => {\n if (process.platform === 'win32') {\n return modulePath.split(path.posix.sep).join(path.sep);\n }\n\n return modulePath;\n};\n\nexport { pathExists, loadFile, convertSystemPathToModulePath, convertModulePathToSystemPath };\n"],"names":["pathExists","path","access","loadFile","esbuildOptions","extensions","unregister","register","mod","require","file","default","undefined","convertSystemPathToModulePath","sysPath","process","platform","split","sep","join","posix","convertModulePathToSystemPath","modulePath"],"mappings":";;;;;;;;;;AAIA;;IAGA,MAAMA,aAAa,OAAOC,IAAAA,GAAAA;IACxB,IAAI;AACF,QAAA,MAAMC,SAAAA,CAAOD,IAAAA,CAAAA;QACb,OAAO,IAAA;AACT,IAAA,CAAA,CAAE,OAAM;QACN,OAAO,KAAA;AACT,IAAA;AACF;AAEA;;IAGA,MAAME,WAAW,OAAOF,IAAAA,GAAAA;IACtB,IAAI,MAAMD,WAAWC,IAAAA,CAAAA,EAAO;AAC1B,QAAA,MAAMG,cAAAA,GAAiD;YACrDC,UAAAA,EAAY;AAAC,gBAAA,KAAA;AAAO,gBAAA,MAAA;AAAQ,gBAAA;AAAM;AACpC,SAAA;AAEA,QAAA,MAAM,EAAEC,UAAU,EAAE,GAAGC,aAAAA,CAASH,cAAAA,CAAAA;;AAGhC,QAAA,MAAMI,MAAMC,OAAAA,CAAQR,IAAAA,CAAAA;AAEpBK,QAAAA,UAAAA,EAAAA;AAEA;;AAEC,QACD,MAAMI,IAAAA,GAAOF,GAAAA,EAAKG,OAAAA,IAAWH,GAAAA,IAAOI,SAAAA;QAEpC,OAAOF,IAAAA;AACT,IAAA;IAEA,OAAOE,SAAAA;AACT;AAEA;;;;;;IAOA,MAAMC,gCAAgC,CAACC,OAAAA,GAAAA;IACrC,IAAIC,OAAAA,CAAQC,QAAQ,KAAK,OAAA,EAAS;QAChC,OAAOF,OAAAA,CAAQG,KAAK,CAAChB,qBAAAA,CAAKiB,GAAG,CAAA,CAAEC,IAAI,CAAClB,qBAAAA,CAAKmB,KAAK,CAACF,GAAG,CAAA;AACpD,IAAA;IAEA,OAAOJ,OAAAA;AACT;AAEA;;;;;;IAOA,MAAMO,gCAAgC,CAACC,UAAAA,GAAAA;IACrC,IAAIP,OAAAA,CAAQC,QAAQ,KAAK,OAAA,EAAS;QAChC,OAAOM,UAAAA,CAAWL,KAAK,CAAChB,qBAAAA,CAAKmB,KAAK,CAACF,GAAG,CAAA,CAAEC,IAAI,CAAClB,qBAAAA,CAAKiB,GAAG,CAAA;AACvD,IAAA;IAEA,OAAOI,UAAAA;AACT;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.mjs","sources":["../../../../src/node/core/files.ts"],"sourcesContent":["import path from 'node:path';\nimport { access } from 'node:fs/promises';\nimport { register } from 'esbuild-register/dist/node';\n\n/**\n * @internal\n */\nconst pathExists = async (path: string) => {\n try {\n await access(path);\n return true;\n } catch
|
|
1
|
+
{"version":3,"file":"files.mjs","sources":["../../../../src/node/core/files.ts"],"sourcesContent":["import path from 'node:path';\nimport { access } from 'node:fs/promises';\nimport { register } from 'esbuild-register/dist/node';\n\n/**\n * @internal\n */\nconst pathExists = async (path: string) => {\n try {\n await access(path);\n return true;\n } catch {\n return false;\n }\n};\n\n/**\n * @internal\n */\nconst loadFile = async (path: string): Promise<undefined | any> => {\n if (await pathExists(path)) {\n const esbuildOptions: Parameters<typeof register>[0] = {\n extensions: ['.js', '.mjs', '.ts'],\n };\n\n const { unregister } = register(esbuildOptions);\n\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const mod = require(path);\n\n unregister();\n\n /**\n * handles esm or cjs exporting.\n */\n const file = mod?.default || mod || undefined;\n\n return file;\n }\n\n return undefined;\n};\n\n/**\n * @internal\n *\n * @description Converts a system path to a module path mainly for `Windows` systems.\n * where the path separator is `\\` instead of `/`, on linux systems the path separator\n * is identical to the module path separator.\n */\nconst convertSystemPathToModulePath = (sysPath: string) => {\n if (process.platform === 'win32') {\n return sysPath.split(path.sep).join(path.posix.sep);\n }\n\n return sysPath;\n};\n\n/**\n * @internal\n *\n * @description Converts a module path to a system path, again largely used for Windows systems.\n * The original use case was plugins where the resolve path was in module format but we want to\n * have it relative to the runtime directory.\n */\nconst convertModulePathToSystemPath = (modulePath: string) => {\n if (process.platform === 'win32') {\n return modulePath.split(path.posix.sep).join(path.sep);\n }\n\n return modulePath;\n};\n\nexport { pathExists, loadFile, convertSystemPathToModulePath, convertModulePathToSystemPath };\n"],"names":["pathExists","path","access","loadFile","esbuildOptions","extensions","unregister","register","mod","require","file","default","undefined","convertSystemPathToModulePath","sysPath","process","platform","split","sep","join","posix","convertModulePathToSystemPath","modulePath"],"mappings":";;;;AAIA;;IAGA,MAAMA,aAAa,OAAOC,IAAAA,GAAAA;IACxB,IAAI;AACF,QAAA,MAAMC,MAAAA,CAAOD,IAAAA,CAAAA;QACb,OAAO,IAAA;AACT,IAAA,CAAA,CAAE,OAAM;QACN,OAAO,KAAA;AACT,IAAA;AACF;AAEA;;IAGA,MAAME,WAAW,OAAOF,IAAAA,GAAAA;IACtB,IAAI,MAAMD,WAAWC,IAAAA,CAAAA,EAAO;AAC1B,QAAA,MAAMG,cAAAA,GAAiD;YACrDC,UAAAA,EAAY;AAAC,gBAAA,KAAA;AAAO,gBAAA,MAAA;AAAQ,gBAAA;AAAM;AACpC,SAAA;AAEA,QAAA,MAAM,EAAEC,UAAU,EAAE,GAAGC,QAAAA,CAASH,cAAAA,CAAAA;;AAGhC,QAAA,MAAMI,MAAMC,OAAAA,CAAQR,IAAAA,CAAAA;AAEpBK,QAAAA,UAAAA,EAAAA;AAEA;;AAEC,QACD,MAAMI,IAAAA,GAAOF,GAAAA,EAAKG,OAAAA,IAAWH,GAAAA,IAAOI,SAAAA;QAEpC,OAAOF,IAAAA;AACT,IAAA;IAEA,OAAOE,SAAAA;AACT;AAEA;;;;;;IAOA,MAAMC,gCAAgC,CAACC,OAAAA,GAAAA;IACrC,IAAIC,OAAAA,CAAQC,QAAQ,KAAK,OAAA,EAAS;QAChC,OAAOF,OAAAA,CAAQG,KAAK,CAAChB,IAAAA,CAAKiB,GAAG,CAAA,CAAEC,IAAI,CAAClB,IAAAA,CAAKmB,KAAK,CAACF,GAAG,CAAA;AACpD,IAAA;IAEA,OAAOJ,OAAAA;AACT;AAEA;;;;;;IAOA,MAAMO,gCAAgC,CAACC,UAAAA,GAAAA;IACrC,IAAIP,OAAAA,CAAQC,QAAQ,KAAK,OAAA,EAAS;QAChC,OAAOM,UAAAA,CAAWL,KAAK,CAAChB,IAAAA,CAAKmB,KAAK,CAACF,GAAG,CAAA,CAAEC,IAAI,CAAClB,IAAAA,CAAKiB,GAAG,CAAA;AACvD,IAAA;IAEA,OAAOI,UAAAA;AACT;;;;"}
|
|
@@ -49,7 +49,7 @@ const resolveBaseConfig = async (ctx)=>{
|
|
|
49
49
|
// - The admin entry host (@strapi/strapi) MUST NOT be in optimizeDeps.exclude.
|
|
50
50
|
// When design-system is linked (portal:, file:, yarn link), exclude from pre-bundling
|
|
51
51
|
// so changes are reflected without clearing node_modules/.strapi/vite cache.
|
|
52
|
-
// Also skip pre-built ESM plugin UI
|
|
52
|
+
// Also skip allowlisted / opt-in pre-built ESM plugin UI kits (see collectAdminOptimizeDepsExclude).
|
|
53
53
|
...optimizeDepsExclude.length > 0 && {
|
|
54
54
|
exclude: optimizeDepsExclude
|
|
55
55
|
},
|
|
@@ -1 +1 @@
|
|
|
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 // 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 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","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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"}
|
|
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 // 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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"}
|
|
@@ -47,7 +47,7 @@ const resolveBaseConfig = async (ctx)=>{
|
|
|
47
47
|
// - The admin entry host (@strapi/strapi) MUST NOT be in optimizeDeps.exclude.
|
|
48
48
|
// When design-system is linked (portal:, file:, yarn link), exclude from pre-bundling
|
|
49
49
|
// so changes are reflected without clearing node_modules/.strapi/vite cache.
|
|
50
|
-
// Also skip pre-built ESM plugin UI
|
|
50
|
+
// Also skip allowlisted / opt-in pre-built ESM plugin UI kits (see collectAdminOptimizeDepsExclude).
|
|
51
51
|
...optimizeDepsExclude.length > 0 && {
|
|
52
52
|
exclude: optimizeDepsExclude
|
|
53
53
|
},
|
|
@@ -1 +1 @@
|
|
|
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 // 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 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","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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"}
|
|
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 // 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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@strapi/strapi",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.52.0",
|
|
4
4
|
"description": "An open source headless CMS solution to create and manage your own API. It provides a powerful dashboard and features to make your life easier. Databases supported: MySQL, MariaDB, PostgreSQL, SQLite",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"strapi",
|
|
@@ -110,25 +110,25 @@
|
|
|
110
110
|
},
|
|
111
111
|
"dependencies": {
|
|
112
112
|
"@pmmmwh/react-refresh-webpack-plugin": "0.5.17",
|
|
113
|
-
"@strapi/admin": "5.
|
|
114
|
-
"@strapi/cloud-cli": "5.
|
|
115
|
-
"@strapi/content-manager": "5.
|
|
116
|
-
"@strapi/content-releases": "5.
|
|
117
|
-
"@strapi/content-type-builder": "5.
|
|
118
|
-
"@strapi/core": "5.
|
|
119
|
-
"@strapi/data-transfer": "5.
|
|
120
|
-
"@strapi/database": "5.
|
|
121
|
-
"@strapi/email": "5.
|
|
122
|
-
"@strapi/generators": "5.
|
|
123
|
-
"@strapi/i18n": "5.
|
|
124
|
-
"@strapi/logger": "5.
|
|
125
|
-
"@strapi/openapi": "5.
|
|
126
|
-
"@strapi/permissions": "5.
|
|
127
|
-
"@strapi/review-workflows": "5.
|
|
128
|
-
"@strapi/types": "5.
|
|
129
|
-
"@strapi/typescript-utils": "5.
|
|
130
|
-
"@strapi/upload": "5.
|
|
131
|
-
"@strapi/utils": "5.
|
|
113
|
+
"@strapi/admin": "5.52.0",
|
|
114
|
+
"@strapi/cloud-cli": "5.52.0",
|
|
115
|
+
"@strapi/content-manager": "5.52.0",
|
|
116
|
+
"@strapi/content-releases": "5.52.0",
|
|
117
|
+
"@strapi/content-type-builder": "5.52.0",
|
|
118
|
+
"@strapi/core": "5.52.0",
|
|
119
|
+
"@strapi/data-transfer": "5.52.0",
|
|
120
|
+
"@strapi/database": "5.52.0",
|
|
121
|
+
"@strapi/email": "5.52.0",
|
|
122
|
+
"@strapi/generators": "5.52.0",
|
|
123
|
+
"@strapi/i18n": "5.52.0",
|
|
124
|
+
"@strapi/logger": "5.52.0",
|
|
125
|
+
"@strapi/openapi": "5.52.0",
|
|
126
|
+
"@strapi/permissions": "5.52.0",
|
|
127
|
+
"@strapi/review-workflows": "5.52.0",
|
|
128
|
+
"@strapi/types": "5.52.0",
|
|
129
|
+
"@strapi/typescript-utils": "5.52.0",
|
|
130
|
+
"@strapi/upload": "5.52.0",
|
|
131
|
+
"@strapi/utils": "5.52.0",
|
|
132
132
|
"@types/nodemon": "1.19.6",
|
|
133
133
|
"@vitejs/plugin-react-swc": "3.11.0",
|
|
134
134
|
"boxen": "5.1.2",
|
|
@@ -158,7 +158,7 @@
|
|
|
158
158
|
"ora": "5.4.1",
|
|
159
159
|
"outdent": "0.8.0",
|
|
160
160
|
"pkg-up": "3.1.0",
|
|
161
|
-
"prettier": "3.
|
|
161
|
+
"prettier": "3.6.2",
|
|
162
162
|
"react-refresh": "0.14.0",
|
|
163
163
|
"read-pkg-up": "7.0.1",
|
|
164
164
|
"resolve-from": "5.0.0",
|
|
@@ -166,7 +166,7 @@
|
|
|
166
166
|
"style-loader": "3.3.4",
|
|
167
167
|
"typescript": "5.9.3",
|
|
168
168
|
"vite": "5.4.21",
|
|
169
|
-
"webpack": "5.
|
|
169
|
+
"webpack": "5.109.2",
|
|
170
170
|
"webpack-bundle-analyzer": "5.3.0",
|
|
171
171
|
"webpack-dev-middleware": "6.1.3",
|
|
172
172
|
"webpack-hot-middleware": "2.26.1",
|
|
@@ -180,11 +180,11 @@
|
|
|
180
180
|
"@types/node": "20.19.41",
|
|
181
181
|
"@types/webpack-bundle-analyzer": "4.7.0",
|
|
182
182
|
"@types/webpack-hot-middleware": "2.25.12",
|
|
183
|
-
"eslint-config-custom": "5.
|
|
183
|
+
"eslint-config-custom": "5.52.0",
|
|
184
184
|
"jest": "29.6.0",
|
|
185
185
|
"react": "18.3.1",
|
|
186
186
|
"react-dom": "18.3.1",
|
|
187
|
-
"tsconfig": "5.
|
|
187
|
+
"tsconfig": "5.52.0",
|
|
188
188
|
"yalc": "1.0.0-pre.53"
|
|
189
189
|
},
|
|
190
190
|
"peerDependencies": {
|