@modern-js/generator-utils 2.3.0 → 2.3.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,30 @@
1
1
  # @modern-js/generator-utils
2
2
 
3
+ ## 2.3.1
4
+
5
+ ### Patch Changes
6
+
7
+ - fb30bca: feat: add upgrade tools and command
8
+
9
+ feat: 增加升级工具和升级命令
10
+
11
+ - f3fab28: feat: new command use solution version
12
+
13
+ feat: new 命令使用当前工程方案对应版本的插件
14
+
15
+ - Updated dependencies [1b9176f]
16
+ - Updated dependencies [77d3a38]
17
+ - Updated dependencies [fb30bca]
18
+ - Updated dependencies [151329d]
19
+ - Updated dependencies [5af9472]
20
+ - Updated dependencies [6b6a534]
21
+ - Updated dependencies [6b43a2b]
22
+ - Updated dependencies [a7be124]
23
+ - Updated dependencies [31547b4]
24
+ - @modern-js/utils@1.17.0
25
+ - @modern-js/generator-common@2.3.1
26
+ - @modern-js/plugin-i18n@1.17.0
27
+
3
28
  ## 2.3.0
4
29
 
5
30
  ### Minor Changes
@@ -1,9 +1,11 @@
1
1
  import path from 'path';
2
- import { fs, ora, execa, getMonorepoPackages, canUseNpm, canUsePnpm, canUseYarn } from '@modern-js/utils';
2
+ import { fs, ora, execa, getMonorepoPackages, canUseNpm, canUsePnpm, canUseYarn, semver } from '@modern-js/utils';
3
+ import { SolutionToolsMap } from '@modern-js/generator-common';
3
4
  import { stripAnsi } from "./utils/strip-ansi";
4
5
  import { i18n, localeKeys } from "./locale";
6
+ import { getAvailableVersion } from "./utils/package";
5
7
  export * from "./utils";
6
- export { fs, execa, readTsConfigByFile, getPackageManager, canUseNpm, canUsePnpm, canUseYarn, isReact18 } from '@modern-js/utils';
8
+ export { ora, fs, semver, execa, readTsConfigByFile, getPackageManager, canUseNpm, canUsePnpm, canUseYarn, isReact18 } from '@modern-js/utils';
7
9
  export { i18n } from "./locale";
