{"version":3,"file":"mock.mjs","sources":["../../../../packages/mock/src/status.error.ts","../../../../packages/mock/src/mock.config.ts","../../../../packages/mock/src/provide.ts","../../../../packages/mock/src/mock.service.ts","../../../../packages/mock/src/mock.interceptor.ts","../../../../packages/mock/src/utils.ts","../../../../packages/mock/mock.ts"],"sourcesContent":["export class MockStatusError {\n  statusText?: string;\n\n  constructor(\n    public status: number,\n    public error?: any\n  ) {}\n}\n","import type { AlainMockConfig } from '@delon/util/config';\n\nexport const MOCK_DEFULAT_CONFIG: AlainMockConfig = {\n  delay: 300,\n  force: false,\n  log: true\n};\n","import { EnvironmentProviders, InjectionToken, makeEnvironmentProviders } from '@angular/core';\n\nimport { MockOptions } from './interface';\n\nexport const DELON_MOCK_CONFIG = new InjectionToken<MockOptions>('alain-mock-config');\n\nexport function provideMockConfig(config?: MockOptions): EnvironmentProviders {\n  return makeEnvironmentProviders([{ provide: DELON_MOCK_CONFIG, useValue: config }]);\n}\n","import { inject, Injectable, OnDestroy } from '@angular/core';\n\nimport { AlainConfigService, AlainMockConfig } from '@delon/util/config';\n\nimport { MockCachedRule, MockRule } from './interface';\nimport { MOCK_DEFULAT_CONFIG } from './mock.config';\nimport { DELON_MOCK_CONFIG } from './provide';\n\n@Injectable({ providedIn: 'root' })\nexport class MockService implements OnDestroy {\n  private readonly cogSrv = inject(AlainConfigService);\n  private readonly options = inject(DELON_MOCK_CONFIG, { optional: true });\n  private cached: MockCachedRule[] = [];\n  readonly config: AlainMockConfig;\n\n  constructor() {\n    this.config = this.cogSrv.merge('mock', MOCK_DEFULAT_CONFIG)!;\n    this.setData(this.options?.data);\n  }\n\n  /**\n   * Reset request data\n   *\n   * 重新设置请求数据\n   */\n  setData(data: any): void {\n    this.applyMock(data);\n  }\n\n  // #region parse rule\n\n  private applyMock(data: any): void {\n    this.cached = [];\n    try {\n      this.realApplyMock(data);\n    } catch (e) {\n      this.outputError(e);\n    }\n  }\n\n  private realApplyMock(data: any): void {\n    if (!data) return;\n    Object.keys(data).forEach((key: string) => {\n      const rules = data[key];\n      if (!rules) return;\n      Object.keys(rules).forEach((ruleKey: string) => {\n        const value = rules[ruleKey];\n        if (!(typeof value === 'function' || typeof value === 'object' || typeof value === 'string')) {\n          throw Error(\n            `mock value of [${key}-${ruleKey}] should be function or object or string, but got ${typeof value}`\n          );\n        }\n        const rule = this.genRule(ruleKey, value);\n        if (['GET', 'POST', 'PUT', 'HEAD', 'DELETE', 'PATCH', 'OPTIONS'].indexOf(rule.method) === -1) {\n          throw Error(`method of ${key}-${ruleKey} is not valid`);\n        }\n        const item = this.cached.find(w => w.url === rule.url && w.method === rule.method);\n        if (item) {\n          item.callback = rule.callback;\n        } else {\n          this.cached.push(rule);\n        }\n      });\n    });\n    // regular ordering\n    this.cached.sort((a, b) => (b.martcher ?? '').toString().length - (a.martcher ?? '').toString().length);\n  }\n\n  private genRule(key: string, callback: any): MockCachedRule {\n    let method = 'GET';\n    let url = key;\n\n    if (key.indexOf(' ') > -1) {\n      const splited = key.split(' ');\n      method = splited[0].toLowerCase();\n      url = splited[1];\n    }\n\n    let martcher: RegExp | null = null;\n    let segments: string[] = [];\n    if (~url.indexOf(':')) {\n      segments = url!\n        .split('/')\n        .filter(segment => segment.startsWith(':'))\n        .map(v => v.substring(1));\n      const reStr = url!\n        .split('/')\n        .map(segment => (segment.startsWith(':') ? `([^/]+)` : segment))\n        .join('/');\n      martcher = new RegExp(`^${reStr}`, 'i');\n    } else if (/(\\([^)]+\\))/i.test(url)) {\n      martcher = new RegExp(url, 'i');\n    }\n\n    return {\n      url,\n      martcher,\n      segments,\n      callback,\n      method: method.toUpperCase()\n    };\n  }\n\n  private outputError(error: any): void {\n    const filePath = error.message.split(': ')[0];\n    const errors = (error.stack as string)\n      .split('\\n')\n      .filter(line => line.trim().indexOf('at ') !== 0)\n      .map(line => line.replace(`${filePath}: `, ''));\n    errors.splice(1, 0, '');\n\n    console.group();\n    console.warn(`==========Failed to parse mock config.==========`);\n    console.log(errors.join('\\n'));\n    console.groupEnd();\n\n    throw error;\n  }\n\n  // #endregion\n\n  getRule(method: string | null | undefined, url: string): MockRule | null {\n    method = (method || 'GET').toUpperCase();\n    const params: any = {};\n    const list = this.cached.filter(w => w.method === method && (w.martcher ? w.martcher.test(url) : w.url === url));\n    if (list.length === 0) return null;\n    const ret = list.find(w => w.url === url) ?? list[0];\n    if (ret.martcher) {\n      const execArr = ret.martcher.exec(url);\n      execArr!.slice(1).map((value: string, index: number) => {\n        params[ret.segments[index]] = value;\n      });\n    }\n    return {\n      url,\n      method: ret.method,\n      params,\n      callback: ret.callback\n    };\n  }\n\n  clearCache(): void {\n    this.cached = [];\n  }\n\n  get rules(): MockCachedRule[] {\n    return this.cached;\n  }\n\n  ngOnDestroy(): void {\n    this.clearCache();\n  }\n}\n","import { HttpErrorResponse, HttpResponse, HttpResponseBase, HttpInterceptorFn } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { Observable, of, throwError, delay, isObservable, from, map, switchMap } from 'rxjs';\n\nimport { deepCopy } from '@delon/util/other';\n\nimport { MockRequest } from './interface';\nimport { MockService } from './mock.service';\nimport { MockStatusError } from './status.error';\n\nexport const mockInterceptor: HttpInterceptorFn = (req, next) => {\n  const src = inject(MockService);\n  const config = src.config;\n  const rule = src.getRule(req.method, req.url.split('?')[0]);\n  if (!rule && !config.force) {\n    return next(req);\n  }\n\n  let res$: Observable<any>;\n  switch (typeof rule!.callback) {\n    case 'function': {\n      const mockRequest: MockRequest = {\n        original: req,\n        body: req.body,\n        queryString: {},\n        headers: {},\n        params: rule!.params\n      };\n      const urlParams = req.url.split('?');\n      if (urlParams.length > 1) {\n        urlParams[1].split('&').forEach(item => {\n          const itemArr = item.split('=');\n          const key = itemArr[0];\n          const value = itemArr[1];\n          // is array\n          if (Object.keys(mockRequest.queryString).includes(key)) {\n            if (!Array.isArray(mockRequest.queryString[key])) {\n              mockRequest.queryString[key] = [mockRequest.queryString[key]];\n            }\n            mockRequest.queryString[key].push(value);\n          } else {\n            mockRequest.queryString[key] = value;\n          }\n        });\n      }\n      req.params.keys().forEach(key => (mockRequest.queryString[key] = req.params.get(key)));\n      req.headers.keys().forEach(key => (mockRequest.headers[key] = req.headers.get(key)));\n\n      try {\n        const fnRes = rule!.callback.call(this, mockRequest);\n        res$ = isObservable(fnRes) ? fnRes : from(Promise.resolve(fnRes));\n      } catch (e: any) {\n        res$ = of(\n          new HttpErrorResponse({\n            url: req.url,\n            headers: req.headers,\n            status: e instanceof MockStatusError ? e.status : 400,\n            statusText: e.statusText ?? 'Unknown Error',\n            error: e.error\n          })\n        );\n      }\n      break;\n    }\n    default:\n      res$ = of(rule!.callback);\n      break;\n  }\n\n  res$ = res$.pipe(\n    map(res => {\n      return res instanceof HttpResponseBase\n        ? res\n        : new HttpResponse({\n            status: 200,\n            url: req.url,\n            body: deepCopy(res)\n          });\n    }),\n    map((res: HttpResponseBase) => {\n      const anyRes: any = res;\n      if (anyRes.body) {\n        anyRes.body = deepCopy(anyRes.body);\n      }\n      if (config.log) {\n        console.log(`%c👽${req.method}->${req.urlWithParams}->request`, 'background:#000;color:#bada55', req);\n        console.log(`%c👽${req.method}->${req.urlWithParams}->response`, 'background:#000;color:#bada55', res);\n      }\n      return res;\n    }),\n    switchMap((res: HttpResponseBase) => (res instanceof HttpErrorResponse ? throwError(() => res) : of(res)))\n  );\n\n  return res$.pipe(delay(config.delay!));\n};\n","/**\n * Used to simulate delays\n */\nexport function delay(ms: number): Promise<void> {\n  return new Promise(resolve => setTimeout(resolve, ms));\n}\n\n/**\n * Return a random number\n */\nexport function r(min = 1, max = 100): number {\n  return Math.floor(Math.random() * (max - min + 1) + min);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["this","delay"],"mappings":"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"}