@paroicms/server
Version:
The ParoiCMS server
44 lines • 1.72 kB
JavaScript
import { type } from "arktype";
import { mainDbSchemaName } from "../connector/db-init/db-constants.js";
import { dbAnyLanguage } from "../context.js";
import { truncExcerptToWord } from "../helpers/excerpt.helpers.js";
const ExcerptRowAT = type({
excerpt: "string|null",
"+": "reject",
}).pipe((data) => ({
excerpt: data.excerpt ?? undefined,
}));
export async function loadExcerpt(siteContext, tracker, { lNodeId, fieldTypes, maxLength, }) {
const excerptFieldTypes = [];
for (const field of fieldTypes ?? []) {
if (field.storedAs === "text" &&
field.renderAs === "html" &&
field.useAsExcerpt !== undefined) {
const useAsExcerpt = field.useAsExcerpt;
excerptFieldTypes.push({
...field,
useAsExcerpt,
});
}
}
const orderedFieldTypes = excerptFieldTypes.sort((a, b) => a.useAsExcerpt - b.useAsExcerpt);
for (const field of orderedFieldTypes) {
const dbLanguage = field.localized ? lNodeId.language : dbAnyLanguage;
const row = await siteContext
.cn("PaFieldText as f")
.select("f.excerpt")
.where({
"f.field": field.name,
"f.nodeId": lNodeId.nodeId,
"f.language": dbLanguage,
})
.first();
tracker.trackAccess(mainDbSchemaName, "PaFieldText", "read");
let excerpt = row ? ExcerptRowAT.assert(row).excerpt : undefined;
excerpt = excerpt === "" ? undefined : excerpt;
if (excerpt) {
return maxLength === undefined ? excerpt : truncExcerptToWord(excerpt, maxLength);
}
}
}
//# sourceMappingURL=excerpt.queries.js.map