-
Notifications
You must be signed in to change notification settings - Fork 9
fix: accept async/sync middleware on onOriginRequest / onOriginResponse
#78
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
stefanmaric
wants to merge
4
commits into
BunnyWay:main
Choose a base branch
from
stefanmaric:fix/onoriginrequest-async-middleware-signature
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+73
−6
Open
Changes from all commits
Commits
Show all changes
4 commits
Select commit
Hold shift + click to select a range
dc49175
fix: accept async/sync middleware on `onOriginRequest` / `onOriginRes…
stefanmaric 23ccca3
Merge branch 'main' into fix/onoriginrequest-async-middleware-signature
jamie-at-bunny fc252da
Apply suggestion from @jamie-at-bunny
jamie-at-bunny a664318
Merge branch 'main' into fix/onoriginrequest-async-middleware-signature
jamie-at-bunny File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,16 @@ | ||
| --- | ||
| "@bunny.net/edgescript-sdk": patch | ||
| --- | ||
|
|
||
| `onOriginRequest`'s old `Promise<Request> | Promise<Response>` signature | ||
| doesn't accept `async` callbacks returning a mix of the two: TS infers | ||
| `Promise<Request | Response>` for them, which is a supertype the narrower | ||
| union won't accept. Flagged in #63 and partially fixed in #64 (which only | ||
| touched the ambient declaration). | ||
|
|
||
| Widen both hooks, with sync returns too: | ||
|
|
||
| * `onOriginRequest`: `(ctx) => Request | Response | Promise<Request | Response>` | ||
| * `onOriginResponse`: `(ctx) => Response | Promise<Response>` | ||
|
|
||
| Same shape as `ServerHandler`, strictly wider, nothing breaks. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,51 @@ | ||
| // Type-level tests for the middleware signatures on `servePullZone`. | ||
| // The callbacks below are typechecked but never invoked — these | ||
| // exist purely to ensure the public signatures accept all the shapes | ||
| // documented in the JSDoc. If any stop typechecking, it's a regression. | ||
|
|
||
| import type * as Http from "./serve.ts"; | ||
|
|
||
| type OnRequest = Parameters<Http.PullZoneHandler["onOriginRequest"]>[0]; | ||
| type OnResponse = Parameters<Http.PullZoneHandler["onOriginResponse"]>[0]; | ||
|
|
||
| // Async arrow with mixed Request / Response returns — async-flattening | ||
| // produces `Promise<Request | Response>`. Used to fail under the previous | ||
| // `Promise<Request> | Promise<Response>` signature. | ||
| const _asyncMixed: OnRequest = async (ctx) => { | ||
| if (ctx.request.headers.get("upgrade") === "websocket") { | ||
| return new Response(null, { status: 426 }); | ||
| } | ||
| return new Request(ctx.request); | ||
| }; | ||
|
|
||
| // Plain function returning `Promise.resolve(...)` — the classic workaround. | ||
| const _promiseResolve: OnRequest = (ctx) => { | ||
| if (ctx.request.headers.get("x-block") === "1") { | ||
| return Promise.resolve(new Response(null, { status: 403 })); | ||
| } | ||
| return Promise.resolve(new Request(ctx.request)); | ||
| }; | ||
|
|
||
| // Sync returns — mirrors the `ServerHandler` pattern. | ||
| const _sync: OnRequest = (ctx) => { | ||
| if (ctx.request.headers.get("x-fast-path") === "1") { | ||
| return new Response("ok"); | ||
| } | ||
| return new Request(ctx.request); | ||
| }; | ||
|
|
||
| // `onOriginResponse` accepts sync and async too. | ||
| const _resSync: OnResponse = (ctx) => ctx.response; | ||
| const _resAsync: OnResponse = async (ctx) => { | ||
| ctx.response.headers.set("Via", "Custom"); | ||
| return ctx.response; | ||
| }; | ||
|
|
||
| test("middleware type signatures accept sync, async, and mixed returns", () => { | ||
| // Silence unused-var warnings; the real check is at compile time. | ||
| expect(typeof _asyncMixed).toBe("function"); | ||
| expect(typeof _promiseResolve).toBe("function"); | ||
| expect(typeof _sync).toBe("function"); | ||
| expect(typeof _resSync).toBe("function"); | ||
| expect(typeof _resAsync).toBe("function"); | ||
| }); | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Minor nitpick, but we could probably drop this. The inferred type ends up being the same.