@strapi/upgrade 5.55.1 → 5.57.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/dist/modules/json/transform-api.d.ts.map +1 -1
  2. package/dist/package.json.js +1 -1
  3. package/dist/package.json.mjs +1 -1
  4. package/dist/src/cli/commands/codemods.js +2 -2
  5. package/dist/src/cli/commands/codemods.mjs +2 -2
  6. package/dist/src/cli/commands/upgrade.js +2 -1
  7. package/dist/src/cli/commands/upgrade.js.map +1 -1
  8. package/dist/src/cli/commands/upgrade.mjs +2 -1
  9. package/dist/src/cli/commands/upgrade.mjs.map +1 -1
  10. package/dist/src/modules/codemod-runner/codemod-runner.js +3 -3
  11. package/dist/src/modules/codemod-runner/codemod-runner.js.map +1 -1
  12. package/dist/src/modules/codemod-runner/codemod-runner.mjs +3 -3
  13. package/dist/src/modules/codemod-runner/codemod-runner.mjs.map +1 -1
  14. package/dist/src/modules/json/transform-api.js +9 -8
  15. package/dist/src/modules/json/transform-api.js.map +1 -1
  16. package/dist/src/modules/json/transform-api.mjs +7 -6
  17. package/dist/src/modules/json/transform-api.mjs.map +1 -1
  18. package/dist/src/modules/runner/json/transform.js +3 -3
  19. package/dist/src/modules/runner/json/transform.js.map +1 -1
  20. package/dist/src/modules/runner/json/transform.mjs +2 -2
  21. package/dist/src/modules/runner/json/transform.mjs.map +1 -1
  22. package/dist/src/modules/upgrader/upgrader.js +1 -1
  23. package/dist/src/modules/upgrader/upgrader.mjs +1 -1
  24. package/dist/src/tasks/codemods/utils.js +2 -1
  25. package/dist/src/tasks/codemods/utils.js.map +1 -1
  26. package/dist/src/tasks/codemods/utils.mjs +2 -1
  27. package/dist/src/tasks/codemods/utils.mjs.map +1 -1
  28. package/dist/src/tasks/upgrade/prompts/pin-versions.js +2 -1
  29. package/dist/src/tasks/upgrade/prompts/pin-versions.js.map +1 -1
  30. package/dist/src/tasks/upgrade/prompts/pin-versions.mjs +2 -1
  31. package/dist/src/tasks/upgrade/prompts/pin-versions.mjs.map +1 -1
  32. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"transform-api.d.ts","sourceRoot":"","sources":["../../../src/modules/json/transform-api.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,KAAK,EAAE,gBAAgB,IAAI,yBAAyB,EAAE,MAAM,SAAS,CAAC;AAE7E,qBAAa,gBAAiB,YAAW,yBAAyB;IAChE,OAAO,CAAC,IAAI,CAAmB;gBAEnB,IAAI,EAAE,KAAK,CAAC,UAAU;IAIlC,GAAG,CAAC,CAAC,SAAS,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAC3D,GAAG,CAAC,CAAC,SAAS,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC;IAShE,GAAG,CAAC,IAAI,EAAE,MAAM;IAIhB,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU;IAM7B,IAAI,IAAI,KAAK,CAAC,UAAU;IAIxB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,SAAS;IAMxC,MAAM,CAAC,IAAI,EAAE,MAAM;CAIpB;AAED,eAAO,MAAM,sBAAsB,GAAI,QAAQ,KAAK,CAAC,UAAU,qBAAiC,CAAC"}
