@wootsup/yt-builder-mcp 1.10.0 → 1.12.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 (215) hide show
  1. package/README.md +12 -11
  2. package/bin/yt-builder-mcp.js +1 -1
  3. package/dist/auth.d.ts +1 -1
  4. package/dist/auth.js +1 -1
  5. package/dist/catalog/tool-catalog-markdown.d.ts.map +1 -1
  6. package/dist/catalog/tool-catalog-markdown.js +13 -1
  7. package/dist/catalog/tool-catalog-markdown.js.map +1 -1
  8. package/dist/cli/doctor-command.d.ts.map +1 -1
  9. package/dist/cli/doctor-command.js +22 -2
  10. package/dist/cli/doctor-command.js.map +1 -1
  11. package/dist/client.d.ts +3 -3
  12. package/dist/client.js +1 -1
  13. package/dist/client.js.map +1 -1
  14. package/dist/clients/index.d.ts +1 -1
  15. package/dist/clients/index.js +1 -1
  16. package/dist/diagnostics/ca-reexec.js +2 -2
  17. package/dist/diagnostics/diagnose-network-error.d.ts +1 -1
  18. package/dist/diagnostics/doctor.d.ts +34 -2
  19. package/dist/diagnostics/doctor.d.ts.map +1 -1
  20. package/dist/diagnostics/doctor.js +63 -2
  21. package/dist/diagnostics/doctor.js.map +1 -1
  22. package/dist/diagnostics/startup-self-probe.js +1 -1
  23. package/dist/gateway/advanced-read-tool.d.ts.map +1 -1
  24. package/dist/gateway/advanced-read-tool.js +14 -2
  25. package/dist/gateway/advanced-read-tool.js.map +1 -1
  26. package/dist/gateway/advanced-tool/discovery.d.ts.map +1 -1
  27. package/dist/gateway/advanced-tool/discovery.js +12 -1
  28. package/dist/gateway/advanced-tool/discovery.js.map +1 -1
  29. package/dist/gateway/advanced-tool/domains.d.ts.map +1 -1
  30. package/dist/gateway/advanced-tool/domains.js +5 -0
  31. package/dist/gateway/advanced-tool/domains.js.map +1 -1
  32. package/dist/gateway/advanced-tool/execute.d.ts +7 -1
  33. package/dist/gateway/advanced-tool/execute.d.ts.map +1 -1
  34. package/dist/gateway/advanced-tool/execute.js +58 -4
  35. package/dist/gateway/advanced-tool/execute.js.map +1 -1
  36. package/dist/gateway/essentials.d.ts +4 -4
  37. package/dist/gateway/essentials.d.ts.map +1 -1
  38. package/dist/gateway/essentials.js +12 -7
  39. package/dist/gateway/essentials.js.map +1 -1
  40. package/dist/install-skill.js +1 -1
  41. package/dist/net/extra-headers.d.ts +1 -1
  42. package/dist/net/extra-headers.js +1 -1
  43. package/dist/net/internal-host.js +2 -2
  44. package/dist/net/proxy-dispatcher.js +1 -1
  45. package/dist/net/proxy-dispatcher.js.map +1 -1
  46. package/dist/net/site-basic-auth.d.ts +2 -2
  47. package/dist/net/site-basic-auth.js +2 -2
  48. package/dist/proxy/bridge.d.ts +2 -2
  49. package/dist/proxy/bridge.js +3 -3
  50. package/dist/proxy/bridge.js.map +1 -1
  51. package/dist/server.d.ts +3 -3
  52. package/dist/server.js +3 -3
  53. package/dist/setup-cli.d.ts +2 -2
  54. package/dist/setup-cli.js +2 -2
  55. package/dist/setup-cli.js.map +1 -1
  56. package/dist/setup-npx-spec.d.ts +1 -1
  57. package/dist/setup-npx-spec.js +1 -1
  58. package/dist/setup-wizard-handshake.js +1 -1
  59. package/dist/setup-wizard-types.d.ts +1 -1
  60. package/dist/setup-wizard.js +3 -3
  61. package/dist/setup-wizard.js.map +1 -1
  62. package/dist/sites/client-pool.d.ts +1 -1
  63. package/dist/sites/client-pool.js +1 -1
  64. package/dist/sites/tools/sites-list.d.ts.map +1 -1
  65. package/dist/sites/tools/sites-list.js +26 -4
  66. package/dist/sites/tools/sites-list.js.map +1 -1
  67. package/dist/sites/tools/sites-test.js +1 -1
  68. package/dist/sites/tools/sites-test.js.map +1 -1
  69. package/dist/sites/tools/use-site.js +2 -2
  70. package/dist/sites/tools/use-site.js.map +1 -1
  71. package/dist/tools/budgeted-table.d.ts +21 -0
  72. package/dist/tools/budgeted-table.d.ts.map +1 -0
  73. package/dist/tools/budgeted-table.js +137 -0
  74. package/dist/tools/budgeted-table.js.map +1 -0
  75. package/dist/tools/elements/builders.d.ts.map +1 -1
  76. package/dist/tools/elements/builders.js +102 -40
  77. package/dist/tools/elements/builders.js.map +1 -1
  78. package/dist/tools/elements/handlers-write.d.ts +21 -0
  79. package/dist/tools/elements/handlers-write.d.ts.map +1 -1
  80. package/dist/tools/elements/handlers-write.js +231 -11
  81. package/dist/tools/elements/handlers-write.js.map +1 -1
  82. package/dist/tools/elements/handlers.d.ts +20 -12
  83. package/dist/tools/elements/handlers.d.ts.map +1 -1
  84. package/dist/tools/elements/handlers.js +77 -26
  85. package/dist/tools/elements/handlers.js.map +1 -1
  86. package/dist/tools/elements/schema-validation.d.ts +147 -7
  87. package/dist/tools/elements/schema-validation.d.ts.map +1 -1
  88. package/dist/tools/elements/schema-validation.js +508 -28
  89. package/dist/tools/elements/schema-validation.js.map +1 -1
  90. package/dist/tools/format/elements-format.d.ts.map +1 -1
  91. package/dist/tools/format/elements-format.js +56 -12
  92. package/dist/tools/format/elements-format.js.map +1 -1
  93. package/dist/tools/format/health-format.d.ts +16 -0
  94. package/dist/tools/format/health-format.d.ts.map +1 -1
  95. package/dist/tools/format/health-format.js +9 -0
  96. package/dist/tools/format/health-format.js.map +1 -1
  97. package/dist/tools/format/inspection-format.d.ts +7 -0
  98. package/dist/tools/format/inspection-format.d.ts.map +1 -1
  99. package/dist/tools/format/inspection-format.js +18 -0
  100. package/dist/tools/format/inspection-format.js.map +1 -1
  101. package/dist/tools/format/pages-format.d.ts +1 -1
  102. package/dist/tools/format/pages-format.d.ts.map +1 -1
  103. package/dist/tools/format/pages-format.js +7 -0
  104. package/dist/tools/format/pages-format.js.map +1 -1
  105. package/dist/tools/format/sources-format.d.ts +12 -5
  106. package/dist/tools/format/sources-format.d.ts.map +1 -1
  107. package/dist/tools/format/sources-format.js +31 -6
  108. package/dist/tools/format/sources-format.js.map +1 -1
  109. package/dist/tools/health.d.ts.map +1 -1
  110. package/dist/tools/health.js +85 -11
  111. package/dist/tools/health.js.map +1 -1
  112. package/dist/tools/index.d.ts.map +1 -1
  113. package/dist/tools/index.js +7 -0
  114. package/dist/tools/index.js.map +1 -1
  115. package/dist/tools/inspection.d.ts +34 -0
  116. package/dist/tools/inspection.d.ts.map +1 -1
  117. package/dist/tools/inspection.js +666 -62
  118. package/dist/tools/inspection.js.map +1 -1
  119. package/dist/tools/layout-flatten.d.ts +7 -1
  120. package/dist/tools/layout-flatten.d.ts.map +1 -1
  121. package/dist/tools/layout-flatten.js +24 -13
  122. package/dist/tools/layout-flatten.js.map +1 -1
  123. package/dist/tools/library.d.ts +29 -2
  124. package/dist/tools/library.d.ts.map +1 -1
  125. package/dist/tools/library.js +247 -34
  126. package/dist/tools/library.js.map +1 -1
  127. package/dist/tools/local-content/builders.js +14 -14
  128. package/dist/tools/local-content/builders.js.map +1 -1
  129. package/dist/tools/local-content/handlers.d.ts +3 -1
  130. package/dist/tools/local-content/handlers.d.ts.map +1 -1
  131. package/dist/tools/local-content/handlers.js +42 -9
  132. package/dist/tools/local-content/handlers.js.map +1 -1
  133. package/dist/tools/local-content/schemas.d.ts +9 -4
  134. package/dist/tools/local-content/schemas.d.ts.map +1 -1
  135. package/dist/tools/local-content/schemas.js +14 -6
  136. package/dist/tools/local-content/schemas.js.map +1 -1
  137. package/dist/tools/multi-items/builders.d.ts.map +1 -1
  138. package/dist/tools/multi-items/builders.js +11 -10
  139. package/dist/tools/multi-items/builders.js.map +1 -1
  140. package/dist/tools/navigation/builders.d.ts +18 -0
  141. package/dist/tools/navigation/builders.d.ts.map +1 -0
  142. package/dist/tools/navigation/builders.js +47 -0
  143. package/dist/tools/navigation/builders.js.map +1 -0
  144. package/dist/tools/navigation/handlers.d.ts +30 -0
  145. package/dist/tools/navigation/handlers.d.ts.map +1 -0
  146. package/dist/tools/navigation/handlers.js +41 -0
  147. package/dist/tools/navigation/handlers.js.map +1 -0
  148. package/dist/tools/navigation/index.d.ts +15 -0
  149. package/dist/tools/navigation/index.d.ts.map +1 -0
  150. package/dist/tools/navigation/index.js +14 -0
  151. package/dist/tools/navigation/index.js.map +1 -0
  152. package/dist/tools/navigation/schemas.d.ts +46 -0
  153. package/dist/tools/navigation/schemas.d.ts.map +1 -0
  154. package/dist/tools/navigation/schemas.js +41 -0
  155. package/dist/tools/navigation/schemas.js.map +1 -0
  156. package/dist/tools/pages/builders.d.ts.map +1 -1
  157. package/dist/tools/pages/builders.js +213 -81
  158. package/dist/tools/pages/builders.js.map +1 -1
  159. package/dist/tools/pages/handlers-audit.d.ts +112 -3
  160. package/dist/tools/pages/handlers-audit.d.ts.map +1 -1
  161. package/dist/tools/pages/handlers-audit.js +623 -7
  162. package/dist/tools/pages/handlers-audit.js.map +1 -1
  163. package/dist/tools/pages/handlers-read.d.ts +51 -8
  164. package/dist/tools/pages/handlers-read.d.ts.map +1 -1
  165. package/dist/tools/pages/handlers-read.js +348 -69
  166. package/dist/tools/pages/handlers-read.js.map +1 -1
  167. package/dist/tools/pages/handlers-write.d.ts +7 -3
  168. package/dist/tools/pages/handlers-write.d.ts.map +1 -1
  169. package/dist/tools/pages/handlers-write.js +69 -25
  170. package/dist/tools/pages/handlers-write.js.map +1 -1
  171. package/dist/tools/pages/header-transparency.d.ts +64 -0
  172. package/dist/tools/pages/header-transparency.d.ts.map +1 -0
  173. package/dist/tools/pages/header-transparency.js +119 -0
  174. package/dist/tools/pages/header-transparency.js.map +1 -0
  175. package/dist/tools/pages/schemas.d.ts +284 -13
  176. package/dist/tools/pages/schemas.d.ts.map +1 -1
  177. package/dist/tools/pages/schemas.js +434 -26
  178. package/dist/tools/pages/schemas.js.map +1 -1
  179. package/dist/tools/pages/target.d.ts +162 -0
  180. package/dist/tools/pages/target.d.ts.map +1 -0
  181. package/dist/tools/pages/target.js +239 -0
  182. package/dist/tools/pages/target.js.map +1 -0
  183. package/dist/tools/response-budget.d.ts +77 -0
  184. package/dist/tools/response-budget.d.ts.map +1 -0
  185. package/dist/tools/response-budget.js +134 -0
  186. package/dist/tools/response-budget.js.map +1 -0
  187. package/dist/tools/shared-schemas.d.ts +45 -0
  188. package/dist/tools/shared-schemas.d.ts.map +1 -1
  189. package/dist/tools/shared-schemas.js +50 -0
  190. package/dist/tools/shared-schemas.js.map +1 -1
  191. package/dist/tools/sources/builders.d.ts.map +1 -1
  192. package/dist/tools/sources/builders.js +55 -39
  193. package/dist/tools/sources/builders.js.map +1 -1
  194. package/dist/tools/sources/handlers-bind.d.ts +10 -11
  195. package/dist/tools/sources/handlers-bind.d.ts.map +1 -1
  196. package/dist/tools/sources/handlers-bind.js +110 -9
  197. package/dist/tools/sources/handlers-bind.js.map +1 -1
  198. package/dist/tools/sources/handlers.d.ts +4 -2
  199. package/dist/tools/sources/handlers.d.ts.map +1 -1
  200. package/dist/tools/sources/handlers.js +11 -7
  201. package/dist/tools/sources/handlers.js.map +1 -1
  202. package/dist/tools/sparse-fields.d.ts +61 -8
  203. package/dist/tools/sparse-fields.d.ts.map +1 -1
  204. package/dist/tools/sparse-fields.js +124 -12
  205. package/dist/tools/sparse-fields.js.map +1 -1
  206. package/dist/tools/sublayout/builders.d.ts.map +1 -1
  207. package/dist/tools/sublayout/builders.js +1 -2
  208. package/dist/tools/sublayout/builders.js.map +1 -1
  209. package/dist/tools/tool-builder/results.d.ts +19 -6
  210. package/dist/tools/tool-builder/results.d.ts.map +1 -1
  211. package/dist/tools/tool-builder/results.js +133 -6
  212. package/dist/tools/tool-builder/results.js.map +1 -1
  213. package/manifest.json +1 -1
  214. package/package.json +2 -2
  215. package/skills/yt-builder-mcp/SKILL.md +1713 -72
