@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
@@ -0,0 +1,76 @@
1
+ 'use strict';
2
+
3
+ var chalk = require('chalk');
4
+
5
+ class Logger {
6
+ get isNotSilent() {
7
+ return !this.isSilent;
8
+ }
9
+ get errors() {
10
+ return this.nbErrorsCalls;
11
+ }
12
+ get warnings() {
13
+ return this.nbWarningsCalls;
14
+ }
15
+ get stdout() {
16
+ return this.isSilent ? undefined : process.stdout;
17
+ }
18
+ get stderr() {
19
+ return this.isSilent ? undefined : process.stderr;
20
+ }
21
+ setDebug(debug) {
22
+ this.isDebug = debug;
23
+ return this;
24
+ }
25
+ setSilent(silent) {
26
+ this.isSilent = silent;
27
+ return this;
28
+ }
29
+ debug(...args) {
30
+ const isDebugEnabled = this.isNotSilent && this.isDebug;
31
+ if (isDebugEnabled) {
32
+ console.log(chalk.cyan(`[DEBUG]\t[${nowAsISO()}]`), ...args);
33
+ }
34
+ return this;
35
+ }
36
+ error(...args) {
37
+ this.nbErrorsCalls += 1;
38
+ if (this.isNotSilent) {
39
+ console.error(chalk.red(`[ERROR]\t[${nowAsISO()}]`), ...args);
40
+ }
41
+ return this;
42
+ }
43
+ info(...args) {
44
+ if (this.isNotSilent) {
45
+ console.info(chalk.blue(`[INFO]\t[${new Date().toISOString()}]`), ...args);
46
+ }
47
+ return this;
48
+ }
49
+ raw(...args) {
50
+ if (this.isNotSilent) {
51
+ console.log(...args);
52
+ }
53
+ return this;
54
+ }
55
+ warn(...args) {
56
+ this.nbWarningsCalls += 1;
57
+ if (this.isNotSilent) {
58
+ console.warn(chalk.yellow(`[WARN]\t[${new Date().toISOString()}]`), ...args);
59
+ }
60
+ return this;
61
+ }
62
+ constructor(options = {}){
63
+ // Set verbosity options
64
+ this.isDebug = options.debug ?? false;
65
+ this.isSilent = options.silent ?? false;
66
+ // Initialize counters
67
+ this.nbErrorsCalls = 0;
68
+ this.nbWarningsCalls = 0;
69
+ }
70
+ }
71
+ const nowAsISO = ()=>new Date().toISOString();
72
+ const loggerFactory = (options = {})=>new Logger(options);
73
+
74
+ exports.Logger = Logger;
75
+ exports.loggerFactory = loggerFactory;
76
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sources":["../../../../src/modules/logger/logger.ts"],"sourcesContent":["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":["Logger","isNotSilent","isSilent","errors","nbErrorsCalls","warnings","nbWarningsCalls","stdout","undefined","process","stderr","setDebug","debug","isDebug","setSilent","silent","args","isDebugEnabled","console","log","chalk","cyan","nowAsISO","error","red","info","blue","Date","toISOString","raw","warn","yellow","constructor","options","loggerFactory"],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ import chalk from 'chalk';
2
+
3
+ class Logger {
4
+ get isNotSilent() {
5
+ return !this.isSilent;
6
+ }
7
+ get errors() {
8
+ return this.nbErrorsCalls;
9
+ }
10
+ get warnings() {
11
+ return this.nbWarningsCalls;
12
+ }
13
+ get stdout() {
14
+ return this.isSilent ? undefined : process.stdout;
15
+ }
16
+ get stderr() {
17
+ return this.isSilent ? undefined : process.stderr;
18
+ }
19
+ setDebug(debug) {
20
+ this.isDebug = debug;
21
+ return this;
22
+ }
23
+ setSilent(silent) {
24
+ this.isSilent = silent;
25
+ return this;
26
+ }
27
+ debug(...args) {
28
+ const isDebugEnabled = this.isNotSilent && this.isDebug;
29
+ if (isDebugEnabled) {
30
+ console.log(chalk.cyan(`[DEBUG]\t[${nowAsISO()}]`), ...args);
31
+ }
32
+ return this;
33
+ }
34
+ error(...args) {
35
+ this.nbErrorsCalls += 1;
36
+ if (this.isNotSilent) {
37
+ console.error(chalk.red(`[ERROR]\t[${nowAsISO()}]`), ...args);
38
+ }
39
+ return this;
40
+ }
41
+ info(...args) {
42
+ if (this.isNotSilent) {
43
+ console.info(chalk.blue(`[INFO]\t[${new Date().toISOString()}]`), ...args);
44
+ }
45
+ return this;
46
+ }
47
+ raw(...args) {
48
+ if (this.isNotSilent) {
49
+ console.log(...args);
50
+ }
51
+ return this;
52
+ }
53
+ warn(...args) {
54
+ this.nbWarningsCalls += 1;
55
+ if (this.isNotSilent) {
56
+ console.warn(chalk.yellow(`[WARN]\t[${new Date().toISOString()}]`), ...args);
57
+ }
58
+ return this;
59
+ }
60
+ constructor(options = {}){
61
+ // Set verbosity options
62
+ this.isDebug = options.debug ?? false;
63
+ this.isSilent = options.silent ?? false;
64
+ // Initialize counters
65
+ this.nbErrorsCalls = 0;
66
+ this.nbWarningsCalls = 0;
67
+ }
68
+ }
69
+ const nowAsISO = ()=>new Date().toISOString();
70
+ const loggerFactory = (options = {})=>new Logger(options);
71
+
72
+ export { Logger, loggerFactory };
73
+ //# sourceMappingURL=logger.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.mjs","sources":["../../../../src/modules/logger/logger.ts"],"sourcesContent":["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":["Logger","isNotSilent","isSilent","errors","nbErrorsCalls","warnings","nbWarningsCalls","stdout","undefined","process","stderr","setDebug","debug","isDebug","setSilent","silent","args","isDebugEnabled","console","log","chalk","cyan","nowAsISO","error","red","info","blue","Date","toISOString","raw","warn","yellow","constructor","options","loggerFactory"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ const NPM_REGISTRY_URL = 'https://registry.npmjs.org';
4
+
5
+ exports.NPM_REGISTRY_URL = NPM_REGISTRY_URL;
6
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sources":["../../../../src/modules/npm/constants.ts"],"sourcesContent":["export const NPM_REGISTRY_URL = 'https://registry.npmjs.org';\n"],"names":["NPM_REGISTRY_URL"],"mappings":";;AAAO,MAAMA,mBAAmB;;;;"}
@@ -0,0 +1,4 @@
1
+ const NPM_REGISTRY_URL = 'https://registry.npmjs.org';
2
+
3
+ export { NPM_REGISTRY_URL };
4
+ //# sourceMappingURL=constants.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.mjs","sources":["../../../../src/modules/npm/constants.ts"],"sourcesContent":["export const NPM_REGISTRY_URL = 'https://registry.npmjs.org';\n"],"names":["NPM_REGISTRY_URL"],"mappings":"AAAO,MAAMA,mBAAmB;;;;"}
@@ -0,0 +1,55 @@
1
+ 'use strict';
2
+
3
+ var assert = require('node:assert');
4
+ var semver$1 = require('semver');
5
+ var constants = require('./constants.js');
6
+ var semver = require('../version/semver.js');
7
+ require('../version/types.js');
8
+
9
+ class Package {
10
+ get isLoaded() {
11
+ return this.npmPackage !== null;
12
+ }
13
+ assertPackageIsLoaded(npmPackage) {
14
+ assert(this.isLoaded, 'The package is not loaded yet');
15
+ }
16
+ getVersionsDict() {
17
+ this.assertPackageIsLoaded(this.npmPackage);
18
+ return this.npmPackage.versions;
19
+ }
20
+ getVersionsAsList() {
21
+ this.assertPackageIsLoaded(this.npmPackage);
22
+ return Object.values(this.npmPackage.versions);
23
+ }
24
+ findVersionsInRange(range) {
25
+ const versions = this.getVersionsAsList();
26
+ return versions// Only select versions matching the upgrade range
27
+ .filter((v)=>range.test(v.version))// Only select supported version format (x.x.x)
28
+ .filter((v)=>semver.isLiteralSemVer(v.version))// Sort in ascending order
29
+ .sort((v1, v2)=>semver$1.compare(v1.version, v2.version));
30
+ }
31
+ findVersion(version) {
32
+ const versions = this.getVersionsAsList();
33
+ return versions.find((npmVersion)=>semver$1.eq(npmVersion.version, version));
34
+ }
35
+ async refresh() {
36
+ const response = await fetch(this.packageURL);
37
+ // TODO: Use a validation library to make sure the response structure is correct
38
+ assert(response.ok, `Request failed for ${this.packageURL}`);
39
+ this.npmPackage = await response.json();
40
+ return this;
41
+ }
42
+ versionExists(version) {
43
+ return this.findVersion(version) !== undefined;
44
+ }
45
+ constructor(name){
46
+ this.name = name;
47
+ this.packageURL = `${constants.NPM_REGISTRY_URL}/${name}`;
48
+ this.npmPackage = null;
49
+ }
50
+ }
51
+ const npmPackageFactory = (name)=>new Package(name);
52
+
53
+ exports.Package = Package;
54
+ exports.npmPackageFactory = npmPackageFactory;
55
+ //# sourceMappingURL=package.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package.js","sources":["../../../../src/modules/npm/package.ts"],"sourcesContent":["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"],"names":["Package","isLoaded","npmPackage","assertPackageIsLoaded","assert","getVersionsDict","versions","getVersionsAsList","Object","values","findVersionsInRange","range","filter","v","test","version","isLiteralSemVer","sort","v1","v2","semver","compare","findVersion","find","npmVersion","eq","refresh","response","fetch","packageURL","ok","json","versionExists","undefined","constructor","name","constants","npmPackageFactory"],"mappings":";;;;;;;;AASO,MAAMA,OAAAA,CAAAA;AAaX,IAAA,IAAIC,QAAW,GAAA;QACb,OAAO,IAAI,CAACC,UAAU,KAAK,IAAA;AAC7B;AAEQC,IAAAA,qBAAAA,CAAsBD,UAA6B,EAAoC;QAC7FE,MAAO,CAAA,IAAI,CAACH,QAAQ,EAAE,+BAAA,CAAA;AACxB;IAEAI,eAAkB,GAAA;AAChB,QAAA,IAAI,CAACF,qBAAqB,CAAC,IAAI,CAACD,UAAU,CAAA;AAE1C,QAAA,OAAO,IAAI,CAACA,UAAU,CAACI,QAAQ;AACjC;IAEAC,iBAAoB,GAAA;AAClB,QAAA,IAAI,CAACJ,qBAAqB,CAAC,IAAI,CAACD,UAAU,CAAA;AAE1C,QAAA,OAAOM,OAAOC,MAAM,CAAC,IAAI,CAACP,UAAU,CAACI,QAAQ,CAAA;AAC/C;AAEAI,IAAAA,mBAAAA,CAAoBC,KAAoB,EAAE;QACxC,MAAML,QAAAA,GAAW,IAAI,CAACC,iBAAiB,EAAA;AAEvC,QAAA,OACED,QACE;SACCM,MAAM,CAAC,CAACC,CAAMF,GAAAA,KAAAA,CAAMG,IAAI,CAACD,CAAAA,CAAEE,OAAO,CAAA,CACnC;AACCH,SAAAA,MAAM,CAAC,CAACC,CAAAA,GAAMG,uBAAgBH,CAAEE,CAAAA,OAAO,EACxC;SACCE,IAAI,CAAC,CAACC,EAAAA,EAAIC,EAAOC,GAAAA,QAAAA,CAAOC,OAAO,CAACH,EAAGH,CAAAA,OAAO,EAAEI,EAAAA,CAAGJ,OAAO,CAAA,CAAA;AAE7D;AAEAO,IAAAA,WAAAA,CAAYP,OAAuB,EAAiC;QAClE,MAAMT,QAAAA,GAAW,IAAI,CAACC,iBAAiB,EAAA;QAEvC,OAAOD,QAAAA,CAASiB,IAAI,CAAC,CAACC,UAAAA,GAAeJ,SAAOK,EAAE,CAACD,UAAWT,CAAAA,OAAO,EAAEA,OAAAA,CAAAA,CAAAA;AACrE;AAEA,IAAA,MAAMW,OAAU,GAAA;AACd,QAAA,MAAMC,QAAW,GAAA,MAAMC,KAAM,CAAA,IAAI,CAACC,UAAU,CAAA;;QAG5CzB,MAAOuB,CAAAA,QAAAA,CAASG,EAAE,EAAE,CAAC,mBAAmB,EAAE,IAAI,CAACD,UAAU,CAAC,CAAC,CAAA;AAE3D,QAAA,IAAI,CAAC3B,UAAU,GAAG,MAAMyB,SAASI,IAAI,EAAA;AAErC,QAAA,OAAO,IAAI;AACb;AAEAC,IAAAA,aAAAA,CAAcjB,OAAuB,EAAE;AACrC,QAAA,OAAO,IAAI,CAACO,WAAW,CAACP,OAAakB,CAAAA,KAAAA,SAAAA;AACvC;AA3DAC,IAAAA,WAAAA,CAAYC,IAAY,CAAE;QACxB,IAAI,CAACA,IAAI,GAAGA,IAAAA;QACZ,IAAI,CAACN,UAAU,GAAG,CAAC,EAAEO,0BAA0B,CAAC,CAAC,EAAED,IAAAA,CAAK,CAAC;QACzD,IAAI,CAACjC,UAAU,GAAG,IAAA;AACpB;AAwDF;MAEamC,iBAAoB,GAAA,CAACF,IAAiB,GAAA,IAAInC,QAAQmC,IAAM;;;;;"}
@@ -0,0 +1,52 @@
1
+ import assert from 'node:assert';
2
+ import semver from 'semver';
3
+ import { NPM_REGISTRY_URL } from './constants.mjs';
4
+ import { isLiteralSemVer } from '../version/semver.mjs';
5
+ import '../version/types.mjs';
6
+
7
+ class Package {
8
+ get isLoaded() {
9
+ return this.npmPackage !== null;
10
+ }
11
+ assertPackageIsLoaded(npmPackage) {
12
+ assert(this.isLoaded, 'The package is not loaded yet');
13
+ }
14
+ getVersionsDict() {
15
+ this.assertPackageIsLoaded(this.npmPackage);
16
+ return this.npmPackage.versions;
17
+ }
18
+ getVersionsAsList() {
19
+ this.assertPackageIsLoaded(this.npmPackage);
20
+ return Object.values(this.npmPackage.versions);
21
+ }
22
+ findVersionsInRange(range) {
23
+ const versions = this.getVersionsAsList();
24
+ return versions// Only select versions matching the upgrade range
25
+ .filter((v)=>range.test(v.version))// Only select supported version format (x.x.x)
26
+ .filter((v)=>isLiteralSemVer(v.version))// Sort in ascending order
27
+ .sort((v1, v2)=>semver.compare(v1.version, v2.version));
28
+ }
29
+ findVersion(version) {
30
+ const versions = this.getVersionsAsList();
31
+ return versions.find((npmVersion)=>semver.eq(npmVersion.version, version));
32
+ }
33
+ async refresh() {
34
+ const response = await fetch(this.packageURL);
35
+ // TODO: Use a validation library to make sure the response structure is correct
36
+ assert(response.ok, `Request failed for ${this.packageURL}`);
37
+ this.npmPackage = await response.json();
38
+ return this;
39
+ }
40
+ versionExists(version) {
41
+ return this.findVersion(version) !== undefined;
42
+ }
43
+ constructor(name){
44
+ this.name = name;
45
+ this.packageURL = `${NPM_REGISTRY_URL}/${name}`;
46
+ this.npmPackage = null;
47
+ }
48
+ }
49
+ const npmPackageFactory = (name)=>new Package(name);
50
+
51
+ export { Package, npmPackageFactory };
52
+ //# sourceMappingURL=package.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package.mjs","sources":["../../../../src/modules/npm/package.ts"],"sourcesContent":["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"],"names":["Package","isLoaded","npmPackage","assertPackageIsLoaded","assert","getVersionsDict","versions","getVersionsAsList","Object","values","findVersionsInRange","range","filter","v","test","version","isLiteralSemVer","sort","v1","v2","semver","compare","findVersion","find","npmVersion","eq","refresh","response","fetch","packageURL","ok","json","versionExists","undefined","constructor","name","constants","npmPackageFactory"],"mappings":";;;;;;AASO,MAAMA,OAAAA,CAAAA;AAaX,IAAA,IAAIC,QAAW,GAAA;QACb,OAAO,IAAI,CAACC,UAAU,KAAK,IAAA;AAC7B;AAEQC,IAAAA,qBAAAA,CAAsBD,UAA6B,EAAoC;QAC7FE,MAAO,CAAA,IAAI,CAACH,QAAQ,EAAE,+BAAA,CAAA;AACxB;IAEAI,eAAkB,GAAA;AAChB,QAAA,IAAI,CAACF,qBAAqB,CAAC,IAAI,CAACD,UAAU,CAAA;AAE1C,QAAA,OAAO,IAAI,CAACA,UAAU,CAACI,QAAQ;AACjC;IAEAC,iBAAoB,GAAA;AAClB,QAAA,IAAI,CAACJ,qBAAqB,CAAC,IAAI,CAACD,UAAU,CAAA;AAE1C,QAAA,OAAOM,OAAOC,MAAM,CAAC,IAAI,CAACP,UAAU,CAACI,QAAQ,CAAA;AAC/C;AAEAI,IAAAA,mBAAAA,CAAoBC,KAAoB,EAAE;QACxC,MAAML,QAAAA,GAAW,IAAI,CAACC,iBAAiB,EAAA;AAEvC,QAAA,OACED,QACE;SACCM,MAAM,CAAC,CAACC,CAAMF,GAAAA,KAAAA,CAAMG,IAAI,CAACD,CAAAA,CAAEE,OAAO,CAAA,CACnC;AACCH,SAAAA,MAAM,CAAC,CAACC,CAAAA,GAAMG,gBAAgBH,CAAEE,CAAAA,OAAO,EACxC;SACCE,IAAI,CAAC,CAACC,EAAAA,EAAIC,EAAOC,GAAAA,MAAAA,CAAOC,OAAO,CAACH,EAAGH,CAAAA,OAAO,EAAEI,EAAAA,CAAGJ,OAAO,CAAA,CAAA;AAE7D;AAEAO,IAAAA,WAAAA,CAAYP,OAAuB,EAAiC;QAClE,MAAMT,QAAAA,GAAW,IAAI,CAACC,iBAAiB,EAAA;QAEvC,OAAOD,QAAAA,CAASiB,IAAI,CAAC,CAACC,UAAAA,GAAeJ,OAAOK,EAAE,CAACD,UAAWT,CAAAA,OAAO,EAAEA,OAAAA,CAAAA,CAAAA;AACrE;AAEA,IAAA,MAAMW,OAAU,GAAA;AACd,QAAA,MAAMC,QAAW,GAAA,MAAMC,KAAM,CAAA,IAAI,CAACC,UAAU,CAAA;;QAG5CzB,MAAOuB,CAAAA,QAAAA,CAASG,EAAE,EAAE,CAAC,mBAAmB,EAAE,IAAI,CAACD,UAAU,CAAC,CAAC,CAAA;AAE3D,QAAA,IAAI,CAAC3B,UAAU,GAAG,MAAMyB,SAASI,IAAI,EAAA;AAErC,QAAA,OAAO,IAAI;AACb;AAEAC,IAAAA,aAAAA,CAAcjB,OAAuB,EAAE;AACrC,QAAA,OAAO,IAAI,CAACO,WAAW,CAACP,OAAakB,CAAAA,KAAAA,SAAAA;AACvC;AA3DAC,IAAAA,WAAAA,CAAYC,IAAY,CAAE;QACxB,IAAI,CAACA,IAAI,GAAGA,IAAAA;QACZ,IAAI,CAACN,UAAU,GAAG,CAAC,EAAEO,gBAA0B,CAAC,CAAC,EAAED,IAAAA,CAAK,CAAC;QACzD,IAAI,CAACjC,UAAU,GAAG,IAAA;AACpB;AAwDF;MAEamC,iBAAoB,GAAA,CAACF,IAAiB,GAAA,IAAInC,QAAQmC,IAAM;;;;"}
@@ -0,0 +1,45 @@
1
+ 'use strict';
2
+
3
+ const PROJECT_PACKAGE_JSON = 'package.json';
4
+ const PROJECT_APP_ALLOWED_ROOT_PATHS = [
5
+ 'src',
6
+ 'config',
7
+ 'public'
8
+ ];
9
+ const PROJECT_PLUGIN_ALLOWED_ROOT_PATHS = [
10
+ 'admin',
11
+ 'server'
12
+ ];
13
+ const PROJECT_PLUGIN_ROOT_FILES = [
14
+ 'strapi-admin.js',
15
+ 'strapi-server.js'
16
+ ];
17
+ const PROJECT_CODE_EXTENSIONS = [
18
+ // Source files
19
+ 'js',
20
+ 'mjs',
21
+ 'ts',
22
+ // React files
23
+ 'jsx',
24
+ 'tsx'
25
+ ];
26
+ const PROJECT_JSON_EXTENSIONS = [
27
+ 'json'
28
+ ];
29
+ const PROJECT_ALLOWED_EXTENSIONS = [
30
+ ...PROJECT_CODE_EXTENSIONS,
31
+ ...PROJECT_JSON_EXTENSIONS
32
+ ];
33
+ const SCOPED_STRAPI_PACKAGE_PREFIX = '@strapi/';
34
+ const STRAPI_DEPENDENCY_NAME = `${SCOPED_STRAPI_PACKAGE_PREFIX}strapi`;
35
+
36
+ exports.PROJECT_ALLOWED_EXTENSIONS = PROJECT_ALLOWED_EXTENSIONS;
37
+ exports.PROJECT_APP_ALLOWED_ROOT_PATHS = PROJECT_APP_ALLOWED_ROOT_PATHS;
38
+ exports.PROJECT_CODE_EXTENSIONS = PROJECT_CODE_EXTENSIONS;
39
+ exports.PROJECT_JSON_EXTENSIONS = PROJECT_JSON_EXTENSIONS;
40
+ exports.PROJECT_PACKAGE_JSON = PROJECT_PACKAGE_JSON;
41
+ exports.PROJECT_PLUGIN_ALLOWED_ROOT_PATHS = PROJECT_PLUGIN_ALLOWED_ROOT_PATHS;
42
+ exports.PROJECT_PLUGIN_ROOT_FILES = PROJECT_PLUGIN_ROOT_FILES;
43
+ exports.SCOPED_STRAPI_PACKAGE_PREFIX = SCOPED_STRAPI_PACKAGE_PREFIX;
44
+ exports.STRAPI_DEPENDENCY_NAME = STRAPI_DEPENDENCY_NAME;
45
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sources":["../../../../src/modules/project/constants.ts"],"sourcesContent":["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"],"names":["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"],"mappings":";;AAAO,MAAMA,uBAAuB;MAEvBC,8BAAiC,GAAA;AAAC,IAAA,KAAA;AAAO,IAAA,QAAA;AAAU,IAAA;;MAEnDC,iCAAoC,GAAA;AAAC,IAAA,OAAA;AAAS,IAAA;;MAE9CC,yBAA4B,GAAA;AAAC,IAAA,iBAAA;AAAmB,IAAA;;MAEhDC,uBAA0B,GAAA;;AAErC,IAAA,IAAA;AACA,IAAA,KAAA;AACA,IAAA,IAAA;;AAEA,IAAA,KAAA;AACA,IAAA;;MAGWC,uBAA0B,GAAA;AAAC,IAAA;;MAE3BC,0BAA6B,GAAA;AAAIF,IAAAA,GAAAA,uBAAAA;AAA4BC,IAAAA,GAAAA;;AAEnE,MAAME,+BAA+B;MAE/BC,sBAAyB,GAAA,CAAC,EAAED,4BAA6B,CAAA,MAAM;;;;;;;;;;;;"}
@@ -0,0 +1,35 @@
1
+ const PROJECT_PACKAGE_JSON = 'package.json';
2
+ const PROJECT_APP_ALLOWED_ROOT_PATHS = [
3
+ 'src',
4
+ 'config',
5
+ 'public'
6
+ ];
7
+ const PROJECT_PLUGIN_ALLOWED_ROOT_PATHS = [
8
+ 'admin',
9
+ 'server'
10
+ ];
11
+ const PROJECT_PLUGIN_ROOT_FILES = [
12
+ 'strapi-admin.js',
13
+ 'strapi-server.js'
14
+ ];
15
+ const PROJECT_CODE_EXTENSIONS = [
16
+ // Source files
17
+ 'js',
18
+ 'mjs',
19
+ 'ts',
20
+ // React files
21
+ 'jsx',
22
+ 'tsx'
23
+ ];
24
+ const PROJECT_JSON_EXTENSIONS = [
25
+ 'json'
26
+ ];
27
+ const PROJECT_ALLOWED_EXTENSIONS = [
28
+ ...PROJECT_CODE_EXTENSIONS,
29
+ ...PROJECT_JSON_EXTENSIONS
30
+ ];
31
+ const SCOPED_STRAPI_PACKAGE_PREFIX = '@strapi/';
32
+ const STRAPI_DEPENDENCY_NAME = `${SCOPED_STRAPI_PACKAGE_PREFIX}strapi`;
33
+
34
+ export { PROJECT_ALLOWED_EXTENSIONS, PROJECT_APP_ALLOWED_ROOT_PATHS, PROJECT_CODE_EXTENSIONS, PROJECT_JSON_EXTENSIONS, PROJECT_PACKAGE_JSON, PROJECT_PLUGIN_ALLOWED_ROOT_PATHS, PROJECT_PLUGIN_ROOT_FILES, SCOPED_STRAPI_PACKAGE_PREFIX, STRAPI_DEPENDENCY_NAME };
35
+ //# sourceMappingURL=constants.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.mjs","sources":["../../../../src/modules/project/constants.ts"],"sourcesContent":["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"],"names":["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"],"mappings":"AAAO,MAAMA,uBAAuB;MAEvBC,8BAAiC,GAAA;AAAC,IAAA,KAAA;AAAO,IAAA,QAAA;AAAU,IAAA;;MAEnDC,iCAAoC,GAAA;AAAC,IAAA,OAAA;AAAS,IAAA;;MAE9CC,yBAA4B,GAAA;AAAC,IAAA,iBAAA;AAAmB,IAAA;;MAEhDC,uBAA0B,GAAA;;AAErC,IAAA,IAAA;AACA,IAAA,KAAA;AACA,IAAA,IAAA;;AAEA,IAAA,KAAA;AACA,IAAA;;MAGWC,uBAA0B,GAAA;AAAC,IAAA;;MAE3BC,0BAA6B,GAAA;AAAIF,IAAAA,GAAAA,uBAAAA;AAA4BC,IAAAA,GAAAA;;AAEnE,MAAME,+BAA+B;MAE/BC,sBAAyB,GAAA,CAAC,EAAED,4BAA6B,CAAA,MAAM;;;;"}
@@ -0,0 +1,15 @@
1
+ 'use strict';
2
+
3
+ var project = require('./project.js');
4
+ var constants = require('./constants.js');
5
+ var utils = require('./utils.js');
6
+
7
+
8
+
9
+ exports.projectFactory = project.projectFactory;
10
+ exports.constants = constants;
11
+ exports.assertAppProject = utils.assertAppProject;
12
+ exports.assertPluginProject = utils.assertPluginProject;
13
+ exports.isApplicationProject = utils.isApplicationProject;
14
+ exports.isPluginProject = utils.isPluginProject;
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;"}
@@ -0,0 +1,5 @@
1
+ export { projectFactory } from './project.mjs';
2
+ import * as constants from './constants.mjs';
3
+ export { constants };
4
+ export { assertAppProject, assertPluginProject, isApplicationProject, isPluginProject } from './utils.mjs';
5
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
@@ -0,0 +1,208 @@
1
+ 'use strict';
2
+
3
+ var path = require('node:path');
4
+ var assert = require('node:assert');
5
+ var fse = require('fs-extra');
6
+ var semver$1 = require('semver');
7
+ var semver = require('../version/semver.js');
8
+ require('../version/types.js');
9
+ var scanner = require('../file-scanner/scanner.js');
10
+ var code = require('../runner/code/code.js');
11
+ var json = require('../runner/json/json.js');
12
+ var constants = require('./constants.js');
13
+
14
+ class Project {
15
+ getFilesByExtensions(extensions) {
16
+ return this.files.filter((filePath)=>{
17
+ const fileExtension = path.extname(filePath);
18
+ return extensions.includes(fileExtension);
19
+ });
20
+ }
21
+ refresh() {
22
+ this.refreshPackageJSON();
23
+ this.refreshProjectFiles();
24
+ return this;
25
+ }
26
+ async runCodemods(codemods, options) {
27
+ const runners = this.createProjectCodemodsRunners(options.dry);
28
+ const reports = [];
29
+ for (const codemod of codemods){
30
+ for (const runner of runners){
31
+ if (runner.valid(codemod)) {
32
+ const report = await runner.run(codemod);
33
+ reports.push({
34
+ codemod,
35
+ report
36
+ });
37
+ }
38
+ }
39
+ }
40
+ return reports;
41
+ }
42
+ createProjectCodemodsRunners(dry = false) {
43
+ const jsonExtensions = constants.PROJECT_JSON_EXTENSIONS.map((ext)=>`.${ext}`);
44
+ const codeExtensions = constants.PROJECT_CODE_EXTENSIONS.map((ext)=>`.${ext}`);
45
+ const jsonFiles = this.getFilesByExtensions(jsonExtensions);
46
+ const codeFiles = this.getFilesByExtensions(codeExtensions);
47
+ const codeRunner = code.codeRunnerFactory(codeFiles, {
48
+ dry,
49
+ parser: 'ts',
50
+ runInBand: true,
51
+ babel: true,
52
+ extensions: constants.PROJECT_CODE_EXTENSIONS.join(','),
53
+ // Don't output any log coming from the runner
54
+ print: false,
55
+ silent: true,
56
+ verbose: 0
57
+ });
58
+ const jsonRunner = json.jsonRunnerFactory(jsonFiles, {
59
+ dry,
60
+ cwd: this.cwd
61
+ });
62
+ return [
63
+ codeRunner,
64
+ jsonRunner
65
+ ];
66
+ }
67
+ refreshPackageJSON() {
68
+ const packageJSONPath = path.join(this.cwd, constants.PROJECT_PACKAGE_JSON);
69
+ try {
70
+ fse.accessSync(packageJSONPath);
71
+ } catch {
72
+ throw new Error(`Could not find a ${constants.PROJECT_PACKAGE_JSON} file in ${this.cwd}`);
73
+ }
74
+ const packageJSONBuffer = fse.readFileSync(packageJSONPath);
75
+ this.packageJSONPath = packageJSONPath;
76
+ this.packageJSON = JSON.parse(packageJSONBuffer.toString());
77
+ }
78
+ refreshProjectFiles() {
79
+ const scanner$1 = scanner.fileScannerFactory(this.cwd);
80
+ this.files = scanner$1.scan(this.paths);
81
+ }
82
+ constructor(cwd, config){
83
+ if (!fse.pathExistsSync(cwd)) {
84
+ throw new Error(`ENOENT: no such file or directory, access '${cwd}'`);
85
+ }
86
+ this.cwd = cwd;
87
+ this.paths = config.paths;
88
+ this.refresh();
89
+ }
90
+ }
91
+ class AppProject extends Project {
92
+ /**
93
+ * Returns an array of allowed file paths for a Strapi application
94
+ *
95
+ * The resulting paths include app default files and the root package.json file.
96
+ */ static get paths() {
97
+ const allowedRootPaths = formatGlobCollectionPattern(constants.PROJECT_APP_ALLOWED_ROOT_PATHS);
98
+ const allowedExtensions = formatGlobCollectionPattern(constants.PROJECT_ALLOWED_EXTENSIONS);
99
+ return [
100
+ // App default files
101
+ `./${allowedRootPaths}/**/*.${allowedExtensions}`,
102
+ `!./**/node_modules/**/*`,
103
+ `!./**/dist/**/*`,
104
+ // Root package.json file
105
+ constants.PROJECT_PACKAGE_JSON
106
+ ];
107
+ }
108
+ refresh() {
109
+ super.refresh();
110
+ this.refreshStrapiVersion();
111
+ return this;
112
+ }
113
+ refreshStrapiVersion() {
114
+ this.strapiVersion = // First try to get the strapi version from the package.json dependencies
115
+ this.findStrapiVersionFromProjectPackageJSON() ?? // If the version found is not a valid SemVer, get the Strapi version from the installed package
116
+ this.findLocallyInstalledStrapiVersion();
117
+ }
118
+ findStrapiVersionFromProjectPackageJSON() {
119
+ const projectName = this.packageJSON.name;
120
+ const version = this.packageJSON.dependencies?.[constants.STRAPI_DEPENDENCY_NAME];
121
+ if (version === undefined) {
122
+ throw new Error(`No version of ${constants.STRAPI_DEPENDENCY_NAME} was found in ${projectName}. Are you in a valid Strapi project?`);
123
+ }
124
+ const isValidSemVer = semver.isLiteralSemVer(version) && semver$1.valid(version) === version;
125
+ // We return undefined only if a strapi/strapi version is found, but it's not semver compliant
126
+ return isValidSemVer ? semver.semVerFactory(version) : undefined;
127
+ }
128
+ findLocallyInstalledStrapiVersion() {
129
+ const packageSearchText = `${constants.STRAPI_DEPENDENCY_NAME}/package.json`;
130
+ let strapiPackageJSONPath;
131
+ let strapiPackageJSON;
132
+ try {
133
+ strapiPackageJSONPath = require.resolve(packageSearchText, {
134
+ paths: [
135
+ this.cwd
136
+ ]
137
+ });
138
+ strapiPackageJSON = require(strapiPackageJSONPath);
139
+ assert(typeof strapiPackageJSON === 'object');
140
+ } catch {
141
+ throw new Error(`Cannot resolve module "${constants.STRAPI_DEPENDENCY_NAME}" from paths [${this.cwd}]`);
142
+ }
143
+ const strapiVersion = strapiPackageJSON.version;
144
+ if (!semver.isValidSemVer(strapiVersion)) {
145
+ throw new Error(`Invalid ${constants.STRAPI_DEPENDENCY_NAME} version found in ${strapiPackageJSONPath} (${strapiVersion})`);
146
+ }
147
+ return semver.semVerFactory(strapiVersion);
148
+ }
149
+ constructor(cwd){
150
+ super(cwd, {
151
+ paths: AppProject.paths
152
+ });
153
+ this.type = 'application';
154
+ this.refreshStrapiVersion();
155
+ }
156
+ }
157
+ const formatGlobCollectionPattern = (collection)=>{
158
+ assert(collection.length > 0, 'Invalid pattern provided, the given collection needs at least 1 element');
159
+ return collection.length === 1 ? collection[0] : `{${collection}}`;
160
+ };
161
+ class PluginProject extends Project {
162
+ /**
163
+ * Returns an array of allowed file paths for a Strapi plugin
164
+ *
165
+ * The resulting paths include plugin default files, the root package.json file, and plugin-specific files.
166
+ */ static get paths() {
167
+ const allowedRootPaths = formatGlobCollectionPattern(constants.PROJECT_PLUGIN_ALLOWED_ROOT_PATHS);
168
+ const allowedExtensions = formatGlobCollectionPattern(constants.PROJECT_ALLOWED_EXTENSIONS);
169
+ return [
170
+ // Plugin default files
171
+ `./${allowedRootPaths}/**/*.${allowedExtensions}`,
172
+ `!./**/node_modules/**/*`,
173
+ `!./**/dist/**/*`,
174
+ // Root package.json file
175
+ constants.PROJECT_PACKAGE_JSON,
176
+ // Plugin root files
177
+ ...constants.PROJECT_PLUGIN_ROOT_FILES
178
+ ];
179
+ }
180
+ constructor(cwd){
181
+ super(cwd, {
182
+ paths: PluginProject.paths
183
+ });
184
+ this.type = 'plugin';
185
+ }
186
+ }
187
+ const isPlugin = (cwd)=>{
188
+ const packageJSONPath = path.join(cwd, constants.PROJECT_PACKAGE_JSON);
189
+ try {
190
+ fse.accessSync(packageJSONPath);
191
+ } catch {
192
+ throw new Error(`Could not find a ${constants.PROJECT_PACKAGE_JSON} file in ${cwd}`);
193
+ }
194
+ const packageJSONBuffer = fse.readFileSync(packageJSONPath);
195
+ const packageJSON = JSON.parse(packageJSONBuffer.toString());
196
+ return packageJSON?.strapi?.kind === 'plugin';
197
+ };
198
+ // TODO: make this async so we can use async file methods
199
+ const projectFactory = (cwd)=>{
200
+ fse.accessSync(cwd);
201
+ return isPlugin(cwd) ? new PluginProject(cwd) : new AppProject(cwd);
202
+ };
203
+
204
+ exports.AppProject = AppProject;
205
+ exports.PluginProject = PluginProject;
206
+ exports.Project = Project;
207
+ exports.projectFactory = projectFactory;
208
+ //# sourceMappingURL=project.js.map