@strapi/upgrade 5.12.1 → 5.12.2

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 (245) 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/package.json.js +6 -0
  10. package/dist/package.json.js.map +1 -0
  11. package/dist/package.json.mjs +4 -0
  12. package/dist/package.json.mjs.map +1 -0
  13. package/dist/src/cli/commands/codemods.js +120 -0
  14. package/dist/src/cli/commands/codemods.js.map +1 -0
  15. package/dist/src/cli/commands/codemods.mjs +116 -0
  16. package/dist/src/cli/commands/codemods.mjs.map +1 -0
  17. package/dist/src/cli/commands/upgrade.js +99 -0
  18. package/dist/src/cli/commands/upgrade.js.map +1 -0
  19. package/dist/src/cli/commands/upgrade.mjs +96 -0
  20. package/dist/src/cli/commands/upgrade.mjs.map +1 -0
  21. package/dist/src/cli/errors.js +18 -0
  22. package/dist/src/cli/errors.js.map +1 -0
  23. package/dist/src/cli/errors.mjs +16 -0
  24. package/dist/src/cli/errors.mjs.map +1 -0
  25. package/dist/src/cli/options.js +26 -0
  26. package/dist/src/cli/options.js.map +1 -0
  27. package/dist/src/cli/options.mjs +19 -0
  28. package/dist/src/cli/options.mjs.map +1 -0
  29. package/dist/src/modules/codemod/codemod.js +44 -0
  30. package/dist/src/modules/codemod/codemod.js.map +1 -0
  31. package/dist/src/modules/codemod/codemod.mjs +41 -0
  32. package/dist/src/modules/codemod/codemod.mjs.map +1 -0
  33. package/dist/src/modules/codemod/constants.js +17 -0
  34. package/dist/src/modules/codemod/constants.js.map +1 -0
  35. package/dist/src/modules/codemod/constants.mjs +11 -0
  36. package/dist/src/modules/codemod/constants.mjs.map +1 -0
  37. package/dist/src/modules/codemod/index.js +10 -0
  38. package/dist/src/modules/codemod/index.js.map +1 -0
  39. package/dist/src/modules/codemod/index.mjs +4 -0
  40. package/dist/src/modules/codemod/index.mjs.map +1 -0
  41. package/dist/src/modules/codemod-repository/constants.js +9 -0
  42. package/dist/src/modules/codemod-repository/constants.js.map +1 -0
  43. package/dist/src/modules/codemod-repository/constants.mjs +7 -0
  44. package/dist/src/modules/codemod-repository/constants.mjs.map +1 -0
  45. package/dist/src/modules/codemod-repository/index.js +10 -0
  46. package/dist/src/modules/codemod-repository/index.js.map +1 -0
  47. package/dist/src/modules/codemod-repository/index.mjs +4 -0
  48. package/dist/src/modules/codemod-repository/index.mjs.map +1 -0
  49. package/dist/src/modules/codemod-repository/repository.js +127 -0
  50. package/dist/src/modules/codemod-repository/repository.js.map +1 -0
  51. package/dist/src/modules/codemod-repository/repository.mjs +123 -0
  52. package/dist/src/modules/codemod-repository/repository.mjs.map +1 -0
  53. package/dist/src/modules/codemod-runner/codemod-runner.js +113 -0
  54. package/dist/src/modules/codemod-runner/codemod-runner.js.map +1 -0
  55. package/dist/src/modules/codemod-runner/codemod-runner.mjs +110 -0
  56. package/dist/src/modules/codemod-runner/codemod-runner.mjs.map +1 -0
  57. package/dist/src/modules/error/index.js +11 -0
  58. package/dist/src/modules/error/index.js.map +1 -0
  59. package/dist/src/modules/error/index.mjs +2 -0
  60. package/dist/src/modules/error/index.mjs.map +1 -0
  61. package/dist/src/modules/error/utils.js +33 -0
  62. package/dist/src/modules/error/utils.js.map +1 -0
  63. package/dist/src/modules/error/utils.mjs +28 -0
  64. package/dist/src/modules/error/utils.mjs.map +1 -0
  65. package/dist/src/modules/file-scanner/index.js +8 -0
  66. package/dist/src/modules/file-scanner/index.js.map +1 -0
  67. package/dist/src/modules/file-scanner/index.mjs +2 -0
  68. package/dist/src/modules/file-scanner/index.mjs.map +1 -0
  69. package/dist/src/modules/file-scanner/scanner.js +23 -0
  70. package/dist/src/modules/file-scanner/scanner.js.map +1 -0
  71. package/dist/src/modules/file-scanner/scanner.mjs +20 -0
  72. package/dist/src/modules/file-scanner/scanner.mjs.map +1 -0
  73. package/dist/src/modules/format/formats.js +107 -0
  74. package/dist/src/modules/format/formats.js.map +1 -0
  75. package/dist/src/modules/format/formats.mjs +94 -0
  76. package/dist/src/modules/format/formats.mjs.map +1 -0
  77. package/dist/src/modules/format/index.js +19 -0
  78. package/dist/src/modules/format/index.js.map +1 -0
  79. package/dist/src/modules/format/index.mjs +2 -0
  80. package/dist/src/modules/format/index.mjs.map +1 -0
  81. package/dist/src/modules/index.js +32 -0
  82. package/dist/src/modules/index.js.map +1 -0
  83. package/dist/src/modules/index.mjs +27 -0
  84. package/dist/src/modules/index.mjs.map +1 -0
  85. package/dist/src/modules/json/file.js +16 -0
  86. package/dist/src/modules/json/file.js.map +1 -0
  87. package/dist/src/modules/json/file.mjs +13 -0
  88. package/dist/src/modules/json/file.mjs.map +1 -0
  89. package/dist/src/modules/json/transform-api.js +38 -0
  90. package/dist/src/modules/json/transform-api.js.map +1 -0
  91. package/dist/src/modules/json/transform-api.mjs +35 -0
  92. package/dist/src/modules/json/transform-api.mjs.map +1 -0
  93. package/dist/src/modules/logger/index.js +8 -0
  94. package/dist/src/modules/logger/index.js.map +1 -0
  95. package/dist/src/modules/logger/index.mjs +2 -0
  96. package/dist/src/modules/logger/index.mjs.map +1 -0
  97. package/dist/src/modules/logger/logger.js +76 -0
  98. package/dist/src/modules/logger/logger.js.map +1 -0
  99. package/dist/src/modules/logger/logger.mjs +73 -0
  100. package/dist/src/modules/logger/logger.mjs.map +1 -0
  101. package/dist/src/modules/npm/constants.js +6 -0
  102. package/dist/src/modules/npm/constants.js.map +1 -0
  103. package/dist/src/modules/npm/constants.mjs +4 -0
  104. package/dist/src/modules/npm/constants.mjs.map +1 -0
  105. package/dist/src/modules/npm/package.js +55 -0
  106. package/dist/src/modules/npm/package.js.map +1 -0
  107. package/dist/src/modules/npm/package.mjs +52 -0
  108. package/dist/src/modules/npm/package.mjs.map +1 -0
  109. package/dist/src/modules/project/constants.js +45 -0
  110. package/dist/src/modules/project/constants.js.map +1 -0
  111. package/dist/src/modules/project/constants.mjs +35 -0
  112. package/dist/src/modules/project/constants.mjs.map +1 -0
  113. package/dist/src/modules/project/index.js +15 -0
  114. package/dist/src/modules/project/index.js.map +1 -0
  115. package/dist/src/modules/project/index.mjs +5 -0
  116. package/dist/src/modules/project/index.mjs.map +1 -0
  117. package/dist/src/modules/project/project.js +208 -0
  118. package/dist/src/modules/project/project.js.map +1 -0
  119. package/dist/src/modules/project/project.mjs +203 -0
  120. package/dist/src/modules/project/project.mjs.map +1 -0
  121. package/dist/src/modules/project/utils.js +26 -0
  122. package/dist/src/modules/project/utils.js.map +1 -0
  123. package/dist/src/modules/project/utils.mjs +21 -0
  124. package/dist/src/modules/project/utils.mjs.map +1 -0
  125. package/dist/src/modules/report/index.js +9 -0
  126. package/dist/src/modules/report/index.js.map +1 -0
  127. package/dist/src/modules/report/index.mjs +2 -0
  128. package/dist/src/modules/report/index.mjs.map +1 -0
  129. package/dist/src/modules/report/report.js +13 -0
  130. package/dist/src/modules/report/report.js.map +1 -0
  131. package/dist/src/modules/report/report.mjs +10 -0
  132. package/dist/src/modules/report/report.mjs.map +1 -0
  133. package/dist/src/modules/requirement/index.js +8 -0
  134. package/dist/src/modules/requirement/index.js.map +1 -0
  135. package/dist/src/modules/requirement/index.mjs +2 -0
  136. package/dist/src/modules/requirement/index.mjs.map +1 -0
  137. package/dist/src/modules/requirement/requirement.js +55 -0
  138. package/dist/src/modules/requirement/requirement.js.map +1 -0
  139. package/dist/src/modules/requirement/requirement.mjs +52 -0
  140. package/dist/src/modules/requirement/requirement.mjs.map +1 -0
  141. package/dist/src/modules/runner/code/code.js +21 -0
  142. package/dist/src/modules/runner/code/code.js.map +1 -0
  143. package/dist/src/modules/runner/code/code.mjs +18 -0
  144. package/dist/src/modules/runner/code/code.mjs.map +1 -0
  145. package/dist/src/modules/runner/code/index.js +8 -0
  146. package/dist/src/modules/runner/code/index.js.map +1 -0
  147. package/dist/src/modules/runner/code/index.mjs +2 -0
  148. package/dist/src/modules/runner/code/index.mjs.map +1 -0
  149. package/dist/src/modules/runner/index.js +10 -0
  150. package/dist/src/modules/runner/index.js.map +1 -0
  151. package/dist/src/modules/runner/index.mjs +5 -0
  152. package/dist/src/modules/runner/index.mjs.map +1 -0
  153. package/dist/src/modules/runner/json/index.js +8 -0
  154. package/dist/src/modules/runner/json/index.js.map +1 -0
  155. package/dist/src/modules/runner/json/index.mjs +2 -0
  156. package/dist/src/modules/runner/json/index.mjs.map +1 -0
  157. package/dist/src/modules/runner/json/json.js +21 -0
  158. package/dist/src/modules/runner/json/json.js.map +1 -0
  159. package/dist/src/modules/runner/json/json.mjs +18 -0
  160. package/dist/src/modules/runner/json/json.mjs.map +1 -0
  161. package/dist/src/modules/runner/json/transform.js +85 -0
  162. package/dist/src/modules/runner/json/transform.js.map +1 -0
  163. package/dist/src/modules/runner/json/transform.mjs +83 -0
  164. package/dist/src/modules/runner/json/transform.mjs.map +1 -0
  165. package/dist/src/modules/runner/runner.js +22 -0
  166. package/dist/src/modules/runner/runner.js.map +1 -0
  167. package/dist/src/modules/runner/runner.mjs +20 -0
  168. package/dist/src/modules/runner/runner.mjs.map +1 -0
  169. package/dist/src/modules/timer/constants.js +6 -0
  170. package/dist/src/modules/timer/constants.js.map +1 -0
  171. package/dist/src/modules/timer/constants.mjs +4 -0
  172. package/dist/src/modules/timer/constants.mjs.map +1 -0
  173. package/dist/src/modules/timer/index.js +10 -0
  174. package/dist/src/modules/timer/index.js.map +1 -0
  175. package/dist/src/modules/timer/index.mjs +4 -0
  176. package/dist/src/modules/timer/index.mjs.map +1 -0
  177. package/dist/src/modules/timer/timer.js +33 -0
  178. package/dist/src/modules/timer/timer.js.map +1 -0
  179. package/dist/src/modules/timer/timer.mjs +30 -0
  180. package/dist/src/modules/timer/timer.mjs.map +1 -0
  181. package/dist/src/modules/upgrader/constants.js +6 -0
  182. package/dist/src/modules/upgrader/constants.js.map +1 -0
  183. package/dist/src/modules/upgrader/constants.mjs +4 -0
  184. package/dist/src/modules/upgrader/constants.mjs.map +1 -0
  185. package/dist/src/modules/upgrader/index.js +10 -0
  186. package/dist/src/modules/upgrader/index.js.map +1 -0
  187. package/dist/src/modules/upgrader/index.mjs +4 -0
  188. package/dist/src/modules/upgrader/index.mjs.map +1 -0
  189. package/dist/src/modules/upgrader/upgrader.js +266 -0
  190. package/dist/src/modules/upgrader/upgrader.js.map +1 -0
  191. package/dist/src/modules/upgrader/upgrader.mjs +263 -0
  192. package/dist/src/modules/upgrader/upgrader.mjs.map +1 -0
  193. package/dist/src/modules/version/index.js +20 -0
  194. package/dist/src/modules/version/index.js.map +1 -0
  195. package/dist/src/modules/version/index.mjs +5 -0
  196. package/dist/src/modules/version/index.mjs.map +1 -0
  197. package/dist/src/modules/version/range.js +81 -0
  198. package/dist/src/modules/version/range.js.map +1 -0
  199. package/dist/src/modules/version/range.mjs +75 -0
  200. package/dist/src/modules/version/range.mjs.map +1 -0
  201. package/dist/src/modules/version/semver.js +26 -0
  202. package/dist/src/modules/version/semver.js.map +1 -0
  203. package/dist/src/modules/version/semver.mjs +20 -0
  204. package/dist/src/modules/version/semver.mjs.map +1 -0
  205. package/dist/src/modules/version/types.js +12 -0
  206. package/dist/src/modules/version/types.js.map +1 -0
  207. package/dist/src/modules/version/types.mjs +12 -0
  208. package/dist/src/modules/version/types.mjs.map +1 -0
  209. package/dist/src/tasks/codemods/list-codemods.js +40 -0
  210. package/dist/src/tasks/codemods/list-codemods.js.map +1 -0
  211. package/dist/src/tasks/codemods/list-codemods.mjs +38 -0
  212. package/dist/src/tasks/codemods/list-codemods.mjs.map +1 -0
  213. package/dist/src/tasks/codemods/run-codemods.js +36 -0
  214. package/dist/src/tasks/codemods/run-codemods.js.map +1 -0
  215. package/dist/src/tasks/codemods/run-codemods.mjs +34 -0
  216. package/dist/src/tasks/codemods/run-codemods.mjs.map +1 -0
  217. package/dist/src/tasks/codemods/utils.js +54 -0
  218. package/dist/src/tasks/codemods/utils.js.map +1 -0
  219. package/dist/src/tasks/codemods/utils.mjs +50 -0
  220. package/dist/src/tasks/codemods/utils.mjs.map +1 -0
  221. package/dist/src/tasks/index.js +15 -0
  222. package/dist/src/tasks/index.js.map +1 -0
  223. package/dist/src/tasks/index.mjs +7 -0
  224. package/dist/src/tasks/index.mjs.map +1 -0
  225. package/dist/src/tasks/upgrade/prompts/latest.js +48 -0
  226. package/dist/src/tasks/upgrade/prompts/latest.js.map +1 -0
  227. package/dist/src/tasks/upgrade/prompts/latest.mjs +46 -0
  228. package/dist/src/tasks/upgrade/prompts/latest.mjs.map +1 -0
  229. package/dist/src/tasks/upgrade/requirements/common.js +40 -0
  230. package/dist/src/tasks/upgrade/requirements/common.js.map +1 -0
  231. package/dist/src/tasks/upgrade/requirements/common.mjs +35 -0
  232. package/dist/src/tasks/upgrade/requirements/common.mjs.map +1 -0
  233. package/dist/src/tasks/upgrade/requirements/major.js +29 -0
  234. package/dist/src/tasks/upgrade/requirements/major.js.map +1 -0
  235. package/dist/src/tasks/upgrade/requirements/major.mjs +26 -0
  236. package/dist/src/tasks/upgrade/requirements/major.mjs.map +1 -0
  237. package/dist/src/tasks/upgrade/upgrade.js +69 -0
  238. package/dist/src/tasks/upgrade/upgrade.js.map +1 -0
  239. package/dist/src/tasks/upgrade/upgrade.mjs +67 -0
  240. package/dist/src/tasks/upgrade/upgrade.mjs.map +1 -0
  241. package/package.json +4 -4
  242. package/dist/chunks/logger-DGi224NW.js +0 -1649
  243. package/dist/chunks/logger-DGi224NW.js.map +0 -1
  244. package/dist/chunks/logger-np_r7rTc.mjs +0 -1599
  245. package/dist/chunks/logger-np_r7rTc.mjs.map +0 -1
