Full Code of anncwb/vite-plugin-mock for AI

main ca2e9eabf170 cached
56 files
99.7 KB
35.1k tokens
29 symbols
1 requests
Download .txt
Repository: anncwb/vite-plugin-mock
Branch: main
Commit: ca2e9eabf170
Files: 56
Total size: 99.7 KB

Directory structure:
gitextract_g6l1iabh/

├── .editorconfig
├── .eslintignore
├── .eslintrc.js
├── .github/
│   ├── dependabot.yml
│   └── workflows/
│       ├── publish.yml
│       └── release.yml
├── .gitignore
├── .husky/
│   ├── .gitignore
│   ├── commit-msg
│   ├── common.sh
│   ├── lintstagedrc.js
│   └── pre-commit
├── .prettierignore
├── .vscode/
│   ├── extensions.json
│   └── settings.json
├── CHANGELOG.md
├── LICENSE
├── README.md
├── README.zh_CN.md
├── commitlint.config.js
├── package.json
├── packages/
│   ├── playground/
│   │   ├── js-example/
│   │   │   ├── .gitignore
│   │   │   ├── index.html
│   │   │   ├── mock/
│   │   │   │   ├── role.mjs
│   │   │   │   └── user.js
│   │   │   ├── package.json
│   │   │   ├── src/
│   │   │   │   ├── App.vue
│   │   │   │   ├── main.js
│   │   │   │   └── mockProdServer.js
│   │   │   └── vite.config.js
│   │   └── ts-example/
│   │       ├── .gitignore
│   │       ├── index.html
│   │       ├── mock/
│   │       │   ├── define.ts
│   │       │   ├── dep/
│   │       │   │   └── role.ts
│   │       │   └── user.ts
│   │       ├── package.json
│   │       ├── shim-vue.ts
│   │       ├── src/
│   │       │   ├── App.vue
│   │       │   ├── main.ts
│   │       │   └── mockProdServer.ts
│   │       ├── tsconfig.json
│   │       └── vite.config.ts
│   └── vite-plugin-mock/
│       ├── CHANGELOG.md
│       ├── build.config.ts
│       ├── package.json
│       ├── src/
│       │   ├── client.ts
│       │   ├── createMockServer.ts
│       │   ├── index.ts
│       │   ├── types.ts
│       │   └── utils.ts
│       └── tsconfig.json
├── pnpm-workspace.yaml
├── prettier.config.js
├── tests/
│   └── index.spec.ts
├── tsconfig.es.json
└── tsconfig.json

================================================
FILE CONTENTS
================================================

================================================
FILE: .editorconfig
================================================
root = true

[*]
charset = utf-8
end_of_line = lf
trim_trailing_whitespace = true
insert_final_newline = true

[*.md]
insert_final_newline = false
trim_trailing_whitespace = false

[*.{js,jsx,json,ts,tsx,yml}]
indent_size = 2
indent_style = space


================================================
FILE: .eslintignore
================================================
dist
node_modules
example


================================================
FILE: .eslintrc.js
================================================
module.exports = {
  root: true,
  env: {
    browser: true,
    es2021: true,
    es6: true,
    node: true,
  },
  extends: [
    'eslint:recommended',
    'plugin:@typescript-eslint/recommended',
    'prettier',
  ],
  parser: '@typescript-eslint/parser',
  parserOptions: {
    ecmaVersion: 12,
    sourceType: 'module',
  },
  plugins: ['@typescript-eslint'],
  rules: {
    'no-console': 'off',
    '@typescript-eslint/no-var-requires': 'off',
    '@typescript-eslint/no-non-null-assertion': 'off',
    '@typescript-eslint/ban-ts-comment': 'off',
    '@typescript-eslint/explicit-module-boundary-types': 'off',
    '@typescript-eslint/no-explicit-any': 'off',
    '@typescript-eslint/no-unused-vars': 'off',
  },
}


================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
  - package-ecosystem: 'yarn'
    directory: '/'
    schedule:
      interval: 'daily'


================================================
FILE: .github/workflows/publish.yml
================================================
name: Npm Publish

on:
  push:
    branches:
      - main

jobs:
  publish-npm:
    if: "contains(github.event.head_commit.message, 'release')"
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: use Node.js 20
        uses: actions/setup-node@v1
        with:
          registry-url: https://registry.npmjs.org/
          node-version: 20

      - name: pnpm install and publish
        run: |
          npm i -g pnpm
          pnpm install
          pnpm publish --filter=./packages/vite-plugin-mock

        env:
          NODE_AUTH_TOKEN: ${{secrets.npm_token}}


================================================
FILE: .github/workflows/release.yml
================================================
name: Create Release

on:
  push:
    tags:
      - v*

