emdash 0.19.0 → 0.20.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 (403) hide show
  1. package/dist/{adapters-C5AWLJSD.d.mts → adapters-BzIHV3sw.d.mts} +1 -1
  2. package/dist/{adapters-C5AWLJSD.d.mts.map → adapters-BzIHV3sw.d.mts.map} +1 -1
  3. package/dist/{allowed-origins-CyYLEJkp.mjs → allowed-origins-B1u7Qnvg.mjs} +2 -2
  4. package/dist/{allowed-origins-CyYLEJkp.mjs.map → allowed-origins-B1u7Qnvg.mjs.map} +1 -1
  5. package/dist/api/route-utils.d.mts +3 -3
  6. package/dist/api/route-utils.mjs +5 -5
  7. package/dist/api/schemas/index.d.mts +1 -1
  8. package/dist/api/schemas/index.mjs +2 -2
  9. package/dist/{api-BZ6bhjYs.mjs → api-DStv36ik.mjs} +36 -5
  10. package/dist/api-DStv36ik.mjs.map +1 -0
  11. package/dist/{api-tokens-VrXNiNvV.mjs → api-tokens-DPfhPu5V.mjs} +2 -2
  12. package/dist/{api-tokens-VrXNiNvV.mjs.map → api-tokens-DPfhPu5V.mjs.map} +1 -1
  13. package/dist/{apply-hQkKKBCf.mjs → apply-Dr7snAMT.mjs} +7 -7
  14. package/dist/{apply-hQkKKBCf.mjs.map → apply-Dr7snAMT.mjs.map} +1 -1
  15. package/dist/astro/index.d.mts +10 -10
  16. package/dist/astro/index.mjs +3 -3
  17. package/dist/astro/middleware/auth.d.mts +9 -9
  18. package/dist/astro/middleware/auth.mjs +4 -4
  19. package/dist/astro/middleware/redirect.mjs +1 -1
  20. package/dist/astro/middleware/request-context.mjs +1 -1
  21. package/dist/astro/middleware/setup.mjs +1 -1
  22. package/dist/astro/middleware.d.mts +1 -1
  23. package/dist/astro/middleware.d.mts.map +1 -1
  24. package/dist/astro/middleware.mjs +63 -112
  25. package/dist/astro/middleware.mjs.map +1 -1
  26. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +2 -2
  27. package/dist/astro/routes/api/admin/allowed-domains/index.mjs +2 -2
  28. package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +2 -2
  29. package/dist/astro/routes/api/admin/api-tokens/index.mjs +2 -2
  30. package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +2 -2
  31. package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +4 -4
  32. package/dist/astro/routes/api/admin/byline-fields/index.mjs +4 -4
  33. package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +4 -4
  34. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +6 -6
  35. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +6 -6
  36. package/dist/astro/routes/api/admin/bylines/index.mjs +6 -6
  37. package/dist/astro/routes/api/admin/comments/_id_/status.mjs +6 -6
  38. package/dist/astro/routes/api/admin/comments/_id_.mjs +2 -2
  39. package/dist/astro/routes/api/admin/comments/bulk.mjs +4 -4
  40. package/dist/astro/routes/api/admin/comments/counts.mjs +2 -2
  41. package/dist/astro/routes/api/admin/comments/index.mjs +4 -4
  42. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +1 -1
  43. package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +1 -1
  44. package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +1 -1
  45. package/dist/astro/routes/api/admin/oauth-clients/index.mjs +1 -1
  46. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +14 -14
  47. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +14 -14
  48. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +14 -14
  49. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +14 -14
  50. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +14 -14
  51. package/dist/astro/routes/api/admin/plugins/index.mjs +14 -14
  52. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +1 -1
  53. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +14 -14
  54. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +14 -14
  55. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +14 -14
  56. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +14 -14
  57. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs +15 -15
  58. package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +14 -14
  59. package/dist/astro/routes/api/admin/plugins/registry/install.mjs +15 -15
  60. package/dist/astro/routes/api/admin/plugins/updates.mjs +14 -14
  61. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +14 -14
  62. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +1 -1
  63. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +14 -14
  64. package/dist/astro/routes/api/admin/users/_id_/index.mjs +2 -2
  65. package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +1 -1
  66. package/dist/astro/routes/api/admin/users/index.mjs +2 -2
  67. package/dist/astro/routes/api/auth/dev-bypass.mjs +2 -2
  68. package/dist/astro/routes/api/auth/invite/complete.mjs +6 -6
  69. package/dist/astro/routes/api/auth/invite/index.mjs +3 -3
  70. package/dist/astro/routes/api/auth/invite/register-options.mjs +5 -5
  71. package/dist/astro/routes/api/auth/logout.mjs +1 -1
  72. package/dist/astro/routes/api/auth/magic-link/send.mjs +4 -4
  73. package/dist/astro/routes/api/auth/magic-link/verify.mjs +1 -1
  74. package/dist/astro/routes/api/auth/me.mjs +2 -2
  75. package/dist/astro/routes/api/auth/mode.mjs +1 -1
  76. package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +3 -3
  77. package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
  78. package/dist/astro/routes/api/auth/passkey/_id_.mjs +2 -2
  79. package/dist/astro/routes/api/auth/passkey/options.mjs +6 -6
  80. package/dist/astro/routes/api/auth/passkey/register/options.mjs +5 -5
  81. package/dist/astro/routes/api/auth/passkey/register/verify.mjs +6 -6
  82. package/dist/astro/routes/api/auth/passkey/verify.mjs +6 -6
  83. package/dist/astro/routes/api/auth/signup/complete.mjs +6 -6
  84. package/dist/astro/routes/api/auth/signup/request.mjs +4 -4
  85. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +6 -6
  86. package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +1 -1
  87. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +1 -1
  88. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +1 -1
  89. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +1 -1
  90. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +4 -4
  91. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +3 -3
  92. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +1 -1
  93. package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +1 -1
  94. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +3 -3
  95. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +5 -5
  96. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +1 -1
  97. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +1 -1
  98. package/dist/astro/routes/api/content/_collection_/_id_.mjs +3 -3
  99. package/dist/astro/routes/api/content/_collection_/authors.mjs +1 -1
  100. package/dist/astro/routes/api/content/_collection_/index.mjs +3 -3
  101. package/dist/astro/routes/api/content/_collection_/trash.mjs +3 -3
  102. package/dist/astro/routes/api/dashboard.mjs +1 -1
  103. package/dist/astro/routes/api/import/probe.d.mts +3 -3
  104. package/dist/astro/routes/api/import/probe.mjs +3 -3
  105. package/dist/astro/routes/api/import/wordpress/analyze.mjs +1 -1
  106. package/dist/astro/routes/api/import/wordpress/execute.d.mts +9 -9
  107. package/dist/astro/routes/api/import/wordpress/execute.mjs +3 -3
  108. package/dist/astro/routes/api/import/wordpress/media.mjs +3 -3
  109. package/dist/astro/routes/api/import/wordpress/prepare.mjs +3 -3
  110. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +3 -3
  111. package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
  112. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +3 -3
  113. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +1 -1
  114. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +3 -3
  115. package/dist/astro/routes/api/manifest.mjs +2 -2
  116. package/dist/astro/routes/api/mcp.mjs +18 -18
  117. package/dist/astro/routes/api/media/_id_/confirm.mjs +3 -3
  118. package/dist/astro/routes/api/media/_id_.mjs +3 -3
  119. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +1 -1
  120. package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +1 -1
  121. package/dist/astro/routes/api/media/providers/index.mjs +1 -1
  122. package/dist/astro/routes/api/media/upload-url.mjs +4 -4
  123. package/dist/astro/routes/api/media.mjs +4 -4
  124. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +3 -3
  125. package/dist/astro/routes/api/menus/_name_/items.mjs +3 -3
  126. package/dist/astro/routes/api/menus/_name_/reorder.mjs +3 -3
  127. package/dist/astro/routes/api/menus/_name_/translations.mjs +3 -3
  128. package/dist/astro/routes/api/menus/_name_.mjs +3 -3
  129. package/dist/astro/routes/api/menus/index.mjs +3 -3
  130. package/dist/astro/routes/api/oauth/authorize.mjs +6 -6
  131. package/dist/astro/routes/api/oauth/device/authorize.mjs +3 -3
  132. package/dist/astro/routes/api/oauth/device/code.mjs +5 -5
  133. package/dist/astro/routes/api/oauth/device/token.mjs +4 -4
  134. package/dist/astro/routes/api/oauth/register.mjs +1 -1
  135. package/dist/astro/routes/api/oauth/token/refresh.mjs +3 -3
  136. package/dist/astro/routes/api/oauth/token/revoke.mjs +3 -3
  137. package/dist/astro/routes/api/oauth/token.mjs +4 -4
  138. package/dist/astro/routes/api/openapi.json.mjs +1 -1
  139. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +2 -2
  140. package/dist/astro/routes/api/redirects/404s/index.mjs +4 -4
  141. package/dist/astro/routes/api/redirects/404s/summary.mjs +4 -4
  142. package/dist/astro/routes/api/redirects/_id_.mjs +4 -4
  143. package/dist/astro/routes/api/redirects/index.mjs +4 -4
  144. package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +1 -1
  145. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +1 -1
  146. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +14 -14
  147. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +14 -14
  148. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +14 -14
  149. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +14 -14
  150. package/dist/astro/routes/api/schema/collections/index.mjs +14 -14
  151. package/dist/astro/routes/api/schema/index.mjs +5 -10
  152. package/dist/astro/routes/api/schema/index.mjs.map +1 -1
  153. package/dist/astro/routes/api/schema/orphans/_slug_.mjs +14 -14
  154. package/dist/astro/routes/api/schema/orphans/index.mjs +14 -14
  155. package/dist/astro/routes/api/search/enable.mjs +5 -5
  156. package/dist/astro/routes/api/search/index.mjs +4 -4
  157. package/dist/astro/routes/api/search/rebuild.mjs +5 -5
  158. package/dist/astro/routes/api/search/stats.mjs +3 -3
  159. package/dist/astro/routes/api/search/suggest.mjs +4 -4
  160. package/dist/astro/routes/api/sections/_slug_.mjs +5 -5
  161. package/dist/astro/routes/api/sections/index.mjs +5 -5
  162. package/dist/astro/routes/api/settings/email.mjs +1 -1
  163. package/dist/astro/routes/api/settings.mjs +6 -6
  164. package/dist/astro/routes/api/setup/admin-verify.mjs +7 -7
  165. package/dist/astro/routes/api/setup/admin.mjs +6 -6
  166. package/dist/astro/routes/api/setup/dev-bypass.mjs +10 -10
  167. package/dist/astro/routes/api/setup/index.mjs +9 -9
  168. package/dist/astro/routes/api/setup/status.mjs +2 -2
  169. package/dist/astro/routes/api/snapshot.mjs +3 -3
  170. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +6 -6
  171. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +6 -6
  172. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +6 -6
  173. package/dist/astro/routes/api/taxonomies/index.mjs +6 -6
  174. package/dist/astro/routes/api/themes/preview.mjs +3 -3
  175. package/dist/astro/routes/api/well-known/auth.mjs +1 -1
  176. package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +2 -2
  177. package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +2 -2
  178. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +3 -3
  179. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +6 -5
  180. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs.map +1 -1
  181. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +6 -5
  182. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs.map +1 -1
  183. package/dist/astro/routes/api/widget-areas/_name_.mjs +4 -3
  184. package/dist/astro/routes/api/widget-areas/_name_.mjs.map +1 -1
  185. package/dist/astro/routes/api/widget-areas/index.mjs +6 -5
  186. package/dist/astro/routes/api/widget-areas/index.mjs.map +1 -1
  187. package/dist/astro/routes/api/widget-components.mjs +1 -1
  188. package/dist/astro/routes/robots.txt.mjs +3 -3
  189. package/dist/astro/routes/sitemap-_collection_.xml.d.mts.map +1 -1
  190. package/dist/astro/routes/sitemap-_collection_.xml.mjs +12 -5
  191. package/dist/astro/routes/sitemap-_collection_.xml.mjs.map +1 -1
  192. package/dist/astro/routes/sitemap.xml.mjs +4 -4
  193. package/dist/astro/types.d.mts +12 -12
  194. package/dist/auth/providers/github.d.mts +1 -1
  195. package/dist/auth/providers/google.d.mts +1 -1
  196. package/dist/{authorize-C_8t2KGa.mjs → authorize-DsMSVSaY.mjs} +1 -1
  197. package/dist/{authorize-C_8t2KGa.mjs.map → authorize-DsMSVSaY.mjs.map} +1 -1
  198. package/dist/{byline-fields-C_OsR-KF.mjs → byline-fields--WxSNS79.mjs} +1 -1
  199. package/dist/{byline-fields-C_OsR-KF.mjs.map → byline-fields--WxSNS79.mjs.map} +1 -1
  200. package/dist/{byline-fields-51kg6Vuv.mjs → byline-fields-8TMtkBnH.mjs} +2 -2
  201. package/dist/{byline-fields-51kg6Vuv.mjs.map → byline-fields-8TMtkBnH.mjs.map} +1 -1
  202. package/dist/{byline-fields-DYXKDuNX.d.mts → byline-fields-DbibsvTl.d.mts} +5 -1
  203. package/dist/byline-fields-DbibsvTl.d.mts.map +1 -0
  204. package/dist/{bylines-Cx5n-WqP.mjs → bylines-BdxWCnPL.mjs} +1 -1
  205. package/dist/{bylines-Cx5n-WqP.mjs.map → bylines-BdxWCnPL.mjs.map} +1 -1
  206. package/dist/{bylines-wurS258E.mjs → bylines-s8c2DXbH.mjs} +3 -3
  207. package/dist/{bylines-wurS258E.mjs.map → bylines-s8c2DXbH.mjs.map} +1 -1
  208. package/dist/{challenge-store-DGwuCc4R.mjs → challenge-store-DXX3rfdI.mjs} +1 -1
  209. package/dist/{challenge-store-DGwuCc4R.mjs.map → challenge-store-DXX3rfdI.mjs.map} +1 -1
  210. package/dist/cli/index.mjs +11 -10
  211. package/dist/cli/index.mjs.map +1 -1
  212. package/dist/client/cf-access.d.mts +1 -1
  213. package/dist/client/index.d.mts +1 -1
  214. package/dist/client/index.mjs +1 -1
  215. package/dist/{comments-CJ0RZsYR.mjs → comments-Vkivawyl.mjs} +1 -1
  216. package/dist/{comments-CJ0RZsYR.mjs.map → comments-Vkivawyl.mjs.map} +1 -1
  217. package/dist/{components-CTfpu3PZ.mjs → components-CK0cuUoH.mjs} +1 -1
  218. package/dist/{components-CTfpu3PZ.mjs.map → components-CK0cuUoH.mjs.map} +1 -1
  219. package/dist/{context-GG52SPgh.mjs → context-Y7BRkWes.mjs} +2 -2
  220. package/dist/{context-GG52SPgh.mjs.map → context-Y7BRkWes.mjs.map} +1 -1
  221. package/dist/database/instrumentation.d.mts +10 -1
  222. package/dist/database/instrumentation.d.mts.map +1 -1
  223. package/dist/database/instrumentation.mjs +13 -1
  224. package/dist/database/instrumentation.mjs.map +1 -1
  225. package/dist/db/index.d.mts +3 -3
  226. package/dist/db/libsql.d.mts +1 -1
  227. package/dist/db/postgres.d.mts +1 -1
  228. package/dist/db/sqlite.d.mts +1 -1
  229. package/dist/{default-xLFNSsZ9.mjs → default-IlBaTFxM.mjs} +1 -1
  230. package/dist/{default-xLFNSsZ9.mjs.map → default-IlBaTFxM.mjs.map} +1 -1
  231. package/dist/{device-flow-s6_q3T7A.mjs → device-flow-R23SIbQ2.mjs} +4 -4
  232. package/dist/{device-flow-s6_q3T7A.mjs.map → device-flow-R23SIbQ2.mjs.map} +1 -1
  233. package/dist/{escape-bIyGoW5W.mjs → escape-Ds07EEyu.mjs} +1 -1
  234. package/dist/{escape-bIyGoW5W.mjs.map → escape-Ds07EEyu.mjs.map} +1 -1
  235. package/dist/{index-FfiTQJq2.d.mts → index-B1keaX5Y.d.mts} +43 -12
  236. package/dist/{index-FfiTQJq2.d.mts.map → index-B1keaX5Y.d.mts.map} +1 -1
  237. package/dist/{index-BpYeJO1E.d.mts → index-DR56od45.d.mts} +3 -3
  238. package/dist/{index-BpYeJO1E.d.mts.map → index-DR56od45.d.mts.map} +1 -1
  239. package/dist/index.d.mts +16 -16
  240. package/dist/index.mjs +22 -22
  241. package/dist/{load-B84ohfBk.mjs → load-BBetCvLC.mjs} +1 -1
  242. package/dist/{load-B84ohfBk.mjs.map → load-BBetCvLC.mjs.map} +1 -1
  243. package/dist/{loader-CpZKpFz0.mjs → loader-ZN1ll-d-.mjs} +11 -14
  244. package/dist/loader-ZN1ll-d-.mjs.map +1 -0
  245. package/dist/{manifest-schema-Cj-YrzrF.mjs → manifest-schema-BtwbL_vj.mjs} +55 -2
  246. package/dist/manifest-schema-BtwbL_vj.mjs.map +1 -0
  247. package/dist/media/index.d.mts +1 -1
  248. package/dist/media/local-runtime.d.mts +11 -11
  249. package/dist/media/local-runtime.mjs +2 -2
  250. package/dist/{media-allowlist-CMcoYIjQ.mjs → media-allowlist-Dknq-OFY.mjs} +1 -1
  251. package/dist/{media-allowlist-CMcoYIjQ.mjs.map → media-allowlist-Dknq-OFY.mjs.map} +1 -1
  252. package/dist/media-url-VClf8glU.mjs +26 -0
  253. package/dist/media-url-VClf8glU.mjs.map +1 -0
  254. package/dist/{menus-Dp9xporj.mjs → menus-DrQLusqj.mjs} +6 -33
  255. package/dist/menus-DrQLusqj.mjs.map +1 -0
  256. package/dist/{mode-BjlXswIw.mjs → mode-CO2vQHfq.mjs} +1 -1
  257. package/dist/{mode-BjlXswIw.mjs.map → mode-CO2vQHfq.mjs.map} +1 -1
  258. package/dist/{oauth-authorization-1aPAYjiC.mjs → oauth-authorization-Bw4NdF_S.mjs} +4 -4
  259. package/dist/{oauth-authorization-1aPAYjiC.mjs.map → oauth-authorization-Bw4NdF_S.mjs.map} +1 -1
  260. package/dist/{oauth-clients-8mPDStMv.mjs → oauth-clients-BGGFp57s.mjs} +1 -1
  261. package/dist/{oauth-clients-8mPDStMv.mjs.map → oauth-clients-BGGFp57s.mjs.map} +1 -1
  262. package/dist/{oauth-state-store-BJ7YtrfD.mjs → oauth-state-store-97x0xtN2.mjs} +1 -1
  263. package/dist/{oauth-state-store-BJ7YtrfD.mjs.map → oauth-state-store-97x0xtN2.mjs.map} +1 -1
  264. package/dist/{oauth-user-lookup-BdDSDvjF.mjs → oauth-user-lookup-B_vnZHKO.mjs} +1 -1
  265. package/dist/{oauth-user-lookup-BdDSDvjF.mjs.map → oauth-user-lookup-B_vnZHKO.mjs.map} +1 -1
  266. package/dist/{options-D4MnavW_.d.mts → options-DyYIYpPd.d.mts} +3 -3
  267. package/dist/{options-D4MnavW_.d.mts.map → options-DyYIYpPd.d.mts.map} +1 -1
  268. package/dist/page/index.d.mts +2 -2
  269. package/dist/{passkey-config-BDVM86Tj.mjs → passkey-config-C3QgnQnU.mjs} +1 -1
  270. package/dist/{passkey-config-BDVM86Tj.mjs.map → passkey-config-C3QgnQnU.mjs.map} +1 -1
  271. package/dist/{placeholder-B9lUUEmj.d.mts → placeholder-CVBv5z8k.d.mts} +1 -1
  272. package/dist/{placeholder-B9lUUEmj.d.mts.map → placeholder-CVBv5z8k.d.mts.map} +1 -1
  273. package/dist/plugin-types.d.mts +1 -1
  274. package/dist/plugin-utils.d.mts +9 -9
  275. package/dist/plugins/adapt-sandbox-entry.d.mts +9 -9
  276. package/dist/plugins/adapt-sandbox-entry.mjs +2 -2
  277. package/dist/{public-url-egRHCy1m.mjs → public-url-BFVC2OTJ.mjs} +1 -1
  278. package/dist/{public-url-egRHCy1m.mjs.map → public-url-BFVC2OTJ.mjs.map} +1 -1
  279. package/dist/{query-BFQ029Ts.mjs → query-CbUcI4Xk.mjs} +18 -8
  280. package/dist/query-CbUcI4Xk.mjs.map +1 -0
  281. package/dist/{rate-limit-ClFFUga6.mjs → rate-limit-C7hjdkS5.mjs} +1 -1
  282. package/dist/{rate-limit-ClFFUga6.mjs.map → rate-limit-C7hjdkS5.mjs.map} +1 -1
  283. package/dist/{redirect-Cw3JTlmj.mjs → redirect-B_q19j4v.mjs} +1 -1
  284. package/dist/{redirect-Cw3JTlmj.mjs.map → redirect-B_q19j4v.mjs.map} +1 -1
  285. package/dist/{redirects-DEygMrRO.mjs → redirects-CCbCqCCd.mjs} +4 -2
  286. package/dist/redirects-CCbCqCCd.mjs.map +1 -0
  287. package/dist/{redirects-OIu6vQ2i.mjs → redirects-DxVoR7PI.mjs} +1 -1
  288. package/dist/{redirects-OIu6vQ2i.mjs.map → redirects-DxVoR7PI.mjs.map} +1 -1
  289. package/dist/request-context.d.mts +7 -0
  290. package/dist/request-context.d.mts.map +1 -1
  291. package/dist/request-context.mjs +2 -1
  292. package/dist/request-context.mjs.map +1 -1
  293. package/dist/{runner-BcRuXq_h.d.mts → runner-DTdhuI9i.d.mts} +2 -2
  294. package/dist/{runner-BcRuXq_h.d.mts.map → runner-DTdhuI9i.d.mts.map} +1 -1
  295. package/dist/runtime.d.mts +10 -10
  296. package/dist/runtime.mjs +1 -1
  297. package/dist/{schema-CS7Eg5gh.mjs → schema-C1E70ug_.mjs} +2 -2
  298. package/dist/{schema-CS7Eg5gh.mjs.map → schema-C1E70ug_.mjs.map} +1 -1
  299. package/dist/{search-o-aQzHI1.mjs → search-B3SGZw91.mjs} +2 -2
  300. package/dist/{search-o-aQzHI1.mjs.map → search-B3SGZw91.mjs.map} +1 -1
  301. package/dist/{secrets-C_ZtRos3.mjs → secrets-ChPTmy9x.mjs} +1 -1
  302. package/dist/{secrets-C_ZtRos3.mjs.map → secrets-ChPTmy9x.mjs.map} +1 -1
  303. package/dist/{sections-DhsZ0ns9.mjs → sections-D_lVzwRZ.mjs} +2 -2
  304. package/dist/{sections-DhsZ0ns9.mjs.map → sections-D_lVzwRZ.mjs.map} +1 -1
  305. package/dist/seed/index.d.mts +2 -2
  306. package/dist/seed/index.mjs +6 -6
  307. package/dist/seo/index.d.mts +1 -1
  308. package/dist/seo/index.d.mts.map +1 -1
  309. package/dist/seo/index.mjs +3 -12
  310. package/dist/seo/index.mjs.map +1 -1
  311. package/dist/{seo-DfjLvu8i.mjs → seo-D_LPkOtu.mjs} +4 -3
  312. package/dist/seo-D_LPkOtu.mjs.map +1 -0
  313. package/dist/{service-DAxg8RPR.mjs → service-ChDcsTBs.mjs} +2 -2
  314. package/dist/{service-DAxg8RPR.mjs.map → service-ChDcsTBs.mjs.map} +1 -1
  315. package/dist/{settings-DIsbHTRE.mjs → settings-Cv47v9u8.mjs} +2 -2
  316. package/dist/{settings-DIsbHTRE.mjs.map → settings-Cv47v9u8.mjs.map} +1 -1
  317. package/dist/settings-DfxiWY_s.mjs +411 -0
  318. package/dist/settings-DfxiWY_s.mjs.map +1 -0
  319. package/dist/{setup-complete-Yuv78yua.mjs → setup-complete-yvPE4OsP.mjs} +1 -1
  320. package/dist/{setup-complete-Yuv78yua.mjs.map → setup-complete-yvPE4OsP.mjs.map} +1 -1
  321. package/dist/{setup-nonce-Bm0uKqmf.mjs → setup-nonce-C9aFzb94.mjs} +1 -1
  322. package/dist/{setup-nonce-Bm0uKqmf.mjs.map → setup-nonce-C9aFzb94.mjs.map} +1 -1
  323. package/dist/{site-url-mEVmwIFi.mjs → site-url-CnHlmAs9.mjs} +1 -1
  324. package/dist/{site-url-mEVmwIFi.mjs.map → site-url-CnHlmAs9.mjs.map} +1 -1
  325. package/dist/storage/local.d.mts +1 -1
  326. package/dist/storage/s3.d.mts +1 -1
  327. package/dist/{taxonomies-UusDXv3C.mjs → taxonomies-BILwiyGk.mjs} +2 -2
  328. package/dist/{taxonomies-UusDXv3C.mjs.map → taxonomies-BILwiyGk.mjs.map} +1 -1
  329. package/dist/{taxonomies-BEW7S5AI.mjs → taxonomies-BdAmbOwx.mjs} +46 -9
  330. package/dist/taxonomies-BdAmbOwx.mjs.map +1 -0
  331. package/dist/{transport-BwQeeY2p.d.mts → transport-B7PPP2CC.d.mts} +1 -1
  332. package/dist/{transport-BwQeeY2p.d.mts.map → transport-B7PPP2CC.d.mts.map} +1 -1
  333. package/dist/{transport--Ck3RBin.mjs → transport-CmpLD7W3.mjs} +1 -1
  334. package/dist/{transport--Ck3RBin.mjs.map → transport-CmpLD7W3.mjs.map} +1 -1
  335. package/dist/{types-DWnN7weG.d.mts → types-BFgrqwSk.d.mts} +1 -1
  336. package/dist/{types-DWnN7weG.d.mts.map → types-BFgrqwSk.d.mts.map} +1 -1
  337. package/dist/{types-Qa7-HJJC.d.mts → types-BH8-30hc.d.mts} +1 -1
  338. package/dist/{types-Qa7-HJJC.d.mts.map → types-BH8-30hc.d.mts.map} +1 -1
  339. package/dist/{types-OT_Es5mp.d.mts → types-BPzXTV9x.d.mts} +1 -1
  340. package/dist/{types-OT_Es5mp.d.mts.map → types-BPzXTV9x.d.mts.map} +1 -1
  341. package/dist/{types-DbCWhHet.d.mts → types-BUUVn1zr.d.mts} +2 -2
  342. package/dist/types-BUUVn1zr.d.mts.map +1 -0
  343. package/dist/{types-DMwSpvcw.d.mts → types-CPAPl93j.d.mts} +9 -3
  344. package/dist/{types-DMwSpvcw.d.mts.map → types-CPAPl93j.d.mts.map} +1 -1
  345. package/dist/types-CZI4E3qG.mjs +3 -0
  346. package/dist/{types-kwqCOUxj.d.mts → types-D4kUqbHh.d.mts} +1 -1
  347. package/dist/{types-kwqCOUxj.d.mts.map → types-D4kUqbHh.d.mts.map} +1 -1
  348. package/dist/{types-WVmpZBJV.d.mts → types-DTniiNto.d.mts} +2 -2
  349. package/dist/{types-WVmpZBJV.d.mts.map → types-DTniiNto.d.mts.map} +1 -1
  350. package/dist/types-DZk_y-MU.mjs.map +1 -1
  351. package/dist/{types-DX6v9KzJ.d.mts → types-S15DXXNi.d.mts} +1 -1
  352. package/dist/{types-DX6v9KzJ.d.mts.map → types-S15DXXNi.d.mts.map} +1 -1
  353. package/dist/{validate-ZP9Dvg0P.mjs → validate-Bz4vqcX1.mjs} +1 -1
  354. package/dist/{validate-ZP9Dvg0P.mjs.map → validate-Bz4vqcX1.mjs.map} +1 -1
  355. package/dist/{validate-BPAHUSge.d.mts → validate-CNwkPWzz.d.mts} +5 -5
  356. package/dist/{validate-BPAHUSge.d.mts.map → validate-CNwkPWzz.d.mts.map} +1 -1
  357. package/dist/{validation-CE5i4q0c.mjs → validation-DgGTJm3u.mjs} +1 -1
  358. package/dist/{validation-CE5i4q0c.mjs.map → validation-DgGTJm3u.mjs.map} +1 -1
  359. package/dist/version-D-5txk2m.mjs +7 -0
  360. package/dist/{version-Dw0JXu45.mjs.map → version-D-5txk2m.mjs.map} +1 -1
  361. package/dist/{widgets-ClEnYQCH.mjs → widgets-DZfmAbE4.mjs} +47 -44
  362. package/dist/widgets-DZfmAbE4.mjs.map +1 -0
  363. package/package.json +10 -10
  364. package/src/api/handlers/marketplace.ts +2 -5
  365. package/src/api/handlers/registry.ts +70 -0
  366. package/src/api/handlers/seo.ts +9 -1
  367. package/src/api/schemas/schema.ts +13 -1
  368. package/src/astro/middleware.ts +20 -6
  369. package/src/astro/routes/api/schema/index.ts +7 -15
  370. package/src/astro/routes/sitemap-[collection].xml.ts +13 -2
  371. package/src/cli/commands/bundle-utils.ts +2 -0
  372. package/src/cli/commands/secrets.ts +2 -2
  373. package/src/database/instrumentation.ts +13 -0
  374. package/src/emdash-runtime.ts +31 -25
  375. package/src/loader.ts +24 -15
  376. package/src/plugins/manifest-schema.ts +75 -0
  377. package/src/plugins/marketplace.ts +2 -5
  378. package/src/plugins/types.ts +12 -0
  379. package/src/query.ts +13 -2
  380. package/src/request-context.ts +8 -0
  381. package/src/schema/types.ts +11 -1
  382. package/src/seo/index.ts +2 -28
  383. package/src/seo/media-url.ts +32 -0
  384. package/src/settings/index.ts +32 -40
  385. package/src/taxonomies/index.ts +78 -12
  386. package/src/utils/isolate-cache.ts +189 -0
  387. package/src/widgets/index.ts +57 -54
  388. package/dist/api-BZ6bhjYs.mjs.map +0 -1
  389. package/dist/byline-fields-DYXKDuNX.d.mts.map +0 -1
  390. package/dist/loader-CpZKpFz0.mjs.map +0 -1
  391. package/dist/manifest-schema-Cj-YrzrF.mjs.map +0 -1
  392. package/dist/menus-Dp9xporj.mjs.map +0 -1
  393. package/dist/query-BFQ029Ts.mjs.map +0 -1
  394. package/dist/redirects-DEygMrRO.mjs.map +0 -1
  395. package/dist/seo-DfjLvu8i.mjs.map +0 -1
  396. package/dist/settings-B1p-gPUK.mjs +0 -235
  397. package/dist/settings-B1p-gPUK.mjs.map +0 -1
  398. package/dist/taxonomies-BEW7S5AI.mjs.map +0 -1
  399. package/dist/types-Cj2S6FuC.mjs +0 -3
  400. package/dist/types-DbCWhHet.d.mts.map +0 -1
  401. package/dist/version-Dw0JXu45.mjs +0 -7
  402. package/dist/widgets-ClEnYQCH.mjs.map +0 -1
  403. /package/dist/{api-tokens-B6VgoE6M.mjs → api-tokens-Oq39ba-Z.mjs} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types-BUUVn1zr.d.mts","names":[],"sources":["../src/schema/types.ts"],"mappings":";;AAUA;;;;;AA2CA;;;AAAA,KA3CY,SAAA;;;;KA2CA,UAAA;;;;cAKC,oBAAA,EAAsB,MAAA,CAAO,SAAA,EAAW,UAAA;;;AAsBrD;KAAY,iBAAA;;;;KAWA,gBAAA;;;;;UAWK,gBAAA;EAChB,IAAA;EACA,IAAA;EAUA,KAAA;EACA,QAAA;EACA,OAAA;AAAA;AAAA,UAgBgB,eAAA;EAChB,QAAA;EACA,GAAA;EACA,GAAA;EACA,SAAA;EACA,SAAA;EACA,OAAA;EACA,OAAA;EACA,SAAA,GAAY,gBAAA;EACZ,QAAA;EACA,QAAA;EACA,gBAAA;AAAA;;;;UAMgB,kBAAA;EAChB,IAAA;EACA,WAAA;EACA,UAAA;EACA,aAAA;EAAA,CACC,GAAA;AAAA;;;;UAMe,UAAA;EAChB,EAAA;EACA,IAAA;EACA,KAAA;EACA,aAAA;EACA,WAAA;EACA,IAAA;EACA,QAAA,EAAU,iBAAA;EACV,MAAA,GAAS,gBAAA;EAPT;EASA,MAAA;EAPA;EASA,UAAA;EAPA;EASA,eAAA;EAPA;EASA,kBAAA;EARA;EAUA,uBAAA;EARA;EAUA,wBAAA;EACA,SAAA;EACA,SAAA;AAAA;;;;UAMgB,KAAA;EAChB,EAAA;EACA,YAAA;EACA,IAAA;EACA,KAAA;EACA,IAAA,EAAM,SAAA;EACN,UAAA,EAAY,UAAA;EACZ,QAAA;EACA,MAAA;EACA,YAAA;EACA,UAAA,GAAa,eAAA;EACb,MAAA;EACA,OAAA,GAAU,kBAAA;EACV,SAAA;EACA,UAAA;EATA;EAWA,YAAA;EACA,SAAA;AAAA;;;;UAMgB,qBAAA;EAChB,IAAA;EACA,KAAA;EACA,aAAA;EACA,WAAA;EACA,IAAA;EACA,QAAA,GAAW,iBAAA;EACX,MAAA,GAAS,gBAAA;EACT,UAAA;EACA,MAAA;EACA,eAAA;AAAA;;;;UAMgB,qBAAA;EAChB,KAAA;EACA,aAAA;EACA,WAAA;EACA,IAAA;EACA,QAAA,GAAW,iBAAA;EACX,UAAA;EACA,MAAA;EACA,eAAA;EACA,kBAAA;EACA,uBAAA;EACA,wBAAA;AAAA;;AAXD;;UAiBiB,gBAAA;EAChB,IAAA;EACA,KAAA;EACA,IAAA,EAAM,SAAA;EACN,QAAA;EACA,MAAA;EACA,YAAA;EACA,UAAA,GAAa,eAAA;EACb,MAAA;EACA,OAAA,GAAU,kBAAA;EACV,SAAA;EAlBA;EAoBA,UAAA;EAlBA;EAoBA,YAAA;AAAA;AAdD;;;AAAA,UAoBiB,gBAAA;EAChB,KAAA;EACA,QAAA;EACA,MAAA;EACA,YAAA;EACA,UAAA,GAAa,eAAA;EACb,MAAA;EACA,OAAA,GAAU,kBAAA;EACV,SAAA;EAxBA;EA0BA,UAAA;EAxBA;EA0BA,YAAA;AAAA;;;;UAMgB,oBAAA,SAA6B,UAAA;EAC7C,MAAA,EAAQ,KAAA;AAAA;;;AAnBT;;;;cA4Ba,oBAAA;;;;cAuBA,yBAAA;;;;;;KAuGD,gBAAA"}
