mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 01:38:56 -04:00
parent
3497a5da79
commit
b55b55e88c
5 changed files with 12 additions and 23 deletions
|
@ -7,7 +7,7 @@
|
|||
*/
|
||||
|
||||
import { Stream } from 'stream';
|
||||
import { ValidationError, Type, schema, isConfigSchema } from '@kbn/config-schema';
|
||||
import { ValidationError, schema, isConfigSchema } from '@kbn/config-schema';
|
||||
import type {
|
||||
RouteValidationSpec,
|
||||
RouteValidationFunction,
|
||||
|
@ -18,15 +18,6 @@ import type {
|
|||
} from '@kbn/core-http-server';
|
||||
import { RouteValidationError } from '@kbn/core-http-server';
|
||||
|
||||
// Ugly as hell but we need this conditional typing to have proper type inference
|
||||
type RouteValidationResultType<T extends RouteValidationSpec<any> | undefined> = NonNullable<
|
||||
T extends RouteValidationFunction<any>
|
||||
? ReturnType<T>['value']
|
||||
: T extends Type<any>
|
||||
? T['type']
|
||||
: undefined
|
||||
>;
|
||||
|
||||
/**
|
||||
* Route validator class to define the validation logic for each new route.
|
||||
*
|
||||
|
@ -92,9 +83,9 @@ export class RouteValidator<P = {}, Q = {}, B = {}> {
|
|||
unsafe?: boolean,
|
||||
data?: unknown,
|
||||
namespace?: string
|
||||
): RouteValidationResultType<typeof validationRule> {
|
||||
): T {
|
||||
if (typeof validationRule === 'undefined') {
|
||||
return {};
|
||||
return {} as T;
|
||||
}
|
||||
let precheckedData = this.preValidateSchema(data).validate(data, {}, namespace);
|
||||
|
||||
|
@ -125,12 +116,10 @@ export class RouteValidator<P = {}, Q = {}, B = {}> {
|
|||
validationRule: RouteValidationSpec<T>,
|
||||
data?: unknown,
|
||||
namespace?: string
|
||||
): RouteValidationResultType<typeof validationRule> {
|
||||
): T {
|
||||
if (isConfigSchema(validationRule)) {
|
||||
// @ts-expect-error upgrade typescript v4.9.5
|
||||
return validationRule.validate(data, {}, namespace);
|
||||
} else if (typeof validationRule === 'function') {
|
||||
// @ts-expect-error upgrade typescript v4.9.5
|
||||
return this.validateFunction(validationRule, data, namespace);
|
||||
} else {
|
||||
throw new ValidationError(
|
||||
|
|
|
@ -18,7 +18,7 @@ import type {
|
|||
} from '@kbn/core-http-server';
|
||||
import { ensureRawRequest } from '@kbn/core-http-router-server-internal';
|
||||
|
||||
class ScopedCookieSessionStorage<T extends Record<string, any>> implements SessionStorage<T> {
|
||||
class ScopedCookieSessionStorage<T extends object> implements SessionStorage<T> {
|
||||
constructor(
|
||||
private readonly log: Logger,
|
||||
private readonly server: Server,
|
||||
|
@ -72,7 +72,7 @@ function validateOptions(options: SessionStorageCookieOptions<any>) {
|
|||
* @param server - hapi server to create SessionStorage for
|
||||
* @param cookieOptions - cookies configuration
|
||||
*/
|
||||
export async function createCookieSessionStorageFactory<T>(
|
||||
export async function createCookieSessionStorageFactory<T extends object>(
|
||||
log: Logger,
|
||||
server: Server,
|
||||
cookieOptions: SessionStorageCookieOptions<T>,
|
||||
|
@ -113,7 +113,6 @@ export async function createCookieSessionStorageFactory<T>(
|
|||
|
||||
return {
|
||||
asScoped(request: KibanaRequest) {
|
||||
// @ts-expect-error upgrade typescript v4.9.5
|
||||
return new ScopedCookieSessionStorage<T>(log, server, ensureRawRequest(request));
|
||||
},
|
||||
};
|
||||
|
|
|
@ -292,8 +292,9 @@ export class HttpServer {
|
|||
registerAuth: this.registerAuth.bind(this),
|
||||
registerOnPostAuth: this.registerOnPostAuth.bind(this),
|
||||
registerOnPreResponse: this.registerOnPreResponse.bind(this),
|
||||
createCookieSessionStorageFactory: <T>(cookieOptions: SessionStorageCookieOptions<T>) =>
|
||||
this.createCookieSessionStorageFactory(cookieOptions, config.basePath),
|
||||
createCookieSessionStorageFactory: <T extends object>(
|
||||
cookieOptions: SessionStorageCookieOptions<T>
|
||||
) => this.createCookieSessionStorageFactory(cookieOptions, config.basePath),
|
||||
basePath: basePathService,
|
||||
csp: config.csp,
|
||||
auth: {
|
||||
|
@ -554,7 +555,7 @@ export class HttpServer {
|
|||
this.server.ext('onPreResponse', adoptToHapiOnPreResponseFormat(fn, this.log));
|
||||
}
|
||||
|
||||
private async createCookieSessionStorageFactory<T>(
|
||||
private async createCookieSessionStorageFactory<T extends object>(
|
||||
cookieOptions: SessionStorageCookieOptions<T>,
|
||||
basePath?: string
|
||||
) {
|
||||
|
|
|
@ -22,7 +22,7 @@ type ReturnMocked<T> = {
|
|||
|
||||
type DeepMocked<T> = jest.Mocked<ReturnMocked<T>>;
|
||||
|
||||
const creatSessionStorageFactoryMock = <T>() => {
|
||||
const creatSessionStorageFactoryMock = <T extends object>() => {
|
||||
const mocked: DeepMocked<SessionStorageFactory<T>> = {
|
||||
asScoped: jest.fn(),
|
||||
};
|
||||
|
|
|
@ -218,7 +218,7 @@ export interface HttpServiceSetup<
|
|||
* Creates cookie based session storage factory {@link SessionStorageFactory}
|
||||
* @param cookieOptions {@link SessionStorageCookieOptions} - options to configure created cookie session storage.
|
||||
*/
|
||||
createCookieSessionStorageFactory: <T>(
|
||||
createCookieSessionStorageFactory: <T extends object>(
|
||||
cookieOptions: SessionStorageCookieOptions<T>
|
||||
) => Promise<SessionStorageFactory<T>>;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue