@adonix.org/cloud-spark 2.0.1 → 2.0.3
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/README.md +10 -13
- package/dist/cache.d.ts +58 -0
- package/dist/cache.js +2 -2
- package/dist/cache.js.map +1 -1
- package/dist/cors.d.ts +106 -0
- package/dist/cors.js +1 -1
- package/dist/cors.js.map +1 -1
- package/dist/index.d.ts +11 -504
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/middleware-CfKw8AlN.d.ts +106 -0
- package/dist/sessions.d.ts +207 -0
- package/dist/websocket.d.ts +29 -0
- package/dist/websocket.js +1 -1
- package/dist/websocket.js.map +1 -1
- package/package.json +10 -10
package/README.md
CHANGED
|
@@ -296,7 +296,8 @@ Register the built-in CORS middleware as follows:
|
|
|
296
296
|
:page_facing_up: index.ts
|
|
297
297
|
|
|
298
298
|
```ts
|
|
299
|
-
import { BasicWorker
|
|
299
|
+
import { BasicWorker } from "@adonix.org/cloud-spark";
|
|
300
|
+
import { cors } from "@adonix.org/cloud-spark/cors";
|
|
300
301
|
|
|
301
302
|
class MyWorker extends BasicWorker {
|
|
302
303
|
/**
|
|
@@ -346,7 +347,8 @@ Register the built-in cache middleware as follows:
|
|
|
346
347
|
:page_facing_up: index.ts
|
|
347
348
|
|
|
348
349
|
```ts
|
|
349
|
-
import { BasicWorker,
|
|
350
|
+
import { BasicWorker, CacheControl, JsonResponse, Time } from "@adonix.org/cloud-spark";
|
|
351
|
+
import { cache } from "@adonix.org/cloud-spark/cache";
|
|
350
352
|
|
|
351
353
|
class MyWorker extends BasicWorker {
|
|
352
354
|
/**
|
|
@@ -425,7 +427,8 @@ Register the built-in websocket middleware as follows:
|
|
|
425
427
|
:page_facing_up: index.ts
|
|
426
428
|
|
|
427
429
|
```ts
|
|
428
|
-
import { GET, PathParams, RouteWorker
|
|
430
|
+
import { GET, PathParams, RouteWorker } from "@adonix.org/cloud-spark";
|
|
431
|
+
import { websocket } from "@adonix.org/cloud-spark/websocket";
|
|
429
432
|
|
|
430
433
|
class ChatWorker extends RouteWorker {
|
|
431
434
|
/**
|
|
@@ -459,7 +462,7 @@ class ChatWorker extends RouteWorker {
|
|
|
459
462
|
|
|
460
463
|
/**
|
|
461
464
|
* The request has already been validated by the
|
|
462
|
-
* WebSocket middleware, so dispatch the WebSocket
|
|
465
|
+
* WebSocket middleware, so dispatch the WebSocket
|
|
463
466
|
* upgrade request to the Durable Object.
|
|
464
467
|
*/
|
|
465
468
|
return stub.fetch(this.request);
|
|
@@ -654,17 +657,11 @@ The following is a simple chat with hibernation example:
|
|
|
654
657
|
:page_facing_up: index.ts
|
|
655
658
|
|
|
656
659
|
```ts
|
|
660
|
+
import { GET, PathParams, RouteWorker, WebSocketUpgrade } from "@adonix.org/cloud-spark";
|
|
661
|
+
import { WebSocketSessions } from "@adonix.org/cloud-spark/sessions";
|
|
662
|
+
import { websocket } from "@adonix.org/cloud-spark/websocket";
|
|
657
663
|
import { DurableObject } from "cloudflare:workers";
|
|
658
664
|
|
|
659
|
-
import {
|
|
660
|
-
GET,
|
|
661
|
-
PathParams,
|
|
662
|
-
RouteWorker,
|
|
663
|
-
websocket,
|
|
664
|
-
WebSocketSessions,
|
|
665
|
-
WebSocketUpgrade,
|
|
666
|
-
} from "@adonix.org/cloud-spark";
|
|
667
|
-
|
|
668
665
|
/**
|
|
669
666
|
* Metadata attached to each session.
|
|
670
667
|
*/
|
package/dist/cache.d.ts
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { b as Middleware } from './middleware-CfKw8AlN.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Configuration options for the cache middleware.
|
|
5
|
+
*/
|
|
6
|
+
interface CacheInit {
|
|
7
|
+
/**
|
|
8
|
+
* Name of the cache storage to use.
|
|
9
|
+
* If omitted, the default cache is used.
|
|
10
|
+
*/
|
|
11
|
+
name?: string;
|
|
12
|
+
/**
|
|
13
|
+
* Function that maps the incoming request
|
|
14
|
+
* to a cache key.
|
|
15
|
+
*/
|
|
16
|
+
getKey: (request: Request) => URL;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Creates a Vary-aware caching middleware for Workers.
|
|
21
|
+
*
|
|
22
|
+
* This middleware:
|
|
23
|
+
* - Caches `GET` requests **only**.
|
|
24
|
+
* - Respects the `Vary` header of responses, ensuring that requests
|
|
25
|
+
* with different headers (e.g., `Accept-Language`) receive the correct cached response.
|
|
26
|
+
* - Skips caching for non-cacheable responses (e.g., error responses or
|
|
27
|
+
* responses with `Vary: *`).
|
|
28
|
+
*
|
|
29
|
+
* @param init Optional cache configuration object.
|
|
30
|
+
* @param init.name Optional name of the cache to use. If omitted, the default cache is used.
|
|
31
|
+
* @param init.getKey Optional function to compute a custom cache key from a request.
|
|
32
|
+
*
|
|
33
|
+
* @returns A {@link Middleware} instance that can be used in your middleware chain.
|
|
34
|
+
*/
|
|
35
|
+
declare function cache(init?: Partial<CacheInit>): Middleware;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Returns a new URL with its query parameters sorted into a stable order.
|
|
39
|
+
*
|
|
40
|
+
* This is used for cache key generation: URLs that differ only in the
|
|
41
|
+
* order of their query parameters will normalize to the same key.
|
|
42
|
+
*
|
|
43
|
+
* @param request - The incoming Request whose URL will be normalized.
|
|
44
|
+
* @returns A new URL with query parameters sorted by name.
|
|
45
|
+
*/
|
|
46
|
+
declare function sortSearchParams(request: Request): URL;
|
|
47
|
+
/**
|
|
48
|
+
* Returns a new URL with all query parameters removed.
|
|
49
|
+
*
|
|
50
|
+
* This is used when query parameters are not relevant to cache lookups,
|
|
51
|
+
* ensuring that variants of the same resource share a single cache entry.
|
|
52
|
+
*
|
|
53
|
+
* @param request - The incoming Request whose URL will be normalized.
|
|
54
|
+
* @returns A new URL with no query parameters.
|
|
55
|
+
*/
|
|
56
|
+
declare function stripSearchParams(request: Request): URL;
|
|
57
|
+
|
|
58
|
+
export { cache, sortSearchParams, stripSearchParams };
|
package/dist/cache.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {StatusCodes}from'http-status-codes/build/es/status-codes';import te from'cache-control-parser';import {getReasonPhrase}from'http-status-codes/build/es/utils-functions';function x(t){return typeof t=="string"}function J(t){return typeof t=="number"&&!Number.isNaN(t)}function Z(t){if(typeof t!="object"||t===null)throw new TypeError("CacheInit must be an object.");let{name:e,getKey:r}=t;Te(e),ge(r);}function Te(t){if(t!==void 0&&!x(t))throw new TypeError("Cache name must be a string.")}function ge(t){if(t!==void 0&&typeof t!="function")throw new TypeError("getKey must be a function.")}function Q(t){if(!(t instanceof URL))throw new TypeError("getKey must return a URL.")}function ee(t){let e=new URL(t.url);return e.searchParams.sort(),e.hash="",e}function De(t){let e=new URL(t.url);return e.search="",e.hash="",e}var A=class{rules=[];use(...e){return this.rules.push(...e),this}execute(e,r){return this.rules.reduceRight((n,i)=>()=>i.apply(e,n),()=>r())()}};var f={parse:te.parse,stringify:te.stringify,DISABLE:Object.freeze({"no-cache":true,"no-store":true,"must-revalidate":true,"max-age":0})};var re=(c=>(c.GET="GET",c.PUT="PUT",c.HEAD="HEAD",c.POST="POST",c.PATCH="PATCH",c.DELETE="DELETE",c.OPTIONS="OPTIONS",c))(re||{}),{GET:_,PUT:We,HEAD:se,POST:Ue,PATCH:ke,DELETE:Fe,OPTIONS:Ke}=re;var o={ACCEPT:"accept",ACCEPT_ENCODING:"accept-encoding",ACCEPT_LANGUAGE:"accept-language",AUTHORIZATION:"authorization",CACHE_CONTROL:"cache-control",CONTENT_DISPOSITION:"content-disposition",CONTENT_ENCODING:"content-encoding",CONTENT_LANGUAGE:"content-language",CONTENT_LENGTH:"content-length",CONTENT_RANGE:"content-range",CONTENT_TYPE:"content-type",CONTENT_MD5:"content-md5",COOKIE:"cookie",ETAG:"etag",IF_MATCH:"if-match",IF_MODIFIED_SINCE:"if-modified-since",IF_NONE_MATCH:"if-none-match",IF_UNMODIFIED_SINCE:"if-unmodified-since",LAST_MODIFIED:"last-modified",ORIGIN:"origin",RANGE:"range",SET_COOKIE:"set-cookie",VARY:"vary",UPGRADE:"upgrade",INTERNAL_VARIANT_SET:"internal-variant-set"},ne=[o.CONTENT_TYPE,o.CONTENT_LENGTH,o.CONTENT_RANGE,o.CONTENT_ENCODING,o.CONTENT_LANGUAGE,o.CONTENT_DISPOSITION,o.CONTENT_MD5],oe=[o.CONTENT_LENGTH,o.CONTENT_RANGE];function R(t,e){return t<e?-1:t>e?1:0}function k(t,e,r){let s=Array.isArray(r)?r:[r],n=Array.from(new Set(s.map(i=>i.trim()))).filter(i=>i.length).sort(R);if(!n.length){t.delete(e);return}t.set(e,n.join(", "));}function ie(t,e,r){let s=Array.isArray(r)?r:[r];if(s.length===0)return;let i=d(t,e).concat(s.map(a=>a.trim()));k(t,e,i);}function d(t,e){let r=t.get(e)?.split(",").map(s=>s.trim()).filter(s=>s.length>0)??[];return Array.from(new Set(r)).sort(R)}function F(t,e){for(let r of e)t.delete(r);}var Re="https://vary",Oe="*";function ae(t,e){if(e.status!==StatusCodes.OK||t.method!==_||t.headers.has(o.AUTHORIZATION)||t.headers.has(o.COOKIE)||h(t.headers)["no-store"]||!e.headers.has(o.CACHE_CONTROL))return false;let s=h(e.headers),n=s["s-maxage"]??s["max-age"];if(n===void 0||n===0||s["no-store"]||s["no-cache"]||s.private||e.headers.has(o.SET_COOKIE)||K(e).includes(Oe))return false;if(e.headers.has(o.INTERNAL_VARIANT_SET))throw new Error("Found conflicting vary header.");if(e.headers.has(o.CONTENT_RANGE))throw new Error("Found content-range header on 200 OK. Must use 206 Partial Content");return true}function h(t){return f.parse(t.get(o.CACHE_CONTROL)??"")}function K(t){return C(d(t.headers,o.VARY))}function C(t){let e=t.map(r=>r.toLowerCase()).filter(r=>r!==o.ACCEPT_ENCODING).sort(R);return Array.from(new Set(e))}function E(t,e,r){let s=[],n=C(e);for(let a of n){let c=t.headers.get(a);c!==null&&s.push([a,xe(a,c)]);}let i=Ae(JSON.stringify([r.toString(),s]));return new URL(i,Re).toString()}function xe(t,e){switch(t.toLowerCase()){case o.ACCEPT:case o.ACCEPT_LANGUAGE:case o.ORIGIN:return e.toLowerCase();default:return e}}function Ae(t){let e=new TextEncoder().encode(t),r="";for(let s of e)r+=String.fromCodePoint(s);return btoa(r).replaceAll("+","-").replaceAll("/","_").replace(/={1,2}$/,"")}var _e=/^bytes=(\d{1,12})-(\d{0,12})$/,ce="W/",ue="*";function de(t){let e=t.headers.get(o.RANGE);if(!e)return;let r=_e.exec(e);if(!r)return;let s=Number(r[1]),n=r[2]===""?void 0:Number(r[2]);return n===void 0?{start:s}:{start:s,end:n}}function pe(t,e){return t.length>0&&!me(t,e,ue)}function fe(t,e){return me(t,le(e),ue)}function me(t,...e){return t.some(r=>e.includes(r))}function I(t){if(!x(t))return;let e=Date.parse(t);return Number.isNaN(e)?void 0:e}function le(t){return t.startsWith(ce)?t.slice(2):t}function B(t){return {ifMatch:d(t,o.IF_MATCH).filter(e=>!e.startsWith(ce)),ifNoneMatch:d(t,o.IF_NONE_MATCH).map(le),ifModifiedSince:t.get(o.IF_MODIFIED_SINCE),ifUnmodifiedSince:t.get(o.IF_UNMODIFIED_SINCE)}}function he(t){let{ifNoneMatch:e,ifMatch:r,ifModifiedSince:s,ifUnmodifiedSince:n}=B(t);return e.length>0||r.length>0||s!==null||n!==null}function Ce(t){let e=t.get(o.CONTENT_LENGTH);if(e===null||e.trim()==="")return;let r=Number(e);if(J(r))return r}var y=class{async apply(e,r){let s=h(e.request.headers);if(!s["no-store"]&&!((s["no-cache"]||s["max-age"]===0)&&!he(e.request.headers)))return r()}};var q="utf-8";function $(t,e){return !e||t.toLowerCase().includes("charset=")?t:`${t}; charset=${e.toLowerCase()}`}var Y=class{headers=new Headers;status=StatusCodes.OK;statusText;webSocket;mediaType=$("text/plain",q);get responseInit(){return {headers:this.headers,status:this.status,statusText:this.statusText??getReasonPhrase(this.status),webSocket:this.webSocket,encodeBody:"automatic"}}setHeader(e,r){k(this.headers,e,r);}mergeHeader(e,r){ie(this.headers,e,r);}addContentType(){this.headers.get(o.CONTENT_TYPE)||this.setHeader(o.CONTENT_TYPE,this.mediaType);}filterHeaders(){this.status===StatusCodes.NO_CONTENT?F(this.headers,oe):this.status===StatusCodes.NOT_MODIFIED&&F(this.headers,ne);}},z=class extends Y{constructor(r){super();this.cache=r;}addCacheHeader(){this.cache&&this.setHeader(o.CACHE_CONTROL,f.stringify(this.cache));}},l=class extends z{constructor(r=null,s){super(s);this.body=r;}async response(){this.addCacheHeader();let r=[StatusCodes.NO_CONTENT,StatusCodes.NOT_MODIFIED].includes(this.status)?null:this.body;return r&&this.addContentType(),this.filterHeaders(),new Response(r,this.responseInit)}};var T=class extends l{constructor(e){super(),this.status=StatusCodes.NOT_MODIFIED,this.headers=new Headers(e.headers);}},X=class extends l{constructor(e=null,r,s=StatusCodes.OK){super(e,r),this.status=s;}},S=class extends X{constructor(e={},r,s=StatusCodes.OK){super(JSON.stringify(e),r,s),this.mediaType=$("application/json",q);}};var H=class extends l{constructor(e){super(),this.status=e.status,this.statusText=e.statusText,this.headers=new Headers(e.headers);}};var j=class extends S{constructor(r,s){let n={status:r,error:getReasonPhrase(r),details:s??""};super(n,f.DISABLE,r);this.details=s;}};var g=class extends j{constructor(e){super(StatusCodes.PRECONDITION_FAILED,e);}};var N=class{async apply(e,r){let s=await r();if(!s||s.status!==StatusCodes.OK)return s;let n=this.getHeader(s);if(n===void 0)return s;let i=B(e.request.headers);return this.response(s,n,i)}};var w=class extends N{getHeader(e){return e.headers.get(o.ETAG)??void 0}},b=class extends w{async response(e,r,s){return pe(s.ifMatch,r)?new g(`ETag: ${r}`).response():e}},L=class extends w{async response(e,r,s){if(s.ifNoneMatch.length===0)return e;if(fe(s.ifNoneMatch,r))return new T(e).response()}};var P=class{async apply(e,r){if(e.request.method===_)return r();if(e.request.method===se){let s=await r();return s?new H(s).response():void 0}}};var D=class extends N{getHeader(e){return I(e.headers.get(o.LAST_MODIFIED))}},V=class extends D{async response(e,r,s){let n=I(s.ifModifiedSince);if(n===void 0)return e;if(r<=n)return new T(e).response()}},G=class extends D{async response(e,r,s){let n=I(s.ifUnmodifiedSince);return n===void 0?e:r>n?new g(`Last-Modified: ${new Date(r).toUTCString()}`).response():e}};var v=class{async apply(e,r){let s=de(e.request);if(s&&(s.start!==0||s.end===0))return;let n=await r();if(!n||n.status!==StatusCodes.OK||!s||s.end===void 0)return n;let i=Ce(n.headers);if(i&&s.end===i-1)return n}};var M=class{async apply(e,r){let s=e.request.headers;if(!s.has(o.AUTHORIZATION)&&!s.has(o.COOKIE))return r()}};var W=class{async apply(e,r){if(!e.request.headers.has(o.UPGRADE))return r()}};var p=class t extends l{_isModified=false;constructor(e){let r=C(e);if(r.length===0)throw new Error("The filtered vary array is empty.");super(),this.setHeader(o.INTERNAL_VARIANT_SET,r);}static new(e){return new t(C(e))}static restore(e){if(!t.isVariantResponse(e))throw new Error("The source response is not a variant response");let r=t.new(d(e.headers,o.INTERNAL_VARIANT_SET)),s=e.headers.get(o.CACHE_CONTROL);return s&&(r.cache=f.parse(s)),r}get vary(){return d(this.headers,o.INTERNAL_VARIANT_SET)}get isModified(){return this._isModified}append(e){let r=this.vary.length;this.mergeHeader(o.INTERNAL_VARIANT_SET,C(e)),this._isModified=this.vary.length!==r;}static isVariantResponse(e){return e.headers.has(o.INTERNAL_VARIANT_SET)}expireAfter(e){let r=h(e.headers),s=r["s-maxage"]??r["max-age"];if(s===void 0)return;let n=this.cache?.["s-maxage"];(n===void 0||s>n)&&(this.cache={"s-maxage":s},this._isModified=true);}};var U=class{init;constructor(e){let{name:r,getKey:s=ee}=e;this.init={name:r?.trim()||void 0,getKey:s};}async handle(e,r){let s=this.init.name?await caches.open(this.init.name):caches.default,i=await new A().use(new y).use(new P).use(new W).use(new M).use(new v).use(new V).use(new L).use(new G).use(new b).execute(e,()=>this.getCached(s,e.request));if(i)return i;let a=await r();return e.ctx.waitUntil(this.setCached(s,e.request,a)),a}async getCached(e,r){let s=this.getCacheKey(r),n=await e.match(s.toString());if(!n)return;if(!p.isVariantResponse(n))return n;let i=p.restore(n).vary,a=E(r,i,s);return e.match(a)}async setCached(e,r,s){if(!ae(r,s))return;let n=this.getCacheKey(r),i=s.clone(),a=K(i),c=await e.match(n),Ee=c&&p.isVariantResponse(c);if(!c){if(a.length===0){await e.put(n,i);return}let u=p.new(a);u.expireAfter(i),await e.put(n,await u.response()),await e.put(E(r,u.vary,n),i);return}if(Ee){let u=p.restore(c);u.expireAfter(i),a.length>0&&(u.append(a),u.isModified&&await e.put(n,await u.response())),await e.put(E(r,u.vary,n),i);return}if(a.length===0){await e.put(n,i);return}let O=p.new(a);O.expireAfter(c),O.expireAfter(i),await e.put(n,await O.response()),await e.put(E(r,O.vary,n),i),await e.put(E(r,[],n),c);}getCacheKey(e){let r=this.init.getKey(e);return Q(r),r.hash="",r}};function Cr(t={}){return Z(t),new U(t)}
|
|
2
|
-
export{
|
|
1
|
+
import {StatusCodes}from'http-status-codes/build/es/status-codes';import te from'cache-control-parser';import {getReasonPhrase}from'http-status-codes/build/es/utils-functions';function x(t){return typeof t=="string"}function J(t){return typeof t=="number"&&!Number.isNaN(t)}function Z(t){if(typeof t!="object"||t===null)throw new TypeError("CacheInit must be an object.");let{name:e,getKey:r}=t;Te(e),ge(r);}function Te(t){if(t!==void 0&&!x(t))throw new TypeError("Cache name must be a string.")}function ge(t){if(t!==void 0&&typeof t!="function")throw new TypeError("getKey must be a function.")}function Q(t){if(!(t instanceof URL))throw new TypeError("getKey must return a URL.")}function ee(t){let e=new URL(t.url);return e.searchParams.sort(),e.hash="",e}function we(t){let e=new URL(t.url);return e.search="",e.hash="",e}var A=class{rules=[];use(...e){return this.rules.push(...e),this}execute(e,r){return this.rules.reduceRight((n,i)=>()=>i.apply(e,n),()=>r())()}};var m={parse:te.parse,stringify:te.stringify,DISABLE:Object.freeze({"no-cache":true,"no-store":true,"must-revalidate":true,"max-age":0})};var re=(c=>(c.GET="GET",c.PUT="PUT",c.HEAD="HEAD",c.POST="POST",c.PATCH="PATCH",c.DELETE="DELETE",c.OPTIONS="OPTIONS",c))(re||{}),{GET:_,PUT:Ve,HEAD:se,POST:Ge,PATCH:ve,DELETE:Me,OPTIONS:We}=re;var o={ACCEPT:"accept",ACCEPT_ENCODING:"accept-encoding",ACCEPT_LANGUAGE:"accept-language",AUTHORIZATION:"authorization",CACHE_CONTROL:"cache-control",CONTENT_DISPOSITION:"content-disposition",CONTENT_ENCODING:"content-encoding",CONTENT_LANGUAGE:"content-language",CONTENT_LENGTH:"content-length",CONTENT_RANGE:"content-range",CONTENT_TYPE:"content-type",CONTENT_MD5:"content-md5",COOKIE:"cookie",ETAG:"etag",IF_MATCH:"if-match",IF_MODIFIED_SINCE:"if-modified-since",IF_NONE_MATCH:"if-none-match",IF_UNMODIFIED_SINCE:"if-unmodified-since",LAST_MODIFIED:"last-modified",ORIGIN:"origin",RANGE:"range",SET_COOKIE:"set-cookie",VARY:"vary",UPGRADE:"upgrade",INTERNAL_VARIANT_SET:"internal-variant-set"},ne=[o.CONTENT_TYPE,o.CONTENT_LENGTH,o.CONTENT_RANGE,o.CONTENT_ENCODING,o.CONTENT_LANGUAGE,o.CONTENT_DISPOSITION,o.CONTENT_MD5],oe=[o.CONTENT_LENGTH,o.CONTENT_RANGE];function R(t,e){return t<e?-1:t>e?1:0}function k(t,e,r){let s=Array.isArray(r)?r:[r],n=Array.from(new Set(s.map(i=>i.trim()))).filter(i=>i.length).sort(R);if(!n.length){t.delete(e);return}t.set(e,n.join(", "));}function ie(t,e,r){let s=Array.isArray(r)?r:[r];if(s.length===0)return;let i=p(t,e).concat(s.map(a=>a.trim()));k(t,e,i);}function p(t,e){let r=t.get(e)?.split(",").map(s=>s.trim()).filter(s=>s.length>0)??[];return Array.from(new Set(r)).sort(R)}function F(t,e){for(let r of e)t.delete(r);}var Ne="https://vary",Re="*";function ae(t,e){if(e.status!==StatusCodes.OK||t.method!==_||t.headers.has(o.AUTHORIZATION)||t.headers.has(o.COOKIE)||h(t.headers)["no-store"]||!e.headers.has(o.CACHE_CONTROL))return false;let s=h(e.headers),n=s["s-maxage"]??s["max-age"];if(n===void 0||n===0||s["no-store"]||s["no-cache"]||s.private||e.headers.has(o.SET_COOKIE)||K(e).includes(Re))return false;if(e.headers.has(o.INTERNAL_VARIANT_SET))throw new Error("Found conflicting vary header.");if(e.headers.has(o.CONTENT_RANGE))throw new Error("Found content-range header on 200 OK. Must use 206 Partial Content");return true}function h(t){return m.parse(t.get(o.CACHE_CONTROL)??"")}function K(t){return C(p(t.headers,o.VARY))}function C(t){let e=t.map(r=>r.toLowerCase()).filter(r=>r!==o.ACCEPT_ENCODING).sort(R);return Array.from(new Set(e))}function E(t,e,r){let s=[],n=C(e);for(let a of n){let c=t.headers.get(a);c!==null&&s.push([a,Oe(a,c)]);}let i=xe(JSON.stringify([r.toString(),s]));return new URL(i,Ne).toString()}function Oe(t,e){switch(t.toLowerCase()){case o.ACCEPT:case o.ACCEPT_LANGUAGE:case o.ORIGIN:return e.toLowerCase();default:return e}}function xe(t){let e=new TextEncoder().encode(t),r="";for(let s of e)r+=String.fromCodePoint(s);return btoa(r).replaceAll("+","-").replaceAll("/","_").replace(/={1,2}$/,"")}var Ae=/^bytes=(\d{1,12})-(\d{0,12})$/,ce="W/",ue="*";function de(t){let e=t.headers.get(o.RANGE);if(!e)return;let r=Ae.exec(e);if(!r)return;let s=Number(r[1]),n=r[2]===""?void 0:Number(r[2]);return n===void 0?{start:s}:{start:s,end:n}}function pe(t,e){return t.length>0&&!me(t,e,ue)}function fe(t,e){return me(t,le(e),ue)}function me(t,...e){return t.some(r=>e.includes(r))}function I(t){if(!x(t))return;let e=Date.parse(t);return Number.isNaN(e)?void 0:e}function le(t){return t.startsWith(ce)?t.slice(2):t}function B(t){return {ifMatch:p(t,o.IF_MATCH).filter(e=>!e.startsWith(ce)),ifNoneMatch:p(t,o.IF_NONE_MATCH).map(le),ifModifiedSince:t.get(o.IF_MODIFIED_SINCE),ifUnmodifiedSince:t.get(o.IF_UNMODIFIED_SINCE)}}function he(t){let{ifNoneMatch:e,ifMatch:r,ifModifiedSince:s,ifUnmodifiedSince:n}=B(t);return e.length>0||r.length>0||s!==null||n!==null}function Ce(t){let e=t.get(o.CONTENT_LENGTH);if(e===null||e.trim()==="")return;let r=Number(e);if(J(r))return r}var y=class{async apply(e,r){let s=h(e.request.headers);if(!s["no-store"]&&!((s["no-cache"]||s["max-age"]===0)&&!he(e.request.headers)))return r()}};var q="utf-8";function $(t,e){return !e||t.toLowerCase().includes("charset=")?t:`${t}; charset=${e.toLowerCase()}`}var Y=class{headers=new Headers;status=StatusCodes.OK;statusText;webSocket;mediaType=$("text/plain",q);get responseInit(){return {headers:this.headers,status:this.status,statusText:this.statusText??getReasonPhrase(this.status),webSocket:this.webSocket,encodeBody:"automatic"}}setHeader(e,r){k(this.headers,e,r);}mergeHeader(e,r){ie(this.headers,e,r);}addContentType(){this.headers.get(o.CONTENT_TYPE)||this.setHeader(o.CONTENT_TYPE,this.mediaType);}filterHeaders(){this.status===StatusCodes.NO_CONTENT?F(this.headers,oe):this.status===StatusCodes.NOT_MODIFIED&&F(this.headers,ne);}},z=class extends Y{constructor(r){super();this.cache=r;}addCacheHeader(){this.cache&&this.setHeader(o.CACHE_CONTROL,m.stringify(this.cache));}},l=class extends z{constructor(r=null,s){super(s);this.body=r;}async response(){this.addCacheHeader();let r=[StatusCodes.NO_CONTENT,StatusCodes.NOT_MODIFIED].includes(this.status)?null:this.body;return r&&this.addContentType(),this.filterHeaders(),new Response(r,this.responseInit)}};var T=class extends l{constructor(e){super(),this.status=StatusCodes.NOT_MODIFIED,this.headers=new Headers(e.headers);}},X=class extends l{constructor(e=null,r,s=StatusCodes.OK){super(e,r),this.status=s;}},S=class extends X{constructor(e={},r,s=StatusCodes.OK){super(JSON.stringify(e),r,s),this.mediaType=$("application/json",q);}};var H=class extends l{constructor(e){super(),this.status=e.status,this.statusText=e.statusText,this.headers=new Headers(e.headers);}};var j=class extends S{constructor(r,s){let n={status:r,error:getReasonPhrase(r),details:s??""};super(n,m.DISABLE,r);this.details=s;}};var g=class extends j{constructor(e){super(StatusCodes.PRECONDITION_FAILED,e);}};var N=class{async apply(e,r){let s=await r();if(!s||s.status!==StatusCodes.OK)return s;let n=this.getHeader(s);if(n===void 0)return s;let i=B(e.request.headers);return this.response(s,n,i)}};var w=class extends N{getHeader(e){return e.headers.get(o.ETAG)??void 0}},b=class extends w{async response(e,r,s){return pe(s.ifMatch,r)?new g(`ETag: ${r}`).response():e}},L=class extends w{async response(e,r,s){if(s.ifNoneMatch.length===0)return e;if(fe(s.ifNoneMatch,r))return new T(e).response()}};var P=class{async apply(e,r){if(e.request.method===_)return r();if(e.request.method===se){let s=await r();return s?new H(s).response():void 0}}};var D=class extends N{getHeader(e){return I(e.headers.get(o.LAST_MODIFIED))}},V=class extends D{async response(e,r,s){let n=I(s.ifModifiedSince);if(n===void 0)return e;if(r<=n)return new T(e).response()}},G=class extends D{async response(e,r,s){let n=I(s.ifUnmodifiedSince);return n===void 0?e:r>n?new g(`Last-Modified: ${new Date(r).toUTCString()}`).response():e}};var v=class{async apply(e,r){let s=de(e.request);if(s&&(s.start!==0||s.end===0))return;let n=await r();if(!n||n.status!==StatusCodes.OK||!s||s.end===void 0)return n;let i=Ce(n.headers);if(i&&s.end===i-1)return n}};var M=class{async apply(e,r){let s=e.request.headers;if(!s.has(o.AUTHORIZATION)&&!s.has(o.COOKIE))return r()}};var W=class{async apply(e,r){if(!e.request.headers.has(o.UPGRADE))return r()}};var f=class t extends l{_isModified=false;constructor(e){let r=C(e);if(r.length===0)throw new Error("The filtered vary array is empty.");super(),this.setHeader(o.INTERNAL_VARIANT_SET,r);}static new(e){return new t(C(e))}static restore(e){if(!t.isVariantResponse(e))throw new Error("The source response is not a variant response");let r=t.new(p(e.headers,o.INTERNAL_VARIANT_SET)),s=e.headers.get(o.CACHE_CONTROL);return s&&(r.cache=m.parse(s)),r}get vary(){return p(this.headers,o.INTERNAL_VARIANT_SET)}get isModified(){return this._isModified}append(e){let r=this.vary.length;this.mergeHeader(o.INTERNAL_VARIANT_SET,C(e)),this._isModified=this.vary.length!==r;}static isVariantResponse(e){return e.headers.has(o.INTERNAL_VARIANT_SET)}expireAfter(e){let r=h(e.headers),s=r["s-maxage"]??r["max-age"];if(s===void 0)return;let n=this.cache?.["s-maxage"];(n===void 0||s>n)&&(this.cache={"s-maxage":s},this._isModified=true);}};var U=class{init;constructor(e){let{name:r,getKey:s=ee}=e;this.init={name:r?.trim()||void 0,getKey:s};}async handle(e,r){let s=this.init.name?await caches.open(this.init.name):caches.default,i=await new A().use(new y).use(new P).use(new W).use(new M).use(new v).use(new V).use(new L).use(new G).use(new b).execute(e,()=>this.getCached(s,e.request));if(i)return i;let a=await r();return e.ctx.waitUntil(this.setCached(s,e.request,a)),a}async getCached(e,r){let s=this.getCacheKey(r),n=await e.match(s.toString());if(!n)return;if(!f.isVariantResponse(n))return n;let i=f.restore(n).vary,a=E(r,i,s);return e.match(a)}async setCached(e,r,s){if(!ae(r,s))return;let n=this.getCacheKey(r),i=s.clone(),a=K(i),c=await e.match(n),Ee=c&&f.isVariantResponse(c);if(!c){if(a.length===0){await e.put(n,i);return}let d=f.new(a);d.expireAfter(i),await e.put(n,await d.response()),await e.put(E(r,d.vary,n),i);return}if(Ee){let d=f.restore(c);d.expireAfter(i),a.length>0&&(d.append(a),d.isModified&&await e.put(n,await d.response())),await e.put(E(r,d.vary,n),i);return}if(a.length===0){await e.put(n,i);return}let O=f.new(a);O.expireAfter(c),O.expireAfter(i),await e.put(n,await O.response()),await e.put(E(r,O.vary,n),i),await e.put(E(r,[],n),c);}getCacheKey(e){let r=this.init.getKey(e);return Q(r),r.hash="",r}};function Er(t={}){return Z(t),new U(t)}
|
|
2
|
+
export{Er as cache,ee as sortSearchParams,we as stripSearchParams};//# sourceMappingURL=cache.js.map
|
|
3
3
|
//# sourceMappingURL=cache.js.map
|