@caelo-cms/shared 0.10.72 → 0.11.1
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 +103 -142
- package/dist/ai-tools.d.ts.map +1 -1
- package/dist/ai-tools.js +79 -167
- package/dist/ai-tools.js.map +1 -1
- package/dist/build-page.d.ts +115 -35
- package/dist/build-page.d.ts.map +1 -1
- package/dist/build-page.js +31 -12
- package/dist/build-page.js.map +1 -1
- package/dist/content.d.ts +214 -102
- package/dist/content.d.ts.map +1 -1
- package/dist/content.js +219 -84
- package/dist/content.js.map +1 -1
- package/dist/css-scope-scan.js +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/escaped-line-breaks.d.ts +44 -0
- package/dist/escaped-line-breaks.d.ts.map +1 -0
- package/dist/escaped-line-breaks.js +203 -0
- package/dist/escaped-line-breaks.js.map +1 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/interactions.js +6 -6
- 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 +22 -0
- package/dist/lists/default-types.d.ts.map +1 -0
- package/dist/lists/default-types.js +127 -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 +259 -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 +123 -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 +69 -0
- package/dist/lists/render-deps.d.ts.map +1 -0
- package/dist/lists/render-deps.js +93 -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 +119 -0
- package/dist/lists/resolve.d.ts.map +1 -0
- package/dist/lists/resolve.js +970 -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 +38 -20
- package/dist/nested-module-render.d.ts.map +1 -1
- package/dist/nested-module-render.js +156 -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/redirect-plan.d.ts +13 -0
- package/dist/redirect-plan.d.ts.map +1 -1
- package/dist/redirect-plan.js +22 -0
- package/dist/redirect-plan.js.map +1 -1
- package/dist/seo.d.ts +21 -0
- package/dist/seo.d.ts.map +1 -1
- package/dist/seo.js +32 -0
- package/dist/seo.js.map +1 -1
- package/dist/source-text-transport.d.ts +43 -0
- package/dist/source-text-transport.d.ts.map +1 -0
- package/dist/source-text-transport.js +79 -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 +436 -0
- package/dist/template-sections.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 +51 -16
- package/src/ai-tools-add-module-modes.test.ts +51 -1
- package/src/ai-tools.test.ts +7 -10
- package/src/ai-tools.ts +90 -180
- package/src/bug-intake.test.ts +1 -1
- package/src/build-page.test.ts +34 -3
- package/src/build-page.ts +34 -11
- package/src/content.test.ts +137 -4
- package/src/content.ts +230 -85
- package/src/css-scope-scan.ts +1 -1
- 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/escaped-line-breaks.ts +221 -0
- package/src/index.ts +4 -1
- package/src/interactions.ts +6 -6
- package/src/link-canonicalise.test.ts +36 -6
- package/src/link-canonicalise.ts +6 -1
- package/src/link-refs.test.ts +67 -42
- package/src/link-refs.ts +3 -3
- package/src/lists/address.ts +75 -0
- package/src/lists/default-types.ts +141 -0
- package/src/lists/fields.ts +286 -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 +308 -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 +134 -0
- package/src/lists/render-deps.test.ts +132 -0
- package/src/lists/render-deps.ts +147 -0
- package/src/lists/resolve-values.ts +224 -0
- package/src/lists/resolve.test.ts +472 -0
- package/src/lists/resolve.ts +1246 -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 +147 -74
- package/src/nested-module-render.ts +120 -48
- package/src/preview-compose.test.ts +55 -19
- package/src/preview-compose.ts +59 -154
- package/src/redirect-plan.test.ts +25 -0
- package/src/redirect-plan.ts +24 -0
- package/src/seo.test.ts +58 -0
- package/src/seo.ts +49 -0
- package/src/source-text-transport.test.ts +158 -0
- package/src/source-text-transport.ts +81 -0
- package/src/template-engine-lists.test.ts +608 -0
- package/src/template-engine.test.ts +62 -80
- package/src/template-engine.ts +102 -245
- package/src/template-sections.ts +514 -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
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MPL-2.0
|
|
2
|
+
/**
|
|
3
|
+
* Decoding of whole-value transport encodings around AI tool arguments that
|
|
4
|
+
* carry source text (module / template / layout html, css, js).
|
|
5
|
+
*
|
|
6
|
+
* The model sometimes encodes a long markup string as a whole before it
|
|
7
|
+
* sends it: as a CDATA section (`unwrapCdataEnvelope`), as a JSON string
|
|
8
|
+
* literal (`"<footer class=\"x\">…"`), HTML-escaped (`<main>…`), or
|
|
9
|
+
* with its line breaks string-escaped (`{\n color: red;\n}`, see
|
|
10
|
+
* `escaped-line-breaks.ts`).
|
|
11
|
+
* Each is an encoding of a value the caller did supply, never content:
|
|
12
|
+
* a JSON string literal is not valid markup, CSS or JS as a whole, and
|
|
13
|
+
* markup without a single `<` but with `<tag` has no element at all.
|
|
14
|
+
* Refusing them cost a tool round-trip each time (e2e-livedit runs of
|
|
15
|
+
* PR #1121 and #1143); describing them in every tool cost tokens on every
|
|
16
|
+
* call and still did not stop them. So the boundary decodes them, once,
|
|
17
|
+
* here. Anything not clearly a whole-value encoding is left untouched and
|
|
18
|
+
* the op validator still refuses it (shared `content.ts`), which also
|
|
19
|
+
* keeps human and import writes strict. This is input normalisation, not
|
|
20
|
+
* a fallback for missing data (CLAUDE.md §2).
|
|
21
|
+
*/
|
|
22
|
+
import { decodeEscapedLineBreaks } from "./escaped-line-breaks.js";
|
|
23
|
+
import { unwrapCdataEnvelope } from "./strip-cdata.js";
|
|
24
|
+
/**
|
|
25
|
+
* The body of a whole-value JSON string literal, or the input unchanged.
|
|
26
|
+
* Only decoded when the literal carries an escape (`\"`, `\n`, `\t`, `\\`,
|
|
27
|
+
* `\/`, `\u…`): a bare `"use strict"` stays as it is.
|
|
28
|
+
*/
|
|
29
|
+
export function decodeJsonEncodedSource(value) {
|
|
30
|
+
if (typeof value !== "string")
|
|
31
|
+
return value;
|
|
32
|
+
const t = value.trim();
|
|
33
|
+
if (t.length < 2 || !t.startsWith('"') || !t.endsWith('"'))
|
|
34
|
+
return value;
|
|
35
|
+
if (!/\\["ntr\\/u]/.test(t))
|
|
36
|
+
return value;
|
|
37
|
+
try {
|
|
38
|
+
const decoded = JSON.parse(t);
|
|
39
|
+
return typeof decoded === "string" ? decoded : value;
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return value;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
const ENTITIES = {
|
|
46
|
+
"<": "<",
|
|
47
|
+
">": ">",
|
|
48
|
+
""": '"',
|
|
49
|
+
""": '"',
|
|
50
|
+
"'": "'",
|
|
51
|
+
"'": "'",
|
|
52
|
+
"'": "'",
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Markup sent HTML-escaped as a whole, decoded once; the input unchanged
|
|
56
|
+
* otherwise. "As a whole" = no raw `<` anywhere and at least one escaped
|
|
57
|
+
* tag (`<div`, `</div`) — the same test the op's refusal uses.
|
|
58
|
+
* `&` is decoded last, so an entity the author meant (`&nbsp;`
|
|
59
|
+
* sent for ` `) comes out as the author wrote it.
|
|
60
|
+
*/
|
|
61
|
+
export function decodeHtmlEscapedSource(value) {
|
|
62
|
+
if (typeof value !== "string")
|
|
63
|
+
return value;
|
|
64
|
+
if (value.includes("<") || !/<\/?[a-zA-Z]/.test(value))
|
|
65
|
+
return value;
|
|
66
|
+
return value
|
|
67
|
+
.replace(/<|>|"|"|'|'|'/g, (e) => ENTITIES[e] ?? e)
|
|
68
|
+
.replace(/&/g, "&");
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Every whole-value transport encoding, outermost first.
|
|
72
|
+
*
|
|
73
|
+
* @param language - the grammar of the value; escaped line breaks are only
|
|
74
|
+
* decoded where they cannot belong to a literal of it.
|
|
75
|
+
*/
|
|
76
|
+
export function decodeSourceTextTransport(value, language) {
|
|
77
|
+
return decodeEscapedLineBreaks(decodeHtmlEscapedSource(decodeJsonEncodedSource(unwrapCdataEnvelope(value))), language);
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=source-text-transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-text-transport.js","sourceRoot":"","sources":["../src/source-text-transport.ts"],"names":[],"mappings":"AAAA,mCAAmC;AAEnC;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,uBAAuB,EAAuB,MAAM,0BAA0B,CAAC;AACxF,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAc;IACpD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IACvB,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACzE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1C,IAAI,CAAC;QACH,MAAM,OAAO,GAAY,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACvC,OAAO,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,QAAQ,GAAqC;IACjD,MAAM,EAAE,GAAG;IACX,MAAM,EAAE,GAAG;IACX,QAAQ,EAAE,GAAG;IACb,OAAO,EAAE,GAAG;IACZ,OAAO,EAAE,GAAG;IACZ,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;CACd,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CAAC,KAAc;IACpD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACxE,OAAO,KAAK;SACT,OAAO,CAAC,6CAA6C,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SAC/E,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CAAC,KAAc,EAAE,QAAwB;IAChF,OAAO,uBAAuB,CAC5B,uBAAuB,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,EAC5E,QAAQ,CACT,CAAC;AACJ,CAAC"}
|
|
@@ -1,21 +1,42 @@
|
|
|
1
1
|
import { type ModuleFieldKind } from "./content.js";
|
|
2
2
|
import { type LinkResolver } from "./link-refs.js";
|
|
3
|
+
import { type SourceDef } from "./lists/list-type.js";
|
|
4
|
+
import type { ListHolder, ListPageContext } from "./lists/resolve.js";
|
|
3
5
|
/**
|
|
4
6
|
* Subset of `modules.fields[]` the engine cares about. The full
|
|
5
|
-
* schema lives in `content.ts`; the engine
|
|
6
|
-
*
|
|
7
|
+
* schema lives in `content.ts`; the engine needs `name`, `kind`, the
|
|
8
|
+
* optional `default` and, for a `list` field, its binding
|
|
9
|
+
* (`listType`, `bind`, `list`, `source` — `docs/lists.md` §7).
|
|
10
|
+
* Importers pass the full row through.
|
|
7
11
|
*/
|
|
8
12
|
export interface TemplateField {
|
|
9
13
|
readonly name: string;
|
|
10
14
|
readonly kind: ModuleFieldKind;
|
|
11
15
|
readonly default?: unknown;
|
|
16
|
+
readonly listType?: string;
|
|
17
|
+
readonly bind?: "local" | "shared" | "source";
|
|
18
|
+
readonly list?: string;
|
|
19
|
+
readonly source?: SourceDef;
|
|
12
20
|
}
|
|
21
|
+
/**
|
|
22
|
+
* Parse a stored `modules.fields` jsonb (array or JSON text) into the
|
|
23
|
+
* fields the engine renders with: name, kind (absent = `text`), default,
|
|
24
|
+
* and a `list` field's binding. A typo'd kind passes through as is — the
|
|
25
|
+
* engine reports it loudly (kind-mismatch) instead of the parser hiding
|
|
26
|
+
* it. Entries without a string name are skipped; they cannot be rendered.
|
|
27
|
+
*/
|
|
28
|
+
export declare function templateFieldsFromJson(raw: unknown): TemplateField[];
|
|
13
29
|
/**
|
|
14
30
|
* Renders the nested-module partial for `key` (see
|
|
15
31
|
* {@link RenderTemplateInput.partials}) on demand, or `undefined` when
|
|
16
|
-
* the caller has no renderer for it.
|
|
32
|
+
* the caller has no renderer for it. `ref` is passed for the module
|
|
33
|
+
* field of a list entry (key `list:<field>/<itemId>/<entryField>`),
|
|
34
|
+
* whose value the caller cannot look up by field name.
|
|
17
35
|
*/
|
|
18
|
-
export type PartialResolver = (key: string
|
|
36
|
+
export type PartialResolver = (key: string, ref?: {
|
|
37
|
+
readonly moduleId: string;
|
|
38
|
+
readonly contentInstanceId: string;
|
|
39
|
+
}) => string | undefined;
|
|
19
40
|
export interface RenderTemplateInput {
|
|
20
41
|
readonly html: string;
|
|
21
42
|
readonly fields: readonly TemplateField[];
|
|
@@ -25,6 +46,8 @@ export interface RenderTemplateInput {
|
|
|
25
46
|
* Nested-module HTML keyed by:
|
|
26
47
|
* - `<name>` for single `{{>name}}` (module field kind)
|
|
27
48
|
* - `<name>__<index>` for each `{{#name}}` element (module-list)
|
|
49
|
+
* - `list:<field>/<itemId>/<entryField>` for `{{>entryField}}`
|
|
50
|
+
* inside an entry of list field `<field>` (resolver gets the ref)
|
|
28
51
|
* Either pre-rendered, or a {@link PartialResolver} the engine calls
|
|
29
52
|
* only for the refs the template actually dispatches — the recursive
|
|
30
53
|
* renderer (nested-module-render.ts) passes a resolver so a declared
|
|
@@ -33,23 +56,17 @@ export interface RenderTemplateInput {
|
|
|
33
56
|
*/
|
|
34
57
|
readonly partials?: Readonly<Record<string, string>> | PartialResolver;
|
|
35
58
|
/**
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
39
|
-
* it lives on instead of carrying a plugin's fixed HTML.
|
|
40
|
-
*
|
|
41
|
-
* Resolved per page, which is what lets a module carrying one sit in
|
|
42
|
-
* a LAYOUT and cover every page. The `staticRender` placeholder can't:
|
|
43
|
-
* it needs the page's own id baked into its HTML.
|
|
59
|
+
* The list view of THIS page (`lists/resolve.ts`): resolves `list`
|
|
60
|
+
* fields, `{{page.*}}` and plugin list sources. Without it a `list`
|
|
61
|
+
* field renders raw with `list-context-unavailable:<field>`.
|
|
44
62
|
*/
|
|
45
|
-
readonly
|
|
63
|
+
readonly lists?: ListPageContext;
|
|
46
64
|
/**
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
* report "that plugin is switched off" instead of "unknown field".
|
|
65
|
+
* The content instance whose values are rendered — the address of
|
|
66
|
+
* local list entries for overlays and `data-caelo-list-item`. Absent
|
|
67
|
+
* for field defaults (site chrome).
|
|
51
68
|
*/
|
|
52
|
-
readonly
|
|
69
|
+
readonly listHolder?: ListHolder;
|
|
53
70
|
/**
|
|
54
71
|
* v0.11.1 (issue #76) — active theme's resolved asset URLs. When
|
|
55
72
|
* present, `{{theme_logo_url}}` / `{{theme_logo_dark_url}}` /
|
|
@@ -71,7 +88,7 @@ export interface RenderTemplateInput {
|
|
|
71
88
|
* `caelo:media/<id>`) into URLs for the page being rendered. Applied
|
|
72
89
|
* to the fully substituted output, so a reference resolves wherever it
|
|
73
90
|
* came from: module HTML attributes, a field value, a field default, a
|
|
74
|
-
*
|
|
91
|
+
* list entry, rich text. A missing target stays raw and pushes
|
|
75
92
|
* `link-target-missing:<kind>/<id>`; with no resolver every reference
|
|
76
93
|
* pushes `link-resolver-unavailable:<kind>/<id>` (loud, never empty).
|
|
77
94
|
*/
|
|
@@ -98,26 +115,22 @@ export declare function caeloMissingComment(reason: string): string;
|
|
|
98
115
|
* channel. Pure / sync / no IO.
|
|
99
116
|
*
|
|
100
117
|
* @example
|
|
101
|
-
* //
|
|
118
|
+
* // A local list of the shipped `links` type; `lists` comes from
|
|
119
|
+
* // createListRenderContext(data).forPage(pageId, { linkResolver }).
|
|
102
120
|
* renderTemplate({
|
|
103
|
-
* html: '<nav>{{#
|
|
104
|
-
* fields: [{ name: '
|
|
121
|
+
* html: '<nav>{{#nav}}<a href="{{link}}">{{label}}</a>{{/nav}}</nav>',
|
|
122
|
+
* fields: [{ name: 'nav', kind: 'list', listType: 'links' }],
|
|
105
123
|
* contentValues: {
|
|
106
|
-
*
|
|
107
|
-
* { label: 'Docs', href: '/docs' },
|
|
108
|
-
* { label: 'Blog', href: '/blog' },
|
|
109
|
-
* ],
|
|
124
|
+
* nav: [{ id: '<uuid>', node: 'link', values: { label: 'Docs', link: { href: '/docs' } } }],
|
|
110
125
|
* },
|
|
126
|
+
* lists,
|
|
111
127
|
* });
|
|
112
|
-
* // →
|
|
113
|
-
* // html: '<nav><a href="/docs">Docs</a><a href="/blog">Blog</a></nav>',
|
|
114
|
-
* // missingSlots: [],
|
|
115
|
-
* // }
|
|
128
|
+
* // → html: '<nav><a href="/docs" data-caelo-list-item="local/nav/<uuid>">Docs</a></nav>'
|
|
116
129
|
*
|
|
117
130
|
* @see {@link TemplateField} for the field shape (name + kind + optional default).
|
|
118
131
|
* @see {@link ./content.js#MODULE_FIELD_KINDS} for the canonical kind union.
|
|
119
132
|
* @see {@link ./content.js#MODULE_FIELD_SECTION_KINDS} for the kinds the engine
|
|
120
|
-
* iterates via `{{#name}}` (
|
|
133
|
+
* iterates via `{{#name}}` (list / module-list).
|
|
121
134
|
*/
|
|
122
135
|
export declare function renderTemplate(input: RenderTemplateInput): RenderTemplateOutput;
|
|
123
136
|
//# sourceMappingURL=template-engine.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template-engine.d.ts","sourceRoot":"","sources":["../src/template-engine.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"template-engine.d.ts","sourceRoot":"","sources":["../src/template-engine.ts"],"names":[],"mappings":"AAoFA,OAAO,EAA8B,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,KAAK,YAAY,EAAyB,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAE,KAAK,SAAS,EAAmB,MAAM,sBAAsB,CAAC;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAUtE;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC9C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;CAC7B;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa,EAAE,CAqBpE;AAED;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG,CAC5B,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,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC;IAC1C,4DAA4D;IAC5D,QAAQ,CAAC,aAAa,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3D;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,eAAe,CAAC;IACvE;;;;OAIG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC;IACjC;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC;IACjC;;;;;;;;;OASG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE;QACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;KACrC,CAAC;IACF;;;;;;;;OAQG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;CACtC;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,2EAA2E;IAC3E,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1C;AAmDD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE1D;AAWD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,oBAAoB,CAwJ/E"}
|
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":"AAAA,mCAAmC;AAEnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiEG;AAEH,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,0BAA0B,EAAwB,MAAM,cAAc,CAAC;AAChF,OAAO,EAAqB,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,oEAAoE;AACpE,qEAAqE;AACrE,sEAAsE;AACtE,iEAAiE;AACjE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAU,EAAU,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AA6F3F,kEAAkE;AAClE,oEAAoE;AACpE,qEAAqE;AACrE,gEAAgE;AAChE,iEAAiE;AACjE,mEAAmE;AACnE,uDAAuD;AACvD,4EAA4E;AAC5E,4EAA4E;AAC5E,oEAAoE;AACpE,uEAAuE;AACvE,0EAA0E;AAC1E,2EAA2E;AAC3E,yEAAyE;AACzE,MAAM,UAAU,GACd,iGAAiG,CAAC;AACpG,MAAM,UAAU,GAAG,sCAAsC,CAAC;AAC1D,MAAM,YAAY,GAAG,wCAAwC,CAAC;AAC9D,uEAAuE;AACvE,2EAA2E;AAC3E,mEAAmE;AACnE,6CAA6C;AAC7C,MAAM,qBAAqB,GAAG,oCAAoC,CAAC;AACnE,MAAM,aAAa,GAAG,yBAAyB,CAAC;AAEhD,sEAAsE;AACtE,sEAAsE;AACtE,8CAA8C;AAC9C,MAAM,aAAa,GAAwB,IAAI,GAAG,CAAC,0BAA0B,CAAC,CAAC;AAE/E,sEAAsE;AACtE,gEAAgE;AAChE,oEAAoE;AACpE,+DAA+D;AAC/D,MAAM,uBAAuB,GAAG;IAC9B,cAAc,EAAE,MAAM;IACtB,mBAAmB,EAAE,UAAU;IAC/B,iBAAiB,EAAE,SAAS;IAC5B,sBAAsB,EAAE,aAAa;CAC7B,CAAC;AACX,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAE3D,CAAC;AAEF,SAAS,WAAW,CAAC,CAAU;IAC7B,OAAO,CACL,OAAO,CAAC,KAAK,QAAQ;QACrB,CAAC,KAAK,IAAI;QACV,OAAQ,CAA4B,CAAC,QAAQ,KAAK,QAAQ;QAC1D,OAAQ,CAAqC,CAAC,iBAAiB,KAAK,QAAQ,CAC7E,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,OAAO,6BAA6B,MAAM,MAAM,CAAC;AACnD,CAAC;AAED,MAAM,OAAO,GAAG,mBAAmB,CAAC;AAEpC;;;;GAIG;AACH,MAAM,2BAA2B,GAAG,6BAA6B,CAAC;AAElE;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,UAAU,cAAc,CAAC,KAA0B;IACvD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,WAAW,GAAG,IAAI,GAAG,EAAyB,CAAC;IACrD,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM;QAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACzD,MAAM,GAAG,GAAG,KAAK,CAAC,aAAa,IAAI,EAAE,CAAC;IACtC,MAAM,aAAa,GAAG,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;IAC3C,MAAM,QAAQ,GACZ,OAAO,aAAa,KAAK,UAAU;QACjC,CAAC,CAAC,aAAa;QACf,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAEpF,+DAA+D;IAC/D,gEAAgE;IAChE,8DAA8D;IAC9D,+DAA+D;IAC/D,oEAAoE;IACpE,0DAA0D;IAC1D,kEAAkE;IAClE,gDAAgD;IAChD,EAAE;IACF,uEAAuE;IACvE,qEAAqE;IACrE,uEAAuE;IACvE,sEAAsE;IACtE,wEAAwE;IACxE,kEAAkE;IAClE,oDAAoD;IACpD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC5C,MAAM,cAAc,GAAG,eAAe,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC;IACxE,MAAM,UAAU,GAAG,CAAC,QAAgB,EAAU,EAAE;QAC9C,MAAM,GAAG,GAAG,GAAG,cAAc,GAAG,SAAS,CAAC,IAAI,IAAI,CAAC;QACnD,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC7B,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IAEF,qEAAqE;IACrE,uEAAuE;IACvE,wEAAwE;IACxE,iEAAiE;IACjE,uEAAuE;IACvE,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEhD,mCAAmC;IACnC,IAAI,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,IAAY,EAAE,KAAa,EAAE,EAAE,CAC/E,aAAa,CACX,KAAK,EACL,IAAI,EACJ,KAAK,EACL,WAAW,EACX,GAAG,EACH,QAAQ,EACR,OAAO,EACP,UAAU,EACV,KAAK,CAAC,SAAS,IAAI,EAAE,EACrB,KAAK,CAAC,gBAAgB,IAAI,EAAE,CAC7B,CACF,CAAC;IAEF,gCAAgC;IAChC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE,CACtD,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC,CAC/E,CAAC;IAEF,kEAAkE;IAClE,iEAAiE;IACjE,qDAAqD;IACrD,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC7C,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QAC7B,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC/B,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAC/C,CAAC;IACD,MAAM,IAAI,GAA4B,EAAE,CAAC;IACzC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACzC,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACnC,IAAI,KAAK,IAAI,IAAI;YAAE,SAAS;QAC5B,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ;YAAE,SAAS;QAC/D,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,KAAK,IAAI;YAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;IAC7E,CAAC;IAED,oEAAoE;IACpE,kEAAkE;IAClE,iEAAiE;IACjE,mEAAmE;IACnE,oEAAoE;IACpE,oEAAoE;IACpE,iEAAiE;IACjE,MAAM,cAAc,GAAG,gBAAgB,CAAC;IACxC,MAAM,mBAAmB,GAAG,uBAAuB,CAAC;IACpD,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;IACtC,IAAI,WAAW,EAAE,CAAC;QAChB,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;YACtC,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC;gBAChE,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QACxD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjC,IAAI,KAAK,IAAI,IAAI;YAAE,OAAO,KAAK,KAAK,IAAI,CAAC;QACzC,mEAAmE;QACnE,mEAAmE;QACnE,yCAAyC;QACzC,IAAI,KAAK,IAAI,mBAAmB,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,mBAAmB,CAAC,KAA6C,CAAC,CAAC;YAChF,OAAO,CAAC,IAAI,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC;YAC5C,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;QACD,4DAA4D;QAC5D,2DAA2D;QAC3D,6DAA6D;QAC7D,+DAA+D;QAC/D,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACpE,OAAO,CAAC,IAAI,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,oEAAoE;IACpE,+DAA+D;IAC/D,uEAAuE;IACvE,8DAA8D;IAC9D,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE,CACjE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAC5D,CAAC;IAEF,mEAAmE;IACnE,6DAA6D;IAC7D,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAE7C,oEAAoE;IACpE,uEAAuE;IACvE,6DAA6D;IAC7D,IAAI,KAAK,GACP,SAAS,CAAC,IAAI,KAAK,CAAC;QAClB,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,QAAQ,CAAC,OAAO,CACd,IAAI,MAAM,CAAC,GAAG,cAAc,QAAQ,EAAE,GAAG,CAAC,EAC1C,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,CACnC,CAAC;IAER,+DAA+D;IAC/D,mEAAmE;IACnE,iEAAiE;IACjE,6DAA6D;IAC7D,KAAK,GAAG,qBAAqB,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAElE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;AAChD,CAAC;AAED,SAAS,aAAa,CACpB,KAAa,EACb,IAAY,EACZ,KAAa,EACb,MAAkC,EAClC,GAAsC,EACtC,QAAyB,EACzB,OAAiB,EACjB,UAAwC,EACxC,SAAoF,EACpF,YAA8C;IAE9C,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,iEAAiE;QACjE,oEAAoE;QACpE,iDAAiD;QACjD,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,KAAK;YAAE,OAAO,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;QAC3D,kEAAkE;QAClE,mEAAmE;QACnE,4CAA4C;QAC5C,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,IAAI,CAAC,2BAA2B,IAAI,WAAW,KAAK,EAAE,CAAC,CAAC;YAChE,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC;QAC3C,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QACjC,OAAO,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IAC3E,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC/B,OAAO,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC/B,OAAO,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IACtE,CAAC;IACD,kEAAkE;IAClE,yEAAyE;IACzE,yEAAyE;IACzE,sEAAsE;IACtE,sEAAsE;IACtE,0EAA0E;IAC1E,0EAA0E;IAC1E,qEAAqE;IACrE,yEAAyE;IACzE,iEAAiE;IACjE,8CAA8C;IAC9C,OAAO,wBAAwB,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;AACvE,CAAC;AAED;;;GAGG;AACH,SAAS,wBAAwB,CAC/B,IAAY,EACZ,KAAa,EACb,KAAoB,EACpB,GAAsC,EACtC,UAAwC;IAExC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;IACjE,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACvC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC;QACrB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,4BAA4B,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACtE,CAAC,CAAC,KAAK,CAAC;AACZ,CAAC;AAED;;;;;GAKG;AACH,SAAS,qBAAqB,CAAC,GAAY;IACzC,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IACrE,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1D,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACvD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9C,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,GAAa,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1E,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;wCAEwC;AACxC,SAAS,mBAAmB,CAAC,GAAY;IACvC,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IACxC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,OAAO,GAAG,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;IAC5E,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,cAAc,CACrB,IAAY,EACZ,KAAa,EACb,KAAoB,EACpB,GAAsC,EACtC,OAAiB,EACjB,UAAwC;IAExC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;IACjE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,OAAO,EAAE,KAAK,SAAS,EAAE,CAAC;YAChF,OAAO,CAAC,IAAI,CAAC,uBAAuB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;YAClD,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,uBAAuB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YACzD,SAAS;QACX,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,4BAA4B,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnF,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,cAAc,CACrB,KAAa,EACb,KAAsD,EACtD,UAAwC;IAExC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAChD,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;YAC3D,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,aAAa,OAAO,YAAY,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAClF,UAAU,CAAC,KAAK,CAAC,CAClB,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,cAAc,CACrB,IAAY,EACZ,KAAa,EACb,KAAoB,EACpB,GAAsC,EACtC,OAAiB,EACjB,UAAwC;IAExC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;IACjE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAClB,IACE,OAAO,EAAE,KAAK,QAAQ;YACtB,EAAE,KAAK,IAAI;YACX,OAAQ,EAA0B,CAAC,KAAK,KAAK,QAAQ;YACrD,OAAQ,EAAyB,CAAC,IAAI,KAAK,QAAQ,EACnD,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,uBAAuB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;YAClD,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,uBAAuB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YACzD,SAAS;QACX,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAqC,CAAC;QAC9D,KAAK,CAAC,IAAI,CACR,KAAK;aACF,OAAO,CAAC,sBAAsB,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;aACxD,OAAO,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAC1D,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,gBAAgB,CACvB,IAAY,EACZ,KAAoB,EACpB,GAAsC,EACtC,QAAyB,EACzB,OAAiB,EACjB,UAAwC;IAExC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;IACjE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC;YACrB,OAAO,CAAC,IAAI,CAAC,yBAAyB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;YACpD,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,yBAAyB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3D,SAAS;QACX,CAAC;QACD,MAAM,UAAU,GAAG,GAAG,IAAI,KAAK,CAAC,EAAE,CAAC;QACnC,MAAM,WAAW,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;QACzC,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,4DAA4D;YAC5D,2DAA2D;YAC3D,uDAAuD;YACvD,6DAA6D;YAC7D,+DAA+D;YAC/D,OAAO,CAAC,IAAI,CAAC,GAAG,2BAA2B,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;YAC7D,KAAK,CAAC,IAAI,CAAC,0BAA0B,IAAI,8CAA8C,CAAC,CAAC;YACzF,SAAS;QACX,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,gBAAgB,CACvB,KAAa,EACb,IAAY,EACZ,MAAkC,EAClC,GAAsC,EACtC,QAAyB,EACzB,OAAiB,EACjB,UAAwC;IAExC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC;QAC3C,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,iBAAiB,IAAI,2BAA2B,KAAK,CAAC,IAAI,EAAE,CAAC;QAC5E,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7D,sEAAsE;IACtE,uEAAuE;IACvE,wEAAwE;IACxE,gEAAgE;IAChE,wEAAwE;IACxE,4BAA4B;IAC5B,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IACjD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,IAAI,CAAC,wBAAwB,IAAI,EAAE,CAAC,CAAC;QAC7C,OAAO,OAAO,CAAC,wBAAwB,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC;IACD,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,mEAAmE;QACnE,OAAO,CAAC,IAAI,CAAC,GAAG,2BAA2B,IAAI,IAAI,EAAE,CAAC,CAAC;QACvD,OAAO,qBAAqB,IAAI,8CAA8C,CAAC;IACjF,CAAC;IACD,OAAO,UAAU,CAAC,WAAW,CAAC,CAAC;AACjC,CAAC"}
|
|
1
|
+
{"version":3,"file":"template-engine.js","sourceRoot":"","sources":["../src/template-engine.ts"],"names":[],"mappings":"AAAA,mCAAmC;AAEnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+EG;AAEH,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,0BAA0B,EAAwB,MAAM,cAAc,CAAC;AAChF,OAAO,EAAqB,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAkB,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,oEAAoE;AACpE,qEAAqE;AACrE,sEAAsE;AACtE,iEAAiE;AACjE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAU,EAAU,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAmB3F;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAY;IACjD,MAAM,MAAM,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAa,CAAC,CAAC,CAAC,GAAG,CAAC;IAC5E,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,CAAC;IACtC,MAAM,GAAG,GAAoB,EAAE,CAAC;IAChC,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;YAAE,SAAS;QAC1C,MAAM,CAAC,GAAG,CAA4B,CAAC;QACvC,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ;YAAE,SAAS;QACzC,GAAG,CAAC,IAAI,CAAC;YACP,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAoB;YACvE,GAAG,CAAC,CAAC,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1D,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnE,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7F,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,iEAAiE;YACjE,gEAAgE;YAChE,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAmB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1F,CAAC,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAmFD,kEAAkE;AAClE,oEAAoE;AACpE,qEAAqE;AACrE,gEAAgE;AAChE,iEAAiE;AACjE,mEAAmE;AACnE,uDAAuD;AACvD,MAAM,UAAU,GAAG,sCAAsC,CAAC;AAC1D,MAAM,YAAY,GAAG,wCAAwC,CAAC;AAC9D,uEAAuE;AACvE,2EAA2E;AAC3E,mEAAmE;AACnE,6CAA6C;AAC7C,MAAM,qBAAqB,GAAG,oCAAoC,CAAC;AACnE,MAAM,aAAa,GAAG,yBAAyB,CAAC;AAEhD,sEAAsE;AACtE,sEAAsE;AACtE,8CAA8C;AAC9C,MAAM,aAAa,GAAwB,IAAI,GAAG,CAAC,0BAA0B,CAAC,CAAC;AAE/E,sEAAsE;AACtE,gEAAgE;AAChE,oEAAoE;AACpE,+DAA+D;AAC/D,MAAM,uBAAuB,GAAG;IAC9B,cAAc,EAAE,MAAM;IACtB,mBAAmB,EAAE,UAAU;IAC/B,iBAAiB,EAAE,SAAS;IAC5B,sBAAsB,EAAE,aAAa;CAC7B,CAAC;AACX,MAAM,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAE3D,CAAC;AAEF,SAAS,WAAW,CAAC,CAAU;IAC7B,OAAO,CACL,OAAO,CAAC,KAAK,QAAQ;QACrB,CAAC,KAAK,IAAI;QACV,OAAQ,CAA4B,CAAC,QAAQ,KAAK,QAAQ;QAC1D,OAAQ,CAAqC,CAAC,iBAAiB,KAAK,QAAQ,CAC7E,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,OAAO,6BAA6B,MAAM,MAAM,CAAC;AACnD,CAAC;AAED,MAAM,OAAO,GAAG,mBAAmB,CAAC;AAEpC;;;;GAIG;AACH,MAAM,2BAA2B,GAAG,6BAA6B,CAAC;AAElE;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,cAAc,CAAC,KAA0B;IACvD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,WAAW,GAAG,IAAI,GAAG,EAAyB,CAAC;IACrD,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM;QAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACzD,MAAM,GAAG,GAAG,KAAK,CAAC,aAAa,IAAI,EAAE,CAAC;IACtC,MAAM,aAAa,GAAG,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;IAC3C,MAAM,QAAQ,GACZ,OAAO,aAAa,KAAK,UAAU;QACjC,CAAC,CAAC,aAAa;QACf,CAAC,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAE5F,+DAA+D;IAC/D,gEAAgE;IAChE,8DAA8D;IAC9D,+DAA+D;IAC/D,oEAAoE;IACpE,0DAA0D;IAC1D,kEAAkE;IAClE,gDAAgD;IAChD,EAAE;IACF,uEAAuE;IACvE,qEAAqE;IACrE,uEAAuE;IACvE,sEAAsE;IACtE,wEAAwE;IACxE,kEAAkE;IAClE,oDAAoD;IACpD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC5C,MAAM,cAAc,GAAG,eAAe,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC;IACxE,MAAM,UAAU,GAAG,CAAC,QAAgB,EAAU,EAAE;QAC9C,MAAM,GAAG,GAAG,GAAG,cAAc,GAAG,SAAS,CAAC,IAAI,IAAI,CAAC;QACnD,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC7B,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;IAEF,qEAAqE;IACrE,uEAAuE;IACvE,wEAAwE;IACxE,iEAAiE;IACjE,uEAAuE;IACvE,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAEhD,gEAAgE;IAChE,oDAAoD;IACpD,IAAI,IAAI,GAAG,cAAc,CAAC,UAAU,EAAE;QACpC,MAAM,EAAE,WAAW;QACnB,MAAM,EAAE,GAAG;QACX,QAAQ;QACR,OAAO;QACP,UAAU;QACV,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,MAAM,EAAE,KAAK,CAAC,UAAU,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE;QACvD,eAAe,EAAE,IAAI,GAAG,CAAC,gBAAgB,CAAC;QAC1C,gBAAgB,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAChC,gBAAgB,CAAC,IAAI,EAAE,KAAsB,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC;KACrF,CAAC,CAAC;IAEH,gCAAgC;IAChC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE,CACtD,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC,CAC/E,CAAC;IAEF,kEAAkE;IAClE,iEAAiE;IACjE,qDAAqD;IACrD,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC7C,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QAC7B,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC/B,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAC/C,CAAC;IACD,MAAM,IAAI,GAA4B,EAAE,CAAC;IACzC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACzC,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACnC,IAAI,KAAK,IAAI,IAAI;YAAE,SAAS;QAC5B,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ;YAAE,SAAS;QAC/D,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,KAAK,IAAI;YAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC;IAC7E,CAAC;IAED,oEAAoE;IACpE,kEAAkE;IAClE,iEAAiE;IACjE,mEAAmE;IACnE,oEAAoE;IACpE,oEAAoE;IACpE,iEAAiE;IACjE,MAAM,cAAc,GAAG,gBAAgB,CAAC;IACxC,MAAM,mBAAmB,GAAG,uBAAuB,CAAC;IACpD,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;IACtC,IAAI,WAAW,EAAE,CAAC;QAChB,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;YACtC,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC;gBAChE,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QACxD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjC,IAAI,KAAK,IAAI,IAAI;YAAE,OAAO,KAAK,KAAK,IAAI,CAAC;QACzC,mEAAmE;QACnE,mEAAmE;QACnE,yCAAyC;QACzC,IAAI,KAAK,IAAI,mBAAmB,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,mBAAmB,CAAC,KAA6C,CAAC,CAAC;YAChF,OAAO,CAAC,IAAI,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC;YAC5C,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;QACD,4DAA4D;QAC5D,2DAA2D;QAC3D,6DAA6D;QAC7D,+DAA+D;QAC/D,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACpE,OAAO,CAAC,IAAI,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,oEAAoE;IACpE,+DAA+D;IAC/D,uEAAuE;IACvE,8DAA8D;IAC9D,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE,CACjE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAC5D,CAAC;IAEF,mEAAmE;IACnE,6DAA6D;IAC7D,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAE7C,oEAAoE;IACpE,uEAAuE;IACvE,6DAA6D;IAC7D,IAAI,KAAK,GACP,SAAS,CAAC,IAAI,KAAK,CAAC;QAClB,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,QAAQ,CAAC,OAAO,CACd,IAAI,MAAM,CAAC,GAAG,cAAc,QAAQ,EAAE,GAAG,CAAC,EAC1C,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,CACnC,CAAC;IAER,+DAA+D;IAC/D,mEAAmE;IACnE,iEAAiE;IACjE,6DAA6D;IAC7D,KAAK,GAAG,qBAAqB,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAElE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;AAChD,CAAC;AAED,SAAS,gBAAgB,CACvB,IAAY,EACZ,KAAoB,EACpB,GAAsC,EACtC,QAAyB,EACzB,OAAiB,EACjB,UAAwC;IAExC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;IACjE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC;YACrB,OAAO,CAAC,IAAI,CAAC,yBAAyB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;YACpD,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,yBAAyB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3D,SAAS;QACX,CAAC;QACD,MAAM,UAAU,GAAG,GAAG,IAAI,KAAK,CAAC,EAAE,CAAC;QACnC,MAAM,WAAW,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;QACzC,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,4DAA4D;YAC5D,2DAA2D;YAC3D,uDAAuD;YACvD,6DAA6D;YAC7D,+DAA+D;YAC/D,OAAO,CAAC,IAAI,CAAC,GAAG,2BAA2B,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;YAC7D,KAAK,CAAC,IAAI,CAAC,0BAA0B,IAAI,8CAA8C,CAAC,CAAC;YACzF,SAAS;QACX,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,gBAAgB,CACvB,KAAa,EACb,IAAY,EACZ,MAAkC,EAClC,GAAsC,EACtC,QAAyB,EACzB,OAAiB,EACjB,UAAwC;IAExC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC;QAC3C,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,iBAAiB,IAAI,2BAA2B,KAAK,CAAC,IAAI,EAAE,CAAC;QAC5E,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACrB,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7D,sEAAsE;IACtE,kEAAkE;IAClE,wEAAwE;IACxE,gEAAgE;IAChE,wEAAwE;IACxE,4BAA4B;IAC5B,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IACjD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,IAAI,CAAC,wBAAwB,IAAI,EAAE,CAAC,CAAC;QAC7C,OAAO,OAAO,CAAC,wBAAwB,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC;IACD,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,mEAAmE;QACnE,OAAO,CAAC,IAAI,CAAC,GAAG,2BAA2B,IAAI,IAAI,EAAE,CAAC,CAAC;QACvD,OAAO,qBAAqB,IAAI,8CAA8C,CAAC;IACjF,CAAC;IACD,OAAO,UAAU,CAAC,WAAW,CAAC,CAAC;AACjC,CAAC"}
|