Comparing version 0.0.23 to 1.0.0
@@ -0,1 +1,7 @@ | ||
# [1.0.0](https://github.com/posva/mande/compare/v0.0.23...v1.0.0) (2021-03-24) | ||
### Bug Fixes | ||
- remove null headers ([#210](https://github.com/posva/mande/issues/210)) ([32fcd3e](https://github.com/posva/mande/commit/32fcd3ec83f6bd07c68e0b25ef5c222dc08b258d)) | ||
## [0.0.23](https://github.com/posva/mande/compare/v0.0.22...v0.0.23) (2020-08-10) | ||
@@ -2,0 +8,0 @@ |
/*! | ||
* mande v0.0.22 | ||
* (c) 2020 Eduardo San Martin Morote | ||
* mande v0.0.23 | ||
* (c) 2021 Eduardo San Martin Morote | ||
* @license MIT | ||
@@ -21,2 +21,11 @@ */ | ||
} | ||
function removeNullishValues(headers) { | ||
return Object.keys(headers).reduce((newHeaders, headerName) => { | ||
if (headers[headerName] != null) { | ||
// @ts-ignore | ||
newHeaders[headerName] = headers[headerName]; | ||
} | ||
return newHeaders; | ||
}, {}); | ||
} | ||
/** | ||
@@ -63,6 +72,7 @@ * Global default options as {@link Options} that are applied to **all** mande | ||
} | ||
let mergedOptions = Object.assign(Object.assign(Object.assign(Object.assign({}, defaults), instanceOptions), { method }), localOptions); | ||
let mergedOptions = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, defaults), instanceOptions), { method }), localOptions), { | ||
// we need to ditch nullish headers | ||
headers: removeNullishValues(Object.assign(Object.assign(Object.assign({}, defaults.headers), instanceOptions.headers), localOptions.headers)) }); | ||
let query = Object.assign(Object.assign(Object.assign({}, defaults.query), instanceOptions.query), localOptions.query); | ||
let { responseAs } = mergedOptions; | ||
mergedOptions.headers = Object.assign(Object.assign(Object.assign({}, defaults.headers), instanceOptions.headers), localOptions.headers); | ||
url = joinURL(baseURL, typeof url === 'number' ? '' + url : url || ''); | ||
@@ -95,3 +105,3 @@ // TODO: warn about multiple queries provided not supported | ||
} | ||
const instanceOptions = Object.assign({ headers: {} }, passedInstanceOptions); | ||
const instanceOptions = Object.assign({ query: {}, headers: {} }, passedInstanceOptions); | ||
return { | ||
@@ -107,2 +117,19 @@ options: instanceOptions, | ||
} | ||
/** | ||
* Creates an Nuxt SSR compatible function that automatically proxies cookies | ||
* to requests and works transparently on the server and client (it still | ||
* requires a fetch polyfill on Node). | ||
* @example | ||
* ```js | ||
* import { mande, nuxtWrap } from 'mande' | ||
* | ||
* const fetchPolyfill = process.server ? require('node-fetch') : fetch | ||
* const users = mande(BASE_URL + '/api/users', {}, fetchPolyfill) | ||
* | ||
* export const getUserById = nuxtWrap(users, (api, id: string) => api.get(id)) | ||
* ``` | ||
* | ||
* @param api - Mande instance to wrap | ||
* @param fn - function to be wrapped | ||
*/ | ||
function nuxtWrap(api, fn) { | ||
@@ -109,0 +136,0 @@ // args for the api call + 1 because of api parameter |
@@ -27,3 +27,3 @@ | ||
*/ | ||
export declare function mande(baseURL: string, passedInstanceOptions?: Options, fetchPolyfill?: Window['fetch']): MandeInstance; | ||
export declare function mande(baseURL: string, passedInstanceOptions?: OptionsRaw, fetchPolyfill?: Window['fetch']): MandeInstance; | ||
@@ -45,5 +45,3 @@ /** | ||
*/ | ||
options: Options & { | ||
headers: Required<Options>['headers']; | ||
}; | ||
options: Required<Pick<OptionsRaw, 'headers'>> & Pick<OptionsRaw, 'responseAs' | 'query'>; | ||
/** | ||
@@ -122,2 +120,19 @@ * Sends a GET request to the given url. | ||
/** | ||
* Creates an Nuxt SSR compatible function that automatically proxies cookies | ||
* to requests and works transparently on the server and client (it still | ||
* requires a fetch polyfill on Node). | ||
* @example | ||
* ```js | ||
* import { mande, nuxtWrap } from 'mande' | ||
* | ||
* const fetchPolyfill = process.server ? require('node-fetch') : fetch | ||
* const users = mande(BASE_URL + '/api/users', {}, fetchPolyfill) | ||
* | ||
* export const getUserById = nuxtWrap(users, (api, id: string) => api.get(id)) | ||
* ``` | ||
* | ||
* @param api - Mande instance to wrap | ||
* @param fn - function to be wrapped | ||
*/ | ||
export declare function nuxtWrap<M extends MandeInstance, F extends (api: M, ...args: any[]) => any>(api: M, fn: F): (...args: InferArgs<F>) => ReturnType<F>; | ||
@@ -144,2 +159,9 @@ | ||
export declare interface OptionsRaw extends Omit<Options, 'headers'> { | ||
/** | ||
* Headers sent alongside the request. Set any header to null to remove it. | ||
*/ | ||
headers?: Record<string, string | null>; | ||
} | ||
export { } |
/*! | ||
* mande v0.0.22 | ||
* (c) 2020 Eduardo San Martin Morote | ||
* mande v0.0.23 | ||
* (c) 2021 Eduardo San Martin Morote | ||
* @license MIT | ||
@@ -17,2 +17,11 @@ */ | ||
} | ||
function removeNullishValues(headers) { | ||
return Object.keys(headers).reduce((newHeaders, headerName) => { | ||
if (headers[headerName] != null) { | ||
// @ts-ignore | ||
newHeaders[headerName] = headers[headerName]; | ||
} | ||
return newHeaders; | ||
}, {}); | ||
} | ||
/** | ||
@@ -59,6 +68,7 @@ * Global default options as {@link Options} that are applied to **all** mande | ||
} | ||
let mergedOptions = Object.assign(Object.assign(Object.assign(Object.assign({}, defaults), instanceOptions), { method }), localOptions); | ||
let mergedOptions = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, defaults), instanceOptions), { method }), localOptions), { | ||
// we need to ditch nullish headers | ||
headers: removeNullishValues(Object.assign(Object.assign(Object.assign({}, defaults.headers), instanceOptions.headers), localOptions.headers)) }); | ||
let query = Object.assign(Object.assign(Object.assign({}, defaults.query), instanceOptions.query), localOptions.query); | ||
let { responseAs } = mergedOptions; | ||
mergedOptions.headers = Object.assign(Object.assign(Object.assign({}, defaults.headers), instanceOptions.headers), localOptions.headers); | ||
url = joinURL(baseURL, typeof url === 'number' ? '' + url : url || ''); | ||
@@ -91,3 +101,3 @@ // TODO: warn about multiple queries provided not supported | ||
} | ||
const instanceOptions = Object.assign({ headers: {} }, passedInstanceOptions); | ||
const instanceOptions = Object.assign({ query: {}, headers: {} }, passedInstanceOptions); | ||
return { | ||
@@ -103,2 +113,19 @@ options: instanceOptions, | ||
} | ||
/** | ||
* Creates an Nuxt SSR compatible function that automatically proxies cookies | ||
* to requests and works transparently on the server and client (it still | ||
* requires a fetch polyfill on Node). | ||
* @example | ||
* ```js | ||
* import { mande, nuxtWrap } from 'mande' | ||
* | ||
* const fetchPolyfill = process.server ? require('node-fetch') : fetch | ||
* const users = mande(BASE_URL + '/api/users', {}, fetchPolyfill) | ||
* | ||
* export const getUserById = nuxtWrap(users, (api, id: string) => api.get(id)) | ||
* ``` | ||
* | ||
* @param api - Mande instance to wrap | ||
* @param fn - function to be wrapped | ||
*/ | ||
function nuxtWrap(api, fn) { | ||
@@ -105,0 +132,0 @@ // args for the api call + 1 because of api parameter |
/*! | ||
* mande v0.0.22 | ||
* (c) 2020 Eduardo San Martin Morote | ||
* mande v0.0.23 | ||
* (c) 2021 Eduardo San Martin Morote | ||
* @license MIT | ||
*/ | ||
let e=/\/+$/,n=/^\/+/;const t={responseAs:"json",headers:{Accept:"application/json","Content-Type":"application/json"}};function s(s,o={},r){function c(o,r,c,a={}){let u,p;"object"==typeof r?(u="",p=r,a=c||{}):(u=r,p=c);let b=Object.assign(Object.assign(Object.assign(Object.assign({},t),l),{method:o}),a),f=Object.assign(Object.assign(Object.assign({},t.query),l.query),a.query),{responseAs:j}=b;return b.headers=Object.assign(Object.assign(Object.assign({},t.headers),l.headers),a.headers),u=function(t,s){return t.replace(e,"")+"/"+s.replace(n,"")}(s,"number"==typeof u?""+u:u||""),u+=function(e){let n=Object.keys(e).map(n=>[n,e[n]].map(encodeURIComponent).join("=")).join("&");return n?"?"+n:""}(f),p&&(b.body=JSON.stringify(p)),i(u,b).then(e=>Promise.all([e,"response"===j?e:e[j]().catch(()=>null)])).then(([e,n])=>{if(e.status>=200&&e.status<300)return 204==e.status?null:n;let t=new Error(e.statusText);throw t.response=e,t.body=n,t})}const i="undefined"!=typeof fetch?fetch:r;if(!i)throw new Error("No fetch function exists. Make sure to include a polyfill on Node.js.");const l=Object.assign({headers:{}},o);return{options:l,post:c.bind(null,"POST"),put:c.bind(null,"PUT"),patch:c.bind(null,"PATCH"),get:(e,n)=>c("GET",e,null,n),delete:(e,n)=>c("DELETE",e,null,n)}}function o(e,n){const t=n.length;return function(){let s=e,o=Array.from(arguments);if(arguments.length===t){s=Object.assign({},e);const[n]=o.splice(0,1);n(s)}return n.call(null,s,...o)}}export{t as defaults,s as mande,o as nuxtWrap}; | ||
let e=/\/+$/,t=/^\/+/;const n={responseAs:"json",headers:{Accept:"application/json","Content-Type":"application/json"}};function s(s,o={},r){function c(o,r,c,a={}){let u,p;"object"==typeof r?(u="",p=r,a=c||{}):(u=r,p=c);let b=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},n),l),{method:o}),a),{headers:(j=Object.assign(Object.assign(Object.assign({},n.headers),l.headers),a.headers),Object.keys(j).reduce(((e,t)=>(null!=j[t]&&(e[t]=j[t]),e)),{}))});var j;let f=Object.assign(Object.assign(Object.assign({},n.query),l.query),a.query),{responseAs:d}=b;return u=function(n,s){return n.replace(e,"")+"/"+s.replace(t,"")}(s,"number"==typeof u?""+u:u||""),u+=function(e){let t=Object.keys(e).map((t=>[t,e[t]].map(encodeURIComponent).join("="))).join("&");return t?"?"+t:""}(f),p&&(b.body=JSON.stringify(p)),i(u,b).then((e=>Promise.all([e,"response"===d?e:e[d]().catch((()=>null))]))).then((([e,t])=>{if(e.status>=200&&e.status<300)return 204==e.status?null:t;let n=new Error(e.statusText);throw n.response=e,n.body=t,n}))}const i="undefined"!=typeof fetch?fetch:r;if(!i)throw new Error("No fetch function exists. Make sure to include a polyfill on Node.js.");const l=Object.assign({query:{},headers:{}},o);return{options:l,post:c.bind(null,"POST"),put:c.bind(null,"PUT"),patch:c.bind(null,"PATCH"),get:(e,t)=>c("GET",e,null,t),delete:(e,t)=>c("DELETE",e,null,t)}}function o(e,t){const n=t.length;return function(){let s=e,o=Array.from(arguments);if(arguments.length===n){s=Object.assign({},e);const[t]=o.splice(0,1);t(s)}return t.call(null,s,...o)}}export{n as defaults,s as mande,o as nuxtWrap}; |
/*! | ||
* mande v0.0.22 | ||
* (c) 2020 Eduardo San Martin Morote | ||
* mande v0.0.23 | ||
* (c) 2021 Eduardo San Martin Morote | ||
* @license MIT | ||
@@ -20,2 +20,11 @@ */ | ||
} | ||
function removeNullishValues(headers) { | ||
return Object.keys(headers).reduce((newHeaders, headerName) => { | ||
if (headers[headerName] != null) { | ||
// @ts-ignore | ||
newHeaders[headerName] = headers[headerName]; | ||
} | ||
return newHeaders; | ||
}, {}); | ||
} | ||
/** | ||
@@ -62,6 +71,7 @@ * Global default options as {@link Options} that are applied to **all** mande | ||
} | ||
let mergedOptions = Object.assign(Object.assign(Object.assign(Object.assign({}, defaults), instanceOptions), { method }), localOptions); | ||
let mergedOptions = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, defaults), instanceOptions), { method }), localOptions), { | ||
// we need to ditch nullish headers | ||
headers: removeNullishValues(Object.assign(Object.assign(Object.assign({}, defaults.headers), instanceOptions.headers), localOptions.headers)) }); | ||
let query = Object.assign(Object.assign(Object.assign({}, defaults.query), instanceOptions.query), localOptions.query); | ||
let { responseAs } = mergedOptions; | ||
mergedOptions.headers = Object.assign(Object.assign(Object.assign({}, defaults.headers), instanceOptions.headers), localOptions.headers); | ||
url = joinURL(baseURL, typeof url === 'number' ? '' + url : url || ''); | ||
@@ -94,3 +104,3 @@ // TODO: warn about multiple queries provided not supported | ||
} | ||
const instanceOptions = Object.assign({ headers: {} }, passedInstanceOptions); | ||
const instanceOptions = Object.assign({ query: {}, headers: {} }, passedInstanceOptions); | ||
return { | ||
@@ -106,2 +116,19 @@ options: instanceOptions, | ||
} | ||
/** | ||
* Creates an Nuxt SSR compatible function that automatically proxies cookies | ||
* to requests and works transparently on the server and client (it still | ||
* requires a fetch polyfill on Node). | ||
* @example | ||
* ```js | ||
* import { mande, nuxtWrap } from 'mande' | ||
* | ||
* const fetchPolyfill = process.server ? require('node-fetch') : fetch | ||
* const users = mande(BASE_URL + '/api/users', {}, fetchPolyfill) | ||
* | ||
* export const getUserById = nuxtWrap(users, (api, id: string) => api.get(id)) | ||
* ``` | ||
* | ||
* @param api - Mande instance to wrap | ||
* @param fn - function to be wrapped | ||
*/ | ||
function nuxtWrap(api, fn) { | ||
@@ -130,4 +157,6 @@ // args for the api call + 1 because of api parameter | ||
Object.defineProperty(exports, '__esModule', { value: true }); | ||
return exports; | ||
}({})); |
/*! | ||
* mande v0.0.22 | ||
* (c) 2020 Eduardo San Martin Morote | ||
* mande v0.0.23 | ||
* (c) 2021 Eduardo San Martin Morote | ||
* @license MIT | ||
*/ | ||
var Mande=function(e){"use strict";let n=/\/+$/,t=/^\/+/;const s={responseAs:"json",headers:{Accept:"application/json","Content-Type":"application/json"}};return e.defaults=s,e.mande=function(e,o={},r){function c(o,r,c,l={}){let u,p;"object"==typeof r?(u="",p=r,l=c||{}):(u=r,p=c);let f=Object.assign(Object.assign(Object.assign(Object.assign({},s),i),{method:o}),l),d=Object.assign(Object.assign(Object.assign({},s.query),i.query),l.query),{responseAs:b}=f;return f.headers=Object.assign(Object.assign(Object.assign({},s.headers),i.headers),l.headers),u=function(e,s){return e.replace(n,"")+"/"+s.replace(t,"")}(e,"number"==typeof u?""+u:u||""),u+=function(e){let n=Object.keys(e).map(n=>[n,e[n]].map(encodeURIComponent).join("=")).join("&");return n?"?"+n:""}(d),p&&(f.body=JSON.stringify(p)),a(u,f).then(e=>Promise.all([e,"response"===b?e:e[b]().catch(()=>null)])).then(([e,n])=>{if(e.status>=200&&e.status<300)return 204==e.status?null:n;let t=new Error(e.statusText);throw t.response=e,t.body=n,t})}const a="undefined"!=typeof fetch?fetch:r;if(!a)throw new Error("No fetch function exists. Make sure to include a polyfill on Node.js.");const i=Object.assign({headers:{}},o);return{options:i,post:c.bind(null,"POST"),put:c.bind(null,"PUT"),patch:c.bind(null,"PATCH"),get:(e,n)=>c("GET",e,null,n),delete:(e,n)=>c("DELETE",e,null,n)}},e.nuxtWrap=function(e,n){const t=n.length;return function(){let s=e,o=Array.from(arguments);if(arguments.length===t){s=Object.assign({},e);const[n]=o.splice(0,1);n(s)}return n.call(null,s,...o)}},e}({}); | ||
var Mande=function(e){"use strict";let t=/\/+$/,n=/^\/+/;const s={responseAs:"json",headers:{Accept:"application/json","Content-Type":"application/json"}};return e.defaults=s,e.mande=function(e,r={},o){function c(r,o,c,l={}){let u,p;"object"==typeof o?(u="",p=o,l=c||{}):(u=o,p=c);let d=Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},s),i),{method:r}),l),{headers:(b=Object.assign(Object.assign(Object.assign({},s.headers),i.headers),l.headers),Object.keys(b).reduce(((e,t)=>(null!=b[t]&&(e[t]=b[t]),e)),{}))});var b;let f=Object.assign(Object.assign(Object.assign({},s.query),i.query),l.query),{responseAs:j}=d;return u=function(e,s){return e.replace(t,"")+"/"+s.replace(n,"")}(e,"number"==typeof u?""+u:u||""),u+=function(e){let t=Object.keys(e).map((t=>[t,e[t]].map(encodeURIComponent).join("="))).join("&");return t?"?"+t:""}(f),p&&(d.body=JSON.stringify(p)),a(u,d).then((e=>Promise.all([e,"response"===j?e:e[j]().catch((()=>null))]))).then((([e,t])=>{if(e.status>=200&&e.status<300)return 204==e.status?null:t;let n=new Error(e.statusText);throw n.response=e,n.body=t,n}))}const a="undefined"!=typeof fetch?fetch:o;if(!a)throw new Error("No fetch function exists. Make sure to include a polyfill on Node.js.");const i=Object.assign({query:{},headers:{}},r);return{options:i,post:c.bind(null,"POST"),put:c.bind(null,"PUT"),patch:c.bind(null,"PATCH"),get:(e,t)=>c("GET",e,null,t),delete:(e,t)=>c("DELETE",e,null,t)}},e.nuxtWrap=function(e,t){const n=t.length;return function(){let s=e,r=Array.from(arguments);if(arguments.length===n){s=Object.assign({},e);const[t]=r.splice(0,1);t(s)}return t.call(null,s,...r)}},Object.defineProperty(e,"__esModule",{value:!0}),e}({}); |
{ | ||
"name": "mande", | ||
"version": "0.0.23", | ||
"version": "1.0.0", | ||
"description": "Some awesome description", | ||
@@ -22,3 +22,3 @@ "main": "dist/mande.common.js", | ||
"changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 1", | ||
"dev": "yarn run unit --watchAll", | ||
"dev": "yarn run test:unit --watchAll", | ||
"pretest": "yarn run lint", | ||
@@ -76,7 +76,7 @@ "test": "yarn run test:unit && yarn run build", | ||
"rollup-plugin-node-resolve": "^5.2.0", | ||
"rollup-plugin-terser": "^6.1.0", | ||
"rollup-plugin-typescript2": "^0.27.1", | ||
"rollup-plugin-terser": "^7.0.0", | ||
"rollup-plugin-typescript2": "^0.30.0", | ||
"size-limit": "^4.5.0", | ||
"ts-jest": "^26.0.0", | ||
"typescript": "^3.6.3" | ||
"typescript": "^4.0.2" | ||
}, | ||
@@ -83,0 +83,0 @@ "repository": { |
# mande [![Build Status](https://badgen.net/circleci/github/posva/mande/master)](https://circleci.com/gh/posva/mande) [![npm package](https://badgen.net/npm/v/mande)](https://www.npmjs.com/package/mande) [![coverage](https://badgen.net/codecov/c/github/posva/mande/master)](https://codecov.io/github/posva/mande) [![thanks](https://badgen.net/badge/thanks/♥/pink)](https://github.com/posva/thanks) | ||
> Simple, light and easy to use wrapper around fetch | ||
> Simple, light and extensible wrapper around fetch with smart defaults | ||
@@ -134,2 +134,3 @@ **Requires [`fetch`](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) support.** | ||
```js | ||
import { mande, nuxtWrap } from 'mande' | ||
const fetchPolyfill = process.server ? require('node-fetch') : fetch | ||
@@ -136,0 +137,0 @@ const users = mande(BASE_URL + '/api/users', {}, fetchPolyfill) |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
41018
712
0
174