@adonix.org/cloud-spark 0.0.40 → 0.0.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -179,21 +179,18 @@ declare abstract class BasicWorker implements CorsProvider {
179
179
  type RouteCallback = (...matches: string[]) => Response | Promise<Response>;
180
180
  type RouteInit = [Method, string, RouteCallback];
181
181
  declare class Route {
182
- callback: RouteCallback;
182
+ readonly callback: RouteCallback;
183
183
  readonly pattern: RegExp;
184
184
  constructor(pattern: RegExp | string, callback: RouteCallback);
185
185
  }
186
186
  declare class Routes {
187
- private readonly worker;
188
- private routes;
189
- constructor(worker: RoutedWorker);
190
- append(method: Method, route: Route): this;
187
+ private readonly routes;
188
+ add(method: Method, route: Route): this;
191
189
  get(method: Method, url: string): Route | undefined;
192
190
  }
193
191
 
194
192
  declare abstract class RoutedWorker extends BasicWorker {
195
193
  private readonly routes;
196
- constructor(request: Request, env?: Env, ctx?: ExecutionContext);
197
194
  protected initialize(routes: RouteInit[]): void;
198
195
  protected addRoute(method: Method, pattern: string, callback: RouteCallback): this;
199
196
  protected dispatch(request: Request): Promise<Response>;
package/dist/index.js CHANGED
@@ -290,31 +290,23 @@ var BasicWorker = class {
290
290
  return this.getResponse(MethodNotAllowed, this.request.method);
291
291
  }
292
292
  try {
293
- return this.dispatch(this.request);
293
+ return await this.dispatch(this.request);
294
294
  } catch (error) {
295
295
  return this.getResponse(InternalServerError, String(error));
296
296
  }
297
297
  }
298
298
  async dispatch(request) {
299
299
  const method = request.method;
300
- switch (method) {
301
- case "GET" /* GET */:
302
- return await this.get();
303
- case "PUT" /* PUT */:
304
- return await this.put();
305
- case "POST" /* POST */:
306
- return await this.post();
307
- case "PATCH" /* PATCH */:
308
- return await this.patch();
309
- case "DELETE" /* DELETE */:
310
- return await this.delete();
311
- case "HEAD" /* HEAD */:
312
- return await this.head();
313
- case "OPTIONS" /* OPTIONS */:
314
- return await this.options();
315
- default:
316
- return this.getResponse(MethodNotAllowed, method);
317
- }
300
+ const handler = {
301
+ GET: () => this.get(),
302
+ PUT: () => this.put(),
303
+ POST: () => this.post(),
304
+ PATCH: () => this.patch(),
305
+ DELETE: () => this.delete(),
306
+ HEAD: () => this.head(),
307
+ OPTIONS: () => this.options()
308
+ };
309
+ return (handler[method] ?? (() => this.getResponse(MethodNotAllowed, method)))();
318
310
  }
319
311
  get() {
320
312
  return this.getResponse(NotImplemented);
@@ -337,9 +329,7 @@ var BasicWorker = class {
337
329
  async head() {
338
330
  return this.getResponse(
339
331
  Head,
340
- await this.dispatch(
341
- new Request(this.request, { method: "GET" /* GET */ })
342
- )
332
+ await this.dispatch(new Request(this.request, { method: "GET" /* GET */ }))
343
333
  );
344
334
  }
345
335
  getResponse(ResponseClass, ...args) {
@@ -374,13 +364,9 @@ var Route = class {
374
364
  pattern;
375
365
  };
376
366
  var Routes = class {
377
- constructor(worker) {
378
- this.worker = worker;
379
- }
380
367
  routes = /* @__PURE__ */ new Map();
381
- append(method, route) {
382
- const boundRoute = new Route(route.pattern, route.callback.bind(this.worker));
383
- ensure(this.routes, method, () => []).push(boundRoute);
368
+ add(method, route) {
369
+ ensure(this.routes, method, () => []).push(route);
384
370
  return this;
385
371
  }
386
372
  get(method, url) {
@@ -392,24 +378,21 @@ var Routes = class {
392
378
 
393
379
  // src/routed-worker.ts
394
380
  var RoutedWorker = class extends BasicWorker {
395
- routes = new Routes(this);
396
- constructor(request, env = {}, ctx) {
397
- super(request, env, ctx);
398
- }
381
+ routes = new Routes();
399
382
  initialize(routes) {
400
383
  routes.forEach((route) => {
401
384
  this.addRoute(route[0], route[1], route[2]);
402
385
  });
403
386
  }
404
387
  addRoute(method, pattern, callback) {
405
- this.routes.append(method, new Route(pattern, callback));
388
+ this.routes.add(method, new Route(pattern, callback));
406
389
  return this;
407
390
  }
408
391
  async dispatch(request) {
409
392
  const route = this.routes.get(request.method, request.url);
410
- if (!route) return await super.dispatch(request);
411
- const match = this.requestUrl.pathname.match(route.pattern);
412
- return await route.callback(...match ?? []);
393
+ if (!route) return super.dispatch(request);
394
+ const match = this.requestUrl.pathname.match(route.pattern) ?? [];
395
+ return route.callback.call(this, ...match);
413
396
  }
414
397
  get() {
415
398
  return this.getResponse(NotFound);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/common.ts","../src/response.ts","../src/basic-worker.ts","../src/route.ts","../src/routed-worker.ts"],"sourcesContent":["/*\n * Copyright (C) 2025 Ty Busby\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport { StatusCodes } from \"http-status-codes\";\n\nexport * from \"./common\";\nexport * from \"./response\";\nexport * from \"./basic-worker\";\nexport * from \"./routed-worker\";\nexport * from \"./route\";\n","/*\n * Copyright (C) 2025 Ty Busby\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const Time = {\n Second: 1,\n Minute: 60,\n Hour: 60 * 60,\n Day: 60 * 60 * 24,\n Week: 60 * 60 * 24 * 7,\n} as const;\n\nexport enum Method {\n GET = \"GET\",\n PUT = \"PUT\",\n POST = \"POST\",\n PATCH = \"PATCH\",\n DELETE = \"DELETE\",\n HEAD = \"HEAD\",\n OPTIONS = \"OPTIONS\",\n}\n\nconst METHOD_SET: Set<string> = new Set(Object.values(Method));\n\nexport function isMethod(value: string): value is Method {\n return METHOD_SET.has(value);\n}\n\nexport function ensure<K, V>(map: Map<K, V>, key: K, factory: () => V): V {\n let value = map.get(key);\n if (value === undefined) {\n value = factory();\n map.set(key, value);\n }\n return value;\n}\n\nexport function getContentType(type: MimeType): string {\n if (ADD_CHARSET.has(type)) {\n return `${type}; charset=utf-8`;\n }\n return type;\n}\n\nexport enum MimeType {\n PLAIN_TEXT = \"text/plain\",\n HTML = \"text/html\",\n CSS = \"text/css\",\n CSV = \"text/csv\",\n XML = \"text/xml\",\n MARKDOWN = \"text/markdown\",\n RICH_TEXT = \"text/richtext\",\n JSON = \"application/json\",\n XML_APP = \"application/xml\",\n YAML = \"application/x-yaml\",\n FORM_URLENCODED = \"application/x-www-form-urlencoded\",\n NDJSON = \"application/x-ndjson\",\n MSGPACK = \"application/x-msgpack\",\n PROTOBUF = \"application/x-protobuf\",\n MULTIPART_FORM_DATA = \"multipart/form-data\",\n MULTIPART_MIXED = \"multipart/mixed\",\n MULTIPART_ALTERNATIVE = \"multipart/alternative\",\n MULTIPART_DIGEST = \"multipart/digest\",\n MULTIPART_RELATED = \"multipart/related\",\n MULTIPART_SIGNED = \"multipart/signed\",\n MULTIPART_ENCRYPTED = \"multipart/encrypted\",\n OCTET_STREAM = \"application/octet-stream\",\n PDF = \"application/pdf\",\n ZIP = \"application/zip\",\n GZIP = \"application/gzip\",\n MSWORD = \"application/msword\",\n DOCX = \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n EXCEL = \"application/vnd.ms-excel\",\n XLSX = \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n POWERPOINT = \"application/vnd.ms-powerpoint\",\n PPTX = \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n ICO = \"image/x-icon\",\n ICO_MS = \"image/vnd.microsoft.icon\",\n GIF = \"image/gif\",\n PNG = \"image/png\",\n JPEG = \"image/jpeg\",\n WEBP = \"image/webp\",\n SVG = \"image/svg+xml\",\n HEIF = \"image/heif\",\n AVIF = \"image/avif\",\n EVENT_STREAM = \"text/event-stream\",\n TAR = \"application/x-tar\",\n BZIP2 = \"application/x-bzip2\",\n}\n\nconst ADD_CHARSET: Set<MimeType> = new Set([\n MimeType.PLAIN_TEXT,\n MimeType.HTML,\n MimeType.CSS,\n MimeType.CSV,\n MimeType.MARKDOWN,\n MimeType.XML,\n MimeType.JSON,\n MimeType.XML_APP,\n MimeType.FORM_URLENCODED,\n MimeType.NDJSON,\n MimeType.RICH_TEXT,\n MimeType.SVG,\n]);\n","/*\n * Copyright (C) 2025 Ty Busby\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getReasonPhrase, StatusCodes } from \"http-status-codes\";\nimport { getContentType, Method, MimeType } from \"./common\";\n\nexport interface CorsProvider {\n getOrigin(): string | null;\n getAllowOrigins(): string[];\n getAllowMethods(): Method[];\n getAllowHeaders(): string[];\n getMaxAge(): number;\n}\n\nexport interface ErrorJson {\n code: number;\n error: string;\n details: string;\n}\n\nexport class WorkerResponse {\n private _headers: Headers = new Headers();\n private _body: BodyInit | null;\n\n constructor(\n protected readonly cors: CorsProvider,\n content: string | null = null,\n protected readonly code: StatusCodes = StatusCodes.OK,\n protected readonly mimeType: MimeType = MimeType.JSON\n ) {\n this._body = this.code === StatusCodes.NO_CONTENT ? null : content;\n }\n\n public createResponse(): Response {\n this.addCorsHeaders();\n if (this.body) {\n this.headers.set(\"Content-Type\", getContentType(this.mimeType));\n }\n return new Response(this.body, this.responseInit);\n }\n\n protected get responseInit(): ResponseInit {\n return {\n headers: this.headers,\n status: this.code,\n statusText: getReasonPhrase(this.code),\n };\n }\n\n protected get body(): BodyInit | null {\n return this._body;\n }\n\n protected get headers(): Headers {\n return this._headers;\n }\n\n protected set headers(headers: Headers) {\n this._headers = headers;\n }\n\n protected addCorsHeaders(): void {\n const origin = this.cors.getOrigin();\n if (!origin) return; // no Origin, skip CORS\n\n if (this.getAllowOrigins().includes(\"*\")) {\n this.headers.set(\"Access-Control-Allow-Origin\", \"*\");\n } else if (this.getAllowOrigins().includes(origin)) {\n this.headers.set(\"Access-Control-Allow-Origin\", origin);\n this.headers.set(\"Access-Control-Allow-Credentials\", \"true\");\n this.headers.set(\"Vary\", \"Origin\");\n }\n this.headers.set(\n \"Access-Control-Allow-Headers\",\n this.getAllowHeaders()\n );\n this.headers.set(\n \"Access-Control-Allow-Methods\",\n this.getAllowMethods()\n );\n this.headers.set(\"Access-Control-Max-Age\", this.getMaxAge());\n this.headers.set(\"X-Content-Type-Options\", \"nosniff\");\n }\n\n protected getAllowMethods(): string {\n return this.cors.getAllowMethods().join(\", \");\n }\n\n protected getAllowHeaders(): string {\n return this.cors.getAllowHeaders().join(\", \");\n }\n\n protected getAllowOrigins(): string[] {\n return this.cors.getAllowOrigins();\n }\n\n protected getMaxAge(): string {\n return String(this.cors.getMaxAge());\n }\n}\n\nexport class JsonResponse extends WorkerResponse {\n private _json: object;\n constructor(\n cors: CorsProvider,\n content: object = {},\n code: StatusCodes = StatusCodes.OK\n ) {\n super(cors, null, code, MimeType.JSON);\n this._json = content;\n }\n\n public get json(): object {\n return this._json;\n }\n\n public set json(json: object) {\n this._json = json;\n }\n\n protected override get body(): string {\n return JSON.stringify(this.json);\n }\n}\n\nexport class HtmlResponse extends WorkerResponse {\n constructor(\n cors: CorsProvider,\n content: string,\n code: StatusCodes = StatusCodes.OK,\n type: MimeType = MimeType.HTML\n ) {\n super(cors, content, code, type);\n }\n}\n\nexport class TextResponse extends WorkerResponse {\n constructor(\n cors: CorsProvider,\n content: string,\n code: StatusCodes = StatusCodes.OK,\n type: MimeType = MimeType.PLAIN_TEXT\n ) {\n super(cors, content, code, type);\n }\n}\n\n/**\n * Remove the body from a GET response.\n */\nexport class Head extends WorkerResponse {\n constructor(cors: CorsProvider, response: Response) {\n super(cors, null, response.status);\n this.headers = new Headers(response.headers);\n }\n}\n\nexport class Options extends WorkerResponse {\n constructor(cors: CorsProvider) {\n super(cors, null, StatusCodes.NO_CONTENT);\n this.headers.set(\"Allow\", this.getAllowMethods());\n }\n}\n\nexport class ErrorResponse extends JsonResponse {\n constructor(\n cors: CorsProvider,\n code: StatusCodes,\n protected details?: string\n ) {\n super(cors, {}, code);\n }\n\n public override get json(): ErrorJson {\n return {\n code: this.code,\n error: getReasonPhrase(this.code),\n details: this.details ?? getReasonPhrase(this.code),\n };\n }\n}\n\nexport class BadRequest extends ErrorResponse {\n constructor(cors: CorsProvider, detail?: string) {\n super(cors, StatusCodes.BAD_REQUEST, detail);\n }\n}\n\nexport class Unauthorized extends ErrorResponse {\n constructor(cors: CorsProvider, detail?: string) {\n super(cors, StatusCodes.UNAUTHORIZED, detail);\n }\n}\n\nexport class Forbidden extends ErrorResponse {\n constructor(cors: CorsProvider, detail?: string) {\n super(cors, StatusCodes.FORBIDDEN, detail);\n }\n}\n\nexport class NotFound extends ErrorResponse {\n constructor(cors: CorsProvider, detail?: string) {\n super(cors, StatusCodes.NOT_FOUND, detail);\n }\n}\n\nexport class MethodNotAllowed extends ErrorResponse {\n constructor(cors: CorsProvider, method: string) {\n super(\n cors,\n StatusCodes.METHOD_NOT_ALLOWED,\n `${method} method not allowed.`\n );\n this.headers.set(\"Allow\", this.getAllowMethods());\n }\n\n public override get json(): ErrorJson & { allowed: Method[] } {\n return {\n ...super.json,\n allowed: this.cors.getAllowMethods(),\n };\n }\n}\n\nexport class InternalServerError extends ErrorResponse {\n constructor(cors: CorsProvider, detail?: string) {\n super(cors, StatusCodes.INTERNAL_SERVER_ERROR, detail);\n }\n}\n\nexport class NotImplemented extends ErrorResponse {\n constructor(cors: CorsProvider) {\n super(cors, StatusCodes.NOT_IMPLEMENTED);\n }\n}\n","/*\n * Copyright (C) 2025 Ty Busby\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { isMethod, Method, Time } from \"./common\";\nimport {\n CorsProvider,\n Head,\n InternalServerError,\n MethodNotAllowed,\n NotImplemented,\n Options,\n WorkerResponse,\n} from \"./response\";\n\nexport abstract class BasicWorker implements CorsProvider {\n private readonly _requestUrl: URL;\n\n constructor(\n private readonly _request: Request,\n private readonly _env: Env = {},\n private readonly _ctx?: ExecutionContext\n ) {\n this._requestUrl = new URL(this.request.url);\n }\n\n protected get request(): Request {\n return this._request;\n }\n\n protected get requestUrl(): URL {\n return this._requestUrl;\n }\n\n protected get env(): Env {\n return this._env;\n }\n\n protected get ctx(): ExecutionContext | undefined {\n return this._ctx;\n }\n\n public async fetch(): Promise<Response> {\n if (!this.isAllowed(this.request.method)) {\n return this.getResponse(MethodNotAllowed, this.request.method);\n }\n\n try {\n return this.dispatch(this.request);\n } catch (error) {\n return this.getResponse(InternalServerError, String(error));\n }\n }\n\n protected async dispatch(request: Request): Promise<Response> {\n // Instead of using this.request, always pass in the request.\n // This enables creation of special reqeusts, for example for\n // HEAD requests.\n const method = request.method as Method;\n switch (method) {\n case Method.GET:\n return await this.get();\n case Method.PUT:\n return await this.put();\n case Method.POST:\n return await this.post();\n case Method.PATCH:\n return await this.patch();\n case Method.DELETE:\n return await this.delete();\n case Method.HEAD:\n return await this.head();\n case Method.OPTIONS:\n return await this.options();\n default:\n return this.getResponse(MethodNotAllowed, method);\n }\n }\n\n protected get(): Response | Promise<Response> {\n return this.getResponse(NotImplemented);\n }\n\n protected put(): Response | Promise<Response> {\n return this.getResponse(NotImplemented);\n }\n\n protected post(): Response | Promise<Response> {\n return this.getResponse(NotImplemented);\n }\n\n protected patch(): Response | Promise<Response> {\n return this.getResponse(NotImplemented);\n }\n\n protected delete(): Response | Promise<Response> {\n return this.getResponse(NotImplemented);\n }\n\n protected options(): Response | Promise<Response> {\n return this.getResponse(Options);\n }\n\n protected async head(): Promise<Response> {\n // For HEAD method, we need to create a new GET request and\n // pass that through normal processing. Body is then removed\n // from the GET response and passed back as the HEAD response.\n return this.getResponse(\n Head,\n await this.dispatch(\n new Request(this.request, { method: Method.GET })\n )\n );\n }\n\n protected getResponse<\n T extends WorkerResponse,\n Ctor extends new (cors: CorsProvider, ...args: any[]) => T\n >(\n ResponseClass: Ctor,\n ...args: ConstructorParameters<Ctor> extends [any, ...infer R]\n ? R\n : never\n ): Response {\n return new ResponseClass(this, ...args).createResponse();\n }\n\n public getAllowOrigins(): string[] {\n return [\"*\"];\n }\n\n public getAllowMethods(): Method[] {\n return [Method.GET, Method.OPTIONS, Method.HEAD];\n }\n\n public isAllowed(method: string): boolean {\n return isMethod(method) && this.getAllowMethods().includes(method);\n }\n\n public getAllowHeaders(): string[] {\n return [\"Content-Type\"];\n }\n\n public getMaxAge(): number {\n return Time.Week;\n }\n\n public getOrigin(): string | null {\n return this.request.headers.get(\"Origin\");\n }\n}\n","/*\n * Copyright (C) 2025 Ty Busby\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ensure, Method } from \"./common\";\nimport { RoutedWorker } from \"./routed-worker\";\n\nexport type RouteCallback = (...matches: string[]) => Response | Promise<Response>;\n\nexport type RouteInit = [Method, string, RouteCallback];\n\nexport class Route {\n public readonly pattern: RegExp;\n\n constructor(pattern: RegExp | string, public callback: RouteCallback) {\n this.pattern = new RegExp(pattern);\n }\n}\n\nexport class Routes {\n private routes = new Map<Method, Route[]>();\n\n constructor(private readonly worker: RoutedWorker) {}\n\n public append(method: Method, route: Route) {\n const boundRoute = new Route(route.pattern, route.callback.bind(this.worker));\n\n ensure(this.routes, method, () => []).push(boundRoute);\n\n return this;\n }\n\n public get(method: Method, url: string): Route | undefined {\n const array = this.routes.get(method);\n if (!array) return undefined;\n\n return array.find(({ pattern }) => pattern.test(new URL(url).pathname));\n }\n}\n","/*\n * Copyright (C) 2025 Ty Busby\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BasicWorker } from \"./basic-worker\";\nimport { Method } from \"./common\";\nimport { NotFound } from \"./response\";\nimport { Route, Routes, RouteInit, RouteCallback } from \"./route\";\n\nexport abstract class RoutedWorker extends BasicWorker {\n private readonly routes: Routes = new Routes(this);\n\n constructor(request: Request, env: Env = {}, ctx?: ExecutionContext) {\n super(request, env, ctx);\n }\n\n protected initialize(routes: RouteInit[]) {\n routes.forEach((route) => {\n this.addRoute(route[0], route[1], route[2]);\n });\n }\n\n protected addRoute(method: Method, pattern: string, callback: RouteCallback) {\n this.routes.append(method, new Route(pattern, callback));\n return this;\n }\n\n protected async dispatch(request: Request): Promise<Response> {\n const route = this.routes.get(request.method as Method, request.url);\n if (!route) return await super.dispatch(request);\n\n const match = this.requestUrl.pathname.match(route.pattern);\n return await route.callback(...(match ?? []));\n }\n\n protected override get(): Response | Promise<Response> {\n return this.getResponse(NotFound);\n }\n\n protected override put(): Response | Promise<Response> {\n return this.getResponse(NotFound);\n }\n\n protected override post(): Response | Promise<Response> {\n return this.getResponse(NotFound);\n }\n\n protected override patch(): Response | Promise<Response> {\n return this.getResponse(NotFound);\n }\n\n protected override delete(): Response | Promise<Response> {\n return this.getResponse(NotFound);\n }\n}\n"],"mappings":"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","names":["StatusCodes","Method","MimeType"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/common.ts","../src/response.ts","../src/basic-worker.ts","../src/route.ts","../src/routed-worker.ts"],"sourcesContent":["/*\n * Copyright (C) 2025 Ty Busby\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport { StatusCodes } from \"http-status-codes\";\n\nexport * from \"./common\";\nexport * from \"./response\";\nexport * from \"./basic-worker\";\nexport * from \"./routed-worker\";\nexport * from \"./route\";\n","/*\n * Copyright (C) 2025 Ty Busby\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport const Time = {\n Second: 1,\n Minute: 60,\n Hour: 60 * 60,\n Day: 60 * 60 * 24,\n Week: 60 * 60 * 24 * 7,\n} as const;\n\nexport enum Method {\n GET = \"GET\",\n PUT = \"PUT\",\n POST = \"POST\",\n PATCH = \"PATCH\",\n DELETE = \"DELETE\",\n HEAD = \"HEAD\",\n OPTIONS = \"OPTIONS\",\n}\n\nconst METHOD_SET: Set<string> = new Set(Object.values(Method));\n\nexport function isMethod(value: string): value is Method {\n return METHOD_SET.has(value);\n}\n\nexport function ensure<K, V>(map: Map<K, V>, key: K, factory: () => V): V {\n let value = map.get(key);\n if (value === undefined) {\n value = factory();\n map.set(key, value);\n }\n return value;\n}\n\nexport function getContentType(type: MimeType): string {\n if (ADD_CHARSET.has(type)) {\n return `${type}; charset=utf-8`;\n }\n return type;\n}\n\nexport enum MimeType {\n PLAIN_TEXT = \"text/plain\",\n HTML = \"text/html\",\n CSS = \"text/css\",\n CSV = \"text/csv\",\n XML = \"text/xml\",\n MARKDOWN = \"text/markdown\",\n RICH_TEXT = \"text/richtext\",\n JSON = \"application/json\",\n XML_APP = \"application/xml\",\n YAML = \"application/x-yaml\",\n FORM_URLENCODED = \"application/x-www-form-urlencoded\",\n NDJSON = \"application/x-ndjson\",\n MSGPACK = \"application/x-msgpack\",\n PROTOBUF = \"application/x-protobuf\",\n MULTIPART_FORM_DATA = \"multipart/form-data\",\n MULTIPART_MIXED = \"multipart/mixed\",\n MULTIPART_ALTERNATIVE = \"multipart/alternative\",\n MULTIPART_DIGEST = \"multipart/digest\",\n MULTIPART_RELATED = \"multipart/related\",\n MULTIPART_SIGNED = \"multipart/signed\",\n MULTIPART_ENCRYPTED = \"multipart/encrypted\",\n OCTET_STREAM = \"application/octet-stream\",\n PDF = \"application/pdf\",\n ZIP = \"application/zip\",\n GZIP = \"application/gzip\",\n MSWORD = \"application/msword\",\n DOCX = \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n EXCEL = \"application/vnd.ms-excel\",\n XLSX = \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n POWERPOINT = \"application/vnd.ms-powerpoint\",\n PPTX = \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n ICO = \"image/x-icon\",\n ICO_MS = \"image/vnd.microsoft.icon\",\n GIF = \"image/gif\",\n PNG = \"image/png\",\n JPEG = \"image/jpeg\",\n WEBP = \"image/webp\",\n SVG = \"image/svg+xml\",\n HEIF = \"image/heif\",\n AVIF = \"image/avif\",\n EVENT_STREAM = \"text/event-stream\",\n TAR = \"application/x-tar\",\n BZIP2 = \"application/x-bzip2\",\n}\n\nconst ADD_CHARSET: Set<MimeType> = new Set([\n MimeType.PLAIN_TEXT,\n MimeType.HTML,\n MimeType.CSS,\n MimeType.CSV,\n MimeType.MARKDOWN,\n MimeType.XML,\n MimeType.JSON,\n MimeType.XML_APP,\n MimeType.FORM_URLENCODED,\n MimeType.NDJSON,\n MimeType.RICH_TEXT,\n MimeType.SVG,\n]);\n","/*\n * Copyright (C) 2025 Ty Busby\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getReasonPhrase, StatusCodes } from \"http-status-codes\";\nimport { getContentType, Method, MimeType } from \"./common\";\n\nexport interface CorsProvider {\n getOrigin(): string | null;\n getAllowOrigins(): string[];\n getAllowMethods(): Method[];\n getAllowHeaders(): string[];\n getMaxAge(): number;\n}\n\nexport interface ErrorJson {\n code: number;\n error: string;\n details: string;\n}\n\nexport class WorkerResponse {\n private _headers: Headers = new Headers();\n private _body: BodyInit | null;\n\n constructor(\n protected readonly cors: CorsProvider,\n content: string | null = null,\n protected readonly code: StatusCodes = StatusCodes.OK,\n protected readonly mimeType: MimeType = MimeType.JSON\n ) {\n this._body = this.code === StatusCodes.NO_CONTENT ? null : content;\n }\n\n public createResponse(): Response {\n this.addCorsHeaders();\n if (this.body) {\n this.headers.set(\"Content-Type\", getContentType(this.mimeType));\n }\n return new Response(this.body, this.responseInit);\n }\n\n protected get responseInit(): ResponseInit {\n return {\n headers: this.headers,\n status: this.code,\n statusText: getReasonPhrase(this.code),\n };\n }\n\n protected get body(): BodyInit | null {\n return this._body;\n }\n\n protected get headers(): Headers {\n return this._headers;\n }\n\n protected set headers(headers: Headers) {\n this._headers = headers;\n }\n\n protected addCorsHeaders(): void {\n const origin = this.cors.getOrigin();\n if (!origin) return; // no Origin, skip CORS\n\n if (this.getAllowOrigins().includes(\"*\")) {\n this.headers.set(\"Access-Control-Allow-Origin\", \"*\");\n } else if (this.getAllowOrigins().includes(origin)) {\n this.headers.set(\"Access-Control-Allow-Origin\", origin);\n this.headers.set(\"Access-Control-Allow-Credentials\", \"true\");\n this.headers.set(\"Vary\", \"Origin\");\n }\n this.headers.set(\n \"Access-Control-Allow-Headers\",\n this.getAllowHeaders()\n );\n this.headers.set(\n \"Access-Control-Allow-Methods\",\n this.getAllowMethods()\n );\n this.headers.set(\"Access-Control-Max-Age\", this.getMaxAge());\n this.headers.set(\"X-Content-Type-Options\", \"nosniff\");\n }\n\n protected getAllowMethods(): string {\n return this.cors.getAllowMethods().join(\", \");\n }\n\n protected getAllowHeaders(): string {\n return this.cors.getAllowHeaders().join(\", \");\n }\n\n protected getAllowOrigins(): string[] {\n return this.cors.getAllowOrigins();\n }\n\n protected getMaxAge(): string {\n return String(this.cors.getMaxAge());\n }\n}\n\nexport class JsonResponse extends WorkerResponse {\n private _json: object;\n constructor(\n cors: CorsProvider,\n content: object = {},\n code: StatusCodes = StatusCodes.OK\n ) {\n super(cors, null, code, MimeType.JSON);\n this._json = content;\n }\n\n public get json(): object {\n return this._json;\n }\n\n public set json(json: object) {\n this._json = json;\n }\n\n protected override get body(): string {\n return JSON.stringify(this.json);\n }\n}\n\nexport class HtmlResponse extends WorkerResponse {\n constructor(\n cors: CorsProvider,\n content: string,\n code: StatusCodes = StatusCodes.OK,\n type: MimeType = MimeType.HTML\n ) {\n super(cors, content, code, type);\n }\n}\n\nexport class TextResponse extends WorkerResponse {\n constructor(\n cors: CorsProvider,\n content: string,\n code: StatusCodes = StatusCodes.OK,\n type: MimeType = MimeType.PLAIN_TEXT\n ) {\n super(cors, content, code, type);\n }\n}\n\n/**\n * Remove the body from a GET response.\n */\nexport class Head extends WorkerResponse {\n constructor(cors: CorsProvider, response: Response) {\n super(cors, null, response.status);\n this.headers = new Headers(response.headers);\n }\n}\n\nexport class Options extends WorkerResponse {\n constructor(cors: CorsProvider) {\n super(cors, null, StatusCodes.NO_CONTENT);\n this.headers.set(\"Allow\", this.getAllowMethods());\n }\n}\n\nexport class ErrorResponse extends JsonResponse {\n constructor(\n cors: CorsProvider,\n code: StatusCodes,\n protected details?: string\n ) {\n super(cors, {}, code);\n }\n\n public override get json(): ErrorJson {\n return {\n code: this.code,\n error: getReasonPhrase(this.code),\n details: this.details ?? getReasonPhrase(this.code),\n };\n }\n}\n\nexport class BadRequest extends ErrorResponse {\n constructor(cors: CorsProvider, detail?: string) {\n super(cors, StatusCodes.BAD_REQUEST, detail);\n }\n}\n\nexport class Unauthorized extends ErrorResponse {\n constructor(cors: CorsProvider, detail?: string) {\n super(cors, StatusCodes.UNAUTHORIZED, detail);\n }\n}\n\nexport class Forbidden extends ErrorResponse {\n constructor(cors: CorsProvider, detail?: string) {\n super(cors, StatusCodes.FORBIDDEN, detail);\n }\n}\n\nexport class NotFound extends ErrorResponse {\n constructor(cors: CorsProvider, detail?: string) {\n super(cors, StatusCodes.NOT_FOUND, detail);\n }\n}\n\nexport class MethodNotAllowed extends ErrorResponse {\n constructor(cors: CorsProvider, method: string) {\n super(\n cors,\n StatusCodes.METHOD_NOT_ALLOWED,\n `${method} method not allowed.`\n );\n this.headers.set(\"Allow\", this.getAllowMethods());\n }\n\n public override get json(): ErrorJson & { allowed: Method[] } {\n return {\n ...super.json,\n allowed: this.cors.getAllowMethods(),\n };\n }\n}\n\nexport class InternalServerError extends ErrorResponse {\n constructor(cors: CorsProvider, detail?: string) {\n super(cors, StatusCodes.INTERNAL_SERVER_ERROR, detail);\n }\n}\n\nexport class NotImplemented extends ErrorResponse {\n constructor(cors: CorsProvider) {\n super(cors, StatusCodes.NOT_IMPLEMENTED);\n }\n}\n","/*\n * Copyright (C) 2025 Ty Busby\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { isMethod, Method, Time } from \"./common\";\nimport {\n CorsProvider,\n Head,\n InternalServerError,\n MethodNotAllowed,\n NotImplemented,\n Options,\n WorkerResponse,\n} from \"./response\";\n\nexport abstract class BasicWorker implements CorsProvider {\n private readonly _requestUrl: URL;\n\n constructor(\n private readonly _request: Request,\n private readonly _env: Env = {},\n private readonly _ctx?: ExecutionContext\n ) {\n this._requestUrl = new URL(this.request.url);\n }\n\n protected get request(): Request {\n return this._request;\n }\n\n protected get requestUrl(): URL {\n return this._requestUrl;\n }\n\n protected get env(): Env {\n return this._env;\n }\n\n protected get ctx(): ExecutionContext | undefined {\n return this._ctx;\n }\n\n public async fetch(): Promise<Response> {\n if (!this.isAllowed(this.request.method)) {\n return this.getResponse(MethodNotAllowed, this.request.method);\n }\n\n try {\n return await this.dispatch(this.request);\n } catch (error) {\n return this.getResponse(InternalServerError, String(error));\n }\n }\n\n protected async dispatch(request: Request): Promise<Response> {\n // Instead of using this.request, always pass in the request.\n // This enables creation of special reqeusts, for example for\n // HEAD requests.\n const method = request.method as Method;\n const handler: Record<Method, () => Response | Promise<Response>> = {\n GET: () => this.get(),\n PUT: () => this.put(),\n POST: () => this.post(),\n PATCH: () => this.patch(),\n DELETE: () => this.delete(),\n HEAD: () => this.head(),\n OPTIONS: () => this.options(),\n };\n return (handler[method] ?? (() => this.getResponse(MethodNotAllowed, method)))();\n }\n\n protected get(): Response | Promise<Response> {\n return this.getResponse(NotImplemented);\n }\n\n protected put(): Response | Promise<Response> {\n return this.getResponse(NotImplemented);\n }\n\n protected post(): Response | Promise<Response> {\n return this.getResponse(NotImplemented);\n }\n\n protected patch(): Response | Promise<Response> {\n return this.getResponse(NotImplemented);\n }\n\n protected delete(): Response | Promise<Response> {\n return this.getResponse(NotImplemented);\n }\n\n protected options(): Response | Promise<Response> {\n return this.getResponse(Options);\n }\n\n protected async head(): Promise<Response> {\n // For HEAD method, we need to create a new GET request and\n // pass that through normal processing. Body is then removed\n // from the GET response and passed back as the HEAD response.\n return this.getResponse(\n Head,\n await this.dispatch(new Request(this.request, { method: Method.GET }))\n );\n }\n\n protected getResponse<\n T extends WorkerResponse,\n Ctor extends new (cors: CorsProvider, ...args: any[]) => T\n >(\n ResponseClass: Ctor,\n ...args: ConstructorParameters<Ctor> extends [any, ...infer R] ? R : never\n ): Response {\n return new ResponseClass(this, ...args).createResponse();\n }\n\n public getAllowOrigins(): string[] {\n return [\"*\"];\n }\n\n public getAllowMethods(): Method[] {\n return [Method.GET, Method.OPTIONS, Method.HEAD];\n }\n\n public isAllowed(method: string): boolean {\n return isMethod(method) && this.getAllowMethods().includes(method);\n }\n\n public getAllowHeaders(): string[] {\n return [\"Content-Type\"];\n }\n\n public getMaxAge(): number {\n return Time.Week;\n }\n\n public getOrigin(): string | null {\n return this.request.headers.get(\"Origin\");\n }\n}\n","/*\n * Copyright (C) 2025 Ty Busby\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ensure, Method } from \"./common\";\n\nexport type RouteCallback = (...matches: string[]) => Response | Promise<Response>;\n\nexport type RouteInit = [Method, string, RouteCallback];\n\nexport class Route {\n public readonly pattern: RegExp;\n\n constructor(pattern: RegExp | string, public readonly callback: RouteCallback) {\n this.pattern = new RegExp(pattern);\n }\n}\n\nexport class Routes {\n private readonly routes = new Map<Method, Route[]>();\n\n public add(method: Method, route: Route) {\n ensure(this.routes, method, () => []).push(route);\n return this;\n }\n\n public get(method: Method, url: string): Route | undefined {\n const array = this.routes.get(method);\n if (!array) return undefined;\n\n return array.find(({ pattern }) => pattern.test(new URL(url).pathname));\n }\n}\n","/*\n * Copyright (C) 2025 Ty Busby\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BasicWorker } from \"./basic-worker\";\nimport { Method } from \"./common\";\nimport { NotFound } from \"./response\";\nimport { Route, Routes, RouteInit, RouteCallback } from \"./route\";\n\nexport abstract class RoutedWorker extends BasicWorker {\n private readonly routes: Routes = new Routes();\n\n protected initialize(routes: RouteInit[]) {\n routes.forEach((route) => {\n this.addRoute(route[0], route[1], route[2]);\n });\n }\n\n protected addRoute(method: Method, pattern: string, callback: RouteCallback) {\n this.routes.add(method, new Route(pattern, callback));\n return this;\n }\n\n protected async dispatch(request: Request): Promise<Response> {\n const route = this.routes.get(request.method as Method, request.url);\n if (!route) return super.dispatch(request);\n\n const match = this.requestUrl.pathname.match(route.pattern) ?? [];\n return route.callback.call(this, ...match);\n }\n\n protected override get(): Response | Promise<Response> {\n return this.getResponse(NotFound);\n }\n\n protected override put(): Response | Promise<Response> {\n return this.getResponse(NotFound);\n }\n\n protected override post(): Response | Promise<Response> {\n return this.getResponse(NotFound);\n }\n\n protected override patch(): Response | Promise<Response> {\n return this.getResponse(NotFound);\n }\n\n protected override delete(): Response | Promise<Response> {\n return this.getResponse(NotFound);\n }\n}\n"],"mappings":"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","names":["StatusCodes","Method","MimeType"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adonix.org/cloud-spark",
3
- "version": "0.0.40",
3
+ "version": "0.0.41",
4
4
  "description": "Ignite your Cloudflare Workers with a type-safe library for rapid development.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",