Skip to content

Commit

Permalink
Fix cors interceptor
Browse files Browse the repository at this point in the history
Bump std lib version
  • Loading branch information
jollytoad committed Apr 12, 2024
1 parent e3a735a commit c196ed9
Show file tree
Hide file tree
Showing 16 changed files with 73 additions and 47 deletions.
8 changes: 7 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,15 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to
[Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [unreleased]
## [Unreleased]

### Changed

- Split `@http/fns` into separate packages.
- [@http/generate/generate-routes-module] `httpModulePrefix` replaces `httpFns`
and `jsr` options, defaulting to `@http/`.
- [@http/interceptor/cors] `cors()` now returns an `Interceptors` objects for
direct use with `intercept()` or `init()`.

## [0.7.0]

Expand Down
34 changes: 17 additions & 17 deletions deno.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,23 +13,23 @@
"verbatimModuleSyntax": true
},
"imports": {
"@http/discovery": "jsr:@http/discovery@0.9.0-beta.1",
"@http/examples": "jsr:@http/examples@0.9.0-beta.1",
"@http/generate": "jsr:@http/generate@0.9.0-beta.1",
"@http/handler": "jsr:@http/handler@0.9.0-beta.1",
"@http/host-deno-deploy": "jsr:@http/host-deno-deploy@0.9.0-beta.1",
"@http/host-deno-local": "jsr:@http/host-deno-local@0.9.0-beta.1",
"@http/interceptor": "jsr:@http/interceptor@0.9.0-beta.1",
"@http/request": "jsr:@http/request@0.9.0-beta.1",
"@http/response": "jsr:@http/response@0.9.0-beta.1",
"@http/route": "jsr:@http/route@0.9.0-beta.1",
"@http/route-deno": "jsr:@http/route-deno@0.9.0-beta.1",
"@std/assert": "jsr:@std/assert@^0.221.0",
"@std/collections": "jsr:@std/collections@^0.221.0",
"@std/http": "jsr:@std/http@^0.221.0",
"@std/media-types": "jsr:@std/media-types@^0.221.0",
"@std/net": "jsr:@std/net@^0.221.0",
"@std/path": "jsr:@std/path@^0.221.0"
"@http/discovery": "jsr:@http/discovery@0.9.0-beta.2",
"@http/examples": "jsr:@http/examples@0.9.0-beta.2",
"@http/generate": "jsr:@http/generate@0.9.0-beta.2",
"@http/handler": "jsr:@http/handler@0.9.0-beta.2",
"@http/host-deno-deploy": "jsr:@http/host-deno-deploy@0.9.0-beta.2",
"@http/host-deno-local": "jsr:@http/host-deno-local@0.9.0-beta.2",
"@http/interceptor": "jsr:@http/interceptor@0.9.0-beta.2",
"@http/request": "jsr:@http/request@0.9.0-beta.2",
"@http/response": "jsr:@http/response@0.9.0-beta.2",
"@http/route": "jsr:@http/route@0.9.0-beta.2",
"@http/route-deno": "jsr:@http/route-deno@0.9.0-beta.2",
"@std/assert": "jsr:@std/assert@^0.222.1",
"@std/collections": "jsr:@std/collections@^0.222.1",
"@std/http": "jsr:@std/http@^0.222.1",
"@std/media-types": "jsr:@std/media-types@^0.222.1",
"@std/net": "jsr:@std/net@^0.222.1",
"@std/path": "jsr:@std/path@^0.222.1"
},
"workspaces": [
"./packages/discovery",
Expand Down
25 changes: 13 additions & 12 deletions import_map_local.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
"@http/examples/by-pattern": "./packages/examples/by_pattern.ts",
"@http/examples/by-sub-pattern": "./packages/examples/by_sub_pattern.ts",
"@http/examples/cascade": "./packages/examples/cascade.ts",
"@http/examples/cors": "./packages/examples/cors.ts",
"@http/examples/dynamic-route": "./packages/examples/dynamic_route.ts",
"@http/examples/generated-routes": "./packages/examples/generated_routes.ts",
"@http/examples/handle": "./packages/examples/handle.ts",
Expand Down Expand Up @@ -73,17 +74,17 @@
"@http/route/handle": "./packages/route/handle.ts",
"@http/route/types": "./packages/route/types.ts",
"@http/route/with-fallback": "./packages/route/with_fallback.ts",
"@std/assert": "jsr:@std/assert@^0.221.0",
"@std/assert/": "jsr:/@std/assert@^0.221.0/",
"@std/collections": "jsr:@std/collections@^0.221.0",
"@std/collections/": "jsr:/@std/collections@^0.221.0/",
"@std/http": "jsr:@std/http@^0.221.0",
"@std/http/": "jsr:/@std/http@^0.221.0/",
"@std/media-types": "jsr:@std/media-types@^0.221.0",
"@std/media-types/": "jsr:/@std/media-types@^0.221.0/",
"@std/net": "jsr:@std/net@^0.221.0",
"@std/net/": "jsr:/@std/net@^0.221.0/",
"@std/path": "jsr:@std/path@^0.221.0",
"@std/path/": "jsr:/@std/path@^0.221.0/"
"@std/assert": "jsr:@std/assert@^0.222.1",
"@std/assert/": "jsr:/@std/assert@^0.222.1/",
"@std/collections": "jsr:@std/collections@^0.222.1",
"@std/collections/": "jsr:/@std/collections@^0.222.1/",
"@std/http": "jsr:@std/http@^0.222.1",
"@std/http/": "jsr:/@std/http@^0.222.1/",
"@std/media-types": "jsr:@std/media-types@^0.222.1",
"@std/media-types/": "jsr:/@std/media-types@^0.222.1/",
"@std/net": "jsr:@std/net@^0.222.1",
"@std/net/": "jsr:/@std/net@^0.222.1/",
"@std/path": "jsr:@std/path@^0.222.1",
"@std/path/": "jsr:/@std/path@^0.222.1/"
}
}
2 changes: 1 addition & 1 deletion packages/discovery/deno.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@http/discovery",
"version": "0.9.0-beta.1",
"version": "0.9.0-beta.2",
"exports": {
"./as-serializable-pattern": "./as_serializable_pattern.ts",
"./discover-routes": "./discover_routes.ts",
Expand Down
9 changes: 9 additions & 0 deletions packages/examples/cors.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { intercept } from "@http/interceptor/intercept";
import { cors } from "@http/interceptor/cors";

const server = Deno.serve(intercept(
() => new Response("Hello"),
cors(),
)) as Deno.HttpServer;

export default server;
3 changes: 2 additions & 1 deletion packages/examples/deno.json
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
{
"name": "@http/examples",
"version": "0.9.0-beta.1",
"version": "0.9.0-beta.2",
"exports": {
"./by-media-type": "./by_media_type.ts",
"./by-method": "./by_method.ts",
"./by-pattern": "./by_pattern.ts",
"./by-sub-pattern": "./by_sub_pattern.ts",
"./cascade": "./cascade.ts",
"./cors": "./cors.ts",
"./dynamic-route": "./dynamic_route.ts",
"./generated-routes": "./generated_routes.ts",
"./handle": "./handle.ts",
Expand Down
2 changes: 1 addition & 1 deletion packages/generate/deno.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@http/generate",
"version": "0.9.0-beta.1",
"version": "0.9.0-beta.2",
"exports": {
"./generate-routes-module": "./generate_routes_module.ts"
}
Expand Down
2 changes: 1 addition & 1 deletion packages/handler/deno.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@http/handler",
"version": "0.9.0-beta.1",
"version": "0.9.0-beta.2",
"exports": {
"./lazy": "./lazy.ts",
"./map-data": "./map_data.ts",
Expand Down
2 changes: 1 addition & 1 deletion packages/host-deno-deploy/deno.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@http/host-deno-deploy",
"version": "0.9.0-beta.1",
"version": "0.9.0-beta.2",
"exports": {
"./init": "./init.ts"
}
Expand Down
2 changes: 1 addition & 1 deletion packages/host-deno-local/deno.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@http/host-deno-local",
"version": "0.9.0-beta.1",
"version": "0.9.0-beta.2",
"exports": {
"./init": "./init.ts",
"./load-key-and-cert": "./load_key_and_cert.ts",
Expand Down
21 changes: 15 additions & 6 deletions packages/interceptor/cors.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,32 @@
import { appendHeaders } from "@http/response/append-headers";
import type { ResponseInterceptor } from "./types.ts";
import type { Interceptors } from "./types.ts";

export interface CorsOptions {
allowOrigin?: "*" | string[];
allowMethods?: "*" | string[];
allowHeaders?: "*" | string[];
}

/**
* Set of interceptors to handle CORS (Cross-Origin Resource Sharing) requests.
*
* @param opts configuration options
*/
export function cors(opts?: CorsOptions): Interceptors<unknown[], Response> {
return {
response: [corsResponse(opts)],
};
}

/**
* Create a ResponseInterceptor that adds the appropriate CORS headers when required.
*
* @param opts configuration options
* @returns a ResponseInterceptor that can be used with `intercept` or `interceptResponse`.
*/
export function cors(
export function corsResponse(
opts?: CorsOptions,
): ResponseInterceptor {
): (req: Request, res: Response) => Response {
return (req, res) => {
const origin = req.headers.get("Origin");

Expand Down Expand Up @@ -87,8 +98,6 @@ const SAFELIST = new Set([
]);

function exposedHeaders(response: Response) {
const keys = [
...(response.headers as unknown as DomIterable<string, string>).keys(),
];
const keys = [...response.headers.keys()];
return keys.filter((key) => !SAFELIST.has(key.toLowerCase())).join(", ");
}
2 changes: 1 addition & 1 deletion packages/interceptor/deno.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@http/interceptor",
"version": "0.9.0-beta.1",
"version": "0.9.0-beta.2",
"exports": {
"./by-status": "./by_status.ts",
"./cors": "./cors.ts",
Expand Down
2 changes: 1 addition & 1 deletion packages/request/deno.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@http/request",
"version": "0.9.0-beta.1",
"version": "0.9.0-beta.2",
"exports": {
"./body-as-object": "./body_as_object.ts",
"./required-header": "./required_header.ts",
Expand Down
2 changes: 1 addition & 1 deletion packages/response/deno.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@http/response",
"version": "0.9.0-beta.1",
"version": "0.9.0-beta.2",
"exports": {
"./accepted": "./accepted.ts",
"./append-headers": "./append_headers.ts",
Expand Down
2 changes: 1 addition & 1 deletion packages/route-deno/deno.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@http/route-deno",
"version": "0.9.0-beta.1",
"version": "0.9.0-beta.2",
"exports": {
"./static-route": "./static_route.ts"
}
Expand Down
2 changes: 1 addition & 1 deletion packages/route/deno.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@http/route",
"version": "0.9.0-beta.1",
"version": "0.9.0-beta.2",
"exports": {
"./as-url-pattern": "./as_url_pattern.ts",
"./by-media-type": "./by_media_type.ts",
Expand Down

0 comments on commit c196ed9

Please sign in to comment.