@storyblok/react 2.0.10 → 2.0.12
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-react.js +2 -2
- package/dist/storyblok-react.mjs +234 -225
- package/package.json +2 -2
package/dist/storyblok-react.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
(function(l,u){typeof exports=="object"&&typeof module!="undefined"?u(exports,require("react")):typeof define=="function"&&define.amd?define(["exports","react"],u):(l=typeof globalThis!="undefined"?globalThis:l||self,u(l.storyblokReact={},l.React))})(this,function(l,u){"use strict";var Tt=Object.defineProperty,_t=Object.defineProperties;var Rt=Object.getOwnPropertyDescriptors;var T=Object.getOwnPropertySymbols;var U=Object.prototype.hasOwnProperty,H=Object.prototype.propertyIsEnumerable;var L=(l,u,p)=>u in l?Tt(l,u,{enumerable:!0,configurable:!0,writable:!0,value:p}):l[u]=p,y=(l,u)=>{for(var p in u||(u={}))U.call(u,p)&&L(l,p,u[p]);if(T)for(var p of T(u))H.call(u,p)&&L(l,p,u[p]);return l},_=(l,u)=>_t(l,Rt(u));var q=(l,u)=>{var p={};for(var f in l)U.call(l,f)&&u.indexOf(f)<0&&(p[f]=l[f]);if(l!=null&&T)for(var f of T(l))u.indexOf(f)<0&&H.call(l,f)&&(p[f]=l[f]);return p};function p(o){return o&&typeof o=="object"&&"default"in o?o:{default:o}}var f=p(u);let j=!1;const C=[],B=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}j?r():C.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=>{C.forEach(n=>n()),j=!0,t(r)},document.getElementsByTagName("head")[0].appendChild(s)});var D=Object.defineProperty,J=(o,t,e)=>t in o?D(o,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[t]=e,h=(o,t,e)=>(J(o,typeof t!="symbol"?t+"":t,e),e);function P(o){return!(o!==o||o===1/0||o===-1/0)}function V(o,t,e){if(!P(t))throw new TypeError("Expected `limit` to be a finite number");if(!P(e))throw new TypeError("Expected `interval` to be a finite number");const s=[];let r=[],n=0;const i=function(){n++;const c=setTimeout(function(){n--,s.length>0&&i(),r=r.filter(function(g){return g!==c})},e);r.indexOf(c)<0&&r.push(c);const d=s.shift();d.resolve(o.apply(d.self,d.args))},a=function(...c){const d=this;return new Promise(function(g,E){s.push({resolve:g,reject:E,args:c,self:d}),n<t&&i()})};return a.abort=function(){r.forEach(clearTimeout),r=[],s.forEach(function(c){c.reject(function(){Error.call(this,"Throttled function aborted"),this.name="AbortError"})}),s.length=0},a}const Y=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},z=o=>o==="email",F=()=>({singleTag:"hr"}),G=()=>({tag:"blockquote"}),Q=()=>({tag:"ul"}),W=o=>({tag:["pre",{tag:"code",attrs:o.attrs}]}),X=()=>({singleTag:"br"}),Z=o=>({tag:`h${o.attrs.level}`}),K=o=>({singleTag:[{tag:"img",attrs:Y(o.attrs,["src","alt","title"])}]}),tt=()=>({tag:"li"}),et=()=>({tag:"ol"}),st=()=>({tag:"p"}),rt=()=>({tag:"b"}),ot=()=>({tag:"strike"}),nt=()=>({tag:"u"}),it=()=>({tag:"strong"}),at=()=>({tag:"code"}),lt=()=>({tag:"i"}),ct=o=>{const t=y({},o.attrs),{linktype:e="url"}=o.attrs;return z(e)&&(t.href=`mailto:${t.href}`),t.anchor&&(t.href=`${t.href}#${t.anchor}`,delete t.anchor),{tag:[{tag:"a",attrs:t}]}},ht=o=>({tag:[{tag:"span",attrs:o.attrs}]}),O={nodes:{horizontal_rule:F,blockquote:G,bullet_list:Q,code_block:W,hard_break:X,heading:Z,image:K,list_item:tt,ordered_list:et,paragraph:st},marks:{bold:rt,strike:ot,underline:nt,strong:it,code:at,italic:lt,link:ct,styled:ht}},ut=function(o){const t={"&":"&","<":"<",">":">",'"':""","'":"'"},e=/[&<>"']/g,s=RegExp(e.source);return o&&s.test(o)?o.replace(e,r=>t[r]):o};class k{constructor(t){h(this,"marks"),h(this,"nodes"),t||(t=O),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(ut(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 I{constructor(){h(this,"isCDNUrl",(t="")=>t.indexOf("/cdn/")>-1),h(this,"getOptionsPage",(t,e=25,s=1)=>_(y({},t),{per_page:e,page:s})),h(this,"delay",t=>new Promise(e=>setTimeout(e,t))),h(this,"arrayFrom",(t=0,e)=>[...Array(t)].map(e)),h(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)}),h(this,"asyncMap",async(t,e)=>Promise.all(t.map(e))),h(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 c;typeof i=="object"?c=this.stringify(i,e?e+encodeURIComponent("["+a+"]"):a,Array.isArray(i)):c=(e?e+encodeURIComponent("["+a+"]"):a)+"="+encodeURIComponent(i),r.push(c)}return r.join("&")}}class dt{constructor(t){h(this,"baseURL"),h(this,"timeout"),h(this,"headers"),h(this,"responseInterceptor"),h(this,"fetch"),h(this,"ejectInterceptor"),h(this,"url"),h(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=y({},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 c=new I;e=`${this.baseURL}${this.url}?${c.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 c=await this.fetch(`${r}`,{method:t,headers:this.headers,body:s,signal:i});this.timeout&&clearTimeout(a);const d=await this._responseHandler(c);return this.responseInterceptor&&!this.ejectInterceptor?this._statusHandler(this.responseInterceptor(d)):this._statusHandler(d)}catch(c){return{message:c}}}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 v={};const m={};class pt{constructor(t,e){if(h(this,"client"),h(this,"maxRetries"),h(this,"throttle"),h(this,"accessToken"),h(this,"cache"),h(this,"helpers"),h(this,"relations"),h(this,"links"),h(this,"richTextResolver"),h(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 k(t.richTextSchema):this.richTextResolver=new k,t.componentResolver&&this.setComponentResolver(t.componentResolver),this.maxRetries=t.maxRetries,this.throttle=V(this.throttledRequest,r,1e3),this.accessToken=t.accessToken||"",this.relations={},this.links={},this.cache=t.cache||{clear:"manual"},this.helpers=new I,this.resolveNestedRelations=!1,this.client=new dt({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=m[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],c=1,d=await this.makeRequest(n,e,r,c),g=d.total?Math.ceil(d.total/r):1,E=await this.helpers.asyncMap(this.helpers.range(c,g),$=>this.makeRequest(n,e,r,$+1));return this.helpers.flatMap([d,...E],$=>Object.values($.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 c=Math.min(r,a+i);n.push(t.link_uuids.slice(a,c))}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(c=>{s.push(c)})}else s=t.links;s.forEach(r=>{this.links[r.uuid]=_(y({},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 c=Math.min(r,a+i);n.push(t.rel_uuids.slice(a,c))}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(c=>{s.push(c)})}else s=t.rels;s&&s.length>0&&s.forEach(r=>{this.relations[r.uuid]=_(y({},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)})}cacheResponse(t,e,s){return new Promise((r,n)=>{const i=this.helpers.stringify({url:t,params:e}),a=this.cacheProvider();if(this.cache.clear==="auto"&&e.version==="draft"&&this.flushCache(),e.version==="published"&&t!="/cdn/spaces/me"){const c=a.get(i);if(c)return r(c)}try{(async()=>{var c;const d=await this.throttle("get",t,e);let g={data:d.data,headers:d.headers};if((c=d.headers)!=null&&c["per-page"]&&(g=Object.assign({},g,{perPage:d.headers["per-page"]?parseInt(d.headers["per-page"]):0,total:d.headers["per-page"]?parseInt(d.headers.total):0})),d.status!=200)return n(d);(g.data.story||g.data.stories)&&await this.resolveStories(g.data,e),e.version==="published"&&t!="/cdn/spaces/me"&&a.set(i,g),g.data.cv&&e.token&&(e.version=="draft"&&m[e.token]!=g.data.cv&&this.flushCache(),m[e.token]=g.data.cv),r(g)})()}catch{}})}throttledRequest(t,e,s){return this.client[t](e,s)}cacheVersions(){return m}cacheVersion(){return m[this.accessToken]}setCacheVersion(t){this.accessToken&&(m[this.accessToken]=t)}cacheProvider(){switch(this.cache.type){case"memory":return{get(t){return v[t]},getAll(){return v},set(t,e){v[t]=e},flush(){v={}}};default:return{get(){},getAll(){},set(){},flush(){}}}}flushCache(){return this.cacheProvider().flush(),this}}const gt=(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 pt(t)}},ft=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 R;const yt="https://app.storyblok.com/f/storyblok-v2-latest.js",w=(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"],s=>{s.action==="input"&&s.story.id===o?t(s.story):(s.action==="change"||s.action==="published")&&s.storyId===o&&window.location.reload()})})}},mt=(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(c=>{a=y(y({},a),c(i))}),t!==!1&&B(yt),R=new k(n.schema),n.resolver&&A(R,n.resolver),a},A=(o,t)=>{o.addNode("blok",e=>{let s="";return e.attrs.body.forEach(r=>{s+=t(r.component,r)}),{html:s}})},kt=(o,t,e)=>{let s=e||R;if(!s){console.error("Please initialize the Storyblok SDK before calling the renderRichText function");return}return o===""?"":o?(t&&(s=new k(t.schema),t.resolver&&A(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.
|
|
1
|
+
(function(l,u){typeof exports=="object"&&typeof module!="undefined"?u(exports,require("react")):typeof define=="function"&&define.amd?define(["exports","react"],u):(l=typeof globalThis!="undefined"?globalThis:l||self,u(l.storyblokReact={},l.React))})(this,function(l,u){"use strict";var Te=Object.defineProperty,_e=Object.defineProperties;var Re=Object.getOwnPropertyDescriptors;var T=Object.getOwnPropertySymbols;var U=Object.prototype.hasOwnProperty,H=Object.prototype.propertyIsEnumerable;var L=(l,u,p)=>u in l?Te(l,u,{enumerable:!0,configurable:!0,writable:!0,value:p}):l[u]=p,y=(l,u)=>{for(var p in u||(u={}))U.call(u,p)&&L(l,p,u[p]);if(T)for(var p of T(u))H.call(u,p)&&L(l,p,u[p]);return l},_=(l,u)=>_e(l,Re(u));var q=(l,u)=>{var p={};for(var f in l)U.call(l,f)&&u.indexOf(f)<0&&(p[f]=l[f]);if(l!=null&&T)for(var f of T(l))u.indexOf(f)<0&&H.call(l,f)&&(p[f]=l[f]);return p};function p(o){return o&&typeof o=="object"&&"default"in o?o:{default:o}}var f=p(u);let $=!1;const j=[],B=o=>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}$?r():j.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=>t(r),s.onload=r=>{j.forEach(n=>n()),$=!0,e(r)},document.getElementsByTagName("head")[0].appendChild(s)});var D=Object.defineProperty,J=(o,e,t)=>e in o?D(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t,h=(o,e,t)=>(J(o,typeof e!="symbol"?e+"":e,t),t);function C(o){return!(o!==o||o===1/0||o===-1/0)}function V(o,e,t){if(!C(e))throw new TypeError("Expected `limit` to be a finite number");if(!C(t))throw new TypeError("Expected `interval` to be a finite number");const s=[];let r=[],n=0;const i=function(){n++;const c=setTimeout(function(){n--,s.length>0&&i(),r=r.filter(function(g){return g!==c})},t);r.indexOf(c)<0&&r.push(c);const d=s.shift();d.resolve(o.apply(d.self,d.args))},a=function(...c){const d=this;return new Promise(function(g,E){s.push({resolve:g,reject:E,args:c,self:d}),n<e&&i()})};return a.abort=function(){r.forEach(clearTimeout),r=[],s.forEach(function(c){c.reject(function(){Error.call(this,"Throttled function aborted"),this.name="AbortError"})}),s.length=0},a}const Y=function(o,e){const t={};for(const s in o){const r=o[s];e.indexOf(s)>-1&&r!==null&&(t[s]=r)}return t},z=o=>o==="email",F=()=>({singleTag:"hr"}),G=()=>({tag:"blockquote"}),Q=()=>({tag:"ul"}),W=o=>({tag:["pre",{tag:"code",attrs:o.attrs}]}),X=()=>({singleTag:"br"}),Z=o=>({tag:`h${o.attrs.level}`}),K=o=>({singleTag:[{tag:"img",attrs:Y(o.attrs,["src","alt","title"])}]}),ee=()=>({tag:"li"}),te=()=>({tag:"ol"}),se=()=>({tag:"p"}),re=()=>({tag:"b"}),oe=()=>({tag:"strike"}),ne=()=>({tag:"u"}),ie=()=>({tag:"strong"}),ae=()=>({tag:"code"}),le=()=>({tag:"i"}),ce=o=>{const e=y({},o.attrs),{linktype:t="url"}=o.attrs;return z(t)&&(e.href=`mailto:${e.href}`),e.anchor&&(e.href=`${e.href}#${e.anchor}`,delete e.anchor),{tag:[{tag:"a",attrs:e}]}},he=o=>({tag:[{tag:"span",attrs:o.attrs}]}),O={nodes:{horizontal_rule:F,blockquote:G,bullet_list:Q,code_block:W,hard_break:X,heading:Z,image:K,list_item:ee,ordered_list:te,paragraph:se},marks:{bold:re,strike:oe,underline:ne,strong:ie,code:ae,italic:le,link:ce,styled:he}},ue=function(o){const e={"&":"&","<":"<",">":">",'"':""","'":"'"},t=/[&<>"']/g,s=RegExp(t.source);return o&&s.test(o)?o.replace(t,r=>e[r]):o};class k{constructor(e){h(this,"marks"),h(this,"nodes"),e||(e=O),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 n=this.getMatchingMark(r);n&&t.push(this.renderOpeningTag(n.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(ue(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 n=this.getMatchingMark(r);n&&t.push(this.renderClosingTag(n.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 n in s.attrs){const i=s.attrs[n];i!==null&&(r+=` ${n}="${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 I{constructor(){h(this,"isCDNUrl",(e="")=>e.indexOf("/cdn/")>-1),h(this,"getOptionsPage",(e,t=25,s=1)=>_(y({},e),{per_page:t,page:s})),h(this,"delay",e=>new Promise(t=>setTimeout(t,e))),h(this,"arrayFrom",(e=0,t)=>[...Array(e)].map(t)),h(this,"range",(e=0,t=e)=>{const s=Math.abs(t-e)||0,r=e<t?1:-1;return this.arrayFrom(s,(n,i)=>i*r+e)}),h(this,"asyncMap",async(e,t)=>Promise.all(e.map(t))),h(this,"flatMap",(e=[],t)=>e.map(t).reduce((s,r)=>[...s,...r],[]))}stringify(e,t,s){const r=[];for(const n in e){if(!Object.prototype.hasOwnProperty.call(e,n))continue;const i=e[n],a=s?"":encodeURIComponent(n);let c;typeof i=="object"?c=this.stringify(i,t?t+encodeURIComponent("["+a+"]"):a,Array.isArray(i)):c=(t?t+encodeURIComponent("["+a+"]"):a)+"="+encodeURIComponent(i),r.push(c)}return r.join("&")}}class de{constructor(e){h(this,"baseURL"),h(this,"timeout"),h(this,"headers"),h(this,"responseInterceptor"),h(this,"fetch"),h(this,"ejectInterceptor"),h(this,"url"),h(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=y({},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 c=new I;t=`${this.baseURL}${this.url}?${c.stringify(this.parameters)}`}else s=JSON.stringify(this.parameters);const r=new URL(t),n=new AbortController,{signal:i}=n;let a;this.timeout&&(a=setTimeout(()=>n.abort(),this.timeout));try{const c=await this.fetch(`${r}`,{method:e,headers:this.headers,body:s,signal:i});this.timeout&&clearTimeout(a);const d=await this._responseHandler(c);return this.responseInterceptor&&!this.ejectInterceptor?this._statusHandler(this.responseInterceptor(d)):this._statusHandler(d)}catch(c){return{message:c}}}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 n={message:new Error(e.statusText),status:e.status,response:e.data.error||e.data.slug};r(n)})}}let v={};const m={};class pe{constructor(e,t){if(h(this,"client"),h(this,"maxRetries"),h(this,"throttle"),h(this,"accessToken"),h(this,"cache"),h(this,"helpers"),h(this,"relations"),h(this,"links"),h(this,"richTextResolver"),h(this,"resolveNestedRelations"),!t){const n=e.region?`-${e.region}`:"",i=e.https===!1?"http":"https";e.oauthToken?t=`${i}://api${n}.storyblok.com/v1`:t=`${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)=>{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 k(e.richTextSchema):this.richTextResolver=new k,e.componentResolver&&this.setComponentResolver(e.componentResolver),this.maxRetries=e.maxRetries,this.throttle=V(this.throttledRequest,r,1e3),this.accessToken=e.accessToken||"",this.relations={},this.links={},this.cache=e.cache||{clear:"manual"},this.helpers=new I,this.resolveNestedRelations=!1,this.client=new de({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=m[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 n=this.factoryParamOptions(e,this.helpers.getOptionsPage(t,s,r));return this.cacheResponse(e,n)}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,n=`/${e}`,i=n.split("/"),a=s||i[i.length-1],c=1,d=await this.makeRequest(n,t,r,c),g=d.total?Math.ceil(d.total/r):1,E=await this.helpers.asyncMap(this.helpers.range(c,g),P=>this.makeRequest(n,t,r,P+1));return this.helpers.flatMap([d,...E],P=>Object.values(P.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(n=>{this.relations[n]&&r.push(this._cleanCopy(this.relations[n]))}),e[t]=r}}}iterateTree(e,t){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,t),this._insertLinks(r,n)),s(r[n])}}};s(e.content)}async resolveLinks(e,t){let s=[];if(e.link_uuids){const r=e.link_uuids.length,n=[],i=50;for(let a=0;a<r;a+=i){const c=Math.min(r,a+i);n.push(e.link_uuids.slice(a,c))}for(let a=0;a<n.length;a++)(await this.getStories({per_page:i,language:t.language,version:t.version,by_uuids:n[a].join(",")})).data.stories.forEach(c=>{s.push(c)})}else s=e.links;s.forEach(r=>{this.links[r.uuid]=_(y({},r),{_stopResolving:!0})})}async resolveRelations(e,t){let s=[];if(e.rel_uuids){const r=e.rel_uuids.length,n=[],i=50;for(let a=0;a<r;a+=i){const c=Math.min(r,a+i);n.push(e.rel_uuids.slice(a,c))}for(let a=0;a<n.length;a++)(await this.getStories({per_page:i,language:t.language,version:t.version,by_uuids:n[a].join(",")})).data.stories.forEach(c=>{s.push(c)})}else s=e.rels;s&&s.length>0&&s.forEach(r=>{this.relations[r.uuid]=_(y({},r),{_stopResolving:!0})})}async resolveStories(e,t){var s,r;let n=[];if(typeof t.resolve_relations<"u"&&t.resolve_relations.length>0&&(typeof t.resolve_relations=="string"&&(n=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],n);e.story?this.iterateTree(e.story,n):e.stories.forEach(i=>{this.iterateTree(i,n)})}async cacheResponse(e,t,s){const r=this.helpers.stringify({url:e,params:t}),n=this.cacheProvider();if(this.cache.clear==="auto"&&t.version==="draft"&&await this.flushCache(),t.version==="published"&&e!="/cdn/spaces/me"){const i=await n.get(r);if(i)return Promise.resolve(i)}return new Promise((i,a)=>{try{(async()=>{var c;try{const d=await this.throttle("get",e,t);let g={data:d.data,headers:d.headers};return(c=d.headers)!=null&&c["per-page"]&&(g=Object.assign({},g,{perPage:d.headers["per-page"]?parseInt(d.headers["per-page"]):0,total:d.headers["per-page"]?parseInt(d.headers.total):0})),d.status!=200?a(d):((g.data.story||g.data.stories)&&await this.resolveStories(g.data,t),t.version==="published"&&e!="/cdn/spaces/me"&&await n.set(r,g),g.data.cv&&t.token&&(t.version=="draft"&&m[t.token]!=g.data.cv&&await this.flushCache(),m[t.token]=g.data.cv),i(g))}catch(d){return a(d)}})()}catch{}})}throttledRequest(e,t,s){return this.client[e](t,s)}cacheVersions(){return m}cacheVersion(){return m[this.accessToken]}setCacheVersion(e){this.accessToken&&(m[this.accessToken]=e)}cacheProvider(){switch(this.cache.type){case"memory":return{get(e){return Promise.resolve(v[e])},getAll(){return Promise.resolve(v)},set(e,t){return v[e]=t,Promise.resolve(void 0)},flush(){return v={},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 ge=(o={})=>{const{apiOptions:e}=o;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 pe(e)}},fe=o=>{if(typeof o!="object"||typeof o._editable>"u")return{};const e=JSON.parse(o._editable.replace(/^<!--#storyblok#/,"").replace(/-->$/,""));return{"data-blok-c":JSON.stringify(e),"data-blok-uid":e.id+"-"+e.uid}};let R;const ye="https://app.storyblok.com/f/storyblok-v2-latest.js",w=(o,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(!o){console.warn("Story ID is not defined. Please provide a valid ID.");return}window.storyblokRegisterEvent(()=>{new window.StoryblokBridge(t).on(["input","published","change"],s=>{s.action==="input"&&s.story.id===o?e(s.story):(s.action==="change"||s.action==="published")&&s.storyId===o&&window.location.reload()})})}},me=(o={})=>{const{bridge:e,accessToken:t,use:s=[],apiOptions:r={},richText:n={}}=o;r.accessToken=r.accessToken||t;const i={bridge:e,apiOptions:r};let a={};return s.forEach(c=>{a=y(y({},a),c(i))}),e!==!1&&B(ye),R=new k(n.schema),n.resolver&&A(R,n.resolver),a},A=(o,e)=>{o.addNode("blok",t=>{let s="";return t.attrs.body.forEach(r=>{s+=e(r.component,r)}),{html:s}})},ke=(o,e,t)=>{let s=t||R;if(!s){console.error("Please initialize the Storyblok SDK before calling the renderRichText function");return}return o===""?"":o?(e&&(s=new k(e.schema),e.resolver&&A(s,e.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`),"")},x=u.forwardRef((s,
|
|
3
|
+
For more info about the richtext object check https://github.com/storyblok/storyblok-js#rendering-rich-text`),"")},x=u.forwardRef((s,t)=>{var r=s,{blok:o}=r,e=q(r,["blok"]);if(!o)return console.error("Please provide a 'blok' property to the StoryblokComponent"),f.default.createElement("div",null,"Please provide a blok property to the StoryblokComponent");const n=N(o.component);return n?f.default.createElement(n,y({ref:t,blok:o},e)):f.default.createElement("div",null)});x.displayName="StoryblokComponent";const be=(o,e={},t={})=>{let[s,r]=u.useState({});if(!b)return console.error("You can't use useStoryblok if you're not loading apiPlugin."),null;const n=typeof window!="undefined"&&typeof window.storyblokRegisterEvent!="undefined";return u.useEffect(()=>{async function i(){const{data:a}=await b.get(`cdn/stories/${o}`,e);r(a.story),n&&a.story.id&&w(a.story.id,c=>r(c),t)}i()},[o]),s},ve=(o=null,e={})=>{let[t,s]=u.useState(o);return!(typeof window!="undefined"&&typeof window.storyblokRegisterEvent!="undefined")||!o?o:(u.useEffect(()=>{s(o),w(t.id,n=>s(n),e)},[o]),t)};let b=null;const M=()=>(b||console.error("You can't use getStoryblokApi if you're not loading apiPlugin."),b);let S={};const N=o=>S[o]?S[o]:(console.error(`Component ${o} doesn't exist.`),!1),we=(o={})=>{const{storyblokApi:e}=me(o);b=e,S=o.components};l.RichTextResolver=k,l.RichTextSchema=O,l.StoryblokComponent=x,l.apiPlugin=ge,l.getComponent=N,l.getStoryblokApi=M,l.registerStoryblokBridge=w,l.renderRichText=ke,l.storyblokEditable=fe,l.storyblokInit=we,l.useStoryblok=be,l.useStoryblokApi=M,l.useStoryblokBridge=w,l.useStoryblokState=ve,Object.defineProperties(l,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|
package/dist/storyblok-react.mjs
CHANGED
|
@@ -31,28 +31,28 @@ var __objRest = (source, exclude) => {
|
|
|
31
31
|
};
|
|
32
32
|
import React, { forwardRef, useState, useEffect } from "react";
|
|
33
33
|
let k = false;
|
|
34
|
-
const
|
|
34
|
+
const v = [], w = (n) => new Promise((t, e) => {
|
|
35
35
|
if (typeof window > "u" || (window.storyblokRegisterEvent = (r) => {
|
|
36
36
|
if (window.location === window.parent.location) {
|
|
37
37
|
console.warn("You are not in Draft Mode or in the Visual Editor.");
|
|
38
38
|
return;
|
|
39
39
|
}
|
|
40
|
-
k ? r() :
|
|
40
|
+
k ? r() : v.push(r);
|
|
41
41
|
}, document.getElementById("storyblok-javascript-bridge")))
|
|
42
42
|
return;
|
|
43
43
|
const s = document.createElement("script");
|
|
44
|
-
s.async = true, s.src = n, s.id = "storyblok-javascript-bridge", s.onerror = (r) =>
|
|
45
|
-
|
|
44
|
+
s.async = true, s.src = n, s.id = "storyblok-javascript-bridge", s.onerror = (r) => e(r), s.onload = (r) => {
|
|
45
|
+
v.forEach((o) => o()), k = true, t(r);
|
|
46
46
|
}, document.getElementsByTagName("head")[0].appendChild(s);
|
|
47
47
|
});
|
|
48
|
-
var $ = Object.defineProperty,
|
|
49
|
-
function
|
|
48
|
+
var $ = Object.defineProperty, P = (n, t, e) => t in n ? $(n, t, { enumerable: true, configurable: true, writable: true, value: e }) : n[t] = e, c = (n, t, e) => (P(n, typeof t != "symbol" ? t + "" : t, e), e);
|
|
49
|
+
function b(n) {
|
|
50
50
|
return !(n !== n || n === 1 / 0 || n === -1 / 0);
|
|
51
51
|
}
|
|
52
|
-
function
|
|
53
|
-
if (!
|
|
52
|
+
function j(n, t, e) {
|
|
53
|
+
if (!b(t))
|
|
54
54
|
throw new TypeError("Expected `limit` to be a finite number");
|
|
55
|
-
if (!
|
|
55
|
+
if (!b(e))
|
|
56
56
|
throw new TypeError("Expected `interval` to be a finite number");
|
|
57
57
|
const s = [];
|
|
58
58
|
let r = [], o = 0;
|
|
@@ -62,7 +62,7 @@ function x(n, e, t) {
|
|
|
62
62
|
o--, s.length > 0 && i(), r = r.filter(function(u) {
|
|
63
63
|
return u !== l;
|
|
64
64
|
});
|
|
65
|
-
},
|
|
65
|
+
}, e);
|
|
66
66
|
r.indexOf(l) < 0 && r.push(l);
|
|
67
67
|
const h = s.shift();
|
|
68
68
|
h.resolve(n.apply(h.self, h.args));
|
|
@@ -74,7 +74,7 @@ function x(n, e, t) {
|
|
|
74
74
|
reject: f,
|
|
75
75
|
args: l,
|
|
76
76
|
self: h
|
|
77
|
-
}), o <
|
|
77
|
+
}), o < t && i();
|
|
78
78
|
});
|
|
79
79
|
};
|
|
80
80
|
return a.abort = function() {
|
|
@@ -85,14 +85,14 @@ function x(n, e, t) {
|
|
|
85
85
|
}), s.length = 0;
|
|
86
86
|
}, a;
|
|
87
87
|
}
|
|
88
|
-
const
|
|
89
|
-
const
|
|
88
|
+
const x = function(n, t) {
|
|
89
|
+
const e = {};
|
|
90
90
|
for (const s in n) {
|
|
91
91
|
const r = n[s];
|
|
92
|
-
|
|
92
|
+
t.indexOf(s) > -1 && r !== null && (e[s] = r);
|
|
93
93
|
}
|
|
94
|
-
return
|
|
95
|
-
},
|
|
94
|
+
return e;
|
|
95
|
+
}, E = (n) => n === "email", S = () => ({
|
|
96
96
|
singleTag: "hr"
|
|
97
97
|
}), O = () => ({
|
|
98
98
|
tag: "blockquote"
|
|
@@ -114,7 +114,7 @@ const E = function(n, e) {
|
|
|
114
114
|
singleTag: [
|
|
115
115
|
{
|
|
116
116
|
tag: "img",
|
|
117
|
-
attrs:
|
|
117
|
+
attrs: x(n.attrs, ["src", "alt", "title"])
|
|
118
118
|
}
|
|
119
119
|
]
|
|
120
120
|
}), L = () => ({
|
|
@@ -136,12 +136,12 @@ const E = function(n, e) {
|
|
|
136
136
|
}), V = () => ({
|
|
137
137
|
tag: "i"
|
|
138
138
|
}), z = (n) => {
|
|
139
|
-
const
|
|
140
|
-
return
|
|
139
|
+
const t = __spreadValues({}, n.attrs), { linktype: e = "url" } = n.attrs;
|
|
140
|
+
return E(e) && (t.href = `mailto:${t.href}`), t.anchor && (t.href = `${t.href}#${t.anchor}`, delete t.anchor), {
|
|
141
141
|
tag: [
|
|
142
142
|
{
|
|
143
143
|
tag: "a",
|
|
144
|
-
attrs:
|
|
144
|
+
attrs: t
|
|
145
145
|
}
|
|
146
146
|
]
|
|
147
147
|
};
|
|
@@ -176,52 +176,52 @@ const E = function(n, e) {
|
|
|
176
176
|
styled: Y
|
|
177
177
|
}
|
|
178
178
|
}, Q = function(n) {
|
|
179
|
-
const
|
|
179
|
+
const t = {
|
|
180
180
|
"&": "&",
|
|
181
181
|
"<": "<",
|
|
182
182
|
">": ">",
|
|
183
183
|
'"': """,
|
|
184
184
|
"'": "'"
|
|
185
|
-
},
|
|
186
|
-
return n && s.test(n) ? n.replace(
|
|
185
|
+
}, e = /[&<>"']/g, s = RegExp(e.source);
|
|
186
|
+
return n && s.test(n) ? n.replace(e, (r) => t[r]) : n;
|
|
187
187
|
};
|
|
188
188
|
class g {
|
|
189
|
-
constructor(
|
|
190
|
-
c(this, "marks"), c(this, "nodes"),
|
|
189
|
+
constructor(t) {
|
|
190
|
+
c(this, "marks"), c(this, "nodes"), t || (t = K), this.marks = t.marks || [], this.nodes = t.nodes || [];
|
|
191
191
|
}
|
|
192
|
-
addNode(
|
|
193
|
-
this.nodes[
|
|
192
|
+
addNode(t, e) {
|
|
193
|
+
this.nodes[t] = e;
|
|
194
194
|
}
|
|
195
|
-
addMark(
|
|
196
|
-
this.marks[
|
|
195
|
+
addMark(t, e) {
|
|
196
|
+
this.marks[t] = e;
|
|
197
197
|
}
|
|
198
|
-
render(
|
|
199
|
-
if (
|
|
200
|
-
let
|
|
201
|
-
return
|
|
202
|
-
|
|
203
|
-
}),
|
|
198
|
+
render(t) {
|
|
199
|
+
if (t && t.content && Array.isArray(t.content)) {
|
|
200
|
+
let e = "";
|
|
201
|
+
return t.content.forEach((s) => {
|
|
202
|
+
e += this.renderNode(s);
|
|
203
|
+
}), e;
|
|
204
204
|
}
|
|
205
205
|
return console.warn("The render method must receive an object with a content field, which is an array"), "";
|
|
206
206
|
}
|
|
207
|
-
renderNode(
|
|
208
|
-
const
|
|
209
|
-
|
|
207
|
+
renderNode(t) {
|
|
208
|
+
const e = [];
|
|
209
|
+
t.marks && t.marks.forEach((r) => {
|
|
210
210
|
const o = this.getMatchingMark(r);
|
|
211
|
-
o &&
|
|
211
|
+
o && e.push(this.renderOpeningTag(o.tag));
|
|
212
212
|
});
|
|
213
|
-
const s = this.getMatchingNode(
|
|
214
|
-
return s && s.tag &&
|
|
215
|
-
|
|
216
|
-
}) :
|
|
213
|
+
const s = this.getMatchingNode(t);
|
|
214
|
+
return s && s.tag && e.push(this.renderOpeningTag(s.tag)), t.content ? t.content.forEach((r) => {
|
|
215
|
+
e.push(this.renderNode(r));
|
|
216
|
+
}) : 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) => {
|
|
217
217
|
const o = this.getMatchingMark(r);
|
|
218
|
-
o &&
|
|
219
|
-
}),
|
|
218
|
+
o && e.push(this.renderClosingTag(o.tag));
|
|
219
|
+
}), e.join("");
|
|
220
220
|
}
|
|
221
|
-
renderTag(
|
|
222
|
-
return
|
|
221
|
+
renderTag(t, e) {
|
|
222
|
+
return t.constructor === String ? `<${t}${e}>` : t.map((s) => {
|
|
223
223
|
if (s.constructor === String)
|
|
224
|
-
return `<${s}${
|
|
224
|
+
return `<${s}${e}>`;
|
|
225
225
|
{
|
|
226
226
|
let r = `<${s.tag}`;
|
|
227
227
|
if (s.attrs)
|
|
@@ -229,92 +229,92 @@ class g {
|
|
|
229
229
|
const i = s.attrs[o];
|
|
230
230
|
i !== null && (r += ` ${o}="${i}"`);
|
|
231
231
|
}
|
|
232
|
-
return `${r}${
|
|
232
|
+
return `${r}${e}>`;
|
|
233
233
|
}
|
|
234
234
|
}).join("");
|
|
235
235
|
}
|
|
236
|
-
renderOpeningTag(
|
|
237
|
-
return this.renderTag(
|
|
236
|
+
renderOpeningTag(t) {
|
|
237
|
+
return this.renderTag(t, "");
|
|
238
238
|
}
|
|
239
|
-
renderClosingTag(
|
|
240
|
-
return
|
|
239
|
+
renderClosingTag(t) {
|
|
240
|
+
return t.constructor === String ? `</${t}>` : t.slice(0).reverse().map((e) => e.constructor === String ? `</${e}>` : `</${e.tag}>`).join("");
|
|
241
241
|
}
|
|
242
|
-
getMatchingNode(
|
|
243
|
-
const
|
|
244
|
-
if (typeof
|
|
245
|
-
return t
|
|
242
|
+
getMatchingNode(t) {
|
|
243
|
+
const e = this.nodes[t.type];
|
|
244
|
+
if (typeof e == "function")
|
|
245
|
+
return e(t);
|
|
246
246
|
}
|
|
247
|
-
getMatchingMark(
|
|
248
|
-
const
|
|
249
|
-
if (typeof
|
|
250
|
-
return t
|
|
247
|
+
getMatchingMark(t) {
|
|
248
|
+
const e = this.marks[t.type];
|
|
249
|
+
if (typeof e == "function")
|
|
250
|
+
return e(t);
|
|
251
251
|
}
|
|
252
252
|
}
|
|
253
253
|
class T {
|
|
254
254
|
constructor() {
|
|
255
|
-
c(this, "isCDNUrl", (
|
|
256
|
-
per_page:
|
|
255
|
+
c(this, "isCDNUrl", (t = "") => t.indexOf("/cdn/") > -1), c(this, "getOptionsPage", (t, e = 25, s = 1) => __spreadProps(__spreadValues({}, t), {
|
|
256
|
+
per_page: e,
|
|
257
257
|
page: s
|
|
258
|
-
})), c(this, "delay", (
|
|
259
|
-
const s = Math.abs(
|
|
260
|
-
return this.arrayFrom(s, (o, i) => i * r +
|
|
261
|
-
}), c(this, "asyncMap", async (
|
|
258
|
+
})), 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) => {
|
|
259
|
+
const s = Math.abs(e - t) || 0, r = t < e ? 1 : -1;
|
|
260
|
+
return this.arrayFrom(s, (o, i) => i * r + t);
|
|
261
|
+
}), c(this, "asyncMap", async (t, e) => Promise.all(t.map(e))), c(this, "flatMap", (t = [], e) => t.map(e).reduce((s, r) => [...s, ...r], []));
|
|
262
262
|
}
|
|
263
|
-
stringify(
|
|
263
|
+
stringify(t, e, s) {
|
|
264
264
|
const r = [];
|
|
265
|
-
for (const o in
|
|
266
|
-
if (!Object.prototype.hasOwnProperty.call(
|
|
265
|
+
for (const o in t) {
|
|
266
|
+
if (!Object.prototype.hasOwnProperty.call(t, o))
|
|
267
267
|
continue;
|
|
268
|
-
const i =
|
|
268
|
+
const i = t[o], a = s ? "" : encodeURIComponent(o);
|
|
269
269
|
let l;
|
|
270
|
-
typeof i == "object" ? l = this.stringify(i,
|
|
270
|
+
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);
|
|
271
271
|
}
|
|
272
272
|
return r.join("&");
|
|
273
273
|
}
|
|
274
274
|
}
|
|
275
275
|
class G {
|
|
276
|
-
constructor(
|
|
277
|
-
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 =
|
|
276
|
+
constructor(t) {
|
|
277
|
+
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 = false, this.url = "", this.parameters = {};
|
|
278
278
|
}
|
|
279
|
-
get(
|
|
280
|
-
return this.url =
|
|
279
|
+
get(t, e) {
|
|
280
|
+
return this.url = t, this.parameters = e, this._methodHandler("get");
|
|
281
281
|
}
|
|
282
|
-
post(
|
|
283
|
-
return this.url =
|
|
282
|
+
post(t, e) {
|
|
283
|
+
return this.url = t, this.parameters = e, this._methodHandler("post");
|
|
284
284
|
}
|
|
285
|
-
put(
|
|
286
|
-
return this.url =
|
|
285
|
+
put(t, e) {
|
|
286
|
+
return this.url = t, this.parameters = e, this._methodHandler("put");
|
|
287
287
|
}
|
|
288
|
-
delete(
|
|
289
|
-
return this.url =
|
|
288
|
+
delete(t, e) {
|
|
289
|
+
return this.url = t, this.parameters = e, this._methodHandler("delete");
|
|
290
290
|
}
|
|
291
|
-
async _responseHandler(
|
|
292
|
-
const
|
|
291
|
+
async _responseHandler(t) {
|
|
292
|
+
const e = [], s = {
|
|
293
293
|
data: {},
|
|
294
294
|
headers: {},
|
|
295
295
|
status: 0,
|
|
296
296
|
statusText: ""
|
|
297
297
|
};
|
|
298
|
-
|
|
298
|
+
t.status !== 204 && await t.json().then((r) => {
|
|
299
299
|
s.data = r;
|
|
300
300
|
});
|
|
301
|
-
for (const r of
|
|
302
|
-
|
|
303
|
-
return s.headers = __spreadValues({},
|
|
301
|
+
for (const r of t.headers.entries())
|
|
302
|
+
e[r[0]] = r[1];
|
|
303
|
+
return s.headers = __spreadValues({}, e), s.status = t.status, s.statusText = t.statusText, s;
|
|
304
304
|
}
|
|
305
|
-
async _methodHandler(
|
|
306
|
-
let
|
|
307
|
-
if (
|
|
305
|
+
async _methodHandler(t) {
|
|
306
|
+
let e = `${this.baseURL}${this.url}`, s = null;
|
|
307
|
+
if (t === "get") {
|
|
308
308
|
const l = new T();
|
|
309
|
-
|
|
309
|
+
e = `${this.baseURL}${this.url}?${l.stringify(this.parameters)}`;
|
|
310
310
|
} else
|
|
311
311
|
s = JSON.stringify(this.parameters);
|
|
312
|
-
const r = new URL(
|
|
312
|
+
const r = new URL(e), o = new AbortController(), { signal: i } = o;
|
|
313
313
|
let a;
|
|
314
314
|
this.timeout && (a = setTimeout(() => o.abort(), this.timeout));
|
|
315
315
|
try {
|
|
316
316
|
const l = await this.fetch(`${r}`, {
|
|
317
|
-
method:
|
|
317
|
+
method: t,
|
|
318
318
|
headers: this.headers,
|
|
319
319
|
body: s,
|
|
320
320
|
signal: i
|
|
@@ -331,15 +331,15 @@ class G {
|
|
|
331
331
|
eject() {
|
|
332
332
|
this.ejectInterceptor = true;
|
|
333
333
|
}
|
|
334
|
-
_statusHandler(
|
|
335
|
-
const
|
|
334
|
+
_statusHandler(t) {
|
|
335
|
+
const e = /20[0-6]/g;
|
|
336
336
|
return new Promise((s, r) => {
|
|
337
|
-
if (
|
|
338
|
-
return s(
|
|
337
|
+
if (e.test(`${t.status}`))
|
|
338
|
+
return s(t);
|
|
339
339
|
const o = {
|
|
340
|
-
message: new Error(
|
|
341
|
-
status:
|
|
342
|
-
response:
|
|
340
|
+
message: new Error(t.statusText),
|
|
341
|
+
status: t.status,
|
|
342
|
+
response: t.data.error || t.data.slug
|
|
343
343
|
};
|
|
344
344
|
r(o);
|
|
345
345
|
});
|
|
@@ -348,70 +348,70 @@ class G {
|
|
|
348
348
|
let p = {};
|
|
349
349
|
const d = {};
|
|
350
350
|
class W {
|
|
351
|
-
constructor(
|
|
352
|
-
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"), !
|
|
353
|
-
const o =
|
|
354
|
-
|
|
351
|
+
constructor(t, e) {
|
|
352
|
+
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) {
|
|
353
|
+
const o = t.region ? `-${t.region}` : "", i = t.https === false ? "http" : "https";
|
|
354
|
+
t.oauthToken ? e = `${i}://api${o}.storyblok.com/v1` : e = `${i}://api${o}.storyblok.com/v2`;
|
|
355
355
|
}
|
|
356
356
|
const s = new Headers();
|
|
357
357
|
s.set("Content-Type", "application/json"), s.set("Accept", "application/json"), s.forEach((o, i) => {
|
|
358
|
-
|
|
358
|
+
t.headers && t.headers[i] && s.set(i, t.headers[i]);
|
|
359
359
|
});
|
|
360
360
|
let r = 5;
|
|
361
|
-
|
|
362
|
-
baseURL:
|
|
363
|
-
timeout:
|
|
361
|
+
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 = false, this.client = new G({
|
|
362
|
+
baseURL: e,
|
|
363
|
+
timeout: t.timeout || 0,
|
|
364
364
|
headers: s,
|
|
365
|
-
responseInterceptor:
|
|
366
|
-
fetch:
|
|
365
|
+
responseInterceptor: t.responseInterceptor,
|
|
366
|
+
fetch: t.fetch
|
|
367
367
|
});
|
|
368
368
|
}
|
|
369
|
-
setComponentResolver(
|
|
370
|
-
this.richTextResolver.addNode("blok", (
|
|
369
|
+
setComponentResolver(t) {
|
|
370
|
+
this.richTextResolver.addNode("blok", (e) => {
|
|
371
371
|
let s = "";
|
|
372
|
-
return
|
|
373
|
-
s +=
|
|
372
|
+
return e.attrs.body.forEach((r) => {
|
|
373
|
+
s += t(r.component, r);
|
|
374
374
|
}), {
|
|
375
375
|
html: s
|
|
376
376
|
};
|
|
377
377
|
});
|
|
378
378
|
}
|
|
379
|
-
parseParams(
|
|
380
|
-
return
|
|
379
|
+
parseParams(t) {
|
|
380
|
+
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;
|
|
381
381
|
}
|
|
382
|
-
factoryParamOptions(
|
|
383
|
-
return this.helpers.isCDNUrl(
|
|
382
|
+
factoryParamOptions(t, e) {
|
|
383
|
+
return this.helpers.isCDNUrl(t) ? this.parseParams(e) : e;
|
|
384
384
|
}
|
|
385
|
-
makeRequest(
|
|
386
|
-
const o = this.factoryParamOptions(
|
|
387
|
-
return this.cacheResponse(
|
|
385
|
+
makeRequest(t, e, s, r) {
|
|
386
|
+
const o = this.factoryParamOptions(t, this.helpers.getOptionsPage(e, s, r));
|
|
387
|
+
return this.cacheResponse(t, o);
|
|
388
388
|
}
|
|
389
|
-
get(
|
|
390
|
-
|
|
391
|
-
const s = `/${
|
|
389
|
+
get(t, e) {
|
|
390
|
+
e || (e = {});
|
|
391
|
+
const s = `/${t}`, r = this.factoryParamOptions(s, e);
|
|
392
392
|
return this.cacheResponse(s, r);
|
|
393
393
|
}
|
|
394
|
-
async getAll(
|
|
395
|
-
const r = (
|
|
394
|
+
async getAll(t, e, s) {
|
|
395
|
+
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(this.helpers.range(l, u), (m) => this.makeRequest(o, e, r, m + 1));
|
|
396
396
|
return this.helpers.flatMap([h, ...f], (m) => Object.values(m.data[a]));
|
|
397
397
|
}
|
|
398
|
-
post(
|
|
399
|
-
const s = `/${
|
|
400
|
-
return Promise.resolve(this.throttle("post", s,
|
|
398
|
+
post(t, e) {
|
|
399
|
+
const s = `/${t}`;
|
|
400
|
+
return Promise.resolve(this.throttle("post", s, e));
|
|
401
401
|
}
|
|
402
|
-
put(
|
|
403
|
-
const s = `/${
|
|
404
|
-
return Promise.resolve(this.throttle("put", s,
|
|
402
|
+
put(t, e) {
|
|
403
|
+
const s = `/${t}`;
|
|
404
|
+
return Promise.resolve(this.throttle("put", s, e));
|
|
405
405
|
}
|
|
406
|
-
delete(
|
|
407
|
-
const s = `/${
|
|
408
|
-
return Promise.resolve(this.throttle("delete", s,
|
|
406
|
+
delete(t, e) {
|
|
407
|
+
const s = `/${t}`;
|
|
408
|
+
return Promise.resolve(this.throttle("delete", s, e));
|
|
409
409
|
}
|
|
410
|
-
getStories(
|
|
411
|
-
return this.get("cdn/stories",
|
|
410
|
+
getStories(t) {
|
|
411
|
+
return this.get("cdn/stories", t);
|
|
412
412
|
}
|
|
413
|
-
getStory(
|
|
414
|
-
return this.get(`cdn/stories/${
|
|
413
|
+
getStory(t, e) {
|
|
414
|
+
return this.get(`cdn/stories/${t}`, e);
|
|
415
415
|
}
|
|
416
416
|
getToken() {
|
|
417
417
|
return this.accessToken;
|
|
@@ -419,26 +419,26 @@ class W {
|
|
|
419
419
|
ejectInterceptor() {
|
|
420
420
|
this.client.eject();
|
|
421
421
|
}
|
|
422
|
-
_cleanCopy(
|
|
423
|
-
return JSON.parse(JSON.stringify(
|
|
422
|
+
_cleanCopy(t) {
|
|
423
|
+
return JSON.parse(JSON.stringify(t));
|
|
424
424
|
}
|
|
425
|
-
_insertLinks(
|
|
426
|
-
const s = e
|
|
425
|
+
_insertLinks(t, e) {
|
|
426
|
+
const s = t[e];
|
|
427
427
|
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]));
|
|
428
428
|
}
|
|
429
|
-
_insertRelations(
|
|
430
|
-
if (s.indexOf(`${
|
|
431
|
-
if (typeof e
|
|
432
|
-
this.relations[e
|
|
433
|
-
else if (e
|
|
429
|
+
_insertRelations(t, e, s) {
|
|
430
|
+
if (s.indexOf(`${t.component}.${e}`) > -1) {
|
|
431
|
+
if (typeof t[e] == "string")
|
|
432
|
+
this.relations[t[e]] && (t[e] = this._cleanCopy(this.relations[t[e]]));
|
|
433
|
+
else if (t[e] && t[e].constructor === Array) {
|
|
434
434
|
const r = [];
|
|
435
|
-
e
|
|
435
|
+
t[e].forEach((o) => {
|
|
436
436
|
this.relations[o] && r.push(this._cleanCopy(this.relations[o]));
|
|
437
|
-
}), e
|
|
437
|
+
}), t[e] = r;
|
|
438
438
|
}
|
|
439
439
|
}
|
|
440
440
|
}
|
|
441
|
-
iterateTree(
|
|
441
|
+
iterateTree(t, e) {
|
|
442
442
|
const s = (r) => {
|
|
443
443
|
if (r != null) {
|
|
444
444
|
if (r.constructor === Array)
|
|
@@ -448,94 +448,96 @@ class W {
|
|
|
448
448
|
if (r._stopResolving)
|
|
449
449
|
return;
|
|
450
450
|
for (const o in r)
|
|
451
|
-
(r.component && r._uid || r.type === "link") && (this._insertRelations(r, o,
|
|
451
|
+
(r.component && r._uid || r.type === "link") && (this._insertRelations(r, o, e), this._insertLinks(r, o)), s(r[o]);
|
|
452
452
|
}
|
|
453
453
|
}
|
|
454
454
|
};
|
|
455
|
-
s(
|
|
455
|
+
s(t.content);
|
|
456
456
|
}
|
|
457
|
-
async resolveLinks(
|
|
457
|
+
async resolveLinks(t, e) {
|
|
458
458
|
let s = [];
|
|
459
|
-
if (
|
|
460
|
-
const r =
|
|
459
|
+
if (t.link_uuids) {
|
|
460
|
+
const r = t.link_uuids.length, o = [], i = 50;
|
|
461
461
|
for (let a = 0; a < r; a += i) {
|
|
462
462
|
const l = Math.min(r, a + i);
|
|
463
|
-
o.push(
|
|
463
|
+
o.push(t.link_uuids.slice(a, l));
|
|
464
464
|
}
|
|
465
465
|
for (let a = 0; a < o.length; a++)
|
|
466
466
|
(await this.getStories({
|
|
467
467
|
per_page: i,
|
|
468
|
-
language:
|
|
469
|
-
version:
|
|
468
|
+
language: e.language,
|
|
469
|
+
version: e.version,
|
|
470
470
|
by_uuids: o[a].join(",")
|
|
471
471
|
})).data.stories.forEach((l) => {
|
|
472
472
|
s.push(l);
|
|
473
473
|
});
|
|
474
474
|
} else
|
|
475
|
-
s =
|
|
475
|
+
s = t.links;
|
|
476
476
|
s.forEach((r) => {
|
|
477
477
|
this.links[r.uuid] = __spreadProps(__spreadValues({}, r), { _stopResolving: true });
|
|
478
478
|
});
|
|
479
479
|
}
|
|
480
|
-
async resolveRelations(
|
|
480
|
+
async resolveRelations(t, e) {
|
|
481
481
|
let s = [];
|
|
482
|
-
if (
|
|
483
|
-
const r =
|
|
482
|
+
if (t.rel_uuids) {
|
|
483
|
+
const r = t.rel_uuids.length, o = [], i = 50;
|
|
484
484
|
for (let a = 0; a < r; a += i) {
|
|
485
485
|
const l = Math.min(r, a + i);
|
|
486
|
-
o.push(
|
|
486
|
+
o.push(t.rel_uuids.slice(a, l));
|
|
487
487
|
}
|
|
488
488
|
for (let a = 0; a < o.length; a++)
|
|
489
489
|
(await this.getStories({
|
|
490
490
|
per_page: i,
|
|
491
|
-
language:
|
|
492
|
-
version:
|
|
491
|
+
language: e.language,
|
|
492
|
+
version: e.version,
|
|
493
493
|
by_uuids: o[a].join(",")
|
|
494
494
|
})).data.stories.forEach((l) => {
|
|
495
495
|
s.push(l);
|
|
496
496
|
});
|
|
497
497
|
} else
|
|
498
|
-
s =
|
|
498
|
+
s = t.rels;
|
|
499
499
|
s && s.length > 0 && s.forEach((r) => {
|
|
500
500
|
this.relations[r.uuid] = __spreadProps(__spreadValues({}, r), { _stopResolving: true });
|
|
501
501
|
});
|
|
502
502
|
}
|
|
503
|
-
async resolveStories(
|
|
503
|
+
async resolveStories(t, e) {
|
|
504
504
|
var s, r;
|
|
505
505
|
let o = [];
|
|
506
|
-
if (typeof
|
|
506
|
+
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)
|
|
507
507
|
for (const i in this.relations)
|
|
508
508
|
this.iterateTree(this.relations[i], o);
|
|
509
|
-
|
|
509
|
+
t.story ? this.iterateTree(t.story, o) : t.stories.forEach((i) => {
|
|
510
510
|
this.iterateTree(i, o);
|
|
511
511
|
});
|
|
512
512
|
}
|
|
513
|
-
cacheResponse(
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
513
|
+
async cacheResponse(t, e, s) {
|
|
514
|
+
const r = this.helpers.stringify({ url: t, params: e }), o = this.cacheProvider();
|
|
515
|
+
if (this.cache.clear === "auto" && e.version === "draft" && await this.flushCache(), e.version === "published" && t != "/cdn/spaces/me") {
|
|
516
|
+
const i = await o.get(r);
|
|
517
|
+
if (i)
|
|
518
|
+
return Promise.resolve(i);
|
|
519
|
+
}
|
|
520
|
+
return new Promise((i, a) => {
|
|
521
521
|
try {
|
|
522
522
|
(async () => {
|
|
523
523
|
var l;
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
524
|
+
try {
|
|
525
|
+
const h = await this.throttle("get", t, e);
|
|
526
|
+
let u = { data: h.data, headers: h.headers };
|
|
527
|
+
return (l = h.headers) != null && l["per-page"] && (u = Object.assign({}, u, {
|
|
528
|
+
perPage: h.headers["per-page"] ? parseInt(h.headers["per-page"]) : 0,
|
|
529
|
+
total: h.headers["per-page"] ? parseInt(h.headers.total) : 0
|
|
530
|
+
})), 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));
|
|
531
|
+
} catch (h) {
|
|
532
|
+
return a(h);
|
|
533
|
+
}
|
|
532
534
|
})();
|
|
533
535
|
} catch {
|
|
534
536
|
}
|
|
535
537
|
});
|
|
536
538
|
}
|
|
537
|
-
throttledRequest(
|
|
538
|
-
return this.client[
|
|
539
|
+
throttledRequest(t, e, s) {
|
|
540
|
+
return this.client[t](e, s);
|
|
539
541
|
}
|
|
540
542
|
cacheVersions() {
|
|
541
543
|
return d;
|
|
@@ -543,61 +545,68 @@ class W {
|
|
|
543
545
|
cacheVersion() {
|
|
544
546
|
return d[this.accessToken];
|
|
545
547
|
}
|
|
546
|
-
setCacheVersion(
|
|
547
|
-
this.accessToken && (d[this.accessToken] =
|
|
548
|
+
setCacheVersion(t) {
|
|
549
|
+
this.accessToken && (d[this.accessToken] = t);
|
|
548
550
|
}
|
|
549
551
|
cacheProvider() {
|
|
550
552
|
switch (this.cache.type) {
|
|
551
553
|
case "memory":
|
|
552
554
|
return {
|
|
553
|
-
get(
|
|
554
|
-
return p[
|
|
555
|
+
get(t) {
|
|
556
|
+
return Promise.resolve(p[t]);
|
|
555
557
|
},
|
|
556
558
|
getAll() {
|
|
557
|
-
return p;
|
|
559
|
+
return Promise.resolve(p);
|
|
558
560
|
},
|
|
559
|
-
set(
|
|
560
|
-
p[
|
|
561
|
+
set(t, e) {
|
|
562
|
+
return p[t] = e, Promise.resolve(void 0);
|
|
561
563
|
},
|
|
562
564
|
flush() {
|
|
563
|
-
p = {};
|
|
565
|
+
return p = {}, Promise.resolve(void 0);
|
|
564
566
|
}
|
|
565
567
|
};
|
|
568
|
+
case "custom":
|
|
569
|
+
if (this.cache.custom)
|
|
570
|
+
return this.cache.custom;
|
|
566
571
|
default:
|
|
567
572
|
return {
|
|
568
573
|
get() {
|
|
574
|
+
return Promise.resolve(void 0);
|
|
569
575
|
},
|
|
570
576
|
getAll() {
|
|
577
|
+
return Promise.resolve(void 0);
|
|
571
578
|
},
|
|
572
579
|
set() {
|
|
580
|
+
return Promise.resolve(void 0);
|
|
573
581
|
},
|
|
574
582
|
flush() {
|
|
583
|
+
return Promise.resolve(void 0);
|
|
575
584
|
}
|
|
576
585
|
};
|
|
577
586
|
}
|
|
578
587
|
}
|
|
579
|
-
flushCache() {
|
|
580
|
-
return this.cacheProvider().flush(), this;
|
|
588
|
+
async flushCache() {
|
|
589
|
+
return await this.cacheProvider().flush(), this;
|
|
581
590
|
}
|
|
582
591
|
}
|
|
583
592
|
const X = (n = {}) => {
|
|
584
|
-
const { apiOptions:
|
|
585
|
-
if (!
|
|
593
|
+
const { apiOptions: t } = n;
|
|
594
|
+
if (!t.accessToken) {
|
|
586
595
|
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");
|
|
587
596
|
return;
|
|
588
597
|
}
|
|
589
|
-
return { storyblokApi: new W(
|
|
598
|
+
return { storyblokApi: new W(t) };
|
|
590
599
|
}, Z = (n) => {
|
|
591
600
|
if (typeof n != "object" || typeof n._editable > "u")
|
|
592
601
|
return {};
|
|
593
|
-
const
|
|
602
|
+
const t = JSON.parse(n._editable.replace(/^<!--#storyblok#/, "").replace(/-->$/, ""));
|
|
594
603
|
return {
|
|
595
|
-
"data-blok-c": JSON.stringify(
|
|
596
|
-
"data-blok-uid":
|
|
604
|
+
"data-blok-c": JSON.stringify(t),
|
|
605
|
+
"data-blok-uid": t.id + "-" + t.uid
|
|
597
606
|
};
|
|
598
607
|
};
|
|
599
608
|
let y;
|
|
600
|
-
const R = "https://app.storyblok.com/f/storyblok-v2-latest.js",
|
|
609
|
+
const R = "https://app.storyblok.com/f/storyblok-v2-latest.js", tt = (n, t, e = {}) => {
|
|
601
610
|
if (!(typeof window > "u")) {
|
|
602
611
|
if (typeof window.storyblokRegisterEvent > "u") {
|
|
603
612
|
console.error("Storyblok Bridge is disabled. Please enable it to use it. Read https://github.com/storyblok/storyblok-js");
|
|
@@ -608,41 +617,41 @@ const R = "https://app.storyblok.com/f/storyblok-v2-latest.js", ee = (n, e, t =
|
|
|
608
617
|
return;
|
|
609
618
|
}
|
|
610
619
|
window.storyblokRegisterEvent(() => {
|
|
611
|
-
new window.StoryblokBridge(
|
|
612
|
-
r.action === "input" && r.story.id === n ?
|
|
620
|
+
new window.StoryblokBridge(e).on(["input", "published", "change"], (r) => {
|
|
621
|
+
r.action === "input" && r.story.id === n ? t(r.story) : (r.action === "change" || r.action === "published") && r.storyId === n && window.location.reload();
|
|
613
622
|
});
|
|
614
623
|
});
|
|
615
624
|
}
|
|
616
|
-
},
|
|
625
|
+
}, et = (n = {}) => {
|
|
617
626
|
const {
|
|
618
|
-
bridge:
|
|
619
|
-
accessToken:
|
|
627
|
+
bridge: t,
|
|
628
|
+
accessToken: e,
|
|
620
629
|
use: s = [],
|
|
621
630
|
apiOptions: r = {},
|
|
622
631
|
richText: o = {}
|
|
623
632
|
} = n;
|
|
624
|
-
r.accessToken = r.accessToken ||
|
|
625
|
-
const i = { bridge:
|
|
633
|
+
r.accessToken = r.accessToken || e;
|
|
634
|
+
const i = { bridge: t, apiOptions: r };
|
|
626
635
|
let a = {};
|
|
627
636
|
return s.forEach((l) => {
|
|
628
637
|
a = __spreadValues(__spreadValues({}, a), l(i));
|
|
629
|
-
}),
|
|
630
|
-
}, _ = (n,
|
|
631
|
-
n.addNode("blok", (
|
|
638
|
+
}), t !== false && w(R), y = new g(o.schema), o.resolver && _(y, o.resolver), a;
|
|
639
|
+
}, _ = (n, t) => {
|
|
640
|
+
n.addNode("blok", (e) => {
|
|
632
641
|
let s = "";
|
|
633
|
-
return
|
|
634
|
-
s +=
|
|
642
|
+
return e.attrs.body.forEach((r) => {
|
|
643
|
+
s += t(r.component, r);
|
|
635
644
|
}), {
|
|
636
645
|
html: s
|
|
637
646
|
};
|
|
638
647
|
});
|
|
639
|
-
},
|
|
640
|
-
let s =
|
|
648
|
+
}, st = (n, t, e) => {
|
|
649
|
+
let s = e || y;
|
|
641
650
|
if (!s) {
|
|
642
651
|
console.error("Please initialize the Storyblok SDK before calling the renderRichText function");
|
|
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
|
};
|
|
@@ -674,7 +683,7 @@ const useStoryblok = (slug, apiOptions = {}, bridgeOptions = {}) => {
|
|
|
674
683
|
const { data } = await storyblokApiInstance.get(`cdn/stories/${slug}`, apiOptions);
|
|
675
684
|
setStory(data.story);
|
|
676
685
|
if (isBridgeEnable && data.story.id) {
|
|
677
|
-
|
|
686
|
+
tt(data.story.id, (story2) => setStory(story2), bridgeOptions);
|
|
678
687
|
}
|
|
679
688
|
}
|
|
680
689
|
initStory();
|
|
@@ -689,7 +698,7 @@ const useStoryblokState = (initialStory = null, bridgeOptions = {}) => {
|
|
|
689
698
|
}
|
|
690
699
|
useEffect(() => {
|
|
691
700
|
setStory(initialStory);
|
|
692
|
-
|
|
701
|
+
tt(story.id, (newStory) => setStory(newStory), bridgeOptions);
|
|
693
702
|
}, [initialStory]);
|
|
694
703
|
return story;
|
|
695
704
|
};
|
|
@@ -709,8 +718,8 @@ const getComponent = (componentKey) => {
|
|
|
709
718
|
return componentsMap[componentKey];
|
|
710
719
|
};
|
|
711
720
|
const storyblokInit = (pluginOptions = {}) => {
|
|
712
|
-
const { storyblokApi } =
|
|
721
|
+
const { storyblokApi } = et(pluginOptions);
|
|
713
722
|
storyblokApiInstance = storyblokApi;
|
|
714
723
|
componentsMap = pluginOptions.components;
|
|
715
724
|
};
|
|
716
|
-
export { g as RichTextResolver, K as RichTextSchema, StoryblokComponent, X as apiPlugin, getComponent, useStoryblokApi as getStoryblokApi,
|
|
725
|
+
export { g as RichTextResolver, K as RichTextSchema, StoryblokComponent, X as apiPlugin, getComponent, useStoryblokApi as getStoryblokApi, tt as registerStoryblokBridge, st as renderRichText, Z as storyblokEditable, storyblokInit, useStoryblok, useStoryblokApi, tt as useStoryblokBridge, useStoryblokState };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@storyblok/react",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.12",
|
|
4
4
|
"description": "SDK to integrate Storyblok into your project using React.",
|
|
5
5
|
"main": "./dist/storyblok-react.js",
|
|
6
6
|
"module": "./dist/storyblok-react.mjs",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"prepublishOnly": "npm run build && cp ../README.md ./"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@storyblok/js": "^2.0.
|
|
27
|
+
"@storyblok/js": "^2.0.15"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@babel/core": "^7.20.12",
|