UNPKG

@azure-utils/storybooks

Version:

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

142 lines (139 loc) 5.29 kB
const require_chunk = require('./chunk-DWy1uDak.cjs'); const require_constants = require('./constants-94H7Co6A.cjs'); const require_mime_utils = require('./mime-utils-t6SSMbeF.cjs'); const require_projects = require('./projects-Dq7sJTc7.cjs'); const require_openapi_utils = require('./openapi-utils-CMVFCUk1.cjs'); const require_store = require('./store-CYxr095K.cjs'); const require_url_utils = require('./url-utils-Dy7KiQmB.cjs'); const require_projects_table = require('./projects-table-BIdoDclZ.cjs'); const require_openapi_handler = require('./openapi-handler-DHgi5PyL.cjs'); const __azure_functions = require_chunk.__toESM(require("@azure/functions")); const zod = require_chunk.__toESM(require("zod")); const node_fs = require_chunk.__toESM(require("node:fs")); const node_path = require_chunk.__toESM(require("node:path")); //#region src/handlers/web-ui-handlers.tsx var import_jsx_runtime = require_chunk.__toESM(require_store.require_jsx_runtime()); async function rootHandler(_request, context) { context.log("Serving SB root..."); const { connectionString, openapi } = require_store.getStore(); const projectModel = new require_projects.ProjectModel(context, connectionString); const projects = await projectModel.list(); return require_store.responseHTML(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(require_store.DocumentLayout, { title: "Home", toolbar: !openapi?.disabled ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("a", { href: require_store.urlBuilder.root("openapi"), target: "_blank", children: "OpenAPI" }) : null, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(require_projects_table.ProjectsTable, { projects, toolbar: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("a", { href: require_store.urlBuilder.allProjects(), children: "View all" }) }) })); } async function staticFileHandler(request, context) { const { filepath = "" } = request.params; const { staticDirs } = require_store.getStore(); context.log("Serving static file '%s' from '%s' dirs...", filepath, staticDirs.join(",")); const staticFilepaths = staticDirs.map((dir) => node_path.default.join(node_path.default.relative(process.cwd(), dir), filepath)); const staticFilepath = staticFilepaths.find(node_fs.default.existsSync); if (!staticFilepath) return { status: 404 }; context.debug("Static file '%s' found.", staticFilepath); return { status: 200, body: node_fs.default.createReadStream(staticFilepath, { encoding: "utf8", autoClose: true }), headers: { "Content-Type": require_mime_utils.getMimeType(staticFilepath) || "application/octet-stream", "Cache-Control": require_constants.CACHE_CONTROL_PUBLIC_WEEK } }; } //#endregion //#region src/routers/web-ui-router.ts const TAG = require_openapi_utils.openAPITags.webUI.name; function registerWebUIRouter(options) { const { authLevel, baseRoute, basePathParamsSchema, handlerWrapper, openAPIEnabled, serviceName } = options; __azure_functions.app.get(`${serviceName}-root`, { authLevel, route: require_url_utils.joinUrl(baseRoute), handler: handlerWrapper(rootHandler, [{ resource: "ui", action: "read" }]) }); const healthRoute = require_url_utils.joinUrl(baseRoute, "health"); __azure_functions.app.get(`${serviceName}-health-check`, { route: healthRoute, handler: handlerWrapper(() => ({ status: 200 }), []) }); const staticFileRoute = require_url_utils.joinUrl(baseRoute, "{**filepath}"); __azure_functions.app.get(`${serviceName}-static-files`, { authLevel, route: staticFileRoute, handler: handlerWrapper(staticFileHandler, [{ resource: "ui", action: "read" }]) }); if (openAPIEnabled) { __azure_functions.app.get(`${serviceName}-openapi`, { authLevel, route: require_url_utils.joinUrl(baseRoute, "openapi"), handler: handlerWrapper(require_openapi_handler.openAPIHandler, [{ resource: "openapi", action: "read" }]) }); require_openapi_utils.registerOpenAPIPath(baseRoute, { get: { tags: [TAG], summary: "Render homepage", requestParams: { path: basePathParamsSchema }, responses: { ...require_constants.commonErrorResponses, 200: { description: "Root endpoint", content: { [require_constants.CONTENT_TYPES.HTML]: { example: "<!DOCTYPE html>" } } }, 303: { description: "Redirects to all projects", headers: { Location: { description: "The URL to redirect to", schema: { type: "string", format: "uri" } } } } } } }); require_openapi_utils.registerOpenAPIPath(healthRoute, { get: { tags: [TAG], summary: "Health check", description: "Checks the health of the service.", requestParams: { path: basePathParamsSchema }, responses: { 200: { description: "Service is healthy." } } } }); } require_openapi_utils.registerOpenAPIPath(staticFileRoute, { get: { tags: [TAG], summary: "Serve static files", requestParams: { path: basePathParamsSchema.extend({ "**filepath": zod.default.string() }) }, responses: { 200: { description: "Static file served successfully." }, 404: { description: "File not found." } } } }); } //#endregion Object.defineProperty(exports, 'registerWebUIRouter', { enumerable: true, get: function () { return registerWebUIRouter; } });