create-bubbles 0.0.8 → 0.0.12

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 (72) hide show
  1. package/package.json +1 -1
  2. package/template-react-rsbuild/biome.json +102 -101
  3. package/template-react-rsbuild/commitlint.config.js +1 -1
  4. package/template-react-rsbuild/lefthook.yml +1 -1
  5. package/template-react-rsbuild/package.json +16 -16
  6. package/template-react-rsbuild/rsbuild.config.ts +11 -5
  7. package/template-react-rsbuild/src/App.tsx +9 -9
  8. package/template-react-rsbuild/src/components/Loading/PageLoading.tsx +11 -11
  9. package/template-react-rsbuild/src/env.d.ts +1 -1
  10. package/template-react-rsbuild/src/index.tsx +20 -20
  11. package/template-react-rsbuild/src/pages/home/index.tsx +26 -26
  12. package/template-react-rsbuild/src/router/index.tsx +27 -27
  13. package/template-react-rsbuild/src/store/index.ts +0 -0
  14. package/template-react-rsbuild/src/store/modules/user.ts +11 -0
  15. package/template-react-rsbuild/src/types/auto-import.d.ts +47 -47
  16. package/template-react-rsbuild/src/utils/request/axios.ts +82 -93
  17. package/template-react-rsbuild/src/utils/request/index.ts +43 -26
  18. package/template-react-rsbuild/tsconfig.json +29 -29
  19. package/template-react-rsbuild/uno.config.ts +8 -8
  20. package/template-vue-rsbuild/.prettierrc +1 -0
  21. package/template-vue-rsbuild/.vscode/settings.json +7 -0
  22. package/template-vue-rsbuild/biome.json +102 -112
  23. package/template-vue-rsbuild/lefthook.yml +11 -0
  24. package/template-vue-rsbuild/package.json +32 -30
  25. package/template-vue-rsbuild/pnpm-lock.yaml +3324 -0
  26. package/template-vue-rsbuild/rsbuild.config.ts +35 -28
  27. package/template-vue-rsbuild/src/App.vue +1 -27
  28. package/template-vue-rsbuild/src/index.ts +15 -7
  29. package/template-vue-rsbuild/src/router/guard/index.tsx +6 -0
  30. package/template-vue-rsbuild/src/router/guard/permissionGuard.ts +8 -0
  31. package/template-vue-rsbuild/src/router/index.tsx +14 -0
  32. package/template-vue-rsbuild/src/router/modules/index.tsx +10 -0
  33. package/template-vue-rsbuild/src/store/index.ts +7 -0
  34. package/template-vue-rsbuild/src/store/modules/user.ts +17 -0
  35. package/template-vue-rsbuild/src/types/auto-import.d.ts +91 -91
  36. package/template-vue-rsbuild/src/types/env.d.ts +17 -0
  37. package/template-vue-rsbuild/src/utils/request/axios.ts +83 -0
  38. package/template-vue-rsbuild/src/utils/request/index.ts +77 -0
  39. package/template-vue-rsbuild/src/views/home/index.vue +11 -0
  40. package/template-vue-rsbuild-eslint/.env +3 -0
  41. package/template-vue-rsbuild-eslint/.env.development +0 -0
  42. package/template-vue-rsbuild-eslint/.env.production +0 -0
  43. package/template-vue-rsbuild-eslint/.prettierignore +4 -0
  44. package/template-vue-rsbuild-eslint/.prettierrc +17 -0
  45. package/{template-vue-rsbuild → template-vue-rsbuild-eslint}/.vscode/extensions.json +3 -3
  46. package/template-vue-rsbuild-eslint/README.md +29 -0
  47. package/template-vue-rsbuild-eslint/biome.json +110 -0
  48. package/template-vue-rsbuild-eslint/index.html +7 -0
  49. package/template-vue-rsbuild-eslint/package.json +31 -0
  50. package/{template-react-rsbuild → template-vue-rsbuild-eslint}/postcss.config.mjs +2 -2
  51. package/template-vue-rsbuild-eslint/public/.gitkeep +0 -0
  52. package/template-vue-rsbuild-eslint/rsbuild.config.ts +28 -0
  53. package/template-vue-rsbuild-eslint/src/App.vue +29 -0
  54. package/template-vue-rsbuild-eslint/src/env.d.ts +17 -0
  55. package/template-vue-rsbuild-eslint/src/index.ts +15 -0
  56. package/template-vue-rsbuild-eslint/src/router/guard/index.tsx +6 -0
  57. package/template-vue-rsbuild-eslint/src/router/guard/permissionGuard.ts +8 -0
  58. package/template-vue-rsbuild-eslint/src/router/index.tsx +14 -0
  59. package/template-vue-rsbuild-eslint/src/router/modules/index.tsx +10 -0
  60. package/template-vue-rsbuild-eslint/src/store/index.ts +7 -0
  61. package/template-vue-rsbuild-eslint/src/store/modules/user.ts +16 -0
  62. package/template-vue-rsbuild-eslint/src/styles/index.css +16 -0
  63. package/template-vue-rsbuild-eslint/src/types/auto-import.d.ts +91 -0
  64. package/template-vue-rsbuild-eslint/src/utils/request/axios.ts +83 -0
  65. package/template-vue-rsbuild-eslint/src/utils/request/index.ts +77 -0
  66. package/template-vue-rsbuild-eslint/src/views/home/index.vue +13 -0
  67. package/template-vue-rsbuild-eslint/tsconfig.json +29 -0
  68. package/template-vue-rsbuild-eslint/uno.config.ts +9 -0
  69. package/template-react-rsbuild/pnpm-lock.yaml +0 -3615
  70. package/template-vue-rsbuild/postcss.config.mjs +0 -5
  71. package/template-vue-rsbuild/src/env.d.ts +0 -9
  72. /package/{template-vue-rsbuild → template-vue-rsbuild-eslint}/src/index.css +0 -0
