@strapi/upgrade 0.0.0-next.fdac61dd05ca665168f51f655f1d165b55ec4231 → 0.0.0-next.ffc36acb308febe288f1a31b62cbbb75b286585c

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 (247) 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/modules/npm/package.d.ts.map +1 -1
  11. package/dist/package.json.js +6 -0
  12. package/dist/package.json.js.map +1 -0
  13. package/dist/package.json.mjs +4 -0
  14. package/dist/package.json.mjs.map +1 -0
  15. package/dist/src/cli/commands/codemods.js +121 -0
  16. package/dist/src/cli/commands/codemods.js.map +1 -0
  17. package/dist/src/cli/commands/codemods.mjs +117 -0
  18. package/dist/src/cli/commands/codemods.mjs.map +1 -0
  19. package/dist/src/cli/commands/upgrade.js +99 -0
  20. package/dist/src/cli/commands/upgrade.js.map +1 -0
  21. package/dist/src/cli/commands/upgrade.mjs +96 -0
  22. package/dist/src/cli/commands/upgrade.mjs.map +1 -0
  23. package/dist/src/cli/errors.js +18 -0
  24. package/dist/src/cli/errors.js.map +1 -0
  25. package/dist/src/cli/errors.mjs +16 -0
  26. package/dist/src/cli/errors.mjs.map +1 -0
  27. package/dist/src/cli/options.js +26 -0
  28. package/dist/src/cli/options.js.map +1 -0
  29. package/dist/src/cli/options.mjs +19 -0
  30. package/dist/src/cli/options.mjs.map +1 -0
  31. package/dist/src/modules/codemod/codemod.js +44 -0
  32. package/dist/src/modules/codemod/codemod.js.map +1 -0
  33. package/dist/src/modules/codemod/codemod.mjs +41 -0
  34. package/dist/src/modules/codemod/codemod.mjs.map +1 -0
  35. package/dist/src/modules/codemod/constants.js +17 -0
  36. package/dist/src/modules/codemod/constants.js.map +1 -0
  37. package/dist/src/modules/codemod/constants.mjs +11 -0
  38. package/dist/src/modules/codemod/constants.mjs.map +1 -0
  39. package/dist/src/modules/codemod/index.js +10 -0
  40. package/dist/src/modules/codemod/index.js.map +1 -0
  41. package/dist/src/modules/codemod/index.mjs +4 -0
  42. package/dist/src/modules/codemod/index.mjs.map +1 -0
  43. package/dist/src/modules/codemod-repository/constants.js +9 -0
  44. package/dist/src/modules/codemod-repository/constants.js.map +1 -0
  45. package/dist/src/modules/codemod-repository/constants.mjs +7 -0
  46. package/dist/src/modules/codemod-repository/constants.mjs.map +1 -0
  47. package/dist/src/modules/codemod-repository/index.js +10 -0
  48. package/dist/src/modules/codemod-repository/index.js.map +1 -0
  49. package/dist/src/modules/codemod-repository/index.mjs +4 -0
  50. package/dist/src/modules/codemod-repository/index.mjs.map +1 -0
  51. package/dist/src/modules/codemod-repository/repository.js +127 -0
  52. package/dist/src/modules/codemod-repository/repository.js.map +1 -0
  53. package/dist/src/modules/codemod-repository/repository.mjs +123 -0
  54. package/dist/src/modules/codemod-repository/repository.mjs.map +1 -0
  55. package/dist/src/modules/codemod-runner/codemod-runner.js +113 -0
  56. package/dist/src/modules/codemod-runner/codemod-runner.js.map +1 -0
  57. package/dist/src/modules/codemod-runner/codemod-runner.mjs +110 -0
  58. package/dist/src/modules/codemod-runner/codemod-runner.mjs.map +1 -0
  59. package/dist/src/modules/error/index.js +11 -0
  60. package/dist/src/modules/error/index.js.map +1 -0
  61. package/dist/src/modules/error/index.mjs +2 -0
  62. package/dist/src/modules/error/index.mjs.map +1 -0
  63. package/dist/src/modules/error/utils.js +33 -0
  64. package/dist/src/modules/error/utils.js.map +1 -0
  65. package/dist/src/modules/error/utils.mjs +28 -0
  66. package/dist/src/modules/error/utils.mjs.map +1 -0
  67. package/dist/src/modules/file-scanner/index.js +8 -0
  68. package/dist/src/modules/file-scanner/index.js.map +1 -0
  69. package/dist/src/modules/file-scanner/index.mjs +2 -0
  70. package/dist/src/modules/file-scanner/index.mjs.map +1 -0
  71. package/dist/src/modules/file-scanner/scanner.js +23 -0
  72. package/dist/src/modules/file-scanner/scanner.js.map +1 -0
  73. package/dist/src/modules/file-scanner/scanner.mjs +20 -0
  74. package/dist/src/modules/file-scanner/scanner.mjs.map +1 -0
  75. package/dist/src/modules/format/formats.js +107 -0
  76. package/dist/src/modules/format/formats.js.map +1 -0
  77. package/dist/src/modules/format/formats.mjs +94 -0
  78. package/dist/src/modules/format/formats.mjs.map +1 -0
  79. package/dist/src/modules/format/index.js +19 -0
  80. package/dist/src/modules/format/index.js.map +1 -0
  81. package/dist/src/modules/format/index.mjs +2 -0
  82. package/dist/src/modules/format/index.mjs.map +1 -0
  83. package/dist/src/modules/index.js +32 -0
  84. package/dist/src/modules/index.js.map +1 -0
  85. package/dist/src/modules/index.mjs +27 -0
  86. package/dist/src/modules/index.mjs.map +1 -0
  87. package/dist/src/modules/json/file.js +16 -0
  88. package/dist/src/modules/json/file.js.map +1 -0
  89. package/dist/src/modules/json/file.mjs +13 -0
  90. package/dist/src/modules/json/file.mjs.map +1 -0
  91. package/dist/src/modules/json/transform-api.js +38 -0
  92. package/dist/src/modules/json/transform-api.js.map +1 -0
  93. package/dist/src/modules/json/transform-api.mjs +35 -0
  94. package/dist/src/modules/json/transform-api.mjs.map +1 -0
  95. package/dist/src/modules/logger/index.js +8 -0
  96. package/dist/src/modules/logger/index.js.map +1 -0
  97. package/dist/src/modules/logger/index.mjs +2 -0
  98. package/dist/src/modules/logger/index.mjs.map +1 -0
  99. package/dist/src/modules/logger/logger.js +76 -0
  100. package/dist/src/modules/logger/logger.js.map +1 -0
  101. package/dist/src/modules/logger/logger.mjs +73 -0
  102. package/dist/src/modules/logger/logger.mjs.map +1 -0
  103. package/dist/src/modules/npm/constants.js +6 -0
  104. package/dist/src/modules/npm/constants.js.map +1 -0
  105. package/dist/src/modules/npm/constants.mjs +4 -0
  106. package/dist/src/modules/npm/constants.mjs.map +1 -0
  107. package/dist/src/modules/npm/package.js +61 -0
  108. package/dist/src/modules/npm/package.js.map +1 -0
  109. package/dist/src/modules/npm/package.mjs +58 -0
  110. package/dist/src/modules/npm/package.mjs.map +1 -0
  111. package/dist/src/modules/project/constants.js +45 -0
  112. package/dist/src/modules/project/constants.js.map +1 -0
  113. package/dist/src/modules/project/constants.mjs +35 -0
  114. package/dist/src/modules/project/constants.mjs.map +1 -0
  115. package/dist/src/modules/project/index.js +15 -0
  116. package/dist/src/modules/project/index.js.map +1 -0
  117. package/dist/src/modules/project/index.mjs +5 -0
  118. package/dist/src/modules/project/index.mjs.map +1 -0
  119. package/dist/src/modules/project/project.js +208 -0
  120. package/dist/src/modules/project/project.js.map +1 -0
  121. package/dist/src/modules/project/project.mjs +203 -0
  122. package/dist/src/modules/project/project.mjs.map +1 -0
  123. package/dist/src/modules/project/utils.js +26 -0
  124. package/dist/src/modules/project/utils.js.map +1 -0
  125. package/dist/src/modules/project/utils.mjs +21 -0
  126. package/dist/src/modules/project/utils.mjs.map +1 -0
  127. package/dist/src/modules/report/index.js +9 -0
  128. package/dist/src/modules/report/index.js.map +1 -0
  129. package/dist/src/modules/report/index.mjs +2 -0
  130. package/dist/src/modules/report/index.mjs.map +1 -0
  131. package/dist/src/modules/report/report.js +13 -0
  132. package/dist/src/modules/report/report.js.map +1 -0
  133. package/dist/src/modules/report/report.mjs +10 -0
  134. package/dist/src/modules/report/report.mjs.map +1 -0
  135. package/dist/src/modules/requirement/index.js +8 -0
  136. package/dist/src/modules/requirement/index.js.map +1 -0
  137. package/dist/src/modules/requirement/index.mjs +2 -0
  138. package/dist/src/modules/requirement/index.mjs.map +1 -0
  139. package/dist/src/modules/requirement/requirement.js +55 -0
  140. package/dist/src/modules/requirement/requirement.js.map +1 -0
  141. package/dist/src/modules/requirement/requirement.mjs +52 -0
  142. package/dist/src/modules/requirement/requirement.mjs.map +1 -0
  143. package/dist/src/modules/runner/code/code.js +21 -0
  144. package/dist/src/modules/runner/code/code.js.map +1 -0
  145. package/dist/src/modules/runner/code/code.mjs +18 -0
  146. package/dist/src/modules/runner/code/code.mjs.map +1 -0
  147. package/dist/src/modules/runner/code/index.js +8 -0
  148. package/dist/src/modules/runner/code/index.js.map +1 -0
  149. package/dist/src/modules/runner/code/index.mjs +2 -0
  150. package/dist/src/modules/runner/code/index.mjs.map +1 -0
  151. package/dist/src/modules/runner/index.js +10 -0
  152. package/dist/src/modules/runner/index.js.map +1 -0
  153. package/dist/src/modules/runner/index.mjs +5 -0
  154. package/dist/src/modules/runner/index.mjs.map +1 -0
  155. package/dist/src/modules/runner/json/index.js +8 -0
  156. package/dist/src/modules/runner/json/index.js.map +1 -0
  157. package/dist/src/modules/runner/json/index.mjs +2 -0
  158. package/dist/src/modules/runner/json/index.mjs.map +1 -0
  159. package/dist/src/modules/runner/json/json.js +21 -0
  160. package/dist/src/modules/runner/json/json.js.map +1 -0
  161. package/dist/src/modules/runner/json/json.mjs +18 -0
  162. package/dist/src/modules/runner/json/json.mjs.map +1 -0
  163. package/dist/src/modules/runner/json/transform.js +85 -0
  164. package/dist/src/modules/runner/json/transform.js.map +1 -0
  165. package/dist/src/modules/runner/json/transform.mjs +83 -0
  166. package/dist/src/modules/runner/json/transform.mjs.map +1 -0
  167. package/dist/src/modules/runner/runner.js +22 -0
  168. package/dist/src/modules/runner/runner.js.map +1 -0
  169. package/dist/src/modules/runner/runner.mjs +20 -0
  170. package/dist/src/modules/runner/runner.mjs.map +1 -0
  171. package/dist/src/modules/timer/constants.js +6 -0
  172. package/dist/src/modules/timer/constants.js.map +1 -0
  173. package/dist/src/modules/timer/constants.mjs +4 -0
  174. package/dist/src/modules/timer/constants.mjs.map +1 -0
  175. package/dist/src/modules/timer/index.js +10 -0
  176. package/dist/src/modules/timer/index.js.map +1 -0
  177. package/dist/src/modules/timer/index.mjs +4 -0
  178. package/dist/src/modules/timer/index.mjs.map +1 -0
  179. package/dist/src/modules/timer/timer.js +33 -0
  180. package/dist/src/modules/timer/timer.js.map +1 -0
  181. package/dist/src/modules/timer/timer.mjs +30 -0
  182. package/dist/src/modules/timer/timer.mjs.map +1 -0
  183. package/dist/src/modules/upgrader/constants.js +6 -0
  184. package/dist/src/modules/upgrader/constants.js.map +1 -0
  185. package/dist/src/modules/upgrader/constants.mjs +4 -0
  186. package/dist/src/modules/upgrader/constants.mjs.map +1 -0
  187. package/dist/src/modules/upgrader/index.js +10 -0
  188. package/dist/src/modules/upgrader/index.js.map +1 -0
  189. package/dist/src/modules/upgrader/index.mjs +4 -0
  190. package/dist/src/modules/upgrader/index.mjs.map +1 -0
  191. package/dist/src/modules/upgrader/upgrader.js +266 -0
  192. package/dist/src/modules/upgrader/upgrader.js.map +1 -0
  193. package/dist/src/modules/upgrader/upgrader.mjs +263 -0
  194. package/dist/src/modules/upgrader/upgrader.mjs.map +1 -0
  195. package/dist/src/modules/version/index.js +20 -0
  196. package/dist/src/modules/version/index.js.map +1 -0
  197. package/dist/src/modules/version/index.mjs +5 -0
  198. package/dist/src/modules/version/index.mjs.map +1 -0
  199. package/dist/src/modules/version/range.js +81 -0
  200. package/dist/src/modules/version/range.js.map +1 -0
  201. package/dist/src/modules/version/range.mjs +75 -0
  202. package/dist/src/modules/version/range.mjs.map +1 -0
  203. package/dist/src/modules/version/semver.js +26 -0
  204. package/dist/src/modules/version/semver.js.map +1 -0
  205. package/dist/src/modules/version/semver.mjs +20 -0
  206. package/dist/src/modules/version/semver.mjs.map +1 -0
  207. package/dist/src/modules/version/types.js +12 -0
  208. package/dist/src/modules/version/types.js.map +1 -0
  209. package/dist/src/modules/version/types.mjs +12 -0
  210. package/dist/src/modules/version/types.mjs.map +1 -0
  211. package/dist/src/tasks/codemods/list-codemods.js +40 -0
  212. package/dist/src/tasks/codemods/list-codemods.js.map +1 -0
  213. package/dist/src/tasks/codemods/list-codemods.mjs +38 -0
  214. package/dist/src/tasks/codemods/list-codemods.mjs.map +1 -0
  215. package/dist/src/tasks/codemods/run-codemods.js +36 -0
  216. package/dist/src/tasks/codemods/run-codemods.js.map +1 -0
  217. package/dist/src/tasks/codemods/run-codemods.mjs +34 -0
  218. package/dist/src/tasks/codemods/run-codemods.mjs.map +1 -0
  219. package/dist/src/tasks/codemods/utils.js +54 -0
  220. package/dist/src/tasks/codemods/utils.js.map +1 -0
  221. package/dist/src/tasks/codemods/utils.mjs +50 -0
  222. package/dist/src/tasks/codemods/utils.mjs.map +1 -0
  223. package/dist/src/tasks/index.js +15 -0
  224. package/dist/src/tasks/index.js.map +1 -0
  225. package/dist/src/tasks/index.mjs +7 -0
  226. package/dist/src/tasks/index.mjs.map +1 -0
  227. package/dist/src/tasks/upgrade/prompts/latest.js +48 -0
  228. package/dist/src/tasks/upgrade/prompts/latest.js.map +1 -0
  229. package/dist/src/tasks/upgrade/prompts/latest.mjs +46 -0
  230. package/dist/src/tasks/upgrade/prompts/latest.mjs.map +1 -0
  231. package/dist/src/tasks/upgrade/requirements/common.js +40 -0
  232. package/dist/src/tasks/upgrade/requirements/common.js.map +1 -0
  233. package/dist/src/tasks/upgrade/requirements/common.mjs +35 -0
  234. package/dist/src/tasks/upgrade/requirements/common.mjs.map +1 -0
  235. package/dist/src/tasks/upgrade/requirements/major.js +29 -0
  236. package/dist/src/tasks/upgrade/requirements/major.js.map +1 -0
  237. package/dist/src/tasks/upgrade/requirements/major.mjs +26 -0
  238. package/dist/src/tasks/upgrade/requirements/major.mjs.map +1 -0
  239. package/dist/src/tasks/upgrade/upgrade.js +69 -0
  240. package/dist/src/tasks/upgrade/upgrade.js.map +1 -0
  241. package/dist/src/tasks/upgrade/upgrade.mjs +67 -0
  242. package/dist/src/tasks/upgrade/upgrade.mjs.map +1 -0
  243. package/package.json +6 -5
  244. package/dist/chunks/logger-DGi224NW.js +0 -1649
  245. package/dist/chunks/logger-DGi224NW.js.map +0 -1
  246. package/dist/chunks/logger-np_r7rTc.mjs +0 -1599
  247. package/dist/chunks/logger-np_r7rTc.mjs.map +0 -1
