@storyblok/js 2.0.13 → 2.0.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/storyblok-js.js +2 -2
- package/dist/storyblok-js.mjs +240 -231
- package/package.json +2 -2
package/dist/storyblok-js.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
(function(d,p){typeof exports=="object"&&typeof module<"u"?p(exports):typeof define=="function"&&define.amd?define(["exports"],p):(d=typeof globalThis<"u"?globalThis:d||self,p(d.storyblok={}))})(this,function(d){"use strict";let p=!1;const v=[],T=n=>new Promise((e,t)=>{if(typeof window>"u"||(window.storyblokRegisterEvent=r=>{if(window.location===window.parent.location){console.warn("You are not in Draft Mode or in the Visual Editor.");return}p?r():v.push(r)},document.getElementById("storyblok-javascript-bridge")))return;const s=document.createElement("script");s.async=!0,s.src=n,s.id="storyblok-javascript-bridge",s.onerror=r=>t(r),s.onload=r=>{v.forEach(o=>o()),p=!0,e(r)},document.getElementsByTagName("head")[0].appendChild(s)});var S=Object.defineProperty,x=(n,e,t)=>e in n?S(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,c=(n,e,t)=>(x(n,typeof e!="symbol"?e+"":e,t),t);function w(n){return!(n!==n||n===1/0||n===-1/0)}function P(n,e,t){if(!w(e))throw new TypeError("Expected `limit` to be a finite number");if(!w(t))throw new TypeError("Expected `interval` to be a finite number");const s=[];let r=[],o=0;const i=function(){o++;const l=setTimeout(function(){o--,s.length>0&&i(),r=r.filter(function(u){return u!==l})},t);r.indexOf(l)<0&&r.push(l);const h=s.shift();h.resolve(n.apply(h.self,h.args))},a=function(...l){const h=this;return new Promise(function(u,k){s.push({resolve:u,reject:k,args:l,self:h}),o<e&&i()})};return a.abort=function(){r.forEach(clearTimeout),r=[],s.forEach(function(l){l.reject(function(){Error.call(this,"Throttled function aborted"),this.name="AbortError"})}),s.length=0},a}const O=function(n,e){const t={};for(const s in n){const r=n[s];e.indexOf(s)>-1&&r!==null&&(t[s]=r)}return t},I=n=>n==="email",C=()=>({singleTag:"hr"}),A=()=>({tag:"blockquote"}),M=()=>({tag:"ul"}),N=n=>({tag:["pre",{tag:"code",attrs:n.attrs}]}),L=()=>({singleTag:"br"}),U=n=>({tag:`h${n.attrs.level}`}),B=n=>({singleTag:[{tag:"img",attrs:O(n.attrs,["src","alt","title"])}]}),H=()=>({tag:"li"}),q=()=>({tag:"ol"}),D=()=>({tag:"p"}),J=()=>({tag:"b"}),F=()=>({tag:"strike"}),V=()=>({tag:"u"}),z=()=>({tag:"strong"}),Y=()=>({tag:"code"}),K=()=>({tag:"i"}),Q=n=>{const e={...n.attrs},{linktype:t="url"}=n.attrs;return I(t)&&(e.href=`mailto:${e.href}`),e.anchor&&(e.href=`${e.href}#${e.anchor}`,delete e.anchor),{tag:[{tag:"a",attrs:e}]}},G=n=>({tag:[{tag:"span",attrs:n.attrs}]}),R={nodes:{horizontal_rule:C,blockquote:A,bullet_list:M,code_block:N,hard_break:L,heading:U,image:B,list_item:H,ordered_list:q,paragraph:D},marks:{bold:J,strike:F,underline:V,strong:z,code:Y,italic:K,link:Q,styled:G}},W=function(n){const e={"&":"&","<":"<",">":">",'"':""","'":"'"},t=/[&<>"']/g,s=RegExp(t.source);return n&&s.test(n)?n.replace(t,r=>e[r]):n};class f{constructor(e){c(this,"marks"),c(this,"nodes"),e||(e=R),this.marks=e.marks||[],this.nodes=e.nodes||[]}addNode(e,t){this.nodes[e]=t}addMark(e,t){this.marks[e]=t}render(e){if(e&&e.content&&Array.isArray(e.content)){let t="";return e.content.forEach(s=>{t+=this.renderNode(s)}),t}return console.warn("The render method must receive an object with a content field, which is an array"),""}renderNode(e){const t=[];e.marks&&e.marks.forEach(r=>{const o=this.getMatchingMark(r);o&&t.push(this.renderOpeningTag(o.tag))});const s=this.getMatchingNode(e);return s&&s.tag&&t.push(this.renderOpeningTag(s.tag)),e.content?e.content.forEach(r=>{t.push(this.renderNode(r))}):e.text?t.push(W(e.text)):s&&s.singleTag?t.push(this.renderTag(s.singleTag," /")):s&&s.html&&t.push(s.html),s&&s.tag&&t.push(this.renderClosingTag(s.tag)),e.marks&&e.marks.slice(0).reverse().forEach(r=>{const o=this.getMatchingMark(r);o&&t.push(this.renderClosingTag(o.tag))}),t.join("")}renderTag(e,t){return e.constructor===String?`<${e}${t}>`:e.map(s=>{if(s.constructor===String)return`<${s}${t}>`;{let r=`<${s.tag}`;if(s.attrs)for(const o in s.attrs){const i=s.attrs[o];i!==null&&(r+=` ${o}="${i}"`)}return`${r}${t}>`}}).join("")}renderOpeningTag(e){return this.renderTag(e,"")}renderClosingTag(e){return e.constructor===String?`</${e}>`:e.slice(0).reverse().map(t=>t.constructor===String?`</${t}>`:`</${t.tag}>`).join("")}getMatchingNode(e){const t=this.nodes[e.type];if(typeof t=="function")return t(e)}getMatchingMark(e){const t=this.marks[e.type];if(typeof t=="function")return t(e)}}class _{constructor(){c(this,"isCDNUrl",(e="")=>e.indexOf("/cdn/")>-1),c(this,"getOptionsPage",(e,t=25,s=1)=>({...e,per_page:t,page:s})),c(this,"delay",e=>new Promise(t=>setTimeout(t,e))),c(this,"arrayFrom",(e=0,t)=>[...Array(e)].map(t)),c(this,"range",(e=0,t=e)=>{const s=Math.abs(t-e)||0,r=e<t?1:-1;return this.arrayFrom(s,(o,i)=>i*r+e)}),c(this,"asyncMap",async(e,t)=>Promise.all(e.map(t))),c(this,"flatMap",(e=[],t)=>e.map(t).reduce((s,r)=>[...s,...r],[]))}stringify(e,t,s){const r=[];for(const o in e){if(!Object.prototype.hasOwnProperty.call(e,o))continue;const i=e[o],a=s?"":encodeURIComponent(o);let l;typeof i=="object"?l=this.stringify(i,t?t+encodeURIComponent("["+a+"]"):a,Array.isArray(i)):l=(t?t+encodeURIComponent("["+a+"]"):a)+"="+encodeURIComponent(i),r.push(l)}return r.join("&")}}class X{constructor(e){c(this,"baseURL"),c(this,"timeout"),c(this,"headers"),c(this,"responseInterceptor"),c(this,"fetch"),c(this,"ejectInterceptor"),c(this,"url"),c(this,"parameters"),this.baseURL=e.baseURL,this.headers=e.headers||[],this.timeout=e!=null&&e.timeout?e.timeout*1e3:0,this.responseInterceptor=e.responseInterceptor,this.fetch=(...t)=>e.fetch?e.fetch(...t):fetch(...t),this.ejectInterceptor=!1,this.url="",this.parameters={}}get(e,t){return this.url=e,this.parameters=t,this._methodHandler("get")}post(e,t){return this.url=e,this.parameters=t,this._methodHandler("post")}put(e,t){return this.url=e,this.parameters=t,this._methodHandler("put")}delete(e,t){return this.url=e,this.parameters=t,this._methodHandler("delete")}async _responseHandler(e){const t=[],s={data:{},headers:{},status:0,statusText:""};e.status!==204&&await e.json().then(r=>{s.data=r});for(const r of e.headers.entries())t[r[0]]=r[1];return s.headers={...t},s.status=e.status,s.statusText=e.statusText,s}async _methodHandler(e){let t=`${this.baseURL}${this.url}`,s=null;if(e==="get"){const l=new _;t=`${this.baseURL}${this.url}?${l.stringify(this.parameters)}`}else s=JSON.stringify(this.parameters);const r=new URL(t),o=new AbortController,{signal:i}=o;let a;this.timeout&&(a=setTimeout(()=>o.abort(),this.timeout));try{const l=await this.fetch(`${r}`,{method:e,headers:this.headers,body:s,signal:i});this.timeout&&clearTimeout(a);const h=await this._responseHandler(l);return this.responseInterceptor&&!this.ejectInterceptor?this._statusHandler(this.responseInterceptor(h)):this._statusHandler(h)}catch(l){return{message:l}}}eject(){this.ejectInterceptor=!0}_statusHandler(e){const t=/20[0-6]/g;return new Promise((s,r)=>{if(t.test(`${e.status}`))return s(e);const o={message:new Error(e.statusText),status:e.status,response:e.data.error||e.data.slug};r(o)})}}let m={};const g={};class Z{constructor(e,t){if(c(this,"client"),c(this,"maxRetries"),c(this,"throttle"),c(this,"accessToken"),c(this,"cache"),c(this,"helpers"),c(this,"relations"),c(this,"links"),c(this,"richTextResolver"),c(this,"resolveNestedRelations"),!t){const o=e.region?`-${e.region}`:"",i=e.https===!1?"http":"https";e.oauthToken?t=`${i}://api${o}.storyblok.com/v1`:t=`${i}://api${o}.storyblok.com/v2`}const s=new Headers;s.set("Content-Type","application/json"),s.set("Accept","application/json"),s.forEach((o,i)=>{e.headers&&e.headers[i]&&s.set(i,e.headers[i])});let r=5;e.oauthToken&&(s.set("Authorization",e.oauthToken),r=3),e.rateLimit&&(r=e.rateLimit),e.richTextSchema?this.richTextResolver=new f(e.richTextSchema):this.richTextResolver=new f,e.componentResolver&&this.setComponentResolver(e.componentResolver),this.maxRetries=e.maxRetries,this.throttle=P(this.throttledRequest,r,1e3),this.accessToken=e.accessToken||"",this.relations={},this.links={},this.cache=e.cache||{clear:"manual"},this.helpers=new _,this.resolveNestedRelations=!1,this.client=new X({baseURL:t,timeout:e.timeout||0,headers:s,responseInterceptor:e.responseInterceptor,fetch:e.fetch})}setComponentResolver(e){this.richTextResolver.addNode("blok",t=>{let s="";return t.attrs.body.forEach(r=>{s+=e(r.component,r)}),{html:s}})}parseParams(e){return e.version||(e.version="published"),e.token||(e.token=this.getToken()),e.cv||(e.cv=g[e.token]),Array.isArray(e.resolve_relations)&&(e.resolve_relations=e.resolve_relations.join(",")),e}factoryParamOptions(e,t){return this.helpers.isCDNUrl(e)?this.parseParams(t):t}makeRequest(e,t,s,r){const o=this.factoryParamOptions(e,this.helpers.getOptionsPage(t,s,r));return this.cacheResponse(e,o)}get(e,t){t||(t={});const s=`/${e}`,r=this.factoryParamOptions(s,t);return this.cacheResponse(s,r)}async getAll(e,t,s){const r=(t==null?void 0:t.per_page)||25,o=`/${e}`,i=o.split("/"),a=s||i[i.length-1],l=1,h=await this.makeRequest(o,t,r,l),u=h.total?Math.ceil(h.total/r):1,k=await this.helpers.asyncMap(this.helpers.range(l,u),b=>this.makeRequest(o,t,r,b+1));return this.helpers.flatMap([h,...k],b=>Object.values(b.data[a]))}post(e,t){const s=`/${e}`;return Promise.resolve(this.throttle("post",s,t))}put(e,t){const s=`/${e}`;return Promise.resolve(this.throttle("put",s,t))}delete(e,t){const s=`/${e}`;return Promise.resolve(this.throttle("delete",s,t))}getStories(e){return this.get("cdn/stories",e)}getStory(e,t){return this.get(`cdn/stories/${e}`,t)}getToken(){return this.accessToken}ejectInterceptor(){this.client.eject()}_cleanCopy(e){return JSON.parse(JSON.stringify(e))}_insertLinks(e,t){const s=e[t];s&&s.fieldtype=="multilink"&&s.linktype=="story"&&typeof s.id=="string"&&this.links[s.id]?s.story=this._cleanCopy(this.links[s.id]):s&&s.linktype==="story"&&typeof s.uuid=="string"&&this.links[s.uuid]&&(s.story=this._cleanCopy(this.links[s.uuid]))}_insertRelations(e,t,s){if(s.indexOf(`${e.component}.${t}`)>-1){if(typeof e[t]=="string")this.relations[e[t]]&&(e[t]=this._cleanCopy(this.relations[e[t]]));else if(e[t]&&e[t].constructor===Array){const r=[];e[t].forEach(o=>{this.relations[o]&&r.push(this._cleanCopy(this.relations[o]))}),e[t]=r}}}iterateTree(e,t){const s=r=>{if(r!=null){if(r.constructor===Array)for(let o=0;o<r.length;o++)s(r[o]);else if(r.constructor===Object){if(r._stopResolving)return;for(const o in r)(r.component&&r._uid||r.type==="link")&&(this._insertRelations(r,o,t),this._insertLinks(r,o)),s(r[o])}}};s(e.content)}async resolveLinks(e,t){let s=[];if(e.link_uuids){const r=e.link_uuids.length,o=[],i=50;for(let a=0;a<r;a+=i){const l=Math.min(r,a+i);o.push(e.link_uuids.slice(a,l))}for(let a=0;a<o.length;a++)(await this.getStories({per_page:i,language:t.language,version:t.version,by_uuids:o[a].join(",")})).data.stories.forEach(l=>{s.push(l)})}else s=e.links;s.forEach(r=>{this.links[r.uuid]={...r,_stopResolving:!0}})}async resolveRelations(e,t){let s=[];if(e.rel_uuids){const r=e.rel_uuids.length,o=[],i=50;for(let a=0;a<r;a+=i){const l=Math.min(r,a+i);o.push(e.rel_uuids.slice(a,l))}for(let a=0;a<o.length;a++)(await this.getStories({per_page:i,language:t.language,version:t.version,by_uuids:o[a].join(",")})).data.stories.forEach(l=>{s.push(l)})}else s=e.rels;s&&s.length>0&&s.forEach(r=>{this.relations[r.uuid]={...r,_stopResolving:!0}})}async resolveStories(e,t){var s,r;let o=[];if(typeof t.resolve_relations<"u"&&t.resolve_relations.length>0&&(typeof t.resolve_relations=="string"&&(o=t.resolve_relations.split(",")),await this.resolveRelations(e,t)),t.resolve_links&&["1","story","url"].indexOf(t.resolve_links)>-1&&((s=e.links)!=null&&s.length||(r=e.link_uuids)!=null&&r.length)&&await this.resolveLinks(e,t),this.resolveNestedRelations)for(const i in this.relations)this.iterateTree(this.relations[i],o);e.story?this.iterateTree(e.story,o):e.stories.forEach(i=>{this.iterateTree(i,o)})}cacheResponse(e,t,s){return new Promise((r,o)=>{const i=this.helpers.stringify({url:e,params:t}),a=this.cacheProvider();if(this.cache.clear==="auto"&&t.version==="draft"&&this.flushCache(),t.version==="published"&&e!="/cdn/spaces/me"){const l=a.get(i);if(l)return r(l)}try{(async()=>{var l;const h=await this.throttle("get",e,t);let u={data:h.data,headers:h.headers};if((l=h.headers)!=null&&l["per-page"]&&(u=Object.assign({},u,{perPage:h.headers["per-page"]?parseInt(h.headers["per-page"]):0,total:h.headers["per-page"]?parseInt(h.headers.total):0})),h.status!=200)return o(h);(u.data.story||u.data.stories)&&await this.resolveStories(u.data,t),t.version==="published"&&e!="/cdn/spaces/me"&&a.set(i,u),u.data.cv&&t.token&&(t.version=="draft"&&g[t.token]!=u.data.cv&&this.flushCache(),g[t.token]=u.data.cv),r(u)})()}catch{}})}throttledRequest(e,t,s){return this.client[e](t,s)}cacheVersions(){return g}cacheVersion(){return g[this.accessToken]}setCacheVersion(e){this.accessToken&&(g[this.accessToken]=e)}cacheProvider(){switch(this.cache.type){case"memory":return{get(e){return m[e]},getAll(){return m},set(e,t){m[e]=t},flush(){m={}}};default:return{get(){},getAll(){},set(){},flush(){}}}}flushCache(){return this.cacheProvider().flush(),this}}const ee=(n={})=>{const{apiOptions:e}=n;if(!e.accessToken){console.error("You need to provide an access token to interact with Storyblok API. Read https://www.storyblok.com/docs/api/content-delivery#topics/authentication");return}return{storyblokApi:new Z(e)}},te=n=>{if(typeof n!="object"||typeof n._editable>"u")return{};const e=JSON.parse(n._editable.replace(/^<!--#storyblok#/,"").replace(/-->$/,""));return{"data-blok-c":JSON.stringify(e),"data-blok-uid":e.id+"-"+e.uid}};let y;const $="https://app.storyblok.com/f/storyblok-v2-latest.js",j=(n,e,t={})=>{if(!(typeof window>"u")){if(typeof window.storyblokRegisterEvent>"u"){console.error("Storyblok Bridge is disabled. Please enable it to use it. Read https://github.com/storyblok/storyblok-js");return}if(!n){console.warn("Story ID is not defined. Please provide a valid ID.");return}window.storyblokRegisterEvent(()=>{new window.StoryblokBridge(t).on(["input","published","change"],r=>{r.action==="input"&&r.story.id===n?e(r.story):(r.action==="change"||r.action==="published")&&r.storyId===n&&window.location.reload()})})}},se=(n={})=>{const{bridge:e,accessToken:t,use:s=[],apiOptions:r={},richText:o={}}=n;r.accessToken=r.accessToken||t;const i={bridge:e,apiOptions:r};let a={};return s.forEach(l=>{a={...a,...l(i)}}),e!==!1&&T($),y=new f(o.schema),o.resolver&&E(y,o.resolver),a},E=(n,e)=>{n.addNode("blok",t=>{let s="";return t.attrs.body.forEach(r=>{s+=e(r.component,r)}),{html:s}})},re=(n,e,t)=>{let s=t||y;if(!s){console.error("Please initialize the Storyblok SDK before calling the renderRichText function");return}return n===""?"":n?(e&&(s=new f(e.schema),e.resolver&&E(s,e.resolver)),s.render(n)):(console.warn(`${n} is not a valid Richtext object. This might be because the value of the richtext field is empty.
|
|
1
|
+
(function(d,p){typeof exports=="object"&&typeof module<"u"?p(exports):typeof define=="function"&&define.amd?define(["exports"],p):(d=typeof globalThis<"u"?globalThis:d||self,p(d.storyblok={}))})(this,function(d){"use strict";let p=!1;const v=[],w=o=>new Promise((t,e)=>{if(typeof window>"u"||(window.storyblokRegisterEvent=r=>{if(window.location===window.parent.location){console.warn("You are not in Draft Mode or in the Visual Editor.");return}p?r():v.push(r)},document.getElementById("storyblok-javascript-bridge")))return;const s=document.createElement("script");s.async=!0,s.src=o,s.id="storyblok-javascript-bridge",s.onerror=r=>e(r),s.onload=r=>{v.forEach(n=>n()),p=!0,t(r)},document.getElementsByTagName("head")[0].appendChild(s)});var E=Object.defineProperty,S=(o,t,e)=>t in o?E(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e,c=(o,t,e)=>(S(o,typeof t!="symbol"?t+"":t,e),e);function T(o){return!(o!==o||o===1/0||o===-1/0)}function x(o,t,e){if(!T(t))throw new TypeError("Expected `limit` to be a finite number");if(!T(e))throw new TypeError("Expected `interval` to be a finite number");const s=[];let r=[],n=0;const i=function(){n++;const l=setTimeout(function(){n--,s.length>0&&i(),r=r.filter(function(u){return u!==l})},e);r.indexOf(l)<0&&r.push(l);const h=s.shift();h.resolve(o.apply(h.self,h.args))},a=function(...l){const h=this;return new Promise(function(u,k){s.push({resolve:u,reject:k,args:l,self:h}),n<t&&i()})};return a.abort=function(){r.forEach(clearTimeout),r=[],s.forEach(function(l){l.reject(function(){Error.call(this,"Throttled function aborted"),this.name="AbortError"})}),s.length=0},a}const O=function(o,t){const e={};for(const s in o){const r=o[s];t.indexOf(s)>-1&&r!==null&&(e[s]=r)}return e},I=o=>o==="email",C=()=>({singleTag:"hr"}),A=()=>({tag:"blockquote"}),M=()=>({tag:"ul"}),N=o=>({tag:["pre",{tag:"code",attrs:o.attrs}]}),L=()=>({singleTag:"br"}),U=o=>({tag:`h${o.attrs.level}`}),B=o=>({singleTag:[{tag:"img",attrs:O(o.attrs,["src","alt","title"])}]}),H=()=>({tag:"li"}),q=()=>({tag:"ol"}),D=()=>({tag:"p"}),J=()=>({tag:"b"}),F=()=>({tag:"strike"}),V=()=>({tag:"u"}),z=()=>({tag:"strong"}),Y=()=>({tag:"code"}),K=()=>({tag:"i"}),Q=o=>{const t={...o.attrs},{linktype:e="url"}=o.attrs;return I(e)&&(t.href=`mailto:${t.href}`),t.anchor&&(t.href=`${t.href}#${t.anchor}`,delete t.anchor),{tag:[{tag:"a",attrs:t}]}},G=o=>({tag:[{tag:"span",attrs:o.attrs}]}),R={nodes:{horizontal_rule:C,blockquote:A,bullet_list:M,code_block:N,hard_break:L,heading:U,image:B,list_item:H,ordered_list:q,paragraph:D},marks:{bold:J,strike:F,underline:V,strong:z,code:Y,italic:K,link:Q,styled:G}},W=function(o){const t={"&":"&","<":"<",">":">",'"':""","'":"'"},e=/[&<>"']/g,s=RegExp(e.source);return o&&s.test(o)?o.replace(e,r=>t[r]):o};class f{constructor(t){c(this,"marks"),c(this,"nodes"),t||(t=R),this.marks=t.marks||[],this.nodes=t.nodes||[]}addNode(t,e){this.nodes[t]=e}addMark(t,e){this.marks[t]=e}render(t){if(t&&t.content&&Array.isArray(t.content)){let e="";return t.content.forEach(s=>{e+=this.renderNode(s)}),e}return console.warn("The render method must receive an object with a content field, which is an array"),""}renderNode(t){const e=[];t.marks&&t.marks.forEach(r=>{const n=this.getMatchingMark(r);n&&e.push(this.renderOpeningTag(n.tag))});const s=this.getMatchingNode(t);return s&&s.tag&&e.push(this.renderOpeningTag(s.tag)),t.content?t.content.forEach(r=>{e.push(this.renderNode(r))}):t.text?e.push(W(t.text)):s&&s.singleTag?e.push(this.renderTag(s.singleTag," /")):s&&s.html&&e.push(s.html),s&&s.tag&&e.push(this.renderClosingTag(s.tag)),t.marks&&t.marks.slice(0).reverse().forEach(r=>{const n=this.getMatchingMark(r);n&&e.push(this.renderClosingTag(n.tag))}),e.join("")}renderTag(t,e){return t.constructor===String?`<${t}${e}>`:t.map(s=>{if(s.constructor===String)return`<${s}${e}>`;{let r=`<${s.tag}`;if(s.attrs)for(const n in s.attrs){const i=s.attrs[n];i!==null&&(r+=` ${n}="${i}"`)}return`${r}${e}>`}}).join("")}renderOpeningTag(t){return this.renderTag(t,"")}renderClosingTag(t){return t.constructor===String?`</${t}>`:t.slice(0).reverse().map(e=>e.constructor===String?`</${e}>`:`</${e.tag}>`).join("")}getMatchingNode(t){const e=this.nodes[t.type];if(typeof e=="function")return e(t)}getMatchingMark(t){const e=this.marks[t.type];if(typeof e=="function")return e(t)}}class _{constructor(){c(this,"isCDNUrl",(t="")=>t.indexOf("/cdn/")>-1),c(this,"getOptionsPage",(t,e=25,s=1)=>({...t,per_page:e,page:s})),c(this,"delay",t=>new Promise(e=>setTimeout(e,t))),c(this,"arrayFrom",(t=0,e)=>[...Array(t)].map(e)),c(this,"range",(t=0,e=t)=>{const s=Math.abs(e-t)||0,r=t<e?1:-1;return this.arrayFrom(s,(n,i)=>i*r+t)}),c(this,"asyncMap",async(t,e)=>Promise.all(t.map(e))),c(this,"flatMap",(t=[],e)=>t.map(e).reduce((s,r)=>[...s,...r],[]))}stringify(t,e,s){const r=[];for(const n in t){if(!Object.prototype.hasOwnProperty.call(t,n))continue;const i=t[n],a=s?"":encodeURIComponent(n);let l;typeof i=="object"?l=this.stringify(i,e?e+encodeURIComponent("["+a+"]"):a,Array.isArray(i)):l=(e?e+encodeURIComponent("["+a+"]"):a)+"="+encodeURIComponent(i),r.push(l)}return r.join("&")}}class X{constructor(t){c(this,"baseURL"),c(this,"timeout"),c(this,"headers"),c(this,"responseInterceptor"),c(this,"fetch"),c(this,"ejectInterceptor"),c(this,"url"),c(this,"parameters"),this.baseURL=t.baseURL,this.headers=t.headers||[],this.timeout=t!=null&&t.timeout?t.timeout*1e3:0,this.responseInterceptor=t.responseInterceptor,this.fetch=(...e)=>t.fetch?t.fetch(...e):fetch(...e),this.ejectInterceptor=!1,this.url="",this.parameters={}}get(t,e){return this.url=t,this.parameters=e,this._methodHandler("get")}post(t,e){return this.url=t,this.parameters=e,this._methodHandler("post")}put(t,e){return this.url=t,this.parameters=e,this._methodHandler("put")}delete(t,e){return this.url=t,this.parameters=e,this._methodHandler("delete")}async _responseHandler(t){const e=[],s={data:{},headers:{},status:0,statusText:""};t.status!==204&&await t.json().then(r=>{s.data=r});for(const r of t.headers.entries())e[r[0]]=r[1];return s.headers={...e},s.status=t.status,s.statusText=t.statusText,s}async _methodHandler(t){let e=`${this.baseURL}${this.url}`,s=null;if(t==="get"){const l=new _;e=`${this.baseURL}${this.url}?${l.stringify(this.parameters)}`}else s=JSON.stringify(this.parameters);const r=new URL(e),n=new AbortController,{signal:i}=n;let a;this.timeout&&(a=setTimeout(()=>n.abort(),this.timeout));try{const l=await this.fetch(`${r}`,{method:t,headers:this.headers,body:s,signal:i});this.timeout&&clearTimeout(a);const h=await this._responseHandler(l);return this.responseInterceptor&&!this.ejectInterceptor?this._statusHandler(this.responseInterceptor(h)):this._statusHandler(h)}catch(l){return{message:l}}}eject(){this.ejectInterceptor=!0}_statusHandler(t){const e=/20[0-6]/g;return new Promise((s,r)=>{if(e.test(`${t.status}`))return s(t);const n={message:new Error(t.statusText),status:t.status,response:t.data.error||t.data.slug};r(n)})}}let m={};const g={};class Z{constructor(t,e){if(c(this,"client"),c(this,"maxRetries"),c(this,"throttle"),c(this,"accessToken"),c(this,"cache"),c(this,"helpers"),c(this,"relations"),c(this,"links"),c(this,"richTextResolver"),c(this,"resolveNestedRelations"),!e){const n=t.region?`-${t.region}`:"",i=t.https===!1?"http":"https";t.oauthToken?e=`${i}://api${n}.storyblok.com/v1`:e=`${i}://api${n}.storyblok.com/v2`}const s=new Headers;s.set("Content-Type","application/json"),s.set("Accept","application/json"),s.forEach((n,i)=>{t.headers&&t.headers[i]&&s.set(i,t.headers[i])});let r=5;t.oauthToken&&(s.set("Authorization",t.oauthToken),r=3),t.rateLimit&&(r=t.rateLimit),t.richTextSchema?this.richTextResolver=new f(t.richTextSchema):this.richTextResolver=new f,t.componentResolver&&this.setComponentResolver(t.componentResolver),this.maxRetries=t.maxRetries,this.throttle=x(this.throttledRequest,r,1e3),this.accessToken=t.accessToken||"",this.relations={},this.links={},this.cache=t.cache||{clear:"manual"},this.helpers=new _,this.resolveNestedRelations=!1,this.client=new X({baseURL:e,timeout:t.timeout||0,headers:s,responseInterceptor:t.responseInterceptor,fetch:t.fetch})}setComponentResolver(t){this.richTextResolver.addNode("blok",e=>{let s="";return e.attrs.body.forEach(r=>{s+=t(r.component,r)}),{html:s}})}parseParams(t){return t.version||(t.version="published"),t.token||(t.token=this.getToken()),t.cv||(t.cv=g[t.token]),Array.isArray(t.resolve_relations)&&(t.resolve_relations=t.resolve_relations.join(",")),t}factoryParamOptions(t,e){return this.helpers.isCDNUrl(t)?this.parseParams(e):e}makeRequest(t,e,s,r){const n=this.factoryParamOptions(t,this.helpers.getOptionsPage(e,s,r));return this.cacheResponse(t,n)}get(t,e){e||(e={});const s=`/${t}`,r=this.factoryParamOptions(s,e);return this.cacheResponse(s,r)}async getAll(t,e,s){const r=(e==null?void 0:e.per_page)||25,n=`/${t}`,i=n.split("/"),a=s||i[i.length-1],l=1,h=await this.makeRequest(n,e,r,l),u=h.total?Math.ceil(h.total/r):1,k=await this.helpers.asyncMap(this.helpers.range(l,u),b=>this.makeRequest(n,e,r,b+1));return this.helpers.flatMap([h,...k],b=>Object.values(b.data[a]))}post(t,e){const s=`/${t}`;return Promise.resolve(this.throttle("post",s,e))}put(t,e){const s=`/${t}`;return Promise.resolve(this.throttle("put",s,e))}delete(t,e){const s=`/${t}`;return Promise.resolve(this.throttle("delete",s,e))}getStories(t){return this.get("cdn/stories",t)}getStory(t,e){return this.get(`cdn/stories/${t}`,e)}getToken(){return this.accessToken}ejectInterceptor(){this.client.eject()}_cleanCopy(t){return JSON.parse(JSON.stringify(t))}_insertLinks(t,e){const s=t[e];s&&s.fieldtype=="multilink"&&s.linktype=="story"&&typeof s.id=="string"&&this.links[s.id]?s.story=this._cleanCopy(this.links[s.id]):s&&s.linktype==="story"&&typeof s.uuid=="string"&&this.links[s.uuid]&&(s.story=this._cleanCopy(this.links[s.uuid]))}_insertRelations(t,e,s){if(s.indexOf(`${t.component}.${e}`)>-1){if(typeof t[e]=="string")this.relations[t[e]]&&(t[e]=this._cleanCopy(this.relations[t[e]]));else if(t[e]&&t[e].constructor===Array){const r=[];t[e].forEach(n=>{this.relations[n]&&r.push(this._cleanCopy(this.relations[n]))}),t[e]=r}}}iterateTree(t,e){const s=r=>{if(r!=null){if(r.constructor===Array)for(let n=0;n<r.length;n++)s(r[n]);else if(r.constructor===Object){if(r._stopResolving)return;for(const n in r)(r.component&&r._uid||r.type==="link")&&(this._insertRelations(r,n,e),this._insertLinks(r,n)),s(r[n])}}};s(t.content)}async resolveLinks(t,e){let s=[];if(t.link_uuids){const r=t.link_uuids.length,n=[],i=50;for(let a=0;a<r;a+=i){const l=Math.min(r,a+i);n.push(t.link_uuids.slice(a,l))}for(let a=0;a<n.length;a++)(await this.getStories({per_page:i,language:e.language,version:e.version,by_uuids:n[a].join(",")})).data.stories.forEach(l=>{s.push(l)})}else s=t.links;s.forEach(r=>{this.links[r.uuid]={...r,_stopResolving:!0}})}async resolveRelations(t,e){let s=[];if(t.rel_uuids){const r=t.rel_uuids.length,n=[],i=50;for(let a=0;a<r;a+=i){const l=Math.min(r,a+i);n.push(t.rel_uuids.slice(a,l))}for(let a=0;a<n.length;a++)(await this.getStories({per_page:i,language:e.language,version:e.version,by_uuids:n[a].join(",")})).data.stories.forEach(l=>{s.push(l)})}else s=t.rels;s&&s.length>0&&s.forEach(r=>{this.relations[r.uuid]={...r,_stopResolving:!0}})}async resolveStories(t,e){var s,r;let n=[];if(typeof e.resolve_relations<"u"&&e.resolve_relations.length>0&&(typeof e.resolve_relations=="string"&&(n=e.resolve_relations.split(",")),await this.resolveRelations(t,e)),e.resolve_links&&["1","story","url"].indexOf(e.resolve_links)>-1&&((s=t.links)!=null&&s.length||(r=t.link_uuids)!=null&&r.length)&&await this.resolveLinks(t,e),this.resolveNestedRelations)for(const i in this.relations)this.iterateTree(this.relations[i],n);t.story?this.iterateTree(t.story,n):t.stories.forEach(i=>{this.iterateTree(i,n)})}async cacheResponse(t,e,s){const r=this.helpers.stringify({url:t,params:e}),n=this.cacheProvider();if(this.cache.clear==="auto"&&e.version==="draft"&&await this.flushCache(),e.version==="published"&&t!="/cdn/spaces/me"){const i=await n.get(r);if(i)return Promise.resolve(i)}return new Promise((i,a)=>{try{(async()=>{var l;try{const h=await this.throttle("get",t,e);let u={data:h.data,headers:h.headers};return(l=h.headers)!=null&&l["per-page"]&&(u=Object.assign({},u,{perPage:h.headers["per-page"]?parseInt(h.headers["per-page"]):0,total:h.headers["per-page"]?parseInt(h.headers.total):0})),h.status!=200?a(h):((u.data.story||u.data.stories)&&await this.resolveStories(u.data,e),e.version==="published"&&t!="/cdn/spaces/me"&&await n.set(r,u),u.data.cv&&e.token&&(e.version=="draft"&&g[e.token]!=u.data.cv&&await this.flushCache(),g[e.token]=u.data.cv),i(u))}catch(h){return a(h)}})()}catch{}})}throttledRequest(t,e,s){return this.client[t](e,s)}cacheVersions(){return g}cacheVersion(){return g[this.accessToken]}setCacheVersion(t){this.accessToken&&(g[this.accessToken]=t)}cacheProvider(){switch(this.cache.type){case"memory":return{get(t){return Promise.resolve(m[t])},getAll(){return Promise.resolve(m)},set(t,e){return m[t]=e,Promise.resolve(void 0)},flush(){return m={},Promise.resolve(void 0)}};case"custom":if(this.cache.custom)return this.cache.custom;default:return{get(){return Promise.resolve(void 0)},getAll(){return Promise.resolve(void 0)},set(){return Promise.resolve(void 0)},flush(){return Promise.resolve(void 0)}}}}async flushCache(){return await this.cacheProvider().flush(),this}}const tt=(o={})=>{const{apiOptions:t}=o;if(!t.accessToken){console.error("You need to provide an access token to interact with Storyblok API. Read https://www.storyblok.com/docs/api/content-delivery#topics/authentication");return}return{storyblokApi:new Z(t)}},et=o=>{if(typeof o!="object"||typeof o._editable>"u")return{};const t=JSON.parse(o._editable.replace(/^<!--#storyblok#/,"").replace(/-->$/,""));return{"data-blok-c":JSON.stringify(t),"data-blok-uid":t.id+"-"+t.uid}};let y;const $="https://app.storyblok.com/f/storyblok-v2-latest.js",P=(o,t,e={})=>{if(!(typeof window>"u")){if(typeof window.storyblokRegisterEvent>"u"){console.error("Storyblok Bridge is disabled. Please enable it to use it. Read https://github.com/storyblok/storyblok-js");return}if(!o){console.warn("Story ID is not defined. Please provide a valid ID.");return}window.storyblokRegisterEvent(()=>{new window.StoryblokBridge(e).on(["input","published","change"],r=>{r.action==="input"&&r.story.id===o?t(r.story):(r.action==="change"||r.action==="published")&&r.storyId===o&&window.location.reload()})})}},st=(o={})=>{const{bridge:t,accessToken:e,use:s=[],apiOptions:r={},richText:n={}}=o;r.accessToken=r.accessToken||e;const i={bridge:t,apiOptions:r};let a={};return s.forEach(l=>{a={...a,...l(i)}}),t!==!1&&w($),y=new f(n.schema),n.resolver&&j(y,n.resolver),a},j=(o,t)=>{o.addNode("blok",e=>{let s="";return e.attrs.body.forEach(r=>{s+=t(r.component,r)}),{html:s}})},rt=(o,t,e)=>{let s=e||y;if(!s){console.error("Please initialize the Storyblok SDK before calling the renderRichText function");return}return o===""?"":o?(t&&(s=new f(t.schema),t.resolver&&j(s,t.resolver)),s.render(o)):(console.warn(`${o} is not a valid Richtext object. This might be because the value of the richtext field is empty.
|
|
2
2
|
|
|
3
|
-
For more info about the richtext object check https://github.com/storyblok/storyblok-js#rendering-rich-text`),"")},
|
|
3
|
+
For more info about the richtext object check https://github.com/storyblok/storyblok-js#rendering-rich-text`),"")},nt=()=>w($);d.RichTextResolver=f,d.RichTextSchema=R,d.apiPlugin=tt,d.loadStoryblokBridge=nt,d.registerStoryblokBridge=P,d.renderRichText=rt,d.storyblokEditable=et,d.storyblokInit=st,d.useStoryblokBridge=P,Object.defineProperty(d,Symbol.toStringTag,{value:"Module"})});
|
package/dist/storyblok-js.mjs
CHANGED
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
let k = !1;
|
|
2
|
-
const
|
|
2
|
+
const v = [], w = (n) => new Promise((t, e) => {
|
|
3
3
|
if (typeof window > "u" || (window.storyblokRegisterEvent = (r) => {
|
|
4
4
|
if (window.location === window.parent.location) {
|
|
5
5
|
console.warn("You are not in Draft Mode or in the Visual Editor.");
|
|
6
6
|
return;
|
|
7
7
|
}
|
|
8
|
-
k ? r() :
|
|
8
|
+
k ? r() : v.push(r);
|
|
9
9
|
}, document.getElementById("storyblok-javascript-bridge")))
|
|
10
10
|
return;
|
|
11
11
|
const s = document.createElement("script");
|
|
12
|
-
s.async = !0, s.src = n, s.id = "storyblok-javascript-bridge", s.onerror = (r) =>
|
|
13
|
-
|
|
12
|
+
s.async = !0, s.src = n, s.id = "storyblok-javascript-bridge", s.onerror = (r) => e(r), s.onload = (r) => {
|
|
13
|
+
v.forEach((o) => o()), k = !0, t(r);
|
|
14
14
|
}, document.getElementsByTagName("head")[0].appendChild(s);
|
|
15
15
|
});
|
|
16
|
-
var $ = Object.defineProperty,
|
|
17
|
-
function
|
|
16
|
+
var $ = Object.defineProperty, P = (n, t, e) => t in n ? $(n, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : n[t] = e, c = (n, t, e) => (P(n, typeof t != "symbol" ? t + "" : t, e), e);
|
|
17
|
+
function b(n) {
|
|
18
18
|
return !(n !== n || n === 1 / 0 || n === -1 / 0);
|
|
19
19
|
}
|
|
20
|
-
function
|
|
21
|
-
if (!
|
|
20
|
+
function j(n, t, e) {
|
|
21
|
+
if (!b(t))
|
|
22
22
|
throw new TypeError("Expected `limit` to be a finite number");
|
|
23
|
-
if (!
|
|
23
|
+
if (!b(e))
|
|
24
24
|
throw new TypeError("Expected `interval` to be a finite number");
|
|
25
25
|
const s = [];
|
|
26
26
|
let r = [], o = 0;
|
|
@@ -30,7 +30,7 @@ function x(n, e, t) {
|
|
|
30
30
|
o--, s.length > 0 && i(), r = r.filter(function(u) {
|
|
31
31
|
return u !== l;
|
|
32
32
|
});
|
|
33
|
-
},
|
|
33
|
+
}, e);
|
|
34
34
|
r.indexOf(l) < 0 && r.push(l);
|
|
35
35
|
const h = s.shift();
|
|
36
36
|
h.resolve(n.apply(h.self, h.args));
|
|
@@ -42,7 +42,7 @@ function x(n, e, t) {
|
|
|
42
42
|
reject: f,
|
|
43
43
|
args: l,
|
|
44
44
|
self: h
|
|
45
|
-
}), o <
|
|
45
|
+
}), o < t && i();
|
|
46
46
|
});
|
|
47
47
|
};
|
|
48
48
|
return a.abort = function() {
|
|
@@ -53,14 +53,14 @@ function x(n, e, t) {
|
|
|
53
53
|
}), s.length = 0;
|
|
54
54
|
}, a;
|
|
55
55
|
}
|
|
56
|
-
const
|
|
57
|
-
const
|
|
56
|
+
const x = function(n, t) {
|
|
57
|
+
const e = {};
|
|
58
58
|
for (const s in n) {
|
|
59
59
|
const r = n[s];
|
|
60
|
-
|
|
60
|
+
t.indexOf(s) > -1 && r !== null && (e[s] = r);
|
|
61
61
|
}
|
|
62
|
-
return
|
|
63
|
-
},
|
|
62
|
+
return e;
|
|
63
|
+
}, E = (n) => n === "email", S = () => ({
|
|
64
64
|
singleTag: "hr"
|
|
65
65
|
}), O = () => ({
|
|
66
66
|
tag: "blockquote"
|
|
@@ -82,7 +82,7 @@ const E = function(n, e) {
|
|
|
82
82
|
singleTag: [
|
|
83
83
|
{
|
|
84
84
|
tag: "img",
|
|
85
|
-
attrs:
|
|
85
|
+
attrs: x(n.attrs, ["src", "alt", "title"])
|
|
86
86
|
}
|
|
87
87
|
]
|
|
88
88
|
}), L = () => ({
|
|
@@ -104,12 +104,12 @@ const E = function(n, e) {
|
|
|
104
104
|
}), V = () => ({
|
|
105
105
|
tag: "i"
|
|
106
106
|
}), z = (n) => {
|
|
107
|
-
const
|
|
108
|
-
return
|
|
107
|
+
const t = { ...n.attrs }, { linktype: e = "url" } = n.attrs;
|
|
108
|
+
return E(e) && (t.href = `mailto:${t.href}`), t.anchor && (t.href = `${t.href}#${t.anchor}`, delete t.anchor), {
|
|
109
109
|
tag: [
|
|
110
110
|
{
|
|
111
111
|
tag: "a",
|
|
112
|
-
attrs:
|
|
112
|
+
attrs: t
|
|
113
113
|
}
|
|
114
114
|
]
|
|
115
115
|
};
|
|
@@ -144,54 +144,54 @@ const E = function(n, e) {
|
|
|
144
144
|
styled: Y
|
|
145
145
|
}
|
|
146
146
|
}, Q = function(n) {
|
|
147
|
-
const
|
|
147
|
+
const t = {
|
|
148
148
|
"&": "&",
|
|
149
149
|
"<": "<",
|
|
150
150
|
">": ">",
|
|
151
151
|
'"': """,
|
|
152
152
|
"'": "'"
|
|
153
|
-
},
|
|
154
|
-
return n && s.test(n) ? n.replace(
|
|
153
|
+
}, e = /[&<>"']/g, s = RegExp(e.source);
|
|
154
|
+
return n && s.test(n) ? n.replace(e, (r) => t[r]) : n;
|
|
155
155
|
};
|
|
156
156
|
class g {
|
|
157
|
-
constructor(
|
|
158
|
-
c(this, "marks"), c(this, "nodes"),
|
|
157
|
+
constructor(t) {
|
|
158
|
+
c(this, "marks"), c(this, "nodes"), t || (t = K), this.marks = t.marks || [], this.nodes = t.nodes || [];
|
|
159
159
|
}
|
|
160
|
-
addNode(
|
|
161
|
-
this.nodes[
|
|
160
|
+
addNode(t, e) {
|
|
161
|
+
this.nodes[t] = e;
|
|
162
162
|
}
|
|
163
|
-
addMark(
|
|
164
|
-
this.marks[
|
|
163
|
+
addMark(t, e) {
|
|
164
|
+
this.marks[t] = e;
|
|
165
165
|
}
|
|
166
|
-
render(
|
|
167
|
-
if (
|
|
168
|
-
let
|
|
169
|
-
return
|
|
170
|
-
|
|
171
|
-
}),
|
|
166
|
+
render(t) {
|
|
167
|
+
if (t && t.content && Array.isArray(t.content)) {
|
|
168
|
+
let e = "";
|
|
169
|
+
return t.content.forEach((s) => {
|
|
170
|
+
e += this.renderNode(s);
|
|
171
|
+
}), e;
|
|
172
172
|
}
|
|
173
173
|
return console.warn(
|
|
174
174
|
"The render method must receive an object with a content field, which is an array"
|
|
175
175
|
), "";
|
|
176
176
|
}
|
|
177
|
-
renderNode(
|
|
178
|
-
const
|
|
179
|
-
|
|
177
|
+
renderNode(t) {
|
|
178
|
+
const e = [];
|
|
179
|
+
t.marks && t.marks.forEach((r) => {
|
|
180
180
|
const o = this.getMatchingMark(r);
|
|
181
|
-
o &&
|
|
181
|
+
o && e.push(this.renderOpeningTag(o.tag));
|
|
182
182
|
});
|
|
183
|
-
const s = this.getMatchingNode(
|
|
184
|
-
return s && s.tag &&
|
|
185
|
-
|
|
186
|
-
}) :
|
|
183
|
+
const s = this.getMatchingNode(t);
|
|
184
|
+
return s && s.tag && e.push(this.renderOpeningTag(s.tag)), t.content ? t.content.forEach((r) => {
|
|
185
|
+
e.push(this.renderNode(r));
|
|
186
|
+
}) : t.text ? e.push(Q(t.text)) : s && s.singleTag ? e.push(this.renderTag(s.singleTag, " /")) : s && s.html && e.push(s.html), s && s.tag && e.push(this.renderClosingTag(s.tag)), t.marks && t.marks.slice(0).reverse().forEach((r) => {
|
|
187
187
|
const o = this.getMatchingMark(r);
|
|
188
|
-
o &&
|
|
189
|
-
}),
|
|
188
|
+
o && e.push(this.renderClosingTag(o.tag));
|
|
189
|
+
}), e.join("");
|
|
190
190
|
}
|
|
191
|
-
renderTag(
|
|
192
|
-
return
|
|
191
|
+
renderTag(t, e) {
|
|
192
|
+
return t.constructor === String ? `<${t}${e}>` : t.map((s) => {
|
|
193
193
|
if (s.constructor === String)
|
|
194
|
-
return `<${s}${
|
|
194
|
+
return `<${s}${e}>`;
|
|
195
195
|
{
|
|
196
196
|
let r = `<${s.tag}`;
|
|
197
197
|
if (s.attrs)
|
|
@@ -199,99 +199,99 @@ class g {
|
|
|
199
199
|
const i = s.attrs[o];
|
|
200
200
|
i !== null && (r += ` ${o}="${i}"`);
|
|
201
201
|
}
|
|
202
|
-
return `${r}${
|
|
202
|
+
return `${r}${e}>`;
|
|
203
203
|
}
|
|
204
204
|
}).join("");
|
|
205
205
|
}
|
|
206
|
-
renderOpeningTag(
|
|
207
|
-
return this.renderTag(
|
|
206
|
+
renderOpeningTag(t) {
|
|
207
|
+
return this.renderTag(t, "");
|
|
208
208
|
}
|
|
209
|
-
renderClosingTag(
|
|
210
|
-
return
|
|
209
|
+
renderClosingTag(t) {
|
|
210
|
+
return t.constructor === String ? `</${t}>` : t.slice(0).reverse().map((e) => e.constructor === String ? `</${e}>` : `</${e.tag}>`).join("");
|
|
211
211
|
}
|
|
212
|
-
getMatchingNode(
|
|
213
|
-
const
|
|
214
|
-
if (typeof
|
|
215
|
-
return t
|
|
212
|
+
getMatchingNode(t) {
|
|
213
|
+
const e = this.nodes[t.type];
|
|
214
|
+
if (typeof e == "function")
|
|
215
|
+
return e(t);
|
|
216
216
|
}
|
|
217
|
-
getMatchingMark(
|
|
218
|
-
const
|
|
219
|
-
if (typeof
|
|
220
|
-
return t
|
|
217
|
+
getMatchingMark(t) {
|
|
218
|
+
const e = this.marks[t.type];
|
|
219
|
+
if (typeof e == "function")
|
|
220
|
+
return e(t);
|
|
221
221
|
}
|
|
222
222
|
}
|
|
223
223
|
class T {
|
|
224
224
|
constructor() {
|
|
225
|
-
c(this, "isCDNUrl", (
|
|
226
|
-
...
|
|
227
|
-
per_page:
|
|
225
|
+
c(this, "isCDNUrl", (t = "") => t.indexOf("/cdn/") > -1), c(this, "getOptionsPage", (t, e = 25, s = 1) => ({
|
|
226
|
+
...t,
|
|
227
|
+
per_page: e,
|
|
228
228
|
page: s
|
|
229
|
-
})), c(this, "delay", (
|
|
230
|
-
const s = Math.abs(
|
|
231
|
-
return this.arrayFrom(s, (o, i) => i * r +
|
|
232
|
-
}), c(this, "asyncMap", async (
|
|
229
|
+
})), c(this, "delay", (t) => new Promise((e) => setTimeout(e, t))), c(this, "arrayFrom", (t = 0, e) => [...Array(t)].map(e)), c(this, "range", (t = 0, e = t) => {
|
|
230
|
+
const s = Math.abs(e - t) || 0, r = t < e ? 1 : -1;
|
|
231
|
+
return this.arrayFrom(s, (o, i) => i * r + t);
|
|
232
|
+
}), c(this, "asyncMap", async (t, e) => Promise.all(t.map(e))), c(this, "flatMap", (t = [], e) => t.map(e).reduce((s, r) => [...s, ...r], []));
|
|
233
233
|
}
|
|
234
|
-
stringify(
|
|
234
|
+
stringify(t, e, s) {
|
|
235
235
|
const r = [];
|
|
236
|
-
for (const o in
|
|
237
|
-
if (!Object.prototype.hasOwnProperty.call(
|
|
236
|
+
for (const o in t) {
|
|
237
|
+
if (!Object.prototype.hasOwnProperty.call(t, o))
|
|
238
238
|
continue;
|
|
239
|
-
const i =
|
|
239
|
+
const i = t[o], a = s ? "" : encodeURIComponent(o);
|
|
240
240
|
let l;
|
|
241
241
|
typeof i == "object" ? l = this.stringify(
|
|
242
242
|
i,
|
|
243
|
-
|
|
243
|
+
e ? e + encodeURIComponent("[" + a + "]") : a,
|
|
244
244
|
Array.isArray(i)
|
|
245
|
-
) : l = (
|
|
245
|
+
) : l = (e ? e + encodeURIComponent("[" + a + "]") : a) + "=" + encodeURIComponent(i), r.push(l);
|
|
246
246
|
}
|
|
247
247
|
return r.join("&");
|
|
248
248
|
}
|
|
249
249
|
}
|
|
250
250
|
class G {
|
|
251
|
-
constructor(
|
|
252
|
-
c(this, "baseURL"), c(this, "timeout"), c(this, "headers"), c(this, "responseInterceptor"), c(this, "fetch"), c(this, "ejectInterceptor"), c(this, "url"), c(this, "parameters"), this.baseURL =
|
|
251
|
+
constructor(t) {
|
|
252
|
+
c(this, "baseURL"), c(this, "timeout"), c(this, "headers"), c(this, "responseInterceptor"), c(this, "fetch"), c(this, "ejectInterceptor"), c(this, "url"), c(this, "parameters"), this.baseURL = t.baseURL, this.headers = t.headers || [], this.timeout = t != null && t.timeout ? t.timeout * 1e3 : 0, this.responseInterceptor = t.responseInterceptor, this.fetch = (...e) => t.fetch ? t.fetch(...e) : fetch(...e), this.ejectInterceptor = !1, this.url = "", this.parameters = {};
|
|
253
253
|
}
|
|
254
|
-
get(
|
|
255
|
-
return this.url =
|
|
254
|
+
get(t, e) {
|
|
255
|
+
return this.url = t, this.parameters = e, this._methodHandler("get");
|
|
256
256
|
}
|
|
257
|
-
post(
|
|
258
|
-
return this.url =
|
|
257
|
+
post(t, e) {
|
|
258
|
+
return this.url = t, this.parameters = e, this._methodHandler("post");
|
|
259
259
|
}
|
|
260
|
-
put(
|
|
261
|
-
return this.url =
|
|
260
|
+
put(t, e) {
|
|
261
|
+
return this.url = t, this.parameters = e, this._methodHandler("put");
|
|
262
262
|
}
|
|
263
|
-
delete(
|
|
264
|
-
return this.url =
|
|
263
|
+
delete(t, e) {
|
|
264
|
+
return this.url = t, this.parameters = e, this._methodHandler("delete");
|
|
265
265
|
}
|
|
266
|
-
async _responseHandler(
|
|
267
|
-
const
|
|
266
|
+
async _responseHandler(t) {
|
|
267
|
+
const e = [], s = {
|
|
268
268
|
data: {},
|
|
269
269
|
headers: {},
|
|
270
270
|
status: 0,
|
|
271
271
|
statusText: ""
|
|
272
272
|
};
|
|
273
|
-
|
|
273
|
+
t.status !== 204 && await t.json().then((r) => {
|
|
274
274
|
s.data = r;
|
|
275
275
|
});
|
|
276
|
-
for (const r of
|
|
277
|
-
|
|
278
|
-
return s.headers = { ...
|
|
276
|
+
for (const r of t.headers.entries())
|
|
277
|
+
e[r[0]] = r[1];
|
|
278
|
+
return s.headers = { ...e }, s.status = t.status, s.statusText = t.statusText, s;
|
|
279
279
|
}
|
|
280
|
-
async _methodHandler(
|
|
281
|
-
let
|
|
282
|
-
if (
|
|
280
|
+
async _methodHandler(t) {
|
|
281
|
+
let e = `${this.baseURL}${this.url}`, s = null;
|
|
282
|
+
if (t === "get") {
|
|
283
283
|
const l = new T();
|
|
284
|
-
|
|
284
|
+
e = `${this.baseURL}${this.url}?${l.stringify(
|
|
285
285
|
this.parameters
|
|
286
286
|
)}`;
|
|
287
287
|
} else
|
|
288
288
|
s = JSON.stringify(this.parameters);
|
|
289
|
-
const r = new URL(
|
|
289
|
+
const r = new URL(e), o = new AbortController(), { signal: i } = o;
|
|
290
290
|
let a;
|
|
291
291
|
this.timeout && (a = setTimeout(() => o.abort(), this.timeout));
|
|
292
292
|
try {
|
|
293
293
|
const l = await this.fetch(`${r}`, {
|
|
294
|
-
method:
|
|
294
|
+
method: t,
|
|
295
295
|
headers: this.headers,
|
|
296
296
|
body: s,
|
|
297
297
|
signal: i
|
|
@@ -308,15 +308,15 @@ class G {
|
|
|
308
308
|
eject() {
|
|
309
309
|
this.ejectInterceptor = !0;
|
|
310
310
|
}
|
|
311
|
-
_statusHandler(
|
|
312
|
-
const
|
|
311
|
+
_statusHandler(t) {
|
|
312
|
+
const e = /20[0-6]/g;
|
|
313
313
|
return new Promise((s, r) => {
|
|
314
|
-
if (
|
|
315
|
-
return s(
|
|
314
|
+
if (e.test(`${t.status}`))
|
|
315
|
+
return s(t);
|
|
316
316
|
const o = {
|
|
317
|
-
message: new Error(
|
|
318
|
-
status:
|
|
319
|
-
response:
|
|
317
|
+
message: new Error(t.statusText),
|
|
318
|
+
status: t.status,
|
|
319
|
+
response: t.data.error || t.data.slug
|
|
320
320
|
};
|
|
321
321
|
r(o);
|
|
322
322
|
});
|
|
@@ -325,79 +325,79 @@ class G {
|
|
|
325
325
|
let p = {};
|
|
326
326
|
const d = {};
|
|
327
327
|
class W {
|
|
328
|
-
constructor(
|
|
329
|
-
if (c(this, "client"), c(this, "maxRetries"), c(this, "throttle"), c(this, "accessToken"), c(this, "cache"), c(this, "helpers"), c(this, "relations"), c(this, "links"), c(this, "richTextResolver"), c(this, "resolveNestedRelations"), !
|
|
330
|
-
const o =
|
|
331
|
-
|
|
328
|
+
constructor(t, e) {
|
|
329
|
+
if (c(this, "client"), c(this, "maxRetries"), c(this, "throttle"), c(this, "accessToken"), c(this, "cache"), c(this, "helpers"), c(this, "relations"), c(this, "links"), c(this, "richTextResolver"), c(this, "resolveNestedRelations"), !e) {
|
|
330
|
+
const o = t.region ? `-${t.region}` : "", i = t.https === !1 ? "http" : "https";
|
|
331
|
+
t.oauthToken ? e = `${i}://api${o}.storyblok.com/v1` : e = `${i}://api${o}.storyblok.com/v2`;
|
|
332
332
|
}
|
|
333
333
|
const s = new Headers();
|
|
334
334
|
s.set("Content-Type", "application/json"), s.set("Accept", "application/json"), s.forEach((o, i) => {
|
|
335
|
-
|
|
335
|
+
t.headers && t.headers[i] && s.set(i, t.headers[i]);
|
|
336
336
|
});
|
|
337
337
|
let r = 5;
|
|
338
|
-
|
|
339
|
-
baseURL:
|
|
340
|
-
timeout:
|
|
338
|
+
t.oauthToken && (s.set("Authorization", t.oauthToken), r = 3), t.rateLimit && (r = t.rateLimit), t.richTextSchema ? this.richTextResolver = new g(t.richTextSchema) : this.richTextResolver = new g(), t.componentResolver && this.setComponentResolver(t.componentResolver), this.maxRetries = t.maxRetries, this.throttle = j(this.throttledRequest, r, 1e3), this.accessToken = t.accessToken || "", this.relations = {}, this.links = {}, this.cache = t.cache || { clear: "manual" }, this.helpers = new T(), this.resolveNestedRelations = !1, this.client = new G({
|
|
339
|
+
baseURL: e,
|
|
340
|
+
timeout: t.timeout || 0,
|
|
341
341
|
headers: s,
|
|
342
|
-
responseInterceptor:
|
|
343
|
-
fetch:
|
|
342
|
+
responseInterceptor: t.responseInterceptor,
|
|
343
|
+
fetch: t.fetch
|
|
344
344
|
});
|
|
345
345
|
}
|
|
346
|
-
setComponentResolver(
|
|
347
|
-
this.richTextResolver.addNode("blok", (
|
|
346
|
+
setComponentResolver(t) {
|
|
347
|
+
this.richTextResolver.addNode("blok", (e) => {
|
|
348
348
|
let s = "";
|
|
349
|
-
return
|
|
350
|
-
s +=
|
|
349
|
+
return e.attrs.body.forEach((r) => {
|
|
350
|
+
s += t(r.component, r);
|
|
351
351
|
}), {
|
|
352
352
|
html: s
|
|
353
353
|
};
|
|
354
354
|
});
|
|
355
355
|
}
|
|
356
|
-
parseParams(
|
|
357
|
-
return
|
|
356
|
+
parseParams(t) {
|
|
357
|
+
return t.version || (t.version = "published"), t.token || (t.token = this.getToken()), t.cv || (t.cv = d[t.token]), Array.isArray(t.resolve_relations) && (t.resolve_relations = t.resolve_relations.join(",")), t;
|
|
358
358
|
}
|
|
359
|
-
factoryParamOptions(
|
|
360
|
-
return this.helpers.isCDNUrl(
|
|
359
|
+
factoryParamOptions(t, e) {
|
|
360
|
+
return this.helpers.isCDNUrl(t) ? this.parseParams(e) : e;
|
|
361
361
|
}
|
|
362
|
-
makeRequest(
|
|
362
|
+
makeRequest(t, e, s, r) {
|
|
363
363
|
const o = this.factoryParamOptions(
|
|
364
|
-
|
|
365
|
-
this.helpers.getOptionsPage(
|
|
364
|
+
t,
|
|
365
|
+
this.helpers.getOptionsPage(e, s, r)
|
|
366
366
|
);
|
|
367
|
-
return this.cacheResponse(
|
|
367
|
+
return this.cacheResponse(t, o);
|
|
368
368
|
}
|
|
369
|
-
get(
|
|
370
|
-
|
|
371
|
-
const s = `/${
|
|
369
|
+
get(t, e) {
|
|
370
|
+
e || (e = {});
|
|
371
|
+
const s = `/${t}`, r = this.factoryParamOptions(s, e);
|
|
372
372
|
return this.cacheResponse(s, r);
|
|
373
373
|
}
|
|
374
|
-
async getAll(
|
|
375
|
-
const r = (
|
|
374
|
+
async getAll(t, e, s) {
|
|
375
|
+
const r = (e == null ? void 0 : e.per_page) || 25, o = `/${t}`, i = o.split("/"), a = s || i[i.length - 1], l = 1, h = await this.makeRequest(o, e, r, l), u = h.total ? Math.ceil(h.total / r) : 1, f = await this.helpers.asyncMap(
|
|
376
376
|
this.helpers.range(l, u),
|
|
377
|
-
(m) => this.makeRequest(o,
|
|
377
|
+
(m) => this.makeRequest(o, e, r, m + 1)
|
|
378
378
|
);
|
|
379
379
|
return this.helpers.flatMap(
|
|
380
380
|
[h, ...f],
|
|
381
381
|
(m) => Object.values(m.data[a])
|
|
382
382
|
);
|
|
383
383
|
}
|
|
384
|
-
post(
|
|
385
|
-
const s = `/${
|
|
386
|
-
return Promise.resolve(this.throttle("post", s,
|
|
384
|
+
post(t, e) {
|
|
385
|
+
const s = `/${t}`;
|
|
386
|
+
return Promise.resolve(this.throttle("post", s, e));
|
|
387
387
|
}
|
|
388
|
-
put(
|
|
389
|
-
const s = `/${
|
|
390
|
-
return Promise.resolve(this.throttle("put", s,
|
|
388
|
+
put(t, e) {
|
|
389
|
+
const s = `/${t}`;
|
|
390
|
+
return Promise.resolve(this.throttle("put", s, e));
|
|
391
391
|
}
|
|
392
|
-
delete(
|
|
393
|
-
const s = `/${
|
|
394
|
-
return Promise.resolve(this.throttle("delete", s,
|
|
392
|
+
delete(t, e) {
|
|
393
|
+
const s = `/${t}`;
|
|
394
|
+
return Promise.resolve(this.throttle("delete", s, e));
|
|
395
395
|
}
|
|
396
|
-
getStories(
|
|
397
|
-
return this.get("cdn/stories",
|
|
396
|
+
getStories(t) {
|
|
397
|
+
return this.get("cdn/stories", t);
|
|
398
398
|
}
|
|
399
|
-
getStory(
|
|
400
|
-
return this.get(`cdn/stories/${
|
|
399
|
+
getStory(t, e) {
|
|
400
|
+
return this.get(`cdn/stories/${t}`, e);
|
|
401
401
|
}
|
|
402
402
|
getToken() {
|
|
403
403
|
return this.accessToken;
|
|
@@ -405,26 +405,26 @@ class W {
|
|
|
405
405
|
ejectInterceptor() {
|
|
406
406
|
this.client.eject();
|
|
407
407
|
}
|
|
408
|
-
_cleanCopy(
|
|
409
|
-
return JSON.parse(JSON.stringify(
|
|
408
|
+
_cleanCopy(t) {
|
|
409
|
+
return JSON.parse(JSON.stringify(t));
|
|
410
410
|
}
|
|
411
|
-
_insertLinks(
|
|
412
|
-
const s = e
|
|
411
|
+
_insertLinks(t, e) {
|
|
412
|
+
const s = t[e];
|
|
413
413
|
s && s.fieldtype == "multilink" && s.linktype == "story" && typeof s.id == "string" && this.links[s.id] ? s.story = this._cleanCopy(this.links[s.id]) : s && s.linktype === "story" && typeof s.uuid == "string" && this.links[s.uuid] && (s.story = this._cleanCopy(this.links[s.uuid]));
|
|
414
414
|
}
|
|
415
|
-
_insertRelations(
|
|
416
|
-
if (s.indexOf(`${
|
|
417
|
-
if (typeof e
|
|
418
|
-
this.relations[e
|
|
419
|
-
else if (e
|
|
415
|
+
_insertRelations(t, e, s) {
|
|
416
|
+
if (s.indexOf(`${t.component}.${e}`) > -1) {
|
|
417
|
+
if (typeof t[e] == "string")
|
|
418
|
+
this.relations[t[e]] && (t[e] = this._cleanCopy(this.relations[t[e]]));
|
|
419
|
+
else if (t[e] && t[e].constructor === Array) {
|
|
420
420
|
const r = [];
|
|
421
|
-
e
|
|
421
|
+
t[e].forEach((o) => {
|
|
422
422
|
this.relations[o] && r.push(this._cleanCopy(this.relations[o]));
|
|
423
|
-
}), e
|
|
423
|
+
}), t[e] = r;
|
|
424
424
|
}
|
|
425
425
|
}
|
|
426
426
|
}
|
|
427
|
-
iterateTree(
|
|
427
|
+
iterateTree(t, e) {
|
|
428
428
|
const s = (r) => {
|
|
429
429
|
if (r != null) {
|
|
430
430
|
if (r.constructor === Array)
|
|
@@ -437,26 +437,26 @@ class W {
|
|
|
437
437
|
(r.component && r._uid || r.type === "link") && (this._insertRelations(
|
|
438
438
|
r,
|
|
439
439
|
o,
|
|
440
|
-
|
|
440
|
+
e
|
|
441
441
|
), this._insertLinks(r, o)), s(r[o]);
|
|
442
442
|
}
|
|
443
443
|
}
|
|
444
444
|
};
|
|
445
|
-
s(
|
|
445
|
+
s(t.content);
|
|
446
446
|
}
|
|
447
|
-
async resolveLinks(
|
|
447
|
+
async resolveLinks(t, e) {
|
|
448
448
|
let s = [];
|
|
449
|
-
if (
|
|
450
|
-
const r =
|
|
449
|
+
if (t.link_uuids) {
|
|
450
|
+
const r = t.link_uuids.length, o = [], i = 50;
|
|
451
451
|
for (let a = 0; a < r; a += i) {
|
|
452
452
|
const l = Math.min(r, a + i);
|
|
453
|
-
o.push(
|
|
453
|
+
o.push(t.link_uuids.slice(a, l));
|
|
454
454
|
}
|
|
455
455
|
for (let a = 0; a < o.length; a++)
|
|
456
456
|
(await this.getStories({
|
|
457
457
|
per_page: i,
|
|
458
|
-
language:
|
|
459
|
-
version:
|
|
458
|
+
language: e.language,
|
|
459
|
+
version: e.version,
|
|
460
460
|
by_uuids: o[a].join(",")
|
|
461
461
|
})).data.stories.forEach(
|
|
462
462
|
(l) => {
|
|
@@ -464,70 +464,72 @@ class W {
|
|
|
464
464
|
}
|
|
465
465
|
);
|
|
466
466
|
} else
|
|
467
|
-
s =
|
|
467
|
+
s = t.links;
|
|
468
468
|
s.forEach((r) => {
|
|
469
469
|
this.links[r.uuid] = { ...r, _stopResolving: !0 };
|
|
470
470
|
});
|
|
471
471
|
}
|
|
472
|
-
async resolveRelations(
|
|
472
|
+
async resolveRelations(t, e) {
|
|
473
473
|
let s = [];
|
|
474
|
-
if (
|
|
475
|
-
const r =
|
|
474
|
+
if (t.rel_uuids) {
|
|
475
|
+
const r = t.rel_uuids.length, o = [], i = 50;
|
|
476
476
|
for (let a = 0; a < r; a += i) {
|
|
477
477
|
const l = Math.min(r, a + i);
|
|
478
|
-
o.push(
|
|
478
|
+
o.push(t.rel_uuids.slice(a, l));
|
|
479
479
|
}
|
|
480
480
|
for (let a = 0; a < o.length; a++)
|
|
481
481
|
(await this.getStories({
|
|
482
482
|
per_page: i,
|
|
483
|
-
language:
|
|
484
|
-
version:
|
|
483
|
+
language: e.language,
|
|
484
|
+
version: e.version,
|
|
485
485
|
by_uuids: o[a].join(",")
|
|
486
486
|
})).data.stories.forEach((l) => {
|
|
487
487
|
s.push(l);
|
|
488
488
|
});
|
|
489
489
|
} else
|
|
490
|
-
s =
|
|
490
|
+
s = t.rels;
|
|
491
491
|
s && s.length > 0 && s.forEach((r) => {
|
|
492
492
|
this.relations[r.uuid] = { ...r, _stopResolving: !0 };
|
|
493
493
|
});
|
|
494
494
|
}
|
|
495
|
-
async resolveStories(
|
|
495
|
+
async resolveStories(t, e) {
|
|
496
496
|
var s, r;
|
|
497
497
|
let o = [];
|
|
498
|
-
if (typeof
|
|
498
|
+
if (typeof e.resolve_relations < "u" && e.resolve_relations.length > 0 && (typeof e.resolve_relations == "string" && (o = e.resolve_relations.split(",")), await this.resolveRelations(t, e)), e.resolve_links && ["1", "story", "url"].indexOf(e.resolve_links) > -1 && ((s = t.links) != null && s.length || (r = t.link_uuids) != null && r.length) && await this.resolveLinks(t, e), this.resolveNestedRelations)
|
|
499
499
|
for (const i in this.relations)
|
|
500
500
|
this.iterateTree(this.relations[i], o);
|
|
501
|
-
|
|
501
|
+
t.story ? this.iterateTree(t.story, o) : t.stories.forEach((i) => {
|
|
502
502
|
this.iterateTree(i, o);
|
|
503
503
|
});
|
|
504
504
|
}
|
|
505
|
-
cacheResponse(
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
505
|
+
async cacheResponse(t, e, s) {
|
|
506
|
+
const r = this.helpers.stringify({ url: t, params: e }), o = this.cacheProvider();
|
|
507
|
+
if (this.cache.clear === "auto" && e.version === "draft" && await this.flushCache(), e.version === "published" && t != "/cdn/spaces/me") {
|
|
508
|
+
const i = await o.get(r);
|
|
509
|
+
if (i)
|
|
510
|
+
return Promise.resolve(i);
|
|
511
|
+
}
|
|
512
|
+
return new Promise((i, a) => {
|
|
513
513
|
try {
|
|
514
514
|
(async () => {
|
|
515
515
|
var l;
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
516
|
+
try {
|
|
517
|
+
const h = await this.throttle("get", t, e);
|
|
518
|
+
let u = { data: h.data, headers: h.headers };
|
|
519
|
+
return (l = h.headers) != null && l["per-page"] && (u = Object.assign({}, u, {
|
|
520
|
+
perPage: h.headers["per-page"] ? parseInt(h.headers["per-page"]) : 0,
|
|
521
|
+
total: h.headers["per-page"] ? parseInt(h.headers.total) : 0
|
|
522
|
+
})), h.status != 200 ? a(h) : ((u.data.story || u.data.stories) && await this.resolveStories(u.data, e), e.version === "published" && t != "/cdn/spaces/me" && await o.set(r, u), u.data.cv && e.token && (e.version == "draft" && d[e.token] != u.data.cv && await this.flushCache(), d[e.token] = u.data.cv), i(u));
|
|
523
|
+
} catch (h) {
|
|
524
|
+
return a(h);
|
|
525
|
+
}
|
|
524
526
|
})();
|
|
525
527
|
} catch {
|
|
526
528
|
}
|
|
527
529
|
});
|
|
528
530
|
}
|
|
529
|
-
throttledRequest(
|
|
530
|
-
return this.client[
|
|
531
|
+
throttledRequest(t, e, s) {
|
|
532
|
+
return this.client[t](e, s);
|
|
531
533
|
}
|
|
532
534
|
cacheVersions() {
|
|
533
535
|
return d;
|
|
@@ -535,65 +537,72 @@ class W {
|
|
|
535
537
|
cacheVersion() {
|
|
536
538
|
return d[this.accessToken];
|
|
537
539
|
}
|
|
538
|
-
setCacheVersion(
|
|
539
|
-
this.accessToken && (d[this.accessToken] =
|
|
540
|
+
setCacheVersion(t) {
|
|
541
|
+
this.accessToken && (d[this.accessToken] = t);
|
|
540
542
|
}
|
|
541
543
|
cacheProvider() {
|
|
542
544
|
switch (this.cache.type) {
|
|
543
545
|
case "memory":
|
|
544
546
|
return {
|
|
545
|
-
get(
|
|
546
|
-
return p[
|
|
547
|
+
get(t) {
|
|
548
|
+
return Promise.resolve(p[t]);
|
|
547
549
|
},
|
|
548
550
|
getAll() {
|
|
549
|
-
return p;
|
|
551
|
+
return Promise.resolve(p);
|
|
550
552
|
},
|
|
551
|
-
set(
|
|
552
|
-
p[
|
|
553
|
+
set(t, e) {
|
|
554
|
+
return p[t] = e, Promise.resolve(void 0);
|
|
553
555
|
},
|
|
554
556
|
flush() {
|
|
555
|
-
p = {};
|
|
557
|
+
return p = {}, Promise.resolve(void 0);
|
|
556
558
|
}
|
|
557
559
|
};
|
|
560
|
+
case "custom":
|
|
561
|
+
if (this.cache.custom)
|
|
562
|
+
return this.cache.custom;
|
|
558
563
|
default:
|
|
559
564
|
return {
|
|
560
565
|
get() {
|
|
566
|
+
return Promise.resolve(void 0);
|
|
561
567
|
},
|
|
562
568
|
getAll() {
|
|
569
|
+
return Promise.resolve(void 0);
|
|
563
570
|
},
|
|
564
571
|
set() {
|
|
572
|
+
return Promise.resolve(void 0);
|
|
565
573
|
},
|
|
566
574
|
flush() {
|
|
575
|
+
return Promise.resolve(void 0);
|
|
567
576
|
}
|
|
568
577
|
};
|
|
569
578
|
}
|
|
570
579
|
}
|
|
571
|
-
flushCache() {
|
|
572
|
-
return this.cacheProvider().flush(), this;
|
|
580
|
+
async flushCache() {
|
|
581
|
+
return await this.cacheProvider().flush(), this;
|
|
573
582
|
}
|
|
574
583
|
}
|
|
575
584
|
const X = (n = {}) => {
|
|
576
|
-
const { apiOptions:
|
|
577
|
-
if (!
|
|
585
|
+
const { apiOptions: t } = n;
|
|
586
|
+
if (!t.accessToken) {
|
|
578
587
|
console.error(
|
|
579
588
|
"You need to provide an access token to interact with Storyblok API. Read https://www.storyblok.com/docs/api/content-delivery#topics/authentication"
|
|
580
589
|
);
|
|
581
590
|
return;
|
|
582
591
|
}
|
|
583
|
-
return { storyblokApi: new W(
|
|
592
|
+
return { storyblokApi: new W(t) };
|
|
584
593
|
}, Z = (n) => {
|
|
585
594
|
if (typeof n != "object" || typeof n._editable > "u")
|
|
586
595
|
return {};
|
|
587
|
-
const
|
|
596
|
+
const t = JSON.parse(
|
|
588
597
|
n._editable.replace(/^<!--#storyblok#/, "").replace(/-->$/, "")
|
|
589
598
|
);
|
|
590
599
|
return {
|
|
591
|
-
"data-blok-c": JSON.stringify(
|
|
592
|
-
"data-blok-uid":
|
|
600
|
+
"data-blok-c": JSON.stringify(t),
|
|
601
|
+
"data-blok-uid": t.id + "-" + t.uid
|
|
593
602
|
};
|
|
594
603
|
};
|
|
595
604
|
let y;
|
|
596
|
-
const R = "https://app.storyblok.com/f/storyblok-v2-latest.js",
|
|
605
|
+
const R = "https://app.storyblok.com/f/storyblok-v2-latest.js", tt = (n, t, e = {}) => {
|
|
597
606
|
if (!(typeof window > "u")) {
|
|
598
607
|
if (typeof window.storyblokRegisterEvent > "u") {
|
|
599
608
|
console.error(
|
|
@@ -606,54 +615,54 @@ const R = "https://app.storyblok.com/f/storyblok-v2-latest.js", ee = (n, e, t =
|
|
|
606
615
|
return;
|
|
607
616
|
}
|
|
608
617
|
window.storyblokRegisterEvent(() => {
|
|
609
|
-
new window.StoryblokBridge(
|
|
610
|
-
r.action === "input" && r.story.id === n ?
|
|
618
|
+
new window.StoryblokBridge(e).on(["input", "published", "change"], (r) => {
|
|
619
|
+
r.action === "input" && r.story.id === n ? t(r.story) : (r.action === "change" || r.action === "published") && r.storyId === n && window.location.reload();
|
|
611
620
|
});
|
|
612
621
|
});
|
|
613
622
|
}
|
|
614
|
-
},
|
|
623
|
+
}, et = (n = {}) => {
|
|
615
624
|
const {
|
|
616
|
-
bridge:
|
|
617
|
-
accessToken:
|
|
625
|
+
bridge: t,
|
|
626
|
+
accessToken: e,
|
|
618
627
|
use: s = [],
|
|
619
628
|
apiOptions: r = {},
|
|
620
629
|
richText: o = {}
|
|
621
630
|
} = n;
|
|
622
|
-
r.accessToken = r.accessToken ||
|
|
623
|
-
const i = { bridge:
|
|
631
|
+
r.accessToken = r.accessToken || e;
|
|
632
|
+
const i = { bridge: t, apiOptions: r };
|
|
624
633
|
let a = {};
|
|
625
634
|
return s.forEach((l) => {
|
|
626
635
|
a = { ...a, ...l(i) };
|
|
627
|
-
}),
|
|
628
|
-
}, _ = (n,
|
|
629
|
-
n.addNode("blok", (
|
|
636
|
+
}), t !== !1 && w(R), y = new g(o.schema), o.resolver && _(y, o.resolver), a;
|
|
637
|
+
}, _ = (n, t) => {
|
|
638
|
+
n.addNode("blok", (e) => {
|
|
630
639
|
let s = "";
|
|
631
|
-
return
|
|
632
|
-
s +=
|
|
640
|
+
return e.attrs.body.forEach((r) => {
|
|
641
|
+
s += t(r.component, r);
|
|
633
642
|
}), {
|
|
634
643
|
html: s
|
|
635
644
|
};
|
|
636
645
|
});
|
|
637
|
-
},
|
|
638
|
-
let s =
|
|
646
|
+
}, st = (n, t, e) => {
|
|
647
|
+
let s = e || y;
|
|
639
648
|
if (!s) {
|
|
640
649
|
console.error(
|
|
641
650
|
"Please initialize the Storyblok SDK before calling the renderRichText function"
|
|
642
651
|
);
|
|
643
652
|
return;
|
|
644
653
|
}
|
|
645
|
-
return n === "" ? "" : n ? (
|
|
654
|
+
return n === "" ? "" : n ? (t && (s = new g(t.schema), t.resolver && _(s, t.resolver)), s.render(n)) : (console.warn(`${n} is not a valid Richtext object. This might be because the value of the richtext field is empty.
|
|
646
655
|
|
|
647
656
|
For more info about the richtext object check https://github.com/storyblok/storyblok-js#rendering-rich-text`), "");
|
|
648
|
-
},
|
|
657
|
+
}, rt = () => w(R);
|
|
649
658
|
export {
|
|
650
659
|
g as RichTextResolver,
|
|
651
660
|
K as RichTextSchema,
|
|
652
661
|
X as apiPlugin,
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
662
|
+
rt as loadStoryblokBridge,
|
|
663
|
+
tt as registerStoryblokBridge,
|
|
664
|
+
st as renderRichText,
|
|
656
665
|
Z as storyblokEditable,
|
|
657
|
-
|
|
658
|
-
|
|
666
|
+
et as storyblokInit,
|
|
667
|
+
tt as useStoryblokBridge
|
|
659
668
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@storyblok/js",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.15",
|
|
4
4
|
"description": "SDK to integrate Storyblok into your project using JavaScript.",
|
|
5
5
|
"main": "./dist/storyblok-js.js",
|
|
6
6
|
"module": "./dist/storyblok-js.mjs",
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"prepublishOnly": "npm run build && cp ../README.md ./"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"storyblok-js-client": "^5.
|
|
30
|
+
"storyblok-js-client": "^5.4.1"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
33
33
|
"@tsconfig/recommended": "^1.0.1",
|