emdash 0.30.0 → 0.31.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.
- package/dist/api/route-utils.mjs +13 -13
- package/dist/api/schemas/index.d.mts +1 -1
- package/dist/api/schemas/index.mjs +3 -3
- package/dist/{api-b8WIiGU4.mjs → api-EibxGP-V.mjs} +23 -23
- package/dist/api-EibxGP-V.mjs.map +1 -0
- package/dist/{apply-CmIJK9j8.mjs → apply-fGHCAwWN.mjs} +26 -25
- package/dist/apply-fGHCAwWN.mjs.map +1 -0
- package/dist/astro/index.d.mts +2 -2
- package/dist/astro/index.mjs +1 -1
- package/dist/astro/middleware/auth.d.mts +2 -2
- package/dist/astro/middleware/auth.mjs +2 -2
- package/dist/astro/middleware/redirect.mjs +5 -5
- package/dist/astro/middleware/request-context.mjs +1 -1
- package/dist/astro/middleware.d.mts +2 -2
- package/dist/astro/middleware.mjs +139 -68
- package/dist/astro/middleware.mjs.map +1 -1
- package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +6 -6
- package/dist/astro/routes/api/admin/allowed-domains/index.mjs +6 -6
- package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +2 -2
- package/dist/astro/routes/api/admin/api-tokens/index.mjs +3 -3
- package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +3 -3
- package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +7 -7
- package/dist/astro/routes/api/admin/byline-fields/index.mjs +7 -7
- package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +7 -7
- package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +14 -14
- package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +14 -14
- package/dist/astro/routes/api/admin/bylines/index.d.mts.map +1 -1
- package/dist/astro/routes/api/admin/bylines/index.mjs +18 -17
- package/dist/astro/routes/api/admin/bylines/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/comments/_id_/status.mjs +10 -10
- package/dist/astro/routes/api/admin/comments/_id_.mjs +5 -5
- package/dist/astro/routes/api/admin/comments/bulk.mjs +9 -9
- package/dist/astro/routes/api/admin/comments/counts.mjs +5 -5
- package/dist/astro/routes/api/admin/comments/index.mjs +9 -9
- package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +4 -4
- package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +3 -3
- package/dist/astro/routes/api/admin/media-usage/repair.mjs +10 -10
- package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +3 -3
- package/dist/astro/routes/api/admin/oauth-clients/index.mjs +3 -3
- package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +34 -34
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +34 -34
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +34 -34
- package/dist/astro/routes/api/admin/plugins/_id_/mcp.mjs +4 -4
- package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs +34 -34
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +34 -34
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +34 -34
- package/dist/astro/routes/api/admin/plugins/index.mjs +34 -34
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +3 -3
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +34 -34
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +34 -34
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +34 -34
- package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +34 -34
- package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs +35 -35
- package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +34 -34
- package/dist/astro/routes/api/admin/plugins/registry/install.mjs +35 -35
- package/dist/astro/routes/api/admin/plugins/updates.mjs +34 -34
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +34 -34
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +3 -3
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +34 -34
- package/dist/astro/routes/api/admin/users/_id_/disable.mjs +2 -2
- package/dist/astro/routes/api/admin/users/_id_/enable.mjs +2 -2
- package/dist/astro/routes/api/admin/users/_id_/index.mjs +6 -6
- package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +2 -2
- package/dist/astro/routes/api/admin/users/index.mjs +6 -6
- package/dist/astro/routes/api/auth/dev-bypass.mjs +4 -4
- package/dist/astro/routes/api/auth/invite/accept.mjs +2 -2
- package/dist/astro/routes/api/auth/invite/complete.mjs +6 -6
- package/dist/astro/routes/api/auth/invite/index.mjs +6 -6
- package/dist/astro/routes/api/auth/invite/register-options.mjs +6 -6
- package/dist/astro/routes/api/auth/logout.mjs +2 -2
- package/dist/astro/routes/api/auth/magic-link/send.mjs +7 -7
- package/dist/astro/routes/api/auth/magic-link/verify.mjs +2 -2
- package/dist/astro/routes/api/auth/me.mjs +7 -7
- package/dist/astro/routes/api/auth/mode.mjs +2 -2
- package/dist/astro/routes/api/auth/passkey/_id_.mjs +6 -6
- package/dist/astro/routes/api/auth/passkey/index.mjs +2 -2
- package/dist/astro/routes/api/auth/passkey/options.mjs +7 -7
- package/dist/astro/routes/api/auth/passkey/register/options.mjs +6 -6
- package/dist/astro/routes/api/auth/passkey/register/verify.mjs +6 -6
- package/dist/astro/routes/api/auth/passkey/verify.mjs +6 -6
- package/dist/astro/routes/api/auth/signup/complete.mjs +6 -6
- package/dist/astro/routes/api/auth/signup/request.mjs +7 -7
- package/dist/astro/routes/api/auth/signup/verify.mjs +2 -2
- package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +10 -10
- package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +10 -10
- package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +9 -9
- package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +7 -7
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs +14 -14
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs +14 -14
- package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +7 -7
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +13 -13
- package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_.mjs +7 -7
- package/dist/astro/routes/api/content/_collection_/authors.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/index.mjs +7 -7
- package/dist/astro/routes/api/content/_collection_/trash.mjs +7 -7
- package/dist/astro/routes/api/dashboard.mjs +7 -7
- package/dist/astro/routes/api/dev/emails.mjs +2 -2
- package/dist/astro/routes/api/import/probe.mjs +12 -12
- package/dist/astro/routes/api/import/wordpress/analyze.mjs +3 -3
- package/dist/astro/routes/api/import/wordpress/execute.d.mts +2 -2
- package/dist/astro/routes/api/import/wordpress/execute.mjs +11 -11
- package/dist/astro/routes/api/import/wordpress/media.d.mts +2 -2
- package/dist/astro/routes/api/import/wordpress/media.mjs +7 -7
- package/dist/astro/routes/api/import/wordpress/prepare.mjs +9 -9
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +2 -2
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +9 -9
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +12 -12
- package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +2 -2
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +19 -19
- package/dist/astro/routes/api/manifest.mjs +3 -3
- package/dist/astro/routes/api/mcp.mjs +39 -39
- package/dist/astro/routes/api/media/_id_/confirm.mjs +7 -7
- package/dist/astro/routes/api/media/_id_/usage.mjs +11 -11
- package/dist/astro/routes/api/media/_id_.mjs +10 -10
- package/dist/astro/routes/api/media/file/_...key_.mjs +2 -2
- package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +3 -3
- package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +3 -3
- package/dist/astro/routes/api/media/providers/index.mjs +3 -3
- package/dist/astro/routes/api/media/upload-url.mjs +7 -7
- package/dist/astro/routes/api/media.mjs +10 -10
- package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +8 -8
- package/dist/astro/routes/api/menus/_name_/items.mjs +8 -8
- package/dist/astro/routes/api/menus/_name_/reorder.mjs +8 -8
- package/dist/astro/routes/api/menus/_name_/translations.mjs +8 -8
- package/dist/astro/routes/api/menus/_name_.mjs +8 -8
- package/dist/astro/routes/api/menus/index.mjs +8 -8
- package/dist/astro/routes/api/oauth/authorize.d.mts.map +1 -1
- package/dist/astro/routes/api/oauth/authorize.mjs +23 -9
- package/dist/astro/routes/api/oauth/authorize.mjs.map +1 -1
- package/dist/astro/routes/api/oauth/device/authorize.mjs +3 -3
- package/dist/astro/routes/api/oauth/device/code.mjs +4 -4
- package/dist/astro/routes/api/oauth/device/token.mjs +4 -4
- package/dist/astro/routes/api/oauth/register.mjs +2 -2
- package/dist/astro/routes/api/oauth/token/refresh.mjs +3 -3
- package/dist/astro/routes/api/oauth/token/revoke.mjs +3 -3
- package/dist/astro/routes/api/oauth/token.mjs +2 -2
- package/dist/astro/routes/api/openapi.json.mjs +4 -4
- package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +4 -4
- package/dist/astro/routes/api/redirects/404s/index.mjs +10 -10
- package/dist/astro/routes/api/redirects/404s/summary.mjs +10 -10
- package/dist/astro/routes/api/redirects/_id_.mjs +11 -11
- package/dist/astro/routes/api/redirects/index.mjs +11 -11
- package/dist/astro/routes/api/relations/_id_/index.mjs +14 -14
- package/dist/astro/routes/api/relations/_id_/translations.mjs +10 -10
- package/dist/astro/routes/api/relations/index.mjs +14 -14
- package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +3 -3
- package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +3 -3
- package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +34 -34
- package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +34 -34
- package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +34 -34
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +34 -34
- package/dist/astro/routes/api/schema/collections/index.mjs +34 -34
- package/dist/astro/routes/api/schema/index.mjs +8 -8
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs +34 -34
- package/dist/astro/routes/api/schema/orphans/index.mjs +34 -34
- package/dist/astro/routes/api/search/enable.mjs +11 -11
- package/dist/astro/routes/api/search/index.mjs +10 -10
- package/dist/astro/routes/api/search/rebuild.mjs +11 -11
- package/dist/astro/routes/api/search/stats.mjs +7 -7
- package/dist/astro/routes/api/search/suggest.mjs +10 -10
- package/dist/astro/routes/api/sections/_slug_.mjs +10 -10
- package/dist/astro/routes/api/sections/index.mjs +10 -10
- package/dist/astro/routes/api/settings/backups/archives/_name_.mjs +4 -4
- package/dist/astro/routes/api/settings/backups/archives/index.mjs +4 -4
- package/dist/astro/routes/api/settings/backups/export.mjs +4 -4
- package/dist/astro/routes/api/settings/backups/index.mjs +5 -5
- package/dist/astro/routes/api/settings/email.mjs +4 -4
- package/dist/astro/routes/api/settings.mjs +12 -12
- package/dist/astro/routes/api/setup/admin-verify.mjs +6 -6
- package/dist/astro/routes/api/setup/admin.mjs +6 -6
- package/dist/astro/routes/api/setup/dev-bypass.mjs +18 -18
- package/dist/astro/routes/api/setup/dev-reset.mjs +2 -2
- package/dist/astro/routes/api/setup/index.mjs +22 -22
- package/dist/astro/routes/api/setup/status.mjs +3 -3
- package/dist/astro/routes/api/snapshot.mjs +4 -4
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +13 -13
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +13 -13
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +13 -13
- package/dist/astro/routes/api/taxonomies/index.mjs +13 -13
- package/dist/astro/routes/api/themes/preview.mjs +4 -4
- package/dist/astro/routes/api/typegen.mjs +5 -5
- package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +7 -7
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +10 -10
- package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +10 -10
- package/dist/astro/routes/api/widget-areas/_name_.mjs +6 -6
- package/dist/astro/routes/api/widget-areas/index.mjs +10 -10
- package/dist/astro/routes/api/widget-components.mjs +2 -2
- package/dist/astro/routes/robots.txt.mjs +5 -5
- package/dist/astro/routes/sitemap-_collection_.xml.mjs +7 -7
- package/dist/astro/routes/sitemap.xml.mjs +5 -5
- package/dist/astro/types.d.mts +2 -2
- package/dist/{authorize-WxsiePzy.mjs → authorize-6WPZa1xZ.mjs} +2 -2
- package/dist/{authorize-WxsiePzy.mjs.map → authorize-6WPZa1xZ.mjs.map} +1 -1
- package/dist/{backup-S8kFWtwD.mjs → backup-Qr9PaGUo.mjs} +2 -2
- package/dist/{backup-S8kFWtwD.mjs.map → backup-Qr9PaGUo.mjs.map} +1 -1
- package/dist/{byline-XEjchwzZ.mjs → byline-BTOxUlFF.mjs} +6 -6
- package/dist/{byline-XEjchwzZ.mjs.map → byline-BTOxUlFF.mjs.map} +1 -1
- package/dist/{bylines-czseViYo.mjs → bylines-FyZu6TbJ.mjs} +6 -6
- package/dist/{bylines-czseViYo.mjs.map → bylines-FyZu6TbJ.mjs.map} +1 -1
- package/dist/{bylines-BJbT4gKS.mjs → bylines-oVN0iPwX.mjs} +12 -8
- package/dist/bylines-oVN0iPwX.mjs.map +1 -0
- package/dist/{cache-CGCd6AVM.mjs → cache-DDwy3JDW.mjs} +2 -2
- package/dist/{cache-CGCd6AVM.mjs.map → cache-DDwy3JDW.mjs.map} +1 -1
- package/dist/{chunks-BxXyunY-.mjs → chunks-Bq-5DPrD.mjs} +2 -2
- package/dist/{chunks-BxXyunY-.mjs.map → chunks-Bq-5DPrD.mjs.map} +1 -1
- package/dist/cli/index.mjs +18 -18
- package/dist/{comment-DPT0WKyd.mjs → comment-B9cUud8H.mjs} +2 -2
- package/dist/{comment-DPT0WKyd.mjs.map → comment-B9cUud8H.mjs.map} +1 -1
- package/dist/{comment-reaction-C65MldIB.mjs → comment-reaction-VUXO981F.mjs} +2 -2
- package/dist/{comment-reaction-C65MldIB.mjs.map → comment-reaction-VUXO981F.mjs.map} +1 -1
- package/dist/{comments-Bz6sCbgD.mjs → comments-PXj1E9Si.mjs} +3 -3
- package/dist/{comments-Bz6sCbgD.mjs.map → comments-PXj1E9Si.mjs.map} +1 -1
- package/dist/{config-CVssduLe.mjs → config-B6b_BobR.mjs} +6 -2
- package/dist/config-B6b_BobR.mjs.map +1 -0
- package/dist/{content-Ci04z2z-.mjs → content-BC43pICM.mjs} +4 -4
- package/dist/{content-Ci04z2z-.mjs.map → content-BC43pICM.mjs.map} +1 -1
- package/dist/{content-refresh-D4khvC0R.mjs → content-refresh-CPMSauD3.mjs} +4 -4
- package/dist/{content-refresh-D4khvC0R.mjs.map → content-refresh-CPMSauD3.mjs.map} +1 -1
- package/dist/{context-B6hc7zJL.mjs → context-DOurRIrb.mjs} +10 -10
- package/dist/{context-B6hc7zJL.mjs.map → context-DOurRIrb.mjs.map} +1 -1
- package/dist/{dashboard-C5NkXFbi.mjs → dashboard-CBm4zhc3.mjs} +4 -4
- package/dist/{dashboard-C5NkXFbi.mjs.map → dashboard-CBm4zhc3.mjs.map} +1 -1
- package/dist/database/pg-migration-lock.d.mts.map +1 -1
- package/dist/database/pg-migration-lock.mjs +1 -4
- package/dist/database/pg-migration-lock.mjs.map +1 -1
- package/dist/db/index.mjs +2 -2
- package/dist/{dialect-helpers-HxEQGl_1.mjs → dialect-helpers-BtOwo2us.mjs} +4 -4
- package/dist/dialect-helpers-BtOwo2us.mjs.map +1 -0
- package/dist/{error-CEGF6UZb.mjs → error-DJ98TRbQ.mjs} +2 -2
- package/dist/{error-CEGF6UZb.mjs.map → error-DJ98TRbQ.mjs.map} +1 -1
- package/dist/{field-defs-cache-DvmlgP-D.mjs → field-defs-cache-KfNJ_qLQ.mjs} +2 -2
- package/dist/{field-defs-cache-DvmlgP-D.mjs.map → field-defs-cache-KfNJ_qLQ.mjs.map} +1 -1
- package/dist/{fts-manager-DzqIBrrW.mjs → fts-manager-hyCU9OOp.mjs} +3 -3
- package/dist/{fts-manager-DzqIBrrW.mjs.map → fts-manager-hyCU9OOp.mjs.map} +1 -1
- package/dist/{hreflang-db2Tpb2o.mjs → hreflang-CbYeCzl9.mjs} +7 -7
- package/dist/{hreflang-db2Tpb2o.mjs.map → hreflang-CbYeCzl9.mjs.map} +1 -1
- package/dist/{import-Dmkm8S1W.mjs → import-oDYCgNYQ.mjs} +2 -2
- package/dist/{import-Dmkm8S1W.mjs.map → import-oDYCgNYQ.mjs.map} +1 -1
- package/dist/{index-wYnC6u4o.d.mts → index-BcEH_FfS.d.mts} +33 -2
- package/dist/index-BcEH_FfS.d.mts.map +1 -0
- package/dist/index.d.mts +2 -2
- package/dist/index.mjs +48 -48
- package/dist/{load-Cx27ki1l.mjs → load-Dg5gtWma.mjs} +2 -2
- package/dist/{load-Cx27ki1l.mjs.map → load-Dg5gtWma.mjs.map} +1 -1
- package/dist/{loader-Be3ouI5L.mjs → loader-D4rigvjR.mjs} +4 -4
- package/dist/{loader-Be3ouI5L.mjs.map → loader-D4rigvjR.mjs.map} +1 -1
- package/dist/media/local-runtime.d.mts +2 -2
- package/dist/media/local-runtime.mjs +5 -5
- package/dist/{media-kIV1IxFf.mjs → media-BJ6SRY3g.mjs} +8 -4
- package/dist/media-BJ6SRY3g.mjs.map +1 -0
- package/dist/{media-BjhhENaJ.mjs → media-its1WLYv.mjs} +2 -2
- package/dist/{media-BjhhENaJ.mjs.map → media-its1WLYv.mjs.map} +1 -1
- package/dist/{media-upload-D2wk3EIt.mjs → media-upload-DNu3QySc.mjs} +4 -4
- package/dist/{media-upload-D2wk3EIt.mjs.map → media-upload-DNu3QySc.mjs.map} +1 -1
- package/dist/{media-usage-CljdO1mc.mjs → media-usage-DPQ3K4xB.mjs} +6 -6
- package/dist/{media-usage-CljdO1mc.mjs.map → media-usage-DPQ3K4xB.mjs.map} +1 -1
- package/dist/{menus-CZyG6rvx.mjs → menus-BMGzWyWH.mjs} +15 -8
- package/dist/menus-BMGzWyWH.mjs.map +1 -0
- package/dist/{menus-BcyElFtI.mjs → menus-CPf_SW7u.mjs} +86 -8
- package/dist/menus-CPf_SW7u.mjs.map +1 -0
- package/dist/{parse-C_-6klII.mjs → parse-53zyxlpv.mjs} +2 -2
- package/dist/{parse-C_-6klII.mjs.map → parse-53zyxlpv.mjs.map} +1 -1
- package/dist/plugin-utils.d.mts +2 -2
- package/dist/plugins/adapt-sandbox-entry.d.mts +2 -2
- package/dist/{query-DR73ZNfm.mjs → query-BbJQ-dGg.mjs} +14 -14
- package/dist/{query-DR73ZNfm.mjs.map → query-BbJQ-dGg.mjs.map} +1 -1
- package/dist/{query-Di7DOmPV.mjs → query-DdFGHzQF.mjs} +3 -3
- package/dist/{query-Di7DOmPV.mjs.map → query-DdFGHzQF.mjs.map} +1 -1
- package/dist/{rate-limit-CMj83JNW.mjs → rate-limit-D3IEiUi2.mjs} +2 -2
- package/dist/{rate-limit-CMj83JNW.mjs.map → rate-limit-D3IEiUi2.mjs.map} +1 -1
- package/dist/{redirect-CgLPYflR.mjs → redirect-BoUac4NT.mjs} +3 -3
- package/dist/{redirect-CgLPYflR.mjs.map → redirect-BoUac4NT.mjs.map} +1 -1
- package/dist/{redirects-B7t9bKsL.mjs → redirects-ChbpqKiS.mjs} +3 -3
- package/dist/{redirects-B7t9bKsL.mjs.map → redirects-ChbpqKiS.mjs.map} +1 -1
- package/dist/{redirects-BBq3n2Rj.mjs → redirects-D457qwt0.mjs} +8 -8
- package/dist/redirects-D457qwt0.mjs.map +1 -0
- package/dist/{registry-FV15nLge.mjs → registry-y21kjhfG.mjs} +6 -6
- package/dist/{registry-FV15nLge.mjs.map → registry-y21kjhfG.mjs.map} +1 -1
- package/dist/{relation-9M9j_UWo.mjs → relation-Du0r04E0.mjs} +3 -3
- package/dist/{relation-9M9j_UWo.mjs.map → relation-Du0r04E0.mjs.map} +1 -1
- package/dist/{relations-Bh8jlFsU.d.mts → relations-BKybBoOX.d.mts} +12 -8
- package/dist/relations-BKybBoOX.d.mts.map +1 -0
- package/dist/{relations-5_avdrN_.mjs → relations-CZMpBqEd.mjs} +3 -3
- package/dist/{relations-5_avdrN_.mjs.map → relations-CZMpBqEd.mjs.map} +1 -1
- package/dist/{relations-BKvO39-9.mjs → relations-DtX1UMBH.mjs} +13 -7
- package/dist/relations-DtX1UMBH.mjs.map +1 -0
- package/dist/{resolve-Cd9dzclN.mjs → resolve-DFr4kq72.mjs} +2 -2
- package/dist/{resolve-Cd9dzclN.mjs.map → resolve-DFr4kq72.mjs.map} +1 -1
- package/dist/{runner-DfnZ5eUr.mjs → runner-BdeLEgad.mjs} +3 -3
- package/dist/{runner-DfnZ5eUr.mjs.map → runner-BdeLEgad.mjs.map} +1 -1
- package/dist/runtime.d.mts +2 -2
- package/dist/runtime.mjs +3 -3
- package/dist/{schema-BXxlHeAf.mjs → schema-BH8P8vaC.mjs} +3 -3
- package/dist/{schema-BXxlHeAf.mjs.map → schema-BH8P8vaC.mjs.map} +1 -1
- package/dist/{scopes-Bl4IwHA-.mjs → scopes-DTIkIaGA.mjs} +2 -2
- package/dist/{scopes-Bl4IwHA-.mjs.map → scopes-DTIkIaGA.mjs.map} +1 -1
- package/dist/{search-Bff-7jFt.mjs → search-D-Yhpmvs.mjs} +8 -7
- package/dist/search-D-Yhpmvs.mjs.map +1 -0
- package/dist/{secrets-CSwQIl4q.mjs → secrets-CQ-69kF9.mjs} +23 -17
- package/dist/secrets-CQ-69kF9.mjs.map +1 -0
- package/dist/{sections-CwW4s1al.mjs → sections-CzVBAKjw.mjs} +3 -3
- package/dist/{sections-CwW4s1al.mjs.map → sections-CzVBAKjw.mjs.map} +1 -1
- package/dist/seed/index.mjs +16 -16
- package/dist/seo/index.mjs +12 -12
- package/dist/{seo-2cmFHZns.mjs → seo-kJzVAmmu.mjs} +2 -2
- package/dist/{seo-2cmFHZns.mjs.map → seo-kJzVAmmu.mjs.map} +1 -1
- package/dist/{service-DkGTWGIi.mjs → service-CQnc276a.mjs} +2 -2
- package/dist/{service-DkGTWGIi.mjs.map → service-CQnc276a.mjs.map} +1 -1
- package/dist/{settings-CpA4lQFt.mjs → settings-C2PaBS49.mjs} +3 -3
- package/dist/{settings-CpA4lQFt.mjs.map → settings-C2PaBS49.mjs.map} +1 -1
- package/dist/{settings-C4s8hFQm.mjs → settings-Dtc0DU31.mjs} +3 -3
- package/dist/{settings-C4s8hFQm.mjs.map → settings-Dtc0DU31.mjs.map} +1 -1
- package/dist/{taxonomies-DjSKBZpq.mjs → taxonomies-HI9fnTdp.mjs} +7 -7
- package/dist/{taxonomies-DjSKBZpq.mjs.map → taxonomies-HI9fnTdp.mjs.map} +1 -1
- package/dist/{taxonomies-Ce49uIzY.mjs → taxonomies-rMeBzOjX.mjs} +26 -17
- package/dist/taxonomies-rMeBzOjX.mjs.map +1 -0
- package/dist/{taxonomy-DfVooU4W.mjs → taxonomy-0mCI25HN.mjs} +3 -3
- package/dist/{taxonomy-DfVooU4W.mjs.map → taxonomy-0mCI25HN.mjs.map} +1 -1
- package/dist/{types-D1iJ3DpO.mjs → types-CrRUFdej.mjs} +2 -2
- package/dist/{types-D1iJ3DpO.mjs.map → types-CrRUFdej.mjs.map} +1 -1
- package/dist/{user-Bh-L1qo6.mjs → user-aTXqmXBz.mjs} +3 -3
- package/dist/{user-Bh-L1qo6.mjs.map → user-aTXqmXBz.mjs.map} +1 -1
- package/dist/{validate-V9nCwq_-.mjs → validate-CDT1jl6_.mjs} +11 -6
- package/dist/validate-CDT1jl6_.mjs.map +1 -0
- package/dist/validate-DULfgpJP.d.mts.map +1 -1
- package/dist/{validation-BsVUJfsP.mjs → validation-DlD0E35W.mjs} +8 -8
- package/dist/{validation-BsVUJfsP.mjs.map → validation-DlD0E35W.mjs.map} +1 -1
- package/dist/version-Ci6bw6YK.mjs +7 -0
- package/dist/{version-907opKac.mjs.map → version-Ci6bw6YK.mjs.map} +1 -1
- package/dist/{widgets-DGv1Z04V.mjs → widgets-5fipNkMT.mjs} +2 -2
- package/dist/{widgets-DGv1Z04V.mjs.map → widgets-5fipNkMT.mjs.map} +1 -1
- package/dist/{wxr-taxonomies-Cs1N6O8z.mjs → wxr-taxonomies-BmUnBNgz.mjs} +4 -4
- package/dist/{wxr-taxonomies-Cs1N6O8z.mjs.map → wxr-taxonomies-BmUnBNgz.mjs.map} +1 -1
- package/dist/{zod-generator-B5prQ5M4.mjs → zod-generator-CwkHWz4f.mjs} +2 -2
- package/dist/{zod-generator-B5prQ5M4.mjs.map → zod-generator-CwkHWz4f.mjs.map} +1 -1
- package/package.json +5 -5
- package/src/api/handlers/bylines.ts +5 -4
- package/src/api/handlers/content.ts +25 -7
- package/src/api/handlers/menus.ts +11 -6
- package/src/api/handlers/relations.ts +7 -2
- package/src/api/handlers/taxonomies.ts +22 -14
- package/src/api/schemas/bylines.ts +4 -4
- package/src/api/schemas/common.ts +7 -6
- package/src/api/schemas/menus.ts +2 -1
- package/src/api/schemas/relations.ts +3 -1
- package/src/api/schemas/taxonomies.ts +4 -2
- package/src/astro/routes/api/admin/bylines/index.ts +5 -8
- package/src/astro/routes/api/oauth/authorize.ts +42 -10
- package/src/components/Gallery.astro +141 -26
- package/src/config/secrets.ts +25 -19
- package/src/content/converters/gallery.ts +61 -0
- package/src/content/converters/portable-text-to-prosemirror.ts +19 -0
- package/src/content/converters/prosemirror-to-portable-text.ts +18 -0
- package/src/content/converters/types.ts +36 -0
- package/src/database/dialect-helpers.ts +3 -4
- package/src/database/pg-migration-lock.ts +1 -4
- package/src/emdash-runtime.ts +55 -17
- package/src/i18n/config.ts +8 -0
- package/src/i18n/repair-locale-casing.ts +51 -0
- package/src/search/query.ts +3 -2
- package/src/seed/apply.ts +9 -7
- package/src/seed/validate.ts +15 -4
- package/dist/api-b8WIiGU4.mjs.map +0 -1
- package/dist/apply-CmIJK9j8.mjs.map +0 -1
- package/dist/bylines-BJbT4gKS.mjs.map +0 -1
- package/dist/config-CVssduLe.mjs.map +0 -1
- package/dist/dialect-helpers-HxEQGl_1.mjs.map +0 -1
- package/dist/index-wYnC6u4o.d.mts.map +0 -1
- package/dist/media-kIV1IxFf.mjs.map +0 -1
- package/dist/menus-BcyElFtI.mjs.map +0 -1
- package/dist/menus-CZyG6rvx.mjs.map +0 -1
- package/dist/redirects-BBq3n2Rj.mjs.map +0 -1
- package/dist/relations-BKvO39-9.mjs.map +0 -1
- package/dist/relations-Bh8jlFsU.d.mts.map +0 -1
- package/dist/search-Bff-7jFt.mjs.map +0 -1
- package/dist/secrets-CSwQIl4q.mjs.map +0 -1
- package/dist/taxonomies-Ce49uIzY.mjs.map +0 -1
- package/dist/validate-V9nCwq_-.mjs.map +0 -1
- package/dist/version-907opKac.mjs +0 -7
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"apply-CmIJK9j8.mjs","names":[],"sources":["../src/seed/apply.ts"],"sourcesContent":["/**\n * Seed engine - applies seed files to database\n *\n * This is the core implementation that bootstraps an EmDash site from a seed file.\n * Apply order is critical for foreign keys and references.\n */\n\nimport { imageSize } from \"image-size\";\nimport type { Kysely } from \"kysely\";\nimport mime from \"mime/lite\";\nimport { ulid } from \"ulidx\";\n\nimport { BylineRepository } from \"../database/repositories/byline.js\";\nimport { ContentRepository } from \"../database/repositories/content.js\";\nimport { MediaRepository } from \"../database/repositories/media.js\";\nimport { RedirectRepository } from \"../database/repositories/redirect.js\";\nimport { RevisionRepository } from \"../database/repositories/revision.js\";\nimport { TaxonomyRepository } from \"../database/repositories/taxonomy.js\";\nimport { withTransaction } from \"../database/transaction.js\";\nimport type { Database } from \"../database/types.js\";\nimport type { MediaValue } from \"../fields/types.js\";\nimport { getI18nConfig } from \"../i18n/config.js\";\nimport { ssrfSafeFetch, validateExternalUrl } from \"../import/ssrf.js\";\nimport { markContentMediaUsageCollectionStaleSafely } from \"../media/usage/content-refresh.js\";\nimport { SchemaRegistry } from \"../schema/registry.js\";\nimport { FTSManager } from \"../search/fts-manager.js\";\nimport { setSiteSettings } from \"../settings/index.js\";\nimport type { Storage } from \"../storage/types.js\";\nimport type {\n\tSeedFile,\n\tSeedApplyOptions,\n\tSeedApplyResult,\n\tSeedTaxonomyTerm,\n\tSeedMenuItem,\n\tSeedWidget,\n\tSeedMediaReference,\n\tSeedBylineAvatar,\n} from \"./types.js\";\n\nconst FILE_EXTENSION_PATTERN = /\\.([a-z0-9]+)(?:\\?|$)/i;\nimport { validateSeed } from \"./validate.js\";\n\n/** Pattern to remove file extensions */\nconst EXTENSION_PATTERN = /\\.[^.]+$/;\n\n/** Pattern to remove query parameters */\nconst QUERY_PARAM_PATTERN = /\\?.*$/;\n\n/** Pattern to remove non-alphanumeric characters (except dash and underscore) */\nconst SANITIZE_PATTERN = /[^a-zA-Z0-9_-]/g;\n\n/** Pattern to collapse multiple hyphens */\nconst MULTIPLE_HYPHENS_PATTERN = /-+/g;\n\n/**\n * Apply a seed file to the database\n *\n * This function is idempotent - safe to run multiple times.\n *\n * @param db - Kysely database instance\n * @param seed - Seed file to apply\n * @param options - Application options\n * @returns Result summary\n */\nexport async function applySeed(\n\tdb: Kysely<Database>,\n\tseed: SeedFile,\n\toptions: SeedApplyOptions = {},\n): Promise<SeedApplyResult> {\n\t// Validate seed first\n\tconst validation = validateSeed(seed);\n\tif (!validation.valid) {\n\t\tthrow new Error(`Invalid seed file:\\n${validation.errors.join(\"\\n\")}`);\n\t}\n\n\tconst {\n\t\tincludeContent = false,\n\t\tstorage,\n\t\tskipMediaDownload = false,\n\t\tonConflict = \"skip\",\n\t} = options;\n\n\t// Result counters\n\tconst result: SeedApplyResult = {\n\t\tcollections: { created: 0, skipped: 0, updated: 0 },\n\t\tfields: { created: 0, skipped: 0, updated: 0 },\n\t\ttaxonomies: { created: 0, terms: 0 },\n\t\tbylines: { created: 0, skipped: 0, updated: 0 },\n\t\tmenus: { created: 0, items: 0 },\n\t\tredirects: { created: 0, skipped: 0, updated: 0 },\n\t\twidgetAreas: { created: 0, widgets: 0 },\n\t\tsections: { created: 0, skipped: 0, updated: 0 },\n\t\tsettings: { applied: 0 },\n\t\tcontent: { created: 0, skipped: 0, updated: 0 },\n\t\tmedia: { created: 0, skipped: 0 },\n\t};\n\n\t// Media context for $media resolution\n\tconst mediaContext: MediaContext = {\n\t\tdb,\n\t\tstorage: storage ?? null,\n\t\tskipMediaDownload,\n\t\tmediaCache: new Map(), // Cache downloaded media by URL to avoid re-downloading\n\t};\n\n\t// Apply order (critical for foreign keys and references):\n\t// 1. Site settings\n\t// 2. Collections + Fields\n\t// 3. Taxonomy definitions + Terms\n\t// 4. Content (so menu refs can resolve)\n\t// 5. Menus + Menu items (can now resolve content refs)\n\t// 6. Redirects\n\t// 7. Widget areas + Widgets\n\n\t// Track seed content IDs for reference resolution (shared across content and menus)\n\tconst seedIdMap = new Map<string, string>(); // seed id -> real entry id\n\tconst seedBylineIdMap = new Map<string, string>(); // seed byline id -> real byline id\n\tconst staleMarkedContentCollections = new Set<string>();\n\tconst failedStaleContentCollections = new Set<string>();\n\n\t// Fallback locale for rows that omit an explicit `locale`. Prefer the runtime\n\t// config (runtime-driven seeds), then the seed's self-described `defaultLocale`\n\t// (CLI exports run outside the runtime), and only then `en`. Without the\n\t// seed-carried default, a non-`en` single-locale project would be rewritten to\n\t// `en` on apply (#1421).\n\tconst defaultLocale = getI18nConfig()?.defaultLocale ?? seed.defaultLocale ?? \"en\";\n\tconst markSeedContentCollectionStale = async (collectionSlug: string): Promise<void> => {\n\t\tif (staleMarkedContentCollections.has(collectionSlug)) return;\n\t\tconst marked = await markContentMediaUsageCollectionStaleSafely(\n\t\t\tdb,\n\t\t\tcollectionSlug,\n\t\t\t\"CONTENT_USAGE_STALE\",\n\t\t);\n\t\tif (marked) {\n\t\t\tstaleMarkedContentCollections.add(collectionSlug);\n\t\t\tfailedStaleContentCollections.delete(collectionSlug);\n\t\t} else {\n\t\t\tfailedStaleContentCollections.add(collectionSlug);\n\t\t}\n\t};\n\tconst retryFailedSeedContentStaleMarks = async (): Promise<void> => {\n\t\tfor (const collectionSlug of failedStaleContentCollections) {\n\t\t\tconst marked = await markContentMediaUsageCollectionStaleSafely(\n\t\t\t\tdb,\n\t\t\t\tcollectionSlug,\n\t\t\t\t\"CONTENT_USAGE_STALE\",\n\t\t\t);\n\t\t\tif (marked) {\n\t\t\t\tstaleMarkedContentCollections.add(collectionSlug);\n\t\t\t\tfailedStaleContentCollections.delete(collectionSlug);\n\t\t\t}\n\t\t}\n\t};\n\n\t// 1. Site settings\n\tif (seed.settings) {\n\t\tawait setSiteSettings(seed.settings, db);\n\t\tresult.settings.applied = Object.keys(seed.settings).length;\n\t}\n\n\t// 2-3. Collections and Fields\n\tif (seed.collections) {\n\t\tconst registry = new SchemaRegistry(db);\n\n\t\tfor (const collection of seed.collections) {\n\t\t\t// Check if collection exists\n\t\t\tconst existing = await registry.getCollection(collection.slug);\n\n\t\t\tif (existing) {\n\t\t\t\tif (onConflict === \"error\") {\n\t\t\t\t\tthrow new Error(`Conflict: collection \"${collection.slug}\" already exists`);\n\t\t\t\t}\n\n\t\t\t\tif (onConflict === \"update\") {\n\t\t\t\t\tawait registry.updateCollection(collection.slug, {\n\t\t\t\t\t\tlabel: collection.label,\n\t\t\t\t\t\tlabelSingular: collection.labelSingular,\n\t\t\t\t\t\tdescription: collection.description,\n\t\t\t\t\t\ticon: collection.icon,\n\t\t\t\t\t\tsupports: collection.supports || [],\n\t\t\t\t\t\turlPattern: collection.urlPattern,\n\t\t\t\t\t\tcommentsEnabled: collection.commentsEnabled,\n\t\t\t\t\t});\n\t\t\t\t\tresult.collections.updated++;\n\n\t\t\t\t\t// Update or create fields\n\t\t\t\t\tfor (const field of collection.fields) {\n\t\t\t\t\t\tconst existingField = await registry.getField(collection.slug, field.slug);\n\t\t\t\t\t\tif (existingField) {\n\t\t\t\t\t\t\tawait registry.updateField(collection.slug, field.slug, {\n\t\t\t\t\t\t\t\tlabel: field.label,\n\t\t\t\t\t\t\t\ttype: field.type,\n\t\t\t\t\t\t\t\trequired: field.required || false,\n\t\t\t\t\t\t\t\tunique: field.unique || false,\n\t\t\t\t\t\t\t\tsearchable: field.searchable || false,\n\t\t\t\t\t\t\t\tdefaultValue: field.defaultValue,\n\t\t\t\t\t\t\t\tvalidation: field.validation,\n\t\t\t\t\t\t\t\twidget: field.widget,\n\t\t\t\t\t\t\t\toptions: field.options,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tresult.fields.updated++;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tawait registry.createField(collection.slug, {\n\t\t\t\t\t\t\t\tslug: field.slug,\n\t\t\t\t\t\t\t\tlabel: field.label,\n\t\t\t\t\t\t\t\ttype: field.type,\n\t\t\t\t\t\t\t\trequired: field.required || false,\n\t\t\t\t\t\t\t\tunique: field.unique || false,\n\t\t\t\t\t\t\t\tsearchable: field.searchable || false,\n\t\t\t\t\t\t\t\tdefaultValue: field.defaultValue,\n\t\t\t\t\t\t\t\tvalidation: field.validation,\n\t\t\t\t\t\t\t\twidget: field.widget,\n\t\t\t\t\t\t\t\toptions: field.options,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tresult.fields.created++;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// skip\n\t\t\t\tresult.collections.skipped++;\n\t\t\t\tresult.fields.skipped += collection.fields.length;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst fields = collection.fields.map((field) => ({\n\t\t\t\tslug: field.slug,\n\t\t\t\tlabel: field.label,\n\t\t\t\ttype: field.type,\n\t\t\t\trequired: field.required || false,\n\t\t\t\tunique: field.unique || false,\n\t\t\t\tsearchable: field.searchable || false,\n\t\t\t\tdefaultValue: field.defaultValue,\n\t\t\t\tvalidation: field.validation,\n\t\t\t\twidget: field.widget,\n\t\t\t\toptions: field.options,\n\t\t\t}));\n\n\t\t\t// Create a fresh seed schema in bulk to stay within D1's query budget.\n\t\t\tawait registry.createSeedCollection(\n\t\t\t\t{\n\t\t\t\t\tslug: collection.slug,\n\t\t\t\t\tlabel: collection.label,\n\t\t\t\t\tlabelSingular: collection.labelSingular,\n\t\t\t\t\tdescription: collection.description,\n\t\t\t\t\ticon: collection.icon,\n\t\t\t\t\tsupports: collection.supports || [],\n\t\t\t\t\turlPattern: collection.urlPattern,\n\t\t\t\t\tcommentsEnabled: collection.commentsEnabled,\n\t\t\t\t},\n\t\t\t\tfields,\n\t\t\t);\n\t\t\tresult.collections.created++;\n\t\t\tresult.fields.created += fields.length;\n\t\t}\n\t}\n\n\t// 4-5. Taxonomies\n\tif (seed.taxonomies) {\n\t\t// seed-local id -> resolved info, used to wire `translationOf` refs.\n\t\tconst defSeedIdMap = new Map<string, { id: string; translationGroup: string }>();\n\t\tconst termSeedIdMap = new Map<string, string>();\n\n\t\tfor (const taxonomy of seed.taxonomies) {\n\t\t\tconst defLocale = taxonomy.locale ?? defaultLocale;\n\n\t\t\t// (name, locale) is the UNIQUE key after migration 036.\n\t\t\tconst existingDef = await db\n\t\t\t\t.selectFrom(\"_emdash_taxonomy_defs\")\n\t\t\t\t.selectAll()\n\t\t\t\t.where(\"name\", \"=\", taxonomy.name)\n\t\t\t\t.where(\"locale\", \"=\", defLocale)\n\t\t\t\t.executeTakeFirst();\n\n\t\t\tlet defId: string;\n\t\t\tlet defTranslationGroup: string;\n\n\t\t\tif (existingDef) {\n\t\t\t\tdefId = existingDef.id;\n\t\t\t\tdefTranslationGroup = existingDef.translation_group ?? existingDef.id;\n\t\t\t\tif (onConflict === \"error\") {\n\t\t\t\t\tthrow new Error(`Conflict: taxonomy \"${taxonomy.name}\" (${defLocale}) already exists`);\n\t\t\t\t}\n\t\t\t\tif (onConflict === \"update\") {\n\t\t\t\t\tawait db\n\t\t\t\t\t\t.updateTable(\"_emdash_taxonomy_defs\")\n\t\t\t\t\t\t.set({\n\t\t\t\t\t\t\tlabel: taxonomy.label,\n\t\t\t\t\t\t\tlabel_singular: taxonomy.labelSingular ?? null,\n\t\t\t\t\t\t\thierarchical: taxonomy.hierarchical ? 1 : 0,\n\t\t\t\t\t\t\tcollections: JSON.stringify(taxonomy.collections),\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.where(\"id\", \"=\", existingDef.id)\n\t\t\t\t\t\t.execute();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdefId = ulid();\n\t\t\t\tdefTranslationGroup = defId;\n\t\t\t\tif (taxonomy.translationOf) {\n\t\t\t\t\tconst source = defSeedIdMap.get(taxonomy.translationOf);\n\t\t\t\t\tif (source) defTranslationGroup = source.translationGroup;\n\t\t\t\t\telse\n\t\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t\t`taxonomy \"${taxonomy.name}\" (${defLocale}): translationOf \"${taxonomy.translationOf}\" not found yet; minting a fresh group.`,\n\t\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tawait db\n\t\t\t\t\t.insertInto(\"_emdash_taxonomy_defs\")\n\t\t\t\t\t.values({\n\t\t\t\t\t\tid: defId,\n\t\t\t\t\t\tname: taxonomy.name,\n\t\t\t\t\t\tlabel: taxonomy.label,\n\t\t\t\t\t\tlabel_singular: taxonomy.labelSingular ?? null,\n\t\t\t\t\t\thierarchical: taxonomy.hierarchical ? 1 : 0,\n\t\t\t\t\t\tcollections: JSON.stringify(taxonomy.collections),\n\t\t\t\t\t\tlocale: defLocale,\n\t\t\t\t\t\ttranslation_group: defTranslationGroup,\n\t\t\t\t\t})\n\t\t\t\t\t.execute();\n\t\t\t\tresult.taxonomies.created++;\n\t\t\t}\n\n\t\t\tif (taxonomy.id)\n\t\t\t\tdefSeedIdMap.set(taxonomy.id, { id: defId, translationGroup: defTranslationGroup });\n\n\t\t\t// Create terms (if provided)\n\t\t\tif (includeContent && taxonomy.terms && taxonomy.terms.length > 0) {\n\t\t\t\tconst termRepo = new TaxonomyRepository(db);\n\n\t\t\t\tif (taxonomy.hierarchical) {\n\t\t\t\t\tawait applyHierarchicalTerms(\n\t\t\t\t\t\ttermRepo,\n\t\t\t\t\t\ttaxonomy.name,\n\t\t\t\t\t\tdefLocale,\n\t\t\t\t\t\ttaxonomy.terms,\n\t\t\t\t\t\ttermSeedIdMap,\n\t\t\t\t\t\tresult,\n\t\t\t\t\t\tonConflict,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tfor (const term of taxonomy.terms) {\n\t\t\t\t\t\tconst termLocale = term.locale ?? defLocale;\n\t\t\t\t\t\tconst existing = await termRepo.findBySlug(taxonomy.name, term.slug, termLocale);\n\t\t\t\t\t\tif (existing) {\n\t\t\t\t\t\t\tif (onConflict === \"error\") {\n\t\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t\t`Conflict: taxonomy term \"${term.slug}\" in \"${taxonomy.name}\" (${termLocale}) already exists`,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (onConflict === \"update\") {\n\t\t\t\t\t\t\t\tawait termRepo.update(existing.id, {\n\t\t\t\t\t\t\t\t\tlabel: term.label,\n\t\t\t\t\t\t\t\t\tdata: term.description ? { description: term.description } : {},\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tresult.taxonomies.terms++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (term.id) termSeedIdMap.set(term.id, existing.id);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst translationOf = term.translationOf\n\t\t\t\t\t\t\t\t? termSeedIdMap.get(term.translationOf)\n\t\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\t\tconst created = await termRepo.create({\n\t\t\t\t\t\t\t\tname: taxonomy.name,\n\t\t\t\t\t\t\t\tslug: term.slug,\n\t\t\t\t\t\t\t\tlabel: term.label,\n\t\t\t\t\t\t\t\tdata: term.description ? { description: term.description } : undefined,\n\t\t\t\t\t\t\t\tlocale: termLocale,\n\t\t\t\t\t\t\t\ttranslationOf,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tif (term.id) termSeedIdMap.set(term.id, created.id);\n\t\t\t\t\t\t\tresult.taxonomies.terms++;\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\n\t\t// Seeded/updated defs change which taxonomies exist — clear the\n\t\t// isolate-wide defs + names caches so later reads in this isolate\n\t\t// (e.g. an auto-seed triggered mid-request) reflect them immediately.\n\t\tconst { invalidateTaxonomyDefsCache } = await import(\"../taxonomies/index.js\");\n\t\tinvalidateTaxonomyDefsCache();\n\t}\n\n\t// 6. Bylines\n\tif (includeContent && seed.bylines) {\n\t\tconst bylineRepo = new BylineRepository(db);\n\t\tfor (const byline of seed.bylines) {\n\t\t\tconst existing = await bylineRepo.findBySlug(byline.slug);\n\t\t\tif (existing) {\n\t\t\t\tif (onConflict === \"error\") {\n\t\t\t\t\tthrow new Error(`Conflict: byline \"${byline.slug}\" already exists`);\n\t\t\t\t}\n\n\t\t\t\tif (onConflict === \"update\") {\n\t\t\t\t\t// Resolve the avatar (reusing an existing media row by storage\n\t\t\t\t\t// key, so re-running an update stays idempotent). Only relink\n\t\t\t\t\t// when the seed supplies an avatar; otherwise leave the existing\n\t\t\t\t\t// one untouched.\n\t\t\t\t\tconst avatar = byline.avatar ? await resolveSeedBylineAvatar(db, byline.avatar) : null;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst updated = await bylineRepo.update(existing.id, {\n\t\t\t\t\t\t\tdisplayName: byline.displayName,\n\t\t\t\t\t\t\tbio: byline.bio ?? null,\n\t\t\t\t\t\t\twebsiteUrl: byline.websiteUrl ?? null,\n\t\t\t\t\t\t\tisGuest: byline.isGuest,\n\t\t\t\t\t\t\t...(avatar ? { avatarMediaId: avatar.id } : {}),\n\t\t\t\t\t\t});\n\t\t\t\t\t\t// update() returns null (no throw) if the row vanished between\n\t\t\t\t\t\t// findBySlug and here; treat that as a failure so the catch\n\t\t\t\t\t\t// cleans up any freshly-created avatar media instead of leaking it.\n\t\t\t\t\t\tif (!updated) {\n\t\t\t\t\t\t\tthrow new Error(`Byline \"${byline.slug}\" disappeared during update`);\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t// withTransaction is a no-op on D1, so undo a freshly-created\n\t\t\t\t\t\t// media row by hand to avoid orphaning it.\n\t\t\t\t\t\tif (avatar?.created) await deleteMediaRow(db, avatar.id);\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\t\t\t\t\tseedBylineIdMap.set(byline.id, existing.id);\n\t\t\t\t\tresult.bylines.updated++;\n\t\t\t\t\tif (avatar?.created) result.media.created++;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// skip\n\t\t\t\tseedBylineIdMap.set(byline.id, existing.id);\n\t\t\t\tresult.bylines.skipped++;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst avatar = byline.avatar ? await resolveSeedBylineAvatar(db, byline.avatar) : null;\n\t\t\tlet createdId: string;\n\t\t\ttry {\n\t\t\t\tconst created = await bylineRepo.create({\n\t\t\t\t\tslug: byline.slug,\n\t\t\t\t\tdisplayName: byline.displayName,\n\t\t\t\t\tbio: byline.bio ?? null,\n\t\t\t\t\twebsiteUrl: byline.websiteUrl ?? null,\n\t\t\t\t\tisGuest: byline.isGuest,\n\t\t\t\t\tavatarMediaId: avatar?.id ?? null,\n\t\t\t\t});\n\t\t\t\tcreatedId = created.id;\n\t\t\t} catch (error) {\n\t\t\t\tif (avatar?.created) await deleteMediaRow(db, avatar.id);\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tseedBylineIdMap.set(byline.id, createdId);\n\t\t\tresult.bylines.created++;\n\t\t\tif (avatar?.created) result.media.created++;\n\t\t}\n\t}\n\n\t// 7. Content (created before menus so refs can resolve)\n\tif (includeContent && seed.content) {\n\t\tconst contentRepo = new ContentRepository(db);\n\n\t\ttry {\n\t\t\t// Create content entries\n\t\t\tfor (const [collectionSlug, entries] of Object.entries(seed.content)) {\n\t\t\t\tfor (const entry of entries) {\n\t\t\t\t\t// Resolve the entry's locale up front so a non-`en` single-locale\n\t\t\t\t\t// export (which omits `locale`) is filed under the project default\n\t\t\t\t\t// rather than `en` (#1421).\n\t\t\t\t\tconst entryLocale = entry.locale ?? defaultLocale;\n\n\t\t\t\t\t// Check if entry exists (by slug + locale for locale-aware lookup)\n\t\t\t\t\tconst existing = await contentRepo.findBySlug(collectionSlug, entry.slug, entryLocale);\n\n\t\t\t\t\tif (existing) {\n\t\t\t\t\t\tif (onConflict === \"error\") {\n\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t`Conflict: content \"${entry.slug}\" in \"${collectionSlug}\" already exists`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (onConflict === \"update\") {\n\t\t\t\t\t\t\t// Resolve $ref and $media in data\n\t\t\t\t\t\t\tconst resolvedData = await resolveReferences(\n\t\t\t\t\t\t\t\tentry.data,\n\t\t\t\t\t\t\t\tseedIdMap,\n\t\t\t\t\t\t\t\tmediaContext,\n\t\t\t\t\t\t\t\tresult,\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// Update content + bylines + taxonomies atomically\n\t\t\t\t\t\t\tconst status = entry.status || \"published\";\n\t\t\t\t\t\t\tlet contentMutated = false;\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tawait withTransaction(db, async (trx) => {\n\t\t\t\t\t\t\t\t\tconst trxContentRepo = new ContentRepository(trx);\n\t\t\t\t\t\t\t\t\tconst trxBylineRepo = new BylineRepository(trx);\n\t\t\t\t\t\t\t\t\tconst trxRevisionRepo = new RevisionRepository(trx);\n\n\t\t\t\t\t\t\t\t\tawait trxContentRepo.update(collectionSlug, existing.id, {\n\t\t\t\t\t\t\t\t\t\tstatus,\n\t\t\t\t\t\t\t\t\t\tdata: resolvedData,\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tcontentMutated = true;\n\n\t\t\t\t\t\t\t\t\tawait applyContentBylines(\n\t\t\t\t\t\t\t\t\t\ttrxBylineRepo,\n\t\t\t\t\t\t\t\t\t\tcollectionSlug,\n\t\t\t\t\t\t\t\t\t\texisting.id,\n\t\t\t\t\t\t\t\t\t\tentry,\n\t\t\t\t\t\t\t\t\t\tseedBylineIdMap,\n\t\t\t\t\t\t\t\t\t\ttrue,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\tawait applyContentTaxonomies(trx, collectionSlug, existing.id, entry, true);\n\n\t\t\t\t\t\t\t\t\t// Seed is declarative — when status is \"published\", promote to a live\n\t\t\t\t\t\t\t\t\t// revision so the admin UI shows \"Unpublish\" instead of \"Save & Publish\"\n\t\t\t\t\t\t\t\t\t// and `live_revision_id` is populated for downstream queries.\n\t\t\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\t\t\t// Create a fresh revision from the updated data and stage it as the\n\t\t\t\t\t\t\t\t\t// draft so `publish()` picks it up instead of re-syncing stale data\n\t\t\t\t\t\t\t\t\t// from an existing live revision.\n\t\t\t\t\t\t\t\t\tif (status === \"published\") {\n\t\t\t\t\t\t\t\t\t\tconst draft = await trxRevisionRepo.create({\n\t\t\t\t\t\t\t\t\t\t\tcollection: collectionSlug,\n\t\t\t\t\t\t\t\t\t\t\tentryId: existing.id,\n\t\t\t\t\t\t\t\t\t\t\tdata: resolvedData,\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\tawait trxContentRepo.setDraftRevision(collectionSlug, existing.id, draft.id);\n\t\t\t\t\t\t\t\t\t\tawait trxContentRepo.publish(collectionSlug, existing.id);\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} catch (error) {\n\t\t\t\t\t\t\t\tif (contentMutated) await markSeedContentCollectionStale(collectionSlug);\n\t\t\t\t\t\t\t\tthrow error;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tseedIdMap.set(entry.id, existing.id);\n\t\t\t\t\t\t\tresult.content.updated++;\n\t\t\t\t\t\t\tawait markSeedContentCollectionStale(collectionSlug);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// skip\n\t\t\t\t\t\tresult.content.skipped++;\n\t\t\t\t\t\tseedIdMap.set(entry.id, existing.id);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Resolve $ref and $media in data\n\t\t\t\t\tconst resolvedData = await resolveReferences(entry.data, seedIdMap, mediaContext, result);\n\n\t\t\t\t\t// Resolve translationOf: map from seed-local ID to real EmDash ID\n\t\t\t\t\tlet translationOf: string | undefined;\n\t\t\t\t\tif (entry.translationOf) {\n\t\t\t\t\t\tconst sourceId = seedIdMap.get(entry.translationOf);\n\t\t\t\t\t\tif (!sourceId) {\n\t\t\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t\t\t`content.${collectionSlug}: translationOf \"${entry.translationOf}\" not found (not yet created or missing). Skipping translation link.`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttranslationOf = sourceId;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Create entry + bylines + taxonomies atomically\n\t\t\t\t\tconst status = entry.status || \"published\";\n\t\t\t\t\tlet contentMutated = false;\n\t\t\t\t\tlet created: Awaited<ReturnType<ContentRepository[\"create\"]>>;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tcreated = await withTransaction(db, async (trx) => {\n\t\t\t\t\t\t\tconst trxContentRepo = new ContentRepository(trx);\n\t\t\t\t\t\t\tconst trxBylineRepo = new BylineRepository(trx);\n\n\t\t\t\t\t\t\tconst item = await trxContentRepo.create({\n\t\t\t\t\t\t\t\ttype: collectionSlug,\n\t\t\t\t\t\t\t\tslug: entry.slug,\n\t\t\t\t\t\t\t\tstatus,\n\t\t\t\t\t\t\t\tdata: resolvedData,\n\t\t\t\t\t\t\t\tlocale: entryLocale,\n\t\t\t\t\t\t\t\ttranslationOf,\n\t\t\t\t\t\t\t\tpublishedAt: status === \"published\" ? new Date().toISOString() : null,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tcontentMutated = true;\n\n\t\t\t\t\t\t\tawait applyContentBylines(\n\t\t\t\t\t\t\t\ttrxBylineRepo,\n\t\t\t\t\t\t\t\tcollectionSlug,\n\t\t\t\t\t\t\t\titem.id,\n\t\t\t\t\t\t\t\tentry,\n\t\t\t\t\t\t\t\tseedBylineIdMap,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tawait applyContentTaxonomies(trx, collectionSlug, item.id, entry, false);\n\n\t\t\t\t\t\t\t// Seed is declarative — when status is \"published\", promote to a live\n\t\t\t\t\t\t\t// revision so the admin UI shows \"Unpublish\" instead of \"Save & Publish\"\n\t\t\t\t\t\t\t// and `live_revision_id` is populated for downstream queries.\n\t\t\t\t\t\t\tif (status === \"published\") {\n\t\t\t\t\t\t\t\tawait trxContentRepo.publish(collectionSlug, item.id);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn item;\n\t\t\t\t\t\t});\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tif (contentMutated) await markSeedContentCollectionStale(collectionSlug);\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\n\t\t\t\t\tseedIdMap.set(entry.id, created.id);\n\t\t\t\t\tresult.content.created++;\n\t\t\t\t\tawait markSeedContentCollectionStale(collectionSlug);\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\tawait retryFailedSeedContentStaleMarks();\n\t\t}\n\t}\n\n\t// 8. Menus and Menu Items (after content so refs can resolve)\n\tif (seed.menus) {\n\t\t// seed-local id -> resolved info, used to wire `translationOf` refs.\n\t\tconst menuSeedIdMap = new Map<string, { id: string; translationGroup: string }>();\n\t\t// Shared across menus: translated items reference anchor items in sibling menus.\n\t\tconst itemSeedIdMap = new Map<string, { id: string; translationGroup: string }>();\n\n\t\tfor (const menu of seed.menus) {\n\t\t\tconst locale = menu.locale ?? defaultLocale;\n\t\t\tlet lookup = db\n\t\t\t\t.selectFrom(\"_emdash_menus\")\n\t\t\t\t.selectAll()\n\t\t\t\t.where(\"name\", \"=\", menu.name)\n\t\t\t\t.where(\"locale\", \"=\", locale);\n\t\t\tconst existingMenu = await lookup.executeTakeFirst();\n\n\t\t\tlet menuId: string;\n\t\t\tlet translationGroup: string;\n\n\t\t\tif (existingMenu) {\n\t\t\t\tmenuId = existingMenu.id;\n\t\t\t\ttranslationGroup = existingMenu.translation_group ?? existingMenu.id;\n\t\t\t\t// Clear existing items (menus are recreated)\n\t\t\t\tawait db.deleteFrom(\"_emdash_menu_items\").where(\"menu_id\", \"=\", menuId).execute();\n\t\t\t} else {\n\t\t\t\tmenuId = ulid();\n\t\t\t\t// Resolve translationOf to the source menu's translation_group.\n\t\t\t\ttranslationGroup = menuId;\n\t\t\t\tif (menu.translationOf) {\n\t\t\t\t\tconst source = menuSeedIdMap.get(menu.translationOf);\n\t\t\t\t\tif (source) translationGroup = source.translationGroup;\n\t\t\t\t\telse\n\t\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t\t`menu \"${menu.name}\" (${locale}): translationOf \"${menu.translationOf}\" not found yet; minting a fresh group.`,\n\t\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tawait db\n\t\t\t\t\t.insertInto(\"_emdash_menus\")\n\t\t\t\t\t.values({\n\t\t\t\t\t\tid: menuId,\n\t\t\t\t\t\tname: menu.name,\n\t\t\t\t\t\tlabel: menu.label,\n\t\t\t\t\t\tcreated_at: new Date().toISOString(),\n\t\t\t\t\t\tupdated_at: new Date().toISOString(),\n\t\t\t\t\t\tlocale,\n\t\t\t\t\t\ttranslation_group: translationGroup,\n\t\t\t\t\t})\n\t\t\t\t\t.execute();\n\t\t\t\tresult.menus.created++;\n\t\t\t}\n\n\t\t\tif (menu.id) menuSeedIdMap.set(menu.id, { id: menuId, translationGroup });\n\n\t\t\t// Create menu items\n\t\t\tconst itemCount = await applyMenuItems(\n\t\t\t\tdb,\n\t\t\t\tmenuId,\n\t\t\t\tlocale,\n\t\t\t\tmenu.items,\n\t\t\t\tnull, // parent_id\n\t\t\t\t0, // sort_order\n\t\t\t\tseedIdMap,\n\t\t\t\titemSeedIdMap,\n\t\t\t);\n\t\t\tresult.menus.items += itemCount;\n\t\t}\n\t}\n\n\t// 9. Redirects\n\tif (seed.redirects) {\n\t\tconst redirectRepo = new RedirectRepository(db);\n\n\t\tfor (const redirect of seed.redirects) {\n\t\t\tconst existing = await redirectRepo.findBySource(redirect.source);\n\t\t\tif (existing) {\n\t\t\t\tif (onConflict === \"error\") {\n\t\t\t\t\tthrow new Error(`Conflict: redirect \"${redirect.source}\" already exists`);\n\t\t\t\t}\n\n\t\t\t\tif (onConflict === \"update\") {\n\t\t\t\t\tawait redirectRepo.update(existing.id, {\n\t\t\t\t\t\tdestination: redirect.destination,\n\t\t\t\t\t\ttype: redirect.type,\n\t\t\t\t\t\tenabled: redirect.enabled,\n\t\t\t\t\t\tgroupName: redirect.groupName,\n\t\t\t\t\t});\n\t\t\t\t\tresult.redirects.updated++;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// skip\n\t\t\t\tresult.redirects.skipped++;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tawait redirectRepo.create({\n\t\t\t\tsource: redirect.source,\n\t\t\t\tdestination: redirect.destination,\n\t\t\t\ttype: redirect.type,\n\t\t\t\tenabled: redirect.enabled,\n\t\t\t\tgroupName: redirect.groupName,\n\t\t\t});\n\t\t\tresult.redirects.created++;\n\t\t}\n\t}\n\n\t// 10. Widget Areas and Widgets\n\tif (seed.widgetAreas) {\n\t\tfor (const area of seed.widgetAreas) {\n\t\t\t// Check if area exists\n\t\t\tconst existingArea = await db\n\t\t\t\t.selectFrom(\"_emdash_widget_areas\")\n\t\t\t\t.selectAll()\n\t\t\t\t.where(\"name\", \"=\", area.name)\n\t\t\t\t.executeTakeFirst();\n\n\t\t\tlet areaId: string;\n\n\t\t\tif (existingArea) {\n\t\t\t\tareaId = existingArea.id;\n\t\t\t\t// Clear existing widgets (areas are recreated)\n\t\t\t\tawait db.deleteFrom(\"_emdash_widgets\").where(\"area_id\", \"=\", areaId).execute();\n\t\t\t} else {\n\t\t\t\t// Create area\n\t\t\t\tareaId = ulid();\n\t\t\t\tawait db\n\t\t\t\t\t.insertInto(\"_emdash_widget_areas\")\n\t\t\t\t\t.values({\n\t\t\t\t\t\tid: areaId,\n\t\t\t\t\t\tname: area.name,\n\t\t\t\t\t\tlabel: area.label,\n\t\t\t\t\t\tdescription: area.description ?? null,\n\t\t\t\t\t})\n\t\t\t\t\t.execute();\n\t\t\t\tresult.widgetAreas.created++;\n\t\t\t}\n\n\t\t\t// Create widgets\n\t\t\tfor (let i = 0; i < area.widgets.length; i++) {\n\t\t\t\tconst widget = area.widgets[i];\n\t\t\t\tawait applyWidget(db, areaId, widget, i);\n\t\t\t\tresult.widgetAreas.widgets++;\n\t\t\t}\n\t\t}\n\t}\n\n\t// 11. Sections\n\tif (seed.sections) {\n\t\tfor (const section of seed.sections) {\n\t\t\t// Check if section exists\n\t\t\tconst existing = await db\n\t\t\t\t.selectFrom(\"_emdash_sections\")\n\t\t\t\t.select(\"id\")\n\t\t\t\t.where(\"slug\", \"=\", section.slug)\n\t\t\t\t.executeTakeFirst();\n\n\t\t\tif (existing) {\n\t\t\t\tif (onConflict === \"error\") {\n\t\t\t\t\tthrow new Error(`Conflict: section \"${section.slug}\" already exists`);\n\t\t\t\t}\n\n\t\t\t\tif (onConflict === \"update\") {\n\t\t\t\t\tawait db\n\t\t\t\t\t\t.updateTable(\"_emdash_sections\")\n\t\t\t\t\t\t.set({\n\t\t\t\t\t\t\ttitle: section.title,\n\t\t\t\t\t\t\tdescription: section.description ?? null,\n\t\t\t\t\t\t\tkeywords: section.keywords ? JSON.stringify(section.keywords) : null,\n\t\t\t\t\t\t\tcontent: JSON.stringify(section.content),\n\t\t\t\t\t\t\tsource: section.source || \"theme\",\n\t\t\t\t\t\t\tupdated_at: new Date().toISOString(),\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.where(\"id\", \"=\", existing.id)\n\t\t\t\t\t\t.execute();\n\t\t\t\t\tresult.sections.updated++;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// skip\n\t\t\t\tresult.sections.skipped++;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst id = ulid();\n\t\t\tconst now = new Date().toISOString();\n\n\t\t\tawait db\n\t\t\t\t.insertInto(\"_emdash_sections\")\n\t\t\t\t.values({\n\t\t\t\t\tid,\n\t\t\t\t\tslug: section.slug,\n\t\t\t\t\ttitle: section.title,\n\t\t\t\t\tdescription: section.description ?? null,\n\t\t\t\t\tkeywords: section.keywords ? JSON.stringify(section.keywords) : null,\n\t\t\t\t\tcontent: JSON.stringify(section.content),\n\t\t\t\t\tpreview_media_id: null,\n\t\t\t\t\tsource: section.source || \"theme\",\n\t\t\t\t\ttheme_id: section.source === \"theme\" ? section.slug : null,\n\t\t\t\t\tcreated_at: now,\n\t\t\t\t\tupdated_at: now,\n\t\t\t\t})\n\t\t\t\t.execute();\n\n\t\t\tresult.sections.created++;\n\t\t}\n\t}\n\n\t// 11. Enable search for collections that have `search` in supports\n\tif (seed.collections) {\n\t\tconst ftsManager = new FTSManager(db);\n\n\t\tfor (const collection of seed.collections) {\n\t\t\tif (collection.supports?.includes(\"search\")) {\n\t\t\t\t// Check if there are searchable fields\n\t\t\t\tconst searchableFields = await ftsManager.getSearchableFields(collection.slug);\n\t\t\t\tif (searchableFields.length > 0) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait ftsManager.enableSearch(collection.slug);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\t// Log but don't fail - search can be enabled manually later\n\t\t\t\t\t\tconsole.warn(`Failed to enable search for ${collection.slug}:`, err);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Invalidate caches that may have been affected by seed data.\n\t// Seed creates bylines, redirects, and collections, all of which\n\t// have module-level caches in the hot path.\n\tconst { invalidateBylineCache } = await import(\"../bylines/index.js\");\n\tconst { invalidateRedirectCache } = await import(\"../redirects/cache.js\");\n\tconst { invalidateUrlPatternCache } = await import(\"../query.js\");\n\tinvalidateBylineCache();\n\tinvalidateRedirectCache();\n\tinvalidateUrlPatternCache();\n\n\treturn result;\n}\n\n/**\n * Apply hierarchical taxonomy terms (parents before children)\n */\nasync function applyHierarchicalTerms(\n\ttermRepo: TaxonomyRepository,\n\ttaxonomyName: string,\n\tdefLocale: string,\n\tterms: SeedTaxonomyTerm[],\n\ttermSeedIdMap: Map<string, string>,\n\tresult: SeedApplyResult,\n\tonConflict: \"skip\" | \"update\" | \"error\" = \"skip\",\n): Promise<void> {\n\t// \"locale::slug\" -> id, so the same slug can resolve per locale.\n\tconst slugToId = new Map<string, string>();\n\n\t// Multiple passes — handles deep nesting and translationOf forward refs.\n\tlet remaining = [...terms];\n\tlet maxPasses = 10;\n\n\twhile (remaining.length > 0 && maxPasses > 0) {\n\t\tconst processedThisPass: string[] = [];\n\n\t\tfor (const term of remaining) {\n\t\t\tconst termLocale = term.locale ?? defLocale;\n\t\t\tconst parentReady = !term.parent || slugToId.has(`${termLocale}::${term.parent}`);\n\t\t\tconst translationReady = !term.translationOf || termSeedIdMap.has(term.translationOf);\n\n\t\t\tif (!parentReady || !translationReady) continue;\n\n\t\t\tconst parentId = term.parent ? slugToId.get(`${termLocale}::${term.parent}`) : undefined;\n\t\t\tconst translationOf = term.translationOf ? termSeedIdMap.get(term.translationOf) : undefined;\n\n\t\t\tconst existing = await termRepo.findBySlug(taxonomyName, term.slug, termLocale);\n\t\t\tif (existing) {\n\t\t\t\tif (onConflict === \"error\") {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t`Conflict: taxonomy term \"${term.slug}\" in \"${taxonomyName}\" (${termLocale}) already exists`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (onConflict === \"update\") {\n\t\t\t\t\tawait termRepo.update(existing.id, {\n\t\t\t\t\t\tlabel: term.label,\n\t\t\t\t\t\tparentId,\n\t\t\t\t\t\tdata: term.description ? { description: term.description } : {},\n\t\t\t\t\t});\n\t\t\t\t\tresult.taxonomies.terms++;\n\t\t\t\t}\n\t\t\t\tslugToId.set(`${termLocale}::${term.slug}`, existing.id);\n\t\t\t\tif (term.id) termSeedIdMap.set(term.id, existing.id);\n\t\t\t} else {\n\t\t\t\tconst created = await termRepo.create({\n\t\t\t\t\tname: taxonomyName,\n\t\t\t\t\tslug: term.slug,\n\t\t\t\t\tlabel: term.label,\n\t\t\t\t\tparentId,\n\t\t\t\t\tdata: term.description ? { description: term.description } : undefined,\n\t\t\t\t\tlocale: termLocale,\n\t\t\t\t\ttranslationOf,\n\t\t\t\t});\n\t\t\t\tslugToId.set(`${termLocale}::${term.slug}`, created.id);\n\t\t\t\tif (term.id) termSeedIdMap.set(term.id, created.id);\n\t\t\t\tresult.taxonomies.terms++;\n\t\t\t}\n\n\t\t\tprocessedThisPass.push(term.slug + \"::\" + termLocale);\n\t\t}\n\n\t\tremaining = remaining.filter(\n\t\t\t(t) => !processedThisPass.includes(t.slug + \"::\" + (t.locale ?? defLocale)),\n\t\t);\n\t\tmaxPasses--;\n\t}\n\n\tif (remaining.length > 0) {\n\t\tconsole.warn(`Could not process ${remaining.length} terms due to missing parents/translations`);\n\t}\n}\n\n/**\n * Apply byline credits to a content entry.\n * In update mode, clears existing credits even if the seed has none.\n */\nasync function applyContentBylines(\n\tbylineRepo: BylineRepository,\n\tcollectionSlug: string,\n\tcontentId: string,\n\tentry: { slug: string; bylines?: Array<{ byline: string; roleLabel?: string }> },\n\tseedBylineIdMap: Map<string, string>,\n\tisUpdate = false,\n): Promise<void> {\n\tif (!entry.bylines || entry.bylines.length === 0) {\n\t\t// In update mode, clear existing bylines when the seed entry has none\n\t\tif (isUpdate) {\n\t\t\tawait bylineRepo.setContentBylines(collectionSlug, contentId, []);\n\t\t}\n\t\treturn;\n\t}\n\n\tconst credits = entry.bylines\n\t\t.map((credit) => {\n\t\t\tconst bylineId = seedBylineIdMap.get(credit.byline);\n\t\t\tif (!bylineId) return null;\n\t\t\treturn {\n\t\t\t\tbylineId,\n\t\t\t\troleLabel: credit.roleLabel ?? null,\n\t\t\t};\n\t\t})\n\t\t.filter((credit): credit is { bylineId: string; roleLabel: string | null } => Boolean(credit));\n\n\tif (credits.length !== entry.bylines.length) {\n\t\tconsole.warn(\n\t\t\t`content.${collectionSlug}.${entry.slug}: one or more byline refs could not be resolved`,\n\t\t);\n\t}\n\n\t// In update mode, always call setContentBylines (even with empty credits)\n\t// to clear stale assignments when all byline refs fail to resolve.\n\t// In create mode, only call if there are credits to assign.\n\tif (credits.length > 0 || isUpdate) {\n\t\tawait bylineRepo.setContentBylines(collectionSlug, contentId, credits);\n\t}\n}\n\n/**\n * Apply taxonomy term assignments to a content entry.\n * In update mode, clears existing assignments before re-attaching.\n */\nasync function applyContentTaxonomies(\n\tdb: Kysely<Database>,\n\tcollectionSlug: string,\n\tcontentId: string,\n\tentry: { taxonomies?: Record<string, string[]> },\n\tisUpdate: boolean,\n): Promise<void> {\n\t// In update mode, clear existing taxonomy assignments first\n\tif (isUpdate) {\n\t\tawait db\n\t\t\t.deleteFrom(\"content_taxonomies\")\n\t\t\t.where(\"collection\", \"=\", collectionSlug)\n\t\t\t.where(\"entry_id\", \"=\", contentId)\n\t\t\t.execute();\n\t}\n\n\tif (!entry.taxonomies) {\n\t\t// In update mode we may have just deleted rows above; invalidate so\n\t\t// hydration doesn't serve stale \"has terms\" cached value.\n\t\tif (isUpdate) {\n\t\t\tconst { invalidateTermCache } = await import(\"../taxonomies/index.js\");\n\t\t\tinvalidateTermCache();\n\t\t}\n\t\treturn;\n\t}\n\n\tfor (const [taxonomyName, termSlugs] of Object.entries(entry.taxonomies)) {\n\t\tconst termRepo = new TaxonomyRepository(db);\n\n\t\tfor (const termSlug of termSlugs) {\n\t\t\tconst term = await termRepo.findBySlug(taxonomyName, termSlug);\n\t\t\tif (term) {\n\t\t\t\tawait termRepo.attachToEntry(collectionSlug, contentId, term.id);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Seed writes directly to content_taxonomies. Clear the cache so\n\t// the worker lifetime cached \"has any term assignments\" probe\n\t// re-runs on the next read.\n\tconst { invalidateTermCache } = await import(\"../taxonomies/index.js\");\n\tinvalidateTermCache();\n}\n\n/**\n * Apply menu items recursively.\n *\n * When a `SeedMenuItem` carries `id`/`translationOf`, the import resolves the\n * source item's `translation_group` so cross-locale \"same nav entry\" links\n * survive export → apply. Items without `translationOf` get a fresh group\n * (= their own id).\n */\nasync function applyMenuItems(\n\tdb: Kysely<Database>,\n\tmenuId: string,\n\tlocale: string,\n\titems: SeedMenuItem[],\n\tparentId: string | null,\n\tstartOrder: number,\n\tseedIdMap: Map<string, string>,\n\titemSeedIdMap: Map<string, { id: string; translationGroup: string }>,\n): Promise<number> {\n\tlet count = 0;\n\tlet order = startOrder;\n\n\tfor (const item of items) {\n\t\tconst itemId = ulid();\n\t\tconst itemLocale = item.locale ?? locale;\n\n\t\t// Resolve reference if needed\n\t\tlet referenceId: string | null = null;\n\t\tlet referenceCollection: string | null = null;\n\n\t\tif (item.type === \"page\" || item.type === \"post\") {\n\t\t\t// Try to resolve from seedIdMap\n\t\t\tif (item.ref && seedIdMap.has(item.ref)) {\n\t\t\t\treferenceId = seedIdMap.get(item.ref)!;\n\t\t\t\t// Default to plural collection name (pages/posts) if not specified\n\t\t\t\treferenceCollection = item.collection || `${item.type}s`;\n\t\t\t}\n\t\t\t// If not in map, the content might not exist yet (will be broken link)\n\t\t}\n\n\t\tlet translationGroup = itemId;\n\t\tif (item.translationOf) {\n\t\t\tconst source = itemSeedIdMap.get(item.translationOf);\n\t\t\tif (source) translationGroup = source.translationGroup;\n\t\t\telse\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`menu item \"${item.label ?? item.url ?? item.ref ?? \"(unlabeled)\"}\" (${itemLocale}): translationOf \"${item.translationOf}\" not found yet; minting a fresh group.`,\n\t\t\t\t);\n\t\t}\n\n\t\tawait db\n\t\t\t.insertInto(\"_emdash_menu_items\")\n\t\t\t.values({\n\t\t\t\tid: itemId,\n\t\t\t\tmenu_id: menuId,\n\t\t\t\tparent_id: parentId,\n\t\t\t\tsort_order: order,\n\t\t\t\ttype: item.type,\n\t\t\t\treference_collection: referenceCollection,\n\t\t\t\treference_id: referenceId,\n\t\t\t\tcustom_url: item.url ?? null,\n\t\t\t\tlabel: item.label || \"\",\n\t\t\t\ttitle_attr: item.titleAttr ?? null,\n\t\t\t\ttarget: item.target ?? null,\n\t\t\t\tcss_classes: item.cssClasses ?? null,\n\t\t\t\tcreated_at: new Date().toISOString(),\n\t\t\t\tlocale: itemLocale,\n\t\t\t\ttranslation_group: translationGroup,\n\t\t\t})\n\t\t\t.execute();\n\n\t\tif (item.id) itemSeedIdMap.set(item.id, { id: itemId, translationGroup });\n\n\t\tcount++;\n\t\torder++;\n\n\t\tif (item.children && item.children.length > 0) {\n\t\t\tconst childCount = await applyMenuItems(\n\t\t\t\tdb,\n\t\t\t\tmenuId,\n\t\t\t\titemLocale,\n\t\t\t\titem.children,\n\t\t\t\titemId,\n\t\t\t\t0,\n\t\t\t\tseedIdMap,\n\t\t\t\titemSeedIdMap,\n\t\t\t);\n\t\t\tcount += childCount;\n\t\t}\n\t}\n\n\treturn count;\n}\n\n/**\n * Apply a widget\n */\nasync function applyWidget(\n\tdb: Kysely<Database>,\n\tareaId: string,\n\twidget: SeedWidget,\n\tsortOrder: number,\n): Promise<void> {\n\tawait db\n\t\t.insertInto(\"_emdash_widgets\")\n\t\t.values({\n\t\t\tid: ulid(),\n\t\t\tarea_id: areaId,\n\t\t\tsort_order: sortOrder,\n\t\t\ttype: widget.type,\n\t\t\ttitle: widget.title ?? null,\n\t\t\t// `widget.content` is Portable Text for content-type widgets;\n\t\t\t// for other widget kinds it's null.\n\t\t\tcontent: widget.content ? JSON.stringify(widget.content) : null,\n\t\t\tmenu_name: widget.menuName ?? null,\n\t\t\tcomponent_id: widget.componentId ?? null,\n\t\t\tcomponent_props: widget.props ? JSON.stringify(widget.props) : null,\n\t\t})\n\t\t.execute();\n}\n\n/**\n * Context for media resolution during seed application\n */\ninterface MediaContext {\n\tdb: Kysely<Database>;\n\tstorage: Storage | null;\n\tskipMediaDownload: boolean;\n\tmediaCache: Map<string, MediaValue>; // URL -> resolved MediaValue\n}\n\n/**\n * Type guard for $media reference\n */\nfunction isSeedMediaReference(value: unknown): value is SeedMediaReference {\n\tif (typeof value !== \"object\" || value === null || !(\"$media\" in value)) {\n\t\treturn false;\n\t}\n\tconst media = (value as Record<string, unknown>).$media;\n\treturn (\n\t\ttypeof media === \"object\" &&\n\t\tmedia !== null &&\n\t\t\"url\" in media &&\n\t\ttypeof (media as Record<string, unknown>).url === \"string\"\n\t);\n}\n\n/**\n * Resolve $ref: and $media references in content data\n */\nasync function resolveReferences(\n\tdata: Record<string, unknown>,\n\tseedIdMap: Map<string, string>,\n\tmediaContext: MediaContext,\n\tresult: SeedApplyResult,\n): Promise<Record<string, unknown>> {\n\tconst resolved: Record<string, unknown> = {};\n\n\tfor (const [key, value] of Object.entries(data)) {\n\t\tresolved[key] = await resolveValue(value, seedIdMap, mediaContext, result);\n\t}\n\n\treturn resolved;\n}\n\n/**\n * Resolve a single value recursively\n */\nasync function resolveValue(\n\tvalue: unknown,\n\tseedIdMap: Map<string, string>,\n\tmediaContext: MediaContext,\n\tresult: SeedApplyResult,\n): Promise<unknown> {\n\t// Handle $ref: syntax\n\tif (typeof value === \"string\" && value.startsWith(\"$ref:\")) {\n\t\tconst seedId = value.slice(5);\n\t\treturn seedIdMap.get(seedId) ?? value; // Return unresolved if not found\n\t}\n\n\t// Handle $media syntax\n\tif (isSeedMediaReference(value)) {\n\t\treturn resolveMedia(value, mediaContext, result);\n\t}\n\n\t// Handle arrays\n\tif (Array.isArray(value)) {\n\t\treturn Promise.all(value.map((item) => resolveValue(item, seedIdMap, mediaContext, result)));\n\t}\n\n\t// Handle objects recursively\n\tif (typeof value === \"object\" && value !== null) {\n\t\tconst resolved: Record<string, unknown> = {};\n\t\tfor (const [k, v] of Object.entries(value)) {\n\t\t\tresolved[k] = await resolveValue(v, seedIdMap, mediaContext, result);\n\t\t}\n\t\treturn resolved;\n\t}\n\n\treturn value;\n}\n\n/**\n * Resolve a seeded byline avatar to a `media` row id. The file is assumed to\n * already exist in storage (the caller supplies its `storageKey`), so nothing\n * is downloaded or uploaded.\n *\n * Idempotent: if a media row with the same `storageKey` already exists it is\n * reused rather than duplicated, so re-applying a seed in `update` mode does\n * not leak rows. `created` reports whether a new row was inserted, so the\n * caller can both account for it and delete it if the subsequent byline write\n * fails (the only cross-dialect way to avoid an orphan — `withTransaction`\n * is a no-op on D1).\n */\nasync function resolveSeedBylineAvatar(\n\tdb: Kysely<Database>,\n\tavatar: SeedBylineAvatar,\n): Promise<{ id: string; created: boolean }> {\n\t// `media.storage_key` has no unique constraint, so order deterministically\n\t// to reuse the same row across runs if duplicates already exist. (Concurrent\n\t// seed applies against one DB are out of scope; seeding is a single-shot\n\t// init operation.)\n\tconst existing = await db\n\t\t.selectFrom(\"media\")\n\t\t.select(\"id\")\n\t\t.where(\"storage_key\", \"=\", avatar.storageKey)\n\t\t.orderBy(\"id\", \"asc\")\n\t\t.executeTakeFirst();\n\tif (existing) return { id: existing.id, created: false };\n\n\tconst basename = avatar.storageKey.split(\"/\").pop();\n\tconst filename =\n\t\tavatar.filename ?? (basename && basename.length > 0 ? basename : avatar.storageKey);\n\tconst created = await new MediaRepository(db).create({\n\t\tfilename,\n\t\tmimeType: avatar.mimeType ?? \"image/jpeg\",\n\t\tstorageKey: avatar.storageKey,\n\t\talt: avatar.alt,\n\t\twidth: avatar.width,\n\t\theight: avatar.height,\n\t\tstatus: \"ready\",\n\t});\n\treturn { id: created.id, created: true };\n}\n\n/**\n * Delete a media row by id. Best-effort cleanup for a failed byline write: a\n * failure here must not mask the original error that triggered the cleanup, so\n * it is logged and swallowed rather than thrown.\n */\nasync function deleteMediaRow(db: Kysely<Database>, id: string): Promise<void> {\n\ttry {\n\t\tawait db.deleteFrom(\"media\").where(\"id\", \"=\", id).execute();\n\t} catch (error) {\n\t\tconsole.warn(`[seed] failed to clean up orphaned avatar media ${id}:`, error);\n\t}\n}\n\n/**\n * Resolve a $media reference by downloading and uploading the media\n */\nasync function resolveMedia(\n\tref: SeedMediaReference,\n\tctx: MediaContext,\n\tresult: SeedApplyResult,\n): Promise<MediaValue | null> {\n\tconst { url, alt, filename, caption } = ref.$media;\n\n\t// Check cache first\n\tconst cached = ctx.mediaCache.get(url);\n\tif (cached) {\n\t\tresult.media.skipped++;\n\t\treturn { ...cached, alt: alt ?? cached.alt };\n\t}\n\n\t// When skipMediaDownload is set, resolve $media to an external URL reference\n\t// without downloading or storing anything. Used by playground mode.\n\tif (ctx.skipMediaDownload) {\n\t\tconst mediaValue: MediaValue = {\n\t\t\tprovider: \"external\",\n\t\t\tid: ulid(),\n\t\t\tsrc: url,\n\t\t\talt: alt ?? undefined,\n\t\t\tfilename: filename ?? undefined,\n\t\t};\n\t\tctx.mediaCache.set(url, mediaValue);\n\t\tresult.media.created++;\n\t\treturn mediaValue;\n\t}\n\n\t// Storage is required for $media resolution\n\tif (!ctx.storage) {\n\t\tconsole.warn(`Skipping $media reference (no storage configured): ${url}`);\n\t\tresult.media.skipped++;\n\t\treturn null;\n\t}\n\n\ttry {\n\t\t// SSRF protection: validate URL before downloading\n\t\tvalidateExternalUrl(url);\n\n\t\t// Download the media (ssrfSafeFetch re-validates redirect targets)\n\t\tconsole.log(` 📥 Downloading: ${url}`);\n\t\tconst response = await ssrfSafeFetch(url, {\n\t\t\theaders: {\n\t\t\t\t// Some services like Unsplash require a user-agent\n\t\t\t\t\"User-Agent\": \"EmDash-CMS/1.0\",\n\t\t\t},\n\t\t});\n\n\t\tif (!response.ok) {\n\t\t\tconsole.warn(` ⚠️ Failed to download ${url}: ${response.status}`);\n\t\t\tresult.media.skipped++;\n\t\t\treturn null;\n\t\t}\n\n\t\t// Get content type and determine extension\n\t\tconst contentType = response.headers.get(\"content-type\") || \"application/octet-stream\";\n\t\tconst ext = getExtensionFromContentType(contentType) || getExtensionFromUrl(url) || \".bin\";\n\n\t\t// Generate filename and storage key\n\t\tconst id = ulid();\n\t\tconst finalFilename = filename || generateFilename(url, ext);\n\t\tconst storageKey = `${id}${ext}`;\n\n\t\t// Get the body as buffer\n\t\tconst arrayBuffer = await response.arrayBuffer();\n\t\tconst body = new Uint8Array(arrayBuffer);\n\n\t\t// Get image dimensions if it's an image\n\t\tlet width: number | undefined;\n\t\tlet height: number | undefined;\n\t\tif (contentType.startsWith(\"image/\")) {\n\t\t\tconst dimensions = getImageDimensions(body);\n\t\t\twidth = dimensions?.width;\n\t\t\theight = dimensions?.height;\n\t\t}\n\n\t\t// Upload to storage\n\t\tawait ctx.storage.upload({\n\t\t\tkey: storageKey,\n\t\t\tbody,\n\t\t\tcontentType,\n\t\t});\n\n\t\t// Create media record\n\t\tconst mediaRepo = new MediaRepository(ctx.db);\n\t\tawait mediaRepo.create({\n\t\t\tfilename: finalFilename,\n\t\t\tmimeType: contentType,\n\t\t\tsize: body.length,\n\t\t\twidth,\n\t\t\theight,\n\t\t\talt,\n\t\t\tcaption,\n\t\t\tstorageKey,\n\t\t\tstatus: \"ready\",\n\t\t});\n\n\t\t// Create the MediaValue - only store id, URL is built at runtime by EmDashMedia\n\t\tconst mediaValue: MediaValue = {\n\t\t\tprovider: \"local\",\n\t\t\tid,\n\t\t\talt: alt ?? undefined,\n\t\t\twidth,\n\t\t\theight,\n\t\t\tmimeType: contentType,\n\t\t\tfilename: finalFilename,\n\t\t\tmeta: { storageKey },\n\t\t};\n\n\t\t// Cache for reuse\n\t\tctx.mediaCache.set(url, mediaValue);\n\t\tresult.media.created++;\n\n\t\tconsole.log(` ✅ Uploaded: ${finalFilename}`);\n\t\treturn mediaValue;\n\t} catch (error) {\n\t\tconsole.warn(\n\t\t\t` ⚠️ Error processing $media ${url}:`,\n\t\t\terror instanceof Error ? error.message : error,\n\t\t);\n\t\tresult.media.skipped++;\n\t\treturn null;\n\t}\n}\n\n/**\n * Get file extension from content type\n */\nfunction getExtensionFromContentType(contentType: string): string | null {\n\t// Handle content-type with parameters like \"image/jpeg; charset=utf-8\"\n\tconst baseMime = contentType.split(\";\")[0].trim();\n\tconst ext = mime.getExtension(baseMime);\n\treturn ext ? `.${ext}` : null;\n}\n\n/**\n * Get file extension from URL\n */\nfunction getExtensionFromUrl(url: string): string | null {\n\ttry {\n\t\tconst pathname = new URL(url).pathname;\n\t\tconst match = pathname.match(FILE_EXTENSION_PATTERN);\n\t\treturn match ? `.${match[1]}` : null;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\n/**\n * Generate a filename from URL\n */\nfunction generateFilename(url: string, ext: string): string {\n\ttry {\n\t\tconst pathname = new URL(url).pathname;\n\t\tconst basename = pathname.split(\"/\").pop() || \"media\";\n\t\t// Remove any existing extension and query params\n\t\tconst name = basename.replace(EXTENSION_PATTERN, \"\").replace(QUERY_PARAM_PATTERN, \"\");\n\t\t// Sanitize: only alphanumeric, dash, underscore\n\t\tconst sanitized = name.replace(SANITIZE_PATTERN, \"-\").replace(MULTIPLE_HYPHENS_PATTERN, \"-\");\n\t\treturn `${sanitized || \"media\"}${ext}`;\n\t} catch {\n\t\treturn `media${ext}`;\n\t}\n}\n\n/**\n * Get image dimensions from buffer using image-size.\n * Supports PNG, JPEG, GIF, WebP, AVIF, SVG, TIFF, and more.\n */\nfunction getImageDimensions(buffer: Uint8Array): { width: number; height: number } | null {\n\ttry {\n\t\tconst result = imageSize(buffer);\n\t\tif (result.width != null && result.height != null) {\n\t\t\treturn { width: result.width, height: result.height };\n\t\t}\n\t\treturn null;\n\t} catch {\n\t\treturn null;\n\t}\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bylines-BJbT4gKS.mjs","names":[],"sources":["../src/api/handlers/bylines.ts"],"sourcesContent":["import type { Kysely } from \"kysely\";\n\nimport {\n\tBylineRepository,\n\ttype CreateBylineInput,\n\ttype UpdateBylineInput,\n} from \"../../database/repositories/byline.js\";\nimport { EmDashValidationError, type BylineSummary } from \"../../database/repositories/types.js\";\nimport type { Database } from \"../../database/types.js\";\nimport { getI18nConfig } from \"../../i18n/config.js\";\nimport type { ApiResult } from \"../types.js\";\n\n// `undefined → null` so a missing field in the create payload matches the\n// repo's stored `null` (BylineRepository normalises with `?? null` on write).\nconst norm = (v: string | null | undefined): string | null => v ?? null;\n\n/**\n * Whether the existing byline row's fixed columns match a fresh-create\n * payload after null/undefined normalisation. Used by the D1 create-retry\n * recovery branch.\n */\nfunction bylineFixedFieldsMatch(\n\texisting: BylineSummary,\n\tinput: CreateBylineInput,\n\teffectiveLocale: string,\n): boolean {\n\treturn (\n\t\texisting.displayName === input.displayName &&\n\t\tnorm(existing.bio) === norm(input.bio) &&\n\t\tnorm(existing.avatarMediaId) === norm(input.avatarMediaId) &&\n\t\tnorm(existing.websiteUrl) === norm(input.websiteUrl) &&\n\t\tnorm(existing.userId) === norm(input.userId) &&\n\t\texisting.isGuest === (input.isGuest ?? false) &&\n\t\texisting.locale === effectiveLocale\n\t);\n}\n\n/**\n * Whether every key in `existing` appears in `input` with the same value.\n * Allows `input` to contain additional keys (the partial-write recovery\n * case); rejects on a divergent value or a key the input omits.\n */\nfunction existingCustomFieldsAreSubsetOf(\n\texisting: Record<string, unknown>,\n\tinput: Record<string, unknown> | undefined,\n): boolean {\n\tif (!input) return Object.keys(existing).length === 0;\n\tfor (const [slug, value] of Object.entries(existing)) {\n\t\tif (!Object.hasOwn(input, slug)) return false;\n\t\tif (input[slug] !== value) return false;\n\t}\n\treturn true;\n}\n\n/**\n * Reject locales the site doesn't configure. Returns `null` when the locale\n * is fine (omitted, or matches `locales` in the i18n config, or i18n isn't\n * configured at all).\n */\nfunction rejectUnknownLocale(locale: string | undefined): ApiResult<never> | null {\n\tif (!locale) return null;\n\tconst config = getI18nConfig();\n\tif (!config) return null;\n\tif (config.locales.includes(locale)) return null;\n\treturn {\n\t\tsuccess: false,\n\t\terror: {\n\t\t\tcode: \"VALIDATION_ERROR\",\n\t\t\tmessage: `Locale \"${locale}\" is not configured for this site`,\n\t\t},\n\t};\n}\n\n/**\n * Business-logic helpers for the bylines admin API.\n *\n * Mirrors the shape of `packages/core/src/api/handlers/menus.ts`. Route files\n * stay thin: they parse input, call these handlers, and forward the result via\n * `unwrapResult`. The repository (`BylineRepository`) is strict per locale; the\n * handlers add validation and translation-flow guards on top.\n */\n\nexport interface BylineTranslationsResponse {\n\titems: BylineSummary[];\n}\n\n/**\n * List every translation of a byline (by row id). Returns NOT_FOUND when no\n * row with the given id exists.\n */\nexport async function handleBylineTranslations(\n\tdb: Kysely<Database>,\n\tid: string,\n): Promise<ApiResult<BylineTranslationsResponse>> {\n\ttry {\n\t\tconst repo = new BylineRepository(db);\n\t\tconst anchor = await repo.findById(id);\n\t\tif (!anchor) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: { code: \"NOT_FOUND\", message: \"Byline not found\" },\n\t\t\t};\n\t\t}\n\t\tconst items = await repo.listTranslations(id);\n\t\treturn { success: true, data: { items } };\n\t} catch {\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: {\n\t\t\t\tcode: \"BYLINE_TRANSLATIONS_ERROR\",\n\t\t\t\tmessage: \"Failed to list byline translations\",\n\t\t\t},\n\t\t};\n\t}\n}\n\n/**\n * Create a new byline. When `translationOf` is supplied, the new row joins the\n * source byline's translation_group (a sibling in the same logical identity).\n *\n * Translating from a source row only makes sense when the caller names the\n * target locale, otherwise we'd silently clone into the configured default,\n * which is almost never what's intended (and will collide if the source is\n * already the default-locale row). Mirrors `handleMenuCreate`.\n */\nexport async function handleBylineCreate(\n\tdb: Kysely<Database>,\n\tinput: CreateBylineInput,\n): Promise<ApiResult<BylineSummary>> {\n\ttry {\n\t\tif (input.translationOf && !input.locale) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: {\n\t\t\t\t\tcode: \"VALIDATION_ERROR\",\n\t\t\t\t\tmessage: \"`locale` is required when `translationOf` is provided\",\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\tconst localeErr = rejectUnknownLocale(input.locale);\n\t\tif (localeErr) return localeErr;\n\n\t\tconst repo = new BylineRepository(db);\n\n\t\t// Existence check up front so the repo's \"Source not found\" throw\n\t\t// becomes a clean NOT_FOUND on the API.\n\t\tlet sourceGroup: string | undefined;\n\t\tif (input.translationOf) {\n\t\t\tconst source = await repo.findById(input.translationOf);\n\t\t\tif (!source) {\n\t\t\t\treturn {\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terror: {\n\t\t\t\t\t\tcode: \"NOT_FOUND\",\n\t\t\t\t\t\tmessage: \"Source byline for translation not found\",\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\t\t\tsourceGroup = source.translationGroup ?? source.id;\n\t\t}\n\n\t\tconst effectiveLocale = input.locale ?? getI18nConfig()?.defaultLocale ?? \"en\";\n\n\t\t// Translation-group guard: the row-per-locale model (PR #916)\n\t\t// allows exactly one row per (translation_group, locale). Reject\n\t\t// here so callers get a clean 409 instead of a UNIQUE constraint\n\t\t// failure from the partial index. The DB constraint is the safety\n\t\t// net; this is the friendly error.\n\t\tif (sourceGroup) {\n\t\t\tconst siblings = await repo.findByTranslationGroup(sourceGroup);\n\t\t\tif (siblings.some((b) => b.locale === effectiveLocale)) {\n\t\t\t\treturn {\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terror: {\n\t\t\t\t\t\tcode: \"CONFLICT\",\n\t\t\t\t\t\tmessage: `Translation already exists in locale \"${effectiveLocale}\" for this byline`,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\t// Duplicate guard: same (slug, locale) — matches the DB unique key\n\t\t// from migration 040.\n\t\tconst existing = await repo.findBySlug(input.slug, { locale: effectiveLocale });\n\t\tif (existing) {\n\t\t\t// D1 has no transactions, so a crash between the byline insert\n\t\t\t// and the per-field writes leaves a partial row that's\n\t\t\t// otherwise unrecoverable. Treat a same-identity retry that\n\t\t\t// provides customFields as completing the abandoned create.\n\t\t\t// Recovery requires fixed-column + translation-group +\n\t\t\t// subset-customFields match; anything else collapses to a\n\t\t\t// standard duplicate-slug conflict.\n\t\t\tconst expectedTranslationGroup = sourceGroup ?? existing.id;\n\t\t\tconst inputHasFields = !!input.customFields && Object.keys(input.customFields).length > 0;\n\t\t\tif (\n\t\t\t\tinputHasFields &&\n\t\t\t\tbylineFixedFieldsMatch(existing, input, effectiveLocale) &&\n\t\t\t\texisting.translationGroup === expectedTranslationGroup &&\n\t\t\t\texistingCustomFieldsAreSubsetOf(existing.customFields ?? {}, input.customFields)\n\t\t\t) {\n\t\t\t\tconst recovered = await repo.update(existing.id, {\n\t\t\t\t\tcustomFields: input.customFields,\n\t\t\t\t});\n\t\t\t\tif (recovered) return { success: true, data: recovered };\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: {\n\t\t\t\t\tcode: \"CONFLICT\",\n\t\t\t\t\tmessage: `Byline \"${input.slug}\" already exists${\n\t\t\t\t\t\tinput.locale ? ` in locale \"${input.locale}\"` : \"\"\n\t\t\t\t\t}`,\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\tconst byline = await repo.create(input);\n\t\treturn { success: true, data: byline };\n\t} catch (error) {\n\t\t// Mirror handleBylineUpdate: surface customFields validation\n\t\t// errors as 400 rather than swallowing them as a generic 500.\n\t\tif (error instanceof EmDashValidationError) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: { code: \"VALIDATION_ERROR\", message: error.message },\n\t\t\t};\n\t\t}\n\t\tconsole.error(\"[BYLINE_CREATE_ERROR]\", error);\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: { code: \"BYLINE_CREATE_ERROR\", message: \"Failed to create byline\" },\n\t\t};\n\t}\n}\n\n/**\n * Update an existing byline. Forwards every field on `UpdateBylineInput`\n * to `BylineRepository.update`, including the Phase 3 `customFields`\n * map; per-field type validation lives in the repo, which throws\n * `EmDashValidationError` on unknown slugs, type mismatches, or\n * `select`-choice misses. This handler translates that into a clean\n * `VALIDATION_ERROR` (400 via `mapErrorStatus`).\n *\n * Returns `NOT_FOUND` when the byline id doesn't resolve. Generic\n * failures surface as `BYLINE_UPDATE_ERROR` (500) without leaking the\n * underlying message.\n */\nexport async function handleBylineUpdate(\n\tdb: Kysely<Database>,\n\tid: string,\n\tinput: UpdateBylineInput,\n): Promise<ApiResult<BylineSummary>> {\n\ttry {\n\t\tconst repo = new BylineRepository(db);\n\t\tconst byline = await repo.update(id, input);\n\t\tif (!byline) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: { code: \"NOT_FOUND\", message: \"Byline not found\" },\n\t\t\t};\n\t\t}\n\t\treturn { success: true, data: byline };\n\t} catch (error) {\n\t\t// Unknown-key + type-mismatch + select-choice writes throw\n\t\t// EmDashValidationError (Phase 3, see BylineRepository.update).\n\t\t// Map to a clean 400 — the error message names the offending\n\t\t// slug/type, which is safe to surface to the admin client.\n\t\tif (error instanceof EmDashValidationError) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: { code: \"VALIDATION_ERROR\", message: error.message },\n\t\t\t};\n\t\t}\n\t\tconsole.error(\"[BYLINE_UPDATE_ERROR]\", error);\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: { code: \"BYLINE_UPDATE_ERROR\", message: \"Failed to update byline\" },\n\t\t};\n\t}\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config-CVssduLe.mjs","names":[],"sources":["../src/i18n/config.ts"],"sourcesContent":["/**\n * EmDash i18n Configuration\n *\n * Reads locale configuration from the virtual module (sourced from Astro config).\n * Initialized during runtime startup, then available via getI18nConfig().\n */\n\nexport interface I18nConfig {\n\tdefaultLocale: string;\n\tlocales: string[];\n\tfallback?: Record<string, string>;\n\tprefixDefaultLocale?: boolean;\n}\n\nlet _config: I18nConfig | null | undefined;\n\n/**\n * Initialize i18n config from virtual module data.\n * Called during runtime initialization.\n */\nexport function setI18nConfig(config: I18nConfig | null): void {\n\t_config = config;\n}\n\n/**\n * Get the current i18n config.\n * Returns null if i18n is not configured.\n */\nexport function getI18nConfig(): I18nConfig | null {\n\treturn _config ?? null;\n}\n\n/**\n * Check if i18n is enabled.\n * Returns true when multiple locales are configured.\n */\nexport function isI18nEnabled(): boolean {\n\treturn _config != null && _config.locales.length > 1;\n}\n\n/**\n * Resolve fallback locale chain for a given locale.\n * Returns array of locales to try, from most preferred to least.\n * Always ends with defaultLocale.\n */\nexport function getFallbackChain(locale: string): string[] {\n\tif (!_config) return [locale];\n\n\tconst chain: string[] = [locale];\n\tlet current = locale;\n\tconst visited = new Set<string>([locale]);\n\n\twhile (_config.fallback?.[current]) {\n\t\t// eslint-disable-next-line typescript/no-unnecessary-type-assertion -- noUncheckedIndexedAccess\n\t\tconst next = _config.fallback[current]!;\n\t\tif (visited.has(next)) break; // prevent cycles\n\t\tchain.push(next);\n\t\tvisited.add(next);\n\t\tcurrent = next;\n\t}\n\n\t// Always end with defaultLocale if not already in chain\n\tif (!visited.has(_config.defaultLocale)) {\n\t\tchain.push(_config.defaultLocale);\n\t}\n\n\treturn chain;\n}\n"],"mappings":";AAcA,IAAI;;;;;AAMJ,SAAgB,cAAc,QAAiC;AAC9D,WAAU;;;;;;AAOX,SAAgB,gBAAmC;AAClD,QAAO,WAAW;;;;;;AAOnB,SAAgB,gBAAyB;AACxC,QAAO,WAAW,QAAQ,QAAQ,QAAQ,SAAS;;;;;;;AAQpD,SAAgB,iBAAiB,QAA0B;AAC1D,KAAI,CAAC,QAAS,QAAO,CAAC,OAAO;CAE7B,MAAM,QAAkB,CAAC,OAAO;CAChC,IAAI,UAAU;CACd,MAAM,UAAU,IAAI,IAAY,CAAC,OAAO,CAAC;AAEzC,QAAO,QAAQ,WAAW,UAAU;EAEnC,MAAM,OAAO,QAAQ,SAAS;AAC9B,MAAI,QAAQ,IAAI,KAAK,CAAE;AACvB,QAAM,KAAK,KAAK;AAChB,UAAQ,IAAI,KAAK;AACjB,YAAU;;AAIX,KAAI,CAAC,QAAQ,IAAI,QAAQ,cAAc,CACtC,OAAM,KAAK,QAAQ,cAAc;AAGlC,QAAO"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dialect-helpers-HxEQGl_1.mjs","names":[],"sources":["../src/database/dialect-helpers.ts"],"sourcesContent":["/**\n * Dialect-specific SQL helpers\n *\n * Every function takes a Kysely `db` instance and detects the dialect from\n * the adapter class. No module-level state, no globals, no heuristics —\n * the adapter is the source of truth.\n *\n * This is NOT an ORM abstraction — just targeted helpers for the ~15 places\n * that use raw dialect-specific SQL. Most Kysely schema builder code already\n * works cross-dialect.\n */\n\nimport type { ColumnDataType, Kysely, RawBuilder } from \"kysely\";\nimport { sql } from \"kysely\";\n\nimport type { DatabaseDialectType } from \"../db/adapters.js\";\nimport { validateIdentifier, validateJsonFieldName } from \"./validate.js\";\n\nexport type { DatabaseDialectType };\n\n/**\n * Detect dialect type from a Kysely instance via the adapter class name.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- accepts any Kysely instance\nexport function detectDialect(db: Kysely<any>): DatabaseDialectType {\n\tconst name = db.getExecutor().adapter.constructor.name;\n\tif (name === \"PostgresAdapter\") return \"postgres\";\n\treturn \"sqlite\";\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- accepts any Kysely instance\nexport function isSqlite(db: Kysely<any>): boolean {\n\treturn detectDialect(db) === \"sqlite\";\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- accepts any Kysely instance\nexport function isPostgres(db: Kysely<any>): boolean {\n\treturn detectDialect(db) === \"postgres\";\n}\n\n/**\n * Default timestamp expression for column defaults.\n * Wrapped in parens for use in CREATE TABLE ... DEFAULT (...).\n *\n * sqlite: (datetime('now'))\n * postgres: CURRENT_TIMESTAMP\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- accepts any Kysely instance\nexport function currentTimestamp(db: Kysely<any>): RawBuilder<string> {\n\tif (isPostgres(db)) {\n\t\treturn sql`CURRENT_TIMESTAMP`;\n\t}\n\treturn sql`(datetime('now'))`;\n}\n\n/**\n * Timestamp expression for use in WHERE clauses and SET expressions.\n * No wrapping parens.\n *\n * sqlite: datetime('now')\n * postgres: CURRENT_TIMESTAMP\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- accepts any Kysely instance\nexport function currentTimestampValue(db: Kysely<any>): RawBuilder<string> {\n\tif (isPostgres(db)) {\n\t\treturn sql`CURRENT_TIMESTAMP`;\n\t}\n\treturn sql`datetime('now')`;\n}\n\n/**\n * Build WHERE clause for status filtering on a content table.\n * When filtering for 'published' status, also include scheduled content\n * whose scheduled_at time has passed (treating it as effectively published).\n *\n * Visibility is computed, not flipped by cron, so a literal\n * `status = 'published'` comparison undercounts scheduled-and-due entries —\n * every \"publicly visible\" filter must go through this helper.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- accepts any Kysely instance\nexport function buildStatusCondition(\n\tdb: Kysely<any>,\n\tstatus: string,\n\ttablePrefix?: string,\n): ReturnType<typeof sql> {\n\tconst statusField = tablePrefix ? `${tablePrefix}.status` : \"status\";\n\tconst scheduledAtField = tablePrefix ? `${tablePrefix}.scheduled_at` : \"scheduled_at\";\n\n\tif (status === \"published\") {\n\t\t// Include both published content AND scheduled content past its publish time.\n\t\t// scheduled_at is stored as text (ISO 8601). On Postgres, we must cast it\n\t\t// to timestamptz for the comparison with CURRENT_TIMESTAMP to work.\n\t\tconst scheduledAtExpr = isPostgres(db)\n\t\t\t? sql`${sql.ref(scheduledAtField)}::timestamptz`\n\t\t\t: sql.ref(scheduledAtField);\n\t\tconst nowExpr = isPostgres(db)\n\t\t\t? currentTimestampValue(db)\n\t\t\t: sql`strftime('%Y-%m-%dT%H:%M:%fZ', 'now')`;\n\t\treturn sql`(${sql.ref(statusField)} = 'published' OR (${sql.ref(statusField)} = 'scheduled' AND ${scheduledAtExpr} <= ${nowExpr}))`;\n\t}\n\n\treturn sql`${sql.ref(statusField)} = ${status}`;\n}\n\n/**\n * Check if a table exists in the database.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- accepts any Kysely instance\nexport async function tableExists(db: Kysely<any>, tableName: string): Promise<boolean> {\n\tif (isPostgres(db)) {\n\t\t// Scope to the active schema (matches indexExists/columnExists below).\n\t\t// Hardcoding 'public' breaks non-public-schema Postgres deployments.\n\t\tconst result = await sql<{ exists: boolean }>`\n\t\t\tSELECT EXISTS(\n\t\t\t\tSELECT 1 FROM information_schema.tables\n\t\t\t\tWHERE table_schema = current_schema() AND table_name = ${tableName}\n\t\t\t) as exists\n\t\t`.execute(db);\n\t\treturn result.rows[0]?.exists === true;\n\t}\n\n\tconst result = await sql<{ name: string }>`\n\t\tSELECT name FROM sqlite_master\n\t\tWHERE type = 'table' AND name = ${tableName}\n\t`.execute(db);\n\treturn result.rows.length > 0;\n}\n\n/**\n * Check if an index exists in the database.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- accepts any Kysely instance\nexport async function indexExists(db: Kysely<any>, indexName: string): Promise<boolean> {\n\tif (isPostgres(db)) {\n\t\tconst result = await sql<{ exists: boolean }>`\n\t\t\tSELECT EXISTS(\n\t\t\t\tSELECT 1 FROM pg_indexes\n\t\t\t\tWHERE schemaname = current_schema() AND indexname = ${indexName}\n\t\t\t) as exists\n\t\t`.execute(db);\n\t\treturn result.rows[0]?.exists === true;\n\t}\n\n\tconst result = await sql<{ name: string }>`\n\t\tSELECT name FROM sqlite_master\n\t\tWHERE type = 'index' AND name = ${indexName}\n\t`.execute(db);\n\treturn result.rows.length > 0;\n}\n\n/**\n * Check if a column exists in the database.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- accepts any Kysely instance\nexport async function columnExists(\n\tdb: Kysely<any>,\n\ttableName: string,\n\tcolumnName: string,\n): Promise<boolean> {\n\tif (isPostgres(db)) {\n\t\tconst result = await sql<{ exists: boolean }>`\n\t\t\tSELECT EXISTS(\n\t\t\t\tSELECT 1 FROM information_schema.columns\n\t\t\t\tWHERE table_schema = current_schema()\n\t\t\t\t\tAND table_name = ${tableName}\n\t\t\t\t\tAND column_name = ${columnName}\n\t\t\t) as exists\n\t\t`.execute(db);\n\t\treturn result.rows[0]?.exists === true;\n\t}\n\n\tconst result = await sql<{ name: string }>`\n\t\tSELECT name FROM pragma_table_info(${tableName})\n\t\tWHERE name = ${columnName}\n\t`.execute(db);\n\treturn result.rows.length > 0;\n}\n\n/**\n * List tables matching a LIKE pattern.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- accepts any Kysely instance\nexport async function listTablesLike(db: Kysely<any>, pattern: string): Promise<string[]> {\n\tif (isPostgres(db)) {\n\t\t// Scope to the connection's active schema rather than hardcoding\n\t\t// 'public'. A Postgres deployment using a non-public schema (per-tenant\n\t\t// or shared-cluster setups), or per-test schemas, otherwise sees tables\n\t\t// from the wrong schema — or none at all. Mirrors migration 038.\n\t\tconst result = await sql<{ table_name: string }>`\n\t\t\tSELECT table_name FROM information_schema.tables\n\t\t\tWHERE table_schema = current_schema() AND table_name LIKE ${pattern}\n\t\t`.execute(db);\n\t\treturn result.rows.map((r) => r.table_name);\n\t}\n\n\tconst result = await sql<{ name: string }>`\n\t\tSELECT name FROM sqlite_master\n\t\tWHERE type = 'table' AND name LIKE ${pattern}\n\t`.execute(db);\n\treturn result.rows.map((r) => r.name);\n}\n\n/**\n * Column type for binary data.\n *\n * sqlite: blob\n * postgres: bytea\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- accepts any Kysely instance\nexport function binaryType(db: Kysely<any>): ColumnDataType {\n\tif (isPostgres(db)) {\n\t\treturn \"bytea\";\n\t}\n\treturn \"blob\";\n}\n\n/**\n * SQL expression for extracting a field from a JSON column stored as text.\n *\n * sqlite: json_extract(column, '$.path')\n * postgres: (column)::jsonb->>'path'\n *\n * The Postgres cast is required because JSON columns (e.g.\n * `_plugin_storage.data`) are `text`, and `text ->> unknown` is not an\n * operator. The cast is immutable, so the same expression works in\n * expression indexes — queries and indexes must build it through this\n * helper so the planner can match them.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- accepts any Kysely instance\nexport function jsonExtractExpr(db: Kysely<any>, column: string, path: string): string {\n\tvalidateIdentifier(column, \"JSON column name\");\n\tvalidateJsonFieldName(path, \"JSON path\");\n\tif (isPostgres(db)) {\n\t\treturn `(${column})::jsonb->>'${path}'`;\n\t}\n\treturn `json_extract(${column}, '$.${path}')`;\n}\n\n/**\n * SQL expression for extracting a queryable field from the plugin-storage\n * `data` column.\n *\n * `_plugin_storage.data` is `text`, so Postgres extraction goes through the\n * `(data)::jsonb->>'field'` cast (#1898) — otherwise `text ->> unknown` is not\n * an operator. But the extracted value is still `text`, so a numeric comparison\n * (`stock >= 10`) compares lexically (`'9' >= '10'` is TRUE) and silently\n * over-counts / oversells; pass `{ numeric: true }` for a numeric comparison.\n *\n * The numeric form is a **type-guarded** cast, not a bare `::numeric`. A bare\n * cast throws `invalid input syntax for type numeric` the moment a single\n * scanned row stores a non-number in that field (documents are schemaless),\n * aborting the whole query — and it would diverge from SQLite, which silently\n * coerces. Guarding with `jsonb_typeof`/`json_type` makes the comparison total\n * and parity-correct on both dialects: a non-number stored value yields `NULL`\n * (no match) instead of an error.\n *\n * The field name is validated before interpolation, so the casts wrap only a\n * safe identifier and add no injection surface.\n *\n * sqlite text: json_extract(data, '$.field')\n * sqlite numeric: CASE WHEN json_type(data, '$.field') IN ('integer', 'real')\n * THEN json_extract(data, '$.field') END\n * postgres text: (data)::jsonb->>'field'\n * postgres numeric: CASE WHEN jsonb_typeof((data)::jsonb->'field') = 'number'\n * THEN ((data)::jsonb->>'field')::numeric END\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- accepts any Kysely instance\nexport function pluginDataExtractExpr(\n\tdb: Kysely<any>,\n\tfield: string,\n\toptions?: { numeric?: boolean },\n): string {\n\tvalidateJsonFieldName(field, \"plugin storage field name\");\n\tif (isPostgres(db)) {\n\t\tconst text = `(data)::jsonb->>'${field}'`;\n\t\tif (!options?.numeric) return text;\n\t\treturn `CASE WHEN jsonb_typeof((data)::jsonb->'${field}') = 'number' THEN (${text})::numeric END`;\n\t}\n\tconst extract = `json_extract(data, '$.${field}')`;\n\tif (!options?.numeric) return extract;\n\treturn `CASE WHEN json_type(data, '$.${field}') IN ('integer', 'real') THEN ${extract} END`;\n}\n\n/**\n * SQL expression for ordering plugin-storage rows by a `data` field.\n *\n * `ORDER BY` has no bound operand to infer numeric-vs-text from, so extracting\n * as text (`->>'field'`) would sort a numeric field lexically on Postgres\n * (`[10, 100, 9]`) while SQLite's `json_extract` sorts it numerically — a\n * cross-dialect divergence. Ordering over the jsonb-native value (`->'field'`,\n * single arrow) fixes this: jsonb btree ordering is numeric among numbers,\n * lexical among strings, and total across heterogeneous values (never throws).\n * SQLite's `json_extract` already orders numerically, so it is unchanged.\n *\n * sqlite: json_extract(data, '$.field')\n * postgres: (data)::jsonb->'field'\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- accepts any Kysely instance\nexport function pluginDataOrderExpr(db: Kysely<any>, field: string): string {\n\tvalidateJsonFieldName(field, \"plugin storage order field name\");\n\tif (isPostgres(db)) {\n\t\treturn `(data)::jsonb->'${field}'`;\n\t}\n\treturn `json_extract(data, '$.${field}')`;\n}\n"],"mappings":";;;;;;;AAwBA,SAAgB,cAAc,IAAsC;AAEnE,KADa,GAAG,aAAa,CAAC,QAAQ,YAAY,SACrC,kBAAmB,QAAO;AACvC,QAAO;;AAIR,SAAgB,SAAS,IAA0B;AAClD,QAAO,cAAc,GAAG,KAAK;;AAI9B,SAAgB,WAAW,IAA0B;AACpD,QAAO,cAAc,GAAG,KAAK;;;;;;;;;AAW9B,SAAgB,iBAAiB,IAAqC;AACrE,KAAI,WAAW,GAAG,CACjB,QAAO,GAAG;AAEX,QAAO,GAAG;;;;;;;;;AAWX,SAAgB,sBAAsB,IAAqC;AAC1E,KAAI,WAAW,GAAG,CACjB,QAAO,GAAG;AAEX,QAAO,GAAG;;;;;;;;;;;AAaX,SAAgB,qBACf,IACA,QACA,aACyB;CACzB,MAAM,cAAc,cAAc,GAAG,YAAY,WAAW;CAC5D,MAAM,mBAAmB,cAAc,GAAG,YAAY,iBAAiB;AAEvE,KAAI,WAAW,aAAa;EAI3B,MAAM,kBAAkB,WAAW,GAAG,GACnC,GAAG,GAAG,IAAI,IAAI,iBAAiB,CAAC,iBAChC,IAAI,IAAI,iBAAiB;EAC5B,MAAM,UAAU,WAAW,GAAG,GAC3B,sBAAsB,GAAG,GACzB,GAAG;AACN,SAAO,GAAG,IAAI,IAAI,IAAI,YAAY,CAAC,qBAAqB,IAAI,IAAI,YAAY,CAAC,qBAAqB,gBAAgB,MAAM,QAAQ;;AAGjI,QAAO,GAAG,GAAG,IAAI,IAAI,YAAY,CAAC,KAAK;;;;;AAOxC,eAAsB,YAAY,IAAiB,WAAqC;AACvF,KAAI,WAAW,GAAG,CASjB,SANe,MAAM,GAAwB;;;6DAGc,UAAU;;IAEnE,QAAQ,GAAG,EACC,KAAK,IAAI,WAAW;AAOnC,SAJe,MAAM,GAAqB;;oCAEP,UAAU;GAC3C,QAAQ,GAAG,EACC,KAAK,SAAS;;;;;AA6B7B,eAAsB,aACrB,IACA,WACA,YACmB;AACnB,KAAI,WAAW,GAAG,CASjB,SARe,MAAM,GAAwB;;;;wBAIvB,UAAU;yBACT,WAAW;;IAEhC,QAAQ,GAAG,EACC,KAAK,IAAI,WAAW;AAOnC,SAJe,MAAM,GAAqB;uCACJ,UAAU;iBAChC,WAAW;GACzB,QAAQ,GAAG,EACC,KAAK,SAAS;;;;;AAO7B,eAAsB,eAAe,IAAiB,SAAoC;AACzF,KAAI,WAAW,GAAG,CASjB,SAJe,MAAM,GAA2B;;+DAEa,QAAQ;IACnE,QAAQ,GAAG,EACC,KAAK,KAAK,MAAM,EAAE,WAAW;AAO5C,SAJe,MAAM,GAAqB;;uCAEJ,QAAQ;GAC5C,QAAQ,GAAG,EACC,KAAK,KAAK,MAAM,EAAE,KAAK;;;;;;;;AAUtC,SAAgB,WAAW,IAAiC;AAC3D,KAAI,WAAW,GAAG,CACjB,QAAO;AAER,QAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsDR,SAAgB,sBACf,IACA,OACA,SACS;AACT,uBAAsB,OAAO,4BAA4B;AACzD,KAAI,WAAW,GAAG,EAAE;EACnB,MAAM,OAAO,oBAAoB,MAAM;AACvC,MAAI,CAAC,SAAS,QAAS,QAAO;AAC9B,SAAO,0CAA0C,MAAM,sBAAsB,KAAK;;CAEnF,MAAM,UAAU,yBAAyB,MAAM;AAC/C,KAAI,CAAC,SAAS,QAAS,QAAO;AAC9B,QAAO,gCAAgC,MAAM,iCAAiC,QAAQ;;;;;;;;;;;;;;;;AAkBvF,SAAgB,oBAAoB,IAAiB,OAAuB;AAC3E,uBAAsB,OAAO,kCAAkC;AAC/D,KAAI,WAAW,GAAG,CACjB,QAAO,mBAAmB,MAAM;AAEjC,QAAO,yBAAyB,MAAM"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-wYnC6u4o.d.mts","names":[],"sources":["../src/database/errors.ts","../src/database/connection.ts","../src/database/repositories/content.ts","../src/database/repositories/media.ts","../src/database/repositories/user.ts","../src/database/repositories/revision.ts","../src/database/repositories/comment.ts","../src/database/repositories/plugin-storage.ts","../src/fields/types.ts","../src/fields/image.ts","../src/fields/file.ts","../src/fields/reference.ts","../src/fields/portable-text.ts","../src/api/handlers/content.ts","../src/api/handlers/manifest.ts","../src/api/handlers/revision.ts","../src/api/handlers/media.ts","../src/media/usage/content-refresh.ts","../src/schema/registry.ts","../src/schema/query.ts","../src/registry/types.ts","../src/astro/storage/types.ts","../src/astro/integration/runtime.ts","../src/plugins/sandbox/types.ts","../src/plugins/cron.ts","../src/plugins/context.ts","../src/plugins/hooks.ts","../src/plugins/email.ts","../src/plugins/routes.ts","../src/plugins/scheduler/types.ts","../src/scheduled-publish.ts","../src/emdash-runtime.ts","../src/sections/types.ts","../src/sections/index.ts","../src/content/converters/types.ts","../src/content/converters/prosemirror-to-portable-text.ts","../src/content/converters/portable-text-to-prosemirror.ts","../src/utils/hash.ts","../src/utils/url.ts","../src/loader.ts","../src/visual-editing/editable.ts","../src/query.ts","../src/after.ts","../src/i18n/config.ts","../src/object-cache/index.ts","../src/plugins/define-plugin.ts","../src/plugins/manifest-schema.ts","../src/plugins/manager.ts","../src/plugins/scheduler/node.ts","../src/plugins/sandbox/noop.ts","../src/preview/tokens.ts","../src/preview/urls.ts","../src/preview/helpers.ts","../src/settings/index.ts","../src/comments/query.ts","../src/menus/types.ts","../src/menus/index.ts","../src/bylines/index.ts","../src/taxonomies/types.ts","../src/taxonomies/index.ts","../src/widgets/types.ts","../src/widgets/index.ts","../src/search/types.ts","../src/search/fts-manager.ts","../src/search/query.ts","../src/search/text-extraction.ts"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"media-kIV1IxFf.mjs","names":[],"sources":["../src/api/schemas/common.ts","../src/api/schemas/media-usage.ts","../src/api/schemas/media.ts"],"sourcesContent":["import { z } from \"zod\";\n\n// ---------------------------------------------------------------------------\n// Role level\n// ---------------------------------------------------------------------------\n\n/** Valid role level values */\nexport const VALID_ROLE_LEVELS = new Set([10, 20, 30, 40, 50]);\n\n/** Role level — coerces string/number to valid RoleLevel (10|20|30|40|50) */\nexport const roleLevel = z.coerce\n\t.number()\n\t.int()\n\t.refine((n): n is 10 | 20 | 30 | 40 | 50 => VALID_ROLE_LEVELS.has(n), {\n\t\tmessage: \"Invalid role level. Must be 10, 20, 30, 40, or 50\",\n\t});\n\n// ---------------------------------------------------------------------------\n// Pagination\n// ---------------------------------------------------------------------------\n\n/** Pagination query params — cursor-based */\nexport const cursorPaginationQuery = z\n\t.object({\n\t\tcursor: z.string().max(2048).optional().meta({ description: \"Opaque cursor for pagination\" }),\n\t\tlimit: z.coerce.number().int().min(1).max(100).optional().default(50).meta({\n\t\t\tdescription: \"Maximum number of items to return (1-100, default 50)\",\n\t\t}),\n\t})\n\t.meta({ id: \"CursorPaginationQuery\" });\n\n/** Pagination query params — offset-based */\nexport const offsetPaginationQuery = z\n\t.object({\n\t\tlimit: z.coerce.number().int().min(1).max(100).optional().default(50),\n\t\toffset: z.coerce.number().int().min(0).optional().default(0),\n\t})\n\t.meta({ id: \"OffsetPaginationQuery\" });\n\n// ---------------------------------------------------------------------------\n// Shared primitives\n// ---------------------------------------------------------------------------\n\n/** Slug pattern: lowercase letters, digits, underscores; starts with letter */\nexport const slugPattern = /^[a-z][a-z0-9_]*$/;\n\n/** Matches http(s) scheme at start of URL */\nconst HTTP_SCHEME_RE = /^https?:\\/\\//i;\n\n/** Validates that a URL string uses http or https scheme. Rejects javascript:/data: URI XSS vectors. */\nexport const httpUrl = z\n\t.string()\n\t.url()\n\t.refine((url) => HTTP_SCHEME_RE.test(url), \"URL must use http or https\");\n\n/** BCP 47 locale code — language with optional script/region subtags (e.g. en, en-US, pt-BR, es-419, zh-Hant) */\nexport const localeCode = z\n\t.string()\n\t.regex(/^[a-z]{2,3}(-[a-z0-9]{2,8})*$/i, \"Invalid locale code\")\n\t.transform((v) => v.toLowerCase());\n\n/** Shared `?locale=xx` query shape for endpoints that filter by locale. */\nexport const localeFilterQuery = z\n\t.object({\n\t\tlocale: z.string().min(1).optional(),\n\t})\n\t.meta({ id: \"LocaleFilterQuery\" });\n\n// ---------------------------------------------------------------------------\n// OpenAPI: Shared response schemas\n// ---------------------------------------------------------------------------\n\n/** Standard API error response */\nexport const apiErrorSchema = z\n\t.object({\n\t\tsuccess: z.literal(false).meta({ description: \"Discriminant: always false for errors\" }),\n\t\terror: z.object({\n\t\t\tcode: z.string().meta({ description: \"Machine-readable error code\", example: \"NOT_FOUND\" }),\n\t\t\tmessage: z.string().meta({ description: \"Human-readable error message\" }),\n\t\t}),\n\t})\n\t.meta({ id: \"ApiError\" });\n\n/** Wrap a data schema in the standard success envelope: { success: true, data: T } */\nexport function successEnvelope<T extends z.ZodType>(dataSchema: T) {\n\treturn z.object({\n\t\tsuccess: z.literal(true).meta({ description: \"Discriminant: always true for success\" }),\n\t\tdata: dataSchema,\n\t});\n}\n\n/** Standard delete response */\nexport const deleteResponseSchema = z.object({ deleted: z.literal(true) }).meta({\n\tid: \"DeleteResponse\",\n});\n\n/** Standard count response */\nexport const countResponseSchema = z\n\t.object({ count: z.number().int().min(0) })\n\t.meta({ id: \"CountResponse\" });\n","import { z } from \"zod\";\n\nimport { slugPattern } from \"./common.js\";\n\nexport const mediaUsageCoverageStatusSchema = z\n\t.enum([\"complete\", \"never\", \"running\", \"partial\", \"failed\", \"stale\", \"unknown\"])\n\t.meta({ id: \"MediaUsageCoverageStatus\" });\n\nexport const mediaUsageCoverageSchema = z\n\t.object({\n\t\tscope: z.literal(\"all_content_collections\"),\n\t\tstatus: mediaUsageCoverageStatusSchema,\n\t})\n\t.meta({ id: \"MediaUsageCoverage\" });\n\nexport const mediaUsageSummarySchema = z\n\t.object({\n\t\tcount: z.number().int().min(0).nullable(),\n\t\tcoverage: mediaUsageCoverageSchema,\n\t})\n\t.meta({ id: \"MediaUsageSummary\" });\n\nexport const mediaUsageDetailsQuery = z.object({\n\tcursor: z.string().min(1).max(2048).optional().meta({\n\t\tdescription: \"Opaque content-entry-group cursor\",\n\t}),\n\tlimit: z.coerce.number().int().min(1).max(100).optional().default(50).meta({\n\t\tdescription: \"Maximum number of content entry groups to return (1-100, default 50)\",\n\t}),\n});\n\nexport const mediaUsageOccurrenceDetailSchema = z\n\t.object({\n\t\tfieldSlug: z.string(),\n\t\tfieldPath: z.string(),\n\t\toccurrenceIndex: z.number().int().min(0),\n\t\treferenceType: z.enum([\"image_field\", \"file_field\", \"portable_text_image\", \"unknown\"]),\n\t})\n\t.meta({ id: \"MediaUsageOccurrenceDetail\" });\n\nexport const mediaUsageSourceDetailSchema = z\n\t.object({\n\t\tvariant: z.enum([\"columns\", \"draft_overlay\"]),\n\t\toccurrences: z.array(mediaUsageOccurrenceDetailSchema),\n\t})\n\t.meta({ id: \"MediaUsageSourceDetail\" });\n\nexport const mediaUsageEntryDetailSchema = z\n\t.object({\n\t\tcollection: z.string(),\n\t\tcontentId: z.string(),\n\t\ttitle: z.string().nullable(),\n\t\tslug: z.string().nullable(),\n\t\tlocale: z.string().nullable(),\n\t\tstatus: z.string().nullable(),\n\t\tscheduledAt: z.string().nullable(),\n\t\tdeletedAt: z.string().nullable(),\n\t\tsources: z.array(mediaUsageSourceDetailSchema),\n\t})\n\t.meta({ id: \"MediaUsageEntryDetail\" });\n\nexport const mediaUsageDetailsResponseSchema = z\n\t.object({\n\t\titems: z.array(mediaUsageEntryDetailSchema),\n\t\tnextCursor: z.string().optional(),\n\t\tcoverage: mediaUsageCoverageSchema,\n\t})\n\t.meta({ id: \"MediaUsageDetailsResponse\" });\n\nexport const mediaUsageRepairStatusSchema = z\n\t.enum([\"complete\", \"partial\", \"failed\", \"stale\"])\n\t.meta({ id: \"MediaUsageRepairStatus\" });\n\nconst mediaUsageRepairCollectionBody = z\n\t.object({\n\t\tscope: z.literal(\"collection\"),\n\t\tcollection: z.string().min(1).max(63).regex(slugPattern, \"Invalid collection slug\"),\n\t})\n\t.strict();\n\nconst mediaUsageRepairAllBody = z.object({ scope: z.literal(\"all\") }).strict();\n\nexport const mediaUsageRepairBody = z\n\t.discriminatedUnion(\"scope\", [mediaUsageRepairCollectionBody, mediaUsageRepairAllBody])\n\t.meta({ id: \"MediaUsageRepairBody\" });\n\nexport const mediaUsageRepairCollectionSummarySchema = z\n\t.object({\n\t\tcollection: z.string(),\n\t\tstatus: mediaUsageRepairStatusSchema,\n\t\tindexedSourceCount: z.number().int().min(0),\n\t\tfailedSourceCount: z.number().int().min(0),\n\t\tskippedSourceCount: z.number().int().min(0),\n\t\tdeletedSourceCount: z.number().int().min(0),\n\t\tlastErrorCode: z.string().nullable(),\n\t\tstartedAt: z.string(),\n\t\tcompletedAt: z.string().nullable(),\n\t})\n\t.meta({ id: \"MediaUsageRepairCollectionSummary\" });\n\nexport const mediaUsageRepairResponseSchema = z\n\t.object({\n\t\tstatus: mediaUsageRepairStatusSchema,\n\t\tindexedSourceCount: z.number().int().min(0),\n\t\tfailedSourceCount: z.number().int().min(0),\n\t\tskippedSourceCount: z.number().int().min(0),\n\t\tdeletedSourceCount: z.number().int().min(0),\n\t\tcollections: z.array(mediaUsageRepairCollectionSummarySchema),\n\t})\n\t.meta({ id: \"MediaUsageRepairResponse\" });\n\nexport type MediaUsageRepairRequest = z.infer<typeof mediaUsageRepairBody>;\nexport type MediaUsageRepairResponse = z.infer<typeof mediaUsageRepairResponseSchema>;\nexport type MediaUsageCoverageStatus = z.infer<typeof mediaUsageCoverageStatusSchema>;\nexport type MediaUsageCoverage = z.infer<typeof mediaUsageCoverageSchema>;\nexport type MediaUsageSummary = z.infer<typeof mediaUsageSummarySchema>;\nexport type MediaUsageOccurrenceDetail = z.infer<typeof mediaUsageOccurrenceDetailSchema>;\nexport type MediaUsageSourceDetail = z.infer<typeof mediaUsageSourceDetailSchema>;\nexport type MediaUsageEntryDetail = z.infer<typeof mediaUsageEntryDetailSchema>;\nexport type MediaUsageDetailsResponse = z.infer<typeof mediaUsageDetailsResponseSchema>;\n","import { z } from \"zod\";\n\nimport { cursorPaginationQuery } from \"./common.js\";\nimport { mediaUsageSummarySchema } from \"./media-usage.js\";\n\n// ---------------------------------------------------------------------------\n// Media: Input schemas\n// ---------------------------------------------------------------------------\n\n/**\n * Accepts a comma-separated string (from URL query params) or an array of\n * strings (from JSON body or programmatic use) and normalises to string[].\n */\nconst mimeTypeFilter = z\n\t.union([z.string(), z.array(z.string())])\n\t.transform((v) => {\n\t\tconst arr = Array.isArray(v) ? v : v.split(\",\");\n\t\treturn arr.map((s) => s.trim()).filter((s) => s.length > 0);\n\t})\n\t.optional();\n\nexport const mediaListQuery = cursorPaginationQuery\n\t.extend({\n\t\tmimeType: mimeTypeFilter,\n\t\t/** Case-insensitive filename substring search (also matches extensions). */\n\t\tq: z.string().trim().min(1).max(200).optional(),\n\t\tincludeUsage: z.literal(\"1\").optional().meta({\n\t\t\tdescription: \"Include a coverage-aware usage summary on each media item\",\n\t\t}),\n\t})\n\t.meta({ id: \"MediaListQuery\" });\n\nexport const mediaGetQuery = z\n\t.object({\n\t\tincludeUsage: z.literal(\"1\").optional().meta({\n\t\t\tdescription: \"Include a coverage-aware usage summary on the media item\",\n\t\t}),\n\t})\n\t.meta({ id: \"MediaGetQuery\" });\n\nexport const mediaUpdateBody = z\n\t.object({\n\t\talt: z.string().optional(),\n\t\tcaption: z.string().optional(),\n\t\twidth: z.number().int().positive().optional(),\n\t\theight: z.number().int().positive().optional(),\n\t})\n\t.meta({ id: \"MediaUpdateBody\" });\n\n/** Default maximum allowed file upload size (50 MB). */\nexport const DEFAULT_MAX_UPLOAD_SIZE = 50 * 1024 * 1024;\n\nexport function formatFileSize(bytes: number): string {\n\tif (bytes < 1024) return `${bytes}B`;\n\tif (bytes < 1024 * 1024) return `${Math.floor(bytes / 1024)}KB`;\n\treturn `${Math.floor(bytes / 1024 / 1024)}MB`;\n}\n\n// Matches a full MIME type (type/subtype) with an optional semicolon-delimited\n// parameter section. Forbids CR/LF to prevent header injection.\nexport const CONTENT_TYPE_RE = /^[a-z0-9][a-z0-9!#$&^_+\\-.]*\\/[a-z0-9!#$&^_+\\-.]+(\\s*;[^\\r\\n]*)?$/i;\n\nexport function mediaUploadUrlBody(maxSize: number) {\n\tif (!Number.isFinite(maxSize) || maxSize <= 0) {\n\t\tthrow new Error(`EmDash: maxUploadSize must be a positive finite number, got ${maxSize}`);\n\t}\n\treturn z\n\t\t.object({\n\t\t\tfilename: z.string().min(1, \"filename is required\"),\n\t\t\tcontentType: z\n\t\t\t\t.string()\n\t\t\t\t.min(1, \"contentType is required\")\n\t\t\t\t.regex(CONTENT_TYPE_RE, \"Invalid content type\"),\n\t\t\tsize: z\n\t\t\t\t.number()\n\t\t\t\t.int()\n\t\t\t\t.positive()\n\t\t\t\t.max(maxSize, `File size must not exceed ${formatFileSize(maxSize)}`),\n\t\t\tcontentHash: z.string().optional(),\n\t\t\tfieldId: z.string().optional(),\n\t\t})\n\t\t.meta({ id: \"MediaUploadUrlBody\" });\n}\n\nexport const mediaConfirmBody = z\n\t.object({\n\t\tsize: z.number().int().positive().optional(),\n\t\twidth: z.number().int().positive().optional(),\n\t\theight: z.number().int().positive().optional(),\n\t})\n\t.meta({ id: \"MediaConfirmBody\" });\n\nexport const mediaProviderListQuery = cursorPaginationQuery\n\t.extend({\n\t\tquery: z.string().optional(),\n\t\tmimeType: mimeTypeFilter,\n\t})\n\t.meta({ id: \"MediaProviderListQuery\" });\n\n// ---------------------------------------------------------------------------\n// Media: Response schemas\n// ---------------------------------------------------------------------------\n\nconst mediaStatusSchema = z.enum([\"pending\", \"ready\", \"failed\"]);\n\nexport const mediaItemSchema = z\n\t.object({\n\t\tid: z.string(),\n\t\tfilename: z.string(),\n\t\tmimeType: z.string(),\n\t\tsize: z.number().nullable(),\n\t\twidth: z.number().nullable(),\n\t\theight: z.number().nullable(),\n\t\talt: z.string().nullable(),\n\t\tcaption: z.string().nullable(),\n\t\tstorageKey: z.string(),\n\t\tstatus: mediaStatusSchema,\n\t\tcontentHash: z.string().nullable(),\n\t\tblurhash: z.string().nullable(),\n\t\tdominantColor: z.string().nullable(),\n\t\tcreatedAt: z.string(),\n\t\tauthorId: z.string().nullable(),\n\t})\n\t.meta({ id: \"MediaItem\" });\n\nexport const mediaResponseSchema = z\n\t.object({ item: mediaItemSchema })\n\t.meta({ id: \"MediaResponse\" });\n\nexport const mediaReadItemSchema = mediaItemSchema\n\t.extend({ usage: mediaUsageSummarySchema.optional() })\n\t.meta({ id: \"MediaReadItem\" });\n\nexport const mediaReadResponseSchema = z\n\t.object({ item: mediaReadItemSchema })\n\t.meta({ id: \"MediaReadResponse\" });\n\nexport const mediaListReadItemSchema = mediaReadItemSchema\n\t.extend({ url: z.string() })\n\t.meta({ id: \"MediaListReadItem\" });\n\nexport const mediaListReadResponseSchema = z\n\t.object({\n\t\titems: z.array(mediaListReadItemSchema),\n\t\tnextCursor: z.string().optional(),\n\t})\n\t.meta({ id: \"MediaListReadResponse\" });\n\nexport const mediaListResponseSchema = z\n\t.object({\n\t\titems: z.array(mediaItemSchema),\n\t\tnextCursor: z.string().optional(),\n\t})\n\t.meta({ id: \"MediaListResponse\" });\n\nexport const mediaUploadUrlResponseSchema = z\n\t.object({\n\t\tuploadUrl: z.string(),\n\t\tmethod: z.literal(\"PUT\"),\n\t\theaders: z.record(z.string(), z.string()),\n\t\tmediaId: z.string(),\n\t\tstorageKey: z.string(),\n\t\texpiresAt: z.string(),\n\t})\n\t.meta({ id: \"MediaUploadUrlResponse\" });\n\nexport const mediaExistingResponseSchema = z\n\t.object({\n\t\texisting: z.literal(true),\n\t\tmediaId: z.string(),\n\t\tstorageKey: z.string(),\n\t\turl: z.string(),\n\t})\n\t.meta({ id: \"MediaExistingResponse\" });\n\nexport const mediaConfirmResponseSchema = z\n\t.object({\n\t\titem: mediaItemSchema.extend({ url: z.string() }),\n\t})\n\t.meta({ id: \"MediaConfirmResponse\" });\n"],"mappings":"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"}
|