emdash 0.6.0 → 1.0.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 (263) hide show
  1. package/dist/{adapters-Di31kZ28.d.mts → adapters-BKSf3T9R.d.mts} +1 -1
  2. package/dist/{adapters-Di31kZ28.d.mts.map → adapters-BKSf3T9R.d.mts.map} +1 -1
  3. package/dist/{apply-B4MsLM-w.mjs → apply-x0eMK1lX.mjs} +186 -28
  4. package/dist/apply-x0eMK1lX.mjs.map +1 -0
  5. package/dist/astro/index.d.mts +6 -6
  6. package/dist/astro/index.d.mts.map +1 -1
  7. package/dist/astro/index.mjs +92 -17
  8. package/dist/astro/index.mjs.map +1 -1
  9. package/dist/astro/middleware/auth.d.mts +5 -5
  10. package/dist/astro/middleware/auth.d.mts.map +1 -1
  11. package/dist/astro/middleware/auth.mjs +22 -2
  12. package/dist/astro/middleware/auth.mjs.map +1 -1
  13. package/dist/astro/middleware/redirect.mjs +2 -2
  14. package/dist/astro/middleware/request-context.mjs +7 -2
  15. package/dist/astro/middleware/request-context.mjs.map +1 -1
  16. package/dist/astro/middleware/setup.mjs +1 -1
  17. package/dist/astro/middleware.d.mts.map +1 -1
  18. package/dist/astro/middleware.mjs +263 -74
  19. package/dist/astro/middleware.mjs.map +1 -1
  20. package/dist/astro/types.d.mts +25 -8
  21. package/dist/astro/types.d.mts.map +1 -1
  22. package/dist/{byline-C4OVd8b3.mjs → byline-Chbr2GoP.mjs} +3 -3
  23. package/dist/byline-Chbr2GoP.mjs.map +1 -0
  24. package/dist/{bylines-hPTW79hw.mjs → bylines-CRNsVG88.mjs} +4 -4
  25. package/dist/{bylines-hPTW79hw.mjs.map → bylines-CRNsVG88.mjs.map} +1 -1
  26. package/dist/cli/index.mjs +17 -13
  27. package/dist/cli/index.mjs.map +1 -1
  28. package/dist/client/cf-access.d.mts +1 -1
  29. package/dist/client/index.d.mts +1 -1
  30. package/dist/client/index.mjs +1 -1
  31. package/dist/{content-BsBoyj8G.mjs → content-BcQPYxdV.mjs} +39 -15
  32. package/dist/content-BcQPYxdV.mjs.map +1 -0
  33. package/dist/db/index.d.mts +3 -3
  34. package/dist/db/index.mjs +1 -1
  35. package/dist/db/libsql.d.mts +1 -1
  36. package/dist/db/postgres.d.mts +1 -1
  37. package/dist/db/sqlite.d.mts +1 -1
  38. package/dist/{db-errors-D0UT85nC.mjs → db-errors-l1Qh2RPR.mjs} +1 -1
  39. package/dist/{db-errors-D0UT85nC.mjs.map → db-errors-l1Qh2RPR.mjs.map} +1 -1
  40. package/dist/{default-CME5YdZ3.mjs → default-DCVqE5ib.mjs} +1 -1
  41. package/dist/{default-CME5YdZ3.mjs.map → default-DCVqE5ib.mjs.map} +1 -1
  42. package/dist/{error-CiYn9yDu.mjs → error-zG5T1UGA.mjs} +1 -1
  43. package/dist/error-zG5T1UGA.mjs.map +1 -0
  44. package/dist/{index-BYv0mB9g.d.mts → index-DIb-CzNx.d.mts} +232 -15
  45. package/dist/index-DIb-CzNx.d.mts.map +1 -0
  46. package/dist/index.d.mts +11 -11
  47. package/dist/index.mjs +23 -21
  48. package/dist/{load-CBcmDIot.mjs → load-CyEoextb.mjs} +1 -1
  49. package/dist/{load-CBcmDIot.mjs.map → load-CyEoextb.mjs.map} +1 -1
  50. package/dist/{loader-DeiBJEMe.mjs → loader-CndGj8kM.mjs} +8 -6
  51. package/dist/loader-CndGj8kM.mjs.map +1 -0
  52. package/dist/{manifest-schema-V30qsMft.mjs → manifest-schema-DH9xhc6t.mjs} +13 -1
  53. package/dist/manifest-schema-DH9xhc6t.mjs.map +1 -0
  54. package/dist/media/index.d.mts +1 -1
  55. package/dist/media/local-runtime.d.mts +7 -7
  56. package/dist/media/local-runtime.mjs +2 -2
  57. package/dist/{media-DqHVh136.mjs → media-D8FbNsl0.mjs} +4 -7
  58. package/dist/media-D8FbNsl0.mjs.map +1 -0
  59. package/dist/{mode-CpNnGkPz.mjs → mode-BnAOqItE.mjs} +1 -1
  60. package/dist/mode-BnAOqItE.mjs.map +1 -0
  61. package/dist/page/index.d.mts +2 -2
  62. package/dist/placeholder-C-fk5hYI.mjs.map +1 -1
  63. package/dist/{placeholder-tzpqGWII.d.mts → placeholder-D29tWZ7o.d.mts} +1 -1
  64. package/dist/{placeholder-tzpqGWII.d.mts.map → placeholder-D29tWZ7o.d.mts.map} +1 -1
  65. package/dist/plugins/adapt-sandbox-entry.d.mts +5 -5
  66. package/dist/plugins/adapt-sandbox-entry.mjs +1 -1
  67. package/dist/{query-Bk_3vKvU.mjs → query-fqEdLFms.mjs} +9 -9
  68. package/dist/{query-Bk_3vKvU.mjs.map → query-fqEdLFms.mjs.map} +1 -1
  69. package/dist/{redirect-7lGhLBNZ.mjs → redirect-D_pshWdf.mjs} +69 -13
  70. package/dist/redirect-D_pshWdf.mjs.map +1 -0
  71. package/dist/{registry-Ci3WxVAr.mjs → registry-C3Mr0ODu.mjs} +33 -9
  72. package/dist/registry-C3Mr0ODu.mjs.map +1 -0
  73. package/dist/{request-cache-DiR961CV.mjs → request-cache-Ci7f5pBb.mjs} +1 -1
  74. package/dist/request-cache-Ci7f5pBb.mjs.map +1 -0
  75. package/dist/{runner-Fl2NcUUz.d.mts → runner-OURCaApa.d.mts} +2 -2
  76. package/dist/{runner-Fl2NcUUz.d.mts.map → runner-OURCaApa.d.mts.map} +1 -1
  77. package/dist/{runner-Cd-_WyDo.mjs → runner-tQ7BJ4T7.mjs} +211 -134
  78. package/dist/runner-tQ7BJ4T7.mjs.map +1 -0
  79. package/dist/runtime.d.mts +6 -6
  80. package/dist/runtime.mjs +2 -2
  81. package/dist/{search-DI4bM2w9.mjs → search-BoZYFuUk.mjs} +339 -102
  82. package/dist/search-BoZYFuUk.mjs.map +1 -0
  83. package/dist/seed/index.d.mts +2 -2
  84. package/dist/seed/index.mjs +12 -12
  85. package/dist/seo/index.d.mts +1 -1
  86. package/dist/storage/local.d.mts +1 -1
  87. package/dist/storage/local.mjs +1 -1
  88. package/dist/storage/s3.d.mts +1 -1
  89. package/dist/storage/s3.d.mts.map +1 -1
  90. package/dist/storage/s3.mjs +4 -4
  91. package/dist/storage/s3.mjs.map +1 -1
  92. package/dist/{taxonomies-DbrKzDju.mjs → taxonomies-B4IAshV8.mjs} +5 -5
  93. package/dist/{taxonomies-DbrKzDju.mjs.map → taxonomies-B4IAshV8.mjs.map} +1 -1
  94. package/dist/{tokens-BFPFx3CA.mjs → tokens-D9vnZqYS.mjs} +1 -1
  95. package/dist/{tokens-BFPFx3CA.mjs.map → tokens-D9vnZqYS.mjs.map} +1 -1
  96. package/dist/{transport-BykRfpyy.mjs → transport-C9ugt2Nr.mjs} +1 -1
  97. package/dist/{transport-BykRfpyy.mjs.map → transport-C9ugt2Nr.mjs.map} +1 -1
  98. package/dist/{transport-H4Iwx7tC.d.mts → transport-CUnEL3Vs.d.mts} +1 -1
  99. package/dist/{transport-H4Iwx7tC.d.mts.map → transport-CUnEL3Vs.d.mts.map} +1 -1
  100. package/dist/types-BIgulNsW.mjs +68 -0
  101. package/dist/types-BIgulNsW.mjs.map +1 -0
  102. package/dist/{types-DDS4MxsT.mjs → types-Bm1dn-q3.mjs} +1 -1
  103. package/dist/{types-DDS4MxsT.mjs.map → types-Bm1dn-q3.mjs.map} +1 -1
  104. package/dist/{types-CnZYHyLW.d.mts → types-BmPPSUEx.d.mts} +1 -1
  105. package/dist/{types-CnZYHyLW.d.mts.map → types-BmPPSUEx.d.mts.map} +1 -1
  106. package/dist/{types-6CUZRrZP.d.mts → types-BrA0xf5I.d.mts} +24 -2
  107. package/dist/{types-6CUZRrZP.d.mts.map → types-BrA0xf5I.d.mts.map} +1 -1
  108. package/dist/{types-8xrvl_68.d.mts → types-CS8FIX7L.d.mts} +10 -1
  109. package/dist/{types-8xrvl_68.d.mts.map → types-CS8FIX7L.d.mts.map} +1 -1
  110. package/dist/{types-BH2L167P.mjs → types-CgqmmMJB.mjs} +1 -1
  111. package/dist/{types-BH2L167P.mjs.map → types-CgqmmMJB.mjs.map} +1 -1
  112. package/dist/{types-CFWjXmus.d.mts → types-DIMwPFub.d.mts} +1 -1
  113. package/dist/{types-CFWjXmus.d.mts.map → types-DIMwPFub.d.mts.map} +1 -1
  114. package/dist/{types-DgrIP0tF.d.mts → types-i36XcA_X.d.mts} +49 -6
  115. package/dist/types-i36XcA_X.d.mts.map +1 -0
  116. package/dist/{validate-CqsNItbt.mjs → validate-CxVsLehf.mjs} +2 -2
  117. package/dist/{validate-CqsNItbt.mjs.map → validate-CxVsLehf.mjs.map} +1 -1
  118. package/dist/{validate-CaLH1Ia2.d.mts → validate-DHxmpFJt.d.mts} +4 -4
  119. package/dist/{validate-CaLH1Ia2.d.mts.map → validate-DHxmpFJt.d.mts.map} +1 -1
  120. package/dist/validation-C-ZpN2GI.mjs +144 -0
  121. package/dist/validation-C-ZpN2GI.mjs.map +1 -0
  122. package/dist/version-DJrV1K0M.mjs +7 -0
  123. package/dist/{version-Uaf2ynPX.mjs.map → version-DJrV1K0M.mjs.map} +1 -1
  124. package/dist/zod-generator-CpwccCIv.mjs +132 -0
  125. package/dist/zod-generator-CpwccCIv.mjs.map +1 -0
  126. package/package.json +19 -6
  127. package/src/api/auth-storage.ts +37 -0
  128. package/src/api/error.ts +6 -0
  129. package/src/api/errors.ts +8 -0
  130. package/src/api/handlers/comments.ts +13 -0
  131. package/src/api/handlers/content.ts +124 -3
  132. package/src/api/handlers/index.ts +2 -0
  133. package/src/api/handlers/media.ts +8 -1
  134. package/src/api/handlers/menus.ts +160 -21
  135. package/src/api/handlers/redirects.ts +16 -3
  136. package/src/api/handlers/sections.ts +8 -1
  137. package/src/api/handlers/taxonomies.ts +128 -16
  138. package/src/api/handlers/validation.ts +212 -0
  139. package/src/api/openapi/document.ts +4 -1
  140. package/src/api/public-url.ts +6 -3
  141. package/src/api/route-utils.ts +14 -0
  142. package/src/api/schemas/common.ts +1 -1
  143. package/src/api/schemas/content.ts +8 -0
  144. package/src/api/schemas/setup.ts +8 -0
  145. package/src/api/schemas/widgets.ts +12 -10
  146. package/src/api/setup-complete.ts +40 -0
  147. package/src/astro/integration/font-provider.ts +3 -1
  148. package/src/astro/integration/index.ts +15 -2
  149. package/src/astro/integration/routes.ts +28 -0
  150. package/src/astro/integration/runtime.ts +74 -2
  151. package/src/astro/integration/virtual-modules.ts +41 -0
  152. package/src/astro/integration/vite-config.ts +43 -12
  153. package/src/astro/middleware/auth.ts +21 -0
  154. package/src/astro/middleware.ts +18 -1
  155. package/src/astro/routes/PluginRegistry.tsx +10 -1
  156. package/src/astro/routes/admin.astro +14 -7
  157. package/src/astro/routes/api/auth/magic-link/send.ts +2 -1
  158. package/src/astro/routes/api/auth/mode.ts +57 -0
  159. package/src/astro/routes/api/auth/oauth/[provider]/callback.ts +23 -3
  160. package/src/astro/routes/api/auth/oauth/[provider].ts +10 -4
  161. package/src/astro/routes/api/auth/passkey/options.ts +2 -1
  162. package/src/astro/routes/api/auth/signup/request.ts +26 -8
  163. package/src/astro/routes/api/comments/[collection]/[contentId]/index.ts +10 -6
  164. package/src/astro/routes/api/content/[collection]/[id]/compare.ts +1 -1
  165. package/src/astro/routes/api/content/[collection]/[id]/preview-url.ts +1 -1
  166. package/src/astro/routes/api/content/[collection]/[id]/revisions.ts +1 -1
  167. package/src/astro/routes/api/content/[collection]/[id]/translations.ts +26 -0
  168. package/src/astro/routes/api/content/[collection]/[id].ts +30 -2
  169. package/src/astro/routes/api/content/[collection]/index.ts +20 -10
  170. package/src/astro/routes/api/content/[collection]/trash.ts +1 -1
  171. package/src/astro/routes/api/import/wordpress/media.ts +2 -7
  172. package/src/astro/routes/api/import/wordpress/prepare.ts +10 -0
  173. package/src/astro/routes/api/import/wordpress-plugin/analyze.ts +4 -3
  174. package/src/astro/routes/api/import/wordpress-plugin/execute.ts +4 -3
  175. package/src/astro/routes/api/manifest.ts +7 -0
  176. package/src/astro/routes/api/oauth/device/code.ts +2 -1
  177. package/src/astro/routes/api/oauth/device/token.ts +2 -1
  178. package/src/astro/routes/api/settings/email.ts +4 -9
  179. package/src/astro/routes/api/setup/admin-verify.ts +30 -5
  180. package/src/astro/routes/api/setup/admin.ts +38 -8
  181. package/src/astro/routes/api/setup/index.ts +7 -4
  182. package/src/astro/routes/api/setup/status.ts +3 -1
  183. package/src/astro/routes/api/widget-areas/[name]/widgets/[id].ts +4 -1
  184. package/src/astro/routes/api/widget-areas/[name]/widgets.ts +4 -1
  185. package/src/astro/routes/api/widget-areas/[name].ts +4 -1
  186. package/src/astro/routes/api/widget-areas/index.ts +4 -1
  187. package/src/astro/types.ts +18 -0
  188. package/src/auth/mode.ts +15 -3
  189. package/src/auth/providers/github-admin.tsx +29 -0
  190. package/src/auth/providers/github.ts +31 -0
  191. package/src/auth/providers/google-admin.tsx +44 -0
  192. package/src/auth/providers/google.ts +31 -0
  193. package/src/auth/rate-limit.ts +50 -22
  194. package/src/auth/setup-nonce.ts +22 -0
  195. package/src/auth/trusted-proxy.ts +92 -0
  196. package/src/auth/types.ts +114 -4
  197. package/src/cli/commands/bundle.ts +3 -1
  198. package/src/components/EmDashImage.astro +7 -6
  199. package/src/components/Gallery.astro +5 -3
  200. package/src/components/Image.astro +8 -3
  201. package/src/components/InlinePortableTextEditor.tsx +2 -1
  202. package/src/components/LiveSearch.astro +5 -14
  203. package/src/database/migrations/035_bounded_404_log.ts +112 -0
  204. package/src/database/migrations/runner.ts +2 -0
  205. package/src/database/repositories/audit.ts +6 -8
  206. package/src/database/repositories/byline.ts +6 -8
  207. package/src/database/repositories/comment.ts +12 -16
  208. package/src/database/repositories/content.ts +79 -40
  209. package/src/database/repositories/index.ts +1 -1
  210. package/src/database/repositories/media.ts +10 -13
  211. package/src/database/repositories/options.ts +25 -0
  212. package/src/database/repositories/plugin-storage.ts +4 -6
  213. package/src/database/repositories/redirect.ts +123 -24
  214. package/src/database/repositories/taxonomy.ts +14 -3
  215. package/src/database/repositories/types.ts +57 -8
  216. package/src/database/repositories/user.ts +6 -8
  217. package/src/database/types.ts +9 -0
  218. package/src/emdash-runtime.ts +309 -91
  219. package/src/import/registry.ts +4 -3
  220. package/src/import/ssrf.ts +253 -12
  221. package/src/index.ts +5 -1
  222. package/src/loader.ts +6 -5
  223. package/src/mcp/server.ts +753 -107
  224. package/src/media/normalize.ts +1 -1
  225. package/src/media/url.ts +78 -0
  226. package/src/plugins/context.ts +15 -3
  227. package/src/plugins/email-console.ts +10 -3
  228. package/src/plugins/hooks.ts +11 -0
  229. package/src/plugins/manager.ts +6 -0
  230. package/src/plugins/manifest-schema.ts +12 -0
  231. package/src/plugins/request-meta.ts +66 -15
  232. package/src/plugins/routes.ts +3 -1
  233. package/src/plugins/types.ts +23 -2
  234. package/src/query.ts +1 -1
  235. package/src/request-cache.ts +3 -0
  236. package/src/schema/registry.ts +41 -5
  237. package/src/search/fts-manager.ts +0 -2
  238. package/src/search/query.ts +111 -26
  239. package/src/search/types.ts +8 -1
  240. package/src/sections/index.ts +7 -9
  241. package/src/seed/apply.ts +26 -0
  242. package/src/storage/s3.ts +12 -6
  243. package/src/virtual-modules.d.ts +21 -1
  244. package/src/visual-editing/toolbar.ts +6 -1
  245. package/src/widgets/index.ts +1 -1
  246. package/dist/apply-B4MsLM-w.mjs.map +0 -1
  247. package/dist/byline-C4OVd8b3.mjs.map +0 -1
  248. package/dist/content-BsBoyj8G.mjs.map +0 -1
  249. package/dist/error-CiYn9yDu.mjs.map +0 -1
  250. package/dist/index-BYv0mB9g.d.mts.map +0 -1
  251. package/dist/loader-DeiBJEMe.mjs.map +0 -1
  252. package/dist/manifest-schema-V30qsMft.mjs.map +0 -1
  253. package/dist/media-DqHVh136.mjs.map +0 -1
  254. package/dist/mode-CpNnGkPz.mjs.map +0 -1
  255. package/dist/redirect-7lGhLBNZ.mjs.map +0 -1
  256. package/dist/registry-Ci3WxVAr.mjs.map +0 -1
  257. package/dist/request-cache-DiR961CV.mjs.map +0 -1
  258. package/dist/runner-Cd-_WyDo.mjs.map +0 -1
  259. package/dist/search-DI4bM2w9.mjs.map +0 -1
  260. package/dist/types-CMMN0pNg.mjs +0 -31
  261. package/dist/types-CMMN0pNg.mjs.map +0 -1
  262. package/dist/types-DgrIP0tF.d.mts.map +0 -1
  263. package/dist/version-Uaf2ynPX.mjs +0 -7
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types-BIgulNsW.mjs","names":[],"sources":["../src/database/repositories/types.ts"],"sourcesContent":["import { encodeBase64, decodeBase64 } from \"../../utils/base64.js\";\n\n/**\n * Hard cap on cursor length. Cursors we issue are short JSON-in-base64\n * blobs; a real cursor is well under 200 chars. This guards against\n * malicious callers passing megabyte-sized strings to force the base64\n * decoder to allocate (decodeBase64 is O(N) in input size). The MCP and\n * REST schemas also clamp at 2048 — this 4096 cap is a defense-in-depth\n * floor inside the repository helpers.\n */\nconst MAX_CURSOR_LENGTH = 4096;\n\nexport interface CreateContentInput {\n\ttype: string;\n\tslug?: string | null;\n\tdata: Record<string, unknown>;\n\tstatus?: string;\n\tauthorId?: string;\n\tprimaryBylineId?: string | null;\n\tlocale?: string;\n\ttranslationOf?: string;\n\tpublishedAt?: string | null;\n\t/** Override created_at (ISO 8601). Used by importers to preserve original dates. */\n\tcreatedAt?: string | null;\n}\n\nexport interface UpdateContentInput {\n\tdata?: Record<string, unknown>;\n\tstatus?: string;\n\tslug?: string | null;\n\tpublishedAt?: string | null;\n\tscheduledAt?: string | null;\n\tauthorId?: string | null;\n\tprimaryBylineId?: string | null;\n}\n\n/** SEO fields for content items */\nexport interface ContentSeo {\n\ttitle: string | null;\n\tdescription: string | null;\n\timage: string | null;\n\tcanonical: string | null;\n\tnoIndex: boolean;\n}\n\n/** Input for updating SEO fields on content */\nexport interface ContentSeoInput {\n\ttitle?: string | null;\n\tdescription?: string | null;\n\timage?: string | null;\n\tcanonical?: string | null;\n\tnoIndex?: boolean;\n}\n\nexport interface BylineSummary {\n\tid: string;\n\tslug: string;\n\tdisplayName: string;\n\tbio: string | null;\n\tavatarMediaId: string | null;\n\twebsiteUrl: string | null;\n\tuserId: string | null;\n\tisGuest: boolean;\n\tcreatedAt: string;\n\tupdatedAt: string;\n}\n\nexport interface ContentBylineCredit {\n\tbyline: BylineSummary;\n\tsortOrder: number;\n\troleLabel: string | null;\n\t/** Whether this credit was explicitly assigned or inferred from authorId */\n\tsource?: \"explicit\" | \"inferred\";\n}\n\nexport interface FindManyOptions {\n\twhere?: {\n\t\tstatus?: string;\n\t\tauthorId?: string;\n\t\tlocale?: string;\n\t};\n\torderBy?: {\n\t\tfield: string;\n\t\tdirection: \"asc\" | \"desc\";\n\t};\n\tlimit?: number;\n\tcursor?: string; // Base64-encoded JSON: {orderValue: string, id: string}\n}\n\nexport interface FindManyResult<T> {\n\titems: T[];\n\tnextCursor?: string; // Base64-encoded JSON: {orderValue: string, id: string}\n}\n\n/** Encode a cursor from order value + id */\nexport function encodeCursor(orderValue: string, id: string): string {\n\treturn encodeBase64(JSON.stringify({ orderValue, id }));\n}\n\n/**\n * Thrown when a pagination cursor cannot be decoded.\n *\n * Repository callers should let this propagate; handler catch blocks\n * map it to a structured `INVALID_CURSOR` error so client pagination\n * bugs surface immediately rather than silently re-fetching the first\n * page.\n */\nexport class InvalidCursorError extends Error {\n\tconstructor(cursor: string) {\n\t\tconst display = cursor.length > 50 ? `${cursor.slice(0, 47)}...` : cursor;\n\t\tsuper(`Invalid pagination cursor: ${display}`);\n\t\tthis.name = \"InvalidCursorError\";\n\t}\n}\n\n/**\n * Decode a cursor to order value + id.\n *\n * Throws `InvalidCursorError` if the cursor is empty, not valid base64,\n * not valid JSON, or doesn't contain string `orderValue` and `id` fields.\n */\nexport function decodeCursor(cursor: string): { orderValue: string; id: string } {\n\tif (!cursor) throw new InvalidCursorError(cursor);\n\tif (cursor.length > MAX_CURSOR_LENGTH) throw new InvalidCursorError(cursor);\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(decodeBase64(cursor));\n\t} catch {\n\t\tthrow new InvalidCursorError(cursor);\n\t}\n\tif (parsed === null || typeof parsed !== \"object\") {\n\t\tthrow new InvalidCursorError(cursor);\n\t}\n\tconst candidate = parsed as { orderValue?: unknown; id?: unknown };\n\tif (typeof candidate.orderValue !== \"string\" || typeof candidate.id !== \"string\") {\n\t\tthrow new InvalidCursorError(cursor);\n\t}\n\treturn { orderValue: candidate.orderValue, id: candidate.id };\n}\n\nexport interface ContentItem {\n\tid: string;\n\ttype: string;\n\tslug: string | null;\n\tstatus: string;\n\tdata: Record<string, unknown>;\n\tauthorId: string | null;\n\tprimaryBylineId: string | null;\n\tbyline?: BylineSummary | null;\n\tbylines?: ContentBylineCredit[];\n\tcreatedAt: string;\n\tupdatedAt: string;\n\tpublishedAt: string | null;\n\tscheduledAt: string | null;\n\tliveRevisionId: string | null;\n\tdraftRevisionId: string | null;\n\tversion: number;\n\tlocale: string | null;\n\ttranslationGroup: string | null;\n\t/** SEO metadata — only populated for collections with `has_seo` enabled */\n\tseo?: ContentSeo;\n\t/**\n\t * For collections that support `revisions`: when a draft revision exists,\n\t * `data` reflects the unsaved draft and `liveData` carries the currently-\n\t * published values. When no draft exists, `liveData` is undefined.\n\t *\n\t * Hydrated by `EmDashRuntime.hydrateDraftData()` — repositories themselves\n\t * never set this field; it's purely a runtime-overlay concept that gives\n\t * agents a clear picture of \"draft vs. live\" without re-fetching the\n\t * revision history.\n\t */\n\tliveData?: Record<string, unknown>;\n}\n\nexport class EmDashValidationError extends Error {\n\tconstructor(\n\t\tmessage: string,\n\t\tpublic details?: unknown,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"EmDashValidationError\";\n\t}\n}\n"],"mappings":";;;;;;;;;;;AAUA,MAAM,oBAAoB;;AAqF1B,SAAgB,aAAa,YAAoB,IAAoB;AACpE,QAAO,aAAa,KAAK,UAAU;EAAE;EAAY;EAAI,CAAC,CAAC;;;;;;;;;;AAWxD,IAAa,qBAAb,cAAwC,MAAM;CAC7C,YAAY,QAAgB;EAC3B,MAAM,UAAU,OAAO,SAAS,KAAK,GAAG,OAAO,MAAM,GAAG,GAAG,CAAC,OAAO;AACnE,QAAM,8BAA8B,UAAU;AAC9C,OAAK,OAAO;;;;;;;;;AAUd,SAAgB,aAAa,QAAoD;AAChF,KAAI,CAAC,OAAQ,OAAM,IAAI,mBAAmB,OAAO;AACjD,KAAI,OAAO,SAAS,kBAAmB,OAAM,IAAI,mBAAmB,OAAO;CAC3E,IAAI;AACJ,KAAI;AACH,WAAS,KAAK,MAAM,aAAa,OAAO,CAAC;SAClC;AACP,QAAM,IAAI,mBAAmB,OAAO;;AAErC,KAAI,WAAW,QAAQ,OAAO,WAAW,SACxC,OAAM,IAAI,mBAAmB,OAAO;CAErC,MAAM,YAAY;AAClB,KAAI,OAAO,UAAU,eAAe,YAAY,OAAO,UAAU,OAAO,SACvE,OAAM,IAAI,mBAAmB,OAAO;AAErC,QAAO;EAAE,YAAY,UAAU;EAAY,IAAI,UAAU;EAAI;;AAqC9D,IAAa,wBAAb,cAA2C,MAAM;CAChD,YACC,SACA,AAAO,SACN;AACD,QAAM,QAAQ;EAFP;AAGP,OAAK,OAAO"}
@@ -80,4 +80,4 @@ const RESERVED_COLLECTION_SLUGS = [
80
80
 
81
81
  //#endregion
82
82
  export { RESERVED_FIELD_SLUGS as i, FIELD_TYPE_TO_COLUMN as n, RESERVED_COLLECTION_SLUGS as r, FIELD_TYPES as t };
83
- //# sourceMappingURL=types-DDS4MxsT.mjs.map
83
+ //# sourceMappingURL=types-Bm1dn-q3.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"types-DDS4MxsT.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}\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;\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;\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"],"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;;;;;;;AA8MD,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"}
1
+ {"version":3,"file":"types-Bm1dn-q3.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}\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;\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;\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"],"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;;;;;;;AA8MD,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"}
@@ -240,4 +240,4 @@ interface SiteSettings {
240
240
  type SiteSettingKey = keyof SiteSettings;
241
241
  //#endregion
242
242
  export { RESERVED_COLLECTION_SLUGS as _, Collection as a, UpdateFieldInput as b, CollectionWithFields as c, CreateFieldInput as d, FIELD_TYPE_TO_COLUMN as f, FieldWidgetOptions as g, FieldValidation as h, SiteSettings as i, ColumnType as l, FieldType as m, SeoSettings as n, CollectionSource as o, Field as p, SiteSettingKey as r, CollectionSupport as s, MediaReference as t, CreateCollectionInput as u, RESERVED_FIELD_SLUGS as v, UpdateCollectionInput as y };
243
- //# sourceMappingURL=types-CnZYHyLW.d.mts.map
243
+ //# sourceMappingURL=types-BmPPSUEx.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types-CnZYHyLW.d.mts","names":[],"sources":["../src/schema/types.ts","../src/settings/types.ts"],"mappings":"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"}
1
+ {"version":3,"file":"types-BmPPSUEx.d.mts","names":[],"sources":["../src/schema/types.ts","../src/settings/types.ts"],"mappings":"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"}
@@ -73,6 +73,17 @@ interface FindManyResult<T> {
73
73
  items: T[];
74
74
  nextCursor?: string;
75
75
  }
76
+ /**
77
+ * Thrown when a pagination cursor cannot be decoded.
78
+ *
79
+ * Repository callers should let this propagate; handler catch blocks
80
+ * map it to a structured `INVALID_CURSOR` error so client pagination
81
+ * bugs surface immediately rather than silently re-fetching the first
82
+ * page.
83
+ */
84
+ declare class InvalidCursorError extends Error {
85
+ constructor(cursor: string);
86
+ }
76
87
  interface ContentItem {
77
88
  id: string;
78
89
  type: string;
@@ -94,11 +105,22 @@ interface ContentItem {
94
105
  translationGroup: string | null;
95
106
  /** SEO metadata — only populated for collections with `has_seo` enabled */
96
107
  seo?: ContentSeo;
108
+ /**
109
+ * For collections that support `revisions`: when a draft revision exists,
110
+ * `data` reflects the unsaved draft and `liveData` carries the currently-
111
+ * published values. When no draft exists, `liveData` is undefined.
112
+ *
113
+ * Hydrated by `EmDashRuntime.hydrateDraftData()` — repositories themselves
114
+ * never set this field; it's purely a runtime-overlay concept that gives
115
+ * agents a clear picture of "draft vs. live" without re-fetching the
116
+ * revision history.
117
+ */
118
+ liveData?: Record<string, unknown>;
97
119
  }
98
120
  declare class EmDashValidationError extends Error {
99
121
  details?: unknown | undefined;
100
122
  constructor(message: string, details?: unknown | undefined);
101
123
  }
102
124
  //#endregion
103
- export { ContentSeoInput as a, FindManyOptions as c, ContentSeo as i, FindManyResult as l, ContentBylineCredit as n, CreateContentInput as o, ContentItem as r, EmDashValidationError as s, BylineSummary as t, UpdateContentInput as u };
104
- //# sourceMappingURL=types-6CUZRrZP.d.mts.map
125
+ export { ContentSeoInput as a, FindManyOptions as c, UpdateContentInput as d, ContentSeo as i, FindManyResult as l, ContentBylineCredit as n, CreateContentInput as o, ContentItem as r, EmDashValidationError as s, BylineSummary as t, InvalidCursorError as u };
126
+ //# sourceMappingURL=types-BrA0xf5I.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types-6CUZRrZP.d.mts","names":[],"sources":["../src/database/repositories/types.ts"],"mappings":";UAEiB,kBAAA;EAChB,IAAA;EACA,IAAA;EACA,IAAA,EAAM,MAAA;EACN,MAAA;EACA,QAAA;EACA,eAAA;EACA,MAAA;EACA,aAAA;EACA,WAAA;EAJA;EAMA,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;EACA,UAAA;EACA,MAAA;EACA,OAAA;EACA,SAAA;EACA,SAAA;AAAA;AAAA,UAGgB,mBAAA;EAChB,MAAA,EAAQ,aAAA;EACR,SAAA;EACA,SAAA;EAhBgB;EAkBhB,MAAA;AAAA;AAAA,UAGgB,eAAA;EAChB,KAAA;IACC,MAAA;IACA,QAAA;IACA,MAAA;EAAA;EAED,OAAA;IACC,KAAA;IACA,SAAA;EAAA;EAED,KAAA;EACA,MAAA;AAAA;AAAA,UAGgB,cAAA;EAChB,KAAA,EAAO,CAAA;EACP,UAAA;AAAA;AAAA,UAqBgB,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;EAzC+B;EA2C/B,GAAA,GAAM,UAAA;AAAA;AAAA,cAGM,qBAAA,SAA8B,KAAA;EAGlC,OAAA;cADP,OAAA,UACO,OAAA;AAAA"}
1
+ {"version":3,"file":"types-BrA0xf5I.d.mts","names":[],"sources":["../src/database/repositories/types.ts"],"mappings":";UAYiB,kBAAA;EAChB,IAAA;EACA,IAAA;EACA,IAAA,EAAM,MAAA;EACN,MAAA;EACA,QAAA;EACA,eAAA;EACA,MAAA;EACA,aAAA;EACA,WAAA;EAJA;EAMA,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;EACA,UAAA;EACA,MAAA;EACA,OAAA;EACA,SAAA;EACA,SAAA;AAAA;AAAA,UAGgB,mBAAA;EAChB,MAAA,EAAQ,aAAA;EACR,SAAA;EACA,SAAA;EAhBgB;EAkBhB,MAAA;AAAA;AAAA,UAGgB,eAAA;EAChB,KAAA;IACC,MAAA;IACA,QAAA;IACA,MAAA;EAAA;EAED,OAAA;IACC,KAAA;IACA,SAAA;EAAA;EAED,KAAA;EACA,MAAA;AAAA;AAAA,UAGgB,cAAA;EAChB,KAAA,EAAO,CAAA;EACP,UAAA;AAAA;;;;;;AAhBD;;;cAgCa,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;EAlB2B;EAoB3B,GAAA,GAAM,UAAA;EAfA;;;;;;;;;;EA0BN,QAAA,GAAW,MAAA;AAAA;AAAA,cAGC,qBAAA,SAA8B,KAAA;EAGlC,OAAA;cADP,OAAA,UACO,OAAA;AAAA"}
@@ -393,6 +393,15 @@ interface NotFoundLogTable {
393
393
  referrer: string | null;
394
394
  user_agent: string | null;
395
395
  ip: string | null;
396
+ hits: number;
397
+ /**
398
+ * Migration 035 adds this as a nullable column (SQLite can't add a
399
+ * NOT NULL column with a non-constant default to an existing table).
400
+ * The `log404` upsert always writes a value, so new and updated rows
401
+ * always have one, but existing rows pre-migration were backfilled
402
+ * without a NOT NULL constraint. Typed as nullable to match the schema.
403
+ */
404
+ last_seen_at: string | null;
396
405
  created_at: string;
397
406
  }
398
407
  interface BylineTable {
@@ -423,4 +432,4 @@ interface RateLimitTable {
423
432
  }
424
433
  //#endregion
425
434
  export { MediaTable as n, UserTable as r, Database as t };
426
- //# sourceMappingURL=types-8xrvl_68.d.mts.map
435
+ //# sourceMappingURL=types-CS8FIX7L.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types-8xrvl_68.d.mts","names":[],"sources":["../src/database/types.ts"],"mappings":"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"}
1
+ {"version":3,"file":"types-CS8FIX7L.d.mts","names":[],"sources":["../src/database/types.ts"],"mappings":"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"}
@@ -13,4 +13,4 @@ var EmDashStorageError = class extends Error {
13
13
 
14
14
  //#endregion
15
15
  export { EmDashStorageError as t };
16
- //# sourceMappingURL=types-BH2L167P.mjs.map
16
+ //# sourceMappingURL=types-CgqmmMJB.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"types-BH2L167P.mjs","names":[],"sources":["../src/storage/types.ts"],"sourcesContent":["/**\n * Storage Layer Types\n *\n * Defines the interface for S3-compatible storage backends.\n * Works with R2, AWS S3, Minio, and other S3-compatible services.\n */\n\n/**\n * Storage configuration for S3-compatible backends\n */\nexport interface S3StorageConfig {\n\t/** S3 endpoint URL (e.g., \"https://xxx.r2.cloudflarestorage.com\") */\n\tendpoint: string;\n\t/** Bucket name */\n\tbucket: string;\n\t/**\n\t * AWS access key ID.\n\t * May be resolved from the `S3_ACCESS_KEY_ID` env var at runtime on Node.\n\t * Must be provided together with `secretAccessKey`, or both omitted.\n\t */\n\taccessKeyId?: string;\n\t/**\n\t * AWS secret access key.\n\t * May be resolved from the `S3_SECRET_ACCESS_KEY` env var at runtime on Node.\n\t * Must be provided together with `accessKeyId`, or both omitted.\n\t */\n\tsecretAccessKey?: string;\n\t/** Optional region (defaults to \"auto\") */\n\tregion?: string;\n\t/** Optional public URL prefix for generated URLs (e.g., CDN URL) */\n\tpublicUrl?: string;\n}\n\n/**\n * Local filesystem storage for development\n */\nexport interface LocalStorageConfig {\n\t/** Directory path for storing files */\n\tdirectory: string;\n\t/** Base URL for serving files */\n\tbaseUrl: string;\n}\n\n/**\n * Storage adapter descriptor (serializable config)\n */\nexport interface StorageDescriptor {\n\t/** Module path exporting createStorage function */\n\tentrypoint: string;\n\t/** Serializable config passed to createStorage at runtime */\n\tconfig: Record<string, unknown>;\n}\n\n/**\n * Factory function signature for storage adapters\n *\n * Each adapter accesses its own bindings directly:\n * - R2: imports from cloudflare:workers\n * - S3: uses credentials from config\n * - Local: uses filesystem path from config\n */\nexport type CreateStorageFn = (config: Record<string, unknown>) => Storage;\n\n/**\n * Upload result\n */\nexport interface UploadResult {\n\t/** Storage key (path within bucket) */\n\tkey: string;\n\t/** Public URL to access the file */\n\turl: string;\n\t/** File size in bytes */\n\tsize: number;\n}\n\n/**\n * Download result\n */\nexport interface DownloadResult {\n\t/** File content as readable stream */\n\tbody: ReadableStream<Uint8Array>;\n\t/** MIME type */\n\tcontentType: string;\n\t/** File size in bytes */\n\tsize: number;\n}\n\n/**\n * Signed URL for direct upload\n */\nexport interface SignedUploadUrl {\n\t/** Signed URL for PUT request */\n\turl: string;\n\t/** HTTP method (always PUT) */\n\tmethod: \"PUT\";\n\t/** Headers to include in the upload request */\n\theaders: Record<string, string>;\n\t/** URL expiration time (ISO string) */\n\texpiresAt: string;\n}\n\n/**\n * Options for generating signed upload URL\n */\nexport interface SignedUploadOptions {\n\t/** Storage key (path within bucket) */\n\tkey: string;\n\t/** MIME type of the file */\n\tcontentType: string;\n\t/** File size in bytes (for content-length validation) */\n\tsize?: number;\n\t/** URL expiration in seconds (default: 3600) */\n\texpiresIn?: number;\n}\n\n/**\n * File listing result\n */\nexport interface ListResult {\n\t/** List of files */\n\tfiles: FileInfo[];\n\t/** Cursor for next page (if more results) */\n\tnextCursor?: string;\n}\n\n/**\n * File info from listing\n */\nexport interface FileInfo {\n\t/** Storage key */\n\tkey: string;\n\t/** File size in bytes */\n\tsize: number;\n\t/** Last modified date */\n\tlastModified: Date;\n\t/** ETag (content hash) */\n\tetag?: string;\n}\n\n/**\n * Options for listing files\n */\nexport interface ListOptions {\n\t/** Filter by key prefix */\n\tprefix?: string;\n\t/** Maximum results per page */\n\tlimit?: number;\n\t/** Cursor from previous list call */\n\tcursor?: string;\n}\n\n/**\n * Storage interface\n *\n * All storage backends must implement this interface.\n */\nexport interface Storage {\n\t/**\n\t * Upload a file to storage\n\t */\n\tupload(options: {\n\t\tkey: string;\n\t\tbody: Buffer | Uint8Array | ReadableStream<Uint8Array>;\n\t\tcontentType: string;\n\t}): Promise<UploadResult>;\n\n\t/**\n\t * Download a file from storage\n\t */\n\tdownload(key: string): Promise<DownloadResult>;\n\n\t/**\n\t * Delete a file from storage\n\t * Idempotent - does not throw if file doesn't exist\n\t */\n\tdelete(key: string): Promise<void>;\n\n\t/**\n\t * Check if a file exists\n\t */\n\texists(key: string): Promise<boolean>;\n\n\t/**\n\t * List files in storage\n\t */\n\tlist(options?: ListOptions): Promise<ListResult>;\n\n\t/**\n\t * Generate a signed URL for direct upload\n\t * Client uploads directly to storage, bypassing the server\n\t */\n\tgetSignedUploadUrl(options: SignedUploadOptions): Promise<SignedUploadUrl>;\n\n\t/**\n\t * Get public URL for a file\n\t */\n\tgetPublicUrl(key: string): string;\n}\n\n/**\n * Storage error with additional context\n */\nexport class EmDashStorageError extends Error {\n\tconstructor(\n\t\tmessage: string,\n\t\tpublic code: string,\n\t\tpublic override cause?: unknown,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"EmDashStorageError\";\n\t}\n}\n"],"mappings":";;;;AA0MA,IAAa,qBAAb,cAAwC,MAAM;CAC7C,YACC,SACA,AAAO,MACP,AAAgB,OACf;AACD,QAAM,QAAQ;EAHP;EACS;AAGhB,OAAK,OAAO"}
1
+ {"version":3,"file":"types-CgqmmMJB.mjs","names":[],"sources":["../src/storage/types.ts"],"sourcesContent":["/**\n * Storage Layer Types\n *\n * Defines the interface for S3-compatible storage backends.\n * Works with R2, AWS S3, Minio, and other S3-compatible services.\n */\n\n/**\n * Storage configuration for S3-compatible backends\n */\nexport interface S3StorageConfig {\n\t/** S3 endpoint URL (e.g., \"https://xxx.r2.cloudflarestorage.com\") */\n\tendpoint: string;\n\t/** Bucket name */\n\tbucket: string;\n\t/**\n\t * AWS access key ID.\n\t * May be resolved from the `S3_ACCESS_KEY_ID` env var at runtime on Node.\n\t * Must be provided together with `secretAccessKey`, or both omitted.\n\t */\n\taccessKeyId?: string;\n\t/**\n\t * AWS secret access key.\n\t * May be resolved from the `S3_SECRET_ACCESS_KEY` env var at runtime on Node.\n\t * Must be provided together with `accessKeyId`, or both omitted.\n\t */\n\tsecretAccessKey?: string;\n\t/** Optional region (defaults to \"auto\") */\n\tregion?: string;\n\t/** Optional public URL prefix for generated URLs (e.g., CDN URL) */\n\tpublicUrl?: string;\n}\n\n/**\n * Local filesystem storage for development\n */\nexport interface LocalStorageConfig {\n\t/** Directory path for storing files */\n\tdirectory: string;\n\t/** Base URL for serving files */\n\tbaseUrl: string;\n}\n\n/**\n * Storage adapter descriptor (serializable config)\n */\nexport interface StorageDescriptor {\n\t/** Module path exporting createStorage function */\n\tentrypoint: string;\n\t/** Serializable config passed to createStorage at runtime */\n\tconfig: Record<string, unknown>;\n}\n\n/**\n * Factory function signature for storage adapters\n *\n * Each adapter accesses its own bindings directly:\n * - R2: imports from cloudflare:workers\n * - S3: uses credentials from config\n * - Local: uses filesystem path from config\n */\nexport type CreateStorageFn = (config: Record<string, unknown>) => Storage;\n\n/**\n * Upload result\n */\nexport interface UploadResult {\n\t/** Storage key (path within bucket) */\n\tkey: string;\n\t/** Public URL to access the file */\n\turl: string;\n\t/** File size in bytes */\n\tsize: number;\n}\n\n/**\n * Download result\n */\nexport interface DownloadResult {\n\t/** File content as readable stream */\n\tbody: ReadableStream<Uint8Array>;\n\t/** MIME type */\n\tcontentType: string;\n\t/** File size in bytes */\n\tsize: number;\n}\n\n/**\n * Signed URL for direct upload\n */\nexport interface SignedUploadUrl {\n\t/** Signed URL for PUT request */\n\turl: string;\n\t/** HTTP method (always PUT) */\n\tmethod: \"PUT\";\n\t/** Headers to include in the upload request */\n\theaders: Record<string, string>;\n\t/** URL expiration time (ISO string) */\n\texpiresAt: string;\n}\n\n/**\n * Options for generating signed upload URL\n */\nexport interface SignedUploadOptions {\n\t/** Storage key (path within bucket) */\n\tkey: string;\n\t/** MIME type of the file */\n\tcontentType: string;\n\t/** File size in bytes (for content-length validation) */\n\tsize?: number;\n\t/** URL expiration in seconds (default: 3600) */\n\texpiresIn?: number;\n}\n\n/**\n * File listing result\n */\nexport interface ListResult {\n\t/** List of files */\n\tfiles: FileInfo[];\n\t/** Cursor for next page (if more results) */\n\tnextCursor?: string;\n}\n\n/**\n * File info from listing\n */\nexport interface FileInfo {\n\t/** Storage key */\n\tkey: string;\n\t/** File size in bytes */\n\tsize: number;\n\t/** Last modified date */\n\tlastModified: Date;\n\t/** ETag (content hash) */\n\tetag?: string;\n}\n\n/**\n * Options for listing files\n */\nexport interface ListOptions {\n\t/** Filter by key prefix */\n\tprefix?: string;\n\t/** Maximum results per page */\n\tlimit?: number;\n\t/** Cursor from previous list call */\n\tcursor?: string;\n}\n\n/**\n * Storage interface\n *\n * All storage backends must implement this interface.\n */\nexport interface Storage {\n\t/**\n\t * Upload a file to storage\n\t */\n\tupload(options: {\n\t\tkey: string;\n\t\tbody: Buffer | Uint8Array | ReadableStream<Uint8Array>;\n\t\tcontentType: string;\n\t}): Promise<UploadResult>;\n\n\t/**\n\t * Download a file from storage\n\t */\n\tdownload(key: string): Promise<DownloadResult>;\n\n\t/**\n\t * Delete a file from storage\n\t * Idempotent - does not throw if file doesn't exist\n\t */\n\tdelete(key: string): Promise<void>;\n\n\t/**\n\t * Check if a file exists\n\t */\n\texists(key: string): Promise<boolean>;\n\n\t/**\n\t * List files in storage\n\t */\n\tlist(options?: ListOptions): Promise<ListResult>;\n\n\t/**\n\t * Generate a signed URL for direct upload\n\t * Client uploads directly to storage, bypassing the server\n\t */\n\tgetSignedUploadUrl(options: SignedUploadOptions): Promise<SignedUploadUrl>;\n\n\t/**\n\t * Get public URL for a file\n\t */\n\tgetPublicUrl(key: string): string;\n}\n\n/**\n * Storage error with additional context\n */\nexport class EmDashStorageError extends Error {\n\tconstructor(\n\t\tmessage: string,\n\t\tpublic code: string,\n\t\tpublic override cause?: unknown,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"EmDashStorageError\";\n\t}\n}\n"],"mappings":";;;;AA0MA,IAAa,qBAAb,cAAwC,MAAM;CAC7C,YACC,SACA,AAAO,MACP,AAAgB,OACf;AACD,QAAM,QAAQ;EAHP;EACS;AAGhB,OAAK,OAAO"}
@@ -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-CFWjXmus.d.mts.map
192
+ //# sourceMappingURL=types-DIMwPFub.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types-CFWjXmus.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-DIMwPFub.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,8 +1,8 @@
1
- import { m as FieldType } from "./types-CnZYHyLW.mjs";
1
+ import { m as FieldType } from "./types-BmPPSUEx.mjs";
2
2
  import { z } from "astro/zod";
3
3
  import { JSX } from "astro/jsx-runtime";
4
4
 
5
- //#region ../blocks/dist/validation-BG2u9jAE.d.ts
5
+ //#region ../blocks/dist/validation-DLXCL5Tq.d.ts
6
6
  //#region src/types.d.ts
7
7
  interface ConfirmDialog {
8
8
  title: string;
@@ -99,7 +99,40 @@ interface RadioElement {
99
99
  }>;
100
100
  initial_value?: string;
101
101
  }
102
- type Element = ButtonElement | TextInputElement | NumberInputElement | SelectElement | ToggleElement | SecretInputElement | CheckboxElement | DateInputElement | ComboboxElement | RadioElement;
102
+ /**
103
+ * Sub-field types allowed inside a RepeaterElement. Limited to the scalar
104
+ * inputs the admin widget currently renders inline.
105
+ */
106
+ type RepeaterSubField = TextInputElement | NumberInputElement | SelectElement | ToggleElement;
107
+ /**
108
+ * Array-of-objects field. Renders as a list of collapsible cards with inline
109
+ * add/remove and drag-and-drop reordering. Sub-fields are scalar Block Kit
110
+ * elements keyed by their `action_id`.
111
+ *
112
+ * Admin-authoring only: this element is rendered by the admin widget so plugin
113
+ * blocks can capture repeating data. The runtime block renderer
114
+ * (`renderElement`) deliberately returns `null` for `repeater` — repeater
115
+ * values are persisted on the parent block and consumed by the plugin's own
116
+ * runtime component, not re-rendered as a stand-alone block.
117
+ */
118
+ interface RepeaterElement {
119
+ type: "repeater";
120
+ action_id: string;
121
+ label: string;
122
+ /** Singular label used in the UI (e.g. "FAQ" → "Add FAQ"). */
123
+ item_label?: string;
124
+ fields: RepeaterSubField[];
125
+ min_items?: number;
126
+ max_items?: number;
127
+ /**
128
+ * Default rows for the field. Note: the admin widget seeds new rows from
129
+ * the sub-field types (empty string / `false`), not from `initial_value`;
130
+ * plugins should populate persisted state via the form `values` payload
131
+ * instead of relying on `initial_value` for pre-filled rows.
132
+ */
133
+ initial_value?: Array<Record<string, unknown>>;
134
+ }
135
+ type Element = ButtonElement | TextInputElement | NumberInputElement | SelectElement | ToggleElement | SecretInputElement | CheckboxElement | DateInputElement | ComboboxElement | RadioElement | RepeaterElement;
103
136
  //#endregion
104
137
  //#region src/plugins/types.d.ts
105
138
  /**
@@ -975,7 +1008,7 @@ interface PluginDashboardWidget {
975
1008
  /**
976
1009
  * Settings field types (for admin UI generation)
977
1010
  */
978
- type SettingFieldType = "string" | "number" | "boolean" | "select" | "secret";
1011
+ type SettingFieldType = "string" | "number" | "boolean" | "select" | "secret" | "url" | "email";
979
1012
  interface BaseSettingField {
980
1013
  type: SettingFieldType;
981
1014
  label: string;
@@ -1007,7 +1040,17 @@ interface SelectSettingField extends BaseSettingField {
1007
1040
  interface SecretSettingField extends BaseSettingField {
1008
1041
  type: "secret";
1009
1042
  }
1010
- type SettingField = StringSettingField | NumberSettingField | BooleanSettingField | SelectSettingField | SecretSettingField;
1043
+ interface UrlSettingField extends BaseSettingField {
1044
+ type: "url";
1045
+ default?: string;
1046
+ placeholder?: string;
1047
+ }
1048
+ interface EmailSettingField extends BaseSettingField {
1049
+ type: "email";
1050
+ default?: string;
1051
+ placeholder?: string;
1052
+ }
1053
+ type SettingField = StringSettingField | NumberSettingField | BooleanSettingField | SelectSettingField | SecretSettingField | UrlSettingField | EmailSettingField;
1011
1054
  /**
1012
1055
  * Block Kit element for block editing fields.
1013
1056
  * This is the `Element` discriminated union from `@emdash-cms/blocks`.
@@ -1206,4 +1249,4 @@ interface PluginManifest {
1206
1249
  }
1207
1250
  //#endregion
1208
1251
  export { StandardHookEntry as $, PageMetadataContribution as A, PluginDefinition as B, MediaAccess as C, PageFragmentContribution as D, ModerationDecision as E, PluginAdminConfig as F, PortableTextBlockConfig as G, PluginManifest as H, PluginAdminExports as I, RequestMeta as J, PortableTextBlockField as K, PluginAdminPage as L, PageMetadataHandler as M, PageMetadataLinkRel as N, PageFragmentEvent as O, PagePlacement as P, RouteContext as Q, PluginCapability as R, LogAccess as S, MediaUploadEvent as T, PluginRoute as U, PluginHooks as V, PluginStorageConfig as W, ResolvedPlugin as X, ResolvedHook as Y, ResolvedPluginHooks as Z, FieldWidgetConfig as _, CommentAfterModerateEvent as a, StoredComment as at, HttpAccess as b, CommentBeforeCreateHandler as c, ContentAccess as d, StandardHookHandler as et, ContentDeleteEvent as f, EmailMessage as g, CronEvent as h, CommentAfterCreateHandler as i, StorageCollection as it, PageMetadataEvent as j, PageFragmentHandler as k, CommentModerateEvent as l, ContentPublishStateChangeEvent as m, CollectionCommentSettings as n, StandardRouteEntry as nt, CommentAfterModerateHandler as o, isStandardPluginDefinition as ot, ContentHookEvent as p, PublicPageContext as q, CommentAfterCreateEvent as r, StandardRouteHandler as rt, CommentBeforeCreateEvent as s, Element as st, BreadcrumbItem as t, StandardPluginDefinition as tt, CommentModerateHandler as u, HookConfig as v, MediaItem as w, KVAccess as x, HookName as y, PluginContext as z };
1209
- //# sourceMappingURL=types-DgrIP0tF.d.mts.map
1252
+ //# sourceMappingURL=types-i36XcA_X.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types-i36XcA_X.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","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","EmptyBlock","command_line","size","actions","BlockAction","FormSubmit","values","PageLoad","page","BlockInteraction","BlockResponse","blocks","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","timeseriesChart","xAxisName","yAxisName","customChart","meter","customValue","codeBlock","empty","commandLine","banner","ValidationError","path","validateBlocks","valid","errors","A","B","C","D","E","F","G","H","I","K","L","M","N","O","P","R","S","T","U","V","W","_","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-DLXCL5Tq.d.ts","../src/plugins/types.ts"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { t as __exportAll } from "./chunk-ClPoSABd.mjs";
2
- import { t as FIELD_TYPES } from "./types-DDS4MxsT.mjs";
2
+ import { t as FIELD_TYPES } from "./types-Bm1dn-q3.mjs";
3
3
 
4
4
  //#region src/seed/validate.ts
5
5
  /**
@@ -325,4 +325,4 @@ function validateMenuItemRefs(items, contentIds, warnings) {
325
325
 
326
326
  //#endregion
327
327
  export { validate_exports as n, validateSeed as t };
328
- //# sourceMappingURL=validate-CqsNItbt.mjs.map
328
+ //# sourceMappingURL=validate-CxVsLehf.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"validate-CqsNItbt.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// 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// Check for duplicate taxonomy names\n\t\t\t\t\tif (taxonomyNames.has(taxonomy.name)) {\n\t\t\t\t\t\terrors.push(`${prefix}.name: duplicate taxonomy name \"${taxonomy.name}\"`);\n\t\t\t\t\t}\n\t\t\t\t\ttaxonomyNames.add(taxonomy.name);\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// Check for duplicate term slugs\n\t\t\t\t\t\t\t\tif (termSlugs.has(term.slug)) {\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(term.slug);\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\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\tif (term.parent && !termSlugs.has(term.parent)) {\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// Check for duplicate menu names\n\t\t\t\t\tif (menuNames.has(menu.name)) {\n\t\t\t\t\t\terrors.push(`${prefix}.name: duplicate menu name \"${menu.name}\"`);\n\t\t\t\t\t}\n\t\t\t\t\tmenuNames.add(menu.name);\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\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-CxVsLehf.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// 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// Check for duplicate taxonomy names\n\t\t\t\t\tif (taxonomyNames.has(taxonomy.name)) {\n\t\t\t\t\t\terrors.push(`${prefix}.name: duplicate taxonomy name \"${taxonomy.name}\"`);\n\t\t\t\t\t}\n\t\t\t\t\ttaxonomyNames.add(taxonomy.name);\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// Check for duplicate term slugs\n\t\t\t\t\t\t\t\tif (termSlugs.has(term.slug)) {\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(term.slug);\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\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\tif (term.parent && !termSlugs.has(term.parent)) {\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// Check for duplicate menu names\n\t\t\t\t\tif (menuNames.has(menu.name)) {\n\t\t\t\t\t\terrors.push(`${prefix}.name: duplicate menu name \"${menu.name}\"`);\n\t\t\t\t\t}\n\t\t\t\t\tmenuNames.add(menu.name);\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\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":";;;;;;;;;;AASA,MAAM,gCAAgC;AACtC,MAAM,eAAe;AACrB,MAAM,iBAAiB,IAAI,IAAI;CAAC;CAAK;CAAK;CAAK;CAAI,CAAC;AACpD,MAAM,eAAe;;AAGrB,SAAS,SAAS,OAAkD;AACnE,QAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,MAAM;;AAG5E,SAAS,oBAAoB,MAAuB;AACnD,KAAI,CAAC,KAAK,WAAW,IAAI,IAAI,KAAK,WAAW,KAAK,IAAI,aAAa,KAAK,KAAK,CAC5E,QAAO;AAGR,KAAI;AACH,SAAO,CAAC,mBAAmB,KAAK,CAAC,MAAM,IAAI,CAAC,SAAS,KAAK;SACnD;AACP,SAAO;;;;;;;;;AAUT,SAAgB,aAAa,MAAiC;CAC7D,MAAM,SAAmB,EAAE;CAC3B,MAAM,WAAqB,EAAE;AAG7B,KAAI,CAAC,QAAQ,OAAO,SAAS,SAC5B,QAAO;EACN,OAAO;EACP,QAAQ,CAAC,yBAAyB;EAClC,UAAU,EAAE;EACZ;CAGF,MAAM,OAAO;AAGb,KAAI,CAAC,KAAK,QACT,QAAO,KAAK,iCAAiC;UACnC,KAAK,YAAY,IAC3B,QAAO,KAAK,6BAA6B,OAAO,KAAK,QAAQ,GAAG;AAIjE,KAAI,KAAK,YACR,KAAI,CAAC,MAAM,QAAQ,KAAK,YAAY,CACnC,QAAO,KAAK,+BAA+B;MACrC;EACN,MAAM,kCAAkB,IAAI,KAAa;AAEzC,OAAK,IAAI,IAAI,GAAG,IAAI,KAAK,YAAY,QAAQ,KAAK;GACjD,MAAM,aAAa,KAAK,YAAY;GACpC,MAAM,SAAS,eAAe,EAAE;AAEhC,OAAI,CAAC,WAAW,KACf,QAAO,KAAK,GAAG,OAAO,oBAAoB;QACpC;AAEN,QAAI,CAAC,8BAA8B,KAAK,WAAW,KAAK,CACvD,QAAO,KACN,GAAG,OAAO,8FACV;AAIF,QAAI,gBAAgB,IAAI,WAAW,KAAK,CACvC,QAAO,KAAK,GAAG,OAAO,oCAAoC,WAAW,KAAK,GAAG;AAE9E,oBAAgB,IAAI,WAAW,KAAK;;AAGrC,OAAI,CAAC,WAAW,MACf,QAAO,KAAK,GAAG,OAAO,qBAAqB;AAI5C,OAAI,CAAC,MAAM,QAAQ,WAAW,OAAO,CACpC,QAAO,KAAK,GAAG,OAAO,2BAA2B;QAC3C;IACN,MAAM,6BAAa,IAAI,KAAa;AAEpC,SAAK,IAAI,IAAI,GAAG,IAAI,WAAW,OAAO,QAAQ,KAAK;KAClD,MAAM,QAAQ,WAAW,OAAO;KAChC,MAAM,cAAc,GAAG,OAAO,UAAU,EAAE;AAE1C,SAAI,CAAC,MAAM,KACV,QAAO,KAAK,GAAG,YAAY,oBAAoB;UACzC;AAEN,UAAI,CAAC,8BAA8B,KAAK,MAAM,KAAK,CAClD,QAAO,KACN,GAAG,YAAY,8FACf;AAIF,UAAI,WAAW,IAAI,MAAM,KAAK,CAC7B,QAAO,KACN,GAAG,YAAY,+BAA+B,MAAM,KAAK,mBAAmB,WAAW,KAAK,GAC5F;AAEF,iBAAW,IAAI,MAAM,KAAK;;AAG3B,SAAI,CAAC,MAAM,MACV,QAAO,KAAK,GAAG,YAAY,qBAAqB;AAGjD,SAAI,CAAC,MAAM,KACV,QAAO,KAAK,GAAG,YAAY,oBAAoB;cACrC,CAAE,YAAkC,SAAS,MAAM,KAAK,CAClE,QAAO,KAAK,GAAG,YAAY,iCAAiC,MAAM,KAAK,GAAG;;;;;AAShF,KAAI,KAAK,WACR,KAAI,CAAC,MAAM,QAAQ,KAAK,WAAW,CAClC,QAAO,KAAK,8BAA8B;MACpC;EACN,MAAM,gCAAgB,IAAI,KAAa;AAEvC,OAAK,IAAI,IAAI,GAAG,IAAI,KAAK,WAAW,QAAQ,KAAK;GAChD,MAAM,WAAW,KAAK,WAAW;GACjC,MAAM,SAAS,cAAc,EAAE;AAE/B,OAAI,CAAC,SAAS,KACb,QAAO,KAAK,GAAG,OAAO,oBAAoB;QACpC;AAEN,QAAI,cAAc,IAAI,SAAS,KAAK,CACnC,QAAO,KAAK,GAAG,OAAO,kCAAkC,SAAS,KAAK,GAAG;AAE1E,kBAAc,IAAI,SAAS,KAAK;;AAGjC,OAAI,CAAC,SAAS,MACb,QAAO,KAAK,GAAG,OAAO,qBAAqB;AAG5C,OAAI,SAAS,iBAAiB,OAC7B,QAAO,KAAK,GAAG,OAAO,4BAA4B;AAGnD,OAAI,CAAC,MAAM,QAAQ,SAAS,YAAY,CACvC,QAAO,KAAK,GAAG,OAAO,gCAAgC;YAC5C,SAAS,YAAY,WAAW,EAC1C,UAAS,KACR,GAAG,OAAO,0BAA0B,SAAS,KAAK,sCAClD;AAIF,OAAI,SAAS,MACZ,KAAI,CAAC,MAAM,QAAQ,SAAS,MAAM,CACjC,QAAO,KAAK,GAAG,OAAO,0BAA0B;QAC1C;IACN,MAAM,4BAAY,IAAI,KAAa;AAEnC,SAAK,IAAI,IAAI,GAAG,IAAI,SAAS,MAAM,QAAQ,KAAK;KAC/C,MAAM,OAAO,SAAS,MAAM;KAC5B,MAAM,aAAa,GAAG,OAAO,SAAS,EAAE;AAExC,SAAI,CAAC,KAAK,KACT,QAAO,KAAK,GAAG,WAAW,oBAAoB;UACxC;AAEN,UAAI,UAAU,IAAI,KAAK,KAAK,CAC3B,QAAO,KACN,GAAG,WAAW,8BAA8B,KAAK,KAAK,iBAAiB,SAAS,KAAK,GACrF;AAEF,gBAAU,IAAI,KAAK,KAAK;;AAGzB,SAAI,CAAC,KAAK,MACT,QAAO,KAAK,GAAG,WAAW,qBAAqB;AAIhD,SAAI,KAAK,UAAU,SAAS,cAAc,YAE/B,KAAK,UAAU,CAAC,SAAS,aACnC,UAAS,KACR,GAAG,WAAW,qBAAqB,SAAS,KAAK,+CACjD;;AAKH,QAAI,SAAS,gBAAgB,SAAS,MACrC,MAAK,IAAI,IAAI,GAAG,IAAI,SAAS,MAAM,QAAQ,KAAK;KAC/C,MAAM,OAAO,SAAS,MAAM;AAC5B,SAAI,KAAK,UAAU,CAAC,UAAU,IAAI,KAAK,OAAO,CAC7C,QAAO,KACN,GAAG,OAAO,SAAS,EAAE,yBAAyB,KAAK,OAAO,yBAC1D;AAIF,SAAI,KAAK,WAAW,KAAK,KACxB,QAAO,KAAK,GAAG,OAAO,SAAS,EAAE,yCAAyC;;;;;AAWlF,KAAI,KAAK,MACR,KAAI,CAAC,MAAM,QAAQ,KAAK,MAAM,CAC7B,QAAO,KAAK,yBAAyB;MAC/B;EACN,MAAM,4BAAY,IAAI,KAAa;AAEnC,OAAK,IAAI,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,KAAK;GAC3C,MAAM,OAAO,KAAK,MAAM;GACxB,MAAM,SAAS,SAAS,EAAE;AAE1B,OAAI,CAAC,KAAK,KACT,QAAO,KAAK,GAAG,OAAO,oBAAoB;QACpC;AAEN,QAAI,UAAU,IAAI,KAAK,KAAK,CAC3B,QAAO,KAAK,GAAG,OAAO,8BAA8B,KAAK,KAAK,GAAG;AAElE,cAAU,IAAI,KAAK,KAAK;;AAGzB,OAAI,CAAC,KAAK,MACT,QAAO,KAAK,GAAG,OAAO,qBAAqB;AAG5C,OAAI,CAAC,MAAM,QAAQ,KAAK,MAAM,CAC7B,QAAO,KAAK,GAAG,OAAO,0BAA0B;OAEhD,mBAAkB,KAAK,OAAO,QAAQ,QAAQ,SAAS;;;AAO3D,KAAI,KAAK,UACR,KAAI,CAAC,MAAM,QAAQ,KAAK,UAAU,CACjC,QAAO,KAAK,6BAA6B;MACnC;EACN,MAAM,kCAAkB,IAAI,KAAa;AAEzC,OAAK,IAAI,IAAI,GAAG,IAAI,KAAK,UAAU,QAAQ,KAAK;GAC/C,MAAM,WAAW,KAAK,UAAU;GAChC,MAAM,SAAS,aAAa,EAAE;AAE9B,OAAI,CAAC,SAAS,SAAS,EAAE;AACxB,WAAO,KAAK,GAAG,OAAO,qBAAqB;AAC3C;;GAGD,MAAM,SAAS,OAAO,SAAS,WAAW,WAAW,SAAS,SAAS;GACvE,MAAM,cACL,OAAO,SAAS,gBAAgB,WAAW,SAAS,cAAc;AAEnE,OAAI,CAAC,OACJ,QAAO,KAAK,GAAG,OAAO,sBAAsB;QACtC;AACN,QAAI,CAAC,oBAAoB,OAAO,CAC/B,QAAO,KACN,GAAG,OAAO,kGACV;AAGF,QAAI,gBAAgB,IAAI,OAAO,CAC9B,QAAO,KAAK,GAAG,OAAO,sCAAsC,OAAO,GAAG;AAEvE,oBAAgB,IAAI,OAAO;;AAG5B,OAAI,CAAC,YACJ,QAAO,KAAK,GAAG,OAAO,2BAA2B;YACvC,CAAC,oBAAoB,YAAY,CAC3C,QAAO,KACN,GAAG,OAAO,uGACV;AAGF,OAAI,SAAS,SAAS,QACrB;QAAI,OAAO,SAAS,SAAS,YAAY,CAAC,eAAe,IAAI,SAAS,KAAK,CAC1E,QAAO,KAAK,GAAG,OAAO,sCAAsC;;AAI9D,OAAI,SAAS,YAAY,UAAa,OAAO,SAAS,YAAY,UACjE,QAAO,KAAK,GAAG,OAAO,6BAA6B;AAGpD,OACC,SAAS,cAAc,UACvB,OAAO,SAAS,cAAc,YAC9B,SAAS,cAAc,KAEvB,QAAO,KAAK,GAAG,OAAO,sCAAsC;;;AAOhE,KAAI,KAAK,YACR,KAAI,CAAC,MAAM,QAAQ,KAAK,YAAY,CACnC,QAAO,KAAK,+BAA+B;MACrC;EACN,MAAM,4BAAY,IAAI,KAAa;AAEnC,OAAK,IAAI,IAAI,GAAG,IAAI,KAAK,YAAY,QAAQ,KAAK;GACjD,MAAM,OAAO,KAAK,YAAY;GAC9B,MAAM,SAAS,eAAe,EAAE;AAEhC,OAAI,CAAC,KAAK,KACT,QAAO,KAAK,GAAG,OAAO,oBAAoB;QACpC;AAEN,QAAI,UAAU,IAAI,KAAK,KAAK,CAC3B,QAAO,KAAK,GAAG,OAAO,qCAAqC,KAAK,KAAK,GAAG;AAEzE,cAAU,IAAI,KAAK,KAAK;;AAGzB,OAAI,CAAC,KAAK,MACT,QAAO,KAAK,GAAG,OAAO,qBAAqB;AAG5C,OAAI,CAAC,MAAM,QAAQ,KAAK,QAAQ,CAC/B,QAAO,KAAK,GAAG,OAAO,4BAA4B;OAElD,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,QAAQ,KAAK;IAC7C,MAAM,SAAS,KAAK,QAAQ;IAC5B,MAAM,eAAe,GAAG,OAAO,WAAW,EAAE;AAE5C,QAAI,CAAC,OAAO,KACX,QAAO,KAAK,GAAG,aAAa,oBAAoB;aACtC,CAAC;KAAC;KAAW;KAAQ;KAAY,CAAC,SAAS,OAAO,KAAK,CACjE,QAAO,KAAK,GAAG,aAAa,kDAAkD;AAI/E,QAAI,OAAO,SAAS,UAAU,CAAC,OAAO,SACrC,QAAO,KAAK,GAAG,aAAa,yCAAyC;AAGtE,QAAI,OAAO,SAAS,eAAe,CAAC,OAAO,YAC1C,QAAO,KAAK,GAAG,aAAa,iDAAiD;;;;AASnF,KAAI,KAAK,SACR,KAAI,CAAC,MAAM,QAAQ,KAAK,SAAS,CAChC,QAAO,KAAK,4BAA4B;MAClC;EACN,MAAM,+BAAe,IAAI,KAAa;AAEtC,OAAK,IAAI,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,KAAK;GAC9C,MAAM,UAAU,KAAK,SAAS;GAC9B,MAAM,SAAS,YAAY,EAAE;AAE7B,OAAI,CAAC,QAAQ,KACZ,QAAO,KAAK,GAAG,OAAO,oBAAoB;QACpC;AACN,QAAI,CAAC,aAAa,KAAK,QAAQ,KAAK,CACnC,QAAO,KACN,GAAG,OAAO,kEACV;AAEF,QAAI,aAAa,IAAI,QAAQ,KAAK,CACjC,QAAO,KAAK,GAAG,OAAO,iCAAiC,QAAQ,KAAK,GAAG;AAExE,iBAAa,IAAI,QAAQ,KAAK;;AAG/B,OAAI,CAAC,QAAQ,MACZ,QAAO,KAAK,GAAG,OAAO,qBAAqB;AAG5C,OAAI,CAAC,MAAM,QAAQ,QAAQ,QAAQ,CAClC,QAAO,KAAK,GAAG,OAAO,4BAA4B;AAInD,OAAI,QAAQ,UAAU,CAAC,CAAC,SAAS,SAAS,CAAC,SAAS,QAAQ,OAAO,CAClE,QAAO,KAAK,GAAG,OAAO,sCAAsC;;;AAOhE,KAAI,KAAK,QACR,KAAI,CAAC,MAAM,QAAQ,KAAK,QAAQ,CAC/B,QAAO,KAAK,2BAA2B;MACjC;EACN,MAAM,4BAAY,IAAI,KAAa;EACnC,MAAM,8BAAc,IAAI,KAAa;AACrC,OAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,QAAQ,KAAK;GAC7C,MAAM,SAAS,KAAK,QAAQ;GAC5B,MAAM,SAAS,WAAW,EAAE;AAE5B,OAAI,CAAC,OAAO,GACX,QAAO,KAAK,GAAG,OAAO,kBAAkB;QAClC;AACN,QAAI,UAAU,IAAI,OAAO,GAAG,CAC3B,QAAO,KAAK,GAAG,OAAO,4BAA4B,OAAO,GAAG,GAAG;AAEhE,cAAU,IAAI,OAAO,GAAG;;AAGzB,OAAI,CAAC,OAAO,KACX,QAAO,KAAK,GAAG,OAAO,oBAAoB;QACpC;AACN,QAAI,CAAC,aAAa,KAAK,OAAO,KAAK,CAClC,QAAO,KACN,GAAG,OAAO,kEACV;AAEF,QAAI,YAAY,IAAI,OAAO,KAAK,CAC/B,QAAO,KAAK,GAAG,OAAO,gCAAgC,OAAO,KAAK,GAAG;AAEtE,gBAAY,IAAI,OAAO,KAAK;;AAG7B,OAAI,CAAC,OAAO,YACX,QAAO,KAAK,GAAG,OAAO,2BAA2B;;;AAOrD,KAAI,KAAK,QACR,KAAI,OAAO,KAAK,YAAY,YAAY,MAAM,QAAQ,KAAK,QAAQ,CAClE,QAAO,KAAK,oDAAoD;KAEhE,MAAK,MAAM,CAAC,gBAAgB,YAAY,OAAO,QAAQ,KAAK,QAAQ,EAAE;AACrE,MAAI,CAAC,MAAM,QAAQ,QAAQ,EAAE;AAC5B,UAAO,KAAK,WAAW,eAAe,oBAAoB;AAC1D;;EAGD,MAAM,2BAAW,IAAI,KAAa;AAElC,OAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;GACxC,MAAM,QAAQ,QAAQ;GACtB,MAAM,SAAS,WAAW,eAAe,GAAG,EAAE;AAE9C,OAAI,CAAC,MAAM,GACV,QAAO,KAAK,GAAG,OAAO,kBAAkB;QAClC;AAEN,QAAI,SAAS,IAAI,MAAM,GAAG,CACzB,QAAO,KACN,GAAG,OAAO,2BAA2B,MAAM,GAAG,mBAAmB,eAAe,GAChF;AAEF,aAAS,IAAI,MAAM,GAAG;;AAGvB,OAAI,CAAC,MAAM,KACV,QAAO,KAAK,GAAG,OAAO,oBAAoB;AAG3C,OAAI,CAAC,MAAM,QAAQ,OAAO,MAAM,SAAS,SACxC,QAAO,KAAK,GAAG,OAAO,0BAA0B;AAIjD,OAAI,MAAM,eACT;QAAI,CAAC,MAAM,OACV,QAAO,KAAK,GAAG,OAAO,gDAAgD;;;AAMzE,OAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;GACxC,MAAM,QAAQ,QAAQ;AACtB,OAAI,MAAM,iBAAiB,CAAC,SAAS,IAAI,MAAM,cAAc,CAC5D,QAAO,KACN,WAAW,eAAe,GAAG,EAAE,+BAA+B,MAAM,cAAc,mCAClF;;;AAQN,KAAI,KAAK,SAAS,KAAK,SAAS;EAC/B,MAAM,gCAAgB,IAAI,KAAa;AACvC,OAAK,MAAM,WAAW,OAAO,OAAO,KAAK,QAAQ,CAChD,KAAI,MAAM,QAAQ,QAAQ,EACzB;QAAK,MAAM,SAAS,QACnB,KAAI,MAAM,GACT,eAAc,IAAI,MAAM,GAAG;;AAO/B,OAAK,MAAM,QAAQ,KAAK,MACvB,KAAI,MAAM,QAAQ,KAAK,MAAM,CAC5B,sBAAqB,KAAK,OAAO,eAAe,SAAS;;AAM5D,KAAI,KAAK,SAAS;EACjB,MAAM,gBAAgB,IAAI,KAAa,KAAK,WAAW,EAAE,EAAE,KAAK,WAAW,OAAO,GAAG,CAAC;AACtF,OAAK,MAAM,CAAC,gBAAgB,YAAY,OAAO,QAAQ,KAAK,QAAQ,EAAE;AACrE,OAAI,CAAC,MAAM,QAAQ,QAAQ,CAAE;AAC7B,QAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;IACxC,MAAM,QAAQ,QAAQ;AACtB,QAAI,CAAC,MAAM,QAAS;AACpB,QAAI,CAAC,MAAM,QAAQ,MAAM,QAAQ,EAAE;AAClC,YAAO,KAAK,WAAW,eAAe,GAAG,EAAE,6BAA6B;AACxE;;AAED,SAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,QAAQ,KAAK;KAC9C,MAAM,SAAS,MAAM,QAAQ;KAC7B,MAAM,SAAS,WAAW,eAAe,GAAG,EAAE,YAAY,EAAE;AAC5D,SAAI,CAAC,OAAO,QAAQ;AACnB,aAAO,KAAK,GAAG,OAAO,sBAAsB;AAC5C;;AAED,SAAI,CAAC,cAAc,IAAI,OAAO,OAAO,CACpC,QAAO,KAAK,GAAG,OAAO,sCAAsC,OAAO,OAAO,GAAG;;;;;AAOlF,QAAO;EACN,OAAO,OAAO,WAAW;EACzB;EACA;EACA;;;;;AAMF,SAAS,kBACR,OACA,QACA,QACA,UACO;AACP,MAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;EACtC,MAAM,MAAM,MAAM;EAClB,MAAM,aAAa,GAAG,OAAO,SAAS,EAAE;AAExC,MAAI,CAAC,SAAS,IAAI,EAAE;AACnB,UAAO,KAAK,GAAG,WAAW,qBAAqB;AAC/C;;EAGD,MAAM,OAAO;EAEb,MAAM,WAAW,OAAO,KAAK,SAAS,WAAW,KAAK,OAAO;AAE7D,MAAI,CAAC,SACJ,QAAO,KAAK,GAAG,WAAW,oBAAoB;WACpC,CAAC;GAAC;GAAU;GAAQ;GAAQ;GAAY;GAAa,CAAC,SAAS,SAAS,CAClF,QAAO,KACN,GAAG,WAAW,sEACd;AAIF,MAAI,aAAa,YAAY,CAAC,KAAK,IAClC,QAAO,KAAK,GAAG,WAAW,yCAAyC;AAGpE,OAAK,aAAa,UAAU,aAAa,WAAW,CAAC,KAAK,IACzD,QAAO,KAAK,GAAG,WAAW,4CAA4C;AAIvE,MAAI,MAAM,QAAQ,KAAK,SAAS,CAC/B,mBAAkB,KAAK,UAAU,YAAY,QAAQ,SAAS;;;;;;AAQjE,SAAS,qBACR,OACA,YACA,UACO;AACP,MAAK,MAAM,QAAQ,OAAO;AACzB,OAAK,KAAK,SAAS,UAAU,KAAK,SAAS,WAAW,KAAK,KAC1D;OAAI,CAAC,WAAW,IAAI,KAAK,IAAI,CAC5B,UAAS,KAAK,iCAAiC,KAAK,IAAI,iCAAiC;;AAI3F,MAAI,KAAK,SACR,sBAAqB,KAAK,UAAU,YAAY,SAAS"}
@@ -1,6 +1,6 @@
1
- import { t as Database } from "./types-8xrvl_68.mjs";
2
- import { i as SiteSettings, m as FieldType } from "./types-CnZYHyLW.mjs";
3
- import { d as Storage } from "./types-CFWjXmus.mjs";
1
+ import { t as Database } from "./types-CS8FIX7L.mjs";
2
+ import { i as SiteSettings, m as FieldType } from "./types-BmPPSUEx.mjs";
3
+ import { d as Storage } from "./types-DIMwPFub.mjs";
4
4
  import { Kysely } from "kysely";
5
5
 
6
6
  //#region src/seed/types.d.ts
@@ -328,4 +328,4 @@ declare function loadUserSeed(): Promise<SeedFile | null>;
328
328
  declare function validateSeed(data: unknown): ValidationResult;
329
329
  //#endregion
330
330
  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 };
331
- //# sourceMappingURL=validate-CaLH1Ia2.d.mts.map
331
+ //# sourceMappingURL=validate-DHxmpFJt.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validate-CaLH1Ia2.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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"}
1
+ {"version":3,"file":"validate-DHxmpFJt.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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"}