@lengkapp/edge 0.0.36 → 0.0.37

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.
@@ -1,235 +0,0 @@
1
- /*!
2
- * @lengkapp/edge v0.0.36
3
- * MIT License
4
- *
5
- * LengkApp Edge License
6
- *
7
- * Copyright (c) LengkApp — Yasir Haris
8
- * Contact: yh@lengk.app / yasir.haris@gmail.com
9
- *
10
- * Permission is granted to any person obtaining a copy of this software
11
- * and associated documentation files (the "Software") to use, copy, and
12
- * distribute the Software free of charge, for any purpose, including
13
- * commercial use, subject to the following conditions:
14
- *
15
- * 1. The Software may not be modified, adapted, or altered in any way
16
- * without prior written permission from the copyright holder.
17
- *
18
- * 2. Redistribution of the Software, in whole or in part, must retain
19
- * this LICENSE file unmodified and include the copyright notice above.
20
- *
21
- * 3. This permission notice does not grant any right to use the
22
- * LengkApp name, brand, or trademarks without separate written
23
- * permission.
24
- *
25
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
26
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
28
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHOR OR COPYRIGHT HOLDER BE
29
- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
30
- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
31
- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
32
- */
33
- // edge-server.d.ts
34
-
35
- /* ------------------------------------------------------------------ *
36
- * JSX runtime *
37
- * ------------------------------------------------------------------ */
38
-
39
- /**
40
- * Runtime value is `Symbol('Fragment')`. The function signature is a
41
- * type-level shim so `<></>` works with the automatic JSX runtime.
42
- * Never called directly — `jsx(Fragment, …)` passes it through and
43
- * `renderToString` compares by identity.
44
- */
45
- export const Fragment: (props: { children?: any }) => JSXNode;
46
-
47
- export interface JSXNode {
48
- type: string | symbol | ((props: any) => any);
49
- props: Record<string, any>;
50
- children: any[];
51
- __isJSX: true;
52
- }
53
-
54
- export function jsx(
55
- type: JSXNode['type'],
56
- props: Record<string, any> | null,
57
- ...children: any[]
58
- ): JSXNode;
59
-
60
- /**
61
- * Renders a JSX tree to an HTML string. Async because components may be
62
- * `async`. Accepts `null`/boolean children, Promises, and arrays.
63
- *
64
- * The optional `ctx` is normally supplied by `Context.html`/`Context.page`;
65
- * user code never needs to pass it.
66
- */
67
- export function renderToString(node: any, ctx?: Context): Promise<string>;
68
-
69
- /* ------------------------------------------------------------------ *
70
- * Ambient context *
71
- * ------------------------------------------------------------------ */
72
-
73
- /**
74
- * Returns the Context of the request whose render is currently executing.
75
- *
76
- * MUST be called synchronously at the top of a component — before any
77
- * `await`. After an `await`, use the captured local reference; the
78
- * ambient slot is no longer guaranteed to belong to your request.
79
- *
80
- * Throws if called outside an active render (module top-level, scheduled
81
- * handler, `waitUntil` callback, or after an `await`).
82
- */
83
- export function useCtx(): Context;
84
-
85
- /* ------------------------------------------------------------------ *
86
- * Context *
87
- * ------------------------------------------------------------------ */
88
-
89
- export interface CookieOptions {
90
- path?: string;
91
- domain?: string;
92
- maxAge?: number;
93
- expires?: Date;
94
- secure?: boolean;
95
- httpOnly?: boolean;
96
- sameSite?: 'Strict' | 'Lax' | 'None' | string;
97
- }
98
-
99
- export interface CorsOptions {
100
- origin?: string | string[];
101
- methods?: string;
102
- headers?: string;
103
- }
104
-
105
- export interface CacheOptions {
106
- /** TTL in seconds. Default: 3600 */
107
- ttl?: number;
108
- /** stale-while-revalidate in seconds. Default: 0 */
109
- staleWhileRevalidate?: number;
110
- }
111
-
112
- export interface RouteOptions {
113
- cors?: boolean | CorsOptions;
114
- cache?: boolean | CacheOptions;
115
- compress?: boolean;
116
- log?: boolean;
117
- validate?: (ctx: Context) => boolean | Promise<boolean>;
118
- }
119
-
120
- export class Context {
121
- constructor(
122
- request: Request,
123
- env: Record<string, any>,
124
- executionCtx: ExecutionContext,
125
- params?: Record<string, string>,
126
- parsedUrl?: URL | null
127
- );
128
-
129
- req: Request;
130
- env: Record<string, any>;
131
- executionCtx: ExecutionContext;
132
- params: Record<string, string>;
133
- status: number;
134
- headers: Headers;
135
- url: URL;
136
-
137
- getCookie(name: string): string | null;
138
- readonly query: URLSearchParams;
139
- setCookie(name: string, value: string, options?: CookieOptions): void;
140
- deleteCookie(name: string, options?: CookieOptions): void;
141
-
142
- text(data: string, status?: number, headers?: Record<string, string>): Response;
143
- json(data: any, status?: number, headers?: Record<string, string>): Response;
144
-
145
- /** Async — JSX trees may contain async components. */
146
- html(
147
- data: string | JSXNode | JSXNode[] | null | undefined,
148
- status?: number,
149
- headers?: Record<string, string>
150
- ): Promise<Response>;
151
-
152
- /** Async — JSX trees may contain async components. */
153
- page(
154
- data: string | JSXNode | JSXNode[] | null | undefined,
155
- status?: number,
156
- headers?: Record<string, string>
157
- ): Promise<Response>;
158
-
159
- redirect(location: string, status?: number): Response;
160
- }
161
-
162
- /* ------------------------------------------------------------------ *
163
- * Edge router *
164
- * ------------------------------------------------------------------ */
165
-
166
- export type RouteHandler = (ctx: Context) => any | Promise<any>;
167
-
168
- export type ScheduledHandler = (
169
- event: ScheduledEvent,
170
- env: Record<string, any>,
171
- ctx: ExecutionContext
172
- ) => void | Promise<void>;
173
-
174
- export interface SecurityOptions {
175
- logSecurityEvents?: boolean;
176
- extraHeaders?: Record<string, string> | null;
177
- trustedProxies?: string[] | null;
178
- }
179
-
180
- export interface EdgeDefaults {
181
- cors: CorsOptions & { methods: string };
182
- }
183
-
184
- export class Edge {
185
- constructor();
186
-
187
- readonly staticRoutes: Map<string, Map<string, { handler: RouteHandler; options: RouteOptions }>>;
188
- readonly dynamicTries: Record<string, any>;
189
- defaults: EdgeDefaults;
190
- scheduledHandler: ScheduledHandler | null;
191
- security: SecurityOptions;
192
-
193
- get(path: string, options: RouteOptions | boolean, handler: RouteHandler): void;
194
- get(path: string, handler: RouteHandler): void;
195
- post(path: string, options: RouteOptions | boolean, handler: RouteHandler): void;
196
- post(path: string, handler: RouteHandler): void;
197
- put(path: string, options: RouteOptions | boolean, handler: RouteHandler): void;
198
- put(path: string, handler: RouteHandler): void;
199
- delete(path: string, options: RouteOptions | boolean, handler: RouteHandler): void;
200
- delete(path: string, handler: RouteHandler): void;
201
- patch(path: string, options: RouteOptions | boolean, handler: RouteHandler): void;
202
- patch(path: string, handler: RouteHandler): void;
203
- options(path: string, options: RouteOptions | boolean, handler: RouteHandler): void;
204
- options(path: string, handler: RouteHandler): void;
205
- head(path: string, options: RouteOptions | boolean, handler: RouteHandler): void;
206
- head(path: string, handler: RouteHandler): void;
207
-
208
- scheduled(handler: ScheduledHandler): void;
209
-
210
- fetch(
211
- request: Request,
212
- env: Record<string, any>,
213
- executionCtx: ExecutionContext
214
- ): Promise<Response>;
215
- }
216
-
217
- /* ---------------- JSX typing for this runtime ---------------- */
218
- type ComponentReturn =
219
- | JSXNode
220
- | string
221
- | number
222
- | boolean
223
- | null
224
- | undefined
225
- | ComponentReturn[]
226
- | Promise<ComponentReturn>;
227
-
228
- declare global {
229
- namespace JSX {
230
- type Element = any;
231
- type ElementType = string | symbol | ((props: any) => ComponentReturn);
232
- interface IntrinsicElements { [elemName: string]: any; }
233
- interface ElementChildrenAttribute { children: {}; }
234
- }
235
- }
@@ -1,33 +0,0 @@
1
- /*!
2
- * @lengkapp/edge v0.0.36
3
- * MIT License
4
- *
5
- * LengkApp Edge License
6
- *
7
- * Copyright (c) LengkApp — Yasir Haris
8
- * Contact: yh@lengk.app / yasir.haris@gmail.com
9
- *
10
- * Permission is granted to any person obtaining a copy of this software
11
- * and associated documentation files (the "Software") to use, copy, and
12
- * distribute the Software free of charge, for any purpose, including
13
- * commercial use, subject to the following conditions:
14
- *
15
- * 1. The Software may not be modified, adapted, or altered in any way
16
- * without prior written permission from the copyright holder.
17
- *
18
- * 2. Redistribution of the Software, in whole or in part, must retain
19
- * this LICENSE file unmodified and include the copyright notice above.
20
- *
21
- * 3. This permission notice does not grant any right to use the
22
- * LengkApp name, brand, or trademarks without separate written
23
- * permission.
24
- *
25
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
26
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
28
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHOR OR COPYRIGHT HOLDER BE
29
- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
30
- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
31
- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
32
- */
33
- var t=Object.defineProperty,e=Object.getOwnPropertyDescriptor,n=Object.getOwnPropertyNames,o=Object.prototype.hasOwnProperty,r=(e,n)=>{for(var o in n)t(e,o,{get:n[o],enumerable:!0})},i=(r,i,s,c)=>{if(i&&"object"==typeof i||"function"==typeof i)for(let a of n(i))o.call(r,a)||a===s||t(r,a,{get:()=>i[a],enumerable:!(c=e(i,a))||c.enumerable});return r},s=e=>i(t({},"__esModule",{value:!0}),e),c={};function a(t){const e=[],n=t.length;let o=1;for(let r=1;r<=n;r++)r!==n&&47!==t.charCodeAt(r)||(r>o&&e.push(t.slice(o,r)),o=r+1);return e}function l(t){const e=t.length;return e>1&&47===t.charCodeAt(e-1)?t.slice(0,-1):t}r(c,{Context:()=>P,Edge:()=>Edge,Fragment:()=>Fragment,jsx:()=>jsx,renderToString:()=>renderToString,useCtx:()=>useCtx}),module.exports=s(c);var u=new Set(["__proto__","constructor","prototype"]);function f(t){return"string"==typeof t&&!u.has(t)}function h(t){const e=t.length;let n=0;for(;n<e;){const e=t.charCodeAt(n);if(38===e||60===e||62===e||34===e||39===e)break;n++}if(n===e)return t;let o=t.slice(0,n),r=n;for(;n<e;n++){const e=t.charCodeAt(n);let i;if(38===e)i="&amp;";else if(60===e)i="&lt;";else if(62===e)i="&gt;";else if(34===e)i="&quot;";else{if(39!==e)continue;i="&#039;"}n>r&&(o+=t.slice(r,n)),o+=i,r=n+1}return r<e&&(o+=t.slice(r)),o}function p(t){return t>=65&&t<=90||t>=97&&t<=122}function d(t){return t>=48&&t<=57}function y(t){const e=t.length;if(0===e||!p(t.charCodeAt(0)))return!1;for(let n=1;n<e;n++){const e=t.charCodeAt(n);if(!p(e)&&!d(e)&&45!==e)return!1}return!0}function g(t){const e=t.length;if(0===e)return!1;const n=t.charCodeAt(0);if(!p(n)&&95!==n&&58!==n)return!1;for(let n=1;n<e;n++){const e=t.charCodeAt(n);if(!p(e)&&!d(e)&&95!==e&&58!==e&&46!==e&&45!==e)return!1}return!0}function w(t){const e=t.charCodeAt(0),n=t.charCodeAt(1);return!(111!==e&&79!==e||110!==n&&78!==n)}var Fragment=Symbol("Fragment");function jsx(t,e,...n){return{type:t,props:e||{},children:n,__isJSX:!0}}var m=new Set(["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"]),C=new Set(["allowfullscreen","async","autofocus","autoplay","checked","controls","default","defer","disabled","formnovalidate","hidden","inert","ismap","itemscope","loop","multiple","muted","nomodule","novalidate","open","playsinline","readonly","required","reversed","selected"]),b=new Set(["animation-iteration-count","border-image-outset","border-image-slice","border-image-width","box-flex","box-flex-group","box-ordinal-group","column-count","columns","flex","flex-grow","flex-positive","flex-shrink","flex-negative","flex-order","grid-row","grid-row-end","grid-row-span","grid-row-start","grid-column","grid-column-end","grid-column-span","grid-column-start","font-weight","line-clamp","line-height","opacity","order","orphans","tab-size","widows","z-index","zoom","fill-opacity","flood-opacity","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-miterlimit","stroke-opacity","stroke-width"]),T=new Map,O=2e3;function x(t){const e=T.get(t);if(void 0!==e)return e;const n=t.replace(/([A-Z])/g,"-$1").toLowerCase().replace(/^-/,"");return T.size>=O&&T.clear(),T.set(t,n),n}function S(t){if(!t||"object"!=typeof t)return"";let e="";for(const n in t){if(!Object.prototype.hasOwnProperty.call(t,n))continue;const o=x(n);let r=t[n];"number"!=typeof r||b.has(o)||(r+="px"),e&&(e+=";"),e+=o+":"+r}return e}var A=new Set(["href","src","xlink:href","action","formaction"]),v=[];function useCtx(){const t=v[v.length-1];if(!t)throw new Error("useCtx() must be called synchronously at the top of a component (before any await). It is not available after an await, nor outside a render.");return t}async function renderToString(t,e){if(void 0===e&&(e=v[v.length-1]),null==t||"boolean"==typeof t)return"";const n=typeof t;if("string"===n)return h(t);if("number"===n)return h(String(t));if("object"===n&&"function"==typeof t.then)return renderToString(await t,e);if(Array.isArray(t)){let n="";for(let o=0;o<t.length;o++)n+=await renderToString(t[o],e);return n}if(!t.__isJSX)return h(String(t));const{type:o,props:r,children:i}=t;if(o===Fragment){let t="";for(let n=0;n<i.length;n++)t+=await renderToString(i[n],e);return t}if("symbol"==typeof o)return"";if("function"==typeof o){let t;if(e){v.push(e);try{t=o({...r,children:i})}finally{v.pop()}}else t=o({...r,children:i});return renderToString(await t,e)}if("string"!=typeof o||!y(o))return"";const s=m.has(o);let c="";for(const t in r){if(!Object.prototype.hasOwnProperty.call(r,t))continue;if("children"===t||"key"===t||"ref"===t)continue;const e=r[t];if(null==e||!1===e)continue;if("dangerouslySetInnerHTML"===t)continue;let n=t;if("className"===t||"class"===t?n="class":"htmlFor"!==t&&"for"!==t||(n="for"),f(n)&&!w(n)&&g(n)){if(A.has(n)){const t=String(e).replace(/[\u0000-\u0020]/g,"").toLowerCase();if(t.startsWith("javascript:")||t.startsWith("vbscript:")||t.startsWith("data:text/html"))continue}if(C.has(n))!0===e&&(c+=" "+n);else if(!0!==e){if("style"===n&&"object"==typeof e){const t=S(e);t&&(c+=' style="'+h(t)+'"');continue}c+=" "+n+'="'+h(String(e))+'"'}else c+=" "+n+'="true"'}}let a="";const l=r.dangerouslySetInnerHTML;if(l&&null!=l.__html)a=l.__html;else for(let t=0;t<i.length;t++)a+=await renderToString(i[t],e);return s?"<"+o+c+"/>":"<"+o+c+">"+a+"</"+o+">"}var E=Object.freeze([["X-Content-Type-Options","nosniff"],["X-Frame-Options","DENY"],["Referrer-Policy","strict-origin-when-cross-origin"],["Permissions-Policy","geolocation=(), microphone=(), camera=()"]]),j=Object.freeze(Object.create(null)),P=class{constructor(t,e,n,o={},r=null){this.req=t,this.env=e,this.executionCtx=n,this.params=o,this.status=200,this.headers=new Headers(E),this.t=null,this.url=r||new URL(t.url)}o(){if(null!==this.t)return this.t;const t=this.req.headers.get("Cookie");if(!t)return this.t=j,j;const e=Object.create(null);let n=0;const o=t.length;for(;n<o;){let r=t.indexOf(";",n);-1===r&&(r=o);let i=n,s=r;for(;i<s&&32===t.charCodeAt(i);)i++;for(;s>i&&32===t.charCodeAt(s-1);)s--;if(s>i){const n=t.indexOf("=",i);if(n>i&&n<s)try{const o=decodeURIComponent(t.slice(i,n));f(o)&&(e[o]=decodeURIComponent(t.slice(n+1,s)))}catch{}}n=r+1}return this.t=e,e}getCookie(t){const e=this.o()[t];return void 0===e?null:e}get query(){return this.url.searchParams}setCookie(t,e,n={}){if("string"!=typeof t||!f(t)||/[\r\n;=]/.test(t))return;let o=encodeURIComponent(t)+"="+encodeURIComponent(e);n.path&&(o+="; Path="+n.path),n.domain&&(o+="; Domain="+n.domain),void 0!==n.maxAge&&(o+="; Max-Age="+n.maxAge),n.expires&&(o+="; Expires="+n.expires.toUTCString()),n.secure&&(o+="; Secure"),n.httpOnly&&(o+="; HttpOnly"),n.sameSite&&(o+="; SameSite="+n.sameSite),this.headers.append("Set-Cookie",o)}deleteCookie(t,e={}){this.setCookie(t,"",{...e,maxAge:0,expires:new Date(0)})}i(t){if(!t)return this.headers;const e=Object.keys(t);if(0===e.length)return this.headers;const n=new Headers(this.headers);for(let o=0;o<e.length;o++)n.set(e[o],t[e[o]]);return n}text(t,e=this.status,n={}){const o=this.i(n);return o.has("Content-Type")||o.set("Content-Type","text/plain; charset=utf-8"),new Response(t,{status:e,headers:o})}json(t,e=this.status,n={}){const o=this.i(n);return o.has("Content-Type")||o.set("Content-Type","application/json; charset=utf-8"),new Response(JSON.stringify(t),{status:e,headers:o})}async html(t,e=this.status,n={}){const o=this.i(n);let r;return o.has("Content-Type")||o.set("Content-Type","text/html; charset=utf-8"),r="string"==typeof t?t:t&&t.__isJSX||Array.isArray(t)?await renderToString(t,this):null==t?"":String(t),new Response(r,{status:e,headers:o})}async page(t,e=this.status,n={}){const o=this.i(n);let r;return o.has("Content-Type")||o.set("Content-Type","text/html; charset=utf-8"),r="string"==typeof t?t:t&&t.__isJSX||Array.isArray(t)?await renderToString(t,this):null==t?"":String(t),/^\s*<!doctype\s/i.test(r)||(r="<!DOCTYPE html>"+r),new Response(r,{status:e,headers:o})}redirect(t,e=302){const n=new Headers(this.headers);return n.set("Location",String(t)),n.delete("Content-Type"),new Response(null,{status:e,headers:n})}},_=class{constructor(){this.children=null,this.paramChild=null,this.handler=null}},k=class{constructor(){this.root=new _}add(t,e,n){let o=this.root;const r=[];for(let e=0;e<t.length;e++){const n=t[e];if(58===n.charCodeAt(0)){const t=n.slice(1);r.push(f(t)?t:"_p"+e),o.paramChild||(o.paramChild=new _),o=o.paramChild}else{o.children||(o.children=new Map);let t=o.children.get(n);t||(t=new _,o.children.set(n,t)),o=t}}o.handler={handler:e,options:n,paramNames:r}}match(t){const e=[],n=this.l(this.root,t,0,e);if(!n)return null;const{handler:o,options:r,paramNames:i}=n,s=Object.create(null);for(let t=0;t<i.length;t++)s[i[t]]=e[t];return{handler:o,options:r,params:s}}l(t,e,n,o){if(n===e.length)return t.handler;const r=e[n],i=t.children;if(i){const t=i.get(r);if(t){const r=this.l(t,e,n+1,o);if(r)return r}}const s=t.paramChild;if(s){o.push(r);const t=this.l(s,e,n+1,o);if(t)return t;o.pop()}return null}},H=["GET","POST","PUT","DELETE","PATCH","OPTIONS","HEAD"],R=["text/","application/json","application/xml","application/javascript","application/xhtml","application/ld+json","application/manifest+json","image/svg"];function D(t){if(!t)return!0;const e=t.toLowerCase();for(let t=0;t<R.length;t++)if(e.startsWith(R[t]))return!0;return!1}var I=new Map,L=0;function N(t,e,n){const o=t+"|"+(e||"")+"|"+(n||""),r=Date.now(),i=I.get(o);if(i&&r-i<6e4)return!1;if(I.set(o,r),r-L>3e4){L=r;for(const[t,e]of I)r-e>6e4&&I.delete(t)}return!0}var Edge=class{constructor(){this.staticRoutes=new Map;for(let t=0;t<H.length;t++)this.staticRoutes.set(H[t],new Map);this.dynamicTries={};for(let t=0;t<H.length;t++)this.dynamicTries[H[t]]=new k;this.defaults={cors:{origin:"*",methods:"GET, POST, PUT, DELETE, PATCH, OPTIONS, HEAD"}},this.scheduledHandler=null,this.security={logSecurityEvents:!0,extraHeaders:null,trustedProxies:null}}u(t,e,n,o){if("boolean"==typeof n?n={}:"function"==typeof n&&(o=n,n={}),"function"!=typeof o)throw new Error("Handler for "+t+" "+e+" must be a function");const r={...this.defaults,...n||{}};-1===e.indexOf(":")?this.staticRoutes.get(t).set(l(e),{handler:o,options:r}):this.dynamicTries[t].add(a(e),o,r)}get(t,e,n){this.u("GET",t,e,n)}post(t,e,n){this.u("POST",t,e,n)}put(t,e,n){this.u("PUT",t,e,n)}delete(t,e,n){this.u("DELETE",t,e,n)}patch(t,e,n){this.u("PATCH",t,e,n)}options(t,e,n){this.u("OPTIONS",t,e,n)}head(t,e,n){this.u("HEAD",t,e,n)}scheduled(t){this.scheduledHandler=t}h(t,e,n){if(this.security.logSecurityEvents)try{const o=t.req.headers.get("CF-Connecting-IP")||"",r=t.url?t.url.pathname:"";if(!N(e,o,r))return;console.log(JSON.stringify({ts:(new Date).toISOString(),kind:"security",event:e,detail:"string"==typeof n?n:void 0,ip:o||void 0,method:t.req.method,path:r,ua:t.req.headers.get("User-Agent")||void 0}))}catch{}}p(t,e){if(!e)return;const n="object"==typeof e?e:this.defaults.cors,o=t.req.headers.get("Origin"),r=n.origin;"*"===r?t.headers.set("Access-Control-Allow-Origin","*"):Array.isArray(r)?o&&-1!==r.indexOf(o)&&(t.headers.set("Access-Control-Allow-Origin",o),t.headers.set("Vary","Origin"),t.headers.set("Access-Control-Allow-Credentials","true")):"string"==typeof r&&o===r&&(t.headers.set("Access-Control-Allow-Origin",o),t.headers.set("Vary","Origin"),t.headers.set("Access-Control-Allow-Credentials","true")),t.headers.set("Access-Control-Allow-Methods",n.methods||"GET, POST, PUT, DELETE, PATCH, OPTIONS, HEAD"),t.headers.set("Access-Control-Allow-Headers",n.headers||"Content-Type, Authorization, X-CSRF-Token"),t.headers.set("Access-Control-Max-Age","86400")}m(t,e){e&&console.log(t.req.method+" "+t.req.url+" - "+t.status)}C(t,e){if(!D(e.headers.get("Content-Type")))return e;const n=e.headers.get("Content-Length");if(null!==n&&+n<1024)return e;const o=t.headers.get("Accept-Encoding")||"";let r=null;if(-1!==o.indexOf("gzip")?r="gzip":-1!==o.indexOf("deflate")&&(r="deflate"),!r||!e.body)return e;const i=e.body.pipeThrough(new CompressionStream(r)),s=new Headers(e.headers);return s.set("Content-Encoding",r),s.set("Vary","Accept-Encoding"),s.delete("Content-Length"),new Response(i,{status:e.status,statusText:e.statusText,headers:s})}async T(t,e){return!e||"function"!=typeof e||!!await e(t)}async O(t){return await caches.default.match(t)||null}async S(t,e,n){if(!n)return;const o=!0===n?{}:n,r=o.ttl??3600,i=o.staleWhileRevalidate??0,s=new Headers(e.headers);s.set("Cache-Control","max-age="+r+(i>0?", stale-while-revalidate="+i:"")),s.delete("Set-Cookie"),await caches.default.put(t,new Response(e.body,{status:e.status,statusText:e.statusText,headers:s}))}async fetch(t,e,n){const o=new URL(t.url),r=l(o.pathname),i=t.method,s=this.staticRoutes.get(i);if(s){const i=s.get(r);if(i)return this.A(i.handler,i.options,t,e,n,Object.create(null),o)}const c=this.dynamicTries[i];if(c){const i=c.match(a(r));if(i)return this.A(i.handler,i.options,t,e,n,i.params,o)}return new Response("Not Found",{status:404})}async A(t,e,n,o,r,i,s){const c=new P(n,o,r,i,s),a=this.security.extraHeaders;if(a)for(const t in a)Object.prototype.hasOwnProperty.call(a,t)&&c.headers.set(t,a[t]);let l,u=!1;try{u=await this.T(c,e.validate)}catch(t){this.h(c,"validation_error",t&&t.message),u=!1}if(!u)return c.text("Validation failed",400);if(e.cache&&"GET"===n.method){const t=await this.O(n);if(t)return this.p(c,e.cors),this.m(c,e.log),t}this.p(c,e.cors);try{const e=await t(c);l=e instanceof Response?e:e&&e.__isJSX?await c.html(e):c.text("OK")}catch(t){this.h(c,"handler_error",t&&t.message),l=c.text("Internal Server Error",500)}return e.cache&&"GET"===n.method&&200===l.status&&c.executionCtx.waitUntil(this.S(n,l.clone(),e.cache)),e.compress&&(l=this.C(n,l)),this.m(c,e.log),l}};