summaryrefslogtreecommitdiff
path: root/tests/registry
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2024-08-08 17:54:39 +0100
committerGitHub <noreply@github.com>2024-08-08 16:54:39 +0000
commitffe1bfd54c2065fe718872f67e19e8a863c0bf22 (patch)
treecf315d0c24fd72afd7957622008e7c1893d68ab8 /tests/registry
parent3f692bed0a62de79895ea3373b9004fd6a542035 (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.ts116
-rw-r--r--tests/registry/jsr/@std/http/1.0.0_meta.json5
-rw-r--r--tests/registry/jsr/@std/http/meta.json8
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": {}
+ }
+}