@paroicms/server 1.116.6 → 1.117.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (25) hide show
  1. package/README.md +2 -6
  2. package/dist/connector/site-schema/derive-og-type.d.ts +1 -0
  3. package/dist/connector/site-schema/derive-og-type.js +9 -0
  4. package/dist/connector/site-schema/derive-og-type.js.map +1 -0
  5. package/dist/connector/site-schema/site-schema-factory.js +7 -2
  6. package/dist/connector/site-schema/site-schema-factory.js.map +1 -1
  7. package/dist/rendered-site/liquidjs-filters/head-tags-filter.js +12 -1
  8. package/dist/rendered-site/liquidjs-filters/head-tags-filter.js.map +1 -1
  9. package/dist/rendered-site/liquidjs-filters/info-filter.js +24 -1
  10. package/dist/rendered-site/liquidjs-filters/info-filter.js.map +1 -1
  11. package/dist/rendered-site/liquidjs-filters/json-ld-filter.d.ts +2 -0
  12. package/dist/rendered-site/liquidjs-filters/json-ld-filter.js +10 -0
  13. package/dist/rendered-site/liquidjs-filters/json-ld-filter.js.map +1 -0
  14. package/dist/rendered-site/page-route/raw-document-payload.js +1 -0
  15. package/dist/rendered-site/page-route/raw-document-payload.js.map +1 -1
  16. package/dist/rendering-payload/create-doc-drop.js +2 -0
  17. package/dist/rendering-payload/create-doc-drop.js.map +1 -1
  18. package/dist/rendering-payload/doc-values.queries.js +5 -1
  19. package/dist/rendering-payload/doc-values.queries.js.map +1 -1
  20. package/dist/rendering-payload/json-ld-payload.d.ts +6 -0
  21. package/dist/rendering-payload/json-ld-payload.js +146 -0
  22. package/dist/rendering-payload/json-ld-payload.js.map +1 -0
  23. package/dist/tsconfig.tsbuildinfo +1 -1
  24. package/package.json +10 -10
  25. package/site-schema-lib/authors-lib.site-schema.json +1 -0