jobs:
  build:
    name: Create Release
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@master

      - name: Create Release for Tag
        id: release_tag
        uses: yyx990803/release-tag@master
        env:
          GITHUB_TOKEN: ${{ secrets.OPER_TOKEN }}
        with:
          tag_name: ${{ github.ref }}
          body: |
            Please refer to [CHANGELOG.md](https://github.com/anncwb/vite-plugin-mock/blob/main/CHANGELOG.md) for details.
      # - name: npm install and create changeLog
      #   run: |
      #     npm install
      #     npm run log


================================================
FILE: .gitignore
================================================
node_modules
.DS_Store
dist
es
.npmrc
.cache

test/upload-server/static

.local
# local env files
.env.local
.env.*.local

# Log files
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*

# Editor directories and files
.idea
# .vscode
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?

coverage


================================================
FILE: .husky/.gitignore
================================================
_


================================================
FILE: .husky/commit-msg
================================================
#!/bin/sh

# shellcheck source=./_/husky.sh
. "$(dirname "$0")/_/husky.sh"

npx --no-install commitlint --edit "$1"


================================================
FILE: .husky/common.sh
================================================
#!/bin/sh
command_exists () {
  command -v "$1" >/dev/null 2>&1
}

# Workaround for Windows 10, Git Bash and Yarn
if command_exists winpty && test -t 1; then
  exec < /dev/tty
fi


================================================
FILE: .husky/lintstagedrc.js
================================================
module.exports = {
  '*.{js,jsx,ts,tsx}': ['eslint --fix', 'prettier --write'],
  '{!(package)*.json,*.code-snippets,.!(browserslist)*rc}': ['prettier --write--parser json'],
  'package.json': ['prettier --write'],
  '*.md': ['prettier --write'],
}


================================================
FILE: .husky/pre-commit
================================================
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
. "$(dirname "$0")/common.sh"

[ -n "$CI" ] && exit 0

# Format and submit code according to lintstagedrc.js configuration
npm run lint:lint-staged


================================================
FILE: .prettierignore
================================================
dist/
node_modules


================================================
FILE: .vscode/extensions.json
================================================
{
  "recommendations": [
    "octref.vetur",
    "dbaeumer.vscode-eslint",
    "stylelint.vscode-stylelint",
    "esbenp.prettier-vscode",
    "mrmlnc.vscode-less",
    "lokalise.i18n-ally",
    "antfu.iconify",
    "mikestead.dotenv",
    "heybourn.headwind"
  ]
}


================================================
FILE: .vscode/settings.json
================================================
{
  "typescript.tsdk": "./node_modules/typescript/lib",
  "typescript.enablePromptUseWorkspaceTsdk": true,
  //===========================================
  //============= Editor ======================
  //===========================================
  "explorer.openEditors.visible": 0,
  "editor.tabSize": 2,
  "editor.defaultFormatter": "esbenp.prettier-vscode",
  "diffEditor.ignoreTrimWhitespace": false,
  //===========================================
  //============= Other =======================
  //===========================================
  "breadcrumbs.enabled": true,
  "open-in-browser.default": "chrome",
  //===========================================
  //============= files =======================
  //===========================================
  "files.eol": "\n",
  "search.exclude": {
    "**/node_modules": true,
    "**/*.log": true,
    "**/*.log*": true,
    "**/bower_components": true,
    "**/dist": true,
    "**/elehukouben": true,
    "**/.git": true,
    "**/.gitignore": true,
    "**/.svn": true,
    "**/.DS_Store": true,
    "**/.idea": true,
    "**/.vscode": false,
    "**/yarn.lock": true,
    "**/tmp": true,
    "out": true,
    "dist": true,
    "node_modules": true,
    "CHANGELOG.md": true,
    "examples": true,
    "res": true,
    "screenshots": true,
    "yarn-error.log": true,
    "**/.yarn": true
  },
  "files.exclude": {
    "**/.cache": true,
    "**/.editorconfig": true,
    "**/.eslintcache": true,
    "**/bower_components": true,
    "**/.idea": true,
    "**/tmp": true,
    "**/.git": true,
    "**/.svn": true,
    "**/.hg": true,
    "**/CVS": true,
    "**/.DS_Store": true
  },
  "files.watcherExclude": {
    "**/.git/objects/**": true,
    "**/.git/subtree-cache/**": true,
    "**/.vscode/**": true,
    "**/node_modules/**": true,
    "**/tmp/**": true,
    "**/bower_components/**": true,
    "**/dist/**": true,
    "**/yarn.lock": true
  },
  "stylelint.enable": true,
  "stylelint.packageManager": "yarn",
  "liveServer.settings.donotShowInfoMsg": true,
  "telemetry.enableCrashReporter": false,
  "workbench.settings.enableNaturalLanguageSearch": false,
  "path-intellisense.mappings": {
    "/@/": "${workspaceRoot}/src"
  },
  "prettier.requireConfig": true,
  "typescript.updateImportsOnFileMove.enabled": "always",
  "workbench.sideBar.location": "left",
  "[javascriptreact]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },
  "[typescript]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },
  "[typescriptreact]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },
  "[html]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },
  "[css]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },
  "[less]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },
  "[scss]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },
  "[markdown]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },
  "editor.codeActionsOnSave": {
    "source.fixAll.eslint": true
  },
  "[vue]": {
    "editor.codeActionsOnSave": {
      "source.fixAll.eslint": false
    }
  },
  "i18n-ally.localesPaths": ["src/locales/lang"],
  "i18n-ally.keystyle": "nested",
  "i18n-ally.sortKeys": true,
  "i18n-ally.namespace": true,
  "i18n-ally.pathMatcher": "{locale}/{namespaces}.{ext}",
  "i18n-ally.enabledParsers": ["ts"],
  "i18n-ally.sourceLanguage": "en",
  "i18n-ally.displayLanguage": "zh-CN",
  "i18n-ally.enabledFrameworks": ["vue", "react"],
  "cSpell.words": [
    "vben",
    "windi",
    "browserslist",
    "tailwindcss",
    "esnext",
    "antv",
    "tinymce",
    "qrcode",
    "sider",
    "pinia",
    "sider",
    "nprogress",
    "INTLIFY",
    "stylelint",
    "esno",
    "vitejs",
    "sortablejs",
    "mockjs",
    "codemirror",
    "iconify",
    "commitlint",
    "vditor",
    "echarts",
    "cropperjs",
    "logicflow",
    "vueuse",
    "zxcvbn",
    "lintstagedrc",
    "brotli",
    "tailwindcss",
    "sider"
  ]
}


================================================
FILE: CHANGELOG.md
================================================
## [3.0.0]

### Breaking Change

- Remove the `localEnabled` and `prodEnabled` configuration and use the `enable` configuration instead, no longer distinguishing the environment
- Remove the `injectFile`、`injectCode` and `supportTs` configuration
- Minimum requirement NodeJs 16
- Production Environment Syntax Changes

```ts
// vite-plugin-mock/es/createProdMockServer => vite-plugin-mock/client
import { createProdMockServer } from 'vite-plugin-mock/client'
import roleMock from '../mock/dep/role'
// functional form
import userMockFn from '../mock/user'

export async function setupProdMockServer() {
  const mockModules = [...roleMock, ...userMockFn()]
  createProdMockServer(mockModules)
}
```

### Features

- Upgrade all dependencies to latest
- support `vite4` and `rollup3`
- The function module supports returning a function

```ts
import type { MockConfig } from 'vite-plugin-mock'

export default (config?: MockConfig) => {
  return [
    {
      url: '/api/createUser',
      method: 'post',
      response: ({ body, query }) => {
        console.log('body>>>>>>>>', body)
        console.log('query>>>>>>>>', query)

        return {
          code: 0,
          message: 'ok',
          data: { a: 21, 'import.meta.url': import.meta.url },
        }
      },
    },
  ]
}
```

## [2.9.8](https://github.com/vbenjs/vite-plugin-mock/compare/v2.9.0...v2.9.8) (2023-04-17)

### Bug Fixes

- can't update in real time, fix [#40](https://github.com/vbenjs/vite-plugin-mock/issues/40) ([f25c6ac](https://github.com/vbenjs/vite-plugin-mock/commit/f25c6ac8544991457368746bf6ec5fdfd8b4e083))
- error handle, fix [#39](https://github.com/vbenjs/vite-plugin-mock/issues/39) ([874318c](https://github.com/vbenjs/vite-plugin-mock/commit/874318ce399dc78c33d91161b73e3ced7bb6e9b6))
- fix js parsing error ([1dbee45](https://github.com/vbenjs/vite-plugin-mock/commit/1dbee452ec7d90b07ac86ce8530430e864589ab5))
- fix node version ([#38](https://github.com/vbenjs/vite-plugin-mock/issues/38)) ([f91dea1](https://github.com/vbenjs/vite-plugin-mock/commit/f91dea1be943aa1145727bfecd273ef45cdff8e9))
- inappropriate type annotation ([#90](https://github.com/vbenjs/vite-plugin-mock/issues/90)) ([a3fc4aa](https://github.com/vbenjs/vite-plugin-mock/commit/a3fc4aab3dd1864f640918516c10d7d1530f5d90))
- typo, close [#42](https://github.com/vbenjs/vite-plugin-mock/issues/42) ([5b4e946](https://github.com/vbenjs/vite-plugin-mock/commit/5b4e9469060109a2a28c079eec8384fe654be68e))

### Features

- **prod:** response 在 prod 模式下入参对象加上 url ([#83](https://github.com/vbenjs/vite-plugin-mock/issues/83)) ([cd0b86f](https://github.com/vbenjs/vite-plugin-mock/commit/cd0b86fce20228094cf18be14194498a2cbd490e))
- **server:** add this for response, rawResponse function ([#43](https://github.com/vbenjs/vite-plugin-mock/issues/43)) ([2f4d6d2](https://github.com/vbenjs/vite-plugin-mock/commit/2f4d6d2984c7fe15236cb8b0d2ec5479930d5668))

## [2.9.8](https://github.com/anncwb/vite-plugin-mock/compare/v2.9.0...v2.9.8) (2023-04-16)

### Bug Fixes

- can't update in real time, fix [#40](https://github.com/anncwb/vite-plugin-mock/issues/40) ([f25c6ac](https://github.com/anncwb/vite-plugin-mock/commit/f25c6ac8544991457368746bf6ec5fdfd8b4e083))
- error handle, fix [#39](https://github.com/anncwb/vite-plugin-mock/issues/39) ([874318c](https://github.com/anncwb/vite-plugin-mock/commit/874318ce399dc78c33d91161b73e3ced7bb6e9b6))
- fix js parsing error ([1dbee45](https://github.com/anncwb/vite-plugin-mock/commit/1dbee452ec7d90b07ac86ce8530430e864589ab5))
- fix node version ([#38](https://github.com/anncwb/vite-plugin-mock/issues/38)) ([f91dea1](https://github.com/anncwb/vite-plugin-mock/commit/f91dea1be943aa1145727bfecd273ef45cdff8e9))
- inappropriate type annotation ([#90](https://github.com/anncwb/vite-plugin-mock/issues/90)) ([a3fc4aa](https://github.com/anncwb/vite-plugin-mock/commit/a3fc4aab3dd1864f640918516c10d7d1530f5d90))
- typo, close [#42](https://github.com/anncwb/vite-plugin-mock/issues/42) ([5b4e946](https://github.com/anncwb/vite-plugin-mock/commit/5b4e9469060109a2a28c079eec8384fe654be68e))

### Features

- **prod:** response 在 prod 模式下入参对象加上 url ([#83](https://github.com/anncwb/vite-plugin-mock/issues/83)) ([cd0b86f](https://github.com/anncwb/vite-plugin-mock/commit/cd0b86fce20228094cf18be14194498a2cbd490e))
- **server:** add this for response, rawResponse function ([#43](https://github.com/anncwb/vite-plugin-mock/issues/43)) ([2f4d6d2](https://github.com/anncwb/vite-plugin-mock/commit/2f4d6d2984c7fe15236cb8b0d2ec5479930d5668))

## [2.9.6](https://github.com/anncwb/vite-plugin-mock/compare/v2.5.0...v2.9.6) (2021-08-23)

### Bug Fixes

- can't update in real time, fix [#40](https://github.com/anncwb/vite-plugin-mock/issues/40) ([f25c6ac](https://github.com/anncwb/vite-plugin-mock/commit/f25c6ac8544991457368746bf6ec5fdfd8b4e083))
- ensure that the post with parameters are matched,fix [#29](https://github.com/anncwb/vite-plugin-mock/issues/29) ([4cb55f8](https://github.com/anncwb/vite-plugin-mock/commit/4cb55f87def1e3edf07937ce48b0cfc594f2b88d))
- error handle, fix [#39](https://github.com/anncwb/vite-plugin-mock/issues/39) ([874318c](https://github.com/anncwb/vite-plugin-mock/commit/874318ce399dc78c33d91161b73e3ced7bb6e9b6))
- fix js parsing error ([1dbee45](https://github.com/anncwb/vite-plugin-mock/commit/1dbee452ec7d90b07ac86ce8530430e864589ab5))
- fix node version ([#38](https://github.com/anncwb/vite-plugin-mock/issues/38)) ([f91dea1](https://github.com/anncwb/vite-plugin-mock/commit/f91dea1be943aa1145727bfecd273ef45cdff8e9))
- improve path matching logic, fix [#25](https://github.com/anncwb/vite-plugin-mock/issues/25) ([5079e4b](https://github.com/anncwb/vite-plugin-mock/commit/5079e4ba1c713aaba2facc87dfb289ea0916c231))
- loss request headers in PROD mode ([#23](https://github.com/anncwb/vite-plugin-mock/issues/23)) ([76302df](https://github.com/anncwb/vite-plugin-mock/commit/76302df9cc5a23fe0ccd001787bffbb4c012cc83)), closes [#15](https://github.com/anncwb/vite-plugin-mock/issues/15)
- make sure ignore matches the file correctly ([b612a09](https://github.com/anncwb/vite-plugin-mock/commit/b612a0934b7dcaae423450a56139cc9b9749c43e))
- support node12 ([fdfed60](https://github.com/anncwb/vite-plugin-mock/commit/fdfed60b6d8859bdcf8292c30859101f47d758b5))
- typo, close [#42](https://github.com/anncwb/vite-plugin-mock/issues/42) ([5b4e946](https://github.com/anncwb/vite-plugin-mock/commit/5b4e9469060109a2a28c079eec8384fe654be68e))

### Features

- remove supportTs, change to automatic judgment ([4625e59](https://github.com/anncwb/vite-plugin-mock/commit/4625e59429b4fc06ff4f911d681ee4999661c3ec))
- response return url ([#27](https://github.com/anncwb/vite-plugin-mock/issues/27)) ([de9ed27](https://github.com/anncwb/vite-plugin-mock/commit/de9ed276b61c18cdfe0509df21921bc3ddf9d767))
- **server:** add this for response, rawResponse function ([#43](https://github.com/anncwb/vite-plugin-mock/issues/43)) ([2f4d6d2](https://github.com/anncwb/vite-plugin-mock/commit/2f4d6d2984c7fe15236cb8b0d2ec5479930d5668))

### Reverts

- revert 2.5.0, fix [#22](https://github.com/anncwb/vite-plugin-mock/issues/22) ([d5ac0d6](https://github.com/anncwb/vite-plugin-mock/commit/d5ac0d68a67f4e4cc568ef1eff12f2ba425553e8))

## [2.9.5](https://github.com/anncwb/vite-plugin-mock/compare/v2.5.0...v2.9.5) (2021-08-23)

### Bug Fixes

- can't update in real time, fix [#40](https://github.com/anncwb/vite-plugin-mock/issues/40) ([f25c6ac](https://github.com/anncwb/vite-plugin-mock/commit/f25c6ac8544991457368746bf6ec5fdfd8b4e083))
- ensure that the post with parameters are matched,fix [#29](https://github.com/anncwb/vite-plugin-mock/issues/29) ([4cb55f8](https://github.com/anncwb/vite-plugin-mock/commit/4cb55f87def1e3edf07937ce48b0cfc594f2b88d))
- error handle, fix [#39](https://github.com/anncwb/vite-plugin-mock/issues/39) ([874318c](https://github.com/anncwb/vite-plugin-mock/commit/874318ce399dc78c33d91161b73e3ced7bb6e9b6))
- fix js parsing error ([1dbee45](https://github.com/anncwb/vite-plugin-mock/commit/1dbee452ec7d90b07ac86ce8530430e864589ab5))
- fix node version ([#38](https://github.com/anncwb/vite-plugin-mock/issues/38)) ([f91dea1](https://github.com/anncwb/vite-plugin-mock/commit/f91dea1be943aa1145727bfecd273ef45cdff8e9))
- improve path matching logic, fix [#25](https://github.com/anncwb/vite-plugin-mock/issues/25) ([5079e4b](https://github.com/anncwb/vite-plugin-mock/commit/5079e4ba1c713aaba2facc87dfb289ea0916c231))
- loss request headers in PROD mode ([#23](https://github.com/anncwb/vite-plugin-mock/issues/23)) ([76302df](https://github.com/anncwb/vite-plugin-mock/commit/76302df9cc5a23fe0ccd001787bffbb4c012cc83)), closes [#15](https://github.com/anncwb/vite-plugin-mock/issues/15)
- make sure ignore matches the file correctly ([b612a09](https://github.com/anncwb/vite-plugin-mock/commit/b612a0934b7dcaae423450a56139cc9b9749c43e))
- support node12 ([fdfed60](https://github.com/anncwb/vite-plugin-mock/commit/fdfed60b6d8859bdcf8292c30859101f47d758b5))

### Features

- remove supportTs, change to automatic judgment ([4625e59](https://github.com/anncwb/vite-plugin-mock/commit/4625e59429b4fc06ff4f911d681ee4999661c3ec))
- response return url ([#27](https://github.com/anncwb/vite-plugin-mock/issues/27)) ([de9ed27](https://github.com/anncwb/vite-plugin-mock/commit/de9ed276b61c18cdfe0509df21921bc3ddf9d767))
- **server:** add this for response, rawResponse function ([#43](https://github.com/anncwb/vite-plugin-mock/issues/43)) ([2f4d6d2](https://github.com/anncwb/vite-plugin-mock/commit/2f4d6d2984c7fe15236cb8b0d2ec5479930d5668))

### Reverts

- revert 2.5.0, fix [#22](https://github.com/anncwb/vite-plugin-mock/issues/22) ([d5ac0d6](https://github.com/anncwb/vite-plugin-mock/commit/d5ac0d68a67f4e4cc568ef1eff12f2ba425553e8))

## [2.9.4](https://github.com/anncwb/vite-plugin-mock/compare/v2.9.0...v2.9.4) (2021-08-01)

### Bug Fixes

- can't update in real time, fix [#40](https://github.com/anncwb/vite-plugin-mock/issues/40) ([f25c6ac](https://github.com/anncwb/vite-plugin-mock/commit/f25c6ac8544991457368746bf6ec5fdfd8b4e083))
- error handle, fix [#39](https://github.com/anncwb/vite-plugin-mock/issues/39) ([874318c](https://github.com/anncwb/vite-plugin-mock/commit/874318ce399dc78c33d91161b73e3ced7bb6e9b6))
- fix js parsing error ([1dbee45](https://github.com/anncwb/vite-plugin-mock/commit/1dbee452ec7d90b07ac86ce8530430e864589ab5))
- fix node version ([#38](https://github.com/anncwb/vite-plugin-mock/issues/38)) ([f91dea1](https://github.com/anncwb/vite-plugin-mock/commit/f91dea1be943aa1145727bfecd273ef45cdff8e9))

## [2.9.3](https://github.com/anncwb/vite-plugin-mock/compare/v2.5.0...v2.9.3) (2021-07-18)

### Bug Fixes

- ensure that the post with parameters are matched,fix [#29](https://github.com/anncwb/vite-plugin-mock/issues/29) ([4cb55f8](https://github.com/anncwb/vite-plugin-mock/commit/4cb55f87def1e3edf07937ce48b0cfc594f2b88d))
- fix js parsing error ([1dbee45](https://github.com/anncwb/vite-plugin-mock/commit/1dbee452ec7d90b07ac86ce8530430e864589ab5))
- improve path matching logic, fix [#25](https://github.com/anncwb/vite-plugin-mock/issues/25) ([5079e4b](https://github.com/anncwb/vite-plugin-mock/commit/5079e4ba1c713aaba2facc87dfb289ea0916c231))
- loss request headers in PROD mode ([#23](https://github.com/anncwb/vite-plugin-mock/issues/23)) ([76302df](https://github.com/anncwb/vite-plugin-mock/commit/76302df9cc5a23fe0ccd001787bffbb4c012cc83)), closes [#15](https://github.com/anncwb/vite-plugin-mock/issues/15)
- make sure ignore matches the file correctly ([b612a09](https://github.com/anncwb/vite-plugin-mock/commit/b612a0934b7dcaae423450a56139cc9b9749c43e))
- support node12 ([fdfed60](https://github.com/anncwb/vite-plugin-mock/commit/fdfed60b6d8859bdcf8292c30859101f47d758b5))

### Features

- remove supportTs, change to automatic judgment ([4625e59](https://github.com/anncwb/vite-plugin-mock/commit/4625e59429b4fc06ff4f911d681ee4999661c3ec))
- response return url ([#27](https://github.com/anncwb/vite-plugin-mock/issues/27)) ([de9ed27](https://github.com/anncwb/vite-plugin-mock/commit/de9ed276b61c18cdfe0509df21921bc3ddf9d767))

### Reverts

- revert 2.5.0, fix [#22](https://github.com/anncwb/vite-plugin-mock/issues/22) ([d5ac0d6](https://github.com/anncwb/vite-plugin-mock/commit/d5ac0d68a67f4e4cc568ef1eff12f2ba425553e8))

## [2.9.2](https://github.com/anncwb/vite-plugin-mock/compare/v2.5.0...v2.9.2) (2021-07-18)

### Bug Fixes

- ensure file changes take effect,fix [#36](https://github.com/anncwb/vite-plugin-mock/issues/36) ([353aa9d](https://github.com/anncwb/vite-plugin-mock/commit/353aa9db67483072a3d60b6bf3c99736563bba43))
- ensure that the post with parameters are matched,fix [#29](https://github.com/anncwb/vite-plugin-mock/issues/29) ([4cb55f8](https://github.com/anncwb/vite-plugin-mock/commit/4cb55f87def1e3edf07937ce48b0cfc594f2b88d))
- fix js parsing error ([1dbee45](https://github.com/anncwb/vite-plugin-mock/commit/1dbee452ec7d90b07ac86ce8530430e864589ab5))
- improve path matching logic, fix [#25](https://github.com/anncwb/vite-plugin-mock/issues/25) ([5079e4b](https://github.com/anncwb/vite-plugin-mock/commit/5079e4ba1c713aaba2facc87dfb289ea0916c231))
- loss request headers in PROD mode ([#23](https://github.com/anncwb/vite-plugin-mock/issues/23)) ([76302df](https://github.com/anncwb/vite-plugin-mock/commit/76302df9cc5a23fe0ccd001787bffbb4c012cc83)), closes [#15](https://github.com/anncwb/vite-plugin-mock/issues/15)
- make sure ignore matches the file correctly ([b612a09](https://github.com/anncwb/vite-plugin-mock/commit/b612a0934b7dcaae423450a56139cc9b9749c43e))
- support node12 ([fdfed60](https://github.com/anncwb/vite-plugin-mock/commit/fdfed60b6d8859bdcf8292c30859101f47d758b5))

### Features

- remove supportTs, change to automatic judgment ([4625e59](https://github.com/anncwb/vite-plugin-mock/commit/4625e59429b4fc06ff4f911d681ee4999661c3ec))
- response return url ([#27](https://github.com/anncwb/vite-plugin-mock/issues/27)) ([de9ed27](https://github.com/anncwb/vite-plugin-mock/commit/de9ed276b61c18cdfe0509df21921bc3ddf9d767))

### Reverts

- revert 2.5.0, fix [#22](https://github.com/anncwb/vite-plugin-mock/issues/22) ([d5ac0d6](https://github.com/anncwb/vite-plugin-mock/commit/d5ac0d68a67f4e4cc568ef1eff12f2ba425553e8))

## [2.9.1](https://github.com/anncwb/vite-plugin-mock/compare/v2.5.0...v2.9.1) (2021-07-06)

### Bug Fixes

- ensure that the post with parameters are matched,fix [#29](https://github.com/anncwb/vite-plugin-mock/issues/29) ([4cb55f8](https://github.com/anncwb/vite-plugin-mock/commit/4cb55f87def1e3edf07937ce48b0cfc594f2b88d))
- fix js parsing error ([d2746b6](https://github.com/anncwb/vite-plugin-mock/commit/d2746b6d788cdd304cac8512afa743b01edbd479))
- improve path matching logic, fix [#25](https://github.com/anncwb/vite-plugin-mock/issues/25) ([5079e4b](https://github.com/anncwb/vite-plugin-mock/commit/5079e4ba1c713aaba2facc87dfb289ea0916c231))
- loss request headers in PROD mode ([#23](https://github.com/anncwb/vite-plugin-mock/issues/23)) ([76302df](https://github.com/anncwb/vite-plugin-mock/commit/76302df9cc5a23fe0ccd001787bffbb4c012cc83)), closes [#15](https://github.com/anncwb/vite-plugin-mock/issues/15)
- make sure ignore matches the file correctly ([b612a09](https://github.com/anncwb/vite-plugin-mock/commit/b612a0934b7dcaae423450a56139cc9b9749c43e))
- support node12 ([fdfed60](https://github.com/anncwb/vite-plugin-mock/commit/fdfed60b6d8859bdcf8292c30859101f47d758b5))

### Features

- remove supportTs, change to automatic judgment ([4625e59](https://github.com/anncwb/vite-plugin-mock/commit/4625e59429b4fc06ff4f911d681ee4999661c3ec))
- response return url ([#27](https://github.com/anncwb/vite-plugin-mock/issues/27)) ([de9ed27](https://github.com/anncwb/vite-plugin-mock/commit/de9ed276b61c18cdfe0509df21921bc3ddf9d767))

### Reverts

- revert 2.5.0, fix [#22](https://github.com/anncwb/vite-plugin-mock/issues/22) ([d5ac0d6](https://github.com/anncwb/vite-plugin-mock/commit/d5ac0d68a67f4e4cc568ef1eff12f2ba425553e8))

# [2.9.0](https://github.com/anncwb/vite-plugin-mock/compare/v2.5.0...v2.9.0) (2021-07-05)

### Bug Fixes

- ensure that the post with parameters are matched,fix [#29](https://github.com/anncwb/vite-plugin-mock/issues/29) ([4cb55f8](https://github.com/anncwb/vite-plugin-mock/commit/4cb55f87def1e3edf07937ce48b0cfc594f2b88d))
- improve path matching logic, fix [#25](https://github.com/anncwb/vite-plugin-mock/issues/25) ([5079e4b](https://github.com/anncwb/vite-plugin-mock/commit/5079e4ba1c713aaba2facc87dfb289ea0916c231))
- loss request headers in PROD mode ([#23](https://github.com/anncwb/vite-plugin-mock/issues/23)) ([76302df](https://github.com/anncwb/vite-plugin-mock/commit/76302df9cc5a23fe0ccd001787bffbb4c012cc83)), closes [#15](https://github.com/anncwb/vite-plugin-mock/issues/15)
- make sure ignore matches the file correctly ([b612a09](https://github.com/anncwb/vite-plugin-mock/commit/b612a0934b7dcaae423450a56139cc9b9749c43e))
- support node12 ([fdfed60](https://github.com/anncwb/vite-plugin-mock/commit/fdfed60b6d8859bdcf8292c30859101f47d758b5))

### Features

- remove supportTs, change to automatic judgment ([4625e59](https://github.com/anncwb/vite-plugin-mock/commit/4625e59429b4fc06ff4f911d681ee4999661c3ec))
- response return url ([#27](https://github.com/anncwb/vite-plugin-mock/issues/27)) ([de9ed27](https://github.com/anncwb/vite-plugin-mock/commit/de9ed276b61c18cdfe0509df21921bc3ddf9d767))

### Reverts

- revert 2.5.0, fix [#22](https://github.com/anncwb/vite-plugin-mock/issues/22) ([d5ac0d6](https://github.com/anncwb/vite-plugin-mock/commit/d5ac0d68a67f4e4cc568ef1eff12f2ba425553e8))

# [2.8.0](https://github.com/anncwb/vite-plugin-mock/compare/v2.5.0...v2.8.0) (2021-06-16)

### Bug Fixes

- ensure that the post with parameters are matched,fix [#29](https://github.com/anncwb/vite-plugin-mock/issues/29) ([bfed256](https://github.com/anncwb/vite-plugin-mock/commit/bfed256bff42e2348b30a6b31746854b18fc90b8))
- improve path matching logic, fix [#25](https://github.com/anncwb/vite-plugin-mock/issues/25) ([5079e4b](https://github.com/anncwb/vite-plugin-mock/commit/5079e4ba1c713aaba2facc87dfb289ea0916c231))
- loss request headers in PROD mode ([#23](https://github.com/anncwb/vite-plugin-mock/issues/23)) ([76302df](https://github.com/anncwb/vite-plugin-mock/commit/76302df9cc5a23fe0ccd001787bffbb4c012cc83)), closes [#15](https://github.com/anncwb/vite-plugin-mock/issues/15)
- make sure ignore matches the file correctly ([b612a09](https://github.com/anncwb/vite-plugin-mock/commit/b612a0934b7dcaae423450a56139cc9b9749c43e))
- support node12 ([fdfed60](https://github.com/anncwb/vite-plugin-mock/commit/fdfed60b6d8859bdcf8292c30859101f47d758b5))

### Features

- remove supportTs, change to automatic judgment ([a341c7d](https://github.com/anncwb/vite-plugin-mock/commit/a341c7d5b2de153593c0d1f5dab00b1b730a6819))
- response return url ([#27](https://github.com/anncwb/vite-plugin-mock/issues/27)) ([de9ed27](https://github.com/anncwb/vite-plugin-mock/commit/de9ed276b61c18cdfe0509df21921bc3ddf9d767))

### Reverts

- revert 2.5.0, fix [#22](https://github.com/anncwb/vite-plugin-mock/issues/22) ([d5ac0d6](https://github.com/anncwb/vite-plugin-mock/commit/d5ac0d68a67f4e4cc568ef1eff12f2ba425553e8))

## [2.7.2](https://github.com/anncwb/vite-plugin-mock/compare/v2.5.0...v2.7.2) (2021-06-10)

### Bug Fixes

- improve path matching logic, fix [#25](https://github.com/anncwb/vite-plugin-mock/issues/25) ([5079e4b](https://github.com/anncwb/vite-plugin-mock/commit/5079e4ba1c713aaba2facc87dfb289ea0916c231))
- loss request headers in PROD mode ([#23](https://github.com/anncwb/vite-plugin-mock/issues/23)) ([76302df](https://github.com/anncwb/vite-plugin-mock/commit/76302df9cc5a23fe0ccd001787bffbb4c012cc83)), closes [#15](https://github.com/anncwb/vite-plugin-mock/issues/15)
- make sure ignore matches the file correctly ([b612a09](https://github.com/anncwb/vite-plugin-mock/commit/b612a0934b7dcaae423450a56139cc9b9749c43e))
- support node12 ([fdfed60](https://github.com/anncwb/vite-plugin-mock/commit/fdfed60b6d8859bdcf8292c30859101f47d758b5))

### Features

- response return url ([#27](https://github.com/anncwb/vite-plugin-mock/issues/27)) ([de9ed27](https://github.com/anncwb/vite-plugin-mock/commit/de9ed276b61c18cdfe0509df21921bc3ddf9d767))

### Reverts

- revert 2.5.0, fix [#22](https://github.com/anncwb/vite-plugin-mock/issues/22) ([d5ac0d6](https://github.com/anncwb/vite-plugin-mock/commit/d5ac0d68a67f4e4cc568ef1eff12f2ba425553e8))

## [2.7.1](https://github.com/anncwb/vite-plugin-mock/compare/v2.5.0...v2.7.1) (2021-06-09)

### Bug Fixes

- improve path matching logic, fix [#25](https://github.com/anncwb/vite-plugin-mock/issues/25) ([5079e4b](https://github.com/anncwb/vite-plugin-mock/commit/5079e4ba1c713aaba2facc87dfb289ea0916c231))
- loss request headers in PROD mode ([#23](https://github.com/anncwb/vite-plugin-mock/issues/23)) ([76302df](https://github.com/anncwb/vite-plugin-mock/commit/76302df9cc5a23fe0ccd001787bffbb4c012cc83)), closes [#15](https://github.com/anncwb/vite-plugin-mock/issues/15)
- support node12 ([fdfed60](https://github.com/anncwb/vite-plugin-mock/commit/fdfed60b6d8859bdcf8292c30859101f47d758b5))

### Features

- response return url ([#27](https://github.com/anncwb/vite-plugin-mock/issues/27)) ([de9ed27](https://github.com/anncwb/vite-plugin-mock/commit/de9ed276b61c18cdfe0509df21921bc3ddf9d767))

### Reverts

- revert 2.5.0, fix [#22](https://github.com/anncwb/vite-plugin-mock/issues/22) ([d5ac0d6](https://github.com/anncwb/vite-plugin-mock/commit/d5ac0d68a67f4e4cc568ef1eff12f2ba425553e8))

# [2.6.0](https://github.com/anncwb/vite-plugin-mock/compare/v2.5.0...v2.6.0) (2021-05-29)

### Bug Fixes

- loss request headers in PROD mode ([#23](https://github.com/anncwb/vite-plugin-mock/issues/23)) ([76302df](https://github.com/anncwb/vite-plugin-mock/commit/76302df9cc5a23fe0ccd001787bffbb4c012cc83)), closes [#15](https://github.com/anncwb/vite-plugin-mock/issues/15)

### Reverts

- revert 2.5.0, fix [#22](https://github.com/anncwb/vite-plugin-mock/issues/22) ([d5ac0d6](https://github.com/anncwb/vite-plugin-mock/commit/d5ac0d68a67f4e4cc568ef1eff12f2ba425553e8))

# [2.5.0](https://github.com/anncwb/vite-plugin-mock/compare/v2.4.0...v2.5.0) (2021-04-06)

### Bug Fixes

- production xhr ([6c94783](https://github.com/anncwb/vite-plugin-mock/commit/6c94783f07b27c6ac58a4642c0e7eddf34b06f1f))
- **eslint warn:** fix some warn ([b44c13b](https://github.com/anncwb/vite-plugin-mock/commit/b44c13b766cda0ee310071e9febeb48d73ef7bde))
- empty TS file in mock folder is error ([669b804](https://github.com/anncwb/vite-plugin-mock/commit/669b804df31f537bf6985b56972b32dd11e20504))

### Features

- add rawResponse option to MockMethod ([#17](https://github.com/anncwb/vite-plugin-mock/issues/17)) ([24775f9](https://github.com/anncwb/vite-plugin-mock/commit/24775f9d7b14d024d90cd36c850a00634341927f)), closes [#16](https://github.com/anncwb/vite-plugin-mock/issues/16)

### Performance Improvements

- perf code ([98b9dbc](https://github.com/anncwb/vite-plugin-mock/commit/98b9dbc64f5c6da815a1f29c6b588fddd5189370))

## [2.4.1](https://github.com/anncwb/vite-plugin-mock/compare/v2.4.0...v2.4.1) (2021-03-30)

### Bug Fixes

- empty TS file in mock folder is error ([669b804](https://github.com/anncwb/vite-plugin-mock/commit/669b804df31f537bf6985b56972b32dd11e20504))

### Performance Improvements

- perf code ([98b9dbc](https://github.com/anncwb/vite-plugin-mock/commit/98b9dbc64f5c6da815a1f29c6b588fddd5189370))

# [2.4.0](https://github.com/anncwb/vite-plugin-mock/compare/v2.3.0...v2.4.0) (2021-03-25)

### Features

- response return headers, close [#10](https://github.com/anncwb/vite-plugin-mock/issues/10) ([bcb7abd](https://github.com/anncwb/vite-plugin-mock/commit/bcb7abd98e8726af6f1721ad021c06028b1ffca7))

## [2.2.4](https://github.com/anncwb/vite-plugin-mock/compare/v2.2.3...v2.2.4) (2021-03-10)

### Features

- support post restful close [#7](https://github.com/anncwb/vite-plugin-mock/issues/7) ([70b51e8](https://github.com/anncwb/vite-plugin-mock/commit/70b51e8738e41a7011e38e942dd2a136e450ae9f))

## [2.2.3](https://github.com/anncwb/vite-plugin-mock/compare/v2.2.0...v2.2.3) (2021-03-10)

### Bug Fixes

- ensure that the URLs of different request methods cannot match close [#6](https://github.com/anncwb/vite-plugin-mock/issues/6) ([361a3eb](https://github.com/anncwb/vite-plugin-mock/commit/361a3eb62874f7a6dce8cdc8add4487302c3ee04))

### Features

- support restful api close [#4](https://github.com/anncwb/vite-plugin-mock/issues/4) ([236393e](https://github.com/anncwb/vite-plugin-mock/commit/236393ef551de32fbba62fbb27f678d4782568ec))

## [2.2.1](https://github.com/anncwb/vite-plugin-mock/compare/v2.2.0...v2.2.1) (2021-03-09)

### Features

- support restful api close [#4](https://github.com/anncwb/vite-plugin-mock/issues/4) ([7a35b1a](https://github.com/anncwb/vite-plugin-mock/commit/7a35b1a3af3bfa8623f1d24f53e71928df20b69b))

# [2.2.0](https://github.com/anncwb/vite-plugin-mock/compare/v2.1.5...v2.2.0) (2021-03-02)

### Features

- add logger option ([66a75ab](https://github.com/anncwb/vite-plugin-mock/commit/66a75ab0ee5a7c8e03987e74f15b50aedd1cc29f))

## [2.1.5](https://github.com/anncwb/vite-plugin-mock/compare/v2.0.0-beta.1...v2.1.5) (2021-02-23)

### Bug Fixes

- correct sourcemap ([2140987](https://github.com/anncwb/vite-plugin-mock/commit/21409876876b845b18b5b006e98292138870a922))
- dev sourcemap ([5834b4f](https://github.com/anncwb/vite-plugin-mock/commit/5834b4f621b25371a7b0246a48fb83b9761afeed))
- fix post proxy error ([d3ae41e](https://github.com/anncwb/vite-plugin-mock/commit/d3ae41e18a5e7adae504457165ba7b34b8ebff6f))

### Features

- support sourcemap ([8c3cd9d](https://github.com/anncwb/vite-plugin-mock/commit/8c3cd9d78a9bd7f87dc7900e9bfe6c753ff3b11f))

### Performance Improvements

- imporve request log ([f9353fd](https://github.com/anncwb/vite-plugin-mock/commit/f9353fdf8149665f984729ab3c7a6749022cfdaf))

# [2.0.0-beta.1](https://github.com/anncwb/vite-plugin-mock/compare/2.0.0-beta.1...v2.0.0-beta.1) (2021-01-03)

### Bug Fixes

- Fix local development post request proxy to https ([7965604](https://github.com/anncwb/vite-plugin-mock/commit/79656046377f501da796d1be9752522a2203d69b))
- remove unnecessary and wrong usage of "try catch" ([815abde](https://github.com/anncwb/vite-plugin-mock/commit/815abde26f8f9a19322916ae01a9896a9aced33a))

### Features

- add request time ([ccbb14a](https://github.com/anncwb/vite-plugin-mock/commit/ccbb14ad623e6549781e5e902819f830a291f13f))

## [1.0.2](https://github.com/anncwb/vite-plugin-mock/compare/1.0.1...1.0.2) (2020-09-14)

### Features

- add examples ([2c5a86b](https://github.com/anncwb/vite-plugin-mock/commit/2c5a86bb75e39b6c7c9e08b1691c0541aeb104d9))

## [1.0.1](https://github.com/anncwb/vite-plugin-mock/compare/58ad7cd57e3fd0daa92e0fc59c00e09cf6ba45ad...1.0.1) (2020-09-14)

### Features

- add supportTs options,Support es6 and commonjs modules in .js folder ([37f83f5](https://github.com/anncwb/vite-plugin-mock/commit/37f83f54c3a34e049f967b0db0ac2ade401cbf58))

### Performance Improvements

- Replace typescript plug-in with a faster esbuild plug-in ([58ad7cd](https://github.com/anncwb/vite-plugin-mock/commit/58ad7cd57e3fd0daa92e0fc59c00e09cf6ba45ad))


================================================
FILE: LICENSE
================================================
MIT License

Copyright (c) 2020-present, Vben

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: README.md
================================================
# vite-plugin-mock

**English** | [中文](./README.zh_CN.md)

[![npm][npm-img]][npm-url] [![node][node-img]][node-url]

Provide local and prod mocks for vite.

A mock plugin for vite, developed based on mockjs. And support the local environment and production environment at the same time. Connect service middleware is used locally, mockjs is used online

### Install (yarn or npm)

**node version:** >=12.0.0

**vite version:** >=2.0.0

```bash
yarn add mockjs
# or
npm i  mockjs -S
# or
pnpm add mockjs
```

and

```bash
yarn add vite-plugin-mock -D
# or
npm i vite-plugin-mock -D
# or
pnpm add vite-plugin-mock -D
```

### Example

**Run Example**

```bash

# ts example
cd ./examples/ts-examples

yarn install

yarn serve

# js example

cd ./examples/js-examples

yarn install

yarn serve
```

## Usage

**Development environment**

The development environment is implemented using Connect middleware。

Different from the production environment, you can view the network request record in the Google Chrome console

- Config plugin in vite.config.ts

```ts
import { UserConfigExport, ConfigEnv } from 'vite'

import { viteMockServe } from 'vite-plugin-mock'
import vue from '@vitejs/plugin-vue'

export default ({ command }: ConfigEnv): UserConfigExport => {
  return {
    plugins: [
      vue(),
      viteMockServe({
        // default
        mockPath: 'mock',
        enable: true,
      }),
    ],
  }
}
```

- viteMockServe Options

```ts
{
    mockPath?: string;
    ignore?: RegExp | ((fileName: string) => boolean);
    watchFiles?: boolean;
    enable?: boolean;
    ignoreFiles?: string[];
    configPath?: string;
}
```

## Options

### mockPath

**type:** `string`

**default:** `'mock'`

Set the folder where the mock .ts file is stored

If `watchFiles:true`, the file changes in the folder will be monitored. And synchronize to the request result in real time

If configPath has a value, it is invalid

### ignore

**type:** `RegExp | ((fileName: string) => boolean);`

**default:** `undefined`

When automatically reading analog .ts files, ignore files in the specified format

### watchFiles

**type:** `boolean`

**default:** `true`

Set whether to monitor changes in mock .ts files

### enable

**type:** `boolean`

**default:** true

Whether to enable the mock function

### configPath

**type:** `string`

**default:** `vite.mock.config.ts`

Set the data entry that the mock reads. When the file exists and is located in the project root directory, the file will be read and used first. The configuration file returns an array

### logger

**type:** `boolean`

**default:** `true`

Whether to display the request log on the console

## Mock file example

`/path/mock`

```ts
// test.ts

import { MockMethod, MockConfig } from 'vite-plugin-mock'
export default [
  {
    url: '/api/get',
    method: 'get',
    response: ({ query }) => {
      return {
        code: 0,
        data: {
          name: 'vben',
        },
      }
    },
  },
  {
    url: '/api/post',
    method: 'post',
    timeout: 2000,
    response: {
      code: 0,
      data: {
        name: 'vben',
      },
    },
  },
  {
    url: '/api/text',
    method: 'post',
    rawResponse: async (req, res) => {
      let reqbody = ''
      await new Promise((resolve) => {
        req.on('data', (chunk) => {
          reqbody += chunk
        })
        req.on('end', () => resolve(undefined))
      })
      res.setHeader('Content-Type', 'text/plain')
      res.statusCode = 200
      res.end(`hello, ${reqbody}`)
    },
  },
] as MockMethod[]

export default function (config: MockConfig) {
  return [
    {
      url: '/api/text',
      method: 'post',
      rawResponse: async (req, res) => {
        let reqbody = ''
        await new Promise((resolve) => {
          req.on('data', (chunk) => {
            reqbody += chunk
          })
          req.on('end', () => resolve(undefined))
        })
        res.setHeader('Content-Type', 'text/plain')
        res.statusCode = 200
        res.end(`hello, ${reqbody}`)
      },
    },
  ]
}
```

### MockMethod

```ts
{
  // request url
  url: string;
  // request method
  method?: MethodType;
  // Request time in milliseconds
  timeout?: number;
  // default: 200
  statusCode?:number;
  // response data (JSON)
  response?: ((opt: { [key: string]: string; body: Record<string,any>; query:  Record<string,any>, headers: Record<string, any>; }) => any) | any;
  // response (non-JSON)
  rawResponse?: (req: IncomingMessage, res: ServerResponse) => void;
}

```

### Example (3.0.0 recommended)

Create the `mockProdServer.ts` file

```ts
//  mockProdServer.ts

import { createProdMockServer } from 'vite-plugin-mock/client'

// Import your mock .ts files one by one
// If you use vite.mock.config.ts, just import the file directly
// You can use the import.meta.glob function to import all
import testModule from '../mock/test'

export function setupProdMockServer() {
  createProdMockServer([...testModule])
}
```

Config `vite-plugin-mock`

```ts
import { viteMockServe } from 'vite-plugin-mock'

import { UserConfigExport, ConfigEnv } from 'vite'

export default ({ command }: ConfigEnv): UserConfigExport => {
  return {
    plugins: [
      viteMockServe({
        mockPath: 'mock',
        // According to the project configuration. Can be configured in the .env file
        enable: true,
      }),
    ],
  }
}
```

## Sample project

[Vben Admin](https://github.com/anncwb/vue-vben-admin)

## Note

- The node module cannot be used in the mock .ts file, otherwise the production environment will fail
- Mock is used in the production environment, which is only suitable for some test environments. Do not open it in the formal environment to avoid unnecessary errors. At the same time, in the production environment, it may affect normal Ajax requests, such as file upload failure, etc.

## License

MIT

[npm-img]: https://img.shields.io/npm/v/vite-plugin-mock.svg
[npm-url]: https://npmjs.com/package/vite-plugin-mock
[node-img]: https://img.shields.io/node/v/vite-plugin-mock.svg
[node-url]: https://nodejs.org/en/about/releases/


================================================
FILE: README.zh_CN.md
================================================
# vite-plugin-mock

**中文** | [English](./README.md)

[![npm][npm-img]][npm-url] [![node][node-img]][node-url]

提供本地和生产模拟服务。

vite 的数据模拟插件,是基于 vite.js 开发的。 并同时支持本地环境和生产环境。 Connect 服务中间件在本地使用,mockjs 在生产环境中使用。

## Production environment problem description

The current production environment cannot support the acquisition of `headers` and the acquisition of `restful`Url format parameters. So there are those two formats that need to be used in the production environment.

### 安装 (yarn or npm)

**node version:** >=12.0.0

**vite version:** >=2.0.0

```bash
yarn add mockjs
# or
npm i  mockjs -S
# or
pnpm add mockjs
```

and

```bash
yarn add vite-plugin-mock -D
# or
npm i vite-plugin-mock -D
# or
pnpm add vite-plugin-mock -D
```

## 使用

**开发环境**

开发环境是使用 Connect 中间件实现的。

与生产环境不同,您可以在 Google Chrome 控制台中查看网络请求记录

- vite.config.ts 配置

```ts
import { UserConfigExport, ConfigEnv } from 'vite'

import { viteMockServe } from 'vite-plugin-mock'
import vue from '@vitejs/plugin-vue'

export default ({ command }: ConfigEnv): UserConfigExport => {
  return {
    plugins: [
      vue(),
      viteMockServe({
        mockPath: 'mock',
        enable: true,
      }),
    ],
  }
}
```

- viteMockServe 配置

```ts
{
    mockPath?: string;
    ignore?: RegExp | ((fileName: string) => boolean);
    watchFiles?: boolean;
    enable?: boolean;
    ignoreFiles?: string[];
    configPath?: string;
    logger?:boolean;
}
```

### mockPath

**type:** string

**default:** `mock`

设置模拟.ts 文件的存储文件夹

如果`watchFiles:true`,将监视文件夹中的文件更改。 并实时同步到请求结果

如果 `configPath` 具有值,则无效

### ignore

**type:** `RegExp | ((fileName: string) => boolean)`;

**default:** `undefined`

自动读取模拟.ts 文件时,请忽略指定格式的文件

### watchFiles

**type:** `boolean`

**default:** `true`

设置是否监视`mockPath`对应的文件夹内文件中的更改

### enable

**type:** `boolean`

**default:** true

是否启用 mock 功能

### configPath

**type:** `string`

**default:** `vite.mock.config.ts`

设置模拟读取的数据条目。 当文件存在并且位于项目根目录中时,将首先读取并使用该文件。 配置文件返回一个数组

### logger

**type:** `boolean`

**default:** `true`

是否在控制台显示请求日志

## Mock file example

`/path/mock`

```ts
// test.ts

import { MockMethod, MockConfig } from 'vite-plugin-mock'
export default [
  {
    url: '/api/get',
    method: 'get',
    response: ({ query }) => {
      return {
        code: 0,
        data: {
          name: 'vben',
        },
      }
    },
  },
  {
    url: '/api/post',
    method: 'post',
    timeout: 2000,
    response: {
      code: 0,
      data: {
        name: 'vben',
      },
    },
  },
  {
    url: '/api/text',
    method: 'post',
    rawResponse: async (req, res) => {
      let reqbody = ''
      await new Promise((resolve) => {
        req.on('data', (chunk) => {
          reqbody += chunk
        })
        req.on('end', () => resolve(undefined))
      })
      res.setHeader('Content-Type', 'text/plain')
      res.statusCode = 200
      res.end(`hello, ${reqbody}`)
    },
  },
] as MockMethod[]

export default function (config: MockConfig) {
  return [
    {
      url: '/api/text',
      method: 'post',
      rawResponse: async (req, res) => {
        let reqbody = ''
        await new Promise((resolve) => {
          req.on('data', (chunk) => {
            reqbody += chunk
          })
          req.on('end', () => resolve(undefined))
        })
        res.setHeader('Content-Type', 'text/plain')
        res.statusCode = 200
        res.end(`hello, ${reqbody}`)
      },
    },
  ]
}
```

### MockMethod

```ts
{
  // 请求地址
  url: string;
  // 请求方式
  method?: MethodType;
  // 设置超时时间
  timeout?: number;
  // 状态吗
  statusCode?:number;
  // 响应数据(JSON)
  response?: ((opt: { [key: string]: string; body: Record<string,any>; query:  Record<string,any>, headers: Record<string, any>; }) => any) | any;
  // 响应(非JSON)
  rawResponse?: (req: IncomingMessage, res: ServerResponse) => void;
}

```

## 在生产环境中的使用

创建`mockProdServer.ts` 文件

```ts
//  mockProdServer.ts
import { createProdMockServer } from 'vite-plugin-mock/client'

// 逐一导入您的mock.ts文件
// 如果使用vite.mock.config.ts,只需直接导入文件
// 可以使用 import.meta.glob功能来进行全部导入
import testModule from '../mock/test'

export function setupProdMockServer() {
  createProdMockServer([...testModule])
}
```

配置 `vite-plugin-mock`

```ts
import { viteMockServe } from 'vite-plugin-mock'

import { UserConfigExport, ConfigEnv } from 'vite'

export default ({ command }: ConfigEnv): UserConfigExport => {
  return {
    plugins: [
      viteMockServe({
        mockPath: 'mock',
        // 根据项目配置。可以配置在.env文件
        enable: true,
      }),
    ],
  }
}
```

### 示例

**运行示例**

```bash
pnpm install

# ts example
cd ./examples/ts-examples

pnpm run serve

# js example

cd ./examples/js-examples

pnpm run serve
```

## 示例项目

[Vben Admin](https://github.com/anncwb/vue-vben-admin)

## 注意事项

- 无法在 mock.ts 文件中使用 node 模块,否则生产环境将失败
- 模拟数据如果用于生产环境,仅适用于某些测试环境。 不要在正式环境中打开它,以避免不必要的错误。 同时,在生产环境中,它可能会影响正常的 Ajax 请求,例如文件上传/下载失败等。

## License

MIT

[npm-img]: https://img.shields.io/npm/v/vite-plugin-mock.svg
[npm-url]: https://npmjs.com/package/vite-plugin-mock
[node-img]: https://img.shields.io/node/v/vite-plugin-mock.svg
[node-url]: https://nodejs.org/en/about/releases/


================================================
FILE: commitlint.config.js
================================================
module.exports = { extends: ['@commitlint/config-conventional'] }


================================================
FILE: package.json
================================================
{
  "name": "vite-plugin-mock-monorepo",
  "version": "2.9.8",
  "private": true,
  "description": "A mock plugin for vite",
  "files": [
    "dist",
    "es"
  ],
  "engines": {
    "node": ">=12.0.0"
  },
  "scripts": {
    "log": "conventional-changelog -p angular -i CHANGELOG.md -s",
    "lint:lint-staged": "lint-staged -c ./.husky/lintstagedrc.js",
    "lint:eslint": "eslint \"src/**/*.{ts,tsx}\" --fix",
    "prepare": "husky install"
  },
  "keywords": [
    "vite",
    "mock",
    "hmr"
  ],
  "author": "Vben",
  "license": "MIT",
  "devDependencies": {
    "@commitlint/cli": "^17.6.1",
    "@commitlint/config-conventional": "^17.6.1",
    "@types/connect": "^3.4.35",
    "@types/debug": "^4.1.7",
    "@types/node": "^16.18.23",
    "@typescript-eslint/eslint-plugin": "^5.58.0",
    "@typescript-eslint/parser": "^5.58.0",
    "commitizen": "^4.3.0",
    "conventional-changelog-cli": "^2.2.2",
    "eslint": "^8.38.0",
    "eslint-config-prettier": "^8.8.0",
    "husky": "^8.0.3",
    "lint-staged": "^13.2.1",
    "prettier": "^2.8.7",
    "rimraf": "^5.0.0",
    "typescript": "^5.0.4"
  }
}


================================================
FILE: packages/playground/js-example/.gitignore
================================================
node_modules
.DS_Store
dist
*.local

================================================
FILE: packages/playground/js-example/index.html
================================================
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <link rel="icon" href="/favicon.ico" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Vite App</title>
  </head>
  <body>
    <div id="app"></div>
    <script type="module" src="/src/main.js"></script>
  </body>
</html>


================================================
FILE: packages/playground/js-example/mock/role.mjs
================================================
export default [
  {
    url: '/api/getRoleById',
    method: 'get',
    response: ({ query }) => {
      console.log('id>>>>>>>>', query.id)
      return {
        code: 0,
        message: 'ok',
        data: {
          roleName: 'admin',
          roleValue: 'admin1',
        },
      }
    },
  },
]


================================================
FILE: packages/playground/js-example/mock/user.js
================================================
export default [
  {
    url: '/api/createUser',
    method: 'post',
    response: ({ body }) => {
      console.log('body>>>>>>>>', body)
      return {
        code: 0,
        message: 'ok',
        data: null,
      }
    },
  },
]


================================================
FILE: packages/playground/js-example/package.json
================================================
{
  "name": "ts-example",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "dev": "cross-env NODE_ENV=development vite",
    "build": "cross-env NODE_ENV=production vite build "
  },
  "dependencies": {
    "axios": "^1.3.5",
    "element-plus": "^2.3.3",
    "mockjs": "^1.1.0",
    "vue": "^3.2.47"
  },
  "devDependencies": {
    "@vitejs/plugin-vue": "^4.1.0",
    "@vue/compiler-sfc": "^3.2.47",
    "cross-env": "^7.0.3",
    "vite": "^4.2.1",
    "vite-plugin-mock": "workspace:*"
  }
}


================================================
FILE: packages/playground/js-example/src/App.vue
================================================
<template>
  <div class="container">
    <h1>
      <el-link
        type="success"
        href="https://github.com/anncwb/vite-plugin-mock/tree/main/examples/js-example"
        target="_blank"
        class="_link"
        >测试vite-plugin-mock(JS版本)</el-link
      >
    </h1>
    <el-space wrap>
      <el-card class="box-card" v-for="(item, key) in requestLists" :key="key">
        <template #header>
          <div class="card-header">
            <span>{{ item.name }}</span>
            <el-button
              class="button"
              size="mini"
              type="primary"
              plain
              @click="sendRequest(key, item)"
              >Send</el-button
            >
          </div>
        </template>
        <div v-loading="item.show">{{ item.info }}</div>
      </el-card>
    </el-space>
  </div>
</template>

<script>
import { defineComponent, ref } from 'vue'
import axios from 'axios'
export default defineComponent({
  name: 'App',
  setup() {
    const requestLists = ref([
      {
        name: 'Get Request',
        info: '暂无数据',
        show: false,
      },
      {
        name: 'Post Request',
        info: '暂无数据',
        show: false,
      },
    ])

    const getRoleById = () => {
      requestLists.value[0].show = true
      axios.get('/api/getRoleById', { params: { id: 1 } }).then(({ data }) => {
        requestLists.value[0].info = data
        requestLists.value[0].show = false
      })
    }

    const createUser = () => {
      requestLists.value[1].show = true
      axios
        .post('/api/createUser', {
          name: 'vben',
          gender: 'man',
        })
        .then(({ data }) => {
          requestLists.value[1].info = data
          requestLists.value[1].show = false
        })
    }

    const sendRequest = (key, item) => {
      key === 0 ? getRoleById() : createUser()
    }

    return {
      requestLists,
      sendRequest,
    }
  },
})
</script>

<style scoped>
.card-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
}
._link {
  font-size: 30px;
}
.box-card {
  width: 360px;
}
.el-space {
  align-items: flex-start !important;
}
</style>


================================================
FILE: packages/playground/js-example/src/main.js
================================================
import { createApp } from 'vue'
import App from './App.vue'

import ElementPlus from 'element-plus'
import 'element-plus/theme-chalk/index.css'

createApp(App).use(ElementPlus).mount('#app')


================================================
FILE: packages/playground/js-example/src/mockProdServer.js
================================================
import { createProdMockServer } from '../../../es/createProdMockServer'
import roleMock from '../mock/role'
import userMock from '../mock/user'

export function setupProdMockServer() {
  createProdMockServer([...roleMock, ...userMock])
}


================================================
FILE: packages/playground/js-example/vite.config.js
================================================
import { viteMockServe } from 'vite-plugin-mock'

import vue from '@vitejs/plugin-vue'

export default ({ command }) => {
  let prodMock = true
  return {
    plugins: [
      vue(),
      viteMockServe({
        mockPath: 'mock',
        enable: true,
      }),
    ],
  }
}


================================================
FILE: packages/playground/ts-example/.gitignore
================================================
node_modules
.DS_Store
dist
*.local


================================================
FILE: packages/playground/ts-example/index.html
================================================
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <link rel="icon" href="/favicon.ico" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Vite App</title>
  </head>
  <body>
    <div id="app"></div>
    <script type="module" src="/src/main.ts"></script>
  </body>
</html>


================================================
FILE: packages/playground/ts-example/mock/define.ts
================================================
import type { MockConfig } from 'vite-plugin-mock'

export default (config: MockConfig) => {
  return [
    {
      url: '/api/testRestful/:id',
      method: 'post',
      response: ({ query, body }) => {
        console.log('query>>>>>>>>', query)
        console.log('body>>>>>>>>', body)
        return {
          code: 0,
          message: 'ok',
          data: {
            roleName: 'admin',
            roleValue: 'admin',
          },
        }
      },
    },
  ]
}


================================================
FILE: packages/playground/ts-example/mock/dep/role.ts
================================================
import type { MockMethod } from 'vite-plugin-mock'
export default [
  {
    url: '/api/getRoleById',
    method: 'get',
    response: ({ query }) => {
      console.log('id>>>>>>>>', query.id)
      return {
        code: 0,
        message: 'ok',
        data: {
          roleName: 'admin',
          roleValue: 'admin',
        },
      }
    },
  },
  {
    url: '/api/testRestful/:id',
    method: 'get',
    response: ({ query }) => {
      console.log('id>>>>>>>>', query.id)
      return {
        code: 0,
        message: 'ok',
        data: {
          roleName: 'admin',
          roleValue: 'admin',
        },
      }
    },
  },
] as MockMethod[]


================================================
FILE: packages/playground/ts-example/mock/user.ts
================================================
import type { MockConfig } from 'vite-plugin-mock'

export default (config?: MockConfig) => {
  return [
    {
      url: '/api/createUser',
      method: 'post',
      response: ({ body, query }) => {
        console.log('body>>>>>>>>', body)
        console.log('query>>>>>>>>', query)

        return {
          code: 0,
          message: 'ok',
          data: { a: 21, 'import.meta.url': import.meta.url },
        }
      },
    },
  ]
}


================================================
FILE: packages/playground/ts-example/package.json
================================================
{
  "name": "ts-example",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "dev": "cross-env NODE_ENV=development vite",
    "build": "cross-env NODE_ENV=production vite build "
  },
  "dependencies": {
    "axios": "^1.3.5",
    "element-plus": "^2.3.3",
    "find-up": "^6.3.0",
    "mockjs": "^1.1.0",
    "vue": "^3.2.47"
  },
  "devDependencies": {
    "@vitejs/plugin-vue": "^4.1.0",
    "@vue/compiler-sfc": "^3.2.47",
    "cross-env": "^7.0.3",
    "typescript": "^5.0.4",
    "vite": "^4.2.1",
    "vite-plugin-mock": "workspace:*"
  }
}


================================================
FILE: packages/playground/ts-example/shim-vue.ts
================================================
declare module '*.vue' {
  import { ComponentOptions } from 'vue'
  const component: ComponentOptions
  export default component
}


================================================
FILE: packages/playground/ts-example/src/App.vue
================================================
<template>
  <div class="container">
    <h1>
      <el-link
        type="success"
        href="https://github.com/anncwb/vite-plugin-mock/tree/main/examples/ts-example"
        target="_blank"
        class="_link"
        >测试vite-plugin-mock(TS版本)</el-link
      >
    </h1>
    <el-space wrap>
      <el-card class="box-card" v-for="(item, key) in requestLists" :key="key">
        <template #header>
          <div class="card-header">
            <span>{{ item.name }}</span>
            <el-button
              class="button"
              size="mini"
              type="primary"
              plain
              @click="sendRequest(key, item)"
              >Send</el-button
            >
          </div>
        </template>
        <div v-loading="item.show">{{ item.info }}</div>
      </el-card>
    </el-space>
  </div>
</template>

<script>
import { defineComponent, ref } from 'vue'
import axios from 'axios'
export default defineComponent({
  name: 'App',
  setup() {
    const requestLists = ref([
      {
        name: 'Get Request',
        info: '暂无数据',
        show: false,
      },
      {
        name: 'Get Restful',
        info: '暂无数据',
        show: false,
      },
      {
        name: 'Post Request',
        info: '暂无数据',
        show: false,
      },
      {
        name: 'Post Restful',
        info: '暂无数据',
        show: false,
      },
      {
        name: 'Post Form-data',
        info: '暂无数据',
        show: false,
      },
    ])

    const getRoleById = () => {
      requestLists.value[0].show = true
      axios.get('/api/getRoleById', { params: { id: 2 } }).then(({ data }) => {
        requestLists.value[0].info = data
        requestLists.value[0].show = false
      })
    }

    const testRestful = () => {
      requestLists.value[1].show = true
      axios.get('/api/testRestful/1').then(({ data }) => {
        requestLists.value[1].info = data
        requestLists.value[1].show = false
      })
    }

    const createUser = () => {
      requestLists.value[2].show = true
      axios
        .post('/api/createUser', {
          name: 'vben',
          gender: 'man',
        })
        .then(({ data }) => {
          requestLists.value[2].info = data
          requestLists.value[2].show = false
        })
    }

    const testPostRestful = () => {
      requestLists.value[3].show = true
      axios.post('/api/testRestful/1').then(({ data }) => {
        requestLists.value[3].info = data
        requestLists.value[3].show = false
      })
    }

    const testPostFormData = () => {
      requestLists.value[4].show = true
      axios
        .post(
          '/api/createUser?a=1',
          {
            name: 'vben',
            gender: 'man',
          },
          { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } },
        )
        .then(({ data }) => {
          requestLists.value[4].info = data
          requestLists.value[4].show = false
        })
    }

    const sendRequest = (key, item) => {
      switch (key) {
        case 0:
          getRoleById()
          break
        case 1:
          testRestful()
          break
        case 2:
          createUser()
          break
        case 3:
          testPostRestful()
          break
        case 4:
          testPostFormData()
          break
        default:
          getRoleById()
      }
    }

    return {
      requestLists,
      sendRequest,
    }
  },
})
</script>

<style scoped>
.card-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
}
._link {
  font-size: 30px;
}
.box-card {
  width: 360px;
}
.el-space {
  align-items: flex-start !important;
}
</style>


================================================
FILE: packages/playground/ts-example/src/main.ts
================================================
import { createApp } from 'vue'
import App from './App.vue'

import ElementPlus from 'element-plus'
import 'element-plus/theme-chalk/index.css'

createApp(App).use(ElementPlus).mount('#app')

// production mock server
if (process.env.NODE_ENV === 'production') {
  import('./mockProdServer').then(({ setupProdMockServer }) => {
    setupProdMockServer()
  })
}


================================================
FILE: packages/playground/ts-example/src/mockProdServer.ts
================================================
import { createProdMockServer } from 'vite-plugin-mock/client'
import roleMock from '../mock/dep/role'
import userMockFn from '../mock/user'

export async function setupProdMockServer() {
  const mockModules = [...roleMock, ...userMockFn()]
  createProdMockServer(mockModules)
}


================================================
FILE: packages/playground/ts-example/tsconfig.json
================================================
{
  "compilerOptions": {
    "target": "esnext",
    "module": "esnext",
    "moduleResolution": "node",
    "strict": true,
    "forceConsistentCasingInFileNames": true,
    "allowSyntheticDefaultImports": true,
    "strictFunctionTypes": false,
    "jsx": "preserve",
    "baseUrl": ".",
    "allowJs": true,
    "sourceMap": true,
    "esModuleInterop": true,
    "resolveJsonModule": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "experimentalDecorators": true,
    "lib": ["dom", "esnext"],
    "types": ["vite/client"],
    "typeRoots": ["./node_modules/@types/", "./types"],
    "incremental": true,
    "noImplicitAny": false,
    "skipLibCheck": true
  },
  "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"],
  "exclude": ["node_modules", "dist", "**/*.js"]
}


================================================
FILE: packages/playground/ts-example/vite.config.ts
================================================
import { viteMockServe } from 'vite-plugin-mock'

import { UserConfigExport } from 'vite'
import vue from '@vitejs/plugin-vue'

export default (): UserConfigExport => {
  return {
    plugins: [
      vue(),
      viteMockServe({
        mockPath: 'mock',
        enable: true,
        logger: true,
      }),
    ],
  }
}


================================================
FILE: packages/vite-plugin-mock/CHANGELOG.md
================================================
## [2.9.8](https://github.com/anncwb/vite-plugin-mock/compare/v2.9.0...v2.9.8) (2023-04-16)

### Bug Fixes

- can't update in real time, fix [#40](https://github.com/anncwb/vite-plugin-mock/issues/40) ([f25c6ac](https://github.com/anncwb/vite-plugin-mock/commit/f25c6ac8544991457368746bf6ec5fdfd8b4e083))
- error handle, fix [#39](https://github.com/anncwb/vite-plugin-mock/issues/39) ([874318c](https://github.com/anncwb/vite-plugin-mock/commit/874318ce399dc78c33d91161b73e3ced7bb6e9b6))
- fix js parsing error ([1dbee45](https://github.com/anncwb/vite-plugin-mock/commit/1dbee452ec7d90b07ac86ce8530430e864589ab5))
- fix node version ([#38](https://github.com/anncwb/vite-plugin-mock/issues/38)) ([f91dea1](https://github.com/anncwb/vite-plugin-mock/commit/f91dea1be943aa1145727bfecd273ef45cdff8e9))
- inappropriate type annotation ([#90](https://github.com/anncwb/vite-plugin-mock/issues/90)) ([a3fc4aa](https://github.com/anncwb/vite-plugin-mock/commit/a3fc4aab3dd1864f640918516c10d7d1530f5d90))
- typo, close [#42](https://github.com/anncwb/vite-plugin-mock/issues/42) ([5b4e946](https://github.com/anncwb/vite-plugin-mock/commit/5b4e9469060109a2a28c079eec8384fe654be68e))

### Features

- **prod:** response 在 prod 模式下入参对象加上 url ([#83](https://github.com/anncwb/vite-plugin-mock/issues/83)) ([cd0b86f](https://github.com/anncwb/vite-plugin-mock/commit/cd0b86fce20228094cf18be14194498a2cbd490e))
- **server:** add this for response, rawResponse function ([#43](https://github.com/anncwb/vite-plugin-mock/issues/43)) ([2f4d6d2](https://github.com/anncwb/vite-plugin-mock/commit/2f4d6d2984c7fe15236cb8b0d2ec5479930d5668))

## [2.9.6](https://github.com/anncwb/vite-plugin-mock/compare/v2.5.0...v2.9.6) (2021-08-23)

### Bug Fixes

- can't update in real time, fix [#40](https://github.com/anncwb/vite-plugin-mock/issues/40) ([f25c6ac](https://github.com/anncwb/vite-plugin-mock/commit/f25c6ac8544991457368746bf6ec5fdfd8b4e083))
- ensure that the post with parameters are matched,fix [#29](https://github.com/anncwb/vite-plugin-mock/issues/29) ([4cb55f8](https://github.com/anncwb/vite-plugin-mock/commit/4cb55f87def1e3edf07937ce48b0cfc594f2b88d))
- error handle, fix [#39](https://github.com/anncwb/vite-plugin-mock/issues/39) ([874318c](https://github.com/anncwb/vite-plugin-mock/commit/874318ce399dc78c33d91161b73e3ced7bb6e9b6))
- fix js parsing error ([1dbee45](https://github.com/anncwb/vite-plugin-mock/commit/1dbee452ec7d90b07ac86ce8530430e864589ab5))
- fix node version ([#38](https://github.com/anncwb/vite-plugin-mock/issues/38)) ([f91dea1](https://github.com/anncwb/vite-plugin-mock/commit/f91dea1be943aa1145727bfecd273ef45cdff8e9))
- improve path matching logic, fix [#25](https://github.com/anncwb/vite-plugin-mock/issues/25) ([5079e4b](https://github.com/anncwb/vite-plugin-mock/commit/5079e4ba1c713aaba2facc87dfb289ea0916c231))
- loss request headers in PROD mode ([#23](https://github.com/anncwb/vite-plugin-mock/issues/23)) ([76302df](https://github.com/anncwb/vite-plugin-mock/commit/76302df9cc5a23fe0ccd001787bffbb4c012cc83)), closes [#15](https://github.com/anncwb/vite-plugin-mock/issues/15)
- make sure ignore matches the file correctly ([b612a09](https://github.com/anncwb/vite-plugin-mock/commit/b612a0934b7dcaae423450a56139cc9b9749c43e))
- support node12 ([fdfed60](https://github.com/anncwb/vite-plugin-mock/commit/fdfed60b6d8859bdcf8292c30859101f47d758b5))
- typo, close [#42](https://github.com/anncwb/vite-plugin-mock/issues/42) ([5b4e946](https://github.com/anncwb/vite-plugin-mock/commit/5b4e9469060109a2a28c079eec8384fe654be68e))

### Features

- remove supportTs, change to automatic judgment ([4625e59](https://github.com/anncwb/vite-plugin-mock/commit/4625e59429b4fc06ff4f911d681ee4999661c3ec))
- response return url ([#27](https://github.com/anncwb/vite-plugin-mock/issues/27)) ([de9ed27](https://github.com/anncwb/vite-plugin-mock/commit/de9ed276b61c18cdfe0509df21921bc3ddf9d767))
- **server:** add this for response, rawResponse function ([#43](https://github.com/anncwb/vite-plugin-mock/issues/43)) ([2f4d6d2](https://github.com/anncwb/vite-plugin-mock/commit/2f4d6d2984c7fe15236cb8b0d2ec5479930d5668))

### Reverts

- revert 2.5.0, fix [#22](https://github.com/anncwb/vite-plugin-mock/issues/22) ([d5ac0d6](https://github.com/anncwb/vite-plugin-mock/commit/d5ac0d68a67f4e4cc568ef1eff12f2ba425553e8))

## [2.9.5](https://github.com/anncwb/vite-plugin-mock/compare/v2.5.0...v2.9.5) (2021-08-23)

### Bug Fixes

- can't update in real time, fix [#40](https://github.com/anncwb/vite-plugin-mock/issues/40) ([f25c6ac](https://github.com/anncwb/vite-plugin-mock/commit/f25c6ac8544991457368746bf6ec5fdfd8b4e083))
- ensure that the post with parameters are matched,fix [#29](https://github.com/anncwb/vite-plugin-mock/issues/29) ([4cb55f8](https://github.com/anncwb/vite-plugin-mock/commit/4cb55f87def1e3edf07937ce48b0cfc594f2b88d))
- error handle, fix [#39](https://github.com/anncwb/vite-plugin-mock/issues/39) ([874318c](https://github.com/anncwb/vite-plugin-mock/commit/874318ce399dc78c33d91161b73e3ced7bb6e9b6))
- fix js parsing error ([1dbee45](https://github.com/anncwb/vite-plugin-mock/commit/1dbee452ec7d90b07ac86ce8530430e864589ab5))
- fix node version ([#38](https://github.com/anncwb/vite-plugin-mock/issues/38)) ([f91dea1](https://github.com/anncwb/vite-plugin-mock/commit/f91dea1be943aa1145727bfecd273ef45cdff8e9))
- improve path matching logic, fix [#25](https://github.com/anncwb/vite-plugin-mock/issues/25) ([5079e4b](https://github.com/anncwb/vite-plugin-mock/commit/5079e4ba1c713aaba2facc87dfb289ea0916c231))
- loss request headers in PROD mode ([#23](https://github.com/anncwb/vite-plugin-mock/issues/23)) ([76302df](https://github.com/anncwb/vite-plugin-mock/commit/76302df9cc5a23fe0ccd001787bffbb4c012cc83)), closes [#15](https://github.com/anncwb/vite-plugin-mock/issues/15)
- make sure ignore matches the file correctly ([b612a09](https://github.com/anncwb/vite-plugin-mock/commit/b612a0934b7dcaae423450a56139cc9b9749c43e))
- support node12 ([fdfed60](https://github.com/anncwb/vite-plugin-mock/commit/fdfed60b6d8859bdcf8292c30859101f47d758b5))

### Features

- remove supportTs, change to automatic judgment ([4625e59](https://github.com/anncwb/vite-plugin-mock/commit/4625e59429b4fc06ff4f911d681ee4999661c3ec))
- response return url ([#27](https://github.com/anncwb/vite-plugin-mock/issues/27)) ([de9ed27](https://github.com/anncwb/vite-plugin-mock/commit/de9ed276b61c18cdfe0509df21921bc3ddf9d767))
- **server:** add this for response, rawResponse function ([#43](https://github.com/anncwb/vite-plugin-mock/issues/43)) ([2f4d6d2](https://github.com/anncwb/vite-plugin-mock/commit/2f4d6d2984c7fe15236cb8b0d2ec5479930d5668))

### Reverts

- revert 2.5.0, fix [#22](https://github.com/anncwb/vite-plugin-mock/issues/22) ([d5ac0d6](https://github.com/anncwb/vite-plugin-mock/commit/d5ac0d68a67f4e4cc568ef1eff12f2ba425553e8))

## [2.9.4](https://github.com/anncwb/vite-plugin-mock/compare/v2.9.0...v2.9.4) (2021-08-01)

### Bug Fixes

- can't update in real time, fix [#40](https://github.com/anncwb/vite-plugin-mock/issues/40) ([f25c6ac](https://github.com/anncwb/vite-plugin-mock/commit/f25c6ac8544991457368746bf6ec5fdfd8b4e083))
- error handle, fix [#39](https://github.com/anncwb/vite-plugin-mock/issues/39) ([874318c](https://github.com/anncwb/vite-plugin-mock/commit/874318ce399dc78c33d91161b73e3ced7bb6e9b6))
- fix js parsing error ([1dbee45](https://github.com/anncwb/vite-plugin-mock/commit/1dbee452ec7d90b07ac86ce8530430e864589ab5))
- fix node version ([#38](https://github.com/anncwb/vite-plugin-mock/issues/38)) ([f91dea1](https://github.com/anncwb/vite-plugin-mock/commit/f91dea1be943aa1145727bfecd273ef45cdff8e9))

## [2.9.3](https://github.com/anncwb/vite-plugin-mock/compare/v2.5.0...v2.9.3) (2021-07-18)

### Bug Fixes

- ensure that the post with parameters are matched,fix [#29](https://github.com/anncwb/vite-plugin-mock/issues/29) ([4cb55f8](https://github.com/anncwb/vite-plugin-mock/commit/4cb55f87def1e3edf07937ce48b0cfc594f2b88d))
- fix js parsing error ([1dbee45](https://github.com/anncwb/vite-plugin-mock/commit/1dbee452ec7d90b07ac86ce8530430e864589ab5))
- improve path matching logic, fix [#25](https://github.com/anncwb/vite-plugin-mock/issues/25) ([5079e4b](https://github.com/anncwb/vite-plugin-mock/commit/5079e4ba1c713aaba2facc87dfb289ea0916c231))
- loss request headers in PROD mode ([#23](https://github.com/anncwb/vite-plugin-mock/issues/23)) ([76302df](https://github.com/anncwb/vite-plugin-mock/commit/76302df9cc5a23fe0ccd001787bffbb4c012cc83)), closes [#15](https://github.com/anncwb/vite-plugin-mock/issues/15)
- make sure ignore matches the file correctly ([b612a09](https://github.com/anncwb/vite-plugin-mock/commit/b612a0934b7dcaae423450a56139cc9b9749c43e))
- support node12 ([fdfed60](https://github.com/anncwb/vite-plugin-mock/commit/fdfed60b6d8859bdcf8292c30859101f47d758b5))

### Features

- remove supportTs, change to automatic judgment ([4625e59](https://github.com/anncwb/vite-plugin-mock/commit/4625e59429b4fc06ff4f911d681ee4999661c3ec))
- response return url ([#27](https://github.com/anncwb/vite-plugin-mock/issues/27)) ([de9ed27](https://github.com/anncwb/vite-plugin-mock/commit/de9ed276b61c18cdfe0509df21921bc3ddf9d767))

### Reverts

- revert 2.5.0, fix [#22](https://github.com/anncwb/vite-plugin-mock/issues/22) ([d5ac0d6](https://github.com/anncwb/vite-plugin-mock/commit/d5ac0d68a67f4e4cc568ef1eff12f2ba425553e8))

## [2.9.2](https://github.com/anncwb/vite-plugin-mock/compare/v2.5.0...v2.9.2) (2021-07-18)

### Bug Fixes

- ensure file changes take effect,fix [#36](https://github.com/anncwb/vite-plugin-mock/issues/36) ([353aa9d](https://github.com/anncwb/vite-plugin-mock/commit/353aa9db67483072a3d60b6bf3c99736563bba43))
- ensure that the post with parameters are matched,fix [#29](https://github.com/anncwb/vite-plugin-mock/issues/29) ([4cb55f8](https://github.com/anncwb/vite-plugin-mock/commit/4cb55f87def1e3edf07937ce48b0cfc594f2b88d))
- fix js parsing error ([1dbee45](https://github.com/anncwb/vite-plugin-mock/commit/1dbee452ec7d90b07ac86ce8530430e864589ab5))
- improve path matching logic, fix [#25](https://github.com/anncwb/vite-plugin-mock/issues/25) ([5079e4b](https://github.com/anncwb/vite-plugin-mock/commit/5079e4ba1c713aaba2facc87dfb289ea0916c231))
- loss request headers in PROD mode ([#23](https://github.com/anncwb/vite-plugin-mock/issues/23)) ([76302df](https://github.com/anncwb/vite-plugin-mock/commit/76302df9cc5a23fe0ccd001787bffbb4c012cc83)), closes [#15](https://github.com/anncwb/vite-plugin-mock/issues/15)
- make sure ignore matches the file correctly ([b612a09](https://github.com/anncwb/vite-plugin-mock/commit/b612a0934b7dcaae423450a56139cc9b9749c43e))
- support node12 ([fdfed60](https://github.com/anncwb/vite-plugin-mock/commit/fdfed60b6d8859bdcf8292c30859101f47d758b5))

### Features

- remove supportTs, change to automatic judgment ([4625e59](https://github.com/anncwb/vite-plugin-mock/commit/4625e59429b4fc06ff4f911d681ee4999661c3ec))
- response return url ([#27](https://github.com/anncwb/vite-plugin-mock/issues/27)) ([de9ed27](https://github.com/anncwb/vite-plugin-mock/commit/de9ed276b61c18cdfe0509df21921bc3ddf9d767))

### Reverts

- revert 2.5.0, fix [#22](https://github.com/anncwb/vite-plugin-mock/issues/22) ([d5ac0d6](https://github.com/anncwb/vite-plugin-mock/commit/d5ac0d68a67f4e4cc568ef1eff12f2ba425553e8))

## [2.9.1](https://github.com/anncwb/vite-plugin-mock/compare/v2.5.0...v2.9.1) (2021-07-06)

### Bug Fixes

- ensure that the post with parameters are matched,fix [#29](https://github.com/anncwb/vite-plugin-mock/issues/29) ([4cb55f8](https://github.com/anncwb/vite-plugin-mock/commit/4cb55f87def1e3edf07937ce48b0cfc594f2b88d))
- fix js parsing error ([d2746b6](https://github.com/anncwb/vite-plugin-mock/commit/d2746b6d788cdd304cac8512afa743b01edbd479))
- improve path matching logic, fix [#25](https://github.com/anncwb/vite-plugin-mock/issues/25) ([5079e4b](https://github.com/anncwb/vite-plugin-mock/commit/5079e4ba1c713aaba2facc87dfb289ea0916c231))
- loss request headers in PROD mode ([#23](https://github.com/anncwb/vite-plugin-mock/issues/23)) ([76302df](https://github.com/anncwb/vite-plugin-mock/commit/76302df9cc5a23fe0ccd001787bffbb4c012cc83)), closes [#15](https://github.com/anncwb/vite-plugin-mock/issues/15)
- make sure ignore matches the file correctly ([b612a09](https://github.com/anncwb/vite-plugin-mock/commit/b612a0934b7dcaae423450a56139cc9b9749c43e))
- support node12 ([fdfed60](https://github.com/anncwb/vite-plugin-mock/commit/fdfed60b6d8859bdcf8292c30859101f47d758b5))

### Features

- remove supportTs, change to automatic judgment ([4625e59](https://github.com/anncwb/vite-plugin-mock/commit/4625e59429b4fc06ff4f911d681ee4999661c3ec))
- response return url ([#27](https://github.com/anncwb/vite-plugin-mock/issues/27)) ([de9ed27](https://github.com/anncwb/vite-plugin-mock/commit/de9ed276b61c18cdfe0509df21921bc3ddf9d767))

### Reverts

- revert 2.5.0, fix [#22](https://github.com/anncwb/vite-plugin-mock/issues/22) ([d5ac0d6](https://github.com/anncwb/vite-plugin-mock/commit/d5ac0d68a67f4e4cc568ef1eff12f2ba425553e8))

# [2.9.0](https://github.com/anncwb/vite-plugin-mock/compare/v2.5.0...v2.9.0) (2021-07-05)

### Bug Fixes

- ensure that the post with parameters are matched,fix [#29](https://github.com/anncwb/vite-plugin-mock/issues/29) ([4cb55f8](https://github.com/anncwb/vite-plugin-mock/commit/4cb55f87def1e3edf07937ce48b0cfc594f2b88d))
- improve path matching logic, fix [#25](https://github.com/anncwb/vite-plugin-mock/issues/25) ([5079e4b](https://github.com/anncwb/vite-plugin-mock/commit/5079e4ba1c713aaba2facc87dfb289ea0916c231))
- loss request headers in PROD mode ([#23](https://github.com/anncwb/vite-plugin-mock/issues/23)) ([76302df](https://github.com/anncwb/vite-plugin-mock/commit/76302df9cc5a23fe0ccd001787bffbb4c012cc83)), closes [#15](https://github.com/anncwb/vite-plugin-mock/issues/15)
- make sure ignore matches the file correctly ([b612a09](https://github.com/anncwb/vite-plugin-mock/commit/b612a0934b7dcaae423450a56139cc9b9749c43e))
- support node12 ([fdfed60](https://github.com/anncwb/vite-plugin-mock/commit/fdfed60b6d8859bdcf8292c30859101f47d758b5))

### Features

- remove supportTs, change to automatic judgment ([4625e59](https://github.com/anncwb/vite-plugin-mock/commit/4625e59429b4fc06ff4f911d681ee4999661c3ec))
- response return url ([#27](https://github.com/anncwb/vite-plugin-mock/issues/27)) ([de9ed27](https://github.com/anncwb/vite-plugin-mock/commit/de9ed276b61c18cdfe0509df21921bc3ddf9d767))

### Reverts

- revert 2.5.0, fix [#22](https://github.com/anncwb/vite-plugin-mock/issues/22) ([d5ac0d6](https://github.com/anncwb/vite-plugin-mock/commit/d5ac0d68a67f4e4cc568ef1eff12f2ba425553e8))

# [2.8.0](https://github.com/anncwb/vite-plugin-mock/compare/v2.5.0...v2.8.0) (2021-06-16)

### Bug Fixes

- ensure that the post with parameters are matched,fix [#29](https://github.com/anncwb/vite-plugin-mock/issues/29) ([bfed256](https://github.com/anncwb/vite-plugin-mock/commit/bfed256bff42e2348b30a6b31746854b18fc90b8))
- improve path matching logic, fix [#25](https://github.com/anncwb/vite-plugin-mock/issues/25) ([5079e4b](https://github.com/anncwb/vite-plugin-mock/commit/5079e4ba1c713aaba2facc87dfb289ea0916c231))
- loss request headers in PROD mode ([#23](https://github.com/anncwb/vite-plugin-mock/issues/23)) ([76302df](https://github.com/anncwb/vite-plugin-mock/commit/76302df9cc5a23fe0ccd001787bffbb4c012cc83)), closes [#15](https://github.com/anncwb/vite-plugin-mock/issues/15)
- make sure ignore matches the file correctly ([b612a09](https://github.com/anncwb/vite-plugin-mock/commit/b612a0934b7dcaae423450a56139cc9b9749c43e))
- support node12 ([fdfed60](https://github.com/anncwb/vite-plugin-mock/commit/fdfed60b6d8859bdcf8292c30859101f47d758b5))

### Features

- remove supportTs, change to automatic judgment ([a341c7d](https://github.com/anncwb/vite-plugin-mock/commit/a341c7d5b2de153593c0d1f5dab00b1b730a6819))
- response return url ([#27](https://github.com/anncwb/vite-plugin-mock/issues/27)) ([de9ed27](https://github.com/anncwb/vite-plugin-mock/commit/de9ed276b61c18cdfe0509df21921bc3ddf9d767))

### Reverts

- revert 2.5.0, fix [#22](https://github.com/anncwb/vite-plugin-mock/issues/22) ([d5ac0d6](https://github.com/anncwb/vite-plugin-mock/commit/d5ac0d68a67f4e4cc568ef1eff12f2ba425553e8))

## [2.7.2](https://github.com/anncwb/vite-plugin-mock/compare/v2.5.0...v2.7.2) (2021-06-10)

### Bug Fixes

- improve path matching logic, fix [#25](https://github.com/anncwb/vite-plugin-mock/issues/25) ([5079e4b](https://github.com/anncwb/vite-plugin-mock/commit/5079e4ba1c713aaba2facc87dfb289ea0916c231))
- loss request headers in PROD mode ([#23](https://github.com/anncwb/vite-plugin-mock/issues/23)) ([76302df](https://github.com/anncwb/vite-plugin-mock/commit/76302df9cc5a23fe0ccd001787bffbb4c012cc83)), closes [#15](https://github.com/anncwb/vite-plugin-mock/issues/15)
- make sure ignore matches the file correctly ([b612a09](https://github.com/anncwb/vite-plugin-mock/commit/b612a0934b7dcaae423450a56139cc9b9749c43e))
- support node12 ([fdfed60](https://github.com/anncwb/vite-plugin-mock/commit/fdfed60b6d8859bdcf8292c30859101f47d758b5))

### Features

- response return url ([#27](https://github.com/anncwb/vite-plugin-mock/issues/27)) ([de9ed27](https://github.com/anncwb/vite-plugin-mock/commit/de9ed276b61c18cdfe0509df21921bc3ddf9d767))

### Reverts

- revert 2.5.0, fix [#22](https://github.com/anncwb/vite-plugin-mock/issues/22) ([d5ac0d6](https://github.com/anncwb/vite-plugin-mock/commit/d5ac0d68a67f4e4cc568ef1eff12f2ba425553e8))

## [2.7.1](https://github.com/anncwb/vite-plugin-mock/compare/v2.5.0...v2.7.1) (2021-06-09)

### Bug Fixes

- improve path matching logic, fix [#25](https://github.com/anncwb/vite-plugin-mock/issues/25) ([5079e4b](https://github.com/anncwb/vite-plugin-mock/commit/5079e4ba1c713aaba2facc87dfb289ea0916c231))
- loss request headers in PROD mode ([#23](https://github.com/anncwb/vite-plugin-mock/issues/23)) ([76302df](https://github.com/anncwb/vite-plugin-mock/commit/76302df9cc5a23fe0ccd001787bffbb4c012cc83)), closes [#15](https://github.com/anncwb/vite-plugin-mock/issues/15)
- support node12 ([fdfed60](https://github.com/anncwb/vite-plugin-mock/commit/fdfed60b6d8859bdcf8292c30859101f47d758b5))

### Features

- response return url ([#27](https://github.com/anncwb/vite-plugin-mock/issues/27)) ([de9ed27](https://github.com/anncwb/vite-plugin-mock/commit/de9ed276b61c18cdfe0509df21921bc3ddf9d767))

### Reverts

- revert 2.5.0, fix [#22](https://github.com/anncwb/vite-plugin-mock/issues/22) ([d5ac0d6](https://github.com/anncwb/vite-plugin-mock/commit/d5ac0d68a67f4e4cc568ef1eff12f2ba425553e8))

# [2.6.0](https://github.com/anncwb/vite-plugin-mock/compare/v2.5.0...v2.6.0) (2021-05-29)

### Bug Fixes

- loss request headers in PROD mode ([#23](https://github.com/anncwb/vite-plugin-mock/issues/23)) ([76302df](https://github.com/anncwb/vite-plugin-mock/commit/76302df9cc5a23fe0ccd001787bffbb4c012cc83)), closes [#15](https://github.com/anncwb/vite-plugin-mock/issues/15)

### Reverts

- revert 2.5.0, fix [#22](https://github.com/anncwb/vite-plugin-mock/issues/22) ([d5ac0d6](https://github.com/anncwb/vite-plugin-mock/commit/d5ac0d68a67f4e4cc568ef1eff12f2ba425553e8))

# [2.5.0](https://github.com/anncwb/vite-plugin-mock/compare/v2.4.0...v2.5.0) (2021-04-06)

### Bug Fixes

- production xhr ([6c94783](https://github.com/anncwb/vite-plugin-mock/commit/6c94783f07b27c6ac58a4642c0e7eddf34b06f1f))
- **eslint warn:** fix some warn ([b44c13b](https://github.com/anncwb/vite-plugin-mock/commit/b44c13b766cda0ee310071e9febeb48d73ef7bde))
- empty TS file in mock folder is error ([669b804](https://github.com/anncwb/vite-plugin-mock/commit/669b804df31f537bf6985b56972b32dd11e20504))

### Features

- add rawResponse option to MockMethod ([#17](https://github.com/anncwb/vite-plugin-mock/issues/17)) ([24775f9](https://github.com/anncwb/vite-plugin-mock/commit/24775f9d7b14d024d90cd36c850a00634341927f)), closes [#16](https://github.com/anncwb/vite-plugin-mock/issues/16)

### Performance Improvements

- perf code ([98b9dbc](https://github.com/anncwb/vite-plugin-mock/commit/98b9dbc64f5c6da815a1f29c6b588fddd5189370))

## [2.4.1](https://github.com/anncwb/vite-plugin-mock/compare/v2.4.0...v2.4.1) (2021-03-30)

### Bug Fixes

- empty TS file in mock folder is error ([669b804](https://github.com/anncwb/vite-plugin-mock/commit/669b804df31f537bf6985b56972b32dd11e20504))

### Performance Improvements

- perf code ([98b9dbc](https://github.com/anncwb/vite-plugin-mock/commit/98b9dbc64f5c6da815a1f29c6b588fddd5189370))

# [2.4.0](https://github.com/anncwb/vite-plugin-mock/compare/v2.3.0...v2.4.0) (2021-03-25)

### Features

- response return headers, close [#10](https://github.com/anncwb/vite-plugin-mock/issues/10) ([bcb7abd](https://github.com/anncwb/vite-plugin-mock/commit/bcb7abd98e8726af6f1721ad021c06028b1ffca7))

## [2.2.4](https://github.com/anncwb/vite-plugin-mock/compare/v2.2.3...v2.2.4) (2021-03-10)

### Features

- support post restful close [#7](https://github.com/anncwb/vite-plugin-mock/issues/7) ([70b51e8](https://github.com/anncwb/vite-plugin-mock/commit/70b51e8738e41a7011e38e942dd2a136e450ae9f))

## [2.2.3](https://github.com/anncwb/vite-plugin-mock/compare/v2.2.0...v2.2.3) (2021-03-10)

### Bug Fixes

- ensure that the URLs of different request methods cannot match close [#6](https://github.com/anncwb/vite-plugin-mock/issues/6) ([361a3eb](https://github.com/anncwb/vite-plugin-mock/commit/361a3eb62874f7a6dce8cdc8add4487302c3ee04))

### Features

- support restful api close [#4](https://github.com/anncwb/vite-plugin-mock/issues/4) ([236393e](https://github.com/anncwb/vite-plugin-mock/commit/236393ef551de32fbba62fbb27f678d4782568ec))

## [2.2.1](https://github.com/anncwb/vite-plugin-mock/compare/v2.2.0...v2.2.1) (2021-03-09)

### Features

- support restful api close [#4](https://github.com/anncwb/vite-plugin-mock/issues/4) ([7a35b1a](https://github.com/anncwb/vite-plugin-mock/commit/7a35b1a3af3bfa8623f1d24f53e71928df20b69b))

# [2.2.0](https://github.com/anncwb/vite-plugin-mock/compare/v2.1.5...v2.2.0) (2021-03-02)

### Features

- add logger option ([66a75ab](https://github.com/anncwb/vite-plugin-mock/commit/66a75ab0ee5a7c8e03987e74f15b50aedd1cc29f))

## [2.1.5](https://github.com/anncwb/vite-plugin-mock/compare/v2.0.0-beta.1...v2.1.5) (2021-02-23)

### Bug Fixes

- correct sourcemap ([2140987](https://github.com/anncwb/vite-plugin-mock/commit/21409876876b845b18b5b006e98292138870a922))
- dev sourcemap ([5834b4f](https://github.com/anncwb/vite-plugin-mock/commit/5834b4f621b25371a7b0246a48fb83b9761afeed))
- fix post proxy error ([d3ae41e](https://github.com/anncwb/vite-plugin-mock/commit/d3ae41e18a5e7adae504457165ba7b34b8ebff6f))

### Features

- support sourcemap ([8c3cd9d](https://github.com/anncwb/vite-plugin-mock/commit/8c3cd9d78a9bd7f87dc7900e9bfe6c753ff3b11f))

### Performance Improvements

- imporve request log ([f9353fd](https://github.com/anncwb/vite-plugin-mock/commit/f9353fdf8149665f984729ab3c7a6749022cfdaf))

# [2.0.0-beta.1](https://github.com/anncwb/vite-plugin-mock/compare/2.0.0-beta.1...v2.0.0-beta.1) (2021-01-03)

### Bug Fixes

- Fix local development post request proxy to https ([7965604](https://github.com/anncwb/vite-plugin-mock/commit/79656046377f501da796d1be9752522a2203d69b))
- remove unnecessary and wrong usage of "try catch" ([815abde](https://github.com/anncwb/vite-plugin-mock/commit/815abde26f8f9a19322916ae01a9896a9aced33a))

### Features

- add request time ([ccbb14a](https://github.com/anncwb/vite-plugin-mock/commit/ccbb14ad623e6549781e5e902819f830a291f13f))

## [1.0.2](https://github.com/anncwb/vite-plugin-mock/compare/1.0.1...1.0.2) (2020-09-14)

### Features

- add examples ([2c5a86b](https://github.com/anncwb/vite-plugin-mock/commit/2c5a86bb75e39b6c7c9e08b1691c0541aeb104d9))

## [1.0.1](https://github.com/anncwb/vite-plugin-mock/compare/58ad7cd57e3fd0daa92e0fc59c00e09cf6ba45ad...1.0.1) (2020-09-14)

### Features

- add supportTs options,Support es6 and commonjs modules in .js folder ([37f83f5](https://github.com/anncwb/vite-plugin-mock/commit/37f83f54c3a34e049f967b0db0ac2ade401cbf58))

### Performance Improvements

- Replace typescript plug-in with a faster esbuild plug-in ([58ad7cd](https://github.com/anncwb/vite-plugin-mock/commit/58ad7cd57e3fd0daa92e0fc59c00e09cf6ba45ad))


================================================
FILE: packages/vite-plugin-mock/build.config.ts
================================================
import { defineBuildConfig } from 'unbuild'

export default defineBuildConfig({
  clean: true,
  entries: ['src/index', 'src/client'],
  declaration: true,
  rollup: {
    emitCJS: true,
  },
})


================================================
FILE: packages/vite-plugin-mock/package.json
================================================
{
  "name": "vite-plugin-mock",
  "version": "3.0.2",
  "description": "A mock plugin for vite",
  "main": "dist/index.cjs",
  "module": "dist/index.mjs",
  "types": "dist/index.d.ts",
  "exports": {
    ".": {
      "types": "./dist/index.d.ts",
      "import": "./dist/index.mjs",
      "require": "./dist/index.cjs"
    },
    "./client": {
      "types": "./dist/client.d.ts",
      "import": "./dist/client.mjs",
      "require": "./dist/client.cjs"
    }
  },
  "files": [
    "dist"
  ],
  "type": "module",
  "engines": {
    "node": ">=16.0.0"
  },
  "scripts": {
    "clean": "rimraf dist && rimraf es",
    "dev": "unbuild --stub",
    "build": "unbuild",
    "log": "conventional-changelog -p angular -i CHANGELOG.md -s",
    "prepublishOnly": "npm run build"
  },
  "keywords": [
    "vite",
    "mock",
    "hmr"
  ],
  "author": "Vben",
  "license": "MIT",
  "repository": {
    "type": "git",
    "url": "https://github.com/anncwb/vite-plugin-mock",
    "directory": "packages/vite-plugin-mock"
  },
  "bugs": {
    "url": "https://github.com/anncwb/vite-plugin-mock/issues"
  },
  "homepage": "https://github.com/anncwb/vite-plugin-mock/tree/master/#readme",
  "dependencies": {
    "bundle-require": "^4.0.1",
    "chokidar": "^3.5.3",
    "connect": "^3.7.0",
    "debug": "^4.3.4",
    "fast-glob": "^3.2.12",
    "path-to-regexp": "^6.2.1",
    "picocolors": "^1.0.0"
  },
  "peerDependencies": {
    "mockjs": ">=1.1.0",
    "vite": ">=4.0.0",
    "esbuild": ">=0.17"
  },
  "devDependencies": {
    "@types/mockjs": "^1.0.7",
    "@types/connect": "^3.4.35",
    "@types/debug": "^4.1.7",
    "@types/node": "^16.18.23",
    "mockjs": "^1.1.0",
    "rimraf": "^5.0.0",
    "tsup": "6.7.0",
    "typescript": "^5.0.4",
    "unbuild": "^1.2.1",
    "vite": "4.2.1"
  }
}


================================================
FILE: packages/vite-plugin-mock/src/client.ts
================================================
/* eslint-disable */
import type { MockMethod } from './types'

export async function createProdMockServer(mockList: any[]) {
  const Mock: any = await import('mockjs')
  const { pathToRegexp } = await import('path-to-regexp')
  Mock.XHR.prototype.__send = Mock.XHR.prototype.send
  Mock.XHR.prototype.send = function () {
    if (this.custom.xhr) {
      this.custom.xhr.withCredentials = this.withCredentials || false

      if (this.responseType) {
        this.custom.xhr.responseType = this.responseType
      }
    }
    if (this.custom.requestHeaders) {
      const headers: any = {}
      for (let k in this.custom.requestHeaders) {
        headers[k.toString().toLowerCase()] = this.custom.requestHeaders[k]
      }
      this.custom.options = Object.assign({}, this.custom.options, { headers })
    }
    this.__send.apply(this, arguments)
  }

  Mock.XHR.prototype.proxy_open = Mock.XHR.prototype.open

  Mock.XHR.prototype.open = function () {
    let responseType = this.responseType
    this.proxy_open(...arguments)
    if (this.custom.xhr) {
      if (responseType) {
        this.custom.xhr.responseType = responseType
      }
    }
  }

  for (const { url, method, response, timeout } of mockList) {
    __setupMock__(Mock, timeout)
    Mock.mock(
      pathToRegexp(url, undefined, { end: false }),
      method || 'get',
      __XHR2ExpressReqWrapper__(Mock, response),
    )
  }
}

function __param2Obj__(url: string) {
  const search = url.split('?')[1]
  if (!search) {
    return {}
  }
  return JSON.parse(
    '{"' +
      decodeURIComponent(search)
        .replace(/"/g, '\\"')
        .replace(/&/g, '","')
        .replace(/=/g, '":"')
        .replace(/\+/g, ' ') +
      '"}',
  )
}

function __XHR2ExpressReqWrapper__(_Mock: any, handle: (d: any) => any) {
  return function (options: any) {
    let result = null
    if (typeof handle === 'function') {
      const { body, type, url, headers } = options

      let b = body
      try {
        b = JSON.parse(body)
      } catch {}
      result = handle({
        method: type,
        body: b,
        query: __param2Obj__(url),
        headers,
      })
    } else {
      result = handle
    }

    return _Mock.mock(result)
  }
}

function __setupMock__(mock: any, timeout = 0) {
  timeout &&
    mock.setup({
      timeout,
    })
}

export function defineMockModule(
  fn: (config: {
    env: Record<string, any>
    mode: string
    command: 'build' | 'serve'
  }) => Promise<MockMethod[]> | MockMethod[],
) {
  return fn
}


================================================
FILE: packages/vite-plugin-mock/src/createMockServer.ts
================================================
import type { ViteMockOptions, MockMethod, Recordable, RespThisType } from './types'

import path from 'node:path'
import fs from 'node:fs'
import chokidar from 'chokidar'
import colors from 'picocolors'
import url from 'url'
import fg from 'fast-glob'
import Mock from 'mockjs'
import { pathToRegexp, match } from 'path-to-regexp'
import { isArray, isFunction, sleep, isRegExp, isAbsPath } from './utils'
import { IncomingMessage, NextHandleFunction } from 'connect'
import { bundleRequire, GetOutputFile, JS_EXT_RE } from 'bundle-require'
import type { ResolvedConfig } from 'vite'

export let mockData: MockMethod[] = []

export async function createMockServer(
  opt: ViteMockOptions = { mockPath: 'mock', configPath: 'vite.mock.config' },
  config: ResolvedConfig,
) {
  opt = {
    mockPath: 'mock',
    watchFiles: true,
    configPath: 'vite.mock.config.ts',
    logger: true,
    cors: true,
    ...opt,
  }

  if (mockData.length > 0) return
  mockData = await getMockConfig(opt, config)
  await createWatch(opt, config)
}

// request match
export async function requestMiddleware(opt: ViteMockOptions) {
  const { logger = true } = opt
  const middleware: NextHandleFunction = async (req, res, next) => {
    let queryParams: {
      query?: {
        [key: string]: any
      }
      pathname?: string | null
    } = {}

    if (req.url) {
      queryParams = url.parse(req.url, true)
    }

    const reqUrl = queryParams.pathname

    const matchRequest = mockData.find((item) => {
      if (!reqUrl || !item || !item.url) {
        return false
      }
      if (item.method && item.method.toUpperCase() !== req.method) {
        return false
      }
      return pathToRegexp(item.url).test(reqUrl)
    })

    if (matchRequest) {
      const isGet = req.method && req.method.toUpperCase() === 'GET'
      const { response, rawResponse, timeout, statusCode, url } = matchRequest

      if (timeout) {
        await sleep(timeout)
      }

      const urlMatch = match(url, { decode: decodeURIComponent })

      let query = queryParams.query as any
      if (reqUrl) {
        if ((isGet && JSON.stringify(query) === '{}') || !isGet) {
          const params = (urlMatch(reqUrl) as any).params
          if (JSON.stringify(params) !== '{}') {
            query = (urlMatch(reqUrl) as any).params || {}
          } else {
            query = queryParams.query || {}
          }
        }
      }

      const self: RespThisType = { req, res, parseJson: parseJson.bind(null, req) }
      if (isFunction(rawResponse)) {
        await rawResponse.bind(self)(req, res)
      } else {
        const body = await parseJson(req)
        res.setHeader('Content-Type', 'application/json')
        if (opt) {
          res.setHeader('Access-Control-Allow-Credentials', true)
          res.setHeader('Access-Control-Allow-Origin', req.headers.origin || '*')
        }
        res.statusCode = statusCode || 200
        const mockResponse = isFunction(response)
          ? response.bind(self)({ url: req.url as any, body, query, headers: req.headers })
          : response
        res.end(JSON.stringify(Mock.mock(mockResponse)))
      }

      logger && loggerOutput('request invoke', req.url!)
      return
    }
    next()
  }
  return middleware
}

// create watch mock
function createWatch(opt: ViteMockOptions, config: ResolvedConfig) {
  const { configPath, logger, watchFiles } = opt

  if (!watchFiles) {
    return
  }

  const { absConfigPath, absMockPath } = getPath(opt)

  if (process.env.VITE_DISABLED_WATCH_MOCK === 'true') {
    return
  }

  const watchDir = []
  const exitsConfigPath = fs.existsSync(absConfigPath)

  exitsConfigPath && configPath ? watchDir.push(absConfigPath) : watchDir.push(absMockPath)

  const watcher = chokidar.watch(watchDir, {
    ignoreInitial: true,
    // ignore files generated by `bundle require`
    ignored: '**/_*.bundled_*.(mjs|cjs)',
  })

  watcher.on('all', async (event, file) => {
    logger && loggerOutput(`mock file ${event}`, file)
    mockData = await getMockConfig(opt, config)
  })
}

// clear cache
function cleanRequireCache(opt: ViteMockOptions) {
  if (typeof require === 'undefined' || !require.cache) {
    return
  }
  const { absConfigPath, absMockPath } = getPath(opt)
  Object.keys(require.cache).forEach((file) => {
    if (file === absConfigPath || file.indexOf(absMockPath) > -1) {
      delete require.cache[file]
    }
  })
}

function parseJson(req: IncomingMessage): Promise<Recordable> {
  return new Promise((resolve) => {
    let jsonStr: Recordable = {}
    let str = ''
    req.on('data', function (chunk) {
      str += chunk
    })
    req.on('end', () => {
      try {
        // json
        jsonStr = JSON.parse(str)
      } catch (e) {
        // x-www-form-urlencoded
        const params = new URLSearchParams(str)
        const body: Recordable = {}
        params.forEach((value, key) => {
          body[key] = value
        })
        jsonStr = body
      }
      resolve(jsonStr)
      return
    })
  })
}
// load mock .ts files and watch
async function getMockConfig(opt: ViteMockOptions, config: ResolvedConfig) {
  const { absConfigPath, absMockPath } = getPath(opt)
  const { ignore, configPath, logger } = opt

  let ret: MockMethod[] = []

  if (configPath && fs.existsSync(absConfigPath)) {
    logger && loggerOutput(`load mock data from`, absConfigPath)
    ret = await resolveModule(absConfigPath, config)
    return ret
  }

  const mockFiles = fg
    .sync(`**/*.{ts,mjs,js}`, {
      cwd: absMockPath,
    })
    .filter((item) => {
      if (!ignore) {
        return true
      }
      if (isFunction(ignore)) {
        return !ignore(item)
      }
      if (isRegExp(ignore)) {
        return !ignore.test(path.basename(item))
      }
      return true
    })

  try {
    ret = []
    const resolveModulePromiseList = []

    for (let index = 0; index < mockFiles.length; index++) {
      const mockFile = mockFiles[index]
      resolveModulePromiseList.push(resolveModule(path.join(absMockPath, mockFile), config))
    }

    const loadAllResult = await Promise.all(resolveModulePromiseList)
    for (const resultModule of loadAllResult) {
      let mod = resultModule
      if (!isArray(mod)) {
        mod = [mod]
      }
      ret = [...ret, ...mod]
    }
  } catch (error: any) {
    loggerOutput(`mock reload error`, error)
    ret = []
  }
  return ret
}

// fixed file generation format
// use a random path to avoid import cache
const getOutputFile: GetOutputFile = (filepath, format) => {
  const dirname = path.dirname(filepath)
  const basename = path.basename(filepath)
  const randomname = `${Date.now()}_${Math.random().toString(36).substring(2, 15)}`
  return path.resolve(
    dirname,
    `_${basename.replace(JS_EXT_RE, `.bundled_${randomname}.${format === 'esm' ? 'mjs' : 'cjs'}`)}`,
  )
}

// Inspired by vite
// support mock .ts files
async function resolveModule(p: string, config: ResolvedConfig): Promise<any> {
  const mockData = await bundleRequire({
    filepath: p,
    getOutputFile,
  })

  let mod = mockData.mod.default || mockData.mod
  if (isFunction(mod)) {
    mod = await mod({ env: config.env, mode: config.mode, command: config.command })
  }
  return mod
}

// get custom config file path and mock dir path
function getPath(opt: ViteMockOptions) {
  const { mockPath, configPath } = opt
  const cwd = process.cwd()
  const absMockPath = isAbsPath(mockPath) ? mockPath! : path.join(cwd, mockPath || '')
  const absConfigPath = path.join(cwd, configPath || '')
  return {
    absMockPath,
    absConfigPath,
  }
}

function loggerOutput(title: string, msg: string, type: 'info' | 'error' = 'info') {
  const tag = type === 'info' ? colors.cyan(`[vite:mock]`) : colors.red(`[vite:mock-server]`)
  return console.log(
    `${colors.dim(new Date().toLocaleTimeString())} ${tag} ${colors.green(title)} ${colors.dim(
      msg,
    )}`,
  )
}


================================================
FILE: packages/vite-plugin-mock/src/index.ts
================================================
;(async () => {
  try {
    await import('mockjs')
  } catch (e) {
    throw new Error('vite-plugin-vue-mock requires mockjs to be present in the dependency tree.')
  }
})()

import type { ViteMockOptions } from './types'
import type { Plugin } from 'vite'
import { ResolvedConfig } from 'vite'
import { createMockServer, requestMiddleware } from './createMockServer'

export function viteMockServe(opt: ViteMockOptions = {}): Plugin {
  let isDev = false
  let config: ResolvedConfig

  return {
    name: 'vite:mock',
    enforce: 'pre' as const,
    configResolved(resolvedConfig) {
      config = resolvedConfig
      isDev = config.command === 'serve'
      isDev && createMockServer(opt, config)
    },

    configureServer: async ({ middlewares }) => {
      const { enable = isDev } = opt
      if (!enable) {
        return
      }
      const middleware = await requestMiddleware(opt)
      middlewares.use(middleware)
    },
  }
}

export * from './types'


================================================
FILE: packages/vite-plugin-mock/src/types.ts
================================================
import { IncomingMessage, ServerResponse } from 'http'

export interface ViteMockOptions {
  mockPath?: string
  configPath?: string
  ignore?: RegExp | ((fileName: string) => boolean)
  watchFiles?: boolean
  enable?: boolean
  logger?: boolean
  cors?: boolean
}

export interface RespThisType {
  req: IncomingMessage
  res: ServerResponse
  parseJson: () => any
}

export type MethodType = 'get' | 'post' | 'put' | 'delete' | 'patch'

export type Recordable<T = any> = Record<string, T>

export declare interface MockMethod {
  url: string
  method?: MethodType
  timeout?: number
  statusCode?: number
  response?:
    | ((
        this: RespThisType,
        opt: { url: Recordable; body: Recordable; query: Recordable; headers: Recordable },
      ) => any)
    | any
  rawResponse?: (this: RespThisType, req: IncomingMessage, res: ServerResponse) => void
}

export interface MockConfig {
  env: Record<string, any>
  mode: string
  command: 'build' | 'serve'
}


================================================
FILE: packages/vite-plugin-mock/src/utils.ts
================================================
import fs from 'fs'

const toString = Object.prototype.toString

export function is(val: unknown, type: string) {
  return toString.call(val) === `[object ${type}]`
}

// eslint-disable-next-line
export function isFunction<T = Function>(val: unknown): val is T {
  return is(val, 'Function') || is(val, 'AsyncFunction')
}

export function isArray(val: any): val is Array<any> {
  return val && Array.isArray(val)
}

export function isRegExp(val: unknown): val is RegExp {
  return is(val, 'RegExp')
}

export function isAbsPath(path: string | undefined) {
  if (!path) {
    return false
  }
  // Windows 路径格式:C:\ 或 \\ 开头,或已含盘符(D:\path\to\file)
  if (/^([a-zA-Z]:\\|\\\\|(?:\/|\uFF0F){2,})/.test(path)) {
    return true
  }
  // Unix/Linux 路径格式:/ 开头
  return /^\/[^/]/.test(path)
}

export function sleep(time: number) {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve('')
    }, time)
  })
}


================================================
FILE: packages/vite-plugin-mock/tsconfig.json
================================================
{
  "compilerOptions": {
    "target": "esnext",
    "moduleResolution": "node",
    "strict": true,
    "declaration": true,
    "noUnusedLocals": true,
    "esModuleInterop": true,
    "outDir": "dist",
    "module": "commonjs",
    "lib": ["ESNext"],
    "types": ["vite/client", "node"],
    "sourceMap": false,
    "noEmitOnError": true
  },
  "include": ["src", "tests"],
  "exclude": ["**/dist/**", "**/node_modules/**"]
}


================================================
FILE: pnpm-workspace.yaml
================================================
packages:
  - 'packages/*'
  - 'packages/playground/*'


================================================
FILE: prettier.config.js
================================================
module.exports = {
  printWidth: 100,
  tabWidth: 2,
  useTabs: false,
  semi: false,
  singleQuote: true,
  trailingComma: 'all',
}


================================================
FILE: tests/index.spec.ts
================================================
// import { discreteDir } from '../src/index';
// test('discreteDir Not included /', () => {
//   const { fileName, dirName } = discreteDir('file.svg');

//   expect(fileName).toBe('file.svg');
//   expect(dirName).toBe('');
// });


================================================
FILE: tsconfig.es.json
================================================
{
  "extends": "./tsconfig.json",
  "compilerOptions": {
    "module": "esnext",
    "outDir": "es"
  },
  "include": ["./src/createProdMockServer.ts"],
  "exclude": ["**/dist/**", "**/node_modules/**"]
}


================================================
FILE: tsconfig.json
================================================
{
  "compilerOptions": {
    "target": "esnext",
    "moduleResolution": "node",
    "strict": true,
    "declaration": true,
    "noUnusedLocals": true,
    "esModuleInterop": true,
    "outDir": "dist",
    "module": "commonjs",
    "lib": ["ESNext"],
    "types": ["vite/client", "node"],
    "sourceMap": false,
    "noEmitOnError": true
  },
  "include": ["src", "tests"],
  "exclude": ["**/dist/**", "**/node_modules/**"]
}
Download .txt
gitextract_g6l1iabh/

├── .editorconfig
├── .eslintignore
├── .eslintrc.js
├── .github/
│   ├── dependabot.yml
│   └── workflows/
│       ├── publish.yml
│       └── release.yml
├── .gitignore
├── .husky/
│   ├── .gitignore
│   ├── commit-msg
│   ├── common.sh
│   ├── lintstagedrc.js
│   └── pre-commit
├── .prettierignore
├── .vscode/
│   ├── extensions.json
│   └── settings.json
├── CHANGELOG.md
├── LICENSE
├── README.md
├── README.zh_CN.md
├── commitlint.config.js
├── package.json
├── packages/
│   ├── playground/
│   │   ├── js-example/
│   │   │   ├── .gitignore
│   │   │   ├── index.html
│   │   │   ├── mock/
│   │   │   │   ├── role.mjs
│   │   │   │   └── user.js
│   │   │   ├── package.json
│   │   │   ├── src/
│   │   │   │   ├── App.vue
│   │   │   │   ├── main.js
│   │   │   │   └── mockProdServer.js
│   │   │   └── vite.config.js
│   │   └── ts-example/
│   │       ├── .gitignore
│   │       ├── index.html
│   │       ├── mock/
│   │       │   ├── define.ts
│   │       │   ├── dep/
│   │       │   │   └── role.ts
│   │       │   └── user.ts
│   │       ├── package.json
│   │       ├── shim-vue.ts
│   │       ├── src/
│   │       │   ├── App.vue
│   │       │   ├── main.ts
│   │       │   └── mockProdServer.ts
│   │       ├── tsconfig.json
│   │       └── vite.config.ts
│   └── vite-plugin-mock/
│       ├── CHANGELOG.md
│       ├── build.config.ts
│       ├── package.json
│       ├── src/
│       │   ├── client.ts
│       │   ├── createMockServer.ts
│       │   ├── index.ts
│       │   ├── types.ts
│       │   └── utils.ts
│       └── tsconfig.json
├── pnpm-workspace.yaml
├── prettier.config.js
├── tests/
│   └── index.spec.ts
├── tsconfig.es.json
└── tsconfig.json
Download .txt
SYMBOL INDEX (29 symbols across 7 files)

FILE: packages/playground/js-example/src/mockProdServer.js
  function setupProdMockServer (line 5) | function setupProdMockServer() {

FILE: packages/playground/ts-example/src/mockProdServer.ts
  function setupProdMockServer (line 5) | async function setupProdMockServer() {

FILE: packages/vite-plugin-mock/src/client.ts
  function createProdMockServer (line 4) | async function createProdMockServer(mockList: any[]) {
  function __param2Obj__ (line 48) | function __param2Obj__(url: string) {
  function __XHR2ExpressReqWrapper__ (line 64) | function __XHR2ExpressReqWrapper__(_Mock: any, handle: (d: any) => any) {
  function __setupMock__ (line 88) | function __setupMock__(mock: any, timeout = 0) {
  function defineMockModule (line 95) | function defineMockModule(

FILE: packages/vite-plugin-mock/src/createMockServer.ts
  function createMockServer (line 18) | async function createMockServer(
  function requestMiddleware (line 37) | async function requestMiddleware(opt: ViteMockOptions) {
  function createWatch (line 111) | function createWatch(opt: ViteMockOptions, config: ResolvedConfig) {
  function cleanRequireCache (line 142) | function cleanRequireCache(opt: ViteMockOptions) {
  function parseJson (line 154) | function parseJson(req: IncomingMessage): Promise<Recordable> {
  function getMockConfig (line 180) | async function getMockConfig(opt: ViteMockOptions, config: ResolvedConfi...
  function resolveModule (line 247) | async function resolveModule(p: string, config: ResolvedConfig): Promise...
  function getPath (line 261) | function getPath(opt: ViteMockOptions) {
  function loggerOutput (line 272) | function loggerOutput(title: string, msg: string, type: 'info' | 'error'...

FILE: packages/vite-plugin-mock/src/index.ts
  function viteMockServe (line 14) | function viteMockServe(opt: ViteMockOptions = {}): Plugin {

FILE: packages/vite-plugin-mock/src/types.ts
  type ViteMockOptions (line 3) | interface ViteMockOptions {
  type RespThisType (line 13) | interface RespThisType {
  type MethodType (line 19) | type MethodType = 'get' | 'post' | 'put' | 'delete' | 'patch'
  type Recordable (line 21) | type Recordable<T = any> = Record<string, T>
  type MockMethod (line 23) | interface MockMethod {
  type MockConfig (line 37) | interface MockConfig {

FILE: packages/vite-plugin-mock/src/utils.ts
  function is (line 5) | function is(val: unknown, type: string) {
  function isFunction (line 10) | function isFunction<T = Function>(val: unknown): val is T {
  function isArray (line 14) | function isArray(val: any): val is Array<any> {
  function isRegExp (line 18) | function isRegExp(val: unknown): val is RegExp {
  function isAbsPath (line 22) | function isAbsPath(path: string | undefined) {
  function sleep (line 34) | function sleep(time: number) {
Condensed preview — 56 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (111K chars).
[
  {
    "path": ".editorconfig",
    "chars": 247,
    "preview": "root = true\n\n[*]\ncharset = utf-8\nend_of_line = lf\ntrim_trailing_whitespace = true\ninsert_final_newline = true\n\n[*.md]\nin"
  },
  {
    "path": ".eslintignore",
    "chars": 26,
    "preview": "dist\nnode_modules\nexample\n"
  },
  {
    "path": ".eslintrc.js",
    "chars": 721,
    "preview": "module.exports = {\n  root: true,\n  env: {\n    browser: true,\n    es2021: true,\n    es6: true,\n    node: true,\n  },\n  ext"
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 107,
    "preview": "version: 2\nupdates:\n  - package-ecosystem: 'yarn'\n    directory: '/'\n    schedule:\n      interval: 'daily'\n"
  },
  {
    "path": ".github/workflows/publish.yml",
    "chars": 624,
    "preview": "name: Npm Publish\n\non:\n  push:\n    branches:\n      - main\n\njobs:\n  publish-npm:\n    if: \"contains(github.event.head_comm"
  },
  {
    "path": ".github/workflows/release.yml",
    "chars": 675,
    "preview": "name: Create Release\n\non:\n  push:\n    tags:\n      - v*\n\njobs:\n  build:\n    name: Create Release\n    runs-on: ubuntu-late"
  },
  {
    "path": ".gitignore",
    "chars": 292,
    "preview": "node_modules\n.DS_Store\ndist\nes\n.npmrc\n.cache\n\ntest/upload-server/static\n\n.local\n# local env files\n.env.local\n.env.*.loca"
  },
  {
    "path": ".husky/.gitignore",
    "chars": 2,
    "preview": "_\n"
  },
  {
    "path": ".husky/commit-msg",
    "chars": 116,
    "preview": "#!/bin/sh\n\n# shellcheck source=./_/husky.sh\n. \"$(dirname \"$0\")/_/husky.sh\"\n\nnpx --no-install commitlint --edit \"$1\"\n"
  },
  {
    "path": ".husky/common.sh",
    "chars": 179,
    "preview": "#!/bin/sh\ncommand_exists () {\n  command -v \"$1\" >/dev/null 2>&1\n}\n\n# Workaround for Windows 10, Git Bash and Yarn\nif com"
  },
  {
    "path": ".husky/lintstagedrc.js",
    "chars": 249,
    "preview": "module.exports = {\n  '*.{js,jsx,ts,tsx}': ['eslint --fix', 'prettier --write'],\n  '{!(package)*.json,*.code-snippets,.!("
  },
  {
    "path": ".husky/pre-commit",
    "chars": 189,
    "preview": "#!/bin/sh\n. \"$(dirname \"$0\")/_/husky.sh\"\n. \"$(dirname \"$0\")/common.sh\"\n\n[ -n \"$CI\" ] && exit 0\n\n# Format and submit code"
  },
  {
    "path": ".prettierignore",
    "chars": 19,
    "preview": "dist/\nnode_modules\n"
  },
  {
    "path": ".vscode/extensions.json",
    "chars": 266,
    "preview": "{\n  \"recommendations\": [\n    \"octref.vetur\",\n    \"dbaeumer.vscode-eslint\",\n    \"stylelint.vscode-stylelint\",\n    \"esbenp"
  },
  {
    "path": ".vscode/settings.json",
    "chars": 4001,
    "preview": "{\n  \"typescript.tsdk\": \"./node_modules/typescript/lib\",\n  \"typescript.enablePromptUseWorkspaceTsdk\": true,\n  //========="
  },
  {
    "path": "CHANGELOG.md",
    "chars": 27336,
    "preview": "## [3.0.0]\n\n### Breaking Change\n\n- Remove the `localEnabled` and `prodEnabled` configuration and use the `enable` config"
  },
  {
    "path": "LICENSE",
    "chars": 1070,
    "preview": "MIT License\n\nCopyright (c) 2020-present, Vben\n\nPermission is hereby granted, free of charge, to any person obtaining a c"
  },
  {
    "path": "README.md",
    "chars": 6089,
    "preview": "# vite-plugin-mock\n\n**English** | [中文](./README.zh_CN.md)\n\n[![npm][npm-img]][npm-url] [![node][node-img]][node-url]\n\nPro"
  },
  {
    "path": "README.zh_CN.md",
    "chars": 5115,
    "preview": "# vite-plugin-mock\n\n**中文** | [English](./README.md)\n\n[![npm][npm-img]][npm-url] [![node][node-img]][node-url]\n\n提供本地和生产模拟"
  },
  {
    "path": "commitlint.config.js",
    "chars": 66,
    "preview": "module.exports = { extends: ['@commitlint/config-conventional'] }\n"
  },
  {
    "path": "package.json",
    "chars": 1114,
    "preview": "{\n  \"name\": \"vite-plugin-mock-monorepo\",\n  \"version\": \"2.9.8\",\n  \"private\": true,\n  \"description\": \"A mock plugin for vi"
  },
  {
    "path": "packages/playground/js-example/.gitignore",
    "chars": 35,
    "preview": "node_modules\n.DS_Store\ndist\n*.local"
  },
  {
    "path": "packages/playground/js-example/index.html",
    "chars": 337,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <link rel=\"icon\" href=\"/favicon.ico\" />\n    <"
  },
  {
    "path": "packages/playground/js-example/mock/role.mjs",
    "chars": 306,
    "preview": "export default [\n  {\n    url: '/api/getRoleById',\n    method: 'get',\n    response: ({ query }) => {\n      console.log('i"
  },
  {
    "path": "packages/playground/js-example/mock/user.js",
    "chars": 236,
    "preview": "export default [\n  {\n    url: '/api/createUser',\n    method: 'post',\n    response: ({ body }) => {\n      console.log('bo"
  },
  {
    "path": "packages/playground/js-example/package.json",
    "chars": 505,
    "preview": "{\n  \"name\": \"ts-example\",\n  \"version\": \"0.0.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"dev\": \"cross-env NODE_ENV=develop"
  },
  {
    "path": "packages/playground/js-example/src/App.vue",
    "chars": 2173,
    "preview": "<template>\n  <div class=\"container\">\n    <h1>\n      <el-link\n        type=\"success\"\n        href=\"https://github.com/ann"
  },
  {
    "path": "packages/playground/js-example/src/main.js",
    "chars": 191,
    "preview": "import { createApp } from 'vue'\nimport App from './App.vue'\n\nimport ElementPlus from 'element-plus'\nimport 'element-plus"
  },
  {
    "path": "packages/playground/js-example/src/mockProdServer.js",
    "chars": 238,
    "preview": "import { createProdMockServer } from '../../../es/createProdMockServer'\nimport roleMock from '../mock/role'\nimport userM"
  },
  {
    "path": "packages/playground/js-example/vite.config.js",
    "chars": 276,
    "preview": "import { viteMockServe } from 'vite-plugin-mock'\n\nimport vue from '@vitejs/plugin-vue'\n\nexport default ({ command }) => "
  },
  {
    "path": "packages/playground/ts-example/.gitignore",
    "chars": 36,
    "preview": "node_modules\n.DS_Store\ndist\n*.local\n"
  },
  {
    "path": "packages/playground/ts-example/index.html",
    "chars": 337,
    "preview": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <link rel=\"icon\" href=\"/favicon.ico\" />\n    <"
  },
  {
    "path": "packages/playground/ts-example/mock/define.ts",
    "chars": 479,
    "preview": "import type { MockConfig } from 'vite-plugin-mock'\n\nexport default (config: MockConfig) => {\n  return [\n    {\n      url:"
  },
  {
    "path": "packages/playground/ts-example/mock/dep/role.ts",
    "chars": 662,
    "preview": "import type { MockMethod } from 'vite-plugin-mock'\nexport default [\n  {\n    url: '/api/getRoleById',\n    method: 'get',\n"
  },
  {
    "path": "packages/playground/ts-example/mock/user.ts",
    "chars": 445,
    "preview": "import type { MockConfig } from 'vite-plugin-mock'\n\nexport default (config?: MockConfig) => {\n  return [\n    {\n      url"
  },
  {
    "path": "packages/playground/ts-example/package.json",
    "chars": 558,
    "preview": "{\n  \"name\": \"ts-example\",\n  \"version\": \"0.0.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"dev\": \"cross-env NODE_ENV=develop"
  },
  {
    "path": "packages/playground/ts-example/shim-vue.ts",
    "chars": 131,
    "preview": "declare module '*.vue' {\n  import { ComponentOptions } from 'vue'\n  const component: ComponentOptions\n  export default c"
  },
  {
    "path": "packages/playground/ts-example/src/App.vue",
    "chars": 3666,
    "preview": "<template>\n  <div class=\"container\">\n    <h1>\n      <el-link\n        type=\"success\"\n        href=\"https://github.com/ann"
  },
  {
    "path": "packages/playground/ts-example/src/main.ts",
    "chars": 361,
    "preview": "import { createApp } from 'vue'\nimport App from './App.vue'\n\nimport ElementPlus from 'element-plus'\nimport 'element-plus"
  },
  {
    "path": "packages/playground/ts-example/src/mockProdServer.ts",
    "chars": 279,
    "preview": "import { createProdMockServer } from 'vite-plugin-mock/client'\nimport roleMock from '../mock/dep/role'\nimport userMockFn"
  },
  {
    "path": "packages/playground/ts-example/tsconfig.json",
    "chars": 819,
    "preview": "{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"strict\": t"
  },
  {
    "path": "packages/playground/ts-example/vite.config.ts",
    "chars": 323,
    "preview": "import { viteMockServe } from 'vite-plugin-mock'\n\nimport { UserConfigExport } from 'vite'\nimport vue from '@vitejs/plugi"
  },
  {
    "path": "packages/vite-plugin-mock/CHANGELOG.md",
    "chars": 24419,
    "preview": "## [2.9.8](https://github.com/anncwb/vite-plugin-mock/compare/v2.9.0...v2.9.8) (2023-04-16)\n\n### Bug Fixes\n\n- can't upda"
  },
  {
    "path": "packages/vite-plugin-mock/build.config.ts",
    "chars": 195,
    "preview": "import { defineBuildConfig } from 'unbuild'\n\nexport default defineBuildConfig({\n  clean: true,\n  entries: ['src/index', "
  },
  {
    "path": "packages/vite-plugin-mock/package.json",
    "chars": 1792,
    "preview": "{\n  \"name\": \"vite-plugin-mock\",\n  \"version\": \"3.0.2\",\n  \"description\": \"A mock plugin for vite\",\n  \"main\": \"dist/index.c"
  },
  {
    "path": "packages/vite-plugin-mock/src/client.ts",
    "chars": 2515,
    "preview": "/* eslint-disable */\nimport type { MockMethod } from './types'\n\nexport async function createProdMockServer(mockList: any"
  },
  {
    "path": "packages/vite-plugin-mock/src/createMockServer.ts",
    "chars": 7903,
    "preview": "import type { ViteMockOptions, MockMethod, Recordable, RespThisType } from './types'\n\nimport path from 'node:path'\nimpor"
  },
  {
    "path": "packages/vite-plugin-mock/src/index.ts",
    "chars": 967,
    "preview": ";(async () => {\n  try {\n    await import('mockjs')\n  } catch (e) {\n    throw new Error('vite-plugin-vue-mock requires mo"
  },
  {
    "path": "packages/vite-plugin-mock/src/types.ts",
    "chars": 969,
    "preview": "import { IncomingMessage, ServerResponse } from 'http'\n\nexport interface ViteMockOptions {\n  mockPath?: string\n  configP"
  },
  {
    "path": "packages/vite-plugin-mock/src/utils.ts",
    "chars": 919,
    "preview": "import fs from 'fs'\n\nconst toString = Object.prototype.toString\n\nexport function is(val: unknown, type: string) {\n  retu"
  },
  {
    "path": "packages/vite-plugin-mock/tsconfig.json",
    "chars": 430,
    "preview": "{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"strict\": true,\n    \"declaration\": "
  },
  {
    "path": "pnpm-workspace.yaml",
    "chars": 55,
    "preview": "packages:\n  - 'packages/*'\n  - 'packages/playground/*'\n"
  },
  {
    "path": "prettier.config.js",
    "chars": 133,
    "preview": "module.exports = {\n  printWidth: 100,\n  tabWidth: 2,\n  useTabs: false,\n  semi: false,\n  singleQuote: true,\n  trailingCom"
  },
  {
    "path": "tests/index.spec.ts",
    "chars": 232,
    "preview": "// import { discreteDir } from '../src/index';\n// test('discreteDir Not included /', () => {\n//   const { fileName, dirN"
  },
  {
    "path": "tsconfig.es.json",
    "chars": 205,
    "preview": "{\n  \"extends\": \"./tsconfig.json\",\n  \"compilerOptions\": {\n    \"module\": \"esnext\",\n    \"outDir\": \"es\"\n  },\n  \"include\": [\""
  },
  {
    "path": "tsconfig.json",
    "chars": 430,
    "preview": "{\n  \"compilerOptions\": {\n    \"target\": \"esnext\",\n    \"moduleResolution\": \"node\",\n    \"strict\": true,\n    \"declaration\": "
  }
]

About this extraction

This page contains the full source code of the anncwb/vite-plugin-mock GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 56 files (99.7 KB), approximately 35.1k tokens, and a symbol index with 29 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!