@@ -53,6 +53,48 @@ import {
5353import { ServerOptions } from './options' ;
5454import { ServerState , ServerStateCookieOptions } from './state' ;
5555
56+ type ReservedRequestKeys = (
57+ 'server' | 'url' | 'query' | 'path' | 'method' |
58+ 'mime' | 'setUrl' | 'setMethod' | 'headers' | 'id' |
59+ 'app' | 'plugins' | 'route' | 'auth' | 'pre' |
60+ 'preResponses' | 'info' | 'isInjected' | 'orig' |
61+ 'params' | 'paramsArray' | 'payload' | 'state' |
62+ 'response' | 'raw' | 'domain' | 'log' | 'logs' |
63+ 'generateResponse' |
64+
65+ // Private functions
66+ '_allowInternals' | '_closed' | '_core' |
67+ '_entity' | '_eventContext' | '_events' | '_expectContinue' |
68+ '_isInjected' | '_isPayloadPending' | '_isReplied' |
69+ '_route' | '_serverTimeoutId' | '_states' | '_url' |
70+ '_urlError' | '_initializeUrl' | '_setUrl' | '_parseUrl' |
71+ '_parseQuery'
72+
73+ ) ;
74+
75+ type ReservedToolkitKeys = (
76+ 'abandon' | 'authenticated' | 'close' | 'context' | 'continue' |
77+ 'entity' | 'redirect' | 'realm' | 'request' | 'response' |
78+ 'state' | 'unauthenticated' | 'unstate'
79+ ) ;
80+
81+ type ReservedServerKeys = (
82+ // Public functions
83+ 'app' | 'auth' | 'cache' | 'decorations' | 'events' | 'info' |
84+ 'listener' | 'load' | 'methods' | 'mime' | 'plugins' | 'registrations' |
85+ 'settings' | 'states' | 'type' | 'version' | 'realm' | 'control' | 'decoder' |
86+ 'bind' | 'control' | 'decoder' | 'decorate' | 'dependency' | 'encoder' |
87+ 'event' | 'expose' | 'ext' | 'inject' | 'log' | 'lookup' | 'match' | 'method' |
88+ 'path' | 'register' | 'route' | 'rules' | 'state' | 'table' | 'validator' |
89+ 'start' | 'initialize' | 'stop' |
90+
91+ // Private functions
92+ '_core' | '_initialize' | '_start' | '_stop' | '_cachePolicy' | '_createCache' |
93+ '_clone' | '_ext' | '_addRoute'
94+ ) ;
95+
96+ type ExceptName < Property , ReservedKeys > = Property extends ReservedKeys ? never : Property ;
97+
5698/**
5799 * User-extensible type for application specific state (`server.app`).
58100 */
@@ -309,21 +351,24 @@ export class Server<A = ServerApplicationState> {
309351 * @return void;
310352 * [See docs](https://github.com/hapijs/hapi/blob/master/API.md#-serverdecoratetype-property-method-options)
311353 */
312- decorate ( type : 'handler' , property : DecorateName , method : HandlerDecorationMethod , options ?: { apply ?: boolean | undefined , extend ?: boolean | undefined } ) : void ;
313- decorate ( type : 'request' , property : DecorateName , method : ( existing : ( ( ...args : any [ ] ) => any ) ) => ( request : Request ) => DecorationMethod < Request > , options : { apply : true , extend : true } ) : void ;
314- decorate ( type : 'request' , property : DecorateName , method : ( request : Request ) => DecorationMethod < Request > , options : { apply : true , extend ?: boolean | undefined } ) : void ;
315- decorate ( type : 'request' , property : DecorateName , method : DecorationMethod < Request > , options ?: { apply ?: boolean | undefined , extend ?: boolean | undefined } ) : void ;
316- decorate ( type : 'request' , property : DecorateName , value : ( existing : ( ( ...args : any [ ] ) => any ) ) => ( request : Request ) => any , options : { apply : true , extend : true } ) : void ;
317- decorate ( type : 'request' , property : DecorateName , value : ( request : Request ) => any , options : { apply : true , extend ?: boolean | undefined } ) : void ;
318- decorate ( type : 'request' , property : DecorateName , value : any , options ?: { apply ?: boolean | undefined , extend ?: boolean | undefined } ) : void ;
319- decorate ( type : 'toolkit' , property : DecorateName , method : ( existing : ( ( ...args : any [ ] ) => any ) ) => DecorationMethod < ResponseToolkit > , options : { apply ?: boolean | undefined , extend : true } ) : void ;
320- decorate ( type : 'toolkit' , property : DecorateName , method : DecorationMethod < ResponseToolkit > , options ?: { apply ?: boolean | undefined , extend ?: boolean | undefined } ) : void ;
321- decorate ( type : 'toolkit' , property : DecorateName , value : ( existing : ( ( ...args : any [ ] ) => any ) ) => any , options : { apply ?: boolean | undefined , extend : true } ) : void ;
322- decorate ( type : 'toolkit' , property : DecorateName , value : any , options ?: { apply ?: boolean | undefined , extend ?: boolean | undefined } ) : void ;
323- decorate ( type : 'server' , property : DecorateName , method : ( existing : ( ( ...args : any [ ] ) => any ) ) => DecorationMethod < Server > , options : { apply ?: boolean | undefined , extend : true } ) : void ;
324- decorate ( type : 'server' , property : DecorateName , method : DecorationMethod < Server > , options ?: { apply ?: boolean | undefined , extend ?: boolean | undefined } ) : void ;
325- decorate ( type : 'server' , property : DecorateName , value : ( existing : ( ( ...args : any [ ] ) => any ) ) => any , options : { apply ?: boolean | undefined , extend : true } ) : void ;
326- decorate ( type : 'server' , property : DecorateName , value : any , options ?: { apply ?: boolean | undefined , extend ?: boolean | undefined } ) : void ;
354+ decorate < P extends DecorateName > ( type : 'handler' , property : P , method : HandlerDecorationMethod , options ?: { apply ?: boolean | undefined , extend ?: never } ) : void ;
355+
356+ decorate < P extends DecorateName > ( type : 'request' , property : ExceptName < P , ReservedRequestKeys > , method : ( existing : ( ( ...args : any [ ] ) => any ) ) => ( request : Request ) => DecorationMethod < Request > , options : { apply : true , extend : true } ) : void ;
357+ decorate < P extends DecorateName > ( type : 'request' , property : ExceptName < P , ReservedRequestKeys > , method : ( request : Request ) => DecorationMethod < Request > , options : { apply : true , extend ?: boolean | undefined } ) : void ;
358+ decorate < P extends DecorateName > ( type : 'request' , property : ExceptName < P , ReservedRequestKeys > , method : DecorationMethod < Request > , options ?: { apply ?: boolean | undefined , extend ?: boolean | undefined } ) : void ;
359+ decorate < P extends DecorateName > ( type : 'request' , property : ExceptName < P , ReservedRequestKeys > , value : ( existing : ( ( ...args : any [ ] ) => any ) ) => ( request : Request ) => any , options : { apply : true , extend : true } ) : void ;
360+ decorate < P extends DecorateName > ( type : 'request' , property : ExceptName < P , ReservedRequestKeys > , value : ( request : Request ) => any , options : { apply : true , extend ?: boolean | undefined } ) : void ;
361+ decorate < P extends DecorateName > ( type : 'request' , property : ExceptName < P , ReservedRequestKeys > , value : object , options ?: never ) : void ;
362+
363+ decorate < P extends DecorateName > ( type : 'toolkit' , property : ExceptName < P , ReservedToolkitKeys > , method : ( existing : ( ( ...args : any [ ] ) => any ) ) => DecorationMethod < ResponseToolkit > , options : { apply ?: boolean | undefined , extend : true } ) : void ;
364+ decorate < P extends DecorateName > ( type : 'toolkit' , property : ExceptName < P , ReservedToolkitKeys > , method : DecorationMethod < ResponseToolkit > , options ?: { apply ?: boolean | undefined , extend ?: boolean | undefined } ) : void ;
365+ decorate < P extends DecorateName > ( type : 'toolkit' , property : ExceptName < P , ReservedToolkitKeys > , value : ( existing : ( ( ...args : any [ ] ) => any ) ) => any , options : { apply ?: boolean | undefined , extend : true } ) : void ;
366+ decorate < P extends DecorateName > ( type : 'toolkit' , property : ExceptName < P , ReservedToolkitKeys > , value : object , options ?: never ) : void ;
367+
368+ decorate < P extends DecorateName > ( type : 'server' , property : ExceptName < P , ReservedServerKeys > , value : object , options ?: never ) : void ;
369+ decorate < P extends DecorateName > ( type : 'server' , property : ExceptName < P , ReservedServerKeys > , method : ( existing : ( ( ...args : any [ ] ) => any ) ) => DecorationMethod < Server > , options : { apply ?: boolean | undefined , extend : true } ) : void ;
370+ decorate < P extends DecorateName > ( type : 'server' , property : ExceptName < P , ReservedServerKeys > , method : DecorationMethod < Server > , options ?: { apply ?: boolean | undefined , extend ?: boolean | undefined } ) : void ;
371+ decorate < P extends DecorateName > ( type : 'server' , property : ExceptName < P , ReservedServerKeys > , value : ( existing : ( ( ...args : any [ ] ) => any ) ) => any , options : { apply ?: boolean | undefined , extend : true } ) : void ;
327372
328373 /**
329374 * Used within a plugin to declare a required dependency on other plugins where:
0 commit comments