@@ -1,93 +1,82 @@
1
- import { message } from 'ant-design-vue';
2
- import axios, { type AxiosResponse } from 'axios';
3
- import _ from 'lodash-es';
4
-
5
- import { router } from '@/router';
6
- import { useUserStoreWithOut } from '@/store/modules/user';
7
-
8
- export interface CustomConfig {
9
- /** 直接返回响应体 */
10
- isTransformResponse?: boolean;
11
- // 成功需要提示
12
- isShowSuccessMsg?: boolean;
13
- }
14
-
15
- export enum CodeEnum {
16
- SUCCESS = 200,
17
- UNAUTHORIZED = 401,
18
- }
19
-
20
- const unAuthFunc = _.debounce(() => {
21
- message.error('暂未登录或登录已过期,请重新登录');
22
- router.push('/login');
23
- }, 500);
24
-
25
- export default (customConfig?: CustomConfig) => {
26
- // const { getToken } = useUserStore()
27
- const userStore = useUserStoreWithOut();
28
-
29
- const instance = axios.create({
30
- baseURL: import.meta.env.PUBLIC_API_AFFIX,
31
- });
32
-
33
- instance.interceptors.request.use(
34
- (config) => {
35
- // config.headers = {
36
- // 'X-Access-Token': userStore.token,
37
- // 'Allow-Control-Allow-Origin': '*',
38
- // ...config?.headers,
39
- // } as any
40
- config.headers.set('X-Access-Token', userStore.token);
41
- config.headers.set('Allow-Control-Allow-Origin', '*');
42
- return config;
43
- },
44
- (error) => {
45
- message.error('请求错误');
46
- return Promise.reject(error);
47
- },
48
- );
49
-
50
- interface ResponseData<T = any> {
51
- code: number;
52
- message: string;
53
- requestId: string;
54
- responseTime: number;
55
- result: T;
56
- }
57
-
58
- instance.interceptors.response.use(
59
- (response: AxiosResponse<ResponseData>) => {
60
- const { status, data } = response;
61
- if (status === 200) {
62
- if (customConfig?.isTransformResponse === false) return data;
63
- const { code, message: msg } = data;
64
- if (code === CodeEnum.SUCCESS) {
65
- if (customConfig?.isShowSuccessMsg) {
66
- message.success(msg);
67
- }
68
- return data.result;
69
- }
70
- message.error(msg);
71
- return Promise.reject(data);
72
- }
73
- if (status === CodeEnum.UNAUTHORIZED) {
74
- // _.debounce(() => {
75
- message.error(data.message);
76
- router.push('/login');
77
- // }, 500)
78
- } else return Promise.reject(data.message);
79
- },
80
- (error) => {
81
- const response = error.response;
82
- const { status, data } = response;
83
- if (status === CodeEnum.UNAUTHORIZED) {
84
- unAuthFunc();
85
- } else {
86
- message.error(data?.message || '系统异常');
87
- return Promise.reject(error);
88
- }
89
- },
90
- );
91
-
92
- return instance;
93
- };
1
+ import { message } from 'antd'
2
+ import axios, { type AxiosResponse } from 'axios'
3
+
4
+ import { router } from '@/router'
5
+ import { useUserStore } from '@/store/modules/user'
6
+
7
+ export interface CustomConfig {
8
+ /** 直接返回响应体 */
9
+ isTransformResponse?: boolean
10
+ // 成功需要提示
11
+ isShowSuccessMsg?: boolean
12
+ }
13
+
14
+ export enum CodeEnum {
15
+ SUCCESS = 200,
16
+ UNAUTHORIZED = 401,
17
+ }
18
+
19
+ const unAuthFunc = () => {
20
+ message.error('暂未登录或登录已过期,请重新登录')
21
+ router.navigate('/login')
22
+ }
23
+ export default (customConfig?: CustomConfig) => {
24
+ const token = useUserStore((state) => state.token)
25
+
26
+ const instance = axios.create({
27
+ baseURL: import.meta.env.PUBLIC_API_AFFIX,
28
+ })
29
+
30
+ instance.interceptors.request.use(
31
+ (config) => {
32
+ config.headers.set('X-Access-Token', token)
33
+ config.headers.set('Allow-Control-Allow-Origin', '*')
34
+ return config
35
+ },
36
+ (error) => {
37
+ message.error('请求错误')
38
+ return Promise.reject(error)
39
+ },
40
+ )
41
+
42
+ interface ResponseData<T = any> {
43
+ code: number
44
+ message: string
45
+ requestId: string
46
+ responseTime: number
47
+ result: T
48
+ }
49
+
50
+ instance.interceptors.response.use(
51
+ (response: AxiosResponse<ResponseData>) => {
52
+ const { status, data } = response
53
+ if (status === 200) {
54
+ if (customConfig?.isTransformResponse === false) return data
55
+ const { code, message: msg } = data
56
+ if (code === CodeEnum.SUCCESS) {
57
+ if (customConfig?.isShowSuccessMsg) {
58
+ message.success(msg)
59
+ }
60
+ return data.result
61
+ }
62
+ message.error(msg)
63
+ return Promise.reject(data)
64
+ }
65
+ if (status === CodeEnum.UNAUTHORIZED) {
66
+ unAuthFunc()
67
+ } else return Promise.reject(data.message)
68
+ },
69
+ (error) => {
70
+ const response = error.response
71
+ const { status, data } = response
72
+ if (status === CodeEnum.UNAUTHORIZED) {
73
+ unAuthFunc()
74
+ } else {
75
+ message.error(data?.message || '系统异常')
76
+ return Promise.reject(error)
77
+ }
78
+ },
79
+ )
80
+
81
+ return instance
82
+ }
@@ -1,40 +1,41 @@
1
- import type { AxiosRequestConfig } from 'axios';
1
+ import type { AxiosRequestConfig } from 'axios'
2
2
 
