@strapi/upgrade 5.48.0 → 5.49.0

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 (49) hide show
  1. package/dist/cli.js +6 -1
  2. package/dist/cli.js.map +1 -1
  3. package/dist/modules/upgrader/upgrader.d.ts +6 -0
  4. package/dist/modules/upgrader/upgrader.d.ts.map +1 -1
  5. package/dist/package.json.js +1 -1
  6. package/dist/package.json.mjs +1 -1
  7. package/dist/src/cli/commands/codemods.js +6 -1
  8. package/dist/src/cli/commands/codemods.js.map +1 -1
  9. package/dist/src/cli/commands/codemods.mjs +1 -0
  10. package/dist/src/cli/commands/codemods.mjs.map +1 -1
  11. package/dist/src/cli/commands/upgrade.js +5 -1
  12. package/dist/src/cli/commands/upgrade.js.map +1 -1
  13. package/dist/src/cli/errors.js +5 -1
  14. package/dist/src/cli/errors.js.map +1 -1
  15. package/dist/src/modules/codemod/codemod.js +5 -1
  16. package/dist/src/modules/codemod/codemod.js.map +1 -1
  17. package/dist/src/modules/codemod-repository/constants.js +5 -1
  18. package/dist/src/modules/codemod-repository/constants.js.map +1 -1
  19. package/dist/src/modules/codemod-repository/repository.js +18 -11
  20. package/dist/src/modules/codemod-repository/repository.js.map +1 -1
  21. package/dist/src/modules/file-scanner/scanner.js +7 -2
  22. package/dist/src/modules/file-scanner/scanner.js.map +1 -1
  23. package/dist/src/modules/format/formats.js +38 -33
  24. package/dist/src/modules/format/formats.js.map +1 -1
  25. package/dist/src/modules/json/file.js +6 -2
  26. package/dist/src/modules/json/file.js.map +1 -1
  27. package/dist/src/modules/logger/logger.js +8 -4
  28. package/dist/src/modules/logger/logger.js.map +1 -1
  29. package/dist/src/modules/npm/package.js +12 -6
  30. package/dist/src/modules/npm/package.js.map +1 -1
  31. package/dist/src/modules/project/project.js +19 -12
  32. package/dist/src/modules/project/project.js.map +1 -1
  33. package/dist/src/modules/runner/json/transform.js +6 -2
  34. package/dist/src/modules/runner/json/transform.js.map +1 -1
  35. package/dist/src/modules/upgrader/upgrader.js +46 -5
  36. package/dist/src/modules/upgrader/upgrader.js.map +1 -1
  37. package/dist/src/modules/upgrader/upgrader.mjs +36 -1
  38. package/dist/src/modules/upgrader/upgrader.mjs.map +1 -1
  39. package/dist/src/modules/version/range.js +7 -3
  40. package/dist/src/modules/version/range.js.map +1 -1
  41. package/dist/src/modules/version/semver.js +7 -3
  42. package/dist/src/modules/version/semver.js.map +1 -1
  43. package/dist/src/tasks/codemods/utils.js +5 -1
  44. package/dist/src/tasks/codemods/utils.js.map +1 -1
  45. package/dist/src/tasks/upgrade/requirements/common.js +7 -3
  46. package/dist/src/tasks/upgrade/requirements/common.js.map +1 -1
  47. package/dist/src/tasks/upgrade/upgrade.js +5 -1
  48. package/dist/src/tasks/upgrade/upgrade.js.map +1 -1
  49. package/package.json +6 -6
@@ -4,32 +4,37 @@ var CliTable3 = require('cli-table3');
4
4
  var chalk = require('chalk');
5
5
  var constants = require('../timer/constants.js');
6
6
 
7
- const path = (path)=>chalk.blue(path);
7
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
8
+
9
+ var CliTable3__default = /*#__PURE__*/_interopDefault(CliTable3);
10
+ var chalk__default = /*#__PURE__*/_interopDefault(chalk);
11
+
12
+ const path = (path)=>chalk__default.default.blue(path);
8
13
  const version = (version)=>{
9
- return chalk.italic.yellow(`v${version}`);
14
+ return chalk__default.default.italic.yellow(`v${version}`);
10
15
  };
11
16
  const codemodUID = (uid)=>{
12
- return chalk.bold.cyan(uid);
17
+ return chalk__default.default.bold.cyan(uid);
13
18
  };
14
19
  const projectDetails = (project)=>{
15
20
  return `Project: TYPE=${projectType(project.type)}; CWD=${path(project.cwd)}; PATHS=${project.paths.map(path)}`;
16
21
  };
17
- const projectType = (type)=>chalk.cyan(type);
18
- const versionRange = (range)=>chalk.italic.yellow(range.raw);
19
- const transform = (transformFilePath)=>chalk.cyan(transformFilePath);
20
- const highlight = (arg)=>chalk.bold.underline(arg);
22
+ const projectType = (type)=>chalk__default.default.cyan(type);
23
+ const versionRange = (range)=>chalk__default.default.italic.yellow(range.raw);
24
+ const transform = (transformFilePath)=>chalk__default.default.cyan(transformFilePath);
25
+ const highlight = (arg)=>chalk__default.default.bold.underline(arg);
21
26
  const upgradeStep = (text, step)=>{
22
- return chalk.bold(`(${step[0]}/${step[1]}) ${text}...`);
27
+ return chalk__default.default.bold(`(${step[0]}/${step[1]}) ${text}...`);
23
28
  };
