@caelo-cms/shared 0.10.71 → 0.11.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.
- package/dist/ai-tools.d.ts +125 -50
- package/dist/ai-tools.d.ts.map +1 -1
- package/dist/ai-tools.js +50 -38
- package/dist/ai-tools.js.map +1 -1
- package/dist/build-page.d.ts +110 -30
- package/dist/build-page.d.ts.map +1 -1
- package/dist/build-page.js +26 -7
- package/dist/build-page.js.map +1 -1
- package/dist/content.d.ts +203 -102
- package/dist/content.d.ts.map +1 -1
- package/dist/content.js +178 -76
- package/dist/content.js.map +1 -1
- package/dist/css-var-aliases.d.ts +20 -0
- package/dist/css-var-aliases.d.ts.map +1 -0
- package/dist/css-var-aliases.js +95 -0
- package/dist/css-var-aliases.js.map +1 -0
- package/dist/css-var-scan.d.ts +0 -16
- package/dist/css-var-scan.d.ts.map +1 -1
- package/dist/css-var-scan.js +24 -0
- package/dist/css-var-scan.js.map +1 -1
- package/dist/edit-markers.d.ts +41 -5
- package/dist/edit-markers.d.ts.map +1 -1
- package/dist/edit-markers.js +47 -50
- package/dist/edit-markers.js.map +1 -1
- package/dist/id-safe-truncate.d.ts +15 -0
- package/dist/id-safe-truncate.d.ts.map +1 -0
- package/dist/id-safe-truncate.js +47 -0
- package/dist/id-safe-truncate.js.map +1 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/interactions.js +2 -2
- package/dist/interactions.js.map +1 -1
- package/dist/link-canonicalise.d.ts.map +1 -1
- package/dist/link-canonicalise.js +7 -1
- package/dist/link-canonicalise.js.map +1 -1
- package/dist/link-refs.d.ts +1 -1
- package/dist/link-refs.js +3 -3
- package/dist/lists/address.d.ts +34 -0
- package/dist/lists/address.d.ts.map +1 -0
- package/dist/lists/address.js +43 -0
- package/dist/lists/address.js.map +1 -0
- package/dist/lists/default-types.d.ts +10 -0
- package/dist/lists/default-types.d.ts.map +1 -0
- package/dist/lists/default-types.js +91 -0
- package/dist/lists/default-types.js.map +1 -0
- package/dist/lists/fields.d.ts +152 -0
- package/dist/lists/fields.d.ts.map +1 -0
- package/dist/lists/fields.js +258 -0
- package/dist/lists/fields.js.map +1 -0
- package/dist/lists/index.d.ts +14 -0
- package/dist/lists/index.d.ts.map +1 -0
- package/dist/lists/index.js +15 -0
- package/dist/lists/index.js.map +1 -0
- package/dist/lists/item-attr.d.ts +26 -0
- package/dist/lists/item-attr.d.ts.map +1 -0
- package/dist/lists/item-attr.js +31 -0
- package/dist/lists/item-attr.js.map +1 -0
- package/dist/lists/items.d.ts +105 -0
- package/dist/lists/items.d.ts.map +1 -0
- package/dist/lists/items.js +304 -0
- package/dist/lists/items.js.map +1 -0
- package/dist/lists/list-type.d.ts +401 -0
- package/dist/lists/list-type.d.ts.map +1 -0
- package/dist/lists/list-type.js +275 -0
- package/dist/lists/list-type.js.map +1 -0
- package/dist/lists/model.d.ts +14 -0
- package/dist/lists/model.d.ts.map +1 -0
- package/dist/lists/model.js +15 -0
- package/dist/lists/model.js.map +1 -0
- package/dist/lists/page-type.d.ts +115 -0
- package/dist/lists/page-type.d.ts.map +1 -0
- package/dist/lists/page-type.js +66 -0
- package/dist/lists/page-type.js.map +1 -0
- package/dist/lists/refs.d.ts +13 -0
- package/dist/lists/refs.d.ts.map +1 -0
- package/dist/lists/refs.js +18 -0
- package/dist/lists/refs.js.map +1 -0
- package/dist/lists/render-data.d.ts +114 -0
- package/dist/lists/render-data.d.ts.map +1 -0
- package/dist/lists/render-data.js +3 -0
- package/dist/lists/render-data.js.map +1 -0
- package/dist/lists/render-deps.d.ts +68 -0
- package/dist/lists/render-deps.d.ts.map +1 -0
- package/dist/lists/render-deps.js +91 -0
- package/dist/lists/render-deps.js.map +1 -0
- package/dist/lists/resolve-values.d.ts +63 -0
- package/dist/lists/resolve-values.d.ts.map +1 -0
- package/dist/lists/resolve-values.js +181 -0
- package/dist/lists/resolve-values.js.map +1 -0
- package/dist/lists/resolve.d.ts +106 -0
- package/dist/lists/resolve.d.ts.map +1 -0
- package/dist/lists/resolve.js +878 -0
- package/dist/lists/resolve.js.map +1 -0
- package/dist/lists/scope.d.ts +81 -0
- package/dist/lists/scope.d.ts.map +1 -0
- package/dist/lists/scope.js +3 -0
- package/dist/lists/scope.js.map +1 -0
- package/dist/markup-structure.d.ts +8 -0
- package/dist/markup-structure.d.ts.map +1 -1
- package/dist/markup-structure.js +2 -0
- package/dist/markup-structure.js.map +1 -1
- package/dist/media.d.ts +1 -1
- package/dist/nested-module-render.d.ts +25 -20
- package/dist/nested-module-render.d.ts.map +1 -1
- package/dist/nested-module-render.js +122 -31
- package/dist/nested-module-render.js.map +1 -1
- package/dist/page-log.d.ts +1 -1
- package/dist/preview-compose.d.ts +24 -21
- package/dist/preview-compose.d.ts.map +1 -1
- package/dist/preview-compose.js +34 -118
- package/dist/preview-compose.js.map +1 -1
- package/dist/preview-scanner.d.ts +5 -2
- package/dist/preview-scanner.d.ts.map +1 -1
- package/dist/preview-scanner.js +5 -3
- package/dist/preview-scanner.js.map +1 -1
- package/dist/source-text-transport.d.ts +17 -0
- package/dist/source-text-transport.d.ts.map +1 -0
- package/dist/source-text-transport.js +71 -0
- package/dist/source-text-transport.js.map +1 -0
- package/dist/template-engine.d.ts +44 -31
- package/dist/template-engine.d.ts.map +1 -1
- package/dist/template-engine.js +75 -174
- package/dist/template-engine.js.map +1 -1
- package/dist/template-sections.d.ts +69 -0
- package/dist/template-sections.d.ts.map +1 -0
- package/dist/template-sections.js +423 -0
- package/dist/template-sections.js.map +1 -0
- package/dist/uuid-diagnose.d.ts +9 -0
- package/dist/uuid-diagnose.d.ts.map +1 -0
- package/dist/uuid-diagnose.js +47 -0
- package/dist/uuid-diagnose.js.map +1 -0
- package/dist/version.d.ts +2 -2
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/package.json +8 -1
- package/src/__tests__/redos-hardening.test.ts +50 -16
- package/src/ai-tools-add-module-modes.test.ts +50 -0
- package/src/ai-tools.test.ts +10 -0
- package/src/ai-tools.ts +53 -39
- package/src/build-page.test.ts +34 -3
- package/src/build-page.ts +29 -6
- package/src/content.test.ts +111 -3
- package/src/content.ts +188 -77
- package/src/css-var-aliases.test.ts +61 -0
- package/src/css-var-aliases.ts +109 -0
- package/src/css-var-scan.ts +9 -0
- package/src/edit-markers.test.ts +37 -21
- package/src/edit-markers.ts +52 -20
- package/src/id-safe-truncate.test.ts +35 -0
- package/src/id-safe-truncate.ts +46 -0
- package/src/index.ts +5 -1
- package/src/interactions.ts +2 -2
- package/src/link-canonicalise.test.ts +36 -6
- package/src/link-canonicalise.ts +6 -1
- package/src/link-refs.test.ts +66 -42
- package/src/link-refs.ts +3 -3
- package/src/lists/address.ts +75 -0
- package/src/lists/default-types.ts +102 -0
- package/src/lists/fields.ts +285 -0
- package/src/lists/index.ts +16 -0
- package/src/lists/item-attr.test.ts +36 -0
- package/src/lists/item-attr.ts +49 -0
- package/src/lists/items.ts +402 -0
- package/src/lists/list-fixtures.test.ts +302 -0
- package/src/lists/list-type.ts +306 -0
- package/src/lists/lists.test.ts +328 -0
- package/src/lists/model.ts +16 -0
- package/src/lists/page-type.ts +71 -0
- package/src/lists/refs.ts +21 -0
- package/src/lists/render-data.ts +125 -0
- package/src/lists/render-deps.test.ts +132 -0
- package/src/lists/render-deps.ts +144 -0
- package/src/lists/resolve-values.ts +224 -0
- package/src/lists/resolve.test.ts +295 -0
- package/src/lists/resolve.ts +1148 -0
- package/src/lists/scope.ts +69 -0
- package/src/lists-compose-parity.test.ts +262 -0
- package/src/markup-structure.ts +10 -0
- package/src/nested-module-render.test.ts +111 -77
- package/src/nested-module-render.ts +85 -48
- package/src/preview-compose.test.ts +74 -19
- package/src/preview-compose.ts +59 -154
- package/src/preview-scanner.test.ts +8 -4
- package/src/preview-scanner.ts +5 -3
- package/src/source-text-transport.test.ts +63 -0
- package/src/source-text-transport.ts +70 -0
- package/src/template-engine-lists.test.ts +553 -0
- package/src/template-engine.test.ts +62 -80
- package/src/template-engine.ts +102 -245
- package/src/template-sections.ts +500 -0
- package/src/uuid-diagnose.test.ts +28 -0
- package/src/uuid-diagnose.ts +50 -0
- package/src/version.ts +1 -1
- package/dist/structured-sets.d.ts +0 -70
- package/dist/structured-sets.d.ts.map +0 -1
- package/dist/structured-sets.js +0 -92
- package/dist/structured-sets.js.map +0 -1
- package/src/structured-sets.ts +0 -114
- package/src/template-engine-data-lists.test.ts +0 -90
package/dist/template-engine.js
CHANGED
|
@@ -5,18 +5,27 @@
|
|
|
5
5
|
* DB-aware `substituteWithRecursion` in `nested-module-render.ts` into a
|
|
6
6
|
* single engine built on `mustache.js` (Plan B per issue #71).
|
|
7
7
|
*
|
|
8
|
-
* Grammar (a Mustache subset — see CMS_REQUIREMENTS §3.1 / §5
|
|
8
|
+
* Grammar (a Mustache subset — see CMS_REQUIREMENTS §3.1 / §5, and
|
|
9
|
+
* `docs/lists.md` §8 for lists):
|
|
9
10
|
* {{name}} — primitive substitution
|
|
10
|
-
* {{#name}}…inner…{{/name}} — section: ITERATES over a list field
|
|
11
|
-
* (
|
|
12
|
-
*
|
|
11
|
+
* {{#name}}…inner…{{/name}} — section: ITERATES over a `list` field
|
|
12
|
+
* (any binding — local, shared, query,
|
|
13
|
+
* system, plugin source) or a
|
|
14
|
+
* `module-list`; for a SCALAR or single
|
|
13
15
|
* `module` field it is a CONDITIONAL —
|
|
14
16
|
* the block renders once when the field
|
|
15
17
|
* has a value, and is dropped when empty
|
|
16
18
|
* (never a kind-mismatch — that used to
|
|
17
19
|
* silently drop real scalar content)
|
|
20
|
+
* {{^name}}…inner…{{/name}} — inverted section: renders when the list
|
|
21
|
+
* is empty or the value absent / false
|
|
18
22
|
* {{>name}} — single nested module reference
|
|
19
23
|
* (module field kind)
|
|
24
|
+
* {{page.title}}, {{a.b}} — dot access (`page.*`, compound entry
|
|
25
|
+
* values); inside a list entry the
|
|
26
|
+
* entry's keys, `{{>recurse}}`,
|
|
27
|
+
* `{{>f}}` (embedded module) and the
|
|
28
|
+
* system keys — see template-sections.ts
|
|
20
29
|
*
|
|
21
30
|
* Substitution priority for {{name}}:
|
|
22
31
|
* 1. contentValues[name] — per-placement value
|
|
@@ -33,13 +42,18 @@
|
|
|
33
42
|
* Failure markers preserved verbatim from the legacy preview-render
|
|
34
43
|
* for `missingSlots`: `field-not-declared:<name>`,
|
|
35
44
|
* `kind-mismatch:<name> expected=<…> actual=<kind>`,
|
|
36
|
-
* `text-list-malformed:<name>[<i>]`, `link-list-malformed:<name>[<i>]`,
|
|
37
45
|
* `module-list-malformed:<name>[<i>]`, `module-ref-malformed:<name>`,
|
|
38
46
|
* `nested-renderer-unavailable:<name>` / `…:<name>[<i>]` (a nested ref
|
|
39
47
|
* rendered without the recursive renderer's partial).
|
|
40
48
|
* v0.11.1 (issue #76): `theme-asset-unbound:<slot>` for the four
|
|
41
49
|
* `{{theme_<slot>_url}}` placeholders when the active theme's asset
|
|
42
50
|
* slot isn't bound.
|
|
51
|
+
* Epic #1107 (lists): `list-unbound:<field>`, `list-missing:<listId>`,
|
|
52
|
+
* `list-type-missing:<slug>`, `list-source-unavailable:<name> plugin=<slug>`,
|
|
53
|
+
* `list-malformed:<field>[<path>]`, `field-not-declared:<field>.<key>`
|
|
54
|
+
* for a key no entry, enclosing entry or module field has, and
|
|
55
|
+
* `list-context-unavailable:<field>` / `…:page` for a list rendered by a
|
|
56
|
+
* caller that gave the engine no list context (never legitimate output).
|
|
43
57
|
* Epic #724: `link-target-missing:page/<id>` / `…:media/<id>` for an
|
|
44
58
|
* internal reference (`caelo:page/<id>`, `caelo:media/<id>`) whose
|
|
45
59
|
* target does not exist, `link-resolver-unavailable:<kind>/<id>` for
|
|
@@ -68,12 +82,46 @@
|
|
|
68
82
|
import Mustache from "mustache";
|
|
69
83
|
import { MODULE_FIELD_SECTION_KINDS } from "./content.js";
|
|
70
84
|
import { resolveLinkRefsInHtml } from "./link-refs.js";
|
|
85
|
+
import { sourceDefSchema } from "./lists/list-type.js";
|
|
71
86
|
import { stripCdataGuards } from "./strip-cdata.js";
|
|
87
|
+
import { renderSections } from "./template-sections.js";
|
|
72
88
|
// Override Mustache's default HTML escape — module HTML substitutes
|
|
73
89
|
// raw. The engine module is the only workspace importer of mustache,
|
|
74
90
|
// so the singleton mutation is scoped in effect. Plan §2 risk #1: the
|
|
75
91
|
// {{href}} test pins this; any leak of the default escape fails.
|
|
76
92
|
Mustache.escape = (s) => (s === null || s === undefined ? "" : String(s));
|
|
93
|
+
/**
|
|
94
|
+
* Parse a stored `modules.fields` jsonb (array or JSON text) into the
|
|
95
|
+
* fields the engine renders with: name, kind (absent = `text`), default,
|
|
96
|
+
* and a `list` field's binding. A typo'd kind passes through as is — the
|
|
97
|
+
* engine reports it loudly (kind-mismatch) instead of the parser hiding
|
|
98
|
+
* it. Entries without a string name are skipped; they cannot be rendered.
|
|
99
|
+
*/
|
|
100
|
+
export function templateFieldsFromJson(raw) {
|
|
101
|
+
const parsed = typeof raw === "string" ? JSON.parse(raw) : raw;
|
|
102
|
+
if (!Array.isArray(parsed))
|
|
103
|
+
return [];
|
|
104
|
+
const out = [];
|
|
105
|
+
for (const f of parsed) {
|
|
106
|
+
if (!f || typeof f !== "object")
|
|
107
|
+
continue;
|
|
108
|
+
const o = f;
|
|
109
|
+
if (typeof o.name !== "string")
|
|
110
|
+
continue;
|
|
111
|
+
out.push({
|
|
112
|
+
name: o.name,
|
|
113
|
+
kind: (typeof o.kind === "string" ? o.kind : "text"),
|
|
114
|
+
...(o.default !== undefined ? { default: o.default } : {}),
|
|
115
|
+
...(typeof o.listType === "string" ? { listType: o.listType } : {}),
|
|
116
|
+
...(o.bind === "local" || o.bind === "shared" || o.bind === "source" ? { bind: o.bind } : {}),
|
|
117
|
+
...(typeof o.list === "string" ? { list: o.list } : {}),
|
|
118
|
+
// A source that fails its schema stays absent: the resolver then
|
|
119
|
+
// reports `list-malformed:<field>[source]` instead of guessing.
|
|
120
|
+
...(sourceDefSchema.safeParse(o.source).success ? { source: o.source } : {}),
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
return out;
|
|
124
|
+
}
|
|
77
125
|
// Field names per the v0.4.0 + v0.12.0 grammar: lowercase ASCII +
|
|
78
126
|
// digits + underscores. Case-insensitive primitive matching (the AI
|
|
79
127
|
// sometimes camelCases the placeholder when extracting from existing
|
|
@@ -81,14 +129,6 @@ Mustache.escape = (s) => (s === null || s === undefined ? "" : String(s));
|
|
|
81
129
|
// between `{{` and the sigil (#, >, /) is permitted to match the
|
|
82
130
|
// Mustache spec — an extractor that pretty-prints AI-authored HTML
|
|
83
131
|
// shouldn't silently break section / partial dispatch.
|
|
84
|
-
// The section body uses a "tempered dot" — `(?:(?!CLOSE)[\s\S])*` — instead
|
|
85
|
-
// of a lazy `[\s\S]*?`. The lazy form makes the engine try, then backtrack,
|
|
86
|
-
// the close-tag match at every interior position, which is O(n²) on
|
|
87
|
-
// unclosed/large input (CodeQL js/polynomial-redos). The tempered form
|
|
88
|
-
// consumes one character only when the close tag does not start there, so
|
|
89
|
-
// there is a single unambiguous path. The capture stops at the first close
|
|
90
|
-
// tag for the captured name, exactly as the lazy form did — same output.
|
|
91
|
-
const SECTION_RE = /\{\{\s*#\s*([a-z][a-z0-9_]*)\s*\}\}((?:(?!\{\{\s*\/\s*\1\s*\}\})[\s\S])*)\{\{\s*\/\s*\1\s*\}\}/g;
|
|
92
132
|
const PARTIAL_RE = /\{\{\s*>\s*([a-z][a-z0-9_]*)\s*\}\}/g;
|
|
93
133
|
const PRIMITIVE_RE = /\{\{\s*([a-zA-Z][a-zA-Z0-9_]*)\s*\}\}/g;
|
|
94
134
|
// A plain tag (no Mustache sigil) of any name, and the identifier test
|
|
@@ -143,26 +183,22 @@ const NESTED_RENDERER_UNAVAILABLE = "nested-renderer-unavailable";
|
|
|
143
183
|
* channel. Pure / sync / no IO.
|
|
144
184
|
*
|
|
145
185
|
* @example
|
|
146
|
-
* //
|
|
186
|
+
* // A local list of the shipped `links` type; `lists` comes from
|
|
187
|
+
* // createListRenderContext(data).forPage(pageId, { linkResolver }).
|
|
147
188
|
* renderTemplate({
|
|
148
|
-
* html: '<nav>{{#
|
|
149
|
-
* fields: [{ name: '
|
|
189
|
+
* html: '<nav>{{#nav}}<a href="{{link}}">{{label}}</a>{{/nav}}</nav>',
|
|
190
|
+
* fields: [{ name: 'nav', kind: 'list', listType: 'links' }],
|
|
150
191
|
* contentValues: {
|
|
151
|
-
*
|
|
152
|
-
* { label: 'Docs', href: '/docs' },
|
|
153
|
-
* { label: 'Blog', href: '/blog' },
|
|
154
|
-
* ],
|
|
192
|
+
* nav: [{ id: '<uuid>', node: 'link', values: { label: 'Docs', link: { href: '/docs' } } }],
|
|
155
193
|
* },
|
|
194
|
+
* lists,
|
|
156
195
|
* });
|
|
157
|
-
* // →
|
|
158
|
-
* // html: '<nav><a href="/docs">Docs</a><a href="/blog">Blog</a></nav>',
|
|
159
|
-
* // missingSlots: [],
|
|
160
|
-
* // }
|
|
196
|
+
* // → html: '<nav><a href="/docs" data-caelo-list-item="local/nav/<uuid>">Docs</a></nav>'
|
|
161
197
|
*
|
|
162
198
|
* @see {@link TemplateField} for the field shape (name + kind + optional default).
|
|
163
199
|
* @see {@link ./content.js#MODULE_FIELD_KINDS} for the canonical kind union.
|
|
164
200
|
* @see {@link ./content.js#MODULE_FIELD_SECTION_KINDS} for the kinds the engine
|
|
165
|
-
* iterates via `{{#name}}` (
|
|
201
|
+
* iterates via `{{#name}}` (list / module-list).
|
|
166
202
|
*/
|
|
167
203
|
export function renderTemplate(input) {
|
|
168
204
|
const missing = [];
|
|
@@ -203,8 +239,19 @@ export function renderTemplate(input) {
|
|
|
203
239
|
// Store-time normalization (modules.create/update) cleans new
|
|
204
240
|
// modules; this covers any already-stored HTML + the deploy render.
|
|
205
241
|
const sourceHtml = stripCdataGuards(input.html);
|
|
206
|
-
// 1. {{#name}}…{{/name}} sections
|
|
207
|
-
|
|
242
|
+
// 1. {{#name}}…{{/name}} and {{^name}}…{{/name}} sections, list
|
|
243
|
+
// entries and dot access (template-sections.ts).
|
|
244
|
+
let html = renderSections(sourceHtml, {
|
|
245
|
+
fields: fieldByName,
|
|
246
|
+
values: cvs,
|
|
247
|
+
partials,
|
|
248
|
+
missing,
|
|
249
|
+
mkSentinel,
|
|
250
|
+
lists: input.lists,
|
|
251
|
+
holder: input.listHolder ?? { contentInstanceId: null },
|
|
252
|
+
moduleLevelKeys: new Set(THEME_ASSET_KEYS),
|
|
253
|
+
renderModuleList: (name, field) => renderModuleList(name, field, cvs, partials, missing, mkSentinel),
|
|
254
|
+
});
|
|
208
255
|
// 2. {{>name}} single partials.
|
|
209
256
|
html = html.replace(PARTIAL_RE, (match, name) => renderPartialRef(match, name, fieldByName, cvs, partials, missing, mkSentinel));
|
|
210
257
|
// 3. {{name}} primitives. Pre-rewrite to canonical lowercase form
|
|
@@ -289,152 +336,6 @@ export function renderTemplate(input) {
|
|
|
289
336
|
final = resolveLinkRefsInHtml(final, input.linkResolver, missing);
|
|
290
337
|
return { html: final, missingSlots: missing };
|
|
291
338
|
}
|
|
292
|
-
function renderSection(match, name, inner, fields, cvs, partials, missing, mkSentinel, dataLists, dormantLists) {
|
|
293
|
-
const field = fields.get(name);
|
|
294
|
-
if (!field) {
|
|
295
|
-
// No declared field — a plugin may still offer this name. Module
|
|
296
|
-
// fields are looked up FIRST by construction, so a plugin can never
|
|
297
|
-
// shadow something the module's author declared.
|
|
298
|
-
const items = dataLists[name];
|
|
299
|
-
if (items)
|
|
300
|
-
return renderDataList(inner, items, mkSentinel);
|
|
301
|
-
// Declared by an installed plugin that is NOT running. Naming the
|
|
302
|
-
// plugin turns "unknown field" (hunt for a typo) into "switch that
|
|
303
|
-
// plugin back on", which is the actual fix.
|
|
304
|
-
const owner = dormantLists[name];
|
|
305
|
-
if (owner) {
|
|
306
|
-
missing.push(`plugin-list-unavailable:${name} plugin=${owner}`);
|
|
307
|
-
return mkSentinel(match);
|
|
308
|
-
}
|
|
309
|
-
missing.push(`field-not-declared:${name}`);
|
|
310
|
-
return mkSentinel(match);
|
|
311
|
-
}
|
|
312
|
-
if (field.kind === "module-list") {
|
|
313
|
-
return renderModuleList(name, field, cvs, partials, missing, mkSentinel);
|
|
314
|
-
}
|
|
315
|
-
if (field.kind === "text-list") {
|
|
316
|
-
return renderTextList(name, inner, field, cvs, missing, mkSentinel);
|
|
317
|
-
}
|
|
318
|
-
if (field.kind === "link-list") {
|
|
319
|
-
return renderLinkList(name, inner, field, cvs, missing, mkSentinel);
|
|
320
|
-
}
|
|
321
|
-
// Any NON-list field used as a `{{#name}}…{{/name}}` section is a
|
|
322
|
-
// CONDITIONAL (Mustache semantics): render the inner block once when the
|
|
323
|
-
// field has a present, non-empty value; drop it when empty. This is what
|
|
324
|
-
// makes `{{#subtitle}}<p>{{subtitle}}</p>{{/subtitle}}` wrap a scalar
|
|
325
|
-
// text/image field — previously a scalar in a section fell through to
|
|
326
|
-
// `kind-mismatch` and SILENTLY DROPPED real content (headings, body copy,
|
|
327
|
-
// an image, a single nested module). `{{name}}` inside the block resolves
|
|
328
|
-
// in the later primitive pass (a `module` field's `{{>name}}` in the
|
|
329
|
-
// partial pass); `{{.}}`/`{{item}}` are substituted here for parity with
|
|
330
|
-
// the *-list renderers. An empty conditional is intentional, not
|
|
331
|
-
// "missing" — nothing is pushed to `missing`.
|
|
332
|
-
return renderConditionalSection(name, inner, field, cvs, mkSentinel);
|
|
333
|
-
}
|
|
334
|
-
/**
|
|
335
|
-
* Render a `{{#name}}…{{/name}}` section over a scalar/module field as a
|
|
336
|
-
* Mustache conditional: the block once when the value is present, else "".
|
|
337
|
-
*/
|
|
338
|
-
function renderConditionalSection(name, inner, field, cvs, mkSentinel) {
|
|
339
|
-
const raw = Object.hasOwn(cvs, name) ? cvs[name] : field.default;
|
|
340
|
-
if (!isPresentSectionValue(raw))
|
|
341
|
-
return "";
|
|
342
|
-
const value = scalarSectionString(raw);
|
|
343
|
-
return value.length > 0
|
|
344
|
-
? inner.replace(/\{\{\s*(?:\.|item)\s*\}\}/g, () => mkSentinel(value))
|
|
345
|
-
: inner;
|
|
346
|
-
}
|
|
347
|
-
/**
|
|
348
|
-
* Mustache-style truthiness for a conditional section value. Empty string,
|
|
349
|
-
* null/undefined, `false`, and an empty array/object are absent; everything
|
|
350
|
-
* else (incl. a numeric 0 — a real content value, not a control flag) is
|
|
351
|
-
* present.
|
|
352
|
-
*/
|
|
353
|
-
function isPresentSectionValue(raw) {
|
|
354
|
-
if (raw === undefined || raw === null || raw === false)
|
|
355
|
-
return false;
|
|
356
|
-
if (typeof raw === "string")
|
|
357
|
-
return raw.trim().length > 0;
|
|
358
|
-
if (typeof raw === "number")
|
|
359
|
-
return !Number.isNaN(raw);
|
|
360
|
-
if (Array.isArray(raw))
|
|
361
|
-
return raw.length > 0;
|
|
362
|
-
if (typeof raw === "object")
|
|
363
|
-
return Object.keys(raw).length > 0;
|
|
364
|
-
return true;
|
|
365
|
-
}
|
|
366
|
-
/** String form for `{{.}}`/`{{item}}` inside a scalar conditional. Objects
|
|
367
|
-
* (module refs / image objects) render through `{{name}}`/`{{>name}}`, not
|
|
368
|
-
* `{{.}}`, so they stringify to "". */
|
|
369
|
-
function scalarSectionString(raw) {
|
|
370
|
-
if (typeof raw === "string")
|
|
371
|
-
return raw;
|
|
372
|
-
if (typeof raw === "number" || typeof raw === "boolean")
|
|
373
|
-
return String(raw);
|
|
374
|
-
return "";
|
|
375
|
-
}
|
|
376
|
-
function renderTextList(name, inner, field, cvs, missing, mkSentinel) {
|
|
377
|
-
const raw = Object.hasOwn(cvs, name) ? cvs[name] : field.default;
|
|
378
|
-
if (!Array.isArray(raw))
|
|
379
|
-
return "";
|
|
380
|
-
const parts = [];
|
|
381
|
-
for (let i = 0; i < raw.length; i += 1) {
|
|
382
|
-
const el = raw[i];
|
|
383
|
-
if (typeof el !== "string" && typeof el !== "number" && typeof el !== "boolean") {
|
|
384
|
-
missing.push(`text-list-malformed:${name}[${i}]`);
|
|
385
|
-
parts.push(comment(`text-list-malformed ${name}[${i}]`));
|
|
386
|
-
continue;
|
|
387
|
-
}
|
|
388
|
-
const value = String(el);
|
|
389
|
-
parts.push(inner.replace(/\{\{\s*(?:\.|item)\s*\}\}/g, () => mkSentinel(value)));
|
|
390
|
-
}
|
|
391
|
-
return parts.join("");
|
|
392
|
-
}
|
|
393
|
-
/**
|
|
394
|
-
* Iterate a plugin-provided list, substituting each item's keys inside
|
|
395
|
-
* the section body.
|
|
396
|
-
*
|
|
397
|
-
* Unlike `link-list` no shape is imposed: the keys are whatever the
|
|
398
|
-
* plugin declared in `itemFields`, so a language switcher uses
|
|
399
|
-
* href/label/locale and a comment list something else entirely. A
|
|
400
|
-
* `{{key}}` the item does not carry is left raw, matching the engine's
|
|
401
|
-
* loud-raw rule everywhere else — a typo'd key stays visible instead of
|
|
402
|
-
* quietly rendering as nothing.
|
|
403
|
-
*/
|
|
404
|
-
function renderDataList(inner, items, mkSentinel) {
|
|
405
|
-
const parts = [];
|
|
406
|
-
for (const item of items) {
|
|
407
|
-
let rendered = inner;
|
|
408
|
-
for (const [key, value] of Object.entries(item)) {
|
|
409
|
-
const escaped = key.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
410
|
-
rendered = rendered.replace(new RegExp(`\\{\\{\\s*${escaped}\\s*\\}\\}`, "g"), () => mkSentinel(value));
|
|
411
|
-
}
|
|
412
|
-
parts.push(rendered);
|
|
413
|
-
}
|
|
414
|
-
return parts.join("");
|
|
415
|
-
}
|
|
416
|
-
function renderLinkList(name, inner, field, cvs, missing, mkSentinel) {
|
|
417
|
-
const raw = Object.hasOwn(cvs, name) ? cvs[name] : field.default;
|
|
418
|
-
if (!Array.isArray(raw))
|
|
419
|
-
return "";
|
|
420
|
-
const parts = [];
|
|
421
|
-
for (let i = 0; i < raw.length; i += 1) {
|
|
422
|
-
const el = raw[i];
|
|
423
|
-
if (typeof el !== "object" ||
|
|
424
|
-
el === null ||
|
|
425
|
-
typeof el.label !== "string" ||
|
|
426
|
-
typeof el.href !== "string") {
|
|
427
|
-
missing.push(`link-list-malformed:${name}[${i}]`);
|
|
428
|
-
parts.push(comment(`link-list-malformed ${name}[${i}]`));
|
|
429
|
-
continue;
|
|
430
|
-
}
|
|
431
|
-
const { label, href } = el;
|
|
432
|
-
parts.push(inner
|
|
433
|
-
.replace(/\{\{\s*label\s*\}\}/g, () => mkSentinel(label))
|
|
434
|
-
.replace(/\{\{\s*href\s*\}\}/g, () => mkSentinel(href)));
|
|
435
|
-
}
|
|
436
|
-
return parts.join("");
|
|
437
|
-
}
|
|
438
339
|
function renderModuleList(name, field, cvs, partials, missing, mkSentinel) {
|
|
439
340
|
const raw = Object.hasOwn(cvs, name) ? cvs[name] : field.default;
|
|
440
341
|
if (!Array.isArray(raw))
|
|
@@ -476,7 +377,7 @@ function renderPartialRef(match, name, fields, cvs, partials, missing, mkSentine
|
|
|
476
377
|
}
|
|
477
378
|
const ref = Object.hasOwn(cvs, name) ? cvs[name] : undefined;
|
|
478
379
|
// An unset or explicitly null single `module` field is an EMPTY slot,
|
|
479
|
-
// the same as an empty module-list /
|
|
380
|
+
// the same as an empty module-list / list: it renders nothing and
|
|
480
381
|
// is not a failure (#1041). The static generator refuses a Stage on any
|
|
481
382
|
// marker, so flagging "empty" here made an optional nested slot
|
|
482
383
|
// impossible to leave blank. A present value that is not a ref is still
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template-engine.js","sourceRoot":"","sources":["../src/template-engine.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"template-engine.js","sourceRoot":"","sources":["../src/template-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Section pass of the template engine (`template-engine.ts`): every
|
|
3
|
+
* `{{#name}}…{{/name}}` and `{{^name}}…{{/name}}`, list iteration with
|
|
4
|
+
* entry scopes, `{{>recurse}}`, `{{>f}}` for an entry's embedded module,
|
|
5
|
+
* dot access and `{{page.*}}` (epic #1107, `docs/lists.md` §8).
|
|
6
|
+
*
|
|
7
|
+
* The template is tokenized ONCE and sections are matched with one stack
|
|
8
|
+
* per name, so a children loop may repeat inside itself
|
|
9
|
+
* (`{{#children}}…{{#children}}…{{/children}}…{{/children}}`) and the cost
|
|
10
|
+
* stays linear in the number of tags — no regex backtracks over a section
|
|
11
|
+
* body (CodeQL js/polynomial-redos).
|
|
12
|
+
*
|
|
13
|
+
* Output contract with the later passes: text outside list entries and
|
|
14
|
+
* every tag this pass does not own (a module field's `{{name}}`, a
|
|
15
|
+
* top-level `{{>name}}`, `{{&x}}`, comments) comes out verbatim, so the
|
|
16
|
+
* partial and primitive passes treat it exactly as before. Everything
|
|
17
|
+
* this pass pastes — entry values, rendered nested modules, the original
|
|
18
|
+
* source of a tag that must stay raw — is wrapped in a sentinel (#1053),
|
|
19
|
+
* so content that happens to contain `{{…}}` is never parsed again.
|
|
20
|
+
*/
|
|
21
|
+
import type { ListFieldSpec, ListHolder, ListPageContext } from "./lists/resolve.js";
|
|
22
|
+
/** A field as the section pass needs it (subset of `TemplateField`). */
|
|
23
|
+
export interface SectionField extends Partial<Omit<ListFieldSpec, "name" | "default">> {
|
|
24
|
+
readonly name: string;
|
|
25
|
+
readonly kind: string;
|
|
26
|
+
readonly default?: unknown;
|
|
27
|
+
}
|
|
28
|
+
/** Renders the nested-module partial for `key`; `ref` is set for an entry's module field. */
|
|
29
|
+
export type SectionPartialResolver = (key: string, ref?: {
|
|
30
|
+
readonly moduleId: string;
|
|
31
|
+
readonly contentInstanceId: string;
|
|
32
|
+
}) => string | undefined;
|
|
33
|
+
/** What the section pass works with — one per `renderTemplate` call. */
|
|
34
|
+
export interface SectionEnv {
|
|
35
|
+
readonly fields: ReadonlyMap<string, SectionField>;
|
|
36
|
+
readonly values: Readonly<Record<string, unknown>>;
|
|
37
|
+
readonly partials: SectionPartialResolver;
|
|
38
|
+
readonly missing: string[];
|
|
39
|
+
readonly mkSentinel: (original: string) => string;
|
|
40
|
+
readonly lists: ListPageContext | undefined;
|
|
41
|
+
readonly holder: ListHolder;
|
|
42
|
+
/** Theme-asset placeholder names, which are module-level keys too. */
|
|
43
|
+
readonly moduleLevelKeys: ReadonlySet<string>;
|
|
44
|
+
/** Renders a `module-list` field (inner block ignored), shared with the old engine path. */
|
|
45
|
+
readonly renderModuleList: (name: string, field: SectionField) => string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Run the section pass over `html`. Returns the HTML with every matched
|
|
49
|
+
* section rendered and every tag inside list entries resolved.
|
|
50
|
+
*/
|
|
51
|
+
export declare function renderSections(html: string, env: SectionEnv): string;
|
|
52
|
+
/**
|
|
53
|
+
* Mustache-style truthiness for a conditional section value. Empty string,
|
|
54
|
+
* null/undefined, `false`, and an empty array/object are absent; everything
|
|
55
|
+
* else (incl. a numeric 0 — a real content value, not a control flag) is
|
|
56
|
+
* present.
|
|
57
|
+
*/
|
|
58
|
+
export declare function isPresentSectionValue(raw: unknown): boolean;
|
|
59
|
+
/** The attribute a rendered list entry's root element carries (`docs/lists.md` §13). */
|
|
60
|
+
export declare const LIST_ITEM_ATTRIBUTE = "data-caelo-list-item";
|
|
61
|
+
/**
|
|
62
|
+
* Stamp `data-caelo-list-item` on a rendered entry's root element: the
|
|
63
|
+
* first opening tag, when the entry's markup STARTS with one (leading
|
|
64
|
+
* whitespace and comments allowed). An entry that starts with text
|
|
65
|
+
* (`{{name}}, `) has no root element and stays unstamped, rather than
|
|
66
|
+
* attributing the entry to some inner `<b>`. Idempotent.
|
|
67
|
+
*/
|
|
68
|
+
export declare function stampListItem(html: string, attr: string): string;
|
|
69
|
+
//# sourceMappingURL=template-sections.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template-sections.d.ts","sourceRoot":"","sources":["../src/template-sections.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGrF,wEAAwE;AACxE,MAAM,WAAW,YAAa,SAAQ,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACpF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,6FAA6F;AAC7F,MAAM,MAAM,sBAAsB,GAAG,CACnC,GAAG,EAAE,MAAM,EACX,GAAG,CAAC,EAAE;IAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAA;CAAE,KACpE,MAAM,GAAG,SAAS,CAAC;AAExB,wEAAwE;AACxE,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACnD,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACnD,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;IAC1C,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;IAClD,QAAQ,CAAC,KAAK,EAAE,eAAe,GAAG,SAAS,CAAC;IAC5C,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,sEAAsE;IACtE,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9C,4FAA4F;IAC5F,QAAQ,CAAC,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,KAAK,MAAM,CAAC;CAC1E;AAyED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,GAAG,MAAM,CAOpE;AAgTD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAO3D;AASD,wFAAwF;AACxF,eAAO,MAAM,mBAAmB,yBAAyB,CAAC;AAE1D;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CA2BhE"}
|