3
- import request, { type CustomConfig } from './axios';
3
+ import request, { type CustomConfig } from './axios'
4
4
 
5
5
  interface createAxiosType {
6
- get: (
6
+ get: <T = any>(
7
7
  config: {
8
- url: string;
9
- params?: AxiosRequestConfig['params'];
10
- config?: AxiosRequestConfig<any>;
8
+ url: string
9
+ params?: AxiosRequestConfig['params']
10
+ config?: AxiosRequestConfig<any>
11
11
  },
12
12
  option?: CustomConfig,
13
- ) => Promise<any>;
14
- post: (
13
+ ) => Promise<T>
14
+ post: <T = any>(
15
15
  config: {
16
- url: string;
17
- data?: AxiosRequestConfig['data'];
18
- config?: AxiosRequestConfig<any>;
16
+ url: string
17
+ data?: AxiosRequestConfig['data']
18
+ params?: AxiosRequestConfig['params']
19
+ config?: AxiosRequestConfig<any>
19
20
  },
20
21
  option?: CustomConfig,
21
- ) => Promise<any>;
22
- put: (
22
+ ) => Promise<T>
23
+ put: <T = any>(
23
24
  config: {
24
- url: string;
25
- data?: AxiosRequestConfig['data'];
26
- config?: AxiosRequestConfig<any>;
25
+ url: string
26
+ data?: AxiosRequestConfig['data']
27
+ config?: AxiosRequestConfig<any>
27
28
  },
28
29
  option?: CustomConfig,
29
- ) => Promise<any>;
30
- delete: (
30
+ ) => Promise<T>
31
+ delete: <T = any>(
31
32
  config: {
32
- url: string;
33
- data?: AxiosRequestConfig['data'];
34
- config?: AxiosRequestConfig<any>;
33
+ url: string
34
+ data?: AxiosRequestConfig['data']
35
+ config?: AxiosRequestConfig<any>
35
36
  },
36
37
  option?: CustomConfig,
37
- ) => Promise<any>;
38
+ ) => Promise<T>
38
39
  }
