{"_id":"tua-api","_rev":"48-74bc3d6ba1ab12738a6379ffaf40c40d","name":"tua-api","dist-tags":{"latest":"2.2.0","next":"1.6.0-1"},"versions":{"0.1.0":{"name":"tua-api","version":"0.1.0","main":"dist/umd.js","module":"dist/es.js","jsnext:main":"dist/es.js","description":"A common tool helps converting configs to api functions","scripts":{"docs":"vuepress dev docs -h localhost","docs:build":"vuepress build docs","cov":"open coverage/lcov-report/index.html","tdd":"cross-env NODE_ENV=test jest --watch","test":"cross-env NODE_ENV=test jest && codecov","lint":"eslint --fix src/**/*.js","deploy":"yarn docs:build && gh-pages -m \"[ci skip]\" -d docs/.vuepress/dist","prebuild":"rimraf dist/* & npm run test","build":"npm run build:wx & npm run build:web","build:wx":"cross-env NODE_ENV=prod rollup -c rollup.mp.config.js","build:web":"cross-env NODE_ENV=prod rollup -c rollup.web.config.js","pub":"npm run build && npm publish"},"husky":{"hooks":{"pre-push":"lint-staged","pre-commit":"lint-staged","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"lint-staged":{"src/**/*.js":["eslint --fix","git add"]},"jest":{"bail":true,"clearMocks":true,"transform":{"^.+\\.js$":"babel-jest"},"collectCoverage":true,"collectCoverageFrom":["src/**"],"setupFiles":["./test/__mocks__/wxMock.js"]},"eslintIgnore":["package.json","dist/*"],"author":{"name":"StEve Young"},"license":"MIT","devDependencies":{"@commitlint/cli":"^7.0.0","@commitlint/config-conventional":"^7.0.1","axios":"^0.18.0","axios-mock-adapter":"^1.14.1","babel-core":"^6.26.0","babel-eslint":"^9.0.0","babel-jest":"^23.6.0","babel-plugin-external-helpers":"^6.22.0","babel-plugin-ramda":"^1.6.3","babel-plugin-transform-decorators-legacy":"^1.3.4","babel-plugin-transform-object-rest-spread":"^6.26.0","babel-preset-env":"^1.6.1","codecov":"^3.1.0","cross-env":"^5.1.6","eslint":"^5.6.0","eslint-config-standard":"^12.0.0","eslint-plugin-import":"^2.8.0","eslint-plugin-node":"^7.0.1","eslint-plugin-promise":"^4.0.1","eslint-plugin-standard":"^4.0.0","fetch-jsonp":"^1.1.3","gh-pages":"^2.0.0","husky":"^1.0.0-rc.15","jest":"^23.6.0","lint-staged":"^7.3.0","rimraf":"^2.6.2","rollup":"^0.66.2","rollup-plugin-babel":"^3.0.7","rollup-plugin-commonjs":"^9.1.8","rollup-plugin-eslint":"^5.0.0","rollup-plugin-json":"^3.1.0","rollup-plugin-node-resolve":"^3.4.0","rollup-plugin-replace":"^2.0.0","vuepress":"^0.14.4"},"dependencies":{"koa-compose":"^4.1.0"},"gitHead":"d43b5453d466fba7b54a625df5c9945b0e7c0aea","_id":"tua-api@0.1.0","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"steveyoung","email":"yangzhenyu2016@gmail.com"},"dist":{"integrity":"sha512-EOWVYMfrwOHxRxxmMlKdqGo3KY38nNFYJjk0Umb0JfpS/bQKAteQ/UeR+8jos5ICgkhiXtUKXBxt8d9xkIdcvA==","shasum":"68c6f3658c5f7279fe6a1d8684df0b4c6ff7d364","tarball":"https://registry.npmjs.org/tua-api/-/tua-api-0.1.0.tgz","fileCount":59,"unpackedSize":931578,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbrfulCRA9TVsSAnZWagAApesP/RlKwlBtXoZpC0W32AEL\nxRQFI9MQRKQcILFEJhapfasflkGkoZ5R4BLaZ8/4ue0J0Maf3djOUwiW7GxE\n08EZf7/eKGXyuV7Rdcly6/lmhdjrRaYltJg5wckyr1nDLwyEXaXPh2o1ejIQ\nUcLm9m1pJczVc/agSt/Z59fD5NgiXCG7GW9TLFwHwd9RteSn7YCOnhG9ZyWa\n/j/gxCOmUK88psOSgYrRIfADB5QZSwV0mJS2L3NGrToYLVIjmUHwVPVywHD7\nVKGRcZcVuc2K8diEHQYUVyeGF8BSSE9ebcN7Kytwgp7XZfQZ77sFXcwK1Xtx\nJkT03bR8JUoeO6NPCeguJRCy4p0l0kne5mnwY6vhzPyLR8WbZG1zvw2Qsp+n\nSqCc0sosuDrWASwmeyipZHnClwOuygDtFGgbWBi/KvGByuJi83IIxX8rhQLJ\nrqJ39BzKe7d+o9Z0w6i0wWSLWIeaotmGbbsDexaZMZoXITza452I1CzDXsi2\nhKoaVygX17MJ9gIjRtVr4hBFSoTkaMMXyBXT0P+iEqmpciYlQcxPbD+wr3+W\nAaB/mDK5uS9Sz1UIcvUctKMI+8CYrZi00b1GOC+UkBf5XO5xWdcscAexh5dV\n+wp7l8gOMycwdRpWx2yjK0vIcjuaFkJHfGdB5KO+wimPry/GTeKIcBukiQX7\n8fO+\r\n=U4hb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDWfAT7vBOp6JysoZFv1ObB20LeugrGLVX2hzkA1BHpHwIgKasB2B0kv4eJiQDbKKB4FSqHe8/IrSgIl6DrZ6qpuig="}]},"maintainers":[{"name":"steveyoung","email":"yangzhenyu2016@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tua-api_0.1.0_1538128805105_0.5955098715867901"},"_hasShrinkwrap":false},"0.1.1-alpha.0":{"name":"tua-api","version":"0.1.1-alpha.0","main":"dist/umd.js","module":"dist/es.js","jsnext:main":"dist/es.js","description":"A common tool helps converting configs to api functions","scripts":{"docs":"vuepress dev docs -h localhost","docs:build":"vuepress build docs","cov":"open coverage/lcov-report/index.html","tdd":"cross-env NODE_ENV=test jest --watch","test":"cross-env NODE_ENV=test jest && codecov","lint":"eslint --fix src/**/*.js","deploy":"yarn docs:build && gh-pages -m \"[ci skip]\" -d docs/.vuepress/dist","prebuild":"rimraf dist/* & npm run test","build":"npm run build:wx & npm run build:web","build:wx":"cross-env NODE_ENV=prod rollup -c rollup.mp.config.js","build:web":"cross-env NODE_ENV=prod rollup -c rollup.web.config.js","pub":"npm run build && npm publish"},"husky":{"hooks":{"pre-push":"lint-staged","pre-commit":"lint-staged","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"lint-staged":{"src/**/*.js":["eslint --fix","git add"]},"jest":{"bail":true,"clearMocks":true,"transform":{"^.+\\.js$":"babel-jest"},"collectCoverage":true,"collectCoverageFrom":["src/**"],"setupFiles":["./test/__mocks__/wxMock.js"]},"eslintIgnore":["package.json","dist/*"],"author":{"name":"StEve Young"},"license":"MIT","devDependencies":{"@commitlint/cli":"^7.0.0","@commitlint/config-conventional":"^7.0.1","axios":"^0.18.0","axios-mock-adapter":"^1.14.1","babel-core":"^6.26.0","babel-eslint":"^9.0.0","babel-jest":"^23.6.0","babel-plugin-external-helpers":"^6.22.0","babel-plugin-ramda":"^1.6.3","babel-plugin-transform-decorators-legacy":"^1.3.4","babel-plugin-transform-object-rest-spread":"^6.26.0","babel-preset-env":"^1.6.1","codecov":"^3.1.0","cross-env":"^5.1.6","eslint":"^5.6.0","eslint-config-standard":"^12.0.0","eslint-plugin-import":"^2.8.0","eslint-plugin-node":"^7.0.1","eslint-plugin-promise":"^4.0.1","eslint-plugin-standard":"^4.0.0","fetch-jsonp":"^1.1.3","gh-pages":"^2.0.0","husky":"^1.0.0-rc.15","jest":"^23.6.0","lint-staged":"^7.3.0","rimraf":"^2.6.2","rollup":"^0.66.2","rollup-plugin-babel":"^3.0.7","rollup-plugin-commonjs":"^9.1.8","rollup-plugin-eslint":"^5.0.0","rollup-plugin-json":"^3.1.0","rollup-plugin-node-resolve":"^3.4.0","rollup-plugin-replace":"^2.0.0","vuepress":"^0.14.4"},"dependencies":{"koa-compose":"^4.1.0"},"readme":"<h1 align=\"center\">tua-api</h1>\n\n<h5 align=\"center\">\n    让我们优雅地调用 api~\n</h5>\n\n<p align=\"center\">\n    <a href=\"https://tuateam.github.io/tua-api/\">👉完整文档地址点这里👈</a>\n</p>\n\n<p align=\"center\">\n    <a href=\"https://circleci.com/gh/tuateam/tua-api/tree/master\"><img src=\"https://img.shields.io/circleci/project/github/tuateam/tua-api/master.svg\" alt=\"Build Status\"></a>\n    <a href=\"https://codecov.io/github/tuateam/tua-api?branch=master\"><img src=\"https://img.shields.io/codecov/c/github/tuateam/tua-api/master.svg\" alt=\"Coverage Status\"></a>\n    <a href=\"https://www.npmjs.com/package/tua-api\"><img src=\"https://img.shields.io/npm/v/tua-api.svg\" alt=\"Version\"></a>\n    <a href=\"https://www.npmjs.com/package/tua-api\"><img src=\"https://img.shields.io/npm/l/tua-api.svg\" alt=\"License\"></a>\n</p>\n\n## `tua-api` 是什么？\n`tua-api` 是一个针对发起 api 请求提供辅助功能的库。采用 ES6+ 语法，将全部 api 使用 Promise 包裹，并采用 jest 进行了完整的单元测试。\n\n目前已适配：\n\n* web 端：`tua-api`\n* 小程序端：`tua-api/dist/mp`\n\n## 安装\n### web 端\n#### 安装本体\n\n```bash\n$ npm i -S tua-api\n# OR\n$ yarn add tua-api\n```\n\n然后直接导入即可\n\n```js\nimport TuaApi from 'tua-api'\n```\n\n#### 安装武器\n安装“武器”分为两种情况:\n\n* [已配置 CORS 跨域请求头](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS)，或是没有跨域需求时，那么再装一个 `axios` 即可\n\n```bash\n$ npm i -S axios\n# OR\n$ yarn add axios\n```\n\n* 若是用不了 CORS，那么就需要装 `fetch-jsonp` 借助 jsonp 实现跨域\n\n```bash\n$ npm i -S fetch-jsonp\n# OR\n$ yarn add fetch-jsonp\n```\n\n但是 jsonp 只支持使用 get 的方式请求，所以如果需要发送 post 或其他方式的请求，还是需要装 `axios`。\n\n### 小程序端\n#### 安装本体\n\n```bash\n$ npm i -S tua-api\n# OR\n$ yarn add tua-api\n```\n\n**注意并非直接导入！**因为正宫是 web 端...\n\n```js\nimport TuaApi from 'tua-api/dist/mp'\n```\n\n或者在 webpack 配置中，设置 `alias`。\n\n## `tua-api` 能干什么？\n`tua-api` 能实现统一管理 api 配置（例如一般放在 `src/apis/` 下）。经过处理后，业务侧代码只需要这样写即可：\n\n```js\nimport { fooApi } from '@/apis/'\n\nfooApi\n    .bar({ a: '1', b: '2' }) // 发起请求，a、b 是请求参数\n    .then(console.log)       // 收到响应\n    .catch(console.error)    // 处理错误\n```\n\n不仅如此，还有一些其他功能：\n\n* 参数校验\n* 默认参数\n* 中间件（koa 风格）\n* ...\n\n```js\n// 甚至可以更进一步和 tua-storage 配合使用\nimport TuaStorage from 'tua-storage'\n\nconst storage = new TuaStorage({ ... })\n\nconst fetchParam = {\n    key: fooApi.bar.key,\n    syncParams: { a: 'a', b: 'b' },\n\n    // 过期时间，默认值为实例化时的值，以秒为单位\n    expires: 10,\n\n    // 是否直接调用同步函数更新数据，默认为 false\n    // 适用于需要强制更新数据的场景，例如小程序中的下拉刷新\n    isForceUpdate: true,\n\n    // ...\n}\n\nstorage\n    .load(fetchParam)\n    .then(console.log)\n    .catch(console.error)\n```\n\n## 怎么写 `api` 配置？\n拿以下 api 地址举例：\n\n* https://example-base.com/foo/bar/something/create\n* https://example-base.com/foo/bar/something/modify\n* https://example-base.com/foo/bar/something/delete\n\n### 地址结构划分\n以上地址，一般将其分为`3`部分：\n\n* host: `https://example-base.com/foo/bar/`\n* prefix: `something`\n* pathList: `[ 'create', 'modify', 'delete ]`\n\n### 文件结构\n`api/` 一般是这样的文件结构：\n\n```\n.\n└── apis\n    ├── prefix-1.js\n    ├── prefix-2.js\n    ├── something.js // <-- 以上的 api 地址会放在这里\n    └── index.js\n```\n\n### 基础配置内容\n```js\n// src/apis/something.js\n\nexport default {\n    // 请求的公用服务器地址。\n    host: 'http://example-base.com/foo/bar/',\n\n    // 请求的中间路径，建议与文件同名，以便后期维护。\n    prefix: 'something',\n\n    // 接口地址数组\n    pathList: [\n        { path: 'create' },\n        { path: 'modify' },\n        { path: 'delete' },\n    ],\n}\n```\n\n[更多配置请点击这里查看](./docs/config/default.md)\n\n### 配置导出\n最后来看一下 `apis/index.js` 该怎么写：\n\n```js\nimport TuaApi from 'tua-api' // 小程序用 dist/mp\nimport fakeGetConfig from './fake-get'\nimport fakePostConfig from './fake-post'\n\n// 初始化\nconst tuaApi = new TuaApi({ ... })\n\n// 使用中间件\ntuaApi\n    .use(async (ctx, next) => {\n        // 请求发起前\n        console.log('before: ', ctx)\n\n        await next()\n\n        // 响应返回后\n        console.log('after: ', ctx)\n    })\n    // 链式调用\n    .use(...)\n\n// 生成请求函数对象\nconst fakeGet = tuaApi.getApi(fakeGetConfig)\nconst fakePost = tuaApi.getApi(fakePostConfig)\n\nexport {\n    fakeGet,\n    fakePost,\n}\n\n```\n\n### 配置的构成\n在 `tua-api` 中配置分为三种：\n\n* 默认配置（调用 `new TuaApi({ ... })` 时传递的）\n* 公共配置（和 `pathList` 同级的配置）\n* 自身配置（`pathList` 数组中的对象上的配置）\n\n其中优先级自然是:\n\n`自身配置 > 公共配置 > 默认配置`\n\n<p align=\"center\">\n    <a href=\"https://tuateam.github.io/tua-api/config/\">👉更多配置点击这里👈</a>\n</p>\n","readmeFilename":"README.md","gitHead":"30f43705feb39f7174d08c72b19112e1c7a6b966","_id":"tua-api@0.1.1-alpha.0","_npmVersion":"6.4.0","_nodeVersion":"10.9.0","_npmUser":{"name":"steveyoung","email":"yangzhenyu2016@gmail.com"},"dist":{"integrity":"sha512-UAbWPhOxcalLgnLZjvWYVqst2XHVeaNjUY74Bw8wjFcoykCMQTcs4z+76duGTLQYAnH5RDxn7sX1g+B1y16ruw==","shasum":"6209e5b26cea6fa8f784555fd85c566d2b303d28","tarball":"https://registry.npmjs.org/tua-api/-/tua-api-0.1.1-alpha.0.tgz","fileCount":29,"unpackedSize":469276,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbsgMCCRA9TVsSAnZWagAAtEAQAJV5nEiyVwabBZfqtTo1\nLPcy65A3SiR03LYQ3iOOHI2wlsGbEU/cymZ/y2hG6iVOIjDBv+ps3z7KjNm4\nrZC1qzbzLwH5GM7HZ9ezhuFZg0i8jBG1yrQ6XGiiUIO0ocP+WJqENLlvYk9R\nyU11/9CuzY3P9xTrxX9WlDlZ9+gF9Js4+zwCB46HxmWqDwcRYRkau9JhgS9I\nCOEVXpX7JdKc7RH43bu3Pnc2tNX4Hb4DX8ft4xZi29LyNXXkqdCMRitT+pQO\nUMnoTSXGP5xIy6gbVZCGBbE3ctD5Z+3VAaWlKj18DHTmh6OGo5MVpApx2gRN\n88kkJWH7KSKKzXUUeEPVtLbB3l+ous0KE/8QNrH+y3OyFsDwPoZ+jQ0LyTw0\nudhHUCU8UvdDvY6NVNLJhMVyPK+l4cQgVjiVTDBd1+A0+oyu4qlNa0Q1WRhz\n2u/JNs1Z2hmv79K1AFYPGYx+B4KBEao733aKhTyU1a5f7oYbMI4s6DG022w/\nuDQfwy8HqZ5FyvSd/grwRqyDSHJ+HQexTm+V2xSnC15iTya0a7AGyaXZNk0p\nYLmXGu9doQhp1BdQg+ypxMv7KJbh4u0jxALaMgbUJKb5b94/qTd/oYdI1Xbl\n5G0G1+xOyVncMg07qDzJ4xDlrOBiE+8PI2ptumQsIVPtBjOiCw2XR3VuEObs\nYEMs\r\n=sEys\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHcPjylQb3R1Gl0Ni979pJoOVwGaw/qJ9TEn+Mk5I54oAiEApuA9M6Aa0JZuDiIHysDJxkfClloCv4JmNXpLMvqHyZY="}]},"maintainers":[{"name":"steveyoung","email":"yangzhenyu2016@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tua-api_0.1.1-alpha.0_1538392833877_0.04831259509569086"},"_hasShrinkwrap":false},"0.1.1":{"name":"tua-api","version":"0.1.1","main":"dist/umd.js","module":"dist/es.js","jsnext:main":"dist/es.js","description":"A common tool helps converting configs to api functions","scripts":{"docs":"vuepress dev docs -h localhost","docs:build":"vuepress build docs","cov":"open coverage/lcov-report/index.html","tdd":"cross-env NODE_ENV=test jest --watch","test":"cross-env NODE_ENV=test jest && codecov","lint":"eslint --fix src/**/*.js","deploy":"yarn docs:build && gh-pages -m \"[ci skip]\" -d docs/.vuepress/dist","prebuild":"rimraf dist/* & npm run test","build":"npm run build:wx & npm run build:web","build:wx":"cross-env NODE_ENV=prod rollup -c rollup.mp.config.js","build:web":"cross-env NODE_ENV=prod rollup -c rollup.web.config.js","pub":"npm run build && npm publish"},"husky":{"hooks":{"pre-push":"lint-staged","pre-commit":"lint-staged","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"lint-staged":{"src/**/*.js":["eslint --fix","git add"]},"jest":{"bail":true,"clearMocks":true,"transform":{"^.+\\.js$":"babel-jest"},"collectCoverage":true,"collectCoverageFrom":["src/**"],"setupFiles":["./test/__mocks__/wxMock.js"]},"eslintIgnore":["package.json","dist/*"],"author":{"name":"StEve Young"},"license":"MIT","devDependencies":{"@commitlint/cli":"^7.0.0","@commitlint/config-conventional":"^7.0.1","axios":"^0.18.0","axios-mock-adapter":"^1.14.1","babel-core":"^6.26.0","babel-eslint":"^9.0.0","babel-jest":"^23.6.0","babel-plugin-external-helpers":"^6.22.0","babel-plugin-ramda":"^1.6.3","babel-plugin-transform-decorators-legacy":"^1.3.4","babel-plugin-transform-object-rest-spread":"^6.26.0","babel-preset-env":"^1.6.1","codecov":"^3.1.0","cross-env":"^5.1.6","eslint":"^5.6.0","eslint-config-standard":"^12.0.0","eslint-plugin-import":"^2.8.0","eslint-plugin-node":"^7.0.1","eslint-plugin-promise":"^4.0.1","eslint-plugin-standard":"^4.0.0","fetch-jsonp":"^1.1.3","gh-pages":"^2.0.0","husky":"^1.0.0-rc.15","jest":"^23.6.0","lint-staged":"^7.3.0","rimraf":"^2.6.2","rollup":"^0.66.2","rollup-plugin-babel":"^3.0.7","rollup-plugin-commonjs":"^9.1.8","rollup-plugin-eslint":"^5.0.0","rollup-plugin-json":"^3.1.0","rollup-plugin-node-resolve":"^3.4.0","rollup-plugin-replace":"^2.0.0","vuepress":"^0.14.4"},"dependencies":{"koa-compose":"^4.1.0"},"gitHead":"68acf66c0a24468ba6a7b62167fbb11355c311a7","_id":"tua-api@0.1.1","_npmVersion":"6.4.0","_nodeVersion":"10.9.0","_npmUser":{"name":"steveyoung","email":"yangzhenyu2016@gmail.com"},"dist":{"integrity":"sha512-cHSoflIOp3vTyhEPpXkaykffvIYwmTbHe8qvEV23ypkze4M+ZeNiFrX6iXDPKNfzPMllI1FK+Hv4/o9sJRKKxw==","shasum":"8784f2ef1c18a102ed9771b3853693a4b66e8300","tarball":"https://registry.npmjs.org/tua-api/-/tua-api-0.1.1.tgz","fileCount":29,"unpackedSize":469268,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbsiQgCRA9TVsSAnZWagAACToP/RLEuHt+cbHK6e1htj79\n10qesZqLz0a60gSxQlE80nqeDG3OE10KpJg7JWwXN8bKuPFf9pMEFFjNNkxb\ngGGMBRgeRjy5sWCptaFPNVipia5oeX8XMEj3NESSc1qL2FrHwFPdKsDn/+B2\nfDB8UmMaOCADMtdlIIYwH+IKzDR5isdW5mcT1OWEFrv1uHtKIn8tVdUo/EmE\nrir3630AmQeRCowwfuaAe4cmZq8ADZZA8d9xOMb30Qq5h0gGaxyNhGCZ+8gh\n8YOXAV3dd61fC/m7o8eI75ZjVJbAT0MZ7Re77lP91aGyUx1j3BqccePeU98R\nLllc6hFGegN/D3OgDjE+qIEY4iNPrIFs3CgshYNkqoqjG3eLx9O6jXdf46Sd\nFckCiGwpd79nWRIA6C+mtoDSVR4cP5okELqmcQZoMpZ1ji7+el/EL9px6LTG\nSi/UZK2XmWl05AUDrU/LsCc0ZdBXW825T7vr5BrgLWepNRXuz67WAcn5gxjk\nr/OxpJyrN1RDPUfFxUy/V8yY/5Ev8Tnga3aeSFdfxPmZUVhUD+IP8tMj2JMl\nWbl2UNYX7LKroCrO2CK/hS7wGw96zwHgXEZU7H7KqMeXbLuKtEROjKW18wIZ\nDsUdZ0o0qyWEHOV5sRr75o4n1917p+PkjngXVhc7cTBi3NDK80Yw5prP3lXb\nAuYO\r\n=PFMK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCD3MWqbIIJkKKH54vmHH8CDMNhef6NgSVCWW90QLsm/QIgGIm05I7CUTYa2UtR5MwYH+FWUfc6BR1bBBaMP/hsi2Q="}]},"maintainers":[{"name":"steveyoung","email":"yangzhenyu2016@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tua-api_0.1.1_1538401311735_0.4072448166894982"},"_hasShrinkwrap":false},"0.2.0":{"name":"tua-api","version":"0.2.0","main":"dist/umd.js","module":"dist/es.js","jsnext:main":"dist/es.js","description":"A common tool helps converting configs to api functions","scripts":{"docs":"vuepress dev docs -h localhost","docs:build":"vuepress build docs","cov":"open coverage/lcov-report/index.html","tdd":"cross-env NODE_ENV=test jest --watch","test":"cross-env NODE_ENV=test jest && codecov","lint":"eslint --fix src/ test/","deploy":"yarn docs:build && gh-pages -m \"[ci skip]\" -d docs/.vuepress/dist","prebuild":"rimraf dist/* & npm run test","build":"npm run build:wx & npm run build:web","build:wx":"cross-env NODE_ENV=prod rollup -c rollup.mp.config.js","build:web":"cross-env NODE_ENV=prod rollup -c rollup.web.config.js","pub":"npm run build && npm publish"},"husky":{"hooks":{"pre-push":"lint-staged","pre-commit":"lint-staged","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"lint-staged":{"{src,test}/**/*.js":["eslint --fix","git add"]},"jest":{"bail":true,"clearMocks":true,"transform":{"^.+\\.js$":"babel-jest"},"collectCoverage":true,"collectCoverageFrom":["src/**"],"setupFiles":["./test/__mocks__/wxMock.js"]},"eslintIgnore":["package.json","dist/*"],"author":{"name":"StEve Young"},"license":"MIT","devDependencies":{"@commitlint/cli":"^7.0.0","@commitlint/config-conventional":"^7.0.1","axios":"^0.18.0","axios-mock-adapter":"^1.14.1","babel-core":"^6.26.0","babel-eslint":"^9.0.0","babel-jest":"^23.6.0","babel-plugin-external-helpers":"^6.22.0","babel-plugin-ramda":"^1.6.3","babel-plugin-transform-decorators-legacy":"^1.3.4","babel-plugin-transform-object-rest-spread":"^6.26.0","babel-preset-env":"^1.6.1","codecov":"^3.1.0","cross-env":"^5.1.6","eslint":"^5.6.0","eslint-config-standard":"^12.0.0","eslint-plugin-import":"^2.8.0","eslint-plugin-node":"^7.0.1","eslint-plugin-promise":"^4.0.1","eslint-plugin-standard":"^4.0.0","fetch-jsonp":"^1.1.3","gh-pages":"^2.0.0","husky":"^1.0.0-rc.15","jest":"^23.6.0","lint-staged":"^7.3.0","rimraf":"^2.6.2","rollup":"^0.66.2","rollup-plugin-babel":"^3.0.7","rollup-plugin-commonjs":"^9.1.8","rollup-plugin-eslint":"^5.0.0","rollup-plugin-json":"^3.1.0","rollup-plugin-node-resolve":"^3.4.0","rollup-plugin-replace":"^2.0.0","vuepress":"^0.14.4"},"dependencies":{"koa-compose":"^4.1.0"},"gitHead":"1e51d4ac68b187f102d0cd462d1f76216697a233","_id":"tua-api@0.2.0","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"steveyoung","email":"yangzhenyu2016@gmail.com"},"dist":{"integrity":"sha512-ssFHni3s2/RLdMo3gFXjkRlNOq8X6hIJKW2YYyLGHsTZ7fixYnFp06KsHvFBJ6DedjYvczt1tu0/ebfgMNjkqA==","shasum":"d787b697b306541765f83d1ba893f2d05b6be88c","tarball":"https://registry.npmjs.org/tua-api/-/tua-api-0.2.0.tgz","fileCount":58,"unpackedSize":934311,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbx07hCRA9TVsSAnZWagAAUMAP/3bs5Q7cOm+vb64x0d36\ndpgWz3oJ7uAYI84LlaTXa3iYwzpTmh3DQhum2WewE9fofeOsdhUoaqi8UdkY\ngGMNWyap0wX+OM4V9Ty0YiM4lyHIfTy0zQ5KTo8xTWjFr3x6KyQ+b94e0PR1\nbcAWIA7qOsus9Qv2RCnSHW6+2n63hzo+4sdY3bZtb8C6vQLX7WUEi6uTsR8J\nPwXPWS/uEYSZUhTFldsytANBdSxOKJXsKVA2NiKx05dxdL4IYsUzvFRAaaDS\n75lAVw+vn9FHirH4Ba0rqadWatiKz1DTmHQqisuPpTWN4CHhQaZ2+ZUJp8YM\nlTzI5XxMjy9ruOTpNaOhlFsKW3orMBiL44pAk0Hi0sgo6BAhwLOXYvHVQ7TB\n26FQEKdrJ/WB6CnFD3xCalSlQbAyu1x3N8uxUl5KV4vIQ0DSOIevVtBvMhcQ\nPtI408IXfDBYE6XkXAyHzHqDsVElLRpe0J8KRHyVwZtB4uV4sDrJBLMeMvUg\nruNmP7tK/v98qQiSGYZM3nbMHc+LUrqm5uEUIwvooFz0LPZx/GBRr3zMIjbb\nVeUqsXQQIJC4YgFcGdlEhL04zLY4hYRpUoM+dvGYtKXa3tMn50L/x+1TaVJ7\nnElQIVzUgQlxGd6heJCnvqLIXQiZ2MBKGGBn70GRPEV3b6D4uDm0ZIZIRYuu\nteqJ\r\n=nDrd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICOCzM3dhAglewAYYNNOm9ijKaP9STci5m6K2GbmIRqjAiAgwXMM5zy14v/9wyTJ6e7uJXW9ZafFYYZZBK+T5Eh4nA=="}]},"maintainers":[{"name":"steveyoung","email":"yangzhenyu2016@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tua-api_0.2.0_1539788512804_0.25497063578707957"},"_hasShrinkwrap":false},"0.2.1":{"name":"tua-api","version":"0.2.1","main":"dist/umd.js","module":"dist/es.js","jsnext:main":"dist/es.js","description":"A common tool helps converting configs to api functions","scripts":{"docs":"vuepress dev docs -h localhost","docs:build":"vuepress build docs","cov":"open coverage/lcov-report/index.html","tdd":"cross-env NODE_ENV=test jest --watch","test":"cross-env NODE_ENV=test jest && codecov","lint":"eslint --fix src/ test/","deploy":"yarn docs:build && gh-pages -m \"[ci skip]\" -d docs/.vuepress/dist","prebuild":"rimraf dist/* & npm run test","build":"npm run build:wx & npm run build:web","build:wx":"cross-env NODE_ENV=prod rollup -c rollup.mp.config.js","build:web":"cross-env NODE_ENV=prod rollup -c rollup.web.config.js","pub":"npm run build && npm publish"},"husky":{"hooks":{"pre-push":"lint-staged","pre-commit":"lint-staged","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"lint-staged":{"{src,test}/**/*.js":["eslint --fix","git add"]},"jest":{"bail":true,"clearMocks":true,"transform":{"^.+\\.js$":"babel-jest"},"collectCoverage":true,"collectCoverageFrom":["src/**"],"setupFiles":["./test/__mocks__/wxMock.js"]},"eslintIgnore":["package.json","dist/*"],"author":{"name":"StEve Young"},"license":"MIT","devDependencies":{"@commitlint/cli":"^7.0.0","@commitlint/config-conventional":"^7.0.1","axios":"^0.18.0","axios-mock-adapter":"^1.14.1","babel-core":"^6.26.0","babel-eslint":"^9.0.0","babel-jest":"^23.6.0","babel-plugin-external-helpers":"^6.22.0","babel-plugin-ramda":"^1.6.3","babel-plugin-transform-decorators-legacy":"^1.3.4","babel-plugin-transform-object-rest-spread":"^6.26.0","babel-preset-env":"^1.6.1","codecov":"^3.1.0","cross-env":"^5.1.6","eslint":"^5.6.0","eslint-config-standard":"^12.0.0","eslint-plugin-import":"^2.8.0","eslint-plugin-node":"^7.0.1","eslint-plugin-promise":"^4.0.1","eslint-plugin-standard":"^4.0.0","fetch-jsonp":"^1.1.3","gh-pages":"^2.0.0","husky":"^1.0.0-rc.15","jest":"^23.6.0","lint-staged":"^7.3.0","rimraf":"^2.6.2","rollup":"^0.66.2","rollup-plugin-babel":"^3.0.7","rollup-plugin-commonjs":"^9.1.8","rollup-plugin-eslint":"^5.0.0","rollup-plugin-json":"^3.1.0","rollup-plugin-node-resolve":"^3.4.0","rollup-plugin-replace":"^2.0.0","vuepress":"^0.14.4"},"dependencies":{"koa-compose":"^4.1.0"},"gitHead":"70eba9e28e03ad612cd75a7a4d9a3971328db4c4","_id":"tua-api@0.2.1","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"steveyoung","email":"yangzhenyu2016@gmail.com"},"dist":{"integrity":"sha512-TQHAnAG6s9MepZix/R/cJwfn7wXH1JcFZ6uAq/wK3TnJCaewRsCJKHDnq5il2sZ4TrF4SOlyMhrJTif3T69CNA==","shasum":"de6d86f5ddc31e62ed7743d11543d65bc0b20374","tarball":"https://registry.npmjs.org/tua-api/-/tua-api-0.2.1.tgz","fileCount":58,"unpackedSize":946481,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbzZrzCRA9TVsSAnZWagAAC4cP/jJCwfUjeFU/y7oM/RsS\niAlmTowfZ2zGOjgnotBqaFQR3qmIInIwSZWhaY6IxW4pgOAEWCd4Y0qEfyzA\nPJSwbcAWw3yiN1jVe/i9OGHop2SPU84D1RD12tOcF+6trge19PQ/qrurj9oK\nF8Oba7cQs+LkCGIg26aRc1tF0NWR9EmEbyYqvH/FZZvMYUZuoFc0D1HcuZUx\njoelnWAGd1c8d+cr43iVt9AwUtbdiD1NhHl7alLMHM8a2+fPuOAv4VBwjX6i\nVviwfVameqKXh8D5b9KEV/6Pi6Hrv+q8iI9zszWbSb+X+wEy92Tr+FFBBeLI\nsSRMJUmMHH/cLiidLo5Fgz3l4yonHi8Qh5koszh3B76rkHVkSlOEcYnGib7y\nAwHWLBrIX6TBke6QW6GxmMdNdsTbi8qls/+JSyan+BvkJraaprQYk7f+UE4c\niM+fI2UqUPAIIEGTW13bGd/JKKwf3mU4Rl0Ia21AX8b4hAS0NqAiRFbuQwXE\ncUi3kWHvXGPXNvy8nTEpueIHE263HTJLRRBJZADe7UPuZnYwrxFhLiN5Spb5\n2X/qbCF6Qhig51GGmoxaOTx7nMil9IiVUElO6J1dQ4zPGL9Ro2D8iCv6GZv0\n4DdUnEs3szGZ/HZzzmLBLV2YKq+7KPoP4SVSw4R30HrXyC5bFuFPHK17oQ3J\n6JiN\r\n=5l9K\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCtgjUzR0lsvp3i/OiffaRIi95N7W65REIW0uIQMEIm+gIgcXEJCzLub4EVFIifp/FTGy4Lw9BfNtck/bzkMtZiJZM="}]},"maintainers":[{"name":"steveyoung","email":"yangzhenyu2016@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tua-api_0.2.1_1540201202147_0.28682879084326784"},"_hasShrinkwrap":false},"0.2.2":{"name":"tua-api","version":"0.2.2","main":"dist/umd.js","module":"dist/es.js","jsnext:main":"dist/es.js","description":"A common tool helps converting configs to api functions","scripts":{"docs":"vuepress dev docs -h localhost","docs:build":"vuepress build docs","cov":"open coverage/lcov-report/index.html","tdd":"cross-env NODE_ENV=test jest --watch","test":"cross-env NODE_ENV=test jest && codecov","lint":"eslint --fix src/ test/","deploy":"yarn docs:build && gh-pages -m \"[ci skip]\" -d docs/.vuepress/dist","prebuild":"rimraf dist/* & npm run test","build":"npm run build:wx & npm run build:web","build:wx":"cross-env NODE_ENV=prod rollup -c rollup.mp.config.js","build:web":"cross-env NODE_ENV=prod rollup -c rollup.web.config.js","pub":"npm run build && npm publish"},"husky":{"hooks":{"pre-push":"lint-staged","pre-commit":"lint-staged","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"lint-staged":{"{src,test}/**/*.js":["eslint --fix","git add"]},"jest":{"bail":true,"clearMocks":true,"transform":{"^.+\\.js$":"babel-jest"},"collectCoverage":true,"collectCoverageFrom":["src/**"],"setupFiles":["./test/__mocks__/wxMock.js"]},"eslintIgnore":["package.json","dist/*"],"author":{"name":"StEve Young"},"license":"MIT","devDependencies":{"@commitlint/cli":"^7.0.0","@commitlint/config-conventional":"^7.0.1","axios":"^0.18.0","axios-mock-adapter":"^1.14.1","babel-core":"^6.26.0","babel-eslint":"^9.0.0","babel-jest":"^23.6.0","babel-plugin-external-helpers":"^6.22.0","babel-plugin-ramda":"^1.6.3","babel-plugin-transform-decorators-legacy":"^1.3.4","babel-plugin-transform-object-rest-spread":"^6.26.0","babel-preset-env":"^1.6.1","codecov":"^3.1.0","cross-env":"^5.1.6","eslint":"^5.6.0","eslint-config-standard":"^12.0.0","eslint-plugin-import":"^2.8.0","eslint-plugin-node":"^7.0.1","eslint-plugin-promise":"^4.0.1","eslint-plugin-standard":"^4.0.0","fetch-jsonp":"^1.1.3","gh-pages":"^2.0.0","husky":"^1.0.0-rc.15","jest":"^23.6.0","lint-staged":"^7.3.0","rimraf":"^2.6.2","rollup":"^0.66.2","rollup-plugin-babel":"^3.0.7","rollup-plugin-commonjs":"^9.1.8","rollup-plugin-eslint":"^5.0.0","rollup-plugin-json":"^3.1.0","rollup-plugin-node-resolve":"^3.4.0","rollup-plugin-replace":"^2.0.0","vuepress":"^0.14.4"},"dependencies":{"koa-compose":"^4.1.0"},"gitHead":"22e9adc485873ac3c866c0297f15c299cc4b06f3","_id":"tua-api@0.2.2","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"steveyoung","email":"yangzhenyu2016@gmail.com"},"dist":{"integrity":"sha512-U++cSaBOpAFyXbV69QFlFrzSukeqMWAwCHSr5DyVENr2wJPddFeNl86bv++msMD/6YLedPCwn9yOd6KgG3Fu2g==","shasum":"4ef4c48f353760fe39d2047890c18b41f594948b","tarball":"https://registry.npmjs.org/tua-api/-/tua-api-0.2.2.tgz","fileCount":58,"unpackedSize":947260,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb2Ue0CRA9TVsSAnZWagAAx9MP/RcqkWjJ86P9Cfn5Uti/\nk1qqatKdFiaDHfp90xcg/PaWijqqjiQr7nfajky/QS2BZ5hVc3WrFEjwNI4R\nm4Q87lWzqQCzh6asItebMsuZwLthS18QFc4dld/C0Q2Soc3LRfjVzAJGGY8C\ncs2fqKwVfXsgbR/gHh6TQ5ghd0op+leLvHPADOZxsqVLjYexgKJWh4fS6Mpf\nu6FAgllxu4PXHauFy9hdBq303Ozte1560nuLPY+yTNySBSaFuem4ulheUj9Q\n1i7yJS9Jl6H+rKDepmrc8l3CL3QDPHh+YZO4yM5tS+zUB3ihPqxf+FZW4+sd\nhuqWURmXQNpFfThxJyLQuu/Ym8SxL2LP9iLypZbp6ORTr1UK4M34z2yL59f4\nAQEbUQWSjTG+Smq7WxyL8OL/Fp9BR5MoAD4vSQ/0ACmTEyBnAgVhOw5b54Ap\n17210Tt3v92w74V9KvDSSWNe1t8JVxkEsF/WEPjOrplecsJ7P67cgINdx0b0\nLhS88QDa3rtWwzNKGMtJNGVU1VmWa0lUkFJL1Mcef004F+RkgDRpiWBJwGqi\nCqwLEZ3VTlY5B4q+tgsz1JiokCbJBcBvWLnem6dnHIUAw/AoMNkLo5ZFw49f\nkg2fof5pRKYqrmX/pazIwcRroukdvpCRb5x6R4eKuQBi5HNNenB+XQMNCBm2\nyVVX\r\n=6h2J\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGHIXhDnerdEGqbo/kaKPErSzu0B04kuvVZokUFXnhAoAiEAmJz/whkILM3GmFqudjW3yZvONbS03DHWOaYkAMG89O0="}]},"maintainers":[{"name":"steveyoung","email":"yangzhenyu2016@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tua-api_0.2.2_1540966323887_0.5621901212579028"},"_hasShrinkwrap":false},"0.3.1":{"name":"tua-api","version":"0.3.1","main":"dist/umd.js","module":"dist/es.js","jsnext:main":"dist/es.js","description":"A common tool helps converting configs to api functions","scripts":{"docs":"vuepress dev docs -h localhost","docs:build":"vuepress build docs","cov":"open coverage/lcov-report/index.html","tdd":"cross-env NODE_ENV=test jest --watch","test":"cross-env NODE_ENV=test jest && codecov","lint":"eslint --fix src/ test/","deploy":"yarn docs:build && gh-pages -m \"[ci skip]\" -d docs/.vuepress/dist","prebuild":"rimraf dist/* & npm run test","build":"cross-env NODE_ENV=prod rollup -c","pub":"npm run build && npm publish"},"husky":{"hooks":{"pre-push":"lint-staged","pre-commit":"lint-staged","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"lint-staged":{"{src,test}/**/*.js":["eslint --fix","git add"]},"jest":{"bail":true,"clearMocks":true,"transform":{"^.+\\.js$":"babel-jest"},"collectCoverage":true,"collectCoverageFrom":["src/**"]},"eslintIgnore":["package.json","dist/*"],"author":{"name":"StEve Young"},"license":"MIT","devDependencies":{"@commitlint/cli":"^7.2.1","@commitlint/config-conventional":"^7.1.2","axios-mock-adapter":"^1.15.0","babel-core":"^6.26.3","babel-eslint":"^10.0.1","babel-jest":"^23.6.0","babel-plugin-external-helpers":"^6.22.0","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-object-rest-spread":"^6.26.0","babel-preset-env":"^1.7.0","codecov":"^3.1.0","cross-env":"^5.2.0","eslint":"^5.9.0","eslint-config-standard":"^12.0.0","eslint-plugin-import":"^2.14.0","eslint-plugin-node":"^8.0.0","eslint-plugin-promise":"^4.0.1","eslint-plugin-standard":"^4.0.0","gh-pages":"^2.0.1","husky":"^1.1.4","jest":"^23.6.0","lint-staged":"^8.0.4","rimraf":"^2.6.2","rollup":"^0.67.1","rollup-plugin-babel":"^3.0.7","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-eslint":"^5.0.0","rollup-plugin-json":"^3.1.0","rollup-plugin-node-resolve":"^3.4.0","rollup-plugin-replace":"^2.1.0","vuepress":"^0.14.4"},"dependencies":{"axios":"^0.18.0","fetch-jsonp":"^1.1.3","koa-compose":"^4.1.0"},"gitHead":"c909273e34bbc86ac6f654716716b55b508d76c5","_id":"tua-api@0.3.1","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"steveyoung","email":"yangzhenyu2016@gmail.com"},"dist":{"integrity":"sha512-qW936WJlAX1IV9yMv2AgFaFOT3Tw3WRNwui2y3Y4P5a3DfBX0/0xDYvvGdDUidAD0vCviTaUB2bt2CJLX6JVdA==","shasum":"5417a26f6fc51e90623620235e3835062576fbb4","tarball":"https://registry.npmjs.org/tua-api/-/tua-api-0.3.1.tgz","fileCount":57,"unpackedSize":921435,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb6/mQCRA9TVsSAnZWagAA6m8P/AghsNuAMR+plgcnwawB\nx1+b3C0GYdomnHrRQ/1Fa/iote/XdxN+/FCRBLu1OfvR/XIz0g0L6HeJCCaJ\ndxTqamlTSz5/sFPghw3UdEMukpSIj5SqvNFGjHXQNgv3lD6WgEAPK7n8Lq3f\nGJkB6YQ7pNom+s9IkStEVaONTn+nL/5nmemPCyoiQ/fm3q/QpKU4ALwe3Lt6\n9cuif+rCSlhPSqBgOb/SoDpXFaJ6Er/nemGDkgFkYDPgQYbh7oJ6nYnmXcSL\nl/a6QhBR3YBd08fsG0BloVdsIGaDNl66mzLlgsnx3+qph8sFjPhsK5njyRID\nBQWIBj7JWEhTtu1X4I5GF30962QhWyiWBDWYZs6YtfzAvOaOYKnoT/6GUYsY\nmg91cnuq/ZJbVNfxi62x45I0dpQNUB/kQgFKUpU8Jde39kNhXxnpNrXHkkIk\nyDgUHyGVGTK79fd2YHOIKBPAn8w3/3XZeuMTmb+UU2+uCLhGJ5UqZdJ+3++U\nTIMURqdI+X07pIKmhh02lPt5QibVvtTIi8BLa3fNpfJEe74kSiDFkcGJmnA5\nczh3YSdH4Xnj7xw9JdJ2KEA/K1uP7V0RoGqWBQpWPb8Vv7qYI6TZ/UiScT8o\njS069R1r2wPeWtEYJqfGzlykCqcj4BDEI/+nkZ2SKLjF1JYXCywpSrFAf/7S\nYIol\r\n=DKiW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBk8tUIKylrC+lC368b7InQMML/TEXs/eyWbWrYFOePBAiEA3Z9SCz8+d7aHabNlOAEOzizBGwMx9BF9x3HIBRBZpbk="}]},"maintainers":[{"name":"steveyoung","email":"yangzhenyu2016@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tua-api_0.3.1_1542191503764_0.11740603143523876"},"_hasShrinkwrap":false},"0.3.2":{"name":"tua-api","version":"0.3.2","main":"dist/umd.js","module":"dist/es.js","jsnext:main":"dist/es.js","description":"A common tool helps converting configs to api functions","scripts":{"docs":"vuepress dev docs -h localhost","docs:build":"vuepress build docs","cov":"open coverage/lcov-report/index.html","tdd":"cross-env NODE_ENV=test jest --watch","test":"cross-env NODE_ENV=test jest && codecov","lint":"eslint --fix src/ test/","deploy":"yarn docs:build && gh-pages -m \"[ci skip]\" -d docs/.vuepress/dist","prebuild":"rimraf dist/* & npm run test","build":"cross-env NODE_ENV=prod rollup -c","pub":"npm run build && npm publish"},"husky":{"hooks":{"pre-push":"lint-staged","pre-commit":"lint-staged","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"lint-staged":{"{src,test}/**/*.js":["eslint --fix","git add"]},"jest":{"bail":true,"clearMocks":true,"transform":{"^.+\\.js$":"babel-jest"},"collectCoverage":true,"collectCoverageFrom":["src/**"]},"eslintIgnore":["package.json","dist/*"],"author":{"name":"StEve Young"},"license":"MIT","devDependencies":{"@commitlint/cli":"^7.2.1","@commitlint/config-conventional":"^7.1.2","axios-mock-adapter":"^1.15.0","babel-core":"^6.26.3","babel-eslint":"^10.0.1","babel-jest":"^23.6.0","babel-plugin-external-helpers":"^6.22.0","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-object-rest-spread":"^6.26.0","babel-preset-env":"^1.7.0","codecov":"^3.1.0","cross-env":"^5.2.0","eslint":"^5.9.0","eslint-config-standard":"^12.0.0","eslint-plugin-import":"^2.14.0","eslint-plugin-node":"^8.0.0","eslint-plugin-promise":"^4.0.1","eslint-plugin-standard":"^4.0.0","gh-pages":"^2.0.1","husky":"^1.1.4","jest":"^23.6.0","lint-staged":"^8.0.4","rimraf":"^2.6.2","rollup":"^0.67.1","rollup-plugin-babel":"^3.0.7","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-eslint":"^5.0.0","rollup-plugin-json":"^3.1.0","rollup-plugin-node-resolve":"^3.4.0","rollup-plugin-replace":"^2.1.0","vuepress":"^0.14.4"},"dependencies":{"axios":"^0.18.0","fetch-jsonp":"^1.1.3","koa-compose":"^4.1.0"},"gitHead":"6c9855475d0da8dc6f995e4ca7b531226abc8e32","_id":"tua-api@0.3.2","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"steveyoung","email":"yangzhenyu2016@gmail.com"},"dist":{"integrity":"sha512-lZc486shDQyJ9beyOXzFCu1cE061G0iMIVMlOHCfG/4rknLp72Ux/lXEW/j14frxVJv4aDQ/4cEWZdde0ikvdQ==","shasum":"2a846065b2a30442c9db4371e3c25503f52f7cd3","tarball":"https://registry.npmjs.org/tua-api/-/tua-api-0.3.2.tgz","fileCount":57,"unpackedSize":920317,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb7OJHCRA9TVsSAnZWagAA98cP/RcFzBeiTajLnE4k6TOv\nsb4hpx5/lhv2kWITYkbGYQiivVbyN+JX8DFg4oyAiA0l2yKnVtXECKvILrFs\nizAdRrr5ZnX+FKHX0NuLET2YtYoZ4wUTWqO8UM0ylF1VQR69EV4UrHZUqvgf\naCVN7r+2i8/m3rgt2S4CbDu8QuAjD7eFC6g288IIaKLhg9GCExAgvujdvXWf\nQecYir2Y6u0XtklECtWKgyt4sLjI7n/yDaCNzsEWhIAEA7VcNN9eNfnqR5ZX\n4NoqeGshXwdPlISo9jEpdHBMzrk6zbkhlOkhXUy1g99fZ4B+UP3iAWgUhYyD\nsd8Db9HJ8SKIfx44Eugftdxo1eVaFyzy+uuFIAoUw0X4z8GKHroE8EaW1JjB\ndmwjzUYTvQ6uutYM0XJbvnHHjesnuQZwypNwiCMyATq5hlQMdOziI7WSNBJi\nCmf5BH3OM9c+AHM4zAmmNCubysZZwP/EleJStwkAy7YY8E3g1ysW5QuGgHfc\n4CifQi6lD+lOii8sTQN3VYRk8uu4huC7/6b8IygW0vgPzBXo+AW372P+seIM\nY+KCP6viID9JEsSGOAVccwhLm0o2H9eqfQVDpcIn6KssWSTDFlFT5uulVTo7\ngJ5raSzv0jDIkSMfZ8K5vzEQivoxbawHROT2rdvSQtxUTzez/HF4zPwrUyRg\nECkL\r\n=tWVz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC+bryYoQbKnp99t6uC+vl5C8nWxJnHMaXq2M3TsSq1rAiEAoclGacEDxQg6n5MoabHDvtNiQxD8b72rQK9tmqGVHpo="}]},"maintainers":[{"name":"steveyoung","email":"yangzhenyu2016@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tua-api_0.3.2_1542251079048_0.7547480204872772"},"_hasShrinkwrap":false},"0.3.3":{"name":"tua-api","version":"0.3.3","main":"dist/TuaApi.umd.js","module":"dist/TuaApi.es.js","jsnext:main":"dist/TuaApi.es.js","description":"A common tool helps converting configs to api functions","scripts":{"docs":"vuepress dev docs -h localhost","docs:build":"vuepress build docs","cov":"open coverage/lcov-report/index.html","tdd":"cross-env NODE_ENV=test jest --watch","test":"cross-env NODE_ENV=test jest && codecov","lint":"eslint --fix src/ test/","deploy":"yarn docs:build && gh-pages -m \"[ci skip]\" -d docs/.vuepress/dist","prebuild":"rimraf dist/* & npm run test","build":"cross-env NODE_ENV=prod rollup -c","pub":"npm run build && npm publish"},"husky":{"hooks":{"pre-push":"lint-staged","pre-commit":"lint-staged","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"lint-staged":{"{src,test}/**/*.js":["eslint --fix","git add"]},"jest":{"bail":true,"clearMocks":true,"transform":{"^.+\\.js$":"babel-jest"},"collectCoverage":true,"collectCoverageFrom":["src/**"]},"eslintIgnore":["package.json","dist/*"],"author":{"name":"StEve Young"},"license":"MIT","devDependencies":{"@commitlint/cli":"^7.2.1","@commitlint/config-conventional":"^7.1.2","axios-mock-adapter":"^1.15.0","babel-core":"^6.26.3","babel-eslint":"^10.0.1","babel-jest":"^23.6.0","babel-plugin-external-helpers":"^6.22.0","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-object-rest-spread":"^6.26.0","babel-preset-env":"^1.7.0","codecov":"^3.1.0","cross-env":"^5.2.0","eslint":"^5.9.0","eslint-config-standard":"^12.0.0","eslint-plugin-import":"^2.14.0","eslint-plugin-node":"^8.0.0","eslint-plugin-promise":"^4.0.1","eslint-plugin-standard":"^4.0.0","gh-pages":"^2.0.1","husky":"^1.2.0","jest":"^23.6.0","lint-staged":"^8.1.0","rimraf":"^2.6.2","rollup":"^0.67.4","rollup-plugin-babel":"^3.0.7","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-eslint":"^5.0.0","rollup-plugin-json":"^3.1.0","rollup-plugin-node-resolve":"^3.4.0","rollup-plugin-replace":"^2.1.0","rollup-plugin-uglify":"^6.0.0","vuepress":"^0.14.8"},"dependencies":{"axios":"^0.18.0","fetch-jsonp":"^1.1.3","koa-compose":"^4.1.0"},"gitHead":"2ede19d9d35a0c3b3170999523461e38d85c544a","_id":"tua-api@0.3.3","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"steveyoung","email":"yangzhenyu2016@gmail.com"},"dist":{"integrity":"sha512-5uoY+aoZhBsyoAF2Mo5wX10WFrSiN66YE1S6QcWdH14WsCRI37KbrzCBxPakQ3FYX8whtKlbKOmhoHzELrX7oQ==","shasum":"622bcf009d1a8ab6bb22e80678ba3ac8d75603e9","tarball":"https://registry.npmjs.org/tua-api/-/tua-api-0.3.3.tgz","fileCount":58,"unpackedSize":934231,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcBSEECRA9TVsSAnZWagAATV0P/1pJvz14Udgw433dQFVb\nPPOmwNMbMQi6ILzBGb1vCjBn2zexN23vitnzvmXKOvZTteR9Gmc3NileAEQO\nmUfSg53e4ziexJniWhS0HOqwrBGgA3XgkA5OJO7HMEwX75/tTpy/IxegssY4\npHfK3wEuN8fImUYOqQ9V6vJqWWYQWSk8SLu6WhQ3ZdQUgcBdwnJwcq7CjmWM\n3NXuYekFtjF4BXfMdeuY2MLEKjBf6s8teoB9jwge8M1r/P7rlfefT09LO58R\nY1fpRxY9SAus2KhicR5pnCrvTFVpyve+ELA3WrO2DPpzJKhRcza36KFS3RgA\nUI9K5ZMqPDLeHBMEGiVi8xffMq/vOHtu1bNPyHEJ18yaMQsjRQIN2rxvhdQv\n1kDQEOfZAE6e9Cl43zWbIMTm4jlIgeDCm0TXv8SrF7hh+yhf1gQPtZYaDV5p\nObjDqUSWLRAqyuwYaHUqtvbcoDe9RDS6NPMbEDiAHhssif6EcHZWPEUQxAro\n8Yq7NSdiuDBuhwG5/nyJ9OLdAwoRi4vrNJZ2UjmsGltiJJK1285vFtyViA5/\nJ3j0DZ0MwwgO5P+QYgdgsUEXx4rftym4x6M8L6GKmhAUAj8chhMEAiBAuNZZ\n2fEdoVDLTnNnb+LgEEWZ6RZeokbGJh/UQTk+toEChj1vCXcDvtzciR2YcDe7\nGFOI\r\n=ndre\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFUtTsrO0stLkIOM13MNCHAInvGcxI/68b8clFrsW93OAiBYbtx/uzWhNvgPFlVboj1UQusMJNwF04YTFpJ6a+k3fA=="}]},"maintainers":[{"name":"steveyoung","email":"yangzhenyu2016@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tua-api_0.3.3_1543840003661_0.8370738594426996"},"_hasShrinkwrap":false},"0.4.0":{"name":"tua-api","version":"0.4.0","main":"dist/TuaApi.umd.js","module":"dist/TuaApi.es.js","jsnext:main":"dist/TuaApi.es.js","description":"A common tool helps converting configs to api functions","scripts":{"docs":"vuepress dev docs -h localhost","docs:build":"vuepress build docs","cov":"open coverage/lcov-report/index.html","tdd":"cross-env NODE_ENV=test jest --watch","test":"cross-env NODE_ENV=test jest && codecov","lint":"eslint --fix src/ test/","deploy":"yarn docs:build && gh-pages -m \"[ci skip]\" -d docs/.vuepress/dist","prebuild":"rimraf dist/* & npm run test","build":"cross-env NODE_ENV=prod rollup -c","pub":"npm run build && npm publish"},"husky":{"hooks":{"pre-push":"lint-staged","pre-commit":"lint-staged","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"lint-staged":{"{src,test}/**/*.js":["eslint --fix","git add"]},"jest":{"bail":true,"clearMocks":true,"transform":{"^.+\\.js$":"babel-jest"},"collectCoverage":true,"collectCoverageFrom":["src/**"]},"eslintIgnore":["package.json","dist/*"],"author":{"name":"StEve Young"},"license":"MIT","devDependencies":{"@commitlint/cli":"^7.2.1","@commitlint/config-conventional":"^7.1.2","axios-mock-adapter":"^1.15.0","babel-core":"^6.26.3","babel-eslint":"^10.0.1","babel-jest":"^23.6.0","babel-plugin-external-helpers":"^6.22.0","babel-plugin-transform-decorators-legacy":"^1.3.5","babel-plugin-transform-object-rest-spread":"^6.26.0","babel-preset-env":"^1.7.0","codecov":"^3.1.0","cross-env":"^5.2.0","eslint":"^5.9.0","eslint-config-standard":"^12.0.0","eslint-plugin-import":"^2.14.0","eslint-plugin-node":"^8.0.0","eslint-plugin-promise":"^4.0.1","eslint-plugin-standard":"^4.0.0","gh-pages":"^2.0.1","husky":"^1.2.0","jest":"^23.6.0","lint-staged":"^8.1.0","rimraf":"^2.6.2","rollup":"^0.67.4","rollup-plugin-babel":"^3.0.7","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-eslint":"^5.0.0","rollup-plugin-json":"^3.1.0","rollup-plugin-node-resolve":"^3.4.0","rollup-plugin-replace":"^2.1.0","rollup-plugin-uglify":"^6.0.0","vuepress":"^0.14.8"},"dependencies":{"axios":"^0.18.0","fetch-jsonp":"^1.1.3","koa-compose":"^4.1.0"},"gitHead":"6733b38e1b81a56c29b000ae913bdff604d95b1a","_id":"tua-api@0.4.0","_npmVersion":"6.4.1","_nodeVersion":"11.2.0","_npmUser":{"name":"steveyoung","email":"yangzhenyu2016@gmail.com"},"dist":{"integrity":"sha512-+dLj+5X0b+Aa9/+uxy68qvyUMKOINgaICknRcg1H/CBWU2+Q/57boxoiVd2Zb/Nl2MEjCv31QvVd1hjhY8RB9Q==","shasum":"c23c8878b4af0820f6d41d213ddf591be21e6ff1","tarball":"https://registry.npmjs.org/tua-api/-/tua-api-0.4.0.tgz","fileCount":26,"unpackedSize":116054,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcDRgxCRA9TVsSAnZWagAAeO0P/0GcC2nWVowD5P5SAhDc\n2pF+KMdyKjkcWnbNJz2i2BlKkGiKKnyye4HpGgv0vi8Z9vXlrRIXhRvNV69E\n8RR4aMZwle6BIVvjKvW7kavf9mevhgL83BGJ4zTxY6ongWP9FLBQ0fROO1SK\nzE1WafmyOAFGGMnsaD4DSbwy4aNPM7GtXIKHyjoRQYksbwvhhe6vt61YiS6a\nDyTWiY3jOrSnQgnEXNXJK8eYWKl8AoLVY3USBUxdEdhpP5msZW6ElesKUBSZ\nmAUVD6IiHCWuoBBmStBh4X7pIan6DEfkMtURD/rVoSGp5U+3VQOkkDEb/tRR\nWeDC4GET/HIPsgt6cszrtkIk49VcV1Qfy50bGeOIE0Dsyk66y8tBVti3VZO1\nfHiwHRm6fl8who0SWD8ZHoZrAY7N7VdDfIoobbAd2Q/LT0b8JZl4K6YUxwNh\nr/rmpQX6xJdYufuE8iVISJt2YZ9FIOG9A/ZQI44jQHa8/S0HoEgR4rQ3qEC6\nm+ncNeSwB6LIgofYgpCA34Nt0T4rvHgSatqQ8ZFANv1adaWl2dwsI2rilNXP\nxl9aZj6xwktfu4J57JB3NkJuPba9J4pVR7Hy4JH63kh+dz46WX3pKtzwjQ8o\nCuKgad3B02LG5I+UzJ4m0N7jNoIC5+qpqmb7GVErwVK/Lr78So+BpKg2YTAS\nT1IA\r\n=ZlPB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBeLKZ4t7nTnkAb8Ig2Mxpvr2AElGUufjNNOudDERPuuAiEA8y4R5vXPlC/rFSvZuTgEL5pQxQGXymNhZBrYW5F4NFg="}]},"maintainers":[{"name":"steveyoung","email":"yangzhenyu2016@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tua-api_0.4.0_1544362032237_0.37556679777015245"},"_hasShrinkwrap":false},"1.0.0":{"name":"tua-api","version":"1.0.0","description":"🏗 A common tool helps converting configs to api functions","main":"dist/TuaApi.cjs.js","module":"dist/TuaApi.esm.js","unpkg":"dist/TuaApi.umd.js","jsdelivr":"dist/TuaApi.umd.js","scripts":{"cov":"open coverage/lcov-report/index.html","docs":"vuepress dev docs","docs:build":"vuepress build docs","lint":"eslint --fix . docs/.vuepress/ --ignore-path .gitignore","test":"cross-env NODE_ENV=test jest","test:tdd":"cross-env NODE_ENV=test jest --watch","prebuild":"rimraf dist/* & npm run test","build":"cross-env NODE_ENV=production rollup -c","deploy":"npm run docs:build && gh-pages -m \"[ci skip]\" -d docs/.vuepress/dist","next:pm":"npm --no-git-tag-version version preminor","next:pr":"npm --no-git-tag-version version prerelease","pub":"npm run build && npm publish","pub:n":"npm run build && npm publish --tag next"},"husky":{"hooks":{"pre-push":"npm test","pre-commit":"lint-staged","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"lint-staged":{"{src,test}/**/*.js":["eslint --fix","git add"]},"jest":{"bail":true,"clearMocks":true,"transform":{"^.+\\.js$":"babel-jest"},"moduleNameMapper":{"@/(.*)$":"<rootDir>/src/$1","@examples/(.*)$":"<rootDir>/examples/$1"},"collectCoverage":true,"collectCoverageFrom":["src/**"]},"eslintIgnore":["package.json","dist/*"],"dependencies":{"axios":"^0.18.0","fetch-jsonp":"^1.1.3","koa-compose":"^4.1.0"},"devDependencies":{"@babel/core":"^7.3.3","@babel/plugin-external-helpers":"^7.2.0","@babel/plugin-proposal-decorators":"^7.3.0","@babel/plugin-proposal-object-rest-spread":"^7.3.2","@babel/preset-env":"^7.3.1","@commitlint/cli":"^7.5.2","@commitlint/config-conventional":"^7.5.0","axios-mock-adapter":"^1.16.0","babel-core":"^7.0.0-bridge.0","babel-eslint":"^10.0.1","babel-jest":"^24.1.0","codecov":"^3.2.0","cross-env":"^5.2.0","eslint":"^5.14.0","eslint-config-standard":"^12.0.0","eslint-plugin-import":"^2.16.0","eslint-plugin-node":"^8.0.1","eslint-plugin-promise":"^4.0.1","eslint-plugin-standard":"^4.0.0","gh-pages":"^2.0.1","husky":"^1.3.1","jest":"^24.1.0","lint-staged":"^8.1.4","rimraf":"^2.6.3","rollup":"^1.2.2","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-eslint":"^5.0.0","rollup-plugin-json":"^3.1.0","rollup-plugin-node-resolve":"^4.0.0","rollup-plugin-replace":"^2.1.0","rollup-plugin-uglify":"^6.0.2","vuepress":"^1.0.0-alpha.39"},"repository":{"type":"git","url":"git+https://github.com/tuateam/tua-api.git"},"homepage":"https://tuateam.github.io/tua-api/","author":{"name":"StEve Young"},"license":"MIT","gitHead":"38c29bcd95354b0bb10e3582afdd30805cf6f0fb","bugs":{"url":"https://github.com/tuateam/tua-api/issues"},"_id":"tua-api@1.0.0","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"steveyoung","email":"yangzhenyu2016@gmail.com"},"dist":{"integrity":"sha512-DLJB5/SnxD/yCFSZHjvXoVmPePVLa1iQbQqXvMJo5nqzxPwzqZtVgueBUj9ZHYgC7wuFkm3QNAsmufm+8D1l7g==","shasum":"b859ecc41273b9145a19af51dcd8773b45049abc","tarball":"https://registry.npmjs.org/tua-api/-/tua-api-1.0.0.tgz","fileCount":28,"unpackedSize":155447,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJca9fRCRA9TVsSAnZWagAASH0P/joe8ql5Nb3h3gPaNpup\neVEDABd+BzBTSFK0QHJ8zajQYO1cmzvnyVWcDWI5jctrsZpr4lc9tcPSPQqq\ngLh8Z2Vy+UlcwCrWqugEVXrbYhkxUZn6TS1QATHKgD2zNwXHvNpwOhl5YaoM\nFLaO4Uexn26exG+LwQdy1XMmk60Bdd/N1hL8WcId/j0+EmwZIL+BTyNKvb5t\n2AI1eAoWhxrLTMeUlYLmQ4gnvbGnjoVWOqG2j5FqTKzKzt0eIQ/zk137tYgr\ntVbkCXQXGQEZ6NYRaz5IjswJHfAGaV0ergfrNuQIKr9WWki+/sKl3mNlEnU/\nB8znLfPDeh4qIov3xI6j+dMSoiDP/b4xSsWw6zRCxjQYA3EUS3JIhMBxWLT8\n4oAyBppBSBNU8Qo4E1B8i4tDHEgFSbjbkEiAyxKhrgot6lk4pDzbXBNKVfzZ\n1Ym6z5JbwXZi0BGoHjfUrVK3q7HdH3EbnDmrvMCSQlNy1Ttu9b1Duc41wopg\n6BKVl6zsRjZ28IvSs6GonPvzxVPICwrFQBUg4VtV5z4VfOIJyYbXreYdtCuc\nCHKntD6iR+647VuYZgNSH+aJyM3abNGrpEo+SU84iO0vPsnO55JuMTcuDg7a\nCdmR1nMglrBgsPnR8xnPV6E/Qi0wtr58cU9BDCTwNdECMG06Qyb6e4upNiAz\nMSwj\r\n=1xVB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCClRLou+ZGv4XumDagOZH5Ar/+qrcym0pqYqX1tSF7aQIhAL4FLMA+CHQ+UYOwYWbI0ZgxyxwfP+PD1LGQvRIlo1NV"}]},"maintainers":[{"name":"steveyoung","email":"yangzhenyu2016@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tua-api_1.0.0_1550571472983_0.16471997327582644"},"_hasShrinkwrap":false},"1.0.1":{"name":"tua-api","version":"1.0.1","description":"🏗 A common tool helps converting configs to api functions","main":"dist/TuaApi.cjs.js","module":"dist/TuaApi.esm.js","unpkg":"dist/TuaApi.umd.js","jsdelivr":"dist/TuaApi.umd.js","scripts":{"cov":"open coverage/lcov-report/index.html","docs":"vuepress dev docs","docs:build":"vuepress build docs","lint":"eslint --fix . docs/.vuepress/ --ignore-path .gitignore","test":"cross-env NODE_ENV=test jest","test:tdd":"cross-env NODE_ENV=test jest --watch","prebuild":"rimraf dist/* & npm run test","build":"cross-env NODE_ENV=production rollup -c","deploy":"npm run docs:build && gh-pages -m \"[ci skip]\" -d docs/.vuepress/dist","next:pm":"npm --no-git-tag-version version preminor","next:pr":"npm --no-git-tag-version version prerelease","pub":"npm run build && npm publish","pub:n":"npm run build && npm publish --tag next"},"husky":{"hooks":{"pre-push":"npm test","pre-commit":"lint-staged","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"lint-staged":{"{src,test}/**/*.js":["eslint --fix","git add"]},"jest":{"bail":true,"clearMocks":true,"transform":{"^.+\\.js$":"babel-jest"},"moduleNameMapper":{"@/(.*)$":"<rootDir>/src/$1","@examples/(.*)$":"<rootDir>/examples/$1"},"collectCoverage":true,"collectCoverageFrom":["src/**"]},"eslintIgnore":["package.json","dist/*"],"dependencies":{"axios":"^0.18.0","fetch-jsonp":"^1.1.3","koa-compose":"^4.1.0"},"devDependencies":{"@babel/core":"^7.3.3","@babel/plugin-external-helpers":"^7.2.0","@babel/plugin-proposal-decorators":"^7.3.0","@babel/plugin-proposal-object-rest-spread":"^7.3.2","@babel/preset-env":"^7.3.1","@commitlint/cli":"^7.5.2","@commitlint/config-conventional":"^7.5.0","axios-mock-adapter":"^1.16.0","babel-core":"^7.0.0-bridge.0","babel-eslint":"^10.0.1","babel-jest":"^24.1.0","codecov":"^3.2.0","cross-env":"^5.2.0","eslint":"^5.14.0","eslint-config-standard":"^12.0.0","eslint-plugin-import":"^2.16.0","eslint-plugin-node":"^8.0.1","eslint-plugin-promise":"^4.0.1","eslint-plugin-standard":"^4.0.0","gh-pages":"^2.0.1","husky":"^1.3.1","jest":"^24.1.0","lint-staged":"^8.1.4","rimraf":"^2.6.3","rollup":"^1.2.2","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-eslint":"^5.0.0","rollup-plugin-json":"^3.1.0","rollup-plugin-node-resolve":"^4.0.0","rollup-plugin-replace":"^2.1.0","rollup-plugin-uglify":"^6.0.2","vuepress":"^1.0.0-alpha.39"},"repository":{"type":"git","url":"git+https://github.com/tuateam/tua-api.git"},"homepage":"https://tuateam.github.io/tua-api/","author":{"name":"StEve Young"},"license":"MIT","gitHead":"131c98f7555c9caea640548c38a33a339733b5e9","bugs":{"url":"https://github.com/tuateam/tua-api/issues"},"_id":"tua-api@1.0.1","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"buptsteve","email":"yangzhenyu2016@gmail.com"},"dist":{"integrity":"sha512-KbNAbZ1Jum8MU3qZ/sJGvTNO0hATE4Ty556QzjaZxeHp0rqSxtQWd8fTPi1gftaieEXDbqctuwCRhHFk21OCBA==","shasum":"0c59f0a6f9aae2c2fbcfd262d2a2201a3099f87b","tarball":"https://registry.npmjs.org/tua-api/-/tua-api-1.0.1.tgz","fileCount":28,"unpackedSize":156040,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcfkDDCRA9TVsSAnZWagAAObIP/RYN4sxMPIdKHUMFqV86\nRSD4V/NffvZ7Ay76jL6aonz0swJSMw6hfD00VfACtSrWZFc1eYJF6R+nfCGs\nzrolv73vW2a8QnAAdIlngvp67mOpCP8pZ44tZWJeAmsLqRjkPoULc9hUK+lg\n+Fr74AVMYda4RIdHsJlZMbg3ruweidKjs6vKia3ro08TAH7LqHK0F4UokzXf\nAdpmy4PeuB55NXSI293SeyenovLbvTgcah7zzrCC6Xl7JsvAqcSUpY3JugNM\ntsCRMxSQv6BdpU5oIOvQH+40/pJ+4JrwurBvB16tot82kXWzSUr/99csQ1pB\nQ8M6GAve+gVLJ64ZgmEoJ5VJKxUddHN0jPNYfJje8WlGtmq1u+om4yN9LMjA\n8EMu30Yclw5UGMiWSxmf2VnU6NkGcbzmk+IhbBxvybzr21mCA2TIcZ5Esbk3\nCIluZJrCndKovAhLmBFYCg+INlFwcUH6r1bEpeKfGHUfXZ3KdGVNts6bfwWN\ngGPme/gnm5U8x082hYrFsr59VKuuPMynPf0/dIKU/SitQex/N4qi5d6EUYlW\n/oWgoZ674v3EAIO2M625+phDP9vCZ0akpOn5RTgF6xlkUoo+VyqNonyg01me\nbWNAdtFZnt+4S7QEbpHtHUwFJiWi7xsAtvIkvpLruLTRVSPP2rMUVKwpHQPx\ncMQ5\r\n=8JBc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGuozWwYZL6AXliYGsI122B3KRxL1tReWqhz3XOp8YJIAiEAs+tX8yq3rn9RqfqTsIucUkfGEyZCkvHdPkydtA1Vves="}]},"maintainers":[{"email":"yangzhenyu2016@gmail.com","name":"buptsteve"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tua-api_1.0.1_1551777986079_0.23804911126631922"},"_hasShrinkwrap":false},"1.1.0":{"name":"tua-api","version":"1.1.0","description":"🏗 A common tool helps converting configs to api functions","main":"dist/TuaApi.cjs.js","module":"dist/TuaApi.esm.js","unpkg":"dist/TuaApi.umd.js","jsdelivr":"dist/TuaApi.umd.js","scripts":{"cov":"open coverage/lcov-report/index.html","docs":"vuepress dev docs","docs:build":"vuepress build docs","lint":"eslint --fix . docs/.vuepress/ --ignore-path .gitignore","test":"cross-env NODE_ENV=test jest","test:tdd":"cross-env NODE_ENV=test jest --watch","prebuild":"rimraf dist/* & npm run test","build":"cross-env NODE_ENV=production rollup -c","deploy":"npm run docs:build && gh-pages -m \"[ci skip]\" -d docs/.vuepress/dist","next:pm":"npm --no-git-tag-version version preminor","next:pr":"npm --no-git-tag-version version prerelease","pub":"npm run build && npm publish","pub:n":"npm run build && npm publish --tag next"},"husky":{"hooks":{"pre-push":"npm test","pre-commit":"lint-staged","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"lint-staged":{"{src,test}/**/*.js":["eslint --fix","git add"]},"jest":{"bail":true,"clearMocks":true,"transform":{"^.+\\.js$":"babel-jest"},"moduleNameMapper":{"@/(.*)$":"<rootDir>/src/$1","@examples/(.*)$":"<rootDir>/examples/$1"},"collectCoverage":true,"collectCoverageFrom":["src/**"]},"eslintIgnore":["package.json","dist/*"],"dependencies":{"axios":"^0.18.0","fetch-jsonp":"^1.1.3","koa-compose":"^4.1.0"},"devDependencies":{"@babel/core":"^7.3.3","@babel/plugin-external-helpers":"^7.2.0","@babel/plugin-proposal-decorators":"^7.3.0","@babel/plugin-proposal-object-rest-spread":"^7.3.2","@babel/preset-env":"^7.3.1","@commitlint/cli":"^7.5.2","@commitlint/config-conventional":"^7.5.0","axios-mock-adapter":"^1.16.0","babel-core":"^7.0.0-bridge.0","babel-eslint":"^10.0.1","babel-jest":"^24.1.0","codecov":"^3.2.0","cross-env":"^5.2.0","eslint":"^5.14.0","eslint-config-standard":"^12.0.0","eslint-plugin-import":"^2.16.0","eslint-plugin-node":"^8.0.1","eslint-plugin-promise":"^4.0.1","eslint-plugin-standard":"^4.0.0","gh-pages":"^2.0.1","husky":"^1.3.1","jest":"^24.1.0","lint-staged":"^8.1.4","rimraf":"^2.6.3","rollup":"^1.2.2","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-eslint":"^5.0.0","rollup-plugin-json":"^3.1.0","rollup-plugin-node-resolve":"^4.0.0","rollup-plugin-replace":"^2.1.0","rollup-plugin-uglify":"^6.0.2","vuepress":"^1.0.0-alpha.39"},"repository":{"type":"git","url":"git+https://github.com/tuateam/tua-api.git"},"homepage":"https://tuateam.github.io/tua-api/","author":{"name":"StEve Young"},"license":"MIT","gitHead":"ef574fb150e3c721554a6edc979c9b9590a9ae3e","bugs":{"url":"https://github.com/tuateam/tua-api/issues"},"_id":"tua-api@1.1.0","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"buptsteve","email":"yangzhenyu2016@gmail.com"},"dist":{"integrity":"sha512-eVGArkwdmQpU7UueScVacSzK5QrnBPQMwEZZlIZZu5meVmYg+6wQ3p8IcOjmK8oexv5zDEKO3vOrknqLFYFXPQ==","shasum":"c4aaeb19e20cdf4227dc2fab80fc3f09313d286d","tarball":"https://registry.npmjs.org/tua-api/-/tua-api-1.1.0.tgz","fileCount":28,"unpackedSize":157961,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcpdShCRA9TVsSAnZWagAA7owP/2u5AET9XdrcJ85R/MbT\nCeIerZtQtA8+xugi4V3zuFplg6ktM7OR5KxllgiLXaeShSjwfrYzFm4U87mw\n0rbFB50PNoreF6WroPYKHaX52fviojB+Y1ZqB/XaUr9ECzt017DERC/CtEus\nc4rrRtUUfSeBx+OEl7qdJq62MR3n/msbrITyu6JfmZl5jDkKmPA51uvjkEuI\njyXUqQsyxMc7pnrsi57O6jF1tp8cI/eILCAFyMqSRxb/VVNmzUKaM9RwmSTy\nHgnTJLbucK0DkUbGHnaXWdZzYK09a7X3zvNetMDv9jCz0czbJfGRAekKl+A7\nq0p5ZTP6YQ2pR2m4Pm19bNtkT7nBrM5lxxxpK2UaObZu3SR/03vp3Iy3x+Dg\nCUAw5wDXwPqhCQeUVojsoU0aT9WNjXfTEK02IjOKOxB+I17NGunI3ahMnZYX\ndhpGnXVcqdnhNW+/zdlkQI9CbnfseEKrVXcadGiLyFdMigz533sae9g1MFzo\nRaAL0BwQPb30dKTyRg24Jmtrb1um60R6znIVnopL7vyoxHgFiUjip24blb6c\nrnluSgK5NKo0mFgfmEL5Q7rv5Iw7CWlqS1sRzMyWxtnXMzX9S0w83s2sL0ur\nhpMEG+aWoXL4t+E/znUPXdkxmpBQDrPX1cK/iVgVghQz8JG0FbZNpdoP/vkN\noz/F\r\n=j20p\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCWsRElVdExk7eB+LE1K0Rk5uG6x24J1AE1sVsPa+RhagIhANNTNWC4amMO22hpCziYGLqSTkABr6t9xbXF2Gfpag0V"}]},"maintainers":[{"email":"yangzhenyu2016@gmail.com","name":"buptsteve"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tua-api_1.1.0_1554371744398_0.25650080927205776"},"_hasShrinkwrap":false},"1.1.1":{"name":"tua-api","version":"1.1.1","description":"🏗 A common tool helps converting configs to api functions","main":"dist/TuaApi.cjs.js","module":"dist/TuaApi.esm.js","unpkg":"dist/TuaApi.umd.js","jsdelivr":"dist/TuaApi.umd.js","scripts":{"cov":"open coverage/lcov-report/index.html","docs":"vuepress dev docs","docs:build":"vuepress build docs","lint":"eslint --fix . docs/.vuepress/ --ignore-path .gitignore","test":"cross-env NODE_ENV=test jest","test:tdd":"cross-env NODE_ENV=test jest --watch","prebuild":"rimraf dist/* & npm run test","build":"cross-env NODE_ENV=production rollup -c","deploy":"npm run docs:build && gh-pages -m \"[ci skip]\" -d docs/.vuepress/dist","next:pm":"npm --no-git-tag-version version preminor","next:pr":"npm --no-git-tag-version version prerelease","pub":"npm run build && npm publish","pub:n":"npm run build && npm publish --tag next"},"husky":{"hooks":{"pre-push":"npm test","pre-commit":"lint-staged","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"lint-staged":{"{src,test}/**/*.js":["eslint --fix","git add"]},"jest":{"bail":true,"clearMocks":true,"transform":{"^.+\\.js$":"babel-jest"},"moduleNameMapper":{"@/(.*)$":"<rootDir>/src/$1","@examples/(.*)$":"<rootDir>/examples/$1"},"collectCoverage":true,"collectCoverageFrom":["src/**"]},"eslintIgnore":["package.json","dist/*"],"dependencies":{"axios":"^0.18.0","fetch-jsonp":"^1.1.3","koa-compose":"^4.1.0"},"devDependencies":{"@babel/core":"^7.3.3","@babel/plugin-external-helpers":"^7.2.0","@babel/plugin-proposal-decorators":"^7.3.0","@babel/plugin-proposal-object-rest-spread":"^7.3.2","@babel/preset-env":"^7.3.1","@commitlint/cli":"^7.5.2","@commitlint/config-conventional":"^7.5.0","axios-mock-adapter":"^1.16.0","babel-core":"^7.0.0-bridge.0","babel-eslint":"^10.0.1","babel-jest":"^24.1.0","codecov":"^3.2.0","cross-env":"^5.2.0","eslint":"^5.14.0","eslint-config-standard":"^12.0.0","eslint-plugin-import":"^2.16.0","eslint-plugin-node":"^8.0.1","eslint-plugin-promise":"^4.0.1","eslint-plugin-standard":"^4.0.0","gh-pages":"^2.0.1","husky":"^1.3.1","jest":"^24.1.0","lint-staged":"^8.1.4","rimraf":"^2.6.3","rollup":"^1.2.2","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-eslint":"^5.0.0","rollup-plugin-json":"^3.1.0","rollup-plugin-node-resolve":"^4.0.0","rollup-plugin-replace":"^2.1.0","rollup-plugin-uglify":"^6.0.2","vuepress":"^1.0.0-alpha.39"},"repository":{"type":"git","url":"git+https://github.com/tuateam/tua-api.git"},"homepage":"https://tuateam.github.io/tua-api/","author":{"name":"StEve Young"},"license":"MIT","gitHead":"11af77829d64fb30cca2589a288079ec25ac24f6","bugs":{"url":"https://github.com/tuateam/tua-api/issues"},"_id":"tua-api@1.1.1","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"buptsteve","email":"yangzhenyu2016@gmail.com"},"dist":{"integrity":"sha512-iUG4B3bXILFzfX9i290iJm38GBP9wVghSBwqFrjxTa8WHB1ACnUnf0F/94h3ZvjhUCnxeTobFaMWn2DlnOufdw==","shasum":"fb24909586af87c8cbef923409eeb4a1f68173f8","tarball":"https://registry.npmjs.org/tua-api/-/tua-api-1.1.1.tgz","fileCount":28,"unpackedSize":158201,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcrt4ZCRA9TVsSAnZWagAA3xAP/jfMXxxLc4xzU1lqtZ/c\ntBqO1I3SqwG+YwYEgvf5jPp20o2sBp/dUOtpw++iRk7IJlUz9L85Y0aHFWIg\nqDtdUnHi7WZdBLjAI+rDLX4DhNXRF0XIhm/Lz2R5SKr8YAOaULQG580tKSh2\npZTcwm0LpPKy7ELo60FEvBHh1empHk25kR2CRlGJTsksVHfFfYosJHUiLIxf\nyrKDZ46eNZ0s95wQaoIRCL+voDBVI7r/pKasHooEO1l9gIIv418eJVuM8VuI\nWqEJhR1LD8O/dPLbTOHGAcwHgiRsNk0AaMYCGJ+Xk34uOHWvLBHX13EToF7W\nATkK7Yyj4zyQkOhcGlk7oCQjdUSO5BpaksdrMHpUMoiBkZMzhHTyNsqsq+U1\nXPJSwfzlS0wMZiaSjZurw7+2NrTAFh67vO+aRMq/7WPo4VaSnFmuk9wJH21L\nLa2XIcH8U5PWxuoNzSdJIZkd82g6i6VWq96PYH5oMJ6JcLVr+usVkSfmrvT6\ntflzs6iR5O5sJ/9ip5tYcSi9105Yd4R+Sa2tT5E/mTm4epwStZEP+s/sDADl\n1qAyjzMxxsz0fym7wq1cmJQngdaSqjrx3VFM/njVCsEWsOf8klMrxUqS8674\n1+onU+XD49csdkXkCXEWsK1HubZxTKUCEwipDypwB8KVMewmG8jMmPIe9cmB\nE+sb\r\n=DyhJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFFdc1D0/vdtNyeGkwJ7FDWVxGO1ClAiYXfprKo6xWZxAiB4HpSOE78PdPatW6hbj1yzxqVfQA81jqKdPHP3A1n6Uw=="}]},"maintainers":[{"email":"yangzhenyu2016@gmail.com","name":"buptsteve"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tua-api_1.1.1_1554963992881_0.6598928791414762"},"_hasShrinkwrap":false},"1.2.0-0":{"name":"tua-api","version":"1.2.0-0","description":"🏗 A common tool helps converting configs to api functions","main":"dist/TuaApi.cjs.js","module":"dist/TuaApi.esm.js","unpkg":"dist/TuaApi.umd.js","jsdelivr":"dist/TuaApi.umd.js","types":"src/index.d.ts","scripts":{"cov":"open coverage/lcov-report/index.html","docs":"vuepress dev docs","docs:build":"vuepress build docs","lint":"eslint --fix . docs/.vuepress/ --ignore-path .gitignore","test":"cross-env NODE_ENV=test jest","test:tdd":"cross-env NODE_ENV=test jest --watch","prebuild":"rimraf dist/* & npm run test","build":"cross-env NODE_ENV=production rollup -c","deploy":"npm run docs:build && gh-pages -m \"[ci skip]\" -d docs/.vuepress/dist","next:pm":"npm --no-git-tag-version version preminor","next:pr":"npm --no-git-tag-version version prerelease","pub":"npm run build && npm publish","pub:n":"npm run build && npm publish --tag next"},"husky":{"hooks":{"pre-push":"npm test","pre-commit":"lint-staged","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"lint-staged":{"{src,test}/**/*.js":["eslint --fix","git add"]},"jest":{"bail":true,"clearMocks":true,"transform":{"^.+\\.js$":"babel-jest"},"moduleNameMapper":{"@/(.*)$":"<rootDir>/src/$1","@examples/(.*)$":"<rootDir>/examples/$1"},"collectCoverage":true,"collectCoverageFrom":["src/**","!src/index.d.ts"]},"eslintIgnore":["dist/*","package.json"],"dependencies":{"axios":"^0.18.0","fetch-jsonp":"^1.1.3","koa-compose":"^4.1.0"},"devDependencies":{"@babel/core":"^7.3.3","@babel/plugin-external-helpers":"^7.2.0","@babel/plugin-proposal-decorators":"^7.3.0","@babel/plugin-proposal-object-rest-spread":"^7.3.2","@babel/preset-env":"^7.3.1","@commitlint/cli":"^7.5.2","@commitlint/config-conventional":"^7.5.0","axios-mock-adapter":"^1.16.0","babel-core":"^7.0.0-bridge.0","babel-eslint":"^10.0.1","babel-jest":"^24.1.0","codecov":"^3.2.0","cross-env":"^5.2.0","eslint":"^5.14.0","eslint-config-standard":"^12.0.0","eslint-plugin-import":"^2.16.0","eslint-plugin-node":"^8.0.1","eslint-plugin-promise":"^4.0.1","eslint-plugin-standard":"^4.0.0","gh-pages":"^2.0.1","husky":"^1.3.1","jest":"^24.1.0","lint-staged":"^8.1.4","rimraf":"^2.6.3","rollup":"^1.2.2","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.2.0","rollup-plugin-eslint":"^5.0.0","rollup-plugin-json":"^3.1.0","rollup-plugin-node-resolve":"^4.0.0","rollup-plugin-replace":"^2.1.0","rollup-plugin-uglify":"^6.0.2","vuepress":"^1.0.0-alpha.39"},"repository":{"type":"git","url":"git+https://github.com/tuateam/tua-api.git"},"homepage":"https://tuateam.github.io/tua-api/","author":{"name":"StEve Young"},"license":"MIT","readme":"<h1 align=\"center\">tua-api</h1>\n\n<h4 align=\"center\">让我们优雅地调用 api~</h4>\n\n<p align=\"center\">\n    <a href=\"https://tuateam.github.io/tua-api/\">👉完整文档地址点这里👈</a>\n</p>\n\n<p align=\"center\">\n    <a href=\"https://circleci.com/gh/tuateam/tua-api/tree/master\" target=\"_blank\">\n        <img src=\"https://img.shields.io/circleci/project/github/tuateam/tua-api/master.svg\" alt=\"Build Status\">\n    </a>\n    <a href=\"https://codecov.io/github/tuateam/tua-api?branch=master\" target=\"_blank\">\n        <img src=\"https://img.shields.io/codecov/c/github/tuateam/tua-api/master.svg\" alt=\"Coverage Status\">\n    </a>\n    <a href=\"https://david-dm.org/tuateam/tua-api\" target=\"_blank\">\n        <img src=\"https://david-dm.org/tuateam/tua-api.svg\" alt=\"dependencies\">\n    </a>\n    <a href=\"https://www.npmjs.com/package/tua-api\" target=\"_blank\">\n        <img src=\"https://badgen.net/npm/dm/tua-api\" alt=\"Downloads per month\">\n        <img src=\"https://img.shields.io/npm/v/tua-api.svg\" alt=\"Version\">\n        <img src=\"https://img.shields.io/npm/l/tua-api.svg\" alt=\"License\">\n    </a>\n</p>\n\n## `tua-api` 是什么？\n`tua-api` 是一个针对发起 api 请求提供辅助功能的库。采用 ES6+ 语法，并采用 jest 进行了完整的单元测试。\n\n目前已适配：\n\n* web 端：axios, fetch-jsonp\n* Node 端：axios\n* 小程序端：wx.request\n\n<a href=\"https://codesandbox.io/s/2o24xn0750\" target=\"_blank\">\n    <img alt=\"Edit tua-api github example\" src=\"https://codesandbox.io/static/img/play-codesandbox.svg\">\n</a>\n\n## 安装\n### web 端\n#### 安装本体\n\n```bash\n$ npm i -S tua-api\n# OR\n$ yarn add tua-api\n```\n\n然后直接导入即可\n\n```js\nimport TuaApi from 'tua-api'\n```\n\n#### 配置武器\n配置“武器”分为两种情况:\n\n* [已配置 CORS 跨域请求头](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS)，或是没有跨域需求时，无需任何操作（默认采用的就是 `axios`）。\n\n* 若是用不了 CORS，那么就需要设置 `reqType: 'jsonp'` 借助 jsonp 实现跨域\n\n但是 jsonp 只支持使用 get 的方式请求，所以如果需要发送 post 或其他方式的请求，还是需要使用 `axios`（服务端还是需要配置 CORS）。\n\n### 小程序端\n#### 安装本体即可\n\n```bash\n$ npm i -S tua-api\n# OR\n$ yarn add tua-api\n```\n\n```js\nimport TuaApi from 'tua-api'\n```\n\n> 小程序还用不了 npm？[@tua-mp/service](https://tuateam.github.io/tua-mp/tua-mp-service/) 了解一下？\n\n## `tua-api` 能干什么？\n`tua-api` 能实现统一管理 api 配置（例如一般放在 `src/apis/` 下）。经过处理后，业务侧代码只需要这样写即可：\n\n```js\nimport { fooApi } from '@/apis/'\n\nfooApi\n    .bar({ a: '1', b: '2' }) // 发起请求，a、b 是请求参数\n    .then(console.log)       // 收到响应\n    .catch(console.error)    // 处理错误\n```\n\n不仅如此，还有一些其他功能：\n\n* 参数校验\n* 默认参数\n* 中间件（koa 风格）\n* ...\n\n```js\n// 甚至可以更进一步和 tua-storage 配合使用\nimport TuaStorage from 'tua-storage'\nimport { getSyncFnMapByApis } from 'tua-api'\n\n// 本地写好的各种接口配置\nimport * as apis from '@/apis'\n\nconst tuaStorage = new TuaStorage({\n    syncFnMap: getSyncFnMapByApis(apis),\n})\n\nconst fetchParam = {\n    key: fooApi.bar.key,\n    syncParams: { a: 'a', b: 'b' },\n\n    // 过期时间，默认值为实例化时的值，以秒为单位\n    expires: 10,\n\n    // 是否直接调用同步函数更新数据，默认为 false\n    // 适用于需要强制更新数据的场景，例如小程序中的下拉刷新\n    isForceUpdate: true,\n\n    // ...\n}\n\ntuaStorage\n    .load(fetchParam)\n    .then(console.log)\n    .catch(console.error)\n```\n\n## 怎么写 `api` 配置？\n拿以下 api 地址举例：\n\n* `https://example-base.com/foo/bar/something/create`\n* `https://example-base.com/foo/bar/something/modify`\n* `https://example-base.com/foo/bar/something/delete`\n\n### 地址结构划分\n以上地址，一般将其分为`3`部分：\n\n* host: `'https://example-base.com/'`\n* prefix: `'foo/bar/something'`\n* pathList: `[ 'create', 'modify', 'delete' ]`\n\n### 文件结构\n`api/` 一般是这样的文件结构：\n\n```\n.\n└── apis\n    ├── prefix-1.js\n    ├── prefix-2.js\n    ├── something.js // <-- 以上的 api 地址会放在这里，名字随意\n    └── index.js\n```\n\n### 基础配置内容\n```js\n// src/apis/something.js\n\nexport default {\n    // 请求的公用服务器地址\n    host: 'https://example-base.com/',\n\n    // 请求的中间路径\n    prefix: 'foo/bar/something',\n\n    // 接口地址数组\n    pathList: [\n        { path: 'create' },\n        { path: 'modify' },\n        { path: 'delete' },\n    ],\n}\n```\n\n[更多配置请点击这里查看](https://tuateam.github.io/tua-api/config/common.html)\n\n### 配置导出\n最后来看一下 `apis/index.js` 该怎么写：\n\n```js\nimport TuaApi from 'tua-api'\n\n// 初始化\nconst tuaApi = new TuaApi({ ... })\n\n// 使用中间件\ntuaApi\n    .use(async (ctx, next) => {\n        // 请求发起前\n        console.log('before: ', ctx)\n\n        await next()\n\n        // 响应返回后\n        console.log('after: ', ctx)\n    })\n    // 链式调用\n    .use(...)\n\nexport const fakeGet = tuaApi.getApi(require('./fake-get').default)\nexport const fakePost = tuaApi.getApi(require('./fake-post').default)\n```\n\n小程序端建议使用 [@tua-mp/cli](https://tuateam.github.io/tua-mp/tua-mp-cli/) 一键生成 api。\n\n```bash\n$ tuamp add api <api-name>\n```\n\n### 配置的构成\n在 `tua-api` 中配置分为四种：\n\n* [默认配置（调用 `new TuaApi({ ... })` 时传递的）](https://tuateam.github.io/tua-api/config/default.html)\n* [公共配置（和 `pathList` 同级的配置）](https://tuateam.github.io/tua-api/config/common.html)\n* [自身配置（`pathList` 数组中的对象上的配置）](https://tuateam.github.io/tua-api/config/self.html)\n* [运行配置（在实际调用接口时传递的配置）](https://tuateam.github.io/tua-api/config/runtime.html)\n\n其中优先级自然是:\n\n`默认配置 < 公共配置 < 自身配置 < 运行配置`\n\n<p align=\"center\">\n    <a href=\"https://tuateam.github.io/tua-api/config/\">👉更多配置点击这里👈</a>\n</p>\n","readmeFilename":"README.md","gitHead":"ce6a911b2407c9921eb467c5a83e64634dc9c3a9","bugs":{"url":"https://github.com/tuateam/tua-api/issues"},"_id":"tua-api@1.2.0-0","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"buptsteve","email":"yangzhenyu2016@gmail.com"},"dist":{"integrity":"sha512-eSmtlaR63iWlbTXQDYlAi1NOUnzm3A3sTieAf9uaXc6nZ/mwnpTu2MXczE10MHyb3iwfgqT8hqWCsPomErPeVw==","shasum":"1c57e7f1af5d97f0e19cc4d36e06ea2194095321","tarball":"https://registry.npmjs.org/tua-api/-/tua-api-1.2.0-0.tgz","fileCount":29,"unpackedSize":161738,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJctGgLCRA9TVsSAnZWagAApJgP/ixhu0qJx1SXb1M0Z5LS\n0xExbne5ZgWH3kt+YK4LwysiQCP55owJQyWKpvtAQW94gqqwJLvPMtPuCE8k\niSSIgMlTeDX+EZAFOpRdHpv0tuYNIO3fN8G1jRkpICR8Vbi8d2gFpn39jcsS\nqiET3+cKrgJtRTZEZMixiLMFgmWY4+jD0HZ29XTMuTBK7vaH4Pv/bAUI71+1\nSZbBMDE17iLo1uHw2tbtpjTO0cXEZDSJzbVYGtNMPaudAG5OkClRSykkmnaO\nT3V9NnP0VOgEsLcwY7/wDbM0POZdsPZCYk4duydNNKO2tHFrXcnqfPWrHU/Q\n1NzAp/52xj51R32n/bxjavoDlqqF3fmH4Pi984/gstYxWfrO5R8FhI01LffI\nvspLEDmepTim6Vnz6YC1kRxMextbOfJL2j0AIKYdt5ObKBworgn7jnLPV7Qb\nTfCydUth6FpaNbHO7r7VcommhmnKYMvj8yLaFs5YLZUwuGqL4aFNjhKxYBvy\niL2XUGjhMyAswVS96mQ0K5juKHV1h2Vkr+XKqK7wFCv8xadqK0Q9vcWDkehr\nSY1tGOc8zeUz1zmA+mFL5INn8XqGA82hx+qU4g+NK4gXMdIvmbilyqldj/+J\ngtTZzSRZujiUrganYTnQ2bQtGl1u6EmMv9uSeBQ8Ga9tyuN1eJ/LNj8/56Tz\nZApo\r\n=3MTu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHLjHrLO56b1WpCNce2YdoHyx7xl6xI0k70DoKWTifwKAiAN5BzHNO7X74KhClmMphwOTvzb6MM1MFM2oCPbS7kqfg=="}]},"maintainers":[{"email":"yangzhenyu2016@gmail.com","name":"buptsteve"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tua-api_1.2.0-0_1555326987132_0.9195845596946013"},"_hasShrinkwrap":false},"1.2.0":{"name":"tua-api","version":"1.2.0","description":"🏗 A common tool helps converting configs to api functions","main":"dist/TuaApi.cjs.js","module":"dist/TuaApi.esm.js","unpkg":"dist/TuaApi.umd.js","jsdelivr":"dist/TuaApi.umd.js","types":"src/index.d.ts","scripts":{"cov":"open coverage/lcov-report/index.html","docs":"vuepress dev docs","docs:build":"vuepress build docs","lint":"eslint --fix . docs/.vuepress/ --ignore-path .gitignore","test":"cross-env NODE_ENV=test jest","test:tdd":"cross-env NODE_ENV=test jest --watch","prebuild":"rimraf dist/* & npm run test","build":"cross-env NODE_ENV=production rollup -c","deploy":"npm run docs:build && gh-pages -m \"[ci skip]\" -d docs/.vuepress/dist","next:pm":"npm --no-git-tag-version version preminor","next:pr":"npm --no-git-tag-version version prerelease","pub":"npm run build && npm publish","pub:n":"npm run build && npm publish --tag next"},"husky":{"hooks":{"pre-push":"npm test","pre-commit":"lint-staged","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"lint-staged":{"{src,test}/**/*.js":["eslint --fix","git add"]},"jest":{"bail":true,"clearMocks":true,"transform":{"^.+\\.js$":"babel-jest"},"moduleNameMapper":{"@/(.*)$":"<rootDir>/src/$1","@examples/(.*)$":"<rootDir>/examples/$1"},"collectCoverage":true,"collectCoverageFrom":["src/**","!src/index.d.ts"]},"eslintIgnore":["dist/*","package.json"],"dependencies":{"axios":"^0.18.0","fetch-jsonp":"^1.1.3","koa-compose":"^4.1.0"},"devDependencies":{"@babel/core":"^7.4.3","@babel/plugin-external-helpers":"^7.2.0","@babel/plugin-proposal-decorators":"^7.4.0","@babel/plugin-proposal-object-rest-spread":"^7.4.3","@babel/preset-env":"^7.4.3","@commitlint/cli":"^7.5.2","@commitlint/config-conventional":"^7.5.0","axios-mock-adapter":"^1.16.0","babel-core":"^7.0.0-bridge.0","babel-eslint":"^10.0.1","babel-jest":"^24.7.1","codecov":"^3.3.0","cross-env":"^5.2.0","eslint":"^5.16.0","eslint-config-standard":"^12.0.0","eslint-plugin-import":"^2.17.2","eslint-plugin-node":"^8.0.1","eslint-plugin-promise":"^4.1.1","eslint-plugin-standard":"^4.0.0","gh-pages":"^2.0.1","husky":"^1.3.1","jest":"^24.7.1","lint-staged":"^8.1.5","rimraf":"^2.6.3","rollup":"^1.10.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.3.4","rollup-plugin-eslint":"^5.1.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^4.2.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-uglify":"^6.0.2","vuepress":"^1.0.0-alpha.39"},"repository":{"type":"git","url":"git+https://github.com/tuateam/tua-api.git"},"homepage":"https://tuateam.github.io/tua-api/","author":{"name":"StEve Young"},"license":"MIT","gitHead":"a70c67d67325b0ae0c071058c4f5f56d9a019dd6","bugs":{"url":"https://github.com/tuateam/tua-api/issues"},"_id":"tua-api@1.2.0","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"buptsteve","email":"yangzhenyu2016@gmail.com"},"dist":{"integrity":"sha512-lDJrHgGTnGqqOvHZhvTpbNEgd8P8TAiTKJTApx3HaAfxybYapcPKUAmJg3un0J5ill3R4dXc9F+DWE0sLDYVjA==","shasum":"dca12f670e4f4be77ce51dab9a7dfa8982854af0","tarball":"https://registry.npmjs.org/tua-api/-/tua-api-1.2.0.tgz","fileCount":29,"unpackedSize":161750,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJct/xMCRA9TVsSAnZWagAAugcQAJtL4/Cxo30+HL4SZvcs\njK0pUIO9X8toNCmzpnIfohHb8752IDIjeajpFhDOFLlFAPzEmyC+cNgn83gf\n1fkHOGX6yPttMFoyYbixJIXAIa1X3ei9YApiyNkQwFtEiiv3L6hgGg9h2LBG\nekBDLbczEMcKxLWK//R3KB/0DxFIeAdroZDJ6WfVuMIp3VLCUMWIZklJDalE\nggRYI6mILd7Wm7FHbkTPvXGdKdekgBHu4/jdKCYJfi+cWyCJGi8X6GgMmse7\nc24zo1cBZOASCqH/raTe+h51J3NsDfv71UiFzEhSZRIO3kXe66AwIYLKJrk6\nc8A+6LhhyAOoIigvQBnj6C3eDZdcmU6KaV/Xo1R2T1fhUPZ21UfOvHdvaTBh\n9eQXXtoBoLs5myRvVL/0dFS+8ex77N3SpKwWsf3kZybGHknt+h+EN+Tfuhra\nKe/LnOzcXtLtmuOePLOyd00llCGD7mIJ+77ALUohn2PqUj1EhfXuS4DO2vR1\n/6ZjxjKzOP+OEb00MJnPglv+EMUqNt2O26yml52n7NNyPxnEm62pDybkScKD\nFjD76dBAW/rPityga2s17sTxU6rElnvnRsY4lF21iMTaG4qjK4IomO0HtHcq\nRF8ZfglTGsXTU0ibWUn1hwa/POwOMP2AuT8IAqBIsANuuFgLTCBT5lAsqry6\nDbnm\r\n=y50z\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC9qQxebIvUmh6JTJgq/8gPspg5oVgI7um0xr8CTiG0FAIhALXDNjQ9IzSrdhOtbmkg/1AtnOh41fJxZPy91o2vyQGI"}]},"maintainers":[{"email":"yangzhenyu2016@gmail.com","name":"buptsteve"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tua-api_1.2.0_1555561547746_0.5816517318892231"},"_hasShrinkwrap":false},"1.2.1":{"name":"tua-api","version":"1.2.1","description":"🏗 A common tool helps converting configs to api functions","main":"dist/TuaApi.cjs.js","module":"dist/TuaApi.esm.js","unpkg":"dist/TuaApi.umd.js","jsdelivr":"dist/TuaApi.umd.js","types":"src/index.d.ts","scripts":{"cov":"open coverage/lcov-report/index.html","docs":"vuepress dev docs","docs:build":"vuepress build docs","lint":"eslint --fix . docs/.vuepress/ --ignore-path .gitignore","test":"cross-env NODE_ENV=test jest","test:tdd":"cross-env NODE_ENV=test jest --watch","prebuild":"rimraf dist/* & npm run test","build":"cross-env NODE_ENV=production rollup -c","deploy":"npm run docs:build && gh-pages -m \"[ci skip]\" -d docs/.vuepress/dist","next:pm":"npm --no-git-tag-version version preminor","next:pr":"npm --no-git-tag-version version prerelease","pub":"npm run build && npm publish","pub:n":"npm run build && npm publish --tag next"},"husky":{"hooks":{"pre-push":"npm test","pre-commit":"lint-staged","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"lint-staged":{"{src,test}/**/*.js":["eslint --fix","git add"]},"jest":{"bail":true,"clearMocks":true,"transform":{"^.+\\.js$":"babel-jest"},"moduleNameMapper":{"@/(.*)$":"<rootDir>/src/$1","@examples/(.*)$":"<rootDir>/examples/$1"},"collectCoverage":true,"collectCoverageFrom":["src/**","!src/index.d.ts"]},"eslintIgnore":["dist/*","package.json"],"dependencies":{"axios":"^0.18.0","fetch-jsonp":"^1.1.3","koa-compose":"^4.1.0"},"devDependencies":{"@babel/core":"^7.4.3","@babel/plugin-external-helpers":"^7.2.0","@babel/plugin-proposal-decorators":"^7.4.0","@babel/plugin-proposal-object-rest-spread":"^7.4.3","@babel/preset-env":"^7.4.3","@commitlint/cli":"^7.5.2","@commitlint/config-conventional":"^7.5.0","axios-mock-adapter":"^1.16.0","babel-core":"^7.0.0-bridge.0","babel-eslint":"^10.0.1","babel-jest":"^24.7.1","codecov":"^3.3.0","cross-env":"^5.2.0","eslint":"^5.16.0","eslint-config-standard":"^12.0.0","eslint-plugin-import":"^2.17.2","eslint-plugin-node":"^8.0.1","eslint-plugin-promise":"^4.1.1","eslint-plugin-standard":"^4.0.0","gh-pages":"^2.0.1","husky":"^1.3.1","jest":"^24.7.1","lint-staged":"^8.1.5","rimraf":"^2.6.3","rollup":"^1.10.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.3.4","rollup-plugin-eslint":"^5.1.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^4.2.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-uglify":"^6.0.2","vuepress":"^1.0.0-alpha.39"},"repository":{"type":"git","url":"git+https://github.com/tuateam/tua-api.git"},"homepage":"https://tuateam.github.io/tua-api/","author":{"name":"StEve Young"},"license":"MIT","gitHead":"9e83280d776e69ad0fdfbd3c9ce8e18258061afe","bugs":{"url":"https://github.com/tuateam/tua-api/issues"},"_id":"tua-api@1.2.1","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"buptsteve","email":"yangzhenyu2016@gmail.com"},"dist":{"integrity":"sha512-ZZwHdET7ADb8OOvNKVdCOjPaMFPp6kHeQ29HkbiwbRCAHKXGBruHqftyw9GyQkbBti6ggzPbcnZbnyzaEeKRrA==","shasum":"9c5b2bd1c3cf1e902aa2fa89b6a8db10655132cf","tarball":"https://registry.npmjs.org/tua-api/-/tua-api-1.2.1.tgz","fileCount":29,"unpackedSize":161676,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcvYOMCRA9TVsSAnZWagAAYKoP/iz/hdK3kIo1F6rtp3zp\nM7iaNkrdukp67AwoZ/nXtDYSNOGFboGvZAJkH3DGkJH0rihG4kxDxWLxX4En\n9hDGpRY2ZSqpbEafKV1ONY9pQ+dk4D5X8Oi7oQeNkXcJtklEq5X7ooS6QS2f\nvYVZS72lJRG+4nhOJxlg4tZH/U3ePl24msscCFdhmFhC5ZrqSnKQsBJg+tOR\nJbddWUu9+S2eaxysAh+mXkNWdHcWtCbZzEipMLhbOM2GangkReeOrxpuq4Iv\ntrVavsD2aqANsRbp815+XlZm/cyLl0KcZzAkVbxAdRyKR33LHxL0SgEa/K1Y\nQ1zptMaG9ZL4O2qNAG1tCZ2pFcZSG2jytsZf1ZmeIAt2BaDl2SC/LMjh1ke/\nXfe8sr/RS7efWXJnaSqLPZpBWrkFI17kuV0xluz4kH7bC90ABfSUcRdfdkZE\ndfuxk3bcLtFTaBAIqXuqYmFkiiguzLAhSGx2iTUvUsclJgDwnhpabiLIornU\nlBUTRREnL0KQzox6YiYAUDpJ3RuLEaE06X9L7+b3eaFmYX8rwj8mujiUAVEB\nbT9a7OKM3l//4IzKZ/W0U+y6GLm4WipK/j3E/hFMwdpwBAtDfkWVOpLhA8AS\nBmmT9GMABatyvJ0VDdgkhC8yR85gtfBTrsK7oFuyU3+aVwr4In6vcKQp/bi0\nmUIN\r\n=Ilk1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDaXVt5GyhGcfpQVcHywqLoUwGGFvGrNzsGPc1Q53tPDAIgMN+6J7GLaZEgeSGbMCKZ6At13HzRe3mcF4mPUwddpTQ="}]},"maintainers":[{"email":"yangzhenyu2016@gmail.com","name":"buptsteve"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tua-api_1.2.1_1555923851355_0.5531815318991362"},"_hasShrinkwrap":false},"1.3.0":{"name":"tua-api","version":"1.3.0","description":"🏗 A common tool helps converting configs to api functions","main":"dist/TuaApi.cjs.js","module":"dist/TuaApi.esm.js","unpkg":"dist/TuaApi.umd.js","jsdelivr":"dist/TuaApi.umd.js","types":"src/index.d.ts","scripts":{"cov":"open coverage/lcov-report/index.html","docs":"vuepress dev docs","docs:build":"vuepress build docs","lint":"eslint --fix . docs/.vuepress/ --ignore-path .gitignore","test":"cross-env NODE_ENV=test jest","test:tdd":"cross-env NODE_ENV=test jest --watch","prebuild":"rimraf dist/* & npm run test","build":"cross-env NODE_ENV=production rollup -c","deploy":"npm run docs:build && gh-pages -m \"[ci skip]\" -d docs/.vuepress/dist","next:pm":"npm --no-git-tag-version version preminor","next:pr":"npm --no-git-tag-version version prerelease","pub":"npm run build && npm publish","pub:n":"npm run build && npm publish --tag next"},"husky":{"hooks":{"pre-push":"npm test","pre-commit":"lint-staged","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"lint-staged":{"{src,test}/**/*.js":["eslint --fix","git add"]},"jest":{"bail":true,"clearMocks":true,"transform":{"^.+\\.js$":"babel-jest"},"moduleNameMapper":{"@/(.*)$":"<rootDir>/src/$1","@examples/(.*)$":"<rootDir>/examples/$1"},"collectCoverage":true,"collectCoverageFrom":["src/**","!src/index.d.ts"]},"eslintIgnore":["dist/*","!.eslintrc.js","package.json"],"dependencies":{"axios":"^0.18.0","fetch-jsonp":"^1.1.3","koa-compose":"^4.1.0"},"devDependencies":{"@babel/core":"^7.4.3","@babel/plugin-external-helpers":"^7.2.0","@babel/plugin-proposal-decorators":"^7.4.0","@babel/plugin-proposal-object-rest-spread":"^7.4.3","@babel/preset-env":"^7.4.3","@commitlint/cli":"^7.5.2","@commitlint/config-conventional":"^7.5.0","axios-mock-adapter":"^1.16.0","babel-core":"^7.0.0-bridge.0","babel-eslint":"^10.0.1","babel-jest":"^24.7.1","codecov":"^3.3.0","cross-env":"^5.2.0","eslint":"^5.16.0","eslint-config-standard":"^12.0.0","eslint-plugin-import":"^2.17.2","eslint-plugin-node":"^8.0.1","eslint-plugin-promise":"^4.1.1","eslint-plugin-standard":"^4.0.0","gh-pages":"^2.0.1","husky":"^1.3.1","jest":"^24.7.1","lint-staged":"^8.1.5","rimraf":"^2.6.3","rollup":"^1.10.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.3.4","rollup-plugin-eslint":"^5.1.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^4.2.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-uglify":"^6.0.2","vuepress":"^1.0.0-alpha.39"},"repository":{"type":"git","url":"git+https://github.com/tuateam/tua-api.git"},"homepage":"https://tuateam.github.io/tua-api/","author":{"name":"StEve Young"},"license":"MIT","gitHead":"a6696625c0fe3a3f9ad2f2d534360deed37e2b63","bugs":{"url":"https://github.com/tuateam/tua-api/issues"},"_id":"tua-api@1.3.0","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"buptsteve","email":"yangzhenyu2016@gmail.com"},"dist":{"integrity":"sha512-ICmg1LINH08TEodHhMbfMWJIbI1t5vBH4ILliyKWEn44PPkuCS6MQ3/0zmNJ+2V65hlkXcedVT3J6UyNoli3xw==","shasum":"7be5e967f28415fc256ecf903faa23e1f752638f","tarball":"https://registry.npmjs.org/tua-api/-/tua-api-1.3.0.tgz","fileCount":29,"unpackedSize":163040,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcvvrfCRA9TVsSAnZWagAA6aIQAIBe2+M4KALle/NEC30g\nXavAEdSjUu1CC/0IJtoWqZK9TPzfczQjdoiskxzmFg0w0IlHaw1pJYx3USh0\n4K3NEFXEmY1FfQo4RTXZXLv29Y38Esjy3OQ9PHNheef8ekSKlPVdCoSvlwrJ\nXAox9oio2abVtd3e1aaLjh5Ba9MqG51FqciWgMyqUBKd5Bz+/izQnycX6BsD\nBQ/DKqQprU+OnFgs0YN6qM8KhiiOSlgWU0f+rriDrgMkDB3SPWVLz0dWIC/s\n6KpC9oYr2sChsNg+b8tcvePmxQW0ZaieRpo8c1+Ijnh2hIMM8qcLGM4E9pww\nfPQYAh5o4/16ElJiXjGqWIgSCadCKbz8XIwmYtAXtorU7Hco2FSipdvNaHWS\nZIEJdy0GKP1SKrEKxUe9qNUIAneRAzMDKna21uPCiZXk0YzANWFujslyIown\nrufC3g4ERP1xZ+5hrxFncceYefbpk6Qr8XeuXwt33VFlkjavimxPACpE2tvT\ncW1m2lcxdJ2UatjEHl299NIC+M7HKvpT2eHjpUW92NueSpkVYej2ijRv7DsU\nXXoeOsaWbKmLBMWyJycGWNHUNspmTpV6vqaltFTmMg63ZaGTYW1UQHmKMuqr\ngwVirGfZoUhLdK6L7Qbt4GDBLTmiYUMSzdBEQPuIO4QjVubAy/ZgUI+rCM/5\n5Lwz\r\n=xMN7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEAyxXe/idXjNn21bDVSGTqV5J+VqHG5KWHOFxH7VDtyAiEAtsrhArehT+IukXife9h2ptfIUZENTttgYnf1FsqQn90="}]},"maintainers":[{"email":"yangzhenyu2016@gmail.com","name":"buptsteve"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tua-api_1.3.0_1556019935238_0.4412164055219008"},"_hasShrinkwrap":false},"1.3.1":{"name":"tua-api","version":"1.3.1","description":"🏗 A common tool helps converting configs to api functions","main":"dist/TuaApi.cjs.js","module":"dist/TuaApi.esm.js","unpkg":"dist/TuaApi.umd.js","jsdelivr":"dist/TuaApi.umd.js","types":"src/index.d.ts","scripts":{"cov":"open coverage/lcov-report/index.html","docs":"vuepress dev docs","docs:build":"vuepress build docs","lint":"eslint --fix . docs/.vuepress/ --ignore-path .gitignore","test":"cross-env NODE_ENV=test jest","test:tdd":"cross-env NODE_ENV=test jest --watch","prebuild":"rimraf dist/* & npm run test","build":"cross-env NODE_ENV=production rollup -c","deploy":"npm run docs:build && gh-pages -m \"[ci skip]\" -d docs/.vuepress/dist","next:pm":"npm --no-git-tag-version version preminor","next:pr":"npm --no-git-tag-version version prerelease","pub":"npm run build && npm publish","pub:n":"npm run build && npm publish --tag next"},"husky":{"hooks":{"pre-push":"npm test","pre-commit":"lint-staged","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"lint-staged":{"{src,test}/**/*.js":["eslint --fix","git add"]},"jest":{"bail":true,"clearMocks":true,"transform":{"^.+\\.js$":"babel-jest"},"moduleNameMapper":{"@/(.*)$":"<rootDir>/src/$1","@examples/(.*)$":"<rootDir>/examples/$1"},"collectCoverage":true,"collectCoverageFrom":["src/**","!src/index.d.ts"]},"eslintIgnore":["dist/*","!.eslintrc.js","package.json"],"dependencies":{"axios":"^0.18.0","fetch-jsonp":"^1.1.3","koa-compose":"^4.1.0"},"devDependencies":{"@babel/core":"^7.4.3","@babel/plugin-external-helpers":"^7.2.0","@babel/plugin-proposal-decorators":"^7.4.0","@babel/plugin-proposal-object-rest-spread":"^7.4.3","@babel/preset-env":"^7.4.3","@commitlint/cli":"^7.5.2","@commitlint/config-conventional":"^7.5.0","@types/jest":"^24.0.12","axios-mock-adapter":"^1.16.0","babel-core":"^7.0.0-bridge.0","babel-eslint":"^10.0.1","babel-jest":"^24.7.1","codecov":"^3.3.0","cross-env":"^5.2.0","eslint":"^5.16.0","eslint-config-standard":"^12.0.0","eslint-plugin-import":"^2.17.2","eslint-plugin-node":"^8.0.1","eslint-plugin-promise":"^4.1.1","eslint-plugin-standard":"^4.0.0","gh-pages":"^2.0.1","husky":"^1.3.1","jest":"^24.7.1","lint-staged":"^8.1.5","rimraf":"^2.6.3","rollup":"^1.10.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.3.4","rollup-plugin-eslint":"^5.1.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^4.2.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-uglify":"^6.0.2","typescript":"^3.4.5","vuepress":"^1.0.0-alpha.39"},"repository":{"type":"git","url":"git+https://github.com/tuateam/tua-api.git"},"homepage":"https://tuateam.github.io/tua-api/","author":{"name":"StEve Young"},"license":"MIT","gitHead":"bb617927c003cfb5f5b7935f2ea80a52ed1e766a","bugs":{"url":"https://github.com/tuateam/tua-api/issues"},"_id":"tua-api@1.3.1","_nodeVersion":"11.9.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-z39aRR/EQyOgz6h/2bspDtJbk5YXCUEirTqGxeGLnfb7dUBMw/YteoGkj4IJz54rCLhY2paW0VHkgC1czlQwbg==","shasum":"c214ed285c0e5f3ebb6627ed0f3aa547d9171192","tarball":"https://registry.npmjs.org/tua-api/-/tua-api-1.3.1.tgz","fileCount":30,"unpackedSize":160964,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdFgOUCRA9TVsSAnZWagAAu7kQAIpYN0XWRw5YOOHm9cw4\nxbXCHa3uJyQ+8bnxaOzlbNF8wuXw1XXa7sR4y4sqlepP7ZjGRddbEjVo3jIP\nWUra+jguO8ggCyj2QV/gSPghLrOMG7exSinDXf3o3z1HtKECYifk7aRRNPnz\np8ehfLp9ARn6rm2BGbxuIAVSznavosbRq8ACYeF2S5CdSpKUTLe6Svb0Rc0j\nyV68TRRnBUD+nySQuvmdZ6e1uzq45nsouSisxIBQtCLXXVrkmEoY5sQLDOSv\nZbyeZKH/m3xwM1DsLEF+W1vhrD/cb3FAfKXBpMIy0sjmPsGZ3/WsuvCprr7L\nRrliYfYsrLjKIGvgcqZc+y0fSRMZhCXroLdoN8i0QKjSWQpGNrCjxxs0SaNq\nD5ox8OGZEG1OAKsSMVVOhiwvL2DW/kisAP//zliSYMxd9mcola19DY7at3WC\nB2i/kHFSs6qUJVksOfGey2r80eEbEhWfmIhydsZ4+11x1EXl+lYa5czowjlJ\nw8SFkGZ3PL3wzm7hqNwguDUQrPDuRFk/ESR/o3Iw4kps9f2OfpPwcCGfnw+2\nfTMODDWl00ofg5XxY09Ahv8qBgJPhsEU8SIvi8pSCPtpqDVotgHuOtG+3PpB\n88wG8jbu23rolsSZmSkrw16DPFO7UwZTW6ZC8k1P29+TPi/Wi2YeXdcRk183\n4Ku0\r\n=OGIj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICsJNAssGDEoY31ncfak1+gdfk+iqRh+BEZVd1okcA2fAiEAxjVU6Usa3dPOrsgac6gMji3Tmd/Ch95rJwou44CMLi8="}]},"maintainers":[{"email":"yangzhenyu2016@gmail.com","name":"buptsteve"}],"_npmUser":{"name":"buptsteve","email":"yangzhenyu2016@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tua-api_1.3.1_1561723795637_0.18528177343109387"},"_hasShrinkwrap":false},"1.3.2":{"name":"tua-api","version":"1.3.2","description":"🏗 A common tool helps converting configs to api functions","main":"dist/TuaApi.cjs.js","module":"dist/TuaApi.esm.js","unpkg":"dist/TuaApi.umd.js","jsdelivr":"dist/TuaApi.umd.js","types":"src/index.d.ts","scripts":{"cov":"open coverage/lcov-report/index.html","docs":"vuepress dev docs","docs:build":"vuepress build docs","lint":"eslint --fix . docs/.vuepress/ --ignore-path .gitignore","test":"cross-env NODE_ENV=test jest","test:tdd":"cross-env NODE_ENV=test jest --watch","prebuild":"rimraf dist/* & npm run test","build":"cross-env NODE_ENV=production rollup -c","deploy":"npm run docs:build && gh-pages -m \"[ci skip]\" -d docs/.vuepress/dist","next:pm":"npm --no-git-tag-version version preminor","next:pr":"npm --no-git-tag-version version prerelease","pub":"npm run build && npm publish","pub:n":"npm run build && npm publish --tag next"},"husky":{"hooks":{"pre-push":"npm test","pre-commit":"lint-staged","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"lint-staged":{"{src,test}/**/*.js":["eslint --fix","git add"]},"jest":{"bail":true,"clearMocks":true,"transform":{"^.+\\.js$":"babel-jest"},"moduleNameMapper":{"@/(.*)$":"<rootDir>/src/$1","@examples/(.*)$":"<rootDir>/examples/$1"},"collectCoverage":true,"collectCoverageFrom":["src/**","!src/index.d.ts"]},"eslintIgnore":["dist/*","!.eslintrc.js","package.json"],"dependencies":{"axios":"^0.18.0","fetch-jsonp":"^1.1.3","koa-compose":"^4.1.0"},"devDependencies":{"@babel/core":"^7.4.3","@babel/plugin-external-helpers":"^7.2.0","@babel/plugin-proposal-decorators":"^7.4.0","@babel/plugin-proposal-object-rest-spread":"^7.4.3","@babel/preset-env":"^7.4.3","@commitlint/cli":"^7.5.2","@commitlint/config-conventional":"^7.5.0","@types/jest":"^24.0.12","axios-mock-adapter":"^1.16.0","babel-core":"^7.0.0-bridge.0","babel-eslint":"^10.0.1","babel-jest":"^24.7.1","codecov":"^3.3.0","cross-env":"^5.2.0","eslint":"^5.16.0","eslint-config-standard":"^12.0.0","eslint-plugin-import":"^2.17.2","eslint-plugin-node":"^8.0.1","eslint-plugin-promise":"^4.1.1","eslint-plugin-standard":"^4.0.0","gh-pages":"^2.0.1","husky":"^1.3.1","jest":"^24.7.1","lint-staged":"^8.1.5","rimraf":"^2.6.3","rollup":"^1.10.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.3.4","rollup-plugin-eslint":"^5.1.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^4.2.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-uglify":"^6.0.2","typescript":"^3.4.5","vuepress":"^1.0.0-alpha.39"},"repository":{"type":"git","url":"git+https://github.com/tuateam/tua-api.git"},"homepage":"https://tuateam.github.io/tua-api/","author":{"name":"StEve Young"},"license":"MIT","gitHead":"13624aba4257fde6bb1f59da2a0dd7b3aab9843f","bugs":{"url":"https://github.com/tuateam/tua-api/issues"},"_id":"tua-api@1.3.2","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"buptsteve","email":"yangzhenyu2016@gmail.com"},"dist":{"integrity":"sha512-D3ZxrlWjYALZKiFIifyTn2IFp61z2Gg2PflvLHJJOGIha77LDB/qxfMxygnnIxARD3LS2tzpdnkDc4epyp1Cow==","shasum":"07b87307b82d3e9b4dc50abee5f87b463ee861e0","tarball":"https://registry.npmjs.org/tua-api/-/tua-api-1.3.2.tgz","fileCount":31,"unpackedSize":167605,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdHYj8CRA9TVsSAnZWagAAkbwP/jJVJsoik4rswvcoM8XB\nKyjrfJUHJNie+GZX40Pvs7yesrKHLM0nG5bSK1d5igac5N4dY1SCcshU4R4Q\nbgL9VudT/HfsdO23+L6h8g9VkDqNfstULYEwUR6hJr43tqP3WuIg1/QYqXpD\nLThJAuX7rtPDkB2U01w7rafh2JtHT/8/sf9n54Qjw1ifrUpnrtZ4X5iA1PJi\n+bE2LCccG5ViWv4jg66sLkjq6A7e7IDAHnir2dnliq6FSMEBO1JUd0tn1DKF\nlDx2gY74j25NzTRarn9/Aa1XS0+xjX3keYr91L2/qpuisQ5iW3yY5DBAd2hg\nkdczHFoCywWVNyAIZTdH90QyhLmsx8lyXyJEorNBlEhrS3ew86RV/+5b2vLY\n7HL4PttYcI68rAtHqXsSOf0hiSI7dFPlgMUhKT6K2q2SAs4OiYHfc7bzlVkH\nUr69tuIyUDDMMCIwzTM8fGKDvhIYUthLMk/Hv4VjWrhZ2swUoh3Vfos1e9xQ\nonaN9M7X48ssao9R6VXWfTYwCfo75QFSyaPvR2kGv23cBCsJuGc0tuqJ8OlR\nQw2Zz12vokfPyiCO9fgB+uZAtdC0GV/9U2uA+9G5BIQjz3q7IWx5vQ+Xeao0\nFql/m0SAadUxJv0jZyeR7BpBsgt3nL/tk72fT3C+ND012mEb199y/M6TBd2j\n2nFF\r\n=5DPR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDLEC5nUJwHvgMJ0pvQrRoJL8hnxFMbxhL5L9fxMRPZrAiAArgN8IfWvbLDlEw42OX7bZK75l/EhIBSS3GsVitLrlQ=="}]},"maintainers":[{"email":"yangzhenyu2016@gmail.com","name":"buptsteve"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tua-api_1.3.2_1562216699614_0.22567054702510547"},"_hasShrinkwrap":false},"1.3.3":{"name":"tua-api","version":"1.3.3","description":"🏗 A common tool helps converting configs to api functions","main":"dist/TuaApi.cjs.js","module":"dist/TuaApi.esm.js","unpkg":"dist/TuaApi.umd.js","jsdelivr":"dist/TuaApi.umd.js","types":"src/index.d.ts","scripts":{"cov":"open coverage/lcov-report/index.html","docs":"vuepress dev docs","docs:build":"vuepress build docs","lint":"eslint --fix . docs/.vuepress/ --ignore-path .gitignore","test":"cross-env NODE_ENV=test jest","test:tdd":"cross-env NODE_ENV=test jest --watch","prebuild":"rimraf dist/* & npm run test","build":"cross-env NODE_ENV=production rollup -c","deploy":"npm run docs:build && gh-pages -m \"[ci skip]\" -d docs/.vuepress/dist","next:pm":"npm --no-git-tag-version version preminor","next:pr":"npm --no-git-tag-version version prerelease","pub":"npm run build && npm publish","pub:n":"npm run build && npm publish --tag next"},"husky":{"hooks":{"pre-push":"npm test","pre-commit":"lint-staged","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"lint-staged":{"{src,test}/**/*.js":["eslint --fix","git add"]},"jest":{"bail":true,"clearMocks":true,"transform":{"^.+\\.js$":"babel-jest"},"moduleNameMapper":{"@/(.*)$":"<rootDir>/src/$1","@examples/(.*)$":"<rootDir>/examples/$1"},"collectCoverage":true,"collectCoverageFrom":["src/**","!src/index.d.ts"]},"eslintIgnore":["dist/*","!.eslintrc.js","package.json"],"dependencies":{"axios":"^0.18.0","fetch-jsonp":"^1.1.3","koa-compose":"^4.1.0"},"devDependencies":{"@babel/core":"^7.4.3","@babel/plugin-external-helpers":"^7.2.0","@babel/plugin-proposal-decorators":"^7.4.0","@babel/plugin-proposal-object-rest-spread":"^7.4.3","@babel/preset-env":"^7.4.3","@commitlint/cli":"^7.5.2","@commitlint/config-conventional":"^7.5.0","@types/jest":"^24.0.12","axios-mock-adapter":"^1.16.0","babel-core":"^7.0.0-bridge.0","babel-eslint":"^10.0.1","babel-jest":"^24.7.1","codecov":"^3.3.0","cross-env":"^5.2.0","eslint":"^5.16.0","eslint-config-standard":"^12.0.0","eslint-plugin-import":"^2.17.2","eslint-plugin-node":"^8.0.1","eslint-plugin-promise":"^4.1.1","eslint-plugin-standard":"^4.0.0","gh-pages":"^2.0.1","husky":"^1.3.1","jest":"^24.7.1","lint-staged":"^8.1.5","rimraf":"^2.6.3","rollup":"^1.10.0","rollup-plugin-babel":"^4.3.2","rollup-plugin-commonjs":"^9.3.4","rollup-plugin-eslint":"^5.1.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^4.2.3","rollup-plugin-replace":"^2.2.0","rollup-plugin-uglify":"^6.0.2","typescript":"^3.4.5","vuepress":"^1.0.0-alpha.39"},"repository":{"type":"git","url":"git+https://github.com/tuateam/tua-api.git"},"homepage":"https://tuateam.github.io/tua-api/","author":{"name":"StEve Young"},"license":"MIT","gitHead":"759a61807f5d95b3c67054505d9a20f6064ec58c","bugs":{"url":"https://github.com/tuateam/tua-api/issues"},"_id":"tua-api@1.3.3","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"buptsteve","email":"yangzhenyu2016@gmail.com"},"dist":{"integrity":"sha512-yVaAcjlcnNosUFJpS3NHdmPxAIDw8O4PheTNjHn9GwJf3xp/u5R7C+GYE7WzRogJJXB3rISiBYOx8+FRQbDxfQ==","shasum":"0ea5ab3bc1095cc7b4f7144bcde773d86165b18f","tarball":"https://registry.npmjs.org/tua-api/-/tua-api-1.3.3.tgz","fileCount":31,"unpackedSize":167886,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdOZ+LCRA9TVsSAnZWagAAOAwQAIYy2I60vilO8h2G+Pas\nhtOlLVABInmCdRRwtVziBjg2UNLgNOLnwXrjlUHLZv23VeKIg8g31dPJR7MO\nz9XlaRj3pqhLYZLuyVvdNnQEs2CXmZlFnBdyfWssTN3pD8iJEV2mX/EUG/IV\nS4qcA7hY41Cr4hhdEVWDwcGYeueTCoPLqSRScnbbSXzRVYGp3QVdUFufPBcr\n7Ve4etrdNKjhKqDJkvx5vTCVXjyPjACpMzPz9jMhVOpUf6eFmFWWtKZR+GqN\nroHU4sh04lio6aAsZbRnRFWQqvKpk67RM/x4aBjX10UmOWou5qgDnqGYUF8h\n5DefwKKa5DHTZca/Iz1GtqOkHh5B06v5uFr5GQgl5ehTLwVrsvAHvOnoiXz4\nNvPwy+5O13s+iKBF06PxDP++imyE739Fl0AzwS9i4uhCxncrByvt3Dqj/zym\novYa221kvEbJrJM6VeeVRVAJS90Hvvwj5DbbZ0KBCHsj80tRGHJAWn6hiwwQ\nGHPV0SMBvFKslw3JPlj4ZHeeCwN8O/qiOp9leJzswMROrbZolvXoNEnlSzH/\n85NJFAsZaFdCStcK00x0q3FBWlNLeWlQyqG1p1lWvDt5LFxftS/IM5MCE8Hl\nflRVF/adDxVZpxzy7INEX5slmfzCH0k+JOVrl8Pdo7VQHU5XFrhef+3bqxVJ\nxUNU\r\n=KFkN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHbY2+mWeV7kvOThynKvr6DtobpbL1ve0/KV2g9YrVGkAiEA4+BZo0+HclhQW+pMXO1nM13L0Vmuto9eFcU/YGdS80o="}]},"maintainers":[{"email":"yangzhenyu2016@gmail.com","name":"buptsteve"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tua-api_1.3.3_1564057482847_0.4867293788585132"},"_hasShrinkwrap":false},"1.3.4":{"name":"tua-api","version":"1.3.4","description":"🏗 A common tool helps converting configs to api functions","main":"dist/TuaApi.cjs.js","module":"dist/TuaApi.esm.js","unpkg":"dist/TuaApi.umd.js","jsdelivr":"dist/TuaApi.umd.js","types":"src/index.d.ts","scripts":{"cov":"open coverage/lcov-report/index.html","docs":"vuepress dev docs","docs:build":"vuepress build docs","lint":"eslint --fix . docs/.vuepress/ --ignore-path .gitignore","test":"cross-env NODE_ENV=test jest","test:tdd":"cross-env NODE_ENV=test jest --watch","prebuild":"rimraf dist/* & npm run test","build":"cross-env NODE_ENV=production rollup -c","deploy":"npm run docs:build && gh-pages -m \"[ci skip]\" -d docs/.vuepress/dist","next:pm":"npm --no-git-tag-version version preminor","next:pr":"npm --no-git-tag-version version prerelease","pub":"npm run build && npm publish","pub:n":"npm run build && npm publish --tag next"},"husky":{"hooks":{"pre-push":"npm test","pre-commit":"lint-staged","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"lint-staged":{"{src,test}/**/*.js":["eslint --fix","git add"]},"jest":{"bail":true,"clearMocks":true,"transform":{"^.+\\.js$":"babel-jest"},"moduleNameMapper":{"@/(.*)$":"<rootDir>/src/$1","@examples/(.*)$":"<rootDir>/examples/$1"},"collectCoverage":true,"collectCoverageFrom":["src/**","!src/index.d.ts"]},"eslintIgnore":["dist/*","!.eslintrc.js","package.json"],"dependencies":{"axios":"^0.19.0","fetch-jsonp":"^1.1.3","koa-compose":"^4.1.0"},"devDependencies":{"@babel/core":"^7.5.5","@babel/plugin-external-helpers":"^7.2.0","@babel/plugin-proposal-decorators":"^7.4.4","@babel/plugin-proposal-object-rest-spread":"^7.5.5","@babel/preset-env":"^7.5.5","@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@types/jest":"^24.0.17","axios-mock-adapter":"^1.17.0","babel-core":"^7.0.0-bridge.0","babel-eslint":"^10.0.2","babel-jest":"^24.8.0","codecov":"^3.5.0","cross-env":"^5.2.0","eslint":"^6.1.0","eslint-config-standard":"^13.0.1","eslint-plugin-import":"^2.18.2","eslint-plugin-node":"^9.1.0","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.0","gh-pages":"^2.1.0","husky":"^3.0.2","jest":"^24.8.0","lint-staged":"^9.2.1","rimraf":"^2.6.3","rollup":"^1.19.4","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.0.2","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-replace":"^2.2.0","rollup-plugin-uglify":"^6.0.2","typescript":"^3.5.3","vuepress":"^1.0.3"},"repository":{"type":"git","url":"git+https://github.com/tuateam/tua-api.git"},"homepage":"https://tuateam.github.io/tua-api/","author":{"name":"StEve Young"},"license":"MIT","gitHead":"3fa324ed65a2076ab08c3ca1a1784d37c8b71041","bugs":{"url":"https://github.com/tuateam/tua-api/issues"},"_id":"tua-api@1.3.4","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"buptsteve","email":"yangzhenyu2016@gmail.com"},"dist":{"integrity":"sha512-cNfkwolV9OWj5VuL9eANX/l+uFheTQRCiHFfZRTU5hX03uQtGEKldtmuaKWDmOAIBiAtZ+95NYuFNNbc++ysfw==","shasum":"96dcfd3b0a7812e4e5a733bd8ec5207d263024b9","tarball":"https://registry.npmjs.org/tua-api/-/tua-api-1.3.4.tgz","fileCount":31,"unpackedSize":169609,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdSn1CCRA9TVsSAnZWagAAVSsP/1Srbanv5jd/5cEgR7bL\nPl+Os6pie8pF+I3MmOR3lovLA1xc2r7usMbt2snnMUUzRAVaYBftKEPEGmXR\nevw2hOsT1OPp9ZsXY5v6DRqDx6GS0a49oqly8EoIJ4IUryt/a5Le0aIP2h0t\ncC3UAP3h4tosM0JIG1QBI+6+n2PW5o950WGB2LPxgrqa1apkyGJ3weFmquQI\neHzJtzwne1wubmSieGYad9ZEBnqivbWwZMwrFERGv7aKOTE1lX11LNc+vxJI\np/nuDntgXv6+QYZlTWBLes11LfG8xUujfJz5grzkHX/9V24DJeHJepXZpyld\nQnKiSk66jKBGmgLWjsI1jLbgb7nrBelnH9itradckKIWP3z8MX1phfLYtHas\nHkDF9n+40nRWRZf+iEnmTw2jRzTef7CvCzSDSi+3C80+19rbCkMPwtK+HTE8\n0t4jFtRTw0ZzUzu+TbHwEyu91vg5a038mDPbPT52N/T+DKmaP9o5SJCEd859\nDcUwiQCcV8+pNmlKV+VfLx8vog5Mn38+AcPRhex1Hbg0wzTzWVOab+nV4rdq\n0W8N87LBzQBiXkG3xkKXW0tHarJS8f2P/jOmn5QaFciALHJ14AueQgluof8/\n6kZhjtplK0b8Xk8wjoaOnf622FkUDQN01qvWu2F5U6h9ijeaLJrMImOa8X++\n0LTL\r\n=Qru/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFYvpj07fUgY9a/nhDq06vZ1gv3MH5DyZQ8glnqxYbL6AiAdfY2J+jLO9iZ/Z5DWhOzXaZz77FXzCzvvV7/wIBz4Ng=="}]},"maintainers":[{"email":"yangzhenyu2016@gmail.com","name":"buptsteve"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tua-api_1.3.4_1565162818205_0.3746898439187176"},"_hasShrinkwrap":false},"1.3.5":{"name":"tua-api","version":"1.3.5","description":"🏗 A common tool helps converting configs to api functions","main":"dist/TuaApi.cjs.js","module":"dist/TuaApi.esm.js","unpkg":"dist/TuaApi.umd.js","jsdelivr":"dist/TuaApi.umd.js","types":"src/index.d.ts","scripts":{"cov":"open coverage/lcov-report/index.html","docs":"vuepress dev docs","docs:build":"vuepress build docs","lint":"eslint --fix . docs/.vuepress/ --ignore-path .gitignore","test":"cross-env NODE_ENV=test jest","test:tdd":"cross-env NODE_ENV=test jest --watch","prebuild":"rimraf dist/* & npm run test","build":"cross-env NODE_ENV=production rollup -c","deploy":"npm run docs:build && gh-pages -m \"[ci skip]\" -d docs/.vuepress/dist","next:pm":"npm --no-git-tag-version version preminor","next:pr":"npm --no-git-tag-version version prerelease","pub":"npm run build && npm publish","pub:n":"npm run build && npm publish --tag next"},"husky":{"hooks":{"pre-push":"npm test","pre-commit":"lint-staged","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"lint-staged":{"{src,test}/**/*.js":["eslint --fix","git add"]},"jest":{"bail":true,"clearMocks":true,"transform":{"^.+\\.js$":"babel-jest"},"moduleNameMapper":{"@/(.*)$":"<rootDir>/src/$1","@examples/(.*)$":"<rootDir>/examples/$1"},"collectCoverage":true,"collectCoverageFrom":["src/**","!src/index.d.ts"]},"eslintIgnore":["dist/*","!.eslintrc.js","package.json"],"dependencies":{"axios":"^0.19.0","fetch-jsonp":"^1.1.3","koa-compose":"^4.1.0"},"devDependencies":{"@babel/core":"^7.6.0","@babel/plugin-external-helpers":"^7.2.0","@babel/plugin-proposal-decorators":"^7.6.0","@babel/plugin-proposal-object-rest-spread":"^7.5.5","@babel/preset-env":"^7.6.0","@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@types/jest":"^24.0.18","axios-mock-adapter":"^1.17.0","babel-core":"^7.0.0-bridge.0","babel-eslint":"^10.0.3","babel-jest":"^24.9.0","codecov":"^3.5.0","cross-env":"^5.2.1","eslint":"^6.3.0","eslint-config-standard":"^14.1.0","eslint-plugin-import":"^2.18.2","eslint-plugin-node":"^10.0.0","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","gh-pages":"^2.1.1","husky":"^3.0.5","jest":"^24.9.0","lint-staged":"^9.2.5","rimraf":"^3.0.0","rollup":"^1.21.2","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-replace":"^2.2.0","rollup-plugin-uglify":"^6.0.3","typescript":"^3.6.3","vuepress":"^1.0.4"},"repository":{"type":"git","url":"git+https://github.com/tuateam/tua-api.git"},"homepage":"https://tuateam.github.io/tua-api/","author":{"name":"StEve Young"},"license":"MIT","gitHead":"36addf5a1acd110e4bb4753858ad42b102589db2","bugs":{"url":"https://github.com/tuateam/tua-api/issues"},"_id":"tua-api@1.3.5","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"buptsteve","email":"yangzhenyu2016@gmail.com"},"dist":{"integrity":"sha512-Qn9T93EPXmzjdfotjSKRmKd965jKdsrQqUksJWmLhEcuscmM/CerMxCmplzENSCndNvLm0i4FFqtll3Ul1qtbA==","shasum":"26c55eb4b76c8125c90fae333ef25b716acaf4bf","tarball":"https://registry.npmjs.org/tua-api/-/tua-api-1.3.5.tgz","fileCount":31,"unpackedSize":171583,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdeNNfCRA9TVsSAnZWagAAyFIQAIKzDV5OAqxTxyiN9Sfn\nB4H62mIEpXR+dVECAAu/9LfYYQM45f0S3iDvu9m3TgmZlg4x8018Fk/mKmtc\nw/ebyJ9XZzclFaVnZBY6HpnrbcNXex+//84THjWplTFbR8bjvGx6QNRNyMMn\n871nP8vSq4rP4kmI6lozfRjVNkMDuHoYeWcaRhKBy8KjwuesLSvuBgzVEMCs\nLAEZQ7YjcNkhEJfuj3Ht1mNEeBoW0b65BUIfVXneicA43aq0v9YiT/EkwW+c\nHzOge2yt7AR1koxl4YPM7McZt9hqubZ+fJECMEKINOPhr95djdo566rorkVP\nLzQGvbH/xEeLz+vcAM7fdjmCsfU8EyJm99qKlNxjxTfGWFGUszewuvxNGREY\n5INFkGPbJc9S5hdVOIZ+WnD1m1ShJ4kt/tKfxxaW2+4u+Yz6qEfBQydlVMW8\n++ZTydCaPv9oXcEVUDtfab0nfzKMJwqpmoXCtArWLxpZnutOuBv0WBrh3Aeq\nGsNWQykVcAzskBwZsqB3rTNRja53Cgu4d2ZtxG1Oag4QeNreBzJmtlz7e0Dc\nDUmJoJcaT0sCm090qKGVq+hkQVhLs55HkeKtXy72UwDTA35++yP7rZf6nTDr\niHtz5k1JG1gGILTcbaGxD6UvQDLt2oJ2oKS3IUgxE/9EyXT4izsWrcQkN2tE\nwgNQ\r\n=fWav\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC7dCG7fLyCcc2bLkT3yXHxQmBTNISWHGgMq1fbYDo9IAIhAI0YlAWxE7VCnispT8nKXZGKmi28GbbnnAcLj83iKovo"}]},"maintainers":[{"email":"yangzhenyu2016@gmail.com","name":"buptsteve"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tua-api_1.3.5_1568199518774_0.1984513192494064"},"_hasShrinkwrap":false},"1.4.0-0":{"name":"tua-api","version":"1.4.0-0","description":"🏗 A common tool helps converting configs to api functions","main":"dist/TuaApi.cjs.js","module":"dist/TuaApi.esm.js","unpkg":"dist/TuaApi.umd.js","jsdelivr":"dist/TuaApi.umd.js","types":"src/index.d.ts","scripts":{"cov":"open coverage/lcov-report/index.html","docs":"vuepress dev docs","docs:build":"vuepress build docs","lint":"eslint --fix . docs/.vuepress/ --ignore-path .gitignore","test":"cross-env NODE_ENV=test jest","test:tdd":"cross-env NODE_ENV=test jest --watch","prebuild":"rimraf dist/* & npm run test","build":"cross-env NODE_ENV=production rollup -c","deploy":"npm run docs:build && gh-pages -m \"[ci skip]\" -d docs/.vuepress/dist","next:pm":"npm --no-git-tag-version version preminor","next:pr":"npm --no-git-tag-version version prerelease","pub":"npm run build && npm publish","pub:n":"npm run build && npm publish --tag next"},"husky":{"hooks":{"pre-push":"npm test","pre-commit":"lint-staged","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"lint-staged":{"{src,test}/**/*.js":["eslint --fix","git add"]},"jest":{"bail":true,"clearMocks":true,"transform":{"^.+\\.js$":"babel-jest"},"moduleNameMapper":{"@/(.*)$":"<rootDir>/src/$1","@examples/(.*)$":"<rootDir>/examples/$1"},"collectCoverage":true,"collectCoverageFrom":["src/**","!src/index.d.ts"]},"eslintIgnore":["dist/*","!.eslintrc.js","package.json"],"dependencies":{"axios":"^0.19.0","fetch-jsonp":"^1.1.3","koa-compose":"^4.1.0"},"devDependencies":{"@babel/core":"^7.6.2","@babel/plugin-external-helpers":"^7.2.0","@babel/plugin-proposal-decorators":"^7.6.0","@babel/plugin-proposal-object-rest-spread":"^7.5.5","@babel/preset-env":"^7.6.0","@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@types/jest":"^24.0.18","axios-mock-adapter":"^1.17.0","babel-core":"^7.0.0-bridge.0","babel-eslint":"^10.0.3","babel-jest":"^24.9.0","codecov":"^3.5.0","cross-env":"^5.2.1","eslint":"^6.3.0","eslint-config-standard":"^14.1.0","eslint-plugin-import":"^2.18.2","eslint-plugin-node":"^10.0.0","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","gh-pages":"^2.1.1","husky":"^3.0.5","jest":"^24.9.0","lint-staged":"^9.2.5","rimraf":"^3.0.0","rollup":"^1.21.2","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-replace":"^2.2.0","rollup-plugin-uglify":"^6.0.3","typescript":"^3.6.3","vuepress":"^1.0.4"},"repository":{"type":"git","url":"git+https://github.com/tuateam/tua-api.git"},"homepage":"https://tuateam.github.io/tua-api/","author":{"name":"StEve Young"},"license":"MIT","readme":"<h1 align=\"center\">tua-api</h1>\n\n<h4 align=\"center\">让我们优雅地调用 api~</h4>\n\n<p align=\"center\">\n    <a href=\"https://tuateam.github.io/tua-api/\">👉完整文档地址点这里👈</a>\n</p>\n\n<p align=\"center\">\n    <a href=\"https://circleci.com/gh/tuateam/tua-api/tree/master\" target=\"_blank\">\n        <img src=\"https://img.shields.io/circleci/project/github/tuateam/tua-api/master.svg\" alt=\"Build Status\">\n    </a>\n    <a href=\"https://codecov.io/github/tuateam/tua-api?branch=master\" target=\"_blank\">\n        <img src=\"https://img.shields.io/codecov/c/github/tuateam/tua-api/master.svg\" alt=\"Coverage Status\">\n    </a>\n    <a href=\"https://david-dm.org/tuateam/tua-api\" target=\"_blank\">\n        <img src=\"https://david-dm.org/tuateam/tua-api.svg\" alt=\"dependencies\">\n    </a>\n    <a href=\"https://www.npmjs.com/package/tua-api\" target=\"_blank\">\n        <img src=\"https://badgen.net/npm/dm/tua-api\" alt=\"Downloads per month\">\n        <img src=\"https://img.shields.io/npm/v/tua-api.svg\" alt=\"Version\">\n        <img src=\"https://img.shields.io/npm/l/tua-api.svg\" alt=\"License\">\n    </a>\n</p>\n\n## `tua-api` 是什么？\n`tua-api` 是一个针对发起 api 请求提供辅助功能的库。采用 ES6+ 语法，并采用 jest 进行了完整的单元测试。\n\n目前已适配：\n\n* web 端：axios, fetch-jsonp\n* Node 端：axios\n* 小程序端：wx.request\n\n<a href=\"https://codesandbox.io/s/2o24xn0750\" target=\"_blank\">\n    <img alt=\"Edit tua-api github example\" src=\"https://codesandbox.io/static/img/play-codesandbox.svg\">\n</a>\n\n## 安装\n### web 端\n#### 安装本体\n\n```bash\n$ npm i -S tua-api\n# OR\n$ yarn add tua-api\n```\n\n然后直接导入即可\n\n```js\nimport TuaApi from 'tua-api'\n```\n\n#### 配置武器\n配置“武器”分为两种情况:\n\n* [已配置 CORS 跨域请求头](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS)，或是没有跨域需求时，无需任何操作（默认采用的就是 `axios`）。\n\n* 若是用不了 CORS，那么就需要设置 `reqType: 'jsonp'` 借助 jsonp 实现跨域\n\n但是 jsonp 只支持使用 get 的方式请求，所以如果需要发送 post 或其他方式的请求，还是需要使用 `axios`（服务端还是需要配置 CORS）。\n\n### 小程序端\n#### 安装本体即可\n\n```bash\n$ npm i -S tua-api\n# OR\n$ yarn add tua-api\n```\n\n```js\nimport TuaApi from 'tua-api'\n```\n\n> 小程序还用不了 npm？[@tua-mp/service](https://tuateam.github.io/tua-mp/tua-mp-service/) 了解一下？\n\n## `tua-api` 能干什么？\n`tua-api` 能实现统一管理 api 配置（例如一般放在 `src/apis/` 下）。经过处理后，业务侧代码只需要这样写即可：\n\n```js\nimport { fooApi } from '@/apis/'\n\nfooApi\n    .bar({ a: '1', b: '2' }) // 发起请求，a、b 是请求参数\n    .then(console.log)       // 收到响应\n    .catch(console.error)    // 处理错误\n```\n\n不仅如此，还有一些其他功能：\n\n* 参数校验\n* 默认参数\n* 中间件（koa 风格）\n* ...\n\n```js\n// 甚至可以更进一步和 tua-storage 配合使用\nimport TuaStorage from 'tua-storage'\nimport { getSyncFnMapByApis } from 'tua-api'\n\n// 本地写好的各种接口配置\nimport * as apis from '@/apis'\n\nconst tuaStorage = new TuaStorage({\n    syncFnMap: getSyncFnMapByApis(apis),\n})\n\nconst fetchParam = {\n    key: fooApi.bar.key,\n    syncParams: { a: 'a', b: 'b' },\n\n    // 过期时间，默认值为实例化时的值，以秒为单位\n    expires: 10,\n\n    // 是否直接调用同步函数更新数据，默认为 false\n    // 适用于需要强制更新数据的场景，例如小程序中的下拉刷新\n    isForceUpdate: true,\n\n    // ...\n}\n\ntuaStorage\n    .load(fetchParam)\n    .then(console.log)\n    .catch(console.error)\n```\n\n## 怎么写 `api` 配置？\n拿以下 api 地址举例：\n\n* `https://example-base.com/foo/bar/something/create`\n* `https://example-base.com/foo/bar/something/modify`\n* `https://example-base.com/foo/bar/something/delete`\n\n### 地址结构划分\n以上地址，一般将其分为`3`部分：\n\n* host: `'https://example-base.com/'`\n* prefix: `'foo/bar/something'`\n* pathList: `[ 'create', 'modify', 'delete' ]`\n\n### 文件结构\n`api/` 一般是这样的文件结构：\n\n```\n.\n└── apis\n    ├── prefix-1.js\n    ├── prefix-2.js\n    ├── something.js // <-- 以上的 api 地址会放在这里，名字随意\n    └── index.js\n```\n\n### 基础配置内容\n```js\n// src/apis/something.js\n\nexport default {\n    // 请求的公用服务器地址\n    host: 'https://example-base.com/',\n\n    // 请求的中间路径\n    prefix: 'foo/bar/something',\n\n    // 接口地址数组\n    pathList: [\n        { path: 'create' },\n        { path: 'modify' },\n        { path: 'delete' },\n    ],\n}\n```\n\n[更多配置请点击这里查看](https://tuateam.github.io/tua-api/config/common.html)\n\n### 配置导出\n最后来看一下 `apis/index.js` 该怎么写：\n\n```js\nimport TuaApi from 'tua-api'\n\n// 初始化\nconst tuaApi = new TuaApi({ ... })\n\n// 使用中间件\ntuaApi\n    .use(async (ctx, next) => {\n        // 请求发起前\n        console.log('before: ', ctx)\n\n        await next()\n\n        // 响应返回后\n        console.log('after: ', ctx)\n    })\n    // 链式调用\n    .use(...)\n\nexport const fakeGet = tuaApi.getApi(require('./fake-get').default)\nexport const fakePost = tuaApi.getApi(require('./fake-post').default)\n```\n\n小程序端建议使用 [@tua-mp/cli](https://tuateam.github.io/tua-mp/tua-mp-cli/) 一键生成 api。\n\n```bash\n$ tuamp add api <api-name>\n```\n\n### 配置的构成\n在 `tua-api` 中配置分为四种：\n\n* [默认配置（调用 `new TuaApi({ ... })` 时传递的）](https://tuateam.github.io/tua-api/config/default.html)\n* [公共配置（和 `pathList` 同级的配置）](https://tuateam.github.io/tua-api/config/common.html)\n* [自身配置（`pathList` 数组中的对象上的配置）](https://tuateam.github.io/tua-api/config/self.html)\n* [运行配置（在实际调用接口时传递的配置）](https://tuateam.github.io/tua-api/config/runtime.html)\n\n其中优先级自然是:\n\n`默认配置 < 公共配置 < 自身配置 < 运行配置`\n\n<p align=\"center\">\n    <a href=\"https://tuateam.github.io/tua-api/config/\">👉更多配置点击这里👈</a>\n</p>\n","readmeFilename":"README.md","gitHead":"36addf5a1acd110e4bb4753858ad42b102589db2","bugs":{"url":"https://github.com/tuateam/tua-api/issues"},"_id":"tua-api@1.4.0-0","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"buptsteve","email":"yangzhenyu2016@gmail.com"},"dist":{"integrity":"sha512-3VtT8dhdHj2gfNBIDVytUhZ+7oEW6E+0sc1BKHgIHOWSv5cCkYel7ghOZV0rbqPzfGZ++Xw75OlDpBmmXjX+Yg==","shasum":"ef2d001bd6e67d2252cb5a8c3d01b4243899331d","tarball":"https://registry.npmjs.org/tua-api/-/tua-api-1.4.0-0.tgz","fileCount":31,"unpackedSize":173010,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdibRUCRA9TVsSAnZWagAAJWcP/RlGQ3t1H5nQF3Mlmt3/\nbU+w/MiS0seeGMnyD01S4zPho/hIGaoyp8ekayTWcy/QXb0dqY4ILGBhJUGW\nI3hz0g1kyng292m9oB3aRyJzUwNIIvdg3lWqlBRcdAvXtrn+9J3t1tobuFjF\nhm/qj/zi0Yzub4hkHSYzz6j0XwerhDwbjy+drjl/1a+LvkFCIcuff5gAnUVy\n2mi8CgGWWyTnHifV1AIhgxmDD9OdovRQmjUXZ45/aE6EyunIy0uRVkplC/20\niYU9872zw8Ialbqv1PMLm2r15yo+XL5t5CCmGyk+9OOicH82Q9eUEu9p+a7k\nhIWcArQO3h2mI9uT6uDqILZqWYld2JvSwp9QLcnJ0+k8y8ua33E8IDX5FPnl\ntobZxARX3qkmSrCQbsq+OEUm3ShI4VrQ/tma2y2bXqPw6QTRP3gLpNhcEjzw\nW6HqCBkoFFF9nApOkZPfQ8XmOmG6asRRE7XMCjgdnu71imiPYvoLCu/vLstL\nhbl9bGpqX+V+zjKf5oR4HhV9LKYfQ2vxXhp3VhtuQiWjZi5bgAz8yC+STlTC\nO9U7CxFchOGkqrpkL5qeg523yBHIS1Y/cMWROLFHdDaMjU+UEAchFgYalpze\nfuD3UvQGGMXL92UmuvZoXrUM3XKJVIjt1ANoQCGFd0gKllFn4nnYPDCnYh+p\nRRb6\r\n=rxMq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDHgEXGMMRvIFOQKL7n4BDWsnc//hj3KixA6wY4OyGq8wIgH9TsrgGeonmKE7RMMQHxrdO3zJYSvqwkAJlkWLaqR58="}]},"maintainers":[{"email":"yangzhenyu2016@gmail.com","name":"buptsteve"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tua-api_1.4.0-0_1569305684072_0.057351364526519344"},"_hasShrinkwrap":false},"1.4.0":{"name":"tua-api","version":"1.4.0","description":"🏗 A common tool helps converting configs to api functions","main":"dist/TuaApi.cjs.js","module":"dist/TuaApi.esm.js","unpkg":"dist/TuaApi.umd.js","jsdelivr":"dist/TuaApi.umd.js","types":"src/index.d.ts","scripts":{"cov":"open coverage/lcov-report/index.html","docs":"vuepress dev docs","docs:build":"vuepress build docs","lint":"eslint --fix . docs/.vuepress/ --ignore-path .gitignore","test":"cross-env NODE_ENV=test jest","test:tdd":"cross-env NODE_ENV=test jest --watch","prebuild":"rimraf dist/* & npm run test","build":"cross-env NODE_ENV=production rollup -c","deploy":"npm run docs:build && gh-pages -m \"[ci skip]\" -d docs/.vuepress/dist","next:pm":"npm --no-git-tag-version version preminor","next:pr":"npm --no-git-tag-version version prerelease","pub":"npm run build && npm publish","pub:n":"npm run build && npm publish --tag next"},"husky":{"hooks":{"pre-push":"npm test","pre-commit":"lint-staged","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"lint-staged":{"{src,test}/**/*.js":["eslint --fix","git add"]},"jest":{"bail":true,"clearMocks":true,"transform":{"^.+\\.js$":"babel-jest"},"moduleNameMapper":{"@/(.*)$":"<rootDir>/src/$1","@examples/(.*)$":"<rootDir>/examples/$1"},"collectCoverage":true,"collectCoverageFrom":["src/**","!src/index.d.ts"]},"eslintIgnore":["dist/*","!.eslintrc.js","package.json"],"dependencies":{"axios":"^0.19.0","fetch-jsonp":"^1.1.3","koa-compose":"^4.1.0"},"devDependencies":{"@babel/core":"^7.6.2","@babel/plugin-external-helpers":"^7.2.0","@babel/plugin-proposal-decorators":"^7.6.0","@babel/plugin-proposal-object-rest-spread":"^7.5.5","@babel/preset-env":"^7.6.0","@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@types/jest":"^24.0.18","axios-mock-adapter":"^1.17.0","babel-core":"^7.0.0-bridge.0","babel-eslint":"^10.0.3","babel-jest":"^24.9.0","codecov":"^3.5.0","cross-env":"^5.2.1","eslint":"^6.3.0","eslint-config-standard":"^14.1.0","eslint-plugin-import":"^2.18.2","eslint-plugin-node":"^10.0.0","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","gh-pages":"^2.1.1","husky":"^3.0.5","jest":"^24.9.0","lint-staged":"^9.2.5","rimraf":"^3.0.0","rollup":"^1.21.2","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-replace":"^2.2.0","rollup-plugin-uglify":"^6.0.3","typescript":"^3.6.3","vuepress":"^1.0.4"},"repository":{"type":"git","url":"git+https://github.com/tuateam/tua-api.git"},"homepage":"https://tuateam.github.io/tua-api/","author":{"name":"StEve Young"},"license":"MIT","gitHead":"6a22cbb5c0d790ef700f0250359076c19cf5158f","bugs":{"url":"https://github.com/tuateam/tua-api/issues"},"_id":"tua-api@1.4.0","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"buptsteve","email":"yangzhenyu2016@gmail.com"},"dist":{"integrity":"sha512-ULCIsaQMKNiQuNld8Tg0i5ZW7I03TVNL7IiITf7VjF+cKqgEe2cIInmrOL1Y1WzWcNz/rUK29ndd5bpAW5GsWw==","shasum":"2ce583b57b4bf05cbb5eda41792cac795cf60944","tarball":"https://registry.npmjs.org/tua-api/-/tua-api-1.4.0.tgz","fileCount":31,"unpackedSize":172790,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdi2gnCRA9TVsSAnZWagAACtMP+gOZnEfSEqs03mGDgYT5\nuG3u7uYGhtwA1wtBeXN0jzfmaO/51njwHDOgV18vn6qVrMXGRN4q2YK8OnJJ\nsgCDL4Vp1cMpeIno4CO6SxLzqXaKoTTc1vg3NUCHgT4ZZDSpkyB66u82Wy+d\nbUj1P10KeNUWRQ3nFk1VEMgg36KdI949nHe1g7LWDvCesdQ9kQwHVpP21WMD\nZpsamSwelveU5FgI1zpc5c4w31hWKbZQ+c5vwxhWywgqhSiVOQG23T5amojA\nVJm0DzRf9mpPQLRzXfioQtnVBZlnN+LvOyATNpW+X2TrPYHjIWNHIXRkCZ3f\nREDlHH9eRF7InNY9IVoLfvh4EStZSRqyonmpKKPciI8NyZmXm6ESAa+qL7Cv\n6JS1jwHG1E1vS9OuKfcm2styIN4Ahpp3BOQ9OSwErxctHVD5KGud43dCeHTm\nxL1Wwkt6N5WJROdBZG/p67UDNqbUyduMnHdfdrs58GHBDFcWtKekcpxfDtOW\nLiov28VdskSZSuKLjZGnkWj9gsmoRVCv/DmsmdoBUe+RawWhO+btOrhEHHGT\nNOL59dCOJSVED3JmE68NIneldIF/IeJ1qZU45srmn1/faGEZGdhlqpaUWsFR\n8VA5Q6TYhBsRHUoM0mWaCO89s7kixi0pCvE0KYoNai7j4iluF7q1sFNEX4V4\no8/8\r\n=mHHk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCwIThX6woq9Kor0WFAbURHEt7MzKpCa6u7JLfradBmqAIgdH9CAt8bDq4SUw1lGhx8qvWzdLobfWwdabgTl+JPlOE="}]},"maintainers":[{"email":"yangzhenyu2016@gmail.com","name":"buptsteve"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tua-api_1.4.0_1569417255056_0.591384366984844"},"_hasShrinkwrap":false},"1.4.1-0":{"name":"tua-api","version":"1.4.1-0","description":"🏗 A common tool helps converting configs to api functions","main":"dist/TuaApi.cjs.js","module":"dist/TuaApi.esm.js","unpkg":"dist/TuaApi.umd.js","jsdelivr":"dist/TuaApi.umd.js","types":"src/index.d.ts","scripts":{"cov":"open coverage/lcov-report/index.html","docs":"vuepress dev docs","docs:build":"vuepress build docs","lint":"eslint --fix . docs/.vuepress/ --ignore-path .gitignore","test":"cross-env NODE_ENV=test jest","test:tdd":"cross-env NODE_ENV=test jest --watch","prebuild":"rimraf dist/* & npm run test","build":"cross-env NODE_ENV=production rollup -c","deploy":"npm run docs:build && gh-pages -m \"[ci skip]\" -d docs/.vuepress/dist","next:pm":"npm --no-git-tag-version version preminor","next:pr":"npm --no-git-tag-version version prerelease","pub":"npm run build && npm publish","pub:n":"npm run build && npm publish --tag next"},"husky":{"hooks":{"pre-push":"npm test","pre-commit":"lint-staged","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"lint-staged":{"{src,test}/**/*.js":["eslint --fix","git add"]},"eslintIgnore":["dist/*","!.eslintrc.js","package.json"],"dependencies":{"axios":"^0.19.0","fetch-jsonp":"^1.1.3","koa-compose":"^4.1.0"},"devDependencies":{"@babel/core":"^7.6.2","@babel/plugin-external-helpers":"^7.2.0","@babel/plugin-proposal-decorators":"^7.6.0","@babel/plugin-proposal-object-rest-spread":"^7.5.5","@babel/preset-env":"^7.6.0","@commitlint/cli":"^8.1.0","@commitlint/config-conventional":"^8.1.0","@types/jest":"^24.0.18","axios-mock-adapter":"^1.17.0","babel-core":"^7.0.0-bridge.0","babel-eslint":"^10.0.3","babel-jest":"^24.9.0","codecov":"^3.5.0","cross-env":"^5.2.1","eslint":"^6.3.0","eslint-config-standard":"^14.1.0","eslint-plugin-import":"^2.18.2","eslint-plugin-node":"^10.0.0","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","gh-pages":"^2.1.1","husky":"^3.0.5","jest":"^24.9.0","lint-staged":"^9.2.5","rimraf":"^3.0.0","rollup":"^1.21.2","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-replace":"^2.2.0","rollup-plugin-uglify":"^6.0.3","typescript":"^3.6.3","vuepress":"^1.0.4"},"repository":{"type":"git","url":"git+https://github.com/tuateam/tua-api.git"},"homepage":"https://tuateam.github.io/tua-api/","author":{"name":"StEve Young"},"license":"MIT","readme":"<h1 align=\"center\">tua-api</h1>\n\n<h4 align=\"center\">让我们优雅地调用 api~</h4>\n\n<p align=\"center\">\n    <a href=\"https://tuateam.github.io/tua-api/\">👉完整文档地址点这里👈</a>\n</p>\n\n<p align=\"center\">\n    <a href=\"https://circleci.com/gh/tuateam/tua-api/tree/master\" target=\"_blank\">\n        <img src=\"https://img.shields.io/circleci/project/github/tuateam/tua-api/master.svg\" alt=\"Build Status\">\n    </a>\n    <a href=\"https://codecov.io/github/tuateam/tua-api?branch=master\" target=\"_blank\">\n        <img src=\"https://img.shields.io/codecov/c/github/tuateam/tua-api/master.svg\" alt=\"Coverage Status\">\n    </a>\n    <a href=\"https://david-dm.org/tuateam/tua-api\" target=\"_blank\">\n        <img src=\"https://david-dm.org/tuateam/tua-api.svg\" alt=\"dependencies\">\n    </a>\n    <a href=\"https://www.npmjs.com/package/tua-api\" target=\"_blank\">\n        <img src=\"https://badgen.net/npm/dm/tua-api\" alt=\"Downloads per month\">\n        <img src=\"https://img.shields.io/npm/v/tua-api.svg\" alt=\"Version\">\n        <img src=\"https://img.shields.io/npm/l/tua-api.svg\" alt=\"License\">\n    </a>\n</p>\n\n## `tua-api` 是什么？\n`tua-api` 是一个针对发起 api 请求提供辅助功能的库。采用 ES6+ 语法，并采用 jest 进行了完整的单元测试。\n\n目前已适配：\n\n* web 端：axios, fetch-jsonp\n* Node 端：axios\n* 小程序端：wx.request\n\n<a href=\"https://codesandbox.io/s/2o24xn0750\" target=\"_blank\">\n    <img alt=\"Edit tua-api github example\" src=\"https://codesandbox.io/static/img/play-codesandbox.svg\">\n</a>\n\n## 安装\n### web 端\n#### 安装本体\n\n```bash\n$ npm i -S tua-api\n# OR\n$ yarn add tua-api\n```\n\n然后直接导入即可\n\n```js\nimport TuaApi from 'tua-api'\n```\n\n#### 配置武器\n配置“武器”分为两种情况:\n\n* [已配置 CORS 跨域请求头](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS)，或是没有跨域需求时，无需任何操作（默认采用的就是 `axios`）。\n\n* 若是用不了 CORS，那么就需要设置 `reqType: 'jsonp'` 借助 jsonp 实现跨域\n\n但是 jsonp 只支持使用 get 的方式请求，所以如果需要发送 post 或其他方式的请求，还是需要使用 `axios`（服务端还是需要配置 CORS）。\n\n### 小程序端\n#### 安装本体即可\n\n```bash\n$ npm i -S tua-api\n# OR\n$ yarn add tua-api\n```\n\n```js\nimport TuaApi from 'tua-api'\n```\n\n> 小程序还用不了 npm？[@tua-mp/service](https://tuateam.github.io/tua-mp/tua-mp-service/) 了解一下？\n\n## `tua-api` 能干什么？\n`tua-api` 能实现统一管理 api 配置（例如一般放在 `src/apis/` 下）。经过处理后，业务侧代码只需要这样写即可：\n\n```js\nimport { fooApi } from '@/apis/'\n\nfooApi\n    .bar({ a: '1', b: '2' }) // 发起请求，a、b 是请求参数\n    .then(console.log)       // 收到响应\n    .catch(console.error)    // 处理错误\n```\n\n不仅如此，还有一些其他功能：\n\n* 参数校验\n* 默认参数\n* 中间件（koa 风格）\n* ...\n\n```js\n// 甚至可以更进一步和 tua-storage 配合使用\nimport TuaStorage from 'tua-storage'\nimport { getSyncFnMapByApis } from 'tua-api'\n\n// 本地写好的各种接口配置\nimport * as apis from '@/apis'\n\nconst tuaStorage = new TuaStorage({\n    syncFnMap: getSyncFnMapByApis(apis),\n})\n\nconst fetchParam = {\n    key: fooApi.bar.key,\n    syncParams: { a: 'a', b: 'b' },\n\n    // 过期时间，默认值为实例化时的值，以秒为单位\n    expires: 10,\n\n    // 是否直接调用同步函数更新数据，默认为 false\n    // 适用于需要强制更新数据的场景，例如小程序中的下拉刷新\n    isForceUpdate: true,\n\n    // ...\n}\n\ntuaStorage\n    .load(fetchParam)\n    .then(console.log)\n    .catch(console.error)\n```\n\n## 怎么写 `api` 配置？\n拿以下 api 地址举例：\n\n* `https://example-base.com/foo/bar/something/create`\n* `https://example-base.com/foo/bar/something/modify`\n* `https://example-base.com/foo/bar/something/delete`\n\n### 地址结构划分\n以上地址，一般将其分为`3`部分：\n\n* baseUrl: `'https://example-base.com/foo/bar'`\n* prefix: `'something'`\n* pathList: `[ 'create', 'modify', 'delete' ]`\n\n### 文件结构\n`api/` 一般是这样的文件结构：\n\n```\n.\n└── apis\n    ├── prefix-1.js\n    ├── prefix-2.js\n    ├── something.js // <-- 以上的 api 地址会放在这里，名字随意\n    └── index.js\n```\n\n### 基础配置内容\n```js\n// src/apis/something.js\n\nexport default {\n    // 请求的公用服务器地址\n    baseUrl: 'https://example-base.com/',\n\n    // 请求的中间路径\n    prefix: 'foo/bar/something',\n\n    // 接口地址数组\n    pathList: [\n        { path: 'create' },\n        { path: 'modify' },\n        { path: 'delete' },\n    ],\n}\n```\n\n[更多配置请点击这里查看](https://tuateam.github.io/tua-api/config/common.html)\n\n### 配置导出\n最后来看一下 `apis/index.js` 该怎么写：\n\n```js\nimport TuaApi from 'tua-api'\n\n// 初始化\nconst tuaApi = new TuaApi({ ... })\n\n// 使用中间件\ntuaApi\n    .use(async (ctx, next) => {\n        // 请求发起前\n        console.log('before: ', ctx)\n\n        await next()\n\n        // 响应返回后\n        console.log('after: ', ctx)\n    })\n    // 链式调用\n    .use(...)\n\nexport const fakeGet = tuaApi.getApi(require('./fake-get').default)\nexport const fakePost = tuaApi.getApi(require('./fake-post').default)\n```\n\n小程序端建议使用 [@tua-mp/cli](https://tuateam.github.io/tua-mp/tua-mp-cli/) 一键生成 api。\n\n```bash\n$ tuamp add api <api-name>\n```\n\n### 配置的构成\n在 `tua-api` 中配置分为四种：\n\n* [默认配置（调用 `new TuaApi({ ... })` 时传递的）](https://tuateam.github.io/tua-api/config/default.html)\n* [公共配置（和 `pathList` 同级的配置）](https://tuateam.github.io/tua-api/config/common.html)\n* [自身配置（`pathList` 数组中的对象上的配置）](https://tuateam.github.io/tua-api/config/self.html)\n* [运行配置（在实际调用接口时传递的配置）](https://tuateam.github.io/tua-api/config/runtime.html)\n\n其中优先级自然是:\n\n`默认配置 < 公共配置 < 自身配置 < 运行配置`\n\n<p align=\"center\">\n    <a href=\"https://tuateam.github.io/tua-api/config/\">👉更多配置点击这里👈</a>\n</p>\n","readmeFilename":"README.md","gitHead":"4752ebbe8a761fef1e98bd68c6bea3a42aea2c9e","bugs":{"url":"https://github.com/tuateam/tua-api/issues"},"_id":"tua-api@1.4.1-0","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"buptsteve","email":"yangzhenyu2016@gmail.com"},"dist":{"integrity":"sha512-AMLaxgfpMB9B9NAUlydTvITfEqMsbjkIYm8th7rONqPXcPQvRC8HEWz2iUYRYK1f4qx5i5CrwODX0xkuJZk05w==","shasum":"9560655dddb64b57d785c67b8067045c5801aa6c","tarball":"https://registry.npmjs.org/tua-api/-/tua-api-1.4.1-0.tgz","fileCount":32,"unpackedSize":176430,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdnUwvCRA9TVsSAnZWagAAdiQQAKFRBDysV/Tko07eL44k\nssm+AUuwzcOMR0m92WwZFA08gswJVMWUh2rQr7naazHAgqEZISNyDAk4CoiX\nXN80/tnCALKO+nzRgp4hPALYT6kuOhQ6d6fS9QttYPDq//wM71vmhxXXJxQR\nlGEF4o+K7so8sGyznlQRsRxu+ePZJP1wleYO+yYskbbjozQwCEjW3/8UxA0P\ncx4Cgqralg+megGkJzd+Bb/W6Cz2VpiirPZOOoyVNKD++UJkaJnVNB/P5XsC\nwc7uJCYajRxM6XwCPcDC5tgKpbUVT3q5+n6IibHXd9X6qCmpV93JFyBz+NEd\noyAvkq9NQg4wE+GDT+CfDvAHlLrC4neS304AoXo6y6+h/lWfa9JYCvyJ0IFS\nPTimWBW0L6HPAWW/IEC8cV8X4bey4F5eS7hY6vpkro1olisFxcamPToyJjRR\n1UafAZQQWFZ1VCmeliswFxrcY9aRxUijhV2mFbYxVYVjyxGiCw0qa40S97Az\n7OaO+O5Y2+3KyEGSvyRsElCnYI3lbE4yUPiTONZWsOk3qm4WP7ARs9zi7HkK\nmKCFqXZY6Fp2MWkSFVZsfVTaFoHM/YHxpp9zkwwR1UkQRKkI39SbaMmq2p92\nHJCENgWKjwwM6QnMjjDMbFisRf/gPTbt3wvzOPDMqIkygfSAROzRw3SneWAy\nSkiU\r\n=zRkg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCmo0r5HE9ePcu8yKt2vvufxRENJsJYCjChUTNMGk/9qwIhAOVU2DIprr+1rea9PpRy7PNW6H+0bdwAVJb5C6kyYgET"}]},"maintainers":[{"email":"yangzhenyu2016@gmail.com","name":"buptsteve"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tua-api_1.4.1-0_1570589742990_0.9170482680334393"},"_hasShrinkwrap":false},"1.4.1-1":{"name":"tua-api","version":"1.4.1-1","description":"🏗 A common tool helps converting configs to api functions","main":"dist/TuaApi.cjs.js","module":"dist/TuaApi.esm.js","unpkg":"dist/TuaApi.umd.js","jsdelivr":"dist/TuaApi.umd.js","types":"src/index.d.ts","scripts":{"cov":"open coverage/lcov-report/index.html","docs":"vuepress dev docs","docs:build":"vuepress build docs","lint":"eslint --fix . docs/.vuepress/ --ignore-path .gitignore","test":"cross-env NODE_ENV=test jest","test:tdd":"cross-env NODE_ENV=test jest --watch","prebuild":"rimraf dist/* & npm run test","build":"cross-env NODE_ENV=production rollup -c","deploy":"npm run docs:build && gh-pages -m \"[ci skip]\" -d docs/.vuepress/dist","next:pm":"npm --no-git-tag-version version preminor","next:pr":"npm --no-git-tag-version version prerelease","pub":"npm run build && npm publish","pub:n":"npm run build && npm publish --tag next"},"husky":{"hooks":{"pre-push":"npm test","pre-commit":"lint-staged","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"lint-staged":{"{src,test}/**/*.js":["eslint --fix","git add"]},"eslintIgnore":["dist/*","!.eslintrc.js","package.json"],"dependencies":{"axios":"^0.19.0","fetch-jsonp":"^1.1.3","koa-compose":"^4.1.0"},"devDependencies":{"@babel/core":"^7.6.4","@babel/plugin-external-helpers":"^7.2.0","@babel/plugin-proposal-decorators":"^7.6.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/preset-env":"^7.6.3","@commitlint/cli":"^8.2.0","@commitlint/config-conventional":"^8.2.0","@types/jest":"^24.0.18","all-contributors-cli":"^6.9.1","axios-mock-adapter":"^1.17.0","babel-core":"^7.0.0-bridge.0","babel-eslint":"^10.0.3","babel-jest":"^24.9.0","codecov":"^3.6.1","cross-env":"^6.0.3","eslint":"^6.5.1","eslint-config-standard":"^14.1.0","eslint-plugin-import":"^2.18.2","eslint-plugin-node":"^10.0.0","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","gh-pages":"^2.1.1","husky":"^3.0.8","jest":"^24.9.0","lint-staged":"^9.4.2","rimraf":"^3.0.0","rollup":"^1.23.1","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-replace":"^2.2.0","rollup-plugin-uglify":"^6.0.3","typescript":"^3.6.4","vuepress":"^1.1.0"},"repository":{"type":"git","url":"git+https://github.com/tuateam/tua-api.git"},"homepage":"https://tuateam.github.io/tua-api/","author":{"name":"StEve Young"},"license":"MIT","readme":"<h1 align=\"center\">tua-api</h1>\n\n<h4 align=\"center\">让我们优雅地调用 api~</h4>\n\n<p align=\"center\">\n    <a href=\"https://tuateam.github.io/tua-api/\">👉完整文档地址点这里👈</a>\n</p>\n\n<p align=\"center\">\n    <a href=\"https://circleci.com/gh/tuateam/tua-api/tree/master\" target=\"_blank\">\n        <img src=\"https://img.shields.io/circleci/project/github/tuateam/tua-api/master.svg\" alt=\"Build Status\">\n    </a>\n    <a href=\"https://codecov.io/github/tuateam/tua-api?branch=master\" target=\"_blank\">\n        <img src=\"https://img.shields.io/codecov/c/github/tuateam/tua-api/master.svg\" alt=\"Coverage Status\">\n    </a>\n    <a href=\"https://david-dm.org/tuateam/tua-api\" target=\"_blank\">\n        <img src=\"https://david-dm.org/tuateam/tua-api.svg\" alt=\"dependencies\">\n    </a>\n    <a href=\"https://www.npmjs.com/package/tua-api\" target=\"_blank\">\n        <img src=\"https://badgen.net/npm/dm/tua-api\" alt=\"Downloads per month\">\n        <img src=\"https://img.shields.io/npm/v/tua-api.svg\" alt=\"Version\">\n        <img src=\"https://img.shields.io/npm/v/tua-api/next.svg\" alt=\"Next Version\">\n        <img src=\"https://img.shields.io/npm/l/tua-api.svg\" alt=\"License\">\n    </a>\n</p>\n\n## `tua-api` 是什么？\n`tua-api` 是一个针对发起 api 请求提供辅助功能的库。采用 ES6+ 语法，并采用 jest 进行了完整的单元测试。\n\n目前已适配：\n\n* web 端：axios, fetch-jsonp\n* Node 端：axios\n* 小程序端：wx.request\n\n<a href=\"https://codesandbox.io/s/2o24xn0750\" target=\"_blank\">\n    <img alt=\"Edit tua-api github example\" src=\"https://codesandbox.io/static/img/play-codesandbox.svg\">\n</a>\n\n## 安装\n### web 端\n#### 安装本体\n\n```bash\n$ npm i -S tua-api\n# OR\n$ yarn add tua-api\n```\n\n然后直接导入即可\n\n```js\nimport TuaApi from 'tua-api'\n```\n\n#### 配置武器\n配置“武器”分为两种情况:\n\n* [已配置 CORS 跨域请求头](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS)，或是没有跨域需求时，无需任何操作（默认采用的就是 `axios`）。\n\n* 若是用不了 CORS，那么就需要设置 `reqType: 'jsonp'` 借助 jsonp 实现跨域\n\n但是 jsonp 只支持使用 get 的方式请求，所以如果需要发送 post 或其他方式的请求，还是需要使用 `axios`（服务端还是需要配置 CORS）。\n\n### 小程序端\n#### 安装本体即可\n\n```bash\n$ npm i -S tua-api\n# OR\n$ yarn add tua-api\n```\n\n```js\nimport TuaApi from 'tua-api'\n```\n\n> 小程序还用不了 npm？[@tua-mp/service](https://tuateam.github.io/tua-mp/tua-mp-service/) 了解一下？\n\n## `tua-api` 能干什么？\n`tua-api` 能实现统一管理 api 配置（例如一般放在 `src/apis/` 下）。经过处理后，业务侧代码只需要这样写即可：\n\n```js\nimport { fooApi } from '@/apis/'\n\nfooApi\n    .bar({ a: '1', b: '2' }) // 发起请求，a、b 是请求参数\n    .then(console.log)       // 收到响应\n    .catch(console.error)    // 处理错误\n```\n\n不仅如此，还有一些其他功能：\n\n* 参数校验\n* 默认参数\n* 中间件（koa 风格）\n* ...\n\n```js\n// 甚至可以更进一步和 tua-storage 配合使用\nimport TuaStorage from 'tua-storage'\nimport { getSyncFnMapByApis } from 'tua-api'\n\n// 本地写好的各种接口配置\nimport * as apis from '@/apis'\n\nconst tuaStorage = new TuaStorage({\n    syncFnMap: getSyncFnMapByApis(apis),\n})\n\nconst fetchParam = {\n    key: fooApi.bar.key,\n    syncParams: { a: 'a', b: 'b' },\n\n    // 过期时间，默认值为实例化时的值，以秒为单位\n    expires: 10,\n\n    // 是否直接调用同步函数更新数据，默认为 false\n    // 适用于需要强制更新数据的场景，例如小程序中的下拉刷新\n    isForceUpdate: true,\n\n    // ...\n}\n\ntuaStorage\n    .load(fetchParam)\n    .then(console.log)\n    .catch(console.error)\n```\n\n## 怎么写 `api` 配置？\n拿以下 api 地址举例：\n\n* `https://example-base.com/foo/bar/something/create`\n* `https://example-base.com/foo/bar/something/modify`\n* `https://example-base.com/foo/bar/something/delete`\n\n### 地址结构划分\n以上地址，一般将其分为`3`部分：\n\n* baseUrl: `'https://example-base.com/foo/bar'`\n* prefix: `'something'`\n* pathList: `[ 'create', 'modify', 'delete' ]`\n\n### 文件结构\n`api/` 一般是这样的文件结构：\n\n```\n.\n└── apis\n    ├── prefix-1.js\n    ├── prefix-2.js\n    ├── something.js // <-- 以上的 api 地址会放在这里，名字随意\n    └── index.js\n```\n\n### 基础配置内容\n```js\n// src/apis/something.js\n\nexport default {\n    // 接口基础地址\n    baseUrl: 'https://example-base.com/foo/bar',\n\n    // 接口的中间路径\n    prefix: 'something',\n\n    // 接口地址数组\n    pathList: [\n        { path: 'create' },\n        { path: 'modify' },\n        { path: 'delete' },\n    ],\n}\n```\n\n[更多配置请点击这里查看](https://tuateam.github.io/tua-api/config/common.html)\n\n### 配置导出\n最后来看一下 `apis/index.js` 该怎么写：\n\n```js\nimport TuaApi from 'tua-api'\n\n// 初始化\nconst tuaApi = new TuaApi({ ... })\n\n// 使用中间件\ntuaApi\n    .use(async (ctx, next) => {\n        // 请求发起前\n        console.log('before: ', ctx)\n\n        await next()\n\n        // 响应返回后\n        console.log('after: ', ctx)\n    })\n    // 链式调用\n    .use(...)\n\nexport const fakeGet = tuaApi.getApi(require('./fake-get').default)\nexport const fakePost = tuaApi.getApi(require('./fake-post').default)\n```\n\n小程序端建议使用 [@tua-mp/cli](https://tuateam.github.io/tua-mp/tua-mp-cli/) 一键生成 api。\n\n```bash\n$ tuamp add api <api-name>\n```\n\n### 配置的构成\n在 `tua-api` 中配置分为四种：\n\n* [默认配置（调用 `new TuaApi({ ... })` 时传递的）](https://tuateam.github.io/tua-api/config/default.html)\n* [公共配置（和 `pathList` 同级的配置）](https://tuateam.github.io/tua-api/config/common.html)\n* [自身配置（`pathList` 数组中的对象上的配置）](https://tuateam.github.io/tua-api/config/self.html)\n* [运行配置（在实际调用接口时传递的配置）](https://tuateam.github.io/tua-api/config/runtime.html)\n\n其中优先级自然是:\n\n`默认配置 < 公共配置 < 自身配置 < 运行配置`\n\n<p align=\"center\">\n    <a href=\"https://tuateam.github.io/tua-api/config/\">👉更多配置点击这里👈</a>\n</p>\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tr>\n    <td align=\"center\"><a href=\"https://buptsteve.github.io\"><img src=\"https://avatars2.githubusercontent.com/u/11501493?v=4\" width=\"100px;\" alt=\"StEve Young\"/><br /><sub><b>StEve Young</b></sub></a><br /><a href=\"https://github.com/tuateam/tua-api/commits?author=BuptStEve\" title=\"Code\">💻</a> <a href=\"https://github.com/tuateam/tua-api/commits?author=BuptStEve\" title=\"Documentation\">📖</a> <a href=\"#infra-BuptStEve\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a></td>\n    <td align=\"center\"><a href=\"https://github.com/evinma\"><img src=\"https://avatars2.githubusercontent.com/u/16096567?v=4\" width=\"100px;\" alt=\"evinma\"/><br /><sub><b>evinma</b></sub></a><br /><a href=\"https://github.com/tuateam/tua-api/commits?author=evinma\" title=\"Code\">💻</a></td>\n  </tr>\n</table>\n\n<!-- markdownlint-enable -->\n<!-- prettier-ignore-end -->\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","readmeFilename":"README.md","gitHead":"d6d0b18fe9648e83f1ca9b5c51fe1d579f38db05","bugs":{"url":"https://github.com/tuateam/tua-api/issues"},"_id":"tua-api@1.4.1-1","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"buptsteve","email":"yangzhenyu2016@gmail.com"},"dist":{"integrity":"sha512-eJ1M/wErUkTV3PyyDaF9wXzPFpGvqrPXnJxjuSaty2vU3hph/f4tbRlHiSa8qcFY2KY6rUgB/pOcO+QA8K421Q==","shasum":"a0716780d0c8cd44f7c98fa77db994de1e76a9b4","tarball":"https://registry.npmjs.org/tua-api/-/tua-api-1.4.1-1.tgz","fileCount":32,"unpackedSize":177177,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdoIovCRA9TVsSAnZWagAAasEP/0/vM1XVkZRNc3zYmzpO\noOpa8yJuPTVS4EPPlwO4k67o9y8Q7NNPbUrPfeZw/pABmAXik/or8mELDDls\nQ4enPIQfDrwTiCgeHXY2dcZSJxHRgQESLCpEJ8R9bYREYhI4hpKbxQf124+Q\nqND8maAaxrP0nVpPL9V2N7DkybJ02Vlfjv2kuhFOccrMU/gzUUuhdyErtFdM\nA7/CK6XO4gtdWlzEX0Jc79AiX48aXXfNA+pBHdlNPgDmipUPY8nVQ13PWIw+\n8jQnPRD3GpLia2ETtNki4JcjxQrMk+CCS0BaK0byD7pG+qFKLeX3kr4Rd/pC\nV6uxC0x7xzVdbTmsgMiItE7oBKzWOKRMUnqmSSdqPd0oNxU6WCEkoulj9kFk\n/aJlrSly+84pA9NixG4b6rZYWb8cl5aDPAaArIQliWrzQlX7vQdf84mWPUh2\n46LgsUas1DMI+atyxfiTnj0umJX85OvPBo2lhgJiLyKIjwYcZaJBogeGHZUL\nNc5pN+t+Mlyahe1rNXi1sRxbKArRE2pXfjQzk832eU5KPvDsY8g95VIhrWkG\n8DJi1hJ25qwyubdxRP4cq9XmWLxAswqzuvuATS5iCHPx5b4WJp62/HhwHU44\nhcqizYoU25RbW0bEqxceL7nK5dTBIViEHZZuTfZPu5zSNTnyxK3JlAipIQaj\nngjw\r\n=qesG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDaQOw+VfTR1DjCfoZ1foOT0irq3T2+uTTfqbFVMheuMAIgbYWPqWqqYSZmvBdykE7PsN03FvahLl4QoczL5SqVRNY="}]},"maintainers":[{"email":"yangzhenyu2016@gmail.com","name":"buptsteve"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tua-api_1.4.1-1_1570802223130_0.25156444384679433"},"_hasShrinkwrap":false},"1.4.1-2":{"name":"tua-api","version":"1.4.1-2","description":"🏗 A common tool helps converting configs to api functions","main":"dist/TuaApi.cjs.js","module":"dist/TuaApi.esm.js","unpkg":"dist/TuaApi.umd.js","jsdelivr":"dist/TuaApi.umd.js","types":"src/index.d.ts","scripts":{"cov":"open coverage/lcov-report/index.html","docs":"vuepress dev docs","docs:build":"vuepress build docs","lint":"eslint --fix . docs/.vuepress/ --ignore-path .gitignore","test":"cross-env NODE_ENV=test jest","test:tdd":"cross-env NODE_ENV=test jest --watch","prebuild":"rimraf dist/* & npm run test","build":"cross-env NODE_ENV=production rollup -c","deploy":"npm run docs:build && gh-pages -m \"[ci skip]\" -d docs/.vuepress/dist","next:pm":"npm --no-git-tag-version version preminor","next:pr":"npm --no-git-tag-version version prerelease","pub":"npm run build && npm publish","pub:n":"npm run build && npm publish --tag next"},"husky":{"hooks":{"pre-push":"npm test","pre-commit":"lint-staged","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"lint-staged":{"{src,test}/**/*.js":["eslint --fix","git add"]},"eslintIgnore":["dist/*","!.eslintrc.js","package.json"],"dependencies":{"axios":"^0.19.0","fetch-jsonp":"^1.1.3","koa-compose":"^4.1.0"},"devDependencies":{"@babel/core":"^7.6.4","@babel/plugin-external-helpers":"^7.2.0","@babel/plugin-proposal-decorators":"^7.6.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/preset-env":"^7.6.3","@commitlint/cli":"^8.2.0","@commitlint/config-conventional":"^8.2.0","@types/jest":"^24.0.18","all-contributors-cli":"^6.9.1","axios-mock-adapter":"^1.17.0","babel-core":"^7.0.0-bridge.0","babel-eslint":"^10.0.3","babel-jest":"^24.9.0","codecov":"^3.6.1","cross-env":"^6.0.3","eslint":"^6.5.1","eslint-config-standard":"^14.1.0","eslint-plugin-import":"^2.18.2","eslint-plugin-node":"^10.0.0","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","gh-pages":"^2.1.1","husky":"^3.0.8","jest":"^24.9.0","lint-staged":"^9.4.2","rimraf":"^3.0.0","rollup":"^1.23.1","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-replace":"^2.2.0","rollup-plugin-uglify":"^6.0.3","typescript":"^3.6.4","vuepress":"^1.1.0"},"repository":{"type":"git","url":"git+https://github.com/tuateam/tua-api.git"},"homepage":"https://tuateam.github.io/tua-api/","author":{"name":"StEve Young"},"license":"MIT","readme":"<h1 align=\"center\">tua-api</h1>\n\n<h4 align=\"center\">让我们优雅地调用 api~</h4>\n\n<p align=\"center\">\n    <a href=\"https://tuateam.github.io/tua-api/\">👉完整文档地址点这里👈</a>\n</p>\n\n<p align=\"center\">\n    <a href=\"https://circleci.com/gh/tuateam/tua-api/tree/master\" target=\"_blank\">\n        <img src=\"https://img.shields.io/circleci/project/github/tuateam/tua-api/master.svg\" alt=\"Build Status\">\n    </a>\n    <a href=\"https://codecov.io/github/tuateam/tua-api?branch=master\" target=\"_blank\">\n        <img src=\"https://img.shields.io/codecov/c/github/tuateam/tua-api/master.svg\" alt=\"Coverage Status\">\n    </a>\n    <a href=\"https://david-dm.org/tuateam/tua-api\" target=\"_blank\">\n        <img src=\"https://david-dm.org/tuateam/tua-api.svg\" alt=\"dependencies\">\n    </a>\n    <a href=\"https://www.npmjs.com/package/tua-api\" target=\"_blank\">\n        <img src=\"https://badgen.net/npm/dm/tua-api\" alt=\"Downloads per month\">\n        <img src=\"https://img.shields.io/npm/v/tua-api.svg\" alt=\"Version\">\n        <img src=\"https://img.shields.io/npm/v/tua-api/next.svg\" alt=\"Next Version\">\n        <img src=\"https://img.shields.io/npm/l/tua-api.svg\" alt=\"License\">\n    </a>\n</p>\n\n## `tua-api` 是什么？\n`tua-api` 是一个针对发起 api 请求提供辅助功能的库。采用 ES6+ 语法，并采用 jest 进行了完整的单元测试。\n\n目前已适配：\n\n* web 端：axios, fetch-jsonp\n* Node 端：axios\n* 小程序端：wx.request\n\n<a href=\"https://codesandbox.io/s/2o24xn0750\" target=\"_blank\">\n    <img alt=\"Edit tua-api github example\" src=\"https://codesandbox.io/static/img/play-codesandbox.svg\">\n</a>\n\n## 安装\n### web 端\n#### 安装本体\n\n```bash\n$ npm i -S tua-api\n# OR\n$ yarn add tua-api\n```\n\n然后直接导入即可\n\n```js\nimport TuaApi from 'tua-api'\n```\n\n#### 配置武器\n配置“武器”分为两种情况:\n\n* [已配置 CORS 跨域请求头](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS)，或是没有跨域需求时，无需任何操作（默认采用的就是 `axios`）。\n\n* 若是用不了 CORS，那么就需要设置 `reqType: 'jsonp'` 借助 jsonp 实现跨域\n\n但是 jsonp 只支持使用 get 的方式请求，所以如果需要发送 post 或其他方式的请求，还是需要使用 `axios`（服务端还是需要配置 CORS）。\n\n### 小程序端\n#### 安装本体即可\n\n```bash\n$ npm i -S tua-api\n# OR\n$ yarn add tua-api\n```\n\n```js\nimport TuaApi from 'tua-api'\n```\n\n> 小程序还用不了 npm？[@tua-mp/service](https://tuateam.github.io/tua-mp/tua-mp-service/) 了解一下？\n\n## `tua-api` 能干什么？\n`tua-api` 能实现统一管理 api 配置（例如一般放在 `src/apis/` 下）。经过处理后，业务侧代码只需要这样写即可：\n\n```js\nimport { fooApi } from '@/apis/'\n\nfooApi\n    .bar({ a: '1', b: '2' }) // 发起请求，a、b 是请求参数\n    .then(console.log)       // 收到响应\n    .catch(console.error)    // 处理错误\n```\n\n不仅如此，还有一些其他功能：\n\n* 参数校验\n* 默认参数\n* 中间件（koa 风格）\n* ...\n\n```js\n// 甚至可以更进一步和 tua-storage 配合使用\nimport TuaStorage from 'tua-storage'\nimport { getSyncFnMapByApis } from 'tua-api'\n\n// 本地写好的各种接口配置\nimport * as apis from '@/apis'\n\nconst tuaStorage = new TuaStorage({\n    syncFnMap: getSyncFnMapByApis(apis),\n})\n\nconst fetchParam = {\n    key: fooApi.bar.key,\n    syncParams: { a: 'a', b: 'b' },\n\n    // 过期时间，默认值为实例化时的值，以秒为单位\n    expires: 10,\n\n    // 是否直接调用同步函数更新数据，默认为 false\n    // 适用于需要强制更新数据的场景，例如小程序中的下拉刷新\n    isForceUpdate: true,\n\n    // ...\n}\n\ntuaStorage\n    .load(fetchParam)\n    .then(console.log)\n    .catch(console.error)\n```\n\n## 怎么写 `api` 配置？\n拿以下 api 地址举例：\n\n* `https://example-base.com/foo/bar/something/create`\n* `https://example-base.com/foo/bar/something/modify`\n* `https://example-base.com/foo/bar/something/delete`\n\n### 地址结构划分\n以上地址，一般将其分为`3`部分：\n\n* baseUrl: `'https://example-base.com/foo/bar'`\n* prefix: `'something'`\n* pathList: `[ 'create', 'modify', 'delete' ]`\n\n### 文件结构\n`api/` 一般是这样的文件结构：\n\n```\n.\n└── apis\n    ├── prefix-1.js\n    ├── prefix-2.js\n    ├── something.js // <-- 以上的 api 地址会放在这里，名字随意\n    └── index.js\n```\n\n### 基础配置内容\n```js\n// src/apis/something.js\n\nexport default {\n    // 接口基础地址\n    baseUrl: 'https://example-base.com/foo/bar',\n\n    // 接口的中间路径\n    prefix: 'something',\n\n    // 接口地址数组\n    pathList: [\n        { path: 'create' },\n        { path: 'modify' },\n        { path: 'delete' },\n    ],\n}\n```\n\n[更多配置请点击这里查看](https://tuateam.github.io/tua-api/config/common.html)\n\n### 配置导出\n最后来看一下 `apis/index.js` 该怎么写：\n\n```js\nimport TuaApi from 'tua-api'\n\n// 初始化\nconst tuaApi = new TuaApi({ ... })\n\n// 使用中间件\ntuaApi\n    .use(async (ctx, next) => {\n        // 请求发起前\n        console.log('before: ', ctx)\n\n        await next()\n\n        // 响应返回后\n        console.log('after: ', ctx)\n    })\n    // 链式调用\n    .use(...)\n\nexport const fakeGet = tuaApi.getApi(require('./fake-get').default)\nexport const fakePost = tuaApi.getApi(require('./fake-post').default)\n```\n\n小程序端建议使用 [@tua-mp/cli](https://tuateam.github.io/tua-mp/tua-mp-cli/) 一键生成 api。\n\n```bash\n$ tuamp add api <api-name>\n```\n\n### 配置的构成\n在 `tua-api` 中配置分为四种：\n\n* [默认配置（调用 `new TuaApi({ ... })` 时传递的）](https://tuateam.github.io/tua-api/config/default.html)\n* [公共配置（和 `pathList` 同级的配置）](https://tuateam.github.io/tua-api/config/common.html)\n* [自身配置（`pathList` 数组中的对象上的配置）](https://tuateam.github.io/tua-api/config/self.html)\n* [运行配置（在实际调用接口时传递的配置）](https://tuateam.github.io/tua-api/config/runtime.html)\n\n其中优先级自然是:\n\n`默认配置 < 公共配置 < 自身配置 < 运行配置`\n\n<p align=\"center\">\n    <a href=\"https://tuateam.github.io/tua-api/config/\">👉更多配置点击这里👈</a>\n</p>\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tr>\n    <td align=\"center\"><a href=\"https://buptsteve.github.io\"><img src=\"https://avatars2.githubusercontent.com/u/11501493?v=4\" width=\"100px;\" alt=\"StEve Young\"/><br /><sub><b>StEve Young</b></sub></a><br /><a href=\"https://github.com/tuateam/tua-api/commits?author=BuptStEve\" title=\"Code\">💻</a> <a href=\"https://github.com/tuateam/tua-api/commits?author=BuptStEve\" title=\"Documentation\">📖</a> <a href=\"#infra-BuptStEve\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a></td>\n    <td align=\"center\"><a href=\"https://github.com/evinma\"><img src=\"https://avatars2.githubusercontent.com/u/16096567?v=4\" width=\"100px;\" alt=\"evinma\"/><br /><sub><b>evinma</b></sub></a><br /><a href=\"https://github.com/tuateam/tua-api/commits?author=evinma\" title=\"Code\">💻</a></td>\n  </tr>\n</table>\n\n<!-- markdownlint-enable -->\n<!-- prettier-ignore-end -->\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","readmeFilename":"README.md","gitHead":"f04cea9fcebb4a5e538dca42562443f2ace1830f","bugs":{"url":"https://github.com/tuateam/tua-api/issues"},"_id":"tua-api@1.4.1-2","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"buptsteve","email":"yangzhenyu2016@gmail.com"},"dist":{"integrity":"sha512-38sAJKlfCt+SIMMCabsgXcGvU3OQ3bUvDXLiJ0Qsb0Br0ohlbsH42Xj3kV1I819oVGWH/P34Ow6JeItivO9qAg==","shasum":"b4ca1cfab9d102b561d21461acaf3d179e616ed9","tarball":"https://registry.npmjs.org/tua-api/-/tua-api-1.4.1-2.tgz","fileCount":32,"unpackedSize":177792,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdtpaUCRA9TVsSAnZWagAAOz8P/094xEChoIeceMWqOZHZ\napYV8QM7L8uH4PPgGeBWrW7cTGgTYfDfeL0zm43U9LZe82AMsz47Wr/nuef0\nx1eY4XD+pBcVVO9w3ObVJJOttblqm8Grz+LfSVYxu0RhnRdpWkea1ibY4Var\nla4mFEY6kiw0rHTjJ8GWmnTEI/uyPO9SpNB0j5vtME5jj90Gw7V/8/BBnGTw\nv1KJffTpaKQcDogwj9xBo5aaXDUxMbKeY2DCy0n1X6oorA4iPjiTF3GEiL2z\nOOPj6jFGjQIzB+lXLHrjzR6OSc+yM/0XCY5l5X+IT8fDipxnv6ULQJFToMhN\nd85JnAKSkuKpHZa7nG0f1cDrW2M6ayB5hgATIS9KF1Lqm6F74GaoRQV+vBHO\nKwhfxBDXqLxhv/VYsy8eJ2bN//Z9iZ9mlBNqbfqmCJzMJsdxft9wPdkWFjLL\nJjxJJrW/Jo+4xIkIEjj15cpd6BHvh1tAQeA7CyIbvNkNDtb+P47aowvB0Byf\nHDmwXamedyHqGOZB3fAwnHIlSChYRxz6cLDi7bZN3EBC9lbpcUL7yVKTtJFl\nkQrJk2txck+ld0vwccLUcqdxFSp27AeLyPSq+LvXP+WL1AdLujJW1jj0PTsi\n48ZfhO2KeEQYUcOPxBNl8/oyURU8mL5S5pEexe0MwnVFlEaA0QVHBCosect4\nnC04\r\n=xVe2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC+i1q+wXZUGIRtyuz6x/R+BFJ0dp+97b5dsLafQtjAlAIhAJPiCiRxoyL+v2VR0TZNrgejAxijZ47oitJeMnqiN1Ae"}]},"maintainers":[{"email":"yangzhenyu2016@gmail.com","name":"buptsteve"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tua-api_1.4.1-2_1572247187657_0.46599998669661535"},"_hasShrinkwrap":false},"1.4.1-3":{"name":"tua-api","version":"1.4.1-3","description":"🏗 A common tool helps converting configs to api functions","main":"dist/TuaApi.cjs.js","module":"dist/TuaApi.esm.js","unpkg":"dist/TuaApi.umd.js","jsdelivr":"dist/TuaApi.umd.js","types":"src/index.d.ts","scripts":{"cov":"open coverage/lcov-report/index.html","docs":"vuepress dev docs","docs:build":"vuepress build docs","lint":"eslint --fix . docs/.vuepress/ --ignore-path .gitignore","test":"cross-env NODE_ENV=test jest","test:tdd":"cross-env NODE_ENV=test jest --watch","prebuild":"rimraf dist/* & npm run test","build":"cross-env NODE_ENV=production rollup -c","deploy":"npm run docs:build && gh-pages -m \"[ci skip]\" -d docs/.vuepress/dist","next:pm":"npm --no-git-tag-version version preminor","next:pr":"npm --no-git-tag-version version prerelease","pub":"npm run build && npm publish","pub:n":"npm run build && npm publish --tag next"},"husky":{"hooks":{"pre-push":"npm test","pre-commit":"lint-staged","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"lint-staged":{"{src,test}/**/*.js":["eslint --fix","git add"]},"eslintIgnore":["dist/*","!.eslintrc.js","package.json"],"dependencies":{"axios":"^0.19.0","fetch-jsonp":"^1.1.3","koa-compose":"^4.1.0"},"devDependencies":{"@babel/core":"^7.6.4","@babel/plugin-external-helpers":"^7.2.0","@babel/plugin-proposal-decorators":"^7.6.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/preset-env":"^7.6.3","@commitlint/cli":"^8.2.0","@commitlint/config-conventional":"^8.2.0","@types/jest":"^24.0.18","all-contributors-cli":"^6.9.1","axios-mock-adapter":"^1.17.0","babel-core":"^7.0.0-bridge.0","babel-eslint":"^10.0.3","babel-jest":"^24.9.0","codecov":"^3.6.1","cross-env":"^6.0.3","eslint":"^6.5.1","eslint-config-standard":"^14.1.0","eslint-plugin-import":"^2.18.2","eslint-plugin-node":"^10.0.0","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","gh-pages":"^2.1.1","husky":"^3.0.8","jest":"^24.9.0","lint-staged":"^9.4.2","rimraf":"^3.0.0","rollup":"^1.23.1","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-replace":"^2.2.0","rollup-plugin-uglify":"^6.0.3","typescript":"^3.6.4","vuepress":"^1.1.0"},"repository":{"type":"git","url":"git+https://github.com/tuateam/tua-api.git"},"homepage":"https://tuateam.github.io/tua-api/","author":{"name":"StEve Young"},"license":"MIT","readme":"<h1 align=\"center\">tua-api</h1>\n\n<h4 align=\"center\">让我们优雅地调用 api~</h4>\n\n<p align=\"center\">\n    <a href=\"https://tuateam.github.io/tua-api/\">👉完整文档地址点这里👈</a>\n</p>\n\n<p align=\"center\">\n    <a href=\"https://circleci.com/gh/tuateam/tua-api/tree/master\" target=\"_blank\">\n        <img src=\"https://img.shields.io/circleci/project/github/tuateam/tua-api/master.svg\" alt=\"Build Status\">\n    </a>\n    <a href=\"https://codecov.io/github/tuateam/tua-api?branch=master\" target=\"_blank\">\n        <img src=\"https://img.shields.io/codecov/c/github/tuateam/tua-api/master.svg\" alt=\"Coverage Status\">\n    </a>\n    <a href=\"https://david-dm.org/tuateam/tua-api\" target=\"_blank\">\n        <img src=\"https://david-dm.org/tuateam/tua-api.svg\" alt=\"dependencies\">\n    </a>\n    <a href=\"https://www.npmjs.com/package/tua-api\" target=\"_blank\">\n        <img src=\"https://badgen.net/npm/dm/tua-api\" alt=\"Downloads per month\">\n        <img src=\"https://img.shields.io/npm/v/tua-api.svg\" alt=\"Version\">\n        <img src=\"https://img.shields.io/npm/v/tua-api/next.svg\" alt=\"Next Version\">\n        <img src=\"https://img.shields.io/npm/l/tua-api.svg\" alt=\"License\">\n    </a>\n</p>\n\n## `tua-api` 是什么？\n`tua-api` 是一个针对发起 api 请求提供辅助功能的库。采用 ES6+ 语法，并采用 jest 进行了完整的单元测试。\n\n目前已适配：\n\n* web 端：axios, fetch-jsonp\n* Node 端：axios\n* 小程序端：wx.request\n\n<a href=\"https://codesandbox.io/s/2o24xn0750\" target=\"_blank\">\n    <img alt=\"Edit tua-api github example\" src=\"https://codesandbox.io/static/img/play-codesandbox.svg\">\n</a>\n\n## 安装\n### web 端\n#### 安装本体\n\n```bash\n$ npm i -S tua-api\n# OR\n$ yarn add tua-api\n```\n\n然后直接导入即可\n\n```js\nimport TuaApi from 'tua-api'\n```\n\n#### 配置武器\n配置“武器”分为两种情况:\n\n* [已配置 CORS 跨域请求头](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS)，或是没有跨域需求时，无需任何操作（默认采用的就是 `axios`）。\n\n* 若是用不了 CORS，那么就需要设置 `reqType: 'jsonp'` 借助 jsonp 实现跨域\n\n但是 jsonp 只支持使用 get 的方式请求，所以如果需要发送 post 或其他方式的请求，还是需要使用 `axios`（服务端还是需要配置 CORS）。\n\n### 小程序端\n#### 安装本体即可\n\n```bash\n$ npm i -S tua-api\n# OR\n$ yarn add tua-api\n```\n\n```js\nimport TuaApi from 'tua-api'\n```\n\n> 小程序还用不了 npm？[@tua-mp/service](https://tuateam.github.io/tua-mp/tua-mp-service/) 了解一下？\n\n## `tua-api` 能干什么？\n`tua-api` 能实现统一管理 api 配置（例如一般放在 `src/apis/` 下）。经过处理后，业务侧代码只需要这样写即可：\n\n```js\nimport { fooApi } from '@/apis/'\n\nfooApi\n    .bar({ a: '1', b: '2' }) // 发起请求，a、b 是请求参数\n    .then(console.log)       // 收到响应\n    .catch(console.error)    // 处理错误\n```\n\n不仅如此，还有一些其他功能：\n\n* 参数校验\n* 默认参数\n* 中间件（koa 风格）\n* ...\n\n```js\n// 甚至可以更进一步和 tua-storage 配合使用\nimport TuaStorage from 'tua-storage'\nimport { getSyncFnMapByApis } from 'tua-api'\n\n// 本地写好的各种接口配置\nimport * as apis from '@/apis'\n\nconst tuaStorage = new TuaStorage({\n    syncFnMap: getSyncFnMapByApis(apis),\n})\n\nconst fetchParam = {\n    key: fooApi.bar.key,\n    syncParams: { a: 'a', b: 'b' },\n\n    // 过期时间，默认值为实例化时的值，以秒为单位\n    expires: 10,\n\n    // 是否直接调用同步函数更新数据，默认为 false\n    // 适用于需要强制更新数据的场景，例如小程序中的下拉刷新\n    isForceUpdate: true,\n\n    // ...\n}\n\ntuaStorage\n    .load(fetchParam)\n    .then(console.log)\n    .catch(console.error)\n```\n\n## 怎么写 `api` 配置？\n拿以下 api 地址举例：\n\n* `https://example-base.com/foo/bar/something/create`\n* `https://example-base.com/foo/bar/something/modify`\n* `https://example-base.com/foo/bar/something/delete`\n\n### 地址结构划分\n以上地址，一般将其分为`3`部分：\n\n* baseUrl: `'https://example-base.com/foo/bar'`\n* prefix: `'something'`\n* pathList: `[ 'create', 'modify', 'delete' ]`\n\n### 文件结构\n`api/` 一般是这样的文件结构：\n\n```\n.\n└── apis\n    ├── prefix-1.js\n    ├── prefix-2.js\n    ├── something.js // <-- 以上的 api 地址会放在这里，名字随意\n    └── index.js\n```\n\n### 基础配置内容\n```js\n// src/apis/something.js\n\nexport default {\n    // 接口基础地址\n    baseUrl: 'https://example-base.com/foo/bar',\n\n    // 接口的中间路径\n    prefix: 'something',\n\n    // 接口地址数组\n    pathList: [\n        { path: 'create' },\n        { path: 'modify' },\n        { path: 'delete' },\n    ],\n}\n```\n\n[更多配置请点击这里查看](https://tuateam.github.io/tua-api/config/common.html)\n\n### 配置导出\n最后来看一下 `apis/index.js` 该怎么写：\n\n```js\nimport TuaApi from 'tua-api'\n\n// 初始化\nconst tuaApi = new TuaApi({ ... })\n\n// 使用中间件\ntuaApi\n    .use(async (ctx, next) => {\n        // 请求发起前\n        console.log('before: ', ctx)\n\n        await next()\n\n        // 响应返回后\n        console.log('after: ', ctx)\n    })\n    // 链式调用\n    .use(...)\n\nexport const fakeGet = tuaApi.getApi(require('./fake-get').default)\nexport const fakePost = tuaApi.getApi(require('./fake-post').default)\n```\n\n小程序端建议使用 [@tua-mp/cli](https://tuateam.github.io/tua-mp/tua-mp-cli/) 一键生成 api。\n\n```bash\n$ tuamp add api <api-name>\n```\n\n### 配置的构成\n在 `tua-api` 中配置分为四种：\n\n* [默认配置（调用 `new TuaApi({ ... })` 时传递的）](https://tuateam.github.io/tua-api/config/default.html)\n* [公共配置（和 `pathList` 同级的配置）](https://tuateam.github.io/tua-api/config/common.html)\n* [自身配置（`pathList` 数组中的对象上的配置）](https://tuateam.github.io/tua-api/config/self.html)\n* [运行配置（在实际调用接口时传递的配置）](https://tuateam.github.io/tua-api/config/runtime.html)\n\n其中优先级自然是:\n\n`默认配置 < 公共配置 < 自身配置 < 运行配置`\n\n<p align=\"center\">\n    <a href=\"https://tuateam.github.io/tua-api/config/\">👉更多配置点击这里👈</a>\n</p>\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tr>\n    <td align=\"center\"><a href=\"https://buptsteve.github.io\"><img src=\"https://avatars2.githubusercontent.com/u/11501493?v=4\" width=\"100px;\" alt=\"StEve Young\"/><br /><sub><b>StEve Young</b></sub></a><br /><a href=\"https://github.com/tuateam/tua-api/commits?author=BuptStEve\" title=\"Code\">💻</a> <a href=\"https://github.com/tuateam/tua-api/commits?author=BuptStEve\" title=\"Documentation\">📖</a> <a href=\"#infra-BuptStEve\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a></td>\n    <td align=\"center\"><a href=\"https://github.com/evinma\"><img src=\"https://avatars2.githubusercontent.com/u/16096567?v=4\" width=\"100px;\" alt=\"evinma\"/><br /><sub><b>evinma</b></sub></a><br /><a href=\"https://github.com/tuateam/tua-api/commits?author=evinma\" title=\"Code\">💻</a></td>\n  </tr>\n</table>\n\n<!-- markdownlint-enable -->\n<!-- prettier-ignore-end -->\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","readmeFilename":"README.md","gitHead":"3b8b4a910f56b4342fa1d1539ac54854521e81a6","bugs":{"url":"https://github.com/tuateam/tua-api/issues"},"_id":"tua-api@1.4.1-3","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"buptsteve","email":"yangzhenyu2016@gmail.com"},"dist":{"integrity":"sha512-uOtbCcyJu8sOHZFZYNldy1uPZi+RDAJobkToesWYKIAZal0XetXKsT8s8l913dZEgN0bWAb4lQDy0MvA1WFRMg==","shasum":"c7ec289beeaff56c69fa76d3e28d618ccadd68f8","tarball":"https://registry.npmjs.org/tua-api/-/tua-api-1.4.1-3.tgz","fileCount":32,"unpackedSize":178333,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdtpuHCRA9TVsSAnZWagAAW8UP/1sj+8w6gpO05YLMbn0G\naqqDe9aoIVEZIOyOR4YCXRnqr8drW64NON3ZMNdNH+CRltOFSFH6vMd6O+Gh\nuh1dSSh+IsxOpULP09LYhZTZ0atVOgr5bjeh//wMu4iQJITxWDBAJhqgYKmh\n7hTE/Cl1MceMhx+eNY5v9seP93AC9Z13GrMyxEw6otyKTfTWf9oue8hj6eIv\n0/910+jgrQ7ffQS2larCP+Ct1xvAJKcTUlsBiB3Y3/5AUlJ4S1nKV1A0wAKY\nh+Mij5Xfpj5jkqpHAg2Dxj5P7EOQfjSDop/UIJcObqkNUsye2JXBeUW6tNNN\nJ4KDpszB6thzIThmzaUwDW8qmOgUQ44HmSFoU17VWvenTlTGNAlbYBiUU/eP\nCt3ZKBTwAIpR5mtncZtPtdVcBzCONmZnjJXM5Nnx7Q4HCrH37C8hkfC/5KDs\nSpUPlQJ6GoyXsVy+R6Ts/OvHBtke1xHSQNr0+JxbGyksbNSq4DLJ8hWp6wv7\nsK99HMCk8kjwtkSJYnqE78h20ABrBe1qpAPTE+vSrbtVBHVRcJtG0kTMVTWA\nWOtmegsPW7wfRxQX/VmUb1o2uou/RTDLfjzTGk01Xs67c9agSZRtvw8N5xBN\n1tm1fz3rV4Kn6ytHsdI2BC9MdHsAIUEkspdD7UhQ2htBqCrtvEScM5heKO3c\npHf/\r\n=V3Ti\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCmyl5kfBwUh4j3bEVznu8MEQyeMT38MUAYBOofYMfR4AIhAI0BFh03zM4AL9t/Gpy1GPy17mQhbKO7i/X4qKwYZeqC"}]},"maintainers":[{"email":"yangzhenyu2016@gmail.com","name":"buptsteve"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tua-api_1.4.1-3_1572248454734_0.6599439216191356"},"_hasShrinkwrap":false},"1.4.1":{"name":"tua-api","version":"1.4.1","description":"🏗 A common tool helps converting configs to api functions","main":"dist/TuaApi.cjs.js","module":"dist/TuaApi.esm.js","unpkg":"dist/TuaApi.umd.js","jsdelivr":"dist/TuaApi.umd.js","types":"src/index.d.ts","scripts":{"cov":"open coverage/lcov-report/index.html","docs":"vuepress dev docs","docs:build":"vuepress build docs","lint":"eslint --fix . docs/.vuepress/ --ignore-path .gitignore","test":"cross-env NODE_ENV=test jest","test:tdd":"cross-env NODE_ENV=test jest --watch","prebuild":"rimraf dist/* & npm run test","build":"cross-env NODE_ENV=production rollup -c","deploy":"npm run docs:build && gh-pages -m \"[ci skip]\" -d docs/.vuepress/dist","next:pm":"npm --no-git-tag-version version preminor","next:pr":"npm --no-git-tag-version version prerelease","pub":"npm run build && npm publish","pub:n":"npm run build && npm publish --tag next"},"husky":{"hooks":{"pre-push":"npm test","pre-commit":"lint-staged","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"lint-staged":{"{src,test}/**/*.js":["eslint --fix","git add"]},"eslintIgnore":["dist/*","!.eslintrc.js","package.json"],"dependencies":{"axios":"^0.19.0","fetch-jsonp":"^1.1.3","koa-compose":"^4.1.0"},"devDependencies":{"@babel/core":"^7.6.4","@babel/plugin-external-helpers":"^7.2.0","@babel/plugin-proposal-decorators":"^7.6.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/preset-env":"^7.6.3","@commitlint/cli":"^8.2.0","@commitlint/config-conventional":"^8.2.0","@types/jest":"^24.0.18","all-contributors-cli":"^6.9.1","axios-mock-adapter":"^1.17.0","babel-core":"^7.0.0-bridge.0","babel-eslint":"^10.0.3","babel-jest":"^24.9.0","codecov":"^3.6.1","cross-env":"^6.0.3","eslint":"^6.5.1","eslint-config-standard":"^14.1.0","eslint-plugin-import":"^2.18.2","eslint-plugin-node":"^10.0.0","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","gh-pages":"^2.1.1","husky":"^3.0.8","jest":"^24.9.0","lint-staged":"^9.4.2","rimraf":"^3.0.0","rollup":"^1.23.1","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-replace":"^2.2.0","rollup-plugin-uglify":"^6.0.3","typescript":"^3.6.4","vuepress":"^1.1.0"},"repository":{"type":"git","url":"git+https://github.com/tuateam/tua-api.git"},"homepage":"https://tuateam.github.io/tua-api/","author":{"name":"StEve Young"},"license":"MIT","gitHead":"ccfde9490f9c622fe841b1e588769f47962f6b25","bugs":{"url":"https://github.com/tuateam/tua-api/issues"},"_id":"tua-api@1.4.1","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"buptsteve","email":"yangzhenyu2016@gmail.com"},"dist":{"integrity":"sha512-N5l9/qoURN05+Phj/cnPfU6nghLWub4cbrbLGPcsQc+Msp++j1g8uS2OXDrU+jJxJZibzoE8NNq5gbay9ASgiA==","shasum":"8e38602373e58a64b51f9e9ebd9091be648ee6c9","tarball":"https://registry.npmjs.org/tua-api/-/tua-api-1.4.1.tgz","fileCount":32,"unpackedSize":178317,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdtp2WCRA9TVsSAnZWagAAsjsP/RWJlPHMsBTAulxBYT+g\n5AfKqueP9PyMY+eSCJ3xeVcxPBbyMlsPumESxx3RT9/zZecL3tNKB9PY12jh\nAoSJTMhBYwech1iUWlapqx21u6kOCZ8ROx94jj0j+Y0b4nSoQCV98f0WQm+f\n9n2t+sS5dNV6X7TMtFxFpTVN7gpUb6GyuFMoBZZWF237Y1s7gnIuKYDdebAD\nGt796ylJbwzA3YSaJ7LoxBh+r3C9zhH3kDRuFIy8dPN744k+v4k5/Lp1isV9\nweiuWwv6aZ8YhwuvznOjWisR9NhfdiZpMf3aL3At/h+I+4SBWVyY08t1aLB0\nxDHdotK9XsgxZPCs7zi2aHFbExgdHJOq0cOEHKLBX9GvgRopzyfwMWR5P+6S\nTf2mumwubK2IACqY9Aln0sq7yywspT5KF5WSldKoZnoysb3M/dDsI17mU+z5\nEDAX6C3Jr/xmS0j2X9JDhSz8PJg5X7FZjr03DKZR2m6p7D9wb6gDHLL5Ujf1\nDtTwwi5Sz4SFo8epsh+M8eub/3suMkf78r9srmimvLYaZgPLnxIP4LNBOXvm\nycOV+PBMvzYD0PUPRxmB7Spe5z506zMOPKGiecBqaYqM7T6GWkkFzstJbfDB\nJULwOQs5P407BfS6yOSwjdDSYPo7H/SGaATOfEAtrJ0Z56HyXJAeDwXiWFMy\n9mdn\r\n=6b2m\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE/4zYivAKNgSu+nt7WCWBQtzRiI2kFgDyglXhqxbdtAAiAz9+Qv7y2OlZYhxCM/YHpKOHU/lVHoM1gy0HlzhAxjag=="}]},"maintainers":[{"email":"yangzhenyu2016@gmail.com","name":"buptsteve"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tua-api_1.4.1_1572248982459_0.5726258375066826"},"_hasShrinkwrap":false},"1.4.2":{"name":"tua-api","version":"1.4.2","description":"🏗 A common tool helps converting configs to api functions","main":"dist/TuaApi.cjs.js","module":"dist/TuaApi.esm.js","unpkg":"dist/TuaApi.umd.js","jsdelivr":"dist/TuaApi.umd.js","types":"src/index.d.ts","scripts":{"cov":"open coverage/lcov-report/index.html","docs":"vuepress dev docs","docs:build":"vuepress build docs","lint":"eslint --fix . docs/.vuepress/ --ignore-path .gitignore","test":"cross-env NODE_ENV=test jest","test:tdd":"cross-env NODE_ENV=test jest --watch","prebuild":"rimraf dist/* & npm run test","build":"cross-env NODE_ENV=production rollup -c","deploy":"npm run docs:build && gh-pages -m \"[ci skip]\" -d docs/.vuepress/dist","next:pm":"npm --no-git-tag-version version preminor","next:pr":"npm --no-git-tag-version version prerelease","pub":"npm run build && npm publish","pub:n":"npm run build && npm publish --tag next"},"husky":{"hooks":{"pre-push":"npm test","pre-commit":"lint-staged","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"lint-staged":{"{src,test}/**/*.js":["eslint --fix","git add"]},"eslintIgnore":["dist/*","!.eslintrc.js","package.json"],"dependencies":{"axios":"^0.19.0","fetch-jsonp":"^1.1.3","koa-compose":"^4.1.0"},"devDependencies":{"@babel/core":"^7.6.4","@babel/plugin-external-helpers":"^7.2.0","@babel/plugin-proposal-decorators":"^7.6.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/preset-env":"^7.6.3","@commitlint/cli":"^8.2.0","@commitlint/config-conventional":"^8.2.0","@types/jest":"^24.0.18","all-contributors-cli":"^6.9.1","axios-mock-adapter":"^1.17.0","babel-core":"^7.0.0-bridge.0","babel-eslint":"^10.0.3","babel-jest":"^24.9.0","codecov":"^3.6.1","cross-env":"^6.0.3","eslint":"^6.5.1","eslint-config-standard":"^14.1.0","eslint-plugin-import":"^2.18.2","eslint-plugin-node":"^10.0.0","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","gh-pages":"^2.1.1","husky":"^3.0.8","jest":"^24.9.0","lint-staged":"^9.4.2","rimraf":"^3.0.0","rollup":"^1.23.1","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-replace":"^2.2.0","rollup-plugin-uglify":"^6.0.3","typescript":"^3.6.4","vuepress":"^1.1.0"},"repository":{"type":"git","url":"git+https://github.com/tuateam/tua-api.git"},"homepage":"https://tuateam.github.io/tua-api/","author":{"name":"StEve Young"},"license":"MIT","gitHead":"3d54b0dc3f75e85750c771bd1a4416d02893d0ef","bugs":{"url":"https://github.com/tuateam/tua-api/issues"},"_id":"tua-api@1.4.2","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"buptsteve","email":"yangzhenyu2016@gmail.com"},"dist":{"integrity":"sha512-bjX36guV6M64zpKA1NHlTG4tSOtkyRN/neb2LiiJRnh9P3UZ5J1F6g1XpNVFZ0WIgKewNEXgD0JC8rqhu9wR4w==","shasum":"97faab4cbbe960fc712f30e04aba94eb098ae906","tarball":"https://registry.npmjs.org/tua-api/-/tua-api-1.4.2.tgz","fileCount":32,"unpackedSize":178492,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd94wCCRA9TVsSAnZWagAAgnsP/jxRJK9ib84f9IeS1cvC\nr0vBzya7CkmP6k0GVzTFzXu7i61gHG7uy8qzPGdzI0QS7E/2bc7odj4OAea+\nA+vtDKXDay6NSfMvL/L1WpPwtOwREWNFqKbUqhv3LtnzFa2F4YPSXaJdIrdG\noY3hrfJXPnuAa990ZJLErMtAD/EWKvRYtWTVDJ4U+l2vA86t0N7TNspbHGFU\nHhoKqluB/dBQ7DhoUT0eelSRHUBngafjGwxC+9tFeRlLCPeiQLWUrb2XUfz0\nkDUlEz8C08Up1wrj6YbB3LFA5pdqTRe1BSFksUKPpZfdra9bq/FbZwQ1ASNG\nPtXSv+dOB2m0ia/6J4MkseAfWA2MKc6SCqDEI+Mt4il/+Owv1pXIlB351QCF\n1PRNI9jpmq+sdIqcm74Tavmnfheau6a/vDyTe+ZDiRiG16RFLFQw3+ly+i2f\nXDiNuSJRVE/kSHyOBQQ63ZhfHKQjCQj8SHdmqptlIlUKPhIbvxnLz53zxVsH\nfTFazsMQTJcPp+YvX8TbzaIxS4A8g2z0wGv6qXu899V9X/axSAJshY8wGLh1\n4CD/5qIzyjDdElsip9B8kAh8BNQEus16hzCeDCuMISoAKfHteCwgNJ1EC9Ph\nE074ahUuUGRH7Pz0YiJ2D4ZuuK7STs+Yup5mpooFe4EdEo/7tdOZpx+FVn9O\nWeqE\r\n=c8QV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEIaZwja1Lh8ioHTiosKVZWffKomeB1pAgtYpBIMrxc1AiBEL99W6U2utaz9qRAeUJKNtRDR1frWuVGzY32tqO/ZHw=="}]},"maintainers":[{"email":"yangzhenyu2016@gmail.com","name":"buptsteve"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tua-api_1.4.2_1576504321600_0.9683703543434152"},"_hasShrinkwrap":false},"1.4.3":{"name":"tua-api","version":"1.4.3","description":"🏗 A common tool helps converting configs to api functions","main":"dist/TuaApi.cjs.js","module":"dist/TuaApi.esm.js","unpkg":"dist/TuaApi.umd.js","jsdelivr":"dist/TuaApi.umd.js","types":"src/index.d.ts","scripts":{"cov":"open coverage/lcov-report/index.html","docs":"vuepress dev docs","docs:build":"vuepress build docs","lint":"eslint --fix . docs/.vuepress/ --ignore-path .gitignore","test":"cross-env NODE_ENV=test jest","test:tdd":"cross-env NODE_ENV=test jest --watch","prebuild":"rimraf dist/* & npm run test","build":"cross-env NODE_ENV=production rollup -c","deploy":"npm run docs:build && gh-pages -m \"[ci skip]\" -d docs/.vuepress/dist","next:pm":"npm --no-git-tag-version version preminor","next:pr":"npm --no-git-tag-version version prerelease","pub":"npm run build && npm publish","pub:n":"npm run build && npm publish --tag next"},"husky":{"hooks":{"pre-push":"npm test","pre-commit":"lint-staged","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"lint-staged":{"{src,test}/**/*.js":["eslint --fix","git add"]},"eslintIgnore":["dist/*","!.eslintrc.js","package.json"],"dependencies":{"axios":"^0.19.0","fetch-jsonp":"^1.1.3","koa-compose":"^4.1.0"},"devDependencies":{"@babel/core":"^7.6.4","@babel/plugin-external-helpers":"^7.2.0","@babel/plugin-proposal-decorators":"^7.6.0","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/preset-env":"^7.6.3","@commitlint/cli":"^8.2.0","@commitlint/config-conventional":"^8.2.0","@types/jest":"^24.0.18","all-contributors-cli":"^6.9.1","axios-mock-adapter":"^1.17.0","babel-core":"^7.0.0-bridge.0","babel-eslint":"^10.0.3","babel-jest":"^24.9.0","codecov":"^3.6.1","cross-env":"^6.0.3","eslint":"^6.5.1","eslint-config-standard":"^14.1.0","eslint-plugin-import":"^2.18.2","eslint-plugin-node":"^10.0.0","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","gh-pages":"^2.1.1","husky":"^3.0.8","jest":"^24.9.0","lint-staged":"^9.4.2","rimraf":"^3.0.0","rollup":"^1.23.1","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-replace":"^2.2.0","rollup-plugin-uglify":"^6.0.3","typescript":"^3.6.4","vuepress":"^1.1.0"},"repository":{"type":"git","url":"git+https://github.com/tuateam/tua-api.git"},"homepage":"https://tuateam.github.io/tua-api/","author":{"name":"StEve Young"},"license":"MIT","gitHead":"d867b9c9621ba0a79416b60fea8284ad42583370","bugs":{"url":"https://github.com/tuateam/tua-api/issues"},"_id":"tua-api@1.4.3","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"buptsteve","email":"yangzhenyu2016@gmail.com"},"dist":{"integrity":"sha512-2i+EXgUbpUhZJb3ScaHY8P1bo58jDbIm0lv9SpjAFzsKul+wAlxFNsbPmy16S/bCb2hvr4v9h7wCq86BPOemJA==","shasum":"1fdadb2f413e81eacc08195d6ccf47c79efef41e","tarball":"https://registry.npmjs.org/tua-api/-/tua-api-1.4.3.tgz","fileCount":32,"unpackedSize":178492,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJd95QFCRA9TVsSAnZWagAAu2cP/2VyCvOJ9q53q2cYWMbl\noDdAFwOCW93A+SgvucwjPFwOU/Rc1itVgMVSLVqfzarH77Fl0RzmkNNpZVio\no0KTdz/7oI9fsRClbe2JHOUndKlfm3kdn851ygFxupJh8Z3IAGrHpGve1Zbq\nZ4/kI8PKBQJ1SsjgZXytIhpFHxy11biJrOx10Mg8Kg23hhkARu9jn8E1RUUA\ns/JynAA0khAnS8fssjSCDRyTLYp363ymXeesArknK4WGSlljqkUH7cEMLVBm\nFs3vdIh4L/bAcFsqmNXyDISfMKZaWk3U1crpnnHK7Dl09A7KXEq7wb86U+6t\nh2iCidrrdNdFB5EwG63555GeM9gwJ8Yf773p6fNhSlFlVkn39lLaLDGufYti\nGFuk6g1f6rLt9LKWugmEaJO2FtiPLeJLx0ZWH3Hl1bb5pA8KeOEy7Kw8QffP\n7tsxeqEW00gp7omORuflT43jVVgOeQxD34xPugj3g6PUQu7HpFUSvwDYwwKx\nr7kgyDWc/4HLjdZsAHKoU0GGFZgHXTuj8swBk5ckX/zARA5psqHdn+uLvdtX\nN2a1WuDhLM79OQ177b7gNf3IIEWgYySBrbgYt86ixHCU3lVaHvLJnFk05gpw\nzu/+elTNaOjGxlPhNsmmtTk9iosqdhmyDakmvDqtchslktDYIP2ZJCbeCqvu\n1kXB\r\n=UNq1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGotLrNxVRMJJhbjIElaj0VFyln5RQWd9BzUn7aOtJP/AiEA/XnxHE1qMVQUnHa8abKRu5lA3Jvh2iFQBpvyuCDerV8="}]},"maintainers":[{"email":"yangzhenyu2016@gmail.com","name":"buptsteve"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tua-api_1.4.3_1576506370875_0.4513921742883611"},"_hasShrinkwrap":false},"1.4.4-0":{"name":"tua-api","version":"1.4.4-0","description":"🏗 A common tool helps converting configs to api functions","main":"dist/TuaApi.cjs.js","module":"dist/TuaApi.esm.js","unpkg":"dist/TuaApi.umd.js","jsdelivr":"dist/TuaApi.umd.js","types":"src/index.d.ts","scripts":{"cov":"open coverage/lcov-report/index.html","docs":"vuepress dev docs","docs:build":"vuepress build docs","lint":"eslint --fix . docs/.vuepress/ --ignore-path .gitignore","test":"cross-env NODE_ENV=test jest","test:tdd":"cross-env NODE_ENV=test jest --watch","prebuild":"rimraf dist/* & npm run test","build":"cross-env NODE_ENV=production rollup -c","deploy":"npm run docs:build && gh-pages -m \"[ci skip]\" -d docs/.vuepress/dist","next:pm":"npm --no-git-tag-version version preminor","next:pr":"npm --no-git-tag-version version prerelease","pub":"npm run build && npm publish","pub:n":"npm run build && npm publish --tag next"},"husky":{"hooks":{"pre-push":"npm test","pre-commit":"lint-staged","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"lint-staged":{"{src,test}/**/*.js":["eslint --fix"]},"eslintIgnore":["dist/*","!.eslintrc.js","package.json"],"dependencies":{"axios":"^0.19.2","fetch-jsonp":"^1.1.3","koa-compose":"^4.1.0"},"devDependencies":{"@babel/core":"^7.8.4","@babel/plugin-external-helpers":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/preset-env":"^7.8.4","@commitlint/cli":"^8.3.5","@commitlint/config-conventional":"^8.3.4","@types/jest":"^25.1.2","all-contributors-cli":"^6.13.0","axios-mock-adapter":"^1.17.0","babel-core":"^7.0.0-bridge.0","babel-eslint":"^10.0.3","babel-jest":"^25.1.0","codecov":"^3.6.5","cross-env":"^7.0.0","eslint":"^6.8.0","eslint-config-standard":"^14.1.0","eslint-plugin-import":"^2.20.1","eslint-plugin-node":"^11.0.0","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","gh-pages":"^2.2.0","husky":"^4.2.3","jest":"^25.1.0","lint-staged":"^10.0.7","rimraf":"^3.0.2","rollup":"^1.31.1","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-replace":"^2.2.0","rollup-plugin-uglify":"^6.0.4","typescript":"^3.7.5","vuepress":"^1.3.0"},"repository":{"type":"git","url":"git+https://github.com/tuateam/tua-api.git"},"homepage":"https://tuateam.github.io/tua-api/","author":{"name":"StEve Young"},"license":"MIT","readme":"<h1 align=\"center\">tua-api</h1>\n\n<h4 align=\"center\">让我们优雅地调用 api~</h4>\n\n<p align=\"center\">\n    <a href=\"https://tuateam.github.io/tua-api/\">👉完整文档地址点这里👈</a>\n</p>\n\n<p align=\"center\">\n    <a href=\"https://circleci.com/gh/tuateam/tua-api/tree/master\" target=\"_blank\">\n        <img src=\"https://img.shields.io/circleci/project/github/tuateam/tua-api/master.svg\" alt=\"Build Status\">\n    </a>\n    <a href=\"https://codecov.io/github/tuateam/tua-api?branch=master\" target=\"_blank\">\n        <img src=\"https://img.shields.io/codecov/c/github/tuateam/tua-api/master.svg\" alt=\"Coverage Status\">\n    </a>\n    <a href=\"https://david-dm.org/tuateam/tua-api\" target=\"_blank\">\n        <img src=\"https://david-dm.org/tuateam/tua-api.svg\" alt=\"dependencies\">\n    </a>\n    <a href=\"https://www.npmjs.com/package/tua-api\" target=\"_blank\">\n        <img src=\"https://badgen.net/npm/dm/tua-api\" alt=\"Downloads per month\">\n        <img src=\"https://img.shields.io/npm/v/tua-api.svg\" alt=\"Version\">\n        <img src=\"https://img.shields.io/npm/v/tua-api/next.svg\" alt=\"Next Version\">\n        <img src=\"https://img.shields.io/npm/l/tua-api.svg\" alt=\"License\">\n    </a>\n</p>\n\n## `tua-api` 是什么？\n`tua-api` 是一个针对发起 api 请求提供辅助功能的库。采用 ES6+ 语法，并采用 jest 进行了完整的单元测试。\n\n目前已适配：\n\n* web 端：axios, fetch-jsonp\n* Node 端：axios\n* 小程序端：wx.request\n\n<a href=\"https://codesandbox.io/s/2o24xn0750\" target=\"_blank\">\n    <img alt=\"Edit tua-api github example\" src=\"https://codesandbox.io/static/img/play-codesandbox.svg\">\n</a>\n\n## 安装\n### web 端\n#### 安装本体\n\n```bash\n$ npm i -S tua-api\n# OR\n$ yarn add tua-api\n```\n\n然后直接导入即可\n\n```js\nimport TuaApi from 'tua-api'\n```\n\n#### 配置武器\n配置“武器”分为两种情况:\n\n* [已配置 CORS 跨域请求头](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS)，或是没有跨域需求时，无需任何操作（默认采用的就是 `axios`）。\n\n* 若是用不了 CORS，那么就需要设置 `reqType: 'jsonp'` 借助 jsonp 实现跨域\n\n但是 jsonp 只支持使用 get 的方式请求，所以如果需要发送 post 或其他方式的请求，还是需要使用 `axios`（服务端还是需要配置 CORS）。\n\n### 小程序端\n#### 安装本体即可\n\n```bash\n$ npm i -S tua-api\n# OR\n$ yarn add tua-api\n```\n\n```js\nimport TuaApi from 'tua-api'\n```\n\n> 小程序还用不了 npm？[@tua-mp/service](https://tuateam.github.io/tua-mp/tua-mp-service/) 了解一下？\n\n## `tua-api` 能干什么？\n`tua-api` 能实现统一管理 api 配置（例如一般放在 `src/apis/` 下）。经过处理后，业务侧代码只需要这样写即可：\n\n```js\nimport { fooApi } from '@/apis/'\n\nfooApi\n    .bar({ a: '1', b: '2' }) // 发起请求，a、b 是请求参数\n    .then(console.log)       // 收到响应\n    .catch(console.error)    // 处理错误\n```\n\n不仅如此，还有一些其他功能：\n\n* 参数校验\n* 默认参数\n* 中间件（koa 风格）\n* ...\n\n```js\n// 甚至可以更进一步和 tua-storage 配合使用\nimport TuaStorage from 'tua-storage'\nimport { getSyncFnMapByApis } from 'tua-api'\n\n// 本地写好的各种接口配置\nimport * as apis from '@/apis'\n\nconst tuaStorage = new TuaStorage({\n    syncFnMap: getSyncFnMapByApis(apis),\n})\n\nconst fetchParam = {\n    key: fooApi.bar.key,\n    syncParams: { a: 'a', b: 'b' },\n\n    // 过期时间，默认值为实例化时的值，以秒为单位\n    expires: 10,\n\n    // 是否直接调用同步函数更新数据，默认为 false\n    // 适用于需要强制更新数据的场景，例如小程序中的下拉刷新\n    isForceUpdate: true,\n\n    // ...\n}\n\ntuaStorage\n    .load(fetchParam)\n    .then(console.log)\n    .catch(console.error)\n```\n\n## 怎么写 `api` 配置？\n拿以下 api 地址举例：\n\n* `https://example-base.com/foo/bar/something/create`\n* `https://example-base.com/foo/bar/something/modify`\n* `https://example-base.com/foo/bar/something/delete`\n\n### 地址结构划分\n以上地址，一般将其分为`3`部分：\n\n* baseUrl: `'https://example-base.com/foo/bar'`\n* prefix: `'something'`\n* pathList: `[ 'create', 'modify', 'delete' ]`\n\n### 文件结构\n`api/` 一般是这样的文件结构：\n\n```\n.\n└── apis\n    ├── prefix-1.js\n    ├── prefix-2.js\n    ├── something.js // <-- 以上的 api 地址会放在这里，名字随意\n    └── index.js\n```\n\n### 基础配置内容\n```js\n// src/apis/something.js\n\nexport default {\n    // 接口基础地址\n    baseUrl: 'https://example-base.com/foo/bar',\n\n    // 接口的中间路径\n    prefix: 'something',\n\n    // 接口地址数组\n    pathList: [\n        { path: 'create' },\n        { path: 'modify' },\n        { path: 'delete' },\n    ],\n}\n```\n\n[更多配置请点击这里查看](https://tuateam.github.io/tua-api/config/common.html)\n\n### 配置导出\n最后来看一下 `apis/index.js` 该怎么写：\n\n```js\nimport TuaApi from 'tua-api'\n\n// 初始化\nconst tuaApi = new TuaApi({ ... })\n\n// 使用中间件\ntuaApi\n    .use(async (ctx, next) => {\n        // 请求发起前\n        console.log('before: ', ctx)\n\n        await next()\n\n        // 响应返回后\n        console.log('after: ', ctx)\n    })\n    // 链式调用\n    .use(...)\n\nexport const fakeGet = tuaApi.getApi(require('./fake-get').default)\nexport const fakePost = tuaApi.getApi(require('./fake-post').default)\n```\n\n小程序端建议使用 [@tua-mp/cli](https://tuateam.github.io/tua-mp/tua-mp-cli/) 一键生成 api。\n\n```bash\n$ tuamp add api <api-name>\n```\n\n### 配置的构成\n在 `tua-api` 中配置分为四种：\n\n* [默认配置（调用 `new TuaApi({ ... })` 时传递的）](https://tuateam.github.io/tua-api/config/default.html)\n* [公共配置（和 `pathList` 同级的配置）](https://tuateam.github.io/tua-api/config/common.html)\n* [自身配置（`pathList` 数组中的对象上的配置）](https://tuateam.github.io/tua-api/config/self.html)\n* [运行配置（在实际调用接口时传递的配置）](https://tuateam.github.io/tua-api/config/runtime.html)\n\n其中优先级自然是:\n\n`默认配置 < 公共配置 < 自身配置 < 运行配置`\n\n<p align=\"center\">\n    <a href=\"https://tuateam.github.io/tua-api/config/\">👉更多配置点击这里👈</a>\n</p>\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tr>\n    <td align=\"center\"><a href=\"https://buptsteve.github.io\"><img src=\"https://avatars2.githubusercontent.com/u/11501493?v=4\" width=\"100px;\" alt=\"StEve Young\"/><br /><sub><b>StEve Young</b></sub></a><br /><a href=\"https://github.com/tuateam/tua-api/commits?author=BuptStEve\" title=\"Code\">💻</a> <a href=\"https://github.com/tuateam/tua-api/commits?author=BuptStEve\" title=\"Documentation\">📖</a> <a href=\"#infra-BuptStEve\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a></td>\n    <td align=\"center\"><a href=\"https://github.com/evinma\"><img src=\"https://avatars2.githubusercontent.com/u/16096567?v=4\" width=\"100px;\" alt=\"evinma\"/><br /><sub><b>evinma</b></sub></a><br /><a href=\"https://github.com/tuateam/tua-api/commits?author=evinma\" title=\"Code\">💻</a></td>\n  </tr>\n</table>\n\n<!-- markdownlint-enable -->\n<!-- prettier-ignore-end -->\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","readmeFilename":"README.md","gitHead":"38c1dd9c4e37d00a8cc4b7ab646feb0898159686","bugs":{"url":"https://github.com/tuateam/tua-api/issues"},"_id":"tua-api@1.4.4-0","_nodeVersion":"10.16.2","_npmVersion":"6.9.0","dist":{"integrity":"sha512-tM1NLQ+wE0xROSKEtiexv3mEfw+wNFB62BPYSPekoz1NA3m6ZTTVY32Ze/YzQF92ipSTQ8i1NI+umnwSM7N7Eg==","shasum":"0bfffc5b21a7d6f83f0acab06bb51de7fbc012c7","tarball":"https://registry.npmjs.org/tua-api/-/tua-api-1.4.4-0.tgz","fileCount":31,"unpackedSize":171927,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeSfl1CRA9TVsSAnZWagAALrAP/3ztpsegs4gULGbzxD4J\nLY6qQ10yVlhi0Qi6WQ5pN57xpz6iwVwUJn6dIEHpAr64u8qFwkwClHredD45\n3Pp2k7knZxkz3i5p+sPUSnfXVbupAK0mHAJyr8wGcGQMj9KkWnkwF++TsgrK\nhkxIPZxQCeRs+lcmcy6017E4sR2yQoSRJczJQJZdYX3ZpkhX52JYKtRJi+kH\nhT/Xy3QEKjg5zK2oCZKumHmBLVha1BN0wBiY17lknKX59ok09FhqGOK/YRr7\nYc1JaNrpeDWnMw3gXlybPlSPK4KJwiusZuYv1nicTbMY+9EFu2H6iKs264br\nhdcyvV/ISiUMmDQ7w2vINavgEeHs5yxQjVHtMsouo1JPOQ3WQv1UnKmBDQCF\nDVR4FvJZTmiKp33LHKw78Snul8hFDNvVK8pfKO9wHKD3829jYmsl4awubYxJ\nlKePzCT48nr9dicE/1lehv3UOb8NaW0mKtUjtnPQKKQSY8iMFyGvwqlmPuEe\nGuzieC4bjZP13Q8j+oD8ExI9S5Rbtx3x2PzafGWPqpDSIo/R72peBLEhjda9\nfFCxkuMQXuXC/KEds8ERB343f4NwdQqQANJy1N4bafMqMQr8Aq5CHmGGaPYG\nixllJbtO8D5C9p6u/48I1z4WYbIjnFqZ8aOc5mloc/YxpZEH7TnzZv3RiFp+\noGWz\r\n=W3+P\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID09OeWX6gc2Sp1ZqrCGhhzxEsS9tY3tRWHlkghpUWNYAiEAljPnJkGF9Wrff0Q5ocU1PwBOATjD0mkJtyfzZ29EqIQ="}]},"maintainers":[{"email":"yangzhenyu2016@gmail.com","name":"buptsteve"}],"_npmUser":{"name":"buptsteve","email":"yangzhenyu2016@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tua-api_1.4.4-0_1581906293473_0.9468677008808695"},"_hasShrinkwrap":false},"1.4.4-1":{"name":"tua-api","version":"1.4.4-1","description":"🏗 A common tool helps converting configs to api functions","main":"dist/TuaApi.cjs.js","module":"dist/TuaApi.esm.js","unpkg":"dist/TuaApi.umd.js","jsdelivr":"dist/TuaApi.umd.js","types":"src/index.d.ts","scripts":{"cov":"open coverage/lcov-report/index.html","docs":"vuepress dev docs","docs:build":"vuepress build docs","lint":"eslint --fix . docs/.vuepress/ --ignore-path .gitignore","test":"cross-env NODE_ENV=test jest","test:tdd":"cross-env NODE_ENV=test jest --watch","prebuild":"rimraf dist/* & npm run test","build":"cross-env NODE_ENV=production rollup -c","deploy":"npm run docs:build && gh-pages -m \"[ci skip]\" -d docs/.vuepress/dist","next:pm":"npm --no-git-tag-version version preminor","next:pr":"npm --no-git-tag-version version prerelease","pub":"npm run build && npm publish","pub:n":"npm run build && npm publish --tag next"},"husky":{"hooks":{"pre-push":"npm test","pre-commit":"lint-staged","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"lint-staged":{"{src,test}/**/*.js":["eslint --fix"]},"eslintIgnore":["dist/*","!.eslintrc.js","package.json"],"dependencies":{"axios":"^0.19.2","fetch-jsonp":"^1.1.3","koa-compose":"^4.1.0"},"devDependencies":{"@babel/core":"^7.8.4","@babel/plugin-external-helpers":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/preset-env":"^7.8.4","@commitlint/cli":"^8.3.5","@commitlint/config-conventional":"^8.3.4","@types/jest":"^25.1.2","all-contributors-cli":"^6.13.0","axios-mock-adapter":"^1.17.0","babel-core":"^7.0.0-bridge.0","babel-eslint":"^10.0.3","babel-jest":"^25.1.0","codecov":"^3.6.5","cross-env":"^7.0.0","eslint":"^6.8.0","eslint-config-standard":"^14.1.0","eslint-plugin-import":"^2.20.1","eslint-plugin-node":"^11.0.0","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","gh-pages":"^2.2.0","husky":"^4.2.3","jest":"^25.1.0","lint-staged":"^10.0.7","rimraf":"^3.0.2","rollup":"^1.31.1","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-replace":"^2.2.0","rollup-plugin-uglify":"^6.0.4","typescript":"^3.7.5","vuepress":"^1.3.0"},"repository":{"type":"git","url":"git+https://github.com/tuateam/tua-api.git"},"homepage":"https://tuateam.github.io/tua-api/","author":{"name":"StEve Young"},"license":"MIT","readme":"<h1 align=\"center\">tua-api</h1>\n\n<h4 align=\"center\">让我们优雅地调用 api~</h4>\n\n<p align=\"center\">\n    <a href=\"https://tuateam.github.io/tua-api/\">👉完整文档地址点这里👈</a>\n</p>\n\n<p align=\"center\">\n    <a href=\"https://circleci.com/gh/tuateam/tua-api/tree/master\" target=\"_blank\">\n        <img src=\"https://img.shields.io/circleci/project/github/tuateam/tua-api/master.svg\" alt=\"Build Status\">\n    </a>\n    <a href=\"https://codecov.io/github/tuateam/tua-api?branch=master\" target=\"_blank\">\n        <img src=\"https://img.shields.io/codecov/c/github/tuateam/tua-api/master.svg\" alt=\"Coverage Status\">\n    </a>\n    <a href=\"https://david-dm.org/tuateam/tua-api\" target=\"_blank\">\n        <img src=\"https://david-dm.org/tuateam/tua-api.svg\" alt=\"dependencies\">\n    </a>\n    <a href=\"https://www.npmjs.com/package/tua-api\" target=\"_blank\">\n        <img src=\"https://badgen.net/npm/dm/tua-api\" alt=\"Downloads per month\">\n        <img src=\"https://img.shields.io/npm/v/tua-api.svg\" alt=\"Version\">\n        <img src=\"https://img.shields.io/npm/v/tua-api/next.svg\" alt=\"Next Version\">\n        <img src=\"https://img.shields.io/npm/l/tua-api.svg\" alt=\"License\">\n    </a>\n</p>\n\n## `tua-api` 是什么？\n`tua-api` 是一个针对发起 api 请求提供辅助功能的库。采用 ES6+ 语法，并采用 jest 进行了完整的单元测试。\n\n目前已适配：\n\n* web 端：axios, fetch-jsonp\n* Node 端：axios\n* 小程序端：wx.request\n\n<a href=\"https://codesandbox.io/s/2o24xn0750\" target=\"_blank\">\n    <img alt=\"Edit tua-api github example\" src=\"https://codesandbox.io/static/img/play-codesandbox.svg\">\n</a>\n\n## 安装\n### web 端\n#### 安装本体\n\n```bash\n$ npm i -S tua-api\n# OR\n$ yarn add tua-api\n```\n\n然后直接导入即可\n\n```js\nimport TuaApi from 'tua-api'\n```\n\n#### 配置武器\n配置“武器”分为两种情况:\n\n* [已配置 CORS 跨域请求头](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS)，或是没有跨域需求时，无需任何操作（默认采用的就是 `axios`）。\n\n* 若是用不了 CORS，那么就需要设置 `reqType: 'jsonp'` 借助 jsonp 实现跨域\n\n但是 jsonp 只支持使用 get 的方式请求，所以如果需要发送 post 或其他方式的请求，还是需要使用 `axios`（服务端还是需要配置 CORS）。\n\n### 小程序端\n#### 安装本体即可\n\n```bash\n$ npm i -S tua-api\n# OR\n$ yarn add tua-api\n```\n\n```js\nimport TuaApi from 'tua-api'\n```\n\n> 小程序还用不了 npm？[@tua-mp/service](https://tuateam.github.io/tua-mp/tua-mp-service/) 了解一下？\n\n## `tua-api` 能干什么？\n`tua-api` 能实现统一管理 api 配置（例如一般放在 `src/apis/` 下）。经过处理后，业务侧代码只需要这样写即可：\n\n```js\nimport { fooApi } from '@/apis/'\n\nfooApi\n    .bar({ a: '1', b: '2' }) // 发起请求，a、b 是请求参数\n    .then(console.log)       // 收到响应\n    .catch(console.error)    // 处理错误\n```\n\n不仅如此，还有一些其他功能：\n\n* 参数校验\n* 默认参数\n* 中间件（koa 风格）\n* ...\n\n```js\n// 甚至可以更进一步和 tua-storage 配合使用\nimport TuaStorage from 'tua-storage'\nimport { getSyncFnMapByApis } from 'tua-api'\n\n// 本地写好的各种接口配置\nimport * as apis from '@/apis'\n\nconst tuaStorage = new TuaStorage({\n    syncFnMap: getSyncFnMapByApis(apis),\n})\n\nconst fetchParam = {\n    key: fooApi.bar.key,\n    syncParams: { a: 'a', b: 'b' },\n\n    // 过期时间，默认值为实例化时的值，以秒为单位\n    expires: 10,\n\n    // 是否直接调用同步函数更新数据，默认为 false\n    // 适用于需要强制更新数据的场景，例如小程序中的下拉刷新\n    isForceUpdate: true,\n\n    // ...\n}\n\ntuaStorage\n    .load(fetchParam)\n    .then(console.log)\n    .catch(console.error)\n```\n\n## 怎么写 `api` 配置？\n拿以下 api 地址举例：\n\n* `https://example-base.com/foo/bar/something/create`\n* `https://example-base.com/foo/bar/something/modify`\n* `https://example-base.com/foo/bar/something/delete`\n\n### 地址结构划分\n以上地址，一般将其分为`3`部分：\n\n* baseUrl: `'https://example-base.com/foo/bar'`\n* prefix: `'something'`\n* pathList: `[ 'create', 'modify', 'delete' ]`\n\n### 文件结构\n`api/` 一般是这样的文件结构：\n\n```\n.\n└── apis\n    ├── prefix-1.js\n    ├── prefix-2.js\n    ├── something.js // <-- 以上的 api 地址会放在这里，名字随意\n    └── index.js\n```\n\n### 基础配置内容\n```js\n// src/apis/something.js\n\nexport default {\n    // 接口基础地址\n    baseUrl: 'https://example-base.com/foo/bar',\n\n    // 接口的中间路径\n    prefix: 'something',\n\n    // 接口地址数组\n    pathList: [\n        { path: 'create' },\n        { path: 'modify' },\n        { path: 'delete' },\n    ],\n}\n```\n\n[更多配置请点击这里查看](https://tuateam.github.io/tua-api/config/common.html)\n\n### 配置导出\n最后来看一下 `apis/index.js` 该怎么写：\n\n```js\nimport TuaApi from 'tua-api'\n\n// 初始化\nconst tuaApi = new TuaApi({ ... })\n\n// 使用中间件\ntuaApi\n    .use(async (ctx, next) => {\n        // 请求发起前\n        console.log('before: ', ctx)\n\n        await next()\n\n        // 响应返回后\n        console.log('after: ', ctx)\n    })\n    // 链式调用\n    .use(...)\n\nexport const fakeGet = tuaApi.getApi(require('./fake-get').default)\nexport const fakePost = tuaApi.getApi(require('./fake-post').default)\n```\n\n小程序端建议使用 [@tua-mp/cli](https://tuateam.github.io/tua-mp/tua-mp-cli/) 一键生成 api。\n\n```bash\n$ tuamp add api <api-name>\n```\n\n### 配置的构成\n在 `tua-api` 中配置分为四种：\n\n* [默认配置（调用 `new TuaApi({ ... })` 时传递的）](https://tuateam.github.io/tua-api/config/default.html)\n* [公共配置（和 `pathList` 同级的配置）](https://tuateam.github.io/tua-api/config/common.html)\n* [自身配置（`pathList` 数组中的对象上的配置）](https://tuateam.github.io/tua-api/config/self.html)\n* [运行配置（在实际调用接口时传递的配置）](https://tuateam.github.io/tua-api/config/runtime.html)\n\n其中优先级自然是:\n\n`默认配置 < 公共配置 < 自身配置 < 运行配置`\n\n<p align=\"center\">\n    <a href=\"https://tuateam.github.io/tua-api/config/\">👉更多配置点击这里👈</a>\n</p>\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tr>\n    <td align=\"center\"><a href=\"https://buptsteve.github.io\"><img src=\"https://avatars2.githubusercontent.com/u/11501493?v=4\" width=\"100px;\" alt=\"StEve Young\"/><br /><sub><b>StEve Young</b></sub></a><br /><a href=\"https://github.com/tuateam/tua-api/commits?author=BuptStEve\" title=\"Code\">💻</a> <a href=\"https://github.com/tuateam/tua-api/commits?author=BuptStEve\" title=\"Documentation\">📖</a> <a href=\"#infra-BuptStEve\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a></td>\n    <td align=\"center\"><a href=\"https://github.com/evinma\"><img src=\"https://avatars2.githubusercontent.com/u/16096567?v=4\" width=\"100px;\" alt=\"evinma\"/><br /><sub><b>evinma</b></sub></a><br /><a href=\"https://github.com/tuateam/tua-api/commits?author=evinma\" title=\"Code\">💻</a></td>\n  </tr>\n</table>\n\n<!-- markdownlint-enable -->\n<!-- prettier-ignore-end -->\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","readmeFilename":"README.md","gitHead":"ad1afe2d31ee226ff445cfd6ba17a983e1200b2d","bugs":{"url":"https://github.com/tuateam/tua-api/issues"},"_id":"tua-api@1.4.4-1","_nodeVersion":"10.16.2","_npmVersion":"6.9.0","dist":{"integrity":"sha512-TVK3NpI8mh0HE/5GwRLQMWSO1X5+oL7yEG9ENzjZXGZjVahwABjGKnSddJiqs1/iXWdg0B6RSIVFxaU5ZgwVOA==","shasum":"6a3768a99392f72e74d2ae9bc3d948bf4476bb10","tarball":"https://registry.npmjs.org/tua-api/-/tua-api-1.4.4-1.tgz","fileCount":31,"unpackedSize":171978,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeSf0WCRA9TVsSAnZWagAAPmIP/AqNI41kxAxZ6fPmTFiF\noBtBu4+xee5FmbHfBwGmKNdPuQYjxhdhBijZAM2yC5gUc+2Yzo68e7Gf92zX\niVDynb5QOOwn982QfVrVVd91mk7n7pf6GIUkuaMzmprPAvo7MD4dYLQLbBrC\nCUUB/eNNC51cDH0BoQv4bh9juI16b+OPkNhP/59ytS0+CDm9ZwYQRZRq1wgw\nCLadUaFpvG+7kD1dnEYav2Bm6tKvZUAEWdGjFU9f5/df9shfkWESCXY6RtQR\n4gftEtYIfG8esA/jT2IoPLHkaByZk3UL4Tcw6cywa5ItRYBwglPHxHUIGFTN\nISh/reBxiUdbzVQDaqt2MftsSPtrBnbuv0E50oJxUN4o8TpLlfXq8+pj8jJH\nrbDdvVAq4+JVuRFE2i5Gpwqq30rR7n+NN32EmOUUtxEHyyWLY9PMI0Q5S8SC\n2csF79eRKvVFLYjcDRS+PsXwhmIqMrv/9rsS+jvHYpnXNmlJgezc4TUVMivC\nXZTFs8SPkw5oft/L82coneCX2pUXMDKc+Z535MKK5QnwyQ81vf+SduSFR2Y8\n4ul4Pw3kFNL9jhpF9D+jZBFWpiqPWD6BsC+poAL5tmG+6oBBWg3iJS5AUU6z\niMSCxXCKtCuVbc0gmUw7t/MSq4Lb3ab8NFw5lpV9jgK408spyXzLNW8YOCF+\nvU5l\r\n=+ql2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDoAja+iVpKZlHb4KUQbNISpPN7Iki+rN+9CWj4a4JDyAiEAm+yHlcHvuQ+J0yYwHGRaNtfINBsIVRXsBzp2t7RMxF4="}]},"maintainers":[{"email":"yangzhenyu2016@gmail.com","name":"buptsteve"}],"_npmUser":{"name":"buptsteve","email":"yangzhenyu2016@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tua-api_1.4.4-1_1581907222169_0.9819840708942007"},"_hasShrinkwrap":false},"1.4.4":{"name":"tua-api","version":"1.4.4","description":"🏗 A common tool helps converting configs to api functions","main":"dist/TuaApi.cjs.js","module":"dist/TuaApi.esm.js","unpkg":"dist/TuaApi.umd.js","jsdelivr":"dist/TuaApi.umd.js","types":"src/index.d.ts","scripts":{"cov":"open coverage/lcov-report/index.html","docs":"vuepress dev docs","docs:build":"vuepress build docs","lint":"eslint --fix . docs/.vuepress/ --ignore-path .gitignore","test":"cross-env NODE_ENV=test jest","test:tdd":"cross-env NODE_ENV=test jest --watch","prebuild":"rimraf dist/* & npm run test","build":"cross-env NODE_ENV=production rollup -c","deploy":"npm run docs:build && gh-pages -m \"[ci skip]\" -d docs/.vuepress/dist","next:pm":"npm --no-git-tag-version version preminor","next:pr":"npm --no-git-tag-version version prerelease","pub":"npm run build && npm publish","pub:n":"npm run build && npm publish --tag next"},"husky":{"hooks":{"pre-push":"npm test","pre-commit":"lint-staged","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"lint-staged":{"{src,test}/**/*.js":["eslint --fix"]},"eslintIgnore":["dist/*","!.eslintrc.js","package.json"],"dependencies":{"axios":"^0.19.2","fetch-jsonp":"^1.1.3","koa-compose":"^4.1.0"},"devDependencies":{"@babel/core":"^7.8.4","@babel/plugin-external-helpers":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/preset-env":"^7.8.4","@commitlint/cli":"^8.3.5","@commitlint/config-conventional":"^8.3.4","@types/jest":"^25.1.2","all-contributors-cli":"^6.13.0","axios-mock-adapter":"^1.17.0","babel-core":"^7.0.0-bridge.0","babel-eslint":"^10.0.3","babel-jest":"^25.1.0","codecov":"^3.6.5","cross-env":"^7.0.0","eslint":"^6.8.0","eslint-config-standard":"^14.1.0","eslint-plugin-import":"^2.20.1","eslint-plugin-node":"^11.0.0","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","gh-pages":"^2.2.0","husky":"^4.2.3","jest":"^25.1.0","lint-staged":"^10.0.7","rimraf":"^3.0.2","rollup":"^1.31.1","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-replace":"^2.2.0","rollup-plugin-uglify":"^6.0.4","typescript":"^3.7.5","vuepress":"^1.3.0"},"repository":{"type":"git","url":"git+https://github.com/tuateam/tua-api.git"},"homepage":"https://tuateam.github.io/tua-api/","author":{"name":"StEve Young"},"license":"MIT","gitHead":"f42ee0edf321a0509e756f54b19435c387cb12ce","bugs":{"url":"https://github.com/tuateam/tua-api/issues"},"_id":"tua-api@1.4.4","_nodeVersion":"10.16.2","_npmVersion":"6.9.0","dist":{"integrity":"sha512-6tGzQ7hwEEJ2w5FXhi8rsGuAYUNovE1uhOvm3eERxOdDFHhtY2je5LQ1pGO1d7XmrX4zplKh/0ECsfG8n/P7Gg==","shasum":"d9c88139714a3f4c4abbec17250e6c96288741ee","tarball":"https://registry.npmjs.org/tua-api/-/tua-api-1.4.4.tgz","fileCount":31,"unpackedSize":173265,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeSgswCRA9TVsSAnZWagAADpUQAIUOPiJE2gIAMRXF8nXn\nfYbu6bWc8lV6KSz3h4m5ducKtQyodu7AzxyNOuY84NFwR6HUGsmWUjbhYK7d\nU7yC2MmzRe0+VZ98sQ2WjAdRSV+hpacafVOKaGHs0HVpdSiP6G0aqUFs9c+I\n17ZRJBP29BXttRnP87v+cVkR6i2UX1spOH06KMLc+d0fTvgKmQwNtVXsSjf+\nsS/JgUHXzHUpA+Uq7XJ8wIGD+1xJaiqKbYXbwoAtWjPddb7D+9ut259l2u5n\n6rwDKR+jowyymj/Pnf+GdHlzmUpdTGag8tnx+oVx1085qYyaSVYWo1zi32dL\nNENPIXpyh8XUlrmdU/cx6IiwsahLpr7UBC+xmNFmtnHRhYmCos1ZZFxk3Ro1\n1sYUkL3SNhWJUZJeQL4fl2WB8BgUZU3nFeouaPtKIceBwv37JJsfPj15faJY\n07CnqZ9tnv93DP+vZ5g9NqsEriYWSGkf6FVOjAVJKMSmrY9kNV0Ui3S19X0A\nnuDtXIjSMaZhS8hZWUWKJtappJcEcIcIAQq3lqXs0474QEZBfYqZRsx9bcap\n1tz0BFGdHJnM9C0Yx7fi7PlQx1qk6XSqRYSwPtNunVUGKG7jQsXn3jy+bU52\nVCfu6UCbI6BBU12YorIjJEVWVxUVZ3HF7J8XIBgrBItAig+Vro8Gnx44gsx7\nU3c3\r\n=n7ur\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA0KYlTvoEHZHZmrsT03UI6OTgoTcDggGZQdrl3lBiHmAiAk+xLY+HMZTzo9rzFT+2HyhYYe8E3SCKHhBx1FE02W1w=="}]},"maintainers":[{"email":"yangzhenyu2016@gmail.com","name":"buptsteve"}],"_npmUser":{"name":"buptsteve","email":"yangzhenyu2016@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tua-api_1.4.4_1581910832336_0.17896610584028805"},"_hasShrinkwrap":false},"1.5.0-0":{"name":"tua-api","version":"1.5.0-0","description":"🏗 A common tool helps converting configs to api functions","main":"dist/TuaApi.cjs.js","module":"dist/TuaApi.esm.js","unpkg":"dist/TuaApi.umd.js","jsdelivr":"dist/TuaApi.umd.js","types":"src/index.d.ts","scripts":{"cov":"open coverage/lcov-report/index.html","docs":"vuepress dev docs","docs:build":"vuepress build docs","lint":"eslint --fix . docs/.vuepress/ --ignore-path .gitignore","test":"cross-env NODE_ENV=test jest","test:tdd":"cross-env NODE_ENV=test jest --watch","prebuild":"rimraf dist/* & npm run test","build":"cross-env NODE_ENV=production rollup -c","deploy":"npm run docs:build && gh-pages -m \"[ci skip]\" -d docs/.vuepress/dist","next:pm":"npm --no-git-tag-version version preminor","next:pr":"npm --no-git-tag-version version prerelease","pub":"npm run build && npm publish","pub:n":"npm run build && npm publish --tag next"},"husky":{"hooks":{"pre-push":"npm test","pre-commit":"lint-staged","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"lint-staged":{"{src,test}/**/*.js":["eslint --fix"]},"eslintIgnore":["dist/*","!.eslintrc.js","package.json"],"dependencies":{"axios":"^0.19.2","fetch-jsonp":"^1.1.3","koa-compose":"^4.1.0"},"devDependencies":{"@babel/core":"^7.8.4","@babel/plugin-external-helpers":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/preset-env":"^7.8.4","@commitlint/cli":"^8.3.5","@commitlint/config-conventional":"^8.3.4","@types/jest":"^25.1.2","all-contributors-cli":"^6.13.0","axios-mock-adapter":"^1.17.0","babel-core":"^7.0.0-bridge.0","babel-eslint":"^10.0.3","babel-jest":"^25.1.0","codecov":"^3.6.5","cross-env":"^7.0.0","eslint":"^6.8.0","eslint-config-standard":"^14.1.0","eslint-plugin-import":"^2.20.1","eslint-plugin-node":"^11.0.0","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","gh-pages":"^2.2.0","husky":"^4.2.3","jest":"^25.1.0","lint-staged":"^10.0.7","rimraf":"^3.0.2","rollup":"^1.31.1","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-replace":"^2.2.0","rollup-plugin-uglify":"^6.0.4","typescript":"^3.7.5","vuepress":"^1.3.0"},"repository":{"type":"git","url":"git+https://github.com/tuateam/tua-api.git"},"homepage":"https://tuateam.github.io/tua-api/","author":{"name":"StEve Young"},"license":"MIT","readme":"<h1 align=\"center\">tua-api</h1>\n\n<h4 align=\"center\">让我们优雅地调用 api~</h4>\n\n<p align=\"center\">\n    <a href=\"https://tuateam.github.io/tua-api/\">👉完整文档地址点这里👈</a>\n</p>\n\n<p align=\"center\">\n    <a href=\"https://circleci.com/gh/tuateam/tua-api/tree/master\" target=\"_blank\">\n        <img src=\"https://img.shields.io/circleci/project/github/tuateam/tua-api/master.svg\" alt=\"Build Status\">\n    </a>\n    <a href=\"https://codecov.io/github/tuateam/tua-api?branch=master\" target=\"_blank\">\n        <img src=\"https://img.shields.io/codecov/c/github/tuateam/tua-api/master.svg\" alt=\"Coverage Status\">\n    </a>\n    <a href=\"https://david-dm.org/tuateam/tua-api\" target=\"_blank\">\n        <img src=\"https://david-dm.org/tuateam/tua-api.svg\" alt=\"dependencies\">\n    </a>\n    <a href=\"https://www.npmjs.com/package/tua-api\" target=\"_blank\">\n        <img src=\"https://badgen.net/npm/dm/tua-api\" alt=\"Downloads per month\">\n        <img src=\"https://img.shields.io/npm/v/tua-api.svg\" alt=\"Version\">\n        <img src=\"https://img.shields.io/npm/v/tua-api/next.svg\" alt=\"Next Version\">\n        <img src=\"https://img.shields.io/npm/l/tua-api.svg\" alt=\"License\">\n    </a>\n</p>\n\n## `tua-api` 是什么？\n`tua-api` 是一个针对发起 api 请求提供辅助功能的库。采用 ES6+ 语法，并采用 jest 进行了完整的单元测试。\n\n目前已适配：\n\n* web 端：axios, fetch-jsonp\n* Node 端：axios\n* 小程序端：wx.request\n\n<a href=\"https://codesandbox.io/s/2o24xn0750\" target=\"_blank\">\n    <img alt=\"Edit tua-api github example\" src=\"https://codesandbox.io/static/img/play-codesandbox.svg\">\n</a>\n\n## 安装\n### web 端\n#### 安装本体\n\n```bash\n$ npm i -S tua-api\n# OR\n$ yarn add tua-api\n```\n\n然后直接导入即可\n\n```js\nimport TuaApi from 'tua-api'\n```\n\n#### 配置武器\n配置“武器”分为两种情况:\n\n* [已配置 CORS 跨域请求头](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS)，或是没有跨域需求时，无需任何操作（默认采用的就是 `axios`）。\n\n* 若是用不了 CORS，那么就需要设置 `reqType: 'jsonp'` 借助 jsonp 实现跨域\n\n但是 jsonp 只支持使用 get 的方式请求，所以如果需要发送 post 或其他方式的请求，还是需要使用 `axios`（服务端还是需要配置 CORS）。\n\n### 小程序端\n#### 安装本体即可\n\n```bash\n$ npm i -S tua-api\n# OR\n$ yarn add tua-api\n```\n\n```js\nimport TuaApi from 'tua-api'\n```\n\n> 小程序还用不了 npm？[@tua-mp/service](https://tuateam.github.io/tua-mp/tua-mp-service/) 了解一下？\n\n## `tua-api` 能干什么？\n`tua-api` 能实现统一管理 api 配置（例如一般放在 `src/apis/` 下）。经过处理后，业务侧代码只需要这样写即可：\n\n```js\nimport { fooApi } from '@/apis/'\n\nfooApi\n    .bar({ a: '1', b: '2' }) // 发起请求，a、b 是请求参数\n    .then(console.log)       // 收到响应\n    .catch(console.error)    // 处理错误\n```\n\n不仅如此，还有一些其他功能：\n\n* 参数校验\n* 默认参数\n* 中间件（koa 风格）\n* ...\n\n```js\n// 甚至可以更进一步和 tua-storage 配合使用\nimport TuaStorage from 'tua-storage'\nimport { getSyncFnMapByApis } from 'tua-api'\n\n// 本地写好的各种接口配置\nimport * as apis from '@/apis'\n\nconst tuaStorage = new TuaStorage({\n    syncFnMap: getSyncFnMapByApis(apis),\n})\n\nconst fetchParam = {\n    key: fooApi.bar.key,\n    syncParams: { a: 'a', b: 'b' },\n\n    // 过期时间，默认值为实例化时的值，以秒为单位\n    expires: 10,\n\n    // 是否直接调用同步函数更新数据，默认为 false\n    // 适用于需要强制更新数据的场景，例如小程序中的下拉刷新\n    isForceUpdate: true,\n\n    // ...\n}\n\ntuaStorage\n    .load(fetchParam)\n    .then(console.log)\n    .catch(console.error)\n```\n\n## 怎么写 `api` 配置？\n拿以下 api 地址举例：\n\n* `https://example-base.com/foo/bar/something/create`\n* `https://example-base.com/foo/bar/something/modify`\n* `https://example-base.com/foo/bar/something/delete`\n\n### 地址结构划分\n以上地址，一般将其分为`3`部分：\n\n* baseUrl: `'https://example-base.com/foo/bar'`\n* prefix: `'something'`\n* pathList: `[ 'create', 'modify', 'delete' ]`\n\n### 文件结构\n`api/` 一般是这样的文件结构：\n\n```\n.\n└── apis\n    ├── prefix-1.js\n    ├── prefix-2.js\n    ├── something.js // <-- 以上的 api 地址会放在这里，名字随意\n    └── index.js\n```\n\n### 基础配置内容\n```js\n// src/apis/something.js\n\nexport default {\n    // 接口基础地址\n    baseUrl: 'https://example-base.com/foo/bar',\n\n    // 接口的中间路径\n    prefix: 'something',\n\n    // 接口地址数组\n    pathList: [\n        { path: 'create' },\n        { path: 'modify' },\n        { path: 'delete' },\n    ],\n}\n```\n\n[更多配置请点击这里查看](https://tuateam.github.io/tua-api/config/common.html)\n\n### 配置导出\n最后来看一下 `apis/index.js` 该怎么写：\n\n```js\nimport TuaApi from 'tua-api'\n\n// 初始化\nconst tuaApi = new TuaApi({ ... })\n\n// 使用中间件\ntuaApi\n    .use(async (ctx, next) => {\n        // 请求发起前\n        console.log('before: ', ctx)\n\n        await next()\n\n        // 响应返回后\n        console.log('after: ', ctx)\n    })\n    // 链式调用\n    .use(...)\n\nexport const fakeGet = tuaApi.getApi(require('./fake-get').default)\nexport const fakePost = tuaApi.getApi(require('./fake-post').default)\n```\n\n小程序端建议使用 [@tua-mp/cli](https://tuateam.github.io/tua-mp/tua-mp-cli/) 一键生成 api。\n\n```bash\n$ tuamp add api <api-name>\n```\n\n### 配置的构成\n在 `tua-api` 中配置分为四种：\n\n* [默认配置（调用 `new TuaApi({ ... })` 时传递的）](https://tuateam.github.io/tua-api/config/default.html)\n* [公共配置（和 `pathList` 同级的配置）](https://tuateam.github.io/tua-api/config/common.html)\n* [自身配置（`pathList` 数组中的对象上的配置）](https://tuateam.github.io/tua-api/config/self.html)\n* [运行配置（在实际调用接口时传递的配置）](https://tuateam.github.io/tua-api/config/runtime.html)\n\n其中优先级自然是:\n\n`默认配置 < 公共配置 < 自身配置 < 运行配置`\n\n<p align=\"center\">\n    <a href=\"https://tuateam.github.io/tua-api/config/\">👉更多配置点击这里👈</a>\n</p>\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tr>\n    <td align=\"center\"><a href=\"https://buptsteve.github.io\"><img src=\"https://avatars2.githubusercontent.com/u/11501493?v=4\" width=\"100px;\" alt=\"StEve Young\"/><br /><sub><b>StEve Young</b></sub></a><br /><a href=\"https://github.com/tuateam/tua-api/commits?author=BuptStEve\" title=\"Code\">💻</a> <a href=\"https://github.com/tuateam/tua-api/commits?author=BuptStEve\" title=\"Documentation\">📖</a> <a href=\"#infra-BuptStEve\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a></td>\n    <td align=\"center\"><a href=\"https://github.com/evinma\"><img src=\"https://avatars2.githubusercontent.com/u/16096567?v=4\" width=\"100px;\" alt=\"evinma\"/><br /><sub><b>evinma</b></sub></a><br /><a href=\"https://github.com/tuateam/tua-api/commits?author=evinma\" title=\"Code\">💻</a></td>\n  </tr>\n</table>\n\n<!-- markdownlint-enable -->\n<!-- prettier-ignore-end -->\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","readmeFilename":"README.md","gitHead":"72d440e672df582fd984e7389181d249f96d45d2","bugs":{"url":"https://github.com/tuateam/tua-api/issues"},"_id":"tua-api@1.5.0-0","_nodeVersion":"10.16.2","_npmVersion":"6.9.0","dist":{"integrity":"sha512-Ec0CBW8MlpK0x62ewTHwehf64SGLI16Oim9/gVUAm/v6oHoWCL8U+U2zONtUJM+vXvxO/GY24AY526IWFS6NQA==","shasum":"61f64d44cbca50f5cf4f62acaa73efde7aa5184b","tarball":"https://registry.npmjs.org/tua-api/-/tua-api-1.5.0-0.tgz","fileCount":31,"unpackedSize":175250,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeSiFbCRA9TVsSAnZWagAAaWoP/ikaUAon3yIf4zyLqKdW\nF7gpJu/aHRxSj1/Cp5WWMnqhs6QHgb8tAzf1WuGscb6LdeqDtOmlIUXJ3UsE\noUalk2CGdn9lFxusTycE7gZacSVhIUH3N3S2ujHlgpIbMTjS7uzz8nKqE1h2\nBm0NUN63AIrOjNMwLDot/eCV5rxPqCqNGyuUaaOfbwYM1vJT6w80PlfTnoxm\nYXrSfTQHBuvdVM/yfLjzxICLn42Zl/Aodoh48y3R0ewbWN/AneFx65iqrqKP\n88WgDQF4p41Ay8WMKpyyYfBGFyNSUM0zSp/6nyk0tbyj9WG+9qKkFKdPFEcN\nBF7Ccxr4IuHKrDwz1/THpf7uLC1d17LT/aPawNg5OM2ZUnvYaphxtppHVAKd\ncrDRMbjDBFbUbpMIQiMhl8xJfw5HUOzErujuydQIIj/j8XQC0dkTFxwVuKaE\nJPVcWIS7OZ8gYb7MqH14tDHazNAIjO4q/sbNJuwxGnXU22kiTsQg+qrzZJWB\nVwHok0HrVAonyEPV1V9nb7mJOlmeHWnRJznbqrk5QyBkctdw6mHomfamdjD8\nC7Mr5xnlfA4qX1K+/utdr2D0CbBND2tg5OR9M+cC7i2AKTBXgEGfFvV9bsnd\nD+awVYp0txc7A9HZi3otAOroskZ5tTt90/opAy4ur8MvdxwFwq4L3Bvhj6JG\n1FrP\r\n=ItT7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIERFj4IGDbxtAEtM4lVsGAo7UeHFbEX2Yq2Rd/l5FLnEAiAsfVPEa7jLhgspOifZDTErQzdUyXRBy/5SVua0keCqwA=="}]},"maintainers":[{"email":"yangzhenyu2016@gmail.com","name":"buptsteve"}],"_npmUser":{"name":"buptsteve","email":"yangzhenyu2016@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tua-api_1.5.0-0_1581916507014_0.11073144931085066"},"_hasShrinkwrap":false},"1.5.0-1":{"name":"tua-api","version":"1.5.0-1","description":"🏗 A common tool helps converting configs to api functions","main":"dist/TuaApi.cjs.js","module":"dist/TuaApi.esm.js","unpkg":"dist/TuaApi.umd.js","jsdelivr":"dist/TuaApi.umd.js","types":"src/index.d.ts","scripts":{"cov":"open coverage/lcov-report/index.html","docs":"vuepress dev docs","docs:build":"vuepress build docs","lint":"eslint --fix . docs/.vuepress/ --ignore-path .gitignore","test":"cross-env NODE_ENV=test jest","test:tdd":"cross-env NODE_ENV=test jest --watch","prebuild":"rimraf dist/* & npm run test","build":"cross-env NODE_ENV=production rollup -c","deploy":"npm run docs:build && gh-pages -m \"[ci skip]\" -d docs/.vuepress/dist","next:pm":"npm --no-git-tag-version version preminor","next:pr":"npm --no-git-tag-version version prerelease","pub":"npm run build && npm publish","pub:n":"npm run build && npm publish --tag next"},"husky":{"hooks":{"pre-push":"npm test","pre-commit":"lint-staged","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"lint-staged":{"{src,test}/**/*.js":["eslint --fix"]},"eslintIgnore":["dist/*","!.eslintrc.js","package.json"],"dependencies":{"axios":"^0.19.2","fetch-jsonp":"^1.1.3","koa-compose":"^4.1.0"},"devDependencies":{"@babel/core":"^7.8.4","@babel/plugin-external-helpers":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/preset-env":"^7.8.4","@commitlint/cli":"^8.3.5","@commitlint/config-conventional":"^8.3.4","@types/jest":"^25.1.2","all-contributors-cli":"^6.13.0","axios-mock-adapter":"^1.17.0","babel-core":"^7.0.0-bridge.0","babel-eslint":"^10.0.3","babel-jest":"^25.1.0","codecov":"^3.6.5","cross-env":"^7.0.0","eslint":"^6.8.0","eslint-config-standard":"^14.1.0","eslint-plugin-import":"^2.20.1","eslint-plugin-node":"^11.0.0","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","gh-pages":"^2.2.0","husky":"^4.2.3","jest":"^25.1.0","lint-staged":"^10.0.7","rimraf":"^3.0.2","rollup":"^1.31.1","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-replace":"^2.2.0","rollup-plugin-uglify":"^6.0.4","typescript":"^3.7.5","vuepress":"^1.3.0"},"repository":{"type":"git","url":"git+https://github.com/tuateam/tua-api.git"},"homepage":"https://tuateam.github.io/tua-api/","author":{"name":"StEve Young"},"license":"MIT","readme":"<h1 align=\"center\">tua-api</h1>\n\n<h4 align=\"center\">让我们优雅地调用 api~</h4>\n\n<p align=\"center\">\n    <a href=\"https://tuateam.github.io/tua-api/\">👉完整文档地址点这里👈</a>\n</p>\n\n<p align=\"center\">\n    <a href=\"https://circleci.com/gh/tuateam/tua-api/tree/master\" target=\"_blank\">\n        <img src=\"https://img.shields.io/circleci/project/github/tuateam/tua-api/master.svg\" alt=\"Build Status\">\n    </a>\n    <a href=\"https://codecov.io/github/tuateam/tua-api?branch=master\" target=\"_blank\">\n        <img src=\"https://img.shields.io/codecov/c/github/tuateam/tua-api/master.svg\" alt=\"Coverage Status\">\n    </a>\n    <a href=\"https://david-dm.org/tuateam/tua-api\" target=\"_blank\">\n        <img src=\"https://david-dm.org/tuateam/tua-api.svg\" alt=\"dependencies\">\n    </a>\n    <a href=\"https://www.npmjs.com/package/tua-api\" target=\"_blank\">\n        <img src=\"https://badgen.net/npm/dm/tua-api\" alt=\"Downloads per month\">\n        <img src=\"https://img.shields.io/npm/v/tua-api.svg\" alt=\"Version\">\n        <img src=\"https://img.shields.io/npm/v/tua-api/next.svg\" alt=\"Next Version\">\n        <img src=\"https://img.shields.io/npm/l/tua-api.svg\" alt=\"License\">\n    </a>\n</p>\n\n## `tua-api` 是什么？\n`tua-api` 是一个针对发起 api 请求提供辅助功能的库。采用 ES6+ 语法，并采用 jest 进行了完整的单元测试。\n\n目前已适配：\n\n* web 端：axios, fetch-jsonp\n* Node 端：axios\n* 小程序端：wx.request\n\n<a href=\"https://codesandbox.io/s/2o24xn0750\" target=\"_blank\">\n    <img alt=\"Edit tua-api github example\" src=\"https://codesandbox.io/static/img/play-codesandbox.svg\">\n</a>\n\n## 安装\n### web 端\n#### 安装本体\n\n```bash\n$ npm i -S tua-api\n# OR\n$ yarn add tua-api\n```\n\n然后直接导入即可\n\n```js\nimport TuaApi from 'tua-api'\n```\n\n#### 配置武器\n配置“武器”分为两种情况:\n\n* [已配置 CORS 跨域请求头](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS)，或是没有跨域需求时，无需任何操作（默认采用的就是 `axios`）。\n\n* 若是用不了 CORS，那么就需要设置 `reqType: 'jsonp'` 借助 jsonp 实现跨域\n\n但是 jsonp 只支持使用 get 的方式请求，所以如果需要发送 post 或其他方式的请求，还是需要使用 `axios`（服务端还是需要配置 CORS）。\n\n### 小程序端\n#### 安装本体即可\n\n```bash\n$ npm i -S tua-api\n# OR\n$ yarn add tua-api\n```\n\n```js\nimport TuaApi from 'tua-api'\n```\n\n> 小程序还用不了 npm？[@tua-mp/service](https://tuateam.github.io/tua-mp/tua-mp-service/) 了解一下？\n\n## `tua-api` 能干什么？\n`tua-api` 能实现统一管理 api 配置（例如一般放在 `src/apis/` 下）。经过处理后，业务侧代码只需要这样写即可：\n\n```js\nimport { fooApi } from '@/apis/'\n\nfooApi\n    .bar({ a: '1', b: '2' }) // 发起请求，a、b 是请求参数\n    .then(console.log)       // 收到响应\n    .catch(console.error)    // 处理错误\n```\n\n不仅如此，还有一些其他功能：\n\n* 参数校验\n* 默认参数\n* 中间件（koa 风格）\n* ...\n\n```js\n// 甚至可以更进一步和 tua-storage 配合使用\nimport TuaStorage from 'tua-storage'\nimport { getSyncFnMapByApis } from 'tua-api'\n\n// 本地写好的各种接口配置\nimport * as apis from '@/apis'\n\nconst tuaStorage = new TuaStorage({\n    syncFnMap: getSyncFnMapByApis(apis),\n})\n\nconst fetchParam = {\n    key: fooApi.bar.key,\n    syncParams: { a: 'a', b: 'b' },\n\n    // 过期时间，默认值为实例化时的值，以秒为单位\n    expires: 10,\n\n    // 是否直接调用同步函数更新数据，默认为 false\n    // 适用于需要强制更新数据的场景，例如小程序中的下拉刷新\n    isForceUpdate: true,\n\n    // ...\n}\n\ntuaStorage\n    .load(fetchParam)\n    .then(console.log)\n    .catch(console.error)\n```\n\n## 怎么写 `api` 配置？\n拿以下 api 地址举例：\n\n* `https://example-base.com/foo/bar/something/create`\n* `https://example-base.com/foo/bar/something/modify`\n* `https://example-base.com/foo/bar/something/delete`\n\n### 地址结构划分\n以上地址，一般将其分为`3`部分：\n\n* baseUrl: `'https://example-base.com/foo/bar'`\n* prefix: `'something'`\n* pathList: `[ 'create', 'modify', 'delete' ]`\n\n### 文件结构\n`api/` 一般是这样的文件结构：\n\n```\n.\n└── apis\n    ├── prefix-1.js\n    ├── prefix-2.js\n    ├── something.js // <-- 以上的 api 地址会放在这里，名字随意\n    └── index.js\n```\n\n### 基础配置内容\n```js\n// src/apis/something.js\n\nexport default {\n    // 接口基础地址\n    baseUrl: 'https://example-base.com/foo/bar',\n\n    // 接口的中间路径\n    prefix: 'something',\n\n    // 接口地址数组\n    pathList: [\n        { path: 'create' },\n        { path: 'modify' },\n        { path: 'delete' },\n    ],\n}\n```\n\n[更多配置请点击这里查看](https://tuateam.github.io/tua-api/config/common.html)\n\n### 配置导出\n最后来看一下 `apis/index.js` 该怎么写：\n\n```js\nimport TuaApi from 'tua-api'\n\n// 初始化\nconst tuaApi = new TuaApi({ ... })\n\n// 使用中间件\ntuaApi\n    .use(async (ctx, next) => {\n        // 请求发起前\n        console.log('before: ', ctx)\n\n        await next()\n\n        // 响应返回后\n        console.log('after: ', ctx)\n    })\n    // 链式调用\n    .use(...)\n\nexport const fakeGet = tuaApi.getApi(require('./fake-get').default)\nexport const fakePost = tuaApi.getApi(require('./fake-post').default)\n```\n\n小程序端建议使用 [@tua-mp/cli](https://tuateam.github.io/tua-mp/tua-mp-cli/) 一键生成 api。\n\n```bash\n$ tuamp add api <api-name>\n```\n\n### 配置的构成\n在 `tua-api` 中配置分为四种：\n\n* [默认配置（调用 `new TuaApi({ ... })` 时传递的）](https://tuateam.github.io/tua-api/config/default.html)\n* [公共配置（和 `pathList` 同级的配置）](https://tuateam.github.io/tua-api/config/common.html)\n* [自身配置（`pathList` 数组中的对象上的配置）](https://tuateam.github.io/tua-api/config/self.html)\n* [运行配置（在实际调用接口时传递的配置）](https://tuateam.github.io/tua-api/config/runtime.html)\n\n其中优先级自然是:\n\n`默认配置 < 公共配置 < 自身配置 < 运行配置`\n\n<p align=\"center\">\n    <a href=\"https://tuateam.github.io/tua-api/config/\">👉更多配置点击这里👈</a>\n</p>\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tr>\n    <td align=\"center\"><a href=\"https://buptsteve.github.io\"><img src=\"https://avatars2.githubusercontent.com/u/11501493?v=4\" width=\"100px;\" alt=\"StEve Young\"/><br /><sub><b>StEve Young</b></sub></a><br /><a href=\"https://github.com/tuateam/tua-api/commits?author=BuptStEve\" title=\"Code\">💻</a> <a href=\"https://github.com/tuateam/tua-api/commits?author=BuptStEve\" title=\"Documentation\">📖</a> <a href=\"#infra-BuptStEve\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a></td>\n    <td align=\"center\"><a href=\"https://github.com/evinma\"><img src=\"https://avatars2.githubusercontent.com/u/16096567?v=4\" width=\"100px;\" alt=\"evinma\"/><br /><sub><b>evinma</b></sub></a><br /><a href=\"https://github.com/tuateam/tua-api/commits?author=evinma\" title=\"Code\">💻</a></td>\n  </tr>\n</table>\n\n<!-- markdownlint-enable -->\n<!-- prettier-ignore-end -->\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","readmeFilename":"README.md","gitHead":"d475e7948060be1db7f7ab29f6e9f2384b47f080","bugs":{"url":"https://github.com/tuateam/tua-api/issues"},"_id":"tua-api@1.5.0-1","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"buptsteve","email":"yangzhenyu2016@gmail.com"},"dist":{"integrity":"sha512-2xGz3TN0D8AYDMTfBXl+4rAR+HkbWFythKYU+fOhXTETpqQk8QstQPzHw8PvW6TKtI1a8bzDlXT8vBX3jDWODw==","shasum":"0318f408757a66b1a5e0de3376d1593fdb553666","tarball":"https://registry.npmjs.org/tua-api/-/tua-api-1.5.0-1.tgz","fileCount":32,"unpackedSize":180670,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeXIecCRA9TVsSAnZWagAANnYP/0KVWKQ51UN1H71T0eO/\nejMyWLe6yUwKa5YplJ7gCpENC03hhjfdR3ehaYBTrUGk21hJjVGvcqg0O9tA\nNO3jfzzK+hb7ysZGVmpzlgm5c6/kDOkacYPpZ0fslRAi5rXDrjTsQWXpHUCE\nV5VYGE4wtZoCjShKaJi+xqNXpabS8SctEc0TGvbvWlpzutAaOR6pM9jbTRr6\njocjKNpqacwk7+ITdStmpk2c5dYQ1jLF3uh+dzERx6kVUG3yq8YdIaxYN0If\nFqXsJCsCJHzMOsDK1FiFpDd4/nTySv4sUANRpnB3IX6OKyPBRa2SyyTqH11p\noUXds1gsbD9iPxqS7Ggk8udORDOEvfp8eXeDl7U5ceygZTnUdwYUs0gcDjZM\nOlX8S1nUxpjguztBERptp0SR57+Fuq3ttOrk2oV2i1Wkru7zHLUbapicivOp\nVkgsETHvW1eMIImdtytrZqOMdzCfEnyCG7U9Cir+/gtO1MqqXz+b3DSD3Aqw\njVemPOb/qjoVZQCeEFDBCF+uETd1WaVparn1Ak0axW3F7EceHPdKhklFRvsk\nCh1mVBMBFknJ2581nFOkgwcDsjTiAMu9ojULVBJmqJPsgmF1+3GFAyUAo/fv\n05Za/dCOk0EDz6amu0HDui8V6C7bauJM+2zQg2ZsXZGU/VLZqdwJHV6K7tnh\nHSJe\r\n=+pF9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE+Fjtcj/z+MQSlSYK5UamKBq+tAdPvY+FCHh35s9USJAiB3VPonSLkOZbM3nk+Iugb7ZIX01FWLu5CnjQ2I1wfN8g=="}]},"maintainers":[{"email":"yangzhenyu2016@gmail.com","name":"buptsteve"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tua-api_1.5.0-1_1583122332405_0.8104560781088634"},"_hasShrinkwrap":false},"1.5.0":{"name":"tua-api","version":"1.5.0","description":"🏗 A common tool helps converting configs to api functions","main":"dist/TuaApi.cjs.js","module":"dist/TuaApi.esm.js","unpkg":"dist/TuaApi.umd.js","jsdelivr":"dist/TuaApi.umd.js","types":"src/index.d.ts","scripts":{"cov":"open coverage/lcov-report/index.html","docs":"vuepress dev docs","docs:build":"vuepress build docs","lint":"eslint --fix . docs/.vuepress/ --ignore-path .gitignore","test":"cross-env NODE_ENV=test jest","test:tdd":"cross-env NODE_ENV=test jest --watch","prebuild":"rimraf dist/* & npm run test","build":"cross-env NODE_ENV=production rollup -c","deploy":"npm run docs:build && gh-pages -m \"[ci skip]\" -d docs/.vuepress/dist","next:pm":"npm --no-git-tag-version version preminor","next:pr":"npm --no-git-tag-version version prerelease","pub":"npm run build && npm publish","pub:n":"npm run build && npm publish --tag next"},"husky":{"hooks":{"pre-push":"npm test","pre-commit":"lint-staged","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"lint-staged":{"{src,test}/**/*.js":["eslint --fix"]},"eslintIgnore":["dist/*","!.eslintrc.js","package.json"],"dependencies":{"axios":"^0.19.2","fetch-jsonp":"^1.1.3","koa-compose":"^4.1.0"},"devDependencies":{"@babel/core":"^7.8.4","@babel/plugin-external-helpers":"^7.8.3","@babel/plugin-proposal-decorators":"^7.8.3","@babel/plugin-proposal-object-rest-spread":"^7.8.3","@babel/preset-env":"^7.8.4","@commitlint/cli":"^8.3.5","@commitlint/config-conventional":"^8.3.4","@types/jest":"^25.1.2","all-contributors-cli":"^6.13.0","axios-mock-adapter":"^1.17.0","babel-core":"^7.0.0-bridge.0","babel-eslint":"^10.0.3","babel-jest":"^25.1.0","codecov":"^3.6.5","cross-env":"^7.0.0","eslint":"^6.8.0","eslint-config-standard":"^14.1.0","eslint-plugin-import":"^2.20.1","eslint-plugin-node":"^11.0.0","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","gh-pages":"^2.2.0","husky":"^4.2.3","jest":"^25.1.0","lint-staged":"^10.0.7","rimraf":"^3.0.2","rollup":"^1.31.1","rollup-plugin-babel":"^4.3.3","rollup-plugin-commonjs":"^10.1.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-json":"^4.0.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-replace":"^2.2.0","rollup-plugin-uglify":"^6.0.4","typescript":"^3.7.5","vuepress":"^1.3.0"},"repository":{"type":"git","url":"git+https://github.com/tuateam/tua-api.git"},"homepage":"https://tuateam.github.io/tua-api/","author":{"name":"StEve Young"},"license":"MIT","gitHead":"a83712a66c3ebbb1e5f279ee39f2af6d6defa544","bugs":{"url":"https://github.com/tuateam/tua-api/issues"},"_id":"tua-api@1.5.0","_nodeVersion":"10.16.2","_npmVersion":"6.9.0","dist":{"integrity":"sha512-G/74JfZ3K3jpk0yS8G5XIdBsCfpgtRMcmCrjVBYC8rayDPAjK9JOJFOT6+FW/mJZlJcWKd0GWJeSKXGINi9YPw==","shasum":"4b67ecc6542d86c77a62da78b9f432bcf099b8d3","tarball":"https://registry.npmjs.org/tua-api/-/tua-api-1.5.0.tgz","fileCount":31,"unpackedSize":175295,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeXcxxCRA9TVsSAnZWagAAg7YP/389TDYtiTe6rceYTN3K\nOCyNpZQWupZz1tobVSUU3salZYlgo1KAL8fTU6/nzTpKioSvhQXSLr5z4ux/\nOubd8ZpFUJbhU+VVpf0FV1C4wqDkw1/eIClrAjIX9OI0LclfxrcISqOiIsO7\nTIi5oZcRmssUVZSpOAW9V7pm+e//VMC6QglZp6ywMtF8Tl327p415afWaq9n\nMhwJBX0b6jxbrk3ZYIiXugAijH7M43rndITdZfJDwAmm5cHhsGcJjRtYaYmQ\nmRw1rLZA7/FFjIOHlpLGWj19enoxbCn3OdY5KEDo1Xrj4dRqtpBZm774WSry\nFmia3bTDahiy18xhCsGLds24SIeTmN/0AH8NiBCdv2qA4NPexZ79bL7sbEYJ\n/k8TsJlBKrkfWfq33KvW/AOFHRwvhaCfL2h+2zLehk5H1PrjAijEcnUnmhS4\nTJI8bYlH3CTtcoVH8XnxdZcGrYe+TPaYRrliHT3IArNZGLzPJte0G5rs+WrL\nl2pV6eOheaBLNWZMfzLmcEWc6XnFnmTk+t00OJaqcohlYaKcr4riMhEauwho\nNMoOY2hreWHA4JxbqotpakAozvmQBFZ8HswuEtenDNUK4VFPSxc7kwnG0eUI\njR2LtA7hLMKWmMsboxti0JC4yno1YaHrrvvYGlgz6UPF1MSVv7epk4bJnJ1U\nqCHN\r\n=E05w\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGq834fVakDr9xU5UEnhxVsgwM9lKXfc1WhoFKDwEIVdAiBlp+Q1Lc6OC5d/xvzcC+WXjqrUv6a2pFkklK9HKRa7RA=="}]},"maintainers":[{"email":"yangzhenyu2016@gmail.com","name":"buptsteve"}],"_npmUser":{"name":"buptsteve","email":"yangzhenyu2016@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tua-api_1.5.0_1583205488810_0.8633930166654726"},"_hasShrinkwrap":false},"1.6.0-0":{"name":"tua-api","version":"1.6.0-0","description":"🏗 A common tool helps converting configs to api functions","main":"dist/TuaApi.cjs.js","module":"dist/TuaApi.esm.js","unpkg":"dist/TuaApi.umd.js","jsdelivr":"dist/TuaApi.umd.js","types":"src/index.d.ts","scripts":{"cov":"open coverage/lcov-report/index.html","docs":"vuepress dev docs","docs:build":"vuepress build docs","lint":"eslint --fix . docs/.vuepress/ --ignore-path .gitignore","test":"cross-env NODE_ENV=test jest","test:tdd":"cross-env NODE_ENV=test jest --watch","prebuild":"rimraf dist/* & npm run test","build":"cross-env NODE_ENV=production rollup -c","deploy":"npm run docs:build && gh-pages -m \"[ci skip]\" -d docs/.vuepress/dist","next:pm":"npm --no-git-tag-version version preminor","next:pr":"npm --no-git-tag-version version prerelease","pub":"npm run build && npm publish","pub:n":"npm run build && npm publish --tag next"},"husky":{"hooks":{"pre-push":"npm test","pre-commit":"lint-staged","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"lint-staged":{"{src,test}/**/*.js":["eslint --fix"]},"eslintIgnore":["dist/*","!.eslintrc.js","package.json"],"dependencies":{"axios":"^0.19.2","fetch-jsonp":"^1.1.3","koa-compose":"^4.1.0"},"devDependencies":{"@babel/core":"^7.10.5","@babel/plugin-external-helpers":"^7.10.4","@babel/plugin-proposal-decorators":"^7.10.5","@babel/plugin-proposal-object-rest-spread":"^7.10.4","@babel/preset-env":"^7.10.4","@commitlint/cli":"^9.1.1","@commitlint/config-conventional":"^9.1.1","@rollup/plugin-babel":"^5.1.0","@rollup/plugin-commonjs":"^14.0.0","@rollup/plugin-json":"^4.1.0","@rollup/plugin-node-resolve":"^8.4.0","@rollup/plugin-replace":"^2.3.3","@types/jest":"^26.0.5","all-contributors-cli":"^6.16.1","axios-mock-adapter":"^1.18.2","babel-core":"^7.0.0-bridge.0","babel-eslint":"^10.1.0","babel-jest":"^26.1.0","codecov":"^3.7.1","cross-env":"^7.0.2","eslint":"^7.5.0","eslint-config-standard":"^14.1.1","eslint-plugin-import":"^2.22.0","eslint-plugin-node":"^11.1.0","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","gh-pages":"^3.1.0","husky":"^4.2.5","jest":"^26.1.0","lint-staged":"^10.2.11","rimraf":"^3.0.2","rollup":"^2.22.1","rollup-plugin-eslint":"^7.0.0","rollup-plugin-terser":"^6.1.0","typescript":"^3.9.7","vuepress":"^1.5.2"},"repository":{"type":"git","url":"git+https://github.com/tuateam/tua-api.git"},"homepage":"https://tuateam.github.io/tua-api/","author":{"name":"StEve Young"},"license":"MIT","readme":"<h1 align=\"center\">tua-api</h1>\n\n<h4 align=\"center\">让我们优雅地调用 api~</h4>\n\n<p align=\"center\">\n    <a href=\"https://tuateam.github.io/tua-api/\">👉完整文档地址点这里👈</a>\n</p>\n\n<p align=\"center\">\n    <a href=\"https://circleci.com/gh/tuateam/tua-api/tree/master\" target=\"_blank\">\n        <img src=\"https://img.shields.io/circleci/project/github/tuateam/tua-api/master.svg\" alt=\"Build Status\">\n    </a>\n    <a href=\"https://codecov.io/github/tuateam/tua-api?branch=master\" target=\"_blank\">\n        <img src=\"https://img.shields.io/codecov/c/github/tuateam/tua-api/master.svg\" alt=\"Coverage Status\">\n    </a>\n    <a href=\"https://david-dm.org/tuateam/tua-api\" target=\"_blank\">\n        <img src=\"https://david-dm.org/tuateam/tua-api.svg\" alt=\"dependencies\">\n    </a>\n    <a href=\"https://www.npmjs.com/package/tua-api\" target=\"_blank\">\n        <img src=\"https://badgen.net/npm/dm/tua-api\" alt=\"Downloads per month\">\n        <img src=\"https://img.shields.io/npm/v/tua-api.svg\" alt=\"Version\">\n        <img src=\"https://img.shields.io/npm/v/tua-api/next.svg\" alt=\"Next Version\">\n        <img src=\"https://img.shields.io/npm/l/tua-api.svg\" alt=\"License\">\n    </a>\n</p>\n\n## `tua-api` 是什么？\n`tua-api` 是一个针对发起 api 请求提供辅助功能的库。采用 ES6+ 语法，并采用 jest 进行了完整的单元测试。\n\n目前已适配：\n\n* web 端：axios, fetch-jsonp\n* Node 端：axios\n* 小程序端：wx.request\n\n<a href=\"https://codesandbox.io/s/2o24xn0750\" target=\"_blank\">\n    <img alt=\"Edit tua-api github example\" src=\"https://codesandbox.io/static/img/play-codesandbox.svg\">\n</a>\n\n## 安装\n### web 端\n#### 安装本体\n\n```bash\n$ npm i -S tua-api\n# OR\n$ yarn add tua-api\n```\n\n然后直接导入即可\n\n```js\nimport TuaApi from 'tua-api'\n```\n\n#### 配置武器\n配置“武器”分为两种情况:\n\n* [已配置 CORS 跨域请求头](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS)，或是没有跨域需求时，无需任何操作（默认采用的就是 `axios`）。\n\n* 若是用不了 CORS，那么就需要设置 `reqType: 'jsonp'` 借助 jsonp 实现跨域\n\n但是 jsonp 只支持使用 get 的方式请求，所以如果需要发送 post 或其他方式的请求，还是需要使用 `axios`（服务端还是需要配置 CORS）。\n\n### 小程序端\n#### 安装本体即可\n\n```bash\n$ npm i -S tua-api\n# OR\n$ yarn add tua-api\n```\n\n```js\nimport TuaApi from 'tua-api'\n```\n\n> 小程序还用不了 npm？[@tua-mp/service](https://tuateam.github.io/tua-mp/tua-mp-service/) 了解一下？\n\n## `tua-api` 能干什么？\n`tua-api` 能实现统一管理 api 配置（例如一般放在 `src/apis/` 下）。经过处理后，业务侧代码只需要这样写即可：\n\n```js\nimport { fooApi } from '@/apis/'\n\nfooApi\n    .bar({ a: '1', b: '2' }) // 发起请求，a、b 是请求参数\n    .then(console.log)       // 收到响应\n    .catch(console.error)    // 处理错误\n```\n\n不仅如此，还有一些其他功能：\n\n* 参数校验\n* 默认参数\n* 中间件（koa 风格）\n* ...\n\n```js\n// 甚至可以更进一步和 tua-storage 配合使用\nimport TuaStorage from 'tua-storage'\nimport { getSyncFnMapByApis } from 'tua-api'\n\n// 本地写好的各种接口配置\nimport * as apis from '@/apis'\n\nconst tuaStorage = new TuaStorage({\n    syncFnMap: getSyncFnMapByApis(apis),\n})\n\nconst fetchParam = {\n    key: fooApi.bar.key,\n    syncParams: { a: 'a', b: 'b' },\n\n    // 过期时间，默认值为实例化时的值，以秒为单位\n    expires: 10,\n\n    // 是否直接调用同步函数更新数据，默认为 false\n    // 适用于需要强制更新数据的场景，例如小程序中的下拉刷新\n    isForceUpdate: true,\n\n    // ...\n}\n\ntuaStorage\n    .load(fetchParam)\n    .then(console.log)\n    .catch(console.error)\n```\n\n## 怎么写 `api` 配置？\n拿以下 api 地址举例：\n\n* `https://example-base.com/foo/bar/something/create`\n* `https://example-base.com/foo/bar/something/modify`\n* `https://example-base.com/foo/bar/something/delete`\n\n### 地址结构划分\n以上地址，一般将其分为`3`部分：\n\n* baseUrl: `'https://example-base.com/foo/bar'`\n* prefix: `'something'`\n* pathList: `[ 'create', 'modify', 'delete' ]`\n\n### 文件结构\n`api/` 一般是这样的文件结构：\n\n```\n.\n└── apis\n    ├── prefix-1.js\n    ├── prefix-2.js\n    ├── something.js // <-- 以上的 api 地址会放在这里，名字随意\n    └── index.js\n```\n\n### 基础配置内容\n```js\n// src/apis/something.js\n\nexport default {\n    // 接口基础地址\n    baseUrl: 'https://example-base.com/foo/bar',\n\n    // 接口的中间路径\n    prefix: 'something',\n\n    // 接口地址数组\n    pathList: [\n        { path: 'create' },\n        { path: 'modify' },\n        { path: 'delete' },\n    ],\n}\n```\n\n[更多配置请点击这里查看](https://tuateam.github.io/tua-api/config/common.html)\n\n### 配置导出\n最后来看一下 `apis/index.js` 该怎么写：\n\n```js\nimport TuaApi from 'tua-api'\n\n// 初始化\nconst tuaApi = new TuaApi({ ... })\n\n// 使用中间件\ntuaApi\n    .use(async (ctx, next) => {\n        // 请求发起前\n        console.log('before: ', ctx)\n\n        await next()\n\n        // 响应返回后\n        console.log('after: ', ctx)\n    })\n    // 链式调用\n    .use(...)\n\nexport const fakeGet = tuaApi.getApi(require('./fake-get').default)\nexport const fakePost = tuaApi.getApi(require('./fake-post').default)\n```\n\n小程序端建议使用 [@tua-mp/cli](https://tuateam.github.io/tua-mp/tua-mp-cli/) 一键生成 api。\n\n```bash\n$ tuamp add api <api-name>\n```\n\n### 配置的构成\n在 `tua-api` 中配置分为四种：\n\n* [默认配置（调用 `new TuaApi({ ... })` 时传递的）](https://tuateam.github.io/tua-api/config/default.html)\n* [公共配置（和 `pathList` 同级的配置）](https://tuateam.github.io/tua-api/config/common.html)\n* [自身配置（`pathList` 数组中的对象上的配置）](https://tuateam.github.io/tua-api/config/self.html)\n* [运行配置（在实际调用接口时传递的配置）](https://tuateam.github.io/tua-api/config/runtime.html)\n\n其中优先级自然是:\n\n`默认配置 < 公共配置 < 自身配置 < 运行配置`\n\n<p align=\"center\">\n    <a href=\"https://tuateam.github.io/tua-api/config/\">👉更多配置点击这里👈</a>\n</p>\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tr>\n    <td align=\"center\"><a href=\"https://buptsteve.github.io\"><img src=\"https://avatars2.githubusercontent.com/u/11501493?v=4\" width=\"100px;\" alt=\"StEve Young\"/><br /><sub><b>StEve Young</b></sub></a><br /><a href=\"https://github.com/tuateam/tua-api/commits?author=BuptStEve\" title=\"Code\">💻</a> <a href=\"https://github.com/tuateam/tua-api/commits?author=BuptStEve\" title=\"Documentation\">📖</a> <a href=\"#infra-BuptStEve\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a></td>\n    <td align=\"center\"><a href=\"https://github.com/evinma\"><img src=\"https://avatars2.githubusercontent.com/u/16096567?v=4\" width=\"100px;\" alt=\"evinma\"/><br /><sub><b>evinma</b></sub></a><br /><a href=\"https://github.com/tuateam/tua-api/commits?author=evinma\" title=\"Code\">💻</a></td>\n  </tr>\n</table>\n\n<!-- markdownlint-enable -->\n<!-- prettier-ignore-end -->\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","readmeFilename":"README.md","gitHead":"1e9523c3fd0df565aa78e55be71e9ecac2e8e047","bugs":{"url":"https://github.com/tuateam/tua-api/issues"},"_id":"tua-api@1.6.0-0","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"buptsteve","email":"yangzhenyu2016@gmail.com"},"dist":{"integrity":"sha512-NhfBQGY4OtBmkkXKEKaX8aFb3KuD1yVi2ypoRs7c2kmT/fXl9VokkKUq0Ng1dbNDmjga6Rvb8sCV/UIfYA6MOg==","shasum":"430812ae77e44c6fe92a433bbfb05fd8508236c1","tarball":"https://registry.npmjs.org/tua-api/-/tua-api-1.6.0-0.tgz","fileCount":32,"unpackedSize":194612,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfFWgbCRA9TVsSAnZWagAA31cP/0RIikChQDRBoaPEPCpI\nfZXRI9WJN/6jQxvab4FfP886JyYbCOZZCWlTcb20CLL8DFgBYlEhLPAOJIjn\ntlY2/+x1Sr47Gbdje8TDhivXR17aD5jr1cDhlkRpE+OAgw125gN0tsPWDS2d\nTB9Aw0UG2TpA7aVeZ7cK4nGhgJYlGtyivaAMdffGz71+AWkugfOSf0gtGKyB\nKf3Ib8REDEFu7NC3BYTQYOKOhF6C4G0WKVUFQD5EHO3Zv35N3PCQZXWbMGGS\ncr4EpSv71RQ2mCm6kismnvydsv6RSOfipnFHYm0qeoy+AoQb23No5sLOxT0o\nP/7cbWXe00gYf4KgdTbXYl5I4ohMlEPUIq+IGUpZQRdT4cPm4umZOSd6W0F/\n5TFCde0JNFrmV5nUCGt5ohcleXXHfSRHlMXJqzasQSmxEPLDBmX+xHoBFquc\nvWi9ZKlf2fOAYquk5Z5kXeB4MBnZNJo1bqmGrfz+vkEMBt5tbXrjKqXHQG5f\nx8fgb3PjKRus2IIttGxkPevpDyfE2hy+vcUzrOq6j0MTP3vq03qYLtuI+++W\nKe4xsGh9+yFjW6ki2+YD3W269k/XnWu3SUdaPJsN6Kj6SdlRFnQZfI4DUN67\n4YBF+aZP6jbdNtJYXeE3c5Gw3rkjwFl3aZVNr1TtdMB4nuXmLz5AFmIxP4Ip\nK3Sc\r\n=W0Ch\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDmcB9qX/MyPqGJOkV742FpLIRV9H19lLinxVajXdegyQIgZXuhTyUNjlc4BOGO7UX8LvHhQV7Bz0DC0DyBZDhy8Po="}]},"maintainers":[{"email":"yangzhenyu2016@gmail.com","name":"buptsteve"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tua-api_1.6.0-0_1595238426934_0.9176477908358627"},"_hasShrinkwrap":false},"1.6.0-1":{"name":"tua-api","version":"1.6.0-1","description":"🏗 A common tool helps converting configs to api functions","main":"dist/TuaApi.cjs.js","module":"dist/TuaApi.esm.js","unpkg":"dist/TuaApi.umd.js","jsdelivr":"dist/TuaApi.umd.js","types":"src/index.d.ts","scripts":{"cov":"open coverage/lcov-report/index.html","docs":"vuepress dev docs","docs:build":"vuepress build docs","lint":"eslint --fix . docs/.vuepress/ --ignore-path .gitignore","test":"cross-env NODE_ENV=test jest","test:tdd":"cross-env NODE_ENV=test jest --watch","prebuild":"rimraf dist/* & npm run test","build":"cross-env NODE_ENV=production rollup -c","deploy":"npm run docs:build && gh-pages -m \"[ci skip]\" -d docs/.vuepress/dist","next:pm":"npm --no-git-tag-version version preminor","next:pr":"npm --no-git-tag-version version prerelease","pub":"npm run build && npm publish","pub:n":"npm run build && npm publish --tag next"},"husky":{"hooks":{"pre-push":"npm test","pre-commit":"lint-staged","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"lint-staged":{"{src,test}/**/*.js":["eslint --fix"]},"eslintIgnore":["dist/*","!.eslintrc.js","package.json"],"dependencies":{"axios":"^0.19.2","fetch-jsonp":"^1.1.3","koa-compose":"^4.1.0"},"devDependencies":{"@babel/core":"^7.10.5","@babel/plugin-external-helpers":"^7.10.4","@babel/plugin-proposal-decorators":"^7.10.5","@babel/plugin-proposal-object-rest-spread":"^7.10.4","@babel/preset-env":"^7.10.4","@commitlint/cli":"^9.1.1","@commitlint/config-conventional":"^9.1.1","@rollup/plugin-babel":"^5.1.0","@rollup/plugin-commonjs":"^14.0.0","@rollup/plugin-json":"^4.1.0","@rollup/plugin-node-resolve":"^8.4.0","@rollup/plugin-replace":"^2.3.3","@types/jest":"^26.0.5","all-contributors-cli":"^6.16.1","axios-mock-adapter":"^1.18.2","babel-core":"^7.0.0-bridge.0","babel-eslint":"^10.1.0","babel-jest":"^26.1.0","codecov":"^3.7.1","cross-env":"^7.0.2","eslint":"^7.5.0","eslint-config-standard":"^14.1.1","eslint-plugin-import":"^2.22.0","eslint-plugin-node":"^11.1.0","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","gh-pages":"^3.1.0","husky":"^4.2.5","jest":"^26.1.0","lint-staged":"^10.2.11","rimraf":"^3.0.2","rollup":"^2.22.1","rollup-plugin-eslint":"^7.0.0","rollup-plugin-terser":"^6.1.0","typescript":"^3.9.7","vuepress":"^1.5.2"},"repository":{"type":"git","url":"git+https://github.com/tuateam/tua-api.git"},"homepage":"https://tuateam.github.io/tua-api/","author":{"name":"StEve Young"},"license":"MIT","readme":"<h1 align=\"center\">tua-api</h1>\n\n<h4 align=\"center\">让我们优雅地调用 api~</h4>\n\n<p align=\"center\">\n    <a href=\"https://tuateam.github.io/tua-api/\">👉完整文档地址点这里👈</a>\n</p>\n\n<p align=\"center\">\n    <a href=\"https://circleci.com/gh/tuateam/tua-api/tree/master\" target=\"_blank\">\n        <img src=\"https://img.shields.io/circleci/project/github/tuateam/tua-api/master.svg\" alt=\"Build Status\">\n    </a>\n    <a href=\"https://codecov.io/github/tuateam/tua-api?branch=master\" target=\"_blank\">\n        <img src=\"https://img.shields.io/codecov/c/github/tuateam/tua-api/master.svg\" alt=\"Coverage Status\">\n    </a>\n    <a href=\"https://david-dm.org/tuateam/tua-api\" target=\"_blank\">\n        <img src=\"https://david-dm.org/tuateam/tua-api.svg\" alt=\"dependencies\">\n    </a>\n    <a href=\"https://www.npmjs.com/package/tua-api\" target=\"_blank\">\n        <img src=\"https://badgen.net/npm/dm/tua-api\" alt=\"Downloads per month\">\n        <img src=\"https://img.shields.io/npm/v/tua-api.svg\" alt=\"Version\">\n        <img src=\"https://img.shields.io/npm/v/tua-api/next.svg\" alt=\"Next Version\">\n        <img src=\"https://img.shields.io/npm/l/tua-api.svg\" alt=\"License\">\n    </a>\n</p>\n\n## `tua-api` 是什么？\n`tua-api` 是一个针对发起 api 请求提供辅助功能的库。采用 ES6+ 语法，并采用 jest 进行了完整的单元测试。\n\n目前已适配：\n\n* web 端：axios, fetch-jsonp\n* Node 端：axios\n* 小程序端：wx.request\n\n<a href=\"https://codesandbox.io/s/2o24xn0750\" target=\"_blank\">\n    <img alt=\"Edit tua-api github example\" src=\"https://codesandbox.io/static/img/play-codesandbox.svg\">\n</a>\n\n## 安装\n### web 端\n#### 安装本体\n\n```bash\n$ npm i -S tua-api\n# OR\n$ yarn add tua-api\n```\n\n然后直接导入即可\n\n```js\nimport TuaApi from 'tua-api'\n```\n\n#### 配置武器\n配置“武器”分为两种情况:\n\n* [已配置 CORS 跨域请求头](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS)，或是没有跨域需求时，无需任何操作（默认采用的就是 `axios`）。\n\n* 若是用不了 CORS，那么就需要设置 `reqType: 'jsonp'` 借助 jsonp 实现跨域\n\n但是 jsonp 只支持使用 get 的方式请求，所以如果需要发送 post 或其他方式的请求，还是需要使用 `axios`（服务端还是需要配置 CORS）。\n\n### 小程序端\n#### 安装本体即可\n\n```bash\n$ npm i -S tua-api\n# OR\n$ yarn add tua-api\n```\n\n```js\nimport TuaApi from 'tua-api'\n```\n\n> 小程序还用不了 npm？[@tua-mp/service](https://tuateam.github.io/tua-mp/tua-mp-service/) 了解一下？\n\n## `tua-api` 能干什么？\n`tua-api` 能实现统一管理 api 配置（例如一般放在 `src/apis/` 下）。经过处理后，业务侧代码只需要这样写即可：\n\n```js\nimport { fooApi } from '@/apis/'\n\nfooApi\n    .bar({ a: '1', b: '2' }) // 发起请求，a、b 是请求参数\n    .then(console.log)       // 收到响应\n    .catch(console.error)    // 处理错误\n```\n\n不仅如此，还有一些其他功能：\n\n* 参数校验\n* 默认参数\n* 中间件（koa 风格）\n* ...\n\n```js\n// 甚至可以更进一步和 tua-storage 配合使用\nimport TuaStorage from 'tua-storage'\nimport { getSyncFnMapByApis } from 'tua-api'\n\n// 本地写好的各种接口配置\nimport * as apis from '@/apis'\n\nconst tuaStorage = new TuaStorage({\n    syncFnMap: getSyncFnMapByApis(apis),\n})\n\nconst fetchParam = {\n    key: fooApi.bar.key,\n    syncParams: { a: 'a', b: 'b' },\n\n    // 过期时间，默认值为实例化时的值，以秒为单位\n    expires: 10,\n\n    // 是否直接调用同步函数更新数据，默认为 false\n    // 适用于需要强制更新数据的场景，例如小程序中的下拉刷新\n    isForceUpdate: true,\n\n    // ...\n}\n\ntuaStorage\n    .load(fetchParam)\n    .then(console.log)\n    .catch(console.error)\n```\n\n## 怎么写 `api` 配置？\n拿以下 api 地址举例：\n\n* `https://example-base.com/foo/bar/something/create`\n* `https://example-base.com/foo/bar/something/modify`\n* `https://example-base.com/foo/bar/something/delete`\n\n### 地址结构划分\n以上地址，一般将其分为`3`部分：\n\n* baseUrl: `'https://example-base.com/foo/bar'`\n* prefix: `'something'`\n* pathList: `[ 'create', 'modify', 'delete' ]`\n\n### 文件结构\n`api/` 一般是这样的文件结构：\n\n```\n.\n└── apis\n    ├── prefix-1.js\n    ├── prefix-2.js\n    ├── something.js // <-- 以上的 api 地址会放在这里，名字随意\n    └── index.js\n```\n\n### 基础配置内容\n```js\n// src/apis/something.js\n\nexport default {\n    // 接口基础地址\n    baseUrl: 'https://example-base.com/foo/bar',\n\n    // 接口的中间路径\n    prefix: 'something',\n\n    // 接口地址数组\n    pathList: [\n        { path: 'create' },\n        { path: 'modify' },\n        { path: 'delete' },\n    ],\n}\n```\n\n[更多配置请点击这里查看](https://tuateam.github.io/tua-api/config/common.html)\n\n### 配置导出\n最后来看一下 `apis/index.js` 该怎么写：\n\n```js\nimport TuaApi from 'tua-api'\n\n// 初始化\nconst tuaApi = new TuaApi({ ... })\n\n// 使用中间件\ntuaApi\n    .use(async (ctx, next) => {\n        // 请求发起前\n        console.log('before: ', ctx)\n\n        await next()\n\n        // 响应返回后\n        console.log('after: ', ctx)\n    })\n    // 链式调用\n    .use(...)\n\nexport const fakeGet = tuaApi.getApi(require('./fake-get').default)\nexport const fakePost = tuaApi.getApi(require('./fake-post').default)\n```\n\n小程序端建议使用 [@tua-mp/cli](https://tuateam.github.io/tua-mp/tua-mp-cli/) 一键生成 api。\n\n```bash\n$ tuamp add api <api-name>\n```\n\n### 配置的构成\n在 `tua-api` 中配置分为四种：\n\n* [默认配置（调用 `new TuaApi({ ... })` 时传递的）](https://tuateam.github.io/tua-api/config/default.html)\n* [公共配置（和 `pathList` 同级的配置）](https://tuateam.github.io/tua-api/config/common.html)\n* [自身配置（`pathList` 数组中的对象上的配置）](https://tuateam.github.io/tua-api/config/self.html)\n* [运行配置（在实际调用接口时传递的配置）](https://tuateam.github.io/tua-api/config/runtime.html)\n\n其中优先级自然是:\n\n`默认配置 < 公共配置 < 自身配置 < 运行配置`\n\n<p align=\"center\">\n    <a href=\"https://tuateam.github.io/tua-api/config/\">👉更多配置点击这里👈</a>\n</p>\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tr>\n    <td align=\"center\"><a href=\"https://buptsteve.github.io\"><img src=\"https://avatars2.githubusercontent.com/u/11501493?v=4\" width=\"100px;\" alt=\"StEve Young\"/><br /><sub><b>StEve Young</b></sub></a><br /><a href=\"https://github.com/tuateam/tua-api/commits?author=BuptStEve\" title=\"Code\">💻</a> <a href=\"https://github.com/tuateam/tua-api/commits?author=BuptStEve\" title=\"Documentation\">📖</a> <a href=\"#infra-BuptStEve\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a></td>\n    <td align=\"center\"><a href=\"https://github.com/evinma\"><img src=\"https://avatars2.githubusercontent.com/u/16096567?v=4\" width=\"100px;\" alt=\"evinma\"/><br /><sub><b>evinma</b></sub></a><br /><a href=\"https://github.com/tuateam/tua-api/commits?author=evinma\" title=\"Code\">💻</a></td>\n  </tr>\n</table>\n\n<!-- markdownlint-enable -->\n<!-- prettier-ignore-end -->\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","readmeFilename":"README.md","gitHead":"03ea6a998c793efc4db39ef9cf9c1b57325c47d0","bugs":{"url":"https://github.com/tuateam/tua-api/issues"},"_id":"tua-api@1.6.0-1","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"buptsteve","email":"yangzhenyu2016@gmail.com"},"dist":{"integrity":"sha512-cTTsF4ELAyKf5WkxEfduQXq1Pc7s9R9d6cE6x3fNPt129CtO1Mmi+BRigBBW10o8tmqUpPQXfBbTDHcBo59q2w==","shasum":"eb78c083662c413cbd35cc36a327a0ffe0ed3907","tarball":"https://registry.npmjs.org/tua-api/-/tua-api-1.6.0-1.tgz","fileCount":32,"unpackedSize":195127,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfFpKxCRA9TVsSAnZWagAAvqAP/RX2jbkiY5wSySgWeK26\n3/Ir/uLvhXGsPVXBGdJXOxOOM55UlbcQ42oR/tJnV7kdIeMQNmLlYrljD7ya\neI6hvPHVAhtL4chdIWZNA3jAYJqoPmMJS9/GVKcShJ3n60ApO+U0rX2h2/Gj\nBkNSoLMnwaHOxmr+5oVW9h3Vm7PDTWGp+uzadH7zfHdgJJfomb9m3uE1qTbN\n7xKzazruB52+O5fR1Z/5oQDGqTvopJ+m9to/7xEXIwSdlobO1zAmIXPlCPqS\niA98/alyHZO5/P6OzPPUClDYfhc9Ru8joEAeaeFodVRvjvO4F+tdaGx2DB5j\nxRUII8EwNhgQjYWyLKF4WoK5HnY/AO2kdA1mai1JFpUcmJQag1D8qadOsg9E\nS9H9XEr+24GP4bGd8JYswrB0jBBLug2UdAokrHww7+uHB34jo/99mC88dYna\nm+f88apkF6TKji02RDL/HhIqwYnZihWhVW7/wfuGfRfPJ9yz/ShJtcWi3aOB\nAc4chNLW+4eM0FCVFc3n6OKSIoLKORjtmXMV6Fxksb5yIVCcwE1mSreb6y0Y\n+G9371cB9vVyj1GtDkO6voBeOlwfAwbhaxvJ3gJXn05yN3DXPFb/MI1cJ0mj\nERmJScz/D1jdibSWj+H0pNnk9695CHOLQMw7UAmzDKYwoxqYl27tqQdhU8C5\n8L9d\r\n=Vr53\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG8Hl2Ldbter8SZGavR1AG8NTHENNNKWtGGsFBjdPIxkAiAxpSdRoRpl3Fgq1ZFOyx4umqrg2KOXgOKrKZfQoHC+JA=="}]},"maintainers":[{"email":"yangzhenyu2016@gmail.com","name":"buptsteve"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tua-api_1.6.0-1_1595314865087_0.20372767459733399"},"_hasShrinkwrap":false},"1.6.0":{"name":"tua-api","version":"1.6.0","description":"🏗 A common tool helps converting configs to api functions","main":"dist/TuaApi.cjs.js","module":"dist/TuaApi.esm.js","unpkg":"dist/TuaApi.umd.js","jsdelivr":"dist/TuaApi.umd.js","types":"src/index.d.ts","scripts":{"cov":"open coverage/lcov-report/index.html","docs":"vuepress dev docs","docs:build":"vuepress build docs","lint":"eslint --fix . docs/.vuepress/ --ignore-path .gitignore","test":"cross-env NODE_ENV=test jest","test:tdd":"cross-env NODE_ENV=test jest --watch","prebuild":"rimraf dist/* & npm run test","build":"cross-env NODE_ENV=production rollup -c","deploy":"npm run docs:build && gh-pages -m \"[ci skip]\" -d docs/.vuepress/dist","next:pm":"npm --no-git-tag-version version preminor","next:pr":"npm --no-git-tag-version version prerelease","pub":"npm run build && npm publish","pub:n":"npm run build && npm publish --tag next"},"husky":{"hooks":{"pre-push":"npm test","pre-commit":"lint-staged","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"lint-staged":{"{src,test}/**/*.js":["eslint --fix"]},"eslintIgnore":["dist/*","!.eslintrc.js","package.json"],"dependencies":{"axios":"^0.19.2","fetch-jsonp":"^1.1.3","koa-compose":"^4.1.0"},"devDependencies":{"@babel/core":"^7.10.5","@babel/plugin-external-helpers":"^7.10.4","@babel/plugin-proposal-decorators":"^7.10.5","@babel/plugin-proposal-object-rest-spread":"^7.10.4","@babel/preset-env":"^7.10.4","@commitlint/cli":"^9.1.1","@commitlint/config-conventional":"^9.1.1","@rollup/plugin-babel":"^5.1.0","@rollup/plugin-commonjs":"^14.0.0","@rollup/plugin-json":"^4.1.0","@rollup/plugin-node-resolve":"^8.4.0","@rollup/plugin-replace":"^2.3.3","@types/jest":"^26.0.5","all-contributors-cli":"^6.16.1","axios-mock-adapter":"^1.18.2","babel-core":"^7.0.0-bridge.0","babel-eslint":"^10.1.0","babel-jest":"^26.1.0","codecov":"^3.7.1","cross-env":"^7.0.2","eslint":"^7.5.0","eslint-config-standard":"^14.1.1","eslint-plugin-import":"^2.22.0","eslint-plugin-node":"^11.1.0","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","gh-pages":"^3.1.0","husky":"^4.2.5","jest":"^26.1.0","lint-staged":"^10.2.11","rimraf":"^3.0.2","rollup":"^2.22.1","rollup-plugin-eslint":"^7.0.0","rollup-plugin-terser":"^6.1.0","typescript":"^3.9.7","vuepress":"^1.5.2"},"repository":{"type":"git","url":"git+https://github.com/tuateam/tua-api.git"},"homepage":"https://tuateam.github.io/tua-api/","author":{"name":"StEve Young"},"license":"MIT","gitHead":"0b6106b259621df2351e4c52c9cf2f7d83e83d43","bugs":{"url":"https://github.com/tuateam/tua-api/issues"},"_id":"tua-api@1.6.0","_npmVersion":"6.4.1","_nodeVersion":"10.15.0","_npmUser":{"name":"buptsteve","email":"yangzhenyu2016@gmail.com"},"dist":{"integrity":"sha512-FeGgzhjMqQAZxlFXwKirm3ZRjUb7a+1DFVOe9RyyDDUguNT3JnuFGEzNQEtMXY//5aCxIcYUbTb4AMoUWUlyeQ==","shasum":"7b11637a4509cd914455c88411a76d6227a6a59a","tarball":"https://registry.npmjs.org/tua-api/-/tua-api-1.6.0.tgz","fileCount":32,"unpackedSize":195111,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfFp3ZCRA9TVsSAnZWagAAZTUP/jSDO2tLYDtYAjxTBtgr\npv0wWb6MlG/InpqnkcV+yWzLz3/EPCf9KyNio1LS45vmJkSgfrc6KmI/dTMZ\nDqaRMNDyLgtEeV4Nu+LskBweWRSYtuahXSyHJN1jluCW6kXYCZqkPzeCM2D7\nFA04FMZ2z5RULTjl+CBxtSKjPBIwJOilDePpYlhnzh82WiK9dSsMPit8Ymok\nH3/7XbLh8Uh395THU/6O1tz7MR8sSQu3sa06iDFDJuc0mL6ST6pmdDyjIy4S\n7uQNMfqTPH3vXiOdsxjrMABPRKO5JX3fLc5xj1xNWgEpcsZ9H4K13WqhahPw\nSMON6wjkmUuMZkpgvif/LFJW1oXykQi8cGDAXmoJFlaaUhyXEGRFPDScgzie\n9UDXq315UtMv53rm7ihttJgrIBFWoUH6DuXURBwcq6J73NBsbLtABG71Ub2e\nTPMzlP4lg88g67KFh5YEHwyk4SmK7yNiT+FDnlT4p8N0fRMYahuJf9FsqW/n\nOnj+m7OgzKrc+5s3HBAn3ekfJzQm+GBRdHGCOl7rsxVtsg5JPqW/oXTrD/1s\njCSXkFMs9sjdCklaa53cidz80pE97DVgQ39c3DM9TaHEnPayIIgmWMsEn/7c\nMIhN+lzQ5piEOnvcVDFORh6D6pRSpN2AYV7ohy64oN7JJnOcNhxOa2gCTi8k\nTeKh\r\n=2MYi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDj6REe+PRJYffuywagqtEnK5yHp3KaOkKq9lJnO6DEAgIgHuxr+OZW1BHC9I73+CKLte+VId1zpFrQ6F4uoK+zvro="}]},"maintainers":[{"email":"yangzhenyu2016@gmail.com","name":"buptsteve"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tua-api_1.6.0_1595317720601_0.4521198881929769"},"_hasShrinkwrap":false},"1.6.1":{"name":"tua-api","version":"1.6.1","description":"🏗 A common tool helps converting configs to api functions","main":"dist/TuaApi.cjs.js","module":"dist/TuaApi.esm.js","unpkg":"dist/TuaApi.umd.js","jsdelivr":"dist/TuaApi.umd.js","types":"src/index.d.ts","scripts":{"cov":"open coverage/lcov-report/index.html","docs":"vuepress dev docs","docs:build":"vuepress build docs","lint":"eslint --fix . docs/.vuepress/ --ignore-path .gitignore","test":"cross-env NODE_ENV=test jest","test:tdd":"cross-env NODE_ENV=test jest --watch","prebuild":"rimraf dist/* & npm run test","build":"cross-env NODE_ENV=production rollup -c","deploy":"npm run docs:build && gh-pages -m \"[ci skip]\" -d docs/.vuepress/dist","next:pm":"npm --no-git-tag-version version preminor","next:pr":"npm --no-git-tag-version version prerelease","pub":"npm run build && npm publish","pub:n":"npm run build && npm publish --tag next"},"husky":{"hooks":{"pre-push":"npm test","pre-commit":"lint-staged","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"lint-staged":{"{src,test}/**/*.js":["eslint --fix"]},"eslintIgnore":["dist/*","!.eslintrc.js","package.json"],"dependencies":{"axios":"^0.21.1","fetch-jsonp":"^1.1.3","koa-compose":"^4.1.0"},"devDependencies":{"@babel/core":"^7.10.5","@babel/plugin-external-helpers":"^7.10.4","@babel/plugin-proposal-decorators":"^7.10.5","@babel/plugin-proposal-object-rest-spread":"^7.10.4","@babel/preset-env":"^7.10.4","@commitlint/cli":"^9.1.1","@commitlint/config-conventional":"^9.1.1","@rollup/plugin-babel":"^5.1.0","@rollup/plugin-commonjs":"^14.0.0","@rollup/plugin-json":"^4.1.0","@rollup/plugin-node-resolve":"^8.4.0","@rollup/plugin-replace":"^2.3.3","@types/jest":"^26.0.5","all-contributors-cli":"^6.16.1","axios-mock-adapter":"^1.18.2","babel-core":"^7.0.0-bridge.0","babel-eslint":"^10.1.0","babel-jest":"^26.1.0","codecov":"^3.7.1","cross-env":"^7.0.2","eslint":"^7.5.0","eslint-config-standard":"^14.1.1","eslint-plugin-import":"^2.22.0","eslint-plugin-node":"^11.1.0","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","gh-pages":"^3.1.0","husky":"^4.2.5","jest":"^26.1.0","lint-staged":"^10.2.11","rimraf":"^3.0.2","rollup":"^2.22.1","rollup-plugin-eslint":"^7.0.0","rollup-plugin-terser":"^6.1.0","typescript":"^3.9.7","vuepress":"^1.5.2"},"repository":{"type":"git","url":"git+https://github.com/tuateam/tua-api.git"},"homepage":"https://tuateam.github.io/tua-api/","author":{"name":"StEve Young"},"license":"MIT","gitHead":"20bc1f4e1e875d9a38e5171037eee9374768b416","bugs":{"url":"https://github.com/tuateam/tua-api/issues"},"_id":"tua-api@1.6.1","_nodeVersion":"10.21.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-XO50/0PVNd/ku7pr8vIKSg93j3MmQ4DF0HxA9GvxycHumSiFzWWYJqSRwb6Z83yGTeVJYOF9cNx7OlP/yalAyg==","shasum":"7400aa43aa411d369544f49cd72c98a9cb5f316a","tarball":"https://registry.npmjs.org/tua-api/-/tua-api-1.6.1.tgz","fileCount":32,"unpackedSize":195104,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGh2lCRA9TVsSAnZWagAAzJMP/RthjOZIZ7kGP7wj7zmx\nQAqq4J1uTc4Ng4Z5/Y3ChnnuCv2CQUzylZp/GgcgDissND6uVlQrv94IHukf\nPRGFq7WFFnC63VgdiY1J2OcbmYP7x7bDbXdZ3I7io0J0hh6sEYkle6dr+Bx6\nDd3gPD+0i8cdYEbPUn5CycLcSZD3aJePtgG2aaeEyD9aAwl2PfXzW/Nmg/YQ\nmUg1QT/jKn/okk+unaVTBZ9xLxBiHKANM24Hd5VD2xnkgSLHR+CbsfzLMD7L\njmxgGwCk5XWr6NzCy41YR/T1VaBupflxFqjjZ7ITm+syTDSUBA6DVMPAu9ge\nFI0f3GWo2OdfMhXO74zg02JxBhbi5fynxWjOMprdkusguO0GQsjMQm8XfDxb\nnBRibpzpdUR/lZFozDKjpCsA/3N0os5+R204IqiI8oqRET5G4tSDaLeQ2J85\nwT+0vVFQusSlFqt+FpxNQUQOzWzkTek8FVXDmXryXM3QFXekdphsYRR7227E\npCe4f7m9ur6JtMfRvW3iKaPXAvHQMnxxy6VXEbSEPdD0rQ71QDjsyv38Vqew\nASTGRWAQo6iFG5/hXDy1Z6nMc+nsu3SgysI97UtBsZlJMv5N6KlYNLmyEQY6\nTW3uHi9g/fMFWVbTjgcSQE4Q4jMp7yY88t+pXoVk00OGgV+ayc1Ltjpl1tor\nRXYC\r\n=pXt1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDKLRdHcDUqlp9E+8nMl1yoSZ1uv4+XAnTvErkdrDafagIhALwYsHEsGI7fywbfxm0k87bEw+UfL4wx0zaVTE3TtQc9"}]},"_npmUser":{"name":"buptsteve","email":"yangzhenyu2016@gmail.com"},"directories":{},"maintainers":[{"name":"buptsteve","email":"yangzhenyu2016@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tua-api_1.6.1_1612324261118_0.48572142045264055"},"_hasShrinkwrap":false},"1.7.0":{"name":"tua-api","version":"1.7.0","description":"🏗 A common tool helps converting configs to api functions","main":"dist/TuaApi.cjs.js","module":"dist/TuaApi.esm.js","unpkg":"dist/TuaApi.umd.js","jsdelivr":"dist/TuaApi.umd.js","types":"src/index.d.ts","scripts":{"cov":"open coverage/lcov-report/index.html","docs":"vuepress dev docs","docs:build":"vuepress build docs","lint":"eslint --fix . docs/.vuepress/ --ignore-path .gitignore","test":"cross-env NODE_ENV=test jest","test:tdd":"cross-env NODE_ENV=test jest --watch","prebuild":"rimraf dist/* & npm run test","build":"cross-env NODE_ENV=production rollup -c","deploy":"npm run docs:build && gh-pages -m \"[ci skip]\" -d docs/.vuepress/dist","next:pm":"npm --no-git-tag-version version preminor","next:pr":"npm --no-git-tag-version version prerelease","pub":"npm run build && npm publish","pub:n":"npm run build && npm publish --tag next"},"husky":{"hooks":{"pre-push":"npm test","pre-commit":"lint-staged","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"lint-staged":{"{src,test}/**/*.js":["eslint --fix"]},"eslintIgnore":["dist/*","!.eslintrc.js","package.json"],"dependencies":{"axios":"^0.21.1","fetch-jsonp":"^1.1.3","koa-compose":"^4.1.0"},"devDependencies":{"@babel/core":"^7.10.5","@babel/plugin-external-helpers":"^7.10.4","@babel/plugin-proposal-decorators":"^7.10.5","@babel/plugin-proposal-object-rest-spread":"^7.10.4","@babel/preset-env":"^7.10.4","@commitlint/cli":"^9.1.1","@commitlint/config-conventional":"^9.1.1","@rollup/plugin-babel":"^5.1.0","@rollup/plugin-commonjs":"^14.0.0","@rollup/plugin-json":"^4.1.0","@rollup/plugin-node-resolve":"^8.4.0","@rollup/plugin-replace":"^2.3.3","@types/jest":"^26.0.5","all-contributors-cli":"^6.16.1","axios-mock-adapter":"^1.18.2","babel-core":"^7.0.0-bridge.0","babel-eslint":"^10.1.0","babel-jest":"^26.1.0","codecov":"^3.7.1","cross-env":"^7.0.2","eslint":"^7.5.0","eslint-config-standard":"^14.1.1","eslint-plugin-import":"^2.22.0","eslint-plugin-node":"^11.1.0","eslint-plugin-promise":"^4.2.1","eslint-plugin-standard":"^4.0.1","gh-pages":"^3.1.0","husky":"^4.2.5","jest":"^26.1.0","lint-staged":"^10.2.11","rimraf":"^3.0.2","rollup":"^2.22.1","rollup-plugin-eslint":"^7.0.0","rollup-plugin-terser":"^6.1.0","typescript":"^3.9.7","vuepress":"^1.5.2"},"repository":{"type":"git","url":"git+https://github.com/tuateam/tua-api.git"},"homepage":"https://tuateam.github.io/tua-api/","author":{"name":"StEve Young"},"license":"MIT","gitHead":"b92a06a2264fbb6d04f601ea8ed0301805b4850e","bugs":{"url":"https://github.com/tuateam/tua-api/issues"},"_id":"tua-api@1.7.0","_nodeVersion":"10.21.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-1007oPHDO34zZ/3Q/x7D5HSXrjTC7AILPRYRgcXiXtI9/OTbeFEQttHniOPnuLnY7s2lipZu97qXiAVlDox9QA==","shasum":"5047811b8e1358a0538e2b7f6a5c382d64ba2add","tarball":"https://registry.npmjs.org/tua-api/-/tua-api-1.7.0.tgz","fileCount":33,"unpackedSize":198195,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgim6ZCRA9TVsSAnZWagAAAvsQAJaWi7MIgI1Zc9NkcPn1\n7CV/CnmSkC14ib/Z7JbZAx3RXhyKRok/JP71nl5CURWtlKaZIwKQNUmh3Jum\nJKJSy5zOnV5Jdj3EI1Hpux27HI4HtDkV5oCm1JeNt9sD7BCXugpl3hH8nam5\ncXs6TL6LRhDcwUwTaqZPI+RAc9MmqFDjS8gmrI7npRnAnZnbykeec0KbzsX+\n2hzC+g73DItwLeydUGffem9jbmNMFwoABBsObminF3aRxxD4K6OgGYEDpi+X\n9pp1r5bwyiJKIAwIpwH/M84jxWD6U+DgULRZXGRnlYc0mljrzQBELU63VXmN\n2wbDjhMJfnUA6rROOy0zpH4OAusrNTtmFbY0yY9hFP8KVrS+Jts9LKHRo8RS\nfCIp2xzkIjYr93NJ4xb8h3E58plf2XE1PNX1G1R5iM3G9KLHejqtB370yrhf\nMvb4uIBI2odThbWPbCRljeXKv+Q5T5IwIv6ZTRQlILsaLnRqusrlQvQeIqdR\nT1Q8ZJv137cozSeKO9cQhAVVW/e07fHavyQtMDBhGgDzD36J/eueI9Mr1wgw\nxIwrS6j+0KRBHK8ITNgM8TxBiSqNbnjAEpfs9QTW7pbGJNY2uTiJkFBGB8Xg\nvQW7H+WUFFUK7Oy/8OAkYqEc2+Ef4kfkqz5ShRTIH4+1e1Lv8ILIgwlH8e52\nTUoW\r\n=2pVy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCYSuhS9wA0cig0I3aDIVZF38gIogXLQ45nNrub0tVWTAIgb6waYCv1pd6VzGSWzbL23Q8vP5ncFmPt3iP/iFSSC/E="}]},"_npmUser":{"name":"buptsteve","email":"yangzhenyu2016@gmail.com"},"directories":{},"maintainers":[{"name":"buptsteve","email":"yangzhenyu2016@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tua-api_1.7.0_1619685016568_0.40998609054240065"},"_hasShrinkwrap":false},"2.2.0":{"name":"tua-api","version":"2.2.0","description":"🏗 A common tool helps converting configs to api functions","main":"dist/TuaApi.cjs.js","module":"dist/TuaApi.esm.js","unpkg":"dist/TuaApi.umd.js","jsdelivr":"dist/TuaApi.umd.js","types":"typings/src/index.d.ts","scripts":{"commit":"git-cz","prepare":"husky install","cov":"open coverage/lcov-report/index.html","docs":"vuepress dev docs","docs:build":"vuepress build docs","lint":"eslint --ext .js,.ts --fix ./","test":"cross-env NODE_ENV=test jest","test:ci":"npm test","test:unit:tdd":"cross-env NODE_ENV=test jest --watch","prebuild":"rimraf dist/*, typings/* & npm run test","build":"cross-env NODE_ENV=production rollup -c","deploy":"npm run docs:build && gh-pages -m \"[ci skip]\" -d docs/.vuepress/dist","prepublishOnly":"npm run build","pub:n":"HUSKY=0 bumpp --commit 'chore: v%s' --push --tag && npm --registry https://mirrors.tencent.com/npm/ publish --tag next"},"config":{"commitizen":{"path":"./node_modules/cz-conventional-changelog"}},"lint-staged":{"{src,test}/**/*.{js,ts}":["eslint --fix"]},"dependencies":{"axios":"^0.26.1","fetch-jsonp":"1.2.3","koa-compose":"^4.1.0","openapi3-ts":"^2.0.2"},"devDependencies":{"@babel/core":"^7.19.1","@babel/preset-env":"^7.19.1","@babel/preset-typescript":"^7.18.6","@commitlint/cli":"^12.1.4","@commitlint/config-conventional":"^12.1.4","@rollup/plugin-babel":"^5.3.1","@rollup/plugin-commonjs":"^19.0.2","@rollup/plugin-json":"^4.1.0","@rollup/plugin-node-resolve":"^13.3.0","@rollup/plugin-replace":"^2.4.2","@tencent/eslint-config-tencent":"^0.13.3","@types/jest":"^26.0.24","@types/node":"^17.0.45","@typescript-eslint/eslint-plugin":"^4.33.0","@typescript-eslint/parser":"^4.33.0","all-contributors-cli":"^6.20.4","axios-mock-adapter":"^1.21.2","babel-core":"^7.0.0-bridge.0","babel-eslint":"^10.1.0","babel-jest":"^27.5.1","bumpp":"^8.2.1","codecov":"^3.8.3","commitizen":"^4.2.5","cross-env":"^7.0.3","cz-conventional-changelog":"^3.3.0","eslint":"^7.32.0","eslint-define-config":"^1.7.0","gh-pages":"^3.2.3","husky":"^6.0.0","jest":"^27.5.1","lint-staged":"^11.2.6","rimraf":"^3.0.2","rollup":"^2.79.0","rollup-plugin-eslint":"^7.0.0","rollup-plugin-terser":"^7.0.2","rollup-plugin-typescript2":"^0.30.0","tslib":"^2.4.0","typescript":"~4.4.4","vuepress":"^1.9.7"},"repository":{"type":"git","url":"git+https://git.woa.com/sports-libs/tua-api"},"homepage":"https://tua-api.pages.woa.com/","author":{"name":"StEve Young"},"license":"MIT","gitHead":"41c0a28bbceb749ae0b1674a7a82b23ff8157e84","_id":"tua-api@2.2.0","_nodeVersion":"16.19.0","_npmVersion":"8.19.3","dist":{"integrity":"sha512-K64zonUsfz9aaU11VTk71OkQNM3D0VBM0n+jzR5oGWGw0V4mFb2dKZAzyMziBDh4y5XjQdiRJ8yzuQd69vMDTw==","shasum":"f4b0880ade9598653049b19e11570bfc830da2b6","tarball":"https://registry.npmjs.org/tua-api/-/tua-api-2.2.0.tgz","fileCount":69,"unpackedSize":217083,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE3VXN7aQ7jfuCoFTy4qn5xmax8eN5ycg0l0F3Y8gBnrAiEA5HqxCAHKfTSHJ7R32QiNKYyzfDYwQKtnavfL1FPEK7o="}]},"_npmUser":{"name":"buptsteve","email":"2747745470@qq.com"},"directories":{},"maintainers":[{"name":"buptsteve","email":"2747745470@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/tua-api_2.2.0_1701688708973_0.978053356801093"},"_hasShrinkwrap":false}},"time":{"created":"2018-09-28T10:00:05.104Z","0.1.0":"2018-09-28T10:00:05.356Z","modified":"2023-12-04T11:18:29.382Z","0.1.1-alpha.0":"2018-10-01T11:20:34.093Z","0.1.1":"2018-10-01T13:41:51.976Z","0.2.0":"2018-10-17T15:01:52.918Z","0.2.1":"2018-10-22T09:40:02.435Z","0.2.2":"2018-10-31T06:12:04.052Z","0.3.0":"2018-11-13T15:16:59.808Z","0.3.1":"2018-11-14T10:31:43.944Z","0.3.2":"2018-11-15T03:04:39.259Z","0.3.3":"2018-12-03T12:26:43.849Z","0.4.0":"2018-12-09T13:27:12.431Z","1.0.0":"2019-02-19T10:17:53.212Z","1.0.1":"2019-03-05T09:26:26.258Z","1.1.0":"2019-04-04T09:55:44.545Z","1.1.1":"2019-04-11T06:26:32.989Z","1.2.0-0":"2019-04-15T11:16:27.283Z","1.2.0":"2019-04-18T04:25:47.992Z","1.2.1":"2019-04-22T09:04:11.552Z","1.3.0":"2019-04-23T11:45:35.394Z","1.3.1":"2019-06-28T12:09:55.789Z","1.3.2":"2019-07-04T05:04:59.776Z","1.3.3":"2019-07-25T12:24:42.999Z","1.3.4":"2019-08-07T07:26:58.370Z","1.3.5":"2019-09-11T10:58:38.949Z","1.4.0-0":"2019-09-24T06:14:44.196Z","1.4.0":"2019-09-25T13:14:15.188Z","1.4.1-0":"2019-10-09T02:55:43.175Z","1.4.1-1":"2019-10-11T13:57:03.289Z","1.4.1-2":"2019-10-28T07:19:47.764Z","1.4.1-3":"2019-10-28T07:40:54.871Z","1.4.1":"2019-10-28T07:49:42.584Z","1.4.2":"2019-12-16T13:52:01.725Z","1.4.3":"2019-12-16T14:26:13.114Z","1.4.4-0":"2020-02-17T02:24:53.587Z","1.4.4-1":"2020-02-17T02:40:22.329Z","1.4.4":"2020-02-17T03:40:32.490Z","1.5.0-0":"2020-02-17T05:15:07.146Z","1.5.0-1":"2020-03-02T04:12:12.585Z","1.5.0":"2020-03-03T03:18:08.921Z","1.6.0-0":"2020-07-20T09:47:07.102Z","1.6.0-1":"2020-07-21T07:01:05.200Z","1.6.0":"2020-07-21T07:48:40.753Z","1.6.1":"2021-02-03T03:51:01.241Z","1.7.0":"2021-04-29T08:30:16.710Z","2.2.0":"2023-12-04T11:18:29.196Z"},"maintainers":[{"name":"buptsteve","email":"2747745470@qq.com"}],"description":"🏗 A common tool helps converting configs to api functions","author":{"name":"StEve Young"},"license":"MIT","readme":"<h1 align=\"center\">tua-api</h1>\n\n\n<h4 align=\"center\">让我们优雅地调用 api~</h4>\n\n<p align=\"center\">\n    <a href=\"https://tua-api.pages.woa.com/\">👉完整文档地址点这里👈</a>\n</p>\n\n<p align=\"center\">\n    <a href=\"https://circleci.com/gh/tuateam/tua-api/tree/master\" target=\"_blank\">\n        <img src=\"https://img.shields.io/circleci/project/github/tuateam/tua-api/master.svg\" alt=\"Build Status\">\n    </a>\n    <a href=\"https://codecov.io/github/tuateam/tua-api?branch=master\" target=\"_blank\">\n        <img src=\"https://img.shields.io/codecov/c/github/tuateam/tua-api/master.svg\" alt=\"Coverage Status\">\n    </a>\n    <a href=\"https://david-dm.org/tuateam/tua-api\" target=\"_blank\">\n        <img src=\"https://david-dm.org/tuateam/tua-api.svg\" alt=\"dependencies\">\n    </a>\n    <a href=\"https://www.npmjs.com/package/tua-api\" target=\"_blank\">\n        <img src=\"https://badgen.net/npm/dm/tua-api\" alt=\"Downloads per month\">\n        <img src=\"https://img.shields.io/npm/v/tua-api.svg\" alt=\"Version\">\n        <img src=\"https://img.shields.io/npm/v/tua-api/next.svg\" alt=\"Next Version\">\n        <img src=\"https://img.shields.io/npm/l/tua-api.svg\" alt=\"License\">\n    </a>\n</p>\n\n## `tua-api` 是什么？\n`tua-api` 是一个针对发起 api 请求提供辅助功能的库。采用 ES6+ 语法，并采用 jest 进行了完整的单元测试。\n\n目前已适配：\n\n* web 端：axios, fetch-jsonp\n* Node 端：axios\n* 小程序端：wx.request\n\n<a href=\"https://codesandbox.io/s/2o24xn0750\" target=\"_blank\">\n    <img alt=\"Edit tua-api github example\" src=\"https://codesandbox.io/static/img/play-codesandbox.svg\">\n</a>\n\n## 安装\n### web 端\n#### 安装本体\n\n```bash\n$ npm i -S tua-api\n# OR\n$ yarn add tua-api\n```\n\n然后直接导入即可\n\n```js\nimport TuaApi from 'tua-api'\n```\n\n#### 配置武器\n配置“武器”分为两种情况:\n\n* [已配置 CORS 跨域请求头](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS)，或是没有跨域需求时，无需任何操作（默认采用的就是 `axios`）。\n\n* 若是用不了 CORS，那么就需要设置 `reqType: 'jsonp'` 借助 jsonp 实现跨域\n\n但是 jsonp 只支持使用 get 的方式请求，所以如果需要发送 post 或其他方式的请求，还是需要使用 `axios`（服务端还是需要配置 CORS）。\n\n### 小程序端\n#### 安装本体即可\n\n```bash\n$ npm i -S tua-api\n# OR\n$ yarn add tua-api\n```\n\n```js\nimport TuaApi from 'tua-api'\n```\n\n> 小程序还用不了 npm？[@tua-mp/service](https://tuateam.github.io/tua-mp/tua-mp-service/) 了解一下？\n\n## `tua-api` 能干什么？\n`tua-api` 能实现统一管理 api 配置（例如一般放在 `src/apis/` 下）。经过处理后，业务侧代码只需要这样写即可：\n\n```js\nimport { fooApi } from '@/apis/'\n\nfooApi\n    .bar({ a: '1', b: '2' }) // 发起请求，a、b 是请求参数\n    .then(console.log)       // 收到响应\n    .catch(console.error)    // 处理错误\n```\n\n不仅如此，还有一些其他功能：\n\n* 参数校验\n* 默认参数\n* 中间件（koa 风格）\n* ...\n\n```js\n// 甚至可以更进一步和 tua-storage 配合使用\nimport TuaStorage from 'tua-storage'\nimport { getSyncFnMapByApis } from 'tua-api'\n\n// 本地写好的各种接口配置\nimport * as apis from '@/apis'\n\nconst tuaStorage = new TuaStorage({\n    syncFnMap: getSyncFnMapByApis(apis),\n})\n\nconst fetchParam = {\n    key: fooApi.bar.key,\n    syncParams: { a: 'a', b: 'b' },\n\n    // 过期时间，默认值为实例化时的值，以秒为单位\n    expires: 10,\n\n    // 是否直接调用同步函数更新数据，默认为 false\n    // 适用于需要强制更新数据的场景，例如小程序中的下拉刷新\n    isForceUpdate: true,\n\n    // ...\n}\n\ntuaStorage\n    .load(fetchParam)\n    .then(console.log)\n    .catch(console.error)\n```\n\n## 怎么写 `api` 配置？\n拿以下 api 地址举例：\n\n* `https://example-base.com/foo/bar/something/create`\n* `https://example-base.com/foo/bar/something/modify`\n* `https://example-base.com/foo/bar/something/delete`\n\n### 地址结构划分\n以上地址，一般将其分为`3`部分：\n\n* baseUrl: `'https://example-base.com/foo/bar'`\n* prefix: `'something'`\n* pathList: `[ 'create', 'modify', 'delete' ]`\n\n### 文件结构\n`api/` 一般是这样的文件结构：\n\n```\n.\n└── apis\n    ├── prefix-1.js\n    ├── prefix-2.js\n    ├── something.js // <-- 以上的 api 地址会放在这里，名字随意\n    └── index.js\n```\n\n### 基础配置内容\n```js\n// src/apis/something.js\n\nexport default {\n    // 接口基础地址\n    baseUrl: 'https://example-base.com/foo/bar',\n\n    // 接口的中间路径\n    prefix: 'something',\n\n    // 接口地址数组\n    pathList: [\n        { path: 'create' },\n        { path: 'modify' },\n        { path: 'delete' },\n    ],\n}\n```\n\n[更多配置请点击这里查看](https://tua-api.pages.woa.com/config/common.html)\n\n### 配置导出\n最后来看一下 `apis/index.js` 该怎么写：\n\n```js\nimport TuaApi from 'tua-api'\n\n// 初始化\nconst tuaApi = new TuaApi({ ... })\n\n// 使用中间件\ntuaApi\n    .use(async (ctx, next) => {\n        // 请求发起前\n        console.log('before: ', ctx)\n\n        await next()\n\n        // 响应返回后\n        console.log('after: ', ctx)\n    })\n    // 链式调用\n    .use(...)\n\nexport const fakeGet = tuaApi.getApi(require('./fake-get').default)\nexport const fakePost = tuaApi.getApi(require('./fake-post').default)\n```\n\n小程序端建议使用 [@tua-mp/cli](https://tuateam.github.io/tua-mp/tua-mp-cli/) 一键生成 api。\n\n```bash\n$ tuamp add api <api-name>\n```\n\n### 配置的构成\n在 `tua-api` 中配置分为四种：\n\n* [默认配置（调用 `new TuaApi({ ... })` 时传递的）](https://tua-api.pages.woa.com/config/default.html)\n* [公共配置（和 `pathList` 同级的配置）](https://tua-api.pages.woa.com/config/common.html)\n* [自身配置（`pathList` 数组中的对象上的配置）](https://tua-api.pages.woa.com/config/self.html)\n* [运行配置（在实际调用接口时传递的配置）](https://tua-api.pages.woa.com/config/runtime.html)\n\n其中优先级自然是:\n\n`默认配置 < 公共配置 < 自身配置 < 运行配置`\n\n<p align=\"center\">\n    <a href=\"https://tua-api.pages.woa.com/config/\">👉更多配置点击这里👈</a>\n</p>\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tr>\n    <td align=\"center\"><a href=\"https://buptsteve.github.io\"><img src=\"https://avatars2.githubusercontent.com/u/11501493?v=4\" width=\"100px;\" alt=\"StEve Young\"/><br /><sub><b>StEve Young</b></sub></a><br /><a href=\"https://github.com/tuateam/tua-api/commits?author=BuptStEve\" title=\"Code\">💻</a> <a href=\"https://github.com/tuateam/tua-api/commits?author=BuptStEve\" title=\"Documentation\">📖</a> <a href=\"#infra-BuptStEve\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">🚇</a></td>\n    <td align=\"center\"><a href=\"https://github.com/evinma\"><img src=\"https://avatars2.githubusercontent.com/u/16096567?v=4\" width=\"100px;\" alt=\"evinma\"/><br /><sub><b>evinma</b></sub></a><br /><a href=\"https://github.com/tuateam/tua-api/commits?author=evinma\" title=\"Code\">💻</a></td>\n  </tr>\n</table>\n\n<!-- markdownlint-enable -->\n<!-- prettier-ignore-end -->\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","readmeFilename":"README.md","homepage":"https://tua-api.pages.woa.com/","repository":{"type":"git","url":"git+https://git.woa.com/sports-libs/tua-api"}}