@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.
Files changed (202) hide show
  1. package/dist/ai-tools.d.ts +125 -50
  2. package/dist/ai-tools.d.ts.map +1 -1
  3. package/dist/ai-tools.js +50 -38
  4. package/dist/ai-tools.js.map +1 -1
  5. package/dist/build-page.d.ts +110 -30
  6. package/dist/build-page.d.ts.map +1 -1
  7. package/dist/build-page.js +26 -7
  8. package/dist/build-page.js.map +1 -1
  9. package/dist/content.d.ts +203 -102
  10. package/dist/content.d.ts.map +1 -1
  11. package/dist/content.js +178 -76
  12. package/dist/content.js.map +1 -1
  13. package/dist/css-var-aliases.d.ts +20 -0
  14. package/dist/css-var-aliases.d.ts.map +1 -0
  15. package/dist/css-var-aliases.js +95 -0
  16. package/dist/css-var-aliases.js.map +1 -0
  17. package/dist/css-var-scan.d.ts +0 -16
  18. package/dist/css-var-scan.d.ts.map +1 -1
  19. package/dist/css-var-scan.js +24 -0
  20. package/dist/css-var-scan.js.map +1 -1
  21. package/dist/edit-markers.d.ts +41 -5
  22. package/dist/edit-markers.d.ts.map +1 -1
  23. package/dist/edit-markers.js +47 -50
  24. package/dist/edit-markers.js.map +1 -1
  25. package/dist/id-safe-truncate.d.ts +15 -0
  26. package/dist/id-safe-truncate.d.ts.map +1 -0
  27. package/dist/id-safe-truncate.js +47 -0
  28. package/dist/id-safe-truncate.js.map +1 -0
  29. package/dist/index.d.ts +5 -1
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +5 -1
  32. package/dist/index.js.map +1 -1
  33. package/dist/interactions.js +2 -2
  34. package/dist/interactions.js.map +1 -1
  35. package/dist/link-canonicalise.d.ts.map +1 -1
  36. package/dist/link-canonicalise.js +7 -1
  37. package/dist/link-canonicalise.js.map +1 -1
  38. package/dist/link-refs.d.ts +1 -1
  39. package/dist/link-refs.js +3 -3
  40. package/dist/lists/address.d.ts +34 -0
  41. package/dist/lists/address.d.ts.map +1 -0
  42. package/dist/lists/address.js +43 -0
  43. package/dist/lists/address.js.map +1 -0
  44. package/dist/lists/default-types.d.ts +10 -0
  45. package/dist/lists/default-types.d.ts.map +1 -0
  46. package/dist/lists/default-types.js +91 -0
  47. package/dist/lists/default-types.js.map +1 -0
  48. package/dist/lists/fields.d.ts +152 -0
  49. package/dist/lists/fields.d.ts.map +1 -0
  50. package/dist/lists/fields.js +258 -0
  51. package/dist/lists/fields.js.map +1 -0
  52. package/dist/lists/index.d.ts +14 -0
  53. package/dist/lists/index.d.ts.map +1 -0
  54. package/dist/lists/index.js +15 -0
  55. package/dist/lists/index.js.map +1 -0
  56. package/dist/lists/item-attr.d.ts +26 -0
  57. package/dist/lists/item-attr.d.ts.map +1 -0
  58. package/dist/lists/item-attr.js +31 -0
  59. package/dist/lists/item-attr.js.map +1 -0
  60. package/dist/lists/items.d.ts +105 -0
  61. package/dist/lists/items.d.ts.map +1 -0
  62. package/dist/lists/items.js +304 -0
  63. package/dist/lists/items.js.map +1 -0
  64. package/dist/lists/list-type.d.ts +401 -0
  65. package/dist/lists/list-type.d.ts.map +1 -0
  66. package/dist/lists/list-type.js +275 -0
  67. package/dist/lists/list-type.js.map +1 -0
  68. package/dist/lists/model.d.ts +14 -0
  69. package/dist/lists/model.d.ts.map +1 -0
  70. package/dist/lists/model.js +15 -0
  71. package/dist/lists/model.js.map +1 -0
  72. package/dist/lists/page-type.d.ts +115 -0
  73. package/dist/lists/page-type.d.ts.map +1 -0
  74. package/dist/lists/page-type.js +66 -0
  75. package/dist/lists/page-type.js.map +1 -0
  76. package/dist/lists/refs.d.ts +13 -0
  77. package/dist/lists/refs.d.ts.map +1 -0
  78. package/dist/lists/refs.js +18 -0
  79. package/dist/lists/refs.js.map +1 -0
  80. package/dist/lists/render-data.d.ts +114 -0
  81. package/dist/lists/render-data.d.ts.map +1 -0
  82. package/dist/lists/render-data.js +3 -0
  83. package/dist/lists/render-data.js.map +1 -0
  84. package/dist/lists/render-deps.d.ts +68 -0
  85. package/dist/lists/render-deps.d.ts.map +1 -0
  86. package/dist/lists/render-deps.js +91 -0
  87. package/dist/lists/render-deps.js.map +1 -0
  88. package/dist/lists/resolve-values.d.ts +63 -0
  89. package/dist/lists/resolve-values.d.ts.map +1 -0
  90. package/dist/lists/resolve-values.js +181 -0
  91. package/dist/lists/resolve-values.js.map +1 -0
  92. package/dist/lists/resolve.d.ts +106 -0
  93. package/dist/lists/resolve.d.ts.map +1 -0
  94. package/dist/lists/resolve.js +878 -0
  95. package/dist/lists/resolve.js.map +1 -0
  96. package/dist/lists/scope.d.ts +81 -0
  97. package/dist/lists/scope.d.ts.map +1 -0
  98. package/dist/lists/scope.js +3 -0
  99. package/dist/lists/scope.js.map +1 -0
  100. package/dist/markup-structure.d.ts +8 -0
  101. package/dist/markup-structure.d.ts.map +1 -1
  102. package/dist/markup-structure.js +2 -0
  103. package/dist/markup-structure.js.map +1 -1
  104. package/dist/media.d.ts +1 -1
  105. package/dist/nested-module-render.d.ts +25 -20
  106. package/dist/nested-module-render.d.ts.map +1 -1
  107. package/dist/nested-module-render.js +122 -31
  108. package/dist/nested-module-render.js.map +1 -1
  109. package/dist/page-log.d.ts +1 -1
  110. package/dist/preview-compose.d.ts +24 -21
  111. package/dist/preview-compose.d.ts.map +1 -1
  112. package/dist/preview-compose.js +34 -118
  113. package/dist/preview-compose.js.map +1 -1
  114. package/dist/preview-scanner.d.ts +5 -2
  115. package/dist/preview-scanner.d.ts.map +1 -1
  116. package/dist/preview-scanner.js +5 -3
  117. package/dist/preview-scanner.js.map +1 -1
  118. package/dist/source-text-transport.d.ts +17 -0
  119. package/dist/source-text-transport.d.ts.map +1 -0
  120. package/dist/source-text-transport.js +71 -0
  121. package/dist/source-text-transport.js.map +1 -0
  122. package/dist/template-engine.d.ts +44 -31
  123. package/dist/template-engine.d.ts.map +1 -1
  124. package/dist/template-engine.js +75 -174
  125. package/dist/template-engine.js.map +1 -1
  126. package/dist/template-sections.d.ts +69 -0
  127. package/dist/template-sections.d.ts.map +1 -0
  128. package/dist/template-sections.js +423 -0
  129. package/dist/template-sections.js.map +1 -0
  130. package/dist/uuid-diagnose.d.ts +9 -0
  131. package/dist/uuid-diagnose.d.ts.map +1 -0
  132. package/dist/uuid-diagnose.js +47 -0
  133. package/dist/uuid-diagnose.js.map +1 -0
  134. package/dist/version.d.ts +2 -2
  135. package/dist/version.d.ts.map +1 -1
  136. package/dist/version.js +1 -1
  137. package/dist/version.js.map +1 -1
  138. package/package.json +8 -1
  139. package/src/__tests__/redos-hardening.test.ts +50 -16
  140. package/src/ai-tools-add-module-modes.test.ts +50 -0
  141. package/src/ai-tools.test.ts +10 -0
  142. package/src/ai-tools.ts +53 -39
  143. package/src/build-page.test.ts +34 -3
  144. package/src/build-page.ts +29 -6
  145. package/src/content.test.ts +111 -3
  146. package/src/content.ts +188 -77
  147. package/src/css-var-aliases.test.ts +61 -0
  148. package/src/css-var-aliases.ts +109 -0
  149. package/src/css-var-scan.ts +9 -0
  150. package/src/edit-markers.test.ts +37 -21
  151. package/src/edit-markers.ts +52 -20
  152. package/src/id-safe-truncate.test.ts +35 -0
  153. package/src/id-safe-truncate.ts +46 -0
  154. package/src/index.ts +5 -1
  155. package/src/interactions.ts +2 -2
  156. package/src/link-canonicalise.test.ts +36 -6
  157. package/src/link-canonicalise.ts +6 -1
  158. package/src/link-refs.test.ts +66 -42
  159. package/src/link-refs.ts +3 -3
  160. package/src/lists/address.ts +75 -0
  161. package/src/lists/default-types.ts +102 -0
  162. package/src/lists/fields.ts +285 -0
  163. package/src/lists/index.ts +16 -0
  164. package/src/lists/item-attr.test.ts +36 -0
  165. package/src/lists/item-attr.ts +49 -0
  166. package/src/lists/items.ts +402 -0
  167. package/src/lists/list-fixtures.test.ts +302 -0
  168. package/src/lists/list-type.ts +306 -0
  169. package/src/lists/lists.test.ts +328 -0
  170. package/src/lists/model.ts +16 -0
  171. package/src/lists/page-type.ts +71 -0
  172. package/src/lists/refs.ts +21 -0
  173. package/src/lists/render-data.ts +125 -0
  174. package/src/lists/render-deps.test.ts +132 -0
  175. package/src/lists/render-deps.ts +144 -0
  176. package/src/lists/resolve-values.ts +224 -0
  177. package/src/lists/resolve.test.ts +295 -0
  178. package/src/lists/resolve.ts +1148 -0
  179. package/src/lists/scope.ts +69 -0
  180. package/src/lists-compose-parity.test.ts +262 -0
  181. package/src/markup-structure.ts +10 -0
  182. package/src/nested-module-render.test.ts +111 -77
  183. package/src/nested-module-render.ts +85 -48
  184. package/src/preview-compose.test.ts +74 -19
  185. package/src/preview-compose.ts +59 -154
  186. package/src/preview-scanner.test.ts +8 -4
  187. package/src/preview-scanner.ts +5 -3
  188. package/src/source-text-transport.test.ts +63 -0
  189. package/src/source-text-transport.ts +70 -0
  190. package/src/template-engine-lists.test.ts +553 -0
  191. package/src/template-engine.test.ts +62 -80
  192. package/src/template-engine.ts +102 -245
  193. package/src/template-sections.ts +500 -0
  194. package/src/uuid-diagnose.test.ts +28 -0
  195. package/src/uuid-diagnose.ts +50 -0
  196. package/src/version.ts +1 -1
  197. package/dist/structured-sets.d.ts +0 -70
  198. package/dist/structured-sets.d.ts.map +0 -1
  199. package/dist/structured-sets.js +0 -92
  200. package/dist/structured-sets.js.map +0 -1
  201. package/src/structured-sets.ts +0 -114
  202. package/src/template-engine-data-lists.test.ts +0 -90
