vaderjs 1.3.1 → 1.3.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/images/router.png +0 -0
- package/images/state.png +0 -0
- package/package.json +1 -1
- package/ts.config.json +1 -0
- package/vader-min.js +1 -1
- package/vader.js +257 -414
- package/worker-min.js +1 -1
- package/worker.js +282 -204
|
Binary file
|
package/images/state.png
ADDED
|
Binary file
|
package/package.json
CHANGED
package/ts.config.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
package/vader-min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
let dom=[],states={},worker=new Worker(new URL("./worker.js",import.meta.url));function markdown(e){let t=e.match(/(#+)(.*)/g);return t&&t.forEach((t=>{if(t.includes("/")||t.includes("<")||t.includes(">"))return;let s=t.split("#").length;e=e.replace(t,`<h${s} class="markdown_heading">${t.replace(/#/g,"")}</h${s}>`)})),e=(e=(e=(e=(e=(e=(e=e.replace(/\*\*(.*?)\*\*/g,((e,t)=>`<b class="markdown_bold">${t}</b>`))).replace(/\*(.*?)\*/g,((e,t)=>`<i class="markdown_italic">${t}</i>`))).replace(/`(.*?)`/g,((e,t)=>`<code>${t}</code>`))).replace(/\[([^\]]+)\]\(([^)]+)\)/g,((e,t,s)=>`<a class="markdown_link" href="${s}">${t}</a>`))).replace(/!\[([^\]]+)\]\(([^)]+)\)/g,((e,t,s)=>`<img class="markdown_image" src="${s}" alt="${t}" />`))).split("\n").map(((e,t,s)=>e.match(/^\s*-\s+(.*?)$/gm)?0!==t&&s[t-1].match(/^\s*-\s+(.*?)$/gm)?t!==s.length-1&&s[t+1].match(/^\s*-\s+(.*?)$/gm)?`<li>${e.replace(/^\s*-\s+(.*?)$/gm,"$1")}</li>`:`<li>${e.replace(/^\s*-\s+(.*?)$/gm,"$1")}</li></ul>`:`<ul class="markdown_unordered" style="list-style-type:disc;list-style:inside"><li>${e.replace(/^\s*-\s+(.*?)$/gm,"$1")}</li>`:e)).join("\n")).split("\n").map(((e,t,s)=>e.match(/^\s*\d+\.\s+(.*?)$/gm)?0!==t&&s[t-1].match(/^\s*\d+\.\s+(.*?)$/gm)?t!==s.length-1&&s[t+1].match(/^\s*\d+\.\s+(.*?)$/gm)?`<li>${e.replace(/^\s*\d+\.\s+(.*?)$/gm,"$1")}</li>`:`<li>${e.replace(/^\s*\d+\.\s+(.*?)$/gm,"$1")}</li></ol>`:`<ol class="markdown_ordered" style="list-style-type:decimal;"><li>${e.replace(/^\s*\d+\.\s+(.*?)$/gm,"$1")}</li>`:e)).join("\n")}export const useRef=e=>{const t=document.querySelector(`[ref="${e}"]`);return{current:t,update:e=>{const s=(new DOMParser).parseFromString(e,"text/html").body.firstChild;if(t){!s.isEqualNode(t)&&t.parentNode.replaceChild(s,t)}}}};let components=[];export class Component{constructor(){this.states={},this.name=this.constructor.name,this.executedEffects={},this.storedProps={},this.componentMounted=!1,this.hasMounted=!1,this.$_signal_subscribers=[],this.$_signal_subscribers_ran=[],this.effects={},this.$_useStore_subscribers=[],this.init(),this.Componentcontent=null,this.$_signal_dispatch_event=new CustomEvent("signalDispatch",{detail:{hasUpdated:!1,state:null}}),this.snapshots=[],this.dom=[],this.cfr=!1}adapter(){}init(){this.registerComponent()}registerComponent(){components.push(this)}setState(e,t){this.states[e]=t,this.updateComponent()}unmount(){this.componentMounted=!1,this.componentWillUnmount(),document.querySelector(`[data-component="${this.name}"]`).remove(),document.querySelector(`[data-component="${this.name}"]`)||(components=components.filter((e=>e.name!==this.name)))}componentUpdate(e,t,s){}componentDidMount(){}componentWillUnmount(){}signal=(e,t)=>{let s=!1,[r,n]=this.useState(e,t,(()=>{if(this.$_signal_subscribers.length>0){for(var e=0;e<this.$_signal_subscribers.length;e++)if(!s){if(this.$_signal_subscribers[e].runonce&&this.$_signal_subscribers_ran.includes(this.$_signal_subscribers[e]))break;return this.$_signal_subscribers[e].function(r),void this.$_signal_subscribers_ran.push(this.$_signal_subscribers[e])}}else this.$_signal_dispatch_event.detail.hasUpdated=!0,this.$_signal_dispatch_event.detail.state=r,window.dispatchEvent(this.$_signal_dispatch_event)}));return this.$_signal_subscribe=(e,t)=>{this.$_signal_subscribers.push({function:e,runonce:t})},this.$_signal_cleanup=e=>{this.$_signal_subscribers=this.$_signal_subscribers.filter((t=>t.function!==e))},this.$_signal_dispatch=()=>{for(var e=0;e<this.$_signal_subscribers.length&&(!this.$_signal_subscribers[e].runonce||!this.$_signal_subscribers_ran.includes(this.$_signal_subscribers[e]));e++)this.$_signal_subscribers[e].function(r),this.$_signal_subscribers_ran.push(this.$_signal_subscribers[e])},this.$_signal_get=()=>r,this.$_signal_call=()=>{s=!0,this.$_signal_dispatch()},this.$_signal_set=e=>{n(e)},{subscribe:this.$_signal_subscribe,cleanup:this.$_signal_cleanup,dispatch:this.$_signal_dispatch,call:this.$_signal_call,set:this.$_signal_set,get:this.$_signal_get}};useAuth(e){let t=e.rulesets;if(!t)throw new Error("No rulesets provided");let s=e.user,r={can:e=>{let r=!1;return t.forEach((t=>{t.action===e&&t.condition(s)&&(r=!0)})),r},hasRole:e=>s.role&&s.role.includes(e),canWithRole:(e,t)=>r.can(e)&&r.hasRole(t),assignRule:e=>{t.some((t=>t.action===e.action))||t.push(e)},revokeRule:e=>{t=t.filter((t=>t.action!==e))},canAnyOf:e=>e.some((e=>r.can(e))),canAllOf:e=>e.every((e=>r.can(e))),canGroup:(e,t="any")=>"any"===t?r.canAnyOf(e):r.canAllOf(e)};return r}useReducer(e,t,s){return this.states[e]||(this.states[e]=s),[this.states[e],s=>{this.states[e]=t(this.states[e],s),this.updateComponent()}]}runEffects(){Object.keys(this.effects).forEach((e=>{this.effects[e].forEach((e=>{this.executedEffects[e]||(e(),this.executedEffects[e]=!0)}))}))}useSyncStore(e,t){let[s,r]=this.useState(e,t||localStorage.getItem(`$_vader_${e}`,(t=>{localStorage.setItem(`$_vader_${e}`,JSON.stringify(t)),this.$_useStore_subscribers.forEach((e=>{e(t)}))}))||{});return{getField:e=>s[e],setField:(e,t)=>{const n={...s,[e]:t};r(n)},subscribe:e=>this.$_useStore_subscribers.push(e),clear:e=>{let t=s;delete t[e],r(t)}}}useState(e,t,s=null){return this.states[e]||(this.states[e]=t),[this.states[e],t=>{this.states[e]=t,this.updateComponent(),"function"==typeof s&&s()}]}useRef(e){console.log(this.dom);const t=this.dom[e];return{current:()=>t,update:e=>{const s=(new DOMParser).parseFromString(e,"text/html").body.firstChild;if(t){!s.isEqualNode(t)&&t.parentNode.replaceChild(s,t)}}}}useEffect(e,t){return this.effects[this.name]||(this.effects[this.name]=[]),this.effects[this.name].push(e),t.length>0?t.forEach((e=>{if(e.set)throw new Error("signal found, do not use effect and signals at the same time - signals are more efficient")})):this.hasMounted||(e(),this.hasMounted=!0),{cleanup:()=>{this.effects[this.name]=this.effects[this.name].filter((t=>t!==e))}}}$Function(e){let t=e.name;return t||(t="anonymous"+Math.floor(1e17*Math.random())),window[t]=e,`window.${t}()`}updateComponent(){const e=document.createDocumentFragment();Object.keys(components).forEach((async t=>{const{name:s}=components[t];let r=document.querySelector(`[data-component="${s}"]`),n={name:s,time:(new Date).getTime(),prev_state:this.states,prev_props:this.storedProps,content:r.innerHTML};if(!r)return;const i=await new Function("useState","useEffect","useAuth","useReducer","useSyncStore","signal","rf","props","render","return `"+await this.render()+"`;")(this.useState,this.useEffect,this.useAuth,this.useReducer,this.useSyncStore,this.signal,this.render);if(i!==r.innerHTML){if(this.snapshots.length>0){this.snapshots[this.snapshots.length-1]!==n&&this.snapshots.push(n)}else this.snapshots.push(n);this.componentUpdate(n.prev_state,n.prev_props,n.content),e.appendChild(document.createRange().createContextualFragment(i)),r.innerHTML="",r.appendChild(e),this.runEffects()}}))}validateClassName(e){return/^[a-zA-Z0-9-_]+$/.test(e)}parseHTML(e){const t=(new DOMParser).parseFromString(e,"text/html");console.log(t);return t.documentElement.querySelectorAll("*").forEach((e=>{if("IMG"===e.nodeName){if(!e.hasAttribute("alt")&&!document.documentElement.outerHTML.trim().includes("\x3c!-- #vader-disable_accessibility --\x3e"))throw new SyntaxError(`Image: ${e.outerHTML} missing alt attribute`);if(e.hasAttribute("alt")&&e.getAttribute("alt").length<1&&!document.documentElement.outerHTML.trim().includes("\x3c!-- #vader-disable_accessibility --\x3e"))throw new SyntaxError(`Image: ${e.outerHTML} alt attribute cannot be empty`);if(e.hasAttribute("src")&&!e.getAttribute("src")?.includes("http")||!e.getAttribute("src")?.includes("https")&&!document.documentElement.outerHTML.trim().includes("\x3c!-- #vader-disable_accessibility --\x3e")){let t=e.getAttribute("src");e.setAttribute("aria-hidden","true"),e.setAttribute("hidden","true");let s=window.location.origin+window.location.pathname.replace(/\/[^\/]*$/,"")+"/public/"+e.getAttribute("src"),r=new Image;r.src=s,r.onerror=()=>{throw e.setAttribute("src",t),new Error(`Image: ${e.outerHTML} not found`)},e.setAttribute("src",s),r.onload=()=>{document.querySelectorAll(`img[src="${s}"]`).forEach((e=>{e.setAttribute("src",s),e.removeAttribute("aria-hidden"),e.removeAttribute("hidden")}))}}}else{if(e.hasAttribute("ref")&&(t[e.getAttribute("ref")]=e),"MARKDOWN"===e.nodeName&&(e.innerHTML=markdown(e.innerHTML.replace(/\\n/g,"\n").trim())),e.hasAttribute("class")){if(!document.documentElement.outerHTML.includes("\x3c!-- #vader-allow_class --\x3e"))throw console.warn("you can disable class errors using, \x3c!-- #vader-allow_class --\x3e"),new Error("class attribute is not allowed, please use className instead")}else e.hasAttribute("className")&&(e.setAttribute("class",e.getAttribute("className")),e.removeAttribute("className"));e.hasAttribute("href")&&e.getAttribute("href").startsWith("/")&&!document.documentElement.outerHTML.trim().includes("\x3c!-- #vader-disable_relative-paths --\x3e")&&e.setAttribute("href",`#/${e.getAttribute("href").replace("/","")}`),!e.hasAttribute("src")||e.getAttribute("src").includes("http")||e.getAttribute("src").includes("https")||document.documentElement.outerHTML.includes("\x3c!-- #vader-disable_relative-paths --\x3e")||e.setAttribute("src",`./public/${e.getAttribute("src")}`)}})),e=t.body.innerHTML,this.Componentcontent=e,e.includes("<div data-component")||(e=`<div data-component="${this.name}">${e}</div>`),markdown(e.replace(/\\n/g,"\n").trim())}html(e,...t){let s=setInterval((()=>{document.querySelector(`[data-component="${this.name}"]`)&&(clearInterval(s),this.componentMounted=!0,document.querySelector(`[data-component="${this.name}"]`)?.querySelectorAll("*").forEach((e=>{e.hasAttribute("ref")&&(this.dom[e.getAttribute("ref")]=e)})),this.componentDidMount())}),100),r=document.createElement("script");r.setAttribute("type","text/javascript"),r.setAttribute("data-component-script",this.name);this.dom;if(this.cfr){worker.postMessage({strings:e,args:t,location:window.location.origin+window.location.pathname.replace(/\/[^\/]*$/,"")+"/public/",name:this.name});let s=new Promise(((e,t)=>{worker.onmessage=t=>{if(t.data.error)throw new Error(t.data.error);this.dom;console.log(this.dom);let s=t.data.js,r=t.data.template;const n=this.useState.bind(this),i=this.useEffect.bind(this),a=this.useReducer.bind(this),o=this.useAuth.bind(this),c=this.useSyncStore.bind(this),l=this.signal.bind(this),u=this.$Function.bind(this);let h=this.states;const d=this.useRef.bind(this);new Function("useState","useEffect","useAuth","useReducer","useSyncStore","signal","rf","dom","render","states","useRef",s)(n,i,o,a,c,l,u,this.dom,this.render,this.states,d),e(new Function("useRef","states","return`"+r+"`")(d,h))},worker.onerror=e=>{t(e)}}));return s}{let s="";for(let r=0;r<e.length;r++)s+=e[r],r<t.length&&(s+=t[r]);return s=new Function("useRef",`return \`${s}\``)(useRef),s.trim().startsWith("<body>")||console.warn("You should wrap your html in a body tag, vader may not grab all html!"),this.parseHTML(s)}}async render(e){}}const Vader={Component:Component,useRef:useRef};export const component=e=>new Component;export const rf=(e,t)=>{window[e]=t};let cache={};async function handletemplate(e){let t=(new DOMParser).parseFromString(e,"text/html"),s=t.documentElement.querySelectorAll("*");if(s.length>0)for(var r=0;r<s.length;r++)if("INCLUDE"===s[r].nodeName){if(!s[r].getAttribute("src")||""===s[r].getAttribute("src"))throw new Error("Include tag must have src attribute");let e=s[r].getAttribute("src")?.split("/").pop()?.split(".")[0],n=await include(s[r].getAttribute("src"));n=n.replace(/`/g,"\\`"),cache[s[r].getAttribute("src")]=n,n=new Function(`return \`${n}\`;`)();let i=(new DOMParser).parseFromString(n,"text/html");i.querySelectorAll("include").forEach((e=>{e.remove()})),t.querySelectorAll(e).forEach((e=>{if(e.attributes.length>0)for(var s=0;s<e.attributes.length;s++)i.body.outerHTML=i.body.outerHTML.replace(`{{${e.attributes[s].name}}}`,e.attributes[s].value);if(e.children.length>0&&i.body.querySelector("slot"))for(s=0;s<e.children.length;s++){i.body.querySelectorAll("slot").forEach((t=>{t.getAttribute("id")===e.nodeName.toLowerCase()&&(t.outerHTML=`<div>${e.innerHTML}</div>`)}))}t.body.querySelectorAll("include").forEach((e=>{e.remove()})),t.body.outerHTML=t.body.outerHTML.replace(/`/g,"\\`"),t.body.outerHTML=t.body.outerHTML.replace(e.outerHTML,new Function(`return \`${i.body.outerHTML}\`;`)())}))}return t.body.outerHTML=t.body.outerHTML.replace(/`/g,"\\`"),e=new Function(`return \`${t.body.outerHTML}\`;`)()}export const include=async e=>(!e.startsWith("/")||e.includes("/src/")||document.documentElement.outerHTML.trim().includes("\x3c!-- #vader-disable_relative-paths --\x3e")||(e="/src/"+e),cache[e]?await handletemplate(new Function(`return \`${cache[e]}\`;`)()):fetch(`./${e}`).then((t=>{if(404===t.status)throw new Error(`No file found at ${e}`);return t.text()})).then((async t=>(cache[e]=t,t=await handletemplate(new Function(`return \`${t}\`;`)())))));export default Vader;
|
|
1
|
+
let dom=[],states={},worker=new Worker(new URL("./worker.js",import.meta.url));export const useRef=t=>{const e=document.querySelector(`[ref="${t}"]`);return{current:e,update:t=>{const s=(new DOMParser).parseFromString(t,"text/html").body.firstChild;if(e){!s.isEqualNode(e)&&e.parentNode.replaceChild(s,e)}}}};let components=[];export class Component{constructor(){this.states={},this.name=this.constructor.name,this.executedEffects={},this.storedProps={},this.componentMounted=!1,this.hasMounted=!1,this.$_signal_subscribers=[],this.$_signal_subscribers_ran=[],this.effects={},this.$_useStore_subscribers=[],this.init(),this.Componentcontent=null,this.$_signal_dispatch_event=new CustomEvent("SignalDispatch",{detail:{hasUpdated:!1,state:null}}),this.$_signal_dispatch_cleanup_event=new CustomEvent("Signal_Cleanup_Dispatch",{detail:{state:null,lastState:null}}),this.snapshots=[],this.dom=[],this.cfr=!1}adapter(t){}init(){this.registerComponent()}registerComponent(){components.push(this)}setState(t,e){this.states[t]=e,this.updateComponent()}unmount(){this.componentMounted=!1,this.componentWillUnmount(),document.querySelector(`[data-component="${this.name}"]`).remove(),document.querySelector(`[data-component="${this.name}"]`)||(components=components.filter((t=>t.name!==this.name)))}componentUpdate(t,e,s){}componentDidMount(){}componentWillUnmount(){}signal=(t,e)=>{let s=!1,[n,i]=this.useState(t,e,(()=>{if(this.$_signal_subscribers.length>0){for(var t=0;t<this.$_signal_subscribers.length;t++)if(!s){if(this.$_signal_subscribers[t].runonce&&this.$_signal_subscribers_ran.includes(this.$_signal_subscribers[t]))break;return this.$_signal_subscribers[t].function(n),void this.$_signal_subscribers_ran.push(this.$_signal_subscribers[t])}}else this.$_signal_dispatch_event.detail.hasUpdated=!0,this.$_signal_dispatch_event.detail.state=n,window.dispatchEvent(this.$_signal_dispatch_event)}));return this.$_signal_subscribe=(t,e)=>(this.$_signal_subscribers.push({function:t,runonce:e}),t),this.$_signal_cleanup=t=>{this.lastState=n,this.$_signal_subscribers=this.$_signal_subscribers.filter((e=>e.function!==t)),this.$_signal_dispatch_cleanup_event.detail.state=this.states,this.$_signal_dispatch_cleanup_event.detail.lastState=this.lastState,window.dispatchEvent(this.$_signal_dispatch_event)},this.$_signal_dispatch=()=>{for(var t=0;t<this.$_signal_subscribers.length&&(!this.$_signal_subscribers[t].runonce||!this.$_signal_subscribers_ran.includes(this.$_signal_subscribers[t]));t++)this.$_signal_subscribers[t].function(n),this.$_signal_subscribers_ran.push(this.$_signal_subscribers[t])},this.$_signal_get=()=>n,this.$_signal_call=()=>{s=!0,this.$_signal_dispatch()},this.$_signal_set=t=>{i(t)},{subscribe:this.$_signal_subscribe,cleanup:this.$_signal_cleanup,dispatch:this.$_signal_dispatch,call:this.$_signal_call,set:this.$_signal_set,get:this.$_signal_get}};useAuth(t){let e=t.rulesets;if(!e)throw new Error("No rulesets provided");let s=t.user,n={can:t=>{let n=!1;return e.forEach((e=>{e.action===t&&e.condition(s)&&(n=!0)})),n},hasRole:t=>s.role&&s.role.includes(t),canWithRole:(t,e)=>n.can(t)&&n.hasRole(e),assignRule:t=>{e.some((e=>e.action===t.action))||e.push(t)},revokeRule:t=>{e=e.filter((e=>e.action!==t))},canAnyOf:t=>t.some((t=>n.can(t))),canAllOf:t=>t.every((t=>n.can(t))),canGroup:(t,e="any")=>"any"===e?n.canAnyOf(t):n.canAllOf(t)};return n}useReducer(t,e,s){return this.states[t]||(this.states[t]=s),[this.states[t],s=>{this.states[t]=e(this.states[t],s),this.updateComponent()}]}runEffects(){Object.keys(this.effects).forEach((t=>{this.effects[t].forEach((t=>{this.executedEffects[t]||(t(),this.executedEffects[t]=!0)}))}))}useSyncStore(t,e){let[s,n]=this.useState(t,e||localStorage.getItem(`$_vader_${t}`,(e=>{localStorage.setItem(`$_vader_${t}`,JSON.stringify(e)),this.$_useStore_subscribers.forEach((t=>{t(e)}))}))||{});return{getField:t=>s[t],setField:(t,e)=>{const i={...s,[t]:e};n(i)},subscribe:t=>this.$_useStore_subscribers.push(t),clear:t=>{let e=s;delete e[t],n(e)}}}useState(t,e,s=null){return this.states[t]||(this.states[t]=e),[this.states[t],e=>{this.states[t]=e,this.updateComponent(),"function"==typeof s&&s()}]}useRef(t){const e=this.dom[t];return{current:()=>e,update:t=>{const s=(new DOMParser).parseFromString(t,"text/html").body.firstChild;if(e){!s.isEqualNode(e)&&e.parentNode.replaceChild(s,e)}}}}useEffect(t,e){return this.effects[this.name]||(this.effects[this.name]=[]),this.effects[this.name].push(t),e.length>0?e.forEach((t=>{if(t.set)throw new Error("signal found, do not use effect and signals at the same time - signals are more efficient")})):this.hasMounted||(t(),this.hasMounted=!0),{cleanup:()=>{this.effects[this.name]=this.effects[this.name].filter((e=>e!==t))}}}$Function(t){let e=t.name;return e||(e="anonymous"+Math.floor(1e17*Math.random())),window[e]=t,`window.${e}()`}updateComponent(){const t=document.createDocumentFragment();Object.keys(components).forEach((async e=>{const{name:s}=components[e];let n=document.querySelector(`[data-component="${s}"]`),i={name:s,time:(new Date).getTime(),prev_state:this.states,prev_props:this.storedProps,content:n.innerHTML};if(!n)return;const r=await new Function("useState","useEffect","useAuth","useReducer","useSyncStore","signal","rf","props","render","return `"+await this.render()+"`;")(this.useState,this.useEffect,this.useAuth,this.useReducer,this.useSyncStore,this.signal,this.render);if(r!==n.innerHTML){if(this.snapshots.length>0){this.snapshots[this.snapshots.length-1]!==i&&this.snapshots.push(i)}else this.snapshots.push(i);this.componentUpdate(i.prev_state,i.prev_props,i.content),t.appendChild(document.createRange().createContextualFragment(r)),n.innerHTML="",n.appendChild(t),this.runEffects()}}))}validateClassName(t){return/^[a-zA-Z0-9-_]+$/.test(t)}html(t,...e){let s=setInterval((()=>{document.querySelector(`[data-component="${this.name}"]`)&&(clearInterval(s),this.componentMounted=!0,document.querySelector(`[data-component="${this.name}"]`)?.querySelectorAll("*").forEach((t=>{t.hasAttribute("ref")&&(this.dom[t.getAttribute("ref")]=t)})),this.componentDidMount())}),100),n=document.createElement("script");n.setAttribute("type","text/javascript"),n.setAttribute("data-component-script",this.name),worker.postMessage({strings:t,args:e,location:window.location.origin+window.location.pathname.replace(/\/[^\/]*$/,"")+"/public/",name:this.name});let i=new Promise(((t,e)=>{worker.onmessage=e=>{if(e.data.error)throw new Error(e.data.error);this.dom;let s=e.data.js,n=e.data.template;const i=this.useState.bind(this),r=this.useEffect.bind(this),a=this.useReducer.bind(this),o=this.useAuth.bind(this),c=this.useSyncStore.bind(this),u=this.signal.bind(this),h=this.$Function.bind(this);let l=this.states;const d=this.useRef.bind(this);new Function("useState","useEffect","useAuth","useReducer","useSyncStore","signal","$Function","dom","render","states","useRef",s)(i,r,o,a,c,u,h,this.dom,this.render,this.states,d),t(new Function("useRef","states","signal","useState","useReducer","useAuth","useSyncStore","useRef","$Function","return`"+n+"`")(d,l,u,i,a,o,c,d,h))},worker.onerror=t=>{e(t)}}));return i}async render(t){}}const Vader={Component:Component,useRef:useRef};export const component=()=>new Component;export const rf=(t,e)=>{window[t]=e};let cache={};async function handletemplate(t){let e=(new DOMParser).parseFromString(t,"text/html"),s=e.documentElement.querySelectorAll("*");if(s.length>0)for(var n=0;n<s.length;n++)if("INCLUDE"===s[n].nodeName){if(!s[n].getAttribute("src")||""===s[n].getAttribute("src"))throw new Error("Include tag must have src attribute");let t=s[n].getAttribute("src")?.split("/").pop()?.split(".")[0],i=await include(s[n].getAttribute("src"));i=i.replace(/`/g,"\\`"),cache[s[n].getAttribute("src")]=i,i=new Function(`return \`${i}\`;`)();let r=(new DOMParser).parseFromString(i,"text/html");r.querySelectorAll("include").forEach((t=>{t.remove()})),e.querySelectorAll(t).forEach((t=>{if(t.attributes.length>0)for(var s=0;s<t.attributes.length;s++){let e="{{"+t.attributes[s].name+"}}";r.body.innerHTML.includes(e)&&(r.body.innerHTML=r.body.innerHTML.replaceAll(e,t.attributes[s].value))}if(t.children.length>0&&r.body.querySelector("slot"))for(s=0;s<t.children.length;s++){r.body.querySelectorAll("slot").forEach((e=>{let n=e.getAttribute("id");(t.hasAttribute("key")&&t.getAttribute("key")===n||!t.hasAttribute("key")&&t.nodeName===n)&&t.children[s].innerHTML.length>0&&(e.outerHTML=t.children[s].innerHTML)}))}e.body.querySelectorAll("include").forEach((t=>{t.remove()})),e.body.outerHTML=e.body.outerHTML.replace(/`/g,"\\`"),e.body.outerHTML=e.body.outerHTML.replace(t.outerHTML,new Function(`return \`${r.body.outerHTML}\`;`)())}))}return e.body.outerHTML=e.body.outerHTML.replace(/`/g,"\\`"),t=new Function(`return \`${e.body.outerHTML}\`;`)()}export const include=async t=>(!t.startsWith("/")||t.includes("/src/")||document.documentElement.outerHTML.trim().includes("\x3c!-- #vader-disable_relative-paths --\x3e")||(t="/src/"+t),cache[t]?await handletemplate(new Function(`return \`${cache[t]}\`;`)()):fetch(`./${t}`).then((e=>{if(404===e.status)throw new Error(`No file found at ${t}`);return e.text()})).then((async e=>(cache[t]=e,e=await handletemplate(new Function(`return \`${e}\`;`)())))));export default Vader;
|