@peiyanlu/release 0.0.1 → 0.0.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/README.md +94 -37
- package/dist/cli.mjs +697 -699
- package/dist/index.cjs +3 -4
- package/dist/index.d.cts +122 -7
- package/dist/index.d.mts +122 -7
- package/dist/index.mjs +3 -3
- package/package.json +5 -9
package/dist/index.cjs
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
|
+
let _peiyanlu_ts_utils = require("@peiyanlu/ts-utils");
|
|
1
2
|
|
|
2
3
|
//#region src/config.ts
|
|
3
4
|
function defineConfig(config) {
|
|
4
5
|
return config;
|
|
5
6
|
}
|
|
6
|
-
const
|
|
7
|
-
const isPlainObject = (v) => toString(v) === "[object Object]";
|
|
8
|
-
const isFunction = (v) => toString(v) === "[object Function]";
|
|
7
|
+
const isFunction = (v) => typeof v === "function";
|
|
9
8
|
const mergeConfig = (defaults, overrides) => {
|
|
10
9
|
if (!overrides) return structuredClone(defaults);
|
|
11
10
|
if (Object.keys(defaults).length === 0) return structuredClone(overrides);
|
|
@@ -15,7 +14,7 @@ const mergeConfig = (defaults, overrides) => {
|
|
|
15
14
|
const overrideValue = overrides[key];
|
|
16
15
|
if (overrideValue === void 0) if (isFunction(defaultValue)) result[key] = defaultValue;
|
|
17
16
|
else result[key] = structuredClone(defaultValue);
|
|
18
|
-
else if (isPlainObject(defaultValue) && isPlainObject(overrideValue)) result[key] = mergeConfig(defaultValue, overrideValue);
|
|
17
|
+
else if ((0, _peiyanlu_ts_utils.isPlainObject)(defaultValue) && (0, _peiyanlu_ts_utils.isPlainObject)(overrideValue)) result[key] = mergeConfig(defaultValue, overrideValue);
|
|
19
18
|
else if (isFunction(overrideValue)) result[key] = overrideValue;
|
|
20
19
|
else result[key] = structuredClone(overrideValue);
|
|
21
20
|
}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
import { DeepPartial, DeepRequired } from "@peiyanlu/ts-utils";
|
|
2
|
+
|
|
3
|
+
//#region src/git/changetype.d.ts
|
|
4
|
+
interface CommitType {
|
|
5
|
+
type: string;
|
|
6
|
+
section: string;
|
|
7
|
+
description: string;
|
|
8
|
+
}
|
|
9
|
+
//#endregion
|
|
1
10
|
//#region src/types.d.ts
|
|
2
11
|
|
|
3
12
|
type HookTiming = 'before' | 'after';
|
|
@@ -6,33 +15,139 @@ type ReleaseHookKey = `${HookTiming}:${HookAction}`;
|
|
|
6
15
|
type ReleaseHookValue = string | string[] | (() => Promise<void> | void);
|
|
7
16
|
type HookConfig = { [key in ReleaseHookKey]: ReleaseHookValue };
|
|
8
17
|
interface ReleaseConfig {
|
|
18
|
+
/**
|
|
19
|
+
* 生命周期钩子配置
|
|
20
|
+
*/
|
|
9
21
|
hooks: HookConfig;
|
|
22
|
+
/**
|
|
23
|
+
* Git 相关配置
|
|
24
|
+
*/
|
|
10
25
|
git: {
|
|
26
|
+
/**
|
|
27
|
+
* 是否创建提交
|
|
28
|
+
*/
|
|
11
29
|
commit: boolean | undefined;
|
|
30
|
+
/**
|
|
31
|
+
* 是否创建 Git Tag
|
|
32
|
+
*/
|
|
12
33
|
tag: boolean | undefined;
|
|
34
|
+
/**
|
|
35
|
+
* 是否推送到远程仓库
|
|
36
|
+
*/
|
|
13
37
|
push: boolean | undefined;
|
|
38
|
+
/**
|
|
39
|
+
* Git 提交信息模板
|
|
40
|
+
*/
|
|
14
41
|
commitMessage: string;
|
|
42
|
+
/**
|
|
43
|
+
* 额外的 git commit 参数
|
|
44
|
+
*/
|
|
45
|
+
commitArgs: string[];
|
|
46
|
+
/**
|
|
47
|
+
* Git Tag 的消息内容
|
|
48
|
+
*/
|
|
15
49
|
tagMessage: string;
|
|
50
|
+
/**
|
|
51
|
+
* Git Tag 名称模板
|
|
52
|
+
*/
|
|
16
53
|
tagName: string;
|
|
54
|
+
/**
|
|
55
|
+
* 额外的 git tag 参数
|
|
56
|
+
*/
|
|
57
|
+
tagArgs: string[];
|
|
58
|
+
/**
|
|
59
|
+
* 额外的 git push 参数
|
|
60
|
+
*/
|
|
61
|
+
pushArgs: string[];
|
|
62
|
+
/**
|
|
63
|
+
* 是否自动添加未追踪的文件
|
|
64
|
+
*/
|
|
65
|
+
addUntrackedFiles: boolean;
|
|
66
|
+
/**
|
|
67
|
+
* 是否要求配置远程仓库
|
|
68
|
+
*/
|
|
69
|
+
requireRemote: boolean;
|
|
70
|
+
/**
|
|
71
|
+
* 是否要求当前目录为 Git 仓库
|
|
72
|
+
*/
|
|
73
|
+
requireRepository: boolean;
|
|
74
|
+
/**
|
|
75
|
+
* 是否要求工作目录保持干净(无未提交的更改)
|
|
76
|
+
*/
|
|
77
|
+
requireWorkDirClean: boolean;
|
|
17
78
|
};
|
|
79
|
+
/**
|
|
80
|
+
* NPM 发布相关配置
|
|
81
|
+
*/
|
|
18
82
|
npm: {
|
|
83
|
+
/**
|
|
84
|
+
* 是否发布到 npm
|
|
85
|
+
*/
|
|
19
86
|
publish: boolean | undefined;
|
|
20
|
-
|
|
21
|
-
|
|
87
|
+
/**
|
|
88
|
+
* 发布目录路径
|
|
89
|
+
*/
|
|
90
|
+
publishPath: string;
|
|
91
|
+
/**
|
|
92
|
+
* 额外的 npm publish 参数
|
|
93
|
+
*/
|
|
94
|
+
pushArgs: string[];
|
|
95
|
+
/**
|
|
96
|
+
* 是否跳过发布前检查
|
|
97
|
+
*/
|
|
98
|
+
skipChecks: boolean;
|
|
22
99
|
};
|
|
100
|
+
/**
|
|
101
|
+
* GitHub Release 相关配置
|
|
102
|
+
*/
|
|
23
103
|
github: {
|
|
104
|
+
/**
|
|
105
|
+
* 是否创建 GitHub Release
|
|
106
|
+
*/
|
|
24
107
|
release: boolean | undefined;
|
|
108
|
+
/**
|
|
109
|
+
* Release 展示名称
|
|
110
|
+
*/
|
|
111
|
+
releaseName: string;
|
|
112
|
+
/**
|
|
113
|
+
* 是否自动生成 Release Notes (CI)
|
|
114
|
+
*/
|
|
115
|
+
autoGenerate: boolean;
|
|
116
|
+
/**
|
|
117
|
+
* 是否标记为预发布版本
|
|
118
|
+
*/
|
|
25
119
|
prerelease: boolean;
|
|
120
|
+
/**
|
|
121
|
+
* 是否创建为草稿
|
|
122
|
+
*/
|
|
26
123
|
draft: boolean;
|
|
27
|
-
|
|
124
|
+
/**
|
|
125
|
+
* GitHub Token 引用名称
|
|
126
|
+
*/
|
|
28
127
|
tokenRef: string;
|
|
128
|
+
/**
|
|
129
|
+
* 需要上传的 Release 资源文件
|
|
130
|
+
*/
|
|
29
131
|
assets: string[];
|
|
132
|
+
/**
|
|
133
|
+
* 是否跳过 GitHub 发布前检查
|
|
134
|
+
*/
|
|
135
|
+
skipChecks: boolean;
|
|
136
|
+
};
|
|
137
|
+
/**
|
|
138
|
+
* Changelog 生成相关配置
|
|
139
|
+
*/
|
|
140
|
+
changelog: {
|
|
141
|
+
/**
|
|
142
|
+
* Changelog 输入文件路径
|
|
143
|
+
*/
|
|
144
|
+
infile: string;
|
|
145
|
+
/**
|
|
146
|
+
* 用于生成 Changelog 的提交类型映射规则
|
|
147
|
+
*/
|
|
148
|
+
types: CommitType[];
|
|
30
149
|
};
|
|
31
150
|
}
|
|
32
|
-
type Primitive = string | number | boolean | bigint | symbol | null | undefined;
|
|
33
|
-
type Builtin = Primitive | Date | RegExp | Error | Map<any, any> | Set<any> | WeakMap<any, any> | WeakSet<any>;
|
|
34
|
-
type DeepRequired<T> = T extends Builtin ? T : T extends ((...args: any[]) => any) ? T : T extends readonly (infer U)[] ? DeepRequired<U>[] : T extends Array<infer U> ? Array<DeepRequired<U>> : { [K in keyof T]-?: DeepRequired<T[K]> };
|
|
35
|
-
type DeepPartial<T> = T extends Builtin ? T : T extends ((...args: any[]) => any) ? T : T extends readonly (infer U)[] ? DeepPartial<U>[] : T extends Array<infer U> ? Array<DeepPartial<U>> : { [K in keyof T]?: DeepPartial<T[K]> };
|
|
36
151
|
//#endregion
|
|
37
152
|
//#region src/config.d.ts
|
|
38
153
|
type UserConfig = DeepPartial<ReleaseConfig>;
|
package/dist/index.d.mts
CHANGED
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
import { DeepPartial, DeepRequired } from "@peiyanlu/ts-utils";
|
|
2
|
+
|
|
3
|
+
//#region src/git/changetype.d.ts
|
|
4
|
+
interface CommitType {
|
|
5
|
+
type: string;
|
|
6
|
+
section: string;
|
|
7
|
+
description: string;
|
|
8
|
+
}
|
|
9
|
+
//#endregion
|
|
1
10
|
//#region src/types.d.ts
|
|
2
11
|
|
|
3
12
|
type HookTiming = 'before' | 'after';
|
|
@@ -6,33 +15,139 @@ type ReleaseHookKey = `${HookTiming}:${HookAction}`;
|
|
|
6
15
|
type ReleaseHookValue = string | string[] | (() => Promise<void> | void);
|
|
7
16
|
type HookConfig = { [key in ReleaseHookKey]: ReleaseHookValue };
|
|
8
17
|
interface ReleaseConfig {
|
|
18
|
+
/**
|
|
19
|
+
* 生命周期钩子配置
|
|
20
|
+
*/
|
|
9
21
|
hooks: HookConfig;
|
|
22
|
+
/**
|
|
23
|
+
* Git 相关配置
|
|
24
|
+
*/
|
|
10
25
|
git: {
|
|
26
|
+
/**
|
|
27
|
+
* 是否创建提交
|
|
28
|
+
*/
|
|
11
29
|
commit: boolean | undefined;
|
|
30
|
+
/**
|
|
31
|
+
* 是否创建 Git Tag
|
|
32
|
+
*/
|
|
12
33
|
tag: boolean | undefined;
|
|
34
|
+
/**
|
|
35
|
+
* 是否推送到远程仓库
|
|
36
|
+
*/
|
|
13
37
|
push: boolean | undefined;
|
|
38
|
+
/**
|
|
39
|
+
* Git 提交信息模板
|
|
40
|
+
*/
|
|
14
41
|
commitMessage: string;
|
|
42
|
+
/**
|
|
43
|
+
* 额外的 git commit 参数
|
|
44
|
+
*/
|
|
45
|
+
commitArgs: string[];
|
|
46
|
+
/**
|
|
47
|
+
* Git Tag 的消息内容
|
|
48
|
+
*/
|
|
15
49
|
tagMessage: string;
|
|
50
|
+
/**
|
|
51
|
+
* Git Tag 名称模板
|
|
52
|
+
*/
|
|
16
53
|
tagName: string;
|
|
54
|
+
/**
|
|
55
|
+
* 额外的 git tag 参数
|
|
56
|
+
*/
|
|
57
|
+
tagArgs: string[];
|
|
58
|
+
/**
|
|
59
|
+
* 额外的 git push 参数
|
|
60
|
+
*/
|
|
61
|
+
pushArgs: string[];
|
|
62
|
+
/**
|
|
63
|
+
* 是否自动添加未追踪的文件
|
|
64
|
+
*/
|
|
65
|
+
addUntrackedFiles: boolean;
|
|
66
|
+
/**
|
|
67
|
+
* 是否要求配置远程仓库
|
|
68
|
+
*/
|
|
69
|
+
requireRemote: boolean;
|
|
70
|
+
/**
|
|
71
|
+
* 是否要求当前目录为 Git 仓库
|
|
72
|
+
*/
|
|
73
|
+
requireRepository: boolean;
|
|
74
|
+
/**
|
|
75
|
+
* 是否要求工作目录保持干净(无未提交的更改)
|
|
76
|
+
*/
|
|
77
|
+
requireWorkDirClean: boolean;
|
|
17
78
|
};
|
|
79
|
+
/**
|
|
80
|
+
* NPM 发布相关配置
|
|
81
|
+
*/
|
|
18
82
|
npm: {
|
|
83
|
+
/**
|
|
84
|
+
* 是否发布到 npm
|
|
85
|
+
*/
|
|
19
86
|
publish: boolean | undefined;
|
|
20
|
-
|
|
21
|
-
|
|
87
|
+
/**
|
|
88
|
+
* 发布目录路径
|
|
89
|
+
*/
|
|
90
|
+
publishPath: string;
|
|
91
|
+
/**
|
|
92
|
+
* 额外的 npm publish 参数
|
|
93
|
+
*/
|
|
94
|
+
pushArgs: string[];
|
|
95
|
+
/**
|
|
96
|
+
* 是否跳过发布前检查
|
|
97
|
+
*/
|
|
98
|
+
skipChecks: boolean;
|
|
22
99
|
};
|
|
100
|
+
/**
|
|
101
|
+
* GitHub Release 相关配置
|
|
102
|
+
*/
|
|
23
103
|
github: {
|
|
104
|
+
/**
|
|
105
|
+
* 是否创建 GitHub Release
|
|
106
|
+
*/
|
|
24
107
|
release: boolean | undefined;
|
|
108
|
+
/**
|
|
109
|
+
* Release 展示名称
|
|
110
|
+
*/
|
|
111
|
+
releaseName: string;
|
|
112
|
+
/**
|
|
113
|
+
* 是否自动生成 Release Notes (CI)
|
|
114
|
+
*/
|
|
115
|
+
autoGenerate: boolean;
|
|
116
|
+
/**
|
|
117
|
+
* 是否标记为预发布版本
|
|
118
|
+
*/
|
|
25
119
|
prerelease: boolean;
|
|
120
|
+
/**
|
|
121
|
+
* 是否创建为草稿
|
|
122
|
+
*/
|
|
26
123
|
draft: boolean;
|
|
27
|
-
|
|
124
|
+
/**
|
|
125
|
+
* GitHub Token 引用名称
|
|
126
|
+
*/
|
|
28
127
|
tokenRef: string;
|
|
128
|
+
/**
|
|
129
|
+
* 需要上传的 Release 资源文件
|
|
130
|
+
*/
|
|
29
131
|
assets: string[];
|
|
132
|
+
/**
|
|
133
|
+
* 是否跳过 GitHub 发布前检查
|
|
134
|
+
*/
|
|
135
|
+
skipChecks: boolean;
|
|
136
|
+
};
|
|
137
|
+
/**
|
|
138
|
+
* Changelog 生成相关配置
|
|
139
|
+
*/
|
|
140
|
+
changelog: {
|
|
141
|
+
/**
|
|
142
|
+
* Changelog 输入文件路径
|
|
143
|
+
*/
|
|
144
|
+
infile: string;
|
|
145
|
+
/**
|
|
146
|
+
* 用于生成 Changelog 的提交类型映射规则
|
|
147
|
+
*/
|
|
148
|
+
types: CommitType[];
|
|
30
149
|
};
|
|
31
150
|
}
|
|
32
|
-
type Primitive = string | number | boolean | bigint | symbol | null | undefined;
|
|
33
|
-
type Builtin = Primitive | Date | RegExp | Error | Map<any, any> | Set<any> | WeakMap<any, any> | WeakSet<any>;
|
|
34
|
-
type DeepRequired<T> = T extends Builtin ? T : T extends ((...args: any[]) => any) ? T : T extends readonly (infer U)[] ? DeepRequired<U>[] : T extends Array<infer U> ? Array<DeepRequired<U>> : { [K in keyof T]-?: DeepRequired<T[K]> };
|
|
35
|
-
type DeepPartial<T> = T extends Builtin ? T : T extends ((...args: any[]) => any) ? T : T extends readonly (infer U)[] ? DeepPartial<U>[] : T extends Array<infer U> ? Array<DeepPartial<U>> : { [K in keyof T]?: DeepPartial<T[K]> };
|
|
36
151
|
//#endregion
|
|
37
152
|
//#region src/config.d.ts
|
|
38
153
|
type UserConfig = DeepPartial<ReleaseConfig>;
|
package/dist/index.mjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
+
import { isPlainObject } from "@peiyanlu/ts-utils";
|
|
2
|
+
|
|
1
3
|
//#region src/config.ts
|
|
2
4
|
function defineConfig(config) {
|
|
3
5
|
return config;
|
|
4
6
|
}
|
|
5
|
-
const
|
|
6
|
-
const isPlainObject = (v) => toString(v) === "[object Object]";
|
|
7
|
-
const isFunction = (v) => toString(v) === "[object Function]";
|
|
7
|
+
const isFunction = (v) => typeof v === "function";
|
|
8
8
|
const mergeConfig = (defaults, overrides) => {
|
|
9
9
|
if (!overrides) return structuredClone(defaults);
|
|
10
10
|
if (Object.keys(defaults).length === 0) return structuredClone(overrides);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@peiyanlu/release",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.3",
|
|
4
4
|
"description": "Release project tool.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -8,8 +8,6 @@
|
|
|
8
8
|
"bin": {
|
|
9
9
|
"release": "index.js"
|
|
10
10
|
},
|
|
11
|
-
"main": "dist/index.cjs",
|
|
12
|
-
"types": "dist/index.d.cts",
|
|
13
11
|
"exports": {
|
|
14
12
|
".": {
|
|
15
13
|
"import": {
|
|
@@ -26,14 +24,13 @@
|
|
|
26
24
|
"dev": "tsdown -w",
|
|
27
25
|
"build": "tsdown",
|
|
28
26
|
"prepublish": "tsdown",
|
|
29
|
-
"test": "vitest run"
|
|
30
|
-
"test:cov": "vitest run --coverage"
|
|
27
|
+
"test": "vitest run"
|
|
31
28
|
},
|
|
32
29
|
"dependencies": {
|
|
33
30
|
"@clack/prompts": "^0.11.0",
|
|
34
31
|
"@octokit/rest": "^22.0.1",
|
|
35
|
-
"@peiyanlu/cli-utils": "^0.0.
|
|
36
|
-
"@peiyanlu/ts-utils": "^0.0.
|
|
32
|
+
"@peiyanlu/cli-utils": "^0.0.4",
|
|
33
|
+
"@peiyanlu/ts-utils": "^0.0.4",
|
|
37
34
|
"ansis": "^4.2.0",
|
|
38
35
|
"commander": "^14.0.2",
|
|
39
36
|
"mime-types": "^3.0.2",
|
|
@@ -45,8 +42,7 @@
|
|
|
45
42
|
"@types/semver": "^7.7.1",
|
|
46
43
|
"@types/mime-types": "^3.0.1",
|
|
47
44
|
"@types/node": "^24.10.3",
|
|
48
|
-
"
|
|
49
|
-
"tsdown": "^0.18.1",
|
|
45
|
+
"tsdown": "^0.18.4",
|
|
50
46
|
"typescript": "^5.9.3",
|
|
51
47
|
"vitest": "^4.0.15"
|
|
52
48
|
},
|