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