@strapi/upgrade 5.30.1 → 5.31.1

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.
@@ -1,18 +1,22 @@
1
1
  import type { Package as PackageInterface, NPMPackageVersion } from './types';
2
2
  import type { Version } from '../version';
3
+ import { Logger } from '../logger';
3
4
  export declare class Package implements PackageInterface {
4
5
  name: string;
5
- packageURL: string;
6
+ cwd: string;
7
+ private logger;
6
8
  private npmPackage;
7
- constructor(name: string);
9
+ constructor(name: string, cwd: string, logger: Logger);
8
10
  get isLoaded(): boolean;
9
11
  private assertPackageIsLoaded;
10
12
  getVersionsDict(): Record<string, NPMPackageVersion>;
11
13
  getVersionsAsList(): NPMPackageVersion[];
12
14
  findVersionsInRange(range: Version.Range): NPMPackageVersion[];
15
+ private getRegistryFromPackageManager;
16
+ private determineRegistryUrl;
13
17
  findVersion(version: Version.SemVer): NPMPackageVersion | undefined;
14
18
  refresh(): Promise<this>;
15
19
  versionExists(version: Version.SemVer): boolean;
16
20
  }
17
- export declare const npmPackageFactory: (name: string) => Package;
21
+ export declare const npmPackageFactory: (name: string, cwd: string, logger: Logger) => Package;
18
22
  //# sourceMappingURL=package.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"package.d.ts","sourceRoot":"","sources":["../../../src/modules/npm/package.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,OAAO,IAAI,gBAAgB,EAAc,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC1F,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAK1C,qBAAa,OAAQ,YAAW,gBAAgB;IAC9C,IAAI,EAAE,MAAM,CAAC;IAEb,UAAU,EAAE,MAAM,CAAC;IAEnB,OAAO,CAAC,UAAU,CAAoB;gBAE1B,IAAI,EAAE,MAAM;IAMxB,IAAI,QAAQ,YAEX;IAED,OAAO,CAAC,qBAAqB;IAI7B,eAAe;IAMf,iBAAiB;IAMjB,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK;IAcxC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAM7D,OAAO;IAcb,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM;CAGtC;AAED,eAAO,MAAM,iBAAiB,SAAU,MAAM,YAAsB,CAAC"}
