@strapi/upgrade 5.57.0 → 5.59.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.
@@ -1 +1 @@
1
- {"version":3,"file":"codemods.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/codemods.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOzC,OAAO,KAAK,EAGV,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,UAAU,CAAC;AAKlB,eAAO,MAAM,WAAW,EAAE,kBAgEzB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,mBAW1B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,QAAQ,GAAI,SAAS,OAAO,SAqCxC,CAAC"}
1
+ {"version":3,"file":"codemods.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/codemods.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOzC,OAAO,KAAK,EAGV,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,UAAU,CAAC;AAKlB,eAAO,MAAM,WAAW,EAAE,kBA8DzB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,mBAW1B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,QAAQ,GAAI,SAAS,OAAO,SAqCxC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"package.d.ts","sourceRoot":"","sources":["../../../src/modules/npm/package.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,OAAO,IAAI,gBAAgB,EAAc,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC1F,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAKnC,qBAAa,OAAQ,YAAW,gBAAgB;IAC9C,IAAI,EAAE,MAAM,CAAC;IAEb,GAAG,EAAE,MAAM,CAAC;IAEZ,OAAO,CAAC,MAAM,CAAS;IAEvB,OAAO,CAAC,UAAU,CAAoB;gBAE1B,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAOrD,IAAI,QAAQ,YAEX;IAED,OAAO,CAAC,qBAAqB;IAI7B,eAAe;IAMf,iBAAiB;IAMjB,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK;YAc1B,mBAAmB;IAWjC,OAAO,CAAC,uBAAuB;YAWjB,6BAA6B;YA6B7B,oBAAoB;IAgBlC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAM7D,OAAO;IAeb,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM;CAGtC;AAED,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,EAAE,KAAK,MAAM,EAAE,QAAQ,MAAM,YAC3C,CAAC"}
1
+ {"version":3,"file":"package.d.ts","sourceRoot":"","sources":["../../../src/modules/npm/package.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,OAAO,IAAI,gBAAgB,EAAc,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC1F,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAUnC,qBAAa,OAAQ,YAAW,gBAAgB;IAC9C,IAAI,EAAE,MAAM,CAAC;IAEb,GAAG,EAAE,MAAM,CAAC;IAEZ,OAAO,CAAC,MAAM,CAAS;IAEvB,OAAO,CAAC,UAAU,CAAoB;gBAE1B,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAOrD,IAAI,QAAQ,YAEX;IAED,OAAO,CAAC,qBAAqB;IAI7B,eAAe;IAMf,iBAAiB;IAMjB,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK;YAc1B,mBAAmB;IAWjC,OAAO,CAAC,uBAAuB;YAWjB,6BAA6B;YA6B7B,oBAAoB;IAgBlC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAM7D,OAAO;IAgBb,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM;CAGtC;AAED,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,EAAE,KAAK,MAAM,EAAE,QAAQ,MAAM,YAC3C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/modules/runner/runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,OAAO,KAAK,EAAE,MAAM,IAAI,eAAe,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9F,8BAAsB,cAAc,CAAC,OAAO,SAAS,mBAAmB,CACtE,YAAW,eAAe,CAAC,OAAO,CAAC;IAEnC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;IAEzC,KAAK,EAAE,MAAM,EAAE,CAAC;IAEhB,aAAa,EAAE,OAAO,CAAC;gBAEX,KAAK,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,OAAO;IAK7C,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,OAAO;IAY3D,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,GAAG,OAAO;CAClD"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/modules/runner/runner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,OAAO,KAAK,EAAE,MAAM,IAAI,eAAe,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9F,8BAAsB,cAAc,CAClC,OAAO,SAAS,mBAAmB,CACnC,YAAW,eAAe,CAAC,OAAO,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;IAEzC,KAAK,EAAE,MAAM,EAAE,CAAC;IAEhB,aAAa,EAAE,OAAO,CAAC;gBAEX,KAAK,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,OAAO;IAK7C,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,OAAO;IAY3D,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,GAAG,OAAO;CAClD"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/modules/version/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC;AAE7B,MAAM,MAAM,cAAc,GACtB,GAAG,OAAO,EAAE,GACZ,GAAG,OAAO,IAAI,OAAO,EAAE,GACvB,GAAG,OAAO,IAAI,OAAO,IAAI,OAAO,EAAE,CAAC;AAEvC,MAAM,MAAM,aAAa,GAAG,GAAG,OAAO,IAAI,OAAO,IAAI,OAAO,EAAE,CAAC;AAE/D,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAE5C,eAAO,MAAM,aAAa;;;;;CAOhB,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,OAAO,aAAa,CAAC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/modules/version/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC;AAE7B,MAAM,MAAM,cAAc,GACxB,GAAG,OAAO,EAAE,GAAG,GAAG,OAAO,IAAI,OAAO,EAAE,GAAG,GAAG,OAAO,IAAI,OAAO,IAAI,OAAO,EAAE,CAAC;AAE9E,MAAM,MAAM,aAAa,GAAG,GAAG,OAAO,IAAI,OAAO,IAAI,OAAO,EAAE,CAAC;AAE/D,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAE5C,eAAO,MAAM,aAAa;;;;;CAOhB,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,OAAO,aAAa,CAAC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "5.57.0";
3
+ var version = "5.59.0";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.js.map
@@ -1,4 +1,4 @@
1
- var version = "5.57.0";
1
+ var version = "5.59.0";
2
2
 
3
3
  export { version };
4
4
  //# sourceMappingURL=package.json.mjs.map
@@ -38,11 +38,11 @@ const runCodemods = async (options)=>{
38
38
  });
39
39
  logger$1.warn("Please make sure you've created a backup of your codebase and files before running the codemods");
40
40
  const selectCodemods = async (codemods)=>{
41
- const selectableCodemods = codemods.map(({ version, codemods })=>codemods.map((codemod)=>({
41
+ const selectableCodemods = codemods.flatMap(({ version, codemods })=>codemods.map((codemod)=>({
42
42
  title: `(${version}) ${codemod.format()}`,
43
43
  value: codemod,
44
44
  selected: true
45
- }))).flat();
45
+ })));
46
46
  if (selectableCodemods.length === 0) {
47
47
  logger$1.info('No codemods to run');
48
48
  return [];
@@ -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.RELEASE_TYPES.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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"}
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.RELEASE_TYPES.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.flatMap(({ version, codemods }) =>\n codemods.map((codemod) => ({\n title: `(${version}) ${codemod.format()}`,\n value: codemod,\n selected: true,\n }))\n );\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","flatMap","version","map","codemod","title","format","value","selected","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,mBAAqB,CAACC,KAAK;AAE3C,MAAMC,cAAkC,OAAOC,OAAAA,GAAAA;AACpD,IAAA,MAAM,EAAEC,MAAM,EAAEC,KAAK,EAAE,GAAGF,OAAAA;AAC1B,IAAA,MAAMG,WAASC,oBAAAA,CAAc;AAAEH,QAAAA,MAAAA;AAAQC,QAAAA;AAAM,KAAA,CAAA;AAE7CC,IAAAA,QAAAA,CAAOE,IAAI,CACT,iGAAA,CAAA;AAcF,IAAA,MAAMC,iBAAiB,OAAOC,QAAAA,GAAAA;AAC5B,QAAA,MAAMC,qBAAqBD,QAAAA,CAASE,OAAO,CAAC,CAAC,EAAEC,OAAO,EAAEH,QAAQ,EAAE,GAChEA,QAAAA,CAASI,GAAG,CAAC,CAACC,WAAa;oBACzBC,KAAAA,EAAO,CAAC,CAAC,EAAEH,OAAAA,CAAQ,EAAE,EAAEE,OAAAA,CAAQE,MAAM,EAAA,CAAA,CAAI;oBACzCC,KAAAA,EAAOH,OAAAA;oBACPI,QAAAA,EAAU;iBACZ,CAAA,CAAA,CAAA;QAGF,IAAIR,kBAAAA,CAAmBS,MAAM,KAAK,CAAA,EAAG;AACnCd,YAAAA,QAAAA,CAAOe,IAAI,CAAC,oBAAA,CAAA;AACZ,YAAA,OAAO,EAAE;AACX,QAAA;AAEA,QAAA,MAAM,EAAEC,gBAAgB,EAAE,GAA4C,MAAMC,wBAAAA,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,QAAAA,CAAOe,IAAI,CAAC,sBAAA,CAAA;AACZ,YAAA,OAAO,EAAE;AACX,QAAA;AAEA,QAAA,OAAOC,gBAAAA,CAAiBR,GAAG,CAA8B,CAACC,WAAa;AACrEF,gBAAAA,OAAAA,EAASE,QAAQF,OAAO;gBACxBH,QAAAA,EAAU;AAACK,oBAAAA;AAAQ;aACrB,CAAA,CAAA;AACF,IAAA,CAAA;IAEA,OAAOa,yBACO,CAAC;AACXtB,gBAAAA,QAAAA;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,kBAAAA,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,WAASC,oBAAAA,CAAc;AAAEH,QAAAA,MAAAA;AAAQC,QAAAA;AAAM,KAAA,CAAA;IAE7C,OAAOuB,2BACQ,CAAC;AACZG,QAAAA,GAAAA,EAAK5B,QAAQ6B,WAAW;QACxBC,MAAAA,EAAQ9B,OAAAA,CAAQ+B,KAAK,IAAInC,cAAAA;AACzBO,gBAAAA;AACF,KAAA,CAAA,CACC8B,KAAK,CAAC,CAACC,MAAQC,kBAAAA,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,2BACVD,SAAS,CAACE,mBACVF,SAAS,CAACG,qBACVH,SAAS,CAACI,sBACVJ,SAAS,CAACK,qBACVC,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,2BACVD,SAAS,CAACG,mBAAAA,CAAAA,CACVH,SAAS,CAACI,oBAAAA,CAAAA,CACVJ,SAAS,CAACK,mBAAAA,CAAAA,CACVC,MAAM,CAAC,OAAOhD,OAAAA,GAAAA;AACb,QAAA,OAAOoC,YAAAA,CAAapC,OAAAA,CAAAA;AACtB,IAAA,CAAA,CAAA;AACJ;;;;;;"}
@@ -32,11 +32,11 @@ const runCodemods = async (options)=>{
32
32
  });
33
33
  logger.warn("Please make sure you've created a backup of your codebase and files before running the codemods");
34
34
  const selectCodemods = async (codemods)=>{
35
- const selectableCodemods = codemods.map(({ version, codemods })=>codemods.map((codemod)=>({
35
+ const selectableCodemods = codemods.flatMap(({ version, codemods })=>codemods.map((codemod)=>({
36
36
  title: `(${version}) ${codemod.format()}`,
37
37
  value: codemod,
38
38
  selected: true
39
- }))).flat();
39
+ })));
40
40
  if (selectableCodemods.length === 0) {
41
41
  logger.info('No codemods to run');
42
42
  return [];
@@ -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.RELEASE_TYPES.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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"}
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.RELEASE_TYPES.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.flatMap(({ version, codemods }) =>\n codemods.map((codemod) => ({\n title: `(${version}) ${codemod.format()}`,\n value: codemod,\n selected: true,\n }))\n );\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","flatMap","version","map","codemod","title","format","value","selected","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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"}
@@ -4,7 +4,10 @@ var assert = require('node:assert');
4
4
  var semver$1 = require('semver');
5
5
  var execa = require('execa');
6
6
  var utils = require('@strapi/utils');
7
- var undici = require('undici');
7
+ var ProxyAgent = require('undici/lib/dispatcher/proxy-agent.js');
8
+ var Dispatcher1Wrapper = require('undici/lib/dispatcher/dispatcher1-wrapper.js');
9
+ var Dispatcher = require('undici/lib/dispatcher/dispatcher.js');
10
+ var connect = require('undici/lib/api/api-connect.js');
8
11
  var constants = require('./constants.js');
9
12
  var semver = require('../version/semver.js');
10
13
 
@@ -13,9 +16,18 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
13
16
  var assert__default = /*#__PURE__*/_interopDefault(assert);
14
17
  var semver__default = /*#__PURE__*/_interopDefault(semver$1);
15
18
  var execa__default = /*#__PURE__*/_interopDefault(execa);
19
+ var ProxyAgent__default = /*#__PURE__*/_interopDefault(ProxyAgent);
20
+ var Dispatcher1Wrapper__default = /*#__PURE__*/_interopDefault(Dispatcher1Wrapper);
21
+ var Dispatcher__default = /*#__PURE__*/_interopDefault(Dispatcher);
22
+ var connect__default = /*#__PURE__*/_interopDefault(connect);
16
23
 
24
+ var // undici's main entry adds connect() to every dispatcher. ProxyAgent needs it to open the CONNECT
25
+ // tunnel used for https targets such as the npm registry, so add it here since the entry is skipped.
26
+ _Dispatcher_prototype;
27
+ (_Dispatcher_prototype = Dispatcher__default.default.prototype).connect ?? (_Dispatcher_prototype.connect = connect__default.default);
17
28
  const proxyUrl = process.env.HTTP_PROXY || process.env.HTTPS_PROXY;
18
- const agent = proxyUrl ? new undici.ProxyAgent(proxyUrl) : undefined;
29
+ // Wrapped so Node's built-in fetch (bundling its own undici) can use an undici 8 dispatcher
30
+ const agent = proxyUrl ? new Dispatcher1Wrapper__default.default(new ProxyAgent__default.default(proxyUrl)) : undefined;
19
31
  class Package {
20
32
  get isLoaded() {
21
33
  return this.npmPackage !== null;
@@ -118,6 +130,7 @@ class Package {
118
130
  async refresh() {
119
131
  const packageURL = `${await this.determineRegistryUrl()}/${this.name}`;
120
132
  const response = await fetch(packageURL, {
133
+ // The global RequestInit types its dispatcher with Node's bundled undici types
121
134
  dispatcher: agent
122
135
  });
123
136
  // TODO: Use a validation library to make sure the response structure is correct
@@ -1 +1 @@
1
- {"version":3,"file":"package.js","sources":["../../../../src/modules/npm/package.ts"],"sourcesContent":["import assert from 'node:assert';\nimport semver from 'semver';\nimport execa from 'execa';\nimport { packageManager } from '@strapi/utils';\n\nimport { ProxyAgent } from 'undici';\nimport * as constants from './constants';\nimport { isLiteralSemVer } from '../version';\n\nimport type { Package as PackageInterface, NPMPackage, NPMPackageVersion } from './types';\nimport type { Version } from '../version';\nimport { Logger } from '../logger';\n\nconst proxyUrl = process.env.HTTP_PROXY || process.env.HTTPS_PROXY;\nconst agent = proxyUrl ? new ProxyAgent(proxyUrl) : undefined;\n\nexport class Package implements PackageInterface {\n name: string;\n\n cwd: string;\n\n private logger: Logger;\n\n private npmPackage: NPMPackage | null;\n\n constructor(name: string, cwd: string, logger: Logger) {\n this.name = name;\n this.cwd = cwd;\n this.logger = logger;\n this.npmPackage = null;\n }\n\n get isLoaded() {\n return this.npmPackage !== null;\n }\n\n private assertPackageIsLoaded(_npmPackage: NPMPackage | null): asserts _npmPackage is NPMPackage {\n assert(this.isLoaded, 'The package is not loaded yet');\n }\n\n getVersionsDict() {\n this.assertPackageIsLoaded(this.npmPackage);\n\n return this.npmPackage.versions;\n }\n\n getVersionsAsList() {\n this.assertPackageIsLoaded(this.npmPackage);\n\n return Object.values(this.npmPackage.versions);\n }\n\n findVersionsInRange(range: Version.Range) {\n const versions = this.getVersionsAsList();\n\n return (\n versions\n // Only select versions matching the upgrade range\n .filter((v) => range.test(v.version))\n // Only select supported version format (x.x.x)\n .filter((v) => isLiteralSemVer(v.version))\n // Sort in ascending order\n .sort((v1, v2) => semver.compare(v1.version, v2.version))\n );\n }\n\n private async getYarnMajorVersion(): Promise<number> {\n try {\n const { stdout } = await execa('yarn', ['--version'], { timeout: 5_000 });\n const version = stdout.trim();\n return parseInt(version.split('.')[0], 10);\n } catch {\n // Default to Yarn Berry (v2+) if version check fails\n return 2;\n }\n }\n\n private normalizeRegistryOutput(stdout: string): string | undefined {\n const registry = stdout.trim();\n\n // Yarn Classic (v1) may return literal \"undefined\" for unset config values\n if (!registry || registry === 'undefined') {\n return undefined;\n }\n\n return registry;\n }\n\n private async getRegistryFromPackageManager(): Promise<string | undefined> {\n try {\n const packageManagerName = await packageManager.getPreferred(this.cwd);\n if (!packageManagerName) return undefined;\n\n let command: readonly string[];\n\n if (packageManagerName === 'yarn') {\n const yarnMajorVersion = await this.getYarnMajorVersion();\n // Yarn Classic (v1) uses 'registry', Yarn Berry (v2+) uses 'npmRegistryServer'\n command =\n yarnMajorVersion >= 2\n ? ['config', 'get', 'npmRegistryServer']\n : ['config', 'get', 'registry'];\n } else if (packageManagerName === 'npm' || packageManagerName === 'pnpm') {\n command = ['config', 'get', 'registry'];\n } else {\n this.logger.warn(`Unsupported package manager: ${packageManagerName}`);\n return undefined;\n }\n\n const { stdout } = await execa(packageManagerName, [...command], { timeout: 10_000 });\n return this.normalizeRegistryOutput(stdout);\n } catch {\n this.logger.warn('Failed to determine registry URL from package manager');\n return undefined;\n }\n }\n\n private async determineRegistryUrl(): Promise<string> {\n if (process.env.NPM_REGISTRY_URL) {\n this.logger.debug(`Using NPM_REGISTRY_URL: ${process.env.NPM_REGISTRY_URL}`);\n return process.env.NPM_REGISTRY_URL.replace(/\\/$/, '');\n }\n\n const packageManagerRegistry = await this.getRegistryFromPackageManager();\n if (packageManagerRegistry) {\n this.logger.debug(`Using package manager registry: ${packageManagerRegistry}`);\n return packageManagerRegistry.replace(/\\/$/, '');\n }\n\n this.logger.debug(`Using default registry: ${constants.NPM_REGISTRY_URL}`);\n return constants.NPM_REGISTRY_URL.replace(/\\/$/, '');\n }\n\n findVersion(version: Version.SemVer): NPMPackageVersion | undefined {\n const versions = this.getVersionsAsList();\n\n return versions.find((npmVersion) => semver.eq(npmVersion.version, version));\n }\n\n async refresh() {\n const packageURL = `${await this.determineRegistryUrl()}/${this.name}`;\n\n const response = await fetch(packageURL, {\n dispatcher: agent,\n });\n\n // TODO: Use a validation library to make sure the response structure is correct\n assert(response.ok, `Request failed for ${packageURL}`);\n\n this.npmPackage = (await response.json()) as NPMPackage;\n\n return this;\n }\n\n versionExists(version: Version.SemVer) {\n return this.findVersion(version) !== undefined;\n }\n}\n\nexport const npmPackageFactory = (name: string, cwd: string, logger: Logger) =>\n new Package(name, cwd, logger);\n"],"names":["proxyUrl","process","env","HTTP_PROXY","HTTPS_PROXY","agent","ProxyAgent","undefined","Package","isLoaded","npmPackage","assertPackageIsLoaded","_npmPackage","assert","getVersionsDict","versions","getVersionsAsList","Object","values","findVersionsInRange","range","filter","v","test","version","isLiteralSemVer","sort","v1","v2","semver","compare","getYarnMajorVersion","stdout","execa","timeout","trim","parseInt","split","normalizeRegistryOutput","registry","getRegistryFromPackageManager","packageManagerName","packageManager","getPreferred","cwd","command","yarnMajorVersion","logger","warn","determineRegistryUrl","NPM_REGISTRY_URL","debug","replace","packageManagerRegistry","constants","findVersion","find","npmVersion","eq","refresh","packageURL","name","response","fetch","dispatcher","ok","json","versionExists","npmPackageFactory"],"mappings":"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"}
1
+ {"version":3,"file":"package.js","sources":["../../../../src/modules/npm/package.ts"],"sourcesContent":["import assert from 'node:assert';\nimport semver from 'semver';\nimport execa from 'execa';\nimport { packageManager } from '@strapi/utils';\n\n// Import undici's dispatchers from their own files: loading undici's main entry replaces the\n// dispatcher of Node's built-in fetch (https://github.com/nodejs/undici/issues/5500)\n/* eslint-disable import/extensions -- required by the ESM build: undici has no exports map */\nimport ProxyAgent from 'undici/lib/dispatcher/proxy-agent.js';\nimport Dispatcher1Wrapper from 'undici/lib/dispatcher/dispatcher1-wrapper.js';\nimport Dispatcher from 'undici/lib/dispatcher/dispatcher.js';\nimport connect from 'undici/lib/api/api-connect.js';\n/* eslint-enable import/extensions */\nimport * as constants from './constants';\nimport { isLiteralSemVer } from '../version';\n\nimport type { Package as PackageInterface, NPMPackage, NPMPackageVersion } from './types';\nimport type { Version } from '../version';\nimport { Logger } from '../logger';\n\n// undici's main entry adds connect() to every dispatcher. ProxyAgent needs it to open the CONNECT\n// tunnel used for https targets such as the npm registry, so add it here since the entry is skipped.\nDispatcher.prototype.connect ??= connect;\n\nconst proxyUrl = process.env.HTTP_PROXY || process.env.HTTPS_PROXY;\n// Wrapped so Node's built-in fetch (bundling its own undici) can use an undici 8 dispatcher\nconst agent = proxyUrl ? new Dispatcher1Wrapper(new ProxyAgent(proxyUrl)) : undefined;\n\nexport class Package implements PackageInterface {\n name: string;\n\n cwd: string;\n\n private logger: Logger;\n\n private npmPackage: NPMPackage | null;\n\n constructor(name: string, cwd: string, logger: Logger) {\n this.name = name;\n this.cwd = cwd;\n this.logger = logger;\n this.npmPackage = null;\n }\n\n get isLoaded() {\n return this.npmPackage !== null;\n }\n\n private assertPackageIsLoaded(_npmPackage: NPMPackage | null): asserts _npmPackage is NPMPackage {\n assert(this.isLoaded, 'The package is not loaded yet');\n }\n\n getVersionsDict() {\n this.assertPackageIsLoaded(this.npmPackage);\n\n return this.npmPackage.versions;\n }\n\n getVersionsAsList() {\n this.assertPackageIsLoaded(this.npmPackage);\n\n return Object.values(this.npmPackage.versions);\n }\n\n findVersionsInRange(range: Version.Range) {\n const versions = this.getVersionsAsList();\n\n return (\n versions\n // Only select versions matching the upgrade range\n .filter((v) => range.test(v.version))\n // Only select supported version format (x.x.x)\n .filter((v) => isLiteralSemVer(v.version))\n // Sort in ascending order\n .sort((v1, v2) => semver.compare(v1.version, v2.version))\n );\n }\n\n private async getYarnMajorVersion(): Promise<number> {\n try {\n const { stdout } = await execa('yarn', ['--version'], { timeout: 5_000 });\n const version = stdout.trim();\n return parseInt(version.split('.')[0], 10);\n } catch {\n // Default to Yarn Berry (v2+) if version check fails\n return 2;\n }\n }\n\n private normalizeRegistryOutput(stdout: string): string | undefined {\n const registry = stdout.trim();\n\n // Yarn Classic (v1) may return literal \"undefined\" for unset config values\n if (!registry || registry === 'undefined') {\n return undefined;\n }\n\n return registry;\n }\n\n private async getRegistryFromPackageManager(): Promise<string | undefined> {\n try {\n const packageManagerName = await packageManager.getPreferred(this.cwd);\n if (!packageManagerName) return undefined;\n\n let command: readonly string[];\n\n if (packageManagerName === 'yarn') {\n const yarnMajorVersion = await this.getYarnMajorVersion();\n // Yarn Classic (v1) uses 'registry', Yarn Berry (v2+) uses 'npmRegistryServer'\n command =\n yarnMajorVersion >= 2\n ? ['config', 'get', 'npmRegistryServer']\n : ['config', 'get', 'registry'];\n } else if (packageManagerName === 'npm' || packageManagerName === 'pnpm') {\n command = ['config', 'get', 'registry'];\n } else {\n this.logger.warn(`Unsupported package manager: ${packageManagerName}`);\n return undefined;\n }\n\n const { stdout } = await execa(packageManagerName, [...command], { timeout: 10_000 });\n return this.normalizeRegistryOutput(stdout);\n } catch {\n this.logger.warn('Failed to determine registry URL from package manager');\n return undefined;\n }\n }\n\n private async determineRegistryUrl(): Promise<string> {\n if (process.env.NPM_REGISTRY_URL) {\n this.logger.debug(`Using NPM_REGISTRY_URL: ${process.env.NPM_REGISTRY_URL}`);\n return process.env.NPM_REGISTRY_URL.replace(/\\/$/, '');\n }\n\n const packageManagerRegistry = await this.getRegistryFromPackageManager();\n if (packageManagerRegistry) {\n this.logger.debug(`Using package manager registry: ${packageManagerRegistry}`);\n return packageManagerRegistry.replace(/\\/$/, '');\n }\n\n this.logger.debug(`Using default registry: ${constants.NPM_REGISTRY_URL}`);\n return constants.NPM_REGISTRY_URL.replace(/\\/$/, '');\n }\n\n findVersion(version: Version.SemVer): NPMPackageVersion | undefined {\n const versions = this.getVersionsAsList();\n\n return versions.find((npmVersion) => semver.eq(npmVersion.version, version));\n }\n\n async refresh() {\n const packageURL = `${await this.determineRegistryUrl()}/${this.name}`;\n\n const response = await fetch(packageURL, {\n // The global RequestInit types its dispatcher with Node's bundled undici types\n dispatcher: agent as unknown as RequestInit['dispatcher'],\n });\n\n // TODO: Use a validation library to make sure the response structure is correct\n assert(response.ok, `Request failed for ${packageURL}`);\n\n this.npmPackage = (await response.json()) as NPMPackage;\n\n return this;\n }\n\n versionExists(version: Version.SemVer) {\n return this.findVersion(version) !== undefined;\n }\n}\n\nexport const npmPackageFactory = (name: string, cwd: string, logger: Logger) =>\n new Package(name, cwd, logger);\n"],"names":["Dispatcher","prototype","connect","proxyUrl","process","env","HTTP_PROXY","HTTPS_PROXY","agent","Dispatcher1Wrapper","ProxyAgent","undefined","Package","isLoaded","npmPackage","assertPackageIsLoaded","_npmPackage","assert","getVersionsDict","versions","getVersionsAsList","Object","values","findVersionsInRange","range","filter","v","test","version","isLiteralSemVer","sort","v1","v2","semver","compare","getYarnMajorVersion","stdout","execa","timeout","trim","parseInt","split","normalizeRegistryOutput","registry","getRegistryFromPackageManager","packageManagerName","packageManager","getPreferred","cwd","command","yarnMajorVersion","logger","warn","determineRegistryUrl","NPM_REGISTRY_URL","debug","replace","packageManagerRegistry","constants","findVersion","find","npmVersion","eq","refresh","packageURL","name","response","fetch","dispatcher","ok","json","versionExists","npmPackageFactory"],"mappings":"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"}
@@ -2,12 +2,20 @@ import assert from 'node:assert';
2
2
  import semver from 'semver';
3
3
  import execa from 'execa';
4
4
  import { packageManager } from '@strapi/utils';
5
- import { ProxyAgent } from 'undici';
5
+ import ProxyAgent from 'undici/lib/dispatcher/proxy-agent.js';
6
+ import Dispatcher1Wrapper from 'undici/lib/dispatcher/dispatcher1-wrapper.js';
7
+ import Dispatcher from 'undici/lib/dispatcher/dispatcher.js';
8
+ import connect from 'undici/lib/api/api-connect.js';
6
9
  import { NPM_REGISTRY_URL } from './constants.mjs';
7
10
  import { isLiteralSemVer } from '../version/semver.mjs';
8
11
 
12
+ var // undici's main entry adds connect() to every dispatcher. ProxyAgent needs it to open the CONNECT
13
+ // tunnel used for https targets such as the npm registry, so add it here since the entry is skipped.
14
+ _Dispatcher_prototype;
15
+ (_Dispatcher_prototype = Dispatcher.prototype).connect ?? (_Dispatcher_prototype.connect = connect);
9
16
  const proxyUrl = process.env.HTTP_PROXY || process.env.HTTPS_PROXY;
10
- const agent = proxyUrl ? new ProxyAgent(proxyUrl) : undefined;
17
+ // Wrapped so Node's built-in fetch (bundling its own undici) can use an undici 8 dispatcher
18
+ const agent = proxyUrl ? new Dispatcher1Wrapper(new ProxyAgent(proxyUrl)) : undefined;
11
19
  class Package {
12
20
  get isLoaded() {
13
21
  return this.npmPackage !== null;
@@ -110,6 +118,7 @@ class Package {
110
118
  async refresh() {
111
119
  const packageURL = `${await this.determineRegistryUrl()}/${this.name}`;
112
120
  const response = await fetch(packageURL, {
121
+ // The global RequestInit types its dispatcher with Node's bundled undici types
113
122
  dispatcher: agent
114
123
  });
115
124
  // TODO: Use a validation library to make sure the response structure is correct
@@ -1 +1 @@
1
- {"version":3,"file":"package.mjs","sources":["../../../../src/modules/npm/package.ts"],"sourcesContent":["import assert from 'node:assert';\nimport semver from 'semver';\nimport execa from 'execa';\nimport { packageManager } from '@strapi/utils';\n\nimport { ProxyAgent } from 'undici';\nimport * as constants from './constants';\nimport { isLiteralSemVer } from '../version';\n\nimport type { Package as PackageInterface, NPMPackage, NPMPackageVersion } from './types';\nimport type { Version } from '../version';\nimport { Logger } from '../logger';\n\nconst proxyUrl = process.env.HTTP_PROXY || process.env.HTTPS_PROXY;\nconst agent = proxyUrl ? new ProxyAgent(proxyUrl) : undefined;\n\nexport class Package implements PackageInterface {\n name: string;\n\n cwd: string;\n\n private logger: Logger;\n\n private npmPackage: NPMPackage | null;\n\n constructor(name: string, cwd: string, logger: Logger) {\n this.name = name;\n this.cwd = cwd;\n this.logger = logger;\n this.npmPackage = null;\n }\n\n get isLoaded() {\n return this.npmPackage !== null;\n }\n\n private assertPackageIsLoaded(_npmPackage: NPMPackage | null): asserts _npmPackage is NPMPackage {\n assert(this.isLoaded, 'The package is not loaded yet');\n }\n\n getVersionsDict() {\n this.assertPackageIsLoaded(this.npmPackage);\n\n return this.npmPackage.versions;\n }\n\n getVersionsAsList() {\n this.assertPackageIsLoaded(this.npmPackage);\n\n return Object.values(this.npmPackage.versions);\n }\n\n findVersionsInRange(range: Version.Range) {\n const versions = this.getVersionsAsList();\n\n return (\n versions\n // Only select versions matching the upgrade range\n .filter((v) => range.test(v.version))\n // Only select supported version format (x.x.x)\n .filter((v) => isLiteralSemVer(v.version))\n // Sort in ascending order\n .sort((v1, v2) => semver.compare(v1.version, v2.version))\n );\n }\n\n private async getYarnMajorVersion(): Promise<number> {\n try {\n const { stdout } = await execa('yarn', ['--version'], { timeout: 5_000 });\n const version = stdout.trim();\n return parseInt(version.split('.')[0], 10);\n } catch {\n // Default to Yarn Berry (v2+) if version check fails\n return 2;\n }\n }\n\n private normalizeRegistryOutput(stdout: string): string | undefined {\n const registry = stdout.trim();\n\n // Yarn Classic (v1) may return literal \"undefined\" for unset config values\n if (!registry || registry === 'undefined') {\n return undefined;\n }\n\n return registry;\n }\n\n private async getRegistryFromPackageManager(): Promise<string | undefined> {\n try {\n const packageManagerName = await packageManager.getPreferred(this.cwd);\n if (!packageManagerName) return undefined;\n\n let command: readonly string[];\n\n if (packageManagerName === 'yarn') {\n const yarnMajorVersion = await this.getYarnMajorVersion();\n // Yarn Classic (v1) uses 'registry', Yarn Berry (v2+) uses 'npmRegistryServer'\n command =\n yarnMajorVersion >= 2\n ? ['config', 'get', 'npmRegistryServer']\n : ['config', 'get', 'registry'];\n } else if (packageManagerName === 'npm' || packageManagerName === 'pnpm') {\n command = ['config', 'get', 'registry'];\n } else {\n this.logger.warn(`Unsupported package manager: ${packageManagerName}`);\n return undefined;\n }\n\n const { stdout } = await execa(packageManagerName, [...command], { timeout: 10_000 });\n return this.normalizeRegistryOutput(stdout);\n } catch {\n this.logger.warn('Failed to determine registry URL from package manager');\n return undefined;\n }\n }\n\n private async determineRegistryUrl(): Promise<string> {\n if (process.env.NPM_REGISTRY_URL) {\n this.logger.debug(`Using NPM_REGISTRY_URL: ${process.env.NPM_REGISTRY_URL}`);\n return process.env.NPM_REGISTRY_URL.replace(/\\/$/, '');\n }\n\n const packageManagerRegistry = await this.getRegistryFromPackageManager();\n if (packageManagerRegistry) {\n this.logger.debug(`Using package manager registry: ${packageManagerRegistry}`);\n return packageManagerRegistry.replace(/\\/$/, '');\n }\n\n this.logger.debug(`Using default registry: ${constants.NPM_REGISTRY_URL}`);\n return constants.NPM_REGISTRY_URL.replace(/\\/$/, '');\n }\n\n findVersion(version: Version.SemVer): NPMPackageVersion | undefined {\n const versions = this.getVersionsAsList();\n\n return versions.find((npmVersion) => semver.eq(npmVersion.version, version));\n }\n\n async refresh() {\n const packageURL = `${await this.determineRegistryUrl()}/${this.name}`;\n\n const response = await fetch(packageURL, {\n dispatcher: agent,\n });\n\n // TODO: Use a validation library to make sure the response structure is correct\n assert(response.ok, `Request failed for ${packageURL}`);\n\n this.npmPackage = (await response.json()) as NPMPackage;\n\n return this;\n }\n\n versionExists(version: Version.SemVer) {\n return this.findVersion(version) !== undefined;\n }\n}\n\nexport const npmPackageFactory = (name: string, cwd: string, logger: Logger) =>\n new Package(name, cwd, logger);\n"],"names":["proxyUrl","process","env","HTTP_PROXY","HTTPS_PROXY","agent","ProxyAgent","undefined","Package","isLoaded","npmPackage","assertPackageIsLoaded","_npmPackage","assert","getVersionsDict","versions","getVersionsAsList","Object","values","findVersionsInRange","range","filter","v","test","version","isLiteralSemVer","sort","v1","v2","semver","compare","getYarnMajorVersion","stdout","execa","timeout","trim","parseInt","split","normalizeRegistryOutput","registry","getRegistryFromPackageManager","packageManagerName","packageManager","getPreferred","cwd","command","yarnMajorVersion","logger","warn","determineRegistryUrl","NPM_REGISTRY_URL","debug","replace","packageManagerRegistry","constants","findVersion","find","npmVersion","eq","refresh","packageURL","name","response","fetch","dispatcher","ok","json","versionExists","npmPackageFactory"],"mappings":"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"}
1
+ {"version":3,"file":"package.mjs","sources":["../../../../src/modules/npm/package.ts"],"sourcesContent":["import assert from 'node:assert';\nimport semver from 'semver';\nimport execa from 'execa';\nimport { packageManager } from '@strapi/utils';\n\n// Import undici's dispatchers from their own files: loading undici's main entry replaces the\n// dispatcher of Node's built-in fetch (https://github.com/nodejs/undici/issues/5500)\n/* eslint-disable import/extensions -- required by the ESM build: undici has no exports map */\nimport ProxyAgent from 'undici/lib/dispatcher/proxy-agent.js';\nimport Dispatcher1Wrapper from 'undici/lib/dispatcher/dispatcher1-wrapper.js';\nimport Dispatcher from 'undici/lib/dispatcher/dispatcher.js';\nimport connect from 'undici/lib/api/api-connect.js';\n/* eslint-enable import/extensions */\nimport * as constants from './constants';\nimport { isLiteralSemVer } from '../version';\n\nimport type { Package as PackageInterface, NPMPackage, NPMPackageVersion } from './types';\nimport type { Version } from '../version';\nimport { Logger } from '../logger';\n\n// undici's main entry adds connect() to every dispatcher. ProxyAgent needs it to open the CONNECT\n// tunnel used for https targets such as the npm registry, so add it here since the entry is skipped.\nDispatcher.prototype.connect ??= connect;\n\nconst proxyUrl = process.env.HTTP_PROXY || process.env.HTTPS_PROXY;\n// Wrapped so Node's built-in fetch (bundling its own undici) can use an undici 8 dispatcher\nconst agent = proxyUrl ? new Dispatcher1Wrapper(new ProxyAgent(proxyUrl)) : undefined;\n\nexport class Package implements PackageInterface {\n name: string;\n\n cwd: string;\n\n private logger: Logger;\n\n private npmPackage: NPMPackage | null;\n\n constructor(name: string, cwd: string, logger: Logger) {\n this.name = name;\n this.cwd = cwd;\n this.logger = logger;\n this.npmPackage = null;\n }\n\n get isLoaded() {\n return this.npmPackage !== null;\n }\n\n private assertPackageIsLoaded(_npmPackage: NPMPackage | null): asserts _npmPackage is NPMPackage {\n assert(this.isLoaded, 'The package is not loaded yet');\n }\n\n getVersionsDict() {\n this.assertPackageIsLoaded(this.npmPackage);\n\n return this.npmPackage.versions;\n }\n\n getVersionsAsList() {\n this.assertPackageIsLoaded(this.npmPackage);\n\n return Object.values(this.npmPackage.versions);\n }\n\n findVersionsInRange(range: Version.Range) {\n const versions = this.getVersionsAsList();\n\n return (\n versions\n // Only select versions matching the upgrade range\n .filter((v) => range.test(v.version))\n // Only select supported version format (x.x.x)\n .filter((v) => isLiteralSemVer(v.version))\n // Sort in ascending order\n .sort((v1, v2) => semver.compare(v1.version, v2.version))\n );\n }\n\n private async getYarnMajorVersion(): Promise<number> {\n try {\n const { stdout } = await execa('yarn', ['--version'], { timeout: 5_000 });\n const version = stdout.trim();\n return parseInt(version.split('.')[0], 10);\n } catch {\n // Default to Yarn Berry (v2+) if version check fails\n return 2;\n }\n }\n\n private normalizeRegistryOutput(stdout: string): string | undefined {\n const registry = stdout.trim();\n\n // Yarn Classic (v1) may return literal \"undefined\" for unset config values\n if (!registry || registry === 'undefined') {\n return undefined;\n }\n\n return registry;\n }\n\n private async getRegistryFromPackageManager(): Promise<string | undefined> {\n try {\n const packageManagerName = await packageManager.getPreferred(this.cwd);\n if (!packageManagerName) return undefined;\n\n let command: readonly string[];\n\n if (packageManagerName === 'yarn') {\n const yarnMajorVersion = await this.getYarnMajorVersion();\n // Yarn Classic (v1) uses 'registry', Yarn Berry (v2+) uses 'npmRegistryServer'\n command =\n yarnMajorVersion >= 2\n ? ['config', 'get', 'npmRegistryServer']\n : ['config', 'get', 'registry'];\n } else if (packageManagerName === 'npm' || packageManagerName === 'pnpm') {\n command = ['config', 'get', 'registry'];\n } else {\n this.logger.warn(`Unsupported package manager: ${packageManagerName}`);\n return undefined;\n }\n\n const { stdout } = await execa(packageManagerName, [...command], { timeout: 10_000 });\n return this.normalizeRegistryOutput(stdout);\n } catch {\n this.logger.warn('Failed to determine registry URL from package manager');\n return undefined;\n }\n }\n\n private async determineRegistryUrl(): Promise<string> {\n if (process.env.NPM_REGISTRY_URL) {\n this.logger.debug(`Using NPM_REGISTRY_URL: ${process.env.NPM_REGISTRY_URL}`);\n return process.env.NPM_REGISTRY_URL.replace(/\\/$/, '');\n }\n\n const packageManagerRegistry = await this.getRegistryFromPackageManager();\n if (packageManagerRegistry) {\n this.logger.debug(`Using package manager registry: ${packageManagerRegistry}`);\n return packageManagerRegistry.replace(/\\/$/, '');\n }\n\n this.logger.debug(`Using default registry: ${constants.NPM_REGISTRY_URL}`);\n return constants.NPM_REGISTRY_URL.replace(/\\/$/, '');\n }\n\n findVersion(version: Version.SemVer): NPMPackageVersion | undefined {\n const versions = this.getVersionsAsList();\n\n return versions.find((npmVersion) => semver.eq(npmVersion.version, version));\n }\n\n async refresh() {\n const packageURL = `${await this.determineRegistryUrl()}/${this.name}`;\n\n const response = await fetch(packageURL, {\n // The global RequestInit types its dispatcher with Node's bundled undici types\n dispatcher: agent as unknown as RequestInit['dispatcher'],\n });\n\n // TODO: Use a validation library to make sure the response structure is correct\n assert(response.ok, `Request failed for ${packageURL}`);\n\n this.npmPackage = (await response.json()) as NPMPackage;\n\n return this;\n }\n\n versionExists(version: Version.SemVer) {\n return this.findVersion(version) !== undefined;\n }\n}\n\nexport const npmPackageFactory = (name: string, cwd: string, logger: Logger) =>\n new Package(name, cwd, logger);\n"],"names":["Dispatcher","prototype","connect","proxyUrl","process","env","HTTP_PROXY","HTTPS_PROXY","agent","Dispatcher1Wrapper","ProxyAgent","undefined","Package","isLoaded","npmPackage","assertPackageIsLoaded","_npmPackage","assert","getVersionsDict","versions","getVersionsAsList","Object","values","findVersionsInRange","range","filter","v","test","version","isLiteralSemVer","sort","v1","v2","semver","compare","getYarnMajorVersion","stdout","execa","timeout","trim","parseInt","split","normalizeRegistryOutput","registry","getRegistryFromPackageManager","packageManagerName","packageManager","getPreferred","cwd","command","yarnMajorVersion","logger","warn","determineRegistryUrl","NPM_REGISTRY_URL","debug","replace","packageManagerRegistry","constants","findVersion","find","npmVersion","eq","refresh","packageURL","name","response","fetch","dispatcher","ok","json","versionExists","npmPackageFactory"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sources":["../../../../src/modules/runner/runner.ts"],"sourcesContent":["import type { Codemod } from '../codemod';\n\nimport type { Runner as RunnerInterface, RunnerConfiguration, RunnerFunction } from './types';\n\nexport abstract class AbstractRunner<TConfig extends RunnerConfiguration>\n implements RunnerInterface<TConfig>\n{\n abstract runner: RunnerFunction<TConfig>;\n\n paths: string[];\n\n configuration: TConfig;\n\n constructor(paths: string[], configuration: TConfig) {\n this.paths = paths;\n this.configuration = configuration;\n }\n\n async run(codemod: Codemod.Codemod, configuration?: TConfig) {\n const isValidCodemod = this.valid(codemod);\n\n if (!isValidCodemod) {\n throw new Error(`Invalid codemod provided to the runner: ${codemod.filename}`);\n }\n\n const runConfiguration: TConfig = { ...this.configuration, ...configuration };\n\n return this.runner(codemod.path, this.paths, runConfiguration);\n }\n\n abstract valid(codemod: Codemod.Codemod): boolean;\n}\n"],"names":["AbstractRunner","run","codemod","configuration","isValidCodemod","valid","Error","filename","runConfiguration","runner","path","paths"],"mappings":";;AAIO,MAAeA,cAAAA,CAAAA;AAcpB,IAAA,MAAMC,GAAAA,CAAIC,OAAwB,EAAEC,aAAuB,EAAE;AAC3D,QAAA,MAAMC,cAAAA,GAAiB,IAAI,CAACC,KAAK,CAACH,OAAAA,CAAAA;AAElC,QAAA,IAAI,CAACE,cAAAA,EAAgB;AACnB,YAAA,MAAM,IAAIE,KAAAA,CAAM,CAAC,wCAAwC,EAAEJ,OAAAA,CAAQK,QAAQ,CAAA,CAAE,CAAA;AAC/E,QAAA;AAEA,QAAA,MAAMC,gBAAAA,GAA4B;YAAE,GAAG,IAAI,CAACL,aAAa;AAAE,YAAA,GAAGA;AAAc,SAAA;QAE5E,OAAO,IAAI,CAACM,MAAM,CAACP,OAAAA,CAAQQ,IAAI,EAAE,IAAI,CAACC,KAAK,EAAEH,gBAAAA,CAAAA;AAC/C,IAAA;IAfA,WAAA,CAAYG,KAAe,EAAER,aAAsB,CAAE;QACnD,IAAI,CAACQ,KAAK,GAAGA,KAAAA;QACb,IAAI,CAACR,aAAa,GAAGA,aAAAA;AACvB,IAAA;AAeF;;;;"}
1
+ {"version":3,"file":"runner.js","sources":["../../../../src/modules/runner/runner.ts"],"sourcesContent":["import type { Codemod } from '../codemod';\n\nimport type { Runner as RunnerInterface, RunnerConfiguration, RunnerFunction } from './types';\n\nexport abstract class AbstractRunner<\n TConfig extends RunnerConfiguration,\n> implements RunnerInterface<TConfig> {\n abstract runner: RunnerFunction<TConfig>;\n\n paths: string[];\n\n configuration: TConfig;\n\n constructor(paths: string[], configuration: TConfig) {\n this.paths = paths;\n this.configuration = configuration;\n }\n\n async run(codemod: Codemod.Codemod, configuration?: TConfig) {\n const isValidCodemod = this.valid(codemod);\n\n if (!isValidCodemod) {\n throw new Error(`Invalid codemod provided to the runner: ${codemod.filename}`);\n }\n\n const runConfiguration: TConfig = { ...this.configuration, ...configuration };\n\n return this.runner(codemod.path, this.paths, runConfiguration);\n }\n\n abstract valid(codemod: Codemod.Codemod): boolean;\n}\n"],"names":["AbstractRunner","run","codemod","configuration","isValidCodemod","valid","Error","filename","runConfiguration","runner","path","paths"],"mappings":";;AAIO,MAAeA,cAAAA,CAAAA;AAcpB,IAAA,MAAMC,GAAAA,CAAIC,OAAwB,EAAEC,aAAuB,EAAE;AAC3D,QAAA,MAAMC,cAAAA,GAAiB,IAAI,CAACC,KAAK,CAACH,OAAAA,CAAAA;AAElC,QAAA,IAAI,CAACE,cAAAA,EAAgB;AACnB,YAAA,MAAM,IAAIE,KAAAA,CAAM,CAAC,wCAAwC,EAAEJ,OAAAA,CAAQK,QAAQ,CAAA,CAAE,CAAA;AAC/E,QAAA;AAEA,QAAA,MAAMC,gBAAAA,GAA4B;YAAE,GAAG,IAAI,CAACL,aAAa;AAAE,YAAA,GAAGA;AAAc,SAAA;QAE5E,OAAO,IAAI,CAACM,MAAM,CAACP,OAAAA,CAAQQ,IAAI,EAAE,IAAI,CAACC,KAAK,EAAEH,gBAAAA,CAAAA;AAC/C,IAAA;IAfA,WAAA,CAAYG,KAAe,EAAER,aAAsB,CAAE;QACnD,IAAI,CAACQ,KAAK,GAAGA,KAAAA;QACb,IAAI,CAACR,aAAa,GAAGA,aAAAA;AACvB,IAAA;AAeF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"runner.mjs","sources":["../../../../src/modules/runner/runner.ts"],"sourcesContent":["import type { Codemod } from '../codemod';\n\nimport type { Runner as RunnerInterface, RunnerConfiguration, RunnerFunction } from './types';\n\nexport abstract class AbstractRunner<TConfig extends RunnerConfiguration>\n implements RunnerInterface<TConfig>\n{\n abstract runner: RunnerFunction<TConfig>;\n\n paths: string[];\n\n configuration: TConfig;\n\n constructor(paths: string[], configuration: TConfig) {\n this.paths = paths;\n this.configuration = configuration;\n }\n\n async run(codemod: Codemod.Codemod, configuration?: TConfig) {\n const isValidCodemod = this.valid(codemod);\n\n if (!isValidCodemod) {\n throw new Error(`Invalid codemod provided to the runner: ${codemod.filename}`);\n }\n\n const runConfiguration: TConfig = { ...this.configuration, ...configuration };\n\n return this.runner(codemod.path, this.paths, runConfiguration);\n }\n\n abstract valid(codemod: Codemod.Codemod): boolean;\n}\n"],"names":["AbstractRunner","run","codemod","configuration","isValidCodemod","valid","Error","filename","runConfiguration","runner","path","paths"],"mappings":"AAIO,MAAeA,cAAAA,CAAAA;AAcpB,IAAA,MAAMC,GAAAA,CAAIC,OAAwB,EAAEC,aAAuB,EAAE;AAC3D,QAAA,MAAMC,cAAAA,GAAiB,IAAI,CAACC,KAAK,CAACH,OAAAA,CAAAA;AAElC,QAAA,IAAI,CAACE,cAAAA,EAAgB;AACnB,YAAA,MAAM,IAAIE,KAAAA,CAAM,CAAC,wCAAwC,EAAEJ,OAAAA,CAAQK,QAAQ,CAAA,CAAE,CAAA;AAC/E,QAAA;AAEA,QAAA,MAAMC,gBAAAA,GAA4B;YAAE,GAAG,IAAI,CAACL,aAAa;AAAE,YAAA,GAAGA;AAAc,SAAA;QAE5E,OAAO,IAAI,CAACM,MAAM,CAACP,OAAAA,CAAQQ,IAAI,EAAE,IAAI,CAACC,KAAK,EAAEH,gBAAAA,CAAAA;AAC/C,IAAA;IAfA,WAAA,CAAYG,KAAe,EAAER,aAAsB,CAAE;QACnD,IAAI,CAACQ,KAAK,GAAGA,KAAAA;QACb,IAAI,CAACR,aAAa,GAAGA,aAAAA;AACvB,IAAA;AAeF;;;;"}
1
+ {"version":3,"file":"runner.mjs","sources":["../../../../src/modules/runner/runner.ts"],"sourcesContent":["import type { Codemod } from '../codemod';\n\nimport type { Runner as RunnerInterface, RunnerConfiguration, RunnerFunction } from './types';\n\nexport abstract class AbstractRunner<\n TConfig extends RunnerConfiguration,\n> implements RunnerInterface<TConfig> {\n abstract runner: RunnerFunction<TConfig>;\n\n paths: string[];\n\n configuration: TConfig;\n\n constructor(paths: string[], configuration: TConfig) {\n this.paths = paths;\n this.configuration = configuration;\n }\n\n async run(codemod: Codemod.Codemod, configuration?: TConfig) {\n const isValidCodemod = this.valid(codemod);\n\n if (!isValidCodemod) {\n throw new Error(`Invalid codemod provided to the runner: ${codemod.filename}`);\n }\n\n const runConfiguration: TConfig = { ...this.configuration, ...configuration };\n\n return this.runner(codemod.path, this.paths, runConfiguration);\n }\n\n abstract valid(codemod: Codemod.Codemod): boolean;\n}\n"],"names":["AbstractRunner","run","codemod","configuration","isValidCodemod","valid","Error","filename","runConfiguration","runner","path","paths"],"mappings":"AAIO,MAAeA,cAAAA,CAAAA;AAcpB,IAAA,MAAMC,GAAAA,CAAIC,OAAwB,EAAEC,aAAuB,EAAE;AAC3D,QAAA,MAAMC,cAAAA,GAAiB,IAAI,CAACC,KAAK,CAACH,OAAAA,CAAAA;AAElC,QAAA,IAAI,CAACE,cAAAA,EAAgB;AACnB,YAAA,MAAM,IAAIE,KAAAA,CAAM,CAAC,wCAAwC,EAAEJ,OAAAA,CAAQK,QAAQ,CAAA,CAAE,CAAA;AAC/E,QAAA;AAEA,QAAA,MAAMC,gBAAAA,GAA4B;YAAE,GAAG,IAAI,CAACL,aAAa;AAAE,YAAA,GAAGA;AAAc,SAAA;QAE5E,OAAO,IAAI,CAACM,MAAM,CAACP,OAAAA,CAAQQ,IAAI,EAAE,IAAI,CAACC,KAAK,EAAEH,gBAAAA,CAAAA;AAC/C,IAAA;IAfA,WAAA,CAAYG,KAAe,EAAER,aAAsB,CAAE;QACnD,IAAI,CAACQ,KAAK,GAAGA,KAAAA;QACb,IAAI,CAACR,aAAa,GAAGA,aAAAA;AACvB,IAAA;AAeF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sources":["../../../../src/modules/version/types.ts"],"sourcesContent":["export type Version = number;\n\nexport type LiteralVersion =\n | `${Version}`\n | `${Version}.${Version}`\n | `${Version}.${Version}.${Version}`;\n\nexport type LiteralSemVer = `${Version}.${Version}.${Version}`;\n\nexport type { SemVer, Range } from 'semver';\n\nexport const RELEASE_TYPES = {\n // Classic\n Major: 'major',\n Minor: 'minor',\n Patch: 'patch',\n // Other\n Latest: 'latest',\n} as const;\n\nexport type ReleaseType = (typeof RELEASE_TYPES)[keyof typeof RELEASE_TYPES];\n"],"names":["RELEASE_TYPES","Major","Minor","Patch","Latest"],"mappings":";;MAWaA,aAAAA,GAAgB;;IAE3BC,KAAAA,EAAO,OAAA;IACPC,KAAAA,EAAO,OAAA;IACPC,KAAAA,EAAO,OAAA;;IAEPC,MAAAA,EAAQ;AACV;;;;"}
1
+ {"version":3,"file":"types.js","sources":["../../../../src/modules/version/types.ts"],"sourcesContent":["export type Version = number;\n\nexport type LiteralVersion =\n `${Version}` | `${Version}.${Version}` | `${Version}.${Version}.${Version}`;\n\nexport type LiteralSemVer = `${Version}.${Version}.${Version}`;\n\nexport type { SemVer, Range } from 'semver';\n\nexport const RELEASE_TYPES = {\n // Classic\n Major: 'major',\n Minor: 'minor',\n Patch: 'patch',\n // Other\n Latest: 'latest',\n} as const;\n\nexport type ReleaseType = (typeof RELEASE_TYPES)[keyof typeof RELEASE_TYPES];\n"],"names":["RELEASE_TYPES","Major","Minor","Patch","Latest"],"mappings":";;MASaA,aAAAA,GAAgB;;IAE3BC,KAAAA,EAAO,OAAA;IACPC,KAAAA,EAAO,OAAA;IACPC,KAAAA,EAAO,OAAA;;IAEPC,MAAAA,EAAQ;AACV;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.mjs","sources":["../../../../src/modules/version/types.ts"],"sourcesContent":["export type Version = number;\n\nexport type LiteralVersion =\n | `${Version}`\n | `${Version}.${Version}`\n | `${Version}.${Version}.${Version}`;\n\nexport type LiteralSemVer = `${Version}.${Version}.${Version}`;\n\nexport type { SemVer, Range } from 'semver';\n\nexport const RELEASE_TYPES = {\n // Classic\n Major: 'major',\n Minor: 'minor',\n Patch: 'patch',\n // Other\n Latest: 'latest',\n} as const;\n\nexport type ReleaseType = (typeof RELEASE_TYPES)[keyof typeof RELEASE_TYPES];\n"],"names":["RELEASE_TYPES","Major","Minor","Patch","Latest"],"mappings":"MAWaA,aAAAA,GAAgB;;IAE3BC,KAAAA,EAAO,OAAA;IACPC,KAAAA,EAAO,OAAA;IACPC,KAAAA,EAAO,OAAA;;IAEPC,MAAAA,EAAQ;AACV;;;;"}
1
+ {"version":3,"file":"types.mjs","sources":["../../../../src/modules/version/types.ts"],"sourcesContent":["export type Version = number;\n\nexport type LiteralVersion =\n `${Version}` | `${Version}.${Version}` | `${Version}.${Version}.${Version}`;\n\nexport type LiteralSemVer = `${Version}.${Version}.${Version}`;\n\nexport type { SemVer, Range } from 'semver';\n\nexport const RELEASE_TYPES = {\n // Classic\n Major: 'major',\n Minor: 'minor',\n Patch: 'patch',\n // Other\n Latest: 'latest',\n} as const;\n\nexport type ReleaseType = (typeof RELEASE_TYPES)[keyof typeof RELEASE_TYPES];\n"],"names":["RELEASE_TYPES","Major","Minor","Patch","Latest"],"mappings":"MASaA,aAAAA,GAAgB;;IAE3BC,KAAAA,EAAO,OAAA;IACPC,KAAAA,EAAO,OAAA;IACPC,KAAAA,EAAO,OAAA;;IAEPC,MAAAA,EAAQ;AACV;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strapi/upgrade",
3
- "version": "5.57.0",
3
+ "version": "5.59.0",
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.57.0",
68
+ "@strapi/utils": "5.59.0",
69
69
  "chalk": "4.1.2",
70
70
  "cli-table3": "0.6.5",
71
71
  "commander": "8.3.0",
@@ -80,15 +80,15 @@
80
80
  "prompts": "2.4.2",
81
81
  "semver": "7.7.4",
82
82
  "simple-git": "3.36.0",
83
- "undici": "6.29.0"
83
+ "undici": "8.12.1"
84
84
  },
85
85
  "devDependencies": {
86
- "@strapi/types": "5.57.0",
86
+ "@strapi/types": "5.59.0",
87
87
  "@types/fs-extra": "11.0.4",
88
88
  "@types/jest": "29.5.2",
89
89
  "@types/jscodeshift": "17.3.0",
90
90
  "@types/node": "20.19.41",
91
- "eslint-config-custom": "5.57.0",
91
+ "eslint-config-custom": "5.59.0",
92
92
  "jest": "29.6.0",
93
93
  "rimraf": "6.1.3"
94
94
  },
@@ -169,9 +169,9 @@ strapi.entityService.findOne(uid, entityId);
169
169
 
170
170
  */
171
171
 
172
- const movedFunctions = ['findOne', 'findMany', 'count', 'create', 'update', 'delete'];
172
+ const movedFunctions = new Set(['findOne', 'findMany', 'count', 'create', 'update', 'delete']);
173
173
 
174
- const functionsWithEntityId = ['findOne', 'update', 'delete'];
174
+ const functionsWithEntityId = new Set(['findOne', 'update', 'delete']);
175
175
 
176
176
  const transformDeclaration = (path: ASTPath<any>, name: any, j: JSCodeshift) => {
177
177
  const declaration = findClosestDeclaration(path, name, j);
@@ -315,7 +315,7 @@ const transform: Transform = (file, api) => {
315
315
  },
316
316
  property: {
317
317
  type: 'Identifier',
318
- name: (name) => movedFunctions.includes(name),
318
+ name: (name) => movedFunctions.has(name),
319
319
  },
320
320
  },
321
321
  })
@@ -381,7 +381,7 @@ const transform: Transform = (file, api) => {
381
381
  // function with entityId as first argument
382
382
  if (
383
383
  j.Identifier.check(path.value.callee.property) &&
384
- functionsWithEntityId.includes(path.value.callee.property.name)
384
+ functionsWithEntityId.has(path.value.callee.property.name)
385
385
  ) {
386
386
  rest.splice(0, 1);
387
387
 
@@ -95,7 +95,7 @@ const changes = {
95
95
  },
96
96
  };
97
97
 
98
- const removed = [
98
+ const removed = new Set([
99
99
  'getCommonBeginning',
100
100
  'templateConfiguration',
101
101
  'removeUndefined',
@@ -103,7 +103,7 @@ const removed = [
103
103
  'getAbsoluteAdminUrl',
104
104
  'getAbsoluteServerUrl',
105
105
  'forEachAsync',
106
- ];
106
+ ]);
107
107
 
108
108
  const transformImports = (root: Collection, j: JSCodeshift) => {
109
109
  root
@@ -120,7 +120,7 @@ const transformImports = (root: Collection, j: JSCodeshift) => {
120
120
  return false;
121
121
  }
122
122
 
123
- if (removed.includes(specifier.imported.name)) {
123
+ if (removed.has(specifier.imported.name)) {
124
124
  console.warn(
125
125
  `Function "${specifier.imported.name}" was removed. You will have to remove it from your code.`
126
126
  );
@@ -207,7 +207,7 @@ const transformImports = (root: Collection, j: JSCodeshift) => {
207
207
  return false;
208
208
  }
209
209
 
210
- if (removed.includes(property.value.name)) {
210
+ if (removed.has(property.value.name)) {
211
211
  console.warn(
212
212
  `Function "${property.value.name}" was removed. You will have to remove it from your code.`
213
213
  );