@@ -5,7 +5,7 @@
5
5
  * `./handlers-write.ts` only catch a small fixed set of known mistakes. An
6
6
  * unknown prop key that is NOT in those tables slips through, the PHP backend
7
7
  * silently drops it, and the element renders empty with no signal to the agent
8
- * (Glöckle B3).
8
+ * (customer B3).
9
9
  *
10
10
  * This module adds a LIVE cross-check against the element-type's real schema:
11
11
  * the authoritative prop keys are `fields[].name` from
@@ -20,7 +20,7 @@
20
20
  *
21
21
  * @license MIT
22
22
  */
23
- import { errorResult } from '../tool-builder.js';
23
+ import { errorResult, jsonResult } from '../tool-builder.js';
24
24
  /**
25
25
  * MCP-side mirror of `Inspector::knownAcceptedButHiddenFields`
26
26
  * (`src/modules/builder-inspection/src/Inspector.php`). YT-Pro accepts these
@@ -92,47 +92,127 @@ export function nearestFieldName(key, fields) {
92
92
  return bestDist <= threshold ? best : undefined;
93
93
  }
94
94
  /**
95
- * Pull `fields[].name` out of the element-type schema response. Mirrors the
96
- * envelope handling in `../inspection.ts`: the type schema nests under
97
- * `schema`, with a top-level fallback for older backends.
95
+ * PAGES_LIBRARY_MEDIA-27 suggest real field names for an unknown key,
96
+ * combining TWO signals so an obviously-intended key is never missed:
98
97
  *
99
- * @returns the field-name list (possibly empty), or `null` when the response
98
+ * 1. PREFIX / SUBSTRING match a `title` key on a headline should suggest
99
+ * `title_element` / `title_style` / `title_color`, but char-Levenshtein to
100
+ * each of those is 6-8 (well over the typo threshold), so the pure-distance
101
+ * `nearestFieldName` returns nothing. When the unknown key (≥ 3 chars) is a
102
+ * prefix of — or a substring of — a real field, surface EVERY such field
103
+ * regardless of edit distance: these are the concrete keys the caller most
104
+ * likely meant.
105
+ * 2. Levenshtein nearest — the general single/double-char typo case.
106
+ *
107
+ * Prefix matches lead (they are the strongest signal), then substring matches,
108
+ * then the Levenshtein nearest if not already covered. De-duplicated, order
109
+ * preserved. Returns `[]` when nothing is close.
110
+ */
111
+ export function suggestFieldNames(key, fields) {
112
+ const out = [];
113
+ const push = (name) => {
114
+ if (!out.includes(name))
115
+ out.push(name);
116
+ };
117
+ if (key.length >= 3) {
118
+ // Prefix matches first (`title` → `title_element`, `title_style`, …).
119
+ for (const field of fields) {
120
+ if (field !== key && field.startsWith(key))
121
+ push(field);
122
+ }
123
+ // Then substring matches (`color` → `title_color`, `bg_color`).
124
+ for (const field of fields) {
125
+ if (field !== key && field.includes(key))
126
+ push(field);
127
+ }
128
+ }
129
+ // Then the edit-distance nearest for the general typo case.
130
+ const near = nearestFieldName(key, fields);
131
+ if (near !== undefined)
132
+ push(near);
133
+ return out;
134
+ }
135
+ /**
136
+ * Pull the full `fields[]` list out of the element-type schema response.
137
+ * Mirrors the envelope handling in `../inspection.ts`: the type schema nests
138
+ * under `schema`, with a top-level fallback for older backends.
139
+ *
140
+ * @returns the field list (possibly empty), or `null` when the response
100
141
  * carries no `fields` array at all (unknown schema shape → treat as unknown).
101
142
  */