39
40
 
40
41
  const createAxios: createAxiosType = {
@@ -44,9 +45,25 @@ const createAxios: createAxiosType = {
44
45
  ...config?.config,
45
46
  }),
46
47
  post: (
47
- config: { url: string; data?: any; config?: AxiosRequestConfig<any> },
48
+ config: {
49
+ url: string
50
+ params?: Record<string, string>
51
+ data?: any
52
+ config?: AxiosRequestConfig<any>
53
+ },
48
54
  option?: CustomConfig,
49
- ) => request(option).post(config.url, config?.data, config?.config),
55
+ ) => {
56
+ let url = config.url
57
+ if (config.params instanceof Object) {
58
+ url += '?'
59
+ const entries = Object.entries(config.params)
60
+ for (let i = 0; i < entries.length; i++) {
61
+ const [key, value] = entries[i]
62
+ url += `${key}=${value}${i < entries.length - 1 ? '&' : ''}`
63
+ }
64
+ }
65
+ return request(option).post(url, config?.data, config?.config)
66
+ },
50
67
  put: (
51
68
  config: { url: string; data?: any; config?: AxiosRequestConfig<any> },
52
69
  option?: CustomConfig,
@@ -55,6 +72,6 @@ const createAxios: createAxiosType = {
55
72
  config: { url: string; config?: AxiosRequestConfig<any> },
56
73
  customConfig?: CustomConfig,
57
74
  ) => request(customConfig).delete(config.url, config?.config),
58
- };
75
+ }
59
76
 
60
- export default createAxios;
77
+ export default createAxios
@@ -1,29 +1,29 @@
1
- {
2
- "compilerOptions": {
3
- "lib": ["DOM", "ES2020"],
4
- "jsx": "react-jsx",
5
- "target": "ES2020",
6
- "noEmit": true,
7
- "skipLibCheck": true,
8
- "useDefineForClassFields": true,
9
-
10
- /* modules */
11
- "module": "ESNext",
12
- "isolatedModules": true,
13
- "resolveJsonModule": true,
14
- "moduleResolution": "Bundler",
15
- "allowImportingTsExtensions": true,
16
-
17
- /* type checking */
18
- "strict": true,
19
- "noUnusedLocals": true,
20
- "noUnusedParameters": true,
21
-
22
- "baseUrl": "./",
23
- "paths": {
24
- "@/*": ["src/*"]
25
- }
26
- },
27
- "include": ["src"],
28
- "exclude": ["node_modules", "dist"]
29
- }
1
+ {
2
+ "compilerOptions": {
3
+ "lib": ["DOM", "ES2020"],
4
+ "jsx": "react-jsx",
5
+ "target": "ES2020",
6
+ "noEmit": true,
7
+ "skipLibCheck": true,
8
+ "useDefineForClassFields": true,
9
+
10
+ /* modules */
11
+ "module": "ESNext",
12
+ "isolatedModules": true,
13
+ "resolveJsonModule": true,
14
+ "moduleResolution": "Bundler",
15
+ "allowImportingTsExtensions": true,
16
+
17
+ /* type checking */
18
+ "strict": true,
19
+ "noUnusedLocals": true,
20
+ "noUnusedParameters": true,
21
+
22
+ "baseUrl": "./",
23
+ "paths": {
24
+ "@/*": ["src/*"]
25
+ }
26
+ },
27
+ "include": ["src"],
28
+ "exclude": ["node_modules", "dist"]
29
+ }
@@ -1,8 +1,8 @@
1
- import { defineConfig, presetUno } from 'unocss';
2
-
3
- export default defineConfig({
4
- content: {
5
- filesystem: ['**/*.{html,js,ts,jsx,tsx,vue,svelte,astro}'],
6
- },
7
- presets: [presetUno()],
8
- });
1
+ import { defineConfig, presetUno } from 'unocss';
2
+
3
+ export default defineConfig({
4
+ content: {
5
+ filesystem: ['**/*.{html,js,ts,jsx,tsx,vue,svelte,astro}'],
6
+ },
7
+ presets: [presetUno()],
8
+ });
@@ -4,6 +4,7 @@
4
4
  "trailingComma": "all",
