@dmmulroy/overseer 0.5.0 → 0.5.2

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/ui/server.js CHANGED
@@ -1,3 +1,5 @@
1
1
  // Overseer UI Server - Bundled with esbuild
2
- import{serve as ne}from"@hono/node-server";import{Hono as J}from"hono";import{serveStatic as G}from"@hono/node-server/serve-static";import{Hono as re}from"hono";import{spawn as H}from"node:child_process";function d(e){return e.startsWith("task_")&&e.length===31}function O(e){return e.startsWith("lrn_")&&e.length===30}var f=class extends Error{constructor(t,n,o){super(t);this.exitCode=n;this.stderr=o;this.name="CliError"}},R=class extends Error{constructor(r="CLI command timeout (30s)"){super(r),this.name="CliTimeoutError"}};var M=3e4,F=process.env.OVERSEER_CLI_PATH??"os",z=process.env.OVERSEER_CLI_CWD??process.cwd();async function m(e){return new Promise((r,t)=>{let n=H(F,[...e,"--json"],{cwd:z,stdio:["ignore","pipe","pipe"]}),o=setTimeout(()=>{n.kill("SIGTERM"),t(new R)},M),u="",p="";n.stdout.on("data",l=>{u+=l.toString()}),n.stderr.on("data",l=>{p+=l.toString()}),n.on("error",l=>{clearTimeout(o),t(new f(`Failed to spawn os: ${l.message}`,-1,""))}),n.on("close",l=>{if(clearTimeout(o),l!==0){let c=p.trim()||`os exited with code ${l}`;t(new f(c,l??-1,p));return}try{let c=JSON.parse(u);r(c)}catch(c){t(new f(`Invalid JSON from os: ${c instanceof Error?c.message:String(c)}`,0,u))}})})}import{Result as s,TaggedError as K}from"better-result";var a=class extends K("DecodeError")(){};function T(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function i(e){return typeof e=="string"}function D(e){return typeof e=="boolean"}function Q(e){return typeof e=="number"}function _(e){return Q(e)&&e>=1&&e<=5&&Number.isInteger(e)}function X(e){return e===0||e===1||e===2}function Y(e){if(!T(e))return s.err(new a({message:"Learning must be object"}));let{id:r,taskId:t,content:n,sourceTaskId:o,createdAt:u}=e;return!i(r)||!O(r)?s.err(new a({message:`Invalid learning id: ${r}`})):!i(t)||!d(t)?s.err(new a({message:`Invalid learning taskId: ${t}`})):i(n)?o!==null&&(!i(o)||!d(o))?s.err(new a({message:`Invalid learning sourceTaskId: ${o}`})):i(u)?s.ok({id:r,taskId:t,content:n,sourceTaskId:o,createdAt:u}):s.err(new a({message:"Learning createdAt must be string"})):s.err(new a({message:"Learning content must be string"}))}function I(e){if(!Array.isArray(e))return s.err(new a({message:"Learnings must be array"}));let r=[];for(let t=0;t<e.length;t++){let n=Y(e[t]);if(n.isErr())return s.err(new a({message:n.error.message,path:`learnings[${t}]`}));r.push(n.value)}return s.ok(r)}function y(e){if(!T(e))return s.err(new a({message:"Task must be object"}));let{id:r,parentId:t,description:n,priority:o,completed:u,completedAt:p,startedAt:l,createdAt:c,updatedAt:S,result:E,commitSha:A,depth:L,blockedBy:j,blocks:q,bookmark:h,startCommit:b,effectivelyBlocked:$}=e;if(!i(r)||!d(r))return s.err(new a({message:`Invalid task id: ${r}`}));if(t!==null&&(!i(t)||!d(t)))return s.err(new a({message:`Invalid task parentId: ${t}`}));if(!i(n))return s.err(new a({message:"Task description must be string"}));if(!_(o))return s.err(new a({message:`Invalid task priority: ${o}`}));if(!D(u))return s.err(new a({message:"Task completed must be boolean"}));if(p!==null&&!i(p))return s.err(new a({message:"Task completedAt must be string or null"}));if(l!==null&&!i(l))return s.err(new a({message:"Task startedAt must be string or null"}));if(!i(c))return s.err(new a({message:"Task createdAt must be string"}));if(!i(S))return s.err(new a({message:"Task updatedAt must be string"}));if(E!==null&&!i(E))return s.err(new a({message:"Task result must be string or null"}));if(A!==null&&!i(A))return s.err(new a({message:"Task commitSha must be string or null"}));if(!X(L))return s.err(new a({message:`Invalid task depth: ${L}`}));if(!D($))return s.err(new a({message:"Task effectivelyBlocked must be boolean"}));let x;if(j!==void 0){if(!Array.isArray(j))return s.err(new a({message:"Task blockedBy must be array"}));x=[];for(let g of j){if(!i(g)||!d(g))return s.err(new a({message:`Invalid blocker id: ${g}`}));x.push(g)}}let C;if(q!==void 0){if(!Array.isArray(q))return s.err(new a({message:"Task blocks must be array"}));C=[];for(let g of q){if(!i(g)||!d(g))return s.err(new a({message:`Invalid blocks id: ${g}`}));C.push(g)}}if(h!==void 0&&!i(h))return s.err(new a({message:"Task bookmark must be string"}));if(b!==void 0&&!i(b))return s.err(new a({message:"Task startCommit must be string"}));let w={id:r,parentId:t,description:n,priority:o,completed:u,completedAt:p,startedAt:l,createdAt:c,updatedAt:S,result:E,commitSha:A,depth:L,effectivelyBlocked:$};return x&&(w.blockedBy=x),C&&(w.blocks=C),h!==void 0&&(w.bookmark=h),b!==void 0&&(w.startCommit=b),s.ok(w)}function P(e){if(!Array.isArray(e))return s.err(new a({message:"Tasks must be array"}));let r=[];for(let t=0;t<e.length;t++){let n=y(e[t]);if(n.isErr())return s.err(new a({message:n.error.message,path:`tasks[${t}]`}));r.push(n.value)}return s.ok(r)}function Z(e){if(!T(e))return s.err(new a({message:"TaskContext must be object"}));let{own:r,parent:t,milestone:n}=e;if(!i(r))return s.err(new a({message:"TaskContext.own must be string"}));if(t!==void 0&&!i(t))return s.err(new a({message:"TaskContext.parent must be string"}));if(n!==void 0&&!i(n))return s.err(new a({message:"TaskContext.milestone must be string"}));let o={own:r};return t!==void 0&&(o.parent=t),n!==void 0&&(o.milestone=n),s.ok(o)}function ee(e){if(!T(e))return s.err(new a({message:"InheritedLearnings must be object"}));let{own:r,parent:t,milestone:n}=e,o=I(r??[]);if(o.isErr())return s.err(new a({message:o.error.message,path:"learnings.own"}));let u=I(t??[]);if(u.isErr())return s.err(new a({message:u.error.message,path:"learnings.parent"}));let p=I(n??[]);return p.isErr()?s.err(new a({message:p.error.message,path:"learnings.milestone"})):s.ok({own:o.value,parent:u.value,milestone:p.value})}function v(e){if(!T(e))return s.err(new a({message:"TaskWithContext must be object"}));let r=y(e);if(r.isErr())return r;let{context:t,learnings:n}=e,o=Z(t);if(o.isErr())return s.err(new a({message:o.error.message,path:"context"}));let u=ee(n);return u.isErr()?s.err(new a({message:u.error.message,path:"learnings"})):s.ok({...r.value,context:o.value,learnings:u.value})}function B(e){return e===null?s.ok(null):v(e)}function U(e){if(!T(e))return s.err(new a({message:"UpdateTaskRequest must be object"}));let{description:r,context:t,priority:n}=e,o={};if(r!==void 0){if(!i(r))return s.err(new a({message:"description must be string"}));o.description=r}if(t!==void 0){if(!i(t))return s.err(new a({message:"context must be string"}));o.context=t}if(n!==void 0){if(!_(n))return s.err(new a({message:`Invalid priority: ${n}`}));o.priority=n}return s.ok(o)}function W(e){if(!T(e))return s.err(new a({message:"CompleteTaskRequest must be object"}));let{result:r,learnings:t}=e,n={};if(r!==void 0){if(!i(r))return s.err(new a({message:"result must be string"}));n.result=r}if(t!==void 0){if(!Array.isArray(t))return s.err(new a({message:"learnings must be array"}));for(let o=0;o<t.length;o++)if(!i(t[o]))return s.err(new a({message:`learnings[${o}] must be string`}));n.learnings=t}return s.ok(n)}function k(e,r){if(r instanceof f){let n=r.message.toLowerCase();return n.includes("not found")||n.includes("no task")?e.json({error:r.message},404):n.includes("invalid")||n.includes("validation")||n.includes("cycle")?e.json({error:r.message},400):n.includes("not a repository")||n.includes("dirty working copy")?e.json({error:r.message,code:"VCS_ERROR"},400):e.json({error:r.message},500)}let t=r instanceof Error?r.message:String(r);return e.json({error:t},500)}var N=new re().get("/",async e=>{let r=e.req.query("parentId"),t=e.req.query("ready"),n=e.req.query("completed"),o=["task","list"];if(r){if(!d(r))return e.json({error:`Invalid parentId: ${r}`},400);o.push("--parent",r)}t==="true"&&o.push("--ready"),n==="true"&&o.push("--completed");try{let u=P(await m(o)).unwrap("GET /api/tasks");return e.json(u)}catch(u){return k(e,u)}}).get("/next-ready",async e=>{let r=e.req.query("milestoneId"),t=["task","next-ready"];if(r){if(!d(r))return e.json({error:`Invalid milestoneId: ${r}`},400);t.push("--milestone",r)}try{let n=B(await m(t)).unwrap("GET /api/tasks/next-ready");return n===null?e.json(null,200):e.json(n)}catch(n){return k(e,n)}}).get("/:id",async e=>{let r=e.req.param("id");if(!d(r))return e.json({error:`Invalid task ID: ${r}`},400);try{let t=v(await m(["task","get",r])).unwrap("GET /api/tasks/:id");return e.json(t)}catch(t){return k(e,t)}}).put("/:id",async e=>{let r=e.req.param("id");if(!d(r))return e.json({error:`Invalid task ID: ${r}`},400);let t;try{t=U(await e.req.json()).unwrap("PUT /api/tasks/:id body")}catch{return e.json({error:"Invalid JSON body"},400)}let n=["task","update",r];if(t.description&&n.push("-d",t.description),t.context&&n.push("--context",t.context),t.priority&&n.push("--priority",String(t.priority)),n.length===3)return e.json({error:"No fields to update"},400);try{let o=y(await m(n)).unwrap("PUT /api/tasks/:id");return e.json(o)}catch(o){return k(e,o)}}).delete("/:id",async e=>{let r=e.req.param("id");if(!d(r))return e.json({error:`Invalid task ID: ${r}`},400);try{return await m(["task","delete",r]),e.json({deleted:!0})}catch(t){return k(e,t)}}).post("/:id/complete",async e=>{let r=e.req.param("id");if(!d(r))return e.json({error:`Invalid task ID: ${r}`},400);let t;try{let o=await e.req.text();o?t=W(JSON.parse(o)).unwrap("POST /api/tasks/:id/complete body"):t={}}catch{return e.json({error:"Invalid JSON body"},400)}let n=["task","complete",r];if(t.result&&n.push("--result",t.result),t.learnings)for(let o of t.learnings)n.push("--learning",o);try{let o=y(await m(n)).unwrap("POST /api/tasks/:id/complete");return e.json(o)}catch(o){return k(e,o)}}).post("/:id/reopen",async e=>{let r=e.req.param("id");if(!d(r))return e.json({error:`Invalid task ID: ${r}`},400);try{let t=y(await m(["task","reopen",r])).unwrap("POST /api/tasks/:id/reopen");return e.json(t)}catch(t){return k(e,t)}}).get("/:taskId/learnings",async e=>{let r=e.req.param("taskId");if(!d(r))return e.json({error:`Invalid task ID: ${r}`},400);try{let t=I(await m(["learning","list",r])).unwrap("GET /api/tasks/:taskId/learnings");return e.json(t)}catch(t){return k(e,t)}});var te=new J().get("/health",e=>e.json({status:"ok"})).route("/api/tasks",N).all("/api/*",e=>e.json({error:"Not found"},404));function V(e){let r=e??process.env.OVERSEER_UI_STATIC_ROOT??"./static";return new J().route("/",te).use("/*",G({root:r})).get("/*",G({root:r,path:"index.html"}))}var se=process.env.PORT===void 0?6969:Number.parseInt(process.env.PORT,10)||6969,oe=process.env.OVERSEER_UI_STATIC_ROOT??"./dist",ae=V(oe);ne({fetch:ae.fetch,port:se},e=>{console.log(`Overseer UI: http://localhost:${e.port}`)});
2
+ import{createServer as $t}from"http";import{Http2ServerRequest as qt}from"http2";import{Http2ServerRequest as me}from"http2";import{Readable as He}from"stream";import Qt from"crypto";var _=class extends Error{constructor(e,t){super(e,t),this.name="RequestError"}},Mt=e=>e instanceof _?e:new _(e.message,{cause:e}),Nt=global.Request,V=class extends Nt{constructor(e,t){typeof e=="object"&&B in e&&(e=e[B]()),typeof t?.body?.getReader<"u"&&(t.duplex??="half"),super(e,t)}},Ut=e=>{let t=[],s=e.rawHeaders;for(let r=0;r<s.length;r+=2){let{[r]:n,[r+1]:a}=s;n.charCodeAt(0)!==58&&t.push([n,a])}return new Headers(t)},$e=Symbol("wrapBodyStream"),Bt=(e,t,s,r,n)=>{let a={method:e,headers:s,signal:n.signal};if(e==="TRACE"){a.method="GET";let o=new V(t,a);return Object.defineProperty(o,"method",{get(){return"TRACE"}}),o}if(!(e==="GET"||e==="HEAD"))if("rawBody"in r&&r.rawBody instanceof Buffer)a.body=new ReadableStream({start(o){o.enqueue(r.rawBody),o.close()}});else if(r[$e]){let o;a.body=new ReadableStream({async pull(i){try{o||=He.toWeb(r).getReader();let{done:c,value:u}=await o.read();c?i.close():i.enqueue(u)}catch(c){i.error(c)}}})}else a.body=He.toWeb(r);return new V(t,a)},B=Symbol("getRequestCache"),Ft=Symbol("requestCache"),re=Symbol("incomingKey"),se=Symbol("urlKey"),Wt=Symbol("headersKey"),U=Symbol("abortControllerKey"),zt=Symbol("getAbortController"),ne={get method(){return this[re].method||"GET"},get url(){return this[se]},get headers(){return this[Wt]||=Ut(this[re])},[zt](){return this[B](),this[U]},[B](){return this[U]||=new AbortController,this[Ft]||=Bt(this.method,this[se],this.headers,this[re],this[U])}};["body","bodyUsed","cache","credentials","destination","integrity","mode","redirect","referrer","referrerPolicy","signal","keepalive"].forEach(e=>{Object.defineProperty(ne,e,{get(){return this[B]()[e]}})});["arrayBuffer","blob","clone","formData","json","text"].forEach(e=>{Object.defineProperty(ne,e,{value:function(){return this[B]()[e]()}})});Object.setPrototypeOf(ne,V.prototype);var Gt=(e,t)=>{let s=Object.create(ne);s[re]=e;let r=e.url||"";if(r[0]!=="/"&&(r.startsWith("http://")||r.startsWith("https://"))){if(e instanceof me)throw new _("Absolute URL for :path is not allowed in HTTP/2");try{let i=new URL(r);s[se]=i.href}catch(i){throw new _("Invalid absolute URL",{cause:i})}return s}let n=(e instanceof me?e.authority:e.headers.host)||t;if(!n)throw new _("Missing host header");let a;if(e instanceof me){if(a=e.scheme,!(a==="http"||a==="https"))throw new _("Unsupported scheme")}else a=e.socket&&e.socket.encrypted?"https":"http";let o=new URL(`${a}://${n}${r}`);if(o.hostname.length!==n.length&&o.hostname!==n.replace(/:\d+$/,""))throw new _("Invalid host header");return s[se]=o.href,s},De=Symbol("responseCache"),N=Symbol("getResponseCache"),H=Symbol("cache"),ye=global.Response,J=class qe{#t;#e;[N](){return delete this[H],this[De]||=new ye(this.#t,this.#e)}constructor(t,s){let r;if(this.#t=t,s instanceof qe){let n=s[De];if(n){this.#e=n,this[N]();return}else this.#e=s.#e,r=new Headers(s.#e.headers)}else this.#e=s;(typeof t=="string"||typeof t?.getReader<"u"||t instanceof Blob||t instanceof Uint8Array)&&(r||=s?.headers||{"content-type":"text/plain; charset=UTF-8"},this[H]=[s?.status||200,t,r])}get headers(){let t=this[H];return t?(t[2]instanceof Headers||(t[2]=new Headers(t[2])),t[2]):this[N]().headers}get status(){return this[H]?.[0]??this[N]().status}get ok(){let t=this.status;return t>=200&&t<300}};["body","bodyUsed","redirected","statusText","trailers","type","url"].forEach(e=>{Object.defineProperty(J.prototype,e,{get(){return this[N]()[e]}})});["arrayBuffer","blob","clone","formData","json","text"].forEach(e=>{Object.defineProperty(J.prototype,e,{value:function(){return this[N]()[e]()}})});Object.setPrototypeOf(J,ye);Object.setPrototypeOf(J.prototype,ye.prototype);async function Kt(e){return Promise.race([e,Promise.resolve().then(()=>Promise.resolve(void 0))])}function Me(e,t,s){let r=i=>{e.cancel(i).catch(()=>{})};return t.on("close",r),t.on("error",r),(s??e.read()).then(o,n),e.closed.finally(()=>{t.off("close",r),t.off("error",r)});function n(i){i&&t.destroy(i)}function a(){e.read().then(o,n)}function o({done:i,value:c}){try{if(i)t.end();else if(!t.write(c))t.once("drain",a);else return e.read().then(o,n)}catch(u){n(u)}}}function Vt(e,t){if(e.locked)throw new TypeError("ReadableStream is locked.");return t.destroyed?void 0:Me(e.getReader(),t)}var Ne=e=>{let t={};e instanceof Headers||(e=new Headers(e??void 0));let s=[];for(let[r,n]of e)r==="set-cookie"?s.push(n):t[r]=n;return s.length>0&&(t["set-cookie"]=s),t["content-type"]??="text/plain; charset=UTF-8",t},Jt="x-hono-already-sent";typeof global.crypto>"u"&&(global.crypto=Qt);var we=Symbol("outgoingEnded"),Yt=()=>new Response(null,{status:400}),Ue=e=>new Response(null,{status:e instanceof Error&&(e.name==="TimeoutError"||e.constructor.name==="TimeoutError")?504:500}),ge=(e,t)=>{let s=e instanceof Error?e:new Error("unknown error",{cause:e});s.code==="ERR_STREAM_PREMATURE_CLOSE"?console.info("The user aborted a request."):(console.error(e),t.headersSent||t.writeHead(500,{"Content-Type":"text/plain"}),t.end(`Error: ${s.message}`),t.destroy(s))},Be=e=>{"flushHeaders"in e&&e.writable&&e.flushHeaders()},Fe=async(e,t)=>{let[s,r,n]=e[H];n instanceof Headers&&(n=Ne(n)),typeof r=="string"?n["Content-Length"]=Buffer.byteLength(r):r instanceof Uint8Array?n["Content-Length"]=r.byteLength:r instanceof Blob&&(n["Content-Length"]=r.size),t.writeHead(s,n),typeof r=="string"||r instanceof Uint8Array?t.end(r):r instanceof Blob?t.end(new Uint8Array(await r.arrayBuffer())):(Be(t),await Vt(r,t)?.catch(a=>ge(a,t))),t[we]?.()},Xt=e=>typeof e.then=="function",Zt=async(e,t,s={})=>{if(Xt(e))if(s.errorHandler)try{e=await e}catch(n){let a=await s.errorHandler(n);if(!a)return;e=a}else e=await e.catch(Ue);if(H in e)return Fe(e,t);let r=Ne(e.headers);if(e.body){let n=e.body.getReader(),a=[],o=!1,i;if(r["transfer-encoding"]!=="chunked"){let c=2;for(let u=0;u<c;u++){i||=n.read();let l=await Kt(i).catch(f=>{console.error(f),o=!0});if(!l){if(u===1){await new Promise(f=>setTimeout(f)),c=3;continue}break}if(i=void 0,l.value&&a.push(l.value),l.done){o=!0;break}}o&&!("content-length"in r)&&(r["content-length"]=a.reduce((u,l)=>u+l.length,0))}t.writeHead(e.status,r),a.forEach(c=>{t.write(c)}),o?t.end():(a.length===0&&Be(t),await Me(n,t,i))}else r[Jt]||(t.writeHead(e.status,r),t.end());t[we]?.()},er=(e,t={})=>{let s=t.autoCleanupIncoming??!0;return t.overrideGlobalObjects!==!1&&global.Request!==V&&(Object.defineProperty(global,"Request",{value:V}),Object.defineProperty(global,"Response",{value:J})),async(r,n)=>{let a,o;try{o=Gt(r,t.hostname);let i=!s||r.method==="GET"||r.method==="HEAD";if(i||(r[$e]=!0,r.on("end",()=>{i=!0}),r instanceof qt&&(n[we]=()=>{i||setTimeout(()=>{i||setTimeout(()=>{r.destroy(),n.destroy()})})})),n.on("close",()=>{o[U]&&(r.errored?o[U].abort(r.errored.toString()):n.writableFinished||o[U].abort("Client connection prematurely closed.")),i||setTimeout(()=>{i||setTimeout(()=>{r.destroy()})})}),a=e(o,{incoming:r,outgoing:n}),H in a)return Fe(a,n)}catch(i){if(a)return ge(i,n);if(t.errorHandler){if(a=await t.errorHandler(o?i:Mt(i)),!a)return}else o?a=Ue(i):a=Yt()}try{return await Zt(a,n,t)}catch(i){return ge(i,n)}}},tr=e=>{let t=e.fetch,s=er(t,{hostname:e.hostname,overrideGlobalObjects:e.overrideGlobalObjects,autoCleanupIncoming:e.autoCleanupIncoming});return(e.createServer||$t)(e.serverOptions||{},s)},We=(e,t)=>{let s=tr(e);return s.listen(e?.port??3e3,e.hostname,()=>{let r=s.address();t&&t(r)}),s};var be=(e,t,s)=>(r,n)=>{let a=-1;return o(0);async function o(i){if(i<=a)throw new Error("next() called multiple times");a=i;let c,u=!1,l;if(e[i]?(l=e[i][0][0],r.req.routeIndex=i):l=i===e.length&&n||void 0,l)try{c=await l(r,()=>o(i+1))}catch(f){if(f instanceof Error&&t)r.error=f,c=await t(f,r),u=!0;else throw f}else r.finalized===!1&&s&&(c=await s(r));return c&&(r.finalized===!1||u)&&(r.res=c),r}};var ze=Symbol();var Ge=async(e,t=Object.create(null))=>{let{all:s=!1,dot:r=!1}=t,a=(e instanceof ae?e.raw.headers:e.headers).get("Content-Type");return a?.startsWith("multipart/form-data")||a?.startsWith("application/x-www-form-urlencoded")?rr(e,{all:s,dot:r}):{}};async function rr(e,t){let s=await e.formData();return s?sr(s,t):{}}function sr(e,t){let s=Object.create(null);return e.forEach((r,n)=>{t.all||n.endsWith("[]")?nr(s,n,r):s[n]=r}),t.dot&&Object.entries(s).forEach(([r,n])=>{r.includes(".")&&(ar(s,r,n),delete s[r])}),s}var nr=(e,t,s)=>{e[t]!==void 0?Array.isArray(e[t])?e[t].push(s):e[t]=[e[t],s]:t.endsWith("[]")?e[t]=[s]:e[t]=s},ar=(e,t,s)=>{let r=e,n=t.split(".");n.forEach((a,o)=>{o===n.length-1?r[a]=s:((!r[a]||typeof r[a]!="object"||Array.isArray(r[a])||r[a]instanceof File)&&(r[a]=Object.create(null)),r=r[a])})};var ve=e=>{let t=e.split("/");return t[0]===""&&t.shift(),t},Ke=e=>{let{groups:t,path:s}=or(e),r=ve(s);return ir(r,t)},or=e=>{let t=[];return e=e.replace(/\{[^}]+\}/g,(s,r)=>{let n=`@${r}`;return t.push([n,s]),n}),{groups:t,path:e}},ir=(e,t)=>{for(let s=t.length-1;s>=0;s--){let[r]=t[s];for(let n=e.length-1;n>=0;n--)if(e[n].includes(r)){e[n]=e[n].replace(r,t[s][1]);break}}return e},oe={},Ve=(e,t)=>{if(e==="*")return"*";let s=e.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/);if(s){let r=`${e}#${t}`;return oe[r]||(s[2]?oe[r]=t&&t[0]!==":"&&t[0]!=="*"?[r,s[1],new RegExp(`^${s[2]}(?=/${t})`)]:[e,s[1],new RegExp(`^${s[2]}$`)]:oe[r]=[e,s[1],!0]),oe[r]}return null},ie=(e,t)=>{try{return t(e)}catch{return e.replace(/(?:%[0-9A-Fa-f]{2})+/g,s=>{try{return t(s)}catch{return s}})}},cr=e=>ie(e,decodeURI),ke=e=>{let t=e.url,s=t.indexOf("/",t.indexOf(":")+4),r=s;for(;r<t.length;r++){let n=t.charCodeAt(r);if(n===37){let a=t.indexOf("?",r),o=t.slice(s,a===-1?void 0:a);return cr(o.includes("%25")?o.replace(/%25/g,"%2525"):o)}else if(n===63)break}return t.slice(s,r)};var Je=e=>{let t=ke(e);return t.length>1&&t.at(-1)==="/"?t.slice(0,-1):t},D=(e,t,...s)=>(s.length&&(t=D(t,...s)),`${e?.[0]==="/"?"":"/"}${e}${t==="/"?"":`${e?.at(-1)==="/"?"":"/"}${t?.[0]==="/"?t.slice(1):t}`}`),ce=e=>{if(e.charCodeAt(e.length-1)!==63||!e.includes(":"))return null;let t=e.split("/"),s=[],r="";return t.forEach(n=>{if(n!==""&&!/\:/.test(n))r+="/"+n;else if(/\:/.test(n))if(/\?/.test(n)){s.length===0&&r===""?s.push("/"):s.push(r);let a=n.replace("?","");r+="/"+a,s.push(r)}else r+="/"+n}),s.filter((n,a,o)=>o.indexOf(n)===a)},xe=e=>/[%+]/.test(e)?(e.indexOf("+")!==-1&&(e=e.replace(/\+/g," ")),e.indexOf("%")!==-1?ie(e,Ee):e):e,Qe=(e,t,s)=>{let r;if(!s&&t&&!/[%+]/.test(t)){let o=e.indexOf("?",8);if(o===-1)return;for(e.startsWith(t,o+1)||(o=e.indexOf(`&${t}`,o+1));o!==-1;){let i=e.charCodeAt(o+t.length+1);if(i===61){let c=o+t.length+2,u=e.indexOf("&",c);return xe(e.slice(c,u===-1?void 0:u))}else if(i==38||isNaN(i))return"";o=e.indexOf(`&${t}`,o+1)}if(r=/[%+]/.test(e),!r)return}let n={};r??=/[%+]/.test(e);let a=e.indexOf("?",8);for(;a!==-1;){let o=e.indexOf("&",a+1),i=e.indexOf("=",a);i>o&&o!==-1&&(i=-1);let c=e.slice(a+1,i===-1?o===-1?void 0:o:i);if(r&&(c=xe(c)),a=o,c==="")continue;let u;i===-1?u="":(u=e.slice(i+1,o===-1?void 0:o),r&&(u=xe(u))),s?(n[c]&&Array.isArray(n[c])||(n[c]=[]),n[c].push(u)):n[c]??=u}return t?n[t]:n},Ye=Qe,Xe=(e,t)=>Qe(e,t,!0),Ee=decodeURIComponent;var Ze=e=>ie(e,Ee),ae=class{raw;#t;#e;routeIndex=0;path;bodyCache={};constructor(e,t="/",s=[[]]){this.raw=e,this.path=t,this.#e=s,this.#t={}}param(e){return e?this.#r(e):this.#a()}#r(e){let t=this.#e[0][this.routeIndex][1][e],s=this.#n(t);return s&&/\%/.test(s)?Ze(s):s}#a(){let e={},t=Object.keys(this.#e[0][this.routeIndex][1]);for(let s of t){let r=this.#n(this.#e[0][this.routeIndex][1][s]);r!==void 0&&(e[s]=/\%/.test(r)?Ze(r):r)}return e}#n(e){return this.#e[1]?this.#e[1][e]:e}query(e){return Ye(this.url,e)}queries(e){return Xe(this.url,e)}header(e){if(e)return this.raw.headers.get(e)??void 0;let t={};return this.raw.headers.forEach((s,r)=>{t[r]=s}),t}async parseBody(e){return this.bodyCache.parsedBody??=await Ge(this,e)}#s=e=>{let{bodyCache:t,raw:s}=this,r=t[e];if(r)return r;let n=Object.keys(t)[0];return n?t[n].then(a=>(n==="json"&&(a=JSON.stringify(a)),new Response(a)[e]())):t[e]=s[e]()};json(){return this.#s("text").then(e=>JSON.parse(e))}text(){return this.#s("text")}arrayBuffer(){return this.#s("arrayBuffer")}blob(){return this.#s("blob")}formData(){return this.#s("formData")}addValidatedData(e,t){this.#t[e]=t}valid(e){return this.#t[e]}get url(){return this.raw.url}get method(){return this.raw.method}get[ze](){return this.#e}get matchedRoutes(){return this.#e[0].map(([[,e]])=>e)}get routePath(){return this.#e[0].map(([[,e]])=>e)[this.routeIndex].path}};var et={Stringify:1,BeforeStream:2,Stream:3},ur=(e,t)=>{let s=new String(e);return s.isEscaped=!0,s.callbacks=t,s};var Re=async(e,t,s,r,n)=>{typeof e=="object"&&!(e instanceof String)&&(e instanceof Promise||(e=e.toString()),e instanceof Promise&&(e=await e));let a=e.callbacks;if(!a?.length)return Promise.resolve(e);n?n[0]+=e:n=[e];let o=Promise.all(a.map(i=>i({phase:t,buffer:n,context:r}))).then(i=>Promise.all(i.filter(Boolean).map(c=>Re(c,t,!1,r,n))).then(()=>n[0]));return s?ur(await o,a):o};var lr="text/plain; charset=UTF-8",Te=(e,t)=>({"Content-Type":e,...t}),tt=class{#t;#e;env={};#r;finalized=!1;error;#a;#n;#s;#l;#c;#u;#i;#d;#h;constructor(e,t){this.#t=e,t&&(this.#n=t.executionCtx,this.env=t.env,this.#u=t.notFoundHandler,this.#h=t.path,this.#d=t.matchResult)}get req(){return this.#e??=new ae(this.#t,this.#h,this.#d),this.#e}get event(){if(this.#n&&"respondWith"in this.#n)return this.#n;throw Error("This context has no FetchEvent")}get executionCtx(){if(this.#n)return this.#n;throw Error("This context has no ExecutionContext")}get res(){return this.#s||=new Response(null,{headers:this.#i??=new Headers})}set res(e){if(this.#s&&e){e=new Response(e.body,e);for(let[t,s]of this.#s.headers.entries())if(t!=="content-type")if(t==="set-cookie"){let r=this.#s.headers.getSetCookie();e.headers.delete("set-cookie");for(let n of r)e.headers.append("set-cookie",n)}else e.headers.set(t,s)}this.#s=e,this.finalized=!0}render=(...e)=>(this.#c??=t=>this.html(t),this.#c(...e));setLayout=e=>this.#l=e;getLayout=()=>this.#l;setRenderer=e=>{this.#c=e};header=(e,t,s)=>{this.finalized&&(this.#s=new Response(this.#s.body,this.#s));let r=this.#s?this.#s.headers:this.#i??=new Headers;t===void 0?r.delete(e):s?.append?r.append(e,t):r.set(e,t)};status=e=>{this.#a=e};set=(e,t)=>{this.#r??=new Map,this.#r.set(e,t)};get=e=>this.#r?this.#r.get(e):void 0;get var(){return this.#r?Object.fromEntries(this.#r):{}}#o(e,t,s){let r=this.#s?new Headers(this.#s.headers):this.#i??new Headers;if(typeof t=="object"&&"headers"in t){let a=t.headers instanceof Headers?t.headers:new Headers(t.headers);for(let[o,i]of a)o.toLowerCase()==="set-cookie"?r.append(o,i):r.set(o,i)}if(s)for(let[a,o]of Object.entries(s))if(typeof o=="string")r.set(a,o);else{r.delete(a);for(let i of o)r.append(a,i)}let n=typeof t=="number"?t:t?.status??this.#a;return new Response(e,{status:n,headers:r})}newResponse=(...e)=>this.#o(...e);body=(e,t,s)=>this.#o(e,t,s);text=(e,t,s)=>!this.#i&&!this.#a&&!t&&!s&&!this.finalized?new Response(e):this.#o(e,t,Te(lr,s));json=(e,t,s)=>this.#o(JSON.stringify(e),t,Te("application/json",s));html=(e,t,s)=>{let r=n=>this.#o(n,t,Te("text/html; charset=UTF-8",s));return typeof e=="object"?Re(e,et.Stringify,!1,{}).then(r):r(e)};redirect=(e,t)=>{let s=String(e);return this.header("Location",/[^\x00-\xFF]/.test(s)?encodeURI(s):s),this.newResponse(null,t??302)};notFound=()=>(this.#u??=()=>new Response,this.#u(this))};var w="ALL",rt="all",st=["get","post","put","delete","options","patch"],ue="Can not add a route since the matcher is already built.",le=class extends Error{};var nt="__COMPOSED_HANDLER";var dr=e=>e.text("404 Not Found",404),at=(e,t)=>{if("getResponse"in e){let s=e.getResponse();return t.newResponse(s.body,s)}return console.error(e),t.text("Internal Server Error",500)},ot=class it{get;post;put;delete;options;patch;all;on;use;router;getPath;_basePath="/";#t="/";routes=[];constructor(t={}){[...st,rt].forEach(a=>{this[a]=(o,...i)=>(typeof o=="string"?this.#t=o:this.#a(a,this.#t,o),i.forEach(c=>{this.#a(a,this.#t,c)}),this)}),this.on=(a,o,...i)=>{for(let c of[o].flat()){this.#t=c;for(let u of[a].flat())i.map(l=>{this.#a(u.toUpperCase(),this.#t,l)})}return this},this.use=(a,...o)=>(typeof a=="string"?this.#t=a:(this.#t="*",o.unshift(a)),o.forEach(i=>{this.#a(w,this.#t,i)}),this);let{strict:r,...n}=t;Object.assign(this,n),this.getPath=r??!0?t.getPath??ke:Je}#e(){let t=new it({router:this.router,getPath:this.getPath});return t.errorHandler=this.errorHandler,t.#r=this.#r,t.routes=this.routes,t}#r=dr;errorHandler=at;route(t,s){let r=this.basePath(t);return s.routes.map(n=>{let a;s.errorHandler===at?a=n.handler:(a=async(o,i)=>(await be([],s.errorHandler)(o,()=>n.handler(o,i))).res,a[nt]=n.handler),r.#a(n.method,n.path,a)}),this}basePath(t){let s=this.#e();return s._basePath=D(this._basePath,t),s}onError=t=>(this.errorHandler=t,this);notFound=t=>(this.#r=t,this);mount(t,s,r){let n,a;r&&(typeof r=="function"?a=r:(a=r.optionHandler,r.replaceRequest===!1?n=c=>c:n=r.replaceRequest));let o=a?c=>{let u=a(c);return Array.isArray(u)?u:[u]}:c=>{let u;try{u=c.executionCtx}catch{}return[c.env,u]};n||=(()=>{let c=D(this._basePath,t),u=c==="/"?0:c.length;return l=>{let f=new URL(l.url);return f.pathname=f.pathname.slice(u)||"/",new Request(f,l)}})();let i=async(c,u)=>{let l=await s(n(c.req.raw),...o(c));if(l)return l;await u()};return this.#a(w,D(t,"*"),i),this}#a(t,s,r){t=t.toUpperCase(),s=D(this._basePath,s);let n={basePath:this._basePath,path:s,method:t,handler:r};this.router.add(t,s,[r,n]),this.routes.push(n)}#n(t,s){if(t instanceof Error)return this.errorHandler(t,s);throw t}#s(t,s,r,n){if(n==="HEAD")return(async()=>new Response(null,await this.#s(t,s,r,"GET")))();let a=this.getPath(t,{env:r}),o=this.router.match(n,a),i=new tt(t,{path:a,matchResult:o,env:r,executionCtx:s,notFoundHandler:this.#r});if(o[0].length===1){let u;try{u=o[0][0][0][0](i,async()=>{i.res=await this.#r(i)})}catch(l){return this.#n(l,i)}return u instanceof Promise?u.then(l=>l||(i.finalized?i.res:this.#r(i))).catch(l=>this.#n(l,i)):u??this.#r(i)}let c=be(o[0],this.errorHandler,this.#r);return(async()=>{try{let u=await c(i);if(!u.finalized)throw new Error("Context is not finalized. Did you forget to return a Response object or `await next()`?");return u.res}catch(u){return this.#n(u,i)}})()}fetch=(t,...s)=>this.#s(t,s[1],s[0],t.method);request=(t,s,r,n)=>t instanceof Request?this.fetch(s?new Request(t,s):t,r,n):(t=t.toString(),this.fetch(new Request(/^https?:\/\//.test(t)?t:`http://localhost${D("/",t)}`,s),r,n));fire=()=>{addEventListener("fetch",t=>{t.respondWith(this.#s(t.request,t,void 0,t.request.method))})}};var de=[];function Ie(e,t){let s=this.buildAllMatchers(),r=(n,a)=>{let o=s[n]||s[w],i=o[2][a];if(i)return i;let c=a.match(o[0]);if(!c)return[[],de];let u=c.indexOf("",1);return[o[1][u],c]};return this.match=r,r(e,t)}var he="[^/]+",Q=".*",Y="(?:|/.*)",$=Symbol(),hr=new Set(".\\+*[^]$()");function fr(e,t){return e.length===1?t.length===1?e<t?-1:1:-1:t.length===1||e===Q||e===Y?1:t===Q||t===Y?-1:e===he?1:t===he?-1:e.length===t.length?e<t?-1:1:t.length-e.length}var ct=class Se{#t;#e;#r=Object.create(null);insert(t,s,r,n,a){if(t.length===0){if(this.#t!==void 0)throw $;if(a)return;this.#t=s;return}let[o,...i]=t,c=o==="*"?i.length===0?["","",Q]:["","",he]:o==="/*"?["","",Y]:o.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/),u;if(c){let l=c[1],f=c[2]||he;if(l&&c[2]&&(f===".*"||(f=f.replace(/^\((?!\?:)(?=[^)]+\)$)/,"(?:"),/\((?!\?:)/.test(f))))throw $;if(u=this.#r[f],!u){if(Object.keys(this.#r).some(m=>m!==Q&&m!==Y))throw $;if(a)return;u=this.#r[f]=new Se,l!==""&&(u.#e=n.varIndex++)}!a&&l!==""&&r.push([l,u.#e])}else if(u=this.#r[o],!u){if(Object.keys(this.#r).some(l=>l.length>1&&l!==Q&&l!==Y))throw $;if(a)return;u=this.#r[o]=new Se}u.insert(i,s,r,n,a)}buildRegExpStr(){let s=Object.keys(this.#r).sort(fr).map(r=>{let n=this.#r[r];return(typeof n.#e=="number"?`(${r})@${n.#e}`:hr.has(r)?`\\${r}`:r)+n.buildRegExpStr()});return typeof this.#t=="number"&&s.unshift(`#${this.#t}`),s.length===0?"":s.length===1?s[0]:"(?:"+s.join("|")+")"}};var ut=class{#t={varIndex:0};#e=new ct;insert(e,t,s){let r=[],n=[];for(let o=0;;){let i=!1;if(e=e.replace(/\{[^}]+\}/g,c=>{let u=`@\\${o}`;return n[o]=[u,c],o++,i=!0,u}),!i)break}let a=e.match(/(?::[^\/]+)|(?:\/\*$)|./g)||[];for(let o=n.length-1;o>=0;o--){let[i]=n[o];for(let c=a.length-1;c>=0;c--)if(a[c].indexOf(i)!==-1){a[c]=a[c].replace(i,n[o][1]);break}}return this.#e.insert(a,t,r,this.#t,s),r}buildRegExp(){let e=this.#e.buildRegExpStr();if(e==="")return[/^$/,[],[]];let t=0,s=[],r=[];return e=e.replace(/#(\d+)|@(\d+)|\.\*\$/g,(n,a,o)=>a!==void 0?(s[++t]=Number(a),"$()"):(o!==void 0&&(r[Number(o)]=++t),"")),[new RegExp(`^${e}`),s,r]}};var pr=[/^$/,[],Object.create(null)],lt=Object.create(null);function dt(e){return lt[e]??=new RegExp(e==="*"?"":`^${e.replace(/\/\*$|([.\\+*[^\]$()])/g,(t,s)=>s?`\\${s}`:"(?:|/.*)")}$`)}function mr(){lt=Object.create(null)}function gr(e){let t=new ut,s=[];if(e.length===0)return pr;let r=e.map(u=>[!/\*|\/:/.test(u[0]),...u]).sort(([u,l],[f,m])=>u?1:f?-1:l.length-m.length),n=Object.create(null);for(let u=0,l=-1,f=r.length;u<f;u++){let[m,p,b]=r[u];m?n[p]=[b.map(([x])=>[x,Object.create(null)]),de]:l++;let g;try{g=t.insert(p,l,m)}catch(x){throw x===$?new le(p):x}m||(s[l]=b.map(([x,E])=>{let S=Object.create(null);for(E-=1;E>=0;E--){let[O,v]=g[E];S[O]=v}return[x,S]}))}let[a,o,i]=t.buildRegExp();for(let u=0,l=s.length;u<l;u++)for(let f=0,m=s[u].length;f<m;f++){let p=s[u][f]?.[1];if(!p)continue;let b=Object.keys(p);for(let g=0,x=b.length;g<x;g++)p[b[g]]=i[p[b[g]]]}let c=[];for(let u in o)c[u]=s[o[u]];return[a,c,n]}function F(e,t){if(e){for(let s of Object.keys(e).sort((r,n)=>n.length-r.length))if(dt(s).test(t))return[...e[s]]}}var fe=class{name="RegExpRouter";#t;#e;constructor(){this.#t={[w]:Object.create(null)},this.#e={[w]:Object.create(null)}}add(e,t,s){let r=this.#t,n=this.#e;if(!r||!n)throw new Error(ue);r[e]||[r,n].forEach(i=>{i[e]=Object.create(null),Object.keys(i[w]).forEach(c=>{i[e][c]=[...i[w][c]]})}),t==="/*"&&(t="*");let a=(t.match(/\/:/g)||[]).length;if(/\*$/.test(t)){let i=dt(t);e===w?Object.keys(r).forEach(c=>{r[c][t]||=F(r[c],t)||F(r[w],t)||[]}):r[e][t]||=F(r[e],t)||F(r[w],t)||[],Object.keys(r).forEach(c=>{(e===w||e===c)&&Object.keys(r[c]).forEach(u=>{i.test(u)&&r[c][u].push([s,a])})}),Object.keys(n).forEach(c=>{(e===w||e===c)&&Object.keys(n[c]).forEach(u=>i.test(u)&&n[c][u].push([s,a]))});return}let o=ce(t)||[t];for(let i=0,c=o.length;i<c;i++){let u=o[i];Object.keys(n).forEach(l=>{(e===w||e===l)&&(n[l][u]||=[...F(r[l],u)||F(r[w],u)||[]],n[l][u].push([s,a-c+i+1]))})}}match=Ie;buildAllMatchers(){let e=Object.create(null);return Object.keys(this.#e).concat(Object.keys(this.#t)).forEach(t=>{e[t]||=this.#r(t)}),this.#t=this.#e=void 0,mr(),e}#r(e){let t=[],s=e===w;return[this.#t,this.#e].forEach(r=>{let n=r[e]?Object.keys(r[e]).map(a=>[a,r[e][a]]):[];n.length!==0?(s||=!0,t.push(...n)):e!==w&&t.push(...Object.keys(r[w]).map(a=>[a,r[w][a]]))}),s?gr(t):null}};var Oe=class{name="SmartRouter";#t=[];#e=[];constructor(e){this.#t=e.routers}add(e,t,s){if(!this.#e)throw new Error(ue);this.#e.push([e,t,s])}match(e,t){if(!this.#e)throw new Error("Fatal error");let s=this.#t,r=this.#e,n=s.length,a=0,o;for(;a<n;a++){let i=s[a];try{for(let c=0,u=r.length;c<u;c++)i.add(...r[c]);o=i.match(e,t)}catch(c){if(c instanceof le)continue;throw c}this.match=i.match.bind(i),this.#t=[i],this.#e=void 0;break}if(a===n)throw new Error("Fatal error");return this.name=`SmartRouter + ${this.activeRouter.name}`,o}get activeRouter(){if(this.#e||this.#t.length!==1)throw new Error("No active router has been determined yet.");return this.#t[0]}};var X=Object.create(null),ht=class ft{#t;#e;#r;#a=0;#n=X;constructor(t,s,r){if(this.#e=r||Object.create(null),this.#t=[],t&&s){let n=Object.create(null);n[t]={handler:s,possibleKeys:[],score:0},this.#t=[n]}this.#r=[]}insert(t,s,r){this.#a=++this.#a;let n=this,a=Ke(s),o=[];for(let i=0,c=a.length;i<c;i++){let u=a[i],l=a[i+1],f=Ve(u,l),m=Array.isArray(f)?f[0]:u;if(m in n.#e){n=n.#e[m],f&&o.push(f[1]);continue}n.#e[m]=new ft,f&&(n.#r.push(f),o.push(f[1])),n=n.#e[m]}return n.#t.push({[t]:{handler:r,possibleKeys:o.filter((i,c,u)=>u.indexOf(i)===c),score:this.#a}}),n}#s(t,s,r,n){let a=[];for(let o=0,i=t.#t.length;o<i;o++){let c=t.#t[o],u=c[s]||c[w],l={};if(u!==void 0&&(u.params=Object.create(null),a.push(u),r!==X||n&&n!==X))for(let f=0,m=u.possibleKeys.length;f<m;f++){let p=u.possibleKeys[f],b=l[u.score];u.params[p]=n?.[p]&&!b?n[p]:r[p]??n?.[p],l[u.score]=!0}}return a}search(t,s){let r=[];this.#n=X;let a=[this],o=ve(s),i=[];for(let c=0,u=o.length;c<u;c++){let l=o[c],f=c===u-1,m=[];for(let p=0,b=a.length;p<b;p++){let g=a[p],x=g.#e[l];x&&(x.#n=g.#n,f?(x.#e["*"]&&r.push(...this.#s(x.#e["*"],t,g.#n)),r.push(...this.#s(x,t,g.#n))):m.push(x));for(let E=0,S=g.#r.length;E<S;E++){let O=g.#r[E],v=g.#n===X?{}:{...g.#n};if(O==="*"){let P=g.#e["*"];P&&(r.push(...this.#s(P,t,g.#n)),P.#n=v,m.push(P));continue}let[R,_e,K]=O;if(!l&&!(K instanceof RegExp))continue;let A=g.#e[R],Ht=o.slice(c).join("/");if(K instanceof RegExp){let P=K.exec(Ht);if(P){if(v[_e]=P[0],r.push(...this.#s(A,t,g.#n,v)),Object.keys(A.#e).length){A.#n=v;let Dt=P[0].match(/\//)?.length??0;(i[Dt]||=[]).push(A)}continue}}(K===!0||K.test(l))&&(v[_e]=l,f?(r.push(...this.#s(A,t,v,g.#n)),A.#e["*"]&&r.push(...this.#s(A.#e["*"],t,v,g.#n))):(A.#n=v,m.push(A)))}}a=m.concat(i.shift()??[])}return r.length>1&&r.sort((c,u)=>c.score-u.score),[r.map(({handler:c,params:u})=>[c,u])]}};var Ae=class{name="TrieRouter";#t;constructor(){this.#t=new ht}add(e,t,s){let r=ce(t);if(r){for(let n=0,a=r.length;n<a;n++)this.#t.insert(e,r[n],s);return}this.#t.insert(e,t,s)}match(e,t){return this.#t.search(e,t)}};var W=class extends ot{constructor(e={}){super(e),this.router=e.router??new Oe({routers:[new fe,new Ae]})}};var pt=(e,t=wr)=>{let s=/\.([a-zA-Z0-9]+?)$/,r=e.match(s);if(!r)return;let n=t[r[1]];return n&&n.startsWith("text")&&(n+="; charset=utf-8"),n};var yr={aac:"audio/aac",avi:"video/x-msvideo",avif:"image/avif",av1:"video/av1",bin:"application/octet-stream",bmp:"image/bmp",css:"text/css",csv:"text/csv",eot:"application/vnd.ms-fontobject",epub:"application/epub+zip",gif:"image/gif",gz:"application/gzip",htm:"text/html",html:"text/html",ico:"image/x-icon",ics:"text/calendar",jpeg:"image/jpeg",jpg:"image/jpeg",js:"text/javascript",json:"application/json",jsonld:"application/ld+json",map:"application/json",mid:"audio/x-midi",midi:"audio/x-midi",mjs:"text/javascript",mp3:"audio/mpeg",mp4:"video/mp4",mpeg:"video/mpeg",oga:"audio/ogg",ogv:"video/ogg",ogx:"application/ogg",opus:"audio/opus",otf:"font/otf",pdf:"application/pdf",png:"image/png",rtf:"application/rtf",svg:"image/svg+xml",tif:"image/tiff",tiff:"image/tiff",ts:"video/mp2t",ttf:"font/ttf",txt:"text/plain",wasm:"application/wasm",webm:"video/webm",weba:"audio/webm",webmanifest:"application/manifest+json",webp:"image/webp",woff:"font/woff",woff2:"font/woff2",xhtml:"application/xhtml+xml",xml:"application/xml",zip:"application/zip","3gp":"video/3gpp","3g2":"video/3gpp2",gltf:"model/gltf+json",glb:"model/gltf-binary"},wr=yr;import{createReadStream as mt,statSync as br,existsSync as xr}from"fs";import{join as gt}from"path";import{versions as vr}from"process";import{Readable as kr}from"stream";var Er=/^\s*(?:text\/[^;\s]+|application\/(?:javascript|json|xml|xml-dtd|ecmascript|dart|postscript|rtf|tar|toml|vnd\.dart|vnd\.ms-fontobject|vnd\.ms-opentype|wasm|x-httpd-php|x-javascript|x-ns-proxy-autoconfig|x-sh|x-tar|x-virtualbox-hdd|x-virtualbox-ova|x-virtualbox-ovf|x-virtualbox-vbox|x-virtualbox-vdi|x-virtualbox-vhd|x-virtualbox-vmdk|x-www-form-urlencoded)|font\/(?:otf|ttf)|image\/(?:bmp|vnd\.adobe\.photoshop|vnd\.microsoft\.icon|vnd\.ms-dds|x-icon|x-ms-bmp)|message\/rfc822|model\/gltf-binary|x-shader\/x-fragment|x-shader\/x-vertex|[^;\s]+?\+(?:json|text|xml|yaml))(?:[;\s]|$)/i,Pe={br:".br",zstd:".zst",gzip:".gz"},Rr=Object.keys(Pe),Tr=()=>{let[e,t]=vr.node.split(".").map(s=>parseInt(s));return e>=23||e===22&&t>=7||e===20&&t>=18},Ir=Tr(),yt=e=>Ir?kr.toWeb(e):new ReadableStream({start(s){e.on("data",r=>{s.enqueue(r)}),e.on("error",r=>{s.error(r)}),e.on("end",()=>{s.close()})},cancel(){e.destroy()}}),Ce=e=>{let t;try{t=br(e)}catch{}return t},je=(e={root:""})=>{let t=e.root||"",s=e.path;return t!==""&&!xr(t)&&console.error(`serveStatic: root path '${t}' is not found, are you sure it's correct?`),async(r,n)=>{if(r.finalized)return n();let a;if(s)a=s;else try{if(a=decodeURIComponent(r.req.path),/(?:^|[\/\\])\.\.(?:$|[\/\\])/.test(a))throw new Error}catch{return await e.onNotFound?.(r.req.path,r),n()}let o=gt(t,!s&&e.rewriteRequestPath?e.rewriteRequestPath(a,r):a),i=Ce(o);if(i&&i.isDirectory()){let m=e.index??"index.html";o=gt(o,m),i=Ce(o)}if(!i)return await e.onNotFound?.(o,r),n();let c=pt(o);if(r.header("Content-Type",c||"application/octet-stream"),e.precompressed&&(!c||Er.test(c))){let m=new Set(r.req.header("Accept-Encoding")?.split(",").map(p=>p.trim()));for(let p of Rr){if(!m.has(p))continue;let b=Ce(o+Pe[p]);if(b){r.header("Content-Encoding",p),r.header("Vary","Accept-Encoding",{append:!0}),i=b,o=o+Pe[p];break}}}let u,l=i.size,f=r.req.header("range")||"";if(r.req.method=="HEAD"||r.req.method=="OPTIONS")r.header("Content-Length",l.toString()),r.status(200),u=r.body(null);else if(!f)r.header("Content-Length",l.toString()),u=r.body(yt(mt(o)),200);else{r.header("Accept-Ranges","bytes"),r.header("Date",i.birthtime.toUTCString());let m=f.replace(/bytes=/,"").split("-",2),p=parseInt(m[0],10)||0,b=parseInt(m[1],10)||l-1;l<b-p+1&&(b=l-1);let g=b-p+1,x=mt(o,{start:p,end:b});r.header("Content-Length",g.toString()),r.header("Content-Range",`bytes ${p}-${b}/${i.size}`),u=r.body(yt(x),206)}return await e.onFound?.(o,r),u}};import{spawn as Sr}from"node:child_process";function k(e){return e.startsWith("task_")&&e.length===31}function wt(e){return e.startsWith("lrn_")&&e.length===30}var j=class extends Error{constructor(s,r,n){super(s);this.exitCode=r;this.stderr=n;this.name="CliError"}},pe=class extends Error{constructor(t="CLI command timeout (30s)"){super(t),this.name="CliTimeoutError"}};var Or=3e4,Ar=process.env.OVERSEER_CLI_PATH??"os",Cr=process.env.OVERSEER_CLI_CWD??process.cwd();async function C(e){return new Promise((t,s)=>{let r=Sr(Ar,[...e,"--json"],{cwd:Cr,stdio:["ignore","pipe","pipe"]}),n=setTimeout(()=>{r.kill("SIGTERM"),s(new pe)},Or),a="",o="";r.stdout.on("data",i=>{a+=i.toString()}),r.stderr.on("data",i=>{o+=i.toString()}),r.on("error",i=>{clearTimeout(n),s(new j(`Failed to spawn os: ${i.message}`,-1,""))}),r.on("close",i=>{if(clearTimeout(n),i!==0){let c=o.trim()||`os exited with code ${i}`;s(new j(c,i??-1,o));return}try{let c=JSON.parse(a);t(c)}catch(c){s(new j(`Invalid JSON from os: ${c instanceof Error?c.message:String(c)}`,0,a))}})})}function I(e,t){return e===2?(...s)=>s.length>=2?t(s[0],s[1]):r=>t(r,s[0]):e===3?(...s)=>s.length>=3?t(s[0],s[1],s[2]):r=>t(r,s[0],s[1]):e===4?(...s)=>s.length>=4?t(s[0],s[1],s[2],s[3]):r=>t(r,s[0],s[1],s[2]):(...s)=>s.length>=e?t(...s):r=>t(r,...s)}var Pr=e=>e instanceof Error?{name:e.name,message:e.message,stack:e.stack}:e,jr=e=>e instanceof Error&&"_tag"in e&&typeof e._tag=="string",ee=Object.assign(e=>()=>{class t extends Error{_tag=e;static is(r){return r instanceof t}constructor(r){let n=r&&"message"in r&&typeof r.message=="string"?r.message:void 0,a=r&&"cause"in r?r.cause:void 0;if(super(n,a!==void 0?{cause:a}:void 0),r&&Object.assign(this,r),Object.setPrototypeOf(this,new.target.prototype),this.name=e,a instanceof Error&&a.stack){let o=a.stack.replace(/\n/g,`
3
+ `);this.stack=`${this.stack}
4
+ Caused by: ${o}`}}toJSON(){return{...this,_tag:this._tag,name:this.name,message:this.message,cause:Pr(this.cause),stack:this.stack}}}return t},{is:jr}),Jn=I(2,(e,t)=>{let s=t[e._tag];return s(e)}),Qn=I(3,(e,t,s)=>{let r=t[e._tag];return typeof r=="function"?r(e):s(e)});var vt=class extends ee("UnhandledException")(){constructor(e){let t=e.cause instanceof Error?`Unhandled exception: ${e.cause.message}`:`Unhandled exception: ${String(e.cause)}`;super({message:t,cause:e.cause})}},Lr=class extends ee("Panic")(){},_r=class extends ee("ResultDeserializationError")(){constructor(e){super({message:'Failed to deserialize value as Result: expected { status: "ok", value } or { status: "error", error }',value:e.value})}};var T=(e,t)=>{throw new Lr({message:e,cause:t})},q=(e,t)=>{try{return e()}catch(s){throw T(t,s)}},bt=async(e,t)=>{try{return await e()}catch(s){throw T(t,s)}},kt=class Et{status="ok";constructor(t){this.value=t}isOk(){return!0}isErr(){return!1}map(t){return q(()=>new Et(t(this.value)),"map callback threw")}mapError(t){return this}andThen(t){return q(()=>t(this.value),"andThen callback threw")}andThenAsync(t){return bt(()=>t(this.value),"andThenAsync callback threw")}match(t){return q(()=>t.ok(this.value),"match ok handler threw")}unwrap(t){return this.value}unwrapOr(t){return this.value}tap(t){return q(()=>(t(this.value),this),"tap callback threw")}tapAsync(t){return bt(async()=>(await t(this.value),this),"tapAsync callback threw")}*[Symbol.iterator](){return this.value}},Rt=class Tt{status="error";constructor(t){this.error=t}isOk(){return!1}isErr(){return!0}map(t){return this}mapError(t){return q(()=>new Tt(t(this.error)),"mapError callback threw")}andThen(t){return this}andThenAsync(t){return Promise.resolve(this)}match(t){return q(()=>t.err(this.error),"match err handler threw")}unwrap(t){return T(t??`Unwrap called on Err: ${String(this.error)}`,this.error)}unwrapOr(t){return t}tap(t){return this}tapAsync(t){return Promise.resolve(this)}*[Symbol.iterator](){return yield this,T("Unreachable: Err yielded in Result.gen but generator continued",this.error)}};function Z(e){return new kt(e)}var Hr=e=>e.status==="ok",z=e=>new Rt(e),Dr=e=>e.status==="error",$r=(e,t)=>{let s=()=>{if(typeof e=="function")try{return Z(e())}catch(a){return z(new vt({cause:a}))}try{return Z(e.try())}catch(a){try{return z(e.catch(a))}catch(o){throw T("Result.try catch handler threw",o)}}},r=t?.retry?.times??0,n=s();for(let a=0;a<r&&n.status==="error";a++)n=s();return n},qr=async(e,t)=>{let s=async()=>{if(typeof e=="function")try{return Z(await e())}catch(c){return z(new vt({cause:c}))}try{return Z(await e.try())}catch(c){try{return z(await e.catch(c))}catch(u){throw T("Result.tryPromise catch handler threw",u)}}},r=t?.retry;if(!r)return s();let n=c=>{switch(r.backoff){case"constant":return r.delayMs;case"linear":return r.delayMs*(c+1);case"exponential":return r.delayMs*2**c}},a=c=>new Promise(u=>setTimeout(u,c)),o=await s(),i=r.shouldRetry??(()=>!0);for(let c=0;c<r.times&&o.status==="error";c++){let u=o.error;if(!q(()=>i(u),"shouldRetry predicate threw"))break;await a(n(c)),o=await s()}return o},Mr=I(2,(e,t)=>e.map(t)),Nr=I(2,(e,t)=>e.mapError(t)),Ur=I(2,(e,t)=>e.andThen(t)),Br=I(2,(e,t)=>e.andThenAsync(t)),Fr=I(2,(e,t)=>e.match(t)),Wr=I(2,(e,t)=>e.tap(t)),zr=I(2,(e,t)=>e.tapAsync(t)),Gr=(e,t)=>e.unwrap(t);function xt(e){if(!(e!==null&&typeof e=="object"&&"status"in e&&(e.status==="ok"||e.status==="error")))return T("Result.gen body must return Result.ok() or Result.err(), got: "+(e===null?"null":typeof e=="object"?JSON.stringify(e):String(e)))}var Kr=I(2,(e,t)=>e.unwrapOr(t)),Vr=(e,t)=>{let s=e.call(t);if(Symbol.asyncIterator in s)return(async()=>{let a=s,o;try{o=await a.next()}catch(i){throw T("generator body threw",i)}if(xt(o.value),!o.done)try{await a.return?.(void 0)}catch(i){throw T("generator cleanup threw",i)}return o.value})();let r=s,n;try{n=r.next()}catch(a){throw T("generator body threw",a)}if(xt(n.value),!n.done)try{r.return?.(void 0)}catch(a){throw T("generator cleanup threw",a)}return n.value};async function*Jr(e){return yield*await e}function Qr(e){return e!==null&&typeof e=="object"&&"status"in e&&(e.status==="ok"&&"value"in e||e.status==="error"&&"error"in e)}var Yr=e=>e.status==="ok"?{status:"ok",value:e.value}:{status:"error",error:e.error},It=e=>Qr(e)?e.status==="ok"?new kt(e.value):new Rt(e.error):z(new _r({value:e})),Xr=e=>It(e),Zr=e=>{let t=[],s=[];for(let r of e)r.status==="ok"?t.push(r.value):s.push(r.error);return[t,s]},es=e=>e.status==="ok"?e.value:e,d={ok:Z,isOk:Hr,err:z,isError:Dr,try:$r,tryPromise:qr,map:Mr,mapError:Nr,andThen:Ur,andThenAsync:Br,match:Fr,tap:Wr,tapAsync:zr,unwrap:Gr,unwrapOr:Kr,gen:Vr,await:Jr,serialize:Yr,deserialize:It,hydrate:Xr,partition:Zr,flatten:es};var h=class extends ee("DecodeError")(){};function M(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function y(e){return typeof e=="string"}function St(e){return typeof e=="boolean"}function ts(e){return typeof e=="number"}function Ot(e){return ts(e)&&e>=1&&e<=5&&Number.isInteger(e)}function rs(e){return e===0||e===1||e===2}function ss(e){if(!M(e))return d.err(new h({message:"Learning must be object"}));let{id:t,taskId:s,content:r,sourceTaskId:n,createdAt:a}=e;return!y(t)||!wt(t)?d.err(new h({message:`Invalid learning id: ${t}`})):!y(s)||!k(s)?d.err(new h({message:`Invalid learning taskId: ${s}`})):y(r)?n!==null&&(!y(n)||!k(n))?d.err(new h({message:`Invalid learning sourceTaskId: ${n}`})):y(a)?d.ok({id:t,taskId:s,content:r,sourceTaskId:n,createdAt:a}):d.err(new h({message:"Learning createdAt must be string"})):d.err(new h({message:"Learning content must be string"}))}function te(e){if(!Array.isArray(e))return d.err(new h({message:"Learnings must be array"}));let t=[];for(let s=0;s<e.length;s++){let r=ss(e[s]);if(r.isErr())return d.err(new h({message:r.error.message,path:`learnings[${s}]`}));t.push(r.value)}return d.ok(t)}function G(e){if(!M(e))return d.err(new h({message:"Task must be object"}));let{id:t,parentId:s,description:r,priority:n,completed:a,completedAt:o,startedAt:i,createdAt:c,updatedAt:u,result:l,commitSha:f,depth:m,blockedBy:p,blocks:b,bookmark:g,startCommit:x,effectivelyBlocked:E}=e;if(!y(t)||!k(t))return d.err(new h({message:`Invalid task id: ${t}`}));if(s!==null&&(!y(s)||!k(s)))return d.err(new h({message:`Invalid task parentId: ${s}`}));if(!y(r))return d.err(new h({message:"Task description must be string"}));if(!Ot(n))return d.err(new h({message:`Invalid task priority: ${n}`}));if(!St(a))return d.err(new h({message:"Task completed must be boolean"}));if(o!==null&&!y(o))return d.err(new h({message:"Task completedAt must be string or null"}));if(i!==null&&!y(i))return d.err(new h({message:"Task startedAt must be string or null"}));if(!y(c))return d.err(new h({message:"Task createdAt must be string"}));if(!y(u))return d.err(new h({message:"Task updatedAt must be string"}));if(l!==null&&!y(l))return d.err(new h({message:"Task result must be string or null"}));if(f!==null&&!y(f))return d.err(new h({message:"Task commitSha must be string or null"}));if(!rs(m))return d.err(new h({message:`Invalid task depth: ${m}`}));if(!St(E))return d.err(new h({message:"Task effectivelyBlocked must be boolean"}));let S;if(p!==void 0){if(!Array.isArray(p))return d.err(new h({message:"Task blockedBy must be array"}));S=[];for(let R of p){if(!y(R)||!k(R))return d.err(new h({message:`Invalid blocker id: ${R}`}));S.push(R)}}let O;if(b!==void 0){if(!Array.isArray(b))return d.err(new h({message:"Task blocks must be array"}));O=[];for(let R of b){if(!y(R)||!k(R))return d.err(new h({message:`Invalid blocks id: ${R}`}));O.push(R)}}if(g!==void 0&&!y(g))return d.err(new h({message:"Task bookmark must be string"}));if(x!==void 0&&!y(x))return d.err(new h({message:"Task startCommit must be string"}));let v={id:t,parentId:s,description:r,priority:n,completed:a,completedAt:o,startedAt:i,createdAt:c,updatedAt:u,result:l,commitSha:f,depth:m,effectivelyBlocked:E};return S&&(v.blockedBy=S),O&&(v.blocks=O),g!==void 0&&(v.bookmark=g),x!==void 0&&(v.startCommit=x),d.ok(v)}function At(e){if(!Array.isArray(e))return d.err(new h({message:"Tasks must be array"}));let t=[];for(let s=0;s<e.length;s++){let r=G(e[s]);if(r.isErr())return d.err(new h({message:r.error.message,path:`tasks[${s}]`}));t.push(r.value)}return d.ok(t)}function ns(e){if(!M(e))return d.err(new h({message:"TaskContext must be object"}));let{own:t,parent:s,milestone:r}=e;if(!y(t))return d.err(new h({message:"TaskContext.own must be string"}));if(s!==void 0&&!y(s))return d.err(new h({message:"TaskContext.parent must be string"}));if(r!==void 0&&!y(r))return d.err(new h({message:"TaskContext.milestone must be string"}));let n={own:t};return s!==void 0&&(n.parent=s),r!==void 0&&(n.milestone=r),d.ok(n)}function as(e){if(!M(e))return d.err(new h({message:"InheritedLearnings must be object"}));let{own:t,parent:s,milestone:r}=e,n=te(t??[]);if(n.isErr())return d.err(new h({message:n.error.message,path:"learnings.own"}));let a=te(s??[]);if(a.isErr())return d.err(new h({message:a.error.message,path:"learnings.parent"}));let o=te(r??[]);return o.isErr()?d.err(new h({message:o.error.message,path:"learnings.milestone"})):d.ok({own:n.value,parent:a.value,milestone:o.value})}function Le(e){if(!M(e))return d.err(new h({message:"TaskWithContext must be object"}));let t=G(e);if(t.isErr())return t;let{context:s,learnings:r}=e,n=ns(s);if(n.isErr())return d.err(new h({message:n.error.message,path:"context"}));let a=as(r);return a.isErr()?d.err(new h({message:a.error.message,path:"learnings"})):d.ok({...t.value,context:n.value,learnings:a.value})}function Ct(e){return e===null?d.ok(null):Le(e)}function Pt(e){if(!M(e))return d.err(new h({message:"UpdateTaskRequest must be object"}));let{description:t,context:s,priority:r}=e,n={};if(t!==void 0){if(!y(t))return d.err(new h({message:"description must be string"}));n.description=t}if(s!==void 0){if(!y(s))return d.err(new h({message:"context must be string"}));n.context=s}if(r!==void 0){if(!Ot(r))return d.err(new h({message:`Invalid priority: ${r}`}));n.priority=r}return d.ok(n)}function jt(e){if(!M(e))return d.err(new h({message:"CompleteTaskRequest must be object"}));let{result:t,learnings:s}=e,r={};if(t!==void 0){if(!y(t))return d.err(new h({message:"result must be string"}));r.result=t}if(s!==void 0){if(!Array.isArray(s))return d.err(new h({message:"learnings must be array"}));for(let n=0;n<s.length;n++)if(!y(s[n]))return d.err(new h({message:`learnings[${n}] must be string`}));r.learnings=s}return d.ok(r)}function L(e,t){if(t instanceof j){let r=t.message.toLowerCase();return r.includes("not found")||r.includes("no task")?e.json({error:t.message},404):r.includes("invalid")||r.includes("validation")||r.includes("cycle")?e.json({error:t.message},400):r.includes("not a repository")||r.includes("dirty working copy")?e.json({error:t.message,code:"VCS_ERROR"},400):e.json({error:t.message},500)}let s=t instanceof Error?t.message:String(t);return e.json({error:s},500)}var Lt=new W().get("/",async e=>{let t=e.req.query("parentId"),s=e.req.query("ready"),r=e.req.query("completed"),n=["task","list"];if(t){if(!k(t))return e.json({error:`Invalid parentId: ${t}`},400);n.push("--parent",t)}s==="true"&&n.push("--ready"),r==="true"&&n.push("--completed");try{let a=At(await C(n)).unwrap("GET /api/tasks");return e.json(a)}catch(a){return L(e,a)}}).get("/next-ready",async e=>{let t=e.req.query("milestoneId"),s=["task","next-ready"];if(t){if(!k(t))return e.json({error:`Invalid milestoneId: ${t}`},400);s.push("--milestone",t)}try{let r=Ct(await C(s)).unwrap("GET /api/tasks/next-ready");return r===null?e.json(null,200):e.json(r)}catch(r){return L(e,r)}}).get("/:id",async e=>{let t=e.req.param("id");if(!k(t))return e.json({error:`Invalid task ID: ${t}`},400);try{let s=Le(await C(["task","get",t])).unwrap("GET /api/tasks/:id");return e.json(s)}catch(s){return L(e,s)}}).put("/:id",async e=>{let t=e.req.param("id");if(!k(t))return e.json({error:`Invalid task ID: ${t}`},400);let s;try{s=Pt(await e.req.json()).unwrap("PUT /api/tasks/:id body")}catch{return e.json({error:"Invalid JSON body"},400)}let r=["task","update",t];if(s.description&&r.push("-d",s.description),s.context&&r.push("--context",s.context),s.priority&&r.push("--priority",String(s.priority)),r.length===3)return e.json({error:"No fields to update"},400);try{let n=G(await C(r)).unwrap("PUT /api/tasks/:id");return e.json(n)}catch(n){return L(e,n)}}).delete("/:id",async e=>{let t=e.req.param("id");if(!k(t))return e.json({error:`Invalid task ID: ${t}`},400);try{return await C(["task","delete",t]),e.json({deleted:!0})}catch(s){return L(e,s)}}).post("/:id/complete",async e=>{let t=e.req.param("id");if(!k(t))return e.json({error:`Invalid task ID: ${t}`},400);let s;try{let n=await e.req.text();n?s=jt(JSON.parse(n)).unwrap("POST /api/tasks/:id/complete body"):s={}}catch{return e.json({error:"Invalid JSON body"},400)}let r=["task","complete",t];if(s.result&&r.push("--result",s.result),s.learnings)for(let n of s.learnings)r.push("--learning",n);try{let n=G(await C(r)).unwrap("POST /api/tasks/:id/complete");return e.json(n)}catch(n){return L(e,n)}}).post("/:id/reopen",async e=>{let t=e.req.param("id");if(!k(t))return e.json({error:`Invalid task ID: ${t}`},400);try{let s=G(await C(["task","reopen",t])).unwrap("POST /api/tasks/:id/reopen");return e.json(s)}catch(s){return L(e,s)}}).get("/:taskId/learnings",async e=>{let t=e.req.param("taskId");if(!k(t))return e.json({error:`Invalid task ID: ${t}`},400);try{let s=te(await C(["learning","list",t])).unwrap("GET /api/tasks/:taskId/learnings");return e.json(s)}catch(s){return L(e,s)}});var os=new W().get("/health",e=>e.json({status:"ok"})).route("/api/tasks",Lt).all("/api/*",e=>e.json({error:"Not found"},404));function _t(e){let t=e??process.env.OVERSEER_UI_STATIC_ROOT??"./static";return new W().route("/",os).use("/*",je({root:t})).get("/*",je({root:t,path:"index.html"}))}var is=process.env.PORT===void 0?6969:Number.parseInt(process.env.PORT,10)||6969,cs=process.env.OVERSEER_UI_STATIC_ROOT??"./dist",us=_t(cs);We({fetch:us.fetch,port:is},e=>{console.log(`Overseer UI: http://localhost:${e.port}`)});
3
5
  //# sourceMappingURL=server.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/api/index.ts", "../src/api/app.ts", "../src/api/routes/tasks.ts", "../src/api/cli.ts", "../src/types.ts", "../src/decoder.ts"],
4
- "sourcesContent": ["import { serve } from \"@hono/node-server\";\nimport { createApp } from \"./app.js\";\n\nexport type { AppType } from \"./app.js\";\n\nconst PORT =\n process.env.PORT === undefined\n ? 6969\n : Number.parseInt(process.env.PORT, 10) || 6969;\n\n// Static root:\n// - Dev: ./dist (vite output, relative to ui/)\n// - Prod: OVERSEER_UI_STATIC_ROOT env var (set by bin/os)\nconst staticRoot = process.env.OVERSEER_UI_STATIC_ROOT ?? \"./dist\";\n\nconst app = createApp(staticRoot);\n\nserve(\n {\n fetch: app.fetch,\n port: PORT,\n },\n (info) => {\n console.log(`Overseer UI: http://localhost:${info.port}`);\n }\n);\n", "import { Hono } from \"hono\";\nimport { serveStatic } from \"@hono/node-server/serve-static\";\nimport { tasks } from \"./routes/tasks.js\";\n\n/**\n * Create API routes without static file serving.\n * Static serving is configured separately for dev vs prod.\n */\nconst api = new Hono()\n .get(\"/health\", (c) => {\n return c.json({ status: \"ok\" });\n })\n .route(\"/api/tasks\", tasks)\n // Catch-all for undefined API routes\n .all(\"/api/*\", (c) => c.json({ error: \"Not found\" }, 404));\n\n/**\n * Create full app with static file serving.\n * \n * @param staticRoot - Path to static files (relative to cwd).\n * - Dev: \"./dist\" (relative to ui/)\n * - Prod: Uses OVERSEER_UI_STATIC_ROOT env var, fallback \"./static\"\n */\nexport function createApp(staticRoot?: string) {\n const root = staticRoot ?? process.env.OVERSEER_UI_STATIC_ROOT ?? \"./static\";\n \n return new Hono()\n .route(\"/\", api)\n // Serve static files\n .use(\"/*\", serveStatic({ root }))\n // Fallback to index.html for SPA routing\n .get(\"/*\", serveStatic({ root, path: \"index.html\" }));\n}\n\nexport { api };\n\n// Export AppType based on createApp return type\nexport type AppType = ReturnType<typeof createApp>;\n", "/**\n * Task API routes\n *\n * Note: No task creation in UI (CLI/MCP only)\n * Note: No start operation (complete only via workflow service)\n */\nimport { Hono, type Context } from \"hono\";\nimport type { StatusCode } from \"hono/utils/http-status\";\nimport { callCli } from \"../cli.js\";\nimport {\n decodeTask,\n decodeTasks,\n decodeTaskWithContext,\n decodeTaskWithContextOrNull,\n decodeLearnings,\n decodeUpdateTaskRequest,\n decodeCompleteTaskRequest,\n} from \"../../decoder.js\";\nimport { CliError, isTaskId, type ApiError } from \"../../types.js\";\n\n/**\n * Handle CLI errors and return appropriate HTTP status\n */\nfunction handleCliError(\n c: Context,\n err: unknown\n): Response & { _data: ApiError; _status: StatusCode } {\n if (err instanceof CliError) {\n // Map common error messages to status codes\n const message = err.message.toLowerCase();\n if (message.includes(\"not found\") || message.includes(\"no task\")) {\n return c.json({ error: err.message }, 404);\n }\n if (\n message.includes(\"invalid\") ||\n message.includes(\"validation\") ||\n message.includes(\"cycle\")\n ) {\n return c.json({ error: err.message }, 400);\n }\n if (\n message.includes(\"not a repository\") ||\n message.includes(\"dirty working copy\")\n ) {\n return c.json({ error: err.message, code: \"VCS_ERROR\" }, 400);\n }\n // Default to 500 for unknown CLI errors\n return c.json({ error: err.message }, 500);\n }\n // Unknown error\n const message = err instanceof Error ? err.message : String(err);\n return c.json({ error: message }, 500);\n}\n\nconst tasks = new Hono()\n /**\n * GET /api/tasks\n * List all tasks with optional filters\n * Query params: parentId, ready, completed\n */\n .get(\"/\", async (c) => {\n const parentId = c.req.query(\"parentId\");\n const ready = c.req.query(\"ready\");\n const completed = c.req.query(\"completed\");\n\n const args = [\"task\", \"list\"];\n if (parentId) {\n if (!isTaskId(parentId)) {\n return c.json({ error: `Invalid parentId: ${parentId}` }, 400);\n }\n args.push(\"--parent\", parentId);\n }\n if (ready === \"true\") args.push(\"--ready\");\n if (completed === \"true\") args.push(\"--completed\");\n\n try {\n const result = decodeTasks(await callCli(args)).unwrap(\"GET /api/tasks\");\n return c.json(result);\n } catch (err) {\n return handleCliError(c, err);\n }\n })\n\n /**\n * GET /api/tasks/next-ready\n * Get next ready task (deepest unblocked incomplete leaf)\n * Query params: milestoneId\n */\n .get(\"/next-ready\", async (c) => {\n const milestoneId = c.req.query(\"milestoneId\");\n\n const args = [\"task\", \"next-ready\"];\n if (milestoneId) {\n if (!isTaskId(milestoneId)) {\n return c.json({ error: `Invalid milestoneId: ${milestoneId}` }, 400);\n }\n args.push(\"--milestone\", milestoneId);\n }\n\n try {\n const result = decodeTaskWithContextOrNull(await callCli(args)).unwrap(\n \"GET /api/tasks/next-ready\"\n );\n if (result === null) {\n return c.json(null, 200);\n }\n return c.json(result);\n } catch (err) {\n return handleCliError(c, err);\n }\n })\n\n /**\n * GET /api/tasks/:id\n * Get single task with full context chain and inherited learnings\n */\n .get(\"/:id\", async (c) => {\n const id = c.req.param(\"id\");\n if (!isTaskId(id)) {\n return c.json({ error: `Invalid task ID: ${id}` }, 400);\n }\n\n try {\n const result = decodeTaskWithContext(await callCli([\"task\", \"get\", id])).unwrap(\n \"GET /api/tasks/:id\"\n );\n return c.json(result);\n } catch (err) {\n return handleCliError(c, err);\n }\n })\n\n /**\n * PUT /api/tasks/:id\n * Update existing task\n */\n .put(\"/:id\", async (c) => {\n const id = c.req.param(\"id\");\n if (!isTaskId(id)) {\n return c.json({ error: `Invalid task ID: ${id}` }, 400);\n }\n\n let body;\n try {\n body = decodeUpdateTaskRequest(await c.req.json()).unwrap(\n \"PUT /api/tasks/:id body\"\n );\n } catch {\n return c.json({ error: \"Invalid JSON body\" }, 400);\n }\n\n const args = [\"task\", \"update\", id];\n if (body.description) args.push(\"-d\", body.description);\n if (body.context) args.push(\"--context\", body.context);\n if (body.priority) args.push(\"--priority\", String(body.priority));\n\n // Must have at least one field to update\n if (args.length === 3) {\n return c.json({ error: \"No fields to update\" }, 400);\n }\n\n try {\n const result = decodeTask(await callCli(args)).unwrap(\"PUT /api/tasks/:id\");\n return c.json(result);\n } catch (err) {\n return handleCliError(c, err);\n }\n })\n\n /**\n * DELETE /api/tasks/:id\n * Delete task (cascades to children and learnings)\n */\n .delete(\"/:id\", async (c) => {\n const id = c.req.param(\"id\");\n if (!isTaskId(id)) {\n return c.json({ error: `Invalid task ID: ${id}` }, 400);\n }\n\n try {\n await callCli([\"task\", \"delete\", id]);\n return c.json({ deleted: true });\n } catch (err) {\n return handleCliError(c, err);\n }\n })\n\n /**\n * POST /api/tasks/:id/complete\n * Complete task with optional result and learnings\n */\n .post(\"/:id/complete\", async (c) => {\n const id = c.req.param(\"id\");\n if (!isTaskId(id)) {\n return c.json({ error: `Invalid task ID: ${id}` }, 400);\n }\n\n let body;\n try {\n const text = await c.req.text();\n if (text) {\n body = decodeCompleteTaskRequest(JSON.parse(text)).unwrap(\n \"POST /api/tasks/:id/complete body\"\n );\n } else {\n body = {};\n }\n } catch {\n return c.json({ error: \"Invalid JSON body\" }, 400);\n }\n\n const args = [\"task\", \"complete\", id];\n if (body.result) args.push(\"--result\", body.result);\n if (body.learnings) {\n for (const learning of body.learnings) {\n args.push(\"--learning\", learning);\n }\n }\n\n try {\n const result = decodeTask(await callCli(args)).unwrap(\"POST /api/tasks/:id/complete\");\n return c.json(result);\n } catch (err) {\n return handleCliError(c, err);\n }\n })\n\n /**\n * POST /api/tasks/:id/reopen\n * Reopen a completed task\n */\n .post(\"/:id/reopen\", async (c) => {\n const id = c.req.param(\"id\");\n if (!isTaskId(id)) {\n return c.json({ error: `Invalid task ID: ${id}` }, 400);\n }\n\n try {\n const result = decodeTask(await callCli([\"task\", \"reopen\", id])).unwrap(\n \"POST /api/tasks/:id/reopen\"\n );\n return c.json(result);\n } catch (err) {\n return handleCliError(c, err);\n }\n })\n\n /**\n * GET /api/tasks/:taskId/learnings\n * List all learnings for a task\n * Includes learnings bubbled from completed child tasks\n */\n .get(\"/:taskId/learnings\", async (c) => {\n const taskId = c.req.param(\"taskId\");\n if (!isTaskId(taskId)) {\n return c.json({ error: `Invalid task ID: ${taskId}` }, 400);\n }\n\n try {\n const result = decodeLearnings(await callCli([\n \"learning\",\n \"list\",\n taskId,\n ])).unwrap(\"GET /api/tasks/:taskId/learnings\");\n return c.json(result);\n } catch (err) {\n return handleCliError(c, err);\n }\n });\n\nexport { tasks };\n", "/**\n * CLI bridge - spawns `os` binary and parses JSON output\n */\nimport { spawn } from \"node:child_process\";\nimport { CliError, CliTimeoutError } from \"../types.js\";\n\nconst CLI_TIMEOUT_MS = 30_000;\n\n// Allow override via env var (useful for tests)\nconst CLI_PATH = process.env.OVERSEER_CLI_PATH ?? \"os\";\nconst CLI_CWD = process.env.OVERSEER_CLI_CWD ?? process.cwd();\n\n/**\n * Execute os CLI command with --json flag\n */\nexport async function callCli(args: string[]): Promise<unknown> {\n return new Promise((resolve, reject) => {\n const proc = spawn(CLI_PATH, [...args, \"--json\"], {\n cwd: CLI_CWD,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n\n const timeout = setTimeout(() => {\n proc.kill(\"SIGTERM\");\n reject(new CliTimeoutError());\n }, CLI_TIMEOUT_MS);\n\n let stdout = \"\";\n let stderr = \"\";\n\n proc.stdout.on(\"data\", (chunk: Buffer) => {\n stdout += chunk.toString();\n });\n\n proc.stderr.on(\"data\", (chunk: Buffer) => {\n stderr += chunk.toString();\n });\n\n proc.on(\"error\", (err) => {\n clearTimeout(timeout);\n reject(new CliError(`Failed to spawn os: ${err.message}`, -1, \"\"));\n });\n\n proc.on(\"close\", (code) => {\n clearTimeout(timeout);\n\n if (code !== 0) {\n const message = stderr.trim() || `os exited with code ${code}`;\n reject(new CliError(message, code ?? -1, stderr));\n return;\n }\n\n try {\n const result: unknown = JSON.parse(stdout);\n resolve(result);\n } catch (err) {\n reject(\n new CliError(\n `Invalid JSON from os: ${err instanceof Error ? err.message : String(err)}`,\n 0,\n stdout\n )\n );\n }\n });\n });\n}\n", "/**\n * Shared types for Overseer UI API\n * Mirrors mcp/src/types.ts (camelCase from Rust serde)\n */\n\n// Branded types for type-safe IDs\ndeclare const TaskIdBrand: unique symbol;\ndeclare const LearningIdBrand: unique symbol;\n\nexport type TaskId = string & { readonly [TaskIdBrand]: never };\nexport type LearningId = string & { readonly [LearningIdBrand]: never };\n\n// Validation helpers\nexport function isTaskId(s: string): s is TaskId {\n return s.startsWith(\"task_\") && s.length === 31; // \"task_\" + 26 ULID chars\n}\n\nexport function isLearningId(s: string): s is LearningId {\n return s.startsWith(\"lrn_\") && s.length === 30; // \"lrn_\" + 26 ULID chars\n}\n\nexport function parseTaskId(s: string): TaskId {\n if (!isTaskId(s)) {\n throw new Error(`Invalid TaskId: ${s}`);\n }\n return s;\n}\n\nexport function parseLearningId(s: string): LearningId {\n if (!isLearningId(s)) {\n throw new Error(`Invalid LearningId: ${s}`);\n }\n return s;\n}\n\n/**\n * Task context chain (inherited from hierarchy)\n */\nexport interface TaskContext {\n own: string;\n parent?: string;\n milestone?: string;\n}\n\n/**\n * Inherited learnings (own task + ancestors)\n */\nexport interface InheritedLearnings {\n /** Learnings attached directly to this task (bubbled from completed children) */\n own: Learning[];\n /** Learnings from parent task (depth > 0) */\n parent: Learning[];\n /** Learnings from root milestone (depth > 1) */\n milestone: Learning[];\n}\n\n/**\n * Priority levels (enforced by Rust, 1-5)\n */\nexport type Priority = 1 | 2 | 3 | 4 | 5;\n\n/**\n * Task depth (0=milestone, 1=task, 2=subtask)\n */\nexport type Depth = 0 | 1 | 2;\n\n/**\n * Task returned from list/create/update/start/complete/reopen\n * Does NOT include context chain or inherited learnings\n */\nexport interface Task {\n id: TaskId;\n parentId: TaskId | null;\n description: string;\n priority: Priority;\n completed: boolean;\n completedAt: string | null;\n startedAt: string | null;\n createdAt: string;\n updatedAt: string;\n result: string | null;\n commitSha: string | null;\n depth: Depth;\n blockedBy?: TaskId[];\n blocks?: TaskId[];\n bookmark?: string;\n startCommit?: string;\n /** Computed: true if task or any ancestor has incomplete blockers */\n effectivelyBlocked: boolean;\n}\n\n/**\n * Task returned from get/nextReady - includes context chain and inherited learnings\n */\nexport interface TaskWithContext extends Task {\n context: TaskContext;\n learnings: InheritedLearnings;\n}\n\nexport interface Learning {\n id: LearningId;\n taskId: TaskId;\n content: string;\n sourceTaskId: TaskId | null;\n createdAt: string;\n}\n\n/**\n * CLI command errors\n */\nexport class CliError extends Error {\n constructor(\n message: string,\n public exitCode: number,\n public stderr: string\n ) {\n super(message);\n this.name = \"CliError\";\n }\n}\n\nexport class CliTimeoutError extends Error {\n constructor(message = \"CLI command timeout (30s)\") {\n super(message);\n this.name = \"CliTimeoutError\";\n }\n}\n\n// Request/Response types for API\n\nexport interface UpdateTaskRequest {\n description?: string;\n context?: string;\n priority?: Priority;\n}\n\nexport interface CompleteTaskRequest {\n result?: string;\n learnings?: string[];\n}\n\nexport interface TaskFilter {\n parentId?: string;\n ready?: boolean;\n completed?: boolean;\n}\n\nexport interface ApiError {\n error: string;\n code?: string;\n}\n", "/**\n * Runtime decoders for CLI JSON output.\n * Validates structure matches expected types at runtime.\n */\nimport { Result, TaggedError } from \"better-result\";\nimport {\n isTaskId,\n isLearningId,\n type Task,\n type TaskWithContext,\n type Learning,\n type TaskId,\n type LearningId,\n type Priority,\n type Depth,\n type TaskContext,\n type InheritedLearnings,\n type UpdateTaskRequest,\n type CompleteTaskRequest,\n} from \"./types.js\";\n\n/**\n * Decode error with path context\n */\nexport class DecodeError extends TaggedError(\"DecodeError\")<{\n message: string;\n path?: string;\n}>() {}\n\n// Helper to check if value is a plain object\nfunction isObject(v: unknown): v is Record<string, unknown> {\n return typeof v === \"object\" && v !== null && !Array.isArray(v);\n}\n\n// Helper to check if value is string\nfunction isString(v: unknown): v is string {\n return typeof v === \"string\";\n}\n\n// Helper to check if value is boolean\nfunction isBoolean(v: unknown): v is boolean {\n return typeof v === \"boolean\";\n}\n\n// Helper to check if value is number\nfunction isNumber(v: unknown): v is number {\n return typeof v === \"number\";\n}\n\n// Helper to check valid priority\nfunction isPriority(v: unknown): v is Priority {\n return isNumber(v) && v >= 1 && v <= 5 && Number.isInteger(v);\n}\n\n// Helper to check valid depth\nfunction isDepth(v: unknown): v is Depth {\n return v === 0 || v === 1 || v === 2;\n}\n\n/**\n * Decode a Learning from unknown JSON\n */\nexport function decodeLearning(v: unknown): Result<Learning, DecodeError> {\n if (!isObject(v)) {\n return Result.err(new DecodeError({ message: \"Learning must be object\" }));\n }\n\n const { id, taskId, content, sourceTaskId, createdAt } = v;\n\n if (!isString(id) || !isLearningId(id)) {\n return Result.err(new DecodeError({ message: `Invalid learning id: ${id}` }));\n }\n if (!isString(taskId) || !isTaskId(taskId)) {\n return Result.err(new DecodeError({ message: `Invalid learning taskId: ${taskId}` }));\n }\n if (!isString(content)) {\n return Result.err(new DecodeError({ message: \"Learning content must be string\" }));\n }\n if (sourceTaskId !== null && (!isString(sourceTaskId) || !isTaskId(sourceTaskId))) {\n return Result.err(new DecodeError({ message: `Invalid learning sourceTaskId: ${sourceTaskId}` }));\n }\n if (!isString(createdAt)) {\n return Result.err(new DecodeError({ message: \"Learning createdAt must be string\" }));\n }\n\n return Result.ok({\n id: id as LearningId,\n taskId: taskId as TaskId,\n content,\n sourceTaskId: sourceTaskId as TaskId | null,\n createdAt,\n });\n}\n\n/**\n * Decode a Learning array\n */\nexport function decodeLearnings(v: unknown): Result<Learning[], DecodeError> {\n if (!Array.isArray(v)) {\n return Result.err(new DecodeError({ message: \"Learnings must be array\" }));\n }\n\n const learnings: Learning[] = [];\n for (let i = 0; i < v.length; i++) {\n const result = decodeLearning(v[i]);\n if (result.isErr()) {\n return Result.err(new DecodeError({ \n message: result.error.message, \n path: `learnings[${i}]` \n }));\n }\n learnings.push(result.value);\n }\n return Result.ok(learnings);\n}\n\n/**\n * Decode a Task from unknown JSON\n */\nexport function decodeTask(v: unknown): Result<Task, DecodeError> {\n if (!isObject(v)) {\n return Result.err(new DecodeError({ message: \"Task must be object\" }));\n }\n\n const {\n id,\n parentId,\n description,\n priority,\n completed,\n completedAt,\n startedAt,\n createdAt,\n updatedAt,\n result,\n commitSha,\n depth,\n blockedBy,\n blocks,\n bookmark,\n startCommit,\n effectivelyBlocked,\n } = v;\n\n // Required fields\n if (!isString(id) || !isTaskId(id)) {\n return Result.err(new DecodeError({ message: `Invalid task id: ${id}` }));\n }\n if (parentId !== null && (!isString(parentId) || !isTaskId(parentId))) {\n return Result.err(new DecodeError({ message: `Invalid task parentId: ${parentId}` }));\n }\n if (!isString(description)) {\n return Result.err(new DecodeError({ message: \"Task description must be string\" }));\n }\n if (!isPriority(priority)) {\n return Result.err(new DecodeError({ message: `Invalid task priority: ${priority}` }));\n }\n if (!isBoolean(completed)) {\n return Result.err(new DecodeError({ message: \"Task completed must be boolean\" }));\n }\n if (completedAt !== null && !isString(completedAt)) {\n return Result.err(new DecodeError({ message: \"Task completedAt must be string or null\" }));\n }\n if (startedAt !== null && !isString(startedAt)) {\n return Result.err(new DecodeError({ message: \"Task startedAt must be string or null\" }));\n }\n if (!isString(createdAt)) {\n return Result.err(new DecodeError({ message: \"Task createdAt must be string\" }));\n }\n if (!isString(updatedAt)) {\n return Result.err(new DecodeError({ message: \"Task updatedAt must be string\" }));\n }\n if (result !== null && !isString(result)) {\n return Result.err(new DecodeError({ message: \"Task result must be string or null\" }));\n }\n if (commitSha !== null && !isString(commitSha)) {\n return Result.err(new DecodeError({ message: \"Task commitSha must be string or null\" }));\n }\n if (!isDepth(depth)) {\n return Result.err(new DecodeError({ message: `Invalid task depth: ${depth}` }));\n }\n if (!isBoolean(effectivelyBlocked)) {\n return Result.err(new DecodeError({ message: \"Task effectivelyBlocked must be boolean\" }));\n }\n\n // Optional array fields\n let decodedBlockedBy: TaskId[] | undefined;\n if (blockedBy !== undefined) {\n if (!Array.isArray(blockedBy)) {\n return Result.err(new DecodeError({ message: \"Task blockedBy must be array\" }));\n }\n decodedBlockedBy = [];\n for (const bid of blockedBy) {\n if (!isString(bid) || !isTaskId(bid)) {\n return Result.err(new DecodeError({ message: `Invalid blocker id: ${bid}` }));\n }\n decodedBlockedBy.push(bid as TaskId);\n }\n }\n\n let decodedBlocks: TaskId[] | undefined;\n if (blocks !== undefined) {\n if (!Array.isArray(blocks)) {\n return Result.err(new DecodeError({ message: \"Task blocks must be array\" }));\n }\n decodedBlocks = [];\n for (const bid of blocks) {\n if (!isString(bid) || !isTaskId(bid)) {\n return Result.err(new DecodeError({ message: `Invalid blocks id: ${bid}` }));\n }\n decodedBlocks.push(bid as TaskId);\n }\n }\n\n // Optional string fields\n if (bookmark !== undefined && !isString(bookmark)) {\n return Result.err(new DecodeError({ message: \"Task bookmark must be string\" }));\n }\n if (startCommit !== undefined && !isString(startCommit)) {\n return Result.err(new DecodeError({ message: \"Task startCommit must be string\" }));\n }\n\n const task: Task = {\n id: id as TaskId,\n parentId: parentId as TaskId | null,\n description,\n priority: priority as Priority,\n completed,\n completedAt: completedAt as string | null,\n startedAt: startedAt as string | null,\n createdAt,\n updatedAt,\n result: result as string | null,\n commitSha: commitSha as string | null,\n depth: depth as Depth,\n effectivelyBlocked,\n };\n\n if (decodedBlockedBy) task.blockedBy = decodedBlockedBy;\n if (decodedBlocks) task.blocks = decodedBlocks;\n if (bookmark !== undefined) task.bookmark = bookmark as string;\n if (startCommit !== undefined) task.startCommit = startCommit as string;\n\n return Result.ok(task);\n}\n\n/**\n * Decode a Task array\n */\nexport function decodeTasks(v: unknown): Result<Task[], DecodeError> {\n if (!Array.isArray(v)) {\n return Result.err(new DecodeError({ message: \"Tasks must be array\" }));\n }\n\n const tasks: Task[] = [];\n for (let i = 0; i < v.length; i++) {\n const result = decodeTask(v[i]);\n if (result.isErr()) {\n return Result.err(new DecodeError({ \n message: result.error.message, \n path: `tasks[${i}]` \n }));\n }\n tasks.push(result.value);\n }\n return Result.ok(tasks);\n}\n\n/**\n * Decode TaskContext from unknown JSON\n */\nfunction decodeTaskContext(v: unknown): Result<TaskContext, DecodeError> {\n if (!isObject(v)) {\n return Result.err(new DecodeError({ message: \"TaskContext must be object\" }));\n }\n\n const { own, parent, milestone } = v;\n\n if (!isString(own)) {\n return Result.err(new DecodeError({ message: \"TaskContext.own must be string\" }));\n }\n if (parent !== undefined && !isString(parent)) {\n return Result.err(new DecodeError({ message: \"TaskContext.parent must be string\" }));\n }\n if (milestone !== undefined && !isString(milestone)) {\n return Result.err(new DecodeError({ message: \"TaskContext.milestone must be string\" }));\n }\n\n const ctx: TaskContext = { own };\n if (parent !== undefined) ctx.parent = parent;\n if (milestone !== undefined) ctx.milestone = milestone;\n return Result.ok(ctx);\n}\n\n/**\n * Decode InheritedLearnings from unknown JSON\n */\nfunction decodeInheritedLearnings(v: unknown): Result<InheritedLearnings, DecodeError> {\n if (!isObject(v)) {\n return Result.err(new DecodeError({ message: \"InheritedLearnings must be object\" }));\n }\n\n const { own, parent, milestone } = v;\n\n // All fields should be arrays (possibly empty due to skip_serializing_if)\n const ownResult = decodeLearnings(own ?? []);\n if (ownResult.isErr()) {\n return Result.err(new DecodeError({ message: ownResult.error.message, path: \"learnings.own\" }));\n }\n\n const parentResult = decodeLearnings(parent ?? []);\n if (parentResult.isErr()) {\n return Result.err(new DecodeError({ message: parentResult.error.message, path: \"learnings.parent\" }));\n }\n\n const milestoneResult = decodeLearnings(milestone ?? []);\n if (milestoneResult.isErr()) {\n return Result.err(new DecodeError({ message: milestoneResult.error.message, path: \"learnings.milestone\" }));\n }\n\n return Result.ok({\n own: ownResult.value,\n parent: parentResult.value,\n milestone: milestoneResult.value,\n });\n}\n\n/**\n * Decode TaskWithContext from unknown JSON\n */\nexport function decodeTaskWithContext(v: unknown): Result<TaskWithContext, DecodeError> {\n if (!isObject(v)) {\n return Result.err(new DecodeError({ message: \"TaskWithContext must be object\" }));\n }\n\n // First decode the base task fields\n const taskResult = decodeTask(v);\n if (taskResult.isErr()) return taskResult;\n\n // Then decode context and learnings\n const { context, learnings } = v;\n\n const ctxResult = decodeTaskContext(context);\n if (ctxResult.isErr()) {\n return Result.err(new DecodeError({ message: ctxResult.error.message, path: \"context\" }));\n }\n\n const lrnResult = decodeInheritedLearnings(learnings);\n if (lrnResult.isErr()) {\n return Result.err(new DecodeError({ message: lrnResult.error.message, path: \"learnings\" }));\n }\n\n return Result.ok({\n ...taskResult.value,\n context: ctxResult.value,\n learnings: lrnResult.value,\n });\n}\n\n/**\n * Decode nullable TaskWithContext (for nextReady)\n */\nexport function decodeTaskWithContextOrNull(\n v: unknown\n): Result<TaskWithContext | null, DecodeError> {\n if (v === null) return Result.ok(null);\n return decodeTaskWithContext(v);\n}\n\n/**\n * Decode UpdateTaskRequest from request body\n */\nexport function decodeUpdateTaskRequest(v: unknown): Result<UpdateTaskRequest, DecodeError> {\n if (!isObject(v)) {\n return Result.err(new DecodeError({ message: \"UpdateTaskRequest must be object\" }));\n }\n\n const { description, context, priority } = v;\n\n const req: UpdateTaskRequest = {};\n\n if (description !== undefined) {\n if (!isString(description)) {\n return Result.err(new DecodeError({ message: \"description must be string\" }));\n }\n req.description = description;\n }\n if (context !== undefined) {\n if (!isString(context)) {\n return Result.err(new DecodeError({ message: \"context must be string\" }));\n }\n req.context = context;\n }\n if (priority !== undefined) {\n if (!isPriority(priority)) {\n return Result.err(new DecodeError({ message: `Invalid priority: ${priority}` }));\n }\n req.priority = priority;\n }\n\n return Result.ok(req);\n}\n\n/**\n * Decode CompleteTaskRequest from request body\n */\nexport function decodeCompleteTaskRequest(v: unknown): Result<CompleteTaskRequest, DecodeError> {\n if (!isObject(v)) {\n return Result.err(new DecodeError({ message: \"CompleteTaskRequest must be object\" }));\n }\n\n const { result, learnings } = v;\n\n const req: CompleteTaskRequest = {};\n\n if (result !== undefined) {\n if (!isString(result)) {\n return Result.err(new DecodeError({ message: \"result must be string\" }));\n }\n req.result = result;\n }\n if (learnings !== undefined) {\n if (!Array.isArray(learnings)) {\n return Result.err(new DecodeError({ message: \"learnings must be array\" }));\n }\n for (let i = 0; i < learnings.length; i++) {\n if (!isString(learnings[i])) {\n return Result.err(new DecodeError({ message: `learnings[${i}] must be string` }));\n }\n }\n req.learnings = learnings as string[];\n }\n\n return Result.ok(req);\n}\n"],
5
- "mappings": ";AAAA,OAAS,SAAAA,OAAa,oBCAtB,OAAS,QAAAC,MAAY,OACrB,OAAS,eAAAC,MAAmB,iCCK5B,OAAS,QAAAC,OAA0B,OCHnC,OAAS,SAAAC,MAAa,qBCUf,SAASC,EAASC,EAAwB,CAC/C,OAAOA,EAAE,WAAW,OAAO,GAAKA,EAAE,SAAW,EAC/C,CAEO,SAASC,EAAaD,EAA4B,CACvD,OAAOA,EAAE,WAAW,MAAM,GAAKA,EAAE,SAAW,EAC9C,CA2FO,IAAME,EAAN,cAAuB,KAAM,CAClC,YACEC,EACOC,EACAC,EACP,CACA,MAAMF,CAAO,EAHN,cAAAC,EACA,YAAAC,EAGP,KAAK,KAAO,UACd,CACF,EAEaC,EAAN,cAA8B,KAAM,CACzC,YAAYH,EAAU,4BAA6B,CACjD,MAAMA,CAAO,EACb,KAAK,KAAO,iBACd,CACF,EDxHA,IAAMI,EAAiB,IAGjBC,EAAW,QAAQ,IAAI,mBAAqB,KAC5CC,EAAU,QAAQ,IAAI,kBAAoB,QAAQ,IAAI,EAK5D,eAAsBC,EAAQC,EAAkC,CAC9D,OAAO,IAAI,QAAQ,CAACC,EAASC,IAAW,CACtC,IAAMC,EAAOC,EAAMP,EAAU,CAAC,GAAGG,EAAM,QAAQ,EAAG,CAChD,IAAKF,EACL,MAAO,CAAC,SAAU,OAAQ,MAAM,CAClC,CAAC,EAEKO,EAAU,WAAW,IAAM,CAC/BF,EAAK,KAAK,SAAS,EACnBD,EAAO,IAAII,CAAiB,CAC9B,EAAGV,CAAc,EAEbW,EAAS,GACTC,EAAS,GAEbL,EAAK,OAAO,GAAG,OAASM,GAAkB,CACxCF,GAAUE,EAAM,SAAS,CAC3B,CAAC,EAEDN,EAAK,OAAO,GAAG,OAASM,GAAkB,CACxCD,GAAUC,EAAM,SAAS,CAC3B,CAAC,EAEDN,EAAK,GAAG,QAAUO,GAAQ,CACxB,aAAaL,CAAO,EACpBH,EAAO,IAAIS,EAAS,uBAAuBD,EAAI,OAAO,GAAI,GAAI,EAAE,CAAC,CACnE,CAAC,EAEDP,EAAK,GAAG,QAAUS,GAAS,CAGzB,GAFA,aAAaP,CAAO,EAEhBO,IAAS,EAAG,CACd,IAAMC,EAAUL,EAAO,KAAK,GAAK,uBAAuBI,CAAI,GAC5DV,EAAO,IAAIS,EAASE,EAASD,GAAQ,GAAIJ,CAAM,CAAC,EAChD,MACF,CAEA,GAAI,CACF,IAAMM,EAAkB,KAAK,MAAMP,CAAM,EACzCN,EAAQa,CAAM,CAChB,OAASJ,EAAK,CACZR,EACE,IAAIS,EACF,yBAAyBD,aAAe,MAAQA,EAAI,QAAU,OAAOA,CAAG,CAAC,GACzE,EACAH,CACF,CACF,CACF,CACF,CAAC,CACH,CAAC,CACH,CE9DA,OAAS,UAAAQ,EAAQ,eAAAC,MAAmB,gBAoB7B,IAAMC,EAAN,cAA0BC,EAAY,aAAa,EAGvD,CAAE,CAAC,EAGN,SAASC,EAASC,EAA0C,CAC1D,OAAO,OAAOA,GAAM,UAAYA,IAAM,MAAQ,CAAC,MAAM,QAAQA,CAAC,CAChE,CAGA,SAASC,EAASD,EAAyB,CACzC,OAAO,OAAOA,GAAM,QACtB,CAGA,SAASE,EAAUF,EAA0B,CAC3C,OAAO,OAAOA,GAAM,SACtB,CAGA,SAASG,EAASH,EAAyB,CACzC,OAAO,OAAOA,GAAM,QACtB,CAGA,SAASI,EAAWJ,EAA2B,CAC7C,OAAOG,EAASH,CAAC,GAAKA,GAAK,GAAKA,GAAK,GAAK,OAAO,UAAUA,CAAC,CAC9D,CAGA,SAASK,EAAQL,EAAwB,CACvC,OAAOA,IAAM,GAAKA,IAAM,GAAKA,IAAM,CACrC,CAKO,SAASM,EAAeN,EAA2C,CACxE,GAAI,CAACD,EAASC,CAAC,EACb,OAAOO,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,yBAA0B,CAAC,CAAC,EAG3E,GAAM,CAAE,GAAAW,EAAI,OAAAC,EAAQ,QAAAC,EAAS,aAAAC,EAAc,UAAAC,CAAU,EAAIZ,EAEzD,MAAI,CAACC,EAASO,CAAE,GAAK,CAACK,EAAaL,CAAE,EAC5BD,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,wBAAwBW,CAAE,EAAG,CAAC,CAAC,EAE1E,CAACP,EAASQ,CAAM,GAAK,CAACK,EAASL,CAAM,EAChCF,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,4BAA4BY,CAAM,EAAG,CAAC,CAAC,EAEjFR,EAASS,CAAO,EAGjBC,IAAiB,OAAS,CAACV,EAASU,CAAY,GAAK,CAACG,EAASH,CAAY,GACtEJ,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,kCAAkCc,CAAY,EAAG,CAAC,CAAC,EAE7FV,EAASW,CAAS,EAIhBL,EAAO,GAAG,CACf,GAAIC,EACJ,OAAQC,EACR,QAAAC,EACA,aAAcC,EACd,UAAAC,CACF,CAAC,EATQL,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,mCAAoC,CAAC,CAAC,EAN5EU,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,iCAAkC,CAAC,CAAC,CAgBrF,CAKO,SAASkB,EAAgBf,EAA6C,CAC3E,GAAI,CAAC,MAAM,QAAQA,CAAC,EAClB,OAAOO,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,yBAA0B,CAAC,CAAC,EAG3E,IAAMmB,EAAwB,CAAC,EAC/B,QAASC,EAAI,EAAGA,EAAIjB,EAAE,OAAQiB,IAAK,CACjC,IAAMC,EAASZ,EAAeN,EAAEiB,CAAC,CAAC,EAClC,GAAIC,EAAO,MAAM,EACf,OAAOX,EAAO,IAAI,IAAIV,EAAY,CAChC,QAASqB,EAAO,MAAM,QACtB,KAAM,aAAaD,CAAC,GACtB,CAAC,CAAC,EAEJD,EAAU,KAAKE,EAAO,KAAK,CAC7B,CACA,OAAOX,EAAO,GAAGS,CAAS,CAC5B,CAKO,SAASG,EAAWnB,EAAuC,CAChE,GAAI,CAACD,EAASC,CAAC,EACb,OAAOO,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,qBAAsB,CAAC,CAAC,EAGvE,GAAM,CACJ,GAAAW,EACA,SAAAY,EACA,YAAAC,EACA,SAAAC,EACA,UAAAC,EACA,YAAAC,EACA,UAAAC,EACA,UAAAb,EACA,UAAAc,EACA,OAAAR,EACA,UAAAS,EACA,MAAAC,EACA,UAAAC,EACA,OAAAC,EACA,SAAAC,EACA,YAAAC,EACA,mBAAAC,CACF,EAAIjC,EAGJ,GAAI,CAACC,EAASO,CAAE,GAAK,CAACM,EAASN,CAAE,EAC/B,OAAOD,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,oBAAoBW,CAAE,EAAG,CAAC,CAAC,EAE1E,GAAIY,IAAa,OAAS,CAACnB,EAASmB,CAAQ,GAAK,CAACN,EAASM,CAAQ,GACjE,OAAOb,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,0BAA0BuB,CAAQ,EAAG,CAAC,CAAC,EAEtF,GAAI,CAACnB,EAASoB,CAAW,EACvB,OAAOd,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,iCAAkC,CAAC,CAAC,EAEnF,GAAI,CAACO,EAAWkB,CAAQ,EACtB,OAAOf,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,0BAA0ByB,CAAQ,EAAG,CAAC,CAAC,EAEtF,GAAI,CAACpB,EAAUqB,CAAS,EACtB,OAAOhB,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,gCAAiC,CAAC,CAAC,EAElF,GAAI2B,IAAgB,MAAQ,CAACvB,EAASuB,CAAW,EAC/C,OAAOjB,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,yCAA0C,CAAC,CAAC,EAE3F,GAAI4B,IAAc,MAAQ,CAACxB,EAASwB,CAAS,EAC3C,OAAOlB,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,uCAAwC,CAAC,CAAC,EAEzF,GAAI,CAACI,EAASW,CAAS,EACrB,OAAOL,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,+BAAgC,CAAC,CAAC,EAEjF,GAAI,CAACI,EAASyB,CAAS,EACrB,OAAOnB,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,+BAAgC,CAAC,CAAC,EAEjF,GAAIqB,IAAW,MAAQ,CAACjB,EAASiB,CAAM,EACrC,OAAOX,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,oCAAqC,CAAC,CAAC,EAEtF,GAAI8B,IAAc,MAAQ,CAAC1B,EAAS0B,CAAS,EAC3C,OAAOpB,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,uCAAwC,CAAC,CAAC,EAEzF,GAAI,CAACQ,EAAQuB,CAAK,EAChB,OAAOrB,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,uBAAuB+B,CAAK,EAAG,CAAC,CAAC,EAEhF,GAAI,CAAC1B,EAAU+B,CAAkB,EAC/B,OAAO1B,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,yCAA0C,CAAC,CAAC,EAI3F,IAAIqC,EACJ,GAAIL,IAAc,OAAW,CAC3B,GAAI,CAAC,MAAM,QAAQA,CAAS,EAC1B,OAAOtB,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,8BAA+B,CAAC,CAAC,EAEhFqC,EAAmB,CAAC,EACpB,QAAWC,KAAON,EAAW,CAC3B,GAAI,CAAC5B,EAASkC,CAAG,GAAK,CAACrB,EAASqB,CAAG,EACjC,OAAO5B,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,uBAAuBsC,CAAG,EAAG,CAAC,CAAC,EAE9ED,EAAiB,KAAKC,CAAa,CACrC,CACF,CAEA,IAAIC,EACJ,GAAIN,IAAW,OAAW,CACxB,GAAI,CAAC,MAAM,QAAQA,CAAM,EACvB,OAAOvB,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,2BAA4B,CAAC,CAAC,EAE7EuC,EAAgB,CAAC,EACjB,QAAWD,KAAOL,EAAQ,CACxB,GAAI,CAAC7B,EAASkC,CAAG,GAAK,CAACrB,EAASqB,CAAG,EACjC,OAAO5B,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,sBAAsBsC,CAAG,EAAG,CAAC,CAAC,EAE7EC,EAAc,KAAKD,CAAa,CAClC,CACF,CAGA,GAAIJ,IAAa,QAAa,CAAC9B,EAAS8B,CAAQ,EAC9C,OAAOxB,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,8BAA+B,CAAC,CAAC,EAEhF,GAAImC,IAAgB,QAAa,CAAC/B,EAAS+B,CAAW,EACpD,OAAOzB,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,iCAAkC,CAAC,CAAC,EAGnF,IAAMwC,EAAa,CACjB,GAAI7B,EACJ,SAAUY,EACV,YAAAC,EACA,SAAUC,EACV,UAAAC,EACA,YAAaC,EACb,UAAWC,EACX,UAAAb,EACA,UAAAc,EACA,OAAQR,EACR,UAAWS,EACX,MAAOC,EACP,mBAAAK,CACF,EAEA,OAAIC,IAAkBG,EAAK,UAAYH,GACnCE,IAAeC,EAAK,OAASD,GAC7BL,IAAa,SAAWM,EAAK,SAAWN,GACxCC,IAAgB,SAAWK,EAAK,YAAcL,GAE3CzB,EAAO,GAAG8B,CAAI,CACvB,CAKO,SAASC,EAAYtC,EAAyC,CACnE,GAAI,CAAC,MAAM,QAAQA,CAAC,EAClB,OAAOO,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,qBAAsB,CAAC,CAAC,EAGvE,IAAM0C,EAAgB,CAAC,EACvB,QAAStB,EAAI,EAAGA,EAAIjB,EAAE,OAAQiB,IAAK,CACjC,IAAMC,EAASC,EAAWnB,EAAEiB,CAAC,CAAC,EAC9B,GAAIC,EAAO,MAAM,EACf,OAAOX,EAAO,IAAI,IAAIV,EAAY,CAChC,QAASqB,EAAO,MAAM,QACtB,KAAM,SAASD,CAAC,GAClB,CAAC,CAAC,EAEJsB,EAAM,KAAKrB,EAAO,KAAK,CACzB,CACA,OAAOX,EAAO,GAAGgC,CAAK,CACxB,CAKA,SAASC,EAAkBxC,EAA8C,CACvE,GAAI,CAACD,EAASC,CAAC,EACb,OAAOO,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,4BAA6B,CAAC,CAAC,EAG9E,GAAM,CAAE,IAAA4C,EAAK,OAAAC,EAAQ,UAAAC,CAAU,EAAI3C,EAEnC,GAAI,CAACC,EAASwC,CAAG,EACf,OAAOlC,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,gCAAiC,CAAC,CAAC,EAElF,GAAI6C,IAAW,QAAa,CAACzC,EAASyC,CAAM,EAC1C,OAAOnC,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,mCAAoC,CAAC,CAAC,EAErF,GAAI8C,IAAc,QAAa,CAAC1C,EAAS0C,CAAS,EAChD,OAAOpC,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,sCAAuC,CAAC,CAAC,EAGxF,IAAM+C,EAAmB,CAAE,IAAAH,CAAI,EAC/B,OAAIC,IAAW,SAAWE,EAAI,OAASF,GACnCC,IAAc,SAAWC,EAAI,UAAYD,GACtCpC,EAAO,GAAGqC,CAAG,CACtB,CAKA,SAASC,GAAyB7C,EAAqD,CACrF,GAAI,CAACD,EAASC,CAAC,EACb,OAAOO,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,mCAAoC,CAAC,CAAC,EAGrF,GAAM,CAAE,IAAA4C,EAAK,OAAAC,EAAQ,UAAAC,CAAU,EAAI3C,EAG7B8C,EAAY/B,EAAgB0B,GAAO,CAAC,CAAC,EAC3C,GAAIK,EAAU,MAAM,EAClB,OAAOvC,EAAO,IAAI,IAAIV,EAAY,CAAE,QAASiD,EAAU,MAAM,QAAS,KAAM,eAAgB,CAAC,CAAC,EAGhG,IAAMC,EAAehC,EAAgB2B,GAAU,CAAC,CAAC,EACjD,GAAIK,EAAa,MAAM,EACrB,OAAOxC,EAAO,IAAI,IAAIV,EAAY,CAAE,QAASkD,EAAa,MAAM,QAAS,KAAM,kBAAmB,CAAC,CAAC,EAGtG,IAAMC,EAAkBjC,EAAgB4B,GAAa,CAAC,CAAC,EACvD,OAAIK,EAAgB,MAAM,EACjBzC,EAAO,IAAI,IAAIV,EAAY,CAAE,QAASmD,EAAgB,MAAM,QAAS,KAAM,qBAAsB,CAAC,CAAC,EAGrGzC,EAAO,GAAG,CACf,IAAKuC,EAAU,MACf,OAAQC,EAAa,MACrB,UAAWC,EAAgB,KAC7B,CAAC,CACH,CAKO,SAASC,EAAsBjD,EAAkD,CACtF,GAAI,CAACD,EAASC,CAAC,EACb,OAAOO,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,gCAAiC,CAAC,CAAC,EAIlF,IAAMqD,EAAa/B,EAAWnB,CAAC,EAC/B,GAAIkD,EAAW,MAAM,EAAG,OAAOA,EAG/B,GAAM,CAAE,QAAAC,EAAS,UAAAnC,CAAU,EAAIhB,EAEzBoD,EAAYZ,EAAkBW,CAAO,EAC3C,GAAIC,EAAU,MAAM,EAClB,OAAO7C,EAAO,IAAI,IAAIV,EAAY,CAAE,QAASuD,EAAU,MAAM,QAAS,KAAM,SAAU,CAAC,CAAC,EAG1F,IAAMC,EAAYR,GAAyB7B,CAAS,EACpD,OAAIqC,EAAU,MAAM,EACX9C,EAAO,IAAI,IAAIV,EAAY,CAAE,QAASwD,EAAU,MAAM,QAAS,KAAM,WAAY,CAAC,CAAC,EAGrF9C,EAAO,GAAG,CACf,GAAG2C,EAAW,MACd,QAASE,EAAU,MACnB,UAAWC,EAAU,KACvB,CAAC,CACH,CAKO,SAASC,EACdtD,EAC6C,CAC7C,OAAIA,IAAM,KAAaO,EAAO,GAAG,IAAI,EAC9B0C,EAAsBjD,CAAC,CAChC,CAKO,SAASuD,EAAwBvD,EAAoD,CAC1F,GAAI,CAACD,EAASC,CAAC,EACb,OAAOO,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,kCAAmC,CAAC,CAAC,EAGpF,GAAM,CAAE,YAAAwB,EAAa,QAAA8B,EAAS,SAAA7B,CAAS,EAAItB,EAErCwD,EAAyB,CAAC,EAEhC,GAAInC,IAAgB,OAAW,CAC7B,GAAI,CAACpB,EAASoB,CAAW,EACvB,OAAOd,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,4BAA6B,CAAC,CAAC,EAE9E2D,EAAI,YAAcnC,CACpB,CACA,GAAI8B,IAAY,OAAW,CACzB,GAAI,CAAClD,EAASkD,CAAO,EACnB,OAAO5C,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,wBAAyB,CAAC,CAAC,EAE1E2D,EAAI,QAAUL,CAChB,CACA,GAAI7B,IAAa,OAAW,CAC1B,GAAI,CAAClB,EAAWkB,CAAQ,EACtB,OAAOf,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,qBAAqByB,CAAQ,EAAG,CAAC,CAAC,EAEjFkC,EAAI,SAAWlC,CACjB,CAEA,OAAOf,EAAO,GAAGiD,CAAG,CACtB,CAKO,SAASC,EAA0BzD,EAAsD,CAC9F,GAAI,CAACD,EAASC,CAAC,EACb,OAAOO,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,oCAAqC,CAAC,CAAC,EAGtF,GAAM,CAAE,OAAAqB,EAAQ,UAAAF,CAAU,EAAIhB,EAExBwD,EAA2B,CAAC,EAElC,GAAItC,IAAW,OAAW,CACxB,GAAI,CAACjB,EAASiB,CAAM,EAClB,OAAOX,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,uBAAwB,CAAC,CAAC,EAEzE2D,EAAI,OAAStC,CACf,CACA,GAAIF,IAAc,OAAW,CAC3B,GAAI,CAAC,MAAM,QAAQA,CAAS,EAC1B,OAAOT,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,yBAA0B,CAAC,CAAC,EAE3E,QAASoB,EAAI,EAAGA,EAAID,EAAU,OAAQC,IACpC,GAAI,CAAChB,EAASe,EAAUC,CAAC,CAAC,EACxB,OAAOV,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,aAAaoB,CAAC,kBAAmB,CAAC,CAAC,EAGpFuC,EAAI,UAAYxC,CAClB,CAEA,OAAOT,EAAO,GAAGiD,CAAG,CACtB,CH3ZA,SAASE,EACPC,EACAC,EACqD,CACrD,GAAIA,aAAeC,EAAU,CAE3B,IAAMC,EAAUF,EAAI,QAAQ,YAAY,EACxC,OAAIE,EAAQ,SAAS,WAAW,GAAKA,EAAQ,SAAS,SAAS,EACtDH,EAAE,KAAK,CAAE,MAAOC,EAAI,OAAQ,EAAG,GAAG,EAGzCE,EAAQ,SAAS,SAAS,GAC1BA,EAAQ,SAAS,YAAY,GAC7BA,EAAQ,SAAS,OAAO,EAEjBH,EAAE,KAAK,CAAE,MAAOC,EAAI,OAAQ,EAAG,GAAG,EAGzCE,EAAQ,SAAS,kBAAkB,GACnCA,EAAQ,SAAS,oBAAoB,EAE9BH,EAAE,KAAK,CAAE,MAAOC,EAAI,QAAS,KAAM,WAAY,EAAG,GAAG,EAGvDD,EAAE,KAAK,CAAE,MAAOC,EAAI,OAAQ,EAAG,GAAG,CAC3C,CAEA,IAAME,EAAUF,aAAe,MAAQA,EAAI,QAAU,OAAOA,CAAG,EAC/D,OAAOD,EAAE,KAAK,CAAE,MAAOG,CAAQ,EAAG,GAAG,CACvC,CAEA,IAAMC,EAAQ,IAAIC,GAAK,EAMpB,IAAI,IAAK,MAAOL,GAAM,CACrB,IAAMM,EAAWN,EAAE,IAAI,MAAM,UAAU,EACjCO,EAAQP,EAAE,IAAI,MAAM,OAAO,EAC3BQ,EAAYR,EAAE,IAAI,MAAM,WAAW,EAEnCS,EAAO,CAAC,OAAQ,MAAM,EAC5B,GAAIH,EAAU,CACZ,GAAI,CAACI,EAASJ,CAAQ,EACpB,OAAON,EAAE,KAAK,CAAE,MAAO,qBAAqBM,CAAQ,EAAG,EAAG,GAAG,EAE/DG,EAAK,KAAK,WAAYH,CAAQ,CAChC,CACIC,IAAU,QAAQE,EAAK,KAAK,SAAS,EACrCD,IAAc,QAAQC,EAAK,KAAK,aAAa,EAEjD,GAAI,CACF,IAAME,EAASC,EAAY,MAAMC,EAAQJ,CAAI,CAAC,EAAE,OAAO,gBAAgB,EACvE,OAAOT,EAAE,KAAKW,CAAM,CACtB,OAASV,EAAK,CACZ,OAAOF,EAAeC,EAAGC,CAAG,CAC9B,CACF,CAAC,EAOA,IAAI,cAAe,MAAOD,GAAM,CAC/B,IAAMc,EAAcd,EAAE,IAAI,MAAM,aAAa,EAEvCS,EAAO,CAAC,OAAQ,YAAY,EAClC,GAAIK,EAAa,CACf,GAAI,CAACJ,EAASI,CAAW,EACvB,OAAOd,EAAE,KAAK,CAAE,MAAO,wBAAwBc,CAAW,EAAG,EAAG,GAAG,EAErEL,EAAK,KAAK,cAAeK,CAAW,CACtC,CAEA,GAAI,CACF,IAAMH,EAASI,EAA4B,MAAMF,EAAQJ,CAAI,CAAC,EAAE,OAC9D,2BACF,EACA,OAAIE,IAAW,KACNX,EAAE,KAAK,KAAM,GAAG,EAElBA,EAAE,KAAKW,CAAM,CACtB,OAASV,EAAK,CACZ,OAAOF,EAAeC,EAAGC,CAAG,CAC9B,CACF,CAAC,EAMA,IAAI,OAAQ,MAAOD,GAAM,CACxB,IAAMgB,EAAKhB,EAAE,IAAI,MAAM,IAAI,EAC3B,GAAI,CAACU,EAASM,CAAE,EACd,OAAOhB,EAAE,KAAK,CAAE,MAAO,oBAAoBgB,CAAE,EAAG,EAAG,GAAG,EAGxD,GAAI,CACF,IAAML,EAASM,EAAsB,MAAMJ,EAAQ,CAAC,OAAQ,MAAOG,CAAE,CAAC,CAAC,EAAE,OACvE,oBACF,EACA,OAAOhB,EAAE,KAAKW,CAAM,CACtB,OAASV,EAAK,CACZ,OAAOF,EAAeC,EAAGC,CAAG,CAC9B,CACF,CAAC,EAMA,IAAI,OAAQ,MAAOD,GAAM,CACxB,IAAMgB,EAAKhB,EAAE,IAAI,MAAM,IAAI,EAC3B,GAAI,CAACU,EAASM,CAAE,EACd,OAAOhB,EAAE,KAAK,CAAE,MAAO,oBAAoBgB,CAAE,EAAG,EAAG,GAAG,EAGxD,IAAIE,EACJ,GAAI,CACFA,EAAOC,EAAwB,MAAMnB,EAAE,IAAI,KAAK,CAAC,EAAE,OACjD,yBACF,CACF,MAAQ,CACN,OAAOA,EAAE,KAAK,CAAE,MAAO,mBAAoB,EAAG,GAAG,CACnD,CAEA,IAAMS,EAAO,CAAC,OAAQ,SAAUO,CAAE,EAMlC,GALIE,EAAK,aAAaT,EAAK,KAAK,KAAMS,EAAK,WAAW,EAClDA,EAAK,SAAST,EAAK,KAAK,YAAaS,EAAK,OAAO,EACjDA,EAAK,UAAUT,EAAK,KAAK,aAAc,OAAOS,EAAK,QAAQ,CAAC,EAG5DT,EAAK,SAAW,EAClB,OAAOT,EAAE,KAAK,CAAE,MAAO,qBAAsB,EAAG,GAAG,EAGrD,GAAI,CACF,IAAMW,EAASS,EAAW,MAAMP,EAAQJ,CAAI,CAAC,EAAE,OAAO,oBAAoB,EAC1E,OAAOT,EAAE,KAAKW,CAAM,CACtB,OAASV,EAAK,CACZ,OAAOF,EAAeC,EAAGC,CAAG,CAC9B,CACF,CAAC,EAMA,OAAO,OAAQ,MAAOD,GAAM,CAC3B,IAAMgB,EAAKhB,EAAE,IAAI,MAAM,IAAI,EAC3B,GAAI,CAACU,EAASM,CAAE,EACd,OAAOhB,EAAE,KAAK,CAAE,MAAO,oBAAoBgB,CAAE,EAAG,EAAG,GAAG,EAGxD,GAAI,CACF,aAAMH,EAAQ,CAAC,OAAQ,SAAUG,CAAE,CAAC,EAC7BhB,EAAE,KAAK,CAAE,QAAS,EAAK,CAAC,CACjC,OAASC,EAAK,CACZ,OAAOF,EAAeC,EAAGC,CAAG,CAC9B,CACF,CAAC,EAMA,KAAK,gBAAiB,MAAOD,GAAM,CAClC,IAAMgB,EAAKhB,EAAE,IAAI,MAAM,IAAI,EAC3B,GAAI,CAACU,EAASM,CAAE,EACd,OAAOhB,EAAE,KAAK,CAAE,MAAO,oBAAoBgB,CAAE,EAAG,EAAG,GAAG,EAGxD,IAAIE,EACJ,GAAI,CACF,IAAMG,EAAO,MAAMrB,EAAE,IAAI,KAAK,EAC1BqB,EACFH,EAAOI,EAA0B,KAAK,MAAMD,CAAI,CAAC,EAAE,OACjD,mCACF,EAEAH,EAAO,CAAC,CAEZ,MAAQ,CACN,OAAOlB,EAAE,KAAK,CAAE,MAAO,mBAAoB,EAAG,GAAG,CACnD,CAEA,IAAMS,EAAO,CAAC,OAAQ,WAAYO,CAAE,EAEpC,GADIE,EAAK,QAAQT,EAAK,KAAK,WAAYS,EAAK,MAAM,EAC9CA,EAAK,UACP,QAAWK,KAAYL,EAAK,UAC1BT,EAAK,KAAK,aAAcc,CAAQ,EAIpC,GAAI,CACF,IAAMZ,EAASS,EAAW,MAAMP,EAAQJ,CAAI,CAAC,EAAE,OAAO,8BAA8B,EACpF,OAAOT,EAAE,KAAKW,CAAM,CACtB,OAASV,EAAK,CACZ,OAAOF,EAAeC,EAAGC,CAAG,CAC9B,CACF,CAAC,EAMA,KAAK,cAAe,MAAOD,GAAM,CAChC,IAAMgB,EAAKhB,EAAE,IAAI,MAAM,IAAI,EAC3B,GAAI,CAACU,EAASM,CAAE,EACd,OAAOhB,EAAE,KAAK,CAAE,MAAO,oBAAoBgB,CAAE,EAAG,EAAG,GAAG,EAGxD,GAAI,CACF,IAAML,EAASS,EAAW,MAAMP,EAAQ,CAAC,OAAQ,SAAUG,CAAE,CAAC,CAAC,EAAE,OAC/D,4BACF,EACA,OAAOhB,EAAE,KAAKW,CAAM,CACtB,OAASV,EAAK,CACZ,OAAOF,EAAeC,EAAGC,CAAG,CAC9B,CACF,CAAC,EAOA,IAAI,qBAAsB,MAAOD,GAAM,CACtC,IAAMwB,EAASxB,EAAE,IAAI,MAAM,QAAQ,EACnC,GAAI,CAACU,EAASc,CAAM,EAClB,OAAOxB,EAAE,KAAK,CAAE,MAAO,oBAAoBwB,CAAM,EAAG,EAAG,GAAG,EAG5D,GAAI,CACF,IAAMb,EAASc,EAAgB,MAAMZ,EAAQ,CAC3C,WACA,OACAW,CACF,CAAC,CAAC,EAAE,OAAO,kCAAkC,EAC7C,OAAOxB,EAAE,KAAKW,CAAM,CACtB,OAASV,EAAK,CACZ,OAAOF,EAAeC,EAAGC,CAAG,CAC9B,CACF,CAAC,EDpQH,IAAMyB,GAAM,IAAIC,EAAK,EAClB,IAAI,UAAYC,GACRA,EAAE,KAAK,CAAE,OAAQ,IAAK,CAAC,CAC/B,EACA,MAAM,aAAcC,CAAK,EAEzB,IAAI,SAAWD,GAAMA,EAAE,KAAK,CAAE,MAAO,WAAY,EAAG,GAAG,CAAC,EASpD,SAASE,EAAUC,EAAqB,CAC7C,IAAMC,EAAOD,GAAc,QAAQ,IAAI,yBAA2B,WAElE,OAAO,IAAIJ,EAAK,EACb,MAAM,IAAKD,EAAG,EAEd,IAAI,KAAMO,EAAY,CAAE,KAAAD,CAAK,CAAC,CAAC,EAE/B,IAAI,KAAMC,EAAY,CAAE,KAAAD,EAAM,KAAM,YAAa,CAAC,CAAC,CACxD,CD3BA,IAAME,GACJ,QAAQ,IAAI,OAAS,OACjB,KACA,OAAO,SAAS,QAAQ,IAAI,KAAM,EAAE,GAAK,KAKzCC,GAAa,QAAQ,IAAI,yBAA2B,SAEpDC,GAAMC,EAAUF,EAAU,EAEhCG,GACE,CACE,MAAOF,GAAI,MACX,KAAMF,EACR,EACCK,GAAS,CACR,QAAQ,IAAI,iCAAiCA,EAAK,IAAI,EAAE,CAC1D,CACF",
6
- "names": ["serve", "Hono", "serveStatic", "Hono", "spawn", "isTaskId", "s", "isLearningId", "CliError", "message", "exitCode", "stderr", "CliTimeoutError", "CLI_TIMEOUT_MS", "CLI_PATH", "CLI_CWD", "callCli", "args", "resolve", "reject", "proc", "spawn", "timeout", "CliTimeoutError", "stdout", "stderr", "chunk", "err", "CliError", "code", "message", "result", "Result", "TaggedError", "DecodeError", "TaggedError", "isObject", "v", "isString", "isBoolean", "isNumber", "isPriority", "isDepth", "decodeLearning", "Result", "id", "taskId", "content", "sourceTaskId", "createdAt", "isLearningId", "isTaskId", "decodeLearnings", "learnings", "i", "result", "decodeTask", "parentId", "description", "priority", "completed", "completedAt", "startedAt", "updatedAt", "commitSha", "depth", "blockedBy", "blocks", "bookmark", "startCommit", "effectivelyBlocked", "decodedBlockedBy", "bid", "decodedBlocks", "task", "decodeTasks", "tasks", "decodeTaskContext", "own", "parent", "milestone", "ctx", "decodeInheritedLearnings", "ownResult", "parentResult", "milestoneResult", "decodeTaskWithContext", "taskResult", "context", "ctxResult", "lrnResult", "decodeTaskWithContextOrNull", "decodeUpdateTaskRequest", "req", "decodeCompleteTaskRequest", "handleCliError", "c", "err", "CliError", "message", "tasks", "Hono", "parentId", "ready", "completed", "args", "isTaskId", "result", "decodeTasks", "callCli", "milestoneId", "decodeTaskWithContextOrNull", "id", "decodeTaskWithContext", "body", "decodeUpdateTaskRequest", "decodeTask", "text", "decodeCompleteTaskRequest", "learning", "taskId", "decodeLearnings", "api", "Hono", "c", "tasks", "createApp", "staticRoot", "root", "serveStatic", "PORT", "staticRoot", "app", "createApp", "serve", "info"]
3
+ "sources": ["../node_modules/@hono/node-server/dist/index.mjs", "../node_modules/hono/dist/compose.js", "../node_modules/hono/dist/request/constants.js", "../node_modules/hono/dist/utils/body.js", "../node_modules/hono/dist/utils/url.js", "../node_modules/hono/dist/request.js", "../node_modules/hono/dist/utils/html.js", "../node_modules/hono/dist/context.js", "../node_modules/hono/dist/router.js", "../node_modules/hono/dist/utils/constants.js", "../node_modules/hono/dist/hono-base.js", "../node_modules/hono/dist/router/reg-exp-router/matcher.js", "../node_modules/hono/dist/router/reg-exp-router/node.js", "../node_modules/hono/dist/router/reg-exp-router/trie.js", "../node_modules/hono/dist/router/reg-exp-router/router.js", "../node_modules/hono/dist/router/smart-router/router.js", "../node_modules/hono/dist/router/trie-router/node.js", "../node_modules/hono/dist/router/trie-router/router.js", "../node_modules/hono/dist/hono.js", "../node_modules/hono/dist/utils/mime.js", "../node_modules/@hono/node-server/dist/serve-static.mjs", "../src/api/cli.ts", "../src/types.ts", "../node_modules/better-result/src/dual.ts", "../node_modules/better-result/src/error.ts", "../node_modules/better-result/src/result.ts", "../src/decoder.ts", "../src/api/routes/tasks.ts", "../src/api/app.ts", "../src/api/index.ts"],
4
+ "sourcesContent": ["// src/server.ts\nimport { createServer as createServerHTTP } from \"http\";\n\n// src/listener.ts\nimport { Http2ServerRequest as Http2ServerRequest2 } from \"http2\";\n\n// src/request.ts\nimport { Http2ServerRequest } from \"http2\";\nimport { Readable } from \"stream\";\nvar RequestError = class extends Error {\n constructor(message, options) {\n super(message, options);\n this.name = \"RequestError\";\n }\n};\nvar toRequestError = (e) => {\n if (e instanceof RequestError) {\n return e;\n }\n return new RequestError(e.message, { cause: e });\n};\nvar GlobalRequest = global.Request;\nvar Request = class extends GlobalRequest {\n constructor(input, options) {\n if (typeof input === \"object\" && getRequestCache in input) {\n input = input[getRequestCache]();\n }\n if (typeof options?.body?.getReader !== \"undefined\") {\n ;\n options.duplex ??= \"half\";\n }\n super(input, options);\n }\n};\nvar newHeadersFromIncoming = (incoming) => {\n const headerRecord = [];\n const rawHeaders = incoming.rawHeaders;\n for (let i = 0; i < rawHeaders.length; i += 2) {\n const { [i]: key, [i + 1]: value } = rawHeaders;\n if (key.charCodeAt(0) !== /*:*/\n 58) {\n headerRecord.push([key, value]);\n }\n }\n return new Headers(headerRecord);\n};\nvar wrapBodyStream = Symbol(\"wrapBodyStream\");\nvar newRequestFromIncoming = (method, url, headers, incoming, abortController) => {\n const init = {\n method,\n headers,\n signal: abortController.signal\n };\n if (method === \"TRACE\") {\n init.method = \"GET\";\n const req = new Request(url, init);\n Object.defineProperty(req, \"method\", {\n get() {\n return \"TRACE\";\n }\n });\n return req;\n }\n if (!(method === \"GET\" || method === \"HEAD\")) {\n if (\"rawBody\" in incoming && incoming.rawBody instanceof Buffer) {\n init.body = new ReadableStream({\n start(controller) {\n controller.enqueue(incoming.rawBody);\n controller.close();\n }\n });\n } else if (incoming[wrapBodyStream]) {\n let reader;\n init.body = new ReadableStream({\n async pull(controller) {\n try {\n reader ||= Readable.toWeb(incoming).getReader();\n const { done, value } = await reader.read();\n if (done) {\n controller.close();\n } else {\n controller.enqueue(value);\n }\n } catch (error) {\n controller.error(error);\n }\n }\n });\n } else {\n init.body = Readable.toWeb(incoming);\n }\n }\n return new Request(url, init);\n};\nvar getRequestCache = Symbol(\"getRequestCache\");\nvar requestCache = Symbol(\"requestCache\");\nvar incomingKey = Symbol(\"incomingKey\");\nvar urlKey = Symbol(\"urlKey\");\nvar headersKey = Symbol(\"headersKey\");\nvar abortControllerKey = Symbol(\"abortControllerKey\");\nvar getAbortController = Symbol(\"getAbortController\");\nvar requestPrototype = {\n get method() {\n return this[incomingKey].method || \"GET\";\n },\n get url() {\n return this[urlKey];\n },\n get headers() {\n return this[headersKey] ||= newHeadersFromIncoming(this[incomingKey]);\n },\n [getAbortController]() {\n this[getRequestCache]();\n return this[abortControllerKey];\n },\n [getRequestCache]() {\n this[abortControllerKey] ||= new AbortController();\n return this[requestCache] ||= newRequestFromIncoming(\n this.method,\n this[urlKey],\n this.headers,\n this[incomingKey],\n this[abortControllerKey]\n );\n }\n};\n[\n \"body\",\n \"bodyUsed\",\n \"cache\",\n \"credentials\",\n \"destination\",\n \"integrity\",\n \"mode\",\n \"redirect\",\n \"referrer\",\n \"referrerPolicy\",\n \"signal\",\n \"keepalive\"\n].forEach((k) => {\n Object.defineProperty(requestPrototype, k, {\n get() {\n return this[getRequestCache]()[k];\n }\n });\n});\n[\"arrayBuffer\", \"blob\", \"clone\", \"formData\", \"json\", \"text\"].forEach((k) => {\n Object.defineProperty(requestPrototype, k, {\n value: function() {\n return this[getRequestCache]()[k]();\n }\n });\n});\nObject.setPrototypeOf(requestPrototype, Request.prototype);\nvar newRequest = (incoming, defaultHostname) => {\n const req = Object.create(requestPrototype);\n req[incomingKey] = incoming;\n const incomingUrl = incoming.url || \"\";\n if (incomingUrl[0] !== \"/\" && // short-circuit for performance. most requests are relative URL.\n (incomingUrl.startsWith(\"http://\") || incomingUrl.startsWith(\"https://\"))) {\n if (incoming instanceof Http2ServerRequest) {\n throw new RequestError(\"Absolute URL for :path is not allowed in HTTP/2\");\n }\n try {\n const url2 = new URL(incomingUrl);\n req[urlKey] = url2.href;\n } catch (e) {\n throw new RequestError(\"Invalid absolute URL\", { cause: e });\n }\n return req;\n }\n const host = (incoming instanceof Http2ServerRequest ? incoming.authority : incoming.headers.host) || defaultHostname;\n if (!host) {\n throw new RequestError(\"Missing host header\");\n }\n let scheme;\n if (incoming instanceof Http2ServerRequest) {\n scheme = incoming.scheme;\n if (!(scheme === \"http\" || scheme === \"https\")) {\n throw new RequestError(\"Unsupported scheme\");\n }\n } else {\n scheme = incoming.socket && incoming.socket.encrypted ? \"https\" : \"http\";\n }\n const url = new URL(`${scheme}://${host}${incomingUrl}`);\n if (url.hostname.length !== host.length && url.hostname !== host.replace(/:\\d+$/, \"\")) {\n throw new RequestError(\"Invalid host header\");\n }\n req[urlKey] = url.href;\n return req;\n};\n\n// src/response.ts\nvar responseCache = Symbol(\"responseCache\");\nvar getResponseCache = Symbol(\"getResponseCache\");\nvar cacheKey = Symbol(\"cache\");\nvar GlobalResponse = global.Response;\nvar Response2 = class _Response {\n #body;\n #init;\n [getResponseCache]() {\n delete this[cacheKey];\n return this[responseCache] ||= new GlobalResponse(this.#body, this.#init);\n }\n constructor(body, init) {\n let headers;\n this.#body = body;\n if (init instanceof _Response) {\n const cachedGlobalResponse = init[responseCache];\n if (cachedGlobalResponse) {\n this.#init = cachedGlobalResponse;\n this[getResponseCache]();\n return;\n } else {\n this.#init = init.#init;\n headers = new Headers(init.#init.headers);\n }\n } else {\n this.#init = init;\n }\n if (typeof body === \"string\" || typeof body?.getReader !== \"undefined\" || body instanceof Blob || body instanceof Uint8Array) {\n headers ||= init?.headers || { \"content-type\": \"text/plain; charset=UTF-8\" };\n this[cacheKey] = [init?.status || 200, body, headers];\n }\n }\n get headers() {\n const cache = this[cacheKey];\n if (cache) {\n if (!(cache[2] instanceof Headers)) {\n cache[2] = new Headers(cache[2]);\n }\n return cache[2];\n }\n return this[getResponseCache]().headers;\n }\n get status() {\n return this[cacheKey]?.[0] ?? this[getResponseCache]().status;\n }\n get ok() {\n const status = this.status;\n return status >= 200 && status < 300;\n }\n};\n[\"body\", \"bodyUsed\", \"redirected\", \"statusText\", \"trailers\", \"type\", \"url\"].forEach((k) => {\n Object.defineProperty(Response2.prototype, k, {\n get() {\n return this[getResponseCache]()[k];\n }\n });\n});\n[\"arrayBuffer\", \"blob\", \"clone\", \"formData\", \"json\", \"text\"].forEach((k) => {\n Object.defineProperty(Response2.prototype, k, {\n value: function() {\n return this[getResponseCache]()[k]();\n }\n });\n});\nObject.setPrototypeOf(Response2, GlobalResponse);\nObject.setPrototypeOf(Response2.prototype, GlobalResponse.prototype);\n\n// src/utils.ts\nasync function readWithoutBlocking(readPromise) {\n return Promise.race([readPromise, Promise.resolve().then(() => Promise.resolve(void 0))]);\n}\nfunction writeFromReadableStreamDefaultReader(reader, writable, currentReadPromise) {\n const cancel = (error) => {\n reader.cancel(error).catch(() => {\n });\n };\n writable.on(\"close\", cancel);\n writable.on(\"error\", cancel);\n (currentReadPromise ?? reader.read()).then(flow, handleStreamError);\n return reader.closed.finally(() => {\n writable.off(\"close\", cancel);\n writable.off(\"error\", cancel);\n });\n function handleStreamError(error) {\n if (error) {\n writable.destroy(error);\n }\n }\n function onDrain() {\n reader.read().then(flow, handleStreamError);\n }\n function flow({ done, value }) {\n try {\n if (done) {\n writable.end();\n } else if (!writable.write(value)) {\n writable.once(\"drain\", onDrain);\n } else {\n return reader.read().then(flow, handleStreamError);\n }\n } catch (e) {\n handleStreamError(e);\n }\n }\n}\nfunction writeFromReadableStream(stream, writable) {\n if (stream.locked) {\n throw new TypeError(\"ReadableStream is locked.\");\n } else if (writable.destroyed) {\n return;\n }\n return writeFromReadableStreamDefaultReader(stream.getReader(), writable);\n}\nvar buildOutgoingHttpHeaders = (headers) => {\n const res = {};\n if (!(headers instanceof Headers)) {\n headers = new Headers(headers ?? void 0);\n }\n const cookies = [];\n for (const [k, v] of headers) {\n if (k === \"set-cookie\") {\n cookies.push(v);\n } else {\n res[k] = v;\n }\n }\n if (cookies.length > 0) {\n res[\"set-cookie\"] = cookies;\n }\n res[\"content-type\"] ??= \"text/plain; charset=UTF-8\";\n return res;\n};\n\n// src/utils/response/constants.ts\nvar X_ALREADY_SENT = \"x-hono-already-sent\";\n\n// src/globals.ts\nimport crypto from \"crypto\";\nif (typeof global.crypto === \"undefined\") {\n global.crypto = crypto;\n}\n\n// src/listener.ts\nvar outgoingEnded = Symbol(\"outgoingEnded\");\nvar handleRequestError = () => new Response(null, {\n status: 400\n});\nvar handleFetchError = (e) => new Response(null, {\n status: e instanceof Error && (e.name === \"TimeoutError\" || e.constructor.name === \"TimeoutError\") ? 504 : 500\n});\nvar handleResponseError = (e, outgoing) => {\n const err = e instanceof Error ? e : new Error(\"unknown error\", { cause: e });\n if (err.code === \"ERR_STREAM_PREMATURE_CLOSE\") {\n console.info(\"The user aborted a request.\");\n } else {\n console.error(e);\n if (!outgoing.headersSent) {\n outgoing.writeHead(500, { \"Content-Type\": \"text/plain\" });\n }\n outgoing.end(`Error: ${err.message}`);\n outgoing.destroy(err);\n }\n};\nvar flushHeaders = (outgoing) => {\n if (\"flushHeaders\" in outgoing && outgoing.writable) {\n outgoing.flushHeaders();\n }\n};\nvar responseViaCache = async (res, outgoing) => {\n let [status, body, header] = res[cacheKey];\n if (header instanceof Headers) {\n header = buildOutgoingHttpHeaders(header);\n }\n if (typeof body === \"string\") {\n header[\"Content-Length\"] = Buffer.byteLength(body);\n } else if (body instanceof Uint8Array) {\n header[\"Content-Length\"] = body.byteLength;\n } else if (body instanceof Blob) {\n header[\"Content-Length\"] = body.size;\n }\n outgoing.writeHead(status, header);\n if (typeof body === \"string\" || body instanceof Uint8Array) {\n outgoing.end(body);\n } else if (body instanceof Blob) {\n outgoing.end(new Uint8Array(await body.arrayBuffer()));\n } else {\n flushHeaders(outgoing);\n await writeFromReadableStream(body, outgoing)?.catch(\n (e) => handleResponseError(e, outgoing)\n );\n }\n ;\n outgoing[outgoingEnded]?.();\n};\nvar isPromise = (res) => typeof res.then === \"function\";\nvar responseViaResponseObject = async (res, outgoing, options = {}) => {\n if (isPromise(res)) {\n if (options.errorHandler) {\n try {\n res = await res;\n } catch (err) {\n const errRes = await options.errorHandler(err);\n if (!errRes) {\n return;\n }\n res = errRes;\n }\n } else {\n res = await res.catch(handleFetchError);\n }\n }\n if (cacheKey in res) {\n return responseViaCache(res, outgoing);\n }\n const resHeaderRecord = buildOutgoingHttpHeaders(res.headers);\n if (res.body) {\n const reader = res.body.getReader();\n const values = [];\n let done = false;\n let currentReadPromise = void 0;\n if (resHeaderRecord[\"transfer-encoding\"] !== \"chunked\") {\n let maxReadCount = 2;\n for (let i = 0; i < maxReadCount; i++) {\n currentReadPromise ||= reader.read();\n const chunk = await readWithoutBlocking(currentReadPromise).catch((e) => {\n console.error(e);\n done = true;\n });\n if (!chunk) {\n if (i === 1) {\n await new Promise((resolve) => setTimeout(resolve));\n maxReadCount = 3;\n continue;\n }\n break;\n }\n currentReadPromise = void 0;\n if (chunk.value) {\n values.push(chunk.value);\n }\n if (chunk.done) {\n done = true;\n break;\n }\n }\n if (done && !(\"content-length\" in resHeaderRecord)) {\n resHeaderRecord[\"content-length\"] = values.reduce((acc, value) => acc + value.length, 0);\n }\n }\n outgoing.writeHead(res.status, resHeaderRecord);\n values.forEach((value) => {\n ;\n outgoing.write(value);\n });\n if (done) {\n outgoing.end();\n } else {\n if (values.length === 0) {\n flushHeaders(outgoing);\n }\n await writeFromReadableStreamDefaultReader(reader, outgoing, currentReadPromise);\n }\n } else if (resHeaderRecord[X_ALREADY_SENT]) {\n } else {\n outgoing.writeHead(res.status, resHeaderRecord);\n outgoing.end();\n }\n ;\n outgoing[outgoingEnded]?.();\n};\nvar getRequestListener = (fetchCallback, options = {}) => {\n const autoCleanupIncoming = options.autoCleanupIncoming ?? true;\n if (options.overrideGlobalObjects !== false && global.Request !== Request) {\n Object.defineProperty(global, \"Request\", {\n value: Request\n });\n Object.defineProperty(global, \"Response\", {\n value: Response2\n });\n }\n return async (incoming, outgoing) => {\n let res, req;\n try {\n req = newRequest(incoming, options.hostname);\n let incomingEnded = !autoCleanupIncoming || incoming.method === \"GET\" || incoming.method === \"HEAD\";\n if (!incomingEnded) {\n ;\n incoming[wrapBodyStream] = true;\n incoming.on(\"end\", () => {\n incomingEnded = true;\n });\n if (incoming instanceof Http2ServerRequest2) {\n ;\n outgoing[outgoingEnded] = () => {\n if (!incomingEnded) {\n setTimeout(() => {\n if (!incomingEnded) {\n setTimeout(() => {\n incoming.destroy();\n outgoing.destroy();\n });\n }\n });\n }\n };\n }\n }\n outgoing.on(\"close\", () => {\n const abortController = req[abortControllerKey];\n if (abortController) {\n if (incoming.errored) {\n req[abortControllerKey].abort(incoming.errored.toString());\n } else if (!outgoing.writableFinished) {\n req[abortControllerKey].abort(\"Client connection prematurely closed.\");\n }\n }\n if (!incomingEnded) {\n setTimeout(() => {\n if (!incomingEnded) {\n setTimeout(() => {\n incoming.destroy();\n });\n }\n });\n }\n });\n res = fetchCallback(req, { incoming, outgoing });\n if (cacheKey in res) {\n return responseViaCache(res, outgoing);\n }\n } catch (e) {\n if (!res) {\n if (options.errorHandler) {\n res = await options.errorHandler(req ? e : toRequestError(e));\n if (!res) {\n return;\n }\n } else if (!req) {\n res = handleRequestError();\n } else {\n res = handleFetchError(e);\n }\n } else {\n return handleResponseError(e, outgoing);\n }\n }\n try {\n return await responseViaResponseObject(res, outgoing, options);\n } catch (e) {\n return handleResponseError(e, outgoing);\n }\n };\n};\n\n// src/server.ts\nvar createAdaptorServer = (options) => {\n const fetchCallback = options.fetch;\n const requestListener = getRequestListener(fetchCallback, {\n hostname: options.hostname,\n overrideGlobalObjects: options.overrideGlobalObjects,\n autoCleanupIncoming: options.autoCleanupIncoming\n });\n const createServer = options.createServer || createServerHTTP;\n const server = createServer(options.serverOptions || {}, requestListener);\n return server;\n};\nvar serve = (options, listeningListener) => {\n const server = createAdaptorServer(options);\n server.listen(options?.port ?? 3e3, options.hostname, () => {\n const serverInfo = server.address();\n listeningListener && listeningListener(serverInfo);\n });\n return server;\n};\nexport {\n RequestError,\n createAdaptorServer,\n getRequestListener,\n serve\n};\n", "// src/compose.ts\nvar compose = (middleware, onError, onNotFound) => {\n return (context, next) => {\n let index = -1;\n return dispatch(0);\n async function dispatch(i) {\n if (i <= index) {\n throw new Error(\"next() called multiple times\");\n }\n index = i;\n let res;\n let isError = false;\n let handler;\n if (middleware[i]) {\n handler = middleware[i][0][0];\n context.req.routeIndex = i;\n } else {\n handler = i === middleware.length && next || void 0;\n }\n if (handler) {\n try {\n res = await handler(context, () => dispatch(i + 1));\n } catch (err) {\n if (err instanceof Error && onError) {\n context.error = err;\n res = await onError(err, context);\n isError = true;\n } else {\n throw err;\n }\n }\n } else {\n if (context.finalized === false && onNotFound) {\n res = await onNotFound(context);\n }\n }\n if (res && (context.finalized === false || isError)) {\n context.res = res;\n }\n return context;\n }\n };\n};\nexport {\n compose\n};\n", "// src/request/constants.ts\nvar GET_MATCH_RESULT = /* @__PURE__ */ Symbol();\nexport {\n GET_MATCH_RESULT\n};\n", "// src/utils/body.ts\nimport { HonoRequest } from \"../request.js\";\nvar parseBody = async (request, options = /* @__PURE__ */ Object.create(null)) => {\n const { all = false, dot = false } = options;\n const headers = request instanceof HonoRequest ? request.raw.headers : request.headers;\n const contentType = headers.get(\"Content-Type\");\n if (contentType?.startsWith(\"multipart/form-data\") || contentType?.startsWith(\"application/x-www-form-urlencoded\")) {\n return parseFormData(request, { all, dot });\n }\n return {};\n};\nasync function parseFormData(request, options) {\n const formData = await request.formData();\n if (formData) {\n return convertFormDataToBodyData(formData, options);\n }\n return {};\n}\nfunction convertFormDataToBodyData(formData, options) {\n const form = /* @__PURE__ */ Object.create(null);\n formData.forEach((value, key) => {\n const shouldParseAllValues = options.all || key.endsWith(\"[]\");\n if (!shouldParseAllValues) {\n form[key] = value;\n } else {\n handleParsingAllValues(form, key, value);\n }\n });\n if (options.dot) {\n Object.entries(form).forEach(([key, value]) => {\n const shouldParseDotValues = key.includes(\".\");\n if (shouldParseDotValues) {\n handleParsingNestedValues(form, key, value);\n delete form[key];\n }\n });\n }\n return form;\n}\nvar handleParsingAllValues = (form, key, value) => {\n if (form[key] !== void 0) {\n if (Array.isArray(form[key])) {\n ;\n form[key].push(value);\n } else {\n form[key] = [form[key], value];\n }\n } else {\n if (!key.endsWith(\"[]\")) {\n form[key] = value;\n } else {\n form[key] = [value];\n }\n }\n};\nvar handleParsingNestedValues = (form, key, value) => {\n let nestedForm = form;\n const keys = key.split(\".\");\n keys.forEach((key2, index) => {\n if (index === keys.length - 1) {\n nestedForm[key2] = value;\n } else {\n if (!nestedForm[key2] || typeof nestedForm[key2] !== \"object\" || Array.isArray(nestedForm[key2]) || nestedForm[key2] instanceof File) {\n nestedForm[key2] = /* @__PURE__ */ Object.create(null);\n }\n nestedForm = nestedForm[key2];\n }\n });\n};\nexport {\n parseBody\n};\n", "// src/utils/url.ts\nvar splitPath = (path) => {\n const paths = path.split(\"/\");\n if (paths[0] === \"\") {\n paths.shift();\n }\n return paths;\n};\nvar splitRoutingPath = (routePath) => {\n const { groups, path } = extractGroupsFromPath(routePath);\n const paths = splitPath(path);\n return replaceGroupMarks(paths, groups);\n};\nvar extractGroupsFromPath = (path) => {\n const groups = [];\n path = path.replace(/\\{[^}]+\\}/g, (match, index) => {\n const mark = `@${index}`;\n groups.push([mark, match]);\n return mark;\n });\n return { groups, path };\n};\nvar replaceGroupMarks = (paths, groups) => {\n for (let i = groups.length - 1; i >= 0; i--) {\n const [mark] = groups[i];\n for (let j = paths.length - 1; j >= 0; j--) {\n if (paths[j].includes(mark)) {\n paths[j] = paths[j].replace(mark, groups[i][1]);\n break;\n }\n }\n }\n return paths;\n};\nvar patternCache = {};\nvar getPattern = (label, next) => {\n if (label === \"*\") {\n return \"*\";\n }\n const match = label.match(/^\\:([^\\{\\}]+)(?:\\{(.+)\\})?$/);\n if (match) {\n const cacheKey = `${label}#${next}`;\n if (!patternCache[cacheKey]) {\n if (match[2]) {\n patternCache[cacheKey] = next && next[0] !== \":\" && next[0] !== \"*\" ? [cacheKey, match[1], new RegExp(`^${match[2]}(?=/${next})`)] : [label, match[1], new RegExp(`^${match[2]}$`)];\n } else {\n patternCache[cacheKey] = [label, match[1], true];\n }\n }\n return patternCache[cacheKey];\n }\n return null;\n};\nvar tryDecode = (str, decoder) => {\n try {\n return decoder(str);\n } catch {\n return str.replace(/(?:%[0-9A-Fa-f]{2})+/g, (match) => {\n try {\n return decoder(match);\n } catch {\n return match;\n }\n });\n }\n};\nvar tryDecodeURI = (str) => tryDecode(str, decodeURI);\nvar getPath = (request) => {\n const url = request.url;\n const start = url.indexOf(\"/\", url.indexOf(\":\") + 4);\n let i = start;\n for (; i < url.length; i++) {\n const charCode = url.charCodeAt(i);\n if (charCode === 37) {\n const queryIndex = url.indexOf(\"?\", i);\n const path = url.slice(start, queryIndex === -1 ? void 0 : queryIndex);\n return tryDecodeURI(path.includes(\"%25\") ? path.replace(/%25/g, \"%2525\") : path);\n } else if (charCode === 63) {\n break;\n }\n }\n return url.slice(start, i);\n};\nvar getQueryStrings = (url) => {\n const queryIndex = url.indexOf(\"?\", 8);\n return queryIndex === -1 ? \"\" : \"?\" + url.slice(queryIndex + 1);\n};\nvar getPathNoStrict = (request) => {\n const result = getPath(request);\n return result.length > 1 && result.at(-1) === \"/\" ? result.slice(0, -1) : result;\n};\nvar mergePath = (base, sub, ...rest) => {\n if (rest.length) {\n sub = mergePath(sub, ...rest);\n }\n return `${base?.[0] === \"/\" ? \"\" : \"/\"}${base}${sub === \"/\" ? \"\" : `${base?.at(-1) === \"/\" ? \"\" : \"/\"}${sub?.[0] === \"/\" ? sub.slice(1) : sub}`}`;\n};\nvar checkOptionalParameter = (path) => {\n if (path.charCodeAt(path.length - 1) !== 63 || !path.includes(\":\")) {\n return null;\n }\n const segments = path.split(\"/\");\n const results = [];\n let basePath = \"\";\n segments.forEach((segment) => {\n if (segment !== \"\" && !/\\:/.test(segment)) {\n basePath += \"/\" + segment;\n } else if (/\\:/.test(segment)) {\n if (/\\?/.test(segment)) {\n if (results.length === 0 && basePath === \"\") {\n results.push(\"/\");\n } else {\n results.push(basePath);\n }\n const optionalSegment = segment.replace(\"?\", \"\");\n basePath += \"/\" + optionalSegment;\n results.push(basePath);\n } else {\n basePath += \"/\" + segment;\n }\n }\n });\n return results.filter((v, i, a) => a.indexOf(v) === i);\n};\nvar _decodeURI = (value) => {\n if (!/[%+]/.test(value)) {\n return value;\n }\n if (value.indexOf(\"+\") !== -1) {\n value = value.replace(/\\+/g, \" \");\n }\n return value.indexOf(\"%\") !== -1 ? tryDecode(value, decodeURIComponent_) : value;\n};\nvar _getQueryParam = (url, key, multiple) => {\n let encoded;\n if (!multiple && key && !/[%+]/.test(key)) {\n let keyIndex2 = url.indexOf(\"?\", 8);\n if (keyIndex2 === -1) {\n return void 0;\n }\n if (!url.startsWith(key, keyIndex2 + 1)) {\n keyIndex2 = url.indexOf(`&${key}`, keyIndex2 + 1);\n }\n while (keyIndex2 !== -1) {\n const trailingKeyCode = url.charCodeAt(keyIndex2 + key.length + 1);\n if (trailingKeyCode === 61) {\n const valueIndex = keyIndex2 + key.length + 2;\n const endIndex = url.indexOf(\"&\", valueIndex);\n return _decodeURI(url.slice(valueIndex, endIndex === -1 ? void 0 : endIndex));\n } else if (trailingKeyCode == 38 || isNaN(trailingKeyCode)) {\n return \"\";\n }\n keyIndex2 = url.indexOf(`&${key}`, keyIndex2 + 1);\n }\n encoded = /[%+]/.test(url);\n if (!encoded) {\n return void 0;\n }\n }\n const results = {};\n encoded ??= /[%+]/.test(url);\n let keyIndex = url.indexOf(\"?\", 8);\n while (keyIndex !== -1) {\n const nextKeyIndex = url.indexOf(\"&\", keyIndex + 1);\n let valueIndex = url.indexOf(\"=\", keyIndex);\n if (valueIndex > nextKeyIndex && nextKeyIndex !== -1) {\n valueIndex = -1;\n }\n let name = url.slice(\n keyIndex + 1,\n valueIndex === -1 ? nextKeyIndex === -1 ? void 0 : nextKeyIndex : valueIndex\n );\n if (encoded) {\n name = _decodeURI(name);\n }\n keyIndex = nextKeyIndex;\n if (name === \"\") {\n continue;\n }\n let value;\n if (valueIndex === -1) {\n value = \"\";\n } else {\n value = url.slice(valueIndex + 1, nextKeyIndex === -1 ? void 0 : nextKeyIndex);\n if (encoded) {\n value = _decodeURI(value);\n }\n }\n if (multiple) {\n if (!(results[name] && Array.isArray(results[name]))) {\n results[name] = [];\n }\n ;\n results[name].push(value);\n } else {\n results[name] ??= value;\n }\n }\n return key ? results[key] : results;\n};\nvar getQueryParam = _getQueryParam;\nvar getQueryParams = (url, key) => {\n return _getQueryParam(url, key, true);\n};\nvar decodeURIComponent_ = decodeURIComponent;\nexport {\n checkOptionalParameter,\n decodeURIComponent_,\n getPath,\n getPathNoStrict,\n getPattern,\n getQueryParam,\n getQueryParams,\n getQueryStrings,\n mergePath,\n splitPath,\n splitRoutingPath,\n tryDecode\n};\n", "// src/request.ts\nimport { HTTPException } from \"./http-exception.js\";\nimport { GET_MATCH_RESULT } from \"./request/constants.js\";\nimport { parseBody } from \"./utils/body.js\";\nimport { decodeURIComponent_, getQueryParam, getQueryParams, tryDecode } from \"./utils/url.js\";\nvar tryDecodeURIComponent = (str) => tryDecode(str, decodeURIComponent_);\nvar HonoRequest = class {\n /**\n * `.raw` can get the raw Request object.\n *\n * @see {@link https://hono.dev/docs/api/request#raw}\n *\n * @example\n * ```ts\n * // For Cloudflare Workers\n * app.post('/', async (c) => {\n * const metadata = c.req.raw.cf?.hostMetadata?\n * ...\n * })\n * ```\n */\n raw;\n #validatedData;\n // Short name of validatedData\n #matchResult;\n routeIndex = 0;\n /**\n * `.path` can get the pathname of the request.\n *\n * @see {@link https://hono.dev/docs/api/request#path}\n *\n * @example\n * ```ts\n * app.get('/about/me', (c) => {\n * const pathname = c.req.path // `/about/me`\n * })\n * ```\n */\n path;\n bodyCache = {};\n constructor(request, path = \"/\", matchResult = [[]]) {\n this.raw = request;\n this.path = path;\n this.#matchResult = matchResult;\n this.#validatedData = {};\n }\n param(key) {\n return key ? this.#getDecodedParam(key) : this.#getAllDecodedParams();\n }\n #getDecodedParam(key) {\n const paramKey = this.#matchResult[0][this.routeIndex][1][key];\n const param = this.#getParamValue(paramKey);\n return param && /\\%/.test(param) ? tryDecodeURIComponent(param) : param;\n }\n #getAllDecodedParams() {\n const decoded = {};\n const keys = Object.keys(this.#matchResult[0][this.routeIndex][1]);\n for (const key of keys) {\n const value = this.#getParamValue(this.#matchResult[0][this.routeIndex][1][key]);\n if (value !== void 0) {\n decoded[key] = /\\%/.test(value) ? tryDecodeURIComponent(value) : value;\n }\n }\n return decoded;\n }\n #getParamValue(paramKey) {\n return this.#matchResult[1] ? this.#matchResult[1][paramKey] : paramKey;\n }\n query(key) {\n return getQueryParam(this.url, key);\n }\n queries(key) {\n return getQueryParams(this.url, key);\n }\n header(name) {\n if (name) {\n return this.raw.headers.get(name) ?? void 0;\n }\n const headerData = {};\n this.raw.headers.forEach((value, key) => {\n headerData[key] = value;\n });\n return headerData;\n }\n async parseBody(options) {\n return this.bodyCache.parsedBody ??= await parseBody(this, options);\n }\n #cachedBody = (key) => {\n const { bodyCache, raw } = this;\n const cachedBody = bodyCache[key];\n if (cachedBody) {\n return cachedBody;\n }\n const anyCachedKey = Object.keys(bodyCache)[0];\n if (anyCachedKey) {\n return bodyCache[anyCachedKey].then((body) => {\n if (anyCachedKey === \"json\") {\n body = JSON.stringify(body);\n }\n return new Response(body)[key]();\n });\n }\n return bodyCache[key] = raw[key]();\n };\n /**\n * `.json()` can parse Request body of type `application/json`\n *\n * @see {@link https://hono.dev/docs/api/request#json}\n *\n * @example\n * ```ts\n * app.post('/entry', async (c) => {\n * const body = await c.req.json()\n * })\n * ```\n */\n json() {\n return this.#cachedBody(\"text\").then((text) => JSON.parse(text));\n }\n /**\n * `.text()` can parse Request body of type `text/plain`\n *\n * @see {@link https://hono.dev/docs/api/request#text}\n *\n * @example\n * ```ts\n * app.post('/entry', async (c) => {\n * const body = await c.req.text()\n * })\n * ```\n */\n text() {\n return this.#cachedBody(\"text\");\n }\n /**\n * `.arrayBuffer()` parse Request body as an `ArrayBuffer`\n *\n * @see {@link https://hono.dev/docs/api/request#arraybuffer}\n *\n * @example\n * ```ts\n * app.post('/entry', async (c) => {\n * const body = await c.req.arrayBuffer()\n * })\n * ```\n */\n arrayBuffer() {\n return this.#cachedBody(\"arrayBuffer\");\n }\n /**\n * Parses the request body as a `Blob`.\n * @example\n * ```ts\n * app.post('/entry', async (c) => {\n * const body = await c.req.blob();\n * });\n * ```\n * @see https://hono.dev/docs/api/request#blob\n */\n blob() {\n return this.#cachedBody(\"blob\");\n }\n /**\n * Parses the request body as `FormData`.\n * @example\n * ```ts\n * app.post('/entry', async (c) => {\n * const body = await c.req.formData();\n * });\n * ```\n * @see https://hono.dev/docs/api/request#formdata\n */\n formData() {\n return this.#cachedBody(\"formData\");\n }\n /**\n * Adds validated data to the request.\n *\n * @param target - The target of the validation.\n * @param data - The validated data to add.\n */\n addValidatedData(target, data) {\n this.#validatedData[target] = data;\n }\n valid(target) {\n return this.#validatedData[target];\n }\n /**\n * `.url()` can get the request url strings.\n *\n * @see {@link https://hono.dev/docs/api/request#url}\n *\n * @example\n * ```ts\n * app.get('/about/me', (c) => {\n * const url = c.req.url // `http://localhost:8787/about/me`\n * ...\n * })\n * ```\n */\n get url() {\n return this.raw.url;\n }\n /**\n * `.method()` can get the method name of the request.\n *\n * @see {@link https://hono.dev/docs/api/request#method}\n *\n * @example\n * ```ts\n * app.get('/about/me', (c) => {\n * const method = c.req.method // `GET`\n * })\n * ```\n */\n get method() {\n return this.raw.method;\n }\n get [GET_MATCH_RESULT]() {\n return this.#matchResult;\n }\n /**\n * `.matchedRoutes()` can return a matched route in the handler\n *\n * @deprecated\n *\n * Use matchedRoutes helper defined in \"hono/route\" instead.\n *\n * @see {@link https://hono.dev/docs/api/request#matchedroutes}\n *\n * @example\n * ```ts\n * app.use('*', async function logger(c, next) {\n * await next()\n * c.req.matchedRoutes.forEach(({ handler, method, path }, i) => {\n * const name = handler.name || (handler.length < 2 ? '[handler]' : '[middleware]')\n * console.log(\n * method,\n * ' ',\n * path,\n * ' '.repeat(Math.max(10 - path.length, 0)),\n * name,\n * i === c.req.routeIndex ? '<- respond from here' : ''\n * )\n * })\n * })\n * ```\n */\n get matchedRoutes() {\n return this.#matchResult[0].map(([[, route]]) => route);\n }\n /**\n * `routePath()` can retrieve the path registered within the handler\n *\n * @deprecated\n *\n * Use routePath helper defined in \"hono/route\" instead.\n *\n * @see {@link https://hono.dev/docs/api/request#routepath}\n *\n * @example\n * ```ts\n * app.get('/posts/:id', (c) => {\n * return c.json({ path: c.req.routePath })\n * })\n * ```\n */\n get routePath() {\n return this.#matchResult[0].map(([[, route]]) => route)[this.routeIndex].path;\n }\n};\nvar cloneRawRequest = async (req) => {\n if (!req.raw.bodyUsed) {\n return req.raw.clone();\n }\n const cacheKey = Object.keys(req.bodyCache)[0];\n if (!cacheKey) {\n throw new HTTPException(500, {\n message: \"Cannot clone request: body was already consumed and not cached. Please use HonoRequest methods (e.g., req.json(), req.text()) instead of consuming req.raw directly.\"\n });\n }\n const requestInit = {\n body: await req[cacheKey](),\n cache: req.raw.cache,\n credentials: req.raw.credentials,\n headers: req.header(),\n integrity: req.raw.integrity,\n keepalive: req.raw.keepalive,\n method: req.method,\n mode: req.raw.mode,\n redirect: req.raw.redirect,\n referrer: req.raw.referrer,\n referrerPolicy: req.raw.referrerPolicy,\n signal: req.raw.signal\n };\n return new Request(req.url, requestInit);\n};\nexport {\n HonoRequest,\n cloneRawRequest\n};\n", "// src/utils/html.ts\nvar HtmlEscapedCallbackPhase = {\n Stringify: 1,\n BeforeStream: 2,\n Stream: 3\n};\nvar raw = (value, callbacks) => {\n const escapedString = new String(value);\n escapedString.isEscaped = true;\n escapedString.callbacks = callbacks;\n return escapedString;\n};\nvar escapeRe = /[&<>'\"]/;\nvar stringBufferToString = async (buffer, callbacks) => {\n let str = \"\";\n callbacks ||= [];\n const resolvedBuffer = await Promise.all(buffer);\n for (let i = resolvedBuffer.length - 1; ; i--) {\n str += resolvedBuffer[i];\n i--;\n if (i < 0) {\n break;\n }\n let r = resolvedBuffer[i];\n if (typeof r === \"object\") {\n callbacks.push(...r.callbacks || []);\n }\n const isEscaped = r.isEscaped;\n r = await (typeof r === \"object\" ? r.toString() : r);\n if (typeof r === \"object\") {\n callbacks.push(...r.callbacks || []);\n }\n if (r.isEscaped ?? isEscaped) {\n str += r;\n } else {\n const buf = [str];\n escapeToBuffer(r, buf);\n str = buf[0];\n }\n }\n return raw(str, callbacks);\n};\nvar escapeToBuffer = (str, buffer) => {\n const match = str.search(escapeRe);\n if (match === -1) {\n buffer[0] += str;\n return;\n }\n let escape;\n let index;\n let lastIndex = 0;\n for (index = match; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34:\n escape = \"&quot;\";\n break;\n case 39:\n escape = \"&#39;\";\n break;\n case 38:\n escape = \"&amp;\";\n break;\n case 60:\n escape = \"&lt;\";\n break;\n case 62:\n escape = \"&gt;\";\n break;\n default:\n continue;\n }\n buffer[0] += str.substring(lastIndex, index) + escape;\n lastIndex = index + 1;\n }\n buffer[0] += str.substring(lastIndex, index);\n};\nvar resolveCallbackSync = (str) => {\n const callbacks = str.callbacks;\n if (!callbacks?.length) {\n return str;\n }\n const buffer = [str];\n const context = {};\n callbacks.forEach((c) => c({ phase: HtmlEscapedCallbackPhase.Stringify, buffer, context }));\n return buffer[0];\n};\nvar resolveCallback = async (str, phase, preserveCallbacks, context, buffer) => {\n if (typeof str === \"object\" && !(str instanceof String)) {\n if (!(str instanceof Promise)) {\n str = str.toString();\n }\n if (str instanceof Promise) {\n str = await str;\n }\n }\n const callbacks = str.callbacks;\n if (!callbacks?.length) {\n return Promise.resolve(str);\n }\n if (buffer) {\n buffer[0] += str;\n } else {\n buffer = [str];\n }\n const resStr = Promise.all(callbacks.map((c) => c({ phase, buffer, context }))).then(\n (res) => Promise.all(\n res.filter(Boolean).map((str2) => resolveCallback(str2, phase, false, context, buffer))\n ).then(() => buffer[0])\n );\n if (preserveCallbacks) {\n return raw(await resStr, callbacks);\n } else {\n return resStr;\n }\n};\nexport {\n HtmlEscapedCallbackPhase,\n escapeToBuffer,\n raw,\n resolveCallback,\n resolveCallbackSync,\n stringBufferToString\n};\n", "// src/context.ts\nimport { HonoRequest } from \"./request.js\";\nimport { HtmlEscapedCallbackPhase, resolveCallback } from \"./utils/html.js\";\nvar TEXT_PLAIN = \"text/plain; charset=UTF-8\";\nvar setDefaultContentType = (contentType, headers) => {\n return {\n \"Content-Type\": contentType,\n ...headers\n };\n};\nvar Context = class {\n #rawRequest;\n #req;\n /**\n * `.env` can get bindings (environment variables, secrets, KV namespaces, D1 database, R2 bucket etc.) in Cloudflare Workers.\n *\n * @see {@link https://hono.dev/docs/api/context#env}\n *\n * @example\n * ```ts\n * // Environment object for Cloudflare Workers\n * app.get('*', async c => {\n * const counter = c.env.COUNTER\n * })\n * ```\n */\n env = {};\n #var;\n finalized = false;\n /**\n * `.error` can get the error object from the middleware if the Handler throws an error.\n *\n * @see {@link https://hono.dev/docs/api/context#error}\n *\n * @example\n * ```ts\n * app.use('*', async (c, next) => {\n * await next()\n * if (c.error) {\n * // do something...\n * }\n * })\n * ```\n */\n error;\n #status;\n #executionCtx;\n #res;\n #layout;\n #renderer;\n #notFoundHandler;\n #preparedHeaders;\n #matchResult;\n #path;\n /**\n * Creates an instance of the Context class.\n *\n * @param req - The Request object.\n * @param options - Optional configuration options for the context.\n */\n constructor(req, options) {\n this.#rawRequest = req;\n if (options) {\n this.#executionCtx = options.executionCtx;\n this.env = options.env;\n this.#notFoundHandler = options.notFoundHandler;\n this.#path = options.path;\n this.#matchResult = options.matchResult;\n }\n }\n /**\n * `.req` is the instance of {@link HonoRequest}.\n */\n get req() {\n this.#req ??= new HonoRequest(this.#rawRequest, this.#path, this.#matchResult);\n return this.#req;\n }\n /**\n * @see {@link https://hono.dev/docs/api/context#event}\n * The FetchEvent associated with the current request.\n *\n * @throws Will throw an error if the context does not have a FetchEvent.\n */\n get event() {\n if (this.#executionCtx && \"respondWith\" in this.#executionCtx) {\n return this.#executionCtx;\n } else {\n throw Error(\"This context has no FetchEvent\");\n }\n }\n /**\n * @see {@link https://hono.dev/docs/api/context#executionctx}\n * The ExecutionContext associated with the current request.\n *\n * @throws Will throw an error if the context does not have an ExecutionContext.\n */\n get executionCtx() {\n if (this.#executionCtx) {\n return this.#executionCtx;\n } else {\n throw Error(\"This context has no ExecutionContext\");\n }\n }\n /**\n * @see {@link https://hono.dev/docs/api/context#res}\n * The Response object for the current request.\n */\n get res() {\n return this.#res ||= new Response(null, {\n headers: this.#preparedHeaders ??= new Headers()\n });\n }\n /**\n * Sets the Response object for the current request.\n *\n * @param _res - The Response object to set.\n */\n set res(_res) {\n if (this.#res && _res) {\n _res = new Response(_res.body, _res);\n for (const [k, v] of this.#res.headers.entries()) {\n if (k === \"content-type\") {\n continue;\n }\n if (k === \"set-cookie\") {\n const cookies = this.#res.headers.getSetCookie();\n _res.headers.delete(\"set-cookie\");\n for (const cookie of cookies) {\n _res.headers.append(\"set-cookie\", cookie);\n }\n } else {\n _res.headers.set(k, v);\n }\n }\n }\n this.#res = _res;\n this.finalized = true;\n }\n /**\n * `.render()` can create a response within a layout.\n *\n * @see {@link https://hono.dev/docs/api/context#render-setrenderer}\n *\n * @example\n * ```ts\n * app.get('/', (c) => {\n * return c.render('Hello!')\n * })\n * ```\n */\n render = (...args) => {\n this.#renderer ??= (content) => this.html(content);\n return this.#renderer(...args);\n };\n /**\n * Sets the layout for the response.\n *\n * @param layout - The layout to set.\n * @returns The layout function.\n */\n setLayout = (layout) => this.#layout = layout;\n /**\n * Gets the current layout for the response.\n *\n * @returns The current layout function.\n */\n getLayout = () => this.#layout;\n /**\n * `.setRenderer()` can set the layout in the custom middleware.\n *\n * @see {@link https://hono.dev/docs/api/context#render-setrenderer}\n *\n * @example\n * ```tsx\n * app.use('*', async (c, next) => {\n * c.setRenderer((content) => {\n * return c.html(\n * <html>\n * <body>\n * <p>{content}</p>\n * </body>\n * </html>\n * )\n * })\n * await next()\n * })\n * ```\n */\n setRenderer = (renderer) => {\n this.#renderer = renderer;\n };\n /**\n * `.header()` can set headers.\n *\n * @see {@link https://hono.dev/docs/api/context#header}\n *\n * @example\n * ```ts\n * app.get('/welcome', (c) => {\n * // Set headers\n * c.header('X-Message', 'Hello!')\n * c.header('Content-Type', 'text/plain')\n *\n * return c.body('Thank you for coming')\n * })\n * ```\n */\n header = (name, value, options) => {\n if (this.finalized) {\n this.#res = new Response(this.#res.body, this.#res);\n }\n const headers = this.#res ? this.#res.headers : this.#preparedHeaders ??= new Headers();\n if (value === void 0) {\n headers.delete(name);\n } else if (options?.append) {\n headers.append(name, value);\n } else {\n headers.set(name, value);\n }\n };\n status = (status) => {\n this.#status = status;\n };\n /**\n * `.set()` can set the value specified by the key.\n *\n * @see {@link https://hono.dev/docs/api/context#set-get}\n *\n * @example\n * ```ts\n * app.use('*', async (c, next) => {\n * c.set('message', 'Hono is hot!!')\n * await next()\n * })\n * ```\n */\n set = (key, value) => {\n this.#var ??= /* @__PURE__ */ new Map();\n this.#var.set(key, value);\n };\n /**\n * `.get()` can use the value specified by the key.\n *\n * @see {@link https://hono.dev/docs/api/context#set-get}\n *\n * @example\n * ```ts\n * app.get('/', (c) => {\n * const message = c.get('message')\n * return c.text(`The message is \"${message}\"`)\n * })\n * ```\n */\n get = (key) => {\n return this.#var ? this.#var.get(key) : void 0;\n };\n /**\n * `.var` can access the value of a variable.\n *\n * @see {@link https://hono.dev/docs/api/context#var}\n *\n * @example\n * ```ts\n * const result = c.var.client.oneMethod()\n * ```\n */\n // c.var.propName is a read-only\n get var() {\n if (!this.#var) {\n return {};\n }\n return Object.fromEntries(this.#var);\n }\n #newResponse(data, arg, headers) {\n const responseHeaders = this.#res ? new Headers(this.#res.headers) : this.#preparedHeaders ?? new Headers();\n if (typeof arg === \"object\" && \"headers\" in arg) {\n const argHeaders = arg.headers instanceof Headers ? arg.headers : new Headers(arg.headers);\n for (const [key, value] of argHeaders) {\n if (key.toLowerCase() === \"set-cookie\") {\n responseHeaders.append(key, value);\n } else {\n responseHeaders.set(key, value);\n }\n }\n }\n if (headers) {\n for (const [k, v] of Object.entries(headers)) {\n if (typeof v === \"string\") {\n responseHeaders.set(k, v);\n } else {\n responseHeaders.delete(k);\n for (const v2 of v) {\n responseHeaders.append(k, v2);\n }\n }\n }\n }\n const status = typeof arg === \"number\" ? arg : arg?.status ?? this.#status;\n return new Response(data, { status, headers: responseHeaders });\n }\n newResponse = (...args) => this.#newResponse(...args);\n /**\n * `.body()` can return the HTTP response.\n * You can set headers with `.header()` and set HTTP status code with `.status`.\n * This can also be set in `.text()`, `.json()` and so on.\n *\n * @see {@link https://hono.dev/docs/api/context#body}\n *\n * @example\n * ```ts\n * app.get('/welcome', (c) => {\n * // Set headers\n * c.header('X-Message', 'Hello!')\n * c.header('Content-Type', 'text/plain')\n * // Set HTTP status code\n * c.status(201)\n *\n * // Return the response body\n * return c.body('Thank you for coming')\n * })\n * ```\n */\n body = (data, arg, headers) => this.#newResponse(data, arg, headers);\n /**\n * `.text()` can render text as `Content-Type:text/plain`.\n *\n * @see {@link https://hono.dev/docs/api/context#text}\n *\n * @example\n * ```ts\n * app.get('/say', (c) => {\n * return c.text('Hello!')\n * })\n * ```\n */\n text = (text, arg, headers) => {\n return !this.#preparedHeaders && !this.#status && !arg && !headers && !this.finalized ? new Response(text) : this.#newResponse(\n text,\n arg,\n setDefaultContentType(TEXT_PLAIN, headers)\n );\n };\n /**\n * `.json()` can render JSON as `Content-Type:application/json`.\n *\n * @see {@link https://hono.dev/docs/api/context#json}\n *\n * @example\n * ```ts\n * app.get('/api', (c) => {\n * return c.json({ message: 'Hello!' })\n * })\n * ```\n */\n json = (object, arg, headers) => {\n return this.#newResponse(\n JSON.stringify(object),\n arg,\n setDefaultContentType(\"application/json\", headers)\n );\n };\n html = (html, arg, headers) => {\n const res = (html2) => this.#newResponse(html2, arg, setDefaultContentType(\"text/html; charset=UTF-8\", headers));\n return typeof html === \"object\" ? resolveCallback(html, HtmlEscapedCallbackPhase.Stringify, false, {}).then(res) : res(html);\n };\n /**\n * `.redirect()` can Redirect, default status code is 302.\n *\n * @see {@link https://hono.dev/docs/api/context#redirect}\n *\n * @example\n * ```ts\n * app.get('/redirect', (c) => {\n * return c.redirect('/')\n * })\n * app.get('/redirect-permanently', (c) => {\n * return c.redirect('/', 301)\n * })\n * ```\n */\n redirect = (location, status) => {\n const locationString = String(location);\n this.header(\n \"Location\",\n // Multibyes should be encoded\n // eslint-disable-next-line no-control-regex\n !/[^\\x00-\\xFF]/.test(locationString) ? locationString : encodeURI(locationString)\n );\n return this.newResponse(null, status ?? 302);\n };\n /**\n * `.notFound()` can return the Not Found Response.\n *\n * @see {@link https://hono.dev/docs/api/context#notfound}\n *\n * @example\n * ```ts\n * app.get('/notfound', (c) => {\n * return c.notFound()\n * })\n * ```\n */\n notFound = () => {\n this.#notFoundHandler ??= () => new Response();\n return this.#notFoundHandler(this);\n };\n};\nexport {\n Context,\n TEXT_PLAIN\n};\n", "// src/router.ts\nvar METHOD_NAME_ALL = \"ALL\";\nvar METHOD_NAME_ALL_LOWERCASE = \"all\";\nvar METHODS = [\"get\", \"post\", \"put\", \"delete\", \"options\", \"patch\"];\nvar MESSAGE_MATCHER_IS_ALREADY_BUILT = \"Can not add a route since the matcher is already built.\";\nvar UnsupportedPathError = class extends Error {\n};\nexport {\n MESSAGE_MATCHER_IS_ALREADY_BUILT,\n METHODS,\n METHOD_NAME_ALL,\n METHOD_NAME_ALL_LOWERCASE,\n UnsupportedPathError\n};\n", "// src/utils/constants.ts\nvar COMPOSED_HANDLER = \"__COMPOSED_HANDLER\";\nexport {\n COMPOSED_HANDLER\n};\n", "// src/hono-base.ts\nimport { compose } from \"./compose.js\";\nimport { Context } from \"./context.js\";\nimport { METHODS, METHOD_NAME_ALL, METHOD_NAME_ALL_LOWERCASE } from \"./router.js\";\nimport { COMPOSED_HANDLER } from \"./utils/constants.js\";\nimport { getPath, getPathNoStrict, mergePath } from \"./utils/url.js\";\nvar notFoundHandler = (c) => {\n return c.text(\"404 Not Found\", 404);\n};\nvar errorHandler = (err, c) => {\n if (\"getResponse\" in err) {\n const res = err.getResponse();\n return c.newResponse(res.body, res);\n }\n console.error(err);\n return c.text(\"Internal Server Error\", 500);\n};\nvar Hono = class _Hono {\n get;\n post;\n put;\n delete;\n options;\n patch;\n all;\n on;\n use;\n /*\n This class is like an abstract class and does not have a router.\n To use it, inherit the class and implement router in the constructor.\n */\n router;\n getPath;\n // Cannot use `#` because it requires visibility at JavaScript runtime.\n _basePath = \"/\";\n #path = \"/\";\n routes = [];\n constructor(options = {}) {\n const allMethods = [...METHODS, METHOD_NAME_ALL_LOWERCASE];\n allMethods.forEach((method) => {\n this[method] = (args1, ...args) => {\n if (typeof args1 === \"string\") {\n this.#path = args1;\n } else {\n this.#addRoute(method, this.#path, args1);\n }\n args.forEach((handler) => {\n this.#addRoute(method, this.#path, handler);\n });\n return this;\n };\n });\n this.on = (method, path, ...handlers) => {\n for (const p of [path].flat()) {\n this.#path = p;\n for (const m of [method].flat()) {\n handlers.map((handler) => {\n this.#addRoute(m.toUpperCase(), this.#path, handler);\n });\n }\n }\n return this;\n };\n this.use = (arg1, ...handlers) => {\n if (typeof arg1 === \"string\") {\n this.#path = arg1;\n } else {\n this.#path = \"*\";\n handlers.unshift(arg1);\n }\n handlers.forEach((handler) => {\n this.#addRoute(METHOD_NAME_ALL, this.#path, handler);\n });\n return this;\n };\n const { strict, ...optionsWithoutStrict } = options;\n Object.assign(this, optionsWithoutStrict);\n this.getPath = strict ?? true ? options.getPath ?? getPath : getPathNoStrict;\n }\n #clone() {\n const clone = new _Hono({\n router: this.router,\n getPath: this.getPath\n });\n clone.errorHandler = this.errorHandler;\n clone.#notFoundHandler = this.#notFoundHandler;\n clone.routes = this.routes;\n return clone;\n }\n #notFoundHandler = notFoundHandler;\n // Cannot use `#` because it requires visibility at JavaScript runtime.\n errorHandler = errorHandler;\n /**\n * `.route()` allows grouping other Hono instance in routes.\n *\n * @see {@link https://hono.dev/docs/api/routing#grouping}\n *\n * @param {string} path - base Path\n * @param {Hono} app - other Hono instance\n * @returns {Hono} routed Hono instance\n *\n * @example\n * ```ts\n * const app = new Hono()\n * const app2 = new Hono()\n *\n * app2.get(\"/user\", (c) => c.text(\"user\"))\n * app.route(\"/api\", app2) // GET /api/user\n * ```\n */\n route(path, app) {\n const subApp = this.basePath(path);\n app.routes.map((r) => {\n let handler;\n if (app.errorHandler === errorHandler) {\n handler = r.handler;\n } else {\n handler = async (c, next) => (await compose([], app.errorHandler)(c, () => r.handler(c, next))).res;\n handler[COMPOSED_HANDLER] = r.handler;\n }\n subApp.#addRoute(r.method, r.path, handler);\n });\n return this;\n }\n /**\n * `.basePath()` allows base paths to be specified.\n *\n * @see {@link https://hono.dev/docs/api/routing#base-path}\n *\n * @param {string} path - base Path\n * @returns {Hono} changed Hono instance\n *\n * @example\n * ```ts\n * const api = new Hono().basePath('/api')\n * ```\n */\n basePath(path) {\n const subApp = this.#clone();\n subApp._basePath = mergePath(this._basePath, path);\n return subApp;\n }\n /**\n * `.onError()` handles an error and returns a customized Response.\n *\n * @see {@link https://hono.dev/docs/api/hono#error-handling}\n *\n * @param {ErrorHandler} handler - request Handler for error\n * @returns {Hono} changed Hono instance\n *\n * @example\n * ```ts\n * app.onError((err, c) => {\n * console.error(`${err}`)\n * return c.text('Custom Error Message', 500)\n * })\n * ```\n */\n onError = (handler) => {\n this.errorHandler = handler;\n return this;\n };\n /**\n * `.notFound()` allows you to customize a Not Found Response.\n *\n * @see {@link https://hono.dev/docs/api/hono#not-found}\n *\n * @param {NotFoundHandler} handler - request handler for not-found\n * @returns {Hono} changed Hono instance\n *\n * @example\n * ```ts\n * app.notFound((c) => {\n * return c.text('Custom 404 Message', 404)\n * })\n * ```\n */\n notFound = (handler) => {\n this.#notFoundHandler = handler;\n return this;\n };\n /**\n * `.mount()` allows you to mount applications built with other frameworks into your Hono application.\n *\n * @see {@link https://hono.dev/docs/api/hono#mount}\n *\n * @param {string} path - base Path\n * @param {Function} applicationHandler - other Request Handler\n * @param {MountOptions} [options] - options of `.mount()`\n * @returns {Hono} mounted Hono instance\n *\n * @example\n * ```ts\n * import { Router as IttyRouter } from 'itty-router'\n * import { Hono } from 'hono'\n * // Create itty-router application\n * const ittyRouter = IttyRouter()\n * // GET /itty-router/hello\n * ittyRouter.get('/hello', () => new Response('Hello from itty-router'))\n *\n * const app = new Hono()\n * app.mount('/itty-router', ittyRouter.handle)\n * ```\n *\n * @example\n * ```ts\n * const app = new Hono()\n * // Send the request to another application without modification.\n * app.mount('/app', anotherApp, {\n * replaceRequest: (req) => req,\n * })\n * ```\n */\n mount(path, applicationHandler, options) {\n let replaceRequest;\n let optionHandler;\n if (options) {\n if (typeof options === \"function\") {\n optionHandler = options;\n } else {\n optionHandler = options.optionHandler;\n if (options.replaceRequest === false) {\n replaceRequest = (request) => request;\n } else {\n replaceRequest = options.replaceRequest;\n }\n }\n }\n const getOptions = optionHandler ? (c) => {\n const options2 = optionHandler(c);\n return Array.isArray(options2) ? options2 : [options2];\n } : (c) => {\n let executionContext = void 0;\n try {\n executionContext = c.executionCtx;\n } catch {\n }\n return [c.env, executionContext];\n };\n replaceRequest ||= (() => {\n const mergedPath = mergePath(this._basePath, path);\n const pathPrefixLength = mergedPath === \"/\" ? 0 : mergedPath.length;\n return (request) => {\n const url = new URL(request.url);\n url.pathname = url.pathname.slice(pathPrefixLength) || \"/\";\n return new Request(url, request);\n };\n })();\n const handler = async (c, next) => {\n const res = await applicationHandler(replaceRequest(c.req.raw), ...getOptions(c));\n if (res) {\n return res;\n }\n await next();\n };\n this.#addRoute(METHOD_NAME_ALL, mergePath(path, \"*\"), handler);\n return this;\n }\n #addRoute(method, path, handler) {\n method = method.toUpperCase();\n path = mergePath(this._basePath, path);\n const r = { basePath: this._basePath, path, method, handler };\n this.router.add(method, path, [handler, r]);\n this.routes.push(r);\n }\n #handleError(err, c) {\n if (err instanceof Error) {\n return this.errorHandler(err, c);\n }\n throw err;\n }\n #dispatch(request, executionCtx, env, method) {\n if (method === \"HEAD\") {\n return (async () => new Response(null, await this.#dispatch(request, executionCtx, env, \"GET\")))();\n }\n const path = this.getPath(request, { env });\n const matchResult = this.router.match(method, path);\n const c = new Context(request, {\n path,\n matchResult,\n env,\n executionCtx,\n notFoundHandler: this.#notFoundHandler\n });\n if (matchResult[0].length === 1) {\n let res;\n try {\n res = matchResult[0][0][0][0](c, async () => {\n c.res = await this.#notFoundHandler(c);\n });\n } catch (err) {\n return this.#handleError(err, c);\n }\n return res instanceof Promise ? res.then(\n (resolved) => resolved || (c.finalized ? c.res : this.#notFoundHandler(c))\n ).catch((err) => this.#handleError(err, c)) : res ?? this.#notFoundHandler(c);\n }\n const composed = compose(matchResult[0], this.errorHandler, this.#notFoundHandler);\n return (async () => {\n try {\n const context = await composed(c);\n if (!context.finalized) {\n throw new Error(\n \"Context is not finalized. Did you forget to return a Response object or `await next()`?\"\n );\n }\n return context.res;\n } catch (err) {\n return this.#handleError(err, c);\n }\n })();\n }\n /**\n * `.fetch()` will be entry point of your app.\n *\n * @see {@link https://hono.dev/docs/api/hono#fetch}\n *\n * @param {Request} request - request Object of request\n * @param {Env} Env - env Object\n * @param {ExecutionContext} - context of execution\n * @returns {Response | Promise<Response>} response of request\n *\n */\n fetch = (request, ...rest) => {\n return this.#dispatch(request, rest[1], rest[0], request.method);\n };\n /**\n * `.request()` is a useful method for testing.\n * You can pass a URL or pathname to send a GET request.\n * app will return a Response object.\n * ```ts\n * test('GET /hello is ok', async () => {\n * const res = await app.request('/hello')\n * expect(res.status).toBe(200)\n * })\n * ```\n * @see https://hono.dev/docs/api/hono#request\n */\n request = (input, requestInit, Env, executionCtx) => {\n if (input instanceof Request) {\n return this.fetch(requestInit ? new Request(input, requestInit) : input, Env, executionCtx);\n }\n input = input.toString();\n return this.fetch(\n new Request(\n /^https?:\\/\\//.test(input) ? input : `http://localhost${mergePath(\"/\", input)}`,\n requestInit\n ),\n Env,\n executionCtx\n );\n };\n /**\n * `.fire()` automatically adds a global fetch event listener.\n * This can be useful for environments that adhere to the Service Worker API, such as non-ES module Cloudflare Workers.\n * @deprecated\n * Use `fire` from `hono/service-worker` instead.\n * ```ts\n * import { Hono } from 'hono'\n * import { fire } from 'hono/service-worker'\n *\n * const app = new Hono()\n * // ...\n * fire(app)\n * ```\n * @see https://hono.dev/docs/api/hono#fire\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API\n * @see https://developers.cloudflare.com/workers/reference/migrate-to-module-workers/\n */\n fire = () => {\n addEventListener(\"fetch\", (event) => {\n event.respondWith(this.#dispatch(event.request, event, void 0, event.request.method));\n });\n };\n};\nexport {\n Hono as HonoBase\n};\n", "// src/router/reg-exp-router/matcher.ts\nimport { METHOD_NAME_ALL } from \"../../router.js\";\nvar emptyParam = [];\nfunction match(method, path) {\n const matchers = this.buildAllMatchers();\n const match2 = ((method2, path2) => {\n const matcher = matchers[method2] || matchers[METHOD_NAME_ALL];\n const staticMatch = matcher[2][path2];\n if (staticMatch) {\n return staticMatch;\n }\n const match3 = path2.match(matcher[0]);\n if (!match3) {\n return [[], emptyParam];\n }\n const index = match3.indexOf(\"\", 1);\n return [matcher[1][index], match3];\n });\n this.match = match2;\n return match2(method, path);\n}\nexport {\n emptyParam,\n match\n};\n", "// src/router/reg-exp-router/node.ts\nvar LABEL_REG_EXP_STR = \"[^/]+\";\nvar ONLY_WILDCARD_REG_EXP_STR = \".*\";\nvar TAIL_WILDCARD_REG_EXP_STR = \"(?:|/.*)\";\nvar PATH_ERROR = /* @__PURE__ */ Symbol();\nvar regExpMetaChars = new Set(\".\\\\+*[^]$()\");\nfunction compareKey(a, b) {\n if (a.length === 1) {\n return b.length === 1 ? a < b ? -1 : 1 : -1;\n }\n if (b.length === 1) {\n return 1;\n }\n if (a === ONLY_WILDCARD_REG_EXP_STR || a === TAIL_WILDCARD_REG_EXP_STR) {\n return 1;\n } else if (b === ONLY_WILDCARD_REG_EXP_STR || b === TAIL_WILDCARD_REG_EXP_STR) {\n return -1;\n }\n if (a === LABEL_REG_EXP_STR) {\n return 1;\n } else if (b === LABEL_REG_EXP_STR) {\n return -1;\n }\n return a.length === b.length ? a < b ? -1 : 1 : b.length - a.length;\n}\nvar Node = class _Node {\n #index;\n #varIndex;\n #children = /* @__PURE__ */ Object.create(null);\n insert(tokens, index, paramMap, context, pathErrorCheckOnly) {\n if (tokens.length === 0) {\n if (this.#index !== void 0) {\n throw PATH_ERROR;\n }\n if (pathErrorCheckOnly) {\n return;\n }\n this.#index = index;\n return;\n }\n const [token, ...restTokens] = tokens;\n const pattern = token === \"*\" ? restTokens.length === 0 ? [\"\", \"\", ONLY_WILDCARD_REG_EXP_STR] : [\"\", \"\", LABEL_REG_EXP_STR] : token === \"/*\" ? [\"\", \"\", TAIL_WILDCARD_REG_EXP_STR] : token.match(/^\\:([^\\{\\}]+)(?:\\{(.+)\\})?$/);\n let node;\n if (pattern) {\n const name = pattern[1];\n let regexpStr = pattern[2] || LABEL_REG_EXP_STR;\n if (name && pattern[2]) {\n if (regexpStr === \".*\") {\n throw PATH_ERROR;\n }\n regexpStr = regexpStr.replace(/^\\((?!\\?:)(?=[^)]+\\)$)/, \"(?:\");\n if (/\\((?!\\?:)/.test(regexpStr)) {\n throw PATH_ERROR;\n }\n }\n node = this.#children[regexpStr];\n if (!node) {\n if (Object.keys(this.#children).some(\n (k) => k !== ONLY_WILDCARD_REG_EXP_STR && k !== TAIL_WILDCARD_REG_EXP_STR\n )) {\n throw PATH_ERROR;\n }\n if (pathErrorCheckOnly) {\n return;\n }\n node = this.#children[regexpStr] = new _Node();\n if (name !== \"\") {\n node.#varIndex = context.varIndex++;\n }\n }\n if (!pathErrorCheckOnly && name !== \"\") {\n paramMap.push([name, node.#varIndex]);\n }\n } else {\n node = this.#children[token];\n if (!node) {\n if (Object.keys(this.#children).some(\n (k) => k.length > 1 && k !== ONLY_WILDCARD_REG_EXP_STR && k !== TAIL_WILDCARD_REG_EXP_STR\n )) {\n throw PATH_ERROR;\n }\n if (pathErrorCheckOnly) {\n return;\n }\n node = this.#children[token] = new _Node();\n }\n }\n node.insert(restTokens, index, paramMap, context, pathErrorCheckOnly);\n }\n buildRegExpStr() {\n const childKeys = Object.keys(this.#children).sort(compareKey);\n const strList = childKeys.map((k) => {\n const c = this.#children[k];\n return (typeof c.#varIndex === \"number\" ? `(${k})@${c.#varIndex}` : regExpMetaChars.has(k) ? `\\\\${k}` : k) + c.buildRegExpStr();\n });\n if (typeof this.#index === \"number\") {\n strList.unshift(`#${this.#index}`);\n }\n if (strList.length === 0) {\n return \"\";\n }\n if (strList.length === 1) {\n return strList[0];\n }\n return \"(?:\" + strList.join(\"|\") + \")\";\n }\n};\nexport {\n Node,\n PATH_ERROR\n};\n", "// src/router/reg-exp-router/trie.ts\nimport { Node } from \"./node.js\";\nvar Trie = class {\n #context = { varIndex: 0 };\n #root = new Node();\n insert(path, index, pathErrorCheckOnly) {\n const paramAssoc = [];\n const groups = [];\n for (let i = 0; ; ) {\n let replaced = false;\n path = path.replace(/\\{[^}]+\\}/g, (m) => {\n const mark = `@\\\\${i}`;\n groups[i] = [mark, m];\n i++;\n replaced = true;\n return mark;\n });\n if (!replaced) {\n break;\n }\n }\n const tokens = path.match(/(?::[^\\/]+)|(?:\\/\\*$)|./g) || [];\n for (let i = groups.length - 1; i >= 0; i--) {\n const [mark] = groups[i];\n for (let j = tokens.length - 1; j >= 0; j--) {\n if (tokens[j].indexOf(mark) !== -1) {\n tokens[j] = tokens[j].replace(mark, groups[i][1]);\n break;\n }\n }\n }\n this.#root.insert(tokens, index, paramAssoc, this.#context, pathErrorCheckOnly);\n return paramAssoc;\n }\n buildRegExp() {\n let regexp = this.#root.buildRegExpStr();\n if (regexp === \"\") {\n return [/^$/, [], []];\n }\n let captureIndex = 0;\n const indexReplacementMap = [];\n const paramReplacementMap = [];\n regexp = regexp.replace(/#(\\d+)|@(\\d+)|\\.\\*\\$/g, (_, handlerIndex, paramIndex) => {\n if (handlerIndex !== void 0) {\n indexReplacementMap[++captureIndex] = Number(handlerIndex);\n return \"$()\";\n }\n if (paramIndex !== void 0) {\n paramReplacementMap[Number(paramIndex)] = ++captureIndex;\n return \"\";\n }\n return \"\";\n });\n return [new RegExp(`^${regexp}`), indexReplacementMap, paramReplacementMap];\n }\n};\nexport {\n Trie\n};\n", "// src/router/reg-exp-router/router.ts\nimport {\n MESSAGE_MATCHER_IS_ALREADY_BUILT,\n METHOD_NAME_ALL,\n UnsupportedPathError\n} from \"../../router.js\";\nimport { checkOptionalParameter } from \"../../utils/url.js\";\nimport { match, emptyParam } from \"./matcher.js\";\nimport { PATH_ERROR } from \"./node.js\";\nimport { Trie } from \"./trie.js\";\nvar nullMatcher = [/^$/, [], /* @__PURE__ */ Object.create(null)];\nvar wildcardRegExpCache = /* @__PURE__ */ Object.create(null);\nfunction buildWildcardRegExp(path) {\n return wildcardRegExpCache[path] ??= new RegExp(\n path === \"*\" ? \"\" : `^${path.replace(\n /\\/\\*$|([.\\\\+*[^\\]$()])/g,\n (_, metaChar) => metaChar ? `\\\\${metaChar}` : \"(?:|/.*)\"\n )}$`\n );\n}\nfunction clearWildcardRegExpCache() {\n wildcardRegExpCache = /* @__PURE__ */ Object.create(null);\n}\nfunction buildMatcherFromPreprocessedRoutes(routes) {\n const trie = new Trie();\n const handlerData = [];\n if (routes.length === 0) {\n return nullMatcher;\n }\n const routesWithStaticPathFlag = routes.map(\n (route) => [!/\\*|\\/:/.test(route[0]), ...route]\n ).sort(\n ([isStaticA, pathA], [isStaticB, pathB]) => isStaticA ? 1 : isStaticB ? -1 : pathA.length - pathB.length\n );\n const staticMap = /* @__PURE__ */ Object.create(null);\n for (let i = 0, j = -1, len = routesWithStaticPathFlag.length; i < len; i++) {\n const [pathErrorCheckOnly, path, handlers] = routesWithStaticPathFlag[i];\n if (pathErrorCheckOnly) {\n staticMap[path] = [handlers.map(([h]) => [h, /* @__PURE__ */ Object.create(null)]), emptyParam];\n } else {\n j++;\n }\n let paramAssoc;\n try {\n paramAssoc = trie.insert(path, j, pathErrorCheckOnly);\n } catch (e) {\n throw e === PATH_ERROR ? new UnsupportedPathError(path) : e;\n }\n if (pathErrorCheckOnly) {\n continue;\n }\n handlerData[j] = handlers.map(([h, paramCount]) => {\n const paramIndexMap = /* @__PURE__ */ Object.create(null);\n paramCount -= 1;\n for (; paramCount >= 0; paramCount--) {\n const [key, value] = paramAssoc[paramCount];\n paramIndexMap[key] = value;\n }\n return [h, paramIndexMap];\n });\n }\n const [regexp, indexReplacementMap, paramReplacementMap] = trie.buildRegExp();\n for (let i = 0, len = handlerData.length; i < len; i++) {\n for (let j = 0, len2 = handlerData[i].length; j < len2; j++) {\n const map = handlerData[i][j]?.[1];\n if (!map) {\n continue;\n }\n const keys = Object.keys(map);\n for (let k = 0, len3 = keys.length; k < len3; k++) {\n map[keys[k]] = paramReplacementMap[map[keys[k]]];\n }\n }\n }\n const handlerMap = [];\n for (const i in indexReplacementMap) {\n handlerMap[i] = handlerData[indexReplacementMap[i]];\n }\n return [regexp, handlerMap, staticMap];\n}\nfunction findMiddleware(middleware, path) {\n if (!middleware) {\n return void 0;\n }\n for (const k of Object.keys(middleware).sort((a, b) => b.length - a.length)) {\n if (buildWildcardRegExp(k).test(path)) {\n return [...middleware[k]];\n }\n }\n return void 0;\n}\nvar RegExpRouter = class {\n name = \"RegExpRouter\";\n #middleware;\n #routes;\n constructor() {\n this.#middleware = { [METHOD_NAME_ALL]: /* @__PURE__ */ Object.create(null) };\n this.#routes = { [METHOD_NAME_ALL]: /* @__PURE__ */ Object.create(null) };\n }\n add(method, path, handler) {\n const middleware = this.#middleware;\n const routes = this.#routes;\n if (!middleware || !routes) {\n throw new Error(MESSAGE_MATCHER_IS_ALREADY_BUILT);\n }\n if (!middleware[method]) {\n ;\n [middleware, routes].forEach((handlerMap) => {\n handlerMap[method] = /* @__PURE__ */ Object.create(null);\n Object.keys(handlerMap[METHOD_NAME_ALL]).forEach((p) => {\n handlerMap[method][p] = [...handlerMap[METHOD_NAME_ALL][p]];\n });\n });\n }\n if (path === \"/*\") {\n path = \"*\";\n }\n const paramCount = (path.match(/\\/:/g) || []).length;\n if (/\\*$/.test(path)) {\n const re = buildWildcardRegExp(path);\n if (method === METHOD_NAME_ALL) {\n Object.keys(middleware).forEach((m) => {\n middleware[m][path] ||= findMiddleware(middleware[m], path) || findMiddleware(middleware[METHOD_NAME_ALL], path) || [];\n });\n } else {\n middleware[method][path] ||= findMiddleware(middleware[method], path) || findMiddleware(middleware[METHOD_NAME_ALL], path) || [];\n }\n Object.keys(middleware).forEach((m) => {\n if (method === METHOD_NAME_ALL || method === m) {\n Object.keys(middleware[m]).forEach((p) => {\n re.test(p) && middleware[m][p].push([handler, paramCount]);\n });\n }\n });\n Object.keys(routes).forEach((m) => {\n if (method === METHOD_NAME_ALL || method === m) {\n Object.keys(routes[m]).forEach(\n (p) => re.test(p) && routes[m][p].push([handler, paramCount])\n );\n }\n });\n return;\n }\n const paths = checkOptionalParameter(path) || [path];\n for (let i = 0, len = paths.length; i < len; i++) {\n const path2 = paths[i];\n Object.keys(routes).forEach((m) => {\n if (method === METHOD_NAME_ALL || method === m) {\n routes[m][path2] ||= [\n ...findMiddleware(middleware[m], path2) || findMiddleware(middleware[METHOD_NAME_ALL], path2) || []\n ];\n routes[m][path2].push([handler, paramCount - len + i + 1]);\n }\n });\n }\n }\n match = match;\n buildAllMatchers() {\n const matchers = /* @__PURE__ */ Object.create(null);\n Object.keys(this.#routes).concat(Object.keys(this.#middleware)).forEach((method) => {\n matchers[method] ||= this.#buildMatcher(method);\n });\n this.#middleware = this.#routes = void 0;\n clearWildcardRegExpCache();\n return matchers;\n }\n #buildMatcher(method) {\n const routes = [];\n let hasOwnRoute = method === METHOD_NAME_ALL;\n [this.#middleware, this.#routes].forEach((r) => {\n const ownRoute = r[method] ? Object.keys(r[method]).map((path) => [path, r[method][path]]) : [];\n if (ownRoute.length !== 0) {\n hasOwnRoute ||= true;\n routes.push(...ownRoute);\n } else if (method !== METHOD_NAME_ALL) {\n routes.push(\n ...Object.keys(r[METHOD_NAME_ALL]).map((path) => [path, r[METHOD_NAME_ALL][path]])\n );\n }\n });\n if (!hasOwnRoute) {\n return null;\n } else {\n return buildMatcherFromPreprocessedRoutes(routes);\n }\n }\n};\nexport {\n RegExpRouter\n};\n", "// src/router/smart-router/router.ts\nimport { MESSAGE_MATCHER_IS_ALREADY_BUILT, UnsupportedPathError } from \"../../router.js\";\nvar SmartRouter = class {\n name = \"SmartRouter\";\n #routers = [];\n #routes = [];\n constructor(init) {\n this.#routers = init.routers;\n }\n add(method, path, handler) {\n if (!this.#routes) {\n throw new Error(MESSAGE_MATCHER_IS_ALREADY_BUILT);\n }\n this.#routes.push([method, path, handler]);\n }\n match(method, path) {\n if (!this.#routes) {\n throw new Error(\"Fatal error\");\n }\n const routers = this.#routers;\n const routes = this.#routes;\n const len = routers.length;\n let i = 0;\n let res;\n for (; i < len; i++) {\n const router = routers[i];\n try {\n for (let i2 = 0, len2 = routes.length; i2 < len2; i2++) {\n router.add(...routes[i2]);\n }\n res = router.match(method, path);\n } catch (e) {\n if (e instanceof UnsupportedPathError) {\n continue;\n }\n throw e;\n }\n this.match = router.match.bind(router);\n this.#routers = [router];\n this.#routes = void 0;\n break;\n }\n if (i === len) {\n throw new Error(\"Fatal error\");\n }\n this.name = `SmartRouter + ${this.activeRouter.name}`;\n return res;\n }\n get activeRouter() {\n if (this.#routes || this.#routers.length !== 1) {\n throw new Error(\"No active router has been determined yet.\");\n }\n return this.#routers[0];\n }\n};\nexport {\n SmartRouter\n};\n", "// src/router/trie-router/node.ts\nimport { METHOD_NAME_ALL } from \"../../router.js\";\nimport { getPattern, splitPath, splitRoutingPath } from \"../../utils/url.js\";\nvar emptyParams = /* @__PURE__ */ Object.create(null);\nvar Node = class _Node {\n #methods;\n #children;\n #patterns;\n #order = 0;\n #params = emptyParams;\n constructor(method, handler, children) {\n this.#children = children || /* @__PURE__ */ Object.create(null);\n this.#methods = [];\n if (method && handler) {\n const m = /* @__PURE__ */ Object.create(null);\n m[method] = { handler, possibleKeys: [], score: 0 };\n this.#methods = [m];\n }\n this.#patterns = [];\n }\n insert(method, path, handler) {\n this.#order = ++this.#order;\n let curNode = this;\n const parts = splitRoutingPath(path);\n const possibleKeys = [];\n for (let i = 0, len = parts.length; i < len; i++) {\n const p = parts[i];\n const nextP = parts[i + 1];\n const pattern = getPattern(p, nextP);\n const key = Array.isArray(pattern) ? pattern[0] : p;\n if (key in curNode.#children) {\n curNode = curNode.#children[key];\n if (pattern) {\n possibleKeys.push(pattern[1]);\n }\n continue;\n }\n curNode.#children[key] = new _Node();\n if (pattern) {\n curNode.#patterns.push(pattern);\n possibleKeys.push(pattern[1]);\n }\n curNode = curNode.#children[key];\n }\n curNode.#methods.push({\n [method]: {\n handler,\n possibleKeys: possibleKeys.filter((v, i, a) => a.indexOf(v) === i),\n score: this.#order\n }\n });\n return curNode;\n }\n #getHandlerSets(node, method, nodeParams, params) {\n const handlerSets = [];\n for (let i = 0, len = node.#methods.length; i < len; i++) {\n const m = node.#methods[i];\n const handlerSet = m[method] || m[METHOD_NAME_ALL];\n const processedSet = {};\n if (handlerSet !== void 0) {\n handlerSet.params = /* @__PURE__ */ Object.create(null);\n handlerSets.push(handlerSet);\n if (nodeParams !== emptyParams || params && params !== emptyParams) {\n for (let i2 = 0, len2 = handlerSet.possibleKeys.length; i2 < len2; i2++) {\n const key = handlerSet.possibleKeys[i2];\n const processed = processedSet[handlerSet.score];\n handlerSet.params[key] = params?.[key] && !processed ? params[key] : nodeParams[key] ?? params?.[key];\n processedSet[handlerSet.score] = true;\n }\n }\n }\n }\n return handlerSets;\n }\n search(method, path) {\n const handlerSets = [];\n this.#params = emptyParams;\n const curNode = this;\n let curNodes = [curNode];\n const parts = splitPath(path);\n const curNodesQueue = [];\n for (let i = 0, len = parts.length; i < len; i++) {\n const part = parts[i];\n const isLast = i === len - 1;\n const tempNodes = [];\n for (let j = 0, len2 = curNodes.length; j < len2; j++) {\n const node = curNodes[j];\n const nextNode = node.#children[part];\n if (nextNode) {\n nextNode.#params = node.#params;\n if (isLast) {\n if (nextNode.#children[\"*\"]) {\n handlerSets.push(\n ...this.#getHandlerSets(nextNode.#children[\"*\"], method, node.#params)\n );\n }\n handlerSets.push(...this.#getHandlerSets(nextNode, method, node.#params));\n } else {\n tempNodes.push(nextNode);\n }\n }\n for (let k = 0, len3 = node.#patterns.length; k < len3; k++) {\n const pattern = node.#patterns[k];\n const params = node.#params === emptyParams ? {} : { ...node.#params };\n if (pattern === \"*\") {\n const astNode = node.#children[\"*\"];\n if (astNode) {\n handlerSets.push(...this.#getHandlerSets(astNode, method, node.#params));\n astNode.#params = params;\n tempNodes.push(astNode);\n }\n continue;\n }\n const [key, name, matcher] = pattern;\n if (!part && !(matcher instanceof RegExp)) {\n continue;\n }\n const child = node.#children[key];\n const restPathString = parts.slice(i).join(\"/\");\n if (matcher instanceof RegExp) {\n const m = matcher.exec(restPathString);\n if (m) {\n params[name] = m[0];\n handlerSets.push(...this.#getHandlerSets(child, method, node.#params, params));\n if (Object.keys(child.#children).length) {\n child.#params = params;\n const componentCount = m[0].match(/\\//)?.length ?? 0;\n const targetCurNodes = curNodesQueue[componentCount] ||= [];\n targetCurNodes.push(child);\n }\n continue;\n }\n }\n if (matcher === true || matcher.test(part)) {\n params[name] = part;\n if (isLast) {\n handlerSets.push(...this.#getHandlerSets(child, method, params, node.#params));\n if (child.#children[\"*\"]) {\n handlerSets.push(\n ...this.#getHandlerSets(child.#children[\"*\"], method, params, node.#params)\n );\n }\n } else {\n child.#params = params;\n tempNodes.push(child);\n }\n }\n }\n }\n curNodes = tempNodes.concat(curNodesQueue.shift() ?? []);\n }\n if (handlerSets.length > 1) {\n handlerSets.sort((a, b) => {\n return a.score - b.score;\n });\n }\n return [handlerSets.map(({ handler, params }) => [handler, params])];\n }\n};\nexport {\n Node\n};\n", "// src/router/trie-router/router.ts\nimport { checkOptionalParameter } from \"../../utils/url.js\";\nimport { Node } from \"./node.js\";\nvar TrieRouter = class {\n name = \"TrieRouter\";\n #node;\n constructor() {\n this.#node = new Node();\n }\n add(method, path, handler) {\n const results = checkOptionalParameter(path);\n if (results) {\n for (let i = 0, len = results.length; i < len; i++) {\n this.#node.insert(method, results[i], handler);\n }\n return;\n }\n this.#node.insert(method, path, handler);\n }\n match(method, path) {\n return this.#node.search(method, path);\n }\n};\nexport {\n TrieRouter\n};\n", "// src/hono.ts\nimport { HonoBase } from \"./hono-base.js\";\nimport { RegExpRouter } from \"./router/reg-exp-router/index.js\";\nimport { SmartRouter } from \"./router/smart-router/index.js\";\nimport { TrieRouter } from \"./router/trie-router/index.js\";\nvar Hono = class extends HonoBase {\n /**\n * Creates an instance of the Hono class.\n *\n * @param options - Optional configuration options for the Hono instance.\n */\n constructor(options = {}) {\n super(options);\n this.router = options.router ?? new SmartRouter({\n routers: [new RegExpRouter(), new TrieRouter()]\n });\n }\n};\nexport {\n Hono\n};\n", "// src/utils/mime.ts\nvar getMimeType = (filename, mimes = baseMimes) => {\n const regexp = /\\.([a-zA-Z0-9]+?)$/;\n const match = filename.match(regexp);\n if (!match) {\n return;\n }\n let mimeType = mimes[match[1]];\n if (mimeType && mimeType.startsWith(\"text\")) {\n mimeType += \"; charset=utf-8\";\n }\n return mimeType;\n};\nvar getExtension = (mimeType) => {\n for (const ext in baseMimes) {\n if (baseMimes[ext] === mimeType) {\n return ext;\n }\n }\n};\nvar _baseMimes = {\n aac: \"audio/aac\",\n avi: \"video/x-msvideo\",\n avif: \"image/avif\",\n av1: \"video/av1\",\n bin: \"application/octet-stream\",\n bmp: \"image/bmp\",\n css: \"text/css\",\n csv: \"text/csv\",\n eot: \"application/vnd.ms-fontobject\",\n epub: \"application/epub+zip\",\n gif: \"image/gif\",\n gz: \"application/gzip\",\n htm: \"text/html\",\n html: \"text/html\",\n ico: \"image/x-icon\",\n ics: \"text/calendar\",\n jpeg: \"image/jpeg\",\n jpg: \"image/jpeg\",\n js: \"text/javascript\",\n json: \"application/json\",\n jsonld: \"application/ld+json\",\n map: \"application/json\",\n mid: \"audio/x-midi\",\n midi: \"audio/x-midi\",\n mjs: \"text/javascript\",\n mp3: \"audio/mpeg\",\n mp4: \"video/mp4\",\n mpeg: \"video/mpeg\",\n oga: \"audio/ogg\",\n ogv: \"video/ogg\",\n ogx: \"application/ogg\",\n opus: \"audio/opus\",\n otf: \"font/otf\",\n pdf: \"application/pdf\",\n png: \"image/png\",\n rtf: \"application/rtf\",\n svg: \"image/svg+xml\",\n tif: \"image/tiff\",\n tiff: \"image/tiff\",\n ts: \"video/mp2t\",\n ttf: \"font/ttf\",\n txt: \"text/plain\",\n wasm: \"application/wasm\",\n webm: \"video/webm\",\n weba: \"audio/webm\",\n webmanifest: \"application/manifest+json\",\n webp: \"image/webp\",\n woff: \"font/woff\",\n woff2: \"font/woff2\",\n xhtml: \"application/xhtml+xml\",\n xml: \"application/xml\",\n zip: \"application/zip\",\n \"3gp\": \"video/3gpp\",\n \"3g2\": \"video/3gpp2\",\n gltf: \"model/gltf+json\",\n glb: \"model/gltf-binary\"\n};\nvar baseMimes = _baseMimes;\nexport {\n getExtension,\n getMimeType,\n baseMimes as mimes\n};\n", "// src/serve-static.ts\nimport { getMimeType } from \"hono/utils/mime\";\nimport { createReadStream, statSync, existsSync } from \"fs\";\nimport { join } from \"path\";\nimport { versions } from \"process\";\nimport { Readable } from \"stream\";\nvar COMPRESSIBLE_CONTENT_TYPE_REGEX = /^\\s*(?:text\\/[^;\\s]+|application\\/(?:javascript|json|xml|xml-dtd|ecmascript|dart|postscript|rtf|tar|toml|vnd\\.dart|vnd\\.ms-fontobject|vnd\\.ms-opentype|wasm|x-httpd-php|x-javascript|x-ns-proxy-autoconfig|x-sh|x-tar|x-virtualbox-hdd|x-virtualbox-ova|x-virtualbox-ovf|x-virtualbox-vbox|x-virtualbox-vdi|x-virtualbox-vhd|x-virtualbox-vmdk|x-www-form-urlencoded)|font\\/(?:otf|ttf)|image\\/(?:bmp|vnd\\.adobe\\.photoshop|vnd\\.microsoft\\.icon|vnd\\.ms-dds|x-icon|x-ms-bmp)|message\\/rfc822|model\\/gltf-binary|x-shader\\/x-fragment|x-shader\\/x-vertex|[^;\\s]+?\\+(?:json|text|xml|yaml))(?:[;\\s]|$)/i;\nvar ENCODINGS = {\n br: \".br\",\n zstd: \".zst\",\n gzip: \".gz\"\n};\nvar ENCODINGS_ORDERED_KEYS = Object.keys(ENCODINGS);\nvar pr54206Applied = () => {\n const [major, minor] = versions.node.split(\".\").map((component) => parseInt(component));\n return major >= 23 || major === 22 && minor >= 7 || major === 20 && minor >= 18;\n};\nvar useReadableToWeb = pr54206Applied();\nvar createStreamBody = (stream) => {\n if (useReadableToWeb) {\n return Readable.toWeb(stream);\n }\n const body = new ReadableStream({\n start(controller) {\n stream.on(\"data\", (chunk) => {\n controller.enqueue(chunk);\n });\n stream.on(\"error\", (err) => {\n controller.error(err);\n });\n stream.on(\"end\", () => {\n controller.close();\n });\n },\n cancel() {\n stream.destroy();\n }\n });\n return body;\n};\nvar getStats = (path) => {\n let stats;\n try {\n stats = statSync(path);\n } catch {\n }\n return stats;\n};\nvar serveStatic = (options = { root: \"\" }) => {\n const root = options.root || \"\";\n const optionPath = options.path;\n if (root !== \"\" && !existsSync(root)) {\n console.error(`serveStatic: root path '${root}' is not found, are you sure it's correct?`);\n }\n return async (c, next) => {\n if (c.finalized) {\n return next();\n }\n let filename;\n if (optionPath) {\n filename = optionPath;\n } else {\n try {\n filename = decodeURIComponent(c.req.path);\n if (/(?:^|[\\/\\\\])\\.\\.(?:$|[\\/\\\\])/.test(filename)) {\n throw new Error();\n }\n } catch {\n await options.onNotFound?.(c.req.path, c);\n return next();\n }\n }\n let path = join(\n root,\n !optionPath && options.rewriteRequestPath ? options.rewriteRequestPath(filename, c) : filename\n );\n let stats = getStats(path);\n if (stats && stats.isDirectory()) {\n const indexFile = options.index ?? \"index.html\";\n path = join(path, indexFile);\n stats = getStats(path);\n }\n if (!stats) {\n await options.onNotFound?.(path, c);\n return next();\n }\n const mimeType = getMimeType(path);\n c.header(\"Content-Type\", mimeType || \"application/octet-stream\");\n if (options.precompressed && (!mimeType || COMPRESSIBLE_CONTENT_TYPE_REGEX.test(mimeType))) {\n const acceptEncodingSet = new Set(\n c.req.header(\"Accept-Encoding\")?.split(\",\").map((encoding) => encoding.trim())\n );\n for (const encoding of ENCODINGS_ORDERED_KEYS) {\n if (!acceptEncodingSet.has(encoding)) {\n continue;\n }\n const precompressedStats = getStats(path + ENCODINGS[encoding]);\n if (precompressedStats) {\n c.header(\"Content-Encoding\", encoding);\n c.header(\"Vary\", \"Accept-Encoding\", { append: true });\n stats = precompressedStats;\n path = path + ENCODINGS[encoding];\n break;\n }\n }\n }\n let result;\n const size = stats.size;\n const range = c.req.header(\"range\") || \"\";\n if (c.req.method == \"HEAD\" || c.req.method == \"OPTIONS\") {\n c.header(\"Content-Length\", size.toString());\n c.status(200);\n result = c.body(null);\n } else if (!range) {\n c.header(\"Content-Length\", size.toString());\n result = c.body(createStreamBody(createReadStream(path)), 200);\n } else {\n c.header(\"Accept-Ranges\", \"bytes\");\n c.header(\"Date\", stats.birthtime.toUTCString());\n const parts = range.replace(/bytes=/, \"\").split(\"-\", 2);\n const start = parseInt(parts[0], 10) || 0;\n let end = parseInt(parts[1], 10) || size - 1;\n if (size < end - start + 1) {\n end = size - 1;\n }\n const chunksize = end - start + 1;\n const stream = createReadStream(path, { start, end });\n c.header(\"Content-Length\", chunksize.toString());\n c.header(\"Content-Range\", `bytes ${start}-${end}/${stats.size}`);\n result = c.body(createStreamBody(stream), 206);\n }\n await options.onFound?.(path, c);\n return result;\n };\n};\nexport {\n serveStatic\n};\n", "/**\n * CLI bridge - spawns `os` binary and parses JSON output\n */\nimport { spawn } from \"node:child_process\";\nimport { CliError, CliTimeoutError } from \"../types.js\";\n\nconst CLI_TIMEOUT_MS = 30_000;\n\n// Allow override via env var (useful for tests)\nconst CLI_PATH = process.env.OVERSEER_CLI_PATH ?? \"os\";\nconst CLI_CWD = process.env.OVERSEER_CLI_CWD ?? process.cwd();\n\n/**\n * Execute os CLI command with --json flag\n */\nexport async function callCli(args: string[]): Promise<unknown> {\n return new Promise((resolve, reject) => {\n const proc = spawn(CLI_PATH, [...args, \"--json\"], {\n cwd: CLI_CWD,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n\n const timeout = setTimeout(() => {\n proc.kill(\"SIGTERM\");\n reject(new CliTimeoutError());\n }, CLI_TIMEOUT_MS);\n\n let stdout = \"\";\n let stderr = \"\";\n\n proc.stdout.on(\"data\", (chunk: Buffer) => {\n stdout += chunk.toString();\n });\n\n proc.stderr.on(\"data\", (chunk: Buffer) => {\n stderr += chunk.toString();\n });\n\n proc.on(\"error\", (err) => {\n clearTimeout(timeout);\n reject(new CliError(`Failed to spawn os: ${err.message}`, -1, \"\"));\n });\n\n proc.on(\"close\", (code) => {\n clearTimeout(timeout);\n\n if (code !== 0) {\n const message = stderr.trim() || `os exited with code ${code}`;\n reject(new CliError(message, code ?? -1, stderr));\n return;\n }\n\n try {\n const result: unknown = JSON.parse(stdout);\n resolve(result);\n } catch (err) {\n reject(\n new CliError(\n `Invalid JSON from os: ${err instanceof Error ? err.message : String(err)}`,\n 0,\n stdout\n )\n );\n }\n });\n });\n}\n", "/**\n * Shared types for Overseer UI API\n * Mirrors mcp/src/types.ts (camelCase from Rust serde)\n */\n\n// Branded types for type-safe IDs\ndeclare const TaskIdBrand: unique symbol;\ndeclare const LearningIdBrand: unique symbol;\n\nexport type TaskId = string & { readonly [TaskIdBrand]: never };\nexport type LearningId = string & { readonly [LearningIdBrand]: never };\n\n// Validation helpers\nexport function isTaskId(s: string): s is TaskId {\n return s.startsWith(\"task_\") && s.length === 31; // \"task_\" + 26 ULID chars\n}\n\nexport function isLearningId(s: string): s is LearningId {\n return s.startsWith(\"lrn_\") && s.length === 30; // \"lrn_\" + 26 ULID chars\n}\n\nexport function parseTaskId(s: string): TaskId {\n if (!isTaskId(s)) {\n throw new Error(`Invalid TaskId: ${s}`);\n }\n return s;\n}\n\nexport function parseLearningId(s: string): LearningId {\n if (!isLearningId(s)) {\n throw new Error(`Invalid LearningId: ${s}`);\n }\n return s;\n}\n\n/**\n * Task context chain (inherited from hierarchy)\n */\nexport interface TaskContext {\n own: string;\n parent?: string;\n milestone?: string;\n}\n\n/**\n * Inherited learnings (own task + ancestors)\n */\nexport interface InheritedLearnings {\n /** Learnings attached directly to this task (bubbled from completed children) */\n own: Learning[];\n /** Learnings from parent task (depth > 0) */\n parent: Learning[];\n /** Learnings from root milestone (depth > 1) */\n milestone: Learning[];\n}\n\n/**\n * Priority levels (enforced by Rust, 1-5)\n */\nexport type Priority = 1 | 2 | 3 | 4 | 5;\n\n/**\n * Task depth (0=milestone, 1=task, 2=subtask)\n */\nexport type Depth = 0 | 1 | 2;\n\n/**\n * Task returned from list/create/update/start/complete/reopen\n * Does NOT include context chain or inherited learnings\n */\nexport interface Task {\n id: TaskId;\n parentId: TaskId | null;\n description: string;\n priority: Priority;\n completed: boolean;\n completedAt: string | null;\n startedAt: string | null;\n createdAt: string;\n updatedAt: string;\n result: string | null;\n commitSha: string | null;\n depth: Depth;\n blockedBy?: TaskId[];\n blocks?: TaskId[];\n bookmark?: string;\n startCommit?: string;\n /** Computed: true if task or any ancestor has incomplete blockers */\n effectivelyBlocked: boolean;\n}\n\n/**\n * Task returned from get/nextReady - includes context chain and inherited learnings\n */\nexport interface TaskWithContext extends Task {\n context: TaskContext;\n learnings: InheritedLearnings;\n}\n\nexport interface Learning {\n id: LearningId;\n taskId: TaskId;\n content: string;\n sourceTaskId: TaskId | null;\n createdAt: string;\n}\n\n/**\n * CLI command errors\n */\nexport class CliError extends Error {\n constructor(\n message: string,\n public exitCode: number,\n public stderr: string\n ) {\n super(message);\n this.name = \"CliError\";\n }\n}\n\nexport class CliTimeoutError extends Error {\n constructor(message = \"CLI command timeout (30s)\") {\n super(message);\n this.name = \"CliTimeoutError\";\n }\n}\n\n// Request/Response types for API\n\nexport interface UpdateTaskRequest {\n description?: string;\n context?: string;\n priority?: Priority;\n}\n\nexport interface CompleteTaskRequest {\n result?: string;\n learnings?: string[];\n}\n\nexport interface TaskFilter {\n parentId?: string;\n ready?: boolean;\n completed?: boolean;\n}\n\nexport interface ApiError {\n error: string;\n code?: string;\n}\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/**\n * Creates data-first/data-last dual function.\n *\n * @template DataLast Curried (data-last) signature.\n * @template DataFirst Uncurried (data-first) signature.\n * @param arity Number of args for data-first form.\n * @param body Implementation function.\n * @returns Function supporting both calling conventions.\n *\n * @example\n * const add: {\n * (a: number, b: number): number;\n * (b: number): (a: number) => number;\n * } = dual(2, (a: number, b: number) => a + b);\n *\n * add(1, 2); // 3 (data-first)\n * add(2)(1); // 3 (data-last)\n */\nexport function dual<\n DataLast extends (...args: Array<any>) => any,\n DataFirst extends (...args: Array<any>) => any,\n>(arity: Parameters<DataFirst>[\"length\"], body: DataFirst): DataLast & DataFirst {\n if (arity === 2) {\n return ((...args: Array<any>) => {\n if (args.length >= 2) {\n return body(args[0], args[1]);\n }\n return (self: any) => body(self, args[0]);\n }) as DataLast & DataFirst;\n }\n\n if (arity === 3) {\n return ((...args: Array<any>) => {\n if (args.length >= 3) {\n return body(args[0], args[1], args[2]);\n }\n return (self: any) => body(self, args[0], args[1]);\n }) as DataLast & DataFirst;\n }\n\n if (arity === 4) {\n return ((...args: Array<any>) => {\n if (args.length >= 4) {\n return body(args[0], args[1], args[2], args[3]);\n }\n return (self: any) => body(self, args[0], args[1], args[2]);\n }) as DataLast & DataFirst;\n }\n\n return ((...args: Array<any>) => {\n if (args.length >= arity) {\n return body(...args);\n }\n return (self: any) => body(self, ...args);\n }) as DataLast & DataFirst;\n}\n", "import { dual } from \"./dual\";\n\n/** Serialize cause for JSON output */\nconst serializeCause = (cause: unknown): unknown => {\n if (cause instanceof Error) {\n return { name: cause.name, message: cause.message, stack: cause.stack };\n }\n return cause;\n};\n\n/** Any tagged error (for generic constraints) */\ntype AnyTaggedError = Error & { readonly _tag: string };\n\n/** Type guard for any tagged error */\nconst isAnyTaggedError = (value: unknown): value is AnyTaggedError => {\n return value instanceof Error && \"_tag\" in value && typeof value._tag === \"string\";\n};\n\n/**\n * Factory for tagged error classes.\n *\n * @example\n * class NotFoundError extends TaggedError(\"NotFoundError\")<{\n * id: string;\n * message: string;\n * }>() {}\n *\n * const err = new NotFoundError({ id: \"123\", message: \"Not found: 123\" });\n * err._tag // \"NotFoundError\"\n * err.id // \"123\"\n * err.message // \"Not found: 123\"\n *\n * // Check if any tagged error\n * TaggedError.is(err) // true\n */\nexport const TaggedError: {\n <Tag extends string>(\n tag: Tag,\n ): <Props extends Record<string, unknown> = {}>() => TaggedErrorClass<Tag, Props>;\n /** Type guard for any TaggedError instance */\n is(value: unknown): value is AnyTaggedError;\n} = Object.assign(\n <Tag extends string>(tag: Tag) =>\n <Props extends Record<string, unknown> = {}>(): TaggedErrorClass<Tag, Props> => {\n class Base extends Error {\n readonly _tag: Tag = tag;\n\n /** Type guard for this error class */\n static is(value: unknown): value is Base {\n return value instanceof Base;\n }\n\n constructor(args?: Props) {\n const message =\n args && \"message\" in args && typeof args.message === \"string\"\n ? args.message\n : undefined;\n const cause = args && \"cause\" in args ? args.cause : undefined;\n\n super(message, cause !== undefined ? { cause } : undefined);\n\n if (args) {\n Object.assign(this, args);\n }\n\n Object.setPrototypeOf(this, new.target.prototype);\n this.name = tag;\n\n if (cause instanceof Error && cause.stack) {\n const indented = cause.stack.replace(/\\n/g, \"\\n \");\n this.stack = `${this.stack}\\nCaused by: ${indented}`;\n }\n }\n\n toJSON(): object {\n return {\n ...this,\n _tag: this._tag,\n name: this.name,\n message: this.message,\n cause: serializeCause(this.cause),\n stack: this.stack,\n };\n }\n }\n\n // SAFETY: Cast needed for factory pattern - Props are assigned via Object.assign\n return Base as unknown as TaggedErrorClass<Tag, Props>;\n },\n { is: isAnyTaggedError },\n);\n\n/** Instance type produced by TaggedError factory */\nexport type TaggedErrorInstance<Tag extends string, Props> = Error & {\n readonly _tag: Tag;\n toJSON(): object;\n} & Readonly<Props>;\n\n/** Class type produced by TaggedError factory */\nexport type TaggedErrorClass<Tag extends string, Props> = {\n new (\n ...args: keyof Props extends never ? [args?: {}] : [args: Props]\n ): TaggedErrorInstance<Tag, Props>;\n /** Type guard for this error class */\n is(value: unknown): value is TaggedErrorInstance<Tag, Props>;\n};\n\n/** Handler map for exhaustive matching */\ntype MatchHandlers<E extends AnyTaggedError, R> = {\n [K in E[\"_tag\"]]: (err: Extract<E, { _tag: K }>) => R;\n};\n\n/** Partial handler map for non-exhaustive matching */\ntype PartialMatchHandlers<E extends AnyTaggedError, R> = Partial<MatchHandlers<E, R>>;\n\n/** Extract handled tags from a handlers object */\ntype HandledTags<E extends AnyTaggedError, H> = Extract<keyof H, E[\"_tag\"]>;\n\n/**\n * Exhaustive pattern match on tagged error union.\n *\n * @example\n * // Data-first\n * matchError(err, {\n * NotFoundError: (e) => `Missing: ${e.id}`,\n * ValidationError: (e) => `Invalid: ${e.field}`,\n * });\n *\n * // Data-last (pipeable)\n * pipe(err, matchError({\n * NotFoundError: (e) => `Missing: ${e.id}`,\n * ValidationError: (e) => `Invalid: ${e.field}`,\n * }));\n */\nexport const matchError: {\n <E extends AnyTaggedError, R>(err: E, handlers: MatchHandlers<E, R>): R;\n <E extends AnyTaggedError, R>(handlers: MatchHandlers<E, R>): (err: E) => R;\n} = dual(2, <E extends AnyTaggedError, R>(err: E, handlers: MatchHandlers<E, R>): R => {\n const handler = handlers[err._tag as E[\"_tag\"]];\n // SAFETY: handler exists if handlers satisfies MatchHandlers<E, R>\n return handler(err as Extract<E, { _tag: (typeof err)[\"_tag\"] }>);\n});\n\n/**\n * Partial pattern match with fallback for unhandled tags.\n *\n * @example\n * matchErrorPartial(err, {\n * NotFoundError: (e) => `Missing: ${e.id}`,\n * }, (e) => `Unknown: ${e.message}`);\n */\nexport const matchErrorPartial: {\n <E extends AnyTaggedError, R, const H extends PartialMatchHandlers<E, R>>(\n err: E,\n handlers: H,\n fallback: (e: Exclude<E, { _tag: NoInfer<HandledTags<E, H>> }>) => R,\n ): R;\n <\n E extends AnyTaggedError,\n R,\n const H extends PartialMatchHandlers<E, R> = PartialMatchHandlers<E, R>,\n >(\n handlers: H,\n fallback: (e: Exclude<E, { _tag: NoInfer<HandledTags<E, H>> }>) => R,\n ): (err: E) => R;\n} = dual(\n 3,\n <E extends AnyTaggedError, R, H extends PartialMatchHandlers<E, R>>(\n err: E,\n handlers: H,\n fallback: (e: Exclude<E, { _tag: HandledTags<E, H> }>) => R,\n ): R => {\n type K = HandledTags<E, H>;\n const handler = handlers[err._tag as K];\n if (typeof handler === \"function\") {\n // SAFETY: handler exists and matches the tag\n return handler(err as Parameters<NonNullable<typeof handler>>[0]);\n }\n // SAFETY: If no handler matched, err is in the Exclude type\n return fallback(err as Exclude<E, { _tag: K }>);\n },\n);\n\n/**\n * Type guard for tagged error instances.\n *\n * @example\n * if (isTaggedError(value)) { value._tag }\n */\nexport const isTaggedError = isAnyTaggedError;\n\n/**\n * Wraps exceptions caught by Result.try/tryPromise.\n * Custom constructor derives message from cause.\n */\nexport class UnhandledException extends TaggedError(\"UnhandledException\")<{\n message: string;\n cause: unknown;\n}>() {\n constructor(args: { cause: unknown }) {\n const message =\n args.cause instanceof Error\n ? `Unhandled exception: ${args.cause.message}`\n : `Unhandled exception: ${String(args.cause)}`;\n super({ message, cause: args.cause });\n }\n}\n\n/**\n * Unrecoverable error — user code threw inside Result operations.\n *\n * @example\n * // Panic in generator cleanup:\n * Result.gen(function* () {\n * try {\n * yield* Result.err(\"expected error\");\n * } finally {\n * throw new Error(\"cleanup failed\"); // Panic!\n * }\n * });\n *\n * // Panic in combinator:\n * Result.ok(1).map(() => { throw new Error(\"oops\"); }); // Panic!\n */\nexport class Panic extends TaggedError(\"Panic\")<{\n message: string;\n cause?: unknown;\n}>() {}\n\n/**\n * Returned when Result.deserialize receives invalid input.\n *\n * @example\n * const result = Result.deserialize(invalidData);\n * if (Result.isError(result) && ResultDeserializationError.is(result.error)) {\n * console.log(\"Invalid input:\", result.error.value);\n * }\n */\nexport class ResultDeserializationError extends TaggedError(\"ResultDeserializationError\")<{\n message: string;\n value: unknown;\n}>() {\n constructor(args: { value: unknown }) {\n super({\n message: `Failed to deserialize value as Result: expected { status: \"ok\", value } or { status: \"error\", error }`,\n value: args.value,\n });\n }\n}\n\n/**\n * Type guard for Panic instances.\n *\n * @example\n * if (isPanic(value)) { value.cause }\n */\nexport const isPanic = (value: unknown): value is Panic => {\n return value instanceof Panic;\n};\n\n/**\n * Throw an unrecoverable Panic.\n *\n * @example\n * panic(\"something went wrong\", cause);\n */\nexport const panic = (message: string, cause?: unknown): never => {\n throw new Panic({ message, cause });\n};\n", "import { panic, ResultDeserializationError, UnhandledException } from \"./error\";\nimport { dual } from \"./dual\";\n\n/** Executes fn, panics if it throws. */\nconst tryOrPanic = <T>(fn: () => T, message: string): T => {\n try {\n return fn();\n } catch (cause) {\n throw panic(message, cause);\n }\n};\n\n/** Async version of tryOrPanic. */\nconst tryOrPanicAsync = async <T>(fn: () => Promise<T>, message: string): Promise<T> => {\n try {\n return await fn();\n } catch (cause) {\n throw panic(message, cause);\n }\n};\n\n/**\n * Successful result variant.\n *\n * @template A Success value type.\n * @template E Error type (phantom - for type unification).\n *\n * @example\n * const result = new Ok(42);\n * result.value // 42\n * result.status // \"ok\"\n */\nexport class Ok<A, E = never> {\n readonly status = \"ok\" as const;\n constructor(readonly value: A) {}\n\n /** Returns true, narrowing Result to Ok. */\n isOk(): this is Ok<A, E> {\n return true;\n }\n\n /** Returns false, narrowing Result to Err. */\n isErr(): this is Err<A, E> {\n return false;\n }\n\n /**\n * Transforms success value.\n *\n * @template B Transformed type.\n * @param fn Transformation function.\n * @returns Ok with transformed value.\n * @throws {Panic} If fn throws.\n *\n * @example\n * ok(2).map(x => x * 2) // Ok(4)\n */\n map<B>(fn: (a: A) => B): Ok<B, E> {\n return tryOrPanic(() => new Ok<B, E>(fn(this.value)), \"map callback threw\");\n }\n\n /**\n * No-op on Ok, returns self with new phantom error type.\n *\n * @template E2 New error type.\n * @param _fn Ignored.\n * @returns Self with updated phantom E type.\n */\n mapError<E2>(_fn: (e: never) => E2): Ok<A, E2> {\n // SAFETY: E is phantom on Ok (not used at runtime).\n return this as unknown as Ok<A, E2>;\n }\n\n /**\n * Chains Result-returning function.\n *\n * @template B New success type.\n * @template E2 New error type.\n * @param fn Function returning Result.\n * @returns Result from fn.\n * @throws {Panic} If fn throws.\n *\n * @example\n * ok(2).andThen(x => x > 0 ? ok(x) : err(\"negative\")) // Ok(2)\n */\n andThen<B, E2>(fn: (a: A) => Result<B, E2>): Result<B, E | E2> {\n return tryOrPanic(() => fn(this.value), \"andThen callback threw\");\n }\n\n /**\n * Chains async Result-returning function.\n *\n * @template B New success type.\n * @template E2 New error type.\n * @param fn Async function returning Result.\n * @returns Promise of Result from fn.\n * @throws {Panic} If fn throws synchronously or rejects.\n *\n * @example\n * await ok(1).andThenAsync(async x => ok(await fetchData(x)))\n */\n andThenAsync<B, E2>(fn: (a: A) => Promise<Result<B, E2>>): Promise<Result<B, E | E2>> {\n return tryOrPanicAsync(() => fn(this.value), \"andThenAsync callback threw\");\n }\n\n /**\n * Pattern matches on Result.\n *\n * @template T Return type.\n * @param handlers Ok and err handlers.\n * @returns Result of ok handler.\n * @throws {Panic} If handler throws.\n *\n * @example\n * ok(2).match({ ok: x => x * 2, err: () => 0 }) // 4\n */\n match<T>(handlers: { ok: (a: A) => T; err: (e: never) => T }): T {\n return tryOrPanic(() => handlers.ok(this.value), \"match ok handler threw\");\n }\n\n /**\n * Extracts value.\n *\n * @param _message Ignored.\n * @returns The value.\n *\n * @example\n * ok(42).unwrap() // 42\n */\n unwrap(_message?: string): A {\n return this.value;\n }\n\n /**\n * Returns value, ignoring fallback.\n *\n * @template B Fallback type.\n * @param _fallback Ignored.\n * @returns The value.\n *\n * @example\n * ok(42).unwrapOr(0) // 42\n */\n unwrapOr<B>(_fallback: B): A {\n return this.value;\n }\n\n /**\n * Runs side effect, returns self.\n *\n * @param fn Side effect function.\n * @returns Self.\n * @throws {Panic} If fn throws.\n *\n * @example\n * ok(2).tap(console.log).map(x => x * 2) // logs 2, returns Ok(4)\n */\n tap(fn: (a: A) => void): Ok<A, E> {\n return tryOrPanic(() => {\n fn(this.value);\n return this;\n }, \"tap callback threw\");\n }\n\n /**\n * Runs async side effect, returns self.\n *\n * @param fn Async side effect function.\n * @returns Promise of self.\n * @throws {Panic} If fn throws synchronously or rejects.\n *\n * @example\n * await ok(2).tapAsync(async x => await log(x))\n */\n tapAsync(fn: (a: A) => Promise<void>): Promise<Ok<A, E>> {\n return tryOrPanicAsync(async () => {\n await fn(this.value);\n return this;\n }, \"tapAsync callback threw\");\n }\n\n /**\n * Makes Ok yieldable in Result.gen blocks.\n * Immediately returns the value without yielding.\n * Yield type Err<never, E> matches Err's for proper union inference.\n */\n // oxlint-disable-next-line require-yield\n *[Symbol.iterator](): Generator<Err<never, E>, A, unknown> {\n return this.value;\n }\n}\n\n/**\n * Error result variant.\n *\n * @template T Success type (phantom - for type unification with Ok).\n * @template E Error value type.\n *\n * @example\n * const result = new Err(\"failed\");\n * result.error // \"failed\"\n * result.status // \"error\"\n */\nexport class Err<T, E> {\n readonly status = \"error\" as const;\n constructor(readonly error: E) {}\n\n /** Returns false, narrowing Result to Ok. */\n isOk(): this is Ok<never, E> {\n return false;\n }\n\n /** Returns true, narrowing Result to Err. */\n isErr(): this is Err<T, E> {\n return true;\n }\n\n /**\n * No-op on Err, returns self with new phantom T.\n *\n * @template U New phantom success type.\n * @param _fn Ignored.\n * @returns Self.\n */\n map<U>(_fn: (a: never) => U): Err<U, E> {\n // SAFETY: T is phantom (not used at runtime). Err only holds `error: E`.\n return this as unknown as Err<U, E>;\n }\n\n /**\n * Transforms error value.\n *\n * @template E2 Transformed error type.\n * @param fn Transformation function.\n * @returns Err with transformed error.\n * @throws {Panic} If fn throws.\n *\n * @example\n * err(\"fail\").mapError(e => new Error(e)) // Err(Error(\"fail\"))\n */\n mapError<E2>(fn: (e: E) => E2): Err<T, E2> {\n return tryOrPanic(() => new Err<T, E2>(fn(this.error)), \"mapError callback threw\");\n }\n\n /**\n * No-op on Err, returns self with widened error type.\n *\n * @template U New phantom success type.\n * @template E2 Additional error type.\n * @param _fn Ignored.\n * @returns Self.\n */\n andThen<U, E2>(_fn: (a: never) => Result<U, E2>): Err<U, E | E2> {\n // SAFETY: T is phantom, E⊂(E|E2) so error type widens safely.\n return this as unknown as Err<U, E | E2>;\n }\n\n /**\n * No-op on Err, returns Promise of self with widened error type.\n *\n * @template U New phantom success type.\n * @template E2 Additional error type.\n * @param _fn Ignored.\n * @returns Promise of self.\n */\n andThenAsync<U, E2>(_fn: (a: never) => Promise<Result<U, E2>>): Promise<Err<U, E | E2>> {\n // SAFETY: T is phantom, E⊂(E|E2) so error type widens safely.\n return Promise.resolve(this as unknown as Err<U, E | E2>);\n }\n\n /**\n * Pattern matches on Result.\n *\n * @template R Return type.\n * @param handlers Ok and err handlers.\n * @returns Result of err handler.\n * @throws {Panic} If handler throws.\n *\n * @example\n * err(\"fail\").match({ ok: x => x, err: e => e.length }) // 4\n */\n match<R>(handlers: { ok: (a: never) => R; err: (e: E) => R }): R {\n return tryOrPanic(() => handlers.err(this.error), \"match err handler threw\");\n }\n\n /**\n * Throws error with optional message.\n *\n * @param message Error message.\n * @throws Always throws.\n *\n * @example\n * err(\"fail\").unwrap() // throws Error\n * err(\"fail\").unwrap(\"custom\") // throws Error(\"custom\")\n */\n unwrap(message?: string): never {\n return panic(message ?? `Unwrap called on Err: ${String(this.error)}`, this.error);\n }\n\n /**\n * Returns fallback value.\n *\n * @template U Fallback type.\n * @param fallback Fallback value.\n * @returns Fallback.\n *\n * @example\n * err(\"fail\").unwrapOr(42) // 42\n */\n unwrapOr<U>(fallback: U): T | U {\n return fallback;\n }\n\n /**\n * No-op on Err, returns self.\n *\n * @param _fn Ignored.\n * @returns Self.\n */\n tap(_fn: (a: never) => void): Err<T, E> {\n return this;\n }\n\n /**\n * No-op on Err, returns Promise of self.\n *\n * @param _fn Ignored.\n * @returns Promise of self.\n */\n tapAsync(_fn: (a: never) => Promise<void>): Promise<Err<T, E>> {\n return Promise.resolve(this);\n }\n\n /**\n * Makes Err yieldable in Result.gen blocks.\n * Yields Err<never, E> for proper union inference across multiple yields.\n */\n *[Symbol.iterator](): Generator<Err<never, E>, never, unknown> {\n // SAFETY: T is phantom (not used at runtime). Casting to Err<never, E>\n // ensures all yields have phantom T as `never`, enabling TypeScript to\n // unify: Err<never, E1> | Err<never, E2> extracts to E1 | E2\n yield this as unknown as Err<never, E>;\n return panic(\"Unreachable: Err yielded in Result.gen but generator continued\", this.error);\n }\n}\n\n/**\n * Discriminated union representing operation success or failure.\n *\n * Both Ok and Err carry phantom types for the \"other\" variant:\n * - Ok<T, E>: T is value, E is phantom error type\n * - Err<T, E>: T is phantom success type, E is error\n *\n * This symmetric structure enables proper type inference in generator-based composition.\n *\n * @template T Success value type.\n * @template E Error value type.\n *\n * @example\n * type ParseResult = Result<number, ParseError>;\n */\nexport type Result<T, E> = Ok<T, E> | Err<T, E>;\n\n/**\n * Extracts error type E from yield union in Result.gen.\n * Yields are always Err<never, E>, so we match on that pattern.\n * Distributive conditional: InferYieldErr<Err<never, A> | Err<never, B>> = A | B\n */\ntype InferYieldErr<Y> = Y extends Err<never, infer E> ? E : never;\n\n/**\n * Infer the Ok value type from a Result.\n * Distributive: InferOk<Ok<A, X> | Ok<B, Y>> = A | B\n */\nexport type InferOk<R> = R extends Ok<infer T, unknown> ? T : never;\n\n/**\n * Infer the Err value type from a Result.\n * Distributive: InferErr<Err<X, A> | Err<Y, B>> = A | B\n */\nexport type InferErr<R> = R extends Err<unknown, infer E> ? E : never;\n\n/**\n * Constraint for any union of Ok/Err types.\n * Used in Result.gen to accept flexible return types from generators.\n */\ntype AnyResult = Ok<unknown, unknown> | Err<unknown, unknown>;\n\nfunction ok(): Ok<void, never>;\nfunction ok<A, E = never>(value: A): Ok<A, E>;\nfunction ok(value?: unknown): Ok<unknown, never> {\n return new Ok(value);\n}\n\nconst isOk = <A, E>(result: Result<A, E>): result is Ok<A, E> => {\n return result.status === \"ok\";\n};\n\nconst err = <T = never, E = unknown>(error: E): Err<T, E> => new Err<T, E>(error);\n\nconst isError = <T, E>(result: Result<T, E>): result is Err<T, E> => {\n return result.status === \"error\";\n};\n\nconst tryFn: {\n <A>(\n thunk: () => Awaited<A>,\n config?: { retry?: { times: number } },\n ): Result<A, UnhandledException>;\n <A, E>(\n options: { try: () => Awaited<A>; catch: (cause: unknown) => Awaited<E> },\n config?: { retry?: { times: number } },\n ): Result<A, E>;\n} = <A, E>(\n options: (() => Awaited<A>) | { try: () => Awaited<A>; catch: (cause: unknown) => Awaited<E> },\n config?: { retry?: { times: number } },\n): Result<A, E | UnhandledException> => {\n const execute = (): Result<A, E | UnhandledException> => {\n if (typeof options === \"function\") {\n try {\n return ok(options());\n } catch (cause) {\n return err(new UnhandledException({ cause }));\n }\n }\n try {\n return ok(options.try());\n } catch (originalCause) {\n // If the user's catch handler throws, it's a defect — Panic\n try {\n return err(options.catch(originalCause));\n } catch (catchHandlerError) {\n throw panic(\"Result.try catch handler threw\", catchHandlerError);\n }\n }\n };\n\n const times = config?.retry?.times ?? 0;\n let result = execute();\n\n for (let retry = 0; retry < times && result.status === \"error\"; retry++) {\n result = execute();\n }\n\n return result;\n};\n\ntype RetryConfig<E = unknown> = {\n retry?: {\n times: number;\n delayMs: number;\n backoff: \"linear\" | \"constant\" | \"exponential\";\n /** Predicate to determine if an error should trigger a retry. Defaults to always retry. */\n shouldRetry?: (error: E) => boolean;\n };\n};\n\nconst tryPromise: {\n <A>(\n thunk: () => Promise<A>,\n config?: RetryConfig<UnhandledException>,\n ): Promise<Result<A, UnhandledException>>;\n <A, E>(\n options: { try: () => Promise<A>; catch: (cause: unknown) => E | Promise<E> },\n config?: RetryConfig<E>,\n ): Promise<Result<A, E>>;\n} = async <A, E>(\n options:\n | (() => Promise<A>)\n | { try: () => Promise<A>; catch: (cause: unknown) => E | Promise<E> },\n config?: RetryConfig<E | UnhandledException>,\n): Promise<Result<A, E | UnhandledException>> => {\n const execute = async (): Promise<Result<A, E | UnhandledException>> => {\n if (typeof options === \"function\") {\n try {\n return ok(await options());\n } catch (cause) {\n return err(new UnhandledException({ cause }));\n }\n }\n try {\n return ok(await options.try());\n } catch (originalCause) {\n // If the user's catch handler throws, it's a defect — Panic\n try {\n return err(await options.catch(originalCause));\n } catch (catchHandlerError) {\n throw panic(\"Result.tryPromise catch handler threw\", catchHandlerError);\n }\n }\n };\n\n const retry = config?.retry;\n\n if (!retry) {\n return execute();\n }\n\n const getDelay = (retryAttempt: number): number => {\n switch (retry.backoff) {\n case \"constant\":\n return retry.delayMs;\n case \"linear\":\n return retry.delayMs * (retryAttempt + 1);\n case \"exponential\":\n return retry.delayMs * 2 ** retryAttempt;\n }\n };\n\n const sleep = (ms: number) => new Promise<void>((resolve) => setTimeout(resolve, ms));\n\n let result = await execute();\n\n const shouldRetryFn = retry.shouldRetry ?? (() => true);\n\n for (let attempt = 0; attempt < retry.times; attempt++) {\n if (result.status !== \"error\") break;\n const error = result.error;\n const shouldContinue = tryOrPanic(() => shouldRetryFn(error), \"shouldRetry predicate threw\");\n if (!shouldContinue) break;\n await sleep(getDelay(attempt));\n result = await execute();\n }\n\n return result;\n};\n\nconst map: {\n <A, B, E>(result: Result<A, E>, fn: (a: A) => B): Result<B, E>;\n <A, B>(fn: (a: A) => B): <E>(result: Result<A, E>) => Result<B, E>;\n} = dual(2, <A, B, E>(result: Result<A, E>, fn: (a: A) => B): Result<B, E> => {\n return result.map(fn);\n});\n\nconst mapError: {\n <A, E, E2>(result: Result<A, E>, fn: (e: E) => E2): Result<A, E2>;\n <E, E2>(fn: (e: E) => E2): <A>(result: Result<A, E>) => Result<A, E2>;\n} = dual(2, <A, E, E2>(result: Result<A, E>, fn: (e: E) => E2): Result<A, E2> => {\n return result.mapError(fn);\n});\n\nconst andThen: {\n <A, B, E, E2>(result: Result<A, E>, fn: (a: A) => Result<B, E2>): Result<B, E | E2>;\n <A, B, E2>(fn: (a: A) => Result<B, E2>): <E>(result: Result<A, E>) => Result<B, E | E2>;\n} = dual(2, <A, B, E, E2>(result: Result<A, E>, fn: (a: A) => Result<B, E2>): Result<B, E | E2> => {\n return result.andThen(fn);\n});\n\nconst andThenAsync: {\n <A, B, E, E2>(\n result: Result<A, E>,\n fn: (a: A) => Promise<Result<B, E2>>,\n ): Promise<Result<B, E | E2>>;\n <A, B, E2>(\n fn: (a: A) => Promise<Result<B, E2>>,\n ): <E>(result: Result<A, E>) => Promise<Result<B, E | E2>>;\n} = dual(\n 2,\n <A, B, E, E2>(\n result: Result<A, E>,\n fn: (a: A) => Promise<Result<B, E2>>,\n ): Promise<Result<B, E | E2>> => {\n return result.andThenAsync(fn);\n },\n);\n\nconst match: {\n <A, E, T>(result: Result<A, E>, handlers: { ok: (a: A) => T; err: (e: E) => T }): T;\n <A, E, T>(handlers: { ok: (a: A) => T; err: (e: E) => T }): (result: Result<A, E>) => T;\n} = dual(2, <A, E, T>(result: Result<A, E>, handlers: { ok: (a: A) => T; err: (e: E) => T }): T => {\n return result.match(handlers);\n});\n\nconst tap: {\n <A, E>(result: Result<A, E>, fn: (a: A) => void): Result<A, E>;\n <A>(fn: (a: A) => void): <E>(result: Result<A, E>) => Result<A, E>;\n} = dual(2, <A, E>(result: Result<A, E>, fn: (a: A) => void): Result<A, E> => {\n return result.tap(fn);\n});\n\nconst tapAsync: {\n <A, E>(result: Result<A, E>, fn: (a: A) => Promise<void>): Promise<Result<A, E>>;\n <A>(fn: (a: A) => Promise<void>): <E>(result: Result<A, E>) => Promise<Result<A, E>>;\n} = dual(2, <A, E>(result: Result<A, E>, fn: (a: A) => Promise<void>): Promise<Result<A, E>> => {\n return result.tapAsync(fn);\n});\n\nconst unwrap = <A, E>(result: Result<A, E>, message?: string): A => {\n return result.unwrap(message);\n};\n\n/** Validates that a value is a Result instance. Throws with helpful message if not. */\nfunction assertIsResult(value: unknown): asserts value is Result<unknown, unknown> {\n if (\n value !== null &&\n typeof value === \"object\" &&\n \"status\" in value &&\n (value.status === \"ok\" || value.status === \"error\")\n ) {\n return;\n }\n return panic(\n \"Result.gen body must return Result.ok() or Result.err(), got: \" +\n (value === null ? \"null\" : typeof value === \"object\" ? JSON.stringify(value) : String(value)),\n );\n}\n\nconst unwrapOr: {\n <A, E, B>(result: Result<A, E>, fallback: B): A | B;\n <B>(fallback: B): <A, E>(result: Result<A, E>) => A | B;\n} = dual(2, <A, E, B>(result: Result<A, E>, fallback: B): A | B => {\n return result.unwrapOr(fallback);\n});\n\nconst gen: {\n <Yield extends Err<never, unknown>, R extends AnyResult>(\n body: () => Generator<Yield, R, unknown>,\n ): Result<InferOk<R>, InferYieldErr<Yield> | InferErr<R>>;\n <Yield extends Err<never, unknown>, R extends AnyResult, This>(\n body: (this: This) => Generator<Yield, R, unknown>,\n thisArg: This,\n ): Result<InferOk<R>, InferYieldErr<Yield> | InferErr<R>>;\n <Yield extends Err<never, unknown>, R extends AnyResult>(\n body: () => AsyncGenerator<Yield, R, unknown>,\n ): Promise<Result<InferOk<R>, InferYieldErr<Yield> | InferErr<R>>>;\n <Yield extends Err<never, unknown>, R extends AnyResult, This>(\n body: (this: This) => AsyncGenerator<Yield, R, unknown>,\n thisArg: This,\n ): Promise<Result<InferOk<R>, InferYieldErr<Yield> | InferErr<R>>>;\n} = (<Yield extends Err<never, unknown>, R extends AnyResult, This>(\n body:\n | (() => Generator<Yield, R, unknown>)\n | (() => AsyncGenerator<Yield, R, unknown>)\n | ((this: This) => Generator<Yield, R, unknown>)\n | ((this: This) => AsyncGenerator<Yield, R, unknown>),\n thisArg?: This,\n):\n | Result<InferOk<R>, InferYieldErr<Yield> | InferErr<R>>\n | Promise<Result<InferOk<R>, InferYieldErr<Yield> | InferErr<R>>> => {\n // SAFETY: body.call binds thisArg; cast needed due to union of function signatures\n const iterator = (body as (this: This) => Generator<Yield, R, unknown>).call(thisArg as This);\n\n // Detect async generator via Symbol.asyncIterator\n if (Symbol.asyncIterator in iterator) {\n return (async () => {\n // SAFETY: Async check above guarantees this is an async generator\n const asyncIter = iterator as unknown as AsyncGenerator<Yield, R, unknown>;\n\n let state: IteratorResult<Yield, R>;\n try {\n state = await asyncIter.next();\n } catch (cause) {\n // Generator body threw before yielding (user code error or cleanup on success path)\n throw panic(\"generator body threw\", cause);\n }\n\n assertIsResult(state.value);\n\n if (!state.done) {\n // Close generator to run finally blocks and Symbol.asyncDispose.\n // If cleanup throws, it's unrecoverable — Panic.\n try {\n await asyncIter.return?.(undefined as unknown as R);\n } catch (cause) {\n throw panic(\"generator cleanup threw\", cause);\n }\n }\n\n return state.value as Result<InferOk<R>, InferYieldErr<Yield> | InferErr<R>>;\n })();\n }\n\n // Sync generator\n // SAFETY: If not async, must be sync generator\n const syncIter = iterator as Generator<Yield, R, unknown>;\n\n let state: IteratorResult<Yield, R>;\n try {\n state = syncIter.next();\n } catch (cause) {\n // Generator body threw before yielding (user code error or cleanup on success path)\n throw panic(\"generator body threw\", cause);\n }\n\n assertIsResult(state.value);\n\n if (!state.done) {\n // Close generator to run finally blocks and Symbol.dispose.\n // If cleanup throws, it's unrecoverable — Panic.\n try {\n syncIter.return?.(undefined as unknown as R);\n } catch (cause) {\n throw panic(\"generator cleanup threw\", cause);\n }\n }\n\n return state.value as Result<InferOk<R>, InferYieldErr<Yield> | InferErr<R>>;\n}) as {\n <Yield extends Err<never, unknown>, R extends AnyResult>(\n body: () => Generator<Yield, R, unknown>,\n ): Result<InferOk<R>, InferYieldErr<Yield> | InferErr<R>>;\n <Yield extends Err<never, unknown>, R extends AnyResult, This>(\n body: (this: This) => Generator<Yield, R, unknown>,\n thisArg: This,\n ): Result<InferOk<R>, InferYieldErr<Yield> | InferErr<R>>;\n <Yield extends Err<never, unknown>, R extends AnyResult>(\n body: () => AsyncGenerator<Yield, R, unknown>,\n ): Promise<Result<InferOk<R>, InferYieldErr<Yield> | InferErr<R>>>;\n <Yield extends Err<never, unknown>, R extends AnyResult, This>(\n body: (this: This) => AsyncGenerator<Yield, R, unknown>,\n thisArg: This,\n ): Promise<Result<InferOk<R>, InferYieldErr<Yield> | InferErr<R>>>;\n};\n\nasync function* resultAwait<T, E>(\n promise: Promise<Result<T, E>>,\n): AsyncGenerator<Err<never, E>, T, unknown> {\n const result = await promise;\n return yield* result;\n}\n\n/** Shape of a serialized Ok over RPC. */\nexport interface SerializedOk<T> {\n status: \"ok\";\n value: T;\n}\n\n/** Shape of a serialized Err over RPC. */\nexport interface SerializedErr<E> {\n status: \"error\";\n error: E;\n}\n\n/** Shape of a serialized Result over RPC. */\nexport type SerializedResult<T, E> = SerializedOk<T> | SerializedErr<E>;\n\nfunction isSerializedResult(obj: unknown): obj is SerializedResult<unknown, unknown> {\n return (\n obj !== null &&\n typeof obj === \"object\" &&\n \"status\" in obj &&\n ((obj.status === \"ok\" && \"value\" in obj) || (obj.status === \"error\" && \"error\" in obj))\n );\n}\n\nconst serialize = <T, E>(result: Result<T, E>): SerializedResult<T, E> => {\n return result.status === \"ok\"\n ? { status: \"ok\", value: result.value }\n : { status: \"error\", error: result.error };\n};\n\nconst deserialize = <T, E>(value: unknown): Result<T, E | ResultDeserializationError> => {\n if (isSerializedResult(value)) {\n return value.status === \"ok\"\n ? (new Ok(value.value) as Result<T, E>)\n : (new Err(value.error) as Result<T, E>);\n }\n return err(new ResultDeserializationError({ value }));\n};\n\n/**\n * @deprecated Use `Result.deserialize` instead. Will be removed in 3.0.\n */\nconst hydrate = <T, E>(value: unknown): Result<T, E | ResultDeserializationError> => {\n return deserialize(value);\n};\n\nconst partition = <T, E>(results: readonly Result<T, E>[]): [T[], E[]] => {\n const oks: T[] = [];\n const errs: E[] = [];\n for (const r of results) {\n if (r.status === \"ok\") {\n oks.push(r.value);\n } else {\n errs.push(r.error);\n }\n }\n return [oks, errs];\n};\n\n/**\n * Flattens nested Result into single Result.\n *\n * @example\n * const nested: Result<Result<number, E1>, E2> = Result.ok(Result.ok(42));\n * const flat: Result<number, E1 | E2> = Result.flatten(nested); // Ok(42)\n */\nconst flatten = <T, E, E2>(result: Result<Result<T, E>, E2>): Result<T, E | E2> => {\n if (result.status === \"ok\") {\n return result.value;\n }\n // SAFETY: T is phantom on Err (not used at runtime), widening E2 to E|E2 is safe\n return result as unknown as Err<T, E | E2>;\n};\n\n/**\n * Utilities for creating and handling Result types.\n *\n * @example\n * const result = Result.try(() => JSON.parse(str));\n * const value = result.map(x => x.id).unwrapOr(\"default\");\n */\nexport const Result = {\n /**\n * Creates successful result.\n *\n * @example\n * Result.ok(42) // Ok<number, never>\n * Result.ok() // Ok<void, never> - for side-effectful operations\n */\n ok,\n /**\n * Type guard for Ok.\n *\n * @example\n * if (Result.isOk(result)) { result.value }\n */\n isOk,\n /**\n * Creates error result.\n *\n * @example\n * Result.err(\"failed\") // Err(\"failed\")\n */\n err,\n /**\n * Type guard for Err.\n *\n * @example\n * if (Result.isError(result)) { result.error }\n */\n isError,\n /**\n * Executes sync function, wraps result/error in Result.\n *\n * @example\n * Result.try(() => JSON.parse(str))\n * Result.try({ try: () => parse(x), catch: e => new ParseError(e) })\n */\n try: tryFn,\n /**\n * Executes async function, wraps result/error in Result with retry support.\n *\n * @example\n * // Basic retry\n * await Result.tryPromise(() => fetch(url), {\n * retry: { times: 3, delayMs: 100, backoff: \"exponential\" }\n * })\n *\n * @example\n * // Retry only for specific error types (user-defined TaggedError classes)\n * await Result.tryPromise({\n * try: () => fetch(url),\n * catch: e => e instanceof TypeError ? new RetryableError(e) : new FatalError(e)\n * }, {\n * retry: {\n * times: 3,\n * delayMs: 100,\n * backoff: \"exponential\",\n * shouldRetry: e => e._tag === \"RetryableError\"\n * }\n * })\n *\n * @example\n * // Async retry decisions: enrich error in catch handler\n * await Result.tryPromise({\n * try: () => callApi(url),\n * catch: async (e) => {\n * const limited = await redis.get(`ratelimit:${userId}`);\n * return new ApiError({ cause: e, rateLimited: !!limited });\n * }\n * }, {\n * retry: { times: 3, delayMs: 100, backoff: \"exponential\", shouldRetry: e => !e.rateLimited }\n * })\n */\n tryPromise,\n /**\n * Transforms success value, passes error through.\n *\n * @example\n * Result.map(ok(2), x => x * 2) // Ok(4)\n * Result.map(x => x * 2)(ok(2)) // Ok(4)\n */\n map,\n /**\n * Transforms error value, passes success through.\n *\n * @example\n * Result.mapError(err(\"fail\"), e => new Error(e)) // Err(Error(\"fail\"))\n */\n mapError,\n /**\n * Chains Result-returning function on success.\n *\n * @example\n * Result.andThen(ok(2), x => x > 0 ? ok(x) : err(\"neg\")) // Ok(2)\n */\n andThen,\n /**\n * Chains async Result-returning function on success.\n *\n * @example\n * await Result.andThenAsync(ok(1), async x => ok(await fetch(x)))\n */\n andThenAsync,\n /**\n * Pattern matches on Result.\n *\n * @example\n * Result.match(ok(2), { ok: x => x * 2, err: () => 0 }) // 4\n */\n match,\n /**\n * Runs side effect on success value, returns original result.\n *\n * @example\n * Result.tap(ok(2), console.log) // logs 2, returns Ok(2)\n */\n tap,\n /**\n * Runs async side effect on success value, returns original result.\n *\n * @example\n * await Result.tapAsync(ok(2), async x => await log(x))\n */\n tapAsync,\n /**\n * Extracts value or throws.\n *\n * @example\n * Result.unwrap(ok(42)) // 42\n * Result.unwrap(err(\"fail\")) // throws Error\n */\n unwrap,\n /**\n * Extracts value or returns fallback.\n *\n * @example\n * Result.unwrapOr(ok(42), 0) // 42\n * Result.unwrapOr(err(\"fail\"), 0) // 0\n */\n unwrapOr,\n /**\n * Generator-based composition for Result types.\n * Errors from yielded Results form a union; use mapError to normalize.\n *\n * @example\n * const result = Result.gen(function* () {\n * const a = yield* getA(); // Err: ErrorA\n * const b = yield* getB(a); // Err: ErrorB\n * return Result.ok({ a, b });\n * });\n * // Result<{a, b}, ErrorA | ErrorB>\n *\n * @example\n * // Normalize error types with mapError\n * const result = Result.gen(function* () {\n * const a = yield* getA();\n * const b = yield* getB(a);\n * return Result.ok({ a, b });\n * }).mapError(e => new UnifiedError(e._tag, e.message));\n * // Result<{a, b}, UnifiedError>\n *\n * @example\n * // Async with Result.await\n * const result = await Result.gen(async function* () {\n * const a = yield* Result.await(fetchA());\n * const b = yield* Result.await(fetchB(a));\n * return Result.ok({ a, b });\n * });\n */\n gen,\n /**\n * Wraps Promise<Result> to be yieldable in async Result.gen blocks.\n *\n * @example\n * yield* Result.await(fetchUser(id))\n */\n await: resultAwait,\n /**\n * Converts a Result to a plain object for serialization (e.g., RPC, server actions).\n *\n * @example\n * const serialized = Result.serialize(ok(42)); // { status: \"ok\", value: 42 }\n */\n serialize,\n /**\n * Rehydrates serialized Result from RPC back into Ok/Err instances.\n * Returns `Err<ResultDeserializationError>` if the input is not a valid serialized Result.\n *\n * @example\n * // Valid serialized Result\n * const result = Result.deserialize<User, AppError>(rpcResponse);\n * if (Result.isOk(result)) {\n * console.log(result.value); // User\n * }\n *\n * // Invalid input returns ResultDeserializationError\n * const invalid = Result.deserialize({ foo: \"bar\" });\n * if (Result.isError(invalid) && ResultDeserializationError.is(invalid.error)) {\n * console.log(\"Bad input:\", invalid.error.value);\n * }\n */\n deserialize,\n /**\n * @deprecated Use `Result.deserialize` instead. Will be removed in 3.0.\n */\n hydrate,\n /**\n * Splits array of Results into tuple of [okValues, errorValues].\n *\n * @example\n * partition([ok(1), err(\"a\"), ok(2)]) // [[1, 2], [\"a\"]]\n */\n partition,\n /**\n * Flattens nested Result into single Result.\n *\n * @example\n * const nested = Result.ok(Result.ok(42));\n * Result.flatten(nested) // Ok(42)\n */\n flatten,\n} as const;\n", "/**\n * Runtime decoders for CLI JSON output.\n * Validates structure matches expected types at runtime.\n */\nimport { Result, TaggedError } from \"better-result\";\nimport {\n isTaskId,\n isLearningId,\n type Task,\n type TaskWithContext,\n type Learning,\n type TaskId,\n type LearningId,\n type Priority,\n type Depth,\n type TaskContext,\n type InheritedLearnings,\n type UpdateTaskRequest,\n type CompleteTaskRequest,\n} from \"./types.js\";\n\n/**\n * Decode error with path context\n */\nexport class DecodeError extends TaggedError(\"DecodeError\")<{\n message: string;\n path?: string;\n}>() {}\n\n// Helper to check if value is a plain object\nfunction isObject(v: unknown): v is Record<string, unknown> {\n return typeof v === \"object\" && v !== null && !Array.isArray(v);\n}\n\n// Helper to check if value is string\nfunction isString(v: unknown): v is string {\n return typeof v === \"string\";\n}\n\n// Helper to check if value is boolean\nfunction isBoolean(v: unknown): v is boolean {\n return typeof v === \"boolean\";\n}\n\n// Helper to check if value is number\nfunction isNumber(v: unknown): v is number {\n return typeof v === \"number\";\n}\n\n// Helper to check valid priority\nfunction isPriority(v: unknown): v is Priority {\n return isNumber(v) && v >= 1 && v <= 5 && Number.isInteger(v);\n}\n\n// Helper to check valid depth\nfunction isDepth(v: unknown): v is Depth {\n return v === 0 || v === 1 || v === 2;\n}\n\n/**\n * Decode a Learning from unknown JSON\n */\nexport function decodeLearning(v: unknown): Result<Learning, DecodeError> {\n if (!isObject(v)) {\n return Result.err(new DecodeError({ message: \"Learning must be object\" }));\n }\n\n const { id, taskId, content, sourceTaskId, createdAt } = v;\n\n if (!isString(id) || !isLearningId(id)) {\n return Result.err(new DecodeError({ message: `Invalid learning id: ${id}` }));\n }\n if (!isString(taskId) || !isTaskId(taskId)) {\n return Result.err(new DecodeError({ message: `Invalid learning taskId: ${taskId}` }));\n }\n if (!isString(content)) {\n return Result.err(new DecodeError({ message: \"Learning content must be string\" }));\n }\n if (sourceTaskId !== null && (!isString(sourceTaskId) || !isTaskId(sourceTaskId))) {\n return Result.err(new DecodeError({ message: `Invalid learning sourceTaskId: ${sourceTaskId}` }));\n }\n if (!isString(createdAt)) {\n return Result.err(new DecodeError({ message: \"Learning createdAt must be string\" }));\n }\n\n return Result.ok({\n id: id as LearningId,\n taskId: taskId as TaskId,\n content,\n sourceTaskId: sourceTaskId as TaskId | null,\n createdAt,\n });\n}\n\n/**\n * Decode a Learning array\n */\nexport function decodeLearnings(v: unknown): Result<Learning[], DecodeError> {\n if (!Array.isArray(v)) {\n return Result.err(new DecodeError({ message: \"Learnings must be array\" }));\n }\n\n const learnings: Learning[] = [];\n for (let i = 0; i < v.length; i++) {\n const result = decodeLearning(v[i]);\n if (result.isErr()) {\n return Result.err(new DecodeError({ \n message: result.error.message, \n path: `learnings[${i}]` \n }));\n }\n learnings.push(result.value);\n }\n return Result.ok(learnings);\n}\n\n/**\n * Decode a Task from unknown JSON\n */\nexport function decodeTask(v: unknown): Result<Task, DecodeError> {\n if (!isObject(v)) {\n return Result.err(new DecodeError({ message: \"Task must be object\" }));\n }\n\n const {\n id,\n parentId,\n description,\n priority,\n completed,\n completedAt,\n startedAt,\n createdAt,\n updatedAt,\n result,\n commitSha,\n depth,\n blockedBy,\n blocks,\n bookmark,\n startCommit,\n effectivelyBlocked,\n } = v;\n\n // Required fields\n if (!isString(id) || !isTaskId(id)) {\n return Result.err(new DecodeError({ message: `Invalid task id: ${id}` }));\n }\n if (parentId !== null && (!isString(parentId) || !isTaskId(parentId))) {\n return Result.err(new DecodeError({ message: `Invalid task parentId: ${parentId}` }));\n }\n if (!isString(description)) {\n return Result.err(new DecodeError({ message: \"Task description must be string\" }));\n }\n if (!isPriority(priority)) {\n return Result.err(new DecodeError({ message: `Invalid task priority: ${priority}` }));\n }\n if (!isBoolean(completed)) {\n return Result.err(new DecodeError({ message: \"Task completed must be boolean\" }));\n }\n if (completedAt !== null && !isString(completedAt)) {\n return Result.err(new DecodeError({ message: \"Task completedAt must be string or null\" }));\n }\n if (startedAt !== null && !isString(startedAt)) {\n return Result.err(new DecodeError({ message: \"Task startedAt must be string or null\" }));\n }\n if (!isString(createdAt)) {\n return Result.err(new DecodeError({ message: \"Task createdAt must be string\" }));\n }\n if (!isString(updatedAt)) {\n return Result.err(new DecodeError({ message: \"Task updatedAt must be string\" }));\n }\n if (result !== null && !isString(result)) {\n return Result.err(new DecodeError({ message: \"Task result must be string or null\" }));\n }\n if (commitSha !== null && !isString(commitSha)) {\n return Result.err(new DecodeError({ message: \"Task commitSha must be string or null\" }));\n }\n if (!isDepth(depth)) {\n return Result.err(new DecodeError({ message: `Invalid task depth: ${depth}` }));\n }\n if (!isBoolean(effectivelyBlocked)) {\n return Result.err(new DecodeError({ message: \"Task effectivelyBlocked must be boolean\" }));\n }\n\n // Optional array fields\n let decodedBlockedBy: TaskId[] | undefined;\n if (blockedBy !== undefined) {\n if (!Array.isArray(blockedBy)) {\n return Result.err(new DecodeError({ message: \"Task blockedBy must be array\" }));\n }\n decodedBlockedBy = [];\n for (const bid of blockedBy) {\n if (!isString(bid) || !isTaskId(bid)) {\n return Result.err(new DecodeError({ message: `Invalid blocker id: ${bid}` }));\n }\n decodedBlockedBy.push(bid as TaskId);\n }\n }\n\n let decodedBlocks: TaskId[] | undefined;\n if (blocks !== undefined) {\n if (!Array.isArray(blocks)) {\n return Result.err(new DecodeError({ message: \"Task blocks must be array\" }));\n }\n decodedBlocks = [];\n for (const bid of blocks) {\n if (!isString(bid) || !isTaskId(bid)) {\n return Result.err(new DecodeError({ message: `Invalid blocks id: ${bid}` }));\n }\n decodedBlocks.push(bid as TaskId);\n }\n }\n\n // Optional string fields\n if (bookmark !== undefined && !isString(bookmark)) {\n return Result.err(new DecodeError({ message: \"Task bookmark must be string\" }));\n }\n if (startCommit !== undefined && !isString(startCommit)) {\n return Result.err(new DecodeError({ message: \"Task startCommit must be string\" }));\n }\n\n const task: Task = {\n id: id as TaskId,\n parentId: parentId as TaskId | null,\n description,\n priority: priority as Priority,\n completed,\n completedAt: completedAt as string | null,\n startedAt: startedAt as string | null,\n createdAt,\n updatedAt,\n result: result as string | null,\n commitSha: commitSha as string | null,\n depth: depth as Depth,\n effectivelyBlocked,\n };\n\n if (decodedBlockedBy) task.blockedBy = decodedBlockedBy;\n if (decodedBlocks) task.blocks = decodedBlocks;\n if (bookmark !== undefined) task.bookmark = bookmark as string;\n if (startCommit !== undefined) task.startCommit = startCommit as string;\n\n return Result.ok(task);\n}\n\n/**\n * Decode a Task array\n */\nexport function decodeTasks(v: unknown): Result<Task[], DecodeError> {\n if (!Array.isArray(v)) {\n return Result.err(new DecodeError({ message: \"Tasks must be array\" }));\n }\n\n const tasks: Task[] = [];\n for (let i = 0; i < v.length; i++) {\n const result = decodeTask(v[i]);\n if (result.isErr()) {\n return Result.err(new DecodeError({ \n message: result.error.message, \n path: `tasks[${i}]` \n }));\n }\n tasks.push(result.value);\n }\n return Result.ok(tasks);\n}\n\n/**\n * Decode TaskContext from unknown JSON\n */\nfunction decodeTaskContext(v: unknown): Result<TaskContext, DecodeError> {\n if (!isObject(v)) {\n return Result.err(new DecodeError({ message: \"TaskContext must be object\" }));\n }\n\n const { own, parent, milestone } = v;\n\n if (!isString(own)) {\n return Result.err(new DecodeError({ message: \"TaskContext.own must be string\" }));\n }\n if (parent !== undefined && !isString(parent)) {\n return Result.err(new DecodeError({ message: \"TaskContext.parent must be string\" }));\n }\n if (milestone !== undefined && !isString(milestone)) {\n return Result.err(new DecodeError({ message: \"TaskContext.milestone must be string\" }));\n }\n\n const ctx: TaskContext = { own };\n if (parent !== undefined) ctx.parent = parent;\n if (milestone !== undefined) ctx.milestone = milestone;\n return Result.ok(ctx);\n}\n\n/**\n * Decode InheritedLearnings from unknown JSON\n */\nfunction decodeInheritedLearnings(v: unknown): Result<InheritedLearnings, DecodeError> {\n if (!isObject(v)) {\n return Result.err(new DecodeError({ message: \"InheritedLearnings must be object\" }));\n }\n\n const { own, parent, milestone } = v;\n\n // All fields should be arrays (possibly empty due to skip_serializing_if)\n const ownResult = decodeLearnings(own ?? []);\n if (ownResult.isErr()) {\n return Result.err(new DecodeError({ message: ownResult.error.message, path: \"learnings.own\" }));\n }\n\n const parentResult = decodeLearnings(parent ?? []);\n if (parentResult.isErr()) {\n return Result.err(new DecodeError({ message: parentResult.error.message, path: \"learnings.parent\" }));\n }\n\n const milestoneResult = decodeLearnings(milestone ?? []);\n if (milestoneResult.isErr()) {\n return Result.err(new DecodeError({ message: milestoneResult.error.message, path: \"learnings.milestone\" }));\n }\n\n return Result.ok({\n own: ownResult.value,\n parent: parentResult.value,\n milestone: milestoneResult.value,\n });\n}\n\n/**\n * Decode TaskWithContext from unknown JSON\n */\nexport function decodeTaskWithContext(v: unknown): Result<TaskWithContext, DecodeError> {\n if (!isObject(v)) {\n return Result.err(new DecodeError({ message: \"TaskWithContext must be object\" }));\n }\n\n // First decode the base task fields\n const taskResult = decodeTask(v);\n if (taskResult.isErr()) return taskResult;\n\n // Then decode context and learnings\n const { context, learnings } = v;\n\n const ctxResult = decodeTaskContext(context);\n if (ctxResult.isErr()) {\n return Result.err(new DecodeError({ message: ctxResult.error.message, path: \"context\" }));\n }\n\n const lrnResult = decodeInheritedLearnings(learnings);\n if (lrnResult.isErr()) {\n return Result.err(new DecodeError({ message: lrnResult.error.message, path: \"learnings\" }));\n }\n\n return Result.ok({\n ...taskResult.value,\n context: ctxResult.value,\n learnings: lrnResult.value,\n });\n}\n\n/**\n * Decode nullable TaskWithContext (for nextReady)\n */\nexport function decodeTaskWithContextOrNull(\n v: unknown\n): Result<TaskWithContext | null, DecodeError> {\n if (v === null) return Result.ok(null);\n return decodeTaskWithContext(v);\n}\n\n/**\n * Decode UpdateTaskRequest from request body\n */\nexport function decodeUpdateTaskRequest(v: unknown): Result<UpdateTaskRequest, DecodeError> {\n if (!isObject(v)) {\n return Result.err(new DecodeError({ message: \"UpdateTaskRequest must be object\" }));\n }\n\n const { description, context, priority } = v;\n\n const req: UpdateTaskRequest = {};\n\n if (description !== undefined) {\n if (!isString(description)) {\n return Result.err(new DecodeError({ message: \"description must be string\" }));\n }\n req.description = description;\n }\n if (context !== undefined) {\n if (!isString(context)) {\n return Result.err(new DecodeError({ message: \"context must be string\" }));\n }\n req.context = context;\n }\n if (priority !== undefined) {\n if (!isPriority(priority)) {\n return Result.err(new DecodeError({ message: `Invalid priority: ${priority}` }));\n }\n req.priority = priority;\n }\n\n return Result.ok(req);\n}\n\n/**\n * Decode CompleteTaskRequest from request body\n */\nexport function decodeCompleteTaskRequest(v: unknown): Result<CompleteTaskRequest, DecodeError> {\n if (!isObject(v)) {\n return Result.err(new DecodeError({ message: \"CompleteTaskRequest must be object\" }));\n }\n\n const { result, learnings } = v;\n\n const req: CompleteTaskRequest = {};\n\n if (result !== undefined) {\n if (!isString(result)) {\n return Result.err(new DecodeError({ message: \"result must be string\" }));\n }\n req.result = result;\n }\n if (learnings !== undefined) {\n if (!Array.isArray(learnings)) {\n return Result.err(new DecodeError({ message: \"learnings must be array\" }));\n }\n for (let i = 0; i < learnings.length; i++) {\n if (!isString(learnings[i])) {\n return Result.err(new DecodeError({ message: `learnings[${i}] must be string` }));\n }\n }\n req.learnings = learnings as string[];\n }\n\n return Result.ok(req);\n}\n", "/**\n * Task API routes\n *\n * Note: No task creation in UI (CLI/MCP only)\n * Note: No start operation (complete only via workflow service)\n */\nimport { Hono, type Context } from \"hono\";\nimport type { StatusCode } from \"hono/utils/http-status\";\nimport { callCli } from \"../cli.js\";\nimport {\n decodeTask,\n decodeTasks,\n decodeTaskWithContext,\n decodeTaskWithContextOrNull,\n decodeLearnings,\n decodeUpdateTaskRequest,\n decodeCompleteTaskRequest,\n} from \"../../decoder.js\";\nimport { CliError, isTaskId, type ApiError } from \"../../types.js\";\n\n/**\n * Handle CLI errors and return appropriate HTTP status\n */\nfunction handleCliError(\n c: Context,\n err: unknown\n): Response & { _data: ApiError; _status: StatusCode } {\n if (err instanceof CliError) {\n // Map common error messages to status codes\n const message = err.message.toLowerCase();\n if (message.includes(\"not found\") || message.includes(\"no task\")) {\n return c.json({ error: err.message }, 404);\n }\n if (\n message.includes(\"invalid\") ||\n message.includes(\"validation\") ||\n message.includes(\"cycle\")\n ) {\n return c.json({ error: err.message }, 400);\n }\n if (\n message.includes(\"not a repository\") ||\n message.includes(\"dirty working copy\")\n ) {\n return c.json({ error: err.message, code: \"VCS_ERROR\" }, 400);\n }\n // Default to 500 for unknown CLI errors\n return c.json({ error: err.message }, 500);\n }\n // Unknown error\n const message = err instanceof Error ? err.message : String(err);\n return c.json({ error: message }, 500);\n}\n\nconst tasks = new Hono()\n /**\n * GET /api/tasks\n * List all tasks with optional filters\n * Query params: parentId, ready, completed\n */\n .get(\"/\", async (c) => {\n const parentId = c.req.query(\"parentId\");\n const ready = c.req.query(\"ready\");\n const completed = c.req.query(\"completed\");\n\n const args = [\"task\", \"list\"];\n if (parentId) {\n if (!isTaskId(parentId)) {\n return c.json({ error: `Invalid parentId: ${parentId}` }, 400);\n }\n args.push(\"--parent\", parentId);\n }\n if (ready === \"true\") args.push(\"--ready\");\n if (completed === \"true\") args.push(\"--completed\");\n\n try {\n const result = decodeTasks(await callCli(args)).unwrap(\"GET /api/tasks\");\n return c.json(result);\n } catch (err) {\n return handleCliError(c, err);\n }\n })\n\n /**\n * GET /api/tasks/next-ready\n * Get next ready task (deepest unblocked incomplete leaf)\n * Query params: milestoneId\n */\n .get(\"/next-ready\", async (c) => {\n const milestoneId = c.req.query(\"milestoneId\");\n\n const args = [\"task\", \"next-ready\"];\n if (milestoneId) {\n if (!isTaskId(milestoneId)) {\n return c.json({ error: `Invalid milestoneId: ${milestoneId}` }, 400);\n }\n args.push(\"--milestone\", milestoneId);\n }\n\n try {\n const result = decodeTaskWithContextOrNull(await callCli(args)).unwrap(\n \"GET /api/tasks/next-ready\"\n );\n if (result === null) {\n return c.json(null, 200);\n }\n return c.json(result);\n } catch (err) {\n return handleCliError(c, err);\n }\n })\n\n /**\n * GET /api/tasks/:id\n * Get single task with full context chain and inherited learnings\n */\n .get(\"/:id\", async (c) => {\n const id = c.req.param(\"id\");\n if (!isTaskId(id)) {\n return c.json({ error: `Invalid task ID: ${id}` }, 400);\n }\n\n try {\n const result = decodeTaskWithContext(await callCli([\"task\", \"get\", id])).unwrap(\n \"GET /api/tasks/:id\"\n );\n return c.json(result);\n } catch (err) {\n return handleCliError(c, err);\n }\n })\n\n /**\n * PUT /api/tasks/:id\n * Update existing task\n */\n .put(\"/:id\", async (c) => {\n const id = c.req.param(\"id\");\n if (!isTaskId(id)) {\n return c.json({ error: `Invalid task ID: ${id}` }, 400);\n }\n\n let body;\n try {\n body = decodeUpdateTaskRequest(await c.req.json()).unwrap(\n \"PUT /api/tasks/:id body\"\n );\n } catch {\n return c.json({ error: \"Invalid JSON body\" }, 400);\n }\n\n const args = [\"task\", \"update\", id];\n if (body.description) args.push(\"-d\", body.description);\n if (body.context) args.push(\"--context\", body.context);\n if (body.priority) args.push(\"--priority\", String(body.priority));\n\n // Must have at least one field to update\n if (args.length === 3) {\n return c.json({ error: \"No fields to update\" }, 400);\n }\n\n try {\n const result = decodeTask(await callCli(args)).unwrap(\"PUT /api/tasks/:id\");\n return c.json(result);\n } catch (err) {\n return handleCliError(c, err);\n }\n })\n\n /**\n * DELETE /api/tasks/:id\n * Delete task (cascades to children and learnings)\n */\n .delete(\"/:id\", async (c) => {\n const id = c.req.param(\"id\");\n if (!isTaskId(id)) {\n return c.json({ error: `Invalid task ID: ${id}` }, 400);\n }\n\n try {\n await callCli([\"task\", \"delete\", id]);\n return c.json({ deleted: true });\n } catch (err) {\n return handleCliError(c, err);\n }\n })\n\n /**\n * POST /api/tasks/:id/complete\n * Complete task with optional result and learnings\n */\n .post(\"/:id/complete\", async (c) => {\n const id = c.req.param(\"id\");\n if (!isTaskId(id)) {\n return c.json({ error: `Invalid task ID: ${id}` }, 400);\n }\n\n let body;\n try {\n const text = await c.req.text();\n if (text) {\n body = decodeCompleteTaskRequest(JSON.parse(text)).unwrap(\n \"POST /api/tasks/:id/complete body\"\n );\n } else {\n body = {};\n }\n } catch {\n return c.json({ error: \"Invalid JSON body\" }, 400);\n }\n\n const args = [\"task\", \"complete\", id];\n if (body.result) args.push(\"--result\", body.result);\n if (body.learnings) {\n for (const learning of body.learnings) {\n args.push(\"--learning\", learning);\n }\n }\n\n try {\n const result = decodeTask(await callCli(args)).unwrap(\"POST /api/tasks/:id/complete\");\n return c.json(result);\n } catch (err) {\n return handleCliError(c, err);\n }\n })\n\n /**\n * POST /api/tasks/:id/reopen\n * Reopen a completed task\n */\n .post(\"/:id/reopen\", async (c) => {\n const id = c.req.param(\"id\");\n if (!isTaskId(id)) {\n return c.json({ error: `Invalid task ID: ${id}` }, 400);\n }\n\n try {\n const result = decodeTask(await callCli([\"task\", \"reopen\", id])).unwrap(\n \"POST /api/tasks/:id/reopen\"\n );\n return c.json(result);\n } catch (err) {\n return handleCliError(c, err);\n }\n })\n\n /**\n * GET /api/tasks/:taskId/learnings\n * List all learnings for a task\n * Includes learnings bubbled from completed child tasks\n */\n .get(\"/:taskId/learnings\", async (c) => {\n const taskId = c.req.param(\"taskId\");\n if (!isTaskId(taskId)) {\n return c.json({ error: `Invalid task ID: ${taskId}` }, 400);\n }\n\n try {\n const result = decodeLearnings(await callCli([\n \"learning\",\n \"list\",\n taskId,\n ])).unwrap(\"GET /api/tasks/:taskId/learnings\");\n return c.json(result);\n } catch (err) {\n return handleCliError(c, err);\n }\n });\n\nexport { tasks };\n", "import { Hono } from \"hono\";\nimport { serveStatic } from \"@hono/node-server/serve-static\";\nimport { tasks } from \"./routes/tasks.js\";\n\n/**\n * Create API routes without static file serving.\n * Static serving is configured separately for dev vs prod.\n */\nconst api = new Hono()\n .get(\"/health\", (c) => {\n return c.json({ status: \"ok\" });\n })\n .route(\"/api/tasks\", tasks)\n // Catch-all for undefined API routes\n .all(\"/api/*\", (c) => c.json({ error: \"Not found\" }, 404));\n\n/**\n * Create full app with static file serving.\n * \n * @param staticRoot - Path to static files (relative to cwd).\n * - Dev: \"./dist\" (relative to ui/)\n * - Prod: Uses OVERSEER_UI_STATIC_ROOT env var, fallback \"./static\"\n */\nexport function createApp(staticRoot?: string) {\n const root = staticRoot ?? process.env.OVERSEER_UI_STATIC_ROOT ?? \"./static\";\n \n return new Hono()\n .route(\"/\", api)\n // Serve static files\n .use(\"/*\", serveStatic({ root }))\n // Fallback to index.html for SPA routing\n .get(\"/*\", serveStatic({ root, path: \"index.html\" }));\n}\n\nexport { api };\n\n// Export AppType based on createApp return type\nexport type AppType = ReturnType<typeof createApp>;\n", "import { serve } from \"@hono/node-server\";\nimport { createApp } from \"./app.js\";\n\nexport type { AppType } from \"./app.js\";\n\nconst PORT =\n process.env.PORT === undefined\n ? 6969\n : Number.parseInt(process.env.PORT, 10) || 6969;\n\n// Static root:\n// - Dev: ./dist (vite output, relative to ui/)\n// - Prod: OVERSEER_UI_STATIC_ROOT env var (set by bin/os)\nconst staticRoot = process.env.OVERSEER_UI_STATIC_ROOT ?? \"./dist\";\n\nconst app = createApp(staticRoot);\n\nserve(\n {\n fetch: app.fetch,\n port: PORT,\n },\n (info) => {\n console.log(`Overseer UI: http://localhost:${info.port}`);\n }\n);\n"],
5
+ "mappings": ";AACA,OAAS,gBAAgBA,OAAwB,OAGjD,OAAS,sBAAsBC,OAA2B,QAG1D,OAAS,sBAAAC,OAA0B,QACnC,OAAS,YAAAC,OAAgB,SAkUzB,OAAOC,OAAY,SAjUnB,IAAIC,EAAe,cAAc,KAAM,CACrC,YAAYC,EAASC,EAAS,CAC5B,MAAMD,EAASC,CAAO,EACtB,KAAK,KAAO,cACd,CACF,EACIC,GAAkB,GAChB,aAAaH,EACR,EAEF,IAAIA,EAAa,EAAE,QAAS,CAAE,MAAO,CAAE,CAAC,EAE7CI,GAAgB,OAAO,QACvBC,EAAU,cAAcD,EAAc,CACxC,YAAYE,EAAOJ,EAAS,CACtB,OAAOI,GAAU,UAAYC,KAAmBD,IAClDA,EAAQA,EAAMC,CAAe,EAAE,GAE7B,OAAOL,GAAS,MAAM,UAAc,MAEtCA,EAAQ,SAAW,QAErB,MAAMI,EAAOJ,CAAO,CACtB,CACF,EACIM,GAA0BC,GAAa,CACzC,IAAMC,EAAe,CAAC,EAChBC,EAAaF,EAAS,WAC5B,QAASG,EAAI,EAAGA,EAAID,EAAW,OAAQC,GAAK,EAAG,CAC7C,GAAM,CAAE,CAACA,CAAC,EAAGC,EAAK,CAACD,EAAI,CAAC,EAAGE,CAAM,EAAIH,EACjCE,EAAI,WAAW,CAAC,IACpB,IACEH,EAAa,KAAK,CAACG,EAAKC,CAAK,CAAC,CAElC,CACA,OAAO,IAAI,QAAQJ,CAAY,CACjC,EACIK,GAAiB,OAAO,gBAAgB,EACxCC,GAAyB,CAACC,EAAQC,EAAKC,EAASV,EAAUW,IAAoB,CAChF,IAAMC,EAAO,CACX,OAAAJ,EACA,QAAAE,EACA,OAAQC,EAAgB,MAC1B,EACA,GAAIH,IAAW,QAAS,CACtBI,EAAK,OAAS,MACd,IAAMC,EAAM,IAAIjB,EAAQa,EAAKG,CAAI,EACjC,cAAO,eAAeC,EAAK,SAAU,CACnC,KAAM,CACJ,MAAO,OACT,CACF,CAAC,EACMA,CACT,CACA,GAAI,EAAEL,IAAW,OAASA,IAAW,QACnC,GAAI,YAAaR,GAAYA,EAAS,mBAAmB,OACvDY,EAAK,KAAO,IAAI,eAAe,CAC7B,MAAME,EAAY,CAChBA,EAAW,QAAQd,EAAS,OAAO,EACnCc,EAAW,MAAM,CACnB,CACF,CAAC,UACQd,EAASM,EAAc,EAAG,CACnC,IAAIS,EACJH,EAAK,KAAO,IAAI,eAAe,CAC7B,MAAM,KAAKE,EAAY,CACrB,GAAI,CACFC,IAAW1B,GAAS,MAAMW,CAAQ,EAAE,UAAU,EAC9C,GAAM,CAAE,KAAAgB,EAAM,MAAAX,CAAM,EAAI,MAAMU,EAAO,KAAK,EACtCC,EACFF,EAAW,MAAM,EAEjBA,EAAW,QAAQT,CAAK,CAE5B,OAASY,EAAO,CACdH,EAAW,MAAMG,CAAK,CACxB,CACF,CACF,CAAC,CACH,MACEL,EAAK,KAAOvB,GAAS,MAAMW,CAAQ,EAGvC,OAAO,IAAIJ,EAAQa,EAAKG,CAAI,CAC9B,EACId,EAAkB,OAAO,iBAAiB,EAC1CoB,GAAe,OAAO,cAAc,EACpCC,GAAc,OAAO,aAAa,EAClCC,GAAS,OAAO,QAAQ,EACxBC,GAAa,OAAO,YAAY,EAChCC,EAAqB,OAAO,oBAAoB,EAChDC,GAAqB,OAAO,oBAAoB,EAChDC,GAAmB,CACrB,IAAI,QAAS,CACX,OAAO,KAAKL,EAAW,EAAE,QAAU,KACrC,EACA,IAAI,KAAM,CACR,OAAO,KAAKC,EAAM,CACpB,EACA,IAAI,SAAU,CACZ,OAAO,KAAKC,EAAU,IAAMtB,GAAuB,KAAKoB,EAAW,CAAC,CACtE,EACA,CAACI,EAAkB,GAAI,CACrB,YAAKzB,CAAe,EAAE,EACf,KAAKwB,CAAkB,CAChC,EACA,CAACxB,CAAe,GAAI,CAClB,YAAKwB,CAAkB,IAAM,IAAI,gBAC1B,KAAKJ,EAAY,IAAMX,GAC5B,KAAK,OACL,KAAKa,EAAM,EACX,KAAK,QACL,KAAKD,EAAW,EAChB,KAAKG,CAAkB,CACzB,CACF,CACF,EACA,CACE,OACA,WACA,QACA,cACA,cACA,YACA,OACA,WACA,WACA,iBACA,SACA,WACF,EAAE,QAASG,GAAM,CACf,OAAO,eAAeD,GAAkBC,EAAG,CACzC,KAAM,CACJ,OAAO,KAAK3B,CAAe,EAAE,EAAE2B,CAAC,CAClC,CACF,CAAC,CACH,CAAC,EACD,CAAC,cAAe,OAAQ,QAAS,WAAY,OAAQ,MAAM,EAAE,QAASA,GAAM,CAC1E,OAAO,eAAeD,GAAkBC,EAAG,CACzC,MAAO,UAAW,CAChB,OAAO,KAAK3B,CAAe,EAAE,EAAE2B,CAAC,EAAE,CACpC,CACF,CAAC,CACH,CAAC,EACD,OAAO,eAAeD,GAAkB5B,EAAQ,SAAS,EACzD,IAAI8B,GAAa,CAAC1B,EAAU2B,IAAoB,CAC9C,IAAMd,EAAM,OAAO,OAAOW,EAAgB,EAC1CX,EAAIM,EAAW,EAAInB,EACnB,IAAM4B,EAAc5B,EAAS,KAAO,GACpC,GAAI4B,EAAY,CAAC,IAAM,MACtBA,EAAY,WAAW,SAAS,GAAKA,EAAY,WAAW,UAAU,GAAI,CACzE,GAAI5B,aAAoBZ,GACtB,MAAM,IAAIG,EAAa,iDAAiD,EAE1E,GAAI,CACF,IAAMsC,EAAO,IAAI,IAAID,CAAW,EAChCf,EAAIO,EAAM,EAAIS,EAAK,IACrB,OAASC,EAAG,CACV,MAAM,IAAIvC,EAAa,uBAAwB,CAAE,MAAOuC,CAAE,CAAC,CAC7D,CACA,OAAOjB,CACT,CACA,IAAMkB,GAAQ/B,aAAoBZ,GAAqBY,EAAS,UAAYA,EAAS,QAAQ,OAAS2B,EACtG,GAAI,CAACI,EACH,MAAM,IAAIxC,EAAa,qBAAqB,EAE9C,IAAIyC,EACJ,GAAIhC,aAAoBZ,IAEtB,GADA4C,EAAShC,EAAS,OACd,EAAEgC,IAAW,QAAUA,IAAW,SACpC,MAAM,IAAIzC,EAAa,oBAAoB,OAG7CyC,EAAShC,EAAS,QAAUA,EAAS,OAAO,UAAY,QAAU,OAEpE,IAAMS,EAAM,IAAI,IAAI,GAAGuB,CAAM,MAAMD,CAAI,GAAGH,CAAW,EAAE,EACvD,GAAInB,EAAI,SAAS,SAAWsB,EAAK,QAAUtB,EAAI,WAAasB,EAAK,QAAQ,QAAS,EAAE,EAClF,MAAM,IAAIxC,EAAa,qBAAqB,EAE9C,OAAAsB,EAAIO,EAAM,EAAIX,EAAI,KACXI,CACT,EAGIoB,GAAgB,OAAO,eAAe,EACtCC,EAAmB,OAAO,kBAAkB,EAC5CC,EAAW,OAAO,OAAO,EACzBC,GAAiB,OAAO,SACxBC,EAAY,MAAMC,EAAU,CAC9BC,GACAC,GACA,CAACN,CAAgB,GAAI,CACnB,cAAO,KAAKC,CAAQ,EACb,KAAKF,EAAa,IAAM,IAAIG,GAAe,KAAKG,GAAO,KAAKC,EAAK,CAC1E,CACA,YAAYC,EAAM7B,EAAM,CACtB,IAAIF,EAEJ,GADA,KAAK6B,GAAQE,EACT7B,aAAgB0B,GAAW,CAC7B,IAAMI,EAAuB9B,EAAKqB,EAAa,EAC/C,GAAIS,EAAsB,CACxB,KAAKF,GAAQE,EACb,KAAKR,CAAgB,EAAE,EACvB,MACF,MACE,KAAKM,GAAQ5B,EAAK4B,GAClB9B,EAAU,IAAI,QAAQE,EAAK4B,GAAM,OAAO,CAE5C,MACE,KAAKA,GAAQ5B,GAEX,OAAO6B,GAAS,UAAY,OAAOA,GAAM,UAAc,KAAeA,aAAgB,MAAQA,aAAgB,cAChH/B,IAAYE,GAAM,SAAW,CAAE,eAAgB,2BAA4B,EAC3E,KAAKuB,CAAQ,EAAI,CAACvB,GAAM,QAAU,IAAK6B,EAAM/B,CAAO,EAExD,CACA,IAAI,SAAU,CACZ,IAAMiC,EAAQ,KAAKR,CAAQ,EAC3B,OAAIQ,GACIA,EAAM,CAAC,YAAa,UACxBA,EAAM,CAAC,EAAI,IAAI,QAAQA,EAAM,CAAC,CAAC,GAE1BA,EAAM,CAAC,GAET,KAAKT,CAAgB,EAAE,EAAE,OAClC,CACA,IAAI,QAAS,CACX,OAAO,KAAKC,CAAQ,IAAI,CAAC,GAAK,KAAKD,CAAgB,EAAE,EAAE,MACzD,CACA,IAAI,IAAK,CACP,IAAMU,EAAS,KAAK,OACpB,OAAOA,GAAU,KAAOA,EAAS,GACnC,CACF,EACA,CAAC,OAAQ,WAAY,aAAc,aAAc,WAAY,OAAQ,KAAK,EAAE,QAASnB,GAAM,CACzF,OAAO,eAAeY,EAAU,UAAWZ,EAAG,CAC5C,KAAM,CACJ,OAAO,KAAKS,CAAgB,EAAE,EAAET,CAAC,CACnC,CACF,CAAC,CACH,CAAC,EACD,CAAC,cAAe,OAAQ,QAAS,WAAY,OAAQ,MAAM,EAAE,QAASA,GAAM,CAC1E,OAAO,eAAeY,EAAU,UAAWZ,EAAG,CAC5C,MAAO,UAAW,CAChB,OAAO,KAAKS,CAAgB,EAAE,EAAET,CAAC,EAAE,CACrC,CACF,CAAC,CACH,CAAC,EACD,OAAO,eAAeY,EAAWD,EAAc,EAC/C,OAAO,eAAeC,EAAU,UAAWD,GAAe,SAAS,EAGnE,eAAeS,GAAoBC,EAAa,CAC9C,OAAO,QAAQ,KAAK,CAACA,EAAa,QAAQ,QAAQ,EAAE,KAAK,IAAM,QAAQ,QAAQ,MAAM,CAAC,CAAC,CAAC,CAC1F,CACA,SAASC,GAAqChC,EAAQiC,EAAUC,EAAoB,CAClF,IAAMC,EAAUjC,GAAU,CACxBF,EAAO,OAAOE,CAAK,EAAE,MAAM,IAAM,CACjC,CAAC,CACH,EACA,OAAA+B,EAAS,GAAG,QAASE,CAAM,EAC3BF,EAAS,GAAG,QAASE,CAAM,GAC1BD,GAAsBlC,EAAO,KAAK,GAAG,KAAKoC,EAAMC,CAAiB,EAC3DrC,EAAO,OAAO,QAAQ,IAAM,CACjCiC,EAAS,IAAI,QAASE,CAAM,EAC5BF,EAAS,IAAI,QAASE,CAAM,CAC9B,CAAC,EACD,SAASE,EAAkBnC,EAAO,CAC5BA,GACF+B,EAAS,QAAQ/B,CAAK,CAE1B,CACA,SAASoC,GAAU,CACjBtC,EAAO,KAAK,EAAE,KAAKoC,EAAMC,CAAiB,CAC5C,CACA,SAASD,EAAK,CAAE,KAAAnC,EAAM,MAAAX,CAAM,EAAG,CAC7B,GAAI,CACF,GAAIW,EACFgC,EAAS,IAAI,UACJ,CAACA,EAAS,MAAM3C,CAAK,EAC9B2C,EAAS,KAAK,QAASK,CAAO,MAE9B,QAAOtC,EAAO,KAAK,EAAE,KAAKoC,EAAMC,CAAiB,CAErD,OAAStB,EAAG,CACVsB,EAAkBtB,CAAC,CACrB,CACF,CACF,CACA,SAASwB,GAAwBC,EAAQP,EAAU,CACjD,GAAIO,EAAO,OACT,MAAM,IAAI,UAAU,2BAA2B,EAC1C,OAAIP,EAAS,UAClB,OAEKD,GAAqCQ,EAAO,UAAU,EAAGP,CAAQ,CAC1E,CACA,IAAIQ,GAA4B9C,GAAY,CAC1C,IAAM+C,EAAM,CAAC,EACP/C,aAAmB,UACvBA,EAAU,IAAI,QAAQA,GAAW,MAAM,GAEzC,IAAMgD,EAAU,CAAC,EACjB,OAAW,CAACjC,EAAGkC,CAAC,IAAKjD,EACfe,IAAM,aACRiC,EAAQ,KAAKC,CAAC,EAEdF,EAAIhC,CAAC,EAAIkC,EAGb,OAAID,EAAQ,OAAS,IACnBD,EAAI,YAAY,EAAIC,GAEtBD,EAAI,cAAc,IAAM,4BACjBA,CACT,EAGIG,GAAiB,sBAIjB,OAAO,OAAO,OAAW,MAC3B,OAAO,OAAStE,IAIlB,IAAIuE,GAAgB,OAAO,eAAe,EACtCC,GAAqB,IAAM,IAAI,SAAS,KAAM,CAChD,OAAQ,GACV,CAAC,EACGC,GAAoB,GAAM,IAAI,SAAS,KAAM,CAC/C,OAAQ,aAAa,QAAU,EAAE,OAAS,gBAAkB,EAAE,YAAY,OAAS,gBAAkB,IAAM,GAC7G,CAAC,EACGC,GAAsB,CAAC,EAAGC,IAAa,CACzC,IAAMC,EAAM,aAAa,MAAQ,EAAI,IAAI,MAAM,gBAAiB,CAAE,MAAO,CAAE,CAAC,EACxEA,EAAI,OAAS,6BACf,QAAQ,KAAK,6BAA6B,GAE1C,QAAQ,MAAM,CAAC,EACVD,EAAS,aACZA,EAAS,UAAU,IAAK,CAAE,eAAgB,YAAa,CAAC,EAE1DA,EAAS,IAAI,UAAUC,EAAI,OAAO,EAAE,EACpCD,EAAS,QAAQC,CAAG,EAExB,EACIC,GAAgBF,GAAa,CAC3B,iBAAkBA,GAAYA,EAAS,UACzCA,EAAS,aAAa,CAE1B,EACIG,GAAmB,MAAOX,EAAKQ,IAAa,CAC9C,GAAI,CAACrB,EAAQH,EAAM4B,CAAM,EAAIZ,EAAItB,CAAQ,EACrCkC,aAAkB,UACpBA,EAASb,GAAyBa,CAAM,GAEtC,OAAO5B,GAAS,SAClB4B,EAAO,gBAAgB,EAAI,OAAO,WAAW5B,CAAI,EACxCA,aAAgB,WACzB4B,EAAO,gBAAgB,EAAI5B,EAAK,WACvBA,aAAgB,OACzB4B,EAAO,gBAAgB,EAAI5B,EAAK,MAElCwB,EAAS,UAAUrB,EAAQyB,CAAM,EAC7B,OAAO5B,GAAS,UAAYA,aAAgB,WAC9CwB,EAAS,IAAIxB,CAAI,EACRA,aAAgB,KACzBwB,EAAS,IAAI,IAAI,WAAW,MAAMxB,EAAK,YAAY,CAAC,CAAC,GAErD0B,GAAaF,CAAQ,EACrB,MAAMX,GAAwBb,EAAMwB,CAAQ,GAAG,MAC5CnC,GAAMkC,GAAoBlC,EAAGmC,CAAQ,CACxC,GAGFA,EAASJ,EAAa,IAAI,CAC5B,EACIS,GAAab,GAAQ,OAAOA,EAAI,MAAS,WACzCc,GAA4B,MAAOd,EAAKQ,EAAUxE,EAAU,CAAC,IAAM,CACrE,GAAI6E,GAAUb,CAAG,EACf,GAAIhE,EAAQ,aACV,GAAI,CACFgE,EAAM,MAAMA,CACd,OAASS,EAAK,CACZ,IAAMM,EAAS,MAAM/E,EAAQ,aAAayE,CAAG,EAC7C,GAAI,CAACM,EACH,OAEFf,EAAMe,CACR,MAEAf,EAAM,MAAMA,EAAI,MAAMM,EAAgB,EAG1C,GAAI5B,KAAYsB,EACd,OAAOW,GAAiBX,EAAKQ,CAAQ,EAEvC,IAAMQ,EAAkBjB,GAAyBC,EAAI,OAAO,EAC5D,GAAIA,EAAI,KAAM,CACZ,IAAM1C,EAAS0C,EAAI,KAAK,UAAU,EAC5BiB,EAAS,CAAC,EACZ1D,EAAO,GACPiC,EACJ,GAAIwB,EAAgB,mBAAmB,IAAM,UAAW,CACtD,IAAIE,EAAe,EACnB,QAASxE,EAAI,EAAGA,EAAIwE,EAAcxE,IAAK,CACrC8C,IAAuBlC,EAAO,KAAK,EACnC,IAAM6D,EAAQ,MAAM/B,GAAoBI,CAAkB,EAAE,MAAOnB,GAAM,CACvE,QAAQ,MAAMA,CAAC,EACfd,EAAO,EACT,CAAC,EACD,GAAI,CAAC4D,EAAO,CACV,GAAIzE,IAAM,EAAG,CACX,MAAM,IAAI,QAAS0E,GAAY,WAAWA,CAAO,CAAC,EAClDF,EAAe,EACf,QACF,CACA,KACF,CAKA,GAJA1B,EAAqB,OACjB2B,EAAM,OACRF,EAAO,KAAKE,EAAM,KAAK,EAErBA,EAAM,KAAM,CACd5D,EAAO,GACP,KACF,CACF,CACIA,GAAQ,EAAE,mBAAoByD,KAChCA,EAAgB,gBAAgB,EAAIC,EAAO,OAAO,CAACI,EAAKzE,IAAUyE,EAAMzE,EAAM,OAAQ,CAAC,EAE3F,CACA4D,EAAS,UAAUR,EAAI,OAAQgB,CAAe,EAC9CC,EAAO,QAASrE,GAAU,CAExB4D,EAAS,MAAM5D,CAAK,CACtB,CAAC,EACGW,EACFiD,EAAS,IAAI,GAETS,EAAO,SAAW,GACpBP,GAAaF,CAAQ,EAEvB,MAAMlB,GAAqChC,EAAQkD,EAAUhB,CAAkB,EAEnF,MAAWwB,EAAgBb,EAAc,IAEvCK,EAAS,UAAUR,EAAI,OAAQgB,CAAe,EAC9CR,EAAS,IAAI,GAGfA,EAASJ,EAAa,IAAI,CAC5B,EACIkB,GAAqB,CAACC,EAAevF,EAAU,CAAC,IAAM,CACxD,IAAMwF,EAAsBxF,EAAQ,qBAAuB,GAC3D,OAAIA,EAAQ,wBAA0B,IAAS,OAAO,UAAYG,IAChE,OAAO,eAAe,OAAQ,UAAW,CACvC,MAAOA,CACT,CAAC,EACD,OAAO,eAAe,OAAQ,WAAY,CACxC,MAAOyC,CACT,CAAC,GAEI,MAAOrC,EAAUiE,IAAa,CACnC,IAAIR,EAAK5C,EACT,GAAI,CACFA,EAAMa,GAAW1B,EAAUP,EAAQ,QAAQ,EAC3C,IAAIyF,EAAgB,CAACD,GAAuBjF,EAAS,SAAW,OAASA,EAAS,SAAW,OA2C7F,GA1CKkF,IAEHlF,EAASM,EAAc,EAAI,GAC3BN,EAAS,GAAG,MAAO,IAAM,CACvBkF,EAAgB,EAClB,CAAC,EACGlF,aAAoBb,KAEtB8E,EAASJ,EAAa,EAAI,IAAM,CACzBqB,GACH,WAAW,IAAM,CACVA,GACH,WAAW,IAAM,CACflF,EAAS,QAAQ,EACjBiE,EAAS,QAAQ,CACnB,CAAC,CAEL,CAAC,CAEL,IAGJA,EAAS,GAAG,QAAS,IAAM,CACDpD,EAAIS,CAAkB,IAExCtB,EAAS,QACXa,EAAIS,CAAkB,EAAE,MAAMtB,EAAS,QAAQ,SAAS,CAAC,EAC/CiE,EAAS,kBACnBpD,EAAIS,CAAkB,EAAE,MAAM,uCAAuC,GAGpE4D,GACH,WAAW,IAAM,CACVA,GACH,WAAW,IAAM,CACflF,EAAS,QAAQ,CACnB,CAAC,CAEL,CAAC,CAEL,CAAC,EACDyD,EAAMuB,EAAcnE,EAAK,CAAE,SAAAb,EAAU,SAAAiE,CAAS,CAAC,EAC3C9B,KAAYsB,EACd,OAAOW,GAAiBX,EAAKQ,CAAQ,CAEzC,OAASnC,EAAG,CACV,GAAK2B,EAYH,OAAOO,GAAoBlC,EAAGmC,CAAQ,EAXtC,GAAIxE,EAAQ,cAEV,GADAgE,EAAM,MAAMhE,EAAQ,aAAaoB,EAAMiB,EAAIpC,GAAeoC,CAAC,CAAC,EACxD,CAAC2B,EACH,YAEQ5C,EAGV4C,EAAMM,GAAiBjC,CAAC,EAFxB2B,EAAMK,GAAmB,CAO/B,CACA,GAAI,CACF,OAAO,MAAMS,GAA0Bd,EAAKQ,EAAUxE,CAAO,CAC/D,OAASqC,EAAG,CACV,OAAOkC,GAAoBlC,EAAGmC,CAAQ,CACxC,CACF,CACF,EAGIkB,GAAuB1F,GAAY,CACrC,IAAMuF,EAAgBvF,EAAQ,MACxB2F,EAAkBL,GAAmBC,EAAe,CACxD,SAAUvF,EAAQ,SAClB,sBAAuBA,EAAQ,sBAC/B,oBAAqBA,EAAQ,mBAC/B,CAAC,EAGD,OAFqBA,EAAQ,cAAgBP,IACjBO,EAAQ,eAAiB,CAAC,EAAG2F,CAAe,CAE1E,EACIC,GAAQ,CAAC5F,EAAS6F,IAAsB,CAC1C,IAAMC,EAASJ,GAAoB1F,CAAO,EAC1C,OAAA8F,EAAO,OAAO9F,GAAS,MAAQ,IAAKA,EAAQ,SAAU,IAAM,CAC1D,IAAM+F,EAAaD,EAAO,QAAQ,EAClCD,GAAqBA,EAAkBE,CAAU,CACnD,CAAC,EACMD,CACT,ECrjBA,IAAIE,GAAU,CAACC,EAAYC,EAASC,IAC3B,CAACC,EAASC,IAAS,CACxB,IAAIC,EAAQ,GACZ,OAAOC,EAAS,CAAC,EACjB,eAAeA,EAAS,EAAG,CACzB,GAAI,GAAKD,EACP,MAAM,IAAI,MAAM,8BAA8B,EAEhDA,EAAQ,EACR,IAAIE,EACAC,EAAU,GACVC,EAOJ,GANIT,EAAW,CAAC,GACdS,EAAUT,EAAW,CAAC,EAAE,CAAC,EAAE,CAAC,EAC5BG,EAAQ,IAAI,WAAa,GAEzBM,EAAU,IAAMT,EAAW,QAAUI,GAAQ,OAE3CK,EACF,GAAI,CACFF,EAAM,MAAME,EAAQN,EAAS,IAAMG,EAAS,EAAI,CAAC,CAAC,CACpD,OAASI,EAAK,CACZ,GAAIA,aAAe,OAAST,EAC1BE,EAAQ,MAAQO,EAChBH,EAAM,MAAMN,EAAQS,EAAKP,CAAO,EAChCK,EAAU,OAEV,OAAME,CAEV,MAEIP,EAAQ,YAAc,IAASD,IACjCK,EAAM,MAAML,EAAWC,CAAO,GAGlC,OAAII,IAAQJ,EAAQ,YAAc,IAASK,KACzCL,EAAQ,IAAMI,GAETJ,CACT,CACF,ECxCF,IAAIQ,GAAmC,OAAO,ECC9C,IAAIC,GAAY,MAAOC,EAASC,EAA0B,OAAO,OAAO,IAAI,IAAM,CAChF,GAAM,CAAE,IAAAC,EAAM,GAAO,IAAAC,EAAM,EAAM,EAAIF,EAE/BG,GADUJ,aAAmBK,GAAcL,EAAQ,IAAI,QAAUA,EAAQ,SACnD,IAAI,cAAc,EAC9C,OAAII,GAAa,WAAW,qBAAqB,GAAKA,GAAa,WAAW,mCAAmC,EACxGE,GAAcN,EAAS,CAAE,IAAAE,EAAK,IAAAC,CAAI,CAAC,EAErC,CAAC,CACV,EACA,eAAeG,GAAcN,EAASC,EAAS,CAC7C,IAAMM,EAAW,MAAMP,EAAQ,SAAS,EACxC,OAAIO,EACKC,GAA0BD,EAAUN,CAAO,EAE7C,CAAC,CACV,CACA,SAASO,GAA0BD,EAAUN,EAAS,CACpD,IAAMQ,EAAuB,OAAO,OAAO,IAAI,EAC/C,OAAAF,EAAS,QAAQ,CAACG,EAAOC,IAAQ,CACFV,EAAQ,KAAOU,EAAI,SAAS,IAAI,EAI3DC,GAAuBH,EAAME,EAAKD,CAAK,EAFvCD,EAAKE,CAAG,EAAID,CAIhB,CAAC,EACGT,EAAQ,KACV,OAAO,QAAQQ,CAAI,EAAE,QAAQ,CAAC,CAACE,EAAKD,CAAK,IAAM,CAChBC,EAAI,SAAS,GAAG,IAE3CE,GAA0BJ,EAAME,EAAKD,CAAK,EAC1C,OAAOD,EAAKE,CAAG,EAEnB,CAAC,EAEIF,CACT,CACA,IAAIG,GAAyB,CAACH,EAAME,EAAKD,IAAU,CAC7CD,EAAKE,CAAG,IAAM,OACZ,MAAM,QAAQF,EAAKE,CAAG,CAAC,EAEzBF,EAAKE,CAAG,EAAE,KAAKD,CAAK,EAEpBD,EAAKE,CAAG,EAAI,CAACF,EAAKE,CAAG,EAAGD,CAAK,EAG1BC,EAAI,SAAS,IAAI,EAGpBF,EAAKE,CAAG,EAAI,CAACD,CAAK,EAFlBD,EAAKE,CAAG,EAAID,CAKlB,EACIG,GAA4B,CAACJ,EAAME,EAAKD,IAAU,CACpD,IAAII,EAAaL,EACXM,EAAOJ,EAAI,MAAM,GAAG,EAC1BI,EAAK,QAAQ,CAACC,EAAMC,IAAU,CACxBA,IAAUF,EAAK,OAAS,EAC1BD,EAAWE,CAAI,EAAIN,IAEf,CAACI,EAAWE,CAAI,GAAK,OAAOF,EAAWE,CAAI,GAAM,UAAY,MAAM,QAAQF,EAAWE,CAAI,CAAC,GAAKF,EAAWE,CAAI,YAAa,QAC9HF,EAAWE,CAAI,EAAoB,OAAO,OAAO,IAAI,GAEvDF,EAAaA,EAAWE,CAAI,EAEhC,CAAC,CACH,ECnEA,IAAIE,GAAaC,GAAS,CACxB,IAAMC,EAAQD,EAAK,MAAM,GAAG,EAC5B,OAAIC,EAAM,CAAC,IAAM,IACfA,EAAM,MAAM,EAEPA,CACT,EACIC,GAAoBC,GAAc,CACpC,GAAM,CAAE,OAAAC,EAAQ,KAAAJ,CAAK,EAAIK,GAAsBF,CAAS,EAClDF,EAAQF,GAAUC,CAAI,EAC5B,OAAOM,GAAkBL,EAAOG,CAAM,CACxC,EACIC,GAAyBL,GAAS,CACpC,IAAMI,EAAS,CAAC,EAChB,OAAAJ,EAAOA,EAAK,QAAQ,aAAc,CAACO,EAAOC,IAAU,CAClD,IAAMC,EAAO,IAAID,CAAK,GACtB,OAAAJ,EAAO,KAAK,CAACK,EAAMF,CAAK,CAAC,EAClBE,CACT,CAAC,EACM,CAAE,OAAAL,EAAQ,KAAAJ,CAAK,CACxB,EACIM,GAAoB,CAACL,EAAOG,IAAW,CACzC,QAASM,EAAIN,EAAO,OAAS,EAAGM,GAAK,EAAGA,IAAK,CAC3C,GAAM,CAACD,CAAI,EAAIL,EAAOM,CAAC,EACvB,QAASC,EAAIV,EAAM,OAAS,EAAGU,GAAK,EAAGA,IACrC,GAAIV,EAAMU,CAAC,EAAE,SAASF,CAAI,EAAG,CAC3BR,EAAMU,CAAC,EAAIV,EAAMU,CAAC,EAAE,QAAQF,EAAML,EAAOM,CAAC,EAAE,CAAC,CAAC,EAC9C,KACF,CAEJ,CACA,OAAOT,CACT,EACIW,GAAe,CAAC,EAChBC,GAAa,CAACC,EAAOC,IAAS,CAChC,GAAID,IAAU,IACZ,MAAO,IAET,IAAMP,EAAQO,EAAM,MAAM,6BAA6B,EACvD,GAAIP,EAAO,CACT,IAAMS,EAAW,GAAGF,CAAK,IAAIC,CAAI,GACjC,OAAKH,GAAaI,CAAQ,IACpBT,EAAM,CAAC,EACTK,GAAaI,CAAQ,EAAID,GAAQA,EAAK,CAAC,IAAM,KAAOA,EAAK,CAAC,IAAM,IAAM,CAACC,EAAUT,EAAM,CAAC,EAAG,IAAI,OAAO,IAAIA,EAAM,CAAC,CAAC,OAAOQ,CAAI,GAAG,CAAC,EAAI,CAACD,EAAOP,EAAM,CAAC,EAAG,IAAI,OAAO,IAAIA,EAAM,CAAC,CAAC,GAAG,CAAC,EAElLK,GAAaI,CAAQ,EAAI,CAACF,EAAOP,EAAM,CAAC,EAAG,EAAI,GAG5CK,GAAaI,CAAQ,CAC9B,CACA,OAAO,IACT,EACIC,GAAY,CAACC,EAAKC,IAAY,CAChC,GAAI,CACF,OAAOA,EAAQD,CAAG,CACpB,MAAQ,CACN,OAAOA,EAAI,QAAQ,wBAA0BX,GAAU,CACrD,GAAI,CACF,OAAOY,EAAQZ,CAAK,CACtB,MAAQ,CACN,OAAOA,CACT,CACF,CAAC,CACH,CACF,EACIa,GAAgBF,GAAQD,GAAUC,EAAK,SAAS,EAChDG,GAAWC,GAAY,CACzB,IAAMC,EAAMD,EAAQ,IACdE,EAAQD,EAAI,QAAQ,IAAKA,EAAI,QAAQ,GAAG,EAAI,CAAC,EAC/Cb,EAAIc,EACR,KAAOd,EAAIa,EAAI,OAAQb,IAAK,CAC1B,IAAMe,EAAWF,EAAI,WAAWb,CAAC,EACjC,GAAIe,IAAa,GAAI,CACnB,IAAMC,EAAaH,EAAI,QAAQ,IAAKb,CAAC,EAC/BV,EAAOuB,EAAI,MAAMC,EAAOE,IAAe,GAAK,OAASA,CAAU,EACrE,OAAON,GAAapB,EAAK,SAAS,KAAK,EAAIA,EAAK,QAAQ,OAAQ,OAAO,EAAIA,CAAI,CACjF,SAAWyB,IAAa,GACtB,KAEJ,CACA,OAAOF,EAAI,MAAMC,EAAOd,CAAC,CAC3B,EAKA,IAAIiB,GAAmBC,GAAY,CACjC,IAAMC,EAASC,GAAQF,CAAO,EAC9B,OAAOC,EAAO,OAAS,GAAKA,EAAO,GAAG,EAAE,IAAM,IAAMA,EAAO,MAAM,EAAG,EAAE,EAAIA,CAC5E,EACIE,EAAY,CAACC,EAAMC,KAAQC,KACzBA,EAAK,SACPD,EAAMF,EAAUE,EAAK,GAAGC,CAAI,GAEvB,GAAGF,IAAO,CAAC,IAAM,IAAM,GAAK,GAAG,GAAGA,CAAI,GAAGC,IAAQ,IAAM,GAAK,GAAGD,GAAM,GAAG,EAAE,IAAM,IAAM,GAAK,GAAG,GAAGC,IAAM,CAAC,IAAM,IAAMA,EAAI,MAAM,CAAC,EAAIA,CAAG,EAAE,IAE7IE,GAA0BC,GAAS,CACrC,GAAIA,EAAK,WAAWA,EAAK,OAAS,CAAC,IAAM,IAAM,CAACA,EAAK,SAAS,GAAG,EAC/D,OAAO,KAET,IAAMC,EAAWD,EAAK,MAAM,GAAG,EACzBE,EAAU,CAAC,EACbC,EAAW,GACf,OAAAF,EAAS,QAASG,GAAY,CAC5B,GAAIA,IAAY,IAAM,CAAC,KAAK,KAAKA,CAAO,EACtCD,GAAY,IAAMC,UACT,KAAK,KAAKA,CAAO,EAC1B,GAAI,KAAK,KAAKA,CAAO,EAAG,CAClBF,EAAQ,SAAW,GAAKC,IAAa,GACvCD,EAAQ,KAAK,GAAG,EAEhBA,EAAQ,KAAKC,CAAQ,EAEvB,IAAME,EAAkBD,EAAQ,QAAQ,IAAK,EAAE,EAC/CD,GAAY,IAAME,EAClBH,EAAQ,KAAKC,CAAQ,CACvB,MACEA,GAAY,IAAMC,CAGxB,CAAC,EACMF,EAAQ,OAAO,CAACI,EAAGC,EAAGC,IAAMA,EAAE,QAAQF,CAAC,IAAMC,CAAC,CACvD,EACIE,GAAcC,GACX,OAAO,KAAKA,CAAK,GAGlBA,EAAM,QAAQ,GAAG,IAAM,KACzBA,EAAQA,EAAM,QAAQ,MAAO,GAAG,GAE3BA,EAAM,QAAQ,GAAG,IAAM,GAAKC,GAAUD,EAAOE,EAAmB,EAAIF,GALlEA,EAOPG,GAAiB,CAACC,EAAKC,EAAKC,IAAa,CAC3C,IAAIC,EACJ,GAAI,CAACD,GAAYD,GAAO,CAAC,OAAO,KAAKA,CAAG,EAAG,CACzC,IAAIG,EAAYJ,EAAI,QAAQ,IAAK,CAAC,EAClC,GAAII,IAAc,GAChB,OAKF,IAHKJ,EAAI,WAAWC,EAAKG,EAAY,CAAC,IACpCA,EAAYJ,EAAI,QAAQ,IAAIC,CAAG,GAAIG,EAAY,CAAC,GAE3CA,IAAc,IAAI,CACvB,IAAMC,EAAkBL,EAAI,WAAWI,EAAYH,EAAI,OAAS,CAAC,EACjE,GAAII,IAAoB,GAAI,CAC1B,IAAMC,EAAaF,EAAYH,EAAI,OAAS,EACtCM,EAAWP,EAAI,QAAQ,IAAKM,CAAU,EAC5C,OAAOX,GAAWK,EAAI,MAAMM,EAAYC,IAAa,GAAK,OAASA,CAAQ,CAAC,CAC9E,SAAWF,GAAmB,IAAM,MAAMA,CAAe,EACvD,MAAO,GAETD,EAAYJ,EAAI,QAAQ,IAAIC,CAAG,GAAIG,EAAY,CAAC,CAClD,CAEA,GADAD,EAAU,OAAO,KAAKH,CAAG,EACrB,CAACG,EACH,MAEJ,CACA,IAAMf,EAAU,CAAC,EACjBe,IAAY,OAAO,KAAKH,CAAG,EAC3B,IAAIQ,EAAWR,EAAI,QAAQ,IAAK,CAAC,EACjC,KAAOQ,IAAa,IAAI,CACtB,IAAMC,EAAeT,EAAI,QAAQ,IAAKQ,EAAW,CAAC,EAC9CF,EAAaN,EAAI,QAAQ,IAAKQ,CAAQ,EACtCF,EAAaG,GAAgBA,IAAiB,KAChDH,EAAa,IAEf,IAAII,EAAOV,EAAI,MACbQ,EAAW,EACXF,IAAe,GAAKG,IAAiB,GAAK,OAASA,EAAeH,CACpE,EAKA,GAJIH,IACFO,EAAOf,GAAWe,CAAI,GAExBF,EAAWC,EACPC,IAAS,GACX,SAEF,IAAId,EACAU,IAAe,GACjBV,EAAQ,IAERA,EAAQI,EAAI,MAAMM,EAAa,EAAGG,IAAiB,GAAK,OAASA,CAAY,EACzEN,IACFP,EAAQD,GAAWC,CAAK,IAGxBM,GACId,EAAQsB,CAAI,GAAK,MAAM,QAAQtB,EAAQsB,CAAI,CAAC,IAChDtB,EAAQsB,CAAI,EAAI,CAAC,GAGnBtB,EAAQsB,CAAI,EAAE,KAAKd,CAAK,GAExBR,EAAQsB,CAAI,IAAMd,CAEtB,CACA,OAAOK,EAAMb,EAAQa,CAAG,EAAIb,CAC9B,EACIuB,GAAgBZ,GAChBa,GAAiB,CAACZ,EAAKC,IAClBF,GAAeC,EAAKC,EAAK,EAAI,EAElCH,GAAsB,mBCvM1B,IAAIe,GAAyBC,GAAQC,GAAUD,EAAKE,EAAmB,EACnEC,GAAc,KAAM,CAetB,IACAC,GAEAC,GACA,WAAa,EAab,KACA,UAAY,CAAC,EACb,YAAYC,EAASC,EAAO,IAAKC,EAAc,CAAC,CAAC,CAAC,EAAG,CACnD,KAAK,IAAMF,EACX,KAAK,KAAOC,EACZ,KAAKF,GAAeG,EACpB,KAAKJ,GAAiB,CAAC,CACzB,CACA,MAAMK,EAAK,CACT,OAAOA,EAAM,KAAKC,GAAiBD,CAAG,EAAI,KAAKE,GAAqB,CACtE,CACAD,GAAiBD,EAAK,CACpB,IAAMG,EAAW,KAAKP,GAAa,CAAC,EAAE,KAAK,UAAU,EAAE,CAAC,EAAEI,CAAG,EACvDI,EAAQ,KAAKC,GAAeF,CAAQ,EAC1C,OAAOC,GAAS,KAAK,KAAKA,CAAK,EAAId,GAAsBc,CAAK,EAAIA,CACpE,CACAF,IAAuB,CACrB,IAAMI,EAAU,CAAC,EACXC,EAAO,OAAO,KAAK,KAAKX,GAAa,CAAC,EAAE,KAAK,UAAU,EAAE,CAAC,CAAC,EACjE,QAAWI,KAAOO,EAAM,CACtB,IAAMC,EAAQ,KAAKH,GAAe,KAAKT,GAAa,CAAC,EAAE,KAAK,UAAU,EAAE,CAAC,EAAEI,CAAG,CAAC,EAC3EQ,IAAU,SACZF,EAAQN,CAAG,EAAI,KAAK,KAAKQ,CAAK,EAAIlB,GAAsBkB,CAAK,EAAIA,EAErE,CACA,OAAOF,CACT,CACAD,GAAeF,EAAU,CACvB,OAAO,KAAKP,GAAa,CAAC,EAAI,KAAKA,GAAa,CAAC,EAAEO,CAAQ,EAAIA,CACjE,CACA,MAAMH,EAAK,CACT,OAAOS,GAAc,KAAK,IAAKT,CAAG,CACpC,CACA,QAAQA,EAAK,CACX,OAAOU,GAAe,KAAK,IAAKV,CAAG,CACrC,CACA,OAAOW,EAAM,CACX,GAAIA,EACF,OAAO,KAAK,IAAI,QAAQ,IAAIA,CAAI,GAAK,OAEvC,IAAMC,EAAa,CAAC,EACpB,YAAK,IAAI,QAAQ,QAAQ,CAACJ,EAAOR,IAAQ,CACvCY,EAAWZ,CAAG,EAAIQ,CACpB,CAAC,EACMI,CACT,CACA,MAAM,UAAUC,EAAS,CACvB,OAAO,KAAK,UAAU,aAAe,MAAMC,GAAU,KAAMD,CAAO,CACpE,CACAE,GAAef,GAAQ,CACrB,GAAM,CAAE,UAAAgB,EAAW,IAAAC,CAAI,EAAI,KACrBC,EAAaF,EAAUhB,CAAG,EAChC,GAAIkB,EACF,OAAOA,EAET,IAAMC,EAAe,OAAO,KAAKH,CAAS,EAAE,CAAC,EAC7C,OAAIG,EACKH,EAAUG,CAAY,EAAE,KAAMC,IAC/BD,IAAiB,SACnBC,EAAO,KAAK,UAAUA,CAAI,GAErB,IAAI,SAASA,CAAI,EAAEpB,CAAG,EAAE,EAChC,EAEIgB,EAAUhB,CAAG,EAAIiB,EAAIjB,CAAG,EAAE,CACnC,EAaA,MAAO,CACL,OAAO,KAAKe,GAAY,MAAM,EAAE,KAAMM,GAAS,KAAK,MAAMA,CAAI,CAAC,CACjE,CAaA,MAAO,CACL,OAAO,KAAKN,GAAY,MAAM,CAChC,CAaA,aAAc,CACZ,OAAO,KAAKA,GAAY,aAAa,CACvC,CAWA,MAAO,CACL,OAAO,KAAKA,GAAY,MAAM,CAChC,CAWA,UAAW,CACT,OAAO,KAAKA,GAAY,UAAU,CACpC,CAOA,iBAAiBO,EAAQC,EAAM,CAC7B,KAAK5B,GAAe2B,CAAM,EAAIC,CAChC,CACA,MAAMD,EAAQ,CACZ,OAAO,KAAK3B,GAAe2B,CAAM,CACnC,CAcA,IAAI,KAAM,CACR,OAAO,KAAK,IAAI,GAClB,CAaA,IAAI,QAAS,CACX,OAAO,KAAK,IAAI,MAClB,CACA,IAAKE,EAAgB,GAAI,CACvB,OAAO,KAAK5B,EACd,CA4BA,IAAI,eAAgB,CAClB,OAAO,KAAKA,GAAa,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAE6B,CAAK,CAAC,IAAMA,CAAK,CACxD,CAiBA,IAAI,WAAY,CACd,OAAO,KAAK7B,GAAa,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAE6B,CAAK,CAAC,IAAMA,CAAK,EAAE,KAAK,UAAU,EAAE,IAC3E,CACF,EC7QA,IAAIC,GAA2B,CAC7B,UAAW,EACX,aAAc,EACd,OAAQ,CACV,EACIC,GAAM,CAACC,EAAOC,IAAc,CAC9B,IAAMC,EAAgB,IAAI,OAAOF,CAAK,EACtC,OAAAE,EAAc,UAAY,GAC1BA,EAAc,UAAYD,EACnBC,CACT,EA2EA,IAAIC,GAAkB,MAAOC,EAAKC,EAAOC,EAAmBC,EAASC,IAAW,CAC1E,OAAOJ,GAAQ,UAAY,EAAEA,aAAe,UACxCA,aAAe,UACnBA,EAAMA,EAAI,SAAS,GAEjBA,aAAe,UACjBA,EAAM,MAAMA,IAGhB,IAAMK,EAAYL,EAAI,UACtB,GAAI,CAACK,GAAW,OACd,OAAO,QAAQ,QAAQL,CAAG,EAExBI,EACFA,EAAO,CAAC,GAAKJ,EAEbI,EAAS,CAACJ,CAAG,EAEf,IAAMM,EAAS,QAAQ,IAAID,EAAU,IAAKE,GAAMA,EAAE,CAAE,MAAAN,EAAO,OAAAG,EAAQ,QAAAD,CAAQ,CAAC,CAAC,CAAC,EAAE,KAC7EK,GAAQ,QAAQ,IACfA,EAAI,OAAO,OAAO,EAAE,IAAKC,GAASV,GAAgBU,EAAMR,EAAO,GAAOE,EAASC,CAAM,CAAC,CACxF,EAAE,KAAK,IAAMA,EAAO,CAAC,CAAC,CACxB,EACA,OAAIF,EACKQ,GAAI,MAAMJ,EAAQD,CAAS,EAE3BC,CAEX,EC/GA,IAAIK,GAAa,4BACbC,GAAwB,CAACC,EAAaC,KACjC,CACL,eAAgBD,EAChB,GAAGC,CACL,GAEEC,GAAU,KAAM,CAClBC,GACAC,GAcA,IAAM,CAAC,EACPC,GACA,UAAY,GAgBZ,MACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GACAC,GAOA,YAAYC,EAAKC,EAAS,CACxB,KAAKb,GAAcY,EACfC,IACF,KAAKT,GAAgBS,EAAQ,aAC7B,KAAK,IAAMA,EAAQ,IACnB,KAAKL,GAAmBK,EAAQ,gBAChC,KAAKF,GAAQE,EAAQ,KACrB,KAAKH,GAAeG,EAAQ,YAEhC,CAIA,IAAI,KAAM,CACR,YAAKZ,KAAS,IAAIa,GAAY,KAAKd,GAAa,KAAKW,GAAO,KAAKD,EAAY,EACtE,KAAKT,EACd,CAOA,IAAI,OAAQ,CACV,GAAI,KAAKG,IAAiB,gBAAiB,KAAKA,GAC9C,OAAO,KAAKA,GAEZ,MAAM,MAAM,gCAAgC,CAEhD,CAOA,IAAI,cAAe,CACjB,GAAI,KAAKA,GACP,OAAO,KAAKA,GAEZ,MAAM,MAAM,sCAAsC,CAEtD,CAKA,IAAI,KAAM,CACR,OAAO,KAAKC,KAAS,IAAI,SAAS,KAAM,CACtC,QAAS,KAAKI,KAAqB,IAAI,OACzC,CAAC,CACH,CAMA,IAAI,IAAIM,EAAM,CACZ,GAAI,KAAKV,IAAQU,EAAM,CACrBA,EAAO,IAAI,SAASA,EAAK,KAAMA,CAAI,EACnC,OAAW,CAACC,EAAGC,CAAC,IAAK,KAAKZ,GAAK,QAAQ,QAAQ,EAC7C,GAAIW,IAAM,eAGV,GAAIA,IAAM,aAAc,CACtB,IAAME,EAAU,KAAKb,GAAK,QAAQ,aAAa,EAC/CU,EAAK,QAAQ,OAAO,YAAY,EAChC,QAAWI,KAAUD,EACnBH,EAAK,QAAQ,OAAO,aAAcI,CAAM,CAE5C,MACEJ,EAAK,QAAQ,IAAIC,EAAGC,CAAC,CAG3B,CACA,KAAKZ,GAAOU,EACZ,KAAK,UAAY,EACnB,CAaA,OAAS,IAAIK,KACX,KAAKb,KAAec,GAAY,KAAK,KAAKA,CAAO,EAC1C,KAAKd,GAAU,GAAGa,CAAI,GAQ/B,UAAaE,GAAW,KAAKhB,GAAUgB,EAMvC,UAAY,IAAM,KAAKhB,GAsBvB,YAAeiB,GAAa,CAC1B,KAAKhB,GAAYgB,CACnB,EAiBA,OAAS,CAACC,EAAMC,EAAOZ,IAAY,CAC7B,KAAK,YACP,KAAKR,GAAO,IAAI,SAAS,KAAKA,GAAK,KAAM,KAAKA,EAAI,GAEpD,IAAMP,EAAU,KAAKO,GAAO,KAAKA,GAAK,QAAU,KAAKI,KAAqB,IAAI,QAC1EgB,IAAU,OACZ3B,EAAQ,OAAO0B,CAAI,EACVX,GAAS,OAClBf,EAAQ,OAAO0B,EAAMC,CAAK,EAE1B3B,EAAQ,IAAI0B,EAAMC,CAAK,CAE3B,EACA,OAAUC,GAAW,CACnB,KAAKvB,GAAUuB,CACjB,EAcA,IAAM,CAACC,EAAKF,IAAU,CACpB,KAAKvB,KAAyB,IAAI,IAClC,KAAKA,GAAK,IAAIyB,EAAKF,CAAK,CAC1B,EAcA,IAAOE,GACE,KAAKzB,GAAO,KAAKA,GAAK,IAAIyB,CAAG,EAAI,OAa1C,IAAI,KAAM,CACR,OAAK,KAAKzB,GAGH,OAAO,YAAY,KAAKA,EAAI,EAF1B,CAAC,CAGZ,CACA0B,GAAaC,EAAMC,EAAKhC,EAAS,CAC/B,IAAMiC,EAAkB,KAAK1B,GAAO,IAAI,QAAQ,KAAKA,GAAK,OAAO,EAAI,KAAKI,IAAoB,IAAI,QAClG,GAAI,OAAOqB,GAAQ,UAAY,YAAaA,EAAK,CAC/C,IAAME,EAAaF,EAAI,mBAAmB,QAAUA,EAAI,QAAU,IAAI,QAAQA,EAAI,OAAO,EACzF,OAAW,CAACH,EAAKF,CAAK,IAAKO,EACrBL,EAAI,YAAY,IAAM,aACxBI,EAAgB,OAAOJ,EAAKF,CAAK,EAEjCM,EAAgB,IAAIJ,EAAKF,CAAK,CAGpC,CACA,GAAI3B,EACF,OAAW,CAACkB,EAAGC,CAAC,IAAK,OAAO,QAAQnB,CAAO,EACzC,GAAI,OAAOmB,GAAM,SACfc,EAAgB,IAAIf,EAAGC,CAAC,MACnB,CACLc,EAAgB,OAAOf,CAAC,EACxB,QAAWiB,KAAMhB,EACfc,EAAgB,OAAOf,EAAGiB,CAAE,CAEhC,CAGJ,IAAMP,EAAS,OAAOI,GAAQ,SAAWA,EAAMA,GAAK,QAAU,KAAK3B,GACnE,OAAO,IAAI,SAAS0B,EAAM,CAAE,OAAAH,EAAQ,QAASK,CAAgB,CAAC,CAChE,CACA,YAAc,IAAIX,IAAS,KAAKQ,GAAa,GAAGR,CAAI,EAsBpD,KAAO,CAACS,EAAMC,EAAKhC,IAAY,KAAK8B,GAAaC,EAAMC,EAAKhC,CAAO,EAanE,KAAO,CAACoC,EAAMJ,EAAKhC,IACV,CAAC,KAAKW,IAAoB,CAAC,KAAKN,IAAW,CAAC2B,GAAO,CAAChC,GAAW,CAAC,KAAK,UAAY,IAAI,SAASoC,CAAI,EAAI,KAAKN,GAChHM,EACAJ,EACAlC,GAAsBD,GAAYG,CAAO,CAC3C,EAcF,KAAO,CAACqC,EAAQL,EAAKhC,IACZ,KAAK8B,GACV,KAAK,UAAUO,CAAM,EACrBL,EACAlC,GAAsB,mBAAoBE,CAAO,CACnD,EAEF,KAAO,CAACsC,EAAMN,EAAKhC,IAAY,CAC7B,IAAMuC,EAAOC,GAAU,KAAKV,GAAaU,EAAOR,EAAKlC,GAAsB,2BAA4BE,CAAO,CAAC,EAC/G,OAAO,OAAOsC,GAAS,SAAWG,GAAgBH,EAAMI,GAAyB,UAAW,GAAO,CAAC,CAAC,EAAE,KAAKH,CAAG,EAAIA,EAAID,CAAI,CAC7H,EAgBA,SAAW,CAACK,EAAUf,IAAW,CAC/B,IAAMgB,EAAiB,OAAOD,CAAQ,EACtC,YAAK,OACH,WAGC,eAAe,KAAKC,CAAc,EAAqB,UAAUA,CAAc,EAAzCA,CACzC,EACO,KAAK,YAAY,KAAMhB,GAAU,GAAG,CAC7C,EAaA,SAAW,KACT,KAAKlB,KAAqB,IAAM,IAAI,SAC7B,KAAKA,GAAiB,IAAI,EAErC,ECrZA,IAAImC,EAAkB,MAClBC,GAA4B,MAC5BC,GAAU,CAAC,MAAO,OAAQ,MAAO,SAAU,UAAW,OAAO,EAC7DC,GAAmC,0DACnCC,GAAuB,cAAc,KAAM,CAC/C,ECLA,IAAIC,GAAmB,qBCKvB,IAAIC,GAAmBC,GACdA,EAAE,KAAK,gBAAiB,GAAG,EAEhCC,GAAe,CAACC,EAAKF,IAAM,CAC7B,GAAI,gBAAiBE,EAAK,CACxB,IAAMC,EAAMD,EAAI,YAAY,EAC5B,OAAOF,EAAE,YAAYG,EAAI,KAAMA,CAAG,CACpC,CACA,eAAQ,MAAMD,CAAG,EACVF,EAAE,KAAK,wBAAyB,GAAG,CAC5C,EACII,GAAO,MAAMC,EAAM,CACrB,IACA,KACA,IACA,OACA,QACA,MACA,IACA,GACA,IAKA,OACA,QAEA,UAAY,IACZC,GAAQ,IACR,OAAS,CAAC,EACV,YAAYC,EAAU,CAAC,EAAG,CACL,CAAC,GAAGC,GAASC,EAAyB,EAC9C,QAASC,GAAW,CAC7B,KAAKA,CAAM,EAAI,CAACC,KAAUC,KACpB,OAAOD,GAAU,SACnB,KAAKL,GAAQK,EAEb,KAAKE,GAAUH,EAAQ,KAAKJ,GAAOK,CAAK,EAE1CC,EAAK,QAASE,GAAY,CACxB,KAAKD,GAAUH,EAAQ,KAAKJ,GAAOQ,CAAO,CAC5C,CAAC,EACM,KAEX,CAAC,EACD,KAAK,GAAK,CAACJ,EAAQK,KAASC,IAAa,CACvC,QAAWC,IAAK,CAACF,CAAI,EAAE,KAAK,EAAG,CAC7B,KAAKT,GAAQW,EACb,QAAWC,IAAK,CAACR,CAAM,EAAE,KAAK,EAC5BM,EAAS,IAAKF,GAAY,CACxB,KAAKD,GAAUK,EAAE,YAAY,EAAG,KAAKZ,GAAOQ,CAAO,CACrD,CAAC,CAEL,CACA,OAAO,IACT,EACA,KAAK,IAAM,CAACK,KAASH,KACf,OAAOG,GAAS,SAClB,KAAKb,GAAQa,GAEb,KAAKb,GAAQ,IACbU,EAAS,QAAQG,CAAI,GAEvBH,EAAS,QAASF,GAAY,CAC5B,KAAKD,GAAUO,EAAiB,KAAKd,GAAOQ,CAAO,CACrD,CAAC,EACM,MAET,GAAM,CAAE,OAAAO,EAAQ,GAAGC,CAAqB,EAAIf,EAC5C,OAAO,OAAO,KAAMe,CAAoB,EACxC,KAAK,QAAUD,GAAU,GAAOd,EAAQ,SAAWgB,GAAUC,EAC/D,CACAC,IAAS,CACP,IAAMC,EAAQ,IAAIrB,GAAM,CACtB,OAAQ,KAAK,OACb,QAAS,KAAK,OAChB,CAAC,EACD,OAAAqB,EAAM,aAAe,KAAK,aAC1BA,EAAMC,GAAmB,KAAKA,GAC9BD,EAAM,OAAS,KAAK,OACbA,CACT,CACAC,GAAmB5B,GAEnB,aAAeE,GAmBf,MAAMc,EAAMa,EAAK,CACf,IAAMC,EAAS,KAAK,SAASd,CAAI,EACjC,OAAAa,EAAI,OAAO,IAAKE,GAAM,CACpB,IAAIhB,EACAc,EAAI,eAAiB3B,GACvBa,EAAUgB,EAAE,SAEZhB,EAAU,MAAOd,EAAG+B,KAAU,MAAMC,GAAQ,CAAC,EAAGJ,EAAI,YAAY,EAAE5B,EAAG,IAAM8B,EAAE,QAAQ9B,EAAG+B,CAAI,CAAC,GAAG,IAChGjB,EAAQmB,EAAgB,EAAIH,EAAE,SAEhCD,EAAOhB,GAAUiB,EAAE,OAAQA,EAAE,KAAMhB,CAAO,CAC5C,CAAC,EACM,IACT,CAcA,SAASC,EAAM,CACb,IAAMc,EAAS,KAAKJ,GAAO,EAC3B,OAAAI,EAAO,UAAYK,EAAU,KAAK,UAAWnB,CAAI,EAC1Cc,CACT,CAiBA,QAAWf,IACT,KAAK,aAAeA,EACb,MAiBT,SAAYA,IACV,KAAKa,GAAmBb,EACjB,MAkCT,MAAMC,EAAMoB,EAAoB5B,EAAS,CACvC,IAAI6B,EACAC,EACA9B,IACE,OAAOA,GAAY,WACrB8B,EAAgB9B,GAEhB8B,EAAgB9B,EAAQ,cACpBA,EAAQ,iBAAmB,GAC7B6B,EAAkBE,GAAYA,EAE9BF,EAAiB7B,EAAQ,iBAI/B,IAAMgC,EAAaF,EAAiB,GAAM,CACxC,IAAMG,EAAWH,EAAc,CAAC,EAChC,OAAO,MAAM,QAAQG,CAAQ,EAAIA,EAAW,CAACA,CAAQ,CACvD,EAAK,GAAM,CACT,IAAIC,EACJ,GAAI,CACFA,EAAmB,EAAE,YACvB,MAAQ,CACR,CACA,MAAO,CAAC,EAAE,IAAKA,CAAgB,CACjC,EACAL,KAAoB,IAAM,CACxB,IAAMM,EAAaR,EAAU,KAAK,UAAWnB,CAAI,EAC3C4B,EAAmBD,IAAe,IAAM,EAAIA,EAAW,OAC7D,OAAQJ,GAAY,CAClB,IAAMM,EAAM,IAAI,IAAIN,EAAQ,GAAG,EAC/B,OAAAM,EAAI,SAAWA,EAAI,SAAS,MAAMD,CAAgB,GAAK,IAChD,IAAI,QAAQC,EAAKN,CAAO,CACjC,CACF,GAAG,EACH,IAAMxB,EAAU,MAAO,EAAGiB,IAAS,CACjC,IAAM5B,EAAM,MAAMgC,EAAmBC,EAAe,EAAE,IAAI,GAAG,EAAG,GAAGG,EAAW,CAAC,CAAC,EAChF,GAAIpC,EACF,OAAOA,EAET,MAAM4B,EAAK,CACb,EACA,YAAKlB,GAAUO,EAAiBc,EAAUnB,EAAM,GAAG,EAAGD,CAAO,EACtD,IACT,CACAD,GAAUH,EAAQK,EAAMD,EAAS,CAC/BJ,EAASA,EAAO,YAAY,EAC5BK,EAAOmB,EAAU,KAAK,UAAWnB,CAAI,EACrC,IAAMe,EAAI,CAAE,SAAU,KAAK,UAAW,KAAAf,EAAM,OAAAL,EAAQ,QAAAI,CAAQ,EAC5D,KAAK,OAAO,IAAIJ,EAAQK,EAAM,CAACD,EAASgB,CAAC,CAAC,EAC1C,KAAK,OAAO,KAAKA,CAAC,CACpB,CACAe,GAAa3C,EAAKF,EAAG,CACnB,GAAIE,aAAe,MACjB,OAAO,KAAK,aAAaA,EAAKF,CAAC,EAEjC,MAAME,CACR,CACA4C,GAAUR,EAASS,EAAcC,EAAKtC,EAAQ,CAC5C,GAAIA,IAAW,OACb,OAAQ,SAAY,IAAI,SAAS,KAAM,MAAM,KAAKoC,GAAUR,EAASS,EAAcC,EAAK,KAAK,CAAC,GAAG,EAEnG,IAAMjC,EAAO,KAAK,QAAQuB,EAAS,CAAE,IAAAU,CAAI,CAAC,EACpCC,EAAc,KAAK,OAAO,MAAMvC,EAAQK,CAAI,EAC5Cf,EAAI,IAAIkD,GAAQZ,EAAS,CAC7B,KAAAvB,EACA,YAAAkC,EACA,IAAAD,EACA,aAAAD,EACA,gBAAiB,KAAKpB,EACxB,CAAC,EACD,GAAIsB,EAAY,CAAC,EAAE,SAAW,EAAG,CAC/B,IAAI9C,EACJ,GAAI,CACFA,EAAM8C,EAAY,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAEjD,EAAG,SAAY,CAC3CA,EAAE,IAAM,MAAM,KAAK2B,GAAiB3B,CAAC,CACvC,CAAC,CACH,OAASE,EAAK,CACZ,OAAO,KAAK2C,GAAa3C,EAAKF,CAAC,CACjC,CACA,OAAOG,aAAe,QAAUA,EAAI,KACjCgD,GAAaA,IAAanD,EAAE,UAAYA,EAAE,IAAM,KAAK2B,GAAiB3B,CAAC,EAC1E,EAAE,MAAOE,GAAQ,KAAK2C,GAAa3C,EAAKF,CAAC,CAAC,EAAIG,GAAO,KAAKwB,GAAiB3B,CAAC,CAC9E,CACA,IAAMoD,EAAWpB,GAAQiB,EAAY,CAAC,EAAG,KAAK,aAAc,KAAKtB,EAAgB,EACjF,OAAQ,SAAY,CAClB,GAAI,CACF,IAAM0B,EAAU,MAAMD,EAASpD,CAAC,EAChC,GAAI,CAACqD,EAAQ,UACX,MAAM,IAAI,MACR,yFACF,EAEF,OAAOA,EAAQ,GACjB,OAASnD,EAAK,CACZ,OAAO,KAAK2C,GAAa3C,EAAKF,CAAC,CACjC,CACF,GAAG,CACL,CAYA,MAAQ,CAACsC,KAAYgB,IACZ,KAAKR,GAAUR,EAASgB,EAAK,CAAC,EAAGA,EAAK,CAAC,EAAGhB,EAAQ,MAAM,EAcjE,QAAU,CAACiB,EAAOC,EAAaC,EAAKV,IAC9BQ,aAAiB,QACZ,KAAK,MAAMC,EAAc,IAAI,QAAQD,EAAOC,CAAW,EAAID,EAAOE,EAAKV,CAAY,GAE5FQ,EAAQA,EAAM,SAAS,EAChB,KAAK,MACV,IAAI,QACF,eAAe,KAAKA,CAAK,EAAIA,EAAQ,mBAAmBrB,EAAU,IAAKqB,CAAK,CAAC,GAC7EC,CACF,EACAC,EACAV,CACF,GAmBF,KAAO,IAAM,CACX,iBAAiB,QAAUW,GAAU,CACnCA,EAAM,YAAY,KAAKZ,GAAUY,EAAM,QAASA,EAAO,OAAQA,EAAM,QAAQ,MAAM,CAAC,CACtF,CAAC,CACH,CACF,ECpXA,IAAIC,GAAa,CAAC,EAClB,SAASC,GAAMC,EAAQC,EAAM,CAC3B,IAAMC,EAAW,KAAK,iBAAiB,EACjCC,EAAU,CAACC,EAASC,IAAU,CAClC,IAAMC,EAAUJ,EAASE,CAAO,GAAKF,EAASK,CAAe,EACvDC,EAAcF,EAAQ,CAAC,EAAED,CAAK,EACpC,GAAIG,EACF,OAAOA,EAET,IAAMC,EAASJ,EAAM,MAAMC,EAAQ,CAAC,CAAC,EACrC,GAAI,CAACG,EACH,MAAO,CAAC,CAAC,EAAGX,EAAU,EAExB,IAAMY,EAAQD,EAAO,QAAQ,GAAI,CAAC,EAClC,MAAO,CAACH,EAAQ,CAAC,EAAEI,CAAK,EAAGD,CAAM,CACnC,EACA,YAAK,MAAQN,EACNA,EAAOH,EAAQC,CAAI,CAC5B,CCnBA,IAAIU,GAAoB,QACpBC,EAA4B,KAC5BC,EAA4B,WAC5BC,EAA6B,OAAO,EACpCC,GAAkB,IAAI,IAAI,aAAa,EAC3C,SAASC,GAAWC,EAAGC,EAAG,CACxB,OAAID,EAAE,SAAW,EACRC,EAAE,SAAW,EAAID,EAAIC,EAAI,GAAK,EAAI,GAEvCA,EAAE,SAAW,GAGbD,IAAML,GAA6BK,IAAMJ,EACpC,EACEK,IAAMN,GAA6BM,IAAML,EAC3C,GAELI,IAAMN,GACD,EACEO,IAAMP,GACR,GAEFM,EAAE,SAAWC,EAAE,OAASD,EAAIC,EAAI,GAAK,EAAIA,EAAE,OAASD,EAAE,MAC/D,CACA,IAAIE,GAAO,MAAMC,EAAM,CACrBC,GACAC,GACAC,GAA4B,OAAO,OAAO,IAAI,EAC9C,OAAOC,EAAQC,EAAOC,EAAUC,EAASC,EAAoB,CAC3D,GAAIJ,EAAO,SAAW,EAAG,CACvB,GAAI,KAAKH,KAAW,OAClB,MAAMP,EAER,GAAIc,EACF,OAEF,KAAKP,GAASI,EACd,MACF,CACA,GAAM,CAACI,EAAO,GAAGC,CAAU,EAAIN,EACzBO,EAAUF,IAAU,IAAMC,EAAW,SAAW,EAAI,CAAC,GAAI,GAAIlB,CAAyB,EAAI,CAAC,GAAI,GAAID,EAAiB,EAAIkB,IAAU,KAAO,CAAC,GAAI,GAAIhB,CAAyB,EAAIgB,EAAM,MAAM,6BAA6B,EAC1NG,EACJ,GAAID,EAAS,CACX,IAAME,EAAOF,EAAQ,CAAC,EAClBG,EAAYH,EAAQ,CAAC,GAAKpB,GAC9B,GAAIsB,GAAQF,EAAQ,CAAC,IACfG,IAAc,OAGlBA,EAAYA,EAAU,QAAQ,yBAA0B,KAAK,EACzD,YAAY,KAAKA,CAAS,IAC5B,MAAMpB,EAIV,GADAkB,EAAO,KAAKT,GAAUW,CAAS,EAC3B,CAACF,EAAM,CACT,GAAI,OAAO,KAAK,KAAKT,EAAS,EAAE,KAC7BY,GAAMA,IAAMvB,GAA6BuB,IAAMtB,CAClD,EACE,MAAMC,EAER,GAAIc,EACF,OAEFI,EAAO,KAAKT,GAAUW,CAAS,EAAI,IAAId,GACnCa,IAAS,KACXD,EAAKV,GAAYK,EAAQ,WAE7B,CACI,CAACC,GAAsBK,IAAS,IAClCP,EAAS,KAAK,CAACO,EAAMD,EAAKV,EAAS,CAAC,CAExC,SACEU,EAAO,KAAKT,GAAUM,CAAK,EACvB,CAACG,EAAM,CACT,GAAI,OAAO,KAAK,KAAKT,EAAS,EAAE,KAC7BY,GAAMA,EAAE,OAAS,GAAKA,IAAMvB,GAA6BuB,IAAMtB,CAClE,EACE,MAAMC,EAER,GAAIc,EACF,OAEFI,EAAO,KAAKT,GAAUM,CAAK,EAAI,IAAIT,EACrC,CAEFY,EAAK,OAAOF,EAAYL,EAAOC,EAAUC,EAASC,CAAkB,CACtE,CACA,gBAAiB,CAEf,IAAMQ,EADY,OAAO,KAAK,KAAKb,EAAS,EAAE,KAAKP,EAAU,EACnC,IAAKmB,GAAM,CACnC,IAAME,EAAI,KAAKd,GAAUY,CAAC,EAC1B,OAAQ,OAAOE,EAAEf,IAAc,SAAW,IAAIa,CAAC,KAAKE,EAAEf,EAAS,GAAKP,GAAgB,IAAIoB,CAAC,EAAI,KAAKA,CAAC,GAAKA,GAAKE,EAAE,eAAe,CAChI,CAAC,EAID,OAHI,OAAO,KAAKhB,IAAW,UACzBe,EAAQ,QAAQ,IAAI,KAAKf,EAAM,EAAE,EAE/Be,EAAQ,SAAW,EACd,GAELA,EAAQ,SAAW,EACdA,EAAQ,CAAC,EAEX,MAAQA,EAAQ,KAAK,GAAG,EAAI,GACrC,CACF,ECxGA,IAAIE,GAAO,KAAM,CACfC,GAAW,CAAE,SAAU,CAAE,EACzBC,GAAQ,IAAIC,GACZ,OAAOC,EAAMC,EAAOC,EAAoB,CACtC,IAAMC,EAAa,CAAC,EACdC,EAAS,CAAC,EAChB,QAASC,EAAI,IAAO,CAClB,IAAIC,EAAW,GAQf,GAPAN,EAAOA,EAAK,QAAQ,aAAeO,GAAM,CACvC,IAAMC,EAAO,MAAMH,CAAC,GACpB,OAAAD,EAAOC,CAAC,EAAI,CAACG,EAAMD,CAAC,EACpBF,IACAC,EAAW,GACJE,CACT,CAAC,EACG,CAACF,EACH,KAEJ,CACA,IAAMG,EAAST,EAAK,MAAM,0BAA0B,GAAK,CAAC,EAC1D,QAASK,EAAID,EAAO,OAAS,EAAGC,GAAK,EAAGA,IAAK,CAC3C,GAAM,CAACG,CAAI,EAAIJ,EAAOC,CAAC,EACvB,QAASK,EAAID,EAAO,OAAS,EAAGC,GAAK,EAAGA,IACtC,GAAID,EAAOC,CAAC,EAAE,QAAQF,CAAI,IAAM,GAAI,CAClCC,EAAOC,CAAC,EAAID,EAAOC,CAAC,EAAE,QAAQF,EAAMJ,EAAOC,CAAC,EAAE,CAAC,CAAC,EAChD,KACF,CAEJ,CACA,YAAKP,GAAM,OAAOW,EAAQR,EAAOE,EAAY,KAAKN,GAAUK,CAAkB,EACvEC,CACT,CACA,aAAc,CACZ,IAAIQ,EAAS,KAAKb,GAAM,eAAe,EACvC,GAAIa,IAAW,GACb,MAAO,CAAC,KAAM,CAAC,EAAG,CAAC,CAAC,EAEtB,IAAIC,EAAe,EACbC,EAAsB,CAAC,EACvBC,EAAsB,CAAC,EAC7B,OAAAH,EAASA,EAAO,QAAQ,wBAAyB,CAACI,EAAGC,EAAcC,IAC7DD,IAAiB,QACnBH,EAAoB,EAAED,CAAY,EAAI,OAAOI,CAAY,EAClD,QAELC,IAAe,SACjBH,EAAoB,OAAOG,CAAU,CAAC,EAAI,EAAEL,GACrC,GAGV,EACM,CAAC,IAAI,OAAO,IAAID,CAAM,EAAE,EAAGE,EAAqBC,CAAmB,CAC5E,CACF,EC7CA,IAAII,GAAc,CAAC,KAAM,CAAC,EAAmB,OAAO,OAAO,IAAI,CAAC,EAC5DC,GAAsC,OAAO,OAAO,IAAI,EAC5D,SAASC,GAAoBC,EAAM,CACjC,OAAOF,GAAoBE,CAAI,IAAM,IAAI,OACvCA,IAAS,IAAM,GAAK,IAAIA,EAAK,QAC3B,0BACA,CAACC,EAAGC,IAAaA,EAAW,KAAKA,CAAQ,GAAK,UAChD,CAAC,GACH,CACF,CACA,SAASC,IAA2B,CAClCL,GAAsC,OAAO,OAAO,IAAI,CAC1D,CACA,SAASM,GAAmCC,EAAQ,CAClD,IAAMC,EAAO,IAAIC,GACXC,EAAc,CAAC,EACrB,GAAIH,EAAO,SAAW,EACpB,OAAOR,GAET,IAAMY,EAA2BJ,EAAO,IACrCK,GAAU,CAAC,CAAC,SAAS,KAAKA,EAAM,CAAC,CAAC,EAAG,GAAGA,CAAK,CAChD,EAAE,KACA,CAAC,CAACC,EAAWC,CAAK,EAAG,CAACC,EAAWC,CAAK,IAAMH,EAAY,EAAIE,EAAY,GAAKD,EAAM,OAASE,EAAM,MACpG,EACMC,EAA4B,OAAO,OAAO,IAAI,EACpD,QAASC,EAAI,EAAGC,EAAI,GAAIC,EAAMT,EAAyB,OAAQO,EAAIE,EAAKF,IAAK,CAC3E,GAAM,CAACG,EAAoBnB,EAAMoB,CAAQ,EAAIX,EAAyBO,CAAC,EACnEG,EACFJ,EAAUf,CAAI,EAAI,CAACoB,EAAS,IAAI,CAAC,CAACC,CAAC,IAAM,CAACA,EAAmB,OAAO,OAAO,IAAI,CAAC,CAAC,EAAGC,EAAU,EAE9FL,IAEF,IAAIM,EACJ,GAAI,CACFA,EAAajB,EAAK,OAAON,EAAMiB,EAAGE,CAAkB,CACtD,OAASK,EAAG,CACV,MAAMA,IAAMC,EAAa,IAAIC,GAAqB1B,CAAI,EAAIwB,CAC5D,CACIL,IAGJX,EAAYS,CAAC,EAAIG,EAAS,IAAI,CAAC,CAACC,EAAGM,CAAU,IAAM,CACjD,IAAMC,EAAgC,OAAO,OAAO,IAAI,EAExD,IADAD,GAAc,EACPA,GAAc,EAAGA,IAAc,CACpC,GAAM,CAACE,EAAKC,CAAK,EAAIP,EAAWI,CAAU,EAC1CC,EAAcC,CAAG,EAAIC,CACvB,CACA,MAAO,CAACT,EAAGO,CAAa,CAC1B,CAAC,EACH,CACA,GAAM,CAACG,EAAQC,EAAqBC,CAAmB,EAAI3B,EAAK,YAAY,EAC5E,QAASU,EAAI,EAAGE,EAAMV,EAAY,OAAQQ,EAAIE,EAAKF,IACjD,QAASC,EAAI,EAAGiB,EAAO1B,EAAYQ,CAAC,EAAE,OAAQC,EAAIiB,EAAMjB,IAAK,CAC3D,IAAMkB,EAAM3B,EAAYQ,CAAC,EAAEC,CAAC,IAAI,CAAC,EACjC,GAAI,CAACkB,EACH,SAEF,IAAMC,EAAO,OAAO,KAAKD,CAAG,EAC5B,QAASE,EAAI,EAAGC,EAAOF,EAAK,OAAQC,EAAIC,EAAMD,IAC5CF,EAAIC,EAAKC,CAAC,CAAC,EAAIJ,EAAoBE,EAAIC,EAAKC,CAAC,CAAC,CAAC,CAEnD,CAEF,IAAME,EAAa,CAAC,EACpB,QAAWvB,KAAKgB,EACdO,EAAWvB,CAAC,EAAIR,EAAYwB,EAAoBhB,CAAC,CAAC,EAEpD,MAAO,CAACe,EAAQQ,EAAYxB,CAAS,CACvC,CACA,SAASyB,EAAeC,EAAYzC,EAAM,CACxC,GAAKyC,GAGL,QAAWJ,KAAK,OAAO,KAAKI,CAAU,EAAE,KAAK,CAACC,EAAGC,IAAMA,EAAE,OAASD,EAAE,MAAM,EACxE,GAAI3C,GAAoBsC,CAAC,EAAE,KAAKrC,CAAI,EAClC,MAAO,CAAC,GAAGyC,EAAWJ,CAAC,CAAC,EAI9B,CACA,IAAIO,GAAe,KAAM,CACvB,KAAO,eACPC,GACAC,GACA,aAAc,CACZ,KAAKD,GAAc,CAAE,CAACE,CAAe,EAAmB,OAAO,OAAO,IAAI,CAAE,EAC5E,KAAKD,GAAU,CAAE,CAACC,CAAe,EAAmB,OAAO,OAAO,IAAI,CAAE,CAC1E,CACA,IAAIC,EAAQhD,EAAMiD,EAAS,CACzB,IAAMR,EAAa,KAAKI,GAClBxC,EAAS,KAAKyC,GACpB,GAAI,CAACL,GAAc,CAACpC,EAClB,MAAM,IAAI,MAAM6C,EAAgC,EAE7CT,EAAWO,CAAM,GAEpB,CAACP,EAAYpC,CAAM,EAAE,QAASkC,GAAe,CAC3CA,EAAWS,CAAM,EAAoB,OAAO,OAAO,IAAI,EACvD,OAAO,KAAKT,EAAWQ,CAAe,CAAC,EAAE,QAASI,GAAM,CACtDZ,EAAWS,CAAM,EAAEG,CAAC,EAAI,CAAC,GAAGZ,EAAWQ,CAAe,EAAEI,CAAC,CAAC,CAC5D,CAAC,CACH,CAAC,EAECnD,IAAS,OACXA,EAAO,KAET,IAAM2B,GAAc3B,EAAK,MAAM,MAAM,GAAK,CAAC,GAAG,OAC9C,GAAI,MAAM,KAAKA,CAAI,EAAG,CACpB,IAAMoD,EAAKrD,GAAoBC,CAAI,EAC/BgD,IAAWD,EACb,OAAO,KAAKN,CAAU,EAAE,QAASY,GAAM,CACrCZ,EAAWY,CAAC,EAAErD,CAAI,IAAMwC,EAAeC,EAAWY,CAAC,EAAGrD,CAAI,GAAKwC,EAAeC,EAAWM,CAAe,EAAG/C,CAAI,GAAK,CAAC,CACvH,CAAC,EAEDyC,EAAWO,CAAM,EAAEhD,CAAI,IAAMwC,EAAeC,EAAWO,CAAM,EAAGhD,CAAI,GAAKwC,EAAeC,EAAWM,CAAe,EAAG/C,CAAI,GAAK,CAAC,EAEjI,OAAO,KAAKyC,CAAU,EAAE,QAASY,GAAM,EACjCL,IAAWD,GAAmBC,IAAWK,IAC3C,OAAO,KAAKZ,EAAWY,CAAC,CAAC,EAAE,QAASF,GAAM,CACxCC,EAAG,KAAKD,CAAC,GAAKV,EAAWY,CAAC,EAAEF,CAAC,EAAE,KAAK,CAACF,EAAStB,CAAU,CAAC,CAC3D,CAAC,CAEL,CAAC,EACD,OAAO,KAAKtB,CAAM,EAAE,QAASgD,GAAM,EAC7BL,IAAWD,GAAmBC,IAAWK,IAC3C,OAAO,KAAKhD,EAAOgD,CAAC,CAAC,EAAE,QACpBF,GAAMC,EAAG,KAAKD,CAAC,GAAK9C,EAAOgD,CAAC,EAAEF,CAAC,EAAE,KAAK,CAACF,EAAStB,CAAU,CAAC,CAC9D,CAEJ,CAAC,EACD,MACF,CACA,IAAM2B,EAAQC,GAAuBvD,CAAI,GAAK,CAACA,CAAI,EACnD,QAAS,EAAI,EAAGkB,EAAMoC,EAAM,OAAQ,EAAIpC,EAAK,IAAK,CAChD,IAAMsC,EAAQF,EAAM,CAAC,EACrB,OAAO,KAAKjD,CAAM,EAAE,QAASgD,GAAM,EAC7BL,IAAWD,GAAmBC,IAAWK,KAC3ChD,EAAOgD,CAAC,EAAEG,CAAK,IAAM,CACnB,GAAGhB,EAAeC,EAAWY,CAAC,EAAGG,CAAK,GAAKhB,EAAeC,EAAWM,CAAe,EAAGS,CAAK,GAAK,CAAC,CACpG,EACAnD,EAAOgD,CAAC,EAAEG,CAAK,EAAE,KAAK,CAACP,EAAStB,EAAaT,EAAM,EAAI,CAAC,CAAC,EAE7D,CAAC,CACH,CACF,CACA,MAAQuC,GACR,kBAAmB,CACjB,IAAMC,EAA2B,OAAO,OAAO,IAAI,EACnD,cAAO,KAAK,KAAKZ,EAAO,EAAE,OAAO,OAAO,KAAK,KAAKD,EAAW,CAAC,EAAE,QAASG,GAAW,CAClFU,EAASV,CAAM,IAAM,KAAKW,GAAcX,CAAM,CAChD,CAAC,EACD,KAAKH,GAAc,KAAKC,GAAU,OAClC3C,GAAyB,EAClBuD,CACT,CACAC,GAAcX,EAAQ,CACpB,IAAM3C,EAAS,CAAC,EACZuD,EAAcZ,IAAWD,EAY7B,MAXA,CAAC,KAAKF,GAAa,KAAKC,EAAO,EAAE,QAAS,GAAM,CAC9C,IAAMe,EAAW,EAAEb,CAAM,EAAI,OAAO,KAAK,EAAEA,CAAM,CAAC,EAAE,IAAKhD,GAAS,CAACA,EAAM,EAAEgD,CAAM,EAAEhD,CAAI,CAAC,CAAC,EAAI,CAAC,EAC1F6D,EAAS,SAAW,GACtBD,IAAgB,GAChBvD,EAAO,KAAK,GAAGwD,CAAQ,GACdb,IAAWD,GACpB1C,EAAO,KACL,GAAG,OAAO,KAAK,EAAE0C,CAAe,CAAC,EAAE,IAAK/C,GAAS,CAACA,EAAM,EAAE+C,CAAe,EAAE/C,CAAI,CAAC,CAAC,CACnF,CAEJ,CAAC,EACI4D,EAGIxD,GAAmCC,CAAM,EAFzC,IAIX,CACF,ECxLA,IAAIyD,GAAc,KAAM,CACtB,KAAO,cACPC,GAAW,CAAC,EACZC,GAAU,CAAC,EACX,YAAYC,EAAM,CAChB,KAAKF,GAAWE,EAAK,OACvB,CACA,IAAIC,EAAQC,EAAMC,EAAS,CACzB,GAAI,CAAC,KAAKJ,GACR,MAAM,IAAI,MAAMK,EAAgC,EAElD,KAAKL,GAAQ,KAAK,CAACE,EAAQC,EAAMC,CAAO,CAAC,CAC3C,CACA,MAAMF,EAAQC,EAAM,CAClB,GAAI,CAAC,KAAKH,GACR,MAAM,IAAI,MAAM,aAAa,EAE/B,IAAMM,EAAU,KAAKP,GACfQ,EAAS,KAAKP,GACdQ,EAAMF,EAAQ,OAChBG,EAAI,EACJC,EACJ,KAAOD,EAAID,EAAKC,IAAK,CACnB,IAAME,EAASL,EAAQG,CAAC,EACxB,GAAI,CACF,QAASG,EAAK,EAAGC,EAAON,EAAO,OAAQK,EAAKC,EAAMD,IAChDD,EAAO,IAAI,GAAGJ,EAAOK,CAAE,CAAC,EAE1BF,EAAMC,EAAO,MAAMT,EAAQC,CAAI,CACjC,OAASW,EAAG,CACV,GAAIA,aAAaC,GACf,SAEF,MAAMD,CACR,CACA,KAAK,MAAQH,EAAO,MAAM,KAAKA,CAAM,EACrC,KAAKZ,GAAW,CAACY,CAAM,EACvB,KAAKX,GAAU,OACf,KACF,CACA,GAAIS,IAAMD,EACR,MAAM,IAAI,MAAM,aAAa,EAE/B,YAAK,KAAO,iBAAiB,KAAK,aAAa,IAAI,GAC5CE,CACT,CACA,IAAI,cAAe,CACjB,GAAI,KAAKV,IAAW,KAAKD,GAAS,SAAW,EAC3C,MAAM,IAAI,MAAM,2CAA2C,EAE7D,OAAO,KAAKA,GAAS,CAAC,CACxB,CACF,ECnDA,IAAIiB,EAA8B,OAAO,OAAO,IAAI,EAChDC,GAAO,MAAMC,EAAM,CACrBC,GACAC,GACAC,GACAC,GAAS,EACTC,GAAUP,EACV,YAAYQ,EAAQC,EAASC,EAAU,CAGrC,GAFA,KAAKN,GAAYM,GAA4B,OAAO,OAAO,IAAI,EAC/D,KAAKP,GAAW,CAAC,EACbK,GAAUC,EAAS,CACrB,IAAME,EAAoB,OAAO,OAAO,IAAI,EAC5CA,EAAEH,CAAM,EAAI,CAAE,QAAAC,EAAS,aAAc,CAAC,EAAG,MAAO,CAAE,EAClD,KAAKN,GAAW,CAACQ,CAAC,CACpB,CACA,KAAKN,GAAY,CAAC,CACpB,CACA,OAAOG,EAAQI,EAAMH,EAAS,CAC5B,KAAKH,GAAS,EAAE,KAAKA,GACrB,IAAIO,EAAU,KACRC,EAAQC,GAAiBH,CAAI,EAC7BI,EAAe,CAAC,EACtB,QAAS,EAAI,EAAGC,EAAMH,EAAM,OAAQ,EAAIG,EAAK,IAAK,CAChD,IAAMC,EAAIJ,EAAM,CAAC,EACXK,EAAQL,EAAM,EAAI,CAAC,EACnBM,EAAUC,GAAWH,EAAGC,CAAK,EAC7BG,EAAM,MAAM,QAAQF,CAAO,EAAIA,EAAQ,CAAC,EAAIF,EAClD,GAAII,KAAOT,EAAQT,GAAW,CAC5BS,EAAUA,EAAQT,GAAUkB,CAAG,EAC3BF,GACFJ,EAAa,KAAKI,EAAQ,CAAC,CAAC,EAE9B,QACF,CACAP,EAAQT,GAAUkB,CAAG,EAAI,IAAIpB,GACzBkB,IACFP,EAAQR,GAAU,KAAKe,CAAO,EAC9BJ,EAAa,KAAKI,EAAQ,CAAC,CAAC,GAE9BP,EAAUA,EAAQT,GAAUkB,CAAG,CACjC,CACA,OAAAT,EAAQV,GAAS,KAAK,CACpB,CAACK,CAAM,EAAG,CACR,QAAAC,EACA,aAAcO,EAAa,OAAO,CAACO,EAAGC,EAAGC,IAAMA,EAAE,QAAQF,CAAC,IAAMC,CAAC,EACjE,MAAO,KAAKlB,EACd,CACF,CAAC,EACMO,CACT,CACAa,GAAgBC,EAAMnB,EAAQoB,EAAYC,EAAQ,CAChD,IAAMC,EAAc,CAAC,EACrB,QAASN,EAAI,EAAGP,EAAMU,EAAKxB,GAAS,OAAQqB,EAAIP,EAAKO,IAAK,CACxD,IAAMb,EAAIgB,EAAKxB,GAASqB,CAAC,EACnBO,EAAapB,EAAEH,CAAM,GAAKG,EAAEqB,CAAe,EAC3CC,EAAe,CAAC,EACtB,GAAIF,IAAe,SACjBA,EAAW,OAAyB,OAAO,OAAO,IAAI,EACtDD,EAAY,KAAKC,CAAU,EACvBH,IAAe5B,GAAe6B,GAAUA,IAAW7B,GACrD,QAASkC,EAAK,EAAGC,EAAOJ,EAAW,aAAa,OAAQG,EAAKC,EAAMD,IAAM,CACvE,IAAMZ,EAAMS,EAAW,aAAaG,CAAE,EAChCE,EAAYH,EAAaF,EAAW,KAAK,EAC/CA,EAAW,OAAOT,CAAG,EAAIO,IAASP,CAAG,GAAK,CAACc,EAAYP,EAAOP,CAAG,EAAIM,EAAWN,CAAG,GAAKO,IAASP,CAAG,EACpGW,EAAaF,EAAW,KAAK,EAAI,EACnC,CAGN,CACA,OAAOD,CACT,CACA,OAAOtB,EAAQI,EAAM,CACnB,IAAMkB,EAAc,CAAC,EACrB,KAAKvB,GAAUP,EAEf,IAAIqC,EAAW,CADC,IACO,EACjBvB,EAAQwB,GAAU1B,CAAI,EACtB2B,EAAgB,CAAC,EACvB,QAASf,EAAI,EAAGP,EAAMH,EAAM,OAAQU,EAAIP,EAAKO,IAAK,CAChD,IAAMgB,EAAO1B,EAAMU,CAAC,EACdiB,EAASjB,IAAMP,EAAM,EACrByB,EAAY,CAAC,EACnB,QAASC,EAAI,EAAGR,EAAOE,EAAS,OAAQM,EAAIR,EAAMQ,IAAK,CACrD,IAAMhB,EAAOU,EAASM,CAAC,EACjBC,EAAWjB,EAAKvB,GAAUoC,CAAI,EAChCI,IACFA,EAASrC,GAAUoB,EAAKpB,GACpBkC,GACEG,EAASxC,GAAU,GAAG,GACxB0B,EAAY,KACV,GAAG,KAAKJ,GAAgBkB,EAASxC,GAAU,GAAG,EAAGI,EAAQmB,EAAKpB,EAAO,CACvE,EAEFuB,EAAY,KAAK,GAAG,KAAKJ,GAAgBkB,EAAUpC,EAAQmB,EAAKpB,EAAO,CAAC,GAExEmC,EAAU,KAAKE,CAAQ,GAG3B,QAASC,EAAI,EAAGC,EAAOnB,EAAKtB,GAAU,OAAQwC,EAAIC,EAAMD,IAAK,CAC3D,IAAMzB,EAAUO,EAAKtB,GAAUwC,CAAC,EAC1BhB,EAASF,EAAKpB,KAAYP,EAAc,CAAC,EAAI,CAAE,GAAG2B,EAAKpB,EAAQ,EACrE,GAAIa,IAAY,IAAK,CACnB,IAAM2B,EAAUpB,EAAKvB,GAAU,GAAG,EAC9B2C,IACFjB,EAAY,KAAK,GAAG,KAAKJ,GAAgBqB,EAASvC,EAAQmB,EAAKpB,EAAO,CAAC,EACvEwC,EAAQxC,GAAUsB,EAClBa,EAAU,KAAKK,CAAO,GAExB,QACF,CACA,GAAM,CAACzB,EAAK0B,GAAMC,CAAO,EAAI7B,EAC7B,GAAI,CAACoB,GAAQ,EAAES,aAAmB,QAChC,SAEF,IAAMC,EAAQvB,EAAKvB,GAAUkB,CAAG,EAC1B6B,GAAiBrC,EAAM,MAAMU,CAAC,EAAE,KAAK,GAAG,EAC9C,GAAIyB,aAAmB,OAAQ,CAC7B,IAAMtC,EAAIsC,EAAQ,KAAKE,EAAc,EACrC,GAAIxC,EAAG,CAGL,GAFAkB,EAAOmB,EAAI,EAAIrC,EAAE,CAAC,EAClBmB,EAAY,KAAK,GAAG,KAAKJ,GAAgBwB,EAAO1C,EAAQmB,EAAKpB,GAASsB,CAAM,CAAC,EACzE,OAAO,KAAKqB,EAAM9C,EAAS,EAAE,OAAQ,CACvC8C,EAAM3C,GAAUsB,EAChB,IAAMuB,GAAiBzC,EAAE,CAAC,EAAE,MAAM,IAAI,GAAG,QAAU,GAC5B4B,EAAca,EAAc,IAAM,CAAC,GAC3C,KAAKF,CAAK,CAC3B,CACA,QACF,CACF,EACID,IAAY,IAAQA,EAAQ,KAAKT,CAAI,KACvCX,EAAOmB,EAAI,EAAIR,EACXC,GACFX,EAAY,KAAK,GAAG,KAAKJ,GAAgBwB,EAAO1C,EAAQqB,EAAQF,EAAKpB,EAAO,CAAC,EACzE2C,EAAM9C,GAAU,GAAG,GACrB0B,EAAY,KACV,GAAG,KAAKJ,GAAgBwB,EAAM9C,GAAU,GAAG,EAAGI,EAAQqB,EAAQF,EAAKpB,EAAO,CAC5E,IAGF2C,EAAM3C,GAAUsB,EAChBa,EAAU,KAAKQ,CAAK,GAG1B,CACF,CACAb,EAAWK,EAAU,OAAOH,EAAc,MAAM,GAAK,CAAC,CAAC,CACzD,CACA,OAAIT,EAAY,OAAS,GACvBA,EAAY,KAAK,CAACL,EAAG4B,IACZ5B,EAAE,MAAQ4B,EAAE,KACpB,EAEI,CAACvB,EAAY,IAAI,CAAC,CAAE,QAAArB,EAAS,OAAAoB,CAAO,IAAM,CAACpB,EAASoB,CAAM,CAAC,CAAC,CACrE,CACF,EC3JA,IAAIyB,GAAa,KAAM,CACrB,KAAO,aACPC,GACA,aAAc,CACZ,KAAKA,GAAQ,IAAIC,EACnB,CACA,IAAIC,EAAQC,EAAMC,EAAS,CACzB,IAAMC,EAAUC,GAAuBH,CAAI,EAC3C,GAAIE,EAAS,CACX,QAASE,EAAI,EAAGC,EAAMH,EAAQ,OAAQE,EAAIC,EAAKD,IAC7C,KAAKP,GAAM,OAAOE,EAAQG,EAAQE,CAAC,EAAGH,CAAO,EAE/C,MACF,CACA,KAAKJ,GAAM,OAAOE,EAAQC,EAAMC,CAAO,CACzC,CACA,MAAMF,EAAQC,EAAM,CAClB,OAAO,KAAKH,GAAM,OAAOE,EAAQC,CAAI,CACvC,CACF,ECjBA,IAAIM,EAAO,cAAcA,EAAS,CAMhC,YAAYC,EAAU,CAAC,EAAG,CACxB,MAAMA,CAAO,EACb,KAAK,OAASA,EAAQ,QAAU,IAAIC,GAAY,CAC9C,QAAS,CAAC,IAAIC,GAAgB,IAAIC,EAAY,CAChD,CAAC,CACH,CACF,EChBA,IAAIC,GAAc,CAACC,EAAUC,EAAQC,KAAc,CACjD,IAAMC,EAAS,qBACTC,EAAQJ,EAAS,MAAMG,CAAM,EACnC,GAAI,CAACC,EACH,OAEF,IAAIC,EAAWJ,EAAMG,EAAM,CAAC,CAAC,EAC7B,OAAIC,GAAYA,EAAS,WAAW,MAAM,IACxCA,GAAY,mBAEPA,CACT,EAQA,IAAIC,GAAa,CACf,IAAK,YACL,IAAK,kBACL,KAAM,aACN,IAAK,YACL,IAAK,2BACL,IAAK,YACL,IAAK,WACL,IAAK,WACL,IAAK,gCACL,KAAM,uBACN,IAAK,YACL,GAAI,mBACJ,IAAK,YACL,KAAM,YACN,IAAK,eACL,IAAK,gBACL,KAAM,aACN,IAAK,aACL,GAAI,kBACJ,KAAM,mBACN,OAAQ,sBACR,IAAK,mBACL,IAAK,eACL,KAAM,eACN,IAAK,kBACL,IAAK,aACL,IAAK,YACL,KAAM,aACN,IAAK,YACL,IAAK,YACL,IAAK,kBACL,KAAM,aACN,IAAK,WACL,IAAK,kBACL,IAAK,YACL,IAAK,kBACL,IAAK,gBACL,IAAK,aACL,KAAM,aACN,GAAI,aACJ,IAAK,WACL,IAAK,aACL,KAAM,mBACN,KAAM,aACN,KAAM,aACN,YAAa,4BACb,KAAM,aACN,KAAM,YACN,MAAO,aACP,MAAO,wBACP,IAAK,kBACL,IAAK,kBACL,MAAO,aACP,MAAO,cACP,KAAM,kBACN,IAAK,mBACP,EACIC,GAAYD,GC5EhB,OAAS,oBAAAE,GAAkB,YAAAC,GAAU,cAAAC,OAAkB,KACvD,OAAS,QAAAC,OAAY,OACrB,OAAS,YAAAC,OAAgB,UACzB,OAAS,YAAAC,OAAgB,SACzB,IAAIC,GAAkC,ykBAClCC,GAAY,CACd,GAAI,MACJ,KAAM,OACN,KAAM,KACR,EACIC,GAAyB,OAAO,KAAKD,EAAS,EAC9CE,GAAiB,IAAM,CACzB,GAAM,CAACC,EAAOC,CAAK,EAAIP,GAAS,KAAK,MAAM,GAAG,EAAE,IAAKQ,GAAc,SAASA,CAAS,CAAC,EACtF,OAAOF,GAAS,IAAMA,IAAU,IAAMC,GAAS,GAAKD,IAAU,IAAMC,GAAS,EAC/E,EACIE,GAAmBJ,GAAe,EAClCK,GAAoBC,GAClBF,GACKR,GAAS,MAAMU,CAAM,EAEjB,IAAI,eAAe,CAC9B,MAAMC,EAAY,CAChBD,EAAO,GAAG,OAASE,GAAU,CAC3BD,EAAW,QAAQC,CAAK,CAC1B,CAAC,EACDF,EAAO,GAAG,QAAUG,GAAQ,CAC1BF,EAAW,MAAME,CAAG,CACtB,CAAC,EACDH,EAAO,GAAG,MAAO,IAAM,CACrBC,EAAW,MAAM,CACnB,CAAC,CACH,EACA,QAAS,CACPD,EAAO,QAAQ,CACjB,CACF,CAAC,EAGCI,GAAYC,GAAS,CACvB,IAAIC,EACJ,GAAI,CACFA,EAAQpB,GAASmB,CAAI,CACvB,MAAQ,CACR,CACA,OAAOC,CACT,EACIC,GAAc,CAACC,EAAU,CAAE,KAAM,EAAG,IAAM,CAC5C,IAAMC,EAAOD,EAAQ,MAAQ,GACvBE,EAAaF,EAAQ,KAC3B,OAAIC,IAAS,IAAM,CAACtB,GAAWsB,CAAI,GACjC,QAAQ,MAAM,2BAA2BA,CAAI,4CAA4C,EAEpF,MAAOE,EAAGC,IAAS,CACxB,GAAID,EAAE,UACJ,OAAOC,EAAK,EAEd,IAAIC,EACJ,GAAIH,EACFG,EAAWH,MAEX,IAAI,CAEF,GADAG,EAAW,mBAAmBF,EAAE,IAAI,IAAI,EACpC,+BAA+B,KAAKE,CAAQ,EAC9C,MAAM,IAAI,KAEd,MAAQ,CACN,aAAML,EAAQ,aAAaG,EAAE,IAAI,KAAMA,CAAC,EACjCC,EAAK,CACd,CAEF,IAAIP,EAAOjB,GACTqB,EACA,CAACC,GAAcF,EAAQ,mBAAqBA,EAAQ,mBAAmBK,EAAUF,CAAC,EAAIE,CACxF,EACIP,EAAQF,GAASC,CAAI,EACzB,GAAIC,GAASA,EAAM,YAAY,EAAG,CAChC,IAAMQ,EAAYN,EAAQ,OAAS,aACnCH,EAAOjB,GAAKiB,EAAMS,CAAS,EAC3BR,EAAQF,GAASC,CAAI,CACvB,CACA,GAAI,CAACC,EACH,aAAME,EAAQ,aAAaH,EAAMM,CAAC,EAC3BC,EAAK,EAEd,IAAMG,EAAWC,GAAYX,CAAI,EAEjC,GADAM,EAAE,OAAO,eAAgBI,GAAY,0BAA0B,EAC3DP,EAAQ,gBAAkB,CAACO,GAAYxB,GAAgC,KAAKwB,CAAQ,GAAI,CAC1F,IAAME,EAAoB,IAAI,IAC5BN,EAAE,IAAI,OAAO,iBAAiB,GAAG,MAAM,GAAG,EAAE,IAAKO,GAAaA,EAAS,KAAK,CAAC,CAC/E,EACA,QAAWA,KAAYzB,GAAwB,CAC7C,GAAI,CAACwB,EAAkB,IAAIC,CAAQ,EACjC,SAEF,IAAMC,EAAqBf,GAASC,EAAOb,GAAU0B,CAAQ,CAAC,EAC9D,GAAIC,EAAoB,CACtBR,EAAE,OAAO,mBAAoBO,CAAQ,EACrCP,EAAE,OAAO,OAAQ,kBAAmB,CAAE,OAAQ,EAAK,CAAC,EACpDL,EAAQa,EACRd,EAAOA,EAAOb,GAAU0B,CAAQ,EAChC,KACF,CACF,CACF,CACA,IAAIE,EACEC,EAAOf,EAAM,KACbgB,EAAQX,EAAE,IAAI,OAAO,OAAO,GAAK,GACvC,GAAIA,EAAE,IAAI,QAAU,QAAUA,EAAE,IAAI,QAAU,UAC5CA,EAAE,OAAO,iBAAkBU,EAAK,SAAS,CAAC,EAC1CV,EAAE,OAAO,GAAG,EACZS,EAAST,EAAE,KAAK,IAAI,UACX,CAACW,EACVX,EAAE,OAAO,iBAAkBU,EAAK,SAAS,CAAC,EAC1CD,EAAST,EAAE,KAAKZ,GAAiBd,GAAiBoB,CAAI,CAAC,EAAG,GAAG,MACxD,CACLM,EAAE,OAAO,gBAAiB,OAAO,EACjCA,EAAE,OAAO,OAAQL,EAAM,UAAU,YAAY,CAAC,EAC9C,IAAMiB,EAAQD,EAAM,QAAQ,SAAU,EAAE,EAAE,MAAM,IAAK,CAAC,EAChDE,EAAQ,SAASD,EAAM,CAAC,EAAG,EAAE,GAAK,EACpCE,EAAM,SAASF,EAAM,CAAC,EAAG,EAAE,GAAKF,EAAO,EACvCA,EAAOI,EAAMD,EAAQ,IACvBC,EAAMJ,EAAO,GAEf,IAAMK,EAAYD,EAAMD,EAAQ,EAC1BxB,EAASf,GAAiBoB,EAAM,CAAE,MAAAmB,EAAO,IAAAC,CAAI,CAAC,EACpDd,EAAE,OAAO,iBAAkBe,EAAU,SAAS,CAAC,EAC/Cf,EAAE,OAAO,gBAAiB,SAASa,CAAK,IAAIC,CAAG,IAAInB,EAAM,IAAI,EAAE,EAC/Dc,EAAST,EAAE,KAAKZ,GAAiBC,CAAM,EAAG,GAAG,CAC/C,CACA,aAAMQ,EAAQ,UAAUH,EAAMM,CAAC,EACxBS,CACT,CACF,ECnIA,OAAS,SAAAO,OAAa,qBCUf,SAASC,EAASC,EAAwB,CAC/C,OAAOA,EAAE,WAAW,OAAO,GAAKA,EAAE,SAAW,EAC/C,CAEO,SAASC,GAAaD,EAA4B,CACvD,OAAOA,EAAE,WAAW,MAAM,GAAKA,EAAE,SAAW,EAC9C,CA2FO,IAAME,EAAN,cAAuB,KAAM,CAClC,YACEC,EACOC,EACAC,EACP,CACA,MAAMF,CAAO,EAHN,cAAAC,EACA,YAAAC,EAGP,KAAK,KAAO,UACd,CACF,EAEaC,GAAN,cAA8B,KAAM,CACzC,YAAYH,EAAU,4BAA6B,CACjD,MAAMA,CAAO,EACb,KAAK,KAAO,iBACd,CACF,EDxHA,IAAMI,GAAiB,IAGjBC,GAAW,QAAQ,IAAI,mBAAqB,KAC5CC,GAAU,QAAQ,IAAI,kBAAoB,QAAQ,IAAI,EAK5D,eAAsBC,EAAQC,EAAkC,CAC9D,OAAO,IAAI,QAAQ,CAACC,EAASC,IAAW,CACtC,IAAMC,EAAOC,GAAMP,GAAU,CAAC,GAAGG,EAAM,QAAQ,EAAG,CAChD,IAAKF,GACL,MAAO,CAAC,SAAU,OAAQ,MAAM,CAClC,CAAC,EAEKO,EAAU,WAAW,IAAM,CAC/BF,EAAK,KAAK,SAAS,EACnBD,EAAO,IAAII,EAAiB,CAC9B,EAAGV,EAAc,EAEbW,EAAS,GACTC,EAAS,GAEbL,EAAK,OAAO,GAAG,OAASM,GAAkB,CACxCF,GAAUE,EAAM,SAAS,CAC3B,CAAC,EAEDN,EAAK,OAAO,GAAG,OAASM,GAAkB,CACxCD,GAAUC,EAAM,SAAS,CAC3B,CAAC,EAEDN,EAAK,GAAG,QAAUO,GAAQ,CACxB,aAAaL,CAAO,EACpBH,EAAO,IAAIS,EAAS,uBAAuBD,EAAI,OAAO,GAAI,GAAI,EAAE,CAAC,CACnE,CAAC,EAEDP,EAAK,GAAG,QAAUS,GAAS,CAGzB,GAFA,aAAaP,CAAO,EAEhBO,IAAS,EAAG,CACd,IAAMC,EAAUL,EAAO,KAAK,GAAK,uBAAuBI,CAAI,GAC5DV,EAAO,IAAIS,EAASE,EAASD,GAAQ,GAAIJ,CAAM,CAAC,EAChD,MACF,CAEA,GAAI,CACF,IAAMM,EAAkB,KAAK,MAAMP,CAAM,EACzCN,EAAQa,CAAM,CAChB,OAASJ,EAAK,CACZR,EACE,IAAIS,EACF,yBAAyBD,aAAe,MAAQA,EAAI,QAAU,OAAOA,CAAG,CAAC,GACzE,EACAH,CACF,CACF,CACF,CACF,CAAC,CACH,CAAC,CACH,CE9CA,SAAgBQ,EAGdC,EAAwCC,EAAuC,CAC/E,OAAID,IAAU,EACZ,IAAYE,IACNA,EAAK,QAAU,EACVD,EAAKC,EAAK,CAAA,EAAIA,EAAK,CAAA,CAAA,EAEpBC,GAAcF,EAAKE,EAAMD,EAAK,CAAA,CAAA,EAItCF,IAAU,EACZ,IAAYE,IACNA,EAAK,QAAU,EACVD,EAAKC,EAAK,CAAA,EAAIA,EAAK,CAAA,EAAIA,EAAK,CAAA,CAAA,EAE7BC,GAAcF,EAAKE,EAAMD,EAAK,CAAA,EAAIA,EAAK,CAAA,CAAA,EAI/CF,IAAU,EACZ,IAAYE,IACNA,EAAK,QAAU,EACVD,EAAKC,EAAK,CAAA,EAAIA,EAAK,CAAA,EAAIA,EAAK,CAAA,EAAIA,EAAK,CAAA,CAAA,EAEtCC,GAAcF,EAAKE,EAAMD,EAAK,CAAA,EAAIA,EAAK,CAAA,EAAIA,EAAK,CAAA,CAAA,EAI5D,IAAYA,IACNA,EAAK,QAAUF,EACVC,EAAK,GAAGC,CAAA,EAETC,GAAcF,EAAKE,EAAM,GAAGD,CAAA,ECpDxC,IAAME,GAAkBC,GAClBA,aAAiB,MACZ,CAAE,KAAMA,EAAM,KAAM,QAASA,EAAM,QAAS,MAAOA,EAAM,OAE3DA,EAOHC,GAAoBC,GACjBA,aAAiB,OAAS,SAAUA,GAAS,OAAOA,EAAM,MAAS,SAoB/DC,GAMT,OAAO,OACYC,GAAA,IAC6D,CAC9E,MAAMC,UAAa,KAAM,CACd,KAAYD,EAGrB,OAAO,GAAGF,EAA+B,CACvC,OAAOA,aAAiBG,EAG1B,YAAYR,EAAc,CACxB,IAAMS,EACJT,GAAQ,YAAaA,GAAQ,OAAOA,EAAK,SAAY,SACjDA,EAAK,QACL,OACAG,EAAQH,GAAQ,UAAWA,EAAOA,EAAK,MAAQ,OAWrD,GATA,MAAMS,EAASN,IAAU,OAAY,CAAE,MAAAA,CAAA,EAAU,MAAA,EAE7CH,GACF,OAAO,OAAO,KAAMA,CAAA,EAGtB,OAAO,eAAe,KAAM,WAAW,SAAA,EACvC,KAAK,KAAOO,EAERJ,aAAiB,OAASA,EAAM,MAAO,CACzC,IAAMO,EAAWP,EAAM,MAAM,QAAQ,MAAO;GAAA,EAC5C,KAAK,MAAQ,GAAG,KAAK,KAAA;aAAqBO,CAAA,IAI9C,QAAiB,CACf,MAAO,CACL,GAAG,KACH,KAAM,KAAK,KACX,KAAM,KAAK,KACX,QAAS,KAAK,QACd,MAAOR,GAAe,KAAK,KAAA,EAC3B,MAAO,KAAK,QAMlB,OAAOM,GAEX,CAAE,GAAIJ,EAAA,CAAkB,EA6CbO,GAGTd,EAAK,EAAA,CAAiCe,EAAQC,IAAqC,CACrF,IAAMC,EAAUD,EAASE,EAAI,IAAA,EAE7B,OAAOD,EAAQC,CAAAA,IAWJC,GAcTnB,EACF,EAAA,CAEEe,EACAC,EACAI,IACM,CAEN,IAAMH,EAAUD,EAASE,EAAI,IAAA,EAC7B,OAAI,OAAOD,GAAY,WAEdA,EAAQC,CAAAA,EAGVE,EAASF,CAAAA,IAgBpB,IAAaG,GAAb,cAAwCC,GAAY,oBAAA,EAAqB,CAGpE,CACH,YAAYC,EAA0B,CACpC,IAAMC,EACJD,EAAK,iBAAiB,MAClB,wBAAwBA,EAAK,MAAM,OAAA,GACnC,wBAAwB,OAAOA,EAAK,KAAA,CAAM,GAChD,MAAM,CAAE,QAAAC,EAAS,MAAOD,EAAK,MAAO,IAoB3BE,GAAb,cAA2BH,GAAY,OAAA,EAAQ,CAG1C,CAAA,EAWQI,GAAb,cAAgDJ,GAAY,4BAAA,EAA6B,CAGpF,CACH,YAAYC,EAA0B,CACpC,MAAM,CACJ,QAAS,wGACT,MAAOA,EAAK,MACb,IAoBL,IAAaI,EAAA,CAASC,EAAiBC,IAA2B,CAChE,MAAM,IAAIC,GAAM,CAAE,QAAAF,EAAS,MAAAC,EAAO,GCvQ9BE,EAAA,CAAiBC,EAAaJ,IAAuB,CACzD,GAAI,CACF,OAAOI,EAAA,QACAH,EAAO,CACd,MAAMF,EAAMC,EAASC,CAAA,IAKnBI,GAAkB,MAAUD,EAAsBJ,IAAgC,CACtF,GAAI,CACF,OAAO,MAAMI,EAAA,QACNH,EAAO,CACd,MAAMF,EAAMC,EAASC,CAAA,IAeZK,GAAb,MAAaA,EAAiB,CACnB,OAAS,KAClB,YAAqBC,EAAU,CAAV,KAAA,MAAAA,EAGrB,MAAyB,CACvB,MAAO,GAIT,OAA2B,CACzB,MAAO,GAcT,IAAOH,EAA2B,CAChC,OAAOD,EAAA,IAAiB,IAAIG,GAASF,EAAG,KAAK,KAAA,CAAM,EAAG,oBAAA,EAUxD,SAAaI,EAAkC,CAE7C,OAAO,KAeT,QAAeJ,EAAgD,CAC7D,OAAOD,EAAA,IAAiBC,EAAG,KAAK,KAAA,EAAQ,wBAAA,EAe1C,aAAoBA,EAAkE,CACpF,OAAOC,GAAA,IAAsBD,EAAG,KAAK,KAAA,EAAQ,6BAAA,EAc/C,MAASK,EAAwD,CAC/D,OAAON,EAAA,IAAiBM,EAAS,GAAG,KAAK,KAAA,EAAQ,wBAAA,EAYnD,OAAOC,EAAsB,CAC3B,OAAO,KAAK,MAad,SAAYC,EAAiB,CAC3B,OAAO,KAAK,MAad,IAAIP,EAA8B,CAChC,OAAOD,EAAA,KACLC,EAAG,KAAK,KAAA,EACD,MACN,oBAAA,EAaL,SAASA,EAAgD,CACvD,OAAOC,GAAgB,UACrB,MAAMD,EAAG,KAAK,KAAA,EACP,MACN,yBAAA,EASL,EAAE,OAAO,QAAA,GAAkD,CACzD,OAAO,KAAK,QAeHQ,GAAb,MAAaA,EAAU,CACZ,OAAS,QAClB,YAAqBC,EAAU,CAAV,KAAA,MAAAA,EAGrB,MAA6B,CAC3B,MAAO,GAIT,OAA2B,CACzB,MAAO,GAUT,IAAOL,EAAiC,CAEtC,OAAO,KAcT,SAAaJ,EAA8B,CACzC,OAAOD,EAAA,IAAiB,IAAIS,GAAWR,EAAG,KAAK,KAAA,CAAM,EAAG,yBAAA,EAW1D,QAAeI,EAAkD,CAE/D,OAAO,KAWT,aAAoBA,EAAoE,CAEtF,OAAO,QAAQ,QAAQ,IAAA,EAczB,MAASC,EAAwD,CAC/D,OAAON,EAAA,IAAiBM,EAAS,IAAI,KAAK,KAAA,EAAQ,yBAAA,EAapD,OAAOT,EAAyB,CAC9B,OAAOD,EAAMC,GAAW,yBAAyB,OAAO,KAAK,KAAA,CAAM,GAAI,KAAK,KAAA,EAa9E,SAAYc,EAAoB,CAC9B,OAAOA,EAST,IAAIN,EAAoC,CACtC,OAAO,KAST,SAASA,EAAsD,CAC7D,OAAO,QAAQ,QAAQ,IAAA,EAOzB,EAAE,OAAO,QAAA,GAAsD,CAI7D,aAAM,KACCT,EAAM,iEAAkE,KAAK,KAAA,IAgDxF,SAASgB,EAAGR,EAAqC,CAC/C,OAAO,IAAID,GAAGC,CAAA,EAGhB,IAAMS,GAAcC,GACXA,EAAO,SAAW,KAGrBC,EAA+BL,GAAwB,IAAID,GAAUC,CAAA,EAErEM,GAAiBF,GACdA,EAAO,SAAW,QAGrBG,GAAA,CAUJC,EACAC,IACsC,CACtC,IAAMC,EAAA,IAAmD,CACvD,GAAI,OAAOF,GAAY,WACrB,GAAI,CACF,OAAON,EAAGM,EAAA,CAAS,QACZpB,EAAO,CACd,OAAOiB,EAAI,IAAIM,GAAmB,CAAE,MAAAvB,CAAA,CAAO,CAAC,EAGhD,GAAI,CACF,OAAOc,EAAGM,EAAQ,IAAA,CAAK,QAChBI,EAAe,CAEtB,GAAI,CACF,OAAOP,EAAIG,EAAQ,MAAMI,CAAA,CAAc,QAChCC,EAAmB,CAC1B,MAAM3B,EAAM,iCAAkC2B,CAAA,KAK9CC,EAAQL,GAAQ,OAAO,OAAS,EAClCL,EAASM,EAAA,EAEb,QAASK,EAAQ,EAAGA,EAAQD,GAASV,EAAO,SAAW,QAASW,IAC9DX,EAASM,EAAA,EAGX,OAAON,GAaHY,GASF,MACFR,EAGAC,IAC+C,CAC/C,IAAMC,EAAU,SAAwD,CACtE,GAAI,OAAOF,GAAY,WACrB,GAAI,CACF,OAAON,EAAG,MAAMM,EAAA,CAAS,QAClBpB,EAAO,CACd,OAAOiB,EAAI,IAAIM,GAAmB,CAAE,MAAAvB,CAAA,CAAO,CAAC,EAGhD,GAAI,CACF,OAAOc,EAAG,MAAMM,EAAQ,IAAA,CAAK,QACtBI,EAAe,CAEtB,GAAI,CACF,OAAOP,EAAI,MAAMG,EAAQ,MAAMI,CAAA,CAAc,QACtCC,EAAmB,CAC1B,MAAM3B,EAAM,wCAAyC2B,CAAA,KAKrDE,EAAQN,GAAQ,MAEtB,GAAI,CAACM,EACH,OAAOL,EAAA,EAGT,IAAMO,EAAYC,GAAiC,CACjD,OAAQH,EAAM,QAAd,CACE,IAAK,WACH,OAAOA,EAAM,QACf,IAAK,SACH,OAAOA,EAAM,SAAWG,EAAe,GACzC,IAAK,cACH,OAAOH,EAAM,QAAU,GAAKG,IAI5BC,EAASC,GAAe,IAAI,QAAeC,GAAY,WAAWA,EAASD,CAAA,CAAG,EAEhFhB,EAAS,MAAMM,EAAA,EAEbY,EAAgBP,EAAM,cAAA,IAAsB,IAElD,QAASQ,EAAU,EAAGA,EAAUR,EAAM,OAChCX,EAAO,SAAW,QADqBmB,IAAW,CAEtD,IAAMvB,EAAQI,EAAO,MAErB,GAAI,CADmBd,EAAA,IAAiBgC,EAActB,CAAA,EAAQ,6BAAA,EACzC,MACrB,MAAMmB,EAAMF,EAASM,CAAA,CAAQ,EAC7BnB,EAAS,MAAMM,EAAA,EAGjB,OAAON,GAGHoB,GAGFC,EAAK,EAAA,CAAarB,EAAsBb,IACnCa,EAAO,IAAIb,CAAA,GAGdmC,GAGFD,EAAK,EAAA,CAAcrB,EAAsBb,IACpCa,EAAO,SAASb,CAAA,GAGnBoC,GAGFF,EAAK,EAAA,CAAiBrB,EAAsBb,IACvCa,EAAO,QAAQb,CAAA,GAGlBqC,GAQFH,EACF,EAAA,CAEErB,EACAb,IAEOa,EAAO,aAAab,CAAA,GAIzBsC,GAGFJ,EAAK,EAAA,CAAarB,EAAsBR,IACnCQ,EAAO,MAAMR,CAAA,GAGhBkC,GAGFL,EAAK,EAAA,CAAUrB,EAAsBb,IAChCa,EAAO,IAAIb,CAAA,GAGdwC,GAGFN,EAAK,EAAA,CAAUrB,EAAsBb,IAChCa,EAAO,SAASb,CAAA,GAGnByC,GAAA,CAAgB5B,EAAsBjB,IACnCiB,EAAO,OAAOjB,CAAA,EAIvB,SAAS8C,GAAevC,EAA2D,CACjF,GACE,EAAAA,IAAU,MACV,OAAOA,GAAU,UACjB,WAAYA,IACXA,EAAM,SAAW,MAAQA,EAAM,SAAW,UAI7C,OAAOR,EACL,kEACGQ,IAAU,KAAO,OAAS,OAAOA,GAAU,SAAW,KAAK,UAAUA,CAAA,EAAS,OAAOA,CAAA,EAAM,EAIlG,IAAMwC,GAGFT,EAAK,EAAA,CAAarB,EAAsBH,IACnCG,EAAO,SAASH,CAAA,GAGnBkC,GAAA,CAgBJC,EAKAC,IAGqE,CAErE,IAAMC,EAAYF,EAAsD,KAAKC,CAAA,EAG7E,GAAI,OAAO,iBAAiBC,EAC1B,OAAQ,SAAY,CAElB,IAAMC,EAAYD,EAEdE,EACJ,GAAI,CACFC,EAAQ,MAAMF,EAAU,KAAA,QACjBnD,EAAO,CAEd,MAAMF,EAAM,uBAAwBE,CAAA,EAKtC,GAFA6C,GAAeO,EAAM,KAAA,EAEjB,CAACA,EAAM,KAGT,GAAI,CACF,MAAMD,EAAU,SAAS,MAAA,QAClBnD,EAAO,CACd,MAAMF,EAAM,0BAA2BE,CAAA,EAI3C,OAAOoD,EAAM,UAMjB,IAAME,EAAWJ,EAEbE,EACJ,GAAI,CACFA,EAAQE,EAAS,KAAA,QACVtD,EAAO,CAEd,MAAMF,EAAM,uBAAwBE,CAAA,EAKtC,GAFA6C,GAAeO,EAAM,KAAA,EAEjB,CAACA,EAAM,KAGT,GAAI,CACFE,EAAS,SAAS,MAAA,QACXtD,EAAO,CACd,MAAMF,EAAM,0BAA2BE,CAAA,EAI3C,OAAOoD,EAAM,OAkBf,eAAgBG,GACdC,EAC2C,CAE3C,OAAO,MADQ,MAAMA,EAmBvB,SAASC,GAAmBC,EAAyD,CACnF,OACEA,IAAQ,MACR,OAAOA,GAAQ,UACf,WAAYA,IACVA,EAAI,SAAW,MAAQ,UAAWA,GAASA,EAAI,SAAW,SAAW,UAAWA,GAItF,IAAMC,GAAmB3C,GAChBA,EAAO,SAAW,KACrB,CAAE,OAAQ,KAAM,MAAOA,EAAO,OAC9B,CAAE,OAAQ,QAAS,MAAOA,EAAO,OAGjC4C,GAAqBtD,GACrBmD,GAAmBnD,CAAA,EACdA,EAAM,SAAW,KACnB,IAAID,GAAGC,EAAM,KAAA,EACb,IAAIK,GAAIL,EAAM,KAAA,EAEdW,EAAI,IAAI4C,GAA2B,CAAE,MAAAvD,CAAA,CAAO,CAAC,EAMhDwD,GAAiBxD,GACdsD,GAAYtD,CAAA,EAGfyD,GAAmBC,GAAiD,CACxE,IAAMC,EAAW,CAAA,EACXC,EAAY,CAAA,EAClB,QAAW,KAAKF,EACV,EAAE,SAAW,KACfC,EAAI,KAAK,EAAE,KAAA,EAEXC,EAAK,KAAK,EAAE,KAAA,EAGhB,MAAO,CAACD,EAAKC,CAAA,GAUTC,GAAqBnD,GACrBA,EAAO,SAAW,KACbA,EAAO,MAGTA,EAUIoD,EAAS,CAQpB,GAAAtD,EAOA,KAAAC,GAOA,IAAAE,EAOA,QAAAC,GAQA,IAAKC,GAoCL,WAAAS,GAQA,IAAAQ,GAOA,SAAAE,GAOA,QAAAC,GAOA,aAAAC,GAOA,MAAAC,GAOA,IAAAC,GAOA,SAAAC,GAQA,OAAAC,GAQA,SAAAE,GA8BA,IAAAC,GAOA,MAAOQ,GAOP,UAAAI,GAkBA,YAAAC,GAIA,QAAAE,GAOA,UAAAC,GAQA,QAAAI,ICt+BK,IAAME,EAAN,cAA0BC,GAAY,aAAa,EAGvD,CAAE,CAAC,EAGN,SAASC,EAASC,EAA0C,CAC1D,OAAO,OAAOA,GAAM,UAAYA,IAAM,MAAQ,CAAC,MAAM,QAAQA,CAAC,CAChE,CAGA,SAASC,EAASD,EAAyB,CACzC,OAAO,OAAOA,GAAM,QACtB,CAGA,SAASE,GAAUF,EAA0B,CAC3C,OAAO,OAAOA,GAAM,SACtB,CAGA,SAASG,GAASH,EAAyB,CACzC,OAAO,OAAOA,GAAM,QACtB,CAGA,SAASI,GAAWJ,EAA2B,CAC7C,OAAOG,GAASH,CAAC,GAAKA,GAAK,GAAKA,GAAK,GAAK,OAAO,UAAUA,CAAC,CAC9D,CAGA,SAASK,GAAQL,EAAwB,CACvC,OAAOA,IAAM,GAAKA,IAAM,GAAKA,IAAM,CACrC,CAKO,SAASM,GAAeN,EAA2C,CACxE,GAAI,CAACD,EAASC,CAAC,EACb,OAAOO,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,yBAA0B,CAAC,CAAC,EAG3E,GAAM,CAAE,GAAAW,EAAI,OAAAC,EAAQ,QAAAC,EAAS,aAAAC,EAAc,UAAAC,CAAU,EAAIZ,EAEzD,MAAI,CAACC,EAASO,CAAE,GAAK,CAACK,GAAaL,CAAE,EAC5BD,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,wBAAwBW,CAAE,EAAG,CAAC,CAAC,EAE1E,CAACP,EAASQ,CAAM,GAAK,CAACK,EAASL,CAAM,EAChCF,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,4BAA4BY,CAAM,EAAG,CAAC,CAAC,EAEjFR,EAASS,CAAO,EAGjBC,IAAiB,OAAS,CAACV,EAASU,CAAY,GAAK,CAACG,EAASH,CAAY,GACtEJ,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,kCAAkCc,CAAY,EAAG,CAAC,CAAC,EAE7FV,EAASW,CAAS,EAIhBL,EAAO,GAAG,CACf,GAAIC,EACJ,OAAQC,EACR,QAAAC,EACA,aAAcC,EACd,UAAAC,CACF,CAAC,EATQL,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,mCAAoC,CAAC,CAAC,EAN5EU,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,iCAAkC,CAAC,CAAC,CAgBrF,CAKO,SAASkB,GAAgBf,EAA6C,CAC3E,GAAI,CAAC,MAAM,QAAQA,CAAC,EAClB,OAAOO,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,yBAA0B,CAAC,CAAC,EAG3E,IAAMmB,EAAwB,CAAC,EAC/B,QAASC,EAAI,EAAGA,EAAIjB,EAAE,OAAQiB,IAAK,CACjC,IAAMC,EAASZ,GAAeN,EAAEiB,CAAC,CAAC,EAClC,GAAIC,EAAO,MAAM,EACf,OAAOX,EAAO,IAAI,IAAIV,EAAY,CAChC,QAASqB,EAAO,MAAM,QACtB,KAAM,aAAaD,CAAC,GACtB,CAAC,CAAC,EAEJD,EAAU,KAAKE,EAAO,KAAK,CAC7B,CACA,OAAOX,EAAO,GAAGS,CAAS,CAC5B,CAKO,SAASG,EAAWnB,EAAuC,CAChE,GAAI,CAACD,EAASC,CAAC,EACb,OAAOO,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,qBAAsB,CAAC,CAAC,EAGvE,GAAM,CACJ,GAAAW,EACA,SAAAY,EACA,YAAAC,EACA,SAAAC,EACA,UAAAC,EACA,YAAAC,EACA,UAAAC,EACA,UAAAb,EACA,UAAAc,EACA,OAAAR,EACA,UAAAS,EACA,MAAAC,EACA,UAAAC,EACA,OAAAC,EACA,SAAAC,EACA,YAAAC,EACA,mBAAAC,CACF,EAAIjC,EAGJ,GAAI,CAACC,EAASO,CAAE,GAAK,CAACM,EAASN,CAAE,EAC/B,OAAOD,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,oBAAoBW,CAAE,EAAG,CAAC,CAAC,EAE1E,GAAIY,IAAa,OAAS,CAACnB,EAASmB,CAAQ,GAAK,CAACN,EAASM,CAAQ,GACjE,OAAOb,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,0BAA0BuB,CAAQ,EAAG,CAAC,CAAC,EAEtF,GAAI,CAACnB,EAASoB,CAAW,EACvB,OAAOd,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,iCAAkC,CAAC,CAAC,EAEnF,GAAI,CAACO,GAAWkB,CAAQ,EACtB,OAAOf,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,0BAA0ByB,CAAQ,EAAG,CAAC,CAAC,EAEtF,GAAI,CAACpB,GAAUqB,CAAS,EACtB,OAAOhB,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,gCAAiC,CAAC,CAAC,EAElF,GAAI2B,IAAgB,MAAQ,CAACvB,EAASuB,CAAW,EAC/C,OAAOjB,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,yCAA0C,CAAC,CAAC,EAE3F,GAAI4B,IAAc,MAAQ,CAACxB,EAASwB,CAAS,EAC3C,OAAOlB,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,uCAAwC,CAAC,CAAC,EAEzF,GAAI,CAACI,EAASW,CAAS,EACrB,OAAOL,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,+BAAgC,CAAC,CAAC,EAEjF,GAAI,CAACI,EAASyB,CAAS,EACrB,OAAOnB,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,+BAAgC,CAAC,CAAC,EAEjF,GAAIqB,IAAW,MAAQ,CAACjB,EAASiB,CAAM,EACrC,OAAOX,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,oCAAqC,CAAC,CAAC,EAEtF,GAAI8B,IAAc,MAAQ,CAAC1B,EAAS0B,CAAS,EAC3C,OAAOpB,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,uCAAwC,CAAC,CAAC,EAEzF,GAAI,CAACQ,GAAQuB,CAAK,EAChB,OAAOrB,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,uBAAuB+B,CAAK,EAAG,CAAC,CAAC,EAEhF,GAAI,CAAC1B,GAAU+B,CAAkB,EAC/B,OAAO1B,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,yCAA0C,CAAC,CAAC,EAI3F,IAAIqC,EACJ,GAAIL,IAAc,OAAW,CAC3B,GAAI,CAAC,MAAM,QAAQA,CAAS,EAC1B,OAAOtB,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,8BAA+B,CAAC,CAAC,EAEhFqC,EAAmB,CAAC,EACpB,QAAWC,KAAON,EAAW,CAC3B,GAAI,CAAC5B,EAASkC,CAAG,GAAK,CAACrB,EAASqB,CAAG,EACjC,OAAO5B,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,uBAAuBsC,CAAG,EAAG,CAAC,CAAC,EAE9ED,EAAiB,KAAKC,CAAa,CACrC,CACF,CAEA,IAAIC,EACJ,GAAIN,IAAW,OAAW,CACxB,GAAI,CAAC,MAAM,QAAQA,CAAM,EACvB,OAAOvB,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,2BAA4B,CAAC,CAAC,EAE7EuC,EAAgB,CAAC,EACjB,QAAWD,KAAOL,EAAQ,CACxB,GAAI,CAAC7B,EAASkC,CAAG,GAAK,CAACrB,EAASqB,CAAG,EACjC,OAAO5B,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,sBAAsBsC,CAAG,EAAG,CAAC,CAAC,EAE7EC,EAAc,KAAKD,CAAa,CAClC,CACF,CAGA,GAAIJ,IAAa,QAAa,CAAC9B,EAAS8B,CAAQ,EAC9C,OAAOxB,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,8BAA+B,CAAC,CAAC,EAEhF,GAAImC,IAAgB,QAAa,CAAC/B,EAAS+B,CAAW,EACpD,OAAOzB,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,iCAAkC,CAAC,CAAC,EAGnF,IAAMwC,EAAa,CACjB,GAAI7B,EACJ,SAAUY,EACV,YAAAC,EACA,SAAUC,EACV,UAAAC,EACA,YAAaC,EACb,UAAWC,EACX,UAAAb,EACA,UAAAc,EACA,OAAQR,EACR,UAAWS,EACX,MAAOC,EACP,mBAAAK,CACF,EAEA,OAAIC,IAAkBG,EAAK,UAAYH,GACnCE,IAAeC,EAAK,OAASD,GAC7BL,IAAa,SAAWM,EAAK,SAAWN,GACxCC,IAAgB,SAAWK,EAAK,YAAcL,GAE3CzB,EAAO,GAAG8B,CAAI,CACvB,CAKO,SAASC,GAAYtC,EAAyC,CACnE,GAAI,CAAC,MAAM,QAAQA,CAAC,EAClB,OAAOO,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,qBAAsB,CAAC,CAAC,EAGvE,IAAM0C,EAAgB,CAAC,EACvB,QAAStB,EAAI,EAAGA,EAAIjB,EAAE,OAAQiB,IAAK,CACjC,IAAMC,EAASC,EAAWnB,EAAEiB,CAAC,CAAC,EAC9B,GAAIC,EAAO,MAAM,EACf,OAAOX,EAAO,IAAI,IAAIV,EAAY,CAChC,QAASqB,EAAO,MAAM,QACtB,KAAM,SAASD,CAAC,GAClB,CAAC,CAAC,EAEJsB,EAAM,KAAKrB,EAAO,KAAK,CACzB,CACA,OAAOX,EAAO,GAAGgC,CAAK,CACxB,CAKA,SAASC,GAAkBxC,EAA8C,CACvE,GAAI,CAACD,EAASC,CAAC,EACb,OAAOO,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,4BAA6B,CAAC,CAAC,EAG9E,GAAM,CAAE,IAAA4C,EAAK,OAAAC,EAAQ,UAAAC,CAAU,EAAI3C,EAEnC,GAAI,CAACC,EAASwC,CAAG,EACf,OAAOlC,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,gCAAiC,CAAC,CAAC,EAElF,GAAI6C,IAAW,QAAa,CAACzC,EAASyC,CAAM,EAC1C,OAAOnC,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,mCAAoC,CAAC,CAAC,EAErF,GAAI8C,IAAc,QAAa,CAAC1C,EAAS0C,CAAS,EAChD,OAAOpC,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,sCAAuC,CAAC,CAAC,EAGxF,IAAM+C,EAAmB,CAAE,IAAAH,CAAI,EAC/B,OAAIC,IAAW,SAAWE,EAAI,OAASF,GACnCC,IAAc,SAAWC,EAAI,UAAYD,GACtCpC,EAAO,GAAGqC,CAAG,CACtB,CAKA,SAASC,GAAyB7C,EAAqD,CACrF,GAAI,CAACD,EAASC,CAAC,EACb,OAAOO,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,mCAAoC,CAAC,CAAC,EAGrF,GAAM,CAAE,IAAA4C,EAAK,OAAAC,EAAQ,UAAAC,CAAU,EAAI3C,EAG7B8C,EAAY/B,GAAgB0B,GAAO,CAAC,CAAC,EAC3C,GAAIK,EAAU,MAAM,EAClB,OAAOvC,EAAO,IAAI,IAAIV,EAAY,CAAE,QAASiD,EAAU,MAAM,QAAS,KAAM,eAAgB,CAAC,CAAC,EAGhG,IAAMC,EAAehC,GAAgB2B,GAAU,CAAC,CAAC,EACjD,GAAIK,EAAa,MAAM,EACrB,OAAOxC,EAAO,IAAI,IAAIV,EAAY,CAAE,QAASkD,EAAa,MAAM,QAAS,KAAM,kBAAmB,CAAC,CAAC,EAGtG,IAAMC,EAAkBjC,GAAgB4B,GAAa,CAAC,CAAC,EACvD,OAAIK,EAAgB,MAAM,EACjBzC,EAAO,IAAI,IAAIV,EAAY,CAAE,QAASmD,EAAgB,MAAM,QAAS,KAAM,qBAAsB,CAAC,CAAC,EAGrGzC,EAAO,GAAG,CACf,IAAKuC,EAAU,MACf,OAAQC,EAAa,MACrB,UAAWC,EAAgB,KAC7B,CAAC,CACH,CAKO,SAASC,GAAsBjD,EAAkD,CACtF,GAAI,CAACD,EAASC,CAAC,EACb,OAAOO,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,gCAAiC,CAAC,CAAC,EAIlF,IAAMqD,EAAa/B,EAAWnB,CAAC,EAC/B,GAAIkD,EAAW,MAAM,EAAG,OAAOA,EAG/B,GAAM,CAAE,QAAAC,EAAS,UAAAnC,CAAU,EAAIhB,EAEzBoD,EAAYZ,GAAkBW,CAAO,EAC3C,GAAIC,EAAU,MAAM,EAClB,OAAO7C,EAAO,IAAI,IAAIV,EAAY,CAAE,QAASuD,EAAU,MAAM,QAAS,KAAM,SAAU,CAAC,CAAC,EAG1F,IAAMC,EAAYR,GAAyB7B,CAAS,EACpD,OAAIqC,EAAU,MAAM,EACX9C,EAAO,IAAI,IAAIV,EAAY,CAAE,QAASwD,EAAU,MAAM,QAAS,KAAM,WAAY,CAAC,CAAC,EAGrF9C,EAAO,GAAG,CACf,GAAG2C,EAAW,MACd,QAASE,EAAU,MACnB,UAAWC,EAAU,KACvB,CAAC,CACH,CAKO,SAASC,GACdtD,EAC6C,CAC7C,OAAIA,IAAM,KAAaO,EAAO,GAAG,IAAI,EAC9B0C,GAAsBjD,CAAC,CAChC,CAKO,SAASuD,GAAwBvD,EAAoD,CAC1F,GAAI,CAACD,EAASC,CAAC,EACb,OAAOO,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,kCAAmC,CAAC,CAAC,EAGpF,GAAM,CAAE,YAAAwB,EAAa,QAAA8B,EAAS,SAAA7B,CAAS,EAAItB,EAErCwD,EAAyB,CAAC,EAEhC,GAAInC,IAAgB,OAAW,CAC7B,GAAI,CAACpB,EAASoB,CAAW,EACvB,OAAOd,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,4BAA6B,CAAC,CAAC,EAE9E2D,EAAI,YAAcnC,CACpB,CACA,GAAI8B,IAAY,OAAW,CACzB,GAAI,CAAClD,EAASkD,CAAO,EACnB,OAAO5C,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,wBAAyB,CAAC,CAAC,EAE1E2D,EAAI,QAAUL,CAChB,CACA,GAAI7B,IAAa,OAAW,CAC1B,GAAI,CAAClB,GAAWkB,CAAQ,EACtB,OAAOf,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,qBAAqByB,CAAQ,EAAG,CAAC,CAAC,EAEjFkC,EAAI,SAAWlC,CACjB,CAEA,OAAOf,EAAO,GAAGiD,CAAG,CACtB,CAKO,SAASC,GAA0BzD,EAAsD,CAC9F,GAAI,CAACD,EAASC,CAAC,EACb,OAAOO,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,oCAAqC,CAAC,CAAC,EAGtF,GAAM,CAAE,OAAAqB,EAAQ,UAAAF,CAAU,EAAIhB,EAExBwD,EAA2B,CAAC,EAElC,GAAItC,IAAW,OAAW,CACxB,GAAI,CAACjB,EAASiB,CAAM,EAClB,OAAOX,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,uBAAwB,CAAC,CAAC,EAEzE2D,EAAI,OAAStC,CACf,CACA,GAAIF,IAAc,OAAW,CAC3B,GAAI,CAAC,MAAM,QAAQA,CAAS,EAC1B,OAAOT,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,yBAA0B,CAAC,CAAC,EAE3E,QAASoB,EAAI,EAAGA,EAAID,EAAU,OAAQC,IACpC,GAAI,CAAChB,EAASe,EAAUC,CAAC,CAAC,EACxB,OAAOV,EAAO,IAAI,IAAIV,EAAY,CAAE,QAAS,aAAaoB,CAAC,kBAAmB,CAAC,CAAC,EAGpFuC,EAAI,UAAYxC,CAClB,CAEA,OAAOT,EAAO,GAAGiD,CAAG,CACtB,CC3ZA,SAASE,EACPC,EACAC,EACqD,CACrD,GAAIA,aAAeC,EAAU,CAE3B,IAAMC,EAAUF,EAAI,QAAQ,YAAY,EACxC,OAAIE,EAAQ,SAAS,WAAW,GAAKA,EAAQ,SAAS,SAAS,EACtDH,EAAE,KAAK,CAAE,MAAOC,EAAI,OAAQ,EAAG,GAAG,EAGzCE,EAAQ,SAAS,SAAS,GAC1BA,EAAQ,SAAS,YAAY,GAC7BA,EAAQ,SAAS,OAAO,EAEjBH,EAAE,KAAK,CAAE,MAAOC,EAAI,OAAQ,EAAG,GAAG,EAGzCE,EAAQ,SAAS,kBAAkB,GACnCA,EAAQ,SAAS,oBAAoB,EAE9BH,EAAE,KAAK,CAAE,MAAOC,EAAI,QAAS,KAAM,WAAY,EAAG,GAAG,EAGvDD,EAAE,KAAK,CAAE,MAAOC,EAAI,OAAQ,EAAG,GAAG,CAC3C,CAEA,IAAME,EAAUF,aAAe,MAAQA,EAAI,QAAU,OAAOA,CAAG,EAC/D,OAAOD,EAAE,KAAK,CAAE,MAAOG,CAAQ,EAAG,GAAG,CACvC,CAEA,IAAMC,GAAQ,IAAIC,EAAK,EAMpB,IAAI,IAAK,MAAOL,GAAM,CACrB,IAAMM,EAAWN,EAAE,IAAI,MAAM,UAAU,EACjCO,EAAQP,EAAE,IAAI,MAAM,OAAO,EAC3BQ,EAAYR,EAAE,IAAI,MAAM,WAAW,EAEnCS,EAAO,CAAC,OAAQ,MAAM,EAC5B,GAAIH,EAAU,CACZ,GAAI,CAACI,EAASJ,CAAQ,EACpB,OAAON,EAAE,KAAK,CAAE,MAAO,qBAAqBM,CAAQ,EAAG,EAAG,GAAG,EAE/DG,EAAK,KAAK,WAAYH,CAAQ,CAChC,CACIC,IAAU,QAAQE,EAAK,KAAK,SAAS,EACrCD,IAAc,QAAQC,EAAK,KAAK,aAAa,EAEjD,GAAI,CACF,IAAME,EAASC,GAAY,MAAMC,EAAQJ,CAAI,CAAC,EAAE,OAAO,gBAAgB,EACvE,OAAOT,EAAE,KAAKW,CAAM,CACtB,OAASV,EAAK,CACZ,OAAOF,EAAeC,EAAGC,CAAG,CAC9B,CACF,CAAC,EAOA,IAAI,cAAe,MAAOD,GAAM,CAC/B,IAAMc,EAAcd,EAAE,IAAI,MAAM,aAAa,EAEvCS,EAAO,CAAC,OAAQ,YAAY,EAClC,GAAIK,EAAa,CACf,GAAI,CAACJ,EAASI,CAAW,EACvB,OAAOd,EAAE,KAAK,CAAE,MAAO,wBAAwBc,CAAW,EAAG,EAAG,GAAG,EAErEL,EAAK,KAAK,cAAeK,CAAW,CACtC,CAEA,GAAI,CACF,IAAMH,EAASI,GAA4B,MAAMF,EAAQJ,CAAI,CAAC,EAAE,OAC9D,2BACF,EACA,OAAIE,IAAW,KACNX,EAAE,KAAK,KAAM,GAAG,EAElBA,EAAE,KAAKW,CAAM,CACtB,OAASV,EAAK,CACZ,OAAOF,EAAeC,EAAGC,CAAG,CAC9B,CACF,CAAC,EAMA,IAAI,OAAQ,MAAOD,GAAM,CACxB,IAAMgB,EAAKhB,EAAE,IAAI,MAAM,IAAI,EAC3B,GAAI,CAACU,EAASM,CAAE,EACd,OAAOhB,EAAE,KAAK,CAAE,MAAO,oBAAoBgB,CAAE,EAAG,EAAG,GAAG,EAGxD,GAAI,CACF,IAAML,EAASM,GAAsB,MAAMJ,EAAQ,CAAC,OAAQ,MAAOG,CAAE,CAAC,CAAC,EAAE,OACvE,oBACF,EACA,OAAOhB,EAAE,KAAKW,CAAM,CACtB,OAASV,EAAK,CACZ,OAAOF,EAAeC,EAAGC,CAAG,CAC9B,CACF,CAAC,EAMA,IAAI,OAAQ,MAAOD,GAAM,CACxB,IAAMgB,EAAKhB,EAAE,IAAI,MAAM,IAAI,EAC3B,GAAI,CAACU,EAASM,CAAE,EACd,OAAOhB,EAAE,KAAK,CAAE,MAAO,oBAAoBgB,CAAE,EAAG,EAAG,GAAG,EAGxD,IAAIE,EACJ,GAAI,CACFA,EAAOC,GAAwB,MAAMnB,EAAE,IAAI,KAAK,CAAC,EAAE,OACjD,yBACF,CACF,MAAQ,CACN,OAAOA,EAAE,KAAK,CAAE,MAAO,mBAAoB,EAAG,GAAG,CACnD,CAEA,IAAMS,EAAO,CAAC,OAAQ,SAAUO,CAAE,EAMlC,GALIE,EAAK,aAAaT,EAAK,KAAK,KAAMS,EAAK,WAAW,EAClDA,EAAK,SAAST,EAAK,KAAK,YAAaS,EAAK,OAAO,EACjDA,EAAK,UAAUT,EAAK,KAAK,aAAc,OAAOS,EAAK,QAAQ,CAAC,EAG5DT,EAAK,SAAW,EAClB,OAAOT,EAAE,KAAK,CAAE,MAAO,qBAAsB,EAAG,GAAG,EAGrD,GAAI,CACF,IAAMW,EAASS,EAAW,MAAMP,EAAQJ,CAAI,CAAC,EAAE,OAAO,oBAAoB,EAC1E,OAAOT,EAAE,KAAKW,CAAM,CACtB,OAASV,EAAK,CACZ,OAAOF,EAAeC,EAAGC,CAAG,CAC9B,CACF,CAAC,EAMA,OAAO,OAAQ,MAAOD,GAAM,CAC3B,IAAMgB,EAAKhB,EAAE,IAAI,MAAM,IAAI,EAC3B,GAAI,CAACU,EAASM,CAAE,EACd,OAAOhB,EAAE,KAAK,CAAE,MAAO,oBAAoBgB,CAAE,EAAG,EAAG,GAAG,EAGxD,GAAI,CACF,aAAMH,EAAQ,CAAC,OAAQ,SAAUG,CAAE,CAAC,EAC7BhB,EAAE,KAAK,CAAE,QAAS,EAAK,CAAC,CACjC,OAASC,EAAK,CACZ,OAAOF,EAAeC,EAAGC,CAAG,CAC9B,CACF,CAAC,EAMA,KAAK,gBAAiB,MAAOD,GAAM,CAClC,IAAMgB,EAAKhB,EAAE,IAAI,MAAM,IAAI,EAC3B,GAAI,CAACU,EAASM,CAAE,EACd,OAAOhB,EAAE,KAAK,CAAE,MAAO,oBAAoBgB,CAAE,EAAG,EAAG,GAAG,EAGxD,IAAIE,EACJ,GAAI,CACF,IAAMG,EAAO,MAAMrB,EAAE,IAAI,KAAK,EAC1BqB,EACFH,EAAOI,GAA0B,KAAK,MAAMD,CAAI,CAAC,EAAE,OACjD,mCACF,EAEAH,EAAO,CAAC,CAEZ,MAAQ,CACN,OAAOlB,EAAE,KAAK,CAAE,MAAO,mBAAoB,EAAG,GAAG,CACnD,CAEA,IAAMS,EAAO,CAAC,OAAQ,WAAYO,CAAE,EAEpC,GADIE,EAAK,QAAQT,EAAK,KAAK,WAAYS,EAAK,MAAM,EAC9CA,EAAK,UACP,QAAWK,KAAYL,EAAK,UAC1BT,EAAK,KAAK,aAAcc,CAAQ,EAIpC,GAAI,CACF,IAAMZ,EAASS,EAAW,MAAMP,EAAQJ,CAAI,CAAC,EAAE,OAAO,8BAA8B,EACpF,OAAOT,EAAE,KAAKW,CAAM,CACtB,OAASV,EAAK,CACZ,OAAOF,EAAeC,EAAGC,CAAG,CAC9B,CACF,CAAC,EAMA,KAAK,cAAe,MAAOD,GAAM,CAChC,IAAMgB,EAAKhB,EAAE,IAAI,MAAM,IAAI,EAC3B,GAAI,CAACU,EAASM,CAAE,EACd,OAAOhB,EAAE,KAAK,CAAE,MAAO,oBAAoBgB,CAAE,EAAG,EAAG,GAAG,EAGxD,GAAI,CACF,IAAML,EAASS,EAAW,MAAMP,EAAQ,CAAC,OAAQ,SAAUG,CAAE,CAAC,CAAC,EAAE,OAC/D,4BACF,EACA,OAAOhB,EAAE,KAAKW,CAAM,CACtB,OAASV,EAAK,CACZ,OAAOF,EAAeC,EAAGC,CAAG,CAC9B,CACF,CAAC,EAOA,IAAI,qBAAsB,MAAOD,GAAM,CACtC,IAAMwB,EAASxB,EAAE,IAAI,MAAM,QAAQ,EACnC,GAAI,CAACU,EAASc,CAAM,EAClB,OAAOxB,EAAE,KAAK,CAAE,MAAO,oBAAoBwB,CAAM,EAAG,EAAG,GAAG,EAG5D,GAAI,CACF,IAAMb,EAASc,GAAgB,MAAMZ,EAAQ,CAC3C,WACA,OACAW,CACF,CAAC,CAAC,EAAE,OAAO,kCAAkC,EAC7C,OAAOxB,EAAE,KAAKW,CAAM,CACtB,OAASV,EAAK,CACZ,OAAOF,EAAeC,EAAGC,CAAG,CAC9B,CACF,CAAC,ECpQH,IAAMyB,GAAM,IAAIC,EAAK,EAClB,IAAI,UAAYC,GACRA,EAAE,KAAK,CAAE,OAAQ,IAAK,CAAC,CAC/B,EACA,MAAM,aAAcC,EAAK,EAEzB,IAAI,SAAWD,GAAMA,EAAE,KAAK,CAAE,MAAO,WAAY,EAAG,GAAG,CAAC,EASpD,SAASE,GAAUC,EAAqB,CAC7C,IAAMC,EAAOD,GAAc,QAAQ,IAAI,yBAA2B,WAElE,OAAO,IAAIJ,EAAK,EACb,MAAM,IAAKD,EAAG,EAEd,IAAI,KAAMO,GAAY,CAAE,KAAAD,CAAK,CAAC,CAAC,EAE/B,IAAI,KAAMC,GAAY,CAAE,KAAAD,EAAM,KAAM,YAAa,CAAC,CAAC,CACxD,CC3BA,IAAME,GACJ,QAAQ,IAAI,OAAS,OACjB,KACA,OAAO,SAAS,QAAQ,IAAI,KAAM,EAAE,GAAK,KAKzCC,GAAa,QAAQ,IAAI,yBAA2B,SAEpDC,GAAMC,GAAUF,EAAU,EAEhCG,GACE,CACE,MAAOF,GAAI,MACX,KAAMF,EACR,EACCK,GAAS,CACR,QAAQ,IAAI,iCAAiCA,EAAK,IAAI,EAAE,CAC1D,CACF",
6
+ "names": ["createServerHTTP", "Http2ServerRequest2", "Http2ServerRequest", "Readable", "crypto", "RequestError", "message", "options", "toRequestError", "GlobalRequest", "Request", "input", "getRequestCache", "newHeadersFromIncoming", "incoming", "headerRecord", "rawHeaders", "i", "key", "value", "wrapBodyStream", "newRequestFromIncoming", "method", "url", "headers", "abortController", "init", "req", "controller", "reader", "done", "error", "requestCache", "incomingKey", "urlKey", "headersKey", "abortControllerKey", "getAbortController", "requestPrototype", "k", "newRequest", "defaultHostname", "incomingUrl", "url2", "e", "host", "scheme", "responseCache", "getResponseCache", "cacheKey", "GlobalResponse", "Response2", "_Response", "#body", "#init", "body", "cachedGlobalResponse", "cache", "status", "readWithoutBlocking", "readPromise", "writeFromReadableStreamDefaultReader", "writable", "currentReadPromise", "cancel", "flow", "handleStreamError", "onDrain", "writeFromReadableStream", "stream", "buildOutgoingHttpHeaders", "res", "cookies", "v", "X_ALREADY_SENT", "outgoingEnded", "handleRequestError", "handleFetchError", "handleResponseError", "outgoing", "err", "flushHeaders", "responseViaCache", "header", "isPromise", "responseViaResponseObject", "errRes", "resHeaderRecord", "values", "maxReadCount", "chunk", "resolve", "acc", "getRequestListener", "fetchCallback", "autoCleanupIncoming", "incomingEnded", "createAdaptorServer", "requestListener", "serve", "listeningListener", "server", "serverInfo", "compose", "middleware", "onError", "onNotFound", "context", "next", "index", "dispatch", "res", "isError", "handler", "err", "GET_MATCH_RESULT", "parseBody", "request", "options", "all", "dot", "contentType", "HonoRequest", "parseFormData", "formData", "convertFormDataToBodyData", "form", "value", "key", "handleParsingAllValues", "handleParsingNestedValues", "nestedForm", "keys", "key2", "index", "splitPath", "path", "paths", "splitRoutingPath", "routePath", "groups", "extractGroupsFromPath", "replaceGroupMarks", "match", "index", "mark", "i", "j", "patternCache", "getPattern", "label", "next", "cacheKey", "tryDecode", "str", "decoder", "tryDecodeURI", "getPath", "request", "url", "start", "charCode", "queryIndex", "getPathNoStrict", "request", "result", "getPath", "mergePath", "base", "sub", "rest", "checkOptionalParameter", "path", "segments", "results", "basePath", "segment", "optionalSegment", "v", "i", "a", "_decodeURI", "value", "tryDecode", "decodeURIComponent_", "_getQueryParam", "url", "key", "multiple", "encoded", "keyIndex2", "trailingKeyCode", "valueIndex", "endIndex", "keyIndex", "nextKeyIndex", "name", "getQueryParam", "getQueryParams", "tryDecodeURIComponent", "str", "tryDecode", "decodeURIComponent_", "HonoRequest", "#validatedData", "#matchResult", "request", "path", "matchResult", "key", "#getDecodedParam", "#getAllDecodedParams", "paramKey", "param", "#getParamValue", "decoded", "keys", "value", "getQueryParam", "getQueryParams", "name", "headerData", "options", "parseBody", "#cachedBody", "bodyCache", "raw", "cachedBody", "anyCachedKey", "body", "text", "target", "data", "GET_MATCH_RESULT", "route", "HtmlEscapedCallbackPhase", "raw", "value", "callbacks", "escapedString", "resolveCallback", "str", "phase", "preserveCallbacks", "context", "buffer", "callbacks", "resStr", "c", "res", "str2", "raw", "TEXT_PLAIN", "setDefaultContentType", "contentType", "headers", "Context", "#rawRequest", "#req", "#var", "#status", "#executionCtx", "#res", "#layout", "#renderer", "#notFoundHandler", "#preparedHeaders", "#matchResult", "#path", "req", "options", "HonoRequest", "_res", "k", "v", "cookies", "cookie", "args", "content", "layout", "renderer", "name", "value", "status", "key", "#newResponse", "data", "arg", "responseHeaders", "argHeaders", "v2", "text", "object", "html", "res", "html2", "resolveCallback", "HtmlEscapedCallbackPhase", "location", "locationString", "METHOD_NAME_ALL", "METHOD_NAME_ALL_LOWERCASE", "METHODS", "MESSAGE_MATCHER_IS_ALREADY_BUILT", "UnsupportedPathError", "COMPOSED_HANDLER", "notFoundHandler", "c", "errorHandler", "err", "res", "Hono", "_Hono", "#path", "options", "METHODS", "METHOD_NAME_ALL_LOWERCASE", "method", "args1", "args", "#addRoute", "handler", "path", "handlers", "p", "m", "arg1", "METHOD_NAME_ALL", "strict", "optionsWithoutStrict", "getPath", "getPathNoStrict", "#clone", "clone", "#notFoundHandler", "app", "subApp", "r", "next", "compose", "COMPOSED_HANDLER", "mergePath", "applicationHandler", "replaceRequest", "optionHandler", "request", "getOptions", "options2", "executionContext", "mergedPath", "pathPrefixLength", "url", "#handleError", "#dispatch", "executionCtx", "env", "matchResult", "Context", "resolved", "composed", "context", "rest", "input", "requestInit", "Env", "event", "emptyParam", "match", "method", "path", "matchers", "match2", "method2", "path2", "matcher", "METHOD_NAME_ALL", "staticMatch", "match3", "index", "LABEL_REG_EXP_STR", "ONLY_WILDCARD_REG_EXP_STR", "TAIL_WILDCARD_REG_EXP_STR", "PATH_ERROR", "regExpMetaChars", "compareKey", "a", "b", "Node", "_Node", "#index", "#varIndex", "#children", "tokens", "index", "paramMap", "context", "pathErrorCheckOnly", "token", "restTokens", "pattern", "node", "name", "regexpStr", "k", "strList", "c", "Trie", "#context", "#root", "Node", "path", "index", "pathErrorCheckOnly", "paramAssoc", "groups", "i", "replaced", "m", "mark", "tokens", "j", "regexp", "captureIndex", "indexReplacementMap", "paramReplacementMap", "_", "handlerIndex", "paramIndex", "nullMatcher", "wildcardRegExpCache", "buildWildcardRegExp", "path", "_", "metaChar", "clearWildcardRegExpCache", "buildMatcherFromPreprocessedRoutes", "routes", "trie", "Trie", "handlerData", "routesWithStaticPathFlag", "route", "isStaticA", "pathA", "isStaticB", "pathB", "staticMap", "i", "j", "len", "pathErrorCheckOnly", "handlers", "h", "emptyParam", "paramAssoc", "e", "PATH_ERROR", "UnsupportedPathError", "paramCount", "paramIndexMap", "key", "value", "regexp", "indexReplacementMap", "paramReplacementMap", "len2", "map", "keys", "k", "len3", "handlerMap", "findMiddleware", "middleware", "a", "b", "RegExpRouter", "#middleware", "#routes", "METHOD_NAME_ALL", "method", "handler", "MESSAGE_MATCHER_IS_ALREADY_BUILT", "p", "re", "m", "paths", "checkOptionalParameter", "path2", "match", "matchers", "#buildMatcher", "hasOwnRoute", "ownRoute", "SmartRouter", "#routers", "#routes", "init", "method", "path", "handler", "MESSAGE_MATCHER_IS_ALREADY_BUILT", "routers", "routes", "len", "i", "res", "router", "i2", "len2", "e", "UnsupportedPathError", "emptyParams", "Node", "_Node", "#methods", "#children", "#patterns", "#order", "#params", "method", "handler", "children", "m", "path", "curNode", "parts", "splitRoutingPath", "possibleKeys", "len", "p", "nextP", "pattern", "getPattern", "key", "v", "i", "a", "#getHandlerSets", "node", "nodeParams", "params", "handlerSets", "handlerSet", "METHOD_NAME_ALL", "processedSet", "i2", "len2", "processed", "curNodes", "splitPath", "curNodesQueue", "part", "isLast", "tempNodes", "j", "nextNode", "k", "len3", "astNode", "name", "matcher", "child", "restPathString", "componentCount", "b", "TrieRouter", "#node", "Node", "method", "path", "handler", "results", "checkOptionalParameter", "i", "len", "Hono", "options", "SmartRouter", "RegExpRouter", "TrieRouter", "getMimeType", "filename", "mimes", "baseMimes", "regexp", "match", "mimeType", "_baseMimes", "baseMimes", "createReadStream", "statSync", "existsSync", "join", "versions", "Readable", "COMPRESSIBLE_CONTENT_TYPE_REGEX", "ENCODINGS", "ENCODINGS_ORDERED_KEYS", "pr54206Applied", "major", "minor", "component", "useReadableToWeb", "createStreamBody", "stream", "controller", "chunk", "err", "getStats", "path", "stats", "serveStatic", "options", "root", "optionPath", "c", "next", "filename", "indexFile", "mimeType", "getMimeType", "acceptEncodingSet", "encoding", "precompressedStats", "result", "size", "range", "parts", "start", "end", "chunksize", "spawn", "isTaskId", "s", "isLearningId", "CliError", "message", "exitCode", "stderr", "CliTimeoutError", "CLI_TIMEOUT_MS", "CLI_PATH", "CLI_CWD", "callCli", "args", "resolve", "reject", "proc", "spawn", "timeout", "CliTimeoutError", "stdout", "stderr", "chunk", "err", "CliError", "code", "message", "result", "dual", "arity", "body", "args", "self", "serializeCause", "cause", "isAnyTaggedError", "value", "TaggedError", "tag", "Base", "message", "indented", "matchError", "err$1", "handlers", "handler", "err", "matchErrorPartial", "fallback", "UnhandledException", "TaggedError", "args", "message", "Panic", "ResultDeserializationError", "panic", "message", "cause", "Panic", "tryOrPanic", "fn", "tryOrPanicAsync", "Ok", "value", "_fn", "handlers", "_message", "_fallback", "Err", "error", "fallback", "ok", "isOk", "result", "err", "isError", "tryFn", "options", "config", "execute", "UnhandledException", "originalCause", "catchHandlerError", "times", "retry", "tryPromise", "getDelay", "retryAttempt", "sleep", "ms", "resolve", "shouldRetryFn", "attempt", "map", "dual", "mapError", "andThen", "andThenAsync", "match", "tap", "tapAsync", "unwrap", "assertIsResult", "unwrapOr", "gen", "body", "thisArg", "iterator", "asyncIter", "state", "state$1", "syncIter", "resultAwait", "promise", "isSerializedResult", "obj", "serialize", "deserialize", "ResultDeserializationError", "hydrate", "partition", "results", "oks", "errs", "flatten", "Result", "DecodeError", "TaggedError", "isObject", "v", "isString", "isBoolean", "isNumber", "isPriority", "isDepth", "decodeLearning", "Result", "id", "taskId", "content", "sourceTaskId", "createdAt", "isLearningId", "isTaskId", "decodeLearnings", "learnings", "i", "result", "decodeTask", "parentId", "description", "priority", "completed", "completedAt", "startedAt", "updatedAt", "commitSha", "depth", "blockedBy", "blocks", "bookmark", "startCommit", "effectivelyBlocked", "decodedBlockedBy", "bid", "decodedBlocks", "task", "decodeTasks", "tasks", "decodeTaskContext", "own", "parent", "milestone", "ctx", "decodeInheritedLearnings", "ownResult", "parentResult", "milestoneResult", "decodeTaskWithContext", "taskResult", "context", "ctxResult", "lrnResult", "decodeTaskWithContextOrNull", "decodeUpdateTaskRequest", "req", "decodeCompleteTaskRequest", "handleCliError", "c", "err", "CliError", "message", "tasks", "Hono", "parentId", "ready", "completed", "args", "isTaskId", "result", "decodeTasks", "callCli", "milestoneId", "decodeTaskWithContextOrNull", "id", "decodeTaskWithContext", "body", "decodeUpdateTaskRequest", "decodeTask", "text", "decodeCompleteTaskRequest", "learning", "taskId", "decodeLearnings", "api", "Hono", "c", "tasks", "createApp", "staticRoot", "root", "serveStatic", "PORT", "staticRoot", "app", "createApp", "serve", "info"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dmmulroy/overseer",
3
- "version": "0.5.0",
3
+ "version": "0.5.2",
4
4
  "description": "Codemode MCP server for agent task management",
5
5
  "type": "module",
6
6
  "bin": {
@@ -15,12 +15,12 @@
15
15
  "postinstall": "node ./bin/postinstall.mjs"
16
16
  },
17
17
  "optionalDependencies": {
18
- "@dmmulroy/overseer-darwin-arm64": "0.4.0",
19
- "@dmmulroy/overseer-darwin-x64": "0.4.0",
20
- "@dmmulroy/overseer-linux-arm64": "0.4.0",
21
- "@dmmulroy/overseer-linux-x64": "0.4.0",
22
- "@dmmulroy/overseer-linux-arm64-musl": "0.4.0",
23
- "@dmmulroy/overseer-linux-x64-musl": "0.4.0"
18
+ "@dmmulroy/overseer-darwin-arm64": "0.5.2",
19
+ "@dmmulroy/overseer-darwin-x64": "0.5.2",
20
+ "@dmmulroy/overseer-linux-arm64": "0.5.2",
21
+ "@dmmulroy/overseer-linux-x64": "0.5.2",
22
+ "@dmmulroy/overseer-linux-arm64-musl": "0.5.2",
23
+ "@dmmulroy/overseer-linux-x64-musl": "0.5.2"
24
24
  },
25
25
  "dependencies": {
26
26
  "@hono/node-server": "^1.19.9",