anl 1.7.2 → 1.7.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/lib/_virtual/argument.js +1 -0
- package/lib/_virtual/command.js +1 -0
- package/lib/_virtual/error.js +1 -0
- package/lib/_virtual/help.js +1 -0
- package/lib/_virtual/index.js +1 -0
- package/lib/_virtual/index2.js +1 -0
- package/lib/_virtual/option.js +1 -0
- package/lib/_virtual/suggestSimilar.js +1 -0
- package/lib/ajax-config/api-type.d.ts +20 -0
- package/lib/ajax-config/config.ts +81 -0
- package/lib/ajax-config/error-message.ts +59 -0
- package/lib/ajax-config/fetch.ts +128 -0
- package/lib/data/open-api.json.js +1 -0
- package/lib/git-local-config/.commit-type.cjs +89 -0
- package/lib/git-local-config/.gitattributes +2 -0
- package/lib/git-local-config/.gitconfig +18 -0
- package/lib/git-local-config/.githooks/commit-msg +95 -0
- package/lib/git-local-config/.githooks/get-commit-emoji.cjs +16 -0
- package/lib/git-local-config/.gitscripts/get-branch-types.cjs +43 -0
- package/lib/git-local-config/.gitscripts/get-branch-types.js +43 -0
- package/lib/git-local-config/.gitscripts/random-branch.bat +97 -0
- package/lib/git-local-config/.gitscripts/random-branch.sh +102 -0
- package/lib/node_modules/@inquirer/checkbox/dist/esm/index.mjs.js +1 -0
- package/lib/node_modules/@inquirer/confirm/dist/esm/index.mjs.js +1 -0
- package/lib/node_modules/@inquirer/core/dist/esm/lib/Separator.mjs.js +1 -0
- package/lib/node_modules/@inquirer/core/dist/esm/lib/create-prompt.mjs.js +1 -0
- package/lib/node_modules/@inquirer/core/dist/esm/lib/errors.mjs.js +1 -0
- package/lib/node_modules/@inquirer/core/dist/esm/lib/hook-engine.mjs.js +1 -0
- package/lib/node_modules/@inquirer/core/dist/esm/lib/key.mjs.js +1 -0
- package/lib/node_modules/@inquirer/core/dist/esm/lib/make-theme.mjs.js +1 -0
- package/lib/node_modules/@inquirer/core/dist/esm/lib/pagination/lines.mjs.js +1 -0
- package/lib/node_modules/@inquirer/core/dist/esm/lib/pagination/position.mjs.js +1 -0
- package/lib/node_modules/@inquirer/core/dist/esm/lib/pagination/use-pagination.mjs.js +1 -0
- package/lib/node_modules/@inquirer/core/dist/esm/lib/promise-polyfill.mjs.js +1 -0
- package/lib/node_modules/@inquirer/core/dist/esm/lib/screen-manager.mjs.js +1 -0
- package/lib/node_modules/@inquirer/core/dist/esm/lib/theme.mjs.js +1 -0
- package/lib/node_modules/@inquirer/core/dist/esm/lib/use-effect.mjs.js +1 -0
- package/lib/node_modules/@inquirer/core/dist/esm/lib/use-keypress.mjs.js +1 -0
- package/lib/node_modules/@inquirer/core/dist/esm/lib/use-memo.mjs.js +1 -0
- package/lib/node_modules/@inquirer/core/dist/esm/lib/use-prefix.mjs.js +1 -0
- package/lib/node_modules/@inquirer/core/dist/esm/lib/use-ref.mjs.js +1 -0
- package/lib/node_modules/@inquirer/core/dist/esm/lib/use-state.mjs.js +1 -0
- package/lib/node_modules/@inquirer/core/dist/esm/lib/utils.mjs.js +1 -0
- package/lib/node_modules/@inquirer/core/node_modules/signal-exit/dist/mjs/index.js +1 -0
- package/lib/node_modules/@inquirer/core/node_modules/signal-exit/dist/mjs/signals.js +1 -0
- package/lib/node_modules/@inquirer/editor/dist/esm/index.mjs.js +1 -0
- package/lib/node_modules/@inquirer/expand/dist/esm/index.mjs.js +1 -0
- package/lib/node_modules/@inquirer/figures/dist/esm/index.js +1 -0
- package/lib/node_modules/@inquirer/input/dist/esm/index.mjs.js +1 -0
- package/lib/node_modules/@inquirer/number/dist/esm/index.mjs.js +1 -0
- package/lib/node_modules/@inquirer/password/dist/esm/index.mjs.js +1 -0
- package/lib/node_modules/@inquirer/rawlist/dist/esm/index.mjs.js +1 -0
- package/lib/node_modules/@inquirer/search/dist/esm/index.mjs.js +1 -0
- package/lib/node_modules/@inquirer/select/dist/esm/index.mjs.js +1 -0
- package/lib/node_modules/commander/esm.mjs.js +1 -0
- package/lib/node_modules/commander/index.js +1 -0
- package/lib/node_modules/commander/lib/argument.js +1 -0
- package/lib/node_modules/commander/lib/command.js +1 -0
- package/lib/node_modules/commander/lib/error.js +1 -0
- package/lib/node_modules/commander/lib/help.js +1 -0
- package/lib/node_modules/commander/lib/option.js +1 -0
- package/lib/node_modules/commander/lib/suggestSimilar.js +1 -0
- package/lib/node_modules/inquirer/dist/esm/index.mjs.js +1 -0
- package/lib/node_modules/inquirer/dist/esm/ui/prompt.mjs.js +1 -0
- package/lib/node_modules/run-async/index.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/Observable.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/Subscriber.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/Subscription.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/config.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/lastValueFrom.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/observable/defer.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/observable/empty.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/observable/from.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/observable/innerFrom.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/observable/of.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/operators/OperatorSubscriber.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/operators/concatMap.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/operators/filter.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/operators/map.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/operators/mergeInternals.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/operators/mergeMap.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/operators/observeOn.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/operators/reduce.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/operators/scanInternals.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/operators/subscribeOn.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleArray.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleAsyncIterable.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleIterable.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleObservable.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/scheduled/schedulePromise.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/scheduled/scheduleReadableStreamLike.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/scheduled/scheduled.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/scheduler/timeoutProvider.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/symbol/iterator.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/symbol/observable.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/util/EmptyError.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/util/UnsubscriptionError.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/util/args.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/util/arrRemove.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/util/createErrorClass.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/util/errorContext.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/util/executeSchedule.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/util/identity.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/util/isArrayLike.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/util/isAsyncIterable.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/util/isFunction.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/util/isInteropObservable.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/util/isIterable.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/util/isObservable.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/util/isPromise.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/util/isReadableStreamLike.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/util/isScheduler.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/util/lift.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/util/noop.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/util/pipe.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/util/reportUnhandledError.js +1 -0
- package/lib/node_modules/rxjs/dist/esm5/internal/util/throwUnobservableError.js +1 -0
- package/lib/node_modules/tslib/tslib.es6.js +1 -0
- package/lib/package.json.js +1 -0
- package/lib/src/build-type/core/components.js +1 -0
- package/lib/src/build-type/core/get-data.js +1 -0
- package/lib/src/build-type/core/path.js +1 -0
- package/lib/src/build-type/index.js +1 -0
- package/lib/src/build-type/tools/index.js +1 -0
- package/lib/src/git-local-config/index.js +1 -0
- package/lib/src/git-local-config/utils.js +1 -0
- package/lib/src/index.js +1 -0
- package/lib/src/standard/const.js +1 -0
- package/lib/src/standard/install-commitlint.js +1 -0
- package/lib/src/standard/install-eslint.js +1 -0
- package/lib/src/standard/lint-init.js +1 -0
- package/lib/src/standard/prettier.js +1 -0
- package/lib/src/standard/vscode.js +1 -0
- package/lib/src/utils/index.js +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.__exports={};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.__exports={};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.__exports={};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.__exports={};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.__exports={};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.runAsync={exports:{}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.__exports={};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});exports.__exports={};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
type TDatalevel = 'data' | 'serve' | 'axios';
|
|
2
|
+
type RServe<T> = Promise<ResponseModel<T>>;
|
|
3
|
+
|
|
4
|
+
type RAxios<T> = Promise<import('axios').AxiosResponse<ResponseModel<T>>>;
|
|
5
|
+
|
|
6
|
+
type ResponseModel<T> = {
|
|
7
|
+
code: number;
|
|
8
|
+
msg: string;
|
|
9
|
+
data: T;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
interface IRequestFnRestParams<P = any> {
|
|
13
|
+
config?: import('axios').AxiosRequestConfig<P>;
|
|
14
|
+
[key: string]: any;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
type IRequestFnParams<P = any> = import('axios').AxiosRequestConfig<P> & {
|
|
18
|
+
query?: any;
|
|
19
|
+
body?: any;
|
|
20
|
+
};
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import type { AxiosInstance } from 'axios';
|
|
2
|
+
|
|
3
|
+
import axios from 'axios';
|
|
4
|
+
|
|
5
|
+
// 这里 环境判断 自行替换
|
|
6
|
+
const IS_PROD = false;
|
|
7
|
+
import { message } from 'antd/message';
|
|
8
|
+
|
|
9
|
+
const { VITE_API_URL, VITE_API_PROXY, VITE_PUBLIC_PATH } = import.meta.env;
|
|
10
|
+
|
|
11
|
+
const HTTP_PROXY = `${VITE_PUBLIC_PATH}${VITE_API_PROXY}`;
|
|
12
|
+
// 基础URL
|
|
13
|
+
export const BASE_URL = IS_PROD ? VITE_API_URL : HTTP_PROXY;
|
|
14
|
+
|
|
15
|
+
export const dio: AxiosInstance = axios.create({
|
|
16
|
+
// 设置baseUr地址,如果通过proxy跨域可直接填写base地址
|
|
17
|
+
baseURL: BASE_URL,
|
|
18
|
+
// 定义统一的请求头部
|
|
19
|
+
headers: {
|
|
20
|
+
'Content-Type': 'application/json',
|
|
21
|
+
},
|
|
22
|
+
// 配置请求超时时间
|
|
23
|
+
timeout: 30000,
|
|
24
|
+
// http 状态码判断
|
|
25
|
+
validateStatus(status: number) {
|
|
26
|
+
switch (status) {
|
|
27
|
+
case 200:
|
|
28
|
+
// window.location.href = VITE_PUBLIC_PATH + 404;
|
|
29
|
+
break;
|
|
30
|
+
case 400:
|
|
31
|
+
message.error({ type: 'error', content: '请求无效或格式错误!' });
|
|
32
|
+
break;
|
|
33
|
+
case 401:
|
|
34
|
+
message.error({ type: 'error', content: '登录过期,请重新登陆!' });
|
|
35
|
+
break;
|
|
36
|
+
case 403:
|
|
37
|
+
message.error({ type: 'error', content: '服务器拒绝请求!' });
|
|
38
|
+
break;
|
|
39
|
+
case 404:
|
|
40
|
+
message.error({ type: 'error', content: '资源未找到' });
|
|
41
|
+
break;
|
|
42
|
+
case 500:
|
|
43
|
+
message.error({ type: 'error', content: '服务器内部错误' });
|
|
44
|
+
break;
|
|
45
|
+
case 502:
|
|
46
|
+
message.error({ type: 'error', content: '网关或代理服务器收到无效响应' });
|
|
47
|
+
break;
|
|
48
|
+
case 503:
|
|
49
|
+
message.error({ type: 'error', content: '服务器暂时无法处理请求' });
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
return true;
|
|
54
|
+
},
|
|
55
|
+
});
|
|
56
|
+
// 请求拦截
|
|
57
|
+
dio.interceptors.request.use(
|
|
58
|
+
(config) => {
|
|
59
|
+
config.headers['Authorization'] = `Bearer 【auth -> replace】`;
|
|
60
|
+
return config;
|
|
61
|
+
},
|
|
62
|
+
(error) => {
|
|
63
|
+
console.error('request interceptors', error);
|
|
64
|
+
},
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
// 响应拦截
|
|
68
|
+
dio.interceptors.response.use(
|
|
69
|
+
(response) => {
|
|
70
|
+
// 对响应数据做处理,例如只返回data部分
|
|
71
|
+
if (response.data.code === 4001) {
|
|
72
|
+
// 退出登录逻辑 自己写
|
|
73
|
+
window.location.href = VITE_PUBLIC_PATH + 'login';
|
|
74
|
+
}
|
|
75
|
+
if (response.headers['Authorization']) {
|
|
76
|
+
// 设置 token 自己实现
|
|
77
|
+
}
|
|
78
|
+
return response;
|
|
79
|
+
},
|
|
80
|
+
(error) => Promise.reject(error),
|
|
81
|
+
);
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { AxiosResponse } from 'axios';
|
|
2
|
+
|
|
3
|
+
import { message } from 'antd';
|
|
4
|
+
|
|
5
|
+
type BaseResponse<T> = {
|
|
6
|
+
code: number;
|
|
7
|
+
msg: string;
|
|
8
|
+
data: T;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* 跳过提示的 code 码
|
|
13
|
+
*/
|
|
14
|
+
const skipTipCode: number[] = [4023, 4009];
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* 需要重写提示的 code 码
|
|
18
|
+
*/
|
|
19
|
+
const rewriteCodeMessage = ({ code = 10000, msg = '网络错误,稍后重试!' }: BaseResponse<unknown>) => {
|
|
20
|
+
switch (code) {
|
|
21
|
+
case 10000:
|
|
22
|
+
return { code, msg: '系统错误,稍后重试!' };
|
|
23
|
+
case 4001:
|
|
24
|
+
return { code, msg: '登录超时,请重新登录!' };
|
|
25
|
+
case 4011:
|
|
26
|
+
return { code, msg: '背景名称已存在,请重新修改' };
|
|
27
|
+
case 4016:
|
|
28
|
+
return { code, msg: '画布信息保存失败,请稍后重试' };
|
|
29
|
+
case 4021:
|
|
30
|
+
return { code, msg: '无可推荐人物形象,请自行生成' };
|
|
31
|
+
default:
|
|
32
|
+
return { code, msg };
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
export const messageTip = ({ data }: AxiosResponse<BaseResponse<unknown>>) => {
|
|
37
|
+
if (Object.prototype.toString.call(data) !== '[object Object]') return;
|
|
38
|
+
if (!('msg' in data && 'code' in data)) return;
|
|
39
|
+
|
|
40
|
+
const { code, msg } = rewriteCodeMessage(data);
|
|
41
|
+
|
|
42
|
+
if (skipTipCode.includes(code)) return;
|
|
43
|
+
|
|
44
|
+
if (code >= 2000 && code <= 3999) {
|
|
45
|
+
message.inof(msg);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
if (code > 3999 && code <= 4999) {
|
|
49
|
+
message.warning(msg);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
if (code > 4999 && code <= 5999) {
|
|
53
|
+
message.error(msg);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (code >= 9000) {
|
|
57
|
+
message.error(msg);
|
|
58
|
+
}
|
|
59
|
+
};
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import type { AxiosResponse } from 'axios';
|
|
2
|
+
|
|
3
|
+
import { dio as axios } from './config';
|
|
4
|
+
import { messageTip } from './error-message';
|
|
5
|
+
|
|
6
|
+
function GET<R = unknown>(url: string, params: IRequestFnParams, datalevel?: 'serve'): RServe<R>;
|
|
7
|
+
function GET<R = unknown>(url: string, params: IRequestFnParams, datalevel?: 'data'): Promise<R>;
|
|
8
|
+
function GET<R = unknown>(url: string, params: IRequestFnParams, datalevel?: 'axios'): RAxios<R>;
|
|
9
|
+
function GET<R = unknown>(url: string, params: IRequestFnParams, datalevel: TDatalevel = 'serve') {
|
|
10
|
+
return axios
|
|
11
|
+
.request<any, AxiosResponse<ResponseModel<R>>>({
|
|
12
|
+
...params,
|
|
13
|
+
url,
|
|
14
|
+
params: params.query,
|
|
15
|
+
method: 'get',
|
|
16
|
+
})
|
|
17
|
+
.then((res) => {
|
|
18
|
+
messageTip(res);
|
|
19
|
+
switch (datalevel) {
|
|
20
|
+
case 'data':
|
|
21
|
+
return res.data.data;
|
|
22
|
+
case 'serve':
|
|
23
|
+
return res.data;
|
|
24
|
+
case 'axios':
|
|
25
|
+
return res;
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function DELETE<R = unknown>(url: string, params: IRequestFnParams, datalevel?: 'serve'): RServe<R>;
|
|
31
|
+
function DELETE<R = unknown>(url: string, params: IRequestFnParams, datalevel?: 'data'): Promise<R>;
|
|
32
|
+
function DELETE<R = unknown>(url: string, params: IRequestFnParams, datalevel?: 'axios'): RAxios<R>;
|
|
33
|
+
function DELETE<R = unknown>(url: string, params: IRequestFnParams, datalevel: TDatalevel = 'serve') {
|
|
34
|
+
return axios
|
|
35
|
+
.request<any, AxiosResponse<ResponseModel<R>>>({
|
|
36
|
+
...params,
|
|
37
|
+
url,
|
|
38
|
+
params: params.query,
|
|
39
|
+
method: 'delete',
|
|
40
|
+
})
|
|
41
|
+
.then((res) => {
|
|
42
|
+
messageTip(res);
|
|
43
|
+
switch (datalevel) {
|
|
44
|
+
case 'data':
|
|
45
|
+
return res.data.data;
|
|
46
|
+
case 'serve':
|
|
47
|
+
return res.data;
|
|
48
|
+
case 'axios':
|
|
49
|
+
return res;
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function PUT<R = unknown>(url: string, params: IRequestFnParams, datalevel?: 'serve'): RServe<R>;
|
|
55
|
+
function PUT<R = unknown>(url: string, params: IRequestFnParams, datalevel?: 'data'): Promise<R>;
|
|
56
|
+
function PUT<R = unknown>(url: string, params: IRequestFnParams, datalevel?: 'axios'): RAxios<R>;
|
|
57
|
+
function PUT<R = unknown>(url: string, { query, body, ...rest }: IRequestFnParams, datalevel: TDatalevel = 'serve') {
|
|
58
|
+
return axios
|
|
59
|
+
.request<any, AxiosResponse<ResponseModel<R>>>({
|
|
60
|
+
...rest,
|
|
61
|
+
url,
|
|
62
|
+
params: query,
|
|
63
|
+
data: body,
|
|
64
|
+
method: 'put',
|
|
65
|
+
})
|
|
66
|
+
.then((res) => {
|
|
67
|
+
messageTip(res);
|
|
68
|
+
switch (datalevel) {
|
|
69
|
+
case 'data':
|
|
70
|
+
return res.data.data;
|
|
71
|
+
case 'serve':
|
|
72
|
+
return res.data;
|
|
73
|
+
case 'axios':
|
|
74
|
+
return res;
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function POST<R = unknown>(url: string, params: IRequestFnParams, datalevel?: 'serve'): RServe<R>;
|
|
80
|
+
function POST<R = unknown>(url: string, params: IRequestFnParams, datalevel?: 'data'): Promise<R>;
|
|
81
|
+
function POST<R = unknown>(url: string, params: IRequestFnParams, datalevel?: 'axios'): RAxios<R>;
|
|
82
|
+
function POST<R = unknown>(url: string, { query, body, ...rest }: IRequestFnParams, datalevel: TDatalevel = 'serve') {
|
|
83
|
+
return axios
|
|
84
|
+
.request<any, AxiosResponse<ResponseModel<R>>>({
|
|
85
|
+
...rest,
|
|
86
|
+
url,
|
|
87
|
+
params: query,
|
|
88
|
+
data: body,
|
|
89
|
+
method: 'post',
|
|
90
|
+
})
|
|
91
|
+
.then((res) => {
|
|
92
|
+
messageTip(res);
|
|
93
|
+
switch (datalevel) {
|
|
94
|
+
case 'data':
|
|
95
|
+
return res.data.data;
|
|
96
|
+
case 'serve':
|
|
97
|
+
return res.data;
|
|
98
|
+
case 'axios':
|
|
99
|
+
return res;
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function PATCH<R = unknown>(url: string, params: IRequestFnParams, datalevel?: 'serve'): RServe<R>;
|
|
105
|
+
function PATCH<R = unknown>(url: string, params: IRequestFnParams, datalevel?: 'data'): Promise<R>;
|
|
106
|
+
function PATCH<R = unknown>(url: string, params: IRequestFnParams, datalevel?: 'axios'): RAxios<R>;
|
|
107
|
+
function PATCH<R = unknown>(url: string, { query, body, ...rest }: IRequestFnParams, datalevel: TDatalevel = 'serve') {
|
|
108
|
+
return axios
|
|
109
|
+
.request<any, AxiosResponse<ResponseModel<R>>>({
|
|
110
|
+
...rest,
|
|
111
|
+
url,
|
|
112
|
+
params: query,
|
|
113
|
+
data: body,
|
|
114
|
+
method: 'patch',
|
|
115
|
+
})
|
|
116
|
+
.then((res) => {
|
|
117
|
+
messageTip(res);
|
|
118
|
+
switch (datalevel) {
|
|
119
|
+
case 'data':
|
|
120
|
+
return res.data.data;
|
|
121
|
+
case 'serve':
|
|
122
|
+
return res.data;
|
|
123
|
+
case 'axios':
|
|
124
|
+
return res;
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
export { DELETE, GET, PATCH, POST, PUT };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e="3.0.1",t={title:"Swagger Generator",description:"This is an online swagger codegen server. You can find out more at https://github.com/swagger-api/swagger-codegen or on [irc.freenode.net, #swagger](http://swagger.io/irc/).",license:{name:"Apache 2.0",url:"http://www.apache.org/licenses/LICENSE-2.0.html"},version:"3.0.73"},r=[{url:"/api"}],n=[{name:"clients"},{name:"servers"},{name:"documentation"},{name:"config"}],o={"/generate":{get:{tags:["clients","servers","documentation","config"],summary:"Generates and download code. GenerationRequest input provided as JSON available at URL specified in parameter codegenOptionsURL.",operationId:"generateFromURL",parameters:[{name:"codegenOptionsURL",in:"query",required:!0,schema:{type:"string"}}],responses:{200:{description:"successful operation",content:{"application/octet-stream":{schema:{type:"string",format:"binary"}}}}},"x-swagger-router-controller":"io.swagger.v3.generator.online.GeneratorController"},post:{tags:["clients","servers","documentation","config"],summary:"Generates and download code. GenerationRequest input provided as request body.",operationId:"generate",requestBody:{content:{"application/json":{schema:{$ref:"#/components/schemas/GenerationRequest"}}}},responses:{200:{description:"successful operation",content:{"application/octet-stream":{schema:{type:"string",format:"binary"}}}}},"x-swagger-router-controller":"io.swagger.v3.generator.online.GeneratorController"}},"/clients":{get:{tags:["clients","documentation"],summary:"Deprecated, use '/{type}/{version}' instead. List generator languages of type 'client' or 'documentation' for given codegen version (defaults to V3)",operationId:"clientLanguages",parameters:[{$ref:"#/components/parameters/version"},{name:"clientOnly",in:"query",description:"flag to only return languages of type `client`",schema:{type:"boolean",default:!1}}],responses:{200:{description:"successful operation",content:{"application/json":{schema:{type:"array",items:{type:"string"}}}}}},deprecated:!0,"x-swagger-router-controller":"io.swagger.v3.generator.online.GeneratorController"}},"/servers":{get:{tags:["servers"],summary:"Deprecated, use '/{type}/{version}' instead. List generator languages of type 'server' for given codegen version (defaults to V3)",operationId:"serverLanguages",parameters:[{$ref:"#/components/parameters/version"}],responses:{200:{description:"successful operation",content:{"application/json":{schema:{type:"array",items:{type:"string"}}}}}},deprecated:!0,"x-swagger-router-controller":"io.swagger.v3.generator.online.GeneratorController"}},"/documentation":{get:{tags:["documentation"],summary:"Deprecated, use '/{type}/{version}' instead. List generator languages of type 'documentation' for given codegen version (defaults to V3)",operationId:"documentationLanguages",parameters:[{$ref:"#/components/parameters/version"}],responses:{200:{description:"successful operation",content:{"application/json":{schema:{type:"array",items:{type:"string"}}}}}},deprecated:!0,"x-swagger-router-controller":"io.swagger.v3.generator.online.GeneratorController"}},"/{type}/{version}":{get:{tags:["clients","servers","documentation","config"],summary:"List generator languages of the given type and version",operationId:"languages",parameters:[{$ref:"#/components/parameters/type"},{name:"version",in:"path",description:"generator version used by codegen engine",required:!0,schema:{type:"string",enum:["V2","V3"]}}],responses:{200:{description:"successful operation",content:{"application/json":{schema:{type:"array",items:{type:"string"}}}}}},"x-swagger-router-controller":"io.swagger.v3.generator.online.GeneratorController"}},"/types":{get:{tags:["clients","servers","documentation","config"],summary:"List generator languages of version defined in 'version parameter (defaults to V3) and type included in 'types' parameter; all languages",operationId:"languagesMulti",parameters:[{$ref:"#/components/parameters/types"},{$ref:"#/components/parameters/version"}],responses:{200:{description:"successful operation",content:{"application/json":{schema:{type:"array",items:{type:"string"}}}}}},"x-swagger-router-controller":"io.swagger.v3.generator.online.GeneratorController"}},"/options":{get:{tags:["clients","servers","documentation","config"],summary:"Returns options for a given language and version (defaults to V3)",operationId:"listOptions",parameters:[{name:"language",in:"query",description:"language",schema:{type:"string"}},{$ref:"#/components/parameters/version"}],responses:{200:{description:"successful operation",content:{"application/json":{schema:{type:"object",additionalProperties:{$ref:"#/components/schemas/CliOption"}}}}}},"x-swagger-router-controller":"io.swagger.v3.generator.online.GeneratorController"}},"/model":{post:{tags:["clients","servers","documentation","config"],summary:'Generates the intermediate model ("bundle") and returns it as a JSON. body.',operationId:"generateBundle",requestBody:{content:{"application/json":{schema:{$ref:"#/components/schemas/GenerationRequest"}}}},responses:{200:{description:"successful operation",content:{"application/json":{schema:{type:"object"}}}}},"x-swagger-router-controller":"io.swagger.v3.generator.online.GeneratorController"}},"/render":{post:{tags:["documentation"],summary:"render a template using the provided data",operationId:"renderTemplate",requestBody:{content:{"application/json":{schema:{$ref:"#/components/schemas/RenderRequest"}}}},responses:{200:{description:"successful operation"}},"x-swagger-router-controller":"io.swagger.v3.generator.online.GeneratorController"}}},i={schemas:{GenerationRequest:{required:["lang"],type:"object",properties:{lang:{title:"language",type:"string",description:"language to generate (required)",example:"java"},spec:{type:"object",description:"spec in json format. . Alternative to `specURL`"},specURL:{type:"string",description:"URL of the spec in json format. Alternative to `spec`"},type:{type:"string",description:"type of the spec",enum:["CLIENT","SERVER","DOCUMENTATION","CONFIG"]},codegenVersion:{type:"string",description:"codegen version to use",enum:["V2","V3"]},options:{$ref:"#/components/schemas/Options"}},"x-swagger-router-model":"io.swagger.codegen.v3.service.GenerationRequest"},AuthorizationValue:{title:"authorization",type:"object",properties:{value:{type:"string",description:"Authorization value"},keyName:{type:"string",description:"Authorization key"},type:{type:"string",description:"Authorization type",enum:["query","header"]}},description:"adds authorization headers when fetching the open api definitions remotely. Pass in an authorizationValue object","x-swagger-router-model":"io.swagger.v3.parser.core.models.AuthorizationValue"},Options:{type:"object",properties:{auth:{title:"authorization",type:"string",description:"adds authorization headers when fetching the open api definitions remotely. Pass in a URL-encoded string of name:header with a comma separating multiple values"},authorizationValue:{$ref:"#/components/schemas/AuthorizationValue"},apiPackage:{title:"api package",type:"string",description:"package for generated api classes"},templateVersion:{title:"Template Version",type:"string",description:"template version for generation"},modelPackage:{title:"model package",type:"string",description:"package for generated models"},modelNamePrefix:{title:"model name prefix",type:"string",description:"Prefix that will be prepended to all model names. Default is the empty string."},modelNameSuffix:{title:"model name suffix",type:"string",description:"PrefixSuffix that will be appended to all model names. Default is the empty string."},systemProperties:{title:"System Properties",type:"object",additionalProperties:{type:"string"},description:"sets specified system properties in key/value format"},instantiationTypes:{title:"instantiation types",type:"object",additionalProperties:{type:"string"},description:"sets instantiation type mappings in key/value format. For example (in Java): array=ArrayList,map=HashMap. In other words array types will get instantiated as ArrayList in generated code."},typeMappings:{title:"type mappings",type:"object",additionalProperties:{type:"string"},description:"sets mappings between swagger spec types and generated code types in key/value format. For example: array=List,map=Map,string=String."},additionalProperties:{title:"additional properties",type:"object",additionalProperties:{type:"object"},description:"sets additional properties that can be referenced by the mustache templates in key/value format."},languageSpecificPrimitives:{title:"language specific primitives",type:"array",description:"specifies additional language specific primitive types in the format of type1,type2,type3,type3. For example: String,boolean,Boolean,Double. You can also have multiple occurrences of this option.",items:{type:"string"}},importMappings:{title:"import mappings",type:"object",additionalProperties:{type:"string"},description:"specifies mappings between a given class and the import that should be used for that class in key/value format."},invokerPackage:{title:"invoker package",type:"string",description:"root package for generated code"},groupId:{title:"group id",type:"string",description:"groupId in generated pom.xml"},artifactId:{title:"artifact id",type:"string",description:"artifactId in generated pom.xml"},artifactVersion:{title:"artifact version",type:"string",description:"artifact version generated in pom.xml"},library:{title:"library",type:"string",description:"library template (sub-template)"},gitUserId:{title:"git user id",type:"string",description:"Git user ID, e.g. swagger-api."},gitRepoId:{title:"git repo id",type:"string",description:"Git repo ID, e.g. swagger-codegen."},releaseNote:{title:"release note",type:"string",description:"Release note, default to 'Minor update'."},httpUserAgent:{title:"http user agent",type:"string",description:"HTTP user agent, e.g. codegen_csharp_api_client, default to 'Swagger-Codegen/{packageVersion}}/{language}'"},reservedWordsMappings:{title:"reserved words mappings",type:"object",additionalProperties:{type:"string"},description:"pecifies how a reserved name should be escaped to. Otherwise, the default _<name> is used. For example id=identifier."},ignoreFileOverride:{title:"ignore file override location",type:"string",description:"Specifies an override location for the .swagger-codegen-ignore file. Most useful on initial generation."},removeOperationIdPrefix:{title:"remove prefix of the operationId",type:"boolean",description:"Remove prefix of operationId, e.g. config_getId => getId"},skipOverride:{type:"boolean"}},"x-swagger-router-model":"io.swagger.codegen.v3.service.Options"},CliOption:{type:"object",properties:{optionName:{type:"string"},description:{type:"string"},type:{type:"string",description:"Data type is based on the types supported by the JSON-Schema"},enum:{type:"object",additionalProperties:{type:"string"}},default:{type:"string"}}},RenderRequest:{required:["context","template"],type:"object",properties:{template:{title:"template",type:"string",description:"template as string",example:"{{!mustache}}"},context:{title:"context",type:"string",description:"context as string",example:"{}"}},"x-swagger-router-model":"io.swagger.codegen.v3.service.RenderRequest"},RenderResponse:{required:["value"],type:"object",properties:{value:{type:"string"}},"x-swagger-router-model":"io.swagger.codegen.v3.service.RenderResponse"}},parameters:{version:{name:"version",in:"query",description:"generator version used by codegen engine",schema:{type:"string",enum:["V2","V3"]}},type:{name:"type",in:"path",description:"generator type",required:!0,schema:{type:"string",enum:["client","server","documentation","config"]}},types:{name:"types",in:"query",description:"comma-separated list of generator types",required:!0,style:"form",explode:!1,schema:{type:"array",items:{type:"string",enum:["client","server","documentation","config"]}}}}},s={openapi:e,info:t,servers:r,tags:n,paths:o,components:i};exports.components=i,exports.default=s,exports.info=t,exports.openapi=e,exports.paths=o,exports.servers=r,exports.tags=n;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
|
|
2
|
+
const types = {
|
|
3
|
+
features: {
|
|
4
|
+
description: '一项新功能',
|
|
5
|
+
title: 'Features',
|
|
6
|
+
emoji: '💡',
|
|
7
|
+
subject: 'feat',
|
|
8
|
+
},
|
|
9
|
+
bugfix: {
|
|
10
|
+
description: '一个错误修复(开发/测试环境)',
|
|
11
|
+
title: 'Bug Fixes',
|
|
12
|
+
emoji: '🐛',
|
|
13
|
+
subject: 'fix',
|
|
14
|
+
},
|
|
15
|
+
hotfix: {
|
|
16
|
+
description: '一个错误修复(生产环境)',
|
|
17
|
+
title: 'Hot Fixes',
|
|
18
|
+
emoji: '🔥',
|
|
19
|
+
subject: 'fix',
|
|
20
|
+
},
|
|
21
|
+
chore: {
|
|
22
|
+
description: "日常工作、杂项",
|
|
23
|
+
title: 'Chores',
|
|
24
|
+
emoji: '💻',
|
|
25
|
+
subject: 'chore',
|
|
26
|
+
},
|
|
27
|
+
config: {
|
|
28
|
+
description: '配置相关更改',
|
|
29
|
+
title: 'Configuration',
|
|
30
|
+
emoji: '🛠️',
|
|
31
|
+
subject: 'config',
|
|
32
|
+
},
|
|
33
|
+
style: {
|
|
34
|
+
description: '不影响代码意义的变更(空白、格式、缺少分号等)或者样式文件更改(css、less、scss、sass、stylus、styl)',
|
|
35
|
+
title: 'Styles',
|
|
36
|
+
emoji: '💎',
|
|
37
|
+
subject: 'style',
|
|
38
|
+
},
|
|
39
|
+
refactor: {
|
|
40
|
+
description: '代码更改既未修复错误也未添加功能(代码重构)',
|
|
41
|
+
title: 'Code Refactoring',
|
|
42
|
+
emoji: '🛸',
|
|
43
|
+
subject: 'refactor',
|
|
44
|
+
},
|
|
45
|
+
performance: {
|
|
46
|
+
description: '性能优化,提高性能(优化代码)',
|
|
47
|
+
title: 'Performance Improvements',
|
|
48
|
+
emoji: '🚀',
|
|
49
|
+
subject: 'perf',
|
|
50
|
+
},
|
|
51
|
+
revert: {
|
|
52
|
+
description: '撤销之前的提交',
|
|
53
|
+
title: 'Reverts',
|
|
54
|
+
emoji: '💣',
|
|
55
|
+
subject: 'revert',
|
|
56
|
+
},
|
|
57
|
+
document: {
|
|
58
|
+
description: '文档相关更改(README.md、CHANGELOG.md)',
|
|
59
|
+
title: 'Documentation',
|
|
60
|
+
emoji: '📚',
|
|
61
|
+
subject: 'docs',
|
|
62
|
+
},
|
|
63
|
+
test: {
|
|
64
|
+
description: '添加缺失的测试或纠正现有测试(测试代码)',
|
|
65
|
+
title: 'Tests',
|
|
66
|
+
emoji: '🪤',
|
|
67
|
+
subject: 'test',
|
|
68
|
+
},
|
|
69
|
+
cicd: {
|
|
70
|
+
description: '更改CI / CD配置文件和脚本(示例范围:Travis、Circle、BrowserStack、SauceLabs)',
|
|
71
|
+
title: 'Continuous Integrations',
|
|
72
|
+
emoji: '💿',
|
|
73
|
+
subject: 'ci',
|
|
74
|
+
},
|
|
75
|
+
build: {
|
|
76
|
+
description: '影响构建系统或外部依赖项的更改(例如范围:gulp、broccoli、npm、webpack、rollup、vite、esbuild、webpack)',
|
|
77
|
+
title: 'Builds',
|
|
78
|
+
emoji: '📦',
|
|
79
|
+
subject: 'build',
|
|
80
|
+
},
|
|
81
|
+
release: {
|
|
82
|
+
description: '发布版本',
|
|
83
|
+
title: 'Releases',
|
|
84
|
+
emoji: '🎉',
|
|
85
|
+
subject: 'release',
|
|
86
|
+
},
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
module.exports = { types };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
[alias]
|
|
2
|
+
nb = "!f() { SCRIPT_DIR=\"$(git rev-parse --show-toplevel)/.gitscripts\"; if [ \"$OS\" = \"Windows_NT\" ]; then \"$SCRIPT_DIR/random-branch.bat\" \"$@\"; else bash \"$SCRIPT_DIR/random-branch.sh\" \"$@\"; fi; }; f"
|
|
3
|
+
|
|
4
|
+
# 删除已合并的本地分支,排除 stage、develop 和 release/* 分支
|
|
5
|
+
rmm = "!git branch --merged | grep -v '\\*\\|stage\\|develop\\|release/' | xargs -n 1 git branch -d"
|
|
6
|
+
|
|
7
|
+
# 强制删除所有本地分支(已合并和未合并),排除 stage、develop 和 release/* 分支
|
|
8
|
+
rma = "!git branch | grep -v '\\*\\|stage\\|develop\\|release/' | xargs -n 1 git branch -D"
|
|
9
|
+
|
|
10
|
+
# 将 develop 分支覆盖到 stage 分支
|
|
11
|
+
ovstage = "!f() { git checkout stage && git fetch origin && git reset --hard origin/develop && git push -f origin stage; }; f"
|
|
12
|
+
|
|
13
|
+
# 将 develop 分支覆盖到 uat 分支
|
|
14
|
+
ovuat = "!f() { git checkout uat && git fetch origin && git reset --hard origin/develop && git push -f origin uat; }; f"
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
[log]
|
|
18
|
+
date = format:%Y-%m-%d %H:%M:%S
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
|
|
3
|
+
# 设置字符编码
|
|
4
|
+
export LANG=zh_CN.UTF-8
|
|
5
|
+
export LC_ALL=zh_CN.UTF-8
|
|
6
|
+
|
|
7
|
+
# 获取当前分支名称
|
|
8
|
+
BRANCH_NAME=$(git symbolic-ref --short HEAD)
|
|
9
|
+
|
|
10
|
+
# 提取分支前缀
|
|
11
|
+
BRANCH_PREFIX=$(echo "$BRANCH_NAME" | cut -d'/' -f1)
|
|
12
|
+
|
|
13
|
+
# 读取提交信息
|
|
14
|
+
COMMIT_MSG_FILE=$1
|
|
15
|
+
COMMIT_MSG=$(cat "$COMMIT_MSG_FILE")
|
|
16
|
+
|
|
17
|
+
# 仓库根目录
|
|
18
|
+
REPO_ROOT=$(git rev-parse --show-toplevel)
|
|
19
|
+
|
|
20
|
+
# 从脚本获取 {emoji, subject}(JSON)
|
|
21
|
+
META=$(node "$REPO_ROOT/.githooks/get-commit-emoji.cjs" "$BRANCH_PREFIX")
|
|
22
|
+
|
|
23
|
+
EMOJI=$(printf "%s" "$META" | node -e 'const fs=require("fs");try{const m=JSON.parse(fs.readFileSync(0,"utf8"));process.stdout.write(m.emoji||"");}catch(e){process.stdout.write("")}' )
|
|
24
|
+
SUBJECT_TYPE=$(printf "%s" "$META" | node -e 'const fs=require("fs");try{const m=JSON.parse(fs.readFileSync(0,"utf8"));process.stdout.write(m.subject||"");}catch(e){process.stdout.write("")}' )
|
|
25
|
+
|
|
26
|
+
# 如果 subject 为空但拿到了 emoji,则根据 emoji 反查 subject 作为回退
|
|
27
|
+
if [ -z "$SUBJECT_TYPE" ] && [ -n "$EMOJI" ]; then
|
|
28
|
+
SUBJECT_TYPE=$(node -e "const t=require(process.argv[1]).types; const e=process.argv[2]; for (const k in t){ if((t[k].emoji||'')===e){ process.stdout.write(t[k].subject||''); break; } }" "$REPO_ROOT/.commit-type.cjs" "$EMOJI")
|
|
29
|
+
fi
|
|
30
|
+
|
|
31
|
+
# 去除已存在的前缀(例如:features: 或 feat: 等),并去除前后空白
|
|
32
|
+
RAW_MSG=$(printf "%s" "$COMMIT_MSG" | sed -E "s/^[^::]+[::][[:space:]]*//" | sed -E 's/^[[:space:]]+|[[:space:]]+$//g')
|
|
33
|
+
|
|
34
|
+
# 构造新的提交信息:subject: message emoji(使用英文冒号+空格,emoji 后置)
|
|
35
|
+
if [ -n "$SUBJECT_TYPE" ]; then
|
|
36
|
+
NEW_MSG="${SUBJECT_TYPE}: ${RAW_MSG}"
|
|
37
|
+
else
|
|
38
|
+
NEW_MSG="$COMMIT_MSG"
|
|
39
|
+
fi
|
|
40
|
+
|
|
41
|
+
if [ -n "$EMOJI" ]; then
|
|
42
|
+
NEW_MSG="${NEW_MSG} ${EMOJI}"
|
|
43
|
+
fi
|
|
44
|
+
|
|
45
|
+
printf "%s" "$NEW_MSG" > "$COMMIT_MSG_FILE"
|
|
46
|
+
|
|
47
|
+
# 读取更新后的提交信息
|
|
48
|
+
UPDATED_MSG=$(cat "$COMMIT_MSG_FILE")
|
|
49
|
+
|
|
50
|
+
# 检查主题是否为空(去除 type 与冒号后的内容)
|
|
51
|
+
SUBJECT=$(echo "$UPDATED_MSG" | sed -E "s/^[^::]+[::][[:space:]]*//" | tr -d '[:space:]')
|
|
52
|
+
if [ -z "$SUBJECT" ]; then
|
|
53
|
+
echo "错误:提交信息的主题不能为空"
|
|
54
|
+
exit 1
|
|
55
|
+
fi
|
|
56
|
+
|
|
57
|
+
# 最后使用 commitlint 进行其他规则检查
|
|
58
|
+
# 通用解决方案:自动检测可用的包管理器和执行方式
|
|
59
|
+
run_commitlint() {
|
|
60
|
+
local msg_file="$1"
|
|
61
|
+
local repo_root="$2"
|
|
62
|
+
|
|
63
|
+
# 切换到仓库根目录
|
|
64
|
+
cd "$repo_root" || exit 1
|
|
65
|
+
|
|
66
|
+
# 按优先级尝试不同的执行方式
|
|
67
|
+
if command -v pnpm >/dev/null 2>&1 && [ -f "pnpm-lock.yaml" ]; then
|
|
68
|
+
# 优先使用 pnpm(如果存在 pnpm-lock.yaml)
|
|
69
|
+
pnpm exec commitlint --edit "$msg_file" 2>/dev/null && return 0
|
|
70
|
+
fi
|
|
71
|
+
|
|
72
|
+
if command -v yarn >/dev/null 2>&1 && [ -f "yarn.lock" ]; then
|
|
73
|
+
# 使用 yarn(如果存在 yarn.lock)
|
|
74
|
+
yarn commitlint --edit "$msg_file" 2>/dev/null && return 0
|
|
75
|
+
fi
|
|
76
|
+
|
|
77
|
+
if command -v npm >/dev/null 2>&1 && [ -f "package-lock.json" ]; then
|
|
78
|
+
# 使用 npm(如果存在 package-lock.json)
|
|
79
|
+
npm exec commitlint --edit "$msg_file" 2>/dev/null && return 0
|
|
80
|
+
fi
|
|
81
|
+
|
|
82
|
+
# 回退到 npx(通用方案)
|
|
83
|
+
npx --no-install commitlint --edit "$msg_file" 2>/dev/null && return 0
|
|
84
|
+
|
|
85
|
+
# 最后的回退方案:直接使用 node_modules 中的二进制文件
|
|
86
|
+
if [ -f "node_modules/.bin/commitlint" ]; then
|
|
87
|
+
node_modules/.bin/commitlint --edit "$msg_file" 2>/dev/null && return 0
|
|
88
|
+
fi
|
|
89
|
+
|
|
90
|
+
echo "警告:无法找到可用的 commitlint 执行方式"
|
|
91
|
+
return 1
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
# 执行 commitlint 检查
|
|
95
|
+
run_commitlint "$COMMIT_MSG_FILE" "$REPO_ROOT"
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
|
|
2
|
+
const { types } = require('../.commit-type.cjs');
|
|
3
|
+
|
|
4
|
+
const typeToMeta = {};
|
|
5
|
+
|
|
6
|
+
// 从 commitlint 配置中提取 type 到 emoji/subject 的映射
|
|
7
|
+
Object.entries(types).forEach(([type, config]) => {
|
|
8
|
+
typeToMeta[type] = { emoji: config.emoji || '', subject: config.subject || '' };
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
// 获取传入的分支类型
|
|
12
|
+
const branchType = process.argv[2];
|
|
13
|
+
const meta = typeToMeta[branchType] || { emoji: '', subject: '' };
|
|
14
|
+
|
|
15
|
+
// 以 JSON 输出,方便 shell 精确解析
|
|
16
|
+
process.stdout.write(JSON.stringify(meta));
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// 兼容 CommonJS 和 ES 模块的解决方案
|
|
2
|
+
const fs = require('fs');
|
|
3
|
+
const path = require('path');
|
|
4
|
+
|
|
5
|
+
// 获取配置文件路径
|
|
6
|
+
const configPath = path.join(__dirname, '../.commit-type.cjs');
|
|
7
|
+
|
|
8
|
+
try {
|
|
9
|
+
// 读取配置文件内容
|
|
10
|
+
const fileContent = fs.readFileSync(configPath, 'utf8');
|
|
11
|
+
|
|
12
|
+
// 提取 types 对象定义
|
|
13
|
+
const typesMatch = fileContent.match(/const types = \{[\s\S]*?\};/);
|
|
14
|
+
if (!typesMatch) {
|
|
15
|
+
throw new Error('无法找到 types 对象定义');
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// 创建一个安全的执行环境来解析对象
|
|
19
|
+
const typesCode = typesMatch[0] + '\nmodule.exports = { types };';
|
|
20
|
+
|
|
21
|
+
// 使用 vm 模块安全执行代码
|
|
22
|
+
const vm = require('vm');
|
|
23
|
+
const context = { module: { exports: {} } };
|
|
24
|
+
vm.createContext(context);
|
|
25
|
+
vm.runInContext(typesCode, context);
|
|
26
|
+
|
|
27
|
+
const types = context.module.exports.types;
|
|
28
|
+
|
|
29
|
+
// 生成输出
|
|
30
|
+
const output = Object.entries(types).map(([type, config]) => ({
|
|
31
|
+
type,
|
|
32
|
+
description: config.description,
|
|
33
|
+
emoji: config.emoji,
|
|
34
|
+
}));
|
|
35
|
+
|
|
36
|
+
console.log(JSON.stringify(output));
|
|
37
|
+
|
|
38
|
+
} catch (error) {
|
|
39
|
+
console.error('错误:无法读取分支类型配置文件');
|
|
40
|
+
console.error('请确保 .commit-type.js 文件存在且格式正确');
|
|
41
|
+
console.error('详细错误:', error.message);
|
|
42
|
+
process.exit(1);
|
|
43
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// 兼容 CommonJS 和 ES 模块的解决方案
|
|
2
|
+
const fs = require('fs');
|
|
3
|
+
const path = require('path');
|
|
4
|
+
|
|
5
|
+
// 获取配置文件路径
|
|
6
|
+
const configPath = path.join(__dirname, '../.commit-type.js');
|
|
7
|
+
|
|
8
|
+
try {
|
|
9
|
+
// 读取配置文件内容
|
|
10
|
+
const fileContent = fs.readFileSync(configPath, 'utf8');
|
|
11
|
+
|
|
12
|
+
// 提取 types 对象定义
|
|
13
|
+
const typesMatch = fileContent.match(/const types = \{[\s\S]*?\};/);
|
|
14
|
+
if (!typesMatch) {
|
|
15
|
+
throw new Error('无法找到 types 对象定义');
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// 创建一个安全的执行环境来解析对象
|
|
19
|
+
const typesCode = typesMatch[0] + '\nmodule.exports = { types };';
|
|
20
|
+
|
|
21
|
+
// 使用 vm 模块安全执行代码
|
|
22
|
+
const vm = require('vm');
|
|
23
|
+
const context = { module: { exports: {} } };
|
|
24
|
+
vm.createContext(context);
|
|
25
|
+
vm.runInContext(typesCode, context);
|
|
26
|
+
|
|
27
|
+
const types = context.module.exports.types;
|
|
28
|
+
|
|
29
|
+
// 生成输出
|
|
30
|
+
const output = Object.entries(types).map(([type, config]) => ({
|
|
31
|
+
type,
|
|
32
|
+
description: config.description,
|
|
33
|
+
emoji: config.emoji,
|
|
34
|
+
}));
|
|
35
|
+
|
|
36
|
+
console.log(JSON.stringify(output));
|
|
37
|
+
|
|
38
|
+
} catch (error) {
|
|
39
|
+
console.error('错误:无法读取分支类型配置文件');
|
|
40
|
+
console.error('请确保 .commit-type.js 文件存在且格式正确');
|
|
41
|
+
console.error('详细错误:', error.message);
|
|
42
|
+
process.exit(1);
|
|
43
|
+
}
|