@strapi/upgrade 5.48.1 → 5.50.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 (94) hide show
  1. package/dist/cli.js +6 -1
  2. package/dist/cli.js.map +1 -1
  3. package/dist/modules/codemod/codemod.d.ts.map +1 -1
  4. package/dist/modules/codemod-repository/repository.d.ts.map +1 -1
  5. package/dist/modules/codemod-runner/codemod-runner.d.ts.map +1 -1
  6. package/dist/modules/error/utils.d.ts.map +1 -1
  7. package/dist/modules/file-scanner/scanner.d.ts.map +1 -1
  8. package/dist/modules/format/formats.d.ts.map +1 -1
  9. package/dist/modules/json/file.d.ts.map +1 -1
  10. package/dist/modules/json/transform-api.d.ts.map +1 -1
  11. package/dist/modules/logger/logger.d.ts +0 -1
  12. package/dist/modules/logger/logger.d.ts.map +1 -1
  13. package/dist/modules/logger/types.d.ts +0 -1
  14. package/dist/modules/logger/types.d.ts.map +1 -1
  15. package/dist/modules/npm/package.d.ts.map +1 -1
  16. package/dist/modules/project/project.d.ts.map +1 -1
  17. package/dist/modules/project/utils.d.ts.map +1 -1
  18. package/dist/modules/report/report.d.ts.map +1 -1
  19. package/dist/modules/requirement/requirement.d.ts.map +1 -1
  20. package/dist/modules/runner/code/code.d.ts.map +1 -1
  21. package/dist/modules/runner/json/json.d.ts.map +1 -1
  22. package/dist/modules/runner/json/transform.d.ts.map +1 -1
  23. package/dist/modules/upgrader/upgrader.d.ts.map +1 -1
  24. package/dist/modules/version/range.d.ts.map +1 -1
  25. package/dist/modules/version/semver.d.ts +1 -1
  26. package/dist/modules/version/semver.d.ts.map +1 -1
  27. package/dist/modules/version/types.d.ts +7 -6
  28. package/dist/modules/version/types.d.ts.map +1 -1
  29. package/dist/package.json.js +1 -1
  30. package/dist/package.json.mjs +1 -1
  31. package/dist/src/cli/commands/codemods.js +6 -2
  32. package/dist/src/cli/commands/codemods.js.map +1 -1
  33. package/dist/src/cli/commands/codemods.mjs +2 -2
  34. package/dist/src/cli/commands/codemods.mjs.map +1 -1
  35. package/dist/src/cli/commands/upgrade.js +9 -5
  36. package/dist/src/cli/commands/upgrade.js.map +1 -1
  37. package/dist/src/cli/commands/upgrade.mjs +5 -5
  38. package/dist/src/cli/commands/upgrade.mjs.map +1 -1
  39. package/dist/src/cli/errors.js +5 -1
  40. package/dist/src/cli/errors.js.map +1 -1
  41. package/dist/src/modules/codemod/codemod.js +5 -1
  42. package/dist/src/modules/codemod/codemod.js.map +1 -1
  43. package/dist/src/modules/codemod-repository/constants.js +5 -1
  44. package/dist/src/modules/codemod-repository/constants.js.map +1 -1
  45. package/dist/src/modules/codemod-repository/repository.js +18 -11
  46. package/dist/src/modules/codemod-repository/repository.js.map +1 -1
  47. package/dist/src/modules/file-scanner/scanner.js +7 -2
  48. package/dist/src/modules/file-scanner/scanner.js.map +1 -1
  49. package/dist/src/modules/format/formats.js +38 -33
  50. package/dist/src/modules/format/formats.js.map +1 -1
  51. package/dist/src/modules/json/file.js +6 -2
  52. package/dist/src/modules/json/file.js.map +1 -1
  53. package/dist/src/modules/logger/logger.js +8 -4
  54. package/dist/src/modules/logger/logger.js.map +1 -1
  55. package/dist/src/modules/npm/package.js +12 -6
  56. package/dist/src/modules/npm/package.js.map +1 -1
  57. package/dist/src/modules/project/project.js +19 -12
  58. package/dist/src/modules/project/project.js.map +1 -1
  59. package/dist/src/modules/runner/json/transform.js +6 -2
  60. package/dist/src/modules/runner/json/transform.js.map +1 -1
  61. package/dist/src/modules/upgrader/upgrader.js +13 -7
  62. package/dist/src/modules/upgrader/upgrader.js.map +1 -1
  63. package/dist/src/modules/version/range.js +11 -7
  64. package/dist/src/modules/version/range.js.map +1 -1
  65. package/dist/src/modules/version/range.mjs +5 -5
  66. package/dist/src/modules/version/range.mjs.map +1 -1
  67. package/dist/src/modules/version/semver.js +8 -4
  68. package/dist/src/modules/version/semver.js.map +1 -1
  69. package/dist/src/modules/version/semver.mjs +2 -2
  70. package/dist/src/modules/version/semver.mjs.map +1 -1
  71. package/dist/src/modules/version/types.js +7 -8
  72. package/dist/src/modules/version/types.js.map +1 -1
  73. package/dist/src/modules/version/types.mjs +7 -8
  74. package/dist/src/modules/version/types.mjs.map +1 -1
  75. package/dist/src/tasks/codemods/utils.js +9 -5
  76. package/dist/src/tasks/codemods/utils.js.map +1 -1
  77. package/dist/src/tasks/codemods/utils.mjs +5 -5
  78. package/dist/src/tasks/codemods/utils.mjs.map +1 -1
  79. package/dist/src/tasks/upgrade/prompts/latest.js +2 -2
  80. package/dist/src/tasks/upgrade/prompts/latest.js.map +1 -1
  81. package/dist/src/tasks/upgrade/prompts/latest.mjs +3 -3
  82. package/dist/src/tasks/upgrade/prompts/latest.mjs.map +1 -1
  83. package/dist/src/tasks/upgrade/requirements/common.js +7 -3
  84. package/dist/src/tasks/upgrade/requirements/common.js.map +1 -1
  85. package/dist/src/tasks/upgrade/upgrade.js +7 -3
  86. package/dist/src/tasks/upgrade/upgrade.js.map +1 -1
  87. package/dist/src/tasks/upgrade/upgrade.mjs +3 -3
  88. package/dist/src/tasks/upgrade/upgrade.mjs.map +1 -1
  89. package/dist/tasks/codemods/list-codemods.d.ts.map +1 -1
  90. package/dist/tasks/codemods/run-codemods.d.ts.map +1 -1
  91. package/dist/tasks/codemods/utils.d.ts.map +1 -1
  92. package/dist/tasks/upgrade/prompts/latest.d.ts.map +1 -1
  93. package/dist/tasks/upgrade/upgrade.d.ts.map +1 -1
  94. package/package.json +5 -5
@@ -10,10 +10,17 @@ var code = require('../runner/code/code.js');
10
10
  var json = require('../runner/json/json.js');
11
11
  var constants = require('./constants.js');
12
12
 
13
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
14
+
15
+ var path__default = /*#__PURE__*/_interopDefault(path);
16
+ var assert__default = /*#__PURE__*/_interopDefault(assert);
17
+ var fse__default = /*#__PURE__*/_interopDefault(fse);
18
+ var semver__default = /*#__PURE__*/_interopDefault(semver$1);
19
+
13
20
  class Project {
14
21
  getFilesByExtensions(extensions) {
15
22
  return this.files.filter((filePath)=>{
16
- const fileExtension = path.extname(filePath);
23
+ const fileExtension = path__default.default.extname(filePath);
17
24
  return extensions.includes(fileExtension);
18
25
  });
19
26
  }
@@ -64,13 +71,13 @@ class Project {
64
71
  ];
65
72
  }
66
73
  refreshPackageJSON() {
67
- const packageJSONPath = path.join(this.cwd, constants.PROJECT_PACKAGE_JSON);
74
+ const packageJSONPath = path__default.default.join(this.cwd, constants.PROJECT_PACKAGE_JSON);
68
75
  try {
69
- fse.accessSync(packageJSONPath);
76
+ fse__default.default.accessSync(packageJSONPath);
70
77
  } catch {
71
78
  throw new Error(`Could not find a ${constants.PROJECT_PACKAGE_JSON} file in ${this.cwd}`);
72
79
  }
73
- const packageJSONBuffer = fse.readFileSync(packageJSONPath);
80
+ const packageJSONBuffer = fse__default.default.readFileSync(packageJSONPath);
74
81
  this.packageJSONPath = packageJSONPath;
75
82
  this.packageJSON = JSON.parse(packageJSONBuffer.toString());
76
83
  }
@@ -79,7 +86,7 @@ class Project {
79
86
  this.files = scanner$1.scan(this.paths);
80
87
  }
81
88
  constructor(cwd, config){
82
- if (!fse.pathExistsSync(cwd)) {
89
+ if (!fse__default.default.pathExistsSync(cwd)) {
83
90
  throw new Error(`ENOENT: no such file or directory, access '${cwd}'`);
84
91
  }
85
92
  this.cwd = cwd;
@@ -120,7 +127,7 @@ class AppProject extends Project {
120
127
  if (version === undefined) {
121
128
  throw new Error(`No version of ${constants.STRAPI_DEPENDENCY_NAME} was found in ${projectName}. Are you in a valid Strapi project?`);
122
129
  }
123
- const isValidSemVer = semver.isLiteralSemVer(version) && semver$1.valid(version) === version;
130
+ const isValidSemVer = semver.isLiteralSemVer(version) && semver__default.default.valid(version) === version;
124
131
  // We return undefined only if a strapi/strapi version is found, but it's not semver compliant
125
132
  return isValidSemVer ? semver.semVerFactory(version) : undefined;
126
133
  }
@@ -135,7 +142,7 @@ class AppProject extends Project {
135
142
  ]
136
143
  });
137
144
  strapiPackageJSON = require(strapiPackageJSONPath);
138
- assert(typeof strapiPackageJSON === 'object');
145
+ assert__default.default(typeof strapiPackageJSON === 'object');
139
146
  } catch {
140
147
  throw new Error(`Cannot resolve module "${constants.STRAPI_DEPENDENCY_NAME}" from paths [${this.cwd}]`);
141
148
  }
@@ -153,7 +160,7 @@ class AppProject extends Project {
153
160
  }
154
161
  }
155
162
  const formatGlobCollectionPattern = (collection)=>{
156
- assert(collection.length > 0, 'Invalid pattern provided, the given collection needs at least 1 element');
163
+ assert__default.default(collection.length > 0, 'Invalid pattern provided, the given collection needs at least 1 element');
157
164
  return collection.length === 1 ? collection[0] : `{${collection}}`;
158
165
  };
159
166
  class PluginProject extends Project {
@@ -182,19 +189,19 @@ class PluginProject extends Project {
182
189
  }
183
190
  }
184
191
  const isPlugin = (cwd)=>{
185
- const packageJSONPath = path.join(cwd, constants.PROJECT_PACKAGE_JSON);
192
+ const packageJSONPath = path__default.default.join(cwd, constants.PROJECT_PACKAGE_JSON);
186
193
  try {
187
- fse.accessSync(packageJSONPath);
194
+ fse__default.default.accessSync(packageJSONPath);
188
195
  } catch {
189
196
  throw new Error(`Could not find a ${constants.PROJECT_PACKAGE_JSON} file in ${cwd}`);
190
197
  }
191
- const packageJSONBuffer = fse.readFileSync(packageJSONPath);
198
+ const packageJSONBuffer = fse__default.default.readFileSync(packageJSONPath);
192
199
  const packageJSON = JSON.parse(packageJSONBuffer.toString());
193
200
  return packageJSON?.strapi?.kind === 'plugin';
194
201
  };
195
202
  // TODO: make this async so we can use async file methods
196
203
  const projectFactory = (cwd)=>{
197
- fse.accessSync(cwd);
204
+ fse__default.default.accessSync(cwd);
198
205
  return isPlugin(cwd) ? new PluginProject(cwd) : new AppProject(cwd);
199
206
  };
200
207
 
