@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 @@
1
+ {"version":3,"file":"list-type.js","sourceRoot":"","sources":["../../src/lists/list-type.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Epic #1107 part G — the list definitions without the renderer: field
3
+ * system, list and page type schemas, entries and value addresses. Only
4
+ * Zod underneath, so the plugin SDK can re-export it into plugin code —
5
+ * the Deno sandbox bundles the SDK with everything it imports, and the
6
+ * package root pulls in the template engine and HTML parser.
7
+ * Exposed as `@caelo-cms/shared/lists-model`.
8
+ */
9
+ export * from "./address.js";
10
+ export * from "./fields.js";
11
+ export * from "./items.js";
12
+ export * from "./list-type.js";
13
+ export * from "./page-type.js";
14
+ //# sourceMappingURL=model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/lists/model.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,15 @@
1
+ // SPDX-License-Identifier: MPL-2.0
2
+ /**
3
+ * Epic #1107 part G — the list definitions without the renderer: field
4
+ * system, list and page type schemas, entries and value addresses. Only
5
+ * Zod underneath, so the plugin SDK can re-export it into plugin code —
6
+ * the Deno sandbox bundles the SDK with everything it imports, and the
7
+ * package root pulls in the template engine and HTML parser.
8
+ * Exposed as `@caelo-cms/shared/lists-model`.
9
+ */
10
+ export * from "./address.js";
11
+ export * from "./fields.js";
12
+ export * from "./items.js";
13
+ export * from "./list-type.js";
14
+ export * from "./page-type.js";
15
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/lists/model.ts"],"names":[],"mappings":"AAAA,mCAAmC;AAEnC;;;;;;;GAOG;AAEH,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Page types (epic #1107, `docs/lists.md` §5). A page type says what a
3
+ * page IS — News, Product, Doc — while the template stays its layout.
4
+ * It declares the page's properties (same field system as list entries),
5
+ * the templates a page of this type may use, and the vocabularies whose
6
+ * terms apply. Page queries filter on it; the AI reads "this module sits
7
+ * on three News pages" from it (CLAUDE.md §1A). Replaces `templates.kind`.
8
+ */
9
+ import { z } from "zod";
10
+ import { type ListIssue } from "./fields.js";
11
+ export declare const pageTypeDefSchema: z.ZodObject<{
12
+ slug: z.ZodString;
13
+ name: z.ZodString;
14
+ purpose: z.ZodString;
15
+ templates: z.ZodArray<z.ZodString>;
16
+ defaultTemplate: z.ZodString;
17
+ properties: z.ZodDefault<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
18
+ type: z.ZodLiteral<"text">;
19
+ maxLength: z.ZodOptional<z.ZodNumber>;
20
+ name: z.ZodString;
21
+ label: z.ZodString;
22
+ required: z.ZodOptional<z.ZodBoolean>;
23
+ default: z.ZodOptional<z.ZodUnknown>;
24
+ ext: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
25
+ }, z.core.$strict>, z.ZodObject<{
26
+ type: z.ZodLiteral<"richtext">;
27
+ maxLength: z.ZodOptional<z.ZodNumber>;
28
+ name: z.ZodString;
29
+ label: z.ZodString;
30
+ required: z.ZodOptional<z.ZodBoolean>;
31
+ default: z.ZodOptional<z.ZodUnknown>;
32
+ ext: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
33
+ }, z.core.$strict>, z.ZodObject<{
34
+ type: z.ZodLiteral<"link">;
35
+ name: z.ZodString;
36
+ label: z.ZodString;
37
+ required: z.ZodOptional<z.ZodBoolean>;
38
+ default: z.ZodOptional<z.ZodUnknown>;
39
+ ext: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
40
+ }, z.core.$strict>, z.ZodObject<{
41
+ type: z.ZodLiteral<"media">;
42
+ name: z.ZodString;
43
+ label: z.ZodString;
44
+ required: z.ZodOptional<z.ZodBoolean>;
45
+ default: z.ZodOptional<z.ZodUnknown>;
46
+ ext: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
47
+ }, z.core.$strict>, z.ZodObject<{
48
+ type: z.ZodLiteral<"select">;
49
+ options: z.ZodArray<z.ZodString>;
50
+ name: z.ZodString;
51
+ label: z.ZodString;
52
+ required: z.ZodOptional<z.ZodBoolean>;
53
+ default: z.ZodOptional<z.ZodUnknown>;
54
+ ext: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
55
+ }, z.core.$strict>, z.ZodObject<{
56
+ type: z.ZodLiteral<"boolean">;
57
+ name: z.ZodString;
58
+ label: z.ZodString;
59
+ required: z.ZodOptional<z.ZodBoolean>;
60
+ default: z.ZodOptional<z.ZodUnknown>;
61
+ ext: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
62
+ }, z.core.$strict>, z.ZodObject<{
63
+ type: z.ZodLiteral<"number">;
64
+ min: z.ZodOptional<z.ZodNumber>;
65
+ max: z.ZodOptional<z.ZodNumber>;
66
+ name: z.ZodString;
67
+ label: z.ZodString;
68
+ required: z.ZodOptional<z.ZodBoolean>;
69
+ default: z.ZodOptional<z.ZodUnknown>;
70
+ ext: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
71
+ }, z.core.$strict>, z.ZodObject<{
72
+ type: z.ZodLiteral<"date">;
73
+ name: z.ZodString;
74
+ label: z.ZodString;
75
+ required: z.ZodOptional<z.ZodBoolean>;
76
+ default: z.ZodOptional<z.ZodUnknown>;
77
+ ext: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
78
+ }, z.core.$strict>, z.ZodObject<{
79
+ type: z.ZodLiteral<"icon">;
80
+ name: z.ZodString;
81
+ label: z.ZodString;
82
+ required: z.ZodOptional<z.ZodBoolean>;
83
+ default: z.ZodOptional<z.ZodUnknown>;
84
+ ext: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
85
+ }, z.core.$strict>, z.ZodObject<{
86
+ type: z.ZodLiteral<"module">;
87
+ accepts: z.ZodOptional<z.ZodArray<z.ZodString>>;
88
+ name: z.ZodString;
89
+ label: z.ZodString;
90
+ required: z.ZodOptional<z.ZodBoolean>;
91
+ default: z.ZodOptional<z.ZodUnknown>;
92
+ ext: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
93
+ }, z.core.$strict>, z.ZodObject<{
94
+ type: z.ZodLiteral<"term">;
95
+ list: z.ZodString;
96
+ multiple: z.ZodOptional<z.ZodBoolean>;
97
+ name: z.ZodString;
98
+ label: z.ZodString;
99
+ required: z.ZodOptional<z.ZodBoolean>;
100
+ default: z.ZodOptional<z.ZodUnknown>;
101
+ ext: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
102
+ }, z.core.$strict>], "type">>>;
103
+ vocabularies: z.ZodDefault<z.ZodArray<z.ZodObject<{
104
+ list: z.ZodString;
105
+ cardinality: z.ZodEnum<{
106
+ one: "one";
107
+ many: "many";
108
+ }>;
109
+ required: z.ZodOptional<z.ZodBoolean>;
110
+ }, z.core.$strict>>>;
111
+ }, z.core.$strict>;
112
+ export type PageTypeDef = z.infer<typeof pageTypeDefSchema>;
113
+ /** Static checks beyond the Zod shape. */
114
+ export declare function checkPageTypeDef(def: PageTypeDef): ListIssue[];
115
+ //# sourceMappingURL=page-type.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-type.d.ts","sourceRoot":"","sources":["../../src/lists/page-type.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAiC,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAE5E,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAuBnB,CAAC;AACZ,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,0CAA0C;AAC1C,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,WAAW,GAAG,SAAS,EAAE,CA6B9D"}
@@ -0,0 +1,66 @@
1
+ // SPDX-License-Identifier: MPL-2.0
2
+ /**
3
+ * Page types (epic #1107, `docs/lists.md` §5). A page type says what a
4
+ * page IS — News, Product, Doc — while the template stays its layout.
5
+ * It declares the page's properties (same field system as list entries),
6
+ * the templates a page of this type may use, and the vocabularies whose
7
+ * terms apply. Page queries filter on it; the AI reads "this module sits
8
+ * on three News pages" from it (CLAUDE.md §1A). Replaces `templates.kind`.
9
+ */
10
+ import { z } from "zod";
11
+ import { checkFieldDef, fieldDefSchema } from "./fields.js";
12
+ export const pageTypeDefSchema = z
13
+ .object({
14
+ slug: z.string().regex(/^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$/),
15
+ name: z.string().min(1).max(200),
16
+ purpose: z.string().min(1).max(1000),
17
+ /** Template ids a page of this type may bind to. */
18
+ templates: z.array(z.string().uuid()).min(1).max(64),
19
+ defaultTemplate: z.string().uuid(),
20
+ properties: z.array(fieldDefSchema).max(32).default([]),
21
+ vocabularies: z
22
+ .array(z
23
+ .object({
24
+ /** Vocabulary list id. */
25
+ list: z.string().uuid(),
26
+ cardinality: z.enum(["one", "many"]),
27
+ required: z.boolean().optional(),
28
+ })
29
+ .strict())
30
+ .max(16)
31
+ .default([]),
32
+ })
33
+ .strict();
34
+ /** Static checks beyond the Zod shape. */
35
+ export function checkPageTypeDef(def) {
36
+ const issues = [];
37
+ if (!def.templates.includes(def.defaultTemplate)) {
38
+ issues.push({
39
+ path: "defaultTemplate",
40
+ message: "defaultTemplate must be one of templates.",
41
+ });
42
+ }
43
+ const seen = new Set();
44
+ def.properties.forEach((f, i) => {
45
+ const at = `properties[${i}]`;
46
+ if (seen.has(f.name))
47
+ issues.push({ path: at, message: `duplicate property "${f.name}".` });
48
+ seen.add(f.name);
49
+ if (f.type === "module") {
50
+ issues.push({
51
+ path: at,
52
+ message: "page properties cannot embed modules — place the module on the page instead.",
53
+ });
54
+ }
55
+ issues.push(...checkFieldDef(f, at));
56
+ });
57
+ const lists = new Set();
58
+ def.vocabularies.forEach((v, i) => {
59
+ if (lists.has(v.list)) {
60
+ issues.push({ path: `vocabularies[${i}]`, message: "vocabulary listed twice." });
61
+ }
62
+ lists.add(v.list);
63
+ });
64
+ return issues;
65
+ }
66
+ //# sourceMappingURL=page-type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-type.js","sourceRoot":"","sources":["../../src/lists/page-type.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * `caelo:list/<id>` — the reference a module `list` field with
3
+ * `bind: "shared"` stores (epic #1107, `docs/lists.md` §7). Its own file
4
+ * because the module field schema (`content.ts`) and the resolver both
5
+ * need it, and the resolver imports far more than the schema should.
6
+ */
7
+ /** `caelo:list/<id>` */
8
+ export declare const LIST_REF_RE: RegExp;
9
+ /** Parse `caelo:list/<id>`; null when the string is not one. */
10
+ export declare function parseListRef(s: string): string | null;
11
+ /** Format a shared-list reference. */
12
+ export declare function formatListRef(listId: string): string;
13
+ //# sourceMappingURL=refs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refs.d.ts","sourceRoot":"","sources":["../../src/lists/refs.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,wBAAwB;AACxB,eAAO,MAAM,WAAW,QAAkC,CAAC;AAE3D,gEAAgE;AAChE,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAErD;AAED,sCAAsC;AACtC,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEpD"}
@@ -0,0 +1,18 @@
1
+ // SPDX-License-Identifier: MPL-2.0
2
+ /**
3
+ * `caelo:list/<id>` — the reference a module `list` field with
4
+ * `bind: "shared"` stores (epic #1107, `docs/lists.md` §7). Its own file
5
+ * because the module field schema (`content.ts`) and the resolver both
6
+ * need it, and the resolver imports far more than the schema should.
7
+ */
8
+ /** `caelo:list/<id>` */
9
+ export const LIST_REF_RE = /^caelo:list\/([0-9a-f-]{36})$/;
10
+ /** Parse `caelo:list/<id>`; null when the string is not one. */
11
+ export function parseListRef(s) {
12
+ return LIST_REF_RE.exec(s)?.[1] ?? null;
13
+ }
14
+ /** Format a shared-list reference. */
15
+ export function formatListRef(listId) {
16
+ return `caelo:list/${listId}`;
17
+ }
18
+ //# sourceMappingURL=refs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refs.js","sourceRoot":"","sources":["../../src/lists/refs.ts"],"names":[],"mappings":"AAAA,mCAAmC;AAEnC;;;;;GAKG;AAEH,wBAAwB;AACxB,MAAM,CAAC,MAAM,WAAW,GAAG,+BAA+B,CAAC;AAE3D,gEAAgE;AAChE,MAAM,UAAU,YAAY,CAAC,CAAS;IACpC,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC1C,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,OAAO,cAAc,MAAM,EAAE,CAAC;AAChC,CAAC"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * What a render needs to resolve lists, loaded in one batch per preview
3
+ * or per build (epic #1107, `docs/lists.md` §10). The admin side builds it
4
+ * (`admin-core/src/lists/load.ts`: draft overlay in previews, published
5
+ * state in builds); the shared resolver (`resolve.ts`) consumes it. After
6
+ * loading, everything is pure and synchronous — the same split as
7
+ * `SiteLinkIndex` for links.
8
+ */
9
+ import type { LinkPageVariant } from "../link-refs.js";
10
+ import type { ListItem } from "./items.js";
11
+ import type { ListTypeDef } from "./list-type.js";
12
+ import type { PageTypeDef } from "./page-type.js";
13
+ /** A list type as loaded (draft view in previews). */
14
+ export interface LoadedListType {
15
+ readonly id: string;
16
+ readonly def: ListTypeDef;
17
+ }
18
+ /** A shared list as loaded. */
19
+ export interface LoadedList {
20
+ readonly id: string;
21
+ readonly slug: string;
22
+ readonly name: string;
23
+ readonly typeSlug: string;
24
+ readonly items: readonly ListItem[];
25
+ }
26
+ /** A page type as loaded. */
27
+ export interface LoadedPageType {
28
+ readonly id: string;
29
+ readonly def: PageTypeDef;
30
+ }
31
+ /**
32
+ * One page as queries, system sources and `{{page.*}}` see it. Every
33
+ * live page of the render's scope is listed; `inBuild` says whether a
34
+ * query may return it (published in this build; in previews: status
35
+ * published in the draft view).
36
+ */
37
+ export interface ListPageRecord {
38
+ readonly id: string;
39
+ readonly title: string;
40
+ readonly parentId: string | null;
41
+ readonly pageTypeSlug: string;
42
+ readonly properties: Readonly<Record<string, unknown>>;
43
+ /** `caelo:term/<listId>/<itemId>` */
44
+ readonly terms: readonly string[];
45
+ /** ISO timestamp, null until the first Publish live. */
46
+ readonly firstPublishedAt: string | null;
47
+ readonly updatedAt: string;
48
+ /** SEO meta description, or null. */
49
+ readonly summary: string | null;
50
+ /** `caelo:media/<id>` social image, or null. */
51
+ readonly image: string | null;
52
+ readonly inBuild: boolean;
53
+ }
54
+ /** Media metadata for `{{f.alt}}`, `{{f.width}}`, `{{f.height}}`. URLs come from the link resolver. */
55
+ export interface ListMediaRecord {
56
+ readonly id: string;
57
+ readonly alt: string | null;
58
+ readonly width: number | null;
59
+ readonly height: number | null;
60
+ }
61
+ /**
62
+ * A plugin's `list-resolve` answer for one output variant. Keys are
63
+ * value addresses (`address.ts`). An overlay may replace values and hide
64
+ * entries; it can never add, remove or reorder entries.
65
+ */
66
+ export interface ListVariantOverlay {
67
+ readonly values: ReadonlyMap<string, unknown>;
68
+ /** Addresses of hidden entries: `list/<listId>/item/<itemId>` or `instance/<id>/<field>/item/<itemId>`. */
69
+ readonly hidden: ReadonlySet<string>;
70
+ }
71
+ /** An entry a plugin list source produced for one page. Values follow the source's node definition. */
72
+ export interface PluginSourceEntry {
73
+ readonly id: string;
74
+ readonly values: Readonly<Record<string, unknown>>;
75
+ }
76
+ export interface ListRenderData {
77
+ /** Keyed by list type slug. */
78
+ readonly listTypes: ReadonlyMap<string, LoadedListType>;
79
+ /** Keyed by list id. */
80
+ readonly lists: ReadonlyMap<string, LoadedList>;
81
+ /** Keyed by page type slug. */
82
+ readonly pageTypes: ReadonlyMap<string, LoadedPageType>;
83
+ /** Keyed by page id. */
84
+ readonly pages: ReadonlyMap<string, ListPageRecord>;
85
+ /** Keyed by media id. */
86
+ readonly media: ReadonlyMap<string, ListMediaRecord>;
87
+ /** The `link-resolve` page partition (same map the link index uses). */
88
+ readonly pageVariants?: ReadonlyMap<string, LinkPageVariant>;
89
+ /** `list-resolve` overlays keyed by variant. */
90
+ readonly overlays?: ReadonlyMap<string, ListVariantOverlay>;
91
+ /** `site_settings.site_language`, for `{{date.formatted}}`. */
92
+ readonly siteLanguage: string;
93
+ }
94
+ /** Render dependencies one page collected (build manifest `render-deps.json`). */
95
+ export interface ListRenderDeps {
96
+ readonly lists: readonly string[];
97
+ readonly listTypes: readonly string[];
98
+ /** Normalised query filters (page type, terms, parent) the page rendered. */
99
+ readonly queries: readonly {
100
+ readonly pageType: string | null;
101
+ readonly terms: readonly string[];
102
+ readonly parent: string | null;
103
+ }[];
104
+ /** System sources that depend on the page tree (breadcrumbs, children, siblings, term_pages). */
105
+ readonly pageTree: boolean;
106
+ /**
107
+ * Pages a system source (breadcrumbs, children, siblings) rendered as
108
+ * entries. Those entries expose the page's values (`props`, `terms`,
109
+ * `updated_at`), so editing any of them must rebuild this page too —
110
+ * `pageTree` alone only covers title / parent / build membership.
111
+ */
112
+ readonly pages: readonly string[];
113
+ }
114
+ //# sourceMappingURL=render-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-data.d.ts","sourceRoot":"","sources":["../../src/lists/render-data.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ // SPDX-License-Identifier: MPL-2.0
2
+ export {};
3
+ //# sourceMappingURL=render-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-data.js","sourceRoot":"","sources":["../../src/lists/render-data.ts"],"names":[],"mappings":"AAAA,mCAAmC"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Render dependencies of a build (epic #1107, `docs/lists.md` §10): which
3
+ * lists, list types, page queries and page-tree sources every page read,
4
+ * written by the static generator as `render-deps.json`, and the
5
+ * selection an incremental build runs on it — every page whose deps
6
+ * intersect the change.
7
+ *
8
+ * A query matches by its filter (page type, terms, parent), so a page
9
+ * that ENTERED, LEFT or CHANGED inside a filter reaches every page that
10
+ * rendered that query. That is why the file keeps each page's filter
11
+ * attributes as of the build: "left the filter" can only be seen against
12
+ * what the page was before.
13
+ *
14
+ * Cost: one pass over the recorded deps per change set — O(changes ×
15
+ * deps), never a re-render of the site to find out.
16
+ */
17
+ import type { ListPageRecord, ListRenderDeps } from "./render-data.js";
18
+ export declare const RENDER_DEPS_FILE = "render-deps.json";
19
+ export declare const RENDER_DEPS_VERSION = 2;
20
+ /** A page's filter-relevant attributes as of a build. */
21
+ export interface RenderDepsPageAttrs {
22
+ readonly pageType: string;
23
+ readonly terms: readonly string[];
24
+ readonly parent: string | null;
25
+ readonly title: string;
26
+ readonly inBuild: boolean;
27
+ }
28
+ /** `render-deps.json`. */
29
+ export interface RenderDepsFile {
30
+ readonly version: typeof RENDER_DEPS_VERSION;
31
+ /** Per rendered page: what its render read. */
32
+ readonly pages: Readonly<Record<string, ListRenderDeps>>;
33
+ /** Per known page: its filter attributes when the build ran. */
34
+ readonly index: Readonly<Record<string, RenderDepsPageAttrs>>;
35
+ }
36
+ /** The attributes {@link RenderDepsFile.index} keeps for a page. */
37
+ export declare function renderDepsAttrs(p: ListPageRecord): RenderDepsPageAttrs;
38
+ /**
39
+ * Merge the deps of a (possibly incremental) build into the previous
40
+ * file: rebuilt pages replace their entry, the index is the current one.
41
+ */
42
+ export declare function mergeRenderDeps(previous: RenderDepsFile | null, rebuilt: ReadonlyMap<string, ListRenderDeps>, pages: Iterable<ListPageRecord>): RenderDepsFile;
43
+ /** Parse a stored deps file; null when it is absent or of another version. */
44
+ export declare function parseRenderDeps(raw: string | null): RenderDepsFile | null;
45
+ /** What changed since the build the deps file describes. */
46
+ export interface RenderChange {
47
+ readonly pageIds: readonly string[];
48
+ readonly listIds: readonly string[];
49
+ readonly listTypeSlugs: readonly string[];
50
+ }
51
+ /**
52
+ * The pages an incremental build must rebuild beyond the changed pages
53
+ * themselves:
54
+ *
55
+ * - every page that read a changed list or list type;
56
+ * - for every changed page: every page whose query filter matches the
57
+ * page's attributes before OR after the change (entered, left or
58
+ * changed inside the filter);
59
+ * - every page with page-tree deps (breadcrumbs, children, siblings,
60
+ * term pages) when a changed page's title, parent or build membership
61
+ * changed;
62
+ * - every page whose system source rendered a changed page as an entry
63
+ * (its `props`, `terms`, `updated_at` show there).
64
+ *
65
+ * `current` is the page index as the new build sees it.
66
+ */
67
+ export declare function selectDependentPages(deps: RenderDepsFile, change: RenderChange, current: ReadonlyMap<string, RenderDepsPageAttrs>): Set<string>;
68
+ //# sourceMappingURL=render-deps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-deps.d.ts","sourceRoot":"","sources":["../../src/lists/render-deps.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvE,eAAO,MAAM,gBAAgB,qBAAqB,CAAC;AACnD,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC,yDAAyD;AACzD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,0BAA0B;AAC1B,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,OAAO,mBAAmB,CAAC;IAC7C,+CAA+C;IAC/C,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC;IACzD,gEAAgE;IAChE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC;CAC/D;AAED,oEAAoE;AACpE,wBAAgB,eAAe,CAAC,CAAC,EAAE,cAAc,GAAG,mBAAmB,CAQtE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,cAAc,GAAG,IAAI,EAC/B,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,EAC5C,KAAK,EAAE,QAAQ,CAAC,cAAc,CAAC,GAC9B,cAAc,CAOhB;AAED,8EAA8E;AAC9E,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,cAAc,GAAG,IAAI,CAKzE;AAED,4DAA4D;AAC5D,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;CAC3C;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,mBAAmB,CAAC,GAChD,GAAG,CAAC,MAAM,CAAC,CAsCb"}
@@ -0,0 +1,91 @@
1
+ // SPDX-License-Identifier: MPL-2.0
2
+ export const RENDER_DEPS_FILE = "render-deps.json";
3
+ export const RENDER_DEPS_VERSION = 2;
4
+ /** The attributes {@link RenderDepsFile.index} keeps for a page. */
5
+ export function renderDepsAttrs(p) {
6
+ return {
7
+ pageType: p.pageTypeSlug,
8
+ terms: [...p.terms].sort(),
9
+ parent: p.parentId,
10
+ title: p.title,
11
+ inBuild: p.inBuild,
12
+ };
13
+ }
14
+ /**
15
+ * Merge the deps of a (possibly incremental) build into the previous
16
+ * file: rebuilt pages replace their entry, the index is the current one.
17
+ */
18
+ export function mergeRenderDeps(previous, rebuilt, pages) {
19
+ const out = { ...(previous?.pages ?? {}) };
20
+ for (const [id, deps] of rebuilt)
21
+ out[id] = deps;
22
+ const index = {};
23
+ for (const p of pages)
24
+ index[p.id] = renderDepsAttrs(p);
25
+ for (const id of Object.keys(out))
26
+ if (!index[id])
27
+ delete out[id];
28
+ return { version: RENDER_DEPS_VERSION, pages: out, index };
29
+ }
30
+ /** Parse a stored deps file; null when it is absent or of another version. */
31
+ export function parseRenderDeps(raw) {
32
+ if (raw === null)
33
+ return null;
34
+ const v = JSON.parse(raw);
35
+ if (v.version !== RENDER_DEPS_VERSION || !v.pages || !v.index)
36
+ return null;
37
+ return v;
38
+ }
39
+ /**
40
+ * The pages an incremental build must rebuild beyond the changed pages
41
+ * themselves:
42
+ *
43
+ * - every page that read a changed list or list type;
44
+ * - for every changed page: every page whose query filter matches the
45
+ * page's attributes before OR after the change (entered, left or
46
+ * changed inside the filter);
47
+ * - every page with page-tree deps (breadcrumbs, children, siblings,
48
+ * term pages) when a changed page's title, parent or build membership
49
+ * changed;
50
+ * - every page whose system source rendered a changed page as an entry
51
+ * (its `props`, `terms`, `updated_at` show there).
52
+ *
53
+ * `current` is the page index as the new build sees it.
54
+ */
55
+ export function selectDependentPages(deps, change, current) {
56
+ const out = new Set();
57
+ const lists = new Set(change.listIds);
58
+ const types = new Set(change.listTypeSlugs);
59
+ const changedPages = new Set(change.pageIds);
60
+ const states = [];
61
+ let treeChanged = false;
62
+ for (const id of change.pageIds) {
63
+ const before = deps.index[id];
64
+ const after = current.get(id);
65
+ if (before)
66
+ states.push(before);
67
+ if (after)
68
+ states.push(after);
69
+ if (!before ||
70
+ !after ||
71
+ before.title !== after.title ||
72
+ before.parent !== after.parent ||
73
+ before.inBuild !== after.inBuild) {
74
+ treeChanged = true;
75
+ }
76
+ }
77
+ const matches = (q, p) => (q.pageType === null || q.pageType === p.pageType) &&
78
+ (q.parent === null || q.parent === p.parent) &&
79
+ (q.terms.length === 0 || q.terms.some((t) => p.terms.includes(t)));
80
+ for (const [pageId, d] of Object.entries(deps.pages)) {
81
+ if (d.lists.some((l) => lists.has(l)) ||
82
+ d.listTypes.some((t) => types.has(t)) ||
83
+ (treeChanged && d.pageTree) ||
84
+ d.pages.some((id) => changedPages.has(id)) ||
85
+ (states.length > 0 && d.queries.some((q) => states.some((s) => matches(q, s))))) {
86
+ out.add(pageId);
87
+ }
88
+ }
89
+ return out;
90
+ }
91
+ //# sourceMappingURL=render-deps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-deps.js","sourceRoot":"","sources":["../../src/lists/render-deps.ts"],"names":[],"mappings":"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"}