@@ -0,0 +1,146 @@
1
+ import { toAbsoluteUrl } from "@paroicms/internal-server-lib";
2
+ import { encodeLNodeId } from "@paroicms/public-anywhere-lib";
3
+ import { type } from "arktype";
4
+ import { getSiteFieldValue } from "../admin-backend/fields/load-fields.queries.js";
5
+ import { getHandleOfSiteField } from "../common/media-handles.helpers.js";
6
+ import { toMSourceMedia } from "../common/medias/to-media-values.js";
7
+ import { truncExcerptToWord } from "../helpers/excerpt.helpers.js";
8
+ import { loadOrFromRenderingCache } from "../liquidjs-tools/liquidjs-drop.js";
9
+ import { getFeaturedImageOf } from "../rendered-site/helpers/medias.helpers.js";
10
+ import { getUrlOfDocument } from "../rendered-site/page-route/make-url.js";
11
+ import { getPublicBreadcrumb } from "./breadcrumb.queries.js";
12
+ import { loadExcerpt } from "./excerpt.queries.js";
13
+ import { loadPublicFieldValues } from "./field-values.js";
14
+ import { makeImageAvailable, makeImageAvailableByHandle } from "./make-image-available.js";
15
+ const StringOrUndefinedAT = type("string|undefined");
16
+ const articleJsonLdTypes = new Set(["Article", "BlogPosting"]);
17
+ export async function makeJsonLdPayload(renderingContext, documentType, docValues, options) {
18
+ const { siteContext } = renderingContext;
19
+ const graph = [];
20
+ const siteUrl = toAbsoluteUrl(siteContext, "/");
21
+ const excerpt = await loadOrFromRenderingCache(renderingContext, `excerpt:${encodeLNodeId(docValues)}:full`, () => loadExcerpt(siteContext, renderingContext.tracker, {
22
+ lNodeId: docValues,
23
+ fieldTypes: documentType.fields ?? [],
24
+ }));
25
+ const url = options.url ??
26
+ (await loadOrFromRenderingCache(renderingContext, `url:${encodeLNodeId(docValues)}`, () => loadUrlOfDocument(renderingContext, docValues)));
27
+ const siteTitle = await loadOrFromRenderingCache(renderingContext, `siteFields:${docValues.language}:title`, async () => {
28
+ const title = await getSiteFieldValue(siteContext, {
29
+ fieldName: "title",
30
+ language: docValues.language,
31
+ publishedOnly: true,
32
+ });
33
+ return StringOrUndefinedAT.assert(title);
34
+ });
35
+ const absoluteUrl = toAbsoluteUrl(siteContext, url);
36
+ const isArticleType = articleJsonLdTypes.has(documentType.jsonLdType ?? "");
37
+ const description = excerpt
38
+ ? truncExcerptToWord(excerpt, 160)
39
+ : docValues.metaDescription
40
+ ? truncExcerptToWord(docValues.metaDescription, 160)
41
+ : undefined;
42
+ const pageEntity = {
43
+ "@type": documentType.jsonLdType ?? "WebPage",
44
+ "@id": `${absoluteUrl}/#webpage`,
45
+ url: absoluteUrl,
46
+ inLanguage: docValues.language,
47
+ isPartOf: { "@id": `${siteUrl}#website` },
48
+ };
49
+ if (isArticleType) {
50
+ pageEntity.headline = docValues.title;
51
+ }
52
+ else {
53
+ pageEntity.name = docValues.title;
54
+ }
55
+ if (description)
56
+ pageEntity.description = description;
57
+ if (docValues.publishDate)
58
+ pageEntity.datePublished = docValues.publishDate;
59
+ if (docValues.updatedAt)
60
+ pageEntity.dateModified = docValues.updatedAt;
61
+ if (isArticleType) {
62
+ const featuredImageId = await loadOrFromRenderingCache(renderingContext, `featuredImage:${encodeLNodeId(docValues)}`, async () => (await getFeaturedImageOf(renderingContext, {
63
+ nodeId: docValues.nodeId,
64
+ documentType,
65
+ }))?.id);
66
+ if (featuredImageId !== undefined) {
67
+ const ogMedia = await siteContext.mediaStorage.getMedia({ mediaId: featuredImageId });
68
+ if (ogMedia?.kind === "image") {
69
+ const imageVariant = await makeImageAvailable(renderingContext, toMSourceMedia(siteContext, ogMedia), { pixelRatio: 1, resizeRule: "1200x630" });
70
+ pageEntity.image = {
71
+ "@type": "ImageObject",
72
+ url: toAbsoluteUrl(siteContext, imageVariant.url),
73
+ width: imageVariant.rawWidth,
74
+ height: imageVariant.rawHeight,
75
+ };
76
+ }
77
+ }
78
+ const authorsField = documentType.fields?.find((f) => f.dataType === "labeling" && f.storedAs === "labeling" && f.taxonomy === "author");
79
+ if (authorsField) {
80
+ const fieldValues = await loadPublicFieldValues(renderingContext, {
81
+ typeName: docValues.type,
82
+ lNodeId: docValues,
83
+ fieldNames: [authorsField.name],
84
+ });
85
+ const authorTerms = fieldValues && typeof fieldValues === "object"
86
+ ? fieldValues[authorsField.name]
87
+ : undefined;
88
+ if (authorTerms && Array.isArray(authorTerms) && authorTerms.length > 0) {
89
+ pageEntity.author = authorTerms.map((term) => {
90
+ const entry = { "@type": "Person", name: term.title };
91
+ if (term.url)
92
+ entry.url = toAbsoluteUrl(siteContext, term.url);
93
+ return entry;
94
+ });
95
+ }
96
+ }
97
+ const publisher = { "@type": "Organization", name: siteTitle };
98
+ const logoHandle = getHandleOfSiteField(siteContext, { fieldName: "logo" });
99
+ const logoImage = await makeImageAvailableByHandle(renderingContext, { handle: logoHandle }, { resizeRule: "x112x", pixelRatio: 1 });
100
+ if (logoImage) {
101
+ publisher.logo = {
102
+ "@type": "ImageObject",
103
+ url: toAbsoluteUrl(siteContext, logoImage.url),
104
+ width: logoImage.rawWidth,
105
+ height: logoImage.rawHeight,
106
+ };
107
+ }
108
+ pageEntity.publisher = publisher;
109
+ }
110
+ graph.push(pageEntity);
111
+ const breadcrumbItems = await loadOrFromRenderingCache(renderingContext, `breadcrumb:${encodeLNodeId(docValues)}`, () => getPublicBreadcrumb(renderingContext, docValues));
112
+ const listItems = breadcrumbItems
113
+ .filter((item) => item.url)
114
+ .map((item, index) => ({
115
+ "@type": "ListItem",
116
+ position: index + 1,
117
+ name: item.title ?? "",
118
+ item: toAbsoluteUrl(siteContext, item.url),
119
+ }));
120
+ if (listItems.length > 0) {
121
+ graph.push({
122
+ "@type": "BreadcrumbList",
123
+ itemListElement: listItems,
124
+ });
125
+ }
126
+ if (documentType.typeName === "home") {
127
+ graph.push({
128
+ "@type": "WebSite",
129
+ "@id": `${siteUrl}#website`,
130
+ name: siteTitle,
131
+ url: siteUrl,
132
+ inLanguage: docValues.language,
133
+ });
134
+ }
135
+ return graph;
136
+ }
137
+ async function loadUrlOfDocument(renderingContext, documentId) {
138
+ const { siteContext } = renderingContext;
139
+ const { url, dependencyKeys } = await getUrlOfDocument(siteContext, renderingContext.tracker, documentId, {
140
+ returnUrlDependencyKeys: true,
141
+ forPreview: renderingContext.isPreview,
142
+ });
143
+ renderingContext.addDependencyKey(...dependencyKeys);
144
+ return url;
145
+ }
146
+ //# sourceMappingURL=json-ld-payload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-ld-payload.js","sourceRoot":"","sources":["../../src/rendering-payload/json-ld-payload.ts"],"names":[],"mappings":"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"}