1
+ {"version":3,"file":"transform-api.d.ts","sourceRoot":"","sources":["../../../src/modules/json/transform-api.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAE3C,OAAO,KAAK,EAAE,gBAAgB,IAAI,yBAAyB,EAAE,MAAM,SAAS,CAAC;AAE7E,qBAAa,gBAAiB,YAAW,yBAAyB;IAChE,OAAO,CAAC,IAAI,CAAmB;gBAEnB,IAAI,EAAE,KAAK,CAAC,UAAU;IAIlC,GAAG,CAAC,CAAC,SAAS,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAC3D,GAAG,CAAC,CAAC,SAAS,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC;IAShE,GAAG,CAAC,IAAI,EAAE,MAAM;IAIhB,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU;IAM7B,IAAI,IAAI,KAAK,CAAC,UAAU;IAIxB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,SAAS;IAMxC,MAAM,CAAC,IAAI,EAAE,MAAM;CAIpB;AAED,eAAO,MAAM,sBAAsB,GAAI,QAAQ,KAAK,CAAC,UAAU,qBAAiC,CAAC"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "5.55.1";
3
+ var version = "5.57.0";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.js.map
@@ -1,4 +1,4 @@
1
- var version = "5.55.1";
1
+ var version = "5.57.0";
2
2
 
3
3
  export { version };
4
4
  //# sourceMappingURL=package.json.mjs.map
@@ -13,11 +13,11 @@ require('node:assert');
13
13
  require('fs-extra');
14
14
  require('fast-glob');
15
15
  require('jscodeshift/src/Runner');
16
- require('lodash/fp');
16
+ require('lodash');
17
17
  require('esbuild-register/dist/node');
18
+ require('@strapi/utils');
18
19
  require('../../modules/project/constants.js');
19
20
  require('node:fs/promises');
20
- require('@strapi/utils');
21
21
  require('../../modules/codemod/constants.js');
22
22
  require('../../modules/codemod-repository/constants.js');
23
23
  require('../../tasks/upgrade/requirements/common.js');
@@ -11,11 +11,11 @@ import 'node:assert';
11
11
  import 'fs-extra';
12
12
  import 'fast-glob';
13
13
  import 'jscodeshift/src/Runner';
14
- import 'lodash/fp';
14
+ import 'lodash';
15
15
  import 'esbuild-register/dist/node';
16
+ import '@strapi/utils';
16
17
  import '../../modules/project/constants.mjs';
17
18
  import 'node:fs/promises';
18
- import '@strapi/utils';
19
19
  import '../../modules/codemod/constants.mjs';
20
20
  import '../../modules/codemod-repository/constants.mjs';
21
21
  import '../../tasks/upgrade/requirements/common.mjs';
@@ -16,8 +16,9 @@ require('node:assert');
16
16
  require('fs-extra');
17
17
  require('fast-glob');
18
18
  require('jscodeshift/src/Runner');
19
- require('lodash/fp');
19
+ require('lodash');
20
20
  require('esbuild-register/dist/node');
21
+ require('@strapi/utils');
21
22
  require('../../modules/project/constants.js');
22
23
  require('../../modules/codemod/constants.js');
23
24
  require('../../modules/codemod-repository/constants.js');
@@ -1 +1 @@
1
- {"version":3,"file":"upgrade.js","sources":["../../../../src/cli/commands/upgrade.ts"],"sourcesContent":["import prompts from 'prompts';\nimport { InvalidArgumentError, Option } from 'commander';\n\nimport type { Command } from 'commander';\n\nimport { loggerFactory } from '../../modules/logger';\nimport { Version, isLiteralSemVer, isValidSemVer, semVerFactory } from '../../modules/version';\nimport { handleError } from '../errors';\nimport * as tasks from '../../tasks';\nimport {\n autoConfirmOption,\n debugOption,\n dryOption,\n projectPathOption,\n silentOption,\n} from '../options';\n\nimport type { CLIUpgradeOptions, CLIUpgradeToOptions, UpgradeCommand } from '../types';\n\nexport const upgrade: UpgradeCommand = async (options) => {\n try {\n const { silent, debug, yes } = 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 upgrading\"\n );\n\n const confirm = async (message: string) => {\n if (yes) {\n return true;\n }\n\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 await tasks.upgrade({\n logger,\n confirm,\n dry: options.dry,\n cwd: options.projectPath,\n target: options.target,\n codemodsTarget: options.codemodsTarget,\n });\n } catch (err) {\n handleError(err, options.silent);\n }\n};\n\n/**\n * Registers upgrade related codemods.\n */\nexport const register = (program: Command) => {\n const addReleaseUpgradeCommand = (releaseType: Version.ReleaseType, description: string) => {\n program\n .command(releaseType)\n .description(description)\n .addOption(projectPathOption)\n .addOption(dryOption)\n .addOption(debugOption)\n .addOption(silentOption)\n .addOption(autoConfirmOption)\n .action(async (options: CLIUpgradeOptions) => {\n return upgrade({ ...options, target: releaseType });\n });\n };\n\n // upgrade latest\n addReleaseUpgradeCommand(\n Version.RELEASE_TYPES.Latest,\n 'Upgrade to the latest available version of Strapi'\n );\n\n // upgrade major\n addReleaseUpgradeCommand(\n Version.RELEASE_TYPES.Major,\n 'Upgrade to the next available major version of Strapi'\n );\n\n // upgrade minor\n addReleaseUpgradeCommand(\n Version.RELEASE_TYPES.Minor,\n 'Upgrade to the latest minor and patch version of Strapi for the current major'\n );\n\n // upgrade patch\n addReleaseUpgradeCommand(\n Version.RELEASE_TYPES.Patch,\n 'Upgrade to latest patch version of Strapi for the current major and minor'\n );\n\n // upgrade to <target>\n program\n .command('to')\n .description('Upgrade to a specific version of Strapi')\n .argument('<target>', 'Target version', (target) => {\n if (!isValidSemVer(target)) {\n throw new InvalidArgumentError(\n `Invalid target supplied, expected a valid semver but got \"${target}\"`\n );\n }\n\n return semVerFactory(target);\n })\n .addOption(projectPathOption)\n .addOption(dryOption)\n .addOption(debugOption)\n .addOption(silentOption)\n .addOption(autoConfirmOption)\n .addOption(\n new Option(\n '-c, --codemods-target <codemodsTarget>',\n 'Use a custom target for the codemods execution. Useful when targeting pre-releases'\n ).argParser((codemodsTarget) => {\n if (!isLiteralSemVer(codemodsTarget)) {\n throw new InvalidArgumentError(\n `Expected a version with the following format: \"<number>.<number>.<number>\"`\n );\n }\n\n return semVerFactory(codemodsTarget);\n })\n )\n .action(async (target: Version.SemVer, options: CLIUpgradeToOptions) => {\n return upgrade({ ...options, target });\n });\n};\n"],"names":["upgrade","options","silent","debug","yes","logger","loggerFactory","warn","confirm","message","prompts","name","type","tasks","dry","cwd","projectPath","target","codemodsTarget","err","handleError","register","program","addReleaseUpgradeCommand","releaseType","description","command","addOption","projectPathOption","dryOption","debugOption","silentOption","autoConfirmOption","action","Version","Latest","Major","Minor","Patch","argument","isValidSemVer","InvalidArgumentError","semVerFactory","Option","argParser","isLiteralSemVer"],"mappings":"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"}
1
+ {"version":3,"file":"upgrade.js","sources":["../../../../src/cli/commands/upgrade.ts"],"sourcesContent":["import prompts from 'prompts';\nimport { InvalidArgumentError, Option } from 'commander';\n\nimport type { Command } from 'commander';\n\nimport { loggerFactory } from '../../modules/logger';\nimport { Version, isLiteralSemVer, isValidSemVer, semVerFactory } from '../../modules/version';\nimport { handleError } from '../errors';\nimport * as tasks from '../../tasks';\nimport {\n autoConfirmOption,\n debugOption,\n dryOption,\n projectPathOption,\n silentOption,\n} from '../options';\n\nimport type { CLIUpgradeOptions, CLIUpgradeToOptions, UpgradeCommand } from '../types';\n\nexport const upgrade: UpgradeCommand = async (options) => {\n try {\n const { silent, debug, yes } = 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 upgrading\"\n );\n\n const confirm = async (message: string) => {\n if (yes) {\n return true;\n }\n\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 await tasks.upgrade({\n logger,\n confirm,\n dry: options.dry,\n cwd: options.projectPath,\n target: options.target,\n codemodsTarget: options.codemodsTarget,\n });\n } catch (err) {\n handleError(err, options.silent);\n }\n};\n\n/**\n * Registers upgrade related codemods.\n */\nexport const register = (program: Command) => {\n const addReleaseUpgradeCommand = (releaseType: Version.ReleaseType, description: string) => {\n program\n .command(releaseType)\n .description(description)\n .addOption(projectPathOption)\n .addOption(dryOption)\n .addOption(debugOption)\n .addOption(silentOption)\n .addOption(autoConfirmOption)\n .action(async (options: CLIUpgradeOptions) => {\n return upgrade({ ...options, target: releaseType });\n });\n };\n\n // upgrade latest\n addReleaseUpgradeCommand(\n Version.RELEASE_TYPES.Latest,\n 'Upgrade to the latest available version of Strapi'\n );\n\n // upgrade major\n addReleaseUpgradeCommand(\n Version.RELEASE_TYPES.Major,\n 'Upgrade to the next available major version of Strapi'\n );\n\n // upgrade minor\n addReleaseUpgradeCommand(\n Version.RELEASE_TYPES.Minor,\n 'Upgrade to the latest minor and patch version of Strapi for the current major'\n );\n\n // upgrade patch\n addReleaseUpgradeCommand(\n Version.RELEASE_TYPES.Patch,\n 'Upgrade to latest patch version of Strapi for the current major and minor'\n );\n\n // upgrade to <target>\n program\n .command('to')\n .description('Upgrade to a specific version of Strapi')\n .argument('<target>', 'Target version', (target) => {\n if (!isValidSemVer(target)) {\n throw new InvalidArgumentError(\n `Invalid target supplied, expected a valid semver but got \"${target}\"`\n );\n }\n\n return semVerFactory(target);\n })\n .addOption(projectPathOption)\n .addOption(dryOption)\n .addOption(debugOption)\n .addOption(silentOption)\n .addOption(autoConfirmOption)\n .addOption(\n new Option(\n '-c, --codemods-target <codemodsTarget>',\n 'Use a custom target for the codemods execution. Useful when targeting pre-releases'\n ).argParser((codemodsTarget) => {\n if (!isLiteralSemVer(codemodsTarget)) {\n throw new InvalidArgumentError(\n `Expected a version with the following format: \"<number>.<number>.<number>\"`\n );\n }\n\n return semVerFactory(codemodsTarget);\n })\n )\n .action(async (target: Version.SemVer, options: CLIUpgradeToOptions) => {\n return upgrade({ ...options, target });\n });\n};\n"],"names":["upgrade","options","silent","debug","yes","logger","loggerFactory","warn","confirm","message","prompts","name","type","tasks","dry","cwd","projectPath","target","codemodsTarget","err","handleError","register","program","addReleaseUpgradeCommand","releaseType","description","command","addOption","projectPathOption","dryOption","debugOption","silentOption","autoConfirmOption","action","Version","Latest","Major","Minor","Patch","argument","isValidSemVer","InvalidArgumentError","semVerFactory","Option","argParser","isLiteralSemVer"],"mappings":"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"}
@@ -14,8 +14,9 @@ import 'node:assert';
14
14
  import 'fs-extra';
15
15
  import 'fast-glob';
16
16
  import 'jscodeshift/src/Runner';
17
- import 'lodash/fp';
17
+ import 'lodash';
18
18
  import 'esbuild-register/dist/node';
19
+ import '@strapi/utils';
19
20
  import '../../modules/project/constants.mjs';
20
21
  import '../../modules/codemod/constants.mjs';
21
22
  import '../../modules/codemod-repository/constants.mjs';
@@ -1 +1 @@
1
- {"version":3,"file":"upgrade.mjs","sources":["../../../../src/cli/commands/upgrade.ts"],"sourcesContent":["import prompts from 'prompts';\nimport { InvalidArgumentError, Option } from 'commander';\n\nimport type { Command } from 'commander';\n\nimport { loggerFactory } from '../../modules/logger';\nimport { Version, isLiteralSemVer, isValidSemVer, semVerFactory } from '../../modules/version';\nimport { handleError } from '../errors';\nimport * as tasks from '../../tasks';\nimport {\n autoConfirmOption,\n debugOption,\n dryOption,\n projectPathOption,\n silentOption,\n} from '../options';\n\nimport type { CLIUpgradeOptions, CLIUpgradeToOptions, UpgradeCommand } from '../types';\n\nexport const upgrade: UpgradeCommand = async (options) => {\n try {\n const { silent, debug, yes } = 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 upgrading\"\n );\n\n const confirm = async (message: string) => {\n if (yes) {\n return true;\n }\n\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 await tasks.upgrade({\n logger,\n confirm,\n dry: options.dry,\n cwd: options.projectPath,\n target: options.target,\n codemodsTarget: options.codemodsTarget,\n });\n } catch (err) {\n handleError(err, options.silent);\n }\n};\n\n/**\n * Registers upgrade related codemods.\n */\nexport const register = (program: Command) => {\n const addReleaseUpgradeCommand = (releaseType: Version.ReleaseType, description: string) => {\n program\n .command(releaseType)\n .description(description)\n .addOption(projectPathOption)\n .addOption(dryOption)\n .addOption(debugOption)\n .addOption(silentOption)\n .addOption(autoConfirmOption)\n .action(async (options: CLIUpgradeOptions) => {\n return upgrade({ ...options, target: releaseType });\n });\n };\n\n // upgrade latest\n addReleaseUpgradeCommand(\n Version.RELEASE_TYPES.Latest,\n 'Upgrade to the latest available version of Strapi'\n );\n\n // upgrade major\n addReleaseUpgradeCommand(\n Version.RELEASE_TYPES.Major,\n 'Upgrade to the next available major version of Strapi'\n );\n\n // upgrade minor\n addReleaseUpgradeCommand(\n Version.RELEASE_TYPES.Minor,\n 'Upgrade to the latest minor and patch version of Strapi for the current major'\n );\n\n // upgrade patch\n addReleaseUpgradeCommand(\n Version.RELEASE_TYPES.Patch,\n 'Upgrade to latest patch version of Strapi for the current major and minor'\n );\n\n // upgrade to <target>\n program\n .command('to')\n .description('Upgrade to a specific version of Strapi')\n .argument('<target>', 'Target version', (target) => {\n if (!isValidSemVer(target)) {\n throw new InvalidArgumentError(\n `Invalid target supplied, expected a valid semver but got \"${target}\"`\n );\n }\n\n return semVerFactory(target);\n })\n .addOption(projectPathOption)\n .addOption(dryOption)\n .addOption(debugOption)\n .addOption(silentOption)\n .addOption(autoConfirmOption)\n .addOption(\n new Option(\n '-c, --codemods-target <codemodsTarget>',\n 'Use a custom target for the codemods execution. Useful when targeting pre-releases'\n ).argParser((codemodsTarget) => {\n if (!isLiteralSemVer(codemodsTarget)) {\n throw new InvalidArgumentError(\n `Expected a version with the following format: \"<number>.<number>.<number>\"`\n );\n }\n\n return semVerFactory(codemodsTarget);\n })\n )\n .action(async (target: Version.SemVer, options: CLIUpgradeToOptions) => {\n return upgrade({ ...options, target });\n });\n};\n"],"names":["upgrade","options","silent","debug","yes","logger","loggerFactory","warn","confirm","message","prompts","name","type","tasks","dry","cwd","projectPath","target","codemodsTarget","err","handleError","register","program","addReleaseUpgradeCommand","releaseType","description","command","addOption","projectPathOption","dryOption","debugOption","silentOption","autoConfirmOption","action","Version","Latest","Major","Minor","Patch","argument","isValidSemVer","InvalidArgumentError","semVerFactory","Option","argParser","isLiteralSemVer"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAmBO,MAAMA,UAA0B,OAAOC,OAAAA,GAAAA;IAC5C,IAAI;AACF,QAAA,MAAM,EAAEC,MAAM,EAAEC,KAAK,EAAEC,GAAG,EAAE,GAAGH,OAAAA;AAC/B,QAAA,MAAMI,SAASC,aAAAA,CAAc;AAAEJ,YAAAA,MAAAA;AAAQC,YAAAA;AAAM,SAAA,CAAA;AAE7CE,QAAAA,MAAAA,CAAOE,IAAI,CACT,sFAAA,CAAA;AAGF,QAAA,MAAMC,UAAU,OAAOC,OAAAA,GAAAA;AACrB,YAAA,IAAIL,GAAAA,EAAK;gBACP,OAAO,IAAA;AACT,YAAA;AAEA,YAAA,MAAM,EAAEI,OAAO,EAAE,GAAG,MAAME,OAAAA,CAAQ;gBAChCC,IAAAA,EAAM,SAAA;gBACNC,IAAAA,EAAM,SAAA;AACNH,gBAAAA;AACF,aAAA,CAAA;;AAGA,YAAA,OAAOD,OAAAA,IAAW,KAAA;AACpB,QAAA,CAAA;QAEA,MAAMK,SAAa,CAAC;AAClBR,YAAAA,MAAAA;AACAG,YAAAA,OAAAA;AACAM,YAAAA,GAAAA,EAAKb,QAAQa,GAAG;AAChBC,YAAAA,GAAAA,EAAKd,QAAQe,WAAW;AACxBC,YAAAA,MAAAA,EAAQhB,QAAQgB,MAAM;AACtBC,YAAAA,cAAAA,EAAgBjB,QAAQiB;AAC1B,SAAA,CAAA;AACF,IAAA,CAAA,CAAE,OAAOC,GAAAA,EAAK;QACZC,WAAAA,CAAYD,GAAAA,EAAKlB,QAAQC,MAAM,CAAA;AACjC,IAAA;AACF;AAEA;;IAGO,MAAMmB,QAAAA,GAAW,CAACC,OAAAA,GAAAA;IACvB,MAAMC,wBAAAA,GAA2B,CAACC,WAAAA,EAAkCC,WAAAA,GAAAA;QAClEH,OAAAA,CACGI,OAAO,CAACF,WAAAA,CAAAA,CACRC,WAAW,CAACA,WAAAA,CAAAA,CACZE,SAAS,CAACC,iBAAAA,CAAAA,CACVD,SAAS,CAACE,WACVF,SAAS,CAACG,WAAAA,CAAAA,CACVH,SAAS,CAACI,YAAAA,CAAAA,CACVJ,SAAS,CAACK,iBAAAA,CAAAA,CACVC,MAAM,CAAC,OAAOhC,OAAAA,GAAAA;AACb,YAAA,OAAOD,OAAAA,CAAQ;AAAE,gBAAA,GAAGC,OAAO;gBAAEgB,MAAAA,EAAQO;AAAY,aAAA,CAAA;AACnD,QAAA,CAAA,CAAA;AACJ,IAAA,CAAA;;AAGAD,IAAAA,wBAAAA,CACEW,aAAqB,CAACC,MAAM,EAC5B,mDAAA,CAAA;;AAIFZ,IAAAA,wBAAAA,CACEW,aAAqB,CAACE,KAAK,EAC3B,uDAAA,CAAA;;AAIFb,IAAAA,wBAAAA,CACEW,aAAqB,CAACG,KAAK,EAC3B,+EAAA,CAAA;;AAIFd,IAAAA,wBAAAA,CACEW,aAAqB,CAACI,KAAK,EAC3B,2EAAA,CAAA;;IAIFhB,OAAAA,CACGI,OAAO,CAAC,IAAA,CAAA,CACRD,WAAW,CAAC,2CACZc,QAAQ,CAAC,UAAA,EAAY,gBAAA,EAAkB,CAACtB,MAAAA,GAAAA;QACvC,IAAI,CAACuB,cAAcvB,MAAAA,CAAAA,EAAS;AAC1B,YAAA,MAAM,IAAIwB,oBAAAA,CACR,CAAC,0DAA0D,EAAExB,MAAAA,CAAO,CAAC,CAAC,CAAA;AAE1E,QAAA;AAEA,QAAA,OAAOyB,aAAAA,CAAczB,MAAAA,CAAAA;IACvB,CAAA,CAAA,CACCU,SAAS,CAACC,iBAAAA,CAAAA,CACVD,SAAS,CAACE,SAAAA,CAAAA,CACVF,SAAS,CAACG,WAAAA,CAAAA,CACVH,SAAS,CAACI,cACVJ,SAAS,CAACK,iBAAAA,CAAAA,CACVL,SAAS,CACR,IAAIgB,OACF,wCAAA,EACA,oFAAA,CAAA,CACAC,SAAS,CAAC,CAAC1B,cAAAA,GAAAA;QACX,IAAI,CAAC2B,gBAAgB3B,cAAAA,CAAAA,EAAiB;AACpC,YAAA,MAAM,IAAIuB,oBAAAA,CACR,CAAC,0EAA0E,CAAC,CAAA;AAEhF,QAAA;AAEA,QAAA,OAAOC,aAAAA,CAAcxB,cAAAA,CAAAA;IACvB,CAAA,CAAA,CAAA,CAEDe,MAAM,CAAC,OAAOhB,MAAAA,EAAwBhB,OAAAA,GAAAA;AACrC,QAAA,OAAOD,OAAAA,CAAQ;AAAE,YAAA,GAAGC,OAAO;AAAEgB,YAAAA;AAAO,SAAA,CAAA;AACtC,IAAA,CAAA,CAAA;AACJ;;;;"}
1
+ {"version":3,"file":"upgrade.mjs","sources":["../../../../src/cli/commands/upgrade.ts"],"sourcesContent":["import prompts from 'prompts';\nimport { InvalidArgumentError, Option } from 'commander';\n\nimport type { Command } from 'commander';\n\nimport { loggerFactory } from '../../modules/logger';\nimport { Version, isLiteralSemVer, isValidSemVer, semVerFactory } from '../../modules/version';\nimport { handleError } from '../errors';\nimport * as tasks from '../../tasks';\nimport {\n autoConfirmOption,\n debugOption,\n dryOption,\n projectPathOption,\n silentOption,\n} from '../options';\n\nimport type { CLIUpgradeOptions, CLIUpgradeToOptions, UpgradeCommand } from '../types';\n\nexport const upgrade: UpgradeCommand = async (options) => {\n try {\n const { silent, debug, yes } = 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 upgrading\"\n );\n\n const confirm = async (message: string) => {\n if (yes) {\n return true;\n }\n\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 await tasks.upgrade({\n logger,\n confirm,\n dry: options.dry,\n cwd: options.projectPath,\n target: options.target,\n codemodsTarget: options.codemodsTarget,\n });\n } catch (err) {\n handleError(err, options.silent);\n }\n};\n\n/**\n * Registers upgrade related codemods.\n */\nexport const register = (program: Command) => {\n const addReleaseUpgradeCommand = (releaseType: Version.ReleaseType, description: string) => {\n program\n .command(releaseType)\n .description(description)\n .addOption(projectPathOption)\n .addOption(dryOption)\n .addOption(debugOption)\n .addOption(silentOption)\n .addOption(autoConfirmOption)\n .action(async (options: CLIUpgradeOptions) => {\n return upgrade({ ...options, target: releaseType });\n });\n };\n\n // upgrade latest\n addReleaseUpgradeCommand(\n Version.RELEASE_TYPES.Latest,\n 'Upgrade to the latest available version of Strapi'\n );\n\n // upgrade major\n addReleaseUpgradeCommand(\n Version.RELEASE_TYPES.Major,\n 'Upgrade to the next available major version of Strapi'\n );\n\n // upgrade minor\n addReleaseUpgradeCommand(\n Version.RELEASE_TYPES.Minor,\n 'Upgrade to the latest minor and patch version of Strapi for the current major'\n );\n\n // upgrade patch\n addReleaseUpgradeCommand(\n Version.RELEASE_TYPES.Patch,\n 'Upgrade to latest patch version of Strapi for the current major and minor'\n );\n\n // upgrade to <target>\n program\n .command('to')\n .description('Upgrade to a specific version of Strapi')\n .argument('<target>', 'Target version', (target) => {\n if (!isValidSemVer(target)) {\n throw new InvalidArgumentError(\n `Invalid target supplied, expected a valid semver but got \"${target}\"`\n );\n }\n\n return semVerFactory(target);\n })\n .addOption(projectPathOption)\n .addOption(dryOption)\n .addOption(debugOption)\n .addOption(silentOption)\n .addOption(autoConfirmOption)\n .addOption(\n new Option(\n '-c, --codemods-target <codemodsTarget>',\n 'Use a custom target for the codemods execution. Useful when targeting pre-releases'\n ).argParser((codemodsTarget) => {\n if (!isLiteralSemVer(codemodsTarget)) {\n throw new InvalidArgumentError(\n `Expected a version with the following format: \"<number>.<number>.<number>\"`\n );\n }\n\n return semVerFactory(codemodsTarget);\n })\n )\n .action(async (target: Version.SemVer, options: CLIUpgradeToOptions) => {\n return upgrade({ ...options, target });\n });\n};\n"],"names":["upgrade","options","silent","debug","yes","logger","loggerFactory","warn","confirm","message","prompts","name","type","tasks","dry","cwd","projectPath","target","codemodsTarget","err","handleError","register","program","addReleaseUpgradeCommand","releaseType","description","command","addOption","projectPathOption","dryOption","debugOption","silentOption","autoConfirmOption","action","Version","Latest","Major","Minor","Patch","argument","isValidSemVer","InvalidArgumentError","semVerFactory","Option","argParser","isLiteralSemVer"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var fp = require('lodash/fp');
3
+ var lodash = require('lodash');
4
4
  var repository = require('../codemod-repository/repository.js');
5
5
  var constants = require('../codemod-repository/constants.js');
6
6
  var utils = require('../error/utils.js');
@@ -79,9 +79,9 @@ class CodemodRunner {
79
79
  // Flatten the collection to a single list of codemods, the original list should already be sorted by version
80
80
  const codemods = selectedCodemods.flatMap(({ codemods })=>codemods);
81
81
  // Log (debug) the codemods by version
82
- const codemodsByVersion = fp.groupBy('version', codemods);
82
+ const codemodsByVersion = lodash.groupBy(codemods, 'version');
83
83
  const fRange = formats.versionRange(this.range);
84
- this.logger?.debug?.(`Found ${formats.highlight(codemods.length)} codemods for ${formats.highlight(fp.size(codemodsByVersion))} version(s) using ${fRange}`);
84
+ this.logger?.debug?.(`Found ${formats.highlight(codemods.length)} codemods for ${formats.highlight(Object.keys(codemodsByVersion).length)} version(s) using ${fRange}`);
85
85
  for (const [version, codemods] of Object.entries(codemodsByVersion)){
86
86
  this.logger?.debug?.(`- ${formats.version(semver.semVerFactory(version))} (${codemods.length})`);
87
87
  }
@@ -1 +1 @@
1
- {"version":3,"file":"codemod-runner.js","sources":["../../../../src/modules/codemod-runner/codemod-runner.ts"],"sourcesContent":["import { groupBy, size } from 'lodash/fp';\n\nimport {\n codemodRepositoryFactory,\n constants as codemodRepositoryConstants,\n} from '../codemod-repository';\nimport { unknownToError } from '../error';\nimport { semVerFactory } from '../version';\nimport * as f from '../format';\n\nimport type { Codemod } from '../codemod';\nimport type { Logger } from '../logger';\nimport type { Project } from '../project';\nimport type { UpgradeReport } from '../upgrader';\nimport type { CodemodRunnerInterface, CodemodRunnerReport, SelectCodemodsCallback } from './types';\nimport type { Version } from '../version';\n\nexport class CodemodRunner implements CodemodRunnerInterface {\n private readonly project: Project;\n\n private range: Version.Range;\n\n private isDry: boolean;\n\n private logger: Logger | null;\n\n private selectCodemodsCallback: SelectCodemodsCallback | null;\n\n constructor(project: Project, range: Version.Range) {\n this.project = project;\n this.range = range;\n\n this.isDry = false;\n\n this.logger = null;\n this.selectCodemodsCallback = null;\n }\n\n setRange(range: Version.Range) {\n this.range = range;\n return this;\n }\n\n setLogger(logger: Logger) {\n this.logger = logger;\n return this;\n }\n\n onSelectCodemods(callback: SelectCodemodsCallback | null) {\n this.selectCodemodsCallback = callback;\n return this;\n }\n\n dry(enabled: boolean = true) {\n this.isDry = enabled;\n return this;\n }\n\n private createRepository(codemodsDirectory?: string) {\n const repository = codemodRepositoryFactory(\n codemodsDirectory ?? codemodRepositoryConstants.INTERNAL_CODEMODS_DIRECTORY\n );\n\n // Make sure we have access to the latest snapshots of codemods on the system\n repository.refresh();\n\n return repository;\n }\n\n private async safeRunAndReport(codemods: Codemod.List) {\n if (this.isDry) {\n this.logger?.warn?.(\n 'Running the codemods in dry mode. No files will be modified during the process.'\n );\n }\n\n try {\n const reports = await this.project.runCodemods(codemods, { dry: this.isDry });\n\n this.logger?.raw?.(f.reports(reports));\n\n if (!this.isDry) {\n const nbAffectedTotal = reports\n .flatMap((report) => report.report.ok)\n .reduce((acc, nb) => acc + nb, 0);\n\n this.logger?.debug?.(\n `Successfully ran ${f.highlight(codemods.length)} codemod(s), ${f.highlight(nbAffectedTotal)} change(s) have been detected`\n );\n }\n\n return successReport();\n } catch (e: unknown) {\n return erroredReport(unknownToError(e));\n }\n }\n\n async runByUID(uid: string, codemodsDirectory?: string): Promise<CodemodRunnerReport> {\n const repository = this.createRepository(codemodsDirectory);\n\n if (!repository.has(uid)) {\n throw new Error(`Unknown codemod UID provided: ${uid}`);\n }\n\n // Note: Ignore the range when running with a UID\n const codemods = repository.find({ uids: [uid] }).flatMap(({ codemods }) => codemods);\n\n return this.safeRunAndReport(codemods);\n }\n\n async run(codemodsDirectory?: string): Promise<CodemodRunnerReport> {\n const repository = this.createRepository(codemodsDirectory);\n\n // Find codemods matching the given range\n const codemodsInRange = repository.find({ range: this.range });\n\n // If a selection callback is set, use it, else keep every codemods found\n const selectedCodemods = this.selectCodemodsCallback\n ? await this.selectCodemodsCallback(codemodsInRange)\n : codemodsInRange;\n\n // If no codemods have been selected (either manually or automatically)\n // Then ignore and return a successful report\n if (selectedCodemods.length === 0) {\n this.logger?.debug?.(`Found no codemods to run for ${f.versionRange(this.range)}`);\n return successReport();\n }\n\n // Flatten the collection to a single list of codemods, the original list should already be sorted by version\n const codemods = selectedCodemods.flatMap(({ codemods }) => codemods);\n\n // Log (debug) the codemods by version\n const codemodsByVersion = groupBy('version', codemods);\n const fRange = f.versionRange(this.range);\n\n this.logger?.debug?.(\n `Found ${f.highlight(codemods.length)} codemods for ${f.highlight(size(codemodsByVersion))} version(s) using ${fRange}`\n );\n\n for (const [version, codemods] of Object.entries(codemodsByVersion)) {\n this.logger?.debug?.(`- ${f.version(semVerFactory(version))} (${codemods.length})`);\n }\n\n return this.safeRunAndReport(codemods);\n }\n}\n\nexport const codemodRunnerFactory = (project: Project, range: Version.Range) => {\n return new CodemodRunner(project, range);\n};\n\nconst successReport = (): UpgradeReport => ({ success: true, error: null });\nconst erroredReport = (error: Error): UpgradeReport => ({ success: false, error });\n"],"names":["CodemodRunner","setRange","range","setLogger","logger","onSelectCodemods","callback","selectCodemodsCallback","dry","enabled","isDry","createRepository","codemodsDirectory","repository","codemodRepositoryFactory","codemodRepositoryConstants","refresh","safeRunAndReport","codemods","warn","reports","project","runCodemods","raw","f","nbAffectedTotal","flatMap","report","ok","reduce","acc","nb","debug","length","successReport","e","erroredReport","unknownToError","runByUID","uid","has","Error","find","uids","run","codemodsInRange","selectedCodemods","codemodsByVersion","groupBy","fRange","size","version","Object","entries","semVerFactory","codemodRunnerFactory","success","error"],"mappings":"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"}
1
+ {"version":3,"file":"codemod-runner.js","sources":["../../../../src/modules/codemod-runner/codemod-runner.ts"],"sourcesContent":["import { groupBy } from 'lodash';\n\nimport {\n codemodRepositoryFactory,\n constants as codemodRepositoryConstants,\n} from '../codemod-repository';\nimport { unknownToError } from '../error';\nimport { semVerFactory } from '../version';\nimport * as f from '../format';\n\nimport type { Codemod } from '../codemod';\nimport type { Logger } from '../logger';\nimport type { Project } from '../project';\nimport type { UpgradeReport } from '../upgrader';\nimport type { CodemodRunnerInterface, CodemodRunnerReport, SelectCodemodsCallback } from './types';\nimport type { Version } from '../version';\n\nexport class CodemodRunner implements CodemodRunnerInterface {\n private readonly project: Project;\n\n private range: Version.Range;\n\n private isDry: boolean;\n\n private logger: Logger | null;\n\n private selectCodemodsCallback: SelectCodemodsCallback | null;\n\n constructor(project: Project, range: Version.Range) {\n this.project = project;\n this.range = range;\n\n this.isDry = false;\n\n this.logger = null;\n this.selectCodemodsCallback = null;\n }\n\n setRange(range: Version.Range) {\n this.range = range;\n return this;\n }\n\n setLogger(logger: Logger) {\n this.logger = logger;\n return this;\n }\n\n onSelectCodemods(callback: SelectCodemodsCallback | null) {\n this.selectCodemodsCallback = callback;\n return this;\n }\n\n dry(enabled: boolean = true) {\n this.isDry = enabled;\n return this;\n }\n\n private createRepository(codemodsDirectory?: string) {\n const repository = codemodRepositoryFactory(\n codemodsDirectory ?? codemodRepositoryConstants.INTERNAL_CODEMODS_DIRECTORY\n );\n\n // Make sure we have access to the latest snapshots of codemods on the system\n repository.refresh();\n\n return repository;\n }\n\n private async safeRunAndReport(codemods: Codemod.List) {\n if (this.isDry) {\n this.logger?.warn?.(\n 'Running the codemods in dry mode. No files will be modified during the process.'\n );\n }\n\n try {\n const reports = await this.project.runCodemods(codemods, { dry: this.isDry });\n\n this.logger?.raw?.(f.reports(reports));\n\n if (!this.isDry) {\n const nbAffectedTotal = reports\n .flatMap((report) => report.report.ok)\n .reduce((acc, nb) => acc + nb, 0);\n\n this.logger?.debug?.(\n `Successfully ran ${f.highlight(codemods.length)} codemod(s), ${f.highlight(nbAffectedTotal)} change(s) have been detected`\n );\n }\n\n return successReport();\n } catch (e: unknown) {\n return erroredReport(unknownToError(e));\n }\n }\n\n async runByUID(uid: string, codemodsDirectory?: string): Promise<CodemodRunnerReport> {\n const repository = this.createRepository(codemodsDirectory);\n\n if (!repository.has(uid)) {\n throw new Error(`Unknown codemod UID provided: ${uid}`);\n }\n\n // Note: Ignore the range when running with a UID\n const codemods = repository.find({ uids: [uid] }).flatMap(({ codemods }) => codemods);\n\n return this.safeRunAndReport(codemods);\n }\n\n async run(codemodsDirectory?: string): Promise<CodemodRunnerReport> {\n const repository = this.createRepository(codemodsDirectory);\n\n // Find codemods matching the given range\n const codemodsInRange = repository.find({ range: this.range });\n\n // If a selection callback is set, use it, else keep every codemods found\n const selectedCodemods = this.selectCodemodsCallback\n ? await this.selectCodemodsCallback(codemodsInRange)\n : codemodsInRange;\n\n // If no codemods have been selected (either manually or automatically)\n // Then ignore and return a successful report\n if (selectedCodemods.length === 0) {\n this.logger?.debug?.(`Found no codemods to run for ${f.versionRange(this.range)}`);\n return successReport();\n }\n\n // Flatten the collection to a single list of codemods, the original list should already be sorted by version\n const codemods = selectedCodemods.flatMap(({ codemods }) => codemods);\n\n // Log (debug) the codemods by version\n const codemodsByVersion = groupBy(codemods, 'version');\n const fRange = f.versionRange(this.range);\n\n this.logger?.debug?.(\n `Found ${f.highlight(codemods.length)} codemods for ${f.highlight(Object.keys(codemodsByVersion).length)} version(s) using ${fRange}`\n );\n\n for (const [version, codemods] of Object.entries(codemodsByVersion)) {\n this.logger?.debug?.(`- ${f.version(semVerFactory(version))} (${codemods.length})`);\n }\n\n return this.safeRunAndReport(codemods);\n }\n}\n\nexport const codemodRunnerFactory = (project: Project, range: Version.Range) => {\n return new CodemodRunner(project, range);\n};\n\nconst successReport = (): UpgradeReport => ({ success: true, error: null });\nconst erroredReport = (error: Error): UpgradeReport => ({ success: false, error });\n"],"names":["CodemodRunner","setRange","range","setLogger","logger","onSelectCodemods","callback","selectCodemodsCallback","dry","enabled","isDry","createRepository","codemodsDirectory","repository","codemodRepositoryFactory","codemodRepositoryConstants","refresh","safeRunAndReport","codemods","warn","reports","project","runCodemods","raw","f","nbAffectedTotal","flatMap","report","ok","reduce","acc","nb","debug","length","successReport","e","erroredReport","unknownToError","runByUID","uid","has","Error","find","uids","run","codemodsInRange","selectedCodemods","codemodsByVersion","groupBy","fRange","Object","keys","version","entries","semVerFactory","codemodRunnerFactory","success","error"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { groupBy, size } from 'lodash/fp';
1
+ import { groupBy } from 'lodash';
2
2
  import { codemodRepositoryFactory } from '../codemod-repository/repository.mjs';
3
3
  import { INTERNAL_CODEMODS_DIRECTORY } from '../codemod-repository/constants.mjs';
4
4
  import { unknownToError } from '../error/utils.mjs';
@@ -77,9 +77,9 @@ class CodemodRunner {
77
77
  // Flatten the collection to a single list of codemods, the original list should already be sorted by version
78
78
  const codemods = selectedCodemods.flatMap(({ codemods })=>codemods);
79
79
  // Log (debug) the codemods by version
80
- const codemodsByVersion = groupBy('version', codemods);
80
+ const codemodsByVersion = groupBy(codemods, 'version');
81
81
  const fRange = versionRange(this.range);
82
- this.logger?.debug?.(`Found ${highlight(codemods.length)} codemods for ${highlight(size(codemodsByVersion))} version(s) using ${fRange}`);
82
+ this.logger?.debug?.(`Found ${highlight(codemods.length)} codemods for ${highlight(Object.keys(codemodsByVersion).length)} version(s) using ${fRange}`);
83
83
  for (const [version$1, codemods] of Object.entries(codemodsByVersion)){
84
84
  this.logger?.debug?.(`- ${version(semVerFactory(version$1))} (${codemods.length})`);
85
85
  }
@@ -1 +1 @@
1
- {"version":3,"file":"codemod-runner.mjs","sources":["../../../../src/modules/codemod-runner/codemod-runner.ts"],"sourcesContent":["import { groupBy, size } from 'lodash/fp';\n\nimport {\n codemodRepositoryFactory,\n constants as codemodRepositoryConstants,\n} from '../codemod-repository';\nimport { unknownToError } from '../error';\nimport { semVerFactory } from '../version';\nimport * as f from '../format';\n\nimport type { Codemod } from '../codemod';\nimport type { Logger } from '../logger';\nimport type { Project } from '../project';\nimport type { UpgradeReport } from '../upgrader';\nimport type { CodemodRunnerInterface, CodemodRunnerReport, SelectCodemodsCallback } from './types';\nimport type { Version } from '../version';\n\nexport class CodemodRunner implements CodemodRunnerInterface {\n private readonly project: Project;\n\n private range: Version.Range;\n\n private isDry: boolean;\n\n private logger: Logger | null;\n\n private selectCodemodsCallback: SelectCodemodsCallback | null;\n\n constructor(project: Project, range: Version.Range) {\n this.project = project;\n this.range = range;\n\n this.isDry = false;\n\n this.logger = null;\n this.selectCodemodsCallback = null;\n }\n\n setRange(range: Version.Range) {\n this.range = range;\n return this;\n }\n\n setLogger(logger: Logger) {\n this.logger = logger;\n return this;\n }\n\n onSelectCodemods(callback: SelectCodemodsCallback | null) {\n this.selectCodemodsCallback = callback;\n return this;\n }\n\n dry(enabled: boolean = true) {\n this.isDry = enabled;\n return this;\n }\n\n private createRepository(codemodsDirectory?: string) {\n const repository = codemodRepositoryFactory(\n codemodsDirectory ?? codemodRepositoryConstants.INTERNAL_CODEMODS_DIRECTORY\n );\n\n // Make sure we have access to the latest snapshots of codemods on the system\n repository.refresh();\n\n return repository;\n }\n\n private async safeRunAndReport(codemods: Codemod.List) {\n if (this.isDry) {\n this.logger?.warn?.(\n 'Running the codemods in dry mode. No files will be modified during the process.'\n );\n }\n\n try {\n const reports = await this.project.runCodemods(codemods, { dry: this.isDry });\n\n this.logger?.raw?.(f.reports(reports));\n\n if (!this.isDry) {\n const nbAffectedTotal = reports\n .flatMap((report) => report.report.ok)\n .reduce((acc, nb) => acc + nb, 0);\n\n this.logger?.debug?.(\n `Successfully ran ${f.highlight(codemods.length)} codemod(s), ${f.highlight(nbAffectedTotal)} change(s) have been detected`\n );\n }\n\n return successReport();\n } catch (e: unknown) {\n return erroredReport(unknownToError(e));\n }\n }\n\n async runByUID(uid: string, codemodsDirectory?: string): Promise<CodemodRunnerReport> {\n const repository = this.createRepository(codemodsDirectory);\n\n if (!repository.has(uid)) {\n throw new Error(`Unknown codemod UID provided: ${uid}`);\n }\n\n // Note: Ignore the range when running with a UID\n const codemods = repository.find({ uids: [uid] }).flatMap(({ codemods }) => codemods);\n\n return this.safeRunAndReport(codemods);\n }\n\n async run(codemodsDirectory?: string): Promise<CodemodRunnerReport> {\n const repository = this.createRepository(codemodsDirectory);\n\n // Find codemods matching the given range\n const codemodsInRange = repository.find({ range: this.range });\n\n // If a selection callback is set, use it, else keep every codemods found\n const selectedCodemods = this.selectCodemodsCallback\n ? await this.selectCodemodsCallback(codemodsInRange)\n : codemodsInRange;\n\n // If no codemods have been selected (either manually or automatically)\n // Then ignore and return a successful report\n if (selectedCodemods.length === 0) {\n this.logger?.debug?.(`Found no codemods to run for ${f.versionRange(this.range)}`);\n return successReport();\n }\n\n // Flatten the collection to a single list of codemods, the original list should already be sorted by version\n const codemods = selectedCodemods.flatMap(({ codemods }) => codemods);\n\n // Log (debug) the codemods by version\n const codemodsByVersion = groupBy('version', codemods);\n const fRange = f.versionRange(this.range);\n\n this.logger?.debug?.(\n `Found ${f.highlight(codemods.length)} codemods for ${f.highlight(size(codemodsByVersion))} version(s) using ${fRange}`\n );\n\n for (const [version, codemods] of Object.entries(codemodsByVersion)) {\n this.logger?.debug?.(`- ${f.version(semVerFactory(version))} (${codemods.length})`);\n }\n\n return this.safeRunAndReport(codemods);\n }\n}\n\nexport const codemodRunnerFactory = (project: Project, range: Version.Range) => {\n return new CodemodRunner(project, range);\n};\n\nconst successReport = (): UpgradeReport => ({ success: true, error: null });\nconst erroredReport = (error: Error): UpgradeReport => ({ success: false, error });\n"],"names":["CodemodRunner","setRange","range","setLogger","logger","onSelectCodemods","callback","selectCodemodsCallback","dry","enabled","isDry","createRepository","codemodsDirectory","repository","codemodRepositoryFactory","codemodRepositoryConstants","refresh","safeRunAndReport","codemods","warn","reports","project","runCodemods","raw","f","nbAffectedTotal","flatMap","report","ok","reduce","acc","nb","debug","length","successReport","e","erroredReport","unknownToError","runByUID","uid","has","Error","find","uids","run","codemodsInRange","selectedCodemods","codemodsByVersion","groupBy","fRange","size","version","Object","entries","semVerFactory","codemodRunnerFactory","success","error"],"mappings":"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"}
1
+ {"version":3,"file":"codemod-runner.mjs","sources":["../../../../src/modules/codemod-runner/codemod-runner.ts"],"sourcesContent":["import { groupBy } from 'lodash';\n\nimport {\n codemodRepositoryFactory,\n constants as codemodRepositoryConstants,\n} from '../codemod-repository';\nimport { unknownToError } from '../error';\nimport { semVerFactory } from '../version';\nimport * as f from '../format';\n\nimport type { Codemod } from '../codemod';\nimport type { Logger } from '../logger';\nimport type { Project } from '../project';\nimport type { UpgradeReport } from '../upgrader';\nimport type { CodemodRunnerInterface, CodemodRunnerReport, SelectCodemodsCallback } from './types';\nimport type { Version } from '../version';\n\nexport class CodemodRunner implements CodemodRunnerInterface {\n private readonly project: Project;\n\n private range: Version.Range;\n\n private isDry: boolean;\n\n private logger: Logger | null;\n\n private selectCodemodsCallback: SelectCodemodsCallback | null;\n\n constructor(project: Project, range: Version.Range) {\n this.project = project;\n this.range = range;\n\n this.isDry = false;\n\n this.logger = null;\n this.selectCodemodsCallback = null;\n }\n\n setRange(range: Version.Range) {\n this.range = range;\n return this;\n }\n\n setLogger(logger: Logger) {\n this.logger = logger;\n return this;\n }\n\n onSelectCodemods(callback: SelectCodemodsCallback | null) {\n this.selectCodemodsCallback = callback;\n return this;\n }\n\n dry(enabled: boolean = true) {\n this.isDry = enabled;\n return this;\n }\n\n private createRepository(codemodsDirectory?: string) {\n const repository = codemodRepositoryFactory(\n codemodsDirectory ?? codemodRepositoryConstants.INTERNAL_CODEMODS_DIRECTORY\n );\n\n // Make sure we have access to the latest snapshots of codemods on the system\n repository.refresh();\n\n return repository;\n }\n\n private async safeRunAndReport(codemods: Codemod.List) {\n if (this.isDry) {\n this.logger?.warn?.(\n 'Running the codemods in dry mode. No files will be modified during the process.'\n );\n }\n\n try {\n const reports = await this.project.runCodemods(codemods, { dry: this.isDry });\n\n this.logger?.raw?.(f.reports(reports));\n\n if (!this.isDry) {\n const nbAffectedTotal = reports\n .flatMap((report) => report.report.ok)\n .reduce((acc, nb) => acc + nb, 0);\n\n this.logger?.debug?.(\n `Successfully ran ${f.highlight(codemods.length)} codemod(s), ${f.highlight(nbAffectedTotal)} change(s) have been detected`\n );\n }\n\n return successReport();\n } catch (e: unknown) {\n return erroredReport(unknownToError(e));\n }\n }\n\n async runByUID(uid: string, codemodsDirectory?: string): Promise<CodemodRunnerReport> {\n const repository = this.createRepository(codemodsDirectory);\n\n if (!repository.has(uid)) {\n throw new Error(`Unknown codemod UID provided: ${uid}`);\n }\n\n // Note: Ignore the range when running with a UID\n const codemods = repository.find({ uids: [uid] }).flatMap(({ codemods }) => codemods);\n\n return this.safeRunAndReport(codemods);\n }\n\n async run(codemodsDirectory?: string): Promise<CodemodRunnerReport> {\n const repository = this.createRepository(codemodsDirectory);\n\n // Find codemods matching the given range\n const codemodsInRange = repository.find({ range: this.range });\n\n // If a selection callback is set, use it, else keep every codemods found\n const selectedCodemods = this.selectCodemodsCallback\n ? await this.selectCodemodsCallback(codemodsInRange)\n : codemodsInRange;\n\n // If no codemods have been selected (either manually or automatically)\n // Then ignore and return a successful report\n if (selectedCodemods.length === 0) {\n this.logger?.debug?.(`Found no codemods to run for ${f.versionRange(this.range)}`);\n return successReport();\n }\n\n // Flatten the collection to a single list of codemods, the original list should already be sorted by version\n const codemods = selectedCodemods.flatMap(({ codemods }) => codemods);\n\n // Log (debug) the codemods by version\n const codemodsByVersion = groupBy(codemods, 'version');\n const fRange = f.versionRange(this.range);\n\n this.logger?.debug?.(\n `Found ${f.highlight(codemods.length)} codemods for ${f.highlight(Object.keys(codemodsByVersion).length)} version(s) using ${fRange}`\n );\n\n for (const [version, codemods] of Object.entries(codemodsByVersion)) {\n this.logger?.debug?.(`- ${f.version(semVerFactory(version))} (${codemods.length})`);\n }\n\n return this.safeRunAndReport(codemods);\n }\n}\n\nexport const codemodRunnerFactory = (project: Project, range: Version.Range) => {\n return new CodemodRunner(project, range);\n};\n\nconst successReport = (): UpgradeReport => ({ success: true, error: null });\nconst erroredReport = (error: Error): UpgradeReport => ({ success: false, error });\n"],"names":["CodemodRunner","setRange","range","setLogger","logger","onSelectCodemods","callback","selectCodemodsCallback","dry","enabled","isDry","createRepository","codemodsDirectory","repository","codemodRepositoryFactory","codemodRepositoryConstants","refresh","safeRunAndReport","codemods","warn","reports","project","runCodemods","raw","f","nbAffectedTotal","flatMap","report","ok","reduce","acc","nb","debug","length","successReport","e","erroredReport","unknownToError","runByUID","uid","has","Error","find","uids","run","codemodsInRange","selectedCodemods","codemodsByVersion","groupBy","fRange","Object","keys","version","entries","semVerFactory","codemodRunnerFactory","success","error"],"mappings":"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"}
@@ -1,34 +1,35 @@
1
1
  'use strict';
2
2
 
3
- var fp = require('lodash/fp');
3
+ var lodash = require('lodash');
4
+ var utils = require('@strapi/utils');
4
5
 
5
6
  class JSONTransformAPI {
6
7
  get(path, defaultValue) {
7
8
  if (!path) {
8
9
  return this.root();
9
10
  }
10
- return fp.cloneDeep(fp.get(path, this.json) ?? defaultValue);
11
+ return lodash.cloneDeep(lodash.get(this.json, path) ?? defaultValue);
11
12
  }
12
13
  has(path) {
13
- return fp.has(path, this.json);
14
+ return lodash.has(this.json, path);
14
15
  }
15
16
  merge(other) {
16
- this.json = fp.merge(other, this.json);
17
+ this.json = lodash.merge({}, other, this.json);
17
18
  return this;
18
19
  }
19
20
  root() {
20
- return fp.cloneDeep(this.json);
21
+ return lodash.cloneDeep(this.json);
21
22
  }
22
23
  set(path, value) {
23
- this.json = fp.set(path, value, this.json);
24
+ this.json = utils.objects.set(this.json, path, value);
24
25
  return this;
25
26
  }
26
27
  remove(path) {
27
- this.json = fp.omit(path, this.json);
28
+ this.json = lodash.omit(this.json, path);
28
29
  return this;
29
30
  }
30
31
  constructor(json){
31
- this.json = fp.cloneDeep(json);
32
+ this.json = lodash.cloneDeep(json);
32
33
  }
33
34
  }
34
35
  const createJSONTransformAPI = (object)=>new JSONTransformAPI(object);
@@ -1 +1 @@
1
- {"version":3,"file":"transform-api.js","sources":["../../../../src/modules/json/transform-api.ts"],"sourcesContent":["import { cloneDeep, get, has, set, merge, omit } from 'lodash/fp';\n\nimport type { Utils } from '@strapi/types';\n\nimport type { JSONTransformAPI as JSONTransformAPIInterface } from './types';\n\nexport class JSONTransformAPI implements JSONTransformAPIInterface {\n private json: Utils.JSONObject;\n\n constructor(json: Utils.JSONObject) {\n this.json = cloneDeep(json);\n }\n\n get<T extends Utils.JSONValue>(path: string): T | undefined;\n get<T extends Utils.JSONValue>(path: string, defaultValue: T): T;\n get<T extends Utils.JSONValue>(path?: string, defaultValue?: T) {\n if (!path) {\n return this.root() as T;\n }\n\n return cloneDeep(get(path, this.json) ?? defaultValue) as T;\n }\n\n has(path: string) {\n return has(path, this.json);\n }\n\n merge(other: Utils.JSONObject) {\n this.json = merge(other, this.json);\n\n return this;\n }\n\n root(): Utils.JSONObject {\n return cloneDeep(this.json);\n }\n\n set(path: string, value: Utils.JSONValue) {\n this.json = set(path, value, this.json);\n\n return this;\n }\n\n remove(path: string) {\n this.json = omit(path, this.json);\n return this;\n }\n}\n\nexport const createJSONTransformAPI = (object: Utils.JSONObject) => new JSONTransformAPI(object);\n"],"names":["JSONTransformAPI","get","path","defaultValue","root","cloneDeep","json","has","merge","other","set","value","remove","omit","createJSONTransformAPI","object"],"mappings":";;;;AAMO,MAAMA,gBAAAA,CAAAA;IASXC,GAAAA,CAA+BC,IAAa,EAAEC,YAAgB,EAAE;AAC9D,QAAA,IAAI,CAACD,IAAAA,EAAM;YACT,OAAO,IAAI,CAACE,IAAI,EAAA;AAClB,QAAA;AAEA,QAAA,OAAOC,aAAUJ,MAAAA,CAAIC,IAAAA,EAAM,IAAI,CAACI,IAAI,CAAA,IAAKH,YAAAA,CAAAA;AAC3C,IAAA;AAEAI,IAAAA,GAAAA,CAAIL,IAAY,EAAE;AAChB,QAAA,OAAOK,MAAAA,CAAIL,IAAAA,EAAM,IAAI,CAACI,IAAI,CAAA;AAC5B,IAAA;AAEAE,IAAAA,KAAAA,CAAMC,KAAuB,EAAE;AAC7B,QAAA,IAAI,CAACH,IAAI,GAAGE,SAAMC,KAAAA,EAAO,IAAI,CAACH,IAAI,CAAA;AAElC,QAAA,OAAO,IAAI;AACb,IAAA;IAEAF,IAAAA,GAAyB;QACvB,OAAOC,YAAAA,CAAU,IAAI,CAACC,IAAI,CAAA;AAC5B,IAAA;IAEAI,GAAAA,CAAIR,IAAY,EAAES,KAAsB,EAAE;QACxC,IAAI,CAACL,IAAI,GAAGI,MAAAA,CAAIR,MAAMS,KAAAA,EAAO,IAAI,CAACL,IAAI,CAAA;AAEtC,QAAA,OAAO,IAAI;AACb,IAAA;AAEAM,IAAAA,MAAAA,CAAOV,IAAY,EAAE;AACnB,QAAA,IAAI,CAACI,IAAI,GAAGO,QAAKX,IAAAA,EAAM,IAAI,CAACI,IAAI,CAAA;AAChC,QAAA,OAAO,IAAI;AACb,IAAA;AArCA,IAAA,WAAA,CAAYA,IAAsB,CAAE;QAClC,IAAI,CAACA,IAAI,GAAGD,YAAAA,CAAUC,IAAAA,CAAAA;AACxB,IAAA;AAoCF;MAEaQ,sBAAAA,GAAyB,CAACC,MAAAA,GAA6B,IAAIf,iBAAiBe,MAAAA;;;;;"}
1
+ {"version":3,"file":"transform-api.js","sources":["../../../../src/modules/json/transform-api.ts"],"sourcesContent":["import { cloneDeep, get, has, merge, omit } from 'lodash';\n\nimport { objects } from '@strapi/utils';\n\nimport type { Utils } from '@strapi/types';\n\nimport type { JSONTransformAPI as JSONTransformAPIInterface } from './types';\n\nexport class JSONTransformAPI implements JSONTransformAPIInterface {\n private json: Utils.JSONObject;\n\n constructor(json: Utils.JSONObject) {\n this.json = cloneDeep(json);\n }\n\n get<T extends Utils.JSONValue>(path: string): T | undefined;\n get<T extends Utils.JSONValue>(path: string, defaultValue: T): T;\n get<T extends Utils.JSONValue>(path?: string, defaultValue?: T) {\n if (!path) {\n return this.root() as T;\n }\n\n return cloneDeep(get(this.json, path) ?? defaultValue) as T;\n }\n\n has(path: string) {\n return has(this.json, path);\n }\n\n merge(other: Utils.JSONObject) {\n this.json = merge({}, other, this.json);\n\n return this;\n }\n\n root(): Utils.JSONObject {\n return cloneDeep(this.json);\n }\n\n set(path: string, value: Utils.JSONValue) {\n this.json = objects.set(this.json, path, value);\n\n return this;\n }\n\n remove(path: string) {\n this.json = omit(this.json, path);\n return this;\n }\n}\n\nexport const createJSONTransformAPI = (object: Utils.JSONObject) => new JSONTransformAPI(object);\n"],"names":["JSONTransformAPI","get","path","defaultValue","root","cloneDeep","json","has","merge","other","set","value","objects","remove","omit","createJSONTransformAPI","object"],"mappings":";;;;;AAQO,MAAMA,gBAAAA,CAAAA;IASXC,GAAAA,CAA+BC,IAAa,EAAEC,YAAgB,EAAE;AAC9D,QAAA,IAAI,CAACD,IAAAA,EAAM;YACT,OAAO,IAAI,CAACE,IAAI,EAAA;AAClB,QAAA;AAEA,QAAA,OAAOC,iBAAUJ,UAAAA,CAAI,IAAI,CAACK,IAAI,EAAEJ,IAAAA,CAAAA,IAASC,YAAAA,CAAAA;AAC3C,IAAA;AAEAI,IAAAA,GAAAA,CAAIL,IAAY,EAAE;AAChB,QAAA,OAAOK,UAAAA,CAAI,IAAI,CAACD,IAAI,EAAEJ,IAAAA,CAAAA;AACxB,IAAA;AAEAM,IAAAA,KAAAA,CAAMC,KAAuB,EAAE;QAC7B,IAAI,CAACH,IAAI,GAAGE,YAAAA,CAAM,EAAC,EAAGC,KAAAA,EAAO,IAAI,CAACH,IAAI,CAAA;AAEtC,QAAA,OAAO,IAAI;AACb,IAAA;IAEAF,IAAAA,GAAyB;QACvB,OAAOC,gBAAAA,CAAU,IAAI,CAACC,IAAI,CAAA;AAC5B,IAAA;IAEAI,GAAAA,CAAIR,IAAY,EAAES,KAAsB,EAAE;QACxC,IAAI,CAACL,IAAI,GAAGM,aAAAA,CAAQF,GAAG,CAAC,IAAI,CAACJ,IAAI,EAAEJ,IAAAA,EAAMS,KAAAA,CAAAA;AAEzC,QAAA,OAAO,IAAI;AACb,IAAA;AAEAE,IAAAA,MAAAA,CAAOX,IAAY,EAAE;AACnB,QAAA,IAAI,CAACI,IAAI,GAAGQ,YAAK,IAAI,CAACR,IAAI,EAAEJ,IAAAA,CAAAA;AAC5B,QAAA,OAAO,IAAI;AACb,IAAA;AArCA,IAAA,WAAA,CAAYI,IAAsB,CAAE;QAClC,IAAI,CAACA,IAAI,GAAGD,gBAAAA,CAAUC,IAAAA,CAAAA;AACxB,IAAA;AAoCF;MAEaS,sBAAAA,GAAyB,CAACC,MAAAA,GAA6B,IAAIhB,iBAAiBgB,MAAAA;;;;;"}
@@ -1,28 +1,29 @@
1
- import { cloneDeep, get, has, merge, set, omit } from 'lodash/fp';
1
+ import { cloneDeep, get, has, merge, omit } from 'lodash';
2
+ import { objects } from '@strapi/utils';
2
3
 
3
4
  class JSONTransformAPI {
4
5
  get(path, defaultValue) {
5
6
  if (!path) {
6
7
  return this.root();
7
8
  }
8
- return cloneDeep(get(path, this.json) ?? defaultValue);
9
+ return cloneDeep(get(this.json, path) ?? defaultValue);
9
10
  }
10
11
  has(path) {
11
- return has(path, this.json);
12
+ return has(this.json, path);
12
13
  }
13
14
  merge(other) {
14
- this.json = merge(other, this.json);
15
+ this.json = merge({}, other, this.json);
15
16
  return this;
16
17
  }
17
18
  root() {
18
19
  return cloneDeep(this.json);
19
20
  }
20
21
  set(path, value) {
21
- this.json = set(path, value, this.json);
22
+ this.json = objects.set(this.json, path, value);
22
23
  return this;
23
24
  }
24
25
  remove(path) {
25
- this.json = omit(path, this.json);
26
+ this.json = omit(this.json, path);
26
27
  return this;
27
28
  }
28
29
  constructor(json){
@@ -1 +1 @@
1
- {"version":3,"file":"transform-api.mjs","sources":["../../../../src/modules/json/transform-api.ts"],"sourcesContent":["import { cloneDeep, get, has, set, merge, omit } from 'lodash/fp';\n\nimport type { Utils } from '@strapi/types';\n\nimport type { JSONTransformAPI as JSONTransformAPIInterface } from './types';\n\nexport class JSONTransformAPI implements JSONTransformAPIInterface {\n private json: Utils.JSONObject;\n\n constructor(json: Utils.JSONObject) {\n this.json = cloneDeep(json);\n }\n\n get<T extends Utils.JSONValue>(path: string): T | undefined;\n get<T extends Utils.JSONValue>(path: string, defaultValue: T): T;\n get<T extends Utils.JSONValue>(path?: string, defaultValue?: T) {\n if (!path) {\n return this.root() as T;\n }\n\n return cloneDeep(get(path, this.json) ?? defaultValue) as T;\n }\n\n has(path: string) {\n return has(path, this.json);\n }\n\n merge(other: Utils.JSONObject) {\n this.json = merge(other, this.json);\n\n return this;\n }\n\n root(): Utils.JSONObject {\n return cloneDeep(this.json);\n }\n\n set(path: string, value: Utils.JSONValue) {\n this.json = set(path, value, this.json);\n\n return this;\n }\n\n remove(path: string) {\n this.json = omit(path, this.json);\n return this;\n }\n}\n\nexport const createJSONTransformAPI = (object: Utils.JSONObject) => new JSONTransformAPI(object);\n"],"names":["JSONTransformAPI","get","path","defaultValue","root","cloneDeep","json","has","merge","other","set","value","remove","omit","createJSONTransformAPI","object"],"mappings":";;AAMO,MAAMA,gBAAAA,CAAAA;IASXC,GAAAA,CAA+BC,IAAa,EAAEC,YAAgB,EAAE;AAC9D,QAAA,IAAI,CAACD,IAAAA,EAAM;YACT,OAAO,IAAI,CAACE,IAAI,EAAA;AAClB,QAAA;AAEA,QAAA,OAAOC,UAAUJ,GAAAA,CAAIC,IAAAA,EAAM,IAAI,CAACI,IAAI,CAAA,IAAKH,YAAAA,CAAAA;AAC3C,IAAA;AAEAI,IAAAA,GAAAA,CAAIL,IAAY,EAAE;AAChB,QAAA,OAAOK,GAAAA,CAAIL,IAAAA,EAAM,IAAI,CAACI,IAAI,CAAA;AAC5B,IAAA;AAEAE,IAAAA,KAAAA,CAAMC,KAAuB,EAAE;AAC7B,QAAA,IAAI,CAACH,IAAI,GAAGE,MAAMC,KAAAA,EAAO,IAAI,CAACH,IAAI,CAAA;AAElC,QAAA,OAAO,IAAI;AACb,IAAA;IAEAF,IAAAA,GAAyB;QACvB,OAAOC,SAAAA,CAAU,IAAI,CAACC,IAAI,CAAA;AAC5B,IAAA;IAEAI,GAAAA,CAAIR,IAAY,EAAES,KAAsB,EAAE;QACxC,IAAI,CAACL,IAAI,GAAGI,GAAAA,CAAIR,MAAMS,KAAAA,EAAO,IAAI,CAACL,IAAI,CAAA;AAEtC,QAAA,OAAO,IAAI;AACb,IAAA;AAEAM,IAAAA,MAAAA,CAAOV,IAAY,EAAE;AACnB,QAAA,IAAI,CAACI,IAAI,GAAGO,KAAKX,IAAAA,EAAM,IAAI,CAACI,IAAI,CAAA;AAChC,QAAA,OAAO,IAAI;AACb,IAAA;AArCA,IAAA,WAAA,CAAYA,IAAsB,CAAE;QAClC,IAAI,CAACA,IAAI,GAAGD,SAAAA,CAAUC,IAAAA,CAAAA;AACxB,IAAA;AAoCF;MAEaQ,sBAAAA,GAAyB,CAACC,MAAAA,GAA6B,IAAIf,iBAAiBe,MAAAA;;;;"}
1
+ {"version":3,"file":"transform-api.mjs","sources":["../../../../src/modules/json/transform-api.ts"],"sourcesContent":["import { cloneDeep, get, has, merge, omit } from 'lodash';\n\nimport { objects } from '@strapi/utils';\n\nimport type { Utils } from '@strapi/types';\n\nimport type { JSONTransformAPI as JSONTransformAPIInterface } from './types';\n\nexport class JSONTransformAPI implements JSONTransformAPIInterface {\n private json: Utils.JSONObject;\n\n constructor(json: Utils.JSONObject) {\n this.json = cloneDeep(json);\n }\n\n get<T extends Utils.JSONValue>(path: string): T | undefined;\n get<T extends Utils.JSONValue>(path: string, defaultValue: T): T;\n get<T extends Utils.JSONValue>(path?: string, defaultValue?: T) {\n if (!path) {\n return this.root() as T;\n }\n\n return cloneDeep(get(this.json, path) ?? defaultValue) as T;\n }\n\n has(path: string) {\n return has(this.json, path);\n }\n\n merge(other: Utils.JSONObject) {\n this.json = merge({}, other, this.json);\n\n return this;\n }\n\n root(): Utils.JSONObject {\n return cloneDeep(this.json);\n }\n\n set(path: string, value: Utils.JSONValue) {\n this.json = objects.set(this.json, path, value);\n\n return this;\n }\n\n remove(path: string) {\n this.json = omit(this.json, path);\n return this;\n }\n}\n\nexport const createJSONTransformAPI = (object: Utils.JSONObject) => new JSONTransformAPI(object);\n"],"names":["JSONTransformAPI","get","path","defaultValue","root","cloneDeep","json","has","merge","other","set","value","objects","remove","omit","createJSONTransformAPI","object"],"mappings":";;;AAQO,MAAMA,gBAAAA,CAAAA;IASXC,GAAAA,CAA+BC,IAAa,EAAEC,YAAgB,EAAE;AAC9D,QAAA,IAAI,CAACD,IAAAA,EAAM;YACT,OAAO,IAAI,CAACE,IAAI,EAAA;AAClB,QAAA;AAEA,QAAA,OAAOC,UAAUJ,GAAAA,CAAI,IAAI,CAACK,IAAI,EAAEJ,IAAAA,CAAAA,IAASC,YAAAA,CAAAA;AAC3C,IAAA;AAEAI,IAAAA,GAAAA,CAAIL,IAAY,EAAE;AAChB,QAAA,OAAOK,GAAAA,CAAI,IAAI,CAACD,IAAI,EAAEJ,IAAAA,CAAAA;AACxB,IAAA;AAEAM,IAAAA,KAAAA,CAAMC,KAAuB,EAAE;QAC7B,IAAI,CAACH,IAAI,GAAGE,KAAAA,CAAM,EAAC,EAAGC,KAAAA,EAAO,IAAI,CAACH,IAAI,CAAA;AAEtC,QAAA,OAAO,IAAI;AACb,IAAA;IAEAF,IAAAA,GAAyB;QACvB,OAAOC,SAAAA,CAAU,IAAI,CAACC,IAAI,CAAA;AAC5B,IAAA;IAEAI,GAAAA,CAAIR,IAAY,EAAES,KAAsB,EAAE;QACxC,IAAI,CAACL,IAAI,GAAGM,OAAAA,CAAQF,GAAG,CAAC,IAAI,CAACJ,IAAI,EAAEJ,IAAAA,EAAMS,KAAAA,CAAAA;AAEzC,QAAA,OAAO,IAAI;AACb,IAAA;AAEAE,IAAAA,MAAAA,CAAOX,IAAY,EAAE;AACnB,QAAA,IAAI,CAACI,IAAI,GAAGQ,KAAK,IAAI,CAACR,IAAI,EAAEJ,IAAAA,CAAAA;AAC5B,QAAA,OAAO,IAAI;AACb,IAAA;AArCA,IAAA,WAAA,CAAYI,IAAsB,CAAE;QAClC,IAAI,CAACA,IAAI,GAAGD,SAAAA,CAAUC,IAAAA,CAAAA;AACxB,IAAA;AAoCF;MAEaS,sBAAAA,GAAyB,CAACC,MAAAA,GAA6B,IAAIhB,iBAAiBgB,MAAAA;;;;"}
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var assert = require('node:assert');
4
- var fp = require('lodash/fp');
4
+ var lodash = require('lodash');
5
5
  var node = require('esbuild-register/dist/node');
6
6
  var transformApi = require('../../json/transform-api.js');
7
7
  var file = require('../../json/file.js');
@@ -44,7 +44,7 @@ const transformJSON = async (codemodPath, paths, config)=>{
44
44
  '.ts'
45
45
  ],
46
46
  hookIgnoreNodeModules: false,
47
- hookMatcher: fp.isEqual(codemodPath)
47
+ hookMatcher: (value)=>lodash.isEqual(codemodPath, value)
48
48
  };
49
49
  const { unregister } = node.register(esbuildOptions);
50
50
  const module = require(codemodPath);
@@ -68,7 +68,7 @@ const transformJSON = async (codemodPath, paths, config)=>{
68
68
  const out = await codemod(file$1, params);
69
69
  if (out === undefined) {
70
70
  report.error += 1;
71
- } else if (!fp.isEqual(json, out)) {
71
+ } else if (!lodash.isEqual(json, out)) {
72
72
  if (!dry) {
73
73
  await file.saveJSON(path, out);
74
74
  }
@@ -1 +1 @@
1
- {"version":3,"file":"transform.js","sources":["../../../../../src/modules/runner/json/transform.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-var-requires */\n\nimport assert from 'node:assert';\nimport { isEqual } from 'lodash/fp';\nimport { register } from 'esbuild-register/dist/node';\n\nimport { createJSONTransformAPI, readJSON, saveJSON } from '../../json';\n\nimport type { Report } from '../../report';\n\nimport type { JSONRunnerConfiguration, JSONSourceFile, JSONTransformParams } from './types';\n\nexport const transformJSON = async (\n codemodPath: string,\n paths: string[],\n config: JSONRunnerConfiguration\n): Promise<Report.Report> => {\n const { dry } = config;\n const startTime = process.hrtime();\n\n const report: Report.Report = {\n ok: 0,\n nochange: 0,\n skip: 0,\n error: 0,\n timeElapsed: '',\n stats: {},\n };\n\n /**\n * Why do we need to include node_modules (hookIgnoreNodeModules) and specify a matcher (hookMatcher) to esbuild?\n *\n * When using tools like npx or dlx, the execution context is different from when running the program in a local\n * project. npx and dlx run the commands in a temporary installation, which is isolated from local project files.\n *\n * When hookIgnoreNodeModules is not specified (or set to true), esbuild-register instructs\n * Pirates (https://github.com/danez/pirates) to not transpile any files that come from node_modules.\n *\n * Now, when using npx or dlx to run a script, its location can be seen as \"external\" because it's not part of\n * the temporary environment where npx or dlx execute. Therefore, it's considered to be part of node_modules.\n *\n * Due to this, if hookIgnoreNodeModules is set to true or left unspecified,\n * esbuild-register won't try to compile them upon require.\n *\n * hookMatcher is added to make sure we're not matching anything else than our codemod in external directories.\n */\n const esbuildOptions = {\n extensions: ['.js', '.mjs', '.ts'],\n hookIgnoreNodeModules: false,\n hookMatcher: isEqual(codemodPath),\n };\n const { unregister } = register(esbuildOptions);\n\n const module = require(codemodPath);\n\n unregister();\n\n const codemod = typeof module.default === 'function' ? module.default : module;\n\n assert(typeof codemod === 'function', `Codemod must be a function. Found ${typeof codemod}`);\n\n for (const path of paths) {\n try {\n const json = await readJSON(path);\n\n // Make sure the JSON value is a JSON object\n assert(typeof json === 'object' && !Array.isArray(json) && json !== null);\n\n // TODO: Optimize the API to limit parse/stringify operations\n const file: JSONSourceFile = { path, json };\n const params: JSONTransformParams = { cwd: config.cwd, json: createJSONTransformAPI };\n\n const out = await codemod(file, params);\n\n if (out === undefined) {\n report.error += 1;\n }\n // If the json object has modifications\n else if (!isEqual(json, out)) {\n if (!dry) {\n await saveJSON(path, out);\n }\n report.ok += 1;\n }\n // No changes\n else {\n report.nochange += 1;\n }\n } catch {\n report.error += 1;\n }\n }\n\n const endTime = process.hrtime(startTime);\n report.timeElapsed = (endTime[0] + endTime[1] / 1e9).toFixed(3);\n\n return report;\n};\n"],"names":["transformJSON","codemodPath","paths","config","dry","startTime","process","hrtime","report","ok","nochange","skip","error","timeElapsed","stats","esbuildOptions","extensions","hookIgnoreNodeModules","hookMatcher","isEqual","unregister","register","module","require","codemod","default","assert","path","json","readJSON","Array","isArray","file","params","cwd","createJSONTransformAPI","out","undefined","saveJSON","endTime","toFixed"],"mappings":";;;;;;;;;;;;AAYO,MAAMA,aAAAA,GAAgB,OAC3BC,WAAAA,EACAC,KAAAA,EACAC,MAAAA,GAAAA;IAEA,MAAM,EAAEC,GAAG,EAAE,GAAGD,MAAAA;IAChB,MAAME,SAAAA,GAAYC,QAAQC,MAAM,EAAA;AAEhC,IAAA,MAAMC,MAAAA,GAAwB;QAC5BC,EAAAA,EAAI,CAAA;QACJC,QAAAA,EAAU,CAAA;QACVC,IAAAA,EAAM,CAAA;QACNC,KAAAA,EAAO,CAAA;QACPC,WAAAA,EAAa,EAAA;AACbC,QAAAA,KAAAA,EAAO;AACT,KAAA;AAEA;;;;;;;;;;;;;;;;AAgBC,MACD,MAAMC,cAAAA,GAAiB;QACrBC,UAAAA,EAAY;AAAC,YAAA,KAAA;AAAO,YAAA,MAAA;AAAQ,YAAA;AAAM,SAAA;QAClCC,qBAAAA,EAAuB,KAAA;AACvBC,QAAAA,WAAAA,EAAaC,UAAAA,CAAQlB,WAAAA;AACvB,KAAA;AACA,IAAA,MAAM,EAAEmB,UAAU,EAAE,GAAGC,aAAAA,CAASN,cAAAA,CAAAA;AAEhC,IAAA,MAAMO,SAASC,OAAAA,CAAQtB,WAAAA,CAAAA;AAEvBmB,IAAAA,UAAAA,EAAAA;IAEA,MAAMI,OAAAA,GAAU,OAAOF,MAAAA,CAAOG,OAAO,KAAK,UAAA,GAAaH,MAAAA,CAAOG,OAAO,GAAGH,MAAAA;AAExEI,IAAAA,uBAAAA,CAAO,OAAOF,OAAAA,KAAY,UAAA,EAAY,CAAC,kCAAkC,EAAE,OAAOA,OAAAA,CAAAA,CAAS,CAAA;IAE3F,KAAK,MAAMG,QAAQzB,KAAAA,CAAO;QACxB,IAAI;YACF,MAAM0B,IAAAA,GAAO,MAAMC,aAAAA,CAASF,IAAAA,CAAAA;;YAG5BD,uBAAAA,CAAO,OAAOE,SAAS,QAAA,IAAY,CAACE,MAAMC,OAAO,CAACH,SAASA,IAAAA,KAAS,IAAA,CAAA;;AAGpE,YAAA,MAAMI,MAAAA,GAAuB;AAAEL,gBAAAA,IAAAA;AAAMC,gBAAAA;AAAK,aAAA;AAC1C,YAAA,MAAMK,MAAAA,GAA8B;AAAEC,gBAAAA,GAAAA,EAAK/B,OAAO+B,GAAG;gBAAEN,IAAAA,EAAMO;AAAuB,aAAA;YAEpF,MAAMC,GAAAA,GAAM,MAAMZ,OAAAA,CAAQQ,MAAAA,EAAMC,MAAAA,CAAAA;AAEhC,YAAA,IAAIG,QAAQC,SAAAA,EAAW;AACrB7B,gBAAAA,MAAAA,CAAOI,KAAK,IAAI,CAAA;AAClB,YAAA,CAAA,MAEK,IAAI,CAACO,UAAAA,CAAQS,IAAAA,EAAMQ,GAAAA,CAAAA,EAAM;AAC5B,gBAAA,IAAI,CAAChC,GAAAA,EAAK;AACR,oBAAA,MAAMkC,cAASX,IAAAA,EAAMS,GAAAA,CAAAA;AACvB,gBAAA;AACA5B,gBAAAA,MAAAA,CAAOC,EAAE,IAAI,CAAA;YACf,CAAA,MAEK;AACHD,gBAAAA,MAAAA,CAAOE,QAAQ,IAAI,CAAA;AACrB,YAAA;AACF,QAAA,CAAA,CAAE,OAAM;AACNF,YAAAA,MAAAA,CAAOI,KAAK,IAAI,CAAA;AAClB,QAAA;AACF,IAAA;IAEA,MAAM2B,OAAAA,GAAUjC,OAAAA,CAAQC,MAAM,CAACF,SAAAA,CAAAA;AAC/BG,IAAAA,MAAAA,CAAOK,WAAW,GAAG,CAAC0B,OAAO,CAAC,CAAA,CAAE,GAAGA,OAAO,CAAC,CAAA,CAAE,GAAG,GAAE,EAAGC,OAAO,CAAC,CAAA,CAAA;IAE7D,OAAOhC,MAAAA;AACT;;;;"}
1
+ {"version":3,"file":"transform.js","sources":["../../../../../src/modules/runner/json/transform.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-var-requires */\n\nimport assert from 'node:assert';\nimport { isEqual } from 'lodash';\nimport { register } from 'esbuild-register/dist/node';\n\nimport { createJSONTransformAPI, readJSON, saveJSON } from '../../json';\n\nimport type { Report } from '../../report';\n\nimport type { JSONRunnerConfiguration, JSONSourceFile, JSONTransformParams } from './types';\n\nexport const transformJSON = async (\n codemodPath: string,\n paths: string[],\n config: JSONRunnerConfiguration\n): Promise<Report.Report> => {\n const { dry } = config;\n const startTime = process.hrtime();\n\n const report: Report.Report = {\n ok: 0,\n nochange: 0,\n skip: 0,\n error: 0,\n timeElapsed: '',\n stats: {},\n };\n\n /**\n * Why do we need to include node_modules (hookIgnoreNodeModules) and specify a matcher (hookMatcher) to esbuild?\n *\n * When using tools like npx or dlx, the execution context is different from when running the program in a local\n * project. npx and dlx run the commands in a temporary installation, which is isolated from local project files.\n *\n * When hookIgnoreNodeModules is not specified (or set to true), esbuild-register instructs\n * Pirates (https://github.com/danez/pirates) to not transpile any files that come from node_modules.\n *\n * Now, when using npx or dlx to run a script, its location can be seen as \"external\" because it's not part of\n * the temporary environment where npx or dlx execute. Therefore, it's considered to be part of node_modules.\n *\n * Due to this, if hookIgnoreNodeModules is set to true or left unspecified,\n * esbuild-register won't try to compile them upon require.\n *\n * hookMatcher is added to make sure we're not matching anything else than our codemod in external directories.\n */\n const esbuildOptions = {\n extensions: ['.js', '.mjs', '.ts'],\n hookIgnoreNodeModules: false,\n hookMatcher: (value: string) => isEqual(codemodPath, value),\n };\n const { unregister } = register(esbuildOptions);\n\n const module = require(codemodPath);\n\n unregister();\n\n const codemod = typeof module.default === 'function' ? module.default : module;\n\n assert(typeof codemod === 'function', `Codemod must be a function. Found ${typeof codemod}`);\n\n for (const path of paths) {\n try {\n const json = await readJSON(path);\n\n // Make sure the JSON value is a JSON object\n assert(typeof json === 'object' && !Array.isArray(json) && json !== null);\n\n // TODO: Optimize the API to limit parse/stringify operations\n const file: JSONSourceFile = { path, json };\n const params: JSONTransformParams = { cwd: config.cwd, json: createJSONTransformAPI };\n\n const out = await codemod(file, params);\n\n if (out === undefined) {\n report.error += 1;\n }\n // If the json object has modifications\n else if (!isEqual(json, out)) {\n if (!dry) {\n await saveJSON(path, out);\n }\n report.ok += 1;\n }\n // No changes\n else {\n report.nochange += 1;\n }\n } catch {\n report.error += 1;\n }\n }\n\n const endTime = process.hrtime(startTime);\n report.timeElapsed = (endTime[0] + endTime[1] / 1e9).toFixed(3);\n\n return report;\n};\n"],"names":["transformJSON","codemodPath","paths","config","dry","startTime","process","hrtime","report","ok","nochange","skip","error","timeElapsed","stats","esbuildOptions","extensions","hookIgnoreNodeModules","hookMatcher","value","isEqual","unregister","register","module","require","codemod","default","assert","path","json","readJSON","Array","isArray","file","params","cwd","createJSONTransformAPI","out","undefined","saveJSON","endTime","toFixed"],"mappings":";;;;;;;;;;;;AAYO,MAAMA,aAAAA,GAAgB,OAC3BC,WAAAA,EACAC,KAAAA,EACAC,MAAAA,GAAAA;IAEA,MAAM,EAAEC,GAAG,EAAE,GAAGD,MAAAA;IAChB,MAAME,SAAAA,GAAYC,QAAQC,MAAM,EAAA;AAEhC,IAAA,MAAMC,MAAAA,GAAwB;QAC5BC,EAAAA,EAAI,CAAA;QACJC,QAAAA,EAAU,CAAA;QACVC,IAAAA,EAAM,CAAA;QACNC,KAAAA,EAAO,CAAA;QACPC,WAAAA,EAAa,EAAA;AACbC,QAAAA,KAAAA,EAAO;AACT,KAAA;AAEA;;;;;;;;;;;;;;;;AAgBC,MACD,MAAMC,cAAAA,GAAiB;QACrBC,UAAAA,EAAY;AAAC,YAAA,KAAA;AAAO,YAAA,MAAA;AAAQ,YAAA;AAAM,SAAA;QAClCC,qBAAAA,EAAuB,KAAA;QACvBC,WAAAA,EAAa,CAACC,KAAAA,GAAkBC,cAAAA,CAAQnB,WAAAA,EAAakB,KAAAA;AACvD,KAAA;AACA,IAAA,MAAM,EAAEE,UAAU,EAAE,GAAGC,aAAAA,CAASP,cAAAA,CAAAA;AAEhC,IAAA,MAAMQ,SAASC,OAAAA,CAAQvB,WAAAA,CAAAA;AAEvBoB,IAAAA,UAAAA,EAAAA;IAEA,MAAMI,OAAAA,GAAU,OAAOF,MAAAA,CAAOG,OAAO,KAAK,UAAA,GAAaH,MAAAA,CAAOG,OAAO,GAAGH,MAAAA;AAExEI,IAAAA,uBAAAA,CAAO,OAAOF,OAAAA,KAAY,UAAA,EAAY,CAAC,kCAAkC,EAAE,OAAOA,OAAAA,CAAAA,CAAS,CAAA;IAE3F,KAAK,MAAMG,QAAQ1B,KAAAA,CAAO;QACxB,IAAI;YACF,MAAM2B,IAAAA,GAAO,MAAMC,aAAAA,CAASF,IAAAA,CAAAA;;YAG5BD,uBAAAA,CAAO,OAAOE,SAAS,QAAA,IAAY,CAACE,MAAMC,OAAO,CAACH,SAASA,IAAAA,KAAS,IAAA,CAAA;;AAGpE,YAAA,MAAMI,MAAAA,GAAuB;AAAEL,gBAAAA,IAAAA;AAAMC,gBAAAA;AAAK,aAAA;AAC1C,YAAA,MAAMK,MAAAA,GAA8B;AAAEC,gBAAAA,GAAAA,EAAKhC,OAAOgC,GAAG;gBAAEN,IAAAA,EAAMO;AAAuB,aAAA;YAEpF,MAAMC,GAAAA,GAAM,MAAMZ,OAAAA,CAAQQ,MAAAA,EAAMC,MAAAA,CAAAA;AAEhC,YAAA,IAAIG,QAAQC,SAAAA,EAAW;AACrB9B,gBAAAA,MAAAA,CAAOI,KAAK,IAAI,CAAA;AAClB,YAAA,CAAA,MAEK,IAAI,CAACQ,cAAAA,CAAQS,IAAAA,EAAMQ,GAAAA,CAAAA,EAAM;AAC5B,gBAAA,IAAI,CAACjC,GAAAA,EAAK;AACR,oBAAA,MAAMmC,cAASX,IAAAA,EAAMS,GAAAA,CAAAA;AACvB,gBAAA;AACA7B,gBAAAA,MAAAA,CAAOC,EAAE,IAAI,CAAA;YACf,CAAA,MAEK;AACHD,gBAAAA,MAAAA,CAAOE,QAAQ,IAAI,CAAA;AACrB,YAAA;AACF,QAAA,CAAA,CAAE,OAAM;AACNF,YAAAA,MAAAA,CAAOI,KAAK,IAAI,CAAA;AAClB,QAAA;AACF,IAAA;IAEA,MAAM4B,OAAAA,GAAUlC,OAAAA,CAAQC,MAAM,CAACF,SAAAA,CAAAA;AAC/BG,IAAAA,MAAAA,CAAOK,WAAW,GAAG,CAAC2B,OAAO,CAAC,CAAA,CAAE,GAAGA,OAAO,CAAC,CAAA,CAAE,GAAG,GAAE,EAAGC,OAAO,CAAC,CAAA,CAAA;IAE7D,OAAOjC,MAAAA;AACT;;;;"}
@@ -1,5 +1,5 @@
1
1
  import assert from 'node:assert';
2
- import { isEqual } from 'lodash/fp';
2
+ import { isEqual } from 'lodash';
3
3
  import { register } from 'esbuild-register/dist/node';
4
4
  import { createJSONTransformAPI } from '../../json/transform-api.mjs';
5
5
  import { readJSON, saveJSON } from '../../json/file.mjs';
@@ -38,7 +38,7 @@ const transformJSON = async (codemodPath, paths, config)=>{
38
38
  '.ts'
39
39
  ],
40
40
  hookIgnoreNodeModules: false,
41
- hookMatcher: isEqual(codemodPath)
41
+ hookMatcher: (value)=>isEqual(codemodPath, value)
42
42
  };
43
43
  const { unregister } = register(esbuildOptions);
44
44
  const module = require(codemodPath);
@@ -1 +1 @@
1
- {"version":3,"file":"transform.mjs","sources":["../../../../../src/modules/runner/json/transform.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-var-requires */\n\nimport assert from 'node:assert';\nimport { isEqual } from 'lodash/fp';\nimport { register } from 'esbuild-register/dist/node';\n\nimport { createJSONTransformAPI, readJSON, saveJSON } from '../../json';\n\nimport type { Report } from '../../report';\n\nimport type { JSONRunnerConfiguration, JSONSourceFile, JSONTransformParams } from './types';\n\nexport const transformJSON = async (\n codemodPath: string,\n paths: string[],\n config: JSONRunnerConfiguration\n): Promise<Report.Report> => {\n const { dry } = config;\n const startTime = process.hrtime();\n\n const report: Report.Report = {\n ok: 0,\n nochange: 0,\n skip: 0,\n error: 0,\n timeElapsed: '',\n stats: {},\n };\n\n /**\n * Why do we need to include node_modules (hookIgnoreNodeModules) and specify a matcher (hookMatcher) to esbuild?\n *\n * When using tools like npx or dlx, the execution context is different from when running the program in a local\n * project. npx and dlx run the commands in a temporary installation, which is isolated from local project files.\n *\n * When hookIgnoreNodeModules is not specified (or set to true), esbuild-register instructs\n * Pirates (https://github.com/danez/pirates) to not transpile any files that come from node_modules.\n *\n * Now, when using npx or dlx to run a script, its location can be seen as \"external\" because it's not part of\n * the temporary environment where npx or dlx execute. Therefore, it's considered to be part of node_modules.\n *\n * Due to this, if hookIgnoreNodeModules is set to true or left unspecified,\n * esbuild-register won't try to compile them upon require.\n *\n * hookMatcher is added to make sure we're not matching anything else than our codemod in external directories.\n */\n const esbuildOptions = {\n extensions: ['.js', '.mjs', '.ts'],\n hookIgnoreNodeModules: false,\n hookMatcher: isEqual(codemodPath),\n };\n const { unregister } = register(esbuildOptions);\n\n const module = require(codemodPath);\n\n unregister();\n\n const codemod = typeof module.default === 'function' ? module.default : module;\n\n assert(typeof codemod === 'function', `Codemod must be a function. Found ${typeof codemod}`);\n\n for (const path of paths) {\n try {\n const json = await readJSON(path);\n\n // Make sure the JSON value is a JSON object\n assert(typeof json === 'object' && !Array.isArray(json) && json !== null);\n\n // TODO: Optimize the API to limit parse/stringify operations\n const file: JSONSourceFile = { path, json };\n const params: JSONTransformParams = { cwd: config.cwd, json: createJSONTransformAPI };\n\n const out = await codemod(file, params);\n\n if (out === undefined) {\n report.error += 1;\n }\n // If the json object has modifications\n else if (!isEqual(json, out)) {\n if (!dry) {\n await saveJSON(path, out);\n }\n report.ok += 1;\n }\n // No changes\n else {\n report.nochange += 1;\n }\n } catch {\n report.error += 1;\n }\n }\n\n const endTime = process.hrtime(startTime);\n report.timeElapsed = (endTime[0] + endTime[1] / 1e9).toFixed(3);\n\n return report;\n};\n"],"names":["transformJSON","codemodPath","paths","config","dry","startTime","process","hrtime","report","ok","nochange","skip","error","timeElapsed","stats","esbuildOptions","extensions","hookIgnoreNodeModules","hookMatcher","isEqual","unregister","register","module","require","codemod","default","assert","path","json","readJSON","Array","isArray","file","params","cwd","createJSONTransformAPI","out","undefined","saveJSON","endTime","toFixed"],"mappings":";;;;;;AAYO,MAAMA,aAAAA,GAAgB,OAC3BC,WAAAA,EACAC,KAAAA,EACAC,MAAAA,GAAAA;IAEA,MAAM,EAAEC,GAAG,EAAE,GAAGD,MAAAA;IAChB,MAAME,SAAAA,GAAYC,QAAQC,MAAM,EAAA;AAEhC,IAAA,MAAMC,MAAAA,GAAwB;QAC5BC,EAAAA,EAAI,CAAA;QACJC,QAAAA,EAAU,CAAA;QACVC,IAAAA,EAAM,CAAA;QACNC,KAAAA,EAAO,CAAA;QACPC,WAAAA,EAAa,EAAA;AACbC,QAAAA,KAAAA,EAAO;AACT,KAAA;AAEA;;;;;;;;;;;;;;;;AAgBC,MACD,MAAMC,cAAAA,GAAiB;QACrBC,UAAAA,EAAY;AAAC,YAAA,KAAA;AAAO,YAAA,MAAA;AAAQ,YAAA;AAAM,SAAA;QAClCC,qBAAAA,EAAuB,KAAA;AACvBC,QAAAA,WAAAA,EAAaC,OAAAA,CAAQlB,WAAAA;AACvB,KAAA;AACA,IAAA,MAAM,EAAEmB,UAAU,EAAE,GAAGC,QAAAA,CAASN,cAAAA,CAAAA;AAEhC,IAAA,MAAMO,SAASC,OAAAA,CAAQtB,WAAAA,CAAAA;AAEvBmB,IAAAA,UAAAA,EAAAA;IAEA,MAAMI,OAAAA,GAAU,OAAOF,MAAAA,CAAOG,OAAO,KAAK,UAAA,GAAaH,MAAAA,CAAOG,OAAO,GAAGH,MAAAA;AAExEI,IAAAA,MAAAA,CAAO,OAAOF,OAAAA,KAAY,UAAA,EAAY,CAAC,kCAAkC,EAAE,OAAOA,OAAAA,CAAAA,CAAS,CAAA;IAE3F,KAAK,MAAMG,QAAQzB,KAAAA,CAAO;QACxB,IAAI;YACF,MAAM0B,IAAAA,GAAO,MAAMC,QAAAA,CAASF,IAAAA,CAAAA;;YAG5BD,MAAAA,CAAO,OAAOE,SAAS,QAAA,IAAY,CAACE,MAAMC,OAAO,CAACH,SAASA,IAAAA,KAAS,IAAA,CAAA;;AAGpE,YAAA,MAAMI,IAAAA,GAAuB;AAAEL,gBAAAA,IAAAA;AAAMC,gBAAAA;AAAK,aAAA;AAC1C,YAAA,MAAMK,MAAAA,GAA8B;AAAEC,gBAAAA,GAAAA,EAAK/B,OAAO+B,GAAG;gBAAEN,IAAAA,EAAMO;AAAuB,aAAA;YAEpF,MAAMC,GAAAA,GAAM,MAAMZ,OAAAA,CAAQQ,IAAAA,EAAMC,MAAAA,CAAAA;AAEhC,YAAA,IAAIG,QAAQC,SAAAA,EAAW;AACrB7B,gBAAAA,MAAAA,CAAOI,KAAK,IAAI,CAAA;AAClB,YAAA,CAAA,MAEK,IAAI,CAACO,OAAAA,CAAQS,IAAAA,EAAMQ,GAAAA,CAAAA,EAAM;AAC5B,gBAAA,IAAI,CAAChC,GAAAA,EAAK;AACR,oBAAA,MAAMkC,SAASX,IAAAA,EAAMS,GAAAA,CAAAA;AACvB,gBAAA;AACA5B,gBAAAA,MAAAA,CAAOC,EAAE,IAAI,CAAA;YACf,CAAA,MAEK;AACHD,gBAAAA,MAAAA,CAAOE,QAAQ,IAAI,CAAA;AACrB,YAAA;AACF,QAAA,CAAA,CAAE,OAAM;AACNF,YAAAA,MAAAA,CAAOI,KAAK,IAAI,CAAA;AAClB,QAAA;AACF,IAAA;IAEA,MAAM2B,OAAAA,GAAUjC,OAAAA,CAAQC,MAAM,CAACF,SAAAA,CAAAA;AAC/BG,IAAAA,MAAAA,CAAOK,WAAW,GAAG,CAAC0B,OAAO,CAAC,CAAA,CAAE,GAAGA,OAAO,CAAC,CAAA,CAAE,GAAG,GAAE,EAAGC,OAAO,CAAC,CAAA,CAAA;IAE7D,OAAOhC,MAAAA;AACT;;;;"}
1
+ {"version":3,"file":"transform.mjs","sources":["../../../../../src/modules/runner/json/transform.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-var-requires */\n\nimport assert from 'node:assert';\nimport { isEqual } from 'lodash';\nimport { register } from 'esbuild-register/dist/node';\n\nimport { createJSONTransformAPI, readJSON, saveJSON } from '../../json';\n\nimport type { Report } from '../../report';\n\nimport type { JSONRunnerConfiguration, JSONSourceFile, JSONTransformParams } from './types';\n\nexport const transformJSON = async (\n codemodPath: string,\n paths: string[],\n config: JSONRunnerConfiguration\n): Promise<Report.Report> => {\n const { dry } = config;\n const startTime = process.hrtime();\n\n const report: Report.Report = {\n ok: 0,\n nochange: 0,\n skip: 0,\n error: 0,\n timeElapsed: '',\n stats: {},\n };\n\n /**\n * Why do we need to include node_modules (hookIgnoreNodeModules) and specify a matcher (hookMatcher) to esbuild?\n *\n * When using tools like npx or dlx, the execution context is different from when running the program in a local\n * project. npx and dlx run the commands in a temporary installation, which is isolated from local project files.\n *\n * When hookIgnoreNodeModules is not specified (or set to true), esbuild-register instructs\n * Pirates (https://github.com/danez/pirates) to not transpile any files that come from node_modules.\n *\n * Now, when using npx or dlx to run a script, its location can be seen as \"external\" because it's not part of\n * the temporary environment where npx or dlx execute. Therefore, it's considered to be part of node_modules.\n *\n * Due to this, if hookIgnoreNodeModules is set to true or left unspecified,\n * esbuild-register won't try to compile them upon require.\n *\n * hookMatcher is added to make sure we're not matching anything else than our codemod in external directories.\n */\n const esbuildOptions = {\n extensions: ['.js', '.mjs', '.ts'],\n hookIgnoreNodeModules: false,\n hookMatcher: (value: string) => isEqual(codemodPath, value),\n };\n const { unregister } = register(esbuildOptions);\n\n const module = require(codemodPath);\n\n unregister();\n\n const codemod = typeof module.default === 'function' ? module.default : module;\n\n assert(typeof codemod === 'function', `Codemod must be a function. Found ${typeof codemod}`);\n\n for (const path of paths) {\n try {\n const json = await readJSON(path);\n\n // Make sure the JSON value is a JSON object\n assert(typeof json === 'object' && !Array.isArray(json) && json !== null);\n\n // TODO: Optimize the API to limit parse/stringify operations\n const file: JSONSourceFile = { path, json };\n const params: JSONTransformParams = { cwd: config.cwd, json: createJSONTransformAPI };\n\n const out = await codemod(file, params);\n\n if (out === undefined) {\n report.error += 1;\n }\n // If the json object has modifications\n else if (!isEqual(json, out)) {\n if (!dry) {\n await saveJSON(path, out);\n }\n report.ok += 1;\n }\n // No changes\n else {\n report.nochange += 1;\n }\n } catch {\n report.error += 1;\n }\n }\n\n const endTime = process.hrtime(startTime);\n report.timeElapsed = (endTime[0] + endTime[1] / 1e9).toFixed(3);\n\n return report;\n};\n"],"names":["transformJSON","codemodPath","paths","config","dry","startTime","process","hrtime","report","ok","nochange","skip","error","timeElapsed","stats","esbuildOptions","extensions","hookIgnoreNodeModules","hookMatcher","value","isEqual","unregister","register","module","require","codemod","default","assert","path","json","readJSON","Array","isArray","file","params","cwd","createJSONTransformAPI","out","undefined","saveJSON","endTime","toFixed"],"mappings":";;;;;;AAYO,MAAMA,aAAAA,GAAgB,OAC3BC,WAAAA,EACAC,KAAAA,EACAC,MAAAA,GAAAA;IAEA,MAAM,EAAEC,GAAG,EAAE,GAAGD,MAAAA;IAChB,MAAME,SAAAA,GAAYC,QAAQC,MAAM,EAAA;AAEhC,IAAA,MAAMC,MAAAA,GAAwB;QAC5BC,EAAAA,EAAI,CAAA;QACJC,QAAAA,EAAU,CAAA;QACVC,IAAAA,EAAM,CAAA;QACNC,KAAAA,EAAO,CAAA;QACPC,WAAAA,EAAa,EAAA;AACbC,QAAAA,KAAAA,EAAO;AACT,KAAA;AAEA;;;;;;;;;;;;;;;;AAgBC,MACD,MAAMC,cAAAA,GAAiB;QACrBC,UAAAA,EAAY;AAAC,YAAA,KAAA;AAAO,YAAA,MAAA;AAAQ,YAAA;AAAM,SAAA;QAClCC,qBAAAA,EAAuB,KAAA;QACvBC,WAAAA,EAAa,CAACC,KAAAA,GAAkBC,OAAAA,CAAQnB,WAAAA,EAAakB,KAAAA;AACvD,KAAA;AACA,IAAA,MAAM,EAAEE,UAAU,EAAE,GAAGC,QAAAA,CAASP,cAAAA,CAAAA;AAEhC,IAAA,MAAMQ,SAASC,OAAAA,CAAQvB,WAAAA,CAAAA;AAEvBoB,IAAAA,UAAAA,EAAAA;IAEA,MAAMI,OAAAA,GAAU,OAAOF,MAAAA,CAAOG,OAAO,KAAK,UAAA,GAAaH,MAAAA,CAAOG,OAAO,GAAGH,MAAAA;AAExEI,IAAAA,MAAAA,CAAO,OAAOF,OAAAA,KAAY,UAAA,EAAY,CAAC,kCAAkC,EAAE,OAAOA,OAAAA,CAAAA,CAAS,CAAA;IAE3F,KAAK,MAAMG,QAAQ1B,KAAAA,CAAO;QACxB,IAAI;YACF,MAAM2B,IAAAA,GAAO,MAAMC,QAAAA,CAASF,IAAAA,CAAAA;;YAG5BD,MAAAA,CAAO,OAAOE,SAAS,QAAA,IAAY,CAACE,MAAMC,OAAO,CAACH,SAASA,IAAAA,KAAS,IAAA,CAAA;;AAGpE,YAAA,MAAMI,IAAAA,GAAuB;AAAEL,gBAAAA,IAAAA;AAAMC,gBAAAA;AAAK,aAAA;AAC1C,YAAA,MAAMK,MAAAA,GAA8B;AAAEC,gBAAAA,GAAAA,EAAKhC,OAAOgC,GAAG;gBAAEN,IAAAA,EAAMO;AAAuB,aAAA;YAEpF,MAAMC,GAAAA,GAAM,MAAMZ,OAAAA,CAAQQ,IAAAA,EAAMC,MAAAA,CAAAA;AAEhC,YAAA,IAAIG,QAAQC,SAAAA,EAAW;AACrB9B,gBAAAA,MAAAA,CAAOI,KAAK,IAAI,CAAA;AAClB,YAAA,CAAA,MAEK,IAAI,CAACQ,OAAAA,CAAQS,IAAAA,EAAMQ,GAAAA,CAAAA,EAAM;AAC5B,gBAAA,IAAI,CAACjC,GAAAA,EAAK;AACR,oBAAA,MAAMmC,SAASX,IAAAA,EAAMS,GAAAA,CAAAA;AACvB,gBAAA;AACA7B,gBAAAA,MAAAA,CAAOC,EAAE,IAAI,CAAA;YACf,CAAA,MAEK;AACHD,gBAAAA,MAAAA,CAAOE,QAAQ,IAAI,CAAA;AACrB,YAAA;AACF,QAAA,CAAA,CAAE,OAAM;AACNF,YAAAA,MAAAA,CAAOI,KAAK,IAAI,CAAA;AAClB,QAAA;AACF,IAAA;IAEA,MAAM4B,OAAAA,GAAUlC,OAAAA,CAAQC,MAAM,CAACF,SAAAA,CAAAA;AAC/BG,IAAAA,MAAAA,CAAOK,WAAW,GAAG,CAAC2B,OAAO,CAAC,CAAA,CAAE,GAAGA,OAAO,CAAC,CAAA,CAAE,GAAG,GAAE,EAAGC,OAAO,CAAC,CAAA,CAAA;IAE7D,OAAOjC,MAAAA;AACT;;;;"}
@@ -13,7 +13,7 @@ var semver = require('../version/semver.js');
13
13
  var range = require('../version/range.js');
14
14
  require('fast-glob');
15
15
  require('jscodeshift/src/Runner');
16
- require('lodash/fp');
16
+ require('lodash');
17
17
  require('esbuild-register/dist/node');
18
18
  var constants = require('../project/constants.js');
19
19
  var utils = require('../error/utils.js');
@@ -11,7 +11,7 @@ import { semVerFactory, isSemverInstance, isSemVerReleaseType, isValidSemVer } f
11
11
  import { rangeFromVersions } from '../version/range.mjs';
12
12
  import 'fast-glob';
13
13
  import 'jscodeshift/src/Runner';
14
- import 'lodash/fp';
14
+ import 'lodash';
15
15
  import 'esbuild-register/dist/node';
16
16
  import { SCOPED_STRAPI_PACKAGE_PREFIX } from '../project/constants.mjs';
17
17
  import { NPMCandidateNotFoundError, unknownToError } from '../error/utils.mjs';
@@ -9,8 +9,9 @@ var range = require('../../modules/version/range.js');
9
9
  var types = require('../../modules/version/types.js');
10
10
  require('fast-glob');
11
11
  require('jscodeshift/src/Runner');
12
- require('lodash/fp');
12
+ require('lodash');
13
13
  require('esbuild-register/dist/node');
14
+ require('@strapi/utils');
14
15
  require('../../modules/project/constants.js');
15
16
  var utils = require('../../modules/project/utils.js');
16
17
 
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../../../../src/tasks/codemods/utils.ts"],"sourcesContent":["import path from 'node:path';\n\nimport { isApplicationProject } from '../../modules/project';\nimport { Version, isSemverInstance, rangeFactory, isRangeInstance } from '../../modules/version';\n\nimport type { Project } from '../../modules/project';\n\nexport const resolvePath = (cwd?: string) => path.resolve(cwd ?? process.cwd());\n\nexport const getRangeFromTarget = (\n currentVersion: Version.SemVer,\n target: Version.ReleaseType | Version.LiteralSemVer\n) => {\n if (isSemverInstance(target)) {\n return rangeFactory(target);\n }\n\n const { major, minor, patch } = currentVersion;\n\n switch (target) {\n case Version.RELEASE_TYPES.Latest:\n throw new Error(\"Can't use <latest> to create a codemods range: not implemented\");\n case Version.RELEASE_TYPES.Major:\n return rangeFactory(`${major}`);\n case Version.RELEASE_TYPES.Minor:\n return rangeFactory(`${major}.${minor}`);\n case Version.RELEASE_TYPES.Patch:\n return rangeFactory(`${major}.${minor}.${patch}`);\n default:\n throw new Error(`Invalid target set: ${target}`);\n }\n};\n\nexport const findRangeFromTarget = (\n project: Project,\n target: Version.ReleaseType | Version.LiteralSemVer | Version.Range\n): Version.Range => {\n // If a range is manually defined, use it\n if (isRangeInstance(target)) {\n return target;\n }\n\n // If the current project is a Strapi application\n // Get the range from the given target\n if (isApplicationProject(project)) {\n return getRangeFromTarget(project.strapiVersion, target);\n }\n\n // Else, if the project is a Strapi plugin or anything else\n // Set the range to match any version\n return rangeFactory('*');\n};\n"],"names":["resolvePath","cwd","path","resolve","process","getRangeFromTarget","currentVersion","target","isSemverInstance","rangeFactory","major","minor","patch","Version","Latest","Error","Major","Minor","Patch","findRangeFromTarget","project","isRangeInstance","isApplicationProject","strapiVersion"],"mappings":";;;;;;;;;;;;;;;;;;;;AAOO,MAAMA,WAAAA,GAAc,CAACC,GAAAA,GAAiBC,qBAAAA,CAAKC,OAAO,CAACF,GAAAA,IAAOG,OAAAA,CAAQH,GAAG,EAAA;AAErE,MAAMI,kBAAAA,GAAqB,CAChCC,cAAAA,EACAC,MAAAA,GAAAA;AAEA,IAAA,IAAIC,wBAAiBD,MAAAA,CAAAA,EAAS;AAC5B,QAAA,OAAOE,kBAAAA,CAAaF,MAAAA,CAAAA;AACtB,IAAA;AAEA,IAAA,MAAM,EAAEG,KAAK,EAAEC,KAAK,EAAEC,KAAK,EAAE,GAAGN,cAAAA;IAEhC,OAAQC,MAAAA;QACN,KAAKM,mBAAqB,CAACC,MAAM;AAC/B,YAAA,MAAM,IAAIC,KAAAA,CAAM,gEAAA,CAAA;QAClB,KAAKF,mBAAqB,CAACG,KAAK;YAC9B,OAAOP,kBAAAA,CAAa,GAAGC,KAAAA,CAAAA,CAAO,CAAA;QAChC,KAAKG,mBAAqB,CAACI,KAAK;AAC9B,YAAA,OAAOR,kBAAAA,CAAa,CAAA,EAAGC,KAAAA,CAAM,CAAC,EAAEC,KAAAA,CAAAA,CAAO,CAAA;QACzC,KAAKE,mBAAqB,CAACK,KAAK;YAC9B,OAAOT,kBAAAA,CAAa,GAAGC,KAAAA,CAAM,CAAC,EAAEC,KAAAA,CAAM,CAAC,EAAEC,KAAAA,CAAAA,CAAO,CAAA;AAClD,QAAA;AACE,YAAA,MAAM,IAAIG,KAAAA,CAAM,CAAC,oBAAoB,EAAER,MAAAA,CAAAA,CAAQ,CAAA;AACnD;AACF;AAEO,MAAMY,mBAAAA,GAAsB,CACjCC,OAAAA,EACAb,MAAAA,GAAAA;;AAGA,IAAA,IAAIc,sBAAgBd,MAAAA,CAAAA,EAAS;QAC3B,OAAOA,MAAAA;AACT,IAAA;;;AAIA,IAAA,IAAIe,2BAAqBF,OAAAA,CAAAA,EAAU;QACjC,OAAOf,kBAAAA,CAAmBe,OAAAA,CAAQG,aAAa,EAAEhB,MAAAA,CAAAA;AACnD,IAAA;;;AAIA,IAAA,OAAOE,kBAAAA,CAAa,GAAA,CAAA;AACtB;;;;;;"}
1
+ {"version":3,"file":"utils.js","sources":["../../../../src/tasks/codemods/utils.ts"],"sourcesContent":["import path from 'node:path';\n\nimport { isApplicationProject } from '../../modules/project';\nimport { Version, isSemverInstance, rangeFactory, isRangeInstance } from '../../modules/version';\n\nimport type { Project } from '../../modules/project';\n\nexport const resolvePath = (cwd?: string) => path.resolve(cwd ?? process.cwd());\n\nexport const getRangeFromTarget = (\n currentVersion: Version.SemVer,\n target: Version.ReleaseType | Version.LiteralSemVer\n) => {\n if (isSemverInstance(target)) {\n return rangeFactory(target);\n }\n\n const { major, minor, patch } = currentVersion;\n\n switch (target) {\n case Version.RELEASE_TYPES.Latest:\n throw new Error(\"Can't use <latest> to create a codemods range: not implemented\");\n case Version.RELEASE_TYPES.Major:\n return rangeFactory(`${major}`);\n case Version.RELEASE_TYPES.Minor:\n return rangeFactory(`${major}.${minor}`);\n case Version.RELEASE_TYPES.Patch:\n return rangeFactory(`${major}.${minor}.${patch}`);\n default:\n throw new Error(`Invalid target set: ${target}`);\n }\n};\n\nexport const findRangeFromTarget = (\n project: Project,\n target: Version.ReleaseType | Version.LiteralSemVer | Version.Range\n): Version.Range => {\n // If a range is manually defined, use it\n if (isRangeInstance(target)) {\n return target;\n }\n\n // If the current project is a Strapi application\n // Get the range from the given target\n if (isApplicationProject(project)) {\n return getRangeFromTarget(project.strapiVersion, target);\n }\n\n // Else, if the project is a Strapi plugin or anything else\n // Set the range to match any version\n return rangeFactory('*');\n};\n"],"names":["resolvePath","cwd","path","resolve","process","getRangeFromTarget","currentVersion","target","isSemverInstance","rangeFactory","major","minor","patch","Version","Latest","Error","Major","Minor","Patch","findRangeFromTarget","project","isRangeInstance","isApplicationProject","strapiVersion"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAOO,MAAMA,WAAAA,GAAc,CAACC,GAAAA,GAAiBC,qBAAAA,CAAKC,OAAO,CAACF,GAAAA,IAAOG,OAAAA,CAAQH,GAAG,EAAA;AAErE,MAAMI,kBAAAA,GAAqB,CAChCC,cAAAA,EACAC,MAAAA,GAAAA;AAEA,IAAA,IAAIC,wBAAiBD,MAAAA,CAAAA,EAAS;AAC5B,QAAA,OAAOE,kBAAAA,CAAaF,MAAAA,CAAAA;AACtB,IAAA;AAEA,IAAA,MAAM,EAAEG,KAAK,EAAEC,KAAK,EAAEC,KAAK,EAAE,GAAGN,cAAAA;IAEhC,OAAQC,MAAAA;QACN,KAAKM,mBAAqB,CAACC,MAAM;AAC/B,YAAA,MAAM,IAAIC,KAAAA,CAAM,gEAAA,CAAA;QAClB,KAAKF,mBAAqB,CAACG,KAAK;YAC9B,OAAOP,kBAAAA,CAAa,GAAGC,KAAAA,CAAAA,CAAO,CAAA;QAChC,KAAKG,mBAAqB,CAACI,KAAK;AAC9B,YAAA,OAAOR,kBAAAA,CAAa,CAAA,EAAGC,KAAAA,CAAM,CAAC,EAAEC,KAAAA,CAAAA,CAAO,CAAA;QACzC,KAAKE,mBAAqB,CAACK,KAAK;YAC9B,OAAOT,kBAAAA,CAAa,GAAGC,KAAAA,CAAM,CAAC,EAAEC,KAAAA,CAAM,CAAC,EAAEC,KAAAA,CAAAA,CAAO,CAAA;AAClD,QAAA;AACE,YAAA,MAAM,IAAIG,KAAAA,CAAM,CAAC,oBAAoB,EAAER,MAAAA,CAAAA,CAAQ,CAAA;AACnD;AACF;AAEO,MAAMY,mBAAAA,GAAsB,CACjCC,OAAAA,EACAb,MAAAA,GAAAA;;AAGA,IAAA,IAAIc,sBAAgBd,MAAAA,CAAAA,EAAS;QAC3B,OAAOA,MAAAA;AACT,IAAA;;;AAIA,IAAA,IAAIe,2BAAqBF,OAAAA,CAAAA,EAAU;QACjC,OAAOf,kBAAAA,CAAmBe,OAAAA,CAAQG,aAAa,EAAEhB,MAAAA,CAAAA;AACnD,IAAA;;;AAIA,IAAA,OAAOE,kBAAAA,CAAa,GAAA,CAAA;AACtB;;;;;;"}
@@ -7,8 +7,9 @@ import { isRangeInstance, rangeFactory } from '../../modules/version/range.mjs';
7
7
  import { RELEASE_TYPES } from '../../modules/version/types.mjs';
8
8
  import 'fast-glob';
9
9
  import 'jscodeshift/src/Runner';
10
- import 'lodash/fp';
10
+ import 'lodash';
11
11
  import 'esbuild-register/dist/node';
12
+ import '@strapi/utils';
12
13
  import '../../modules/project/constants.mjs';
13
14
  import { isApplicationProject } from '../../modules/project/utils.mjs';
14
15
 
@@ -1 +1 @@
1
- {"version":3,"file":"utils.mjs","sources":["../../../../src/tasks/codemods/utils.ts"],"sourcesContent":["import path from 'node:path';\n\nimport { isApplicationProject } from '../../modules/project';\nimport { Version, isSemverInstance, rangeFactory, isRangeInstance } from '../../modules/version';\n\nimport type { Project } from '../../modules/project';\n\nexport const resolvePath = (cwd?: string) => path.resolve(cwd ?? process.cwd());\n\nexport const getRangeFromTarget = (\n currentVersion: Version.SemVer,\n target: Version.ReleaseType | Version.LiteralSemVer\n) => {\n if (isSemverInstance(target)) {\n return rangeFactory(target);\n }\n\n const { major, minor, patch } = currentVersion;\n\n switch (target) {\n case Version.RELEASE_TYPES.Latest:\n throw new Error(\"Can't use <latest> to create a codemods range: not implemented\");\n case Version.RELEASE_TYPES.Major:\n return rangeFactory(`${major}`);\n case Version.RELEASE_TYPES.Minor:\n return rangeFactory(`${major}.${minor}`);\n case Version.RELEASE_TYPES.Patch:\n return rangeFactory(`${major}.${minor}.${patch}`);\n default:\n throw new Error(`Invalid target set: ${target}`);\n }\n};\n\nexport const findRangeFromTarget = (\n project: Project,\n target: Version.ReleaseType | Version.LiteralSemVer | Version.Range\n): Version.Range => {\n // If a range is manually defined, use it\n if (isRangeInstance(target)) {\n return target;\n }\n\n // If the current project is a Strapi application\n // Get the range from the given target\n if (isApplicationProject(project)) {\n return getRangeFromTarget(project.strapiVersion, target);\n }\n\n // Else, if the project is a Strapi plugin or anything else\n // Set the range to match any version\n return rangeFactory('*');\n};\n"],"names":["resolvePath","cwd","path","resolve","process","getRangeFromTarget","currentVersion","target","isSemverInstance","rangeFactory","major","minor","patch","Version","Latest","Error","Major","Minor","Patch","findRangeFromTarget","project","isRangeInstance","isApplicationProject","strapiVersion"],"mappings":";;;;;;;;;;;;;;AAOO,MAAMA,WAAAA,GAAc,CAACC,GAAAA,GAAiBC,IAAAA,CAAKC,OAAO,CAACF,GAAAA,IAAOG,OAAAA,CAAQH,GAAG,EAAA;AAErE,MAAMI,kBAAAA,GAAqB,CAChCC,cAAAA,EACAC,MAAAA,GAAAA;AAEA,IAAA,IAAIC,iBAAiBD,MAAAA,CAAAA,EAAS;AAC5B,QAAA,OAAOE,YAAAA,CAAaF,MAAAA,CAAAA;AACtB,IAAA;AAEA,IAAA,MAAM,EAAEG,KAAK,EAAEC,KAAK,EAAEC,KAAK,EAAE,GAAGN,cAAAA;IAEhC,OAAQC,MAAAA;QACN,KAAKM,aAAqB,CAACC,MAAM;AAC/B,YAAA,MAAM,IAAIC,KAAAA,CAAM,gEAAA,CAAA;QAClB,KAAKF,aAAqB,CAACG,KAAK;YAC9B,OAAOP,YAAAA,CAAa,GAAGC,KAAAA,CAAAA,CAAO,CAAA;QAChC,KAAKG,aAAqB,CAACI,KAAK;AAC9B,YAAA,OAAOR,YAAAA,CAAa,CAAA,EAAGC,KAAAA,CAAM,CAAC,EAAEC,KAAAA,CAAAA,CAAO,CAAA;QACzC,KAAKE,aAAqB,CAACK,KAAK;YAC9B,OAAOT,YAAAA,CAAa,GAAGC,KAAAA,CAAM,CAAC,EAAEC,KAAAA,CAAM,CAAC,EAAEC,KAAAA,CAAAA,CAAO,CAAA;AAClD,QAAA;AACE,YAAA,MAAM,IAAIG,KAAAA,CAAM,CAAC,oBAAoB,EAAER,MAAAA,CAAAA,CAAQ,CAAA;AACnD;AACF;AAEO,MAAMY,mBAAAA,GAAsB,CACjCC,OAAAA,EACAb,MAAAA,GAAAA;;AAGA,IAAA,IAAIc,gBAAgBd,MAAAA,CAAAA,EAAS;QAC3B,OAAOA,MAAAA;AACT,IAAA;;;AAIA,IAAA,IAAIe,qBAAqBF,OAAAA,CAAAA,EAAU;QACjC,OAAOf,kBAAAA,CAAmBe,OAAAA,CAAQG,aAAa,EAAEhB,MAAAA,CAAAA;AACnD,IAAA;;;AAIA,IAAA,OAAOE,YAAAA,CAAa,GAAA,CAAA;AACtB;;;;"}
1
+ {"version":3,"file":"utils.mjs","sources":["../../../../src/tasks/codemods/utils.ts"],"sourcesContent":["import path from 'node:path';\n\nimport { isApplicationProject } from '../../modules/project';\nimport { Version, isSemverInstance, rangeFactory, isRangeInstance } from '../../modules/version';\n\nimport type { Project } from '../../modules/project';\n\nexport const resolvePath = (cwd?: string) => path.resolve(cwd ?? process.cwd());\n\nexport const getRangeFromTarget = (\n currentVersion: Version.SemVer,\n target: Version.ReleaseType | Version.LiteralSemVer\n) => {\n if (isSemverInstance(target)) {\n return rangeFactory(target);\n }\n\n const { major, minor, patch } = currentVersion;\n\n switch (target) {\n case Version.RELEASE_TYPES.Latest:\n throw new Error(\"Can't use <latest> to create a codemods range: not implemented\");\n case Version.RELEASE_TYPES.Major:\n return rangeFactory(`${major}`);\n case Version.RELEASE_TYPES.Minor:\n return rangeFactory(`${major}.${minor}`);\n case Version.RELEASE_TYPES.Patch:\n return rangeFactory(`${major}.${minor}.${patch}`);\n default:\n throw new Error(`Invalid target set: ${target}`);\n }\n};\n\nexport const findRangeFromTarget = (\n project: Project,\n target: Version.ReleaseType | Version.LiteralSemVer | Version.Range\n): Version.Range => {\n // If a range is manually defined, use it\n if (isRangeInstance(target)) {\n return target;\n }\n\n // If the current project is a Strapi application\n // Get the range from the given target\n if (isApplicationProject(project)) {\n return getRangeFromTarget(project.strapiVersion, target);\n }\n\n // Else, if the project is a Strapi plugin or anything else\n // Set the range to match any version\n return rangeFactory('*');\n};\n"],"names":["resolvePath","cwd","path","resolve","process","getRangeFromTarget","currentVersion","target","isSemverInstance","rangeFactory","major","minor","patch","Version","Latest","Error","Major","Minor","Patch","findRangeFromTarget","project","isRangeInstance","isApplicationProject","strapiVersion"],"mappings":";;;;;;;;;;;;;;;AAOO,MAAMA,WAAAA,GAAc,CAACC,GAAAA,GAAiBC,IAAAA,CAAKC,OAAO,CAACF,GAAAA,IAAOG,OAAAA,CAAQH,GAAG,EAAA;AAErE,MAAMI,kBAAAA,GAAqB,CAChCC,cAAAA,EACAC,MAAAA,GAAAA;AAEA,IAAA,IAAIC,iBAAiBD,MAAAA,CAAAA,EAAS;AAC5B,QAAA,OAAOE,YAAAA,CAAaF,MAAAA,CAAAA;AACtB,IAAA;AAEA,IAAA,MAAM,EAAEG,KAAK,EAAEC,KAAK,EAAEC,KAAK,EAAE,GAAGN,cAAAA;IAEhC,OAAQC,MAAAA;QACN,KAAKM,aAAqB,CAACC,MAAM;AAC/B,YAAA,MAAM,IAAIC,KAAAA,CAAM,gEAAA,CAAA;QAClB,KAAKF,aAAqB,CAACG,KAAK;YAC9B,OAAOP,YAAAA,CAAa,GAAGC,KAAAA,CAAAA,CAAO,CAAA;QAChC,KAAKG,aAAqB,CAACI,KAAK;AAC9B,YAAA,OAAOR,YAAAA,CAAa,CAAA,EAAGC,KAAAA,CAAM,CAAC,EAAEC,KAAAA,CAAAA,CAAO,CAAA;QACzC,KAAKE,aAAqB,CAACK,KAAK;YAC9B,OAAOT,YAAAA,CAAa,GAAGC,KAAAA,CAAM,CAAC,EAAEC,KAAAA,CAAM,CAAC,EAAEC,KAAAA,CAAAA,CAAO,CAAA;AAClD,QAAA;AACE,YAAA,MAAM,IAAIG,KAAAA,CAAM,CAAC,oBAAoB,EAAER,MAAAA,CAAAA,CAAQ,CAAA;AACnD;AACF;AAEO,MAAMY,mBAAAA,GAAsB,CACjCC,OAAAA,EACAb,MAAAA,GAAAA;;AAGA,IAAA,IAAIc,gBAAgBd,MAAAA,CAAAA,EAAS;QAC3B,OAAOA,MAAAA;AACT,IAAA;;;AAIA,IAAA,IAAIe,qBAAqBF,OAAAA,CAAAA,EAAU;QACjC,OAAOf,kBAAAA,CAAmBe,OAAAA,CAAQG,aAAa,EAAEhB,MAAAA,CAAAA;AACnD,IAAA;;;AAIA,IAAA,OAAOE,YAAAA,CAAa,GAAA,CAAA;AACtB;;;;"}
@@ -2,7 +2,8 @@
2
2
 
3
3
  var utils$1 = require('../../../modules/error/utils.js');
4
4
  var formats = require('../../../modules/format/formats.js');
5
- require('lodash/fp');
5
+ require('lodash');
6
+ require('@strapi/utils');
6
7
  var file = require('../../../modules/json/file.js');
7
8
  var strapiDependencies = require('../../../modules/project/strapi-dependencies.js');
8
9
  var utils = require('../../../modules/project/utils.js');
@@ -1 +1 @@
1
- {"version":3,"file":"pin-versions.js","sources":["../../../../../src/tasks/upgrade/prompts/pin-versions.ts"],"sourcesContent":["import { AbortedError } from '../../../modules/error';\nimport * as f from '../../../modules/format';\nimport { saveJSON } from '../../../modules/json';\nimport {\n findUnpinnedStrapiDependencies,\n getPackageDependencyRecords,\n getStrapiPinTargetVersion,\n pinStrapiDependencies,\n} from '../../../modules/project/strapi-dependencies';\nimport { assertAppProject } from '../../../modules/project/utils';\n\nimport type { Project } from '../../../modules/project';\nimport type { UpgradeOptions } from '../types';\n\n/**\n * Detects ranged @strapi/* dependencies and offers to pin them before upgrading.\n *\n * The upgrade tool matches and bumps only exact semver pins. Ranges (e.g. ^4.26.1)\n * make the current version ambiguous and can cause false \"already up-to-date\" errors.\n */\nexport const pinVersions = async (project: Project, options: UpgradeOptions) => {\n assertAppProject(project);\n\n const { dependencies, devDependencies } = getPackageDependencyRecords(project.packageJSON);\n\n const unpinned = findUnpinnedStrapiDependencies(dependencies, devDependencies);\n\n if (unpinned.length === 0) {\n return;\n }\n\n const pinTarget = getStrapiPinTargetVersion(project);\n const pinVersion = pinTarget.raw;\n\n const unpinnedList = unpinned\n .map(({ name, declaredVersion }) => `${name} (${f.highlight(declaredVersion)})`)\n .join(', ');\n\n options.logger.warn(\n [\n 'Found @strapi/* dependencies using version ranges instead of pinned versions:',\n unpinnedList,\n `(will pin to ${f.version(pinTarget)} before upgrading)`,\n ].join(' ')\n );\n\n const confirmed =\n typeof options.confirm === 'function'\n ? await options.confirm(\n `Pin all @strapi/* dependencies to ${f.version(pinTarget)} before upgrading?`\n )\n : true;\n\n if (!confirmed) {\n throw new AbortedError();\n }\n\n const updatedPackageJSON = pinStrapiDependencies(project.packageJSON, pinVersion, unpinned);\n\n if (options.dry) {\n project.applyPackageJSON(updatedPackageJSON);\n options.logger.warn('Pinned versions in memory only (dry mode).');\n return;\n }\n\n await saveJSON(project.packageJSONPath, updatedPackageJSON);\n project.refresh();\n};\n"],"names":["pinVersions","project","options","assertAppProject","dependencies","devDependencies","getPackageDependencyRecords","packageJSON","unpinned","findUnpinnedStrapiDependencies","length","pinTarget","getStrapiPinTargetVersion","pinVersion","raw","unpinnedList","map","name","declaredVersion","f","join","logger","warn","confirmed","confirm","AbortedError","updatedPackageJSON","pinStrapiDependencies","dry","applyPackageJSON","saveJSON","packageJSONPath","refresh"],"mappings":";;;;;;;;;AAcA;;;;;AAKC,IACM,MAAMA,WAAAA,GAAc,OAAOC,OAAAA,EAAkBC,OAAAA,GAAAA;IAClDC,sBAAAA,CAAiBF,OAAAA,CAAAA;IAEjB,MAAM,EAAEG,YAAY,EAAEC,eAAe,EAAE,GAAGC,8CAAAA,CAA4BL,QAAQM,WAAW,CAAA;IAEzF,MAAMC,QAAAA,GAAWC,kDAA+BL,YAAAA,EAAcC,eAAAA,CAAAA;IAE9D,IAAIG,QAAAA,CAASE,MAAM,KAAK,CAAA,EAAG;AACzB,QAAA;AACF,IAAA;AAEA,IAAA,MAAMC,YAAYC,4CAAAA,CAA0BX,OAAAA,CAAAA;IAC5C,MAAMY,UAAAA,GAAaF,UAAUG,GAAG;IAEhC,MAAMC,YAAAA,GAAeP,SAClBQ,GAAG,CAAC,CAAC,EAAEC,IAAI,EAAEC,eAAe,EAAE,GAAK,GAAGD,IAAAA,CAAK,EAAE,EAAEE,iBAAW,CAACD,iBAAiB,CAAC,CAAC,CAAA,CAC9EE,IAAI,CAAC,IAAA,CAAA;IAERlB,OAAAA,CAAQmB,MAAM,CAACC,IAAI,CACjB;AACE,QAAA,+EAAA;AACAP,QAAAA,YAAAA;AACA,QAAA,CAAC,aAAa,EAAEI,eAAS,CAACR,SAAAA,CAAAA,CAAW,kBAAkB;AACxD,KAAA,CAACS,IAAI,CAAC,GAAA,CAAA,CAAA;AAGT,IAAA,MAAMG,YACJ,OAAOrB,OAAAA,CAAQsB,OAAO,KAAK,UAAA,GACvB,MAAMtB,OAAAA,CAAQsB,OAAO,CACnB,CAAC,kCAAkC,EAAEL,eAAS,CAACR,SAAAA,CAAAA,CAAW,kBAAkB,CAAC,CAAA,GAE/E,IAAA;AAEN,IAAA,IAAI,CAACY,SAAAA,EAAW;AACd,QAAA,MAAM,IAAIE,oBAAAA,EAAAA;AACZ,IAAA;AAEA,IAAA,MAAMC,kBAAAA,GAAqBC,wCAAAA,CAAsB1B,OAAAA,CAAQM,WAAW,EAAEM,UAAAA,EAAYL,QAAAA,CAAAA;IAElF,IAAIN,OAAAA,CAAQ0B,GAAG,EAAE;AACf3B,QAAAA,OAAAA,CAAQ4B,gBAAgB,CAACH,kBAAAA,CAAAA;QACzBxB,OAAAA,CAAQmB,MAAM,CAACC,IAAI,CAAC,4CAAA,CAAA;AACpB,QAAA;AACF,IAAA;IAEA,MAAMQ,aAAAA,CAAS7B,OAAAA,CAAQ8B,eAAe,EAAEL,kBAAAA,CAAAA;AACxCzB,IAAAA,OAAAA,CAAQ+B,OAAO,EAAA;AACjB;;;;"}
1
+ {"version":3,"file":"pin-versions.js","sources":["../../../../../src/tasks/upgrade/prompts/pin-versions.ts"],"sourcesContent":["import { AbortedError } from '../../../modules/error';\nimport * as f from '../../../modules/format';\nimport { saveJSON } from '../../../modules/json';\nimport {\n findUnpinnedStrapiDependencies,\n getPackageDependencyRecords,\n getStrapiPinTargetVersion,\n pinStrapiDependencies,\n} from '../../../modules/project/strapi-dependencies';\nimport { assertAppProject } from '../../../modules/project/utils';\n\nimport type { Project } from '../../../modules/project';\nimport type { UpgradeOptions } from '../types';\n\n/**\n * Detects ranged @strapi/* dependencies and offers to pin them before upgrading.\n *\n * The upgrade tool matches and bumps only exact semver pins. Ranges (e.g. ^4.26.1)\n * make the current version ambiguous and can cause false \"already up-to-date\" errors.\n */\nexport const pinVersions = async (project: Project, options: UpgradeOptions) => {\n assertAppProject(project);\n\n const { dependencies, devDependencies } = getPackageDependencyRecords(project.packageJSON);\n\n const unpinned = findUnpinnedStrapiDependencies(dependencies, devDependencies);\n\n if (unpinned.length === 0) {\n return;\n }\n\n const pinTarget = getStrapiPinTargetVersion(project);\n const pinVersion = pinTarget.raw;\n\n const unpinnedList = unpinned\n .map(({ name, declaredVersion }) => `${name} (${f.highlight(declaredVersion)})`)\n .join(', ');\n\n options.logger.warn(\n [\n 'Found @strapi/* dependencies using version ranges instead of pinned versions:',\n unpinnedList,\n `(will pin to ${f.version(pinTarget)} before upgrading)`,\n ].join(' ')\n );\n\n const confirmed =\n typeof options.confirm === 'function'\n ? await options.confirm(\n `Pin all @strapi/* dependencies to ${f.version(pinTarget)} before upgrading?`\n )\n : true;\n\n if (!confirmed) {\n throw new AbortedError();\n }\n\n const updatedPackageJSON = pinStrapiDependencies(project.packageJSON, pinVersion, unpinned);\n\n if (options.dry) {\n project.applyPackageJSON(updatedPackageJSON);\n options.logger.warn('Pinned versions in memory only (dry mode).');\n return;\n }\n\n await saveJSON(project.packageJSONPath, updatedPackageJSON);\n project.refresh();\n};\n"],"names":["pinVersions","project","options","assertAppProject","dependencies","devDependencies","getPackageDependencyRecords","packageJSON","unpinned","findUnpinnedStrapiDependencies","length","pinTarget","getStrapiPinTargetVersion","pinVersion","raw","unpinnedList","map","name","declaredVersion","f","join","logger","warn","confirmed","confirm","AbortedError","updatedPackageJSON","pinStrapiDependencies","dry","applyPackageJSON","saveJSON","packageJSONPath","refresh"],"mappings":";;;;;;;;;;AAcA;;;;;AAKC,IACM,MAAMA,WAAAA,GAAc,OAAOC,OAAAA,EAAkBC,OAAAA,GAAAA;IAClDC,sBAAAA,CAAiBF,OAAAA,CAAAA;IAEjB,MAAM,EAAEG,YAAY,EAAEC,eAAe,EAAE,GAAGC,8CAAAA,CAA4BL,QAAQM,WAAW,CAAA;IAEzF,MAAMC,QAAAA,GAAWC,kDAA+BL,YAAAA,EAAcC,eAAAA,CAAAA;IAE9D,IAAIG,QAAAA,CAASE,MAAM,KAAK,CAAA,EAAG;AACzB,QAAA;AACF,IAAA;AAEA,IAAA,MAAMC,YAAYC,4CAAAA,CAA0BX,OAAAA,CAAAA;IAC5C,MAAMY,UAAAA,GAAaF,UAAUG,GAAG;IAEhC,MAAMC,YAAAA,GAAeP,SAClBQ,GAAG,CAAC,CAAC,EAAEC,IAAI,EAAEC,eAAe,EAAE,GAAK,GAAGD,IAAAA,CAAK,EAAE,EAAEE,iBAAW,CAACD,iBAAiB,CAAC,CAAC,CAAA,CAC9EE,IAAI,CAAC,IAAA,CAAA;IAERlB,OAAAA,CAAQmB,MAAM,CAACC,IAAI,CACjB;AACE,QAAA,+EAAA;AACAP,QAAAA,YAAAA;AACA,QAAA,CAAC,aAAa,EAAEI,eAAS,CAACR,SAAAA,CAAAA,CAAW,kBAAkB;AACxD,KAAA,CAACS,IAAI,CAAC,GAAA,CAAA,CAAA;AAGT,IAAA,MAAMG,YACJ,OAAOrB,OAAAA,CAAQsB,OAAO,KAAK,UAAA,GACvB,MAAMtB,OAAAA,CAAQsB,OAAO,CACnB,CAAC,kCAAkC,EAAEL,eAAS,CAACR,SAAAA,CAAAA,CAAW,kBAAkB,CAAC,CAAA,GAE/E,IAAA;AAEN,IAAA,IAAI,CAACY,SAAAA,EAAW;AACd,QAAA,MAAM,IAAIE,oBAAAA,EAAAA;AACZ,IAAA;AAEA,IAAA,MAAMC,kBAAAA,GAAqBC,wCAAAA,CAAsB1B,OAAAA,CAAQM,WAAW,EAAEM,UAAAA,EAAYL,QAAAA,CAAAA;IAElF,IAAIN,OAAAA,CAAQ0B,GAAG,EAAE;AACf3B,QAAAA,OAAAA,CAAQ4B,gBAAgB,CAACH,kBAAAA,CAAAA;QACzBxB,OAAAA,CAAQmB,MAAM,CAACC,IAAI,CAAC,4CAAA,CAAA;AACpB,QAAA;AACF,IAAA;IAEA,MAAMQ,aAAAA,CAAS7B,OAAAA,CAAQ8B,eAAe,EAAEL,kBAAAA,CAAAA;AACxCzB,IAAAA,OAAAA,CAAQ+B,OAAO,EAAA;AACjB;;;;"}
@@ -1,6 +1,7 @@
1
1
  import { AbortedError } from '../../../modules/error/utils.mjs';
2
2
  import { highlight, version } from '../../../modules/format/formats.mjs';
3
- import 'lodash/fp';
3
+ import 'lodash';
4
+ import '@strapi/utils';
4
5
  import { saveJSON } from '../../../modules/json/file.mjs';
5
6
  import { getPackageDependencyRecords, findUnpinnedStrapiDependencies, getStrapiPinTargetVersion, pinStrapiDependencies } from '../../../modules/project/strapi-dependencies.mjs';
6
7
  import { assertAppProject } from '../../../modules/project/utils.mjs';
@@ -1 +1 @@
1
- {"version":3,"file":"pin-versions.mjs","sources":["../../../../../src/tasks/upgrade/prompts/pin-versions.ts"],"sourcesContent":["import { AbortedError } from '../../../modules/error';\nimport * as f from '../../../modules/format';\nimport { saveJSON } from '../../../modules/json';\nimport {\n findUnpinnedStrapiDependencies,\n getPackageDependencyRecords,\n getStrapiPinTargetVersion,\n pinStrapiDependencies,\n} from '../../../modules/project/strapi-dependencies';\nimport { assertAppProject } from '../../../modules/project/utils';\n\nimport type { Project } from '../../../modules/project';\nimport type { UpgradeOptions } from '../types';\n\n/**\n * Detects ranged @strapi/* dependencies and offers to pin them before upgrading.\n *\n * The upgrade tool matches and bumps only exact semver pins. Ranges (e.g. ^4.26.1)\n * make the current version ambiguous and can cause false \"already up-to-date\" errors.\n */\nexport const pinVersions = async (project: Project, options: UpgradeOptions) => {\n assertAppProject(project);\n\n const { dependencies, devDependencies } = getPackageDependencyRecords(project.packageJSON);\n\n const unpinned = findUnpinnedStrapiDependencies(dependencies, devDependencies);\n\n if (unpinned.length === 0) {\n return;\n }\n\n const pinTarget = getStrapiPinTargetVersion(project);\n const pinVersion = pinTarget.raw;\n\n const unpinnedList = unpinned\n .map(({ name, declaredVersion }) => `${name} (${f.highlight(declaredVersion)})`)\n .join(', ');\n\n options.logger.warn(\n [\n 'Found @strapi/* dependencies using version ranges instead of pinned versions:',\n unpinnedList,\n `(will pin to ${f.version(pinTarget)} before upgrading)`,\n ].join(' ')\n );\n\n const confirmed =\n typeof options.confirm === 'function'\n ? await options.confirm(\n `Pin all @strapi/* dependencies to ${f.version(pinTarget)} before upgrading?`\n )\n : true;\n\n if (!confirmed) {\n throw new AbortedError();\n }\n\n const updatedPackageJSON = pinStrapiDependencies(project.packageJSON, pinVersion, unpinned);\n\n if (options.dry) {\n project.applyPackageJSON(updatedPackageJSON);\n options.logger.warn('Pinned versions in memory only (dry mode).');\n return;\n }\n\n await saveJSON(project.packageJSONPath, updatedPackageJSON);\n project.refresh();\n};\n"],"names":["pinVersions","project","options","assertAppProject","dependencies","devDependencies","getPackageDependencyRecords","packageJSON","unpinned","findUnpinnedStrapiDependencies","length","pinTarget","getStrapiPinTargetVersion","pinVersion","raw","unpinnedList","map","name","declaredVersion","f","join","logger","warn","confirmed","confirm","AbortedError","updatedPackageJSON","pinStrapiDependencies","dry","applyPackageJSON","saveJSON","packageJSONPath","refresh"],"mappings":";;;;;;;AAcA;;;;;AAKC,IACM,MAAMA,WAAAA,GAAc,OAAOC,OAAAA,EAAkBC,OAAAA,GAAAA;IAClDC,gBAAAA,CAAiBF,OAAAA,CAAAA;IAEjB,MAAM,EAAEG,YAAY,EAAEC,eAAe,EAAE,GAAGC,2BAAAA,CAA4BL,QAAQM,WAAW,CAAA;IAEzF,MAAMC,QAAAA,GAAWC,+BAA+BL,YAAAA,EAAcC,eAAAA,CAAAA;IAE9D,IAAIG,QAAAA,CAASE,MAAM,KAAK,CAAA,EAAG;AACzB,QAAA;AACF,IAAA;AAEA,IAAA,MAAMC,YAAYC,yBAAAA,CAA0BX,OAAAA,CAAAA;IAC5C,MAAMY,UAAAA,GAAaF,UAAUG,GAAG;IAEhC,MAAMC,YAAAA,GAAeP,SAClBQ,GAAG,CAAC,CAAC,EAAEC,IAAI,EAAEC,eAAe,EAAE,GAAK,GAAGD,IAAAA,CAAK,EAAE,EAAEE,SAAW,CAACD,iBAAiB,CAAC,CAAC,CAAA,CAC9EE,IAAI,CAAC,IAAA,CAAA;IAERlB,OAAAA,CAAQmB,MAAM,CAACC,IAAI,CACjB;AACE,QAAA,+EAAA;AACAP,QAAAA,YAAAA;AACA,QAAA,CAAC,aAAa,EAAEI,OAAS,CAACR,SAAAA,CAAAA,CAAW,kBAAkB;AACxD,KAAA,CAACS,IAAI,CAAC,GAAA,CAAA,CAAA;AAGT,IAAA,MAAMG,YACJ,OAAOrB,OAAAA,CAAQsB,OAAO,KAAK,UAAA,GACvB,MAAMtB,OAAAA,CAAQsB,OAAO,CACnB,CAAC,kCAAkC,EAAEL,OAAS,CAACR,SAAAA,CAAAA,CAAW,kBAAkB,CAAC,CAAA,GAE/E,IAAA;AAEN,IAAA,IAAI,CAACY,SAAAA,EAAW;AACd,QAAA,MAAM,IAAIE,YAAAA,EAAAA;AACZ,IAAA;AAEA,IAAA,MAAMC,kBAAAA,GAAqBC,qBAAAA,CAAsB1B,OAAAA,CAAQM,WAAW,EAAEM,UAAAA,EAAYL,QAAAA,CAAAA;IAElF,IAAIN,OAAAA,CAAQ0B,GAAG,EAAE;AACf3B,QAAAA,OAAAA,CAAQ4B,gBAAgB,CAACH,kBAAAA,CAAAA;QACzBxB,OAAAA,CAAQmB,MAAM,CAACC,IAAI,CAAC,4CAAA,CAAA;AACpB,QAAA;AACF,IAAA;IAEA,MAAMQ,QAAAA,CAAS7B,OAAAA,CAAQ8B,eAAe,EAAEL,kBAAAA,CAAAA;AACxCzB,IAAAA,OAAAA,CAAQ+B,OAAO,EAAA;AACjB;;;;"}
1
+ {"version":3,"file":"pin-versions.mjs","sources":["../../../../../src/tasks/upgrade/prompts/pin-versions.ts"],"sourcesContent":["import { AbortedError } from '../../../modules/error';\nimport * as f from '../../../modules/format';\nimport { saveJSON } from '../../../modules/json';\nimport {\n findUnpinnedStrapiDependencies,\n getPackageDependencyRecords,\n getStrapiPinTargetVersion,\n pinStrapiDependencies,\n} from '../../../modules/project/strapi-dependencies';\nimport { assertAppProject } from '../../../modules/project/utils';\n\nimport type { Project } from '../../../modules/project';\nimport type { UpgradeOptions } from '../types';\n\n/**\n * Detects ranged @strapi/* dependencies and offers to pin them before upgrading.\n *\n * The upgrade tool matches and bumps only exact semver pins. Ranges (e.g. ^4.26.1)\n * make the current version ambiguous and can cause false \"already up-to-date\" errors.\n */\nexport const pinVersions = async (project: Project, options: UpgradeOptions) => {\n assertAppProject(project);\n\n const { dependencies, devDependencies } = getPackageDependencyRecords(project.packageJSON);\n\n const unpinned = findUnpinnedStrapiDependencies(dependencies, devDependencies);\n\n if (unpinned.length === 0) {\n return;\n }\n\n const pinTarget = getStrapiPinTargetVersion(project);\n const pinVersion = pinTarget.raw;\n\n const unpinnedList = unpinned\n .map(({ name, declaredVersion }) => `${name} (${f.highlight(declaredVersion)})`)\n .join(', ');\n\n options.logger.warn(\n [\n 'Found @strapi/* dependencies using version ranges instead of pinned versions:',\n unpinnedList,\n `(will pin to ${f.version(pinTarget)} before upgrading)`,\n ].join(' ')\n );\n\n const confirmed =\n typeof options.confirm === 'function'\n ? await options.confirm(\n `Pin all @strapi/* dependencies to ${f.version(pinTarget)} before upgrading?`\n )\n : true;\n\n if (!confirmed) {\n throw new AbortedError();\n }\n\n const updatedPackageJSON = pinStrapiDependencies(project.packageJSON, pinVersion, unpinned);\n\n if (options.dry) {\n project.applyPackageJSON(updatedPackageJSON);\n options.logger.warn('Pinned versions in memory only (dry mode).');\n return;\n }\n\n await saveJSON(project.packageJSONPath, updatedPackageJSON);\n project.refresh();\n};\n"],"names":["pinVersions","project","options","assertAppProject","dependencies","devDependencies","getPackageDependencyRecords","packageJSON","unpinned","findUnpinnedStrapiDependencies","length","pinTarget","getStrapiPinTargetVersion","pinVersion","raw","unpinnedList","map","name","declaredVersion","f","join","logger","warn","confirmed","confirm","AbortedError","updatedPackageJSON","pinStrapiDependencies","dry","applyPackageJSON","saveJSON","packageJSONPath","refresh"],"mappings":";;;;;;;;AAcA;;;;;AAKC,IACM,MAAMA,WAAAA,GAAc,OAAOC,OAAAA,EAAkBC,OAAAA,GAAAA;IAClDC,gBAAAA,CAAiBF,OAAAA,CAAAA;IAEjB,MAAM,EAAEG,YAAY,EAAEC,eAAe,EAAE,GAAGC,2BAAAA,CAA4BL,QAAQM,WAAW,CAAA;IAEzF,MAAMC,QAAAA,GAAWC,+BAA+BL,YAAAA,EAAcC,eAAAA,CAAAA;IAE9D,IAAIG,QAAAA,CAASE,MAAM,KAAK,CAAA,EAAG;AACzB,QAAA;AACF,IAAA;AAEA,IAAA,MAAMC,YAAYC,yBAAAA,CAA0BX,OAAAA,CAAAA;IAC5C,MAAMY,UAAAA,GAAaF,UAAUG,GAAG;IAEhC,MAAMC,YAAAA,GAAeP,SAClBQ,GAAG,CAAC,CAAC,EAAEC,IAAI,EAAEC,eAAe,EAAE,GAAK,GAAGD,IAAAA,CAAK,EAAE,EAAEE,SAAW,CAACD,iBAAiB,CAAC,CAAC,CAAA,CAC9EE,IAAI,CAAC,IAAA,CAAA;IAERlB,OAAAA,CAAQmB,MAAM,CAACC,IAAI,CACjB;AACE,QAAA,+EAAA;AACAP,QAAAA,YAAAA;AACA,QAAA,CAAC,aAAa,EAAEI,OAAS,CAACR,SAAAA,CAAAA,CAAW,kBAAkB;AACxD,KAAA,CAACS,IAAI,CAAC,GAAA,CAAA,CAAA;AAGT,IAAA,MAAMG,YACJ,OAAOrB,OAAAA,CAAQsB,OAAO,KAAK,UAAA,GACvB,MAAMtB,OAAAA,CAAQsB,OAAO,CACnB,CAAC,kCAAkC,EAAEL,OAAS,CAACR,SAAAA,CAAAA,CAAW,kBAAkB,CAAC,CAAA,GAE/E,IAAA;AAEN,IAAA,IAAI,CAACY,SAAAA,EAAW;AACd,QAAA,MAAM,IAAIE,YAAAA,EAAAA;AACZ,IAAA;AAEA,IAAA,MAAMC,kBAAAA,GAAqBC,qBAAAA,CAAsB1B,OAAAA,CAAQM,WAAW,EAAEM,UAAAA,EAAYL,QAAAA,CAAAA;IAElF,IAAIN,OAAAA,CAAQ0B,GAAG,EAAE;AACf3B,QAAAA,OAAAA,CAAQ4B,gBAAgB,CAACH,kBAAAA,CAAAA;QACzBxB,OAAAA,CAAQmB,MAAM,CAACC,IAAI,CAAC,4CAAA,CAAA;AACpB,QAAA;AACF,IAAA;IAEA,MAAMQ,QAAAA,CAAS7B,OAAAA,CAAQ8B,eAAe,EAAEL,kBAAAA,CAAAA;AACxCzB,IAAAA,OAAAA,CAAQ+B,OAAO,EAAA;AACjB;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strapi/upgrade",
3
- "version": "5.55.1",
3
+ "version": "5.57.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.55.1",
68
+ "@strapi/utils": "5.57.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.28.1"
83
+ "undici": "6.29.0"
84
84
  },
85
85
  "devDependencies": {
86
- "@strapi/types": "5.55.1",
86
+ "@strapi/types": "5.57.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.55.1",
91
+ "eslint-config-custom": "5.57.0",
92
92
  "jest": "29.6.0",
93
93
  "rimraf": "6.1.3"
94
94
  },