@@ -0,0 +1,423 @@
1
+ // SPDX-License-Identifier: MPL-2.0
2
+ // `\s*` around the sigil is split by the mandatory sigil character, and
3
+ // the name ends on a word character, so no two quantifiers compete for
4
+ // the same input (linear matching).
5
+ const TAG_RE = /\{\{\s*([#^/>]\s*)?([a-zA-Z][a-zA-Z0-9_]*(?:\.[a-zA-Z0-9_]+)*)\s*\}\}/g;
6
+ const SECTION_NAME_RE = /^[a-z][a-z0-9_]*(?:\.[a-z0-9_]+)*$/;
7
+ const DOT_RE = /\{\{\s*\.\s*\}\}/g;
8
+ function tokenize(html) {
9
+ const out = [];
10
+ TAG_RE.lastIndex = 0;
11
+ for (let m = TAG_RE.exec(html); m !== null; m = TAG_RE.exec(html)) {
12
+ out.push({
13
+ start: m.index,
14
+ end: m.index + m[0].length,
15
+ sigil: (m[1] ?? "").trim(),
16
+ name: m[2],
17
+ });
18
+ }
19
+ return out;
20
+ }
21
+ /**
22
+ * Pair every section open with its close: one stack per name, so a name
23
+ * nests inside itself and an unclosed open simply stays unpaired (the
24
+ * later Mustache pass reports it, as before).
25
+ */
26
+ function matchSections(tokens) {
27
+ const pairs = new Map();
28
+ const stacks = new Map();
29
+ tokens.forEach((t, i) => {
30
+ if (!SECTION_NAME_RE.test(t.name))
31
+ return;
32
+ if (t.sigil === "#" || t.sigil === "^") {
33
+ const s = stacks.get(t.name) ?? [];
34
+ s.push(i);
35
+ stacks.set(t.name, s);
36
+ }
37
+ else if (t.sigil === "/") {
38
+ const open = stacks.get(t.name)?.pop();
39
+ if (open !== undefined)
40
+ pairs.set(open, i);
41
+ }
42
+ });
43
+ return pairs;
44
+ }
45
+ /**
46
+ * Run the section pass over `html`. Returns the HTML with every matched
47
+ * section rendered and every tag inside list entries resolved.
48
+ */
49
+ export function renderSections(html, env) {
50
+ const tokens = tokenize(html);
51
+ if (tokens.length === 0)
52
+ return html;
53
+ const pairs = matchSections(tokens);
54
+ if (pairs.size === 0 && !tokens.some((t) => t.name.includes(".")))
55
+ return html;
56
+ const r = new SectionRenderer(html, tokens, pairs, env);
57
+ return r.range(0, tokens.length, 0, html.length, { chain: [], dot: null });
58
+ }
59
+ class SectionRenderer {
60
+ html;
61
+ tokens;
62
+ pairs;
63
+ env;
64
+ constructor(html, tokens, pairs, env) {
65
+ this.html = html;
66
+ this.tokens = tokens;
67
+ this.pairs = pairs;
68
+ this.env = env;
69
+ }
70
+ /** Render tokens [from, to) covering text [textFrom, textTo). */
71
+ range(from, to, textFrom, textTo, st) {
72
+ let out = "";
73
+ let cursor = textFrom;
74
+ let i = from;
75
+ while (i < to) {
76
+ const t = this.tokens[i];
77
+ out += this.text(cursor, t.start, st);
78
+ const close = this.pairs.get(i);
79
+ if ((t.sigil === "#" || t.sigil === "^") && close !== undefined && close < to) {
80
+ const c = this.tokens[close];
81
+ const block = { from: i + 1, to: close, textFrom: t.end, textTo: c.start };
82
+ out += this.section(t, block, this.html.slice(t.start, c.end), st);
83
+ cursor = c.end;
84
+ i = close + 1;
85
+ continue;
86
+ }
87
+ out += this.tag(t, st);
88
+ cursor = t.end;
89
+ i += 1;
90
+ }
91
+ return out + this.text(cursor, textTo, st);
92
+ }
93
+ text(from, to, st) {
94
+ const s = this.html.slice(from, to);
95
+ if (st.dot === null || s.length === 0)
96
+ return s;
97
+ const dot = st.dot;
98
+ return s.replace(DOT_RE, () => this.env.mkSentinel(dot));
99
+ }
100
+ raw(source, marker) {
101
+ if (marker !== null)
102
+ this.env.missing.push(marker);
103
+ return this.env.mkSentinel(source);
104
+ }
105
+ /** The module field a list entry's markers name: the outermost iterated field. */
106
+ listField(st) {
107
+ return st.chain[0]?.name ?? "";
108
+ }
109
+ // ── Lookups ──
110
+ /**
111
+ * Look `name` (possibly dotted) up in the entry chain, innermost
112
+ * first, then `page`. `undefined` = not an entry key (a module-level
113
+ * name, or unknown); `{ missing }` = the head exists but a dotted part
114
+ * does not.
115
+ */
116
+ lookup(name, st) {
117
+ const parts = name.split(".");
118
+ const head = parts[0].toLowerCase();
119
+ let v;
120
+ if (head === "page") {
121
+ v = this.env.lists?.pageScope() ?? undefined;
122
+ if (v === undefined)
123
+ return parts.length > 1 || st.chain.length > 0 ? { missing: true } : undefined;
124
+ }
125
+ else {
126
+ for (let k = st.chain.length - 1; k >= 0 && v === undefined; k -= 1) {
127
+ v = st.chain[k]?.entry.get(head);
128
+ }
129
+ if (v === undefined)
130
+ return undefined;
131
+ }
132
+ for (const p of parts.slice(1)) {
133
+ if (v.kind !== "record")
134
+ return { missing: true };
135
+ const next = v.get(p.toLowerCase());
136
+ if (next === undefined)
137
+ return { missing: true };
138
+ v = next;
139
+ }
140
+ return v;
141
+ }
142
+ isModuleLevel(name) {
143
+ const lower = name.toLowerCase();
144
+ return (this.env.fields.has(name) || this.env.fields.has(lower) || this.env.moduleLevelKeys.has(lower));
145
+ }
146
+ notDeclared(name, st) {
147
+ const field = this.listField(st);
148
+ return field.length > 0 ? `field-not-declared:${field}.${name}` : `field-not-declared:${name}`;
149
+ }
150
+ // ── Plain tags ──
151
+ tag(t, st) {
152
+ const source = this.html.slice(t.start, t.end);
153
+ if (t.sigil === ">")
154
+ return this.partial(t, source, st);
155
+ if (t.sigil !== "")
156
+ return source;
157
+ if (st.dot !== null && t.name === "item" && st.chain.length === 0) {
158
+ return this.env.mkSentinel(st.dot);
159
+ }
160
+ const dotted = t.name.includes(".");
161
+ if (st.chain.length === 0 && !dotted)
162
+ return source;
163
+ const v = this.lookup(t.name, st);
164
+ if (v === undefined) {
165
+ if (dotted) {
166
+ const head = t.name.slice(0, t.name.indexOf("."));
167
+ if (st.chain.length === 0 && !this.isModuleLevel(head))
168
+ return source;
169
+ return this.raw(source, this.notDeclared(t.name, st));
170
+ }
171
+ if (this.isModuleLevel(t.name))
172
+ return source;
173
+ return this.raw(source, this.notDeclared(t.name, st));
174
+ }
175
+ if ("missing" in v) {
176
+ const marker = t.name.split(".")[0]?.toLowerCase() === "page" && this.env.lists === undefined
177
+ ? "list-context-unavailable:page"
178
+ : this.notDeclared(t.name, st);
179
+ return this.raw(source, marker);
180
+ }
181
+ return this.valueText(v, source, t.name, st);
182
+ }
183
+ valueText(v, source, name, st) {
184
+ switch (v.kind) {
185
+ case "text":
186
+ return v.text.length === 0 ? "" : this.env.mkSentinel(v.text);
187
+ case "bool":
188
+ return String(v.value);
189
+ case "record":
190
+ if (v.text === null)
191
+ return this.raw(source, this.notDeclared(name, st));
192
+ return v.text.length === 0 ? "" : this.env.mkSentinel(v.text);
193
+ case "failed":
194
+ return this.raw(source, v.marker);
195
+ default:
196
+ return this.raw(source, this.notDeclared(name, st));
197
+ }
198
+ }
199
+ // ── Partials ──
200
+ partial(t, source, st) {
201
+ if (st.chain.length === 0)
202
+ return source;
203
+ if (t.name === "recurse")
204
+ return this.recurse(st);
205
+ const v = this.lookup(t.name, st);
206
+ if (v === undefined) {
207
+ return this.isModuleLevel(t.name) ? source : this.raw(source, this.notDeclared(t.name, st));
208
+ }
209
+ if ("missing" in v)
210
+ return this.raw(source, this.notDeclared(t.name, st));
211
+ if (v.kind === "module") {
212
+ const frame = st.chain[st.chain.length - 1];
213
+ const field = this.listField(st);
214
+ const key = `list:${field}/${frame.entry.id}/${t.name}`;
215
+ const html = this.env.partials(key, v.ref);
216
+ if (html === undefined) {
217
+ this.env.missing.push(`nested-renderer-unavailable:${field}[${frame.entry.id}].${t.name}`);
218
+ return `<!-- caelo:module ${field}[${frame.entry.id}].${t.name} needs recursive renderer (compose path) -->`;
219
+ }
220
+ return this.env.mkSentinel(html);
221
+ }
222
+ if (v.kind === "text" && v.text.length === 0)
223
+ return "";
224
+ if (v.kind === "failed")
225
+ return this.raw(source, v.marker);
226
+ const reason = `kind-mismatch:${this.listField(st)}.${t.name} expected=module actual=${v.kind}`;
227
+ this.env.missing.push(reason);
228
+ return `<!-- caelo:missing reason=${reason} -->`;
229
+ }
230
+ /** `{{>recurse}}`: the current entry's children with the enclosing section's block. */
231
+ recurse(st) {
232
+ const frame = st.chain[st.chain.length - 1];
233
+ const key = frame.entry.childrenKey;
234
+ if (key === null)
235
+ return "";
236
+ const kids = frame.entry.get(key);
237
+ if (kids?.kind !== "list")
238
+ return "";
239
+ return this.iterate(kids.entries, frame.name, frame.block, st);
240
+ }
241
+ // ── Sections ──
242
+ section(t, block, source, st) {
243
+ const inverted = t.sigil === "^";
244
+ const v = this.lookup(t.name, st);
245
+ if (v !== undefined) {
246
+ if ("missing" in v) {
247
+ const marker = t.name.split(".")[0] === "page" && this.env.lists === undefined
248
+ ? "list-context-unavailable:page"
249
+ : this.notDeclared(t.name, st);
250
+ return this.raw(source, marker);
251
+ }
252
+ return this.scopeSection(v, t.name, inverted, block, source, st);
253
+ }
254
+ if (t.name.includes("."))
255
+ return this.raw(source, this.notDeclared(t.name, st));
256
+ return this.moduleSection(t.name, inverted, block, source, st);
257
+ }
258
+ /** A section over a value found in the entry chain or `page`. */
259
+ scopeSection(v, name, inverted, block, source, st) {
260
+ if (v.kind === "failed")
261
+ return this.raw(source, v.marker);
262
+ if (v.kind === "list") {
263
+ if (inverted)
264
+ return v.entries.length === 0 ? this.body(block, st, null) : "";
265
+ return this.iterate(v.entries, name, block, st);
266
+ }
267
+ const present = v.kind === "bool"
268
+ ? v.value
269
+ : v.kind === "text"
270
+ ? v.text.trim().length > 0
271
+ : v.kind === "record"
272
+ ? v.present
273
+ : true;
274
+ return present !== inverted ? this.body(block, st, st.dot) : "";
275
+ }
276
+ /** A section over a module field (or an undeclared plugin source name). */
277
+ moduleSection(name, inverted, block, source, st) {
278
+ const env = this.env;
279
+ const field = env.fields.get(name);
280
+ if (!field) {
281
+ // No declared field — a plugin may still offer this name as a list
282
+ // source. Module fields are looked up FIRST, so a plugin can never
283
+ // shadow something the module's author declared.
284
+ const plugin = env.lists?.pluginSource(name) ?? null;
285
+ if (plugin !== null) {
286
+ if (!plugin.ok)
287
+ return this.raw(source, plugin.marker);
288
+ if (inverted)
289
+ return plugin.entries.length === 0 ? this.body(block, st, null) : "";
290
+ return this.iterate(plugin.entries, name, block, st);
291
+ }
292
+ return this.raw(source, this.notDeclared(name, st));
293
+ }
294
+ const raw = Object.hasOwn(env.values, name) ? env.values[name] : field.default;
295
+ if (field.kind === "module-list") {
296
+ if (inverted)
297
+ return Array.isArray(raw) && raw.length > 0 ? "" : this.body(block, st, null);
298
+ return env.renderModuleList(name, field);
299
+ }
300
+ if (field.kind === "list") {
301
+ if (!env.lists)
302
+ return this.raw(source, `list-context-unavailable:${name}`);
303
+ const spec = {
304
+ name: field.name,
305
+ listType: field.listType ?? "",
306
+ ...(field.bind !== undefined ? { bind: field.bind } : {}),
307
+ ...(field.list !== undefined ? { list: field.list } : {}),
308
+ ...(field.source !== undefined ? { source: field.source } : {}),
309
+ ...(field.default !== undefined ? { default: field.default } : {}),
310
+ };
311
+ const value = Object.hasOwn(env.values, name) ? env.values[name] : undefined;
312
+ const res = env.lists.resolveField(spec, value, env.holder);
313
+ if (!res.ok)
314
+ return this.raw(source, res.marker);
315
+ if (inverted)
316
+ return res.entries.length === 0 ? this.body(block, st, null) : "";
317
+ return this.iterate(res.entries, name, block, st);
318
+ }
319
+ // Any other field used as a section is a CONDITIONAL (Mustache
320
+ // semantics): the block once when the field has a present, non-empty
321
+ // value, dropped when empty — never a kind-mismatch, which used to
322
+ // silently drop real scalar content. `{{.}}` / `{{item}}` inside it
323
+ // read the scalar. An empty conditional is intentional, not missing.
324
+ const present = isPresentSectionValue(raw);
325
+ if (present === inverted)
326
+ return "";
327
+ const dot = present ? scalarSectionString(raw) : "";
328
+ return this.body(block, st, dot.length > 0 ? dot : st.dot);
329
+ }
330
+ body(block, st, dot) {
331
+ return this.range(block.from, block.to, block.textFrom, block.textTo, { chain: st.chain, dot });
332
+ }
333
+ iterate(entries, name, block, st) {
334
+ // The empty-restoring sentinel in front claims the iteration's first
335
+ // element for its own entries: an enclosing entry whose block starts
336
+ // with this iteration (`{{#items}}<p>…`) must not stamp a GENERATED
337
+ // entry's element as its own root.
338
+ let out = entries.length > 0 ? this.env.mkSentinel("") : "";
339
+ for (const entry of entries) {
340
+ const chain = [...st.chain, { entry, block, name }];
341
+ const rendered = this.range(block.from, block.to, block.textFrom, block.textTo, {
342
+ chain,
343
+ dot: null,
344
+ });
345
+ out += entry.itemAttr === null ? rendered : stampListItem(rendered, entry.itemAttr);
346
+ }
347
+ return out;
348
+ }
349
+ }
350
+ /**
351
+ * Mustache-style truthiness for a conditional section value. Empty string,
352
+ * null/undefined, `false`, and an empty array/object are absent; everything
353
+ * else (incl. a numeric 0 — a real content value, not a control flag) is
354
+ * present.
355
+ */
356
+ export function isPresentSectionValue(raw) {
357
+ if (raw === undefined || raw === null || raw === false)
358
+ return false;
359
+ if (typeof raw === "string")
360
+ return raw.trim().length > 0;
361
+ if (typeof raw === "number")
362
+ return !Number.isNaN(raw);
363
+ if (Array.isArray(raw))
364
+ return raw.length > 0;
365
+ if (typeof raw === "object")
366
+ return Object.keys(raw).length > 0;
367
+ return true;
368
+ }
369
+ /** String form for `{{.}}`/`{{item}}` inside a scalar conditional; objects stringify to "". */
370
+ function scalarSectionString(raw) {
371
+ if (typeof raw === "string")
372
+ return raw;
373
+ if (typeof raw === "number" || typeof raw === "boolean")
374
+ return String(raw);
375
+ return "";
376
+ }
377
+ /** The attribute a rendered list entry's root element carries (`docs/lists.md` §13). */
378
+ export const LIST_ITEM_ATTRIBUTE = "data-caelo-list-item";
379
+ /**
380
+ * Stamp `data-caelo-list-item` on a rendered entry's root element: the
381
+ * first opening tag, when the entry's markup STARTS with one (leading
382
+ * whitespace and comments allowed). An entry that starts with text
383
+ * (`{{name}}, `) has no root element and stays unstamped, rather than
384
+ * attributing the entry to some inner `<b>`. Idempotent.
385
+ */
386
+ export function stampListItem(html, attr) {
387
+ let i = 0;
388
+ for (;;) {
389
+ while (i < html.length && /\s/.test(html[i]))
390
+ i += 1;
391
+ if (html.startsWith("<!--", i)) {
392
+ const end = html.indexOf("-->", i + 4);
393
+ if (end < 0)
394
+ return html;
395
+ i = end + 3;
396
+ continue;
397
+ }
398
+ break;
399
+ }
400
+ if (html[i] !== "<" || !/[a-zA-Z]/.test(html[i + 1] ?? ""))
401
+ return html;
402
+ let quote = null;
403
+ let j = i + 1;
404
+ for (; j < html.length; j += 1) {
405
+ const c = html[j];
406
+ if (quote) {
407
+ if (c === quote)
408
+ quote = null;
409
+ }
410
+ else if (c === '"' || c === "'")
411
+ quote = c;
412
+ else if (c === ">")
413
+ break;
414
+ }
415
+ if (j >= html.length)
416
+ return html;
417
+ const tag = html.slice(i, j);
418
+ if (tag.includes(`${LIST_ITEM_ATTRIBUTE}=`))
419
+ return html;
420
+ const insertAt = tag.endsWith("/") ? j - 1 : j;
421
+ return `${html.slice(0, insertAt)} ${LIST_ITEM_ATTRIBUTE}="${attr.replace(/"/g, "&quot;")}"${html.slice(insertAt)}`;
422
+ }
423
+ //# sourceMappingURL=template-sections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-sections.js","sourceRoot":"","sources":["../src/template-sections.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /** The next step every malformed-id message ends with. */
2
+ export declare const COPY_ID_EXACTLY_HINT = "Copy the id character for character from the tool result that returned it; never retype, shorten or complete an id from memory \u2014 if it is no longer in view, call the list_/get_ tool again.";
3
+ /**
4
+ * What is wrong with `value` as a UUID, e.g.
5
+ * `"c9c7ddcb-cc85-4747-84f-90967da6f769" is not a UUID: group 4 has 3 characters (expected 4)`.
6
+ * Returns null when `value` is a well-formed UUID.
7
+ */
8
+ export declare function describeMalformedUuid(value: unknown): string | null;
9
+ //# sourceMappingURL=uuid-diagnose.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uuid-diagnose.d.ts","sourceRoot":"","sources":["../src/uuid-diagnose.ts"],"names":[],"mappings":"AAgBA,0DAA0D;AAC1D,eAAO,MAAM,oBAAoB,sMAC+J,CAAC;AAEjM;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAwBnE"}
@@ -0,0 +1,47 @@
1
+ // SPDX-License-Identifier: MPL-2.0
2
+ /**
3
+ * Say precisely what is wrong with a value that should be a UUID.
4
+ *
5
+ * #1089 / #1094 — a bare "Invalid UUID", or "expects { moduleId,
6
+ * contentInstanceId }; got {…}" around a correctly-shaped object, left the
7
+ * model looking for a structural mistake that was not there. The real fault
8
+ * was one id with a character missing; naming the group that is off lets
9
+ * the model see the id itself is wrong and fetch it again instead of
10
+ * re-sending the same value.
11
+ */
12
+ const GROUP_LENGTHS = [8, 4, 4, 4, 12];
13
+ const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
14
+ /** The next step every malformed-id message ends with. */
15
+ export const COPY_ID_EXACTLY_HINT = "Copy the id character for character from the tool result that returned it; never retype, shorten or complete an id from memory — if it is no longer in view, call the list_/get_ tool again.";
16
+ /**
17
+ * What is wrong with `value` as a UUID, e.g.
18
+ * `"c9c7ddcb-cc85-4747-84f-90967da6f769" is not a UUID: group 4 has 3 characters (expected 4)`.
19
+ * Returns null when `value` is a well-formed UUID.
20
+ */
21
+ export function describeMalformedUuid(value) {
22
+ if (typeof value !== "string") {
23
+ return `${JSON.stringify(value) ?? String(value)} is not a UUID (expected a string)`;
24
+ }
25
+ if (UUID_RE.test(value))
26
+ return null;
27
+ const quoted = JSON.stringify(value);
28
+ if (value.includes("…") || value.includes("...")) {
29
+ return `${quoted} is not a UUID: it is shortened (contains an ellipsis)`;
30
+ }
31
+ const groups = value.split("-");
32
+ if (groups.length !== GROUP_LENGTHS.length) {
33
+ return `${quoted} is not a UUID: it has ${groups.length} dash-separated group(s), a UUID has 5 (8-4-4-4-12 hex characters)`;
34
+ }
35
+ for (let i = 0; i < groups.length; i++) {
36
+ const g = groups[i] ?? "";
37
+ const want = GROUP_LENGTHS[i] ?? 0;
38
+ if (g.length !== want) {
39
+ return `${quoted} is not a UUID: group ${i + 1} has ${g.length} character(s) (expected ${want}; a UUID is 8-4-4-4-12)`;
40
+ }
41
+ if (!/^[0-9a-f]+$/i.test(g)) {
42
+ return `${quoted} is not a UUID: group ${i + 1} contains non-hex characters`;
43
+ }
44
+ }
45
+ return `${quoted} is not a UUID`;
46
+ }
47
+ //# sourceMappingURL=uuid-diagnose.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uuid-diagnose.js","sourceRoot":"","sources":["../src/uuid-diagnose.ts"],"names":[],"mappings":"AAAA,mCAAmC;AAEnC;;;;;;;;;GASG;AAEH,MAAM,aAAa,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAU,CAAC;AAChD,MAAM,OAAO,GAAG,iEAAiE,CAAC;AAElF,0DAA0D;AAC1D,MAAM,CAAC,MAAM,oBAAoB,GAC/B,8LAA8L,CAAC;AAEjM;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,oCAAoC,CAAC;IACvF,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,OAAO,GAAG,MAAM,wDAAwD,CAAC;IAC3E,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,MAAM,CAAC,MAAM,KAAK,aAAa,CAAC,MAAM,EAAE,CAAC;QAC3C,OAAO,GAAG,MAAM,0BAA0B,MAAM,CAAC,MAAM,oEAAoE,CAAC;IAC9H,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YACtB,OAAO,GAAG,MAAM,yBAAyB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,2BAA2B,IAAI,yBAAyB,CAAC;QACzH,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5B,OAAO,GAAG,MAAM,yBAAyB,CAAC,GAAG,CAAC,8BAA8B,CAAC;QAC/E,CAAC;IACH,CAAC;IACD,OAAO,GAAG,MAAM,gBAAgB,CAAC;AACnC,CAAC"}
package/dist/version.d.ts CHANGED
@@ -19,7 +19,7 @@
19
19
  * Format: SemVer 2.0.0. Pre-1.0 minor bumps are breaking; post-1.0
20
20
  * follow standard SemVer.
21
21
  */
22
- export declare const CAELO_VERSION = "0.10.71";
22
+ export declare const CAELO_VERSION = "0.11.0";
23
23
  /**
24
24
  * Deprecated alias for back-compat — early P17 work spelled this
25
25
  * `CALEO_VERSION` (typo of "Caelo"). New code should import
@@ -31,7 +31,7 @@ export declare const CAELO_VERSION = "0.10.71";
31
31
  *
32
32
  * @deprecated use CAELO_VERSION
33
33
  */
34
- export declare const CALEO_VERSION = "0.10.71";
34
+ export declare const CALEO_VERSION = "0.11.0";
35
35
  /**
36
36
  * Parsed shape — major/minor/patch + optional pre-release tag.
37
37
  * Stable interface for callers that need to feature-gate (rare —
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,eAAO,MAAM,aAAa,YAAY,CAAC;AAEvC;;;;;;;;;;GAUG;AACH,eAAO,MAAM,aAAa,YAAgB,CAAC;AAE3C;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,YAAY,CAAC,GAAG,GAAE,MAAsB,GAAG,YAAY,CAYtE;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAkBvE"}
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,eAAO,MAAM,aAAa,WAAW,CAAC;AAEtC;;;;;;;;;;GAUG;AACH,eAAO,MAAM,aAAa,WAAgB,CAAC;AAE3C;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,YAAY,CAAC,GAAG,GAAE,MAAsB,GAAG,YAAY,CAYtE;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAkBvE"}
package/dist/version.js CHANGED
@@ -20,7 +20,7 @@
20
20
  * Format: SemVer 2.0.0. Pre-1.0 minor bumps are breaking; post-1.0
21
21
  * follow standard SemVer.
22
22
  */
23
- export const CAELO_VERSION = "0.10.71";
23
+ export const CAELO_VERSION = "0.11.0";
24
24
  /**
25
25
  * Deprecated alias for back-compat — early P17 work spelled this
26
26
  * `CALEO_VERSION` (typo of "Caelo"). New code should import
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,mCAAmC;AAEnC;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,SAAS,CAAC;AAEvC;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,CAAC;AAgB3C,MAAM,UAAU,YAAY,CAAC,MAAc,aAAa;IACtD,MAAM,CAAC,GAAG,iCAAiC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtD,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,EAAE,CAAC,CAAC;IACnD,CAAC;IACD,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;QACvC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;QACvC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;QACvC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI;QACxB,GAAG;KACJ,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,OAAe;IAC5D,MAAM,KAAK,GAAG,CAAC,CAAS,EAAuB,EAAE;QAC/C,IAAI,CAAC;YACH,OAAO,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC,CAAC;IACF,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IACxB,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;IACzB,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3B,KAAK,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAU,EAAE,CAAC;QACrD,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC;IACD,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,UAAU;QAAE,OAAO,KAAK,CAAC;IAChD,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAC/C,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,UAAU;QAAE,OAAO,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC;IACrE,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,mCAAmC;AAEnC;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,QAAQ,CAAC;AAEtC;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,CAAC;AAgB3C,MAAM,UAAU,YAAY,CAAC,MAAc,aAAa;IACtD,MAAM,CAAC,GAAG,iCAAiC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtD,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,EAAE,CAAC,CAAC;IACnD,CAAC;IACD,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;QACvC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;QACvC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;QACvC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI;QACxB,GAAG;KACJ,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,OAAe;IAC5D,MAAM,KAAK,GAAG,CAAC,CAAS,EAAuB,EAAE;QAC/C,IAAI,CAAC;YACH,OAAO,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC,CAAC;IACF,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IACxB,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;IACzB,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3B,KAAK,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAU,EAAE,CAAC;QACrD,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC;IACD,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,UAAU;QAAE,OAAO,KAAK,CAAC;IAChD,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAC/C,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,UAAU;QAAE,OAAO,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC;IACrE,OAAO,KAAK,CAAC;AACf,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@caelo-cms/shared",
3
- "version": "0.10.71",
3
+ "version": "0.11.0",
4
4
  "private": false,
5
5
  "license": "MPL-2.0",
6
6
  "description": "Shared Zod schemas + types + the two-pass HTML composer used by every Caelo CMS workspace package. Stable enough for plugin authors and embedders to depend on directly.",
@@ -21,6 +21,13 @@
21
21
  "development": "./src/index.ts",
22
22
  "import": "./dist/index.js",
23
23
  "default": "./dist/index.js"
24
+ },
25
+ "./lists-model": {
26
+ "types": "./dist/lists/model.d.ts",
27
+ "bun": "./src/lists/model.ts",
28
+ "development": "./src/lists/model.ts",
29
+ "import": "./dist/lists/model.js",
30
+ "default": "./dist/lists/model.js"
24
31
  }
25
32
  },
26
33
  "files": [