1
+ {"version":3,"file":"package.d.ts","sourceRoot":"","sources":["../../../src/modules/npm/package.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,OAAO,IAAI,gBAAgB,EAAc,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC1F,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAKnC,qBAAa,OAAQ,YAAW,gBAAgB;IAC9C,IAAI,EAAE,MAAM,CAAC;IAEb,GAAG,EAAE,MAAM,CAAC;IAEZ,OAAO,CAAC,MAAM,CAAS;IAEvB,OAAO,CAAC,UAAU,CAAoB;gBAE1B,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAOrD,IAAI,QAAQ,YAEX;IAED,OAAO,CAAC,qBAAqB;IAI7B,eAAe;IAMf,iBAAiB;IAMjB,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK;YAc1B,6BAA6B;YAwB7B,oBAAoB;IAgBlC,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAM7D,OAAO;IAgBb,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM;CAGtC;AAED,eAAO,MAAM,iBAAiB,SAAU,MAAM,OAAO,MAAM,UAAU,MAAM,YAC3C,CAAC"}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var version = "5.30.1";
3
+ var version = "5.31.1";
4
4
 
5
5
  exports.version = version;
6
6
  //# sourceMappingURL=package.json.js.map
@@ -1,4 +1,4 @@
1
- var version = "5.30.1";
1
+ var version = "5.31.1";
2
2
 
3
3
  export { version };
4
4
  //# sourceMappingURL=package.json.mjs.map
@@ -2,6 +2,8 @@
2
2
 
3
3
  var assert = require('node:assert');
4
4
  var semver$1 = require('semver');
5
+ var execa = require('execa');
6
+ var utils = require('@strapi/utils');
5
7
  var undici = require('undici');
6
8
  var constants = require('./constants.js');
7
9
  var semver = require('../version/semver.js');
@@ -30,30 +32,75 @@ class Package {
30
32
  .filter((v)=>semver.isLiteralSemVer(v.version))// Sort in ascending order
31
33
  .sort((v1, v2)=>semver$1.compare(v1.version, v2.version));
32
34
  }
35
+ async getRegistryFromPackageManager() {
36
+ try {
37
+ const packageManagerName = await utils.packageManager.getPreferred(this.cwd);
38
+ if (!packageManagerName) return undefined;
39
+ const registryCommands = {
40
+ yarn: [
41
+ 'config',
42
+ 'get',
43
+ 'npmRegistryServer'
44
+ ],
45
+ npm: [
46
+ 'config',
47
+ 'get',
48
+ 'registry'
49
+ ]
50
+ };
51
+ const command = registryCommands[packageManagerName];
52
+ if (!command) {
53
+ this.logger.warn(`Unsupported package manager: ${packageManagerName}`);
54
+ return undefined;
55
+ }
56
+ const { stdout } = await execa(packageManagerName, command, {
57
+ timeout: 10000
58
+ });
59
+ return stdout.trim() || undefined;
60
+ } catch (error) {
61
+ this.logger.warn('Failed to determine registry URL from package manager');
62
+ return undefined;
63
+ }
64
+ }
65
+ async determineRegistryUrl() {
66
+ if (process.env.NPM_REGISTRY_URL) {
67
+ this.logger.debug(`Using NPM_REGISTRY_URL: ${process.env.NPM_REGISTRY_URL}`);
68
+ return process.env.NPM_REGISTRY_URL.replace(/\/$/, '');
69
+ }
70
+ const packageManagerRegistry = await this.getRegistryFromPackageManager();
71
+ if (packageManagerRegistry) {
72
+ this.logger.debug(`Using package manager registry: ${packageManagerRegistry}`);
73
+ return packageManagerRegistry.replace(/\/$/, '');
74
+ }
75
+ this.logger.debug(`Using default registry: ${constants.NPM_REGISTRY_URL}`);
76
+ return constants.NPM_REGISTRY_URL.replace(/\/$/, '');
77
+ }
33
78
  findVersion(version) {
34
79
  const versions = this.getVersionsAsList();
35
80
  return versions.find((npmVersion)=>semver$1.eq(npmVersion.version, version));
36
81
  }
37
82
  async refresh() {
38
- const response = await fetch(this.packageURL, {
83
+ const packageURL = `${await this.determineRegistryUrl()}/${this.name}`;
84
+ const response = await fetch(packageURL, {
39
85
  // @ts-expect-error Node.js fetch supports dispatcher (undici extension)
40
86
  dispatcher: agent
41
87
  });
42
88
  // TODO: Use a validation library to make sure the response structure is correct
43
- assert(response.ok, `Request failed for ${this.packageURL}`);
89
+ assert(response.ok, `Request failed for ${packageURL}`);
44
90
  this.npmPackage = await response.json();
45
91
  return this;
46
92
  }
47
93
  versionExists(version) {
48
94
  return this.findVersion(version) !== undefined;
49
95
  }
50
- constructor(name){
96
+ constructor(name, cwd, logger){
51
97
  this.name = name;
52
- this.packageURL = `${constants.NPM_REGISTRY_URL}/${name}`;
98
+ this.cwd = cwd;
99
+ this.logger = logger;
53
100
  this.npmPackage = null;
54
101
  }
55
102
  }
56
- const npmPackageFactory = (name)=>new Package(name);
103
+ const npmPackageFactory = (name, cwd, logger)=>new Package(name, cwd, logger);
57
104
 
58
105
  exports.Package = Package;
59
106
  exports.npmPackageFactory = npmPackageFactory;
@@ -1 +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 { ProxyAgent } from 'undici';\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\nconst proxyUrl = process.env.HTTP_PROXY || process.env.HTTPS_PROXY;\nconst agent = proxyUrl ? new ProxyAgent(proxyUrl) : undefined;\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 // @ts-expect-error Node.js fetch supports dispatcher (undici extension)\n dispatcher: agent,\n });\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()) as NPMPackage;\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":["proxyUrl","process","env","HTTP_PROXY","HTTPS_PROXY","agent","ProxyAgent","undefined","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","dispatcher","ok","json","versionExists","name","constants","npmPackageFactory"],"mappings":";;;;;;;;AAUA,MAAMA,QAAAA,GAAWC,QAAQC,GAAG,CAACC,UAAU,IAAIF,OAAAA,CAAQC,GAAG,CAACE,WAAW;AAClE,MAAMC,KAAQL,GAAAA,QAAAA,GAAW,IAAIM,iBAAAA,CAAWN,QAAYO,CAAAA,GAAAA,SAAAA;AAE7C,MAAMC,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,WAAW,MAAMC,KAAAA,CAAM,IAAI,CAACC,UAAU,EAAE;;YAE5CC,UAAYjC,EAAAA;AACd,SAAA,CAAA;;QAGAO,MAAOuB,CAAAA,QAAAA,CAASI,EAAE,EAAE,CAAC,mBAAmB,EAAE,IAAI,CAACF,UAAU,CAAE,CAAA,CAAA;AAE3D,QAAA,IAAI,CAAC3B,UAAU,GAAI,MAAMyB,SAASK,IAAI,EAAA;AAEtC,QAAA,OAAO,IAAI;AACb;AAEAC,IAAAA,aAAAA,CAAclB,OAAuB,EAAE;AACrC,QAAA,OAAO,IAAI,CAACO,WAAW,CAACP,OAAahB,CAAAA,KAAAA,SAAAA;AACvC;AA9DA,IAAA,WAAA,CAAYmC,IAAY,CAAE;QACxB,IAAI,CAACA,IAAI,GAAGA,IAAAA;QACZ,IAAI,CAACL,UAAU,GAAG,CAAA,EAAGM,0BAA0B,CAAC,CAAC,EAAED,IAAM,CAAA,CAAA;QACzD,IAAI,CAAChC,UAAU,GAAG,IAAA;AACpB;AA2DF;MAEakC,iBAAoB,GAAA,CAACF,IAAiB,GAAA,IAAIlC,QAAQkC,IAAM;;;;;"}
1
+ {"version":3,"file":"package.js","sources":["../../../../src/modules/npm/package.ts"],"sourcesContent":["import assert from 'node:assert';\nimport semver from 'semver';\nimport execa from 'execa';\nimport { packageManager } from '@strapi/utils';\n\nimport { ProxyAgent } from 'undici';\nimport * as constants from './constants';\nimport { isLiteralSemVer } from '../version';\n\nimport type { Package as PackageInterface, NPMPackage, NPMPackageVersion } from './types';\nimport type { Version } from '../version';\nimport { Logger } from '../logger';\n\nconst proxyUrl = process.env.HTTP_PROXY || process.env.HTTPS_PROXY;\nconst agent = proxyUrl ? new ProxyAgent(proxyUrl) : undefined;\n\nexport class Package implements PackageInterface {\n name: string;\n\n cwd: string;\n\n private logger: Logger;\n\n private npmPackage: NPMPackage | null;\n\n constructor(name: string, cwd: string, logger: Logger) {\n this.name = name;\n this.cwd = cwd;\n this.logger = logger;\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 private async getRegistryFromPackageManager(): Promise<string | undefined> {\n try {\n const packageManagerName = await packageManager.getPreferred(this.cwd);\n if (!packageManagerName) return undefined;\n\n const registryCommands = {\n yarn: ['config', 'get', 'npmRegistryServer'],\n npm: ['config', 'get', 'registry'],\n } as const;\n\n const command = registryCommands[packageManagerName as keyof typeof registryCommands];\n if (!command) {\n this.logger.warn(`Unsupported package manager: ${packageManagerName}`);\n return undefined;\n }\n\n const { stdout } = await execa(packageManagerName, command, { timeout: 10_000 });\n return stdout.trim() || undefined;\n } catch (error) {\n this.logger.warn('Failed to determine registry URL from package manager');\n return undefined;\n }\n }\n\n private async determineRegistryUrl(): Promise<string> {\n if (process.env.NPM_REGISTRY_URL) {\n this.logger.debug(`Using NPM_REGISTRY_URL: ${process.env.NPM_REGISTRY_URL}`);\n return process.env.NPM_REGISTRY_URL.replace(/\\/$/, '');\n }\n\n const packageManagerRegistry = await this.getRegistryFromPackageManager();\n if (packageManagerRegistry) {\n this.logger.debug(`Using package manager registry: ${packageManagerRegistry}`);\n return packageManagerRegistry.replace(/\\/$/, '');\n }\n\n this.logger.debug(`Using default registry: ${constants.NPM_REGISTRY_URL}`);\n return constants.NPM_REGISTRY_URL.replace(/\\/$/, '');\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 packageURL = `${await this.determineRegistryUrl()}/${this.name}`;\n\n const response = await fetch(packageURL, {\n // @ts-expect-error Node.js fetch supports dispatcher (undici extension)\n dispatcher: agent,\n });\n\n // TODO: Use a validation library to make sure the response structure is correct\n assert(response.ok, `Request failed for ${packageURL}`);\n\n this.npmPackage = (await response.json()) as NPMPackage;\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, cwd: string, logger: Logger) =>\n new Package(name, cwd, logger);\n"],"names":["proxyUrl","process","env","HTTP_PROXY","HTTPS_PROXY","agent","ProxyAgent","undefined","Package","isLoaded","npmPackage","assertPackageIsLoaded","assert","getVersionsDict","versions","getVersionsAsList","Object","values","findVersionsInRange","range","filter","v","test","version","isLiteralSemVer","sort","v1","v2","semver","compare","getRegistryFromPackageManager","packageManagerName","packageManager","getPreferred","cwd","registryCommands","yarn","npm","command","logger","warn","stdout","execa","timeout","trim","error","determineRegistryUrl","NPM_REGISTRY_URL","debug","replace","packageManagerRegistry","constants","findVersion","find","npmVersion","eq","refresh","packageURL","name","response","fetch","dispatcher","ok","json","versionExists","npmPackageFactory"],"mappings":";;;;;;;;;;AAaA,MAAMA,QAAAA,GAAWC,QAAQC,GAAG,CAACC,UAAU,IAAIF,OAAAA,CAAQC,GAAG,CAACE,WAAW;AAClE,MAAMC,KAAQL,GAAAA,QAAAA,GAAW,IAAIM,iBAAAA,CAAWN,QAAYO,CAAAA,GAAAA,SAAAA;AAE7C,MAAMC,OAAAA,CAAAA;AAgBX,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;AAEA,IAAA,MAAcO,6BAA6D,GAAA;QACzE,IAAI;AACF,YAAA,MAAMC,qBAAqB,MAAMC,oBAAAA,CAAeC,YAAY,CAAC,IAAI,CAACC,GAAG,CAAA;YACrE,IAAI,CAACH,oBAAoB,OAAOxB,SAAAA;AAEhC,YAAA,MAAM4B,gBAAmB,GAAA;gBACvBC,IAAM,EAAA;AAAC,oBAAA,QAAA;AAAU,oBAAA,KAAA;AAAO,oBAAA;AAAoB,iBAAA;gBAC5CC,GAAK,EAAA;AAAC,oBAAA,QAAA;AAAU,oBAAA,KAAA;AAAO,oBAAA;AAAW;AACpC,aAAA;YAEA,MAAMC,OAAAA,GAAUH,gBAAgB,CAACJ,kBAAoD,CAAA;AACrF,YAAA,IAAI,CAACO,OAAS,EAAA;gBACZ,IAAI,CAACC,MAAM,CAACC,IAAI,CAAC,CAAC,6BAA6B,EAAET,kBAAoB,CAAA,CAAA,CAAA;gBACrE,OAAOxB,SAAAA;AACT;AAEA,YAAA,MAAM,EAAEkC,MAAM,EAAE,GAAG,MAAMC,KAAAA,CAAMX,oBAAoBO,OAAS,EAAA;gBAAEK,OAAS,EAAA;AAAO,aAAA,CAAA;YAC9E,OAAOF,MAAAA,CAAOG,IAAI,EAAMrC,IAAAA,SAAAA;AAC1B,SAAA,CAAE,OAAOsC,KAAO,EAAA;AACd,YAAA,IAAI,CAACN,MAAM,CAACC,IAAI,CAAC,uDAAA,CAAA;YACjB,OAAOjC,SAAAA;AACT;AACF;AAEA,IAAA,MAAcuC,oBAAwC,GAAA;AACpD,QAAA,IAAI7C,OAAQC,CAAAA,GAAG,CAAC6C,gBAAgB,EAAE;AAChC,YAAA,IAAI,CAACR,MAAM,CAACS,KAAK,CAAC,CAAC,wBAAwB,EAAE/C,OAAQC,CAAAA,GAAG,CAAC6C,gBAAgB,CAAE,CAAA,CAAA;AAC3E,YAAA,OAAO9C,QAAQC,GAAG,CAAC6C,gBAAgB,CAACE,OAAO,CAAC,KAAO,EAAA,EAAA,CAAA;AACrD;AAEA,QAAA,MAAMC,sBAAyB,GAAA,MAAM,IAAI,CAACpB,6BAA6B,EAAA;AACvE,QAAA,IAAIoB,sBAAwB,EAAA;YAC1B,IAAI,CAACX,MAAM,CAACS,KAAK,CAAC,CAAC,gCAAgC,EAAEE,sBAAwB,CAAA,CAAA,CAAA;YAC7E,OAAOA,sBAAAA,CAAuBD,OAAO,CAAC,KAAO,EAAA,EAAA,CAAA;AAC/C;QAEA,IAAI,CAACV,MAAM,CAACS,KAAK,CAAC,CAAC,wBAAwB,EAAEG,0BAA0B,CAAE,CAAA,CAAA;AACzE,QAAA,OAAOA,0BAA0B,CAACF,OAAO,CAAC,KAAO,EAAA,EAAA,CAAA;AACnD;AAEAG,IAAAA,WAAAA,CAAY7B,OAAuB,EAAiC;QAClE,MAAMT,QAAAA,GAAW,IAAI,CAACC,iBAAiB,EAAA;QAEvC,OAAOD,QAAAA,CAASuC,IAAI,CAAC,CAACC,UAAAA,GAAe1B,SAAO2B,EAAE,CAACD,UAAW/B,CAAAA,OAAO,EAAEA,OAAAA,CAAAA,CAAAA;AACrE;AAEA,IAAA,MAAMiC,OAAU,GAAA;AACd,QAAA,MAAMC,UAAa,GAAA,CAAA,EAAG,MAAM,IAAI,CAACX,oBAAoB,EAAG,CAAA,CAAC,EAAE,IAAI,CAACY,IAAI,CAAE,CAAA;QAEtE,MAAMC,QAAAA,GAAW,MAAMC,KAAAA,CAAMH,UAAY,EAAA;;YAEvCI,UAAYxD,EAAAA;AACd,SAAA,CAAA;;AAGAO,QAAAA,MAAAA,CAAO+C,SAASG,EAAE,EAAE,CAAC,mBAAmB,EAAEL,UAAY,CAAA,CAAA,CAAA;AAEtD,QAAA,IAAI,CAAC/C,UAAU,GAAI,MAAMiD,SAASI,IAAI,EAAA;AAEtC,QAAA,OAAO,IAAI;AACb;AAEAC,IAAAA,aAAAA,CAAczC,OAAuB,EAAE;AACrC,QAAA,OAAO,IAAI,CAAC6B,WAAW,CAAC7B,OAAahB,CAAAA,KAAAA,SAAAA;AACvC;AAzGA,IAAA,WAAA,CAAYmD,IAAY,EAAExB,GAAW,EAAEK,MAAc,CAAE;QACrD,IAAI,CAACmB,IAAI,GAAGA,IAAAA;QACZ,IAAI,CAACxB,GAAG,GAAGA,GAAAA;QACX,IAAI,CAACK,MAAM,GAAGA,MAAAA;QACd,IAAI,CAAC7B,UAAU,GAAG,IAAA;AACpB;AAqGF;AAEO,MAAMuD,iBAAoB,GAAA,CAACP,IAAcxB,EAAAA,GAAAA,EAAaK,SAC3D,IAAI/B,OAAAA,CAAQkD,IAAMxB,EAAAA,GAAAA,EAAKK,MAAQ;;;;;"}
@@ -1,5 +1,7 @@
1
1
  import assert from 'node:assert';
2
2
  import semver from 'semver';
3
+ import execa from 'execa';
4
+ import { packageManager } from '@strapi/utils';
3
5
  import { ProxyAgent } from 'undici';
4
6
  import { NPM_REGISTRY_URL } from './constants.mjs';
5
7
  import { isLiteralSemVer } from '../version/semver.mjs';
@@ -28,30 +30,75 @@ class Package {
28
30
  .filter((v)=>isLiteralSemVer(v.version))// Sort in ascending order
29
31
  .sort((v1, v2)=>semver.compare(v1.version, v2.version));
30
32
  }
33
+ async getRegistryFromPackageManager() {
34
+ try {
35
+ const packageManagerName = await packageManager.getPreferred(this.cwd);
36
+ if (!packageManagerName) return undefined;
37
+ const registryCommands = {
38
+ yarn: [
39
+ 'config',
40
+ 'get',
41
+ 'npmRegistryServer'
42
+ ],
43
+ npm: [
44
+ 'config',
45
+ 'get',
46
+ 'registry'
47
+ ]
48
+ };
49
+ const command = registryCommands[packageManagerName];
50
+ if (!command) {
51
+ this.logger.warn(`Unsupported package manager: ${packageManagerName}`);
52
+ return undefined;
53
+ }
54
+ const { stdout } = await execa(packageManagerName, command, {
55
+ timeout: 10000
56
+ });
57
+ return stdout.trim() || undefined;
58
+ } catch (error) {
59
+ this.logger.warn('Failed to determine registry URL from package manager');
60
+ return undefined;
61
+ }
62
+ }
63
+ async determineRegistryUrl() {
64
+ if (process.env.NPM_REGISTRY_URL) {
65
+ this.logger.debug(`Using NPM_REGISTRY_URL: ${process.env.NPM_REGISTRY_URL}`);
66
+ return process.env.NPM_REGISTRY_URL.replace(/\/$/, '');
67
+ }
68
+ const packageManagerRegistry = await this.getRegistryFromPackageManager();
69
+ if (packageManagerRegistry) {
70
+ this.logger.debug(`Using package manager registry: ${packageManagerRegistry}`);
71
+ return packageManagerRegistry.replace(/\/$/, '');
72
+ }
73
+ this.logger.debug(`Using default registry: ${NPM_REGISTRY_URL}`);
74
+ return NPM_REGISTRY_URL.replace(/\/$/, '');
75
+ }
31
76
  findVersion(version) {
32
77
  const versions = this.getVersionsAsList();
33
78
  return versions.find((npmVersion)=>semver.eq(npmVersion.version, version));
34
79
  }
35
80
  async refresh() {
36
- const response = await fetch(this.packageURL, {
81
+ const packageURL = `${await this.determineRegistryUrl()}/${this.name}`;
82
+ const response = await fetch(packageURL, {
37
83
  // @ts-expect-error Node.js fetch supports dispatcher (undici extension)
38
84
  dispatcher: agent
39
85
  });
40
86
  // TODO: Use a validation library to make sure the response structure is correct
41
- assert(response.ok, `Request failed for ${this.packageURL}`);
87
+ assert(response.ok, `Request failed for ${packageURL}`);
42
88
  this.npmPackage = await response.json();
43
89
  return this;
44
90
  }
45
91
  versionExists(version) {
46
92
  return this.findVersion(version) !== undefined;
47
93
  }
48
- constructor(name){
94
+ constructor(name, cwd, logger){
49
95
  this.name = name;
50
- this.packageURL = `${NPM_REGISTRY_URL}/${name}`;
96
+ this.cwd = cwd;
97
+ this.logger = logger;
51
98
  this.npmPackage = null;
52
99
  }
53
100
  }
54
- const npmPackageFactory = (name)=>new Package(name);
101
+ const npmPackageFactory = (name, cwd, logger)=>new Package(name, cwd, logger);
55
102
 
56
103
  export { Package, npmPackageFactory };
57
104
  //# sourceMappingURL=package.mjs.map
@@ -1 +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 { ProxyAgent } from 'undici';\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\nconst proxyUrl = process.env.HTTP_PROXY || process.env.HTTPS_PROXY;\nconst agent = proxyUrl ? new ProxyAgent(proxyUrl) : undefined;\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 // @ts-expect-error Node.js fetch supports dispatcher (undici extension)\n dispatcher: agent,\n });\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()) as NPMPackage;\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":["proxyUrl","process","env","HTTP_PROXY","HTTPS_PROXY","agent","ProxyAgent","undefined","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","dispatcher","ok","json","versionExists","name","constants","npmPackageFactory"],"mappings":";;;;;;AAUA,MAAMA,QAAAA,GAAWC,QAAQC,GAAG,CAACC,UAAU,IAAIF,OAAAA,CAAQC,GAAG,CAACE,WAAW;AAClE,MAAMC,KAAQL,GAAAA,QAAAA,GAAW,IAAIM,UAAAA,CAAWN,QAAYO,CAAAA,GAAAA,SAAAA;AAE7C,MAAMC,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,WAAW,MAAMC,KAAAA,CAAM,IAAI,CAACC,UAAU,EAAE;;YAE5CC,UAAYjC,EAAAA;AACd,SAAA,CAAA;;QAGAO,MAAOuB,CAAAA,QAAAA,CAASI,EAAE,EAAE,CAAC,mBAAmB,EAAE,IAAI,CAACF,UAAU,CAAE,CAAA,CAAA;AAE3D,QAAA,IAAI,CAAC3B,UAAU,GAAI,MAAMyB,SAASK,IAAI,EAAA;AAEtC,QAAA,OAAO,IAAI;AACb;AAEAC,IAAAA,aAAAA,CAAclB,OAAuB,EAAE;AACrC,QAAA,OAAO,IAAI,CAACO,WAAW,CAACP,OAAahB,CAAAA,KAAAA,SAAAA;AACvC;AA9DA,IAAA,WAAA,CAAYmC,IAAY,CAAE;QACxB,IAAI,CAACA,IAAI,GAAGA,IAAAA;QACZ,IAAI,CAACL,UAAU,GAAG,CAAA,EAAGM,gBAA0B,CAAC,CAAC,EAAED,IAAM,CAAA,CAAA;QACzD,IAAI,CAAChC,UAAU,GAAG,IAAA;AACpB;AA2DF;MAEakC,iBAAoB,GAAA,CAACF,IAAiB,GAAA,IAAIlC,QAAQkC,IAAM;;;;"}
1
+ {"version":3,"file":"package.mjs","sources":["../../../../src/modules/npm/package.ts"],"sourcesContent":["import assert from 'node:assert';\nimport semver from 'semver';\nimport execa from 'execa';\nimport { packageManager } from '@strapi/utils';\n\nimport { ProxyAgent } from 'undici';\nimport * as constants from './constants';\nimport { isLiteralSemVer } from '../version';\n\nimport type { Package as PackageInterface, NPMPackage, NPMPackageVersion } from './types';\nimport type { Version } from '../version';\nimport { Logger } from '../logger';\n\nconst proxyUrl = process.env.HTTP_PROXY || process.env.HTTPS_PROXY;\nconst agent = proxyUrl ? new ProxyAgent(proxyUrl) : undefined;\n\nexport class Package implements PackageInterface {\n name: string;\n\n cwd: string;\n\n private logger: Logger;\n\n private npmPackage: NPMPackage | null;\n\n constructor(name: string, cwd: string, logger: Logger) {\n this.name = name;\n this.cwd = cwd;\n this.logger = logger;\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 private async getRegistryFromPackageManager(): Promise<string | undefined> {\n try {\n const packageManagerName = await packageManager.getPreferred(this.cwd);\n if (!packageManagerName) return undefined;\n\n const registryCommands = {\n yarn: ['config', 'get', 'npmRegistryServer'],\n npm: ['config', 'get', 'registry'],\n } as const;\n\n const command = registryCommands[packageManagerName as keyof typeof registryCommands];\n if (!command) {\n this.logger.warn(`Unsupported package manager: ${packageManagerName}`);\n return undefined;\n }\n\n const { stdout } = await execa(packageManagerName, command, { timeout: 10_000 });\n return stdout.trim() || undefined;\n } catch (error) {\n this.logger.warn('Failed to determine registry URL from package manager');\n return undefined;\n }\n }\n\n private async determineRegistryUrl(): Promise<string> {\n if (process.env.NPM_REGISTRY_URL) {\n this.logger.debug(`Using NPM_REGISTRY_URL: ${process.env.NPM_REGISTRY_URL}`);\n return process.env.NPM_REGISTRY_URL.replace(/\\/$/, '');\n }\n\n const packageManagerRegistry = await this.getRegistryFromPackageManager();\n if (packageManagerRegistry) {\n this.logger.debug(`Using package manager registry: ${packageManagerRegistry}`);\n return packageManagerRegistry.replace(/\\/$/, '');\n }\n\n this.logger.debug(`Using default registry: ${constants.NPM_REGISTRY_URL}`);\n return constants.NPM_REGISTRY_URL.replace(/\\/$/, '');\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 packageURL = `${await this.determineRegistryUrl()}/${this.name}`;\n\n const response = await fetch(packageURL, {\n // @ts-expect-error Node.js fetch supports dispatcher (undici extension)\n dispatcher: agent,\n });\n\n // TODO: Use a validation library to make sure the response structure is correct\n assert(response.ok, `Request failed for ${packageURL}`);\n\n this.npmPackage = (await response.json()) as NPMPackage;\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, cwd: string, logger: Logger) =>\n new Package(name, cwd, logger);\n"],"names":["proxyUrl","process","env","HTTP_PROXY","HTTPS_PROXY","agent","ProxyAgent","undefined","Package","isLoaded","npmPackage","assertPackageIsLoaded","assert","getVersionsDict","versions","getVersionsAsList","Object","values","findVersionsInRange","range","filter","v","test","version","isLiteralSemVer","sort","v1","v2","semver","compare","getRegistryFromPackageManager","packageManagerName","packageManager","getPreferred","cwd","registryCommands","yarn","npm","command","logger","warn","stdout","execa","timeout","trim","error","determineRegistryUrl","NPM_REGISTRY_URL","debug","replace","packageManagerRegistry","constants","findVersion","find","npmVersion","eq","refresh","packageURL","name","response","fetch","dispatcher","ok","json","versionExists","npmPackageFactory"],"mappings":"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"}
@@ -26,7 +26,7 @@ const upgrade = async (options)=>{
26
26
  throw new Error(`The "${options.target}" upgrade can only be run on a Strapi project; for plugins, please use "codemods".`);
27
27
  }
28
28
  logger.debug(`Application: VERSION=${formats.version(project$1.packageJSON.version)}; STRAPI_VERSION=${formats.version(project$1.strapiVersion)}`);
29
- const npmPackage = _package.npmPackageFactory(constants.STRAPI_PACKAGE_NAME);
29
+ const npmPackage = _package.npmPackageFactory(constants.STRAPI_PACKAGE_NAME, project$1.cwd, logger);
30
30
  // Load all available versions from the NPM registry
31
31
  await npmPackage.refresh();
32
32
  // Initialize the upgrade instance
@@ -1 +1 @@
1
- {"version":3,"file":"upgrade.js","sources":["../../../../src/tasks/upgrade/upgrade.ts"],"sourcesContent":["import path from 'node:path';\n\nimport * as f from '../../modules/format';\nimport { npmPackageFactory } from '../../modules/npm';\nimport { isApplicationProject, projectFactory } from '../../modules/project';\nimport { timerFactory } from '../../modules/timer';\nimport { constants as upgraderConstants, upgraderFactory } from '../../modules/upgrader';\nimport { Version } from '../../modules/version';\n\nimport * as requirements from './requirements';\nimport * as prompts from './prompts';\n\nimport type { UpgradeOptions } from './types';\nimport type { Upgrader } from '../../modules/upgrader';\n\nexport const upgrade = async (options: UpgradeOptions) => {\n const timer = timerFactory();\n const { logger, codemodsTarget } = options;\n\n // Resolves the correct working directory based on the given input\n const cwd = path.resolve(options.cwd ?? process.cwd());\n\n const project = projectFactory(cwd);\n\n logger.debug(f.projectDetails(project));\n\n if (!isApplicationProject(project)) {\n throw new Error(\n `The \"${options.target}\" upgrade can only be run on a Strapi project; for plugins, please use \"codemods\".`\n );\n }\n\n logger.debug(\n `Application: VERSION=${f.version(project.packageJSON.version as Version.LiteralVersion)}; STRAPI_VERSION=${f.version(project.strapiVersion)}`\n );\n\n const npmPackage = npmPackageFactory(upgraderConstants.STRAPI_PACKAGE_NAME);\n\n // Load all available versions from the NPM registry\n await npmPackage.refresh();\n\n // Initialize the upgrade instance\n // Throws during initialization if the provided target is incompatible with the current version\n const upgrader = upgraderFactory(project, options.target, npmPackage)\n .dry(options.dry ?? false)\n .onConfirm(options.confirm ?? null)\n .setLogger(logger);\n\n // Manually override the target version for codemods if it's explicitly provided\n if (codemodsTarget !== undefined) {\n upgrader.overrideCodemodsTarget(codemodsTarget);\n }\n\n // Prompt user for confirmation details before upgrading\n await runUpgradePrompts(upgrader, options);\n\n // Add specific requirements before upgrading\n addUpgradeRequirements(upgrader, options);\n\n // Actually run the upgrade process once configured,\n // The response contains information about the final status: success/error\n const upgradeReport = await upgrader.upgrade();\n\n if (!upgradeReport.success) {\n throw upgradeReport.error;\n }\n\n timer.stop();\n\n logger.info(`Completed in ${f.durationMs(timer.elapsedMs)}ms`);\n};\n\nconst runUpgradePrompts = async (upgrader: Upgrader, options: UpgradeOptions) => {\n if (options.target === Version.ReleaseType.Latest) {\n await prompts.latest(upgrader, options);\n }\n};\n\nconst addUpgradeRequirements = (upgrader: Upgrader, options: UpgradeOptions): void => {\n // Don't add the same requirements when manually targeting a major upgrade\n // using a semver as it's implied that the users know what they're doing\n if (options.target === Version.ReleaseType.Major) {\n upgrader\n .addRequirement(requirements.major.REQUIRE_AVAILABLE_NEXT_MAJOR)\n .addRequirement(requirements.major.REQUIRE_LATEST_FOR_CURRENT_MAJOR);\n }\n\n // Make sure the git repository is in an optimal state before running the upgrade\n // Mainly used to ease rollbacks in case the upgrade is corrupted\n upgrader.addRequirement(requirements.common.REQUIRE_GIT.asOptional());\n};\n"],"names":["upgrade","options","timer","timerFactory","logger","codemodsTarget","cwd","path","resolve","process","project","projectFactory","debug","f","isApplicationProject","Error","target","packageJSON","version","strapiVersion","npmPackage","npmPackageFactory","upgraderConstants","refresh","upgrader","upgraderFactory","dry","onConfirm","confirm","setLogger","undefined","overrideCodemodsTarget","runUpgradePrompts","addUpgradeRequirements","upgradeReport","success","error","stop","info","elapsedMs","Version","Latest","prompts","Major","addRequirement","requirements","asOptional"],"mappings":";;;;;;;;;;;;;;;;;AAeO,MAAMA,UAAU,OAAOC,OAAAA,GAAAA;AAC5B,IAAA,MAAMC,OAAQC,GAAAA,kBAAAA,EAAAA;AACd,IAAA,MAAM,EAAEC,MAAM,EAAEC,cAAc,EAAE,GAAGJ,OAAAA;;IAGnC,MAAMK,GAAAA,GAAMC,KAAKC,OAAO,CAACP,QAAQK,GAAG,IAAIG,QAAQH,GAAG,EAAA,CAAA;AAEnD,IAAA,MAAMI,YAAUC,sBAAeL,CAAAA,GAAAA,CAAAA;AAE/BF,IAAAA,MAAAA,CAAOQ,KAAK,CAACC,sBAAgB,CAACH,SAAAA,CAAAA,CAAAA;IAE9B,IAAI,CAACI,2BAAqBJ,SAAU,CAAA,EAAA;QAClC,MAAM,IAAIK,MACR,CAAC,KAAK,EAAEd,OAAQe,CAAAA,MAAM,CAAC,kFAAkF,CAAC,CAAA;AAE9G;IAEAZ,MAAOQ,CAAAA,KAAK,CACV,CAAC,qBAAqB,EAAEC,eAAS,CAACH,SAAQO,CAAAA,WAAW,CAACC,OAAO,CAAA,CAA4B,iBAAiB,EAAEL,eAAS,CAACH,SAAAA,CAAQS,aAAa,CAAG,CAAA,CAAA,CAAA;IAGhJ,MAAMC,UAAAA,GAAaC,0BAAkBC,CAAAA,6BAAqC,CAAA;;AAG1E,IAAA,MAAMF,WAAWG,OAAO,EAAA;;;IAIxB,MAAMC,UAAAA,GAAWC,yBAAgBf,SAAST,EAAAA,OAAAA,CAAQe,MAAM,EAAEI,UAAAA,CAAAA,CACvDM,GAAG,CAACzB,OAAAA,CAAQyB,GAAG,IAAI,KAAA,CAAA,CACnBC,SAAS,CAAC1B,OAAAA,CAAQ2B,OAAO,IAAI,IAAA,CAAA,CAC7BC,SAAS,CAACzB,MAAAA,CAAAA;;AAGb,IAAA,IAAIC,mBAAmByB,SAAW,EAAA;AAChCN,QAAAA,UAAAA,CAASO,sBAAsB,CAAC1B,cAAAA,CAAAA;AAClC;;AAGA,IAAA,MAAM2B,kBAAkBR,UAAUvB,EAAAA,OAAAA,CAAAA;;AAGlCgC,IAAAA,sBAAAA,CAAuBT,UAAUvB,EAAAA,OAAAA,CAAAA;;;IAIjC,MAAMiC,aAAAA,GAAgB,MAAMV,UAAAA,CAASxB,OAAO,EAAA;IAE5C,IAAI,CAACkC,aAAcC,CAAAA,OAAO,EAAE;AAC1B,QAAA,MAAMD,cAAcE,KAAK;AAC3B;AAEAlC,IAAAA,OAAAA,CAAMmC,IAAI,EAAA;AAEVjC,IAAAA,MAAAA,CAAOkC,IAAI,CAAC,CAAC,aAAa,EAAEzB,kBAAY,CAACX,OAAMqC,CAAAA,SAAS,CAAE,CAAA,EAAE,CAAC,CAAA;AAC/D;AAEA,MAAMP,iBAAAA,GAAoB,OAAOR,QAAoBvB,EAAAA,OAAAA,GAAAA;AACnD,IAAA,IAAIA,QAAQe,MAAM,KAAKwB,iBAAmB,CAACC,MAAM,EAAE;QACjD,MAAMC,aAAc,CAAClB,QAAUvB,EAAAA,OAAAA,CAAAA;AACjC;AACF,CAAA;AAEA,MAAMgC,sBAAAA,GAAyB,CAACT,QAAoBvB,EAAAA,OAAAA,GAAAA;;;AAGlD,IAAA,IAAIA,QAAQe,MAAM,KAAKwB,iBAAmB,CAACG,KAAK,EAAE;AAChDnB,QAAAA,QAAAA,CACGoB,cAAc,CAACC,kCAA+C,CAC9DD,CAAAA,cAAc,CAACC,sCAAmD,CAAA;AACvE;;;AAIArB,IAAAA,QAAAA,CAASoB,cAAc,CAACC,kBAA+B,CAACC,UAAU,EAAA,CAAA;AACpE,CAAA;;;;"}
1
+ {"version":3,"file":"upgrade.js","sources":["../../../../src/tasks/upgrade/upgrade.ts"],"sourcesContent":["import path from 'node:path';\n\nimport * as f from '../../modules/format';\nimport { npmPackageFactory } from '../../modules/npm';\nimport { isApplicationProject, projectFactory } from '../../modules/project';\nimport { timerFactory } from '../../modules/timer';\nimport { constants as upgraderConstants, upgraderFactory } from '../../modules/upgrader';\nimport { Version } from '../../modules/version';\n\nimport * as requirements from './requirements';\nimport * as prompts from './prompts';\n\nimport type { UpgradeOptions } from './types';\nimport type { Upgrader } from '../../modules/upgrader';\n\nexport const upgrade = async (options: UpgradeOptions) => {\n const timer = timerFactory();\n const { logger, codemodsTarget } = options;\n\n // Resolves the correct working directory based on the given input\n const cwd = path.resolve(options.cwd ?? process.cwd());\n\n const project = projectFactory(cwd);\n\n logger.debug(f.projectDetails(project));\n\n if (!isApplicationProject(project)) {\n throw new Error(\n `The \"${options.target}\" upgrade can only be run on a Strapi project; for plugins, please use \"codemods\".`\n );\n }\n\n logger.debug(\n `Application: VERSION=${f.version(project.packageJSON.version as Version.LiteralVersion)}; STRAPI_VERSION=${f.version(project.strapiVersion)}`\n );\n\n const npmPackage = npmPackageFactory(upgraderConstants.STRAPI_PACKAGE_NAME, project.cwd, logger);\n\n // Load all available versions from the NPM registry\n await npmPackage.refresh();\n\n // Initialize the upgrade instance\n // Throws during initialization if the provided target is incompatible with the current version\n const upgrader = upgraderFactory(project, options.target, npmPackage)\n .dry(options.dry ?? false)\n .onConfirm(options.confirm ?? null)\n .setLogger(logger);\n\n // Manually override the target version for codemods if it's explicitly provided\n if (codemodsTarget !== undefined) {\n upgrader.overrideCodemodsTarget(codemodsTarget);\n }\n\n // Prompt user for confirmation details before upgrading\n await runUpgradePrompts(upgrader, options);\n\n // Add specific requirements before upgrading\n addUpgradeRequirements(upgrader, options);\n\n // Actually run the upgrade process once configured,\n // The response contains information about the final status: success/error\n const upgradeReport = await upgrader.upgrade();\n\n if (!upgradeReport.success) {\n throw upgradeReport.error;\n }\n\n timer.stop();\n\n logger.info(`Completed in ${f.durationMs(timer.elapsedMs)}ms`);\n};\n\nconst runUpgradePrompts = async (upgrader: Upgrader, options: UpgradeOptions) => {\n if (options.target === Version.ReleaseType.Latest) {\n await prompts.latest(upgrader, options);\n }\n};\n\nconst addUpgradeRequirements = (upgrader: Upgrader, options: UpgradeOptions): void => {\n // Don't add the same requirements when manually targeting a major upgrade\n // using a semver as it's implied that the users know what they're doing\n if (options.target === Version.ReleaseType.Major) {\n upgrader\n .addRequirement(requirements.major.REQUIRE_AVAILABLE_NEXT_MAJOR)\n .addRequirement(requirements.major.REQUIRE_LATEST_FOR_CURRENT_MAJOR);\n }\n\n // Make sure the git repository is in an optimal state before running the upgrade\n // Mainly used to ease rollbacks in case the upgrade is corrupted\n upgrader.addRequirement(requirements.common.REQUIRE_GIT.asOptional());\n};\n"],"names":["upgrade","options","timer","timerFactory","logger","codemodsTarget","cwd","path","resolve","process","project","projectFactory","debug","f","isApplicationProject","Error","target","packageJSON","version","strapiVersion","npmPackage","npmPackageFactory","upgraderConstants","refresh","upgrader","upgraderFactory","dry","onConfirm","confirm","setLogger","undefined","overrideCodemodsTarget","runUpgradePrompts","addUpgradeRequirements","upgradeReport","success","error","stop","info","elapsedMs","Version","Latest","prompts","Major","addRequirement","requirements","asOptional"],"mappings":";;;;;;;;;;;;;;;;;AAeO,MAAMA,UAAU,OAAOC,OAAAA,GAAAA;AAC5B,IAAA,MAAMC,OAAQC,GAAAA,kBAAAA,EAAAA;AACd,IAAA,MAAM,EAAEC,MAAM,EAAEC,cAAc,EAAE,GAAGJ,OAAAA;;IAGnC,MAAMK,GAAAA,GAAMC,KAAKC,OAAO,CAACP,QAAQK,GAAG,IAAIG,QAAQH,GAAG,EAAA,CAAA;AAEnD,IAAA,MAAMI,YAAUC,sBAAeL,CAAAA,GAAAA,CAAAA;AAE/BF,IAAAA,MAAAA,CAAOQ,KAAK,CAACC,sBAAgB,CAACH,SAAAA,CAAAA,CAAAA;IAE9B,IAAI,CAACI,2BAAqBJ,SAAU,CAAA,EAAA;QAClC,MAAM,IAAIK,MACR,CAAC,KAAK,EAAEd,OAAQe,CAAAA,MAAM,CAAC,kFAAkF,CAAC,CAAA;AAE9G;IAEAZ,MAAOQ,CAAAA,KAAK,CACV,CAAC,qBAAqB,EAAEC,eAAS,CAACH,SAAQO,CAAAA,WAAW,CAACC,OAAO,CAAA,CAA4B,iBAAiB,EAAEL,eAAS,CAACH,SAAAA,CAAQS,aAAa,CAAG,CAAA,CAAA,CAAA;AAGhJ,IAAA,MAAMC,aAAaC,0BAAkBC,CAAAA,6BAAqC,EAAEZ,SAAAA,CAAQJ,GAAG,EAAEF,MAAAA,CAAAA;;AAGzF,IAAA,MAAMgB,WAAWG,OAAO,EAAA;;;IAIxB,MAAMC,UAAAA,GAAWC,yBAAgBf,SAAST,EAAAA,OAAAA,CAAQe,MAAM,EAAEI,UAAAA,CAAAA,CACvDM,GAAG,CAACzB,OAAAA,CAAQyB,GAAG,IAAI,KAAA,CAAA,CACnBC,SAAS,CAAC1B,OAAAA,CAAQ2B,OAAO,IAAI,IAAA,CAAA,CAC7BC,SAAS,CAACzB,MAAAA,CAAAA;;AAGb,IAAA,IAAIC,mBAAmByB,SAAW,EAAA;AAChCN,QAAAA,UAAAA,CAASO,sBAAsB,CAAC1B,cAAAA,CAAAA;AAClC;;AAGA,IAAA,MAAM2B,kBAAkBR,UAAUvB,EAAAA,OAAAA,CAAAA;;AAGlCgC,IAAAA,sBAAAA,CAAuBT,UAAUvB,EAAAA,OAAAA,CAAAA;;;IAIjC,MAAMiC,aAAAA,GAAgB,MAAMV,UAAAA,CAASxB,OAAO,EAAA;IAE5C,IAAI,CAACkC,aAAcC,CAAAA,OAAO,EAAE;AAC1B,QAAA,MAAMD,cAAcE,KAAK;AAC3B;AAEAlC,IAAAA,OAAAA,CAAMmC,IAAI,EAAA;AAEVjC,IAAAA,MAAAA,CAAOkC,IAAI,CAAC,CAAC,aAAa,EAAEzB,kBAAY,CAACX,OAAMqC,CAAAA,SAAS,CAAE,CAAA,EAAE,CAAC,CAAA;AAC/D;AAEA,MAAMP,iBAAAA,GAAoB,OAAOR,QAAoBvB,EAAAA,OAAAA,GAAAA;AACnD,IAAA,IAAIA,QAAQe,MAAM,KAAKwB,iBAAmB,CAACC,MAAM,EAAE;QACjD,MAAMC,aAAc,CAAClB,QAAUvB,EAAAA,OAAAA,CAAAA;AACjC;AACF,CAAA;AAEA,MAAMgC,sBAAAA,GAAyB,CAACT,QAAoBvB,EAAAA,OAAAA,GAAAA;;;AAGlD,IAAA,IAAIA,QAAQe,MAAM,KAAKwB,iBAAmB,CAACG,KAAK,EAAE;AAChDnB,QAAAA,QAAAA,CACGoB,cAAc,CAACC,kCAA+C,CAC9DD,CAAAA,cAAc,CAACC,sCAAmD,CAAA;AACvE;;;AAIArB,IAAAA,QAAAA,CAASoB,cAAc,CAACC,kBAA+B,CAACC,UAAU,EAAA,CAAA;AACpE,CAAA;;;;"}
@@ -24,7 +24,7 @@ const upgrade = async (options)=>{
24
24
  throw new Error(`The "${options.target}" upgrade can only be run on a Strapi project; for plugins, please use "codemods".`);
25
25
  }
26
26
  logger.debug(`Application: VERSION=${version(project.packageJSON.version)}; STRAPI_VERSION=${version(project.strapiVersion)}`);
27
- const npmPackage = npmPackageFactory(STRAPI_PACKAGE_NAME);
27
+ const npmPackage = npmPackageFactory(STRAPI_PACKAGE_NAME, project.cwd, logger);
28
28
  // Load all available versions from the NPM registry
29
29
  await npmPackage.refresh();
30
30
  // Initialize the upgrade instance
@@ -1 +1 @@
1
- {"version":3,"file":"upgrade.mjs","sources":["../../../../src/tasks/upgrade/upgrade.ts"],"sourcesContent":["import path from 'node:path';\n\nimport * as f from '../../modules/format';\nimport { npmPackageFactory } from '../../modules/npm';\nimport { isApplicationProject, projectFactory } from '../../modules/project';\nimport { timerFactory } from '../../modules/timer';\nimport { constants as upgraderConstants, upgraderFactory } from '../../modules/upgrader';\nimport { Version } from '../../modules/version';\n\nimport * as requirements from './requirements';\nimport * as prompts from './prompts';\n\nimport type { UpgradeOptions } from './types';\nimport type { Upgrader } from '../../modules/upgrader';\n\nexport const upgrade = async (options: UpgradeOptions) => {\n const timer = timerFactory();\n const { logger, codemodsTarget } = options;\n\n // Resolves the correct working directory based on the given input\n const cwd = path.resolve(options.cwd ?? process.cwd());\n\n const project = projectFactory(cwd);\n\n logger.debug(f.projectDetails(project));\n\n if (!isApplicationProject(project)) {\n throw new Error(\n `The \"${options.target}\" upgrade can only be run on a Strapi project; for plugins, please use \"codemods\".`\n );\n }\n\n logger.debug(\n `Application: VERSION=${f.version(project.packageJSON.version as Version.LiteralVersion)}; STRAPI_VERSION=${f.version(project.strapiVersion)}`\n );\n\n const npmPackage = npmPackageFactory(upgraderConstants.STRAPI_PACKAGE_NAME);\n\n // Load all available versions from the NPM registry\n await npmPackage.refresh();\n\n // Initialize the upgrade instance\n // Throws during initialization if the provided target is incompatible with the current version\n const upgrader = upgraderFactory(project, options.target, npmPackage)\n .dry(options.dry ?? false)\n .onConfirm(options.confirm ?? null)\n .setLogger(logger);\n\n // Manually override the target version for codemods if it's explicitly provided\n if (codemodsTarget !== undefined) {\n upgrader.overrideCodemodsTarget(codemodsTarget);\n }\n\n // Prompt user for confirmation details before upgrading\n await runUpgradePrompts(upgrader, options);\n\n // Add specific requirements before upgrading\n addUpgradeRequirements(upgrader, options);\n\n // Actually run the upgrade process once configured,\n // The response contains information about the final status: success/error\n const upgradeReport = await upgrader.upgrade();\n\n if (!upgradeReport.success) {\n throw upgradeReport.error;\n }\n\n timer.stop();\n\n logger.info(`Completed in ${f.durationMs(timer.elapsedMs)}ms`);\n};\n\nconst runUpgradePrompts = async (upgrader: Upgrader, options: UpgradeOptions) => {\n if (options.target === Version.ReleaseType.Latest) {\n await prompts.latest(upgrader, options);\n }\n};\n\nconst addUpgradeRequirements = (upgrader: Upgrader, options: UpgradeOptions): void => {\n // Don't add the same requirements when manually targeting a major upgrade\n // using a semver as it's implied that the users know what they're doing\n if (options.target === Version.ReleaseType.Major) {\n upgrader\n .addRequirement(requirements.major.REQUIRE_AVAILABLE_NEXT_MAJOR)\n .addRequirement(requirements.major.REQUIRE_LATEST_FOR_CURRENT_MAJOR);\n }\n\n // Make sure the git repository is in an optimal state before running the upgrade\n // Mainly used to ease rollbacks in case the upgrade is corrupted\n upgrader.addRequirement(requirements.common.REQUIRE_GIT.asOptional());\n};\n"],"names":["upgrade","options","timer","timerFactory","logger","codemodsTarget","cwd","path","resolve","process","project","projectFactory","debug","f","isApplicationProject","Error","target","packageJSON","version","strapiVersion","npmPackage","npmPackageFactory","upgraderConstants","refresh","upgrader","upgraderFactory","dry","onConfirm","confirm","setLogger","undefined","overrideCodemodsTarget","runUpgradePrompts","addUpgradeRequirements","upgradeReport","success","error","stop","info","elapsedMs","Version","Latest","prompts","Major","addRequirement","requirements","asOptional"],"mappings":";;;;;;;;;;;;;;;AAeO,MAAMA,UAAU,OAAOC,OAAAA,GAAAA;AAC5B,IAAA,MAAMC,KAAQC,GAAAA,YAAAA,EAAAA;AACd,IAAA,MAAM,EAAEC,MAAM,EAAEC,cAAc,EAAE,GAAGJ,OAAAA;;IAGnC,MAAMK,GAAAA,GAAMC,KAAKC,OAAO,CAACP,QAAQK,GAAG,IAAIG,QAAQH,GAAG,EAAA,CAAA;AAEnD,IAAA,MAAMI,UAAUC,cAAeL,CAAAA,GAAAA,CAAAA;AAE/BF,IAAAA,MAAAA,CAAOQ,KAAK,CAACC,cAAgB,CAACH,OAAAA,CAAAA,CAAAA;IAE9B,IAAI,CAACI,qBAAqBJ,OAAU,CAAA,EAAA;QAClC,MAAM,IAAIK,MACR,CAAC,KAAK,EAAEd,OAAQe,CAAAA,MAAM,CAAC,kFAAkF,CAAC,CAAA;AAE9G;IAEAZ,MAAOQ,CAAAA,KAAK,CACV,CAAC,qBAAqB,EAAEC,OAAS,CAACH,OAAQO,CAAAA,WAAW,CAACC,OAAO,CAAA,CAA4B,iBAAiB,EAAEL,OAAS,CAACH,OAAAA,CAAQS,aAAa,CAAG,CAAA,CAAA,CAAA;IAGhJ,MAAMC,UAAAA,GAAaC,iBAAkBC,CAAAA,mBAAqC,CAAA;;AAG1E,IAAA,MAAMF,WAAWG,OAAO,EAAA;;;IAIxB,MAAMC,QAAAA,GAAWC,gBAAgBf,OAAST,EAAAA,OAAAA,CAAQe,MAAM,EAAEI,UAAAA,CAAAA,CACvDM,GAAG,CAACzB,OAAAA,CAAQyB,GAAG,IAAI,KAAA,CAAA,CACnBC,SAAS,CAAC1B,OAAAA,CAAQ2B,OAAO,IAAI,IAAA,CAAA,CAC7BC,SAAS,CAACzB,MAAAA,CAAAA;;AAGb,IAAA,IAAIC,mBAAmByB,SAAW,EAAA;AAChCN,QAAAA,QAAAA,CAASO,sBAAsB,CAAC1B,cAAAA,CAAAA;AAClC;;AAGA,IAAA,MAAM2B,kBAAkBR,QAAUvB,EAAAA,OAAAA,CAAAA;;AAGlCgC,IAAAA,sBAAAA,CAAuBT,QAAUvB,EAAAA,OAAAA,CAAAA;;;IAIjC,MAAMiC,aAAAA,GAAgB,MAAMV,QAAAA,CAASxB,OAAO,EAAA;IAE5C,IAAI,CAACkC,aAAcC,CAAAA,OAAO,EAAE;AAC1B,QAAA,MAAMD,cAAcE,KAAK;AAC3B;AAEAlC,IAAAA,KAAAA,CAAMmC,IAAI,EAAA;AAEVjC,IAAAA,MAAAA,CAAOkC,IAAI,CAAC,CAAC,aAAa,EAAEzB,UAAY,CAACX,KAAMqC,CAAAA,SAAS,CAAE,CAAA,EAAE,CAAC,CAAA;AAC/D;AAEA,MAAMP,iBAAAA,GAAoB,OAAOR,QAAoBvB,EAAAA,OAAAA,GAAAA;AACnD,IAAA,IAAIA,QAAQe,MAAM,KAAKwB,WAAmB,CAACC,MAAM,EAAE;QACjD,MAAMC,MAAc,CAAClB,QAAUvB,EAAAA,OAAAA,CAAAA;AACjC;AACF,CAAA;AAEA,MAAMgC,sBAAAA,GAAyB,CAACT,QAAoBvB,EAAAA,OAAAA,GAAAA;;;AAGlD,IAAA,IAAIA,QAAQe,MAAM,KAAKwB,WAAmB,CAACG,KAAK,EAAE;AAChDnB,QAAAA,QAAAA,CACGoB,cAAc,CAACC,4BAA+C,CAC9DD,CAAAA,cAAc,CAACC,gCAAmD,CAAA;AACvE;;;AAIArB,IAAAA,QAAAA,CAASoB,cAAc,CAACC,WAA+B,CAACC,UAAU,EAAA,CAAA;AACpE,CAAA;;;;"}
1
+ {"version":3,"file":"upgrade.mjs","sources":["../../../../src/tasks/upgrade/upgrade.ts"],"sourcesContent":["import path from 'node:path';\n\nimport * as f from '../../modules/format';\nimport { npmPackageFactory } from '../../modules/npm';\nimport { isApplicationProject, projectFactory } from '../../modules/project';\nimport { timerFactory } from '../../modules/timer';\nimport { constants as upgraderConstants, upgraderFactory } from '../../modules/upgrader';\nimport { Version } from '../../modules/version';\n\nimport * as requirements from './requirements';\nimport * as prompts from './prompts';\n\nimport type { UpgradeOptions } from './types';\nimport type { Upgrader } from '../../modules/upgrader';\n\nexport const upgrade = async (options: UpgradeOptions) => {\n const timer = timerFactory();\n const { logger, codemodsTarget } = options;\n\n // Resolves the correct working directory based on the given input\n const cwd = path.resolve(options.cwd ?? process.cwd());\n\n const project = projectFactory(cwd);\n\n logger.debug(f.projectDetails(project));\n\n if (!isApplicationProject(project)) {\n throw new Error(\n `The \"${options.target}\" upgrade can only be run on a Strapi project; for plugins, please use \"codemods\".`\n );\n }\n\n logger.debug(\n `Application: VERSION=${f.version(project.packageJSON.version as Version.LiteralVersion)}; STRAPI_VERSION=${f.version(project.strapiVersion)}`\n );\n\n const npmPackage = npmPackageFactory(upgraderConstants.STRAPI_PACKAGE_NAME, project.cwd, logger);\n\n // Load all available versions from the NPM registry\n await npmPackage.refresh();\n\n // Initialize the upgrade instance\n // Throws during initialization if the provided target is incompatible with the current version\n const upgrader = upgraderFactory(project, options.target, npmPackage)\n .dry(options.dry ?? false)\n .onConfirm(options.confirm ?? null)\n .setLogger(logger);\n\n // Manually override the target version for codemods if it's explicitly provided\n if (codemodsTarget !== undefined) {\n upgrader.overrideCodemodsTarget(codemodsTarget);\n }\n\n // Prompt user for confirmation details before upgrading\n await runUpgradePrompts(upgrader, options);\n\n // Add specific requirements before upgrading\n addUpgradeRequirements(upgrader, options);\n\n // Actually run the upgrade process once configured,\n // The response contains information about the final status: success/error\n const upgradeReport = await upgrader.upgrade();\n\n if (!upgradeReport.success) {\n throw upgradeReport.error;\n }\n\n timer.stop();\n\n logger.info(`Completed in ${f.durationMs(timer.elapsedMs)}ms`);\n};\n\nconst runUpgradePrompts = async (upgrader: Upgrader, options: UpgradeOptions) => {\n if (options.target === Version.ReleaseType.Latest) {\n await prompts.latest(upgrader, options);\n }\n};\n\nconst addUpgradeRequirements = (upgrader: Upgrader, options: UpgradeOptions): void => {\n // Don't add the same requirements when manually targeting a major upgrade\n // using a semver as it's implied that the users know what they're doing\n if (options.target === Version.ReleaseType.Major) {\n upgrader\n .addRequirement(requirements.major.REQUIRE_AVAILABLE_NEXT_MAJOR)\n .addRequirement(requirements.major.REQUIRE_LATEST_FOR_CURRENT_MAJOR);\n }\n\n // Make sure the git repository is in an optimal state before running the upgrade\n // Mainly used to ease rollbacks in case the upgrade is corrupted\n upgrader.addRequirement(requirements.common.REQUIRE_GIT.asOptional());\n};\n"],"names":["upgrade","options","timer","timerFactory","logger","codemodsTarget","cwd","path","resolve","process","project","projectFactory","debug","f","isApplicationProject","Error","target","packageJSON","version","strapiVersion","npmPackage","npmPackageFactory","upgraderConstants","refresh","upgrader","upgraderFactory","dry","onConfirm","confirm","setLogger","undefined","overrideCodemodsTarget","runUpgradePrompts","addUpgradeRequirements","upgradeReport","success","error","stop","info","elapsedMs","Version","Latest","prompts","Major","addRequirement","requirements","asOptional"],"mappings":";;;;;;;;;;;;;;;AAeO,MAAMA,UAAU,OAAOC,OAAAA,GAAAA;AAC5B,IAAA,MAAMC,KAAQC,GAAAA,YAAAA,EAAAA;AACd,IAAA,MAAM,EAAEC,MAAM,EAAEC,cAAc,EAAE,GAAGJ,OAAAA;;IAGnC,MAAMK,GAAAA,GAAMC,KAAKC,OAAO,CAACP,QAAQK,GAAG,IAAIG,QAAQH,GAAG,EAAA,CAAA;AAEnD,IAAA,MAAMI,UAAUC,cAAeL,CAAAA,GAAAA,CAAAA;AAE/BF,IAAAA,MAAAA,CAAOQ,KAAK,CAACC,cAAgB,CAACH,OAAAA,CAAAA,CAAAA;IAE9B,IAAI,CAACI,qBAAqBJ,OAAU,CAAA,EAAA;QAClC,MAAM,IAAIK,MACR,CAAC,KAAK,EAAEd,OAAQe,CAAAA,MAAM,CAAC,kFAAkF,CAAC,CAAA;AAE9G;IAEAZ,MAAOQ,CAAAA,KAAK,CACV,CAAC,qBAAqB,EAAEC,OAAS,CAACH,OAAQO,CAAAA,WAAW,CAACC,OAAO,CAAA,CAA4B,iBAAiB,EAAEL,OAAS,CAACH,OAAAA,CAAQS,aAAa,CAAG,CAAA,CAAA,CAAA;AAGhJ,IAAA,MAAMC,aAAaC,iBAAkBC,CAAAA,mBAAqC,EAAEZ,OAAAA,CAAQJ,GAAG,EAAEF,MAAAA,CAAAA;;AAGzF,IAAA,MAAMgB,WAAWG,OAAO,EAAA;;;IAIxB,MAAMC,QAAAA,GAAWC,gBAAgBf,OAAST,EAAAA,OAAAA,CAAQe,MAAM,EAAEI,UAAAA,CAAAA,CACvDM,GAAG,CAACzB,OAAAA,CAAQyB,GAAG,IAAI,KAAA,CAAA,CACnBC,SAAS,CAAC1B,OAAAA,CAAQ2B,OAAO,IAAI,IAAA,CAAA,CAC7BC,SAAS,CAACzB,MAAAA,CAAAA;;AAGb,IAAA,IAAIC,mBAAmByB,SAAW,EAAA;AAChCN,QAAAA,QAAAA,CAASO,sBAAsB,CAAC1B,cAAAA,CAAAA;AAClC;;AAGA,IAAA,MAAM2B,kBAAkBR,QAAUvB,EAAAA,OAAAA,CAAAA;;AAGlCgC,IAAAA,sBAAAA,CAAuBT,QAAUvB,EAAAA,OAAAA,CAAAA;;;IAIjC,MAAMiC,aAAAA,GAAgB,MAAMV,QAAAA,CAASxB,OAAO,EAAA;IAE5C,IAAI,CAACkC,aAAcC,CAAAA,OAAO,EAAE;AAC1B,QAAA,MAAMD,cAAcE,KAAK;AAC3B;AAEAlC,IAAAA,KAAAA,CAAMmC,IAAI,EAAA;AAEVjC,IAAAA,MAAAA,CAAOkC,IAAI,CAAC,CAAC,aAAa,EAAEzB,UAAY,CAACX,KAAMqC,CAAAA,SAAS,CAAE,CAAA,EAAE,CAAC,CAAA;AAC/D;AAEA,MAAMP,iBAAAA,GAAoB,OAAOR,QAAoBvB,EAAAA,OAAAA,GAAAA;AACnD,IAAA,IAAIA,QAAQe,MAAM,KAAKwB,WAAmB,CAACC,MAAM,EAAE;QACjD,MAAMC,MAAc,CAAClB,QAAUvB,EAAAA,OAAAA,CAAAA;AACjC;AACF,CAAA;AAEA,MAAMgC,sBAAAA,GAAyB,CAACT,QAAoBvB,EAAAA,OAAAA,GAAAA;;;AAGlD,IAAA,IAAIA,QAAQe,MAAM,KAAKwB,WAAmB,CAACG,KAAK,EAAE;AAChDnB,QAAAA,QAAAA,CACGoB,cAAc,CAACC,4BAA+C,CAC9DD,CAAAA,cAAc,CAACC,gCAAmD,CAAA;AACvE;;;AAIArB,IAAAA,QAAAA,CAASoB,cAAc,CAACC,WAA+B,CAACC,UAAU,EAAA,CAAA;AACpE,CAAA;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strapi/upgrade",
3
- "version": "5.30.1",
3
+ "version": "5.31.1",
4
4
  "description": "CLI to upgrade Strapi applications effortless",
5
5
  "keywords": [
6
6
  "strapi",
@@ -61,11 +61,12 @@
61
61
  "watch": "run -T rollup -c -w"
62
62
  },
63
63
  "dependencies": {
64
- "@strapi/utils": "5.30.1",
64
+ "@strapi/utils": "5.31.1",
65
65
  "chalk": "4.1.2",
66
66
  "cli-table3": "0.6.2",
67
67
  "commander": "8.3.0",
68
68
  "esbuild-register": "3.5.0",
69
+ "execa": "5.1.1",
69
70
  "fast-glob": "3.3.2",
70
71
  "fs-extra": "11.2.0",
71
72
  "jscodeshift": "17.1.2",
@@ -78,14 +79,14 @@
78
79
  "undici": "6.21.2"
79
80
  },
80
81
  "devDependencies": {
81
- "@strapi/types": "5.30.1",
82
+ "@strapi/types": "5.31.1",
82
83
  "@types/fs-extra": "11.0.4",
83
84
  "@types/jscodeshift": "0.12.0",
84
- "eslint-config-custom": "5.30.1",
85
+ "eslint-config-custom": "5.31.1",
85
86
  "rimraf": "5.0.5"
86
87
  },
87
88
  "engines": {
88
- "node": ">=18.0.0 <=22.x.x",
89
+ "node": ">=20.0.0 <=24.x.x",
89
90
  "npm": ">=6.0.0"
90
91
  }
91
92
  }