@gx-design-vue/create-gx-cli 0.1.12 → 0.1.13
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/bin/create-gx-cli +3 -2
- package/package.json +4 -4
- package/src/cli.js +10 -7
- package/src/git.js +8 -5
- package/src/main.js +29 -16
- package/template-mobile-vant-cli/package.json +5 -5
- package/template-gx-design-thin/.editorconfig +0 -19
- package/template-gx-design-thin/.env +0 -4
- package/template-gx-design-thin/.env.development +0 -15
- package/template-gx-design-thin/.env.production +0 -28
- package/template-gx-design-thin/.eslintignore +0 -16
- package/template-gx-design-thin/.prettierignore +0 -9
- package/template-gx-design-thin/LICENSE +0 -21
- package/template-gx-design-thin/README.md +0 -112
- package/template-gx-design-thin/build/constant.ts +0 -1
- package/template-gx-design-thin/build/generate/generateModifyVars.ts +0 -14
- package/template-gx-design-thin/build/rollupOptions/index.ts +0 -22
- package/template-gx-design-thin/build/util/hash.ts +0 -17
- package/template-gx-design-thin/build/util/index.ts +0 -131
- package/template-gx-design-thin/build/vite/cdn.ts +0 -63
- package/template-gx-design-thin/build/vite/optimizer.ts +0 -26
- package/template-gx-design-thin/build/vite/plugin/appConfig.ts +0 -91
- package/template-gx-design-thin/build/vite/plugin/autoImport.ts +0 -26
- package/template-gx-design-thin/build/vite/plugin/compress.ts +0 -31
- package/template-gx-design-thin/build/vite/plugin/html.ts +0 -39
- package/template-gx-design-thin/build/vite/plugin/index.ts +0 -75
- package/template-gx-design-thin/build/vite/plugin/mock.ts +0 -14
- package/template-gx-design-thin/build/vite/plugin/pwa.ts +0 -31
- package/template-gx-design-thin/build/vite/plugin/visualizer.ts +0 -14
- package/template-gx-design-thin/build/vite/plugin/viteMock/client.ts +0 -88
- package/template-gx-design-thin/build/vite/plugin/viteMock/createMockServer.ts +0 -271
- package/template-gx-design-thin/build/vite/plugin/viteMock/index.ts +0 -69
- package/template-gx-design-thin/build/vite/plugin/viteMock/types.ts +0 -48
- package/template-gx-design-thin/build/vite/plugin/viteMock/utils.ts +0 -48
- package/template-gx-design-thin/build/vite/plugin/viteNotice.ts +0 -40
- package/template-gx-design-thin/commitlint.config.cjs +0 -32
- package/template-gx-design-thin/config/default/defaultSettings.ts +0 -78
- package/template-gx-design-thin/config/default/network.ts +0 -10
- package/template-gx-design-thin/config/default/proxy.ts +0 -47
- package/template-gx-design-thin/config/default/theme.ts +0 -3
- package/template-gx-design-thin/config/index.ts +0 -11
- package/template-gx-design-thin/eslint.config.js +0 -51
- package/template-gx-design-thin/index.html +0 -42
- package/template-gx-design-thin/mock/_createProductionServer.ts +0 -19
- package/template-gx-design-thin/mock/_util.ts +0 -33
- package/template-gx-design-thin/mock/config/menu.ts +0 -21
- package/template-gx-design-thin/mock/config/user.ts +0 -123
- package/template-gx-design-thin/mock/datasSource/system/menu.ts +0 -10
- package/template-gx-design-thin/mock/datasSource/user/account.ts +0 -30
- package/template-gx-design-thin/mock/datasSource/user/index.ts +0 -47
- package/template-gx-design-thin/mock/util/crypto.ts +0 -23
- package/template-gx-design-thin/mock/util/table.ts +0 -92
- package/template-gx-design-thin/mock/util/utils.ts +0 -73
- package/template-gx-design-thin/package.json +0 -129
- package/template-gx-design-thin/pnpm-lock.yaml +0 -12575
- package/template-gx-design-thin/prettier.config.cjs +0 -18
- package/template-gx-design-thin/public/resource/css/index.css +0 -119
- package/template-gx-design-thin/public/resource/css/normalize.css +0 -396
- package/template-gx-design-thin/public/resource/img/favicon.ico +0 -0
- package/template-gx-design-thin/public/resource/img/logo.png +0 -0
- package/template-gx-design-thin/public/resource/img/pro_icon.svg +0 -1
- package/template-gx-design-thin/public/resource/img/pwa-192x192.png +0 -0
- package/template-gx-design-thin/public/resource/img/pwa-512x512.png +0 -0
- package/template-gx-design-thin/src/App.vue +0 -42
- package/template-gx-design-thin/src/assets/error_images/403.png +0 -0
- package/template-gx-design-thin/src/assets/error_images/404.png +0 -0
- package/template-gx-design-thin/src/assets/error_images/cloud.png +0 -0
- package/template-gx-design-thin/src/assets/login_images/login_background.svg +0 -1
- package/template-gx-design-thin/src/assets/logo.png +0 -0
- package/template-gx-design-thin/src/assets/menu_font/iconfont.css +0 -94
- package/template-gx-design-thin/src/assets/menu_font/iconfont.eot +0 -0
- package/template-gx-design-thin/src/assets/menu_font/iconfont.js +0 -1
- package/template-gx-design-thin/src/assets/menu_font/iconfont.json +0 -142
- package/template-gx-design-thin/src/assets/menu_font/iconfont.svg +0 -1
- package/template-gx-design-thin/src/assets/menu_font/iconfont.ttf +0 -0
- package/template-gx-design-thin/src/assets/menu_font/iconfont.woff +0 -0
- package/template-gx-design-thin/src/assets/menu_font/iconfont.woff2 +0 -0
- package/template-gx-design-thin/src/assets/menu_font/index.less +0 -94
- package/template-gx-design-thin/src/assets/public_icon/iconfont.css +0 -42
- package/template-gx-design-thin/src/assets/public_icon/iconfont.eot +0 -0
- package/template-gx-design-thin/src/assets/public_icon/iconfont.js +0 -1
- package/template-gx-design-thin/src/assets/public_icon/iconfont.json +0 -51
- package/template-gx-design-thin/src/assets/public_icon/iconfont.svg +0 -1
- package/template-gx-design-thin/src/assets/public_icon/iconfont.ttf +0 -0
- package/template-gx-design-thin/src/assets/public_icon/iconfont.woff +0 -0
- package/template-gx-design-thin/src/assets/public_icon/iconfont.woff2 +0 -0
- package/template-gx-design-thin/src/assets/public_icon/index.less +0 -42
- package/template-gx-design-thin/src/assets/public_images/nodata.svg +0 -1
- package/template-gx-design-thin/src/common/global.ts +0 -4
- package/template-gx-design-thin/src/components/GDesign/Result/index.tsx +0 -144
- package/template-gx-design-thin/src/components/GDesign/Result/style.less +0 -140
- package/template-gx-design-thin/src/components/GDesign/utils/index.ts +0 -7
- package/template-gx-design-thin/src/components/GlobalLayout/Confirm/index.ts +0 -21
- package/template-gx-design-thin/src/components/GlobalLayout/Empty/index.vue +0 -18
- package/template-gx-design-thin/src/components/GlobalLayout/RightContent/index.tsx +0 -126
- package/template-gx-design-thin/src/components/GlobalLayout/RightContent/style.ts +0 -77
- package/template-gx-design-thin/src/components/GlobalLayout/Spin/index.tsx +0 -30
- package/template-gx-design-thin/src/components/PageLoading/index.tsx +0 -51
- package/template-gx-design-thin/src/components/index.ts +0 -6
- package/template-gx-design-thin/src/core/ant-design/index.ts +0 -10
- package/template-gx-design-thin/src/core/gx-admin-design/index.ts +0 -6
- package/template-gx-design-thin/src/core/gx-design/index.ts +0 -6
- package/template-gx-design-thin/src/core/gx-pro-design/index.ts +0 -8
- package/template-gx-design-thin/src/core/index.ts +0 -84
- package/template-gx-design-thin/src/design/ant-design/index.less +0 -4
- package/template-gx-design-thin/src/design/ant-design/layout.less +0 -22
- package/template-gx-design-thin/src/design/ant-design/menu.less +0 -48
- package/template-gx-design-thin/src/design/ant-design/spin.less +0 -23
- package/template-gx-design-thin/src/design/ant-design/tooltip.less +0 -7
- package/template-gx-design-thin/src/design/color.less +0 -1
- package/template-gx-design-thin/src/design/config.less +0 -5
- package/template-gx-design-thin/src/design/imageEditor.less +0 -180
- package/template-gx-design-thin/src/design/index.less +0 -95
- package/template-gx-design-thin/src/design/mixin.less +0 -65
- package/template-gx-design-thin/src/design/normalize.less +0 -391
- package/template-gx-design-thin/src/design/root.less +0 -3
- package/template-gx-design-thin/src/hooks/core/index.ts +0 -3
- package/template-gx-design-thin/src/hooks/core/useRequest/index.ts +0 -118
- package/template-gx-design-thin/src/hooks/event/index.ts +0 -3
- package/template-gx-design-thin/src/hooks/event/useClipboard.ts +0 -15
- package/template-gx-design-thin/src/hooks/web/index.ts +0 -5
- package/template-gx-design-thin/src/hooks/web/useThemeStyle.ts +0 -16
- package/template-gx-design-thin/src/layout/BasicLayout.vue +0 -123
- package/template-gx-design-thin/src/layout/BlankLayout.vue +0 -5
- package/template-gx-design-thin/src/layout/ContentView.vue +0 -50
- package/template-gx-design-thin/src/layout/IframeView.vue +0 -1
- package/template-gx-design-thin/src/layout/UserLayout.vue +0 -7
- package/template-gx-design-thin/src/main.ts +0 -34
- package/template-gx-design-thin/src/plugins/index.ts +0 -2
- package/template-gx-design-thin/src/router/guard/index.ts +0 -83
- package/template-gx-design-thin/src/router/guard/permissions.ts +0 -70
- package/template-gx-design-thin/src/router/guard/stateGuard.ts +0 -10
- package/template-gx-design-thin/src/router/helper/routeHelper.ts +0 -223
- package/template-gx-design-thin/src/router/helper/utils.ts +0 -19
- package/template-gx-design-thin/src/router/index.ts +0 -31
- package/template-gx-design-thin/src/router/routes/index.ts +0 -86
- package/template-gx-design-thin/src/router/routes/modules/dataSource.ts +0 -12
- package/template-gx-design-thin/src/services/common/index.ts +0 -11
- package/template-gx-design-thin/src/services/systemCenter/index.ts +0 -1
- package/template-gx-design-thin/src/services/systemCenter/menu.ts +0 -9
- package/template-gx-design-thin/src/services/userCenter/account.ts +0 -42
- package/template-gx-design-thin/src/services/userCenter/index.ts +0 -28
- package/template-gx-design-thin/src/store/index.ts +0 -32
- package/template-gx-design-thin/src/store/modules/dict.ts +0 -28
- package/template-gx-design-thin/src/store/modules/global.ts +0 -42
- package/template-gx-design-thin/src/store/modules/permission.ts +0 -19
- package/template-gx-design-thin/src/store/modules/routes.ts +0 -113
- package/template-gx-design-thin/src/store/modules/tabsRouter.ts +0 -76
- package/template-gx-design-thin/src/store/modules/user.ts +0 -136
- package/template-gx-design-thin/src/utils/accessToken.ts +0 -80
- package/template-gx-design-thin/src/utils/crypto/base64.ts +0 -101
- package/template-gx-design-thin/src/utils/crypto/index.ts +0 -57
- package/template-gx-design-thin/src/utils/env.ts +0 -50
- package/template-gx-design-thin/src/utils/fetchFile.ts +0 -81
- package/template-gx-design-thin/src/utils/index.ts +0 -123
- package/template-gx-design-thin/src/utils/pageTitle.ts +0 -20
- package/template-gx-design-thin/src/utils/request/XHR.ts +0 -139
- package/template-gx-design-thin/src/utils/request/axiosCancel.ts +0 -69
- package/template-gx-design-thin/src/utils/request/checkStatus.ts +0 -25
- package/template-gx-design-thin/src/utils/request/index.ts +0 -144
- package/template-gx-design-thin/src/utils/request/typings.ts +0 -171
- package/template-gx-design-thin/src/utils/storage.ts +0 -199
- package/template-gx-design-thin/src/utils/uploadFile.ts +0 -27
- package/template-gx-design-thin/src/utils/util.ts +0 -198
- package/template-gx-design-thin/src/utils/validate.ts +0 -216
- package/template-gx-design-thin/src/views/Iframe/index.vue +0 -76
- package/template-gx-design-thin/src/views/Page/one.vue +0 -13
- package/template-gx-design-thin/src/views/Page/two.vue +0 -13
- package/template-gx-design-thin/src/views/exception/403/index.vue +0 -7
- package/template-gx-design-thin/src/views/exception/404/index.vue +0 -9
- package/template-gx-design-thin/src/views/user/login/index.vue +0 -109
- package/template-gx-design-thin/src/views/user/login/style.less +0 -38
- package/template-gx-design-thin/tsconfig.json +0 -46
- package/template-gx-design-thin/types/ant-design-import.d.ts +0 -99
- package/template-gx-design-thin/types/auto-imports.d.ts +0 -81
- package/template-gx-design-thin/types/components.d.ts +0 -24
- package/template-gx-design-thin/types/config.d.ts +0 -44
- package/template-gx-design-thin/types/global.d.ts +0 -97
- package/template-gx-design-thin/types/mock.d.ts +0 -16
- package/template-gx-design-thin/types/module.d.ts +0 -20
- package/template-gx-design-thin/types/response.d.ts +0 -15
- package/template-gx-design-thin/unocss.config.ts +0 -101
- package/template-gx-design-thin/vite.config.ts +0 -120
- package/template-gx-design-thin/yarn.lock +0 -9492
|
@@ -1,271 +0,0 @@
|
|
|
1
|
-
import type { MockMethod, Recordable, RespThisType, ViteMockOptions } from './types'
|
|
2
|
-
import path from 'node:path'
|
|
3
|
-
import fs from 'node:fs'
|
|
4
|
-
import chokidar from 'chokidar'
|
|
5
|
-
import colors from 'picocolors'
|
|
6
|
-
import url from 'node:url'
|
|
7
|
-
import fg from 'fast-glob'
|
|
8
|
-
import Mock from 'mockjs'
|
|
9
|
-
import { match, pathToRegexp } from 'path-to-regexp'
|
|
10
|
-
import { isAbsPath, isArray, isFunction, isRegExp, sleep } from './utils'
|
|
11
|
-
import type { IncomingMessage, NextHandleFunction } from 'connect'
|
|
12
|
-
import type { GetOutputFile } from 'bundle-require'
|
|
13
|
-
import { bundleRequire, JS_EXT_RE } from 'bundle-require'
|
|
14
|
-
import type { ResolvedConfig } from 'vite'
|
|
15
|
-
|
|
16
|
-
export let mockData: MockMethod[] = []
|
|
17
|
-
|
|
18
|
-
export async function createMockServer(
|
|
19
|
-
opt: ViteMockOptions = { mockPath: 'mock', configPath: 'vite.mock.config' },
|
|
20
|
-
config: ResolvedConfig,
|
|
21
|
-
) {
|
|
22
|
-
opt = {
|
|
23
|
-
mockPath: 'mock',
|
|
24
|
-
watchFiles: true,
|
|
25
|
-
configPath: 'vite.mock.config.ts',
|
|
26
|
-
logger: true,
|
|
27
|
-
cors: true,
|
|
28
|
-
...opt,
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
if (mockData.length > 0)
|
|
32
|
-
return
|
|
33
|
-
mockData = await getMockConfig(opt, config)
|
|
34
|
-
await createWatch(opt, config)
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
// request match
|
|
38
|
-
export async function requestMiddleware(opt: ViteMockOptions) {
|
|
39
|
-
const { logger = true } = opt
|
|
40
|
-
const middleware: NextHandleFunction = async (req, res, next) => {
|
|
41
|
-
let queryParams: {
|
|
42
|
-
query?: {
|
|
43
|
-
[key: string]: any
|
|
44
|
-
}
|
|
45
|
-
pathname?: string | null
|
|
46
|
-
} = {}
|
|
47
|
-
|
|
48
|
-
if (req.url) {
|
|
49
|
-
queryParams = url.parse(req.url, true)
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
const reqUrl = queryParams.pathname
|
|
53
|
-
|
|
54
|
-
const matchRequest = mockData.find((item) => {
|
|
55
|
-
if (!reqUrl || !item || !item.url) {
|
|
56
|
-
return false
|
|
57
|
-
}
|
|
58
|
-
if (item.method && item.method.toUpperCase() !== req.method) {
|
|
59
|
-
return false
|
|
60
|
-
}
|
|
61
|
-
return pathToRegexp(item.url).test(reqUrl)
|
|
62
|
-
})
|
|
63
|
-
|
|
64
|
-
if (matchRequest) {
|
|
65
|
-
const isGet = req.method && req.method.toUpperCase() === 'GET'
|
|
66
|
-
const { response, rawResponse, timeout, statusCode, url } = matchRequest
|
|
67
|
-
|
|
68
|
-
if (timeout) {
|
|
69
|
-
await sleep(timeout)
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
const urlMatch = match(url, { decode: decodeURIComponent })
|
|
73
|
-
|
|
74
|
-
let query = queryParams.query as any
|
|
75
|
-
if (reqUrl) {
|
|
76
|
-
if ((isGet && JSON.stringify(query) === '{}') || !isGet) {
|
|
77
|
-
const params = (urlMatch(reqUrl) as any).params
|
|
78
|
-
if (JSON.stringify(params) !== '{}') {
|
|
79
|
-
query = (urlMatch(reqUrl) as any).params || {}
|
|
80
|
-
} else {
|
|
81
|
-
query = queryParams.query || {}
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
const self: RespThisType = { req, res, parseJson: parseJson.bind(null, req) }
|
|
87
|
-
if (isFunction(rawResponse)) {
|
|
88
|
-
await rawResponse.bind(self)(req, res)
|
|
89
|
-
} else {
|
|
90
|
-
const body = await parseJson(req)
|
|
91
|
-
res.setHeader('Content-Type', 'application/json')
|
|
92
|
-
if (opt) {
|
|
93
|
-
res.setHeader('Access-Control-Allow-Credentials', true)
|
|
94
|
-
res.setHeader('Access-Control-Allow-Origin', req.headers.origin || '*')
|
|
95
|
-
}
|
|
96
|
-
res.statusCode = statusCode || 200
|
|
97
|
-
const mockResponse = isFunction(response)
|
|
98
|
-
? response.bind(self)({ url: req.url as any, body, query, headers: req.headers })
|
|
99
|
-
: response
|
|
100
|
-
res.end(JSON.stringify(Mock.mock(mockResponse)))
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
logger && loggerOutput('request invoke', req.url!)
|
|
104
|
-
return
|
|
105
|
-
}
|
|
106
|
-
next()
|
|
107
|
-
}
|
|
108
|
-
return middleware
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
// create watch mock
|
|
112
|
-
function createWatch(opt: ViteMockOptions, config: ResolvedConfig) {
|
|
113
|
-
const { configPath, logger, watchFiles } = opt
|
|
114
|
-
|
|
115
|
-
if (!watchFiles) {
|
|
116
|
-
return
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
const { absConfigPath, absMockPath } = getPath(opt)
|
|
120
|
-
|
|
121
|
-
if (process.env.VITE_DISABLED_WATCH_MOCK === 'true') {
|
|
122
|
-
return
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
const watchDir = []
|
|
126
|
-
const exitsConfigPath = fs.existsSync(absConfigPath)
|
|
127
|
-
|
|
128
|
-
exitsConfigPath && configPath ? watchDir.push(absConfigPath) : watchDir.push(absMockPath)
|
|
129
|
-
|
|
130
|
-
const watcher = chokidar.watch(watchDir, {
|
|
131
|
-
ignoreInitial: true,
|
|
132
|
-
// ignore files generated by `bundle require`
|
|
133
|
-
ignored: '**/_*.bundled_*.(mjs|cjs)',
|
|
134
|
-
})
|
|
135
|
-
|
|
136
|
-
watcher.on('all', async (event, file) => {
|
|
137
|
-
logger && loggerOutput(`mock file ${event}`, file)
|
|
138
|
-
mockData = await getMockConfig(opt, config)
|
|
139
|
-
})
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
// clear cache
|
|
143
|
-
// function cleanRequireCache(opt: ViteMockOptions) {
|
|
144
|
-
// if (typeof require === 'undefined' || !require.cache) {
|
|
145
|
-
// return
|
|
146
|
-
// }
|
|
147
|
-
// const { absConfigPath, absMockPath } = getPath(opt)
|
|
148
|
-
// Object.keys(require.cache).forEach((file) => {
|
|
149
|
-
// if (file === absConfigPath || file.indexOf(absMockPath) > -1) {
|
|
150
|
-
// delete require.cache[file]
|
|
151
|
-
// }
|
|
152
|
-
// })
|
|
153
|
-
// }
|
|
154
|
-
|
|
155
|
-
function parseJson(req: IncomingMessage): Promise<Recordable> {
|
|
156
|
-
return new Promise((resolve) => {
|
|
157
|
-
let body = ''
|
|
158
|
-
let jsonStr = ''
|
|
159
|
-
req.on('data', function (chunk) {
|
|
160
|
-
body += chunk
|
|
161
|
-
})
|
|
162
|
-
req.on('end', function () {
|
|
163
|
-
try {
|
|
164
|
-
jsonStr = JSON.parse(body)
|
|
165
|
-
} catch (err) {
|
|
166
|
-
jsonStr = ''
|
|
167
|
-
}
|
|
168
|
-
resolve(jsonStr as any)
|
|
169
|
-
return
|
|
170
|
-
})
|
|
171
|
-
})
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
// load mock .ts files and watch
|
|
175
|
-
async function getMockConfig(opt: ViteMockOptions, config: ResolvedConfig) {
|
|
176
|
-
const { absConfigPath, absMockPath } = getPath(opt)
|
|
177
|
-
const { ignore, configPath, logger } = opt
|
|
178
|
-
|
|
179
|
-
let ret: MockMethod[] = []
|
|
180
|
-
if (configPath && fs.existsSync(absConfigPath)) {
|
|
181
|
-
logger && loggerOutput(`load mock data from`, absConfigPath)
|
|
182
|
-
ret = await resolveModule(absConfigPath, config)
|
|
183
|
-
return ret
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
const mockFiles = fg
|
|
187
|
-
.sync(`**/*.{ts,mjs,js}`, {
|
|
188
|
-
cwd: absMockPath,
|
|
189
|
-
})
|
|
190
|
-
.filter((item) => {
|
|
191
|
-
if (!ignore) {
|
|
192
|
-
return true
|
|
193
|
-
}
|
|
194
|
-
if (isFunction(ignore)) {
|
|
195
|
-
return !ignore(item)
|
|
196
|
-
}
|
|
197
|
-
if (isRegExp(ignore)) {
|
|
198
|
-
return !ignore.test(path.basename(item))
|
|
199
|
-
}
|
|
200
|
-
return true
|
|
201
|
-
})
|
|
202
|
-
try {
|
|
203
|
-
ret = []
|
|
204
|
-
const resolveModulePromiseList = []
|
|
205
|
-
|
|
206
|
-
for (let index = 0; index < mockFiles.length; index++) {
|
|
207
|
-
const mockFile = mockFiles[index]
|
|
208
|
-
resolveModulePromiseList.push(resolveModule(path.join(absMockPath, mockFile), config))
|
|
209
|
-
}
|
|
210
|
-
const loadAllResult = await Promise.all(resolveModulePromiseList)
|
|
211
|
-
for (const resultModule of loadAllResult) {
|
|
212
|
-
let mod = resultModule
|
|
213
|
-
if (!isArray(mod)) {
|
|
214
|
-
mod = [mod]
|
|
215
|
-
}
|
|
216
|
-
ret = [...ret, ...mod]
|
|
217
|
-
}
|
|
218
|
-
} catch (error: any) {
|
|
219
|
-
loggerOutput(`mock reload error`, error)
|
|
220
|
-
ret = []
|
|
221
|
-
}
|
|
222
|
-
return ret
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
// fixed file generation format
|
|
226
|
-
// use a random path to avoid import cache
|
|
227
|
-
const getOutputFile: GetOutputFile = (filepath, format) => {
|
|
228
|
-
const dirname = path.dirname(filepath)
|
|
229
|
-
const basename = path.basename(filepath)
|
|
230
|
-
const randomname = `${Date.now()}_${Math.random().toString(36).substring(2, 15)}`
|
|
231
|
-
return path.resolve(
|
|
232
|
-
dirname,
|
|
233
|
-
`_${basename.replace(JS_EXT_RE, `.bundled_${randomname}.${format === 'esm' ? 'mjs' : 'cjs'}`)}`,
|
|
234
|
-
)
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
// Inspired by vite
|
|
238
|
-
// support mock .ts files
|
|
239
|
-
async function resolveModule(p: string, config: ResolvedConfig): Promise<any> {
|
|
240
|
-
const mockData = await bundleRequire({
|
|
241
|
-
filepath: p,
|
|
242
|
-
getOutputFile,
|
|
243
|
-
})
|
|
244
|
-
|
|
245
|
-
let mod = mockData.mod.default || mockData.mod
|
|
246
|
-
if (isFunction(mod)) {
|
|
247
|
-
mod = await mod({ env: config.env, mode: config.mode, command: config.command })
|
|
248
|
-
}
|
|
249
|
-
return mod
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
// get custom config file path and mock dir path
|
|
253
|
-
function getPath(opt: ViteMockOptions) {
|
|
254
|
-
const { mockPath, configPath } = opt
|
|
255
|
-
const cwd = process.cwd()
|
|
256
|
-
const absMockPath = isAbsPath(mockPath) ? mockPath! : path.join(cwd, mockPath || '')
|
|
257
|
-
const absConfigPath = path.join(cwd, configPath || '')
|
|
258
|
-
return {
|
|
259
|
-
absMockPath,
|
|
260
|
-
absConfigPath,
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
function loggerOutput(title: string, msg: string, type: 'info' | 'error' = 'info') {
|
|
265
|
-
const tag = type === 'info' ? colors.cyan(`[vite:mock]`) : colors.red(`[vite:mock-server]`)
|
|
266
|
-
return console.log(
|
|
267
|
-
`${colors.dim(new Date().toLocaleTimeString())} ${tag} ${colors.green(title)} ${colors.dim(
|
|
268
|
-
msg,
|
|
269
|
-
)}`,
|
|
270
|
-
)
|
|
271
|
-
}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
(async () => {
|
|
2
|
-
try {
|
|
3
|
-
await import('mockjs')
|
|
4
|
-
} catch (e) {
|
|
5
|
-
throw new Error('vite-plugin-vue-mock requires mockjs to be present in the dependency tree.')
|
|
6
|
-
}
|
|
7
|
-
})()
|
|
8
|
-
|
|
9
|
-
import type { Plugin, ResolvedConfig } from 'vite'
|
|
10
|
-
import { normalizePath } from 'vite'
|
|
11
|
-
import path from 'node:path'
|
|
12
|
-
import type { ViteMockOptions } from './types'
|
|
13
|
-
import { fileExists } from './utils'
|
|
14
|
-
import { createMockServer, requestMiddleware } from './createMockServer'
|
|
15
|
-
|
|
16
|
-
function getDefaultPath(supportTs = true) {
|
|
17
|
-
return path.resolve(process.cwd(), `src/main.${supportTs ? 'ts' : 'js'}`)
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export function viteMockServe(opt: ViteMockOptions = {}): Plugin {
|
|
21
|
-
let isDev = false
|
|
22
|
-
let needSourcemap = false
|
|
23
|
-
let config: ResolvedConfig
|
|
24
|
-
let defaultPath = getDefaultPath()
|
|
25
|
-
if (!fileExists(defaultPath)) {
|
|
26
|
-
defaultPath = getDefaultPath(false)
|
|
27
|
-
if (!fileExists(defaultPath)) {
|
|
28
|
-
defaultPath = ''
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
const defaultEnter = normalizePath(defaultPath)
|
|
33
|
-
|
|
34
|
-
const { injectFile = defaultEnter } = opt
|
|
35
|
-
|
|
36
|
-
return {
|
|
37
|
-
name: 'vite:mock',
|
|
38
|
-
enforce: 'pre' as const,
|
|
39
|
-
configResolved(resolvedConfig) {
|
|
40
|
-
config = resolvedConfig
|
|
41
|
-
isDev = config.command === 'serve'
|
|
42
|
-
needSourcemap = !!resolvedConfig.build.sourcemap
|
|
43
|
-
isDev && createMockServer(opt, config)
|
|
44
|
-
},
|
|
45
|
-
|
|
46
|
-
configureServer: async ({ middlewares }) => {
|
|
47
|
-
const { enable = isDev } = opt
|
|
48
|
-
if (!enable) {
|
|
49
|
-
return
|
|
50
|
-
}
|
|
51
|
-
const middleware = await requestMiddleware(opt)
|
|
52
|
-
middlewares.use(middleware)
|
|
53
|
-
},
|
|
54
|
-
transform: (code, id) => {
|
|
55
|
-
if (isDev || !injectFile || !id.endsWith(injectFile)) {
|
|
56
|
-
return null
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
const { injectCode = '' } = opt
|
|
60
|
-
|
|
61
|
-
return {
|
|
62
|
-
map: needSourcemap ? this.getCombinedSourcemap() : null,
|
|
63
|
-
code: `${code}\n${injectCode}`
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
export * from './types'
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { IncomingMessage, ServerResponse } from 'http'
|
|
2
|
-
|
|
3
|
-
export interface ViteMockOptions {
|
|
4
|
-
mockPath?: string;
|
|
5
|
-
configPath?: string;
|
|
6
|
-
injectFile?: string;
|
|
7
|
-
injectCode?: string;
|
|
8
|
-
ignore?: RegExp | ((fileName: string) => boolean);
|
|
9
|
-
watchFiles?: boolean;
|
|
10
|
-
enable?: boolean;
|
|
11
|
-
cors?: boolean;
|
|
12
|
-
/**
|
|
13
|
-
* Automatic recognition, no need to configure again
|
|
14
|
-
* @deprecated Deprecated after 2.8.0
|
|
15
|
-
*/
|
|
16
|
-
supportTs?: boolean;
|
|
17
|
-
logger?: boolean;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export interface RespThisType {
|
|
21
|
-
req: IncomingMessage
|
|
22
|
-
res: ServerResponse
|
|
23
|
-
parseJson: () => any
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export type MethodType = 'get' | 'post' | 'put' | 'delete' | 'patch'
|
|
27
|
-
|
|
28
|
-
export type Recordable<T = any> = Record<string, T>
|
|
29
|
-
|
|
30
|
-
export declare interface MockMethod {
|
|
31
|
-
url: string
|
|
32
|
-
method?: MethodType
|
|
33
|
-
timeout?: number
|
|
34
|
-
statusCode?: number
|
|
35
|
-
response?:
|
|
36
|
-
| ((
|
|
37
|
-
this: RespThisType,
|
|
38
|
-
opt: { url: Recordable; body: Recordable; query: Recordable; headers: Recordable },
|
|
39
|
-
) => any)
|
|
40
|
-
| any
|
|
41
|
-
rawResponse?: (this: RespThisType, req: IncomingMessage, res: ServerResponse) => void
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
export interface MockConfig {
|
|
45
|
-
env: Record<string, any>
|
|
46
|
-
mode: string
|
|
47
|
-
command: 'build' | 'serve'
|
|
48
|
-
}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import fs from 'node:fs'
|
|
2
|
-
|
|
3
|
-
const toString = Object.prototype.toString
|
|
4
|
-
|
|
5
|
-
export function is(val: unknown, type: string) {
|
|
6
|
-
return toString.call(val) === `[object ${type}]`
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export function fileExists(f: string) {
|
|
10
|
-
try {
|
|
11
|
-
fs.accessSync(f, fs.constants.W_OK);
|
|
12
|
-
return true;
|
|
13
|
-
} catch (error) {
|
|
14
|
-
return false;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export function isFunction<T = Function>(val: unknown): val is T {
|
|
19
|
-
return is(val, 'Function') || is(val, 'AsyncFunction')
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export function isArray(val: any): val is Array<any> {
|
|
23
|
-
return val && Array.isArray(val)
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export function isRegExp(val: unknown): val is RegExp {
|
|
27
|
-
return is(val, 'RegExp')
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
export function isAbsPath(path: string | undefined) {
|
|
31
|
-
if (!path) {
|
|
32
|
-
return false
|
|
33
|
-
}
|
|
34
|
-
// Windows 路径格式:C:\ 或 \\ 开头,或已含盘符(D:\path\to\file)
|
|
35
|
-
if (/^([a-zA-Z]:\\|\\\\|(?:\/|\uFF0F){2,})/.test(path)) {
|
|
36
|
-
return true
|
|
37
|
-
}
|
|
38
|
-
// Unix/Linux 路径格式:/ 开头
|
|
39
|
-
return /^\/[^/]/.test(path)
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
export function sleep(time: number) {
|
|
43
|
-
return new Promise((resolve) => {
|
|
44
|
-
setTimeout(() => {
|
|
45
|
-
resolve('')
|
|
46
|
-
}, time)
|
|
47
|
-
})
|
|
48
|
-
}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import type { Plugin } from 'vite'
|
|
2
|
-
import chalk from 'chalk'
|
|
3
|
-
import { readPackageJSON } from 'pkg-types'
|
|
4
|
-
import { defaultSettings } from '../../../config'
|
|
5
|
-
import { getPackageSize, getRootPath, rootPath } from '../../util'
|
|
6
|
-
|
|
7
|
-
const { outputDir } = defaultSettings
|
|
8
|
-
|
|
9
|
-
export default async function viteNotice(): Promise<Plugin> {
|
|
10
|
-
let config: { command: string }
|
|
11
|
-
const { name = '' } = await readPackageJSON(rootPath)
|
|
12
|
-
|
|
13
|
-
return {
|
|
14
|
-
name: 'vite:notice',
|
|
15
|
-
configResolved(resolvedConfig) {
|
|
16
|
-
config = resolvedConfig
|
|
17
|
-
},
|
|
18
|
-
buildStart() {
|
|
19
|
-
console.log(
|
|
20
|
-
chalk.bold(
|
|
21
|
-
chalk.green(
|
|
22
|
-
`👏Welcome to use ${chalk.blue(
|
|
23
|
-
'[gx-design-pro]'
|
|
24
|
-
)}, If you feel good, remember to click on the link below to give a star https://github.com/gx12358/vue3-antd-admin`
|
|
25
|
-
)
|
|
26
|
-
)
|
|
27
|
-
)
|
|
28
|
-
},
|
|
29
|
-
closeBundle() {
|
|
30
|
-
if (config.command === 'build') {
|
|
31
|
-
getPackageSize({
|
|
32
|
-
folder: getRootPath(outputDir),
|
|
33
|
-
callBack: (size: string) => {
|
|
34
|
-
console.log(chalk.bold(chalk.green(`✨ ${chalk.blue(`[${name}]`)} all build successfully, Total files ${size}`)))
|
|
35
|
-
}
|
|
36
|
-
})
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
module.exports = {
|
|
2
|
-
ignores: [(commit) => commit.includes('init')],
|
|
3
|
-
extends: ['@commitlint/config-conventional'],
|
|
4
|
-
rules: {
|
|
5
|
-
'body-leading-blank': [2, 'always'],
|
|
6
|
-
'footer-leading-blank': [1, 'always'],
|
|
7
|
-
'header-max-length': [2, 'always', 108],
|
|
8
|
-
'subject-empty': [2, 'never'],
|
|
9
|
-
'type-empty': [2, 'never'],
|
|
10
|
-
'type-enum': [
|
|
11
|
-
2,
|
|
12
|
-
'always',
|
|
13
|
-
[
|
|
14
|
-
'feat',
|
|
15
|
-
'fix',
|
|
16
|
-
'perf',
|
|
17
|
-
'style',
|
|
18
|
-
'docs',
|
|
19
|
-
'test',
|
|
20
|
-
'refactor',
|
|
21
|
-
'build',
|
|
22
|
-
'ci',
|
|
23
|
-
'chore',
|
|
24
|
-
'revert',
|
|
25
|
-
'wip',
|
|
26
|
-
'workflow',
|
|
27
|
-
'types',
|
|
28
|
-
'release',
|
|
29
|
-
],
|
|
30
|
-
],
|
|
31
|
-
},
|
|
32
|
-
};
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @description 导出默认通用配置
|
|
3
|
-
*/
|
|
4
|
-
const settingConfig: SettingConfig = {
|
|
5
|
-
// 开发以及部署时的URL,hash模式时在不确定二级目录名称的情况下建议使用""代表相对路径或者"/二级目录/",history模式默认使用"/"或者"/二级目录/"
|
|
6
|
-
publicPath: './',
|
|
7
|
-
// 生产环境构建文件的目录名
|
|
8
|
-
outputDir: 'dist',
|
|
9
|
-
// 放置生成的静态资源 (js、css、img、fonts) 的 (相对于 outputDir 的) 目录。
|
|
10
|
-
assetsDir: 'static',
|
|
11
|
-
// 标题 (包括初次加载雪花屏的标题 页面的标题 浏览器的标题)
|
|
12
|
-
title: 'GX Pro Admin',
|
|
13
|
-
// 短标题
|
|
14
|
-
shortName: 'gx_pro_admin',
|
|
15
|
-
// 标题分隔符
|
|
16
|
-
titleSeparator: ' - ',
|
|
17
|
-
// 标题是否反转 如果为false:"page - title",如果为ture:"title - page"
|
|
18
|
-
titleReverse: false,
|
|
19
|
-
// 是否开启水印
|
|
20
|
-
waterMark: true,
|
|
21
|
-
// 水印字符
|
|
22
|
-
waterMarkTitle: 'GX Pro Admin',
|
|
23
|
-
// 滚动区域选择器
|
|
24
|
-
viewScrollRoot: '#gx-pro-admin>.gx-scrollbar>.gx-scrollbar-wrap',
|
|
25
|
-
// 开启cdn
|
|
26
|
-
useCdn: true,
|
|
27
|
-
// cdn 地址
|
|
28
|
-
cdnUrl: 'https://cdn.bootcdn.net/ajax/libs/{name}/{version}/{path}',
|
|
29
|
-
// cdn 模块集合
|
|
30
|
-
cdnModules: [
|
|
31
|
-
{
|
|
32
|
-
name: 'axios',
|
|
33
|
-
globalName: 'axios',
|
|
34
|
-
path: 'axios.min.js'
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
name: 'dayjs',
|
|
38
|
-
globalName: 'dayjs',
|
|
39
|
-
path: 'dayjs.min.js'
|
|
40
|
-
}
|
|
41
|
-
],
|
|
42
|
-
// 开启proxy
|
|
43
|
-
useProxy: true,
|
|
44
|
-
// proxy target
|
|
45
|
-
proxyTarget: 'http://127.0.0.1:3000',
|
|
46
|
-
// 接口前缀
|
|
47
|
-
requestPrefix: '/api',
|
|
48
|
-
// mock-接口前缀
|
|
49
|
-
mockPrefixUrl: '/mock-server',
|
|
50
|
-
// 开发环境端口号
|
|
51
|
-
devPort: 9280,
|
|
52
|
-
// pro版本copyright可随意修改
|
|
53
|
-
copyright: 'gx12358 2539306317@qq.com',
|
|
54
|
-
// 缓存路由的最大数量
|
|
55
|
-
keepAliveMaxNum: 99,
|
|
56
|
-
// 路由模式,可选值为 browser 或 hash
|
|
57
|
-
routerMode: 'hash',
|
|
58
|
-
// 不经过token校验的路由
|
|
59
|
-
routesWhiteList: [ '/user/login', '/user/register', '/exception/404', '/exception/403' ],
|
|
60
|
-
// token名称
|
|
61
|
-
tokenName: 'Authorization',
|
|
62
|
-
// token在localStorage、sessionStorage、cookie存储的key的名称
|
|
63
|
-
tokenTableName: 'GxAccessToken',
|
|
64
|
-
// token存储位置localStorage sessionStorage cookie
|
|
65
|
-
storage: 'localStorage',
|
|
66
|
-
// token失效回退到登录页时是否记录本次的路由
|
|
67
|
-
recordRoute: false,
|
|
68
|
-
// 是否开启登录拦截
|
|
69
|
-
loginInterception: true,
|
|
70
|
-
// 是否开启登录RSA加密
|
|
71
|
-
loginRSA: false,
|
|
72
|
-
// front(前端导出路由)和 all(后端导出路由)两种方式
|
|
73
|
-
authentication: 'all',
|
|
74
|
-
// mock数据是否检查token
|
|
75
|
-
checkMockToken: true
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
export default settingConfig
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 在生产环境 代理是无法生效的,所以这里没有生产环境的配置
|
|
3
|
-
* The agent cannot take effect in the production environment
|
|
4
|
-
* so there is no configuration of the production environment
|
|
5
|
-
* For details, please see
|
|
6
|
-
* https://pro.ant.design/docs/deploy
|
|
7
|
-
*/
|
|
8
|
-
import type { ProxyOptions } from 'vite'
|
|
9
|
-
import { isObject, isString } from '@gx-design-vue/pro-utils'
|
|
10
|
-
import defaultSettings from './defaultSettings'
|
|
11
|
-
|
|
12
|
-
type ProxyTargetList = ProxyOptions & { rewrite: (path: string) => string }
|
|
13
|
-
|
|
14
|
-
export function createProxy(prefix) {
|
|
15
|
-
const ret = {
|
|
16
|
-
dev: {},
|
|
17
|
-
test: {},
|
|
18
|
-
pre: {}
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
if (isObject(defaultSettings.proxyTarget)) {
|
|
22
|
-
Object.keys(defaultSettings.proxyTarget).forEach((prefix) => {
|
|
23
|
-
const proxy = {
|
|
24
|
-
target: `${defaultSettings.proxyTarget[prefix]}`,
|
|
25
|
-
changeOrigin: true,
|
|
26
|
-
ws: true,
|
|
27
|
-
rewrite: path => path.replace(new RegExp(`^${prefix}`), '')
|
|
28
|
-
} as ProxyTargetList
|
|
29
|
-
|
|
30
|
-
ret.dev[prefix] = proxy
|
|
31
|
-
ret.test[prefix] = proxy
|
|
32
|
-
ret.pre[prefix] = proxy
|
|
33
|
-
})
|
|
34
|
-
} else if (isString(defaultSettings.proxyTarget)) {
|
|
35
|
-
const proxy = {
|
|
36
|
-
target: `${defaultSettings.proxyTarget}`,
|
|
37
|
-
changeOrigin: true,
|
|
38
|
-
ws: true,
|
|
39
|
-
rewrite: path => path.replace(new RegExp(`^${prefix}`), '')
|
|
40
|
-
}
|
|
41
|
-
ret.dev[prefix] = proxy
|
|
42
|
-
ret.test[prefix] = proxy
|
|
43
|
-
ret.pre[prefix] = proxy
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
return ret
|
|
47
|
-
}
|