@@ -1,6 +1,6 @@
1
- import { d as FieldType } from "./types-DbCWhHet.mjs";
1
+ import { d as FieldType } from "./types-BUUVn1zr.mjs";
2
2
  import { z } from "astro/zod";
3
- import { CAPABILITY_RENAMES, CurrentPluginCapability, DeprecatedPluginCapability, ManifestHookEntry, ManifestRouteEntry, PluginCapability, PluginStorageConfig, StorageCollectionConfig, isDeprecatedCapability, normalizeCapabilities, normalizeCapability } from "@emdash-cms/plugin-types";
3
+ import { CAPABILITY_RENAMES, CurrentPluginCapability, DeclaredAccess, DeprecatedPluginCapability, ManifestHookEntry, ManifestRouteEntry, PluginCapability, PluginStorageConfig, StorageCollectionConfig, isDeprecatedCapability, normalizeCapabilities, normalizeCapability } from "@emdash-cms/plugin-types";
4
4
  import "react/jsx-runtime";
5
5
  import { JSX } from "astro/jsx-runtime";
6
6
 
@@ -1181,6 +1181,12 @@ interface PluginAdminExports {
1181
1181
  interface PluginManifest {
1182
1182
  id: string;
1183
1183
  version: string;
1184
+ /**
1185
+ * The trust contract (see `@emdash-cms/plugin-types`). Authoritative;
1186
+ * `capabilities`/`allowedHosts` are derived from it at the parse boundary
1187
+ * via `reconcileManifestAccess`. Optional during the wire-format migration.
1188
+ */
1189
+ declaredAccess?: DeclaredAccess;
1184
1190
  capabilities: PluginCapability[];
1185
1191
  allowedHosts: string[];
1186
1192
  storage: PluginStorageConfig;
@@ -1192,4 +1198,4 @@ interface PluginManifest {
1192
1198
  }
1193
1199
  //#endregion
1194
1200
  export { PageMetadataHandler as $, EmailDeliverEvent as A, normalizeCapability as At, LogAccess as B, CronHandler as C, StorageCollectionConfig as Ct, EmailAfterSendHandler as D, WhereClause as Dt, EmailAfterSendEvent as E, UninstallHandler as Et, HookName as F, MediaItem as G, MediaAfterUploadEvent as H, HttpAccess as I, PageFragmentContribution as J, MediaUploadEvent as K, KVAccess as L, EmailMessage as M, FieldWidgetConfig as N, EmailBeforeSendEvent as O, isDeprecatedCapability as Ot, HookConfig as P, PageMetadataEvent as Q, LifecycleEvent as R, CronEvent as S, StorageCollection as St, DeprecatedPluginCapability as T, UninstallEvent as Tt, MediaAfterUploadHandler as U, MediaAccess as V, MediaBeforeUploadHandler as W, PageFragmentHandler as X, PageFragmentEvent as Y, PageMetadataContribution as Z, ContentBeforeDeleteHandler as _, RequestMeta as _t, CommentAfterCreateHandler as a, PluginAdminPage as at, ContentHookEvent as b, ResolvedPluginHooks as bt, CommentBeforeCreateEvent as c, PluginDefinition as ct, CommentModerateHandler as d, PluginRoute as dt, PageMetadataLinkRel as et, ContentAccess as f, PluginStorageConfig as ft, ContentAfterUnpublishHandler as g, QueryOptions as gt, ContentAfterSaveHandler as h, PublicPageContext as ht, CommentAfterCreateEvent as i, PluginAdminExports as it, EmailDeliverHandler as j, Element as jt, EmailBeforeSendHandler as k, normalizeCapabilities as kt, CommentBeforeCreateHandler as l, PluginHooks as lt, ContentAfterPublishHandler as m, PortableTextBlockField as mt, CAPABILITY_RENAMES as n, PaginatedResult as nt, CommentAfterModerateEvent as o, PluginCapability as ot, ContentAfterDeleteHandler as p, PortableTextBlockConfig as pt, ModerationDecision as q, CollectionCommentSettings as r, PluginAdminConfig as rt, CommentAfterModerateHandler as s, PluginContext as st, BreadcrumbItem as t, PagePlacement as tt, CommentModerateEvent as u, PluginManifest as ut, ContentBeforeSaveHandler as v, ResolvedHook as vt, CurrentPluginCapability as w, StoredComment as wt, ContentPublishStateChangeEvent as x, RouteContext as xt, ContentDeleteEvent as y, ResolvedPlugin as yt, LifecycleHandler as z };
1195
- //# sourceMappingURL=types-DMwSpvcw.d.mts.map
1201
+ //# sourceMappingURL=types-CPAPl93j.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types-DMwSpvcw.d.mts","names":["ConfirmDialog","title","text","confirm","deny","style","ButtonElement","type","action_id","label","value","TextInputElement","placeholder","initial_value","multiline","NumberInputElement","min","max","SelectElement","Array","options","optionsRoute","ToggleElement","description","SecretInputElement","has_value","CheckboxElement","DateInputElement","ComboboxElement","RadioElement","RepeaterSubField","RepeaterElement","Record","item_label","fields","min_items","max_items","MediaPickerElement","mime_type_filter","Element","FieldCondition","field","eq","neq","FormField","condition","TableColumn","key","format","sortable","StatItem","trend","ChartSeries","name","data","color","TimeseriesChartConfig","chart_type","series","x_axis_name","y_axis_name","height","gradient","CustomChartConfig","ChartConfig","BlockBase","block_id","HeaderBlock","SectionBlock","accessory","DividerBlock","FieldsBlock","TableBlock","columns","rows","next_cursor","page_action_id","empty_text","ActionsBlock","elements","StatsBlock","items","FormBlock","submit","ImageBlock","url","alt","ContextBlock","ColumnsBlock","Block","ChartBlock","config","BannerBlock","variant","MeterBlock","custom_value","CodeBlock","code","language","TabPanel","blocks","TabBlock","panels","default_tab","EmptyBlock","command_line","size","actions","AccordionBlock","default_open","BlockAction","FormSubmit","values","PageLoad","page","BlockInteraction","BlockResponse","toast","message","header","blockId","opts","section","divider","fieldsBlock","table","nextCursor","pageActionId","emptyText","actionsBlock","stats","form","actionId","image","context","columnsBlock","bannerBlock","textInput","initialValue","numberInput","select","toggle","button","secretInput","hasValue","checkbox","dateInput","combobox","radio","repeater","itemLabel","minItems","maxItems","mediaPicker","mimeTypeFilter","timeseriesChart","xAxisName","yAxisName","customChart","meter","customValue","codeBlock","tabBlock","defaultTab","empty","commandLine","accordion","defaultOpen","banner","tab","ValidationError","path","validateBlocks","valid","errors","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","R","S","T","U","V","W","X","Y","Z","_","a","b","c","d","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"],"sources":["../../blocks/dist/validation-5vL6669b.d.ts","../src/plugins/types.ts"],"mappings":"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"}
1
+ {"version":3,"file":"types-CPAPl93j.d.mts","names":["ConfirmDialog","title","text","confirm","deny","style","ButtonElement","type","action_id","label","value","TextInputElement","placeholder","initial_value","multiline","NumberInputElement","min","max","SelectElement","Array","options","optionsRoute","ToggleElement","description","SecretInputElement","has_value","CheckboxElement","DateInputElement","ComboboxElement","RadioElement","RepeaterSubField","RepeaterElement","Record","item_label","fields","min_items","max_items","MediaPickerElement","mime_type_filter","Element","FieldCondition","field","eq","neq","FormField","condition","TableColumn","key","format","sortable","StatItem","trend","ChartSeries","name","data","color","TimeseriesChartConfig","chart_type","series","x_axis_name","y_axis_name","height","gradient","CustomChartConfig","ChartConfig","BlockBase","block_id","HeaderBlock","SectionBlock","accessory","DividerBlock","FieldsBlock","TableBlock","columns","rows","next_cursor","page_action_id","empty_text","ActionsBlock","elements","StatsBlock","items","FormBlock","submit","ImageBlock","url","alt","ContextBlock","ColumnsBlock","Block","ChartBlock","config","BannerBlock","variant","MeterBlock","custom_value","CodeBlock","code","language","TabPanel","blocks","TabBlock","panels","default_tab","EmptyBlock","command_line","size","actions","AccordionBlock","default_open","BlockAction","FormSubmit","values","PageLoad","page","BlockInteraction","BlockResponse","toast","message","header","blockId","opts","section","divider","fieldsBlock","table","nextCursor","pageActionId","emptyText","actionsBlock","stats","form","actionId","image","context","columnsBlock","bannerBlock","textInput","initialValue","numberInput","select","toggle","button","secretInput","hasValue","checkbox","dateInput","combobox","radio","repeater","itemLabel","minItems","maxItems","mediaPicker","mimeTypeFilter","timeseriesChart","xAxisName","yAxisName","customChart","meter","customValue","codeBlock","tabBlock","defaultTab","empty","commandLine","accordion","defaultOpen","banner","tab","ValidationError","path","validateBlocks","valid","errors","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","R","S","T","U","V","W","X","Y","Z","_","a","b","c","d","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"],"sources":["../../blocks/dist/validation-5vL6669b.d.ts","../src/plugins/types.ts"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { CAPABILITY_RENAMES, capabilitiesToDeclaredAccess as capabilitiesToDeclaredAccess$1, declaredAccessToCapabilities as declaredAccessToCapabilities$1, isDeprecatedCapability, normalizeCapabilities, normalizeCapability } from "@emdash-cms/plugin-types";
2
+
3
+ export { normalizeCapabilities as a, isDeprecatedCapability as i, capabilitiesToDeclaredAccess$1 as n, normalizeCapability as o, declaredAccessToCapabilities$1 as r, CAPABILITY_RENAMES as t };
@@ -189,4 +189,4 @@ declare class EmDashStorageError extends Error {
189
189
  }
190
190
  //#endregion
191
191
  export { ListOptions as a, S3StorageConfig as c, Storage as d, StorageDescriptor as f, FileInfo as i, SignedUploadOptions as l, DownloadResult as n, ListResult as o, UploadResult as p, EmDashStorageError as r, LocalStorageConfig as s, CreateStorageFn as t, SignedUploadUrl as u };
192
- //# sourceMappingURL=types-kwqCOUxj.d.mts.map
192
+ //# sourceMappingURL=types-D4kUqbHh.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types-kwqCOUxj.d.mts","names":[],"sources":["../src/storage/types.ts"],"mappings":";;AAUA;;;;;;;;UAAiB,eAAA;EAoBhB;EAlBA,QAAA;EAkBS;EAhBT,MAAA;EAsBkC;;;;AAUnC;EA1BC,WAAA;;;;;;EAMA,eAAA;EAwBc;EAtBd,MAAA;EAiC0B;EA/B1B,SAAA;AAAA;;;;UAMgB,kBAAA;EAyByD;EAvBzE,SAAA;EA4B4B;EA1B5B,OAAA;AAAA;;;;UAMgB,iBAAA;EA0BZ;EAxBJ,UAAA;EA8B8B;EA5B9B,MAAA,EAAQ,MAAA;AAAA;;;;;;;;AAwCT;KA7BY,eAAA,IAAmB,MAAA,EAAQ,MAAA,sBAA4B,OAAA;;;;UAKlD,YAAA;EA8BhB;EA5BA,GAAA;EA8BA;EA5BA,GAAA;EA4BS;EA1BT,IAAA;AAAA;;;;UAMgB,cAAA;EAgChB;EA9BA,IAAA,EAAM,cAAA,CAAe,UAAA;EAgCZ;EA9BT,WAAA;EAoCgB;EAlChB,IAAA;AAAA;;;;UAMgB,eAAA;EAgCN;EA9BV,GAAA;EAoCgB;EAlChB,MAAA;;EAEA,OAAA,EAAS,MAAA;EAkCT;EAhCA,SAAA;AAAA;;;;UAMgB,mBAAA;EAsCA;EApChB,GAAA;;EAEA,WAAA;EAoCA;EAlCA,IAAA;EAsCA;EApCA,SAAA;AAAA;AA4CD;;;AAAA,UAtCiB,UAAA;EA4CA;EA1ChB,KAAA,EAAO,QAAA;EA0CsB;EAxC7B,UAAA;AAAA;;;;UAMgB,QAAA;EAyDD;EAvDf,GAAA;EAuD6B;EArD7B,IAAA;EA2D0D;EAzD1D,YAAA,EAAc,IAAA;EAyD2C;EAvDzD,IAAA;AAAA;;;;UAMgB,WAAA;EAoBa;EAlB7B,MAAA;EAmBC;EAjBD,KAAA;EAkBI;EAhBJ,MAAA;AAAA;;;;;;UAQgB,OAAA;EAwBhB;;;EApBA,MAAA,CAAO,OAAA;IACN,GAAA;IACA,IAAA,EAAM,MAAA,GAAS,UAAA,GAAa,cAAA,CAAe,UAAA;IAC3C,WAAA;EAAA,IACG,OAAA,CAAQ,YAAA;EA2BZ;;;EAtBA,QAAA,CAAS,GAAA,WAAc,OAAA,CAAQ,cAAA;EAsB2B;;;;EAhB1D,MAAA,CAAO,GAAA,WAAc,OAAA;EA2BT;;;EAtBZ,MAAA,CAAO,GAAA,WAAc,OAAA;EAsBkB;;;EAjBvC,IAAA,CAAK,OAAA,GAAU,WAAA,GAAc,OAAA,CAAQ,UAAA;EAmBpC;;;;EAbD,kBAAA,CAAmB,OAAA,EAAS,mBAAA,GAAsB,OAAA,CAAQ,eAAA;;;;EAK1D,YAAA,CAAa,GAAA;AAAA;;;;cAMD,kBAAA,SAA2B,KAAA;EAG/B,IAAA;EACS,KAAA;cAFhB,OAAA,UACO,IAAA,UACS,KAAA;AAAA"}
1
+ {"version":3,"file":"types-D4kUqbHh.d.mts","names":[],"sources":["../src/storage/types.ts"],"mappings":";;AAUA;;;;;;;;UAAiB,eAAA;EAoBhB;EAlBA,QAAA;EAkBS;EAhBT,MAAA;EAsBkC;;;;AAUnC;EA1BC,WAAA;;;;;;EAMA,eAAA;EAwBc;EAtBd,MAAA;EAiC0B;EA/B1B,SAAA;AAAA;;;;UAMgB,kBAAA;EAyByD;EAvBzE,SAAA;EA4B4B;EA1B5B,OAAA;AAAA;;;;UAMgB,iBAAA;EA0BZ;EAxBJ,UAAA;EA8B8B;EA5B9B,MAAA,EAAQ,MAAA;AAAA;;;;;;;;AAwCT;KA7BY,eAAA,IAAmB,MAAA,EAAQ,MAAA,sBAA4B,OAAA;;;;UAKlD,YAAA;EA8BhB;EA5BA,GAAA;EA8BA;EA5BA,GAAA;EA4BS;EA1BT,IAAA;AAAA;;;;UAMgB,cAAA;EAgChB;EA9BA,IAAA,EAAM,cAAA,CAAe,UAAA;EAgCZ;EA9BT,WAAA;EAoCgB;EAlChB,IAAA;AAAA;;;;UAMgB,eAAA;EAgCN;EA9BV,GAAA;EAoCgB;EAlChB,MAAA;;EAEA,OAAA,EAAS,MAAA;EAkCT;EAhCA,SAAA;AAAA;;;;UAMgB,mBAAA;EAsCA;EApChB,GAAA;;EAEA,WAAA;EAoCA;EAlCA,IAAA;EAsCA;EApCA,SAAA;AAAA;AA4CD;;;AAAA,UAtCiB,UAAA;EA4CA;EA1ChB,KAAA,EAAO,QAAA;EA0CsB;EAxC7B,UAAA;AAAA;;;;UAMgB,QAAA;EAyDD;EAvDf,GAAA;EAuD6B;EArD7B,IAAA;EA2D0D;EAzD1D,YAAA,EAAc,IAAA;EAyD2C;EAvDzD,IAAA;AAAA;;;;UAMgB,WAAA;EAoBa;EAlB7B,MAAA;EAmBC;EAjBD,KAAA;EAkBI;EAhBJ,MAAA;AAAA;;;;;;UAQgB,OAAA;EAwBhB;;;EApBA,MAAA,CAAO,OAAA;IACN,GAAA;IACA,IAAA,EAAM,MAAA,GAAS,UAAA,GAAa,cAAA,CAAe,UAAA;IAC3C,WAAA;EAAA,IACG,OAAA,CAAQ,YAAA;EA2BZ;;;EAtBA,QAAA,CAAS,GAAA,WAAc,OAAA,CAAQ,cAAA;EAsB2B;;;;EAhB1D,MAAA,CAAO,GAAA,WAAc,OAAA;EA2BT;;;EAtBZ,MAAA,CAAO,GAAA,WAAc,OAAA;EAsBkB;;;EAjBvC,IAAA,CAAK,OAAA,GAAU,WAAA,GAAc,OAAA,CAAQ,UAAA;EAmBpC;;;;EAbD,kBAAA,CAAmB,OAAA,EAAS,mBAAA,GAAsB,OAAA,CAAQ,eAAA;;;;EAK1D,YAAA,CAAa,GAAA;AAAA;;;;cAMD,kBAAA,SAA2B,KAAA;EAG/B,IAAA;EACS,KAAA;cAFhB,OAAA,UACO,IAAA,UACS,KAAA;AAAA"}
@@ -1,4 +1,4 @@
1
- import { c as CustomFieldValue } from "./types-DbCWhHet.mjs";
1
+ import { c as CustomFieldValue } from "./types-BUUVn1zr.mjs";
2
2
 
3
3
  //#region src/database/repositories/types.d.ts
4
4
  interface CreateContentInput {
@@ -195,4 +195,4 @@ declare class EmDashValidationError extends Error {
195
195
  }
196
196
  //#endregion
197
197
  export { ContentSeo as a, EmDashValidationError as c, InvalidCursorError as d, UpdateContentInput as f, ContentItem as i, FindManyOptions as l, ContentBylineCredit as n, ContentSeoInput as o, ContentDateField as r, CreateContentInput as s, BylineSummary as t, FindManyResult as u };
198
- //# sourceMappingURL=types-WVmpZBJV.d.mts.map
198
+ //# sourceMappingURL=types-DTniiNto.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types-WVmpZBJV.d.mts","names":[],"sources":["../src/database/repositories/types.ts"],"mappings":";;;UAaiB,kBAAA;EAChB,IAAA;EACA,IAAA;EACA,IAAA,EAAM,MAAA;EACN,MAAA;EACA,QAAA;EACA,eAAA;EACA,MAAA;EACA,aAAA;EACA,WAAA;EALA;EAOA,SAAA;AAAA;AAAA,UAGgB,kBAAA;EAChB,IAAA,GAAO,MAAA;EACP,MAAA;EACA,IAAA;EACA,WAAA;EACA,WAAA;EACA,QAAA;EACA,eAAA;AAAA;;UAIgB,UAAA;EAChB,KAAA;EACA,WAAA;EACA,KAAA;EACA,SAAA;EACA,OAAA;AAAA;;UAIgB,eAAA;EAChB,KAAA;EACA,WAAA;EACA,KAAA;EACA,SAAA;EACA,OAAA;AAAA;AAAA,UAGgB,aAAA;EAChB,EAAA;EACA,IAAA;EACA,WAAA;EACA,GAAA;EACA,aAAA;EAbgB;;;;;;;;;;;AAQjB;;;;;EAsBC,gBAAA;EAnBA;EAqBA,SAAA;EACA,UAAA;EACA,MAAA;EACA,OAAA;EACA,SAAA;EACA,SAAA;EAFA;;;;EAOA,MAAA;EAkBA;;;;;AAGD;;EAbC,gBAAA;EAcqB;;;;;;;;AAQtB;EAZC,YAAA,GAAe,MAAA,SAAe,gBAAA;AAAA;AAAA,UAGd,mBAAA;EAChB,MAAA,EAAQ,aAAA;EACR,SAAA;EACA,SAAA;;EAEA,MAAA;AAAA;;KAIW,gBAAA;;;;AAeZ;;;;UANiB,iBAAA;EAChB,KAAA,EAAO,gBAAA;EACP,IAAA;EACA,EAAA;AAAA;AAAA,UAGgB,eAAA;EAChB,KAAA;IACC,MAAA;IACA,QAAA;IACA,MAAA,WAcA;IAZA,CAAA;IAeD;;;AAGD;;IAZE,aAAA,aAaO;IAXP,UAAA,GAAa,iBAAA;EAAA;EAEd,OAAA;IACC,KAAA;IACA,SAAA;EAAA;EAED,KAAA;EACA,MAAA;AAAA;AAAA,UAGgB,cAAA;EAChB,KAAA,EAAO,CAAA;EACP,UAAA;;;;;AAuDD;EAjDC,KAAA;AAAA;;;;;;;;;cAgBY,kBAAA,SAA2B,KAAA;cAC3B,MAAA;AAAA;AAAA,UAgCI,WAAA;EAChB,EAAA;EACA,IAAA;EACA,IAAA;EACA,MAAA;EACA,IAAA,EAAM,MAAA;EACN,QAAA;EACA,eAAA;EACA,MAAA,GAAS,aAAA;EACT,OAAA,GAAU,mBAAA;EACV,SAAA;EACA,SAAA;EACA,WAAA;EACA,WAAA;EACA,cAAA;EACA,eAAA;EACA,OAAA;EACA,MAAA;EACA,gBAAA;EAmBQ;EAjBR,GAAA,GAAM,UAAA;EAiBmB;;;;;;;;;;EANzB,QAAA,GAAW,MAAA;AAAA;AAAA,cAGC,qBAAA,SAA8B,KAAA;EAGlC,OAAA;cADP,OAAA,UACO,OAAA;AAAA"}
1
+ {"version":3,"file":"types-DTniiNto.d.mts","names":[],"sources":["../src/database/repositories/types.ts"],"mappings":";;;UAaiB,kBAAA;EAChB,IAAA;EACA,IAAA;EACA,IAAA,EAAM,MAAA;EACN,MAAA;EACA,QAAA;EACA,eAAA;EACA,MAAA;EACA,aAAA;EACA,WAAA;EALA;EAOA,SAAA;AAAA;AAAA,UAGgB,kBAAA;EAChB,IAAA,GAAO,MAAA;EACP,MAAA;EACA,IAAA;EACA,WAAA;EACA,WAAA;EACA,QAAA;EACA,eAAA;AAAA;;UAIgB,UAAA;EAChB,KAAA;EACA,WAAA;EACA,KAAA;EACA,SAAA;EACA,OAAA;AAAA;;UAIgB,eAAA;EAChB,KAAA;EACA,WAAA;EACA,KAAA;EACA,SAAA;EACA,OAAA;AAAA;AAAA,UAGgB,aAAA;EAChB,EAAA;EACA,IAAA;EACA,WAAA;EACA,GAAA;EACA,aAAA;EAbgB;;;;;;;;;;;AAQjB;;;;;EAsBC,gBAAA;EAnBA;EAqBA,SAAA;EACA,UAAA;EACA,MAAA;EACA,OAAA;EACA,SAAA;EACA,SAAA;EAFA;;;;EAOA,MAAA;EAkBA;;;;;AAGD;;EAbC,gBAAA;EAcqB;;;;;;;;AAQtB;EAZC,YAAA,GAAe,MAAA,SAAe,gBAAA;AAAA;AAAA,UAGd,mBAAA;EAChB,MAAA,EAAQ,aAAA;EACR,SAAA;EACA,SAAA;;EAEA,MAAA;AAAA;;KAIW,gBAAA;;;;AAeZ;;;;UANiB,iBAAA;EAChB,KAAA,EAAO,gBAAA;EACP,IAAA;EACA,EAAA;AAAA;AAAA,UAGgB,eAAA;EAChB,KAAA;IACC,MAAA;IACA,QAAA;IACA,MAAA,WAcA;IAZA,CAAA;IAeD;;;AAGD;;IAZE,aAAA,aAaO;IAXP,UAAA,GAAa,iBAAA;EAAA;EAEd,OAAA;IACC,KAAA;IACA,SAAA;EAAA;EAED,KAAA;EACA,MAAA;AAAA;AAAA,UAGgB,cAAA;EAChB,KAAA,EAAO,CAAA;EACP,UAAA;;;;;AAuDD;EAjDC,KAAA;AAAA;;;;;;;;;cAgBY,kBAAA,SAA2B,KAAA;cAC3B,MAAA;AAAA;AAAA,UAgCI,WAAA;EAChB,EAAA;EACA,IAAA;EACA,IAAA;EACA,MAAA;EACA,IAAA,EAAM,MAAA;EACN,QAAA;EACA,eAAA;EACA,MAAA,GAAS,aAAA;EACT,OAAA,GAAU,mBAAA;EACV,SAAA;EACA,SAAA;EACA,WAAA;EACA,WAAA;EACA,cAAA;EACA,eAAA;EACA,OAAA;EACA,MAAA;EACA,gBAAA;EAmBQ;EAjBR,GAAA,GAAM,UAAA;EAiBmB;;;;;;;;;;EANzB,QAAA,GAAW,MAAA;AAAA;AAAA,cAGC,qBAAA,SAA8B,KAAA;EAGlC,OAAA;cADP,OAAA,UACO,OAAA;AAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"types-DZk_y-MU.mjs","names":[],"sources":["../src/schema/types.ts"],"sourcesContent":["/**\n * Schema Registry Types\n *\n * These types represent the schema definitions stored in D1.\n * They are the source of truth for all collections and fields.\n */\n\n/**\n * Supported field types\n */\nexport type FieldType =\n\t| \"string\"\n\t| \"text\"\n\t| \"url\"\n\t| \"number\"\n\t| \"integer\"\n\t| \"boolean\"\n\t| \"datetime\"\n\t| \"select\"\n\t| \"multiSelect\"\n\t| \"portableText\"\n\t| \"image\"\n\t| \"file\"\n\t| \"reference\"\n\t| \"json\"\n\t| \"slug\"\n\t| \"repeater\";\n\n/**\n * Array of all field types for validation\n */\nexport const FIELD_TYPES: readonly FieldType[] = [\n\t\"string\",\n\t\"text\",\n\t\"url\",\n\t\"number\",\n\t\"integer\",\n\t\"boolean\",\n\t\"datetime\",\n\t\"select\",\n\t\"multiSelect\",\n\t\"portableText\",\n\t\"image\",\n\t\"file\",\n\t\"reference\",\n\t\"json\",\n\t\"slug\",\n\t\"repeater\",\n] as const;\n\n/**\n * SQLite column types that map from field types\n */\nexport type ColumnType = \"TEXT\" | \"REAL\" | \"INTEGER\" | \"JSON\";\n\n/**\n * Map field types to their SQLite column types\n */\nexport const FIELD_TYPE_TO_COLUMN: Record<FieldType, ColumnType> = {\n\tstring: \"TEXT\",\n\ttext: \"TEXT\",\n\tnumber: \"REAL\",\n\tinteger: \"INTEGER\",\n\tboolean: \"INTEGER\",\n\tdatetime: \"TEXT\",\n\tselect: \"TEXT\",\n\tmultiSelect: \"JSON\",\n\tportableText: \"JSON\",\n\timage: \"TEXT\",\n\tfile: \"TEXT\",\n\treference: \"TEXT\",\n\tjson: \"JSON\",\n\tslug: \"TEXT\",\n\turl: \"TEXT\",\n\trepeater: \"JSON\",\n};\n\n/**\n * Features a collection can support\n */\nexport type CollectionSupport =\n\t| \"drafts\"\n\t| \"revisions\"\n\t| \"preview\"\n\t| \"scheduling\"\n\t| \"search\"\n\t| \"seo\";\n\n/**\n * Sources for how a collection was created\n */\nexport type CollectionSource =\n\t| `template:${string}`\n\t| `import:${string}`\n\t| \"manual\"\n\t| \"discovered\"\n\t| \"seed\";\n\n/**\n * Validation rules for a field\n */\n/** Sub-field definition for repeater fields */\nexport interface RepeaterSubField {\n\tslug: string;\n\ttype: \"string\" | \"text\" | \"url\" | \"number\" | \"integer\" | \"boolean\" | \"datetime\" | \"select\";\n\tlabel: string;\n\trequired?: boolean;\n\toptions?: string[]; // For select sub-fields\n}\n\n/** Allowed types for repeater sub-fields (no nesting, no complex types) */\nexport const REPEATER_SUB_FIELD_TYPES = [\n\t\"string\",\n\t\"text\",\n\t\"url\",\n\t\"number\",\n\t\"integer\",\n\t\"boolean\",\n\t\"datetime\",\n\t\"select\",\n] as const;\n\nexport interface FieldValidation {\n\trequired?: boolean;\n\tmin?: number;\n\tmax?: number;\n\tminLength?: number;\n\tmaxLength?: number;\n\tpattern?: string;\n\toptions?: string[]; // For select/multiSelect\n\tsubFields?: RepeaterSubField[]; // For repeater fields\n\tminItems?: number; // For repeater fields\n\tmaxItems?: number; // For repeater fields\n\tallowedMimeTypes?: string[];\n}\n\n/**\n * Widget options for field rendering\n */\nexport interface FieldWidgetOptions {\n\trows?: number; // For textarea\n\tshowPreview?: boolean; // For image/file\n\tcollection?: string; // For reference - which collection to reference\n\tallowMultiple?: boolean; // For reference\n\t[key: string]: unknown;\n}\n\n/**\n * A collection definition\n */\nexport interface Collection {\n\tid: string;\n\tslug: string;\n\tlabel: string;\n\tlabelSingular?: string;\n\tdescription?: string;\n\ticon?: string;\n\tsupports: CollectionSupport[];\n\tsource?: CollectionSource;\n\t/** Whether this collection has SEO metadata fields enabled */\n\thasSeo: boolean;\n\t/** URL pattern with {slug} placeholder (e.g. \"/{slug}\", \"/blog/{slug}\") */\n\turlPattern?: string;\n\t/** Whether comments are enabled for this collection */\n\tcommentsEnabled: boolean;\n\t/** Moderation strategy: \"all\" | \"first_time\" | \"none\" */\n\tcommentsModeration: \"all\" | \"first_time\" | \"none\";\n\t/** Auto-close comments after N days. 0 = never close. */\n\tcommentsClosedAfterDays: number;\n\t/** Auto-approve comments from authenticated CMS users */\n\tcommentsAutoApproveUsers: boolean;\n\tcreatedAt: string;\n\tupdatedAt: string;\n}\n\n/**\n * A field definition\n */\nexport interface Field {\n\tid: string;\n\tcollectionId: string;\n\tslug: string;\n\tlabel: string;\n\ttype: FieldType;\n\tcolumnType: ColumnType;\n\trequired: boolean;\n\tunique: boolean;\n\tdefaultValue?: unknown;\n\tvalidation?: FieldValidation;\n\twidget?: string;\n\toptions?: FieldWidgetOptions;\n\tsortOrder: number;\n\tsearchable: boolean;\n\t/** Whether this field is translatable (default true). Non-translatable fields are synced across locales. */\n\ttranslatable: boolean;\n\tcreatedAt: string;\n}\n\n/**\n * Input for creating a collection\n */\nexport interface CreateCollectionInput {\n\tslug: string;\n\tlabel: string;\n\tlabelSingular?: string;\n\tdescription?: string;\n\ticon?: string;\n\tsupports?: CollectionSupport[];\n\tsource?: CollectionSource;\n\turlPattern?: string;\n\thasSeo?: boolean;\n\tcommentsEnabled?: boolean;\n}\n\n/**\n * Input for updating a collection\n */\nexport interface UpdateCollectionInput {\n\tlabel?: string;\n\tlabelSingular?: string;\n\tdescription?: string;\n\ticon?: string;\n\tsupports?: CollectionSupport[];\n\turlPattern?: string;\n\thasSeo?: boolean;\n\tcommentsEnabled?: boolean;\n\tcommentsModeration?: \"all\" | \"first_time\" | \"none\";\n\tcommentsClosedAfterDays?: number;\n\tcommentsAutoApproveUsers?: boolean;\n}\n\n/**\n * Input for creating a field\n */\nexport interface CreateFieldInput {\n\tslug: string;\n\tlabel: string;\n\ttype: FieldType;\n\trequired?: boolean;\n\tunique?: boolean;\n\tdefaultValue?: unknown;\n\tvalidation?: FieldValidation | null;\n\twidget?: string;\n\toptions?: FieldWidgetOptions;\n\tsortOrder?: number;\n\t/** Whether this field should be indexed for search */\n\tsearchable?: boolean;\n\t/** Whether this field is translatable (default true). Non-translatable fields are synced across locales. */\n\ttranslatable?: boolean;\n}\n\n/**\n * Input for updating a field\n */\nexport interface UpdateFieldInput {\n\tlabel?: string;\n\trequired?: boolean;\n\tunique?: boolean;\n\tdefaultValue?: unknown;\n\tvalidation?: FieldValidation | null;\n\twidget?: string;\n\toptions?: FieldWidgetOptions;\n\tsortOrder?: number;\n\t/** Whether this field should be indexed for search */\n\tsearchable?: boolean;\n\t/** Whether this field is translatable (default true). Non-translatable fields are synced across locales. */\n\ttranslatable?: boolean;\n}\n\n/**\n * A collection with its fields\n */\nexport interface CollectionWithFields extends Collection {\n\tfields: Field[];\n}\n\n/**\n * Reserved field slugs that cannot be used.\n *\n * Includes names reserved for runtime hydration (`terms`, `bylines`, `byline`)\n * so user-defined fields never shadow the auto-hydrated values on entry.data.\n */\nexport const RESERVED_FIELD_SLUGS = [\n\t\"id\",\n\t\"slug\",\n\t\"status\",\n\t\"author_id\",\n\t\"primary_byline_id\",\n\t\"created_at\",\n\t\"updated_at\",\n\t\"published_at\",\n\t\"scheduled_at\",\n\t\"deleted_at\",\n\t\"version\",\n\t\"live_revision_id\",\n\t\"draft_revision_id\",\n\t// Runtime-hydrated fields\n\t\"terms\",\n\t\"bylines\",\n\t\"byline\",\n];\n\n/**\n * Reserved collection slugs that cannot be used\n */\nexport const RESERVED_COLLECTION_SLUGS = [\n\t\"content\",\n\t\"media\",\n\t\"users\",\n\t\"revisions\",\n\t\"taxonomies\",\n\t\"options\",\n\t\"audit_logs\",\n];\n\n/**\n * Byline custom fields (Discussion #1174).\n *\n * Sites declare site-specific byline metadata (`job_title`, `pronouns`,\n * `twitter_handle`, `company`, …) without touching emdash core. Definitions\n * live in `_emdash_byline_fields`; values in either\n * `_emdash_byline_field_values` (translatable, keyed by `byline_id`) or\n * `_emdash_byline_field_group_values` (non-translatable, keyed by\n * `translation_group`). The per-field `translatable` flag decides which\n * value table is used. See migration 041.\n */\n\n/**\n * The five v1 field types supported on byline custom fields. Deliberately\n * narrower than the content `FieldType` union — bylines don't need\n * `portableText`, `reference`, `image`, etc. v2 may extend this; v1 keeps\n * the storage and UI surfaces small.\n */\nexport type BylineFieldType = \"string\" | \"text\" | \"url\" | \"boolean\" | \"select\";\n\nexport const BYLINE_FIELD_TYPES: readonly BylineFieldType[] = [\n\t\"string\",\n\t\"text\",\n\t\"url\",\n\t\"boolean\",\n\t\"select\",\n] as const;\n\n/**\n * Validation rules for a byline custom field. v1 only exposes `options`\n * (the choice list for `select` fields). The shape mirrors the content-\n * field convention so the admin UI patterns transfer.\n */\nexport interface BylineFieldValidation {\n\t/** Choices for `select`-type fields. Ignored for other types. */\n\toptions?: string[];\n}\n\n/**\n * Runtime shape of a registered byline custom field. Stored in\n * `_emdash_byline_fields` (see migration 041).\n */\nexport interface BylineFieldDefinition {\n\tid: string;\n\tslug: string;\n\tlabel: string;\n\ttype: BylineFieldType;\n\trequired: boolean;\n\t/**\n\t * Whether values are stored per-locale (`true`, in\n\t * `_emdash_byline_field_values` keyed by `byline_id`) or shared across\n\t * every locale variant of the same byline identity (`false`, in\n\t * `_emdash_byline_field_group_values` keyed by `translation_group`).\n\t * Defaults to `true` at the DB level.\n\t */\n\ttranslatable: boolean;\n\tvalidation: BylineFieldValidation | null;\n\tsortOrder: number;\n\tcreatedAt: string;\n\tupdatedAt: string;\n}\n\n/**\n * Input for creating a byline custom field. `slug` and `type` are not\n * updatable post-create — changing either would invalidate stored values.\n */\nexport interface CreateBylineFieldInput {\n\tslug: string;\n\tlabel: string;\n\ttype: BylineFieldType;\n\trequired?: boolean;\n\ttranslatable?: boolean;\n\tvalidation?: BylineFieldValidation | null;\n\tsortOrder?: number;\n}\n\n/**\n * Input for updating a byline custom field. `slug` and `type` are\n * intentionally not present — see `CreateBylineFieldInput`.\n */\nexport interface UpdateBylineFieldInput {\n\tlabel?: string;\n\trequired?: boolean;\n\ttranslatable?: boolean;\n\tvalidation?: BylineFieldValidation | null;\n\tsortOrder?: number;\n}\n\n/**\n * Runtime value type for a byline custom field. The narrow union mirrors\n * what the five v1 field types can produce: `string`/`text`/`url`/`select`\n * → string, `boolean` → boolean, plus `null` for cleared values.\n */\nexport type CustomFieldValue = string | boolean | null;\n\n/**\n * Reserved byline-field slugs. Two reasons a slug ends up here:\n *\n * 1. **Column collision.** Slugs that match a fixed column on\n * `_emdash_bylines` (migrations 031 + 040) would shadow that column\n * on hydration. The first 12 entries cover this.\n * 2. **Route collision.** Static file routes under\n * `/_emdash/api/admin/byline-fields/` take precedence over the\n * `[slug].ts` dynamic route in Astro, so a custom field whose slug\n * matches a sibling static file (e.g. `reorder.ts`) is unreachable\n * via single-field CRUD — the static route handles only its own\n * method (POST for `reorder`) and 405s everything else.\n * `reorder` is the only such sibling today; new sibling routes\n * (e.g. a hypothetical `import.ts`) must be added here.\n * `[slug]/usage.ts` lives a level deeper so a slug of `usage` does\n * not collide — it resolves cleanly to `[slug].ts`.\n *\n * Enforced at the registry layer (Phase 2) and the admin API zod layer\n * (Phase 4) so non-HTTP callers (seeds, scripts) get the same guarantee.\n */\nexport const RESERVED_BYLINE_FIELD_SLUGS = [\n\t// 1. Column-collision slugs (matches `_emdash_bylines` fixed columns).\n\t\"id\",\n\t\"slug\",\n\t\"display_name\",\n\t\"bio\",\n\t\"avatar_media_id\",\n\t\"website_url\",\n\t\"user_id\",\n\t\"is_guest\",\n\t\"locale\",\n\t\"translation_group\",\n\t\"created_at\",\n\t\"updated_at\",\n\t// 2. Route-collision slugs (matches static sibling files of `[slug].ts`).\n\t\"reorder\",\n] as const;\n"],"mappings":";;;;AA+BA,MAAa,cAAoC;CAChD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;;;;AAUD,MAAa,uBAAsD;CAClE,QAAQ;CACR,MAAM;CACN,QAAQ;CACR,SAAS;CACT,SAAS;CACT,UAAU;CACV,QAAQ;CACR,aAAa;CACb,cAAc;CACd,OAAO;CACP,MAAM;CACN,WAAW;CACX,MAAM;CACN,MAAM;CACN,KAAK;CACL,UAAU;CACV;;;;;;;AA+MD,MAAa,uBAAuB;CACnC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAEA;CACA;CACA;CACA;;;;AAKD,MAAa,4BAA4B;CACxC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AAsBD,MAAa,qBAAiD;CAC7D;CACA;CACA;CACA;CACA;CACA;;;;;;;;;;;;;;;;;;;;;AAyFD,MAAa,8BAA8B;CAE1C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAEA;CACA"}
1
+ {"version":3,"file":"types-DZk_y-MU.mjs","names":[],"sources":["../src/schema/types.ts"],"sourcesContent":["/**\n * Schema Registry Types\n *\n * These types represent the schema definitions stored in D1.\n * They are the source of truth for all collections and fields.\n */\n\n/**\n * Supported field types\n */\nexport type FieldType =\n\t| \"string\"\n\t| \"text\"\n\t| \"url\"\n\t| \"number\"\n\t| \"integer\"\n\t| \"boolean\"\n\t| \"datetime\"\n\t| \"select\"\n\t| \"multiSelect\"\n\t| \"portableText\"\n\t| \"image\"\n\t| \"file\"\n\t| \"reference\"\n\t| \"json\"\n\t| \"slug\"\n\t| \"repeater\";\n\n/**\n * Array of all field types for validation\n */\nexport const FIELD_TYPES: readonly FieldType[] = [\n\t\"string\",\n\t\"text\",\n\t\"url\",\n\t\"number\",\n\t\"integer\",\n\t\"boolean\",\n\t\"datetime\",\n\t\"select\",\n\t\"multiSelect\",\n\t\"portableText\",\n\t\"image\",\n\t\"file\",\n\t\"reference\",\n\t\"json\",\n\t\"slug\",\n\t\"repeater\",\n] as const;\n\n/**\n * SQLite column types that map from field types\n */\nexport type ColumnType = \"TEXT\" | \"REAL\" | \"INTEGER\" | \"JSON\";\n\n/**\n * Map field types to their SQLite column types\n */\nexport const FIELD_TYPE_TO_COLUMN: Record<FieldType, ColumnType> = {\n\tstring: \"TEXT\",\n\ttext: \"TEXT\",\n\tnumber: \"REAL\",\n\tinteger: \"INTEGER\",\n\tboolean: \"INTEGER\",\n\tdatetime: \"TEXT\",\n\tselect: \"TEXT\",\n\tmultiSelect: \"JSON\",\n\tportableText: \"JSON\",\n\timage: \"TEXT\",\n\tfile: \"TEXT\",\n\treference: \"TEXT\",\n\tjson: \"JSON\",\n\tslug: \"TEXT\",\n\turl: \"TEXT\",\n\trepeater: \"JSON\",\n};\n\n/**\n * Features a collection can support\n */\nexport type CollectionSupport =\n\t| \"drafts\"\n\t| \"revisions\"\n\t| \"preview\"\n\t| \"scheduling\"\n\t| \"search\"\n\t| \"seo\";\n\n/**\n * Sources for how a collection was created\n */\nexport type CollectionSource =\n\t| `template:${string}`\n\t| `import:${string}`\n\t| \"manual\"\n\t| \"discovered\"\n\t| \"seed\";\n\n/**\n * Validation rules for a field\n */\n/** Sub-field definition for repeater fields */\nexport interface RepeaterSubField {\n\tslug: string;\n\ttype:\n\t\t| \"string\"\n\t\t| \"text\"\n\t\t| \"url\"\n\t\t| \"number\"\n\t\t| \"integer\"\n\t\t| \"boolean\"\n\t\t| \"datetime\"\n\t\t| \"select\"\n\t\t| \"image\";\n\tlabel: string;\n\trequired?: boolean;\n\toptions?: string[]; // For select sub-fields\n}\n\n/** Allowed types for repeater sub-fields (no nesting, no complex types) */\nexport const REPEATER_SUB_FIELD_TYPES = [\n\t\"string\",\n\t\"text\",\n\t\"url\",\n\t\"number\",\n\t\"integer\",\n\t\"boolean\",\n\t\"datetime\",\n\t\"select\",\n\t\"image\",\n] as const;\n\nexport interface FieldValidation {\n\trequired?: boolean;\n\tmin?: number;\n\tmax?: number;\n\tminLength?: number;\n\tmaxLength?: number;\n\tpattern?: string;\n\toptions?: string[]; // For select/multiSelect\n\tsubFields?: RepeaterSubField[]; // For repeater fields\n\tminItems?: number; // For repeater fields\n\tmaxItems?: number; // For repeater fields\n\tallowedMimeTypes?: string[];\n}\n\n/**\n * Widget options for field rendering\n */\nexport interface FieldWidgetOptions {\n\trows?: number; // For textarea\n\tshowPreview?: boolean; // For image/file\n\tcollection?: string; // For reference - which collection to reference\n\tallowMultiple?: boolean; // For reference\n\t[key: string]: unknown;\n}\n\n/**\n * A collection definition\n */\nexport interface Collection {\n\tid: string;\n\tslug: string;\n\tlabel: string;\n\tlabelSingular?: string;\n\tdescription?: string;\n\ticon?: string;\n\tsupports: CollectionSupport[];\n\tsource?: CollectionSource;\n\t/** Whether this collection has SEO metadata fields enabled */\n\thasSeo: boolean;\n\t/** URL pattern with {slug} placeholder (e.g. \"/{slug}\", \"/blog/{slug}\") */\n\turlPattern?: string;\n\t/** Whether comments are enabled for this collection */\n\tcommentsEnabled: boolean;\n\t/** Moderation strategy: \"all\" | \"first_time\" | \"none\" */\n\tcommentsModeration: \"all\" | \"first_time\" | \"none\";\n\t/** Auto-close comments after N days. 0 = never close. */\n\tcommentsClosedAfterDays: number;\n\t/** Auto-approve comments from authenticated CMS users */\n\tcommentsAutoApproveUsers: boolean;\n\tcreatedAt: string;\n\tupdatedAt: string;\n}\n\n/**\n * A field definition\n */\nexport interface Field {\n\tid: string;\n\tcollectionId: string;\n\tslug: string;\n\tlabel: string;\n\ttype: FieldType;\n\tcolumnType: ColumnType;\n\trequired: boolean;\n\tunique: boolean;\n\tdefaultValue?: unknown;\n\tvalidation?: FieldValidation;\n\twidget?: string;\n\toptions?: FieldWidgetOptions;\n\tsortOrder: number;\n\tsearchable: boolean;\n\t/** Whether this field is translatable (default true). Non-translatable fields are synced across locales. */\n\ttranslatable: boolean;\n\tcreatedAt: string;\n}\n\n/**\n * Input for creating a collection\n */\nexport interface CreateCollectionInput {\n\tslug: string;\n\tlabel: string;\n\tlabelSingular?: string;\n\tdescription?: string;\n\ticon?: string;\n\tsupports?: CollectionSupport[];\n\tsource?: CollectionSource;\n\turlPattern?: string;\n\thasSeo?: boolean;\n\tcommentsEnabled?: boolean;\n}\n\n/**\n * Input for updating a collection\n */\nexport interface UpdateCollectionInput {\n\tlabel?: string;\n\tlabelSingular?: string;\n\tdescription?: string;\n\ticon?: string;\n\tsupports?: CollectionSupport[];\n\turlPattern?: string;\n\thasSeo?: boolean;\n\tcommentsEnabled?: boolean;\n\tcommentsModeration?: \"all\" | \"first_time\" | \"none\";\n\tcommentsClosedAfterDays?: number;\n\tcommentsAutoApproveUsers?: boolean;\n}\n\n/**\n * Input for creating a field\n */\nexport interface CreateFieldInput {\n\tslug: string;\n\tlabel: string;\n\ttype: FieldType;\n\trequired?: boolean;\n\tunique?: boolean;\n\tdefaultValue?: unknown;\n\tvalidation?: FieldValidation | null;\n\twidget?: string;\n\toptions?: FieldWidgetOptions;\n\tsortOrder?: number;\n\t/** Whether this field should be indexed for search */\n\tsearchable?: boolean;\n\t/** Whether this field is translatable (default true). Non-translatable fields are synced across locales. */\n\ttranslatable?: boolean;\n}\n\n/**\n * Input for updating a field\n */\nexport interface UpdateFieldInput {\n\tlabel?: string;\n\trequired?: boolean;\n\tunique?: boolean;\n\tdefaultValue?: unknown;\n\tvalidation?: FieldValidation | null;\n\twidget?: string;\n\toptions?: FieldWidgetOptions;\n\tsortOrder?: number;\n\t/** Whether this field should be indexed for search */\n\tsearchable?: boolean;\n\t/** Whether this field is translatable (default true). Non-translatable fields are synced across locales. */\n\ttranslatable?: boolean;\n}\n\n/**\n * A collection with its fields\n */\nexport interface CollectionWithFields extends Collection {\n\tfields: Field[];\n}\n\n/**\n * Reserved field slugs that cannot be used.\n *\n * Includes names reserved for runtime hydration (`terms`, `bylines`, `byline`)\n * so user-defined fields never shadow the auto-hydrated values on entry.data.\n */\nexport const RESERVED_FIELD_SLUGS = [\n\t\"id\",\n\t\"slug\",\n\t\"status\",\n\t\"author_id\",\n\t\"primary_byline_id\",\n\t\"created_at\",\n\t\"updated_at\",\n\t\"published_at\",\n\t\"scheduled_at\",\n\t\"deleted_at\",\n\t\"version\",\n\t\"live_revision_id\",\n\t\"draft_revision_id\",\n\t// Runtime-hydrated fields\n\t\"terms\",\n\t\"bylines\",\n\t\"byline\",\n];\n\n/**\n * Reserved collection slugs that cannot be used\n */\nexport const RESERVED_COLLECTION_SLUGS = [\n\t\"content\",\n\t\"media\",\n\t\"users\",\n\t\"revisions\",\n\t\"taxonomies\",\n\t\"options\",\n\t\"audit_logs\",\n];\n\n/**\n * Byline custom fields (Discussion #1174).\n *\n * Sites declare site-specific byline metadata (`job_title`, `pronouns`,\n * `twitter_handle`, `company`, …) without touching emdash core. Definitions\n * live in `_emdash_byline_fields`; values in either\n * `_emdash_byline_field_values` (translatable, keyed by `byline_id`) or\n * `_emdash_byline_field_group_values` (non-translatable, keyed by\n * `translation_group`). The per-field `translatable` flag decides which\n * value table is used. See migration 041.\n */\n\n/**\n * The five v1 field types supported on byline custom fields. Deliberately\n * narrower than the content `FieldType` union — bylines don't need\n * `portableText`, `reference`, `image`, etc. v2 may extend this; v1 keeps\n * the storage and UI surfaces small.\n */\nexport type BylineFieldType = \"string\" | \"text\" | \"url\" | \"boolean\" | \"select\";\n\nexport const BYLINE_FIELD_TYPES: readonly BylineFieldType[] = [\n\t\"string\",\n\t\"text\",\n\t\"url\",\n\t\"boolean\",\n\t\"select\",\n] as const;\n\n/**\n * Validation rules for a byline custom field. v1 only exposes `options`\n * (the choice list for `select` fields). The shape mirrors the content-\n * field convention so the admin UI patterns transfer.\n */\nexport interface BylineFieldValidation {\n\t/** Choices for `select`-type fields. Ignored for other types. */\n\toptions?: string[];\n}\n\n/**\n * Runtime shape of a registered byline custom field. Stored in\n * `_emdash_byline_fields` (see migration 041).\n */\nexport interface BylineFieldDefinition {\n\tid: string;\n\tslug: string;\n\tlabel: string;\n\ttype: BylineFieldType;\n\trequired: boolean;\n\t/**\n\t * Whether values are stored per-locale (`true`, in\n\t * `_emdash_byline_field_values` keyed by `byline_id`) or shared across\n\t * every locale variant of the same byline identity (`false`, in\n\t * `_emdash_byline_field_group_values` keyed by `translation_group`).\n\t * Defaults to `true` at the DB level.\n\t */\n\ttranslatable: boolean;\n\tvalidation: BylineFieldValidation | null;\n\tsortOrder: number;\n\tcreatedAt: string;\n\tupdatedAt: string;\n}\n\n/**\n * Input for creating a byline custom field. `slug` and `type` are not\n * updatable post-create — changing either would invalidate stored values.\n */\nexport interface CreateBylineFieldInput {\n\tslug: string;\n\tlabel: string;\n\ttype: BylineFieldType;\n\trequired?: boolean;\n\ttranslatable?: boolean;\n\tvalidation?: BylineFieldValidation | null;\n\tsortOrder?: number;\n}\n\n/**\n * Input for updating a byline custom field. `slug` and `type` are\n * intentionally not present — see `CreateBylineFieldInput`.\n */\nexport interface UpdateBylineFieldInput {\n\tlabel?: string;\n\trequired?: boolean;\n\ttranslatable?: boolean;\n\tvalidation?: BylineFieldValidation | null;\n\tsortOrder?: number;\n}\n\n/**\n * Runtime value type for a byline custom field. The narrow union mirrors\n * what the five v1 field types can produce: `string`/`text`/`url`/`select`\n * → string, `boolean` → boolean, plus `null` for cleared values.\n */\nexport type CustomFieldValue = string | boolean | null;\n\n/**\n * Reserved byline-field slugs. Two reasons a slug ends up here:\n *\n * 1. **Column collision.** Slugs that match a fixed column on\n * `_emdash_bylines` (migrations 031 + 040) would shadow that column\n * on hydration. The first 12 entries cover this.\n * 2. **Route collision.** Static file routes under\n * `/_emdash/api/admin/byline-fields/` take precedence over the\n * `[slug].ts` dynamic route in Astro, so a custom field whose slug\n * matches a sibling static file (e.g. `reorder.ts`) is unreachable\n * via single-field CRUD — the static route handles only its own\n * method (POST for `reorder`) and 405s everything else.\n * `reorder` is the only such sibling today; new sibling routes\n * (e.g. a hypothetical `import.ts`) must be added here.\n * `[slug]/usage.ts` lives a level deeper so a slug of `usage` does\n * not collide — it resolves cleanly to `[slug].ts`.\n *\n * Enforced at the registry layer (Phase 2) and the admin API zod layer\n * (Phase 4) so non-HTTP callers (seeds, scripts) get the same guarantee.\n */\nexport const RESERVED_BYLINE_FIELD_SLUGS = [\n\t// 1. Column-collision slugs (matches `_emdash_bylines` fixed columns).\n\t\"id\",\n\t\"slug\",\n\t\"display_name\",\n\t\"bio\",\n\t\"avatar_media_id\",\n\t\"website_url\",\n\t\"user_id\",\n\t\"is_guest\",\n\t\"locale\",\n\t\"translation_group\",\n\t\"created_at\",\n\t\"updated_at\",\n\t// 2. Route-collision slugs (matches static sibling files of `[slug].ts`).\n\t\"reorder\",\n] as const;\n"],"mappings":";;;;AA+BA,MAAa,cAAoC;CAChD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;;;;AAUD,MAAa,uBAAsD;CAClE,QAAQ;CACR,MAAM;CACN,QAAQ;CACR,SAAS;CACT,SAAS;CACT,UAAU;CACV,QAAQ;CACR,aAAa;CACb,cAAc;CACd,OAAO;CACP,MAAM;CACN,WAAW;CACX,MAAM;CACN,MAAM;CACN,KAAK;CACL,UAAU;CACV;;;;;;;AAyND,MAAa,uBAAuB;CACnC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAEA;CACA;CACA;CACA;;;;AAKD,MAAa,4BAA4B;CACxC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AAsBD,MAAa,qBAAiD;CAC7D;CACA;CACA;CACA;CACA;CACA;;;;;;;;;;;;;;;;;;;;;AAyFD,MAAa,8BAA8B;CAE1C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CAEA;CACA"}
@@ -72,4 +72,4 @@ interface SiteSettings {
72
72
  type SiteSettingKey = keyof SiteSettings;
73
73
  //#endregion
74
74
  export { SiteSettings as i, SeoSettings as n, SiteSettingKey as r, MediaReference as t };
75
- //# sourceMappingURL=types-DX6v9KzJ.d.mts.map
75
+ //# sourceMappingURL=types-S15DXXNi.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types-DX6v9KzJ.d.mts","names":[],"sources":["../src/settings/types.ts"],"mappings":";;AAyBA;;;;;;;;;;;;AAcA;;;;;;;;;;;UAdiB,cAAA;EAChB,OAAA;EACA,GAAA;;EAEA,GAAA;EA6BU;EA3BV,WAAA;EAgDiB;EA9CjB,KAAA;EAsBA;EApBA,MAAA;AAAA;;UAIgB,WAAA;EAmBN;EAjBV,cAAA;EAuBA;EArBA,cAAA,GAAiB,cAAA;EAuBjB;EArBA,SAAA;EAyBC;EAvBD,kBAAA;EAyBC;EAvBD,gBAAA;AAAA;;UAIgB,YAAA;EAEhB,KAAA;EACA,OAAA;EACA,IAAA,GAAO,cAAA;EACP,OAAA,GAAU,cAAA;EAGV,GAAA;EAGA,YAAA;EACA,UAAA;EACA,QAAA;EAGA,MAAA;IACC,OAAA;IACA,MAAA;IACA,QAAA;IACA,SAAA;IACA,QAAA;IACA,OAAA;EAAA;EAID,GAAA,GAAM,WAAA;AAAA;;KAIK,cAAA,SAAuB,YAAA"}
1
+ {"version":3,"file":"types-S15DXXNi.d.mts","names":[],"sources":["../src/settings/types.ts"],"mappings":";;AAyBA;;;;;;;;;;;;AAcA;;;;;;;;;;;UAdiB,cAAA;EAChB,OAAA;EACA,GAAA;;EAEA,GAAA;EA6BU;EA3BV,WAAA;EAgDiB;EA9CjB,KAAA;EAsBA;EApBA,MAAA;AAAA;;UAIgB,WAAA;EAmBN;EAjBV,cAAA;EAuBA;EArBA,cAAA,GAAiB,cAAA;EAuBjB;EArBA,SAAA;EAyBC;EAvBD,kBAAA;EAyBC;EAvBD,gBAAA;AAAA;;UAIgB,YAAA;EAEhB,KAAA;EACA,OAAA;EACA,IAAA,GAAO,cAAA;EACP,OAAA,GAAU,cAAA;EAGV,GAAA;EAGA,YAAA;EACA,UAAA;EACA,QAAA;EAGA,MAAA;IACC,OAAA;IACA,MAAA;IACA,QAAA;IACA,SAAA;IACA,QAAA;IACA,OAAA;EAAA;EAID,GAAA,GAAM,WAAA;AAAA;;KAIK,cAAA,SAAuB,YAAA"}
@@ -352,4 +352,4 @@ function validateMenuItemRefs(items, contentIds, warnings) {
352
352
 
353
353
  //#endregion
354
354
  export { validate_exports as n, validateSeed as t };
355
- //# sourceMappingURL=validate-ZP9Dvg0P.mjs.map
355
+ //# sourceMappingURL=validate-Bz4vqcX1.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"validate-ZP9Dvg0P.mjs","names":[],"sources":["../src/seed/validate.ts"],"sourcesContent":["/**\n * Seed file validation\n *\n * Validates a seed file structure before applying it.\n */\n\nimport { FIELD_TYPES } from \"../schema/types.js\";\nimport type { SeedFile, SeedMenuItem, ValidationResult } from \"./types.js\";\n\nconst COLLECTION_FIELD_SLUG_PATTERN = /^[a-z][a-z0-9_]*$/;\nconst SLUG_PATTERN = /^[a-z0-9-]+$/;\nconst REDIRECT_TYPES = new Set([301, 302, 307, 308]);\nconst CRLF_PATTERN = /[\\r\\n]/;\n\n/** Type guard for Record<string, unknown> */\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isValidRedirectPath(path: string): boolean {\n\tif (!path.startsWith(\"/\") || path.startsWith(\"//\") || CRLF_PATTERN.test(path)) {\n\t\treturn false;\n\t}\n\n\ttry {\n\t\treturn !decodeURIComponent(path).split(\"/\").includes(\"..\");\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n/**\n * Validate a seed file\n *\n * @param data - Unknown data to validate as a seed file\n * @returns Validation result with errors and warnings\n */\nexport function validateSeed(data: unknown): ValidationResult {\n\tconst errors: string[] = [];\n\tconst warnings: string[] = [];\n\n\t// Basic type check\n\tif (!data || typeof data !== \"object\") {\n\t\treturn {\n\t\t\tvalid: false,\n\t\t\terrors: [\"Seed must be an object\"],\n\t\t\twarnings: [],\n\t\t};\n\t}\n\n\tconst seed = data as Partial<SeedFile>;\n\n\t// Required fields\n\tif (!seed.version) {\n\t\terrors.push(\"Seed must have a version field\");\n\t} else if (seed.version !== \"1\") {\n\t\terrors.push(`Unsupported seed version: ${String(seed.version)}`);\n\t}\n\n\t// defaultLocale backfills the locale of rows that omit one, so a blank or\n\t// whitespace-padded value would silently write empty/invalid locales to the DB.\n\t// Exported seeds never hit this, but it's part of the public schema now.\n\tif (seed.defaultLocale !== undefined) {\n\t\tif (\n\t\t\ttypeof seed.defaultLocale !== \"string\" ||\n\t\t\tseed.defaultLocale.length === 0 ||\n\t\t\tseed.defaultLocale !== seed.defaultLocale.trim()\n\t\t) {\n\t\t\terrors.push(\n\t\t\t\t\"defaultLocale: must be a non-empty string with no leading or trailing whitespace\",\n\t\t\t);\n\t\t}\n\t}\n\n\t// Validate collections\n\tif (seed.collections) {\n\t\tif (!Array.isArray(seed.collections)) {\n\t\t\terrors.push(\"collections must be an array\");\n\t\t} else {\n\t\t\tconst collectionSlugs = new Set<string>();\n\n\t\t\tfor (let i = 0; i < seed.collections.length; i++) {\n\t\t\t\tconst collection = seed.collections[i];\n\t\t\t\tconst prefix = `collections[${i}]`;\n\n\t\t\t\tif (!collection.slug) {\n\t\t\t\t\terrors.push(`${prefix}: slug is required`);\n\t\t\t\t} else {\n\t\t\t\t\t// Check for valid slug format\n\t\t\t\t\tif (!COLLECTION_FIELD_SLUG_PATTERN.test(collection.slug)) {\n\t\t\t\t\t\terrors.push(\n\t\t\t\t\t\t\t`${prefix}.slug: must start with a letter and contain only lowercase letters, numbers, and underscores`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Check for duplicate slugs\n\t\t\t\t\tif (collectionSlugs.has(collection.slug)) {\n\t\t\t\t\t\terrors.push(`${prefix}.slug: duplicate collection slug \"${collection.slug}\"`);\n\t\t\t\t\t}\n\t\t\t\t\tcollectionSlugs.add(collection.slug);\n\t\t\t\t}\n\n\t\t\t\tif (!collection.label) {\n\t\t\t\t\terrors.push(`${prefix}: label is required`);\n\t\t\t\t}\n\n\t\t\t\t// Validate fields\n\t\t\t\tif (!Array.isArray(collection.fields)) {\n\t\t\t\t\terrors.push(`${prefix}.fields: must be an array`);\n\t\t\t\t} else {\n\t\t\t\t\tconst fieldSlugs = new Set<string>();\n\n\t\t\t\t\tfor (let j = 0; j < collection.fields.length; j++) {\n\t\t\t\t\t\tconst field = collection.fields[j];\n\t\t\t\t\t\tconst fieldPrefix = `${prefix}.fields[${j}]`;\n\n\t\t\t\t\t\tif (!field.slug) {\n\t\t\t\t\t\t\terrors.push(`${fieldPrefix}: slug is required`);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Check for valid slug format\n\t\t\t\t\t\t\tif (!COLLECTION_FIELD_SLUG_PATTERN.test(field.slug)) {\n\t\t\t\t\t\t\t\terrors.push(\n\t\t\t\t\t\t\t\t\t`${fieldPrefix}.slug: must start with a letter and contain only lowercase letters, numbers, and underscores`,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Check for duplicate field slugs\n\t\t\t\t\t\t\tif (fieldSlugs.has(field.slug)) {\n\t\t\t\t\t\t\t\terrors.push(\n\t\t\t\t\t\t\t\t\t`${fieldPrefix}.slug: duplicate field slug \"${field.slug}\" in collection \"${collection.slug}\"`,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfieldSlugs.add(field.slug);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!field.label) {\n\t\t\t\t\t\t\terrors.push(`${fieldPrefix}: label is required`);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!field.type) {\n\t\t\t\t\t\t\terrors.push(`${fieldPrefix}: type is required`);\n\t\t\t\t\t\t} else if (!(FIELD_TYPES as readonly string[]).includes(field.type)) {\n\t\t\t\t\t\t\terrors.push(`${fieldPrefix}.type: unsupported field type \"${field.type}\"`);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Validate taxonomies\n\tif (seed.taxonomies) {\n\t\tif (!Array.isArray(seed.taxonomies)) {\n\t\t\terrors.push(\"taxonomies must be an array\");\n\t\t} else {\n\t\t\tconst taxonomyNames = new Set<string>();\n\n\t\t\tfor (let i = 0; i < seed.taxonomies.length; i++) {\n\t\t\t\tconst taxonomy = seed.taxonomies[i];\n\t\t\t\tconst prefix = `taxonomies[${i}]`;\n\n\t\t\t\tif (!taxonomy.name) {\n\t\t\t\t\terrors.push(`${prefix}: name is required`);\n\t\t\t\t} else {\n\t\t\t\t\t// Uniqueness is per (name, locale).\n\t\t\t\t\tconst key = `${taxonomy.name}::${taxonomy.locale ?? \"\"}`;\n\t\t\t\t\tif (taxonomyNames.has(key)) {\n\t\t\t\t\t\terrors.push(\n\t\t\t\t\t\t\ttaxonomy.locale\n\t\t\t\t\t\t\t\t? `${prefix}.name: duplicate taxonomy \"${taxonomy.name}\" in locale \"${taxonomy.locale}\"`\n\t\t\t\t\t\t\t\t: `${prefix}.name: duplicate taxonomy name \"${taxonomy.name}\"`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\ttaxonomyNames.add(key);\n\t\t\t\t}\n\n\t\t\t\tif (!taxonomy.label) {\n\t\t\t\t\terrors.push(`${prefix}: label is required`);\n\t\t\t\t}\n\n\t\t\t\tif (taxonomy.hierarchical === undefined) {\n\t\t\t\t\terrors.push(`${prefix}: hierarchical is required`);\n\t\t\t\t}\n\n\t\t\t\tif (!Array.isArray(taxonomy.collections)) {\n\t\t\t\t\terrors.push(`${prefix}.collections: must be an array`);\n\t\t\t\t} else if (taxonomy.collections.length === 0) {\n\t\t\t\t\twarnings.push(\n\t\t\t\t\t\t`${prefix}.collections: taxonomy \"${taxonomy.name}\" is not assigned to any collections`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Validate terms if present\n\t\t\t\tif (taxonomy.terms) {\n\t\t\t\t\tif (!Array.isArray(taxonomy.terms)) {\n\t\t\t\t\t\terrors.push(`${prefix}.terms: must be an array`);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst termSlugs = new Set<string>();\n\n\t\t\t\t\t\tfor (let j = 0; j < taxonomy.terms.length; j++) {\n\t\t\t\t\t\t\tconst term = taxonomy.terms[j];\n\t\t\t\t\t\t\tconst termPrefix = `${prefix}.terms[${j}]`;\n\n\t\t\t\t\t\t\tif (!term.slug) {\n\t\t\t\t\t\t\t\terrors.push(`${termPrefix}: slug is required`);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// Uniqueness is per (slug, locale) so the same slug can repeat\n\t\t\t\t\t\t\t\t// across locale variants of the def.\n\t\t\t\t\t\t\t\tconst key = `${term.slug}::${term.locale ?? taxonomy.locale ?? \"\"}`;\n\t\t\t\t\t\t\t\tif (termSlugs.has(key)) {\n\t\t\t\t\t\t\t\t\terrors.push(\n\t\t\t\t\t\t\t\t\t\t`${termPrefix}.slug: duplicate term slug \"${term.slug}\" in taxonomy \"${taxonomy.name}\"`,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttermSlugs.add(key);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (!term.label) {\n\t\t\t\t\t\t\t\terrors.push(`${termPrefix}: label is required`);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Check parent reference validity (for hierarchical taxonomies)\n\t\t\t\t\t\t\tif (term.parent && taxonomy.hierarchical) {\n\t\t\t\t\t\t\t\t// Parent will be validated in a second pass\n\t\t\t\t\t\t\t} else if (term.parent && !taxonomy.hierarchical) {\n\t\t\t\t\t\t\t\twarnings.push(\n\t\t\t\t\t\t\t\t\t`${termPrefix}.parent: taxonomy \"${taxonomy.name}\" is not hierarchical, parent will be ignored`,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Second pass: validate parent references (within the same locale).\n\t\t\t\t\t\tif (taxonomy.hierarchical && taxonomy.terms) {\n\t\t\t\t\t\t\tfor (let j = 0; j < taxonomy.terms.length; j++) {\n\t\t\t\t\t\t\t\tconst term = taxonomy.terms[j];\n\t\t\t\t\t\t\t\tconst termLocale = term.locale ?? taxonomy.locale ?? \"\";\n\t\t\t\t\t\t\t\tif (term.parent && !termSlugs.has(`${term.parent}::${termLocale}`)) {\n\t\t\t\t\t\t\t\t\terrors.push(\n\t\t\t\t\t\t\t\t\t\t`${prefix}.terms[${j}].parent: parent term \"${term.parent}\" not found in taxonomy`,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Check for circular references\n\t\t\t\t\t\t\t\tif (term.parent === term.slug) {\n\t\t\t\t\t\t\t\t\terrors.push(`${prefix}.terms[${j}].parent: term cannot be its own parent`);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Validate menus\n\tif (seed.menus) {\n\t\tif (!Array.isArray(seed.menus)) {\n\t\t\terrors.push(\"menus must be an array\");\n\t\t} else {\n\t\t\tconst menuNames = new Set<string>();\n\n\t\t\tfor (let i = 0; i < seed.menus.length; i++) {\n\t\t\t\tconst menu = seed.menus[i];\n\t\t\t\tconst prefix = `menus[${i}]`;\n\n\t\t\t\tif (!menu.name) {\n\t\t\t\t\terrors.push(`${prefix}: name is required`);\n\t\t\t\t} else {\n\t\t\t\t\t// Uniqueness is per (name, locale) — siblings of a translation\n\t\t\t\t\t// group share name but differ in locale.\n\t\t\t\t\tconst key = `${menu.name}::${menu.locale ?? \"\"}`;\n\t\t\t\t\tif (menuNames.has(key)) {\n\t\t\t\t\t\terrors.push(\n\t\t\t\t\t\t\tmenu.locale\n\t\t\t\t\t\t\t\t? `${prefix}.name: duplicate menu \"${menu.name}\" in locale \"${menu.locale}\"`\n\t\t\t\t\t\t\t\t: `${prefix}.name: duplicate menu name \"${menu.name}\"`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tmenuNames.add(key);\n\t\t\t\t}\n\n\t\t\t\tif (!menu.label) {\n\t\t\t\t\terrors.push(`${prefix}: label is required`);\n\t\t\t\t}\n\n\t\t\t\tif (!Array.isArray(menu.items)) {\n\t\t\t\t\terrors.push(`${prefix}.items: must be an array`);\n\t\t\t\t} else {\n\t\t\t\t\tvalidateMenuItems(menu.items, prefix, errors, warnings);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Validate redirects\n\tif (seed.redirects) {\n\t\tif (!Array.isArray(seed.redirects)) {\n\t\t\terrors.push(\"redirects must be an array\");\n\t\t} else {\n\t\t\tconst redirectSources = new Set<string>();\n\n\t\t\tfor (let i = 0; i < seed.redirects.length; i++) {\n\t\t\t\tconst redirect = seed.redirects[i];\n\t\t\t\tconst prefix = `redirects[${i}]`;\n\n\t\t\t\tif (!isRecord(redirect)) {\n\t\t\t\t\terrors.push(`${prefix}: must be an object`);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst source = typeof redirect.source === \"string\" ? redirect.source : undefined;\n\t\t\t\tconst destination =\n\t\t\t\t\ttypeof redirect.destination === \"string\" ? redirect.destination : undefined;\n\n\t\t\t\tif (!source) {\n\t\t\t\t\terrors.push(`${prefix}: source is required`);\n\t\t\t\t} else {\n\t\t\t\t\tif (!isValidRedirectPath(source)) {\n\t\t\t\t\t\terrors.push(\n\t\t\t\t\t\t\t`${prefix}.source: must be a path starting with / (no protocol-relative URLs, path traversal, or newlines)`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (redirectSources.has(source)) {\n\t\t\t\t\t\terrors.push(`${prefix}.source: duplicate redirect source \"${source}\"`);\n\t\t\t\t\t}\n\t\t\t\t\tredirectSources.add(source);\n\t\t\t\t}\n\n\t\t\t\tif (!destination) {\n\t\t\t\t\terrors.push(`${prefix}: destination is required`);\n\t\t\t\t} else if (!isValidRedirectPath(destination)) {\n\t\t\t\t\terrors.push(\n\t\t\t\t\t\t`${prefix}.destination: must be a path starting with / (no protocol-relative URLs, path traversal, or newlines)`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (redirect.type !== undefined) {\n\t\t\t\t\tif (typeof redirect.type !== \"number\" || !REDIRECT_TYPES.has(redirect.type)) {\n\t\t\t\t\t\terrors.push(`${prefix}.type: must be 301, 302, 307, or 308`);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (redirect.enabled !== undefined && typeof redirect.enabled !== \"boolean\") {\n\t\t\t\t\terrors.push(`${prefix}.enabled: must be a boolean`);\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tredirect.groupName !== undefined &&\n\t\t\t\t\ttypeof redirect.groupName !== \"string\" &&\n\t\t\t\t\tredirect.groupName !== null\n\t\t\t\t) {\n\t\t\t\t\terrors.push(`${prefix}.groupName: must be a string or null`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Validate widget areas\n\tif (seed.widgetAreas) {\n\t\tif (!Array.isArray(seed.widgetAreas)) {\n\t\t\terrors.push(\"widgetAreas must be an array\");\n\t\t} else {\n\t\t\tconst areaNames = new Set<string>();\n\n\t\t\tfor (let i = 0; i < seed.widgetAreas.length; i++) {\n\t\t\t\tconst area = seed.widgetAreas[i];\n\t\t\t\tconst prefix = `widgetAreas[${i}]`;\n\n\t\t\t\tif (!area.name) {\n\t\t\t\t\terrors.push(`${prefix}: name is required`);\n\t\t\t\t} else {\n\t\t\t\t\t// Check for duplicate area names\n\t\t\t\t\tif (areaNames.has(area.name)) {\n\t\t\t\t\t\terrors.push(`${prefix}.name: duplicate widget area name \"${area.name}\"`);\n\t\t\t\t\t}\n\t\t\t\t\tareaNames.add(area.name);\n\t\t\t\t}\n\n\t\t\t\tif (!area.label) {\n\t\t\t\t\terrors.push(`${prefix}: label is required`);\n\t\t\t\t}\n\n\t\t\t\tif (!Array.isArray(area.widgets)) {\n\t\t\t\t\terrors.push(`${prefix}.widgets: must be an array`);\n\t\t\t\t} else {\n\t\t\t\t\tfor (let j = 0; j < area.widgets.length; j++) {\n\t\t\t\t\t\tconst widget = area.widgets[j];\n\t\t\t\t\t\tconst widgetPrefix = `${prefix}.widgets[${j}]`;\n\n\t\t\t\t\t\tif (!widget.type) {\n\t\t\t\t\t\t\terrors.push(`${widgetPrefix}: type is required`);\n\t\t\t\t\t\t} else if (![\"content\", \"menu\", \"component\"].includes(widget.type)) {\n\t\t\t\t\t\t\terrors.push(`${widgetPrefix}.type: must be \"content\", \"menu\", or \"component\"`);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Type-specific validation\n\t\t\t\t\t\tif (widget.type === \"menu\" && !widget.menuName) {\n\t\t\t\t\t\t\terrors.push(`${widgetPrefix}: menuName is required for menu widgets`);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (widget.type === \"component\" && !widget.componentId) {\n\t\t\t\t\t\t\terrors.push(`${widgetPrefix}: componentId is required for component widgets`);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Validate sections\n\tif (seed.sections) {\n\t\tif (!Array.isArray(seed.sections)) {\n\t\t\terrors.push(\"sections must be an array\");\n\t\t} else {\n\t\t\tconst sectionSlugs = new Set<string>();\n\n\t\t\tfor (let i = 0; i < seed.sections.length; i++) {\n\t\t\t\tconst section = seed.sections[i];\n\t\t\t\tconst prefix = `sections[${i}]`;\n\n\t\t\t\tif (!section.slug) {\n\t\t\t\t\terrors.push(`${prefix}: slug is required`);\n\t\t\t\t} else {\n\t\t\t\t\tif (!SLUG_PATTERN.test(section.slug)) {\n\t\t\t\t\t\terrors.push(\n\t\t\t\t\t\t\t`${prefix}.slug: must contain only lowercase letters, numbers, and hyphens`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (sectionSlugs.has(section.slug)) {\n\t\t\t\t\t\terrors.push(`${prefix}.slug: duplicate section slug \"${section.slug}\"`);\n\t\t\t\t\t}\n\t\t\t\t\tsectionSlugs.add(section.slug);\n\t\t\t\t}\n\n\t\t\t\tif (!section.title) {\n\t\t\t\t\terrors.push(`${prefix}: title is required`);\n\t\t\t\t}\n\n\t\t\t\tif (!Array.isArray(section.content)) {\n\t\t\t\t\terrors.push(`${prefix}.content: must be an array`);\n\t\t\t\t}\n\n\t\t\t\t// Validate source\n\t\t\t\tif (section.source && ![\"theme\", \"import\"].includes(section.source)) {\n\t\t\t\t\terrors.push(`${prefix}.source: must be \"theme\" or \"import\"`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Validate bylines\n\tif (seed.bylines) {\n\t\tif (!Array.isArray(seed.bylines)) {\n\t\t\terrors.push(\"bylines must be an array\");\n\t\t} else {\n\t\t\tconst bylineIds = new Set<string>();\n\t\t\tconst bylineSlugs = new Set<string>();\n\t\t\tfor (let i = 0; i < seed.bylines.length; i++) {\n\t\t\t\tconst byline = seed.bylines[i];\n\t\t\t\tconst prefix = `bylines[${i}]`;\n\n\t\t\t\tif (!byline.id) {\n\t\t\t\t\terrors.push(`${prefix}: id is required`);\n\t\t\t\t} else {\n\t\t\t\t\tif (bylineIds.has(byline.id)) {\n\t\t\t\t\t\terrors.push(`${prefix}.id: duplicate byline id \"${byline.id}\"`);\n\t\t\t\t\t}\n\t\t\t\t\tbylineIds.add(byline.id);\n\t\t\t\t}\n\n\t\t\t\tif (!byline.slug) {\n\t\t\t\t\terrors.push(`${prefix}: slug is required`);\n\t\t\t\t} else {\n\t\t\t\t\tif (!SLUG_PATTERN.test(byline.slug)) {\n\t\t\t\t\t\terrors.push(\n\t\t\t\t\t\t\t`${prefix}.slug: must contain only lowercase letters, numbers, and hyphens`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (bylineSlugs.has(byline.slug)) {\n\t\t\t\t\t\terrors.push(`${prefix}.slug: duplicate byline slug \"${byline.slug}\"`);\n\t\t\t\t\t}\n\t\t\t\t\tbylineSlugs.add(byline.slug);\n\t\t\t\t}\n\n\t\t\t\tif (!byline.displayName) {\n\t\t\t\t\terrors.push(`${prefix}: displayName is required`);\n\t\t\t\t}\n\n\t\t\t\tif (byline.avatar !== undefined) {\n\t\t\t\t\tconst avatar: unknown = byline.avatar;\n\t\t\t\t\tif (!isRecord(avatar)) {\n\t\t\t\t\t\terrors.push(`${prefix}.avatar: must be an object`);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// storageKey is used verbatim in a `where storage_key = ?` lookup,\n\t\t\t\t\t\t// so surrounding whitespace would silently never match a real key.\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\ttypeof avatar.storageKey !== \"string\" ||\n\t\t\t\t\t\t\tavatar.storageKey.length === 0 ||\n\t\t\t\t\t\t\tavatar.storageKey !== avatar.storageKey.trim()\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\terrors.push(\n\t\t\t\t\t\t\t\t`${prefix}.avatar.storageKey: must be a non-empty string with no leading or trailing whitespace`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (const key of [\"alt\", \"filename\", \"mimeType\"] as const) {\n\t\t\t\t\t\t\tif (avatar[key] !== undefined && typeof avatar[key] !== \"string\") {\n\t\t\t\t\t\t\t\terrors.push(`${prefix}.avatar.${key}: must be a string`);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// filename/mimeType are used verbatim, so reject blank or\n\t\t\t\t\t\t// whitespace-padded values (an empty filename would create a\n\t\t\t\t\t\t// media row with no basename; a padded mime type is invalid).\n\t\t\t\t\t\tfor (const key of [\"filename\", \"mimeType\"] as const) {\n\t\t\t\t\t\t\tconst v = avatar[key];\n\t\t\t\t\t\t\tif (typeof v === \"string\" && (v.length === 0 || v !== v.trim())) {\n\t\t\t\t\t\t\t\terrors.push(`${prefix}.avatar.${key}: must not be empty or whitespace-padded`);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (const key of [\"width\", \"height\"] as const) {\n\t\t\t\t\t\t\tconst v = avatar[key];\n\t\t\t\t\t\t\tif (v !== undefined && (typeof v !== \"number\" || !Number.isFinite(v) || v < 0)) {\n\t\t\t\t\t\t\t\terrors.push(`${prefix}.avatar.${key}: must be a non-negative number`);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Validate content\n\tif (seed.content) {\n\t\tif (typeof seed.content !== \"object\" || Array.isArray(seed.content)) {\n\t\t\terrors.push(\"content must be an object (collection -> entries)\");\n\t\t} else {\n\t\t\tfor (const [collectionSlug, entries] of Object.entries(seed.content)) {\n\t\t\t\tif (!Array.isArray(entries)) {\n\t\t\t\t\terrors.push(`content.${collectionSlug}: must be an array`);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst entryIds = new Set<string>();\n\n\t\t\t\tfor (let i = 0; i < entries.length; i++) {\n\t\t\t\t\tconst entry = entries[i];\n\t\t\t\t\tconst prefix = `content.${collectionSlug}[${i}]`;\n\n\t\t\t\t\tif (!entry.id) {\n\t\t\t\t\t\terrors.push(`${prefix}: id is required`);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Check for duplicate entry IDs\n\t\t\t\t\t\tif (entryIds.has(entry.id)) {\n\t\t\t\t\t\t\terrors.push(\n\t\t\t\t\t\t\t\t`${prefix}.id: duplicate entry id \"${entry.id}\" in collection \"${collectionSlug}\"`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tentryIds.add(entry.id);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!entry.slug) {\n\t\t\t\t\t\terrors.push(`${prefix}: slug is required`);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!entry.data || typeof entry.data !== \"object\") {\n\t\t\t\t\t\terrors.push(`${prefix}: data must be an object`);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Validate i18n fields\n\t\t\t\t\tif (entry.translationOf) {\n\t\t\t\t\t\tif (!entry.locale) {\n\t\t\t\t\t\t\terrors.push(`${prefix}: locale is required when translationOf is set`);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Second pass: validate translationOf references within this collection\n\t\t\t\tfor (let i = 0; i < entries.length; i++) {\n\t\t\t\t\tconst entry = entries[i];\n\t\t\t\t\tif (entry.translationOf && !entryIds.has(entry.translationOf)) {\n\t\t\t\t\t\terrors.push(\n\t\t\t\t\t\t\t`content.${collectionSlug}[${i}].translationOf: references \"${entry.translationOf}\" which is not in this collection`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Validate cross-references (content refs in menus)\n\tif (seed.menus && seed.content) {\n\t\tconst allContentIds = new Set<string>();\n\t\tfor (const entries of Object.values(seed.content)) {\n\t\t\tif (Array.isArray(entries)) {\n\t\t\t\tfor (const entry of entries) {\n\t\t\t\t\tif (entry.id) {\n\t\t\t\t\t\tallContentIds.add(entry.id);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Check menu item refs\n\t\tfor (const menu of seed.menus) {\n\t\t\tif (Array.isArray(menu.items)) {\n\t\t\t\tvalidateMenuItemRefs(menu.items, allContentIds, warnings);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Validate byline refs in content\n\tif (seed.content) {\n\t\tconst seedBylineIds = new Set<string>((seed.bylines ?? []).map((byline) => byline.id));\n\t\tfor (const [collectionSlug, entries] of Object.entries(seed.content)) {\n\t\t\tif (!Array.isArray(entries)) continue;\n\t\t\tfor (let i = 0; i < entries.length; i++) {\n\t\t\t\tconst entry = entries[i];\n\t\t\t\tif (!entry.bylines) continue;\n\t\t\t\tif (!Array.isArray(entry.bylines)) {\n\t\t\t\t\terrors.push(`content.${collectionSlug}[${i}].bylines: must be an array`);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tfor (let j = 0; j < entry.bylines.length; j++) {\n\t\t\t\t\tconst credit = entry.bylines[j];\n\t\t\t\t\tconst prefix = `content.${collectionSlug}[${i}].bylines[${j}]`;\n\t\t\t\t\tif (!credit.byline) {\n\t\t\t\t\t\terrors.push(`${prefix}.byline: is required`);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (!seedBylineIds.has(credit.byline)) {\n\t\t\t\t\t\terrors.push(`${prefix}.byline: references unknown byline \"${credit.byline}\"`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn {\n\t\tvalid: errors.length === 0,\n\t\terrors,\n\t\twarnings,\n\t};\n}\n\n/**\n * Validate menu items recursively\n */\nfunction validateMenuItems(\n\titems: unknown[],\n\tprefix: string,\n\terrors: string[],\n\twarnings: string[],\n): void {\n\tfor (let i = 0; i < items.length; i++) {\n\t\tconst raw = items[i];\n\t\tconst itemPrefix = `${prefix}.items[${i}]`;\n\n\t\tif (!isRecord(raw)) {\n\t\t\terrors.push(`${itemPrefix}: must be an object`);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst item = raw;\n\n\t\tconst itemType = typeof item.type === \"string\" ? item.type : undefined;\n\n\t\tif (!itemType) {\n\t\t\terrors.push(`${itemPrefix}: type is required`);\n\t\t} else if (![\"custom\", \"page\", \"post\", \"taxonomy\", \"collection\"].includes(itemType)) {\n\t\t\terrors.push(\n\t\t\t\t`${itemPrefix}.type: must be \"custom\", \"page\", \"post\", \"taxonomy\", or \"collection\"`,\n\t\t\t);\n\t\t}\n\n\t\t// Type-specific validation\n\t\tif (itemType === \"custom\" && !item.url) {\n\t\t\terrors.push(`${itemPrefix}: url is required for custom menu items`);\n\t\t}\n\n\t\tif ((itemType === \"page\" || itemType === \"post\") && !item.ref) {\n\t\t\terrors.push(`${itemPrefix}: ref is required for page/post menu items`);\n\t\t}\n\n\t\t// Validate children recursively\n\t\tif (Array.isArray(item.children)) {\n\t\t\tvalidateMenuItems(item.children, itemPrefix, errors, warnings);\n\t\t}\n\t}\n}\n\n/**\n * Validate menu item references exist in content\n */\nfunction validateMenuItemRefs(\n\titems: SeedMenuItem[],\n\tcontentIds: Set<string>,\n\twarnings: string[],\n): void {\n\tfor (const item of items) {\n\t\tif ((item.type === \"page\" || item.type === \"post\") && item.ref) {\n\t\t\tif (!contentIds.has(item.ref)) {\n\t\t\t\twarnings.push(`Menu item references content \"${item.ref}\" which is not in the seed file`);\n\t\t\t}\n\t\t}\n\n\t\tif (item.children) {\n\t\t\tvalidateMenuItemRefs(item.children, contentIds, warnings);\n\t\t}\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"validate-Bz4vqcX1.mjs","names":[],"sources":["../src/seed/validate.ts"],"sourcesContent":["/**\n * Seed file validation\n *\n * Validates a seed file structure before applying it.\n */\n\nimport { FIELD_TYPES } from \"../schema/types.js\";\nimport type { SeedFile, SeedMenuItem, ValidationResult } from \"./types.js\";\n\nconst COLLECTION_FIELD_SLUG_PATTERN = /^[a-z][a-z0-9_]*$/;\nconst SLUG_PATTERN = /^[a-z0-9-]+$/;\nconst REDIRECT_TYPES = new Set([301, 302, 307, 308]);\nconst CRLF_PATTERN = /[\\r\\n]/;\n\n/** Type guard for Record<string, unknown> */\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isValidRedirectPath(path: string): boolean {\n\tif (!path.startsWith(\"/\") || path.startsWith(\"//\") || CRLF_PATTERN.test(path)) {\n\t\treturn false;\n\t}\n\n\ttry {\n\t\treturn !decodeURIComponent(path).split(\"/\").includes(\"..\");\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n/**\n * Validate a seed file\n *\n * @param data - Unknown data to validate as a seed file\n * @returns Validation result with errors and warnings\n */\nexport function validateSeed(data: unknown): ValidationResult {\n\tconst errors: string[] = [];\n\tconst warnings: string[] = [];\n\n\t// Basic type check\n\tif (!data || typeof data !== \"object\") {\n\t\treturn {\n\t\t\tvalid: false,\n\t\t\terrors: [\"Seed must be an object\"],\n\t\t\twarnings: [],\n\t\t};\n\t}\n\n\tconst seed = data as Partial<SeedFile>;\n\n\t// Required fields\n\tif (!seed.version) {\n\t\terrors.push(\"Seed must have a version field\");\n\t} else if (seed.version !== \"1\") {\n\t\terrors.push(`Unsupported seed version: ${String(seed.version)}`);\n\t}\n\n\t// defaultLocale backfills the locale of rows that omit one, so a blank or\n\t// whitespace-padded value would silently write empty/invalid locales to the DB.\n\t// Exported seeds never hit this, but it's part of the public schema now.\n\tif (seed.defaultLocale !== undefined) {\n\t\tif (\n\t\t\ttypeof seed.defaultLocale !== \"string\" ||\n\t\t\tseed.defaultLocale.length === 0 ||\n\t\t\tseed.defaultLocale !== seed.defaultLocale.trim()\n\t\t) {\n\t\t\terrors.push(\n\t\t\t\t\"defaultLocale: must be a non-empty string with no leading or trailing whitespace\",\n\t\t\t);\n\t\t}\n\t}\n\n\t// Validate collections\n\tif (seed.collections) {\n\t\tif (!Array.isArray(seed.collections)) {\n\t\t\terrors.push(\"collections must be an array\");\n\t\t} else {\n\t\t\tconst collectionSlugs = new Set<string>();\n\n\t\t\tfor (let i = 0; i < seed.collections.length; i++) {\n\t\t\t\tconst collection = seed.collections[i];\n\t\t\t\tconst prefix = `collections[${i}]`;\n\n\t\t\t\tif (!collection.slug) {\n\t\t\t\t\terrors.push(`${prefix}: slug is required`);\n\t\t\t\t} else {\n\t\t\t\t\t// Check for valid slug format\n\t\t\t\t\tif (!COLLECTION_FIELD_SLUG_PATTERN.test(collection.slug)) {\n\t\t\t\t\t\terrors.push(\n\t\t\t\t\t\t\t`${prefix}.slug: must start with a letter and contain only lowercase letters, numbers, and underscores`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Check for duplicate slugs\n\t\t\t\t\tif (collectionSlugs.has(collection.slug)) {\n\t\t\t\t\t\terrors.push(`${prefix}.slug: duplicate collection slug \"${collection.slug}\"`);\n\t\t\t\t\t}\n\t\t\t\t\tcollectionSlugs.add(collection.slug);\n\t\t\t\t}\n\n\t\t\t\tif (!collection.label) {\n\t\t\t\t\terrors.push(`${prefix}: label is required`);\n\t\t\t\t}\n\n\t\t\t\t// Validate fields\n\t\t\t\tif (!Array.isArray(collection.fields)) {\n\t\t\t\t\terrors.push(`${prefix}.fields: must be an array`);\n\t\t\t\t} else {\n\t\t\t\t\tconst fieldSlugs = new Set<string>();\n\n\t\t\t\t\tfor (let j = 0; j < collection.fields.length; j++) {\n\t\t\t\t\t\tconst field = collection.fields[j];\n\t\t\t\t\t\tconst fieldPrefix = `${prefix}.fields[${j}]`;\n\n\t\t\t\t\t\tif (!field.slug) {\n\t\t\t\t\t\t\terrors.push(`${fieldPrefix}: slug is required`);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Check for valid slug format\n\t\t\t\t\t\t\tif (!COLLECTION_FIELD_SLUG_PATTERN.test(field.slug)) {\n\t\t\t\t\t\t\t\terrors.push(\n\t\t\t\t\t\t\t\t\t`${fieldPrefix}.slug: must start with a letter and contain only lowercase letters, numbers, and underscores`,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Check for duplicate field slugs\n\t\t\t\t\t\t\tif (fieldSlugs.has(field.slug)) {\n\t\t\t\t\t\t\t\terrors.push(\n\t\t\t\t\t\t\t\t\t`${fieldPrefix}.slug: duplicate field slug \"${field.slug}\" in collection \"${collection.slug}\"`,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tfieldSlugs.add(field.slug);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!field.label) {\n\t\t\t\t\t\t\terrors.push(`${fieldPrefix}: label is required`);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!field.type) {\n\t\t\t\t\t\t\terrors.push(`${fieldPrefix}: type is required`);\n\t\t\t\t\t\t} else if (!(FIELD_TYPES as readonly string[]).includes(field.type)) {\n\t\t\t\t\t\t\terrors.push(`${fieldPrefix}.type: unsupported field type \"${field.type}\"`);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Validate taxonomies\n\tif (seed.taxonomies) {\n\t\tif (!Array.isArray(seed.taxonomies)) {\n\t\t\terrors.push(\"taxonomies must be an array\");\n\t\t} else {\n\t\t\tconst taxonomyNames = new Set<string>();\n\n\t\t\tfor (let i = 0; i < seed.taxonomies.length; i++) {\n\t\t\t\tconst taxonomy = seed.taxonomies[i];\n\t\t\t\tconst prefix = `taxonomies[${i}]`;\n\n\t\t\t\tif (!taxonomy.name) {\n\t\t\t\t\terrors.push(`${prefix}: name is required`);\n\t\t\t\t} else {\n\t\t\t\t\t// Uniqueness is per (name, locale).\n\t\t\t\t\tconst key = `${taxonomy.name}::${taxonomy.locale ?? \"\"}`;\n\t\t\t\t\tif (taxonomyNames.has(key)) {\n\t\t\t\t\t\terrors.push(\n\t\t\t\t\t\t\ttaxonomy.locale\n\t\t\t\t\t\t\t\t? `${prefix}.name: duplicate taxonomy \"${taxonomy.name}\" in locale \"${taxonomy.locale}\"`\n\t\t\t\t\t\t\t\t: `${prefix}.name: duplicate taxonomy name \"${taxonomy.name}\"`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\ttaxonomyNames.add(key);\n\t\t\t\t}\n\n\t\t\t\tif (!taxonomy.label) {\n\t\t\t\t\terrors.push(`${prefix}: label is required`);\n\t\t\t\t}\n\n\t\t\t\tif (taxonomy.hierarchical === undefined) {\n\t\t\t\t\terrors.push(`${prefix}: hierarchical is required`);\n\t\t\t\t}\n\n\t\t\t\tif (!Array.isArray(taxonomy.collections)) {\n\t\t\t\t\terrors.push(`${prefix}.collections: must be an array`);\n\t\t\t\t} else if (taxonomy.collections.length === 0) {\n\t\t\t\t\twarnings.push(\n\t\t\t\t\t\t`${prefix}.collections: taxonomy \"${taxonomy.name}\" is not assigned to any collections`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Validate terms if present\n\t\t\t\tif (taxonomy.terms) {\n\t\t\t\t\tif (!Array.isArray(taxonomy.terms)) {\n\t\t\t\t\t\terrors.push(`${prefix}.terms: must be an array`);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst termSlugs = new Set<string>();\n\n\t\t\t\t\t\tfor (let j = 0; j < taxonomy.terms.length; j++) {\n\t\t\t\t\t\t\tconst term = taxonomy.terms[j];\n\t\t\t\t\t\t\tconst termPrefix = `${prefix}.terms[${j}]`;\n\n\t\t\t\t\t\t\tif (!term.slug) {\n\t\t\t\t\t\t\t\terrors.push(`${termPrefix}: slug is required`);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// Uniqueness is per (slug, locale) so the same slug can repeat\n\t\t\t\t\t\t\t\t// across locale variants of the def.\n\t\t\t\t\t\t\t\tconst key = `${term.slug}::${term.locale ?? taxonomy.locale ?? \"\"}`;\n\t\t\t\t\t\t\t\tif (termSlugs.has(key)) {\n\t\t\t\t\t\t\t\t\terrors.push(\n\t\t\t\t\t\t\t\t\t\t`${termPrefix}.slug: duplicate term slug \"${term.slug}\" in taxonomy \"${taxonomy.name}\"`,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttermSlugs.add(key);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (!term.label) {\n\t\t\t\t\t\t\t\terrors.push(`${termPrefix}: label is required`);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Check parent reference validity (for hierarchical taxonomies)\n\t\t\t\t\t\t\tif (term.parent && taxonomy.hierarchical) {\n\t\t\t\t\t\t\t\t// Parent will be validated in a second pass\n\t\t\t\t\t\t\t} else if (term.parent && !taxonomy.hierarchical) {\n\t\t\t\t\t\t\t\twarnings.push(\n\t\t\t\t\t\t\t\t\t`${termPrefix}.parent: taxonomy \"${taxonomy.name}\" is not hierarchical, parent will be ignored`,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Second pass: validate parent references (within the same locale).\n\t\t\t\t\t\tif (taxonomy.hierarchical && taxonomy.terms) {\n\t\t\t\t\t\t\tfor (let j = 0; j < taxonomy.terms.length; j++) {\n\t\t\t\t\t\t\t\tconst term = taxonomy.terms[j];\n\t\t\t\t\t\t\t\tconst termLocale = term.locale ?? taxonomy.locale ?? \"\";\n\t\t\t\t\t\t\t\tif (term.parent && !termSlugs.has(`${term.parent}::${termLocale}`)) {\n\t\t\t\t\t\t\t\t\terrors.push(\n\t\t\t\t\t\t\t\t\t\t`${prefix}.terms[${j}].parent: parent term \"${term.parent}\" not found in taxonomy`,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Check for circular references\n\t\t\t\t\t\t\t\tif (term.parent === term.slug) {\n\t\t\t\t\t\t\t\t\terrors.push(`${prefix}.terms[${j}].parent: term cannot be its own parent`);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Validate menus\n\tif (seed.menus) {\n\t\tif (!Array.isArray(seed.menus)) {\n\t\t\terrors.push(\"menus must be an array\");\n\t\t} else {\n\t\t\tconst menuNames = new Set<string>();\n\n\t\t\tfor (let i = 0; i < seed.menus.length; i++) {\n\t\t\t\tconst menu = seed.menus[i];\n\t\t\t\tconst prefix = `menus[${i}]`;\n\n\t\t\t\tif (!menu.name) {\n\t\t\t\t\terrors.push(`${prefix}: name is required`);\n\t\t\t\t} else {\n\t\t\t\t\t// Uniqueness is per (name, locale) — siblings of a translation\n\t\t\t\t\t// group share name but differ in locale.\n\t\t\t\t\tconst key = `${menu.name}::${menu.locale ?? \"\"}`;\n\t\t\t\t\tif (menuNames.has(key)) {\n\t\t\t\t\t\terrors.push(\n\t\t\t\t\t\t\tmenu.locale\n\t\t\t\t\t\t\t\t? `${prefix}.name: duplicate menu \"${menu.name}\" in locale \"${menu.locale}\"`\n\t\t\t\t\t\t\t\t: `${prefix}.name: duplicate menu name \"${menu.name}\"`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tmenuNames.add(key);\n\t\t\t\t}\n\n\t\t\t\tif (!menu.label) {\n\t\t\t\t\terrors.push(`${prefix}: label is required`);\n\t\t\t\t}\n\n\t\t\t\tif (!Array.isArray(menu.items)) {\n\t\t\t\t\terrors.push(`${prefix}.items: must be an array`);\n\t\t\t\t} else {\n\t\t\t\t\tvalidateMenuItems(menu.items, prefix, errors, warnings);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Validate redirects\n\tif (seed.redirects) {\n\t\tif (!Array.isArray(seed.redirects)) {\n\t\t\terrors.push(\"redirects must be an array\");\n\t\t} else {\n\t\t\tconst redirectSources = new Set<string>();\n\n\t\t\tfor (let i = 0; i < seed.redirects.length; i++) {\n\t\t\t\tconst redirect = seed.redirects[i];\n\t\t\t\tconst prefix = `redirects[${i}]`;\n\n\t\t\t\tif (!isRecord(redirect)) {\n\t\t\t\t\terrors.push(`${prefix}: must be an object`);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst source = typeof redirect.source === \"string\" ? redirect.source : undefined;\n\t\t\t\tconst destination =\n\t\t\t\t\ttypeof redirect.destination === \"string\" ? redirect.destination : undefined;\n\n\t\t\t\tif (!source) {\n\t\t\t\t\terrors.push(`${prefix}: source is required`);\n\t\t\t\t} else {\n\t\t\t\t\tif (!isValidRedirectPath(source)) {\n\t\t\t\t\t\terrors.push(\n\t\t\t\t\t\t\t`${prefix}.source: must be a path starting with / (no protocol-relative URLs, path traversal, or newlines)`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (redirectSources.has(source)) {\n\t\t\t\t\t\terrors.push(`${prefix}.source: duplicate redirect source \"${source}\"`);\n\t\t\t\t\t}\n\t\t\t\t\tredirectSources.add(source);\n\t\t\t\t}\n\n\t\t\t\tif (!destination) {\n\t\t\t\t\terrors.push(`${prefix}: destination is required`);\n\t\t\t\t} else if (!isValidRedirectPath(destination)) {\n\t\t\t\t\terrors.push(\n\t\t\t\t\t\t`${prefix}.destination: must be a path starting with / (no protocol-relative URLs, path traversal, or newlines)`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (redirect.type !== undefined) {\n\t\t\t\t\tif (typeof redirect.type !== \"number\" || !REDIRECT_TYPES.has(redirect.type)) {\n\t\t\t\t\t\terrors.push(`${prefix}.type: must be 301, 302, 307, or 308`);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (redirect.enabled !== undefined && typeof redirect.enabled !== \"boolean\") {\n\t\t\t\t\terrors.push(`${prefix}.enabled: must be a boolean`);\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tredirect.groupName !== undefined &&\n\t\t\t\t\ttypeof redirect.groupName !== \"string\" &&\n\t\t\t\t\tredirect.groupName !== null\n\t\t\t\t) {\n\t\t\t\t\terrors.push(`${prefix}.groupName: must be a string or null`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Validate widget areas\n\tif (seed.widgetAreas) {\n\t\tif (!Array.isArray(seed.widgetAreas)) {\n\t\t\terrors.push(\"widgetAreas must be an array\");\n\t\t} else {\n\t\t\tconst areaNames = new Set<string>();\n\n\t\t\tfor (let i = 0; i < seed.widgetAreas.length; i++) {\n\t\t\t\tconst area = seed.widgetAreas[i];\n\t\t\t\tconst prefix = `widgetAreas[${i}]`;\n\n\t\t\t\tif (!area.name) {\n\t\t\t\t\terrors.push(`${prefix}: name is required`);\n\t\t\t\t} else {\n\t\t\t\t\t// Check for duplicate area names\n\t\t\t\t\tif (areaNames.has(area.name)) {\n\t\t\t\t\t\terrors.push(`${prefix}.name: duplicate widget area name \"${area.name}\"`);\n\t\t\t\t\t}\n\t\t\t\t\tareaNames.add(area.name);\n\t\t\t\t}\n\n\t\t\t\tif (!area.label) {\n\t\t\t\t\terrors.push(`${prefix}: label is required`);\n\t\t\t\t}\n\n\t\t\t\tif (!Array.isArray(area.widgets)) {\n\t\t\t\t\terrors.push(`${prefix}.widgets: must be an array`);\n\t\t\t\t} else {\n\t\t\t\t\tfor (let j = 0; j < area.widgets.length; j++) {\n\t\t\t\t\t\tconst widget = area.widgets[j];\n\t\t\t\t\t\tconst widgetPrefix = `${prefix}.widgets[${j}]`;\n\n\t\t\t\t\t\tif (!widget.type) {\n\t\t\t\t\t\t\terrors.push(`${widgetPrefix}: type is required`);\n\t\t\t\t\t\t} else if (![\"content\", \"menu\", \"component\"].includes(widget.type)) {\n\t\t\t\t\t\t\terrors.push(`${widgetPrefix}.type: must be \"content\", \"menu\", or \"component\"`);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Type-specific validation\n\t\t\t\t\t\tif (widget.type === \"menu\" && !widget.menuName) {\n\t\t\t\t\t\t\terrors.push(`${widgetPrefix}: menuName is required for menu widgets`);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (widget.type === \"component\" && !widget.componentId) {\n\t\t\t\t\t\t\terrors.push(`${widgetPrefix}: componentId is required for component widgets`);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Validate sections\n\tif (seed.sections) {\n\t\tif (!Array.isArray(seed.sections)) {\n\t\t\terrors.push(\"sections must be an array\");\n\t\t} else {\n\t\t\tconst sectionSlugs = new Set<string>();\n\n\t\t\tfor (let i = 0; i < seed.sections.length; i++) {\n\t\t\t\tconst section = seed.sections[i];\n\t\t\t\tconst prefix = `sections[${i}]`;\n\n\t\t\t\tif (!section.slug) {\n\t\t\t\t\terrors.push(`${prefix}: slug is required`);\n\t\t\t\t} else {\n\t\t\t\t\tif (!SLUG_PATTERN.test(section.slug)) {\n\t\t\t\t\t\terrors.push(\n\t\t\t\t\t\t\t`${prefix}.slug: must contain only lowercase letters, numbers, and hyphens`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (sectionSlugs.has(section.slug)) {\n\t\t\t\t\t\terrors.push(`${prefix}.slug: duplicate section slug \"${section.slug}\"`);\n\t\t\t\t\t}\n\t\t\t\t\tsectionSlugs.add(section.slug);\n\t\t\t\t}\n\n\t\t\t\tif (!section.title) {\n\t\t\t\t\terrors.push(`${prefix}: title is required`);\n\t\t\t\t}\n\n\t\t\t\tif (!Array.isArray(section.content)) {\n\t\t\t\t\terrors.push(`${prefix}.content: must be an array`);\n\t\t\t\t}\n\n\t\t\t\t// Validate source\n\t\t\t\tif (section.source && ![\"theme\", \"import\"].includes(section.source)) {\n\t\t\t\t\terrors.push(`${prefix}.source: must be \"theme\" or \"import\"`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Validate bylines\n\tif (seed.bylines) {\n\t\tif (!Array.isArray(seed.bylines)) {\n\t\t\terrors.push(\"bylines must be an array\");\n\t\t} else {\n\t\t\tconst bylineIds = new Set<string>();\n\t\t\tconst bylineSlugs = new Set<string>();\n\t\t\tfor (let i = 0; i < seed.bylines.length; i++) {\n\t\t\t\tconst byline = seed.bylines[i];\n\t\t\t\tconst prefix = `bylines[${i}]`;\n\n\t\t\t\tif (!byline.id) {\n\t\t\t\t\terrors.push(`${prefix}: id is required`);\n\t\t\t\t} else {\n\t\t\t\t\tif (bylineIds.has(byline.id)) {\n\t\t\t\t\t\terrors.push(`${prefix}.id: duplicate byline id \"${byline.id}\"`);\n\t\t\t\t\t}\n\t\t\t\t\tbylineIds.add(byline.id);\n\t\t\t\t}\n\n\t\t\t\tif (!byline.slug) {\n\t\t\t\t\terrors.push(`${prefix}: slug is required`);\n\t\t\t\t} else {\n\t\t\t\t\tif (!SLUG_PATTERN.test(byline.slug)) {\n\t\t\t\t\t\terrors.push(\n\t\t\t\t\t\t\t`${prefix}.slug: must contain only lowercase letters, numbers, and hyphens`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tif (bylineSlugs.has(byline.slug)) {\n\t\t\t\t\t\terrors.push(`${prefix}.slug: duplicate byline slug \"${byline.slug}\"`);\n\t\t\t\t\t}\n\t\t\t\t\tbylineSlugs.add(byline.slug);\n\t\t\t\t}\n\n\t\t\t\tif (!byline.displayName) {\n\t\t\t\t\terrors.push(`${prefix}: displayName is required`);\n\t\t\t\t}\n\n\t\t\t\tif (byline.avatar !== undefined) {\n\t\t\t\t\tconst avatar: unknown = byline.avatar;\n\t\t\t\t\tif (!isRecord(avatar)) {\n\t\t\t\t\t\terrors.push(`${prefix}.avatar: must be an object`);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// storageKey is used verbatim in a `where storage_key = ?` lookup,\n\t\t\t\t\t\t// so surrounding whitespace would silently never match a real key.\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\ttypeof avatar.storageKey !== \"string\" ||\n\t\t\t\t\t\t\tavatar.storageKey.length === 0 ||\n\t\t\t\t\t\t\tavatar.storageKey !== avatar.storageKey.trim()\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\terrors.push(\n\t\t\t\t\t\t\t\t`${prefix}.avatar.storageKey: must be a non-empty string with no leading or trailing whitespace`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (const key of [\"alt\", \"filename\", \"mimeType\"] as const) {\n\t\t\t\t\t\t\tif (avatar[key] !== undefined && typeof avatar[key] !== \"string\") {\n\t\t\t\t\t\t\t\terrors.push(`${prefix}.avatar.${key}: must be a string`);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// filename/mimeType are used verbatim, so reject blank or\n\t\t\t\t\t\t// whitespace-padded values (an empty filename would create a\n\t\t\t\t\t\t// media row with no basename; a padded mime type is invalid).\n\t\t\t\t\t\tfor (const key of [\"filename\", \"mimeType\"] as const) {\n\t\t\t\t\t\t\tconst v = avatar[key];\n\t\t\t\t\t\t\tif (typeof v === \"string\" && (v.length === 0 || v !== v.trim())) {\n\t\t\t\t\t\t\t\terrors.push(`${prefix}.avatar.${key}: must not be empty or whitespace-padded`);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (const key of [\"width\", \"height\"] as const) {\n\t\t\t\t\t\t\tconst v = avatar[key];\n\t\t\t\t\t\t\tif (v !== undefined && (typeof v !== \"number\" || !Number.isFinite(v) || v < 0)) {\n\t\t\t\t\t\t\t\terrors.push(`${prefix}.avatar.${key}: must be a non-negative number`);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Validate content\n\tif (seed.content) {\n\t\tif (typeof seed.content !== \"object\" || Array.isArray(seed.content)) {\n\t\t\terrors.push(\"content must be an object (collection -> entries)\");\n\t\t} else {\n\t\t\tfor (const [collectionSlug, entries] of Object.entries(seed.content)) {\n\t\t\t\tif (!Array.isArray(entries)) {\n\t\t\t\t\terrors.push(`content.${collectionSlug}: must be an array`);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst entryIds = new Set<string>();\n\n\t\t\t\tfor (let i = 0; i < entries.length; i++) {\n\t\t\t\t\tconst entry = entries[i];\n\t\t\t\t\tconst prefix = `content.${collectionSlug}[${i}]`;\n\n\t\t\t\t\tif (!entry.id) {\n\t\t\t\t\t\terrors.push(`${prefix}: id is required`);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Check for duplicate entry IDs\n\t\t\t\t\t\tif (entryIds.has(entry.id)) {\n\t\t\t\t\t\t\terrors.push(\n\t\t\t\t\t\t\t\t`${prefix}.id: duplicate entry id \"${entry.id}\" in collection \"${collectionSlug}\"`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tentryIds.add(entry.id);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!entry.slug) {\n\t\t\t\t\t\terrors.push(`${prefix}: slug is required`);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!entry.data || typeof entry.data !== \"object\") {\n\t\t\t\t\t\terrors.push(`${prefix}: data must be an object`);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Validate i18n fields\n\t\t\t\t\tif (entry.translationOf) {\n\t\t\t\t\t\tif (!entry.locale) {\n\t\t\t\t\t\t\terrors.push(`${prefix}: locale is required when translationOf is set`);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Second pass: validate translationOf references within this collection\n\t\t\t\tfor (let i = 0; i < entries.length; i++) {\n\t\t\t\t\tconst entry = entries[i];\n\t\t\t\t\tif (entry.translationOf && !entryIds.has(entry.translationOf)) {\n\t\t\t\t\t\terrors.push(\n\t\t\t\t\t\t\t`content.${collectionSlug}[${i}].translationOf: references \"${entry.translationOf}\" which is not in this collection`,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Validate cross-references (content refs in menus)\n\tif (seed.menus && seed.content) {\n\t\tconst allContentIds = new Set<string>();\n\t\tfor (const entries of Object.values(seed.content)) {\n\t\t\tif (Array.isArray(entries)) {\n\t\t\t\tfor (const entry of entries) {\n\t\t\t\t\tif (entry.id) {\n\t\t\t\t\t\tallContentIds.add(entry.id);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Check menu item refs\n\t\tfor (const menu of seed.menus) {\n\t\t\tif (Array.isArray(menu.items)) {\n\t\t\t\tvalidateMenuItemRefs(menu.items, allContentIds, warnings);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Validate byline refs in content\n\tif (seed.content) {\n\t\tconst seedBylineIds = new Set<string>((seed.bylines ?? []).map((byline) => byline.id));\n\t\tfor (const [collectionSlug, entries] of Object.entries(seed.content)) {\n\t\t\tif (!Array.isArray(entries)) continue;\n\t\t\tfor (let i = 0; i < entries.length; i++) {\n\t\t\t\tconst entry = entries[i];\n\t\t\t\tif (!entry.bylines) continue;\n\t\t\t\tif (!Array.isArray(entry.bylines)) {\n\t\t\t\t\terrors.push(`content.${collectionSlug}[${i}].bylines: must be an array`);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tfor (let j = 0; j < entry.bylines.length; j++) {\n\t\t\t\t\tconst credit = entry.bylines[j];\n\t\t\t\t\tconst prefix = `content.${collectionSlug}[${i}].bylines[${j}]`;\n\t\t\t\t\tif (!credit.byline) {\n\t\t\t\t\t\terrors.push(`${prefix}.byline: is required`);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tif (!seedBylineIds.has(credit.byline)) {\n\t\t\t\t\t\terrors.push(`${prefix}.byline: references unknown byline \"${credit.byline}\"`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn {\n\t\tvalid: errors.length === 0,\n\t\terrors,\n\t\twarnings,\n\t};\n}\n\n/**\n * Validate menu items recursively\n */\nfunction validateMenuItems(\n\titems: unknown[],\n\tprefix: string,\n\terrors: string[],\n\twarnings: string[],\n): void {\n\tfor (let i = 0; i < items.length; i++) {\n\t\tconst raw = items[i];\n\t\tconst itemPrefix = `${prefix}.items[${i}]`;\n\n\t\tif (!isRecord(raw)) {\n\t\t\terrors.push(`${itemPrefix}: must be an object`);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst item = raw;\n\n\t\tconst itemType = typeof item.type === \"string\" ? item.type : undefined;\n\n\t\tif (!itemType) {\n\t\t\terrors.push(`${itemPrefix}: type is required`);\n\t\t} else if (![\"custom\", \"page\", \"post\", \"taxonomy\", \"collection\"].includes(itemType)) {\n\t\t\terrors.push(\n\t\t\t\t`${itemPrefix}.type: must be \"custom\", \"page\", \"post\", \"taxonomy\", or \"collection\"`,\n\t\t\t);\n\t\t}\n\n\t\t// Type-specific validation\n\t\tif (itemType === \"custom\" && !item.url) {\n\t\t\terrors.push(`${itemPrefix}: url is required for custom menu items`);\n\t\t}\n\n\t\tif ((itemType === \"page\" || itemType === \"post\") && !item.ref) {\n\t\t\terrors.push(`${itemPrefix}: ref is required for page/post menu items`);\n\t\t}\n\n\t\t// Validate children recursively\n\t\tif (Array.isArray(item.children)) {\n\t\t\tvalidateMenuItems(item.children, itemPrefix, errors, warnings);\n\t\t}\n\t}\n}\n\n/**\n * Validate menu item references exist in content\n */\nfunction validateMenuItemRefs(\n\titems: SeedMenuItem[],\n\tcontentIds: Set<string>,\n\twarnings: string[],\n): void {\n\tfor (const item of items) {\n\t\tif ((item.type === \"page\" || item.type === \"post\") && item.ref) {\n\t\t\tif (!contentIds.has(item.ref)) {\n\t\t\t\twarnings.push(`Menu item references content \"${item.ref}\" which is not in the seed file`);\n\t\t\t}\n\t\t}\n\n\t\tif (item.children) {\n\t\t\tvalidateMenuItemRefs(item.children, contentIds, warnings);\n\t\t}\n\t}\n}\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
- import { d as FieldType } from "./types-DbCWhHet.mjs";
2
- import { t as Database } from "./types-OT_Es5mp.mjs";
3
- import { i as SiteSettings } from "./types-DX6v9KzJ.mjs";
4
- import { d as Storage } from "./types-kwqCOUxj.mjs";
1
+ import { d as FieldType } from "./types-BUUVn1zr.mjs";
2
+ import { t as Database } from "./types-BPzXTV9x.mjs";
3
+ import { i as SiteSettings } from "./types-S15DXXNi.mjs";
4
+ import { d as Storage } from "./types-D4kUqbHh.mjs";
5
5
  import { Kysely } from "kysely";
6
6
 
7
7
  //#region src/seed/types.d.ts
@@ -374,4 +374,4 @@ declare function loadUserSeed(): Promise<SeedFile | null>;
374
374
  declare function validateSeed(data: unknown): ValidationResult;
375
375
  //#endregion
376
376
  export { SeedTaxonomyTerm as _, applySeed as a, ValidationResult as b, SeedCollection as c, SeedFile as d, SeedMenu as f, SeedTaxonomy as g, SeedSection as h, defaultSeed as i, SeedContentEntry as l, SeedRedirect as m, loadSeed as n, SeedApplyOptions as o, SeedMenuItem as p, loadUserSeed as r, SeedApplyResult as s, validateSeed as t, SeedField as u, SeedWidget as v, SeedWidgetArea as y };
377
- //# sourceMappingURL=validate-BPAHUSge.d.mts.map
377
+ //# sourceMappingURL=validate-CNwkPWzz.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validate-BPAHUSge.d.mts","names":[],"sources":["../src/seed/types.ts","../src/seed/apply.ts","../src/seed/default.ts","../src/seed/load.ts","../src/seed/validate.ts"],"mappings":";;;;;;;;;;UAciB,QAAA;EA8BH;EA5Bb,OAAA;EAkCY;EA/BZ,OAAA;EAqCW;;;;;;;EA5BX,aAAA;EAAA;EAGA,IAAA;IACC,IAAA;IACA,WAAA;IACA,MAAA;EAAA;EAIU;EAAX,QAAA,GAAW,OAAA,CAAQ,YAAA;EAGnB;EAAA,WAAA,GAAc,cAAA;EAGd;EAAA,UAAA,GAAa,YAAA;EAGb;EAAA,KAAA,GAAQ,QAAA;EAGR;EAAA,SAAA,GAAY,YAAA;EAGZ;EAAA,WAAA,GAAc,cAAA;EAGd;EAAA,QAAA,GAAW,WAAA;EAGX;EAAA,OAAA,GAAU,UAAA;EAGV;EAAA,OAAA,GAAU,MAAA,SAAe,gBAAA;AAAA;;;AAM1B;UAAiB,cAAA;EAChB,IAAA;EACA,KAAA;EACA,aAAA;EACA,WAAA;EACA,IAAA;EACA,QAAA;EACA,UAAA;EADA;EAGA,eAAA;EACA,MAAA,EAAQ,SAAA;AAAA;;;;UAMQ,SAAA;EAChB,IAAA;EACA,KAAA;EACA,IAAA,EAAM,SAAA;EACN,QAAA;EACA,MAAA;EACA,UAAA;EACA,YAAA;EACA,UAAA,GAAa,MAAA;EACb,MAAA;EACA,OAAA,GAAU,MAAA;AAAA;;;;;UAOM,YAAA;EATH;EAWb,EAAA;EACA,IAAA;EACA,KAAA;EACA,aAAA;EACA,YAAA;EACA,WAAA;EACA,MAAA;EACA,aAAA;EACA,KAAA,GAAQ,gBAAA;AAAA;;;;UAMQ,gBAAA;EAThB;EAWA,EAAA;EACA,IAAA;EACA,KAAA;EACA,WAAA;EACA,MAAA;EACA,MAAA;EACA,aAAA;AAAA;;;;UAMgB,QAAA;EAVhB;EAYA,EAAA;EACA,IAAA;EACA,KAAA;EACA,MAAA;EACA,aAAA;EACA,KAAA,EAAO,YAAA;AAAA;;;;UAMS,YAAA;EAVhB;EAYA,EAAA;EACA,IAAA;EACA,KAAA;EACA,GAAA;EACA,GAAA;EACA,UAAA;EACA,MAAA;EACA,SAAA;EACA,UAAA;EACA,MAAA;EACA,aAAA;EACA,QAAA,GAAW,YAAA;AAAA;;;;UAMK,YAAA;EAChB,MAAA;EACA,WAAA;EACA,IAAA;EACA,OAAA;EACA,SAAA;AAAA;;;;UAMgB,cAAA;EAChB,IAAA;EACA,KAAA;EACA,WAAA;EACA,OAAA,EAAS,UAAA;AAAA;;;;UAMO,UAAA;EAChB,IAAA;EACA,KAAA;EAGA,OAAA,GAAU,KAAA;IAAQ,KAAA;IAAe,IAAA;IAAA,CAAgB,GAAA;EAAA;EAGjD,QAAA;EAGA,WAAA;EACA,KAAA,GAAQ,MAAA;AAAA;;AAZT;;UAkBiB,WAAA;EAChB,IAAA;EACA,KAAA;EACA,WAAA;EAhBA;EAkBA,QAAA;EAlBkB;EAoBlB,OAAA,EAAS,KAAA;IAAQ,KAAA;IAAe,IAAA;IAAA,CAAgB,GAAA;EAAA;EAbxC;EAeR,MAAA;AAAA;AATD;;;AAAA,UAeiB,UAAA;EAdhB;EAgBA,EAAA;EACA,IAAA;EACA,WAAA;EACA,GAAA;EACA,UAAA;EACA,OAAA;EAfgC;;;;;AAQjC;;EAeC,MAAA,GAAS,gBAAA;AAAA;AAAA,UAGO,gBAAA;EAfhB;EAiBA,UAAA;EAfA;EAiBA,GAAA;EAfA;EAiBA,QAAA;EATS;EAWT,QAAA;EACA,KAAA;EACA,MAAA;AAAA;;;;UAMgB,gBAAA;EAVhB;EAYA,EAAA;EATA;EAYA,IAAA;EAXM;EAcN,MAAA;EARgB;EAWhB,IAAA,EAAM,MAAA;;EAGN,UAAA,GAAa,MAAA;EAAA;EAGb,OAAA,GAAU,gBAAA;EAAgB;EAG1B,MAAA;EAlBA;;;;EAwBA,aAAA;AAAA;AAAA,UAGgB,gBAAA;EAZhB;EAcA,MAAA;EACA,SAAA;AAAA;;;AAHD;UASiB,gBAAA;;EAEhB,cAAA;EARS;EAWT,UAAA;EALgC;EAQhC,aAAA;EAMiB;;;;EAAjB,OAAA,GAAU,OAAA;EAAA;;;;AAkBX;;;;;;EANC,iBAAA;AAAA;;;;UAMgB,eAAA;EAChB,WAAA;IAAe,OAAA;IAAiB,OAAA;IAAiB,OAAA;EAAA;EACjD,MAAA;IAAU,OAAA;IAAiB,OAAA;IAAiB,OAAA;EAAA;EAC5C,UAAA;IAAc,OAAA;IAAiB,KAAA;EAAA;EAC/B,OAAA;IAAW,OAAA;IAAiB,OAAA;IAAiB,OAAA;EAAA;EAC7C,KAAA;IAAS,OAAA;IAAiB,KAAA;EAAA;EAC1B,SAAA;IAAa,OAAA;IAAiB,OAAA;IAAiB,OAAA;EAAA;EAC/C,WAAA;IAAe,OAAA;IAAiB,OAAA;EAAA;EAChC,QAAA;IAAY,OAAA;IAAiB,OAAA;IAAiB,OAAA;EAAA;EAC9C,QAAA;IAAY,OAAA;EAAA;EACZ,OAAA;IAAW,OAAA;IAAiB,OAAA;IAAiB,OAAA;EAAA;EAC7C,KAAA;IAAS,OAAA;IAAiB,OAAA;EAAA;AAAA;;;;UAMV,gBAAA;EAChB,KAAA;EACA,MAAA;EACA,QAAA;AAAA;;;;;;;;;;;;;iBCtRqB,SAAA,CACrB,EAAA,EAAI,MAAA,CAAO,QAAA,GACX,IAAA,EAAM,QAAA,EACN,OAAA,GAAS,gBAAA,GACP,OAAA,CAAQ,eAAA;;;cC1DE,WAAA,EAAa,QAAA;;;;;;iBCcJ,QAAA,CAAA,GAAY,OAAA,CAAQ,QAAA;;;;iBAQpB,YAAA,CAAA,GAAgB,OAAA,CAAQ,QAAA;;;;AHjB9C;;;;;iBIuBgB,YAAA,CAAa,IAAA,YAAgB,gBAAA"}
1
+ {"version":3,"file":"validate-CNwkPWzz.d.mts","names":[],"sources":["../src/seed/types.ts","../src/seed/apply.ts","../src/seed/default.ts","../src/seed/load.ts","../src/seed/validate.ts"],"mappings":"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"}
@@ -142,4 +142,4 @@ async function validateContentData(db, collection, data, options = {}) {
142
142
 
143
143
  //#endregion
144
144
  export { validateContentData };
145
- //# sourceMappingURL=validation-CE5i4q0c.mjs.map
145
+ //# sourceMappingURL=validation-DgGTJm3u.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"validation-CE5i4q0c.mjs","names":[],"sources":["../src/api/handlers/validation.ts"],"sourcesContent":["/**\n * Field-level validation for content create / update.\n *\n * Wires the existing `generateZodSchema()` pipeline (`schema/zod-generator.ts`)\n * into the handler boundary so REST and MCP both get the same enforcement:\n *\n * - required fields must be present and non-empty\n * - select / multiSelect values must match the configured options\n * - reference fields must resolve to a real, non-trashed target\n *\n * Errors surface as `{ code: \"VALIDATION_ERROR\", message }` with all\n * offending fields listed in one message so callers can fix everything in\n * a single round trip.\n */\n\nimport { sql, type Kysely } from \"kysely\";\n\nimport type { Database } from \"../../database/types.js\";\nimport { validateIdentifier } from \"../../database/validate.js\";\nimport { SchemaRegistry } from \"../../schema/registry.js\";\nimport type { Field } from \"../../schema/types.js\";\nimport { generateZodSchema } from \"../../schema/zod-generator.js\";\nimport { chunks, SQL_BATCH_SIZE } from \"../../utils/chunks.js\";\nimport { isMissingTableError } from \"../../utils/db-errors.js\";\n\ntype ValidationResult =\n\t| { ok: true }\n\t| { ok: false; error: { code: \"VALIDATION_ERROR\" | \"COLLECTION_NOT_FOUND\"; message: string } };\n\n/** Treat `undefined`, `null`, and `\"\"` as \"not set\". */\nfunction isMissing(value: unknown): boolean {\n\treturn value === undefined || value === null || value === \"\";\n}\n\n/**\n * Resolve the target collection slug for a reference field.\n *\n * Schema-defined reference fields (the static `reference()` factory in\n * `fields/reference.ts`) put the target in `options.collection`. The MCP\n * `schema_create_field` tool also puts it there. Tests and some admin paths\n * stash it inside `validation.collection` directly; we accept both.\n */\nfunction getReferenceTargetCollection(field: Field): string | undefined {\n\tconst fromOptions = field.options?.collection;\n\tif (typeof fromOptions === \"string\" && fromOptions.length > 0) return fromOptions;\n\tconst validation = field.validation;\n\tif (validation && \"collection\" in validation) {\n\t\tconst fromValidation: unknown = (validation as { collection?: unknown }).collection;\n\t\tif (typeof fromValidation === \"string\" && fromValidation.length > 0) return fromValidation;\n\t}\n\treturn undefined;\n}\n\n/**\n * Format a Zod issue path into a human-readable field reference, e.g.\n * `tags`, `tags.1`, `image.alt`.\n */\nfunction formatIssuePath(path: ReadonlyArray<PropertyKey>): string {\n\tif (path.length === 0) return \"(root)\";\n\treturn path.map((seg) => String(seg)).join(\".\");\n}\n\n/**\n * Validate `data` against the collection's field definitions.\n *\n * `partial: true` switches Zod into partial mode so updates can include\n * only the fields being changed without tripping required-field errors on\n * fields the caller didn't touch. Required fields that ARE present in\n * partial-mode data still get the empty-string check below.\n */\nexport async function validateContentData(\n\tdb: Kysely<Database>,\n\tcollection: string,\n\tdata: Record<string, unknown>,\n\toptions: { partial?: boolean } = {},\n): Promise<ValidationResult> {\n\tconst registry = new SchemaRegistry(db);\n\tconst collectionWithFields = await registry.getCollectionWithFields(collection);\n\tif (!collectionWithFields) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\terror: {\n\t\t\t\tcode: \"COLLECTION_NOT_FOUND\",\n\t\t\t\tmessage: `Collection '${collection}' not found`,\n\t\t\t},\n\t\t};\n\t}\n\n\tconst issues: string[] = [];\n\n\t// Detect unknown keys explicitly so callers get a useful error rather\n\t// than silently dropped data. Leading-underscore keys (e.g. `_slug`,\n\t// `_rev`) are reserved for internal handler/runtime use and aren't real\n\t// fields; skip them.\n\tconst knownFields = new Set(collectionWithFields.fields.map((f) => f.slug));\n\tfor (const key of Object.keys(data)) {\n\t\tif (key.startsWith(\"_\")) continue;\n\t\tif (!knownFields.has(key)) {\n\t\t\tissues.push(`${key}: unknown field on collection '${collection}'`);\n\t\t}\n\t}\n\n\t// Zod handles type, enum, length and missing-required (in non-partial\n\t// mode) checks. Empty-string handling for required string fields is\n\t// done as a separate pass below since Zod's `z.string()` accepts \"\".\n\tconst baseSchema = generateZodSchema(collectionWithFields);\n\tconst schema = options.partial ? baseSchema.partial() : baseSchema;\n\tconst parsed = schema.safeParse(data);\n\tif (!parsed.success) {\n\t\tfor (const issue of parsed.error.issues) {\n\t\t\tissues.push(`${formatIssuePath(issue.path)}: ${issue.message}`);\n\t\t}\n\t}\n\n\t// Empty-string-on-required check. In create mode (partial=false) Zod\n\t// already catches missing/null for required fields, but `z.string()`\n\t// happily accepts \"\". In update mode (partial=true) the field is only\n\t// checked if it's present in `data`.\n\tfor (const field of collectionWithFields.fields) {\n\t\tif (!field.required) continue;\n\t\tconst present = Object.hasOwn(data, field.slug);\n\t\tif (options.partial && !present) continue;\n\t\tif (data[field.slug] === \"\") {\n\t\t\tissues.push(`${field.slug}: required (empty value not allowed)`);\n\t\t}\n\t}\n\n\t// Reference target existence. Only check fields that:\n\t// - have a value (non-missing) in `data`\n\t// - have a resolvable target collection\n\t// - in partial mode: are present in `data`\n\t// Batch one IN-query per target collection to keep round-trips low.\n\tconst refsByTarget = new Map<string, { field: string; id: string }[]>();\n\tfor (const field of collectionWithFields.fields) {\n\t\tif (field.type !== \"reference\") continue;\n\t\tif (options.partial && !Object.hasOwn(data, field.slug)) continue;\n\t\tconst value = data[field.slug];\n\t\tif (isMissing(value)) continue;\n\t\tif (typeof value !== \"string\") continue; // Zod will have flagged this already\n\t\tconst target = getReferenceTargetCollection(field);\n\t\tif (!target) continue;\n\t\tconst list = refsByTarget.get(target) ?? [];\n\t\tlist.push({ field: field.slug, id: value });\n\t\trefsByTarget.set(target, list);\n\t}\n\n\tfor (const [target, refs] of refsByTarget) {\n\t\t// Validate the target collection slug before interpolating into raw\n\t\t// SQL — defense-in-depth even though slugs are already validated at\n\t\t// schema-create time.\n\t\ttry {\n\t\t\tvalidateIdentifier(target, \"reference target collection\");\n\t\t} catch {\n\t\t\tfor (const ref of refs) {\n\t\t\t\tissues.push(`${ref.field}: invalid reference target collection '${target}'`);\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst ids = [...new Set(refs.map((r) => r.id))];\n\t\tconst tableName = `ec_${target}`;\n\n\t\t// Chunk the IN clause to stay below D1's bind-parameter limit. One\n\t\t// reference per request is the common case today; chunking makes the\n\t\t// helper safe if a future multiSelect-of-references is added.\n\t\tconst found = new Set<string>();\n\t\tlet targetTableMissing = false;\n\t\tfor (const idChunk of chunks(ids, SQL_BATCH_SIZE)) {\n\t\t\ttry {\n\t\t\t\tconst rows = await sql<{ id: string }>`\n\t\t\t\t\tSELECT id FROM ${sql.ref(tableName)}\n\t\t\t\t\tWHERE id IN (${sql.join(idChunk)})\n\t\t\t\t\tAND deleted_at IS NULL\n\t\t\t\t`.execute(db);\n\t\t\t\tfor (const row of rows.rows) {\n\t\t\t\t\tfound.add(row.id);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\t// Missing table = the target collection table doesn't exist\n\t\t\t\t// (orphan reference). Treat all those references as missing.\n\t\t\t\t// Any other DB error (permissions, connection, syntax) must\n\t\t\t\t// propagate — silently dropping data integrity errors as\n\t\t\t\t// \"not found\" is exactly the bug F5 fixes.\n\t\t\t\tif (isMissingTableError(error)) {\n\t\t\t\t\ttargetTableMissing = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t\tif (targetTableMissing) {\n\t\t\tfor (const ref of refs) {\n\t\t\t\tissues.push(`${ref.field}: target '${ref.id}' not found in collection '${target}'`);\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const ref of refs) {\n\t\t\tif (!found.has(ref.id)) {\n\t\t\t\tissues.push(`${ref.field}: target '${ref.id}' not found in collection '${target}'`);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (issues.length === 0) return { ok: true };\n\treturn {\n\t\tok: false,\n\t\terror: {\n\t\t\tcode: \"VALIDATION_ERROR\",\n\t\t\tmessage: issues.join(\"; \"),\n\t\t},\n\t};\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"validation-DgGTJm3u.mjs","names":[],"sources":["../src/api/handlers/validation.ts"],"sourcesContent":["/**\n * Field-level validation for content create / update.\n *\n * Wires the existing `generateZodSchema()` pipeline (`schema/zod-generator.ts`)\n * into the handler boundary so REST and MCP both get the same enforcement:\n *\n * - required fields must be present and non-empty\n * - select / multiSelect values must match the configured options\n * - reference fields must resolve to a real, non-trashed target\n *\n * Errors surface as `{ code: \"VALIDATION_ERROR\", message }` with all\n * offending fields listed in one message so callers can fix everything in\n * a single round trip.\n */\n\nimport { sql, type Kysely } from \"kysely\";\n\nimport type { Database } from \"../../database/types.js\";\nimport { validateIdentifier } from \"../../database/validate.js\";\nimport { SchemaRegistry } from \"../../schema/registry.js\";\nimport type { Field } from \"../../schema/types.js\";\nimport { generateZodSchema } from \"../../schema/zod-generator.js\";\nimport { chunks, SQL_BATCH_SIZE } from \"../../utils/chunks.js\";\nimport { isMissingTableError } from \"../../utils/db-errors.js\";\n\ntype ValidationResult =\n\t| { ok: true }\n\t| { ok: false; error: { code: \"VALIDATION_ERROR\" | \"COLLECTION_NOT_FOUND\"; message: string } };\n\n/** Treat `undefined`, `null`, and `\"\"` as \"not set\". */\nfunction isMissing(value: unknown): boolean {\n\treturn value === undefined || value === null || value === \"\";\n}\n\n/**\n * Resolve the target collection slug for a reference field.\n *\n * Schema-defined reference fields (the static `reference()` factory in\n * `fields/reference.ts`) put the target in `options.collection`. The MCP\n * `schema_create_field` tool also puts it there. Tests and some admin paths\n * stash it inside `validation.collection` directly; we accept both.\n */\nfunction getReferenceTargetCollection(field: Field): string | undefined {\n\tconst fromOptions = field.options?.collection;\n\tif (typeof fromOptions === \"string\" && fromOptions.length > 0) return fromOptions;\n\tconst validation = field.validation;\n\tif (validation && \"collection\" in validation) {\n\t\tconst fromValidation: unknown = (validation as { collection?: unknown }).collection;\n\t\tif (typeof fromValidation === \"string\" && fromValidation.length > 0) return fromValidation;\n\t}\n\treturn undefined;\n}\n\n/**\n * Format a Zod issue path into a human-readable field reference, e.g.\n * `tags`, `tags.1`, `image.alt`.\n */\nfunction formatIssuePath(path: ReadonlyArray<PropertyKey>): string {\n\tif (path.length === 0) return \"(root)\";\n\treturn path.map((seg) => String(seg)).join(\".\");\n}\n\n/**\n * Validate `data` against the collection's field definitions.\n *\n * `partial: true` switches Zod into partial mode so updates can include\n * only the fields being changed without tripping required-field errors on\n * fields the caller didn't touch. Required fields that ARE present in\n * partial-mode data still get the empty-string check below.\n */\nexport async function validateContentData(\n\tdb: Kysely<Database>,\n\tcollection: string,\n\tdata: Record<string, unknown>,\n\toptions: { partial?: boolean } = {},\n): Promise<ValidationResult> {\n\tconst registry = new SchemaRegistry(db);\n\tconst collectionWithFields = await registry.getCollectionWithFields(collection);\n\tif (!collectionWithFields) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\terror: {\n\t\t\t\tcode: \"COLLECTION_NOT_FOUND\",\n\t\t\t\tmessage: `Collection '${collection}' not found`,\n\t\t\t},\n\t\t};\n\t}\n\n\tconst issues: string[] = [];\n\n\t// Detect unknown keys explicitly so callers get a useful error rather\n\t// than silently dropped data. Leading-underscore keys (e.g. `_slug`,\n\t// `_rev`) are reserved for internal handler/runtime use and aren't real\n\t// fields; skip them.\n\tconst knownFields = new Set(collectionWithFields.fields.map((f) => f.slug));\n\tfor (const key of Object.keys(data)) {\n\t\tif (key.startsWith(\"_\")) continue;\n\t\tif (!knownFields.has(key)) {\n\t\t\tissues.push(`${key}: unknown field on collection '${collection}'`);\n\t\t}\n\t}\n\n\t// Zod handles type, enum, length and missing-required (in non-partial\n\t// mode) checks. Empty-string handling for required string fields is\n\t// done as a separate pass below since Zod's `z.string()` accepts \"\".\n\tconst baseSchema = generateZodSchema(collectionWithFields);\n\tconst schema = options.partial ? baseSchema.partial() : baseSchema;\n\tconst parsed = schema.safeParse(data);\n\tif (!parsed.success) {\n\t\tfor (const issue of parsed.error.issues) {\n\t\t\tissues.push(`${formatIssuePath(issue.path)}: ${issue.message}`);\n\t\t}\n\t}\n\n\t// Empty-string-on-required check. In create mode (partial=false) Zod\n\t// already catches missing/null for required fields, but `z.string()`\n\t// happily accepts \"\". In update mode (partial=true) the field is only\n\t// checked if it's present in `data`.\n\tfor (const field of collectionWithFields.fields) {\n\t\tif (!field.required) continue;\n\t\tconst present = Object.hasOwn(data, field.slug);\n\t\tif (options.partial && !present) continue;\n\t\tif (data[field.slug] === \"\") {\n\t\t\tissues.push(`${field.slug}: required (empty value not allowed)`);\n\t\t}\n\t}\n\n\t// Reference target existence. Only check fields that:\n\t// - have a value (non-missing) in `data`\n\t// - have a resolvable target collection\n\t// - in partial mode: are present in `data`\n\t// Batch one IN-query per target collection to keep round-trips low.\n\tconst refsByTarget = new Map<string, { field: string; id: string }[]>();\n\tfor (const field of collectionWithFields.fields) {\n\t\tif (field.type !== \"reference\") continue;\n\t\tif (options.partial && !Object.hasOwn(data, field.slug)) continue;\n\t\tconst value = data[field.slug];\n\t\tif (isMissing(value)) continue;\n\t\tif (typeof value !== \"string\") continue; // Zod will have flagged this already\n\t\tconst target = getReferenceTargetCollection(field);\n\t\tif (!target) continue;\n\t\tconst list = refsByTarget.get(target) ?? [];\n\t\tlist.push({ field: field.slug, id: value });\n\t\trefsByTarget.set(target, list);\n\t}\n\n\tfor (const [target, refs] of refsByTarget) {\n\t\t// Validate the target collection slug before interpolating into raw\n\t\t// SQL — defense-in-depth even though slugs are already validated at\n\t\t// schema-create time.\n\t\ttry {\n\t\t\tvalidateIdentifier(target, \"reference target collection\");\n\t\t} catch {\n\t\t\tfor (const ref of refs) {\n\t\t\t\tissues.push(`${ref.field}: invalid reference target collection '${target}'`);\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst ids = [...new Set(refs.map((r) => r.id))];\n\t\tconst tableName = `ec_${target}`;\n\n\t\t// Chunk the IN clause to stay below D1's bind-parameter limit. One\n\t\t// reference per request is the common case today; chunking makes the\n\t\t// helper safe if a future multiSelect-of-references is added.\n\t\tconst found = new Set<string>();\n\t\tlet targetTableMissing = false;\n\t\tfor (const idChunk of chunks(ids, SQL_BATCH_SIZE)) {\n\t\t\ttry {\n\t\t\t\tconst rows = await sql<{ id: string }>`\n\t\t\t\t\tSELECT id FROM ${sql.ref(tableName)}\n\t\t\t\t\tWHERE id IN (${sql.join(idChunk)})\n\t\t\t\t\tAND deleted_at IS NULL\n\t\t\t\t`.execute(db);\n\t\t\t\tfor (const row of rows.rows) {\n\t\t\t\t\tfound.add(row.id);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\t// Missing table = the target collection table doesn't exist\n\t\t\t\t// (orphan reference). Treat all those references as missing.\n\t\t\t\t// Any other DB error (permissions, connection, syntax) must\n\t\t\t\t// propagate — silently dropping data integrity errors as\n\t\t\t\t// \"not found\" is exactly the bug F5 fixes.\n\t\t\t\tif (isMissingTableError(error)) {\n\t\t\t\t\ttargetTableMissing = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t\tif (targetTableMissing) {\n\t\t\tfor (const ref of refs) {\n\t\t\t\tissues.push(`${ref.field}: target '${ref.id}' not found in collection '${target}'`);\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tfor (const ref of refs) {\n\t\t\tif (!found.has(ref.id)) {\n\t\t\t\tissues.push(`${ref.field}: target '${ref.id}' not found in collection '${target}'`);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (issues.length === 0) return { ok: true };\n\treturn {\n\t\tok: false,\n\t\terror: {\n\t\t\tcode: \"VALIDATION_ERROR\",\n\t\t\tmessage: issues.join(\"; \"),\n\t\t},\n\t};\n}\n"],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ //#region src/version.ts
2
+ const VERSION = "0.20.0";
3
+ const COMMIT = "7f143184";
4
+
5
+ //#endregion
6
+ export { VERSION as n, COMMIT as t };
7
+ //# sourceMappingURL=version-D-5txk2m.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"version-Dw0JXu45.mjs","names":[],"sources":["../src/version.ts"],"sourcesContent":["/**\n * Build-time version constants, replaced by tsdown/Vite `define`.\n * Falls back to \"dev\" when running uncompiled (tests, dev).\n */\n\ndeclare const __EMDASH_VERSION__: string;\ndeclare const __EMDASH_COMMIT__: string;\n\nexport const VERSION: string =\n\ttypeof __EMDASH_VERSION__ !== \"undefined\" ? __EMDASH_VERSION__ : \"dev\";\n\nexport const COMMIT: string = typeof __EMDASH_COMMIT__ !== \"undefined\" ? __EMDASH_COMMIT__ : \"dev\";\n"],"mappings":";AAQA,MAAa;AAGb,MAAa"}
1
+ {"version":3,"file":"version-D-5txk2m.mjs","names":[],"sources":["../src/version.ts"],"sourcesContent":["/**\n * Build-time version constants, replaced by tsdown/Vite `define`.\n * Falls back to \"dev\" when running uncompiled (tests, dev).\n */\n\ndeclare const __EMDASH_VERSION__: string;\ndeclare const __EMDASH_COMMIT__: string;\n\nexport const VERSION: string =\n\ttypeof __EMDASH_VERSION__ !== \"undefined\" ? __EMDASH_VERSION__ : \"dev\";\n\nexport const COMMIT: string = typeof __EMDASH_COMMIT__ !== \"undefined\" ? __EMDASH_COMMIT__ : \"dev\";\n"],"mappings":";AAQA,MAAa;AAGb,MAAa"}