@strapi/upgrade 5.48.0 → 5.48.1
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/modules/upgrader/upgrader.d.ts +6 -0
- package/dist/modules/upgrader/upgrader.d.ts.map +1 -1
- package/dist/package.json.js +1 -1
- package/dist/package.json.mjs +1 -1
- package/dist/src/cli/commands/codemods.js +1 -0
- package/dist/src/cli/commands/codemods.js.map +1 -1
- package/dist/src/cli/commands/codemods.mjs +1 -0
- package/dist/src/cli/commands/codemods.mjs.map +1 -1
- package/dist/src/modules/upgrader/upgrader.js +36 -1
- package/dist/src/modules/upgrader/upgrader.js.map +1 -1
- package/dist/src/modules/upgrader/upgrader.mjs +36 -1
- package/dist/src/modules/upgrader/upgrader.mjs.map +1 -1
- package/package.json +5 -5
|
@@ -34,6 +34,12 @@ export declare class Upgrader implements UpgraderInterface {
|
|
|
34
34
|
private updateDependencies;
|
|
35
35
|
private getScopedStrapiDependencies;
|
|
36
36
|
private installDependencies;
|
|
37
|
+
/**
|
|
38
|
+
* Removes only `node_modules/.strapi/vite` (Vite `cacheDir` for the admin panel). Generated
|
|
39
|
+
* cache — not user source. Optionally gated by `confirm` when the CLI passes a callback so
|
|
40
|
+
* users know the next `strapi develop` may spend longer once re-optimizing dependencies.
|
|
41
|
+
*/
|
|
42
|
+
private clearStrapiAdminViteCacheAfterUpgrade;
|
|
37
43
|
private runCodemods;
|
|
38
44
|
}
|
|
39
45
|
export declare const upgraderFactory: (project: AppProject, target: Version.ReleaseType | Version.SemVer, npmPackage: NPM.Package) => Upgrader;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upgrader.d.ts","sourceRoot":"","sources":["../../../src/modules/upgrader/upgrader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"upgrader.d.ts","sourceRoot":"","sources":["../../../src/modules/upgrader/upgrader.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,QAAQ,IAAI,iBAAiB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC5E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAI5D,qBAAa,QAAS,YAAW,iBAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;IAErC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAc;IAEzC,OAAO,CAAC,MAAM,CAAiB;IAE/B,OAAO,CAAC,cAAc,CAAkB;IAExC,OAAO,CAAC,KAAK,CAAU;IAEvB,OAAO,CAAC,MAAM,CAAgB;IAE9B,OAAO,CAAC,YAAY,CAA4B;IAEhD,OAAO,CAAC,oBAAoB,CAA8B;gBAE9C,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,CAAC,OAAO;IAehF,aAAa,IAAI,GAAG,CAAC,OAAO;IAI5B,UAAU,IAAI,UAAU;IAIxB,SAAS,IAAI,OAAO,CAAC,MAAM;IAI3B,eAAe,CAAC,YAAY,EAAE,WAAW,CAAC,WAAW,EAAE;IAKvD,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM;IAKhC,kBAAkB;IAqBlB,sBAAsB,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM;IAU7C,SAAS,CAAC,MAAM,EAAE,MAAM;IAKxB,SAAS,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI;IAK/C,GAAG,CAAC,OAAO,GAAE,OAAc;IAK3B,cAAc,CAAC,WAAW,EAAE,WAAW,CAAC,WAAW;IAW7C,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC;IAgDjC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;YAQlC,iBAAiB;YAejB,uBAAuB;YAWvB,mBAAmB;YAyBnB,kBAAkB;IA+ChC,OAAO,CAAC,2BAA2B;YAkBrB,mBAAmB;IAoBjC;;;;OAIG;YACW,qCAAqC;YAqCrC,WAAW;CAW1B;AAyCD,eAAO,MAAM,eAAe,YACjB,UAAU,UACX,QAAQ,WAAW,GAAG,QAAQ,MAAM,cAChC,IAAI,OAAO,aAgBxB,CAAC"}
|
package/dist/package.json.js
CHANGED
package/dist/package.json.mjs
CHANGED
|
@@ -16,6 +16,7 @@ require('jscodeshift/src/Runner');
|
|
|
16
16
|
require('lodash/fp');
|
|
17
17
|
require('esbuild-register/dist/node');
|
|
18
18
|
require('../../modules/project/constants.js');
|
|
19
|
+
require('node:fs/promises');
|
|
19
20
|
require('@strapi/utils');
|
|
20
21
|
require('../../modules/codemod/constants.js');
|
|
21
22
|
require('../../modules/codemod-repository/constants.js');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codemods.js","sources":["../../../../src/cli/commands/codemods.ts"],"sourcesContent":["import prompts from 'prompts';\n\nimport type { Command } from 'commander';\nimport { loggerFactory } from '../../modules/logger';\nimport { Version } from '../../modules/version';\nimport { handleError } from '../errors';\nimport * as tasks from '../../tasks';\nimport { debugOption, dryOption, projectPathOption, rangeOption, silentOption } from '../options';\n\nimport type {\n CLIListCodemodsOptions,\n CLIRunCodemodsOptions,\n ListCodemodsCommand,\n RunCodemodsCommand,\n} from '../types';\nimport type { Codemod } from '../../modules/codemod';\n\nconst DEFAULT_TARGET = Version.ReleaseType.Major;\n\nexport const runCodemods: RunCodemodsCommand = async (options) => {\n const { silent, debug } = options;\n const logger = loggerFactory({ silent, debug });\n\n logger.warn(\n \"Please make sure you've created a backup of your codebase and files before running the codemods\"\n );\n\n const confirm = async (message: string) => {\n const { confirm } = await prompts({\n name: 'confirm',\n type: 'confirm',\n message,\n });\n\n // If confirm is undefined (Ctrl + C), default to false\n return confirm ?? false;\n };\n\n const selectCodemods = async (codemods: Codemod.VersionedCollection[]) => {\n const selectableCodemods = codemods\n .map(({ version, codemods }) =>\n codemods.map((codemod) => ({\n title: `(${version}) ${codemod.format()}`,\n value: codemod,\n selected: true,\n }))\n )\n .flat();\n\n if (selectableCodemods.length === 0) {\n logger.info('No codemods to run');\n return [];\n }\n\n const { selectedCodemods }: { selectedCodemods: Codemod.Codemod[] } = await prompts({\n type: 'autocompleteMultiselect',\n name: 'selectedCodemods',\n message: 'Choose the codemods you would like to run:',\n choices: selectableCodemods,\n });\n\n if (!selectedCodemods || selectedCodemods.length === 0) {\n logger.info('No codemods selected');\n return [];\n }\n\n return selectedCodemods.map<Codemod.VersionedCollection>((codemod) => ({\n version: codemod.version,\n codemods: [codemod],\n }));\n };\n\n return tasks\n .runCodemods({\n logger,\n confirm,\n selectCodemods,\n dry: options.dry,\n cwd: options.projectPath,\n target: options.range ?? DEFAULT_TARGET,\n uid: options.uid,\n })\n .catch((err) => handleError(err, options.silent));\n};\n\nexport const listCodemods: ListCodemodsCommand = async (options) => {\n const { silent, debug } = options;\n const logger = loggerFactory({ silent, debug });\n\n return tasks\n .listCodemods({\n cwd: options.projectPath,\n target: options.range ?? DEFAULT_TARGET,\n logger,\n })\n .catch((err) => handleError(err, options.silent));\n};\n\n/**\n * Registers codemods related commands.\n */\nexport const register = (program: Command) => {\n const codemodsCommand = program.command('codemods');\n\n // upgrade codemods run [options] [uid]\n codemodsCommand\n .command('run [uid]')\n .description(\n `\nExecutes a set of codemods on the current project.\n\nIf the optional UID argument is provided, the command specifically runs the codemod associated with that UID.\nWithout the UID, the command produces a list of all available codemods for your project.\n\nBy default, when executed on a Strapi application project, it offers codemods matching the current major version of the app.\nWhen executed on a Strapi plugin project, it shows every codemods.\n`\n )\n .addOption(projectPathOption)\n .addOption(dryOption)\n .addOption(debugOption)\n .addOption(silentOption)\n .addOption(rangeOption)\n .action(async (uid: string | undefined, options: CLIRunCodemodsOptions) => {\n return runCodemods({ ...options, uid });\n });\n\n // upgrade codemods ls [options]\n codemodsCommand\n .command('ls')\n .description(`List available codemods`)\n .addOption(projectPathOption)\n .addOption(debugOption)\n .addOption(silentOption)\n .addOption(rangeOption)\n .action(async (options: CLIListCodemodsOptions) => {\n return listCodemods(options);\n });\n};\n"],"names":["DEFAULT_TARGET","Version","Major","runCodemods","options","silent","debug","logger","loggerFactory","warn","selectCodemods","codemods","selectableCodemods","map","version","codemod","title","format","value","selected","flat","length","info","selectedCodemods","prompts","type","name","message","choices","tasks","confirm","dry","cwd","projectPath","target","range","uid","catch","err","handleError","listCodemods","register","program","codemodsCommand","command","description","addOption","projectPathOption","dryOption","debugOption","silentOption","rangeOption","action"],"mappings":"
|
|
1
|
+
{"version":3,"file":"codemods.js","sources":["../../../../src/cli/commands/codemods.ts"],"sourcesContent":["import prompts from 'prompts';\n\nimport type { Command } from 'commander';\nimport { loggerFactory } from '../../modules/logger';\nimport { Version } from '../../modules/version';\nimport { handleError } from '../errors';\nimport * as tasks from '../../tasks';\nimport { debugOption, dryOption, projectPathOption, rangeOption, silentOption } from '../options';\n\nimport type {\n CLIListCodemodsOptions,\n CLIRunCodemodsOptions,\n ListCodemodsCommand,\n RunCodemodsCommand,\n} from '../types';\nimport type { Codemod } from '../../modules/codemod';\n\nconst DEFAULT_TARGET = Version.ReleaseType.Major;\n\nexport const runCodemods: RunCodemodsCommand = async (options) => {\n const { silent, debug } = options;\n const logger = loggerFactory({ silent, debug });\n\n logger.warn(\n \"Please make sure you've created a backup of your codebase and files before running the codemods\"\n );\n\n const confirm = async (message: string) => {\n const { confirm } = await prompts({\n name: 'confirm',\n type: 'confirm',\n message,\n });\n\n // If confirm is undefined (Ctrl + C), default to false\n return confirm ?? false;\n };\n\n const selectCodemods = async (codemods: Codemod.VersionedCollection[]) => {\n const selectableCodemods = codemods\n .map(({ version, codemods }) =>\n codemods.map((codemod) => ({\n title: `(${version}) ${codemod.format()}`,\n value: codemod,\n selected: true,\n }))\n )\n .flat();\n\n if (selectableCodemods.length === 0) {\n logger.info('No codemods to run');\n return [];\n }\n\n const { selectedCodemods }: { selectedCodemods: Codemod.Codemod[] } = await prompts({\n type: 'autocompleteMultiselect',\n name: 'selectedCodemods',\n message: 'Choose the codemods you would like to run:',\n choices: selectableCodemods,\n });\n\n if (!selectedCodemods || selectedCodemods.length === 0) {\n logger.info('No codemods selected');\n return [];\n }\n\n return selectedCodemods.map<Codemod.VersionedCollection>((codemod) => ({\n version: codemod.version,\n codemods: [codemod],\n }));\n };\n\n return tasks\n .runCodemods({\n logger,\n confirm,\n selectCodemods,\n dry: options.dry,\n cwd: options.projectPath,\n target: options.range ?? DEFAULT_TARGET,\n uid: options.uid,\n })\n .catch((err) => handleError(err, options.silent));\n};\n\nexport const listCodemods: ListCodemodsCommand = async (options) => {\n const { silent, debug } = options;\n const logger = loggerFactory({ silent, debug });\n\n return tasks\n .listCodemods({\n cwd: options.projectPath,\n target: options.range ?? DEFAULT_TARGET,\n logger,\n })\n .catch((err) => handleError(err, options.silent));\n};\n\n/**\n * Registers codemods related commands.\n */\nexport const register = (program: Command) => {\n const codemodsCommand = program.command('codemods');\n\n // upgrade codemods run [options] [uid]\n codemodsCommand\n .command('run [uid]')\n .description(\n `\nExecutes a set of codemods on the current project.\n\nIf the optional UID argument is provided, the command specifically runs the codemod associated with that UID.\nWithout the UID, the command produces a list of all available codemods for your project.\n\nBy default, when executed on a Strapi application project, it offers codemods matching the current major version of the app.\nWhen executed on a Strapi plugin project, it shows every codemods.\n`\n )\n .addOption(projectPathOption)\n .addOption(dryOption)\n .addOption(debugOption)\n .addOption(silentOption)\n .addOption(rangeOption)\n .action(async (uid: string | undefined, options: CLIRunCodemodsOptions) => {\n return runCodemods({ ...options, uid });\n });\n\n // upgrade codemods ls [options]\n codemodsCommand\n .command('ls')\n .description(`List available codemods`)\n .addOption(projectPathOption)\n .addOption(debugOption)\n .addOption(silentOption)\n .addOption(rangeOption)\n .action(async (options: CLIListCodemodsOptions) => {\n return listCodemods(options);\n });\n};\n"],"names":["DEFAULT_TARGET","Version","Major","runCodemods","options","silent","debug","logger","loggerFactory","warn","selectCodemods","codemods","selectableCodemods","map","version","codemod","title","format","value","selected","flat","length","info","selectedCodemods","prompts","type","name","message","choices","tasks","confirm","dry","cwd","projectPath","target","range","uid","catch","err","handleError","listCodemods","register","program","codemodsCommand","command","description","addOption","projectPathOption","dryOption","debugOption","silentOption","rangeOption","action"],"mappings":"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"}
|
|
@@ -14,6 +14,7 @@ import 'jscodeshift/src/Runner';
|
|
|
14
14
|
import 'lodash/fp';
|
|
15
15
|
import 'esbuild-register/dist/node';
|
|
16
16
|
import '../../modules/project/constants.mjs';
|
|
17
|
+
import 'node:fs/promises';
|
|
17
18
|
import '@strapi/utils';
|
|
18
19
|
import '../../modules/codemod/constants.mjs';
|
|
19
20
|
import '../../modules/codemod-repository/constants.mjs';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codemods.mjs","sources":["../../../../src/cli/commands/codemods.ts"],"sourcesContent":["import prompts from 'prompts';\n\nimport type { Command } from 'commander';\nimport { loggerFactory } from '../../modules/logger';\nimport { Version } from '../../modules/version';\nimport { handleError } from '../errors';\nimport * as tasks from '../../tasks';\nimport { debugOption, dryOption, projectPathOption, rangeOption, silentOption } from '../options';\n\nimport type {\n CLIListCodemodsOptions,\n CLIRunCodemodsOptions,\n ListCodemodsCommand,\n RunCodemodsCommand,\n} from '../types';\nimport type { Codemod } from '../../modules/codemod';\n\nconst DEFAULT_TARGET = Version.ReleaseType.Major;\n\nexport const runCodemods: RunCodemodsCommand = async (options) => {\n const { silent, debug } = options;\n const logger = loggerFactory({ silent, debug });\n\n logger.warn(\n \"Please make sure you've created a backup of your codebase and files before running the codemods\"\n );\n\n const confirm = async (message: string) => {\n const { confirm } = await prompts({\n name: 'confirm',\n type: 'confirm',\n message,\n });\n\n // If confirm is undefined (Ctrl + C), default to false\n return confirm ?? false;\n };\n\n const selectCodemods = async (codemods: Codemod.VersionedCollection[]) => {\n const selectableCodemods = codemods\n .map(({ version, codemods }) =>\n codemods.map((codemod) => ({\n title: `(${version}) ${codemod.format()}`,\n value: codemod,\n selected: true,\n }))\n )\n .flat();\n\n if (selectableCodemods.length === 0) {\n logger.info('No codemods to run');\n return [];\n }\n\n const { selectedCodemods }: { selectedCodemods: Codemod.Codemod[] } = await prompts({\n type: 'autocompleteMultiselect',\n name: 'selectedCodemods',\n message: 'Choose the codemods you would like to run:',\n choices: selectableCodemods,\n });\n\n if (!selectedCodemods || selectedCodemods.length === 0) {\n logger.info('No codemods selected');\n return [];\n }\n\n return selectedCodemods.map<Codemod.VersionedCollection>((codemod) => ({\n version: codemod.version,\n codemods: [codemod],\n }));\n };\n\n return tasks\n .runCodemods({\n logger,\n confirm,\n selectCodemods,\n dry: options.dry,\n cwd: options.projectPath,\n target: options.range ?? DEFAULT_TARGET,\n uid: options.uid,\n })\n .catch((err) => handleError(err, options.silent));\n};\n\nexport const listCodemods: ListCodemodsCommand = async (options) => {\n const { silent, debug } = options;\n const logger = loggerFactory({ silent, debug });\n\n return tasks\n .listCodemods({\n cwd: options.projectPath,\n target: options.range ?? DEFAULT_TARGET,\n logger,\n })\n .catch((err) => handleError(err, options.silent));\n};\n\n/**\n * Registers codemods related commands.\n */\nexport const register = (program: Command) => {\n const codemodsCommand = program.command('codemods');\n\n // upgrade codemods run [options] [uid]\n codemodsCommand\n .command('run [uid]')\n .description(\n `\nExecutes a set of codemods on the current project.\n\nIf the optional UID argument is provided, the command specifically runs the codemod associated with that UID.\nWithout the UID, the command produces a list of all available codemods for your project.\n\nBy default, when executed on a Strapi application project, it offers codemods matching the current major version of the app.\nWhen executed on a Strapi plugin project, it shows every codemods.\n`\n )\n .addOption(projectPathOption)\n .addOption(dryOption)\n .addOption(debugOption)\n .addOption(silentOption)\n .addOption(rangeOption)\n .action(async (uid: string | undefined, options: CLIRunCodemodsOptions) => {\n return runCodemods({ ...options, uid });\n });\n\n // upgrade codemods ls [options]\n codemodsCommand\n .command('ls')\n .description(`List available codemods`)\n .addOption(projectPathOption)\n .addOption(debugOption)\n .addOption(silentOption)\n .addOption(rangeOption)\n .action(async (options: CLIListCodemodsOptions) => {\n return listCodemods(options);\n });\n};\n"],"names":["DEFAULT_TARGET","Version","Major","runCodemods","options","silent","debug","logger","loggerFactory","warn","selectCodemods","codemods","selectableCodemods","map","version","codemod","title","format","value","selected","flat","length","info","selectedCodemods","prompts","type","name","message","choices","tasks","confirm","dry","cwd","projectPath","target","range","uid","catch","err","handleError","listCodemods","register","program","codemodsCommand","command","description","addOption","projectPathOption","dryOption","debugOption","silentOption","rangeOption","action"],"mappings":"
|
|
1
|
+
{"version":3,"file":"codemods.mjs","sources":["../../../../src/cli/commands/codemods.ts"],"sourcesContent":["import prompts from 'prompts';\n\nimport type { Command } from 'commander';\nimport { loggerFactory } from '../../modules/logger';\nimport { Version } from '../../modules/version';\nimport { handleError } from '../errors';\nimport * as tasks from '../../tasks';\nimport { debugOption, dryOption, projectPathOption, rangeOption, silentOption } from '../options';\n\nimport type {\n CLIListCodemodsOptions,\n CLIRunCodemodsOptions,\n ListCodemodsCommand,\n RunCodemodsCommand,\n} from '../types';\nimport type { Codemod } from '../../modules/codemod';\n\nconst DEFAULT_TARGET = Version.ReleaseType.Major;\n\nexport const runCodemods: RunCodemodsCommand = async (options) => {\n const { silent, debug } = options;\n const logger = loggerFactory({ silent, debug });\n\n logger.warn(\n \"Please make sure you've created a backup of your codebase and files before running the codemods\"\n );\n\n const confirm = async (message: string) => {\n const { confirm } = await prompts({\n name: 'confirm',\n type: 'confirm',\n message,\n });\n\n // If confirm is undefined (Ctrl + C), default to false\n return confirm ?? false;\n };\n\n const selectCodemods = async (codemods: Codemod.VersionedCollection[]) => {\n const selectableCodemods = codemods\n .map(({ version, codemods }) =>\n codemods.map((codemod) => ({\n title: `(${version}) ${codemod.format()}`,\n value: codemod,\n selected: true,\n }))\n )\n .flat();\n\n if (selectableCodemods.length === 0) {\n logger.info('No codemods to run');\n return [];\n }\n\n const { selectedCodemods }: { selectedCodemods: Codemod.Codemod[] } = await prompts({\n type: 'autocompleteMultiselect',\n name: 'selectedCodemods',\n message: 'Choose the codemods you would like to run:',\n choices: selectableCodemods,\n });\n\n if (!selectedCodemods || selectedCodemods.length === 0) {\n logger.info('No codemods selected');\n return [];\n }\n\n return selectedCodemods.map<Codemod.VersionedCollection>((codemod) => ({\n version: codemod.version,\n codemods: [codemod],\n }));\n };\n\n return tasks\n .runCodemods({\n logger,\n confirm,\n selectCodemods,\n dry: options.dry,\n cwd: options.projectPath,\n target: options.range ?? DEFAULT_TARGET,\n uid: options.uid,\n })\n .catch((err) => handleError(err, options.silent));\n};\n\nexport const listCodemods: ListCodemodsCommand = async (options) => {\n const { silent, debug } = options;\n const logger = loggerFactory({ silent, debug });\n\n return tasks\n .listCodemods({\n cwd: options.projectPath,\n target: options.range ?? DEFAULT_TARGET,\n logger,\n })\n .catch((err) => handleError(err, options.silent));\n};\n\n/**\n * Registers codemods related commands.\n */\nexport const register = (program: Command) => {\n const codemodsCommand = program.command('codemods');\n\n // upgrade codemods run [options] [uid]\n codemodsCommand\n .command('run [uid]')\n .description(\n `\nExecutes a set of codemods on the current project.\n\nIf the optional UID argument is provided, the command specifically runs the codemod associated with that UID.\nWithout the UID, the command produces a list of all available codemods for your project.\n\nBy default, when executed on a Strapi application project, it offers codemods matching the current major version of the app.\nWhen executed on a Strapi plugin project, it shows every codemods.\n`\n )\n .addOption(projectPathOption)\n .addOption(dryOption)\n .addOption(debugOption)\n .addOption(silentOption)\n .addOption(rangeOption)\n .action(async (uid: string | undefined, options: CLIRunCodemodsOptions) => {\n return runCodemods({ ...options, uid });\n });\n\n // upgrade codemods ls [options]\n codemodsCommand\n .command('ls')\n .description(`List available codemods`)\n .addOption(projectPathOption)\n .addOption(debugOption)\n .addOption(silentOption)\n .addOption(rangeOption)\n .action(async (options: CLIListCodemodsOptions) => {\n return listCodemods(options);\n });\n};\n"],"names":["DEFAULT_TARGET","Version","Major","runCodemods","options","silent","debug","logger","loggerFactory","warn","selectCodemods","codemods","selectableCodemods","map","version","codemod","title","format","value","selected","flat","length","info","selectedCodemods","prompts","type","name","message","choices","tasks","confirm","dry","cwd","projectPath","target","range","uid","catch","err","handleError","listCodemods","register","program","codemodsCommand","command","description","addOption","projectPathOption","dryOption","debugOption","silentOption","rangeOption","action"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAiBA,MAAMA,cAAAA,GAAiBC,WAAmB,CAACC,KAAK;AAEzC,MAAMC,cAAkC,OAAOC,OAAAA,GAAAA;AACpD,IAAA,MAAM,EAAEC,MAAM,EAAEC,KAAK,EAAE,GAAGF,OAAAA;AAC1B,IAAA,MAAMG,SAASC,aAAAA,CAAc;AAAEH,QAAAA,MAAAA;AAAQC,QAAAA;AAAM,KAAA,CAAA;AAE7CC,IAAAA,MAAAA,CAAOE,IAAI,CACT,iGAAA,CAAA;AAcF,IAAA,MAAMC,iBAAiB,OAAOC,QAAAA,GAAAA;AAC5B,QAAA,MAAMC,qBAAqBD,QAAAA,CACxBE,GAAG,CAAC,CAAC,EAAEC,OAAO,EAAEH,QAAQ,EAAE,GACzBA,QAAAA,CAASE,GAAG,CAAC,CAACE,WAAa;oBACzBC,KAAAA,EAAO,CAAC,CAAC,EAAEF,OAAAA,CAAQ,EAAE,EAAEC,OAAAA,CAAQE,MAAM,EAAA,CAAA,CAAI;oBACzCC,KAAAA,EAAOH,OAAAA;oBACPI,QAAAA,EAAU;AACZ,iBAAA,IAEDC,IAAI,EAAA;QAEP,IAAIR,kBAAAA,CAAmBS,MAAM,KAAK,CAAA,EAAG;AACnCd,YAAAA,MAAAA,CAAOe,IAAI,CAAC,oBAAA,CAAA;AACZ,YAAA,OAAO,EAAE;AACX,QAAA;AAEA,QAAA,MAAM,EAAEC,gBAAgB,EAAE,GAA4C,MAAMC,OAAAA,CAAQ;YAClFC,IAAAA,EAAM,yBAAA;YACNC,IAAAA,EAAM,kBAAA;YACNC,OAAAA,EAAS,4CAAA;YACTC,OAAAA,EAAShB;AACX,SAAA,CAAA;AAEA,QAAA,IAAI,CAACW,gBAAAA,IAAoBA,gBAAAA,CAAiBF,MAAM,KAAK,CAAA,EAAG;AACtDd,YAAAA,MAAAA,CAAOe,IAAI,CAAC,sBAAA,CAAA;AACZ,YAAA,OAAO,EAAE;AACX,QAAA;AAEA,QAAA,OAAOC,gBAAAA,CAAiBV,GAAG,CAA8B,CAACE,WAAa;AACrED,gBAAAA,OAAAA,EAASC,QAAQD,OAAO;gBACxBH,QAAAA,EAAU;AAACI,oBAAAA;AAAQ;aACrB,CAAA,CAAA;AACF,IAAA,CAAA;IAEA,OAAOc,aACO,CAAC;AACXtB,QAAAA,MAAAA;AACAuB,QACApB,cAAAA;AACAqB,QAAAA,GAAAA,EAAK3B,QAAQ2B,GAAG;AAChBC,QAAAA,GAAAA,EAAK5B,QAAQ6B,WAAW;QACxBC,MAAAA,EAAQ9B,OAAAA,CAAQ+B,KAAK,IAAInC,cAAAA;AACzBoC,QAAAA,GAAAA,EAAKhC,QAAQgC;AACf,KAAA,CAAA,CACCC,KAAK,CAAC,CAACC,MAAQC,WAAAA,CAAYD,GAAAA,EAAKlC,QAAQC,MAAM,CAAA,CAAA;AACnD;AAEO,MAAMmC,eAAoC,OAAOpC,OAAAA,GAAAA;AACtD,IAAA,MAAM,EAAEC,MAAM,EAAEC,KAAK,EAAE,GAAGF,OAAAA;AAC1B,IAAA,MAAMG,SAASC,aAAAA,CAAc;AAAEH,QAAAA,MAAAA;AAAQC,QAAAA;AAAM,KAAA,CAAA;IAE7C,OAAOuB,cACQ,CAAC;AACZG,QAAAA,GAAAA,EAAK5B,QAAQ6B,WAAW;QACxBC,MAAAA,EAAQ9B,OAAAA,CAAQ+B,KAAK,IAAInC,cAAAA;AACzBO,QAAAA;AACF,KAAA,CAAA,CACC8B,KAAK,CAAC,CAACC,MAAQC,WAAAA,CAAYD,GAAAA,EAAKlC,QAAQC,MAAM,CAAA,CAAA;AACnD;AAEA;;IAGO,MAAMoC,QAAAA,GAAW,CAACC,OAAAA,GAAAA;IACvB,MAAMC,eAAAA,GAAkBD,OAAAA,CAAQE,OAAO,CAAC,UAAA,CAAA;;AAGxCD,IAAAA,eAAAA,CACGC,OAAO,CAAC,WAAA,CAAA,CACRC,WAAW,CACV;;;;;;;;AAQN,CAAC,EAEIC,SAAS,CAACC,mBACVD,SAAS,CAACE,WACVF,SAAS,CAACG,aACVH,SAAS,CAACI,cACVJ,SAAS,CAACK,aACVC,MAAM,CAAC,OAAOhB,GAAAA,EAAyBhC,OAAAA,GAAAA;AACtC,QAAA,OAAOD,WAAAA,CAAY;AAAE,YAAA,GAAGC,OAAO;AAAEgC,YAAAA;AAAI,SAAA,CAAA;AACvC,IAAA,CAAA,CAAA;;IAGFO,eAAAA,CACGC,OAAO,CAAC,IAAA,CAAA,CACRC,WAAW,CAAC,CAAC,uBAAuB,CAAC,CAAA,CACrCC,SAAS,CAACC,mBACVD,SAAS,CAACG,WAAAA,CAAAA,CACVH,SAAS,CAACI,YAAAA,CAAAA,CACVJ,SAAS,CAACK,WAAAA,CAAAA,CACVC,MAAM,CAAC,OAAOhD,OAAAA,GAAAA;AACb,QAAA,OAAOoC,YAAAA,CAAapC,OAAAA,CAAAA;AACtB,IAAA,CAAA,CAAA;AACJ;;;;"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var path = require('node:path');
|
|
4
|
+
var promises = require('node:fs/promises');
|
|
3
5
|
var chalk = require('chalk');
|
|
4
6
|
var semver$1 = require('semver');
|
|
5
7
|
var utils$1 = require('@strapi/utils');
|
|
6
8
|
var transformApi = require('../json/transform-api.js');
|
|
7
9
|
var file = require('../json/file.js');
|
|
8
|
-
require('node:path');
|
|
9
10
|
require('node:assert');
|
|
10
11
|
require('fs-extra');
|
|
11
12
|
var semver = require('../version/semver.js');
|
|
@@ -202,6 +203,40 @@ class Upgrader {
|
|
|
202
203
|
stdout: this.logger?.stdout,
|
|
203
204
|
stderr: this.logger?.stderr
|
|
204
205
|
});
|
|
206
|
+
await this.clearStrapiAdminViteCacheAfterUpgrade();
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Removes only `node_modules/.strapi/vite` (Vite `cacheDir` for the admin panel). Generated
|
|
210
|
+
* cache — not user source. Optionally gated by `confirm` when the CLI passes a callback so
|
|
211
|
+
* users know the next `strapi develop` may spend longer once re-optimizing dependencies.
|
|
212
|
+
*/ async clearStrapiAdminViteCacheAfterUpgrade() {
|
|
213
|
+
if (this.isDry) {
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
const shouldClear = typeof this.confirmationCallback === 'function' && await this.confirm([
|
|
217
|
+
'Remove the Strapi admin dev cache',
|
|
218
|
+
chalk.dim('(node_modules/.strapi/vite)'),
|
|
219
|
+
'?',
|
|
220
|
+
'Recommended after dependency changes to avoid stale bundles;',
|
|
221
|
+
'the next',
|
|
222
|
+
chalk.bold('strapi develop'),
|
|
223
|
+
'may take longer once while Vite re-optimizes.'
|
|
224
|
+
].join(' '));
|
|
225
|
+
if (!shouldClear) {
|
|
226
|
+
this.logger?.info?.('Skipped clearing admin dev cache. If the admin panel misbehaves after upgrading, delete node_modules/.strapi/vite and run develop again.');
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
const cachePath = path.join(this.project.cwd, 'node_modules', '.strapi', 'vite');
|
|
230
|
+
try {
|
|
231
|
+
await promises.rm(cachePath, {
|
|
232
|
+
recursive: true,
|
|
233
|
+
force: true
|
|
234
|
+
});
|
|
235
|
+
this.logger?.debug?.(`Removed Strapi admin Vite cache at ${cachePath}`);
|
|
236
|
+
} catch (error) {
|
|
237
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
238
|
+
this.logger?.warn?.(`Could not remove Strapi admin Vite cache at ${cachePath}: ${message}`);
|
|
239
|
+
}
|
|
205
240
|
}
|
|
206
241
|
async runCodemods(range) {
|
|
207
242
|
const codemodRunner$1 = codemodRunner.codemodRunnerFactory(this.project, range);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upgrader.js","sources":["../../../../src/modules/upgrader/upgrader.ts"],"sourcesContent":["import chalk from 'chalk';\nimport semver from 'semver';\nimport { packageManager } from '@strapi/utils';\n\nimport { createJSONTransformAPI, saveJSON } from '../json';\nimport { constants as projectConstants } from '../project';\nimport {\n isSemverInstance,\n isSemVerReleaseType,\n isValidSemVer,\n rangeFromVersions,\n semVerFactory,\n} from '../version';\nimport { NPMCandidateNotFoundError, unknownToError } from '../error';\nimport * as f from '../format';\nimport { codemodRunnerFactory } from '../codemod-runner';\n\nimport type { Upgrader as UpgraderInterface, UpgradeReport } from './types';\nimport type { Version } from '../version';\nimport type { Logger } from '../logger';\nimport type { Requirement } from '../requirement';\nimport type { NPM } from '../npm';\nimport type { AppProject } from '../project';\nimport type { ConfirmationCallback } from '../common/types';\n\ntype DependenciesEntries = Array<[name: string, version: Version.SemVer]>;\n\nexport class Upgrader implements UpgraderInterface {\n private readonly project: AppProject;\n\n private readonly npmPackage: NPM.Package;\n\n private target: Version.SemVer;\n\n private codemodsTarget!: Version.SemVer;\n\n private isDry: boolean;\n\n private logger: Logger | null;\n\n private requirements: Requirement.Requirement[];\n\n private confirmationCallback: ConfirmationCallback | null;\n\n constructor(project: AppProject, target: Version.SemVer, npmPackage: NPM.Package) {\n this.project = project;\n this.npmPackage = npmPackage;\n\n this.target = target;\n this.syncCodemodsTarget();\n\n this.isDry = false;\n\n this.requirements = [];\n\n this.logger = null;\n this.confirmationCallback = null;\n }\n\n getNPMPackage(): NPM.Package {\n return this.npmPackage;\n }\n\n getProject(): AppProject {\n return this.project;\n }\n\n getTarget(): Version.SemVer {\n return semVerFactory(this.target.raw);\n }\n\n setRequirements(requirements: Requirement.Requirement[]) {\n this.requirements = requirements;\n return this;\n }\n\n setTarget(target: Version.SemVer) {\n this.target = target;\n return this;\n }\n\n syncCodemodsTarget() {\n // Extract the <major>.<minor>.<patch> version from the target and assign it to the codemods target\n //\n // This is useful when dealing with alphas, betas or release candidates:\n // e.g. \"5.0.0-beta.951\" becomes \"5.0.0\"\n //\n // For experimental versions (e.g. \"0.0.0-experimental.hex\"), it is necessary to\n // override the codemods target manually in order to run the appropriate ones.\n this.codemodsTarget = semVerFactory(\n `${this.target.major}.${this.target.minor}.${this.target.patch}`\n );\n\n this.logger?.debug?.(\n `The codemods target has been synced with the upgrade target. The codemod runner will now look for ${f.version(\n this.codemodsTarget\n )}`\n );\n\n return this;\n }\n\n overrideCodemodsTarget(target: Version.SemVer) {\n this.codemodsTarget = target;\n\n this.logger?.debug?.(\n `Overriding the codemods target. The codemod runner will now look for ${f.version(target)}`\n );\n\n return this;\n }\n\n setLogger(logger: Logger) {\n this.logger = logger;\n return this;\n }\n\n onConfirm(callback: ConfirmationCallback | null) {\n this.confirmationCallback = callback;\n return this;\n }\n\n dry(enabled: boolean = true) {\n this.isDry = enabled;\n return this;\n }\n\n addRequirement(requirement: Requirement.Requirement) {\n this.requirements.push(requirement);\n\n const fRequired = requirement.isRequired ? '(required)' : '(optional)';\n this.logger?.debug?.(\n `Added a new requirement to the upgrade: ${f.highlight(requirement.name)} ${fRequired}`\n );\n\n return this;\n }\n\n async upgrade(): Promise<UpgradeReport> {\n this.logger?.info?.(\n `Upgrading from ${f.version(this.project.strapiVersion)} to ${f.version(this.target)}`\n );\n\n if (this.isDry) {\n this.logger?.warn?.(\n 'Running the upgrade in dry mode. No files will be modified during the process.'\n );\n }\n\n const range = rangeFromVersions(this.project.strapiVersion, this.target);\n const codemodsRange = rangeFromVersions(this.project.strapiVersion, this.codemodsTarget);\n\n const npmVersionsMatches = this.npmPackage?.findVersionsInRange(range) ?? [];\n\n this.logger?.debug?.(\n `Found ${f.highlight(npmVersionsMatches.length)} versions satisfying ${f.versionRange(range)}`\n );\n\n try {\n this.logger?.info?.(f.upgradeStep('Checking requirement', [1, 4]));\n await this.checkRequirements(this.requirements, {\n npmVersionsMatches,\n project: this.project,\n target: this.target,\n });\n\n this.logger?.info?.(f.upgradeStep('Applying the latest code modifications', [2, 4]));\n await this.runCodemods(codemodsRange);\n\n // We need to refresh the project files to make sure we have\n // the latest version of each file (including package.json) for the next steps\n this.logger?.debug?.('Refreshing project information...');\n this.project.refresh();\n\n this.logger?.info?.(f.upgradeStep('Upgrading Strapi dependencies', [3, 4]));\n await this.updateDependencies();\n\n this.logger?.info?.(f.upgradeStep('Installing dependencies', [4, 4]));\n await this.installDependencies();\n } catch (e) {\n return erroredReport(unknownToError(e));\n }\n\n return successReport();\n }\n\n async confirm(message: string): Promise<boolean> {\n if (typeof this.confirmationCallback !== 'function') {\n return true;\n }\n\n return this.confirmationCallback(message);\n }\n\n private async checkRequirements(\n requirements: Requirement.Requirement[],\n context: Requirement.TestContext\n ) {\n for (const requirement of requirements) {\n const { pass, error } = await requirement.test(context);\n\n if (pass) {\n await this.onSuccessfulRequirement(requirement, context);\n } else {\n await this.onFailedRequirement(requirement, error);\n }\n }\n }\n\n private async onSuccessfulRequirement(\n requirement: Requirement.Requirement,\n context: Requirement.TestContext\n ): Promise<void> {\n const hasChildren = requirement.children.length > 0;\n\n if (hasChildren) {\n await this.checkRequirements(requirement.children, context);\n }\n }\n\n private async onFailedRequirement(\n requirement: Requirement.Requirement,\n originalError: Error\n ): Promise<void> {\n const errorMessage = `Requirement failed: ${originalError.message} (${f.highlight(\n requirement.name\n )})`;\n const warningMessage = originalError.message;\n const confirmationMessage = `Ignore optional requirement \"${f.highlight(requirement.name)}\" ?`;\n\n const error = new Error(errorMessage);\n\n if (requirement.isRequired) {\n throw error;\n }\n\n this.logger?.warn?.(warningMessage);\n\n const response = await this.confirmationCallback?.(confirmationMessage);\n\n if (!response) {\n throw error;\n }\n }\n\n private async updateDependencies(): Promise<void> {\n const { packageJSON, packageJSONPath } = this.project;\n\n const json = createJSONTransformAPI(packageJSON);\n\n const dependencies = json.get<Record<string, string>>('dependencies', {});\n const devDependencies = json.get<Record<string, string>>('devDependencies', {});\n\n const strapiProductionDependencies = this.getScopedStrapiDependencies(dependencies);\n const strapiDevelopmentDependencies = this.getScopedStrapiDependencies(devDependencies);\n\n const strapiPackagesToUpgradeCount =\n strapiProductionDependencies.length + strapiDevelopmentDependencies.length;\n\n this.logger?.debug?.(\n `Found ${f.highlight(strapiPackagesToUpgradeCount)} dependency(ies) to update`\n );\n strapiProductionDependencies.forEach((dependency) =>\n this.logger?.debug?.(`- ${dependency[0]} (${dependency[1]} -> ${this.target})`)\n );\n strapiDevelopmentDependencies.forEach((dependency) =>\n this.logger?.debug?.(\n `- ${dependency[0]} (devDependencies) (${dependency[1]} -> ${this.target})`\n )\n );\n\n if (strapiPackagesToUpgradeCount === 0) {\n return;\n }\n\n strapiProductionDependencies.forEach(([name]) =>\n json.set(`dependencies.${name}`, this.target.raw)\n );\n strapiDevelopmentDependencies.forEach(([name]) =>\n json.set(`devDependencies.${name}`, this.target.raw)\n );\n\n const updatedPackageJSON = json.root();\n\n if (this.isDry) {\n this.logger?.debug?.(`Skipping dependencies update (${chalk.italic('dry mode')})`);\n return;\n }\n\n await saveJSON(packageJSONPath, updatedPackageJSON);\n }\n\n private getScopedStrapiDependencies(dependencies: Record<string, string>): DependenciesEntries {\n const { strapiVersion } = this.project;\n\n const strapiDependencies: DependenciesEntries = [];\n\n // Find all @strapi/* packages matching the current Strapi version\n for (const [name, version] of Object.entries(dependencies)) {\n const isScopedStrapiPackage = name.startsWith(projectConstants.SCOPED_STRAPI_PACKAGE_PREFIX);\n const isOnCurrentStrapiVersion = isValidSemVer(version) && version === strapiVersion.raw;\n\n if (isScopedStrapiPackage && isOnCurrentStrapiVersion) {\n strapiDependencies.push([name, semVerFactory(version)]);\n }\n }\n\n return strapiDependencies;\n }\n\n private async installDependencies(): Promise<void> {\n const projectPath = this.project.cwd;\n\n const packageManagerName = await packageManager.getPreferred(projectPath);\n\n this.logger?.debug?.(`Using ${f.highlight(packageManagerName)} as package manager`);\n\n if (this.isDry) {\n this.logger?.debug?.(`Skipping dependencies installation (${chalk.italic('dry mode')})`);\n return;\n }\n\n await packageManager.installDependencies(projectPath, packageManagerName, {\n stdout: this.logger?.stdout,\n stderr: this.logger?.stderr,\n });\n }\n\n private async runCodemods(range: Version.Range): Promise<void> {\n const codemodRunner = codemodRunnerFactory(this.project, range);\n\n codemodRunner.dry(this.isDry);\n\n if (this.logger) {\n codemodRunner.setLogger(this.logger);\n }\n\n await codemodRunner.run();\n }\n}\n\n/**\n * Resolves the NPM target version based on the given project, target, and NPM package.\n * If target is a SemVer, it directly finds it. If it's a release type (major, minor, patch),\n * it calculates the range of versions for this release type and returns the latest version within this range.\n */\nconst resolveNPMTarget = (\n project: AppProject,\n target: Version.ReleaseType | Version.SemVer,\n npmPackage: NPM.Package\n): NPM.NPMPackageVersion => {\n // Semver\n if (isSemverInstance(target)) {\n const version = npmPackage.findVersion(target);\n\n if (!version) {\n throw new NPMCandidateNotFoundError(target);\n }\n\n return version;\n }\n\n // Release Types\n if (isSemVerReleaseType(target)) {\n const range = rangeFromVersions(project.strapiVersion, target);\n const npmVersionsMatches = npmPackage.findVersionsInRange(range);\n\n // The targeted version is the latest one that matches the given range\n const version = npmVersionsMatches.at(-1);\n\n if (!version) {\n throw new NPMCandidateNotFoundError(range, `The project is already up-to-date (${target})`);\n }\n\n return version;\n }\n\n throw new NPMCandidateNotFoundError(target);\n};\n\nexport const upgraderFactory = (\n project: AppProject,\n target: Version.ReleaseType | Version.SemVer,\n npmPackage: NPM.Package\n) => {\n const npmTarget = resolveNPMTarget(project, target, npmPackage);\n const semverTarget = semVerFactory(npmTarget.version);\n\n if (semver.eq(semverTarget, project.strapiVersion)) {\n throw new Error(`The project is already using v${semverTarget}`);\n }\n\n if (semver.lt(semverTarget, project.strapiVersion)) {\n throw new Error(\n `The target version v${semverTarget} must be greater than the current version v${project.strapiVersion}`\n );\n }\n\n return new Upgrader(project, semverTarget, npmPackage);\n};\n\nconst successReport = (): UpgradeReport => ({ success: true, error: null });\nconst erroredReport = (error: Error): UpgradeReport => ({ success: false, error });\n"],"names":["Upgrader","getNPMPackage","npmPackage","getProject","project","getTarget","semVerFactory","target","raw","setRequirements","requirements","setTarget","syncCodemodsTarget","codemodsTarget","major","minor","patch","logger","debug","f","overrideCodemodsTarget","setLogger","onConfirm","callback","confirmationCallback","dry","enabled","isDry","addRequirement","requirement","push","fRequired","isRequired","name","upgrade","info","strapiVersion","warn","range","rangeFromVersions","codemodsRange","npmVersionsMatches","findVersionsInRange","length","checkRequirements","runCodemods","refresh","updateDependencies","installDependencies","e","erroredReport","unknownToError","successReport","confirm","message","context","pass","error","test","onSuccessfulRequirement","onFailedRequirement","hasChildren","children","originalError","errorMessage","warningMessage","confirmationMessage","Error","response","packageJSON","packageJSONPath","json","createJSONTransformAPI","dependencies","get","devDependencies","strapiProductionDependencies","getScopedStrapiDependencies","strapiDevelopmentDependencies","strapiPackagesToUpgradeCount","forEach","dependency","set","updatedPackageJSON","root","chalk","italic","saveJSON","strapiDependencies","version","Object","entries","isScopedStrapiPackage","startsWith","projectConstants","isOnCurrentStrapiVersion","isValidSemVer","projectPath","cwd","packageManagerName","packageManager","getPreferred","stdout","stderr","codemodRunner","codemodRunnerFactory","run","resolveNPMTarget","isSemverInstance","findVersion","NPMCandidateNotFoundError","isSemVerReleaseType","at","upgraderFactory","npmTarget","semverTarget","semver","eq","lt","success"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"upgrader.js","sources":["../../../../src/modules/upgrader/upgrader.ts"],"sourcesContent":["import path from 'node:path';\nimport { rm } from 'node:fs/promises';\n\nimport chalk from 'chalk';\nimport semver from 'semver';\nimport { packageManager } from '@strapi/utils';\n\nimport { createJSONTransformAPI, saveJSON } from '../json';\nimport { constants as projectConstants } from '../project';\nimport {\n isSemverInstance,\n isSemVerReleaseType,\n isValidSemVer,\n rangeFromVersions,\n semVerFactory,\n} from '../version';\nimport { NPMCandidateNotFoundError, unknownToError } from '../error';\nimport * as f from '../format';\nimport { codemodRunnerFactory } from '../codemod-runner';\n\nimport type { Upgrader as UpgraderInterface, UpgradeReport } from './types';\nimport type { Version } from '../version';\nimport type { Logger } from '../logger';\nimport type { Requirement } from '../requirement';\nimport type { NPM } from '../npm';\nimport type { AppProject } from '../project';\nimport type { ConfirmationCallback } from '../common/types';\n\ntype DependenciesEntries = Array<[name: string, version: Version.SemVer]>;\n\nexport class Upgrader implements UpgraderInterface {\n private readonly project: AppProject;\n\n private readonly npmPackage: NPM.Package;\n\n private target: Version.SemVer;\n\n private codemodsTarget!: Version.SemVer;\n\n private isDry: boolean;\n\n private logger: Logger | null;\n\n private requirements: Requirement.Requirement[];\n\n private confirmationCallback: ConfirmationCallback | null;\n\n constructor(project: AppProject, target: Version.SemVer, npmPackage: NPM.Package) {\n this.project = project;\n this.npmPackage = npmPackage;\n\n this.target = target;\n this.syncCodemodsTarget();\n\n this.isDry = false;\n\n this.requirements = [];\n\n this.logger = null;\n this.confirmationCallback = null;\n }\n\n getNPMPackage(): NPM.Package {\n return this.npmPackage;\n }\n\n getProject(): AppProject {\n return this.project;\n }\n\n getTarget(): Version.SemVer {\n return semVerFactory(this.target.raw);\n }\n\n setRequirements(requirements: Requirement.Requirement[]) {\n this.requirements = requirements;\n return this;\n }\n\n setTarget(target: Version.SemVer) {\n this.target = target;\n return this;\n }\n\n syncCodemodsTarget() {\n // Extract the <major>.<minor>.<patch> version from the target and assign it to the codemods target\n //\n // This is useful when dealing with alphas, betas or release candidates:\n // e.g. \"5.0.0-beta.951\" becomes \"5.0.0\"\n //\n // For experimental versions (e.g. \"0.0.0-experimental.hex\"), it is necessary to\n // override the codemods target manually in order to run the appropriate ones.\n this.codemodsTarget = semVerFactory(\n `${this.target.major}.${this.target.minor}.${this.target.patch}`\n );\n\n this.logger?.debug?.(\n `The codemods target has been synced with the upgrade target. The codemod runner will now look for ${f.version(\n this.codemodsTarget\n )}`\n );\n\n return this;\n }\n\n overrideCodemodsTarget(target: Version.SemVer) {\n this.codemodsTarget = target;\n\n this.logger?.debug?.(\n `Overriding the codemods target. The codemod runner will now look for ${f.version(target)}`\n );\n\n return this;\n }\n\n setLogger(logger: Logger) {\n this.logger = logger;\n return this;\n }\n\n onConfirm(callback: ConfirmationCallback | null) {\n this.confirmationCallback = callback;\n return this;\n }\n\n dry(enabled: boolean = true) {\n this.isDry = enabled;\n return this;\n }\n\n addRequirement(requirement: Requirement.Requirement) {\n this.requirements.push(requirement);\n\n const fRequired = requirement.isRequired ? '(required)' : '(optional)';\n this.logger?.debug?.(\n `Added a new requirement to the upgrade: ${f.highlight(requirement.name)} ${fRequired}`\n );\n\n return this;\n }\n\n async upgrade(): Promise<UpgradeReport> {\n this.logger?.info?.(\n `Upgrading from ${f.version(this.project.strapiVersion)} to ${f.version(this.target)}`\n );\n\n if (this.isDry) {\n this.logger?.warn?.(\n 'Running the upgrade in dry mode. No files will be modified during the process.'\n );\n }\n\n const range = rangeFromVersions(this.project.strapiVersion, this.target);\n const codemodsRange = rangeFromVersions(this.project.strapiVersion, this.codemodsTarget);\n\n const npmVersionsMatches = this.npmPackage?.findVersionsInRange(range) ?? [];\n\n this.logger?.debug?.(\n `Found ${f.highlight(npmVersionsMatches.length)} versions satisfying ${f.versionRange(range)}`\n );\n\n try {\n this.logger?.info?.(f.upgradeStep('Checking requirement', [1, 4]));\n await this.checkRequirements(this.requirements, {\n npmVersionsMatches,\n project: this.project,\n target: this.target,\n });\n\n this.logger?.info?.(f.upgradeStep('Applying the latest code modifications', [2, 4]));\n await this.runCodemods(codemodsRange);\n\n // We need to refresh the project files to make sure we have\n // the latest version of each file (including package.json) for the next steps\n this.logger?.debug?.('Refreshing project information...');\n this.project.refresh();\n\n this.logger?.info?.(f.upgradeStep('Upgrading Strapi dependencies', [3, 4]));\n await this.updateDependencies();\n\n this.logger?.info?.(f.upgradeStep('Installing dependencies', [4, 4]));\n await this.installDependencies();\n } catch (e) {\n return erroredReport(unknownToError(e));\n }\n\n return successReport();\n }\n\n async confirm(message: string): Promise<boolean> {\n if (typeof this.confirmationCallback !== 'function') {\n return true;\n }\n\n return this.confirmationCallback(message);\n }\n\n private async checkRequirements(\n requirements: Requirement.Requirement[],\n context: Requirement.TestContext\n ) {\n for (const requirement of requirements) {\n const { pass, error } = await requirement.test(context);\n\n if (pass) {\n await this.onSuccessfulRequirement(requirement, context);\n } else {\n await this.onFailedRequirement(requirement, error);\n }\n }\n }\n\n private async onSuccessfulRequirement(\n requirement: Requirement.Requirement,\n context: Requirement.TestContext\n ): Promise<void> {\n const hasChildren = requirement.children.length > 0;\n\n if (hasChildren) {\n await this.checkRequirements(requirement.children, context);\n }\n }\n\n private async onFailedRequirement(\n requirement: Requirement.Requirement,\n originalError: Error\n ): Promise<void> {\n const errorMessage = `Requirement failed: ${originalError.message} (${f.highlight(\n requirement.name\n )})`;\n const warningMessage = originalError.message;\n const confirmationMessage = `Ignore optional requirement \"${f.highlight(requirement.name)}\" ?`;\n\n const error = new Error(errorMessage);\n\n if (requirement.isRequired) {\n throw error;\n }\n\n this.logger?.warn?.(warningMessage);\n\n const response = await this.confirmationCallback?.(confirmationMessage);\n\n if (!response) {\n throw error;\n }\n }\n\n private async updateDependencies(): Promise<void> {\n const { packageJSON, packageJSONPath } = this.project;\n\n const json = createJSONTransformAPI(packageJSON);\n\n const dependencies = json.get<Record<string, string>>('dependencies', {});\n const devDependencies = json.get<Record<string, string>>('devDependencies', {});\n\n const strapiProductionDependencies = this.getScopedStrapiDependencies(dependencies);\n const strapiDevelopmentDependencies = this.getScopedStrapiDependencies(devDependencies);\n\n const strapiPackagesToUpgradeCount =\n strapiProductionDependencies.length + strapiDevelopmentDependencies.length;\n\n this.logger?.debug?.(\n `Found ${f.highlight(strapiPackagesToUpgradeCount)} dependency(ies) to update`\n );\n strapiProductionDependencies.forEach((dependency) =>\n this.logger?.debug?.(`- ${dependency[0]} (${dependency[1]} -> ${this.target})`)\n );\n strapiDevelopmentDependencies.forEach((dependency) =>\n this.logger?.debug?.(\n `- ${dependency[0]} (devDependencies) (${dependency[1]} -> ${this.target})`\n )\n );\n\n if (strapiPackagesToUpgradeCount === 0) {\n return;\n }\n\n strapiProductionDependencies.forEach(([name]) =>\n json.set(`dependencies.${name}`, this.target.raw)\n );\n strapiDevelopmentDependencies.forEach(([name]) =>\n json.set(`devDependencies.${name}`, this.target.raw)\n );\n\n const updatedPackageJSON = json.root();\n\n if (this.isDry) {\n this.logger?.debug?.(`Skipping dependencies update (${chalk.italic('dry mode')})`);\n return;\n }\n\n await saveJSON(packageJSONPath, updatedPackageJSON);\n }\n\n private getScopedStrapiDependencies(dependencies: Record<string, string>): DependenciesEntries {\n const { strapiVersion } = this.project;\n\n const strapiDependencies: DependenciesEntries = [];\n\n // Find all @strapi/* packages matching the current Strapi version\n for (const [name, version] of Object.entries(dependencies)) {\n const isScopedStrapiPackage = name.startsWith(projectConstants.SCOPED_STRAPI_PACKAGE_PREFIX);\n const isOnCurrentStrapiVersion = isValidSemVer(version) && version === strapiVersion.raw;\n\n if (isScopedStrapiPackage && isOnCurrentStrapiVersion) {\n strapiDependencies.push([name, semVerFactory(version)]);\n }\n }\n\n return strapiDependencies;\n }\n\n private async installDependencies(): Promise<void> {\n const projectPath = this.project.cwd;\n\n const packageManagerName = await packageManager.getPreferred(projectPath);\n\n this.logger?.debug?.(`Using ${f.highlight(packageManagerName)} as package manager`);\n\n if (this.isDry) {\n this.logger?.debug?.(`Skipping dependencies installation (${chalk.italic('dry mode')})`);\n return;\n }\n\n await packageManager.installDependencies(projectPath, packageManagerName, {\n stdout: this.logger?.stdout,\n stderr: this.logger?.stderr,\n });\n\n await this.clearStrapiAdminViteCacheAfterUpgrade();\n }\n\n /**\n * Removes only `node_modules/.strapi/vite` (Vite `cacheDir` for the admin panel). Generated\n * cache — not user source. Optionally gated by `confirm` when the CLI passes a callback so\n * users know the next `strapi develop` may spend longer once re-optimizing dependencies.\n */\n private async clearStrapiAdminViteCacheAfterUpgrade(): Promise<void> {\n if (this.isDry) {\n return;\n }\n\n const shouldClear =\n typeof this.confirmationCallback === 'function' &&\n (await this.confirm(\n [\n 'Remove the Strapi admin dev cache',\n chalk.dim('(node_modules/.strapi/vite)'),\n '?',\n 'Recommended after dependency changes to avoid stale bundles;',\n 'the next',\n chalk.bold('strapi develop'),\n 'may take longer once while Vite re-optimizes.',\n ].join(' ')\n ));\n\n if (!shouldClear) {\n this.logger?.info?.(\n 'Skipped clearing admin dev cache. If the admin panel misbehaves after upgrading, delete node_modules/.strapi/vite and run develop again.'\n );\n return;\n }\n\n const cachePath = path.join(this.project.cwd, 'node_modules', '.strapi', 'vite');\n\n try {\n await rm(cachePath, { recursive: true, force: true });\n this.logger?.debug?.(`Removed Strapi admin Vite cache at ${cachePath}`);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n this.logger?.warn?.(`Could not remove Strapi admin Vite cache at ${cachePath}: ${message}`);\n }\n }\n\n private async runCodemods(range: Version.Range): Promise<void> {\n const codemodRunner = codemodRunnerFactory(this.project, range);\n\n codemodRunner.dry(this.isDry);\n\n if (this.logger) {\n codemodRunner.setLogger(this.logger);\n }\n\n await codemodRunner.run();\n }\n}\n\n/**\n * Resolves the NPM target version based on the given project, target, and NPM package.\n * If target is a SemVer, it directly finds it. If it's a release type (major, minor, patch),\n * it calculates the range of versions for this release type and returns the latest version within this range.\n */\nconst resolveNPMTarget = (\n project: AppProject,\n target: Version.ReleaseType | Version.SemVer,\n npmPackage: NPM.Package\n): NPM.NPMPackageVersion => {\n // Semver\n if (isSemverInstance(target)) {\n const version = npmPackage.findVersion(target);\n\n if (!version) {\n throw new NPMCandidateNotFoundError(target);\n }\n\n return version;\n }\n\n // Release Types\n if (isSemVerReleaseType(target)) {\n const range = rangeFromVersions(project.strapiVersion, target);\n const npmVersionsMatches = npmPackage.findVersionsInRange(range);\n\n // The targeted version is the latest one that matches the given range\n const version = npmVersionsMatches.at(-1);\n\n if (!version) {\n throw new NPMCandidateNotFoundError(range, `The project is already up-to-date (${target})`);\n }\n\n return version;\n }\n\n throw new NPMCandidateNotFoundError(target);\n};\n\nexport const upgraderFactory = (\n project: AppProject,\n target: Version.ReleaseType | Version.SemVer,\n npmPackage: NPM.Package\n) => {\n const npmTarget = resolveNPMTarget(project, target, npmPackage);\n const semverTarget = semVerFactory(npmTarget.version);\n\n if (semver.eq(semverTarget, project.strapiVersion)) {\n throw new Error(`The project is already using v${semverTarget}`);\n }\n\n if (semver.lt(semverTarget, project.strapiVersion)) {\n throw new Error(\n `The target version v${semverTarget} must be greater than the current version v${project.strapiVersion}`\n );\n }\n\n return new Upgrader(project, semverTarget, npmPackage);\n};\n\nconst successReport = (): UpgradeReport => ({ success: true, error: null });\nconst erroredReport = (error: Error): UpgradeReport => ({ success: false, error });\n"],"names":["Upgrader","getNPMPackage","npmPackage","getProject","project","getTarget","semVerFactory","target","raw","setRequirements","requirements","setTarget","syncCodemodsTarget","codemodsTarget","major","minor","patch","logger","debug","f","overrideCodemodsTarget","setLogger","onConfirm","callback","confirmationCallback","dry","enabled","isDry","addRequirement","requirement","push","fRequired","isRequired","name","upgrade","info","strapiVersion","warn","range","rangeFromVersions","codemodsRange","npmVersionsMatches","findVersionsInRange","length","checkRequirements","runCodemods","refresh","updateDependencies","installDependencies","e","erroredReport","unknownToError","successReport","confirm","message","context","pass","error","test","onSuccessfulRequirement","onFailedRequirement","hasChildren","children","originalError","errorMessage","warningMessage","confirmationMessage","Error","response","packageJSON","packageJSONPath","json","createJSONTransformAPI","dependencies","get","devDependencies","strapiProductionDependencies","getScopedStrapiDependencies","strapiDevelopmentDependencies","strapiPackagesToUpgradeCount","forEach","dependency","set","updatedPackageJSON","root","chalk","italic","saveJSON","strapiDependencies","version","Object","entries","isScopedStrapiPackage","startsWith","projectConstants","isOnCurrentStrapiVersion","isValidSemVer","projectPath","cwd","packageManagerName","packageManager","getPreferred","stdout","stderr","clearStrapiAdminViteCacheAfterUpgrade","shouldClear","dim","bold","join","cachePath","path","rm","recursive","force","String","codemodRunner","codemodRunnerFactory","run","resolveNPMTarget","isSemverInstance","findVersion","NPMCandidateNotFoundError","isSemVerReleaseType","at","upgraderFactory","npmTarget","semverTarget","semver","eq","lt","success"],"mappings":"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"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { rm } from 'node:fs/promises';
|
|
1
3
|
import chalk from 'chalk';
|
|
2
4
|
import semver from 'semver';
|
|
3
5
|
import { packageManager } from '@strapi/utils';
|
|
4
6
|
import { createJSONTransformAPI } from '../json/transform-api.mjs';
|
|
5
7
|
import { saveJSON } from '../json/file.mjs';
|
|
6
|
-
import 'node:path';
|
|
7
8
|
import 'node:assert';
|
|
8
9
|
import 'fs-extra';
|
|
9
10
|
import { semVerFactory, isSemverInstance, isSemVerReleaseType, isValidSemVer } from '../version/semver.mjs';
|
|
@@ -200,6 +201,40 @@ class Upgrader {
|
|
|
200
201
|
stdout: this.logger?.stdout,
|
|
201
202
|
stderr: this.logger?.stderr
|
|
202
203
|
});
|
|
204
|
+
await this.clearStrapiAdminViteCacheAfterUpgrade();
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Removes only `node_modules/.strapi/vite` (Vite `cacheDir` for the admin panel). Generated
|
|
208
|
+
* cache — not user source. Optionally gated by `confirm` when the CLI passes a callback so
|
|
209
|
+
* users know the next `strapi develop` may spend longer once re-optimizing dependencies.
|
|
210
|
+
*/ async clearStrapiAdminViteCacheAfterUpgrade() {
|
|
211
|
+
if (this.isDry) {
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
const shouldClear = typeof this.confirmationCallback === 'function' && await this.confirm([
|
|
215
|
+
'Remove the Strapi admin dev cache',
|
|
216
|
+
chalk.dim('(node_modules/.strapi/vite)'),
|
|
217
|
+
'?',
|
|
218
|
+
'Recommended after dependency changes to avoid stale bundles;',
|
|
219
|
+
'the next',
|
|
220
|
+
chalk.bold('strapi develop'),
|
|
221
|
+
'may take longer once while Vite re-optimizes.'
|
|
222
|
+
].join(' '));
|
|
223
|
+
if (!shouldClear) {
|
|
224
|
+
this.logger?.info?.('Skipped clearing admin dev cache. If the admin panel misbehaves after upgrading, delete node_modules/.strapi/vite and run develop again.');
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
const cachePath = path.join(this.project.cwd, 'node_modules', '.strapi', 'vite');
|
|
228
|
+
try {
|
|
229
|
+
await rm(cachePath, {
|
|
230
|
+
recursive: true,
|
|
231
|
+
force: true
|
|
232
|
+
});
|
|
233
|
+
this.logger?.debug?.(`Removed Strapi admin Vite cache at ${cachePath}`);
|
|
234
|
+
} catch (error) {
|
|
235
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
236
|
+
this.logger?.warn?.(`Could not remove Strapi admin Vite cache at ${cachePath}: ${message}`);
|
|
237
|
+
}
|
|
203
238
|
}
|
|
204
239
|
async runCodemods(range) {
|
|
205
240
|
const codemodRunner = codemodRunnerFactory(this.project, range);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upgrader.mjs","sources":["../../../../src/modules/upgrader/upgrader.ts"],"sourcesContent":["import chalk from 'chalk';\nimport semver from 'semver';\nimport { packageManager } from '@strapi/utils';\n\nimport { createJSONTransformAPI, saveJSON } from '../json';\nimport { constants as projectConstants } from '../project';\nimport {\n isSemverInstance,\n isSemVerReleaseType,\n isValidSemVer,\n rangeFromVersions,\n semVerFactory,\n} from '../version';\nimport { NPMCandidateNotFoundError, unknownToError } from '../error';\nimport * as f from '../format';\nimport { codemodRunnerFactory } from '../codemod-runner';\n\nimport type { Upgrader as UpgraderInterface, UpgradeReport } from './types';\nimport type { Version } from '../version';\nimport type { Logger } from '../logger';\nimport type { Requirement } from '../requirement';\nimport type { NPM } from '../npm';\nimport type { AppProject } from '../project';\nimport type { ConfirmationCallback } from '../common/types';\n\ntype DependenciesEntries = Array<[name: string, version: Version.SemVer]>;\n\nexport class Upgrader implements UpgraderInterface {\n private readonly project: AppProject;\n\n private readonly npmPackage: NPM.Package;\n\n private target: Version.SemVer;\n\n private codemodsTarget!: Version.SemVer;\n\n private isDry: boolean;\n\n private logger: Logger | null;\n\n private requirements: Requirement.Requirement[];\n\n private confirmationCallback: ConfirmationCallback | null;\n\n constructor(project: AppProject, target: Version.SemVer, npmPackage: NPM.Package) {\n this.project = project;\n this.npmPackage = npmPackage;\n\n this.target = target;\n this.syncCodemodsTarget();\n\n this.isDry = false;\n\n this.requirements = [];\n\n this.logger = null;\n this.confirmationCallback = null;\n }\n\n getNPMPackage(): NPM.Package {\n return this.npmPackage;\n }\n\n getProject(): AppProject {\n return this.project;\n }\n\n getTarget(): Version.SemVer {\n return semVerFactory(this.target.raw);\n }\n\n setRequirements(requirements: Requirement.Requirement[]) {\n this.requirements = requirements;\n return this;\n }\n\n setTarget(target: Version.SemVer) {\n this.target = target;\n return this;\n }\n\n syncCodemodsTarget() {\n // Extract the <major>.<minor>.<patch> version from the target and assign it to the codemods target\n //\n // This is useful when dealing with alphas, betas or release candidates:\n // e.g. \"5.0.0-beta.951\" becomes \"5.0.0\"\n //\n // For experimental versions (e.g. \"0.0.0-experimental.hex\"), it is necessary to\n // override the codemods target manually in order to run the appropriate ones.\n this.codemodsTarget = semVerFactory(\n `${this.target.major}.${this.target.minor}.${this.target.patch}`\n );\n\n this.logger?.debug?.(\n `The codemods target has been synced with the upgrade target. The codemod runner will now look for ${f.version(\n this.codemodsTarget\n )}`\n );\n\n return this;\n }\n\n overrideCodemodsTarget(target: Version.SemVer) {\n this.codemodsTarget = target;\n\n this.logger?.debug?.(\n `Overriding the codemods target. The codemod runner will now look for ${f.version(target)}`\n );\n\n return this;\n }\n\n setLogger(logger: Logger) {\n this.logger = logger;\n return this;\n }\n\n onConfirm(callback: ConfirmationCallback | null) {\n this.confirmationCallback = callback;\n return this;\n }\n\n dry(enabled: boolean = true) {\n this.isDry = enabled;\n return this;\n }\n\n addRequirement(requirement: Requirement.Requirement) {\n this.requirements.push(requirement);\n\n const fRequired = requirement.isRequired ? '(required)' : '(optional)';\n this.logger?.debug?.(\n `Added a new requirement to the upgrade: ${f.highlight(requirement.name)} ${fRequired}`\n );\n\n return this;\n }\n\n async upgrade(): Promise<UpgradeReport> {\n this.logger?.info?.(\n `Upgrading from ${f.version(this.project.strapiVersion)} to ${f.version(this.target)}`\n );\n\n if (this.isDry) {\n this.logger?.warn?.(\n 'Running the upgrade in dry mode. No files will be modified during the process.'\n );\n }\n\n const range = rangeFromVersions(this.project.strapiVersion, this.target);\n const codemodsRange = rangeFromVersions(this.project.strapiVersion, this.codemodsTarget);\n\n const npmVersionsMatches = this.npmPackage?.findVersionsInRange(range) ?? [];\n\n this.logger?.debug?.(\n `Found ${f.highlight(npmVersionsMatches.length)} versions satisfying ${f.versionRange(range)}`\n );\n\n try {\n this.logger?.info?.(f.upgradeStep('Checking requirement', [1, 4]));\n await this.checkRequirements(this.requirements, {\n npmVersionsMatches,\n project: this.project,\n target: this.target,\n });\n\n this.logger?.info?.(f.upgradeStep('Applying the latest code modifications', [2, 4]));\n await this.runCodemods(codemodsRange);\n\n // We need to refresh the project files to make sure we have\n // the latest version of each file (including package.json) for the next steps\n this.logger?.debug?.('Refreshing project information...');\n this.project.refresh();\n\n this.logger?.info?.(f.upgradeStep('Upgrading Strapi dependencies', [3, 4]));\n await this.updateDependencies();\n\n this.logger?.info?.(f.upgradeStep('Installing dependencies', [4, 4]));\n await this.installDependencies();\n } catch (e) {\n return erroredReport(unknownToError(e));\n }\n\n return successReport();\n }\n\n async confirm(message: string): Promise<boolean> {\n if (typeof this.confirmationCallback !== 'function') {\n return true;\n }\n\n return this.confirmationCallback(message);\n }\n\n private async checkRequirements(\n requirements: Requirement.Requirement[],\n context: Requirement.TestContext\n ) {\n for (const requirement of requirements) {\n const { pass, error } = await requirement.test(context);\n\n if (pass) {\n await this.onSuccessfulRequirement(requirement, context);\n } else {\n await this.onFailedRequirement(requirement, error);\n }\n }\n }\n\n private async onSuccessfulRequirement(\n requirement: Requirement.Requirement,\n context: Requirement.TestContext\n ): Promise<void> {\n const hasChildren = requirement.children.length > 0;\n\n if (hasChildren) {\n await this.checkRequirements(requirement.children, context);\n }\n }\n\n private async onFailedRequirement(\n requirement: Requirement.Requirement,\n originalError: Error\n ): Promise<void> {\n const errorMessage = `Requirement failed: ${originalError.message} (${f.highlight(\n requirement.name\n )})`;\n const warningMessage = originalError.message;\n const confirmationMessage = `Ignore optional requirement \"${f.highlight(requirement.name)}\" ?`;\n\n const error = new Error(errorMessage);\n\n if (requirement.isRequired) {\n throw error;\n }\n\n this.logger?.warn?.(warningMessage);\n\n const response = await this.confirmationCallback?.(confirmationMessage);\n\n if (!response) {\n throw error;\n }\n }\n\n private async updateDependencies(): Promise<void> {\n const { packageJSON, packageJSONPath } = this.project;\n\n const json = createJSONTransformAPI(packageJSON);\n\n const dependencies = json.get<Record<string, string>>('dependencies', {});\n const devDependencies = json.get<Record<string, string>>('devDependencies', {});\n\n const strapiProductionDependencies = this.getScopedStrapiDependencies(dependencies);\n const strapiDevelopmentDependencies = this.getScopedStrapiDependencies(devDependencies);\n\n const strapiPackagesToUpgradeCount =\n strapiProductionDependencies.length + strapiDevelopmentDependencies.length;\n\n this.logger?.debug?.(\n `Found ${f.highlight(strapiPackagesToUpgradeCount)} dependency(ies) to update`\n );\n strapiProductionDependencies.forEach((dependency) =>\n this.logger?.debug?.(`- ${dependency[0]} (${dependency[1]} -> ${this.target})`)\n );\n strapiDevelopmentDependencies.forEach((dependency) =>\n this.logger?.debug?.(\n `- ${dependency[0]} (devDependencies) (${dependency[1]} -> ${this.target})`\n )\n );\n\n if (strapiPackagesToUpgradeCount === 0) {\n return;\n }\n\n strapiProductionDependencies.forEach(([name]) =>\n json.set(`dependencies.${name}`, this.target.raw)\n );\n strapiDevelopmentDependencies.forEach(([name]) =>\n json.set(`devDependencies.${name}`, this.target.raw)\n );\n\n const updatedPackageJSON = json.root();\n\n if (this.isDry) {\n this.logger?.debug?.(`Skipping dependencies update (${chalk.italic('dry mode')})`);\n return;\n }\n\n await saveJSON(packageJSONPath, updatedPackageJSON);\n }\n\n private getScopedStrapiDependencies(dependencies: Record<string, string>): DependenciesEntries {\n const { strapiVersion } = this.project;\n\n const strapiDependencies: DependenciesEntries = [];\n\n // Find all @strapi/* packages matching the current Strapi version\n for (const [name, version] of Object.entries(dependencies)) {\n const isScopedStrapiPackage = name.startsWith(projectConstants.SCOPED_STRAPI_PACKAGE_PREFIX);\n const isOnCurrentStrapiVersion = isValidSemVer(version) && version === strapiVersion.raw;\n\n if (isScopedStrapiPackage && isOnCurrentStrapiVersion) {\n strapiDependencies.push([name, semVerFactory(version)]);\n }\n }\n\n return strapiDependencies;\n }\n\n private async installDependencies(): Promise<void> {\n const projectPath = this.project.cwd;\n\n const packageManagerName = await packageManager.getPreferred(projectPath);\n\n this.logger?.debug?.(`Using ${f.highlight(packageManagerName)} as package manager`);\n\n if (this.isDry) {\n this.logger?.debug?.(`Skipping dependencies installation (${chalk.italic('dry mode')})`);\n return;\n }\n\n await packageManager.installDependencies(projectPath, packageManagerName, {\n stdout: this.logger?.stdout,\n stderr: this.logger?.stderr,\n });\n }\n\n private async runCodemods(range: Version.Range): Promise<void> {\n const codemodRunner = codemodRunnerFactory(this.project, range);\n\n codemodRunner.dry(this.isDry);\n\n if (this.logger) {\n codemodRunner.setLogger(this.logger);\n }\n\n await codemodRunner.run();\n }\n}\n\n/**\n * Resolves the NPM target version based on the given project, target, and NPM package.\n * If target is a SemVer, it directly finds it. If it's a release type (major, minor, patch),\n * it calculates the range of versions for this release type and returns the latest version within this range.\n */\nconst resolveNPMTarget = (\n project: AppProject,\n target: Version.ReleaseType | Version.SemVer,\n npmPackage: NPM.Package\n): NPM.NPMPackageVersion => {\n // Semver\n if (isSemverInstance(target)) {\n const version = npmPackage.findVersion(target);\n\n if (!version) {\n throw new NPMCandidateNotFoundError(target);\n }\n\n return version;\n }\n\n // Release Types\n if (isSemVerReleaseType(target)) {\n const range = rangeFromVersions(project.strapiVersion, target);\n const npmVersionsMatches = npmPackage.findVersionsInRange(range);\n\n // The targeted version is the latest one that matches the given range\n const version = npmVersionsMatches.at(-1);\n\n if (!version) {\n throw new NPMCandidateNotFoundError(range, `The project is already up-to-date (${target})`);\n }\n\n return version;\n }\n\n throw new NPMCandidateNotFoundError(target);\n};\n\nexport const upgraderFactory = (\n project: AppProject,\n target: Version.ReleaseType | Version.SemVer,\n npmPackage: NPM.Package\n) => {\n const npmTarget = resolveNPMTarget(project, target, npmPackage);\n const semverTarget = semVerFactory(npmTarget.version);\n\n if (semver.eq(semverTarget, project.strapiVersion)) {\n throw new Error(`The project is already using v${semverTarget}`);\n }\n\n if (semver.lt(semverTarget, project.strapiVersion)) {\n throw new Error(\n `The target version v${semverTarget} must be greater than the current version v${project.strapiVersion}`\n );\n }\n\n return new Upgrader(project, semverTarget, npmPackage);\n};\n\nconst successReport = (): UpgradeReport => ({ success: true, error: null });\nconst erroredReport = (error: Error): UpgradeReport => ({ success: false, error });\n"],"names":["Upgrader","getNPMPackage","npmPackage","getProject","project","getTarget","semVerFactory","target","raw","setRequirements","requirements","setTarget","syncCodemodsTarget","codemodsTarget","major","minor","patch","logger","debug","f","overrideCodemodsTarget","setLogger","onConfirm","callback","confirmationCallback","dry","enabled","isDry","addRequirement","requirement","push","fRequired","isRequired","name","upgrade","info","strapiVersion","warn","range","rangeFromVersions","codemodsRange","npmVersionsMatches","findVersionsInRange","length","checkRequirements","runCodemods","refresh","updateDependencies","installDependencies","e","erroredReport","unknownToError","successReport","confirm","message","context","pass","error","test","onSuccessfulRequirement","onFailedRequirement","hasChildren","children","originalError","errorMessage","warningMessage","confirmationMessage","Error","response","packageJSON","packageJSONPath","json","createJSONTransformAPI","dependencies","get","devDependencies","strapiProductionDependencies","getScopedStrapiDependencies","strapiDevelopmentDependencies","strapiPackagesToUpgradeCount","forEach","dependency","set","updatedPackageJSON","root","chalk","italic","saveJSON","strapiDependencies","version","Object","entries","isScopedStrapiPackage","startsWith","projectConstants","isOnCurrentStrapiVersion","isValidSemVer","projectPath","cwd","packageManagerName","packageManager","getPreferred","stdout","stderr","codemodRunner","codemodRunnerFactory","run","resolveNPMTarget","isSemverInstance","findVersion","NPMCandidateNotFoundError","isSemVerReleaseType","at","upgraderFactory","npmTarget","semverTarget","semver","eq","lt","success"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"upgrader.mjs","sources":["../../../../src/modules/upgrader/upgrader.ts"],"sourcesContent":["import path from 'node:path';\nimport { rm } from 'node:fs/promises';\n\nimport chalk from 'chalk';\nimport semver from 'semver';\nimport { packageManager } from '@strapi/utils';\n\nimport { createJSONTransformAPI, saveJSON } from '../json';\nimport { constants as projectConstants } from '../project';\nimport {\n isSemverInstance,\n isSemVerReleaseType,\n isValidSemVer,\n rangeFromVersions,\n semVerFactory,\n} from '../version';\nimport { NPMCandidateNotFoundError, unknownToError } from '../error';\nimport * as f from '../format';\nimport { codemodRunnerFactory } from '../codemod-runner';\n\nimport type { Upgrader as UpgraderInterface, UpgradeReport } from './types';\nimport type { Version } from '../version';\nimport type { Logger } from '../logger';\nimport type { Requirement } from '../requirement';\nimport type { NPM } from '../npm';\nimport type { AppProject } from '../project';\nimport type { ConfirmationCallback } from '../common/types';\n\ntype DependenciesEntries = Array<[name: string, version: Version.SemVer]>;\n\nexport class Upgrader implements UpgraderInterface {\n private readonly project: AppProject;\n\n private readonly npmPackage: NPM.Package;\n\n private target: Version.SemVer;\n\n private codemodsTarget!: Version.SemVer;\n\n private isDry: boolean;\n\n private logger: Logger | null;\n\n private requirements: Requirement.Requirement[];\n\n private confirmationCallback: ConfirmationCallback | null;\n\n constructor(project: AppProject, target: Version.SemVer, npmPackage: NPM.Package) {\n this.project = project;\n this.npmPackage = npmPackage;\n\n this.target = target;\n this.syncCodemodsTarget();\n\n this.isDry = false;\n\n this.requirements = [];\n\n this.logger = null;\n this.confirmationCallback = null;\n }\n\n getNPMPackage(): NPM.Package {\n return this.npmPackage;\n }\n\n getProject(): AppProject {\n return this.project;\n }\n\n getTarget(): Version.SemVer {\n return semVerFactory(this.target.raw);\n }\n\n setRequirements(requirements: Requirement.Requirement[]) {\n this.requirements = requirements;\n return this;\n }\n\n setTarget(target: Version.SemVer) {\n this.target = target;\n return this;\n }\n\n syncCodemodsTarget() {\n // Extract the <major>.<minor>.<patch> version from the target and assign it to the codemods target\n //\n // This is useful when dealing with alphas, betas or release candidates:\n // e.g. \"5.0.0-beta.951\" becomes \"5.0.0\"\n //\n // For experimental versions (e.g. \"0.0.0-experimental.hex\"), it is necessary to\n // override the codemods target manually in order to run the appropriate ones.\n this.codemodsTarget = semVerFactory(\n `${this.target.major}.${this.target.minor}.${this.target.patch}`\n );\n\n this.logger?.debug?.(\n `The codemods target has been synced with the upgrade target. The codemod runner will now look for ${f.version(\n this.codemodsTarget\n )}`\n );\n\n return this;\n }\n\n overrideCodemodsTarget(target: Version.SemVer) {\n this.codemodsTarget = target;\n\n this.logger?.debug?.(\n `Overriding the codemods target. The codemod runner will now look for ${f.version(target)}`\n );\n\n return this;\n }\n\n setLogger(logger: Logger) {\n this.logger = logger;\n return this;\n }\n\n onConfirm(callback: ConfirmationCallback | null) {\n this.confirmationCallback = callback;\n return this;\n }\n\n dry(enabled: boolean = true) {\n this.isDry = enabled;\n return this;\n }\n\n addRequirement(requirement: Requirement.Requirement) {\n this.requirements.push(requirement);\n\n const fRequired = requirement.isRequired ? '(required)' : '(optional)';\n this.logger?.debug?.(\n `Added a new requirement to the upgrade: ${f.highlight(requirement.name)} ${fRequired}`\n );\n\n return this;\n }\n\n async upgrade(): Promise<UpgradeReport> {\n this.logger?.info?.(\n `Upgrading from ${f.version(this.project.strapiVersion)} to ${f.version(this.target)}`\n );\n\n if (this.isDry) {\n this.logger?.warn?.(\n 'Running the upgrade in dry mode. No files will be modified during the process.'\n );\n }\n\n const range = rangeFromVersions(this.project.strapiVersion, this.target);\n const codemodsRange = rangeFromVersions(this.project.strapiVersion, this.codemodsTarget);\n\n const npmVersionsMatches = this.npmPackage?.findVersionsInRange(range) ?? [];\n\n this.logger?.debug?.(\n `Found ${f.highlight(npmVersionsMatches.length)} versions satisfying ${f.versionRange(range)}`\n );\n\n try {\n this.logger?.info?.(f.upgradeStep('Checking requirement', [1, 4]));\n await this.checkRequirements(this.requirements, {\n npmVersionsMatches,\n project: this.project,\n target: this.target,\n });\n\n this.logger?.info?.(f.upgradeStep('Applying the latest code modifications', [2, 4]));\n await this.runCodemods(codemodsRange);\n\n // We need to refresh the project files to make sure we have\n // the latest version of each file (including package.json) for the next steps\n this.logger?.debug?.('Refreshing project information...');\n this.project.refresh();\n\n this.logger?.info?.(f.upgradeStep('Upgrading Strapi dependencies', [3, 4]));\n await this.updateDependencies();\n\n this.logger?.info?.(f.upgradeStep('Installing dependencies', [4, 4]));\n await this.installDependencies();\n } catch (e) {\n return erroredReport(unknownToError(e));\n }\n\n return successReport();\n }\n\n async confirm(message: string): Promise<boolean> {\n if (typeof this.confirmationCallback !== 'function') {\n return true;\n }\n\n return this.confirmationCallback(message);\n }\n\n private async checkRequirements(\n requirements: Requirement.Requirement[],\n context: Requirement.TestContext\n ) {\n for (const requirement of requirements) {\n const { pass, error } = await requirement.test(context);\n\n if (pass) {\n await this.onSuccessfulRequirement(requirement, context);\n } else {\n await this.onFailedRequirement(requirement, error);\n }\n }\n }\n\n private async onSuccessfulRequirement(\n requirement: Requirement.Requirement,\n context: Requirement.TestContext\n ): Promise<void> {\n const hasChildren = requirement.children.length > 0;\n\n if (hasChildren) {\n await this.checkRequirements(requirement.children, context);\n }\n }\n\n private async onFailedRequirement(\n requirement: Requirement.Requirement,\n originalError: Error\n ): Promise<void> {\n const errorMessage = `Requirement failed: ${originalError.message} (${f.highlight(\n requirement.name\n )})`;\n const warningMessage = originalError.message;\n const confirmationMessage = `Ignore optional requirement \"${f.highlight(requirement.name)}\" ?`;\n\n const error = new Error(errorMessage);\n\n if (requirement.isRequired) {\n throw error;\n }\n\n this.logger?.warn?.(warningMessage);\n\n const response = await this.confirmationCallback?.(confirmationMessage);\n\n if (!response) {\n throw error;\n }\n }\n\n private async updateDependencies(): Promise<void> {\n const { packageJSON, packageJSONPath } = this.project;\n\n const json = createJSONTransformAPI(packageJSON);\n\n const dependencies = json.get<Record<string, string>>('dependencies', {});\n const devDependencies = json.get<Record<string, string>>('devDependencies', {});\n\n const strapiProductionDependencies = this.getScopedStrapiDependencies(dependencies);\n const strapiDevelopmentDependencies = this.getScopedStrapiDependencies(devDependencies);\n\n const strapiPackagesToUpgradeCount =\n strapiProductionDependencies.length + strapiDevelopmentDependencies.length;\n\n this.logger?.debug?.(\n `Found ${f.highlight(strapiPackagesToUpgradeCount)} dependency(ies) to update`\n );\n strapiProductionDependencies.forEach((dependency) =>\n this.logger?.debug?.(`- ${dependency[0]} (${dependency[1]} -> ${this.target})`)\n );\n strapiDevelopmentDependencies.forEach((dependency) =>\n this.logger?.debug?.(\n `- ${dependency[0]} (devDependencies) (${dependency[1]} -> ${this.target})`\n )\n );\n\n if (strapiPackagesToUpgradeCount === 0) {\n return;\n }\n\n strapiProductionDependencies.forEach(([name]) =>\n json.set(`dependencies.${name}`, this.target.raw)\n );\n strapiDevelopmentDependencies.forEach(([name]) =>\n json.set(`devDependencies.${name}`, this.target.raw)\n );\n\n const updatedPackageJSON = json.root();\n\n if (this.isDry) {\n this.logger?.debug?.(`Skipping dependencies update (${chalk.italic('dry mode')})`);\n return;\n }\n\n await saveJSON(packageJSONPath, updatedPackageJSON);\n }\n\n private getScopedStrapiDependencies(dependencies: Record<string, string>): DependenciesEntries {\n const { strapiVersion } = this.project;\n\n const strapiDependencies: DependenciesEntries = [];\n\n // Find all @strapi/* packages matching the current Strapi version\n for (const [name, version] of Object.entries(dependencies)) {\n const isScopedStrapiPackage = name.startsWith(projectConstants.SCOPED_STRAPI_PACKAGE_PREFIX);\n const isOnCurrentStrapiVersion = isValidSemVer(version) && version === strapiVersion.raw;\n\n if (isScopedStrapiPackage && isOnCurrentStrapiVersion) {\n strapiDependencies.push([name, semVerFactory(version)]);\n }\n }\n\n return strapiDependencies;\n }\n\n private async installDependencies(): Promise<void> {\n const projectPath = this.project.cwd;\n\n const packageManagerName = await packageManager.getPreferred(projectPath);\n\n this.logger?.debug?.(`Using ${f.highlight(packageManagerName)} as package manager`);\n\n if (this.isDry) {\n this.logger?.debug?.(`Skipping dependencies installation (${chalk.italic('dry mode')})`);\n return;\n }\n\n await packageManager.installDependencies(projectPath, packageManagerName, {\n stdout: this.logger?.stdout,\n stderr: this.logger?.stderr,\n });\n\n await this.clearStrapiAdminViteCacheAfterUpgrade();\n }\n\n /**\n * Removes only `node_modules/.strapi/vite` (Vite `cacheDir` for the admin panel). Generated\n * cache — not user source. Optionally gated by `confirm` when the CLI passes a callback so\n * users know the next `strapi develop` may spend longer once re-optimizing dependencies.\n */\n private async clearStrapiAdminViteCacheAfterUpgrade(): Promise<void> {\n if (this.isDry) {\n return;\n }\n\n const shouldClear =\n typeof this.confirmationCallback === 'function' &&\n (await this.confirm(\n [\n 'Remove the Strapi admin dev cache',\n chalk.dim('(node_modules/.strapi/vite)'),\n '?',\n 'Recommended after dependency changes to avoid stale bundles;',\n 'the next',\n chalk.bold('strapi develop'),\n 'may take longer once while Vite re-optimizes.',\n ].join(' ')\n ));\n\n if (!shouldClear) {\n this.logger?.info?.(\n 'Skipped clearing admin dev cache. If the admin panel misbehaves after upgrading, delete node_modules/.strapi/vite and run develop again.'\n );\n return;\n }\n\n const cachePath = path.join(this.project.cwd, 'node_modules', '.strapi', 'vite');\n\n try {\n await rm(cachePath, { recursive: true, force: true });\n this.logger?.debug?.(`Removed Strapi admin Vite cache at ${cachePath}`);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n this.logger?.warn?.(`Could not remove Strapi admin Vite cache at ${cachePath}: ${message}`);\n }\n }\n\n private async runCodemods(range: Version.Range): Promise<void> {\n const codemodRunner = codemodRunnerFactory(this.project, range);\n\n codemodRunner.dry(this.isDry);\n\n if (this.logger) {\n codemodRunner.setLogger(this.logger);\n }\n\n await codemodRunner.run();\n }\n}\n\n/**\n * Resolves the NPM target version based on the given project, target, and NPM package.\n * If target is a SemVer, it directly finds it. If it's a release type (major, minor, patch),\n * it calculates the range of versions for this release type and returns the latest version within this range.\n */\nconst resolveNPMTarget = (\n project: AppProject,\n target: Version.ReleaseType | Version.SemVer,\n npmPackage: NPM.Package\n): NPM.NPMPackageVersion => {\n // Semver\n if (isSemverInstance(target)) {\n const version = npmPackage.findVersion(target);\n\n if (!version) {\n throw new NPMCandidateNotFoundError(target);\n }\n\n return version;\n }\n\n // Release Types\n if (isSemVerReleaseType(target)) {\n const range = rangeFromVersions(project.strapiVersion, target);\n const npmVersionsMatches = npmPackage.findVersionsInRange(range);\n\n // The targeted version is the latest one that matches the given range\n const version = npmVersionsMatches.at(-1);\n\n if (!version) {\n throw new NPMCandidateNotFoundError(range, `The project is already up-to-date (${target})`);\n }\n\n return version;\n }\n\n throw new NPMCandidateNotFoundError(target);\n};\n\nexport const upgraderFactory = (\n project: AppProject,\n target: Version.ReleaseType | Version.SemVer,\n npmPackage: NPM.Package\n) => {\n const npmTarget = resolveNPMTarget(project, target, npmPackage);\n const semverTarget = semVerFactory(npmTarget.version);\n\n if (semver.eq(semverTarget, project.strapiVersion)) {\n throw new Error(`The project is already using v${semverTarget}`);\n }\n\n if (semver.lt(semverTarget, project.strapiVersion)) {\n throw new Error(\n `The target version v${semverTarget} must be greater than the current version v${project.strapiVersion}`\n );\n }\n\n return new Upgrader(project, semverTarget, npmPackage);\n};\n\nconst successReport = (): UpgradeReport => ({ success: true, error: null });\nconst erroredReport = (error: Error): UpgradeReport => ({ success: false, error });\n"],"names":["Upgrader","getNPMPackage","npmPackage","getProject","project","getTarget","semVerFactory","target","raw","setRequirements","requirements","setTarget","syncCodemodsTarget","codemodsTarget","major","minor","patch","logger","debug","f","overrideCodemodsTarget","setLogger","onConfirm","callback","confirmationCallback","dry","enabled","isDry","addRequirement","requirement","push","fRequired","isRequired","name","upgrade","info","strapiVersion","warn","range","rangeFromVersions","codemodsRange","npmVersionsMatches","findVersionsInRange","length","checkRequirements","runCodemods","refresh","updateDependencies","installDependencies","e","erroredReport","unknownToError","successReport","confirm","message","context","pass","error","test","onSuccessfulRequirement","onFailedRequirement","hasChildren","children","originalError","errorMessage","warningMessage","confirmationMessage","Error","response","packageJSON","packageJSONPath","json","createJSONTransformAPI","dependencies","get","devDependencies","strapiProductionDependencies","getScopedStrapiDependencies","strapiDevelopmentDependencies","strapiPackagesToUpgradeCount","forEach","dependency","set","updatedPackageJSON","root","chalk","italic","saveJSON","strapiDependencies","version","Object","entries","isScopedStrapiPackage","startsWith","projectConstants","isOnCurrentStrapiVersion","isValidSemVer","projectPath","cwd","packageManagerName","packageManager","getPreferred","stdout","stderr","clearStrapiAdminViteCacheAfterUpgrade","shouldClear","dim","bold","join","cachePath","path","rm","recursive","force","String","codemodRunner","codemodRunnerFactory","run","resolveNPMTarget","isSemverInstance","findVersion","NPMCandidateNotFoundError","isSemVerReleaseType","at","upgraderFactory","npmTarget","semverTarget","semver","eq","lt","success"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@strapi/upgrade",
|
|
3
|
-
"version": "5.48.
|
|
3
|
+
"version": "5.48.1",
|
|
4
4
|
"description": "CLI to upgrade Strapi applications effortless",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"strapi",
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
"watch": "run -T rollup -c -w"
|
|
66
66
|
},
|
|
67
67
|
"dependencies": {
|
|
68
|
-
"@strapi/utils": "5.48.
|
|
68
|
+
"@strapi/utils": "5.48.1",
|
|
69
69
|
"chalk": "4.1.2",
|
|
70
70
|
"cli-table3": "0.6.5",
|
|
71
71
|
"commander": "8.3.0",
|
|
@@ -83,14 +83,14 @@
|
|
|
83
83
|
"undici": "6.25.0"
|
|
84
84
|
},
|
|
85
85
|
"devDependencies": {
|
|
86
|
-
"@strapi/types": "5.48.
|
|
86
|
+
"@strapi/types": "5.48.1",
|
|
87
87
|
"@types/fs-extra": "11.0.4",
|
|
88
88
|
"@types/jscodeshift": "17.3.0",
|
|
89
|
-
"eslint-config-custom": "5.48.
|
|
89
|
+
"eslint-config-custom": "5.48.1",
|
|
90
90
|
"rimraf": "6.1.3"
|
|
91
91
|
},
|
|
92
92
|
"engines": {
|
|
93
|
-
"node": ">=20.0.0 <=
|
|
93
|
+
"node": ">=20.0.0 <=26.x.x",
|
|
94
94
|
"npm": ">=6.0.0"
|
|
95
95
|
}
|
|
96
96
|
}
|