{"version":3,"sources":["jsdelivr-header.js","/npm/sav@1.0.42/dist/sav.js"],"names":[],"mappings":"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","file":"/npm/sav@1.0.42/dist/sav.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/sav@1.0.42/dist/sav.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar fs = require('fs');\nvar path = require('path');\n\n// https://github.com/nodejs/node/blob/f1653cc9b80b521ef5b129537ce1df9098bbdc1b/lib/_http_server.js#L18-L81\r\nlet STATUS_CODES = {\r\n  100: 'Continue',\r\n  101: 'Switching Protocols',\r\n  102: 'Processing',\r\n  200: 'OK', // 操作成功时使用\r\n  201: 'Created',\r\n  202: 'Accepted',\r\n  203: 'Non-Authoritative Information',\r\n  204: 'No Content',  // 不需要返回内容时使用\r\n  205: 'Reset Content',\r\n  206: 'Partial Content',\r\n  207: 'Multi-Status',\r\n  208: 'Already Reported',\r\n  226: 'IM Used',\r\n  300: 'Multiple Choices',\r\n  301: 'Moved Permanently',\r\n  302: 'Found',\r\n  303: 'See Other',\r\n  304: 'Not Modified',\r\n  305: 'Use Proxy',\r\n  307: 'Temporary Redirect',\r\n  308: 'Permanent Redirect',\r\n  400: 'Bad Request', // 请求参数不正确时使用\r\n  401: 'Unauthorized', // 没有认证时使用\r\n  402: 'Payment Required',\r\n  403: 'Forbidden', // 没有权限时使用\r\n  404: 'Not Found', // 资源没找到\r\n  405: 'Method Not Allowed', // 方法不支持\r\n  406: 'Not Acceptable',\r\n  407: 'Proxy Authentication Required',\r\n  408: 'Request Timeout',\r\n  409: 'Conflict',\r\n  410: 'Gone',\r\n  411: 'Length Required',\r\n  412: 'Precondition Failed',\r\n  413: 'Payload Too Large',\r\n  414: 'URI Too Long',\r\n  415: 'Unsupported Media Type',\r\n  416: 'Range Not Satisfiable',\r\n  417: 'Expectation Failed',\r\n  418: 'I\\'m a teapot',\r\n  421: 'Misdirected Request',\r\n  422: 'Unprocessable Entity',\r\n  423: 'Locked',\r\n  424: 'Failed Dependency',\r\n  425: 'Unordered Collection',\r\n  426: 'Upgrade Required',\r\n  428: 'Precondition Required',\r\n  429: 'Too Many Requests',\r\n  431: 'Request Header Fields Too Large',\r\n  451: 'Unavailable For Legal Reasons',\r\n  500: 'Internal Server Error',\r\n  501: 'Not Implemented',\r\n  502: 'Bad Gateway',\r\n  503: 'Service Unavailable',\r\n  504: 'Gateway Timeout',\r\n  505: 'HTTP Version Not Supported',\r\n  506: 'Variant Also Negotiates',\r\n  507: 'Insufficient Storage',\r\n  508: 'Loop Detected',\r\n  509: 'Bandwidth Limit Exceeded',\r\n  510: 'Not Extended',\r\n  511: 'Network Authentication Required'\r\n};\r\n\r\nclass Exception extends Error {\r\n  constructor (message, customMessage) {\r\n    if (message instanceof Error) {\r\n      super(message.message);\r\n      this.stacks = (message.stacks && message.stacks.slice()) || [];\r\n      this.stacks.push(message);\r\n      delete message.stacks;\r\n      if (customMessage) {\r\n        this.message = customMessage;\r\n      }\r\n    } else {\r\n      super(message);\r\n      this.stacks = [];\r\n    }\r\n  }\r\n}\r\n\r\nclass HttpError extends Exception {\r\n  constructor (status, message) {\r\n    super(message || STATUS_CODES[status]);\r\n    this.status = status;\r\n  }\r\n}\n\nfunction unwrapExports (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nfunction createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nvar savUtil_cjs = createCommonjsModule(function (module, exports) {\n'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction toStringType(val) {\n  return Object.prototype.toString.call(val).slice(8, -1);\n}\n\nconst isArray = Array.isArray;\n\nfunction isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\n\nfunction isString(arg) {\n  return typeof arg === 'string';\n}\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\n\nfunction isObject(arg) {\n  return toStringType(arg) === 'Object' && arg !== null;\n}\n\nfunction isNumber(arg) {\n  return typeof arg === 'number' && !isNaN(arg);\n}\n\nfunction isInteger(arg) {\n  return isNumber(arg) && parseInt(arg) === arg;\n}\n\nfunction isUndefined(arg) {\n  return arg === undefined;\n}\n\nfunction isNull(arg) {\n  return arg === null;\n}\n\nfunction isNan(arg) {\n  return typeof arg === 'number' && isNaN(arg);\n}\n\nfunction isRegExp(arg) {\n  return toStringType(arg) === 'RegExp';\n}\n\nfunction isDate(arg) {\n  return toStringType(arg) === 'Date';\n}\n\nfunction typeValue(arg) {\n  if (isNan(arg)) {\n    return 'Nan';\n  }\n  switch (arg) {\n    case undefined:\n      return 'Undefined';\n    case null:\n      return 'Null';\n    default:\n      return toStringType(arg);\n  }\n}\n\nconst isInt = isInteger;\nfunction isUint(arg) {\n  return isInteger(arg) && arg >= 0;\n}\n\nfunction isAsync(func) {\n  return isFunction(func) && func.constructor.name === 'AsyncFunction';\n}\n\nfunction isPromise(obj) {\n  return obj && isFunction(obj.then);\n}\n\nlet types = {\n  isBoolean,\n  isString,\n  isNumber,\n  isObject,\n  isArray,\n  isFunction,\n  isRegExp,\n  isDate,\n  isNull,\n  isUndefined,\n  isInt,\n  isUint\n};\n\nfunction defined(val) {\n  return val !== 'undefined';\n}\n\nlet probe = {\n  Map: defined(typeof Map),\n  Proxy: defined(typeof Proxy),\n  MessageChannel: defined(typeof MessageChannel),\n  localStorage: defined(typeof localStorage),\n  XMLHttpRequest: defined(typeof XMLHttpRequest),\n  MutationObserver: defined(typeof MutationObserver),\n  FormData: defined(typeof FormData),\n  window: defined(typeof window),\n  document: defined(typeof document)\n};\n\n/*\n * @Description      URL解析\n * @File             url.js\n * @Auth             jetiny@hfjy.com\n */\n\n// jsuri https://code.google.com/r/jonhwendell-jsuri/\n// https://username:password@www.test.com:8080/path/index.html?this=that&some=thing#content\nconst REKeys = ['source', 'protocol', 'authority', 'userInfo', 'user', 'password', 'host', 'port', 'relative', 'path', 'directory', 'file', 'query', 'anchor'];\nconst URL_RE = /^(?:(?![^:@]+:[^:@/]*@)([^:/?#.]+):)?(?:\\/\\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:/?#]*)(?::(\\d*))?)(((\\/(?:[^?#](?![^?#/]*\\.[^?#/.]+(?:[?#]|$)))*\\/?)?([^?#/]*))(?:\\?([^#]*))?(?:#(.*))?)/;\n\nfunction parseUrl(str) {\n  let _uri = {};\n  let _m = URL_RE.exec(str || '');\n  let _i = REKeys.length;\n  while (_i--) {\n    _uri[REKeys[_i]] = _m[_i] || '';\n  }\n  return _uri;\n}\n\nfunction stringifyUrl(uri) {\n  let str = '';\n  if (uri) {\n    if (uri.host) {\n      if (uri.protocol) str += uri.protocol + ':';\n      str += '//';\n      if (uri.user) str += uri.user + ':';\n      if (uri.password) str += uri.password + '@';\n      str += uri.host;\n      if (uri.port) str += ':' + uri.port;\n    }\n    str += uri.path || '';\n    if (uri.query) str += '?' + uri.query;\n    if (uri.anchor) str += '#' + uri.anchor;\n  }\n  return str;\n}\n\nconst Url = {\n  parse: parseUrl,\n  stringify: stringifyUrl\n};\n\nconst _encode = encodeURIComponent;\nconst r20 = /%20/g;\nconst rbracket = /\\[]$/;\n\nfunction buildParams(prefix, obj, add) {\n  if (Array.isArray(obj)) {\n    // Serialize array item.\n    obj.forEach(function (v, i) {\n      if (rbracket.test(prefix)) {\n        // Treat each array item as a scalar.\n        add(prefix, v);\n      } else {\n        // Item is non-scalar (array or object), encode its numeric index.\n        buildParams(prefix + '[' + (typeof v === 'object' ? i : '') + ']', v, add);\n      }\n    });\n  } else if (isObject(obj)) {\n    // Serialize object item.\n    for (let name in obj) {\n      buildParams(prefix + '[' + name + ']', obj[name], add);\n    }\n  } else {\n    // Serialize scalar item.\n    add(prefix, obj);\n  }\n}\n\n// # http://stackoverflow.com/questions/1131630/the-param-inverse-function-in-javascript-jquery\n// a[b]=1&a[c]=2&d[]=3&d[]=4&d[2][e]=5 <=> { a: { b: 1, c: 2 }, d: [ 3, 4, { e: 5 } ] }\nfunction parseQuery(str, opts = {}) {\n  let _querys = {};\n  decodeURIComponent(str || '').replace(/\\+/g, ' ')\n  // (optional no-capturing & )(key)=(value)\n  .replace(/(?:^|&)([^&=]*)=?([^&]*)/g, function ($0, _name, _value) {\n    if (_name) {\n      let _path, _acc, _tmp, _ref;\n      (_path = []).unshift(_name = _name.replace(/\\[([^\\]]*)]/g, function ($0, _k) {\n        _path.push(_k);\n        return '';\n      }));\n      _ref = _querys;\n      for (let j = 0; j < _path.length - 1; j++) {\n        _acc = _path[j];\n        _tmp = _path[j + 1];\n        if (!_ref[_acc]) {\n          _ref[_acc] = _tmp === '' || /^[0-9]+$/.test(_tmp) ? [] : {};\n        }\n        _ref = _ref[_acc];\n      }\n      if (opts.boolval) {\n        // first\n        if (_value === 'true') {\n          _value = true;\n        } else if (_value === 'false') {\n          _value = false;\n        }\n      } else if (opts.intval) {\n        // skip \"true\" & \"false\"\n        if (_tmp = parseInt(_value) === _value) {\n          _value = _tmp;\n        }\n      }\n      if ((_acc = _path[_path.length - 1]) === '') {\n        _ref.push(_value);\n      } else {\n        _ref[_acc] = _value;\n      }\n    }\n  });\n  return _querys;\n}\n\nfunction stringifyQuery(query) {\n  // # http://api.jquery.com/jQuery.param\n  let _add = (key, value) => {\n    /* jshint eqnull:true */\n    _str.push(_encode(key) + '=' + (value === null || value === undefined ? '' : _encode(value)));\n    // _str.push(( key ) + \"=\" +  (value == null ? \"\" : ( value )));\n  };\n  let _str = [];\n  query || (query = {});\n  for (let x in query) {\n    buildParams(x, query[x], _add);\n  }\n  return _str.join('&').replace(r20, '+');\n}\n\nconst Query = {\n  parse: parseQuery,\n  stringify: stringifyQuery\n};\n\nfunction extend() {\n  // form jQuery & remove this\n  let options, name, src, copy, copyIsArray, clone;\n  let target = arguments[0] || {};\n  let i = 1;\n  let length = arguments.length;\n  let deep = false;\n  if (isBoolean(target)) {\n    deep = target;\n    target = arguments[i] || {};\n    i++;\n  }\n  if (typeof target !== 'object' && !isFunction(target)) {\n    target = {};\n  }\n  for (; i < length; i++) {\n    options = arguments[i];\n    /* jshint eqnull:true */\n    if (options != null) {\n      for (name in options) {\n        src = target[name];\n        copy = options[name];\n        if (target !== copy) {\n          if (deep && copy && (isObject(copy) || (copyIsArray = isArray(copy)))) {\n            if (copyIsArray) {\n              copyIsArray = false;\n              clone = src && isArray(src) ? src : [];\n            } else {\n              clone = src && isObject(src) ? src : {};\n            }\n            target[name] = extend(deep, clone, copy);\n          } else {\n            target[name] = copy;\n          }\n        }\n      }\n    }\n  }\n  return target;\n}\n\nfunction clone(val) {\n  if (isArray(val)) {\n    return extend(true, [], val);\n  } else if (isObject(val)) {\n    return extend(true, {}, val);\n  }\n  return extend(true, [], [val])[0];\n}\n\n/**\n * 对象或数组遍历\n * @param  {Array|Object} obj      要遍历的对象\n * @param  {Function} iterator 遍历函数，统一遵循值在前的模式\n * @param  {Mixed} context  上下文对象\n * @return {Mixed}          返回要遍历的对象\n *\n * @example\n * each(['a','b'], function(val, key){\n *     if (val == 'a') {\n *         console.log(val);\n *         return false;\n *     }\n * });\n */\nfunction each(obj, iterator, context) {\n  if (obj) {\n    let _length = obj.length;\n    let _key;\n    if (_length === +_length) {\n      // array like\n      for (_key = 0; _key < _length; _key++) {\n        if (iterator.call(context, obj[_key], _key) === false) {\n          return obj;\n        }\n      }\n    } else {\n      // object\n      for (_key in obj) {\n        if (obj.hasOwnProperty(_key)) {\n          if (iterator.call(context, obj[_key], _key) === false) {\n            return obj;\n          }\n        }\n      }\n    }\n  }\n  return obj;\n}\n\nfunction prop(target, key, value) {\n  if (isObject(key)) {\n    for (let name in key) {\n      Object.defineProperty(target, name, { value: key[name], writable: true, configurable: true });\n    }\n  } else {\n    Object.defineProperty(target, key, { value, writable: true, configurable: true });\n  }\n}\n\nfunction makePropFunc(target, propName) {\n  if (!target._props_) {\n    prop(target, '_props_', ['_props_']);\n  }\n  let props = target._props_;\n  return (key, value) => {\n    if (isObject(key)) {\n      for (let name in key) {\n        Object.defineProperty(target, name, { [`${propName}`]: key[name], writable: true, configurable: true });\n        props.push(name);\n      }\n    } else {\n      let descriptor = { [`${propName}`]: value, configurable: true };\n      if (propName === 'value') {\n        descriptor.writable = true;\n      }\n      Object.defineProperty(target, key, descriptor);\n      props.push(key);\n    }\n  };\n}\n\nfunction delProps(target) {\n  if (target._props_) {\n    target._props_.forEach(it => {\n      delete target[it];\n    });\n  }\n}\n\nfunction makeProp(ctx, name) {\n  if (ctx.prop) {\n    return ctx.prop;\n  }\n  let prop = makePropFunc(ctx, 'value');\n  prop.getter = makePropFunc(ctx, 'get');\n  prop.setter = makePropFunc(ctx, 'set');\n  if (isString(name) || isUndefined(name)) {\n    prop(name || 'ctx', ctx);\n  }\n  prop('prop', prop);\n  return prop;\n}\n\nfunction bindEvent(target) {\n  let _events = {};\n  prop(target, 'on', (event, fn) => {\n    (_events[event] || (_events[event] = [])).push(fn);\n  });\n\n  prop(target, 'before', (event, fn) => {\n    (_events[event] || (_events[event] = [])).unshift(fn);\n  });\n\n  prop(target, 'off', (event, fn) => {\n    if (_events[event]) {\n      let list = _events[event];\n      if (fn) {\n        let pos = list.indexOf(fn);\n        if (pos !== -1) {\n          list.splice(pos, 1);\n        }\n      } else {\n        delete _events[event];\n      }\n    }\n  });\n\n  prop(target, 'once', (event, fn) => {\n    let once = (...args) => {\n      target.off(event, fn);\n      fn(...args);\n    };\n    target.on(event, once);\n  });\n\n  prop(target, 'subscribe', (event, fn) => {\n    target.on(event, fn);\n    return () => {\n      target.off(event, fn);\n    };\n  });\n\n  prop(target, 'emit', (event, ...args) => {\n    if (_events[event]) {\n      let list = _events[event].slice();\n      let fn;\n      while (fn = list.shift()) {\n        fn(...args);\n      }\n    }\n  });\n}\n\nfunction unique(arr) {\n  if (!Array.isArray(arr)) {\n    throw new TypeError('array-unique expects an array.');\n  }\n  let len = arr.length;\n  let i = -1;\n  while (i++ < len) {\n    let j = i + 1;\n    for (; j < arr.length; ++j) {\n      if (arr[i] === arr[j]) {\n        arr.splice(j--, 1);\n      }\n    }\n  }\n  return arr;\n}\n\nfunction isPromiseLike(obj) {\n  return !!(obj && obj.then);\n}\n\nfunction uuid() {\n  return s4() + s4() + '-' + s4() + '-' + s4() + '-' + s4() + '-' + s4() + s4() + s4();\n}\n\nfunction guid() {\n  return new Date().getTime().toString(32) + Math.floor(Math.random() * 10000000000).toString(32) + s4();\n}\n\nfunction shortId() {\n  let a = Math.random() + new Date().getTime();\n  return a.toString(16).replace('.', '');\n}\n\nfunction s4() {\n  return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);\n}\n\nfunction inherits(ctor, SuperCtor, useSuper) {\n  if (Object.setPrototypeOf) {\n    Object.setPrototypeOf(ctor.prototype, SuperCtor.prototype);\n  } else {\n    ctor.prototype = new SuperCtor();\n    ctor.prototype.constructor = SuperCtor;\n  }\n  if (useSuper) {\n    ctor.super_ = SuperCtor;\n  }\n  return ctor;\n}\n\nfunction strRepeat(s, n) {\n  return new Array(Math.max(n || 0, 0) + 1).join(s);\n}\n\nfunction noop() {}\n\nfunction splitEach(str, callback, chr, context) {\n  return str.split(chr || ' ').forEach(callback, context);\n}\n\nfunction proxy(fn, context) {\n  return function () {\n    fn.apply(context, arguments);\n  };\n}\n\nfunction formatDate(fmt, date) {\n  if (!fmt) fmt = 'yyyy-MM-dd';\n  if (!date) {\n    date = new Date();\n  } else {\n    date = new Date(date);\n  }\n  let o = {\n    'M+': date.getMonth() + 1, // 月份\n    'd+': date.getDate(), // 日\n    'h+': date.getHours(), // 小时\n    'm+': date.getMinutes(), // 分\n    's+': date.getSeconds(), // 秒\n    'q+': Math.floor((date.getMonth() + 3) / 3), // 季度\n    'S': date.getMilliseconds() // 毫秒\n  };\n  if (/(y+)/.test(fmt)) {\n    fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));\n  }\n  for (let k in o) {\n    if (new RegExp('(' + k + ')').test(fmt)) {\n      fmt = fmt.replace(RegExp.$1, RegExp.$1.length === 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length));\n    }\n  }\n  return fmt;\n}\n\nlet PROMISE = Promise;\nlet promise = {\n  resolve: PROMISE.resolve.bind(PROMISE),\n  reject: PROMISE.reject.bind(PROMISE),\n  all: PROMISE.all.bind(PROMISE),\n  then: (fn, reject) => {\n    // @NOTICE deprecated to be removed next\n    return new PROMISE(fn, reject);\n  }\n};\n\nfunction toPromise(target, methods) {\n  let dist = Object.create(null);\n  methods.forEach(name => {\n    dist[name] = (...args) => {\n      return promise.then((resolve$$1, reject) => {\n        try {\n          return resolve$$1(target[name].apply(target, args));\n        } catch (err) {\n          return reject(err);\n        }\n      });\n    };\n  });\n  return dist;\n}\n\nfunction next() {\n  let promise = Promise.resolve();\n  let ret = (resolve$$1, reject) => {\n    if (resolve$$1 || reject) {\n      promise = promise.then(resolve$$1, reject);\n    }\n    return promise;\n  };\n  return ret;\n}\n\nfunction convertCase(type, str) {\n  switch (type) {\n    case 'pascal':\n      return pascalCase(str);\n    case 'camel':\n      return camelCase(str);\n    case 'snake':\n      return snakeCase(str);\n    case 'hyphen':\n      return hyphenCase(str);\n    default:\n      return str;\n  }\n}\n\n/**\n * Camelize a hyphen-delmited string.\n */\nconst camelCaseRE = /[-_](\\w)/g;\nfunction camelCase(str) {\n  return lcfirst(str.replace(camelCaseRE, (_, c) => c ? c.toUpperCase() : ''));\n}\n\n/**\n * Capitalize a string.\n */\nfunction ucfirst(str) {\n  return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n/**\n * UnCapitalize a string.\n */\nfunction lcfirst(str) {\n  return str.charAt(0).toLowerCase() + str.slice(1);\n}\n\nconst replaceAZRE = /([A-Z])/g;\n\n/**\n * Hyphenate a camelCase string.\n */\nfunction hyphenCase(str) {\n  return camelCase(str).replace(replaceAZRE, '-$1').toLowerCase();\n}\n\nfunction snakeCase(str) {\n  return camelCase(str).replace(replaceAZRE, '_$1').toLowerCase();\n}\n\nfunction pascalCase(str) {\n  return ucfirst(camelCase(str));\n}\n\n/**\n * ajax 方法\n * @param  {Object}   opts 请求对象\n * {\n *     method:\"GET\",\n *     dataType:\"JSON\",\n *     headers:{},\n *     url:\"\",\n *     data:{},\n * }\n * @param  {Function} next 回调\n * @return {XMLHttpRequest}        xhr对象\n */\nfunction ajax(opts, next) {\n  let method = (opts.method || 'GET').toUpperCase();\n  let dataType = (opts.dataType || 'JSON').toUpperCase();\n  let timeout = opts.timeout;\n  /* global XMLHttpRequest */\n  let req = new XMLHttpRequest();\n  let data = null;\n  let isPost = method === 'POST';\n  let isGet = method === 'GET';\n  let isFormData = false;\n  let emit = function (err, data, headers) {\n    if (timeout) {\n      clearTimeout(timeout);\n      timeout = null;\n    }\n    req.onload = req.onreadystatechange = req.onerror = null;\n    if (next) {\n      let tmp = next;\n      next = null;\n      tmp(err, data, headers);\n    }\n  };\n  if (isGet) {\n    if (opts.data || opts.query) {\n      let u = parseUrl(opts.url);\n      let q = parseQuery(u.query);\n      if (opts.query) {\n        for (let x in opts.query) {\n          q[x] = opts.query[x];\n        }\n      }\n      if (opts.data) {\n        for (let x in opts.data) {\n          q[x] = opts.data[x];\n        }\n        opts.data = null;\n      }\n      u.query = stringifyQuery(q);\n      opts.url = stringifyUrl(u);\n    }\n  } else if (isPost) {\n    data = opts.data;\n    /* global FormData */\n    if (probe.FormData) {\n      isFormData = data instanceof FormData;\n      if (!isFormData) {\n        data = stringifyQuery(data);\n      }\n    }\n  }\n  if (timeout) {\n    timeout = setTimeout(function () {\n      req.abort();\n      emit(new Error('error_timeout'));\n    }, timeout);\n  }\n  try {\n    opts.xhr && opts.xhr(req);\n    if (dataType === 'BINARY') {\n      req.responseType = 'arraybuffer';\n    }\n    req.open(method, opts.url, true);\n    if (opts.headers) {\n      for (let x in opts.headers) {\n        req.setRequestHeader(x, opts.headers[x]);\n      }\n    }\n    if (isPost && !isFormData) {\n      req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');\n    }\n    if (opts.headerOnly) {\n      req.onreadystatechange = function () {\n        // console.log('state', req.readyState, req);\n        if (req.readyState === 2) {\n          // HEADERS_RECEIVED\n          let headers = parseHeaders(req.getAllResponseHeaders(), opts.camelHeaders);\n          req.abort();\n          emit(null, undefined, headers);\n        }\n      };\n    }\n    req.onload = function () {\n      // if(req.readyState != 4) return;\n      if ([200, 204, 304, 206, 0].indexOf(req.status) === -1) {\n        // error\n        emit(new Error('error_status_' + req.status));\n      } else {\n        let data = req.response;\n        let parse = req.status !== 204;\n        if (parse) {\n          try {\n            if (dataType === 'JSON') {\n              data = JSON.parse(req.responseText);\n            } else if (dataType === 'XML') {\n              data = req.responseXML;\n            } else if (dataType === 'TEXT') {\n              data = req.responseText;\n            } else if (dataType === 'BINARY') {\n              let arrayBuffer = new Uint8Array(data);\n              let str = '';\n              for (let i = 0; i < arrayBuffer.length; i++) {\n                str += String.fromCharCode(arrayBuffer[i]);\n              }\n              data = str;\n            }\n          } catch (err) {\n            return emit(err);\n          }\n        }\n        emit(null, data, parseHeaders(req.getAllResponseHeaders(), opts.camelHeaders));\n      }\n    };\n    req.onerror = function (e) {\n      emit(new Error('error_network'));\n    };\n    // 进度\n    if (opts.onprogress && !opts.headerOnly) {\n      req.onloadend = req.onprogress = function (e) {\n        let info = {\n          total: e.total,\n          loaded: e.loaded,\n          percent: e.total ? Math.trunc(100 * e.loaded / e.total) : 0\n        };\n        if (e.type === 'loadend') {\n          info.percent = 100;\n        } else if (e.total === e.loaded) {\n          return;\n        }\n        if (e.total < e.loaded) {\n          info.total = info.loaded;\n        }\n        if (info.percent === 0) {\n          return;\n        }\n        opts.onprogress(info);\n      };\n    }\n    req.send(data);\n  } catch (e) {\n    emit(e);\n  }\n  return req;\n}\n\nfunction parseHeaders(str, camelHeaders) {\n  let ret = {};\n  str.trim().split('\\n').forEach(function (key) {\n    key = key.replace(/\\r/g, '');\n    let arr = key.split(': ');\n    let name = arr.shift().toLowerCase();\n    ret[camelHeaders ? camelCase(name) : name] = arr.shift();\n  });\n  return ret;\n}\n\nfunction compose(middleware) {\n  if (!Array.isArray(middleware)) throw new TypeError('Middleware stack must be an array!');\n  for (const fn of middleware) {\n    if (typeof fn !== 'function') throw new TypeError('Middleware must be composed of functions!');\n  }\n  return function (context, next) {\n    // last called middleware #\n    let index = -1;\n    return dispatch(0);\n    function dispatch(i) {\n      if (i <= index) return Promise.reject(new Error('next() called multiple times'));\n      index = i;\n      let fn = middleware[i];\n      if (i === middleware.length) fn = next;\n      if (!fn) return Promise.resolve();\n      try {\n        return Promise.resolve(fn(context, function next() {\n          return dispatch(i + 1);\n        }));\n      } catch (err) {\n        return Promise.reject(err);\n      }\n    }\n  };\n}\n\nlet HandlePromise = class HandlePromise {\n  constructor(p) {\n    this.nexts = [];\n    if (isFunction(p)) {\n      p = new Promise(p);\n    } else if (!isPromise(p)) {\n      p = Promise.resolve(p);\n    }\n    this.next = p.then(handleResolve.bind(this), handleReject.bind(this));\n  }\n  then(resolve$$1, reject) {\n    this.nexts.push({ resolve: resolve$$1, reject });\n    return this;\n  }\n  catch(reject) {\n    this.nexts.push({ reject });\n    return this;\n  }\n  finally(fn) {\n    this.onFinally = fn;\n  }\n};\n\n\nfunction handleResolve(ret) {\n  let it = this.nexts.shift();\n  if (it) {\n    let { resolve: resolve$$1, reject } = it;\n    if (resolve$$1) {\n      this.next = this.next.then(resolve$$1, reject).catch(handleReject.bind(this)).then(handleResolve.bind(this));\n    }\n  } else {\n    if (this.onFinally) {\n      this.nexts = [];\n      this.onFinally();\n    }\n  }\n}\n\nfunction handleReject(err) {\n  this.error = err;\n  if (this.onFinally) {\n    this.nexts = [];\n    this.onFinally(this.error);\n  }\n}\n\nexports.isArray = isArray;\nexports.isBoolean = isBoolean;\nexports.isString = isString;\nexports.isFunction = isFunction;\nexports.isObject = isObject;\nexports.isNumber = isNumber;\nexports.isInteger = isInteger;\nexports.isUndefined = isUndefined;\nexports.isNull = isNull;\nexports.isNan = isNan;\nexports.isRegExp = isRegExp;\nexports.isDate = isDate;\nexports.typeValue = typeValue;\nexports.isInt = isInt;\nexports.isUint = isUint;\nexports.isAsync = isAsync;\nexports.isPromise = isPromise;\nexports.types = types;\nexports.probe = probe;\nexports.parseUrl = parseUrl;\nexports.stringifyUrl = stringifyUrl;\nexports.Url = Url;\nexports.parseQuery = parseQuery;\nexports.stringifyQuery = stringifyQuery;\nexports.Query = Query;\nexports.clone = clone;\nexports.each = each;\nexports.extend = extend;\nexports.bindEvent = bindEvent;\nexports.unique = unique;\nexports.isPromiseLike = isPromiseLike;\nexports.uuid = uuid;\nexports.guid = guid;\nexports.shortId = shortId;\nexports.inherits = inherits;\nexports.strRepeat = strRepeat;\nexports.noop = noop;\nexports.splitEach = splitEach;\nexports.proxy = proxy;\nexports.formatDate = formatDate;\nexports.promise = promise;\nexports.toPromise = toPromise;\nexports.next = next;\nexports.ajax = ajax;\nexports.convertCase = convertCase;\nexports.camelCase = camelCase;\nexports.ucfirst = ucfirst;\nexports.lcfirst = lcfirst;\nexports.hyphenCase = hyphenCase;\nexports.snakeCase = snakeCase;\nexports.pascalCase = pascalCase;\nexports.prop = prop;\nexports.delProps = delProps;\nexports.makeProp = makeProp;\nexports.compose = compose;\nexports.HandlePromise = HandlePromise;\n});\n\nunwrapExports(savUtil_cjs);\nvar savUtil_cjs_1 = savUtil_cjs.isArray;\nvar savUtil_cjs_3 = savUtil_cjs.isString;\nvar savUtil_cjs_4 = savUtil_cjs.isFunction;\nvar savUtil_cjs_5 = savUtil_cjs.isObject;\nvar savUtil_cjs_22 = savUtil_cjs.Url;\nvar savUtil_cjs_25 = savUtil_cjs.Query;\nvar savUtil_cjs_26 = savUtil_cjs.clone;\nvar savUtil_cjs_29 = savUtil_cjs.bindEvent;\nvar savUtil_cjs_45 = savUtil_cjs.convertCase;\nvar savUtil_cjs_51 = savUtil_cjs.pascalCase;\nvar savUtil_cjs_52 = savUtil_cjs.prop;\n\nlet tmplEncodeReg = /[<>&\"'\\x00]/g;\nlet tmplEncodeMap = {\n  '<': '&lt;',\n  '>': '&gt;',\n  '&': '&amp;',\n  '\"': '&quot;',\n  \"'\": '&#39;'\n};\n\nfunction compile (str) {\n  return str.replace(/([\\s'\\\\])(?![^%]*%\\})|(?:\\{%(=|#)([\\s\\S]+?)%\\})|(\\{%)|(%\\})/g, function (s, p1, p2, p3, p4, p5) {\n    if (p1) { // whitespace, quote and backspace in interpolation context\n      return {\n        '\\n': '\\\\n',\n        '\\r': '\\\\r',\n        '\\t': '\\\\t',\n        ' ': ' '\n      }[s] || '\\\\' + s\n    }\n    if (p2) { // interpolation: {%=prop%}, or unescaped: {%#prop%}\n      if (p2 === '=') {\n        return \"'\\r\\n+slash(\" + p3 + \")+'\"\n      }\n      return \"'\\r\\n+(\" + p3 + \")+'\"\n    }\n    if (p4) { // evaluation start tag: {%\n      return \"';\\r\\n\"\n    }\n    if (p5) { // evaluation end tag: %}\n      return \"\\r\\n_tmp_+='\"\n    }\n  })\n}\n\nfunction slash (s) {\n  return String(s || '').replace(tmplEncodeReg, (c) => tmplEncodeMap[c] || '')\n}\n\nlet Func = Function;\n\nfunction tmpl (str) {\n  let func = new Func('state, slash', \"let _tmp_=''; {_tmp_='\" +\n    compile(str || '') + \"';}\\r\\n return _tmp_\");\n  return (state) => func(state, slash)\n}\n\nclass HtmlRender {\n  constructor (sav) {\n    this.opts = {\n      templatePath: './',\n      indexTemplate: './index.html',\n      errorTemplate: './error.html'\n    };\n    this.templateMaps = {};\n    sav.shareOptions(this);\n  }\n  render ({ctx, argv: {error, state}, sav}) {\n    let viewFunc = getTemplate(this, error);\n    let html = viewFunc(state);\n    if (error) {\n      ctx.status = (typeof error === 'object' && error.status) || 500;\n    }\n    ctx.body = html;\n  }\n}\n\nfunction getTemplate ({templateMaps, opts}, error) {\n  let viewTemplate = error ? opts.errorTemplate : opts.indexTemplate;\n  let viewFunc = templateMaps[viewTemplate] || (\n    templateMaps[viewTemplate] = tmpl((\n      fs.readFileSync(path.resolve(opts.rootPath, opts.templatePath, viewTemplate)\n    ).toString())\n  ));\n  return viewFunc\n}\n\nclass VuePayload {\n  constructor (opts) {\n    this.opts = {\n      deepth: 2,\n      Vue: null,\n      router: null\n    };\n    this.process = null;\n    this.processComponent = processComponent$1.bind(this);\n    Object.assign(this.opts, opts);\n  }\n  setOptions (opts) {\n    Object.assign(this.opts, opts);\n  }\n  getPayloads (route) {\n    let {router, Vue} = this.opts;\n    let components = router.getMatchedComponents(route);\n    let arr = [];\n    getComponentsDepth(Vue, components, this.opts.deepth, arr);\n    let payloads = [];\n    arr.reduce(this.processComponent, payloads);\n    return resolvePayloads(route, payloads)\n  }\n}\n\nfunction resolvePayloads (vueRoute, payloads) {\n  return savUtil_cjs_26(payloads.reduce((routes, payload) => {\n    if (savUtil_cjs_4(payload)) {\n      payload = payload(vueRoute);\n    }\n    if (savUtil_cjs_5(payload)) {\n      routes.push(payload);\n    } else if (savUtil_cjs_1(payload)) {\n      return routes.concat(payload.map(it => {\n        if (savUtil_cjs_3(it)) {\n          return {name: it}\n        }\n        return it\n      }))\n    } else if (savUtil_cjs_3(payload)) {\n      routes.push({name: payload});\n    }\n    return routes\n  }, []))\n}\n\nfunction processComponent$1 (payloads, component) {\n  let options = typeof component === 'object' ? component : component.options;\n  if (this.process) {\n    this.process(options);\n  }\n  if (options.payload) {\n    payloads.push(options.payload);\n  }\n  return payloads\n}\n\nfunction getComponentsDepth (Vue, components, depth, arr) {\n  if (Array.isArray(components)) {\n    for (let i = 0; i < components.length; ++i) {\n      appendComponent(Vue, components[i], depth, arr);\n    }\n  } else {\n    for (let comName in components) {\n      appendComponent(Vue, components[comName], depth, arr);\n    }\n  }\n}\n\nfunction appendComponent (Vue, com, depth, arr) {\n  if (savUtil_cjs_3(com)) {\n    com = Vue.component(com);\n  }\n  if (com) {\n    arr.push(com);\n    if (depth && com.components) {\n      getComponentsDepth(Vue, com.components, depth--, arr);\n    }\n  }\n}\n\nclass VueRender {\r\n  constructor (sav) {\r\n    this.opts = {\r\n      rootPath: '.',\r\n      serverTemplate: './views/index.html',\r\n      serverEntry: './server-entry.js'\r\n    };\r\n    sav.shareOptions(this);\r\n    this.require = require;\r\n    let payload = this.payload = new VuePayload();\r\n    payload.process = processComponent;\r\n    sav.shareOptions(payload);\r\n  }\r\n  async render ({ctx, argv, sav}, {route, payloads}) {\r\n    let {vm, render, router} = this.ssr;\r\n    let newState;\r\n    if (payloads.length) {\r\n      newState = await invokePayloads(sav, ctx, route, payloads);\r\n    }\r\n    vm.$root.$state = Object.assign(argv.state, newState);\r\n    router.push(route);\r\n    return new Promise((resolve$$1, reject) => {\r\n      render.renderToString(vm, (err, html) => {\r\n        if (err) {\r\n          return reject(err)\r\n        }\r\n        html = html.replace('data-server-rendered=\"true\"', '');\r\n        ctx.body = html;\r\n        resolve$$1();\r\n      });\r\n    })\r\n  }\r\n  match ({ctx, argv}) {\r\n    if (ctx.method !== 'GET') {\r\n      return false\r\n    }\r\n    let {router} = this.getRender();\r\n    let route = router.resolve(argv.path).route;\r\n    if (!route.matched.length) {\r\n      return false\r\n    }\r\n    // 需要复制一份, 因为path不可写, 估计是被Vue冻结了\r\n    route = Object.assign({}, route);\r\n    let payloads = this.payload.getPayloads(route);\r\n    return {\r\n      route,\r\n      payloads\r\n    }\r\n  }\r\n  getRender () {\r\n    if (!this.ssr) {\r\n      let {opts} = this;\r\n      let entryFile = path.resolve(opts.rootPath, opts.serverEntry);\r\n      if (!this.serverEntry) {\r\n        this.serverEntry = this.require(entryFile);\r\n      }\r\n      let {Vue, vm, router, createRenderer, renderOptions} = this.serverEntry;\r\n      if (!this.serverTemplate) {\r\n        this.serverTemplate = fs.readFileSync(path.resolve(opts.rootPath, opts.serverTemplate)).toString();\r\n      }\r\n      let template = this.serverTemplate;\r\n      let render = createRenderer(Object.assign({template}, renderOptions));\r\n      this.payload.setOptions({\r\n        Vue,\r\n        router\r\n      });\r\n      this.ssr = {router, render, vm, Vue};\r\n    }\r\n    return this.ssr\r\n  }\r\n}\r\n\r\nfunction processComponent (options) {\r\n  if (!options._savStriped) {\r\n    if (options.getters) {\r\n      let computed = options.computed || (options.computed = {});\r\n      Object.assign(computed, mapGetters(options));\r\n      delete options.getters;\r\n    }\r\n    delete options.beforeCreate;\r\n    delete options.created;\r\n    delete options.beforeMount;\r\n    delete options.mounted;\r\n    delete options.beforeUpdate;\r\n    delete options.updated;\r\n    delete options.activated;\r\n    delete options.deactivated;\r\n    delete options.beforeDestroy;\r\n    delete options.destroyed;\r\n\r\n    delete options.watch;\r\n\r\n    delete options.beforeRouteEnter;\r\n    delete options.beforeRouteUpdate;\r\n    delete options.beforeRouteLeave;\r\n    options._savStriped = true;\r\n  }\r\n}\r\n\r\nfunction mapGetters ({getters}) {\r\n  let res = {};\r\n  normalizeMap(getters).forEach(function (ref) {\r\n    let key = ref.key;\r\n    let val = ref.val;\r\n    res[key] = savUtil_cjs_4(val) ? function mappedGetter () { // function(state){}\r\n      return val.call(this, this.$root.$state)\r\n    } : function mappedGetter () {\r\n      return this.$root.$state[val]\r\n    };\r\n  });\r\n  return res\r\n}\r\n\r\nfunction normalizeMap (map) {\r\n  return Array.isArray(map) ? map.map(key => {\r\n    return {\r\n      key: key,\r\n      val: key\r\n    }\r\n  }) : Object.keys(map).map(key => {\r\n    return {\r\n      key: key,\r\n      val: map[key]\r\n    }\r\n  })\r\n}\r\n\r\nfunction invokePayloads (sav, ctx, vueRoute, payloads) {\r\n  let states = [];\r\n  let routes = payloads.filter((it) => {\r\n    if (savUtil_cjs_5(it)) {\r\n      if (it.sav) {\r\n        if (it.sav !== sav.name) { // 跨sav的情况\r\n          return false\r\n        }\r\n      }\r\n      if (sav.resolvePayload(it, vueRoute)) {\r\n        if (it.state) {\r\n          states.push(it.state);\r\n          return false\r\n        }\r\n        // 只处理GET请求\r\n        if (it.route.method !== 'GET') {\r\n          return false\r\n        }\r\n        // 跳过当前路由\r\n        return it.path !== vueRoute.path\r\n      }\r\n    }\r\n  });\r\n  return Promise.all(routes.map((route) => sav.invokePayload(ctx, route)))\r\n    .then((args) => {\r\n      args = states.concat(args);\r\n      return args.length ? Object.assign.apply({}, args) : {}\r\n    })\r\n}\n\nvar isarray = Array.isArray || function (arr) {\n  return Object.prototype.toString.call(arr) == '[object Array]';\n};\n\n/**\n * Expose `pathToRegexp`.\n */\nvar pathToRegexp_1 = pathToRegexp;\nvar parse_1 = parse;\nvar compile_1 = compile$1;\nvar tokensToFunction_1 = tokensToFunction;\nvar tokensToRegExp_1 = tokensToRegExp;\n\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\nvar PATH_REGEXP = new RegExp([\n// Match escaped characters that would otherwise appear in future matches.\n// This allows the user to escape special characters that won't transform.\n'(\\\\\\\\.)',\n// Match Express-style parameters and un-named parameters with a prefix\n// and optional suffixes. Matches appear as:\n//\n// \"/:test(\\\\d+)?\" => [\"/\", \"test\", \"\\d+\", undefined, \"?\", undefined]\n// \"/route(\\\\d+)\"  => [undefined, undefined, undefined, \"\\d+\", undefined, undefined]\n// \"/*\"            => [\"/\", undefined, undefined, undefined, undefined, \"*\"]\n'([\\\\/.])?(?:(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?|(\\\\*))'].join('|'), 'g');\n\n/**\n * Parse a string for the raw tokens.\n *\n * @param  {string}  str\n * @param  {Object=} options\n * @return {!Array}\n */\nfunction parse(str, options) {\n  var tokens = [];\n  var key = 0;\n  var index = 0;\n  var path$$1 = '';\n  var defaultDelimiter = options && options.delimiter || '/';\n  var res;\n\n  while ((res = PATH_REGEXP.exec(str)) != null) {\n    var m = res[0];\n    var escaped = res[1];\n    var offset = res.index;\n    path$$1 += str.slice(index, offset);\n    index = offset + m.length;\n\n    // Ignore already escaped sequences.\n    if (escaped) {\n      path$$1 += escaped[1];\n      continue;\n    }\n\n    var next = str[index];\n    var prefix = res[2];\n    var name = res[3];\n    var capture = res[4];\n    var group = res[5];\n    var modifier = res[6];\n    var asterisk = res[7];\n\n    // Push the current path onto the tokens.\n    if (path$$1) {\n      tokens.push(path$$1);\n      path$$1 = '';\n    }\n\n    var partial = prefix != null && next != null && next !== prefix;\n    var repeat = modifier === '+' || modifier === '*';\n    var optional = modifier === '?' || modifier === '*';\n    var delimiter = res[2] || defaultDelimiter;\n    var pattern = capture || group;\n\n    tokens.push({\n      name: name || key++,\n      prefix: prefix || '',\n      delimiter: delimiter,\n      optional: optional,\n      repeat: repeat,\n      partial: partial,\n      asterisk: !!asterisk,\n      pattern: pattern ? escapeGroup(pattern) : asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?'\n    });\n  }\n\n  // Match any characters still remaining.\n  if (index < str.length) {\n    path$$1 += str.substr(index);\n  }\n\n  // If the path exists, push it onto the end.\n  if (path$$1) {\n    tokens.push(path$$1);\n  }\n\n  return tokens;\n}\n\n/**\n * Compile a string to a template function for the path.\n *\n * @param  {string}             str\n * @param  {Object=}            options\n * @return {!function(Object=, Object=)}\n */\nfunction compile$1(str, options) {\n  return tokensToFunction(parse(str, options));\n}\n\n/**\n * Prettier encoding of URI path segments.\n *\n * @param  {string}\n * @return {string}\n */\nfunction encodeURIComponentPretty(str) {\n  return encodeURI(str).replace(/[\\/?#]/g, function (c) {\n    return '%' + c.charCodeAt(0).toString(16).toUpperCase();\n  });\n}\n\n/**\n * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.\n *\n * @param  {string}\n * @return {string}\n */\nfunction encodeAsterisk(str) {\n  return encodeURI(str).replace(/[?#]/g, function (c) {\n    return '%' + c.charCodeAt(0).toString(16).toUpperCase();\n  });\n}\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction(tokens) {\n  // Compile all the tokens into regexps.\n  var matches = new Array(tokens.length);\n\n  // Compile all the patterns before compilation.\n  for (var i = 0; i < tokens.length; i++) {\n    if (typeof tokens[i] === 'object') {\n      matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$');\n    }\n  }\n\n  return function (obj, opts) {\n    var path$$1 = '';\n    var data = obj || {};\n    var options = opts || {};\n    var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent;\n\n    for (var i = 0; i < tokens.length; i++) {\n      var token = tokens[i];\n\n      if (typeof token === 'string') {\n        path$$1 += token;\n\n        continue;\n      }\n\n      var value = data[token.name];\n      var segment;\n\n      if (value == null) {\n        if (token.optional) {\n          // Prepend partial segment prefixes.\n          if (token.partial) {\n            path$$1 += token.prefix;\n          }\n\n          continue;\n        } else {\n          throw new TypeError('Expected \"' + token.name + '\" to be defined');\n        }\n      }\n\n      if (isarray(value)) {\n        if (!token.repeat) {\n          throw new TypeError('Expected \"' + token.name + '\" to not repeat, but received `' + JSON.stringify(value) + '`');\n        }\n\n        if (value.length === 0) {\n          if (token.optional) {\n            continue;\n          } else {\n            throw new TypeError('Expected \"' + token.name + '\" to not be empty');\n          }\n        }\n\n        for (var j = 0; j < value.length; j++) {\n          segment = encode(value[j]);\n\n          if (!matches[i].test(segment)) {\n            throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\", but received `' + JSON.stringify(segment) + '`');\n          }\n\n          path$$1 += (j === 0 ? token.prefix : token.delimiter) + segment;\n        }\n\n        continue;\n      }\n\n      segment = token.asterisk ? encodeAsterisk(value) : encode(value);\n\n      if (!matches[i].test(segment)) {\n        throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but received \"' + segment + '\"');\n      }\n\n      path$$1 += token.prefix + segment;\n    }\n\n    return path$$1;\n  };\n}\n\n/**\n * Escape a regular expression string.\n *\n * @param  {string} str\n * @return {string}\n */\nfunction escapeString(str) {\n  return str.replace(/([.+*?=^!:${}()[\\]|\\/\\\\])/g, '\\\\$1');\n}\n\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param  {string} group\n * @return {string}\n */\nfunction escapeGroup(group) {\n  return group.replace(/([=!:$\\/()])/g, '\\\\$1');\n}\n\n/**\n * Attach the keys as a property of the regexp.\n *\n * @param  {!RegExp} re\n * @param  {Array}   keys\n * @return {!RegExp}\n */\nfunction attachKeys(re, keys) {\n  re.keys = keys;\n  return re;\n}\n\n/**\n * Get the flags for a regexp from the options.\n *\n * @param  {Object} options\n * @return {string}\n */\nfunction flags(options) {\n  return options.sensitive ? '' : 'i';\n}\n\n/**\n * Pull out keys from a regexp.\n *\n * @param  {!RegExp} path\n * @param  {!Array}  keys\n * @return {!RegExp}\n */\nfunction regexpToRegexp(path$$1, keys) {\n  // Use a negative lookahead to match only capturing groups.\n  var groups = path$$1.source.match(/\\((?!\\?)/g);\n\n  if (groups) {\n    for (var i = 0; i < groups.length; i++) {\n      keys.push({\n        name: i,\n        prefix: null,\n        delimiter: null,\n        optional: false,\n        repeat: false,\n        partial: false,\n        asterisk: false,\n        pattern: null\n      });\n    }\n  }\n\n  return attachKeys(path$$1, keys);\n}\n\n/**\n * Transform an array into a regexp.\n *\n * @param  {!Array}  path\n * @param  {Array}   keys\n * @param  {!Object} options\n * @return {!RegExp}\n */\nfunction arrayToRegexp(path$$1, keys, options) {\n  var parts = [];\n\n  for (var i = 0; i < path$$1.length; i++) {\n    parts.push(pathToRegexp(path$$1[i], keys, options).source);\n  }\n\n  var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options));\n\n  return attachKeys(regexp, keys);\n}\n\n/**\n * Create a path regexp from string input.\n *\n * @param  {string}  path\n * @param  {!Array}  keys\n * @param  {!Object} options\n * @return {!RegExp}\n */\nfunction stringToRegexp(path$$1, keys, options) {\n  return tokensToRegExp(parse(path$$1, options), keys, options);\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n *\n * @param  {!Array}          tokens\n * @param  {(Array|Object)=} keys\n * @param  {Object=}         options\n * @return {!RegExp}\n */\nfunction tokensToRegExp(tokens, keys, options) {\n  if (!isarray(keys)) {\n    options = /** @type {!Object} */keys || options;\n    keys = [];\n  }\n\n  options = options || {};\n\n  var strict = options.strict;\n  var end = options.end !== false;\n  var route = '';\n\n  // Iterate over the tokens and create our regexp string.\n  for (var i = 0; i < tokens.length; i++) {\n    var token = tokens[i];\n\n    if (typeof token === 'string') {\n      route += escapeString(token);\n    } else {\n      var prefix = escapeString(token.prefix);\n      var capture = '(?:' + token.pattern + ')';\n\n      keys.push(token);\n\n      if (token.repeat) {\n        capture += '(?:' + prefix + capture + ')*';\n      }\n\n      if (token.optional) {\n        if (!token.partial) {\n          capture = '(?:' + prefix + '(' + capture + '))?';\n        } else {\n          capture = prefix + '(' + capture + ')?';\n        }\n      } else {\n        capture = prefix + '(' + capture + ')';\n      }\n\n      route += capture;\n    }\n  }\n\n  var delimiter = escapeString(options.delimiter || '/');\n  var endsWithDelimiter = route.slice(-delimiter.length) === delimiter;\n\n  // In non-strict mode we allow a slash at the end of match. If the path to\n  // match already ends with a slash, we remove it for consistency. The slash\n  // is valid at the end of a path match, not in the middle. This is important\n  // in non-ending mode, where \"/test/\" shouldn't match \"/test//route\".\n  if (!strict) {\n    route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?';\n  }\n\n  if (end) {\n    route += '$';\n  } else {\n    // In non-ending mode, we need the capturing groups to match as much as\n    // possible by using a positive lookahead to the end or next path segment.\n    route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)';\n  }\n\n  return attachKeys(new RegExp('^' + route, flags(options)), keys);\n}\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n *\n * @param  {(string|RegExp|Array)} path\n * @param  {(Array|Object)=}       keys\n * @param  {Object=}               options\n * @return {!RegExp}\n */\nfunction pathToRegexp(path$$1, keys, options) {\n  if (!isarray(keys)) {\n    options = /** @type {!Object} */keys || options;\n    keys = [];\n  }\n\n  options = options || {};\n\n  if (path$$1 instanceof RegExp) {\n    return regexpToRegexp(path$$1, /** @type {!Array} */keys);\n  }\n\n  if (isarray(path$$1)) {\n    return arrayToRegexp( /** @type {!Array} */path$$1, /** @type {!Array} */keys, options);\n  }\n\n  return stringToRegexp( /** @type {string} */path$$1, /** @type {!Array} */keys, options);\n}\n\npathToRegexp_1.parse = parse_1;\npathToRegexp_1.compile = compile_1;\npathToRegexp_1.tokensToFunction = tokensToFunction_1;\npathToRegexp_1.tokensToRegExp = tokensToRegExp_1;\n\nclass Router {\r\n  constructor (opts) {\r\n    this.opts = {\r\n      prefix: '',\r\n      caseType: 'camel',\r\n      sensitive: true\r\n    };\r\n    savUtil_cjs_29(this);\r\n    opts && this.setOptions(opts);\r\n    this.modals = {};\r\n    this.actionRoutes = createMethods();\r\n    this.modalRoutes = [];\r\n  }\r\n  setOptions (opts) {\r\n    Object.assign(this.opts, opts);\r\n  }\r\n  declare (routeModals) {\r\n    for (let modalName in routeModals) {\r\n      this.declareModal(modalName, routeModals[modalName]);\r\n    }\r\n  }\r\n  declareModal (modalName, modal) {\r\n    this.removeModal(modalName);\r\n    createModalRoute(this, modalName, modal);\r\n  }\r\n  removeModal (modalName) {\r\n    if (this.modals[modalName]) {\r\n      return removeModal(this, modalName)\r\n    }\r\n  }\r\n  matchRoute (path$$1, method) {\r\n    if (method === 'ANY') {\r\n      for (let submethod of methods) {\r\n        let ret = this.matchRoute(path$$1, submethod);\r\n        if (ret) {\r\n          return ret\r\n        }\r\n      }\r\n    }\r\n    if (methods.indexOf(method) === -1) {\r\n      return\r\n    }\r\n    let uri = savUtil_cjs_22.parse(path$$1);\r\n    path$$1 = stripPrefix(uri.path, this.opts.prefix);\r\n    let ret = {\r\n      path: path$$1\r\n    };\r\n    // 顶级路由\r\n    for (let route of this.actionRoutes[method]) {\r\n      if (matchRoute(route, path$$1, ret)) {\r\n        ret.query = uri.query ? savUtil_cjs_25.parse(uri.query) : {};\r\n        return ret\r\n      }\r\n    }\r\n    for (let route of this.modalRoutes) {\r\n      // 模块路由\r\n      if (matchRoute(route, path$$1)) {\r\n        for (let subRoute of route.routes[method]) {\r\n          // 子级路由\r\n          if (matchRoute(subRoute, path$$1, ret)) {\r\n            ret.query = uri.query ? savUtil_cjs_25.parse(uri.query) : {};\r\n            return ret\r\n          }\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\nconst methods = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH'];\r\n\r\nfunction createMethods () {\r\n  let ret = {};\r\n  methods.forEach((name) => {\r\n    ret[name] = [];\r\n  });\r\n  return ret\r\n}\r\n\r\nfunction matchRoute (route, path$$1, ret) {\r\n  let mat = path$$1.match(route.regexp);\r\n  if (mat) {\r\n    if (ret) {\r\n      ret.route = route;\r\n      let {keys} = route;\r\n      let params = ret.params = {};\r\n      for (let i = 1, len = mat.length; i < len; ++i) {\r\n        const key = keys[i - 1];\r\n        if (key) {\r\n          const val = typeof mat[i] === 'string' ? decodeURIComponent(mat[i]) : mat[i];\r\n          params[key.name] = val;\r\n        }\r\n      }\r\n    }\r\n    return true\r\n  }\r\n}\r\n\r\nfunction stripPrefix (src, prefix) {\r\n  if (prefix) {\r\n    let pos = src.indexOf(prefix);\r\n    if (pos === 0 || ((pos === 1) && src[0] === '/')) {\r\n      src = src.substr(pos + prefix.length, src.length);\r\n      if (src[0] !== '/') {\r\n        src = '/' + src;\r\n      }\r\n      return src\r\n    }\r\n  }\r\n  return src\r\n}\r\n\r\nfunction removeModal (router, modalName) {\r\n  let modal = router.modals[modalName];\r\n  delete router.modals[modalName];\r\n  router.modalRoutes = router.modalRoutes.filter((route) => route.modal !== modal);\r\n  let actionRoutes = router.actionRoutes;\r\n  methods.forEach((method) => {\r\n    actionRoutes[method] = actionRoutes[method].filter((route) => route.modal !== modal);\r\n  });\r\n  router.emit('removeModal', modal);\r\n  return modal\r\n}\r\n\r\nfunction createModalRoute (router, modalName, modal) {\r\n  let modalRoute = createRoute(router, modalName, modal);\r\n  modalRoute.routes = createMethods();\r\n  router.emit('declareModal', modalRoute);\r\n  for (let actionName in modal.routes) {\r\n    createRoute(router, actionName, modal.routes[actionName], modalRoute);\r\n  }\r\n  router.modals[modalName] = modal;\r\n}\r\n\r\nfunction createRoute (router, name, refer, modalRoute) {\r\n  refer.name = name;\r\n  let route = {};\r\n  let modal = modalRoute ? modalRoute.modal : refer;\r\n  savUtil_cjs_52(route, 'modal', modal);\r\n  let {caseType, sensitive} = router.opts;\r\n  let path$$1 = convertPath(refer.path, caseType, name);\r\n  if (!modalRoute) { // modal总是以''开始\r\n    path$$1 = normalPath((refer.prefix || '') + '/' + path$$1);\r\n    route.name = savUtil_cjs_51(name);\r\n    router.modalRoutes.push(route);\r\n  } else { // action\r\n    route.name = modalRoute.name + savUtil_cjs_51(name);\r\n    let method = route.method = (refer.method || 'GET');\r\n    let isRelative = path$$1[0] !== '/';\r\n    if (isRelative) { // 相对路由\r\n      path$$1 = modalRoute.path + '/' + path$$1;\r\n    }\r\n    if (isRelative) {\r\n      modalRoute.routes[method].push(route);\r\n    } else {\r\n      router.actionRoutes[method].push(route);\r\n    }\r\n    route.actionName = `${modal.name}.${name}`;\r\n    savUtil_cjs_52(route, 'action', refer);\r\n  }\r\n  route.path = normalPath('/' + path$$1);\r\n  route.keys = [];\r\n  route.regexp = pathToRegexp_1(route.path, route.keys, {\r\n    sensitive,\r\n    end: !!modalRoute\r\n  });\r\n  route.compile = pathToRegexp_1.compile(route.path, {\r\n    sensitive,\r\n    end: !!modalRoute\r\n  });\r\n  router.emit('declareAction', route);\r\n  return route\r\n}\r\n\r\nfunction convertPath (path$$1, caseType, name) {\r\n  if (!savUtil_cjs_3(path$$1)) {\r\n    path$$1 = savUtil_cjs_45(caseType, name);\r\n  }\r\n  return path$$1\r\n}\r\n\r\nfunction normalPath (path$$1) {\r\n  return path$$1.replace(/\\/+/g, '/')\r\n}\n\nclass ModalAction {\n  constructor (opts) {\n    this.opts = {};\n    this.setOptions(opts);\n    this.modals = {};\n    this.actions = {};\n  }\n  setOptions (opts) {\n    Object.assign(this.opts, opts);\n  }\n  declare (modals) {\n    for (let modalName in modals) {\n      this.declareModal(modalName, modals[modalName]);\n    }\n  }\n  declareModal (modalName, modal) {\n    this.removeModal(modalName);\n    let actions = this.modals[modalName] = classToObject(modal);\n    for (let actionName in actions) {\n      this.actions[`${modalName}.${actionName}`] = actions[actionName];\n    }\n  }\n  removeModal (modalName) {\n    if (this.modals[modalName]) {\n      delete this.modals[modalName];\n      modalName = modalName + '.';\n      for (let actionName in this.actions) {\n        if (actionName.indexOf(modalName) === 0) {\n          delete this.actions[actionName];\n        }\n      }\n    }\n  }\n  getAction (actionName) {\n    return this.actions[actionName]\n  }\n}\n\nconst skips = ['constructor'];\n\nfunction classToObject (target) {\n  if (savUtil_cjs_4(target)) {\n    let proto = target.prototype;\n    return Object.getOwnPropertyNames(proto).reduce((tar, it) => {\n      if (!~skips.indexOf(it) && typeof savUtil_cjs_4(proto[it])) {\n        tar[it] = proto[it];\n      }\n      return tar\n    }, {})\n  } else {\n    return target\n  }\n}\n\nvar savSchema_cjs = createCommonjsModule(function (module, exports) {\n'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n\n\nlet SchemaBase = class SchemaBase {\n  constructor(schema, opts) {\n    this.opts = opts;\n    this.schema = schema;\n  }\n  get id() {\n    return this.opts.id;\n  }\n  get name() {\n    return this.opts.name;\n  }\n  get ref() {\n    return this.schema.getRef(this);\n  }\n};\n\n/*\n{\n  name: 'String',\n  check (val) {},\n  parse (val) {},\n  default: String,\n}\n */\n\nlet SchemaType = class SchemaType extends SchemaBase {\n  parse(val) {\n    return this.opts.parse(val);\n  }\n  check(val) {\n    return this.opts.check(val);\n  }\n  create(val) {\n    if (!savUtil_cjs.isUndefined(val)) {\n      return this.parse(val);\n    }\n    let factory = this.opts.default;\n    if (savUtil_cjs.isFunction(factory)) {\n      return factory();\n    }\n    return factory;\n  }\n};\n\n/* eslint {\"eqeqeq\": 0} */\n\n/*\n{\n  name: 'Sex',\n  *strict: false,\n  enums: [\n    {key: 'male', value: 1},\n    {key: 'female', value: 2},\n  ]\n}\n */\n\nlet SchemaEnum = class SchemaEnum extends SchemaBase {\n  check(val) {\n    let { strict, enums } = this.opts;\n    let len = enums.length;\n    while (len) {\n      let it = enums[--len];\n      if (strict) {\n        if (it.value === val || it.key == val) {\n          return true;\n        }\n      } else {\n        if (it.value == val || it.key == val) {\n          return true;\n        }\n      }\n    }\n  }\n  create(val) {\n    if (!savUtil_cjs.isUndefined(val)) {\n      return val;\n    }\n    return this.opts.enums[0].value;\n  }\n  parse(val) {\n    if (savUtil_cjs.isUndefined(val)) {\n      return;\n    }\n    let { enums } = this.opts;\n    let len = enums.length;\n    while (len) {\n      let it = enums[--len];\n      if (it.value == val) {\n        return it.value;\n      }\n      if (it.key == val) {\n        return it.key;\n      }\n    }\n  }\n  getEnum(key, val) {\n    for (let it of this.opts.enums) {\n      if (it[key] === val) {\n        return it;\n      }\n    }\n  }\n  key(val) {\n    return this.getEnum('value', val).key;\n  }\n  value(val) {\n    return this.getEnum('key', val).value;\n  }\n};\nlet SchemaControl = class SchemaControl extends SchemaBase {\n  check(obj, opts) {\n    return this.validate(obj, opts || {});\n  }\n  checkThen(obj, opts) {\n    return Promise.resolve().then(() => this.check(obj, opts));\n  }\n  extract(obj, opts = {}) {\n    opts.extract = true;\n    return this.validate(obj, opts);\n  }\n  extractThen(obj, opts) {\n    return Promise.resolve().then(() => this.extract(obj, opts));\n  }\n};\n\n\nfunction stringVal(val) {\n  if (savUtil_cjs.isNumber(val) || savUtil_cjs.isBoolean(val)) {\n    return String(val);\n  }\n  return val;\n}\n\nfunction boolVal(val) {\n  if (savUtil_cjs.isNumber(val)) {\n    return Boolean(val);\n  }\n  if (savUtil_cjs.isString(val)) {\n    if (val === 'true' || val === 'on') {\n      return true;\n    }\n    return false;\n  }\n  return val;\n}\n\nfunction numberVal(val) {\n  if (savUtil_cjs.isBoolean(val)) {\n    return Number(val);\n  } else if (savUtil_cjs.isString(val)) {\n    let it = parseFloat(val);\n    if (isNaN(it)) {\n      if (val === 'true' || val === 'on') {\n        return 1;\n      }\n      return 0;\n    }\n    return it;\n  }\n  return val;\n}\n\nfunction arrayVal(val) {\n  if (savUtil_cjs.isString(val)) {\n    if (val[0] === '[' && val[val.length - 1] === ']') {\n      try {\n        return JSON.parse(val);\n      } catch (err) {\n        return val;\n      }\n    } else if (val.indexOf(',') !== -1) {\n      return val.split(',');\n    }\n  }\n  return val;\n}\n\nfunction objectVal(val) {\n  if (savUtil_cjs.isString(val)) {\n    if (val[0] === '{' && val[val.length - 1] === '}') {\n      try {\n        return JSON.parse(val);\n      } catch (err) {\n        return val;\n      }\n    }\n  }\n  return val;\n}\n\nlet rangs = {\n  // 0xFF byte 的取值范围为-128~127，占用1个字节 -2的7次方到2的7次方-1\n  Int8: [-128, 127],\n  UInt8: [0, 255],\n  Byte: [-128, 255],\n  // 0xFFFF short 的取值范围为-32768~32767，占用2个字节 -2的15次方到2的15次方-1\n  Int16: [-32768, 32767],\n  UInt16: [0, 65535],\n  Short: [-32768, 65535],\n  // 0xFFFFFFFF int的取值范围为-2147483648~2147483647，占用4个字节 -2的31次方到2的31次方-1\n  Int32: [-2147483648, 2147483647],\n  UInt32: [0, 4294967295],\n  Integer: [-2147483648, 4294967295],\n  // -0X1FFFFFFFFFFFFF ~ 0X1FFFFFFFFFFFFF, Number.MAX_SAFE_INTEGER ~ Number.MAX_SAFE_INTEGER\n  // 占用8个字节 -2的53次方到2的53次方-1 Math.pow(2, 53)\n  Long: [-9007199254740991, 9007199254740991]\n};\n\nfunction isNatural(val) {\n  return savUtil_cjs.isNumber(val) && parseInt(val) === val;\n}\n\nfunction isStringObject(val) {\n  if (savUtil_cjs.isString(val)) {\n    return true;\n  }\n  return typeof val === 'object' && val !== null && val.constructor.name === 'ObjectID';\n}\n\nlet types = [{ name: String, check: isStringObject, parse: stringVal }, { name: Number, check: savUtil_cjs.isNumber, parse: numberVal }, { name: Boolean, check: savUtil_cjs.isBoolean, parse: boolVal }, { name: Array, check: savUtil_cjs.isArray, parse: arrayVal }, { name: Object, check: savUtil_cjs.isObject, parse: objectVal }].map(it => {\n  it.default = it.name;\n  it.name = it.name.name;\n  return it;\n});\n\nObject.keys(rangs).forEach(name => {\n  let [min, max] = rangs[name];\n  types.push({\n    name,\n    default: Number,\n    check: val => {\n      return isNatural(val) && val >= min && val <= max;\n    },\n    parse: numberVal,\n    min,\n    max\n  });\n});\n\nfunction registerTypes(schema) {\n  types.forEach(it => schema.registerType(it));\n}\n\nlet errors = {\n  type: 'Value [{value}] is not of [{type}] type',\n  require: 'Field [{field}] not found',\n  empty: 'Field [{field}] can not be empty',\n  check: 'Field [{field}] can not matched [{rule}] rule',\n  rule: 'Rule [{rule}] not found',\n  eql: 'Fields [{field}] and [{field_eql}] not equal',\n  regexp: 'Can not parse RegExp [{regexp}]'\n};\n\nlet SchemaTypeError = class SchemaTypeError extends Error {\n  constructor(type, value, message = errors.type) {\n    let val = String(value);\n    super(message.replace('{type}', type).replace('{value}', val));\n    this.type = type;\n    this.value = value;\n  }\n};\nlet SchemaRequiredError = class SchemaRequiredError extends Error {\n  constructor(field, message = errors.require) {\n    super(message.replace('{field}', field));\n    this.field = field;\n  }\n};\nlet SchemaEmptyError = class SchemaEmptyError extends Error {\n  constructor(field, message = errors.empty) {\n    super(message.replace('{field}', field));\n    this.field = field;\n  }\n};\nlet SchemaCheckedError = class SchemaCheckedError extends Error {\n  constructor(field, rule, message = errors.check) {\n    super(message.replace('{field}', field).replace('{rule}', rule));\n    this.field = field;\n    this.rule = rule;\n  }\n};\nlet SchemaEqlError = class SchemaEqlError extends Error {\n  constructor(field, fieldEql, message = errors.eql) {\n    super(message.replace('{field}', field).replace('{field_eql}', fieldEql));\n    this.field = field;\n    this.field_eql = fieldEql;\n  }\n};\nlet SchemaNoRuleError = class SchemaNoRuleError extends Error {\n  constructor(rule, message = errors.rule) {\n    super(message.replace('{rule}', rule));\n    this.rule = rule;\n  }\n};\nlet SchemaInvalidRegexpError = class SchemaInvalidRegexpError extends Error {\n  constructor(regexp, message = errors.regexp) {\n    super(message.replace('{regexp}', regexp));\n    this.regexp = regexp;\n  }\n};\n\n\nfunction setErrors(errs) {\n  Object.assign(errors, errs);\n}\n\n/*\n{\n  name: 'Users',\n  list: 'String'\n}\n */\n\nlet SchemaList = class SchemaList extends SchemaControl {\n  parse(val) {\n    return arrayVal(val);\n  }\n  create(value) {\n    value = this.parse(value);\n    if (savUtil_cjs.isArray(value)) {\n      let ref = this.ref;\n      return value.map(it => ref.create(it));\n    }\n    return [];\n  }\n  validate(obj, opts) {\n    let { ref } = this;\n    let { name } = this.opts;\n    let { extract, replace } = opts;\n    let val = this.parse(obj);\n    if (!savUtil_cjs.isArray(val)) {\n      throw new SchemaTypeError(name || 'list', val);\n    }\n    let ret = [];\n    for (let i = 0, l = val.length; i < l; ++i) {\n      try {\n        let newIt = checkValue(val[i], opts, ref);\n        if (extract) {\n          ret.push(!savUtil_cjs.isUndefined(newIt) ? val[i] : newIt);\n        }\n        if (replace) {\n          if (!savUtil_cjs.isUndefined(newIt)) {\n            val[i] = newIt;\n          }\n        }\n      } catch (err) {\n        (err.keys || (err.keys = [])).unshift(i);\n        throw err;\n      }\n    }\n    return extract ? ret : obj;\n  }\n};\n\n\nfunction checkValue(val, opts, ref) {\n  if (ref.parse) {\n    val = ref.parse(val);\n  }\n  if (ref.validate) {\n    return ref.validate(val, opts);\n  }\n  if (!ref.check(val)) {\n    throw new SchemaTypeError(ref.name, val);\n  }\n  return val;\n}\n\n/*\n{\n  name: 'userName',\n  type: String,\n  *nullable: true,\n  *empty: false,\n  *required: false,\n  *trim: false\n  *eql: 'userName2'\n}\n */\n\nlet SchemaField = class SchemaField extends SchemaBase {\n  create(val) {\n    let ret = this.ref.create(val);\n    return ret;\n  }\n  validate(obj, opts) {\n    let { ref } = this;\n    let { name, nullable, empty, eql, optional, message, checks } = this.opts;\n    if (optional && !(name in obj)) {\n      return;\n    }\n    if (nullable && savUtil_cjs.isNull(obj[name])) {\n      return;\n    }\n    try {\n      if (!(name in obj)) {\n        throw new SchemaRequiredError(name);\n      }\n      let val = obj[name];\n      if (!empty && !savUtil_cjs.isNull(val)) {\n        if (val === '') {\n          throw new SchemaEmptyError(name);\n        }\n      }\n      if (eql) {\n        let eqlVal = obj[eql];\n        if (eqlVal !== val) {\n          throw new SchemaEqlError(name, eql);\n        }\n      }\n      let rule = this.schema.applyChecks(val, checks);\n      if (rule) {\n        throw new SchemaCheckedError(name, rule[0]);\n      }\n      val = checkValue$1(val, opts, ref);\n      return val;\n    } catch (err) {\n      if (message) {\n        err.message = message;\n      }\n      throw err;\n    }\n  }\n};\n\n\nfunction checkValue$1(val, opts, ref) {\n  if (ref.parse) {\n    val = ref.parse(val);\n  }\n  if (ref.validate) {\n    return ref.validate(val, opts);\n  }\n  if (!ref.check(val)) {\n    throw new SchemaTypeError(ref.name, val);\n  }\n  return val;\n}\n\nlet SchemaRefer = class SchemaRefer extends SchemaControl {\n  create(value) {\n    return this.ref.create(value);\n  }\n  validate(obj, opts) {\n    return this.ref.validate(obj, opts);\n  }\n};\nlet SchemaStruct = class SchemaStruct extends SchemaControl {\n  create(obj) {\n    let isObj = savUtil_cjs.isObject(obj);\n    let struct = isObj ? obj : {};\n    this.fields.forEach(it => {\n      struct[it.name] = isObj && it.name in obj ? it.create(obj[it.name]) : it.create();\n    });\n    return struct;\n  }\n  validate(obj, opts) {\n    try {\n      let { extract, replace } = opts;\n      let ret = extract ? {} : obj;\n      for (let field of this.fields) {\n        try {\n          let val = field.validate(obj, opts);\n          if (!savUtil_cjs.isUndefined(val)) {\n            if (extract || replace) {\n              ret[field.name] = val;\n            }\n          }\n        } catch (err) {\n          (err.keys || (err.keys = [])).unshift(field.name);\n          throw err;\n        }\n      }\n      return ret;\n    } catch (err) {\n      if (err.keys) {\n        err.path = err.keys.join('.');\n      }\n      throw err;\n    }\n  }\n};\nlet SchemaCheck = class SchemaCheck {\n  constructor(schema, opts) {\n    this.opts = opts;\n    this.schema = schema;\n  }\n  get name() {\n    return this.opts.name;\n  }\n  get alias() {\n    return this.opts.alias;\n  }\n  check(value, args) {\n    return this.opts.check(value, args);\n  }\n  get argc() {\n    return this.opts.argc || 1;\n  }\n};\n\n// 数字大小\n\nfunction gt(value, [, arg1]) {\n  return value > arg1;\n}\n\nfunction gte(value, [, arg1]) {\n  return value >= arg1;\n}\n\nfunction lt(value, [, arg1]) {\n  return value < arg1;\n}\n\nfunction lte(value, [, arg1]) {\n  return value <= arg1;\n}\n\n// 包含\nfunction $in(value, argv) {\n  return argv.indexOf(value) > 0;\n}\n\nfunction nin(value, argv) {\n  return argv.indexOf(value) <= 0;\n}\n\n// 字符串或数组长度\nfunction lgt(value, argv) {\n  return gt(value.length, argv);\n}\n\nfunction lgte(value, argv) {\n  return gte(value.length, argv);\n}\n\nfunction llt(value, argv) {\n  return lt(value.length, argv);\n}\n\nfunction llte(value, argv) {\n  return lte(value.length, argv);\n}\n\nlet regexpMaps = {};\n// 正则表达式\nfunction re(value, [, regexp]) {\n  if (typeof regexp === 'string') {\n    if (!regexpMaps[regexp]) {\n      regexpMaps[regexp] = toRegExp(regexp);\n    }\n  }\n  let ref = regexpMaps[regexp] || regexp;\n  return ref.test(value);\n}\n\nfunction nre(value, argv) {\n  return !re(value, argv);\n}\n\n// https://github.com/borela/str-to-regexp/blob/master/src/index.js\nconst COMPLEX_BEGIN = /^\\s*\\//;\nconst COMPLEX_REGEX = /^\\s*\\/(.+)\\/(\\w*)\\s*$/;\n\nfunction parseWithFlags(fullPattern) {\n  try {\n    let [, pattern, flags] = fullPattern.match(COMPLEX_REGEX);\n    return flags ? new RegExp(pattern, flags) : new RegExp(pattern);\n  } catch (e) {\n    throw new SchemaInvalidRegexpError(fullPattern);\n  }\n}\n\nfunction toRegExp(pattern) {\n  return COMPLEX_BEGIN.test(pattern) ? parseWithFlags(pattern) : new RegExp(pattern);\n}\n\nlet checks = [{ name: 'gt', alias: '>', check: gt }, { name: 'gte', alias: '>=', check: gte }, { name: 'lt', alias: '<', check: lt }, { name: 'lte', alias: '<=', check: lte }, { name: 'in', check: $in }, { name: 'nin', check: nin }, { name: 'lgt', check: lgt }, { name: 'lgte', check: lgte }, { name: 'llt', check: llt }, { name: 'llte', check: llte }, { name: 're', check: re }, { name: 'nre', check: nre }];\n\nfunction registerChecks(schema) {\n  checks.forEach(it => schema.registerCheck(it));\n}\n\nconst SCHEMA_TYPE = 1;\nconst SCHEMA_ENUM = 2;\nconst SCHEMA_STURCT = 3;\nconst SCHEMA_LIST = 4;\nconst SCHEMA_REFER = 5;\nconst SCHEMA_FIELD = 6;\n\nlet Schema = class Schema {\n  constructor(opts) {\n    this.opts = Object.assign({\n      strict: true\n    }, opts);\n    this.idMap = {};\n    this.nameMap = {};\n    this.checks = {};\n    registerTypes(this);\n    registerChecks(this);\n  }\n  declare(data, opts = {}) {\n    if (savUtil_cjs.isArray(data)) {\n      return data.map(it => this.declare(it, opts));\n    } else if (savUtil_cjs.isObject(data)) {\n      let ret = createSchema(this, data, opts);\n      return ret;\n    }\n  }\n  load(data, opts = {}) {\n    // 从suite加载\n    ['fields', 'enums', 'lists', 'structs', 'schemas'].forEach(it => {\n      if (data[it]) {\n        this.declare(data[it], opts);\n      }\n    });\n  }\n  registerType(opts) {\n    let ret = new SchemaType(this, opts);\n    ret.schemaType = SCHEMA_TYPE;\n    exportSchema(this, ret);\n    return ret;\n  }\n  registerCheck(opts) {\n    let ret = new SchemaCheck(this, opts);\n    let { name, alias } = ret;\n    this.checks[name] = ret;\n    if (alias) {\n      this.checks[alias] = ret;\n    }\n    return ret;\n  }\n  applyChecks(value, rules) {\n    if (savUtil_cjs.isArray(rules)) {\n      for (let rule of rules) {\n        let [name] = rule;\n        let ruller = this.checks[name];\n        if (ruller) {\n          if (!ruller.check(value, rule)) {\n            return rule;\n          }\n        } else {\n          throw new SchemaNoRuleError(name);\n        }\n      }\n    }\n  }\n  getRef(ret) {\n    let { opts } = ret;\n    switch (ret.schemaType) {\n      case SCHEMA_REFER:\n        return this.idMap[opts.refer] || this.nameMap[opts.refer];\n      case SCHEMA_LIST:\n        return this.idMap[opts.list] || this.nameMap[opts.list];\n      case SCHEMA_FIELD:\n        return this.idMap[opts.type] || this.nameMap[opts.type];\n    }\n  }\n};\n\n\nfunction createSchema(schema, data, opts) {\n  let { enums, props, refer, list, type, refs } = data;\n  if (refs) {\n    if (savUtil_cjs.isObject(refs)) {\n      refs = Object.keys(refs).map(it => {\n        refs[it].name = it;\n        return refs[it];\n      });\n    }\n    schema.declare(refs);\n  }\n  let ret;\n  if (props) {\n    if (savUtil_cjs.isObject(props)) {\n      props = Object.keys(props).map(it => {\n        let val = props[it];\n        if (!savUtil_cjs.isObject(val)) {\n          val = { type: val };\n        }\n        if (savUtil_cjs.isFunction(val.type)) {\n          val.type = val.type.name;\n        }\n        val.name = it;\n        return val;\n      });\n    }\n    let fields = props.map(it => {\n      if (savUtil_cjs.isString(it) || savUtil_cjs.isNumber(it)) {\n        return schema.idMap[it];\n      }\n      if (savUtil_cjs.isFunction(it.type)) {\n        it.type = it.type.name;\n      }\n      let field = new SchemaField(schema, it);\n      field.schemaType = SCHEMA_FIELD;\n      return field;\n    });\n    ret = new SchemaStruct(schema, data);\n    ret.schemaType = SCHEMA_STURCT;\n    ret.fields = fields;\n  } else if (refer) {\n    ret = new SchemaRefer(schema, data);\n    ret.schemaType = SCHEMA_REFER;\n  } else if (list) {\n    if (savUtil_cjs.isFunction(data.list)) {\n      data.list = data.list.name;\n    }\n    ret = new SchemaList(schema, data);\n    ret.schemaType = SCHEMA_LIST;\n  } else if (enums) {\n    ret = new SchemaEnum(schema, data);\n    ret.schemaType = SCHEMA_ENUM;\n  } else if (type) {\n    ret = new SchemaField(schema, data);\n    ret.schemaType = SCHEMA_FIELD;\n    if ('id' in ret) {\n      schema.idMap[ret.id] = ret;\n    }\n    return ret;\n  }\n  exportSchema(schema, ret);\n  return ret;\n}\n\nfunction exportSchema(schema, ref) {\n  if (ref.id) {\n    schema.idMap[ref.id] = ref;\n  }\n  if (ref.name) {\n    schema[ref.name] = schema.nameMap[ref.name] = ref;\n  }\n}\n\nvar index = new Schema();\n\nexports.Schema = Schema;\nexports.setErrors = setErrors;\nexports['default'] = index;\nexports.SCHEMA_TYPE = SCHEMA_TYPE;\nexports.SCHEMA_ENUM = SCHEMA_ENUM;\nexports.SCHEMA_STURCT = SCHEMA_STURCT;\nexports.SCHEMA_LIST = SCHEMA_LIST;\nexports.SCHEMA_REFER = SCHEMA_REFER;\nexports.SCHEMA_FIELD = SCHEMA_FIELD;\n});\n\nunwrapExports(savSchema_cjs);\nvar savSchema_cjs_1 = savSchema_cjs.Schema;\nvar savSchema_cjs_4 = savSchema_cjs.SCHEMA_ENUM;\n\nclass Schema$$1 {\r\n  constructor (opts) {\r\n    this.opts = {\r\n      schemaReqField: 'request',\r\n      schemaResField: 'response',\r\n      schemaReqPrefix: 'Req',\r\n      schemaResPrefix: 'Res'\r\n    };\r\n    opts && this.setOptions(opts);\r\n    this.schema = new savSchema_cjs_1();\r\n  }\r\n  setRouter (router) {\r\n    router.on('declareAction', declareActionSchema.bind(this));\r\n  }\r\n  setOptions (opts) {\r\n    Object.assign(this.opts, opts);\r\n  }\r\n  declare (schemas) {\r\n    if (savUtil_cjs_5(schemas)) {\r\n      for (let schemaName in schemas) {\r\n        let schemaData = schemas[schemaName];\r\n        schemaData.name = schemaName;\r\n        this.schema.declare(schemaData);\r\n      }\r\n    } else if (savUtil_cjs_1(schemas)) {\r\n      schemas.forEach(it => {\r\n        this.schema.declare(it);\r\n      });\r\n    }\r\n  }\r\n  getSchema (schemaName) {\r\n    return this.schema[schemaName]\r\n  }\r\n  get proxy () {\r\n    let schema = new Proxy(this, {\r\n      get (target, name) {\r\n        return target.getSchema(name)\r\n      }\r\n    });\r\n    return schema\r\n  }\r\n}\r\n\r\nfunction declareActionSchema (actionRoute) {\r\n  if (actionRoute.action) {\r\n    extractSchema(actionRoute, this);\r\n    extractSchema(actionRoute, this, true);\r\n  }\r\n}\r\n\r\nfunction extractSchema (actionRoute, handler, isResponse) {\r\n  let fieldName = isResponse ? handler.opts.schemaResField : handler.opts.schemaReqField;\r\n  let structPrefix = isResponse ? handler.opts.schemaResPrefix : handler.opts.schemaReqPrefix;\r\n  let value = actionRoute.action[fieldName];\r\n  let structName = savUtil_cjs_51((structPrefix + '_' + actionRoute.name).replace(/\\./g, '_'));\r\n  if (savUtil_cjs_3(value)) {\r\n    structName = value;\r\n  } else if (savUtil_cjs_5(value)) {\r\n    if (value.name) {\r\n      structName = value.name;\r\n    } else {\r\n      value.name = structName;\r\n    }\r\n    let {schema} = handler;\r\n    schema.declare(value);\r\n  }\r\n  actionRoute[isResponse ? 'response' : 'request'] = structName;\r\n}\n\nclass SavBase {\n  constructor (opts) {\n    savUtil_cjs_29(this);\n    this.opts = {\n      name: 'sav',\n      prod: true\n    };\n    this.shareOptions(this.router = new Router());\n    this.shareOptions(this.modalAction = new ModalAction());\n    this.shareOptions(this.schema = new Schema$$1());\n    this.schema.setRouter(this.router);\n    this.routes = {};\n    this.router.on('declareAction', (route) => {\n      if (route.actionName) {\n        let name = route.name;\n        this.routes[name] = route;\n      }\n    });\n    this.mocks = {};\n    this.init();\n    this.setOptions(opts);\n  }\n  get name () {\n    return this.opts.name\n  }\n  setOptions (opts) {\n    Object.assign(this.opts, opts);\n  }\n  shareOptions (target) {\n    target.opts = Object.assign(this.opts, target.opts);\n  }\n  declare ({actions, schemas, modals, mocks}) {\n    if (schemas) {\n      this.schema.declare(schemas);\n    }\n    if (modals) {\n      this.router.declare(modals);\n    }\n    if (actions) {\n      this.modalAction.declare(actions);\n    }\n    if (mocks) {\n      Object.assign(this.mocks, mocks);\n    }\n  }\n  resolvePayload (route, vueRoute) {\n    let savRoute = this.routes[route.name];\n    let schema = this.schema.getSchema(route.name);\n    if (savRoute) {\n      if (route.merge) {\n        route.params = Object.assign({}, vueRoute.params, route.params);\n        route.query = Object.assign({}, vueRoute.query, route.query);\n      }\n      route.path = savRoute.compile(route.params);\n      savUtil_cjs_52(route, 'route', savRoute);\n      savUtil_cjs_52(route, 'savHandle', this);\n      return route\n    } else if (schema) {\n      let stateName = schema.opts.stateName || route.name;\n      let stateData;\n      if (schema.schemaType === savSchema_cjs_4) {\n        stateData = JSON.parse(JSON.stringify(schema.opts.enums));\n      } else {\n        stateData = schema.create(Object.assign({}, schema.opts.state));\n        if (route.merge) {\n          Object.assign(stateData, vueRoute.params, vueRoute.query);\n        }\n      }\n      route.state = {\n        [`${stateName}`]: stateData\n      };\n      return route\n    }\n  }\n  stripError (error) {\n    let err;\n    if (error instanceof Error) {\n      err = Object.assign({\n        message: error.message,\n        type: error.constructor.name,\n        stack: error.stack\n      }, error);\n    } else if (typeof err !== 'object') {\n      return error\n    }\n    if (this.opts.prod) {\n      delete err.step;\n      delete err.stack;\n      delete err.stacks;\n    }\n    if (!err.status) {\n      if (!(error instanceof HttpError)) {\n        err.status = 500;\n      }\n    }\n    return err\n  }\n  mapPayloadState (argv) {\n    let {route, output} = argv;\n    let ret;\n    if (savUtil_cjs_5(output)) {\n      ret = mapping(argv, output) || mapping(route.action, output) || output;\n      let {resState} = route.action;\n      let name = resState || route.response;\n      if ((resState !== false) && name) {\n        return {[`${name}`]: ret}\n      }\n    }\n    return ret\n  }\n}\n\nfunction mapping (target, output) {\n  let {mapState} = target;\n  if (savUtil_cjs_1(mapState)) {\n    return mapState.reduce((ret, name) => {\n      ret[name] = getStatePath(output, name);\n    }, {})\n  } else if (savUtil_cjs_5(mapState)) {\n    let ret = {};\n    for (let name in mapState) {\n      ret[name] = getStatePath(output, mapState[name]);\n    }\n    return ret\n  } else if (savUtil_cjs_4(mapState)) {\n    return mapState(output)\n  }\n  return output\n}\n\nfunction getStatePath (output, stateName) {\n  let pos = stateName.indexOf('.');\n  while (pos !== -1) {\n    output = output[stateName.substring(0, pos)];\n    if (!savUtil_cjs_5(output)) {\n      return\n    }\n    stateName = stateName.substr(pos + 1);\n    pos = stateName.indexOf('.');\n  }\n  return output[stateName]\n}\n\nfunction compose (middleware) {\n  if (!Array.isArray(middleware)) throw new TypeError('Middleware stack must be an array!')\n  for (const fn of middleware) {\n    if (typeof fn !== 'function') throw new TypeError('Middleware must be composed of functions!')\n  }\n\n  /**\n   * @param {Object} context\n   * @return {Promise}\n   * @api public\n   */\n\n  return function (context, next) {\n    // last called middleware #\n    let index = -1;\n    return dispatch(0)\n    function dispatch (i) {\n      if (i <= index) return Promise.reject(new Error('next() called multiple times'))\n      index = i;\n      let fn = middleware[i];\n      if (i === middleware.length) fn = next;\n      if (!fn) return Promise.resolve()\n      try {\n        return Promise.resolve(fn(context, function next () {\n          return dispatch(i + 1)\n        }))\n      } catch (err) {\n        return Promise.reject(err)\n      }\n    }\n  }\n}\n\nclass Sav extends SavBase {\r\n  constructor (opts) {\r\n    super(Object.assign({\r\n      ssr: false,\r\n      prod: process.env.NODE_ENV === 'production'\r\n    }, opts));\r\n  }\r\n  init () {\r\n    this.vueRender = new VueRender(this);\r\n    this.renders = {\r\n      html: new HtmlRender(this)\r\n    };\r\n    this.invokeQueues = [this.invoke];\r\n    this.composed = null;\r\n  }\r\n  before (fn) {\r\n    this.invokeQueues.shift(fn);\r\n  }\r\n  after (fn) {\r\n    this.invokeQueues.push(fn);\r\n  }\r\n  compose () {\r\n    return composeInvokes(this)\r\n  }\r\n  exec (ctx) {\r\n    let {composed} = this;\r\n    if (!composed) {\r\n      composed = this.composed = this.compose();\r\n    }\r\n    return composed(ctx)\r\n  }\r\n  prepare ({ctx, argv, sav}) {\r\n    let {router, modalAction} = sav;\r\n    let url = ctx.path || ctx.originalUrl;\r\n    let accept = ctx.accepts(['html', 'json']);\r\n    if (accept) {\r\n      argv.accept = accept;\r\n    }\r\n    let mat = router.matchRoute(url, ctx.method.toUpperCase());\r\n    if (!mat) {\r\n      throw new HttpError(404)\r\n    }\r\n    Object.assign(argv, mat);\r\n    let invoker = modalAction.getAction(mat.route.actionName);\r\n    if (!invoker) {\r\n      throw new HttpError(404)\r\n    }\r\n    savUtil_cjs_52(argv, 'invoker', invoker);\r\n    argv.input = Object.assign({}, argv.params, ctx.query, mat.route.query, ctx.request.body);\r\n  }\r\n  async invoke ({ctx, argv, sav}, next$$1) {\r\n    let {schema} = sav;\r\n    let {route} = argv;\r\n    let reqStruct = schema.getSchema(route.request);\r\n    if (reqStruct) {\r\n      try {\r\n        reqStruct.check(argv.input, {replace: true});\r\n      } catch (err) {\r\n        err.status = 400;\r\n        err.schema = reqStruct.name || reqStruct.id;\r\n        throw err\r\n      }\r\n    }\r\n    argv.output = await argv.invoker.call(sav, ctx, argv);\r\n    let resStruct = schema.getSchema(route.response);\r\n    if (resStruct) {\r\n      try {\r\n        resStruct.check(argv.output);\r\n      } catch (err) {\r\n        err.status = 500;\r\n        err.schema = resStruct.name || resStruct.id;\r\n        throw err\r\n      }\r\n    }\r\n    return next$$1()\r\n  }\r\n  async invokePayload ({ctx, sav}, argv) {\r\n    let {schema, modalAction} = sav;\r\n    let {route} = argv;\r\n    let invoker = modalAction.getAction(route.actionName);\r\n    let isApi = route.api !== false;\r\n    if (!invoker && isApi) {\r\n      throw new HttpError(404)\r\n    }\r\n    let reqStruct = schema.getSchema(route.request);\r\n    argv.input = Object.assign({}, argv.params, ctx.query, argv.query, argv.data);\r\n    if (reqStruct) {\r\n      try {\r\n        reqStruct.check(argv.input, {replace: true});\r\n      } catch (err) {\r\n        err.status = 400;\r\n        throw err\r\n      }\r\n    }\r\n    if (isApi) {\r\n      let output = argv.output = await invoker.call(sav, ctx, argv);\r\n      let resStruct = schema.getSchema(route.response);\r\n      if (resStruct) {\r\n        resStruct.check(output);\r\n      }\r\n    }\r\n    return this.mapPayloadState(argv)\r\n  }\r\n  render ({ctx, argv, sav}) {\r\n    argv.state = argv.error ? {error: argv.error} : argv.output;\r\n    let render = sav.renders[argv.accept];\r\n    if (sav.opts.ssr && argv.accept === 'html') {\r\n      if (argv.route && isClientView(argv.route)) {\r\n        let mat = sav.vueRender.match(ctx);\r\n        if (mat) {\r\n          return sav.vueRender.render(ctx, mat)\r\n        }\r\n      }\r\n    }\r\n    if (render) {\r\n      return render.render(ctx)\r\n    } else {\r\n      if (argv.error) {\r\n        if (argv.error.status) {\r\n          ctx.status = argv.error.status;\r\n        }\r\n      } else {\r\n        ctx.status = 200;\r\n      }\r\n      ctx.body = argv.state;\r\n    }\r\n  }\r\n}\r\n\r\nfunction isClientView (route) {\r\n  if (route.modal.view) {\r\n    return route.action.view || (route.action.view !== false)\r\n  }\r\n  return !!route.action.view\r\n}\r\n\r\nfunction composeInvokes (sav) {\r\n  let queues = compose(sav.invokeQueues);\r\n  let schema = sav.schema.proxy;\r\n  return (ctx, next$$1) => {\r\n    Object.assign(ctx, {ctx, sav, schema, Exception, HttpError, argv: {}});\r\n    return new Promise((resolve$$1, reject) => {\r\n      sav.prepare(ctx);\r\n      return queues(ctx, () => {\r\n        return sav.render(ctx)\r\n      }).then(resolve$$1).catch(reject)\r\n    }).catch((err) => {\r\n      ctx.argv.error = sav.stripError(err);\r\n      return sav.render(ctx)\r\n    })\r\n  }\r\n}\n\n/**\r\n * 装饰器方法\r\n */\r\n\r\nconst ROUTES_KEY = '_routes_';\r\n\r\nconst get = routeMethod('GET');\r\nconst post = routeMethod('POST');\r\nconst head = routeMethod('HEAD');\r\nconst put = routeMethod('PUT');\r\nconst patch = routeMethod('PATCH');\r\nconst del = routeMethod('DELETE');\r\n\r\nfunction routeMethod (method) {\r\n  return (args) => {\r\n    return (target, action, descriptor) => {\r\n      let it = target[ROUTES_KEY] || (target[ROUTES_KEY] = {});\r\n      it[action] = Object.assign({}, method && {method},\r\n        typeof args === 'string' ? {path: args} : args);\r\n      return descriptor.value\r\n    }\r\n  }\r\n}\r\n\r\nfunction Modal (props) {\r\n  return (target) => {\r\n    let routes = target.prototype[ROUTES_KEY];\r\n    return Object.assign({}, props, routes && {routes})\r\n  }\r\n}\n\nexports.Sav = Sav;\nexports.STATUS_CODES = STATUS_CODES;\nexports.Exception = Exception;\nexports.HttpError = HttpError;\nexports.get = get;\nexports.post = post;\nexports.head = head;\nexports.put = put;\nexports.patch = patch;\nexports.del = del;\nexports.Modal = Modal;\n"]}