feat(openapi-tooling): Add support for request validation and create router stubs.
Signed-off-by: Aramis Sennyey <sennyeyaramis@gmail.com> Signed-off-by: Aramis <sennyeyaramis@gmail.com>
This commit is contained in:
@@ -17,8 +17,9 @@
|
||||
// ******************************************************************
|
||||
// * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. *
|
||||
// ******************************************************************
|
||||
import { createValidatedOpenApiRouter } from '@backstage/backend-openapi-utils';
|
||||
|
||||
export default {
|
||||
export const spec = {
|
||||
openapi: '3.0.3',
|
||||
info: {
|
||||
title: '@backstage/plugin-search-backend',
|
||||
@@ -210,3 +211,6 @@ export default {
|
||||
},
|
||||
},
|
||||
} as const;
|
||||
export const createOpenApiRouter = async (
|
||||
options?: Parameters<typeof createValidatedOpenApiRouter>['1'],
|
||||
) => createValidatedOpenApiRouter<typeof spec>(spec, options);
|
||||
|
||||
@@ -21,7 +21,6 @@ import { IndexBuilder } from '@backstage/plugin-search-backend-node';
|
||||
import { SearchEngine } from '@backstage/plugin-search-common';
|
||||
import express from 'express';
|
||||
import request from 'supertest';
|
||||
|
||||
import { createRouter } from './router';
|
||||
|
||||
const mockPermissionEvaluator: PermissionEvaluator = {
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
*/
|
||||
|
||||
import express from 'express';
|
||||
import Router from 'express-promise-router';
|
||||
import { Logger } from 'winston';
|
||||
import { z } from 'zod';
|
||||
import { errorHandler } from '@backstage/backend-common';
|
||||
@@ -35,8 +34,7 @@ import {
|
||||
} from '@backstage/plugin-search-common';
|
||||
import { SearchEngine } from '@backstage/plugin-search-common';
|
||||
import { AuthorizedSearchEngine } from './AuthorizedSearchEngine';
|
||||
import type { ApiRouter } from '@backstage/backend-openapi-utils';
|
||||
import spec from '../schema/openapi.generated';
|
||||
import { createOpenApiRouter } from '../schema/openapi.generated';
|
||||
|
||||
const jsonObjectSchema: z.ZodSchema<JsonObject> = z.lazy(() => {
|
||||
const jsonValueSchema: z.ZodSchema<JsonValue> = z.lazy(() =>
|
||||
@@ -73,6 +71,7 @@ const allowedLocationProtocols = ['http:', 'https:'];
|
||||
export async function createRouter(
|
||||
options: RouterOptions,
|
||||
): Promise<express.Router> {
|
||||
const router = await createOpenApiRouter();
|
||||
const { engine: inputEngine, types, permissions, config, logger } = options;
|
||||
|
||||
const maxPageLimit =
|
||||
@@ -86,14 +85,7 @@ export async function createRouter(
|
||||
.optional(),
|
||||
pageCursor: z.string().optional(),
|
||||
pageLimit: z
|
||||
.string()
|
||||
.transform(pageLimit => parseInt(pageLimit, 10))
|
||||
.refine(
|
||||
pageLimit => !isNaN(pageLimit),
|
||||
pageLimit => ({
|
||||
message: `The page limit "${pageLimit}" is not a number`,
|
||||
}),
|
||||
)
|
||||
.number()
|
||||
.refine(
|
||||
pageLimit => pageLimit <= maxPageLimit,
|
||||
pageLimit => ({
|
||||
@@ -148,7 +140,6 @@ export async function createRouter(
|
||||
})),
|
||||
});
|
||||
|
||||
const router = Router() as ApiRouter<typeof spec>;
|
||||
router.get('/query', async (req, res) => {
|
||||
const parseResult = requestSchema.passthrough().safeParse(req.query);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user