├── .gitignore ├── .npmrc ├── .prettierignore ├── .prettierrc ├── README.md ├── docs ├── .nojekyll ├── 404.html ├── _app │ ├── env.js │ ├── immutable │ │ ├── assets │ │ │ ├── 0.Bpj9i6gw.css │ │ │ ├── 2.3L2Kqi-p.css │ │ │ ├── _layout.CHDnQxNv.css │ │ │ ├── _page.DTBjNMyj.css │ │ │ └── oxc_regular_expression_wasm_bg.BOyszmDC.wasm │ │ ├── chunks │ │ │ ├── 5Ddco2D7.js │ │ │ ├── B3Bhwkeu.js │ │ │ ├── DbFpkIPw.js │ │ │ ├── DcvpZBWZ.js │ │ │ ├── HmH_TjvH.js │ │ │ ├── kMK1T_J2.js │ │ │ └── qGwwCbwR.js │ │ ├── entry │ │ │ ├── app.xgYp5k3D.js │ │ │ └── start.S8h0dDNw.js │ │ └── nodes │ │ │ ├── 0.Bz8rZvjZ.js │ │ │ ├── 1.Bq8NaAbW.js │ │ │ └── 2.BpMocShx.js │ └── version.json ├── favicon.png └── index.html ├── package-lock.json ├── package.json ├── src ├── app.d.ts ├── app.html ├── lib │ └── parser.ts ├── oxc_regular_expression_wasm │ ├── .gitignore │ ├── Cargo.lock │ ├── Cargo.toml │ ├── build.sh │ ├── pkg │ │ ├── oxc_regular_expression_wasm.d.ts │ │ ├── oxc_regular_expression_wasm.js │ │ ├── oxc_regular_expression_wasm_bg.wasm │ │ ├── oxc_regular_expression_wasm_bg.wasm.d.ts │ │ └── package.json │ └── src │ │ └── lib.rs └── routes │ ├── +layout.svelte │ ├── +layout.ts │ └── +page.svelte ├── static ├── .nojekyll └── favicon.png ├── svelte.config.js ├── tsconfig.json └── vite.config.ts /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | # Output 4 | .output 5 | .vercel 6 | /.svelte-kit 7 | 8 | # OS 9 | .DS_Store 10 | Thumbs.db 11 | 12 | # Env 13 | .env 14 | .env.* 15 | !.env.example 16 | !.env.test 17 | 18 | # Vite 19 | vite.config.js.timestamp-* 20 | vite.config.ts.timestamp-* 21 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | engine-strict=true 2 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | /build 4 | /.svelte-kit 5 | /package 6 | /static 7 | .env 8 | .env.* 9 | !.env.example 10 | 11 | # Ignore files for PNPM, NPM and YARN 12 | pnpm-lock.yaml 13 | package-lock.json 14 | yarn.lock 15 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 100, 3 | "plugins": ["prettier-plugin-svelte"], 4 | "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }] 5 | } 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # js-regexp-ast-viewer 2 | 3 | Let's explore parsed ECMAScript `RegExp` AST at once! 4 | 5 | - https://github.com/oxc-project/oxc/tree/main/crates/oxc_regular_expression 6 | - https://github.com/jviereck/regjsparser 7 | - https://github.com/eslint-community/regexpp 8 | - https://github.com/DmitrySoshnikov/regexp-tree 9 | -------------------------------------------------------------------------------- /docs/.nojekyll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leaysgur/js-regexp-ast-viewer/9956049d4840cc0f4d9e2a0aa3531f76c6bd4c59/docs/.nojekyll -------------------------------------------------------------------------------- /docs/404.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | JS RegExp AST Viewer 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 37 |
38 | 39 | 40 | -------------------------------------------------------------------------------- /docs/_app/env.js: -------------------------------------------------------------------------------- 1 | export const env={} -------------------------------------------------------------------------------- /docs/_app/immutable/assets/0.Bpj9i6gw.css: -------------------------------------------------------------------------------- 1 | body{font-family:monospace;margin:0;padding:0;background-color:#123;color:#def;accent-color:#0ff}a{color:#0ff}header.svelte-15vgq71{display:flex;justify-content:space-between;align-items:center;padding:.5rem;padding-block-end:0}header.svelte-15vgq71 h1:where(.svelte-15vgq71){margin:0;font-size:1rem}main.svelte-15vgq71{padding:.5rem} 2 | -------------------------------------------------------------------------------- /docs/_app/immutable/assets/2.3L2Kqi-p.css: -------------------------------------------------------------------------------- 1 | .input.svelte-1fbnsuq{display:grid;grid-template-columns:1ch 1fr 1ch 6ch;align-items:center}.col.svelte-1fbnsuq{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.5rem}h2.svelte-1fbnsuq{font-size:.9rem;word-break:break-word}h2.svelte-1fbnsuq span:where(.svelte-1fbnsuq){font-size:.7rem;color:#ff0}pre.svelte-1fbnsuq{border:1px solid transparent}pre.svelte-1fbnsuq.ok{border-color:#0f0;overflow-x:auto}pre.svelte-1fbnsuq.ng{border-color:red;white-space:wrap} 2 | -------------------------------------------------------------------------------- /docs/_app/immutable/assets/_layout.CHDnQxNv.css: -------------------------------------------------------------------------------- 1 | body{font-family:monospace;margin:0;padding:0;background-color:#123;color:#def;accent-color:#0ff}a{color:#0ff}header.svelte-15vgq71{display:flex;justify-content:space-between;align-items:center;padding:.5rem;padding-block-end:0;h1:where(.svelte-15vgq71){margin:0;font-size:1rem}}main.svelte-15vgq71{padding:.5rem} 2 | -------------------------------------------------------------------------------- /docs/_app/immutable/assets/_page.DTBjNMyj.css: -------------------------------------------------------------------------------- 1 | .input.svelte-1fbnsuq{display:grid;grid-template-columns:1ch 1fr 1ch 6ch;align-items:center}.col.svelte-1fbnsuq{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.5rem}h2.svelte-1fbnsuq{font-size:.9rem;word-break:break-word;span:where(.svelte-1fbnsuq){font-size:.7rem;color:#ff0}}pre.svelte-1fbnsuq{border:1px solid transparent;&.ok{border-color:#0f0;overflow-x:auto}&.ng{border-color:red;white-space:wrap}} 2 | -------------------------------------------------------------------------------- /docs/_app/immutable/assets/oxc_regular_expression_wasm_bg.BOyszmDC.wasm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leaysgur/js-regexp-ast-viewer/9956049d4840cc0f4d9e2a0aa3531f76c6bd4c59/docs/_app/immutable/assets/oxc_regular_expression_wasm_bg.BOyszmDC.wasm -------------------------------------------------------------------------------- /docs/_app/immutable/chunks/5Ddco2D7.js: -------------------------------------------------------------------------------- 1 | import{h as u,a as _,b as g,E as h,H as S,c as D,r as H,s as k,d as I,f as b,g as v,p as A,U as F,i as L}from"./kMK1T_J2.js";function U(E,m,[t,s]=[0,0]){u&&t===0&&_();var a=E,f=null,e=null,i=F,p=t>0?h:0,c=!1;const N=(n,l=!0)=>{c=!0,o(l,n)},o=(n,l)=>{if(i===(i=n))return;let T=!1;if(u&&s!==-1){if(t===0){const r=a.data;r===S?s=0:r===D?s=1/0:(s=parseInt(r.substring(1)),s!==s&&(s=i?1/0:-1))}const R=s>t;!!i===R&&(a=H(),k(a),I(!1),T=!0,s=-1)}i?(f?b(f):l&&(f=v(()=>l(a))),e&&A(e,()=>{e=null})):(e?b(e):l&&(e=v(()=>l(a,[t+1,s]))),f&&A(f,()=>{f=null})),T&&I(!0)};g(()=>{c=!1,m(N),c||o(null,null)},p),u&&(a=L)}export{U as i}; 2 | -------------------------------------------------------------------------------- /docs/_app/immutable/chunks/B3Bhwkeu.js: -------------------------------------------------------------------------------- 1 | import{e}from"./kMK1T_J2.js";e(); 2 | -------------------------------------------------------------------------------- /docs/_app/immutable/chunks/DbFpkIPw.js: -------------------------------------------------------------------------------- 1 | var Xt=t=>{throw TypeError(t)};var je=(t,e,n)=>e.has(t)||Xt("Cannot "+n);var A=(t,e,n)=>(je(t,e,"read from private field"),n?n.call(t):e.get(t)),P=(t,e,n)=>e.has(t)?Xt("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,n);import{aA as Ut,aB as $e,ah as C,S as O,a9 as N,ai as De}from"./kMK1T_J2.js";import{o as Zt}from"./DcvpZBWZ.js";const q=[];function jt(t,e=Ut){let n=null;const a=new Set;function r(o){if($e(t,o)&&(t=o,n)){const c=!q.length;for(const l of a)l[1](),q.push(l,t);if(c){for(let l=0;l{a.delete(l),a.size===0&&n&&(n(),n=null)}}return{set:r,update:s,subscribe:i}}new URL("sveltekit-internal://");function Be(t,e){return t==="/"||e==="ignore"?t:e==="never"?t.endsWith("/")?t.slice(0,-1):t:e==="always"&&!t.endsWith("/")?t+"/":t}function Fe(t){return t.split("%25").map(decodeURI).join("%25")}function Ve(t){for(const e in t)t[e]=decodeURIComponent(t[e]);return t}function Lt({href:t}){return t.split("#")[0]}function qe(t,e,n,a=!1){const r=new URL(t);Object.defineProperty(r,"searchParams",{value:new Proxy(r.searchParams,{get(i,o){if(o==="get"||o==="getAll"||o==="has")return l=>(n(l),i[o](l));e();const c=Reflect.get(i,o);return typeof c=="function"?c.bind(i):c}}),enumerable:!0,configurable:!0});const s=["href","pathname","search","toString","toJSON"];a&&s.push("hash");for(const i of s)Object.defineProperty(r,i,{get(){return e(),t[i]},enumerable:!0,configurable:!0});return r}function Me(...t){let e=5381;for(const n of t)if(typeof n=="string"){let a=n.length;for(;a;)e=e*33^n.charCodeAt(--a)}else if(ArrayBuffer.isView(n)){const a=new Uint8Array(n.buffer,n.byteOffset,n.byteLength);let r=a.length;for(;r;)e=e*33^a[--r]}else throw new TypeError("value must be a string or TypedArray");return(e>>>0).toString(36)}function Ge(t){const e=atob(t),n=new Uint8Array(e.length);for(let a=0;a((t instanceof Request?t.method:(e==null?void 0:e.method)||"GET")!=="GET"&&Y.delete($t(t)),He(t,e));const Y=new Map;function Ke(t,e){const n=$t(t,e),a=document.querySelector(n);if(a!=null&&a.textContent){let{body:r,...s}=JSON.parse(a.textContent);const i=a.getAttribute("data-ttl");return i&&Y.set(n,{body:r,init:s,ttl:1e3*Number(i)}),a.getAttribute("data-b64")!==null&&(r=Ge(r)),Promise.resolve(new Response(r,s))}return window.fetch(t,e)}function We(t,e,n){if(Y.size>0){const a=$t(t,n),r=Y.get(a);if(r){if(performance.now(){const r=/^\[\.\.\.(\w+)(?:=(\w+))?\]$/.exec(a);if(r)return e.push({name:r[1],matcher:r[2],optional:!1,rest:!0,chained:!0}),"(?:/(.*))?";const s=/^\[\[(\w+)(?:=(\w+))?\]\]$/.exec(a);if(s)return e.push({name:s[1],matcher:s[2],optional:!0,rest:!1,chained:!0}),"(?:/([^/]+))?";if(!a)return;const i=a.split(/\[(.+?)\](?!\])/);return"/"+i.map((c,l)=>{if(l%2){if(c.startsWith("x+"))return Tt(String.fromCharCode(parseInt(c.slice(2),16)));if(c.startsWith("u+"))return Tt(String.fromCharCode(...c.slice(2).split("-").map(p=>parseInt(p,16))));const d=Ye.exec(c),[,u,w,f,m]=d;return e.push({name:f,matcher:m,optional:!!u,rest:!!w,chained:w?l===1&&i[0]==="":!1}),w?"(.*?)":u?"([^/]*)?":"([^/]+?)"}return Tt(c)}).join("")}).join("")}/?$`),params:e}}function Je(t){return!/^\([^)]+\)$/.test(t)}function Xe(t){return t.slice(1).split("/").filter(Je)}function Ze(t,e,n){const a={},r=t.slice(1),s=r.filter(o=>o!==void 0);let i=0;for(let o=0;od).join("/"),i=0),l===void 0){c.rest&&(a[c.name]="");continue}if(!c.matcher||n[c.matcher](l)){a[c.name]=l;const d=e[o+1],u=r[o+1];d&&!d.rest&&d.optional&&u&&c.chained&&(i=0),!d&&!u&&Object.keys(a).length===s.length&&(i=0);continue}if(c.optional&&c.chained){i++;continue}return}if(!i)return a}function Tt(t){return t.normalize().replace(/[[\]]/g,"\\$&").replace(/%/g,"%25").replace(/\//g,"%2[Ff]").replace(/\?/g,"%3[Ff]").replace(/#/g,"%23").replace(/[.*+?^${}()|\\]/g,"\\$&")}function Qe({nodes:t,server_loads:e,dictionary:n,matchers:a}){const r=new Set(e);return Object.entries(n).map(([o,[c,l,d]])=>{const{pattern:u,params:w}=ze(o),f={id:o,exec:m=>{const p=u.exec(m);if(p)return Ze(p,w,a)},errors:[1,...d||[]].map(m=>t[m]),layouts:[0,...l||[]].map(i),leaf:s(c)};return f.errors.length=f.layouts.length=Math.max(f.errors.length,f.layouts.length),f});function s(o){const c=o<0;return c&&(o=~o),[c,t[o]]}function i(o){return o===void 0?o:[r.has(o),t[o]]}}function de(t,e=JSON.parse){try{return e(sessionStorage[t])}catch{}}function Qt(t,e,n=JSON.stringify){const a=n(e);try{sessionStorage[t]=a}catch{}}var ce;const x=((ce=globalThis.__sveltekit_17dm1a4)==null?void 0:ce.base)??"/js-regexp-ast-viewer";var le;const tn=((le=globalThis.__sveltekit_17dm1a4)==null?void 0:le.assets)??x,en="1746581147120",pe="sveltekit:snapshot",ge="sveltekit:scroll",me="sveltekit:states",nn="sveltekit:pageurl",G="sveltekit:history",Z="sveltekit:navigation",B={tap:1,hover:2,viewport:3,eager:4,off:-1,false:-1},bt=location.origin;function we(t){if(t instanceof URL)return t;let e=document.baseURI;if(!e){const n=document.getElementsByTagName("base");e=n.length?n[0].href:document.URL}return new URL(t,e)}function Dt(){return{x:pageXOffset,y:pageYOffset}}function M(t,e){return t.getAttribute(`data-sveltekit-${e}`)}const te={...B,"":B.hover};function ye(t){let e=t.assignedSlot??t.parentNode;return(e==null?void 0:e.nodeType)===11&&(e=e.host),e}function _e(t,e){for(;t&&t!==e;){if(t.nodeName.toUpperCase()==="A"&&t.hasAttribute("href"))return t;t=ye(t)}}function Ct(t,e,n){let a;try{if(a=new URL(t instanceof SVGAElement?t.href.baseVal:t.href,document.baseURI),n&&a.hash.match(/^#[^/]/)){const o=location.hash.split("#")[1]||"/";a.hash=`#${o}${a.hash}`}}catch{}const r=t instanceof SVGAElement?t.target.baseVal:t.target,s=!a||!!r||At(a,e,n)||(t.getAttribute("rel")||"").split(/\s+/).includes("external"),i=(a==null?void 0:a.origin)===bt&&t.hasAttribute("download");return{url:a,external:s,target:r,download:i}}function dt(t){let e=null,n=null,a=null,r=null,s=null,i=null,o=t;for(;o&&o!==document.documentElement;)a===null&&(a=M(o,"preload-code")),r===null&&(r=M(o,"preload-data")),e===null&&(e=M(o,"keepfocus")),n===null&&(n=M(o,"noscroll")),s===null&&(s=M(o,"reload")),i===null&&(i=M(o,"replacestate")),o=ye(o);function c(l){switch(l){case"":case"true":return!0;case"off":case"false":return!1;default:return}}return{preload_code:te[a??"off"],preload_data:te[r??"off"],keepfocus:c(e),noscroll:c(n),reload:c(s),replace_state:c(i)}}function ee(t){const e=jt(t);let n=!0;function a(){n=!0,e.update(i=>i)}function r(i){n=!1,e.set(i)}function s(i){let o;return e.subscribe(c=>{(o===void 0||n&&c!==o)&&i(o=c)})}return{notify:a,set:r,subscribe:s}}const ve={v:()=>{}};function rn(){const{set:t,subscribe:e}=jt(!1);let n;async function a(){clearTimeout(n);try{const r=await fetch(`${tn}/_app/version.json`,{headers:{pragma:"no-cache","cache-control":"no-cache"}});if(!r.ok)return!1;const i=(await r.json()).version!==en;return i&&(t(!0),ve.v(),clearTimeout(n)),i}catch{return!1}}return{subscribe:e,check:a}}function At(t,e,n){return t.origin!==bt||!t.pathname.startsWith(e)?!0:n?!(t.pathname===e+"/"||t.pathname===e+"/index.html"||t.protocol==="file:"&&t.pathname.replace(/\/[^/]+\.html?$/,"")===e):!1}function qn(t){}function ne(t){const e=on(t),n=new ArrayBuffer(e.length),a=new DataView(n);for(let r=0;r>16),e+=String.fromCharCode((n&65280)>>8),e+=String.fromCharCode(n&255),n=a=0);return a===12?(n>>=4,e+=String.fromCharCode(n)):a===18&&(n>>=2,e+=String.fromCharCode((n&65280)>>8),e+=String.fromCharCode(n&255)),e}const sn=-1,cn=-2,ln=-3,fn=-4,un=-5,hn=-6;function dn(t,e){if(typeof t=="number")return r(t,!0);if(!Array.isArray(t)||t.length===0)throw new Error("Invalid input");const n=t,a=Array(n.length);function r(s,i=!1){if(s===sn)return;if(s===ln)return NaN;if(s===fn)return 1/0;if(s===un)return-1/0;if(s===hn)return-0;if(i)throw new Error("Invalid input");if(s in a)return a[s];const o=n[s];if(!o||typeof o!="object")a[s]=o;else if(Array.isArray(o))if(typeof o[0]=="string"){const c=o[0],l=e==null?void 0:e[c];if(l)return a[s]=l(r(o[1]));switch(c){case"Date":a[s]=new Date(o[1]);break;case"Set":const d=new Set;a[s]=d;for(let f=1;fe!=null)}class St{constructor(e,n){this.status=e,typeof n=="string"?this.body={message:n}:n?this.body=n:this.body={message:`Error: ${e}`}}toString(){return JSON.stringify(this.body)}}class Bt{constructor(e,n){this.status=e,this.location=n}}class Ft extends Error{constructor(e,n,a){super(a),this.status=e,this.text=n}}const mn="x-sveltekit-invalidated",wn="x-sveltekit-trailing-slash";function pt(t){return t instanceof St||t instanceof Ft?t.status:500}function yn(t){return t instanceof Ft?t.text:"Internal Error"}let U,Q,xt;const _n=Zt.toString().includes("$$")||/function \w+\(\) \{\}/.test(Zt.toString());var nt,rt,at,ot,st,it,ct,lt,fe,ft,ue,ut,he;_n?(U={data:{},form:null,error:null,params:{},route:{id:null},state:{},status:-1,url:new URL("https://example.com")},Q={current:null},xt={current:!1}):(U=new(fe=class{constructor(){P(this,nt,C({}));P(this,rt,C(null));P(this,at,C(null));P(this,ot,C({}));P(this,st,C({id:null}));P(this,it,C({}));P(this,ct,C(-1));P(this,lt,C(new URL("https://example.com")))}get data(){return O(A(this,nt))}set data(e){N(A(this,nt),e)}get form(){return O(A(this,rt))}set form(e){N(A(this,rt),e)}get error(){return O(A(this,at))}set error(e){N(A(this,at),e)}get params(){return O(A(this,ot))}set params(e){N(A(this,ot),e)}get route(){return O(A(this,st))}set route(e){N(A(this,st),e)}get state(){return O(A(this,it))}set state(e){N(A(this,it),e)}get status(){return O(A(this,ct))}set status(e){N(A(this,ct),e)}get url(){return O(A(this,lt))}set url(e){N(A(this,lt),e)}},nt=new WeakMap,rt=new WeakMap,at=new WeakMap,ot=new WeakMap,st=new WeakMap,it=new WeakMap,ct=new WeakMap,lt=new WeakMap,fe),Q=new(ue=class{constructor(){P(this,ft,C(null))}get current(){return O(A(this,ft))}set current(e){N(A(this,ft),e)}},ft=new WeakMap,ue),xt=new(he=class{constructor(){P(this,ut,C(!1))}get current(){return O(A(this,ut))}set current(e){N(A(this,ut),e)}},ut=new WeakMap,he),ve.v=()=>xt.current=!0);function vn(t){Object.assign(U,t)}const bn="/__data.json",An=".html__data.json";function Sn(t){return t.endsWith(".html")?t.replace(/\.html$/,An):t.replace(/\/$/,"")+bn}const kn=new Set(["icon","shortcut icon","apple-touch-icon"]),V=de(ge)??{},tt=de(pe)??{},$={url:ee({}),page:ee({}),navigating:jt(null),updated:rn()};function Vt(t){V[t]=Dt()}function En(t,e){let n=t+1;for(;V[n];)delete V[n],n+=1;for(n=e+1;tt[n];)delete tt[n],n+=1}function K(t){return location.href=t.href,new Promise(()=>{})}async function Ae(){if("serviceWorker"in navigator){const t=await navigator.serviceWorker.getRegistration(x||"/");t&&await t.update()}}function re(){}let qt,Ot,gt,j,Nt,S;const mt=[],wt=[];let L=null;const ht=new Map,Se=new Set,Rn=new Set,z=new Set;let v={branch:[],error:null,url:null},Mt=!1,yt=!1,ae=!0,et=!1,W=!1,ke=!1,Gt=!1,Ee,E,T,F;const J=new Set;async function Kn(t,e,n){var r,s,i,o;document.URL!==location.href&&(location.href=location.href),S=t,await((s=(r=t.hooks).init)==null?void 0:s.call(r)),qt=Qe(t),j=document.documentElement,Nt=e,Ot=t.nodes[0],gt=t.nodes[1],Ot(),gt(),E=(i=history.state)==null?void 0:i[G],T=(o=history.state)==null?void 0:o[Z],E||(E=T=Date.now(),history.replaceState({...history.state,[G]:E,[Z]:T},""));const a=V[E];a&&(history.scrollRestoration="manual",scrollTo(a.x,a.y)),n?await jn(Nt,n):await X({type:"enter",url:we(S.hash?Dn(new URL(location.href)):location.href),replace_state:!0}),Nn()}function In(){mt.length=0,Gt=!1}function Re(t){wt.some(e=>e==null?void 0:e.snapshot)&&(tt[t]=wt.map(e=>{var n;return(n=e==null?void 0:e.snapshot)==null?void 0:n.capture()}))}function Ie(t){var e;(e=tt[t])==null||e.forEach((n,a)=>{var r,s;(s=(r=wt[a])==null?void 0:r.snapshot)==null||s.restore(n)})}function oe(){Vt(E),Qt(ge,V),Re(T),Qt(pe,tt)}async function Ue(t,e,n,a){return X({type:"goto",url:we(t),keepfocus:e.keepFocus,noscroll:e.noScroll,replace_state:e.replaceState,state:e.state,redirect_count:n,nav_token:a,accept:()=>{e.invalidateAll&&(Gt=!0),e.invalidate&&e.invalidate.forEach(On)}})}async function Un(t){if(t.id!==(L==null?void 0:L.id)){const e={};J.add(e),L={id:t.id,token:e,promise:xe({...t,preload:e}).then(n=>(J.delete(e),n.type==="loaded"&&n.state.error&&(L=null),n))}}return L.promise}async function Pt(t){var n;const e=(n=await Et(t,!1))==null?void 0:n.route;e&&await Promise.all([...e.layouts,e.leaf].map(a=>a==null?void 0:a[1]()))}function Le(t,e,n){var r;v=t.state;const a=document.querySelector("style[data-sveltekit]");if(a&&a.remove(),Object.assign(U,t.props.page),Ee=new S.root({target:e,props:{...t.props,stores:$,components:wt},hydrate:n,sync:!1}),Ie(T),n){const s={from:null,to:{params:v.params,route:{id:((r=v.route)==null?void 0:r.id)??null},url:new URL(location.href)},willUnload:!1,type:"enter",complete:Promise.resolve()};z.forEach(i=>i(s))}yt=!0}function _t({url:t,params:e,branch:n,status:a,error:r,route:s,form:i}){let o="never";if(x&&(t.pathname===x||t.pathname===x+"/"))o="always";else for(const f of n)(f==null?void 0:f.slash)!==void 0&&(o=f.slash);t.pathname=Be(t.pathname,o),t.search=t.search;const c={type:"loaded",state:{url:t,params:e,branch:n,error:r,route:s},props:{constructors:gn(n).map(f=>f.node.component),page:Yt(U)}};i!==void 0&&(c.props.form=i);let l={},d=!U,u=0;for(let f=0;f(o&&(c.route=!0),p[h])}),params:new Proxy(a,{get:(p,h)=>(o&&c.params.add(h),p[h])}),data:(s==null?void 0:s.data)??null,url:qe(n,()=>{o&&(c.url=!0)},p=>{o&&c.search_params.add(p)},S.hash),async fetch(p,h){p instanceof Request&&(h={body:p.method==="GET"||p.method==="HEAD"?void 0:await p.blob(),cache:p.cache,credentials:p.credentials,headers:[...p.headers].length?p.headers:void 0,integrity:p.integrity,keepalive:p.keepalive,method:p.method,mode:p.mode,redirect:p.redirect,referrer:p.referrer,referrerPolicy:p.referrerPolicy,signal:p.signal,...h});const{resolved:_,promise:R}=Te(p,h,n);return o&&f(_.href),R},setHeaders:()=>{},depends:f,parent(){return o&&(c.parent=!0),e()},untrack(p){o=!1;try{return p()}finally{o=!0}}};i=await l.universal.load.call(null,m)??null}return{node:l,loader:t,server:s,universal:(u=l.universal)!=null&&u.load?{type:"data",data:i,uses:c}:null,data:i??(s==null?void 0:s.data)??null,slash:((w=l.universal)==null?void 0:w.trailingSlash)??(s==null?void 0:s.slash)}}function Te(t,e,n){let a=t instanceof Request?t.url:t;const r=new URL(a,n);r.origin===n.origin&&(a=r.href.slice(n.origin.length));const s=yt?We(a,r.href,e):Ke(a,e);return{resolved:r,promise:s}}function se(t,e,n,a,r,s){if(Gt)return!0;if(!r)return!1;if(r.parent&&t||r.route&&e||r.url&&n)return!0;for(const i of r.search_params)if(a.has(i))return!0;for(const i of r.params)if(s[i]!==v.params[i])return!0;for(const i of r.dependencies)if(mt.some(o=>o(new URL(i))))return!0;return!1}function Kt(t,e){return(t==null?void 0:t.type)==="data"?t:(t==null?void 0:t.type)==="skip"?e??null:null}function Ln(t,e){if(!t)return new Set(e.searchParams.keys());const n=new Set([...t.searchParams.keys(),...e.searchParams.keys()]);for(const a of n){const r=t.searchParams.getAll(a),s=e.searchParams.getAll(a);r.every(i=>s.includes(i))&&s.every(i=>r.includes(i))&&n.delete(a)}return n}function ie({error:t,url:e,route:n,params:a}){return{type:"loaded",state:{error:t,url:e,route:n,params:a,branch:[]},props:{page:Yt(U),constructors:[]}}}async function xe({id:t,invalidating:e,url:n,params:a,route:r,preload:s}){if((L==null?void 0:L.id)===t)return J.delete(L.token),L.promise;const{errors:i,layouts:o,leaf:c}=r,l=[...o,c];i.forEach(g=>g==null?void 0:g().catch(()=>{})),l.forEach(g=>g==null?void 0:g[1]().catch(()=>{}));let d=null;const u=v.url?t!==vt(v.url):!1,w=v.route?r.id!==v.route.id:!1,f=Ln(v.url,n);let m=!1;const p=l.map((g,y)=>{var D;const b=v.branch[y],k=!!(g!=null&&g[0])&&((b==null?void 0:b.loader)!==g[1]||se(m,w,u,f,(D=b.server)==null?void 0:D.uses,a));return k&&(m=!0),k});if(p.some(Boolean)){try{d=await Oe(n,p)}catch(g){const y=await H(g,{url:n,params:a,route:{id:t}});return J.has(s)?ie({error:y,url:n,params:a,route:r}):kt({status:pt(g),error:y,url:n,route:r})}if(d.type==="redirect")return d}const h=d==null?void 0:d.nodes;let _=!1;const R=l.map(async(g,y)=>{var Rt;if(!g)return;const b=v.branch[y],k=h==null?void 0:h[y];if((!k||k.type==="skip")&&g[1]===(b==null?void 0:b.loader)&&!se(_,w,u,f,(Rt=b.universal)==null?void 0:Rt.uses,a))return b;if(_=!0,(k==null?void 0:k.type)==="error")throw k;return Ht({loader:g[1],url:n,params:a,route:r,parent:async()=>{var Jt;const zt={};for(let It=0;It{});const I=[];for(let g=0;gPromise.resolve({}),server_data_node:Kt(s)}),c={node:await gt(),loader:gt,universal:null,server:null,data:null};return _t({url:n,params:r,branch:[o,c],status:t,error:e,route:null})}catch(o){if(o instanceof Bt)return Ue(new URL(o.location,location.href),{},0);throw o}}async function xn(t){const e=t.href;if(ht.has(e))return ht.get(e);let n;try{const a=(async()=>{let r=await S.hooks.reroute({url:new URL(t),fetch:async(s,i)=>Te(s,i,t).promise})??t;if(typeof r=="string"){const s=new URL(t);S.hash?s.hash=r:s.pathname=r,r=s}return r})();ht.set(e,a),n=await a}catch{ht.delete(e);return}return n}async function Et(t,e){if(t&&!At(t,x,S.hash)){const n=await xn(t);if(!n)return;const a=Pn(n);for(const r of qt){const s=r.exec(a);if(s)return{id:vt(t),invalidating:e,route:r,params:Ve(s),url:t}}}}function Pn(t){return Fe(S.hash?t.hash.replace(/^#/,"").replace(/[?#].+/,""):t.pathname.slice(x.length))||"/"}function vt(t){return(S.hash?t.hash.replace(/^#/,""):t.pathname)+t.search}function Pe({url:t,type:e,intent:n,delta:a}){let r=!1;const s=Wt(v,n,t,e);a!==void 0&&(s.navigation.delta=a);const i={...s.navigation,cancel:()=>{r=!0,s.reject(new Error("navigation cancelled"))}};return et||Se.forEach(o=>o(i)),r?null:s}async function X({type:t,url:e,popped:n,keepfocus:a,noscroll:r,replace_state:s,state:i={},redirect_count:o=0,nav_token:c={},accept:l=re,block:d=re}){const u=F;F=c;const w=await Et(e,!1),f=t==="enter"?Wt(v,w,e,t):Pe({url:e,type:t,delta:n==null?void 0:n.delta,intent:w});if(!f){d(),F===c&&(F=u);return}const m=E,p=T;l(),et=!0,yt&&f.navigation.type!=="enter"&&$.navigating.set(Q.current=f.navigation);let h=w&&await xe(w);if(!h){if(At(e,x,S.hash))return await K(e);h=await Ce(e,{id:null},await H(new Ft(404,"Not Found",`Not found: ${e.pathname}`),{url:e,params:{},route:{id:null}}),404)}if(e=(w==null?void 0:w.url)||e,F!==c)return f.reject(new Error("navigation aborted")),!1;if(h.type==="redirect")if(o>=20)h=await kt({status:500,error:await H(new Error("Redirect loop"),{url:e,params:{},route:{id:null}}),url:e,route:{id:null}});else return await Ue(new URL(h.location,e).href,{},o+1,c),!1;else h.props.page.status>=400&&await $.updated.check()&&(await Ae(),await K(e));if(In(),Vt(m),Re(p),h.props.page.url.pathname!==e.pathname&&(e.pathname=h.props.page.url.pathname),i=n?n.state:i,!n){const g=s?0:1,y={[G]:E+=g,[Z]:T+=g,[me]:i};(s?history.replaceState:history.pushState).call(history,y,"",e),s||En(E,T)}if(L=null,h.props.page.state=i,yt){v=h.state,h.props.page&&(h.props.page.url=e);const g=(await Promise.all(Array.from(Rn,y=>y(f.navigation)))).filter(y=>typeof y=="function");if(g.length>0){let y=function(){g.forEach(b=>{z.delete(b)})};g.push(y),g.forEach(b=>{z.add(b)})}Ee.$set(h.props),vn(h.props.page),ke=!0}else Le(h,Nt,!1);const{activeElement:_}=document;await De();const R=n?n.scroll:r?Dt():null;if(ae){const g=e.hash&&document.getElementById(decodeURIComponent(S.hash?e.hash.split("#")[2]??"":e.hash.slice(1)));R?scrollTo(R.x,R.y):g?g.scrollIntoView():scrollTo(0,0)}const I=document.activeElement!==_&&document.activeElement!==document.body;!a&&!I&&$n(),ae=!0,h.props.page&&Object.assign(U,h.props.page),et=!1,t==="popstate"&&Ie(T),f.fulfil(void 0),z.forEach(g=>g(f.navigation)),$.navigating.set(Q.current=null)}async function Ce(t,e,n,a){return t.origin===bt&&t.pathname===location.pathname&&!Mt?await kt({status:a,error:n,url:t,route:e}):await K(t)}function Cn(){let t,e,n;j.addEventListener("mousemove",o=>{const c=o.target;clearTimeout(t),t=setTimeout(()=>{s(c,B.hover)},20)});function a(o){o.defaultPrevented||s(o.composedPath()[0],B.tap)}j.addEventListener("mousedown",a),j.addEventListener("touchstart",a,{passive:!0});const r=new IntersectionObserver(o=>{for(const c of o)c.isIntersecting&&(Pt(new URL(c.target.href)),r.unobserve(c.target))},{threshold:0});async function s(o,c){const l=_e(o,j),d=l===e&&c>=n;if(!l||d)return;const{url:u,external:w,download:f}=Ct(l,x,S.hash);if(w||f)return;const m=dt(l),p=u&&vt(v.url)===vt(u);if(!(m.reload||p))if(c<=m.preload_data){e=l,n=B.tap;const h=await Et(u,!1);if(!h)return;Un(h)}else c<=m.preload_code&&(e=l,n=c,Pt(u))}function i(){r.disconnect();for(const o of j.querySelectorAll("a")){const{url:c,external:l,download:d}=Ct(o,x,S.hash);if(l||d)continue;const u=dt(o);u.reload||(u.preload_code===B.viewport&&r.observe(o),u.preload_code===B.eager&&Pt(c))}}z.add(i),i()}function H(t,e){if(t instanceof St)return t.body;const n=pt(t),a=yn(t);return S.hooks.handleError({error:t,event:e,status:n,message:a})??{message:a}}function On(t){if(typeof t=="function")mt.push(t);else{const{href:e}=new URL(t,location.href);mt.push(n=>n.href===e)}}function Nn(){var e;history.scrollRestoration="manual",addEventListener("beforeunload",n=>{let a=!1;if(oe(),!et){const r=Wt(v,void 0,null,"leave"),s={...r.navigation,cancel:()=>{a=!0,r.reject(new Error("navigation cancelled"))}};Se.forEach(i=>i(s))}a?(n.preventDefault(),n.returnValue=""):history.scrollRestoration="auto"}),addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&oe()}),(e=navigator.connection)!=null&&e.saveData||Cn(),j.addEventListener("click",async n=>{if(n.button||n.which!==1||n.metaKey||n.ctrlKey||n.shiftKey||n.altKey||n.defaultPrevented)return;const a=_e(n.composedPath()[0],j);if(!a)return;const{url:r,external:s,target:i,download:o}=Ct(a,x,S.hash);if(!r)return;if(i==="_parent"||i==="_top"){if(window.parent!==window)return}else if(i&&i!=="_self")return;const c=dt(a);if(!(a instanceof SVGAElement)&&r.protocol!==location.protocol&&!(r.protocol==="https:"||r.protocol==="http:")||o)return;const[d,u]=(S.hash?r.hash.replace(/^#/,""):r.href).split("#"),w=d===Lt(location);if(s||c.reload&&(!w||!u)){Pe({url:r,type:"link"})?et=!0:n.preventDefault();return}if(u!==void 0&&w){const[,f]=v.url.href.split("#");if(f===u){if(n.preventDefault(),u===""||u==="top"&&a.ownerDocument.getElementById("top")===null)window.scrollTo({top:0});else{const m=a.ownerDocument.getElementById(decodeURIComponent(u));m&&(m.scrollIntoView(),m.focus())}return}if(W=!0,Vt(E),t(r),!c.replace_state)return;W=!1}n.preventDefault(),await new Promise(f=>{requestAnimationFrame(()=>{setTimeout(f,0)}),setTimeout(f,100)}),await X({type:"link",url:r,keepfocus:c.keepfocus,noscroll:c.noscroll,replace_state:c.replace_state??r.href===location.href})}),j.addEventListener("submit",n=>{if(n.defaultPrevented)return;const a=HTMLFormElement.prototype.cloneNode.call(n.target),r=n.submitter;if(((r==null?void 0:r.formTarget)||a.target)==="_blank"||((r==null?void 0:r.formMethod)||a.method)!=="get")return;const o=new URL((r==null?void 0:r.hasAttribute("formaction"))&&(r==null?void 0:r.formAction)||a.action);if(At(o,x,!1))return;const c=n.target,l=dt(c);if(l.reload)return;n.preventDefault(),n.stopPropagation();const d=new FormData(c),u=r==null?void 0:r.getAttribute("name");u&&d.append(u,(r==null?void 0:r.getAttribute("value"))??""),o.search=new URLSearchParams(d).toString(),X({type:"form",url:o,keepfocus:l.keepfocus,noscroll:l.noscroll,replace_state:l.replace_state??o.href===location.href})}),addEventListener("popstate",async n=>{var a;if((a=n.state)!=null&&a[G]){const r=n.state[G];if(F={},r===E)return;const s=V[r],i=n.state[me]??{},o=new URL(n.state[nn]??location.href),c=n.state[Z],l=v.url?Lt(location)===Lt(v.url):!1;if(c===T&&(ke||l)){i!==U.state&&(U.state=i),t(o),V[E]=Dt(),s&&scrollTo(s.x,s.y),E=r;return}const u=r-E;await X({type:"popstate",url:o,popped:{state:i,scroll:s,delta:u},accept:()=>{E=r,T=c},block:()=>{history.go(-u)},nav_token:F})}else if(!W){const r=new URL(location.href);t(r),S.hash&&location.reload()}}),addEventListener("hashchange",()=>{W&&(W=!1,history.replaceState({...history.state,[G]:++E,[Z]:T},"",location.href))});for(const n of document.querySelectorAll("link"))kn.has(n.rel)&&(n.href=n.href);addEventListener("pageshow",n=>{n.persisted&&$.navigating.set(Q.current=null)});function t(n){v.url=U.url=n,$.page.set(Yt(U)),$.page.notify()}}async function jn(t,{status:e=200,error:n,node_ids:a,params:r,route:s,server_route:i,data:o,form:c}){Mt=!0;const l=new URL(location.href);let d;({params:r={},route:s={id:null}}=await Et(l,!1)||{}),d=qt.find(({id:f})=>f===s.id);let u,w=!0;try{const f=a.map(async(p,h)=>{const _=o[h];return _!=null&&_.uses&&(_.uses=Ne(_.uses)),Ht({loader:S.nodes[p],url:l,params:r,route:s,parent:async()=>{const R={};for(let I=0;Ii?"1":"0").join(""));const a=window.fetch,r=await a(n.href,{});if(!r.ok){let i;throw(s=r.headers.get("content-type"))!=null&&s.includes("application/json")?i=await r.json():r.status===404?i="Not Found":r.status===500&&(i="Internal Error"),new St(r.status,i)}return new Promise(async i=>{var w;const o=new Map,c=r.body.getReader(),l=new TextDecoder;function d(f){return dn(f,{...S.decoders,Promise:m=>new Promise((p,h)=>{o.set(m,{fulfil:p,reject:h})})})}let u="";for(;;){const{done:f,value:m}=await c.read();if(f&&!u)break;for(u+=!m&&u?` 2 | `:l.decode(m,{stream:!0});;){const p=u.indexOf(` 3 | `);if(p===-1)break;const h=JSON.parse(u.slice(0,p));if(u=u.slice(p+1),h.type==="redirect")return i(h);if(h.type==="data")(w=h.nodes)==null||w.forEach(_=>{(_==null?void 0:_.type)==="data"&&(_.uses=Ne(_.uses),_.data=d(_.data))}),i(h);else if(h.type==="chunk"){const{id:_,data:R,error:I}=h,g=o.get(_);o.delete(_),I?g.reject(d(I)):g.fulfil(d(R))}}}})}function Ne(t){return{dependencies:new Set((t==null?void 0:t.dependencies)??[]),params:new Set((t==null?void 0:t.params)??[]),parent:!!(t!=null&&t.parent),route:!!(t!=null&&t.route),url:!!(t!=null&&t.url),search_params:new Set((t==null?void 0:t.search_params)??[])}}function $n(){const t=document.querySelector("[autofocus]");if(t)t.focus();else{const e=document.body,n=e.getAttribute("tabindex");e.tabIndex=-1,e.focus({preventScroll:!0,focusVisible:!1}),n!==null?e.setAttribute("tabindex",n):e.removeAttribute("tabindex");const a=getSelection();if(a&&a.type!=="None"){const r=[];for(let s=0;s{if(a.rangeCount===r.length){for(let s=0;s{r=d,s=u});return i.catch(()=>{}),{navigation:{from:{params:t.params,route:{id:((c=t.route)==null?void 0:c.id)??null},url:t.url},to:n&&{params:(e==null?void 0:e.params)??null,route:{id:((l=e==null?void 0:e.route)==null?void 0:l.id)??null},url:n},willUnload:!e,type:a,complete:i},fulfil:r,reject:s}}function Yt(t){return{data:t.data,error:t.error,form:t.form,params:t.params,route:t.route,state:t.state,status:t.status,url:t.url}}function Dn(t){const e=new URL(t);return e.hash=decodeURIComponent(t.hash),e}export{Kn as a,qn as l,U as p,$ as s}; 4 | -------------------------------------------------------------------------------- /docs/_app/immutable/chunks/DcvpZBWZ.js: -------------------------------------------------------------------------------- 1 | import{u as o,j as t,l as c,k as u}from"./kMK1T_J2.js";function l(n){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function r(n){t===null&&l(),c&&t.l!==null?a(t).m.push(n):o(()=>{const e=u(n);if(typeof e=="function")return e})}function a(n){var e=n.l;return e.u??(e.u={a:[],b:[],m:[]})}export{r as o}; 2 | -------------------------------------------------------------------------------- /docs/_app/immutable/chunks/HmH_TjvH.js: -------------------------------------------------------------------------------- 1 | import{x as f,X as p,Y as h,Z as E,v as _,h as d,i as o,a as T,I as i,s as g}from"./kMK1T_J2.js";function x(n){var t=document.createElement("template");return t.innerHTML=n,t.content}function r(n,t){var e=_;e.nodes_start===null&&(e.nodes_start=n,e.nodes_end=t)}function M(n,t){var e=(t&h)!==0,c=(t&E)!==0,a,m=!n.startsWith("");return()=>{if(d)return r(o,null),o;a===void 0&&(a=x(m?n:""+n),e||(a=f(a)));var s=c||p?document.importNode(a,!0):a.cloneNode(!0);if(e){var l=f(s),v=s.lastChild;r(l,v)}else r(s,s);return s}}function N(n=""){if(!d){var t=i(n+"");return r(t,t),t}var e=o;return e.nodeType!==3&&(e.before(e=i()),g(e)),r(e,e),e}function I(){if(d)return r(o,null),o;var n=document.createDocumentFragment(),t=document.createComment(""),e=i();return n.append(t,e),r(t,e),n}function L(n,t){if(d){_.nodes_end=o,T();return}n!==null&&n.before(t)}const y="5";var u;typeof window<"u"&&((u=window.__svelte??(window.__svelte={})).v??(u.v=new Set)).add(y);export{r as a,L as b,I as c,N as d,M as t}; 2 | -------------------------------------------------------------------------------- /docs/_app/immutable/chunks/kMK1T_J2.js: -------------------------------------------------------------------------------- 1 | var on=Array.isArray,_n=Array.prototype.indexOf,$n=Array.from,zn=Object.defineProperty,V=Object.getOwnPropertyDescriptor,cn=Object.getOwnPropertyDescriptors,vn=Object.prototype,hn=Array.prototype,Pt=Object.getPrototypeOf,kt=Object.isExtensible;const Wn=()=>{};function Xn(t){return typeof(t==null?void 0:t.then)=="function"}function Jn(t){return t()}function Ct(t){for(var e=0;e{r.d=!0})}function we(t){const e=p;if(e!==null){const u=e.e;if(u!==null){var n=h,r=v;e.e=null;try{for(var l=0;l{var s=v;j(a);var f=i();return j(s),f};return r&&n.set("length",O(t.length)),new Proxy(t,{defineProperty(i,s,f){(!("value"in f)||f.configurable===!1||f.enumerable===!1||f.writable===!1)&&Tn();var _=n.get(s);return _===void 0?(_=u(()=>O(f.value)),n.set(s,_)):S(_,u(()=>L(f.value))),!0},deleteProperty(i,s){var f=n.get(s);if(f===void 0)s in i&&(n.set(s,u(()=>O(E))),dt(l));else{if(r&&typeof s=="string"){var _=n.get("length"),o=Number(s);Number.isInteger(o)&&o<_.v&&S(_,o)}S(f,E),dt(l)}return!0},get(i,s,f){var A;if(s===G)return t;var _=n.get(s),o=s in i;if(_===void 0&&(!o||(A=V(i,s))!=null&&A.writable)&&(_=u(()=>O(L(o?i[s]:E))),n.set(s,_)),_!==void 0){var c=U(_);return c===E?void 0:c}return Reflect.get(i,s,f)},getOwnPropertyDescriptor(i,s){var f=Reflect.getOwnPropertyDescriptor(i,s);if(f&&"value"in f){var _=n.get(s);_&&(f.value=U(_))}else if(f===void 0){var o=n.get(s),c=o==null?void 0:o.v;if(o!==void 0&&c!==E)return{enumerable:!0,configurable:!0,value:c,writable:!0}}return f},has(i,s){var c;if(s===G)return!0;var f=n.get(s),_=f!==void 0&&f.v!==E||Reflect.has(i,s);if(f!==void 0||h!==null&&(!_||(c=V(i,s))!=null&&c.writable)){f===void 0&&(f=u(()=>O(_?L(i[s]):E)),n.set(s,f));var o=U(f);if(o===E)return!1}return _},set(i,s,f,_){var Rt;var o=n.get(s),c=s in i;if(r&&s==="length")for(var A=f;AO(E)),n.set(A+"",Q))}o===void 0?(!c||(Rt=V(i,s))!=null&&Rt.writable)&&(o=u(()=>O(void 0)),S(o,u(()=>L(f))),n.set(s,o)):(c=o.v!==E,S(o,u(()=>L(f))));var tt=Reflect.getOwnPropertyDescriptor(i,s);if(tt!=null&&tt.set&&tt.set.call(_,f),!c){if(r&&typeof s=="string"){var bt=n.get("length"),pt=Number(s);Number.isInteger(pt)&&pt>=bt.v&&S(bt,pt+1)}dt(l)}return!0},ownKeys(i){U(l);var s=Reflect.ownKeys(i).filter(o=>{var c=n.get(o);return c===void 0||c.v!==E});for(var[f,_]of n)_.v!==E&&!(f in i)&&s.push(f);return s},setPrototypeOf(){An()}})}function dt(t,e=1){S(t,t.v+e)}function Tt(t){var e=x|D,n=v!==null&&(v.f&x)!==0?v:null;return h===null||n!==null&&(n.f&m)!==0?e|=m:h.f|=qt,{ctx:p,deps:null,effects:null,equals:Lt,f:e,fn:t,reactions:null,rv:0,v:null,wv:0,parent:n??h}}function ye(t){const e=Tt(t);return rn(e),e}function Ee(t){const e=Tt(t);return e.equals=Yt,e}function Bt(t){var e=t.effects;if(e!==null){t.effects=null;for(var n=0;nnew Promise(r=>{n.outro?qn(e,()=>{F(e),r(void 0)}):(F(e),r(void 0))})}function zt(t){return H(Ft,t,!1)}function Pn(t){return H(ut,t,!0)}function Ce(t,e=[],n=Tt){const r=e.map(n);return Cn(()=>t(...r.map(U)))}function Cn(t,e=0){return H(ut|mt|e,t,!0)}function Fe(t,e=!0){return H(ut|I,t,!0,e)}function Wt(t){var e=t.teardown;if(e!==null){const n=X,r=v;St(!0),j(null);try{e.call(null)}finally{St(n),j(r)}}}function Xt(t,e=!1){var n=t.first;for(t.first=t.last=null;n!==null;){var r=n.next;(n.f&B)!==0?n.parent=null:F(n,e),n=r}}function Fn(t){for(var e=t.first;e!==null;){var n=e.next;(e.f&I)===0&&F(e),e=n}}function F(t,e=!0){var n=!1;(e||(t.f&dn)!==0)&&t.nodes_start!==null&&(Mn(t.nodes_start,t.nodes_end),n=!0),Xt(t,e&&!n),it(t,0),R(t,ot);var r=t.transitions;if(r!==null)for(const a of r)a.stop();Wt(t);var l=t.parent;l!==null&&l.first!==null&&Jt(t),t.next=t.prev=t.teardown=t.ctx=t.deps=t.fn=t.nodes_start=t.nodes_end=null}function Mn(t,e){for(;t!==null;){var n=t===e?null:q(t);t.remove(),t=n}}function Jt(t){var e=t.parent,n=t.prev,r=t.next;n!==null&&(n.next=r),r!==null&&(r.prev=n),e!==null&&(e.first===t&&(e.first=r),e.last===t&&(e.last=n))}function qn(t,e){var n=[];Qt(t,n,!0),Ln(n,()=>{F(t),e&&e()})}function Ln(t,e){var n=t.length;if(n>0){var r=()=>--n||e();for(var l of t)l.out(r)}else e()}function Qt(t,e,n){if((t.f&Y)===0){if(t.f^=Y,t.transitions!==null)for(const u of t.transitions)(u.is_global||n)&&e.push(u);for(var r=t.first;r!==null;){var l=r.next,a=(r.f&Mt)!==0||(r.f&I)!==0;Qt(r,e,a?n:!1),r=l}}}function Me(t){tn(t,!0)}function tn(t,e){if((t.f&Y)!==0){t.f^=Y,(t.f&y)===0&&(t.f^=y),J(t)&&(R(t,D),ht(t));for(var n=t.first;n!==null;){var r=n.next,l=(n.f&Mt)!==0||(n.f&I)!==0;tn(n,l?e:!1),n=r}if(t.transitions!==null)for(const a of t.transitions)(a.is_global||e)&&a.in()}}const Yn=typeof requestIdleCallback>"u"?t=>setTimeout(t,1):requestIdleCallback;let z=[],W=[];function nn(){var t=z;z=[],Ct(t)}function en(){var t=W;W=[],Ct(t)}function qe(t){z.length===0&&queueMicrotask(nn),z.push(t)}function Le(t){W.length===0&&Yn(en),W.push(t)}function Ot(){z.length>0&&nn(),W.length>0&&en()}let nt=!1,lt=!1,at=null,P=!1,X=!1;function St(t){X=t}let K=[];let v=null,k=!1;function j(t){v=t}let h=null;function st(t){h=t}let w=null;function rn(t){v!==null&&v.f&wt&&(w===null?w=[t]:w.push(t))}let d=null,g=0,T=null;function jn(t){T=t}let ln=1,ft=0,N=!1;function an(){return++ln}function J(t){var o;var e=t.f;if((e&D)!==0)return!0;if((e&M)!==0){var n=t.deps,r=(e&m)!==0;if(n!==null){var l,a,u=(e&rt)!==0,i=r&&h!==null&&!N,s=n.length;if(u||i){var f=t,_=f.parent;for(l=0;lt.wv)return!0}(!r||h!==null&&!N)&&R(t,y)}return!1}function Bn(t,e){for(var n=e;n!==null;){if((n.f&et)!==0)try{n.fn(t);return}catch{n.f^=et}n=n.parent}throw nt=!1,t}function Nt(t){return(t.f&ot)===0&&(t.parent===null||(t.parent.f&et)===0)}function vt(t,e,n,r){if(nt){if(n===null&&(nt=!1),Nt(e))throw t;return}if(n!==null&&(nt=!0),Bn(t,e),Nt(e))throw t}function sn(t,e,n=!0){var r=t.reactions;if(r!==null)for(var l=0;l0)for(o.length=g+d.length,c=0;c0;){e++>1e3&&Un();var n=K,r=n.length;K=[];for(var l=0;l0;)lt=!0,un(),Ot();return e}async function Ye(){await Promise.resolve(),Kn()}function U(t){var e=t.f,n=(e&x)!==0;if(v!==null&&!k){if(!(w!=null&&w.includes(t))){var r=v.deps;t.rv{throw p});throw a}}finally{r.__root=e,delete r.currentTarget,R(w),A(i)}}}function nr(r,e){var s=e==null?"":typeof e=="object"?e+"":e;s!==(r.__t??(r.__t=r.nodeValue))&&(r.__t=s,r.nodeValue=s+"")}function tr(r,e){return H(r,e)}function ir(r,e){E(),e.intro=e.intro??!1;const s=e.target,c=b,o=y;try{for(var t=P(s);t&&(t.nodeType!==8||t.data!==Y);)t=j(t);if(!t)throw T;g(!0),D(t),q();const u=H(r,{...e,anchor:t});if(y===null||y.nodeType!==8||y.data!==B)throw $(),T;return g(!1),u}catch(u){if(u===T)return e.recover===!1&&z(),E(),F(s),g(!1),tr(r,e);throw u}finally{g(c),D(o)}}const v=new Map;function H(r,{target:e,anchor:s,props:c={},events:o,context:t,intro:u=!0}){E();var _=new Set,d=i=>{for(var a=0;a{var i=s??e.appendChild(K());return W(()=>{if(t){Q({});var a=U;a.c=t}o&&(c.$$events=o),b&&Z(i,null),h=r(i,c)||{},b&&(I.nodes_end=y),t&&X()}),()=>{var f;for(var a of _){e.removeEventListener(a,m);var n=v.get(a);--n===0?(document.removeEventListener(a,m),v.delete(a)):v.set(a,n)}O.delete(d),i!==s&&((f=i.parentNode)==null||f.removeChild(i))}});return S.set(h,w),h}let S=new WeakMap;function or(r,e){const s=S.get(r);return s?(S.delete(r),s(e)):Promise.resolve()}export{ir as h,tr as m,nr as s,or as u}; 2 | -------------------------------------------------------------------------------- /docs/_app/immutable/entry/app.xgYp5k3D.js: -------------------------------------------------------------------------------- 1 | const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../nodes/0.Bz8rZvjZ.js","../chunks/HmH_TjvH.js","../chunks/kMK1T_J2.js","../chunks/B3Bhwkeu.js","../assets/0.Bpj9i6gw.css","../nodes/1.Bq8NaAbW.js","../chunks/qGwwCbwR.js","../chunks/DbFpkIPw.js","../chunks/DcvpZBWZ.js","../nodes/2.BpMocShx.js","../chunks/5Ddco2D7.js","../assets/2.3L2Kqi-p.css"])))=>i.map(i=>d[i]); 2 | var J=t=>{throw TypeError(t)};var K=(t,e,r)=>e.has(t)||J("Cannot "+r);var y=(t,e,r)=>(K(t,e,"read from private field"),r?r.call(t):e.get(t)),q=(t,e,r)=>e.has(t)?J("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,r),B=(t,e,r,o)=>(K(t,e,"write to private field"),o?o.call(t,r):e.set(t,r),r);import{h as Z,a as se,b as ne,E as ie,g as oe,p as ce,i as ue,_ as fe,$ as le,k as z,a0 as de,a1 as p,a2 as _e,a3 as ve,a4 as he,V as H,a5 as me,a6 as ge,S as m,a7 as ye,a8 as Pe,a9 as T,aa as ee,ab as Ee,ac as te,l as be,ad as Re,ae as Se,af as Oe,ag as Ae,m as Le,J as we,P as xe,u as Ie,ah as N,ai as Te,M as C,L as ke,K as Ce,N as De,O as je,aj as U,W as qe}from"../chunks/kMK1T_J2.js";import{h as Be,m as Ne,u as Ue,s as Ve}from"../chunks/qGwwCbwR.js";import{t as re,b as x,c as V,d as Ye}from"../chunks/HmH_TjvH.js";import{i as Y}from"../chunks/5Ddco2D7.js";import{o as Me}from"../chunks/DcvpZBWZ.js";function M(t,e,r){Z&&se();var o=t,i,n;ne(()=>{i!==(i=e())&&(n&&(ce(n),n=null),i&&(n=oe(()=>r(o,i))))},ie),Z&&(o=ue)}function Q(t,e){return t===e||(t==null?void 0:t[p])===e}function F(t={},e,r,o){return fe(()=>{var i,n;return le(()=>{i=n,n=[],z(()=>{t!==r(...n)&&(e(t,...n),i&&Q(r(...i),t)&&e(null,...i))})}),()=>{de(()=>{n&&Q(r(...n),t)&&e(null,...n)})}}),t}let D=!1;function Fe(t){var e=D;try{return D=!1,[t(),D]}finally{D=e}}function X(t){var e;return((e=t.ctx)==null?void 0:e.d)??!1}function G(t,e,r,o){var j;var i=(r&Se)!==0,n=!be||(r&Re)!==0,a=(r&Ee)!==0,s=(r&Oe)!==0,d=!1,P;a?[P,d]=Fe(()=>t[e]):P=t[e];var _=p in t||te in t,v=a&&(((j=_e(t,e))==null?void 0:j.set)??(_&&e in t&&(l=>t[e]=l)))||void 0,h=o,w=!0,g=!1,c=()=>(g=!0,w&&(w=!1,s?h=z(o):h=o),h);P===void 0&&o!==void 0&&(v&&n&&ve(),P=c(),v&&v(P));var u;if(n)u=()=>{var l=t[e];return l===void 0?c():(w=!0,g=!1,l)};else{var O=(i?H:me)(()=>t[e]);O.f|=he,u=()=>{var l=m(O);return l!==void 0&&(h=void 0),l===void 0?h:l}}if((r&ge)===0)return u;if(v){var L=t.$$legacy;return function(l,A){return arguments.length>0?((!n||!A||L||d)&&v(A?u():l),l):u()}}var b=!1,R=ee(P),f=H(()=>{var l=u(),A=m(R);return b?(b=!1,A):R.v=l});return a&&m(f),i||(f.equals=ye),function(l,A){if(arguments.length>0){const I=A?m(f):n&&a?Pe(l):l;if(!f.equals(I)){if(b=!0,T(R,I),g&&h!==void 0&&(h=I),X(f))return l;z(()=>m(f))}return l}return X(f)?f.v:m(f)}}function Ge(t){return class extends We{constructor(e){super({component:t,...e})}}}var S,E;class We{constructor(e){q(this,S);q(this,E);var n;var r=new Map,o=(a,s)=>{var d=ee(s);return r.set(a,d),d};const i=new Proxy({...e.props||{},$$events:{}},{get(a,s){return m(r.get(s)??o(s,Reflect.get(a,s)))},has(a,s){return s===te?!0:(m(r.get(s)??o(s,Reflect.get(a,s))),Reflect.has(a,s))},set(a,s,d){return T(r.get(s)??o(s,d),d),Reflect.set(a,s,d)}});B(this,E,(e.hydrate?Be:Ne)(e.component,{target:e.target,anchor:e.anchor,props:i,context:e.context,intro:e.intro??!1,recover:e.recover})),(!((n=e==null?void 0:e.props)!=null&&n.$$host)||e.sync===!1)&&Ae(),B(this,S,i.$$events);for(const a of Object.keys(y(this,E)))a==="$set"||a==="$destroy"||a==="$on"||Le(this,a,{get(){return y(this,E)[a]},set(s){y(this,E)[a]=s},enumerable:!0});y(this,E).$set=a=>{Object.assign(i,a)},y(this,E).$destroy=()=>{Ue(y(this,E))}}$set(e){y(this,E).$set(e)}$on(e,r){y(this,S)[e]=y(this,S)[e]||[];const o=(...i)=>r.call(this,...i);return y(this,S)[e].push(o),()=>{y(this,S)[e]=y(this,S)[e].filter(i=>i!==o)}}$destroy(){y(this,E).$destroy()}}S=new WeakMap,E=new WeakMap;const ze="modulepreload",Je=function(t,e){return new URL(t,e).href},$={},W=function(e,r,o){let i=Promise.resolve();if(r&&r.length>0){let a=function(_){return Promise.all(_.map(v=>Promise.resolve(v).then(h=>({status:"fulfilled",value:h}),h=>({status:"rejected",reason:h}))))};const s=document.getElementsByTagName("link"),d=document.querySelector("meta[property=csp-nonce]"),P=(d==null?void 0:d.nonce)||(d==null?void 0:d.getAttribute("nonce"));i=a(r.map(_=>{if(_=Je(_,o),_ in $)return;$[_]=!0;const v=_.endsWith(".css"),h=v?'[rel="stylesheet"]':"";if(!!o)for(let c=s.length-1;c>=0;c--){const u=s[c];if(u.href===_&&(!v||u.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${_}"]${h}`))return;const g=document.createElement("link");if(g.rel=v?"stylesheet":ze,v||(g.as="script"),g.crossOrigin="",g.href=_,P&&g.setAttribute("nonce",P),document.head.appendChild(g),v)return new Promise((c,u)=>{g.addEventListener("load",c),g.addEventListener("error",()=>u(new Error(`Unable to preload CSS for ${_}`)))})}))}function n(a){const s=new Event("vite:preloadError",{cancelable:!0});if(s.payload=a,window.dispatchEvent(s),!s.defaultPrevented)throw a}return i.then(a=>{for(const s of a||[])s.status==="rejected"&&n(s.reason);return e().catch(n)})},st={};var Ke=re('
'),Ze=re(" ",1);function He(t,e){we(e,!0);let r=G(e,"components",23,()=>[]),o=G(e,"data_0",3,null),i=G(e,"data_1",3,null);xe(()=>e.stores.page.set(e.page)),Ie(()=>{e.stores,e.page,e.constructors,r(),e.form,o(),i(),e.stores.page.notify()});let n=N(!1),a=N(!1),s=N(null);Me(()=>{const c=e.stores.page.subscribe(()=>{m(n)&&(T(a,!0),Te().then(()=>{T(s,document.title||"untitled page",!0)}))});return T(n,!0),c});const d=U(()=>e.constructors[1]);var P=Ze(),_=C(P);{var v=c=>{var u=V();const O=U(()=>e.constructors[0]);var L=C(u);M(L,()=>m(O),(b,R)=>{F(R(b,{get data(){return o()},get form(){return e.form},children:(f,j)=>{var l=V(),A=C(l);M(A,()=>m(d),(I,ae)=>{F(ae(I,{get data(){return i()},get form(){return e.form}}),k=>r()[1]=k,()=>{var k;return(k=r())==null?void 0:k[1]})}),x(f,l)},$$slots:{default:!0}}),f=>r()[0]=f,()=>{var f;return(f=r())==null?void 0:f[0]})}),x(c,u)},h=c=>{var u=V();const O=U(()=>e.constructors[0]);var L=C(u);M(L,()=>m(O),(b,R)=>{F(R(b,{get data(){return o()},get form(){return e.form}}),f=>r()[0]=f,()=>{var f;return(f=r())==null?void 0:f[0]})}),x(c,u)};Y(_,c=>{e.constructors[1]?c(v):c(h,!1)})}var w=ke(_,2);{var g=c=>{var u=Ke(),O=De(u);{var L=b=>{var R=Ye();qe(()=>Ve(R,m(s))),x(b,R)};Y(O,b=>{m(a)&&b(L)})}je(u),x(c,u)};Y(w,c=>{m(n)&&c(g)})}x(t,P),Ce()}const nt=Ge(He),it=[()=>W(()=>import("../nodes/0.Bz8rZvjZ.js"),__vite__mapDeps([0,1,2,3,4]),import.meta.url),()=>W(()=>import("../nodes/1.Bq8NaAbW.js"),__vite__mapDeps([5,1,2,3,6,7,8]),import.meta.url),()=>W(()=>import("../nodes/2.BpMocShx.js"),__vite__mapDeps([9,1,2,6,10,11]),import.meta.url)],ot=[],ct={"/":[2]},Qe={handleError:({error:t})=>{console.error(t)},reroute:()=>{},transport:{}},Xe=Object.fromEntries(Object.entries(Qe.transport).map(([t,e])=>[t,e.decode])),ut=!1,ft=(t,e)=>Xe[t](e);export{ft as decode,Xe as decoders,ct as dictionary,ut as hash,Qe as hooks,st as matchers,it as nodes,nt as root,ot as server_loads}; 3 | -------------------------------------------------------------------------------- /docs/_app/immutable/entry/start.S8h0dDNw.js: -------------------------------------------------------------------------------- 1 | import{l as o,a as r}from"../chunks/DbFpkIPw.js";export{o as load_css,r as start}; 2 | -------------------------------------------------------------------------------- /docs/_app/immutable/nodes/0.Bz8rZvjZ.js: -------------------------------------------------------------------------------- 1 | import{t as i,b as f}from"../chunks/HmH_TjvH.js";import"../chunks/B3Bhwkeu.js";import{h as c,a as u,L as d,M as v,N as g,O as h}from"../chunks/kMK1T_J2.js";function m(s,a,r,e,n){var o;c&&u();var t=(o=a.$$slots)==null?void 0:o[r],l=!1;t===!0&&(t=a.children,l=!0),t===void 0||t(s,l?()=>e:e)}const p=!0,_=!1,j=Object.freeze(Object.defineProperty({__proto__:null,prerender:p,ssr:_},Symbol.toStringTag,{value:"Module"}));var b=i('

JS RegExp AST Viewer

GitHub
',1);function q(s,a){var r=b(),e=d(v(r),2),n=g(e);m(n,a,"default",{}),h(e),f(s,r)}export{q as component,j as universal}; 2 | -------------------------------------------------------------------------------- /docs/_app/immutable/nodes/1.Bq8NaAbW.js: -------------------------------------------------------------------------------- 1 | import{t as b,b as k}from"../chunks/HmH_TjvH.js";import"../chunks/B3Bhwkeu.js";import{j as x,P as $,u as i,Q as l,k as y,R as j,S as v,T as E,V as J,J as K,M as L,W as M,K as N,L as O,N as u,O as m}from"../chunks/kMK1T_J2.js";import{s as g}from"../chunks/qGwwCbwR.js";import{s as P,p as _}from"../chunks/DbFpkIPw.js";function Q(a=!1){const e=x,t=e.l.u;if(!t)return;let r=()=>E(e.s);if(a){let o=0,s={};const p=J(()=>{let n=!1;const c=e.s;for(const f in c)c[f]!==s[f]&&(s[f]=c[f],n=!0);return n&&o++,o});r=()=>v(p)}t.b.length&&$(()=>{d(e,r),l(t.b)}),i(()=>{const o=y(()=>t.m.map(j));return()=>{for(const s of o)typeof s=="function"&&s()}}),t.a.length&&i(()=>{d(e,r),l(t.a)})}function d(a,e){if(a.l.s)for(const t of a.l.s)v(t);e()}const R={get error(){return _.error},get status(){return _.status}};P.updated.check;const h=R;var S=b("

",1);function z(a,e){K(e,!1),Q();var t=S(),r=L(t),o=u(r,!0);m(r);var s=O(r,2),p=u(s,!0);m(s),M(()=>{var n;g(o,h.status),g(p,(n=h.error)==null?void 0:n.message)}),k(a,t),N()}export{z as component}; 2 | -------------------------------------------------------------------------------- /docs/_app/version.json: -------------------------------------------------------------------------------- 1 | {"version":"1746581147120"} -------------------------------------------------------------------------------- /docs/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leaysgur/js-regexp-ast-viewer/9956049d4840cc0f4d9e2a0aa3531f76c6bd4c59/docs/favicon.png -------------------------------------------------------------------------------- /docs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | JS RegExp AST Viewer 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 37 |
38 | 39 | 40 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "js-regexp-ast-viewer", 3 | "version": "0.0.1", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "js-regexp-ast-viewer", 9 | "version": "0.0.1", 10 | "dependencies": { 11 | "@eslint-community/regexpp": "^4.12.1", 12 | "regexp-tree": "^0.1.27", 13 | "regjsparser": "^0.12.0" 14 | }, 15 | "devDependencies": { 16 | "@sveltejs/adapter-static": "^3.0.8", 17 | "@sveltejs/kit": "^2.20.8", 18 | "@sveltejs/vite-plugin-svelte": "^5.0.3", 19 | "prettier": "^3.5.3", 20 | "prettier-plugin-svelte": "^3.3.3", 21 | "svelte": "^5.28.2", 22 | "svelte-check": "^4.1.7", 23 | "typescript": "^5.8.3", 24 | "vite": "^6.3.5", 25 | "vite-plugin-wasm": "^3.4.1" 26 | } 27 | }, 28 | "node_modules/@ampproject/remapping": { 29 | "version": "2.3.0", 30 | "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", 31 | "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", 32 | "dev": true, 33 | "license": "Apache-2.0", 34 | "dependencies": { 35 | "@jridgewell/gen-mapping": "^0.3.5", 36 | "@jridgewell/trace-mapping": "^0.3.24" 37 | }, 38 | "engines": { 39 | "node": ">=6.0.0" 40 | } 41 | }, 42 | "node_modules/@esbuild/aix-ppc64": { 43 | "version": "0.25.4", 44 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.4.tgz", 45 | "integrity": "sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==", 46 | "cpu": [ 47 | "ppc64" 48 | ], 49 | "dev": true, 50 | "license": "MIT", 51 | "optional": true, 52 | "os": [ 53 | "aix" 54 | ], 55 | "engines": { 56 | "node": ">=18" 57 | } 58 | }, 59 | "node_modules/@esbuild/android-arm": { 60 | "version": "0.25.4", 61 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.4.tgz", 62 | "integrity": "sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==", 63 | "cpu": [ 64 | "arm" 65 | ], 66 | "dev": true, 67 | "license": "MIT", 68 | "optional": true, 69 | "os": [ 70 | "android" 71 | ], 72 | "engines": { 73 | "node": ">=18" 74 | } 75 | }, 76 | "node_modules/@esbuild/android-arm64": { 77 | "version": "0.25.4", 78 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.4.tgz", 79 | "integrity": "sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==", 80 | "cpu": [ 81 | "arm64" 82 | ], 83 | "dev": true, 84 | "license": "MIT", 85 | "optional": true, 86 | "os": [ 87 | "android" 88 | ], 89 | "engines": { 90 | "node": ">=18" 91 | } 92 | }, 93 | "node_modules/@esbuild/android-x64": { 94 | "version": "0.25.4", 95 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.4.tgz", 96 | "integrity": "sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==", 97 | "cpu": [ 98 | "x64" 99 | ], 100 | "dev": true, 101 | "license": "MIT", 102 | "optional": true, 103 | "os": [ 104 | "android" 105 | ], 106 | "engines": { 107 | "node": ">=18" 108 | } 109 | }, 110 | "node_modules/@esbuild/darwin-arm64": { 111 | "version": "0.25.4", 112 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.4.tgz", 113 | "integrity": "sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==", 114 | "cpu": [ 115 | "arm64" 116 | ], 117 | "dev": true, 118 | "license": "MIT", 119 | "optional": true, 120 | "os": [ 121 | "darwin" 122 | ], 123 | "engines": { 124 | "node": ">=18" 125 | } 126 | }, 127 | "node_modules/@esbuild/darwin-x64": { 128 | "version": "0.25.4", 129 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.4.tgz", 130 | "integrity": "sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==", 131 | "cpu": [ 132 | "x64" 133 | ], 134 | "dev": true, 135 | "license": "MIT", 136 | "optional": true, 137 | "os": [ 138 | "darwin" 139 | ], 140 | "engines": { 141 | "node": ">=18" 142 | } 143 | }, 144 | "node_modules/@esbuild/freebsd-arm64": { 145 | "version": "0.25.4", 146 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.4.tgz", 147 | "integrity": "sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==", 148 | "cpu": [ 149 | "arm64" 150 | ], 151 | "dev": true, 152 | "license": "MIT", 153 | "optional": true, 154 | "os": [ 155 | "freebsd" 156 | ], 157 | "engines": { 158 | "node": ">=18" 159 | } 160 | }, 161 | "node_modules/@esbuild/freebsd-x64": { 162 | "version": "0.25.4", 163 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.4.tgz", 164 | "integrity": "sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==", 165 | "cpu": [ 166 | "x64" 167 | ], 168 | "dev": true, 169 | "license": "MIT", 170 | "optional": true, 171 | "os": [ 172 | "freebsd" 173 | ], 174 | "engines": { 175 | "node": ">=18" 176 | } 177 | }, 178 | "node_modules/@esbuild/linux-arm": { 179 | "version": "0.25.4", 180 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.4.tgz", 181 | "integrity": "sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==", 182 | "cpu": [ 183 | "arm" 184 | ], 185 | "dev": true, 186 | "license": "MIT", 187 | "optional": true, 188 | "os": [ 189 | "linux" 190 | ], 191 | "engines": { 192 | "node": ">=18" 193 | } 194 | }, 195 | "node_modules/@esbuild/linux-arm64": { 196 | "version": "0.25.4", 197 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.4.tgz", 198 | "integrity": "sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==", 199 | "cpu": [ 200 | "arm64" 201 | ], 202 | "dev": true, 203 | "license": "MIT", 204 | "optional": true, 205 | "os": [ 206 | "linux" 207 | ], 208 | "engines": { 209 | "node": ">=18" 210 | } 211 | }, 212 | "node_modules/@esbuild/linux-ia32": { 213 | "version": "0.25.4", 214 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.4.tgz", 215 | "integrity": "sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==", 216 | "cpu": [ 217 | "ia32" 218 | ], 219 | "dev": true, 220 | "license": "MIT", 221 | "optional": true, 222 | "os": [ 223 | "linux" 224 | ], 225 | "engines": { 226 | "node": ">=18" 227 | } 228 | }, 229 | "node_modules/@esbuild/linux-loong64": { 230 | "version": "0.25.4", 231 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.4.tgz", 232 | "integrity": "sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==", 233 | "cpu": [ 234 | "loong64" 235 | ], 236 | "dev": true, 237 | "license": "MIT", 238 | "optional": true, 239 | "os": [ 240 | "linux" 241 | ], 242 | "engines": { 243 | "node": ">=18" 244 | } 245 | }, 246 | "node_modules/@esbuild/linux-mips64el": { 247 | "version": "0.25.4", 248 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.4.tgz", 249 | "integrity": "sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==", 250 | "cpu": [ 251 | "mips64el" 252 | ], 253 | "dev": true, 254 | "license": "MIT", 255 | "optional": true, 256 | "os": [ 257 | "linux" 258 | ], 259 | "engines": { 260 | "node": ">=18" 261 | } 262 | }, 263 | "node_modules/@esbuild/linux-ppc64": { 264 | "version": "0.25.4", 265 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.4.tgz", 266 | "integrity": "sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==", 267 | "cpu": [ 268 | "ppc64" 269 | ], 270 | "dev": true, 271 | "license": "MIT", 272 | "optional": true, 273 | "os": [ 274 | "linux" 275 | ], 276 | "engines": { 277 | "node": ">=18" 278 | } 279 | }, 280 | "node_modules/@esbuild/linux-riscv64": { 281 | "version": "0.25.4", 282 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.4.tgz", 283 | "integrity": "sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==", 284 | "cpu": [ 285 | "riscv64" 286 | ], 287 | "dev": true, 288 | "license": "MIT", 289 | "optional": true, 290 | "os": [ 291 | "linux" 292 | ], 293 | "engines": { 294 | "node": ">=18" 295 | } 296 | }, 297 | "node_modules/@esbuild/linux-s390x": { 298 | "version": "0.25.4", 299 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.4.tgz", 300 | "integrity": "sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==", 301 | "cpu": [ 302 | "s390x" 303 | ], 304 | "dev": true, 305 | "license": "MIT", 306 | "optional": true, 307 | "os": [ 308 | "linux" 309 | ], 310 | "engines": { 311 | "node": ">=18" 312 | } 313 | }, 314 | "node_modules/@esbuild/linux-x64": { 315 | "version": "0.25.4", 316 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.4.tgz", 317 | "integrity": "sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==", 318 | "cpu": [ 319 | "x64" 320 | ], 321 | "dev": true, 322 | "license": "MIT", 323 | "optional": true, 324 | "os": [ 325 | "linux" 326 | ], 327 | "engines": { 328 | "node": ">=18" 329 | } 330 | }, 331 | "node_modules/@esbuild/netbsd-arm64": { 332 | "version": "0.25.4", 333 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.4.tgz", 334 | "integrity": "sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==", 335 | "cpu": [ 336 | "arm64" 337 | ], 338 | "dev": true, 339 | "license": "MIT", 340 | "optional": true, 341 | "os": [ 342 | "netbsd" 343 | ], 344 | "engines": { 345 | "node": ">=18" 346 | } 347 | }, 348 | "node_modules/@esbuild/netbsd-x64": { 349 | "version": "0.25.4", 350 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.4.tgz", 351 | "integrity": "sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==", 352 | "cpu": [ 353 | "x64" 354 | ], 355 | "dev": true, 356 | "license": "MIT", 357 | "optional": true, 358 | "os": [ 359 | "netbsd" 360 | ], 361 | "engines": { 362 | "node": ">=18" 363 | } 364 | }, 365 | "node_modules/@esbuild/openbsd-arm64": { 366 | "version": "0.25.4", 367 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.4.tgz", 368 | "integrity": "sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==", 369 | "cpu": [ 370 | "arm64" 371 | ], 372 | "dev": true, 373 | "license": "MIT", 374 | "optional": true, 375 | "os": [ 376 | "openbsd" 377 | ], 378 | "engines": { 379 | "node": ">=18" 380 | } 381 | }, 382 | "node_modules/@esbuild/openbsd-x64": { 383 | "version": "0.25.4", 384 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.4.tgz", 385 | "integrity": "sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==", 386 | "cpu": [ 387 | "x64" 388 | ], 389 | "dev": true, 390 | "license": "MIT", 391 | "optional": true, 392 | "os": [ 393 | "openbsd" 394 | ], 395 | "engines": { 396 | "node": ">=18" 397 | } 398 | }, 399 | "node_modules/@esbuild/sunos-x64": { 400 | "version": "0.25.4", 401 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.4.tgz", 402 | "integrity": "sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==", 403 | "cpu": [ 404 | "x64" 405 | ], 406 | "dev": true, 407 | "license": "MIT", 408 | "optional": true, 409 | "os": [ 410 | "sunos" 411 | ], 412 | "engines": { 413 | "node": ">=18" 414 | } 415 | }, 416 | "node_modules/@esbuild/win32-arm64": { 417 | "version": "0.25.4", 418 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.4.tgz", 419 | "integrity": "sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==", 420 | "cpu": [ 421 | "arm64" 422 | ], 423 | "dev": true, 424 | "license": "MIT", 425 | "optional": true, 426 | "os": [ 427 | "win32" 428 | ], 429 | "engines": { 430 | "node": ">=18" 431 | } 432 | }, 433 | "node_modules/@esbuild/win32-ia32": { 434 | "version": "0.25.4", 435 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.4.tgz", 436 | "integrity": "sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==", 437 | "cpu": [ 438 | "ia32" 439 | ], 440 | "dev": true, 441 | "license": "MIT", 442 | "optional": true, 443 | "os": [ 444 | "win32" 445 | ], 446 | "engines": { 447 | "node": ">=18" 448 | } 449 | }, 450 | "node_modules/@esbuild/win32-x64": { 451 | "version": "0.25.4", 452 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.4.tgz", 453 | "integrity": "sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==", 454 | "cpu": [ 455 | "x64" 456 | ], 457 | "dev": true, 458 | "license": "MIT", 459 | "optional": true, 460 | "os": [ 461 | "win32" 462 | ], 463 | "engines": { 464 | "node": ">=18" 465 | } 466 | }, 467 | "node_modules/@eslint-community/regexpp": { 468 | "version": "4.12.1", 469 | "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", 470 | "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", 471 | "license": "MIT", 472 | "engines": { 473 | "node": "^12.0.0 || ^14.0.0 || >=16.0.0" 474 | } 475 | }, 476 | "node_modules/@jridgewell/gen-mapping": { 477 | "version": "0.3.5", 478 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", 479 | "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", 480 | "dev": true, 481 | "license": "MIT", 482 | "dependencies": { 483 | "@jridgewell/set-array": "^1.2.1", 484 | "@jridgewell/sourcemap-codec": "^1.4.10", 485 | "@jridgewell/trace-mapping": "^0.3.24" 486 | }, 487 | "engines": { 488 | "node": ">=6.0.0" 489 | } 490 | }, 491 | "node_modules/@jridgewell/resolve-uri": { 492 | "version": "3.1.2", 493 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 494 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 495 | "dev": true, 496 | "license": "MIT", 497 | "engines": { 498 | "node": ">=6.0.0" 499 | } 500 | }, 501 | "node_modules/@jridgewell/set-array": { 502 | "version": "1.2.1", 503 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", 504 | "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", 505 | "dev": true, 506 | "license": "MIT", 507 | "engines": { 508 | "node": ">=6.0.0" 509 | } 510 | }, 511 | "node_modules/@jridgewell/sourcemap-codec": { 512 | "version": "1.5.0", 513 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", 514 | "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", 515 | "dev": true, 516 | "license": "MIT" 517 | }, 518 | "node_modules/@jridgewell/trace-mapping": { 519 | "version": "0.3.25", 520 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", 521 | "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", 522 | "dev": true, 523 | "license": "MIT", 524 | "dependencies": { 525 | "@jridgewell/resolve-uri": "^3.1.0", 526 | "@jridgewell/sourcemap-codec": "^1.4.14" 527 | } 528 | }, 529 | "node_modules/@polka/url": { 530 | "version": "1.0.0-next.28", 531 | "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.28.tgz", 532 | "integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==", 533 | "dev": true, 534 | "license": "MIT" 535 | }, 536 | "node_modules/@rollup/rollup-android-arm-eabi": { 537 | "version": "4.40.2", 538 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.2.tgz", 539 | "integrity": "sha512-JkdNEq+DFxZfUwxvB58tHMHBHVgX23ew41g1OQinthJ+ryhdRk67O31S7sYw8u2lTjHUPFxwar07BBt1KHp/hg==", 540 | "cpu": [ 541 | "arm" 542 | ], 543 | "dev": true, 544 | "license": "MIT", 545 | "optional": true, 546 | "os": [ 547 | "android" 548 | ] 549 | }, 550 | "node_modules/@rollup/rollup-android-arm64": { 551 | "version": "4.40.2", 552 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.40.2.tgz", 553 | "integrity": "sha512-13unNoZ8NzUmnndhPTkWPWbX3vtHodYmy+I9kuLxN+F+l+x3LdVF7UCu8TWVMt1POHLh6oDHhnOA04n8oJZhBw==", 554 | "cpu": [ 555 | "arm64" 556 | ], 557 | "dev": true, 558 | "license": "MIT", 559 | "optional": true, 560 | "os": [ 561 | "android" 562 | ] 563 | }, 564 | "node_modules/@rollup/rollup-darwin-arm64": { 565 | "version": "4.40.2", 566 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.40.2.tgz", 567 | "integrity": "sha512-Gzf1Hn2Aoe8VZzevHostPX23U7N5+4D36WJNHK88NZHCJr7aVMG4fadqkIf72eqVPGjGc0HJHNuUaUcxiR+N/w==", 568 | "cpu": [ 569 | "arm64" 570 | ], 571 | "dev": true, 572 | "license": "MIT", 573 | "optional": true, 574 | "os": [ 575 | "darwin" 576 | ] 577 | }, 578 | "node_modules/@rollup/rollup-darwin-x64": { 579 | "version": "4.40.2", 580 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.40.2.tgz", 581 | "integrity": "sha512-47N4hxa01a4x6XnJoskMKTS8XZ0CZMd8YTbINbi+w03A2w4j1RTlnGHOz/P0+Bg1LaVL6ufZyNprSg+fW5nYQQ==", 582 | "cpu": [ 583 | "x64" 584 | ], 585 | "dev": true, 586 | "license": "MIT", 587 | "optional": true, 588 | "os": [ 589 | "darwin" 590 | ] 591 | }, 592 | "node_modules/@rollup/rollup-freebsd-arm64": { 593 | "version": "4.40.2", 594 | "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.40.2.tgz", 595 | "integrity": "sha512-8t6aL4MD+rXSHHZUR1z19+9OFJ2rl1wGKvckN47XFRVO+QL/dUSpKA2SLRo4vMg7ELA8pzGpC+W9OEd1Z/ZqoQ==", 596 | "cpu": [ 597 | "arm64" 598 | ], 599 | "dev": true, 600 | "license": "MIT", 601 | "optional": true, 602 | "os": [ 603 | "freebsd" 604 | ] 605 | }, 606 | "node_modules/@rollup/rollup-freebsd-x64": { 607 | "version": "4.40.2", 608 | "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.40.2.tgz", 609 | "integrity": "sha512-C+AyHBzfpsOEYRFjztcYUFsH4S7UsE9cDtHCtma5BK8+ydOZYgMmWg1d/4KBytQspJCld8ZIujFMAdKG1xyr4Q==", 610 | "cpu": [ 611 | "x64" 612 | ], 613 | "dev": true, 614 | "license": "MIT", 615 | "optional": true, 616 | "os": [ 617 | "freebsd" 618 | ] 619 | }, 620 | "node_modules/@rollup/rollup-linux-arm-gnueabihf": { 621 | "version": "4.40.2", 622 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.40.2.tgz", 623 | "integrity": "sha512-de6TFZYIvJwRNjmW3+gaXiZ2DaWL5D5yGmSYzkdzjBDS3W+B9JQ48oZEsmMvemqjtAFzE16DIBLqd6IQQRuG9Q==", 624 | "cpu": [ 625 | "arm" 626 | ], 627 | "dev": true, 628 | "license": "MIT", 629 | "optional": true, 630 | "os": [ 631 | "linux" 632 | ] 633 | }, 634 | "node_modules/@rollup/rollup-linux-arm-musleabihf": { 635 | "version": "4.40.2", 636 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.40.2.tgz", 637 | "integrity": "sha512-urjaEZubdIkacKc930hUDOfQPysezKla/O9qV+O89enqsqUmQm8Xj8O/vh0gHg4LYfv7Y7UsE3QjzLQzDYN1qg==", 638 | "cpu": [ 639 | "arm" 640 | ], 641 | "dev": true, 642 | "license": "MIT", 643 | "optional": true, 644 | "os": [ 645 | "linux" 646 | ] 647 | }, 648 | "node_modules/@rollup/rollup-linux-arm64-gnu": { 649 | "version": "4.40.2", 650 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.40.2.tgz", 651 | "integrity": "sha512-KlE8IC0HFOC33taNt1zR8qNlBYHj31qGT1UqWqtvR/+NuCVhfufAq9fxO8BMFC22Wu0rxOwGVWxtCMvZVLmhQg==", 652 | "cpu": [ 653 | "arm64" 654 | ], 655 | "dev": true, 656 | "license": "MIT", 657 | "optional": true, 658 | "os": [ 659 | "linux" 660 | ] 661 | }, 662 | "node_modules/@rollup/rollup-linux-arm64-musl": { 663 | "version": "4.40.2", 664 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.40.2.tgz", 665 | "integrity": "sha512-j8CgxvfM0kbnhu4XgjnCWJQyyBOeBI1Zq91Z850aUddUmPeQvuAy6OiMdPS46gNFgy8gN1xkYyLgwLYZG3rBOg==", 666 | "cpu": [ 667 | "arm64" 668 | ], 669 | "dev": true, 670 | "license": "MIT", 671 | "optional": true, 672 | "os": [ 673 | "linux" 674 | ] 675 | }, 676 | "node_modules/@rollup/rollup-linux-loongarch64-gnu": { 677 | "version": "4.40.2", 678 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.40.2.tgz", 679 | "integrity": "sha512-Ybc/1qUampKuRF4tQXc7G7QY9YRyeVSykfK36Y5Qc5dmrIxwFhrOzqaVTNoZygqZ1ZieSWTibfFhQ5qK8jpWxw==", 680 | "cpu": [ 681 | "loong64" 682 | ], 683 | "dev": true, 684 | "license": "MIT", 685 | "optional": true, 686 | "os": [ 687 | "linux" 688 | ] 689 | }, 690 | "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { 691 | "version": "4.40.2", 692 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.40.2.tgz", 693 | "integrity": "sha512-3FCIrnrt03CCsZqSYAOW/k9n625pjpuMzVfeI+ZBUSDT3MVIFDSPfSUgIl9FqUftxcUXInvFah79hE1c9abD+Q==", 694 | "cpu": [ 695 | "ppc64" 696 | ], 697 | "dev": true, 698 | "license": "MIT", 699 | "optional": true, 700 | "os": [ 701 | "linux" 702 | ] 703 | }, 704 | "node_modules/@rollup/rollup-linux-riscv64-gnu": { 705 | "version": "4.40.2", 706 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.40.2.tgz", 707 | "integrity": "sha512-QNU7BFHEvHMp2ESSY3SozIkBPaPBDTsfVNGx3Xhv+TdvWXFGOSH2NJvhD1zKAT6AyuuErJgbdvaJhYVhVqrWTg==", 708 | "cpu": [ 709 | "riscv64" 710 | ], 711 | "dev": true, 712 | "license": "MIT", 713 | "optional": true, 714 | "os": [ 715 | "linux" 716 | ] 717 | }, 718 | "node_modules/@rollup/rollup-linux-riscv64-musl": { 719 | "version": "4.40.2", 720 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.40.2.tgz", 721 | "integrity": "sha512-5W6vNYkhgfh7URiXTO1E9a0cy4fSgfE4+Hl5agb/U1sa0kjOLMLC1wObxwKxecE17j0URxuTrYZZME4/VH57Hg==", 722 | "cpu": [ 723 | "riscv64" 724 | ], 725 | "dev": true, 726 | "license": "MIT", 727 | "optional": true, 728 | "os": [ 729 | "linux" 730 | ] 731 | }, 732 | "node_modules/@rollup/rollup-linux-s390x-gnu": { 733 | "version": "4.40.2", 734 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.40.2.tgz", 735 | "integrity": "sha512-B7LKIz+0+p348JoAL4X/YxGx9zOx3sR+o6Hj15Y3aaApNfAshK8+mWZEf759DXfRLeL2vg5LYJBB7DdcleYCoQ==", 736 | "cpu": [ 737 | "s390x" 738 | ], 739 | "dev": true, 740 | "license": "MIT", 741 | "optional": true, 742 | "os": [ 743 | "linux" 744 | ] 745 | }, 746 | "node_modules/@rollup/rollup-linux-x64-gnu": { 747 | "version": "4.40.2", 748 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.2.tgz", 749 | "integrity": "sha512-lG7Xa+BmBNwpjmVUbmyKxdQJ3Q6whHjMjzQplOs5Z+Gj7mxPtWakGHqzMqNER68G67kmCX9qX57aRsW5V0VOng==", 750 | "cpu": [ 751 | "x64" 752 | ], 753 | "dev": true, 754 | "license": "MIT", 755 | "optional": true, 756 | "os": [ 757 | "linux" 758 | ] 759 | }, 760 | "node_modules/@rollup/rollup-linux-x64-musl": { 761 | "version": "4.40.2", 762 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.40.2.tgz", 763 | "integrity": "sha512-tD46wKHd+KJvsmije4bUskNuvWKFcTOIM9tZ/RrmIvcXnbi0YK/cKS9FzFtAm7Oxi2EhV5N2OpfFB348vSQRXA==", 764 | "cpu": [ 765 | "x64" 766 | ], 767 | "dev": true, 768 | "license": "MIT", 769 | "optional": true, 770 | "os": [ 771 | "linux" 772 | ] 773 | }, 774 | "node_modules/@rollup/rollup-win32-arm64-msvc": { 775 | "version": "4.40.2", 776 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.40.2.tgz", 777 | "integrity": "sha512-Bjv/HG8RRWLNkXwQQemdsWw4Mg+IJ29LK+bJPW2SCzPKOUaMmPEppQlu/Fqk1d7+DX3V7JbFdbkh/NMmurT6Pg==", 778 | "cpu": [ 779 | "arm64" 780 | ], 781 | "dev": true, 782 | "license": "MIT", 783 | "optional": true, 784 | "os": [ 785 | "win32" 786 | ] 787 | }, 788 | "node_modules/@rollup/rollup-win32-ia32-msvc": { 789 | "version": "4.40.2", 790 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.40.2.tgz", 791 | "integrity": "sha512-dt1llVSGEsGKvzeIO76HToiYPNPYPkmjhMHhP00T9S4rDern8P2ZWvWAQUEJ+R1UdMWJ/42i/QqJ2WV765GZcA==", 792 | "cpu": [ 793 | "ia32" 794 | ], 795 | "dev": true, 796 | "license": "MIT", 797 | "optional": true, 798 | "os": [ 799 | "win32" 800 | ] 801 | }, 802 | "node_modules/@rollup/rollup-win32-x64-msvc": { 803 | "version": "4.40.2", 804 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.40.2.tgz", 805 | "integrity": "sha512-bwspbWB04XJpeElvsp+DCylKfF4trJDa2Y9Go8O6A7YLX2LIKGcNK/CYImJN6ZP4DcuOHB4Utl3iCbnR62DudA==", 806 | "cpu": [ 807 | "x64" 808 | ], 809 | "dev": true, 810 | "license": "MIT", 811 | "optional": true, 812 | "os": [ 813 | "win32" 814 | ] 815 | }, 816 | "node_modules/@sveltejs/acorn-typescript": { 817 | "version": "1.0.5", 818 | "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.5.tgz", 819 | "integrity": "sha512-IwQk4yfwLdibDlrXVE04jTZYlLnwsTT2PIOQQGNLWfjavGifnk1JD1LcZjZaBTRcxZu2FfPfNLOE04DSu9lqtQ==", 820 | "dev": true, 821 | "license": "MIT", 822 | "peerDependencies": { 823 | "acorn": "^8.9.0" 824 | } 825 | }, 826 | "node_modules/@sveltejs/adapter-static": { 827 | "version": "3.0.8", 828 | "resolved": "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-3.0.8.tgz", 829 | "integrity": "sha512-YaDrquRpZwfcXbnlDsSrBQNCChVOT9MGuSg+dMAyfsAa1SmiAhrA5jUYUiIMC59G92kIbY/AaQOWcBdq+lh+zg==", 830 | "dev": true, 831 | "license": "MIT", 832 | "peerDependencies": { 833 | "@sveltejs/kit": "^2.0.0" 834 | } 835 | }, 836 | "node_modules/@sveltejs/kit": { 837 | "version": "2.20.8", 838 | "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.20.8.tgz", 839 | "integrity": "sha512-ep9qTxL7WALhfm0kFecL3VHeuNew8IccbYGqv5TqL/KSqWRKzEgDG8blNlIu1CkLTTua/kHjI+f5T8eCmWIxKw==", 840 | "dev": true, 841 | "license": "MIT", 842 | "dependencies": { 843 | "@types/cookie": "^0.6.0", 844 | "cookie": "^0.6.0", 845 | "devalue": "^5.1.0", 846 | "esm-env": "^1.2.2", 847 | "import-meta-resolve": "^4.1.0", 848 | "kleur": "^4.1.5", 849 | "magic-string": "^0.30.5", 850 | "mrmime": "^2.0.0", 851 | "sade": "^1.8.1", 852 | "set-cookie-parser": "^2.6.0", 853 | "sirv": "^3.0.0" 854 | }, 855 | "bin": { 856 | "svelte-kit": "svelte-kit.js" 857 | }, 858 | "engines": { 859 | "node": ">=18.13" 860 | }, 861 | "peerDependencies": { 862 | "@sveltejs/vite-plugin-svelte": "^3.0.0 || ^4.0.0-next.1 || ^5.0.0", 863 | "svelte": "^4.0.0 || ^5.0.0-next.0", 864 | "vite": "^5.0.3 || ^6.0.0" 865 | } 866 | }, 867 | "node_modules/@sveltejs/vite-plugin-svelte": { 868 | "version": "5.0.3", 869 | "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-5.0.3.tgz", 870 | "integrity": "sha512-MCFS6CrQDu1yGwspm4qtli0e63vaPCehf6V7pIMP15AsWgMKrqDGCPFF/0kn4SP0ii4aySu4Pa62+fIRGFMjgw==", 871 | "dev": true, 872 | "license": "MIT", 873 | "dependencies": { 874 | "@sveltejs/vite-plugin-svelte-inspector": "^4.0.1", 875 | "debug": "^4.4.0", 876 | "deepmerge": "^4.3.1", 877 | "kleur": "^4.1.5", 878 | "magic-string": "^0.30.15", 879 | "vitefu": "^1.0.4" 880 | }, 881 | "engines": { 882 | "node": "^18.0.0 || ^20.0.0 || >=22" 883 | }, 884 | "peerDependencies": { 885 | "svelte": "^5.0.0", 886 | "vite": "^6.0.0" 887 | } 888 | }, 889 | "node_modules/@sveltejs/vite-plugin-svelte-inspector": { 890 | "version": "4.0.1", 891 | "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-4.0.1.tgz", 892 | "integrity": "sha512-J/Nmb2Q2y7mck2hyCX4ckVHcR5tu2J+MtBEQqpDrrgELZ2uvraQcK/ioCV61AqkdXFgriksOKIceDcQmqnGhVw==", 893 | "dev": true, 894 | "license": "MIT", 895 | "dependencies": { 896 | "debug": "^4.3.7" 897 | }, 898 | "engines": { 899 | "node": "^18.0.0 || ^20.0.0 || >=22" 900 | }, 901 | "peerDependencies": { 902 | "@sveltejs/vite-plugin-svelte": "^5.0.0", 903 | "svelte": "^5.0.0", 904 | "vite": "^6.0.0" 905 | } 906 | }, 907 | "node_modules/@types/cookie": { 908 | "version": "0.6.0", 909 | "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", 910 | "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", 911 | "dev": true, 912 | "license": "MIT" 913 | }, 914 | "node_modules/@types/estree": { 915 | "version": "1.0.7", 916 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", 917 | "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", 918 | "dev": true, 919 | "license": "MIT" 920 | }, 921 | "node_modules/acorn": { 922 | "version": "8.14.1", 923 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", 924 | "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", 925 | "dev": true, 926 | "license": "MIT", 927 | "bin": { 928 | "acorn": "bin/acorn" 929 | }, 930 | "engines": { 931 | "node": ">=0.4.0" 932 | } 933 | }, 934 | "node_modules/aria-query": { 935 | "version": "5.3.2", 936 | "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", 937 | "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", 938 | "dev": true, 939 | "license": "Apache-2.0", 940 | "engines": { 941 | "node": ">= 0.4" 942 | } 943 | }, 944 | "node_modules/axobject-query": { 945 | "version": "4.1.0", 946 | "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", 947 | "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", 948 | "dev": true, 949 | "license": "Apache-2.0", 950 | "engines": { 951 | "node": ">= 0.4" 952 | } 953 | }, 954 | "node_modules/chokidar": { 955 | "version": "4.0.1", 956 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz", 957 | "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", 958 | "dev": true, 959 | "license": "MIT", 960 | "dependencies": { 961 | "readdirp": "^4.0.1" 962 | }, 963 | "engines": { 964 | "node": ">= 14.16.0" 965 | }, 966 | "funding": { 967 | "url": "https://paulmillr.com/funding/" 968 | } 969 | }, 970 | "node_modules/clsx": { 971 | "version": "2.1.1", 972 | "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", 973 | "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", 974 | "dev": true, 975 | "license": "MIT", 976 | "engines": { 977 | "node": ">=6" 978 | } 979 | }, 980 | "node_modules/cookie": { 981 | "version": "0.6.0", 982 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", 983 | "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", 984 | "dev": true, 985 | "license": "MIT", 986 | "engines": { 987 | "node": ">= 0.6" 988 | } 989 | }, 990 | "node_modules/debug": { 991 | "version": "4.4.0", 992 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", 993 | "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", 994 | "dev": true, 995 | "license": "MIT", 996 | "dependencies": { 997 | "ms": "^2.1.3" 998 | }, 999 | "engines": { 1000 | "node": ">=6.0" 1001 | }, 1002 | "peerDependenciesMeta": { 1003 | "supports-color": { 1004 | "optional": true 1005 | } 1006 | } 1007 | }, 1008 | "node_modules/deepmerge": { 1009 | "version": "4.3.1", 1010 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", 1011 | "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", 1012 | "dev": true, 1013 | "license": "MIT", 1014 | "engines": { 1015 | "node": ">=0.10.0" 1016 | } 1017 | }, 1018 | "node_modules/devalue": { 1019 | "version": "5.1.1", 1020 | "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.1.1.tgz", 1021 | "integrity": "sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==", 1022 | "dev": true, 1023 | "license": "MIT" 1024 | }, 1025 | "node_modules/esbuild": { 1026 | "version": "0.25.4", 1027 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.4.tgz", 1028 | "integrity": "sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==", 1029 | "dev": true, 1030 | "hasInstallScript": true, 1031 | "license": "MIT", 1032 | "bin": { 1033 | "esbuild": "bin/esbuild" 1034 | }, 1035 | "engines": { 1036 | "node": ">=18" 1037 | }, 1038 | "optionalDependencies": { 1039 | "@esbuild/aix-ppc64": "0.25.4", 1040 | "@esbuild/android-arm": "0.25.4", 1041 | "@esbuild/android-arm64": "0.25.4", 1042 | "@esbuild/android-x64": "0.25.4", 1043 | "@esbuild/darwin-arm64": "0.25.4", 1044 | "@esbuild/darwin-x64": "0.25.4", 1045 | "@esbuild/freebsd-arm64": "0.25.4", 1046 | "@esbuild/freebsd-x64": "0.25.4", 1047 | "@esbuild/linux-arm": "0.25.4", 1048 | "@esbuild/linux-arm64": "0.25.4", 1049 | "@esbuild/linux-ia32": "0.25.4", 1050 | "@esbuild/linux-loong64": "0.25.4", 1051 | "@esbuild/linux-mips64el": "0.25.4", 1052 | "@esbuild/linux-ppc64": "0.25.4", 1053 | "@esbuild/linux-riscv64": "0.25.4", 1054 | "@esbuild/linux-s390x": "0.25.4", 1055 | "@esbuild/linux-x64": "0.25.4", 1056 | "@esbuild/netbsd-arm64": "0.25.4", 1057 | "@esbuild/netbsd-x64": "0.25.4", 1058 | "@esbuild/openbsd-arm64": "0.25.4", 1059 | "@esbuild/openbsd-x64": "0.25.4", 1060 | "@esbuild/sunos-x64": "0.25.4", 1061 | "@esbuild/win32-arm64": "0.25.4", 1062 | "@esbuild/win32-ia32": "0.25.4", 1063 | "@esbuild/win32-x64": "0.25.4" 1064 | } 1065 | }, 1066 | "node_modules/esm-env": { 1067 | "version": "1.2.2", 1068 | "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz", 1069 | "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==", 1070 | "dev": true, 1071 | "license": "MIT" 1072 | }, 1073 | "node_modules/esrap": { 1074 | "version": "1.4.6", 1075 | "resolved": "https://registry.npmjs.org/esrap/-/esrap-1.4.6.tgz", 1076 | "integrity": "sha512-F/D2mADJ9SHY3IwksD4DAXjTt7qt7GWUf3/8RhCNWmC/67tyb55dpimHmy7EplakFaflV0R/PC+fdSPqrRHAQw==", 1077 | "dev": true, 1078 | "license": "MIT", 1079 | "dependencies": { 1080 | "@jridgewell/sourcemap-codec": "^1.4.15" 1081 | } 1082 | }, 1083 | "node_modules/fdir": { 1084 | "version": "6.4.4", 1085 | "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz", 1086 | "integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==", 1087 | "dev": true, 1088 | "license": "MIT", 1089 | "peerDependencies": { 1090 | "picomatch": "^3 || ^4" 1091 | }, 1092 | "peerDependenciesMeta": { 1093 | "picomatch": { 1094 | "optional": true 1095 | } 1096 | } 1097 | }, 1098 | "node_modules/fsevents": { 1099 | "version": "2.3.3", 1100 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 1101 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 1102 | "dev": true, 1103 | "hasInstallScript": true, 1104 | "license": "MIT", 1105 | "optional": true, 1106 | "os": [ 1107 | "darwin" 1108 | ], 1109 | "engines": { 1110 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1111 | } 1112 | }, 1113 | "node_modules/import-meta-resolve": { 1114 | "version": "4.1.0", 1115 | "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", 1116 | "integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==", 1117 | "dev": true, 1118 | "license": "MIT", 1119 | "funding": { 1120 | "type": "github", 1121 | "url": "https://github.com/sponsors/wooorm" 1122 | } 1123 | }, 1124 | "node_modules/is-reference": { 1125 | "version": "3.0.3", 1126 | "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz", 1127 | "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==", 1128 | "dev": true, 1129 | "license": "MIT", 1130 | "dependencies": { 1131 | "@types/estree": "^1.0.6" 1132 | } 1133 | }, 1134 | "node_modules/jsesc": { 1135 | "version": "3.0.2", 1136 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", 1137 | "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", 1138 | "license": "MIT", 1139 | "bin": { 1140 | "jsesc": "bin/jsesc" 1141 | }, 1142 | "engines": { 1143 | "node": ">=6" 1144 | } 1145 | }, 1146 | "node_modules/kleur": { 1147 | "version": "4.1.5", 1148 | "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", 1149 | "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", 1150 | "dev": true, 1151 | "license": "MIT", 1152 | "engines": { 1153 | "node": ">=6" 1154 | } 1155 | }, 1156 | "node_modules/locate-character": { 1157 | "version": "3.0.0", 1158 | "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", 1159 | "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", 1160 | "dev": true, 1161 | "license": "MIT" 1162 | }, 1163 | "node_modules/magic-string": { 1164 | "version": "0.30.15", 1165 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.15.tgz", 1166 | "integrity": "sha512-zXeaYRgZ6ldS1RJJUrMrYgNJ4fdwnyI6tVqoiIhyCyv5IVTK9BU8Ic2l253GGETQHxI4HNUwhJ3fjDhKqEoaAw==", 1167 | "dev": true, 1168 | "license": "MIT", 1169 | "dependencies": { 1170 | "@jridgewell/sourcemap-codec": "^1.5.0" 1171 | } 1172 | }, 1173 | "node_modules/mri": { 1174 | "version": "1.2.0", 1175 | "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", 1176 | "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", 1177 | "dev": true, 1178 | "license": "MIT", 1179 | "engines": { 1180 | "node": ">=4" 1181 | } 1182 | }, 1183 | "node_modules/mrmime": { 1184 | "version": "2.0.0", 1185 | "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", 1186 | "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", 1187 | "dev": true, 1188 | "license": "MIT", 1189 | "engines": { 1190 | "node": ">=10" 1191 | } 1192 | }, 1193 | "node_modules/ms": { 1194 | "version": "2.1.3", 1195 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1196 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 1197 | "dev": true, 1198 | "license": "MIT" 1199 | }, 1200 | "node_modules/nanoid": { 1201 | "version": "3.3.8", 1202 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", 1203 | "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", 1204 | "dev": true, 1205 | "funding": [ 1206 | { 1207 | "type": "github", 1208 | "url": "https://github.com/sponsors/ai" 1209 | } 1210 | ], 1211 | "license": "MIT", 1212 | "bin": { 1213 | "nanoid": "bin/nanoid.cjs" 1214 | }, 1215 | "engines": { 1216 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 1217 | } 1218 | }, 1219 | "node_modules/picocolors": { 1220 | "version": "1.1.1", 1221 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", 1222 | "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", 1223 | "dev": true, 1224 | "license": "ISC" 1225 | }, 1226 | "node_modules/picomatch": { 1227 | "version": "4.0.2", 1228 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", 1229 | "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", 1230 | "dev": true, 1231 | "license": "MIT", 1232 | "engines": { 1233 | "node": ">=12" 1234 | }, 1235 | "funding": { 1236 | "url": "https://github.com/sponsors/jonschlinkert" 1237 | } 1238 | }, 1239 | "node_modules/postcss": { 1240 | "version": "8.5.3", 1241 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", 1242 | "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", 1243 | "dev": true, 1244 | "funding": [ 1245 | { 1246 | "type": "opencollective", 1247 | "url": "https://opencollective.com/postcss/" 1248 | }, 1249 | { 1250 | "type": "tidelift", 1251 | "url": "https://tidelift.com/funding/github/npm/postcss" 1252 | }, 1253 | { 1254 | "type": "github", 1255 | "url": "https://github.com/sponsors/ai" 1256 | } 1257 | ], 1258 | "license": "MIT", 1259 | "dependencies": { 1260 | "nanoid": "^3.3.8", 1261 | "picocolors": "^1.1.1", 1262 | "source-map-js": "^1.2.1" 1263 | }, 1264 | "engines": { 1265 | "node": "^10 || ^12 || >=14" 1266 | } 1267 | }, 1268 | "node_modules/prettier": { 1269 | "version": "3.5.3", 1270 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", 1271 | "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", 1272 | "dev": true, 1273 | "license": "MIT", 1274 | "bin": { 1275 | "prettier": "bin/prettier.cjs" 1276 | }, 1277 | "engines": { 1278 | "node": ">=14" 1279 | }, 1280 | "funding": { 1281 | "url": "https://github.com/prettier/prettier?sponsor=1" 1282 | } 1283 | }, 1284 | "node_modules/prettier-plugin-svelte": { 1285 | "version": "3.3.3", 1286 | "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-3.3.3.tgz", 1287 | "integrity": "sha512-yViK9zqQ+H2qZD1w/bH7W8i+bVfKrD8GIFjkFe4Thl6kCT9SlAsXVNmt3jCvQOCsnOhcvYgsoVlRV/Eu6x5nNw==", 1288 | "dev": true, 1289 | "license": "MIT", 1290 | "peerDependencies": { 1291 | "prettier": "^3.0.0", 1292 | "svelte": "^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0" 1293 | } 1294 | }, 1295 | "node_modules/readdirp": { 1296 | "version": "4.0.2", 1297 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", 1298 | "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", 1299 | "dev": true, 1300 | "license": "MIT", 1301 | "engines": { 1302 | "node": ">= 14.16.0" 1303 | }, 1304 | "funding": { 1305 | "type": "individual", 1306 | "url": "https://paulmillr.com/funding/" 1307 | } 1308 | }, 1309 | "node_modules/regexp-tree": { 1310 | "version": "0.1.27", 1311 | "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz", 1312 | "integrity": "sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==", 1313 | "license": "MIT", 1314 | "bin": { 1315 | "regexp-tree": "bin/regexp-tree" 1316 | } 1317 | }, 1318 | "node_modules/regjsparser": { 1319 | "version": "0.12.0", 1320 | "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", 1321 | "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", 1322 | "license": "BSD-2-Clause", 1323 | "dependencies": { 1324 | "jsesc": "~3.0.2" 1325 | }, 1326 | "bin": { 1327 | "regjsparser": "bin/parser" 1328 | } 1329 | }, 1330 | "node_modules/rollup": { 1331 | "version": "4.40.2", 1332 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.40.2.tgz", 1333 | "integrity": "sha512-tfUOg6DTP4rhQ3VjOO6B4wyrJnGOX85requAXvqYTHsOgb2TFJdZ3aWpT8W2kPoypSGP7dZUyzxJ9ee4buM5Fg==", 1334 | "dev": true, 1335 | "license": "MIT", 1336 | "dependencies": { 1337 | "@types/estree": "1.0.7" 1338 | }, 1339 | "bin": { 1340 | "rollup": "dist/bin/rollup" 1341 | }, 1342 | "engines": { 1343 | "node": ">=18.0.0", 1344 | "npm": ">=8.0.0" 1345 | }, 1346 | "optionalDependencies": { 1347 | "@rollup/rollup-android-arm-eabi": "4.40.2", 1348 | "@rollup/rollup-android-arm64": "4.40.2", 1349 | "@rollup/rollup-darwin-arm64": "4.40.2", 1350 | "@rollup/rollup-darwin-x64": "4.40.2", 1351 | "@rollup/rollup-freebsd-arm64": "4.40.2", 1352 | "@rollup/rollup-freebsd-x64": "4.40.2", 1353 | "@rollup/rollup-linux-arm-gnueabihf": "4.40.2", 1354 | "@rollup/rollup-linux-arm-musleabihf": "4.40.2", 1355 | "@rollup/rollup-linux-arm64-gnu": "4.40.2", 1356 | "@rollup/rollup-linux-arm64-musl": "4.40.2", 1357 | "@rollup/rollup-linux-loongarch64-gnu": "4.40.2", 1358 | "@rollup/rollup-linux-powerpc64le-gnu": "4.40.2", 1359 | "@rollup/rollup-linux-riscv64-gnu": "4.40.2", 1360 | "@rollup/rollup-linux-riscv64-musl": "4.40.2", 1361 | "@rollup/rollup-linux-s390x-gnu": "4.40.2", 1362 | "@rollup/rollup-linux-x64-gnu": "4.40.2", 1363 | "@rollup/rollup-linux-x64-musl": "4.40.2", 1364 | "@rollup/rollup-win32-arm64-msvc": "4.40.2", 1365 | "@rollup/rollup-win32-ia32-msvc": "4.40.2", 1366 | "@rollup/rollup-win32-x64-msvc": "4.40.2", 1367 | "fsevents": "~2.3.2" 1368 | } 1369 | }, 1370 | "node_modules/sade": { 1371 | "version": "1.8.1", 1372 | "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", 1373 | "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", 1374 | "dev": true, 1375 | "license": "MIT", 1376 | "dependencies": { 1377 | "mri": "^1.1.0" 1378 | }, 1379 | "engines": { 1380 | "node": ">=6" 1381 | } 1382 | }, 1383 | "node_modules/set-cookie-parser": { 1384 | "version": "2.6.0", 1385 | "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", 1386 | "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==", 1387 | "dev": true, 1388 | "license": "MIT" 1389 | }, 1390 | "node_modules/sirv": { 1391 | "version": "3.0.0", 1392 | "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.0.tgz", 1393 | "integrity": "sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg==", 1394 | "dev": true, 1395 | "license": "MIT", 1396 | "dependencies": { 1397 | "@polka/url": "^1.0.0-next.24", 1398 | "mrmime": "^2.0.0", 1399 | "totalist": "^3.0.0" 1400 | }, 1401 | "engines": { 1402 | "node": ">=18" 1403 | } 1404 | }, 1405 | "node_modules/source-map-js": { 1406 | "version": "1.2.1", 1407 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", 1408 | "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", 1409 | "dev": true, 1410 | "license": "BSD-3-Clause", 1411 | "engines": { 1412 | "node": ">=0.10.0" 1413 | } 1414 | }, 1415 | "node_modules/svelte": { 1416 | "version": "5.28.2", 1417 | "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.28.2.tgz", 1418 | "integrity": "sha512-FbWBxgWOpQfhKvoGJv/TFwzqb4EhJbwCD17dB0tEpQiw1XyUEKZJtgm4nA4xq3LLsMo7hu5UY/BOFmroAxKTMg==", 1419 | "dev": true, 1420 | "license": "MIT", 1421 | "dependencies": { 1422 | "@ampproject/remapping": "^2.3.0", 1423 | "@jridgewell/sourcemap-codec": "^1.5.0", 1424 | "@sveltejs/acorn-typescript": "^1.0.5", 1425 | "@types/estree": "^1.0.5", 1426 | "acorn": "^8.12.1", 1427 | "aria-query": "^5.3.1", 1428 | "axobject-query": "^4.1.0", 1429 | "clsx": "^2.1.1", 1430 | "esm-env": "^1.2.1", 1431 | "esrap": "^1.4.6", 1432 | "is-reference": "^3.0.3", 1433 | "locate-character": "^3.0.0", 1434 | "magic-string": "^0.30.11", 1435 | "zimmerframe": "^1.1.2" 1436 | }, 1437 | "engines": { 1438 | "node": ">=18" 1439 | } 1440 | }, 1441 | "node_modules/svelte-check": { 1442 | "version": "4.1.7", 1443 | "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-4.1.7.tgz", 1444 | "integrity": "sha512-1jX4BzXrQJhC/Jt3SqYf6Ntu//vmfc6VWp07JkRfK2nn+22yIblspVUo96gzMkg0Zov8lQicxhxsMzOctwcMQQ==", 1445 | "dev": true, 1446 | "license": "MIT", 1447 | "dependencies": { 1448 | "@jridgewell/trace-mapping": "^0.3.25", 1449 | "chokidar": "^4.0.1", 1450 | "fdir": "^6.2.0", 1451 | "picocolors": "^1.0.0", 1452 | "sade": "^1.7.4" 1453 | }, 1454 | "bin": { 1455 | "svelte-check": "bin/svelte-check" 1456 | }, 1457 | "engines": { 1458 | "node": ">= 18.0.0" 1459 | }, 1460 | "peerDependencies": { 1461 | "svelte": "^4.0.0 || ^5.0.0-next.0", 1462 | "typescript": ">=5.0.0" 1463 | } 1464 | }, 1465 | "node_modules/tinyglobby": { 1466 | "version": "0.2.13", 1467 | "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz", 1468 | "integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==", 1469 | "dev": true, 1470 | "license": "MIT", 1471 | "dependencies": { 1472 | "fdir": "^6.4.4", 1473 | "picomatch": "^4.0.2" 1474 | }, 1475 | "engines": { 1476 | "node": ">=12.0.0" 1477 | }, 1478 | "funding": { 1479 | "url": "https://github.com/sponsors/SuperchupuDev" 1480 | } 1481 | }, 1482 | "node_modules/totalist": { 1483 | "version": "3.0.1", 1484 | "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", 1485 | "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", 1486 | "dev": true, 1487 | "license": "MIT", 1488 | "engines": { 1489 | "node": ">=6" 1490 | } 1491 | }, 1492 | "node_modules/typescript": { 1493 | "version": "5.8.3", 1494 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", 1495 | "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", 1496 | "dev": true, 1497 | "license": "Apache-2.0", 1498 | "bin": { 1499 | "tsc": "bin/tsc", 1500 | "tsserver": "bin/tsserver" 1501 | }, 1502 | "engines": { 1503 | "node": ">=14.17" 1504 | } 1505 | }, 1506 | "node_modules/vite": { 1507 | "version": "6.3.5", 1508 | "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", 1509 | "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", 1510 | "dev": true, 1511 | "license": "MIT", 1512 | "dependencies": { 1513 | "esbuild": "^0.25.0", 1514 | "fdir": "^6.4.4", 1515 | "picomatch": "^4.0.2", 1516 | "postcss": "^8.5.3", 1517 | "rollup": "^4.34.9", 1518 | "tinyglobby": "^0.2.13" 1519 | }, 1520 | "bin": { 1521 | "vite": "bin/vite.js" 1522 | }, 1523 | "engines": { 1524 | "node": "^18.0.0 || ^20.0.0 || >=22.0.0" 1525 | }, 1526 | "funding": { 1527 | "url": "https://github.com/vitejs/vite?sponsor=1" 1528 | }, 1529 | "optionalDependencies": { 1530 | "fsevents": "~2.3.3" 1531 | }, 1532 | "peerDependencies": { 1533 | "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", 1534 | "jiti": ">=1.21.0", 1535 | "less": "*", 1536 | "lightningcss": "^1.21.0", 1537 | "sass": "*", 1538 | "sass-embedded": "*", 1539 | "stylus": "*", 1540 | "sugarss": "*", 1541 | "terser": "^5.16.0", 1542 | "tsx": "^4.8.1", 1543 | "yaml": "^2.4.2" 1544 | }, 1545 | "peerDependenciesMeta": { 1546 | "@types/node": { 1547 | "optional": true 1548 | }, 1549 | "jiti": { 1550 | "optional": true 1551 | }, 1552 | "less": { 1553 | "optional": true 1554 | }, 1555 | "lightningcss": { 1556 | "optional": true 1557 | }, 1558 | "sass": { 1559 | "optional": true 1560 | }, 1561 | "sass-embedded": { 1562 | "optional": true 1563 | }, 1564 | "stylus": { 1565 | "optional": true 1566 | }, 1567 | "sugarss": { 1568 | "optional": true 1569 | }, 1570 | "terser": { 1571 | "optional": true 1572 | }, 1573 | "tsx": { 1574 | "optional": true 1575 | }, 1576 | "yaml": { 1577 | "optional": true 1578 | } 1579 | } 1580 | }, 1581 | "node_modules/vite-plugin-wasm": { 1582 | "version": "3.4.1", 1583 | "resolved": "https://registry.npmjs.org/vite-plugin-wasm/-/vite-plugin-wasm-3.4.1.tgz", 1584 | "integrity": "sha512-ja3nSo2UCkVeitltJGkS3pfQHAanHv/DqGatdI39ja6McgABlpsZ5hVgl6wuR8Qx5etY3T5qgDQhOWzc5RReZA==", 1585 | "dev": true, 1586 | "license": "MIT", 1587 | "peerDependencies": { 1588 | "vite": "^2 || ^3 || ^4 || ^5 || ^6" 1589 | } 1590 | }, 1591 | "node_modules/vitefu": { 1592 | "version": "1.0.5", 1593 | "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.0.5.tgz", 1594 | "integrity": "sha512-h4Vflt9gxODPFNGPwp4zAMZRpZR7eslzwH2c5hn5kNZ5rhnKyRJ50U+yGCdc2IRaBs8O4haIgLNGrV5CrpMsCA==", 1595 | "dev": true, 1596 | "license": "MIT", 1597 | "workspaces": [ 1598 | "tests/deps/*", 1599 | "tests/projects/*" 1600 | ], 1601 | "peerDependencies": { 1602 | "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" 1603 | }, 1604 | "peerDependenciesMeta": { 1605 | "vite": { 1606 | "optional": true 1607 | } 1608 | } 1609 | }, 1610 | "node_modules/zimmerframe": { 1611 | "version": "1.1.2", 1612 | "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.2.tgz", 1613 | "integrity": "sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==", 1614 | "dev": true, 1615 | "license": "MIT" 1616 | } 1617 | } 1618 | } 1619 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "js-regexp-ast-viewer", 3 | "version": "0.0.1", 4 | "private": true, 5 | "scripts": { 6 | "dev": "vite dev", 7 | "build": "vite build", 8 | "preview": "vite preview", 9 | "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json", 10 | "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch" 11 | }, 12 | "devDependencies": { 13 | "@sveltejs/adapter-static": "^3.0.8", 14 | "@sveltejs/kit": "^2.20.8", 15 | "@sveltejs/vite-plugin-svelte": "^5.0.3", 16 | "prettier": "^3.5.3", 17 | "prettier-plugin-svelte": "^3.3.3", 18 | "svelte": "^5.28.2", 19 | "svelte-check": "^4.1.7", 20 | "typescript": "^5.8.3", 21 | "vite": "^6.3.5", 22 | "vite-plugin-wasm": "^3.4.1" 23 | }, 24 | "type": "module", 25 | "dependencies": { 26 | "@eslint-community/regexpp": "^4.12.1", 27 | "regexp-tree": "^0.1.27", 28 | "regjsparser": "^0.12.0" 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/app.d.ts: -------------------------------------------------------------------------------- 1 | // See https://kit.svelte.dev/docs/types#app 2 | // for information about these interfaces 3 | declare global { 4 | namespace App { 5 | // interface Error {} 6 | // interface Locals {} 7 | // interface PageData {} 8 | // interface PageState {} 9 | // interface Platform {} 10 | } 11 | } 12 | 13 | export {}; 14 | -------------------------------------------------------------------------------- /src/app.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | JS RegExp AST Viewer 8 | %sveltekit.head% 9 | 10 | 11 |
%sveltekit.body%
12 | 13 | 14 | -------------------------------------------------------------------------------- /src/lib/parser.ts: -------------------------------------------------------------------------------- 1 | import initWasm, { parsePattern } from "../oxc_regular_expression_wasm/pkg"; 2 | import regjsparser from "regjsparser"; 3 | import { RegExpParser } from "@eslint-community/regexpp"; 4 | import { parse as regexpTreeParse } from "regexp-tree"; 5 | 6 | type ParseFactory = (hiddenKeys: { range: boolean; raw: boolean }) => Promise<{ 7 | parse: Parse; 8 | meta: ParseMeta; 9 | }>; 10 | type Parse = (pattern: string, flags: string) => ParseResult; 11 | export type ParseMeta = { name: string; version: string; notes: string }; 12 | export type ParseResult = { ok: false; err: string } | { ok: true; ast: string }; 13 | 14 | export const browser: ParseFactory = async (_hiddenKeys) => { 15 | const parse: Parse = (pattern, flags) => { 16 | try { 17 | new RegExp(pattern, flags); 18 | 19 | return { ok: true, ast: "This is valid `RegExp." }; 20 | } catch (err) { 21 | return { ok: false, err: (err as Error).message }; 22 | } 23 | }; 24 | 25 | const meta = { 26 | name: "Your browser", 27 | version: navigator.userAgent, 28 | notes: "", 29 | }; 30 | 31 | return { parse, meta }; 32 | }; 33 | 34 | export const oxc: ParseFactory = async (hiddenKeys) => { 35 | await initWasm(); 36 | 37 | const parse: Parse = (pattern, flags) => { 38 | try { 39 | const { ast_json } = parsePattern(pattern, flags); 40 | 41 | return { 42 | ok: true, 43 | ast: JSON.stringify( 44 | JSON.parse(ast_json), 45 | (key, value) => { 46 | if (hiddenKeys.range && (key === "start" || key === "end")) return undefined; 47 | return value; 48 | }, 49 | 2, 50 | ), 51 | }; 52 | } catch (err) { 53 | return { ok: false, err: (err as Error).message }; 54 | } 55 | }; 56 | 57 | const meta = { 58 | name: "oxc_regular_expression(wasm)", 59 | version: "0.68.1", 60 | notes: "", 61 | }; 62 | 63 | return { parse, meta }; 64 | }; 65 | 66 | export const regjs: ParseFactory = async (hiddenKeys) => { 67 | const parse: Parse = (pattern, flags) => { 68 | try { 69 | const ast = regjsparser.parse(pattern, flags, { 70 | lookbehind: true, 71 | namedGroups: true, 72 | unicodePropertyEscape: true, 73 | unicodeSet: true, 74 | modifiers: true, 75 | }); 76 | 77 | return { 78 | ok: true, 79 | ast: JSON.stringify( 80 | ast, 81 | (key, value) => { 82 | if (hiddenKeys.range && key === "range") return undefined; 83 | if (hiddenKeys.raw && key === "raw") return undefined; 84 | return value; 85 | }, 86 | 2, 87 | ), 88 | }; 89 | } catch (err) { 90 | return { ok: false, err: (err as Error).message }; 91 | } 92 | }; 93 | 94 | const meta = { 95 | name: "regjsparser", 96 | version: "0.12.0", 97 | notes: "", 98 | }; 99 | 100 | return { parse, meta }; 101 | }; 102 | 103 | export const regexpp: ParseFactory = async (hiddenKeys) => { 104 | const regexppParser = new RegExpParser({ strict: false, ecmaVersion: 2025 }); 105 | 106 | const parse: Parse = (pattern, flags) => { 107 | try { 108 | const ast = regexppParser.parsePattern(pattern, 0, pattern.length, { 109 | unicode: flags.includes("u"), 110 | unicodeSets: flags.includes("v"), 111 | }); 112 | 113 | return { 114 | ok: true, 115 | ast: JSON.stringify( 116 | ast, 117 | (key, value) => { 118 | if (hiddenKeys.range && (key === "start" || key === "end")) return undefined; 119 | if (hiddenKeys.raw && key === "raw") return undefined; 120 | // Remove cyclic references 121 | if (["parent", "resolved", "references"].includes(key)) return undefined; 122 | return value; 123 | }, 124 | 2, 125 | ), 126 | }; 127 | } catch (err) { 128 | return { ok: false, err: (err as Error).message }; 129 | } 130 | }; 131 | 132 | const meta = { 133 | name: "@eslint-community/regexpp", 134 | version: "4.12.1", 135 | notes: "Cyclic references are removed.", 136 | }; 137 | 138 | return { parse, meta }; 139 | }; 140 | 141 | export const regexpTree: ParseFactory = async (hiddenKeys) => { 142 | const parse: Parse = (pattern, flags) => { 143 | try { 144 | const ast = regexpTreeParse("/" + pattern + "/" + flags, { 145 | captureLocations: true, 146 | allowGroupNameDuplicates: true, 147 | }); 148 | 149 | return { 150 | ok: true, 151 | ast: JSON.stringify( 152 | ast.body, 153 | (key, value) => { 154 | if (hiddenKeys.range && hiddenKeys.raw && key === "loc") return undefined; 155 | if (hiddenKeys.range && (key === "start" || key === "end")) return undefined; 156 | if (hiddenKeys.raw && (key === "source" || key === "value" || key === "symbol")) 157 | return undefined; 158 | return value; 159 | }, 160 | 2, 161 | ), 162 | }; 163 | } catch (err) { 164 | return { ok: false, err: (err as Error).message }; 165 | } 166 | }; 167 | 168 | const meta = { 169 | name: "regexp-tree", 170 | version: "0.1.27", 171 | notes: "", 172 | }; 173 | 174 | return { parse, meta }; 175 | }; 176 | -------------------------------------------------------------------------------- /src/oxc_regular_expression_wasm/.gitignore: -------------------------------------------------------------------------------- 1 | target 2 | -------------------------------------------------------------------------------- /src/oxc_regular_expression_wasm/Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 4 4 | 5 | [[package]] 6 | name = "allocator-api2" 7 | version = "0.2.21" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" 10 | 11 | [[package]] 12 | name = "autocfg" 13 | version = "1.4.0" 14 | source = "registry+https://github.com/rust-lang/crates.io-index" 15 | checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" 16 | 17 | [[package]] 18 | name = "bitflags" 19 | version = "2.9.0" 20 | source = "registry+https://github.com/rust-lang/crates.io-index" 21 | checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" 22 | dependencies = [ 23 | "serde", 24 | ] 25 | 26 | [[package]] 27 | name = "bumpalo" 28 | version = "3.17.0" 29 | source = "registry+https://github.com/rust-lang/crates.io-index" 30 | checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" 31 | dependencies = [ 32 | "allocator-api2", 33 | ] 34 | 35 | [[package]] 36 | name = "castaway" 37 | version = "0.2.3" 38 | source = "registry+https://github.com/rust-lang/crates.io-index" 39 | checksum = "0abae9be0aaf9ea96a3b1b8b1b55c602ca751eba1b1500220cea4ecbafe7c0d5" 40 | dependencies = [ 41 | "rustversion", 42 | ] 43 | 44 | [[package]] 45 | name = "cfg-if" 46 | version = "1.0.0" 47 | source = "registry+https://github.com/rust-lang/crates.io-index" 48 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 49 | 50 | [[package]] 51 | name = "compact_str" 52 | version = "0.9.0" 53 | source = "registry+https://github.com/rust-lang/crates.io-index" 54 | checksum = "3fdb1325a1cece981e8a296ab8f0f9b63ae357bd0784a9faaf548cc7b480707a" 55 | dependencies = [ 56 | "castaway", 57 | "cfg-if", 58 | "itoa", 59 | "rustversion", 60 | "ryu", 61 | "serde", 62 | "static_assertions", 63 | ] 64 | 65 | [[package]] 66 | name = "cow-utils" 67 | version = "0.1.3" 68 | source = "registry+https://github.com/rust-lang/crates.io-index" 69 | checksum = "417bef24afe1460300965a25ff4a24b8b45ad011948302ec221e8a0a81eb2c79" 70 | 71 | [[package]] 72 | name = "either" 73 | version = "1.13.0" 74 | source = "registry+https://github.com/rust-lang/crates.io-index" 75 | checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" 76 | 77 | [[package]] 78 | name = "equivalent" 79 | version = "1.0.2" 80 | source = "registry+https://github.com/rust-lang/crates.io-index" 81 | checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" 82 | 83 | [[package]] 84 | name = "fixedbitset" 85 | version = "0.5.7" 86 | source = "registry+https://github.com/rust-lang/crates.io-index" 87 | checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" 88 | 89 | [[package]] 90 | name = "foldhash" 91 | version = "0.1.5" 92 | source = "registry+https://github.com/rust-lang/crates.io-index" 93 | checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" 94 | 95 | [[package]] 96 | name = "gloo-utils" 97 | version = "0.2.0" 98 | source = "registry+https://github.com/rust-lang/crates.io-index" 99 | checksum = "0b5555354113b18c547c1d3a98fbf7fb32a9ff4f6fa112ce823a21641a0ba3aa" 100 | dependencies = [ 101 | "js-sys", 102 | "serde", 103 | "serde_json", 104 | "wasm-bindgen", 105 | "web-sys", 106 | ] 107 | 108 | [[package]] 109 | name = "hashbrown" 110 | version = "0.15.2" 111 | source = "registry+https://github.com/rust-lang/crates.io-index" 112 | checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" 113 | dependencies = [ 114 | "allocator-api2", 115 | "equivalent", 116 | "foldhash", 117 | ] 118 | 119 | [[package]] 120 | name = "indexmap" 121 | version = "2.7.1" 122 | source = "registry+https://github.com/rust-lang/crates.io-index" 123 | checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" 124 | dependencies = [ 125 | "equivalent", 126 | "hashbrown", 127 | ] 128 | 129 | [[package]] 130 | name = "itertools" 131 | version = "0.14.0" 132 | source = "registry+https://github.com/rust-lang/crates.io-index" 133 | checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" 134 | dependencies = [ 135 | "either", 136 | ] 137 | 138 | [[package]] 139 | name = "itoa" 140 | version = "1.0.15" 141 | source = "registry+https://github.com/rust-lang/crates.io-index" 142 | checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" 143 | 144 | [[package]] 145 | name = "js-sys" 146 | version = "0.3.72" 147 | source = "registry+https://github.com/rust-lang/crates.io-index" 148 | checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" 149 | dependencies = [ 150 | "wasm-bindgen", 151 | ] 152 | 153 | [[package]] 154 | name = "log" 155 | version = "0.4.22" 156 | source = "registry+https://github.com/rust-lang/crates.io-index" 157 | checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" 158 | 159 | [[package]] 160 | name = "memchr" 161 | version = "2.7.4" 162 | source = "registry+https://github.com/rust-lang/crates.io-index" 163 | checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" 164 | 165 | [[package]] 166 | name = "nonmax" 167 | version = "0.5.5" 168 | source = "registry+https://github.com/rust-lang/crates.io-index" 169 | checksum = "610a5acd306ec67f907abe5567859a3c693fb9886eb1f012ab8f2a47bef3db51" 170 | 171 | [[package]] 172 | name = "num-bigint" 173 | version = "0.4.6" 174 | source = "registry+https://github.com/rust-lang/crates.io-index" 175 | checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" 176 | dependencies = [ 177 | "num-integer", 178 | "num-traits", 179 | ] 180 | 181 | [[package]] 182 | name = "num-integer" 183 | version = "0.1.46" 184 | source = "registry+https://github.com/rust-lang/crates.io-index" 185 | checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" 186 | dependencies = [ 187 | "num-traits", 188 | ] 189 | 190 | [[package]] 191 | name = "num-traits" 192 | version = "0.2.19" 193 | source = "registry+https://github.com/rust-lang/crates.io-index" 194 | checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 195 | dependencies = [ 196 | "autocfg", 197 | ] 198 | 199 | [[package]] 200 | name = "once_cell" 201 | version = "1.20.2" 202 | source = "registry+https://github.com/rust-lang/crates.io-index" 203 | checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" 204 | 205 | [[package]] 206 | name = "owo-colors" 207 | version = "4.1.0" 208 | source = "registry+https://github.com/rust-lang/crates.io-index" 209 | checksum = "fb37767f6569cd834a413442455e0f066d0d522de8630436e2a1761d9726ba56" 210 | 211 | [[package]] 212 | name = "oxc" 213 | version = "0.68.1" 214 | source = "registry+https://github.com/rust-lang/crates.io-index" 215 | checksum = "f907527226ea09664a17963b36d3057ddcab280c1dcc19b3a287f40de30c3965" 216 | dependencies = [ 217 | "oxc_allocator", 218 | "oxc_ast", 219 | "oxc_ast_visit", 220 | "oxc_diagnostics", 221 | "oxc_parser", 222 | "oxc_regular_expression", 223 | "oxc_semantic", 224 | "oxc_span", 225 | "oxc_syntax", 226 | ] 227 | 228 | [[package]] 229 | name = "oxc-miette" 230 | version = "2.2.1" 231 | source = "registry+https://github.com/rust-lang/crates.io-index" 232 | checksum = "b8c278d00ecc50ee84aba4768a7ab74eb325dff4dca8c0581495b850d53480ba" 233 | dependencies = [ 234 | "cfg-if", 235 | "owo-colors", 236 | "oxc-miette-derive", 237 | "textwrap", 238 | "thiserror", 239 | "unicode-width", 240 | ] 241 | 242 | [[package]] 243 | name = "oxc-miette-derive" 244 | version = "2.1.2" 245 | source = "registry+https://github.com/rust-lang/crates.io-index" 246 | checksum = "4c0c893f53900e3fe01eca3d6d3b54085573c3e48fe25af9d57dd94ef600dcd3" 247 | dependencies = [ 248 | "proc-macro2", 249 | "quote", 250 | "syn", 251 | ] 252 | 253 | [[package]] 254 | name = "oxc_allocator" 255 | version = "0.68.1" 256 | source = "registry+https://github.com/rust-lang/crates.io-index" 257 | checksum = "d3da7bc2d06c0fd029c7817889b1e4d418f4955c25c003d5a9ea4a525db8fce9" 258 | dependencies = [ 259 | "allocator-api2", 260 | "bumpalo", 261 | "hashbrown", 262 | "oxc_data_structures", 263 | "oxc_estree", 264 | "rustc-hash", 265 | "serde", 266 | "simdutf8", 267 | ] 268 | 269 | [[package]] 270 | name = "oxc_ast" 271 | version = "0.68.1" 272 | source = "registry+https://github.com/rust-lang/crates.io-index" 273 | checksum = "9a83d102ba84b604cf24be6b943c3347f13740afa97304461d798f2598d4a92e" 274 | dependencies = [ 275 | "bitflags", 276 | "cow-utils", 277 | "oxc_allocator", 278 | "oxc_ast_macros", 279 | "oxc_data_structures", 280 | "oxc_estree", 281 | "oxc_regular_expression", 282 | "oxc_span", 283 | "oxc_syntax", 284 | ] 285 | 286 | [[package]] 287 | name = "oxc_ast_macros" 288 | version = "0.68.1" 289 | source = "registry+https://github.com/rust-lang/crates.io-index" 290 | checksum = "6e03da9a237d05fa378e3398a5a2c28124a387ff666218c1ca4ebfe5f0544d3d" 291 | dependencies = [ 292 | "proc-macro2", 293 | "quote", 294 | "syn", 295 | ] 296 | 297 | [[package]] 298 | name = "oxc_ast_visit" 299 | version = "0.68.1" 300 | source = "registry+https://github.com/rust-lang/crates.io-index" 301 | checksum = "f97a1716d68a3c9a0c9cf1d906eaeaa3a806052f91d8e4ef14e6afc50d515132" 302 | dependencies = [ 303 | "oxc_allocator", 304 | "oxc_ast", 305 | "oxc_span", 306 | "oxc_syntax", 307 | ] 308 | 309 | [[package]] 310 | name = "oxc_cfg" 311 | version = "0.68.1" 312 | source = "registry+https://github.com/rust-lang/crates.io-index" 313 | checksum = "de348366d30393be8eab6591bfa03c63c18e0b239cccf666554769547d94cd39" 314 | dependencies = [ 315 | "bitflags", 316 | "itertools", 317 | "nonmax", 318 | "oxc_index", 319 | "oxc_syntax", 320 | "petgraph", 321 | "rustc-hash", 322 | ] 323 | 324 | [[package]] 325 | name = "oxc_data_structures" 326 | version = "0.68.1" 327 | source = "registry+https://github.com/rust-lang/crates.io-index" 328 | checksum = "a9603941570dc1dbc111e6312d622d60722395b502aa68e703646beacc45d0d2" 329 | 330 | [[package]] 331 | name = "oxc_diagnostics" 332 | version = "0.68.1" 333 | source = "registry+https://github.com/rust-lang/crates.io-index" 334 | checksum = "a01184ff8ddf40a39c5ec4b0979b53e6e3f8e5701e4a0aed8edefd208ae310eb" 335 | dependencies = [ 336 | "cow-utils", 337 | "oxc-miette", 338 | ] 339 | 340 | [[package]] 341 | name = "oxc_ecmascript" 342 | version = "0.68.1" 343 | source = "registry+https://github.com/rust-lang/crates.io-index" 344 | checksum = "d549b884069d155eae98207c404b71113dc8fce2bea84dc53e8476a221405a83" 345 | dependencies = [ 346 | "cow-utils", 347 | "num-bigint", 348 | "num-traits", 349 | "oxc_ast", 350 | "oxc_span", 351 | "oxc_syntax", 352 | ] 353 | 354 | [[package]] 355 | name = "oxc_estree" 356 | version = "0.68.1" 357 | source = "registry+https://github.com/rust-lang/crates.io-index" 358 | checksum = "66904246cb3ceef3c7f9dd4b3a79bb104b242d8e442eb94f6097cec241a0eec4" 359 | dependencies = [ 360 | "itoa", 361 | "oxc_data_structures", 362 | "ryu-js", 363 | ] 364 | 365 | [[package]] 366 | name = "oxc_index" 367 | version = "3.0.0" 368 | source = "registry+https://github.com/rust-lang/crates.io-index" 369 | checksum = "2fa07b0cfa997730afed43705766ef27792873fdf5215b1391949fec678d2392" 370 | dependencies = [ 371 | "serde", 372 | ] 373 | 374 | [[package]] 375 | name = "oxc_parser" 376 | version = "0.68.1" 377 | source = "registry+https://github.com/rust-lang/crates.io-index" 378 | checksum = "a662d53b21550ca1a5600f70d033fcec40b2a25ba2b5281ecaf2ecd01cb16559" 379 | dependencies = [ 380 | "bitflags", 381 | "cow-utils", 382 | "memchr", 383 | "num-bigint", 384 | "num-traits", 385 | "oxc_allocator", 386 | "oxc_ast", 387 | "oxc_data_structures", 388 | "oxc_diagnostics", 389 | "oxc_ecmascript", 390 | "oxc_regular_expression", 391 | "oxc_span", 392 | "oxc_syntax", 393 | "rustc-hash", 394 | "seq-macro", 395 | ] 396 | 397 | [[package]] 398 | name = "oxc_regular_expression" 399 | version = "0.68.1" 400 | source = "registry+https://github.com/rust-lang/crates.io-index" 401 | checksum = "c53f760363c78764bb28b8e0f8316d9c28adf89a0ddfba625c8a9f465f4e2199" 402 | dependencies = [ 403 | "oxc_allocator", 404 | "oxc_ast_macros", 405 | "oxc_diagnostics", 406 | "oxc_estree", 407 | "oxc_span", 408 | "phf", 409 | "rustc-hash", 410 | "unicode-id-start", 411 | ] 412 | 413 | [[package]] 414 | name = "oxc_regular_expression_wasm" 415 | version = "0.0.1" 416 | dependencies = [ 417 | "oxc", 418 | "oxc_estree", 419 | "oxc_regular_expression", 420 | "serde", 421 | "serde-wasm-bindgen", 422 | "tsify", 423 | "wasm-bindgen", 424 | ] 425 | 426 | [[package]] 427 | name = "oxc_semantic" 428 | version = "0.68.1" 429 | source = "registry+https://github.com/rust-lang/crates.io-index" 430 | checksum = "942de11616459d462489166eddf7870cfb8589ba3f12b91f61d28e80b77f7fd0" 431 | dependencies = [ 432 | "itertools", 433 | "oxc_allocator", 434 | "oxc_ast", 435 | "oxc_ast_visit", 436 | "oxc_cfg", 437 | "oxc_data_structures", 438 | "oxc_diagnostics", 439 | "oxc_ecmascript", 440 | "oxc_index", 441 | "oxc_span", 442 | "oxc_syntax", 443 | "phf", 444 | "rustc-hash", 445 | "self_cell", 446 | ] 447 | 448 | [[package]] 449 | name = "oxc_span" 450 | version = "0.68.1" 451 | source = "registry+https://github.com/rust-lang/crates.io-index" 452 | checksum = "8f8e3cd484054ea0ce496e16437d802d4d9126e238deb267796db140a80d91dc" 453 | dependencies = [ 454 | "compact_str", 455 | "oxc-miette", 456 | "oxc_allocator", 457 | "oxc_ast_macros", 458 | "oxc_estree", 459 | "serde", 460 | ] 461 | 462 | [[package]] 463 | name = "oxc_syntax" 464 | version = "0.68.1" 465 | source = "registry+https://github.com/rust-lang/crates.io-index" 466 | checksum = "8933bda357ccc13260bb2fe3a08f02d98ceeb695c9af04d8ec5913edd9bec6d6" 467 | dependencies = [ 468 | "bitflags", 469 | "cow-utils", 470 | "nonmax", 471 | "oxc_allocator", 472 | "oxc_ast_macros", 473 | "oxc_data_structures", 474 | "oxc_estree", 475 | "oxc_index", 476 | "oxc_span", 477 | "phf", 478 | "rustc-hash", 479 | "ryu-js", 480 | "serde", 481 | "unicode-id-start", 482 | ] 483 | 484 | [[package]] 485 | name = "petgraph" 486 | version = "0.8.1" 487 | source = "registry+https://github.com/rust-lang/crates.io-index" 488 | checksum = "7a98c6720655620a521dcc722d0ad66cd8afd5d86e34a89ef691c50b7b24de06" 489 | dependencies = [ 490 | "fixedbitset", 491 | "hashbrown", 492 | "indexmap", 493 | "serde", 494 | ] 495 | 496 | [[package]] 497 | name = "phf" 498 | version = "0.11.3" 499 | source = "registry+https://github.com/rust-lang/crates.io-index" 500 | checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" 501 | dependencies = [ 502 | "phf_macros", 503 | "phf_shared", 504 | ] 505 | 506 | [[package]] 507 | name = "phf_generator" 508 | version = "0.11.2" 509 | source = "registry+https://github.com/rust-lang/crates.io-index" 510 | checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" 511 | dependencies = [ 512 | "phf_shared", 513 | "rand", 514 | ] 515 | 516 | [[package]] 517 | name = "phf_macros" 518 | version = "0.11.3" 519 | source = "registry+https://github.com/rust-lang/crates.io-index" 520 | checksum = "f84ac04429c13a7ff43785d75ad27569f2951ce0ffd30a3321230db2fc727216" 521 | dependencies = [ 522 | "phf_generator", 523 | "phf_shared", 524 | "proc-macro2", 525 | "quote", 526 | "syn", 527 | ] 528 | 529 | [[package]] 530 | name = "phf_shared" 531 | version = "0.11.3" 532 | source = "registry+https://github.com/rust-lang/crates.io-index" 533 | checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" 534 | dependencies = [ 535 | "siphasher", 536 | ] 537 | 538 | [[package]] 539 | name = "proc-macro2" 540 | version = "1.0.95" 541 | source = "registry+https://github.com/rust-lang/crates.io-index" 542 | checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" 543 | dependencies = [ 544 | "unicode-ident", 545 | ] 546 | 547 | [[package]] 548 | name = "quote" 549 | version = "1.0.37" 550 | source = "registry+https://github.com/rust-lang/crates.io-index" 551 | checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" 552 | dependencies = [ 553 | "proc-macro2", 554 | ] 555 | 556 | [[package]] 557 | name = "rand" 558 | version = "0.8.5" 559 | source = "registry+https://github.com/rust-lang/crates.io-index" 560 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 561 | dependencies = [ 562 | "rand_core", 563 | ] 564 | 565 | [[package]] 566 | name = "rand_core" 567 | version = "0.6.4" 568 | source = "registry+https://github.com/rust-lang/crates.io-index" 569 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 570 | 571 | [[package]] 572 | name = "rustc-hash" 573 | version = "2.0.0" 574 | source = "registry+https://github.com/rust-lang/crates.io-index" 575 | checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" 576 | 577 | [[package]] 578 | name = "rustversion" 579 | version = "1.0.18" 580 | source = "registry+https://github.com/rust-lang/crates.io-index" 581 | checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" 582 | 583 | [[package]] 584 | name = "ryu" 585 | version = "1.0.18" 586 | source = "registry+https://github.com/rust-lang/crates.io-index" 587 | checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" 588 | 589 | [[package]] 590 | name = "ryu-js" 591 | version = "1.0.2" 592 | source = "registry+https://github.com/rust-lang/crates.io-index" 593 | checksum = "dd29631678d6fb0903b69223673e122c32e9ae559d0960a38d574695ebc0ea15" 594 | 595 | [[package]] 596 | name = "self_cell" 597 | version = "1.1.0" 598 | source = "registry+https://github.com/rust-lang/crates.io-index" 599 | checksum = "c2fdfc24bc566f839a2da4c4295b82db7d25a24253867d5c64355abb5799bdbe" 600 | 601 | [[package]] 602 | name = "seq-macro" 603 | version = "0.3.6" 604 | source = "registry+https://github.com/rust-lang/crates.io-index" 605 | checksum = "1bc711410fbe7399f390ca1c3b60ad0f53f80e95c5eb935e52268a0e2cd49acc" 606 | 607 | [[package]] 608 | name = "serde" 609 | version = "1.0.219" 610 | source = "registry+https://github.com/rust-lang/crates.io-index" 611 | checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" 612 | dependencies = [ 613 | "serde_derive", 614 | ] 615 | 616 | [[package]] 617 | name = "serde-wasm-bindgen" 618 | version = "0.6.5" 619 | source = "registry+https://github.com/rust-lang/crates.io-index" 620 | checksum = "8302e169f0eddcc139c70f139d19d6467353af16f9fce27e8c30158036a1e16b" 621 | dependencies = [ 622 | "js-sys", 623 | "serde", 624 | "wasm-bindgen", 625 | ] 626 | 627 | [[package]] 628 | name = "serde_derive" 629 | version = "1.0.219" 630 | source = "registry+https://github.com/rust-lang/crates.io-index" 631 | checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" 632 | dependencies = [ 633 | "proc-macro2", 634 | "quote", 635 | "syn", 636 | ] 637 | 638 | [[package]] 639 | name = "serde_derive_internals" 640 | version = "0.29.1" 641 | source = "registry+https://github.com/rust-lang/crates.io-index" 642 | checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" 643 | dependencies = [ 644 | "proc-macro2", 645 | "quote", 646 | "syn", 647 | ] 648 | 649 | [[package]] 650 | name = "serde_json" 651 | version = "1.0.133" 652 | source = "registry+https://github.com/rust-lang/crates.io-index" 653 | checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377" 654 | dependencies = [ 655 | "itoa", 656 | "memchr", 657 | "ryu", 658 | "serde", 659 | ] 660 | 661 | [[package]] 662 | name = "simdutf8" 663 | version = "0.1.5" 664 | source = "registry+https://github.com/rust-lang/crates.io-index" 665 | checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" 666 | 667 | [[package]] 668 | name = "siphasher" 669 | version = "1.0.1" 670 | source = "registry+https://github.com/rust-lang/crates.io-index" 671 | checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" 672 | 673 | [[package]] 674 | name = "smawk" 675 | version = "0.3.2" 676 | source = "registry+https://github.com/rust-lang/crates.io-index" 677 | checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c" 678 | 679 | [[package]] 680 | name = "static_assertions" 681 | version = "1.1.0" 682 | source = "registry+https://github.com/rust-lang/crates.io-index" 683 | checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" 684 | 685 | [[package]] 686 | name = "syn" 687 | version = "2.0.101" 688 | source = "registry+https://github.com/rust-lang/crates.io-index" 689 | checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" 690 | dependencies = [ 691 | "proc-macro2", 692 | "quote", 693 | "unicode-ident", 694 | ] 695 | 696 | [[package]] 697 | name = "textwrap" 698 | version = "0.16.2" 699 | source = "registry+https://github.com/rust-lang/crates.io-index" 700 | checksum = "c13547615a44dc9c452a8a534638acdf07120d4b6847c8178705da06306a3057" 701 | dependencies = [ 702 | "smawk", 703 | "unicode-linebreak", 704 | "unicode-width", 705 | ] 706 | 707 | [[package]] 708 | name = "thiserror" 709 | version = "2.0.12" 710 | source = "registry+https://github.com/rust-lang/crates.io-index" 711 | checksum = "567b8a2dae586314f7be2a752ec7474332959c6460e02bde30d702a66d488708" 712 | dependencies = [ 713 | "thiserror-impl", 714 | ] 715 | 716 | [[package]] 717 | name = "thiserror-impl" 718 | version = "2.0.12" 719 | source = "registry+https://github.com/rust-lang/crates.io-index" 720 | checksum = "7f7cf42b4507d8ea322120659672cf1b9dbb93f8f2d4ecfd6e51350ff5b17a1d" 721 | dependencies = [ 722 | "proc-macro2", 723 | "quote", 724 | "syn", 725 | ] 726 | 727 | [[package]] 728 | name = "tsify" 729 | version = "0.5.5" 730 | source = "registry+https://github.com/rust-lang/crates.io-index" 731 | checksum = "b2ec91b85e6c6592ed28636cb1dd1fac377ecbbeb170ff1d79f97aac5e38926d" 732 | dependencies = [ 733 | "gloo-utils", 734 | "serde", 735 | "serde_json", 736 | "tsify-macros", 737 | "wasm-bindgen", 738 | ] 739 | 740 | [[package]] 741 | name = "tsify-macros" 742 | version = "0.5.5" 743 | source = "registry+https://github.com/rust-lang/crates.io-index" 744 | checksum = "9a324606929ad11628a19206d7853807481dcaecd6c08be70a235930b8241955" 745 | dependencies = [ 746 | "proc-macro2", 747 | "quote", 748 | "serde_derive_internals", 749 | "syn", 750 | ] 751 | 752 | [[package]] 753 | name = "unicode-id-start" 754 | version = "1.3.1" 755 | source = "registry+https://github.com/rust-lang/crates.io-index" 756 | checksum = "2f322b60f6b9736017344fa0635d64be2f458fbc04eef65f6be22976dd1ffd5b" 757 | 758 | [[package]] 759 | name = "unicode-ident" 760 | version = "1.0.13" 761 | source = "registry+https://github.com/rust-lang/crates.io-index" 762 | checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" 763 | 764 | [[package]] 765 | name = "unicode-linebreak" 766 | version = "0.1.5" 767 | source = "registry+https://github.com/rust-lang/crates.io-index" 768 | checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" 769 | 770 | [[package]] 771 | name = "unicode-width" 772 | version = "0.2.0" 773 | source = "registry+https://github.com/rust-lang/crates.io-index" 774 | checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" 775 | 776 | [[package]] 777 | name = "wasm-bindgen" 778 | version = "0.2.100" 779 | source = "registry+https://github.com/rust-lang/crates.io-index" 780 | checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" 781 | dependencies = [ 782 | "cfg-if", 783 | "once_cell", 784 | "rustversion", 785 | "wasm-bindgen-macro", 786 | ] 787 | 788 | [[package]] 789 | name = "wasm-bindgen-backend" 790 | version = "0.2.100" 791 | source = "registry+https://github.com/rust-lang/crates.io-index" 792 | checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" 793 | dependencies = [ 794 | "bumpalo", 795 | "log", 796 | "proc-macro2", 797 | "quote", 798 | "syn", 799 | "wasm-bindgen-shared", 800 | ] 801 | 802 | [[package]] 803 | name = "wasm-bindgen-macro" 804 | version = "0.2.100" 805 | source = "registry+https://github.com/rust-lang/crates.io-index" 806 | checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" 807 | dependencies = [ 808 | "quote", 809 | "wasm-bindgen-macro-support", 810 | ] 811 | 812 | [[package]] 813 | name = "wasm-bindgen-macro-support" 814 | version = "0.2.100" 815 | source = "registry+https://github.com/rust-lang/crates.io-index" 816 | checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" 817 | dependencies = [ 818 | "proc-macro2", 819 | "quote", 820 | "syn", 821 | "wasm-bindgen-backend", 822 | "wasm-bindgen-shared", 823 | ] 824 | 825 | [[package]] 826 | name = "wasm-bindgen-shared" 827 | version = "0.2.100" 828 | source = "registry+https://github.com/rust-lang/crates.io-index" 829 | checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" 830 | dependencies = [ 831 | "unicode-ident", 832 | ] 833 | 834 | [[package]] 835 | name = "web-sys" 836 | version = "0.3.72" 837 | source = "registry+https://github.com/rust-lang/crates.io-index" 838 | checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" 839 | dependencies = [ 840 | "js-sys", 841 | "wasm-bindgen", 842 | ] 843 | -------------------------------------------------------------------------------- /src/oxc_regular_expression_wasm/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "oxc_regular_expression_wasm" 3 | version = "0.0.1" 4 | edition = "2021" 5 | publish = false 6 | 7 | [lib] 8 | crate-type = ["cdylib"] 9 | 10 | [dependencies] 11 | oxc = { version = "0.68.1", features = ["serialize"] } 12 | oxc_estree = "0.68.1" 13 | oxc_regular_expression = "0.68.1" 14 | serde = { version = "1.0.219", features = ["derive"] } 15 | wasm-bindgen = "0.2.100" 16 | serde-wasm-bindgen = "0.6.5" 17 | tsify = "0.5.5" 18 | -------------------------------------------------------------------------------- /src/oxc_regular_expression_wasm/build.sh: -------------------------------------------------------------------------------- 1 | npx wasm-pack@latest build --target web 2 | -------------------------------------------------------------------------------- /src/oxc_regular_expression_wasm/pkg/oxc_regular_expression_wasm.d.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | /* eslint-disable */ 3 | /** 4 | * # Errors 5 | * Serde serialization error 6 | */ 7 | export function parsePattern(pattern_text: string, flags_text: string): ParseReturn; 8 | export interface ParseReturn { 9 | ast_json: string; 10 | } 11 | 12 | export class ParseReturn { 13 | private constructor(); 14 | free(): void; 15 | ast_json: string; 16 | } 17 | 18 | export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module; 19 | 20 | export interface InitOutput { 21 | readonly memory: WebAssembly.Memory; 22 | readonly __wbg_parsereturn_free: (a: number, b: number) => void; 23 | readonly __wbg_get_parsereturn_ast_json: (a: number) => [number, number]; 24 | readonly __wbg_set_parsereturn_ast_json: (a: number, b: number, c: number) => void; 25 | readonly parsePattern: (a: number, b: number, c: number, d: number) => [number, number, number]; 26 | readonly __wbindgen_export_0: WebAssembly.Table; 27 | readonly __wbindgen_free: (a: number, b: number, c: number) => void; 28 | readonly __wbindgen_malloc: (a: number, b: number) => number; 29 | readonly __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number; 30 | readonly __externref_table_dealloc: (a: number) => void; 31 | readonly __wbindgen_start: () => void; 32 | } 33 | 34 | export type SyncInitInput = BufferSource | WebAssembly.Module; 35 | /** 36 | * Instantiates the given `module`, which can either be bytes or 37 | * a precompiled `WebAssembly.Module`. 38 | * 39 | * @param {{ module: SyncInitInput }} module - Passing `SyncInitInput` directly is deprecated. 40 | * 41 | * @returns {InitOutput} 42 | */ 43 | export function initSync(module: { module: SyncInitInput } | SyncInitInput): InitOutput; 44 | 45 | /** 46 | * If `module_or_path` is {RequestInfo} or {URL}, makes a request and 47 | * for everything else, calls `WebAssembly.instantiate` directly. 48 | * 49 | * @param {{ module_or_path: InitInput | Promise }} module_or_path - Passing `InitInput` directly is deprecated. 50 | * 51 | * @returns {Promise} 52 | */ 53 | export default function __wbg_init (module_or_path?: { module_or_path: InitInput | Promise } | InitInput | Promise): Promise; 54 | -------------------------------------------------------------------------------- /src/oxc_regular_expression_wasm/pkg/oxc_regular_expression_wasm.js: -------------------------------------------------------------------------------- 1 | let wasm; 2 | 3 | const cachedTextDecoder = (typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }) : { decode: () => { throw Error('TextDecoder not available') } } ); 4 | 5 | if (typeof TextDecoder !== 'undefined') { cachedTextDecoder.decode(); }; 6 | 7 | let cachedUint8ArrayMemory0 = null; 8 | 9 | function getUint8ArrayMemory0() { 10 | if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) { 11 | cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer); 12 | } 13 | return cachedUint8ArrayMemory0; 14 | } 15 | 16 | function getStringFromWasm0(ptr, len) { 17 | ptr = ptr >>> 0; 18 | return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len)); 19 | } 20 | 21 | let WASM_VECTOR_LEN = 0; 22 | 23 | const cachedTextEncoder = (typeof TextEncoder !== 'undefined' ? new TextEncoder('utf-8') : { encode: () => { throw Error('TextEncoder not available') } } ); 24 | 25 | const encodeString = (typeof cachedTextEncoder.encodeInto === 'function' 26 | ? function (arg, view) { 27 | return cachedTextEncoder.encodeInto(arg, view); 28 | } 29 | : function (arg, view) { 30 | const buf = cachedTextEncoder.encode(arg); 31 | view.set(buf); 32 | return { 33 | read: arg.length, 34 | written: buf.length 35 | }; 36 | }); 37 | 38 | function passStringToWasm0(arg, malloc, realloc) { 39 | 40 | if (realloc === undefined) { 41 | const buf = cachedTextEncoder.encode(arg); 42 | const ptr = malloc(buf.length, 1) >>> 0; 43 | getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf); 44 | WASM_VECTOR_LEN = buf.length; 45 | return ptr; 46 | } 47 | 48 | let len = arg.length; 49 | let ptr = malloc(len, 1) >>> 0; 50 | 51 | const mem = getUint8ArrayMemory0(); 52 | 53 | let offset = 0; 54 | 55 | for (; offset < len; offset++) { 56 | const code = arg.charCodeAt(offset); 57 | if (code > 0x7F) break; 58 | mem[ptr + offset] = code; 59 | } 60 | 61 | if (offset !== len) { 62 | if (offset !== 0) { 63 | arg = arg.slice(offset); 64 | } 65 | ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0; 66 | const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len); 67 | const ret = encodeString(arg, view); 68 | 69 | offset += ret.written; 70 | ptr = realloc(ptr, len, offset, 1) >>> 0; 71 | } 72 | 73 | WASM_VECTOR_LEN = offset; 74 | return ptr; 75 | } 76 | 77 | function takeFromExternrefTable0(idx) { 78 | const value = wasm.__wbindgen_export_0.get(idx); 79 | wasm.__externref_table_dealloc(idx); 80 | return value; 81 | } 82 | /** 83 | * # Errors 84 | * Serde serialization error 85 | * @param {string} pattern_text 86 | * @param {string} flags_text 87 | * @returns {ParseReturn} 88 | */ 89 | export function parsePattern(pattern_text, flags_text) { 90 | const ptr0 = passStringToWasm0(pattern_text, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); 91 | const len0 = WASM_VECTOR_LEN; 92 | const ptr1 = passStringToWasm0(flags_text, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); 93 | const len1 = WASM_VECTOR_LEN; 94 | const ret = wasm.parsePattern(ptr0, len0, ptr1, len1); 95 | if (ret[2]) { 96 | throw takeFromExternrefTable0(ret[1]); 97 | } 98 | return ParseReturn.__wrap(ret[0]); 99 | } 100 | 101 | const ParseReturnFinalization = (typeof FinalizationRegistry === 'undefined') 102 | ? { register: () => {}, unregister: () => {} } 103 | : new FinalizationRegistry(ptr => wasm.__wbg_parsereturn_free(ptr >>> 0, 1)); 104 | 105 | export class ParseReturn { 106 | 107 | static __wrap(ptr) { 108 | ptr = ptr >>> 0; 109 | const obj = Object.create(ParseReturn.prototype); 110 | obj.__wbg_ptr = ptr; 111 | ParseReturnFinalization.register(obj, obj.__wbg_ptr, obj); 112 | return obj; 113 | } 114 | 115 | __destroy_into_raw() { 116 | const ptr = this.__wbg_ptr; 117 | this.__wbg_ptr = 0; 118 | ParseReturnFinalization.unregister(this); 119 | return ptr; 120 | } 121 | 122 | free() { 123 | const ptr = this.__destroy_into_raw(); 124 | wasm.__wbg_parsereturn_free(ptr, 0); 125 | } 126 | /** 127 | * @returns {string} 128 | */ 129 | get ast_json() { 130 | let deferred1_0; 131 | let deferred1_1; 132 | try { 133 | const ret = wasm.__wbg_get_parsereturn_ast_json(this.__wbg_ptr); 134 | deferred1_0 = ret[0]; 135 | deferred1_1 = ret[1]; 136 | return getStringFromWasm0(ret[0], ret[1]); 137 | } finally { 138 | wasm.__wbindgen_free(deferred1_0, deferred1_1, 1); 139 | } 140 | } 141 | /** 142 | * @param {string} arg0 143 | */ 144 | set ast_json(arg0) { 145 | const ptr0 = passStringToWasm0(arg0, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); 146 | const len0 = WASM_VECTOR_LEN; 147 | wasm.__wbg_set_parsereturn_ast_json(this.__wbg_ptr, ptr0, len0); 148 | } 149 | } 150 | 151 | async function __wbg_load(module, imports) { 152 | if (typeof Response === 'function' && module instanceof Response) { 153 | if (typeof WebAssembly.instantiateStreaming === 'function') { 154 | try { 155 | return await WebAssembly.instantiateStreaming(module, imports); 156 | 157 | } catch (e) { 158 | if (module.headers.get('Content-Type') != 'application/wasm') { 159 | console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e); 160 | 161 | } else { 162 | throw e; 163 | } 164 | } 165 | } 166 | 167 | const bytes = await module.arrayBuffer(); 168 | return await WebAssembly.instantiate(bytes, imports); 169 | 170 | } else { 171 | const instance = await WebAssembly.instantiate(module, imports); 172 | 173 | if (instance instanceof WebAssembly.Instance) { 174 | return { instance, module }; 175 | 176 | } else { 177 | return instance; 178 | } 179 | } 180 | } 181 | 182 | function __wbg_get_imports() { 183 | const imports = {}; 184 | imports.wbg = {}; 185 | imports.wbg.__wbindgen_error_new = function(arg0, arg1) { 186 | const ret = new Error(getStringFromWasm0(arg0, arg1)); 187 | return ret; 188 | }; 189 | imports.wbg.__wbindgen_init_externref_table = function() { 190 | const table = wasm.__wbindgen_export_0; 191 | const offset = table.grow(4); 192 | table.set(0, undefined); 193 | table.set(offset + 0, undefined); 194 | table.set(offset + 1, null); 195 | table.set(offset + 2, true); 196 | table.set(offset + 3, false); 197 | ; 198 | }; 199 | imports.wbg.__wbindgen_throw = function(arg0, arg1) { 200 | throw new Error(getStringFromWasm0(arg0, arg1)); 201 | }; 202 | 203 | return imports; 204 | } 205 | 206 | function __wbg_init_memory(imports, memory) { 207 | 208 | } 209 | 210 | function __wbg_finalize_init(instance, module) { 211 | wasm = instance.exports; 212 | __wbg_init.__wbindgen_wasm_module = module; 213 | cachedUint8ArrayMemory0 = null; 214 | 215 | 216 | wasm.__wbindgen_start(); 217 | return wasm; 218 | } 219 | 220 | function initSync(module) { 221 | if (wasm !== undefined) return wasm; 222 | 223 | 224 | if (typeof module !== 'undefined') { 225 | if (Object.getPrototypeOf(module) === Object.prototype) { 226 | ({module} = module) 227 | } else { 228 | console.warn('using deprecated parameters for `initSync()`; pass a single object instead') 229 | } 230 | } 231 | 232 | const imports = __wbg_get_imports(); 233 | 234 | __wbg_init_memory(imports); 235 | 236 | if (!(module instanceof WebAssembly.Module)) { 237 | module = new WebAssembly.Module(module); 238 | } 239 | 240 | const instance = new WebAssembly.Instance(module, imports); 241 | 242 | return __wbg_finalize_init(instance, module); 243 | } 244 | 245 | async function __wbg_init(module_or_path) { 246 | if (wasm !== undefined) return wasm; 247 | 248 | 249 | if (typeof module_or_path !== 'undefined') { 250 | if (Object.getPrototypeOf(module_or_path) === Object.prototype) { 251 | ({module_or_path} = module_or_path) 252 | } else { 253 | console.warn('using deprecated parameters for the initialization function; pass a single object instead') 254 | } 255 | } 256 | 257 | if (typeof module_or_path === 'undefined') { 258 | module_or_path = new URL('oxc_regular_expression_wasm_bg.wasm', import.meta.url); 259 | } 260 | const imports = __wbg_get_imports(); 261 | 262 | if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) { 263 | module_or_path = fetch(module_or_path); 264 | } 265 | 266 | __wbg_init_memory(imports); 267 | 268 | const { instance, module } = await __wbg_load(await module_or_path, imports); 269 | 270 | return __wbg_finalize_init(instance, module); 271 | } 272 | 273 | export { initSync }; 274 | export default __wbg_init; 275 | -------------------------------------------------------------------------------- /src/oxc_regular_expression_wasm/pkg/oxc_regular_expression_wasm_bg.wasm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leaysgur/js-regexp-ast-viewer/9956049d4840cc0f4d9e2a0aa3531f76c6bd4c59/src/oxc_regular_expression_wasm/pkg/oxc_regular_expression_wasm_bg.wasm -------------------------------------------------------------------------------- /src/oxc_regular_expression_wasm/pkg/oxc_regular_expression_wasm_bg.wasm.d.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable */ 2 | /* eslint-disable */ 3 | export const memory: WebAssembly.Memory; 4 | export const __wbg_parsereturn_free: (a: number, b: number) => void; 5 | export const __wbg_get_parsereturn_ast_json: (a: number) => [number, number]; 6 | export const __wbg_set_parsereturn_ast_json: (a: number, b: number, c: number) => void; 7 | export const parsePattern: (a: number, b: number, c: number, d: number) => [number, number, number]; 8 | export const __wbindgen_export_0: WebAssembly.Table; 9 | export const __wbindgen_free: (a: number, b: number, c: number) => void; 10 | export const __wbindgen_malloc: (a: number, b: number) => number; 11 | export const __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number; 12 | export const __externref_table_dealloc: (a: number) => void; 13 | export const __wbindgen_start: () => void; 14 | -------------------------------------------------------------------------------- /src/oxc_regular_expression_wasm/pkg/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "oxc_regular_expression_wasm", 3 | "type": "module", 4 | "version": "0.0.1", 5 | "files": [ 6 | "oxc_regular_expression_wasm_bg.wasm", 7 | "oxc_regular_expression_wasm.js", 8 | "oxc_regular_expression_wasm.d.ts" 9 | ], 10 | "main": "oxc_regular_expression_wasm.js", 11 | "types": "oxc_regular_expression_wasm.d.ts", 12 | "sideEffects": [ 13 | "./snippets/*" 14 | ] 15 | } -------------------------------------------------------------------------------- /src/oxc_regular_expression_wasm/src/lib.rs: -------------------------------------------------------------------------------- 1 | // Silence erroneous warnings from Rust Analyser for `#[derive(Tsify)]` 2 | #![allow(non_snake_case)] 3 | 4 | use oxc::allocator::Allocator; 5 | use oxc_estree::{CompactJSSerializer, ESTree }; 6 | use oxc_regular_expression::{LiteralParser, Options}; 7 | use tsify::Tsify; 8 | use wasm_bindgen::prelude::*; 9 | 10 | #[wasm_bindgen(getter_with_clone)] 11 | #[derive(Default, Tsify)] 12 | pub struct ParseReturn { 13 | pub ast_json: String, 14 | } 15 | 16 | /// # Errors 17 | /// Serde serialization error 18 | #[wasm_bindgen(js_name = parsePattern)] 19 | pub fn parse_pattern( 20 | pattern_text: &str, 21 | flags_text: &str, 22 | ) -> Result { 23 | let allocator = Allocator::default(); 24 | 25 | let ret = LiteralParser::new( 26 | &allocator, 27 | pattern_text, 28 | Some(flags_text), 29 | Options::default(), 30 | ) 31 | .parse() 32 | .map_err(|err| serde_wasm_bindgen::Error::new(err.to_string()))?; 33 | 34 | // NOTE: This requires `JSON.parse()` from JS side, 35 | // but I'm not sure how to avoid it... 36 | let mut serializer = CompactJSSerializer::new(); 37 | ret.serialize(&mut serializer); 38 | let ast_json = serializer.into_string(); 39 | 40 | Ok(ParseReturn { ast_json }) 41 | } 42 | -------------------------------------------------------------------------------- /src/routes/+layout.svelte: -------------------------------------------------------------------------------- 1 |
2 |

JS RegExp AST Viewer

3 | GitHub 8 |
9 | 10 |
11 | 12 |
13 | 14 | 44 | -------------------------------------------------------------------------------- /src/routes/+layout.ts: -------------------------------------------------------------------------------- 1 | export const prerender = true; 2 | export const ssr = false; 3 | -------------------------------------------------------------------------------- /src/routes/+page.svelte: -------------------------------------------------------------------------------- 1 | 10 | 11 |
12 |
13 | Input RegExp 14 |
15 | // 16 | 17 |
18 |
19 | 20 |
21 | Output options 22 | 25 | 28 |
29 |
30 | 31 |
32 | {#await browser(hiddenKeys)} 33 |

Loading...

34 | {:then { parse, meta }} 35 | {@render result(parse(pattern, flags), meta)} 36 | {/await} 37 |
38 | 39 |
40 | {#each [oxc, regjs, regexpp, regexpTree] as factory} 41 |
42 | {#await factory(hiddenKeys)} 43 |

Loading...

44 | {:then { parse, meta }} 45 | {@render result(parse(pattern, flags), meta)} 46 | {#if meta.notes !== ""} 47 | NOTE: {meta.notes} 48 | {/if} 49 | {:catch err} 50 |

Error: {String(err)}

51 | {/await} 52 |
53 | {/each} 54 |
55 | 56 | {#snippet result(result: ParseResult, meta: ParseMeta)} 57 |

58 | {meta.name}@{meta.version} 59 |

60 | 61 | {#if result.ok} 62 |
{result.ast}
63 | {:else} 64 |
{result.err}
65 | {/if} 66 | {/snippet} 67 | 68 | 104 | -------------------------------------------------------------------------------- /static/.nojekyll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leaysgur/js-regexp-ast-viewer/9956049d4840cc0f4d9e2a0aa3531f76c6bd4c59/static/.nojekyll -------------------------------------------------------------------------------- /static/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leaysgur/js-regexp-ast-viewer/9956049d4840cc0f4d9e2a0aa3531f76c6bd4c59/static/favicon.png -------------------------------------------------------------------------------- /svelte.config.js: -------------------------------------------------------------------------------- 1 | import adapter from "@sveltejs/adapter-static"; 2 | import { vitePreprocess } from "@sveltejs/vite-plugin-svelte"; 3 | 4 | /** @type {import('@sveltejs/kit').Config} */ 5 | const config = { 6 | preprocess: vitePreprocess(), 7 | kit: { 8 | adapter: adapter({ 9 | pages: "docs", 10 | assets: "docs", 11 | fallback: "404.html", 12 | }), 13 | paths: { 14 | base: process.argv.includes("dev") ? "" : "/js-regexp-ast-viewer", 15 | }, 16 | }, 17 | }; 18 | 19 | export default config; 20 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./.svelte-kit/tsconfig.json", 3 | "compilerOptions": { 4 | "allowJs": true, 5 | "checkJs": true, 6 | "esModuleInterop": true, 7 | "forceConsistentCasingInFileNames": true, 8 | "resolveJsonModule": true, 9 | "skipLibCheck": true, 10 | "sourceMap": true, 11 | "strict": true, 12 | "moduleResolution": "bundler" 13 | } 14 | // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias 15 | // except $lib which is handled by https://kit.svelte.dev/docs/configuration#files 16 | // 17 | // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes 18 | // from the referenced tsconfig.json - TypeScript does not merge them in 19 | } 20 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { sveltekit } from "@sveltejs/kit/vite"; 2 | import wasm from "vite-plugin-wasm"; 3 | import { defineConfig } from "vite"; 4 | 5 | export default defineConfig({ 6 | plugins: [sveltekit(), wasm()], 7 | }); 8 | --------------------------------------------------------------------------------