@modern-js/generator-utils 2.2.1 → 2.3.3

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,69 @@
1
1
  # @modern-js/generator-utils
2
2
 
3
+ ## 2.3.3
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [8280920]
8
+ - Updated dependencies [4f77eb4]
9
+ - Updated dependencies [5227370]
10
+ - Updated dependencies [7928bae]
11
+ - @modern-js/utils@1.18.0
12
+ - @modern-js/generator-common@2.3.3
13
+ - @modern-js/plugin-i18n@1.18.0
14
+
15
+ ## 2.3.1
16
+
17
+ ### Patch Changes
18
+
19
+ - fb30bca: feat: add upgrade tools and command
20
+
21
+ feat: 增加升级工具和升级命令
22
+
23
+ - f3fab28: feat: new command use solution version
24
+
25
+ feat: new 命令使用当前工程方案对应版本的插件
26
+
27
+ - Updated dependencies [1b9176f]
28
+ - Updated dependencies [77d3a38]
29
+ - Updated dependencies [fb30bca]
30
+ - Updated dependencies [151329d]
31
+ - Updated dependencies [5af9472]
32
+ - Updated dependencies [6b6a534]
33
+ - Updated dependencies [6b43a2b]
34
+ - Updated dependencies [a7be124]
35
+ - Updated dependencies [31547b4]
36
+ - @modern-js/utils@1.17.0
37
+ - @modern-js/generator-common@2.3.1
38
+ - @modern-js/plugin-i18n@1.17.0
39
+
40
+ ## 2.3.0
41
+
42
+ ### Minor Changes
43
+
44
+ - beecff68d: feat: create new project use modern current latest version
45
+
46
+ feat: @modern-js/create 创建项目使用 Modern.js 最新依赖版本
47
+
48
+ - 1100dd58c: chore: support react 18
49
+
50
+ chore: 支持 React 18
51
+
52
+ ### Patch Changes
53
+
54
+ - 9d9bbfd05: feat: update codesmith package
55
+
56
+ feat: 升级 codesmith 包版本
57
+
58
+ - Updated dependencies [641592f52]
59
+ - Updated dependencies [3904b30a5]
60
+ - Updated dependencies [1100dd58c]
61
+ - Updated dependencies [e04e6e76a]
62
+ - Updated dependencies [81c66e4a4]
63
+ - Updated dependencies [2c305b6f5]
64
+ - @modern-js/utils@1.16.0
65
+ - @modern-js/plugin-i18n@1.16.0
66
+
3
67
  ## 2.2.1
4
68
 
5
69
  ### Patch 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 } 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,6 +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
  }
