diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2024-08-08 17:54:39 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-08-08 16:54:39 +0000 |
commit | ffe1bfd54c2065fe718872f67e19e8a863c0bf22 (patch) | |
tree | cf315d0c24fd72afd7957622008e7c1893d68ab8 /tests/registry | |
parent | 3f692bed0a62de79895ea3373b9004fd6a542035 (diff) |
feat: `deno init --serve` (#24897)
This commit adds "--serve" flag to "deno init" subcommand,
that provides a template for quick starting a project using
"deno serve".
---------
Co-authored-by: Asher Gomez <ashersaupingomez@gmail.com>
Diffstat (limited to 'tests/registry')
-rw-r--r-- | tests/registry/jsr/@std/http/1.0.0/mod.ts | 116 | ||||
-rw-r--r-- | tests/registry/jsr/@std/http/1.0.0_meta.json | 5 | ||||
-rw-r--r-- | tests/registry/jsr/@std/http/meta.json | 8 |
3 files changed, 129 insertions, 0 deletions
diff --git a/tests/registry/jsr/@std/http/1.0.0/mod.ts b/tests/registry/jsr/@std/http/1.0.0/mod.ts new file mode 100644 index 000000000..0a0e82847 --- /dev/null +++ b/tests/registry/jsr/@std/http/1.0.0/mod.ts @@ -0,0 +1,116 @@ +// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. + +/** + * Request handler for {@linkcode Route}. + * + * > [!WARNING] + * > **UNSTABLE**: New API, yet to be vetted. + * + * @experimental + * + * Extends {@linkcode Deno.ServeHandlerInfo} by adding adding a `params` argument. + * + * @param request Request + * @param info Request info + * @param params URL pattern result + */ +export type Handler = ( + request: Request, + info?: Deno.ServeHandlerInfo, + params?: URLPatternResult | null, +) => Response | Promise<Response>; + +/** + * Route configuration for {@linkcode route}. + * + * > [!WARNING] + * > **UNSTABLE**: New API, yet to be vetted. + * + * @experimental + */ +export interface Route { + /** + * Request URL pattern. + */ + pattern: URLPattern; + /** + * Request method. + * + * @default {"GET"} + */ + method?: string; + /** + * Request handler. + */ + handler: Handler; +} + +/** + * Routes requests to different handlers based on the request path and method. + * + * > [!WARNING] + * > **UNSTABLE**: New API, yet to be vetted. + * + * @experimental + * + * @example Usage + * ```ts no-eval + * import { route, type Route } from "@std/http/route"; + * import { serveDir } from "@std/http/file-server"; + * + * const routes: Route[] = [ + * { + * pattern: new URLPattern({ pathname: "/about" }), + * handler: () => new Response("About page"), + * }, + * { + * pattern: new URLPattern({ pathname: "/users/:id" }), + * handler: (_req, _info, params) => new Response(params?.pathname.groups.id), + * }, + * { + * pattern: new URLPattern({ pathname: "/static/*" }), + * handler: (req: Request) => serveDir(req) + * } + * ]; + * + * function defaultHandler(_req: Request) { + * return new Response("Not found", { status: 404 }); + * } + * + * Deno.serve(route(routes, defaultHandler)); + * ``` + * + * @param routes Route configurations + * @param defaultHandler Default request handler that's returned when no route + * matches the given request. Serving HTTP 404 Not Found or 405 Method Not + * Allowed response can be done in this function. + * @returns Request handler + */ +export function route( + routes: Route[], + defaultHandler: ( + request: Request, + info?: Deno.ServeHandlerInfo, + ) => Response | Promise<Response>, +): ( + request: Request, + info?: Deno.ServeHandlerInfo, +) => Response | Promise<Response> { + // TODO(iuioiua): Use `URLPatternList` once available (https://github.com/whatwg/urlpattern/pull/166) + return (request: Request, info?: Deno.ServeHandlerInfo) => { + for (const route of routes) { + const match = route.pattern.exec(request.url); + if (match) return route.handler(request, info, match); + } + return defaultHandler(request, info); + }; +} + +interface ServeDirOptions { + urlRoot?: string; +} + +// NOTE(bartlomieju): not important, just for testing +export async function serveDir(req: Request, opts: ServeDirOptions = {}): Response | Promise<Response> { + return new Response("hello world") +} diff --git a/tests/registry/jsr/@std/http/1.0.0_meta.json b/tests/registry/jsr/@std/http/1.0.0_meta.json new file mode 100644 index 000000000..9b5dd9d0a --- /dev/null +++ b/tests/registry/jsr/@std/http/1.0.0_meta.json @@ -0,0 +1,5 @@ +{ + "exports": { + ".": "./mod.ts" + } +}
\ No newline at end of file diff --git a/tests/registry/jsr/@std/http/meta.json b/tests/registry/jsr/@std/http/meta.json new file mode 100644 index 000000000..a10332638 --- /dev/null +++ b/tests/registry/jsr/@std/http/meta.json @@ -0,0 +1,8 @@ +{ + "scope": "std", + "name": "http", + "latest": "1.0.0", + "versions": { + "1.0.0": {} + } +} |