版博士V2.0程序
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

2 роки тому
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. // @ts-nocheck
  2. /**
  3. * issue: https://github.com/vbenjs/vite-plugin-mock/issues/47
  4. * fix: https://github.com/vbenjs/vite-plugin-mock/issues/47#issuecomment-982724613
  5. */
  6. import Mock from 'mockjs'
  7. export function createFetchSever(mockList: any[]) {
  8. if (!window['originFetch']) {
  9. window['originFetch'] = window.fetch
  10. window.fetch = function (fetchUrl: string, init: any) {
  11. const currentMock = mockList.find((mi) => fetchUrl.includes(mi.url))
  12. if (currentMock) {
  13. const result = createFetchReturn(currentMock, init)
  14. return result
  15. } else {
  16. return window['originFetch'](fetchUrl, init)
  17. }
  18. }
  19. }
  20. }
  21. function __param2Obj__(url: string) {
  22. const search = url.split('?')[1]
  23. if (!search) {
  24. return {}
  25. }
  26. return JSON.parse(
  27. '{"' +
  28. decodeURIComponent(search)
  29. .replace(/"/g, '\\"')
  30. .replace(/&/g, '","')
  31. .replace(/=/g, '":"')
  32. .replace(/\+/g, ' ') +
  33. '"}'
  34. )
  35. }
  36. function __Fetch2ExpressReqWrapper__(handle: () => any) {
  37. return function (options: any) {
  38. let result = null
  39. if (typeof handle === 'function') {
  40. const { body, method, url, headers } = options
  41. let b = body
  42. b = JSON.parse(body)
  43. result = handle({
  44. method,
  45. body: b,
  46. query: __param2Obj__(url),
  47. headers,
  48. })
  49. } else {
  50. result = handle
  51. }
  52. return Mock.mock(result)
  53. }
  54. }
  55. const sleep = (delay = 0) => {
  56. if (delay) {
  57. return new Promise((resolve) => {
  58. setTimeout(resolve, delay)
  59. })
  60. }
  61. return null
  62. }
  63. async function createFetchReturn(mock: any, init) {
  64. const { timeout, response } = mock
  65. const mockFn = __Fetch2ExpressReqWrapper__(response)
  66. const data = mockFn(init)
  67. await sleep(timeout)
  68. const result = {
  69. ok: true,
  70. status: 200,
  71. clone() {
  72. return result
  73. },
  74. text() {
  75. return Promise.resolve(data)
  76. },
  77. json() {
  78. return Promise.resolve(data)
  79. },
  80. }
  81. return result
  82. }