8
10
  export async function getPackageVersion(packageName, registry) {
9
11
  const spinner = ora('Loading...').start();
@@ -48,16 +50,48 @@ export async function getPackageVersion(packageName, registry) {
48
50
  spinner.stop();
49
51
  throw new Error('not found npm, please install npm before');
50
52
  }
51
- const SolutionDep = {
52
- mwa: '@modern-js/app-tools',
53
- module: '@modern-js/module-tools',
54
- monorepo: '@modern-js/monorepo-tools'
55
- };
56
- export async function getModernVersion(solution) {
57
- const dep = SolutionDep[solution];
58
- const modernVersion = await getPackageVersion(dep);
53
+ export async function getModernVersion(solution, registry) {
54
+ const dep = SolutionToolsMap[solution];
55
+ const modernVersion = await getPackageVersion(dep, registry);
59
56
  return modernVersion;
60
57
  }
58
+ export async function getModernPluginVersion(solution, packageName, options = {}) {
59
+ const {
60
+ cwd = process.cwd(),
61
+ registry
62
+ } = options;
63
+
64
+ const getLatetPluginVersion = async () => {
65
+ const version = await getPackageVersion(packageName, registry);
66
+ return version;
67
+ };
68
+
69
+ if (!packageName.startsWith('@modern-js')) {
70
+ return getLatetPluginVersion();
71
+ } // get project solution version
72
+
73
+
74
+ const pkgPath = path.join(require.resolve(SolutionToolsMap[solution], {
75
+ paths: [cwd]
76
+ }), '../../../../', 'package.json');
77
+
78
+ if (fs.existsSync(pkgPath)) {
79
+ const pkgInfo = fs.readJSONSync(pkgPath);
80
+ const modernVersion = pkgInfo.version;
81
+
82
+ if (typeof modernVersion !== 'string') {
83
+ return getLatetPluginVersion();
84
+ }
85
+
86
+ if (semver.lt(modernVersion, '1.15.0')) {
87
+ return getLatetPluginVersion();
88
+ }
89
+
90
+ return getAvailableVersion(packageName, modernVersion, registry);
91
+ }
92
+
93
+ return getLatetPluginVersion();
94
+ }
61
95
  export function getPackageManagerText(packageManager) {
62
96
  return packageManager === 'yarn' ? 'yarn' : `${packageManager} run`;
63
97
  }
@@ -1 +1,2 @@
1
- export * from "./strip-ansi";
1
+ export * from "./strip-ansi";
2
+ export * from "./package";
@@ -0,0 +1,88 @@
1
+ import { canUseNpm, execa, logger, semver, stripAnsi } from '@modern-js/utils'; // 判断包是否存在
2
+
3
+ export async function isPackageExist(packageName, registry) {
4
+ if (await canUseNpm()) {
5
+ const args = ['view', packageName, 'version'];
6
+
7
+ if (registry) {
8
+ args.push(`--registry=${registry}`);
9
+ }
10
+
11
+ const result = await execa('npm', args);
12
+ return stripAnsi(result.stdout);
13
+ }
14
+
15
+ throw new Error('not found npm, please install npm before');
16
+ } // 判断包是否已经废弃
17
+
18
+ export async function isPackageDeprecated(packageName, registry) {
19
+ if (await canUseNpm()) {
20
+ const args = ['view', packageName, 'deprecated'];
21
+
22
+ if (registry) {
23
+ args.push(`--registry=${registry}`);
24
+ }
25
+
26
+ const result = await execa('npm', args);
27
+ return stripAnsi(result.stdout);
28
+ }
29
+
30
+ throw new Error('not found npm, please install npm before');
31
+ } // 降低包小版本号
32
+
33
+ export function semverDecrease(version) {
34
+ const versionObj = semver.parse(version, {
35
+ loose: true
36
+ });
37
+
38
+ if (!versionObj) {
39
+ throw new Error(`Version ${version} is not valid semver`);
40
+ }
41
+
42
+ versionObj.build = [];
43
+ versionObj.prerelease = [];
44
+ versionObj.patch--;
45
+ const result = versionObj.format();
46
+
47
+ if (!semver.valid(result)) {
48
+ logger.debug(`Version ${result} is not valid semver`);
49
+ return version;
50
+ }
51
+
52
+ return result;
53
+ }
54
+ /**
55
+ * 插件存在 hotfix 版本,从 tools 版本号向上找当前插件版本号
56
+ * tools 存在 hotfix 版本,从 tools 版本号向下找当前插件版本号
57
+ * 限制只在当前小版本号范围内寻找
58
+ */
59
+
60
+ export async function getAvailableVersion(packageName, currentVersion, registry) {
61
+ let times = 5;
62
+ let version = currentVersion;
63
+
64
+ while (times) {
65
+ if (!(await isPackageExist(`${packageName}@${version}`, registry)) || (await isPackageDeprecated(`${packageName}@${version}`, registry))) {
66
+ version = semver.inc(version, 'patch');
67
+ times--;
68
+ continue;
69
+ }
70
+
71
+ return version;
72
+ }
73
+
74
+ times = 5;
75
+
76
+ while (times) {
77
+ version = semverDecrease(version);
78
+
79
+ if (!(await isPackageExist(`${packageName}@${version}`, registry)) || (await isPackageDeprecated(`${packageName}@${version}`, registry))) {
80
+ times--;
81
+ continue;
82
+ }
83
+
84
+ return version;
85
+ }
86
+
87
+ return currentVersion;
88
+ }
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  var _exportNames = {
7
7
  getPackageVersion: true,
8
8
  getModernVersion: true,
9
+ getModernPluginVersion: true,
9
10
  getPackageManagerText: true,
10
11
  isTsProject: true,
11
12
  getPackageObj: true,
@@ -14,7 +15,9 @@ var _exportNames = {
14
15
  validatePackagePath: true,
15
16
  getModuleProjectPath: true,
16
17
  getMWAProjectPath: true,
18
+ ora: true,
17
19
  fs: true,
20
+ semver: true,
18
21
  execa: true,
19
22
  readTsConfigByFile: true,
20
23
  getPackageManager: true,
@@ -56,6 +59,7 @@ Object.defineProperty(exports, "fs", {
56
59
  });
57
60
  exports.getAllPackages = getAllPackages;
58
61
  exports.getMWAProjectPath = getMWAProjectPath;
62
+ exports.getModernPluginVersion = getModernPluginVersion;
59
63
  exports.getModernVersion = getModernVersion;
60
64
  exports.getModuleProjectPath = getModuleProjectPath;
61
65
  Object.defineProperty(exports, "getPackageManager", {
@@ -80,12 +84,24 @@ Object.defineProperty(exports, "isReact18", {
80
84
  }
81
85
  });
82
86
  exports.isTsProject = isTsProject;
87
+ Object.defineProperty(exports, "ora", {
88
+ enumerable: true,
89
+ get: function () {
90
+ return _utils.ora;
91
+ }
92
+ });
83
93
  Object.defineProperty(exports, "readTsConfigByFile", {
84
94
  enumerable: true,
85
95
  get: function () {
86
96
  return _utils.readTsConfigByFile;
87
97
  }
88
98
  });
99
+ Object.defineProperty(exports, "semver", {
100
+ enumerable: true,
101
+ get: function () {
102
+ return _utils.semver;
103
+ }
104
+ });
89
105
  exports.validatePackageName = validatePackageName;
90
106
  exports.validatePackagePath = validatePackagePath;
91
107
 
@@ -93,10 +109,14 @@ var _path = _interopRequireDefault(require("path"));
93
109
 
94
110
  var _utils = require("@modern-js/utils");
95
111
 
112
+ var _generatorCommon = require("@modern-js/generator-common");
113
+
96
114
  var _stripAnsi = require("./utils/strip-ansi");
97
115
 
98
116
  var _locale = require("./locale");
99
117
 
118
+ var _package = require("./utils/package");
119
+
100
120
  var _utils2 = require("./utils");
101
121
 
102
122
  Object.keys(_utils2).forEach(function (key) {
@@ -157,18 +177,51 @@ async function getPackageVersion(packageName, registry) {
157
177
  throw new Error('not found npm, please install npm before');
158
178
  }
159
179
 
160
- const SolutionDep = {
161
- mwa: '@modern-js/app-tools',
162
- module: '@modern-js/module-tools',
163
- monorepo: '@modern-js/monorepo-tools'
164
- };
165
-
166
- async function getModernVersion(solution) {
167
- const dep = SolutionDep[solution];
168
- const modernVersion = await getPackageVersion(dep);
180
+ async function getModernVersion(solution, registry) {
181
+ const dep = _generatorCommon.SolutionToolsMap[solution];
182
+ const modernVersion = await getPackageVersion(dep, registry);
169
183
  return modernVersion;
170
184
  }
171
185
 
186
+ async function getModernPluginVersion(solution, packageName, options = {}) {
187
+ const {
188
+ cwd = process.cwd(),
189
+ registry
190
+ } = options;
191
+
192
+ const getLatetPluginVersion = async () => {
193
+ const version = await getPackageVersion(packageName, registry);
194
+ return version;
195
+ };
196
+
197
+ if (!packageName.startsWith('@modern-js')) {
198
+ return getLatetPluginVersion();
199
+ } // get project solution version
200
+
201
+
202
+ const pkgPath = _path.default.join(require.resolve(_generatorCommon.SolutionToolsMap[solution], {
203
+ paths: [cwd]
204
+ }), '../../../../', 'package.json');
205
+
206
+ if (_utils.fs.existsSync(pkgPath)) {
207
+ const pkgInfo = _utils.fs.readJSONSync(pkgPath);
208
+
209
+ const modernVersion = pkgInfo.version;
210
+
211
+ if (typeof modernVersion !== 'string') {
212
+ return getLatetPluginVersion();
213
+ }
214
+
215
+ if (_utils.semver.lt(modernVersion, '1.15.0')) {
216
+ return getLatetPluginVersion();
217
+ }
218
+
219
+ return (0, _package.getAvailableVersion)(packageName, modernVersion, registry);
220
+ }
221
+
222
+ return getLatetPluginVersion();
223
+ }
224
+
172
225
  function getPackageManagerText(packageManager) {
173
226
  return packageManager === 'yarn' ? 'yarn' : `${packageManager} run`;
174
227
  }
@@ -15,4 +15,17 @@ Object.keys(_stripAnsi).forEach(function (key) {
15
15
  return _stripAnsi[key];
16
16
  }
17
17
  });
18
+ });
19
+
20
+ var _package = require("./package");
21
+
22
+ Object.keys(_package).forEach(function (key) {
23
+ if (key === "default" || key === "__esModule") return;
24
+ if (key in exports && exports[key] === _package[key]) return;
25
+ Object.defineProperty(exports, key, {
26
+ enumerable: true,
27
+ get: function () {
28
+ return _package[key];
29
+ }
30
+ });
18
31
  });
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getAvailableVersion = getAvailableVersion;
7
+ exports.isPackageDeprecated = isPackageDeprecated;
8
+ exports.isPackageExist = isPackageExist;
9
+ exports.semverDecrease = semverDecrease;
10
+
11
+ var _utils = require("@modern-js/utils");
12
+
13
+ // 判断包是否存在
14
+ async function isPackageExist(packageName, registry) {
15
+ if (await (0, _utils.canUseNpm)()) {
16
+ const args = ['view', packageName, 'version'];
17
+
18
+ if (registry) {
19
+ args.push(`--registry=${registry}`);
20
+ }
21
+
22
+ const result = await (0, _utils.execa)('npm', args);
23
+ return (0, _utils.stripAnsi)(result.stdout);
24
+ }
25
+
26
+ throw new Error('not found npm, please install npm before');
27
+ } // 判断包是否已经废弃
28
+
29
+
30
+ async function isPackageDeprecated(packageName, registry) {
31
+ if (await (0, _utils.canUseNpm)()) {
32
+ const args = ['view', packageName, 'deprecated'];
33
+
34
+ if (registry) {
35
+ args.push(`--registry=${registry}`);
36
+ }
37
+
38
+ const result = await (0, _utils.execa)('npm', args);
39
+ return (0, _utils.stripAnsi)(result.stdout);
40
+ }
41
+
42
+ throw new Error('not found npm, please install npm before');
43
+ } // 降低包小版本号
44
+
45
+
46
+ function semverDecrease(version) {
47
+ const versionObj = _utils.semver.parse(version, {
48
+ loose: true
49
+ });
50
+
51
+ if (!versionObj) {
52
+ throw new Error(`Version ${version} is not valid semver`);
53
+ }
54
+
55
+ versionObj.build = [];
56
+ versionObj.prerelease = [];
57
+ versionObj.patch--;
58
+ const result = versionObj.format();
59
+
60
+ if (!_utils.semver.valid(result)) {
61
+ _utils.logger.debug(`Version ${result} is not valid semver`);
62
+
63
+ return version;
64
+ }
65
+
66
+ return result;
67
+ }
68
+ /**
69
+ * 插件存在 hotfix 版本,从 tools 版本号向上找当前插件版本号
70
+ * tools 存在 hotfix 版本,从 tools 版本号向下找当前插件版本号
71
+ * 限制只在当前小版本号范围内寻找
72
+ */
73
+
74
+
75
+ async function getAvailableVersion(packageName, currentVersion, registry) {
76
+ let times = 5;
77
+ let version = currentVersion;
78
+
79
+ while (times) {
80
+ if (!(await isPackageExist(`${packageName}@${version}`, registry)) || (await isPackageDeprecated(`${packageName}@${version}`, registry))) {
81
+ version = _utils.semver.inc(version, 'patch');
82
+ times--;
83
+ continue;
84
+ }
85
+
86
+ return version;
87
+ }
88
+
89
+ times = 5;
90
+
91
+ while (times) {
92
+ version = semverDecrease(version);
93
+
94
+ if (!(await isPackageExist(`${packageName}@${version}`, registry)) || (await isPackageDeprecated(`${packageName}@${version}`, registry))) {
95
+ times--;
96
+ continue;
97
+ }
98
+
99
+ return version;
100
+ }
101
+
102
+ return currentVersion;
103
+ }
@@ -1,10 +1,14 @@
1
+ import { Solution } from '@modern-js/generator-common';
1
2
  import { GeneratorContext } from '@modern-js/codesmith';
2
3
  export * from './utils';
3
- export { fs, execa, readTsConfigByFile, getPackageManager, canUseNpm, canUsePnpm, canUseYarn, isReact18 } from '@modern-js/utils';
4
+ export { ora, fs, semver, execa, readTsConfigByFile, getPackageManager, canUseNpm, canUsePnpm, canUseYarn, isReact18 } from '@modern-js/utils';
4
5
  export { i18n } from './locale';
5
6
  export declare function getPackageVersion(packageName: string, registry?: string): Promise<string>;
6
- declare type Solution = 'mwa' | 'module' | 'monorepo';
7
- export declare function getModernVersion(solution: Solution): Promise<string>;
7
+ export declare function getModernVersion(solution: Solution, registry?: string): Promise<string>;
8
+ export declare function getModernPluginVersion(solution: Solution, packageName: string, options?: {
9
+ cwd?: string;
10
+ registry?: string;
11
+ }): Promise<string>;
8
12
  export declare function getPackageManagerText(packageManager: 'pnpm' | 'yarn' | 'npm'): string;
9
13
  export declare function isTsProject(appDir: string): boolean;
10
14
  export declare function getPackageObj(context: GeneratorContext): Promise<any>;
@@ -1 +1,2 @@
1
- export * from './strip-ansi';
1
+ export * from './strip-ansi';
2
+ export * from './package';
@@ -0,0 +1,10 @@
1
+ export declare function isPackageExist(packageName: string, registry?: string): Promise<string>;
2
+ export declare function isPackageDeprecated(packageName: string, registry?: string): Promise<string>;
3
+ export declare function semverDecrease(version: string): string;
4
+ /**
5
+ * 插件存在 hotfix 版本,从 tools 版本号向上找当前插件版本号
6
+ * tools 存在 hotfix 版本,从 tools 版本号向下找当前插件版本号
7
+ * 限制只在当前小版本号范围内寻找
8
+ */
9
+
10
+ export declare function getAvailableVersion(packageName: string, currentVersion: string, registry?: string): Promise<string>;
package/package.json CHANGED
@@ -11,7 +11,7 @@
11
11
  "modern",
12
12
  "modern.js"
13
13
  ],
14
- "version": "2.3.0",
14
+ "version": "2.3.1",
15
15
  "jsnext:source": "./src/index.ts",
16
16
  "types": "./dist/types/index.d.ts",
17
17
  "main": "./dist/js/node/index.js",
@@ -28,13 +28,14 @@
28
28
  },
29
29
  "dependencies": {
30
30
  "@babel/runtime": "^7.18.0",
31
- "@modern-js/plugin-i18n": "1.16.0",
32
- "@modern-js/utils": "1.16.0"
31
+ "@modern-js/plugin-i18n": "1.17.0",
32
+ "@modern-js/generator-common": "2.3.1",
33
+ "@modern-js/utils": "1.17.0"
33
34
  },
34
35
  "devDependencies": {
35
36
  "@modern-js/codesmith": "^1.5.0",
36
- "@scripts/build": "1.15.0",
37
- "@scripts/jest-config": "1.15.0",
37
+ "@scripts/build": "1.17.0",
38
+ "@scripts/jest-config": "1.17.0",
38
39
  "@types/jest": "^27",
39
40
  "@types/node": "^14",
40
41
  "jest": "^27",