53
+ export async function getModernVersion(solution, registry) {
54
+ const dep = SolutionToolsMap[solution];
55
+ const modernVersion = await getPackageVersion(dep, registry);
56
+ return modernVersion;
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
+ }
51
95
  export function getPackageManagerText(packageManager) {
52
96
  return packageManager === 'yarn' ? 'yarn' : `${packageManager} run`;
53
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
+ }
@@ -5,6 +5,8 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  var _exportNames = {
7
7
  getPackageVersion: true,
8
+ getModernVersion: true,
9
+ getModernPluginVersion: true,
8
10
  getPackageManagerText: true,
9
11
  isTsProject: true,
10
12
  getPackageObj: true,
@@ -13,13 +15,16 @@ var _exportNames = {
13
15
  validatePackagePath: true,
14
16
  getModuleProjectPath: true,
15
17
  getMWAProjectPath: true,
18
+ ora: true,
16
19
  fs: true,
20
+ semver: true,
17
21
  execa: true,
18
22
  readTsConfigByFile: true,
19
23
  getPackageManager: true,
20
24
  canUseNpm: true,
21
25
  canUsePnpm: true,
22
26
  canUseYarn: true,
27
+ isReact18: true,
23
28
  i18n: true
24
29
  };
25
30
  Object.defineProperty(exports, "canUseNpm", {
@@ -54,6 +59,8 @@ Object.defineProperty(exports, "fs", {
54
59
  });
55
60
  exports.getAllPackages = getAllPackages;
56
61
  exports.getMWAProjectPath = getMWAProjectPath;
62
+ exports.getModernPluginVersion = getModernPluginVersion;
63
+ exports.getModernVersion = getModernVersion;
57
64
  exports.getModuleProjectPath = getModuleProjectPath;
58
65
  Object.defineProperty(exports, "getPackageManager", {
59
66
  enumerable: true,
@@ -70,13 +77,31 @@ Object.defineProperty(exports, "i18n", {
70
77
  return _locale.i18n;
71
78
  }
72
79
  });
80
+ Object.defineProperty(exports, "isReact18", {
81
+ enumerable: true,
82
+ get: function () {
83
+ return _utils.isReact18;
84
+ }
85
+ });
73
86
  exports.isTsProject = isTsProject;
87
+ Object.defineProperty(exports, "ora", {
88
+ enumerable: true,
89
+ get: function () {
90
+ return _utils.ora;
91
+ }
92
+ });
74
93
  Object.defineProperty(exports, "readTsConfigByFile", {
75
94
  enumerable: true,
76
95
  get: function () {
77
96
  return _utils.readTsConfigByFile;
78
97
  }
79
98
  });
99
+ Object.defineProperty(exports, "semver", {
100
+ enumerable: true,
101
+ get: function () {
102
+ return _utils.semver;
103
+ }
104
+ });
80
105
  exports.validatePackageName = validatePackageName;
81
106
  exports.validatePackagePath = validatePackagePath;
82
107
 
@@ -84,10 +109,14 @@ var _path = _interopRequireDefault(require("path"));
84
109
 
85
110
  var _utils = require("@modern-js/utils");
86
111
 
112
+ var _generatorCommon = require("@modern-js/generator-common");
113
+
87
114
  var _stripAnsi = require("./utils/strip-ansi");
88
115
 
89
116
  var _locale = require("./locale");
90
117
 
118
+ var _package = require("./utils/package");
119
+
91
120
  var _utils2 = require("./utils");
92
121
 
93
122
  Object.keys(_utils2).forEach(function (key) {
@@ -148,6 +177,51 @@ async function getPackageVersion(packageName, registry) {
148
177
  throw new Error('not found npm, please install npm before');
149
178
  }
150
179
 
180
+ async function getModernVersion(solution, registry) {
181
+ const dep = _generatorCommon.SolutionToolsMap[solution];
182
+ const modernVersion = await getPackageVersion(dep, registry);
183
+ return modernVersion;
184
+ }
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
+
151
225
  function getPackageManagerText(packageManager) {
152
226
  return packageManager === 'yarn' ? 'yarn' : `${packageManager} run`;
153
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,8 +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 } 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>;
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>;
6
12
  export declare function getPackageManagerText(packageManager: 'pnpm' | 'yarn' | 'npm'): string;
7
13
  export declare function isTsProject(appDir: string): boolean;
8
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.2.1",
14
+ "version": "2.3.3",
15
15
  "jsnext:source": "./src/index.ts",
16
16
  "types": "./dist/types/index.d.ts",
17
17
  "main": "./dist/js/node/index.js",
@@ -28,17 +28,18 @@
28
28
  },
29
29
  "dependencies": {
30
30
  "@babel/runtime": "^7.18.0",
31
- "@modern-js/plugin-i18n": "1.15.0",
32
- "@modern-js/utils": "1.15.0"
31
+ "@modern-js/plugin-i18n": "1.18.0",
32
+ "@modern-js/generator-common": "2.3.3",
33
+ "@modern-js/utils": "1.18.0"
33
34
  },
34
35
  "devDependencies": {
35
- "@modern-js/codesmith": "^1.4.0",
36
+ "@modern-js/codesmith": "^1.5.0",
37
+ "@scripts/build": "1.18.0",
38
+ "@scripts/jest-config": "1.18.0",
36
39
  "@types/jest": "^27",
37
40
  "@types/node": "^14",
38
- "typescript": "^4",
39
- "@scripts/build": "1.15.0",
40
41
  "jest": "^27",
41
- "@scripts/jest-config": "1.15.0"
42
+ "typescript": "^4"
42
43
  },
43
44
  "sideEffects": false,
44
45
  "modernConfig": {