@@ -0,0 +1,263 @@
1
+ import chalk from 'chalk';
2
+ import semver from 'semver';
3
+ import { packageManager } from '@strapi/utils';
4
+ import { createJSONTransformAPI } from '../json/transform-api.mjs';
5
+ import { saveJSON } from '../json/file.mjs';
6
+ import 'node:path';
7
+ import 'node:assert';
8
+ import 'fs-extra';
9
+ import { semVerFactory, isValidSemVer, isSemverInstance, isSemVerReleaseType } from '../version/semver.mjs';
10
+ import { rangeFromVersions } from '../version/range.mjs';
11
+ import '../version/types.mjs';
12
+ import 'fast-glob';
13
+ import 'jscodeshift/src/Runner';
14
+ import 'lodash/fp';
15
+ import 'esbuild-register/dist/node';
16
+ import { SCOPED_STRAPI_PACKAGE_PREFIX } from '../project/constants.mjs';
17
+ import { unknownToError, NPMCandidateNotFoundError } from '../error/utils.mjs';
18
+ import { version, highlight, versionRange, upgradeStep } from '../format/formats.mjs';
19
+ import { codemodRunnerFactory } from '../codemod-runner/codemod-runner.mjs';
20
+
21
+ class Upgrader {
22
+ getNPMPackage() {
23
+ return this.npmPackage;
24
+ }
25
+ getProject() {
26
+ return this.project;
27
+ }
28
+ getTarget() {
29
+ return semVerFactory(this.target.raw);
30
+ }
31
+ setRequirements(requirements) {
32
+ this.requirements = requirements;
33
+ return this;
34
+ }
35
+ setTarget(target) {
36
+ this.target = target;
37
+ return this;
38
+ }
39
+ syncCodemodsTarget() {
40
+ // Extract the <major>.<minor>.<patch> version from the target and assign it to the codemods target
41
+ //
42
+ // This is useful when dealing with alphas, betas or release candidates:
43
+ // e.g. "5.0.0-beta.951" becomes "5.0.0"
44
+ //
45
+ // For experimental versions (e.g. "0.0.0-experimental.hex"), it is necessary to
46
+ // override the codemods target manually in order to run the appropriate ones.
47
+ this.codemodsTarget = semVerFactory(`${this.target.major}.${this.target.minor}.${this.target.patch}`);
48
+ this.logger?.debug?.(`The codemods target has been synced with the upgrade target. The codemod runner will now look for ${version(this.codemodsTarget)}`);
49
+ return this;
50
+ }
51
+ overrideCodemodsTarget(target) {
52
+ this.codemodsTarget = target;
53
+ this.logger?.debug?.(`Overriding the codemods target. The codemod runner will now look for ${version(target)}`);
54
+ return this;
55
+ }
56
+ setLogger(logger) {
57
+ this.logger = logger;
58
+ return this;
59
+ }
60
+ onConfirm(callback) {
61
+ this.confirmationCallback = callback;
62
+ return this;
63
+ }
64
+ dry(enabled = true) {
65
+ this.isDry = enabled;
66
+ return this;
67
+ }
68
+ addRequirement(requirement) {
69
+ this.requirements.push(requirement);
70
+ const fRequired = requirement.isRequired ? '(required)' : '(optional)';
71
+ this.logger?.debug?.(`Added a new requirement to the upgrade: ${highlight(requirement.name)} ${fRequired}`);
72
+ return this;
73
+ }
74
+ async upgrade() {
75
+ this.logger?.info?.(`Upgrading from ${version(this.project.strapiVersion)} to ${version(this.target)}`);
76
+ if (this.isDry) {
77
+ this.logger?.warn?.('Running the upgrade in dry mode. No files will be modified during the process.');
78
+ }
79
+ const range = rangeFromVersions(this.project.strapiVersion, this.target);
80
+ const codemodsRange = rangeFromVersions(this.project.strapiVersion, this.codemodsTarget);
81
+ const npmVersionsMatches = this.npmPackage?.findVersionsInRange(range) ?? [];
82
+ this.logger?.debug?.(`Found ${highlight(npmVersionsMatches.length)} versions satisfying ${versionRange(range)}`);
83
+ try {
84
+ this.logger?.info?.(upgradeStep('Checking requirement', [
85
+ 1,
86
+ 4
87
+ ]));
88
+ await this.checkRequirements(this.requirements, {
89
+ npmVersionsMatches,
90
+ project: this.project,
91
+ target: this.target
92
+ });
93
+ this.logger?.info?.(upgradeStep('Applying the latest code modifications', [
94
+ 2,
95
+ 4
96
+ ]));
97
+ await this.runCodemods(codemodsRange);
98
+ // We need to refresh the project files to make sure we have
99
+ // the latest version of each file (including package.json) for the next steps
100
+ this.logger?.debug?.('Refreshing project information...');
101
+ this.project.refresh();
102
+ this.logger?.info?.(upgradeStep('Upgrading Strapi dependencies', [
103
+ 3,
104
+ 4
105
+ ]));
106
+ await this.updateDependencies();
107
+ this.logger?.info?.(upgradeStep('Installing dependencies', [
108
+ 4,
109
+ 4
110
+ ]));
111
+ await this.installDependencies();
112
+ } catch (e) {
113
+ return erroredReport(unknownToError(e));
114
+ }
115
+ return successReport();
116
+ }
117
+ async confirm(message) {
118
+ if (typeof this.confirmationCallback !== 'function') {
119
+ return true;
120
+ }
121
+ return this.confirmationCallback(message);
122
+ }
123
+ async checkRequirements(requirements, context) {
124
+ for (const requirement of requirements){
125
+ const { pass, error } = await requirement.test(context);
126
+ if (pass) {
127
+ await this.onSuccessfulRequirement(requirement, context);
128
+ } else {
129
+ await this.onFailedRequirement(requirement, error);
130
+ }
131
+ }
132
+ }
133
+ async onSuccessfulRequirement(requirement, context) {
134
+ const hasChildren = requirement.children.length > 0;
135
+ if (hasChildren) {
136
+ await this.checkRequirements(requirement.children, context);
137
+ }
138
+ }
139
+ async onFailedRequirement(requirement, originalError) {
140
+ const errorMessage = `Requirement failed: ${originalError.message} (${highlight(requirement.name)})`;
141
+ const warningMessage = originalError.message;
142
+ const confirmationMessage = `Ignore optional requirement "${highlight(requirement.name)}" ?`;
143
+ const error = new Error(errorMessage);
144
+ if (requirement.isRequired) {
145
+ throw error;
146
+ }
147
+ this.logger?.warn?.(warningMessage);
148
+ const response = await this.confirmationCallback?.(confirmationMessage);
149
+ if (!response) {
150
+ throw error;
151
+ }
152
+ }
153
+ async updateDependencies() {
154
+ const { packageJSON, packageJSONPath } = this.project;
155
+ const json = createJSONTransformAPI(packageJSON);
156
+ const dependencies = json.get('dependencies', {});
157
+ const strapiDependencies = this.getScopedStrapiDependencies(dependencies);
158
+ this.logger?.debug?.(`Found ${highlight(strapiDependencies.length)} dependency(ies) to update`);
159
+ strapiDependencies.forEach((dependency)=>this.logger?.debug?.(`- ${dependency[0]} (${dependency[1]} -> ${this.target})`));
160
+ if (strapiDependencies.length === 0) {
161
+ return;
162
+ }
163
+ strapiDependencies.forEach(([name])=>json.set(`dependencies.${name}`, this.target.raw));
164
+ const updatedPackageJSON = json.root();
165
+ if (this.isDry) {
166
+ this.logger?.debug?.(`Skipping dependencies update (${chalk.italic('dry mode')})`);
167
+ return;
168
+ }
169
+ await saveJSON(packageJSONPath, updatedPackageJSON);
170
+ }
171
+ getScopedStrapiDependencies(dependencies) {
172
+ const { strapiVersion } = this.project;
173
+ const strapiDependencies = [];
174
+ // Find all @strapi/* packages matching the current Strapi version
175
+ for (const [name, version] of Object.entries(dependencies)){
176
+ const isScopedStrapiPackage = name.startsWith(SCOPED_STRAPI_PACKAGE_PREFIX);
177
+ const isOnCurrentStrapiVersion = isValidSemVer(version) && version === strapiVersion.raw;
178
+ if (isScopedStrapiPackage && isOnCurrentStrapiVersion) {
179
+ strapiDependencies.push([
180
+ name,
181
+ semVerFactory(version)
182
+ ]);
183
+ }
184
+ }
185
+ return strapiDependencies;
186
+ }
187
+ async installDependencies() {
188
+ const projectPath = this.project.cwd;
189
+ const packageManagerName = await packageManager.getPreferred(projectPath);
190
+ this.logger?.debug?.(`Using ${highlight(packageManagerName)} as package manager`);
191
+ if (this.isDry) {
192
+ this.logger?.debug?.(`Skipping dependencies installation (${chalk.italic('dry mode')})`);
193
+ return;
194
+ }
195
+ await packageManager.installDependencies(projectPath, packageManagerName, {
196
+ stdout: this.logger?.stdout,
197
+ stderr: this.logger?.stderr
198
+ });
199
+ }
200
+ async runCodemods(range) {
201
+ const codemodRunner = codemodRunnerFactory(this.project, range);
202
+ codemodRunner.dry(this.isDry);
203
+ if (this.logger) {
204
+ codemodRunner.setLogger(this.logger);
205
+ }
206
+ await codemodRunner.run();
207
+ }
208
+ constructor(project, target, npmPackage){
209
+ this.project = project;
210
+ this.npmPackage = npmPackage;
211
+ this.target = target;
212
+ this.syncCodemodsTarget();
213
+ this.isDry = false;
214
+ this.requirements = [];
215
+ this.logger = null;
216
+ this.confirmationCallback = null;
217
+ }
218
+ }
219
+ /**
220
+ * Resolves the NPM target version based on the given project, target, and NPM package.
221
+ * If target is a SemVer, it directly finds it. If it's a release type (major, minor, patch),
222
+ * it calculates the range of versions for this release type and returns the latest version within this range.
223
+ */ const resolveNPMTarget = (project, target, npmPackage)=>{
224
+ // Semver
225
+ if (isSemverInstance(target)) {
226
+ const version = npmPackage.findVersion(target);
227
+ if (!version) {
228
+ throw new NPMCandidateNotFoundError(target);
229
+ }
230
+ return version;
231
+ }
232
+ // Release Types
233
+ if (isSemVerReleaseType(target)) {
234
+ const range = rangeFromVersions(project.strapiVersion, target);
235
+ const npmVersionsMatches = npmPackage.findVersionsInRange(range);
236
+ // The targeted version is the latest one that matches the given range
237
+ const version = npmVersionsMatches.at(-1);
238
+ if (!version) {
239
+ throw new NPMCandidateNotFoundError(range, `The project is already up-to-date (${target})`);
240
+ }
241
+ return version;
242
+ }
243
+ throw new NPMCandidateNotFoundError(target);
244
+ };
245
+ const upgraderFactory = (project, target, npmPackage)=>{
246
+ const npmTarget = resolveNPMTarget(project, target, npmPackage);
247
+ const semverTarget = semVerFactory(npmTarget.version);
248
+ if (semver.eq(semverTarget, project.strapiVersion)) {
249
+ throw new Error(`The project is already using v${semverTarget}`);
250
+ }
251
+ return new Upgrader(project, semverTarget, npmPackage);
252
+ };
253
+ const successReport = ()=>({
254
+ success: true,
255
+ error: null
256
+ });
257
+ const erroredReport = (error)=>({
258
+ success: false,
259
+ error
260
+ });
261
+
262
+ export { Upgrader, upgraderFactory };
263
+ //# sourceMappingURL=upgrader.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgrader.mjs","sources":["../../../../src/modules/upgrader/upgrader.ts"],"sourcesContent":["import chalk from 'chalk';\nimport semver from 'semver';\nimport { packageManager } from '@strapi/utils';\n\nimport { createJSONTransformAPI, saveJSON } from '../json';\nimport { constants as projectConstants } from '../project';\nimport {\n isSemverInstance,\n isSemVerReleaseType,\n isValidSemVer,\n rangeFromVersions,\n semVerFactory,\n} from '../version';\nimport { NPMCandidateNotFoundError, unknownToError } from '../error';\nimport * as f from '../format';\nimport { codemodRunnerFactory } from '../codemod-runner';\n\nimport type { Upgrader as UpgraderInterface, UpgradeReport } from './types';\nimport type { Version } from '../version';\nimport type { Logger } from '../logger';\nimport type { Requirement } from '../requirement';\nimport type { NPM } from '../npm';\nimport type { AppProject } from '../project';\nimport type { ConfirmationCallback } from '../common/types';\n\ntype DependenciesEntries = Array<[name: string, version: Version.SemVer]>;\n\nexport class Upgrader implements UpgraderInterface {\n private readonly project: AppProject;\n\n private readonly npmPackage: NPM.Package;\n\n private target: Version.SemVer;\n\n private codemodsTarget!: Version.SemVer;\n\n private isDry: boolean;\n\n private logger: Logger | null;\n\n private requirements: Requirement.Requirement[];\n\n private confirmationCallback: ConfirmationCallback | null;\n\n constructor(project: AppProject, target: Version.SemVer, npmPackage: NPM.Package) {\n this.project = project;\n this.npmPackage = npmPackage;\n\n this.target = target;\n this.syncCodemodsTarget();\n\n this.isDry = false;\n\n this.requirements = [];\n\n this.logger = null;\n this.confirmationCallback = null;\n }\n\n getNPMPackage(): NPM.Package {\n return this.npmPackage;\n }\n\n getProject(): AppProject {\n return this.project;\n }\n\n getTarget(): Version.SemVer {\n return semVerFactory(this.target.raw);\n }\n\n setRequirements(requirements: Requirement.Requirement[]) {\n this.requirements = requirements;\n return this;\n }\n\n setTarget(target: Version.SemVer) {\n this.target = target;\n return this;\n }\n\n syncCodemodsTarget() {\n // Extract the <major>.<minor>.<patch> version from the target and assign it to the codemods target\n //\n // This is useful when dealing with alphas, betas or release candidates:\n // e.g. \"5.0.0-beta.951\" becomes \"5.0.0\"\n //\n // For experimental versions (e.g. \"0.0.0-experimental.hex\"), it is necessary to\n // override the codemods target manually in order to run the appropriate ones.\n this.codemodsTarget = semVerFactory(\n `${this.target.major}.${this.target.minor}.${this.target.patch}`\n );\n\n this.logger?.debug?.(\n `The codemods target has been synced with the upgrade target. The codemod runner will now look for ${f.version(\n this.codemodsTarget\n )}`\n );\n\n return this;\n }\n\n overrideCodemodsTarget(target: Version.SemVer) {\n this.codemodsTarget = target;\n\n this.logger?.debug?.(\n `Overriding the codemods target. The codemod runner will now look for ${f.version(target)}`\n );\n\n return this;\n }\n\n setLogger(logger: Logger) {\n this.logger = logger;\n return this;\n }\n\n onConfirm(callback: ConfirmationCallback | null) {\n this.confirmationCallback = callback;\n return this;\n }\n\n dry(enabled: boolean = true) {\n this.isDry = enabled;\n return this;\n }\n\n addRequirement(requirement: Requirement.Requirement) {\n this.requirements.push(requirement);\n\n const fRequired = requirement.isRequired ? '(required)' : '(optional)';\n this.logger?.debug?.(\n `Added a new requirement to the upgrade: ${f.highlight(requirement.name)} ${fRequired}`\n );\n\n return this;\n }\n\n async upgrade(): Promise<UpgradeReport> {\n this.logger?.info?.(\n `Upgrading from ${f.version(this.project.strapiVersion)} to ${f.version(this.target)}`\n );\n\n if (this.isDry) {\n this.logger?.warn?.(\n 'Running the upgrade in dry mode. No files will be modified during the process.'\n );\n }\n\n const range = rangeFromVersions(this.project.strapiVersion, this.target);\n const codemodsRange = rangeFromVersions(this.project.strapiVersion, this.codemodsTarget);\n\n const npmVersionsMatches = this.npmPackage?.findVersionsInRange(range) ?? [];\n\n this.logger?.debug?.(\n `Found ${f.highlight(npmVersionsMatches.length)} versions satisfying ${f.versionRange(range)}`\n );\n\n try {\n this.logger?.info?.(f.upgradeStep('Checking requirement', [1, 4]));\n await this.checkRequirements(this.requirements, {\n npmVersionsMatches,\n project: this.project,\n target: this.target,\n });\n\n this.logger?.info?.(f.upgradeStep('Applying the latest code modifications', [2, 4]));\n await this.runCodemods(codemodsRange);\n\n // We need to refresh the project files to make sure we have\n // the latest version of each file (including package.json) for the next steps\n this.logger?.debug?.('Refreshing project information...');\n this.project.refresh();\n\n this.logger?.info?.(f.upgradeStep('Upgrading Strapi dependencies', [3, 4]));\n await this.updateDependencies();\n\n this.logger?.info?.(f.upgradeStep('Installing dependencies', [4, 4]));\n await this.installDependencies();\n } catch (e) {\n return erroredReport(unknownToError(e));\n }\n\n return successReport();\n }\n\n async confirm(message: string): Promise<boolean> {\n if (typeof this.confirmationCallback !== 'function') {\n return true;\n }\n\n return this.confirmationCallback(message);\n }\n\n private async checkRequirements(\n requirements: Requirement.Requirement[],\n context: Requirement.TestContext\n ) {\n for (const requirement of requirements) {\n const { pass, error } = await requirement.test(context);\n\n if (pass) {\n await this.onSuccessfulRequirement(requirement, context);\n } else {\n await this.onFailedRequirement(requirement, error);\n }\n }\n }\n\n private async onSuccessfulRequirement(\n requirement: Requirement.Requirement,\n context: Requirement.TestContext\n ): Promise<void> {\n const hasChildren = requirement.children.length > 0;\n\n if (hasChildren) {\n await this.checkRequirements(requirement.children, context);\n }\n }\n\n private async onFailedRequirement(\n requirement: Requirement.Requirement,\n originalError: Error\n ): Promise<void> {\n const errorMessage = `Requirement failed: ${originalError.message} (${f.highlight(\n requirement.name\n )})`;\n const warningMessage = originalError.message;\n const confirmationMessage = `Ignore optional requirement \"${f.highlight(requirement.name)}\" ?`;\n\n const error = new Error(errorMessage);\n\n if (requirement.isRequired) {\n throw error;\n }\n\n this.logger?.warn?.(warningMessage);\n\n const response = await this.confirmationCallback?.(confirmationMessage);\n\n if (!response) {\n throw error;\n }\n }\n\n private async updateDependencies(): Promise<void> {\n const { packageJSON, packageJSONPath } = this.project;\n\n const json = createJSONTransformAPI(packageJSON);\n\n const dependencies = json.get<Record<string, string>>('dependencies', {});\n const strapiDependencies = this.getScopedStrapiDependencies(dependencies);\n\n this.logger?.debug?.(\n `Found ${f.highlight(strapiDependencies.length)} dependency(ies) to update`\n );\n strapiDependencies.forEach((dependency) =>\n this.logger?.debug?.(`- ${dependency[0]} (${dependency[1]} -> ${this.target})`)\n );\n\n if (strapiDependencies.length === 0) {\n return;\n }\n\n strapiDependencies.forEach(([name]) => json.set(`dependencies.${name}`, this.target.raw));\n\n const updatedPackageJSON = json.root();\n\n if (this.isDry) {\n this.logger?.debug?.(`Skipping dependencies update (${chalk.italic('dry mode')})`);\n return;\n }\n\n await saveJSON(packageJSONPath, updatedPackageJSON);\n }\n\n private getScopedStrapiDependencies(dependencies: Record<string, string>): DependenciesEntries {\n const { strapiVersion } = this.project;\n\n const strapiDependencies: DependenciesEntries = [];\n\n // Find all @strapi/* packages matching the current Strapi version\n for (const [name, version] of Object.entries(dependencies)) {\n const isScopedStrapiPackage = name.startsWith(projectConstants.SCOPED_STRAPI_PACKAGE_PREFIX);\n const isOnCurrentStrapiVersion = isValidSemVer(version) && version === strapiVersion.raw;\n\n if (isScopedStrapiPackage && isOnCurrentStrapiVersion) {\n strapiDependencies.push([name, semVerFactory(version)]);\n }\n }\n\n return strapiDependencies;\n }\n\n private async installDependencies(): Promise<void> {\n const projectPath = this.project.cwd;\n\n const packageManagerName = await packageManager.getPreferred(projectPath);\n\n this.logger?.debug?.(`Using ${f.highlight(packageManagerName)} as package manager`);\n\n if (this.isDry) {\n this.logger?.debug?.(`Skipping dependencies installation (${chalk.italic('dry mode')})`);\n return;\n }\n\n await packageManager.installDependencies(projectPath, packageManagerName, {\n stdout: this.logger?.stdout,\n stderr: this.logger?.stderr,\n });\n }\n\n private async runCodemods(range: Version.Range): Promise<void> {\n const codemodRunner = codemodRunnerFactory(this.project, range);\n\n codemodRunner.dry(this.isDry);\n\n if (this.logger) {\n codemodRunner.setLogger(this.logger);\n }\n\n await codemodRunner.run();\n }\n}\n\n/**\n * Resolves the NPM target version based on the given project, target, and NPM package.\n * If target is a SemVer, it directly finds it. If it's a release type (major, minor, patch),\n * it calculates the range of versions for this release type and returns the latest version within this range.\n */\nconst resolveNPMTarget = (\n project: AppProject,\n target: Version.ReleaseType | Version.SemVer,\n npmPackage: NPM.Package\n): NPM.NPMPackageVersion => {\n // Semver\n if (isSemverInstance(target)) {\n const version = npmPackage.findVersion(target);\n\n if (!version) {\n throw new NPMCandidateNotFoundError(target);\n }\n\n return version;\n }\n\n // Release Types\n if (isSemVerReleaseType(target)) {\n const range = rangeFromVersions(project.strapiVersion, target);\n const npmVersionsMatches = npmPackage.findVersionsInRange(range);\n\n // The targeted version is the latest one that matches the given range\n const version = npmVersionsMatches.at(-1);\n\n if (!version) {\n throw new NPMCandidateNotFoundError(range, `The project is already up-to-date (${target})`);\n }\n\n return version;\n }\n\n throw new NPMCandidateNotFoundError(target);\n};\n\nexport const upgraderFactory = (\n project: AppProject,\n target: Version.ReleaseType | Version.SemVer,\n npmPackage: NPM.Package\n) => {\n const npmTarget = resolveNPMTarget(project, target, npmPackage);\n const semverTarget = semVerFactory(npmTarget.version);\n\n if (semver.eq(semverTarget, project.strapiVersion)) {\n throw new Error(`The project is already using v${semverTarget}`);\n }\n\n return new Upgrader(project, semverTarget, npmPackage);\n};\n\nconst successReport = (): UpgradeReport => ({ success: true, error: null });\nconst erroredReport = (error: Error): UpgradeReport => ({ success: false, error });\n"],"names":["Upgrader","getNPMPackage","npmPackage","getProject","project","getTarget","semVerFactory","target","raw","setRequirements","requirements","setTarget","syncCodemodsTarget","codemodsTarget","major","minor","patch","logger","debug","f","overrideCodemodsTarget","setLogger","onConfirm","callback","confirmationCallback","dry","enabled","isDry","addRequirement","requirement","push","fRequired","isRequired","name","upgrade","info","strapiVersion","warn","range","rangeFromVersions","codemodsRange","npmVersionsMatches","findVersionsInRange","length","checkRequirements","runCodemods","refresh","updateDependencies","installDependencies","e","erroredReport","unknownToError","successReport","confirm","message","context","pass","error","test","onSuccessfulRequirement","onFailedRequirement","hasChildren","children","originalError","errorMessage","warningMessage","confirmationMessage","Error","response","packageJSON","packageJSONPath","json","createJSONTransformAPI","dependencies","get","strapiDependencies","getScopedStrapiDependencies","forEach","dependency","set","updatedPackageJSON","root","chalk","italic","saveJSON","version","Object","entries","isScopedStrapiPackage","startsWith","projectConstants","isOnCurrentStrapiVersion","isValidSemVer","projectPath","cwd","packageManagerName","packageManager","getPreferred","stdout","stderr","codemodRunner","codemodRunnerFactory","run","constructor","resolveNPMTarget","isSemverInstance","findVersion","NPMCandidateNotFoundError","isSemVerReleaseType","at","upgraderFactory","npmTarget","semverTarget","semver","eq","success"],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ 'use strict';
2
+
3
+ var semver = require('./semver.js');
4
+ var range = require('./range.js');
5
+ var types = require('./types.js');
6
+
7
+
8
+
9
+ exports.isLiteralSemVer = semver.isLiteralSemVer;
10
+ exports.isSemVerReleaseType = semver.isSemVerReleaseType;
11
+ exports.isSemverInstance = semver.isSemverInstance;
12
+ exports.isValidSemVer = semver.isValidSemVer;
13
+ exports.semVerFactory = semver.semVerFactory;
14
+ exports.isRangeInstance = range.isRangeInstance;
15
+ exports.isValidStringifiedRange = range.isValidStringifiedRange;
16
+ exports.rangeFactory = range.rangeFactory;
17
+ exports.rangeFromReleaseType = range.rangeFromReleaseType;
18
+ exports.rangeFromVersions = range.rangeFromVersions;
19
+ exports.Version = types;
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,5 @@
1
+ export { isLiteralSemVer, isSemVerReleaseType, isSemverInstance, isValidSemVer, semVerFactory } from './semver.mjs';
2
+ export { isRangeInstance, isValidStringifiedRange, rangeFactory, rangeFromReleaseType, rangeFromVersions } from './range.mjs';
3
+ import * as types from './types.mjs';
4
+ export { types as Version };
5
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
@@ -0,0 +1,81 @@
1
+ 'use strict';
2
+
3
+ var semver = require('semver');
4
+ var types = require('./types.js');
5
+ var semver$1 = require('./semver.js');
6
+
7
+ const rangeFactory = (range)=>{
8
+ return new semver.Range(range);
9
+ };
10
+ const rangeFromReleaseType = (current, identifier)=>{
11
+ switch(identifier){
12
+ case types.ReleaseType.Latest:
13
+ {
14
+ // Match anything greater than the current version
15
+ return rangeFactory(`>${current.raw}`);
16
+ }
17
+ case types.ReleaseType.Major:
18
+ {
19
+ // For example, 4.15.4 returns 5.0.0
20
+ const nextMajor = semver$1.semVerFactory(current.raw).inc('major');
21
+ // Using only the major version as the upper limit allows any minor,
22
+ // patch, or build version to be taken in the range.
23
+ //
24
+ // For example, if the current version is "4.15.4", incrementing the
25
+ // major version would result in "5.0.0".
26
+ // The generated rule is ">4.15.4 <=5", allowing any version
27
+ // greater than "4.15.4" but less than "6.0.0-0".
28
+ return rangeFactory(`>${current.raw} <=${nextMajor.major}`);
29
+ }
30
+ case types.ReleaseType.Minor:
31
+ {
32
+ // For example, 4.15.4 returns 5.0.0
33
+ const nextMajor = semver$1.semVerFactory(current.raw).inc('major');
34
+ // Using the <major>.<minor>.<patch> version as the upper limit allows any minor,
35
+ // patch, or build versions to be taken in the range.
36
+ //
37
+ // For example, if the current version is "4.15.4", incrementing the
38
+ // major version would result in "5.0.0".
39
+ // The generated rule is ">4.15.4 <5.0.0", allowing any version
40
+ // greater than "4.15.4" but less than "5.0.0".
41
+ return rangeFactory(`>${current.raw} <${nextMajor.raw}`);
42
+ }
43
+ case types.ReleaseType.Patch:
44
+ {
45
+ // For example, 4.15.4 returns 4.16.0
46
+ const nextMinor = semver$1.semVerFactory(current.raw).inc('minor');
47
+ // Using only the minor version as the upper limit allows any patch
48
+ // or build versions to be taken in the range.
49
+ //
50
+ // For example, if the current version is "4.15.4", incrementing the
51
+ // minor version would result in "4.16.0".
52
+ // The generated rule is ">4.15.4 <4.16.0", allowing any version
53
+ // greater than "4.15.4" but less than "4.16.0".
54
+ return rangeFactory(`>${current.raw} <${nextMinor.raw}`);
55
+ }
56
+ default:
57
+ {
58
+ throw new Error('Not implemented');
59
+ }
60
+ }
61
+ };
62
+ const rangeFromVersions = (currentVersion, target)=>{
63
+ if (semver$1.isSemverInstance(target)) {
64
+ return rangeFactory(`>${currentVersion.raw} <=${target.raw}`);
65
+ }
66
+ if (semver$1.isSemVerReleaseType(target)) {
67
+ return rangeFromReleaseType(currentVersion, target);
68
+ }
69
+ throw new Error(`Invalid target set: ${target}`); // TODO: better errors
70
+ };
71
+ const isValidStringifiedRange = (str)=>semver.validRange(str) !== null;
72
+ const isRangeInstance = (range)=>{
73
+ return range instanceof semver.Range;
74
+ };
75
+
76
+ exports.isRangeInstance = isRangeInstance;
77
+ exports.isValidStringifiedRange = isValidStringifiedRange;
78
+ exports.rangeFactory = rangeFactory;
79
+ exports.rangeFromReleaseType = rangeFromReleaseType;
80
+ exports.rangeFromVersions = rangeFromVersions;
81
+ //# sourceMappingURL=range.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"range.js","sources":["../../../../src/modules/version/range.ts"],"sourcesContent":["import semver from 'semver';\n\nimport * as Version from './types';\nimport { isSemverInstance, isSemVerReleaseType, semVerFactory } from './semver';\n\nexport const rangeFactory = (range: string): Version.Range => {\n return new semver.Range(range);\n};\n\nexport const rangeFromReleaseType = (current: Version.SemVer, identifier: Version.ReleaseType) => {\n switch (identifier) {\n case Version.ReleaseType.Latest: {\n // Match anything greater than the current version\n return rangeFactory(`>${current.raw}`);\n }\n case Version.ReleaseType.Major: {\n // For example, 4.15.4 returns 5.0.0\n const nextMajor = semVerFactory(current.raw).inc('major');\n\n // Using only the major version as the upper limit allows any minor,\n // patch, or build version to be taken in the range.\n //\n // For example, if the current version is \"4.15.4\", incrementing the\n // major version would result in \"5.0.0\".\n // The generated rule is \">4.15.4 <=5\", allowing any version\n // greater than \"4.15.4\" but less than \"6.0.0-0\".\n return rangeFactory(`>${current.raw} <=${nextMajor.major}`);\n }\n case Version.ReleaseType.Minor: {\n // For example, 4.15.4 returns 5.0.0\n const nextMajor = semVerFactory(current.raw).inc('major');\n\n // Using the <major>.<minor>.<patch> version as the upper limit allows any minor,\n // patch, or build versions to be taken in the range.\n //\n // For example, if the current version is \"4.15.4\", incrementing the\n // major version would result in \"5.0.0\".\n // The generated rule is \">4.15.4 <5.0.0\", allowing any version\n // greater than \"4.15.4\" but less than \"5.0.0\".\n return rangeFactory(`>${current.raw} <${nextMajor.raw}`);\n }\n case Version.ReleaseType.Patch: {\n // For example, 4.15.4 returns 4.16.0\n const nextMinor = semVerFactory(current.raw).inc('minor');\n\n // Using only the minor version as the upper limit allows any patch\n // or build versions to be taken in the range.\n //\n // For example, if the current version is \"4.15.4\", incrementing the\n // minor version would result in \"4.16.0\".\n // The generated rule is \">4.15.4 <4.16.0\", allowing any version\n // greater than \"4.15.4\" but less than \"4.16.0\".\n return rangeFactory(`>${current.raw} <${nextMinor.raw}`);\n }\n default: {\n throw new Error('Not implemented');\n }\n }\n};\n\nexport const rangeFromVersions = (\n currentVersion: Version.SemVer,\n target: Version.ReleaseType | Version.SemVer\n) => {\n if (isSemverInstance(target)) {\n return rangeFactory(`>${currentVersion.raw} <=${target.raw}`);\n }\n\n if (isSemVerReleaseType(target)) {\n return rangeFromReleaseType(currentVersion, target);\n }\n\n throw new Error(`Invalid target set: ${target}`); // TODO: better errors\n};\n\nexport const isValidStringifiedRange = (str: string) => semver.validRange(str) !== null;\n\nexport const isRangeInstance = (range: unknown): range is semver.Range => {\n return range instanceof semver.Range;\n};\n"],"names":["rangeFactory","range","semver","Range","rangeFromReleaseType","current","identifier","Version","Latest","raw","Major","nextMajor","semVerFactory","inc","major","Minor","Patch","nextMinor","Error","rangeFromVersions","currentVersion","target","isSemverInstance","isSemVerReleaseType","isValidStringifiedRange","str","validRange","isRangeInstance"],"mappings":";;;;;;AAKO,MAAMA,eAAe,CAACC,KAAAA,GAAAA;IAC3B,OAAO,IAAIC,MAAOC,CAAAA,KAAK,CAACF,KAAAA,CAAAA;AAC1B;AAEO,MAAMG,oBAAuB,GAAA,CAACC,OAAyBC,EAAAA,UAAAA,GAAAA;IAC5D,OAAQA,UAAAA;QACN,KAAKC,iBAAmB,CAACC,MAAM;AAAE,YAAA;;AAE/B,gBAAA,OAAOR,aAAa,CAAC,CAAC,EAAEK,OAAQI,CAAAA,GAAG,CAAC,CAAC,CAAA;AACvC;QACA,KAAKF,iBAAmB,CAACG,KAAK;AAAE,YAAA;;AAE9B,gBAAA,MAAMC,YAAYC,sBAAcP,CAAAA,OAAAA,CAAQI,GAAG,CAAA,CAAEI,GAAG,CAAC,OAAA,CAAA;;;;;;;;AASjD,gBAAA,OAAOb,YAAa,CAAA,CAAC,CAAC,EAAEK,OAAQI,CAAAA,GAAG,CAAC,GAAG,EAAEE,SAAAA,CAAUG,KAAK,CAAC,CAAC,CAAA;AAC5D;QACA,KAAKP,iBAAmB,CAACQ,KAAK;AAAE,YAAA;;AAE9B,gBAAA,MAAMJ,YAAYC,sBAAcP,CAAAA,OAAAA,CAAQI,GAAG,CAAA,CAAEI,GAAG,CAAC,OAAA,CAAA;;;;;;;;AASjD,gBAAA,OAAOb,YAAa,CAAA,CAAC,CAAC,EAAEK,OAAQI,CAAAA,GAAG,CAAC,EAAE,EAAEE,SAAAA,CAAUF,GAAG,CAAC,CAAC,CAAA;AACzD;QACA,KAAKF,iBAAmB,CAACS,KAAK;AAAE,YAAA;;AAE9B,gBAAA,MAAMC,YAAYL,sBAAcP,CAAAA,OAAAA,CAAQI,GAAG,CAAA,CAAEI,GAAG,CAAC,OAAA,CAAA;;;;;;;;AASjD,gBAAA,OAAOb,YAAa,CAAA,CAAC,CAAC,EAAEK,OAAQI,CAAAA,GAAG,CAAC,EAAE,EAAEQ,SAAAA,CAAUR,GAAG,CAAC,CAAC,CAAA;AACzD;AACA,QAAA;AAAS,YAAA;AACP,gBAAA,MAAM,IAAIS,KAAM,CAAA,iBAAA,CAAA;AAClB;AACF;AACF;AAEO,MAAMC,iBAAoB,GAAA,CAC/BC,cACAC,EAAAA,MAAAA,GAAAA;AAEA,IAAA,IAAIC,0BAAiBD,MAAS,CAAA,EAAA;AAC5B,QAAA,OAAOrB,YAAa,CAAA,CAAC,CAAC,EAAEoB,cAAeX,CAAAA,GAAG,CAAC,GAAG,EAAEY,MAAAA,CAAOZ,GAAG,CAAC,CAAC,CAAA;AAC9D;AAEA,IAAA,IAAIc,6BAAoBF,MAAS,CAAA,EAAA;AAC/B,QAAA,OAAOjB,qBAAqBgB,cAAgBC,EAAAA,MAAAA,CAAAA;AAC9C;IAEA,MAAM,IAAIH,MAAM,CAAC,oBAAoB,EAAEG,MAAO,CAAA,CAAC;AACjD;AAEO,MAAMG,0BAA0B,CAACC,GAAAA,GAAgBvB,OAAOwB,UAAU,CAACD,SAAS;AAE5E,MAAME,kBAAkB,CAAC1B,KAAAA,GAAAA;IAC9B,OAAOA,KAAAA,YAAiBC,OAAOC,KAAK;AACtC;;;;;;;;"}
@@ -0,0 +1,75 @@
1
+ import semver from 'semver';
2
+ import { ReleaseType } from './types.mjs';
3
+ import { semVerFactory, isSemverInstance, isSemVerReleaseType } from './semver.mjs';
4
+
5
+ const rangeFactory = (range)=>{
6
+ return new semver.Range(range);
7
+ };
8
+ const rangeFromReleaseType = (current, identifier)=>{
9
+ switch(identifier){
10
+ case ReleaseType.Latest:
11
+ {
12
+ // Match anything greater than the current version
13
+ return rangeFactory(`>${current.raw}`);
14
+ }
15
+ case ReleaseType.Major:
16
+ {
17
+ // For example, 4.15.4 returns 5.0.0
18
+ const nextMajor = semVerFactory(current.raw).inc('major');
19
+ // Using only the major version as the upper limit allows any minor,
20
+ // patch, or build version to be taken in the range.
21
+ //
22
+ // For example, if the current version is "4.15.4", incrementing the
23
+ // major version would result in "5.0.0".
24
+ // The generated rule is ">4.15.4 <=5", allowing any version
25
+ // greater than "4.15.4" but less than "6.0.0-0".
26
+ return rangeFactory(`>${current.raw} <=${nextMajor.major}`);
27
+ }
28
+ case ReleaseType.Minor:
29
+ {
30
+ // For example, 4.15.4 returns 5.0.0
31
+ const nextMajor = semVerFactory(current.raw).inc('major');
32
+ // Using the <major>.<minor>.<patch> version as the upper limit allows any minor,
33
+ // patch, or build versions to be taken in the range.
34
+ //
35
+ // For example, if the current version is "4.15.4", incrementing the
36
+ // major version would result in "5.0.0".
37
+ // The generated rule is ">4.15.4 <5.0.0", allowing any version
38
+ // greater than "4.15.4" but less than "5.0.0".
39
+ return rangeFactory(`>${current.raw} <${nextMajor.raw}`);
40
+ }
41
+ case ReleaseType.Patch:
42
+ {
43
+ // For example, 4.15.4 returns 4.16.0
44
+ const nextMinor = semVerFactory(current.raw).inc('minor');
45
+ // Using only the minor version as the upper limit allows any patch
46
+ // or build versions to be taken in the range.
47
+ //
48
+ // For example, if the current version is "4.15.4", incrementing the
49
+ // minor version would result in "4.16.0".
50
+ // The generated rule is ">4.15.4 <4.16.0", allowing any version
51
+ // greater than "4.15.4" but less than "4.16.0".
52
+ return rangeFactory(`>${current.raw} <${nextMinor.raw}`);
53
+ }
54
+ default:
55
+ {
56
+ throw new Error('Not implemented');
57
+ }
58
+ }
59
+ };
60
+ const rangeFromVersions = (currentVersion, target)=>{
61
+ if (isSemverInstance(target)) {
62
+ return rangeFactory(`>${currentVersion.raw} <=${target.raw}`);
63
+ }
64
+ if (isSemVerReleaseType(target)) {
65
+ return rangeFromReleaseType(currentVersion, target);
66
+ }
67
+ throw new Error(`Invalid target set: ${target}`); // TODO: better errors
68
+ };
69
+ const isValidStringifiedRange = (str)=>semver.validRange(str) !== null;
70
+ const isRangeInstance = (range)=>{
71
+ return range instanceof semver.Range;
72
+ };
73
+
74
+ export { isRangeInstance, isValidStringifiedRange, rangeFactory, rangeFromReleaseType, rangeFromVersions };
75
+ //# sourceMappingURL=range.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"range.mjs","sources":["../../../../src/modules/version/range.ts"],"sourcesContent":["import semver from 'semver';\n\nimport * as Version from './types';\nimport { isSemverInstance, isSemVerReleaseType, semVerFactory } from './semver';\n\nexport const rangeFactory = (range: string): Version.Range => {\n return new semver.Range(range);\n};\n\nexport const rangeFromReleaseType = (current: Version.SemVer, identifier: Version.ReleaseType) => {\n switch (identifier) {\n case Version.ReleaseType.Latest: {\n // Match anything greater than the current version\n return rangeFactory(`>${current.raw}`);\n }\n case Version.ReleaseType.Major: {\n // For example, 4.15.4 returns 5.0.0\n const nextMajor = semVerFactory(current.raw).inc('major');\n\n // Using only the major version as the upper limit allows any minor,\n // patch, or build version to be taken in the range.\n //\n // For example, if the current version is \"4.15.4\", incrementing the\n // major version would result in \"5.0.0\".\n // The generated rule is \">4.15.4 <=5\", allowing any version\n // greater than \"4.15.4\" but less than \"6.0.0-0\".\n return rangeFactory(`>${current.raw} <=${nextMajor.major}`);\n }\n case Version.ReleaseType.Minor: {\n // For example, 4.15.4 returns 5.0.0\n const nextMajor = semVerFactory(current.raw).inc('major');\n\n // Using the <major>.<minor>.<patch> version as the upper limit allows any minor,\n // patch, or build versions to be taken in the range.\n //\n // For example, if the current version is \"4.15.4\", incrementing the\n // major version would result in \"5.0.0\".\n // The generated rule is \">4.15.4 <5.0.0\", allowing any version\n // greater than \"4.15.4\" but less than \"5.0.0\".\n return rangeFactory(`>${current.raw} <${nextMajor.raw}`);\n }\n case Version.ReleaseType.Patch: {\n // For example, 4.15.4 returns 4.16.0\n const nextMinor = semVerFactory(current.raw).inc('minor');\n\n // Using only the minor version as the upper limit allows any patch\n // or build versions to be taken in the range.\n //\n // For example, if the current version is \"4.15.4\", incrementing the\n // minor version would result in \"4.16.0\".\n // The generated rule is \">4.15.4 <4.16.0\", allowing any version\n // greater than \"4.15.4\" but less than \"4.16.0\".\n return rangeFactory(`>${current.raw} <${nextMinor.raw}`);\n }\n default: {\n throw new Error('Not implemented');\n }\n }\n};\n\nexport const rangeFromVersions = (\n currentVersion: Version.SemVer,\n target: Version.ReleaseType | Version.SemVer\n) => {\n if (isSemverInstance(target)) {\n return rangeFactory(`>${currentVersion.raw} <=${target.raw}`);\n }\n\n if (isSemVerReleaseType(target)) {\n return rangeFromReleaseType(currentVersion, target);\n }\n\n throw new Error(`Invalid target set: ${target}`); // TODO: better errors\n};\n\nexport const isValidStringifiedRange = (str: string) => semver.validRange(str) !== null;\n\nexport const isRangeInstance = (range: unknown): range is semver.Range => {\n return range instanceof semver.Range;\n};\n"],"names":["rangeFactory","range","semver","Range","rangeFromReleaseType","current","identifier","Version","Latest","raw","Major","nextMajor","semVerFactory","inc","major","Minor","Patch","nextMinor","Error","rangeFromVersions","currentVersion","target","isSemverInstance","isSemVerReleaseType","isValidStringifiedRange","str","validRange","isRangeInstance"],"mappings":";;;;AAKO,MAAMA,eAAe,CAACC,KAAAA,GAAAA;IAC3B,OAAO,IAAIC,MAAOC,CAAAA,KAAK,CAACF,KAAAA,CAAAA;AAC1B;AAEO,MAAMG,oBAAuB,GAAA,CAACC,OAAyBC,EAAAA,UAAAA,GAAAA;IAC5D,OAAQA,UAAAA;QACN,KAAKC,WAAmB,CAACC,MAAM;AAAE,YAAA;;AAE/B,gBAAA,OAAOR,aAAa,CAAC,CAAC,EAAEK,OAAQI,CAAAA,GAAG,CAAC,CAAC,CAAA;AACvC;QACA,KAAKF,WAAmB,CAACG,KAAK;AAAE,YAAA;;AAE9B,gBAAA,MAAMC,YAAYC,aAAcP,CAAAA,OAAAA,CAAQI,GAAG,CAAA,CAAEI,GAAG,CAAC,OAAA,CAAA;;;;;;;;AASjD,gBAAA,OAAOb,YAAa,CAAA,CAAC,CAAC,EAAEK,OAAQI,CAAAA,GAAG,CAAC,GAAG,EAAEE,SAAAA,CAAUG,KAAK,CAAC,CAAC,CAAA;AAC5D;QACA,KAAKP,WAAmB,CAACQ,KAAK;AAAE,YAAA;;AAE9B,gBAAA,MAAMJ,YAAYC,aAAcP,CAAAA,OAAAA,CAAQI,GAAG,CAAA,CAAEI,GAAG,CAAC,OAAA,CAAA;;;;;;;;AASjD,gBAAA,OAAOb,YAAa,CAAA,CAAC,CAAC,EAAEK,OAAQI,CAAAA,GAAG,CAAC,EAAE,EAAEE,SAAAA,CAAUF,GAAG,CAAC,CAAC,CAAA;AACzD;QACA,KAAKF,WAAmB,CAACS,KAAK;AAAE,YAAA;;AAE9B,gBAAA,MAAMC,YAAYL,aAAcP,CAAAA,OAAAA,CAAQI,GAAG,CAAA,CAAEI,GAAG,CAAC,OAAA,CAAA;;;;;;;;AASjD,gBAAA,OAAOb,YAAa,CAAA,CAAC,CAAC,EAAEK,OAAQI,CAAAA,GAAG,CAAC,EAAE,EAAEQ,SAAAA,CAAUR,GAAG,CAAC,CAAC,CAAA;AACzD;AACA,QAAA;AAAS,YAAA;AACP,gBAAA,MAAM,IAAIS,KAAM,CAAA,iBAAA,CAAA;AAClB;AACF;AACF;AAEO,MAAMC,iBAAoB,GAAA,CAC/BC,cACAC,EAAAA,MAAAA,GAAAA;AAEA,IAAA,IAAIC,iBAAiBD,MAAS,CAAA,EAAA;AAC5B,QAAA,OAAOrB,YAAa,CAAA,CAAC,CAAC,EAAEoB,cAAeX,CAAAA,GAAG,CAAC,GAAG,EAAEY,MAAAA,CAAOZ,GAAG,CAAC,CAAC,CAAA;AAC9D;AAEA,IAAA,IAAIc,oBAAoBF,MAAS,CAAA,EAAA;AAC/B,QAAA,OAAOjB,qBAAqBgB,cAAgBC,EAAAA,MAAAA,CAAAA;AAC9C;IAEA,MAAM,IAAIH,MAAM,CAAC,oBAAoB,EAAEG,MAAO,CAAA,CAAC;AACjD;AAEO,MAAMG,0BAA0B,CAACC,GAAAA,GAAgBvB,OAAOwB,UAAU,CAACD,SAAS;AAE5E,MAAME,kBAAkB,CAAC1B,KAAAA,GAAAA;IAC9B,OAAOA,KAAAA,YAAiBC,OAAOC,KAAK;AACtC;;;;"}
@@ -0,0 +1,26 @@
1
+ 'use strict';
2
+
3
+ var semver = require('semver');
4
+ var types = require('./types.js');
5
+
6
+ const semVerFactory = (version)=>{
7
+ return new semver.SemVer(version);
8
+ };
9
+ const isLiteralSemVer = (str)=>{
10
+ const tokens = str.split('.');
11
+ return tokens.length === 3 && tokens.every((token)=>!Number.isNaN(+token) && Number.isInteger(+token));
12
+ };
13
+ const isValidSemVer = (str)=>semver.valid(str) !== null;
14
+ const isSemverInstance = (value)=>{
15
+ return value instanceof semver.SemVer;
16
+ };
17
+ const isSemVerReleaseType = (str)=>{
18
+ return Object.values(types.ReleaseType).includes(str);
19
+ };
20
+
21
+ exports.isLiteralSemVer = isLiteralSemVer;
22
+ exports.isSemVerReleaseType = isSemVerReleaseType;
23
+ exports.isSemverInstance = isSemverInstance;
24
+ exports.isValidSemVer = isValidSemVer;
25
+ exports.semVerFactory = semVerFactory;
26
+ //# sourceMappingURL=semver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semver.js","sources":["../../../../src/modules/version/semver.ts"],"sourcesContent":["import semver from 'semver';\n\nimport * as Version from './types';\n\nexport const semVerFactory = (version: string): Version.SemVer => {\n return new semver.SemVer(version);\n};\n\nexport const isLiteralSemVer = (str: string): str is Version.LiteralSemVer => {\n const tokens = str.split('.');\n\n return (\n tokens.length === 3 &&\n tokens.every((token) => !Number.isNaN(+token) && Number.isInteger(+token))\n );\n};\n\nexport const isValidSemVer = (str: string) => semver.valid(str) !== null;\n\nexport const isSemverInstance = (value: unknown): value is semver.SemVer => {\n return value instanceof semver.SemVer;\n};\n\nexport const isSemVerReleaseType = (str: string): str is Version.ReleaseType => {\n return Object.values(Version.ReleaseType).includes(str as Version.ReleaseType);\n};\n"],"names":["semVerFactory","version","semver","SemVer","isLiteralSemVer","str","tokens","split","length","every","token","Number","isNaN","isInteger","isValidSemVer","valid","isSemverInstance","value","isSemVerReleaseType","Object","values","Version","includes"],"mappings":";;;;;AAIO,MAAMA,gBAAgB,CAACC,OAAAA,GAAAA;IAC5B,OAAO,IAAIC,MAAOC,CAAAA,MAAM,CAACF,OAAAA,CAAAA;AAC3B;AAEO,MAAMG,kBAAkB,CAACC,GAAAA,GAAAA;IAC9B,MAAMC,MAAAA,GAASD,GAAIE,CAAAA,KAAK,CAAC,GAAA,CAAA;AAEzB,IAAA,OACED,OAAOE,MAAM,KAAK,KAClBF,MAAOG,CAAAA,KAAK,CAAC,CAACC,KAAAA,GAAU,CAACC,MAAAA,CAAOC,KAAK,CAAC,CAACF,UAAUC,MAAOE,CAAAA,SAAS,CAAC,CAACH,KAAAA,CAAAA,CAAAA;AAEvE;AAEO,MAAMI,gBAAgB,CAACT,GAAAA,GAAgBH,OAAOa,KAAK,CAACV,SAAS;AAE7D,MAAMW,mBAAmB,CAACC,KAAAA,GAAAA;IAC/B,OAAOA,KAAAA,YAAiBf,OAAOC,MAAM;AACvC;AAEO,MAAMe,sBAAsB,CAACb,GAAAA,GAAAA;AAClC,IAAA,OAAOc,OAAOC,MAAM,CAACC,iBAAmB,CAAA,CAAEC,QAAQ,CAACjB,GAAAA,CAAAA;AACrD;;;;;;;;"}
@@ -0,0 +1,20 @@
1
+ import semver from 'semver';
2
+ import { ReleaseType } from './types.mjs';
3
+
4
+ const semVerFactory = (version)=>{
5
+ return new semver.SemVer(version);
6
+ };
7
+ const isLiteralSemVer = (str)=>{
8
+ const tokens = str.split('.');
9
+ return tokens.length === 3 && tokens.every((token)=>!Number.isNaN(+token) && Number.isInteger(+token));
10
+ };
11
+ const isValidSemVer = (str)=>semver.valid(str) !== null;
12
+ const isSemverInstance = (value)=>{
13
+ return value instanceof semver.SemVer;
14
+ };
15
+ const isSemVerReleaseType = (str)=>{
16
+ return Object.values(ReleaseType).includes(str);
17
+ };
18
+
19
+ export { isLiteralSemVer, isSemVerReleaseType, isSemverInstance, isValidSemVer, semVerFactory };
20
+ //# sourceMappingURL=semver.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semver.mjs","sources":["../../../../src/modules/version/semver.ts"],"sourcesContent":["import semver from 'semver';\n\nimport * as Version from './types';\n\nexport const semVerFactory = (version: string): Version.SemVer => {\n return new semver.SemVer(version);\n};\n\nexport const isLiteralSemVer = (str: string): str is Version.LiteralSemVer => {\n const tokens = str.split('.');\n\n return (\n tokens.length === 3 &&\n tokens.every((token) => !Number.isNaN(+token) && Number.isInteger(+token))\n );\n};\n\nexport const isValidSemVer = (str: string) => semver.valid(str) !== null;\n\nexport const isSemverInstance = (value: unknown): value is semver.SemVer => {\n return value instanceof semver.SemVer;\n};\n\nexport const isSemVerReleaseType = (str: string): str is Version.ReleaseType => {\n return Object.values(Version.ReleaseType).includes(str as Version.ReleaseType);\n};\n"],"names":["semVerFactory","version","semver","SemVer","isLiteralSemVer","str","tokens","split","length","every","token","Number","isNaN","isInteger","isValidSemVer","valid","isSemverInstance","value","isSemVerReleaseType","Object","values","Version","includes"],"mappings":";;;AAIO,MAAMA,gBAAgB,CAACC,OAAAA,GAAAA;IAC5B,OAAO,IAAIC,MAAOC,CAAAA,MAAM,CAACF,OAAAA,CAAAA;AAC3B;AAEO,MAAMG,kBAAkB,CAACC,GAAAA,GAAAA;IAC9B,MAAMC,MAAAA,GAASD,GAAIE,CAAAA,KAAK,CAAC,GAAA,CAAA;AAEzB,IAAA,OACED,OAAOE,MAAM,KAAK,KAClBF,MAAOG,CAAAA,KAAK,CAAC,CAACC,KAAAA,GAAU,CAACC,MAAAA,CAAOC,KAAK,CAAC,CAACF,UAAUC,MAAOE,CAAAA,SAAS,CAAC,CAACH,KAAAA,CAAAA,CAAAA;AAEvE;AAEO,MAAMI,gBAAgB,CAACT,GAAAA,GAAgBH,OAAOa,KAAK,CAACV,SAAS;AAE7D,MAAMW,mBAAmB,CAACC,KAAAA,GAAAA;IAC/B,OAAOA,KAAAA,YAAiBf,OAAOC,MAAM;AACvC;AAEO,MAAMe,sBAAsB,CAACb,GAAAA,GAAAA;AAClC,IAAA,OAAOc,OAAOC,MAAM,CAACC,WAAmB,CAAA,CAAEC,QAAQ,CAACjB,GAAAA,CAAAA;AACrD;;;;"}
@@ -0,0 +1,12 @@
1
+ 'use strict';
2
+
3
+ exports.ReleaseType = void 0;
4
+ (function(ReleaseType) {
5
+ // Classic
6
+ ReleaseType["Major"] = "major";
7
+ ReleaseType["Minor"] = "minor";
8
+ ReleaseType["Patch"] = "patch";
9
+ // Other
10
+ ReleaseType["Latest"] = "latest";
11
+ })(exports.ReleaseType || (exports.ReleaseType = {}));
12
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sources":["../../../../src/modules/version/types.ts"],"sourcesContent":["export type Version = number;\n\nexport type LiteralVersion =\n | `${Version}`\n | `${Version}.${Version}`\n | `${Version}.${Version}.${Version}`;\n\nexport type LiteralSemVer = `${Version}.${Version}.${Version}`;\n\nexport type { SemVer, Range } from 'semver';\n\nexport enum ReleaseType {\n // Classic\n Major = 'major',\n Minor = 'minor',\n Patch = 'patch',\n // Other\n Latest = 'latest',\n}\n"],"names":["ReleaseType"],"mappings":";;;AAWYA,CAAAA,SAAAA,WAAAA,EAAAA;;;;;;;GAAAA,mBAAAA,KAAAA,mBAAAA,GAAAA,EAAAA,CAAAA,CAAAA;;"}
@@ -0,0 +1,12 @@
1
+ var ReleaseType;
2
+ (function(ReleaseType) {
3
+ // Classic
4
+ ReleaseType["Major"] = "major";
5
+ ReleaseType["Minor"] = "minor";
6
+ ReleaseType["Patch"] = "patch";
7
+ // Other
8
+ ReleaseType["Latest"] = "latest";
9
+ })(ReleaseType || (ReleaseType = {}));
10
+
11
+ export { ReleaseType };
12
+ //# sourceMappingURL=types.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.mjs","sources":["../../../../src/modules/version/types.ts"],"sourcesContent":["export type Version = number;\n\nexport type LiteralVersion =\n | `${Version}`\n | `${Version}.${Version}`\n | `${Version}.${Version}.${Version}`;\n\nexport type LiteralSemVer = `${Version}.${Version}.${Version}`;\n\nexport type { SemVer, Range } from 'semver';\n\nexport enum ReleaseType {\n // Classic\n Major = 'major',\n Minor = 'minor',\n Patch = 'patch',\n // Other\n Latest = 'latest',\n}\n"],"names":["ReleaseType"],"mappings":";AAWYA,CAAAA,SAAAA,WAAAA,EAAAA;;;;;;;GAAAA,WAAAA,KAAAA,WAAAA,GAAAA,EAAAA,CAAAA,CAAAA;;;;"}