@nakedcreativity/cee-ms-node 2.0.0-beta.5 → 2.0.0-beta.9

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/lib/views.js ADDED
@@ -0,0 +1,426 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.VIEWS_TOKEN_SUBJECT = exports.VIEW_FOLDERS = void 0;
7
+ exports.viewRoots = viewRoots;
8
+ exports.scanViews = scanViews;
9
+ exports.viewsHandler = viewsHandler;
10
+ exports.viewsPreflightHandler = viewsPreflightHandler;
11
+ const fs_1 = __importDefault(require("fs"));
12
+ const path_1 = __importDefault(require("path"));
13
+ const liquidjs_1 = require("liquidjs");
14
+ const preview_token_1 = require("./preview-token");
15
+ /**
16
+ * What a site's views need from the editor, read from their source: which are layouts (templates, with the
17
+ * regions they place) and which are modules (module types, with the values they read). Served to the Cee.ms
18
+ * editor at `GET /ceems/views`, which suggests templates and module types from it.
19
+ *
20
+ * Views can be grouped in folders, `layouts/`, `modules/` and `partials/`, which then decide what each one
21
+ * is. A site with none of them keeps every view at the top: a view with a `{% region %}` is a layout, and the
22
+ * rest are modules. Either way a view is named by its file name alone, as templates and modules refer to it.
23
+ */
24
+ /** The folders views can be grouped in, in the order a name is looked up. */
25
+ exports.VIEW_FOLDERS = ['layouts', 'modules', 'partials'];
26
+ /** The page id the Cee.ms API signs a preview token with to read the views. */
27
+ exports.VIEWS_TOKEN_SUBJECT = 'ceems:views';
28
+ /**
29
+ * What every template can read that isn't a module's own value: the published site's keys, the render's, and
30
+ * the `blog` a `{% blog %}` tag renders with. Not `people`: modules often have a field of that name, which
31
+ * their values then shadow.
32
+ */
33
+ const GLOBALS = [
34
+ 'page',
35
+ 'site',
36
+ 'settings',
37
+ 'pages',
38
+ 'pageIndex',
39
+ 'documents',
40
+ 'collections',
41
+ 'navigation',
42
+ 'attributes',
43
+ 'metadata',
44
+ 'blogs',
45
+ 'blog',
46
+ 'modules',
47
+ 'regions',
48
+ 'forloop',
49
+ 'tablerowloop',
50
+ ];
51
+ const KEYWORDS = new Set(['and', 'or', 'contains', 'true', 'false', 'nil', 'null', 'empty', 'blank', 'in']);
52
+ const BLOCK_TAGS = 'div|section|article|main|aside|blockquote|li|td';
53
+ /** The views folder and those of its subfolders that exist: the roots views are looked up in, in order. */
54
+ function viewRoots(viewsPath) {
55
+ const root = path_1.default.resolve(viewsPath);
56
+ const folders = exports.VIEW_FOLDERS.map((folder) => path_1.default.join(root, folder)).filter((dir) => fs_1.default.existsSync(dir) && fs_1.default.statSync(dir).isDirectory());
57
+ return [root, ...folders];
58
+ }
59
+ /** Reads every view in the folder (and its `layouts/`, `modules/` and `partials/`). */
60
+ function scanViews(viewsPath, options = {}) {
61
+ const root = path_1.default.resolve(viewsPath);
62
+ const globals = new Set([...GLOBALS, ...(options.globals || [])]);
63
+ const foldered = viewRoots(root).length > 1;
64
+ const views = [];
65
+ const warnings = [];
66
+ const seen = new Map();
67
+ for (const dir of viewRoots(root)) {
68
+ const folder = path_1.default.relative(root, dir);
69
+ const files = fs_1.default
70
+ .readdirSync(dir)
71
+ .filter((file) => file.endsWith('.liquid') && fs_1.default.statSync(path_1.default.join(dir, file)).isFile())
72
+ .sort();
73
+ for (const file of files) {
74
+ const name = file.slice(0, -'.liquid'.length);
75
+ const relative = folder ? `${folder}/${file}` : file;
76
+ const first = seen.get(name);
77
+ if (first) {
78
+ warnings.push(`\`${name}\` is in both ${first} and ${relative}: only ${first} renders`);
79
+ continue;
80
+ }
81
+ seen.set(name, relative);
82
+ const scanned = scanView(fs_1.default.readFileSync(path_1.default.join(dir, file), 'utf8'), globals);
83
+ let kind;
84
+ if (folder === 'layouts')
85
+ kind = 'layout';
86
+ else if (folder === 'modules')
87
+ kind = 'module';
88
+ else if (folder === 'partials' || foldered)
89
+ kind = 'partial';
90
+ else
91
+ kind = scanned.regions.length ? 'layout' : 'module';
92
+ views.push({
93
+ name,
94
+ path: relative,
95
+ kind,
96
+ ...(scanned.title ? { title: scanned.title } : {}),
97
+ regions: scanned.regions,
98
+ variables: scanned.variables,
99
+ });
100
+ }
101
+ }
102
+ return { version: 1, views, warnings };
103
+ }
104
+ let reads = 0;
105
+ const gathered = (key) => ({ key, hints: new Set(), properties: new Set(), options: new Set() });
106
+ function entry(map, key) {
107
+ let found = map.get(key);
108
+ if (!found)
109
+ map.set(key, (found = gathered(key)));
110
+ return found;
111
+ }
112
+ function finish(map) {
113
+ const order = (v) => v.seen ?? Infinity;
114
+ return [...map.values()]
115
+ .sort((a, b) => order(a) - order(b))
116
+ .map((v) => ({
117
+ key: v.key,
118
+ hints: [...v.hints],
119
+ properties: [...v.properties],
120
+ options: [...v.options],
121
+ ...(v.items ? { items: finish(v.items) } : {}),
122
+ ...(v.kind ? { kind: v.kind } : {}),
123
+ ...(v.label ? { label: v.label } : {}),
124
+ }));
125
+ }
126
+ /** Removes quoted strings, so what's left is identifiers, operators and numbers. */
127
+ const unquote = (source) => source.replace(/'[^']*'|"[^"]*"/g, '""');
128
+ /** Splits on `|` outside quotes: the expression, then each filter with its arguments. */
129
+ function splitFilters(source) {
130
+ const parts = [];
131
+ let current = '';
132
+ let quote = '';
133
+ for (const char of source) {
134
+ if (quote) {
135
+ if (char === quote)
136
+ quote = '';
137
+ }
138
+ else if (char === '"' || char === "'") {
139
+ quote = char;
140
+ }
141
+ else if (char === '|') {
142
+ parts.push(current);
143
+ current = '';
144
+ continue;
145
+ }
146
+ current += char;
147
+ }
148
+ parts.push(current);
149
+ return parts;
150
+ }
151
+ /** The variable paths in an expression. Named arguments (`key: value`) and keywords are left out. */
152
+ function pathsIn(source) {
153
+ const text = unquote(source.replace(/\[\s*(['"])([^'"]+)\1\s*\]/g, '.$2'));
154
+ const paths = [];
155
+ const pattern = /[A-Za-z_][\w-]*(?:\.[A-Za-z_][\w-]*)*/g;
156
+ for (const match of text.matchAll(pattern)) {
157
+ const before = text[match.index - 1];
158
+ if (before === '.' || (before && /[\w"]/.test(before)))
159
+ continue;
160
+ const after = text.slice(match.index + match[0].length).trimStart();
161
+ if (after.startsWith(':'))
162
+ continue;
163
+ const segments = match[0].split('.');
164
+ if (KEYWORDS.has(segments[0]))
165
+ continue;
166
+ paths.push(segments);
167
+ }
168
+ return paths;
169
+ }
170
+ /** An output or filtered value: its main path, the paths anywhere in it, and its filter names. */
171
+ function readValue(source) {
172
+ const [expression, ...filters] = splitFilters(source);
173
+ const main = pathsIn(expression);
174
+ return {
175
+ main: main.length === 1 ? main[0] : undefined,
176
+ paths: [...main, ...filters.flatMap((f) => pathsIn(f.replace(/^\s*[\w-]+/, '')))],
177
+ filters: filters.map((f) => f.trim().split(/[\s:]/)[0]),
178
+ };
179
+ }
180
+ /** The string literals in a `{% when %}`. */
181
+ const literals = (source) => [...source.matchAll(/'([^']*)'|"([^"]*)"/g)].map((m) => m[1] ?? m[2]);
182
+ function scanView(source, globals) {
183
+ const tokens = new liquidjs_1.Tokenizer(source).readTopLevelTokens();
184
+ const variables = new Map();
185
+ const regions = [];
186
+ let title;
187
+ // names the view sets itself aren't module values
188
+ const own = new Set();
189
+ for (const token of tokens) {
190
+ const tag = token;
191
+ if (tag.name === 'assign')
192
+ own.add(String(tag.args).split('=')[0].trim());
193
+ if (tag.name === 'capture')
194
+ own.add(String(tag.args)
195
+ .trim()
196
+ .replace(/^['"]|['"]$/g, ''));
197
+ }
198
+ /** What each loop's local is an item of: a top-level variable, or `null` (a global, or nested). */
199
+ const loops = [];
200
+ /** Records a use of a path; returns the variable it names, or `null` for a global or the view's own. */
201
+ const use = (segments, hint) => {
202
+ const [root, property, deeper] = segments;
203
+ const loop = [...loops].reverse().find((l) => l.local === root);
204
+ let target;
205
+ let read;
206
+ if (loop) {
207
+ if (!loop.of || !property)
208
+ return null;
209
+ loop.of.items ??= new Map();
210
+ target = entry(loop.of.items, property);
211
+ read = deeper;
212
+ }
213
+ else {
214
+ if (globals.has(root) || own.has(root))
215
+ return null;
216
+ target = entry(variables, root);
217
+ read = property;
218
+ }
219
+ if (read)
220
+ target.properties.add(read);
221
+ if (hint)
222
+ target.hints.add(hint);
223
+ target.seen ??= ++reads;
224
+ return target;
225
+ };
226
+ let skipping = null;
227
+ let casing = null;
228
+ tokens.forEach((token, index) => {
229
+ const tag = token;
230
+ const name = tag.name;
231
+ if (skipping) {
232
+ if (name === 'end' + skipping)
233
+ skipping = null;
234
+ else if (skipping === 'comment' && tag.kind === liquidjs_1.TokenKind.HTML) {
235
+ title = annotate(tag.getContent(), variables) ?? title;
236
+ }
237
+ return;
238
+ }
239
+ // an output: `{{ … }}`
240
+ if (tag.kind === liquidjs_1.TokenKind.Output) {
241
+ const value = readValue(tag.content);
242
+ const before = htmlAt(tokens, index - 1);
243
+ const after = htmlAt(tokens, index + 1);
244
+ for (const segments of value.paths) {
245
+ const variable = use(segments, 'output');
246
+ if (!variable || segments !== value.main)
247
+ continue;
248
+ if (value.filters.includes('date'))
249
+ variable.hints.add('date');
250
+ if (/href=["']?$/i.test(before))
251
+ variable.hints.add('href');
252
+ const open = before.match(new RegExp(`<(${BLOCK_TAGS})\\b[^>]*>\\s*$`, 'i'));
253
+ if (open && new RegExp(`^\\s*</${open[1]}\\s*>`, 'i').test(after))
254
+ variable.hints.add('raw');
255
+ }
256
+ return;
257
+ }
258
+ if (tag.kind !== liquidjs_1.TokenKind.Tag)
259
+ return;
260
+ const args = String(tag.args || '');
261
+ switch (name) {
262
+ case 'raw':
263
+ case 'comment':
264
+ skipping = name;
265
+ break;
266
+ case 'region': {
267
+ const key = args.trim().replace(/^['"]|['"]$/g, '');
268
+ if (key && !regions.includes(key))
269
+ regions.push(key);
270
+ break;
271
+ }
272
+ case 'if':
273
+ case 'elsif':
274
+ case 'unless':
275
+ for (const segments of pathsIn(args))
276
+ use(segments, 'condition');
277
+ break;
278
+ case 'case': {
279
+ const [segments] = pathsIn(args);
280
+ casing = segments ? use(segments, 'case') : null;
281
+ break;
282
+ }
283
+ case 'when':
284
+ for (const value of literals(args))
285
+ casing?.options.add(value);
286
+ for (const segments of pathsIn(args))
287
+ use(segments);
288
+ break;
289
+ case 'endcase':
290
+ casing = null;
291
+ break;
292
+ case 'for':
293
+ case 'tablerow': {
294
+ const match = args.match(/^\s*([\w-]+)\s+in\s+(.+)$/);
295
+ if (!match)
296
+ break;
297
+ const [segments, ...rest] = pathsIn(match[2]);
298
+ let of = null;
299
+ if (segments) {
300
+ const variable = use(segments);
301
+ // only a loop straight over a top-level value gives its items
302
+ if (variable && segments.length === 1 && variables.get(segments[0]) === variable)
303
+ of = variable;
304
+ }
305
+ for (const other of rest)
306
+ use(other);
307
+ loops.push({ local: match[1], of });
308
+ break;
309
+ }
310
+ case 'endfor':
311
+ case 'endtablerow':
312
+ loops.pop();
313
+ break;
314
+ case 'image':
315
+ case 'imageurl': {
316
+ // the rest are size names
317
+ const [segments] = pathsIn(args.trim().split(/\s+/)[0] || '');
318
+ if (segments)
319
+ use(segments, 'image');
320
+ break;
321
+ }
322
+ case 'assign':
323
+ for (const segments of readValue(args.slice(args.indexOf('=') + 1)).paths)
324
+ use(segments);
325
+ break;
326
+ case 'echo':
327
+ for (const segments of readValue(args).paths)
328
+ use(segments, 'output');
329
+ break;
330
+ }
331
+ });
332
+ return { title, regions, variables: finish(variables) };
333
+ }
334
+ /** The HTML of the token at `index`, or `''`. */
335
+ function htmlAt(tokens, index) {
336
+ const token = tokens[index];
337
+ return token?.kind === liquidjs_1.TokenKind.HTML ? token.getContent() : '';
338
+ }
339
+ /**
340
+ * Reads `@name Team members` and `@field <key> <KIND> [label]` lines (`@field people.name TEXT Name` for an
341
+ * item's value). Returns the name, if one is given.
342
+ */
343
+ function annotate(text, variables) {
344
+ let title;
345
+ for (const line of text.split('\n').map((l) => l.trim())) {
346
+ const named = line.match(/^@name\s+(.+)$/);
347
+ if (named)
348
+ title = named[1].trim();
349
+ const field = line.match(/^@field\s+([\w.-]+)\s+([A-Z_]+)(?:\s+(.+))?$/);
350
+ if (field) {
351
+ const [root, item] = field[1].split('.');
352
+ let target = entry(variables, root);
353
+ if (item) {
354
+ target.items ??= new Map();
355
+ target = entry(target.items, item);
356
+ }
357
+ target.kind = field[2];
358
+ if (field[3])
359
+ target.label = field[3].trim();
360
+ }
361
+ }
362
+ return title;
363
+ }
364
+ let packageInfo;
365
+ /** This package's name and version, from its `package.json` (beside both `src/` and `lib/`). */
366
+ function packageOf() {
367
+ if (!packageInfo) {
368
+ const json = JSON.parse(fs_1.default.readFileSync(path_1.default.join(__dirname, '../package.json'), 'utf8'));
369
+ packageInfo = { name: json.name, version: json.version };
370
+ }
371
+ return packageInfo;
372
+ }
373
+ /** The editor origin a valid views token names, or `null` if the token isn't valid. */
374
+ function verifiedOrigin(secret, token) {
375
+ const verified = (0, preview_token_1.verifyPreviewToken)(secret, String(token || ''), exports.VIEWS_TOKEN_SUBJECT);
376
+ return verified.ok ? verified.payload.o || '' : null;
377
+ }
378
+ /**
379
+ * `GET /ceems/views?token=…`: the views' manifest, for the editor. The token is a preview token signed for
380
+ * `VIEWS_TOKEN_SUBJECT`; the editor it names may read the response from the browser, which is how it reaches
381
+ * a site running on `localhost`. 404 without a preview secret, like drafts.
382
+ */
383
+ function viewsHandler(config) {
384
+ return (req, res) => {
385
+ res.set({ 'Cache-Control': 'no-store', Vary: 'Origin' });
386
+ // Refusals carry nothing, so any page may read them: the editor can then say what to fix.
387
+ if (!config.secret) {
388
+ res.set('Access-Control-Allow-Origin', '*').status(404).send('Not found');
389
+ return;
390
+ }
391
+ const origin = verifiedOrigin(config.secret, req.query.token);
392
+ if (origin === null) {
393
+ res.set('Access-Control-Allow-Origin', '*').status(401).send('Unauthorized');
394
+ return;
395
+ }
396
+ if (origin && req.get('origin') === origin)
397
+ res.set('Access-Control-Allow-Origin', origin);
398
+ res.json({
399
+ ...scanViews(config.viewsPath, { globals: config.globals }),
400
+ package: packageOf(),
401
+ });
402
+ };
403
+ }
404
+ /**
405
+ * `OPTIONS /ceems/views?token=…`: the browser's preflight. Chrome sends one before a public page (the editor)
406
+ * reads from a private address (`localhost`), and needs `Access-Control-Allow-Private-Network` back. Any page
407
+ * may make the request: only the editor a valid token names can read the views it returns.
408
+ */
409
+ function viewsPreflightHandler() {
410
+ return (req, res) => {
411
+ res.set('Vary', 'Origin');
412
+ const origin = req.get('origin');
413
+ if (!origin) {
414
+ res.status(400).end();
415
+ return;
416
+ }
417
+ res.set({
418
+ 'Access-Control-Allow-Origin': origin,
419
+ 'Access-Control-Allow-Methods': 'GET',
420
+ 'Access-Control-Allow-Private-Network': 'true',
421
+ 'Access-Control-Max-Age': '600',
422
+ });
423
+ res.status(204).end();
424
+ };
425
+ }
426
+ //# sourceMappingURL=views.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"views.js","sourceRoot":"","sources":["../src/views.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nakedcreativity/cee-ms-node",
3
- "version": "2.0.0-beta.5",
3
+ "version": "2.0.0-beta.9",
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",
@@ -15,6 +15,13 @@
15
15
  "dev": "tsx watch dev/server.ts",
16
16
  "prepublishOnly": "npm run typecheck && npm test && npm run build"
17
17
  },
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "git+https://github.com/Cee-ms/node.git"
21
+ },
22
+ "publishConfig": {
23
+ "access": "public"
24
+ },
18
25
  "author": "Naked Creativity",
19
26
  "license": "ISC",
20
27
  "dependencies": {