@nakedcreativity/cee-ms-node 2.0.0-beta.1 → 2.0.0-beta.10

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.
@@ -0,0 +1,591 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_STRUCTURED_DATA = exports.STRUCTURED_DATA_PARTS = exports.STRUCTURED_DATA_TYPES = void 0;
4
+ exports.entityOf = entityOf;
5
+ exports.enabledTypes = enabledTypes;
6
+ exports.structuredDataGraph = structuredDataGraph;
7
+ exports.serialiseJsonLd = serialiseJsonLd;
8
+ exports.imageUrl = imageUrl;
9
+ exports.isoDate = isoDate;
10
+ exports.text = text;
11
+ exports.plain = plain;
12
+ /** The types a page or the site's defaults can switch on, in the order the tag outputs them. */
13
+ exports.STRUCTURED_DATA_TYPES = [
14
+ 'WEBSITE',
15
+ 'ORGANISATION',
16
+ 'WEBPAGE',
17
+ 'BREADCRUMB',
18
+ 'ARTICLE',
19
+ 'FAQ',
20
+ ];
21
+ exports.STRUCTURED_DATA_PARTS = [...exports.STRUCTURED_DATA_TYPES, 'ENTITY'];
22
+ /**
23
+ * Used when the site has published no defaults. The site and organisation are described once, on the home
24
+ * page; other pages refer to them by `@id` with a short copy.
25
+ */
26
+ exports.DEFAULT_STRUCTURED_DATA = {
27
+ home: ['WEBSITE', 'WEBPAGE', 'ORGANISATION', 'FAQ'],
28
+ page: ['WEBPAGE', 'BREADCRUMB', 'FAQ'],
29
+ blog: ['WEBPAGE', 'BREADCRUMB', 'FAQ'],
30
+ article: ['WEBPAGE', 'BREADCRUMB', 'ARTICLE', 'FAQ'],
31
+ };
32
+ /** Entities whose node takes reviews. Google ignores reviews a business publishes about itself. */
33
+ const REVIEWED = ['PRODUCT', 'EVENT'];
34
+ /** The page's entity, defaulting as Cee.ms publishes it, for pages published before entities. */
35
+ function entityOf(page) {
36
+ if (page.entity)
37
+ return page.entity;
38
+ if (page.type === 'article')
39
+ return 'ARTICLE';
40
+ return page.fullpath ? 'PAGE' : 'HOME';
41
+ }
42
+ /** Which of the site's defaults a page uses: articles and home by their entity, blogs by their type. */
43
+ function kindOf(page) {
44
+ const entity = entityOf(page);
45
+ if (entity === 'ARTICLE')
46
+ return 'article';
47
+ if (page.type === 'blog')
48
+ return 'blog';
49
+ return entity === 'HOME' ? 'home' : 'page';
50
+ }
51
+ /** The types a page outputs: its own choice, else the site's defaults for its kind. */
52
+ function enabledTypes(site, page) {
53
+ const own = page.structuredData?.types;
54
+ if (Array.isArray(own))
55
+ return own;
56
+ const kind = kindOf(page);
57
+ return site.site?.structuredData?.defaults?.[kind] ?? exports.DEFAULT_STRUCTURED_DATA[kind];
58
+ }
59
+ /**
60
+ * The page's schema.org graph: one node for each enabled type that has the data it needs, and one for its
61
+ * entity. A node missing a required property (an event with no start date, a product with neither price nor
62
+ * reviews) is left out rather than output invalid. `only` limits the graph to those parts.
63
+ */
64
+ function structuredDataGraph(site, page, only) {
65
+ const b = new Builder(site, page, enabledTypes(site, page));
66
+ const entity = ENTITIES[entityOf(page)]?.(b);
67
+ if (entity)
68
+ b.entityId = entity['@id'];
69
+ const graph = [];
70
+ for (const type of exports.STRUCTURED_DATA_TYPES) {
71
+ if (!b.enabled.has(type) || (only && !only.includes(type)))
72
+ continue;
73
+ const node = BUILDERS[type](b);
74
+ if (node)
75
+ graph.push(node);
76
+ }
77
+ if (!only || only.includes('ENTITY')) {
78
+ if (entity)
79
+ graph.push(entity);
80
+ // people the page's modules feature, each once
81
+ const ids = new Set(graph.map((n) => n['@id']));
82
+ for (const person of featuredPeople(b)) {
83
+ if (ids.has(person['@id']))
84
+ continue;
85
+ ids.add(person['@id']);
86
+ graph.push(person);
87
+ }
88
+ }
89
+ return { '@context': 'https://schema.org', '@graph': graph };
90
+ }
91
+ /** JSON for a `<script>`: `<`, `>` and `&` are escaped so content can't end the script. */
92
+ function serialiseJsonLd(value) {
93
+ return JSON.stringify(value).replace(/</g, '\\u003c').replace(/>/g, '\\u003e').replace(/&/g, '\\u0026');
94
+ }
95
+ /** The URLs and shared properties every builder needs. */
96
+ class Builder {
97
+ site;
98
+ page;
99
+ root;
100
+ enabled;
101
+ /** The `@id` of the page's entity node, when it has one. */
102
+ entityId;
103
+ constructor(site, page, enabled) {
104
+ this.site = site;
105
+ this.page = page;
106
+ this.root = String(site.site?.url ?? '').replace(/\/+$/, '');
107
+ this.enabled = new Set(enabled);
108
+ }
109
+ /** The absolute URL of a site path, `''` being the home page. */
110
+ url(path = '') {
111
+ return path && path !== 'home' ? `${this.root}/${path}` : `${this.root}/`;
112
+ }
113
+ get pageUrl() {
114
+ return this.url(this.page.fullpath);
115
+ }
116
+ id(path, fragment) {
117
+ return `${this.url(path)}#${fragment}`;
118
+ }
119
+ get pageName() {
120
+ return text(this.page.title) ?? text(this.page.name);
121
+ }
122
+ /**
123
+ * The organisation, for a publisher, organiser or provider: its `@id` when this page carries the full
124
+ * node, else a short copy, so the property still has a name where the full node isn't output.
125
+ */
126
+ get organisation() {
127
+ const org = this.site.site?.organisation;
128
+ if (!org?.name)
129
+ return;
130
+ const ref = { '@id': this.id('', 'organization') };
131
+ if (this.enabled.has('ORGANISATION'))
132
+ return ref;
133
+ return compact({
134
+ '@type': org.type || 'Organization',
135
+ ...ref,
136
+ name: org.name,
137
+ url: text(org.url) ?? (this.root ? this.url() : undefined),
138
+ logo: imageUrl(org.logo),
139
+ });
140
+ }
141
+ /** An address on the site as an absolute URL; one that is already absolute is left alone. */
142
+ absolute(href) {
143
+ return /^https?:\/\//i.test(href) ? href : `${this.root}${href.startsWith('/') ? '' : '/'}${href}`;
144
+ }
145
+ /**
146
+ * A person from People. Every page uses the same `@id` for them: their profile page's when it is published,
147
+ * else one of the site's. The short copy names them; `full` describes them, as their profile page and the
148
+ * pages featuring them do.
149
+ */
150
+ person(person, full = false) {
151
+ const name = text(person.name);
152
+ if (!name)
153
+ return;
154
+ const profile = text(person.profile);
155
+ const sameAs = list(sameAsOf(person));
156
+ const short = compact({
157
+ '@type': 'Person',
158
+ '@id': profile ? `${this.absolute(profile)}#person` : this.id('', `person-${person._id}`),
159
+ name,
160
+ jobTitle: text(person.jobTitle),
161
+ url: profile ? this.absolute(profile) : sameAs?.[0],
162
+ });
163
+ if (!full)
164
+ return short;
165
+ return compact({
166
+ ...short,
167
+ image: imageUrl(person.photo),
168
+ description: text(plain(person.bio)),
169
+ sameAs,
170
+ worksFor: this.organisation,
171
+ });
172
+ }
173
+ /** An article's authors (`page.authors`), else the organisation. One author is a node; several, a list. */
174
+ get authors() {
175
+ const nodes = (this.page.authors ?? []).flatMap((author) => {
176
+ if (author.kind === 'person')
177
+ return list([this.person(author)]) ?? [];
178
+ if (author.kind === 'organisation')
179
+ return list([this.organisation]) ?? [];
180
+ const name = text(author.name);
181
+ return name
182
+ ? [compact({ '@type': 'Person', name, jobTitle: text(author.jobTitle), url: text(author.url) })]
183
+ : [];
184
+ });
185
+ if (!nodes.length)
186
+ return this.organisation;
187
+ return nodes.length === 1 ? nodes[0] : nodes;
188
+ }
189
+ /** The person from People whose profile page this is, once loaded (see `wrapLinks`). */
190
+ get profilePerson() {
191
+ const person = this.page.person;
192
+ return entityOf(this.page) === 'PERSON' && person && typeof person === 'object' && text(person.name)
193
+ ? person
194
+ : undefined;
195
+ }
196
+ /** The website, by `@id` when this page carries it, else a short copy. */
197
+ get website() {
198
+ const ref = { '@id': this.id('', 'website') };
199
+ if (this.enabled.has('WEBSITE'))
200
+ return ref;
201
+ return compact({ '@type': 'WebSite', ...ref, url: this.url(), name: text(this.site.site?.name) });
202
+ }
203
+ }
204
+ const BUILDERS = {
205
+ WEBSITE(b) {
206
+ if (!b.root)
207
+ return;
208
+ return compact({
209
+ '@type': 'WebSite',
210
+ '@id': b.id('', 'website'),
211
+ url: b.url(),
212
+ name: text(b.site.site?.name),
213
+ publisher: b.organisation,
214
+ });
215
+ },
216
+ ORGANISATION(b) {
217
+ const org = b.site.site?.organisation;
218
+ if (!org?.name)
219
+ return;
220
+ return compact({
221
+ '@type': org.type || 'Organization',
222
+ '@id': b.id('', 'organization'),
223
+ name: org.name,
224
+ legalName: text(org.legalName),
225
+ url: text(org.url) ?? (b.root ? b.url() : undefined),
226
+ logo: imageUrl(org.logo),
227
+ // LocalBusiness wants an image too; the logo is the best we have
228
+ image: org.type && org.type !== 'Organization' ? imageUrl(org.logo) : undefined,
229
+ email: text(org.email),
230
+ telephone: text(org.telephone),
231
+ address: postalAddress(org.address),
232
+ sameAs: list(org.sameAs),
233
+ openingHoursSpecification: list((org.openingHours ?? [])
234
+ .filter((h) => h.days?.length && h.opens && h.closes)
235
+ .map((h) => ({
236
+ '@type': 'OpeningHoursSpecification',
237
+ dayOfWeek: h.days,
238
+ opens: h.opens,
239
+ closes: h.closes,
240
+ }))),
241
+ priceRange: text(org.priceRange),
242
+ });
243
+ },
244
+ WEBPAGE(b) {
245
+ if (!b.root)
246
+ return;
247
+ const profile = !!b.profilePerson;
248
+ const reviewer = b.page.byline?.reviewedBy;
249
+ return compact({
250
+ // a page about one person from People is their profile page
251
+ '@type': profile ? 'ProfilePage' : 'WebPage',
252
+ '@id': b.id(b.page.fullpath, 'webpage'),
253
+ url: b.pageUrl,
254
+ name: b.pageName,
255
+ description: text(b.page.description),
256
+ primaryImageOfPage: imageUrl(b.page.social),
257
+ isPartOf: b.website,
258
+ breadcrumb: b.enabled.has('BREADCRUMB') && crumbs(b).length > 1
259
+ ? { '@id': b.id(b.page.fullpath, 'breadcrumb') }
260
+ : undefined,
261
+ mainEntity: b.entityId ? { '@id': b.entityId } : undefined,
262
+ dateCreated: profile ? isoDate(b.page.createdAt) : undefined,
263
+ dateModified: isoDate(b.page.updatedAt),
264
+ reviewedBy: reviewer && typeof reviewer === 'object' ? b.person(reviewer) : undefined,
265
+ });
266
+ },
267
+ BREADCRUMB(b) {
268
+ const items = crumbs(b);
269
+ // a single crumb (the home page itself) isn't a trail
270
+ if (!b.root || items.length < 2)
271
+ return;
272
+ return {
273
+ '@type': 'BreadcrumbList',
274
+ '@id': b.id(b.page.fullpath, 'breadcrumb'),
275
+ itemListElement: items.map((item, i) => ({
276
+ '@type': 'ListItem',
277
+ position: i + 1,
278
+ name: item.name,
279
+ item: item.url,
280
+ })),
281
+ };
282
+ },
283
+ ARTICLE(b) {
284
+ if (entityOf(b.page) !== 'ARTICLE' || !b.pageName)
285
+ return;
286
+ const published = isoDate(b.page.date) ?? isoDate(b.page.publishedAt);
287
+ return compact({
288
+ '@type': 'BlogPosting',
289
+ '@id': b.id(b.page.fullpath, 'article'),
290
+ headline: b.pageName,
291
+ description: text(b.page.description),
292
+ image: imageUrl(b.page.social),
293
+ datePublished: published,
294
+ dateModified: isoDate(b.page.updatedAt) ?? published,
295
+ mainEntityOfPage: b.root ? { '@id': b.id(b.page.fullpath, 'webpage') } : undefined,
296
+ author: b.authors,
297
+ publisher: b.organisation,
298
+ keywords: list(b.page.tags)?.join(', '),
299
+ });
300
+ },
301
+ FAQ(b) {
302
+ const mappings = b.site.site?.structuredData?.faqModules ?? {};
303
+ const questions = [];
304
+ for (const module of pageModules(b.page)) {
305
+ const map = mappings[module.type];
306
+ const items = map && module.content?.[map.itemsField];
307
+ if (!Array.isArray(items))
308
+ continue;
309
+ for (const item of items) {
310
+ const name = text(plain(item?.[map.questionField]));
311
+ const answer = text(item?.[map.answerField]);
312
+ if (!name || !answer)
313
+ continue;
314
+ questions.push({
315
+ '@type': 'Question',
316
+ name,
317
+ acceptedAnswer: { '@type': 'Answer', text: answer },
318
+ });
319
+ }
320
+ }
321
+ if (!questions.length)
322
+ return;
323
+ return { '@type': 'FAQPage', '@id': b.id(b.page.fullpath, 'faq'), mainEntity: questions };
324
+ },
325
+ };
326
+ /** The node for what the page is about. Home and plain pages have none of their own. */
327
+ const ENTITIES = {
328
+ EVENT(b) {
329
+ const event = b.page.structuredData?.event;
330
+ const name = text(event?.name) ?? b.pageName;
331
+ const startDate = isoDate(event?.startDate);
332
+ if (!event || !name || !startDate)
333
+ return;
334
+ const venue = compact({
335
+ '@type': 'Place',
336
+ name: text(event.location?.name),
337
+ address: postalAddress(event.location?.address),
338
+ });
339
+ const place = Object.keys(venue).length > 1 ? venue : undefined;
340
+ const virtual = event.location?.url ? { '@type': 'VirtualLocation', url: event.location.url } : undefined;
341
+ return compact({
342
+ '@type': 'Event',
343
+ '@id': b.id(b.page.fullpath, 'event'),
344
+ name,
345
+ description: text(event.description) ?? text(b.page.description),
346
+ startDate,
347
+ endDate: isoDate(event.endDate),
348
+ eventStatus: event.status ? `https://schema.org/Event${pascal(event.status)}` : undefined,
349
+ eventAttendanceMode: event.attendance
350
+ ? `https://schema.org/${pascal(event.attendance)}EventAttendanceMode`
351
+ : undefined,
352
+ location: event.attendance === 'ONLINE' ? virtual : event.attendance === 'MIXED' ? list([place, virtual]) : place,
353
+ image: imageUrl(event.image) ?? imageUrl(b.page.social),
354
+ offers: offer(event.offers, b.pageUrl),
355
+ organizer: b.organisation,
356
+ ...reviews(b),
357
+ });
358
+ },
359
+ PRODUCT(b) {
360
+ const product = b.page.structuredData?.product;
361
+ const name = text(product?.name) ?? b.pageName;
362
+ if (!name)
363
+ return;
364
+ const offers = product && offer(product, b.pageUrl);
365
+ const rated = reviews(b);
366
+ // Google needs an offer, a review or a rating
367
+ if (!offers && !rated.review)
368
+ return;
369
+ return compact({
370
+ '@type': 'Product',
371
+ '@id': b.id(b.page.fullpath, 'product'),
372
+ name,
373
+ description: text(product?.description) ?? text(b.page.description),
374
+ image: imageUrl(product?.image) ?? imageUrl(b.page.social),
375
+ sku: text(product?.sku),
376
+ brand: product?.brand ? { '@type': 'Brand', name: product.brand } : undefined,
377
+ offers,
378
+ ...rated,
379
+ });
380
+ },
381
+ PERSON(b) {
382
+ // their full description, on their profile page
383
+ const chosen = b.profilePerson;
384
+ if (chosen)
385
+ return compact({ ...b.person(chosen, true), '@id': b.id(b.page.fullpath, 'person'), url: b.pageUrl });
386
+ // the details typed on the page, before People
387
+ const person = b.page.structuredData?.person;
388
+ if (!person?.name)
389
+ return;
390
+ return compact({
391
+ '@type': 'Person',
392
+ '@id': b.id(b.page.fullpath, 'person'),
393
+ name: person.name,
394
+ jobTitle: text(person.jobTitle),
395
+ url: text(person.url) ?? (b.root ? b.pageUrl : undefined),
396
+ image: imageUrl(person.image) ?? imageUrl(b.page.social),
397
+ sameAs: list(person.sameAs),
398
+ worksFor: b.organisation,
399
+ });
400
+ },
401
+ SERVICE(b) {
402
+ const service = b.page.structuredData?.service;
403
+ const name = text(service?.name) ?? b.pageName;
404
+ if (!name)
405
+ return;
406
+ return compact({
407
+ '@type': 'Service',
408
+ '@id': b.id(b.page.fullpath, 'service'),
409
+ name,
410
+ description: text(service?.description) ?? text(b.page.description),
411
+ serviceType: text(service?.serviceType),
412
+ areaServed: text(service?.areaServed),
413
+ image: imageUrl(service?.image) ?? imageUrl(b.page.social),
414
+ provider: b.organisation,
415
+ offers: offer(service?.offers, b.pageUrl),
416
+ });
417
+ },
418
+ };
419
+ /**
420
+ * `review` and `aggregateRating` from the page's modules whose type maps reviews, for a product or event.
421
+ * The rating is worked out from the reviews, so it always matches what the page shows. Ratings on other
422
+ * scales are converted to the first module's.
423
+ */
424
+ function reviews(b) {
425
+ if (!REVIEWED.includes(entityOf(b.page)))
426
+ return {};
427
+ const mappings = b.site.site?.structuredData?.reviewModules ?? {};
428
+ const review = [];
429
+ let scale;
430
+ let total = 0;
431
+ for (const module of pageModules(b.page)) {
432
+ const map = mappings[module.type];
433
+ const items = map && module.content?.[map.itemsField];
434
+ if (!Array.isArray(items))
435
+ continue;
436
+ const best = map.bestRating ?? 5;
437
+ const worst = map.worstRating ?? 1;
438
+ for (const item of items) {
439
+ const author = text(plain(item?.[map.authorField]));
440
+ const rating = Number(text(item?.[map.ratingField]));
441
+ if (!author || !isFinite(rating) || rating < worst || rating > best || best <= worst)
442
+ continue;
443
+ scale ??= { best, worst };
444
+ total += scale.worst + ((rating - worst) / (best - worst)) * (scale.best - scale.worst);
445
+ review.push(compact({
446
+ '@type': 'Review',
447
+ author: { '@type': 'Person', name: author },
448
+ reviewRating: { '@type': 'Rating', ratingValue: rating, bestRating: best, worstRating: worst },
449
+ reviewBody: map.bodyField ? text(plain(item?.[map.bodyField])) : undefined,
450
+ datePublished: map.dateField ? isoDate(item?.[map.dateField])?.slice(0, 10) : undefined,
451
+ }));
452
+ }
453
+ }
454
+ if (!review.length || !scale)
455
+ return {};
456
+ return {
457
+ review,
458
+ aggregateRating: {
459
+ '@type': 'AggregateRating',
460
+ ratingValue: Math.round((total / review.length) * 10) / 10,
461
+ reviewCount: review.length,
462
+ bestRating: scale.best,
463
+ worstRating: scale.worst,
464
+ },
465
+ };
466
+ }
467
+ /** A person's profile addresses: `sameAs` from `site.json`, else their `links` column. */
468
+ function sameAsOf(person) {
469
+ if (Array.isArray(person.sameAs))
470
+ return person.sameAs.map(String);
471
+ const links = Array.isArray(person.links) ? person.links : [];
472
+ return links.flatMap((link) => {
473
+ const url = text(link?.url);
474
+ return url ? [url] : [];
475
+ });
476
+ }
477
+ /**
478
+ * The people the page's modules feature, from module types that map a row field to People: each described,
479
+ * and working for the organisation. A person merely mentioned in a module without the mapping isn't output.
480
+ */
481
+ function featuredPeople(b) {
482
+ const mappings = b.site.site?.structuredData?.peopleModules ?? {};
483
+ const nodes = [];
484
+ for (const module of pageModules(b.page)) {
485
+ const map = mappings[module.type];
486
+ const value = map && module.content?.[map.field];
487
+ for (const person of Array.isArray(value) ? value : value ? [value] : []) {
488
+ if (!person || typeof person !== 'object')
489
+ continue;
490
+ const node = b.person(person, true);
491
+ if (node)
492
+ nodes.push(node);
493
+ }
494
+ }
495
+ return nodes;
496
+ }
497
+ /** Home, then the page's published ancestors, as `tags/breadcrumb.ts` walks them, ending at the page. */
498
+ function crumbs(b) {
499
+ const { site, page } = b;
500
+ const items = [];
501
+ const home = site.pages?.home;
502
+ if (home)
503
+ items.push({ name: text(home.name) ?? 'Home', url: b.url() });
504
+ if (!page.fullpath)
505
+ return items;
506
+ let path = '';
507
+ for (const handle of page.path ?? []) {
508
+ path += handle;
509
+ const entry = site.pages?.[path];
510
+ if (entry) {
511
+ items.push({ name: text(entry.name) ?? handle, url: b.url(path) });
512
+ path += '/';
513
+ }
514
+ }
515
+ return items;
516
+ }
517
+ function pageModules(page) {
518
+ const modules = Object.values(page.regions ?? {}).flatMap((region) => region?.modules ?? []);
519
+ for (const module of Object.values(page.modules ?? {})) {
520
+ if (module && typeof module === 'object')
521
+ modules.push(module);
522
+ }
523
+ return modules;
524
+ }
525
+ function offer(o, fallbackUrl) {
526
+ if (!o || typeof o.price !== 'number' || !o.currency)
527
+ return;
528
+ return compact({
529
+ '@type': 'Offer',
530
+ price: o.price,
531
+ priceCurrency: o.currency,
532
+ availability: o.availability ? `https://schema.org/${pascal(o.availability)}` : undefined,
533
+ url: text(o.url) ?? fallbackUrl,
534
+ });
535
+ }
536
+ function postalAddress(address) {
537
+ if (!address)
538
+ return;
539
+ const node = compact({
540
+ '@type': 'PostalAddress',
541
+ streetAddress: text(address.street),
542
+ addressLocality: text(address.locality),
543
+ addressRegion: text(address.region),
544
+ postalCode: text(address.postalCode),
545
+ addressCountry: text(address.country),
546
+ });
547
+ return Object.keys(node).length > 1 ? node : undefined;
548
+ }
549
+ function imageUrl(image) {
550
+ return image && typeof image.src === 'string' && image.src ? image.src : undefined;
551
+ }
552
+ /** A date published as an ISO string (or a `Date`, for custom pages) as an ISO string. */
553
+ function isoDate(value) {
554
+ if (!value)
555
+ return;
556
+ const date = value instanceof Date ? value : new Date(String(value));
557
+ return isNaN(date.getTime()) ? undefined : date.toISOString();
558
+ }
559
+ /** A non-empty trimmed string, else `undefined`. Stored links (`LinkDrop`) read as their address. */
560
+ function text(value) {
561
+ if (value == null)
562
+ return;
563
+ const s = String(value).trim();
564
+ return s ? s : undefined;
565
+ }
566
+ /** Rich text as plain text, for properties that take no markup. */
567
+ function plain(value) {
568
+ if (typeof value !== 'string')
569
+ return value;
570
+ return value
571
+ .replace(/<[^>]*>/g, ' ')
572
+ .replace(/&nbsp;/g, ' ')
573
+ .replace(/\s+/g, ' ');
574
+ }
575
+ /** `IN_STOCK` as `InStock`, for schema.org enumeration URLs. */
576
+ function pascal(value) {
577
+ return value
578
+ .toLowerCase()
579
+ .split('_')
580
+ .map((w) => w.charAt(0).toUpperCase() + w.slice(1))
581
+ .join('');
582
+ }
583
+ function list(values) {
584
+ const kept = (values ?? []).filter((v) => v !== undefined && v !== null && v !== '');
585
+ return kept.length ? kept : undefined;
586
+ }
587
+ /** Drops `undefined` properties. */
588
+ function compact(node) {
589
+ return Object.fromEntries(Object.entries(node).filter(([, v]) => v !== undefined));
590
+ }
591
+ //# sourceMappingURL=structured-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structured-data.js","sourceRoot":"","sources":["../src/structured-data.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import { Liquid } from 'liquidjs';
2
2
  /**
3
- * `{% blog <name> <template> [perPage] [tag] %}` renders one page of a blog's articles from `site.json` `blogs`,
4
- * optionally filtered by tag. The page number comes from the URL (`/news/2`).
3
+ * `{% blog <name> <template> [perPage] [tag] [author:<person>] %}` renders one page of a blog's articles from
4
+ * `site.json` `blogs`, optionally filtered by tag, or by a person from People in their byline (a person, such
5
+ * as `page.person` on their profile page, or a row id). The page number comes from the URL (`/news/2`).
5
6
  */
6
7
  export declare function registerBlogTag(engine: Liquid): void;