@@ -0,0 +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","constructor","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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"}
@@ -0,0 +1,203 @@
1
+ import path from 'node:path';
2
+ import assert from 'node:assert';
3
+ import fse from 'fs-extra';
4
+ import semver from 'semver';
5
+ import { isLiteralSemVer, semVerFactory, isValidSemVer } from '../version/semver.mjs';
6
+ import '../version/types.mjs';
7
+ import { fileScannerFactory } from '../file-scanner/scanner.mjs';
8
+ import { codeRunnerFactory } from '../runner/code/code.mjs';
9
+ import { jsonRunnerFactory } from '../runner/json/json.mjs';
10
+ import { PROJECT_PACKAGE_JSON, STRAPI_DEPENDENCY_NAME, PROJECT_PLUGIN_ALLOWED_ROOT_PATHS, PROJECT_ALLOWED_EXTENSIONS, PROJECT_PLUGIN_ROOT_FILES, PROJECT_JSON_EXTENSIONS, PROJECT_CODE_EXTENSIONS, PROJECT_APP_ALLOWED_ROOT_PATHS } from './constants.mjs';
11
+
12
+ class Project {
13
+ getFilesByExtensions(extensions) {
14
+ return this.files.filter((filePath)=>{
15
+ const fileExtension = path.extname(filePath);
16
+ return extensions.includes(fileExtension);
17
+ });
18
+ }
19
+ refresh() {
20
+ this.refreshPackageJSON();
21
+ this.refreshProjectFiles();
22
+ return this;
23
+ }
24
+ async runCodemods(codemods, options) {
25
+ const runners = this.createProjectCodemodsRunners(options.dry);
26
+ const reports = [];
27
+ for (const codemod of codemods){
28
+ for (const runner of runners){
29
+ if (runner.valid(codemod)) {
30
+ const report = await runner.run(codemod);
31
+ reports.push({
32
+ codemod,
33
+ report
34
+ });
35
+ }
36
+ }
37
+ }
38
+ return reports;
39
+ }
40
+ createProjectCodemodsRunners(dry = false) {
41
+ const jsonExtensions = PROJECT_JSON_EXTENSIONS.map((ext)=>`.${ext}`);
42
+ const codeExtensions = PROJECT_CODE_EXTENSIONS.map((ext)=>`.${ext}`);
43
+ const jsonFiles = this.getFilesByExtensions(jsonExtensions);
44
+ const codeFiles = this.getFilesByExtensions(codeExtensions);
45
+ const codeRunner = codeRunnerFactory(codeFiles, {
46
+ dry,
47
+ parser: 'ts',
48
+ runInBand: true,
49
+ babel: true,
50
+ extensions: PROJECT_CODE_EXTENSIONS.join(','),
51
+ // Don't output any log coming from the runner
52
+ print: false,
53
+ silent: true,
54
+ verbose: 0
55
+ });
56
+ const jsonRunner = jsonRunnerFactory(jsonFiles, {
57
+ dry,
58
+ cwd: this.cwd
59
+ });
60
+ return [
61
+ codeRunner,
62
+ jsonRunner
63
+ ];
64
+ }
65
+ refreshPackageJSON() {
66
+ const packageJSONPath = path.join(this.cwd, PROJECT_PACKAGE_JSON);
67
+ try {
68
+ fse.accessSync(packageJSONPath);
69
+ } catch {
70
+ throw new Error(`Could not find a ${PROJECT_PACKAGE_JSON} file in ${this.cwd}`);
71
+ }
72
+ const packageJSONBuffer = fse.readFileSync(packageJSONPath);
73
+ this.packageJSONPath = packageJSONPath;
74
+ this.packageJSON = JSON.parse(packageJSONBuffer.toString());
75
+ }
76
+ refreshProjectFiles() {
77
+ const scanner = fileScannerFactory(this.cwd);
78
+ this.files = scanner.scan(this.paths);
79
+ }
80
+ constructor(cwd, config){
81
+ if (!fse.pathExistsSync(cwd)) {
82
+ throw new Error(`ENOENT: no such file or directory, access '${cwd}'`);
83
+ }
84
+ this.cwd = cwd;
85
+ this.paths = config.paths;
86
+ this.refresh();
87
+ }
88
+ }
89
+ class AppProject extends Project {
90
+ /**
91
+ * Returns an array of allowed file paths for a Strapi application
92
+ *
93
+ * The resulting paths include app default files and the root package.json file.
94
+ */ static get paths() {
95
+ const allowedRootPaths = formatGlobCollectionPattern(PROJECT_APP_ALLOWED_ROOT_PATHS);
96
+ const allowedExtensions = formatGlobCollectionPattern(PROJECT_ALLOWED_EXTENSIONS);
97
+ return [
98
+ // App default files
99
+ `./${allowedRootPaths}/**/*.${allowedExtensions}`,
100
+ `!./**/node_modules/**/*`,
101
+ `!./**/dist/**/*`,
102
+ // Root package.json file
103
+ PROJECT_PACKAGE_JSON
104
+ ];
105
+ }
106
+ refresh() {
107
+ super.refresh();
108
+ this.refreshStrapiVersion();
109
+ return this;
110
+ }
111
+ refreshStrapiVersion() {
112
+ this.strapiVersion = // First try to get the strapi version from the package.json dependencies
113
+ this.findStrapiVersionFromProjectPackageJSON() ?? // If the version found is not a valid SemVer, get the Strapi version from the installed package
114
+ this.findLocallyInstalledStrapiVersion();
115
+ }
116
+ findStrapiVersionFromProjectPackageJSON() {
117
+ const projectName = this.packageJSON.name;
118
+ const version = this.packageJSON.dependencies?.[STRAPI_DEPENDENCY_NAME];
119
+ if (version === undefined) {
120
+ throw new Error(`No version of ${STRAPI_DEPENDENCY_NAME} was found in ${projectName}. Are you in a valid Strapi project?`);
121
+ }
122
+ const isValidSemVer = isLiteralSemVer(version) && semver.valid(version) === version;
123
+ // We return undefined only if a strapi/strapi version is found, but it's not semver compliant
124
+ return isValidSemVer ? semVerFactory(version) : undefined;
125
+ }
126
+ findLocallyInstalledStrapiVersion() {
127
+ const packageSearchText = `${STRAPI_DEPENDENCY_NAME}/package.json`;
128
+ let strapiPackageJSONPath;
129
+ let strapiPackageJSON;
130
+ try {
131
+ strapiPackageJSONPath = require.resolve(packageSearchText, {
132
+ paths: [
133
+ this.cwd
134
+ ]
135
+ });
136
+ strapiPackageJSON = require(strapiPackageJSONPath);
137
+ assert(typeof strapiPackageJSON === 'object');
138
+ } catch {
139
+ throw new Error(`Cannot resolve module "${STRAPI_DEPENDENCY_NAME}" from paths [${this.cwd}]`);
140
+ }
141
+ const strapiVersion = strapiPackageJSON.version;
142
+ if (!isValidSemVer(strapiVersion)) {
143
+ throw new Error(`Invalid ${STRAPI_DEPENDENCY_NAME} version found in ${strapiPackageJSONPath} (${strapiVersion})`);
144
+ }
145
+ return semVerFactory(strapiVersion);
146
+ }
147
+ constructor(cwd){
148
+ super(cwd, {
149
+ paths: AppProject.paths
150
+ });
151
+ this.type = 'application';
152
+ this.refreshStrapiVersion();
153
+ }
154
+ }
155
+ const formatGlobCollectionPattern = (collection)=>{
156
+ assert(collection.length > 0, 'Invalid pattern provided, the given collection needs at least 1 element');
157
+ return collection.length === 1 ? collection[0] : `{${collection}}`;
158
+ };
159
+ class PluginProject extends Project {
160
+ /**
161
+ * Returns an array of allowed file paths for a Strapi plugin
162
+ *
163
+ * The resulting paths include plugin default files, the root package.json file, and plugin-specific files.
164
+ */ static get paths() {
165
+ const allowedRootPaths = formatGlobCollectionPattern(PROJECT_PLUGIN_ALLOWED_ROOT_PATHS);
166
+ const allowedExtensions = formatGlobCollectionPattern(PROJECT_ALLOWED_EXTENSIONS);
167
+ return [
168
+ // Plugin default files
169
+ `./${allowedRootPaths}/**/*.${allowedExtensions}`,
170
+ `!./**/node_modules/**/*`,
171
+ `!./**/dist/**/*`,
172
+ // Root package.json file
173
+ PROJECT_PACKAGE_JSON,
174
+ // Plugin root files
175
+ ...PROJECT_PLUGIN_ROOT_FILES
176
+ ];
177
+ }
178
+ constructor(cwd){
179
+ super(cwd, {
180
+ paths: PluginProject.paths
181
+ });
182
+ this.type = 'plugin';
183
+ }
184
+ }
185
+ const isPlugin = (cwd)=>{
186
+ const packageJSONPath = path.join(cwd, PROJECT_PACKAGE_JSON);
187
+ try {
188
+ fse.accessSync(packageJSONPath);
189
+ } catch {
190
+ throw new Error(`Could not find a ${PROJECT_PACKAGE_JSON} file in ${cwd}`);
191
+ }
192
+ const packageJSONBuffer = fse.readFileSync(packageJSONPath);
193
+ const packageJSON = JSON.parse(packageJSONBuffer.toString());
194
+ return packageJSON?.strapi?.kind === 'plugin';
195
+ };
196
+ // TODO: make this async so we can use async file methods
197
+ const projectFactory = (cwd)=>{
198
+ fse.accessSync(cwd);
199
+ return isPlugin(cwd) ? new PluginProject(cwd) : new AppProject(cwd);
200
+ };
201
+
202
+ export { AppProject, PluginProject, Project, projectFactory };
203
+ //# sourceMappingURL=project.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.mjs","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","constructor","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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"}
@@ -0,0 +1,26 @@
1
+ 'use strict';
2
+
3
+ var project = require('./project.js');
4
+
5
+ const isPluginProject = (project$1)=>{
6
+ return project$1 instanceof project.PluginProject;
7
+ };
8
+ function assertPluginProject(project) {
9
+ if (!isPluginProject(project)) {
10
+ throw new Error('Project is not a plugin');
11
+ }
12
+ }
13
+ const isApplicationProject = (project$1)=>{
14
+ return project$1 instanceof project.AppProject;
15
+ };
16
+ function assertAppProject(project) {
17
+ if (!isApplicationProject(project)) {
18
+ throw new Error('Project is not an application');
19
+ }
20
+ }
21
+
22
+ exports.assertAppProject = assertAppProject;
23
+ exports.assertPluginProject = assertPluginProject;
24
+ exports.isApplicationProject = isApplicationProject;
25
+ exports.isPluginProject = isPluginProject;
26
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sources":["../../../../src/modules/project/utils.ts"],"sourcesContent":["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"],"names":["isPluginProject","project","PluginProject","assertPluginProject","Error","isApplicationProject","AppProject","assertAppProject"],"mappings":";;;;AAEO,MAAMA,kBAAkB,CAACC,SAAAA,GAAAA;AAC9B,IAAA,OAAOA,SAAmBC,YAAAA,qBAAAA;AAC5B;AAEO,SAASC,oBAAoBF,OAAgB,EAAA;IAClD,IAAI,CAACD,gBAAgBC,OAAU,CAAA,EAAA;AAC7B,QAAA,MAAM,IAAIG,KAAM,CAAA,yBAAA,CAAA;AAClB;AACF;AAEO,MAAMC,uBAAuB,CAACJ,SAAAA,GAAAA;AACnC,IAAA,OAAOA,SAAmBK,YAAAA,kBAAAA;AAC5B;AAEO,SAASC,iBAAiBN,OAAgB,EAAA;IAC/C,IAAI,CAACI,qBAAqBJ,OAAU,CAAA,EAAA;AAClC,QAAA,MAAM,IAAIG,KAAM,CAAA,+BAAA,CAAA;AAClB;AACF;;;;;;;"}
@@ -0,0 +1,21 @@
1
+ import { PluginProject, AppProject } from './project.mjs';
2
+
3
+ const isPluginProject = (project)=>{
4
+ return project instanceof PluginProject;
5
+ };
6
+ function assertPluginProject(project) {
7
+ if (!isPluginProject(project)) {
8
+ throw new Error('Project is not a plugin');
9
+ }
10
+ }
11
+ const isApplicationProject = (project)=>{
12
+ return project instanceof AppProject;
13
+ };
14
+ function assertAppProject(project) {
15
+ if (!isApplicationProject(project)) {
16
+ throw new Error('Project is not an application');
17
+ }
18
+ }
19
+
20
+ export { assertAppProject, assertPluginProject, isApplicationProject, isPluginProject };
21
+ //# sourceMappingURL=utils.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.mjs","sources":["../../../../src/modules/project/utils.ts"],"sourcesContent":["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"],"names":["isPluginProject","project","PluginProject","assertPluginProject","Error","isApplicationProject","AppProject","assertAppProject"],"mappings":";;AAEO,MAAMA,kBAAkB,CAACC,OAAAA,GAAAA;AAC9B,IAAA,OAAOA,OAAmBC,YAAAA,aAAAA;AAC5B;AAEO,SAASC,oBAAoBF,OAAgB,EAAA;IAClD,IAAI,CAACD,gBAAgBC,OAAU,CAAA,EAAA;AAC7B,QAAA,MAAM,IAAIG,KAAM,CAAA,yBAAA,CAAA;AAClB;AACF;AAEO,MAAMC,uBAAuB,CAACJ,OAAAA,GAAAA;AACnC,IAAA,OAAOA,OAAmBK,YAAAA,UAAAA;AAC5B;AAEO,SAASC,iBAAiBN,OAAgB,EAAA;IAC/C,IAAI,CAACI,qBAAqBJ,OAAU,CAAA,EAAA;AAClC,QAAA,MAAM,IAAIG,KAAM,CAAA,+BAAA,CAAA;AAClB;AACF;;;;"}
@@ -0,0 +1,9 @@
1
+ 'use strict';
2
+
3
+ var report = require('./report.js');
4
+
5
+
6
+
7
+ exports.codemodReportFactory = report.codemodReportFactory;
8
+ exports.reportFactory = report.reportFactory;
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
@@ -0,0 +1,2 @@
1
+ export { codemodReportFactory, reportFactory } from './report.mjs';
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ const codemodReportFactory = (codemod, report)=>({
4
+ codemod,
5
+ report
6
+ });
7
+ const reportFactory = (report)=>({
8
+ ...report
9
+ });
10
+
11
+ exports.codemodReportFactory = codemodReportFactory;
12
+ exports.reportFactory = reportFactory;
13
+ //# sourceMappingURL=report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.js","sources":["../../../../src/modules/report/report.ts"],"sourcesContent":["import type { Codemod } from '../codemod';\n\nimport type { CodemodReport, Report } from './types';\n\nexport const codemodReportFactory = (codemod: Codemod.Codemod, report: Report): CodemodReport => ({\n codemod,\n report,\n});\n\nexport const reportFactory = (report: Report): Report => ({ ...report });\n"],"names":["codemodReportFactory","codemod","report","reportFactory"],"mappings":";;AAIaA,MAAAA,oBAAAA,GAAuB,CAACC,OAAAA,EAA0BC,UAAmC;AAChGD,QAAAA,OAAAA;AACAC,QAAAA;AACF,KAAA;AAEaC,MAAAA,aAAAA,GAAgB,CAACD,MAAAA,IAA4B;AAAE,QAAA,GAAGA;AAAO,KAAA;;;;;"}
@@ -0,0 +1,10 @@
1
+ const codemodReportFactory = (codemod, report)=>({
2
+ codemod,
3
+ report
4
+ });
5
+ const reportFactory = (report)=>({
6
+ ...report
7
+ });
8
+
9
+ export { codemodReportFactory, reportFactory };
10
+ //# sourceMappingURL=report.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.mjs","sources":["../../../../src/modules/report/report.ts"],"sourcesContent":["import type { Codemod } from '../codemod';\n\nimport type { CodemodReport, Report } from './types';\n\nexport const codemodReportFactory = (codemod: Codemod.Codemod, report: Report): CodemodReport => ({\n codemod,\n report,\n});\n\nexport const reportFactory = (report: Report): Report => ({ ...report });\n"],"names":["codemodReportFactory","codemod","report","reportFactory"],"mappings":"AAIaA,MAAAA,oBAAAA,GAAuB,CAACC,OAAAA,EAA0BC,UAAmC;AAChGD,QAAAA,OAAAA;AACAC,QAAAA;AACF,KAAA;AAEaC,MAAAA,aAAAA,GAAgB,CAACD,MAAAA,IAA4B;AAAE,QAAA,GAAGA;AAAO,KAAA;;;;"}
@@ -0,0 +1,8 @@
1
+ 'use strict';
2
+
3
+ var requirement = require('./requirement.js');
4
+
5
+
6
+
7
+ exports.requirementFactory = requirement.requirementFactory;
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,2 @@
1
+ export { requirementFactory } from './requirement.mjs';
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,55 @@
1
+ 'use strict';
2
+
3
+ class Requirement {
4
+ setChildren(children) {
5
+ this.children = children;
6
+ return this;
7
+ }
8
+ addChild(child) {
9
+ this.children.push(child);
10
+ return this;
11
+ }
12
+ asOptional() {
13
+ const newInstance = requirementFactory(this.name, this.testCallback, false);
14
+ newInstance.setChildren(this.children);
15
+ return newInstance;
16
+ }
17
+ asRequired() {
18
+ const newInstance = requirementFactory(this.name, this.testCallback, true);
19
+ newInstance.setChildren(this.children);
20
+ return newInstance;
21
+ }
22
+ async test(context) {
23
+ try {
24
+ await this.testCallback?.(context);
25
+ return ok();
26
+ } catch (e) {
27
+ if (e instanceof Error) {
28
+ return errored(e);
29
+ }
30
+ if (typeof e === 'string') {
31
+ return errored(new Error(e));
32
+ }
33
+ return errored(new Error('Unknown error'));
34
+ }
35
+ }
36
+ constructor(name, testCallback, isRequired){
37
+ this.name = name;
38
+ this.testCallback = testCallback;
39
+ this.isRequired = isRequired ?? true;
40
+ this.children = [];
41
+ }
42
+ }
43
+ const ok = ()=>({
44
+ pass: true,
45
+ error: null
46
+ });
47
+ const errored = (error)=>({
48
+ pass: false,
49
+ error
50
+ });
51
+ const requirementFactory = (name, testCallback, isRequired)=>new Requirement(name, testCallback, isRequired);
52
+
53
+ exports.Requirement = Requirement;
54
+ exports.requirementFactory = requirementFactory;
55
+ //# sourceMappingURL=requirement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requirement.js","sources":["../../../../src/modules/requirement/requirement.ts"],"sourcesContent":["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"],"names":["Requirement","setChildren","children","addChild","child","push","asOptional","newInstance","requirementFactory","name","testCallback","asRequired","test","context","ok","e","Error","errored","constructor","isRequired","pass","error"],"mappings":";;AAOO,MAAMA,WAAAA,CAAAA;AAgBXC,IAAAA,WAAAA,CAAYC,QAAgC,EAAE;QAC5C,IAAI,CAACA,QAAQ,GAAGA,QAAAA;AAChB,QAAA,OAAO,IAAI;AACb;AAEAC,IAAAA,QAAAA,CAASC,KAA2B,EAAE;AACpC,QAAA,IAAI,CAACF,QAAQ,CAACG,IAAI,CAACD,KAAAA,CAAAA;AACnB,QAAA,OAAO,IAAI;AACb;IAEAE,UAAa,GAAA;QACX,MAAMC,WAAAA,GAAcC,mBAAmB,IAAI,CAACC,IAAI,EAAE,IAAI,CAACC,YAAY,EAAE,KAAA,CAAA;AAErEH,QAAAA,WAAAA,CAAYN,WAAW,CAAC,IAAI,CAACC,QAAQ,CAAA;QAErC,OAAOK,WAAAA;AACT;IAEAI,UAAa,GAAA;QACX,MAAMJ,WAAAA,GAAcC,mBAAmB,IAAI,CAACC,IAAI,EAAE,IAAI,CAACC,YAAY,EAAE,IAAA,CAAA;AAErEH,QAAAA,WAAAA,CAAYN,WAAW,CAAC,IAAI,CAACC,QAAQ,CAAA;QAErC,OAAOK,WAAAA;AACT;IAEA,MAAMK,IAAAA,CAAKC,OAAoB,EAAE;QAC/B,IAAI;YACF,MAAM,IAAI,CAACH,YAAY,GAAGG,OAAAA,CAAAA;YAC1B,OAAOC,EAAAA,EAAAA;AACT,SAAA,CAAE,OAAOC,CAAG,EAAA;AACV,YAAA,IAAIA,aAAaC,KAAO,EAAA;AACtB,gBAAA,OAAOC,OAAQF,CAAAA,CAAAA,CAAAA;AACjB;YAEA,IAAI,OAAOA,MAAM,QAAU,EAAA;gBACzB,OAAOE,OAAAA,CAAQ,IAAID,KAAMD,CAAAA,CAAAA,CAAAA,CAAAA;AAC3B;YAEA,OAAOE,OAAAA,CAAQ,IAAID,KAAM,CAAA,eAAA,CAAA,CAAA;AAC3B;AACF;AAhDAE,IAAAA,WAAAA,CAAYT,IAAY,EAAEC,YAA4C,EAAES,UAAoB,CAAE;QAC5F,IAAI,CAACV,IAAI,GAAGA,IAAAA;QACZ,IAAI,CAACC,YAAY,GAAGA,YAAAA;QACpB,IAAI,CAACS,UAAU,GAAGA,UAAc,IAAA,IAAA;QAChC,IAAI,CAACjB,QAAQ,GAAG,EAAE;AACpB;AA4CF;AAEA,MAAMY,EAAAA,GAAK,KAAmB;QAAEM,IAAM,EAAA,IAAA;QAAMC,KAAO,EAAA;KAAK,CAAA;AAExD,MAAMJ,OAAAA,GAAU,CAACI,KAAAA,IAA8B;QAAED,IAAM,EAAA,KAAA;AAAOC,QAAAA;KAAM,CAAA;AAE7D,MAAMb,kBAAqB,GAAA,CAChCC,IACAC,EAAAA,YAAAA,EACAS,aACG,IAAInB,WAAAA,CAAYS,IAAMC,EAAAA,YAAAA,EAAcS,UAAY;;;;;"}
@@ -0,0 +1,52 @@
1
+ class Requirement {
2
+ setChildren(children) {
3
+ this.children = children;
4
+ return this;
5
+ }
6
+ addChild(child) {
7
+ this.children.push(child);
8
+ return this;
9
+ }
10
+ asOptional() {
11
+ const newInstance = requirementFactory(this.name, this.testCallback, false);
12
+ newInstance.setChildren(this.children);
13
+ return newInstance;
14
+ }
15
+ asRequired() {
16
+ const newInstance = requirementFactory(this.name, this.testCallback, true);
17
+ newInstance.setChildren(this.children);
18
+ return newInstance;
19
+ }
20
+ async test(context) {
21
+ try {
22
+ await this.testCallback?.(context);
23
+ return ok();
24
+ } catch (e) {
25
+ if (e instanceof Error) {
26
+ return errored(e);
27
+ }
28
+ if (typeof e === 'string') {
29
+ return errored(new Error(e));
30
+ }
31
+ return errored(new Error('Unknown error'));
32
+ }
33
+ }
34
+ constructor(name, testCallback, isRequired){
35
+ this.name = name;
36
+ this.testCallback = testCallback;
37
+ this.isRequired = isRequired ?? true;
38
+ this.children = [];
39
+ }
40
+ }
41
+ const ok = ()=>({
42
+ pass: true,
43
+ error: null
44
+ });
45
+ const errored = (error)=>({
46
+ pass: false,
47
+ error
48
+ });
49
+ const requirementFactory = (name, testCallback, isRequired)=>new Requirement(name, testCallback, isRequired);
50
+
51
+ export { Requirement, requirementFactory };
52
+ //# sourceMappingURL=requirement.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requirement.mjs","sources":["../../../../src/modules/requirement/requirement.ts"],"sourcesContent":["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"],"names":["Requirement","setChildren","children","addChild","child","push","asOptional","newInstance","requirementFactory","name","testCallback","asRequired","test","context","ok","e","Error","errored","constructor","isRequired","pass","error"],"mappings":"AAOO,MAAMA,WAAAA,CAAAA;AAgBXC,IAAAA,WAAAA,CAAYC,QAAgC,EAAE;QAC5C,IAAI,CAACA,QAAQ,GAAGA,QAAAA;AAChB,QAAA,OAAO,IAAI;AACb;AAEAC,IAAAA,QAAAA,CAASC,KAA2B,EAAE;AACpC,QAAA,IAAI,CAACF,QAAQ,CAACG,IAAI,CAACD,KAAAA,CAAAA;AACnB,QAAA,OAAO,IAAI;AACb;IAEAE,UAAa,GAAA;QACX,MAAMC,WAAAA,GAAcC,mBAAmB,IAAI,CAACC,IAAI,EAAE,IAAI,CAACC,YAAY,EAAE,KAAA,CAAA;AAErEH,QAAAA,WAAAA,CAAYN,WAAW,CAAC,IAAI,CAACC,QAAQ,CAAA;QAErC,OAAOK,WAAAA;AACT;IAEAI,UAAa,GAAA;QACX,MAAMJ,WAAAA,GAAcC,mBAAmB,IAAI,CAACC,IAAI,EAAE,IAAI,CAACC,YAAY,EAAE,IAAA,CAAA;AAErEH,QAAAA,WAAAA,CAAYN,WAAW,CAAC,IAAI,CAACC,QAAQ,CAAA;QAErC,OAAOK,WAAAA;AACT;IAEA,MAAMK,IAAAA,CAAKC,OAAoB,EAAE;QAC/B,IAAI;YACF,MAAM,IAAI,CAACH,YAAY,GAAGG,OAAAA,CAAAA;YAC1B,OAAOC,EAAAA,EAAAA;AACT,SAAA,CAAE,OAAOC,CAAG,EAAA;AACV,YAAA,IAAIA,aAAaC,KAAO,EAAA;AACtB,gBAAA,OAAOC,OAAQF,CAAAA,CAAAA,CAAAA;AACjB;YAEA,IAAI,OAAOA,MAAM,QAAU,EAAA;gBACzB,OAAOE,OAAAA,CAAQ,IAAID,KAAMD,CAAAA,CAAAA,CAAAA,CAAAA;AAC3B;YAEA,OAAOE,OAAAA,CAAQ,IAAID,KAAM,CAAA,eAAA,CAAA,CAAA;AAC3B;AACF;AAhDAE,IAAAA,WAAAA,CAAYT,IAAY,EAAEC,YAA4C,EAAES,UAAoB,CAAE;QAC5F,IAAI,CAACV,IAAI,GAAGA,IAAAA;QACZ,IAAI,CAACC,YAAY,GAAGA,YAAAA;QACpB,IAAI,CAACS,UAAU,GAAGA,UAAc,IAAA,IAAA;QAChC,IAAI,CAACjB,QAAQ,GAAG,EAAE;AACpB;AA4CF;AAEA,MAAMY,EAAAA,GAAK,KAAmB;QAAEM,IAAM,EAAA,IAAA;QAAMC,KAAO,EAAA;KAAK,CAAA;AAExD,MAAMJ,OAAAA,GAAU,CAACI,KAAAA,IAA8B;QAAED,IAAM,EAAA,KAAA;AAAOC,QAAAA;KAAM,CAAA;AAE7D,MAAMb,kBAAqB,GAAA,CAChCC,IACAC,EAAAA,YAAAA,EACAS,aACG,IAAInB,WAAAA,CAAYS,IAAMC,EAAAA,YAAAA,EAAcS,UAAY;;;;"}
@@ -0,0 +1,21 @@
1
+ 'use strict';
2
+
3
+ var Runner = require('jscodeshift/src/Runner');
4
+ var runner = require('../runner.js');
5
+
6
+ class CodeRunner extends runner.AbstractRunner {
7
+ valid(codemod) {
8
+ return codemod.kind === 'code';
9
+ }
10
+ constructor(...args){
11
+ super(...args);
12
+ this.runner = Runner.run;
13
+ }
14
+ }
15
+ const codeRunnerFactory = (paths, configuration)=>{
16
+ return new CodeRunner(paths, configuration);
17
+ };
18
+
19
+ exports.CodeRunner = CodeRunner;
20
+ exports.codeRunnerFactory = codeRunnerFactory;
21
+ //# sourceMappingURL=code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code.js","sources":["../../../../../src/modules/runner/code/code.ts"],"sourcesContent":["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"],"names":["CodeRunner","AbstractRunner","valid","codemod","kind","runner","jscodeshift","codeRunnerFactory","paths","configuration"],"mappings":";;;;;AAOO,MAAMA,UAAmBC,SAAAA,qBAAAA,CAAAA;AAG9BC,IAAAA,KAAAA,CAAMC,OAAwB,EAAW;QACvC,OAAOA,OAAAA,CAAQC,IAAI,KAAK,MAAA;AAC1B;;;aAJAC,MAASC,GAAAA,UAAAA;;AAKX;AAEO,MAAMC,iBAAoB,GAAA,CAACC,KAAiBC,EAAAA,aAAAA,GAAAA;IACjD,OAAO,IAAIT,WAAWQ,KAAOC,EAAAA,aAAAA,CAAAA;AAC/B;;;;;"}
@@ -0,0 +1,18 @@
1
+ import { run } from 'jscodeshift/src/Runner';
2
+ import { AbstractRunner } from '../runner.mjs';
3
+
4
+ class CodeRunner extends AbstractRunner {
5
+ valid(codemod) {
6
+ return codemod.kind === 'code';
7
+ }
8
+ constructor(...args){
9
+ super(...args);
10
+ this.runner = run;
11
+ }
12
+ }
13
+ const codeRunnerFactory = (paths, configuration)=>{
14
+ return new CodeRunner(paths, configuration);
15
+ };
16
+
17
+ export { CodeRunner, codeRunnerFactory };
18
+ //# sourceMappingURL=code.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code.mjs","sources":["../../../../../src/modules/runner/code/code.ts"],"sourcesContent":["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"],"names":["CodeRunner","AbstractRunner","valid","codemod","kind","runner","jscodeshift","codeRunnerFactory","paths","configuration"],"mappings":";;;AAOO,MAAMA,UAAmBC,SAAAA,cAAAA,CAAAA;AAG9BC,IAAAA,KAAAA,CAAMC,OAAwB,EAAW;QACvC,OAAOA,OAAAA,CAAQC,IAAI,KAAK,MAAA;AAC1B;;;aAJAC,MAASC,GAAAA,GAAAA;;AAKX;AAEO,MAAMC,iBAAoB,GAAA,CAACC,KAAiBC,EAAAA,aAAAA,GAAAA;IACjD,OAAO,IAAIT,WAAWQ,KAAOC,EAAAA,aAAAA,CAAAA;AAC/B;;;;"}
@@ -0,0 +1,8 @@
1
+ 'use strict';
2
+
3
+ var code = require('./code.js');
4
+
5
+
6
+
7
+ exports.codeRunnerFactory = code.codeRunnerFactory;
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,2 @@
1
+ export { codeRunnerFactory } from './code.mjs';
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ 'use strict';
2
+
3
+ var index = require('./json/index.js');
4
+ var index$1 = require('./code/index.js');
5
+
6
+
7
+
8
+ exports.json = index;
9
+ exports.code = index$1;
10
+ //# sourceMappingURL=index.js.map