102
- export function extractSchemaFieldNames(data) {
143
+ export function extractSchemaFields(data) {
103
144
  if (data === null || typeof data !== 'object')
104
145
  return null;
105
146
  const obj = data;
106
147
  const schema = obj.schema !== null && typeof obj.schema === 'object'
107
148
  ? obj.schema
108
149
  : obj;
109
- const fields = schema.fields;
110
- if (!Array.isArray(fields))
150
+ const rawFields = schema.fields;
151
+ if (!Array.isArray(rawFields))
111
152
  return null;
112
- const names = [];
113
- for (const field of fields) {
114
- if (field !== null && typeof field === 'object') {
115
- const name = field.name;
116
- if (typeof name === 'string' && name !== '')
117
- names.push(name);
153
+ const fields = [];
154
+ for (const raw of rawFields) {
155
+ if (raw === null || typeof raw !== 'object')
156
+ continue;
157
+ const f = raw;
158
+ const name = f.name;
159
+ if (typeof name !== 'string' || name === '')
160
+ continue;
161
+ const field = { name };
162
+ if (typeof f.type === 'string' && f.type !== '')
163
+ field.type = f.type;
164
+ if (Array.isArray(f.enum)) {
165
+ // Mirrors Inspector::extractEnum's PHP-side coercion
166
+ // (is_string/is_int/is_bool → (string) cast) so a wire response
167
+ // that carries raw scalars instead of pre-stringified values is
168
+ // still usable.
169
+ const enumValues = f.enum
170
+ .filter((v) => typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean')
171
+ .map((v) => String(v));
172
+ if (enumValues.length > 0)
173
+ field.enum = enumValues;
118
174
  }
175
+ if ('default' in f)
176
+ field.default = f.default;
177
+ fields.push(field);
119
178
  }
120
- return names;
179
+ return fields;
121
180
  }
122
181
  /**
123
- * Best-effort fetch of an element-type's real prop keys. ANY failure (network,
124
- * non-2xx, unknown shape) resolves to `null` so the caller falls through to the
125
- * prior behaviour a schema fetch must never break the write.
182
+ * Pull `fields[].name` out of the element-type schema response. Thin
183
+ * name-only projection of {@link extractSchemaFields} kept as its own
184
+ * export because every EXISTING caller/test only needs the name list.
185
+ *
186
+ * @returns the field-name list (possibly empty), or `null` when the response
187
+ * carries no `fields` array at all (unknown schema shape → treat as unknown).
126
188
  */
127
- export async function fetchSchemaFieldNames(client, elementType) {
189
+ export function extractSchemaFieldNames(data) {
190
+ const fields = extractSchemaFields(data);
191
+ return fields === null ? null : fields.map((f) => f.name);
192
+ }
193
+ /**
194
+ * Best-effort fetch of an element-type's full field schema. ANY failure
195
+ * (network, non-2xx, unknown shape) resolves to `null` so the caller falls
196
+ * through to the prior behaviour — a schema fetch must never break the write.
197
+ */
198
+ export async function fetchSchemaFields(client, elementType) {
128
199
  try {
129
200
  const data = await client.get(`/element-types/${encodeURIComponent(elementType)}/schema`);
130
- return extractSchemaFieldNames(data);
201
+ return extractSchemaFields(data);
131
202
  }
132
203
  catch {
133
204
  return null;
134
205
  }
135
206
  }
207
+ /**
208
+ * Best-effort fetch of an element-type's real prop keys. Name-only
209
+ * projection of {@link fetchSchemaFields} — kept as its own export for
210
+ * existing callers that only need the key list.
211
+ */
212
+ export async function fetchSchemaFieldNames(client, elementType) {
213
+ const fields = await fetchSchemaFields(client, elementType);
214
+ return fields === null ? null : fields.map((f) => f.name);
215
+ }
136
216
  /**
137
217
  * Validate `props` against the element-type's LIVE schema. Returns an
138
218
  * `errorResult` ONLY when the schema is surely known (non-empty field list) AND
@@ -147,11 +227,12 @@ export async function validatePropsAgainstLiveSchema(opts) {
147
227
  const keys = Object.keys(props);
148
228
  if (keys.length === 0)
149
229
  return null;
150
- const fieldNames = await fetchSchemaFieldNames(client, elementType);
230
+ const fields = opts.fields !== undefined ? opts.fields : await fetchSchemaFields(client, elementType);
151
231
  // null = schema unknown / fetch failed; [] = present-but-empty. Both are
152
232
  // "uncertain" → never hard-reject.
153
- if (fieldNames === null || fieldNames.length === 0)
233
+ if (fields === null || fields.length === 0)
154
234
  return null;
235
+ const fieldNames = fields.map((f) => f.name);
155
236
  // Accepted set = live schema fields ∪ the runtime-accepted-hidden mirror.
156
237
  const accepted = new Set(fieldNames);
157
238
  for (const extra of RUNTIME_ACCEPTED_HIDDEN_PROPS[elementType] ?? []) {
@@ -169,16 +250,19 @@ export async function validatePropsAgainstLiveSchema(opts) {
169
250
  return null;
170
251
  // did_you_mean only for keys with a genuinely-close real field. Never
171
252
  // fabricate a suggestion (a wholly-different key gets no `did_you_mean`).
253
+ // PAGES_LIBRARY_MEDIA-27: prefix/substring matches join the Levenshtein
254
+ // nearest, so `title` on a headline now suggests title_element/title_style/
255
+ // title_color instead of returning nothing.
172
256
  const didYouMean = {};
173
257
  const suggestionParts = [];
174
258
  let firstNear;
175
259
  for (const key of unknownKeys) {
176
- const near = nearestFieldName(key, fieldNames);
177
- if (near !== undefined) {
178
- didYouMean[key] = [near];
179
- suggestionParts.push(`\`${key}\` → \`${near}\``);
260
+ const suggestions = suggestFieldNames(key, fieldNames);
261
+ if (suggestions.length > 0) {
262
+ didYouMean[key] = suggestions;
263
+ suggestionParts.push(`\`${key}\` → ${suggestions.map((s) => `\`${s}\``).join('/')}`);
180
264
  if (firstNear === undefined)
181
- firstNear = near;
265
+ firstNear = suggestions[0];
182
266
  }
183
267
  }
184
268
  const hasSuggestions = suggestionParts.length > 0;
@@ -202,4 +286,400 @@ export async function validatePropsAgainstLiveSchema(opts) {
202
286
  `yootheme_builder_element_type_get_schema({ element_type: "${elementType}" }).`,
203
287
  });
204
288
  }
289
+ // ─── Ordering-red-border fix (2026-07-25) ─────────────────────────────
290
+ //
291
+ // Root cause: `element_add` forwards ONLY the caller-supplied `props`
292
+ // verbatim. YOOtheme's OWN native element-creation additionally initialises
293
+ // every REQUIRED enum field (a `select`/dropdown whose schema `enum` does
294
+ // NOT list `''` as a member — the same "required" definition the PHP-side
295
+ // UiInvariantValidator uses for its `required_field_empty` check) to its
296
+ // schema `default`. An element created via element_add without e.g. an
297
+ // "Ordering" prop therefore has NO value at all for that required dropdown,
298
+ // and YOOtheme's Vue Builder flags the empty required control red.
299
+ //
300
+ // Two functions close this, both scoped to element_add's CREATE path only
301
+ // (element_update_settings is deliberately untouched — an update may
302
+ // legitimately clear a field, so injecting a default there would silently
303
+ // fight the caller):
304
+ // - `seedRequiredEnumDefaults` fills in the schema default ONLY for a
305
+ // required-enum field the caller did not supply at all. A caller-
306
+ // supplied value (valid or not) is NEVER touched here.
307
+ // - `validateEnumPropValues` hard-rejects a caller-supplied value for a
308
+ // KNOWN enum-constrained field that is not one of its accepted members
309
+ // — closing the create-path KEY-only gap `validatePropsAgainstLiveSchema`
310
+ // deliberately leaves open (it only checks the KEY is known, never the
311
+ // VALUE).
312
+ /**
313
+ * A field is "required" in the same sense the PHP-side `UiInvariantValidator`
314
+ * uses for its `required_field_empty` violation: it is enum-constrained (a
315
+ * non-empty `enum` list) and that list does NOT contain `''` — an optional
316
+ * select always lists `''` as its "nothing selected" member.
317
+ */
318
+ export function isRequiredEnumField(field) {
319
+ return field.enum !== undefined && field.enum.length > 0 && !field.enum.includes('');
320
+ }
321
+ /** A schema `default` that is actually usable as a seeded value — present and non-empty. */
322
+ function hasUsableDefault(field) {
323
+ return field.default !== undefined && field.default !== null && field.default !== '';
324
+ }
325
+ /**
326
+ * Seed every REQUIRED enum field (see {@link isRequiredEnumField}) that
327
+ * declares a non-empty schema `default` and is ABSENT from `props` with that
328
+ * default — mirroring what YOOtheme's own native element-creation
329
+ * initialises. A field the caller already supplied a key for (any value,
330
+ * including one later hard-rejected by {@link validateEnumPropValues}) is
331
+ * never touched: the caller's own value ALWAYS wins, no coercion, ever. An
332
+ * element type with no schema default for a field gets nothing invented for
333
+ * it — the seed set only ever pulls from real schema data.
334
+ *
335
+ * Returns `props` UNCHANGED (same reference, possibly `undefined`) when
336
+ * there is nothing to seed, so a no-op call never allocates a new object.
337
+ */
338
+ export function seedRequiredEnumDefaults(fields, props) {
339
+ const seeds = {};
340
+ for (const field of fields) {
341
+ if (!isRequiredEnumField(field))
342
+ continue;
343
+ if (!hasUsableDefault(field))
344
+ continue;
345
+ if (props !== undefined && Object.prototype.hasOwnProperty.call(props, field.name))
346
+ continue;
347
+ seeds[field.name] = field.default;
348
+ }
349
+ if (Object.keys(seeds).length === 0)
350
+ return props;
351
+ return { ...seeds, ...(props ?? {}) };
352
+ }
353
+ /**
354
+ * YOOtheme persists a BOOLEAN shorthand (true/false/"true"/"false"/1/0/'1'/'0')
355
+ * in several fields our schema-derivation would otherwise classify as a plain
356
+ * enum-value mismatch (e.g. a link's `link_target: true`, the "open in a new
357
+ * window" checkbox, on a field whose enum is `_blank`/`_self`/…). Mirrors
358
+ * `UiInvariantValidator::isBooleanish` (PHP) so this pre-flight is never
359
+ * STRICTER than the server-side guard the write would hit anyway.
360
+ */
361
+ function isBooleanishEnumValue(value) {
362
+ return (typeof value === 'boolean' ||
363
+ value === 1 ||
364
+ value === 0 ||
365
+ value === '1' ||
366
+ value === '0' ||
367
+ value === 'true' ||
368
+ value === 'false');
369
+ }
370
+ /**
371
+ * Hard-reject a prop VALUE the caller explicitly supplied for a KNOWN
372
+ * enum-constrained field when that value is not one of the field's declared
373
+ * `enum` members. `validatePropsAgainstLiveSchema` only ever checks that a
374
+ * prop KEY is known — this is the VALUE half, scoped to element_add's create
375
+ * path only (see the section banner above for why).
376
+ *
377
+ * An empty value (`''` / `null` / `undefined`) is deliberately NOT judged
378
+ * here — persisting an empty value on a required field is a DIFFERENT
379
+ * violation (`required_field_empty`) the PHP write guard already owns; this
380
+ * function only judges a genuinely non-empty value against enum membership.
381
+ * A non-scalar value (a dynamic-binding shape) is skipped — it cannot be
382
+ * safely compared against a string enum and is not this function's concern.
383
+ *
384
+ * Returns `null` (pass) whenever the field is unknown to the given `fields`
385
+ * list or is not enum-constrained — this is a value check layered ON TOP of
386
+ * the key check, never a whitelist on its own.
387
+ */
388
+ export function validateEnumPropValues(opts) {
389
+ const { elementType, fields, props, reservedKeys } = opts;
390
+ if (props === undefined || props === null)
391
+ return null;
392
+ const byName = new Map(fields.map((f) => [f.name, f]));
393
+ for (const [key, value] of Object.entries(props)) {
394
+ if (reservedKeys.has(key))
395
+ continue; // dedicated guard owns these
396
+ if (value === '' || value === null || value === undefined)
397
+ continue; // required_field_empty is the PHP guard's concern
398
+ if (typeof value !== 'string' && typeof value !== 'number' && typeof value !== 'boolean')
399
+ continue;
400
+ if (isBooleanishEnumValue(value))
401
+ continue;
402
+ const field = byName.get(key);
403
+ if (field === undefined || field.enum === undefined || field.enum.length === 0)
404
+ continue;
405
+ if (field.enum.includes(String(value)))
406
+ continue;
407
+ return errorResult({
408
+ error: new Error(`Invalid value for prop \`${key}\` on element type \`${elementType}\`: ` +
409
+ `${JSON.stringify(value)} is not one of its accepted values. ` +
410
+ `Valid values: ${field.enum.map((v) => `\`${v}\``).join(', ')}.`),
411
+ context: {
412
+ element_type: elementType,
413
+ field: key,
414
+ given_value: value,
415
+ valid_values: field.enum,
416
+ },
417
+ hint: `Use one of the valid values, or fetch the schema: ` +
418
+ `yootheme_builder_element_type_get_schema({ element_type: "${elementType}" }).`,
419
+ });
420
+ }
421
+ return null;
422
+ }
423
+ // ─── Transparent-header write guard (Task 6, 2026-07-27) ─────────────
424
+ //
425
+ // YOOtheme's transparent header lives in three props on a `section`
426
+ // (`header_transparent`, `_noplaceholder`, `_text_color`). The plan's policy
427
+ // is that a transparent header is a deliberate EXCEPTION, never a default, and
428
+ // that whoever turns it on picks the colour deliberately — with no deliberate
429
+ // choice the colour is `''` (the theme default), NEVER `'light'` (which is
430
+ // white navigation text, and recolours even over a flat theme background).
431
+ //
432
+ // This guard is the CLIENT-SIDE half. What it may decide is bounded by what
433
+ // it can KNOW, which is the whole design:
434
+ //
435
+ // - **Class A (dead props) is theme-INDEPENDENT.** `_text_color` /
436
+ // `_noplaceholder` on a section whose master switch is off are never read
437
+ // by YOOtheme — dead whatever the theme declares. So this surface, which
438
+ // can never read `theme.css`, still rejects them. (Ratified for this
439
+ // surface by the plan's Task-6 scope; the evaluator docblock in
440
+ // `HeaderContrastEvaluator.php` records the open fail-open question.)
441
+ // - **Class B (the layout contradicts the theme's own `--uk-inverse`) needs
442
+ // the compiled `theme.css`.** TypeScript cannot read it, so class B is NOT
443
+ // approximated here — it stays with `pages_audit` /
444
+ // `header_transparency_set`, where the declaration IS readable. Guessing
445
+ // it client-side would be exactly the invented judgment the plan forbids.
446
+ // - **Class C (a hero image/video covers the section background) is allowed
447
+ // with a warning**, never rejected: over a medium no colour is provable
448
+ // from props and none is safer than another, so the only valid proof is
449
+ // looking at the rendered page.
450
+ //
451
+ // The SECOND bound is the write's own merge semantics. `element_update_settings`
452
+ // replaces props by default and deep-merges only on `merge:true`
453
+ // (`ElementsController::updateSettings`). A merge payload that omits the master
454
+ // switch therefore says NOTHING about the resulting state — so nothing is
455
+ // rejected and nothing is seeded there. "Not decidable" is a legitimate answer;
456
+ // a false reject on a partial update would be worse than the hole it closes.
457
+ //
458
+ // ONE chokepoint: `handleElementUpdateSettings` calls this and nothing else
459
+ // re-implements it (mirroring the API Mapper Library-First-Guard, which runs at
460
+ // `createConnection` only). `element_add`'s create path is deliberately NOT a
461
+ // second call site — a section created with dead props is caught by the
462
+ // server-side `pages_audit` check, which can also see whether it is the FIRST
463
+ // section (`a2`, the other half of class A, is undecidable from a single
464
+ // element payload and stays server-side too).
465
+ const HEADER_TRANSPARENT_PROP = 'header_transparent';
466
+ const HEADER_TRANSPARENT_TEXT_COLOR_PROP = 'header_transparent_text_color';
467
+ const HEADER_TRANSPARENT_NOPLACEHOLDER_PROP = 'header_transparent_noplaceholder';
468
+ /** The two props that can put a backdrop in front of the theme's own background. */
469
+ const HEADER_MEDIA_PROPS = ['image', 'video'];
470
+ /**
471
+ * Strict-boolean truthiness set — a byte-for-byte mirror of
472
+ * `HeaderContrastFacts::TRUTHY_STRINGS` (PHP). Only genuine true-ish values
473
+ * engage, so the raw-JSON strings `"false"` / `"0"` can never read as true (a
474
+ * loose `!!value` would, which is the bypass the API Mapper Library-First-Guard's
475
+ * `acknowledge_no_library` closed).
476
+ */
477
+ const HEADER_TRUTHY_STRINGS = ['1', 'true', 'yes', 'on'];
478
+ /** Mirror of `HeaderContrastFacts::isTruthyFlag`. */
479
+ function isHeaderTruthyFlag(value) {
480
+ if (typeof value === 'boolean')
481
+ return value;
482
+ if (typeof value === 'number')
483
+ return value === 1;
484
+ if (typeof value === 'string')
485
+ return HEADER_TRUTHY_STRINGS.includes(value.trim().toLowerCase());
486
+ return false;
487
+ }
488
+ /**
489
+ * Mirror of `HeaderContrastFacts::readTextColor` — an unrecognised value
490
+ * degrades to `''`. A colour this code does not understand is not a colour it
491
+ * may act on (and rejecting a garbage enum value is
492
+ * {@link validateEnumPropValues}' job, not this guard's).
493
+ */
494
+ function readHeaderTextColor(value) {
495
+ if (typeof value !== 'string')
496
+ return '';
497
+ const normalised = value.trim().toLowerCase();
498
+ if (normalised === 'light')
499
+ return 'light';
500
+ if (normalised === 'dark')
501
+ return 'dark';
502
+ return '';
503
+ }
504
+ /** Mirror of `HeaderContrastFacts::isPresent` — does a media prop carry an actual backdrop? */
505
+ function isHeaderMediaPresent(value) {
506
+ if (value === null || value === undefined || value === false)
507
+ return false;
508
+ if (typeof value === 'string')
509
+ return value.trim() !== '';
510
+ if (Array.isArray(value))
511
+ return value.length > 0;
512
+ if (typeof value === 'object')
513
+ return Object.keys(value).length > 0;
514
+ if (typeof value === 'number')
515
+ return value !== 0;
516
+ return true;
517
+ }
518
+ /**
519
+ * Resolve one prop's state AFTER the write, honouring merge semantics.
520
+ *
521
+ * @param present a reader for "the payload states this key" → its value
522
+ * @param replaces `true` when the write REPLACES all props (the default), so an
523
+ * absent key means the prop ends up absent; `false` (merge) means an
524
+ * absent key leaves the stored value — unknowable from here.
525
+ */
526
+ function resolveAfterWrite(props, key, unset, replaces, read, absent) {
527
+ if (Object.prototype.hasOwnProperty.call(props, key))
528
+ return read(props[key]);
529
+ if (unset.has(key))
530
+ return absent; // explicitly removed → YOOtheme's default
531
+ return replaces ? absent : 'unknown';
532
+ }
533
+ /** Media backdrop after the write: `true` if either media prop ends up set. */
534
+ function resolveMediaBackdrop(props, unset, replaces) {
535
+ let anyUnknown = false;
536
+ for (const key of HEADER_MEDIA_PROPS) {
537
+ const resolved = resolveAfterWrite(props, key, unset, replaces, isHeaderMediaPresent, false);
538
+ if (resolved === true)
539
+ return true;
540
+ if (resolved === 'unknown')
541
+ anyUnknown = true;
542
+ }
543
+ return anyUnknown ? 'unknown' : false;
544
+ }
545
+ /**
546
+ * The class-A reject. Error shape mirrors the API Mapper Library-First-Guard:
547
+ * the human-readable instruction rides INSIDE `error` (the only leg some MCP
548
+ * plumbing surfaces), with a machine-readable `error_code` alongside it.
549
+ */
550
+ function deadPropRejection(deadProps, elementPath, masterSwitchStatedOff) {
551
+ const list = deadProps.map((p) => `\`${p}\``).join(', ');
552
+ const why = masterSwitchStatedOff
553
+ ? 'this write leaves `header_transparent` off'
554
+ : 'this write does not set `header_transparent` (a full-replace update drops every prop it omits, '
555
+ + 'so the master switch ends up off)';
556
+ return jsonResult({
557
+ error: `Dead transparent-header prop(s) ${list} at \`${elementPath}\`: ${why}, and YOOtheme reads `
558
+ + `${list} ONLY while \`header_transparent\` is true. The write would store configuration `
559
+ + `that looks applied and never is — no error, no builder warning. Either set `
560
+ + `\`header_transparent: true\` DELIBERATELY in the same call (a transparent header is the `
561
+ + `exception, not a default — leave it off when in doubt), or drop ${list} from the props. `
562
+ + `To inspect or repair the transparent header properly use `
563
+ + `yootheme_builder_header_transparency_set({ template_id: "<id>" }) — it targets the FIRST `
564
+ + `section by itself (YOOtheme reads these props there only) and dry-runs by default.`,
565
+ error_code: 'header_transparent_dead_prop',
566
+ context: {
567
+ element_path: elementPath,
568
+ dead_prop_keys: [...deadProps],
569
+ master_switch: HEADER_TRANSPARENT_PROP,
570
+ },
571
+ hint: 'Re-send without the dead prop(s), or add `header_transparent: true` when the customer '
572
+ + 'actually asked for a transparent header. Prefer '
573
+ + 'yootheme_builder_header_transparency_set (advanced gateway) — it also checks the '
574
+ + 'first-section rule and the theme\'s own --uk-inverse declaration, neither of which is '
575
+ + 'readable from here.',
576
+ }, { isError: true });
577
+ }
578
+ /**
579
+ * Guard a props write against the transparent-header failure modes.
580
+ *
581
+ * Pure: takes the write's own payload (plus its merge/unset semantics) and
582
+ * returns a rejection, the props to send, and any warnings. No I/O — it never
583
+ * needs the element type either, because the three props are namespaced and
584
+ * exist on `section` alone.
585
+ */
586
+ export function guardHeaderTransparencyWrite(opts) {
587
+ const { props, elementPath } = opts;
588
+ const pass = { rejection: null, props, warnings: [] };
589
+ if (props === undefined || props === null || typeof props !== 'object')
590
+ return pass;
591
+ const touchesHeader = Object.prototype.hasOwnProperty.call(props, HEADER_TRANSPARENT_PROP)
592
+ || Object.prototype.hasOwnProperty.call(props, HEADER_TRANSPARENT_TEXT_COLOR_PROP)
593
+ || Object.prototype.hasOwnProperty.call(props, HEADER_TRANSPARENT_NOPLACEHOLDER_PROP);
594
+ // A write that mentions none of the three props changes nothing about the
595
+ // transparent header — leave it completely alone (same props reference).
596
+ if (!touchesHeader)
597
+ return pass;
598
+ const replaces = opts.merge !== true;
599
+ const unset = new Set(opts.unset ?? []);
600
+ const transparent = resolveAfterWrite(props, HEADER_TRANSPARENT_PROP, unset, replaces, isHeaderTruthyFlag, false);
601
+ const textColor = resolveAfterWrite(props, HEADER_TRANSPARENT_TEXT_COLOR_PROP, unset, replaces, readHeaderTextColor, '');
602
+ const noPlaceholder = resolveAfterWrite(props, HEADER_TRANSPARENT_NOPLACEHOLDER_PROP, unset, replaces, isHeaderTruthyFlag, false);
603
+ // ── Class A (a1): a prop YOOtheme will never read ──────────────────
604
+ if (transparent === false) {
605
+ const dead = [];
606
+ if (textColor !== 'unknown' && textColor !== '')
607
+ dead.push(HEADER_TRANSPARENT_TEXT_COLOR_PROP);
608
+ if (noPlaceholder === true)
609
+ dead.push(HEADER_TRANSPARENT_NOPLACEHOLDER_PROP);
610
+ if (dead.length > 0) {
611
+ return {
612
+ rejection: deadPropRejection(dead, elementPath, Object.prototype.hasOwnProperty.call(props, HEADER_TRANSPARENT_PROP)
613
+ || unset.has(HEADER_TRANSPARENT_PROP)),
614
+ props,
615
+ warnings: [],
616
+ };
617
+ }
618
+ }
619
+ // Everything below only applies once the header IS transparent afterwards.
620
+ if (transparent !== true)
621
+ return pass;
622
+ const warnings = [];
623
+ let outProps = props;
624
+ // ── The safe default: '' (the theme's own), never 'light' ─────────
625
+ const statesColour = Object.prototype.hasOwnProperty.call(props, HEADER_TRANSPARENT_TEXT_COLOR_PROP);
626
+ if (!statesColour) {
627
+ if (textColor === 'unknown') {
628
+ // merge:true — the stored colour is unreadable from here. Seeding
629
+ // '' would CLOBBER a value that was set deliberately (or measured
630
+ // over a hero medium), so say so instead of acting on a guess.
631
+ warnings.push({
632
+ code: 'header_transparent_text_color_unstated',
633
+ message: 'This merge update turns the transparent header ON without stating '
634
+ + '`header_transparent_text_color`, and the stored value cannot be read from here — so '
635
+ + 'nothing was seeded. State the colour explicitly (`""` = the theme default; `"light"` '
636
+ + 'is WHITE navigation text and is never a safe guess), or use '
637
+ + 'yootheme_builder_header_transparency_set, which reads the theme\'s own --uk-inverse '
638
+ + 'declaration.',
639
+ });
640
+ }
641
+ else if (!unset.has(HEADER_TRANSPARENT_TEXT_COLOR_PROP)) {
642
+ // Full replace: the resulting props would carry no colour at all.
643
+ // Record the theme default EXPLICITLY so the layout states the
644
+ // deliberate choice — and so nothing downstream fills in 'light'.
645
+ outProps = { ...props, [HEADER_TRANSPARENT_TEXT_COLOR_PROP]: '' };
646
+ warnings.push({
647
+ code: 'header_transparent_text_color_defaulted',
648
+ message: 'The transparent header was turned on without a colour, so '
649
+ + '`header_transparent_text_color` was written as `""` — the theme\'s own default for '
650
+ + 'this section style. It is never defaulted to `"light"`, which is WHITE navigation '
651
+ + 'text and recolours even over a flat theme background. To choose deliberately, read '
652
+ + 'the theme declaration via yootheme_builder_header_transparency_set (dry run).',
653
+ });
654
+ }
655
+ }
656
+ // ── Class C: a medium hides the background the theme describes ────
657
+ if (resolveMediaBackdrop(props, unset, replaces) === true) {
658
+ warnings.push({
659
+ code: 'header_contrast_unverifiable_over_media',
660
+ message: 'This section has an image or video behind the transparent header. The medium covers '
661
+ + 'exactly the background the theme\'s --uk-inverse declaration describes, so NO navigation '
662
+ + 'colour is verifiable from the props here and none is safer than another (not even `""`). '
663
+ + 'Nothing was changed or recommended: LOOK at the rendered page at the customer\'s '
664
+ + 'viewport — unscrolled AND after scrolling, because a sticky header drops its '
665
+ + 'transparency — and set what you SAW.',
666
+ });
667
+ }
668
+ return { rejection: null, props: outProps, warnings };
669
+ }
670
+ /**
671
+ * Merge client-side warnings into a REST response body so a successful write
672
+ * still carries them. A non-object body (or an empty warning list) is returned
673
+ * untouched, so nothing that has no place to put them is reshaped.
674
+ */
675
+ export function withHeaderTransparencyWarnings(data, warnings) {
676
+ if (warnings.length === 0)
677
+ return data;
678
+ if (data === null || typeof data !== 'object' || Array.isArray(data)) {
679
+ return { data, warnings: [...warnings] };
680
+ }
681
+ const existing = data.warnings;
682
+ const merged = Array.isArray(existing) ? [...existing, ...warnings] : [...warnings];
683
+ return { ...data, warnings: merged };
684
+ }
205
685
  //# sourceMappingURL=schema-validation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema-validation.js","sourceRoot":"","sources":["../../../src/tools/elements/schema-validation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema-validation.js","sourceRoot":"","sources":["../../../src/tools/elements/schema-validation.ts"],"names":[],"mappings":"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"}