24
29
  const reports = (reports)=>{
25
30
  const rows = reports.map(({ codemod, report }, i)=>{
26
- const fIndex = chalk.grey(i);
27
- const fVersion = chalk.magenta(codemod.version);
28
- const fKind = chalk.yellow(codemod.kind);
29
- const fFormattedTransformPath = chalk.cyan(codemod.format());
30
- const fTimeElapsed = i === 0 ? `${report.timeElapsed}s ${chalk.dim.italic('(cold start)')}` : `${report.timeElapsed}s`;
31
- const fAffected = report.ok > 0 ? chalk.green(report.ok) : chalk.grey(0);
32
- const fUnchanged = report.ok === 0 ? chalk.red(report.nochange) : chalk.grey(report.nochange);
31
+ const fIndex = chalk__default.default.grey(i);
32
+ const fVersion = chalk__default.default.magenta(codemod.version);
33
+ const fKind = chalk__default.default.yellow(codemod.kind);
34
+ const fFormattedTransformPath = chalk__default.default.cyan(codemod.format());
35
+ const fTimeElapsed = i === 0 ? `${report.timeElapsed}s ${chalk__default.default.dim.italic('(cold start)')}` : `${report.timeElapsed}s`;
36
+ const fAffected = report.ok > 0 ? chalk__default.default.green(report.ok) : chalk__default.default.grey(0);
37
+ const fUnchanged = report.ok === 0 ? chalk__default.default.red(report.nochange) : chalk__default.default.grey(report.nochange);
33
38
  return [
34
39
  fIndex,
35
40
  fVersion,
@@ -40,18 +45,18 @@ const reports = (reports)=>{
40
45
  fTimeElapsed
41
46
  ];
42
47
  });
43
- const table = new CliTable3({
48
+ const table = new CliTable3__default.default({
44
49
  style: {
45
50
  compact: true
46
51
  },
47
52
  head: [
48
- chalk.bold.grey('N°'),
49
- chalk.bold.magenta('Version'),
50
- chalk.bold.yellow('Kind'),
51
- chalk.bold.cyan('Name'),
52
- chalk.bold.green('Affected'),
53
- chalk.bold.red('Unchanged'),
54
- chalk.bold.blue('Duration')
53
+ chalk__default.default.bold.grey('N°'),
54
+ chalk__default.default.bold.magenta('Version'),
55
+ chalk__default.default.bold.yellow('Kind'),
56
+ chalk__default.default.bold.cyan('Name'),
57
+ chalk__default.default.bold.green('Affected'),
58
+ chalk__default.default.bold.red('Unchanged'),
59
+ chalk__default.default.bold.blue('Duration')
55
60
  ]
56
61
  });
57
62
  table.push(...rows);
@@ -59,10 +64,10 @@ const reports = (reports)=>{
59
64
  };
60
65
  const codemodList = (codemods)=>{
61
66
  const rows = codemods.map((codemod, index)=>{
62
- const fIndex = chalk.grey(index);
63
- const fVersion = chalk.magenta(codemod.version);
64
- const fKind = chalk.yellow(codemod.kind);
65
- const fName = chalk.blue(codemod.format());
67
+ const fIndex = chalk__default.default.grey(index);
68
+ const fVersion = chalk__default.default.magenta(codemod.version);
69
+ const fKind = chalk__default.default.yellow(codemod.kind);
70
+ const fName = chalk__default.default.blue(codemod.format());
66
71
  const fUID = codemodUID(codemod.uid);
67
72
  return [
68
73
  fIndex,
@@ -72,16 +77,16 @@ const codemodList = (codemods)=>{
72
77
  fUID
73
78
  ];
74
79
  });
75
- const table = new CliTable3({
80
+ const table = new CliTable3__default.default({
76
81
  style: {
77
82
  compact: true
78
83
  },
79
84
  head: [
80
- chalk.bold.grey('N°'),
81
- chalk.bold.magenta('Version'),
82
- chalk.bold.yellow('Kind'),
83
- chalk.bold.blue('Name'),
84
- chalk.bold.cyan('UID')
85
+ chalk__default.default.bold.grey('N°'),
86
+ chalk__default.default.bold.magenta('Version'),
87
+ chalk__default.default.bold.yellow('Kind'),
88
+ chalk__default.default.bold.blue('Name'),
89
+ chalk__default.default.bold.cyan('UID')
85
90
  ]
86
91
  });
87
92
  table.push(...rows);
@@ -1 +1 @@
1
- {"version":3,"file":"formats.js","sources":["../../../../src/modules/format/formats.ts"],"sourcesContent":["import CliTable3 from 'cli-table3';\nimport chalk from 'chalk';\n\nimport { constants as timerConstants } from '../timer';\n\nimport type { AppProject, PluginProject, ProjectType } from '../project';\nimport type { Codemod } from '../codemod';\nimport type { Version } from '../version';\nimport type { Report } from '../report';\n\nexport const path = (path: string) => chalk.blue(path);\n\nexport const version = (version: Version.LiteralVersion | Version.SemVer) => {\n return chalk.italic.yellow(`v${version}`);\n};\n\nexport const codemodUID = (uid: string) => {\n return chalk.bold.cyan(uid);\n};\n\nexport const projectDetails = (project: AppProject | PluginProject) => {\n return `Project: TYPE=${projectType(project.type)}; CWD=${path(project.cwd)}; PATHS=${project.paths.map(path)}`;\n};\n\nexport const projectType = (type: ProjectType) => chalk.cyan(type);\n\nexport const versionRange = (range: Version.Range) => chalk.italic.yellow(range.raw);\n\nexport const transform = (transformFilePath: string) => chalk.cyan(transformFilePath);\n\nexport const highlight = (arg: unknown) => chalk.bold.underline(arg);\n\nexport const upgradeStep = (text: string, step: [current: number, total: number]) => {\n return chalk.bold(`(${step[0]}/${step[1]}) ${text}...`);\n};\n\nexport const reports = (reports: Report.CodemodReport[]) => {\n const rows = reports.map(({ codemod, report }, i) => {\n const fIndex = chalk.grey(i);\n const fVersion = chalk.magenta(codemod.version);\n const fKind = chalk.yellow(codemod.kind);\n const fFormattedTransformPath = chalk.cyan(codemod.format());\n const fTimeElapsed =\n i === 0\n ? `${report.timeElapsed}s ${chalk.dim.italic('(cold start)')}`\n : `${report.timeElapsed}s`;\n const fAffected = report.ok > 0 ? chalk.green(report.ok) : chalk.grey(0);\n const fUnchanged = report.ok === 0 ? chalk.red(report.nochange) : chalk.grey(report.nochange);\n\n return [fIndex, fVersion, fKind, fFormattedTransformPath, fAffected, fUnchanged, fTimeElapsed];\n });\n\n const table = new CliTable3({\n style: { compact: true },\n head: [\n chalk.bold.grey('N°'),\n chalk.bold.magenta('Version'),\n chalk.bold.yellow('Kind'),\n chalk.bold.cyan('Name'),\n chalk.bold.green('Affected'),\n chalk.bold.red('Unchanged'),\n chalk.bold.blue('Duration'),\n ],\n });\n\n table.push(...rows);\n\n return table.toString();\n};\n\nexport const codemodList = (codemods: Codemod.List) => {\n type Row = [index: string, version: string, kind: string, name: string, uid: string];\n\n const rows = codemods.map<Row>((codemod, index) => {\n const fIndex = chalk.grey(index);\n const fVersion = chalk.magenta(codemod.version);\n const fKind = chalk.yellow(codemod.kind);\n const fName = chalk.blue(codemod.format());\n const fUID = codemodUID(codemod.uid);\n\n return [fIndex, fVersion, fKind, fName, fUID] satisfies Row;\n });\n\n const table = new CliTable3({\n style: { compact: true },\n head: [\n chalk.bold.grey('N°'),\n chalk.bold.magenta('Version'),\n chalk.bold.yellow('Kind'),\n chalk.bold.blue('Name'),\n chalk.bold.cyan('UID'),\n ],\n });\n\n table.push(...rows);\n\n return table.toString();\n};\n\nexport const durationMs = (elapsedMs: number) => {\n const elapsedSeconds = (elapsedMs / timerConstants.ONE_SECOND_MS).toFixed(3);\n\n return `${elapsedSeconds}s`;\n};\n"],"names":["path","chalk","blue","version","italic","yellow","codemodUID","uid","bold","cyan","projectDetails","project","projectType","type","cwd","paths","map","versionRange","range","raw","transform","transformFilePath","highlight","arg","underline","upgradeStep","text","step","reports","rows","codemod","report","i","fIndex","grey","fVersion","magenta","fKind","kind","fFormattedTransformPath","format","fTimeElapsed","timeElapsed","dim","fAffected","ok","green","fUnchanged","red","nochange","table","CliTable3","style","compact","head","push","toString","codemodList","codemods","index","fName","fUID","durationMs","elapsedMs","elapsedSeconds","timerConstants","toFixed"],"mappings":"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"}
1
+ {"version":3,"file":"formats.js","sources":["../../../../src/modules/format/formats.ts"],"sourcesContent":["import CliTable3 from 'cli-table3';\nimport chalk from 'chalk';\n\nimport { constants as timerConstants } from '../timer';\n\nimport type { AppProject, PluginProject, ProjectType } from '../project';\nimport type { Codemod } from '../codemod';\nimport type { Version } from '../version';\nimport type { Report } from '../report';\n\nexport const path = (path: string) => chalk.blue(path);\n\nexport const version = (version: Version.LiteralVersion | Version.SemVer) => {\n return chalk.italic.yellow(`v${version}`);\n};\n\nexport const codemodUID = (uid: string) => {\n return chalk.bold.cyan(uid);\n};\n\nexport const projectDetails = (project: AppProject | PluginProject) => {\n return `Project: TYPE=${projectType(project.type)}; CWD=${path(project.cwd)}; PATHS=${project.paths.map(path)}`;\n};\n\nexport const projectType = (type: ProjectType) => chalk.cyan(type);\n\nexport const versionRange = (range: Version.Range) => chalk.italic.yellow(range.raw);\n\nexport const transform = (transformFilePath: string) => chalk.cyan(transformFilePath);\n\nexport const highlight = (arg: unknown) => chalk.bold.underline(arg);\n\nexport const upgradeStep = (text: string, step: [current: number, total: number]) => {\n return chalk.bold(`(${step[0]}/${step[1]}) ${text}...`);\n};\n\nexport const reports = (reports: Report.CodemodReport[]) => {\n const rows = reports.map(({ codemod, report }, i) => {\n const fIndex = chalk.grey(i);\n const fVersion = chalk.magenta(codemod.version);\n const fKind = chalk.yellow(codemod.kind);\n const fFormattedTransformPath = chalk.cyan(codemod.format());\n const fTimeElapsed =\n i === 0\n ? `${report.timeElapsed}s ${chalk.dim.italic('(cold start)')}`\n : `${report.timeElapsed}s`;\n const fAffected = report.ok > 0 ? chalk.green(report.ok) : chalk.grey(0);\n const fUnchanged = report.ok === 0 ? chalk.red(report.nochange) : chalk.grey(report.nochange);\n\n return [fIndex, fVersion, fKind, fFormattedTransformPath, fAffected, fUnchanged, fTimeElapsed];\n });\n\n const table = new CliTable3({\n style: { compact: true },\n head: [\n chalk.bold.grey('N°'),\n chalk.bold.magenta('Version'),\n chalk.bold.yellow('Kind'),\n chalk.bold.cyan('Name'),\n chalk.bold.green('Affected'),\n chalk.bold.red('Unchanged'),\n chalk.bold.blue('Duration'),\n ],\n });\n\n table.push(...rows);\n\n return table.toString();\n};\n\nexport const codemodList = (codemods: Codemod.List) => {\n type Row = [index: string, version: string, kind: string, name: string, uid: string];\n\n const rows = codemods.map<Row>((codemod, index) => {\n const fIndex = chalk.grey(index);\n const fVersion = chalk.magenta(codemod.version);\n const fKind = chalk.yellow(codemod.kind);\n const fName = chalk.blue(codemod.format());\n const fUID = codemodUID(codemod.uid);\n\n return [fIndex, fVersion, fKind, fName, fUID] satisfies Row;\n });\n\n const table = new CliTable3({\n style: { compact: true },\n head: [\n chalk.bold.grey('N°'),\n chalk.bold.magenta('Version'),\n chalk.bold.yellow('Kind'),\n chalk.bold.blue('Name'),\n chalk.bold.cyan('UID'),\n ],\n });\n\n table.push(...rows);\n\n return table.toString();\n};\n\nexport const durationMs = (elapsedMs: number) => {\n const elapsedSeconds = (elapsedMs / timerConstants.ONE_SECOND_MS).toFixed(3);\n\n return `${elapsedSeconds}s`;\n};\n"],"names":["path","chalk","blue","version","italic","yellow","codemodUID","uid","bold","cyan","projectDetails","project","projectType","type","cwd","paths","map","versionRange","range","raw","transform","transformFilePath","highlight","arg","underline","upgradeStep","text","step","reports","rows","codemod","report","i","fIndex","grey","fVersion","magenta","fKind","kind","fFormattedTransformPath","format","fTimeElapsed","timeElapsed","dim","fAffected","ok","green","fUnchanged","red","nochange","table","CliTable3","style","compact","head","push","toString","codemodList","codemods","index","fName","fUID","durationMs","elapsedMs","elapsedSeconds","timerConstants","toFixed"],"mappings":"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"}
@@ -2,13 +2,17 @@
2
2
 
3
3
  var fse = require('fs-extra');
4
4
 
5
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
6
+
7
+ var fse__default = /*#__PURE__*/_interopDefault(fse);
8
+
5
9
  const readJSON = async (path)=>{
6
- const buffer = await fse.readFile(path);
10
+ const buffer = await fse__default.default.readFile(path);
7
11
  return JSON.parse(buffer.toString());
8
12
  };
9
13
  const saveJSON = async (path, json)=>{
10
14
  const jsonAsString = `${JSON.stringify(json, null, 2)}\n`;
11
- await fse.writeFile(path, jsonAsString);
15
+ await fse__default.default.writeFile(path, jsonAsString);
12
16
  };
13
17
 
14
18
  exports.readJSON = readJSON;
@@ -1 +1 @@
1
- {"version":3,"file":"file.js","sources":["../../../../src/modules/json/file.ts"],"sourcesContent":["import fse from 'fs-extra';\n\nimport type { Utils } from '@strapi/types';\n\nexport const readJSON = async (path: string): Promise<Utils.JSONValue> => {\n const buffer = await fse.readFile(path);\n\n return JSON.parse(buffer.toString());\n};\n\nexport const saveJSON = async (path: string, json: Utils.JSONValue): Promise<void> => {\n const jsonAsString = `${JSON.stringify(json, null, 2)}\\n`;\n\n await fse.writeFile(path, jsonAsString);\n};\n"],"names":["readJSON","path","buffer","fse","readFile","JSON","parse","toString","saveJSON","json","jsonAsString","stringify","writeFile"],"mappings":";;;;AAIO,MAAMA,WAAW,OAAOC,IAAAA,GAAAA;AAC7B,IAAA,MAAMC,MAAAA,GAAS,MAAMC,GAAAA,CAAIC,QAAQ,CAACH,IAAAA,CAAAA;AAElC,IAAA,OAAOI,IAAAA,CAAKC,KAAK,CAACJ,MAAAA,CAAOK,QAAQ,EAAA,CAAA;AACnC;AAEO,MAAMC,QAAAA,GAAW,OAAOP,IAAAA,EAAcQ,IAAAA,GAAAA;IAC3C,MAAMC,YAAAA,GAAe,GAAGL,IAAAA,CAAKM,SAAS,CAACF,IAAAA,EAAM,IAAA,EAAM,CAAA,CAAA,CAAG,EAAE,CAAC;IAEzD,MAAMN,GAAAA,CAAIS,SAAS,CAACX,IAAAA,EAAMS,YAAAA,CAAAA;AAC5B;;;;;"}
1
+ {"version":3,"file":"file.js","sources":["../../../../src/modules/json/file.ts"],"sourcesContent":["import fse from 'fs-extra';\n\nimport type { Utils } from '@strapi/types';\n\nexport const readJSON = async (path: string): Promise<Utils.JSONValue> => {\n const buffer = await fse.readFile(path);\n\n return JSON.parse(buffer.toString());\n};\n\nexport const saveJSON = async (path: string, json: Utils.JSONValue): Promise<void> => {\n const jsonAsString = `${JSON.stringify(json, null, 2)}\\n`;\n\n await fse.writeFile(path, jsonAsString);\n};\n"],"names":["readJSON","path","buffer","fse","readFile","JSON","parse","toString","saveJSON","json","jsonAsString","stringify","writeFile"],"mappings":";;;;;;;;AAIO,MAAMA,WAAW,OAAOC,IAAAA,GAAAA;AAC7B,IAAA,MAAMC,MAAAA,GAAS,MAAMC,oBAAAA,CAAIC,QAAQ,CAACH,IAAAA,CAAAA;AAElC,IAAA,OAAOI,IAAAA,CAAKC,KAAK,CAACJ,MAAAA,CAAOK,QAAQ,EAAA,CAAA;AACnC;AAEO,MAAMC,QAAAA,GAAW,OAAOP,IAAAA,EAAcQ,IAAAA,GAAAA;IAC3C,MAAMC,YAAAA,GAAe,GAAGL,IAAAA,CAAKM,SAAS,CAACF,IAAAA,EAAM,IAAA,EAAM,CAAA,CAAA,CAAG,EAAE,CAAC;IAEzD,MAAMN,oBAAAA,CAAIS,SAAS,CAACX,IAAAA,EAAMS,YAAAA,CAAAA;AAC5B;;;;;"}
@@ -2,6 +2,10 @@
2
2
 
3
3
  var chalk = require('chalk');
4
4
 
5
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
6
+
7
+ var chalk__default = /*#__PURE__*/_interopDefault(chalk);
8
+
5
9
  class Logger {
6
10
  get isNotSilent() {
7
11
  return !this.isSilent;
@@ -29,20 +33,20 @@ class Logger {
29
33
  debug(...args) {
30
34
  const isDebugEnabled = this.isNotSilent && this.isDebug;
31
35
  if (isDebugEnabled) {
32
- console.log(chalk.cyan(`[DEBUG]\t[${nowAsISO()}]`), ...args);
36
+ console.log(chalk__default.default.cyan(`[DEBUG]\t[${nowAsISO()}]`), ...args);
33
37
  }
34
38
  return this;
35
39
  }
36
40
  error(...args) {
37
41
  this.nbErrorsCalls += 1;
38
42
  if (this.isNotSilent) {
39
- console.error(chalk.red(`[ERROR]\t[${nowAsISO()}]`), ...args);
43
+ console.error(chalk__default.default.red(`[ERROR]\t[${nowAsISO()}]`), ...args);
40
44
  }
41
45
  return this;
42
46
  }
43
47
  info(...args) {
44
48
  if (this.isNotSilent) {
45
- console.info(chalk.blue(`[INFO]\t[${new Date().toISOString()}]`), ...args);
49
+ console.info(chalk__default.default.blue(`[INFO]\t[${new Date().toISOString()}]`), ...args);
46
50
  }
47
51
  return this;
48
52
  }
@@ -55,7 +59,7 @@ class Logger {
55
59
  warn(...args) {
56
60
  this.nbWarningsCalls += 1;
57
61
  if (this.isNotSilent) {
58
- console.warn(chalk.yellow(`[WARN]\t[${new Date().toISOString()}]`), ...args);
62
+ console.warn(chalk__default.default.yellow(`[WARN]\t[${new Date().toISOString()}]`), ...args);
59
63
  }
60
64
  return this;
61
65
  }
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sources":["../../../../src/modules/logger/logger.ts"],"sourcesContent":["import chalk from 'chalk';\n\nimport type { Logger as LoggerInterface, LoggerOptions } from './types';\n\nexport class Logger implements LoggerInterface {\n isDebug: boolean;\n\n isSilent: boolean;\n\n private nbErrorsCalls: number;\n\n private nbWarningsCalls: number;\n\n constructor(options: LoggerOptions = {}) {\n // Set verbosity options\n this.isDebug = options.debug ?? false;\n this.isSilent = options.silent ?? false;\n\n // Initialize counters\n this.nbErrorsCalls = 0;\n this.nbWarningsCalls = 0;\n }\n\n private get isNotSilent(): boolean {\n return !this.isSilent;\n }\n\n get errors(): number {\n return this.nbErrorsCalls;\n }\n\n get warnings(): number {\n return this.nbWarningsCalls;\n }\n\n get stdout(): (NodeJS.WriteStream & { fd: 1 }) | undefined {\n return this.isSilent ? undefined : process.stdout;\n }\n\n get stderr(): (NodeJS.WriteStream & { fd: 2 }) | undefined {\n return this.isSilent ? undefined : process.stderr;\n }\n\n setDebug(debug: boolean): this {\n this.isDebug = debug;\n return this;\n }\n\n setSilent(silent: boolean): this {\n this.isSilent = silent;\n return this;\n }\n\n debug(...args: unknown[]): this {\n const isDebugEnabled = this.isNotSilent && this.isDebug;\n\n if (isDebugEnabled) {\n console.log(chalk.cyan(`[DEBUG]\\t[${nowAsISO()}]`), ...args);\n }\n\n return this;\n }\n\n error(...args: unknown[]): this {\n this.nbErrorsCalls += 1;\n\n if (this.isNotSilent) {\n console.error(chalk.red(`[ERROR]\\t[${nowAsISO()}]`), ...args);\n }\n\n return this;\n }\n\n info(...args: unknown[]): this {\n if (this.isNotSilent) {\n console.info(chalk.blue(`[INFO]\\t[${new Date().toISOString()}]`), ...args);\n }\n\n return this;\n }\n\n raw(...args: unknown[]): this {\n if (this.isNotSilent) {\n console.log(...args);\n }\n\n return this;\n }\n\n warn(...args: unknown[]): this {\n this.nbWarningsCalls += 1;\n\n if (this.isNotSilent) {\n console.warn(chalk.yellow(`[WARN]\\t[${new Date().toISOString()}]`), ...args);\n }\n\n return this;\n }\n}\n\nconst nowAsISO = () => new Date().toISOString();\n\nexport const loggerFactory = (options: LoggerOptions = {}) => new Logger(options);\n"],"names":["Logger","isNotSilent","isSilent","errors","nbErrorsCalls","warnings","nbWarningsCalls","stdout","undefined","process","stderr","setDebug","debug","isDebug","setSilent","silent","args","isDebugEnabled","console","log","chalk","cyan","nowAsISO","error","red","info","blue","Date","toISOString","raw","warn","yellow","options","loggerFactory"],"mappings":"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"}
1
+ {"version":3,"file":"logger.js","sources":["../../../../src/modules/logger/logger.ts"],"sourcesContent":["import chalk from 'chalk';\n\nimport type { Logger as LoggerInterface, LoggerOptions } from './types';\n\nexport class Logger implements LoggerInterface {\n isDebug: boolean;\n\n isSilent: boolean;\n\n private nbErrorsCalls: number;\n\n private nbWarningsCalls: number;\n\n constructor(options: LoggerOptions = {}) {\n // Set verbosity options\n this.isDebug = options.debug ?? false;\n this.isSilent = options.silent ?? false;\n\n // Initialize counters\n this.nbErrorsCalls = 0;\n this.nbWarningsCalls = 0;\n }\n\n private get isNotSilent(): boolean {\n return !this.isSilent;\n }\n\n get errors(): number {\n return this.nbErrorsCalls;\n }\n\n get warnings(): number {\n return this.nbWarningsCalls;\n }\n\n get stdout(): (NodeJS.WriteStream & { fd: 1 }) | undefined {\n return this.isSilent ? undefined : process.stdout;\n }\n\n get stderr(): (NodeJS.WriteStream & { fd: 2 }) | undefined {\n return this.isSilent ? undefined : process.stderr;\n }\n\n setDebug(debug: boolean): this {\n this.isDebug = debug;\n return this;\n }\n\n setSilent(silent: boolean): this {\n this.isSilent = silent;\n return this;\n }\n\n debug(...args: unknown[]): this {\n const isDebugEnabled = this.isNotSilent && this.isDebug;\n\n if (isDebugEnabled) {\n console.log(chalk.cyan(`[DEBUG]\\t[${nowAsISO()}]`), ...args);\n }\n\n return this;\n }\n\n error(...args: unknown[]): this {\n this.nbErrorsCalls += 1;\n\n if (this.isNotSilent) {\n console.error(chalk.red(`[ERROR]\\t[${nowAsISO()}]`), ...args);\n }\n\n return this;\n }\n\n info(...args: unknown[]): this {\n if (this.isNotSilent) {\n console.info(chalk.blue(`[INFO]\\t[${new Date().toISOString()}]`), ...args);\n }\n\n return this;\n }\n\n raw(...args: unknown[]): this {\n if (this.isNotSilent) {\n console.log(...args);\n }\n\n return this;\n }\n\n warn(...args: unknown[]): this {\n this.nbWarningsCalls += 1;\n\n if (this.isNotSilent) {\n console.warn(chalk.yellow(`[WARN]\\t[${new Date().toISOString()}]`), ...args);\n }\n\n return this;\n }\n}\n\nconst nowAsISO = () => new Date().toISOString();\n\nexport const loggerFactory = (options: LoggerOptions = {}) => new Logger(options);\n"],"names":["Logger","isNotSilent","isSilent","errors","nbErrorsCalls","warnings","nbWarningsCalls","stdout","undefined","process","stderr","setDebug","debug","isDebug","setSilent","silent","args","isDebugEnabled","console","log","chalk","cyan","nowAsISO","error","red","info","blue","Date","toISOString","raw","warn","yellow","options","loggerFactory"],"mappings":"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"}
@@ -8,6 +8,12 @@ var undici = require('undici');
8
8
  var constants = require('./constants.js');
9
9
  var semver = require('../version/semver.js');
10
10
 
11
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
12
+
13
+ var assert__default = /*#__PURE__*/_interopDefault(assert);
14
+ var semver__default = /*#__PURE__*/_interopDefault(semver$1);
15
+ var execa__default = /*#__PURE__*/_interopDefault(execa);
16
+
11
17
  const proxyUrl = process.env.HTTP_PROXY || process.env.HTTPS_PROXY;
12
18
  const agent = proxyUrl ? new undici.ProxyAgent(proxyUrl) : undefined;
13
19
  class Package {
@@ -15,7 +21,7 @@ class Package {
15
21
  return this.npmPackage !== null;
16
22
  }
17
23
  assertPackageIsLoaded(npmPackage) {
18
- assert(this.isLoaded, 'The package is not loaded yet');
24
+ assert__default.default(this.isLoaded, 'The package is not loaded yet');
19
25
  }
20
26
  getVersionsDict() {
21
27
  this.assertPackageIsLoaded(this.npmPackage);
@@ -30,11 +36,11 @@ class Package {
30
36
  return versions// Only select versions matching the upgrade range
31
37
  .filter((v)=>range.test(v.version))// Only select supported version format (x.x.x)
32
38
  .filter((v)=>semver.isLiteralSemVer(v.version))// Sort in ascending order
33
- .sort((v1, v2)=>semver$1.compare(v1.version, v2.version));
39
+ .sort((v1, v2)=>semver__default.default.compare(v1.version, v2.version));
34
40
  }
35
41
  async getYarnMajorVersion() {
36
42
  try {
37
- const { stdout } = await execa('yarn', [
43
+ const { stdout } = await execa__default.default('yarn', [
38
44
  '--version'
39
45
  ], {
40
46
  timeout: 5000
@@ -81,7 +87,7 @@ class Package {
81
87
  this.logger.warn(`Unsupported package manager: ${packageManagerName}`);
82
88
  return undefined;
83
89
  }
84
- const { stdout } = await execa(packageManagerName, [
90
+ const { stdout } = await execa__default.default(packageManagerName, [
85
91
  ...command
86
92
  ], {
87
93
  timeout: 10000
@@ -107,7 +113,7 @@ class Package {
107
113
  }
108
114
  findVersion(version) {
109
115
  const versions = this.getVersionsAsList();
110
- return versions.find((npmVersion)=>semver$1.eq(npmVersion.version, version));
116
+ return versions.find((npmVersion)=>semver__default.default.eq(npmVersion.version, version));
111
117
  }
112
118
  async refresh() {
113
119
  const packageURL = `${await this.determineRegistryUrl()}/${this.name}`;
@@ -116,7 +122,7 @@ class Package {
116
122
  dispatcher: agent
117
123
  });
118
124
  // TODO: Use a validation library to make sure the response structure is correct
119
- assert(response.ok, `Request failed for ${packageURL}`);
125
+ assert__default.default(response.ok, `Request failed for ${packageURL}`);
120
126
  this.npmPackage = await response.json();
121
127
  return this;
122
128
  }
@@ -1 +1 @@
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 getYarnMajorVersion(): Promise<number> {\n try {\n const { stdout } = await execa('yarn', ['--version'], { timeout: 5_000 });\n const version = stdout.trim();\n return parseInt(version.split('.')[0], 10);\n } catch {\n // Default to Yarn Berry (v2+) if version check fails\n return 2;\n }\n }\n\n private normalizeRegistryOutput(stdout: string): string | undefined {\n const registry = stdout.trim();\n\n // Yarn Classic (v1) may return literal \"undefined\" for unset config values\n if (!registry || registry === 'undefined') {\n return undefined;\n }\n\n return registry;\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 let command: readonly string[];\n\n if (packageManagerName === 'yarn') {\n const yarnMajorVersion = await this.getYarnMajorVersion();\n // Yarn Classic (v1) uses 'registry', Yarn Berry (v2+) uses 'npmRegistryServer'\n command =\n yarnMajorVersion >= 2\n ? ['config', 'get', 'npmRegistryServer']\n : ['config', 'get', 'registry'];\n } else if (packageManagerName === 'npm' || packageManagerName === 'pnpm') {\n command = ['config', 'get', 'registry'];\n } else {\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 this.normalizeRegistryOutput(stdout);\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","getYarnMajorVersion","stdout","execa","timeout","trim","parseInt","split","normalizeRegistryOutput","registry","getRegistryFromPackageManager","packageManagerName","packageManager","getPreferred","cwd","command","yarnMajorVersion","logger","warn","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,KAAAA,GAAQL,QAAAA,GAAW,IAAIM,iBAAAA,CAAWN,QAAAA,CAAAA,GAAYO,SAAAA;AAE7C,MAAMC,OAAAA,CAAAA;AAgBX,IAAA,IAAIC,QAAAA,GAAW;QACb,OAAO,IAAI,CAACC,UAAU,KAAK,IAAA;AAC7B,IAAA;AAEQC,IAAAA,qBAAAA,CAAsBD,UAA6B,EAAoC;QAC7FE,MAAAA,CAAO,IAAI,CAACH,QAAQ,EAAE,+BAAA,CAAA;AACxB,IAAA;IAEAI,eAAAA,GAAkB;AAChB,QAAA,IAAI,CAACF,qBAAqB,CAAC,IAAI,CAACD,UAAU,CAAA;AAE1C,QAAA,OAAO,IAAI,CAACA,UAAU,CAACI,QAAQ;AACjC,IAAA;IAEAC,iBAAAA,GAAoB;AAClB,QAAA,IAAI,CAACJ,qBAAqB,CAAC,IAAI,CAACD,UAAU,CAAA;AAE1C,QAAA,OAAOM,OAAOC,MAAM,CAAC,IAAI,CAACP,UAAU,CAACI,QAAQ,CAAA;AAC/C,IAAA;AAEAI,IAAAA,mBAAAA,CAAoBC,KAAoB,EAAE;QACxC,MAAML,QAAAA,GAAW,IAAI,CAACC,iBAAiB,EAAA;AAEvC,QAAA,OACED,QACE;SACCM,MAAM,CAAC,CAACC,CAAAA,GAAMF,KAAAA,CAAMG,IAAI,CAACD,CAAAA,CAAEE,OAAO,CAAA,CACnC;AACCH,SAAAA,MAAM,CAAC,CAACC,CAAAA,GAAMG,uBAAgBH,CAAAA,CAAEE,OAAO,EACxC;SACCE,IAAI,CAAC,CAACC,EAAAA,EAAIC,EAAAA,GAAOC,QAAAA,CAAOC,OAAO,CAACH,EAAAA,CAAGH,OAAO,EAAEI,EAAAA,CAAGJ,OAAO,CAAA,CAAA;AAE7D,IAAA;AAEA,IAAA,MAAcO,mBAAAA,GAAuC;QACnD,IAAI;AACF,YAAA,MAAM,EAAEC,MAAM,EAAE,GAAG,MAAMC,MAAM,MAAA,EAAQ;AAAC,gBAAA;aAAY,EAAE;gBAAEC,OAAAA,EAAS;AAAM,aAAA,CAAA;YACvE,MAAMV,OAAAA,GAAUQ,OAAOG,IAAI,EAAA;AAC3B,YAAA,OAAOC,SAASZ,OAAAA,CAAQa,KAAK,CAAC,GAAA,CAAI,CAAC,EAAE,EAAE,EAAA,CAAA;AACzC,QAAA,CAAA,CAAE,OAAM;;YAEN,OAAO,CAAA;AACT,QAAA;AACF,IAAA;AAEQC,IAAAA,uBAAAA,CAAwBN,MAAc,EAAsB;QAClE,MAAMO,QAAAA,GAAWP,OAAOG,IAAI,EAAA;;QAG5B,IAAI,CAACI,QAAAA,IAAYA,QAAAA,KAAa,WAAA,EAAa;YACzC,OAAO/B,SAAAA;AACT,QAAA;QAEA,OAAO+B,QAAAA;AACT,IAAA;AAEA,IAAA,MAAcC,6BAAAA,GAA6D;QACzE,IAAI;AACF,YAAA,MAAMC,qBAAqB,MAAMC,oBAAAA,CAAeC,YAAY,CAAC,IAAI,CAACC,GAAG,CAAA;YACrE,IAAI,CAACH,oBAAoB,OAAOjC,SAAAA;YAEhC,IAAIqC,OAAAA;AAEJ,YAAA,IAAIJ,uBAAuB,MAAA,EAAQ;AACjC,gBAAA,MAAMK,gBAAAA,GAAmB,MAAM,IAAI,CAACf,mBAAmB,EAAA;;AAEvDc,gBAAAA,OAAAA,GACEC,oBAAoB,CAAA,GAChB;AAAC,oBAAA,QAAA;AAAU,oBAAA,KAAA;AAAO,oBAAA;iBAAoB,GACtC;AAAC,oBAAA,QAAA;AAAU,oBAAA,KAAA;AAAO,oBAAA;AAAW,iBAAA;AACrC,YAAA,CAAA,MAAO,IAAIL,kBAAAA,KAAuB,KAAA,IAASA,kBAAAA,KAAuB,MAAA,EAAQ;gBACxEI,OAAAA,GAAU;AAAC,oBAAA,QAAA;AAAU,oBAAA,KAAA;AAAO,oBAAA;AAAW,iBAAA;YACzC,CAAA,MAAO;gBACL,IAAI,CAACE,MAAM,CAACC,IAAI,CAAC,CAAC,6BAA6B,EAAEP,kBAAAA,CAAAA,CAAoB,CAAA;gBACrE,OAAOjC,SAAAA;AACT,YAAA;AAEA,YAAA,MAAM,EAAEwB,MAAM,EAAE,GAAG,MAAMC,MAAMQ,kBAAAA,EAAoB;AAAII,gBAAAA,GAAAA;aAAQ,EAAE;gBAAEX,OAAAA,EAAS;AAAO,aAAA,CAAA;YACnF,OAAO,IAAI,CAACI,uBAAuB,CAACN,MAAAA,CAAAA;AACtC,QAAA,CAAA,CAAE,OAAOiB,KAAAA,EAAO;AACd,YAAA,IAAI,CAACF,MAAM,CAACC,IAAI,CAAC,uDAAA,CAAA;YACjB,OAAOxC,SAAAA;AACT,QAAA;AACF,IAAA;AAEA,IAAA,MAAc0C,oBAAAA,GAAwC;AACpD,QAAA,IAAIhD,OAAAA,CAAQC,GAAG,CAACgD,gBAAgB,EAAE;AAChC,YAAA,IAAI,CAACJ,MAAM,CAACK,KAAK,CAAC,CAAC,wBAAwB,EAAElD,OAAAA,CAAQC,GAAG,CAACgD,gBAAgB,CAAA,CAAE,CAAA;AAC3E,YAAA,OAAOjD,QAAQC,GAAG,CAACgD,gBAAgB,CAACE,OAAO,CAAC,KAAA,EAAO,EAAA,CAAA;AACrD,QAAA;AAEA,QAAA,MAAMC,sBAAAA,GAAyB,MAAM,IAAI,CAACd,6BAA6B,EAAA;AACvE,QAAA,IAAIc,sBAAAA,EAAwB;YAC1B,IAAI,CAACP,MAAM,CAACK,KAAK,CAAC,CAAC,gCAAgC,EAAEE,sBAAAA,CAAAA,CAAwB,CAAA;YAC7E,OAAOA,sBAAAA,CAAuBD,OAAO,CAAC,KAAA,EAAO,EAAA,CAAA;AAC/C,QAAA;QAEA,IAAI,CAACN,MAAM,CAACK,KAAK,CAAC,CAAC,wBAAwB,EAAEG,0BAA0B,CAAA,CAAE,CAAA;AACzE,QAAA,OAAOA,0BAA0B,CAACF,OAAO,CAAC,KAAA,EAAO,EAAA,CAAA;AACnD,IAAA;AAEAG,IAAAA,WAAAA,CAAYhC,OAAuB,EAAiC;QAClE,MAAMT,QAAAA,GAAW,IAAI,CAACC,iBAAiB,EAAA;QAEvC,OAAOD,QAAAA,CAAS0C,IAAI,CAAC,CAACC,UAAAA,GAAe7B,SAAO8B,EAAE,CAACD,UAAAA,CAAWlC,OAAO,EAAEA,OAAAA,CAAAA,CAAAA;AACrE,IAAA;AAEA,IAAA,MAAMoC,OAAAA,GAAU;AACd,QAAA,MAAMC,UAAAA,GAAa,CAAA,EAAG,MAAM,IAAI,CAACX,oBAAoB,EAAA,CAAG,CAAC,EAAE,IAAI,CAACY,IAAI,CAAA,CAAE;QAEtE,MAAMC,QAAAA,GAAW,MAAMC,KAAAA,CAAMH,UAAAA,EAAY;;YAEvCI,UAAAA,EAAY3D;AACd,SAAA,CAAA;;AAGAO,QAAAA,MAAAA,CAAOkD,SAASG,EAAE,EAAE,CAAC,mBAAmB,EAAEL,UAAAA,CAAAA,CAAY,CAAA;AAEtD,QAAA,IAAI,CAAClD,UAAU,GAAI,MAAMoD,SAASI,IAAI,EAAA;AAEtC,QAAA,OAAO,IAAI;AACb,IAAA;AAEAC,IAAAA,aAAAA,CAAc5C,OAAuB,EAAE;AACrC,QAAA,OAAO,IAAI,CAACgC,WAAW,CAAChC,OAAAA,CAAAA,KAAahB,SAAAA;AACvC,IAAA;AApIA,IAAA,WAAA,CAAYsD,IAAY,EAAElB,GAAW,EAAEG,MAAc,CAAE;QACrD,IAAI,CAACe,IAAI,GAAGA,IAAAA;QACZ,IAAI,CAAClB,GAAG,GAAGA,GAAAA;QACX,IAAI,CAACG,MAAM,GAAGA,MAAAA;QACd,IAAI,CAACpC,UAAU,GAAG,IAAA;AACpB,IAAA;AAgIF;AAEO,MAAM0D,iBAAAA,GAAoB,CAACP,IAAAA,EAAclB,GAAAA,EAAaG,SAC3D,IAAItC,OAAAA,CAAQqD,IAAAA,EAAMlB,GAAAA,EAAKG,MAAAA;;;;;"}
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 getYarnMajorVersion(): Promise<number> {\n try {\n const { stdout } = await execa('yarn', ['--version'], { timeout: 5_000 });\n const version = stdout.trim();\n return parseInt(version.split('.')[0], 10);\n } catch {\n // Default to Yarn Berry (v2+) if version check fails\n return 2;\n }\n }\n\n private normalizeRegistryOutput(stdout: string): string | undefined {\n const registry = stdout.trim();\n\n // Yarn Classic (v1) may return literal \"undefined\" for unset config values\n if (!registry || registry === 'undefined') {\n return undefined;\n }\n\n return registry;\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 let command: readonly string[];\n\n if (packageManagerName === 'yarn') {\n const yarnMajorVersion = await this.getYarnMajorVersion();\n // Yarn Classic (v1) uses 'registry', Yarn Berry (v2+) uses 'npmRegistryServer'\n command =\n yarnMajorVersion >= 2\n ? ['config', 'get', 'npmRegistryServer']\n : ['config', 'get', 'registry'];\n } else if (packageManagerName === 'npm' || packageManagerName === 'pnpm') {\n command = ['config', 'get', 'registry'];\n } else {\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 this.normalizeRegistryOutput(stdout);\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","getYarnMajorVersion","stdout","execa","timeout","trim","parseInt","split","normalizeRegistryOutput","registry","getRegistryFromPackageManager","packageManagerName","packageManager","getPreferred","cwd","command","yarnMajorVersion","logger","warn","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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"}
@@ -10,10 +10,17 @@ var code = require('../runner/code/code.js');
10
10
  var json = require('../runner/json/json.js');
11
11
  var constants = require('./constants.js');
12
12
 
13
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
14
+
15
+ var path__default = /*#__PURE__*/_interopDefault(path);
16
+ var assert__default = /*#__PURE__*/_interopDefault(assert);
17
+ var fse__default = /*#__PURE__*/_interopDefault(fse);
18
+ var semver__default = /*#__PURE__*/_interopDefault(semver$1);
19
+
13
20
  class Project {
14
21
  getFilesByExtensions(extensions) {
15
22
  return this.files.filter((filePath)=>{
16
- const fileExtension = path.extname(filePath);
23
+ const fileExtension = path__default.default.extname(filePath);
17
24
  return extensions.includes(fileExtension);
18
25
  });
19
26
  }
@@ -64,13 +71,13 @@ class Project {
64
71
  ];
65
72
  }
66
73
  refreshPackageJSON() {
67
- const packageJSONPath = path.join(this.cwd, constants.PROJECT_PACKAGE_JSON);
74
+ const packageJSONPath = path__default.default.join(this.cwd, constants.PROJECT_PACKAGE_JSON);
68
75
  try {
69
- fse.accessSync(packageJSONPath);
76
+ fse__default.default.accessSync(packageJSONPath);
70
77
  } catch {
71
78
  throw new Error(`Could not find a ${constants.PROJECT_PACKAGE_JSON} file in ${this.cwd}`);
72
79
  }
73
- const packageJSONBuffer = fse.readFileSync(packageJSONPath);
80
+ const packageJSONBuffer = fse__default.default.readFileSync(packageJSONPath);
74
81
  this.packageJSONPath = packageJSONPath;
75
82
  this.packageJSON = JSON.parse(packageJSONBuffer.toString());
76
83
  }
@@ -79,7 +86,7 @@ class Project {
79
86
  this.files = scanner$1.scan(this.paths);
80
87
  }
81
88
  constructor(cwd, config){
82
- if (!fse.pathExistsSync(cwd)) {
89
+ if (!fse__default.default.pathExistsSync(cwd)) {
83
90
  throw new Error(`ENOENT: no such file or directory, access '${cwd}'`);
84
91
  }
85
92
  this.cwd = cwd;
@@ -120,7 +127,7 @@ class AppProject extends Project {
120
127
  if (version === undefined) {
121
128
  throw new Error(`No version of ${constants.STRAPI_DEPENDENCY_NAME} was found in ${projectName}. Are you in a valid Strapi project?`);
122
129
  }
123
- const isValidSemVer = semver.isLiteralSemVer(version) && semver$1.valid(version) === version;
130
+ const isValidSemVer = semver.isLiteralSemVer(version) && semver__default.default.valid(version) === version;
124
131
  // We return undefined only if a strapi/strapi version is found, but it's not semver compliant
125
132
  return isValidSemVer ? semver.semVerFactory(version) : undefined;
126
133
  }
@@ -135,7 +142,7 @@ class AppProject extends Project {
135
142
  ]
136
143
  });
137
144
  strapiPackageJSON = require(strapiPackageJSONPath);
138
- assert(typeof strapiPackageJSON === 'object');
145
+ assert__default.default(typeof strapiPackageJSON === 'object');
139
146
  } catch {
140
147
  throw new Error(`Cannot resolve module "${constants.STRAPI_DEPENDENCY_NAME}" from paths [${this.cwd}]`);
141
148
  }
@@ -153,7 +160,7 @@ class AppProject extends Project {
153
160
  }
154
161
  }
155
162
  const formatGlobCollectionPattern = (collection)=>{
156
- assert(collection.length > 0, 'Invalid pattern provided, the given collection needs at least 1 element');
163
+ assert__default.default(collection.length > 0, 'Invalid pattern provided, the given collection needs at least 1 element');
157
164
  return collection.length === 1 ? collection[0] : `{${collection}}`;
158
165
  };
159
166
  class PluginProject extends Project {
@@ -182,19 +189,19 @@ class PluginProject extends Project {
182
189
  }
183
190
  }
184
191
  const isPlugin = (cwd)=>{
185
- const packageJSONPath = path.join(cwd, constants.PROJECT_PACKAGE_JSON);
192
+ const packageJSONPath = path__default.default.join(cwd, constants.PROJECT_PACKAGE_JSON);
186
193
  try {
187
- fse.accessSync(packageJSONPath);
194
+ fse__default.default.accessSync(packageJSONPath);
188
195
  } catch {
189
196
  throw new Error(`Could not find a ${constants.PROJECT_PACKAGE_JSON} file in ${cwd}`);
190
197
  }
191
- const packageJSONBuffer = fse.readFileSync(packageJSONPath);
198
+ const packageJSONBuffer = fse__default.default.readFileSync(packageJSONPath);
192
199
  const packageJSON = JSON.parse(packageJSONBuffer.toString());
193
200
  return packageJSON?.strapi?.kind === 'plugin';
194
201
  };
195
202
  // TODO: make this async so we can use async file methods
196
203
  const projectFactory = (cwd)=>{
197
- fse.accessSync(cwd);
204
+ fse__default.default.accessSync(cwd);
198
205
  return isPlugin(cwd) ? new PluginProject(cwd) : new AppProject(cwd);
199
206
  };
200
207
 
@@ -1 +1 @@
1
- {"version":3,"file":"project.js","sources":["../../../../src/modules/project/project.ts"],"sourcesContent":["import path from 'node:path';\nimport assert from 'node:assert';\nimport fse from 'fs-extra';\nimport semver from 'semver';\n\nimport { semVerFactory, isLiteralSemVer, isValidSemVer } from '../version';\nimport { fileScannerFactory } from '../file-scanner';\nimport { codeRunnerFactory } from '../runner/code';\nimport { jsonRunnerFactory } from '../runner/json';\nimport * as constants from './constants';\n\nimport type { Version } from '../version';\nimport type { Codemod } from '../codemod';\nimport type { Report } from '../report';\nimport type {\n FileExtension,\n MinimalPackageJSON,\n ProjectConfig,\n ProjectType,\n RunCodemodsOptions,\n} from './types';\n\nexport class Project {\n public cwd: string;\n\n // The following properties are assigned during the .refresh() call in the constructor.\n\n public files!: string[];\n\n public packageJSONPath!: string;\n\n public packageJSON!: MinimalPackageJSON;\n\n public readonly paths: string[];\n\n constructor(cwd: string, config: ProjectConfig) {\n if (!fse.pathExistsSync(cwd)) {\n throw new Error(`ENOENT: no such file or directory, access '${cwd}'`);\n }\n\n this.cwd = cwd;\n this.paths = config.paths;\n\n this.refresh();\n }\n\n getFilesByExtensions(extensions: FileExtension[]) {\n return this.files.filter((filePath) => {\n const fileExtension = path.extname(filePath) as FileExtension;\n\n return extensions.includes(fileExtension);\n });\n }\n\n refresh() {\n this.refreshPackageJSON();\n this.refreshProjectFiles();\n\n return this;\n }\n\n async runCodemods(codemods: Codemod.List, options: RunCodemodsOptions) {\n const runners = this.createProjectCodemodsRunners(options.dry);\n const reports: Report.CodemodReport[] = [];\n\n for (const codemod of codemods) {\n for (const runner of runners) {\n if (runner.valid(codemod)) {\n const report = await runner.run(codemod);\n reports.push({ codemod, report });\n }\n }\n }\n\n return reports;\n }\n\n private createProjectCodemodsRunners(dry: boolean = false) {\n const jsonExtensions = constants.PROJECT_JSON_EXTENSIONS.map<FileExtension>((ext) => `.${ext}`);\n const codeExtensions = constants.PROJECT_CODE_EXTENSIONS.map<FileExtension>((ext) => `.${ext}`);\n\n const jsonFiles = this.getFilesByExtensions(jsonExtensions);\n const codeFiles = this.getFilesByExtensions(codeExtensions);\n\n const codeRunner = codeRunnerFactory(codeFiles, {\n dry,\n parser: 'ts',\n runInBand: true,\n babel: true,\n extensions: constants.PROJECT_CODE_EXTENSIONS.join(','),\n // Don't output any log coming from the runner\n print: false,\n silent: true,\n verbose: 0,\n });\n\n const jsonRunner = jsonRunnerFactory(jsonFiles, { dry, cwd: this.cwd });\n\n return [codeRunner, jsonRunner] as const;\n }\n\n private refreshPackageJSON(): void {\n const packageJSONPath = path.join(this.cwd, constants.PROJECT_PACKAGE_JSON);\n\n try {\n fse.accessSync(packageJSONPath);\n } catch {\n throw new Error(`Could not find a ${constants.PROJECT_PACKAGE_JSON} file in ${this.cwd}`);\n }\n\n const packageJSONBuffer = fse.readFileSync(packageJSONPath);\n\n this.packageJSONPath = packageJSONPath;\n this.packageJSON = JSON.parse(packageJSONBuffer.toString());\n }\n\n private refreshProjectFiles(): void {\n const scanner = fileScannerFactory(this.cwd);\n\n this.files = scanner.scan(this.paths);\n }\n}\n\nexport class AppProject extends Project {\n public strapiVersion!: Version.SemVer;\n\n readonly type = 'application' as const satisfies ProjectType;\n\n /**\n * Returns an array of allowed file paths for a Strapi application\n *\n * The resulting paths include app default files and the root package.json file.\n */\n private static get paths() {\n const allowedRootPaths = formatGlobCollectionPattern(constants.PROJECT_APP_ALLOWED_ROOT_PATHS);\n const allowedExtensions = formatGlobCollectionPattern(constants.PROJECT_ALLOWED_EXTENSIONS);\n\n return [\n // App default files\n `./${allowedRootPaths}/**/*.${allowedExtensions}`,\n `!./**/node_modules/**/*`,\n `!./**/dist/**/*`,\n // Root package.json file\n constants.PROJECT_PACKAGE_JSON,\n ];\n }\n\n constructor(cwd: string) {\n super(cwd, { paths: AppProject.paths });\n this.refreshStrapiVersion();\n }\n\n refresh() {\n super.refresh();\n this.refreshStrapiVersion();\n return this;\n }\n\n private refreshStrapiVersion(): void {\n this.strapiVersion =\n // First try to get the strapi version from the package.json dependencies\n this.findStrapiVersionFromProjectPackageJSON() ??\n // If the version found is not a valid SemVer, get the Strapi version from the installed package\n this.findLocallyInstalledStrapiVersion();\n }\n\n private findStrapiVersionFromProjectPackageJSON(): Version.SemVer | undefined {\n const projectName = this.packageJSON.name;\n const version = this.packageJSON.dependencies?.[constants.STRAPI_DEPENDENCY_NAME];\n\n if (version === undefined) {\n throw new Error(\n `No version of ${constants.STRAPI_DEPENDENCY_NAME} was found in ${projectName}. Are you in a valid Strapi project?`\n );\n }\n\n const isValidSemVer = isLiteralSemVer(version) && semver.valid(version) === version;\n\n // We return undefined only if a strapi/strapi version is found, but it's not semver compliant\n return isValidSemVer ? semVerFactory(version) : undefined;\n }\n\n private findLocallyInstalledStrapiVersion(): Version.SemVer {\n const packageSearchText = `${constants.STRAPI_DEPENDENCY_NAME}/package.json`;\n\n let strapiPackageJSONPath: string;\n let strapiPackageJSON: MinimalPackageJSON;\n\n try {\n strapiPackageJSONPath = require.resolve(packageSearchText, { paths: [this.cwd] });\n strapiPackageJSON = require(strapiPackageJSONPath);\n\n assert(typeof strapiPackageJSON === 'object');\n } catch {\n throw new Error(\n `Cannot resolve module \"${constants.STRAPI_DEPENDENCY_NAME}\" from paths [${this.cwd}]`\n );\n }\n\n const strapiVersion = strapiPackageJSON.version;\n\n if (!isValidSemVer(strapiVersion)) {\n throw new Error(\n `Invalid ${constants.STRAPI_DEPENDENCY_NAME} version found in ${strapiPackageJSONPath} (${strapiVersion})`\n );\n }\n\n return semVerFactory(strapiVersion);\n }\n}\n\nconst formatGlobCollectionPattern = (collection: string[]): string => {\n assert(\n collection.length > 0,\n 'Invalid pattern provided, the given collection needs at least 1 element'\n );\n\n return collection.length === 1 ? collection[0] : `{${collection}}`;\n};\n\nexport class PluginProject extends Project {\n readonly type = 'plugin' as const satisfies ProjectType;\n\n /**\n * Returns an array of allowed file paths for a Strapi plugin\n *\n * The resulting paths include plugin default files, the root package.json file, and plugin-specific files.\n */\n private static get paths() {\n const allowedRootPaths = formatGlobCollectionPattern(\n constants.PROJECT_PLUGIN_ALLOWED_ROOT_PATHS\n );\n const allowedExtensions = formatGlobCollectionPattern(constants.PROJECT_ALLOWED_EXTENSIONS);\n\n return [\n // Plugin default files\n `./${allowedRootPaths}/**/*.${allowedExtensions}`,\n `!./**/node_modules/**/*`,\n `!./**/dist/**/*`,\n // Root package.json file\n constants.PROJECT_PACKAGE_JSON,\n // Plugin root files\n ...constants.PROJECT_PLUGIN_ROOT_FILES,\n ];\n }\n\n constructor(cwd: string) {\n super(cwd, { paths: PluginProject.paths });\n }\n}\n\nconst isPlugin = (cwd: string) => {\n const packageJSONPath = path.join(cwd, constants.PROJECT_PACKAGE_JSON);\n\n try {\n fse.accessSync(packageJSONPath);\n } catch {\n throw new Error(`Could not find a ${constants.PROJECT_PACKAGE_JSON} file in ${cwd}`);\n }\n\n const packageJSONBuffer = fse.readFileSync(packageJSONPath);\n\n const packageJSON = JSON.parse(packageJSONBuffer.toString());\n\n return packageJSON?.strapi?.kind === 'plugin';\n};\n\n// TODO: make this async so we can use async file methods\nexport const projectFactory = (cwd: string) => {\n fse.accessSync(cwd);\n\n return isPlugin(cwd) ? new PluginProject(cwd) : new AppProject(cwd);\n};\n"],"names":["Project","getFilesByExtensions","extensions","files","filter","filePath","fileExtension","path","extname","includes","refresh","refreshPackageJSON","refreshProjectFiles","runCodemods","codemods","options","runners","createProjectCodemodsRunners","dry","reports","codemod","runner","valid","report","run","push","jsonExtensions","constants","map","ext","codeExtensions","jsonFiles","codeFiles","codeRunner","codeRunnerFactory","parser","runInBand","babel","join","print","silent","verbose","jsonRunner","jsonRunnerFactory","cwd","packageJSONPath","fse","accessSync","Error","packageJSONBuffer","readFileSync","packageJSON","JSON","parse","toString","scanner","fileScannerFactory","scan","paths","config","pathExistsSync","AppProject","allowedRootPaths","formatGlobCollectionPattern","allowedExtensions","refreshStrapiVersion","strapiVersion","findStrapiVersionFromProjectPackageJSON","findLocallyInstalledStrapiVersion","projectName","name","version","dependencies","undefined","isValidSemVer","isLiteralSemVer","semver","semVerFactory","packageSearchText","strapiPackageJSONPath","strapiPackageJSON","require","resolve","assert","type","collection","length","PluginProject","isPlugin","strapi","kind","projectFactory"],"mappings":";;;;;;;;;;;;AAsBO,MAAMA,OAAAA,CAAAA;AAwBXC,IAAAA,oBAAAA,CAAqBC,UAA2B,EAAE;AAChD,QAAA,OAAO,IAAI,CAACC,KAAK,CAACC,MAAM,CAAC,CAACC,QAAAA,GAAAA;YACxB,MAAMC,aAAAA,GAAgBC,IAAAA,CAAKC,OAAO,CAACH,QAAAA,CAAAA;YAEnC,OAAOH,UAAAA,CAAWO,QAAQ,CAACH,aAAAA,CAAAA;AAC7B,QAAA,CAAA,CAAA;AACF,IAAA;IAEAI,OAAAA,GAAU;AACR,QAAA,IAAI,CAACC,kBAAkB,EAAA;AACvB,QAAA,IAAI,CAACC,mBAAmB,EAAA;AAExB,QAAA,OAAO,IAAI;AACb,IAAA;AAEA,IAAA,MAAMC,WAAAA,CAAYC,QAAsB,EAAEC,OAA2B,EAAE;AACrE,QAAA,MAAMC,UAAU,IAAI,CAACC,4BAA4B,CAACF,QAAQG,GAAG,CAAA;AAC7D,QAAA,MAAMC,UAAkC,EAAE;QAE1C,KAAK,MAAMC,WAAWN,QAAAA,CAAU;YAC9B,KAAK,MAAMO,UAAUL,OAAAA,CAAS;gBAC5B,IAAIK,MAAAA,CAAOC,KAAK,CAACF,OAAAA,CAAAA,EAAU;AACzB,oBAAA,MAAMG,MAAAA,GAAS,MAAMF,MAAAA,CAAOG,GAAG,CAACJ,OAAAA,CAAAA;AAChCD,oBAAAA,OAAAA,CAAQM,IAAI,CAAC;AAAEL,wBAAAA,OAAAA;AAASG,wBAAAA;AAAO,qBAAA,CAAA;AACjC,gBAAA;AACF,YAAA;AACF,QAAA;QAEA,OAAOJ,OAAAA;AACT,IAAA;IAEQF,4BAAAA,CAA6BC,GAAAA,GAAe,KAAK,EAAE;QACzD,MAAMQ,cAAAA,GAAiBC,iCAAiC,CAACC,GAAG,CAAgB,CAACC,GAAAA,GAAQ,CAAC,CAAC,EAAEA,GAAAA,CAAAA,CAAK,CAAA;QAC9F,MAAMC,cAAAA,GAAiBH,iCAAiC,CAACC,GAAG,CAAgB,CAACC,GAAAA,GAAQ,CAAC,CAAC,EAAEA,GAAAA,CAAAA,CAAK,CAAA;AAE9F,QAAA,MAAME,SAAAA,GAAY,IAAI,CAAC9B,oBAAoB,CAACyB,cAAAA,CAAAA;AAC5C,QAAA,MAAMM,SAAAA,GAAY,IAAI,CAAC/B,oBAAoB,CAAC6B,cAAAA,CAAAA;QAE5C,MAAMG,UAAAA,GAAaC,uBAAkBF,SAAAA,EAAW;AAC9Cd,YAAAA,GAAAA;YACAiB,MAAAA,EAAQ,IAAA;YACRC,SAAAA,EAAW,IAAA;YACXC,KAAAA,EAAO,IAAA;AACPnC,YAAAA,UAAAA,EAAYyB,iCAAiC,CAACW,IAAI,CAAC,GAAA,CAAA;;YAEnDC,KAAAA,EAAO,KAAA;YACPC,MAAAA,EAAQ,IAAA;YACRC,OAAAA,EAAS;AACX,SAAA,CAAA;QAEA,MAAMC,UAAAA,GAAaC,uBAAkBZ,SAAAA,EAAW;AAAEb,YAAAA,GAAAA;YAAK0B,GAAAA,EAAK,IAAI,CAACA;AAAI,SAAA,CAAA;QAErE,OAAO;AAACX,YAAAA,UAAAA;AAAYS,YAAAA;AAAW,SAAA;AACjC,IAAA;IAEQ/B,kBAAAA,GAA2B;QACjC,MAAMkC,eAAAA,GAAkBtC,KAAK+B,IAAI,CAAC,IAAI,CAACM,GAAG,EAAEjB,8BAA8B,CAAA;QAE1E,IAAI;AACFmB,YAAAA,GAAAA,CAAIC,UAAU,CAACF,eAAAA,CAAAA;AACjB,QAAA,CAAA,CAAE,OAAM;AACN,YAAA,MAAM,IAAIG,KAAAA,CAAM,CAAC,iBAAiB,EAAErB,8BAA8B,CAAC,SAAS,EAAE,IAAI,CAACiB,GAAG,CAAA,CAAE,CAAA;AAC1F,QAAA;QAEA,MAAMK,iBAAAA,GAAoBH,GAAAA,CAAII,YAAY,CAACL,eAAAA,CAAAA;QAE3C,IAAI,CAACA,eAAe,GAAGA,eAAAA;AACvB,QAAA,IAAI,CAACM,WAAW,GAAGC,KAAKC,KAAK,CAACJ,kBAAkBK,QAAQ,EAAA,CAAA;AAC1D,IAAA;IAEQ1C,mBAAAA,GAA4B;AAClC,QAAA,MAAM2C,SAAAA,GAAUC,0BAAAA,CAAmB,IAAI,CAACZ,GAAG,CAAA;QAE3C,IAAI,CAACzC,KAAK,GAAGoD,SAAAA,CAAQE,IAAI,CAAC,IAAI,CAACC,KAAK,CAAA;AACtC,IAAA;IArFA,WAAA,CAAYd,GAAW,EAAEe,MAAqB,CAAE;AAC9C,QAAA,IAAI,CAACb,GAAAA,CAAIc,cAAc,CAAChB,GAAAA,CAAAA,EAAM;AAC5B,YAAA,MAAM,IAAII,KAAAA,CAAM,CAAC,2CAA2C,EAAEJ,GAAAA,CAAI,CAAC,CAAC,CAAA;AACtE,QAAA;QAEA,IAAI,CAACA,GAAG,GAAGA,GAAAA;AACX,QAAA,IAAI,CAACc,KAAK,GAAGC,MAAAA,CAAOD,KAAK;AAEzB,QAAA,IAAI,CAAChD,OAAO,EAAA;AACd,IAAA;AA6EF;AAEO,MAAMmD,UAAAA,SAAmB7D,OAAAA,CAAAA;AAK9B;;;;AAIC,MACD,WAAmB0D,KAAAA,GAAQ;QACzB,MAAMI,gBAAAA,GAAmBC,2BAAAA,CAA4BpC,wCAAwC,CAAA;QAC7F,MAAMqC,iBAAAA,GAAoBD,2BAAAA,CAA4BpC,oCAAoC,CAAA;QAE1F,OAAO;;AAEL,YAAA,CAAC,EAAE,EAAEmC,gBAAAA,CAAiB,MAAM,EAAEE,iBAAAA,CAAAA,CAAmB;AACjD,YAAA,CAAC,uBAAuB,CAAC;AACzB,YAAA,CAAC,eAAe,CAAC;;AAEjBrC,YAAAA;AACD,SAAA;AACH,IAAA;IAOAjB,OAAAA,GAAU;AACR,QAAA,KAAK,CAACA,OAAAA,EAAAA;AACN,QAAA,IAAI,CAACuD,oBAAoB,EAAA;AACzB,QAAA,OAAO,IAAI;AACb,IAAA;IAEQA,oBAAAA,GAA6B;QACnC,IAAI,CAACC,aAAa;QAEhB,IAAI,CAACC,uCAAuC,EAAA;AAE5C,QAAA,IAAI,CAACC,iCAAiC,EAAA;AAC1C,IAAA;IAEQD,uCAAAA,GAAsE;AAC5E,QAAA,MAAME,WAAAA,GAAc,IAAI,CAAClB,WAAW,CAACmB,IAAI;QACzC,MAAMC,OAAAA,GAAU,IAAI,CAACpB,WAAW,CAACqB,YAAY,GAAG7C,gCAAgC,CAAC;AAEjF,QAAA,IAAI4C,YAAYE,SAAAA,EAAW;AACzB,YAAA,MAAM,IAAIzB,KAAAA,CACR,CAAC,cAAc,EAAErB,gCAAgC,CAAC,cAAc,EAAE0C,WAAAA,CAAY,oCAAoC,CAAC,CAAA;AAEvH,QAAA;AAEA,QAAA,MAAMK,gBAAgBC,sBAAAA,CAAgBJ,OAAAA,CAAAA,IAAYK,QAAAA,CAAOtD,KAAK,CAACiD,OAAAA,CAAAA,KAAaA,OAAAA;;QAG5E,OAAOG,aAAAA,GAAgBG,qBAAcN,OAAAA,CAAAA,GAAWE,SAAAA;AAClD,IAAA;IAEQL,iCAAAA,GAAoD;AAC1D,QAAA,MAAMU,oBAAoB,CAAA,EAAGnD,gCAAgC,CAAC,aAAa,CAAC;QAE5E,IAAIoD,qBAAAA;QACJ,IAAIC,iBAAAA;QAEJ,IAAI;YACFD,qBAAAA,GAAwBE,OAAAA,CAAQC,OAAO,CAACJ,iBAAAA,EAAmB;gBAAEpB,KAAAA,EAAO;AAAC,oBAAA,IAAI,CAACd;AAAI;AAAC,aAAA,CAAA;AAC/EoC,YAAAA,iBAAAA,GAAoBC,OAAAA,CAAQF,qBAAAA,CAAAA;AAE5BI,YAAAA,MAAAA,CAAO,OAAOH,iBAAAA,KAAsB,QAAA,CAAA;AACtC,QAAA,CAAA,CAAE,OAAM;AACN,YAAA,MAAM,IAAIhC,KAAAA,CACR,CAAC,uBAAuB,EAAErB,gCAAgC,CAAC,cAAc,EAAE,IAAI,CAACiB,GAAG,CAAC,CAAC,CAAC,CAAA;AAE1F,QAAA;QAEA,MAAMsB,aAAAA,GAAgBc,kBAAkBT,OAAO;QAE/C,IAAI,CAACG,qBAAcR,aAAAA,CAAAA,EAAgB;AACjC,YAAA,MAAM,IAAIlB,KAAAA,CACR,CAAC,QAAQ,EAAErB,gCAAgC,CAAC,kBAAkB,EAAEoD,qBAAAA,CAAsB,EAAE,EAAEb,aAAAA,CAAc,CAAC,CAAC,CAAA;AAE9G,QAAA;AAEA,QAAA,OAAOW,oBAAAA,CAAcX,aAAAA,CAAAA;AACvB,IAAA;AA7DA,IAAA,WAAA,CAAYtB,GAAW,CAAE;AACvB,QAAA,KAAK,CAACA,GAAAA,EAAK;AAAEc,YAAAA,KAAAA,EAAOG,WAAWH;AAAM,SAAA,CAAA,EAAA,IAAA,CAtB9B0B,IAAAA,GAAO,aAAA;AAuBd,QAAA,IAAI,CAACnB,oBAAoB,EAAA;AAC3B,IAAA;AA2DF;AAEA,MAAMF,8BAA8B,CAACsB,UAAAA,GAAAA;IACnCF,MAAAA,CACEE,UAAAA,CAAWC,MAAM,GAAG,CAAA,EACpB,yEAAA,CAAA;AAGF,IAAA,OAAOD,UAAAA,CAAWC,MAAM,KAAK,CAAA,GAAID,UAAU,CAAC,CAAA,CAAE,GAAG,CAAC,CAAC,EAAEA,UAAAA,CAAW,CAAC,CAAC;AACpE,CAAA;AAEO,MAAME,aAAAA,SAAsBvF,OAAAA,CAAAA;AAGjC;;;;AAIC,MACD,WAAmB0D,KAAAA,GAAQ;QACzB,MAAMI,gBAAAA,GAAmBC,2BAAAA,CACvBpC,2CAA2C,CAAA;QAE7C,MAAMqC,iBAAAA,GAAoBD,2BAAAA,CAA4BpC,oCAAoC,CAAA;QAE1F,OAAO;;AAEL,YAAA,CAAC,EAAE,EAAEmC,gBAAAA,CAAiB,MAAM,EAAEE,iBAAAA,CAAAA,CAAmB;AACjD,YAAA,CAAC,uBAAuB,CAAC;AACzB,YAAA,CAAC,eAAe,CAAC;;AAEjBrC,YAAAA,8BAA8B;;AAE3BA,YAAAA,GAAAA;AACJ,SAAA;AACH,IAAA;AAEA,IAAA,WAAA,CAAYiB,GAAW,CAAE;AACvB,QAAA,KAAK,CAACA,GAAAA,EAAK;AAAEc,YAAAA,KAAAA,EAAO6B,cAAc7B;AAAM,SAAA,CAAA,EAAA,IAAA,CA1BjC0B,IAAAA,GAAO,QAAA;AA2BhB,IAAA;AACF;AAEA,MAAMI,WAAW,CAAC5C,GAAAA,GAAAA;AAChB,IAAA,MAAMC,kBAAkBtC,IAAAA,CAAK+B,IAAI,CAACM,GAAAA,EAAKjB,8BAA8B,CAAA;IAErE,IAAI;AACFmB,QAAAA,GAAAA,CAAIC,UAAU,CAACF,eAAAA,CAAAA;AACjB,IAAA,CAAA,CAAE,OAAM;QACN,MAAM,IAAIG,KAAAA,CAAM,CAAC,iBAAiB,EAAErB,8BAA8B,CAAC,SAAS,EAAEiB,GAAAA,CAAAA,CAAK,CAAA;AACrF,IAAA;IAEA,MAAMK,iBAAAA,GAAoBH,GAAAA,CAAII,YAAY,CAACL,eAAAA,CAAAA;AAE3C,IAAA,MAAMM,WAAAA,GAAcC,IAAAA,CAAKC,KAAK,CAACJ,kBAAkBK,QAAQ,EAAA,CAAA;IAEzD,OAAOH,WAAAA,EAAasC,QAAQC,IAAAA,KAAS,QAAA;AACvC,CAAA;AAEA;AACO,MAAMC,iBAAiB,CAAC/C,GAAAA,GAAAA;AAC7BE,IAAAA,GAAAA,CAAIC,UAAU,CAACH,GAAAA,CAAAA;AAEf,IAAA,OAAO4C,SAAS5C,GAAAA,CAAAA,GAAO,IAAI2C,aAAAA,CAAc3C,GAAAA,CAAAA,GAAO,IAAIiB,UAAAA,CAAWjB,GAAAA,CAAAA;AACjE;;;;;;;"}
1
+ {"version":3,"file":"project.js","sources":["../../../../src/modules/project/project.ts"],"sourcesContent":["import path from 'node:path';\nimport assert from 'node:assert';\nimport fse from 'fs-extra';\nimport semver from 'semver';\n\nimport { semVerFactory, isLiteralSemVer, isValidSemVer } from '../version';\nimport { fileScannerFactory } from '../file-scanner';\nimport { codeRunnerFactory } from '../runner/code';\nimport { jsonRunnerFactory } from '../runner/json';\nimport * as constants from './constants';\n\nimport type { Version } from '../version';\nimport type { Codemod } from '../codemod';\nimport type { Report } from '../report';\nimport type {\n FileExtension,\n MinimalPackageJSON,\n ProjectConfig,\n ProjectType,\n RunCodemodsOptions,\n} from './types';\n\nexport class Project {\n public cwd: string;\n\n // The following properties are assigned during the .refresh() call in the constructor.\n\n public files!: string[];\n\n public packageJSONPath!: string;\n\n public packageJSON!: MinimalPackageJSON;\n\n public readonly paths: string[];\n\n constructor(cwd: string, config: ProjectConfig) {\n if (!fse.pathExistsSync(cwd)) {\n throw new Error(`ENOENT: no such file or directory, access '${cwd}'`);\n }\n\n this.cwd = cwd;\n this.paths = config.paths;\n\n this.refresh();\n }\n\n getFilesByExtensions(extensions: FileExtension[]) {\n return this.files.filter((filePath) => {\n const fileExtension = path.extname(filePath) as FileExtension;\n\n return extensions.includes(fileExtension);\n });\n }\n\n refresh() {\n this.refreshPackageJSON();\n this.refreshProjectFiles();\n\n return this;\n }\n\n async runCodemods(codemods: Codemod.List, options: RunCodemodsOptions) {\n const runners = this.createProjectCodemodsRunners(options.dry);\n const reports: Report.CodemodReport[] = [];\n\n for (const codemod of codemods) {\n for (const runner of runners) {\n if (runner.valid(codemod)) {\n const report = await runner.run(codemod);\n reports.push({ codemod, report });\n }\n }\n }\n\n return reports;\n }\n\n private createProjectCodemodsRunners(dry: boolean = false) {\n const jsonExtensions = constants.PROJECT_JSON_EXTENSIONS.map<FileExtension>((ext) => `.${ext}`);\n const codeExtensions = constants.PROJECT_CODE_EXTENSIONS.map<FileExtension>((ext) => `.${ext}`);\n\n const jsonFiles = this.getFilesByExtensions(jsonExtensions);\n const codeFiles = this.getFilesByExtensions(codeExtensions);\n\n const codeRunner = codeRunnerFactory(codeFiles, {\n dry,\n parser: 'ts',\n runInBand: true,\n babel: true,\n extensions: constants.PROJECT_CODE_EXTENSIONS.join(','),\n // Don't output any log coming from the runner\n print: false,\n silent: true,\n verbose: 0,\n });\n\n const jsonRunner = jsonRunnerFactory(jsonFiles, { dry, cwd: this.cwd });\n\n return [codeRunner, jsonRunner] as const;\n }\n\n private refreshPackageJSON(): void {\n const packageJSONPath = path.join(this.cwd, constants.PROJECT_PACKAGE_JSON);\n\n try {\n fse.accessSync(packageJSONPath);\n } catch {\n throw new Error(`Could not find a ${constants.PROJECT_PACKAGE_JSON} file in ${this.cwd}`);\n }\n\n const packageJSONBuffer = fse.readFileSync(packageJSONPath);\n\n this.packageJSONPath = packageJSONPath;\n this.packageJSON = JSON.parse(packageJSONBuffer.toString());\n }\n\n private refreshProjectFiles(): void {\n const scanner = fileScannerFactory(this.cwd);\n\n this.files = scanner.scan(this.paths);\n }\n}\n\nexport class AppProject extends Project {\n public strapiVersion!: Version.SemVer;\n\n readonly type = 'application' as const satisfies ProjectType;\n\n /**\n * Returns an array of allowed file paths for a Strapi application\n *\n * The resulting paths include app default files and the root package.json file.\n */\n private static get paths() {\n const allowedRootPaths = formatGlobCollectionPattern(constants.PROJECT_APP_ALLOWED_ROOT_PATHS);\n const allowedExtensions = formatGlobCollectionPattern(constants.PROJECT_ALLOWED_EXTENSIONS);\n\n return [\n // App default files\n `./${allowedRootPaths}/**/*.${allowedExtensions}`,\n `!./**/node_modules/**/*`,\n `!./**/dist/**/*`,\n // Root package.json file\n constants.PROJECT_PACKAGE_JSON,\n ];\n }\n\n constructor(cwd: string) {\n super(cwd, { paths: AppProject.paths });\n this.refreshStrapiVersion();\n }\n\n refresh() {\n super.refresh();\n this.refreshStrapiVersion();\n return this;\n }\n\n private refreshStrapiVersion(): void {\n this.strapiVersion =\n // First try to get the strapi version from the package.json dependencies\n this.findStrapiVersionFromProjectPackageJSON() ??\n // If the version found is not a valid SemVer, get the Strapi version from the installed package\n this.findLocallyInstalledStrapiVersion();\n }\n\n private findStrapiVersionFromProjectPackageJSON(): Version.SemVer | undefined {\n const projectName = this.packageJSON.name;\n const version = this.packageJSON.dependencies?.[constants.STRAPI_DEPENDENCY_NAME];\n\n if (version === undefined) {\n throw new Error(\n `No version of ${constants.STRAPI_DEPENDENCY_NAME} was found in ${projectName}. Are you in a valid Strapi project?`\n );\n }\n\n const isValidSemVer = isLiteralSemVer(version) && semver.valid(version) === version;\n\n // We return undefined only if a strapi/strapi version is found, but it's not semver compliant\n return isValidSemVer ? semVerFactory(version) : undefined;\n }\n\n private findLocallyInstalledStrapiVersion(): Version.SemVer {\n const packageSearchText = `${constants.STRAPI_DEPENDENCY_NAME}/package.json`;\n\n let strapiPackageJSONPath: string;\n let strapiPackageJSON: MinimalPackageJSON;\n\n try {\n strapiPackageJSONPath = require.resolve(packageSearchText, { paths: [this.cwd] });\n strapiPackageJSON = require(strapiPackageJSONPath);\n\n assert(typeof strapiPackageJSON === 'object');\n } catch {\n throw new Error(\n `Cannot resolve module \"${constants.STRAPI_DEPENDENCY_NAME}\" from paths [${this.cwd}]`\n );\n }\n\n const strapiVersion = strapiPackageJSON.version;\n\n if (!isValidSemVer(strapiVersion)) {\n throw new Error(\n `Invalid ${constants.STRAPI_DEPENDENCY_NAME} version found in ${strapiPackageJSONPath} (${strapiVersion})`\n );\n }\n\n return semVerFactory(strapiVersion);\n }\n}\n\nconst formatGlobCollectionPattern = (collection: string[]): string => {\n assert(\n collection.length > 0,\n 'Invalid pattern provided, the given collection needs at least 1 element'\n );\n\n return collection.length === 1 ? collection[0] : `{${collection}}`;\n};\n\nexport class PluginProject extends Project {\n readonly type = 'plugin' as const satisfies ProjectType;\n\n /**\n * Returns an array of allowed file paths for a Strapi plugin\n *\n * The resulting paths include plugin default files, the root package.json file, and plugin-specific files.\n */\n private static get paths() {\n const allowedRootPaths = formatGlobCollectionPattern(\n constants.PROJECT_PLUGIN_ALLOWED_ROOT_PATHS\n );\n const allowedExtensions = formatGlobCollectionPattern(constants.PROJECT_ALLOWED_EXTENSIONS);\n\n return [\n // Plugin default files\n `./${allowedRootPaths}/**/*.${allowedExtensions}`,\n `!./**/node_modules/**/*`,\n `!./**/dist/**/*`,\n // Root package.json file\n constants.PROJECT_PACKAGE_JSON,\n // Plugin root files\n ...constants.PROJECT_PLUGIN_ROOT_FILES,\n ];\n }\n\n constructor(cwd: string) {\n super(cwd, { paths: PluginProject.paths });\n }\n}\n\nconst isPlugin = (cwd: string) => {\n const packageJSONPath = path.join(cwd, constants.PROJECT_PACKAGE_JSON);\n\n try {\n fse.accessSync(packageJSONPath);\n } catch {\n throw new Error(`Could not find a ${constants.PROJECT_PACKAGE_JSON} file in ${cwd}`);\n }\n\n const packageJSONBuffer = fse.readFileSync(packageJSONPath);\n\n const packageJSON = JSON.parse(packageJSONBuffer.toString());\n\n return packageJSON?.strapi?.kind === 'plugin';\n};\n\n// TODO: make this async so we can use async file methods\nexport const projectFactory = (cwd: string) => {\n fse.accessSync(cwd);\n\n return isPlugin(cwd) ? new PluginProject(cwd) : new AppProject(cwd);\n};\n"],"names":["Project","getFilesByExtensions","extensions","files","filter","filePath","fileExtension","path","extname","includes","refresh","refreshPackageJSON","refreshProjectFiles","runCodemods","codemods","options","runners","createProjectCodemodsRunners","dry","reports","codemod","runner","valid","report","run","push","jsonExtensions","constants","map","ext","codeExtensions","jsonFiles","codeFiles","codeRunner","codeRunnerFactory","parser","runInBand","babel","join","print","silent","verbose","jsonRunner","jsonRunnerFactory","cwd","packageJSONPath","fse","accessSync","Error","packageJSONBuffer","readFileSync","packageJSON","JSON","parse","toString","scanner","fileScannerFactory","scan","paths","config","pathExistsSync","AppProject","allowedRootPaths","formatGlobCollectionPattern","allowedExtensions","refreshStrapiVersion","strapiVersion","findStrapiVersionFromProjectPackageJSON","findLocallyInstalledStrapiVersion","projectName","name","version","dependencies","undefined","isValidSemVer","isLiteralSemVer","semver","semVerFactory","packageSearchText","strapiPackageJSONPath","strapiPackageJSON","require","resolve","assert","type","collection","length","PluginProject","isPlugin","strapi","kind","projectFactory"],"mappings":"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"}
@@ -6,6 +6,10 @@ var node = require('esbuild-register/dist/node');
6
6
  var transformApi = require('../../json/transform-api.js');
7
7
  var file = require('../../json/file.js');
8
8
 
9
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
10
+
11
+ var assert__default = /*#__PURE__*/_interopDefault(assert);
12
+
9
13
  const transformJSON = async (codemodPath, paths, config)=>{
10
14
  const { dry } = config;
11
15
  const startTime = process.hrtime();
@@ -46,12 +50,12 @@ const transformJSON = async (codemodPath, paths, config)=>{
46
50
  const module = require(codemodPath);
47
51
  unregister();
48
52
  const codemod = typeof module.default === 'function' ? module.default : module;
49
- assert(typeof codemod === 'function', `Codemod must be a function. Found ${typeof codemod}`);
53
+ assert__default.default(typeof codemod === 'function', `Codemod must be a function. Found ${typeof codemod}`);
50
54
  for (const path of paths){
51
55
  try {
52
56
  const json = await file.readJSON(path);
53
57
  // Make sure the JSON value is a JSON object
54
- assert(typeof json === 'object' && !Array.isArray(json) && json !== null);
58
+ assert__default.default(typeof json === 'object' && !Array.isArray(json) && json !== null);
55
59
  // TODO: Optimize the API to limit parse/stringify operations
56
60
  const file$1 = {
57
61
  path,
@@ -1 +1 @@
1
- {"version":3,"file":"transform.js","sources":["../../../../../src/modules/runner/json/transform.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-var-requires */\n\nimport assert from 'node:assert';\nimport { isEqual } from 'lodash/fp';\nimport { register } from 'esbuild-register/dist/node';\n\nimport { createJSONTransformAPI, readJSON, saveJSON } from '../../json';\n\nimport type { Report } from '../../report';\n\nimport type { JSONRunnerConfiguration, JSONSourceFile, JSONTransformParams } from './types';\n\nexport const transformJSON = async (\n codemodPath: string,\n paths: string[],\n config: JSONRunnerConfiguration\n): Promise<Report.Report> => {\n const { dry } = config;\n const startTime = process.hrtime();\n\n const report: Report.Report = {\n ok: 0,\n nochange: 0,\n skip: 0,\n error: 0,\n timeElapsed: '',\n stats: {},\n };\n\n /**\n * Why do we need to include node_modules (hookIgnoreNodeModules) and specify a matcher (hookMatcher) to esbuild?\n *\n * When using tools like npx or dlx, the execution context is different from when running the program in a local\n * project. npx and dlx run the commands in a temporary installation, which is isolated from local project files.\n *\n * When hookIgnoreNodeModules is not specified (or set to true), esbuild-register instructs\n * Pirates (https://github.com/danez/pirates) to not transpile any files that come from node_modules.\n *\n * Now, when using npx or dlx to run a script, its location can be seen as \"external\" because it's not part of\n * the temporary environment where npx or dlx execute. Therefore, it's considered to be part of node_modules.\n *\n * Due to this, if hookIgnoreNodeModules is set to true or left unspecified,\n * esbuild-register won't try to compile them upon require.\n *\n * hookMatcher is added to make sure we're not matching anything else than our codemod in external directories.\n */\n const esbuildOptions = {\n extensions: ['.js', '.mjs', '.ts'],\n hookIgnoreNodeModules: false,\n hookMatcher: isEqual(codemodPath),\n };\n const { unregister } = register(esbuildOptions);\n\n const module = require(codemodPath);\n\n unregister();\n\n const codemod = typeof module.default === 'function' ? module.default : module;\n\n assert(typeof codemod === 'function', `Codemod must be a function. Found ${typeof codemod}`);\n\n for (const path of paths) {\n try {\n const json = await readJSON(path);\n\n // Make sure the JSON value is a JSON object\n assert(typeof json === 'object' && !Array.isArray(json) && json !== null);\n\n // TODO: Optimize the API to limit parse/stringify operations\n const file: JSONSourceFile = { path, json };\n const params: JSONTransformParams = { cwd: config.cwd, json: createJSONTransformAPI };\n\n const out = await codemod(file, params);\n\n if (out === undefined) {\n report.error += 1;\n }\n // If the json object has modifications\n else if (!isEqual(json, out)) {\n if (!dry) {\n await saveJSON(path, out);\n }\n report.ok += 1;\n }\n // No changes\n else {\n report.nochange += 1;\n }\n } catch {\n report.error += 1;\n }\n }\n\n const endTime = process.hrtime(startTime);\n report.timeElapsed = (endTime[0] + endTime[1] / 1e9).toFixed(3);\n\n return report;\n};\n"],"names":["transformJSON","codemodPath","paths","config","dry","startTime","process","hrtime","report","ok","nochange","skip","error","timeElapsed","stats","esbuildOptions","extensions","hookIgnoreNodeModules","hookMatcher","isEqual","unregister","register","module","require","codemod","default","assert","path","json","readJSON","Array","isArray","file","params","cwd","createJSONTransformAPI","out","undefined","saveJSON","endTime","toFixed"],"mappings":";;;;;;;;AAYO,MAAMA,aAAAA,GAAgB,OAC3BC,WAAAA,EACAC,KAAAA,EACAC,MAAAA,GAAAA;IAEA,MAAM,EAAEC,GAAG,EAAE,GAAGD,MAAAA;IAChB,MAAME,SAAAA,GAAYC,QAAQC,MAAM,EAAA;AAEhC,IAAA,MAAMC,MAAAA,GAAwB;QAC5BC,EAAAA,EAAI,CAAA;QACJC,QAAAA,EAAU,CAAA;QACVC,IAAAA,EAAM,CAAA;QACNC,KAAAA,EAAO,CAAA;QACPC,WAAAA,EAAa,EAAA;AACbC,QAAAA,KAAAA,EAAO;AACT,KAAA;AAEA;;;;;;;;;;;;;;;;AAgBC,MACD,MAAMC,cAAAA,GAAiB;QACrBC,UAAAA,EAAY;AAAC,YAAA,KAAA;AAAO,YAAA,MAAA;AAAQ,YAAA;AAAM,SAAA;QAClCC,qBAAAA,EAAuB,KAAA;AACvBC,QAAAA,WAAAA,EAAaC,UAAAA,CAAQlB,WAAAA;AACvB,KAAA;AACA,IAAA,MAAM,EAAEmB,UAAU,EAAE,GAAGC,aAAAA,CAASN,cAAAA,CAAAA;AAEhC,IAAA,MAAMO,SAASC,OAAAA,CAAQtB,WAAAA,CAAAA;AAEvBmB,IAAAA,UAAAA,EAAAA;IAEA,MAAMI,OAAAA,GAAU,OAAOF,MAAAA,CAAOG,OAAO,KAAK,UAAA,GAAaH,MAAAA,CAAOG,OAAO,GAAGH,MAAAA;AAExEI,IAAAA,MAAAA,CAAO,OAAOF,OAAAA,KAAY,UAAA,EAAY,CAAC,kCAAkC,EAAE,OAAOA,OAAAA,CAAAA,CAAS,CAAA;IAE3F,KAAK,MAAMG,QAAQzB,KAAAA,CAAO;QACxB,IAAI;YACF,MAAM0B,IAAAA,GAAO,MAAMC,aAAAA,CAASF,IAAAA,CAAAA;;YAG5BD,MAAAA,CAAO,OAAOE,SAAS,QAAA,IAAY,CAACE,MAAMC,OAAO,CAACH,SAASA,IAAAA,KAAS,IAAA,CAAA;;AAGpE,YAAA,MAAMI,MAAAA,GAAuB;AAAEL,gBAAAA,IAAAA;AAAMC,gBAAAA;AAAK,aAAA;AAC1C,YAAA,MAAMK,MAAAA,GAA8B;AAAEC,gBAAAA,GAAAA,EAAK/B,OAAO+B,GAAG;gBAAEN,IAAAA,EAAMO;AAAuB,aAAA;YAEpF,MAAMC,GAAAA,GAAM,MAAMZ,OAAAA,CAAQQ,MAAAA,EAAMC,MAAAA,CAAAA;AAEhC,YAAA,IAAIG,QAAQC,SAAAA,EAAW;AACrB7B,gBAAAA,MAAAA,CAAOI,KAAK,IAAI,CAAA;AAClB,YAAA,CAAA,MAEK,IAAI,CAACO,UAAAA,CAAQS,IAAAA,EAAMQ,GAAAA,CAAAA,EAAM;AAC5B,gBAAA,IAAI,CAAChC,GAAAA,EAAK;AACR,oBAAA,MAAMkC,cAASX,IAAAA,EAAMS,GAAAA,CAAAA;AACvB,gBAAA;AACA5B,gBAAAA,MAAAA,CAAOC,EAAE,IAAI,CAAA;YACf,CAAA,MAEK;AACHD,gBAAAA,MAAAA,CAAOE,QAAQ,IAAI,CAAA;AACrB,YAAA;AACF,QAAA,CAAA,CAAE,OAAM;AACNF,YAAAA,MAAAA,CAAOI,KAAK,IAAI,CAAA;AAClB,QAAA;AACF,IAAA;IAEA,MAAM2B,OAAAA,GAAUjC,OAAAA,CAAQC,MAAM,CAACF,SAAAA,CAAAA;AAC/BG,IAAAA,MAAAA,CAAOK,WAAW,GAAG,CAAC0B,OAAO,CAAC,CAAA,CAAE,GAAGA,OAAO,CAAC,CAAA,CAAE,GAAG,GAAE,EAAGC,OAAO,CAAC,CAAA,CAAA;IAE7D,OAAOhC,MAAAA;AACT;;;;"}
1
+ {"version":3,"file":"transform.js","sources":["../../../../../src/modules/runner/json/transform.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-var-requires */\n\nimport assert from 'node:assert';\nimport { isEqual } from 'lodash/fp';\nimport { register } from 'esbuild-register/dist/node';\n\nimport { createJSONTransformAPI, readJSON, saveJSON } from '../../json';\n\nimport type { Report } from '../../report';\n\nimport type { JSONRunnerConfiguration, JSONSourceFile, JSONTransformParams } from './types';\n\nexport const transformJSON = async (\n codemodPath: string,\n paths: string[],\n config: JSONRunnerConfiguration\n): Promise<Report.Report> => {\n const { dry } = config;\n const startTime = process.hrtime();\n\n const report: Report.Report = {\n ok: 0,\n nochange: 0,\n skip: 0,\n error: 0,\n timeElapsed: '',\n stats: {},\n };\n\n /**\n * Why do we need to include node_modules (hookIgnoreNodeModules) and specify a matcher (hookMatcher) to esbuild?\n *\n * When using tools like npx or dlx, the execution context is different from when running the program in a local\n * project. npx and dlx run the commands in a temporary installation, which is isolated from local project files.\n *\n * When hookIgnoreNodeModules is not specified (or set to true), esbuild-register instructs\n * Pirates (https://github.com/danez/pirates) to not transpile any files that come from node_modules.\n *\n * Now, when using npx or dlx to run a script, its location can be seen as \"external\" because it's not part of\n * the temporary environment where npx or dlx execute. Therefore, it's considered to be part of node_modules.\n *\n * Due to this, if hookIgnoreNodeModules is set to true or left unspecified,\n * esbuild-register won't try to compile them upon require.\n *\n * hookMatcher is added to make sure we're not matching anything else than our codemod in external directories.\n */\n const esbuildOptions = {\n extensions: ['.js', '.mjs', '.ts'],\n hookIgnoreNodeModules: false,\n hookMatcher: isEqual(codemodPath),\n };\n const { unregister } = register(esbuildOptions);\n\n const module = require(codemodPath);\n\n unregister();\n\n const codemod = typeof module.default === 'function' ? module.default : module;\n\n assert(typeof codemod === 'function', `Codemod must be a function. Found ${typeof codemod}`);\n\n for (const path of paths) {\n try {\n const json = await readJSON(path);\n\n // Make sure the JSON value is a JSON object\n assert(typeof json === 'object' && !Array.isArray(json) && json !== null);\n\n // TODO: Optimize the API to limit parse/stringify operations\n const file: JSONSourceFile = { path, json };\n const params: JSONTransformParams = { cwd: config.cwd, json: createJSONTransformAPI };\n\n const out = await codemod(file, params);\n\n if (out === undefined) {\n report.error += 1;\n }\n // If the json object has modifications\n else if (!isEqual(json, out)) {\n if (!dry) {\n await saveJSON(path, out);\n }\n report.ok += 1;\n }\n // No changes\n else {\n report.nochange += 1;\n }\n } catch {\n report.error += 1;\n }\n }\n\n const endTime = process.hrtime(startTime);\n report.timeElapsed = (endTime[0] + endTime[1] / 1e9).toFixed(3);\n\n return report;\n};\n"],"names":["transformJSON","codemodPath","paths","config","dry","startTime","process","hrtime","report","ok","nochange","skip","error","timeElapsed","stats","esbuildOptions","extensions","hookIgnoreNodeModules","hookMatcher","isEqual","unregister","register","module","require","codemod","default","assert","path","json","readJSON","Array","isArray","file","params","cwd","createJSONTransformAPI","out","undefined","saveJSON","endTime","toFixed"],"mappings":";;;;;;;;;;;;AAYO,MAAMA,aAAAA,GAAgB,OAC3BC,WAAAA,EACAC,KAAAA,EACAC,MAAAA,GAAAA;IAEA,MAAM,EAAEC,GAAG,EAAE,GAAGD,MAAAA;IAChB,MAAME,SAAAA,GAAYC,QAAQC,MAAM,EAAA;AAEhC,IAAA,MAAMC,MAAAA,GAAwB;QAC5BC,EAAAA,EAAI,CAAA;QACJC,QAAAA,EAAU,CAAA;QACVC,IAAAA,EAAM,CAAA;QACNC,KAAAA,EAAO,CAAA;QACPC,WAAAA,EAAa,EAAA;AACbC,QAAAA,KAAAA,EAAO;AACT,KAAA;AAEA;;;;;;;;;;;;;;;;AAgBC,MACD,MAAMC,cAAAA,GAAiB;QACrBC,UAAAA,EAAY;AAAC,YAAA,KAAA;AAAO,YAAA,MAAA;AAAQ,YAAA;AAAM,SAAA;QAClCC,qBAAAA,EAAuB,KAAA;AACvBC,QAAAA,WAAAA,EAAaC,UAAAA,CAAQlB,WAAAA;AACvB,KAAA;AACA,IAAA,MAAM,EAAEmB,UAAU,EAAE,GAAGC,aAAAA,CAASN,cAAAA,CAAAA;AAEhC,IAAA,MAAMO,SAASC,OAAAA,CAAQtB,WAAAA,CAAAA;AAEvBmB,IAAAA,UAAAA,EAAAA;IAEA,MAAMI,OAAAA,GAAU,OAAOF,MAAAA,CAAOG,OAAO,KAAK,UAAA,GAAaH,MAAAA,CAAOG,OAAO,GAAGH,MAAAA;AAExEI,IAAAA,uBAAAA,CAAO,OAAOF,OAAAA,KAAY,UAAA,EAAY,CAAC,kCAAkC,EAAE,OAAOA,OAAAA,CAAAA,CAAS,CAAA;IAE3F,KAAK,MAAMG,QAAQzB,KAAAA,CAAO;QACxB,IAAI;YACF,MAAM0B,IAAAA,GAAO,MAAMC,aAAAA,CAASF,IAAAA,CAAAA;;YAG5BD,uBAAAA,CAAO,OAAOE,SAAS,QAAA,IAAY,CAACE,MAAMC,OAAO,CAACH,SAASA,IAAAA,KAAS,IAAA,CAAA;;AAGpE,YAAA,MAAMI,MAAAA,GAAuB;AAAEL,gBAAAA,IAAAA;AAAMC,gBAAAA;AAAK,aAAA;AAC1C,YAAA,MAAMK,MAAAA,GAA8B;AAAEC,gBAAAA,GAAAA,EAAK/B,OAAO+B,GAAG;gBAAEN,IAAAA,EAAMO;AAAuB,aAAA;YAEpF,MAAMC,GAAAA,GAAM,MAAMZ,OAAAA,CAAQQ,MAAAA,EAAMC,MAAAA,CAAAA;AAEhC,YAAA,IAAIG,QAAQC,SAAAA,EAAW;AACrB7B,gBAAAA,MAAAA,CAAOI,KAAK,IAAI,CAAA;AAClB,YAAA,CAAA,MAEK,IAAI,CAACO,UAAAA,CAAQS,IAAAA,EAAMQ,GAAAA,CAAAA,EAAM;AAC5B,gBAAA,IAAI,CAAChC,GAAAA,EAAK;AACR,oBAAA,MAAMkC,cAASX,IAAAA,EAAMS,GAAAA,CAAAA;AACvB,gBAAA;AACA5B,gBAAAA,MAAAA,CAAOC,EAAE,IAAI,CAAA;YACf,CAAA,MAEK;AACHD,gBAAAA,MAAAA,CAAOE,QAAQ,IAAI,CAAA;AACrB,YAAA;AACF,QAAA,CAAA,CAAE,OAAM;AACNF,YAAAA,MAAAA,CAAOI,KAAK,IAAI,CAAA;AAClB,QAAA;AACF,IAAA;IAEA,MAAM2B,OAAAA,GAAUjC,OAAAA,CAAQC,MAAM,CAACF,SAAAA,CAAAA;AAC/BG,IAAAA,MAAAA,CAAOK,WAAW,GAAG,CAAC0B,OAAO,CAAC,CAAA,CAAE,GAAGA,OAAO,CAAC,CAAA,CAAE,GAAG,GAAE,EAAGC,OAAO,CAAC,CAAA,CAAA;IAE7D,OAAOhC,MAAAA;AACT;;;;"}