@@ -1 +1 @@
1
- {"version":3,"file":"project.js","sources":["../../../../src/modules/project/project.ts"],"sourcesContent":["import path from 'node:path';\nimport assert from 'node:assert';\nimport fse from 'fs-extra';\nimport semver from 'semver';\n\nimport { semVerFactory, isLiteralSemVer, isValidSemVer } from '../version';\nimport { fileScannerFactory } from '../file-scanner';\nimport { codeRunnerFactory } from '../runner/code';\nimport { jsonRunnerFactory } from '../runner/json';\nimport * as constants from './constants';\n\nimport type { Version } from '../version';\nimport type { Codemod } from '../codemod';\nimport type { Report } from '../report';\nimport type {\n FileExtension,\n MinimalPackageJSON,\n ProjectConfig,\n ProjectType,\n RunCodemodsOptions,\n} from './types';\n\nexport class Project {\n public cwd: string;\n\n // The following properties are assigned during the .refresh() call in the constructor.\n\n public files!: string[];\n\n public packageJSONPath!: string;\n\n public packageJSON!: MinimalPackageJSON;\n\n public readonly paths: string[];\n\n constructor(cwd: string, config: ProjectConfig) {\n if (!fse.pathExistsSync(cwd)) {\n throw new Error(`ENOENT: no such file or directory, access '${cwd}'`);\n }\n\n this.cwd = cwd;\n this.paths = config.paths;\n\n this.refresh();\n }\n\n getFilesByExtensions(extensions: FileExtension[]) {\n return this.files.filter((filePath) => {\n const fileExtension = path.extname(filePath) as FileExtension;\n\n return extensions.includes(fileExtension);\n });\n }\n\n refresh() {\n this.refreshPackageJSON();\n this.refreshProjectFiles();\n\n return this;\n }\n\n async runCodemods(codemods: Codemod.List, options: RunCodemodsOptions) {\n const runners = this.createProjectCodemodsRunners(options.dry);\n const reports: Report.CodemodReport[] = [];\n\n for (const codemod of codemods) {\n for (const runner of runners) {\n if (runner.valid(codemod)) {\n const report = await runner.run(codemod);\n reports.push({ codemod, report });\n }\n }\n }\n\n return reports;\n }\n\n private createProjectCodemodsRunners(dry: boolean = false) {\n const jsonExtensions = constants.PROJECT_JSON_EXTENSIONS.map<FileExtension>((ext) => `.${ext}`);\n const codeExtensions = constants.PROJECT_CODE_EXTENSIONS.map<FileExtension>((ext) => `.${ext}`);\n\n const jsonFiles = this.getFilesByExtensions(jsonExtensions);\n const codeFiles = this.getFilesByExtensions(codeExtensions);\n\n const codeRunner = codeRunnerFactory(codeFiles, {\n dry,\n parser: 'ts',\n runInBand: true,\n babel: true,\n extensions: constants.PROJECT_CODE_EXTENSIONS.join(','),\n // Don't output any log coming from the runner\n print: false,\n silent: true,\n verbose: 0,\n });\n\n const jsonRunner = jsonRunnerFactory(jsonFiles, { dry, cwd: this.cwd });\n\n return [codeRunner, jsonRunner] as const;\n }\n\n private refreshPackageJSON(): void {\n const packageJSONPath = path.join(this.cwd, constants.PROJECT_PACKAGE_JSON);\n\n try {\n fse.accessSync(packageJSONPath);\n } catch {\n throw new Error(`Could not find a ${constants.PROJECT_PACKAGE_JSON} file in ${this.cwd}`);\n }\n\n const packageJSONBuffer = fse.readFileSync(packageJSONPath);\n\n this.packageJSONPath = packageJSONPath;\n this.packageJSON = JSON.parse(packageJSONBuffer.toString());\n }\n\n private refreshProjectFiles(): void {\n const scanner = fileScannerFactory(this.cwd);\n\n this.files = scanner.scan(this.paths);\n }\n}\n\nexport class AppProject extends Project {\n public strapiVersion!: Version.SemVer;\n\n readonly type = 'application' as const satisfies ProjectType;\n\n /**\n * Returns an array of allowed file paths for a Strapi application\n *\n * The resulting paths include app default files and the root package.json file.\n */\n private static get paths() {\n const allowedRootPaths = formatGlobCollectionPattern(constants.PROJECT_APP_ALLOWED_ROOT_PATHS);\n const allowedExtensions = formatGlobCollectionPattern(constants.PROJECT_ALLOWED_EXTENSIONS);\n\n return [\n // App default files\n `./${allowedRootPaths}/**/*.${allowedExtensions}`,\n `!./**/node_modules/**/*`,\n `!./**/dist/**/*`,\n // Root package.json file\n constants.PROJECT_PACKAGE_JSON,\n ];\n }\n\n constructor(cwd: string) {\n super(cwd, { paths: AppProject.paths });\n this.refreshStrapiVersion();\n }\n\n refresh() {\n super.refresh();\n this.refreshStrapiVersion();\n return this;\n }\n\n private refreshStrapiVersion(): void {\n this.strapiVersion =\n // First try to get the strapi version from the package.json dependencies\n this.findStrapiVersionFromProjectPackageJSON() ??\n // If the version found is not a valid SemVer, get the Strapi version from the installed package\n this.findLocallyInstalledStrapiVersion();\n }\n\n private findStrapiVersionFromProjectPackageJSON(): Version.SemVer | undefined {\n const projectName = this.packageJSON.name;\n const version = this.packageJSON.dependencies?.[constants.STRAPI_DEPENDENCY_NAME];\n\n if (version === undefined) {\n throw new Error(\n `No version of ${constants.STRAPI_DEPENDENCY_NAME} was found in ${projectName}. Are you in a valid Strapi project?`\n );\n }\n\n const isValidSemVer = isLiteralSemVer(version) && semver.valid(version) === version;\n\n // We return undefined only if a strapi/strapi version is found, but it's not semver compliant\n return isValidSemVer ? semVerFactory(version) : undefined;\n }\n\n private findLocallyInstalledStrapiVersion(): Version.SemVer {\n const packageSearchText = `${constants.STRAPI_DEPENDENCY_NAME}/package.json`;\n\n let strapiPackageJSONPath: string;\n let strapiPackageJSON: MinimalPackageJSON;\n\n try {\n strapiPackageJSONPath = require.resolve(packageSearchText, { paths: [this.cwd] });\n strapiPackageJSON = require(strapiPackageJSONPath);\n\n assert(typeof strapiPackageJSON === 'object');\n } catch {\n throw new Error(\n `Cannot resolve module \"${constants.STRAPI_DEPENDENCY_NAME}\" from paths [${this.cwd}]`\n );\n }\n\n const strapiVersion = strapiPackageJSON.version;\n\n if (!isValidSemVer(strapiVersion)) {\n throw new Error(\n `Invalid ${constants.STRAPI_DEPENDENCY_NAME} version found in ${strapiPackageJSONPath} (${strapiVersion})`\n );\n }\n\n return semVerFactory(strapiVersion);\n }\n}\n\nconst formatGlobCollectionPattern = (collection: string[]): string => {\n assert(\n collection.length > 0,\n 'Invalid pattern provided, the given collection needs at least 1 element'\n );\n\n return collection.length === 1 ? collection[0] : `{${collection}}`;\n};\n\nexport class PluginProject extends Project {\n readonly type = 'plugin' as const satisfies ProjectType;\n\n /**\n * Returns an array of allowed file paths for a Strapi plugin\n *\n * The resulting paths include plugin default files, the root package.json file, and plugin-specific files.\n */\n private static get paths() {\n const allowedRootPaths = formatGlobCollectionPattern(\n constants.PROJECT_PLUGIN_ALLOWED_ROOT_PATHS\n );\n const allowedExtensions = formatGlobCollectionPattern(constants.PROJECT_ALLOWED_EXTENSIONS);\n\n return [\n // Plugin default files\n `./${allowedRootPaths}/**/*.${allowedExtensions}`,\n `!./**/node_modules/**/*`,\n `!./**/dist/**/*`,\n // Root package.json file\n constants.PROJECT_PACKAGE_JSON,\n // Plugin root files\n ...constants.PROJECT_PLUGIN_ROOT_FILES,\n ];\n }\n\n constructor(cwd: string) {\n super(cwd, { paths: PluginProject.paths });\n }\n}\n\nconst isPlugin = (cwd: string) => {\n const packageJSONPath = path.join(cwd, constants.PROJECT_PACKAGE_JSON);\n\n try {\n fse.accessSync(packageJSONPath);\n } catch {\n throw new Error(`Could not find a ${constants.PROJECT_PACKAGE_JSON} file in ${cwd}`);\n }\n\n const packageJSONBuffer = fse.readFileSync(packageJSONPath);\n\n const packageJSON = JSON.parse(packageJSONBuffer.toString());\n\n return packageJSON?.strapi?.kind === 'plugin';\n};\n\n// TODO: make this async so we can use async file methods\nexport const projectFactory = (cwd: string) => {\n fse.accessSync(cwd);\n\n return isPlugin(cwd) ? new PluginProject(cwd) : new AppProject(cwd);\n};\n"],"names":["Project","getFilesByExtensions","extensions","files","filter","filePath","fileExtension","path","extname","includes","refresh","refreshPackageJSON","refreshProjectFiles","runCodemods","codemods","options","runners","createProjectCodemodsRunners","dry","reports","codemod","runner","valid","report","run","push","jsonExtensions","constants","map","ext","codeExtensions","jsonFiles","codeFiles","codeRunner","codeRunnerFactory","parser","runInBand","babel","join","print","silent","verbose","jsonRunner","jsonRunnerFactory","cwd","packageJSONPath","fse","accessSync","Error","packageJSONBuffer","readFileSync","packageJSON","JSON","parse","toString","scanner","fileScannerFactory","scan","paths","config","pathExistsSync","AppProject","allowedRootPaths","formatGlobCollectionPattern","allowedExtensions","refreshStrapiVersion","strapiVersion","findStrapiVersionFromProjectPackageJSON","findLocallyInstalledStrapiVersion","projectName","name","version","dependencies","undefined","isValidSemVer","isLiteralSemVer","semver","semVerFactory","packageSearchText","strapiPackageJSONPath","strapiPackageJSON","require","resolve","assert","type","collection","length","PluginProject","isPlugin","strapi","kind","projectFactory"],"mappings":";;;;;;;;;;;;AAsBO,MAAMA,OAAAA,CAAAA;AAwBXC,IAAAA,oBAAAA,CAAqBC,UAA2B,EAAE;AAChD,QAAA,OAAO,IAAI,CAACC,KAAK,CAACC,MAAM,CAAC,CAACC,QAAAA,GAAAA;YACxB,MAAMC,aAAAA,GAAgBC,IAAAA,CAAKC,OAAO,CAACH,QAAAA,CAAAA;YAEnC,OAAOH,UAAAA,CAAWO,QAAQ,CAACH,aAAAA,CAAAA;AAC7B,QAAA,CAAA,CAAA;AACF,IAAA;IAEAI,OAAAA,GAAU;AACR,QAAA,IAAI,CAACC,kBAAkB,EAAA;AACvB,QAAA,IAAI,CAACC,mBAAmB,EAAA;AAExB,QAAA,OAAO,IAAI;AACb,IAAA;AAEA,IAAA,MAAMC,WAAAA,CAAYC,QAAsB,EAAEC,OAA2B,EAAE;AACrE,QAAA,MAAMC,UAAU,IAAI,CAACC,4BAA4B,CAACF,QAAQG,GAAG,CAAA;AAC7D,QAAA,MAAMC,UAAkC,EAAE;QAE1C,KAAK,MAAMC,WAAWN,QAAAA,CAAU;YAC9B,KAAK,MAAMO,UAAUL,OAAAA,CAAS;gBAC5B,IAAIK,MAAAA,CAAOC,KAAK,CAACF,OAAAA,CAAAA,EAAU;AACzB,oBAAA,MAAMG,MAAAA,GAAS,MAAMF,MAAAA,CAAOG,GAAG,CAACJ,OAAAA,CAAAA;AAChCD,oBAAAA,OAAAA,CAAQM,IAAI,CAAC;AAAEL,wBAAAA,OAAAA;AAASG,wBAAAA;AAAO,qBAAA,CAAA;AACjC,gBAAA;AACF,YAAA;AACF,QAAA;QAEA,OAAOJ,OAAAA;AACT,IAAA;IAEQF,4BAAAA,CAA6BC,GAAAA,GAAe,KAAK,EAAE;QACzD,MAAMQ,cAAAA,GAAiBC,iCAAiC,CAACC,GAAG,CAAgB,CAACC,GAAAA,GAAQ,CAAC,CAAC,EAAEA,GAAAA,CAAAA,CAAK,CAAA;QAC9F,MAAMC,cAAAA,GAAiBH,iCAAiC,CAACC,GAAG,CAAgB,CAACC,GAAAA,GAAQ,CAAC,CAAC,EAAEA,GAAAA,CAAAA,CAAK,CAAA;AAE9F,QAAA,MAAME,SAAAA,GAAY,IAAI,CAAC9B,oBAAoB,CAACyB,cAAAA,CAAAA;AAC5C,QAAA,MAAMM,SAAAA,GAAY,IAAI,CAAC/B,oBAAoB,CAAC6B,cAAAA,CAAAA;QAE5C,MAAMG,UAAAA,GAAaC,uBAAkBF,SAAAA,EAAW;AAC9Cd,YAAAA,GAAAA;YACAiB,MAAAA,EAAQ,IAAA;YACRC,SAAAA,EAAW,IAAA;YACXC,KAAAA,EAAO,IAAA;AACPnC,YAAAA,UAAAA,EAAYyB,iCAAiC,CAACW,IAAI,CAAC,GAAA,CAAA;;YAEnDC,KAAAA,EAAO,KAAA;YACPC,MAAAA,EAAQ,IAAA;YACRC,OAAAA,EAAS;AACX,SAAA,CAAA;QAEA,MAAMC,UAAAA,GAAaC,uBAAkBZ,SAAAA,EAAW;AAAEb,YAAAA,GAAAA;YAAK0B,GAAAA,EAAK,IAAI,CAACA;AAAI,SAAA,CAAA;QAErE,OAAO;AAACX,YAAAA,UAAAA;AAAYS,YAAAA;AAAW,SAAA;AACjC,IAAA;IAEQ/B,kBAAAA,GAA2B;QACjC,MAAMkC,eAAAA,GAAkBtC,KAAK+B,IAAI,CAAC,IAAI,CAACM,GAAG,EAAEjB,8BAA8B,CAAA;QAE1E,IAAI;AACFmB,YAAAA,GAAAA,CAAIC,UAAU,CAACF,eAAAA,CAAAA;AACjB,QAAA,CAAA,CAAE,OAAM;AACN,YAAA,MAAM,IAAIG,KAAAA,CAAM,CAAC,iBAAiB,EAAErB,8BAA8B,CAAC,SAAS,EAAE,IAAI,CAACiB,GAAG,CAAA,CAAE,CAAA;AAC1F,QAAA;QAEA,MAAMK,iBAAAA,GAAoBH,GAAAA,CAAII,YAAY,CAACL,eAAAA,CAAAA;QAE3C,IAAI,CAACA,eAAe,GAAGA,eAAAA;AACvB,QAAA,IAAI,CAACM,WAAW,GAAGC,KAAKC,KAAK,CAACJ,kBAAkBK,QAAQ,EAAA,CAAA;AAC1D,IAAA;IAEQ1C,mBAAAA,GAA4B;AAClC,QAAA,MAAM2C,SAAAA,GAAUC,0BAAAA,CAAmB,IAAI,CAACZ,GAAG,CAAA;QAE3C,IAAI,CAACzC,KAAK,GAAGoD,SAAAA,CAAQE,IAAI,CAAC,IAAI,CAACC,KAAK,CAAA;AACtC,IAAA;IArFA,WAAA,CAAYd,GAAW,EAAEe,MAAqB,CAAE;AAC9C,QAAA,IAAI,CAACb,GAAAA,CAAIc,cAAc,CAAChB,GAAAA,CAAAA,EAAM;AAC5B,YAAA,MAAM,IAAII,KAAAA,CAAM,CAAC,2CAA2C,EAAEJ,GAAAA,CAAI,CAAC,CAAC,CAAA;AACtE,QAAA;QAEA,IAAI,CAACA,GAAG,GAAGA,GAAAA;AACX,QAAA,IAAI,CAACc,KAAK,GAAGC,MAAAA,CAAOD,KAAK;AAEzB,QAAA,IAAI,CAAChD,OAAO,EAAA;AACd,IAAA;AA6EF;AAEO,MAAMmD,UAAAA,SAAmB7D,OAAAA,CAAAA;AAK9B;;;;AAIC,MACD,WAAmB0D,KAAAA,GAAQ;QACzB,MAAMI,gBAAAA,GAAmBC,2BAAAA,CAA4BpC,wCAAwC,CAAA;QAC7F,MAAMqC,iBAAAA,GAAoBD,2BAAAA,CAA4BpC,oCAAoC,CAAA;QAE1F,OAAO;;AAEL,YAAA,CAAC,EAAE,EAAEmC,gBAAAA,CAAiB,MAAM,EAAEE,iBAAAA,CAAAA,CAAmB;AACjD,YAAA,CAAC,uBAAuB,CAAC;AACzB,YAAA,CAAC,eAAe,CAAC;;AAEjBrC,YAAAA;AACD,SAAA;AACH,IAAA;IAOAjB,OAAAA,GAAU;AACR,QAAA,KAAK,CAACA,OAAAA,EAAAA;AACN,QAAA,IAAI,CAACuD,oBAAoB,EAAA;AACzB,QAAA,OAAO,IAAI;AACb,IAAA;IAEQA,oBAAAA,GAA6B;QACnC,IAAI,CAACC,aAAa;QAEhB,IAAI,CAACC,uCAAuC,EAAA;AAE5C,QAAA,IAAI,CAACC,iCAAiC,EAAA;AAC1C,IAAA;IAEQD,uCAAAA,GAAsE;AAC5E,QAAA,MAAME,WAAAA,GAAc,IAAI,CAAClB,WAAW,CAACmB,IAAI;QACzC,MAAMC,OAAAA,GAAU,IAAI,CAACpB,WAAW,CAACqB,YAAY,GAAG7C,gCAAgC,CAAC;AAEjF,QAAA,IAAI4C,YAAYE,SAAAA,EAAW;AACzB,YAAA,MAAM,IAAIzB,KAAAA,CACR,CAAC,cAAc,EAAErB,gCAAgC,CAAC,cAAc,EAAE0C,WAAAA,CAAY,oCAAoC,CAAC,CAAA;AAEvH,QAAA;AAEA,QAAA,MAAMK,gBAAgBC,sBAAAA,CAAgBJ,OAAAA,CAAAA,IAAYK,QAAAA,CAAOtD,KAAK,CAACiD,OAAAA,CAAAA,KAAaA,OAAAA;;QAG5E,OAAOG,aAAAA,GAAgBG,qBAAcN,OAAAA,CAAAA,GAAWE,SAAAA;AAClD,IAAA;IAEQL,iCAAAA,GAAoD;AAC1D,QAAA,MAAMU,oBAAoB,CAAA,EAAGnD,gCAAgC,CAAC,aAAa,CAAC;QAE5E,IAAIoD,qBAAAA;QACJ,IAAIC,iBAAAA;QAEJ,IAAI;YACFD,qBAAAA,GAAwBE,OAAAA,CAAQC,OAAO,CAACJ,iBAAAA,EAAmB;gBAAEpB,KAAAA,EAAO;AAAC,oBAAA,IAAI,CAACd;AAAI;AAAC,aAAA,CAAA;AAC/EoC,YAAAA,iBAAAA,GAAoBC,OAAAA,CAAQF,qBAAAA,CAAAA;AAE5BI,YAAAA,MAAAA,CAAO,OAAOH,iBAAAA,KAAsB,QAAA,CAAA;AACtC,QAAA,CAAA,CAAE,OAAM;AACN,YAAA,MAAM,IAAIhC,KAAAA,CACR,CAAC,uBAAuB,EAAErB,gCAAgC,CAAC,cAAc,EAAE,IAAI,CAACiB,GAAG,CAAC,CAAC,CAAC,CAAA;AAE1F,QAAA;QAEA,MAAMsB,aAAAA,GAAgBc,kBAAkBT,OAAO;QAE/C,IAAI,CAACG,qBAAcR,aAAAA,CAAAA,EAAgB;AACjC,YAAA,MAAM,IAAIlB,KAAAA,CACR,CAAC,QAAQ,EAAErB,gCAAgC,CAAC,kBAAkB,EAAEoD,qBAAAA,CAAsB,EAAE,EAAEb,aAAAA,CAAc,CAAC,CAAC,CAAA;AAE9G,QAAA;AAEA,QAAA,OAAOW,oBAAAA,CAAcX,aAAAA,CAAAA;AACvB,IAAA;AA7DA,IAAA,WAAA,CAAYtB,GAAW,CAAE;AACvB,QAAA,KAAK,CAACA,GAAAA,EAAK;AAAEc,YAAAA,KAAAA,EAAOG,WAAWH;AAAM,SAAA,CAAA,EAAA,IAAA,CAtB9B0B,IAAAA,GAAO,aAAA;AAuBd,QAAA,IAAI,CAACnB,oBAAoB,EAAA;AAC3B,IAAA;AA2DF;AAEA,MAAMF,8BAA8B,CAACsB,UAAAA,GAAAA;IACnCF,MAAAA,CACEE,UAAAA,CAAWC,MAAM,GAAG,CAAA,EACpB,yEAAA,CAAA;AAGF,IAAA,OAAOD,UAAAA,CAAWC,MAAM,KAAK,CAAA,GAAID,UAAU,CAAC,CAAA,CAAE,GAAG,CAAC,CAAC,EAAEA,UAAAA,CAAW,CAAC,CAAC;AACpE,CAAA;AAEO,MAAME,aAAAA,SAAsBvF,OAAAA,CAAAA;AAGjC;;;;AAIC,MACD,WAAmB0D,KAAAA,GAAQ;QACzB,MAAMI,gBAAAA,GAAmBC,2BAAAA,CACvBpC,2CAA2C,CAAA;QAE7C,MAAMqC,iBAAAA,GAAoBD,2BAAAA,CAA4BpC,oCAAoC,CAAA;QAE1F,OAAO;;AAEL,YAAA,CAAC,EAAE,EAAEmC,gBAAAA,CAAiB,MAAM,EAAEE,iBAAAA,CAAAA,CAAmB;AACjD,YAAA,CAAC,uBAAuB,CAAC;AACzB,YAAA,CAAC,eAAe,CAAC;;AAEjBrC,YAAAA,8BAA8B;;AAE3BA,YAAAA,GAAAA;AACJ,SAAA;AACH,IAAA;AAEA,IAAA,WAAA,CAAYiB,GAAW,CAAE;AACvB,QAAA,KAAK,CAACA,GAAAA,EAAK;AAAEc,YAAAA,KAAAA,EAAO6B,cAAc7B;AAAM,SAAA,CAAA,EAAA,IAAA,CA1BjC0B,IAAAA,GAAO,QAAA;AA2BhB,IAAA;AACF;AAEA,MAAMI,WAAW,CAAC5C,GAAAA,GAAAA;AAChB,IAAA,MAAMC,kBAAkBtC,IAAAA,CAAK+B,IAAI,CAACM,GAAAA,EAAKjB,8BAA8B,CAAA;IAErE,IAAI;AACFmB,QAAAA,GAAAA,CAAIC,UAAU,CAACF,eAAAA,CAAAA;AACjB,IAAA,CAAA,CAAE,OAAM;QACN,MAAM,IAAIG,KAAAA,CAAM,CAAC,iBAAiB,EAAErB,8BAA8B,CAAC,SAAS,EAAEiB,GAAAA,CAAAA,CAAK,CAAA;AACrF,IAAA;IAEA,MAAMK,iBAAAA,GAAoBH,GAAAA,CAAII,YAAY,CAACL,eAAAA,CAAAA;AAE3C,IAAA,MAAMM,WAAAA,GAAcC,IAAAA,CAAKC,KAAK,CAACJ,kBAAkBK,QAAQ,EAAA,CAAA;IAEzD,OAAOH,WAAAA,EAAasC,QAAQC,IAAAA,KAAS,QAAA;AACvC,CAAA;AAEA;AACO,MAAMC,iBAAiB,CAAC/C,GAAAA,GAAAA;AAC7BE,IAAAA,GAAAA,CAAIC,UAAU,CAACH,GAAAA,CAAAA;AAEf,IAAA,OAAO4C,SAAS5C,GAAAA,CAAAA,GAAO,IAAI2C,aAAAA,CAAc3C,GAAAA,CAAAA,GAAO,IAAIiB,UAAAA,CAAWjB,GAAAA,CAAAA;AACjE;;;;;;;"}
1
+ {"version":3,"file":"project.js","sources":["../../../../src/modules/project/project.ts"],"sourcesContent":["import path from 'node:path';\nimport assert from 'node:assert';\nimport fse from 'fs-extra';\nimport semver from 'semver';\n\nimport { semVerFactory, isLiteralSemVer, isValidSemVer } from '../version';\nimport { fileScannerFactory } from '../file-scanner';\nimport { codeRunnerFactory } from '../runner/code';\nimport { jsonRunnerFactory } from '../runner/json';\nimport * as constants from './constants';\n\nimport type { Version } from '../version';\nimport type { Codemod } from '../codemod';\nimport type { Report } from '../report';\nimport type {\n FileExtension,\n MinimalPackageJSON,\n ProjectConfig,\n ProjectType,\n RunCodemodsOptions,\n} from './types';\n\nexport class Project {\n public cwd: string;\n\n // The following properties are assigned during the .refresh() call in the constructor.\n\n public files!: string[];\n\n public packageJSONPath!: string;\n\n public packageJSON!: MinimalPackageJSON;\n\n public readonly paths: string[];\n\n constructor(cwd: string, config: ProjectConfig) {\n if (!fse.pathExistsSync(cwd)) {\n throw new Error(`ENOENT: no such file or directory, access '${cwd}'`);\n }\n\n this.cwd = cwd;\n this.paths = config.paths;\n\n this.refresh();\n }\n\n getFilesByExtensions(extensions: FileExtension[]) {\n return this.files.filter((filePath) => {\n const fileExtension = path.extname(filePath) as FileExtension;\n\n return extensions.includes(fileExtension);\n });\n }\n\n refresh() {\n this.refreshPackageJSON();\n this.refreshProjectFiles();\n\n return this;\n }\n\n async runCodemods(codemods: Codemod.List, options: RunCodemodsOptions) {\n const runners = this.createProjectCodemodsRunners(options.dry);\n const reports: Report.CodemodReport[] = [];\n\n for (const codemod of codemods) {\n for (const runner of runners) {\n if (runner.valid(codemod)) {\n const report = await runner.run(codemod);\n reports.push({ codemod, report });\n }\n }\n }\n\n return reports;\n }\n\n private createProjectCodemodsRunners(dry: boolean = false) {\n const jsonExtensions = constants.PROJECT_JSON_EXTENSIONS.map<FileExtension>((ext) => `.${ext}`);\n const codeExtensions = constants.PROJECT_CODE_EXTENSIONS.map<FileExtension>((ext) => `.${ext}`);\n\n const jsonFiles = this.getFilesByExtensions(jsonExtensions);\n const codeFiles = this.getFilesByExtensions(codeExtensions);\n\n const codeRunner = codeRunnerFactory(codeFiles, {\n dry,\n parser: 'ts',\n runInBand: true,\n babel: true,\n extensions: constants.PROJECT_CODE_EXTENSIONS.join(','),\n // Don't output any log coming from the runner\n print: false,\n silent: true,\n verbose: 0,\n });\n\n const jsonRunner = jsonRunnerFactory(jsonFiles, { dry, cwd: this.cwd });\n\n return [codeRunner, jsonRunner] as const;\n }\n\n private refreshPackageJSON(): void {\n const packageJSONPath = path.join(this.cwd, constants.PROJECT_PACKAGE_JSON);\n\n try {\n fse.accessSync(packageJSONPath);\n } catch {\n throw new Error(`Could not find a ${constants.PROJECT_PACKAGE_JSON} file in ${this.cwd}`);\n }\n\n const packageJSONBuffer = fse.readFileSync(packageJSONPath);\n\n this.packageJSONPath = packageJSONPath;\n this.packageJSON = JSON.parse(packageJSONBuffer.toString());\n }\n\n private refreshProjectFiles(): void {\n const scanner = fileScannerFactory(this.cwd);\n\n this.files = scanner.scan(this.paths);\n }\n}\n\nexport class AppProject extends Project {\n public strapiVersion!: Version.SemVer;\n\n readonly type = 'application' as const satisfies ProjectType;\n\n /**\n * Returns an array of allowed file paths for a Strapi application\n *\n * The resulting paths include app default files and the root package.json file.\n */\n private static get paths() {\n const allowedRootPaths = formatGlobCollectionPattern(constants.PROJECT_APP_ALLOWED_ROOT_PATHS);\n const allowedExtensions = formatGlobCollectionPattern(constants.PROJECT_ALLOWED_EXTENSIONS);\n\n return [\n // App default files\n `./${allowedRootPaths}/**/*.${allowedExtensions}`,\n `!./**/node_modules/**/*`,\n `!./**/dist/**/*`,\n // Root package.json file\n constants.PROJECT_PACKAGE_JSON,\n ];\n }\n\n constructor(cwd: string) {\n super(cwd, { paths: AppProject.paths });\n this.refreshStrapiVersion();\n }\n\n refresh() {\n super.refresh();\n this.refreshStrapiVersion();\n return this;\n }\n\n private refreshStrapiVersion(): void {\n this.strapiVersion =\n // First try to get the strapi version from the package.json dependencies\n this.findStrapiVersionFromProjectPackageJSON() ??\n // If the version found is not a valid SemVer, get the Strapi version from the installed package\n this.findLocallyInstalledStrapiVersion();\n }\n\n private findStrapiVersionFromProjectPackageJSON(): Version.SemVer | undefined {\n const projectName = this.packageJSON.name;\n const version = this.packageJSON.dependencies?.[constants.STRAPI_DEPENDENCY_NAME];\n\n if (version === undefined) {\n throw new Error(\n `No version of ${constants.STRAPI_DEPENDENCY_NAME} was found in ${projectName}. Are you in a valid Strapi project?`\n );\n }\n\n const isValidSemVer = isLiteralSemVer(version) && semver.valid(version) === version;\n\n // We return undefined only if a strapi/strapi version is found, but it's not semver compliant\n return isValidSemVer ? semVerFactory(version) : undefined;\n }\n\n private findLocallyInstalledStrapiVersion(): Version.SemVer {\n const packageSearchText = `${constants.STRAPI_DEPENDENCY_NAME}/package.json`;\n\n let strapiPackageJSONPath: string;\n let strapiPackageJSON: MinimalPackageJSON;\n\n try {\n strapiPackageJSONPath = require.resolve(packageSearchText, { paths: [this.cwd] });\n strapiPackageJSON = require(strapiPackageJSONPath);\n\n assert(typeof strapiPackageJSON === 'object');\n } catch {\n throw new Error(\n `Cannot resolve module \"${constants.STRAPI_DEPENDENCY_NAME}\" from paths [${this.cwd}]`\n );\n }\n\n const strapiVersion = strapiPackageJSON.version;\n\n if (!isValidSemVer(strapiVersion)) {\n throw new Error(\n `Invalid ${constants.STRAPI_DEPENDENCY_NAME} version found in ${strapiPackageJSONPath} (${strapiVersion})`\n );\n }\n\n return semVerFactory(strapiVersion);\n }\n}\n\nconst formatGlobCollectionPattern = (collection: string[]): string => {\n assert(\n collection.length > 0,\n 'Invalid pattern provided, the given collection needs at least 1 element'\n );\n\n return collection.length === 1 ? collection[0] : `{${collection}}`;\n};\n\nexport class PluginProject extends Project {\n readonly type = 'plugin' as const satisfies ProjectType;\n\n /**\n * Returns an array of allowed file paths for a Strapi plugin\n *\n * The resulting paths include plugin default files, the root package.json file, and plugin-specific files.\n */\n private static get paths() {\n const allowedRootPaths = formatGlobCollectionPattern(\n constants.PROJECT_PLUGIN_ALLOWED_ROOT_PATHS\n );\n const allowedExtensions = formatGlobCollectionPattern(constants.PROJECT_ALLOWED_EXTENSIONS);\n\n return [\n // Plugin default files\n `./${allowedRootPaths}/**/*.${allowedExtensions}`,\n `!./**/node_modules/**/*`,\n `!./**/dist/**/*`,\n // Root package.json file\n constants.PROJECT_PACKAGE_JSON,\n // Plugin root files\n ...constants.PROJECT_PLUGIN_ROOT_FILES,\n ];\n }\n\n constructor(cwd: string) {\n super(cwd, { paths: PluginProject.paths });\n }\n}\n\nconst isPlugin = (cwd: string) => {\n const packageJSONPath = path.join(cwd, constants.PROJECT_PACKAGE_JSON);\n\n try {\n fse.accessSync(packageJSONPath);\n } catch {\n throw new Error(`Could not find a ${constants.PROJECT_PACKAGE_JSON} file in ${cwd}`);\n }\n\n const packageJSONBuffer = fse.readFileSync(packageJSONPath);\n\n const packageJSON = JSON.parse(packageJSONBuffer.toString());\n\n return packageJSON?.strapi?.kind === 'plugin';\n};\n\n// TODO: make this async so we can use async file methods\nexport const projectFactory = (cwd: string) => {\n fse.accessSync(cwd);\n\n return isPlugin(cwd) ? new PluginProject(cwd) : new AppProject(cwd);\n};\n"],"names":["Project","getFilesByExtensions","extensions","files","filter","filePath","fileExtension","path","extname","includes","refresh","refreshPackageJSON","refreshProjectFiles","runCodemods","codemods","options","runners","createProjectCodemodsRunners","dry","reports","codemod","runner","valid","report","run","push","jsonExtensions","constants","map","ext","codeExtensions","jsonFiles","codeFiles","codeRunner","codeRunnerFactory","parser","runInBand","babel","join","print","silent","verbose","jsonRunner","jsonRunnerFactory","cwd","packageJSONPath","fse","accessSync","Error","packageJSONBuffer","readFileSync","packageJSON","JSON","parse","toString","scanner","fileScannerFactory","scan","paths","config","pathExistsSync","AppProject","allowedRootPaths","formatGlobCollectionPattern","allowedExtensions","refreshStrapiVersion","strapiVersion","findStrapiVersionFromProjectPackageJSON","findLocallyInstalledStrapiVersion","projectName","name","version","dependencies","undefined","isValidSemVer","isLiteralSemVer","semver","semVerFactory","packageSearchText","strapiPackageJSONPath","strapiPackageJSON","require","resolve","assert","type","collection","length","PluginProject","isPlugin","strapi","kind","projectFactory"],"mappings":"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"}
@@ -6,6 +6,10 @@ var node = require('esbuild-register/dist/node');
6
6
  var transformApi = require('../../json/transform-api.js');
