@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
JavaScript
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