buttercms
Version:
ButterCMS API Client
1 lines • 5.04 kB
JavaScript
var e={d:(t,n)=>{for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)},t={};e.d(t,{A:()=>u});const n="2.0.0",r="https://api.buttercms.com/v2",s={author:"authors",category:"categories",content:"content",feed:"feeds",page:"pages",post:"posts",tag:"tags"};function o(e,t){const{onError:n,onRequest:r,onResponse:s,...o}=t.config,{auth_token:a,test:c,preview:i,...u}=t.params;n&&n(e,{options:o,params:u,type:t.type})}function a(e,t,n){const r={auth_token:t};return n.testMode&&(r.test=1,r.preview=1),{...e,...r}}function c(e,t){const c=function(e){return`${r}/${s[e]}/`}(e),i=e.replace(e[0],e[0].toUpperCase()),{abortOnTimeout:u,applyRequestUrlForErrorMessages:l,cancelRequest:p,cleanup:f,determineFetchError:m,signal:h}=function(e){let t=new AbortController,n="";function r(e){return`${n}: ${e}`}function s(){t=null}return{abortOnTimeout:function(e){t.abort(r(`Request timed out after ${e}ms.`))},applyRequestUrlForErrorMessages:function(t){n=`${e} (${t})`},cancelRequest:function(){t.abort(r("Request cancelled"))},cleanup:s,controller:t,determineFetchError:function(e,n){const o=t&&t.signal.reason&&t.signal.aborted,a="TimeoutError"===e.name;return o?t.signal.reason:a?r(`Request timed out after ${n}ms.`):(s(),e)},signal:t.signal}}(i);async function d(r=c,s={}){const{apiToken:i,...d}=t,g=new Headers({"Content-Type":"application/json","X-Butter-Client":`JS/${n}`});"undefined"==typeof window&&g.append("Accept-Encoding","gzip"),l(r);const{config:R,headers:q,params:y}=await async function(e,t,n){const{onError:r,onRequest:s,onResponse:o,...c}=n.config;if(s){const{headers:i,options:u,params:l}=await s(e,{cancelRequest:n.cancelRequest,headers:n.headers,options:c,params:n.params,type:n.type});return{config:{...u,onError:r,onRequest:s,onResponse:o},headers:i,params:a(l,t,u)}}return{...n,params:a(n.params,t,c)}}(r,i,{cancelRequest:p,config:d,headers:g,params:s,type:e});try{const w=AbortSignal.timeout?AbortSignal.timeout(R.timeout):setTimeout((()=>u(R.timeout)),R.timeout),v=await fetch(`${r}?${new URLSearchParams(y)}`,{cache:R.cache,method:"GET",headers:q,signal:AbortSignal.timeout?AbortSignal.any([h,w]):h});if(AbortSignal.timeout||clearTimeout(w),f(),200!==v.status)throw{response:v,config:R,params:y};return await async function(e,t){const{onError:n,onRequest:r,onResponse:s,...o}=t.config,{auth_token:a,test:c,preview:i,...u}=t.params;if(s){const n=e.clone();await s(n,{options:o,params:u,type:t.type})}return{data:await e.json(),headers:Object.fromEntries(e.headers.entries()),status:e.status,statusText:e.statusText,config:{url:e.url,method:"get",headers:Object.fromEntries(t.requestHeaders.entries()),transformRequest:r?[r]:[],transformResponse:s?[s]:[],timeout:t.config.timeout}}}(v,{config:R,params:y,type:e,requestHeaders:g})}catch(b){if(b.response){const $=await b.response.json(),E=Object.fromEntries(Object.entries(b.params).filter((([e])=>"auth_token"!==e))),j=new URL(b.response.url);j.searchParams.delete("auth_token");const T={data:$,headers:b.response.headers,status:b.response.status,statusText:b.response.statusText,config:b.config,params:E,type:e,url:j};function A(e){const t=Object.keys(e);return t.length>1?`Errors caught in [${t.join(", ")}]: see cause for details`:`[${t[0]}]: ${e[t[0]]}`}return o($,T),Promise.reject(new Error(`${A($)} (${b.response.status})`,{cause:T}))}{const O=m(b,R.timeout);return o(O,{config:R,params:y,type:e}),f(),Promise.reject(new Error(O))}}}return{cancelRequest:p,list:async function(e={}){return await d(c,e)},retrieve:async function(e,t){return await d(`${c}${e}/`,t)},search:async function(e="",t={}){return t.query=e,await d(`${c}search/`,t)}}}const i={Author:function(e={}){const{cancelRequest:t,list:n,retrieve:r}=c("author",e);return{cancelRequest:t,list:n,retrieve:r}},Category:function(e={}){const{cancelRequest:t,list:n,retrieve:r}=c("category",e);return{cancelRequest:t,list:n,retrieve:r}},Content:function(e={}){const{cancelRequest:t,retrieve:n}=c("content",e);return{cancelRequest:t,retrieve:n}},Feed:function(e={}){const{cancelRequest:t,retrieve:n}=c("feed",e);return{cancelRequest:t,retrieve:n}},Page:function(e={}){const{cancelRequest:t,retrieve:n,search:r}=c("page",e);return{cancelRequest:t,list:async(e,t)=>await n(e,t),retrieve:async(e,t,r)=>await n(`${e}/${t}`,r),search:r}},Post:function(e={}){const{cancelRequest:t,list:n,retrieve:r,search:s}=c("post",e);return{cancelRequest:t,list:n,retrieve:r,search:s}},Tag:function(e={}){const{cancelRequest:t,list:n,retrieve:r}=c("tag",e);return{cancelRequest:t,list:n,retrieve:r}}};function u(e,t={}){if(!e)throw"ButterCMS API token not set";return this instanceof l?l:new l(e,t)}function l(e,t){const{cache:r="default",onError:s=null,onRequest:o=null,onResponse:a=null,testMode:c=!1,timeout:u=3e3}=t;return{version:n,...p(i,{apiToken:e,cache:r,onError:s,onRequest:o,onResponse:a,testMode:c,timeout:u})}}function p(e,t){return Object.keys(e).reduce(((n,r)=>({...n,[r.toLocaleLowerCase()]:e[r](t)})),{})}var f=t.A;export{f as default};