7
7
  var file = require('../../json/file.js');
8
8
 
9
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
10
+
11
+ var assert__default = /*#__PURE__*/_interopDefault(assert);
12
+
9
13
  const transformJSON = async (codemodPath, paths, config)=>{
10
14
  const { dry } = config;
11
15
  const startTime = process.hrtime();
@@ -46,12 +50,12 @@ const transformJSON = async (codemodPath, paths, config)=>{
46
50
  const module = require(codemodPath);
47
51
  unregister();
48
52
  const codemod = typeof module.default === 'function' ? module.default : module;
49
- assert(typeof codemod === 'function', `Codemod must be a function. Found ${typeof codemod}`);
53
+ assert__default.default(typeof codemod === 'function', `Codemod must be a function. Found ${typeof codemod}`);
50
54
  for (const path of paths){
51
55
  try {
52
56
  const json = await file.readJSON(path);
53
57
  // Make sure the JSON value is a JSON object
54
- assert(typeof json === 'object' && !Array.isArray(json) && json !== null);
58
+ assert__default.default(typeof json === 'object' && !Array.isArray(json) && json !== null);
55
59
  // TODO: Optimize the API to limit parse/stringify operations
56
60
  const file$1 = {
57
61
  path,
@@ -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,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,aAAAA,CAASF,IAAAA,CAAAA;;YAG5BD,MAAAA,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/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;;;;"}
@@ -20,6 +20,12 @@ var utils = require('../error/utils.js');
20
20
  var formats = require('../format/formats.js');
21
21
  var codemodRunner = require('../codemod-runner/codemod-runner.js');
22
22
 
23
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
24
+
25
+ var path__default = /*#__PURE__*/_interopDefault(path);
26
+ var chalk__default = /*#__PURE__*/_interopDefault(chalk);
27
+ var semver__default = /*#__PURE__*/_interopDefault(semver$1);
28
+
23
29
  class Upgrader {
24
30
  getNPMPackage() {
25
31
  return this.npmPackage;
@@ -170,7 +176,7 @@ class Upgrader {
170
176
  strapiDevelopmentDependencies.forEach(([name])=>json.set(`devDependencies.${name}`, this.target.raw));
171
177
  const updatedPackageJSON = json.root();
172
178
  if (this.isDry) {
173
- this.logger?.debug?.(`Skipping dependencies update (${chalk.italic('dry mode')})`);
179
+ this.logger?.debug?.(`Skipping dependencies update (${chalk__default.default.italic('dry mode')})`);
174
180
  return;
175
181
  }
176
182
  await file.saveJSON(packageJSONPath, updatedPackageJSON);
@@ -196,7 +202,7 @@ class Upgrader {
196
202
  const packageManagerName = await utils$1.packageManager.getPreferred(projectPath);
197
203
  this.logger?.debug?.(`Using ${formats.highlight(packageManagerName)} as package manager`);
198
204
  if (this.isDry) {
199
- this.logger?.debug?.(`Skipping dependencies installation (${chalk.italic('dry mode')})`);
205
+ this.logger?.debug?.(`Skipping dependencies installation (${chalk__default.default.italic('dry mode')})`);
200
206
  return;
201
207
  }
202
208
  await utils$1.packageManager.installDependencies(projectPath, packageManagerName, {
@@ -215,18 +221,18 @@ class Upgrader {
215
221
  }
216
222
  const shouldClear = typeof this.confirmationCallback === 'function' && await this.confirm([
217
223
  'Remove the Strapi admin dev cache',
218
- chalk.dim('(node_modules/.strapi/vite)'),
224
+ chalk__default.default.dim('(node_modules/.strapi/vite)'),
219
225
  '?',
220
226
  'Recommended after dependency changes to avoid stale bundles;',
221
227
  'the next',
222
- chalk.bold('strapi develop'),
228
+ chalk__default.default.bold('strapi develop'),
223
229
  'may take longer once while Vite re-optimizes.'
224
230
  ].join(' '));
225
231
  if (!shouldClear) {
226
232
  this.logger?.info?.('Skipped clearing admin dev cache. If the admin panel misbehaves after upgrading, delete node_modules/.strapi/vite and run develop again.');
227
233
  return;
228
234
  }
229
- const cachePath = path.join(this.project.cwd, 'node_modules', '.strapi', 'vite');
235
+ const cachePath = path__default.default.join(this.project.cwd, 'node_modules', '.strapi', 'vite');
230
236
  try {
231
237
  await promises.rm(cachePath, {
232
238
  recursive: true,
@@ -286,10 +292,10 @@ class Upgrader {
286
292
  const upgraderFactory = (project, target, npmPackage)=>{
287
293
  const npmTarget = resolveNPMTarget(project, target, npmPackage);
288
294
  const semverTarget = semver.semVerFactory(npmTarget.version);
289
- if (semver$1.eq(semverTarget, project.strapiVersion)) {
295
+ if (semver__default.default.eq(semverTarget, project.strapiVersion)) {
290
296
  throw new Error(`The project is already using v${semverTarget}`);
291
297
  }
292
- if (semver$1.lt(semverTarget, project.strapiVersion)) {
298
+ if (semver__default.default.lt(semverTarget, project.strapiVersion)) {
293
299
  throw new Error(`The target version v${semverTarget} must be greater than the current version v${project.strapiVersion}`);
294
300
  }
295
301
  return new Upgrader(project, semverTarget, npmPackage);
@@ -1 +1 @@
1
- {"version":3,"file":"upgrader.js","sources":["../../../../src/modules/upgrader/upgrader.ts"],"sourcesContent":["import path from 'node:path';\nimport { rm } from 'node:fs/promises';\n\nimport chalk from 'chalk';\nimport semver from 'semver';\nimport { packageManager } from '@strapi/utils';\n\nimport { createJSONTransformAPI, saveJSON } from '../json';\nimport { constants as projectConstants } from '../project';\nimport {\n isSemverInstance,\n isSemVerReleaseType,\n isValidSemVer,\n rangeFromVersions,\n semVerFactory,\n} from '../version';\nimport { NPMCandidateNotFoundError, unknownToError } from '../error';\nimport * as f from '../format';\nimport { codemodRunnerFactory } from '../codemod-runner';\n\nimport type { Upgrader as UpgraderInterface, UpgradeReport } from './types';\nimport type { Version } from '../version';\nimport type { Logger } from '../logger';\nimport type { Requirement } from '../requirement';\nimport type { NPM } from '../npm';\nimport type { AppProject } from '../project';\nimport type { ConfirmationCallback } from '../common/types';\n\ntype DependenciesEntries = Array<[name: string, version: Version.SemVer]>;\n\nexport class Upgrader implements UpgraderInterface {\n private readonly project: AppProject;\n\n private readonly npmPackage: NPM.Package;\n\n private target: Version.SemVer;\n\n private codemodsTarget!: Version.SemVer;\n\n private isDry: boolean;\n\n private logger: Logger | null;\n\n private requirements: Requirement.Requirement[];\n\n private confirmationCallback: ConfirmationCallback | null;\n\n constructor(project: AppProject, target: Version.SemVer, npmPackage: NPM.Package) {\n this.project = project;\n this.npmPackage = npmPackage;\n\n this.target = target;\n this.syncCodemodsTarget();\n\n this.isDry = false;\n\n this.requirements = [];\n\n this.logger = null;\n this.confirmationCallback = null;\n }\n\n getNPMPackage(): NPM.Package {\n return this.npmPackage;\n }\n\n getProject(): AppProject {\n return this.project;\n }\n\n getTarget(): Version.SemVer {\n return semVerFactory(this.target.raw);\n }\n\n setRequirements(requirements: Requirement.Requirement[]) {\n this.requirements = requirements;\n return this;\n }\n\n setTarget(target: Version.SemVer) {\n this.target = target;\n return this;\n }\n\n syncCodemodsTarget() {\n // Extract the <major>.<minor>.<patch> version from the target and assign it to the codemods target\n //\n // This is useful when dealing with alphas, betas or release candidates:\n // e.g. \"5.0.0-beta.951\" becomes \"5.0.0\"\n //\n // For experimental versions (e.g. \"0.0.0-experimental.hex\"), it is necessary to\n // override the codemods target manually in order to run the appropriate ones.\n this.codemodsTarget = semVerFactory(\n `${this.target.major}.${this.target.minor}.${this.target.patch}`\n );\n\n this.logger?.debug?.(\n `The codemods target has been synced with the upgrade target. The codemod runner will now look for ${f.version(\n this.codemodsTarget\n )}`\n );\n\n return this;\n }\n\n overrideCodemodsTarget(target: Version.SemVer) {\n this.codemodsTarget = target;\n\n this.logger?.debug?.(\n `Overriding the codemods target. The codemod runner will now look for ${f.version(target)}`\n );\n\n return this;\n }\n\n setLogger(logger: Logger) {\n this.logger = logger;\n return this;\n }\n\n onConfirm(callback: ConfirmationCallback | null) {\n this.confirmationCallback = callback;\n return this;\n }\n\n dry(enabled: boolean = true) {\n this.isDry = enabled;\n return this;\n }\n\n addRequirement(requirement: Requirement.Requirement) {\n this.requirements.push(requirement);\n\n const fRequired = requirement.isRequired ? '(required)' : '(optional)';\n this.logger?.debug?.(\n `Added a new requirement to the upgrade: ${f.highlight(requirement.name)} ${fRequired}`\n );\n\n return this;\n }\n\n async upgrade(): Promise<UpgradeReport> {\n this.logger?.info?.(\n `Upgrading from ${f.version(this.project.strapiVersion)} to ${f.version(this.target)}`\n );\n\n if (this.isDry) {\n this.logger?.warn?.(\n 'Running the upgrade in dry mode. No files will be modified during the process.'\n );\n }\n\n const range = rangeFromVersions(this.project.strapiVersion, this.target);\n const codemodsRange = rangeFromVersions(this.project.strapiVersion, this.codemodsTarget);\n\n const npmVersionsMatches = this.npmPackage?.findVersionsInRange(range) ?? [];\n\n this.logger?.debug?.(\n `Found ${f.highlight(npmVersionsMatches.length)} versions satisfying ${f.versionRange(range)}`\n );\n\n try {\n this.logger?.info?.(f.upgradeStep('Checking requirement', [1, 4]));\n await this.checkRequirements(this.requirements, {\n npmVersionsMatches,\n project: this.project,\n target: this.target,\n });\n\n this.logger?.info?.(f.upgradeStep('Applying the latest code modifications', [2, 4]));\n await this.runCodemods(codemodsRange);\n\n // We need to refresh the project files to make sure we have\n // the latest version of each file (including package.json) for the next steps\n this.logger?.debug?.('Refreshing project information...');\n this.project.refresh();\n\n this.logger?.info?.(f.upgradeStep('Upgrading Strapi dependencies', [3, 4]));\n await this.updateDependencies();\n\n this.logger?.info?.(f.upgradeStep('Installing dependencies', [4, 4]));\n await this.installDependencies();\n } catch (e) {\n return erroredReport(unknownToError(e));\n }\n\n return successReport();\n }\n\n async confirm(message: string): Promise<boolean> {\n if (typeof this.confirmationCallback !== 'function') {\n return true;\n }\n\n return this.confirmationCallback(message);\n }\n\n private async checkRequirements(\n requirements: Requirement.Requirement[],\n context: Requirement.TestContext\n ) {\n for (const requirement of requirements) {\n const { pass, error } = await requirement.test(context);\n\n if (pass) {\n await this.onSuccessfulRequirement(requirement, context);\n } else {\n await this.onFailedRequirement(requirement, error);\n }\n }\n }\n\n private async onSuccessfulRequirement(\n requirement: Requirement.Requirement,\n context: Requirement.TestContext\n ): Promise<void> {\n const hasChildren = requirement.children.length > 0;\n\n if (hasChildren) {\n await this.checkRequirements(requirement.children, context);\n }\n }\n\n private async onFailedRequirement(\n requirement: Requirement.Requirement,\n originalError: Error\n ): Promise<void> {\n const errorMessage = `Requirement failed: ${originalError.message} (${f.highlight(\n requirement.name\n )})`;\n const warningMessage = originalError.message;\n const confirmationMessage = `Ignore optional requirement \"${f.highlight(requirement.name)}\" ?`;\n\n const error = new Error(errorMessage);\n\n if (requirement.isRequired) {\n throw error;\n }\n\n this.logger?.warn?.(warningMessage);\n\n const response = await this.confirmationCallback?.(confirmationMessage);\n\n if (!response) {\n throw error;\n }\n }\n\n private async updateDependencies(): Promise<void> {\n const { packageJSON, packageJSONPath } = this.project;\n\n const json = createJSONTransformAPI(packageJSON);\n\n const dependencies = json.get<Record<string, string>>('dependencies', {});\n const devDependencies = json.get<Record<string, string>>('devDependencies', {});\n\n const strapiProductionDependencies = this.getScopedStrapiDependencies(dependencies);\n const strapiDevelopmentDependencies = this.getScopedStrapiDependencies(devDependencies);\n\n const strapiPackagesToUpgradeCount =\n strapiProductionDependencies.length + strapiDevelopmentDependencies.length;\n\n this.logger?.debug?.(\n `Found ${f.highlight(strapiPackagesToUpgradeCount)} dependency(ies) to update`\n );\n strapiProductionDependencies.forEach((dependency) =>\n this.logger?.debug?.(`- ${dependency[0]} (${dependency[1]} -> ${this.target})`)\n );\n strapiDevelopmentDependencies.forEach((dependency) =>\n this.logger?.debug?.(\n `- ${dependency[0]} (devDependencies) (${dependency[1]} -> ${this.target})`\n )\n );\n\n if (strapiPackagesToUpgradeCount === 0) {\n return;\n }\n\n strapiProductionDependencies.forEach(([name]) =>\n json.set(`dependencies.${name}`, this.target.raw)\n );\n strapiDevelopmentDependencies.forEach(([name]) =>\n json.set(`devDependencies.${name}`, this.target.raw)\n );\n\n const updatedPackageJSON = json.root();\n\n if (this.isDry) {\n this.logger?.debug?.(`Skipping dependencies update (${chalk.italic('dry mode')})`);\n return;\n }\n\n await saveJSON(packageJSONPath, updatedPackageJSON);\n }\n\n private getScopedStrapiDependencies(dependencies: Record<string, string>): DependenciesEntries {\n const { strapiVersion } = this.project;\n\n const strapiDependencies: DependenciesEntries = [];\n\n // Find all @strapi/* packages matching the current Strapi version\n for (const [name, version] of Object.entries(dependencies)) {\n const isScopedStrapiPackage = name.startsWith(projectConstants.SCOPED_STRAPI_PACKAGE_PREFIX);\n const isOnCurrentStrapiVersion = isValidSemVer(version) && version === strapiVersion.raw;\n\n if (isScopedStrapiPackage && isOnCurrentStrapiVersion) {\n strapiDependencies.push([name, semVerFactory(version)]);\n }\n }\n\n return strapiDependencies;\n }\n\n private async installDependencies(): Promise<void> {\n const projectPath = this.project.cwd;\n\n const packageManagerName = await packageManager.getPreferred(projectPath);\n\n this.logger?.debug?.(`Using ${f.highlight(packageManagerName)} as package manager`);\n\n if (this.isDry) {\n this.logger?.debug?.(`Skipping dependencies installation (${chalk.italic('dry mode')})`);\n return;\n }\n\n await packageManager.installDependencies(projectPath, packageManagerName, {\n stdout: this.logger?.stdout,\n stderr: this.logger?.stderr,\n });\n\n await this.clearStrapiAdminViteCacheAfterUpgrade();\n }\n\n /**\n * Removes only `node_modules/.strapi/vite` (Vite `cacheDir` for the admin panel). Generated\n * cache — not user source. Optionally gated by `confirm` when the CLI passes a callback so\n * users know the next `strapi develop` may spend longer once re-optimizing dependencies.\n */\n private async clearStrapiAdminViteCacheAfterUpgrade(): Promise<void> {\n if (this.isDry) {\n return;\n }\n\n const shouldClear =\n typeof this.confirmationCallback === 'function' &&\n (await this.confirm(\n [\n 'Remove the Strapi admin dev cache',\n chalk.dim('(node_modules/.strapi/vite)'),\n '?',\n 'Recommended after dependency changes to avoid stale bundles;',\n 'the next',\n chalk.bold('strapi develop'),\n 'may take longer once while Vite re-optimizes.',\n ].join(' ')\n ));\n\n if (!shouldClear) {\n this.logger?.info?.(\n 'Skipped clearing admin dev cache. If the admin panel misbehaves after upgrading, delete node_modules/.strapi/vite and run develop again.'\n );\n return;\n }\n\n const cachePath = path.join(this.project.cwd, 'node_modules', '.strapi', 'vite');\n\n try {\n await rm(cachePath, { recursive: true, force: true });\n this.logger?.debug?.(`Removed Strapi admin Vite cache at ${cachePath}`);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n this.logger?.warn?.(`Could not remove Strapi admin Vite cache at ${cachePath}: ${message}`);\n }\n }\n\n private async runCodemods(range: Version.Range): Promise<void> {\n const codemodRunner = codemodRunnerFactory(this.project, range);\n\n codemodRunner.dry(this.isDry);\n\n if (this.logger) {\n codemodRunner.setLogger(this.logger);\n }\n\n await codemodRunner.run();\n }\n}\n\n/**\n * Resolves the NPM target version based on the given project, target, and NPM package.\n * If target is a SemVer, it directly finds it. If it's a release type (major, minor, patch),\n * it calculates the range of versions for this release type and returns the latest version within this range.\n */\nconst resolveNPMTarget = (\n project: AppProject,\n target: Version.ReleaseType | Version.SemVer,\n npmPackage: NPM.Package\n): NPM.NPMPackageVersion => {\n // Semver\n if (isSemverInstance(target)) {\n const version = npmPackage.findVersion(target);\n\n if (!version) {\n throw new NPMCandidateNotFoundError(target);\n }\n\n return version;\n }\n\n // Release Types\n if (isSemVerReleaseType(target)) {\n const range = rangeFromVersions(project.strapiVersion, target);\n const npmVersionsMatches = npmPackage.findVersionsInRange(range);\n\n // The targeted version is the latest one that matches the given range\n const version = npmVersionsMatches.at(-1);\n\n if (!version) {\n throw new NPMCandidateNotFoundError(range, `The project is already up-to-date (${target})`);\n }\n\n return version;\n }\n\n throw new NPMCandidateNotFoundError(target);\n};\n\nexport const upgraderFactory = (\n project: AppProject,\n target: Version.ReleaseType | Version.SemVer,\n npmPackage: NPM.Package\n) => {\n const npmTarget = resolveNPMTarget(project, target, npmPackage);\n const semverTarget = semVerFactory(npmTarget.version);\n\n if (semver.eq(semverTarget, project.strapiVersion)) {\n throw new Error(`The project is already using v${semverTarget}`);\n }\n\n if (semver.lt(semverTarget, project.strapiVersion)) {\n throw new Error(\n `The target version v${semverTarget} must be greater than the current version v${project.strapiVersion}`\n );\n }\n\n return new Upgrader(project, semverTarget, npmPackage);\n};\n\nconst successReport = (): UpgradeReport => ({ success: true, error: null });\nconst erroredReport = (error: Error): UpgradeReport => ({ success: false, error });\n"],"names":["Upgrader","getNPMPackage","npmPackage","getProject","project","getTarget","semVerFactory","target","raw","setRequirements","requirements","setTarget","syncCodemodsTarget","codemodsTarget","major","minor","patch","logger","debug","f","overrideCodemodsTarget","setLogger","onConfirm","callback","confirmationCallback","dry","enabled","isDry","addRequirement","requirement","push","fRequired","isRequired","name","upgrade","info","strapiVersion","warn","range","rangeFromVersions","codemodsRange","npmVersionsMatches","findVersionsInRange","length","checkRequirements","runCodemods","refresh","updateDependencies","installDependencies","e","erroredReport","unknownToError","successReport","confirm","message","context","pass","error","test","onSuccessfulRequirement","onFailedRequirement","hasChildren","children","originalError","errorMessage","warningMessage","confirmationMessage","Error","response","packageJSON","packageJSONPath","json","createJSONTransformAPI","dependencies","get","devDependencies","strapiProductionDependencies","getScopedStrapiDependencies","strapiDevelopmentDependencies","strapiPackagesToUpgradeCount","forEach","dependency","set","updatedPackageJSON","root","chalk","italic","saveJSON","strapiDependencies","version","Object","entries","isScopedStrapiPackage","startsWith","projectConstants","isOnCurrentStrapiVersion","isValidSemVer","projectPath","cwd","packageManagerName","packageManager","getPreferred","stdout","stderr","clearStrapiAdminViteCacheAfterUpgrade","shouldClear","dim","bold","join","cachePath","path","rm","recursive","force","String","codemodRunner","codemodRunnerFactory","run","resolveNPMTarget","isSemverInstance","findVersion","NPMCandidateNotFoundError","isSemVerReleaseType","at","upgraderFactory","npmTarget","semverTarget","semver","eq","lt","success"],"mappings":"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"}
1
+ {"version":3,"file":"upgrader.js","sources":["../../../../src/modules/upgrader/upgrader.ts"],"sourcesContent":["import path from 'node:path';\nimport { rm } from 'node:fs/promises';\n\nimport chalk from 'chalk';\nimport semver from 'semver';\nimport { packageManager } from '@strapi/utils';\n\nimport { createJSONTransformAPI, saveJSON } from '../json';\nimport { constants as projectConstants } from '../project';\nimport {\n isSemverInstance,\n isSemVerReleaseType,\n isValidSemVer,\n rangeFromVersions,\n semVerFactory,\n} from '../version';\nimport { NPMCandidateNotFoundError, unknownToError } from '../error';\nimport * as f from '../format';\nimport { codemodRunnerFactory } from '../codemod-runner';\n\nimport type { Upgrader as UpgraderInterface, UpgradeReport } from './types';\nimport type { Version } from '../version';\nimport type { Logger } from '../logger';\nimport type { Requirement } from '../requirement';\nimport type { NPM } from '../npm';\nimport type { AppProject } from '../project';\nimport type { ConfirmationCallback } from '../common/types';\n\ntype DependenciesEntries = Array<[name: string, version: Version.SemVer]>;\n\nexport class Upgrader implements UpgraderInterface {\n private readonly project: AppProject;\n\n private readonly npmPackage: NPM.Package;\n\n private target: Version.SemVer;\n\n private codemodsTarget!: Version.SemVer;\n\n private isDry: boolean;\n\n private logger: Logger | null;\n\n private requirements: Requirement.Requirement[];\n\n private confirmationCallback: ConfirmationCallback | null;\n\n constructor(project: AppProject, target: Version.SemVer, npmPackage: NPM.Package) {\n this.project = project;\n this.npmPackage = npmPackage;\n\n this.target = target;\n this.syncCodemodsTarget();\n\n this.isDry = false;\n\n this.requirements = [];\n\n this.logger = null;\n this.confirmationCallback = null;\n }\n\n getNPMPackage(): NPM.Package {\n return this.npmPackage;\n }\n\n getProject(): AppProject {\n return this.project;\n }\n\n getTarget(): Version.SemVer {\n return semVerFactory(this.target.raw);\n }\n\n setRequirements(requirements: Requirement.Requirement[]) {\n this.requirements = requirements;\n return this;\n }\n\n setTarget(target: Version.SemVer) {\n this.target = target;\n return this;\n }\n\n syncCodemodsTarget() {\n // Extract the <major>.<minor>.<patch> version from the target and assign it to the codemods target\n //\n // This is useful when dealing with alphas, betas or release candidates:\n // e.g. \"5.0.0-beta.951\" becomes \"5.0.0\"\n //\n // For experimental versions (e.g. \"0.0.0-experimental.hex\"), it is necessary to\n // override the codemods target manually in order to run the appropriate ones.\n this.codemodsTarget = semVerFactory(\n `${this.target.major}.${this.target.minor}.${this.target.patch}`\n );\n\n this.logger?.debug?.(\n `The codemods target has been synced with the upgrade target. The codemod runner will now look for ${f.version(\n this.codemodsTarget\n )}`\n );\n\n return this;\n }\n\n overrideCodemodsTarget(target: Version.SemVer) {\n this.codemodsTarget = target;\n\n this.logger?.debug?.(\n `Overriding the codemods target. The codemod runner will now look for ${f.version(target)}`\n );\n\n return this;\n }\n\n setLogger(logger: Logger) {\n this.logger = logger;\n return this;\n }\n\n onConfirm(callback: ConfirmationCallback | null) {\n this.confirmationCallback = callback;\n return this;\n }\n\n dry(enabled: boolean = true) {\n this.isDry = enabled;\n return this;\n }\n\n addRequirement(requirement: Requirement.Requirement) {\n this.requirements.push(requirement);\n\n const fRequired = requirement.isRequired ? '(required)' : '(optional)';\n this.logger?.debug?.(\n `Added a new requirement to the upgrade: ${f.highlight(requirement.name)} ${fRequired}`\n );\n\n return this;\n }\n\n async upgrade(): Promise<UpgradeReport> {\n this.logger?.info?.(\n `Upgrading from ${f.version(this.project.strapiVersion)} to ${f.version(this.target)}`\n );\n\n if (this.isDry) {\n this.logger?.warn?.(\n 'Running the upgrade in dry mode. No files will be modified during the process.'\n );\n }\n\n const range = rangeFromVersions(this.project.strapiVersion, this.target);\n const codemodsRange = rangeFromVersions(this.project.strapiVersion, this.codemodsTarget);\n\n const npmVersionsMatches = this.npmPackage?.findVersionsInRange(range) ?? [];\n\n this.logger?.debug?.(\n `Found ${f.highlight(npmVersionsMatches.length)} versions satisfying ${f.versionRange(range)}`\n );\n\n try {\n this.logger?.info?.(f.upgradeStep('Checking requirement', [1, 4]));\n await this.checkRequirements(this.requirements, {\n npmVersionsMatches,\n project: this.project,\n target: this.target,\n });\n\n this.logger?.info?.(f.upgradeStep('Applying the latest code modifications', [2, 4]));\n await this.runCodemods(codemodsRange);\n\n // We need to refresh the project files to make sure we have\n // the latest version of each file (including package.json) for the next steps\n this.logger?.debug?.('Refreshing project information...');\n this.project.refresh();\n\n this.logger?.info?.(f.upgradeStep('Upgrading Strapi dependencies', [3, 4]));\n await this.updateDependencies();\n\n this.logger?.info?.(f.upgradeStep('Installing dependencies', [4, 4]));\n await this.installDependencies();\n } catch (e) {\n return erroredReport(unknownToError(e));\n }\n\n return successReport();\n }\n\n async confirm(message: string): Promise<boolean> {\n if (typeof this.confirmationCallback !== 'function') {\n return true;\n }\n\n return this.confirmationCallback(message);\n }\n\n private async checkRequirements(\n requirements: Requirement.Requirement[],\n context: Requirement.TestContext\n ) {\n for (const requirement of requirements) {\n const { pass, error } = await requirement.test(context);\n\n if (pass) {\n await this.onSuccessfulRequirement(requirement, context);\n } else {\n await this.onFailedRequirement(requirement, error);\n }\n }\n }\n\n private async onSuccessfulRequirement(\n requirement: Requirement.Requirement,\n context: Requirement.TestContext\n ): Promise<void> {\n const hasChildren = requirement.children.length > 0;\n\n if (hasChildren) {\n await this.checkRequirements(requirement.children, context);\n }\n }\n\n private async onFailedRequirement(\n requirement: Requirement.Requirement,\n originalError: Error\n ): Promise<void> {\n const errorMessage = `Requirement failed: ${originalError.message} (${f.highlight(\n requirement.name\n )})`;\n const warningMessage = originalError.message;\n const confirmationMessage = `Ignore optional requirement \"${f.highlight(requirement.name)}\" ?`;\n\n const error = new Error(errorMessage);\n\n if (requirement.isRequired) {\n throw error;\n }\n\n this.logger?.warn?.(warningMessage);\n\n const response = await this.confirmationCallback?.(confirmationMessage);\n\n if (!response) {\n throw error;\n }\n }\n\n private async updateDependencies(): Promise<void> {\n const { packageJSON, packageJSONPath } = this.project;\n\n const json = createJSONTransformAPI(packageJSON);\n\n const dependencies = json.get<Record<string, string>>('dependencies', {});\n const devDependencies = json.get<Record<string, string>>('devDependencies', {});\n\n const strapiProductionDependencies = this.getScopedStrapiDependencies(dependencies);\n const strapiDevelopmentDependencies = this.getScopedStrapiDependencies(devDependencies);\n\n const strapiPackagesToUpgradeCount =\n strapiProductionDependencies.length + strapiDevelopmentDependencies.length;\n\n this.logger?.debug?.(\n `Found ${f.highlight(strapiPackagesToUpgradeCount)} dependency(ies) to update`\n );\n strapiProductionDependencies.forEach((dependency) =>\n this.logger?.debug?.(`- ${dependency[0]} (${dependency[1]} -> ${this.target})`)\n );\n strapiDevelopmentDependencies.forEach((dependency) =>\n this.logger?.debug?.(\n `- ${dependency[0]} (devDependencies) (${dependency[1]} -> ${this.target})`\n )\n );\n\n if (strapiPackagesToUpgradeCount === 0) {\n return;\n }\n\n strapiProductionDependencies.forEach(([name]) =>\n json.set(`dependencies.${name}`, this.target.raw)\n );\n strapiDevelopmentDependencies.forEach(([name]) =>\n json.set(`devDependencies.${name}`, this.target.raw)\n );\n\n const updatedPackageJSON = json.root();\n\n if (this.isDry) {\n this.logger?.debug?.(`Skipping dependencies update (${chalk.italic('dry mode')})`);\n return;\n }\n\n await saveJSON(packageJSONPath, updatedPackageJSON);\n }\n\n private getScopedStrapiDependencies(dependencies: Record<string, string>): DependenciesEntries {\n const { strapiVersion } = this.project;\n\n const strapiDependencies: DependenciesEntries = [];\n\n // Find all @strapi/* packages matching the current Strapi version\n for (const [name, version] of Object.entries(dependencies)) {\n const isScopedStrapiPackage = name.startsWith(projectConstants.SCOPED_STRAPI_PACKAGE_PREFIX);\n const isOnCurrentStrapiVersion = isValidSemVer(version) && version === strapiVersion.raw;\n\n if (isScopedStrapiPackage && isOnCurrentStrapiVersion) {\n strapiDependencies.push([name, semVerFactory(version)]);\n }\n }\n\n return strapiDependencies;\n }\n\n private async installDependencies(): Promise<void> {\n const projectPath = this.project.cwd;\n\n const packageManagerName = await packageManager.getPreferred(projectPath);\n\n this.logger?.debug?.(`Using ${f.highlight(packageManagerName)} as package manager`);\n\n if (this.isDry) {\n this.logger?.debug?.(`Skipping dependencies installation (${chalk.italic('dry mode')})`);\n return;\n }\n\n await packageManager.installDependencies(projectPath, packageManagerName, {\n stdout: this.logger?.stdout,\n stderr: this.logger?.stderr,\n });\n\n await this.clearStrapiAdminViteCacheAfterUpgrade();\n }\n\n /**\n * Removes only `node_modules/.strapi/vite` (Vite `cacheDir` for the admin panel). Generated\n * cache — not user source. Optionally gated by `confirm` when the CLI passes a callback so\n * users know the next `strapi develop` may spend longer once re-optimizing dependencies.\n */\n private async clearStrapiAdminViteCacheAfterUpgrade(): Promise<void> {\n if (this.isDry) {\n return;\n }\n\n const shouldClear =\n typeof this.confirmationCallback === 'function' &&\n (await this.confirm(\n [\n 'Remove the Strapi admin dev cache',\n chalk.dim('(node_modules/.strapi/vite)'),\n '?',\n 'Recommended after dependency changes to avoid stale bundles;',\n 'the next',\n chalk.bold('strapi develop'),\n 'may take longer once while Vite re-optimizes.',\n ].join(' ')\n ));\n\n if (!shouldClear) {\n this.logger?.info?.(\n 'Skipped clearing admin dev cache. If the admin panel misbehaves after upgrading, delete node_modules/.strapi/vite and run develop again.'\n );\n return;\n }\n\n const cachePath = path.join(this.project.cwd, 'node_modules', '.strapi', 'vite');\n\n try {\n await rm(cachePath, { recursive: true, force: true });\n this.logger?.debug?.(`Removed Strapi admin Vite cache at ${cachePath}`);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n this.logger?.warn?.(`Could not remove Strapi admin Vite cache at ${cachePath}: ${message}`);\n }\n }\n\n private async runCodemods(range: Version.Range): Promise<void> {\n const codemodRunner = codemodRunnerFactory(this.project, range);\n\n codemodRunner.dry(this.isDry);\n\n if (this.logger) {\n codemodRunner.setLogger(this.logger);\n }\n\n await codemodRunner.run();\n }\n}\n\n/**\n * Resolves the NPM target version based on the given project, target, and NPM package.\n * If target is a SemVer, it directly finds it. If it's a release type (major, minor, patch),\n * it calculates the range of versions for this release type and returns the latest version within this range.\n */\nconst resolveNPMTarget = (\n project: AppProject,\n target: Version.ReleaseType | Version.SemVer,\n npmPackage: NPM.Package\n): NPM.NPMPackageVersion => {\n // Semver\n if (isSemverInstance(target)) {\n const version = npmPackage.findVersion(target);\n\n if (!version) {\n throw new NPMCandidateNotFoundError(target);\n }\n\n return version;\n }\n\n // Release Types\n if (isSemVerReleaseType(target)) {\n const range = rangeFromVersions(project.strapiVersion, target);\n const npmVersionsMatches = npmPackage.findVersionsInRange(range);\n\n // The targeted version is the latest one that matches the given range\n const version = npmVersionsMatches.at(-1);\n\n if (!version) {\n throw new NPMCandidateNotFoundError(range, `The project is already up-to-date (${target})`);\n }\n\n return version;\n }\n\n throw new NPMCandidateNotFoundError(target);\n};\n\nexport const upgraderFactory = (\n project: AppProject,\n target: Version.ReleaseType | Version.SemVer,\n npmPackage: NPM.Package\n) => {\n const npmTarget = resolveNPMTarget(project, target, npmPackage);\n const semverTarget = semVerFactory(npmTarget.version);\n\n if (semver.eq(semverTarget, project.strapiVersion)) {\n throw new Error(`The project is already using v${semverTarget}`);\n }\n\n if (semver.lt(semverTarget, project.strapiVersion)) {\n throw new Error(\n `The target version v${semverTarget} must be greater than the current version v${project.strapiVersion}`\n );\n }\n\n return new Upgrader(project, semverTarget, npmPackage);\n};\n\nconst successReport = (): UpgradeReport => ({ success: true, error: null });\nconst erroredReport = (error: Error): UpgradeReport => ({ success: false, error });\n"],"names":["Upgrader","getNPMPackage","npmPackage","getProject","project","getTarget","semVerFactory","target","raw","setRequirements","requirements","setTarget","syncCodemodsTarget","codemodsTarget","major","minor","patch","logger","debug","f","overrideCodemodsTarget","setLogger","onConfirm","callback","confirmationCallback","dry","enabled","isDry","addRequirement","requirement","push","fRequired","isRequired","name","upgrade","info","strapiVersion","warn","range","rangeFromVersions","codemodsRange","npmVersionsMatches","findVersionsInRange","length","checkRequirements","runCodemods","refresh","updateDependencies","installDependencies","e","erroredReport","unknownToError","successReport","confirm","message","context","pass","error","test","onSuccessfulRequirement","onFailedRequirement","hasChildren","children","originalError","errorMessage","warningMessage","confirmationMessage","Error","response","packageJSON","packageJSONPath","json","createJSONTransformAPI","dependencies","get","devDependencies","strapiProductionDependencies","getScopedStrapiDependencies","strapiDevelopmentDependencies","strapiPackagesToUpgradeCount","forEach","dependency","set","updatedPackageJSON","root","chalk","italic","saveJSON","strapiDependencies","version","Object","entries","isScopedStrapiPackage","startsWith","projectConstants","isOnCurrentStrapiVersion","isValidSemVer","projectPath","cwd","packageManagerName","packageManager","getPreferred","stdout","stderr","clearStrapiAdminViteCacheAfterUpgrade","shouldClear","dim","bold","join","cachePath","path","rm","recursive","force","String","codemodRunner","codemodRunnerFactory","run","resolveNPMTarget","isSemverInstance","findVersion","NPMCandidateNotFoundError","isSemVerReleaseType","at","upgraderFactory","npmTarget","semverTarget","semver","eq","lt","success"],"mappings":"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"}
@@ -4,17 +4,21 @@ var semver = require('semver');
4
4
  var types = require('./types.js');
5
5
  var semver$1 = require('./semver.js');
6
6
 
7
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
8
+
9
+ var semver__default = /*#__PURE__*/_interopDefault(semver);
10
+
7
11
  const rangeFactory = (range)=>{
8
- return new semver.Range(range);
12
+ return new semver__default.default.Range(range);
9
13
  };
10
14
  const rangeFromReleaseType = (current, identifier)=>{
11
15
  switch(identifier){
12
- case types.ReleaseType.Latest:
16
+ case types.RELEASE_TYPES.Latest:
13
17
  {
14
18
  // Match anything greater than the current version
15
19
  return rangeFactory(`>${current.raw}`);
16
20
  }
17
- case types.ReleaseType.Major:
21
+ case types.RELEASE_TYPES.Major:
18
22
  {
19
23
  // For example, 4.15.4 returns 5.0.0
20
24
  const nextMajor = semver$1.semVerFactory(current.raw).inc('major');
@@ -27,7 +31,7 @@ const rangeFromReleaseType = (current, identifier)=>{
27
31
  // greater than "4.15.4" but less than "6.0.0-0".
28
32
  return rangeFactory(`>${current.raw} <=${nextMajor.major}`);
29
33
  }
30
- case types.ReleaseType.Minor:
34
+ case types.RELEASE_TYPES.Minor:
31
35
  {
32
36
  // For example, 4.15.4 returns 5.0.0
33
37
  const nextMajor = semver$1.semVerFactory(current.raw).inc('major');
@@ -40,7 +44,7 @@ const rangeFromReleaseType = (current, identifier)=>{
40
44
  // greater than "4.15.4" but less than "5.0.0".
41
45
  return rangeFactory(`>${current.raw} <${nextMajor.raw}`);
42
46
  }
43
- case types.ReleaseType.Patch:
47
+ case types.RELEASE_TYPES.Patch:
44
48
  {
45
49
  // For example, 4.15.4 returns 4.16.0
46
50
  const nextMinor = semver$1.semVerFactory(current.raw).inc('minor');
@@ -68,9 +72,9 @@ const rangeFromVersions = (currentVersion, target)=>{
68
72
  }
69
73
  throw new Error(`Invalid target set: ${target}`); // TODO: better errors
70
74
  };
71
- const isValidStringifiedRange = (str)=>semver.validRange(str) !== null;
75
+ const isValidStringifiedRange = (str)=>semver__default.default.validRange(str) !== null;
72
76
  const isRangeInstance = (range)=>{
73
- return range instanceof semver.Range;
77
+ return range instanceof semver__default.default.Range;
74
78
  };
75
79
 
76
80
  exports.isRangeInstance = isRangeInstance;
@@ -1 +1 @@
1
- {"version":3,"file":"range.js","sources":["../../../../src/modules/version/range.ts"],"sourcesContent":["import semver from 'semver';\n\nimport * as Version from './types';\nimport { isSemverInstance, isSemVerReleaseType, semVerFactory } from './semver';\n\nexport const rangeFactory = (range: string): Version.Range => {\n return new semver.Range(range);\n};\n\nexport const rangeFromReleaseType = (current: Version.SemVer, identifier: Version.ReleaseType) => {\n switch (identifier) {\n case Version.ReleaseType.Latest: {\n // Match anything greater than the current version\n return rangeFactory(`>${current.raw}`);\n }\n case Version.ReleaseType.Major: {\n // For example, 4.15.4 returns 5.0.0\n const nextMajor = semVerFactory(current.raw).inc('major');\n\n // Using only the major version as the upper limit allows any minor,\n // patch, or build version to be taken in the range.\n //\n // For example, if the current version is \"4.15.4\", incrementing the\n // major version would result in \"5.0.0\".\n // The generated rule is \">4.15.4 <=5\", allowing any version\n // greater than \"4.15.4\" but less than \"6.0.0-0\".\n return rangeFactory(`>${current.raw} <=${nextMajor.major}`);\n }\n case Version.ReleaseType.Minor: {\n // For example, 4.15.4 returns 5.0.0\n const nextMajor = semVerFactory(current.raw).inc('major');\n\n // Using the <major>.<minor>.<patch> version as the upper limit allows any minor,\n // patch, or build versions to be taken in the range.\n //\n // For example, if the current version is \"4.15.4\", incrementing the\n // major version would result in \"5.0.0\".\n // The generated rule is \">4.15.4 <5.0.0\", allowing any version\n // greater than \"4.15.4\" but less than \"5.0.0\".\n return rangeFactory(`>${current.raw} <${nextMajor.raw}`);\n }\n case Version.ReleaseType.Patch: {\n // For example, 4.15.4 returns 4.16.0\n const nextMinor = semVerFactory(current.raw).inc('minor');\n\n // Using only the minor version as the upper limit allows any patch\n // or build versions to be taken in the range.\n //\n // For example, if the current version is \"4.15.4\", incrementing the\n // minor version would result in \"4.16.0\".\n // The generated rule is \">4.15.4 <4.16.0\", allowing any version\n // greater than \"4.15.4\" but less than \"4.16.0\".\n return rangeFactory(`>${current.raw} <${nextMinor.raw}`);\n }\n default: {\n throw new Error('Not implemented');\n }\n }\n};\n\nexport const rangeFromVersions = (\n currentVersion: Version.SemVer,\n target: Version.ReleaseType | Version.SemVer\n) => {\n if (isSemverInstance(target)) {\n return rangeFactory(`>${currentVersion.raw} <=${target.raw}`);\n }\n\n if (isSemVerReleaseType(target)) {\n return rangeFromReleaseType(currentVersion, target);\n }\n\n throw new Error(`Invalid target set: ${target}`); // TODO: better errors\n};\n\nexport const isValidStringifiedRange = (str: string) => semver.validRange(str) !== null;\n\nexport const isRangeInstance = (range: unknown): range is semver.Range => {\n return range instanceof semver.Range;\n};\n"],"names":["rangeFactory","range","semver","Range","rangeFromReleaseType","current","identifier","Version","Latest","raw","Major","nextMajor","semVerFactory","inc","major","Minor","Patch","nextMinor","Error","rangeFromVersions","currentVersion","target","isSemverInstance","isSemVerReleaseType","isValidStringifiedRange","str","validRange","isRangeInstance"],"mappings":";;;;;;AAKO,MAAMA,eAAe,CAACC,KAAAA,GAAAA;IAC3B,OAAO,IAAIC,MAAAA,CAAOC,KAAK,CAACF,KAAAA,CAAAA;AAC1B;AAEO,MAAMG,oBAAAA,GAAuB,CAACC,OAAAA,EAAyBC,UAAAA,GAAAA;IAC5D,OAAQA,UAAAA;QACN,KAAKC,iBAAmB,CAACC,MAAM;AAAE,YAAA;;AAE/B,gBAAA,OAAOR,aAAa,CAAC,CAAC,EAAEK,OAAAA,CAAQI,GAAG,CAAA,CAAE,CAAA;AACvC,YAAA;QACA,KAAKF,iBAAmB,CAACG,KAAK;AAAE,YAAA;;AAE9B,gBAAA,MAAMC,YAAYC,sBAAAA,CAAcP,OAAAA,CAAQI,GAAG,CAAA,CAAEI,GAAG,CAAC,OAAA,CAAA;;;;;;;;gBASjD,OAAOb,YAAAA,CAAa,CAAC,CAAC,EAAEK,OAAAA,CAAQI,GAAG,CAAC,GAAG,EAAEE,SAAAA,CAAUG,KAAK,CAAA,CAAE,CAAA;AAC5D,YAAA;QACA,KAAKP,iBAAmB,CAACQ,KAAK;AAAE,YAAA;;AAE9B,gBAAA,MAAMJ,YAAYC,sBAAAA,CAAcP,OAAAA,CAAQI,GAAG,CAAA,CAAEI,GAAG,CAAC,OAAA,CAAA;;;;;;;;gBASjD,OAAOb,YAAAA,CAAa,CAAC,CAAC,EAAEK,OAAAA,CAAQI,GAAG,CAAC,EAAE,EAAEE,SAAAA,CAAUF,GAAG,CAAA,CAAE,CAAA;AACzD,YAAA;QACA,KAAKF,iBAAmB,CAACS,KAAK;AAAE,YAAA;;AAE9B,gBAAA,MAAMC,YAAYL,sBAAAA,CAAcP,OAAAA,CAAQI,GAAG,CAAA,CAAEI,GAAG,CAAC,OAAA,CAAA;;;;;;;;gBASjD,OAAOb,YAAAA,CAAa,CAAC,CAAC,EAAEK,OAAAA,CAAQI,GAAG,CAAC,EAAE,EAAEQ,SAAAA,CAAUR,GAAG,CAAA,CAAE,CAAA;AACzD,YAAA;AACA,QAAA;AAAS,YAAA;AACP,gBAAA,MAAM,IAAIS,KAAAA,CAAM,iBAAA,CAAA;AAClB,YAAA;AACF;AACF;AAEO,MAAMC,iBAAAA,GAAoB,CAC/BC,cAAAA,EACAC,MAAAA,GAAAA;AAEA,IAAA,IAAIC,0BAAiBD,MAAAA,CAAAA,EAAS;QAC5B,OAAOrB,YAAAA,CAAa,CAAC,CAAC,EAAEoB,cAAAA,CAAeX,GAAG,CAAC,GAAG,EAAEY,MAAAA,CAAOZ,GAAG,CAAA,CAAE,CAAA;AAC9D,IAAA;AAEA,IAAA,IAAIc,6BAAoBF,MAAAA,CAAAA,EAAS;AAC/B,QAAA,OAAOjB,qBAAqBgB,cAAAA,EAAgBC,MAAAA,CAAAA;AAC9C,IAAA;AAEA,IAAA,MAAM,IAAIH,KAAAA,CAAM,CAAC,oBAAoB,EAAEG,MAAAA,CAAAA,CAAQ;AACjD;AAEO,MAAMG,0BAA0B,CAACC,GAAAA,GAAgBvB,OAAOwB,UAAU,CAACD,SAAS;AAE5E,MAAME,kBAAkB,CAAC1B,KAAAA,GAAAA;IAC9B,OAAOA,KAAAA,YAAiBC,OAAOC,KAAK;AACtC;;;;;;;;"}
1
+ {"version":3,"file":"range.js","sources":["../../../../src/modules/version/range.ts"],"sourcesContent":["import semver from 'semver';\n\nimport * as Version from './types';\nimport { isSemverInstance, isSemVerReleaseType, semVerFactory } from './semver';\n\nexport const rangeFactory = (range: string): Version.Range => {\n return new semver.Range(range);\n};\n\nexport const rangeFromReleaseType = (current: Version.SemVer, identifier: Version.ReleaseType) => {\n switch (identifier) {\n case Version.RELEASE_TYPES.Latest: {\n // Match anything greater than the current version\n return rangeFactory(`>${current.raw}`);\n }\n case Version.RELEASE_TYPES.Major: {\n // For example, 4.15.4 returns 5.0.0\n const nextMajor = semVerFactory(current.raw).inc('major');\n\n // Using only the major version as the upper limit allows any minor,\n // patch, or build version to be taken in the range.\n //\n // For example, if the current version is \"4.15.4\", incrementing the\n // major version would result in \"5.0.0\".\n // The generated rule is \">4.15.4 <=5\", allowing any version\n // greater than \"4.15.4\" but less than \"6.0.0-0\".\n return rangeFactory(`>${current.raw} <=${nextMajor.major}`);\n }\n case Version.RELEASE_TYPES.Minor: {\n // For example, 4.15.4 returns 5.0.0\n const nextMajor = semVerFactory(current.raw).inc('major');\n\n // Using the <major>.<minor>.<patch> version as the upper limit allows any minor,\n // patch, or build versions to be taken in the range.\n //\n // For example, if the current version is \"4.15.4\", incrementing the\n // major version would result in \"5.0.0\".\n // The generated rule is \">4.15.4 <5.0.0\", allowing any version\n // greater than \"4.15.4\" but less than \"5.0.0\".\n return rangeFactory(`>${current.raw} <${nextMajor.raw}`);\n }\n case Version.RELEASE_TYPES.Patch: {\n // For example, 4.15.4 returns 4.16.0\n const nextMinor = semVerFactory(current.raw).inc('minor');\n\n // Using only the minor version as the upper limit allows any patch\n // or build versions to be taken in the range.\n //\n // For example, if the current version is \"4.15.4\", incrementing the\n // minor version would result in \"4.16.0\".\n // The generated rule is \">4.15.4 <4.16.0\", allowing any version\n // greater than \"4.15.4\" but less than \"4.16.0\".\n return rangeFactory(`>${current.raw} <${nextMinor.raw}`);\n }\n default: {\n throw new Error('Not implemented');\n }\n }\n};\n\nexport const rangeFromVersions = (\n currentVersion: Version.SemVer,\n target: Version.ReleaseType | Version.SemVer\n) => {\n if (isSemverInstance(target)) {\n return rangeFactory(`>${currentVersion.raw} <=${target.raw}`);\n }\n\n if (isSemVerReleaseType(target)) {\n return rangeFromReleaseType(currentVersion, target);\n }\n\n throw new Error(`Invalid target set: ${target}`); // TODO: better errors\n};\n\nexport const isValidStringifiedRange = (str: string) => semver.validRange(str) !== null;\n\nexport const isRangeInstance = (range: unknown): range is semver.Range => {\n return range instanceof semver.Range;\n};\n"],"names":["rangeFactory","range","semver","Range","rangeFromReleaseType","current","identifier","Version","Latest","raw","Major","nextMajor","semVerFactory","inc","major","Minor","Patch","nextMinor","Error","rangeFromVersions","currentVersion","target","isSemverInstance","isSemVerReleaseType","isValidStringifiedRange","str","validRange","isRangeInstance"],"mappings":";;;;;;;;;;AAKO,MAAMA,eAAe,CAACC,KAAAA,GAAAA;IAC3B,OAAO,IAAIC,uBAAAA,CAAOC,KAAK,CAACF,KAAAA,CAAAA;AAC1B;AAEO,MAAMG,oBAAAA,GAAuB,CAACC,OAAAA,EAAyBC,UAAAA,GAAAA;IAC5D,OAAQA,UAAAA;QACN,KAAKC,mBAAqB,CAACC,MAAM;AAAE,YAAA;;AAEjC,gBAAA,OAAOR,aAAa,CAAC,CAAC,EAAEK,OAAAA,CAAQI,GAAG,CAAA,CAAE,CAAA;AACvC,YAAA;QACA,KAAKF,mBAAqB,CAACG,KAAK;AAAE,YAAA;;AAEhC,gBAAA,MAAMC,YAAYC,sBAAAA,CAAcP,OAAAA,CAAQI,GAAG,CAAA,CAAEI,GAAG,CAAC,OAAA,CAAA;;;;;;;;gBASjD,OAAOb,YAAAA,CAAa,CAAC,CAAC,EAAEK,OAAAA,CAAQI,GAAG,CAAC,GAAG,EAAEE,SAAAA,CAAUG,KAAK,CAAA,CAAE,CAAA;AAC5D,YAAA;QACA,KAAKP,mBAAqB,CAACQ,KAAK;AAAE,YAAA;;AAEhC,gBAAA,MAAMJ,YAAYC,sBAAAA,CAAcP,OAAAA,CAAQI,GAAG,CAAA,CAAEI,GAAG,CAAC,OAAA,CAAA;;;;;;;;gBASjD,OAAOb,YAAAA,CAAa,CAAC,CAAC,EAAEK,OAAAA,CAAQI,GAAG,CAAC,EAAE,EAAEE,SAAAA,CAAUF,GAAG,CAAA,CAAE,CAAA;AACzD,YAAA;QACA,KAAKF,mBAAqB,CAACS,KAAK;AAAE,YAAA;;AAEhC,gBAAA,MAAMC,YAAYL,sBAAAA,CAAcP,OAAAA,CAAQI,GAAG,CAAA,CAAEI,GAAG,CAAC,OAAA,CAAA;;;;;;;;gBASjD,OAAOb,YAAAA,CAAa,CAAC,CAAC,EAAEK,OAAAA,CAAQI,GAAG,CAAC,EAAE,EAAEQ,SAAAA,CAAUR,GAAG,CAAA,CAAE,CAAA;AACzD,YAAA;AACA,QAAA;AAAS,YAAA;AACP,gBAAA,MAAM,IAAIS,KAAAA,CAAM,iBAAA,CAAA;AAClB,YAAA;AACF;AACF;AAEO,MAAMC,iBAAAA,GAAoB,CAC/BC,cAAAA,EACAC,MAAAA,GAAAA;AAEA,IAAA,IAAIC,0BAAiBD,MAAAA,CAAAA,EAAS;QAC5B,OAAOrB,YAAAA,CAAa,CAAC,CAAC,EAAEoB,cAAAA,CAAeX,GAAG,CAAC,GAAG,EAAEY,MAAAA,CAAOZ,GAAG,CAAA,CAAE,CAAA;AAC9D,IAAA;AAEA,IAAA,IAAIc,6BAAoBF,MAAAA,CAAAA,EAAS;AAC/B,QAAA,OAAOjB,qBAAqBgB,cAAAA,EAAgBC,MAAAA,CAAAA;AAC9C,IAAA;AAEA,IAAA,MAAM,IAAIH,KAAAA,CAAM,CAAC,oBAAoB,EAAEG,MAAAA,CAAAA,CAAQ;AACjD;AAEO,MAAMG,0BAA0B,CAACC,GAAAA,GAAgBvB,wBAAOwB,UAAU,CAACD,SAAS;AAE5E,MAAME,kBAAkB,CAAC1B,KAAAA,GAAAA;IAC9B,OAAOA,KAAAA,YAAiBC,wBAAOC,KAAK;AACtC;;;;;;;;"}
@@ -1,5 +1,5 @@
1
1
  import semver from 'semver';
2
- import { ReleaseType } from './types.mjs';
2
+ import { RELEASE_TYPES } from './types.mjs';
3
3
  import { isSemverInstance, isSemVerReleaseType, semVerFactory } from './semver.mjs';
4
4
 
5
5
  const rangeFactory = (range)=>{
@@ -7,12 +7,12 @@ const rangeFactory = (range)=>{
7
7
  };
8
8
  const rangeFromReleaseType = (current, identifier)=>{
9
9
  switch(identifier){
10
- case ReleaseType.Latest:
10
+ case RELEASE_TYPES.Latest:
11
11
  {
12
12
  // Match anything greater than the current version
13
13
  return rangeFactory(`>${current.raw}`);
14
14
  }
15
- case ReleaseType.Major:
15
+ case RELEASE_TYPES.Major:
16
16
  {
17
17
  // For example, 4.15.4 returns 5.0.0
18
18
  const nextMajor = semVerFactory(current.raw).inc('major');
@@ -25,7 +25,7 @@ const rangeFromReleaseType = (current, identifier)=>{
25
25
  // greater than "4.15.4" but less than "6.0.0-0".
26
26
  return rangeFactory(`>${current.raw} <=${nextMajor.major}`);
27
27
  }
28
- case ReleaseType.Minor:
28
+ case RELEASE_TYPES.Minor:
29
29
  {
30
30
  // For example, 4.15.4 returns 5.0.0
31
31
  const nextMajor = semVerFactory(current.raw).inc('major');
@@ -38,7 +38,7 @@ const rangeFromReleaseType = (current, identifier)=>{
38
38
  // greater than "4.15.4" but less than "5.0.0".
39
39
  return rangeFactory(`>${current.raw} <${nextMajor.raw}`);
40
40
  }
41
- case ReleaseType.Patch:
41
+ case RELEASE_TYPES.Patch:
42
42
  {
43
43
  // For example, 4.15.4 returns 4.16.0
44
44
  const nextMinor = semVerFactory(current.raw).inc('minor');
@@ -1 +1 @@
1
- {"version":3,"file":"range.mjs","sources":["../../../../src/modules/version/range.ts"],"sourcesContent":["import semver from 'semver';\n\nimport * as Version from './types';\nimport { isSemverInstance, isSemVerReleaseType, semVerFactory } from './semver';\n\nexport const rangeFactory = (range: string): Version.Range => {\n return new semver.Range(range);\n};\n\nexport const rangeFromReleaseType = (current: Version.SemVer, identifier: Version.ReleaseType) => {\n switch (identifier) {\n case Version.ReleaseType.Latest: {\n // Match anything greater than the current version\n return rangeFactory(`>${current.raw}`);\n }\n case Version.ReleaseType.Major: {\n // For example, 4.15.4 returns 5.0.0\n const nextMajor = semVerFactory(current.raw).inc('major');\n\n // Using only the major version as the upper limit allows any minor,\n // patch, or build version to be taken in the range.\n //\n // For example, if the current version is \"4.15.4\", incrementing the\n // major version would result in \"5.0.0\".\n // The generated rule is \">4.15.4 <=5\", allowing any version\n // greater than \"4.15.4\" but less than \"6.0.0-0\".\n return rangeFactory(`>${current.raw} <=${nextMajor.major}`);\n }\n case Version.ReleaseType.Minor: {\n // For example, 4.15.4 returns 5.0.0\n const nextMajor = semVerFactory(current.raw).inc('major');\n\n // Using the <major>.<minor>.<patch> version as the upper limit allows any minor,\n // patch, or build versions to be taken in the range.\n //\n // For example, if the current version is \"4.15.4\", incrementing the\n // major version would result in \"5.0.0\".\n // The generated rule is \">4.15.4 <5.0.0\", allowing any version\n // greater than \"4.15.4\" but less than \"5.0.0\".\n return rangeFactory(`>${current.raw} <${nextMajor.raw}`);\n }\n case Version.ReleaseType.Patch: {\n // For example, 4.15.4 returns 4.16.0\n const nextMinor = semVerFactory(current.raw).inc('minor');\n\n // Using only the minor version as the upper limit allows any patch\n // or build versions to be taken in the range.\n //\n // For example, if the current version is \"4.15.4\", incrementing the\n // minor version would result in \"4.16.0\".\n // The generated rule is \">4.15.4 <4.16.0\", allowing any version\n // greater than \"4.15.4\" but less than \"4.16.0\".\n return rangeFactory(`>${current.raw} <${nextMinor.raw}`);\n }\n default: {\n throw new Error('Not implemented');\n }\n }\n};\n\nexport const rangeFromVersions = (\n currentVersion: Version.SemVer,\n target: Version.ReleaseType | Version.SemVer\n) => {\n if (isSemverInstance(target)) {\n return rangeFactory(`>${currentVersion.raw} <=${target.raw}`);\n }\n\n if (isSemVerReleaseType(target)) {\n return rangeFromReleaseType(currentVersion, target);\n }\n\n throw new Error(`Invalid target set: ${target}`); // TODO: better errors\n};\n\nexport const isValidStringifiedRange = (str: string) => semver.validRange(str) !== null;\n\nexport const isRangeInstance = (range: unknown): range is semver.Range => {\n return range instanceof semver.Range;\n};\n"],"names":["rangeFactory","range","semver","Range","rangeFromReleaseType","current","identifier","Version","Latest","raw","Major","nextMajor","semVerFactory","inc","major","Minor","Patch","nextMinor","Error","rangeFromVersions","currentVersion","target","isSemverInstance","isSemVerReleaseType","isValidStringifiedRange","str","validRange","isRangeInstance"],"mappings":";;;;AAKO,MAAMA,eAAe,CAACC,KAAAA,GAAAA;IAC3B,OAAO,IAAIC,MAAAA,CAAOC,KAAK,CAACF,KAAAA,CAAAA;AAC1B;AAEO,MAAMG,oBAAAA,GAAuB,CAACC,OAAAA,EAAyBC,UAAAA,GAAAA;IAC5D,OAAQA,UAAAA;QACN,KAAKC,WAAmB,CAACC,MAAM;AAAE,YAAA;;AAE/B,gBAAA,OAAOR,aAAa,CAAC,CAAC,EAAEK,OAAAA,CAAQI,GAAG,CAAA,CAAE,CAAA;AACvC,YAAA;QACA,KAAKF,WAAmB,CAACG,KAAK;AAAE,YAAA;;AAE9B,gBAAA,MAAMC,YAAYC,aAAAA,CAAcP,OAAAA,CAAQI,GAAG,CAAA,CAAEI,GAAG,CAAC,OAAA,CAAA;;;;;;;;gBASjD,OAAOb,YAAAA,CAAa,CAAC,CAAC,EAAEK,OAAAA,CAAQI,GAAG,CAAC,GAAG,EAAEE,SAAAA,CAAUG,KAAK,CAAA,CAAE,CAAA;AAC5D,YAAA;QACA,KAAKP,WAAmB,CAACQ,KAAK;AAAE,YAAA;;AAE9B,gBAAA,MAAMJ,YAAYC,aAAAA,CAAcP,OAAAA,CAAQI,GAAG,CAAA,CAAEI,GAAG,CAAC,OAAA,CAAA;;;;;;;;gBASjD,OAAOb,YAAAA,CAAa,CAAC,CAAC,EAAEK,OAAAA,CAAQI,GAAG,CAAC,EAAE,EAAEE,SAAAA,CAAUF,GAAG,CAAA,CAAE,CAAA;AACzD,YAAA;QACA,KAAKF,WAAmB,CAACS,KAAK;AAAE,YAAA;;AAE9B,gBAAA,MAAMC,YAAYL,aAAAA,CAAcP,OAAAA,CAAQI,GAAG,CAAA,CAAEI,GAAG,CAAC,OAAA,CAAA;;;;;;;;gBASjD,OAAOb,YAAAA,CAAa,CAAC,CAAC,EAAEK,OAAAA,CAAQI,GAAG,CAAC,EAAE,EAAEQ,SAAAA,CAAUR,GAAG,CAAA,CAAE,CAAA;AACzD,YAAA;AACA,QAAA;AAAS,YAAA;AACP,gBAAA,MAAM,IAAIS,KAAAA,CAAM,iBAAA,CAAA;AAClB,YAAA;AACF;AACF;AAEO,MAAMC,iBAAAA,GAAoB,CAC/BC,cAAAA,EACAC,MAAAA,GAAAA;AAEA,IAAA,IAAIC,iBAAiBD,MAAAA,CAAAA,EAAS;QAC5B,OAAOrB,YAAAA,CAAa,CAAC,CAAC,EAAEoB,cAAAA,CAAeX,GAAG,CAAC,GAAG,EAAEY,MAAAA,CAAOZ,GAAG,CAAA,CAAE,CAAA;AAC9D,IAAA;AAEA,IAAA,IAAIc,oBAAoBF,MAAAA,CAAAA,EAAS;AAC/B,QAAA,OAAOjB,qBAAqBgB,cAAAA,EAAgBC,MAAAA,CAAAA;AAC9C,IAAA;AAEA,IAAA,MAAM,IAAIH,KAAAA,CAAM,CAAC,oBAAoB,EAAEG,MAAAA,CAAAA,CAAQ;AACjD;AAEO,MAAMG,0BAA0B,CAACC,GAAAA,GAAgBvB,OAAOwB,UAAU,CAACD,SAAS;AAE5E,MAAME,kBAAkB,CAAC1B,KAAAA,GAAAA;IAC9B,OAAOA,KAAAA,YAAiBC,OAAOC,KAAK;AACtC;;;;"}
1
+ {"version":3,"file":"range.mjs","sources":["../../../../src/modules/version/range.ts"],"sourcesContent":["import semver from 'semver';\n\nimport * as Version from './types';\nimport { isSemverInstance, isSemVerReleaseType, semVerFactory } from './semver';\n\nexport const rangeFactory = (range: string): Version.Range => {\n return new semver.Range(range);\n};\n\nexport const rangeFromReleaseType = (current: Version.SemVer, identifier: Version.ReleaseType) => {\n switch (identifier) {\n case Version.RELEASE_TYPES.Latest: {\n // Match anything greater than the current version\n return rangeFactory(`>${current.raw}`);\n }\n case Version.RELEASE_TYPES.Major: {\n // For example, 4.15.4 returns 5.0.0\n const nextMajor = semVerFactory(current.raw).inc('major');\n\n // Using only the major version as the upper limit allows any minor,\n // patch, or build version to be taken in the range.\n //\n // For example, if the current version is \"4.15.4\", incrementing the\n // major version would result in \"5.0.0\".\n // The generated rule is \">4.15.4 <=5\", allowing any version\n // greater than \"4.15.4\" but less than \"6.0.0-0\".\n return rangeFactory(`>${current.raw} <=${nextMajor.major}`);\n }\n case Version.RELEASE_TYPES.Minor: {\n // For example, 4.15.4 returns 5.0.0\n const nextMajor = semVerFactory(current.raw).inc('major');\n\n // Using the <major>.<minor>.<patch> version as the upper limit allows any minor,\n // patch, or build versions to be taken in the range.\n //\n // For example, if the current version is \"4.15.4\", incrementing the\n // major version would result in \"5.0.0\".\n // The generated rule is \">4.15.4 <5.0.0\", allowing any version\n // greater than \"4.15.4\" but less than \"5.0.0\".\n return rangeFactory(`>${current.raw} <${nextMajor.raw}`);\n }\n case Version.RELEASE_TYPES.Patch: {\n // For example, 4.15.4 returns 4.16.0\n const nextMinor = semVerFactory(current.raw).inc('minor');\n\n // Using only the minor version as the upper limit allows any patch\n // or build versions to be taken in the range.\n //\n // For example, if the current version is \"4.15.4\", incrementing the\n // minor version would result in \"4.16.0\".\n // The generated rule is \">4.15.4 <4.16.0\", allowing any version\n // greater than \"4.15.4\" but less than \"4.16.0\".\n return rangeFactory(`>${current.raw} <${nextMinor.raw}`);\n }\n default: {\n throw new Error('Not implemented');\n }\n }\n};\n\nexport const rangeFromVersions = (\n currentVersion: Version.SemVer,\n target: Version.ReleaseType | Version.SemVer\n) => {\n if (isSemverInstance(target)) {\n return rangeFactory(`>${currentVersion.raw} <=${target.raw}`);\n }\n\n if (isSemVerReleaseType(target)) {\n return rangeFromReleaseType(currentVersion, target);\n }\n\n throw new Error(`Invalid target set: ${target}`); // TODO: better errors\n};\n\nexport const isValidStringifiedRange = (str: string) => semver.validRange(str) !== null;\n\nexport const isRangeInstance = (range: unknown): range is semver.Range => {\n return range instanceof semver.Range;\n};\n"],"names":["rangeFactory","range","semver","Range","rangeFromReleaseType","current","identifier","Version","Latest","raw","Major","nextMajor","semVerFactory","inc","major","Minor","Patch","nextMinor","Error","rangeFromVersions","currentVersion","target","isSemverInstance","isSemVerReleaseType","isValidStringifiedRange","str","validRange","isRangeInstance"],"mappings":";;;;AAKO,MAAMA,eAAe,CAACC,KAAAA,GAAAA;IAC3B,OAAO,IAAIC,MAAAA,CAAOC,KAAK,CAACF,KAAAA,CAAAA;AAC1B;AAEO,MAAMG,oBAAAA,GAAuB,CAACC,OAAAA,EAAyBC,UAAAA,GAAAA;IAC5D,OAAQA,UAAAA;QACN,KAAKC,aAAqB,CAACC,MAAM;AAAE,YAAA;;AAEjC,gBAAA,OAAOR,aAAa,CAAC,CAAC,EAAEK,OAAAA,CAAQI,GAAG,CAAA,CAAE,CAAA;AACvC,YAAA;QACA,KAAKF,aAAqB,CAACG,KAAK;AAAE,YAAA;;AAEhC,gBAAA,MAAMC,YAAYC,aAAAA,CAAcP,OAAAA,CAAQI,GAAG,CAAA,CAAEI,GAAG,CAAC,OAAA,CAAA;;;;;;;;gBASjD,OAAOb,YAAAA,CAAa,CAAC,CAAC,EAAEK,OAAAA,CAAQI,GAAG,CAAC,GAAG,EAAEE,SAAAA,CAAUG,KAAK,CAAA,CAAE,CAAA;AAC5D,YAAA;QACA,KAAKP,aAAqB,CAACQ,KAAK;AAAE,YAAA;;AAEhC,gBAAA,MAAMJ,YAAYC,aAAAA,CAAcP,OAAAA,CAAQI,GAAG,CAAA,CAAEI,GAAG,CAAC,OAAA,CAAA;;;;;;;;gBASjD,OAAOb,YAAAA,CAAa,CAAC,CAAC,EAAEK,OAAAA,CAAQI,GAAG,CAAC,EAAE,EAAEE,SAAAA,CAAUF,GAAG,CAAA,CAAE,CAAA;AACzD,YAAA;QACA,KAAKF,aAAqB,CAACS,KAAK;AAAE,YAAA;;AAEhC,gBAAA,MAAMC,YAAYL,aAAAA,CAAcP,OAAAA,CAAQI,GAAG,CAAA,CAAEI,GAAG,CAAC,OAAA,CAAA;;;;;;;;gBASjD,OAAOb,YAAAA,CAAa,CAAC,CAAC,EAAEK,OAAAA,CAAQI,GAAG,CAAC,EAAE,EAAEQ,SAAAA,CAAUR,GAAG,CAAA,CAAE,CAAA;AACzD,YAAA;AACA,QAAA;AAAS,YAAA;AACP,gBAAA,MAAM,IAAIS,KAAAA,CAAM,iBAAA,CAAA;AAClB,YAAA;AACF;AACF;AAEO,MAAMC,iBAAAA,GAAoB,CAC/BC,cAAAA,EACAC,MAAAA,GAAAA;AAEA,IAAA,IAAIC,iBAAiBD,MAAAA,CAAAA,EAAS;QAC5B,OAAOrB,YAAAA,CAAa,CAAC,CAAC,EAAEoB,cAAAA,CAAeX,GAAG,CAAC,GAAG,EAAEY,MAAAA,CAAOZ,GAAG,CAAA,CAAE,CAAA;AAC9D,IAAA;AAEA,IAAA,IAAIc,oBAAoBF,MAAAA,CAAAA,EAAS;AAC/B,QAAA,OAAOjB,qBAAqBgB,cAAAA,EAAgBC,MAAAA,CAAAA;AAC9C,IAAA;AAEA,IAAA,MAAM,IAAIH,KAAAA,CAAM,CAAC,oBAAoB,EAAEG,MAAAA,CAAAA,CAAQ;AACjD;AAEO,MAAMG,0BAA0B,CAACC,GAAAA,GAAgBvB,OAAOwB,UAAU,CAACD,SAAS;AAE5E,MAAME,kBAAkB,CAAC1B,KAAAA,GAAAA;IAC9B,OAAOA,KAAAA,YAAiBC,OAAOC,KAAK;AACtC;;;;"}