@storyblok/react 2.0.1 → 2.0.3
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 +104 -100
- 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 Ce=Object.defineProperty;var T=Object.getOwnPropertySymbols;var H=Object.prototype.hasOwnProperty,q=Object.prototype.propertyIsEnumerable;var D=(l,u,p)=>u in l?Ce(l,u,{enumerable:!0,configurable:!0,writable:!0,value:p}):l[u]=p,J=(l,u)=>{for(var p in u||(u={}))H.call(u,p)&&D(l,p,u[p]);if(T)for(var p of T(u))q.call(u,p)&&D(l,p,u[p]);return l};var V=(l,u)=>{var p={};for(var g in l)H.call(l,g)&&u.indexOf(g)<0&&(p[g]=l[g]);if(l!=null&&T)for(var g of T(l))u.indexOf(g)<0&&q.call(l,g)&&(p[g]=l[g]);return p};function p(o){return o&&typeof o=="object"&&"default"in o?o:{default:o}}var g=p(u),F=Object.defineProperty,z=Object.defineProperties,Y=Object.getOwnPropertyDescriptors,j=Object.getOwnPropertySymbols,G=Object.prototype.hasOwnProperty,Q=Object.prototype.propertyIsEnumerable,$=(o,e,t)=>e in o?F(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t,y=(o,e)=>{for(var t in e||(e={}))G.call(e,t)&&$(o,t,e[t]);if(j)for(var t of j(e))Q.call(e,t)&&$(o,t,e[t]);return o},R=(o,e)=>z(o,Y(e));let C=!1;const I=[],W=o=>new Promise((e,t)=>{if(typeof window=="undefined"||(window.storyblokRegisterEvent=s=>{if(window.location===window.parent.location){console.warn("You are not in Draft Mode or in the Visual Editor.");return}C?s():I.push(s)},document.getElementById("storyblok-javascript-bridge")))return;const r=document.createElement("script");r.async=!0,r.src=o,r.id="storyblok-javascript-bridge",r.onerror=s=>t(s),r.onload=s=>{I.forEach(n=>n()),C=!0,e(s)},document.getElementsByTagName("head")[0].appendChild(r)});var X=Object.defineProperty,Z=(o,e,t)=>e in o?X(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t,h=(o,e,t)=>(Z(o,typeof e!="symbol"?e+"":e,t),t);function x(o){return!(o!==o||o===1/0||o===-1/0)}function K(o,e,t){if(!x(e))throw new TypeError("Expected `limit` to be a finite number");if(!x(t))throw new TypeError("Expected `interval` to be a finite number");const r=[];let s=[],n=0;const a=function(){n++;const c=setTimeout(function(){n--,r.length>0&&a(),s=s.filter(function(f){return f!==c})},t);s.indexOf(c)<0&&s.push(c);const d=r.shift();d.resolve(o.apply(d.self,d.args))},i=function(...c){const d=this;return new Promise(function(f,P){r.push({resolve:f,reject:P,args:c,self:d}),n<e&&a()})};return i.abort=function(){s.forEach(clearTimeout),s=[],r.forEach(function(c){c.reject(function(){Error.call(this,"Throttled function aborted"),this.name="AbortError"})}),r.length=0},i}const ee=function(o,e){const t={};for(const r in o){const s=o[r];e.indexOf(r)>-1&&s!==null&&(t[r]=s)}return t},te=o=>o==="email",re=()=>({singleTag:"hr"}),se=()=>({tag:"blockquote"}),oe=()=>({tag:"ul"}),ne=o=>({tag:["pre",{tag:"code",attrs:o.attrs}]}),ie=()=>({singleTag:"br"}),ae=o=>({tag:`h${o.attrs.level}`}),le=o=>({singleTag:[{tag:"img",attrs:ee(o.attrs,["src","alt","title"])}]}),ce=()=>({tag:"li"}),he=()=>({tag:"ol"}),ue=()=>({tag:"p"}),de=()=>({tag:"b"}),pe=()=>({tag:"strike"}),fe=()=>({tag:"u"}),ge=()=>({tag:"strong"}),ye=()=>({tag:"code"}),me=()=>({tag:"i"}),be=o=>{const e=y({},o.attrs),{linktype:t="url"}=o.attrs;return te(t)&&(e.href=`mailto:${e.href}`),e.anchor&&(e.href=`${e.href}#${e.anchor}`,delete e.anchor),{tag:[{tag:"a",attrs:e}]}},ke=o=>({tag:[{tag:"span",attrs:o.attrs}]}),A={nodes:{horizontal_rule:re,blockquote:se,bullet_list:oe,code_block:ne,hard_break:ie,heading:ae,image:le,list_item:ce,ordered_list:he,paragraph:ue},marks:{bold:de,strike:pe,underline:fe,strong:ge,code:ye,italic:me,link:be,styled:ke}},ve=function(o){const e={"&":"&","<":"<",">":">",'"':""","'":"'"},t=/[&<>"']/g,r=RegExp(t.source);return o&&r.test(o)?o.replace(t,s=>e[s]):o};class b{constructor(e){h(this,"marks"),h(this,"nodes"),e||(e=A),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(r=>{t+=this.renderNode(r)}),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(s=>{const n=this.getMatchingMark(s);n&&t.push(this.renderOpeningTag(n.tag))});const r=this.getMatchingNode(e);return r&&r.tag&&t.push(this.renderOpeningTag(r.tag)),e.content?e.content.forEach(s=>{t.push(this.renderNode(s))}):e.text?t.push(ve(e.text)):r&&r.singleTag?t.push(this.renderTag(r.singleTag," /")):r&&r.html&&t.push(r.html),r&&r.tag&&t.push(this.renderClosingTag(r.tag)),e.marks&&e.marks.slice(0).reverse().forEach(s=>{const n=this.getMatchingMark(s);n&&t.push(this.renderClosingTag(n.tag))}),t.join("")}renderTag(e,t){return e.constructor===String?`<${e}${t}>`:e.map(r=>{if(r.constructor===String)return`<${r}${t}>`;{let s=`<${r.tag}`;if(r.attrs)for(const n in r.attrs){const a=r.attrs[n];a!==null&&(s+=` ${n}="${a}"`)}return`${s}${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 M{constructor(){h(this,"isCDNUrl",(e="")=>e.indexOf("/cdn/")>-1),h(this,"getOptionsPage",(e,t=25,r=1)=>R(y({},e),{per_page:t,page:r})),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 r=Math.abs(t-e)||0,s=e<t?1:-1;return this.arrayFrom(r,(n,a)=>a*s+e)}),h(this,"asyncMap",async(e,t)=>Promise.all(e.map(t))),h(this,"flatMap",(e=[],t)=>e.map(t).reduce((r,s)=>[...r,...s],[]))}stringify(e,t,r){const s=[];for(const n in e){if(!Object.prototype.hasOwnProperty.call(e,n))continue;const a=e[n],i=r?"":encodeURIComponent(n);let c;typeof a=="object"?c=this.stringify(a,t?t+encodeURIComponent("["+i+"]"):i,Array.isArray(a)):c=(t?t+encodeURIComponent("["+i+"]"):i)+"="+encodeURIComponent(a),s.push(c)}return s.join("&")}}var k=(o=>(o.GET="get",o.DELETE="delete",o.POST="post",o.PUT="put",o))(k||{});class we{constructor(e){h(this,"baseURL"),h(this,"timeout"),h(this,"headers"),h(this,"responseInterceptor"),h(this,"ejectInterceptor"),h(this,"url"),h(this,"parameters"),this.baseURL=e.baseURL,this.timeout=e.timeout?e.timeout*1e3:1e3,this.headers=e.headers||[],this.responseInterceptor=e.responseInterceptor,this.ejectInterceptor=!1,this.url="",this.parameters={}}get(e,t){return this.url=e,this.parameters=t,this._methodHandler(k.GET)}post(e,t){return this.url=e,this.parameters=t,this._methodHandler(k.POST)}put(e,t){return this.url=e,this.parameters=t,this._methodHandler(k.PUT)}delete(e,t){return this.url=e,this.parameters=t,this._methodHandler(k.DELETE)}async _responseHandler(e){const t=[],r={data:{},headers:{},status:0,statusText:""};await e.json().then(s=>{r.data=s});for(const s of e.headers.entries())t[s[0]]=s[1];return r.headers=y({},t),r.status=e.status,r.statusText=e.statusText,r}async _methodHandler(e){const t=new URL(`${this.baseURL}${this.url}`);let r=null;if(e==="get"){const i=new M;t.search=i.stringify(this.parameters)}else r=JSON.stringify(this.parameters);const s=new AbortController,{signal:n}=s,a=setTimeout(()=>s.abort(),this.timeout);try{const i=await fetch(`${t}`,{method:e,headers:this.headers,body:r,signal:n});clearTimeout(a);const c=await this._responseHandler(i);return this.responseInterceptor&&!this.ejectInterceptor?this._statusHandler(this.responseInterceptor(c)):this._statusHandler(c)}catch(i){return i}}eject(){this.ejectInterceptor=!0}_statusHandler(e){if(/20[01]/g.test(`${e.status}`))return e;throw{message:new Error(e.statusText||`status: ${e.status}`),response:e}}}let w={};const m={};class _e{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}`:"",a=e.https===!1?"http":"https";e.oauthToken?t=`${a}://api${n}.storyblok.com/v1`:t=`${a}://api${n}.storyblok.com/v2`}const r=Object.assign({},e.headers);let s=5;e.oauthToken&&(r.Authorization=e.oauthToken,s=3),e.rateLimit&&(s=e.rateLimit),e.richTextSchema?this.richTextResolver=new b(e.richTextSchema):this.richTextResolver=new b,e.componentResolver&&this.setComponentResolver(e.componentResolver),this.maxRetries=e.maxRetries,this.throttle=K(this.throttledRequest,s,1e3),this.accessToken=e.accessToken||"",this.relations={},this.links={},this.cache=e.cache||{clear:"manual"},this.helpers=new M,this.resolveNestedRelations=!1,this.client=new we({baseURL:t,timeout:e.timeout||0,headers:r,responseInterceptor:e.responseInterceptor})}setComponentResolver(e){this.richTextResolver.addNode("blok",t=>{let r="";return t.attrs.body.forEach(s=>{r+=e(s.component,s)}),{html:r}})}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,r,s){const n=this.factoryParamOptions(e,this.helpers.getOptionsPage(t,r,s));return this.cacheResponse(e,n)}get(e,t){t||(t={});const r=`/${e}`,s=this.factoryParamOptions(r,t);return this.cacheResponse(r,s)}async getAll(e,t,r){const s=(t==null?void 0:t.per_page)||25,n=`/${e}`,a=n.split("/"),i=r||a[a.length-1],c=1,d=await this.makeRequest(n,t,s,c),f=d.total?Math.ceil(d.total/s):1,P=await this.helpers.asyncMap(this.helpers.range(c,f),O=>this.makeRequest(n,t,s,O+1));return this.helpers.flatMap([d,...P],O=>Object.values(O.data[i]))}post(e,t){const r=`/${e}`;return Promise.resolve(this.throttle("post",r,t))}put(e,t){const r=`/${e}`;return Promise.resolve(this.throttle("put",r,t))}delete(e,t){const r=`/${e}`;return Promise.resolve(this.throttle("delete",r,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 r=e[t];r&&r.fieldtype=="multilink"&&r.linktype=="story"&&typeof r.id=="string"&&this.links[r.id]?r.story=this._cleanCopy(this.links[r.id]):r&&r.linktype==="story"&&typeof r.uuid=="string"&&this.links[r.uuid]&&(r.story=this._cleanCopy(this.links[r.uuid]))}_insertRelations(e,t,r){if(r.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 s=[];e[t].forEach(n=>{this.relations[n]&&s.push(this._cleanCopy(this.relations[n]))}),e[t]=s}}}iterateTree(e,t){const r=s=>{if(s!=null){if(s.constructor===Array)for(let n=0;n<s.length;n++)r(s[n]);else if(s.constructor===Object){if(s._stopResolving)return;for(const n in s)(s.component&&s._uid||s.type==="link")&&(this._insertRelations(s,n,t),this._insertLinks(s,n)),r(s[n])}}};r(e.content)}async resolveLinks(e,t){let r=[];if(e.link_uuids){const s=e.link_uuids.length,n=[],a=50;for(let i=0;i<s;i+=a){const c=Math.min(s,i+a);n.push(e.link_uuids.slice(i,c))}for(let i=0;i<n.length;i++)(await this.getStories({per_page:a,language:t.language,version:t.version,by_uuids:n[i].join(",")})).data.stories.forEach(c=>{r.push(c)})}else r=e.links;r.forEach(s=>{this.links[s.uuid]=R(y({},s),{_stopResolving:!0})})}async resolveRelations(e,t){let r=[];if(e.rel_uuids){const s=e.rel_uuids.length,n=[],a=50;for(let i=0;i<s;i+=a){const c=Math.min(s,i+a);n.push(e.rel_uuids.slice(i,c))}for(let i=0;i<n.length;i++)(await this.getStories({per_page:a,language:t.language,version:t.version,by_uuids:n[i].join(",")})).data.stories.forEach(c=>{r.push(c)})}else r=e.rels;r&&r.length>0&&r.forEach(s=>{this.relations[s.uuid]=R(y({},s),{_stopResolving:!0})})}async resolveStories(e,t){var r,s;let n=[];if(typeof t.resolve_relations<"u"&&t.resolve_relations.length>0&&(n=t.resolve_relations.split(","),await this.resolveRelations(e,t)),t.resolve_links&&["1","story","url"].indexOf(t.resolve_links)>-1&&(((r=e.links)==null?void 0:r.length)||((s=e.link_uuids)==null?void 0:s.length))&&await this.resolveLinks(e,t),this.resolveNestedRelations)for(const a in this.relations)this.iterateTree(this.relations[a],n);e.story?this.iterateTree(e.story,n):e.stories.forEach(a=>{this.iterateTree(a,n)})}cacheResponse(e,t,r){return new Promise((s,n)=>{const a=this.helpers.stringify({url:e,params:t}),i=this.cacheProvider();if(this.cache.clear==="auto"&&t.version==="draft"&&this.flushCache(),t.version==="published"&&e!="/cdn/spaces/me"){const c=i.get(a);if(c)return s(c)}try{(async()=>{var c;const d=await this.throttle("get",e,t);let f={data:d.data,headers:d.headers};if((c=d.headers)!=null&&c["per-page"]&&(f=Object.assign({},f,{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);(f.data.story||f.data.stories)&&await this.resolveStories(f.data,t),t.version==="published"&&e!="/cdn/spaces/me"&&i.set(a,f),f.data.cv&&t.token&&(t.version=="draft"&&m[t.token]!=f.data.cv&&this.flushCache(),m[t.token]=f.data.cv),s(f)})()}catch{}})}throttledRequest(e,t,r){return this.client[e](t,r)}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 w[e]},getAll(){return w},set(e,t){w[e]=t},flush(){w={}}};default:return{get(){},getAll(){},set(){},flush(){}}}}flushCache(){return this.cacheProvider().flush(),this}}const Te=(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 _e(e)}};var Re=o=>{if(typeof o!="object"||typeof o._editable=="undefined")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 E;const Ee="https://app.storyblok.com/f/storyblok-v2-latest.js",_=(o,e,t={})=>{if(typeof window!="undefined"){if(typeof window.storyblokRegisterEvent=="undefined"){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()})})}},Se=(o={})=>{const{bridge:e,accessToken:t,use:r=[],apiOptions:s={},richText:n={}}=o;s.accessToken=s.accessToken||t;const a={bridge:e,apiOptions:s};let i={};return r.forEach(c=>{i=y(y({},i),c(a))}),e!==!1&&W(Ee),E=new b(n.schema),n.resolver&&N(E,n.resolver),i},N=(o,e)=>{o.addNode("blok",t=>{let r="";return t.attrs.body.forEach(s=>{r+=e(s.component,s)}),{html:r}})},Pe=(o,e,t)=>{let r=t||E;if(!r){console.error("Please initialize the Storyblok SDK before calling the renderRichText function");return}return o===""?"":o?(e&&(r=new b(e.schema),e.resolver&&N(r,e.resolver)),r.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 Oe=Object.defineProperty;var _=Object.getOwnPropertySymbols;var H=Object.prototype.hasOwnProperty,q=Object.prototype.propertyIsEnumerable;var U=(l,u,p)=>u in l?Oe(l,u,{enumerable:!0,configurable:!0,writable:!0,value:p}):l[u]=p,D=(l,u)=>{for(var p in u||(u={}))H.call(u,p)&&U(l,p,u[p]);if(_)for(var p of _(u))q.call(u,p)&&U(l,p,u[p]);return l};var J=(l,u)=>{var p={};for(var g in l)H.call(l,g)&&u.indexOf(g)<0&&(p[g]=l[g]);if(l!=null&&_)for(var g of _(l))u.indexOf(g)<0&&q.call(l,g)&&(p[g]=l[g]);return p};function p(o){return o&&typeof o=="object"&&"default"in o?o:{default:o}}var g=p(u),V=Object.defineProperty,F=Object.defineProperties,z=Object.getOwnPropertyDescriptors,j=Object.getOwnPropertySymbols,Y=Object.prototype.hasOwnProperty,Q=Object.prototype.propertyIsEnumerable,$=(o,e,t)=>e in o?V(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t,y=(o,e)=>{for(var t in e||(e={}))Y.call(e,t)&&$(o,t,e[t]);if(j)for(var t of j(e))Q.call(e,t)&&$(o,t,e[t]);return o},T=(o,e)=>F(o,z(e));let O=!1;const C=[],G=o=>new Promise((e,t)=>{if(typeof window=="undefined"||(window.storyblokRegisterEvent=s=>{if(window.location===window.parent.location){console.warn("You are not in Draft Mode or in the Visual Editor.");return}O?s():C.push(s)},document.getElementById("storyblok-javascript-bridge")))return;const r=document.createElement("script");r.async=!0,r.src=o,r.id="storyblok-javascript-bridge",r.onerror=s=>t(s),r.onload=s=>{C.forEach(n=>n()),O=!0,e(s)},document.getElementsByTagName("head")[0].appendChild(r)});var W=Object.defineProperty,X=(o,e,t)=>e in o?W(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t,h=(o,e,t)=>(X(o,typeof e!="symbol"?e+"":e,t),t);function I(o){return!(o!==o||o===1/0||o===-1/0)}function Z(o,e,t){if(!I(e))throw new TypeError("Expected `limit` to be a finite number");if(!I(t))throw new TypeError("Expected `interval` to be a finite number");const r=[];let s=[],n=0;const a=function(){n++;const c=setTimeout(function(){n--,r.length>0&&a(),s=s.filter(function(f){return f!==c})},t);s.indexOf(c)<0&&s.push(c);const d=r.shift();d.resolve(o.apply(d.self,d.args))},i=function(...c){const d=this;return new Promise(function(f,E){r.push({resolve:f,reject:E,args:c,self:d}),n<e&&a()})};return i.abort=function(){s.forEach(clearTimeout),s=[],r.forEach(function(c){c.reject(function(){Error.call(this,"Throttled function aborted"),this.name="AbortError"})}),r.length=0},i}const K=function(o,e){const t={};for(const r in o){const s=o[r];e.indexOf(r)>-1&&s!==null&&(t[r]=s)}return t},ee=o=>o==="email",te=()=>({singleTag:"hr"}),re=()=>({tag:"blockquote"}),se=()=>({tag:"ul"}),oe=o=>({tag:["pre",{tag:"code",attrs:o.attrs}]}),ne=()=>({singleTag:"br"}),ie=o=>({tag:`h${o.attrs.level}`}),ae=o=>({singleTag:[{tag:"img",attrs:K(o.attrs,["src","alt","title"])}]}),le=()=>({tag:"li"}),ce=()=>({tag:"ol"}),he=()=>({tag:"p"}),ue=()=>({tag:"b"}),de=()=>({tag:"strike"}),pe=()=>({tag:"u"}),fe=()=>({tag:"strong"}),ge=()=>({tag:"code"}),ye=()=>({tag:"i"}),me=o=>{const e=y({},o.attrs),{linktype:t="url"}=o.attrs;return ee(t)&&(e.href=`mailto:${e.href}`),e.anchor&&(e.href=`${e.href}#${e.anchor}`,delete e.anchor),{tag:[{tag:"a",attrs:e}]}},be=o=>({tag:[{tag:"span",attrs:o.attrs}]}),A={nodes:{horizontal_rule:te,blockquote:re,bullet_list:se,code_block:oe,hard_break:ne,heading:ie,image:ae,list_item:le,ordered_list:ce,paragraph:he},marks:{bold:ue,strike:de,underline:pe,strong:fe,code:ge,italic:ye,link:me,styled:be}},ke=function(o){const e={"&":"&","<":"<",">":">",'"':""","'":"'"},t=/[&<>"']/g,r=RegExp(t.source);return o&&r.test(o)?o.replace(t,s=>e[s]):o};class b{constructor(e){h(this,"marks"),h(this,"nodes"),e||(e=A),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(r=>{t+=this.renderNode(r)}),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(s=>{const n=this.getMatchingMark(s);n&&t.push(this.renderOpeningTag(n.tag))});const r=this.getMatchingNode(e);return r&&r.tag&&t.push(this.renderOpeningTag(r.tag)),e.content?e.content.forEach(s=>{t.push(this.renderNode(s))}):e.text?t.push(ke(e.text)):r&&r.singleTag?t.push(this.renderTag(r.singleTag," /")):r&&r.html&&t.push(r.html),r&&r.tag&&t.push(this.renderClosingTag(r.tag)),e.marks&&e.marks.slice(0).reverse().forEach(s=>{const n=this.getMatchingMark(s);n&&t.push(this.renderClosingTag(n.tag))}),t.join("")}renderTag(e,t){return e.constructor===String?`<${e}${t}>`:e.map(r=>{if(r.constructor===String)return`<${r}${t}>`;{let s=`<${r.tag}`;if(r.attrs)for(const n in r.attrs){const a=r.attrs[n];a!==null&&(s+=` ${n}="${a}"`)}return`${s}${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 x{constructor(){h(this,"isCDNUrl",(e="")=>e.indexOf("/cdn/")>-1),h(this,"getOptionsPage",(e,t=25,r=1)=>T(y({},e),{per_page:t,page:r})),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 r=Math.abs(t-e)||0,s=e<t?1:-1;return this.arrayFrom(r,(n,a)=>a*s+e)}),h(this,"asyncMap",async(e,t)=>Promise.all(e.map(t))),h(this,"flatMap",(e=[],t)=>e.map(t).reduce((r,s)=>[...r,...s],[]))}stringify(e,t,r){const s=[];for(const n in e){if(!Object.prototype.hasOwnProperty.call(e,n))continue;const a=e[n],i=r?"":encodeURIComponent(n);let c;typeof a=="object"?c=this.stringify(a,t?t+encodeURIComponent("["+i+"]"):i,Array.isArray(a)):c=(t?t+encodeURIComponent("["+i+"]"):i)+"="+encodeURIComponent(a),s.push(c)}return s.join("&")}}class ve{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.timeout?e.timeout*1e3:1e3,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=[],r={data:{},headers:{},status:0,statusText:""};await e.json().then(s=>{r.data=s});for(const s of e.headers.entries())t[s[0]]=s[1];return r.headers=y({},t),r.status=e.status,r.statusText=e.statusText,r}async _methodHandler(e){const t=new URL(`${this.baseURL}${this.url}`);let r=null;if(e==="get"){const i=new x;t.search=i.stringify(this.parameters)}else r=JSON.stringify(this.parameters);const s=new AbortController,{signal:n}=s,a=setTimeout(()=>s.abort(),this.timeout);try{const i=await this.fetch(`${t}`,{method:e,headers:this.headers,body:r,signal:n});clearTimeout(a);const c=await this._responseHandler(i);return this.responseInterceptor&&!this.ejectInterceptor?this._statusHandler(this.responseInterceptor(c)):this._statusHandler(c)}catch(i){return i}}eject(){this.ejectInterceptor=!0}_statusHandler(e){if(/20[01]/g.test(`${e.status}`))return e;throw{message:new Error(e.statusText||`status: ${e.status}`),response:e}}}let v={};const m={};class we{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}`:"",a=e.https===!1?"http":"https";e.oauthToken?t=`${a}://api${n}.storyblok.com/v1`:t=`${a}://api${n}.storyblok.com/v2`}const r=new Headers;r.set("Content-Type","application/json"),r.set("Accept","application/json"),r.forEach((n,a)=>{e.headers&&e.headers[a]&&r.set(a,e.headers[a])});let s=5;e.oauthToken&&(r.set("Authorization",e.oauthToken),s=3),e.rateLimit&&(s=e.rateLimit),e.richTextSchema?this.richTextResolver=new b(e.richTextSchema):this.richTextResolver=new b,e.componentResolver&&this.setComponentResolver(e.componentResolver),this.maxRetries=e.maxRetries,this.throttle=Z(this.throttledRequest,s,1e3),this.accessToken=e.accessToken||"",this.relations={},this.links={},this.cache=e.cache||{clear:"manual"},this.helpers=new x,this.resolveNestedRelations=!1,this.client=new ve({baseURL:t,timeout:e.timeout||0,headers:r,responseInterceptor:e.responseInterceptor,fetch:e.fetch})}setComponentResolver(e){this.richTextResolver.addNode("blok",t=>{let r="";return t.attrs.body.forEach(s=>{r+=e(s.component,s)}),{html:r}})}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,r,s){const n=this.factoryParamOptions(e,this.helpers.getOptionsPage(t,r,s));return this.cacheResponse(e,n)}get(e,t){t||(t={});const r=`/${e}`,s=this.factoryParamOptions(r,t);return this.cacheResponse(r,s)}async getAll(e,t,r){const s=(t==null?void 0:t.per_page)||25,n=`/${e}`,a=n.split("/"),i=r||a[a.length-1],c=1,d=await this.makeRequest(n,t,s,c),f=d.total?Math.ceil(d.total/s):1,E=await this.helpers.asyncMap(this.helpers.range(c,f),P=>this.makeRequest(n,t,s,P+1));return this.helpers.flatMap([d,...E],P=>Object.values(P.data[i]))}post(e,t){const r=`/${e}`;return Promise.resolve(this.throttle("post",r,t))}put(e,t){const r=`/${e}`;return Promise.resolve(this.throttle("put",r,t))}delete(e,t){const r=`/${e}`;return Promise.resolve(this.throttle("delete",r,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 r=e[t];r&&r.fieldtype=="multilink"&&r.linktype=="story"&&typeof r.id=="string"&&this.links[r.id]?r.story=this._cleanCopy(this.links[r.id]):r&&r.linktype==="story"&&typeof r.uuid=="string"&&this.links[r.uuid]&&(r.story=this._cleanCopy(this.links[r.uuid]))}_insertRelations(e,t,r){if(r.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 s=[];e[t].forEach(n=>{this.relations[n]&&s.push(this._cleanCopy(this.relations[n]))}),e[t]=s}}}iterateTree(e,t){const r=s=>{if(s!=null){if(s.constructor===Array)for(let n=0;n<s.length;n++)r(s[n]);else if(s.constructor===Object){if(s._stopResolving)return;for(const n in s)(s.component&&s._uid||s.type==="link")&&(this._insertRelations(s,n,t),this._insertLinks(s,n)),r(s[n])}}};r(e.content)}async resolveLinks(e,t){let r=[];if(e.link_uuids){const s=e.link_uuids.length,n=[],a=50;for(let i=0;i<s;i+=a){const c=Math.min(s,i+a);n.push(e.link_uuids.slice(i,c))}for(let i=0;i<n.length;i++)(await this.getStories({per_page:a,language:t.language,version:t.version,by_uuids:n[i].join(",")})).data.stories.forEach(c=>{r.push(c)})}else r=e.links;r.forEach(s=>{this.links[s.uuid]=T(y({},s),{_stopResolving:!0})})}async resolveRelations(e,t){let r=[];if(e.rel_uuids){const s=e.rel_uuids.length,n=[],a=50;for(let i=0;i<s;i+=a){const c=Math.min(s,i+a);n.push(e.rel_uuids.slice(i,c))}for(let i=0;i<n.length;i++)(await this.getStories({per_page:a,language:t.language,version:t.version,by_uuids:n[i].join(",")})).data.stories.forEach(c=>{r.push(c)})}else r=e.rels;r&&r.length>0&&r.forEach(s=>{this.relations[s.uuid]=T(y({},s),{_stopResolving:!0})})}async resolveStories(e,t){var r,s;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&&(((r=e.links)==null?void 0:r.length)||((s=e.link_uuids)==null?void 0:s.length))&&await this.resolveLinks(e,t),this.resolveNestedRelations)for(const a in this.relations)this.iterateTree(this.relations[a],n);e.story?this.iterateTree(e.story,n):e.stories.forEach(a=>{this.iterateTree(a,n)})}cacheResponse(e,t,r){return new Promise((s,n)=>{const a=this.helpers.stringify({url:e,params:t}),i=this.cacheProvider();if(this.cache.clear==="auto"&&t.version==="draft"&&this.flushCache(),t.version==="published"&&e!="/cdn/spaces/me"){const c=i.get(a);if(c)return s(c)}try{(async()=>{var c;const d=await this.throttle("get",e,t);let f={data:d.data,headers:d.headers};if((c=d.headers)!=null&&c["per-page"]&&(f=Object.assign({},f,{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);(f.data.story||f.data.stories)&&await this.resolveStories(f.data,t),t.version==="published"&&e!="/cdn/spaces/me"&&i.set(a,f),f.data.cv&&t.token&&(t.version=="draft"&&m[t.token]!=f.data.cv&&this.flushCache(),m[t.token]=f.data.cv),s(f)})()}catch{}})}throttledRequest(e,t,r){return this.client[e](t,r)}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 v[e]},getAll(){return v},set(e,t){v[e]=t},flush(){v={}}};default:return{get(){},getAll(){},set(){},flush(){}}}}flushCache(){return this.cacheProvider().flush(),this}}const _e=(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 we(e)}};var Te=o=>{if(typeof o!="object"||typeof o._editable=="undefined")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 Re="https://app.storyblok.com/f/storyblok-v2-latest.js",w=(o,e,t={})=>{if(typeof window!="undefined"){if(typeof window.storyblokRegisterEvent=="undefined"){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()})})}},Se=(o={})=>{const{bridge:e,accessToken:t,use:r=[],apiOptions:s={},richText:n={}}=o;s.accessToken=s.accessToken||t;const a={bridge:e,apiOptions:s};let i={};return r.forEach(c=>{i=y(y({},i),c(a))}),e!==!1&&G(Re),R=new b(n.schema),n.resolver&&M(R,n.resolver),i},M=(o,e)=>{o.addNode("blok",t=>{let r="";return t.attrs.body.forEach(s=>{r+=e(s.component,s)}),{html:r}})},Ee=(o,e,t)=>{let r=t||R;if(!r){console.error("Please initialize the Storyblok SDK before calling the renderRichText function");return}return o===""?"":o?(e&&(r=new b(e.schema),e.resolver&&M(r,e.resolver)),r.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`),"")},N=u.forwardRef((r,t)=>{var s=r,{blok:o}=s,e=J(s,["blok"]);if(!o)return console.error("Please provide a 'blok' property to the StoryblokComponent"),g.default.createElement("div",null,"Please provide a blok property to the StoryblokComponent");const n=B(o.component);return n?g.default.createElement(n,D({ref:t,blok:o},e)):g.default.createElement("div",null)});N.displayName="StoryblokComponent";const Pe=(o,e={},t={})=>{let[r,s]=u.useState({});if(!k)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 a(){const{data:i}=await k.get(`cdn/stories/${o}`,e);s(i.story),n&&i.story.id&&w(i.story.id,c=>s(c),t)}a()},[o]),r},je=(o=null,e={})=>{let[t,r]=u.useState(o);return!(typeof window!="undefined"&&typeof window.storyblokRegisterEvent!="undefined")||!o?o:(u.useEffect(()=>{r(o),w(t.id,n=>r(n),e)},[o]),t)};let k=null;const L=()=>(k||console.error("You can't use getStoryblokApi if you're not loading apiPlugin."),k);let S={};const B=o=>S[o]?S[o]:(console.error(`Component ${o} doesn't exist.`),!1),$e=(o={})=>{const{storyblokApi:e}=Se(o);k=e,S=o.components};l.RichTextResolver=b,l.RichTextSchema=A,l.StoryblokComponent=N,l.apiPlugin=_e,l.getComponent=B,l.getStoryblokApi=L,l.registerStoryblokBridge=w,l.renderRichText=Ee,l.storyblokEditable=Te,l.storyblokInit=$e,l.useStoryblok=Pe,l.useStoryblokApi=L,l.useStoryblokBridge=w,l.useStoryblokState=je,Object.defineProperties(l,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
|
package/dist/storyblok-react.mjs
CHANGED
|
@@ -78,37 +78,37 @@ const loadBridge = (src) => {
|
|
|
78
78
|
});
|
|
79
79
|
};
|
|
80
80
|
var m = Object.defineProperty;
|
|
81
|
-
var
|
|
82
|
-
var l = (
|
|
83
|
-
function
|
|
84
|
-
return !(
|
|
81
|
+
var T = (c, t, e) => t in c ? m(c, t, { enumerable: true, configurable: true, writable: true, value: e }) : c[t] = e;
|
|
82
|
+
var l = (c, t, e) => (T(c, typeof t != "symbol" ? t + "" : t, e), e);
|
|
83
|
+
function k(c) {
|
|
84
|
+
return !(c !== c || c === 1 / 0 || c === -1 / 0);
|
|
85
85
|
}
|
|
86
|
-
function _(
|
|
87
|
-
if (!
|
|
86
|
+
function _(c, t, e) {
|
|
87
|
+
if (!k(t))
|
|
88
88
|
throw new TypeError("Expected `limit` to be a finite number");
|
|
89
|
-
if (!
|
|
89
|
+
if (!k(e))
|
|
90
90
|
throw new TypeError("Expected `interval` to be a finite number");
|
|
91
91
|
const s = [];
|
|
92
92
|
let r = [], n = 0;
|
|
93
|
-
const
|
|
93
|
+
const i = function() {
|
|
94
94
|
n++;
|
|
95
95
|
const a = setTimeout(function() {
|
|
96
|
-
n--, s.length > 0 &&
|
|
96
|
+
n--, s.length > 0 && i(), r = r.filter(function(u) {
|
|
97
97
|
return u !== a;
|
|
98
98
|
});
|
|
99
99
|
}, e);
|
|
100
100
|
r.indexOf(a) < 0 && r.push(a);
|
|
101
101
|
const h = s.shift();
|
|
102
|
-
h.resolve(
|
|
102
|
+
h.resolve(c.apply(h.self, h.args));
|
|
103
103
|
}, o = function(...a) {
|
|
104
104
|
const h = this;
|
|
105
|
-
return new Promise(function(u,
|
|
105
|
+
return new Promise(function(u, p) {
|
|
106
106
|
s.push({
|
|
107
107
|
resolve: u,
|
|
108
|
-
reject:
|
|
108
|
+
reject: p,
|
|
109
109
|
args: a,
|
|
110
110
|
self: h
|
|
111
|
-
}), n < t &&
|
|
111
|
+
}), n < t && i();
|
|
112
112
|
});
|
|
113
113
|
};
|
|
114
114
|
return o.abort = function() {
|
|
@@ -119,41 +119,41 @@ function _(i, t, e) {
|
|
|
119
119
|
}), s.length = 0;
|
|
120
120
|
}, o;
|
|
121
121
|
}
|
|
122
|
-
const
|
|
122
|
+
const R = function(c, t) {
|
|
123
123
|
const e = {};
|
|
124
|
-
for (const s in
|
|
125
|
-
const r =
|
|
124
|
+
for (const s in c) {
|
|
125
|
+
const r = c[s];
|
|
126
126
|
t.indexOf(s) > -1 && r !== null && (e[s] = r);
|
|
127
127
|
}
|
|
128
128
|
return e;
|
|
129
|
-
},
|
|
129
|
+
}, b = (c) => c === "email", w = () => ({
|
|
130
130
|
singleTag: "hr"
|
|
131
|
-
}),
|
|
131
|
+
}), $ = () => ({
|
|
132
132
|
tag: "blockquote"
|
|
133
133
|
}), x = () => ({
|
|
134
134
|
tag: "ul"
|
|
135
|
-
}),
|
|
135
|
+
}), E = (c) => ({
|
|
136
136
|
tag: [
|
|
137
137
|
"pre",
|
|
138
138
|
{
|
|
139
139
|
tag: "code",
|
|
140
|
-
attrs:
|
|
140
|
+
attrs: c.attrs
|
|
141
141
|
}
|
|
142
142
|
]
|
|
143
|
-
}),
|
|
143
|
+
}), P = () => ({
|
|
144
144
|
singleTag: "br"
|
|
145
|
-
}), S = (
|
|
146
|
-
tag: `h${
|
|
147
|
-
}), C = (
|
|
145
|
+
}), S = (c) => ({
|
|
146
|
+
tag: `h${c.attrs.level}`
|
|
147
|
+
}), C = (c) => ({
|
|
148
148
|
singleTag: [
|
|
149
149
|
{
|
|
150
150
|
tag: "img",
|
|
151
|
-
attrs:
|
|
151
|
+
attrs: R(c.attrs, ["src", "alt", "title"])
|
|
152
152
|
}
|
|
153
153
|
]
|
|
154
|
-
}),
|
|
154
|
+
}), O = () => ({
|
|
155
155
|
tag: "li"
|
|
156
|
-
}),
|
|
156
|
+
}), M = () => ({
|
|
157
157
|
tag: "ol"
|
|
158
158
|
}), H = () => ({
|
|
159
159
|
tag: "p"
|
|
@@ -161,17 +161,17 @@ const b = function(i, t) {
|
|
|
161
161
|
tag: "b"
|
|
162
162
|
}), I = () => ({
|
|
163
163
|
tag: "strike"
|
|
164
|
-
}),
|
|
164
|
+
}), L = () => ({
|
|
165
165
|
tag: "u"
|
|
166
166
|
}), N = () => ({
|
|
167
167
|
tag: "strong"
|
|
168
|
-
}),
|
|
168
|
+
}), U = () => ({
|
|
169
169
|
tag: "code"
|
|
170
|
-
}),
|
|
170
|
+
}), q = () => ({
|
|
171
171
|
tag: "i"
|
|
172
|
-
}),
|
|
173
|
-
const t = __spreadValues2({},
|
|
174
|
-
return
|
|
172
|
+
}), z = (c) => {
|
|
173
|
+
const t = __spreadValues2({}, c.attrs), { linktype: e = "url" } = c.attrs;
|
|
174
|
+
return b(e) && (t.href = `mailto:${t.href}`), t.anchor && (t.href = `${t.href}#${t.anchor}`, delete t.anchor), {
|
|
175
175
|
tag: [
|
|
176
176
|
{
|
|
177
177
|
tag: "a",
|
|
@@ -179,37 +179,37 @@ const b = function(i, t) {
|
|
|
179
179
|
}
|
|
180
180
|
]
|
|
181
181
|
};
|
|
182
|
-
},
|
|
182
|
+
}, j = (c) => ({
|
|
183
183
|
tag: [
|
|
184
184
|
{
|
|
185
185
|
tag: "span",
|
|
186
|
-
attrs:
|
|
186
|
+
attrs: c.attrs
|
|
187
187
|
}
|
|
188
188
|
]
|
|
189
|
-
}),
|
|
189
|
+
}), F = {
|
|
190
190
|
nodes: {
|
|
191
191
|
horizontal_rule: w,
|
|
192
|
-
blockquote:
|
|
192
|
+
blockquote: $,
|
|
193
193
|
bullet_list: x,
|
|
194
|
-
code_block:
|
|
195
|
-
hard_break:
|
|
194
|
+
code_block: E,
|
|
195
|
+
hard_break: P,
|
|
196
196
|
heading: S,
|
|
197
197
|
image: C,
|
|
198
|
-
list_item:
|
|
199
|
-
ordered_list:
|
|
198
|
+
list_item: O,
|
|
199
|
+
ordered_list: M,
|
|
200
200
|
paragraph: H
|
|
201
201
|
},
|
|
202
202
|
marks: {
|
|
203
203
|
bold: A,
|
|
204
204
|
strike: I,
|
|
205
|
-
underline:
|
|
205
|
+
underline: L,
|
|
206
206
|
strong: N,
|
|
207
|
-
code:
|
|
208
|
-
italic:
|
|
209
|
-
link:
|
|
210
|
-
styled:
|
|
207
|
+
code: U,
|
|
208
|
+
italic: q,
|
|
209
|
+
link: z,
|
|
210
|
+
styled: j
|
|
211
211
|
}
|
|
212
|
-
},
|
|
212
|
+
}, V = function(c) {
|
|
213
213
|
const t = {
|
|
214
214
|
"&": "&",
|
|
215
215
|
"<": "<",
|
|
@@ -217,13 +217,13 @@ const b = function(i, t) {
|
|
|
217
217
|
'"': """,
|
|
218
218
|
"'": "'"
|
|
219
219
|
}, e = /[&<>"']/g, s = RegExp(e.source);
|
|
220
|
-
return
|
|
220
|
+
return c && s.test(c) ? c.replace(e, (r) => t[r]) : c;
|
|
221
221
|
};
|
|
222
|
-
class
|
|
222
|
+
class y {
|
|
223
223
|
constructor(t) {
|
|
224
224
|
l(this, "marks");
|
|
225
225
|
l(this, "nodes");
|
|
226
|
-
t || (t =
|
|
226
|
+
t || (t = F), this.marks = t.marks || [], this.nodes = t.nodes || [];
|
|
227
227
|
}
|
|
228
228
|
addNode(t, e) {
|
|
229
229
|
this.nodes[t] = e;
|
|
@@ -249,7 +249,7 @@ class v {
|
|
|
249
249
|
const s = this.getMatchingNode(t);
|
|
250
250
|
return s && s.tag && e.push(this.renderOpeningTag(s.tag)), t.content ? t.content.forEach((r) => {
|
|
251
251
|
e.push(this.renderNode(r));
|
|
252
|
-
}) : t.text ? e.push(
|
|
252
|
+
}) : t.text ? e.push(V(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) => {
|
|
253
253
|
const n = this.getMatchingMark(r);
|
|
254
254
|
n && e.push(this.renderClosingTag(n.tag));
|
|
255
255
|
}), e.join("");
|
|
@@ -261,9 +261,9 @@ class v {
|
|
|
261
261
|
{
|
|
262
262
|
let n = `<${r.tag}`;
|
|
263
263
|
if (r.attrs)
|
|
264
|
-
for (const
|
|
265
|
-
const o = r.attrs[
|
|
266
|
-
o !== null && (n += ` ${
|
|
264
|
+
for (const i in r.attrs) {
|
|
265
|
+
const o = r.attrs[i];
|
|
266
|
+
o !== null && (n += ` ${i}="${o}"`);
|
|
267
267
|
}
|
|
268
268
|
return `${n}${e}>`;
|
|
269
269
|
}
|
|
@@ -286,7 +286,7 @@ class v {
|
|
|
286
286
|
return e(t);
|
|
287
287
|
}
|
|
288
288
|
}
|
|
289
|
-
class
|
|
289
|
+
class v {
|
|
290
290
|
constructor() {
|
|
291
291
|
l(this, "isCDNUrl", (t = "") => t.indexOf("/cdn/") > -1);
|
|
292
292
|
l(this, "getOptionsPage", (t, e = 25, s = 1) => __spreadProps(__spreadValues2({}, t), {
|
|
@@ -297,7 +297,7 @@ class T {
|
|
|
297
297
|
l(this, "arrayFrom", (t = 0, e) => [...Array(t)].map(e));
|
|
298
298
|
l(this, "range", (t = 0, e = t) => {
|
|
299
299
|
const s = Math.abs(e - t) || 0, r = t < e ? 1 : -1;
|
|
300
|
-
return this.arrayFrom(s, (n,
|
|
300
|
+
return this.arrayFrom(s, (n, i) => i * r + t);
|
|
301
301
|
});
|
|
302
302
|
l(this, "asyncMap", async (t, e) => Promise.all(t.map(e)));
|
|
303
303
|
l(this, "flatMap", (t = [], e) => t.map(e).reduce((s, r) => [...s, ...r], []));
|
|
@@ -307,36 +307,36 @@ class T {
|
|
|
307
307
|
for (const n in t) {
|
|
308
308
|
if (!Object.prototype.hasOwnProperty.call(t, n))
|
|
309
309
|
continue;
|
|
310
|
-
const
|
|
310
|
+
const i = t[n], o = s ? "" : encodeURIComponent(n);
|
|
311
311
|
let a;
|
|
312
|
-
typeof
|
|
312
|
+
typeof i == "object" ? a = this.stringify(i, e ? e + encodeURIComponent("[" + o + "]") : o, Array.isArray(i)) : a = (e ? e + encodeURIComponent("[" + o + "]") : o) + "=" + encodeURIComponent(i), r.push(a);
|
|
313
313
|
}
|
|
314
314
|
return r.join("&");
|
|
315
315
|
}
|
|
316
316
|
}
|
|
317
|
-
|
|
318
|
-
class G {
|
|
317
|
+
class J {
|
|
319
318
|
constructor(t) {
|
|
320
319
|
l(this, "baseURL");
|
|
321
320
|
l(this, "timeout");
|
|
322
321
|
l(this, "headers");
|
|
323
322
|
l(this, "responseInterceptor");
|
|
323
|
+
l(this, "fetch");
|
|
324
324
|
l(this, "ejectInterceptor");
|
|
325
325
|
l(this, "url");
|
|
326
326
|
l(this, "parameters");
|
|
327
|
-
this.baseURL = t.baseURL, this.timeout = t.timeout ? t.timeout * 1e3 : 1e3, this.
|
|
327
|
+
this.baseURL = t.baseURL, this.headers = t.headers || [], this.timeout = t.timeout ? t.timeout * 1e3 : 1e3, this.responseInterceptor = t.responseInterceptor, this.fetch = (...e) => t.fetch ? t.fetch(...e) : fetch(...e), this.ejectInterceptor = false, this.url = "", this.parameters = {};
|
|
328
328
|
}
|
|
329
329
|
get(t, e) {
|
|
330
|
-
return this.url = t, this.parameters = e, this._methodHandler(
|
|
330
|
+
return this.url = t, this.parameters = e, this._methodHandler("get");
|
|
331
331
|
}
|
|
332
332
|
post(t, e) {
|
|
333
|
-
return this.url = t, this.parameters = e, this._methodHandler(
|
|
333
|
+
return this.url = t, this.parameters = e, this._methodHandler("post");
|
|
334
334
|
}
|
|
335
335
|
put(t, e) {
|
|
336
|
-
return this.url = t, this.parameters = e, this._methodHandler(
|
|
336
|
+
return this.url = t, this.parameters = e, this._methodHandler("put");
|
|
337
337
|
}
|
|
338
338
|
delete(t, e) {
|
|
339
|
-
return this.url = t, this.parameters = e, this._methodHandler(
|
|
339
|
+
return this.url = t, this.parameters = e, this._methodHandler("delete");
|
|
340
340
|
}
|
|
341
341
|
async _responseHandler(t) {
|
|
342
342
|
const e = [], s = {
|
|
@@ -356,19 +356,19 @@ class G {
|
|
|
356
356
|
const e = new URL(`${this.baseURL}${this.url}`);
|
|
357
357
|
let s = null;
|
|
358
358
|
if (t === "get") {
|
|
359
|
-
const o = new
|
|
359
|
+
const o = new v();
|
|
360
360
|
e.search = o.stringify(this.parameters);
|
|
361
361
|
} else
|
|
362
362
|
s = JSON.stringify(this.parameters);
|
|
363
|
-
const r = new AbortController(), { signal: n } = r,
|
|
363
|
+
const r = new AbortController(), { signal: n } = r, i = setTimeout(() => r.abort(), this.timeout);
|
|
364
364
|
try {
|
|
365
|
-
const o = await fetch(`${e}`, {
|
|
365
|
+
const o = await this.fetch(`${e}`, {
|
|
366
366
|
method: t,
|
|
367
367
|
headers: this.headers,
|
|
368
368
|
body: s,
|
|
369
369
|
signal: n
|
|
370
370
|
});
|
|
371
|
-
clearTimeout(
|
|
371
|
+
clearTimeout(i);
|
|
372
372
|
const a = await this._responseHandler(o);
|
|
373
373
|
return this.responseInterceptor && !this.ejectInterceptor ? this._statusHandler(this.responseInterceptor(a)) : this._statusHandler(a);
|
|
374
374
|
} catch (o) {
|
|
@@ -387,7 +387,7 @@ class G {
|
|
|
387
387
|
};
|
|
388
388
|
}
|
|
389
389
|
}
|
|
390
|
-
let
|
|
390
|
+
let f = {};
|
|
391
391
|
const d = {};
|
|
392
392
|
class Q {
|
|
393
393
|
constructor(t, e) {
|
|
@@ -402,16 +402,20 @@ class Q {
|
|
|
402
402
|
l(this, "richTextResolver");
|
|
403
403
|
l(this, "resolveNestedRelations");
|
|
404
404
|
if (!e) {
|
|
405
|
-
const n = t.region ? `-${t.region}` : "",
|
|
406
|
-
t.oauthToken ? e = `${
|
|
405
|
+
const n = t.region ? `-${t.region}` : "", i = t.https === false ? "http" : "https";
|
|
406
|
+
t.oauthToken ? e = `${i}://api${n}.storyblok.com/v1` : e = `${i}://api${n}.storyblok.com/v2`;
|
|
407
407
|
}
|
|
408
|
-
const s =
|
|
408
|
+
const s = new Headers();
|
|
409
|
+
s.set("Content-Type", "application/json"), s.set("Accept", "application/json"), s.forEach((n, i) => {
|
|
410
|
+
t.headers && t.headers[i] && s.set(i, t.headers[i]);
|
|
411
|
+
});
|
|
409
412
|
let r = 5;
|
|
410
|
-
t.oauthToken && (s.Authorization
|
|
413
|
+
t.oauthToken && (s.set("Authorization", t.oauthToken), r = 3), t.rateLimit && (r = t.rateLimit), t.richTextSchema ? this.richTextResolver = new y(t.richTextSchema) : this.richTextResolver = new y(), t.componentResolver && this.setComponentResolver(t.componentResolver), this.maxRetries = t.maxRetries, this.throttle = _(this.throttledRequest, r, 1e3), this.accessToken = t.accessToken || "", this.relations = {}, this.links = {}, this.cache = t.cache || { clear: "manual" }, this.helpers = new v(), this.resolveNestedRelations = false, this.client = new J({
|
|
411
414
|
baseURL: e,
|
|
412
415
|
timeout: t.timeout || 0,
|
|
413
416
|
headers: s,
|
|
414
|
-
responseInterceptor: t.responseInterceptor
|
|
417
|
+
responseInterceptor: t.responseInterceptor,
|
|
418
|
+
fetch: t.fetch
|
|
415
419
|
});
|
|
416
420
|
}
|
|
417
421
|
setComponentResolver(t) {
|
|
@@ -440,8 +444,8 @@ class Q {
|
|
|
440
444
|
return this.cacheResponse(s, r);
|
|
441
445
|
}
|
|
442
446
|
async getAll(t, e, s) {
|
|
443
|
-
const r = (e == null ? void 0 : e.per_page) || 25, n = `/${t}`,
|
|
444
|
-
return this.helpers.flatMap([h, ...
|
|
447
|
+
const r = (e == null ? void 0 : e.per_page) || 25, n = `/${t}`, i = n.split("/"), o = s || i[i.length - 1], a = 1, h = await this.makeRequest(n, e, r, a), u = h.total ? Math.ceil(h.total / r) : 1, p = await this.helpers.asyncMap(this.helpers.range(a, u), (g) => this.makeRequest(n, e, r, g + 1));
|
|
448
|
+
return this.helpers.flatMap([h, ...p], (g) => Object.values(g.data[o]));
|
|
445
449
|
}
|
|
446
450
|
post(t, e) {
|
|
447
451
|
const s = `/${t}`;
|
|
@@ -505,14 +509,14 @@ class Q {
|
|
|
505
509
|
async resolveLinks(t, e) {
|
|
506
510
|
let s = [];
|
|
507
511
|
if (t.link_uuids) {
|
|
508
|
-
const r = t.link_uuids.length, n = [],
|
|
509
|
-
for (let o = 0; o < r; o +=
|
|
510
|
-
const a = Math.min(r, o +
|
|
512
|
+
const r = t.link_uuids.length, n = [], i = 50;
|
|
513
|
+
for (let o = 0; o < r; o += i) {
|
|
514
|
+
const a = Math.min(r, o + i);
|
|
511
515
|
n.push(t.link_uuids.slice(o, a));
|
|
512
516
|
}
|
|
513
517
|
for (let o = 0; o < n.length; o++)
|
|
514
518
|
(await this.getStories({
|
|
515
|
-
per_page:
|
|
519
|
+
per_page: i,
|
|
516
520
|
language: e.language,
|
|
517
521
|
version: e.version,
|
|
518
522
|
by_uuids: n[o].join(",")
|
|
@@ -528,14 +532,14 @@ class Q {
|
|
|
528
532
|
async resolveRelations(t, e) {
|
|
529
533
|
let s = [];
|
|
530
534
|
if (t.rel_uuids) {
|
|
531
|
-
const r = t.rel_uuids.length, n = [],
|
|
532
|
-
for (let o = 0; o < r; o +=
|
|
533
|
-
const a = Math.min(r, o +
|
|
535
|
+
const r = t.rel_uuids.length, n = [], i = 50;
|
|
536
|
+
for (let o = 0; o < r; o += i) {
|
|
537
|
+
const a = Math.min(r, o + i);
|
|
534
538
|
n.push(t.rel_uuids.slice(o, a));
|
|
535
539
|
}
|
|
536
540
|
for (let o = 0; o < n.length; o++)
|
|
537
541
|
(await this.getStories({
|
|
538
|
-
per_page:
|
|
542
|
+
per_page: i,
|
|
539
543
|
language: e.language,
|
|
540
544
|
version: e.version,
|
|
541
545
|
by_uuids: n[o].join(",")
|
|
@@ -551,18 +555,18 @@ class Q {
|
|
|
551
555
|
async resolveStories(t, e) {
|
|
552
556
|
var r, n;
|
|
553
557
|
let s = [];
|
|
554
|
-
if (typeof e.resolve_relations < "u" && e.resolve_relations.length > 0 && (s = e.resolve_relations.split(","), await this.resolveRelations(t, e)), e.resolve_links && ["1", "story", "url"].indexOf(e.resolve_links) > -1 && (((r = t.links) == null ? void 0 : r.length) || ((n = t.link_uuids) == null ? void 0 : n.length)) && await this.resolveLinks(t, e), this.resolveNestedRelations)
|
|
555
|
-
for (const
|
|
556
|
-
this.iterateTree(this.relations[
|
|
557
|
-
t.story ? this.iterateTree(t.story, s) : t.stories.forEach((
|
|
558
|
-
this.iterateTree(
|
|
558
|
+
if (typeof e.resolve_relations < "u" && e.resolve_relations.length > 0 && (typeof e.resolve_relations == "string" && (s = e.resolve_relations.split(",")), await this.resolveRelations(t, e)), e.resolve_links && ["1", "story", "url"].indexOf(e.resolve_links) > -1 && (((r = t.links) == null ? void 0 : r.length) || ((n = t.link_uuids) == null ? void 0 : n.length)) && await this.resolveLinks(t, e), this.resolveNestedRelations)
|
|
559
|
+
for (const i in this.relations)
|
|
560
|
+
this.iterateTree(this.relations[i], s);
|
|
561
|
+
t.story ? this.iterateTree(t.story, s) : t.stories.forEach((i) => {
|
|
562
|
+
this.iterateTree(i, s);
|
|
559
563
|
});
|
|
560
564
|
}
|
|
561
565
|
cacheResponse(t, e, s) {
|
|
562
566
|
return new Promise((r, n) => {
|
|
563
|
-
const
|
|
567
|
+
const i = this.helpers.stringify({ url: t, params: e }), o = this.cacheProvider();
|
|
564
568
|
if (this.cache.clear === "auto" && e.version === "draft" && this.flushCache(), e.version === "published" && t != "/cdn/spaces/me") {
|
|
565
|
-
const a = o.get(
|
|
569
|
+
const a = o.get(i);
|
|
566
570
|
if (a)
|
|
567
571
|
return r(a);
|
|
568
572
|
}
|
|
@@ -576,7 +580,7 @@ class Q {
|
|
|
576
580
|
total: a.headers["per-page"] ? parseInt(a.headers.total) : 0
|
|
577
581
|
})), a.status != 200)
|
|
578
582
|
return n(a);
|
|
579
|
-
(h.data.story || h.data.stories) && await this.resolveStories(h.data, e), e.version === "published" && t != "/cdn/spaces/me" && o.set(
|
|
583
|
+
(h.data.story || h.data.stories) && await this.resolveStories(h.data, e), e.version === "published" && t != "/cdn/spaces/me" && o.set(i, h), h.data.cv && e.token && (e.version == "draft" && d[e.token] != h.data.cv && this.flushCache(), d[e.token] = h.data.cv), r(h);
|
|
580
584
|
})();
|
|
581
585
|
} catch {
|
|
582
586
|
}
|
|
@@ -599,16 +603,16 @@ class Q {
|
|
|
599
603
|
case "memory":
|
|
600
604
|
return {
|
|
601
605
|
get(t) {
|
|
602
|
-
return
|
|
606
|
+
return f[t];
|
|
603
607
|
},
|
|
604
608
|
getAll() {
|
|
605
|
-
return
|
|
609
|
+
return f;
|
|
606
610
|
},
|
|
607
611
|
set(t, e) {
|
|
608
|
-
|
|
612
|
+
f[t] = e;
|
|
609
613
|
},
|
|
610
614
|
flush() {
|
|
611
|
-
|
|
615
|
+
f = {};
|
|
612
616
|
}
|
|
613
617
|
};
|
|
614
618
|
default:
|
|
@@ -689,7 +693,7 @@ const storyblokInit$1 = (pluginOptions = {}) => {
|
|
|
689
693
|
if (bridge !== false) {
|
|
690
694
|
loadBridge(bridgeLatest);
|
|
691
695
|
}
|
|
692
|
-
richTextResolver = new
|
|
696
|
+
richTextResolver = new y(richText.schema);
|
|
693
697
|
if (richText.resolver) {
|
|
694
698
|
setComponentResolver(richTextResolver, richText.resolver);
|
|
695
699
|
}
|
|
@@ -721,7 +725,7 @@ const renderRichText = (data, options, resolverInstance) => {
|
|
|
721
725
|
return "";
|
|
722
726
|
}
|
|
723
727
|
if (options) {
|
|
724
|
-
localResolver = new
|
|
728
|
+
localResolver = new y(options.schema);
|
|
725
729
|
if (options.resolver) {
|
|
726
730
|
setComponentResolver(localResolver, options.resolver);
|
|
727
731
|
}
|
|
@@ -795,4 +799,4 @@ const storyblokInit = (pluginOptions = {}) => {
|
|
|
795
799
|
storyblokApiInstance = storyblokApi;
|
|
796
800
|
componentsMap = pluginOptions.components;
|
|
797
801
|
};
|
|
798
|
-
export {
|
|
802
|
+
export { y as RichTextResolver, F as RichTextSchema, StoryblokComponent, apiFactory as apiPlugin, getComponent, useStoryblokApi as getStoryblokApi, useStoryblokBridge as registerStoryblokBridge, renderRichText, editable as storyblokEditable, storyblokInit, useStoryblok, useStoryblokApi, 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.3",
|
|
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.6"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@babel/core": "^7.20.7",
|