Skip to content

Instantly share code, notes, and snippets.

@bundle-js
Created October 31, 2023 18:52
Show Gist options
  • Select an option

  • Save bundle-js/24e6c969ccfc05cc9109e2d3af823491 to your computer and use it in GitHub Desktop.

Select an option

Save bundle-js/24e6c969ccfc05cc9109e2d3af823491 to your computer and use it in GitHub Desktop.
var A=(e,t)=>{console.error(t,e)};function W(e){A=e}function y(e,t){return e==="$"?`$('${t}')`:e==="$$"?`$$('${t}')`:`Method: ${e} called on: ${t}`}async function C(e,t,n,i){let{onWait:f,waitTime:u,onSuccess:s,onError:l,retryDelay:a=1e3}=t,h=null;f&&(h=setTimeout(()=>f(),u||250));try{let d=await fetch(e,t);clearTimeout(h);let m=await J(d,n,i,t);return s&&requestIdleCallback(()=>s(m)),m}catch(d){if(t.retries>0){let E={...t,retries:t.retries-1,retryDelay:t.retryDelay*2};return await new Promise(w=>setTimeout(w,a)),C(e,E,n,i)}let m=d.message||d||`Failed to load ${n}`;l?requestIdleCallback(()=>l(d)):i.forEach(E=>E.innerHTML=m)}}function $(e,t={},n){let{url:i,method:f="POST",json:u=!1,body:s,event:l,headers:a}=t;l&&l.preventDefault(),i=i||U(e),s=s||B(e,t),a=a?new Headers(a):new Headers,u&&(a.append("Content-Type","application/json"),s=s instanceof FormData?JSON.stringify(Object.fromEntries(s)):JSON.stringify(typeof s=="object"?s:{body:s}));let h={...t,method:f,headers:a,body:s};return C(i,h,"text",n)}function L(e,t,n={},i){if(e==="sse"){let f=new EventSource(t);f.onmessage=u=>{i.forEach(s=>{n.add?n.toTop?g(s,u.data+"<br />"+s.innerHTML,n):g(s,s.innerHTML+"<br />"+u.data,n):g(s,u.data,n)}),n.onSuccess&&requestIdleCallback(()=>n.onSuccess(u)),n.runScripts&&H(i)},f.onerror=u=>n.onError&&n.onError(u);return}C(t,n,e,i).then(f=>{if(!f)throw new Error(`No data received from ${t}`);e==="text"&&g(i,f,n),n.runScripts&&H(i)})}function J(e,t,n,i){if(!e.ok)throw new Error(`HTTP error! status: ${e.status}`);if(t==="json")return e.json();if(t==="stream"){let f=e.body.getReader();return O(f,n,t,i)}return e.text()}function O(e,t,n,i,f=[]){return e.read().then(({done:u,value:s})=>{let l=new TextDecoder("utf-8").decode(s),a=[...f,l];return t.forEach(h=>{g(h,a.join(""),i)}),u?a.join(""):O(e,t,n,i,a)})}function B(e,t={}){let{serializer:n}=t,i=e.tagName,f=e.form||e.closest("form");return i==="FORM"?n?n(e):new FormData(e):i==="INPUT"||i==="SELECT"||i==="TEXTAREA"?e.value:f?n?n(f):new FormData(f):e.textContent}function U(e){let t=e.form||e.closest("form");return e.formAction&&e.formAction!==window.location.href?e.formAction:e.action?e.action:t&&t.action?t.action:window.location.href}function g(e,t,n){let{sanitize:i=!0,sanitizer:f}=n;(Array.isArray(e)?e:[e]).forEach(s=>{i?s.setHTML(t,{sanitizer:f}):s.innerHTML=t})}function H(e){e.forEach(t=>t.querySelectorAll("script").forEach(n=>{let i=document.createElement("script");i.textContent=n.textContent,i.type=n.type,n.replaceWith(i)}))}function N(e,t){if(e instanceof HTMLInputElement){let n={checkbox:()=>e.checked=!!t,radio:()=>e.checked=e.value===t,default:()=>e.value=t};return(n[e.type]||n.default)()}else if(e instanceof HTMLSelectElement)if(e.multiple&&Array.isArray(t))for(let n of e.options)n.selected=t.includes(n.value);else(typeof t=="string"||typeof t=="number")&&(e.value=t.toString());else e instanceof HTMLTextAreaElement||e instanceof HTMLButtonElement?e.value=t:e.textContent=t}function M(e,t,n,i){typeof t=="string"?i?e.setAttribute(t,n):e[t]=n:typeof t=="object"&&Object.assign(e,t)}function D(e){let t=e.trim().split(";").join(" !important;"),n=document.createElement("style");n.textContent=t,document.head.appendChild(n)}function b(e){return(t,...n)=>t.classList[e](...n)}function q(e,...t){let n=t[t.length-1]instanceof Object&&("sanitize"in t[t.length-1]||"position"in t[t.length-1])?t.pop():{},i=t.flat();(i instanceof NodeList||Array.isArray(i))&&!n&&(n.all=!0),R(e,i,n)}function k(e,t,n={}){let i=v(t,n),f=Array.isArray(e)?e:[e].flat();i.forEach(u=>{R(u,f,n)})}function F(e,t,n={mode:"clone"}){let i=(a,h)=>{if(!h)return;let d=n.mode==="clone"?h.cloneNode(!0):h;a.replaceWith(d)},f=a=>a.raw||a,u=a=>Array.isArray(a)?a:a instanceof HTMLElement?[a]:a instanceof NodeList?Array.from(a):[],s=u(f(e)),l=u(f(t));s.forEach((a,h)=>i(a,l[h]))}function R(e,t,n){let{position:i="append",sanitize:f=!0,mode:u="move",sanitizer:s,all:l}=n,a={append:(d,m)=>d.append(m),prepend:(d,m)=>d.prepend(m),before:(d,m)=>d.before(m),after:(d,m)=>d.after(m)},h=u==="clone"?d=>d.cloneNode(!0):d=>d;t.forEach(d=>{v(d,{sanitize:f,sanitizer:s,all:l}).forEach(E=>{a[i](e,h(E))})})}function v(e,t){return typeof e=="string"&&e.trim().startsWith("<")?V(e,t):e instanceof HTMLElement?[e]:e instanceof NodeList?Array.from(e):t.all?Array.from(document.querySelectorAll(e)):[document.querySelector(e)]}function V(e,{sanitize:t=!0,sanitizer:n}){let i=document.createElement("div");return t?i.setHTML(e,n):i.innerHTML=e,Array.from(i.children)}function T(e,t,n=!1){let i=[...t],f=null,{addToQueue:u,defer:s}=P(),l=j(u,()=>f),a=(r,o)=>l(async(...c)=>{await Promise.all(t.map(p=>r(p,...c)))},y(o,e)),h={on:a((r,o,c)=>{r.addEventListener(o,c)},"on"),once:a((r,o,c)=>{r.addEventListener(o,c,{once:!0})},"once"),delegate:a((r,o,c,p)=>{r.addEventListener(o,x=>{x.target.matches(c)&&p(x)})},"delegate"),off:a((r,o,c)=>{r.removeEventListener(o,c)},"off"),html:a((r,o,c)=>{if(c){let p=r.nextSibling;r.outerHTML=o;let x=p?p.previousSibling:r.parentElement.lastElementChild,S=t.indexOf(r);t[S]=x}else r.innerHTML=o},"html"),text:a((r,o)=>r.textContent=o,"text"),sanitize:a((r,o,c)=>r.setHTML(o,c),"sanitize"),val:a((r,o)=>N(r,o),"val"),css:a((r,o,c)=>M(r.style,o,c),"css"),addStyleSheet:a((r,o)=>D(o),"addStyleSheet"),addClass:a(b("add"),"addClass"),removeClass:a(b("remove"),"removeClass"),toggleClass:a(b("toggle"),"toggleClass"),set:a((r,o,c="")=>M(r,o,c,!0),"set"),unset:a((r,o)=>r.removeAttribute(o),"unset"),toggle:a((r,o)=>r.toggleAttribute(o),"toggle"),data:a((r,o,c)=>M(r.dataset,o,c),"data"),attach:a((r,...o)=>q(r,...o),"attach"),cloneTo:a((r,o,c)=>{k(r,o,{mode:"clone",...c})},"cloneTo"),moveTo:a((r,o,c)=>{k(r,o,c)},"moveTo"),become:a((r,o,c)=>{F(r,o,c)},"become"),purge:a(r=>r.remove(),"purge"),send:a((r,o)=>$(r,o,t),"send"),do:a(async(r,o)=>{let c=T(e,[r]);return await o(c)},"do"),defer:a((r,o)=>{let c=T(e,[r]);return s(o,[c])},"defer"),fromJSON:a((r,o,c,p={})=>C(o,p,"json",t).then(x=>{let S=T(e,[r]);c(S,x)}),"fromJSON"),fromHTML:a((r,o,c={})=>L("text",o,c,[r]),"fromHTML"),fromStream:a((r,o,c={})=>{let p=c.sse?"sse":"stream";return L(p,o,c,[r])},"fromStream"),transition:a((r,o,c)=>r.animate(o,c).finished,"transition"),wait:a((r,o)=>new Promise(c=>setTimeout(c,o)),"wait"),next:E("nextElementSibling"),prev:E("previousElementSibling"),first:E("firstElementChild"),last:E("lastElementChild"),parent:E("parentElement"),ancestor:l(r=>{let o=d(c=>c.closest(r));return m(o)},y("ancestor",e)),kids:l(()=>{let r=d(o=>Array.from(o.children));return m(r.flat())},y("kids",e)),siblings:l(()=>{let r=d(o=>Array.from(o.parentElement.children).filter(c=>c!==o));return m(r)},y("siblings",e)),pick:l(r=>{let o=d(c=>c.querySelector(r));return m(o)},y("pick",e)),pickAll:l(r=>{let o=d(c=>Array.from(c.querySelectorAll(r)));return m(o.flat())},y("pickAll",e)),if:l(({is:r,then:o,or:c})=>{for(let p of t){let x=T(e,[p]);try{r(x)?o&&o(x):c&&c(x)}catch(S){A(S,y("if",e))}}},y("if",e),!1),takeWhile:l((r,o)=>{let c=[];o&&t.reverse();for(let p of t)try{if(r(p.raw||p))c.push(p);else break}catch(x){A(x,y("takeWhile",e))}return m(c)},y("takeWhile",e)),refresh:l(()=>{t=[...i]},y("refresh",e))};function d(r){return t.map(r).filter(o=>o)}function m(r){if(n)throw new Error("Proxy is fixed. Create new proxy to switch targets.");return t=r.length>0?r:[],f=w(t),f}function E(r){return l(()=>{let o=d(c=>c[r]);return m(o)},y(r,e))}function w(r){let o=z(r,h),c=new Proxy(h,o);return c.raw=r,c}return f=w(t),f}function _(e,t=!1){return I("$",e,t)}function X(e,t=!1){return I("$$",e,t)}function I(e,t,n=!1){let i=v(t,{all:e==="$$",sanitize:!1});return i[0]?T(t,i,n):A(new Error("No elements."),y(e,t))}function P(){let e=[],t=[],n=!1;async function i(){if(!n){for(n=!0;e.length>0;)await e.shift()();if(t.length>0&&e.length===0)for(;t.length>0;){let{fn:s,args:l}=t.shift();await Q(s,l)}n=!1}}function f(s){e.push(s),i()}function u(s,l=[]){t.push({fn:s,args:l}),n||i()}return{addToQueue:f,defer:u}}function j(e,t){return function(i,f,u=!0){return(...s)=>(e(async()=>{try{await Q(i,s,u)}catch(l){A(l,f)}}),t())}}function z(e,t){return{get(n,i){return e.length&&e.length===1&&(e=e[0]),i==="raw"?e:i in t?t[i]:Array.isArray(e)&&typeof e[i]=="function"?function(...f){let u=e[i](...f);return u instanceof Array?T(e[i].name+f,u):T(e[i].name+f,[u])}:typeof e[i]=="function"?e[i].bind(e):e[i]}}}async function Q(e,t,n=!0){let i=s=>s&&typeof s.then=="function",f=[];for(let s of t)f.push(i(s)&&n?await s:s);let u=e(...f);i(u)&&await u}function G(e,t={}){let{timeout:n=5e3,interval:i}=t;return(...f)=>new Promise((u,s)=>{let l=!1,a,h=()=>a&&clearInterval(a),d=w=>{l||(l=!0,h(),u(w))},m=w=>{l||(l=!0,h(),t.error=w,s(t))},E=()=>{try{e(d,m,...f)}catch(w){h(),A(w,t)}};i?a=setInterval(E,i):E(),setTimeout(()=>{l||m(`Timeout: ${n}ms exceeded`)},n)})}export{_ as $,X as $$,G as promisify,W as setErrorHandler};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment