├── .github └── workflows │ └── compileAndRuntime.yml ├── .gitignore ├── .hintrc ├── .npmignore ├── LICENSE ├── README.md ├── example ├── .gitignore ├── README.md ├── index.html ├── mock │ ├── apis │ │ ├── cjs2.mock.js │ │ └── es2.mock.ts │ ├── cjs.mock.js │ └── es.mock.ts ├── module.d.ts ├── package-lock.json ├── package.json ├── public │ └── favicon.ico ├── src │ ├── App.vue │ ├── assets │ │ └── logo.png │ ├── components │ │ └── HelloWorld.vue │ ├── main.ts │ ├── shims-vue.d.ts │ └── vite-env.d.ts ├── test-vite.config.ts ├── tsconfig.json └── vite.config.ts ├── example2 ├── .vscode │ └── extensions.json ├── README.md ├── index.html ├── mock │ └── routes.mock.ts ├── package-lock.json ├── package.json ├── src │ ├── App.vue │ ├── main.ts │ └── vite-env.d.ts ├── tsconfig.json └── vite.config.ts ├── package-lock.json ├── package.json ├── publish.bat ├── publish.sh ├── src ├── index.ts └── module.d.ts └── tsconfig.json /.github/workflows/compileAndRuntime.yml: -------------------------------------------------------------------------------- 1 | name: compile-and-runtime-test 2 | 3 | on: push 4 | 5 | jobs: 6 | doAll: 7 | strategy: 8 | matrix: 9 | node-version: [16.x, 18.x, 20.x] 10 | os: [ubuntu-latest, windows-latest] 11 | 12 | runs-on: ${{ matrix.os }} 13 | steps: 14 | - uses: actions/checkout@v3 15 | - name: Use Node.js ${{ matrix.node-version }} 16 | uses: actions/setup-node@v3 17 | with: 18 | node-version: ${{ matrix.node-version }} 19 | cache: 'npm' 20 | 21 | - run: npm ci --registry=https://registry.npmjs.org/ 22 | - run: npm run build 23 | 24 | - name: restore example2 25 | working-directory: ./example2 26 | run: npm ci --registry=https://registry.npmjs.org/ 27 | 28 | # test esm build-time 29 | - name: build build-example2 30 | working-directory: ./example2 31 | run: npm run build 32 | # test esm runtime 33 | - name: runtime and api test example2 34 | working-directory: ./example2 35 | run: npm run runtest 36 | 37 | - name: restore example 38 | working-directory: ./example 39 | run: npm ci --registry=https://registry.npmjs.org/ 40 | # test cjs runtime 41 | - name: runtime and api test example 42 | working-directory: ./example 43 | run: npm run runtest 44 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | dist 4 | *.local 5 | -------------------------------------------------------------------------------- /.hintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "development" 4 | ], 5 | "hints": { 6 | "typescript-config/consistent-casing": "off" 7 | } 8 | } -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | example 2 | example2 3 | publish.bat 4 | publish.sh 5 | package-lock.json 6 | .hintrc 7 | .github/* 8 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021-present, Octoape and All contributors 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # vite-plugin-mock-server 2 | 3 | [![npm][npm-img]][npm-url] 4 | 5 | Provide local mocks for [Vite]. 6 | 7 | A mock server plugin for [Vite], developed based on TypeScript. 8 | And support using TypeScript and JavaScript to write Mock API. When the Mock API file 9 | is modified, it will be hot updated automatically. Support and compatibility 10 | with ***[express.js](https://github.com/expressjs/)*** middlewares. 11 | 12 | ## Install 13 | 14 | **node version:** >=12.0.0 15 | 16 | **vite version:** >=2.0.0 17 | 18 | ```bash 19 | # if using npm 20 | npm i vite-plugin-mock-server -D 21 | # if using yarn 22 | yarn add vite-plugin-mock-server -D 23 | ``` 24 | 25 | ### Run example 26 | 27 | ```bash 28 | cd ./example 29 | npm install 30 | npm run dev 31 | ``` 32 | 33 | ## Usage 34 | 35 | - Config plugin in vite.config.ts, compatible with express.js middlewares. 36 | 37 | ```ts 38 | import { defineConfig } from 'vite' 39 | import vue from '@vitejs/plugin-vue' 40 | import bodyParser from 'body-parser' 41 | import cookieParser from 'cookie-parser' 42 | import mockServer from 'vite-plugin-mock-server' 43 | 44 | export default defineConfig({ 45 | plugins: [ 46 | vue(), 47 | mockServer({ 48 | logLevel: 'info', 49 | middlewares: [ 50 | cookieParser(), 51 | bodyParser.json(), 52 | bodyParser.urlencoded(), 53 | bodyParser.text(), 54 | bodyParser.raw() 55 | ] 56 | }) 57 | ] 58 | }) 59 | ``` 60 | 61 | - Or just use it with the default parameters, place your mocks in the folder "mock" with name that prefix *.mock.ts or *mock.js, The default api to mock is '/api/' 62 | ```ts 63 | import { defineConfig } from 'vite' 64 | import vue from '@vitejs/plugin-vue' 65 | import mockServer from 'vite-plugin-mock-server' 66 | 67 | export default defineConfig({ 68 | plugins: [ 69 | vue(), 70 | mockServer()) 71 | ] 72 | }) 73 | ``` 74 | 75 | ## Module exports 76 | 77 | - MockOptions 78 | 79 | `mockModules` Ignore manual configuration, it will be filled in automatically. 80 | 81 | ```ts 82 | export type MockOptions = { 83 | logLevel?: 'info' | 'error' | 'off' 84 | urlPrefixes?: string[] 85 | mockJsSuffix?: string 86 | mockTsSuffix?: string 87 | mockRootDir?: string 88 | mockModules?: string[] 89 | noHandlerResponse404?: boolean 90 | middlewares?: MockLayer[] 91 | printStartupLog?: boolean 92 | } 93 | 94 | // default options 95 | const options: MockOptions = { 96 | logLevel: 'info', 97 | urlPrefixes: [ '/api/' ], 98 | mockRootDir: './mock', 99 | mockJsSuffix: '.mock.js', 100 | mockTsSuffix: '.mock.ts', 101 | noHandlerResponse404: true, 102 | mockModules: [], 103 | middlewares: [], 104 | printStartupLog: true 105 | } 106 | ``` 107 | 108 | - Request 109 | 110 | ```ts 111 | type Request = Connect.IncomingMessage & { 112 | body?: any, 113 | params?: { [key: string]: string }, 114 | query?: { [key: string]: string }, 115 | cookies?: { [key: string]: string }, 116 | session?: any 117 | } 118 | ``` 119 | 120 | - MockFunction 121 | 122 | ```ts 123 | export type MockFunction = { 124 | ( 125 | req: Request, 126 | res: http.ServerResponse, 127 | /** @deprecated in 2.0, use req.params **/ 128 | urlVars?: { [key: string]: string } 129 | ): void 130 | } 131 | ``` 132 | 133 | - MockHandler 134 | 135 | ```ts 136 | export type MockHandler = { 137 | pattern: string, 138 | method?: string, 139 | handle: MockFunction 140 | } 141 | ``` 142 | 143 | - MockLayer 144 | 145 | ```ts 146 | export type MockLayer = ( 147 | req: Request, 148 | res: http.ServerResponse, 149 | next: Connect.NextFunction 150 | ) => void; 151 | ``` 152 | 153 | ## Mock file examples 154 | 155 | The `pattern` is an ant-style path pattern string, 156 | use ***[@howiefh/ant-path-matcher](https://www.npmjs.com/package/@howiefh/ant-path-matcher)*** 157 | to match the `pattern` and `request URL`. 158 | 159 | ```ts 160 | // example/mock/es.mock.ts 161 | 162 | import { MockHandler } from '../../src' 163 | 164 | const mocks: MockHandler[] = [ 165 | { 166 | pattern: '/api/test1/1', 167 | handle: (req, res) => { 168 | res.end('Hello world!' + req.url) 169 | } 170 | }, 171 | { 172 | pattern: '/api/test1/*', 173 | handle: (req, res) => { 174 | res.end('Hello world!' + req.url) 175 | } 176 | }, 177 | { 178 | pattern: '/api/test1/users/{userId}', 179 | handle: (req, res) => { 180 | const data = { 181 | url: req.url, 182 | params: req.params, 183 | query: req.query, 184 | body: req.body 185 | } 186 | res.setHeader('Content-Type', 'application/json') 187 | res.end(JSON.stringify(data)) 188 | } 189 | }, 190 | { 191 | pattern: '/api/test1/body/json', 192 | method: 'POST', 193 | handle: (req, res) => { 194 | res.setHeader('Content-Type', 'application/json') 195 | 196 | //req is incomingMessage which extends stream.Readable 197 | // --> https://nodejs.org/api/stream.html#readablereadsize 198 | // res.end need to be within the function 199 | // there is a size limit for the bodyString to get parsed 200 | req.on('data', (bodyString: string) => { 201 | let body: object = JSON.parse(bodyString) 202 | res.end(JSON.stringify(body)) 203 | }) 204 | } 205 | }, 206 | ] 207 | 208 | export default mocks 209 | 210 | // example/mock/apis/es2.mock.ts 211 | 212 | import { MockHandler } from 'vite-plugin-mock-server' 213 | 214 | export default (): MockHandler[] => [ 215 | { 216 | pattern: '/api/test2/1', 217 | handle: (req, res) => { 218 | res.end('Hello world!' + req.url) 219 | } 220 | }, 221 | { 222 | pattern: '/api/test2/2', 223 | handle: (req, res) => { 224 | res.statusCode = 203 225 | res.end('Hello world!' + req.url) 226 | } 227 | } 228 | ] 229 | ``` 230 | 231 | ```js 232 | // example/mock/cjs.mock.js 233 | 234 | module.exports = [ 235 | { 236 | pattern: '/api/merchant1', 237 | method: 'GET', 238 | handle: (req, res) => { 239 | res.end('merchant1:' + req.url) 240 | } 241 | }, 242 | { 243 | pattern: '/api/merchant2', 244 | method: 'GET', 245 | handle: (req, res) => { 246 | res.end('merchant2:' + req.url) 247 | } 248 | }, 249 | { 250 | pattern: '/api/merchant2', 251 | method: 'GET', 252 | handle: (req, res) => { 253 | res.end('merchant3:' + req.url) 254 | } 255 | } 256 | ] 257 | 258 | // example/mock/apis/cjs2.mock.js 259 | 260 | module.exports = [ 261 | { 262 | pattern: '/api/hello1', 263 | method: 'GET', 264 | handle: (req, res) => { 265 | res.end('hello1:' + req.url) 266 | } 267 | }, 268 | { 269 | pattern: '/api/hello2', 270 | method: 'GET', 271 | handle: (req, res) => { 272 | res.end('hello2:' + req.url) 273 | } 274 | }, 275 | { 276 | pattern: '/api/hello3', 277 | method: 'GET', 278 | handle: (req, res) => { 279 | res.end('hello2:' + req.url) 280 | } 281 | } 282 | ] 283 | ``` 284 | 285 | ## License 286 | 287 | MIT 288 | 289 | [npm-img]: https://img.shields.io/npm/v/vite-plugin-mock-server.svg 290 | [npm-url]: https://npmjs.com/package/vite-plugin-mock-server 291 | [Vite]: https://vitejs.dev -------------------------------------------------------------------------------- /example/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | dist 4 | dist-ssr 5 | *.local 6 | -------------------------------------------------------------------------------- /example/README.md: -------------------------------------------------------------------------------- 1 | # Vue 3 + Typescript + Vite 2 | 3 | This template should help get you started developing with Vue 3 and Typescript in Vite. 4 | 5 | ## Recommended IDE Setup 6 | 7 | [VSCode](https://code.visualstudio.com/) + [Vetur](https://marketplace.visualstudio.com/items?itemName=octref.vetur). Make sure to enable `vetur.experimental.templateInterpolationService` in settings! 8 | 9 | ### If Using ` 12 | 13 | 14 | -------------------------------------------------------------------------------- /example/mock/apis/cjs2.mock.js: -------------------------------------------------------------------------------- 1 | module.exports = [ 2 | { 3 | pattern: '/api/hello1', 4 | method: 'GET', 5 | handle: (req, res) => { 6 | res.end('hello1:' + req.url) 7 | } 8 | }, 9 | { 10 | pattern: '/api/hello2', 11 | method: 'GET', 12 | handle: (req, res) => { 13 | res.end('hello2:' + req.url) 14 | } 15 | }, 16 | { 17 | pattern: '/api/hello3', 18 | method: 'GET', 19 | handle: (req, res) => { 20 | res.end('hello2:' + req.url) 21 | } 22 | } 23 | ] -------------------------------------------------------------------------------- /example/mock/apis/es2.mock.ts: -------------------------------------------------------------------------------- 1 | import { MockHandler } from '../../../src' 2 | 3 | export default (): MockHandler[] => [ 4 | { 5 | pattern: '/api/test2/1', 6 | handle: (req, res) => { 7 | res.end('Hello world!' + req.url) 8 | } 9 | }, 10 | { 11 | pattern: '/api/test2/2', 12 | handle: (req, res) => { 13 | res.end('Hello world!' + req.url) 14 | } 15 | } 16 | ] 17 | -------------------------------------------------------------------------------- /example/mock/cjs.mock.js: -------------------------------------------------------------------------------- 1 | module.exports = [ 2 | { 3 | pattern: '/api/merchant1', 4 | method: 'GET', 5 | handle: (req, res) => { 6 | res.end('merchant1:' + req.url) 7 | } 8 | }, 9 | { 10 | pattern: '/api/merchant2', 11 | method: 'GET', 12 | handle: (req, res) => { 13 | res.end('merchant2:' + req.url) 14 | } 15 | }, 16 | { 17 | pattern: '/api/merchant2', 18 | method: 'GET', 19 | handle: (req, res) => { 20 | res.end('merchant3:' + req.url) 21 | } 22 | } 23 | ] -------------------------------------------------------------------------------- /example/mock/es.mock.ts: -------------------------------------------------------------------------------- 1 | import { MockHandler } from '../../src' 2 | 3 | const mocks: MockHandler[] = [ 4 | { 5 | pattern: '/api/test1/1', 6 | handle: (req, res) => { 7 | res.end('Hello world!' + req.url) 8 | } 9 | }, 10 | { 11 | pattern: '/api/test1/*', 12 | handle: (req, res) => { 13 | res.end('Hello world!' + req.url) 14 | } 15 | }, 16 | { 17 | pattern: '/api/test1/users/{userId}', 18 | handle: (req, res) => { 19 | const data = { 20 | url: req.url, 21 | params: req.params, 22 | query: req.query, 23 | body: req.body 24 | } 25 | res.setHeader('Content-Type', 'application/json') 26 | res.end(JSON.stringify(data)) 27 | } 28 | }, 29 | { 30 | pattern: '/api/test1/body/json', 31 | method: 'POST', 32 | handle: (req, res) => { 33 | res.setHeader('Content-Type', 'application/json') 34 | res.end(JSON.stringify(req.body)) 35 | } 36 | }, 37 | ] 38 | 39 | export default mocks -------------------------------------------------------------------------------- /example/module.d.ts: -------------------------------------------------------------------------------- 1 | declare module 'cookie-parser' { 2 | import { Connect } from 'vite' 3 | function cookieParser(secret?: string | string[], options?: {decode?(val: string): string;}): Connect.NextHandleFunction; 4 | export default cookieParser; 5 | } -------------------------------------------------------------------------------- /example/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "example", 3 | "version": "0.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "version": "0.0.0", 9 | "dependencies": { 10 | "vue": "^3.2.25" 11 | }, 12 | "devDependencies": { 13 | "@types/body-parser": "^1.19.2", 14 | "@vitejs/plugin-vue": "^2.3.4", 15 | "@vue/compiler-sfc": "^3.0.5", 16 | "body-parser": "^1.20.2", 17 | "cookie-parser": "^1.4.6", 18 | "node-fetch-commonjs": "^3.3.2", 19 | "typescript": "^4.3.2", 20 | "vite": "^2.9.12", 21 | "vue-tsc": "^0.0.24" 22 | } 23 | }, 24 | "node_modules/@babel/parser": { 25 | "version": "7.23.6", 26 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", 27 | "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", 28 | "bin": { 29 | "parser": "bin/babel-parser.js" 30 | }, 31 | "engines": { 32 | "node": ">=6.0.0" 33 | } 34 | }, 35 | "node_modules/@jridgewell/sourcemap-codec": { 36 | "version": "1.4.15", 37 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", 38 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" 39 | }, 40 | "node_modules/@types/body-parser": { 41 | "version": "1.19.2", 42 | "dev": true, 43 | "license": "MIT", 44 | "dependencies": { 45 | "@types/connect": "*", 46 | "@types/node": "*" 47 | } 48 | }, 49 | "node_modules/@types/connect": { 50 | "version": "3.4.35", 51 | "dev": true, 52 | "license": "MIT", 53 | "dependencies": { 54 | "@types/node": "*" 55 | } 56 | }, 57 | "node_modules/@types/node": { 58 | "version": "20.1.2", 59 | "dev": true, 60 | "license": "MIT" 61 | }, 62 | "node_modules/@vitejs/plugin-vue": { 63 | "version": "2.3.4", 64 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-2.3.4.tgz", 65 | "integrity": "sha512-IfFNbtkbIm36O9KB8QodlwwYvTEsJb4Lll4c2IwB3VHc2gie2mSPtSzL0eYay7X2jd/2WX02FjSGTWR6OPr/zg==", 66 | "dev": true, 67 | "engines": { 68 | "node": ">=12.0.0" 69 | }, 70 | "peerDependencies": { 71 | "vite": "^2.5.10", 72 | "vue": "^3.2.25" 73 | } 74 | }, 75 | "node_modules/@vue/compiler-core": { 76 | "version": "3.4.5", 77 | "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.5.tgz", 78 | "integrity": "sha512-Daka7P1z2AgKjzuueWXhwzIsKu0NkLB6vGbNVEV2iJ8GJTrzraZo/Sk4GWCMRtd/qVi3zwnk+Owbd/xSZbwHtQ==", 79 | "dependencies": { 80 | "@babel/parser": "^7.23.6", 81 | "@vue/shared": "3.4.5", 82 | "entities": "^4.5.0", 83 | "estree-walker": "^2.0.2", 84 | "source-map-js": "^1.0.2" 85 | } 86 | }, 87 | "node_modules/@vue/compiler-dom": { 88 | "version": "3.4.5", 89 | "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.5.tgz", 90 | "integrity": "sha512-J8YlxknJVd90SXFJ4HwGANSAXsx5I0lK30sO/zvYV7s5gXf7gZR7r/1BmZ2ju7RGH1lnc6bpBc6nL61yW+PsAQ==", 91 | "dependencies": { 92 | "@vue/compiler-core": "3.4.5", 93 | "@vue/shared": "3.4.5" 94 | } 95 | }, 96 | "node_modules/@vue/compiler-sfc": { 97 | "version": "3.4.5", 98 | "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.5.tgz", 99 | "integrity": "sha512-jauvkDuSSUbP0ebhfNqljhShA90YEfX/0wZ+w40oZF43IjGyWYjqYaJbvMJwGOd+9+vODW6eSvnk28f0SGV7OQ==", 100 | "dependencies": { 101 | "@babel/parser": "^7.23.6", 102 | "@vue/compiler-core": "3.4.5", 103 | "@vue/compiler-dom": "3.4.5", 104 | "@vue/compiler-ssr": "3.4.5", 105 | "@vue/shared": "3.4.5", 106 | "estree-walker": "^2.0.2", 107 | "magic-string": "^0.30.5", 108 | "postcss": "^8.4.32", 109 | "source-map-js": "^1.0.2" 110 | } 111 | }, 112 | "node_modules/@vue/compiler-ssr": { 113 | "version": "3.4.5", 114 | "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.5.tgz", 115 | "integrity": "sha512-DDdEcDzj2lWTMfUMMtEpLDhURai9LhM0zSZ219jCt7b2Vyl0/jy3keFgCPMitG0V1S1YG4Cmws3lWHWdxHQOpg==", 116 | "dependencies": { 117 | "@vue/compiler-dom": "3.4.5", 118 | "@vue/shared": "3.4.5" 119 | } 120 | }, 121 | "node_modules/@vue/reactivity": { 122 | "version": "3.4.5", 123 | "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.5.tgz", 124 | "integrity": "sha512-BcWkKvjdvqJwb7BhhFkXPLDCecX4d4a6GATvCduJQDLv21PkPowAE5GKuIE5p6RC07/Lp9FMkkq4AYCTVF5KlQ==", 125 | "dependencies": { 126 | "@vue/shared": "3.4.5" 127 | } 128 | }, 129 | "node_modules/@vue/runtime-core": { 130 | "version": "3.4.5", 131 | "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.5.tgz", 132 | "integrity": "sha512-wh9ELIOQKeWT9SaUPdLrsxRkZv14jp+SJm9aiQGWio+/MWNM3Lib0wE6CoKEqQ9+SCYyGjDBhTOTtO47kCgbkg==", 133 | "dependencies": { 134 | "@vue/reactivity": "3.4.5", 135 | "@vue/shared": "3.4.5" 136 | } 137 | }, 138 | "node_modules/@vue/runtime-dom": { 139 | "version": "3.4.5", 140 | "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.5.tgz", 141 | "integrity": "sha512-n5ewvOjyG3IEpqGBahdPXODFSpVlSz3H4LF76Sx0XAqpIOqyJ5bIb2PrdYuH2ogBMAQPh+o5tnoH4nJpBr8U0Q==", 142 | "dependencies": { 143 | "@vue/runtime-core": "3.4.5", 144 | "@vue/shared": "3.4.5", 145 | "csstype": "^3.1.3" 146 | } 147 | }, 148 | "node_modules/@vue/server-renderer": { 149 | "version": "3.4.5", 150 | "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.5.tgz", 151 | "integrity": "sha512-jOFc/VE87yvifQpNju12VcqimH8pBLxdcT+t3xMeiED1K6DfH9SORyhFEoZlW5TG2Vwfn3Ul5KE+1aC99xnSBg==", 152 | "dependencies": { 153 | "@vue/compiler-ssr": "3.4.5", 154 | "@vue/shared": "3.4.5" 155 | }, 156 | "peerDependencies": { 157 | "vue": "3.4.5" 158 | } 159 | }, 160 | "node_modules/@vue/shared": { 161 | "version": "3.4.5", 162 | "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.5.tgz", 163 | "integrity": "sha512-6XptuzlMvN4l4cDnDw36pdGEV+9njYkQ1ZE0Q6iZLwrKefKaOJyiFmcP3/KBDHbt72cJZGtllAc1GaHe6XGAyg==" 164 | }, 165 | "node_modules/balanced-match": { 166 | "version": "1.0.2", 167 | "dev": true, 168 | "license": "MIT" 169 | }, 170 | "node_modules/big-integer": { 171 | "version": "1.6.48", 172 | "dev": true, 173 | "license": "Unlicense", 174 | "engines": { 175 | "node": ">=0.6" 176 | } 177 | }, 178 | "node_modules/binary": { 179 | "version": "0.3.0", 180 | "dev": true, 181 | "license": "MIT", 182 | "dependencies": { 183 | "buffers": "~0.1.1", 184 | "chainsaw": "~0.1.0" 185 | } 186 | }, 187 | "node_modules/body-parser": { 188 | "version": "1.20.2", 189 | "dev": true, 190 | "license": "MIT", 191 | "dependencies": { 192 | "bytes": "3.1.2", 193 | "content-type": "~1.0.5", 194 | "debug": "2.6.9", 195 | "depd": "2.0.0", 196 | "destroy": "1.2.0", 197 | "http-errors": "2.0.0", 198 | "iconv-lite": "0.4.24", 199 | "on-finished": "2.4.1", 200 | "qs": "6.11.0", 201 | "raw-body": "2.5.2", 202 | "type-is": "~1.6.18", 203 | "unpipe": "1.0.0" 204 | }, 205 | "engines": { 206 | "node": ">= 0.8", 207 | "npm": "1.2.8000 || >= 1.4.16" 208 | } 209 | }, 210 | "node_modules/brace-expansion": { 211 | "version": "1.1.11", 212 | "dev": true, 213 | "license": "MIT", 214 | "dependencies": { 215 | "balanced-match": "^1.0.0", 216 | "concat-map": "0.0.1" 217 | } 218 | }, 219 | "node_modules/buffer-indexof-polyfill": { 220 | "version": "1.0.2", 221 | "dev": true, 222 | "license": "MIT", 223 | "engines": { 224 | "node": ">=0.10" 225 | } 226 | }, 227 | "node_modules/buffers": { 228 | "version": "0.1.1", 229 | "dev": true, 230 | "engines": { 231 | "node": ">=0.2.0" 232 | } 233 | }, 234 | "node_modules/bytes": { 235 | "version": "3.1.2", 236 | "dev": true, 237 | "license": "MIT", 238 | "engines": { 239 | "node": ">= 0.8" 240 | } 241 | }, 242 | "node_modules/call-bind": { 243 | "version": "1.0.2", 244 | "dev": true, 245 | "license": "MIT", 246 | "dependencies": { 247 | "function-bind": "^1.1.1", 248 | "get-intrinsic": "^1.0.2" 249 | }, 250 | "funding": { 251 | "url": "https://github.com/sponsors/ljharb" 252 | } 253 | }, 254 | "node_modules/chainsaw": { 255 | "version": "0.1.0", 256 | "dev": true, 257 | "license": "MIT/X11", 258 | "dependencies": { 259 | "traverse": ">=0.3.0 <0.4" 260 | } 261 | }, 262 | "node_modules/concat-map": { 263 | "version": "0.0.1", 264 | "dev": true, 265 | "license": "MIT" 266 | }, 267 | "node_modules/content-type": { 268 | "version": "1.0.5", 269 | "dev": true, 270 | "license": "MIT", 271 | "engines": { 272 | "node": ">= 0.6" 273 | } 274 | }, 275 | "node_modules/cookie": { 276 | "version": "0.4.1", 277 | "dev": true, 278 | "license": "MIT", 279 | "engines": { 280 | "node": ">= 0.6" 281 | } 282 | }, 283 | "node_modules/cookie-parser": { 284 | "version": "1.4.6", 285 | "dev": true, 286 | "license": "MIT", 287 | "dependencies": { 288 | "cookie": "0.4.1", 289 | "cookie-signature": "1.0.6" 290 | }, 291 | "engines": { 292 | "node": ">= 0.8.0" 293 | } 294 | }, 295 | "node_modules/cookie-signature": { 296 | "version": "1.0.6", 297 | "dev": true, 298 | "license": "MIT" 299 | }, 300 | "node_modules/core-util-is": { 301 | "version": "1.0.2", 302 | "dev": true, 303 | "license": "MIT" 304 | }, 305 | "node_modules/csstype": { 306 | "version": "3.1.3", 307 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", 308 | "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" 309 | }, 310 | "node_modules/debug": { 311 | "version": "2.6.9", 312 | "dev": true, 313 | "license": "MIT", 314 | "dependencies": { 315 | "ms": "2.0.0" 316 | } 317 | }, 318 | "node_modules/depd": { 319 | "version": "2.0.0", 320 | "dev": true, 321 | "license": "MIT", 322 | "engines": { 323 | "node": ">= 0.8" 324 | } 325 | }, 326 | "node_modules/destroy": { 327 | "version": "1.2.0", 328 | "dev": true, 329 | "license": "MIT", 330 | "engines": { 331 | "node": ">= 0.8", 332 | "npm": "1.2.8000 || >= 1.4.16" 333 | } 334 | }, 335 | "node_modules/duplexer2": { 336 | "version": "0.1.4", 337 | "dev": true, 338 | "license": "BSD-3-Clause", 339 | "dependencies": { 340 | "readable-stream": "^2.0.2" 341 | } 342 | }, 343 | "node_modules/ee-first": { 344 | "version": "1.1.1", 345 | "dev": true, 346 | "license": "MIT" 347 | }, 348 | "node_modules/entities": { 349 | "version": "4.5.0", 350 | "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", 351 | "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", 352 | "engines": { 353 | "node": ">=0.12" 354 | }, 355 | "funding": { 356 | "url": "https://github.com/fb55/entities?sponsor=1" 357 | } 358 | }, 359 | "node_modules/esbuild": { 360 | "version": "0.14.54", 361 | "dev": true, 362 | "hasInstallScript": true, 363 | "license": "MIT", 364 | "bin": { 365 | "esbuild": "bin/esbuild" 366 | }, 367 | "engines": { 368 | "node": ">=12" 369 | }, 370 | "optionalDependencies": { 371 | "@esbuild/linux-loong64": "0.14.54", 372 | "esbuild-android-64": "0.14.54", 373 | "esbuild-android-arm64": "0.14.54", 374 | "esbuild-darwin-64": "0.14.54", 375 | "esbuild-darwin-arm64": "0.14.54", 376 | "esbuild-freebsd-64": "0.14.54", 377 | "esbuild-freebsd-arm64": "0.14.54", 378 | "esbuild-linux-32": "0.14.54", 379 | "esbuild-linux-64": "0.14.54", 380 | "esbuild-linux-arm": "0.14.54", 381 | "esbuild-linux-arm64": "0.14.54", 382 | "esbuild-linux-mips64le": "0.14.54", 383 | "esbuild-linux-ppc64le": "0.14.54", 384 | "esbuild-linux-riscv64": "0.14.54", 385 | "esbuild-linux-s390x": "0.14.54", 386 | "esbuild-netbsd-64": "0.14.54", 387 | "esbuild-openbsd-64": "0.14.54", 388 | "esbuild-sunos-64": "0.14.54", 389 | "esbuild-windows-32": "0.14.54", 390 | "esbuild-windows-64": "0.14.54", 391 | "esbuild-windows-arm64": "0.14.54" 392 | } 393 | }, 394 | "node_modules/esbuild-windows-64": { 395 | "version": "0.14.54", 396 | "cpu": [ 397 | "x64" 398 | ], 399 | "dev": true, 400 | "license": "MIT", 401 | "optional": true, 402 | "os": [ 403 | "win32" 404 | ], 405 | "engines": { 406 | "node": ">=12" 407 | } 408 | }, 409 | "node_modules/estree-walker": { 410 | "version": "2.0.2", 411 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 412 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" 413 | }, 414 | "node_modules/fs.realpath": { 415 | "version": "1.0.0", 416 | "dev": true, 417 | "license": "ISC" 418 | }, 419 | "node_modules/fstream": { 420 | "version": "1.0.12", 421 | "dev": true, 422 | "license": "ISC", 423 | "dependencies": { 424 | "graceful-fs": "^4.1.2", 425 | "inherits": "~2.0.0", 426 | "mkdirp": ">=0.5 0", 427 | "rimraf": "2" 428 | }, 429 | "engines": { 430 | "node": ">=0.6" 431 | } 432 | }, 433 | "node_modules/function-bind": { 434 | "version": "1.1.2", 435 | "dev": true, 436 | "license": "MIT", 437 | "funding": { 438 | "url": "https://github.com/sponsors/ljharb" 439 | } 440 | }, 441 | "node_modules/get-intrinsic": { 442 | "version": "1.2.0", 443 | "dev": true, 444 | "license": "MIT", 445 | "dependencies": { 446 | "function-bind": "^1.1.1", 447 | "has": "^1.0.3", 448 | "has-symbols": "^1.0.3" 449 | }, 450 | "funding": { 451 | "url": "https://github.com/sponsors/ljharb" 452 | } 453 | }, 454 | "node_modules/glob": { 455 | "version": "7.1.7", 456 | "dev": true, 457 | "license": "ISC", 458 | "dependencies": { 459 | "fs.realpath": "^1.0.0", 460 | "inflight": "^1.0.4", 461 | "inherits": "2", 462 | "minimatch": "^3.0.4", 463 | "once": "^1.3.0", 464 | "path-is-absolute": "^1.0.0" 465 | }, 466 | "engines": { 467 | "node": "*" 468 | }, 469 | "funding": { 470 | "url": "https://github.com/sponsors/isaacs" 471 | } 472 | }, 473 | "node_modules/graceful-fs": { 474 | "version": "4.2.6", 475 | "dev": true, 476 | "license": "ISC" 477 | }, 478 | "node_modules/has": { 479 | "version": "1.0.3", 480 | "dev": true, 481 | "license": "MIT", 482 | "dependencies": { 483 | "function-bind": "^1.1.1" 484 | }, 485 | "engines": { 486 | "node": ">= 0.4.0" 487 | } 488 | }, 489 | "node_modules/has-symbols": { 490 | "version": "1.0.3", 491 | "dev": true, 492 | "license": "MIT", 493 | "engines": { 494 | "node": ">= 0.4" 495 | }, 496 | "funding": { 497 | "url": "https://github.com/sponsors/ljharb" 498 | } 499 | }, 500 | "node_modules/hasown": { 501 | "version": "2.0.0", 502 | "dev": true, 503 | "license": "MIT", 504 | "dependencies": { 505 | "function-bind": "^1.1.2" 506 | }, 507 | "engines": { 508 | "node": ">= 0.4" 509 | } 510 | }, 511 | "node_modules/http-errors": { 512 | "version": "2.0.0", 513 | "dev": true, 514 | "license": "MIT", 515 | "dependencies": { 516 | "depd": "2.0.0", 517 | "inherits": "2.0.4", 518 | "setprototypeof": "1.2.0", 519 | "statuses": "2.0.1", 520 | "toidentifier": "1.0.1" 521 | }, 522 | "engines": { 523 | "node": ">= 0.8" 524 | } 525 | }, 526 | "node_modules/iconv-lite": { 527 | "version": "0.4.24", 528 | "dev": true, 529 | "license": "MIT", 530 | "dependencies": { 531 | "safer-buffer": ">= 2.1.2 < 3" 532 | }, 533 | "engines": { 534 | "node": ">=0.10.0" 535 | } 536 | }, 537 | "node_modules/inflight": { 538 | "version": "1.0.6", 539 | "dev": true, 540 | "license": "ISC", 541 | "dependencies": { 542 | "once": "^1.3.0", 543 | "wrappy": "1" 544 | } 545 | }, 546 | "node_modules/inherits": { 547 | "version": "2.0.4", 548 | "dev": true, 549 | "license": "ISC" 550 | }, 551 | "node_modules/is-core-module": { 552 | "version": "2.13.1", 553 | "dev": true, 554 | "license": "MIT", 555 | "dependencies": { 556 | "hasown": "^2.0.0" 557 | }, 558 | "funding": { 559 | "url": "https://github.com/sponsors/ljharb" 560 | } 561 | }, 562 | "node_modules/isarray": { 563 | "version": "1.0.0", 564 | "dev": true, 565 | "license": "MIT" 566 | }, 567 | "node_modules/listenercount": { 568 | "version": "1.0.1", 569 | "dev": true, 570 | "license": "ISC" 571 | }, 572 | "node_modules/magic-string": { 573 | "version": "0.30.5", 574 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", 575 | "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", 576 | "dependencies": { 577 | "@jridgewell/sourcemap-codec": "^1.4.15" 578 | }, 579 | "engines": { 580 | "node": ">=12" 581 | } 582 | }, 583 | "node_modules/media-typer": { 584 | "version": "0.3.0", 585 | "dev": true, 586 | "license": "MIT", 587 | "engines": { 588 | "node": ">= 0.6" 589 | } 590 | }, 591 | "node_modules/mime-db": { 592 | "version": "1.52.0", 593 | "dev": true, 594 | "license": "MIT", 595 | "engines": { 596 | "node": ">= 0.6" 597 | } 598 | }, 599 | "node_modules/mime-types": { 600 | "version": "2.1.35", 601 | "dev": true, 602 | "license": "MIT", 603 | "dependencies": { 604 | "mime-db": "1.52.0" 605 | }, 606 | "engines": { 607 | "node": ">= 0.6" 608 | } 609 | }, 610 | "node_modules/minimatch": { 611 | "version": "3.1.2", 612 | "dev": true, 613 | "license": "ISC", 614 | "dependencies": { 615 | "brace-expansion": "^1.1.7" 616 | }, 617 | "engines": { 618 | "node": "*" 619 | } 620 | }, 621 | "node_modules/minimist": { 622 | "version": "1.2.8", 623 | "dev": true, 624 | "license": "MIT", 625 | "funding": { 626 | "url": "https://github.com/sponsors/ljharb" 627 | } 628 | }, 629 | "node_modules/mkdirp": { 630 | "version": "0.5.5", 631 | "dev": true, 632 | "license": "MIT", 633 | "dependencies": { 634 | "minimist": "^1.2.5" 635 | }, 636 | "bin": { 637 | "mkdirp": "bin/cmd.js" 638 | } 639 | }, 640 | "node_modules/ms": { 641 | "version": "2.0.0", 642 | "dev": true, 643 | "license": "MIT" 644 | }, 645 | "node_modules/nanoid": { 646 | "version": "3.3.7", 647 | "funding": [ 648 | { 649 | "type": "github", 650 | "url": "https://github.com/sponsors/ai" 651 | } 652 | ], 653 | "license": "MIT", 654 | "bin": { 655 | "nanoid": "bin/nanoid.cjs" 656 | }, 657 | "engines": { 658 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 659 | } 660 | }, 661 | "node_modules/node-domexception": { 662 | "version": "1.0.0", 663 | "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", 664 | "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", 665 | "dev": true, 666 | "funding": [ 667 | { 668 | "type": "github", 669 | "url": "https://github.com/sponsors/jimmywarting" 670 | }, 671 | { 672 | "type": "github", 673 | "url": "https://paypal.me/jimmywarting" 674 | } 675 | ], 676 | "engines": { 677 | "node": ">=10.5.0" 678 | } 679 | }, 680 | "node_modules/node-fetch-commonjs": { 681 | "version": "3.3.2", 682 | "resolved": "https://registry.npmjs.org/node-fetch-commonjs/-/node-fetch-commonjs-3.3.2.tgz", 683 | "integrity": "sha512-VBlAiynj3VMLrotgwOS3OyECFxas5y7ltLcK4t41lMUZeaK15Ym4QRkqN0EQKAFL42q9i21EPKjzLUPfltR72A==", 684 | "dev": true, 685 | "dependencies": { 686 | "node-domexception": "^1.0.0", 687 | "web-streams-polyfill": "^3.0.3" 688 | }, 689 | "engines": { 690 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 691 | }, 692 | "funding": { 693 | "type": "opencollective", 694 | "url": "https://opencollective.com/node-fetch" 695 | } 696 | }, 697 | "node_modules/object-inspect": { 698 | "version": "1.12.3", 699 | "dev": true, 700 | "license": "MIT", 701 | "funding": { 702 | "url": "https://github.com/sponsors/ljharb" 703 | } 704 | }, 705 | "node_modules/on-finished": { 706 | "version": "2.4.1", 707 | "dev": true, 708 | "license": "MIT", 709 | "dependencies": { 710 | "ee-first": "1.1.1" 711 | }, 712 | "engines": { 713 | "node": ">= 0.8" 714 | } 715 | }, 716 | "node_modules/once": { 717 | "version": "1.4.0", 718 | "dev": true, 719 | "license": "ISC", 720 | "dependencies": { 721 | "wrappy": "1" 722 | } 723 | }, 724 | "node_modules/path-is-absolute": { 725 | "version": "1.0.1", 726 | "dev": true, 727 | "license": "MIT", 728 | "engines": { 729 | "node": ">=0.10.0" 730 | } 731 | }, 732 | "node_modules/path-parse": { 733 | "version": "1.0.7", 734 | "dev": true, 735 | "license": "MIT" 736 | }, 737 | "node_modules/picocolors": { 738 | "version": "1.0.0", 739 | "license": "ISC" 740 | }, 741 | "node_modules/postcss": { 742 | "version": "8.4.33", 743 | "funding": [ 744 | { 745 | "type": "opencollective", 746 | "url": "https://opencollective.com/postcss/" 747 | }, 748 | { 749 | "type": "tidelift", 750 | "url": "https://tidelift.com/funding/github/npm/postcss" 751 | }, 752 | { 753 | "type": "github", 754 | "url": "https://github.com/sponsors/ai" 755 | } 756 | ], 757 | "license": "MIT", 758 | "dependencies": { 759 | "nanoid": "^3.3.7", 760 | "picocolors": "^1.0.0", 761 | "source-map-js": "^1.0.2" 762 | }, 763 | "engines": { 764 | "node": "^10 || ^12 || >=14" 765 | } 766 | }, 767 | "node_modules/process-nextick-args": { 768 | "version": "2.0.1", 769 | "dev": true, 770 | "license": "MIT" 771 | }, 772 | "node_modules/qs": { 773 | "version": "6.11.0", 774 | "dev": true, 775 | "license": "BSD-3-Clause", 776 | "dependencies": { 777 | "side-channel": "^1.0.4" 778 | }, 779 | "engines": { 780 | "node": ">=0.6" 781 | }, 782 | "funding": { 783 | "url": "https://github.com/sponsors/ljharb" 784 | } 785 | }, 786 | "node_modules/raw-body": { 787 | "version": "2.5.2", 788 | "dev": true, 789 | "license": "MIT", 790 | "dependencies": { 791 | "bytes": "3.1.2", 792 | "http-errors": "2.0.0", 793 | "iconv-lite": "0.4.24", 794 | "unpipe": "1.0.0" 795 | }, 796 | "engines": { 797 | "node": ">= 0.8" 798 | } 799 | }, 800 | "node_modules/readable-stream": { 801 | "version": "2.3.7", 802 | "dev": true, 803 | "license": "MIT", 804 | "dependencies": { 805 | "core-util-is": "~1.0.0", 806 | "inherits": "~2.0.3", 807 | "isarray": "~1.0.0", 808 | "process-nextick-args": "~2.0.0", 809 | "safe-buffer": "~5.1.1", 810 | "string_decoder": "~1.1.1", 811 | "util-deprecate": "~1.0.1" 812 | } 813 | }, 814 | "node_modules/resolve": { 815 | "version": "1.22.8", 816 | "dev": true, 817 | "license": "MIT", 818 | "dependencies": { 819 | "is-core-module": "^2.13.0", 820 | "path-parse": "^1.0.7", 821 | "supports-preserve-symlinks-flag": "^1.0.0" 822 | }, 823 | "bin": { 824 | "resolve": "bin/resolve" 825 | }, 826 | "funding": { 827 | "url": "https://github.com/sponsors/ljharb" 828 | } 829 | }, 830 | "node_modules/rimraf": { 831 | "version": "2.7.1", 832 | "dev": true, 833 | "license": "ISC", 834 | "dependencies": { 835 | "glob": "^7.1.3" 836 | }, 837 | "bin": { 838 | "rimraf": "bin.js" 839 | } 840 | }, 841 | "node_modules/rollup": { 842 | "version": "2.77.3", 843 | "dev": true, 844 | "license": "MIT", 845 | "bin": { 846 | "rollup": "dist/bin/rollup" 847 | }, 848 | "engines": { 849 | "node": ">=10.0.0" 850 | }, 851 | "optionalDependencies": { 852 | "fsevents": "~2.3.2" 853 | } 854 | }, 855 | "node_modules/safe-buffer": { 856 | "version": "5.1.2", 857 | "dev": true, 858 | "license": "MIT" 859 | }, 860 | "node_modules/safer-buffer": { 861 | "version": "2.1.2", 862 | "dev": true, 863 | "license": "MIT" 864 | }, 865 | "node_modules/setimmediate": { 866 | "version": "1.0.5", 867 | "dev": true, 868 | "license": "MIT" 869 | }, 870 | "node_modules/setprototypeof": { 871 | "version": "1.2.0", 872 | "dev": true, 873 | "license": "ISC" 874 | }, 875 | "node_modules/side-channel": { 876 | "version": "1.0.4", 877 | "dev": true, 878 | "license": "MIT", 879 | "dependencies": { 880 | "call-bind": "^1.0.0", 881 | "get-intrinsic": "^1.0.2", 882 | "object-inspect": "^1.9.0" 883 | }, 884 | "funding": { 885 | "url": "https://github.com/sponsors/ljharb" 886 | } 887 | }, 888 | "node_modules/source-map-js": { 889 | "version": "1.0.2", 890 | "license": "BSD-3-Clause", 891 | "engines": { 892 | "node": ">=0.10.0" 893 | } 894 | }, 895 | "node_modules/statuses": { 896 | "version": "2.0.1", 897 | "dev": true, 898 | "license": "MIT", 899 | "engines": { 900 | "node": ">= 0.8" 901 | } 902 | }, 903 | "node_modules/string_decoder": { 904 | "version": "1.1.1", 905 | "dev": true, 906 | "license": "MIT", 907 | "dependencies": { 908 | "safe-buffer": "~5.1.0" 909 | } 910 | }, 911 | "node_modules/supports-preserve-symlinks-flag": { 912 | "version": "1.0.0", 913 | "dev": true, 914 | "license": "MIT", 915 | "engines": { 916 | "node": ">= 0.4" 917 | }, 918 | "funding": { 919 | "url": "https://github.com/sponsors/ljharb" 920 | } 921 | }, 922 | "node_modules/toidentifier": { 923 | "version": "1.0.1", 924 | "dev": true, 925 | "license": "MIT", 926 | "engines": { 927 | "node": ">=0.6" 928 | } 929 | }, 930 | "node_modules/traverse": { 931 | "version": "0.3.9", 932 | "dev": true, 933 | "license": "MIT/X11" 934 | }, 935 | "node_modules/type-is": { 936 | "version": "1.6.18", 937 | "dev": true, 938 | "license": "MIT", 939 | "dependencies": { 940 | "media-typer": "0.3.0", 941 | "mime-types": "~2.1.24" 942 | }, 943 | "engines": { 944 | "node": ">= 0.6" 945 | } 946 | }, 947 | "node_modules/typescript": { 948 | "version": "4.3.4", 949 | "devOptional": true, 950 | "license": "Apache-2.0", 951 | "bin": { 952 | "tsc": "bin/tsc", 953 | "tsserver": "bin/tsserver" 954 | }, 955 | "engines": { 956 | "node": ">=4.2.0" 957 | } 958 | }, 959 | "node_modules/unpipe": { 960 | "version": "1.0.0", 961 | "dev": true, 962 | "license": "MIT", 963 | "engines": { 964 | "node": ">= 0.8" 965 | } 966 | }, 967 | "node_modules/unzipper": { 968 | "version": "0.10.11", 969 | "dev": true, 970 | "license": "MIT", 971 | "dependencies": { 972 | "big-integer": "^1.6.17", 973 | "binary": "~0.3.0", 974 | "bluebird": "~3.4.1", 975 | "buffer-indexof-polyfill": "~1.0.0", 976 | "duplexer2": "~0.1.4", 977 | "fstream": "^1.0.12", 978 | "graceful-fs": "^4.2.2", 979 | "listenercount": "~1.0.1", 980 | "readable-stream": "~2.3.6", 981 | "setimmediate": "~1.0.4" 982 | } 983 | }, 984 | "node_modules/unzipper/node_modules/bluebird": { 985 | "version": "3.4.7", 986 | "dev": true, 987 | "license": "MIT" 988 | }, 989 | "node_modules/util-deprecate": { 990 | "version": "1.0.2", 991 | "dev": true, 992 | "license": "MIT" 993 | }, 994 | "node_modules/vite": { 995 | "version": "2.9.16", 996 | "dev": true, 997 | "license": "MIT", 998 | "dependencies": { 999 | "esbuild": "^0.14.27", 1000 | "postcss": "^8.4.13", 1001 | "resolve": "^1.22.0", 1002 | "rollup": ">=2.59.0 <2.78.0" 1003 | }, 1004 | "bin": { 1005 | "vite": "bin/vite.js" 1006 | }, 1007 | "engines": { 1008 | "node": ">=12.2.0" 1009 | }, 1010 | "optionalDependencies": { 1011 | "fsevents": "~2.3.2" 1012 | }, 1013 | "peerDependencies": { 1014 | "less": "*", 1015 | "sass": "*", 1016 | "stylus": "*" 1017 | }, 1018 | "peerDependenciesMeta": { 1019 | "less": { 1020 | "optional": true 1021 | }, 1022 | "sass": { 1023 | "optional": true 1024 | }, 1025 | "stylus": { 1026 | "optional": true 1027 | } 1028 | } 1029 | }, 1030 | "node_modules/vue": { 1031 | "version": "3.4.5", 1032 | "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.5.tgz", 1033 | "integrity": "sha512-VH6nHFhLPjgu2oh5vEBXoNZxsGHuZNr3qf4PHClwJWw6IDqw6B3x+4J+ABdoZ0aJuT8Zi0zf3GpGlLQCrGWHrw==", 1034 | "dependencies": { 1035 | "@vue/compiler-dom": "3.4.5", 1036 | "@vue/compiler-sfc": "3.4.5", 1037 | "@vue/runtime-dom": "3.4.5", 1038 | "@vue/server-renderer": "3.4.5", 1039 | "@vue/shared": "3.4.5" 1040 | }, 1041 | "peerDependencies": { 1042 | "typescript": "*" 1043 | }, 1044 | "peerDependenciesMeta": { 1045 | "typescript": { 1046 | "optional": true 1047 | } 1048 | } 1049 | }, 1050 | "node_modules/vue-tsc": { 1051 | "version": "0.0.24", 1052 | "dev": true, 1053 | "dependencies": { 1054 | "unzipper": "0.10.11" 1055 | }, 1056 | "bin": { 1057 | "vue-tsc": "vue-tsc.js" 1058 | } 1059 | }, 1060 | "node_modules/web-streams-polyfill": { 1061 | "version": "3.3.2", 1062 | "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.2.tgz", 1063 | "integrity": "sha512-3pRGuxRF5gpuZc0W+EpwQRmCD7gRqcDOMt688KmdlDAgAyaB1XlN0zq2njfDNm44XVdIouE7pZ6GzbdyH47uIQ==", 1064 | "dev": true, 1065 | "engines": { 1066 | "node": ">= 8" 1067 | } 1068 | }, 1069 | "node_modules/wrappy": { 1070 | "version": "1.0.2", 1071 | "dev": true, 1072 | "license": "ISC" 1073 | } 1074 | } 1075 | } 1076 | -------------------------------------------------------------------------------- /example/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.0.0", 3 | "scripts": { 4 | "dev": "vite", 5 | "build": "vue-tsc --noEmit && vite build", 6 | "serve": "vite preview", 7 | "runtest": "vite --config test-vite.config.ts" 8 | }, 9 | "type": "commonjs", 10 | "dependencies": { 11 | "vue": "^3.2.25" 12 | }, 13 | "devDependencies": { 14 | "@types/body-parser": "^1.19.2", 15 | "@vitejs/plugin-vue": "^2.3.4", 16 | "@vue/compiler-sfc": "^3.0.5", 17 | "body-parser": "^1.20.2", 18 | "cookie-parser": "^1.4.6", 19 | "node-fetch-commonjs": "^3.3.2", 20 | "typescript": "^4.3.2", 21 | "vite": "^2.9.12", 22 | "vue-tsc": "^0.0.24" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /example/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enjoycoding/vite-plugin-mock-server/a50005dc4bc79544bbb2b90d04872519df13d925/example/public/favicon.ico -------------------------------------------------------------------------------- /example/src/App.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | 17 | 18 | 28 | -------------------------------------------------------------------------------- /example/src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/enjoycoding/vite-plugin-mock-server/a50005dc4bc79544bbb2b90d04872519df13d925/example/src/assets/logo.png -------------------------------------------------------------------------------- /example/src/components/HelloWorld.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 32 | 33 | 50 | -------------------------------------------------------------------------------- /example/src/main.ts: -------------------------------------------------------------------------------- 1 | import { createApp } from 'vue' 2 | import App from './App.vue' 3 | 4 | createApp(App).mount('#app') 5 | -------------------------------------------------------------------------------- /example/src/shims-vue.d.ts: -------------------------------------------------------------------------------- 1 | declare module '*.vue' { 2 | import { DefineComponent } from 'vue' 3 | const component: DefineComponent<{}, {}, any> 4 | export default component 5 | } 6 | -------------------------------------------------------------------------------- /example/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /example/test-vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig, Plugin } from 'vite' 2 | import vue from '@vitejs/plugin-vue' 3 | import bodyParser from 'body-parser' 4 | import cookieParser from 'cookie-parser' 5 | import mockServer from '../src' 6 | import fetch from 'node-fetch-commonjs' 7 | 8 | const port = 8000 9 | export default defineConfig({ 10 | server: { port }, 11 | plugins: [ 12 | vue(), 13 | mockServer({ 14 | logLevel: 'info', 15 | middlewares: [ 16 | cookieParser(), 17 | bodyParser.json(), 18 | bodyParser.urlencoded(), 19 | bodyParser.text(), 20 | bodyParser.raw() 21 | ] 22 | }) as Plugin, 23 | { 24 | name: `vite-plugin-stop`, 25 | apply: 'serve', 26 | configureServer(server) { 27 | setTimeout(async ()=> { 28 | const resp = await fetch(`http://127.0.0.1:${port}/api/test1/1`) 29 | const responseText = await resp.text() 30 | 31 | const resp2 = await fetch(`http:/127.0.0.1:${port}/api/test1/users/octoape`) 32 | const responseJson: any = await resp2.json() 33 | 34 | const userId = responseJson.params.userId 35 | 36 | server.close() 37 | if(responseText !== 'Hello world!/api/test1/1' || userId !== "octoape") 38 | throw new Error('wrong mock response') 39 | else 40 | console.log('\x1b[32m ✓ correct mock response \x1b[0m'); 41 | 42 | setTimeout(process.exit, 1e3) 43 | } 44 | , 3000) 45 | } 46 | } 47 | ] 48 | }) 49 | -------------------------------------------------------------------------------- /example/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "esnext", 4 | "module": "commonjs", 5 | "moduleResolution": "node", 6 | "strict": true, 7 | "jsx": "preserve", 8 | "sourceMap": true, 9 | "resolveJsonModule": true, 10 | "esModuleInterop": true, 11 | "strictNullChecks": false, 12 | "declaration": true, 13 | "noEmit": false, 14 | "lib": ["esnext", "dom"] 15 | }, 16 | "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"] 17 | } -------------------------------------------------------------------------------- /example/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig, Plugin } from 'vite' 2 | import vue from '@vitejs/plugin-vue' 3 | import bodyParser from 'body-parser' 4 | import cookieParser from 'cookie-parser' 5 | import mockServer from '../src' 6 | 7 | // https://vitejs.dev/config/ 8 | export default defineConfig({ 9 | plugins: [ 10 | vue(), 11 | mockServer({ 12 | logLevel: 'info', 13 | middlewares: [ 14 | cookieParser(), 15 | bodyParser.json(), 16 | bodyParser.urlencoded(), 17 | bodyParser.text(), 18 | bodyParser.raw() 19 | ] 20 | }) as Plugin 21 | ] 22 | }) 23 | -------------------------------------------------------------------------------- /example2/.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["Vue.volar", "Vue.vscode-typescript-vue-plugin"] 3 | } 4 | -------------------------------------------------------------------------------- /example2/README.md: -------------------------------------------------------------------------------- 1 | # Vue 3 + TypeScript + Vite 2 | 3 | This template should help get you started developing with Vue 3 and TypeScript in Vite. The template uses Vue 3 ` 13 | 14 | 15 | -------------------------------------------------------------------------------- /example2/mock/routes.mock.ts: -------------------------------------------------------------------------------- 1 | import { MockHandler } from '../../dist/index' 2 | 3 | const mocks: MockHandler[] = [ 4 | { 5 | pattern: '/api/test1/1', 6 | handle: (req, res) => { 7 | res.end('Hello world!' + req.url) 8 | } 9 | }, 10 | { 11 | pattern: '/api/test1/users/{userId}', 12 | handle: (req, res) => { 13 | const data = { 14 | url: req.url, 15 | params: req.params, 16 | query: req.query, 17 | body: req.body 18 | } 19 | res.setHeader('Content-Type', 'application/json') 20 | res.end(JSON.stringify(data)) 21 | } 22 | }, 23 | { 24 | pattern: '/api/test1/body/json', 25 | method: 'POST', 26 | handle: (req, res) => { 27 | res.setHeader('Content-Type', 'application/json') 28 | 29 | //req is incomingMessage which extends stream.Readable 30 | // --> https://nodejs.org/api/stream.html#readablereadsize 31 | // res.end need to be within the function 32 | // there is a size limit for the bodyString to get parsed 33 | req.on('data', (bodyString: string) => { 34 | let body: object = JSON.parse(bodyString) 35 | res.end(JSON.stringify(body)) 36 | }) 37 | } 38 | }, 39 | ] 40 | 41 | export default mocks -------------------------------------------------------------------------------- /example2/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "example2", 3 | "version": "0.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "example2", 9 | "version": "0.0.0", 10 | "dependencies": { 11 | "vue": "^3.3.11" 12 | }, 13 | "devDependencies": { 14 | "@vitejs/plugin-vue": "^4.5.2", 15 | "node-fetch": "^3.3.2", 16 | "typescript": "^5.2.2", 17 | "vite": "^5.0.8", 18 | "vite-plugin-mock-server": "^1.1.0", 19 | "vue-tsc": "^1.8.25" 20 | } 21 | }, 22 | "node_modules/@babel/parser": { 23 | "version": "7.23.6", 24 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", 25 | "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", 26 | "bin": { 27 | "parser": "bin/babel-parser.js" 28 | }, 29 | "engines": { 30 | "node": ">=6.0.0" 31 | } 32 | }, 33 | "node_modules/@esbuild/aix-ppc64": { 34 | "version": "0.19.10", 35 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.10.tgz", 36 | "integrity": "sha512-Q+mk96KJ+FZ30h9fsJl+67IjNJm3x2eX+GBWGmocAKgzp27cowCOOqSdscX80s0SpdFXZnIv/+1xD1EctFx96Q==", 37 | "cpu": [ 38 | "ppc64" 39 | ], 40 | "dev": true, 41 | "optional": true, 42 | "os": [ 43 | "aix" 44 | ], 45 | "engines": { 46 | "node": ">=12" 47 | } 48 | }, 49 | "node_modules/@esbuild/android-arm": { 50 | "version": "0.19.10", 51 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.10.tgz", 52 | "integrity": "sha512-7W0bK7qfkw1fc2viBfrtAEkDKHatYfHzr/jKAHNr9BvkYDXPcC6bodtm8AyLJNNuqClLNaeTLuwURt4PRT9d7w==", 53 | "cpu": [ 54 | "arm" 55 | ], 56 | "dev": true, 57 | "optional": true, 58 | "os": [ 59 | "android" 60 | ], 61 | "engines": { 62 | "node": ">=12" 63 | } 64 | }, 65 | "node_modules/@esbuild/android-arm64": { 66 | "version": "0.19.10", 67 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.10.tgz", 68 | "integrity": "sha512-1X4CClKhDgC3by7k8aOWZeBXQX8dHT5QAMCAQDArCLaYfkppoARvh0fit3X2Qs+MXDngKcHv6XXyQCpY0hkK1Q==", 69 | "cpu": [ 70 | "arm64" 71 | ], 72 | "dev": true, 73 | "optional": true, 74 | "os": [ 75 | "android" 76 | ], 77 | "engines": { 78 | "node": ">=12" 79 | } 80 | }, 81 | "node_modules/@esbuild/android-x64": { 82 | "version": "0.19.10", 83 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.10.tgz", 84 | "integrity": "sha512-O/nO/g+/7NlitUxETkUv/IvADKuZXyH4BHf/g/7laqKC4i/7whLpB0gvpPc2zpF0q9Q6FXS3TS75QHac9MvVWw==", 85 | "cpu": [ 86 | "x64" 87 | ], 88 | "dev": true, 89 | "optional": true, 90 | "os": [ 91 | "android" 92 | ], 93 | "engines": { 94 | "node": ">=12" 95 | } 96 | }, 97 | "node_modules/@esbuild/darwin-arm64": { 98 | "version": "0.19.10", 99 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.10.tgz", 100 | "integrity": "sha512-YSRRs2zOpwypck+6GL3wGXx2gNP7DXzetmo5pHXLrY/VIMsS59yKfjPizQ4lLt5vEI80M41gjm2BxrGZ5U+VMA==", 101 | "cpu": [ 102 | "arm64" 103 | ], 104 | "dev": true, 105 | "optional": true, 106 | "os": [ 107 | "darwin" 108 | ], 109 | "engines": { 110 | "node": ">=12" 111 | } 112 | }, 113 | "node_modules/@esbuild/darwin-x64": { 114 | "version": "0.19.10", 115 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.10.tgz", 116 | "integrity": "sha512-alfGtT+IEICKtNE54hbvPg13xGBe4GkVxyGWtzr+yHO7HIiRJppPDhOKq3zstTcVf8msXb/t4eavW3jCDpMSmA==", 117 | "cpu": [ 118 | "x64" 119 | ], 120 | "dev": true, 121 | "optional": true, 122 | "os": [ 123 | "darwin" 124 | ], 125 | "engines": { 126 | "node": ">=12" 127 | } 128 | }, 129 | "node_modules/@esbuild/freebsd-arm64": { 130 | "version": "0.19.10", 131 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.10.tgz", 132 | "integrity": "sha512-dMtk1wc7FSH8CCkE854GyGuNKCewlh+7heYP/sclpOG6Cectzk14qdUIY5CrKDbkA/OczXq9WesqnPl09mj5dg==", 133 | "cpu": [ 134 | "arm64" 135 | ], 136 | "dev": true, 137 | "optional": true, 138 | "os": [ 139 | "freebsd" 140 | ], 141 | "engines": { 142 | "node": ">=12" 143 | } 144 | }, 145 | "node_modules/@esbuild/freebsd-x64": { 146 | "version": "0.19.10", 147 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.10.tgz", 148 | "integrity": "sha512-G5UPPspryHu1T3uX8WiOEUa6q6OlQh6gNl4CO4Iw5PS+Kg5bVggVFehzXBJY6X6RSOMS8iXDv2330VzaObm4Ag==", 149 | "cpu": [ 150 | "x64" 151 | ], 152 | "dev": true, 153 | "optional": true, 154 | "os": [ 155 | "freebsd" 156 | ], 157 | "engines": { 158 | "node": ">=12" 159 | } 160 | }, 161 | "node_modules/@esbuild/linux-arm": { 162 | "version": "0.19.10", 163 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.10.tgz", 164 | "integrity": "sha512-j6gUW5aAaPgD416Hk9FHxn27On28H4eVI9rJ4az7oCGTFW48+LcgNDBN+9f8rKZz7EEowo889CPKyeaD0iw9Kg==", 165 | "cpu": [ 166 | "arm" 167 | ], 168 | "dev": true, 169 | "optional": true, 170 | "os": [ 171 | "linux" 172 | ], 173 | "engines": { 174 | "node": ">=12" 175 | } 176 | }, 177 | "node_modules/@esbuild/linux-arm64": { 178 | "version": "0.19.10", 179 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.10.tgz", 180 | "integrity": "sha512-QxaouHWZ+2KWEj7cGJmvTIHVALfhpGxo3WLmlYfJ+dA5fJB6lDEIg+oe/0//FuyVHuS3l79/wyBxbHr0NgtxJQ==", 181 | "cpu": [ 182 | "arm64" 183 | ], 184 | "dev": true, 185 | "optional": true, 186 | "os": [ 187 | "linux" 188 | ], 189 | "engines": { 190 | "node": ">=12" 191 | } 192 | }, 193 | "node_modules/@esbuild/linux-ia32": { 194 | "version": "0.19.10", 195 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.10.tgz", 196 | "integrity": "sha512-4ub1YwXxYjj9h1UIZs2hYbnTZBtenPw5NfXCRgEkGb0b6OJ2gpkMvDqRDYIDRjRdWSe/TBiZltm3Y3Q8SN1xNg==", 197 | "cpu": [ 198 | "ia32" 199 | ], 200 | "dev": true, 201 | "optional": true, 202 | "os": [ 203 | "linux" 204 | ], 205 | "engines": { 206 | "node": ">=12" 207 | } 208 | }, 209 | "node_modules/@esbuild/linux-loong64": { 210 | "version": "0.19.10", 211 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.10.tgz", 212 | "integrity": "sha512-lo3I9k+mbEKoxtoIbM0yC/MZ1i2wM0cIeOejlVdZ3D86LAcFXFRdeuZmh91QJvUTW51bOK5W2BznGNIl4+mDaA==", 213 | "cpu": [ 214 | "loong64" 215 | ], 216 | "dev": true, 217 | "optional": true, 218 | "os": [ 219 | "linux" 220 | ], 221 | "engines": { 222 | "node": ">=12" 223 | } 224 | }, 225 | "node_modules/@esbuild/linux-mips64el": { 226 | "version": "0.19.10", 227 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.10.tgz", 228 | "integrity": "sha512-J4gH3zhHNbdZN0Bcr1QUGVNkHTdpijgx5VMxeetSk6ntdt+vR1DqGmHxQYHRmNb77tP6GVvD+K0NyO4xjd7y4A==", 229 | "cpu": [ 230 | "mips64el" 231 | ], 232 | "dev": true, 233 | "optional": true, 234 | "os": [ 235 | "linux" 236 | ], 237 | "engines": { 238 | "node": ">=12" 239 | } 240 | }, 241 | "node_modules/@esbuild/linux-ppc64": { 242 | "version": "0.19.10", 243 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.10.tgz", 244 | "integrity": "sha512-tgT/7u+QhV6ge8wFMzaklOY7KqiyitgT1AUHMApau32ZlvTB/+efeCtMk4eXS+uEymYK249JsoiklZN64xt6oQ==", 245 | "cpu": [ 246 | "ppc64" 247 | ], 248 | "dev": true, 249 | "optional": true, 250 | "os": [ 251 | "linux" 252 | ], 253 | "engines": { 254 | "node": ">=12" 255 | } 256 | }, 257 | "node_modules/@esbuild/linux-riscv64": { 258 | "version": "0.19.10", 259 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.10.tgz", 260 | "integrity": "sha512-0f/spw0PfBMZBNqtKe5FLzBDGo0SKZKvMl5PHYQr3+eiSscfJ96XEknCe+JoOayybWUFQbcJTrk946i3j9uYZA==", 261 | "cpu": [ 262 | "riscv64" 263 | ], 264 | "dev": true, 265 | "optional": true, 266 | "os": [ 267 | "linux" 268 | ], 269 | "engines": { 270 | "node": ">=12" 271 | } 272 | }, 273 | "node_modules/@esbuild/linux-s390x": { 274 | "version": "0.19.10", 275 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.10.tgz", 276 | "integrity": "sha512-pZFe0OeskMHzHa9U38g+z8Yx5FNCLFtUnJtQMpwhS+r4S566aK2ci3t4NCP4tjt6d5j5uo4h7tExZMjeKoehAA==", 277 | "cpu": [ 278 | "s390x" 279 | ], 280 | "dev": true, 281 | "optional": true, 282 | "os": [ 283 | "linux" 284 | ], 285 | "engines": { 286 | "node": ">=12" 287 | } 288 | }, 289 | "node_modules/@esbuild/linux-x64": { 290 | "version": "0.19.10", 291 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.10.tgz", 292 | "integrity": "sha512-SpYNEqg/6pZYoc+1zLCjVOYvxfZVZj6w0KROZ3Fje/QrM3nfvT2llI+wmKSrWuX6wmZeTapbarvuNNK/qepSgA==", 293 | "cpu": [ 294 | "x64" 295 | ], 296 | "dev": true, 297 | "optional": true, 298 | "os": [ 299 | "linux" 300 | ], 301 | "engines": { 302 | "node": ">=12" 303 | } 304 | }, 305 | "node_modules/@esbuild/netbsd-x64": { 306 | "version": "0.19.10", 307 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.10.tgz", 308 | "integrity": "sha512-ACbZ0vXy9zksNArWlk2c38NdKg25+L9pr/mVaj9SUq6lHZu/35nx2xnQVRGLrC1KKQqJKRIB0q8GspiHI3J80Q==", 309 | "cpu": [ 310 | "x64" 311 | ], 312 | "dev": true, 313 | "optional": true, 314 | "os": [ 315 | "netbsd" 316 | ], 317 | "engines": { 318 | "node": ">=12" 319 | } 320 | }, 321 | "node_modules/@esbuild/openbsd-x64": { 322 | "version": "0.19.10", 323 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.10.tgz", 324 | "integrity": "sha512-PxcgvjdSjtgPMiPQrM3pwSaG4kGphP+bLSb+cihuP0LYdZv1epbAIecHVl5sD3npkfYBZ0ZnOjR878I7MdJDFg==", 325 | "cpu": [ 326 | "x64" 327 | ], 328 | "dev": true, 329 | "optional": true, 330 | "os": [ 331 | "openbsd" 332 | ], 333 | "engines": { 334 | "node": ">=12" 335 | } 336 | }, 337 | "node_modules/@esbuild/sunos-x64": { 338 | "version": "0.19.10", 339 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.10.tgz", 340 | "integrity": "sha512-ZkIOtrRL8SEJjr+VHjmW0znkPs+oJXhlJbNwfI37rvgeMtk3sxOQevXPXjmAPZPigVTncvFqLMd+uV0IBSEzqA==", 341 | "cpu": [ 342 | "x64" 343 | ], 344 | "dev": true, 345 | "optional": true, 346 | "os": [ 347 | "sunos" 348 | ], 349 | "engines": { 350 | "node": ">=12" 351 | } 352 | }, 353 | "node_modules/@esbuild/win32-arm64": { 354 | "version": "0.19.10", 355 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.10.tgz", 356 | "integrity": "sha512-+Sa4oTDbpBfGpl3Hn3XiUe4f8TU2JF7aX8cOfqFYMMjXp6ma6NJDztl5FDG8Ezx0OjwGikIHw+iA54YLDNNVfw==", 357 | "cpu": [ 358 | "arm64" 359 | ], 360 | "dev": true, 361 | "optional": true, 362 | "os": [ 363 | "win32" 364 | ], 365 | "engines": { 366 | "node": ">=12" 367 | } 368 | }, 369 | "node_modules/@esbuild/win32-ia32": { 370 | "version": "0.19.10", 371 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.10.tgz", 372 | "integrity": "sha512-EOGVLK1oWMBXgfttJdPHDTiivYSjX6jDNaATeNOaCOFEVcfMjtbx7WVQwPSE1eIfCp/CaSF2nSrDtzc4I9f8TQ==", 373 | "cpu": [ 374 | "ia32" 375 | ], 376 | "dev": true, 377 | "optional": true, 378 | "os": [ 379 | "win32" 380 | ], 381 | "engines": { 382 | "node": ">=12" 383 | } 384 | }, 385 | "node_modules/@esbuild/win32-x64": { 386 | "version": "0.19.10", 387 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.10.tgz", 388 | "integrity": "sha512-whqLG6Sc70AbU73fFYvuYzaE4MNMBIlR1Y/IrUeOXFrWHxBEjjbZaQ3IXIQS8wJdAzue2GwYZCjOrgrU1oUHoA==", 389 | "cpu": [ 390 | "x64" 391 | ], 392 | "dev": true, 393 | "optional": true, 394 | "os": [ 395 | "win32" 396 | ], 397 | "engines": { 398 | "node": ">=12" 399 | } 400 | }, 401 | "node_modules/@howiefh/ant-path-matcher": { 402 | "version": "0.0.2", 403 | "resolved": "https://registry.npmjs.org/@howiefh/ant-path-matcher/-/ant-path-matcher-0.0.2.tgz", 404 | "integrity": "sha512-gIVZbBi7KX43XaI4GUDITYgR6YFdRiGBu4HazVkjVTZ/tlNH6qSpydTxaZ1cd2eIzvSblXM63SqCxVo30yA9ww==", 405 | "dev": true 406 | }, 407 | "node_modules/@jridgewell/sourcemap-codec": { 408 | "version": "1.4.15", 409 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", 410 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" 411 | }, 412 | "node_modules/@rollup/rollup-android-arm-eabi": { 413 | "version": "4.9.1", 414 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.1.tgz", 415 | "integrity": "sha512-6vMdBZqtq1dVQ4CWdhFwhKZL6E4L1dV6jUjuBvsavvNJSppzi6dLBbuV+3+IyUREaj9ZFvQefnQm28v4OCXlig==", 416 | "cpu": [ 417 | "arm" 418 | ], 419 | "dev": true, 420 | "optional": true, 421 | "os": [ 422 | "android" 423 | ] 424 | }, 425 | "node_modules/@rollup/rollup-android-arm64": { 426 | "version": "4.9.1", 427 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.1.tgz", 428 | "integrity": "sha512-Jto9Fl3YQ9OLsTDWtLFPtaIMSL2kwGyGoVCmPC8Gxvym9TCZm4Sie+cVeblPO66YZsYH8MhBKDMGZ2NDxuk/XQ==", 429 | "cpu": [ 430 | "arm64" 431 | ], 432 | "dev": true, 433 | "optional": true, 434 | "os": [ 435 | "android" 436 | ] 437 | }, 438 | "node_modules/@rollup/rollup-darwin-arm64": { 439 | "version": "4.9.1", 440 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.1.tgz", 441 | "integrity": "sha512-LtYcLNM+bhsaKAIGwVkh5IOWhaZhjTfNOkGzGqdHvhiCUVuJDalvDxEdSnhFzAn+g23wgsycmZk1vbnaibZwwA==", 442 | "cpu": [ 443 | "arm64" 444 | ], 445 | "dev": true, 446 | "optional": true, 447 | "os": [ 448 | "darwin" 449 | ] 450 | }, 451 | "node_modules/@rollup/rollup-darwin-x64": { 452 | "version": "4.9.1", 453 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.1.tgz", 454 | "integrity": "sha512-KyP/byeXu9V+etKO6Lw3E4tW4QdcnzDG/ake031mg42lob5tN+5qfr+lkcT/SGZaH2PdW4Z1NX9GHEkZ8xV7og==", 455 | "cpu": [ 456 | "x64" 457 | ], 458 | "dev": true, 459 | "optional": true, 460 | "os": [ 461 | "darwin" 462 | ] 463 | }, 464 | "node_modules/@rollup/rollup-linux-arm-gnueabihf": { 465 | "version": "4.9.1", 466 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.1.tgz", 467 | "integrity": "sha512-Yqz/Doumf3QTKplwGNrCHe/B2p9xqDghBZSlAY0/hU6ikuDVQuOUIpDP/YcmoT+447tsZTmirmjgG3znvSCR0Q==", 468 | "cpu": [ 469 | "arm" 470 | ], 471 | "dev": true, 472 | "optional": true, 473 | "os": [ 474 | "linux" 475 | ] 476 | }, 477 | "node_modules/@rollup/rollup-linux-arm64-gnu": { 478 | "version": "4.9.1", 479 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.1.tgz", 480 | "integrity": "sha512-u3XkZVvxcvlAOlQJ3UsD1rFvLWqu4Ef/Ggl40WAVCuogf4S1nJPHh5RTgqYFpCOvuGJ7H5yGHabjFKEZGExk5Q==", 481 | "cpu": [ 482 | "arm64" 483 | ], 484 | "dev": true, 485 | "optional": true, 486 | "os": [ 487 | "linux" 488 | ] 489 | }, 490 | "node_modules/@rollup/rollup-linux-arm64-musl": { 491 | "version": "4.9.1", 492 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.1.tgz", 493 | "integrity": "sha512-0XSYN/rfWShW+i+qjZ0phc6vZ7UWI8XWNz4E/l+6edFt+FxoEghrJHjX1EY/kcUGCnZzYYRCl31SNdfOi450Aw==", 494 | "cpu": [ 495 | "arm64" 496 | ], 497 | "dev": true, 498 | "optional": true, 499 | "os": [ 500 | "linux" 501 | ] 502 | }, 503 | "node_modules/@rollup/rollup-linux-riscv64-gnu": { 504 | "version": "4.9.1", 505 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.1.tgz", 506 | "integrity": "sha512-LmYIO65oZVfFt9t6cpYkbC4d5lKHLYv5B4CSHRpnANq0VZUQXGcCPXHzbCXCz4RQnx7jvlYB1ISVNCE/omz5cw==", 507 | "cpu": [ 508 | "riscv64" 509 | ], 510 | "dev": true, 511 | "optional": true, 512 | "os": [ 513 | "linux" 514 | ] 515 | }, 516 | "node_modules/@rollup/rollup-linux-x64-gnu": { 517 | "version": "4.9.1", 518 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.1.tgz", 519 | "integrity": "sha512-kr8rEPQ6ns/Lmr/hiw8sEVj9aa07gh1/tQF2Y5HrNCCEPiCBGnBUt9tVusrcBBiJfIt1yNaXN6r1CCmpbFEDpg==", 520 | "cpu": [ 521 | "x64" 522 | ], 523 | "dev": true, 524 | "optional": true, 525 | "os": [ 526 | "linux" 527 | ] 528 | }, 529 | "node_modules/@rollup/rollup-linux-x64-musl": { 530 | "version": "4.9.1", 531 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.1.tgz", 532 | "integrity": "sha512-t4QSR7gN+OEZLG0MiCgPqMWZGwmeHhsM4AkegJ0Kiy6TnJ9vZ8dEIwHw1LcZKhbHxTY32hp9eVCMdR3/I8MGRw==", 533 | "cpu": [ 534 | "x64" 535 | ], 536 | "dev": true, 537 | "optional": true, 538 | "os": [ 539 | "linux" 540 | ] 541 | }, 542 | "node_modules/@rollup/rollup-win32-arm64-msvc": { 543 | "version": "4.9.1", 544 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.1.tgz", 545 | "integrity": "sha512-7XI4ZCBN34cb+BH557FJPmh0kmNz2c25SCQeT9OiFWEgf8+dL6ZwJ8f9RnUIit+j01u07Yvrsuu1rZGxJCc51g==", 546 | "cpu": [ 547 | "arm64" 548 | ], 549 | "dev": true, 550 | "optional": true, 551 | "os": [ 552 | "win32" 553 | ] 554 | }, 555 | "node_modules/@rollup/rollup-win32-ia32-msvc": { 556 | "version": "4.9.1", 557 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.1.tgz", 558 | "integrity": "sha512-yE5c2j1lSWOH5jp+Q0qNL3Mdhr8WuqCNVjc6BxbVfS5cAS6zRmdiw7ktb8GNpDCEUJphILY6KACoFoRtKoqNQg==", 559 | "cpu": [ 560 | "ia32" 561 | ], 562 | "dev": true, 563 | "optional": true, 564 | "os": [ 565 | "win32" 566 | ] 567 | }, 568 | "node_modules/@rollup/rollup-win32-x64-msvc": { 569 | "version": "4.9.1", 570 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.1.tgz", 571 | "integrity": "sha512-PyJsSsafjmIhVgaI1Zdj7m8BB8mMckFah/xbpplObyHfiXzKcI5UOUXRyOdHW7nz4DpMCuzLnF7v5IWHenCwYA==", 572 | "cpu": [ 573 | "x64" 574 | ], 575 | "dev": true, 576 | "optional": true, 577 | "os": [ 578 | "win32" 579 | ] 580 | }, 581 | "node_modules/@vitejs/plugin-vue": { 582 | "version": "4.6.1", 583 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.6.1.tgz", 584 | "integrity": "sha512-4JG1b1SPQpviIXkp4cwUaHluU0KCgjLprdyYaw4cq6OkJzqFXuao5CefsOaftcRpw8rlMQVwmHEurK+1zIzTlA==", 585 | "dev": true, 586 | "engines": { 587 | "node": "^14.18.0 || >=16.0.0" 588 | }, 589 | "peerDependencies": { 590 | "vite": "^4.0.0 || ^5.0.0", 591 | "vue": "^3.2.25" 592 | } 593 | }, 594 | "node_modules/@volar/language-core": { 595 | "version": "1.11.1", 596 | "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-1.11.1.tgz", 597 | "integrity": "sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==", 598 | "dev": true, 599 | "dependencies": { 600 | "@volar/source-map": "1.11.1" 601 | } 602 | }, 603 | "node_modules/@volar/source-map": { 604 | "version": "1.11.1", 605 | "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-1.11.1.tgz", 606 | "integrity": "sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==", 607 | "dev": true, 608 | "dependencies": { 609 | "muggle-string": "^0.3.1" 610 | } 611 | }, 612 | "node_modules/@volar/typescript": { 613 | "version": "1.11.1", 614 | "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-1.11.1.tgz", 615 | "integrity": "sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==", 616 | "dev": true, 617 | "dependencies": { 618 | "@volar/language-core": "1.11.1", 619 | "path-browserify": "^1.0.1" 620 | } 621 | }, 622 | "node_modules/@vue/compiler-core": { 623 | "version": "3.4.0", 624 | "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.0.tgz", 625 | "integrity": "sha512-cw4S15PkNGTKkP9OFFl4wnQoJJk+HqaYBafgrpDnSukiQGpcYJeRpzmqnCVCIkl6V6Eqsv58E0OAdl6b592vuA==", 626 | "dependencies": { 627 | "@babel/parser": "^7.23.6", 628 | "@vue/shared": "3.4.0", 629 | "entities": "^4.5.0", 630 | "estree-walker": "^2.0.2", 631 | "source-map-js": "^1.0.2" 632 | } 633 | }, 634 | "node_modules/@vue/compiler-dom": { 635 | "version": "3.4.0", 636 | "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.0.tgz", 637 | "integrity": "sha512-E957uOhpoE48YjZGWeAoLmNYd3UeU4oIP8kJi8Rcsb9l2tV8Z48Jn07Zgq1aW0v3vuhlmydEKkKKbhLpADHXEA==", 638 | "dependencies": { 639 | "@vue/compiler-core": "3.4.0", 640 | "@vue/shared": "3.4.0" 641 | } 642 | }, 643 | "node_modules/@vue/compiler-sfc": { 644 | "version": "3.4.0", 645 | "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.0.tgz", 646 | "integrity": "sha512-PWE0mE2yW7bJS7PmaCrVDEG6KPaDJo0pb4AKnCxJ5lRRDO4IwL/fswBGhCpov+v/c+N/e+hQHpXNwvqU9BtUXg==", 647 | "dependencies": { 648 | "@babel/parser": "^7.23.6", 649 | "@vue/compiler-core": "3.4.0", 650 | "@vue/compiler-dom": "3.4.0", 651 | "@vue/compiler-ssr": "3.4.0", 652 | "@vue/shared": "3.4.0", 653 | "estree-walker": "^2.0.2", 654 | "magic-string": "^0.30.5", 655 | "postcss": "^8.4.32", 656 | "source-map-js": "^1.0.2" 657 | } 658 | }, 659 | "node_modules/@vue/compiler-ssr": { 660 | "version": "3.4.0", 661 | "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.0.tgz", 662 | "integrity": "sha512-+oXKy105g9DIYQKDi3Gwung0xqQX5gJHr0GR+Vf7yK/WkNDM6q61ummcKmKAB85EIst8y3vj2PA9z9YU5Oc4DQ==", 663 | "dependencies": { 664 | "@vue/compiler-dom": "3.4.0", 665 | "@vue/shared": "3.4.0" 666 | } 667 | }, 668 | "node_modules/@vue/language-core": { 669 | "version": "1.8.27", 670 | "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-1.8.27.tgz", 671 | "integrity": "sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==", 672 | "dev": true, 673 | "dependencies": { 674 | "@volar/language-core": "~1.11.1", 675 | "@volar/source-map": "~1.11.1", 676 | "@vue/compiler-dom": "^3.3.0", 677 | "@vue/shared": "^3.3.0", 678 | "computeds": "^0.0.1", 679 | "minimatch": "^9.0.3", 680 | "muggle-string": "^0.3.1", 681 | "path-browserify": "^1.0.1", 682 | "vue-template-compiler": "^2.7.14" 683 | }, 684 | "peerDependencies": { 685 | "typescript": "*" 686 | }, 687 | "peerDependenciesMeta": { 688 | "typescript": { 689 | "optional": true 690 | } 691 | } 692 | }, 693 | "node_modules/@vue/reactivity": { 694 | "version": "3.4.0", 695 | "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.0.tgz", 696 | "integrity": "sha512-X6BvQjNcgKKHWPQzlRJjZvIu72Kkn8xJSv6VNptqWh8dToMknD0Hch1l4N7llKgVt6Diq4lMeUnErbZFvuGlAA==", 697 | "dependencies": { 698 | "@vue/shared": "3.4.0" 699 | } 700 | }, 701 | "node_modules/@vue/runtime-core": { 702 | "version": "3.4.0", 703 | "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.0.tgz", 704 | "integrity": "sha512-NYrj/JgMMqnSWcIud8lLzDQrBLu+EVEeQ56QE9DYJeKG2eFrnQy8o/h57R9nCprafHs0uImKL3xsdXjHseYVxw==", 705 | "dependencies": { 706 | "@vue/reactivity": "3.4.0", 707 | "@vue/shared": "3.4.0" 708 | } 709 | }, 710 | "node_modules/@vue/runtime-dom": { 711 | "version": "3.4.0", 712 | "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.0.tgz", 713 | "integrity": "sha512-1ZoHEsA5l77qbx2F+SWo/hQdBksPuOmww1t/jznidDG+xMB/iidafEFvo2ZTtZii0JfTIrlDhjshfYUvQC17wQ==", 714 | "dependencies": { 715 | "@vue/runtime-core": "3.4.0", 716 | "@vue/shared": "3.4.0", 717 | "csstype": "^3.1.3" 718 | } 719 | }, 720 | "node_modules/@vue/server-renderer": { 721 | "version": "3.4.0", 722 | "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.0.tgz", 723 | "integrity": "sha512-GuOVCyLDlWPu8nKo5AUxb8B+iB/Ik4I1WwqAlBqf5+y48z6D6rvKshp7KR3cJea+pte1tdTsb0+Ja82KizMZOw==", 724 | "dependencies": { 725 | "@vue/compiler-ssr": "3.4.0", 726 | "@vue/shared": "3.4.0" 727 | }, 728 | "peerDependencies": { 729 | "vue": "3.4.0" 730 | } 731 | }, 732 | "node_modules/@vue/shared": { 733 | "version": "3.4.0", 734 | "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.0.tgz", 735 | "integrity": "sha512-Nhh3ed3G1R6HDAWiG6YYFt0Zmq/To6u5vjzwa9TIquGheCXPY6nEdIAO8ZdlwXsWqC2yNLj700FOvShpYt5CEA==" 736 | }, 737 | "node_modules/anymatch": { 738 | "version": "3.1.3", 739 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 740 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 741 | "dev": true, 742 | "dependencies": { 743 | "normalize-path": "^3.0.0", 744 | "picomatch": "^2.0.4" 745 | }, 746 | "engines": { 747 | "node": ">= 8" 748 | } 749 | }, 750 | "node_modules/balanced-match": { 751 | "version": "1.0.2", 752 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 753 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 754 | "dev": true 755 | }, 756 | "node_modules/binary-extensions": { 757 | "version": "2.2.0", 758 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 759 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 760 | "dev": true, 761 | "engines": { 762 | "node": ">=8" 763 | } 764 | }, 765 | "node_modules/brace-expansion": { 766 | "version": "2.0.1", 767 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 768 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 769 | "dev": true, 770 | "dependencies": { 771 | "balanced-match": "^1.0.0" 772 | } 773 | }, 774 | "node_modules/braces": { 775 | "version": "3.0.2", 776 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 777 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 778 | "dev": true, 779 | "dependencies": { 780 | "fill-range": "^7.0.1" 781 | }, 782 | "engines": { 783 | "node": ">=8" 784 | } 785 | }, 786 | "node_modules/chokidar": { 787 | "version": "3.5.3", 788 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 789 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 790 | "dev": true, 791 | "funding": [ 792 | { 793 | "type": "individual", 794 | "url": "https://paulmillr.com/funding/" 795 | } 796 | ], 797 | "dependencies": { 798 | "anymatch": "~3.1.2", 799 | "braces": "~3.0.2", 800 | "glob-parent": "~5.1.2", 801 | "is-binary-path": "~2.1.0", 802 | "is-glob": "~4.0.1", 803 | "normalize-path": "~3.0.0", 804 | "readdirp": "~3.6.0" 805 | }, 806 | "engines": { 807 | "node": ">= 8.10.0" 808 | }, 809 | "optionalDependencies": { 810 | "fsevents": "~2.3.2" 811 | } 812 | }, 813 | "node_modules/computeds": { 814 | "version": "0.0.1", 815 | "resolved": "https://registry.npmjs.org/computeds/-/computeds-0.0.1.tgz", 816 | "integrity": "sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==", 817 | "dev": true 818 | }, 819 | "node_modules/csstype": { 820 | "version": "3.1.3", 821 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", 822 | "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" 823 | }, 824 | "node_modules/data-uri-to-buffer": { 825 | "version": "4.0.1", 826 | "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", 827 | "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", 828 | "dev": true, 829 | "engines": { 830 | "node": ">= 12" 831 | } 832 | }, 833 | "node_modules/de-indent": { 834 | "version": "1.0.2", 835 | "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", 836 | "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", 837 | "dev": true 838 | }, 839 | "node_modules/entities": { 840 | "version": "4.5.0", 841 | "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", 842 | "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", 843 | "engines": { 844 | "node": ">=0.12" 845 | }, 846 | "funding": { 847 | "url": "https://github.com/fb55/entities?sponsor=1" 848 | } 849 | }, 850 | "node_modules/esbuild": { 851 | "version": "0.19.10", 852 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.10.tgz", 853 | "integrity": "sha512-S1Y27QGt/snkNYrRcswgRFqZjaTG5a5xM3EQo97uNBnH505pdzSNe/HLBq1v0RO7iK/ngdbhJB6mDAp0OK+iUA==", 854 | "dev": true, 855 | "hasInstallScript": true, 856 | "bin": { 857 | "esbuild": "bin/esbuild" 858 | }, 859 | "engines": { 860 | "node": ">=12" 861 | }, 862 | "optionalDependencies": { 863 | "@esbuild/aix-ppc64": "0.19.10", 864 | "@esbuild/android-arm": "0.19.10", 865 | "@esbuild/android-arm64": "0.19.10", 866 | "@esbuild/android-x64": "0.19.10", 867 | "@esbuild/darwin-arm64": "0.19.10", 868 | "@esbuild/darwin-x64": "0.19.10", 869 | "@esbuild/freebsd-arm64": "0.19.10", 870 | "@esbuild/freebsd-x64": "0.19.10", 871 | "@esbuild/linux-arm": "0.19.10", 872 | "@esbuild/linux-arm64": "0.19.10", 873 | "@esbuild/linux-ia32": "0.19.10", 874 | "@esbuild/linux-loong64": "0.19.10", 875 | "@esbuild/linux-mips64el": "0.19.10", 876 | "@esbuild/linux-ppc64": "0.19.10", 877 | "@esbuild/linux-riscv64": "0.19.10", 878 | "@esbuild/linux-s390x": "0.19.10", 879 | "@esbuild/linux-x64": "0.19.10", 880 | "@esbuild/netbsd-x64": "0.19.10", 881 | "@esbuild/openbsd-x64": "0.19.10", 882 | "@esbuild/sunos-x64": "0.19.10", 883 | "@esbuild/win32-arm64": "0.19.10", 884 | "@esbuild/win32-ia32": "0.19.10", 885 | "@esbuild/win32-x64": "0.19.10" 886 | } 887 | }, 888 | "node_modules/estree-walker": { 889 | "version": "2.0.2", 890 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 891 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" 892 | }, 893 | "node_modules/fetch-blob": { 894 | "version": "3.2.0", 895 | "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", 896 | "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", 897 | "dev": true, 898 | "funding": [ 899 | { 900 | "type": "github", 901 | "url": "https://github.com/sponsors/jimmywarting" 902 | }, 903 | { 904 | "type": "paypal", 905 | "url": "https://paypal.me/jimmywarting" 906 | } 907 | ], 908 | "dependencies": { 909 | "node-domexception": "^1.0.0", 910 | "web-streams-polyfill": "^3.0.3" 911 | }, 912 | "engines": { 913 | "node": "^12.20 || >= 14.13" 914 | } 915 | }, 916 | "node_modules/fill-range": { 917 | "version": "7.0.1", 918 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 919 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 920 | "dev": true, 921 | "dependencies": { 922 | "to-regex-range": "^5.0.1" 923 | }, 924 | "engines": { 925 | "node": ">=8" 926 | } 927 | }, 928 | "node_modules/formdata-polyfill": { 929 | "version": "4.0.10", 930 | "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", 931 | "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", 932 | "dev": true, 933 | "dependencies": { 934 | "fetch-blob": "^3.1.2" 935 | }, 936 | "engines": { 937 | "node": ">=12.20.0" 938 | } 939 | }, 940 | "node_modules/fsevents": { 941 | "version": "2.3.3", 942 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 943 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 944 | "dev": true, 945 | "hasInstallScript": true, 946 | "optional": true, 947 | "os": [ 948 | "darwin" 949 | ], 950 | "engines": { 951 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 952 | } 953 | }, 954 | "node_modules/glob-parent": { 955 | "version": "5.1.2", 956 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 957 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 958 | "dev": true, 959 | "dependencies": { 960 | "is-glob": "^4.0.1" 961 | }, 962 | "engines": { 963 | "node": ">= 6" 964 | } 965 | }, 966 | "node_modules/he": { 967 | "version": "1.2.0", 968 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", 969 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", 970 | "dev": true, 971 | "bin": { 972 | "he": "bin/he" 973 | } 974 | }, 975 | "node_modules/is-binary-path": { 976 | "version": "2.1.0", 977 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 978 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 979 | "dev": true, 980 | "dependencies": { 981 | "binary-extensions": "^2.0.0" 982 | }, 983 | "engines": { 984 | "node": ">=8" 985 | } 986 | }, 987 | "node_modules/is-extglob": { 988 | "version": "2.1.1", 989 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 990 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 991 | "dev": true, 992 | "engines": { 993 | "node": ">=0.10.0" 994 | } 995 | }, 996 | "node_modules/is-glob": { 997 | "version": "4.0.3", 998 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 999 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1000 | "dev": true, 1001 | "dependencies": { 1002 | "is-extglob": "^2.1.1" 1003 | }, 1004 | "engines": { 1005 | "node": ">=0.10.0" 1006 | } 1007 | }, 1008 | "node_modules/is-number": { 1009 | "version": "7.0.0", 1010 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1011 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1012 | "dev": true, 1013 | "engines": { 1014 | "node": ">=0.12.0" 1015 | } 1016 | }, 1017 | "node_modules/lru-cache": { 1018 | "version": "6.0.0", 1019 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 1020 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 1021 | "dev": true, 1022 | "dependencies": { 1023 | "yallist": "^4.0.0" 1024 | }, 1025 | "engines": { 1026 | "node": ">=10" 1027 | } 1028 | }, 1029 | "node_modules/magic-string": { 1030 | "version": "0.30.5", 1031 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", 1032 | "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", 1033 | "dependencies": { 1034 | "@jridgewell/sourcemap-codec": "^1.4.15" 1035 | }, 1036 | "engines": { 1037 | "node": ">=12" 1038 | } 1039 | }, 1040 | "node_modules/minimatch": { 1041 | "version": "9.0.3", 1042 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", 1043 | "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", 1044 | "dev": true, 1045 | "dependencies": { 1046 | "brace-expansion": "^2.0.1" 1047 | }, 1048 | "engines": { 1049 | "node": ">=16 || 14 >=14.17" 1050 | }, 1051 | "funding": { 1052 | "url": "https://github.com/sponsors/isaacs" 1053 | } 1054 | }, 1055 | "node_modules/muggle-string": { 1056 | "version": "0.3.1", 1057 | "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.3.1.tgz", 1058 | "integrity": "sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==", 1059 | "dev": true 1060 | }, 1061 | "node_modules/nanoid": { 1062 | "version": "3.3.7", 1063 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", 1064 | "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", 1065 | "funding": [ 1066 | { 1067 | "type": "github", 1068 | "url": "https://github.com/sponsors/ai" 1069 | } 1070 | ], 1071 | "bin": { 1072 | "nanoid": "bin/nanoid.cjs" 1073 | }, 1074 | "engines": { 1075 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 1076 | } 1077 | }, 1078 | "node_modules/node-domexception": { 1079 | "version": "1.0.0", 1080 | "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", 1081 | "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", 1082 | "dev": true, 1083 | "funding": [ 1084 | { 1085 | "type": "github", 1086 | "url": "https://github.com/sponsors/jimmywarting" 1087 | }, 1088 | { 1089 | "type": "github", 1090 | "url": "https://paypal.me/jimmywarting" 1091 | } 1092 | ], 1093 | "engines": { 1094 | "node": ">=10.5.0" 1095 | } 1096 | }, 1097 | "node_modules/node-fetch": { 1098 | "version": "3.3.2", 1099 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", 1100 | "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", 1101 | "dev": true, 1102 | "dependencies": { 1103 | "data-uri-to-buffer": "^4.0.0", 1104 | "fetch-blob": "^3.1.4", 1105 | "formdata-polyfill": "^4.0.10" 1106 | }, 1107 | "engines": { 1108 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 1109 | }, 1110 | "funding": { 1111 | "type": "opencollective", 1112 | "url": "https://opencollective.com/node-fetch" 1113 | } 1114 | }, 1115 | "node_modules/normalize-path": { 1116 | "version": "3.0.0", 1117 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1118 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1119 | "dev": true, 1120 | "engines": { 1121 | "node": ">=0.10.0" 1122 | } 1123 | }, 1124 | "node_modules/path-browserify": { 1125 | "version": "1.0.1", 1126 | "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", 1127 | "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", 1128 | "dev": true 1129 | }, 1130 | "node_modules/picocolors": { 1131 | "version": "1.0.0", 1132 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 1133 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" 1134 | }, 1135 | "node_modules/picomatch": { 1136 | "version": "2.3.1", 1137 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1138 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1139 | "dev": true, 1140 | "engines": { 1141 | "node": ">=8.6" 1142 | }, 1143 | "funding": { 1144 | "url": "https://github.com/sponsors/jonschlinkert" 1145 | } 1146 | }, 1147 | "node_modules/postcss": { 1148 | "version": "8.4.32", 1149 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", 1150 | "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", 1151 | "funding": [ 1152 | { 1153 | "type": "opencollective", 1154 | "url": "https://opencollective.com/postcss/" 1155 | }, 1156 | { 1157 | "type": "tidelift", 1158 | "url": "https://tidelift.com/funding/github/npm/postcss" 1159 | }, 1160 | { 1161 | "type": "github", 1162 | "url": "https://github.com/sponsors/ai" 1163 | } 1164 | ], 1165 | "dependencies": { 1166 | "nanoid": "^3.3.7", 1167 | "picocolors": "^1.0.0", 1168 | "source-map-js": "^1.0.2" 1169 | }, 1170 | "engines": { 1171 | "node": "^10 || ^12 || >=14" 1172 | } 1173 | }, 1174 | "node_modules/readdirp": { 1175 | "version": "3.6.0", 1176 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 1177 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 1178 | "dev": true, 1179 | "dependencies": { 1180 | "picomatch": "^2.2.1" 1181 | }, 1182 | "engines": { 1183 | "node": ">=8.10.0" 1184 | } 1185 | }, 1186 | "node_modules/rollup": { 1187 | "version": "4.9.1", 1188 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.1.tgz", 1189 | "integrity": "sha512-pgPO9DWzLoW/vIhlSoDByCzcpX92bKEorbgXuZrqxByte3JFk2xSW2JEeAcyLc9Ru9pqcNNW+Ob7ntsk2oT/Xw==", 1190 | "dev": true, 1191 | "bin": { 1192 | "rollup": "dist/bin/rollup" 1193 | }, 1194 | "engines": { 1195 | "node": ">=18.0.0", 1196 | "npm": ">=8.0.0" 1197 | }, 1198 | "optionalDependencies": { 1199 | "@rollup/rollup-android-arm-eabi": "4.9.1", 1200 | "@rollup/rollup-android-arm64": "4.9.1", 1201 | "@rollup/rollup-darwin-arm64": "4.9.1", 1202 | "@rollup/rollup-darwin-x64": "4.9.1", 1203 | "@rollup/rollup-linux-arm-gnueabihf": "4.9.1", 1204 | "@rollup/rollup-linux-arm64-gnu": "4.9.1", 1205 | "@rollup/rollup-linux-arm64-musl": "4.9.1", 1206 | "@rollup/rollup-linux-riscv64-gnu": "4.9.1", 1207 | "@rollup/rollup-linux-x64-gnu": "4.9.1", 1208 | "@rollup/rollup-linux-x64-musl": "4.9.1", 1209 | "@rollup/rollup-win32-arm64-msvc": "4.9.1", 1210 | "@rollup/rollup-win32-ia32-msvc": "4.9.1", 1211 | "@rollup/rollup-win32-x64-msvc": "4.9.1", 1212 | "fsevents": "~2.3.2" 1213 | } 1214 | }, 1215 | "node_modules/semver": { 1216 | "version": "7.5.4", 1217 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", 1218 | "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", 1219 | "dev": true, 1220 | "dependencies": { 1221 | "lru-cache": "^6.0.0" 1222 | }, 1223 | "bin": { 1224 | "semver": "bin/semver.js" 1225 | }, 1226 | "engines": { 1227 | "node": ">=10" 1228 | } 1229 | }, 1230 | "node_modules/source-map-js": { 1231 | "version": "1.0.2", 1232 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 1233 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 1234 | "engines": { 1235 | "node": ">=0.10.0" 1236 | } 1237 | }, 1238 | "node_modules/to-regex-range": { 1239 | "version": "5.0.1", 1240 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1241 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1242 | "dev": true, 1243 | "dependencies": { 1244 | "is-number": "^7.0.0" 1245 | }, 1246 | "engines": { 1247 | "node": ">=8.0" 1248 | } 1249 | }, 1250 | "node_modules/typescript": { 1251 | "version": "5.3.3", 1252 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", 1253 | "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", 1254 | "devOptional": true, 1255 | "bin": { 1256 | "tsc": "bin/tsc", 1257 | "tsserver": "bin/tsserver" 1258 | }, 1259 | "engines": { 1260 | "node": ">=14.17" 1261 | } 1262 | }, 1263 | "node_modules/vite": { 1264 | "version": "5.0.10", 1265 | "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.10.tgz", 1266 | "integrity": "sha512-2P8J7WWgmc355HUMlFrwofacvr98DAjoE52BfdbwQtyLH06XKwaL/FMnmKM2crF0iX4MpmMKoDlNCB1ok7zHCw==", 1267 | "dev": true, 1268 | "dependencies": { 1269 | "esbuild": "^0.19.3", 1270 | "postcss": "^8.4.32", 1271 | "rollup": "^4.2.0" 1272 | }, 1273 | "bin": { 1274 | "vite": "bin/vite.js" 1275 | }, 1276 | "engines": { 1277 | "node": "^18.0.0 || >=20.0.0" 1278 | }, 1279 | "funding": { 1280 | "url": "https://github.com/vitejs/vite?sponsor=1" 1281 | }, 1282 | "optionalDependencies": { 1283 | "fsevents": "~2.3.3" 1284 | }, 1285 | "peerDependencies": { 1286 | "@types/node": "^18.0.0 || >=20.0.0", 1287 | "less": "*", 1288 | "lightningcss": "^1.21.0", 1289 | "sass": "*", 1290 | "stylus": "*", 1291 | "sugarss": "*", 1292 | "terser": "^5.4.0" 1293 | }, 1294 | "peerDependenciesMeta": { 1295 | "@types/node": { 1296 | "optional": true 1297 | }, 1298 | "less": { 1299 | "optional": true 1300 | }, 1301 | "lightningcss": { 1302 | "optional": true 1303 | }, 1304 | "sass": { 1305 | "optional": true 1306 | }, 1307 | "stylus": { 1308 | "optional": true 1309 | }, 1310 | "sugarss": { 1311 | "optional": true 1312 | }, 1313 | "terser": { 1314 | "optional": true 1315 | } 1316 | } 1317 | }, 1318 | "node_modules/vite-plugin-mock-server": { 1319 | "version": "1.1.0", 1320 | "resolved": "https://registry.npmjs.org/vite-plugin-mock-server/-/vite-plugin-mock-server-1.1.0.tgz", 1321 | "integrity": "sha512-jKgLv/qsBeYXJPCEFxNN8R/P1ZkE9uSI4Xerda0qzkKAsHxof2zp3tE8FH+seIHlN2F3C2omDAh9iC53vbp6Jw==", 1322 | "dev": true, 1323 | "dependencies": { 1324 | "@howiefh/ant-path-matcher": "0.0.2", 1325 | "chokidar": "^3.5.2" 1326 | } 1327 | }, 1328 | "node_modules/vue": { 1329 | "version": "3.4.0", 1330 | "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.0.tgz", 1331 | "integrity": "sha512-iTE9Ve/7DO/H39+gXHrNkRdnh1jDwPe/fap4brbPKkp1APMkS03OiZ+UY0dwpqtRX0iPWQTkh8Fu3hKgLtaxfA==", 1332 | "dependencies": { 1333 | "@vue/compiler-dom": "3.4.0", 1334 | "@vue/compiler-sfc": "3.4.0", 1335 | "@vue/runtime-dom": "3.4.0", 1336 | "@vue/server-renderer": "3.4.0", 1337 | "@vue/shared": "3.4.0" 1338 | }, 1339 | "peerDependencies": { 1340 | "typescript": "*" 1341 | }, 1342 | "peerDependenciesMeta": { 1343 | "typescript": { 1344 | "optional": true 1345 | } 1346 | } 1347 | }, 1348 | "node_modules/vue-template-compiler": { 1349 | "version": "2.7.16", 1350 | "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz", 1351 | "integrity": "sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==", 1352 | "dev": true, 1353 | "dependencies": { 1354 | "de-indent": "^1.0.2", 1355 | "he": "^1.2.0" 1356 | } 1357 | }, 1358 | "node_modules/vue-tsc": { 1359 | "version": "1.8.27", 1360 | "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.8.27.tgz", 1361 | "integrity": "sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg==", 1362 | "dev": true, 1363 | "dependencies": { 1364 | "@volar/typescript": "~1.11.1", 1365 | "@vue/language-core": "1.8.27", 1366 | "semver": "^7.5.4" 1367 | }, 1368 | "bin": { 1369 | "vue-tsc": "bin/vue-tsc.js" 1370 | }, 1371 | "peerDependencies": { 1372 | "typescript": "*" 1373 | } 1374 | }, 1375 | "node_modules/web-streams-polyfill": { 1376 | "version": "3.3.2", 1377 | "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.2.tgz", 1378 | "integrity": "sha512-3pRGuxRF5gpuZc0W+EpwQRmCD7gRqcDOMt688KmdlDAgAyaB1XlN0zq2njfDNm44XVdIouE7pZ6GzbdyH47uIQ==", 1379 | "dev": true, 1380 | "engines": { 1381 | "node": ">= 8" 1382 | } 1383 | }, 1384 | "node_modules/yallist": { 1385 | "version": "4.0.0", 1386 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 1387 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 1388 | "dev": true 1389 | } 1390 | } 1391 | } 1392 | -------------------------------------------------------------------------------- /example2/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "example2", 3 | "version": "0.0.0", 4 | "type": "module", 5 | "scripts": { 6 | "dev": "vite", 7 | "build": "vue-tsc && vite build", 8 | "preview": "vite preview", 9 | "runtest": "vite --mode=test" 10 | }, 11 | "dependencies": { 12 | "vue": "^3.3.11" 13 | }, 14 | "devDependencies": { 15 | "@vitejs/plugin-vue": "^4.5.2", 16 | "node-fetch": "^3.3.2", 17 | "typescript": "^5.2.2", 18 | "vite": "^5.0.8", 19 | "vite-plugin-mock-server": "^1.1.0", 20 | "vue-tsc": "^1.8.25" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /example2/src/App.vue: -------------------------------------------------------------------------------- 1 | 23 | 24 | 66 | 67 | 98 | -------------------------------------------------------------------------------- /example2/src/main.ts: -------------------------------------------------------------------------------- 1 | import { createApp } from 'vue' 2 | import App from './App.vue' 3 | 4 | createApp(App).mount('#app') 5 | -------------------------------------------------------------------------------- /example2/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /example2/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2020", 4 | "useDefineForClassFields": true, 5 | "module": "ESNext", 6 | "lib": ["ES2020", "DOM", "DOM.Iterable"], 7 | "skipLibCheck": true, 8 | 9 | /* Bundler mode */ 10 | "moduleResolution": "bundler", 11 | "allowImportingTsExtensions": true, 12 | "resolveJsonModule": true, 13 | "isolatedModules": true, 14 | "noEmit": true, 15 | "jsx": "preserve", 16 | 17 | /* Linting */ 18 | "strict": true, 19 | "noUnusedLocals": true, 20 | "noUnusedParameters": true, 21 | "noFallthroughCasesInSwitch": true 22 | }, 23 | "include": ["src/**/*.ts", "src/**/*.tsx", "src/**/*.vue"] 24 | } 25 | -------------------------------------------------------------------------------- /example2/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { ConfigEnv, Plugin, UserConfigExport } from 'vite' 2 | import vue from '@vitejs/plugin-vue' 3 | import fetch from 'node-fetch' 4 | import mockServer from '../src' 5 | 6 | const port = 8000 7 | export default ({ command, mode }: ConfigEnv): UserConfigExport => { 8 | if(mode !== 'test') { 9 | return { 10 | plugins: [ 11 | vue(), 12 | mockServer() as Plugin 13 | ]} 14 | } else { 15 | // auto close after 5 secounds, to the runtime 16 | return { 17 | server: { 18 | port, 19 | }, 20 | plugins: [ 21 | vue(), 22 | mockServer() as Plugin, 23 | { 24 | name: `vite-plugin-stop`, 25 | apply: 'serve', 26 | configureServer(server) { 27 | setTimeout(async ()=> { 28 | const resp = await fetch(`http://localhost:${port}/api/test1/1`) 29 | const responseText = await resp.text() 30 | server.close() 31 | if(responseText !== 'Hello world!/api/test1/1') 32 | throw new Error('wrong mock response') 33 | else 34 | console.log('\x1b[32m ✓ correct mock response \x1b[0m'); 35 | 36 | setTimeout(process.exit, 1e3) 37 | } 38 | , 5000) 39 | } 40 | } 41 | ] 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vite-plugin-mock-server", 3 | "version": "1.3.1", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "vite-plugin-mock-server", 9 | "version": "1.3.1", 10 | "license": "MIT", 11 | "dependencies": { 12 | "@howiefh/ant-path-matcher": "0.0.2", 13 | "chokidar": "^3.5.2" 14 | }, 15 | "devDependencies": { 16 | "@types/node": "^15.12.4", 17 | "del-cli": "^5.1.0", 18 | "typescript": "^4.3.4", 19 | "vite": "^2.3.8" 20 | } 21 | }, 22 | "node_modules/@babel/code-frame": { 23 | "version": "7.23.5", 24 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", 25 | "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", 26 | "dev": true, 27 | "dependencies": { 28 | "@babel/highlight": "^7.23.4", 29 | "chalk": "^2.4.2" 30 | }, 31 | "engines": { 32 | "node": ">=6.9.0" 33 | } 34 | }, 35 | "node_modules/@babel/helper-validator-identifier": { 36 | "version": "7.22.20", 37 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", 38 | "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", 39 | "dev": true, 40 | "engines": { 41 | "node": ">=6.9.0" 42 | } 43 | }, 44 | "node_modules/@babel/highlight": { 45 | "version": "7.23.4", 46 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", 47 | "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", 48 | "dev": true, 49 | "dependencies": { 50 | "@babel/helper-validator-identifier": "^7.22.20", 51 | "chalk": "^2.4.2", 52 | "js-tokens": "^4.0.0" 53 | }, 54 | "engines": { 55 | "node": ">=6.9.0" 56 | } 57 | }, 58 | "node_modules/@esbuild/linux-loong64": { 59 | "version": "0.14.54", 60 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz", 61 | "integrity": "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==", 62 | "cpu": [ 63 | "loong64" 64 | ], 65 | "dev": true, 66 | "optional": true, 67 | "os": [ 68 | "linux" 69 | ], 70 | "engines": { 71 | "node": ">=12" 72 | } 73 | }, 74 | "node_modules/@howiefh/ant-path-matcher": { 75 | "version": "0.0.2", 76 | "resolved": "https://registry.npmmirror.com/@howiefh/ant-path-matcher/download/@howiefh/ant-path-matcher-0.0.2.tgz", 77 | "integrity": "sha1-/mDEaL5efrDEiYOw93DHZymgMiM=" 78 | }, 79 | "node_modules/@nodelib/fs.scandir": { 80 | "version": "2.1.5", 81 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 82 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 83 | "dev": true, 84 | "dependencies": { 85 | "@nodelib/fs.stat": "2.0.5", 86 | "run-parallel": "^1.1.9" 87 | }, 88 | "engines": { 89 | "node": ">= 8" 90 | } 91 | }, 92 | "node_modules/@nodelib/fs.stat": { 93 | "version": "2.0.5", 94 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 95 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 96 | "dev": true, 97 | "engines": { 98 | "node": ">= 8" 99 | } 100 | }, 101 | "node_modules/@nodelib/fs.walk": { 102 | "version": "1.2.8", 103 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 104 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 105 | "dev": true, 106 | "dependencies": { 107 | "@nodelib/fs.scandir": "2.1.5", 108 | "fastq": "^1.6.0" 109 | }, 110 | "engines": { 111 | "node": ">= 8" 112 | } 113 | }, 114 | "node_modules/@types/minimist": { 115 | "version": "1.2.5", 116 | "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", 117 | "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", 118 | "dev": true 119 | }, 120 | "node_modules/@types/node": { 121 | "version": "15.12.4", 122 | "resolved": "https://registry.npmmirror.com/@types/node/download/@types/node-15.12.4.tgz?cache=0&sync_timestamp=1624437151657&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-15.12.4.tgz", 123 | "integrity": "sha1-4c+BfXCh4RjoGSLE/2aDzp1CLiY=", 124 | "dev": true 125 | }, 126 | "node_modules/@types/normalize-package-data": { 127 | "version": "2.4.4", 128 | "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", 129 | "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", 130 | "dev": true 131 | }, 132 | "node_modules/aggregate-error": { 133 | "version": "4.0.1", 134 | "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", 135 | "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", 136 | "dev": true, 137 | "dependencies": { 138 | "clean-stack": "^4.0.0", 139 | "indent-string": "^5.0.0" 140 | }, 141 | "engines": { 142 | "node": ">=12" 143 | }, 144 | "funding": { 145 | "url": "https://github.com/sponsors/sindresorhus" 146 | } 147 | }, 148 | "node_modules/ansi-styles": { 149 | "version": "3.2.1", 150 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 151 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 152 | "dev": true, 153 | "dependencies": { 154 | "color-convert": "^1.9.0" 155 | }, 156 | "engines": { 157 | "node": ">=4" 158 | } 159 | }, 160 | "node_modules/anymatch": { 161 | "version": "3.1.2", 162 | "resolved": "https://registry.npmmirror.com/anymatch/download/anymatch-3.1.2.tgz", 163 | "integrity": "sha1-wFV8CWrzLxBhmPT04qODU343hxY=", 164 | "dependencies": { 165 | "normalize-path": "^3.0.0", 166 | "picomatch": "^2.0.4" 167 | }, 168 | "engines": { 169 | "node": ">= 8" 170 | } 171 | }, 172 | "node_modules/arrify": { 173 | "version": "1.0.1", 174 | "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", 175 | "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", 176 | "dev": true, 177 | "engines": { 178 | "node": ">=0.10.0" 179 | } 180 | }, 181 | "node_modules/balanced-match": { 182 | "version": "1.0.2", 183 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 184 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 185 | "dev": true 186 | }, 187 | "node_modules/binary-extensions": { 188 | "version": "2.2.0", 189 | "resolved": "https://registry.npmmirror.com/binary-extensions/download/binary-extensions-2.2.0.tgz?cache=0&sync_timestamp=1610299293319&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-2.2.0.tgz", 190 | "integrity": "sha1-dfUC7q+f/eQvyYgpZFvk6na9ni0=", 191 | "engines": { 192 | "node": ">=8" 193 | } 194 | }, 195 | "node_modules/brace-expansion": { 196 | "version": "1.1.11", 197 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 198 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 199 | "dev": true, 200 | "dependencies": { 201 | "balanced-match": "^1.0.0", 202 | "concat-map": "0.0.1" 203 | } 204 | }, 205 | "node_modules/braces": { 206 | "version": "3.0.3", 207 | "resolved": "https://mirrors.cloud.tencent.com/npm/braces/-/braces-3.0.3.tgz", 208 | "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", 209 | "dependencies": { 210 | "fill-range": "^7.1.1" 211 | }, 212 | "engines": { 213 | "node": ">=8" 214 | } 215 | }, 216 | "node_modules/camelcase": { 217 | "version": "6.3.0", 218 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", 219 | "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", 220 | "dev": true, 221 | "engines": { 222 | "node": ">=10" 223 | }, 224 | "funding": { 225 | "url": "https://github.com/sponsors/sindresorhus" 226 | } 227 | }, 228 | "node_modules/camelcase-keys": { 229 | "version": "7.0.2", 230 | "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz", 231 | "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==", 232 | "dev": true, 233 | "dependencies": { 234 | "camelcase": "^6.3.0", 235 | "map-obj": "^4.1.0", 236 | "quick-lru": "^5.1.1", 237 | "type-fest": "^1.2.1" 238 | }, 239 | "engines": { 240 | "node": ">=12" 241 | }, 242 | "funding": { 243 | "url": "https://github.com/sponsors/sindresorhus" 244 | } 245 | }, 246 | "node_modules/chalk": { 247 | "version": "2.4.2", 248 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 249 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 250 | "dev": true, 251 | "dependencies": { 252 | "ansi-styles": "^3.2.1", 253 | "escape-string-regexp": "^1.0.5", 254 | "supports-color": "^5.3.0" 255 | }, 256 | "engines": { 257 | "node": ">=4" 258 | } 259 | }, 260 | "node_modules/chalk/node_modules/escape-string-regexp": { 261 | "version": "1.0.5", 262 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 263 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", 264 | "dev": true, 265 | "engines": { 266 | "node": ">=0.8.0" 267 | } 268 | }, 269 | "node_modules/chokidar": { 270 | "version": "3.5.3", 271 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 272 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 273 | "funding": [ 274 | { 275 | "type": "individual", 276 | "url": "https://paulmillr.com/funding/" 277 | } 278 | ], 279 | "dependencies": { 280 | "anymatch": "~3.1.2", 281 | "braces": "~3.0.2", 282 | "glob-parent": "~5.1.2", 283 | "is-binary-path": "~2.1.0", 284 | "is-glob": "~4.0.1", 285 | "normalize-path": "~3.0.0", 286 | "readdirp": "~3.6.0" 287 | }, 288 | "engines": { 289 | "node": ">= 8.10.0" 290 | }, 291 | "optionalDependencies": { 292 | "fsevents": "~2.3.2" 293 | } 294 | }, 295 | "node_modules/clean-stack": { 296 | "version": "4.2.0", 297 | "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", 298 | "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", 299 | "dev": true, 300 | "dependencies": { 301 | "escape-string-regexp": "5.0.0" 302 | }, 303 | "engines": { 304 | "node": ">=12" 305 | }, 306 | "funding": { 307 | "url": "https://github.com/sponsors/sindresorhus" 308 | } 309 | }, 310 | "node_modules/color-convert": { 311 | "version": "1.9.3", 312 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 313 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 314 | "dev": true, 315 | "dependencies": { 316 | "color-name": "1.1.3" 317 | } 318 | }, 319 | "node_modules/color-name": { 320 | "version": "1.1.3", 321 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 322 | "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", 323 | "dev": true 324 | }, 325 | "node_modules/concat-map": { 326 | "version": "0.0.1", 327 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 328 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 329 | "dev": true 330 | }, 331 | "node_modules/decamelize": { 332 | "version": "5.0.1", 333 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", 334 | "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", 335 | "dev": true, 336 | "engines": { 337 | "node": ">=10" 338 | }, 339 | "funding": { 340 | "url": "https://github.com/sponsors/sindresorhus" 341 | } 342 | }, 343 | "node_modules/decamelize-keys": { 344 | "version": "1.1.1", 345 | "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", 346 | "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", 347 | "dev": true, 348 | "dependencies": { 349 | "decamelize": "^1.1.0", 350 | "map-obj": "^1.0.0" 351 | }, 352 | "engines": { 353 | "node": ">=0.10.0" 354 | }, 355 | "funding": { 356 | "url": "https://github.com/sponsors/sindresorhus" 357 | } 358 | }, 359 | "node_modules/decamelize-keys/node_modules/decamelize": { 360 | "version": "1.2.0", 361 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 362 | "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", 363 | "dev": true, 364 | "engines": { 365 | "node": ">=0.10.0" 366 | } 367 | }, 368 | "node_modules/decamelize-keys/node_modules/map-obj": { 369 | "version": "1.0.1", 370 | "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", 371 | "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", 372 | "dev": true, 373 | "engines": { 374 | "node": ">=0.10.0" 375 | } 376 | }, 377 | "node_modules/del": { 378 | "version": "7.1.0", 379 | "resolved": "https://registry.npmjs.org/del/-/del-7.1.0.tgz", 380 | "integrity": "sha512-v2KyNk7efxhlyHpjEvfyxaAihKKK0nWCuf6ZtqZcFFpQRG0bJ12Qsr0RpvsICMjAAZ8DOVCxrlqpxISlMHC4Kg==", 381 | "dev": true, 382 | "dependencies": { 383 | "globby": "^13.1.2", 384 | "graceful-fs": "^4.2.10", 385 | "is-glob": "^4.0.3", 386 | "is-path-cwd": "^3.0.0", 387 | "is-path-inside": "^4.0.0", 388 | "p-map": "^5.5.0", 389 | "rimraf": "^3.0.2", 390 | "slash": "^4.0.0" 391 | }, 392 | "engines": { 393 | "node": ">=14.16" 394 | }, 395 | "funding": { 396 | "url": "https://github.com/sponsors/sindresorhus" 397 | } 398 | }, 399 | "node_modules/del-cli": { 400 | "version": "5.1.0", 401 | "resolved": "https://registry.npmjs.org/del-cli/-/del-cli-5.1.0.tgz", 402 | "integrity": "sha512-xwMeh2acluWeccsfzE7VLsG3yTr7nWikbfw+xhMnpRrF15pGSkw+3/vJZWlGoE4I86UiLRNHicmKt4tkIX9Jtg==", 403 | "dev": true, 404 | "dependencies": { 405 | "del": "^7.1.0", 406 | "meow": "^10.1.3" 407 | }, 408 | "bin": { 409 | "del": "cli.js", 410 | "del-cli": "cli.js" 411 | }, 412 | "engines": { 413 | "node": ">=14.16" 414 | }, 415 | "funding": { 416 | "url": "https://github.com/sponsors/sindresorhus" 417 | } 418 | }, 419 | "node_modules/dir-glob": { 420 | "version": "3.0.1", 421 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", 422 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", 423 | "dev": true, 424 | "dependencies": { 425 | "path-type": "^4.0.0" 426 | }, 427 | "engines": { 428 | "node": ">=8" 429 | } 430 | }, 431 | "node_modules/error-ex": { 432 | "version": "1.3.2", 433 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 434 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 435 | "dev": true, 436 | "dependencies": { 437 | "is-arrayish": "^0.2.1" 438 | } 439 | }, 440 | "node_modules/esbuild": { 441 | "version": "0.14.54", 442 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.54.tgz", 443 | "integrity": "sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==", 444 | "dev": true, 445 | "hasInstallScript": true, 446 | "bin": { 447 | "esbuild": "bin/esbuild" 448 | }, 449 | "engines": { 450 | "node": ">=12" 451 | }, 452 | "optionalDependencies": { 453 | "@esbuild/linux-loong64": "0.14.54", 454 | "esbuild-android-64": "0.14.54", 455 | "esbuild-android-arm64": "0.14.54", 456 | "esbuild-darwin-64": "0.14.54", 457 | "esbuild-darwin-arm64": "0.14.54", 458 | "esbuild-freebsd-64": "0.14.54", 459 | "esbuild-freebsd-arm64": "0.14.54", 460 | "esbuild-linux-32": "0.14.54", 461 | "esbuild-linux-64": "0.14.54", 462 | "esbuild-linux-arm": "0.14.54", 463 | "esbuild-linux-arm64": "0.14.54", 464 | "esbuild-linux-mips64le": "0.14.54", 465 | "esbuild-linux-ppc64le": "0.14.54", 466 | "esbuild-linux-riscv64": "0.14.54", 467 | "esbuild-linux-s390x": "0.14.54", 468 | "esbuild-netbsd-64": "0.14.54", 469 | "esbuild-openbsd-64": "0.14.54", 470 | "esbuild-sunos-64": "0.14.54", 471 | "esbuild-windows-32": "0.14.54", 472 | "esbuild-windows-64": "0.14.54", 473 | "esbuild-windows-arm64": "0.14.54" 474 | } 475 | }, 476 | "node_modules/esbuild-android-64": { 477 | "version": "0.14.54", 478 | "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz", 479 | "integrity": "sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==", 480 | "cpu": [ 481 | "x64" 482 | ], 483 | "dev": true, 484 | "optional": true, 485 | "os": [ 486 | "android" 487 | ], 488 | "engines": { 489 | "node": ">=12" 490 | } 491 | }, 492 | "node_modules/esbuild-android-arm64": { 493 | "version": "0.14.54", 494 | "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz", 495 | "integrity": "sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==", 496 | "cpu": [ 497 | "arm64" 498 | ], 499 | "dev": true, 500 | "optional": true, 501 | "os": [ 502 | "android" 503 | ], 504 | "engines": { 505 | "node": ">=12" 506 | } 507 | }, 508 | "node_modules/esbuild-darwin-64": { 509 | "version": "0.14.54", 510 | "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz", 511 | "integrity": "sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==", 512 | "cpu": [ 513 | "x64" 514 | ], 515 | "dev": true, 516 | "optional": true, 517 | "os": [ 518 | "darwin" 519 | ], 520 | "engines": { 521 | "node": ">=12" 522 | } 523 | }, 524 | "node_modules/esbuild-darwin-arm64": { 525 | "version": "0.14.54", 526 | "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz", 527 | "integrity": "sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==", 528 | "cpu": [ 529 | "arm64" 530 | ], 531 | "dev": true, 532 | "optional": true, 533 | "os": [ 534 | "darwin" 535 | ], 536 | "engines": { 537 | "node": ">=12" 538 | } 539 | }, 540 | "node_modules/esbuild-freebsd-64": { 541 | "version": "0.14.54", 542 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz", 543 | "integrity": "sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==", 544 | "cpu": [ 545 | "x64" 546 | ], 547 | "dev": true, 548 | "optional": true, 549 | "os": [ 550 | "freebsd" 551 | ], 552 | "engines": { 553 | "node": ">=12" 554 | } 555 | }, 556 | "node_modules/esbuild-freebsd-arm64": { 557 | "version": "0.14.54", 558 | "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz", 559 | "integrity": "sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==", 560 | "cpu": [ 561 | "arm64" 562 | ], 563 | "dev": true, 564 | "optional": true, 565 | "os": [ 566 | "freebsd" 567 | ], 568 | "engines": { 569 | "node": ">=12" 570 | } 571 | }, 572 | "node_modules/esbuild-linux-32": { 573 | "version": "0.14.54", 574 | "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz", 575 | "integrity": "sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==", 576 | "cpu": [ 577 | "ia32" 578 | ], 579 | "dev": true, 580 | "optional": true, 581 | "os": [ 582 | "linux" 583 | ], 584 | "engines": { 585 | "node": ">=12" 586 | } 587 | }, 588 | "node_modules/esbuild-linux-64": { 589 | "version": "0.14.54", 590 | "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz", 591 | "integrity": "sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==", 592 | "cpu": [ 593 | "x64" 594 | ], 595 | "dev": true, 596 | "optional": true, 597 | "os": [ 598 | "linux" 599 | ], 600 | "engines": { 601 | "node": ">=12" 602 | } 603 | }, 604 | "node_modules/esbuild-linux-arm": { 605 | "version": "0.14.54", 606 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz", 607 | "integrity": "sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==", 608 | "cpu": [ 609 | "arm" 610 | ], 611 | "dev": true, 612 | "optional": true, 613 | "os": [ 614 | "linux" 615 | ], 616 | "engines": { 617 | "node": ">=12" 618 | } 619 | }, 620 | "node_modules/esbuild-linux-arm64": { 621 | "version": "0.14.54", 622 | "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz", 623 | "integrity": "sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==", 624 | "cpu": [ 625 | "arm64" 626 | ], 627 | "dev": true, 628 | "optional": true, 629 | "os": [ 630 | "linux" 631 | ], 632 | "engines": { 633 | "node": ">=12" 634 | } 635 | }, 636 | "node_modules/esbuild-linux-mips64le": { 637 | "version": "0.14.54", 638 | "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz", 639 | "integrity": "sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==", 640 | "cpu": [ 641 | "mips64el" 642 | ], 643 | "dev": true, 644 | "optional": true, 645 | "os": [ 646 | "linux" 647 | ], 648 | "engines": { 649 | "node": ">=12" 650 | } 651 | }, 652 | "node_modules/esbuild-linux-ppc64le": { 653 | "version": "0.14.54", 654 | "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz", 655 | "integrity": "sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==", 656 | "cpu": [ 657 | "ppc64" 658 | ], 659 | "dev": true, 660 | "optional": true, 661 | "os": [ 662 | "linux" 663 | ], 664 | "engines": { 665 | "node": ">=12" 666 | } 667 | }, 668 | "node_modules/esbuild-linux-riscv64": { 669 | "version": "0.14.54", 670 | "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz", 671 | "integrity": "sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==", 672 | "cpu": [ 673 | "riscv64" 674 | ], 675 | "dev": true, 676 | "optional": true, 677 | "os": [ 678 | "linux" 679 | ], 680 | "engines": { 681 | "node": ">=12" 682 | } 683 | }, 684 | "node_modules/esbuild-linux-s390x": { 685 | "version": "0.14.54", 686 | "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz", 687 | "integrity": "sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==", 688 | "cpu": [ 689 | "s390x" 690 | ], 691 | "dev": true, 692 | "optional": true, 693 | "os": [ 694 | "linux" 695 | ], 696 | "engines": { 697 | "node": ">=12" 698 | } 699 | }, 700 | "node_modules/esbuild-netbsd-64": { 701 | "version": "0.14.54", 702 | "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz", 703 | "integrity": "sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==", 704 | "cpu": [ 705 | "x64" 706 | ], 707 | "dev": true, 708 | "optional": true, 709 | "os": [ 710 | "netbsd" 711 | ], 712 | "engines": { 713 | "node": ">=12" 714 | } 715 | }, 716 | "node_modules/esbuild-openbsd-64": { 717 | "version": "0.14.54", 718 | "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz", 719 | "integrity": "sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==", 720 | "cpu": [ 721 | "x64" 722 | ], 723 | "dev": true, 724 | "optional": true, 725 | "os": [ 726 | "openbsd" 727 | ], 728 | "engines": { 729 | "node": ">=12" 730 | } 731 | }, 732 | "node_modules/esbuild-sunos-64": { 733 | "version": "0.14.54", 734 | "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz", 735 | "integrity": "sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==", 736 | "cpu": [ 737 | "x64" 738 | ], 739 | "dev": true, 740 | "optional": true, 741 | "os": [ 742 | "sunos" 743 | ], 744 | "engines": { 745 | "node": ">=12" 746 | } 747 | }, 748 | "node_modules/esbuild-windows-32": { 749 | "version": "0.14.54", 750 | "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz", 751 | "integrity": "sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==", 752 | "cpu": [ 753 | "ia32" 754 | ], 755 | "dev": true, 756 | "optional": true, 757 | "os": [ 758 | "win32" 759 | ], 760 | "engines": { 761 | "node": ">=12" 762 | } 763 | }, 764 | "node_modules/esbuild-windows-64": { 765 | "version": "0.14.54", 766 | "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz", 767 | "integrity": "sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==", 768 | "cpu": [ 769 | "x64" 770 | ], 771 | "dev": true, 772 | "optional": true, 773 | "os": [ 774 | "win32" 775 | ], 776 | "engines": { 777 | "node": ">=12" 778 | } 779 | }, 780 | "node_modules/esbuild-windows-arm64": { 781 | "version": "0.14.54", 782 | "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz", 783 | "integrity": "sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==", 784 | "cpu": [ 785 | "arm64" 786 | ], 787 | "dev": true, 788 | "optional": true, 789 | "os": [ 790 | "win32" 791 | ], 792 | "engines": { 793 | "node": ">=12" 794 | } 795 | }, 796 | "node_modules/escape-string-regexp": { 797 | "version": "5.0.0", 798 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", 799 | "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", 800 | "dev": true, 801 | "engines": { 802 | "node": ">=12" 803 | }, 804 | "funding": { 805 | "url": "https://github.com/sponsors/sindresorhus" 806 | } 807 | }, 808 | "node_modules/fast-glob": { 809 | "version": "3.3.2", 810 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", 811 | "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", 812 | "dev": true, 813 | "dependencies": { 814 | "@nodelib/fs.stat": "^2.0.2", 815 | "@nodelib/fs.walk": "^1.2.3", 816 | "glob-parent": "^5.1.2", 817 | "merge2": "^1.3.0", 818 | "micromatch": "^4.0.4" 819 | }, 820 | "engines": { 821 | "node": ">=8.6.0" 822 | } 823 | }, 824 | "node_modules/fastq": { 825 | "version": "1.16.0", 826 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", 827 | "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", 828 | "dev": true, 829 | "dependencies": { 830 | "reusify": "^1.0.4" 831 | } 832 | }, 833 | "node_modules/fill-range": { 834 | "version": "7.1.1", 835 | "resolved": "https://mirrors.cloud.tencent.com/npm/fill-range/-/fill-range-7.1.1.tgz", 836 | "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", 837 | "dependencies": { 838 | "to-regex-range": "^5.0.1" 839 | }, 840 | "engines": { 841 | "node": ">=8" 842 | } 843 | }, 844 | "node_modules/find-up": { 845 | "version": "5.0.0", 846 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 847 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 848 | "dev": true, 849 | "dependencies": { 850 | "locate-path": "^6.0.0", 851 | "path-exists": "^4.0.0" 852 | }, 853 | "engines": { 854 | "node": ">=10" 855 | }, 856 | "funding": { 857 | "url": "https://github.com/sponsors/sindresorhus" 858 | } 859 | }, 860 | "node_modules/fs.realpath": { 861 | "version": "1.0.0", 862 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 863 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 864 | "dev": true 865 | }, 866 | "node_modules/fsevents": { 867 | "version": "2.3.2", 868 | "resolved": "https://registry.npmmirror.com/fsevents/download/fsevents-2.3.2.tgz?cache=0&sync_timestamp=1612537044236&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffsevents%2Fdownload%2Ffsevents-2.3.2.tgz", 869 | "integrity": "sha1-ilJveLj99GI7cJ4Ll1xSwkwC/Ro=", 870 | "hasInstallScript": true, 871 | "optional": true, 872 | "os": [ 873 | "darwin" 874 | ], 875 | "engines": { 876 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 877 | } 878 | }, 879 | "node_modules/function-bind": { 880 | "version": "1.1.2", 881 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 882 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 883 | "dev": true, 884 | "funding": { 885 | "url": "https://github.com/sponsors/ljharb" 886 | } 887 | }, 888 | "node_modules/glob": { 889 | "version": "7.2.3", 890 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 891 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 892 | "dev": true, 893 | "dependencies": { 894 | "fs.realpath": "^1.0.0", 895 | "inflight": "^1.0.4", 896 | "inherits": "2", 897 | "minimatch": "^3.1.1", 898 | "once": "^1.3.0", 899 | "path-is-absolute": "^1.0.0" 900 | }, 901 | "engines": { 902 | "node": "*" 903 | }, 904 | "funding": { 905 | "url": "https://github.com/sponsors/isaacs" 906 | } 907 | }, 908 | "node_modules/glob-parent": { 909 | "version": "5.1.2", 910 | "resolved": "https://registry.npmmirror.com/glob-parent/download/glob-parent-5.1.2.tgz?cache=0&sync_timestamp=1620073245729&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fglob-parent%2Fdownload%2Fglob-parent-5.1.2.tgz", 911 | "integrity": "sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ=", 912 | "dependencies": { 913 | "is-glob": "^4.0.1" 914 | }, 915 | "engines": { 916 | "node": ">= 6" 917 | } 918 | }, 919 | "node_modules/globby": { 920 | "version": "13.2.2", 921 | "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", 922 | "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", 923 | "dev": true, 924 | "dependencies": { 925 | "dir-glob": "^3.0.1", 926 | "fast-glob": "^3.3.0", 927 | "ignore": "^5.2.4", 928 | "merge2": "^1.4.1", 929 | "slash": "^4.0.0" 930 | }, 931 | "engines": { 932 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 933 | }, 934 | "funding": { 935 | "url": "https://github.com/sponsors/sindresorhus" 936 | } 937 | }, 938 | "node_modules/graceful-fs": { 939 | "version": "4.2.11", 940 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", 941 | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", 942 | "dev": true 943 | }, 944 | "node_modules/hard-rejection": { 945 | "version": "2.1.0", 946 | "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", 947 | "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", 948 | "dev": true, 949 | "engines": { 950 | "node": ">=6" 951 | } 952 | }, 953 | "node_modules/has-flag": { 954 | "version": "3.0.0", 955 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 956 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", 957 | "dev": true, 958 | "engines": { 959 | "node": ">=4" 960 | } 961 | }, 962 | "node_modules/hasown": { 963 | "version": "2.0.0", 964 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", 965 | "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", 966 | "dev": true, 967 | "dependencies": { 968 | "function-bind": "^1.1.2" 969 | }, 970 | "engines": { 971 | "node": ">= 0.4" 972 | } 973 | }, 974 | "node_modules/hosted-git-info": { 975 | "version": "4.1.0", 976 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", 977 | "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", 978 | "dev": true, 979 | "dependencies": { 980 | "lru-cache": "^6.0.0" 981 | }, 982 | "engines": { 983 | "node": ">=10" 984 | } 985 | }, 986 | "node_modules/ignore": { 987 | "version": "5.3.0", 988 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", 989 | "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", 990 | "dev": true, 991 | "engines": { 992 | "node": ">= 4" 993 | } 994 | }, 995 | "node_modules/indent-string": { 996 | "version": "5.0.0", 997 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", 998 | "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", 999 | "dev": true, 1000 | "engines": { 1001 | "node": ">=12" 1002 | }, 1003 | "funding": { 1004 | "url": "https://github.com/sponsors/sindresorhus" 1005 | } 1006 | }, 1007 | "node_modules/inflight": { 1008 | "version": "1.0.6", 1009 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1010 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 1011 | "dev": true, 1012 | "dependencies": { 1013 | "once": "^1.3.0", 1014 | "wrappy": "1" 1015 | } 1016 | }, 1017 | "node_modules/inherits": { 1018 | "version": "2.0.4", 1019 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1020 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1021 | "dev": true 1022 | }, 1023 | "node_modules/is-arrayish": { 1024 | "version": "0.2.1", 1025 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 1026 | "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", 1027 | "dev": true 1028 | }, 1029 | "node_modules/is-binary-path": { 1030 | "version": "2.1.0", 1031 | "resolved": "https://registry.npmmirror.com/is-binary-path/download/is-binary-path-2.1.0.tgz", 1032 | "integrity": "sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk=", 1033 | "dependencies": { 1034 | "binary-extensions": "^2.0.0" 1035 | }, 1036 | "engines": { 1037 | "node": ">=8" 1038 | } 1039 | }, 1040 | "node_modules/is-core-module": { 1041 | "version": "2.13.1", 1042 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", 1043 | "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", 1044 | "dev": true, 1045 | "dependencies": { 1046 | "hasown": "^2.0.0" 1047 | }, 1048 | "funding": { 1049 | "url": "https://github.com/sponsors/ljharb" 1050 | } 1051 | }, 1052 | "node_modules/is-extglob": { 1053 | "version": "2.1.1", 1054 | "resolved": "https://registry.npmmirror.com/is-extglob/download/is-extglob-2.1.1.tgz", 1055 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 1056 | "engines": { 1057 | "node": ">=0.10.0" 1058 | } 1059 | }, 1060 | "node_modules/is-glob": { 1061 | "version": "4.0.3", 1062 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1063 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1064 | "dependencies": { 1065 | "is-extglob": "^2.1.1" 1066 | }, 1067 | "engines": { 1068 | "node": ">=0.10.0" 1069 | } 1070 | }, 1071 | "node_modules/is-number": { 1072 | "version": "7.0.0", 1073 | "resolved": "https://mirrors.cloud.tencent.com/npm/is-number/-/is-number-7.0.0.tgz", 1074 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1075 | "engines": { 1076 | "node": ">=0.12.0" 1077 | } 1078 | }, 1079 | "node_modules/is-path-cwd": { 1080 | "version": "3.0.0", 1081 | "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-3.0.0.tgz", 1082 | "integrity": "sha512-kyiNFFLU0Ampr6SDZitD/DwUo4Zs1nSdnygUBqsu3LooL00Qvb5j+UnvApUn/TTj1J3OuE6BTdQ5rudKmU2ZaA==", 1083 | "dev": true, 1084 | "engines": { 1085 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 1086 | }, 1087 | "funding": { 1088 | "url": "https://github.com/sponsors/sindresorhus" 1089 | } 1090 | }, 1091 | "node_modules/is-path-inside": { 1092 | "version": "4.0.0", 1093 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz", 1094 | "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==", 1095 | "dev": true, 1096 | "engines": { 1097 | "node": ">=12" 1098 | }, 1099 | "funding": { 1100 | "url": "https://github.com/sponsors/sindresorhus" 1101 | } 1102 | }, 1103 | "node_modules/is-plain-obj": { 1104 | "version": "1.1.0", 1105 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", 1106 | "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", 1107 | "dev": true, 1108 | "engines": { 1109 | "node": ">=0.10.0" 1110 | } 1111 | }, 1112 | "node_modules/js-tokens": { 1113 | "version": "4.0.0", 1114 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1115 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 1116 | "dev": true 1117 | }, 1118 | "node_modules/json-parse-even-better-errors": { 1119 | "version": "2.3.1", 1120 | "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", 1121 | "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", 1122 | "dev": true 1123 | }, 1124 | "node_modules/kind-of": { 1125 | "version": "6.0.3", 1126 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", 1127 | "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", 1128 | "dev": true, 1129 | "engines": { 1130 | "node": ">=0.10.0" 1131 | } 1132 | }, 1133 | "node_modules/lines-and-columns": { 1134 | "version": "1.2.4", 1135 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", 1136 | "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", 1137 | "dev": true 1138 | }, 1139 | "node_modules/locate-path": { 1140 | "version": "6.0.0", 1141 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 1142 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 1143 | "dev": true, 1144 | "dependencies": { 1145 | "p-locate": "^5.0.0" 1146 | }, 1147 | "engines": { 1148 | "node": ">=10" 1149 | }, 1150 | "funding": { 1151 | "url": "https://github.com/sponsors/sindresorhus" 1152 | } 1153 | }, 1154 | "node_modules/lru-cache": { 1155 | "version": "6.0.0", 1156 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 1157 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 1158 | "dev": true, 1159 | "dependencies": { 1160 | "yallist": "^4.0.0" 1161 | }, 1162 | "engines": { 1163 | "node": ">=10" 1164 | } 1165 | }, 1166 | "node_modules/map-obj": { 1167 | "version": "4.3.0", 1168 | "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", 1169 | "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", 1170 | "dev": true, 1171 | "engines": { 1172 | "node": ">=8" 1173 | }, 1174 | "funding": { 1175 | "url": "https://github.com/sponsors/sindresorhus" 1176 | } 1177 | }, 1178 | "node_modules/meow": { 1179 | "version": "10.1.5", 1180 | "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz", 1181 | "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==", 1182 | "dev": true, 1183 | "dependencies": { 1184 | "@types/minimist": "^1.2.2", 1185 | "camelcase-keys": "^7.0.0", 1186 | "decamelize": "^5.0.0", 1187 | "decamelize-keys": "^1.1.0", 1188 | "hard-rejection": "^2.1.0", 1189 | "minimist-options": "4.1.0", 1190 | "normalize-package-data": "^3.0.2", 1191 | "read-pkg-up": "^8.0.0", 1192 | "redent": "^4.0.0", 1193 | "trim-newlines": "^4.0.2", 1194 | "type-fest": "^1.2.2", 1195 | "yargs-parser": "^20.2.9" 1196 | }, 1197 | "engines": { 1198 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 1199 | }, 1200 | "funding": { 1201 | "url": "https://github.com/sponsors/sindresorhus" 1202 | } 1203 | }, 1204 | "node_modules/merge2": { 1205 | "version": "1.4.1", 1206 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 1207 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 1208 | "dev": true, 1209 | "engines": { 1210 | "node": ">= 8" 1211 | } 1212 | }, 1213 | "node_modules/micromatch": { 1214 | "version": "4.0.5", 1215 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", 1216 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 1217 | "dev": true, 1218 | "dependencies": { 1219 | "braces": "^3.0.2", 1220 | "picomatch": "^2.3.1" 1221 | }, 1222 | "engines": { 1223 | "node": ">=8.6" 1224 | } 1225 | }, 1226 | "node_modules/min-indent": { 1227 | "version": "1.0.1", 1228 | "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", 1229 | "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", 1230 | "dev": true, 1231 | "engines": { 1232 | "node": ">=4" 1233 | } 1234 | }, 1235 | "node_modules/minimatch": { 1236 | "version": "3.1.2", 1237 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1238 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1239 | "dev": true, 1240 | "dependencies": { 1241 | "brace-expansion": "^1.1.7" 1242 | }, 1243 | "engines": { 1244 | "node": "*" 1245 | } 1246 | }, 1247 | "node_modules/minimist-options": { 1248 | "version": "4.1.0", 1249 | "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", 1250 | "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", 1251 | "dev": true, 1252 | "dependencies": { 1253 | "arrify": "^1.0.1", 1254 | "is-plain-obj": "^1.1.0", 1255 | "kind-of": "^6.0.3" 1256 | }, 1257 | "engines": { 1258 | "node": ">= 6" 1259 | } 1260 | }, 1261 | "node_modules/nanoid": { 1262 | "version": "3.3.7", 1263 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", 1264 | "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", 1265 | "dev": true, 1266 | "funding": [ 1267 | { 1268 | "type": "github", 1269 | "url": "https://github.com/sponsors/ai" 1270 | } 1271 | ], 1272 | "bin": { 1273 | "nanoid": "bin/nanoid.cjs" 1274 | }, 1275 | "engines": { 1276 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 1277 | } 1278 | }, 1279 | "node_modules/normalize-package-data": { 1280 | "version": "3.0.3", 1281 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", 1282 | "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", 1283 | "dev": true, 1284 | "dependencies": { 1285 | "hosted-git-info": "^4.0.1", 1286 | "is-core-module": "^2.5.0", 1287 | "semver": "^7.3.4", 1288 | "validate-npm-package-license": "^3.0.1" 1289 | }, 1290 | "engines": { 1291 | "node": ">=10" 1292 | } 1293 | }, 1294 | "node_modules/normalize-path": { 1295 | "version": "3.0.0", 1296 | "resolved": "https://registry.npmmirror.com/normalize-path/download/normalize-path-3.0.0.tgz", 1297 | "integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=", 1298 | "engines": { 1299 | "node": ">=0.10.0" 1300 | } 1301 | }, 1302 | "node_modules/once": { 1303 | "version": "1.4.0", 1304 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1305 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1306 | "dev": true, 1307 | "dependencies": { 1308 | "wrappy": "1" 1309 | } 1310 | }, 1311 | "node_modules/p-limit": { 1312 | "version": "3.1.0", 1313 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 1314 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 1315 | "dev": true, 1316 | "dependencies": { 1317 | "yocto-queue": "^0.1.0" 1318 | }, 1319 | "engines": { 1320 | "node": ">=10" 1321 | }, 1322 | "funding": { 1323 | "url": "https://github.com/sponsors/sindresorhus" 1324 | } 1325 | }, 1326 | "node_modules/p-locate": { 1327 | "version": "5.0.0", 1328 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 1329 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 1330 | "dev": true, 1331 | "dependencies": { 1332 | "p-limit": "^3.0.2" 1333 | }, 1334 | "engines": { 1335 | "node": ">=10" 1336 | }, 1337 | "funding": { 1338 | "url": "https://github.com/sponsors/sindresorhus" 1339 | } 1340 | }, 1341 | "node_modules/p-map": { 1342 | "version": "5.5.0", 1343 | "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", 1344 | "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", 1345 | "dev": true, 1346 | "dependencies": { 1347 | "aggregate-error": "^4.0.0" 1348 | }, 1349 | "engines": { 1350 | "node": ">=12" 1351 | }, 1352 | "funding": { 1353 | "url": "https://github.com/sponsors/sindresorhus" 1354 | } 1355 | }, 1356 | "node_modules/parse-json": { 1357 | "version": "5.2.0", 1358 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", 1359 | "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", 1360 | "dev": true, 1361 | "dependencies": { 1362 | "@babel/code-frame": "^7.0.0", 1363 | "error-ex": "^1.3.1", 1364 | "json-parse-even-better-errors": "^2.3.0", 1365 | "lines-and-columns": "^1.1.6" 1366 | }, 1367 | "engines": { 1368 | "node": ">=8" 1369 | }, 1370 | "funding": { 1371 | "url": "https://github.com/sponsors/sindresorhus" 1372 | } 1373 | }, 1374 | "node_modules/path-exists": { 1375 | "version": "4.0.0", 1376 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 1377 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 1378 | "dev": true, 1379 | "engines": { 1380 | "node": ">=8" 1381 | } 1382 | }, 1383 | "node_modules/path-is-absolute": { 1384 | "version": "1.0.1", 1385 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1386 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 1387 | "dev": true, 1388 | "engines": { 1389 | "node": ">=0.10.0" 1390 | } 1391 | }, 1392 | "node_modules/path-parse": { 1393 | "version": "1.0.7", 1394 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1395 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 1396 | "dev": true 1397 | }, 1398 | "node_modules/path-type": { 1399 | "version": "4.0.0", 1400 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 1401 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", 1402 | "dev": true, 1403 | "engines": { 1404 | "node": ">=8" 1405 | } 1406 | }, 1407 | "node_modules/picocolors": { 1408 | "version": "1.0.0", 1409 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 1410 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 1411 | "dev": true 1412 | }, 1413 | "node_modules/picomatch": { 1414 | "version": "2.3.1", 1415 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1416 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1417 | "engines": { 1418 | "node": ">=8.6" 1419 | }, 1420 | "funding": { 1421 | "url": "https://github.com/sponsors/jonschlinkert" 1422 | } 1423 | }, 1424 | "node_modules/postcss": { 1425 | "version": "8.4.32", 1426 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", 1427 | "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", 1428 | "dev": true, 1429 | "funding": [ 1430 | { 1431 | "type": "opencollective", 1432 | "url": "https://opencollective.com/postcss/" 1433 | }, 1434 | { 1435 | "type": "tidelift", 1436 | "url": "https://tidelift.com/funding/github/npm/postcss" 1437 | }, 1438 | { 1439 | "type": "github", 1440 | "url": "https://github.com/sponsors/ai" 1441 | } 1442 | ], 1443 | "dependencies": { 1444 | "nanoid": "^3.3.7", 1445 | "picocolors": "^1.0.0", 1446 | "source-map-js": "^1.0.2" 1447 | }, 1448 | "engines": { 1449 | "node": "^10 || ^12 || >=14" 1450 | } 1451 | }, 1452 | "node_modules/queue-microtask": { 1453 | "version": "1.2.3", 1454 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 1455 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 1456 | "dev": true, 1457 | "funding": [ 1458 | { 1459 | "type": "github", 1460 | "url": "https://github.com/sponsors/feross" 1461 | }, 1462 | { 1463 | "type": "patreon", 1464 | "url": "https://www.patreon.com/feross" 1465 | }, 1466 | { 1467 | "type": "consulting", 1468 | "url": "https://feross.org/support" 1469 | } 1470 | ] 1471 | }, 1472 | "node_modules/quick-lru": { 1473 | "version": "5.1.1", 1474 | "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", 1475 | "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", 1476 | "dev": true, 1477 | "engines": { 1478 | "node": ">=10" 1479 | }, 1480 | "funding": { 1481 | "url": "https://github.com/sponsors/sindresorhus" 1482 | } 1483 | }, 1484 | "node_modules/read-pkg": { 1485 | "version": "6.0.0", 1486 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", 1487 | "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==", 1488 | "dev": true, 1489 | "dependencies": { 1490 | "@types/normalize-package-data": "^2.4.0", 1491 | "normalize-package-data": "^3.0.2", 1492 | "parse-json": "^5.2.0", 1493 | "type-fest": "^1.0.1" 1494 | }, 1495 | "engines": { 1496 | "node": ">=12" 1497 | }, 1498 | "funding": { 1499 | "url": "https://github.com/sponsors/sindresorhus" 1500 | } 1501 | }, 1502 | "node_modules/read-pkg-up": { 1503 | "version": "8.0.0", 1504 | "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz", 1505 | "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==", 1506 | "dev": true, 1507 | "dependencies": { 1508 | "find-up": "^5.0.0", 1509 | "read-pkg": "^6.0.0", 1510 | "type-fest": "^1.0.1" 1511 | }, 1512 | "engines": { 1513 | "node": ">=12" 1514 | }, 1515 | "funding": { 1516 | "url": "https://github.com/sponsors/sindresorhus" 1517 | } 1518 | }, 1519 | "node_modules/readdirp": { 1520 | "version": "3.6.0", 1521 | "resolved": "https://registry.npmmirror.com/readdirp/download/readdirp-3.6.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freaddirp%2Fdownload%2Freaddirp-3.6.0.tgz", 1522 | "integrity": "sha1-dKNwvYVxFuJFspzJc0DNQxoCpsc=", 1523 | "dependencies": { 1524 | "picomatch": "^2.2.1" 1525 | }, 1526 | "engines": { 1527 | "node": ">=8.10.0" 1528 | } 1529 | }, 1530 | "node_modules/redent": { 1531 | "version": "4.0.0", 1532 | "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", 1533 | "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==", 1534 | "dev": true, 1535 | "dependencies": { 1536 | "indent-string": "^5.0.0", 1537 | "strip-indent": "^4.0.0" 1538 | }, 1539 | "engines": { 1540 | "node": ">=12" 1541 | }, 1542 | "funding": { 1543 | "url": "https://github.com/sponsors/sindresorhus" 1544 | } 1545 | }, 1546 | "node_modules/resolve": { 1547 | "version": "1.22.8", 1548 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", 1549 | "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", 1550 | "dev": true, 1551 | "dependencies": { 1552 | "is-core-module": "^2.13.0", 1553 | "path-parse": "^1.0.7", 1554 | "supports-preserve-symlinks-flag": "^1.0.0" 1555 | }, 1556 | "bin": { 1557 | "resolve": "bin/resolve" 1558 | }, 1559 | "funding": { 1560 | "url": "https://github.com/sponsors/ljharb" 1561 | } 1562 | }, 1563 | "node_modules/reusify": { 1564 | "version": "1.0.4", 1565 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 1566 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 1567 | "dev": true, 1568 | "engines": { 1569 | "iojs": ">=1.0.0", 1570 | "node": ">=0.10.0" 1571 | } 1572 | }, 1573 | "node_modules/rimraf": { 1574 | "version": "3.0.2", 1575 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 1576 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 1577 | "dev": true, 1578 | "dependencies": { 1579 | "glob": "^7.1.3" 1580 | }, 1581 | "bin": { 1582 | "rimraf": "bin.js" 1583 | }, 1584 | "funding": { 1585 | "url": "https://github.com/sponsors/isaacs" 1586 | } 1587 | }, 1588 | "node_modules/rollup": { 1589 | "version": "2.77.3", 1590 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.77.3.tgz", 1591 | "integrity": "sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g==", 1592 | "dev": true, 1593 | "bin": { 1594 | "rollup": "dist/bin/rollup" 1595 | }, 1596 | "engines": { 1597 | "node": ">=10.0.0" 1598 | }, 1599 | "optionalDependencies": { 1600 | "fsevents": "~2.3.2" 1601 | } 1602 | }, 1603 | "node_modules/run-parallel": { 1604 | "version": "1.2.0", 1605 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 1606 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 1607 | "dev": true, 1608 | "funding": [ 1609 | { 1610 | "type": "github", 1611 | "url": "https://github.com/sponsors/feross" 1612 | }, 1613 | { 1614 | "type": "patreon", 1615 | "url": "https://www.patreon.com/feross" 1616 | }, 1617 | { 1618 | "type": "consulting", 1619 | "url": "https://feross.org/support" 1620 | } 1621 | ], 1622 | "dependencies": { 1623 | "queue-microtask": "^1.2.2" 1624 | } 1625 | }, 1626 | "node_modules/semver": { 1627 | "version": "7.5.4", 1628 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", 1629 | "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", 1630 | "dev": true, 1631 | "dependencies": { 1632 | "lru-cache": "^6.0.0" 1633 | }, 1634 | "bin": { 1635 | "semver": "bin/semver.js" 1636 | }, 1637 | "engines": { 1638 | "node": ">=10" 1639 | } 1640 | }, 1641 | "node_modules/slash": { 1642 | "version": "4.0.0", 1643 | "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", 1644 | "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", 1645 | "dev": true, 1646 | "engines": { 1647 | "node": ">=12" 1648 | }, 1649 | "funding": { 1650 | "url": "https://github.com/sponsors/sindresorhus" 1651 | } 1652 | }, 1653 | "node_modules/source-map-js": { 1654 | "version": "1.0.2", 1655 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 1656 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 1657 | "dev": true, 1658 | "engines": { 1659 | "node": ">=0.10.0" 1660 | } 1661 | }, 1662 | "node_modules/spdx-correct": { 1663 | "version": "3.2.0", 1664 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", 1665 | "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", 1666 | "dev": true, 1667 | "dependencies": { 1668 | "spdx-expression-parse": "^3.0.0", 1669 | "spdx-license-ids": "^3.0.0" 1670 | } 1671 | }, 1672 | "node_modules/spdx-exceptions": { 1673 | "version": "2.3.0", 1674 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", 1675 | "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", 1676 | "dev": true 1677 | }, 1678 | "node_modules/spdx-expression-parse": { 1679 | "version": "3.0.1", 1680 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", 1681 | "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", 1682 | "dev": true, 1683 | "dependencies": { 1684 | "spdx-exceptions": "^2.1.0", 1685 | "spdx-license-ids": "^3.0.0" 1686 | } 1687 | }, 1688 | "node_modules/spdx-license-ids": { 1689 | "version": "3.0.16", 1690 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", 1691 | "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", 1692 | "dev": true 1693 | }, 1694 | "node_modules/strip-indent": { 1695 | "version": "4.0.0", 1696 | "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", 1697 | "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==", 1698 | "dev": true, 1699 | "dependencies": { 1700 | "min-indent": "^1.0.1" 1701 | }, 1702 | "engines": { 1703 | "node": ">=12" 1704 | }, 1705 | "funding": { 1706 | "url": "https://github.com/sponsors/sindresorhus" 1707 | } 1708 | }, 1709 | "node_modules/supports-color": { 1710 | "version": "5.5.0", 1711 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1712 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1713 | "dev": true, 1714 | "dependencies": { 1715 | "has-flag": "^3.0.0" 1716 | }, 1717 | "engines": { 1718 | "node": ">=4" 1719 | } 1720 | }, 1721 | "node_modules/supports-preserve-symlinks-flag": { 1722 | "version": "1.0.0", 1723 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 1724 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 1725 | "dev": true, 1726 | "engines": { 1727 | "node": ">= 0.4" 1728 | }, 1729 | "funding": { 1730 | "url": "https://github.com/sponsors/ljharb" 1731 | } 1732 | }, 1733 | "node_modules/to-regex-range": { 1734 | "version": "5.0.1", 1735 | "resolved": "https://mirrors.cloud.tencent.com/npm/to-regex-range/-/to-regex-range-5.0.1.tgz", 1736 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1737 | "dependencies": { 1738 | "is-number": "^7.0.0" 1739 | }, 1740 | "engines": { 1741 | "node": ">=8.0" 1742 | } 1743 | }, 1744 | "node_modules/trim-newlines": { 1745 | "version": "4.1.1", 1746 | "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz", 1747 | "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==", 1748 | "dev": true, 1749 | "engines": { 1750 | "node": ">=12" 1751 | }, 1752 | "funding": { 1753 | "url": "https://github.com/sponsors/sindresorhus" 1754 | } 1755 | }, 1756 | "node_modules/type-fest": { 1757 | "version": "1.4.0", 1758 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", 1759 | "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", 1760 | "dev": true, 1761 | "engines": { 1762 | "node": ">=10" 1763 | }, 1764 | "funding": { 1765 | "url": "https://github.com/sponsors/sindresorhus" 1766 | } 1767 | }, 1768 | "node_modules/typescript": { 1769 | "version": "4.3.4", 1770 | "resolved": "https://registry.npmmirror.com/typescript/download/typescript-4.3.4.tgz?cache=0&sync_timestamp=1624519067446&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftypescript%2Fdownload%2Ftypescript-4.3.4.tgz", 1771 | "integrity": "sha1-P4W5hpRbzzEHHezdls+L+mX53Lw=", 1772 | "dev": true, 1773 | "bin": { 1774 | "tsc": "bin/tsc", 1775 | "tsserver": "bin/tsserver" 1776 | }, 1777 | "engines": { 1778 | "node": ">=4.2.0" 1779 | } 1780 | }, 1781 | "node_modules/validate-npm-package-license": { 1782 | "version": "3.0.4", 1783 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", 1784 | "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", 1785 | "dev": true, 1786 | "dependencies": { 1787 | "spdx-correct": "^3.0.0", 1788 | "spdx-expression-parse": "^3.0.0" 1789 | } 1790 | }, 1791 | "node_modules/vite": { 1792 | "version": "2.9.18", 1793 | "resolved": "https://mirrors.cloud.tencent.com/npm/vite/-/vite-2.9.18.tgz", 1794 | "integrity": "sha512-sAOqI5wNM9QvSEE70W3UGMdT8cyEn0+PmJMTFvTB8wB0YbYUWw3gUbY62AOyrXosGieF2htmeLATvNxpv/zNyQ==", 1795 | "dev": true, 1796 | "dependencies": { 1797 | "esbuild": "^0.14.27", 1798 | "postcss": "^8.4.13", 1799 | "resolve": "^1.22.0", 1800 | "rollup": ">=2.59.0 <2.78.0" 1801 | }, 1802 | "bin": { 1803 | "vite": "bin/vite.js" 1804 | }, 1805 | "engines": { 1806 | "node": ">=12.2.0" 1807 | }, 1808 | "optionalDependencies": { 1809 | "fsevents": "~2.3.2" 1810 | }, 1811 | "peerDependencies": { 1812 | "less": "*", 1813 | "sass": "*", 1814 | "stylus": "*" 1815 | }, 1816 | "peerDependenciesMeta": { 1817 | "less": { 1818 | "optional": true 1819 | }, 1820 | "sass": { 1821 | "optional": true 1822 | }, 1823 | "stylus": { 1824 | "optional": true 1825 | } 1826 | } 1827 | }, 1828 | "node_modules/wrappy": { 1829 | "version": "1.0.2", 1830 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1831 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 1832 | "dev": true 1833 | }, 1834 | "node_modules/yallist": { 1835 | "version": "4.0.0", 1836 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 1837 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 1838 | "dev": true 1839 | }, 1840 | "node_modules/yargs-parser": { 1841 | "version": "20.2.9", 1842 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", 1843 | "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", 1844 | "dev": true, 1845 | "engines": { 1846 | "node": ">=10" 1847 | } 1848 | }, 1849 | "node_modules/yocto-queue": { 1850 | "version": "0.1.0", 1851 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 1852 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 1853 | "dev": true, 1854 | "engines": { 1855 | "node": ">=10" 1856 | }, 1857 | "funding": { 1858 | "url": "https://github.com/sponsors/sindresorhus" 1859 | } 1860 | } 1861 | } 1862 | } 1863 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vite-plugin-mock-server", 3 | "version": "1.3.1", 4 | "description": "Vite mock server plugin", 5 | "main": "dist/index.js", 6 | "scripts": { 7 | "dev": "tsc -w -p .", 8 | "build": "del-cli dist && tsc -p ." 9 | }, 10 | "repository": { 11 | "type": "git", 12 | "url": "git+https://github.com/enjoycoding/vite-plugin-mock-server.git" 13 | }, 14 | "keywords": [ 15 | "vite", 16 | "mock", 17 | "hmr" 18 | ], 19 | "author": { 20 | "name": "Octoape", 21 | "email": "octoape@qq.com", 22 | "url": "https://github.com/octoape" 23 | }, 24 | "type": "module", 25 | "license": "MIT", 26 | "bugs": { 27 | "url": "https://github.com/enjoycoding/vite-plugin-mock-server/issues" 28 | }, 29 | "homepage": "https://github.com/enjoycoding/vite-plugin-mock-server#readme", 30 | "devDependencies": { 31 | "@types/node": "^15.12.4", 32 | "del-cli": "^5.1.0", 33 | "typescript": "^4.3.4", 34 | "vite": "^2.3.8" 35 | }, 36 | "dependencies": { 37 | "@howiefh/ant-path-matcher": "0.0.2", 38 | "chokidar": "^3.5.2" 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /publish.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | rem publish vite-plugin-mock-server to https://registry.npmjs.org/ 3 | 4 | set NPM_ARGS="--registry=https://registry.npmjs.org/" 5 | npm run build && npm login %NPM_ARGS% && npm publish %NPM_ARGS% -------------------------------------------------------------------------------- /publish.sh: -------------------------------------------------------------------------------- 1 | # publish vite-plugin-mock-server to https://registry.npmjs.org/ 2 | 3 | NPM_ARGS="--registry=https://registry.npmjs.org/" 4 | npm run build && npm login $NPM_ARGS && npm publish $NPM_ARGS -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { Plugin, ViteDevServer, Connect } from 'vite' 2 | import * as http from 'http' 3 | import AntPathMatcher from '@howiefh/ant-path-matcher' 4 | import chokidar from 'chokidar' 5 | import path from 'path' 6 | import fs from 'fs' 7 | import { build } from 'esbuild' 8 | 9 | const PLUGIN_NAME = 'vite-plugin-mock-server' 10 | const TEMPORARY_FILE_SUFFIX = '.tmp.cjs' 11 | let LOG_LEVEL = 'error' 12 | const requireCache = new Map() 13 | 14 | type Request = Connect.IncomingMessage & { 15 | body?: any, 16 | params?: { [key: string]: string }, 17 | query?: { [key: string]: string }, 18 | cookies?: { [key: string]: string }, 19 | session?: any 20 | } 21 | 22 | export type MockFunction = { 23 | ( 24 | req: Request, 25 | res: http.ServerResponse, 26 | /** @deprecated in 2.0, use req.params **/ 27 | urlVars?: { [key: string]: string } 28 | ): void 29 | } 30 | 31 | export type MockLayer = ( 32 | req: Request, 33 | res: http.ServerResponse, 34 | next: Connect.NextFunction 35 | ) => void; 36 | 37 | export type MockHandler = { 38 | pattern: string, 39 | method?: string, 40 | handle: MockFunction 41 | } 42 | 43 | export type MockOptions = { 44 | logLevel?: 'info' | 'error' | 'off' 45 | urlPrefixes?: string[] 46 | mockJsSuffix?: string 47 | mockTsSuffix?: string 48 | mockRootDir?: string 49 | mockModules?: string[] 50 | noHandlerResponse404?: boolean 51 | middlewares?: MockLayer[] 52 | printStartupLog?: boolean 53 | } 54 | 55 | export default (options?: MockOptions): Plugin => { 56 | 57 | return { 58 | name: PLUGIN_NAME, 59 | configureServer: async (server: ViteDevServer) => { 60 | // build url matcher 61 | const matcher = new AntPathMatcher() 62 | // init options 63 | options = options || {} 64 | options.logLevel = options.logLevel || 'error' 65 | options.urlPrefixes = options.urlPrefixes || ['/api/'] 66 | options.mockRootDir = options.mockRootDir || './mock' 67 | options.mockJsSuffix = options.mockJsSuffix || '.mock.js' 68 | options.mockTsSuffix = options.mockTsSuffix || '.mock.ts' 69 | console.log(typeof options.printStartupLog) 70 | options.noHandlerResponse404 = (typeof options.noHandlerResponse404 !== 'boolean') ? true : options.noHandlerResponse404 71 | options.printStartupLog = (typeof options.printStartupLog !== 'boolean') ? true : options.printStartupLog 72 | if (options.mockModules && options.mockModules.length > 0) { 73 | console.warn('[' + PLUGIN_NAME + '] mock modules will be set automatically, and the configuration will be ignored', options.mockModules) 74 | } 75 | options.mockModules = [] 76 | LOG_LEVEL = options.logLevel 77 | // watch mock files 78 | watchMockFiles(options).then(() => { 79 | if (options.printStartupLog) { 80 | console.log('[' + PLUGIN_NAME + '] mock server started. options =', options) 81 | } 82 | }) 83 | if (options.middlewares) { 84 | for (const [, layer] of options.middlewares.entries()) { 85 | server.middlewares.use((req, res, next) => { 86 | const hasMatch = options.urlPrefixes.some((prefix) => req.url.startsWith(prefix)) 87 | if (hasMatch) { 88 | layer(req, res, next) 89 | } else { 90 | next() 91 | } 92 | }); 93 | } 94 | } 95 | server.middlewares.use(( 96 | req: Connect.IncomingMessage, 97 | res: http.ServerResponse, 98 | next: Connect.NextFunction 99 | ) => { 100 | doHandle(options, matcher, req, res, next) 101 | }) 102 | } 103 | } 104 | } 105 | 106 | async function importCache(modName: string) { 107 | const mod = await import('file://' + modName) 108 | let module 109 | if (mod.default && mod.default.default) 110 | module = mod.default 111 | else 112 | module = mod 113 | 114 | requireCache.set(modName, module) 115 | return module 116 | } 117 | 118 | const doHandle = async ( 119 | options: MockOptions, 120 | matcher: AntPathMatcher, 121 | req: Request, 122 | res: http.ServerResponse, 123 | next: Connect.NextFunction 124 | ) => { 125 | for (const [, prefix] of options.urlPrefixes.entries()) { 126 | if (!req.url.startsWith(prefix)) continue 127 | for (const [, modName] of options.mockModules.entries()) { 128 | const module = requireCache.get(modName) 129 | 130 | if (!module) { 131 | continue 132 | } 133 | let handlers: MockHandler[] 134 | if (modName.endsWith(TEMPORARY_FILE_SUFFIX)) { 135 | const exports = module.default 136 | logInfo('typeof exports', typeof exports) 137 | if (typeof exports === 'function') { 138 | handlers = exports() 139 | } else { 140 | handlers = exports 141 | } 142 | } else { 143 | handlers = module.default 144 | } 145 | 146 | for (const [, handler] of handlers.entries()) { 147 | const [path, qs] = req.url.split('?') 148 | const pathVars: { [key: string]: string } = {}; 149 | let matched = matcher.doMatch(handler.pattern, path, true, pathVars) 150 | if (matched && handler.method) { 151 | matched = handler.method === req.method 152 | } 153 | 154 | if (matched) { 155 | logInfo('matched and call mock handler', handler, 'pathVars', pathVars) 156 | req.params = pathVars; 157 | req.query = parseQueryString(qs); 158 | handler.handle(req, res, { ...pathVars }) 159 | return 160 | } 161 | } 162 | } 163 | if (options.noHandlerResponse404) { 164 | res.statusCode = 404 165 | const { url, method } = req 166 | res.end('[' + PLUGIN_NAME + '] no handler found, { url: "' + url + '", method: "' + method + '" }') 167 | return 168 | } 169 | } 170 | next() 171 | } 172 | 173 | const watchMockFiles = async (options: MockOptions) => { 174 | const watchDir = path.resolve(process.cwd(), options.mockRootDir) 175 | logInfo('watched root dir is', watchDir) 176 | await loadMockModules(options, watchDir) 177 | chokidar.watch(watchDir, { 178 | ignoreInitial: true, 179 | }).on('all', async (event, path) => { 180 | if (path.endsWith(TEMPORARY_FILE_SUFFIX)) return 181 | logInfo('event', event, 'path', path) 182 | if (event === 'addDir') return 183 | if (event === 'unlinkDir') { 184 | for (const modName of [...requireCache.keys()]) { 185 | if (modName.startsWith(watchDir)) { 186 | await deleteMockModule(options, modName) 187 | } 188 | } 189 | await loadMockModules(options, watchDir) 190 | return 191 | } 192 | if (!path.endsWith(options.mockJsSuffix) && !path.endsWith(options.mockTsSuffix)) return 193 | if (event === 'add' || event === 'change') { 194 | await loadMockModule(options, path) 195 | } else if (event === 'unlink') { 196 | await deleteMockModule(options, path) 197 | } 198 | }) 199 | } 200 | 201 | const loadMockModules = async (options: MockOptions, watchDir: string) => { 202 | logInfo('recursive loading mock modules', watchDir) 203 | for (const [, name] of fs.readdirSync(watchDir).entries()) { 204 | const modName = path.join(watchDir, name) 205 | const stat = fs.statSync(modName) 206 | if (stat.isDirectory()) { 207 | loadMockModules(options, modName) 208 | continue 209 | } 210 | if (!stat.isFile()) return 211 | await loadMockModule(options, modName) 212 | } 213 | } 214 | 215 | const loadMockModule = async (options: MockOptions, moduleName: string) => { 216 | logInfo('loading mock module', moduleName) 217 | if (moduleName.endsWith(options.mockJsSuffix)) { 218 | await loadJsMockModule(options, moduleName) 219 | } else if (moduleName.endsWith(options.mockTsSuffix)) { 220 | await loadTsMockModule(options, moduleName) 221 | } 222 | } 223 | 224 | const loadJsMockModule = async (options: MockOptions, moduleName: string, skipCheck?: boolean) => { 225 | if (!skipCheck) { 226 | if (!moduleName.endsWith(options.mockJsSuffix)) return 227 | if (!fs.statSync(moduleName).isFile()) return 228 | } 229 | await deleteMockModule(options, moduleName) 230 | logInfo('loading js mock module', moduleName) 231 | const handlers = await importCache(moduleName) 232 | if (!moduleName.endsWith(TEMPORARY_FILE_SUFFIX)) { 233 | logInfo('loaded mock handlers', handlers) 234 | } 235 | if (typeof handlers.default === 'function') { 236 | logInfo('loaded mock handlers', handlers.default()) 237 | } else { 238 | logInfo('loaded mock handlers', handlers.default) 239 | } 240 | options.mockModules.push(moduleName) 241 | } 242 | 243 | const loadTsMockModule = async (options: MockOptions, moduleName: string) => { 244 | if (!moduleName.endsWith(options.mockTsSuffix)) return 245 | if (!fs.statSync(moduleName).isFile()) return 246 | logInfo('loading ts mock module', moduleName) 247 | const result = await build({ 248 | entryPoints: [moduleName], 249 | outfile: 'out.js', 250 | write: false, 251 | platform: 'node', 252 | bundle: true, 253 | format: 'cjs', 254 | metafile: true, 255 | target: 'es2015', 256 | }) 257 | const { text } = result.outputFiles[0] 258 | const modName = moduleName + TEMPORARY_FILE_SUFFIX 259 | fs.writeFileSync(modName, text) 260 | await loadJsMockModule(options, modName, true) 261 | fs.unlink(modName, (err) => { 262 | if (err) logErr('delete file ' + modName + ' error', err) 263 | }) 264 | } 265 | 266 | const deleteMockModule = async (options: MockOptions, moduleName: string) => { 267 | logInfo('delete module cache', moduleName) 268 | requireCache.delete(moduleName) 269 | for (const [i, modName] of options.mockModules.entries()) { 270 | if (modName === moduleName) { 271 | options.mockModules.splice(i, 1) 272 | } 273 | } 274 | } 275 | 276 | const logInfo = (...optionalParams: any[]) => { 277 | if (LOG_LEVEL !== 'info') return 278 | console.info('[vite-plugin-mock-server]', optionalParams) 279 | } 280 | 281 | const parseQueryString = (qs: string): { [key: string]: string } => !qs ? {} : decodeURI(qs) 282 | .split('&') 283 | .map(param => param.split('=')) 284 | .reduce((values: { [key: string]: string }, [key, value]) => { 285 | values[key] = value; 286 | return values; 287 | }, {}) 288 | 289 | const logErr = (...optionalParams: any[]) => { 290 | if (LOG_LEVEL === 'off') return 291 | console.error('[vite-plugin-mock-server]', optionalParams) 292 | } 293 | -------------------------------------------------------------------------------- /src/module.d.ts: -------------------------------------------------------------------------------- 1 | declare module '@howiefh/ant-path-matcher' { 2 | class AntPathMatcher { 3 | constructor() 4 | doMatch(pattern: string, path: string, fullMatch: boolean, pathVars?: { [key: string]: string }): boolean 5 | } 6 | 7 | export default AntPathMatcher 8 | } 9 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "esnext", 4 | "module": "esnext", 5 | "moduleResolution": "node", 6 | "strict": true, 7 | "sourceMap": true, 8 | "resolveJsonModule": true, 9 | "esModuleInterop": true, 10 | "strictNullChecks": false, 11 | "declaration": true, 12 | "noEmit": false, 13 | "lib": ["esnext", "dom"], 14 | "outDir": "dist" 15 | }, 16 | "include": ["src/**/*.ts"] 17 | } 18 | --------------------------------------------------------------------------------