From 7232bd4823b57890ebde360b5f9ff8616948a1ac Mon Sep 17 00:00:00 2001 From: hua Date: Wed, 28 Aug 2024 14:55:27 +0000 Subject: [PATCH] feat(express): support lifecycle --- packages/express/package.json | 2 +- packages/express/src/application.ts | 6 +++++- packages/express/src/lifecycle/index.ts | 7 +++++++ packages/express/test/demo.ts | 6 ++++++ pnpm-lock.yaml | 12 +++++------- 5 files changed, 24 insertions(+), 9 deletions(-) create mode 100644 packages/express/src/lifecycle/index.ts diff --git a/packages/express/package.json b/packages/express/package.json index 53b333c..adccceb 100644 --- a/packages/express/package.json +++ b/packages/express/package.json @@ -15,6 +15,6 @@ "typescript": "^5.5.4" }, "dependencies": { - "awesome_mvp_tapable": "0.0.1-beta.0" + "awesome_mvp_tapable": "0.0.1-beta.2" } } diff --git a/packages/express/src/application.ts b/packages/express/src/application.ts index 09819d1..e5fde67 100644 --- a/packages/express/src/application.ts +++ b/packages/express/src/application.ts @@ -2,10 +2,12 @@ import http from 'http'; import Router from './router'; import { Handler, HttpMethod } from './typings'; import { defaultHandler } from './default-handler'; +import Lifecycle from './lifecycle'; class Application { private httpServer: http.Server | null = null; private router: Router = new Router(); + lifeCycle: Lifecycle = new Lifecycle(); handle( req: http.IncomingMessage, @@ -22,7 +24,9 @@ class Application { this.httpServer = http.createServer((req, res) => { appInstance.handle.call(appInstance, req, res); }); - this.httpServer.listen(port); + this.httpServer.listen(port, () => { + this.lifeCycle.listened.call(port); + }); } get(path: string, handler: Handler) { diff --git a/packages/express/src/lifecycle/index.ts b/packages/express/src/lifecycle/index.ts new file mode 100644 index 0000000..eb6132d --- /dev/null +++ b/packages/express/src/lifecycle/index.ts @@ -0,0 +1,7 @@ +import { SyncHook } from 'awesome_mvp_tapable'; + +class Lifecycle { + listened: SyncHook = new SyncHook([3000]); +} + +export default Lifecycle; \ No newline at end of file diff --git a/packages/express/test/demo.ts b/packages/express/test/demo.ts index fa6a6fa..d078e04 100644 --- a/packages/express/test/demo.ts +++ b/packages/express/test/demo.ts @@ -2,6 +2,12 @@ import { express } from '../src/index'; const app = express(); +app.lifeCycle.listened.tap('event', (port) => { + console.log(` + Http Server is start on ${port} + `); +}); + app.get('/user/name', (req, res) => { res.writeHead(200, { 'Content-Type': 'application/json' }); res.end(JSON.stringify({ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fdee6d1..31384b9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,8 +9,8 @@ importers: packages/express: dependencies: awesome_mvp_tapable: - specifier: 0.0.1-beta.0 - version: 0.0.1-beta.0 + specifier: 0.0.1-beta.2 + version: 0.0.1-beta.2 devDependencies: '@types/node': specifier: ^22.5.1 @@ -30,8 +30,8 @@ packages: '@types/node@22.5.1': resolution: {integrity: sha512-KkHsxej0j9IW1KKOOAA/XBA0z08UFSrRQHErzEfA3Vgq57eXIMYboIlHJuYIfd+lwCQjtKqUu3UnmKbtUc9yRw==} - awesome_mvp_tapable@0.0.1-beta.0: - resolution: {integrity: sha512-+h0DFNOwQ8/hzOUrTbRNCf4TRiAQryHNYbiBOwrM+JP4ZHkw4nerV1Ftw8txhhyca6AoK4TKivDY1i6KFKo9ZA==} + awesome_mvp_tapable@0.0.1-beta.2: + resolution: {integrity: sha512-Rm2HBg5HCb8TQrNBEqzJKWSIRvqYUaGPxjSpZYqCxzQInCwkoqdVnEIYbsE995R630zY/kfe/5GPs+e6klfzNg==} typescript@5.5.4: resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} @@ -47,9 +47,7 @@ snapshots: dependencies: undici-types: 6.19.8 - awesome_mvp_tapable@0.0.1-beta.0: - dependencies: - typescript: 5.5.4 + awesome_mvp_tapable@0.0.1-beta.2: {} typescript@5.5.4: {}