UNPKG

@lucidcms/core

Version:

The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.

130 lines (127 loc) 3.92 kB
import { authenticate_default, client_authenticate_default, content_locale_default, log_route_default, permissions_default, validate_body_default, validate_csrf_default, validate_params_default, validate_query_default } from "./chunk-CGRLN764.js"; // src/utils/build-response.ts var getPath = (request) => { const originalUrl = request.originalUrl; return `${request.server.config.host}${originalUrl}`.split("?")[0] ?? ""; }; var buildMetaLinks = (request, params) => { const links = []; if (!params.pagination) return links; const { page, perPage, count } = params.pagination; const totalPages = Math.ceil(count / Number(perPage)); const url = new URL( `${request.protocol}://${request.hostname}${request.originalUrl}` ); for (let i = 0; i < totalPages; i++) { if (i !== 0) url.searchParams.set("page", String(i + 1)); else url.searchParams.delete("page"); links.push({ active: page === i + 1, label: String(i + 1), url: url.toString(), page: i + 1 }); } return links; }; var buildLinks = (request, params) => { if (!params.pagination) return void 0; const { page, perPage, count } = params.pagination; const totalPages = perPage === -1 ? 1 : Math.ceil(count / Number(perPage)); const url = new URL( `${request.protocol}://${request.hostname}${request.originalUrl}` ); const links = { first: null, last: null, next: null, prev: null }; url.searchParams.delete("page"); links.first = url.toString(); if (page !== totalPages) url.searchParams.set("page", String(totalPages)); links.last = url.toString(); if (page !== totalPages) { url.searchParams.set("page", String(Number(page) + 1)); links.next = url.toString(); } else { links.next = null; } if (page !== 1) { url.searchParams.set("page", String(Number(page) - 1)); links.prev = url.toString(); } else { links.prev = null; } return links; }; var formatAPIResponse = (request, params) => { let lastPage = null; if (params.pagination) { if (params.pagination.perPage === -1) { lastPage = 1; } else { lastPage = Math.ceil( params.pagination.count / Number(params.pagination.perPage) ); } } const meta = { path: getPath(request), links: buildMetaLinks(request, params), currentPage: params.pagination?.page ?? null, perPage: params.pagination?.perPage ?? null, total: Number(params.pagination?.count) || null, lastPage }; const links = buildLinks(request, params); return { data: params.data || null, meta, links }; }; var build_response_default = formatAPIResponse; // src/utils/route.ts var route = (fastify, opts) => { const { method, url, controller, swaggerSchema, zodSchema, middleware } = opts; const preValidation = []; const preHandler = [log_route_default("prehandler")]; if (middleware?.authenticate) preHandler.push(authenticate_default); if (middleware?.clientAuthentication) preHandler.push(client_authenticate_default); if (middleware?.validateCSRF) preHandler.push(validate_csrf_default); if (middleware?.contentLocale) preHandler.push(content_locale_default); if (zodSchema?.body !== void 0) preValidation.push(validate_body_default(zodSchema.body)); if (zodSchema?.params !== void 0) preValidation.push(validate_params_default(zodSchema.params)); if (zodSchema?.query !== void 0) preValidation.push(validate_query_default(zodSchema.query)); if (opts.permissions) preHandler.push(permissions_default(opts.permissions)); fastify.route({ method, url, handler: controller, preValidation, preHandler, schema: swaggerSchema, onResponse: [log_route_default("onResponse")], bodyLimit: opts.bodyLimit }); }; var route_default = route; export { build_response_default, route_default }; //# sourceMappingURL=chunk-SX4AK7IW.js.map