diff --git a/UPGRADE-3.0.md b/UPGRADE-3.0.md new file mode 100644 index 0000000..6c3f45c --- /dev/null +++ b/UPGRADE-3.0.md @@ -0,0 +1,11 @@ +# Upgrade from 2.x to 3.0 + +# Event + +- Remove `eventBusMiddleware` and use `httpKernel` instead. +- Replace all the types from `@koala-ts/framework/Event` with types from `@koala-ts/framework/Kernel`. + +```diff +-- import { eventBusMiddleware } from '@koala-ts/framework/Event'; +++ import { httpKernel } from '@koala-ts/framework/Kernel'; +``` diff --git a/src/Config/types.ts b/src/Config/types.ts index ae03830..f6c9167 100644 --- a/src/Config/types.ts +++ b/src/Config/types.ts @@ -1,6 +1,6 @@ -import { type EventSubscriber } from '@/Event'; import { type HttpMiddleware } from '@/Http'; import { type StaticFilesOptions } from '@/Http/Files'; +import { type EventSubscriber } from '@/Kernel'; export type Controller = new (...args: unknown[]) => unknown; diff --git a/src/Event/EventBus.ts b/src/Event/EventBus.ts deleted file mode 100644 index 093913e..0000000 --- a/src/Event/EventBus.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { type EventBusStorage, type EventEmitter } from '@/Event/types'; -import { - createStore, - type HttpRequest, - type HttpResponse, - type HttpScope, - type NextMiddleware, - type ScopeStore, -} from '@/Http'; - -const eventBusStorage = createStore(); - -export async function eventBusMiddleware( - scope: HttpScope, - next: NextMiddleware, - storage: ScopeStore = eventBusStorage, -): Promise { - await storage.run({ eventEmitter: scope.app, scope }, next); -} - -export function useEmit(storage: ScopeStore = eventBusStorage): EventEmitter { - return storage.get('eventEmitter'); -} - -export function useRequest(storage: ScopeStore = eventBusStorage): HttpRequest { - return storage.get('scope').request; -} - -export function useResponse(storage: ScopeStore = eventBusStorage): HttpResponse { - return storage.get('scope').response; -} diff --git a/src/Event/index.ts b/src/Event/index.ts index 1182659..62c57ad 100644 --- a/src/Event/index.ts +++ b/src/Event/index.ts @@ -1,2 +1,12 @@ -export * from './types'; -export * from './EventBus'; +/** + * @deprecated This module is deprecated in favor of using the Kernel module. + */ +export { httpKernel as eventBusMiddleware } from '@/Kernel/HttpKernel'; +export type { + KernelStorage as EventBusStorage, + EventEmitter, + EventSubscriber, + useEmit, + useResponse, + useRequest, +} from '@/Kernel'; diff --git a/src/Event/EventBus.test.ts b/src/Kernel/HttpKernel.test.ts similarity index 68% rename from src/Event/EventBus.test.ts rename to src/Kernel/HttpKernel.test.ts index 653a945..3dc55d4 100644 --- a/src/Event/EventBus.test.ts +++ b/src/Kernel/HttpKernel.test.ts @@ -1,15 +1,15 @@ import { describe, expect, test, vi } from 'vitest'; -import { eventBusMiddleware, useEmit, useRequest, useResponse } from '@/Event/EventBus'; -import { type EventBusStorage } from '@/Event/types'; import { type HttpScope, type ScopeStore } from '@/Http'; +import { httpKernel, useEmit, useRequest, useResponse } from '@/Kernel/HttpKernel'; +import { type KernelStorage } from '@/Kernel/types'; -describe('Event bus', () => { +describe('Http Kernel', () => { test('middleware should init storage', async () => { const scope = { app: vi.fn() }; const next = vi.fn(); const storage = { run: vi.fn() }; - await eventBusMiddleware(scope as unknown as HttpScope, next, storage as unknown as ScopeStore); + await httpKernel(scope as unknown as HttpScope, next, storage as unknown as ScopeStore); expect(storage.run).toHaveBeenCalledWith({ eventEmitter: scope.app, scope }, next); }); @@ -17,7 +17,7 @@ describe('Event bus', () => { test('useEmit should return emitter from storage', () => { const storage = { get: vi.fn().mockReturnValue('eventEmitter') }; - const emitter = useEmit(storage as unknown as ScopeStore); + const emitter = useEmit(storage as unknown as ScopeStore); expect(storage.get).toHaveBeenCalledWith('eventEmitter'); expect(emitter).toBe('eventEmitter'); @@ -27,7 +27,7 @@ describe('Event bus', () => { const request = { headers: { host: 'localhost' } }; const storage = { get: vi.fn().mockReturnValue({ request }) }; - const req = useRequest(storage as unknown as ScopeStore); + const req = useRequest(storage as unknown as ScopeStore); expect(storage.get).toHaveBeenCalledWith('scope'); expect(req).toBe(request); @@ -37,7 +37,7 @@ describe('Event bus', () => { const response = { status: 200, body: 'OK' }; const storage = { get: vi.fn().mockReturnValue({ response }) }; - const res = useResponse(storage as unknown as ScopeStore); + const res = useResponse(storage as unknown as ScopeStore); expect(storage.get).toHaveBeenCalledWith('scope'); expect(res).toBe(response); diff --git a/src/Kernel/HttpKernel.ts b/src/Kernel/HttpKernel.ts new file mode 100644 index 0000000..e84ba43 --- /dev/null +++ b/src/Kernel/HttpKernel.ts @@ -0,0 +1,31 @@ +import { + createStore, + type HttpRequest, + type HttpResponse, + type HttpScope, + type NextMiddleware, + type ScopeStore, +} from '@/Http'; +import { type EventEmitter, type KernelStorage } from '@/Kernel/types'; + +const kernelStorage = createStore(); + +export async function httpKernel( + scope: HttpScope, + next: NextMiddleware, + storage: ScopeStore = kernelStorage, +): Promise { + await storage.run({ eventEmitter: scope.app, scope }, next); +} + +export function useEmit(storage: ScopeStore = kernelStorage): EventEmitter { + return storage.get('eventEmitter'); +} + +export function useRequest(storage: ScopeStore = kernelStorage): HttpRequest { + return storage.get('scope').request; +} + +export function useResponse(storage: ScopeStore = kernelStorage): HttpResponse { + return storage.get('scope').response; +} diff --git a/src/Kernel/index.ts b/src/Kernel/index.ts new file mode 100644 index 0000000..ede7e1a --- /dev/null +++ b/src/Kernel/index.ts @@ -0,0 +1,2 @@ +export * from './types'; +export * from './HttpKernel'; diff --git a/src/Event/types.ts b/src/Kernel/types.ts similarity index 89% rename from src/Event/types.ts rename to src/Kernel/types.ts index cc9565c..56009c9 100644 --- a/src/Event/types.ts +++ b/src/Kernel/types.ts @@ -4,7 +4,7 @@ export interface EventEmitter { emit(event: string, ...args: unknown[]): void; } -export interface EventBusStorage { +export interface KernelStorage { eventEmitter: EventEmitter; scope: HttpScope; }