From 63c96d381527a08a0791356e39d1926d34fdbc8b Mon Sep 17 00:00:00 2001 From: Alexander James Phillips Date: Fri, 12 May 2017 12:13:09 +0100 Subject: [PATCH] Allow exclusion of conflicting properties #16416 --- types/hapi/index.d.ts | 23 +++++++++++++++------ types/hapi/test/route/additional-options.ts | 13 ++++++------ 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/types/hapi/index.d.ts b/types/hapi/index.d.ts index 6b8bec99616c04..3567e50c347451 100644 --- a/types/hapi/index.d.ts +++ b/types/hapi/index.d.ts @@ -826,7 +826,7 @@ export interface RouteAuthAccessConfiguationObject { /** * For context see RouteAdditionalConfigurationOptions > cache */ -export interface RouteCacheOptions { +export type RouteCacheOptions = { /** * determines the privacy flag included in client-side caching using the 'Cache-Control' header. Values are: * * 'default' - no privacy flag. This is the default setting. @@ -834,15 +834,26 @@ export interface RouteCacheOptions { * * 'private' - mark the response as suitable only for private caching. */ privacy?: 'default' | 'public' | 'private'; - /** relative expiration expressed in the number of milliseconds since the item was saved in the cache. Cannot be used together with expiresAt. */ - expiresIn?: number; - /** time of day expressed in 24h notation using the 'HH:MM' format, at which point all cache records for the route expire. Cannot be used together with expiresIn. */ - expiresAt?: string; /** an array of HTTP response status codes (e.g. 200) which are allowed to include a valid caching directive. Defaults to [200]. */ statuses?: number[]; /** a string with the value of the 'Cache-Control' header when caching is disabled. Defaults to 'no-cache'. */ otherwise?: string; -} +} & ({ + /** relative expiration expressed in the number of milliseconds since the item was saved in the cache. Cannot be used together with expiresAt. */ + expiresIn?: number; + /** time of day expressed in 24h notation using the 'HH:MM' format, at which point all cache records for the route expire. Cannot be used together with expiresIn. */ + expiresAt?: undefined; +} | { + /** relative expiration expressed in the number of milliseconds since the item was saved in the cache. Cannot be used together with expiresAt. */ + expiresIn?: undefined; + /** time of day expressed in 24h notation using the 'HH:MM' format, at which point all cache records for the route expire. Cannot be used together with expiresIn. */ + expiresAt?: string; +} | { + /** relative expiration expressed in the number of milliseconds since the item was saved in the cache. Cannot be used together with expiresAt. */ + expiresIn?: undefined; + /** time of day expressed in 24h notation using the 'HH:MM' format, at which point all cache records for the route expire. Cannot be used together with expiresIn. */ + expiresAt?: undefined; +}); /** * For context see RouteAdditionalConfigurationOptions > cors diff --git a/types/hapi/test/route/additional-options.ts b/types/hapi/test/route/additional-options.ts index 80f2789ae0b7cd..99e818d08a8afa 100644 --- a/types/hapi/test/route/additional-options.ts +++ b/types/hapi/test/route/additional-options.ts @@ -8,31 +8,32 @@ var authConfig: Hapi.RouteAdditionalConfigurationOptions = { // Handler in config const user: Hapi.RouteAdditionalConfigurationOptions = { - cache: { expiresIn: 5000 }, + cache: { expiresIn: 5000, statuses: [200, 201] }, handler: function (request, reply) { return reply({ name: 'John' }); } }; - // Add in addition to examples in docs var cache: Hapi.RouteCacheOptions = { privacy: 'default', - statuses: [200, 201], expiresIn: 5000, }; cache = { privacy: 'default', - statuses: [200, 201], expiresAt: '22:44', }; -// /* typings should cause this to error, but currently does not +cache = { + privacy: 'default', +}; + +/* should error (as does!) var cache: Hapi.RouteCacheOptions = { expiresIn: 5000, expiresAt: '22:44', }; -// */ +*/