@nakedcreativity/cee-ms-node 2.0.0-beta.2 → 2.0.0-beta.4

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.
package/README.md CHANGED
@@ -38,6 +38,42 @@ Link settings read as their address, like links in modules (`{{ settings.cta.kin
38
38
  the settings as edited; the published site shows them once they are published. A static global named `settings` in
39
39
  `config.globals` takes precedence, so a site that already uses that name keeps working.
40
40
 
41
+ Published files are read from `ceems/` in the bucket or folder (`ceems/pages/site.json`, `ceems/pages/<id>.json`,
42
+ and `ceems/data/<id>.json` through `loadS3File('data/<id>.json')`), where Cee.ms 2 publishes them. That lets it
43
+ publish to the same bucket as Cee.ms 1 while a site moves over. Set `cachePrefix: ''` to read from the top instead.
44
+
45
+ ## Structured data
46
+
47
+ `{% structureddata %}` outputs the page's [schema.org](https://schema.org) JSON-LD in one
48
+ `<script type="application/ld+json">`. Put it in the layout's `<head>`:
49
+
50
+ ```liquid
51
+ <head>
52
+ <title>{{ page.title | default: page.name }} | {{ site.name }}</title>
53
+ {% structureddata %}
54
+ </head>
55
+ ```
56
+
57
+ It outputs the types the page has switched on in its settings, or the site's defaults for its kind of page (page,
58
+ blog or article). Each is built from data Cee.ms already has:
59
+
60
+ | Type | From |
61
+ |---|---|
62
+ | `website` (WebSite) | the site's name and URL |
63
+ | `organisation` (Organization, or a LocalBusiness type) | the organisation on the Settings screen |
64
+ | `webpage` (WebPage) | the page's SEO title, description and social image |
65
+ | `breadcrumb` (BreadcrumbList) | home and the page's published ancestors |
66
+ | `article` (BlogPosting) | an article's title, description, image, date and tags |
67
+ | `faq` (FAQPage) | the questions in the page's modules whose type maps them |
68
+ | `event`, `product`, `person` | the details entered for them in the page's settings |
69
+
70
+ A type missing what it needs (an event with no start date, a product with no price) is left out rather than output
71
+ invalid, and the tag outputs nothing when no type has data. Name types to output only those, to place them
72
+ separately: `{% structureddata 'article' 'faq' %}`.
73
+
74
+ The organisation is also in templates as `site.organisation`, e.g. `{{ site.organisation.telephone }}`. For custom
75
+ tags or routes, `structuredDataGraph(site, page)` returns the graph as an object.
76
+
41
77
  ## Draft previews
42
78
 
43
79
  The editor loads `GET /draft/{pageId}?token=…` in an iframe. The renderer verifies the token, fetches the draft from
@@ -66,6 +102,8 @@ Draft responses send `Cache-Control: no-store`, `X-Robots-Tag: noindex`, `frame-
66
102
 
67
103
  - **Node 22 or later.** Update the Lambda runtime.
68
104
  - **Set `CEEMS_PREVIEW_SECRET`** (above).
105
+ - **Published files are read from `ceems/`** in the bucket (above). Custom tags calling `loadS3File` keep passing
106
+ the same names (`data/<id>.json`).
69
107
  - **No code changes are needed for the common pattern** (`ceems.load(req, res, true)` then `ceems.render(page, …)`,
70
108
  `ceems.site`, `ceems.loadS3File`, `ceems.loadLocalFile`, `context.globals` in custom tags). `ceems.site` is now
71
109
  always the published site; it never holds draft data.
package/lib/index.d.ts CHANGED
@@ -6,6 +6,7 @@ export * from './interfaces';
6
6
  export { signPreviewToken, verifyPreviewToken } from './preview-token';
7
7
  export { renderState } from './state';
8
8
  export { LinkDrop, wrapLinks } from './links';
9
+ export { enabledTypes, serialiseJsonLd, structuredDataGraph } from './structured-data';
9
10
  /**
10
11
  * A Cee.ms site renderer: an Express app that renders published pages, and verified editor drafts, with the
11
12
  * site's Liquid templates.
@@ -30,11 +31,16 @@ export declare class Ceems {
30
31
  * `loadPage` false, returns `page` as given (for custom routes that build their own page object).
31
32
  */
32
33
  load(req: CeemsRequest, res: express.Response, loadPage?: boolean, page?: CeemsPage): Promise<CeemsPage>;
34
+ /** Reads a published file, under `cachePrefix`. */
35
+ private readPublished;
33
36
  /** Reads `pages/<id>.json`. Stored links read as their address in templates (see `LinkDrop`). */
34
37
  loadPageFile(id: string): Promise<CeemsPage>;
35
38
  /** Synchronous local read, kept for custom tags. `filename` is a full path. */
36
39
  loadLocalFile(filename: string): any;
37
- /** Reads and parses a published JSON file, kept for custom tags. `filename` is relative to the bucket. */
40
+ /**
41
+ * Reads and parses a published JSON file, kept for custom tags. `filename` is as published, such as
42
+ * `data/<id>.json`; it is read under `cachePrefix`.
43
+ */
38
44
  loadS3File(filename: string): Promise<any>;
39
45
  /** The site path for a request (`home` for `/`), and the blog page number if the URL ends in one. */
40
46
  parsePath(req: CeemsRequest): {
package/lib/index.js CHANGED
@@ -39,7 +39,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
39
39
  return (mod && mod.__esModule) ? mod : { "default": mod };
40
40
  };
41
41
  Object.defineProperty(exports, "__esModule", { value: true });
42
- exports.Ceems = exports.wrapLinks = exports.LinkDrop = exports.renderState = exports.verifyPreviewToken = exports.signPreviewToken = void 0;
42
+ exports.Ceems = exports.structuredDataGraph = exports.serialiseJsonLd = exports.enabledTypes = exports.wrapLinks = exports.LinkDrop = exports.renderState = exports.verifyPreviewToken = exports.signPreviewToken = void 0;
43
43
  const express_1 = __importDefault(require("express"));
44
44
  const path_1 = __importDefault(require("path"));
45
45
  const fs_1 = __importDefault(require("fs"));
@@ -61,6 +61,10 @@ Object.defineProperty(exports, "renderState", { enumerable: true, get: function
61
61
  var links_2 = require("./links");
62
62
  Object.defineProperty(exports, "LinkDrop", { enumerable: true, get: function () { return links_2.LinkDrop; } });
63
63
  Object.defineProperty(exports, "wrapLinks", { enumerable: true, get: function () { return links_2.wrapLinks; } });
64
+ var structured_data_1 = require("./structured-data");
65
+ Object.defineProperty(exports, "enabledTypes", { enumerable: true, get: function () { return structured_data_1.enabledTypes; } });
66
+ Object.defineProperty(exports, "serialiseJsonLd", { enumerable: true, get: function () { return structured_data_1.serialiseJsonLd; } });
67
+ Object.defineProperty(exports, "structuredDataGraph", { enumerable: true, get: function () { return structured_data_1.structuredDataGraph; } });
64
68
  /**
65
69
  * A Cee.ms site renderer: an Express app that renders published pages, and verified editor drafts, with the
66
70
  * site's Liquid templates.
@@ -85,6 +89,9 @@ class Ceems {
85
89
  if (!this.config.viewsPath) {
86
90
  this.config.viewsPath = './views/';
87
91
  }
92
+ if (this.config.cachePrefix === undefined) {
93
+ this.config.cachePrefix = 'ceems/';
94
+ }
88
95
  if (this.config.liquidCache === undefined) {
89
96
  this.config.liquidCache = true;
90
97
  }
@@ -146,6 +153,7 @@ class Ceems {
146
153
  (0, tags_1.registerImageTag)(this.engine);
147
154
  (0, tags_1.registerImageUrlTag)(this.engine);
148
155
  (0, tags_1.registerBreadcrumbTag)(this.engine);
156
+ (0, tags_1.registerStructuredDataTag)(this.engine);
149
157
  (0, filters_1.registerActiveFilter)(this.engine);
150
158
  (0, filters_1.registerSlugifyFilter)(this.engine);
151
159
  // custom tags and filters
@@ -158,7 +166,7 @@ class Ceems {
158
166
  }
159
167
  /** Loads the published `site.json`, remembers it as `this.site`, and returns it. */
160
168
  async loadSite() {
161
- const site = JSON.parse(await this.storage.read('pages/site.json'));
169
+ const site = JSON.parse(await this.readPublished('pages/site.json'));
162
170
  // stored links in settings read as their address, as in pages
163
171
  if (site.settings)
164
172
  site.settings = (0, links_1.wrapLinks)(site.settings);
@@ -194,17 +202,24 @@ class Ceems {
194
202
  }
195
203
  return (0, state_1.attachState)(page, { site, page, edit: false });
196
204
  }
205
+ /** Reads a published file, under `cachePrefix`. */
206
+ readPublished(key) {
207
+ return this.storage.read(this.config.cachePrefix + key);
208
+ }
197
209
  /** Reads `pages/<id>.json`. Stored links read as their address in templates (see `LinkDrop`). */
198
210
  async loadPageFile(id) {
199
- return (0, links_1.wrapLinks)(JSON.parse(await this.storage.read('pages/' + id + '.json')));
211
+ return (0, links_1.wrapLinks)(JSON.parse(await this.readPublished('pages/' + id + '.json')));
200
212
  }
201
213
  /** Synchronous local read, kept for custom tags. `filename` is a full path. */
202
214
  loadLocalFile(filename) {
203
215
  return (0, links_1.wrapLinks)(JSON.parse(fs_1.default.readFileSync(filename, 'utf8')));
204
216
  }
205
- /** Reads and parses a published JSON file, kept for custom tags. `filename` is relative to the bucket. */
217
+ /**
218
+ * Reads and parses a published JSON file, kept for custom tags. `filename` is as published, such as
219
+ * `data/<id>.json`; it is read under `cachePrefix`.
220
+ */
206
221
  async loadS3File(filename) {
207
- return (0, links_1.wrapLinks)(JSON.parse(await this.storage.read(filename)));
222
+ return (0, links_1.wrapLinks)(JSON.parse(await this.readPublished(filename)));
208
223
  }
209
224
  /** The site path for a request (`home` for `/`), and the blog page number if the URL ends in one. */
210
225
  parsePath(req) {
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,11 @@ export interface CeemsConfig {
17
17
  /** Region of `cacheBucket`. Defaults to the `AWS_REGION` environment variable. */
18
18
  cacheRegion?: string;
19
19
  cacheFolder?: string;
20
+ /**
21
+ * Where Cee.ms 2 publishes in the bucket or folder: `ceems/` by default, so it can publish to the same bucket
22
+ * as Cee.ms 1 (which writes `pages/` and `data/` at the top) while a site moves over. `''` reads from the top.
23
+ */
24
+ cachePrefix?: string;
20
25
  whitelistedCookies?: Array<string>;
21
26
  tags?: Array<LiquidTag>;
22
27
  filters?: Array<LiquidFilter>;
@@ -64,7 +69,7 @@ export interface CeemsSite {
64
69
  navigation: any;
65
70
  blogs: any;
66
71
  pages: any;
67
- site: any;
72
+ site: CeemsSiteInfo;
68
73
  /**
69
74
  * Site settings by field key (from Cee.ms 2), as published; drafts carry them as edited. Templates
70
75
  * read them as `settings`, e.g. `{{ settings.phone }}`. Stored links read as their address.
@@ -72,6 +77,110 @@ export interface CeemsSite {
72
77
  settings?: Record<string, any>;
73
78
  collections?: any;
74
79
  }
80
+ /** The published `site.json` `site`. */
81
+ export interface CeemsSiteInfo {
82
+ name: string;
83
+ cdn: string;
84
+ url: string;
85
+ /** The site's organisation, for templates (`{{ site.organisation.telephone }}`) and structured data. */
86
+ organisation?: CeemsOrganisation;
87
+ structuredData?: {
88
+ defaults?: StructuredDataDefaults;
89
+ /** For module types holding questions and answers: where they are, by module config type. */
90
+ faqModules?: Record<string, FaqModuleMapping>;
91
+ };
92
+ [key: string]: any;
93
+ }
94
+ /** A schema.org type the `{% structureddata %}` tag outputs. */
95
+ export type StructuredDataType = 'WEBSITE' | 'WEBPAGE' | 'BREADCRUMB' | 'ORGANISATION' | 'ARTICLE' | 'FAQ' | 'EVENT' | 'PRODUCT' | 'PERSON';
96
+ /** The types each kind of page outputs unless it chooses its own. */
97
+ export interface StructuredDataDefaults {
98
+ page: StructuredDataType[];
99
+ blog: StructuredDataType[];
100
+ article: StructuredDataType[];
101
+ }
102
+ /** `itemsField` is a contributor field of the module; the others are fields of its items. */
103
+ export interface FaqModuleMapping {
104
+ itemsField: string;
105
+ questionField: string;
106
+ answerField: string;
107
+ }
108
+ /** An image value as published. */
109
+ export interface CeemsImage {
110
+ src: string;
111
+ variants?: Record<string, string>;
112
+ alt?: string;
113
+ width?: number;
114
+ height?: number;
115
+ }
116
+ export interface CeemsPostalAddress {
117
+ street?: string;
118
+ locality?: string;
119
+ region?: string;
120
+ postalCode?: string;
121
+ country?: string;
122
+ }
123
+ export interface CeemsOrganisation {
124
+ /** The schema.org type: `Organization` or a LocalBusiness type such as `RealEstateAgent`. */
125
+ type: string;
126
+ name: string;
127
+ legalName?: string;
128
+ logo?: CeemsImage;
129
+ url?: string;
130
+ email?: string;
131
+ telephone?: string;
132
+ address?: CeemsPostalAddress;
133
+ sameAs?: string[];
134
+ openingHours?: {
135
+ days: string[];
136
+ opens: string;
137
+ closes: string;
138
+ }[];
139
+ priceRange?: string;
140
+ }
141
+ export type CeemsAvailability = 'IN_STOCK' | 'OUT_OF_STOCK' | 'PRE_ORDER' | 'SOLD_OUT' | 'DISCONTINUED';
142
+ /** A page's structured data choices and the details of the types that need their own. */
143
+ export interface CeemsPageStructuredData {
144
+ /** Absent: the site's defaults for the page's kind. */
145
+ types?: StructuredDataType[];
146
+ event?: {
147
+ name?: string;
148
+ description?: string;
149
+ startDate: string;
150
+ endDate?: string;
151
+ attendance?: 'OFFLINE' | 'ONLINE' | 'MIXED';
152
+ status?: 'SCHEDULED' | 'CANCELLED' | 'POSTPONED' | 'RESCHEDULED' | 'MOVED_ONLINE';
153
+ location?: {
154
+ name?: string;
155
+ address?: CeemsPostalAddress;
156
+ url?: string;
157
+ };
158
+ image?: CeemsImage;
159
+ offers?: {
160
+ price: number;
161
+ currency: string;
162
+ url?: string;
163
+ availability?: CeemsAvailability;
164
+ };
165
+ };
166
+ product?: {
167
+ name?: string;
168
+ description?: string;
169
+ brand?: string;
170
+ sku?: string;
171
+ image?: CeemsImage;
172
+ price: number;
173
+ currency: string;
174
+ availability?: CeemsAvailability;
175
+ };
176
+ person?: {
177
+ name: string;
178
+ jobTitle?: string;
179
+ url?: string;
180
+ image?: CeemsImage;
181
+ sameAs?: string[];
182
+ };
183
+ }
75
184
  export interface CeemsRequest extends express.Request {
76
185
  page: CeemsPage;
77
186
  query: any;
@@ -94,6 +203,21 @@ export interface CeemsPage {
94
203
  pagination: number;
95
204
  fullpath: string;
96
205
  handle: string;
206
+ /** The page's own name, for menus. */
207
+ name?: string;
208
+ /** SEO title. */
209
+ title?: string;
210
+ /** SEO description. */
211
+ description?: string;
212
+ /** Social sharing image. */
213
+ social?: CeemsImage;
214
+ type?: 'blog' | 'article';
215
+ tags?: string[];
216
+ /** An article's date. */
217
+ date?: string;
218
+ publishedAt?: string;
219
+ updatedAt?: string;
220
+ structuredData?: CeemsPageStructuredData;
97
221
  [key: string]: any;
98
222
  }
99
223
  export interface CeemsRegion {
@@ -0,0 +1,20 @@
1
+ import type { CeemsPage, CeemsSite, StructuredDataDefaults, StructuredDataType } from './interfaces';
2
+ /** Every type the `{% structureddata %}` tag can output, in the order it outputs them. */
3
+ export declare const STRUCTURED_DATA_TYPES: readonly StructuredDataType[];
4
+ /** Used when the site has published no defaults (sites published before structured data). */
5
+ export declare const DEFAULT_STRUCTURED_DATA: StructuredDataDefaults;
6
+ type Node = Record<string, unknown>;
7
+ /** The types a page outputs: its own choice, else the site's defaults for its kind. */
8
+ export declare function enabledTypes(site: CeemsSite, page: CeemsPage): StructuredDataType[];
9
+ /**
10
+ * The page's schema.org graph: one node for each enabled type that has the data it needs. A type missing a
11
+ * required property (an event with no start date, a product with no price) is left out rather than output
12
+ * invalid. `only` limits the graph to those types.
13
+ */
14
+ export declare function structuredDataGraph(site: CeemsSite, page: CeemsPage, only?: StructuredDataType[]): {
15
+ '@context': string;
16
+ '@graph': Node[];
17
+ };
18
+ /** JSON for a `<script>`: `<`, `>` and `&` are escaped so content can't end the script. */
19
+ export declare function serialiseJsonLd(value: unknown): string;
20
+ export {};
@@ -0,0 +1,361 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_STRUCTURED_DATA = exports.STRUCTURED_DATA_TYPES = void 0;
4
+ exports.enabledTypes = enabledTypes;
5
+ exports.structuredDataGraph = structuredDataGraph;
6
+ exports.serialiseJsonLd = serialiseJsonLd;
7
+ /** Every type the `{% structureddata %}` tag can output, in the order it outputs them. */
8
+ exports.STRUCTURED_DATA_TYPES = [
9
+ 'WEBSITE',
10
+ 'ORGANISATION',
11
+ 'WEBPAGE',
12
+ 'BREADCRUMB',
13
+ 'ARTICLE',
14
+ 'FAQ',
15
+ 'EVENT',
16
+ 'PRODUCT',
17
+ 'PERSON',
18
+ ];
19
+ const BASE = ['WEBSITE', 'WEBPAGE', 'BREADCRUMB', 'ORGANISATION'];
20
+ /** Used when the site has published no defaults (sites published before structured data). */
21
+ exports.DEFAULT_STRUCTURED_DATA = {
22
+ page: BASE,
23
+ blog: BASE,
24
+ article: [...BASE, 'ARTICLE'],
25
+ };
26
+ /** The types a page outputs: its own choice, else the site's defaults for its kind. */
27
+ function enabledTypes(site, page) {
28
+ const own = page.structuredData?.types;
29
+ if (Array.isArray(own))
30
+ return own;
31
+ const defaults = site.site?.structuredData?.defaults ?? exports.DEFAULT_STRUCTURED_DATA;
32
+ const kind = page.type === 'article' ? 'article' : page.type === 'blog' ? 'blog' : 'page';
33
+ return defaults[kind] ?? exports.DEFAULT_STRUCTURED_DATA[kind];
34
+ }
35
+ /**
36
+ * The page's schema.org graph: one node for each enabled type that has the data it needs. A type missing a
37
+ * required property (an event with no start date, a product with no price) is left out rather than output
38
+ * invalid. `only` limits the graph to those types.
39
+ */
40
+ function structuredDataGraph(site, page, only) {
41
+ const enabled = new Set(enabledTypes(site, page));
42
+ const graph = [];
43
+ for (const type of exports.STRUCTURED_DATA_TYPES) {
44
+ if (!enabled.has(type) || (only && !only.includes(type)))
45
+ continue;
46
+ const node = BUILDERS[type](new Builder(site, page));
47
+ if (node)
48
+ graph.push(node);
49
+ }
50
+ return { '@context': 'https://schema.org', '@graph': graph };
51
+ }
52
+ /** JSON for a `<script>`: `<`, `>` and `&` are escaped so content can't end the script. */
53
+ function serialiseJsonLd(value) {
54
+ return JSON.stringify(value)
55
+ .replace(/</g, '\\u003c')
56
+ .replace(/>/g, '\\u003e')
57
+ .replace(/&/g, '\\u0026');
58
+ }
59
+ /** The URLs and shared properties every builder needs. */
60
+ class Builder {
61
+ site;
62
+ page;
63
+ root;
64
+ constructor(site, page) {
65
+ this.site = site;
66
+ this.page = page;
67
+ this.root = String(site.site?.url ?? '').replace(/\/+$/, '');
68
+ }
69
+ /** The absolute URL of a site path, `''` being the home page. */
70
+ url(path = '') {
71
+ return path && path !== 'home' ? `${this.root}/${path}` : `${this.root}/`;
72
+ }
73
+ get pageUrl() {
74
+ return this.url(this.page.fullpath);
75
+ }
76
+ id(path, fragment) {
77
+ return `${this.url(path)}#${fragment}`;
78
+ }
79
+ get hasOrganisation() {
80
+ return !!this.site.site?.organisation?.name;
81
+ }
82
+ get pageName() {
83
+ return text(this.page.title) ?? text(this.page.name);
84
+ }
85
+ }
86
+ const BUILDERS = {
87
+ WEBSITE(b) {
88
+ if (!b.root)
89
+ return;
90
+ return compact({
91
+ '@type': 'WebSite',
92
+ '@id': b.id('', 'website'),
93
+ url: b.url(),
94
+ name: text(b.site.site?.name),
95
+ publisher: b.hasOrganisation ? { '@id': b.id('', 'organization') } : undefined,
96
+ });
97
+ },
98
+ ORGANISATION(b) {
99
+ const org = b.site.site?.organisation;
100
+ if (!org?.name)
101
+ return;
102
+ return compact({
103
+ '@type': org.type || 'Organization',
104
+ '@id': b.id('', 'organization'),
105
+ name: org.name,
106
+ legalName: text(org.legalName),
107
+ url: text(org.url) ?? (b.root ? b.url() : undefined),
108
+ logo: imageUrl(org.logo),
109
+ // LocalBusiness wants an image too; the logo is the best we have
110
+ image: org.type && org.type !== 'Organization' ? imageUrl(org.logo) : undefined,
111
+ email: text(org.email),
112
+ telephone: text(org.telephone),
113
+ address: postalAddress(org.address),
114
+ sameAs: list(org.sameAs),
115
+ openingHoursSpecification: list((org.openingHours ?? [])
116
+ .filter((h) => h.days?.length && h.opens && h.closes)
117
+ .map((h) => ({
118
+ '@type': 'OpeningHoursSpecification',
119
+ dayOfWeek: h.days,
120
+ opens: h.opens,
121
+ closes: h.closes,
122
+ }))),
123
+ priceRange: text(org.priceRange),
124
+ });
125
+ },
126
+ WEBPAGE(b) {
127
+ if (!b.root)
128
+ return;
129
+ return compact({
130
+ '@type': 'WebPage',
131
+ '@id': b.id(b.page.fullpath, 'webpage'),
132
+ url: b.pageUrl,
133
+ name: b.pageName,
134
+ description: text(b.page.description),
135
+ primaryImageOfPage: imageUrl(b.page.social),
136
+ isPartOf: { '@id': b.id('', 'website') },
137
+ breadcrumb: crumbs(b).length > 1 ? { '@id': b.id(b.page.fullpath, 'breadcrumb') } : undefined,
138
+ dateModified: isoDate(b.page.updatedAt),
139
+ });
140
+ },
141
+ BREADCRUMB(b) {
142
+ const items = crumbs(b);
143
+ // a single crumb (the home page itself) isn't a trail
144
+ if (!b.root || items.length < 2)
145
+ return;
146
+ return {
147
+ '@type': 'BreadcrumbList',
148
+ '@id': b.id(b.page.fullpath, 'breadcrumb'),
149
+ itemListElement: items.map((item, i) => ({
150
+ '@type': 'ListItem',
151
+ position: i + 1,
152
+ name: item.name,
153
+ item: item.url,
154
+ })),
155
+ };
156
+ },
157
+ ARTICLE(b) {
158
+ if (b.page.type !== 'article' || !b.pageName)
159
+ return;
160
+ const published = isoDate(b.page.date) ?? isoDate(b.page.publishedAt);
161
+ return compact({
162
+ '@type': 'BlogPosting',
163
+ '@id': b.id(b.page.fullpath, 'article'),
164
+ headline: b.pageName,
165
+ description: text(b.page.description),
166
+ image: imageUrl(b.page.social),
167
+ datePublished: published,
168
+ dateModified: isoDate(b.page.updatedAt) ?? published,
169
+ mainEntityOfPage: b.root ? { '@id': b.id(b.page.fullpath, 'webpage') } : undefined,
170
+ author: b.hasOrganisation ? { '@id': b.id('', 'organization') } : undefined,
171
+ publisher: b.hasOrganisation ? { '@id': b.id('', 'organization') } : undefined,
172
+ keywords: list(b.page.tags)?.join(', '),
173
+ });
174
+ },
175
+ FAQ(b) {
176
+ const mappings = b.site.site?.structuredData?.faqModules ?? {};
177
+ const questions = [];
178
+ for (const module of pageModules(b.page)) {
179
+ const map = mappings[module.type];
180
+ const items = map && module.content?.[map.itemsField];
181
+ if (!Array.isArray(items))
182
+ continue;
183
+ for (const item of items) {
184
+ const name = text(plain(item?.[map.questionField]));
185
+ const answer = text(item?.[map.answerField]);
186
+ if (!name || !answer)
187
+ continue;
188
+ questions.push({
189
+ '@type': 'Question',
190
+ name,
191
+ acceptedAnswer: { '@type': 'Answer', text: answer },
192
+ });
193
+ }
194
+ }
195
+ if (!questions.length)
196
+ return;
197
+ return { '@type': 'FAQPage', '@id': b.id(b.page.fullpath, 'faq'), mainEntity: questions };
198
+ },
199
+ EVENT(b) {
200
+ const event = b.page.structuredData?.event;
201
+ const name = text(event?.name) ?? b.pageName;
202
+ const startDate = isoDate(event?.startDate);
203
+ if (!event || !name || !startDate)
204
+ return;
205
+ const online = event.attendance === 'ONLINE';
206
+ const venue = compact({
207
+ '@type': 'Place',
208
+ name: text(event.location?.name),
209
+ address: postalAddress(event.location?.address),
210
+ });
211
+ const virtual = event.location?.url ? { '@type': 'VirtualLocation', url: event.location.url } : undefined;
212
+ return compact({
213
+ '@type': 'Event',
214
+ '@id': b.id(b.page.fullpath, 'event'),
215
+ name,
216
+ description: text(event.description) ?? text(b.page.description),
217
+ startDate,
218
+ endDate: isoDate(event.endDate),
219
+ eventStatus: event.status ? `https://schema.org/Event${pascal(event.status)}` : undefined,
220
+ eventAttendanceMode: event.attendance
221
+ ? `https://schema.org/${pascal(event.attendance)}EventAttendanceMode`
222
+ : undefined,
223
+ location: online
224
+ ? virtual
225
+ : event.attendance === 'MIXED'
226
+ ? list([Object.keys(venue).length > 1 ? venue : undefined, virtual])
227
+ : Object.keys(venue).length > 1
228
+ ? venue
229
+ : undefined,
230
+ image: imageUrl(event.image) ?? imageUrl(b.page.social),
231
+ offers: event.offers ? offer(event.offers, b.pageUrl) : undefined,
232
+ organizer: b.hasOrganisation ? { '@id': b.id('', 'organization') } : undefined,
233
+ });
234
+ },
235
+ PRODUCT(b) {
236
+ const product = b.page.structuredData?.product;
237
+ const name = text(product?.name) ?? b.pageName;
238
+ if (!product || !name || !(typeof product.price === 'number') || !product.currency)
239
+ return;
240
+ return compact({
241
+ '@type': 'Product',
242
+ '@id': b.id(b.page.fullpath, 'product'),
243
+ name,
244
+ description: text(product.description) ?? text(b.page.description),
245
+ image: imageUrl(product.image) ?? imageUrl(b.page.social),
246
+ sku: text(product.sku),
247
+ brand: product.brand ? { '@type': 'Brand', name: product.brand } : undefined,
248
+ offers: offer(product, b.pageUrl),
249
+ });
250
+ },
251
+ PERSON(b) {
252
+ const person = b.page.structuredData?.person;
253
+ if (!person?.name)
254
+ return;
255
+ return compact({
256
+ '@type': 'Person',
257
+ '@id': b.id(b.page.fullpath, 'person'),
258
+ name: person.name,
259
+ jobTitle: text(person.jobTitle),
260
+ url: text(person.url) ?? (b.root ? b.pageUrl : undefined),
261
+ image: imageUrl(person.image),
262
+ sameAs: list(person.sameAs),
263
+ worksFor: b.hasOrganisation ? { '@id': b.id('', 'organization') } : undefined,
264
+ });
265
+ },
266
+ };
267
+ /** Home, then the page's published ancestors, as `tags/breadcrumb.ts` walks them, ending at the page. */
268
+ function crumbs(b) {
269
+ const { site, page } = b;
270
+ const items = [];
271
+ const home = site.pages?.home;
272
+ if (home)
273
+ items.push({ name: text(home.name) ?? 'Home', url: b.url() });
274
+ if (!page.fullpath)
275
+ return items;
276
+ let path = '';
277
+ for (const handle of page.path ?? []) {
278
+ path += handle;
279
+ const entry = site.pages?.[path];
280
+ if (entry) {
281
+ items.push({ name: text(entry.name) ?? handle, url: b.url(path) });
282
+ path += '/';
283
+ }
284
+ }
285
+ return items;
286
+ }
287
+ function pageModules(page) {
288
+ const modules = Object.values(page.regions ?? {}).flatMap((region) => region?.modules ?? []);
289
+ for (const module of Object.values(page.modules ?? {})) {
290
+ if (module && typeof module === 'object')
291
+ modules.push(module);
292
+ }
293
+ return modules;
294
+ }
295
+ function offer(o, fallbackUrl) {
296
+ if (typeof o.price !== 'number' || !o.currency)
297
+ return;
298
+ return compact({
299
+ '@type': 'Offer',
300
+ price: o.price,
301
+ priceCurrency: o.currency,
302
+ availability: o.availability ? `https://schema.org/${pascal(o.availability)}` : undefined,
303
+ url: text(o.url) ?? fallbackUrl,
304
+ });
305
+ }
306
+ function postalAddress(address) {
307
+ if (!address)
308
+ return;
309
+ const node = compact({
310
+ '@type': 'PostalAddress',
311
+ streetAddress: text(address.street),
312
+ addressLocality: text(address.locality),
313
+ addressRegion: text(address.region),
314
+ postalCode: text(address.postalCode),
315
+ addressCountry: text(address.country),
316
+ });
317
+ return Object.keys(node).length > 1 ? node : undefined;
318
+ }
319
+ function imageUrl(image) {
320
+ return image && typeof image.src === 'string' && image.src ? image.src : undefined;
321
+ }
322
+ /** A date published as an ISO string (or a `Date`, for custom pages) as an ISO string. */
323
+ function isoDate(value) {
324
+ if (!value)
325
+ return;
326
+ const date = value instanceof Date ? value : new Date(String(value));
327
+ return isNaN(date.getTime()) ? undefined : date.toISOString();
328
+ }
329
+ /** A non-empty trimmed string, else `undefined`. Stored links (`LinkDrop`) read as their address. */
330
+ function text(value) {
331
+ if (value == null)
332
+ return;
333
+ const s = String(value).trim();
334
+ return s ? s : undefined;
335
+ }
336
+ /** Rich text as plain text, for properties that take no markup. */
337
+ function plain(value) {
338
+ if (typeof value !== 'string')
339
+ return value;
340
+ return value
341
+ .replace(/<[^>]*>/g, ' ')
342
+ .replace(/&nbsp;/g, ' ')
343
+ .replace(/\s+/g, ' ');
344
+ }
345
+ /** `IN_STOCK` as `InStock`, for schema.org enumeration URLs. */
346
+ function pascal(value) {
347
+ return value
348
+ .toLowerCase()
349
+ .split('_')
350
+ .map((w) => w.charAt(0).toUpperCase() + w.slice(1))
351
+ .join('');
352
+ }
353
+ function list(values) {
354
+ const kept = (values ?? []).filter((v) => v !== undefined && v !== null && v !== '');
355
+ return kept.length ? kept : undefined;
356
+ }
357
+ /** Drops `undefined` properties. */
358
+ function compact(node) {
359
+ return Object.fromEntries(Object.entries(node).filter(([, v]) => v !== undefined));
360
+ }
361
+ //# 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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"}
@@ -5,3 +5,4 @@ export * from './image';
5
5
  export * from './navigation';
6
6
  export * from './breadcrumb';
7
7
  export * from './blog';
8
+ export * from './structured-data';
package/lib/tags/index.js CHANGED
@@ -21,4 +21,5 @@ __exportStar(require("./image"), exports);
21
21
  __exportStar(require("./navigation"), exports);
22
22
  __exportStar(require("./breadcrumb"), exports);
23
23
  __exportStar(require("./blog"), exports);
24
+ __exportStar(require("./structured-data"), exports);
24
25
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tags/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,2CAAyB;AACzB,yCAAuB;AACvB,0CAAwB;AACxB,+CAA6B;AAC7B,+CAA6B;AAC7B,yCAAuB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tags/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,2CAAyB;AACzB,yCAAuB;AACvB,0CAAwB;AACxB,+CAA6B;AAC7B,+CAA6B;AAC7B,yCAAuB;AACvB,oDAAkC"}
@@ -0,0 +1,7 @@
1
+ import { Liquid } from 'liquidjs';
2
+ /**
3
+ * `{% structureddata ['article' 'faq' …] %}` outputs the page's schema.org JSON-LD: the types the page has
4
+ * switched on (or the site's defaults), built from the page, its modules and the site's organisation. Naming
5
+ * types limits it to those, for templates that place them separately. Outputs nothing when there is nothing.
6
+ */
7
+ export declare function registerStructuredDataTag(engine: Liquid): void;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerStructuredDataTag = registerStructuredDataTag;
4
+ const state_1 = require("../state");
5
+ const structured_data_1 = require("../structured-data");
6
+ /**
7
+ * `{% structureddata ['article' 'faq' …] %}` outputs the page's schema.org JSON-LD: the types the page has
8
+ * switched on (or the site's defaults), built from the page, its modules and the site's organisation. Naming
9
+ * types limits it to those, for templates that place them separately. Outputs nothing when there is nothing.
10
+ */
11
+ function registerStructuredDataTag(engine) {
12
+ engine.registerTag('structureddata', {
13
+ parse: function (tagToken) {
14
+ const names = tagToken.args
15
+ .split(/[\s,]+/)
16
+ .map((arg) => arg.replace(/^['"]|['"]$/g, '').toUpperCase())
17
+ .filter(Boolean);
18
+ for (const name of names) {
19
+ if (!structured_data_1.STRUCTURED_DATA_TYPES.includes(name)) {
20
+ throw new Error(`structureddata: unknown type "${name}"`);
21
+ }
22
+ }
23
+ this.only = names.length ? names : undefined;
24
+ },
25
+ render: function (context) {
26
+ const { site, page } = (0, state_1.renderState)(context);
27
+ const graph = (0, structured_data_1.structuredDataGraph)(site, page, this.only);
28
+ if (!graph['@graph'].length) {
29
+ return '';
30
+ }
31
+ return '<script type="application/ld+json">' + (0, structured_data_1.serialiseJsonLd)(graph) + '</script>';
32
+ },
33
+ });
34
+ }
35
+ //# sourceMappingURL=structured-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structured-data.js","sourceRoot":"","sources":["../../src/tags/structured-data.ts"],"names":[],"mappings":";;AAUA,8DAuBC;AA/BD,oCAAuC;AACvC,wDAAiG;AAEjG;;;;GAIG;AACH,SAAgB,yBAAyB,CAAC,MAAc;IACpD,MAAM,CAAC,WAAW,CAAC,gBAAgB,EAAE;QACjC,KAAK,EAAE,UAAU,QAAQ;YACrB,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI;iBACtB,KAAK,CAAC,QAAQ,CAAC;iBACf,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;iBAC3D,MAAM,CAAC,OAAO,CAAC,CAAC;YACrB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACvB,IAAI,CAAC,uCAAqB,CAAC,QAAQ,CAAC,IAA0B,CAAC,EAAE,CAAC;oBAC9D,MAAM,IAAI,KAAK,CAAC,iCAAiC,IAAI,GAAG,CAAC,CAAC;gBAC9D,CAAC;YACL,CAAC;YACD,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QACjD,CAAC;QACD,MAAM,EAAE,UAAU,OAAO;YACrB,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAA,mBAAW,EAAC,OAAO,CAAC,CAAC;YAC5C,MAAM,KAAK,GAAG,IAAA,qCAAmB,EAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YACzD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC;gBAC1B,OAAO,EAAE,CAAC;YACd,CAAC;YACD,OAAO,qCAAqC,GAAG,IAAA,iCAAe,EAAC,KAAK,CAAC,GAAG,WAAW,CAAC;QACxF,CAAC;KACJ,CAAC,CAAC;AACP,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nakedcreativity/cee-ms-node",
3
- "version": "2.0.0-beta.2",
3
+ "version": "2.0.0-beta.4",
4
4
  "description": "Cee.ms for Node.js: renders Cee.ms sites from their published JSON with Liquid templates",
5
5
  "main": "./lib/index.js",
6
6
  "types": "./lib/index.d.ts",