@strapi/upgrade 5.12.1 → 5.12.3

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 (246) hide show
  1. package/dist/cli.js +6 -203
  2. package/dist/cli.js.map +1 -1
  3. package/dist/cli.mjs +5 -202
  4. package/dist/cli.mjs.map +1 -1
  5. package/dist/index.js +4 -155
  6. package/dist/index.js.map +1 -1
  7. package/dist/index.mjs +4 -157
  8. package/dist/index.mjs.map +1 -1
  9. package/dist/modules/codemod-repository/constants.d.ts.map +1 -1
  10. package/dist/package.json.js +6 -0
  11. package/dist/package.json.js.map +1 -0
  12. package/dist/package.json.mjs +4 -0
  13. package/dist/package.json.mjs.map +1 -0
  14. package/dist/src/cli/commands/codemods.js +120 -0
  15. package/dist/src/cli/commands/codemods.js.map +1 -0
  16. package/dist/src/cli/commands/codemods.mjs +116 -0
  17. package/dist/src/cli/commands/codemods.mjs.map +1 -0
  18. package/dist/src/cli/commands/upgrade.js +99 -0
  19. package/dist/src/cli/commands/upgrade.js.map +1 -0
  20. package/dist/src/cli/commands/upgrade.mjs +96 -0
  21. package/dist/src/cli/commands/upgrade.mjs.map +1 -0
  22. package/dist/src/cli/errors.js +18 -0
  23. package/dist/src/cli/errors.js.map +1 -0
  24. package/dist/src/cli/errors.mjs +16 -0
  25. package/dist/src/cli/errors.mjs.map +1 -0
  26. package/dist/src/cli/options.js +26 -0
  27. package/dist/src/cli/options.js.map +1 -0
  28. package/dist/src/cli/options.mjs +19 -0
  29. package/dist/src/cli/options.mjs.map +1 -0
  30. package/dist/src/modules/codemod/codemod.js +44 -0
  31. package/dist/src/modules/codemod/codemod.js.map +1 -0
  32. package/dist/src/modules/codemod/codemod.mjs +41 -0
  33. package/dist/src/modules/codemod/codemod.mjs.map +1 -0
  34. package/dist/src/modules/codemod/constants.js +17 -0
  35. package/dist/src/modules/codemod/constants.js.map +1 -0
  36. package/dist/src/modules/codemod/constants.mjs +11 -0
  37. package/dist/src/modules/codemod/constants.mjs.map +1 -0
  38. package/dist/src/modules/codemod/index.js +10 -0
  39. package/dist/src/modules/codemod/index.js.map +1 -0
  40. package/dist/src/modules/codemod/index.mjs +4 -0
  41. package/dist/src/modules/codemod/index.mjs.map +1 -0
  42. package/dist/src/modules/codemod-repository/constants.js +9 -0
  43. package/dist/src/modules/codemod-repository/constants.js.map +1 -0
  44. package/dist/src/modules/codemod-repository/constants.mjs +7 -0
  45. package/dist/src/modules/codemod-repository/constants.mjs.map +1 -0
  46. package/dist/src/modules/codemod-repository/index.js +10 -0
  47. package/dist/src/modules/codemod-repository/index.js.map +1 -0
  48. package/dist/src/modules/codemod-repository/index.mjs +4 -0
  49. package/dist/src/modules/codemod-repository/index.mjs.map +1 -0
  50. package/dist/src/modules/codemod-repository/repository.js +127 -0
  51. package/dist/src/modules/codemod-repository/repository.js.map +1 -0
  52. package/dist/src/modules/codemod-repository/repository.mjs +123 -0
  53. package/dist/src/modules/codemod-repository/repository.mjs.map +1 -0
  54. package/dist/src/modules/codemod-runner/codemod-runner.js +113 -0
  55. package/dist/src/modules/codemod-runner/codemod-runner.js.map +1 -0
  56. package/dist/src/modules/codemod-runner/codemod-runner.mjs +110 -0
  57. package/dist/src/modules/codemod-runner/codemod-runner.mjs.map +1 -0
  58. package/dist/src/modules/error/index.js +11 -0
  59. package/dist/src/modules/error/index.js.map +1 -0
  60. package/dist/src/modules/error/index.mjs +2 -0
  61. package/dist/src/modules/error/index.mjs.map +1 -0
  62. package/dist/src/modules/error/utils.js +33 -0
  63. package/dist/src/modules/error/utils.js.map +1 -0
  64. package/dist/src/modules/error/utils.mjs +28 -0
  65. package/dist/src/modules/error/utils.mjs.map +1 -0
  66. package/dist/src/modules/file-scanner/index.js +8 -0
  67. package/dist/src/modules/file-scanner/index.js.map +1 -0
  68. package/dist/src/modules/file-scanner/index.mjs +2 -0
  69. package/dist/src/modules/file-scanner/index.mjs.map +1 -0
  70. package/dist/src/modules/file-scanner/scanner.js +23 -0
  71. package/dist/src/modules/file-scanner/scanner.js.map +1 -0
  72. package/dist/src/modules/file-scanner/scanner.mjs +20 -0
  73. package/dist/src/modules/file-scanner/scanner.mjs.map +1 -0
  74. package/dist/src/modules/format/formats.js +107 -0
  75. package/dist/src/modules/format/formats.js.map +1 -0
  76. package/dist/src/modules/format/formats.mjs +94 -0
  77. package/dist/src/modules/format/formats.mjs.map +1 -0
  78. package/dist/src/modules/format/index.js +19 -0
  79. package/dist/src/modules/format/index.js.map +1 -0
  80. package/dist/src/modules/format/index.mjs +2 -0
  81. package/dist/src/modules/format/index.mjs.map +1 -0
  82. package/dist/src/modules/index.js +32 -0
  83. package/dist/src/modules/index.js.map +1 -0
  84. package/dist/src/modules/index.mjs +27 -0
  85. package/dist/src/modules/index.mjs.map +1 -0
  86. package/dist/src/modules/json/file.js +16 -0
  87. package/dist/src/modules/json/file.js.map +1 -0
  88. package/dist/src/modules/json/file.mjs +13 -0
  89. package/dist/src/modules/json/file.mjs.map +1 -0
  90. package/dist/src/modules/json/transform-api.js +38 -0
  91. package/dist/src/modules/json/transform-api.js.map +1 -0
  92. package/dist/src/modules/json/transform-api.mjs +35 -0
  93. package/dist/src/modules/json/transform-api.mjs.map +1 -0
  94. package/dist/src/modules/logger/index.js +8 -0
  95. package/dist/src/modules/logger/index.js.map +1 -0
  96. package/dist/src/modules/logger/index.mjs +2 -0
  97. package/dist/src/modules/logger/index.mjs.map +1 -0
  98. package/dist/src/modules/logger/logger.js +76 -0
  99. package/dist/src/modules/logger/logger.js.map +1 -0
  100. package/dist/src/modules/logger/logger.mjs +73 -0
  101. package/dist/src/modules/logger/logger.mjs.map +1 -0
  102. package/dist/src/modules/npm/constants.js +6 -0
  103. package/dist/src/modules/npm/constants.js.map +1 -0
  104. package/dist/src/modules/npm/constants.mjs +4 -0
  105. package/dist/src/modules/npm/constants.mjs.map +1 -0
  106. package/dist/src/modules/npm/package.js +55 -0
  107. package/dist/src/modules/npm/package.js.map +1 -0
  108. package/dist/src/modules/npm/package.mjs +52 -0
  109. package/dist/src/modules/npm/package.mjs.map +1 -0
  110. package/dist/src/modules/project/constants.js +45 -0
  111. package/dist/src/modules/project/constants.js.map +1 -0
  112. package/dist/src/modules/project/constants.mjs +35 -0
  113. package/dist/src/modules/project/constants.mjs.map +1 -0
  114. package/dist/src/modules/project/index.js +15 -0
  115. package/dist/src/modules/project/index.js.map +1 -0
  116. package/dist/src/modules/project/index.mjs +5 -0
  117. package/dist/src/modules/project/index.mjs.map +1 -0
  118. package/dist/src/modules/project/project.js +208 -0
  119. package/dist/src/modules/project/project.js.map +1 -0
  120. package/dist/src/modules/project/project.mjs +203 -0
  121. package/dist/src/modules/project/project.mjs.map +1 -0
  122. package/dist/src/modules/project/utils.js +26 -0
  123. package/dist/src/modules/project/utils.js.map +1 -0
  124. package/dist/src/modules/project/utils.mjs +21 -0
  125. package/dist/src/modules/project/utils.mjs.map +1 -0
  126. package/dist/src/modules/report/index.js +9 -0
  127. package/dist/src/modules/report/index.js.map +1 -0
  128. package/dist/src/modules/report/index.mjs +2 -0
  129. package/dist/src/modules/report/index.mjs.map +1 -0
  130. package/dist/src/modules/report/report.js +13 -0
  131. package/dist/src/modules/report/report.js.map +1 -0
  132. package/dist/src/modules/report/report.mjs +10 -0
  133. package/dist/src/modules/report/report.mjs.map +1 -0
  134. package/dist/src/modules/requirement/index.js +8 -0
  135. package/dist/src/modules/requirement/index.js.map +1 -0
  136. package/dist/src/modules/requirement/index.mjs +2 -0
  137. package/dist/src/modules/requirement/index.mjs.map +1 -0
  138. package/dist/src/modules/requirement/requirement.js +55 -0
  139. package/dist/src/modules/requirement/requirement.js.map +1 -0
  140. package/dist/src/modules/requirement/requirement.mjs +52 -0
  141. package/dist/src/modules/requirement/requirement.mjs.map +1 -0
  142. package/dist/src/modules/runner/code/code.js +21 -0
  143. package/dist/src/modules/runner/code/code.js.map +1 -0
  144. package/dist/src/modules/runner/code/code.mjs +18 -0
  145. package/dist/src/modules/runner/code/code.mjs.map +1 -0
  146. package/dist/src/modules/runner/code/index.js +8 -0
  147. package/dist/src/modules/runner/code/index.js.map +1 -0
  148. package/dist/src/modules/runner/code/index.mjs +2 -0
  149. package/dist/src/modules/runner/code/index.mjs.map +1 -0
  150. package/dist/src/modules/runner/index.js +10 -0
  151. package/dist/src/modules/runner/index.js.map +1 -0
  152. package/dist/src/modules/runner/index.mjs +5 -0
  153. package/dist/src/modules/runner/index.mjs.map +1 -0
  154. package/dist/src/modules/runner/json/index.js +8 -0
  155. package/dist/src/modules/runner/json/index.js.map +1 -0
  156. package/dist/src/modules/runner/json/index.mjs +2 -0
  157. package/dist/src/modules/runner/json/index.mjs.map +1 -0
  158. package/dist/src/modules/runner/json/json.js +21 -0
  159. package/dist/src/modules/runner/json/json.js.map +1 -0
  160. package/dist/src/modules/runner/json/json.mjs +18 -0
  161. package/dist/src/modules/runner/json/json.mjs.map +1 -0
  162. package/dist/src/modules/runner/json/transform.js +85 -0
  163. package/dist/src/modules/runner/json/transform.js.map +1 -0
  164. package/dist/src/modules/runner/json/transform.mjs +83 -0
  165. package/dist/src/modules/runner/json/transform.mjs.map +1 -0
  166. package/dist/src/modules/runner/runner.js +22 -0
  167. package/dist/src/modules/runner/runner.js.map +1 -0
  168. package/dist/src/modules/runner/runner.mjs +20 -0
  169. package/dist/src/modules/runner/runner.mjs.map +1 -0
  170. package/dist/src/modules/timer/constants.js +6 -0
  171. package/dist/src/modules/timer/constants.js.map +1 -0
  172. package/dist/src/modules/timer/constants.mjs +4 -0
  173. package/dist/src/modules/timer/constants.mjs.map +1 -0
  174. package/dist/src/modules/timer/index.js +10 -0
  175. package/dist/src/modules/timer/index.js.map +1 -0
  176. package/dist/src/modules/timer/index.mjs +4 -0
  177. package/dist/src/modules/timer/index.mjs.map +1 -0
  178. package/dist/src/modules/timer/timer.js +33 -0
  179. package/dist/src/modules/timer/timer.js.map +1 -0
  180. package/dist/src/modules/timer/timer.mjs +30 -0
  181. package/dist/src/modules/timer/timer.mjs.map +1 -0
  182. package/dist/src/modules/upgrader/constants.js +6 -0
  183. package/dist/src/modules/upgrader/constants.js.map +1 -0
  184. package/dist/src/modules/upgrader/constants.mjs +4 -0
  185. package/dist/src/modules/upgrader/constants.mjs.map +1 -0
  186. package/dist/src/modules/upgrader/index.js +10 -0
  187. package/dist/src/modules/upgrader/index.js.map +1 -0
  188. package/dist/src/modules/upgrader/index.mjs +4 -0
  189. package/dist/src/modules/upgrader/index.mjs.map +1 -0
  190. package/dist/src/modules/upgrader/upgrader.js +266 -0
  191. package/dist/src/modules/upgrader/upgrader.js.map +1 -0
  192. package/dist/src/modules/upgrader/upgrader.mjs +263 -0
  193. package/dist/src/modules/upgrader/upgrader.mjs.map +1 -0
  194. package/dist/src/modules/version/index.js +20 -0
  195. package/dist/src/modules/version/index.js.map +1 -0
  196. package/dist/src/modules/version/index.mjs +5 -0
  197. package/dist/src/modules/version/index.mjs.map +1 -0
  198. package/dist/src/modules/version/range.js +81 -0
  199. package/dist/src/modules/version/range.js.map +1 -0
  200. package/dist/src/modules/version/range.mjs +75 -0
  201. package/dist/src/modules/version/range.mjs.map +1 -0
  202. package/dist/src/modules/version/semver.js +26 -0
  203. package/dist/src/modules/version/semver.js.map +1 -0
  204. package/dist/src/modules/version/semver.mjs +20 -0
  205. package/dist/src/modules/version/semver.mjs.map +1 -0
  206. package/dist/src/modules/version/types.js +12 -0
  207. package/dist/src/modules/version/types.js.map +1 -0
  208. package/dist/src/modules/version/types.mjs +12 -0
  209. package/dist/src/modules/version/types.mjs.map +1 -0
  210. package/dist/src/tasks/codemods/list-codemods.js +40 -0
  211. package/dist/src/tasks/codemods/list-codemods.js.map +1 -0
  212. package/dist/src/tasks/codemods/list-codemods.mjs +38 -0
  213. package/dist/src/tasks/codemods/list-codemods.mjs.map +1 -0
  214. package/dist/src/tasks/codemods/run-codemods.js +36 -0
  215. package/dist/src/tasks/codemods/run-codemods.js.map +1 -0
  216. package/dist/src/tasks/codemods/run-codemods.mjs +34 -0
  217. package/dist/src/tasks/codemods/run-codemods.mjs.map +1 -0
  218. package/dist/src/tasks/codemods/utils.js +54 -0
  219. package/dist/src/tasks/codemods/utils.js.map +1 -0
  220. package/dist/src/tasks/codemods/utils.mjs +50 -0
  221. package/dist/src/tasks/codemods/utils.mjs.map +1 -0
  222. package/dist/src/tasks/index.js +15 -0
  223. package/dist/src/tasks/index.js.map +1 -0
  224. package/dist/src/tasks/index.mjs +7 -0
  225. package/dist/src/tasks/index.mjs.map +1 -0
  226. package/dist/src/tasks/upgrade/prompts/latest.js +48 -0
  227. package/dist/src/tasks/upgrade/prompts/latest.js.map +1 -0
  228. package/dist/src/tasks/upgrade/prompts/latest.mjs +46 -0
  229. package/dist/src/tasks/upgrade/prompts/latest.mjs.map +1 -0
  230. package/dist/src/tasks/upgrade/requirements/common.js +40 -0
  231. package/dist/src/tasks/upgrade/requirements/common.js.map +1 -0
  232. package/dist/src/tasks/upgrade/requirements/common.mjs +35 -0
  233. package/dist/src/tasks/upgrade/requirements/common.mjs.map +1 -0
  234. package/dist/src/tasks/upgrade/requirements/major.js +29 -0
  235. package/dist/src/tasks/upgrade/requirements/major.js.map +1 -0
  236. package/dist/src/tasks/upgrade/requirements/major.mjs +26 -0
  237. package/dist/src/tasks/upgrade/requirements/major.mjs.map +1 -0
  238. package/dist/src/tasks/upgrade/upgrade.js +69 -0
  239. package/dist/src/tasks/upgrade/upgrade.js.map +1 -0
  240. package/dist/src/tasks/upgrade/upgrade.mjs +67 -0
  241. package/dist/src/tasks/upgrade/upgrade.mjs.map +1 -0
  242. package/package.json +4 -4
  243. package/dist/chunks/logger-DGi224NW.js +0 -1649
  244. package/dist/chunks/logger-DGi224NW.js.map +0 -1
  245. package/dist/chunks/logger-np_r7rTc.mjs +0 -1599
  246. package/dist/chunks/logger-np_r7rTc.mjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger-np_r7rTc.mjs","sources":["../../src/modules/timer/timer.ts","../../src/modules/timer/constants.ts","../../src/modules/format/formats.ts","../../src/modules/npm/constants.ts","../../src/modules/version/types.ts","../../src/modules/version/semver.ts","../../src/modules/version/range.ts","../../src/modules/npm/package.ts","../../src/modules/file-scanner/scanner.ts","../../src/modules/runner/runner.ts","../../src/modules/runner/code/code.ts","../../src/modules/json/transform-api.ts","../../src/modules/json/file.ts","../../src/modules/runner/json/transform.ts","../../src/modules/runner/json/json.ts","../../src/modules/project/constants.ts","../../src/modules/project/project.ts","../../src/modules/project/utils.ts","../../src/modules/error/utils.ts","../../src/modules/codemod/constants.ts","../../src/modules/codemod/codemod.ts","../../src/modules/codemod-repository/constants.ts","../../src/modules/codemod-repository/repository.ts","../../src/modules/codemod-runner/codemod-runner.ts","../../src/modules/upgrader/upgrader.ts","../../src/modules/upgrader/constants.ts","../../src/modules/requirement/requirement.ts","../../src/tasks/upgrade/requirements/major.ts","../../src/tasks/upgrade/requirements/common.ts","../../src/tasks/upgrade/prompts/latest.ts","../../src/tasks/upgrade/upgrade.ts","../../src/tasks/codemods/utils.ts","../../src/tasks/codemods/run-codemods.ts","../../src/tasks/codemods/list-codemods.ts","../../src/modules/logger/logger.ts"],"sourcesContent":["import type { Timer as TimerInterface, TimeInterval } from './types';\n\nexport class Timer implements TimerInterface {\n private interval!: TimeInterval;\n\n constructor() {\n this.reset();\n }\n\n get elapsedMs() {\n const { start, end } = this.interval;\n\n return end ? end - start : Date.now() - start;\n }\n\n get end() {\n return this.interval.end;\n }\n\n get start() {\n return this.interval.start;\n }\n\n stop() {\n this.interval.end = Date.now();\n\n return this.elapsedMs;\n }\n\n reset() {\n this.interval = { start: Date.now(), end: null };\n\n return this;\n }\n}\n\nexport const timerFactory = () => new Timer();\n","export const ONE_SECOND_MS = 1000;\n","import CliTable3 from 'cli-table3';\nimport chalk from 'chalk';\n\nimport { constants as timerConstants } from '../timer';\n\nimport type { AppProject, PluginProject, ProjectType } from '../project';\nimport type { Codemod } from '../codemod';\nimport type { Version } from '../version';\nimport type { Report } from '../report';\n\nexport const path = (path: string) => chalk.blue(path);\n\nexport const version = (version: Version.LiteralVersion | Version.SemVer) => {\n return chalk.italic.yellow(`v${version}`);\n};\n\nexport const codemodUID = (uid: string) => {\n return chalk.bold.cyan(uid);\n};\n\nexport const projectDetails = (project: AppProject | PluginProject) => {\n return `Project: TYPE=${projectType(project.type)}; CWD=${path(project.cwd)}; PATHS=${project.paths.map(path)}`;\n};\n\nexport const projectType = (type: ProjectType) => chalk.cyan(type);\n\nexport const versionRange = (range: Version.Range) => chalk.italic.yellow(range.raw);\n\nexport const transform = (transformFilePath: string) => chalk.cyan(transformFilePath);\n\nexport const highlight = (arg: unknown) => chalk.bold.underline(arg);\n\nexport const upgradeStep = (text: string, step: [current: number, total: number]) => {\n return chalk.bold(`(${step[0]}/${step[1]}) ${text}...`);\n};\n\nexport const reports = (reports: Report.CodemodReport[]) => {\n const rows = reports.map(({ codemod, report }, i) => {\n const fIndex = chalk.grey(i);\n const fVersion = chalk.magenta(codemod.version);\n const fKind = chalk.yellow(codemod.kind);\n const fFormattedTransformPath = chalk.cyan(codemod.format());\n const fTimeElapsed =\n i === 0\n ? `${report.timeElapsed}s ${chalk.dim.italic('(cold start)')}`\n : `${report.timeElapsed}s`;\n const fAffected = report.ok > 0 ? chalk.green(report.ok) : chalk.grey(0);\n const fUnchanged = report.ok === 0 ? chalk.red(report.nochange) : chalk.grey(report.nochange);\n\n return [fIndex, fVersion, fKind, fFormattedTransformPath, fAffected, fUnchanged, fTimeElapsed];\n });\n\n const table = new CliTable3({\n style: { compact: true },\n head: [\n chalk.bold.grey('N°'),\n chalk.bold.magenta('Version'),\n chalk.bold.yellow('Kind'),\n chalk.bold.cyan('Name'),\n chalk.bold.green('Affected'),\n chalk.bold.red('Unchanged'),\n chalk.bold.blue('Duration'),\n ],\n });\n\n table.push(...rows);\n\n return table.toString();\n};\n\nexport const codemodList = (codemods: Codemod.List) => {\n type Row = [index: string, version: string, kind: string, name: string, uid: string];\n\n const rows = codemods.map<Row>((codemod, index) => {\n const fIndex = chalk.grey(index);\n const fVersion = chalk.magenta(codemod.version);\n const fKind = chalk.yellow(codemod.kind);\n const fName = chalk.blue(codemod.format());\n const fUID = codemodUID(codemod.uid);\n\n return [fIndex, fVersion, fKind, fName, fUID] satisfies Row;\n });\n\n const table = new CliTable3({\n style: { compact: true },\n head: [\n chalk.bold.grey('N°'),\n chalk.bold.magenta('Version'),\n chalk.bold.yellow('Kind'),\n chalk.bold.blue('Name'),\n chalk.bold.cyan('UID'),\n ],\n });\n\n table.push(...rows);\n\n return table.toString();\n};\n\nexport const durationMs = (elapsedMs: number) => {\n const elapsedSeconds = (elapsedMs / timerConstants.ONE_SECOND_MS).toFixed(3);\n\n return `${elapsedSeconds}s`;\n};\n","export const NPM_REGISTRY_URL = 'https://registry.npmjs.org';\n","export type Version = number;\n\nexport type LiteralVersion =\n | `${Version}`\n | `${Version}.${Version}`\n | `${Version}.${Version}.${Version}`;\n\nexport type LiteralSemVer = `${Version}.${Version}.${Version}`;\n\nexport type { SemVer, Range } from 'semver';\n\nexport enum ReleaseType {\n // Classic\n Major = 'major',\n Minor = 'minor',\n Patch = 'patch',\n // Other\n Latest = 'latest',\n}\n","import semver from 'semver';\n\nimport * as Version from './types';\n\nexport const semVerFactory = (version: string): Version.SemVer => {\n return new semver.SemVer(version);\n};\n\nexport const isLiteralSemVer = (str: string): str is Version.LiteralSemVer => {\n const tokens = str.split('.');\n\n return (\n tokens.length === 3 &&\n tokens.every((token) => !Number.isNaN(+token) && Number.isInteger(+token))\n );\n};\n\nexport const isValidSemVer = (str: string) => semver.valid(str) !== null;\n\nexport const isSemverInstance = (value: unknown): value is semver.SemVer => {\n return value instanceof semver.SemVer;\n};\n\nexport const isSemVerReleaseType = (str: string): str is Version.ReleaseType => {\n return Object.values(Version.ReleaseType).includes(str as Version.ReleaseType);\n};\n","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","import assert from 'node:assert';\nimport semver from 'semver';\n\nimport * as constants from './constants';\nimport { isLiteralSemVer } from '../version';\n\nimport type { Package as PackageInterface, NPMPackage, NPMPackageVersion } from './types';\nimport type { Version } from '../version';\n\nexport class Package implements PackageInterface {\n name: string;\n\n packageURL: string;\n\n private npmPackage: NPMPackage | null;\n\n constructor(name: string) {\n this.name = name;\n this.packageURL = `${constants.NPM_REGISTRY_URL}/${name}`;\n this.npmPackage = null;\n }\n\n get isLoaded() {\n return this.npmPackage !== null;\n }\n\n private assertPackageIsLoaded(npmPackage: NPMPackage | null): asserts npmPackage is NPMPackage {\n assert(this.isLoaded, 'The package is not loaded yet');\n }\n\n getVersionsDict() {\n this.assertPackageIsLoaded(this.npmPackage);\n\n return this.npmPackage.versions;\n }\n\n getVersionsAsList() {\n this.assertPackageIsLoaded(this.npmPackage);\n\n return Object.values(this.npmPackage.versions);\n }\n\n findVersionsInRange(range: Version.Range) {\n const versions = this.getVersionsAsList();\n\n return (\n versions\n // Only select versions matching the upgrade range\n .filter((v) => range.test(v.version))\n // Only select supported version format (x.x.x)\n .filter((v) => isLiteralSemVer(v.version))\n // Sort in ascending order\n .sort((v1, v2) => semver.compare(v1.version, v2.version))\n );\n }\n\n findVersion(version: Version.SemVer): NPMPackageVersion | undefined {\n const versions = this.getVersionsAsList();\n\n return versions.find((npmVersion) => semver.eq(npmVersion.version, version));\n }\n\n async refresh() {\n const response = await fetch(this.packageURL);\n\n // TODO: Use a validation library to make sure the response structure is correct\n assert(response.ok, `Request failed for ${this.packageURL}`);\n\n this.npmPackage = await response.json();\n\n return this;\n }\n\n versionExists(version: Version.SemVer) {\n return this.findVersion(version) !== undefined;\n }\n}\n\nexport const npmPackageFactory = (name: string) => new Package(name);\n","import path from 'node:path';\nimport fastglob from 'fast-glob';\n\nimport type { FileScanner as FileScannerInterface } from './types';\n\nexport class FileScanner implements FileScannerInterface {\n public cwd: string;\n\n constructor(cwd: string) {\n this.cwd = cwd;\n }\n\n scan(patterns: string[]) {\n // we use fastglob instead of glob because it supports negation patterns\n const filenames = fastglob.sync(patterns, {\n cwd: this.cwd,\n });\n\n // Resolve the full paths for every filename\n return filenames.map((filename) => path.join(this.cwd, filename));\n }\n}\n\nexport const fileScannerFactory = (cwd: string) => new FileScanner(cwd);\n","import type { Codemod } from '../codemod';\n\nimport type { Runner as RunnerInterface, RunnerConfiguration, RunnerFunction } from './types';\n\nexport abstract class AbstractRunner<TConfig extends RunnerConfiguration>\n implements RunnerInterface<TConfig>\n{\n abstract runner: RunnerFunction<TConfig>;\n\n paths: string[];\n\n configuration: TConfig;\n\n constructor(paths: string[], configuration: TConfig) {\n this.paths = paths;\n this.configuration = configuration;\n }\n\n async run(codemod: Codemod.Codemod, configuration?: TConfig) {\n const isValidCodemod = this.valid(codemod);\n\n if (!isValidCodemod) {\n throw new Error(`Invalid codemod provided to the runner: ${codemod.filename}`);\n }\n\n const runConfiguration: TConfig = { ...this.configuration, ...configuration };\n\n return this.runner(codemod.path, this.paths, runConfiguration);\n }\n\n abstract valid(codemod: Codemod.Codemod): boolean;\n}\n","import { run as jscodeshift } from 'jscodeshift/src/Runner';\n\nimport { AbstractRunner } from '../runner';\n\nimport type { Codemod } from '../../codemod';\nimport type { CodeRunnerConfiguration } from './types';\n\nexport class CodeRunner extends AbstractRunner<CodeRunnerConfiguration> {\n runner = jscodeshift;\n\n valid(codemod: Codemod.Codemod): boolean {\n return codemod.kind === 'code';\n }\n}\n\nexport const codeRunnerFactory = (paths: string[], configuration: CodeRunnerConfiguration) => {\n return new CodeRunner(paths, configuration);\n};\n","import { cloneDeep, get, has, set, merge, omit } from 'lodash/fp';\n\nimport type { Utils } from '@strapi/types';\n\nimport type { JSONTransformAPI as JSONTransformAPIInterface } from './types';\n\nexport class JSONTransformAPI implements JSONTransformAPIInterface {\n private json: Utils.JSONObject;\n\n constructor(json: Utils.JSONObject) {\n this.json = cloneDeep(json);\n }\n\n get<T extends Utils.JSONValue>(path: string): T | undefined;\n get<T extends Utils.JSONValue>(path: string, defaultValue: T): T;\n get<T extends Utils.JSONValue>(path?: string, defaultValue?: T) {\n if (!path) {\n return this.root() as T;\n }\n\n return cloneDeep(get(path, this.json) ?? defaultValue) as T;\n }\n\n has(path: string) {\n return has(path, this.json);\n }\n\n merge(other: Utils.JSONObject) {\n this.json = merge(other, this.json);\n\n return this;\n }\n\n root(): Utils.JSONObject {\n return cloneDeep(this.json);\n }\n\n set(path: string, value: Utils.JSONValue) {\n this.json = set(path, value, this.json);\n\n return this;\n }\n\n remove(path: string) {\n this.json = omit(path, this.json);\n return this;\n }\n}\n\nexport const createJSONTransformAPI = (object: Utils.JSONObject) => new JSONTransformAPI(object);\n","import fse from 'fs-extra';\n\nimport type { Utils } from '@strapi/types';\n\nexport const readJSON = async (path: string): Promise<Utils.JSONValue> => {\n const buffer = await fse.readFile(path);\n\n return JSON.parse(buffer.toString());\n};\n\nexport const saveJSON = async (path: string, json: Utils.JSONValue): Promise<void> => {\n const jsonAsString = `${JSON.stringify(json, null, 2)}\\n`;\n\n await fse.writeFile(path, jsonAsString);\n};\n","/* 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","import { AbstractRunner } from '../runner';\n\nimport { transformJSON } from './transform';\n\nimport type { Codemod } from '../../codemod';\nimport type { JSONRunnerConfiguration } from './types';\n\nexport class JSONRunner extends AbstractRunner<JSONRunnerConfiguration> {\n runner = transformJSON;\n\n valid(codemod: Codemod.Codemod): boolean {\n return codemod.kind === 'json';\n }\n}\n\nexport const jsonRunnerFactory = (paths: string[], configuration: JSONRunnerConfiguration) => {\n return new JSONRunner(paths, configuration);\n};\n","export const PROJECT_PACKAGE_JSON = 'package.json';\n\nexport const PROJECT_APP_ALLOWED_ROOT_PATHS = ['src', 'config', 'public'];\n\nexport const PROJECT_PLUGIN_ALLOWED_ROOT_PATHS = ['admin', 'server'];\n\nexport const PROJECT_PLUGIN_ROOT_FILES = ['strapi-admin.js', 'strapi-server.js'];\n\nexport const PROJECT_CODE_EXTENSIONS = [\n // Source files\n 'js',\n 'mjs',\n 'ts',\n // React files\n 'jsx',\n 'tsx',\n];\n\nexport const PROJECT_JSON_EXTENSIONS = ['json'];\n\nexport const PROJECT_ALLOWED_EXTENSIONS = [...PROJECT_CODE_EXTENSIONS, ...PROJECT_JSON_EXTENSIONS];\n\nexport const SCOPED_STRAPI_PACKAGE_PREFIX = '@strapi/';\n\nexport const STRAPI_DEPENDENCY_NAME = `${SCOPED_STRAPI_PACKAGE_PREFIX}strapi`;\n","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","import { AppProject, PluginProject } from './project';\n\nexport const isPluginProject = (project: unknown): project is PluginProject => {\n return project instanceof PluginProject;\n};\n\nexport function assertPluginProject(project: unknown): asserts project is PluginProject {\n if (!isPluginProject(project)) {\n throw new Error('Project is not a plugin');\n }\n}\n\nexport const isApplicationProject = (project: unknown): project is AppProject => {\n return project instanceof AppProject;\n};\n\nexport function assertAppProject(project: unknown): asserts project is AppProject {\n if (!isApplicationProject(project)) {\n throw new Error('Project is not an application');\n }\n}\n","import type { Version } from '../version';\n\nexport class UnexpectedError extends Error {\n constructor() {\n super('Unexpected Error');\n }\n}\n\nexport class NPMCandidateNotFoundError extends Error {\n target: Version.SemVer | Version.Range | Version.ReleaseType;\n\n constructor(\n target: Version.SemVer | Version.Range | Version.ReleaseType,\n message: string = `Couldn't find a valid NPM candidate for \"${target}\"`\n ) {\n super(message);\n\n this.target = target;\n }\n}\n\nexport class AbortedError extends Error {\n constructor(message: string = 'Upgrade aborted') {\n super(message);\n }\n}\n\nexport const unknownToError = (e: unknown): Error => {\n if (e instanceof Error) {\n return e;\n }\n\n if (typeof e === 'string') {\n return new Error(e);\n }\n\n return new UnexpectedError();\n};\n","export const CODEMOD_CODE_SUFFIX = 'code';\n\nexport const CODEMOD_JSON_SUFFIX = 'json';\n\nexport const CODEMOD_ALLOWED_SUFFIXES = [CODEMOD_CODE_SUFFIX, CODEMOD_JSON_SUFFIX];\n\nexport const CODEMOD_EXTENSION = 'ts';\n\nexport const CODEMOD_FILE_REGEXP = new RegExp(\n `^.+[.](${CODEMOD_ALLOWED_SUFFIXES.join('|')})[.]${CODEMOD_EXTENSION}$`\n);\n","import path from 'node:path';\n\nimport * as constants from './constants';\n\nimport type { Codemod as CodemodInterface, FormatOptions, Kind, UID } from './types';\nimport type { Version } from '../version';\n\ntype CreateCodemodPayload = Pick<\n CodemodInterface,\n 'kind' | 'version' | 'baseDirectory' | 'filename'\n>;\n\nexport class Codemod implements CodemodInterface {\n uid: UID;\n\n kind: Kind;\n\n version: Version.SemVer;\n\n baseDirectory: string;\n\n filename: string;\n\n path: string;\n\n constructor(options: CreateCodemodPayload) {\n this.kind = options.kind;\n this.version = options.version;\n this.baseDirectory = options.baseDirectory;\n this.filename = options.filename;\n\n this.path = path.join(this.baseDirectory, this.version.raw, this.filename);\n this.uid = this.createUID();\n }\n\n private createUID(): UID {\n const name = this.format({ stripExtension: true, stripKind: true, stripHyphens: false });\n const kind = this.kind;\n const version = this.version.raw as Version.LiteralSemVer;\n\n return `${version}-${name}-${kind}`;\n }\n\n format(options?: FormatOptions) {\n const { stripExtension = true, stripKind = true, stripHyphens = true } = options ?? {};\n\n let formatted = this.filename;\n\n if (stripExtension) {\n formatted = formatted.replace(new RegExp(`\\\\.${constants.CODEMOD_EXTENSION}$`, 'i'), '');\n }\n\n if (stripKind) {\n formatted = formatted\n .replace(`.${constants.CODEMOD_CODE_SUFFIX}`, '')\n .replace(`.${constants.CODEMOD_JSON_SUFFIX}`, '');\n }\n\n if (stripHyphens) {\n formatted = formatted.replaceAll('-', ' ');\n }\n\n return formatted;\n }\n}\n\nexport const codemodFactory = (options: CreateCodemodPayload) => new Codemod(options);\n","import path from 'node:path';\n\nexport const INTERNAL_CODEMODS_DIRECTORY = path.join(\n __dirname, // upgrade/dist\n '..',\n '..',\n 'resources', // upgrade/resources\n 'codemods' // upgrade/resources/codemods\n);\n","import assert from 'node:assert';\nimport fse from 'fs-extra';\nimport semver from 'semver';\nimport path from 'node:path';\n\nimport { codemodFactory, constants } from '../codemod';\nimport { isRangeInstance, semVerFactory } from '../version';\n\nimport { INTERNAL_CODEMODS_DIRECTORY } from './constants';\n\nimport type { Codemod } from '../codemod';\nimport type { Version } from '../version';\n\nimport type { CodemodRepository as CodemodRepositoryInterface, FindQuery } from './types';\n\nexport class CodemodRepository implements CodemodRepositoryInterface {\n private groups: Record<Version.LiteralSemVer, Codemod.Codemod[]>;\n\n private versions: Version.SemVer[];\n\n public cwd: string;\n\n constructor(cwd: string) {\n assert(fse.existsSync(cwd), `Invalid codemods directory provided \"${cwd}\"`);\n\n this.cwd = cwd;\n\n this.groups = {};\n this.versions = [];\n }\n\n refresh() {\n this.refreshAvailableVersions();\n this.refreshAvailableFiles();\n\n return this;\n }\n\n count(version: Version.SemVer) {\n return this.findByVersion(version).length;\n }\n\n versionExists(version: Version.SemVer) {\n return version.raw in this.groups;\n }\n\n has(uid: string) {\n const result = this.find({ uids: [uid] });\n\n if (result.length !== 1) {\n return false;\n }\n\n const { codemods } = result[0];\n\n return codemods.length === 1 && codemods[0].uid === uid;\n }\n\n find(q: FindQuery) {\n const entries = Object.entries(this.groups) as Array<[Version.LiteralSemVer, Codemod.List]>;\n\n return (\n entries\n // Filter by range if provided in the query\n .filter(maybeFilterByRange)\n // Transform version/codemods tuples into regular objects\n .map<Codemod.VersionedCollection>(([version, codemods]) => ({\n version: semVerFactory(version),\n // Filter by UID if provided in the query\n codemods: codemods.filter(maybeFilterByUIDs),\n }))\n // Only return groups with at least 1 codemod\n .filter(({ codemods }) => codemods.length > 0)\n );\n\n function maybeFilterByRange([version]: [Version.LiteralSemVer, Codemod.List]) {\n if (!isRangeInstance(q.range)) {\n return true;\n }\n\n return q.range.test(version);\n }\n\n function maybeFilterByUIDs(codemod: Codemod.Codemod) {\n if (q.uids === undefined) {\n return true;\n }\n\n return q.uids.includes(codemod.uid);\n }\n }\n\n findByVersion(version: Version.SemVer) {\n const literalVersion = version.raw as Version.LiteralSemVer;\n const codemods = this.groups[literalVersion];\n\n return codemods ?? [];\n }\n\n findAll() {\n const entries = Object.entries(this.groups);\n\n return entries.map<Codemod.VersionedCollection>(([version, codemods]) => ({\n version: semVerFactory(version),\n codemods,\n }));\n }\n\n private refreshAvailableVersions() {\n this.versions = fse\n .readdirSync(this.cwd) // Only keep root directories\n .filter((filename) => fse.statSync(path.join(this.cwd, filename)).isDirectory())\n // Paths should be valid semver\n .filter((filename): filename is Version.LiteralSemVer => semver.valid(filename) !== null)\n // Transform files names to SemVer instances\n .map<Version.SemVer>((version) => semVerFactory(version))\n // Sort versions in ascending order\n .sort(semver.compare);\n\n return this;\n }\n\n private refreshAvailableFiles() {\n this.groups = {};\n\n for (const version of this.versions) {\n this.refreshAvailableFilesForVersion(version);\n }\n }\n\n private refreshAvailableFilesForVersion(version: Version.SemVer) {\n const literalVersion = version.raw as Version.LiteralSemVer;\n const versionDirectory = path.join(this.cwd, literalVersion);\n\n // Ignore obsolete versions\n if (!fse.existsSync(versionDirectory)) {\n return;\n }\n\n this.groups[literalVersion] = fse\n .readdirSync(versionDirectory)\n // Make sure the filenames are valid codemod files\n .filter((filename) => fse.statSync(path.join(versionDirectory, filename)).isFile())\n .filter((filename) => constants.CODEMOD_FILE_REGEXP.test(filename))\n // Transform the filenames into Codemod instances\n .map((filename) => {\n const kind = parseCodemodKindFromFilename(filename);\n const baseDirectory = this.cwd;\n\n return codemodFactory({ kind, baseDirectory, version, filename });\n });\n }\n}\n\nexport const parseCodemodKindFromFilename = (filename: string): Codemod.Kind => {\n const kind = filename.split('.').at(-2) as Codemod.Kind | undefined;\n\n assert(kind !== undefined);\n assert(constants.CODEMOD_ALLOWED_SUFFIXES.includes(kind));\n\n return kind;\n};\n\nexport const codemodRepositoryFactory = (cwd: string = INTERNAL_CODEMODS_DIRECTORY) => {\n return new CodemodRepository(cwd);\n};\n","import { groupBy, size } from 'lodash/fp';\n\nimport {\n codemodRepositoryFactory,\n constants as codemodRepositoryConstants,\n} from '../codemod-repository';\nimport { unknownToError } from '../error';\nimport { semVerFactory } from '../version';\nimport * as f from '../format';\n\nimport type { Codemod } from '../codemod';\nimport type { Logger } from '../logger';\nimport type { Project } from '../project';\nimport type { UpgradeReport } from '../upgrader';\nimport type { CodemodRunnerInterface, CodemodRunnerReport, SelectCodemodsCallback } from './types';\nimport type { Version } from '../version';\n\nexport class CodemodRunner implements CodemodRunnerInterface {\n private readonly project: Project;\n\n private range: Version.Range;\n\n private isDry: boolean;\n\n private logger: Logger | null;\n\n private selectCodemodsCallback: SelectCodemodsCallback | null;\n\n constructor(project: Project, range: Version.Range) {\n this.project = project;\n this.range = range;\n\n this.isDry = false;\n\n this.logger = null;\n this.selectCodemodsCallback = null;\n }\n\n setRange(range: Version.Range) {\n this.range = range;\n return this;\n }\n\n setLogger(logger: Logger) {\n this.logger = logger;\n return this;\n }\n\n onSelectCodemods(callback: SelectCodemodsCallback | null) {\n this.selectCodemodsCallback = callback;\n return this;\n }\n\n dry(enabled: boolean = true) {\n this.isDry = enabled;\n return this;\n }\n\n private createRepository(codemodsDirectory?: string) {\n const repository = codemodRepositoryFactory(\n codemodsDirectory ?? codemodRepositoryConstants.INTERNAL_CODEMODS_DIRECTORY\n );\n\n // Make sure we have access to the latest snapshots of codemods on the system\n repository.refresh();\n\n return repository;\n }\n\n private async safeRunAndReport(codemods: Codemod.List) {\n if (this.isDry) {\n this.logger?.warn?.(\n 'Running the codemods in dry mode. No files will be modified during the process.'\n );\n }\n\n try {\n const reports = await this.project.runCodemods(codemods, { dry: this.isDry });\n\n this.logger?.raw?.(f.reports(reports));\n\n if (!this.isDry) {\n const nbAffectedTotal = reports\n .flatMap((report) => report.report.ok)\n .reduce((acc, nb) => acc + nb, 0);\n\n this.logger?.debug?.(\n `Successfully ran ${f.highlight(codemods.length)} codemod(s), ${f.highlight(nbAffectedTotal)} change(s) have been detected`\n );\n }\n\n return successReport();\n } catch (e: unknown) {\n return erroredReport(unknownToError(e));\n }\n }\n\n async runByUID(uid: string, codemodsDirectory?: string): Promise<CodemodRunnerReport> {\n const repository = this.createRepository(codemodsDirectory);\n\n if (!repository.has(uid)) {\n throw new Error(`Unknown codemod UID provided: ${uid}`);\n }\n\n // Note: Ignore the range when running with a UID\n const codemods = repository.find({ uids: [uid] }).flatMap(({ codemods }) => codemods);\n\n return this.safeRunAndReport(codemods);\n }\n\n async run(codemodsDirectory?: string): Promise<CodemodRunnerReport> {\n const repository = this.createRepository(codemodsDirectory);\n\n // Find codemods matching the given range\n const codemodsInRange = repository.find({ range: this.range });\n\n // If a selection callback is set, use it, else keep every codemods found\n const selectedCodemods = this.selectCodemodsCallback\n ? await this.selectCodemodsCallback(codemodsInRange)\n : codemodsInRange;\n\n // If no codemods have been selected (either manually or automatically)\n // Then ignore and return a successful report\n if (selectedCodemods.length === 0) {\n this.logger?.debug?.(`Found no codemods to run for ${f.versionRange(this.range)}`);\n return successReport();\n }\n\n // Flatten the collection to a single list of codemods, the original list should already be sorted by version\n const codemods = selectedCodemods.flatMap(({ codemods }) => codemods);\n\n // Log (debug) the codemods by version\n const codemodsByVersion = groupBy('version', codemods);\n const fRange = f.versionRange(this.range);\n\n this.logger?.debug?.(\n `Found ${f.highlight(codemods.length)} codemods for ${f.highlight(size(codemodsByVersion))} version(s) using ${fRange}`\n );\n\n for (const [version, codemods] of Object.entries(codemodsByVersion)) {\n this.logger?.debug?.(`- ${f.version(semVerFactory(version))} (${codemods.length})`);\n }\n\n return this.safeRunAndReport(codemods);\n }\n}\n\nexport const codemodRunnerFactory = (project: Project, range: Version.Range) => {\n return new CodemodRunner(project, range);\n};\n\nconst successReport = (): UpgradeReport => ({ success: true, error: null });\nconst erroredReport = (error: Error): UpgradeReport => ({ success: false, error });\n","import chalk from 'chalk';\nimport semver from 'semver';\nimport { packageManager } from '@strapi/utils';\n\nimport { createJSONTransformAPI, saveJSON } from '../json';\nimport { constants as projectConstants } from '../project';\nimport {\n isSemverInstance,\n isSemVerReleaseType,\n isValidSemVer,\n rangeFromVersions,\n semVerFactory,\n} from '../version';\nimport { NPMCandidateNotFoundError, unknownToError } from '../error';\nimport * as f from '../format';\nimport { codemodRunnerFactory } from '../codemod-runner';\n\nimport type { Upgrader as UpgraderInterface, UpgradeReport } from './types';\nimport type { Version } from '../version';\nimport type { Logger } from '../logger';\nimport type { Requirement } from '../requirement';\nimport type { NPM } from '../npm';\nimport type { AppProject } from '../project';\nimport type { ConfirmationCallback } from '../common/types';\n\ntype DependenciesEntries = Array<[name: string, version: Version.SemVer]>;\n\nexport class Upgrader implements UpgraderInterface {\n private readonly project: AppProject;\n\n private readonly npmPackage: NPM.Package;\n\n private target: Version.SemVer;\n\n private codemodsTarget!: Version.SemVer;\n\n private isDry: boolean;\n\n private logger: Logger | null;\n\n private requirements: Requirement.Requirement[];\n\n private confirmationCallback: ConfirmationCallback | null;\n\n constructor(project: AppProject, target: Version.SemVer, npmPackage: NPM.Package) {\n this.project = project;\n this.npmPackage = npmPackage;\n\n this.target = target;\n this.syncCodemodsTarget();\n\n this.isDry = false;\n\n this.requirements = [];\n\n this.logger = null;\n this.confirmationCallback = null;\n }\n\n getNPMPackage(): NPM.Package {\n return this.npmPackage;\n }\n\n getProject(): AppProject {\n return this.project;\n }\n\n getTarget(): Version.SemVer {\n return semVerFactory(this.target.raw);\n }\n\n setRequirements(requirements: Requirement.Requirement[]) {\n this.requirements = requirements;\n return this;\n }\n\n setTarget(target: Version.SemVer) {\n this.target = target;\n return this;\n }\n\n syncCodemodsTarget() {\n // Extract the <major>.<minor>.<patch> version from the target and assign it to the codemods target\n //\n // This is useful when dealing with alphas, betas or release candidates:\n // e.g. \"5.0.0-beta.951\" becomes \"5.0.0\"\n //\n // For experimental versions (e.g. \"0.0.0-experimental.hex\"), it is necessary to\n // override the codemods target manually in order to run the appropriate ones.\n this.codemodsTarget = semVerFactory(\n `${this.target.major}.${this.target.minor}.${this.target.patch}`\n );\n\n this.logger?.debug?.(\n `The codemods target has been synced with the upgrade target. The codemod runner will now look for ${f.version(\n this.codemodsTarget\n )}`\n );\n\n return this;\n }\n\n overrideCodemodsTarget(target: Version.SemVer) {\n this.codemodsTarget = target;\n\n this.logger?.debug?.(\n `Overriding the codemods target. The codemod runner will now look for ${f.version(target)}`\n );\n\n return this;\n }\n\n setLogger(logger: Logger) {\n this.logger = logger;\n return this;\n }\n\n onConfirm(callback: ConfirmationCallback | null) {\n this.confirmationCallback = callback;\n return this;\n }\n\n dry(enabled: boolean = true) {\n this.isDry = enabled;\n return this;\n }\n\n addRequirement(requirement: Requirement.Requirement) {\n this.requirements.push(requirement);\n\n const fRequired = requirement.isRequired ? '(required)' : '(optional)';\n this.logger?.debug?.(\n `Added a new requirement to the upgrade: ${f.highlight(requirement.name)} ${fRequired}`\n );\n\n return this;\n }\n\n async upgrade(): Promise<UpgradeReport> {\n this.logger?.info?.(\n `Upgrading from ${f.version(this.project.strapiVersion)} to ${f.version(this.target)}`\n );\n\n if (this.isDry) {\n this.logger?.warn?.(\n 'Running the upgrade in dry mode. No files will be modified during the process.'\n );\n }\n\n const range = rangeFromVersions(this.project.strapiVersion, this.target);\n const codemodsRange = rangeFromVersions(this.project.strapiVersion, this.codemodsTarget);\n\n const npmVersionsMatches = this.npmPackage?.findVersionsInRange(range) ?? [];\n\n this.logger?.debug?.(\n `Found ${f.highlight(npmVersionsMatches.length)} versions satisfying ${f.versionRange(range)}`\n );\n\n try {\n this.logger?.info?.(f.upgradeStep('Checking requirement', [1, 4]));\n await this.checkRequirements(this.requirements, {\n npmVersionsMatches,\n project: this.project,\n target: this.target,\n });\n\n this.logger?.info?.(f.upgradeStep('Applying the latest code modifications', [2, 4]));\n await this.runCodemods(codemodsRange);\n\n // We need to refresh the project files to make sure we have\n // the latest version of each file (including package.json) for the next steps\n this.logger?.debug?.('Refreshing project information...');\n this.project.refresh();\n\n this.logger?.info?.(f.upgradeStep('Upgrading Strapi dependencies', [3, 4]));\n await this.updateDependencies();\n\n this.logger?.info?.(f.upgradeStep('Installing dependencies', [4, 4]));\n await this.installDependencies();\n } catch (e) {\n return erroredReport(unknownToError(e));\n }\n\n return successReport();\n }\n\n async confirm(message: string): Promise<boolean> {\n if (typeof this.confirmationCallback !== 'function') {\n return true;\n }\n\n return this.confirmationCallback(message);\n }\n\n private async checkRequirements(\n requirements: Requirement.Requirement[],\n context: Requirement.TestContext\n ) {\n for (const requirement of requirements) {\n const { pass, error } = await requirement.test(context);\n\n if (pass) {\n await this.onSuccessfulRequirement(requirement, context);\n } else {\n await this.onFailedRequirement(requirement, error);\n }\n }\n }\n\n private async onSuccessfulRequirement(\n requirement: Requirement.Requirement,\n context: Requirement.TestContext\n ): Promise<void> {\n const hasChildren = requirement.children.length > 0;\n\n if (hasChildren) {\n await this.checkRequirements(requirement.children, context);\n }\n }\n\n private async onFailedRequirement(\n requirement: Requirement.Requirement,\n originalError: Error\n ): Promise<void> {\n const errorMessage = `Requirement failed: ${originalError.message} (${f.highlight(\n requirement.name\n )})`;\n const warningMessage = originalError.message;\n const confirmationMessage = `Ignore optional requirement \"${f.highlight(requirement.name)}\" ?`;\n\n const error = new Error(errorMessage);\n\n if (requirement.isRequired) {\n throw error;\n }\n\n this.logger?.warn?.(warningMessage);\n\n const response = await this.confirmationCallback?.(confirmationMessage);\n\n if (!response) {\n throw error;\n }\n }\n\n private async updateDependencies(): Promise<void> {\n const { packageJSON, packageJSONPath } = this.project;\n\n const json = createJSONTransformAPI(packageJSON);\n\n const dependencies = json.get<Record<string, string>>('dependencies', {});\n const strapiDependencies = this.getScopedStrapiDependencies(dependencies);\n\n this.logger?.debug?.(\n `Found ${f.highlight(strapiDependencies.length)} dependency(ies) to update`\n );\n strapiDependencies.forEach((dependency) =>\n this.logger?.debug?.(`- ${dependency[0]} (${dependency[1]} -> ${this.target})`)\n );\n\n if (strapiDependencies.length === 0) {\n return;\n }\n\n strapiDependencies.forEach(([name]) => json.set(`dependencies.${name}`, this.target.raw));\n\n const updatedPackageJSON = json.root();\n\n if (this.isDry) {\n this.logger?.debug?.(`Skipping dependencies update (${chalk.italic('dry mode')})`);\n return;\n }\n\n await saveJSON(packageJSONPath, updatedPackageJSON);\n }\n\n private getScopedStrapiDependencies(dependencies: Record<string, string>): DependenciesEntries {\n const { strapiVersion } = this.project;\n\n const strapiDependencies: DependenciesEntries = [];\n\n // Find all @strapi/* packages matching the current Strapi version\n for (const [name, version] of Object.entries(dependencies)) {\n const isScopedStrapiPackage = name.startsWith(projectConstants.SCOPED_STRAPI_PACKAGE_PREFIX);\n const isOnCurrentStrapiVersion = isValidSemVer(version) && version === strapiVersion.raw;\n\n if (isScopedStrapiPackage && isOnCurrentStrapiVersion) {\n strapiDependencies.push([name, semVerFactory(version)]);\n }\n }\n\n return strapiDependencies;\n }\n\n private async installDependencies(): Promise<void> {\n const projectPath = this.project.cwd;\n\n const packageManagerName = await packageManager.getPreferred(projectPath);\n\n this.logger?.debug?.(`Using ${f.highlight(packageManagerName)} as package manager`);\n\n if (this.isDry) {\n this.logger?.debug?.(`Skipping dependencies installation (${chalk.italic('dry mode')})`);\n return;\n }\n\n await packageManager.installDependencies(projectPath, packageManagerName, {\n stdout: this.logger?.stdout,\n stderr: this.logger?.stderr,\n });\n }\n\n private async runCodemods(range: Version.Range): Promise<void> {\n const codemodRunner = codemodRunnerFactory(this.project, range);\n\n codemodRunner.dry(this.isDry);\n\n if (this.logger) {\n codemodRunner.setLogger(this.logger);\n }\n\n await codemodRunner.run();\n }\n}\n\n/**\n * Resolves the NPM target version based on the given project, target, and NPM package.\n * If target is a SemVer, it directly finds it. If it's a release type (major, minor, patch),\n * it calculates the range of versions for this release type and returns the latest version within this range.\n */\nconst resolveNPMTarget = (\n project: AppProject,\n target: Version.ReleaseType | Version.SemVer,\n npmPackage: NPM.Package\n): NPM.NPMPackageVersion => {\n // Semver\n if (isSemverInstance(target)) {\n const version = npmPackage.findVersion(target);\n\n if (!version) {\n throw new NPMCandidateNotFoundError(target);\n }\n\n return version;\n }\n\n // Release Types\n if (isSemVerReleaseType(target)) {\n const range = rangeFromVersions(project.strapiVersion, target);\n const npmVersionsMatches = npmPackage.findVersionsInRange(range);\n\n // The targeted version is the latest one that matches the given range\n const version = npmVersionsMatches.at(-1);\n\n if (!version) {\n throw new NPMCandidateNotFoundError(range, `The project is already up-to-date (${target})`);\n }\n\n return version;\n }\n\n throw new NPMCandidateNotFoundError(target);\n};\n\nexport const upgraderFactory = (\n project: AppProject,\n target: Version.ReleaseType | Version.SemVer,\n npmPackage: NPM.Package\n) => {\n const npmTarget = resolveNPMTarget(project, target, npmPackage);\n const semverTarget = semVerFactory(npmTarget.version);\n\n if (semver.eq(semverTarget, project.strapiVersion)) {\n throw new Error(`The project is already using v${semverTarget}`);\n }\n\n return new Upgrader(project, semverTarget, npmPackage);\n};\n\nconst successReport = (): UpgradeReport => ({ success: true, error: null });\nconst erroredReport = (error: Error): UpgradeReport => ({ success: false, error });\n","export const STRAPI_PACKAGE_NAME = '@strapi/strapi';\n","import type {\n Requirement as RequirementInterface,\n RequirementTestCallback,\n TestContext,\n TestResult,\n} from './types';\n\nexport class Requirement implements RequirementInterface {\n readonly isRequired: boolean;\n\n readonly name: string;\n\n readonly testCallback: RequirementTestCallback | null;\n\n children: RequirementInterface[];\n\n constructor(name: string, testCallback: RequirementTestCallback | null, isRequired?: boolean) {\n this.name = name;\n this.testCallback = testCallback;\n this.isRequired = isRequired ?? true;\n this.children = [];\n }\n\n setChildren(children: RequirementInterface[]) {\n this.children = children;\n return this;\n }\n\n addChild(child: RequirementInterface) {\n this.children.push(child);\n return this;\n }\n\n asOptional() {\n const newInstance = requirementFactory(this.name, this.testCallback, false);\n\n newInstance.setChildren(this.children);\n\n return newInstance;\n }\n\n asRequired() {\n const newInstance = requirementFactory(this.name, this.testCallback, true);\n\n newInstance.setChildren(this.children);\n\n return newInstance;\n }\n\n async test(context: TestContext) {\n try {\n await this.testCallback?.(context);\n return ok();\n } catch (e) {\n if (e instanceof Error) {\n return errored(e);\n }\n\n if (typeof e === 'string') {\n return errored(new Error(e));\n }\n\n return errored(new Error('Unknown error'));\n }\n }\n}\n\nconst ok = (): TestResult => ({ pass: true, error: null });\n\nconst errored = (error: Error): TestResult => ({ pass: false, error });\n\nexport const requirementFactory = (\n name: string,\n testCallback: RequirementTestCallback | null,\n isRequired?: boolean\n) => new Requirement(name, testCallback, isRequired);\n","import { requirementFactory } from '../../../modules/requirement';\nimport { semVerFactory } from '../../../modules/version';\n\nexport const REQUIRE_AVAILABLE_NEXT_MAJOR = requirementFactory(\n 'REQUIRE_AVAILABLE_NEXT_MAJOR',\n (context) => {\n const { project, target } = context;\n\n const currentMajor = project.strapiVersion.major;\n const targetedMajor = target.major;\n\n if (targetedMajor === currentMajor) {\n throw new Error(`You're already on the latest major version (v${currentMajor})`);\n }\n }\n);\n\nexport const REQUIRE_LATEST_FOR_CURRENT_MAJOR = requirementFactory(\n 'REQUIRE_LATEST_FOR_CURRENT_MAJOR',\n (context) => {\n const { project, target, npmVersionsMatches } = context;\n const { major: currentMajor } = project.strapiVersion;\n\n const invalidMatches = npmVersionsMatches.filter(\n (match) => semVerFactory(match.version).major === currentMajor\n );\n\n if (invalidMatches.length > 0) {\n const invalidVersions = invalidMatches.map((match) => match.version);\n const invalidVersionsCount = invalidVersions.length;\n\n throw new Error(\n `Doing a major upgrade requires to be on the latest v${currentMajor} version, but found ${invalidVersionsCount} versions between the current one and ${target}. Please upgrade to ${invalidVersions.at(-1)} and try again.`\n );\n }\n }\n);\n","import simpleGit from 'simple-git';\n\nimport { requirementFactory } from '../../../modules/requirement';\n\nexport const REQUIRE_GIT_CLEAN_REPOSITORY = requirementFactory(\n 'REQUIRE_GIT_CLEAN_REPOSITORY',\n async (context) => {\n const git = simpleGit({ baseDir: context.project.cwd });\n\n const status = await git.status();\n\n if (!status.isClean()) {\n throw new Error(\n 'Repository is not clean. Please commit or stash any changes before upgrading'\n );\n }\n }\n);\n\nexport const REQUIRE_GIT_REPOSITORY = requirementFactory(\n 'REQUIRE_GIT_REPOSITORY',\n async (context) => {\n const git = simpleGit({ baseDir: context.project.cwd });\n\n const isRepo = await git.checkIsRepo();\n\n if (!isRepo) {\n throw new Error('Not a git repository (or any of the parent directories)');\n }\n }\n).addChild(REQUIRE_GIT_CLEAN_REPOSITORY.asOptional());\n\nexport const REQUIRE_GIT_INSTALLED = requirementFactory(\n 'REQUIRE_GIT_INSTALLED',\n async (context) => {\n const git = simpleGit({ baseDir: context.project.cwd });\n\n try {\n await git.version();\n } catch {\n throw new Error('Git is not installed');\n }\n }\n).addChild(REQUIRE_GIT_REPOSITORY.asOptional());\n\nexport const REQUIRE_GIT = requirementFactory('REQUIRE_GIT', null).addChild(\n REQUIRE_GIT_INSTALLED.asOptional()\n);\n","import { AbortedError } from '../../../modules/error';\nimport * as f from '../../../modules/format';\n\nimport { rangeFactory, semVerFactory, Version } from '../../../modules/version';\n\nimport type { Upgrader } from '../../../modules/upgrader';\nimport type { UpgradeOptions } from '../types';\n\n/**\n * Handles the upgrade prompts when using the latest tag.\n *\n * - checks if an upgrade involves a major bump, warning and asking for user confirmation before proceeding\n */\nexport const latest = async (upgrader: Upgrader, options: UpgradeOptions) => {\n // Exit if the upgrade target isn't the latest tag\n if (options.target !== Version.ReleaseType.Latest) {\n return;\n }\n\n // Retrieve utilities from the upgrader instance\n const npmPackage = upgrader.getNPMPackage();\n const target = upgrader.getTarget();\n const project = upgrader.getProject();\n\n const { strapiVersion: current } = project;\n\n // Pre-formatted strings used in logs\n const fTargetMajor = f.highlight(`v${target.major}`);\n const fCurrentMajor = f.highlight(`v${current.major}`);\n\n const fTarget = f.version(target);\n const fCurrent = f.version(current);\n\n // Flags\n const isMajorUpgrade = target.major > current.major;\n\n // Handle potential major upgrade, warns, and asks for confirmation to proceed\n if (isMajorUpgrade) {\n options.logger.warn(\n `Detected a major upgrade for the \"${f.highlight(Version.ReleaseType.Latest)}\" tag: ${fCurrent} > ${fTarget}`\n );\n\n // Find the latest release in between the current one and the next major\n const newerPackageRelease = npmPackage\n .findVersionsInRange(rangeFactory(`>${current.raw} <${target.major}`))\n .at(-1);\n\n // If the project isn't on the latest version for the current major, emit a warning\n if (newerPackageRelease) {\n const fLatest = f.version(semVerFactory(newerPackageRelease.version));\n options.logger.warn(\n `It's recommended to first upgrade to the latest version of ${fCurrentMajor} (${fLatest}) before upgrading to ${fTargetMajor}.`\n );\n }\n\n const proceedAnyway = await upgrader.confirm(`I know what I'm doing. Proceed anyway!`);\n\n if (!proceedAnyway) {\n throw new AbortedError();\n }\n }\n};\n","import path from 'node:path';\n\nimport * as f from '../../modules/format';\nimport { npmPackageFactory } from '../../modules/npm';\nimport { isApplicationProject, projectFactory } from '../../modules/project';\nimport { timerFactory } from '../../modules/timer';\nimport { constants as upgraderConstants, upgraderFactory } from '../../modules/upgrader';\nimport { Version } from '../../modules/version';\n\nimport * as requirements from './requirements';\nimport * as prompts from './prompts';\n\nimport type { UpgradeOptions } from './types';\nimport type { Upgrader } from '../../modules/upgrader';\n\nexport const upgrade = async (options: UpgradeOptions) => {\n const timer = timerFactory();\n const { logger, codemodsTarget } = options;\n\n // Resolves the correct working directory based on the given input\n const cwd = path.resolve(options.cwd ?? process.cwd());\n\n const project = projectFactory(cwd);\n\n logger.debug(f.projectDetails(project));\n\n if (!isApplicationProject(project)) {\n throw new Error(\n `The \"${options.target}\" upgrade can only be run on a Strapi project; for plugins, please use \"codemods\".`\n );\n }\n\n logger.debug(\n `Application: VERSION=${f.version(project.packageJSON.version as Version.LiteralVersion)}; STRAPI_VERSION=${f.version(project.strapiVersion)}`\n );\n\n const npmPackage = npmPackageFactory(upgraderConstants.STRAPI_PACKAGE_NAME);\n\n // Load all available versions from the NPM registry\n await npmPackage.refresh();\n\n // Initialize the upgrade instance\n // Throws during initialization if the provided target is incompatible with the current version\n const upgrader = upgraderFactory(project, options.target, npmPackage)\n .dry(options.dry ?? false)\n .onConfirm(options.confirm ?? null)\n .setLogger(logger);\n\n // Manually override the target version for codemods if it's explicitly provided\n if (codemodsTarget !== undefined) {\n upgrader.overrideCodemodsTarget(codemodsTarget);\n }\n\n // Prompt user for confirmation details before upgrading\n await runUpgradePrompts(upgrader, options);\n\n // Add specific requirements before upgrading\n addUpgradeRequirements(upgrader, options);\n\n // Actually run the upgrade process once configured,\n // The response contains information about the final status: success/error\n const upgradeReport = await upgrader.upgrade();\n\n if (!upgradeReport.success) {\n throw upgradeReport.error;\n }\n\n timer.stop();\n\n logger.info(`Completed in ${f.durationMs(timer.elapsedMs)}ms`);\n};\n\nconst runUpgradePrompts = async (upgrader: Upgrader, options: UpgradeOptions) => {\n if (options.target === Version.ReleaseType.Latest) {\n await prompts.latest(upgrader, options);\n }\n};\n\nconst addUpgradeRequirements = (upgrader: Upgrader, options: UpgradeOptions): void => {\n // Don't add the same requirements when manually targeting a major upgrade\n // using a semver as it's implied that the users know what they're doing\n if (options.target === Version.ReleaseType.Major) {\n upgrader\n .addRequirement(requirements.major.REQUIRE_AVAILABLE_NEXT_MAJOR)\n .addRequirement(requirements.major.REQUIRE_LATEST_FOR_CURRENT_MAJOR);\n }\n\n // Make sure the git repository is in an optimal state before running the upgrade\n // Mainly used to ease rollbacks in case the upgrade is corrupted\n upgrader.addRequirement(requirements.common.REQUIRE_GIT.asOptional());\n};\n","import path from 'node:path';\n\nimport { isApplicationProject } from '../../modules/project';\nimport { Version, isSemverInstance, rangeFactory, isRangeInstance } from '../../modules/version';\n\nimport type { Project } from '../../modules/project';\n\nexport const resolvePath = (cwd?: string) => path.resolve(cwd ?? process.cwd());\n\nexport const getRangeFromTarget = (\n currentVersion: Version.SemVer,\n target: Version.ReleaseType | Version.LiteralSemVer\n) => {\n if (isSemverInstance(target)) {\n return rangeFactory(target);\n }\n\n const { major, minor, patch } = currentVersion;\n\n switch (target) {\n case Version.ReleaseType.Latest:\n throw new Error(\"Can't use <latest> to create a codemods range: not implemented\");\n case Version.ReleaseType.Major:\n return rangeFactory(`${major}`);\n case Version.ReleaseType.Minor:\n return rangeFactory(`${major}.${minor}`);\n case Version.ReleaseType.Patch:\n return rangeFactory(`${major}.${minor}.${patch}`);\n default:\n throw new Error(`Invalid target set: ${target}`);\n }\n};\n\nexport const findRangeFromTarget = (\n project: Project,\n target: Version.ReleaseType | Version.LiteralSemVer | Version.Range\n): Version.Range => {\n // If a range is manually defined, use it\n if (isRangeInstance(target)) {\n return target;\n }\n\n // If the current project is a Strapi application\n // Get the range from the given target\n if (isApplicationProject(project)) {\n return getRangeFromTarget(project.strapiVersion, target);\n }\n\n // Else, if the project is a Strapi plugin or anything else\n // Set the range to match any version\n return rangeFactory('*');\n};\n","import * as f from '../../modules/format';\nimport { timerFactory } from '../../modules/timer';\nimport { projectFactory } from '../../modules/project';\nimport { codemodRunnerFactory } from '../../modules/codemod-runner';\nimport { findRangeFromTarget, resolvePath } from './utils';\n\nimport type { RunCodemodsOptions } from './types';\nimport type { CodemodRunnerReport } from '../../modules/codemod-runner';\n\nexport const runCodemods = async (options: RunCodemodsOptions) => {\n const timer = timerFactory();\n const { logger, uid } = options;\n\n // Make sure we're resolving the correct working directory based on the given input\n const cwd = resolvePath(options.cwd);\n\n const project = projectFactory(cwd);\n const range = findRangeFromTarget(project, options.target);\n\n logger.debug(f.projectDetails(project));\n logger.debug(`Range: set to ${f.versionRange(range)}`);\n\n const codemodRunner = codemodRunnerFactory(project, range)\n .dry(options.dry ?? false)\n .onSelectCodemods(options.selectCodemods ?? null)\n .setLogger(logger);\n\n let report: CodemodRunnerReport;\n\n // If uid is defined, only run the selected codemod\n if (uid !== undefined) {\n logger.debug(`Running a single codemod: ${f.codemodUID(uid)}`);\n report = await codemodRunner.runByUID(uid);\n }\n\n // By default, only filter using the specified range\n else {\n report = await codemodRunner.run();\n }\n\n if (!report.success) {\n throw report.error;\n }\n\n timer.stop();\n\n logger.info(`Completed in ${timer.elapsedMs}`);\n};\n","import { codemodRepositoryFactory } from '../../modules/codemod-repository';\nimport { projectFactory } from '../../modules/project';\nimport { findRangeFromTarget, resolvePath } from './utils';\n\nimport * as f from '../../modules/format';\n\nimport type { ListCodemodsOptions } from './types';\n\nexport const listCodemods = async (options: ListCodemodsOptions) => {\n const { logger, target } = options;\n\n const cwd = resolvePath(options.cwd);\n const project = projectFactory(cwd);\n const range = findRangeFromTarget(project, target);\n\n logger.debug(f.projectDetails(project));\n logger.debug(`Range: set to ${f.versionRange(range)}`);\n\n // Create a codemod repository targeting the default location of the codemods\n const repo = codemodRepositoryFactory();\n\n // Make sure all the codemods are loaded\n repo.refresh();\n\n // Find groups of codemods matching the given range\n const groups = repo.find({ range });\n\n // Flatten the groups into a simple codemod array\n const codemods = groups.flatMap((collection) => collection.codemods);\n\n // Debug\n logger.debug(`Found ${f.highlight(codemods.length)} codemods`);\n\n // Don't log an empty table\n if (codemods.length === 0) {\n logger.info(`Found no codemods matching ${f.versionRange(range)}`);\n return;\n }\n\n // Format the list to a pretty table\n const fCodemods = f.codemodList(codemods);\n\n logger.raw(fCodemods);\n};\n","import chalk from 'chalk';\n\nimport type { Logger as LoggerInterface, LoggerOptions } from './types';\n\nexport class Logger implements LoggerInterface {\n isDebug: boolean;\n\n isSilent: boolean;\n\n private nbErrorsCalls: number;\n\n private nbWarningsCalls: number;\n\n constructor(options: LoggerOptions = {}) {\n // Set verbosity options\n this.isDebug = options.debug ?? false;\n this.isSilent = options.silent ?? false;\n\n // Initialize counters\n this.nbErrorsCalls = 0;\n this.nbWarningsCalls = 0;\n }\n\n private get isNotSilent(): boolean {\n return !this.isSilent;\n }\n\n get errors(): number {\n return this.nbErrorsCalls;\n }\n\n get warnings(): number {\n return this.nbWarningsCalls;\n }\n\n get stdout(): (NodeJS.WriteStream & { fd: 1 }) | undefined {\n return this.isSilent ? undefined : process.stdout;\n }\n\n get stderr(): (NodeJS.WriteStream & { fd: 2 }) | undefined {\n return this.isSilent ? undefined : process.stderr;\n }\n\n setDebug(debug: boolean): this {\n this.isDebug = debug;\n return this;\n }\n\n setSilent(silent: boolean): this {\n this.isSilent = silent;\n return this;\n }\n\n debug(...args: unknown[]): this {\n const isDebugEnabled = this.isNotSilent && this.isDebug;\n\n if (isDebugEnabled) {\n console.log(chalk.cyan(`[DEBUG]\\t[${nowAsISO()}]`), ...args);\n }\n\n return this;\n }\n\n error(...args: unknown[]): this {\n this.nbErrorsCalls += 1;\n\n if (this.isNotSilent) {\n console.error(chalk.red(`[ERROR]\\t[${nowAsISO()}]`), ...args);\n }\n\n return this;\n }\n\n info(...args: unknown[]): this {\n if (this.isNotSilent) {\n console.info(chalk.blue(`[INFO]\\t[${new Date().toISOString()}]`), ...args);\n }\n\n return this;\n }\n\n raw(...args: unknown[]): this {\n if (this.isNotSilent) {\n console.log(...args);\n }\n\n return this;\n }\n\n warn(...args: unknown[]): this {\n this.nbWarningsCalls += 1;\n\n if (this.isNotSilent) {\n console.warn(chalk.yellow(`[WARN]\\t[${new Date().toISOString()}]`), ...args);\n }\n\n return this;\n }\n}\n\nconst nowAsISO = () => new Date().toISOString();\n\nexport const loggerFactory = (options: LoggerOptions = {}) => new Logger(options);\n"],"names":["Timer","elapsedMs","start","end","interval","Date","now","stop","reset","constructor","timerFactory","ONE_SECOND_MS","path","chalk","blue","version","italic","yellow","codemodUID","uid","bold","cyan","projectDetails","project","projectType","type","cwd","paths","map","versionRange","range","raw","transform","transformFilePath","highlight","arg","underline","upgradeStep","text","step","reports","rows","codemod","report","i","fIndex","grey","fVersion","magenta","fKind","kind","fFormattedTransformPath","format","fTimeElapsed","timeElapsed","dim","fAffected","ok","green","fUnchanged","red","nochange","table","CliTable3","style","compact","head","push","toString","codemodList","codemods","index","fName","fUID","durationMs","elapsedSeconds","timerConstants","toFixed","NPM_REGISTRY_URL","ReleaseType","semVerFactory","semver","SemVer","isLiteralSemVer","str","tokens","split","length","every","token","Number","isNaN","isInteger","isValidSemVer","valid","isSemverInstance","value","isSemVerReleaseType","Object","values","Version","includes","rangeFactory","Range","rangeFromReleaseType","current","identifier","Latest","Major","nextMajor","inc","major","Minor","Patch","nextMinor","Error","rangeFromVersions","currentVersion","target","isValidStringifiedRange","validRange","isRangeInstance","Package","isLoaded","npmPackage","assertPackageIsLoaded","assert","getVersionsDict","versions","getVersionsAsList","findVersionsInRange","filter","v","test","sort","v1","v2","compare","findVersion","find","npmVersion","eq","refresh","response","fetch","packageURL","json","versionExists","undefined","name","constants","npmPackageFactory","FileScanner","scan","patterns","filenames","fastglob","sync","filename","join","fileScannerFactory","AbstractRunner","run","configuration","isValidCodemod","runConfiguration","runner","CodeRunner","jscodeshift","codeRunnerFactory","JSONTransformAPI","get","defaultValue","root","cloneDeep","has","merge","other","set","remove","omit","createJSONTransformAPI","object","readJSON","buffer","fse","readFile","JSON","parse","saveJSON","jsonAsString","stringify","writeFile","transformJSON","codemodPath","config","dry","startTime","process","hrtime","skip","error","stats","esbuildOptions","extensions","hookIgnoreNodeModules","hookMatcher","isEqual","unregister","register","module","require","default","Array","isArray","file","params","out","endTime","JSONRunner","jsonRunnerFactory","PROJECT_PACKAGE_JSON","PROJECT_APP_ALLOWED_ROOT_PATHS","PROJECT_PLUGIN_ALLOWED_ROOT_PATHS","PROJECT_PLUGIN_ROOT_FILES","PROJECT_CODE_EXTENSIONS","PROJECT_JSON_EXTENSIONS","PROJECT_ALLOWED_EXTENSIONS","SCOPED_STRAPI_PACKAGE_PREFIX","STRAPI_DEPENDENCY_NAME","Project","getFilesByExtensions","files","filePath","fileExtension","extname","refreshPackageJSON","refreshProjectFiles","runCodemods","options","runners","createProjectCodemodsRunners","jsonExtensions","ext","codeExtensions","jsonFiles","codeFiles","codeRunner","parser","runInBand","babel","print","silent","verbose","jsonRunner","packageJSONPath","accessSync","packageJSONBuffer","readFileSync","packageJSON","scanner","pathExistsSync","AppProject","allowedRootPaths","formatGlobCollectionPattern","allowedExtensions","refreshStrapiVersion","strapiVersion","findStrapiVersionFromProjectPackageJSON","findLocallyInstalledStrapiVersion","projectName","dependencies","packageSearchText","strapiPackageJSONPath","strapiPackageJSON","resolve","collection","PluginProject","isPlugin","strapi","projectFactory","isPluginProject","assertPluginProject","isApplicationProject","assertAppProject","UnexpectedError","NPMCandidateNotFoundError","message","AbortedError","unknownToError","e","CODEMOD_CODE_SUFFIX","CODEMOD_JSON_SUFFIX","CODEMOD_ALLOWED_SUFFIXES","CODEMOD_EXTENSION","CODEMOD_FILE_REGEXP","RegExp","Codemod","createUID","stripExtension","stripKind","stripHyphens","formatted","replace","replaceAll","baseDirectory","codemodFactory","INTERNAL_CODEMODS_DIRECTORY","__dirname","CodemodRepository","refreshAvailableVersions","refreshAvailableFiles","count","findByVersion","groups","result","uids","q","entries","maybeFilterByRange","maybeFilterByUIDs","literalVersion","findAll","readdirSync","statSync","isDirectory","refreshAvailableFilesForVersion","versionDirectory","existsSync","isFile","parseCodemodKindFromFilename","at","codemodRepositoryFactory","CodemodRunner","setRange","setLogger","logger","onSelectCodemods","callback","selectCodemodsCallback","enabled","isDry","createRepository","codemodsDirectory","repository","codemodRepositoryConstants","safeRunAndReport","warn","f","nbAffectedTotal","flatMap","reduce","acc","nb","debug","successReport","erroredReport","runByUID","codemodsInRange","selectedCodemods","codemodsByVersion","groupBy","fRange","size","codemodRunnerFactory","success","Upgrader","getNPMPackage","getProject","getTarget","setRequirements","requirements","setTarget","syncCodemodsTarget","codemodsTarget","minor","patch","overrideCodemodsTarget","onConfirm","confirmationCallback","addRequirement","requirement","fRequired","isRequired","upgrade","info","codemodsRange","npmVersionsMatches","checkRequirements","updateDependencies","installDependencies","confirm","context","pass","onSuccessfulRequirement","onFailedRequirement","hasChildren","children","originalError","errorMessage","warningMessage","confirmationMessage","strapiDependencies","getScopedStrapiDependencies","forEach","dependency","updatedPackageJSON","isScopedStrapiPackage","startsWith","projectConstants","isOnCurrentStrapiVersion","projectPath","packageManagerName","packageManager","getPreferred","stdout","stderr","codemodRunner","resolveNPMTarget","upgraderFactory","npmTarget","semverTarget","STRAPI_PACKAGE_NAME","Requirement","setChildren","addChild","child","asOptional","newInstance","requirementFactory","testCallback","asRequired","errored","REQUIRE_AVAILABLE_NEXT_MAJOR","currentMajor","targetedMajor","REQUIRE_LATEST_FOR_CURRENT_MAJOR","invalidMatches","match","invalidVersions","invalidVersionsCount","REQUIRE_GIT_CLEAN_REPOSITORY","git","simpleGit","baseDir","status","isClean","REQUIRE_GIT_REPOSITORY","isRepo","checkIsRepo","REQUIRE_GIT_INSTALLED","REQUIRE_GIT","latest","upgrader","fTargetMajor","fCurrentMajor","fTarget","fCurrent","isMajorUpgrade","newerPackageRelease","fLatest","proceedAnyway","timer","upgraderConstants","runUpgradePrompts","addUpgradeRequirements","upgradeReport","prompts","resolvePath","getRangeFromTarget","findRangeFromTarget","selectCodemods","listCodemods","repo","fCodemods","Logger","isNotSilent","isSilent","errors","nbErrorsCalls","warnings","nbWarningsCalls","setDebug","isDebug","setSilent","args","isDebugEnabled","console","log","nowAsISO","toISOString","loggerFactory"],"mappings":"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"}