buttercms
Version:
ButterCMS API Client
1 lines • 5.43 kB
JavaScript
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.Butter=t():e.Butter=t()}(this,(()=>(()=>{"use strict";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),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{default:()=>u});const n="2.0.0",r="https://api.buttercms.com/v2",o={author:"authors",category:"categories",content:"content",feed:"feeds",page:"pages",post:"posts",tag:"tags"};function s(e,t){const{onError:n,onRequest:r,onResponse:o,...s}=t.config,{auth_token:a,test:c,preview:i,...u}=t.params;n&&n(e,{options:s,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}/${o[e]}/`}(e),i=e.replace(e[0],e[0].toUpperCase()),{abortOnTimeout:u,applyRequestUrlForErrorMessages:l,cancelRequest:p,cleanup:f,determineFetchError:m,signal:d}=function(e){let t=new AbortController,n="";function r(e){return`${n}: ${e}`}function o(){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:o,controller:t,determineFetchError:function(e,n){const s=t&&t.signal.reason&&t.signal.aborted,a="TimeoutError"===e.name;return s?t.signal.reason:a?r(`Request timed out after ${n}ms.`):(o(),e)},signal:t.signal}}(i);async function g(r=c,o={}){const{apiToken:i,...g}=t,h=new Headers({"Content-Type":"application/json","X-Butter-Client":`JS/${n}`});"undefined"==typeof window&&h.append("Accept-Encoding","gzip"),l(r);const{config:y,headers:R,params:q}=await async function(e,t,n){const{onError:r,onRequest:o,onResponse:s,...c}=n.config;if(o){const{headers:i,options:u,params:l}=await o(e,{cancelRequest:n.cancelRequest,headers:n.headers,options:c,params:n.params,type:n.type});return{config:{...u,onError:r,onRequest:o,onResponse:s},headers:i,params:a(l,t,u)}}return{...n,params:a(n.params,t,c)}}(r,i,{cancelRequest:p,config:g,headers:h,params:o,type:e});try{const b=AbortSignal.timeout?AbortSignal.timeout(y.timeout):setTimeout((()=>u(y.timeout)),y.timeout),w=await fetch(`${r}?${new URLSearchParams(q)}`,{cache:y.cache,method:"GET",headers:R,signal:AbortSignal.timeout?AbortSignal.any([d,b]):d});if(AbortSignal.timeout||clearTimeout(b),f(),200!==w.status)throw{response:w,config:y,params:q};return await async function(e,t){const{onError:n,onRequest:r,onResponse:o,...s}=t.config,{auth_token:a,test:c,preview:i,...u}=t.params;if(o){const n=e.clone();await o(n,{options:s,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:o?[o]:[],timeout:t.config.timeout}}}(w,{config:y,params:q,type:e,requestHeaders:h})}catch(v){if(v.response){const $=await v.response.json(),j=Object.fromEntries(Object.entries(v.params).filter((([e])=>"auth_token"!==e))),E=new URL(v.response.url);E.searchParams.delete("auth_token");const T={data:$,headers:v.response.headers,status:v.response.status,statusText:v.response.statusText,config:v.config,params:j,type:e,url:E};function O(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 s($,T),Promise.reject(new Error(`${O($)} (${v.response.status})`,{cause:T}))}{const S=m(v,y.timeout);return s(S,{config:y,params:q,type:e}),f(),Promise.reject(new Error(S))}}}return{cancelRequest:p,list:async function(e={}){return await g(c,e)},retrieve:async function(e,t){return await g(`${c}${e}/`,t)},search:async function(e="",t={}){return t.query=e,await g(`${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:o}=c("post",e);return{cancelRequest:t,list:n,retrieve:r,search:o}},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:o=null,onRequest:s=null,onResponse:a=null,testMode:c=!1,timeout:u=3e3}=t;return{version:n,...p(i,{apiToken:e,cache:r,onError:o,onRequest:s,onResponse:a,testMode:c,timeout:u})}}function p(e,t){return Object.keys(e).reduce(((n,r)=>({...n,[r.toLocaleLowerCase()]:e[r](t)})),{})}return t})()));