UNPKG

@azure-utils/storybooks

Version:

Utils to upload and manage Storybooks via Azure Functions and storage.

112 lines (110 loc) 4.32 kB
import { wrapHttpHandlerWithStore } from "./store-BL4RNiEp.mjs"; import { DEFAULT_CHECK_PERMISSIONS_CALLBACK, DEFAULT_PURGE_SCHEDULE_CRON, DEFAULT_SERVICE_NAME, DEFAULT_STORAGE_CONN_STR_ENV_VAR } from "./constants-CsV1N9r4.mjs"; import "./azure-data-tables-MtZoiS66.mjs"; import "./mime-utils-CD98LBMP.mjs"; import "./error-utils-5raRiKD5.mjs"; import "./azure-storage-blob-Dj53y4ng.mjs"; import { EmptyObjectSchema, ProjectIdSchema } from "./shared-BAE3ceND.mjs"; import "./projects-DDVy3_77.mjs"; import { timerPurgeHandler } from "./timer-purge-handler-DSRkR3S8.mjs"; import "./openapi-utils-CAJ85ahl.mjs"; import { joinUrl } from "./url-utils-B9Pl4bQ7.mjs"; import "./table-CFLDF1bd.mjs"; import "./projects-table-B_qW44SW.mjs"; import "./builds-table-D78yU-UW.mjs"; import "./labels-table-DoOmA3fT.mjs"; import { registerProjectsRouter } from "./projects-router-B4T5MHdN.mjs"; import "./validators-C1FF8po_.mjs"; import "./upload-utils-DHJHMiPY.mjs"; import { registerBuildsRouter } from "./builds-router-BvRICvOx.mjs"; import { registerLabelsRouter } from "./labels-router-DWXBHCOP.mjs"; import "./openapi-handler-BNcJ1aSZ.mjs"; import { registerWebUIRouter } from "./web-ui-router-zy-hkmhO.mjs"; import { registerStorybookRouter } from "./storybook-router-CnKx8NCO.mjs"; import { app } from "@azure/functions"; import z from "zod"; //#region src/index.ts /** * Function to register all routes required to manage the Storybooks including * GET, POST and DELETE methods. * * @returns a function to register additional HTTP handlers for the service. */ function registerStorybooksRouter(options = {}) { const { serviceName = DEFAULT_SERVICE_NAME, baseRoute = "", authLevel, storageConnectionStringEnvVar = DEFAULT_STORAGE_CONN_STR_ENV_VAR, purgeScheduleCron, openapi, checkPermissions = DEFAULT_CHECK_PERMISSIONS_CALLBACK } = options; const storageConnectionString = process.env[storageConnectionStringEnvVar]; if (!storageConnectionString) throw new Error("Missing env-var '${storageConnectionStringEnvVar}' value.\nIt is required to connect with Azure Storage resource."); console.log("Registering Storybooks Router"); const openAPIEnabled = !openapi?.disabled; app.setup({ enableHttpStream: true }); const handlerWrapper = wrapHttpHandlerWithStore.bind(null, { serviceName, baseRoute, authLevel, connectionString: storageConnectionString, openapi, staticDirs: options.staticDirs || ["./public"], checkPermissions }); const normalisedServiceName = serviceName.toLowerCase().replace(/\s+/g, "_"); registerProjectsRouter({ serviceName: normalisedServiceName, baseRoute: joinUrl(baseRoute, "projects"), basePathParamsSchema: EmptyObjectSchema, openAPIEnabled, handlerWrapper }); registerBuildsRouter({ serviceName: normalisedServiceName, baseRoute: joinUrl(baseRoute, "projects", "{projectId}", "builds"), basePathParamsSchema: z.object({ projectId: ProjectIdSchema }), openAPIEnabled, handlerWrapper }); registerLabelsRouter({ serviceName: normalisedServiceName, baseRoute: joinUrl(baseRoute, "projects", "{projectId}", "labels"), basePathParamsSchema: z.object({ projectId: ProjectIdSchema }), openAPIEnabled, handlerWrapper }); registerStorybookRouter({ serviceName: normalisedServiceName, baseRoute: joinUrl(baseRoute, "_"), basePathParamsSchema: EmptyObjectSchema, openAPIEnabled, handlerWrapper }); registerWebUIRouter({ serviceName: normalisedServiceName, baseRoute, basePathParamsSchema: EmptyObjectSchema, openAPIEnabled, handlerWrapper }); if (purgeScheduleCron !== null) app.timer(`${normalisedServiceName}-timer_purge`, { schedule: purgeScheduleCron || DEFAULT_PURGE_SCHEDULE_CRON, handler: timerPurgeHandler(storageConnectionString) }); /** * Register an HTTP function. * * The baseRoute and authLevel is inherited. * * @param name unique name for the HTTP function * @param options Options for Azure HTTP function */ function registerRoute(name, options$1) { app.http(`${normalisedServiceName}-${name}`, { authLevel, ...options$1, route: joinUrl(baseRoute, options$1.route || name), handler: handlerWrapper(options$1.handler, []), methods: options$1.methods || ["GET"] }); } return registerRoute; } //#endregion export { registerStorybooksRouter }; //# sourceMappingURL=index.mjs.map