| 'use strict' | ||
| const paramsSerializer = require('./params-serializer') | ||
| function isHttpUrl(url) { | ||
| if (url && typeof url === 'string' && (url.startsWith('http://') || url.startsWith('https://'))) { | ||
| return true | ||
| } | ||
| return false | ||
| } | ||
| function isBrowserEnv() { | ||
| return typeof XMLHttpRequest === 'function' && typeof location === 'object' | ||
| } | ||
| /** | ||
| * 合并 `baseURL` 和 `url` 生成基础部分 url | ||
| */ | ||
| function concatBaseURL(baseURL = '', url = '') { | ||
| if (isHttpUrl(url)) { | ||
| return url.replace(/\/+$/u, '') | ||
| } | ||
| return baseURL.replace(/\/+$/u, '') + '/' + url.replace(/^\/+/u, '').replace(/\/+$/u, '') | ||
| } | ||
| function decodeQs(str) { | ||
| if (!str) { | ||
| return {} | ||
| } | ||
| // 拆分为 ['name=mark','age=19'] 形式的数组 | ||
| const parts = str.split('&') | ||
| const obj = {} | ||
| for (let i = 0; i < parts.length; i++) { | ||
| const [name, value] = parts[i].split('=') | ||
| if (name && value) { | ||
| obj[name] = value | ||
| } | ||
| } | ||
| return obj | ||
| } | ||
| function encodeQs(obj) { | ||
| return paramsSerializer(obj) | ||
| } | ||
| module.exports = function getUrl(baseURL = '', url = '', params = {}) { | ||
| if (!isHttpUrl(baseURL) && !isHttpUrl(url) && !isBrowserEnv()) { | ||
| throw new Error(`配置项 \`baseURL\` 和 \`url\` 至少需要有一个是以 \`http://\` 或 \`https://\` 开头的绝对路径!`) | ||
| } | ||
| // 连接 `baseURL` 和 `url` | ||
| let baseUrl = concatBaseURL(baseURL, url) | ||
| // 去掉 `#` 后面的部分 | ||
| baseUrl = baseUrl.split('#')[0] | ||
| const [beforeQs, quertstring] = baseUrl.split('?') | ||
| const params2 = decodeQs(quertstring || '') | ||
| const query = Object.assign({}, params2, params) | ||
| const wholeQs = encodeQs(query) | ||
| return beforeQs + (wholeQs ? '?' + wholeQs : '') | ||
| } |
@@ -5,3 +5,3 @@ 'use strict' | ||
| const statuses = require('../static/statuses') | ||
| const getUrl = require('../core/getUrl') | ||
| const getUrl = require('../core/get-url') | ||
@@ -8,0 +8,0 @@ module.exports = function wxMiniprogramAdapter(config) { |
@@ -12,2 +12,6 @@ 'use strict' | ||
| module.exports = function paramsSerializer(params) { | ||
| if (typeof params !== 'object') { | ||
| return '' | ||
| } | ||
| const parts = [] | ||
@@ -14,0 +18,0 @@ const basicType = ['number', 'string', 'boolean'] |
+2
-0
| 'use strict' | ||
| const getDefaultAdapter = require('./core/default-adapter') | ||
| const paramsSerializer = require('./core/params-serializer') | ||
| const defaults = { | ||
| adapter: getDefaultAdapter(), | ||
| paramsSerializer, | ||
| } | ||
| module.exports = defaults |
| 'use strict' | ||
| const CryptoJS = require('crypto-js') | ||
| const getUrl = require('../core/getUrl') | ||
| const getUrl = require('../core/get-url') | ||
@@ -6,0 +6,0 @@ /** 放在 `config.headers` 中但是非正常请求头字段的字段 */ |
+4
-0
@@ -7,2 +7,3 @@ 'use strict' | ||
| const aliyunApigwSignatureInterceptor = require('./interceptors/aliyun-apigw-signature') | ||
| const getUrl = require('./core/get-url') | ||
@@ -13,2 +14,5 @@ function create(defaultConfig) { | ||
| instance.interceptors.request.use(coreInterceptor) | ||
| instance.getUrl = function instanceGetUrl(config) { | ||
| return getUrl(config.baseURL, config.url, config.params) | ||
| } | ||
| return instance | ||
@@ -15,0 +19,0 @@ } |
+4
-2
| { | ||
| "name": "jshttp", | ||
| "version": "0.5.4", | ||
| "version": "0.5.6", | ||
| "description": "基于 Axios 的 HTTP 请求库,内置了一些常用功能,支持在任何 Javascript 环境下运行", | ||
@@ -31,2 +31,5 @@ "main": "index.js", | ||
| "homepage": "https://github.com/inlym/jshttp#readme", | ||
| "peerDependencies": { | ||
| "axios": "*" | ||
| }, | ||
| "devDependencies": { | ||
@@ -36,5 +39,4 @@ "mocha": "^8.4.0" | ||
| "dependencies": { | ||
| "axios": "^0.21.1", | ||
| "crypto-js": "^4.0.0" | ||
| } | ||
| } |
| 'use strict' | ||
| const paramsSerializer = require('./params-serializer') | ||
| function isHttpUrl(url) { | ||
| if (url && typeof url === 'string' && (url.startsWith('http://') || url.startsWith('https://'))) { | ||
| return true | ||
| } | ||
| return false | ||
| } | ||
| function isBrowserEnv() { | ||
| return typeof XMLHttpRequest === 'function' && typeof location === 'object' | ||
| } | ||
| /** | ||
| * 合并 `baseURL` 和 `url` 生成基础部分 url | ||
| */ | ||
| function concatBaseURL(baseURL = '', url = '') { | ||
| if (isHttpUrl(url)) { | ||
| return url.replace(/\/+$/u, '') | ||
| } | ||
| return baseURL.replace(/\/+$/u, '') + '/' + url.replace(/^\/+/u, '').replace(/\/+$/u, '') | ||
| } | ||
| function decodeQs(str) { | ||
| if (!str) { | ||
| return {} | ||
| } | ||
| // 拆分为 ['name=mark','age=19'] 形式的数组 | ||
| const parts = str.split('&') | ||
| const obj = {} | ||
| for (let i = 0; i < parts.length; i++) { | ||
| const [name, value] = parts[i].split('=') | ||
| if (name && value) { | ||
| obj[name] = value | ||
| } | ||
| } | ||
| return obj | ||
| } | ||
| function encodeQs(obj) { | ||
| return paramsSerializer(obj) | ||
| } | ||
| module.exports = function getUri(baseURL = '', url = '', params = {}) { | ||
| if (!isHttpUrl(baseURL) && !isHttpUrl(url) && !isBrowserEnv()) { | ||
| throw new Error(`配置项 \`baseURL\` 和 \`url\` 至少需要有一个是以 \`http://\` 或 \`https://\` 开头的绝对路径!`) | ||
| } | ||
| // 连接 `baseURL` 和 `url` | ||
| let baseUrl = concatBaseURL(baseURL, url) | ||
| // 去掉 `#` 后面的部分 | ||
| baseUrl = baseUrl.split('#')[0] | ||
| const [beforeQs, quertstring] = baseUrl.split('?') | ||
| const params2 = decodeQs(quertstring || '') | ||
| const query = Object.assign({}, params2, params) | ||
| const wholeQs = encodeQs(query) | ||
| return beforeQs + (wholeQs ? '?' + wholeQs : '') | ||
| } |
30131
1.11%518
1.77%+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
+ Added
- Removed
- Removed