@devwareng/vanilla-ts 1.8.0 → 1.8.107
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +64 -48
- package/dist/index.d.cts +5 -2
- package/dist/index.d.ts +5 -2
- package/dist/index.js +64 -48
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1,68 +1,84 @@
|
|
|
1
|
-
"use strict";var be=Object.create;var q=Object.defineProperty;var xe=Object.getOwnPropertyDescriptor;var Ae=Object.getOwnPropertyNames;var De=Object.getPrototypeOf,Me=Object.prototype.hasOwnProperty;var nt=(s,t)=>()=>(s&&(t=s(s=0)),t);var jt=(s,t)=>{for(var e in t)q(s,e,{get:t[e],enumerable:!0})},Ut=(s,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Ae(t))!Me.call(s,n)&&n!==e&&q(s,n,{get:()=>t[n],enumerable:!(r=xe(t,n))||r.enumerable});return s};var v=(s,t,e)=>(e=s!=null?be(De(s)):{},Ut(t||!s||!s.__esModule?q(e,"default",{value:s,enumerable:!0}):e,s)),Ce=s=>Ut(q({},"__esModule",{value:!0}),s);function oe(s,t={}){let e=t.entryType||t.type;if(e==="both"&&(e=R.FILE_DIR_TYPE),e&&(t.type=e),s){if(typeof s!="string")throw new TypeError("readdirp: root argument must be a string. Usage: readdirp(root, options)");if(e&&!ee.includes(e))throw new Error(`readdirp: Invalid type passed. Use one of ${ee.join(", ")}`)}else throw new Error("readdirp: root argument is required. Usage: readdirp(root, options)");return t.root=s,new Ot(t)}var M,re,C,R,Ct,ie,ze,ee,$e,We,je,Ue,se,ne,Ot,ae=nt(()=>{"use strict";M=require("fs/promises"),re=require("stream"),C=require("path"),R={FILE_TYPE:"files",DIR_TYPE:"directories",FILE_DIR_TYPE:"files_directories",EVERYTHING_TYPE:"all"},Ct={root:".",fileFilter:s=>!0,directoryFilter:s=>!0,type:R.FILE_TYPE,lstat:!1,depth:2147483648,alwaysStat:!1,highWaterMark:4096};Object.freeze(Ct);ie="READDIRP_RECURSIVE_ERROR",ze=new Set(["ENOENT","EPERM","EACCES","ELOOP",ie]),ee=[R.DIR_TYPE,R.EVERYTHING_TYPE,R.FILE_DIR_TYPE,R.FILE_TYPE],$e=new Set([R.DIR_TYPE,R.EVERYTHING_TYPE,R.FILE_DIR_TYPE]),We=new Set([R.EVERYTHING_TYPE,R.FILE_DIR_TYPE,R.FILE_TYPE]),je=s=>ze.has(s.code),Ue=process.platform==="win32",se=s=>!0,ne=s=>{if(s===void 0)return se;if(typeof s=="function")return s;if(typeof s=="string"){let t=s.trim();return e=>e.basename===t}if(Array.isArray(s)){let t=s.map(e=>e.trim());return e=>t.some(r=>e.basename===r)}return se},Ot=class extends re.Readable{constructor(t={}){super({objectMode:!0,autoDestroy:!0,highWaterMark:t.highWaterMark});let e={...Ct,...t},{root:r,type:n}=e;this._fileFilter=ne(e.fileFilter),this._directoryFilter=ne(e.directoryFilter);let i=e.lstat?M.lstat:M.stat;Ue?this._stat=a=>i(a,{bigint:!0}):this._stat=i,this._maxDepth=e.depth??Ct.depth,this._wantsDir=n?$e.has(n):!1,this._wantsFile=n?We.has(n):!1,this._wantsEverything=n===R.EVERYTHING_TYPE,this._root=(0,C.resolve)(r),this._isDirent=!e.alwaysStat,this._statsProp=this._isDirent?"dirent":"stats",this._rdOptions={encoding:"utf8",withFileTypes:this._isDirent},this.parents=[this._exploreDir(r,1)],this.reading=!1,this.parent=void 0}async _read(t){if(!this.reading){this.reading=!0;try{for(;!this.destroyed&&t>0;){let e=this.parent,r=e&&e.files;if(r&&r.length>0){let{path:n,depth:i}=e,a=r.splice(0,t).map(c=>this._formatEntry(c,n)),o=await Promise.all(a);for(let c of o){if(!c)continue;if(this.destroyed)return;let l=await this._getEntryType(c);l==="directory"&&this._directoryFilter(c)?(i<=this._maxDepth&&this.parents.push(this._exploreDir(c.fullPath,i+1)),this._wantsDir&&(this.push(c),t--)):(l==="file"||this._includeAsFile(c))&&this._fileFilter(c)&&this._wantsFile&&(this.push(c),t--)}}else{let n=this.parents.pop();if(!n){this.push(null);break}if(this.parent=await n,this.destroyed)return}}}catch(e){this.destroy(e)}finally{this.reading=!1}}}async _exploreDir(t,e){let r;try{r=await(0,M.readdir)(t,this._rdOptions)}catch(n){this._onError(n)}return{files:r,depth:e,path:t}}async _formatEntry(t,e){let r,n=this._isDirent?t.name:t;try{let i=(0,C.resolve)((0,C.join)(e,n));r={path:(0,C.relative)(this._root,i),fullPath:i,basename:n},r[this._statsProp]=this._isDirent?t:await this._stat(i)}catch(i){this._onError(i);return}return r}_onError(t){je(t)&&!this.destroyed?this.emit("warn",t):this.destroy(t)}async _getEntryType(t){if(!t&&this._statsProp in t)return"";let e=t[this._statsProp];if(e.isFile())return"file";if(e.isDirectory())return"directory";if(e&&e.isSymbolicLink()){let r=t.fullPath;try{let n=await(0,M.realpath)(r),i=await(0,M.lstat)(n);if(i.isFile())return"file";if(i.isDirectory()){let a=n.length;if(r.startsWith(n)&&r.substr(a,1)===C.sep){let o=new Error(`Circular symlink detected: "${r}" points to "${n}"`);return o.code=ie,this._onError(o)}return"directory"}}catch(n){return this._onError(n),""}}}_includeAsFile(t){let e=t&&t[this._statsProp];return e&&this._wantsEverything&&!e.isDirectory()}}});function ce(s,t,e,r,n){let i=(a,o)=>{e(s),n(a,o,{watchedPath:s}),o&&s!==o&&Q(w.resolve(s,o),F,w.join(s,o))};try{return(0,I.watch)(s,{persistent:t.persistent},i)}catch(a){r(a);return}}var I,x,w,le,qe,kt,ue,X,J,Ht,Ye,Be,Ge,de,E,b,Ve,Ke,F,V,H,Qe,Ze,Xe,It,$,Je,W,he,K,Q,ts,Ft,es,Z,fe=nt(()=>{"use strict";I=require("fs"),x=require("fs/promises"),w=v(require("path"),1),le=require("os"),qe="data",kt="end",ue="close",X=()=>{},J=process.platform,Ht=J==="win32",Ye=J==="darwin",Be=J==="linux",Ge=J==="freebsd",de=(0,le.type)()==="OS400",E={ALL:"all",READY:"ready",ADD:"add",CHANGE:"change",ADD_DIR:"addDir",UNLINK:"unlink",UNLINK_DIR:"unlinkDir",RAW:"raw",ERROR:"error"},b=E,Ve="watch",Ke={lstat:x.lstat,stat:x.stat},F="listeners",V="errHandlers",H="rawEmitters",Qe=[F,V,H],Ze=new Set(["3dm","3ds","3g2","3gp","7z","a","aac","adp","afdesign","afphoto","afpub","ai","aif","aiff","alz","ape","apk","appimage","ar","arj","asf","au","avi","bak","baml","bh","bin","bk","bmp","btif","bz2","bzip2","cab","caf","cgm","class","cmx","cpio","cr2","cur","dat","dcm","deb","dex","djvu","dll","dmg","dng","doc","docm","docx","dot","dotm","dra","DS_Store","dsk","dts","dtshd","dvb","dwg","dxf","ecelp4800","ecelp7470","ecelp9600","egg","eol","eot","epub","exe","f4v","fbs","fh","fla","flac","flatpak","fli","flv","fpx","fst","fvt","g3","gh","gif","graffle","gz","gzip","h261","h263","h264","icns","ico","ief","img","ipa","iso","jar","jpeg","jpg","jpgv","jpm","jxr","key","ktx","lha","lib","lvp","lz","lzh","lzma","lzo","m3u","m4a","m4v","mar","mdi","mht","mid","midi","mj2","mka","mkv","mmr","mng","mobi","mov","movie","mp3","mp4","mp4a","mpeg","mpg","mpga","mxu","nef","npx","numbers","nupkg","o","odp","ods","odt","oga","ogg","ogv","otf","ott","pages","pbm","pcx","pdb","pdf","pea","pgm","pic","png","pnm","pot","potm","potx","ppa","ppam","ppm","pps","ppsm","ppsx","ppt","pptm","pptx","psd","pya","pyc","pyo","pyv","qt","rar","ras","raw","resources","rgb","rip","rlc","rmf","rmvb","rpm","rtf","rz","s3m","s7z","scpt","sgi","shar","snap","sil","sketch","slk","smv","snk","so","stl","suo","sub","swf","tar","tbz","tbz2","tga","tgz","thmx","tif","tiff","tlz","ttc","ttf","txz","udf","uvh","uvi","uvm","uvp","uvs","uvu","viv","vob","war","wav","wax","wbmp","wdp","weba","webm","webp","whl","wim","wm","wma","wmv","wmx","woff","woff2","wrm","wvx","xbm","xif","xla","xlam","xls","xlsb","xlsm","xlsx","xlt","xltm","xltx","xm","xmind","xpi","xpm","xwd","xz","z","zip","zipx"]),Xe=s=>Ze.has(w.extname(s).slice(1).toLowerCase()),It=(s,t)=>{s instanceof Set?s.forEach(t):t(s)},$=(s,t,e)=>{let r=s[t];r instanceof Set||(s[t]=r=new Set([r])),r.add(e)},Je=s=>t=>{let e=s[t];e instanceof Set?e.clear():delete s[t]},W=(s,t,e)=>{let r=s[t];r instanceof Set?r.delete(e):r===e&&delete s[t]},he=s=>s instanceof Set?s.size===0:!s,K=new Map;Q=(s,t,e,r,n)=>{let i=K.get(s);i&&It(i[t],a=>{a(e,r,n)})},ts=(s,t,e,r)=>{let{listener:n,errHandler:i,rawEmitter:a}=r,o=K.get(t),c;if(!e.persistent)return c=ce(s,e,n,i,a),c?c.close.bind(c):void 0;if(o)$(o,F,n),$(o,V,i),$(o,H,a);else{if(c=ce(s,e,Q.bind(null,t,F),i,Q.bind(null,t,H)),!c)return;c.on(b.ERROR,async l=>{let u=Q.bind(null,t,V);if(o&&(o.watcherUnusable=!0),Ht&&l.code==="EPERM")try{await(await(0,x.open)(s,"r")).close(),u(l)}catch{}else u(l)}),o={listeners:n,errHandlers:i,rawEmitters:a,watcher:c},K.set(t,o)}return()=>{W(o,F,n),W(o,V,i),W(o,H,a),he(o.listeners)&&(o.watcher.close(),K.delete(t),Qe.forEach(Je(o)),o.watcher=void 0,Object.freeze(o))}},Ft=new Map,es=(s,t,e,r)=>{let{listener:n,rawEmitter:i}=r,a=Ft.get(t),o=a&&a.options;return o&&(o.persistent<e.persistent||o.interval>e.interval)&&((0,I.unwatchFile)(t),a=void 0),a?($(a,F,n),$(a,H,i)):(a={listeners:n,rawEmitters:i,options:e,watcher:(0,I.watchFile)(t,e,(c,l)=>{It(a.rawEmitters,d=>{d(b.CHANGE,t,{curr:c,prev:l})});let u=c.mtimeMs;(c.size!==l.size||u>l.mtimeMs||u===0)&&It(a.listeners,d=>d(s,c))})},Ft.set(t,a)),()=>{W(a,F,n),W(a,H,i),he(a.listeners)&&(Ft.delete(t),(0,I.unwatchFile)(t),a.options=a.watcher=void 0,Object.freeze(a))}},Z=class{constructor(t){this.fsw=t,this._boundHandleError=e=>t._handleError(e)}_watchWithNodeFs(t,e){let r=this.fsw.options,n=w.dirname(t),i=w.basename(t);this.fsw._getWatchedDir(n).add(i);let o=w.resolve(t),c={persistent:r.persistent};e||(e=X);let l;if(r.usePolling){let u=r.interval!==r.binaryInterval;c.interval=u&&Xe(i)?r.binaryInterval:r.interval,l=es(t,o,c,{listener:e,rawEmitter:this.fsw._emitRaw})}else l=ts(t,o,c,{listener:e,errHandler:this._boundHandleError,rawEmitter:this.fsw._emitRaw});return l}_handleFile(t,e,r){if(this.fsw.closed)return;let n=w.dirname(t),i=w.basename(t),a=this.fsw._getWatchedDir(n),o=e;if(a.has(i))return;let c=async(u,d)=>{if(this.fsw._throttle(Ve,t,5)){if(!d||d.mtimeMs===0)try{let h=await(0,x.stat)(t);if(this.fsw.closed)return;let f=h.atimeMs,g=h.mtimeMs;if((!f||f<=g||g!==o.mtimeMs)&&this.fsw._emit(b.CHANGE,t,h),(Ye||Be||Ge)&&o.ino!==h.ino){this.fsw._closeFile(u),o=h;let S=this._watchWithNodeFs(t,c);S&&this.fsw._addPathCloser(u,S)}else o=h}catch{this.fsw._remove(n,i)}else if(a.has(i)){let h=d.atimeMs,f=d.mtimeMs;(!h||h<=f||f!==o.mtimeMs)&&this.fsw._emit(b.CHANGE,t,d),o=d}}},l=this._watchWithNodeFs(t,c);if(!(r&&this.fsw.options.ignoreInitial)&&this.fsw._isntIgnored(t)){if(!this.fsw._throttle(b.ADD,t,0))return;this.fsw._emit(b.ADD,t,e)}return l}async _handleSymlink(t,e,r,n){if(this.fsw.closed)return;let i=t.fullPath,a=this.fsw._getWatchedDir(e);if(!this.fsw.options.followSymlinks){this.fsw._incrReadyCount();let o;try{o=await(0,x.realpath)(r)}catch{return this.fsw._emitReady(),!0}return this.fsw.closed?void 0:(a.has(n)?this.fsw._symlinkPaths.get(i)!==o&&(this.fsw._symlinkPaths.set(i,o),this.fsw._emit(b.CHANGE,r,t.stats)):(a.add(n),this.fsw._symlinkPaths.set(i,o),this.fsw._emit(b.ADD,r,t.stats)),this.fsw._emitReady(),!0)}if(this.fsw._symlinkPaths.has(i))return!0;this.fsw._symlinkPaths.set(i,!0)}_handleRead(t,e,r,n,i,a,o){if(t=w.join(t,""),o=this.fsw._throttle("readdir",t,1e3),!o)return;let c=this.fsw._getWatchedDir(r.path),l=new Set,u=this.fsw._readdirp(t,{fileFilter:d=>r.filterPath(d),directoryFilter:d=>r.filterDir(d)});if(u)return u.on(qe,async d=>{if(this.fsw.closed){u=void 0;return}let h=d.path,f=w.join(t,h);if(l.add(h),!(d.stats.isSymbolicLink()&&await this._handleSymlink(d,t,f,h))){if(this.fsw.closed){u=void 0;return}(h===n||!n&&!c.has(h))&&(this.fsw._incrReadyCount(),f=w.join(i,w.relative(i,f)),this._addToNodeFs(f,e,r,a+1))}}).on(b.ERROR,this._boundHandleError),new Promise((d,h)=>{if(!u)return h();u.once(kt,()=>{if(this.fsw.closed){u=void 0;return}let f=o?o.clear():!1;d(void 0),c.getChildren().filter(g=>g!==t&&!l.has(g)).forEach(g=>{this.fsw._remove(t,g)}),u=void 0,f&&this._handleRead(t,!1,r,n,i,a,o)})})}async _handleDir(t,e,r,n,i,a,o){let c=this.fsw._getWatchedDir(w.dirname(t)),l=c.has(w.basename(t));!(r&&this.fsw.options.ignoreInitial)&&!i&&!l&&this.fsw._emit(b.ADD_DIR,t,e),c.add(w.basename(t)),this.fsw._getWatchedDir(t);let u,d,h=this.fsw.options.depth;if((h==null||n<=h)&&!this.fsw._symlinkPaths.has(o)){if(!i&&(await this._handleRead(t,r,a,i,t,n,u),this.fsw.closed))return;d=this._watchWithNodeFs(t,(f,g)=>{g&&g.mtimeMs===0||this._handleRead(f,!1,a,i,t,n,u)})}return d}async _addToNodeFs(t,e,r,n,i){let a=this.fsw._emitReady;if(this.fsw._isIgnored(t)||this.fsw.closed)return a(),!1;let o=this.fsw._getWatchHelpers(t);r&&(o.filterPath=c=>r.filterPath(c),o.filterDir=c=>r.filterDir(c));try{let c=await Ke[o.statMethod](o.watchPath);if(this.fsw.closed)return;if(this.fsw._isIgnored(o.watchPath,c))return a(),!1;let l=this.fsw.options.followSymlinks,u;if(c.isDirectory()){let d=w.resolve(t),h=l?await(0,x.realpath)(t):t;if(this.fsw.closed||(u=await this._handleDir(o.watchPath,c,e,n,i,o,h),this.fsw.closed))return;d!==h&&h!==void 0&&this.fsw._symlinkPaths.set(d,h)}else if(c.isSymbolicLink()){let d=l?await(0,x.realpath)(t):t;if(this.fsw.closed)return;let h=w.dirname(o.watchPath);if(this.fsw._getWatchedDir(h).add(o.watchPath),this.fsw._emit(b.ADD,o.watchPath,c),u=await this._handleDir(h,c,e,n,t,o,d),this.fsw.closed)return;d!==void 0&&this.fsw._symlinkPaths.set(w.resolve(t),d)}else u=this._handleFile(o.watchPath,c,e);return a(),u&&this.fsw._addPathCloser(t,u),!1}catch(c){if(this.fsw._handleError(c))return a(),t}}}});var ve={};jt(ve,{FSWatcher:()=>j,WatchHelper:()=>et,default:()=>ps,watch:()=>Pe});function tt(s){return Array.isArray(s)?s:[s]}function cs(s){return typeof s=="function"?s:typeof s=="string"?t=>s===t:s instanceof RegExp?t=>s.test(t):typeof s=="object"&&s!==null?t=>{if(s.path===t)return!0;if(s.recursive){let e=m.relative(s.path,t);return e?!e.startsWith("..")&&!m.isAbsolute(e):!1}return!1}:()=>!1}function ls(s){if(typeof s!="string")throw new Error("string expected");s=m.normalize(s),s=s.replace(/\\/g,"/");let t=!1;s.startsWith("//")&&(t=!0);let e=/\/\//;for(;s.match(e);)s=s.replace(e,"/");return t&&(s="/"+s),s}function pe(s,t,e){let r=ls(t);for(let n=0;n<s.length;n++){let i=s[n];if(i(r,e))return!0}return!1}function us(s,t){if(s==null)throw new TypeError("anymatch: specify first argument");let r=tt(s).map(n=>cs(n));return t==null?(n,i)=>pe(r,n,i):pe(r,t)}function Pe(s,t={}){let e=new j(t);return e.add(s),e}var Ee,st,Te,m,Nt,ss,_e,ns,rs,is,me,os,as,zt,ge,ye,Se,we,ds,hs,$t,fs,ms,et,j,ps,Re=nt(()=>{"use strict";Ee=require("fs"),st=require("fs/promises"),Te=require("events"),m=v(require("path"),1);ae();fe();Nt="/",ss="//",_e=".",ns="..",rs="string",is=/\\/g,me=/\/\//,os=/\..*\.(sw[px])$|~$|\.subl.*\.tmp/,as=/^\.[/\\]/;zt=s=>typeof s=="object"&&s!==null&&!(s instanceof RegExp);ge=s=>{let t=tt(s).flat();if(!t.every(e=>typeof e===rs))throw new TypeError(`Non-string provided as watch path: ${t}`);return t.map(Se)},ye=s=>{let t=s.replace(is,Nt),e=!1;for(t.startsWith(ss)&&(e=!0);t.match(me);)t=t.replace(me,Nt);return e&&(t=Nt+t),t},Se=s=>ye(m.normalize(ye(s))),we=(s="")=>t=>typeof t=="string"?Se(m.isAbsolute(t)?t:m.join(s,t)):t,ds=(s,t)=>m.isAbsolute(s)?s:m.join(t,s),hs=Object.freeze(new Set),$t=class{constructor(t,e){this.path=t,this._removeWatcher=e,this.items=new Set}add(t){let{items:e}=this;e&&t!==_e&&t!==ns&&e.add(t)}async remove(t){let{items:e}=this;if(!e||(e.delete(t),e.size>0))return;let r=this.path;try{await(0,st.readdir)(r)}catch{this._removeWatcher&&this._removeWatcher(m.dirname(r),m.basename(r))}}has(t){let{items:e}=this;if(e)return e.has(t)}getChildren(){let{items:t}=this;return t?[...t.values()]:[]}dispose(){this.items.clear(),this.path="",this._removeWatcher=X,this.items=hs,Object.freeze(this)}},fs="stat",ms="lstat",et=class{constructor(t,e,r){this.fsw=r;let n=t;this.path=t=t.replace(as,""),this.watchPath=n,this.fullWatchPath=m.resolve(n),this.dirParts=[],this.dirParts.forEach(i=>{i.length>1&&i.pop()}),this.followSymlinks=e,this.statMethod=e?fs:ms}entryPath(t){return m.join(this.watchPath,m.relative(this.watchPath,t.fullPath))}filterPath(t){let{stats:e}=t;if(e&&e.isSymbolicLink())return this.filterDir(t);let r=this.entryPath(t);return this.fsw._isntIgnored(r,e)&&this.fsw._hasReadPermissions(e)}filterDir(t){return this.fsw._isntIgnored(this.entryPath(t),t.stats)}},j=class extends Te.EventEmitter{constructor(t={}){super(),this.closed=!1,this._closers=new Map,this._ignoredPaths=new Set,this._throttled=new Map,this._streams=new Set,this._symlinkPaths=new Map,this._watched=new Map,this._pendingWrites=new Map,this._pendingUnlinks=new Map,this._readyCount=0,this._readyEmitted=!1;let e=t.awaitWriteFinish,r={stabilityThreshold:2e3,pollInterval:100},n={persistent:!0,ignoreInitial:!1,ignorePermissionErrors:!1,interval:100,binaryInterval:300,followSymlinks:!0,usePolling:!1,atomic:!0,...t,ignored:t.ignored?tt(t.ignored):tt([]),awaitWriteFinish:e===!0?r:typeof e=="object"?{...r,...e}:!1};de&&(n.usePolling=!0),n.atomic===void 0&&(n.atomic=!n.usePolling);let i=process.env.CHOKIDAR_USEPOLLING;if(i!==void 0){let c=i.toLowerCase();c==="false"||c==="0"?n.usePolling=!1:c==="true"||c==="1"?n.usePolling=!0:n.usePolling=!!c}let a=process.env.CHOKIDAR_INTERVAL;a&&(n.interval=Number.parseInt(a,10));let o=0;this._emitReady=()=>{o++,o>=this._readyCount&&(this._emitReady=X,this._readyEmitted=!0,process.nextTick(()=>this.emit(E.READY)))},this._emitRaw=(...c)=>this.emit(E.RAW,...c),this._boundRemove=this._remove.bind(this),this.options=n,this._nodeFsHandler=new Z(this),Object.freeze(n)}_addIgnoredPath(t){if(zt(t)){for(let e of this._ignoredPaths)if(zt(e)&&e.path===t.path&&e.recursive===t.recursive)return}this._ignoredPaths.add(t)}_removeIgnoredPath(t){if(this._ignoredPaths.delete(t),typeof t=="string")for(let e of this._ignoredPaths)zt(e)&&e.path===t&&this._ignoredPaths.delete(e)}add(t,e,r){let{cwd:n}=this.options;this.closed=!1,this._closePromise=void 0;let i=ge(t);return n&&(i=i.map(a=>ds(a,n))),i.forEach(a=>{this._removeIgnoredPath(a)}),this._userIgnored=void 0,this._readyCount||(this._readyCount=0),this._readyCount+=i.length,Promise.all(i.map(async a=>{let o=await this._nodeFsHandler._addToNodeFs(a,!r,void 0,0,e);return o&&this._emitReady(),o})).then(a=>{this.closed||a.forEach(o=>{o&&this.add(m.dirname(o),m.basename(e||o))})}),this}unwatch(t){if(this.closed)return this;let e=ge(t),{cwd:r}=this.options;return e.forEach(n=>{!m.isAbsolute(n)&&!this._closers.has(n)&&(r&&(n=m.join(r,n)),n=m.resolve(n)),this._closePath(n),this._addIgnoredPath(n),this._watched.has(n)&&this._addIgnoredPath({path:n,recursive:!0}),this._userIgnored=void 0}),this}close(){if(this._closePromise)return this._closePromise;this.closed=!0,this.removeAllListeners();let t=[];return this._closers.forEach(e=>e.forEach(r=>{let n=r();n instanceof Promise&&t.push(n)})),this._streams.forEach(e=>e.destroy()),this._userIgnored=void 0,this._readyCount=0,this._readyEmitted=!1,this._watched.forEach(e=>e.dispose()),this._closers.clear(),this._watched.clear(),this._streams.clear(),this._symlinkPaths.clear(),this._throttled.clear(),this._closePromise=t.length?Promise.all(t).then(()=>{}):Promise.resolve(),this._closePromise}getWatched(){let t={};return this._watched.forEach((e,r)=>{let i=(this.options.cwd?m.relative(this.options.cwd,r):r)||_e;t[i]=e.getChildren().sort()}),t}emitWithAll(t,e){this.emit(t,...e),t!==E.ERROR&&this.emit(E.ALL,t,...e)}async _emit(t,e,r){if(this.closed)return;let n=this.options;Ht&&(e=m.normalize(e)),n.cwd&&(e=m.relative(n.cwd,e));let i=[e];r!=null&&i.push(r);let a=n.awaitWriteFinish,o;if(a&&(o=this._pendingWrites.get(e)))return o.lastChange=new Date,this;if(n.atomic){if(t===E.UNLINK)return this._pendingUnlinks.set(e,[t,...i]),setTimeout(()=>{this._pendingUnlinks.forEach((c,l)=>{this.emit(...c),this.emit(E.ALL,...c),this._pendingUnlinks.delete(l)})},typeof n.atomic=="number"?n.atomic:100),this;t===E.ADD&&this._pendingUnlinks.has(e)&&(t=E.CHANGE,this._pendingUnlinks.delete(e))}if(a&&(t===E.ADD||t===E.CHANGE)&&this._readyEmitted){let c=(l,u)=>{l?(t=E.ERROR,i[0]=l,this.emitWithAll(t,i)):u&&(i.length>1?i[1]=u:i.push(u),this.emitWithAll(t,i))};return this._awaitWriteFinish(e,a.stabilityThreshold,t,c),this}if(t===E.CHANGE&&!this._throttle(E.CHANGE,e,50))return this;if(n.alwaysStat&&r===void 0&&(t===E.ADD||t===E.ADD_DIR||t===E.CHANGE)){let c=n.cwd?m.join(n.cwd,e):e,l;try{l=await(0,st.stat)(c)}catch{}if(!l||this.closed)return;i.push(l)}return this.emitWithAll(t,i),this}_handleError(t){let e=t&&t.code;return t&&e!=="ENOENT"&&e!=="ENOTDIR"&&(!this.options.ignorePermissionErrors||e!=="EPERM"&&e!=="EACCES")&&this.emit(E.ERROR,t),t||this.closed}_throttle(t,e,r){this._throttled.has(t)||this._throttled.set(t,new Map);let n=this._throttled.get(t);if(!n)throw new Error("invalid throttle");let i=n.get(e);if(i)return i.count++,!1;let a,o=()=>{let l=n.get(e),u=l?l.count:0;return n.delete(e),clearTimeout(a),l&&clearTimeout(l.timeoutObject),u};a=setTimeout(o,r);let c={timeoutObject:a,clear:o,count:0};return n.set(e,c),c}_incrReadyCount(){return this._readyCount++}_awaitWriteFinish(t,e,r,n){let i=this.options.awaitWriteFinish;if(typeof i!="object")return;let a=i.pollInterval,o,c=t;this.options.cwd&&!m.isAbsolute(t)&&(c=m.join(this.options.cwd,t));let l=new Date,u=this._pendingWrites;function d(h){(0,Ee.stat)(c,(f,g)=>{if(f||!u.has(t)){f&&f.code!=="ENOENT"&&n(f);return}let S=Number(new Date);h&&g.size!==h.size&&(u.get(t).lastChange=S);let T=u.get(t);S-T.lastChange>=e?(u.delete(t),n(void 0,g)):o=setTimeout(d,a,g)})}u.has(t)||(u.set(t,{lastChange:l,cancelWait:()=>(u.delete(t),clearTimeout(o),r)}),o=setTimeout(d,a))}_isIgnored(t,e){if(this.options.atomic&&os.test(t))return!0;if(!this._userIgnored){let{cwd:r}=this.options,i=(this.options.ignored||[]).map(we(r)),o=[...[...this._ignoredPaths].map(we(r)),...i];this._userIgnored=us(o,void 0)}return this._userIgnored(t,e)}_isntIgnored(t,e){return!this._isIgnored(t,e)}_getWatchHelpers(t){return new et(t,this.options.followSymlinks,this)}_getWatchedDir(t){let e=m.resolve(t);return this._watched.has(e)||this._watched.set(e,new $t(e,this._boundRemove)),this._watched.get(e)}_hasReadPermissions(t){return this.options.ignorePermissionErrors?!0:!!(Number(t.mode)&256)}_remove(t,e,r){let n=m.join(t,e),i=m.resolve(n);if(r=r??(this._watched.has(n)||this._watched.has(i)),!this._throttle("remove",n,100))return;!r&&this._watched.size===1&&this.add(t,e,!0),this._getWatchedDir(n).getChildren().forEach(h=>this._remove(n,h));let c=this._getWatchedDir(t),l=c.has(e);c.remove(e),this._symlinkPaths.has(i)&&this._symlinkPaths.delete(i);let u=n;if(this.options.cwd&&(u=m.relative(this.options.cwd,n)),this.options.awaitWriteFinish&&this._pendingWrites.has(u)&&this._pendingWrites.get(u).cancelWait()===E.ADD)return;this._watched.delete(n),this._watched.delete(i);let d=r?E.UNLINK_DIR:E.UNLINK;l&&!this._isIgnored(n)&&this._emit(d,n),this._closePath(n)}_closePath(t){this._closeFile(t);let e=m.dirname(t);this._getWatchedDir(e).remove(m.basename(t))}_closeFile(t){let e=this._closers.get(t);e&&(e.forEach(r=>r()),this._closers.delete(t))}_addPathCloser(t,e){if(!e)return;let r=this._closers.get(t);r||(r=[],this._closers.set(t,r)),r.push(e)}_readdirp(t,e){if(this.closed)return;let r={type:E.ALL,alwaysStat:!0,lstat:!0,...e,depth:0},n=oe(t,r);return this._streams.add(n),n.once(ue,()=>{n=void 0}),n.once(kt,()=>{n&&(this._streams.delete(n),n=void 0)}),n}};ps={watch:Pe,FSWatcher:j}});var gs={};jt(gs,{TSFilebasedRouter:()=>Le,TSRouter:()=>G,createEffect:()=>vt,createSignal:()=>Pt,html:()=>rt,loadPyFiles:()=>Lt,mapper:()=>qt,renderChildRoutes:()=>St,useAnchorSingle:()=>gt,useInitialDOM:()=>mt,useTSAuth:()=>Et,useTSCollection:()=>wt,useTSComponent:()=>z,useTSElementEach:()=>B,useTSElements:()=>ht,useTSEvent:()=>at,useTSEventAll:()=>ut,useTSExtractParams:()=>lt,useTSLazy:()=>bt,useTSMetaData:()=>yt,useTSNavigate:()=>Tt,useTSNoReload:()=>Dt,useTSOutlet:()=>_t,useTSParams:()=>N,useTSPurifier:()=>ot,useTSSSRHydration:()=>xt,useTSSelect:()=>k,useTSloadBrython:()=>Rt});module.exports=Ce(gs);function Oe(s){let t=s==null?"":String(s),e=t.toLowerCase();return(e.includes("<script")||e.includes("javascript:"))&&(t=""),t=t.replace(/url\(\s*(['"])?\s*\1?\s*\)/gi,""),t.replace(/<\s*(script|iframe|object|embed|link|style|meta|body)[^>]*>.*?<\s*\/\s*\1\s*>/gi,"").replace(/<\s*(script|iframe|object|embed|link|style|meta)[^>]*>/gi,"").replace(/\s+on\w+\s*=\s*(['"]).*?\1/gi,"").replace(/\s+on\w+\s*=\s*[^\s>]+/gi,"").replace(/\s(href|src)\s*=\s*(['"]?)\s*(javascript:|vbscript:|data:|file:)[^'">\s]*\2/gi,'$1="#"')}function rt(s,...t){return s.reduce((e,r,n)=>{let i=n<t.length?Oe(t[n]):"";return e+r+i},"")}var Fe=s=>s.replace(/<\/?(script|iframe|object|embed|link|meta|style|form|textarea|svg|math|body)[^>]*>/gi,"").replace(/<(?!\/?(b|i|em|strong|p|br|ul|ol|li|a|div|span|h1|h2|h3|h4|h5|h6|section|article|input|button)\b)[^>]*>/gi,"").replace(/\s+on[a-z]+\s*=\s*("[^"]*"|'[^']*'|[^\s>]+)/gi,"").replace(/\s*style\s*=\s*("[^"]*"|'[^']*')/gi,"").replace(/<a\b([^>]*)href\s*=\s*(['"]?)(?!https?:|#)[^'"\s>]+(['"]?)([^>]*)>/gi,"<a$1$4>").replace(/\s+(href|src)\s*=\s*(['"]?)\s*(javascript:|data:)[^'"\s>]*/gi,"").replace(/<a\b([^>]*)\bhref\s*=\s*(['"])(\/blog|#blog)\2([^>]*)>/gi,'<a$1 href=$2$3$2 href-line="true"$4>').trim(),qt=s=>s?.map(t=>Fe(t)).join("")??"";var it=v(require("dompurify"),1),ot=(s,t)=>{let r={...{ADD_TAGS:["my-custom-tag"]},...t};return typeof s=="string"?it.default.sanitize(s,r):it.default.sanitize(s.innerHTML,r)};var at=(s,t,e)=>{if(typeof s=="string"){let r=document.getElementById(s);r?r.addEventListener(t,e):console.warn(`Element with id '${s}' not found.`)}else s instanceof HTMLElement?s.addEventListener(t,e):s===document?document.addEventListener(t,e):console.warn("Invalid target parameter provided.")};var Yt=require("zustand/vanilla"),ct=v(require("dompurify"),1);function Ie(s,t){let e=[],r=s.replace(/:[^/]+/g,o=>(e.push(o.slice(1)),"([^/]+)")),n=new RegExp(`^${r}$`),i=t.match(n),a={};return i&&e.forEach((o,c)=>{a[o]=ct.default.sanitize(i[c+1]??"")}),a}function ke(s){let t={},e=new URLSearchParams(s);for(let[r,n]of e.entries())t[r]=ct.default.sanitize(n);return t}var N=(0,Yt.createStore)((s,t)=>({params:{},query:{},setFromPattern:e=>{let r=window.location.pathname,n=Ie(e,r),i=ke(window.location.search);s({params:n,query:i})},getParam:e=>t().params[e],getQuery:e=>t().query[e]}));function lt(s){let t=N.getState();t.setFromPattern(s);let e=t.params,r=t.query;return{...e,...r}}var ut=(s,t,e)=>{let r=document.querySelectorAll(s);return r.forEach(n=>{n.addEventListener(t,e)}),()=>{r.forEach(n=>{n.removeEventListener(t,e)})}};var dt=v(require("dompurify"),1),ht=(s,t,e={},r)=>{let n={USE_PROFILES:{svg:!0,html:!0},ALLOWED_TAGS:["svg","path","circle","rect","line","polyline","polygon","g","main","div","h1","h2","h3","h4","h5","h6","p","button","span","a","img","input","ul","li","i","label","form"],ALLOWED_ATTR:["class","id","href","src","alt","title","fill","stroke","stroke-width","viewBox","xmlns","d","x","y","cx","cy","r","width","height","type","name","value","placeholder","data-click","data-change","data-select","data-classlist","data-hover","data-submit","data-key","data-event"],FORBID_TAGS:["script","iframe","foreignObject","body","html"],FORBID_ATTR:["style","xlink:href"],ALLOWED_URI_REGEXP:/^(?:(?:https?|mailto|tel|ftp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i,...r};dt.default.addHook("uponSanitizeAttribute",(o,c)=>{let l=(c.attrName||"").toLowerCase(),u=(c.attrValue??"").toString().trim();if(l.startsWith("on")){c.keepAttr=!1;return}if(/^data-(click|change|submit|select|hover|classlist|key|event)$/.test(l)){c.keepAttr=!0;return}if(o.nodeName.toLowerCase()==="img"&&l==="src"){/^https?:\/\//i.test(u)||/^\/(?!\/)/.test(u)||/^data:image\/(png|jpeg|jpg|gif|webp);base64,/i.test(u)||(c.keepAttr=!1);return}if(l==="class"){let h=u.split(/\s+/).filter(Boolean).filter(f=>{if(/^[a-zA-Z0-9\-\:\/_\[\]\(\)]*$/.test(f)){if(/^bg-\[url\(.*\)\]$/.test(f)){let g=f.replace(/^bg-\[url\(/,"").replace(/\)\]$/,"").replace(/^['"]|['"]$/g,"");return g===""||/^https?:\/\//i.test(g)||/^\/(?!\/)/.test(g)||/^\.{0,2}\//.test(g)}return/^bg-\[\]$/.test(f),!0}return!1});c.attrValue=h.join(" ");return}});let i=dt.default.sanitize(t,{...n,RETURN_DOM_FRAGMENT:!0});for(;s.firstChild;)s.removeChild(s.firstChild);s.appendChild(i);let a=(o,c)=>{s.querySelectorAll(`[${o}]`).forEach(l=>{let u=l.getAttribute(o);u&&Object.prototype.hasOwnProperty.call(e,u)&&l.addEventListener(c,d=>{c==="submit"&&d.preventDefault(),e[u](d)})})};a("data-click","click"),a("data-change","change"),a("data-select","select"),a("data-submit","submit"),s.querySelectorAll("[data-key]").forEach(o=>{let c=o.dataset.key,l=o.dataset.event??"click";c&&Object.prototype.hasOwnProperty.call(e,c)&&o.addEventListener(l,e[c])}),s.querySelectorAll("[data-hover]").forEach(o=>{let c=o.dataset.hover;c&&Object.prototype.hasOwnProperty.call(e,c)&&(o.addEventListener("mouseenter",e[c]),o.addEventListener("mouseleave",e[c]))}),s.querySelectorAll("[data-classlist]").forEach(o=>{let c=o.dataset.classlist;/^[a-zA-Z0-9\-\s:_]+$/.test(c)&&o.classList.add(...c.split(/\s+/))})};var ft=v(require("dompurify"),1),Y=null,mt=(s,t)=>{if(typeof document>"u")return;let e=document.getElementById(s);if(!e)return;ft.default.addHook("uponSanitizeAttribute",(a,o)=>{let c=(o.attrName||"").toLowerCase(),l=(o.attrValue??"").toString().trim();if(c.startsWith("on")){o.keepAttr=!1;return}if((c==="href"||c==="src")&&/^(javascript:|vbscript:|data:|file:|about:)/i.test(l)){o.keepAttr=!1;return}if(c==="class"){let d=l.split(/\s+/).filter(Boolean).filter(h=>{if(/^[a-zA-Z0-9\-\:\/_\[\]\(\)]+$/.test(h)){if(/^bg-\[url\(.*\)\]$/.test(h)){let f=h.replace(/^bg-\[url\(/,"").replace(/\)\]$/,"").replace(/^['"]|['"]$/g,"");return f===""||/^https?:\/\//i.test(f)||/^\/(?!\/)/.test(f)||/^\.{0,2}\//.test(f)}return!0}return!1});o.attrValue=d.join(" ");return}if(c==="style"){o.keepAttr=!1;return}});let r=e.cloneNode(!0),n=ft.default.sanitize(r.innerHTML,{USE_PROFILES:{html:!0},ALLOWED_TAGS:["div","span","p","h1","h2","h3","h4","h5","h6","ul","ol","li","strong","em","a","img","br","form","button","input","label"],ALLOWED_ATTR:["href","src","alt","title","class","id","type","name","value","placeholder","data-click","data-change","data-submit","data-select","data-hover","data-classlist"],FORBID_TAGS:["script","iframe","object","embed","body","html","svg","math","link","meta"],ALLOW_DATA_ATTR:!0,KEEP_CONTENT:!1,RETURN_DOM_FRAGMENT:!0}),i=Array.from(n.childNodes).map(a=>a.outerHTML||a.textContent||"").join("");if(Y!==null&&i!==Y){let a=document.createElement("div");t(a);let c=new DOMParser().parseFromString(Y,"text/html");for(;e.firstChild;)e.removeChild(e.firstChild);c.body.childNodes.forEach(l=>e.appendChild(l.cloneNode(!0)))}else{for(Y=i;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(n),t(e)}};var pt=v(require("dompurify"),1);typeof window<"u"&&!window.__anchorSinglePopstateHandlerAttached&&(window.addEventListener("popstate",s=>{let t=s.state;t?.scrollPosition!==void 0&&window.scrollTo(0,t.scrollPosition)}),window.__anchorSinglePopstateHandlerAttached=!0);var gt=(s,t,e,r="",n=null)=>{if(!s)return;let i=pt.default.sanitize(t,{ALLOWED_URI_REGEXP:/^(https?:|\/)/}),a=pt.default.sanitize(e,{USE_PROFILES:{html:!1}});s.setAttribute("href",i),s.setAttribute("aria-label",a),r&&(s.className=r.trim()),n&&s.replaceChildren(n),typeof window<"u"&&s.addEventListener("click",o=>{o.preventDefault();let l=o.currentTarget.getAttribute("href");if(l){let u=window.scrollY;window.scrollTo(0,0),window.history.pushState({scrollPosition:u},"",l),dispatchEvent(new PopStateEvent("popstate"))}})};var A=v(require("dompurify"),1);var Bt=(s="'self' 'nonce-rAnd0m123' 'unsafe-inline' 'unsafe-eval'",t="'self' 'nonce-rAnd0m123'",e="'none'",r="'self' https://fonts.googleapis.com https://fonts.gstatic.com",n="'self' https://blogger.googleusercontent.com",i=["'self'","https://fonts.googleapis.com","https://fonts.gstatic.com","https://www.google.com/maps/"],a="'self' https://www.youtube.com",o="'self'",c="/csp-report",l=!1)=>{let u=()=>{try{let d=document.querySelector('meta[http-equiv="Content-Security-Policy"]');d||(d=document.createElement("meta"),d.setAttribute("http-equiv","Content-Security-Policy"),document.head.appendChild(d));let h=l?`report-uri ${c};`:"";d.setAttribute("content",`default-src 'self'; script-src ${s}; style-src ${t}; object-src ${e}; font-src ${r}; img-src ${n}; connect-src ${i.join(" ")}; frame-src ${a}; base-uri ${o}; ${h}`)}catch(d){console.error("Error adding CSP meta element:",d)}};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",u):u()};var yt=(s,t)=>{let e={name:A.default.sanitize(s.name||""),title:A.default.sanitize(s.title||""),description:A.default.sanitize(s.description||"Default description"),author:A.default.sanitize(s.author||""),favicon:s.favicon},r=p=>{e.name=A.default.sanitize(p),S("name",e.name)},n=p=>{e.title=A.default.sanitize(p),document.title=e.title},i=p=>{e.description=A.default.sanitize(p),S("description",e.description)},a=p=>{e.author=A.default.sanitize(p),S("author",e.author)},o=p=>{e.favicon=A.default.sanitize(p);let y=document.querySelector('link[rel="icon"]');y||(y=document.createElement("link"),y.rel="icon",document.head.appendChild(y)),y.href=e.favicon},c=()=>e.name,l=()=>e.title,u=()=>e.description,d=()=>e.author,h=()=>e.favicon,f=()=>e,g=(p,y)=>{let _=document.createElement("meta");_.setAttribute("name",p),_.setAttribute("content",y),document.head.appendChild(_)},S=(p,y)=>{let _=document.querySelector(`meta[name="${p}"]`);_?_.setAttribute("content",y):g(p,y)},T=()=>{e.title&&(document.title=e.title),e.name&&S("name",e.name),e.description&&S("description",e.description),e.author&&S("author",e.author),e.favicon&&o(e.favicon)};return t&&Bt(t.scriptSrc,t.styleSrc,t.objectSrc,Array.isArray(t.connectSrc)?t.connectSrc.join(" "):t.connectSrc,t.reportOnly!==void 0?String(t.reportOnly):void 0),T(),{setName:r,setTitle:n,setDescription:i,setAuthor:a,setFavicon:o,getName:c,getTitle:l,getDescription:u,getAuthor:d,getFavicon:h,getAllMetaData:f,appendMetaTagsToHead:T}};var Gt=v(require("dompurify"),1),z=(s,t,e,r,n)=>{let i=`#${s}`,a=t.querySelectorAll(i);if(a.length===0)throw new Error(`[useTSComponent] No element found with id '${s}' in the given parent.`);if(a.length>1)throw new Error(`[useTSComponent] Duplicate id '${s}' detected. Found ${a.length} elements.`);let o=a[0];o.innerHTML=Gt.default.sanitize(o.innerHTML,{USE_PROFILES:{html:!0}}),e(o,r,n)};var wt=(s,t,e,r=[])=>{let n=new Set;s.forEach((i,a)=>{if(n.has(i)){console.warn(`[useTSCollection] Duplicate ID in collection array: "${i}" \u2014 skipping.`);return}n.add(i);let o=t.querySelectorAll(`#${i}`);if(o.length>1){console.warn(`[useTSCollection] Duplicate ID in DOM: "${i}" (${o.length} elements found) \u2014 skipping component mount.`);return}let c=e[a],l=Array.isArray(r)?r[a]:void 0;typeof c=="function"?z(i,t,c,l):console.warn(`[useTSCollection] No valid component function found for ID: "${i}"`)})};var k=(s,t)=>{let r=(t??document).querySelectorAll(s);if(r.length===0)return process.env.NODE_ENV!=="production"&&console.warn(`[useTSSelect] No element found for selector: '${s}'`),null;if(s.startsWith("#")&&r.length>1){if(process.env.NODE_ENV!=="production")throw new Error(`[useTSSelect] Duplicate ID detected: '${s}'. Found ${r.length} elements with this ID.`);return r[0]}return r.length>1&&process.env.NODE_ENV!=="production"&&console.warn(`[useTSSelect] Multiple elements found for selector: '${s}'. Returning the first one.`),r[0]};var Vt=require("jwt-decode"),Et=(s,t)=>{let e=localStorage.getItem("token");if(!e)return window.location.href=t,null;try{let r=(0,Vt.jwtDecode)(e),n=Date.now()/1e3;return r.exp&&r.exp<n&&(console.error("Token has expired"),window.localStorage.removeItem("token"),window.location.href=t),null}catch(r){return console.error("Invalid token:",r),window.location.href=t,null}};var B=(s,t,e)=>{s.forEach(r=>{t.forEach(n=>{r.addEventListener(n,i=>{e(r,i)})})})};var Tt=()=>({back:()=>window.history.back(),forward:()=>window.history.forward()});var _t=(s,t)=>{let e=document.querySelector(`#${s}`)||document.querySelector(`.${s}`);if(!e)return;let r=window.location.pathname.replace(/\/$/,"");for(let n of t){let i=n.path.replace(/\/$/,"");if(r===i||r.startsWith(`${i}/`)){n.component(e);break}}};function St(s,t){let e=window.location.pathname.replace(/\/$/,"");t.routes.forEach(r=>{r.children?.length&&r.children.forEach(n=>{let i=n.path.replace(/\/$/,"");if(e===i||e.startsWith(`${i}/`)){let a=s.querySelector(`#${n.outlet}`)||s.querySelector(`.${n.outlet}`);a instanceof HTMLElement&&n.element&&n.element(a)}})})}var Kt=require("zustand/vanilla");function Pt(s){let t=(0,Kt.createStore)(()=>({value:s})),e=new Set;return{get:()=>t.getState().value,set:r=>{t.setState({value:r}),e.forEach(n=>n(r))},subscribe:r=>(e.add(r),r(t.getState().value),()=>e.delete(r))}}function vt(s){let t=s();typeof t=="function"&&t()}var Rt=async()=>{let s="https://cdn.jsdelivr.net/npm/brython@3/brython.min.js",t="https://cdn.jsdelivr.net/npm/brython@3/brython_stdlib.js",e=r=>new Promise((n,i)=>{let a=document.createElement("script");a.src=r,a.onload=()=>n(),a.onerror=()=>i(new Error(`Failed to load ${r}`)),document.head.appendChild(a)});await e(s),await e(t),typeof window.brython=="function"?window.brython():console.error("Brython did not load correctly.")},Lt=s=>new Promise((t,e)=>{let r=document.createElement("script");r.type="text/python",r.src=`/src/python/${s}`,r.onload=()=>t(),r.onerror=()=>e(new Error(`Failed to load ${s}`)),document.body.appendChild(r)});function bt(s){let t=null;return async(e,r)=>{try{if(!t){let n=await s();t=n.default||n}if(typeof t=="function")return t(e,r);if(t instanceof HTMLElement){let n=t.cloneNode(!0);return e?.appendChild(n),n}if(typeof t=="object"&&t!==null&&"render"in t&&typeof t.render=="function")return t.render(e,r);console.warn("useTSLazy: Unsupported module type",t)}catch(n){console.error("useTSLazy failed:",n)}}}var xt=s=>typeof window>"u"?{isDOM:null}:{isDOM:s||document.body};var Qt=require("lodash-es"),At=s=>s;typeof window<"u"&&typeof document<"u"&&(At=s=>{let t=document.createElement("div");return t.innerText=s,t.innerHTML});var He=s=>{(s?Array.isArray(s)?s:s instanceof HTMLAnchorElement?[s]:Array.from(s):Array.from(document.querySelectorAll("a"))).forEach(e=>{if(!e||e.dataset.anchorEnhanced==="true")return;e.dataset.anchorEnhanced="true";let r=e.getAttribute("class")||"";e.setAttribute("class",At(r));let n=e.getAttribute("aria-label");n&&e.setAttribute("aria-label",At(n));let i=e.querySelector(":scope > *");i&&(e.innerHTML="",e.appendChild(i));let a=e.getAttribute("href")||"";if(!a.startsWith("#")){try{if(new URL(a,window.location.href).origin!==window.location.origin)return}catch{return}e.addEventListener("click",o=>{o.preventDefault();let c=e.getAttribute("href")||"";try{let l=new URL(c,window.location.href);window.history.pushState({},"",l.pathname+l.search+l.hash),window.dispatchEvent(new PopStateEvent("popstate"))}catch(l){console.error("Invalid URL in anchor:",c,l)}})}})},Ne=(0,Qt.debounce)(He,50),Zt=s=>{Ne(s)};var Dt=s=>{if(!s)return;let t=k("a",s);Zt(t)};var Mt=v(require("dompurify"),1);var Jt=require("zustand/vanilla"),te=v(require("dompurify"),1),O=(0,Jt.createStore)(s=>({params:{},query:{},setParams:t=>s(()=>({params:Xt(t)})),setQuery:t=>s(()=>({query:Xt(t)}))}));function Xt(s){let t={};for(let e in s)t[e]=te.default.sanitize(s[e]);return t}var G=class{constructor(t,e){this.routes=[];this.routes=t,this.expectedParams=new Set(e),window.addEventListener("popstate",this.handlePopState.bind(this)),this.handlePopState()}handlePopState(){let t=window.location.pathname,e=window.location.search,r=this.parseQueryParams(e),n=this.findMatchingRoute(t,this.routes);if(n){if(n.routeto){this.navigate(n.routeto);return}let i=this.filterAndSanitizeParams(n.params);O.getState().setParams(i),O.getState().setQuery(r);let a=document.createElement("div");if(n.element?.(a,i,r),n.children){let o=t.slice(n.path.length),c=a.querySelector("#child");c&&this.renderChildren(n.children,o,c,i,r)}}else{let i=this.findMatchingRoute("*",this.routes);if(i){let a=this.filterAndSanitizeParams(i.params);O.getState().setParams(a),O.getState().setQuery(r);let o=document.createElement("div");i.element?.(o,a,r)}}}renderChildren(t,e,r,n,i){if(!t||t.length===0){let o=r.querySelector("#child");o&&o.remove();return}let a=this.findMatchingRoute(e,t);if(a){let o=document.createElement("div");o.id="child";let c={...n,...a.params},l=this.filterAndSanitizeParams(c);if(O.getState().setParams(l),O.getState().setQuery(i),a.element?.(o,l,i),r.appendChild(o),a.children){let u=e.slice(a.path.length);this.renderChildren(a.children,u,o,l,i)}}}parseQueryParams(t){let e={},r=new URLSearchParams(t);for(let[n,i]of r.entries())this.expectedParams.has(n)&&(e[n]=Mt.default.sanitize(i));return e}findMatchingRoute(t,e,r={}){for(let n of e){let i=n.path;if(i==="*")return n;{let o=[],c=i.replace(/:[^\s/]+/g,d=>(o.push(d.substring(1)),"([^\\s/]+)")),l=new RegExp(`^${c}(?:/|$)`),u=t.match(l);if(u){let d={...r};if(o.forEach((h,f)=>{d[h]=u[f+1]??""}),n.children){let h=t.slice(u[0].length),f=this.findMatchingRoute(h,n.children,d);if(f)return f}return{...n,params:d}}}}}filterAndSanitizeParams(t){if(!t)return{};let e={};for(let r in t)this.expectedParams.has(r)&&(e[r]=Mt.default.sanitize(t[r]??""));return e}navigate(t){history.pushState(null,"",t),this.handlePopState()}addRoute(t){this.routes.push(t)}};var Le=()=>({name:"ts-filebased-router",async buildStart(){if(typeof process>"u"||!process.versions?.node)return;let s=await import("fs/promises"),t=await import("path"),e=await Promise.resolve().then(()=>(Re(),ve)),r=t.resolve("src/pages"),n=t.resolve("src/gen"),i=t.resolve("src/routes"),a=t.join(n,"tsrouter.gen.ts"),o=t.join(i,"__root.ts"),c=process.env.NODE_ENV!=="production";async function l(T){try{await s.mkdir(T,{recursive:!0})}catch{}}function u(T,p){let y="/"+t.relative(p,T).replace(/\\/g,"/");return y=y.replace(/\.ts$/,"").replace(/\/index$/,"")||"/",y.replace(/\[(.+?)\]/g,":$1")}function d(T){return T.replace(/^\//,"").split("/").map(p=>p.startsWith(":")?p.slice(1):p).filter(Boolean).join("-")||"index"}function h(T,p){let _=t.relative(p,T).replace(/\\/g,"/").split("/").filter(Boolean),L=_[_.length-1].replace(".ts",""),D=_.length>1?_[_.length-2]:"";if(L==="index")return D?D.charAt(0).toUpperCase()+D.slice(1):"Index";if(L.startsWith("[")&&L.endsWith("]")){let P=L.slice(1,-1);return D.charAt(0).toUpperCase()+P.charAt(0).toUpperCase()+P.slice(1)}return L.charAt(0).toUpperCase()+L.slice(1)}async function f(T){let p=await s.readdir(T,{withFileTypes:!0}),y=[];for(let _ of p){let L=t.join(T,_.name);if(_.isDirectory())y=y.concat(await f(L));else if(_.isFile()&&_.name.endsWith(".ts")){let D=u(L,r),P=d(D),U=h(L,r);y.push({file:L,route:D,routeName:P,importName:U})}}return y}function g(){return`import { createRouter } from "@/gen/tsrouter.gen";
|
|
2
|
-
import { useTSParams } from "@devwareng/vanilla-ts";
|
|
1
|
+
"use strict";var Ce=Object.create;var G=Object.defineProperty;var Oe=Object.getOwnPropertyDescriptor;var Fe=Object.getOwnPropertyNames;var Ie=Object.getPrototypeOf,Ne=Object.prototype.hasOwnProperty;var at=(s,t)=>()=>(s&&(t=s(s=0)),t);var Bt=(s,t)=>{for(var e in t)G(s,e,{get:t[e],enumerable:!0})},Gt=(s,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Fe(t))!Ne.call(s,n)&&n!==e&&G(s,n,{get:()=>t[n],enumerable:!(r=Oe(t,n))||r.enumerable});return s};var v=(s,t,e)=>(e=s!=null?Ce(Ie(s)):{},Gt(t||!s||!s.__esModule?G(e,"default",{value:s,enumerable:!0}):e,s)),He=s=>Gt(G({},"__esModule",{value:!0}),s);function ue(s,t={}){let e=t.entryType||t.type;if(e==="both"&&(e=R.FILE_DIR_TYPE),e&&(t.type=e),s){if(typeof s!="string")throw new TypeError("readdirp: root argument must be a string. Usage: readdirp(root, options)");if(e&&!ie.includes(e))throw new Error(`readdirp: Invalid type passed. Use one of ${ie.join(", ")}`)}else throw new Error("readdirp: root argument is required. Usage: readdirp(root, options)");return t.root=s,new Ht(t)}var M,ce,C,R,Nt,le,Ue,ie,qe,Ye,Be,Ge,oe,ae,Ht,de=at(()=>{"use strict";M=require("fs/promises"),ce=require("stream"),C=require("path"),R={FILE_TYPE:"files",DIR_TYPE:"directories",FILE_DIR_TYPE:"files_directories",EVERYTHING_TYPE:"all"},Nt={root:".",fileFilter:s=>!0,directoryFilter:s=>!0,type:R.FILE_TYPE,lstat:!1,depth:2147483648,alwaysStat:!1,highWaterMark:4096};Object.freeze(Nt);le="READDIRP_RECURSIVE_ERROR",Ue=new Set(["ENOENT","EPERM","EACCES","ELOOP",le]),ie=[R.DIR_TYPE,R.EVERYTHING_TYPE,R.FILE_DIR_TYPE,R.FILE_TYPE],qe=new Set([R.DIR_TYPE,R.EVERYTHING_TYPE,R.FILE_DIR_TYPE]),Ye=new Set([R.EVERYTHING_TYPE,R.FILE_DIR_TYPE,R.FILE_TYPE]),Be=s=>Ue.has(s.code),Ge=process.platform==="win32",oe=s=>!0,ae=s=>{if(s===void 0)return oe;if(typeof s=="function")return s;if(typeof s=="string"){let t=s.trim();return e=>e.basename===t}if(Array.isArray(s)){let t=s.map(e=>e.trim());return e=>t.some(r=>e.basename===r)}return oe},Ht=class extends ce.Readable{constructor(t={}){super({objectMode:!0,autoDestroy:!0,highWaterMark:t.highWaterMark});let e={...Nt,...t},{root:r,type:n}=e;this._fileFilter=ae(e.fileFilter),this._directoryFilter=ae(e.directoryFilter);let o=e.lstat?M.lstat:M.stat;Ge?this._stat=c=>o(c,{bigint:!0}):this._stat=o,this._maxDepth=e.depth??Nt.depth,this._wantsDir=n?qe.has(n):!1,this._wantsFile=n?Ye.has(n):!1,this._wantsEverything=n===R.EVERYTHING_TYPE,this._root=(0,C.resolve)(r),this._isDirent=!e.alwaysStat,this._statsProp=this._isDirent?"dirent":"stats",this._rdOptions={encoding:"utf8",withFileTypes:this._isDirent},this.parents=[this._exploreDir(r,1)],this.reading=!1,this.parent=void 0}async _read(t){if(!this.reading){this.reading=!0;try{for(;!this.destroyed&&t>0;){let e=this.parent,r=e&&e.files;if(r&&r.length>0){let{path:n,depth:o}=e,c=r.splice(0,t).map(a=>this._formatEntry(a,n)),i=await Promise.all(c);for(let a of i){if(!a)continue;if(this.destroyed)return;let l=await this._getEntryType(a);l==="directory"&&this._directoryFilter(a)?(o<=this._maxDepth&&this.parents.push(this._exploreDir(a.fullPath,o+1)),this._wantsDir&&(this.push(a),t--)):(l==="file"||this._includeAsFile(a))&&this._fileFilter(a)&&this._wantsFile&&(this.push(a),t--)}}else{let n=this.parents.pop();if(!n){this.push(null);break}if(this.parent=await n,this.destroyed)return}}}catch(e){this.destroy(e)}finally{this.reading=!1}}}async _exploreDir(t,e){let r;try{r=await(0,M.readdir)(t,this._rdOptions)}catch(n){this._onError(n)}return{files:r,depth:e,path:t}}async _formatEntry(t,e){let r,n=this._isDirent?t.name:t;try{let o=(0,C.resolve)((0,C.join)(e,n));r={path:(0,C.relative)(this._root,o),fullPath:o,basename:n},r[this._statsProp]=this._isDirent?t:await this._stat(o)}catch(o){this._onError(o);return}return r}_onError(t){Be(t)&&!this.destroyed?this.emit("warn",t):this.destroy(t)}async _getEntryType(t){if(!t&&this._statsProp in t)return"";let e=t[this._statsProp];if(e.isFile())return"file";if(e.isDirectory())return"directory";if(e&&e.isSymbolicLink()){let r=t.fullPath;try{let n=await(0,M.realpath)(r),o=await(0,M.lstat)(n);if(o.isFile())return"file";if(o.isDirectory()){let c=n.length;if(r.startsWith(n)&&r.substr(c,1)===C.sep){let i=new Error(`Circular symlink detected: "${r}" points to "${n}"`);return i.code=le,this._onError(i)}return"directory"}}catch(n){return this._onError(n),""}}}_includeAsFile(t){let e=t&&t[this._statsProp];return e&&this._wantsEverything&&!e.isDirectory()}}});function he(s,t,e,r,n){let o=(c,i)=>{e(s),n(c,i,{watchedPath:s}),i&&s!==i&&X(y.resolve(s,i),F,y.join(s,i))};try{return(0,I.watch)(s,{persistent:t.persistent},o)}catch(c){r(c);return}}var I,b,y,fe,Ve,zt,me,et,st,Wt,Ke,Qe,Ze,pe,w,L,Je,Xe,F,Z,k,ts,es,ss,$t,j,ns,U,ge,J,X,rs,kt,is,tt,Ee=at(()=>{"use strict";I=require("fs"),b=require("fs/promises"),y=v(require("path"),1),fe=require("os"),Ve="data",zt="end",me="close",et=()=>{},st=process.platform,Wt=st==="win32",Ke=st==="darwin",Qe=st==="linux",Ze=st==="freebsd",pe=(0,fe.type)()==="OS400",w={ALL:"all",READY:"ready",ADD:"add",CHANGE:"change",ADD_DIR:"addDir",UNLINK:"unlink",UNLINK_DIR:"unlinkDir",RAW:"raw",ERROR:"error"},L=w,Je="watch",Xe={lstat:b.lstat,stat:b.stat},F="listeners",Z="errHandlers",k="rawEmitters",ts=[F,Z,k],es=new Set(["3dm","3ds","3g2","3gp","7z","a","aac","adp","afdesign","afphoto","afpub","ai","aif","aiff","alz","ape","apk","appimage","ar","arj","asf","au","avi","bak","baml","bh","bin","bk","bmp","btif","bz2","bzip2","cab","caf","cgm","class","cmx","cpio","cr2","cur","dat","dcm","deb","dex","djvu","dll","dmg","dng","doc","docm","docx","dot","dotm","dra","DS_Store","dsk","dts","dtshd","dvb","dwg","dxf","ecelp4800","ecelp7470","ecelp9600","egg","eol","eot","epub","exe","f4v","fbs","fh","fla","flac","flatpak","fli","flv","fpx","fst","fvt","g3","gh","gif","graffle","gz","gzip","h261","h263","h264","icns","ico","ief","img","ipa","iso","jar","jpeg","jpg","jpgv","jpm","jxr","key","ktx","lha","lib","lvp","lz","lzh","lzma","lzo","m3u","m4a","m4v","mar","mdi","mht","mid","midi","mj2","mka","mkv","mmr","mng","mobi","mov","movie","mp3","mp4","mp4a","mpeg","mpg","mpga","mxu","nef","npx","numbers","nupkg","o","odp","ods","odt","oga","ogg","ogv","otf","ott","pages","pbm","pcx","pdb","pdf","pea","pgm","pic","png","pnm","pot","potm","potx","ppa","ppam","ppm","pps","ppsm","ppsx","ppt","pptm","pptx","psd","pya","pyc","pyo","pyv","qt","rar","ras","raw","resources","rgb","rip","rlc","rmf","rmvb","rpm","rtf","rz","s3m","s7z","scpt","sgi","shar","snap","sil","sketch","slk","smv","snk","so","stl","suo","sub","swf","tar","tbz","tbz2","tga","tgz","thmx","tif","tiff","tlz","ttc","ttf","txz","udf","uvh","uvi","uvm","uvp","uvs","uvu","viv","vob","war","wav","wax","wbmp","wdp","weba","webm","webp","whl","wim","wm","wma","wmv","wmx","woff","woff2","wrm","wvx","xbm","xif","xla","xlam","xls","xlsb","xlsm","xlsx","xlt","xltm","xltx","xm","xmind","xpi","xpm","xwd","xz","z","zip","zipx"]),ss=s=>es.has(y.extname(s).slice(1).toLowerCase()),$t=(s,t)=>{s instanceof Set?s.forEach(t):t(s)},j=(s,t,e)=>{let r=s[t];r instanceof Set||(s[t]=r=new Set([r])),r.add(e)},ns=s=>t=>{let e=s[t];e instanceof Set?e.clear():delete s[t]},U=(s,t,e)=>{let r=s[t];r instanceof Set?r.delete(e):r===e&&delete s[t]},ge=s=>s instanceof Set?s.size===0:!s,J=new Map;X=(s,t,e,r,n)=>{let o=J.get(s);o&&$t(o[t],c=>{c(e,r,n)})},rs=(s,t,e,r)=>{let{listener:n,errHandler:o,rawEmitter:c}=r,i=J.get(t),a;if(!e.persistent)return a=he(s,e,n,o,c),a?a.close.bind(a):void 0;if(i)j(i,F,n),j(i,Z,o),j(i,k,c);else{if(a=he(s,e,X.bind(null,t,F),o,X.bind(null,t,k)),!a)return;a.on(L.ERROR,async l=>{let u=X.bind(null,t,Z);if(i&&(i.watcherUnusable=!0),Wt&&l.code==="EPERM")try{await(await(0,b.open)(s,"r")).close(),u(l)}catch{}else u(l)}),i={listeners:n,errHandlers:o,rawEmitters:c,watcher:a},J.set(t,i)}return()=>{U(i,F,n),U(i,Z,o),U(i,k,c),ge(i.listeners)&&(i.watcher.close(),J.delete(t),ts.forEach(ns(i)),i.watcher=void 0,Object.freeze(i))}},kt=new Map,is=(s,t,e,r)=>{let{listener:n,rawEmitter:o}=r,c=kt.get(t),i=c&&c.options;return i&&(i.persistent<e.persistent||i.interval>e.interval)&&((0,I.unwatchFile)(t),c=void 0),c?(j(c,F,n),j(c,k,o)):(c={listeners:n,rawEmitters:o,options:e,watcher:(0,I.watchFile)(t,e,(a,l)=>{$t(c.rawEmitters,d=>{d(L.CHANGE,t,{curr:a,prev:l})});let u=a.mtimeMs;(a.size!==l.size||u>l.mtimeMs||u===0)&&$t(c.listeners,d=>d(s,a))})},kt.set(t,c)),()=>{U(c,F,n),U(c,k,o),ge(c.listeners)&&(kt.delete(t),(0,I.unwatchFile)(t),c.options=c.watcher=void 0,Object.freeze(c))}},tt=class{constructor(t){this.fsw=t,this._boundHandleError=e=>t._handleError(e)}_watchWithNodeFs(t,e){let r=this.fsw.options,n=y.dirname(t),o=y.basename(t);this.fsw._getWatchedDir(n).add(o);let i=y.resolve(t),a={persistent:r.persistent};e||(e=et);let l;if(r.usePolling){let u=r.interval!==r.binaryInterval;a.interval=u&&ss(o)?r.binaryInterval:r.interval,l=is(t,i,a,{listener:e,rawEmitter:this.fsw._emitRaw})}else l=rs(t,i,a,{listener:e,errHandler:this._boundHandleError,rawEmitter:this.fsw._emitRaw});return l}_handleFile(t,e,r){if(this.fsw.closed)return;let n=y.dirname(t),o=y.basename(t),c=this.fsw._getWatchedDir(n),i=e;if(c.has(o))return;let a=async(u,d)=>{if(this.fsw._throttle(Je,t,5)){if(!d||d.mtimeMs===0)try{let h=await(0,b.stat)(t);if(this.fsw.closed)return;let f=h.atimeMs,E=h.mtimeMs;if((!f||f<=E||E!==i.mtimeMs)&&this.fsw._emit(L.CHANGE,t,h),(Ke||Qe||Ze)&&i.ino!==h.ino){this.fsw._closeFile(u),i=h;let p=this._watchWithNodeFs(t,a);p&&this.fsw._addPathCloser(u,p)}else i=h}catch{this.fsw._remove(n,o)}else if(c.has(o)){let h=d.atimeMs,f=d.mtimeMs;(!h||h<=f||f!==i.mtimeMs)&&this.fsw._emit(L.CHANGE,t,d),i=d}}},l=this._watchWithNodeFs(t,a);if(!(r&&this.fsw.options.ignoreInitial)&&this.fsw._isntIgnored(t)){if(!this.fsw._throttle(L.ADD,t,0))return;this.fsw._emit(L.ADD,t,e)}return l}async _handleSymlink(t,e,r,n){if(this.fsw.closed)return;let o=t.fullPath,c=this.fsw._getWatchedDir(e);if(!this.fsw.options.followSymlinks){this.fsw._incrReadyCount();let i;try{i=await(0,b.realpath)(r)}catch{return this.fsw._emitReady(),!0}return this.fsw.closed?void 0:(c.has(n)?this.fsw._symlinkPaths.get(o)!==i&&(this.fsw._symlinkPaths.set(o,i),this.fsw._emit(L.CHANGE,r,t.stats)):(c.add(n),this.fsw._symlinkPaths.set(o,i),this.fsw._emit(L.ADD,r,t.stats)),this.fsw._emitReady(),!0)}if(this.fsw._symlinkPaths.has(o))return!0;this.fsw._symlinkPaths.set(o,!0)}_handleRead(t,e,r,n,o,c,i){if(t=y.join(t,""),i=this.fsw._throttle("readdir",t,1e3),!i)return;let a=this.fsw._getWatchedDir(r.path),l=new Set,u=this.fsw._readdirp(t,{fileFilter:d=>r.filterPath(d),directoryFilter:d=>r.filterDir(d)});if(u)return u.on(Ve,async d=>{if(this.fsw.closed){u=void 0;return}let h=d.path,f=y.join(t,h);if(l.add(h),!(d.stats.isSymbolicLink()&&await this._handleSymlink(d,t,f,h))){if(this.fsw.closed){u=void 0;return}(h===n||!n&&!a.has(h))&&(this.fsw._incrReadyCount(),f=y.join(o,y.relative(o,f)),this._addToNodeFs(f,e,r,c+1))}}).on(L.ERROR,this._boundHandleError),new Promise((d,h)=>{if(!u)return h();u.once(zt,()=>{if(this.fsw.closed){u=void 0;return}let f=i?i.clear():!1;d(void 0),a.getChildren().filter(E=>E!==t&&!l.has(E)).forEach(E=>{this.fsw._remove(t,E)}),u=void 0,f&&this._handleRead(t,!1,r,n,o,c,i)})})}async _handleDir(t,e,r,n,o,c,i){let a=this.fsw._getWatchedDir(y.dirname(t)),l=a.has(y.basename(t));!(r&&this.fsw.options.ignoreInitial)&&!o&&!l&&this.fsw._emit(L.ADD_DIR,t,e),a.add(y.basename(t)),this.fsw._getWatchedDir(t);let u,d,h=this.fsw.options.depth;if((h==null||n<=h)&&!this.fsw._symlinkPaths.has(i)){if(!o&&(await this._handleRead(t,r,c,o,t,n,u),this.fsw.closed))return;d=this._watchWithNodeFs(t,(f,E)=>{E&&E.mtimeMs===0||this._handleRead(f,!1,c,o,t,n,u)})}return d}async _addToNodeFs(t,e,r,n,o){let c=this.fsw._emitReady;if(this.fsw._isIgnored(t)||this.fsw.closed)return c(),!1;let i=this.fsw._getWatchHelpers(t);r&&(i.filterPath=a=>r.filterPath(a),i.filterDir=a=>r.filterDir(a));try{let a=await Xe[i.statMethod](i.watchPath);if(this.fsw.closed)return;if(this.fsw._isIgnored(i.watchPath,a))return c(),!1;let l=this.fsw.options.followSymlinks,u;if(a.isDirectory()){let d=y.resolve(t),h=l?await(0,b.realpath)(t):t;if(this.fsw.closed||(u=await this._handleDir(i.watchPath,a,e,n,o,i,h),this.fsw.closed))return;d!==h&&h!==void 0&&this.fsw._symlinkPaths.set(d,h)}else if(a.isSymbolicLink()){let d=l?await(0,b.realpath)(t):t;if(this.fsw.closed)return;let h=y.dirname(i.watchPath);if(this.fsw._getWatchedDir(h).add(i.watchPath),this.fsw._emit(L.ADD,i.watchPath,a),u=await this._handleDir(h,a,e,n,t,i,d),this.fsw.closed)return;d!==void 0&&this.fsw._symlinkPaths.set(y.resolve(t),d)}else u=this._handleFile(i.watchPath,a,e);return c(),u&&this.fsw._addPathCloser(t,u),!1}catch(a){if(this.fsw._handleError(a))return c(),t}}}});var xe={};Bt(xe,{FSWatcher:()=>q,WatchHelper:()=>rt,default:()=>ws,watch:()=>be});function nt(s){return Array.isArray(s)?s:[s]}function hs(s){return typeof s=="function"?s:typeof s=="string"?t=>s===t:s instanceof RegExp?t=>s.test(t):typeof s=="object"&&s!==null?t=>{if(s.path===t)return!0;if(s.recursive){let e=m.relative(s.path,t);return e?!e.startsWith("..")&&!m.isAbsolute(e):!1}return!1}:()=>!1}function fs(s){if(typeof s!="string")throw new Error("string expected");s=m.normalize(s),s=s.replace(/\\/g,"/");let t=!1;s.startsWith("//")&&(t=!0);let e=/\/\//;for(;s.match(e);)s=s.replace(e,"/");return t&&(s="/"+s),s}function we(s,t,e){let r=fs(t);for(let n=0;n<s.length;n++){let o=s[n];if(o(r,e))return!0}return!1}function ms(s,t){if(s==null)throw new TypeError("anymatch: specify first argument");let r=nt(s).map(n=>hs(n));return t==null?(n,o)=>we(r,n,o):we(r,t)}function be(s,t={}){let e=new q(t);return e.add(s),e}var Pe,it,ve,m,jt,os,Re,as,cs,ls,ye,us,ds,Ut,Te,_e,Le,Se,ps,gs,qt,Es,ys,rt,q,ws,Ae=at(()=>{"use strict";Pe=require("fs"),it=require("fs/promises"),ve=require("events"),m=v(require("path"),1);de();Ee();jt="/",os="//",Re=".",as="..",cs="string",ls=/\\/g,ye=/\/\//,us=/\..*\.(sw[px])$|~$|\.subl.*\.tmp/,ds=/^\.[/\\]/;Ut=s=>typeof s=="object"&&s!==null&&!(s instanceof RegExp);Te=s=>{let t=nt(s).flat();if(!t.every(e=>typeof e===cs))throw new TypeError(`Non-string provided as watch path: ${t}`);return t.map(Le)},_e=s=>{let t=s.replace(ls,jt),e=!1;for(t.startsWith(os)&&(e=!0);t.match(ye);)t=t.replace(ye,jt);return e&&(t=jt+t),t},Le=s=>_e(m.normalize(_e(s))),Se=(s="")=>t=>typeof t=="string"?Le(m.isAbsolute(t)?t:m.join(s,t)):t,ps=(s,t)=>m.isAbsolute(s)?s:m.join(t,s),gs=Object.freeze(new Set),qt=class{constructor(t,e){this.path=t,this._removeWatcher=e,this.items=new Set}add(t){let{items:e}=this;e&&t!==Re&&t!==as&&e.add(t)}async remove(t){let{items:e}=this;if(!e||(e.delete(t),e.size>0))return;let r=this.path;try{await(0,it.readdir)(r)}catch{this._removeWatcher&&this._removeWatcher(m.dirname(r),m.basename(r))}}has(t){let{items:e}=this;if(e)return e.has(t)}getChildren(){let{items:t}=this;return t?[...t.values()]:[]}dispose(){this.items.clear(),this.path="",this._removeWatcher=et,this.items=gs,Object.freeze(this)}},Es="stat",ys="lstat",rt=class{constructor(t,e,r){this.fsw=r;let n=t;this.path=t=t.replace(ds,""),this.watchPath=n,this.fullWatchPath=m.resolve(n),this.dirParts=[],this.dirParts.forEach(o=>{o.length>1&&o.pop()}),this.followSymlinks=e,this.statMethod=e?Es:ys}entryPath(t){return m.join(this.watchPath,m.relative(this.watchPath,t.fullPath))}filterPath(t){let{stats:e}=t;if(e&&e.isSymbolicLink())return this.filterDir(t);let r=this.entryPath(t);return this.fsw._isntIgnored(r,e)&&this.fsw._hasReadPermissions(e)}filterDir(t){return this.fsw._isntIgnored(this.entryPath(t),t.stats)}},q=class extends ve.EventEmitter{constructor(t={}){super(),this.closed=!1,this._closers=new Map,this._ignoredPaths=new Set,this._throttled=new Map,this._streams=new Set,this._symlinkPaths=new Map,this._watched=new Map,this._pendingWrites=new Map,this._pendingUnlinks=new Map,this._readyCount=0,this._readyEmitted=!1;let e=t.awaitWriteFinish,r={stabilityThreshold:2e3,pollInterval:100},n={persistent:!0,ignoreInitial:!1,ignorePermissionErrors:!1,interval:100,binaryInterval:300,followSymlinks:!0,usePolling:!1,atomic:!0,...t,ignored:t.ignored?nt(t.ignored):nt([]),awaitWriteFinish:e===!0?r:typeof e=="object"?{...r,...e}:!1};pe&&(n.usePolling=!0),n.atomic===void 0&&(n.atomic=!n.usePolling);let o=process.env.CHOKIDAR_USEPOLLING;if(o!==void 0){let a=o.toLowerCase();a==="false"||a==="0"?n.usePolling=!1:a==="true"||a==="1"?n.usePolling=!0:n.usePolling=!!a}let c=process.env.CHOKIDAR_INTERVAL;c&&(n.interval=Number.parseInt(c,10));let i=0;this._emitReady=()=>{i++,i>=this._readyCount&&(this._emitReady=et,this._readyEmitted=!0,process.nextTick(()=>this.emit(w.READY)))},this._emitRaw=(...a)=>this.emit(w.RAW,...a),this._boundRemove=this._remove.bind(this),this.options=n,this._nodeFsHandler=new tt(this),Object.freeze(n)}_addIgnoredPath(t){if(Ut(t)){for(let e of this._ignoredPaths)if(Ut(e)&&e.path===t.path&&e.recursive===t.recursive)return}this._ignoredPaths.add(t)}_removeIgnoredPath(t){if(this._ignoredPaths.delete(t),typeof t=="string")for(let e of this._ignoredPaths)Ut(e)&&e.path===t&&this._ignoredPaths.delete(e)}add(t,e,r){let{cwd:n}=this.options;this.closed=!1,this._closePromise=void 0;let o=Te(t);return n&&(o=o.map(c=>ps(c,n))),o.forEach(c=>{this._removeIgnoredPath(c)}),this._userIgnored=void 0,this._readyCount||(this._readyCount=0),this._readyCount+=o.length,Promise.all(o.map(async c=>{let i=await this._nodeFsHandler._addToNodeFs(c,!r,void 0,0,e);return i&&this._emitReady(),i})).then(c=>{this.closed||c.forEach(i=>{i&&this.add(m.dirname(i),m.basename(e||i))})}),this}unwatch(t){if(this.closed)return this;let e=Te(t),{cwd:r}=this.options;return e.forEach(n=>{!m.isAbsolute(n)&&!this._closers.has(n)&&(r&&(n=m.join(r,n)),n=m.resolve(n)),this._closePath(n),this._addIgnoredPath(n),this._watched.has(n)&&this._addIgnoredPath({path:n,recursive:!0}),this._userIgnored=void 0}),this}close(){if(this._closePromise)return this._closePromise;this.closed=!0,this.removeAllListeners();let t=[];return this._closers.forEach(e=>e.forEach(r=>{let n=r();n instanceof Promise&&t.push(n)})),this._streams.forEach(e=>e.destroy()),this._userIgnored=void 0,this._readyCount=0,this._readyEmitted=!1,this._watched.forEach(e=>e.dispose()),this._closers.clear(),this._watched.clear(),this._streams.clear(),this._symlinkPaths.clear(),this._throttled.clear(),this._closePromise=t.length?Promise.all(t).then(()=>{}):Promise.resolve(),this._closePromise}getWatched(){let t={};return this._watched.forEach((e,r)=>{let o=(this.options.cwd?m.relative(this.options.cwd,r):r)||Re;t[o]=e.getChildren().sort()}),t}emitWithAll(t,e){this.emit(t,...e),t!==w.ERROR&&this.emit(w.ALL,t,...e)}async _emit(t,e,r){if(this.closed)return;let n=this.options;Wt&&(e=m.normalize(e)),n.cwd&&(e=m.relative(n.cwd,e));let o=[e];r!=null&&o.push(r);let c=n.awaitWriteFinish,i;if(c&&(i=this._pendingWrites.get(e)))return i.lastChange=new Date,this;if(n.atomic){if(t===w.UNLINK)return this._pendingUnlinks.set(e,[t,...o]),setTimeout(()=>{this._pendingUnlinks.forEach((a,l)=>{this.emit(...a),this.emit(w.ALL,...a),this._pendingUnlinks.delete(l)})},typeof n.atomic=="number"?n.atomic:100),this;t===w.ADD&&this._pendingUnlinks.has(e)&&(t=w.CHANGE,this._pendingUnlinks.delete(e))}if(c&&(t===w.ADD||t===w.CHANGE)&&this._readyEmitted){let a=(l,u)=>{l?(t=w.ERROR,o[0]=l,this.emitWithAll(t,o)):u&&(o.length>1?o[1]=u:o.push(u),this.emitWithAll(t,o))};return this._awaitWriteFinish(e,c.stabilityThreshold,t,a),this}if(t===w.CHANGE&&!this._throttle(w.CHANGE,e,50))return this;if(n.alwaysStat&&r===void 0&&(t===w.ADD||t===w.ADD_DIR||t===w.CHANGE)){let a=n.cwd?m.join(n.cwd,e):e,l;try{l=await(0,it.stat)(a)}catch{}if(!l||this.closed)return;o.push(l)}return this.emitWithAll(t,o),this}_handleError(t){let e=t&&t.code;return t&&e!=="ENOENT"&&e!=="ENOTDIR"&&(!this.options.ignorePermissionErrors||e!=="EPERM"&&e!=="EACCES")&&this.emit(w.ERROR,t),t||this.closed}_throttle(t,e,r){this._throttled.has(t)||this._throttled.set(t,new Map);let n=this._throttled.get(t);if(!n)throw new Error("invalid throttle");let o=n.get(e);if(o)return o.count++,!1;let c,i=()=>{let l=n.get(e),u=l?l.count:0;return n.delete(e),clearTimeout(c),l&&clearTimeout(l.timeoutObject),u};c=setTimeout(i,r);let a={timeoutObject:c,clear:i,count:0};return n.set(e,a),a}_incrReadyCount(){return this._readyCount++}_awaitWriteFinish(t,e,r,n){let o=this.options.awaitWriteFinish;if(typeof o!="object")return;let c=o.pollInterval,i,a=t;this.options.cwd&&!m.isAbsolute(t)&&(a=m.join(this.options.cwd,t));let l=new Date,u=this._pendingWrites;function d(h){(0,Pe.stat)(a,(f,E)=>{if(f||!u.has(t)){f&&f.code!=="ENOENT"&&n(f);return}let p=Number(new Date);h&&E.size!==h.size&&(u.get(t).lastChange=p);let S=u.get(t);p-S.lastChange>=e?(u.delete(t),n(void 0,E)):i=setTimeout(d,c,E)})}u.has(t)||(u.set(t,{lastChange:l,cancelWait:()=>(u.delete(t),clearTimeout(i),r)}),i=setTimeout(d,c))}_isIgnored(t,e){if(this.options.atomic&&us.test(t))return!0;if(!this._userIgnored){let{cwd:r}=this.options,o=(this.options.ignored||[]).map(Se(r)),i=[...[...this._ignoredPaths].map(Se(r)),...o];this._userIgnored=ms(i,void 0)}return this._userIgnored(t,e)}_isntIgnored(t,e){return!this._isIgnored(t,e)}_getWatchHelpers(t){return new rt(t,this.options.followSymlinks,this)}_getWatchedDir(t){let e=m.resolve(t);return this._watched.has(e)||this._watched.set(e,new qt(e,this._boundRemove)),this._watched.get(e)}_hasReadPermissions(t){return this.options.ignorePermissionErrors?!0:!!(Number(t.mode)&256)}_remove(t,e,r){let n=m.join(t,e),o=m.resolve(n);if(r=r??(this._watched.has(n)||this._watched.has(o)),!this._throttle("remove",n,100))return;!r&&this._watched.size===1&&this.add(t,e,!0),this._getWatchedDir(n).getChildren().forEach(h=>this._remove(n,h));let a=this._getWatchedDir(t),l=a.has(e);a.remove(e),this._symlinkPaths.has(o)&&this._symlinkPaths.delete(o);let u=n;if(this.options.cwd&&(u=m.relative(this.options.cwd,n)),this.options.awaitWriteFinish&&this._pendingWrites.has(u)&&this._pendingWrites.get(u).cancelWait()===w.ADD)return;this._watched.delete(n),this._watched.delete(o);let d=r?w.UNLINK_DIR:w.UNLINK;l&&!this._isIgnored(n)&&this._emit(d,n),this._closePath(n)}_closePath(t){this._closeFile(t);let e=m.dirname(t);this._getWatchedDir(e).remove(m.basename(t))}_closeFile(t){let e=this._closers.get(t);e&&(e.forEach(r=>r()),this._closers.delete(t))}_addPathCloser(t,e){if(!e)return;let r=this._closers.get(t);r||(r=[],this._closers.set(t,r)),r.push(e)}_readdirp(t,e){if(this.closed)return;let r={type:w.ALL,alwaysStat:!0,lstat:!0,...e,depth:0},n=ue(t,r);return this._streams.add(n),n.once(me,()=>{n=void 0}),n.once(zt,()=>{n&&(this._streams.delete(n),n=void 0)}),n}};ws={watch:be,FSWatcher:q}});var Ts={};Bt(Ts,{TSFilebasedRouter:()=>De,TSRouter:()=>Q,createEffect:()=>xt,createSignal:()=>bt,html:()=>ct,loadPyFiles:()=>Dt,mapper:()=>Kt,renderChildRoutes:()=>Lt,useAnchor:()=>W,useAnchorSingle:()=>Tt,useInitialDOM:()=>yt,useTSAuth:()=>Pt,useTSCollection:()=>St,useTSComponent:()=>z,useTSElementEach:()=>K,useTSElements:()=>gt,useTSEvent:()=>dt,useTSEventAll:()=>mt,useTSExtractParams:()=>ft,useTSLazy:()=>Mt,useTSMetaData:()=>_t,useTSNavigate:()=>vt,useTSNoReload:()=>Ft,useTSOutlet:()=>Rt,useTSParams:()=>$,useTSPurifier:()=>ut,useTSSSRHydration:()=>Ct,useTSSelect:()=>H,useTSloadBrython:()=>At});module.exports=He(Ts);function Vt(s,t){if(t!=null){if(t instanceof Node){s.appendChild(t);return}if(Array.isArray(t)){t.forEach(e=>Vt(s,e));return}s.appendChild(document.createTextNode(String(t)))}}function ct(s,...t){if(typeof document>"u")return s.reduce((a,l,u)=>{let d=u<t.length?String(t[u]??""):"";return a+l+d},"");let r=document.createElement("template");r.innerHTML=s.join("<!--slot-->");let n=r.content,o=document.createTreeWalker(n,NodeFilter.SHOW_COMMENT),c=0,i;for(;i=o.nextNode();){let a=t[c++],l=i.parentNode,u=document.createDocumentFragment();Vt(u,a),l.replaceChild(u,i)}return n.firstElementChild}var ke=s=>s.replace(/<\/?(script|iframe|object|embed|link|meta|style|form|textarea|svg|math|body)[^>]*>/gi,"").replace(/<(?!\/?(b|i|em|strong|p|br|ul|ol|li|a|div|span|h1|h2|h3|h4|h5|h6|section|article|input|button)\b)[^>]*>/gi,"").replace(/\s+on[a-z]+\s*=\s*("[^"]*"|'[^']*'|[^\s>]+)/gi,"").replace(/\s*style\s*=\s*("[^"]*"|'[^']*')/gi,"").replace(/<a\b([^>]*)href\s*=\s*(['"]?)(?!https?:|#)[^'"\s>]+(['"]?)([^>]*)>/gi,"<a$1$4>").replace(/\s+(href|src)\s*=\s*(['"]?)\s*(javascript:|data:)[^'"\s>]*/gi,"").replace(/<a\b([^>]*)\bhref\s*=\s*(['"])(\/blog|#blog)\2([^>]*)>/gi,'<a$1 href=$2$3$2 href-line="true"$4>').trim(),Kt=s=>s?.map(t=>ke(t)).join("")??"";var lt=v(require("dompurify"),1),ut=(s,t)=>{let r={...{ADD_TAGS:["my-custom-tag"]},...t};return typeof s=="string"?lt.default.sanitize(s,r):lt.default.sanitize(s.innerHTML,r)};var dt=(s,t,e)=>{if(typeof s=="string"){let r=document.getElementById(s);r?r.addEventListener(t,e):console.warn(`Element with id '${s}' not found.`)}else s instanceof HTMLElement?s.addEventListener(t,e):s===document?document.addEventListener(t,e):console.warn("Invalid target parameter provided.")};var Qt=require("zustand/vanilla"),ht=v(require("dompurify"),1);function $e(s,t){let e=[],r=s.replace(/:[^/]+/g,i=>(e.push(i.slice(1)),"([^/]+)")),n=new RegExp(`^${r}$`),o=t.match(n),c={};return o&&e.forEach((i,a)=>{c[i]=ht.default.sanitize(o[a+1]??"")}),c}function ze(s){let t={},e=new URLSearchParams(s);for(let[r,n]of e.entries())t[r]=ht.default.sanitize(n);return t}var $=(0,Qt.createStore)((s,t)=>({params:{},query:{},setFromPattern:e=>{let r=window.location.pathname,n=$e(e,r),o=ze(window.location.search);s({params:n,query:o})},getParam:e=>t().params[e],getQuery:e=>t().query[e]}));function ft(s){let t=$.getState();t.setFromPattern(s);let e=t.params,r=t.query;return{...e,...r}}var mt=(s,t,e)=>{let r=document.querySelectorAll(s);return r.forEach(n=>{n.addEventListener(t,e)}),()=>{r.forEach(n=>{n.removeEventListener(t,e)})}};var pt=v(require("dompurify"),1),gt=(s,t,e={},r)=>{let n={USE_PROFILES:{svg:!0,html:!0},ALLOWED_TAGS:["svg","path","circle","rect","line","polyline","polygon","g","main","div","h1","h2","h3","h4","h5","h6","p","button","span","a","img","input","ul","li","i","label","form"],ALLOWED_ATTR:["class","id","href","src","alt","title","fill","stroke","stroke-width","viewBox","xmlns","d","x","y","cx","cy","r","width","height","type","name","value","placeholder","data-click","data-change","data-select","data-classlist","data-hover","data-submit","data-key","data-event"],FORBID_TAGS:["script","iframe","foreignObject","body","html"],FORBID_ATTR:["style","xlink:href"],ALLOWED_URI_REGEXP:/^(?:(?:https?|mailto|tel|ftp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i,...r};pt.default.addHook("uponSanitizeAttribute",(i,a)=>{let l=(a.attrName||"").toLowerCase(),u=(a.attrValue??"").toString().trim();if(l.startsWith("on")){a.keepAttr=!1;return}if(/^data-(click|change|submit|select|hover|classlist|key|event)$/.test(l)){a.keepAttr=!0;return}if(i.nodeName.toLowerCase()==="img"&&l==="src"){/^https?:\/\//i.test(u)||/^\/(?!\/)/.test(u)||/^data:image\/(png|jpeg|jpg|gif|webp);base64,/i.test(u)||(a.keepAttr=!1);return}if(l==="class"){let h=u.split(/\s+/).filter(Boolean).filter(f=>{if(/^[a-zA-Z0-9\-\:\/_\[\]\(\)]*$/.test(f)){if(/^bg-\[url\(.*\)\]$/.test(f)){let E=f.replace(/^bg-\[url\(/,"").replace(/\)\]$/,"").replace(/^['"]|['"]$/g,"");return E===""||/^https?:\/\//i.test(E)||/^\/(?!\/)/.test(E)||/^\.{0,2}\//.test(E)}return/^bg-\[\]$/.test(f),!0}return!1});a.attrValue=h.join(" ");return}});let o=pt.default.sanitize(t,{...n,RETURN_DOM_FRAGMENT:!0});for(;s.firstChild;)s.removeChild(s.firstChild);s.appendChild(o);let c=(i,a)=>{s.querySelectorAll(`[${i}]`).forEach(l=>{let u=l.getAttribute(i);u&&Object.prototype.hasOwnProperty.call(e,u)&&l.addEventListener(a,d=>{a==="submit"&&d.preventDefault(),e[u](d)})})};c("data-click","click"),c("data-change","change"),c("data-select","select"),c("data-submit","submit"),s.querySelectorAll("[data-key]").forEach(i=>{let a=i.dataset.key,l=i.dataset.event??"click";a&&Object.prototype.hasOwnProperty.call(e,a)&&i.addEventListener(l,e[a])}),s.querySelectorAll("[data-hover]").forEach(i=>{let a=i.dataset.hover;a&&Object.prototype.hasOwnProperty.call(e,a)&&(i.addEventListener("mouseenter",e[a]),i.addEventListener("mouseleave",e[a]))}),s.querySelectorAll("[data-classlist]").forEach(i=>{let a=i.dataset.classlist;/^[a-zA-Z0-9\-\s:_]+$/.test(a)&&i.classList.add(...a.split(/\s+/))})};var Et=v(require("dompurify"),1),V=null,yt=(s,t)=>{if(typeof document>"u")return;let e=document.getElementById(s);if(!e)return;Et.default.addHook("uponSanitizeAttribute",(c,i)=>{let a=(i.attrName||"").toLowerCase(),l=(i.attrValue??"").toString().trim();if(a.startsWith("on")){i.keepAttr=!1;return}if((a==="href"||a==="src")&&/^(javascript:|vbscript:|data:|file:|about:)/i.test(l)){i.keepAttr=!1;return}if(a==="class"){let d=l.split(/\s+/).filter(Boolean).filter(h=>{if(/^[a-zA-Z0-9\-\:\/_\[\]\(\)]+$/.test(h)){if(/^bg-\[url\(.*\)\]$/.test(h)){let f=h.replace(/^bg-\[url\(/,"").replace(/\)\]$/,"").replace(/^['"]|['"]$/g,"");return f===""||/^https?:\/\//i.test(f)||/^\/(?!\/)/.test(f)||/^\.{0,2}\//.test(f)}return!0}return!1});i.attrValue=d.join(" ");return}if(a==="style"){i.keepAttr=!1;return}});let r=e.cloneNode(!0),n=Et.default.sanitize(r.innerHTML,{USE_PROFILES:{html:!0},ALLOWED_TAGS:["div","span","p","h1","h2","h3","h4","h5","h6","ul","ol","li","strong","em","a","img","br","form","button","input","label"],ALLOWED_ATTR:["href","src","alt","title","class","id","type","name","value","placeholder","data-click","data-change","data-submit","data-select","data-hover","data-classlist"],FORBID_TAGS:["script","iframe","object","embed","body","html","svg","math","link","meta"],ALLOW_DATA_ATTR:!0,KEEP_CONTENT:!1,RETURN_DOM_FRAGMENT:!0}),o=Array.from(n.childNodes).map(c=>c.outerHTML||c.textContent||"").join("");if(V!==null&&o!==V){let c=document.createElement("div");t(c);let a=new DOMParser().parseFromString(V,"text/html");for(;e.firstChild;)e.removeChild(e.firstChild);a.body.childNodes.forEach(l=>e.appendChild(l.cloneNode(!0)))}else{for(V=o;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(n),t(e)}};var wt=v(require("dompurify"),1);typeof window<"u"&&!window.__anchorSinglePopstateHandlerAttached&&(window.addEventListener("popstate",s=>{let t=s.state;t?.scrollPosition!==void 0&&window.scrollTo(0,t.scrollPosition)}),window.__anchorSinglePopstateHandlerAttached=!0);var Tt=(s,t,e,r="",n=null)=>{if(!s)return;let o=wt.default.sanitize(t,{ALLOWED_URI_REGEXP:/^(https?:|\/)/}),c=wt.default.sanitize(e,{USE_PROFILES:{html:!1}});s.setAttribute("href",o),s.setAttribute("aria-label",c),r&&(s.className=r.trim()),n&&s.replaceChildren(n),typeof window<"u"&&s.addEventListener("click",i=>{i.preventDefault();let l=i.currentTarget.getAttribute("href");if(l){let u=window.scrollY;window.scrollTo(0,0),window.history.pushState({scrollPosition:u},"",l),dispatchEvent(new PopStateEvent("popstate"))}})};var A=v(require("dompurify"),1);var Zt=(s="'self' 'nonce-rAnd0m123' 'unsafe-inline' 'unsafe-eval'",t="'self' 'nonce-rAnd0m123'",e="'none'",r="'self' https://fonts.googleapis.com https://fonts.gstatic.com",n="'self' https://blogger.googleusercontent.com",o=["'self'","https://fonts.googleapis.com","https://fonts.gstatic.com","https://www.google.com/maps/"],c="'self' https://www.youtube.com",i="'self'",a="/csp-report",l=!1)=>{let u=()=>{try{let d=document.querySelector('meta[http-equiv="Content-Security-Policy"]');d||(d=document.createElement("meta"),d.setAttribute("http-equiv","Content-Security-Policy"),document.head.appendChild(d));let h=l?`report-uri ${a};`:"";d.setAttribute("content",`default-src 'self'; script-src ${s}; style-src ${t}; object-src ${e}; font-src ${r}; img-src ${n}; connect-src ${o.join(" ")}; frame-src ${c}; base-uri ${i}; ${h}`)}catch(d){console.error("Error adding CSP meta element:",d)}};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",u):u()};var _t=(s,t)=>{let e={name:A.default.sanitize(s.name||""),title:A.default.sanitize(s.title||""),description:A.default.sanitize(s.description||"Default description"),author:A.default.sanitize(s.author||""),favicon:s.favicon},r=g=>{e.name=A.default.sanitize(g),p("name",e.name)},n=g=>{e.title=A.default.sanitize(g),document.title=e.title},o=g=>{e.description=A.default.sanitize(g),p("description",e.description)},c=g=>{e.author=A.default.sanitize(g),p("author",e.author)},i=g=>{e.favicon=A.default.sanitize(g);let T=document.querySelector('link[rel="icon"]');T||(T=document.createElement("link"),T.rel="icon",document.head.appendChild(T)),T.href=e.favicon},a=()=>e.name,l=()=>e.title,u=()=>e.description,d=()=>e.author,h=()=>e.favicon,f=()=>e,E=(g,T)=>{let _=document.createElement("meta");_.setAttribute("name",g),_.setAttribute("content",T),document.head.appendChild(_)},p=(g,T)=>{let _=document.querySelector(`meta[name="${g}"]`);_?_.setAttribute("content",T):E(g,T)},S=()=>{e.title&&(document.title=e.title),e.name&&p("name",e.name),e.description&&p("description",e.description),e.author&&p("author",e.author),e.favicon&&i(e.favicon)};return t&&Zt(t.scriptSrc,t.styleSrc,t.objectSrc,Array.isArray(t.connectSrc)?t.connectSrc.join(" "):t.connectSrc,t.reportOnly!==void 0?String(t.reportOnly):void 0),S(),{setName:r,setTitle:n,setDescription:o,setAuthor:c,setFavicon:i,getName:a,getTitle:l,getDescription:u,getAuthor:d,getFavicon:h,getAllMetaData:f,appendMetaTagsToHead:S}};var Jt=v(require("dompurify"),1),z=(s,t,e,r,n)=>{let o=`#${s}`,c=t.querySelectorAll(o);if(c.length===0)throw new Error(`[useTSComponent] No element found with id '${s}' in the given parent.`);if(c.length>1)throw new Error(`[useTSComponent] Duplicate id '${s}' detected. Found ${c.length} elements.`);let i=c[0];i.innerHTML=Jt.default.sanitize(i.innerHTML,{USE_PROFILES:{html:!0}}),e(i,r,n)};var St=(s,t,e,r=[])=>{let n=new Set;s.forEach((o,c)=>{if(n.has(o)){console.warn(`[useTSCollection] Duplicate ID in collection array: "${o}" \u2014 skipping.`);return}n.add(o);let i=t.querySelectorAll(`#${o}`);if(i.length>1){console.warn(`[useTSCollection] Duplicate ID in DOM: "${o}" (${i.length} elements found) \u2014 skipping component mount.`);return}let a=e[c],l=Array.isArray(r)?r[c]:void 0;typeof a=="function"?z(o,t,a,l):console.warn(`[useTSCollection] No valid component function found for ID: "${o}"`)})};var H=(s,t)=>{let r=(t??document).querySelectorAll(s);if(r.length===0)return process.env.NODE_ENV!=="production"&&console.warn(`[useTSSelect] No element found for selector: '${s}'`),null;if(s.startsWith("#")&&r.length>1){if(process.env.NODE_ENV!=="production")throw new Error(`[useTSSelect] Duplicate ID detected: '${s}'. Found ${r.length} elements with this ID.`);return r[0]}return r.length>1&&process.env.NODE_ENV!=="production"&&console.warn(`[useTSSelect] Multiple elements found for selector: '${s}'. Returning the first one.`),r[0]};var Xt=require("jwt-decode"),Pt=(s,t)=>{let e=localStorage.getItem("token");if(!e)return window.location.href=t,null;try{let r=(0,Xt.jwtDecode)(e),n=Date.now()/1e3;return r.exp&&r.exp<n&&(console.error("Token has expired"),window.localStorage.removeItem("token"),window.location.href=t),null}catch(r){return console.error("Invalid token:",r),window.location.href=t,null}};var K=(s,t,e)=>{s.forEach(r=>{t.forEach(n=>{r.addEventListener(n,o=>{e(r,o)})})})};var vt=()=>({back:()=>window.history.back(),forward:()=>window.history.forward()});var Rt=(s,t)=>{let e=document.querySelector(`#${s}`)||document.querySelector(`.${s}`);if(!e)return;let r=window.location.pathname.replace(/\/$/,"");for(let n of t){let o=n.path.replace(/\/$/,"");if(r===o||r.startsWith(`${o}/`)){n.component(e);break}}};function Lt(s,t){let e=window.location.pathname.replace(/\/$/,"");t.routes.forEach(r=>{r.children?.length&&r.children.forEach(n=>{let o=n.path.replace(/\/$/,"");if(e===o||e.startsWith(`${o}/`)){let c=s.querySelector(`#${n.outlet}`)||s.querySelector(`.${n.outlet}`);c instanceof HTMLElement&&n.element&&n.element(c)}})})}var te=require("zustand/vanilla");function bt(s){let t=(0,te.createStore)(()=>({value:s})),e=new Set;return{get:()=>t.getState().value,set:r=>{t.setState({value:r}),e.forEach(n=>n(r))},subscribe:r=>(e.add(r),r(t.getState().value),()=>e.delete(r))}}function xt(s){let t=s();typeof t=="function"&&t()}var At=async()=>{let s="https://cdn.jsdelivr.net/npm/brython@3/brython.min.js",t="https://cdn.jsdelivr.net/npm/brython@3/brython_stdlib.js",e=r=>new Promise((n,o)=>{let c=document.createElement("script");c.src=r,c.onload=()=>n(),c.onerror=()=>o(new Error(`Failed to load ${r}`)),document.head.appendChild(c)});await e(s),await e(t),typeof window.brython=="function"?window.brython():console.error("Brython did not load correctly.")},Dt=s=>new Promise((t,e)=>{let r=document.createElement("script");r.type="text/python",r.src=`/src/python/${s}`,r.onload=()=>t(),r.onerror=()=>e(new Error(`Failed to load ${s}`)),document.body.appendChild(r)});function Mt(s){let t=null;return async(e,r)=>{try{if(!t){let n=await s();t=n.default||n}if(typeof t=="function")return t(e,r);if(t instanceof HTMLElement){let n=t.cloneNode(!0);return e?.appendChild(n),n}if(typeof t=="object"&&t!==null&&"render"in t&&typeof t.render=="function")return t.render(e,r);console.warn("useTSLazy: Unsupported module type",t)}catch(n){console.error("useTSLazy failed:",n)}}}var Ct=s=>typeof window>"u"?{isDOM:null}:{isDOM:s||document.body};var ee=require("lodash-es"),Ot=s=>s;typeof window<"u"&&typeof document<"u"&&(Ot=s=>{let t=document.createElement("div");return t.innerText=s,t.innerHTML});var We=s=>{(s?Array.isArray(s)?s:s instanceof HTMLAnchorElement?[s]:Array.from(s):Array.from(document.querySelectorAll("a"))).forEach(e=>{if(!e||e.dataset.anchorEnhanced==="true")return;e.dataset.anchorEnhanced="true";let r=e.getAttribute("class")||"";e.setAttribute("class",Ot(r));let n=e.getAttribute("aria-label");n&&e.setAttribute("aria-label",Ot(n));let o=e.querySelector(":scope > *");o&&(e.innerHTML="",e.appendChild(o));let c=e.getAttribute("href")||"";if(!c.startsWith("#")){try{if(new URL(c,window.location.href).origin!==window.location.origin)return}catch{return}e.addEventListener("click",i=>{i.preventDefault();let a=e.getAttribute("href")||"";try{let l=new URL(a,window.location.href);window.history.pushState({},"",l.pathname+l.search+l.hash),window.dispatchEvent(new PopStateEvent("popstate"))}catch(l){console.error("Invalid URL in anchor:",a,l)}})}})},je=(0,ee.debounce)(We,50),W=s=>{je(s)};var Ft=s=>{if(!s)return;let t=H("a",s);W(t)};var It=v(require("dompurify"),1);var ne=require("zustand/vanilla"),re=v(require("dompurify"),1),O=(0,ne.createStore)(s=>({params:{},query:{},setParams:t=>s(()=>({params:se(t)})),setQuery:t=>s(()=>({query:se(t)}))}));function se(s){let t={};for(let e in s)t[e]=re.default.sanitize(s[e]);return t}var Q=class{constructor(t,e){this.routes=[];this.routes=t,this.expectedParams=new Set(e),window.addEventListener("popstate",this.handlePopState.bind(this)),this.handlePopState()}handlePopState(){let t=window.location.pathname,e=window.location.search,r=this.parseQueryParams(e),n=this.findMatchingRoute(t,this.routes);if(n){if(n.routeto){this.navigate(n.routeto);return}let o=this.filterAndSanitizeParams(n.params);O.getState().setParams(o),O.getState().setQuery(r);let c=document.createElement("div");if(n.element?.(c,o,r),n.children){let i=t.slice(n.path.length),a=c.querySelector("#child");a&&this.renderChildren(n.children,i,a,o,r)}}else{let o=this.findMatchingRoute("*",this.routes);if(o){let c=this.filterAndSanitizeParams(o.params);O.getState().setParams(c),O.getState().setQuery(r);let i=document.createElement("div");o.element?.(i,c,r)}}}renderChildren(t,e,r,n,o){if(!t||t.length===0){let i=r.querySelector("#child");i&&i.remove();return}let c=this.findMatchingRoute(e,t);if(c){let i=document.createElement("div");i.id="child";let a={...n,...c.params},l=this.filterAndSanitizeParams(a);if(O.getState().setParams(l),O.getState().setQuery(o),c.element?.(i,l,o),r.appendChild(i),c.children){let u=e.slice(c.path.length);this.renderChildren(c.children,u,i,l,o)}}}parseQueryParams(t){let e={},r=new URLSearchParams(t);for(let[n,o]of r.entries())this.expectedParams.has(n)&&(e[n]=It.default.sanitize(o));return e}findMatchingRoute(t,e,r={}){for(let n of e){let o=n.path;if(o==="*")return n;{let i=[],a=o.replace(/:[^\s/]+/g,d=>(i.push(d.substring(1)),"([^\\s/]+)")),l=new RegExp(`^${a}(?:/|$)`),u=t.match(l);if(u){let d={...r};if(i.forEach((h,f)=>{d[h]=u[f+1]??""}),n.children){let h=t.slice(u[0].length),f=this.findMatchingRoute(h,n.children,d);if(f)return f}return{...n,params:d}}}}}filterAndSanitizeParams(t){if(!t)return{};let e={};for(let r in t)this.expectedParams.has(r)&&(e[r]=It.default.sanitize(t[r]??""));return e}navigate(t){history.pushState(null,"",t),this.handlePopState()}addRoute(t){this.routes.push(t)}};var x=v(require("path"),1),De=()=>({name:"ts-filebased-router",async buildStart(){if(typeof process>"u"||!process.versions?.node)return;let s=await import("fs/promises"),t=await Promise.resolve().then(()=>(Ae(),xe)),e=x.default.resolve("src/pages"),r=x.default.resolve("src/gen"),n=x.default.resolve("src/routes"),o=x.default.join(r,"tsrouter.gen.ts"),c=x.default.join(n,"__root.ts"),i=process.env.NODE_ENV!=="production";async function a(p){try{await s.mkdir(p,{recursive:!0})}catch{}}function l(p,S){let g="/"+x.default.relative(S,p).replace(/\\/g,"/");return g=g.replace(/\.ts$/,"").replace(/\/index$/,"")||"/",g.replace(/\[(.+?)\]/g,":$1")}function u(p){return p.replace(/^\//,"").split("/").map(S=>S.startsWith(":")?S.slice(1):S).filter(Boolean).join("-")||"index"}function d(p,S){let T=x.default.relative(S,p).replace(/\\/g,"/").split("/").filter(Boolean),_=T[T.length-1].replace(".ts",""),D=T.length>1?T[T.length-2]:"";if(_==="index")return D?D.charAt(0).toUpperCase()+D.slice(1):"Index";if(_.startsWith("[")&&_.endsWith("]")){let N=_.slice(1,-1);return D.charAt(0).toUpperCase()+N.charAt(0).toUpperCase()+N.slice(1)}return _.charAt(0).toUpperCase()+_.slice(1)}async function h(p){let S=await s.readdir(p,{withFileTypes:!0}),g=[];for(let T of S){let _=x.default.join(p,T.name);if(T.isDirectory())g=g.concat(await h(_));else if(T.isFile()&&T.name.endsWith(".ts")){let D=l(_,e),N=u(D),ot=d(_,e);g.push({file:_,route:D,routeName:N,importName:ot})}}return g}function f(){return`import { createRouter } from "@/gen/tsrouter.gen";
|
|
3
2
|
|
|
4
3
|
export const Router = async (DOM: HTMLElement) => {
|
|
5
|
-
|
|
6
|
-
const router = createRouter(DOM);
|
|
7
|
-
(await router).navigate(window.location.pathname);
|
|
4
|
+
const router = await createRouter(DOM);
|
|
8
5
|
|
|
9
|
-
window.
|
|
10
|
-
|
|
6
|
+
await router.navigate(window.location.pathname + window.location.search);
|
|
7
|
+
|
|
8
|
+
window.addEventListener("popstate", () => {
|
|
9
|
+
void router.navigate(window.location.pathname + window.location.search, false);
|
|
10
|
+
});
|
|
11
|
+
};`}async function E(){let p=await h(e),S=p.find(P=>P.route==="/notfound"),g=p.filter(P=>P.route!=="/notfound");for(let P of p)if(!(await s.readFile(P.file,"utf-8")).trim()){let Y=P.importName,B=P.route.includes(":"),Me=["html","useTSElements","useTSMetaData",...B?["useTSExtractParams"]:[]].join(", ");await s.writeFile(P.file,`import { ${Me} } from "@devwareng/vanilla-ts";
|
|
12
|
+
|
|
13
|
+
export default function ${Y}(DOM: HTMLElement) {
|
|
14
|
+
useTSMetaData({
|
|
15
|
+
title: "${Y}",
|
|
16
|
+
description: "${Y}",
|
|
17
|
+
author: "Your name here",
|
|
18
|
+
favicon: "/favicon.ico",
|
|
11
19
|
});
|
|
12
|
-
};`}async function S(){let T=await f(r),p=T.find(P=>P.route==="/notfound"),y=T.filter(P=>P.route!=="/notfound");for(let P of T)if(!(await s.readFile(P.file,"utf-8")).trim()){let Wt=P.importName;await s.writeFile(P.file,`import { html, useTSElements } from "@devwareng/vanilla-ts";
|
|
13
20
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
${B?`const params = useTSExtractParams("${P.route}");`:""}
|
|
22
|
+
|
|
23
|
+
${B?"if (Object.values(params).some(v => !v)) return;":""}
|
|
24
|
+
|
|
25
|
+
const ui = useTSElements(
|
|
26
|
+
DOM,
|
|
27
|
+
html\`
|
|
28
|
+
<div>
|
|
29
|
+
<h1>${Y}</h1>
|
|
30
|
+
${B?"<pre>${JSON.stringify(params, null, 2)}</pre>":""}
|
|
31
|
+
</div>
|
|
32
|
+
\`
|
|
33
|
+
);
|
|
34
|
+
|
|
35
|
+
return ui;
|
|
36
|
+
}`,"utf-8")}let _=["useTSLazy",...!S?["html","useTSElements"]:[]].join(", "),D=g.map(P=>{let Yt="../pages/"+x.default.relative(e,P.file).replace(/\\/g,"/").replace(/\.ts$/,"");return`{ path: "${P.route}", name: "${P.routeName}", component: useTSLazy(() => import("${Yt}")) }`}).join(`,
|
|
37
|
+
`),N=S?`export const NotFound = useTSLazy(() => import("../pages/${x.default.relative(e,S.file).replace(/\\/g,"/").replace(/\.ts$/,"")}"))`:`export function NotFound(DOM: HTMLElement) {
|
|
38
|
+
return useTSElements(
|
|
39
|
+
DOM,
|
|
40
|
+
html\`<div><h1>404 - Page Not Found</h1></div>\`
|
|
41
|
+
);
|
|
42
|
+
}`,ot=`// AUTO-GENERATED FILE
|
|
43
|
+
import { ${_} } from "@devwareng/vanilla-ts";
|
|
23
44
|
|
|
24
|
-
|
|
45
|
+
type Route = {
|
|
46
|
+
path: string;
|
|
47
|
+
name: string;
|
|
48
|
+
component: (DOM: HTMLElement) => Promise<any>;
|
|
49
|
+
};
|
|
25
50
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
]
|
|
51
|
+
${N}
|
|
52
|
+
|
|
53
|
+
export const routeTree: Route[] = [
|
|
54
|
+
${D}
|
|
55
|
+
];
|
|
29
56
|
|
|
30
57
|
export async function createRouter(DOM: HTMLElement) {
|
|
58
|
+
|
|
31
59
|
function matchRoute(path: string) {
|
|
32
60
|
for (const route of routeTree) {
|
|
33
|
-
const
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
return "([^/]+)"
|
|
37
|
-
}) + "$")
|
|
38
|
-
const pathname = path.split("?")[0]
|
|
39
|
-
const match = pathname?.match(regex)
|
|
40
|
-
if (match) {
|
|
41
|
-
const params: Record<string, string> = {}
|
|
42
|
-
keys.forEach((key, i) => (params[key] = match[i + 1] || ""))
|
|
43
|
-
return { ...route, params }
|
|
44
|
-
}
|
|
61
|
+
const regex = new RegExp("^" + route.path.replace(/:([^/]+)/g, "([^/]+)") + "$");
|
|
62
|
+
const pathname = path.split("?")[0];
|
|
63
|
+
if (pathname?.match(regex)) return route;
|
|
45
64
|
}
|
|
46
|
-
return null
|
|
65
|
+
return null;
|
|
47
66
|
}
|
|
48
67
|
|
|
49
|
-
async function navigate(path: string) {
|
|
50
|
-
const match = matchRoute(path)
|
|
51
|
-
if (match) { await match.component(DOM); history.pushState({}, "", path) }
|
|
52
|
-
else { NotFound(DOM) }
|
|
53
|
-
}
|
|
68
|
+
async function navigate(path: string, pushState: boolean = true) {
|
|
69
|
+
const match = matchRoute(path);
|
|
54
70
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
71
|
+
if (match) {
|
|
72
|
+
await match.component(DOM);
|
|
73
|
+
if (pushState) history.pushState({}, "", path);
|
|
74
|
+
} else {
|
|
75
|
+
NotFound(DOM);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
61
78
|
|
|
62
|
-
|
|
63
|
-
return { navigate, routes: routeTree }
|
|
79
|
+
return { navigate, routes: routeTree };
|
|
64
80
|
}
|
|
65
|
-
`;await
|
|
81
|
+
`;await a(r),await s.writeFile(o,ot,"utf-8"),await s.writeFile(c,f(),"utf-8")}await a(r),await a(n),await a(e),await E(),i&&(t.watch(e).on("all",async(S,g)=>{g.endsWith(".ts")&&await E()}),t.watch(c).on("unlink",async()=>{await s.writeFile(c,f(),"utf-8")})),console.log("\u{1F7E2} TS Router Generated (Smart + Clean Mode)")}});0&&(module.exports={TSFilebasedRouter,TSRouter,createEffect,createSignal,html,loadPyFiles,mapper,renderChildRoutes,useAnchor,useAnchorSingle,useInitialDOM,useTSAuth,useTSCollection,useTSComponent,useTSElementEach,useTSElements,useTSEvent,useTSEventAll,useTSExtractParams,useTSLazy,useTSMetaData,useTSNavigate,useTSNoReload,useTSOutlet,useTSParams,useTSPurifier,useTSSSRHydration,useTSSelect,useTSloadBrython});
|
|
66
82
|
/*! Bundled license information:
|
|
67
83
|
|
|
68
84
|
chokidar/esm/index.js:
|
package/dist/index.d.cts
CHANGED
|
@@ -2,7 +2,7 @@ import { Plugin } from 'vite';
|
|
|
2
2
|
import { Config } from 'dompurify';
|
|
3
3
|
import * as zustand_vanilla from 'zustand/vanilla';
|
|
4
4
|
|
|
5
|
-
declare function html(strings: TemplateStringsArray, ...values: unknown[]):
|
|
5
|
+
declare function html(strings: TemplateStringsArray, ...values: unknown[]): any;
|
|
6
6
|
|
|
7
7
|
declare const mapper: (arr: string[] | undefined) => string;
|
|
8
8
|
|
|
@@ -148,6 +148,9 @@ declare const useTSSSRHydration: (DOM: HTMLElement) => {
|
|
|
148
148
|
|
|
149
149
|
declare const useTSNoReload: (DOM: HTMLElement) => void;
|
|
150
150
|
|
|
151
|
+
type AnchorInput = NodeListOf<HTMLAnchorElement> | HTMLAnchorElement[] | HTMLAnchorElement | null | undefined;
|
|
152
|
+
declare const useAnchor: (anchors?: AnchorInput) => void;
|
|
153
|
+
|
|
151
154
|
type RouteCallback = (errorElement?: HTMLElement, params?: Record<string, string>, query?: Record<string, string>) => void;
|
|
152
155
|
interface RouteConfig {
|
|
153
156
|
path: string;
|
|
@@ -170,4 +173,4 @@ declare class TSRouter {
|
|
|
170
173
|
addRoute(route: RouteConfig): void;
|
|
171
174
|
}
|
|
172
175
|
|
|
173
|
-
export { TSFilebasedRouter, TSRouter, createEffect, createSignal, html, loadPyFiles, mapper, renderChildRoutes, useAnchorSingle, useInitialDOM, useTSAuth, useTSCollection, useTSComponent, useTSElementEach, useTSElements, useTSEvent, useTSEventAll, useTSExtractParams, useTSLazy, useTSMetaData, useTSNavigate, useTSNoReload, useTSOutlet, useTSParams, useTSPurifier, useTSSSRHydration, useTSSelect, useTSloadBrython };
|
|
176
|
+
export { TSFilebasedRouter, TSRouter, createEffect, createSignal, html, loadPyFiles, mapper, renderChildRoutes, useAnchor, useAnchorSingle, useInitialDOM, useTSAuth, useTSCollection, useTSComponent, useTSElementEach, useTSElements, useTSEvent, useTSEventAll, useTSExtractParams, useTSLazy, useTSMetaData, useTSNavigate, useTSNoReload, useTSOutlet, useTSParams, useTSPurifier, useTSSSRHydration, useTSSelect, useTSloadBrython };
|
package/dist/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { Plugin } from 'vite';
|
|
|
2
2
|
import { Config } from 'dompurify';
|
|
3
3
|
import * as zustand_vanilla from 'zustand/vanilla';
|
|
4
4
|
|
|
5
|
-
declare function html(strings: TemplateStringsArray, ...values: unknown[]):
|
|
5
|
+
declare function html(strings: TemplateStringsArray, ...values: unknown[]): any;
|
|
6
6
|
|
|
7
7
|
declare const mapper: (arr: string[] | undefined) => string;
|
|
8
8
|
|
|
@@ -148,6 +148,9 @@ declare const useTSSSRHydration: (DOM: HTMLElement) => {
|
|
|
148
148
|
|
|
149
149
|
declare const useTSNoReload: (DOM: HTMLElement) => void;
|
|
150
150
|
|
|
151
|
+
type AnchorInput = NodeListOf<HTMLAnchorElement> | HTMLAnchorElement[] | HTMLAnchorElement | null | undefined;
|
|
152
|
+
declare const useAnchor: (anchors?: AnchorInput) => void;
|
|
153
|
+
|
|
151
154
|
type RouteCallback = (errorElement?: HTMLElement, params?: Record<string, string>, query?: Record<string, string>) => void;
|
|
152
155
|
interface RouteConfig {
|
|
153
156
|
path: string;
|
|
@@ -170,4 +173,4 @@ declare class TSRouter {
|
|
|
170
173
|
addRoute(route: RouteConfig): void;
|
|
171
174
|
}
|
|
172
175
|
|
|
173
|
-
export { TSFilebasedRouter, TSRouter, createEffect, createSignal, html, loadPyFiles, mapper, renderChildRoutes, useAnchorSingle, useInitialDOM, useTSAuth, useTSCollection, useTSComponent, useTSElementEach, useTSElements, useTSEvent, useTSEventAll, useTSExtractParams, useTSLazy, useTSMetaData, useTSNavigate, useTSNoReload, useTSOutlet, useTSParams, useTSPurifier, useTSSSRHydration, useTSSelect, useTSloadBrython };
|
|
176
|
+
export { TSFilebasedRouter, TSRouter, createEffect, createSignal, html, loadPyFiles, mapper, renderChildRoutes, useAnchor, useAnchorSingle, useInitialDOM, useTSAuth, useTSCollection, useTSComponent, useTSElementEach, useTSElements, useTSEvent, useTSEventAll, useTSExtractParams, useTSLazy, useTSMetaData, useTSNavigate, useTSNoReload, useTSOutlet, useTSParams, useTSPurifier, useTSSSRHydration, useTSSelect, useTSloadBrython };
|
package/dist/index.js
CHANGED
|
@@ -1,65 +1,81 @@
|
|
|
1
|
-
function ue(n){let e=n==null?"":String(n),t=e.toLowerCase();return(t.includes("<script")||t.includes("javascript:"))&&(e=""),e=e.replace(/url\(\s*(['"])?\s*\1?\s*\)/gi,""),e.replace(/<\s*(script|iframe|object|embed|link|style|meta|body)[^>]*>.*?<\s*\/\s*\1\s*>/gi,"").replace(/<\s*(script|iframe|object|embed|link|style|meta)[^>]*>/gi,"").replace(/\s+on\w+\s*=\s*(['"]).*?\1/gi,"").replace(/\s+on\w+\s*=\s*[^\s>]+/gi,"").replace(/\s(href|src)\s*=\s*(['"]?)\s*(javascript:|vbscript:|data:|file:)[^'">\s]*\2/gi,'$1="#"')}function k(n,...e){return n.reduce((t,r,o)=>{let i=o<e.length?ue(e[o]):"";return t+r+i},"")}var de=n=>n.replace(/<\/?(script|iframe|object|embed|link|meta|style|form|textarea|svg|math|body)[^>]*>/gi,"").replace(/<(?!\/?(b|i|em|strong|p|br|ul|ol|li|a|div|span|h1|h2|h3|h4|h5|h6|section|article|input|button)\b)[^>]*>/gi,"").replace(/\s+on[a-z]+\s*=\s*("[^"]*"|'[^']*'|[^\s>]+)/gi,"").replace(/\s*style\s*=\s*("[^"]*"|'[^']*')/gi,"").replace(/<a\b([^>]*)href\s*=\s*(['"]?)(?!https?:|#)[^'"\s>]+(['"]?)([^>]*)>/gi,"<a$1$4>").replace(/\s+(href|src)\s*=\s*(['"]?)\s*(javascript:|data:)[^'"\s>]*/gi,"").replace(/<a\b([^>]*)\bhref\s*=\s*(['"])(\/blog|#blog)\2([^>]*)>/gi,'<a$1 href=$2$3$2 href-line="true"$4>').trim(),me=n=>n?.map(e=>de(e)).join("")??"";import $ from"dompurify";var N=(n,e)=>{let r={...{ADD_TAGS:["my-custom-tag"]},...e};return typeof n=="string"?$.sanitize(n,r):$.sanitize(n.innerHTML,r)};var F=(n,e,t)=>{if(typeof n=="string"){let r=document.getElementById(n);r?r.addEventListener(e,t):console.warn(`Element with id '${n}' not found.`)}else n instanceof HTMLElement?n.addEventListener(e,t):n===document?document.addEventListener(e,t):console.warn("Invalid target parameter provided.")};import{createStore as pe}from"zustand/vanilla";import z from"dompurify";function fe(n,e){let t=[],r=n.replace(/:[^/]+/g,s=>(t.push(s.slice(1)),"([^/]+)")),o=new RegExp(`^${r}$`),i=e.match(o),a={};return i&&t.forEach((s,c)=>{a[s]=z.sanitize(i[c+1]??"")}),a}function he(n){let e={},t=new URLSearchParams(n);for(let[r,o]of t.entries())e[r]=z.sanitize(o);return e}var b=pe((n,e)=>({params:{},query:{},setFromPattern:t=>{let r=window.location.pathname,o=fe(t,r),i=he(window.location.search);n({params:o,query:i})},getParam:t=>e().params[t],getQuery:t=>e().query[t]}));function _(n){let e=b.getState();e.setFromPattern(n);let t=e.params,r=e.query;return{...t,...r}}var I=(n,e,t)=>{let r=document.querySelectorAll(n);return r.forEach(o=>{o.addEventListener(e,t)}),()=>{r.forEach(o=>{o.removeEventListener(e,t)})}};import q from"dompurify";var U=(n,e,t={},r)=>{let o={USE_PROFILES:{svg:!0,html:!0},ALLOWED_TAGS:["svg","path","circle","rect","line","polyline","polygon","g","main","div","h1","h2","h3","h4","h5","h6","p","button","span","a","img","input","ul","li","i","label","form"],ALLOWED_ATTR:["class","id","href","src","alt","title","fill","stroke","stroke-width","viewBox","xmlns","d","x","y","cx","cy","r","width","height","type","name","value","placeholder","data-click","data-change","data-select","data-classlist","data-hover","data-submit","data-key","data-event"],FORBID_TAGS:["script","iframe","foreignObject","body","html"],FORBID_ATTR:["style","xlink:href"],ALLOWED_URI_REGEXP:/^(?:(?:https?|mailto|tel|ftp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i,...r};q.addHook("uponSanitizeAttribute",(s,c)=>{let l=(c.attrName||"").toLowerCase(),d=(c.attrValue??"").toString().trim();if(l.startsWith("on")){c.keepAttr=!1;return}if(/^data-(click|change|submit|select|hover|classlist|key|event)$/.test(l)){c.keepAttr=!0;return}if(s.nodeName.toLowerCase()==="img"&&l==="src"){/^https?:\/\//i.test(d)||/^\/(?!\/)/.test(d)||/^data:image\/(png|jpeg|jpg|gif|webp);base64,/i.test(d)||(c.keepAttr=!1);return}if(l==="class"){let y=d.split(/\s+/).filter(Boolean).filter(f=>{if(/^[a-zA-Z0-9\-\:\/_\[\]\(\)]*$/.test(f)){if(/^bg-\[url\(.*\)\]$/.test(f)){let v=f.replace(/^bg-\[url\(/,"").replace(/\)\]$/,"").replace(/^['"]|['"]$/g,"");return v===""||/^https?:\/\//i.test(v)||/^\/(?!\/)/.test(v)||/^\.{0,2}\//.test(v)}return/^bg-\[\]$/.test(f),!0}return!1});c.attrValue=y.join(" ");return}});let i=q.sanitize(e,{...o,RETURN_DOM_FRAGMENT:!0});for(;n.firstChild;)n.removeChild(n.firstChild);n.appendChild(i);let a=(s,c)=>{n.querySelectorAll(`[${s}]`).forEach(l=>{let d=l.getAttribute(s);d&&Object.prototype.hasOwnProperty.call(t,d)&&l.addEventListener(c,m=>{c==="submit"&&m.preventDefault(),t[d](m)})})};a("data-click","click"),a("data-change","change"),a("data-select","select"),a("data-submit","submit"),n.querySelectorAll("[data-key]").forEach(s=>{let c=s.dataset.key,l=s.dataset.event??"click";c&&Object.prototype.hasOwnProperty.call(t,c)&&s.addEventListener(l,t[c])}),n.querySelectorAll("[data-hover]").forEach(s=>{let c=s.dataset.hover;c&&Object.prototype.hasOwnProperty.call(t,c)&&(s.addEventListener("mouseenter",t[c]),s.addEventListener("mouseleave",t[c]))}),n.querySelectorAll("[data-classlist]").forEach(s=>{let c=s.dataset.classlist;/^[a-zA-Z0-9\-\s:_]+$/.test(c)&&s.classList.add(...c.split(/\s+/))})};import j from"dompurify";var P=null,B=(n,e)=>{if(typeof document>"u")return;let t=document.getElementById(n);if(!t)return;j.addHook("uponSanitizeAttribute",(a,s)=>{let c=(s.attrName||"").toLowerCase(),l=(s.attrValue??"").toString().trim();if(c.startsWith("on")){s.keepAttr=!1;return}if((c==="href"||c==="src")&&/^(javascript:|vbscript:|data:|file:|about:)/i.test(l)){s.keepAttr=!1;return}if(c==="class"){let m=l.split(/\s+/).filter(Boolean).filter(y=>{if(/^[a-zA-Z0-9\-\:\/_\[\]\(\)]+$/.test(y)){if(/^bg-\[url\(.*\)\]$/.test(y)){let f=y.replace(/^bg-\[url\(/,"").replace(/\)\]$/,"").replace(/^['"]|['"]$/g,"");return f===""||/^https?:\/\//i.test(f)||/^\/(?!\/)/.test(f)||/^\.{0,2}\//.test(f)}return!0}return!1});s.attrValue=m.join(" ");return}if(c==="style"){s.keepAttr=!1;return}});let r=t.cloneNode(!0),o=j.sanitize(r.innerHTML,{USE_PROFILES:{html:!0},ALLOWED_TAGS:["div","span","p","h1","h2","h3","h4","h5","h6","ul","ol","li","strong","em","a","img","br","form","button","input","label"],ALLOWED_ATTR:["href","src","alt","title","class","id","type","name","value","placeholder","data-click","data-change","data-submit","data-select","data-hover","data-classlist"],FORBID_TAGS:["script","iframe","object","embed","body","html","svg","math","link","meta"],ALLOW_DATA_ATTR:!0,KEEP_CONTENT:!1,RETURN_DOM_FRAGMENT:!0}),i=Array.from(o.childNodes).map(a=>a.outerHTML||a.textContent||"").join("");if(P!==null&&i!==P){let a=document.createElement("div");e(a);let c=new DOMParser().parseFromString(P,"text/html");for(;t.firstChild;)t.removeChild(t.firstChild);c.body.childNodes.forEach(l=>t.appendChild(l.cloneNode(!0)))}else{for(P=i;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(o),e(t)}};import W from"dompurify";typeof window<"u"&&!window.__anchorSinglePopstateHandlerAttached&&(window.addEventListener("popstate",n=>{let e=n.state;e?.scrollPosition!==void 0&&window.scrollTo(0,e.scrollPosition)}),window.__anchorSinglePopstateHandlerAttached=!0);var G=(n,e,t,r="",o=null)=>{if(!n)return;let i=W.sanitize(e,{ALLOWED_URI_REGEXP:/^(https?:|\/)/}),a=W.sanitize(t,{USE_PROFILES:{html:!1}});n.setAttribute("href",i),n.setAttribute("aria-label",a),r&&(n.className=r.trim()),o&&n.replaceChildren(o),typeof window<"u"&&n.addEventListener("click",s=>{s.preventDefault();let l=s.currentTarget.getAttribute("href");if(l){let d=window.scrollY;window.scrollTo(0,0),window.history.pushState({scrollPosition:d},"",l),dispatchEvent(new PopStateEvent("popstate"))}})};import L from"dompurify";var V=(n="'self' 'nonce-rAnd0m123' 'unsafe-inline' 'unsafe-eval'",e="'self' 'nonce-rAnd0m123'",t="'none'",r="'self' https://fonts.googleapis.com https://fonts.gstatic.com",o="'self' https://blogger.googleusercontent.com",i=["'self'","https://fonts.googleapis.com","https://fonts.gstatic.com","https://www.google.com/maps/"],a="'self' https://www.youtube.com",s="'self'",c="/csp-report",l=!1)=>{let d=()=>{try{let m=document.querySelector('meta[http-equiv="Content-Security-Policy"]');m||(m=document.createElement("meta"),m.setAttribute("http-equiv","Content-Security-Policy"),document.head.appendChild(m));let y=l?`report-uri ${c};`:"";m.setAttribute("content",`default-src 'self'; script-src ${n}; style-src ${e}; object-src ${t}; font-src ${r}; img-src ${o}; connect-src ${i.join(" ")}; frame-src ${a}; base-uri ${s}; ${y}`)}catch(m){console.error("Error adding CSP meta element:",m)}};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",d):d()};var Q=(n,e)=>{let t={name:L.sanitize(n.name||""),title:L.sanitize(n.title||""),description:L.sanitize(n.description||"Default description"),author:L.sanitize(n.author||""),favicon:n.favicon},r=u=>{t.name=L.sanitize(u),E("name",t.name)},o=u=>{t.title=L.sanitize(u),document.title=t.title},i=u=>{t.description=L.sanitize(u),E("description",t.description)},a=u=>{t.author=L.sanitize(u),E("author",t.author)},s=u=>{t.favicon=L.sanitize(u);let p=document.querySelector('link[rel="icon"]');p||(p=document.createElement("link"),p.rel="icon",document.head.appendChild(p)),p.href=t.favicon},c=()=>t.name,l=()=>t.title,d=()=>t.description,m=()=>t.author,y=()=>t.favicon,f=()=>t,v=(u,p)=>{let h=document.createElement("meta");h.setAttribute("name",u),h.setAttribute("content",p),document.head.appendChild(h)},E=(u,p)=>{let h=document.querySelector(`meta[name="${u}"]`);h?h.setAttribute("content",p):v(u,p)},g=()=>{t.title&&(document.title=t.title),t.name&&E("name",t.name),t.description&&E("description",t.description),t.author&&E("author",t.author),t.favicon&&s(t.favicon)};return e&&V(e.scriptSrc,e.styleSrc,e.objectSrc,Array.isArray(e.connectSrc)?e.connectSrc.join(" "):e.connectSrc,e.reportOnly!==void 0?String(e.reportOnly):void 0),g(),{setName:r,setTitle:o,setDescription:i,setAuthor:a,setFavicon:s,getName:c,getTitle:l,getDescription:d,getAuthor:m,getFavicon:y,getAllMetaData:f,appendMetaTagsToHead:g}};import ge from"dompurify";var x=(n,e,t,r,o)=>{let i=`#${n}`,a=e.querySelectorAll(i);if(a.length===0)throw new Error(`[useTSComponent] No element found with id '${n}' in the given parent.`);if(a.length>1)throw new Error(`[useTSComponent] Duplicate id '${n}' detected. Found ${a.length} elements.`);let s=a[0];s.innerHTML=ge.sanitize(s.innerHTML,{USE_PROFILES:{html:!0}}),t(s,r,o)};var K=(n,e,t,r=[])=>{let o=new Set;n.forEach((i,a)=>{if(o.has(i)){console.warn(`[useTSCollection] Duplicate ID in collection array: "${i}" \u2014 skipping.`);return}o.add(i);let s=e.querySelectorAll(`#${i}`);if(s.length>1){console.warn(`[useTSCollection] Duplicate ID in DOM: "${i}" (${s.length} elements found) \u2014 skipping component mount.`);return}let c=t[a],l=Array.isArray(r)?r[a]:void 0;typeof c=="function"?x(i,e,c,l):console.warn(`[useTSCollection] No valid component function found for ID: "${i}"`)})};var R=(n,e)=>{let r=(e??document).querySelectorAll(n);if(r.length===0)return process.env.NODE_ENV!=="production"&&console.warn(`[useTSSelect] No element found for selector: '${n}'`),null;if(n.startsWith("#")&&r.length>1){if(process.env.NODE_ENV!=="production")throw new Error(`[useTSSelect] Duplicate ID detected: '${n}'. Found ${r.length} elements with this ID.`);return r[0]}return r.length>1&&process.env.NODE_ENV!=="production"&&console.warn(`[useTSSelect] Multiple elements found for selector: '${n}'. Returning the first one.`),r[0]};import{jwtDecode as Te}from"jwt-decode";var Z=(n,e)=>{let t=localStorage.getItem("token");if(!t)return window.location.href=e,null;try{let r=Te(t),o=Date.now()/1e3;return r.exp&&r.exp<o&&(console.error("Token has expired"),window.localStorage.removeItem("token"),window.location.href=e),null}catch(r){return console.error("Invalid token:",r),window.location.href=e,null}};var C=(n,e,t)=>{n.forEach(r=>{e.forEach(o=>{r.addEventListener(o,i=>{t(r,i)})})})};var X=()=>({back:()=>window.history.back(),forward:()=>window.history.forward()});var Y=(n,e)=>{let t=document.querySelector(`#${n}`)||document.querySelector(`.${n}`);if(!t)return;let r=window.location.pathname.replace(/\/$/,"");for(let o of e){let i=o.path.replace(/\/$/,"");if(r===i||r.startsWith(`${i}/`)){o.component(t);break}}};function J(n,e){let t=window.location.pathname.replace(/\/$/,"");e.routes.forEach(r=>{r.children?.length&&r.children.forEach(o=>{let i=o.path.replace(/\/$/,"");if(t===i||t.startsWith(`${i}/`)){let a=n.querySelector(`#${o.outlet}`)||n.querySelector(`.${o.outlet}`);a instanceof HTMLElement&&o.element&&o.element(a)}})})}import{createStore as ye}from"zustand/vanilla";function ee(n){let e=ye(()=>({value:n})),t=new Set;return{get:()=>e.getState().value,set:r=>{e.setState({value:r}),t.forEach(o=>o(r))},subscribe:r=>(t.add(r),r(e.getState().value),()=>t.delete(r))}}function te(n){let e=n();typeof e=="function"&&e()}var ne=async()=>{let n="https://cdn.jsdelivr.net/npm/brython@3/brython.min.js",e="https://cdn.jsdelivr.net/npm/brython@3/brython_stdlib.js",t=r=>new Promise((o,i)=>{let a=document.createElement("script");a.src=r,a.onload=()=>o(),a.onerror=()=>i(new Error(`Failed to load ${r}`)),document.head.appendChild(a)});await t(n),await t(e),typeof window.brython=="function"?window.brython():console.error("Brython did not load correctly.")},re=n=>new Promise((e,t)=>{let r=document.createElement("script");r.type="text/python",r.src=`/src/python/${n}`,r.onload=()=>e(),r.onerror=()=>t(new Error(`Failed to load ${n}`)),document.body.appendChild(r)});function oe(n){let e=null;return async(t,r)=>{try{if(!e){let o=await n();e=o.default||o}if(typeof e=="function")return e(t,r);if(e instanceof HTMLElement){let o=e.cloneNode(!0);return t?.appendChild(o),o}if(typeof e=="object"&&e!==null&&"render"in e&&typeof e.render=="function")return e.render(t,r);console.warn("useTSLazy: Unsupported module type",e)}catch(o){console.error("useTSLazy failed:",o)}}}var se=n=>typeof window>"u"?{isDOM:null}:{isDOM:n||document.body};import{debounce as Se}from"lodash-es";var D=n=>n;typeof window<"u"&&typeof document<"u"&&(D=n=>{let e=document.createElement("div");return e.innerText=n,e.innerHTML});var Ee=n=>{(n?Array.isArray(n)?n:n instanceof HTMLAnchorElement?[n]:Array.from(n):Array.from(document.querySelectorAll("a"))).forEach(t=>{if(!t||t.dataset.anchorEnhanced==="true")return;t.dataset.anchorEnhanced="true";let r=t.getAttribute("class")||"";t.setAttribute("class",D(r));let o=t.getAttribute("aria-label");o&&t.setAttribute("aria-label",D(o));let i=t.querySelector(":scope > *");i&&(t.innerHTML="",t.appendChild(i));let a=t.getAttribute("href")||"";if(!a.startsWith("#")){try{if(new URL(a,window.location.href).origin!==window.location.origin)return}catch{return}t.addEventListener("click",s=>{s.preventDefault();let c=t.getAttribute("href")||"";try{let l=new URL(c,window.location.href);window.history.pushState({},"",l.pathname+l.search+l.hash),window.dispatchEvent(new PopStateEvent("popstate"))}catch(l){console.error("Invalid URL in anchor:",c,l)}})}})},ve=Se(Ee,50),ie=n=>{ve(n)};var ae=n=>{if(!n)return;let e=R("a",n);ie(e)};import le from"dompurify";import{createStore as we}from"zustand/vanilla";import Le from"dompurify";var M=we(n=>({params:{},query:{},setParams:e=>n(()=>({params:ce(e)})),setQuery:e=>n(()=>({query:ce(e)}))}));function ce(n){let e={};for(let t in n)e[t]=Le.sanitize(n[t]);return e}var O=class{constructor(e,t){this.routes=[];this.routes=e,this.expectedParams=new Set(t),window.addEventListener("popstate",this.handlePopState.bind(this)),this.handlePopState()}handlePopState(){let e=window.location.pathname,t=window.location.search,r=this.parseQueryParams(t),o=this.findMatchingRoute(e,this.routes);if(o){if(o.routeto){this.navigate(o.routeto);return}let i=this.filterAndSanitizeParams(o.params);M.getState().setParams(i),M.getState().setQuery(r);let a=document.createElement("div");if(o.element?.(a,i,r),o.children){let s=e.slice(o.path.length),c=a.querySelector("#child");c&&this.renderChildren(o.children,s,c,i,r)}}else{let i=this.findMatchingRoute("*",this.routes);if(i){let a=this.filterAndSanitizeParams(i.params);M.getState().setParams(a),M.getState().setQuery(r);let s=document.createElement("div");i.element?.(s,a,r)}}}renderChildren(e,t,r,o,i){if(!e||e.length===0){let s=r.querySelector("#child");s&&s.remove();return}let a=this.findMatchingRoute(t,e);if(a){let s=document.createElement("div");s.id="child";let c={...o,...a.params},l=this.filterAndSanitizeParams(c);if(M.getState().setParams(l),M.getState().setQuery(i),a.element?.(s,l,i),r.appendChild(s),a.children){let d=t.slice(a.path.length);this.renderChildren(a.children,d,s,l,i)}}}parseQueryParams(e){let t={},r=new URLSearchParams(e);for(let[o,i]of r.entries())this.expectedParams.has(o)&&(t[o]=le.sanitize(i));return t}findMatchingRoute(e,t,r={}){for(let o of t){let i=o.path;if(i==="*")return o;{let s=[],c=i.replace(/:[^\s/]+/g,m=>(s.push(m.substring(1)),"([^\\s/]+)")),l=new RegExp(`^${c}(?:/|$)`),d=e.match(l);if(d){let m={...r};if(s.forEach((y,f)=>{m[y]=d[f+1]??""}),o.children){let y=e.slice(d[0].length),f=this.findMatchingRoute(y,o.children,m);if(f)return f}return{...o,params:m}}}}}filterAndSanitizeParams(e){if(!e)return{};let t={};for(let r in e)this.expectedParams.has(r)&&(t[r]=le.sanitize(e[r]??""));return t}navigate(e){history.pushState(null,"",e),this.handlePopState()}addRoute(e){this.routes.push(e)}};var Me=()=>({name:"ts-filebased-router",async buildStart(){if(typeof process>"u"||!process.versions?.node)return;let n=await import("fs/promises"),e=await import("path"),t=await import("./esm-KRNKVVL7.js"),r=e.resolve("src/pages"),o=e.resolve("src/gen"),i=e.resolve("src/routes"),a=e.join(o,"tsrouter.gen.ts"),s=e.join(i,"__root.ts"),c=process.env.NODE_ENV!=="production";async function l(g){try{await n.mkdir(g,{recursive:!0})}catch{}}function d(g,u){let p="/"+e.relative(u,g).replace(/\\/g,"/");return p=p.replace(/\.ts$/,"").replace(/\/index$/,"")||"/",p.replace(/\[(.+?)\]/g,":$1")}function m(g){return g.replace(/^\//,"").split("/").map(u=>u.startsWith(":")?u.slice(1):u).filter(Boolean).join("-")||"index"}function y(g,u){let h=e.relative(u,g).replace(/\\/g,"/").split("/").filter(Boolean),S=h[h.length-1].replace(".ts",""),w=h.length>1?h[h.length-2]:"";if(S==="index")return w?w.charAt(0).toUpperCase()+w.slice(1):"Index";if(S.startsWith("[")&&S.endsWith("]")){let T=S.slice(1,-1);return w.charAt(0).toUpperCase()+T.charAt(0).toUpperCase()+T.slice(1)}return S.charAt(0).toUpperCase()+S.slice(1)}async function f(g){let u=await n.readdir(g,{withFileTypes:!0}),p=[];for(let h of u){let S=e.join(g,h.name);if(h.isDirectory())p=p.concat(await f(S));else if(h.isFile()&&h.name.endsWith(".ts")){let w=d(S,r),T=m(w),A=y(S,r);p.push({file:S,route:w,routeName:T,importName:A})}}return p}function v(){return`import { createRouter } from "@/gen/tsrouter.gen";
|
|
2
|
-
import { useTSParams } from "@devwareng/vanilla-ts";
|
|
1
|
+
function z(n,t){if(t!=null){if(t instanceof Node){n.appendChild(t);return}if(Array.isArray(t)){t.forEach(e=>z(n,e));return}n.appendChild(document.createTextNode(String(t)))}}function _(n,...t){if(typeof document>"u")return n.reduce((c,l,u)=>{let m=u<t.length?String(t[u]??""):"";return c+l+m},"");let r=document.createElement("template");r.innerHTML=n.join("<!--slot-->");let o=r.content,i=document.createTreeWalker(o,NodeFilter.SHOW_COMMENT),a=0,s;for(;s=i.nextNode();){let c=t[a++],l=s.parentNode,u=document.createDocumentFragment();z(u,c),l.replaceChild(u,s)}return o.firstElementChild}var he=n=>n.replace(/<\/?(script|iframe|object|embed|link|meta|style|form|textarea|svg|math|body)[^>]*>/gi,"").replace(/<(?!\/?(b|i|em|strong|p|br|ul|ol|li|a|div|span|h1|h2|h3|h4|h5|h6|section|article|input|button)\b)[^>]*>/gi,"").replace(/\s+on[a-z]+\s*=\s*("[^"]*"|'[^']*'|[^\s>]+)/gi,"").replace(/\s*style\s*=\s*("[^"]*"|'[^']*')/gi,"").replace(/<a\b([^>]*)href\s*=\s*(['"]?)(?!https?:|#)[^'"\s>]+(['"]?)([^>]*)>/gi,"<a$1$4>").replace(/\s+(href|src)\s*=\s*(['"]?)\s*(javascript:|data:)[^'"\s>]*/gi,"").replace(/<a\b([^>]*)\bhref\s*=\s*(['"])(\/blog|#blog)\2([^>]*)>/gi,'<a$1 href=$2$3$2 href-line="true"$4>').trim(),ge=n=>n?.map(t=>he(t)).join("")??"";import I from"dompurify";var q=(n,t)=>{let r={...{ADD_TAGS:["my-custom-tag"]},...t};return typeof n=="string"?I.sanitize(n,r):I.sanitize(n.innerHTML,r)};var U=(n,t,e)=>{if(typeof n=="string"){let r=document.getElementById(n);r?r.addEventListener(t,e):console.warn(`Element with id '${n}' not found.`)}else n instanceof HTMLElement?n.addEventListener(t,e):n===document?document.addEventListener(t,e):console.warn("Invalid target parameter provided.")};import{createStore as Te}from"zustand/vanilla";import j from"dompurify";function Se(n,t){let e=[],r=n.replace(/:[^/]+/g,s=>(e.push(s.slice(1)),"([^/]+)")),o=new RegExp(`^${r}$`),i=t.match(o),a={};return i&&e.forEach((s,c)=>{a[s]=j.sanitize(i[c+1]??"")}),a}function Ee(n){let t={},e=new URLSearchParams(n);for(let[r,o]of e.entries())t[r]=j.sanitize(o);return t}var x=Te((n,t)=>({params:{},query:{},setFromPattern:e=>{let r=window.location.pathname,o=Se(e,r),i=Ee(window.location.search);n({params:o,query:i})},getParam:e=>t().params[e],getQuery:e=>t().query[e]}));function W(n){let t=x.getState();t.setFromPattern(n);let e=t.params,r=t.query;return{...e,...r}}var B=(n,t,e)=>{let r=document.querySelectorAll(n);return r.forEach(o=>{o.addEventListener(t,e)}),()=>{r.forEach(o=>{o.removeEventListener(t,e)})}};import G from"dompurify";var V=(n,t,e={},r)=>{let o={USE_PROFILES:{svg:!0,html:!0},ALLOWED_TAGS:["svg","path","circle","rect","line","polyline","polygon","g","main","div","h1","h2","h3","h4","h5","h6","p","button","span","a","img","input","ul","li","i","label","form"],ALLOWED_ATTR:["class","id","href","src","alt","title","fill","stroke","stroke-width","viewBox","xmlns","d","x","y","cx","cy","r","width","height","type","name","value","placeholder","data-click","data-change","data-select","data-classlist","data-hover","data-submit","data-key","data-event"],FORBID_TAGS:["script","iframe","foreignObject","body","html"],FORBID_ATTR:["style","xlink:href"],ALLOWED_URI_REGEXP:/^(?:(?:https?|mailto|tel|ftp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i,...r};G.addHook("uponSanitizeAttribute",(s,c)=>{let l=(c.attrName||"").toLowerCase(),u=(c.attrValue??"").toString().trim();if(l.startsWith("on")){c.keepAttr=!1;return}if(/^data-(click|change|submit|select|hover|classlist|key|event)$/.test(l)){c.keepAttr=!0;return}if(s.nodeName.toLowerCase()==="img"&&l==="src"){/^https?:\/\//i.test(u)||/^\/(?!\/)/.test(u)||/^data:image\/(png|jpeg|jpg|gif|webp);base64,/i.test(u)||(c.keepAttr=!1);return}if(l==="class"){let S=u.split(/\s+/).filter(Boolean).filter(g=>{if(/^[a-zA-Z0-9\-\:\/_\[\]\(\)]*$/.test(g)){if(/^bg-\[url\(.*\)\]$/.test(g)){let v=g.replace(/^bg-\[url\(/,"").replace(/\)\]$/,"").replace(/^['"]|['"]$/g,"");return v===""||/^https?:\/\//i.test(v)||/^\/(?!\/)/.test(v)||/^\.{0,2}\//.test(v)}return/^bg-\[\]$/.test(g),!0}return!1});c.attrValue=S.join(" ");return}});let i=G.sanitize(t,{...o,RETURN_DOM_FRAGMENT:!0});for(;n.firstChild;)n.removeChild(n.firstChild);n.appendChild(i);let a=(s,c)=>{n.querySelectorAll(`[${s}]`).forEach(l=>{let u=l.getAttribute(s);u&&Object.prototype.hasOwnProperty.call(e,u)&&l.addEventListener(c,m=>{c==="submit"&&m.preventDefault(),e[u](m)})})};a("data-click","click"),a("data-change","change"),a("data-select","select"),a("data-submit","submit"),n.querySelectorAll("[data-key]").forEach(s=>{let c=s.dataset.key,l=s.dataset.event??"click";c&&Object.prototype.hasOwnProperty.call(e,c)&&s.addEventListener(l,e[c])}),n.querySelectorAll("[data-hover]").forEach(s=>{let c=s.dataset.hover;c&&Object.prototype.hasOwnProperty.call(e,c)&&(s.addEventListener("mouseenter",e[c]),s.addEventListener("mouseleave",e[c]))}),n.querySelectorAll("[data-classlist]").forEach(s=>{let c=s.dataset.classlist;/^[a-zA-Z0-9\-\s:_]+$/.test(c)&&s.classList.add(...c.split(/\s+/))})};import Q from"dompurify";var C=null,K=(n,t)=>{if(typeof document>"u")return;let e=document.getElementById(n);if(!e)return;Q.addHook("uponSanitizeAttribute",(a,s)=>{let c=(s.attrName||"").toLowerCase(),l=(s.attrValue??"").toString().trim();if(c.startsWith("on")){s.keepAttr=!1;return}if((c==="href"||c==="src")&&/^(javascript:|vbscript:|data:|file:|about:)/i.test(l)){s.keepAttr=!1;return}if(c==="class"){let m=l.split(/\s+/).filter(Boolean).filter(S=>{if(/^[a-zA-Z0-9\-\:\/_\[\]\(\)]+$/.test(S)){if(/^bg-\[url\(.*\)\]$/.test(S)){let g=S.replace(/^bg-\[url\(/,"").replace(/\)\]$/,"").replace(/^['"]|['"]$/g,"");return g===""||/^https?:\/\//i.test(g)||/^\/(?!\/)/.test(g)||/^\.{0,2}\//.test(g)}return!0}return!1});s.attrValue=m.join(" ");return}if(c==="style"){s.keepAttr=!1;return}});let r=e.cloneNode(!0),o=Q.sanitize(r.innerHTML,{USE_PROFILES:{html:!0},ALLOWED_TAGS:["div","span","p","h1","h2","h3","h4","h5","h6","ul","ol","li","strong","em","a","img","br","form","button","input","label"],ALLOWED_ATTR:["href","src","alt","title","class","id","type","name","value","placeholder","data-click","data-change","data-submit","data-select","data-hover","data-classlist"],FORBID_TAGS:["script","iframe","object","embed","body","html","svg","math","link","meta"],ALLOW_DATA_ATTR:!0,KEEP_CONTENT:!1,RETURN_DOM_FRAGMENT:!0}),i=Array.from(o.childNodes).map(a=>a.outerHTML||a.textContent||"").join("");if(C!==null&&i!==C){let a=document.createElement("div");t(a);let c=new DOMParser().parseFromString(C,"text/html");for(;e.firstChild;)e.removeChild(e.firstChild);c.body.childNodes.forEach(l=>e.appendChild(l.cloneNode(!0)))}else{for(C=i;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(o),t(e)}};import Z from"dompurify";typeof window<"u"&&!window.__anchorSinglePopstateHandlerAttached&&(window.addEventListener("popstate",n=>{let t=n.state;t?.scrollPosition!==void 0&&window.scrollTo(0,t.scrollPosition)}),window.__anchorSinglePopstateHandlerAttached=!0);var J=(n,t,e,r="",o=null)=>{if(!n)return;let i=Z.sanitize(t,{ALLOWED_URI_REGEXP:/^(https?:|\/)/}),a=Z.sanitize(e,{USE_PROFILES:{html:!1}});n.setAttribute("href",i),n.setAttribute("aria-label",a),r&&(n.className=r.trim()),o&&n.replaceChildren(o),typeof window<"u"&&n.addEventListener("click",s=>{s.preventDefault();let l=s.currentTarget.getAttribute("href");if(l){let u=window.scrollY;window.scrollTo(0,0),window.history.pushState({scrollPosition:u},"",l),dispatchEvent(new PopStateEvent("popstate"))}})};import L from"dompurify";var X=(n="'self' 'nonce-rAnd0m123' 'unsafe-inline' 'unsafe-eval'",t="'self' 'nonce-rAnd0m123'",e="'none'",r="'self' https://fonts.googleapis.com https://fonts.gstatic.com",o="'self' https://blogger.googleusercontent.com",i=["'self'","https://fonts.googleapis.com","https://fonts.gstatic.com","https://www.google.com/maps/"],a="'self' https://www.youtube.com",s="'self'",c="/csp-report",l=!1)=>{let u=()=>{try{let m=document.querySelector('meta[http-equiv="Content-Security-Policy"]');m||(m=document.createElement("meta"),m.setAttribute("http-equiv","Content-Security-Policy"),document.head.appendChild(m));let S=l?`report-uri ${c};`:"";m.setAttribute("content",`default-src 'self'; script-src ${n}; style-src ${t}; object-src ${e}; font-src ${r}; img-src ${o}; connect-src ${i.join(" ")}; frame-src ${a}; base-uri ${s}; ${S}`)}catch(m){console.error("Error adding CSP meta element:",m)}};document.readyState==="loading"?document.addEventListener("DOMContentLoaded",u):u()};var Y=(n,t)=>{let e={name:L.sanitize(n.name||""),title:L.sanitize(n.title||""),description:L.sanitize(n.description||"Default description"),author:L.sanitize(n.author||""),favicon:n.favicon},r=d=>{e.name=L.sanitize(d),p("name",e.name)},o=d=>{e.title=L.sanitize(d),document.title=e.title},i=d=>{e.description=L.sanitize(d),p("description",e.description)},a=d=>{e.author=L.sanitize(d),p("author",e.author)},s=d=>{e.favicon=L.sanitize(d);let f=document.querySelector('link[rel="icon"]');f||(f=document.createElement("link"),f.rel="icon",document.head.appendChild(f)),f.href=e.favicon},c=()=>e.name,l=()=>e.title,u=()=>e.description,m=()=>e.author,S=()=>e.favicon,g=()=>e,v=(d,f)=>{let h=document.createElement("meta");h.setAttribute("name",d),h.setAttribute("content",f),document.head.appendChild(h)},p=(d,f)=>{let h=document.querySelector(`meta[name="${d}"]`);h?h.setAttribute("content",f):v(d,f)},T=()=>{e.title&&(document.title=e.title),e.name&&p("name",e.name),e.description&&p("description",e.description),e.author&&p("author",e.author),e.favicon&&s(e.favicon)};return t&&X(t.scriptSrc,t.styleSrc,t.objectSrc,Array.isArray(t.connectSrc)?t.connectSrc.join(" "):t.connectSrc,t.reportOnly!==void 0?String(t.reportOnly):void 0),T(),{setName:r,setTitle:o,setDescription:i,setAuthor:a,setFavicon:s,getName:c,getTitle:l,getDescription:u,getAuthor:m,getFavicon:S,getAllMetaData:g,appendMetaTagsToHead:T}};import ye from"dompurify";var D=(n,t,e,r,o)=>{let i=`#${n}`,a=t.querySelectorAll(i);if(a.length===0)throw new Error(`[useTSComponent] No element found with id '${n}' in the given parent.`);if(a.length>1)throw new Error(`[useTSComponent] Duplicate id '${n}' detected. Found ${a.length} elements.`);let s=a[0];s.innerHTML=ye.sanitize(s.innerHTML,{USE_PROFILES:{html:!0}}),e(s,r,o)};var ee=(n,t,e,r=[])=>{let o=new Set;n.forEach((i,a)=>{if(o.has(i)){console.warn(`[useTSCollection] Duplicate ID in collection array: "${i}" \u2014 skipping.`);return}o.add(i);let s=t.querySelectorAll(`#${i}`);if(s.length>1){console.warn(`[useTSCollection] Duplicate ID in DOM: "${i}" (${s.length} elements found) \u2014 skipping component mount.`);return}let c=e[a],l=Array.isArray(r)?r[a]:void 0;typeof c=="function"?D(i,t,c,l):console.warn(`[useTSCollection] No valid component function found for ID: "${i}"`)})};var A=(n,t)=>{let r=(t??document).querySelectorAll(n);if(r.length===0)return process.env.NODE_ENV!=="production"&&console.warn(`[useTSSelect] No element found for selector: '${n}'`),null;if(n.startsWith("#")&&r.length>1){if(process.env.NODE_ENV!=="production")throw new Error(`[useTSSelect] Duplicate ID detected: '${n}'. Found ${r.length} elements with this ID.`);return r[0]}return r.length>1&&process.env.NODE_ENV!=="production"&&console.warn(`[useTSSelect] Multiple elements found for selector: '${n}'. Returning the first one.`),r[0]};import{jwtDecode as ve}from"jwt-decode";var te=(n,t)=>{let e=localStorage.getItem("token");if(!e)return window.location.href=t,null;try{let r=ve(e),o=Date.now()/1e3;return r.exp&&r.exp<o&&(console.error("Token has expired"),window.localStorage.removeItem("token"),window.location.href=t),null}catch(r){return console.error("Invalid token:",r),window.location.href=t,null}};var $=(n,t,e)=>{n.forEach(r=>{t.forEach(o=>{r.addEventListener(o,i=>{e(r,i)})})})};var ne=()=>({back:()=>window.history.back(),forward:()=>window.history.forward()});var re=(n,t)=>{let e=document.querySelector(`#${n}`)||document.querySelector(`.${n}`);if(!e)return;let r=window.location.pathname.replace(/\/$/,"");for(let o of t){let i=o.path.replace(/\/$/,"");if(r===i||r.startsWith(`${i}/`)){o.component(e);break}}};function oe(n,t){let e=window.location.pathname.replace(/\/$/,"");t.routes.forEach(r=>{r.children?.length&&r.children.forEach(o=>{let i=o.path.replace(/\/$/,"");if(e===i||e.startsWith(`${i}/`)){let a=n.querySelector(`#${o.outlet}`)||n.querySelector(`.${o.outlet}`);a instanceof HTMLElement&&o.element&&o.element(a)}})})}import{createStore as we}from"zustand/vanilla";function se(n){let t=we(()=>({value:n})),e=new Set;return{get:()=>t.getState().value,set:r=>{t.setState({value:r}),e.forEach(o=>o(r))},subscribe:r=>(e.add(r),r(t.getState().value),()=>e.delete(r))}}function ie(n){let t=n();typeof t=="function"&&t()}var ae=async()=>{let n="https://cdn.jsdelivr.net/npm/brython@3/brython.min.js",t="https://cdn.jsdelivr.net/npm/brython@3/brython_stdlib.js",e=r=>new Promise((o,i)=>{let a=document.createElement("script");a.src=r,a.onload=()=>o(),a.onerror=()=>i(new Error(`Failed to load ${r}`)),document.head.appendChild(a)});await e(n),await e(t),typeof window.brython=="function"?window.brython():console.error("Brython did not load correctly.")},ce=n=>new Promise((t,e)=>{let r=document.createElement("script");r.type="text/python",r.src=`/src/python/${n}`,r.onload=()=>t(),r.onerror=()=>e(new Error(`Failed to load ${n}`)),document.body.appendChild(r)});function le(n){let t=null;return async(e,r)=>{try{if(!t){let o=await n();t=o.default||o}if(typeof t=="function")return t(e,r);if(t instanceof HTMLElement){let o=t.cloneNode(!0);return e?.appendChild(o),o}if(typeof t=="object"&&t!==null&&"render"in t&&typeof t.render=="function")return t.render(e,r);console.warn("useTSLazy: Unsupported module type",t)}catch(o){console.error("useTSLazy failed:",o)}}}var ue=n=>typeof window>"u"?{isDOM:null}:{isDOM:n||document.body};import{debounce as Le}from"lodash-es";var N=n=>n;typeof window<"u"&&typeof document<"u"&&(N=n=>{let t=document.createElement("div");return t.innerText=n,t.innerHTML});var Me=n=>{(n?Array.isArray(n)?n:n instanceof HTMLAnchorElement?[n]:Array.from(n):Array.from(document.querySelectorAll("a"))).forEach(e=>{if(!e||e.dataset.anchorEnhanced==="true")return;e.dataset.anchorEnhanced="true";let r=e.getAttribute("class")||"";e.setAttribute("class",N(r));let o=e.getAttribute("aria-label");o&&e.setAttribute("aria-label",N(o));let i=e.querySelector(":scope > *");i&&(e.innerHTML="",e.appendChild(i));let a=e.getAttribute("href")||"";if(!a.startsWith("#")){try{if(new URL(a,window.location.href).origin!==window.location.origin)return}catch{return}e.addEventListener("click",s=>{s.preventDefault();let c=e.getAttribute("href")||"";try{let l=new URL(c,window.location.href);window.history.pushState({},"",l.pathname+l.search+l.hash),window.dispatchEvent(new PopStateEvent("popstate"))}catch(l){console.error("Invalid URL in anchor:",c,l)}})}})},Re=Le(Me,50),O=n=>{Re(n)};var de=n=>{if(!n)return;let t=A("a",n);O(t)};import pe from"dompurify";import{createStore as Ae}from"zustand/vanilla";import Pe from"dompurify";var M=Ae(n=>({params:{},query:{},setParams:t=>n(()=>({params:me(t)})),setQuery:t=>n(()=>({query:me(t)}))}));function me(n){let t={};for(let e in n)t[e]=Pe.sanitize(n[e]);return t}var k=class{constructor(t,e){this.routes=[];this.routes=t,this.expectedParams=new Set(e),window.addEventListener("popstate",this.handlePopState.bind(this)),this.handlePopState()}handlePopState(){let t=window.location.pathname,e=window.location.search,r=this.parseQueryParams(e),o=this.findMatchingRoute(t,this.routes);if(o){if(o.routeto){this.navigate(o.routeto);return}let i=this.filterAndSanitizeParams(o.params);M.getState().setParams(i),M.getState().setQuery(r);let a=document.createElement("div");if(o.element?.(a,i,r),o.children){let s=t.slice(o.path.length),c=a.querySelector("#child");c&&this.renderChildren(o.children,s,c,i,r)}}else{let i=this.findMatchingRoute("*",this.routes);if(i){let a=this.filterAndSanitizeParams(i.params);M.getState().setParams(a),M.getState().setQuery(r);let s=document.createElement("div");i.element?.(s,a,r)}}}renderChildren(t,e,r,o,i){if(!t||t.length===0){let s=r.querySelector("#child");s&&s.remove();return}let a=this.findMatchingRoute(e,t);if(a){let s=document.createElement("div");s.id="child";let c={...o,...a.params},l=this.filterAndSanitizeParams(c);if(M.getState().setParams(l),M.getState().setQuery(i),a.element?.(s,l,i),r.appendChild(s),a.children){let u=e.slice(a.path.length);this.renderChildren(a.children,u,s,l,i)}}}parseQueryParams(t){let e={},r=new URLSearchParams(t);for(let[o,i]of r.entries())this.expectedParams.has(o)&&(e[o]=pe.sanitize(i));return e}findMatchingRoute(t,e,r={}){for(let o of e){let i=o.path;if(i==="*")return o;{let s=[],c=i.replace(/:[^\s/]+/g,m=>(s.push(m.substring(1)),"([^\\s/]+)")),l=new RegExp(`^${c}(?:/|$)`),u=t.match(l);if(u){let m={...r};if(s.forEach((S,g)=>{m[S]=u[g+1]??""}),o.children){let S=t.slice(u[0].length),g=this.findMatchingRoute(S,o.children,m);if(g)return g}return{...o,params:m}}}}}filterAndSanitizeParams(t){if(!t)return{};let e={};for(let r in t)this.expectedParams.has(r)&&(e[r]=pe.sanitize(t[r]??""));return e}navigate(t){history.pushState(null,"",t),this.handlePopState()}addRoute(t){this.routes.push(t)}};import y from"path";var be=()=>({name:"ts-filebased-router",async buildStart(){if(typeof process>"u"||!process.versions?.node)return;let n=await import("fs/promises"),t=await import("./esm-KRNKVVL7.js"),e=y.resolve("src/pages"),r=y.resolve("src/gen"),o=y.resolve("src/routes"),i=y.join(r,"tsrouter.gen.ts"),a=y.join(o,"__root.ts"),s=process.env.NODE_ENV!=="production";async function c(p){try{await n.mkdir(p,{recursive:!0})}catch{}}function l(p,T){let d="/"+y.relative(T,p).replace(/\\/g,"/");return d=d.replace(/\.ts$/,"").replace(/\/index$/,"")||"/",d.replace(/\[(.+?)\]/g,":$1")}function u(p){return p.replace(/^\//,"").split("/").map(T=>T.startsWith(":")?T.slice(1):T).filter(Boolean).join("-")||"index"}function m(p,T){let f=y.relative(T,p).replace(/\\/g,"/").split("/").filter(Boolean),h=f[f.length-1].replace(".ts",""),w=f.length>1?f[f.length-2]:"";if(h==="index")return w?w.charAt(0).toUpperCase()+w.slice(1):"Index";if(h.startsWith("[")&&h.endsWith("]")){let R=h.slice(1,-1);return w.charAt(0).toUpperCase()+R.charAt(0).toUpperCase()+R.slice(1)}return h.charAt(0).toUpperCase()+h.slice(1)}async function S(p){let T=await n.readdir(p,{withFileTypes:!0}),d=[];for(let f of T){let h=y.join(p,f.name);if(f.isDirectory())d=d.concat(await S(h));else if(f.isFile()&&f.name.endsWith(".ts")){let w=l(h,e),R=u(w),H=m(h,e);d.push({file:h,route:w,routeName:R,importName:H})}}return d}function g(){return`import { createRouter } from "@/gen/tsrouter.gen";
|
|
3
2
|
|
|
4
3
|
export const Router = async (DOM: HTMLElement) => {
|
|
5
|
-
|
|
6
|
-
const router = createRouter(DOM);
|
|
7
|
-
(await router).navigate(window.location.pathname);
|
|
4
|
+
const router = await createRouter(DOM);
|
|
8
5
|
|
|
9
|
-
window.
|
|
10
|
-
|
|
6
|
+
await router.navigate(window.location.pathname + window.location.search);
|
|
7
|
+
|
|
8
|
+
window.addEventListener("popstate", () => {
|
|
9
|
+
void router.navigate(window.location.pathname + window.location.search, false);
|
|
10
|
+
});
|
|
11
|
+
};`}async function v(){let p=await S(e),T=p.find(E=>E.route==="/notfound"),d=p.filter(E=>E.route!=="/notfound");for(let E of p)if(!(await n.readFile(E.file,"utf-8")).trim()){let P=E.importName,b=E.route.includes(":"),fe=["html","useTSElements","useTSMetaData",...b?["useTSExtractParams"]:[]].join(", ");await n.writeFile(E.file,`import { ${fe} } from "@devwareng/vanilla-ts";
|
|
12
|
+
|
|
13
|
+
export default function ${P}(DOM: HTMLElement) {
|
|
14
|
+
useTSMetaData({
|
|
15
|
+
title: "${P}",
|
|
16
|
+
description: "${P}",
|
|
17
|
+
author: "Your name here",
|
|
18
|
+
favicon: "/favicon.ico",
|
|
11
19
|
});
|
|
12
|
-
};`}async function E(){let g=await f(r),u=g.find(T=>T.route==="/notfound"),p=g.filter(T=>T.route!=="/notfound");for(let T of g)if(!(await n.readFile(T.file,"utf-8")).trim()){let H=T.importName;await n.writeFile(T.file,`import { html, useTSElements } from "@devwareng/vanilla-ts";
|
|
13
20
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
${b?`const params = useTSExtractParams("${E.route}");`:""}
|
|
22
|
+
|
|
23
|
+
${b?"if (Object.values(params).some(v => !v)) return;":""}
|
|
24
|
+
|
|
25
|
+
const ui = useTSElements(
|
|
26
|
+
DOM,
|
|
27
|
+
html\`
|
|
28
|
+
<div>
|
|
29
|
+
<h1>${P}</h1>
|
|
30
|
+
${b?"<pre>${JSON.stringify(params, null, 2)}</pre>":""}
|
|
31
|
+
</div>
|
|
32
|
+
\`
|
|
33
|
+
);
|
|
34
|
+
|
|
35
|
+
return ui;
|
|
36
|
+
}`,"utf-8")}let h=["useTSLazy",...!T?["html","useTSElements"]:[]].join(", "),w=d.map(E=>{let F="../pages/"+y.relative(e,E.file).replace(/\\/g,"/").replace(/\.ts$/,"");return`{ path: "${E.route}", name: "${E.routeName}", component: useTSLazy(() => import("${F}")) }`}).join(`,
|
|
37
|
+
`),R=T?`export const NotFound = useTSLazy(() => import("../pages/${y.relative(e,T.file).replace(/\\/g,"/").replace(/\.ts$/,"")}"))`:`export function NotFound(DOM: HTMLElement) {
|
|
38
|
+
return useTSElements(
|
|
39
|
+
DOM,
|
|
40
|
+
html\`<div><h1>404 - Page Not Found</h1></div>\`
|
|
41
|
+
);
|
|
42
|
+
}`,H=`// AUTO-GENERATED FILE
|
|
43
|
+
import { ${h} } from "@devwareng/vanilla-ts";
|
|
23
44
|
|
|
24
|
-
|
|
45
|
+
type Route = {
|
|
46
|
+
path: string;
|
|
47
|
+
name: string;
|
|
48
|
+
component: (DOM: HTMLElement) => Promise<any>;
|
|
49
|
+
};
|
|
25
50
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
]
|
|
51
|
+
${R}
|
|
52
|
+
|
|
53
|
+
export const routeTree: Route[] = [
|
|
54
|
+
${w}
|
|
55
|
+
];
|
|
29
56
|
|
|
30
57
|
export async function createRouter(DOM: HTMLElement) {
|
|
58
|
+
|
|
31
59
|
function matchRoute(path: string) {
|
|
32
60
|
for (const route of routeTree) {
|
|
33
|
-
const
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
return "([^/]+)"
|
|
37
|
-
}) + "$")
|
|
38
|
-
const pathname = path.split("?")[0]
|
|
39
|
-
const match = pathname?.match(regex)
|
|
40
|
-
if (match) {
|
|
41
|
-
const params: Record<string, string> = {}
|
|
42
|
-
keys.forEach((key, i) => (params[key] = match[i + 1] || ""))
|
|
43
|
-
return { ...route, params }
|
|
44
|
-
}
|
|
61
|
+
const regex = new RegExp("^" + route.path.replace(/:([^/]+)/g, "([^/]+)") + "$");
|
|
62
|
+
const pathname = path.split("?")[0];
|
|
63
|
+
if (pathname?.match(regex)) return route;
|
|
45
64
|
}
|
|
46
|
-
return null
|
|
65
|
+
return null;
|
|
47
66
|
}
|
|
48
67
|
|
|
49
|
-
async function navigate(path: string) {
|
|
50
|
-
const match = matchRoute(path)
|
|
51
|
-
if (match) { await match.component(DOM); history.pushState({}, "", path) }
|
|
52
|
-
else { NotFound(DOM) }
|
|
53
|
-
}
|
|
68
|
+
async function navigate(path: string, pushState: boolean = true) {
|
|
69
|
+
const match = matchRoute(path);
|
|
54
70
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
71
|
+
if (match) {
|
|
72
|
+
await match.component(DOM);
|
|
73
|
+
if (pushState) history.pushState({}, "", path);
|
|
74
|
+
} else {
|
|
75
|
+
NotFound(DOM);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
61
78
|
|
|
62
|
-
|
|
63
|
-
return { navigate, routes: routeTree }
|
|
79
|
+
return { navigate, routes: routeTree };
|
|
64
80
|
}
|
|
65
|
-
`;await
|
|
81
|
+
`;await c(r),await n.writeFile(i,H,"utf-8"),await n.writeFile(a,g(),"utf-8")}await c(r),await c(o),await c(e),await v(),s&&(t.watch(e).on("all",async(T,d)=>{d.endsWith(".ts")&&await v()}),t.watch(a).on("unlink",async()=>{await n.writeFile(a,g(),"utf-8")})),console.log("\u{1F7E2} TS Router Generated (Smart + Clean Mode)")}});export{be as TSFilebasedRouter,k as TSRouter,ie as createEffect,se as createSignal,_ as html,ce as loadPyFiles,ge as mapper,oe as renderChildRoutes,O as useAnchor,J as useAnchorSingle,K as useInitialDOM,te as useTSAuth,ee as useTSCollection,D as useTSComponent,$ as useTSElementEach,V as useTSElements,U as useTSEvent,B as useTSEventAll,W as useTSExtractParams,le as useTSLazy,Y as useTSMetaData,ne as useTSNavigate,de as useTSNoReload,re as useTSOutlet,x as useTSParams,q as useTSPurifier,ue as useTSSSRHydration,A as useTSSelect,ae as useTSloadBrython};
|