Skip to content

Commit 1f1074b

Browse files
committed
Merge pull request #394 from 2chanhaeng/sveltekit/fix
2 parents 542d3bc + 18fd05b commit 1f1074b

File tree

4 files changed

+23
-37
lines changed

4 files changed

+23
-37
lines changed

CHANGES.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,12 @@ To be released.
117117
Separated from `@fedify/fedify/x/sveltekit` to improve modularity and
118118
reduce bundle size. [[#375] by Chanhaeng Lee]
119119

120+
- Fixed SvelteKit integration hook types to correctly infer the request
121+
and response types in hooks. [[#271], [#394] by Chanhaeng Lee]
122+
123+
[#271]: https://github.com/fedify-dev/fedify/pull/271
124+
[#394]: https://github.com/fedify-dev/fedify/pull/394
125+
120126

121127
Version 1.8.8
122128
-------------

packages/sveltekit/deno.json

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,13 @@
33
"version": "1.9.0",
44
"license": "MIT",
55
"imports": {
6-
"@std/assert": "jsr:@std/assert@^1.0.13"
6+
"@std/assert": "jsr:@std/assert@^1.0.13",
7+
"@sveltejs/kit": "npm:@sveltejs/kit@^2.0.0"
78
},
89
"exports": {
910
".": "./src/mod.ts"
1011
},
11-
"exclude": [
12-
"dist",
13-
"node_modules"
14-
],
12+
"exclude": ["dist", "node_modules"],
1513
"tasks": {
1614
"check": "deno fmt --check && deno lint && deno check src/*.ts",
1715
"test": "deno test --allow-net --allow-env"

packages/sveltekit/src/mod.test.ts

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,27 @@
11
import { strictEqual } from "node:assert/strict";
22
import { describe, test } from "node:test";
33
import { fedifyHook } from "./mod.ts";
4+
import type { RequestEvent } from "@sveltejs/kit";
45

5-
interface MockRequestEvent {
6-
request: Request;
7-
}
8-
9-
interface MockHookParams {
10-
event: MockRequestEvent;
11-
resolve: (event: MockRequestEvent) => Promise<Response>;
12-
}
13-
14-
interface MockFederation<T> {
6+
interface MockFederation {
157
fetch(request: Request, options: unknown): Promise<Response>;
168
}
179

1810
describe("fedifyHook", () => {
1911
test("creates hook handler function", () => {
20-
const mockFederation: MockFederation<undefined> = {
12+
const mockFederation = {
2113
fetch: () => Promise.resolve(new Response("OK")),
2214
};
2315

24-
const createContextData = () => undefined;
25-
26-
const hookHandler = fedifyHook(mockFederation as never, createContextData);
16+
const hookHandler = fedifyHook(mockFederation as never);
2717
strictEqual(typeof hookHandler, "function");
2818
});
2919

3020
test("calls federation.fetch with correct parameters", async () => {
3121
let capturedRequest: Request | undefined;
3222
let capturedOptions: unknown;
3323

34-
const mockFederation: MockFederation<string> = {
24+
const mockFederation: MockFederation = {
3525
fetch: (request, options) => {
3626
capturedRequest = request;
3727
capturedOptions = options;
@@ -44,7 +34,7 @@ describe("fedifyHook", () => {
4434
const hookHandler = fedifyHook(mockFederation as never, createContextData);
4535

4636
const mockRequest = new Request("https://example.com/test");
47-
const mockEvent: MockRequestEvent = { request: mockRequest };
37+
const mockEvent: RequestEvent = { request: mockRequest } as RequestEvent;
4838
const mockResolve = () =>
4939
Promise.resolve(new Response("SvelteKit response"));
5040

@@ -64,7 +54,7 @@ describe("fedifyHook", () => {
6454
test("handles async context data creation", async () => {
6555
let capturedContextData: unknown;
6656

67-
const mockFederation: MockFederation<string> = {
57+
const mockFederation: MockFederation = {
6858
fetch: (_request, options) => {
6959
capturedContextData = (options as { contextData: string }).contextData;
7060
return Promise.resolve(new Response("OK"));
@@ -79,7 +69,7 @@ describe("fedifyHook", () => {
7969
const hookHandler = fedifyHook(mockFederation as never, createContextData);
8070

8171
const mockRequest = new Request("https://example.com/test");
82-
const mockEvent: MockRequestEvent = { request: mockRequest };
72+
const mockEvent: RequestEvent = { request: mockRequest } as RequestEvent;
8373
const mockResolve = () =>
8474
Promise.resolve(new Response("SvelteKit response"));
8575

packages/sveltekit/src/mod.ts

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,7 @@ import type {
1414
Federation,
1515
FederationFetchOptions,
1616
} from "@fedify/fedify/federation";
17-
18-
type RequestEvent = {
19-
request: Request;
20-
};
21-
22-
type HookParams = {
23-
event: RequestEvent;
24-
resolve: (event: RequestEvent) => Promise<Response>;
25-
};
17+
import type { Handle, RequestEvent } from "@sveltejs/kit";
2618

2719
/**
2820
* Create a SvelteKit hook handler to integrate with the {@link Federation}
@@ -32,7 +24,7 @@ type HookParams = {
3224
* ``` typescript
3325
* import { federation } from "./federation"; // Import the `Federation` object
3426
*
35-
* export const handle = fedifyHook(federation, () => undefined);
27+
* export const handle = fedifyHook(federation);
3628
* ```
3729
*
3830
* @template TContextData A type of the context data for the {@link Federation}
@@ -47,9 +39,9 @@ export function fedifyHook<TContextData>(
4739
federation: Federation<TContextData>,
4840
createContextData: (
4941
event: RequestEvent,
50-
) => TContextData | Promise<TContextData>,
51-
): (params: HookParams) => Promise<Response> {
52-
return async ({ event, resolve }: HookParams) => {
42+
) => TContextData | Promise<TContextData> = () => undefined as TContextData,
43+
): Handle {
44+
return async ({ event, resolve }) => {
5345
return await federation.fetch(event.request, {
5446
contextData: await createContextData(event),
5547
...integrateFetchOptions({ event, resolve }),
@@ -58,7 +50,7 @@ export function fedifyHook<TContextData>(
5850
}
5951

6052
function integrateFetchOptions(
61-
{ event, resolve }: HookParams,
53+
{ event, resolve }: Parameters<Handle>[0],
6254
): Omit<FederationFetchOptions<void>, "contextData"> {
6355
return {
6456
async onNotFound(): Promise<Response> {

0 commit comments

Comments
 (0)