Loading CHANGES.md +6 −0 Original line number Diff line number Diff line Loading @@ -117,6 +117,12 @@ To be released. Separated from `@fedify/fedify/x/sveltekit` to improve modularity and reduce bundle size. [[#375] by Chanhaeng Lee] - Fixed SvelteKit integration hook types to correctly infer the request and response types in hooks. [[#271], [#394] by Chanhaeng Lee] [#271]: https://github.com/fedify-dev/fedify/pull/271 [#394]: https://github.com/fedify-dev/fedify/pull/394 Version 1.8.8 ------------- Loading packages/sveltekit/deno.json +3 −5 Original line number Diff line number Diff line Loading @@ -3,15 +3,13 @@ "version": "1.9.0", "license": "MIT", "imports": { "@std/assert": "jsr:@std/assert@^1.0.13" "@std/assert": "jsr:@std/assert@^1.0.13", "@sveltejs/kit": "npm:@sveltejs/kit@^2.0.0" }, "exports": { ".": "./src/mod.ts" }, "exclude": [ "dist", "node_modules" ], "exclude": ["dist", "node_modules"], "tasks": { "check": "deno fmt --check && deno lint && deno check src/*.ts", "test": "deno test --allow-net --allow-env" Loading packages/sveltekit/src/mod.test.ts +8 −18 Original line number Diff line number Diff line import { strictEqual } from "node:assert/strict"; import { describe, test } from "node:test"; import { fedifyHook } from "./mod.ts"; import type { RequestEvent } from "@sveltejs/kit"; interface MockRequestEvent { request: Request; } interface MockHookParams { event: MockRequestEvent; resolve: (event: MockRequestEvent) => Promise<Response>; } interface MockFederation<T> { interface MockFederation { fetch(request: Request, options: unknown): Promise<Response>; } describe("fedifyHook", () => { test("creates hook handler function", () => { const mockFederation: MockFederation<undefined> = { const mockFederation = { fetch: () => Promise.resolve(new Response("OK")), }; const createContextData = () => undefined; const hookHandler = fedifyHook(mockFederation as never, createContextData); const hookHandler = fedifyHook(mockFederation as never); strictEqual(typeof hookHandler, "function"); }); Loading @@ -31,7 +21,7 @@ describe("fedifyHook", () => { let capturedRequest: Request | undefined; let capturedOptions: unknown; const mockFederation: MockFederation<string> = { const mockFederation: MockFederation = { fetch: (request, options) => { capturedRequest = request; capturedOptions = options; Loading @@ -44,7 +34,7 @@ describe("fedifyHook", () => { const hookHandler = fedifyHook(mockFederation as never, createContextData); const mockRequest = new Request("https://example.com/test"); const mockEvent: MockRequestEvent = { request: mockRequest }; const mockEvent: RequestEvent = { request: mockRequest } as RequestEvent; const mockResolve = () => Promise.resolve(new Response("SvelteKit response")); Loading @@ -64,7 +54,7 @@ describe("fedifyHook", () => { test("handles async context data creation", async () => { let capturedContextData: unknown; const mockFederation: MockFederation<string> = { const mockFederation: MockFederation = { fetch: (_request, options) => { capturedContextData = (options as { contextData: string }).contextData; return Promise.resolve(new Response("OK")); Loading @@ -79,7 +69,7 @@ describe("fedifyHook", () => { const hookHandler = fedifyHook(mockFederation as never, createContextData); const mockRequest = new Request("https://example.com/test"); const mockEvent: MockRequestEvent = { request: mockRequest }; const mockEvent: RequestEvent = { request: mockRequest } as RequestEvent; const mockResolve = () => Promise.resolve(new Response("SvelteKit response")); Loading packages/sveltekit/src/mod.ts +6 −14 Original line number Diff line number Diff line Loading @@ -14,15 +14,7 @@ import type { Federation, FederationFetchOptions, } from "@fedify/fedify/federation"; type RequestEvent = { request: Request; }; type HookParams = { event: RequestEvent; resolve: (event: RequestEvent) => Promise<Response>; }; import type { Handle, RequestEvent } from "@sveltejs/kit"; /** * Create a SvelteKit hook handler to integrate with the {@link Federation} Loading @@ -32,7 +24,7 @@ type HookParams = { * ``` typescript * import { federation } from "./federation"; // Import the `Federation` object * * export const handle = fedifyHook(federation, () => undefined); * export const handle = fedifyHook(federation); * ``` * * @template TContextData A type of the context data for the {@link Federation} Loading @@ -47,9 +39,9 @@ export function fedifyHook<TContextData>( federation: Federation<TContextData>, createContextData: ( event: RequestEvent, ) => TContextData | Promise<TContextData>, ): (params: HookParams) => Promise<Response> { return async ({ event, resolve }: HookParams) => { ) => TContextData | Promise<TContextData> = () => undefined as TContextData, ): Handle { return async ({ event, resolve }) => { return await federation.fetch(event.request, { contextData: await createContextData(event), ...integrateFetchOptions({ event, resolve }), Loading @@ -58,7 +50,7 @@ export function fedifyHook<TContextData>( } function integrateFetchOptions( { event, resolve }: HookParams, { event, resolve }: Parameters<Handle>[0], ): Omit<FederationFetchOptions<void>, "contextData"> { return { async onNotFound(): Promise<Response> { Loading Loading
CHANGES.md +6 −0 Original line number Diff line number Diff line Loading @@ -117,6 +117,12 @@ To be released. Separated from `@fedify/fedify/x/sveltekit` to improve modularity and reduce bundle size. [[#375] by Chanhaeng Lee] - Fixed SvelteKit integration hook types to correctly infer the request and response types in hooks. [[#271], [#394] by Chanhaeng Lee] [#271]: https://github.com/fedify-dev/fedify/pull/271 [#394]: https://github.com/fedify-dev/fedify/pull/394 Version 1.8.8 ------------- Loading
packages/sveltekit/deno.json +3 −5 Original line number Diff line number Diff line Loading @@ -3,15 +3,13 @@ "version": "1.9.0", "license": "MIT", "imports": { "@std/assert": "jsr:@std/assert@^1.0.13" "@std/assert": "jsr:@std/assert@^1.0.13", "@sveltejs/kit": "npm:@sveltejs/kit@^2.0.0" }, "exports": { ".": "./src/mod.ts" }, "exclude": [ "dist", "node_modules" ], "exclude": ["dist", "node_modules"], "tasks": { "check": "deno fmt --check && deno lint && deno check src/*.ts", "test": "deno test --allow-net --allow-env" Loading
packages/sveltekit/src/mod.test.ts +8 −18 Original line number Diff line number Diff line import { strictEqual } from "node:assert/strict"; import { describe, test } from "node:test"; import { fedifyHook } from "./mod.ts"; import type { RequestEvent } from "@sveltejs/kit"; interface MockRequestEvent { request: Request; } interface MockHookParams { event: MockRequestEvent; resolve: (event: MockRequestEvent) => Promise<Response>; } interface MockFederation<T> { interface MockFederation { fetch(request: Request, options: unknown): Promise<Response>; } describe("fedifyHook", () => { test("creates hook handler function", () => { const mockFederation: MockFederation<undefined> = { const mockFederation = { fetch: () => Promise.resolve(new Response("OK")), }; const createContextData = () => undefined; const hookHandler = fedifyHook(mockFederation as never, createContextData); const hookHandler = fedifyHook(mockFederation as never); strictEqual(typeof hookHandler, "function"); }); Loading @@ -31,7 +21,7 @@ describe("fedifyHook", () => { let capturedRequest: Request | undefined; let capturedOptions: unknown; const mockFederation: MockFederation<string> = { const mockFederation: MockFederation = { fetch: (request, options) => { capturedRequest = request; capturedOptions = options; Loading @@ -44,7 +34,7 @@ describe("fedifyHook", () => { const hookHandler = fedifyHook(mockFederation as never, createContextData); const mockRequest = new Request("https://example.com/test"); const mockEvent: MockRequestEvent = { request: mockRequest }; const mockEvent: RequestEvent = { request: mockRequest } as RequestEvent; const mockResolve = () => Promise.resolve(new Response("SvelteKit response")); Loading @@ -64,7 +54,7 @@ describe("fedifyHook", () => { test("handles async context data creation", async () => { let capturedContextData: unknown; const mockFederation: MockFederation<string> = { const mockFederation: MockFederation = { fetch: (_request, options) => { capturedContextData = (options as { contextData: string }).contextData; return Promise.resolve(new Response("OK")); Loading @@ -79,7 +69,7 @@ describe("fedifyHook", () => { const hookHandler = fedifyHook(mockFederation as never, createContextData); const mockRequest = new Request("https://example.com/test"); const mockEvent: MockRequestEvent = { request: mockRequest }; const mockEvent: RequestEvent = { request: mockRequest } as RequestEvent; const mockResolve = () => Promise.resolve(new Response("SvelteKit response")); Loading
packages/sveltekit/src/mod.ts +6 −14 Original line number Diff line number Diff line Loading @@ -14,15 +14,7 @@ import type { Federation, FederationFetchOptions, } from "@fedify/fedify/federation"; type RequestEvent = { request: Request; }; type HookParams = { event: RequestEvent; resolve: (event: RequestEvent) => Promise<Response>; }; import type { Handle, RequestEvent } from "@sveltejs/kit"; /** * Create a SvelteKit hook handler to integrate with the {@link Federation} Loading @@ -32,7 +24,7 @@ type HookParams = { * ``` typescript * import { federation } from "./federation"; // Import the `Federation` object * * export const handle = fedifyHook(federation, () => undefined); * export const handle = fedifyHook(federation); * ``` * * @template TContextData A type of the context data for the {@link Federation} Loading @@ -47,9 +39,9 @@ export function fedifyHook<TContextData>( federation: Federation<TContextData>, createContextData: ( event: RequestEvent, ) => TContextData | Promise<TContextData>, ): (params: HookParams) => Promise<Response> { return async ({ event, resolve }: HookParams) => { ) => TContextData | Promise<TContextData> = () => undefined as TContextData, ): Handle { return async ({ event, resolve }) => { return await federation.fetch(event.request, { contextData: await createContextData(event), ...integrateFetchOptions({ event, resolve }), Loading @@ -58,7 +50,7 @@ export function fedifyHook<TContextData>( } function integrateFetchOptions( { event, resolve }: HookParams, { event, resolve }: Parameters<Handle>[0], ): Omit<FederationFetchOptions<void>, "contextData"> { return { async onNotFound(): Promise<Response> { Loading