@azure-utils/storybooks
Version:
Utils to upload and manage Storybooks via Azure Functions and storage.
112 lines (110 loc) • 4.32 kB
JavaScript
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