import { FuncVersion } from "../FuncVersion" ; export interface IHostJsonV2 { version ? : string ; customHandler ? : { } ; logging ? : { applicationInsights ? : { samplingSettings ? : { isEnabled ? : boolean ; excludedTypes ? : string ; } ; } ; } ; managedDependency ? : { enabled ? : boolean ; } ; extensionBundle ? : IBundleMetadata ; extensions ? : { http ? : { routePrefix ? : string ; } ; } ; } export interface IBundleMetadata { id ? : string ; version ? : string ; } export interface IHostJsonV1 { http ? : { routePrefix ? : string ; } ; } export interface IParsedHostJson { readonly routePrefix : string ; readonly bundle ? : IBundleMetadata ; } const defaultRoutePrefix = 'api' ; class ParsedHostJsonV2 implements IParsedHostJson { public data : IHostJsonV2 ; public constructor ( data ) { if ( typeof data === 'object' && data !== null ) { this . data = < IHostJsonV2 > data ; } else { this . data = { } ; } } public get routePrefix ( ) : string { if ( this . data . extensions && this . data . extensions . http && this . data . extensions . http . routePrefix !== undefined ) { return this . data . extensions . http . routePrefix ; } else { return defaultRoutePrefix ; } } public get bundle ( ) : IBundleMetadata | undefined { return this . data . extensionBundle ; } } class ParsedHostJsonV1 implements IParsedHostJson { public data : IHostJsonV1 ; public constructor ( data ) { if ( typeof data === 'object' && data !== null ) { this . data = < IHostJsonV1 > data ; } else { this . data = { } ; } } public get routePrefix ( ) : string { if ( this . data . http && this . data . http . routePrefix !== undefined ) { return this . data . http . routePrefix ; } else { return defaultRoutePrefix ; } } } export function parseHostJson ( data , version ) { return version === FuncVersion . v1 ? new ParsedHostJsonV1 ( data ) : new ParsedHostJsonV2 ( data ) ; }