From 5ca9955a924553ec924d142612d1ed5ef019cace Mon Sep 17 00:00:00 2001 From: Johannes Vogel <31311694+johannes-vogel@users.noreply.github.com> Date: Mon, 8 Jan 2024 10:05:47 +0100 Subject: [PATCH] Add type for srv.on('error') and fix srv.send overload (#9) --- CHANGELOG.md | 8 +++++++- apis/services.d.ts | 7 ++++++- test/typescript/apis/project/cds-services.ts | 6 ++++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 98f4fc24..dfdcbabb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,13 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/). ## Version 0.2.0 - tbd -### Changed +### Added + +- Type for special error listener `srv.on('error')` + +### Fixed + +- `srv.send` overload to also allow optional headers ## Version 0.1.0 - 2023-12-13 diff --git a/apis/services.d.ts b/apis/services.d.ts index 2cf07972..9476c1cc 100644 --- a/apis/services.d.ts +++ b/apis/services.d.ts @@ -171,7 +171,7 @@ export class Service extends QueryAPI { (details: { event: types.event; data?: object; headers?: object }): Promise (details: { query: ConstructedQuery; data?: object; headers?: object }): Promise (details: { method: types.eventName; path: string; data?: object; headers?: object }): Promise - (details: { event: types.eventName; entity: LinkedDefinition | string; data?: object; params?: object }): Promise + (details: { event: types.eventName; entity: LinkedDefinition | string; data?: object; params?: object; headers?: object }): Promise } /** @@ -216,6 +216,7 @@ export class Service extends QueryAPI { on(unboundAction: F, handler: ActionEventHandler): this on(eve: types.event, entity: types.target, handler: OnEventHandler): this on(eve: types.event, handler: OnEventHandler): this + on(eve: 'error', handler: OnErrorHandler): this // onSucceeded (eve: types.Events, entity: types.Target, handler: types.EventHandler): this @@ -290,6 +291,10 @@ interface OnEventHandler { (req: Request, next: Function): Promise | any | void } +interface OnErrorHandler { + (err: Error, req: Request): any | void +} + // `Partial` wraps any type and allows all properties to be undefined // in addition to their actual type. // This is important in the context of CRUD events, where diff --git a/test/typescript/apis/project/cds-services.ts b/test/typescript/apis/project/cds-services.ts index d2217ff2..1c7e223a 100644 --- a/test/typescript/apis/project/cds-services.ts +++ b/test/typescript/apis/project/cds-services.ts @@ -103,6 +103,7 @@ await srv.emit({ event: 'UPDATE', data: {} }) await srv.send({ event: 'AuthorCreated', data: {}, headers: {} }) await srv.send({ event: 'feeEstimation', entity: networkGroups, data: {name:'Volta'}}) await srv.send({ event: 'feeEstimation', entity: networkGroups, data: {name:'Volta'}, params: {my: 7,new: 8}}) +await srv.send({ event: 'feeEstimation', entity: networkGroups, data: {name:'Volta'}, params: {my: 7,new: 8}, headers: {accept: 'application/json'}}) // single args await srv.send('CREATE', 'Books', {}, {}) @@ -180,6 +181,11 @@ srv.on('CREATE', Books, (req, next) => { next() }) +// special error handler +srv.on('error', (err, req) => { + err.message + req.event +}) // Typed bound/ unbound actions // The handler must return a number to be in line with action's signature (or void)