@strapi/upgrade 0.0.0-next.3c5400321681b66eb35ab84c11113a78c1d9386e → 0.0.0-next.3db8f1fc613b89bf7742dc5746bf21a8d8ba0d04
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.
- package/dist/cli.js +98 -26
- package/dist/cli.js.map +1 -1
- package/dist/index.js +70 -4
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +70 -4
- package/dist/index.mjs.map +1 -1
- package/dist/modules/error/utils.d.ts +3 -0
- package/dist/modules/error/utils.d.ts.map +1 -1
- package/dist/modules/upgrader/types.d.ts +6 -0
- package/dist/modules/upgrader/types.d.ts.map +1 -1
- package/dist/modules/upgrader/upgrader.d.ts +4 -0
- package/dist/modules/upgrader/upgrader.d.ts.map +1 -1
- package/dist/modules/version/range.d.ts.map +1 -1
- package/dist/modules/version/types.d.ts +2 -1
- package/dist/modules/version/types.d.ts.map +1 -1
- package/dist/tasks/codemods/utils.d.ts.map +1 -1
- package/dist/tasks/upgrade/prompts/index.d.ts +2 -0
- package/dist/tasks/upgrade/prompts/index.d.ts.map +1 -0
- package/dist/tasks/upgrade/prompts/latest.d.ts +9 -0
- package/dist/tasks/upgrade/prompts/latest.d.ts.map +1 -0
- package/dist/tasks/upgrade/upgrade.d.ts.map +1 -1
- package/package.json +5 -5
package/dist/cli.js
CHANGED
|
@@ -99,6 +99,7 @@ var ReleaseType = /* @__PURE__ */ ((ReleaseType2) => {
|
|
|
99
99
|
ReleaseType2["Major"] = "major";
|
|
100
100
|
ReleaseType2["Minor"] = "minor";
|
|
101
101
|
ReleaseType2["Patch"] = "patch";
|
|
102
|
+
ReleaseType2["Latest"] = "latest";
|
|
102
103
|
return ReleaseType2;
|
|
103
104
|
})(ReleaseType || {});
|
|
104
105
|
const semVerFactory = (version2) => {
|
|
@@ -120,6 +121,9 @@ const rangeFactory = (range) => {
|
|
|
120
121
|
};
|
|
121
122
|
const rangeFromReleaseType = (current, identifier) => {
|
|
122
123
|
switch (identifier) {
|
|
124
|
+
case ReleaseType.Latest: {
|
|
125
|
+
return rangeFactory(`>${current.raw}`);
|
|
126
|
+
}
|
|
123
127
|
case ReleaseType.Major: {
|
|
124
128
|
const nextMajor = semVerFactory(current.raw).inc("major");
|
|
125
129
|
return rangeFactory(`>${current.raw} <=${nextMajor.major}`);
|
|
@@ -150,7 +154,36 @@ const isValidStringifiedRange = (str) => semver__default.default.validRange(str)
|
|
|
150
154
|
const isRangeInstance = (range) => {
|
|
151
155
|
return range instanceof semver__default.default.Range;
|
|
152
156
|
};
|
|
157
|
+
class UnexpectedError extends Error {
|
|
158
|
+
constructor() {
|
|
159
|
+
super("Unexpected Error");
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
class NPMCandidateNotFoundError extends Error {
|
|
163
|
+
target;
|
|
164
|
+
constructor(target, message = `Couldn't find a valid NPM candidate for "${target}"`) {
|
|
165
|
+
super(message);
|
|
166
|
+
this.target = target;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
class AbortedError extends Error {
|
|
170
|
+
constructor(message = "Upgrade aborted") {
|
|
171
|
+
super(message);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
const unknownToError = (e) => {
|
|
175
|
+
if (e instanceof Error) {
|
|
176
|
+
return e;
|
|
177
|
+
}
|
|
178
|
+
if (typeof e === "string") {
|
|
179
|
+
return new Error(e);
|
|
180
|
+
}
|
|
181
|
+
return new UnexpectedError();
|
|
182
|
+
};
|
|
153
183
|
const handleError = (err, isSilent) => {
|
|
184
|
+
if (err instanceof AbortedError) {
|
|
185
|
+
process.exit(0);
|
|
186
|
+
}
|
|
154
187
|
if (!isSilent) {
|
|
155
188
|
console.error(
|
|
156
189
|
chalk__default.default.red(`[ERROR] [${(/* @__PURE__ */ new Date()).toISOString()}]`),
|
|
@@ -639,27 +672,6 @@ const projectFactory = (cwd) => {
|
|
|
639
672
|
const isApplicationProject = (project) => {
|
|
640
673
|
return project instanceof AppProject;
|
|
641
674
|
};
|
|
642
|
-
class UnexpectedError extends Error {
|
|
643
|
-
constructor() {
|
|
644
|
-
super("Unexpected Error");
|
|
645
|
-
}
|
|
646
|
-
}
|
|
647
|
-
class NPMCandidateNotFoundError extends Error {
|
|
648
|
-
target;
|
|
649
|
-
constructor(target, message = `Couldn't find a valid NPM candidate for "${target}"`) {
|
|
650
|
-
super(message);
|
|
651
|
-
this.target = target;
|
|
652
|
-
}
|
|
653
|
-
}
|
|
654
|
-
const unknownToError = (e) => {
|
|
655
|
-
if (e instanceof Error) {
|
|
656
|
-
return e;
|
|
657
|
-
}
|
|
658
|
-
if (typeof e === "string") {
|
|
659
|
-
return new Error(e);
|
|
660
|
-
}
|
|
661
|
-
return new UnexpectedError();
|
|
662
|
-
};
|
|
663
675
|
const CODEMOD_CODE_SUFFIX = "code";
|
|
664
676
|
const CODEMOD_JSON_SUFFIX = "json";
|
|
665
677
|
const CODEMOD_ALLOWED_SUFFIXES = [CODEMOD_CODE_SUFFIX, CODEMOD_JSON_SUFFIX];
|
|
@@ -915,6 +927,15 @@ class Upgrader {
|
|
|
915
927
|
this.logger = null;
|
|
916
928
|
this.confirmationCallback = null;
|
|
917
929
|
}
|
|
930
|
+
getNPMPackage() {
|
|
931
|
+
return this.npmPackage;
|
|
932
|
+
}
|
|
933
|
+
getProject() {
|
|
934
|
+
return this.project;
|
|
935
|
+
}
|
|
936
|
+
getTarget() {
|
|
937
|
+
return semVerFactory(this.target.raw);
|
|
938
|
+
}
|
|
918
939
|
setRequirements(requirements) {
|
|
919
940
|
this.requirements = requirements;
|
|
920
941
|
return this;
|
|
@@ -996,6 +1017,12 @@ class Upgrader {
|
|
|
996
1017
|
}
|
|
997
1018
|
return successReport();
|
|
998
1019
|
}
|
|
1020
|
+
async confirm(message) {
|
|
1021
|
+
if (typeof this.confirmationCallback !== "function") {
|
|
1022
|
+
return true;
|
|
1023
|
+
}
|
|
1024
|
+
return this.confirmationCallback(message);
|
|
1025
|
+
}
|
|
999
1026
|
async checkRequirements(requirements, context) {
|
|
1000
1027
|
for (const requirement of requirements) {
|
|
1001
1028
|
const { pass, error } = await requirement.test(context);
|
|
@@ -1225,6 +1252,36 @@ const REQUIRE_GIT_INSTALLED = requirementFactory(
|
|
|
1225
1252
|
const REQUIRE_GIT = requirementFactory("REQUIRE_GIT", null).addChild(
|
|
1226
1253
|
REQUIRE_GIT_INSTALLED.asOptional()
|
|
1227
1254
|
);
|
|
1255
|
+
const latest = async (upgrader, options) => {
|
|
1256
|
+
if (options.target !== ReleaseType.Latest) {
|
|
1257
|
+
return;
|
|
1258
|
+
}
|
|
1259
|
+
const npmPackage = upgrader.getNPMPackage();
|
|
1260
|
+
const target = upgrader.getTarget();
|
|
1261
|
+
const project = upgrader.getProject();
|
|
1262
|
+
const { strapiVersion: current } = project;
|
|
1263
|
+
const fTargetMajor = highlight(`v${target.major}`);
|
|
1264
|
+
const fCurrentMajor = highlight(`v${current.major}`);
|
|
1265
|
+
const fTarget = version$1(target);
|
|
1266
|
+
const fCurrent = version$1(current);
|
|
1267
|
+
const isMajorUpgrade = target.major > current.major;
|
|
1268
|
+
if (isMajorUpgrade) {
|
|
1269
|
+
options.logger.warn(
|
|
1270
|
+
`Detected a major upgrade for the "${highlight(ReleaseType.Latest)}" tag: ${fCurrent} > ${fTarget}`
|
|
1271
|
+
);
|
|
1272
|
+
const newerPackageRelease = npmPackage.findVersionsInRange(rangeFactory(`>${current.raw} <${target.major}`)).at(-1);
|
|
1273
|
+
if (newerPackageRelease) {
|
|
1274
|
+
const fLatest = version$1(semVerFactory(newerPackageRelease.version));
|
|
1275
|
+
options.logger.warn(
|
|
1276
|
+
`It's recommended to first upgrade to the latest version of ${fCurrentMajor} (${fLatest}) before upgrading to ${fTargetMajor}.`
|
|
1277
|
+
);
|
|
1278
|
+
}
|
|
1279
|
+
const proceedAnyway = await upgrader.confirm(`I know what I'm doing. Proceed anyway!`);
|
|
1280
|
+
if (!proceedAnyway) {
|
|
1281
|
+
throw new AbortedError();
|
|
1282
|
+
}
|
|
1283
|
+
}
|
|
1284
|
+
};
|
|
1228
1285
|
const upgrade$1 = async (options) => {
|
|
1229
1286
|
const timer = timerFactory();
|
|
1230
1287
|
const { logger, codemodsTarget } = options;
|
|
@@ -1245,10 +1302,8 @@ const upgrade$1 = async (options) => {
|
|
|
1245
1302
|
if (codemodsTarget !== void 0) {
|
|
1246
1303
|
upgrader.overrideCodemodsTarget(codemodsTarget);
|
|
1247
1304
|
}
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
}
|
|
1251
|
-
upgrader.addRequirement(REQUIRE_GIT.asOptional());
|
|
1305
|
+
await runUpgradePrompts(upgrader, options);
|
|
1306
|
+
addUpgradeRequirements(upgrader, options);
|
|
1252
1307
|
const upgradeReport = await upgrader.upgrade();
|
|
1253
1308
|
if (!upgradeReport.success) {
|
|
1254
1309
|
throw upgradeReport.error;
|
|
@@ -1256,6 +1311,17 @@ const upgrade$1 = async (options) => {
|
|
|
1256
1311
|
timer.stop();
|
|
1257
1312
|
logger.info(`Completed in ${durationMs(timer.elapsedMs)}ms`);
|
|
1258
1313
|
};
|
|
1314
|
+
const runUpgradePrompts = async (upgrader, options) => {
|
|
1315
|
+
if (options.target === ReleaseType.Latest) {
|
|
1316
|
+
await latest(upgrader, options);
|
|
1317
|
+
}
|
|
1318
|
+
};
|
|
1319
|
+
const addUpgradeRequirements = (upgrader, options) => {
|
|
1320
|
+
if (options.target === ReleaseType.Major) {
|
|
1321
|
+
upgrader.addRequirement(REQUIRE_AVAILABLE_NEXT_MAJOR).addRequirement(REQUIRE_LATEST_FOR_CURRENT_MAJOR);
|
|
1322
|
+
}
|
|
1323
|
+
upgrader.addRequirement(REQUIRE_GIT.asOptional());
|
|
1324
|
+
};
|
|
1259
1325
|
const resolvePath = (cwd) => path__default.default.resolve(cwd ?? process.cwd());
|
|
1260
1326
|
const getRangeFromTarget = (currentVersion, target) => {
|
|
1261
1327
|
if (isSemverInstance(target)) {
|
|
@@ -1263,6 +1329,8 @@ const getRangeFromTarget = (currentVersion, target) => {
|
|
|
1263
1329
|
}
|
|
1264
1330
|
const { major, minor, patch } = currentVersion;
|
|
1265
1331
|
switch (target) {
|
|
1332
|
+
case ReleaseType.Latest:
|
|
1333
|
+
throw new Error("Can't use <latest> to create a codemods range: not implemented");
|
|
1266
1334
|
case ReleaseType.Major:
|
|
1267
1335
|
return rangeFactory(`${major}`);
|
|
1268
1336
|
case ReleaseType.Minor:
|
|
@@ -1382,6 +1450,10 @@ const register$1 = (program) => {
|
|
|
1382
1450
|
return upgrade({ ...options, target: releaseType });
|
|
1383
1451
|
});
|
|
1384
1452
|
};
|
|
1453
|
+
addReleaseUpgradeCommand(
|
|
1454
|
+
ReleaseType.Latest,
|
|
1455
|
+
"Upgrade to the latest available version of Strapi"
|
|
1456
|
+
);
|
|
1385
1457
|
addReleaseUpgradeCommand(
|
|
1386
1458
|
ReleaseType.Major,
|
|
1387
1459
|
"Upgrade to the next available major version of Strapi"
|
|
@@ -1494,7 +1566,7 @@ When executed on a Strapi plugin project, it shows every codemods.
|
|
|
1494
1566
|
return listCodemods(options);
|
|
1495
1567
|
});
|
|
1496
1568
|
};
|
|
1497
|
-
const version = "0.0.0-next.
|
|
1569
|
+
const version = "0.0.0-next.3db8f1fc613b89bf7742dc5746bf21a8d8ba0d04";
|
|
1498
1570
|
register$1(commander.program);
|
|
1499
1571
|
register(commander.program);
|
|
1500
1572
|
commander.program.usage("<command> [options]").on("command:*", ([invalidCmd]) => {
|