5
5
  "printWidth": 100,
6
6
  "proseWrap": "never",
7
+ "semi": false,
7
8
  "importOrder": ["^(vue|vue-router)$", "^([a-z]|@[a-z])", "", ".*"],
8
9
  "plugins": ["@ianvs/prettier-plugin-sort-imports"],
9
10
  "overrides": [
@@ -0,0 +1,7 @@
1
+ {
2
+ "editor.formatOnSave": true,
3
+ "editor.defaultFormatter": "biomejs.biome",
4
+ "[vue]": {
5
+ "editor.defaultFormatter": "esbenp.prettier-vscode"
6
+ }
7
+ }
@@ -1,112 +1,102 @@
1
- {
2
- "files": {
3
- "ignoreUnknown": true,
4
- "ignore": [
5
- ".dumi/tmp*",
6
- ".dumi/scripts/clarity.js",
7
- "dist/*",
8
- "es/**/*",
9
- "lib/**/*",
10
- "_site/**/*",
11
- "node_modules",
12
- "server",
13
- "scripts/previewEditor/**/*",
14
- "package.json"
15
- ]
16
- },
17
- "formatter": {
18
- "enabled": true,
19
- "indentStyle": "space",
20
- "lineWidth": 100,
21
- "indentWidth": 2
22
- },
23
- "javascript": {
24
- "formatter": {
25
- "quoteStyle": "single"
26
- }
27
- },
28
- "organizeImports": {
29
- "enabled": false
30
- },
31
- "linter": {
32
- "rules": {
33
- "style": {
34
- "useImportType": "off",
35
- "useNumberNamespace": "off",
36
- "useNodejsImportProtocol": "off",
37
- "noNonNullAssertion": "off",
38
- "noUnusedTemplateLiteral": "off"
39
- },
40
- "complexity": {
41
- "noUselessTypeConstraint": "off",
42
- "noForEach": "off"
43
- },
44
- "correctness": {
45
- "useExhaustiveDependencies": "off"
46
- },
47
- "suspicious": {
48
- "noGlobalIsNan": "off",
49
- "noGlobalIsFinite": "off",
50
- "noExplicitAny": "off",
51
- "noArrayIndexKey": "off",
52
- "noConfusingVoidType": "off",
53
- "noThenProperty": "off"
54
- },
55
- "performance": {
56
- "noDelete": "off",
57
- "noAccumulatingSpread": "off"
58
- },
59
- "a11y": {
60
- "noAriaHiddenOnFocusable": "off",
61
- "noLabelWithoutControl": "off",
62
- "useFocusableInteractive": "off",
63
- "useKeyWithClickEvents": "off",
64
- "useSemanticElements": "off"
65
- }
66
- }
67
- },
68
- "css": {
69
- "formatter": {
70
- "quoteStyle": "single"
71
- }
72
- },
73
- "overrides": [
74
- {
75
- "include": ["**/*.test.ts", "**/*.test.tsx", "tests/**/*", "scripts/**/*", ".dumi/**/*"],
76
- "linter": {
77
- "rules": {
78
- "style": {
79
- "noParameterAssign": "off"
80
- },
81
- "suspicious": {
82
- "noThenProperty": "off",
83
- "noImplicitAnyLet": "off"
84
- },
85
- "complexity": {
86
- "noUselessFragments": "off"
87
- },
88
- "a11y": {
89
- "useValidAnchor": "off",
90
- "useAnchorContent": "off",
91
- "useKeyWithClickEvents": "off"
92
- }
93
- }
94
- }
95
- },
96
- {
97
- "include": ["components/*/demo/*"],
98
- "linter": {
99
- "rules": {
100
- "correctness": {
101
- "noVoidTypeReturn": "off"
102
- },
103
- "a11y": {
104
- "useValidAnchor": "off",
105
- "useAnchorContent": "off",
106
- "useKeyWithClickEvents": "off"
107
- }
108
- }
109
- }
110
- }
111
- ]
112
- }
1
+ {
2
+ "files": {
3
+ "ignoreUnknown": true,
4
+ "ignore": ["dist/*", "node_modules", "package.json"]
5
+ },
6
+ "formatter": {
7
+ "enabled": true,
8
+ "indentStyle": "space",
9
+ "lineWidth": 100,
10
+ "indentWidth": 2
11
+ },
12
+ "javascript": {
13
+ "formatter": {
14
+ "quoteStyle": "single",
15
+ "semicolons": "asNeeded"
16
+ }
17
+ },
18
+ "organizeImports": {
19
+ "enabled": false
20
+ },
21
+ "linter": {
22
+ "rules": {
23
+ "style": {
24
+ "useImportType": "off",
25
+ "useNumberNamespace": "off",
26
+ "useNodejsImportProtocol": "off",
27
+ "noNonNullAssertion": "off",
28
+ "noUnusedTemplateLiteral": "off"
29
+ },
30
+ "complexity": {
31
+ "noUselessTypeConstraint": "off",
32
+ "noForEach": "off"
33
+ },
34
+ "correctness": {
35
+ "useExhaustiveDependencies": "off"
36
+ },
37
+ "suspicious": {
38
+ "noGlobalIsNan": "off",
39
+ "noGlobalIsFinite": "off",
40
+ "noExplicitAny": "off",
41
+ "noArrayIndexKey": "off",
42
+ "noConfusingVoidType": "off",
43
+ "noThenProperty": "off"
44
+ },
45
+ "performance": {
46
+ "noDelete": "off",
47
+ "noAccumulatingSpread": "off"
48
+ },
49
+ "a11y": {
50
+ "noAriaHiddenOnFocusable": "off",
51
+ "noLabelWithoutControl": "off",
52
+ "useFocusableInteractive": "off",
53
+ "useKeyWithClickEvents": "off",
54
+ "useSemanticElements": "off"
55
+ }
56
+ }
57
+ },
58
+ "css": {
59
+ "formatter": {
60
+ "quoteStyle": "single"
61
+ }
62
+ },
63
+ "overrides": [
64
+ {
65
+ "include": ["**/*.test.ts", "**/*.test.tsx", "tests/**/*", "scripts/**/*", ".dumi/**/*"],
66
+ "linter": {
67
+ "rules": {
68
+ "style": {
69
+ "noParameterAssign": "off"
70
+ },
71
+ "suspicious": {
72
+ "noThenProperty": "off",
73
+ "noImplicitAnyLet": "off"
74
+ },
75
+ "complexity": {
76
+ "noUselessFragments": "off"
77
+ },
78
+ "a11y": {
79
+ "useValidAnchor": "off",
80
+ "useAnchorContent": "off",
81
+ "useKeyWithClickEvents": "off"
82
+ }
83
+ }
84
+ }
85
+ },
86
+ {
87
+ "include": ["components/*/demo/*"],
88
+ "linter": {
89
+ "rules": {
90
+ "correctness": {
91
+ "noVoidTypeReturn": "off"
92
+ },
93
+ "a11y": {
94
+ "useValidAnchor": "off",
95
+ "useAnchorContent": "off",
96
+ "useKeyWithClickEvents": "off"
97
+ }
98
+ }
99
+ }
100
+ }
101
+ ]
102
+ }
@@ -0,0 +1,11 @@
1
+ pre-commit:
2
+ commands:
3
+ check:
4
+ glob: '*.{js,ts,cjs,mjs,d.cts,d.mts,jsx,tsx,json,jsonc,vue}'
5
+ run: npx @biomejs/biome check --write --no-errors-on-unmatched --files-ignore-unknown=true --colors=off {staged_files}
6
+ stage_fixed: true
7
+
8
+ commit-msg:
9
+ commands:
10
+ 'lint commit message':
11
+ run: npx commitlint --edit {1}