scvo-router
Version:
Pipes to open Elasticsearch to everything we do
229 lines (198 loc) • 4.48 kB
text/typescript
// Module imports
import { SearchResponse, ConfigOptions } from 'elasticsearch';
export interface IJsonable {
toJSON(): any;
}
export interface IContext {
name: string;
domains: string[];
metaData: any;
menus: IMenus;
routes: IRoutes;
template: string;
uaId: string;
templatePartials: IPartials;
layouts: ILayouts;
}
export interface ILayouts {
default: ILayout;
[name: string]: ILayout;
}
export interface ILayout {
template: string;
sections: string[];
pattern: string;
contentType: string;
doNotStripDomains: boolean;
}
export interface IPartials {
[name: string]: string;
}
export interface IMenus {
[name: string]: IMenuItem[];
}
export interface IMenuItem {
label: string;
path: string;
route: string;
children: IMenuItem[];
metaData: any;
level?: number;
match?: boolean;
}
export interface IMenuItemMatch extends IMenuItem {
children: IMenuItemMatch[];
dotPath: string;
order: number;
level: number;
match: boolean;
}
export interface IRoutes {
[name: string]: IRoute;
}
export interface IRoute {
name: string;
metaData: any;
pattern: string|INamedPattern;
queryDelimiter: string;
queryEquals: string;
primarySearchTemplate: ISearchTemplate;
supplimentarySearchTemplates: ISearchTemplateSet;
elasticsearchConfig: ConfigOptions;
defaultParams: any;
context: IContext;
layouts: IRouteLayouts;
}
export interface IRouteLayouts {
default: IRouteLayout;
[name: string]: IRouteLayout;
}
export interface IRouteLayout {
[section: string]: string;
}
export interface INamedTemplate {
[name: string]: string;
}
export interface INamedPattern {
[suffix: string]: string;
}
export interface IRouteMatch extends IRoute {
params: any;
primaryResponse: SearchResponse<IDocumentResult>;
supplimentaryResponses: ISearchResponseSet;
paging: IPaging;
layoutName: string;
response: IRouteResponse;
}
export interface IElasticsearchConfig {
username: string;
password: string;
host: string;
}
export interface ISearchTemplateSet {
[name: string]: ISearchTemplate;
}
export interface ISearchTemplate {
index: string;
type: string;
template: string;
}
export interface ISearchHead {
index: string;
type: string;
}
export interface ISearchQuery {
index: string;
type: string;
body: any;
}
export interface IPaging {
from ? : number;
size ? : number;
sort ? : any;
totalResults ? : number;
totalPages ? : number;
currentPage ? : number;
nextPage ? : number;
prevPage ? : number;
pageRange ? : IPagingPage[];
}
export interface IPagingPage {
pageNumber: number;
distance: number;
}
export interface IDocumentResult {
Id: string;
author: string;
description: string;
tags: string[];
title: string;
og_title: string;
og_description: string;
og_image: string;
views: IViews;
date_publishes: Date;
date_expires: Date;
date_modified: Date;
date_index_updated: Date;
text_bag: string;
json_ld: any;
geo_info: IGeoInfo[];
}
export interface IViews {
[name: string]: string;
}
export interface ISearchResponseSet {
[name: string]: SearchResponse<IDocumentResult>;
}
export interface IGeoInfo {
title: string;
description: string;
geo_point: IGeoPoint;
primary: boolean;
address: string;
postcode: string;
details: IGeoDetails;
}
export interface IGeoPoint {
lat: number;
lon: number;
}
export interface IGeoDetails {
postcode: string,
quality: number,
eastings: number,
northings: number,
country: string,
nhs_ha: string,
longitude: number,
latitude: number,
european_electoral_region: string,
primary_care_trust: string,
region: string,
lsoa: string,
msoa: string,
incode: string,
outcode: string,
parliamentary_constituency: string,
admin_district: string,
parish: string,
admin_county: string,
admin_ward: string,
ccg: string,
nuts: string,
codes: {
admin_district: string,
admin_county: string,
admin_ward: string,
parish: string,
parliamentary_constituency: string,
ccg: string,
nuts: string
}
}
export interface IRouteResponse {
contentType: string;
contentBody: string;
statusCode: number;
}