emdash 0.36.0 → 0.38.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/{activation-K0kGBWuJ.mjs → activation-DyNTe_Tl.mjs} +3 -3
- package/dist/{activation-K0kGBWuJ.mjs.map → activation-DyNTe_Tl.mjs.map} +1 -1
- package/dist/{adapters-CzL3H752.d.mts → adapters-DCEgOBXi.d.mts} +4 -2
- package/dist/{adapters-CzL3H752.d.mts.map → adapters-DCEgOBXi.d.mts.map} +1 -1
- package/dist/{allowed-origins-maylGaHv.mjs → allowed-origins-GFUVavRj.mjs} +2 -2
- package/dist/{allowed-origins-maylGaHv.mjs.map → allowed-origins-GFUVavRj.mjs.map} +1 -1
- package/dist/api/route-utils.d.mts +3 -3
- package/dist/api/route-utils.mjs +25 -24
- package/dist/api/route-utils.mjs.map +1 -1
- package/dist/api/schemas/index.d.mts +2 -2
- package/dist/api/schemas/index.mjs +5 -5
- package/dist/api-BvxJmnFY.mjs +10094 -0
- package/dist/api-BvxJmnFY.mjs.map +1 -0
- package/dist/{api-tokens-9YrrCoE6.mjs → api-tokens-xpGqMHrC.mjs} +2 -2
- package/dist/{api-tokens-9YrrCoE6.mjs.map → api-tokens-xpGqMHrC.mjs.map} +1 -1
- package/dist/{apply-B_VMpJ2P.mjs → apply-DLmM3R7f.mjs} +26 -22
- package/dist/apply-DLmM3R7f.mjs.map +1 -0
- package/dist/artifact-fetch-P2JXVwOq.mjs +972 -0
- package/dist/artifact-fetch-P2JXVwOq.mjs.map +1 -0
- package/dist/astro/image-endpoint.mjs +2 -2
- package/dist/astro/image-endpoint.mjs.map +1 -1
- package/dist/astro/index.d.mts +12 -12
- package/dist/astro/index.d.mts.map +1 -1
- package/dist/astro/index.mjs +138 -39
- package/dist/astro/index.mjs.map +1 -1
- package/dist/astro/middleware/auth.d.mts +10 -10
- package/dist/astro/middleware/auth.mjs +6 -6
- package/dist/astro/middleware/media-usage-write-fence.mjs +3 -3
- package/dist/astro/middleware/redirect.mjs +7 -5
- package/dist/astro/middleware/redirect.mjs.map +1 -1
- package/dist/astro/middleware/request-context.mjs +3 -3
- package/dist/astro/middleware/setup.mjs +1 -1
- package/dist/astro/middleware.d.mts +10 -10
- package/dist/astro/middleware.d.mts.map +1 -1
- package/dist/astro/middleware.mjs +223 -232
- 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 +3 -3
- package/dist/astro/routes/api/admin/api-tokens/index.d.mts.map +1 -1
- package/dist/astro/routes/api/admin/api-tokens/index.mjs +5 -5
- package/dist/astro/routes/api/admin/api-tokens/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +4 -4
- package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +9 -9
- package/dist/astro/routes/api/admin/byline-fields/index.mjs +9 -9
- package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +9 -9
- package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +17 -17
- package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +17 -17
- package/dist/astro/routes/api/admin/bylines/index.mjs +17 -17
- package/dist/astro/routes/api/admin/comments/_id_/status.mjs +13 -13
- package/dist/astro/routes/api/admin/comments/_id_.mjs +5 -5
- package/dist/astro/routes/api/admin/comments/bulk.mjs +10 -10
- package/dist/astro/routes/api/admin/comments/counts.mjs +5 -5
- package/dist/astro/routes/api/admin/comments/index.mjs +10 -10
- 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/activation.mjs +13 -13
- package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs +15 -15
- package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs +15 -15
- package/dist/astro/routes/api/admin/media-usage/progress.mjs +14 -14
- package/dist/astro/routes/api/admin/media-usage/repair.mjs +17 -17
- package/dist/astro/routes/api/admin/media-usage/work/index.mjs +15 -15
- package/dist/astro/routes/api/admin/media-usage/work/retry.mjs +15 -15
- package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +4 -4
- package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/admin/oauth-clients/index.mjs +4 -4
- package/dist/astro/routes/api/admin/oauth-clients/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +59 -56
- package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +59 -56
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +57 -54
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/mcp.mjs +4 -4
- package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs +57 -54
- package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +58 -55
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +58 -55
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/index.mjs +57 -54
- package/dist/astro/routes/api/admin/plugins/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +2 -2
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +57 -54
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +58 -55
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +57 -54
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +58 -55
- package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/_id_/update.d.mts.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs +64 -57
- package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +18 -16
- package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/install.d.mts.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/install.mjs +65 -58
- package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/verify.d.mts +8 -0
- package/dist/astro/routes/api/admin/plugins/registry/verify.d.mts.map +1 -0
- package/dist/astro/routes/api/admin/plugins/registry/verify.mjs +96 -0
- package/dist/astro/routes/api/admin/plugins/registry/verify.mjs.map +1 -0
- package/dist/astro/routes/api/admin/plugins/updates.mjs +57 -54
- package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +57 -54
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +2 -2
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +57 -54
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/users/_id_/disable.mjs +1 -1
- package/dist/astro/routes/api/admin/users/_id_/enable.mjs +1 -1
- package/dist/astro/routes/api/admin/users/_id_/index.mjs +6 -6
- package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +3 -3
- package/dist/astro/routes/api/admin/users/index.mjs +6 -6
- package/dist/astro/routes/api/auth/dev-bypass.mjs +3 -3
- package/dist/astro/routes/api/auth/invite/accept.mjs +1 -1
- package/dist/astro/routes/api/auth/invite/complete.mjs +11 -11
- package/dist/astro/routes/api/auth/invite/index.mjs +8 -8
- package/dist/astro/routes/api/auth/invite/register-options.mjs +10 -10
- package/dist/astro/routes/api/auth/logout.mjs +2 -2
- package/dist/astro/routes/api/auth/magic-link/send.mjs +10 -10
- 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/oauth/_provider_/callback.mjs +4 -4
- package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
- package/dist/astro/routes/api/auth/passkey/_id_.mjs +6 -6
- package/dist/astro/routes/api/auth/passkey/index.mjs +1 -1
- package/dist/astro/routes/api/auth/passkey/options.mjs +12 -12
- package/dist/astro/routes/api/auth/passkey/register/options.mjs +10 -10
- package/dist/astro/routes/api/auth/passkey/register/verify.mjs +11 -11
- package/dist/astro/routes/api/auth/passkey/verify.mjs +11 -11
- package/dist/astro/routes/api/auth/signup/complete.mjs +11 -11
- package/dist/astro/routes/api/auth/signup/request.mjs +10 -10
- package/dist/astro/routes/api/auth/signup/verify.mjs +1 -1
- package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +14 -14
- package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +13 -13
- package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.d.mts.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +19 -5
- package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/lock.d.mts +10 -0
- package/dist/astro/routes/api/content/_collection_/_id_/lock.d.mts.map +1 -0
- package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs +66 -0
- package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs.map +1 -0
- package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +11 -11
- package/dist/astro/routes/api/content/_collection_/_id_/publish.d.mts.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +18 -10
- package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs +20 -18
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs +20 -18
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/_id_/schedule.d.mts.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +15 -8
- package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +16 -15
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/_id_/unpublish.d.mts.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +19 -5
- package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_.d.mts.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_.mjs +23 -11
- package/dist/astro/routes/api/content/_collection_/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/authors.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/index.mjs +14 -9
- package/dist/astro/routes/api/content/_collection_/index.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/trash.mjs +7 -7
- package/dist/astro/routes/api/dashboard.mjs +8 -8
- package/dist/astro/routes/api/dev/emails.mjs +2 -2
- package/dist/astro/routes/api/import/probe.d.mts +3 -3
- package/dist/astro/routes/api/import/probe.mjs +18 -18
- package/dist/astro/routes/api/import/wordpress/analyze.mjs +3 -3
- package/dist/astro/routes/api/import/wordpress/execute.d.mts +11 -11
- package/dist/astro/routes/api/import/wordpress/execute.mjs +15 -14
- package/dist/astro/routes/api/import/wordpress/execute.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress/media.d.mts +10 -10
- package/dist/astro/routes/api/import/wordpress/media.mjs +11 -11
- package/dist/astro/routes/api/import/wordpress/prepare.mjs +10 -10
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +11 -11
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +13 -13
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +18 -18
- package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +11 -11
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +29 -28
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs.map +1 -1
- package/dist/astro/routes/api/manifest.mjs +4 -4
- package/dist/astro/routes/api/manifest.mjs.map +1 -1
- package/dist/astro/routes/api/mcp.mjs +213 -74
- package/dist/astro/routes/api/mcp.mjs.map +1 -1
- package/dist/astro/routes/api/media/_id_/confirm.mjs +11 -11
- package/dist/astro/routes/api/media/_id_/replace.d.mts +8 -0
- package/dist/astro/routes/api/media/_id_/replace.d.mts.map +1 -0
- package/dist/astro/routes/api/media/_id_/replace.mjs +91 -0
- package/dist/astro/routes/api/media/_id_/replace.mjs.map +1 -0
- package/dist/astro/routes/api/media/_id_/upload.mjs +6 -6
- package/dist/astro/routes/api/media/_id_/usage.mjs +19 -19
- package/dist/astro/routes/api/media/_id_.mjs +18 -18
- package/dist/astro/routes/api/media/file/_...key_.d.mts.map +1 -1
- package/dist/astro/routes/api/media/file/_...key_.mjs +3 -2
- package/dist/astro/routes/api/media/file/_...key_.mjs.map +1 -1
- package/dist/astro/routes/api/media/folders/_id_.mjs +8 -8
- package/dist/astro/routes/api/media/folders/index.mjs +8 -8
- package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +2 -2
- package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +2 -2
- package/dist/astro/routes/api/media/providers/index.mjs +2 -2
- package/dist/astro/routes/api/media/upload-url.mjs +16 -14
- package/dist/astro/routes/api/media/upload-url.mjs.map +1 -1
- package/dist/astro/routes/api/media.d.mts.map +1 -1
- package/dist/astro/routes/api/media.mjs +53 -30
- package/dist/astro/routes/api/media.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/items/_id_.d.mts.map +1 -1
- package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +20 -13
- package/dist/astro/routes/api/menus/_name_/items/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/items.d.mts.map +1 -1
- package/dist/astro/routes/api/menus/_name_/items.mjs +15 -11
- package/dist/astro/routes/api/menus/_name_/items.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/reorder.d.mts.map +1 -1
- package/dist/astro/routes/api/menus/_name_/reorder.mjs +15 -11
- package/dist/astro/routes/api/menus/_name_/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/translations.d.mts.map +1 -1
- package/dist/astro/routes/api/menus/_name_/translations.mjs +16 -12
- package/dist/astro/routes/api/menus/_name_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_.d.mts.map +1 -1
- package/dist/astro/routes/api/menus/_name_.mjs +21 -14
- package/dist/astro/routes/api/menus/_name_.mjs.map +1 -1
- package/dist/astro/routes/api/menus/index.d.mts.map +1 -1
- package/dist/astro/routes/api/menus/index.mjs +15 -11
- package/dist/astro/routes/api/menus/index.mjs.map +1 -1
- package/dist/astro/routes/api/oauth/authorize.mjs +6 -6
- package/dist/astro/routes/api/oauth/device/authorize.mjs +5 -5
- package/dist/astro/routes/api/oauth/device/code.mjs +8 -8
- package/dist/astro/routes/api/oauth/device/token.mjs +7 -7
- package/dist/astro/routes/api/oauth/register.mjs +2 -2
- package/dist/astro/routes/api/oauth/token/refresh.mjs +5 -5
- package/dist/astro/routes/api/oauth/token/revoke.mjs +5 -5
- package/dist/astro/routes/api/oauth/token.mjs +5 -5
- package/dist/astro/routes/api/openapi.json.mjs +184 -52
- package/dist/astro/routes/api/openapi.json.mjs.map +1 -1
- package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +4 -4
- package/dist/astro/routes/api/redirects/404s/index.mjs +12 -11
- package/dist/astro/routes/api/redirects/404s/index.mjs.map +1 -1
- package/dist/astro/routes/api/redirects/404s/summary.mjs +12 -11
- package/dist/astro/routes/api/redirects/404s/summary.mjs.map +1 -1
- package/dist/astro/routes/api/redirects/_id_.mjs +13 -12
- package/dist/astro/routes/api/redirects/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/redirects/index.mjs +13 -12
- package/dist/astro/routes/api/redirects/index.mjs.map +1 -1
- package/dist/astro/routes/api/relations/_id_/index.mjs +20 -18
- package/dist/astro/routes/api/relations/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/relations/_id_/translations.mjs +15 -13
- package/dist/astro/routes/api/relations/_id_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/relations/index.mjs +20 -18
- package/dist/astro/routes/api/relations/index.mjs.map +1 -1
- package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +2 -2
- package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +3 -3
- package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +57 -54
- package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +57 -54
- package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +57 -54
- package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +57 -54
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/index.mjs +57 -54
- package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/reorder.mjs +57 -54
- package/dist/astro/routes/api/schema/collections/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/schema/index.mjs +13 -11
- package/dist/astro/routes/api/schema/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs +57 -54
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/schema/orphans/index.mjs +57 -54
- package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
- package/dist/astro/routes/api/search/enable.mjs +12 -11
- package/dist/astro/routes/api/search/enable.mjs.map +1 -1
- package/dist/astro/routes/api/search/index.mjs +11 -10
- package/dist/astro/routes/api/search/index.mjs.map +1 -1
- package/dist/astro/routes/api/search/rebuild.mjs +12 -11
- package/dist/astro/routes/api/search/rebuild.mjs.map +1 -1
- package/dist/astro/routes/api/search/stats.mjs +7 -6
- package/dist/astro/routes/api/search/stats.mjs.map +1 -1
- package/dist/astro/routes/api/search/suggest.mjs +11 -10
- package/dist/astro/routes/api/search/suggest.mjs.map +1 -1
- package/dist/astro/routes/api/sections/_slug_.mjs +11 -10
- package/dist/astro/routes/api/sections/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/sections/index.mjs +11 -10
- package/dist/astro/routes/api/sections/index.mjs.map +1 -1
- package/dist/astro/routes/api/settings/backups/archives/_name_.mjs +7 -6
- package/dist/astro/routes/api/settings/backups/archives/_name_.mjs.map +1 -1
- package/dist/astro/routes/api/settings/backups/archives/index.mjs +6 -5
- package/dist/astro/routes/api/settings/backups/archives/index.mjs.map +1 -1
- package/dist/astro/routes/api/settings/backups/export.mjs +7 -6
- package/dist/astro/routes/api/settings/backups/export.mjs.map +1 -1
- package/dist/astro/routes/api/settings/backups/index.mjs +8 -7
- package/dist/astro/routes/api/settings/backups/index.mjs.map +1 -1
- package/dist/astro/routes/api/settings/email.mjs +5 -5
- package/dist/astro/routes/api/settings/email.mjs.map +1 -1
- package/dist/astro/routes/api/settings.d.mts.map +1 -1
- package/dist/astro/routes/api/settings.mjs +21 -17
- package/dist/astro/routes/api/settings.mjs.map +1 -1
- package/dist/astro/routes/api/setup/admin-verify.mjs +12 -12
- package/dist/astro/routes/api/setup/admin.mjs +11 -11
- package/dist/astro/routes/api/setup/dev-bypass.mjs +35 -33
- package/dist/astro/routes/api/setup/dev-bypass.mjs.map +1 -1
- package/dist/astro/routes/api/setup/dev-reset.mjs +2 -2
- package/dist/astro/routes/api/setup/index.mjs +35 -33
- package/dist/astro/routes/api/setup/index.mjs.map +1 -1
- package/dist/astro/routes/api/setup/status.mjs +3 -3
- package/dist/astro/routes/api/snapshot.mjs +8 -7
- package/dist/astro/routes/api/snapshot.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/reorder.d.mts.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs +22 -17
- package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.d.mts.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +23 -18
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.d.mts.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +27 -19
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.d.mts.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +22 -17
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/translations.mjs +16 -15
- package/dist/astro/routes/api/taxonomies/_name_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_.d.mts.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_.mjs +28 -20
- package/dist/astro/routes/api/taxonomies/_name_.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/index.d.mts.map +1 -1
- package/dist/astro/routes/api/taxonomies/index.mjs +22 -17
- package/dist/astro/routes/api/taxonomies/index.mjs.map +1 -1
- package/dist/astro/routes/api/themes/preview.mjs +5 -5
- package/dist/astro/routes/api/typegen.mjs +4 -4
- package/dist/astro/routes/api/well-known/auth.mjs +2 -2
- package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +2 -2
- package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +2 -2
- package/dist/astro/routes/api/widget-areas/_name_/reorder.d.mts.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +10 -8
- package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.d.mts.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +18 -14
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_/widgets.d.mts.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +16 -13
- package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_.d.mts.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_.mjs +9 -7
- package/dist/astro/routes/api/widget-areas/_name_.mjs.map +1 -1
- package/dist/astro/routes/api/widget-areas/index.d.mts.map +1 -1
- package/dist/astro/routes/api/widget-areas/index.mjs +16 -13
- package/dist/astro/routes/api/widget-areas/index.mjs.map +1 -1
- package/dist/astro/routes/api/widget-components.mjs +2 -2
- package/dist/astro/routes/robots.txt.mjs +8 -8
- package/dist/astro/routes/sitemap-_collection_.xml.mjs +13 -12
- package/dist/astro/routes/sitemap-_collection_.xml.mjs.map +1 -1
- package/dist/astro/routes/sitemap.xml.mjs +9 -9
- package/dist/astro/types.d.mts +50 -20
- package/dist/astro/types.d.mts.map +1 -1
- package/dist/auth/providers/github.d.mts +1 -1
- package/dist/auth/providers/google.d.mts +1 -1
- package/dist/{authorize-ByYs-Uxs.mjs → authorize-C2QHlWSS.mjs} +2 -2
- package/dist/{authorize-ByYs-Uxs.mjs.map → authorize-C2QHlWSS.mjs.map} +1 -1
- package/dist/{backup-ChyHfIoX.mjs → backup-oS8ft5Cm.mjs} +5 -5
- package/dist/{backup-ChyHfIoX.mjs.map → backup-oS8ft5Cm.mjs.map} +1 -1
- package/dist/{bundle-DZFhFurR.mjs → bundle-CL0JjIPx.mjs} +4 -4
- package/dist/{bundle-DZFhFurR.mjs.map → bundle-CL0JjIPx.mjs.map} +1 -1
- package/dist/{byline-Cpnwrje1.mjs → byline-Vdi85CsZ.mjs} +27 -14
- package/dist/byline-Vdi85CsZ.mjs.map +1 -0
- package/dist/{byline-fields-CAyA_Umd.mjs → byline-fields-DPVRFMz2.mjs} +2 -2
- package/dist/{byline-fields-CAyA_Umd.mjs.map → byline-fields-DPVRFMz2.mjs.map} +1 -1
- package/dist/{byline-registry-Bpu9-MVs.mjs → byline-registry-BxDGIO0I.mjs} +2 -2
- package/dist/{byline-registry-Bpu9-MVs.mjs.map → byline-registry-BxDGIO0I.mjs.map} +1 -1
- package/dist/{bylines-BSo9B9RX.mjs → bylines-BX8QhcTk.mjs} +7 -7
- package/dist/{bylines-BSo9B9RX.mjs.map → bylines-BX8QhcTk.mjs.map} +1 -1
- package/dist/{bylines-CHjvehVX.mjs → bylines-w-E1IEQd.mjs} +3 -3
- package/dist/{bylines-CHjvehVX.mjs.map → bylines-w-E1IEQd.mjs.map} +1 -1
- package/dist/{cache-5VirJ2Cn.mjs → cache--7HKu5Xm.mjs} +4 -4
- package/dist/{cache-5VirJ2Cn.mjs.map → cache--7HKu5Xm.mjs.map} +1 -1
- package/dist/{capture-triggers-CNW1q3HK.mjs → capture-triggers-CeAsC76Z.mjs} +2 -2
- package/dist/{capture-triggers-CNW1q3HK.mjs.map → capture-triggers-CeAsC76Z.mjs.map} +1 -1
- package/dist/{challenge-store-D5pSY2S1.mjs → challenge-store-BIOak-tp.mjs} +5 -3
- package/dist/challenge-store-BIOak-tp.mjs.map +1 -0
- package/dist/chrome-tags-DzDQBCjX.mjs +24 -0
- package/dist/chrome-tags-DzDQBCjX.mjs.map +1 -0
- package/dist/{chunks-bNiX6_DR.mjs → chunks-VG_tyqnP.mjs} +2 -2
- package/dist/{chunks-bNiX6_DR.mjs.map → chunks-VG_tyqnP.mjs.map} +1 -1
- package/dist/cli/index.mjs +68 -40
- package/dist/cli/index.mjs.map +1 -1
- package/dist/client/cf-access.d.mts +1 -1
- package/dist/client/index.d.mts +17 -7
- package/dist/client/index.d.mts.map +1 -1
- package/dist/client/index.mjs +17 -12
- package/dist/client/index.mjs.map +1 -1
- package/dist/{collection-deletion-m_oi2c0N.mjs → collection-deletion-BCwaWTDw.mjs} +4 -4
- package/dist/{collection-deletion-m_oi2c0N.mjs.map → collection-deletion-BCwaWTDw.mjs.map} +1 -1
- package/dist/collection-slugs-cache-7lTmNzeA.mjs +85 -0
- package/dist/collection-slugs-cache-7lTmNzeA.mjs.map +1 -0
- package/dist/{comment-reaction-CRuItEjt.mjs → comment-reaction-CDyvPQRj.mjs} +2 -2
- package/dist/{comment-reaction-CRuItEjt.mjs.map → comment-reaction-CDyvPQRj.mjs.map} +1 -1
- package/dist/{comment-DhvLEdhQ.mjs → comment-vxOzWbZN.mjs} +2 -2
- package/dist/{comment-DhvLEdhQ.mjs.map → comment-vxOzWbZN.mjs.map} +1 -1
- package/dist/{comments-CLj4bi8I.mjs → comments-VzmVLyaC.mjs} +2 -2
- package/dist/{comments-CLj4bi8I.mjs.map → comments-VzmVLyaC.mjs.map} +1 -1
- package/dist/{components-v4U4DT2y.mjs → components-CL6Wkdk-.mjs} +1 -1
- package/dist/{components-v4U4DT2y.mjs.map → components-CL6Wkdk-.mjs.map} +1 -1
- package/dist/config--eWjQJE5.mjs +217 -0
- package/dist/config--eWjQJE5.mjs.map +1 -0
- package/dist/{index-DWbJrsAg.d.mts → config-CGAhyOjP.d.mts} +276 -76
- package/dist/config-CGAhyOjP.d.mts.map +1 -0
- package/dist/{config-DrfghTPe.d.mts → config-ChFzshGd.d.mts} +1 -1
- package/dist/{config-DrfghTPe.d.mts.map → config-ChFzshGd.d.mts.map} +1 -1
- package/dist/{content-CP-SeXNa.mjs → content-CNfMWuhY.mjs} +202 -46
- package/dist/content-CNfMWuhY.mjs.map +1 -0
- package/dist/{content-list-query-BhejKVqb.d.mts → content-list-query-B8d4UQp9.d.mts} +1 -1
- package/dist/{content-list-query-BhejKVqb.d.mts.map → content-list-query-B8d4UQp9.d.mts.map} +1 -1
- package/dist/{content-refresh-DLOfIhYc.mjs → content-refresh-GTMyi2Xy.mjs} +53 -26
- package/dist/content-refresh-GTMyi2Xy.mjs.map +1 -0
- package/dist/{content-repair-BCxzy0r4.mjs → content-repair-CIMt5C0U.mjs} +4 -4
- package/dist/{content-repair-BCxzy0r4.mjs.map → content-repair-CIMt5C0U.mjs.map} +1 -1
- package/dist/{context-BR5hRWiK.mjs → context-C9PB8vGd.mjs} +308 -33
- package/dist/context-C9PB8vGd.mjs.map +1 -0
- package/dist/{cron-CWfWrWKG.mjs → cron-DHAy9oyq.mjs} +1 -1
- package/dist/{cron-CWfWrWKG.mjs.map → cron-DHAy9oyq.mjs.map} +1 -1
- package/dist/{dashboard-CkIV2rnQ.mjs → dashboard-BNSvAN8A.mjs} +5 -5
- package/dist/{dashboard-CkIV2rnQ.mjs.map → dashboard-BNSvAN8A.mjs.map} +1 -1
- package/dist/db/index.d.mts +3 -3
- package/dist/db/index.mjs +2 -2
- package/dist/db/index.mjs.map +1 -1
- package/dist/db/libsql-migrations.d.mts +1 -1
- package/dist/db/libsql-migrations.mjs +5 -5
- package/dist/db/libsql.d.mts +1 -1
- package/dist/db/postgres-migrations.d.mts +1 -1
- package/dist/db/postgres-migrations.mjs +5 -5
- package/dist/db/postgres.d.mts +1 -1
- package/dist/db/postgres.d.mts.map +1 -1
- package/dist/db/postgres.mjs +19 -3
- package/dist/db/postgres.mjs.map +1 -1
- package/dist/db/sqlite-migrations.d.mts +1 -1
- package/dist/db/sqlite-migrations.mjs +5 -5
- package/dist/db/sqlite.d.mts +1 -1
- package/dist/db/sqlite.mjs +1 -1
- package/dist/{default-YMEfcQUx.mjs → default-ByZ0JqZo.mjs} +1 -1
- package/dist/{default-YMEfcQUx.mjs.map → default-ByZ0JqZo.mjs.map} +1 -1
- package/dist/{deferred-tasks-DfqxH5Xf.d.mts → deferred-tasks-Cu4NSJpa.d.mts} +1 -1
- package/dist/{deferred-tasks-DfqxH5Xf.d.mts.map → deferred-tasks-Cu4NSJpa.d.mts.map} +1 -1
- package/dist/dev-typegen-DHT7lcMU.mjs +29 -0
- package/dist/dev-typegen-DHT7lcMU.mjs.map +1 -0
- package/dist/{device-flow-CojjSBwb.mjs → device-flow-Cf6bhCCT.mjs} +4 -4
- package/dist/{device-flow-CojjSBwb.mjs.map → device-flow-Cf6bhCCT.mjs.map} +1 -1
- package/dist/{dialect-helpers-BSbfaO3F.mjs → dialect-helpers-BcQvkHgn.mjs} +83 -2
- package/dist/dialect-helpers-BcQvkHgn.mjs.map +1 -0
- package/dist/{direct-executor-BWeWiRYB.mjs → direct-executor-yAyUGSqB.mjs} +3 -3
- package/dist/{direct-executor-BWeWiRYB.mjs.map → direct-executor-yAyUGSqB.mjs.map} +1 -1
- package/dist/{dist-89xCrGqi.mjs → dist-BAsh8dbf.mjs} +1 -1
- package/dist/{dist-89xCrGqi.mjs.map → dist-BAsh8dbf.mjs.map} +1 -1
- package/dist/{email-console-CEJgR_LB.mjs → email-console-DNup1Fku.mjs} +1 -1
- package/dist/{email-console-CEJgR_LB.mjs.map → email-console-DNup1Fku.mjs.map} +1 -1
- package/dist/{enrich-BX0IDp4z.mjs → enrich-t2Xvjdqa.mjs} +3 -3
- package/dist/{enrich-BX0IDp4z.mjs.map → enrich-t2Xvjdqa.mjs.map} +1 -1
- package/dist/entry-lock-BEr8gDkG.mjs +163 -0
- package/dist/entry-lock-BEr8gDkG.mjs.map +1 -0
- package/dist/{relations-C7B46bcU.d.mts → entry-lock-CGAtrwAR.d.mts} +265 -76
- package/dist/entry-lock-CGAtrwAR.d.mts.map +1 -0
- package/dist/{redirects-CRIM55KH.mjs → entry-lock-DIYHAaSw.mjs} +112 -34
- package/dist/entry-lock-DIYHAaSw.mjs.map +1 -0
- package/dist/entry-locks-BEcX7ET0.mjs +167 -0
- package/dist/entry-locks-BEcX7ET0.mjs.map +1 -0
- package/dist/{error-D9w94fjV.mjs → error-BDcFyoRt.mjs} +2 -2
- package/dist/{error-D9w94fjV.mjs.map → error-BDcFyoRt.mjs.map} +1 -1
- package/dist/{errors-n2j49uNf.mjs → errors-DvMdNrgf.mjs} +10 -1
- package/dist/errors-DvMdNrgf.mjs.map +1 -0
- package/dist/{escape-DN4Qmjsl.mjs → escape-B3asJC6W.mjs} +1 -1
- package/dist/{escape-DN4Qmjsl.mjs.map → escape-B3asJC6W.mjs.map} +1 -1
- package/dist/{field-defs-cache-Bh4q6oar.mjs → field-defs-cache-Cf5FHK0M.mjs} +5 -5
- package/dist/{field-defs-cache-Bh4q6oar.mjs.map → field-defs-cache-Cf5FHK0M.mjs.map} +1 -1
- package/dist/{fts-manager-BhOdW0bi.mjs → fts-manager-iddym8cd.mjs} +4 -4
- package/dist/{fts-manager-BhOdW0bi.mjs.map → fts-manager-iddym8cd.mjs.map} +1 -1
- package/dist/{hash-CTcngWvj.mjs → hash-BRweX6jz.mjs} +1 -1
- package/dist/{hash-CTcngWvj.mjs.map → hash-BRweX6jz.mjs.map} +1 -1
- package/dist/hook-result-BrshYHLx.d.mts +31 -0
- package/dist/hook-result-BrshYHLx.d.mts.map +1 -0
- package/dist/{hreflang-7pTHsLZJ.d.mts → hreflang-CQpu5bMy.d.mts} +2 -2
- package/dist/{hreflang-7pTHsLZJ.d.mts.map → hreflang-CQpu5bMy.d.mts.map} +1 -1
- package/dist/{hreflang-Huc6O5wa.mjs → hreflang-DshnweTC.mjs} +9 -8
- package/dist/{hreflang-Huc6O5wa.mjs.map → hreflang-DshnweTC.mjs.map} +1 -1
- package/dist/{identity-DXmb4aVp.mjs → identity-CjGKDq8J.mjs} +3 -3
- package/dist/{identity-DXmb4aVp.mjs.map → identity-CjGKDq8J.mjs.map} +1 -1
- package/dist/{import-C4_O3KXU.mjs → import-D96g2otw.mjs} +6 -6
- package/dist/{import-C4_O3KXU.mjs.map → import-D96g2otw.mjs.map} +1 -1
- package/dist/{index-6bRee8zb.d.mts → index-1ECYpfiF.d.mts} +3 -3
- package/dist/{index-6bRee8zb.d.mts.map → index-1ECYpfiF.d.mts.map} +1 -1
- package/dist/index.d.mts +22 -21
- package/dist/index.mjs +84 -81
- package/dist/{init-lock-DJkX6Hto.mjs → init-lock-CFNBe_iH.mjs} +1 -1
- package/dist/{init-lock-DJkX6Hto.mjs.map → init-lock-CFNBe_iH.mjs.map} +1 -1
- package/dist/{load-Bo7fZAbg.mjs → load-DPtY9cZo.mjs} +2 -2
- package/dist/{load-Bo7fZAbg.mjs.map → load-DPtY9cZo.mjs.map} +1 -1
- package/dist/{loader-ZsjE4paL.mjs → loader-WJi6GFRn.mjs} +90 -17
- package/dist/loader-WJi6GFRn.mjs.map +1 -0
- package/dist/{manifest-builder-QXuqvVMP.mjs → manifest-builder-BfNlGQIA.mjs} +2 -2
- package/dist/{manifest-builder-QXuqvVMP.mjs.map → manifest-builder-BfNlGQIA.mjs.map} +1 -1
- package/dist/{manifest-schema-CUYPfCEH.mjs → manifest-schema-CILooI5J.mjs} +5 -5
- package/dist/manifest-schema-CILooI5J.mjs.map +1 -0
- package/dist/media/image-endpoint.d.mts +4 -2
- package/dist/media/image-endpoint.d.mts.map +1 -1
- package/dist/media/image-endpoint.mjs +6 -4
- package/dist/media/image-endpoint.mjs.map +1 -1
- package/dist/media/index.d.mts +1 -1
- package/dist/media/index.mjs +3 -3
- package/dist/media/local-runtime.d.mts +12 -12
- package/dist/media/local-runtime.mjs +7 -7
- package/dist/{media-D6SeAfBl.mjs → media-BBm8Wg3f.mjs} +30 -2
- package/dist/media-BBm8Wg3f.mjs.map +1 -0
- package/dist/{media-BjwNuLEu.mjs → media-C1EIZKh1.mjs} +35 -5
- package/dist/media-C1EIZKh1.mjs.map +1 -0
- package/dist/{media-allowlist-D35v7bmL.mjs → media-allowlist-elXJgb_K.mjs} +2 -2
- package/dist/{media-allowlist-D35v7bmL.mjs.map → media-allowlist-elXJgb_K.mjs.map} +1 -1
- package/dist/{media-folders-D-0CmRZj.mjs → media-folders-DASfX_DH.mjs} +1 -1
- package/dist/{media-folders-D-0CmRZj.mjs.map → media-folders-DASfX_DH.mjs.map} +1 -1
- package/dist/{media-upload-C7bLXGcI.mjs → media-upload-C7_AQJ5v.mjs} +9 -9
- package/dist/{media-upload-C7bLXGcI.mjs.map → media-upload-C7_AQJ5v.mjs.map} +1 -1
- package/dist/{media-url-DH7giMx_.mjs → media-url-8dVl1loq.mjs} +19 -2
- package/dist/media-url-8dVl1loq.mjs.map +1 -0
- package/dist/{media-usage-BTRJvS6V.mjs → media-usage-C1EswMTq.mjs} +10 -10
- package/dist/{media-usage-BTRJvS6V.mjs.map → media-usage-C1EswMTq.mjs.map} +1 -1
- package/dist/{media-usage-activation-Dx0kPV6b.mjs → media-usage-activation-CrHNltlL.mjs} +3 -3
- package/dist/{media-usage-activation-Dx0kPV6b.mjs.map → media-usage-activation-CrHNltlL.mjs.map} +1 -1
- package/dist/{media-usage-work-C-fhM30c.mjs → media-usage-work-C5B1zT1c.mjs} +2 -2
- package/dist/{media-usage-work-C-fhM30c.mjs.map → media-usage-work-C5B1zT1c.mjs.map} +1 -1
- package/dist/{media-usage-work-DWb2XPMI.mjs → media-usage-work-IkQx_Yz6.mjs} +4 -4
- package/dist/{media-usage-work-DWb2XPMI.mjs.map → media-usage-work-IkQx_Yz6.mjs.map} +1 -1
- package/dist/{media-usage-write-fence-BwoJVRDC.mjs → media-usage-write-fence-B9anjOSg.mjs} +3 -3
- package/dist/{media-usage-write-fence-BwoJVRDC.mjs.map → media-usage-write-fence-B9anjOSg.mjs.map} +1 -1
- package/dist/{menus-CNg0QlDt.mjs → menus-D8mC4eaN.mjs} +406 -175
- package/dist/menus-D8mC4eaN.mjs.map +1 -0
- package/dist/{menus-CD7EFLwz.mjs → menus-UdwjHZJC.mjs} +12 -4
- package/dist/{menus-CD7EFLwz.mjs.map → menus-UdwjHZJC.mjs.map} +1 -1
- package/dist/migrations/index.d.mts +1 -1
- package/dist/migrations/index.mjs +4 -4
- package/dist/{mime-CUIG6x84.mjs → mime-DYpsOAny.mjs} +1 -1
- package/dist/{mime-CUIG6x84.mjs.map → mime-DYpsOAny.mjs.map} +1 -1
- package/dist/{mode-DaUM_MB2.mjs → mode-Dm4BHhRH.mjs} +1 -1
- package/dist/{mode-DaUM_MB2.mjs.map → mode-Dm4BHhRH.mjs.map} +1 -1
- package/dist/{node-sqlite-compat-Udb4Y-rs.mjs → node-sqlite-compat-2sezm-Zd.mjs} +1 -1
- package/dist/{node-sqlite-compat-Udb4Y-rs.mjs.map → node-sqlite-compat-2sezm-Zd.mjs.map} +1 -1
- package/dist/{normalize-CSxdKBVa.mjs → normalize-4nkKGsuW.mjs} +15 -5
- package/dist/normalize-4nkKGsuW.mjs.map +1 -0
- package/dist/{oauth-authorization-Dpsb-fMJ.mjs → oauth-authorization-BxE_lURD.mjs} +4 -4
- package/dist/{oauth-authorization-Dpsb-fMJ.mjs.map → oauth-authorization-BxE_lURD.mjs.map} +1 -1
- package/dist/{oauth-clients-Bxnoe_67.mjs → oauth-clients-DJIdOdq0.mjs} +1 -1
- package/dist/{oauth-clients-Bxnoe_67.mjs.map → oauth-clients-DJIdOdq0.mjs.map} +1 -1
- package/dist/{oauth-state-store-0C4s0K6w.mjs → oauth-state-store-CsdxP57n.mjs} +1 -1
- package/dist/{oauth-state-store-0C4s0K6w.mjs.map → oauth-state-store-CsdxP57n.mjs.map} +1 -1
- package/dist/{oauth-user-lookup-wlGYSeqX.mjs → oauth-user-lookup-HzzW-dkF.mjs} +1 -1
- package/dist/{oauth-user-lookup-wlGYSeqX.mjs.map → oauth-user-lookup-HzzW-dkF.mjs.map} +1 -1
- package/dist/object-cache/memory.d.mts +1 -1
- package/dist/{object-cache-71tPfV4A.mjs → object-cache-DVKnyOfy.mjs} +19 -3
- package/dist/object-cache-DVKnyOfy.mjs.map +1 -0
- package/dist/{options-BHPeIbBd.mjs → options-D1FBiAv1.mjs} +60 -5
- package/dist/options-D1FBiAv1.mjs.map +1 -0
- package/dist/{options-BhZIeFY1.d.mts → options-D8Y0VHc7.d.mts} +30 -11
- package/dist/options-D8Y0VHc7.d.mts.map +1 -0
- package/dist/page/index.d.mts +2 -2
- package/dist/page/index.d.mts.map +1 -1
- package/dist/page/index.mjs +12 -0
- package/dist/page/index.mjs.map +1 -1
- package/dist/{parse-BRJg1kz8.mjs → parse-WRg5C3NX.mjs} +2 -2
- package/dist/{parse-BRJg1kz8.mjs.map → parse-WRg5C3NX.mjs.map} +1 -1
- package/dist/{passkey-config-B3P0nHRR.mjs → passkey-config-qIdO-wF6.mjs} +1 -1
- package/dist/{passkey-config-B3P0nHRR.mjs.map → passkey-config-qIdO-wF6.mjs.map} +1 -1
- package/dist/{patterns-D9iDO3j8.mjs → patterns-DC8CLptu.mjs} +1 -1
- package/dist/{patterns-D9iDO3j8.mjs.map → patterns-DC8CLptu.mjs.map} +1 -1
- package/dist/{placeholder-BR4ZhVJl.d.mts → placeholder-COrvARyD.d.mts} +1 -1
- package/dist/{placeholder-BR4ZhVJl.d.mts.map → placeholder-COrvARyD.d.mts.map} +1 -1
- package/dist/plugin-types.d.mts +8 -3
- package/dist/plugin-types.d.mts.map +1 -1
- package/dist/plugin-utils.d.mts +10 -10
- package/dist/plugins/adapt-sandbox-entry.d.mts +10 -10
- package/dist/plugins/adapt-sandbox-entry.mjs +2 -2
- package/dist/{policy-BVRganJQ.mjs → policy-XCfb-IE9.mjs} +2 -2
- package/dist/{policy-BVRganJQ.mjs.map → policy-XCfb-IE9.mjs.map} +1 -1
- package/dist/{portable-text-C8Tvp4_g.mjs → portable-text-BS3d5n-0.mjs} +1 -1
- package/dist/{portable-text-C8Tvp4_g.mjs.map → portable-text-BS3d5n-0.mjs.map} +1 -1
- package/dist/{preview-dn2dUyM0.mjs → preview-BxwsGgGp.mjs} +2 -2
- package/dist/{preview-dn2dUyM0.mjs.map → preview-BxwsGgGp.mjs.map} +1 -1
- package/dist/{protocol-CuBEsqgE.d.mts → protocol-CLn58-nw.d.mts} +2 -2
- package/dist/{protocol-CuBEsqgE.d.mts.map → protocol-CLn58-nw.d.mts.map} +1 -1
- package/dist/{public-url-DRz_AinV.mjs → public-url-FWWAvnre.mjs} +1 -1
- package/dist/{public-url-DRz_AinV.mjs.map → public-url-FWWAvnre.mjs.map} +1 -1
- package/dist/{query-D18vTdha.mjs → query-DygOte9M.mjs} +26 -17
- package/dist/query-DygOte9M.mjs.map +1 -0
- package/dist/{query-tZDEdtCN.mjs → query-gtXT03Wc.mjs} +5 -5
- package/dist/{query-tZDEdtCN.mjs.map → query-gtXT03Wc.mjs.map} +1 -1
- package/dist/{rate-limit-on7KPo-v.mjs → rate-limit-CQUPm0dh.mjs} +2 -2
- package/dist/{rate-limit-on7KPo-v.mjs.map → rate-limit-CQUPm0dh.mjs.map} +1 -1
- package/dist/{redirect-DrbEmU9a.mjs → redirect-D1cWafi6.mjs} +1 -1
- package/dist/{redirect-DrbEmU9a.mjs.map → redirect-D1cWafi6.mjs.map} +1 -1
- package/dist/{redirect-CZkbozu9.mjs → redirect-DId44BS1.mjs} +19 -6
- package/dist/redirect-DId44BS1.mjs.map +1 -0
- package/dist/{redirects-BahWiu8Z.mjs → redirects-DN-ZE33W.mjs} +5 -5
- package/dist/{redirects-BahWiu8Z.mjs.map → redirects-DN-ZE33W.mjs.map} +1 -1
- package/dist/{registry-Cx-jEJOS.mjs → registry-DTqaqxed.mjs} +46 -12
- package/dist/registry-DTqaqxed.mjs.map +1 -0
- package/dist/{relation-A6wLF_DS.mjs → relation-DxgCHOBw.mjs} +2 -2
- package/dist/{relation-A6wLF_DS.mjs.map → relation-DxgCHOBw.mjs.map} +1 -1
- package/dist/{relations-Cj5hZ6Zg.mjs → relations-KKDSLUwS.mjs} +4 -4
- package/dist/{relations-Cj5hZ6Zg.mjs.map → relations-KKDSLUwS.mjs.map} +1 -1
- package/dist/{relations-BTPM2saV.mjs → relations-rOmbndUJ.mjs} +8 -8
- package/dist/relations-rOmbndUJ.mjs.map +1 -0
- package/dist/{request-cache-DH9zdCOD.mjs → request-cache-DAZZmesc.mjs} +1 -1
- package/dist/{request-cache-DH9zdCOD.mjs.map → request-cache-DAZZmesc.mjs.map} +1 -1
- package/dist/request-context.d.mts +1 -1
- package/dist/{request-meta-DRp5ENd_.mjs → request-meta-BgjUQLQ-.mjs} +2 -2
- package/dist/{request-meta-DRp5ENd_.mjs.map → request-meta-BgjUQLQ-.mjs.map} +1 -1
- package/dist/{resolve-DxUpTMmE.mjs → resolve-Cy0aWSRj.mjs} +37 -4
- package/dist/resolve-Cy0aWSRj.mjs.map +1 -0
- package/dist/{runner-zgqA_CqP.d.mts → runner-CfwysRM0.d.mts} +3 -2
- package/dist/runner-CfwysRM0.d.mts.map +1 -0
- package/dist/{runner-77GOZCnH.mjs → runner-nEzvnogG.mjs} +476 -295
- package/dist/runner-nEzvnogG.mjs.map +1 -0
- package/dist/runtime.d.mts +11 -11
- package/dist/runtime.mjs +3 -2
- package/dist/runtime.mjs.map +1 -1
- package/dist/{schema-BY-oVntF.mjs → schema-CRu38Pr5.mjs} +3 -3
- package/dist/{schema-BY-oVntF.mjs.map → schema-CRu38Pr5.mjs.map} +1 -1
- package/dist/{schema-Cw9kVK0I.mjs → schema-DifxndJx.mjs} +5 -5
- package/dist/{schema-Cw9kVK0I.mjs.map → schema-DifxndJx.mjs.map} +1 -1
- package/dist/{scopes-vMR1uIbt.mjs → scopes-D5A1OZbq.mjs} +3 -3
- package/dist/{scopes-vMR1uIbt.mjs.map → scopes-D5A1OZbq.mjs.map} +1 -1
- package/dist/{search-CfT3KxO5.mjs → search-DEPFSBFq.mjs} +4 -4
- package/dist/{search-CfT3KxO5.mjs.map → search-DEPFSBFq.mjs.map} +1 -1
- package/dist/{secrets-BH2Qow1-.mjs → secrets-CdfzLdoO.mjs} +3 -3
- package/dist/{secrets-BH2Qow1-.mjs.map → secrets-CdfzLdoO.mjs.map} +1 -1
- package/dist/{sections-DTfjyf1z.mjs → sections-3X52kmIR.mjs} +2 -2
- package/dist/{sections-DTfjyf1z.mjs.map → sections-3X52kmIR.mjs.map} +1 -1
- package/dist/seed/index.d.mts +2 -2
- package/dist/seed/index.mjs +28 -26
- package/dist/seo/index.d.mts +3 -3
- package/dist/seo/index.d.mts.map +1 -1
- package/dist/seo/index.mjs +20 -21
- package/dist/seo/index.mjs.map +1 -1
- package/dist/{seo-Cm-dtvgk.mjs → seo-Bw68KxRc.mjs} +3 -3
- package/dist/{seo-Cm-dtvgk.mjs.map → seo-Bw68KxRc.mjs.map} +1 -1
- package/dist/{seo-BSiTIXzd.mjs → seo-C4AmbsMU.mjs} +3 -2
- package/dist/seo-C4AmbsMU.mjs.map +1 -0
- package/dist/{service-DYsDHEKe.mjs → service-J_-Vgo7R.mjs} +3 -3
- package/dist/{service-DYsDHEKe.mjs.map → service-J_-Vgo7R.mjs.map} +1 -1
- package/dist/{session-user-CNAfvsdw.mjs → session-user-CbnMMwk6.mjs} +1 -1
- package/dist/{session-user-CNAfvsdw.mjs.map → session-user-CbnMMwk6.mjs.map} +1 -1
- package/dist/{settings-DjtkUo__.mjs → settings-AnEFYICn.mjs} +3 -3
- package/dist/{settings-DjtkUo__.mjs.map → settings-AnEFYICn.mjs.map} +1 -1
- package/dist/{settings-BgN-0DT-.mjs → settings-DcMjREe5.mjs} +21 -8
- package/dist/settings-DcMjREe5.mjs.map +1 -0
- package/dist/{setup-complete-CcpXaPU7.mjs → setup-complete-BClXXTvr.mjs} +2 -2
- package/dist/{setup-complete-CcpXaPU7.mjs.map → setup-complete-BClXXTvr.mjs.map} +1 -1
- package/dist/{setup-nonce-Reyw30jg.mjs → setup-nonce-BheRa4RG.mjs} +1 -1
- package/dist/{setup-nonce-Reyw30jg.mjs.map → setup-nonce-BheRa4RG.mjs.map} +1 -1
- package/dist/{single-flight-cache-BPuGPdcN.mjs → single-flight-cache-jaswDzmQ.mjs} +2 -2
- package/dist/{single-flight-cache-BPuGPdcN.mjs.map → single-flight-cache-jaswDzmQ.mjs.map} +1 -1
- package/dist/{site-url-Cs_V9n3V.mjs → site-url-Bqf-ea3N.mjs} +3 -3
- package/dist/{site-url-Cs_V9n3V.mjs.map → site-url-Bqf-ea3N.mjs.map} +1 -1
- package/dist/{snapshot-DSB8P7Lm.mjs → snapshot-C4CtXntb.mjs} +51 -35
- package/dist/snapshot-C4CtXntb.mjs.map +1 -0
- package/dist/{ssrf-DqebVE34.mjs → ssrf-gl4gFNhw.mjs} +151 -93
- package/dist/ssrf-gl4gFNhw.mjs.map +1 -0
- package/dist/{state-BJfU9Uzw.mjs → state-1F6IOhdQ.mjs} +1 -1
- package/dist/{state-BJfU9Uzw.mjs.map → state-1F6IOhdQ.mjs.map} +1 -1
- package/dist/{status-DDu8HIQl.mjs → status-Cenfk_r5.mjs} +1 -1
- package/dist/{status-DDu8HIQl.mjs.map → status-Cenfk_r5.mjs.map} +1 -1
- package/dist/storage/local.d.mts +2 -1
- package/dist/storage/local.d.mts.map +1 -1
- package/dist/storage/local.mjs +1 -1
- package/dist/storage/local.mjs.map +1 -1
- package/dist/storage/s3.d.mts +2 -1
- package/dist/storage/s3.d.mts.map +1 -1
- package/dist/storage/s3.mjs +3 -2
- package/dist/storage/s3.mjs.map +1 -1
- package/dist/{target-D0o26Azo.mjs → target-CRzeTs8G.mjs} +1 -1
- package/dist/{target-D0o26Azo.mjs.map → target-CRzeTs8G.mjs.map} +1 -1
- package/dist/{taxonomies-CPGxo-bn.mjs → taxonomies-BOdxuZpV.mjs} +23 -13
- package/dist/taxonomies-BOdxuZpV.mjs.map +1 -0
- package/dist/{taxonomies-kmyudNGP.mjs → taxonomies-NcFDq5Gg.mjs} +58 -23
- package/dist/taxonomies-NcFDq5Gg.mjs.map +1 -0
- package/dist/{taxonomy-8X09dLN5.mjs → taxonomy-DP1vny4K.mjs} +12 -4
- package/dist/{taxonomy-8X09dLN5.mjs.map → taxonomy-DP1vny4K.mjs.map} +1 -1
- package/dist/{tokens-gTS-IVUp.mjs → tokens-CDk8ox9p.mjs} +1 -1
- package/dist/{tokens-gTS-IVUp.mjs.map → tokens-CDk8ox9p.mjs.map} +1 -1
- package/dist/{transport-_6R1ub7t.d.mts → transport-BVn4tVb9.d.mts} +1 -1
- package/dist/{transport-_6R1ub7t.d.mts.map → transport-BVn4tVb9.d.mts.map} +1 -1
- package/dist/{transport-fX59xaJz.mjs → transport-DP0JI-8i.mjs} +1 -1
- package/dist/{transport-fX59xaJz.mjs.map → transport-DP0JI-8i.mjs.map} +1 -1
- package/dist/{trusted-proxy-fe6nEgR4.mjs → trusted-proxy-BTM6UxqD.mjs} +1 -1
- package/dist/{trusted-proxy-fe6nEgR4.mjs.map → trusted-proxy-BTM6UxqD.mjs.map} +1 -1
- package/dist/{types-D_DWe7k9.d.mts → types-2n848aVW.d.mts} +3 -2
- package/dist/types-2n848aVW.d.mts.map +1 -0
- package/dist/types-A2cN6a4a.mjs +3 -0
- package/dist/{types-75KIqzL9.mjs → types-BMXnRIrX.mjs} +4 -2
- package/dist/types-BMXnRIrX.mjs.map +1 -0
- package/dist/{types-Vg6f5i3s.d.mts → types-BouXpOsa.d.mts} +121 -4
- package/dist/types-BouXpOsa.d.mts.map +1 -0
- package/dist/{types-BXUmsINL.mjs → types-ByG2coLw.mjs} +1 -1
- package/dist/{types-BXUmsINL.mjs.map → types-ByG2coLw.mjs.map} +1 -1
- package/dist/types-CQPWhPxE.mjs.map +1 -1
- package/dist/{types-Blb-MRC3.d.mts → types-DEfNJ__A.d.mts} +1 -1
- package/dist/{types-Blb-MRC3.d.mts.map → types-DEfNJ__A.d.mts.map} +1 -1
- package/dist/{types-Br-ERaxh.d.mts → types-DKcKSbtB.d.mts} +23 -7
- package/dist/types-DKcKSbtB.d.mts.map +1 -0
- package/dist/{types-BzBd3PeX.d.mts → types-DRYs7uTL.d.mts} +1 -1
- package/dist/{types-BzBd3PeX.d.mts.map → types-DRYs7uTL.d.mts.map} +1 -1
- package/dist/{types-CLqvnd05.d.mts → types-DaEg7KX2.d.mts} +1 -1
- package/dist/{types-CLqvnd05.d.mts.map → types-DaEg7KX2.d.mts.map} +1 -1
- package/dist/{types-DJQxln7q.d.mts → types-LU8utpP_.d.mts} +14 -10
- package/dist/types-LU8utpP_.d.mts.map +1 -0
- package/dist/{types-D5VVLr7J.d.mts → types-VpYfPUxN.d.mts} +1 -1
- package/dist/{types-D5VVLr7J.d.mts.map → types-VpYfPUxN.d.mts.map} +1 -1
- package/dist/{types-DM3vioBY.mjs → types-c9GP7Dj5.mjs} +1 -1
- package/dist/{types-DM3vioBY.mjs.map → types-c9GP7Dj5.mjs.map} +1 -1
- package/dist/{types-DHxzBjbD.d.mts → types-tJWDK__M.d.mts} +14 -1
- package/dist/types-tJWDK__M.d.mts.map +1 -0
- package/dist/{upload-attempts-CNyGSepg.mjs → upload-attempts-C6S2y-lp.mjs} +1 -1
- package/dist/{upload-attempts-CNyGSepg.mjs.map → upload-attempts-C6S2y-lp.mjs.map} +1 -1
- package/dist/{url-pattern-K-KdXcSe.mjs → url-pattern-UYtxVTuj.mjs} +1 -1
- package/dist/{url-pattern-K-KdXcSe.mjs.map → url-pattern-UYtxVTuj.mjs.map} +1 -1
- package/dist/{user-CtYY0tp2.mjs → user-DIsIXogT.mjs} +2 -2
- package/dist/{user-CtYY0tp2.mjs.map → user-DIsIXogT.mjs.map} +1 -1
- package/dist/{utils-HztC73hq.mjs → utils-BicP5Qbg.mjs} +2 -2
- package/dist/{utils-HztC73hq.mjs.map → utils-BicP5Qbg.mjs.map} +1 -1
- package/dist/{validate-Dd-IUjnZ.mjs → validate-D8VPn4Hv.mjs} +8 -3
- package/dist/validate-D8VPn4Hv.mjs.map +1 -0
- package/dist/{validate-DlqdOZXB.d.mts → validate-Df6Dvwbw.d.mts} +12 -7
- package/dist/validate-Df6Dvwbw.d.mts.map +1 -0
- package/dist/{validation-D83n7Npi.mjs → validation-CzMJn9Ku.mjs} +13 -11
- package/dist/{validation-D83n7Npi.mjs.map → validation-CzMJn9Ku.mjs.map} +1 -1
- package/dist/version-CK67_SXX.mjs +7 -0
- package/dist/{version-ri-sCyAp.mjs.map → version-CK67_SXX.mjs.map} +1 -1
- package/dist/{widgets-CpmZd9Q-.mjs → widgets-RFVAxQl3.mjs} +18 -5
- package/dist/widgets-RFVAxQl3.mjs.map +1 -0
- package/dist/{wxr-taxonomies-BFd0y72_.d.mts → wxr-taxonomies-BX4yQL9s.d.mts} +1 -1
- package/dist/{wxr-taxonomies-BFd0y72_.d.mts.map → wxr-taxonomies-BX4yQL9s.d.mts.map} +1 -1
- package/dist/{wxr-taxonomies-Df4vxWcU.mjs → wxr-taxonomies-Csdp7yde.mjs} +4 -4
- package/dist/{wxr-taxonomies-Df4vxWcU.mjs.map → wxr-taxonomies-Csdp7yde.mjs.map} +1 -1
- package/dist/{zod-generator-DylzusHh.mjs → zod-generator-CNRGdnBY.mjs} +11 -7
- package/dist/zod-generator-CNRGdnBY.mjs.map +1 -0
- package/package.json +16 -11
- package/src/api/errors.ts +9 -0
- package/src/api/handlers/content.ts +115 -90
- package/src/api/handlers/entry-lock.ts +206 -0
- package/src/api/handlers/index.ts +1 -0
- package/src/api/handlers/manifest.ts +162 -12
- package/src/api/handlers/marketplace.ts +28 -20
- package/src/api/handlers/media.ts +30 -0
- package/src/api/handlers/menus.ts +9 -0
- package/src/api/handlers/registry.ts +406 -297
- package/src/api/handlers/revision.ts +2 -1
- package/src/api/handlers/seo.ts +10 -1
- package/src/api/handlers/snapshot.ts +84 -72
- package/src/api/handlers/taxonomies.ts +25 -9
- package/src/api/openapi/document.ts +196 -11
- package/src/api/parse.ts +1 -1
- package/src/api/schemas/auth.ts +4 -4
- package/src/api/schemas/bylines.ts +3 -3
- package/src/api/schemas/comments.ts +1 -1
- package/src/api/schemas/common.ts +3 -2
- package/src/api/schemas/content.ts +86 -22
- package/src/api/schemas/entry-lock.ts +48 -0
- package/src/api/schemas/index.ts +1 -0
- package/src/api/schemas/media.ts +52 -0
- package/src/api/schemas/redirects.ts +6 -1
- package/src/api/schemas/schema.ts +14 -1
- package/src/api/schemas/setup.ts +1 -1
- package/src/api/schemas/taxonomies.ts +2 -2
- package/src/api/schemas/users.ts +1 -1
- package/src/api/types.ts +25 -10
- package/src/astro/dev-typegen.ts +35 -0
- package/src/astro/image-endpoint.ts +2 -2
- package/src/astro/integration/dev-typegen.ts +91 -0
- package/src/astro/integration/index.ts +18 -50
- package/src/astro/integration/routes.ts +10 -0
- package/src/astro/integration/runtime.ts +13 -5
- package/src/astro/integration/vite-config.ts +51 -2
- package/src/astro/middleware.ts +21 -0
- package/src/astro/routes/api/admin/api-tokens/index.ts +4 -1
- package/src/astro/routes/api/admin/oauth-clients/[id].ts +1 -1
- package/src/astro/routes/api/admin/oauth-clients/index.ts +1 -1
- package/src/astro/routes/api/admin/plugins/registry/[id]/update.ts +4 -0
- package/src/astro/routes/api/admin/plugins/registry/artifact.ts +3 -7
- package/src/astro/routes/api/admin/plugins/registry/install.ts +4 -0
- package/src/astro/routes/api/admin/plugins/registry/verify.ts +60 -0
- package/src/astro/routes/api/content/[collection]/[id]/discard-draft.ts +18 -2
- package/src/astro/routes/api/content/[collection]/[id]/lock.ts +133 -0
- package/src/astro/routes/api/content/[collection]/[id]/publish.ts +12 -1
- package/src/astro/routes/api/content/[collection]/[id]/schedule.ts +20 -0
- package/src/astro/routes/api/content/[collection]/[id]/unpublish.ts +16 -2
- package/src/astro/routes/api/content/[collection]/[id].ts +27 -2
- package/src/astro/routes/api/content/[collection]/index.ts +3 -0
- package/src/astro/routes/api/manifest.ts +1 -1
- package/src/astro/routes/api/media/[id]/replace.ts +114 -0
- package/src/astro/routes/api/media/file/[...key].ts +4 -1
- package/src/astro/routes/api/media/upload-url.ts +8 -4
- package/src/astro/routes/api/media.ts +54 -8
- package/src/astro/routes/api/menus/[name]/items/[id].ts +7 -2
- package/src/astro/routes/api/menus/[name]/items.ts +4 -1
- package/src/astro/routes/api/menus/[name]/reorder.ts +4 -1
- package/src/astro/routes/api/menus/[name]/translations.ts +4 -1
- package/src/astro/routes/api/menus/[name].ts +7 -2
- package/src/astro/routes/api/menus/index.ts +4 -1
- package/src/astro/routes/api/settings/email.ts +1 -1
- package/src/astro/routes/api/settings.ts +4 -1
- package/src/astro/routes/api/taxonomies/[name]/reorder.ts +4 -1
- package/src/astro/routes/api/taxonomies/[name]/terms/[slug]/translations.ts +4 -1
- package/src/astro/routes/api/taxonomies/[name]/terms/[slug].ts +7 -2
- package/src/astro/routes/api/taxonomies/[name]/terms/index.ts +4 -1
- package/src/astro/routes/api/taxonomies/[name].ts +7 -2
- package/src/astro/routes/api/taxonomies/index.ts +4 -1
- package/src/astro/routes/api/widget-areas/[name]/reorder.ts +3 -1
- package/src/astro/routes/api/widget-areas/[name]/widgets/[id].ts +5 -2
- package/src/astro/routes/api/widget-areas/[name]/widgets.ts +3 -1
- package/src/astro/routes/api/widget-areas/[name].ts +3 -1
- package/src/astro/routes/api/widget-areas/index.ts +3 -1
- package/src/astro/routes/sitemap-[collection].xml.ts +4 -0
- package/src/astro/types.ts +36 -8
- package/src/auth/challenge-store.ts +3 -1
- package/src/aws-sdk.d.ts +1 -0
- package/src/cache/chrome-tags.ts +24 -0
- package/src/cli/commands/content.ts +31 -5
- package/src/cli/commands/export-seed.ts +2 -0
- package/src/client/index.ts +34 -7
- package/src/components/EmDashBodyEnd.astro +4 -1
- package/src/components/EmDashBodyStart.astro +4 -1
- package/src/components/EmDashHead.astro +35 -16
- package/src/components/EmDashImage.astro +2 -1
- package/src/components/EmDashMedia.astro +2 -1
- package/src/components/Gallery.astro +18 -4
- package/src/components/InlineEditor.astro +3 -1
- package/src/components/InlinePortableTextEditor.tsx +112 -12
- package/src/components/PortableText.astro +4 -0
- package/src/components/Table.astro +147 -62
- package/src/components/widgets/Archives.astro +2 -37
- package/src/config/errors.ts +13 -0
- package/src/content/converters/index.ts +2 -0
- package/src/content/converters/mark-safety.ts +1 -0
- package/src/content/converters/portable-text-identity.ts +139 -0
- package/src/content/converters/portable-text-to-prosemirror.ts +226 -69
- package/src/content/converters/prosemirror-to-portable-text.ts +128 -28
- package/src/content/converters/types.ts +11 -0
- package/src/database/dialect-helpers.ts +125 -0
- package/src/database/migrations/017_authorization_codes.ts +14 -4
- package/src/database/migrations/074_content_deleted_scheduled_index.ts +55 -0
- package/src/database/migrations/075_entry_edit_locks.ts +44 -0
- package/src/database/migrations/076_collection_nav_group.ts +22 -0
- package/src/database/migrations/077_plugin_storage_revisions.ts +89 -0
- package/src/database/migrations/runner.ts +9 -1
- package/src/database/repositories/byline.ts +32 -16
- package/src/database/repositories/content.ts +284 -48
- package/src/database/repositories/entry-locks.ts +257 -0
- package/src/database/repositories/media-usage.ts +66 -37
- package/src/database/repositories/media.ts +60 -1
- package/src/database/repositories/options.ts +69 -5
- package/src/database/repositories/plugin-storage.ts +233 -9
- package/src/database/repositories/redirect.ts +17 -6
- package/src/database/repositories/taxonomy.ts +8 -0
- package/src/database/repositories/types.ts +11 -7
- package/src/database/types.ts +15 -1
- package/src/db/adapters.ts +8 -1
- package/src/db/postgres.ts +23 -0
- package/src/emdash-runtime.ts +196 -199
- package/src/fields/boolean.ts +1 -1
- package/src/fields/datetime.ts +1 -1
- package/src/fields/file.ts +1 -1
- package/src/fields/integer.ts +1 -1
- package/src/fields/json.ts +1 -1
- package/src/fields/multiselect.ts +1 -1
- package/src/fields/number.ts +1 -1
- package/src/fields/portable-text.ts +1 -1
- package/src/fields/richtext.ts +1 -1
- package/src/fields/select.ts +1 -1
- package/src/fields/slug.ts +1 -1
- package/src/fields/text.ts +1 -1
- package/src/fields/textarea.ts +1 -1
- package/src/fields/types.ts +2 -2
- package/src/i18n/resolve.ts +44 -4
- package/src/index.ts +39 -3
- package/src/loader.ts +96 -12
- package/src/mcp/server.ts +251 -29
- package/src/media/image-endpoint.ts +5 -2
- package/src/media/normalize.ts +15 -4
- package/src/media/responsive.ts +23 -0
- package/src/media/usage/cleanup.ts +9 -8
- package/src/media/usage/content-refresh.ts +2 -1
- package/src/menus/index.ts +33 -21
- package/src/object-cache/index.ts +44 -2
- package/src/page/seo-contributions.ts +78 -1
- package/src/page/seo-panel.ts +47 -0
- package/src/plugin-types.ts +27 -1
- package/src/plugins/conditional-storage.ts +30 -0
- package/src/plugins/context.ts +49 -17
- package/src/plugins/hooks.ts +10 -1
- package/src/plugins/index.ts +15 -0
- package/src/plugins/manager.ts +6 -2
- package/src/plugins/manifest-schema.ts +1 -1
- package/src/plugins/routes.ts +3 -1
- package/src/plugins/sandbox/hook-result.ts +52 -0
- package/src/plugins/sandbox/index.ts +10 -0
- package/src/plugins/sandbox/types.ts +16 -2
- package/src/plugins/storage-query.ts +45 -0
- package/src/plugins/storage-update.ts +96 -0
- package/src/plugins/types.ts +120 -0
- package/src/query.ts +29 -3
- package/src/registry/artifact-checksum.ts +15 -0
- package/src/registry/artifact-verification.ts +85 -0
- package/src/registry/authoritative-records.ts +180 -0
- package/src/registry/config.ts +130 -27
- package/src/registry/record-labels.ts +28 -0
- package/src/registry/types.ts +5 -6
- package/src/schema/collection-slugs-cache.ts +157 -0
- package/src/schema/registry.ts +45 -3
- package/src/schema/types.ts +25 -6
- package/src/schema/zod-generator.ts +16 -13
- package/src/security/ssrf.ts +172 -143
- package/src/seed/apply.ts +4 -0
- package/src/seed/types.ts +7 -2
- package/src/seed/validate.ts +18 -1
- package/src/seo/hreflang.ts +1 -0
- package/src/seo/index.ts +5 -10
- package/src/seo/media-url.ts +26 -0
- package/src/settings/index.ts +16 -0
- package/src/storage/local.ts +1 -0
- package/src/storage/s3.ts +2 -0
- package/src/storage/types.ts +2 -0
- package/src/taxonomies/index.ts +40 -20
- package/src/taxonomies/term-counts.ts +22 -5
- package/src/widgets/archives.ts +67 -0
- package/src/widgets/index.ts +16 -0
- package/dist/api-B0w3uBiG.mjs +0 -2269
- package/dist/api-B0w3uBiG.mjs.map +0 -1
- package/dist/apply-B_VMpJ2P.mjs.map +0 -1
- package/dist/byline-Cpnwrje1.mjs.map +0 -1
- package/dist/challenge-store-D5pSY2S1.mjs.map +0 -1
- package/dist/content-CP-SeXNa.mjs.map +0 -1
- package/dist/content-refresh-DLOfIhYc.mjs.map +0 -1
- package/dist/context-BR5hRWiK.mjs.map +0 -1
- package/dist/dialect-helpers-BSbfaO3F.mjs.map +0 -1
- package/dist/errors-n2j49uNf.mjs.map +0 -1
- package/dist/index-DWbJrsAg.d.mts.map +0 -1
- package/dist/loader-ZsjE4paL.mjs.map +0 -1
- package/dist/manifest-schema-CUYPfCEH.mjs.map +0 -1
- package/dist/media-BjwNuLEu.mjs.map +0 -1
- package/dist/media-D6SeAfBl.mjs.map +0 -1
- package/dist/media-url-DH7giMx_.mjs.map +0 -1
- package/dist/menus-CNg0QlDt.mjs.map +0 -1
- package/dist/normalize-CSxdKBVa.mjs.map +0 -1
- package/dist/object-cache-71tPfV4A.mjs.map +0 -1
- package/dist/options-BHPeIbBd.mjs.map +0 -1
- package/dist/options-BhZIeFY1.d.mts.map +0 -1
- package/dist/query-D18vTdha.mjs.map +0 -1
- package/dist/redirect-CZkbozu9.mjs.map +0 -1
- package/dist/redirects-CRIM55KH.mjs.map +0 -1
- package/dist/registry-BiO5WwPq.mjs +0 -2716
- package/dist/registry-BiO5WwPq.mjs.map +0 -1
- package/dist/registry-Cx-jEJOS.mjs.map +0 -1
- package/dist/relations-BTPM2saV.mjs.map +0 -1
- package/dist/relations-C7B46bcU.d.mts.map +0 -1
- package/dist/resolve-DxUpTMmE.mjs.map +0 -1
- package/dist/runner-77GOZCnH.mjs.map +0 -1
- package/dist/runner-zgqA_CqP.d.mts.map +0 -1
- package/dist/seo-BSiTIXzd.mjs.map +0 -1
- package/dist/settings-BgN-0DT-.mjs.map +0 -1
- package/dist/snapshot-DSB8P7Lm.mjs.map +0 -1
- package/dist/ssrf-DqebVE34.mjs.map +0 -1
- package/dist/taxonomies-CPGxo-bn.mjs.map +0 -1
- package/dist/taxonomies-kmyudNGP.mjs.map +0 -1
- package/dist/types-75KIqzL9.mjs.map +0 -1
- package/dist/types-Br-ERaxh.d.mts.map +0 -1
- package/dist/types-D6OcIp2P.mjs +0 -3
- package/dist/types-DHxzBjbD.d.mts.map +0 -1
- package/dist/types-DJQxln7q.d.mts.map +0 -1
- package/dist/types-D_DWe7k9.d.mts.map +0 -1
- package/dist/types-Vg6f5i3s.d.mts.map +0 -1
- package/dist/validate-Dd-IUjnZ.mjs.map +0 -1
- package/dist/validate-DlqdOZXB.d.mts.map +0 -1
- package/dist/version-ri-sCyAp.mjs +0 -7
- package/dist/widgets-CpmZd9Q-.mjs.map +0 -1
- package/dist/zod-generator-DylzusHh.mjs.map +0 -1
- /package/dist/{api-tokens-B5NHLNUN.mjs → api-tokens-B_lfpmH3.mjs} +0 -0
- /package/dist/{ssrf-BPKzkm6O.mjs → ssrf-TQhaljuI.mjs} +0 -0
package/src/emdash-runtime.ts
CHANGED
|
@@ -14,6 +14,7 @@ import virtualConfig from "virtual:emdash/config";
|
|
|
14
14
|
import { z } from "zod";
|
|
15
15
|
|
|
16
16
|
import { ErrorCode } from "./api/errors.js";
|
|
17
|
+
import { buildManifestCollections } from "./api/handlers/manifest.js";
|
|
17
18
|
import { assertMediaUsageActivationWriteAllowed } from "./api/media-usage-write-fence.js";
|
|
18
19
|
import { validateRev } from "./api/rev.js";
|
|
19
20
|
import type {
|
|
@@ -21,7 +22,7 @@ import type {
|
|
|
21
22
|
PluginAdminPage,
|
|
22
23
|
PluginDashboardWidget,
|
|
23
24
|
} from "./astro/integration/runtime.js";
|
|
24
|
-
import type { EmDashManifest
|
|
25
|
+
import type { EmDashManifest } from "./astro/types.js";
|
|
25
26
|
import { getAuthMode } from "./auth/mode.js";
|
|
26
27
|
import { getTrustedProxyHeaders } from "./auth/trusted-proxy.js";
|
|
27
28
|
import type { ContentFieldFilters } from "./content-list-query.js";
|
|
@@ -58,6 +59,7 @@ import {
|
|
|
58
59
|
refreshContentMediaUsageAfterWrite,
|
|
59
60
|
} from "./media/usage/content-refresh.js";
|
|
60
61
|
import { processMediaUsageWorkAfterWrite } from "./media/usage/work-processor.js";
|
|
62
|
+
import { inspectSandboxHookResult } from "./plugins/sandbox/hook-result.js";
|
|
61
63
|
import { createSandboxRunnerOptions } from "./plugins/sandbox/runner-options.js";
|
|
62
64
|
import { getSandboxRouteErrorDetails } from "./plugins/sandbox/types.js";
|
|
63
65
|
import type {
|
|
@@ -66,6 +68,8 @@ import type {
|
|
|
66
68
|
SandboxRunnerFactory,
|
|
67
69
|
} from "./plugins/sandbox/types.js";
|
|
68
70
|
import type {
|
|
71
|
+
ActorInfo,
|
|
72
|
+
ContentHookEvent,
|
|
69
73
|
ResolvedPlugin,
|
|
70
74
|
MediaItem,
|
|
71
75
|
PluginManifest,
|
|
@@ -81,7 +85,7 @@ import type {
|
|
|
81
85
|
UserInfo,
|
|
82
86
|
} from "./plugins/types.js";
|
|
83
87
|
import { recordSchedulerHeartbeatSafely } from "./scheduler-health.js";
|
|
84
|
-
import {
|
|
88
|
+
import { primeRegisteredCollections } from "./schema/collection-slugs-cache.js";
|
|
85
89
|
import { isMissingTableError } from "./utils/db-errors.js";
|
|
86
90
|
import { hashString } from "./utils/hash.js";
|
|
87
91
|
import { createInitLock, type InitLock, initWithLock } from "./utils/init-lock.js";
|
|
@@ -189,6 +193,7 @@ import {
|
|
|
189
193
|
handleMediaGet,
|
|
190
194
|
handleMediaCreate,
|
|
191
195
|
handleMediaUpdate,
|
|
196
|
+
handleMediaReplaceMetadata,
|
|
192
197
|
handleMediaDelete,
|
|
193
198
|
handleRevisionList,
|
|
194
199
|
handleRevisionGet,
|
|
@@ -222,48 +227,16 @@ import { isContentSaveRejection } from "./plugins/save-rejection.js";
|
|
|
222
227
|
import type { CronScheduler } from "./plugins/scheduler/types.js";
|
|
223
228
|
import { PluginStateRepository } from "./plugins/state.js";
|
|
224
229
|
import { syncDeclaredStorageIndexes } from "./plugins/storage-indexes.js";
|
|
225
|
-
import {
|
|
230
|
+
import { resolveManifestRegistryConfig } from "./registry/config.js";
|
|
226
231
|
import { requestCached } from "./request-cache.js";
|
|
227
232
|
import { getRequestContext } from "./request-context.js";
|
|
228
233
|
import { publishDueContent, type PublishedRef } from "./scheduled-publish.js";
|
|
229
234
|
import { FTSManager } from "./search/fts-manager.js";
|
|
230
235
|
import { invalidateSiteSettingsCache } from "./settings/index.js";
|
|
231
236
|
|
|
232
|
-
|
|
233
|
-
* Map schema field types to editor field kinds
|
|
234
|
-
*/
|
|
235
|
-
const FIELD_TYPE_TO_KIND: Record<FieldType, string> = {
|
|
236
|
-
string: "string",
|
|
237
|
-
slug: "string",
|
|
238
|
-
url: "url",
|
|
239
|
-
text: "richText",
|
|
240
|
-
number: "number",
|
|
241
|
-
integer: "number",
|
|
242
|
-
boolean: "boolean",
|
|
243
|
-
datetime: "datetime",
|
|
244
|
-
select: "select",
|
|
245
|
-
multiSelect: "multiSelect",
|
|
246
|
-
portableText: "portableText",
|
|
247
|
-
image: "image",
|
|
248
|
-
file: "file",
|
|
249
|
-
reference: "reference",
|
|
250
|
-
json: "json",
|
|
251
|
-
repeater: "repeater",
|
|
252
|
-
};
|
|
253
|
-
|
|
254
|
-
const DRAFT_ONLY_UPDATE_KEYS = new Set(["data", "slug", "locale", "skipRevision"]);
|
|
237
|
+
const DRAFT_ONLY_UPDATE_KEYS = new Set(["data", "slug", "locale", "skipRevision", "actor"]);
|
|
255
238
|
const MAX_DRAFT_STAGE_ATTEMPTS = 32;
|
|
256
239
|
|
|
257
|
-
const LIST_COLUMN_FIELD_TYPES: ReadonlySet<FieldType> = new Set([
|
|
258
|
-
"string",
|
|
259
|
-
"number",
|
|
260
|
-
"integer",
|
|
261
|
-
"boolean",
|
|
262
|
-
"datetime",
|
|
263
|
-
"select",
|
|
264
|
-
"multiSelect",
|
|
265
|
-
]);
|
|
266
|
-
|
|
267
240
|
/**
|
|
268
241
|
* Sandboxed plugin entry from virtual module
|
|
269
242
|
*/
|
|
@@ -1349,17 +1322,18 @@ export class EmDashRuntime {
|
|
|
1349
1322
|
coldStartReads.push(
|
|
1350
1323
|
phase("rt.seedcheck", "Auto-seed gate", async () => {
|
|
1351
1324
|
try {
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1325
|
+
// Selecting the slugs instead of COUNT(*) costs the same
|
|
1326
|
+
// round trip and primes the registered-collections cache,
|
|
1327
|
+
// so the first render on this isolate skips its own lookup.
|
|
1328
|
+
const [collectionRows, setupOption] = await Promise.all([
|
|
1329
|
+
readDb.selectFrom("_emdash_collections").select("slug").execute(),
|
|
1357
1330
|
readDb
|
|
1358
1331
|
.selectFrom("options")
|
|
1359
1332
|
.select("value")
|
|
1360
1333
|
.where("name", "=", "emdash:setup_complete")
|
|
1361
1334
|
.executeTakeFirst(),
|
|
1362
1335
|
]);
|
|
1336
|
+
primeRegisteredCollections(collectionRows.map((row) => row.slug));
|
|
1363
1337
|
const setupDone = (() => {
|
|
1364
1338
|
try {
|
|
1365
1339
|
return !!setupOption && JSON.parse(setupOption.value) === true;
|
|
@@ -1367,7 +1341,7 @@ export class EmDashRuntime {
|
|
|
1367
1341
|
return false;
|
|
1368
1342
|
}
|
|
1369
1343
|
})();
|
|
1370
|
-
seedGate = { collectionCount:
|
|
1344
|
+
seedGate = { collectionCount: collectionRows.length, setupDone };
|
|
1371
1345
|
} catch (error) {
|
|
1372
1346
|
captureMissingManualSchema(error);
|
|
1373
1347
|
// Leave the "already set up" default so a read failure never
|
|
@@ -2084,10 +2058,14 @@ export class EmDashRuntime {
|
|
|
2084
2058
|
// Warn regardless of whether there are plugins to load, so operators
|
|
2085
2059
|
// see the issue even if no marketplace plugins are installed yet.
|
|
2086
2060
|
if (!sandboxRunner.isAvailable()) {
|
|
2061
|
+
const reason = sandboxRunner.unavailableReason?.();
|
|
2087
2062
|
console.warn(
|
|
2088
|
-
|
|
2089
|
-
|
|
2090
|
-
|
|
2063
|
+
reason
|
|
2064
|
+
? `EmDash: Plugin sandbox is configured but not available on this platform: ${reason}. ` +
|
|
2065
|
+
"Sandboxed plugins will not be loaded."
|
|
2066
|
+
: "EmDash: Plugin sandbox is configured but not available on this platform. " +
|
|
2067
|
+
"Sandboxed plugins will not be loaded. " +
|
|
2068
|
+
"If using @emdash-cms/sandbox-workerd/sandbox, ensure workerd is installed.",
|
|
2091
2069
|
);
|
|
2092
2070
|
return sandboxedPluginCache;
|
|
2093
2071
|
}
|
|
@@ -2452,103 +2430,10 @@ export class EmDashRuntime {
|
|
|
2452
2430
|
* is two queries in practice; never N+1.
|
|
2453
2431
|
*/
|
|
2454
2432
|
private async _buildManifest(): Promise<EmDashManifest> {
|
|
2455
|
-
// Build collections from database.
|
|
2433
|
+
// Build collections from the live database.
|
|
2456
2434
|
// Use this.db (ALS-aware getter) so playground mode picks up the
|
|
2457
2435
|
// per-session DO database instead of the hardcoded singleton.
|
|
2458
|
-
const manifestCollections
|
|
2459
|
-
try {
|
|
2460
|
-
const registry = new SchemaRegistry(this.db);
|
|
2461
|
-
const dbCollections = await registry.listCollectionsWithFields();
|
|
2462
|
-
for (const collection of dbCollections) {
|
|
2463
|
-
const fields: Record<
|
|
2464
|
-
string,
|
|
2465
|
-
{
|
|
2466
|
-
kind: string;
|
|
2467
|
-
label?: string;
|
|
2468
|
-
required?: boolean;
|
|
2469
|
-
widget?: string;
|
|
2470
|
-
// Two shapes: legacy enum-style `[{ value, label }]` for select widgets,
|
|
2471
|
-
// or arbitrary `Record<string, unknown>` for plugin field widgets that
|
|
2472
|
-
// need per-field config (e.g. a checkbox grid receiving its column defs).
|
|
2473
|
-
options?: Array<{ value: string; label: string }> | Record<string, unknown>;
|
|
2474
|
-
id?: string;
|
|
2475
|
-
validation?: Record<string, unknown>;
|
|
2476
|
-
}
|
|
2477
|
-
> = {};
|
|
2478
|
-
|
|
2479
|
-
for (const field of collection.fields) {
|
|
2480
|
-
const entry: (typeof fields)[string] = {
|
|
2481
|
-
kind: FIELD_TYPE_TO_KIND[field.type] ?? "string",
|
|
2482
|
-
label: field.label,
|
|
2483
|
-
required: field.required,
|
|
2484
|
-
};
|
|
2485
|
-
// Always include the field's database ID so the admin can forward it
|
|
2486
|
-
// to upload/media-list API calls for MIME allowlist widening.
|
|
2487
|
-
entry.id = field.id;
|
|
2488
|
-
if (field.widget) entry.widget = field.widget;
|
|
2489
|
-
// Plugin field widgets read their per-field config from `field.options`,
|
|
2490
|
-
// which the seed schema types as `Record<string, unknown>`. Pass it
|
|
2491
|
-
// through to the manifest so plugin widgets in the admin SPA receive it.
|
|
2492
|
-
if (field.options) {
|
|
2493
|
-
entry.options = field.options;
|
|
2494
|
-
}
|
|
2495
|
-
// Legacy: select/multiSelect enum options live on `field.validation.options`.
|
|
2496
|
-
// Wins over `field.options` to preserve existing behavior for enum widgets.
|
|
2497
|
-
if (field.validation?.options) {
|
|
2498
|
-
entry.options = field.validation.options.map((v) => ({
|
|
2499
|
-
value: v,
|
|
2500
|
-
label: v.charAt(0).toUpperCase() + v.slice(1),
|
|
2501
|
-
}));
|
|
2502
|
-
}
|
|
2503
|
-
// Include full validation for repeater fields (subFields, minItems, maxItems)
|
|
2504
|
-
// and for file/image fields (allowedMimeTypes).
|
|
2505
|
-
if (
|
|
2506
|
-
(field.type === "repeater" || field.type === "file" || field.type === "image") &&
|
|
2507
|
-
field.validation
|
|
2508
|
-
) {
|
|
2509
|
-
entry.validation = { ...field.validation };
|
|
2510
|
-
}
|
|
2511
|
-
fields[field.slug] = entry;
|
|
2512
|
-
}
|
|
2513
|
-
|
|
2514
|
-
const configuredListColumns = collection.admin?.listColumns ?? [];
|
|
2515
|
-
const fieldTypes = new Map(collection.fields.map((field) => [field.slug, field.type]));
|
|
2516
|
-
const listColumns: string[] = [];
|
|
2517
|
-
for (const slug of configuredListColumns) {
|
|
2518
|
-
if (listColumns.includes(slug)) continue;
|
|
2519
|
-
const fieldType = fieldTypes.get(slug);
|
|
2520
|
-
if (!fieldType || !LIST_COLUMN_FIELD_TYPES.has(fieldType)) {
|
|
2521
|
-
console.warn(
|
|
2522
|
-
`EmDash: Ignoring unsupported or unknown list column "${slug}" in collection "${collection.slug}".`,
|
|
2523
|
-
);
|
|
2524
|
-
continue;
|
|
2525
|
-
}
|
|
2526
|
-
if (listColumns.length >= MAX_COLLECTION_LIST_COLUMNS) {
|
|
2527
|
-
console.warn(
|
|
2528
|
-
`EmDash: Collection "${collection.slug}" declares more than ${MAX_COLLECTION_LIST_COLUMNS} list columns; extra columns are ignored.`,
|
|
2529
|
-
);
|
|
2530
|
-
break;
|
|
2531
|
-
}
|
|
2532
|
-
listColumns.push(slug);
|
|
2533
|
-
}
|
|
2534
|
-
|
|
2535
|
-
manifestCollections[collection.slug] = {
|
|
2536
|
-
label: collection.label,
|
|
2537
|
-
labelSingular: collection.labelSingular || collection.label,
|
|
2538
|
-
supports: collection.supports || [],
|
|
2539
|
-
hasSeo: collection.hasSeo,
|
|
2540
|
-
urlPattern: collection.urlPattern,
|
|
2541
|
-
routable: collection.routable !== false,
|
|
2542
|
-
titleField: collection.titleField,
|
|
2543
|
-
dateField: collection.dateField,
|
|
2544
|
-
...(collection.hidden ? { hidden: true } : {}),
|
|
2545
|
-
listColumns: listColumns.length > 0 ? listColumns : undefined,
|
|
2546
|
-
fields,
|
|
2547
|
-
};
|
|
2548
|
-
}
|
|
2549
|
-
} catch (error) {
|
|
2550
|
-
console.debug("EmDash: Could not load database collections:", error);
|
|
2551
|
-
}
|
|
2436
|
+
const manifestCollections = await buildManifestCollections({}, this.db);
|
|
2552
2437
|
|
|
2553
2438
|
// Build plugins manifest
|
|
2554
2439
|
const manifestPlugins: Record<
|
|
@@ -2714,14 +2599,21 @@ export class EmDashRuntime {
|
|
|
2714
2599
|
const i18nConfig = virtualConfig?.i18n ?? getI18nConfig();
|
|
2715
2600
|
const i18n =
|
|
2716
2601
|
i18nConfig && i18nConfig.locales && i18nConfig.locales.length > 1
|
|
2717
|
-
? {
|
|
2602
|
+
? {
|
|
2603
|
+
defaultLocale: i18nConfig.defaultLocale,
|
|
2604
|
+
locales: i18nConfig.locales,
|
|
2605
|
+
prefixDefaultLocale: i18nConfig.prefixDefaultLocale,
|
|
2606
|
+
}
|
|
2718
2607
|
: undefined;
|
|
2719
2608
|
|
|
2720
|
-
|
|
2721
|
-
|
|
2722
|
-
|
|
2723
|
-
|
|
2724
|
-
|
|
2609
|
+
const { registry, error: registryConfigurationError } = resolveManifestRegistryConfig(
|
|
2610
|
+
this.config.experimental?.registry,
|
|
2611
|
+
);
|
|
2612
|
+
if (registryConfigurationError) {
|
|
2613
|
+
console.error(
|
|
2614
|
+
`EmDash registry configuration error in ${registryConfigurationError.field} (${registryConfigurationError.code})`,
|
|
2615
|
+
);
|
|
2616
|
+
}
|
|
2725
2617
|
|
|
2726
2618
|
return {
|
|
2727
2619
|
version: VERSION,
|
|
@@ -2739,6 +2631,7 @@ export class EmDashRuntime {
|
|
|
2739
2631
|
},
|
|
2740
2632
|
marketplace: !!this.config.marketplace,
|
|
2741
2633
|
registry,
|
|
2634
|
+
registryConfigurationError,
|
|
2742
2635
|
};
|
|
2743
2636
|
}
|
|
2744
2637
|
|
|
@@ -2910,13 +2803,22 @@ export class EmDashRuntime {
|
|
|
2910
2803
|
locale?: string;
|
|
2911
2804
|
translationOf?: string;
|
|
2912
2805
|
taxonomies?: Record<string, string[]>;
|
|
2806
|
+
actor?: ActorInfo;
|
|
2913
2807
|
},
|
|
2914
2808
|
) {
|
|
2809
|
+
const actor = body.actor ? { ...body.actor } : undefined;
|
|
2810
|
+
|
|
2915
2811
|
// Run beforeSave hooks (trusted plugins)
|
|
2916
2812
|
let processedData = body.data;
|
|
2917
2813
|
if (this.hooks.hasHooks("content:beforeSave")) {
|
|
2918
2814
|
try {
|
|
2919
|
-
const hookResult = await this.hooks.runContentBeforeSave(
|
|
2815
|
+
const hookResult = await this.hooks.runContentBeforeSave(
|
|
2816
|
+
body.data,
|
|
2817
|
+
collection,
|
|
2818
|
+
true,
|
|
2819
|
+
undefined,
|
|
2820
|
+
actor,
|
|
2821
|
+
);
|
|
2920
2822
|
processedData = hookResult.content;
|
|
2921
2823
|
} catch (error) {
|
|
2922
2824
|
return beforeSaveFailure(error);
|
|
@@ -2924,7 +2826,15 @@ export class EmDashRuntime {
|
|
|
2924
2826
|
}
|
|
2925
2827
|
|
|
2926
2828
|
// Run beforeSave hooks (sandboxed plugins)
|
|
2927
|
-
|
|
2829
|
+
const sandboxResult = await this.runSandboxedBeforeSave(
|
|
2830
|
+
processedData,
|
|
2831
|
+
collection,
|
|
2832
|
+
true,
|
|
2833
|
+
undefined,
|
|
2834
|
+
actor,
|
|
2835
|
+
);
|
|
2836
|
+
if (!sandboxResult.success) return sandboxResult;
|
|
2837
|
+
processedData = sandboxResult.data;
|
|
2928
2838
|
|
|
2929
2839
|
// Normalize media fields (fill dimensions, storageKey, etc.)
|
|
2930
2840
|
processedData = await this.normalizeMediaFields(collection, processedData);
|
|
@@ -2956,7 +2866,7 @@ export class EmDashRuntime {
|
|
|
2956
2866
|
|
|
2957
2867
|
// Run afterSave hooks (fire-and-forget)
|
|
2958
2868
|
if (result.success && result.data) {
|
|
2959
|
-
this.runAfterSaveHooks(contentItemToRecord(result.data.item), collection, true);
|
|
2869
|
+
this.runAfterSaveHooks(contentItemToRecord(result.data.item), collection, true, actor);
|
|
2960
2870
|
}
|
|
2961
2871
|
|
|
2962
2872
|
return result;
|
|
@@ -2984,8 +2894,15 @@ export class EmDashRuntime {
|
|
|
2984
2894
|
/** Replace the previous autosave revision after staging this save. */
|
|
2985
2895
|
skipRevision?: boolean;
|
|
2986
2896
|
_rev?: string;
|
|
2897
|
+
/**
|
|
2898
|
+
* Acting user for this save. Used for revision attribution and
|
|
2899
|
+
* passed to content hooks; never changes entry ownership.
|
|
2900
|
+
*/
|
|
2901
|
+
actor?: ActorInfo;
|
|
2987
2902
|
},
|
|
2988
2903
|
) {
|
|
2904
|
+
const actor = body.actor ? { ...body.actor } : undefined;
|
|
2905
|
+
|
|
2989
2906
|
// Resolve slug → ID if needed (before any lookups)
|
|
2990
2907
|
const repo = new ContentRepository(this.db);
|
|
2991
2908
|
const resolvedItem = await repo.findByIdOrSlug(collection, id, body.locale);
|
|
@@ -3009,7 +2926,7 @@ export class EmDashRuntime {
|
|
|
3009
2926
|
};
|
|
3010
2927
|
}
|
|
3011
2928
|
}
|
|
3012
|
-
const { _rev: _discardedRev, ...bodyWithoutRev } = body;
|
|
2929
|
+
const { _rev: _discardedRev, actor: _discardedActor, ...bodyWithoutRev } = body;
|
|
3013
2930
|
|
|
3014
2931
|
// Run beforeSave hooks if data is provided
|
|
3015
2932
|
let processedData = bodyWithoutRev.data;
|
|
@@ -3020,6 +2937,8 @@ export class EmDashRuntime {
|
|
|
3020
2937
|
bodyWithoutRev.data,
|
|
3021
2938
|
collection,
|
|
3022
2939
|
false,
|
|
2940
|
+
resolvedItem?.id,
|
|
2941
|
+
actor,
|
|
3023
2942
|
);
|
|
3024
2943
|
processedData = hookResult.content;
|
|
3025
2944
|
} catch (error) {
|
|
@@ -3028,7 +2947,15 @@ export class EmDashRuntime {
|
|
|
3028
2947
|
}
|
|
3029
2948
|
|
|
3030
2949
|
// Run sandboxed beforeSave hooks
|
|
3031
|
-
|
|
2950
|
+
const sandboxResult = await this.runSandboxedBeforeSave(
|
|
2951
|
+
processedData!,
|
|
2952
|
+
collection,
|
|
2953
|
+
false,
|
|
2954
|
+
resolvedItem?.id,
|
|
2955
|
+
actor,
|
|
2956
|
+
);
|
|
2957
|
+
if (!sandboxResult.success) return sandboxResult;
|
|
2958
|
+
processedData = sandboxResult.data;
|
|
3032
2959
|
|
|
3033
2960
|
// Normalize media fields (fill dimensions, storageKey, etc.)
|
|
3034
2961
|
processedData = await this.normalizeMediaFields(collection, processedData);
|
|
@@ -3077,7 +3004,7 @@ export class EmDashRuntime {
|
|
|
3077
3004
|
collection,
|
|
3078
3005
|
entryId: resolvedId,
|
|
3079
3006
|
data: mergedData,
|
|
3080
|
-
authorId:
|
|
3007
|
+
authorId: actor?.id,
|
|
3081
3008
|
});
|
|
3082
3009
|
|
|
3083
3010
|
let staged: boolean;
|
|
@@ -3178,31 +3105,14 @@ export class EmDashRuntime {
|
|
|
3178
3105
|
if (hydrated.success && hydrated.data) {
|
|
3179
3106
|
const contentIdsToRefresh = [resolvedId];
|
|
3180
3107
|
if (!usesDraftRevisions && processedData) {
|
|
3181
|
-
|
|
3182
|
-
|
|
3183
|
-
|
|
3184
|
-
|
|
3185
|
-
|
|
3186
|
-
|
|
3187
|
-
|
|
3188
|
-
|
|
3189
|
-
)),
|
|
3190
|
-
);
|
|
3191
|
-
} catch (error) {
|
|
3192
|
-
console.error(
|
|
3193
|
-
`[media-usage] Failed to discover synced i18n siblings for ${collection}/${resolvedId}:`,
|
|
3194
|
-
error,
|
|
3195
|
-
);
|
|
3196
|
-
try {
|
|
3197
|
-
await markContentMediaUsageCollectionStale(
|
|
3198
|
-
this.db,
|
|
3199
|
-
collection,
|
|
3200
|
-
"CONTENT_USAGE_REFRESH_ERROR",
|
|
3201
|
-
);
|
|
3202
|
-
} catch (staleError) {
|
|
3203
|
-
console.error(`[media-usage] Failed to mark ${collection} stale:`, staleError);
|
|
3204
|
-
}
|
|
3205
|
-
}
|
|
3108
|
+
contentIdsToRefresh.push(
|
|
3109
|
+
...(await this.findSyncedSiblingsForUsageRefresh(
|
|
3110
|
+
collection,
|
|
3111
|
+
resolvedId,
|
|
3112
|
+
hydrated.data.item.translationGroup,
|
|
3113
|
+
processedData,
|
|
3114
|
+
)),
|
|
3115
|
+
);
|
|
3206
3116
|
}
|
|
3207
3117
|
await this.refreshContentUsageAfterSuccessfulWrite(collection, contentIdsToRefresh);
|
|
3208
3118
|
} else if (draftStorageChanged) {
|
|
@@ -3215,7 +3125,7 @@ export class EmDashRuntime {
|
|
|
3215
3125
|
|
|
3216
3126
|
// Run afterSave hooks (fire-and-forget)
|
|
3217
3127
|
if (hydrated.success && hydrated.data) {
|
|
3218
|
-
this.runAfterSaveHooks(contentItemToRecord(hydrated.data.item), collection, false);
|
|
3128
|
+
this.runAfterSaveHooks(contentItemToRecord(hydrated.data.item), collection, false, actor);
|
|
3219
3129
|
}
|
|
3220
3130
|
|
|
3221
3131
|
if (hydrated.success) {
|
|
@@ -3271,7 +3181,7 @@ export class EmDashRuntime {
|
|
|
3271
3181
|
|
|
3272
3182
|
async handleContentListTrashed(
|
|
3273
3183
|
collection: string,
|
|
3274
|
-
params: { cursor?: string; limit?: number } = {},
|
|
3184
|
+
params: { cursor?: string; limit?: number; locale?: string } = {},
|
|
3275
3185
|
) {
|
|
3276
3186
|
return handleContentListTrashed(this.db, collection, params);
|
|
3277
3187
|
}
|
|
@@ -3304,8 +3214,8 @@ export class EmDashRuntime {
|
|
|
3304
3214
|
return result;
|
|
3305
3215
|
}
|
|
3306
3216
|
|
|
3307
|
-
async handleContentCountTrashed(collection: string) {
|
|
3308
|
-
return handleContentCountTrashed(this.db, collection);
|
|
3217
|
+
async handleContentCountTrashed(collection: string, params: { locale?: string } = {}) {
|
|
3218
|
+
return handleContentCountTrashed(this.db, collection, params);
|
|
3309
3219
|
}
|
|
3310
3220
|
|
|
3311
3221
|
async handleContentDuplicate(collection: string, id: string, authorId?: string) {
|
|
@@ -3327,11 +3237,22 @@ export class EmDashRuntime {
|
|
|
3327
3237
|
publishedAt?: string;
|
|
3328
3238
|
requireScheduledDue?: boolean;
|
|
3329
3239
|
expectedScheduledAt?: string;
|
|
3240
|
+
_rev?: string;
|
|
3330
3241
|
} = {},
|
|
3331
3242
|
) {
|
|
3332
3243
|
const result = await handleContentPublish(this.db, collection, id, options);
|
|
3333
3244
|
if (result.success && result.data) {
|
|
3334
|
-
|
|
3245
|
+
const { item } = result.data;
|
|
3246
|
+
await this.refreshContentUsageAfterSuccessfulWrite(collection, [
|
|
3247
|
+
item.id,
|
|
3248
|
+
...(await this.findSyncedSiblingsForUsageRefresh(
|
|
3249
|
+
collection,
|
|
3250
|
+
item.id,
|
|
3251
|
+
item.translationGroup,
|
|
3252
|
+
item.data,
|
|
3253
|
+
{ absentAsCleared: true },
|
|
3254
|
+
)),
|
|
3255
|
+
]);
|
|
3335
3256
|
}
|
|
3336
3257
|
|
|
3337
3258
|
// Run afterPublish hooks (fire-and-forget)
|
|
@@ -3342,8 +3263,8 @@ export class EmDashRuntime {
|
|
|
3342
3263
|
return result;
|
|
3343
3264
|
}
|
|
3344
3265
|
|
|
3345
|
-
async handleContentUnpublish(collection: string, id: string) {
|
|
3346
|
-
const result = await handleContentUnpublish(this.db, collection, id);
|
|
3266
|
+
async handleContentUnpublish(collection: string, id: string, options: { _rev?: string } = {}) {
|
|
3267
|
+
const result = await handleContentUnpublish(this.db, collection, id, options);
|
|
3347
3268
|
if (result.success && result.data) {
|
|
3348
3269
|
await this.refreshContentUsageAfterSuccessfulWrite(collection, [result.data.item.id]);
|
|
3349
3270
|
}
|
|
@@ -3388,8 +3309,8 @@ export class EmDashRuntime {
|
|
|
3388
3309
|
return handleContentCountScheduled(this.db, collection);
|
|
3389
3310
|
}
|
|
3390
3311
|
|
|
3391
|
-
async handleContentDiscardDraft(collection: string, id: string) {
|
|
3392
|
-
const result = await handleContentDiscardDraft(this.db, collection, id);
|
|
3312
|
+
async handleContentDiscardDraft(collection: string, id: string, options: { _rev?: string } = {}) {
|
|
3313
|
+
const result = await handleContentDiscardDraft(this.db, collection, id, options);
|
|
3393
3314
|
if (result.success && result.data) {
|
|
3394
3315
|
await this.refreshContentUsageAfterSuccessfulWrite(collection, [result.data.item.id]);
|
|
3395
3316
|
}
|
|
@@ -3434,6 +3355,7 @@ export class EmDashRuntime {
|
|
|
3434
3355
|
blurhash?: string;
|
|
3435
3356
|
dominantColor?: string;
|
|
3436
3357
|
authorId?: string;
|
|
3358
|
+
folderId?: string | null;
|
|
3437
3359
|
}) {
|
|
3438
3360
|
// Run beforeUpload hooks
|
|
3439
3361
|
let processedInput = input;
|
|
@@ -3498,6 +3420,18 @@ export class EmDashRuntime {
|
|
|
3498
3420
|
return result;
|
|
3499
3421
|
}
|
|
3500
3422
|
|
|
3423
|
+
async handleMediaReplaceMetadata(
|
|
3424
|
+
id: string,
|
|
3425
|
+
expectedStorageKey: string,
|
|
3426
|
+
input: { size: number; width: number; height: number; contentHash: string },
|
|
3427
|
+
) {
|
|
3428
|
+
const result = await handleMediaReplaceMetadata(this.db, id, expectedStorageKey, input);
|
|
3429
|
+
if (result.success) {
|
|
3430
|
+
invalidateSiteSettingsCache();
|
|
3431
|
+
}
|
|
3432
|
+
return result;
|
|
3433
|
+
}
|
|
3434
|
+
|
|
3501
3435
|
async handleMediaDelete(id: string) {
|
|
3502
3436
|
const result = await handleMediaDelete(this.db, id);
|
|
3503
3437
|
// Same reasoning as `handleMediaUpdate`: if the deleted media row
|
|
@@ -3647,6 +3581,40 @@ export class EmDashRuntime {
|
|
|
3647
3581
|
}
|
|
3648
3582
|
}
|
|
3649
3583
|
|
|
3584
|
+
private async findSyncedSiblingsForUsageRefresh(
|
|
3585
|
+
collection: string,
|
|
3586
|
+
contentId: string,
|
|
3587
|
+
translationGroup: string | null | undefined,
|
|
3588
|
+
data: Record<string, unknown>,
|
|
3589
|
+
options: { absentAsCleared?: boolean } = {},
|
|
3590
|
+
): Promise<string[]> {
|
|
3591
|
+
try {
|
|
3592
|
+
return await findNonTranslatableSiblingContentIds(
|
|
3593
|
+
this.db,
|
|
3594
|
+
collection,
|
|
3595
|
+
contentId,
|
|
3596
|
+
translationGroup,
|
|
3597
|
+
data,
|
|
3598
|
+
options,
|
|
3599
|
+
);
|
|
3600
|
+
} catch (error) {
|
|
3601
|
+
console.error(
|
|
3602
|
+
`[media-usage] Failed to discover synced i18n siblings for ${collection}/${contentId}:`,
|
|
3603
|
+
error,
|
|
3604
|
+
);
|
|
3605
|
+
try {
|
|
3606
|
+
await markContentMediaUsageCollectionStale(
|
|
3607
|
+
this.db,
|
|
3608
|
+
collection,
|
|
3609
|
+
"CONTENT_USAGE_REFRESH_ERROR",
|
|
3610
|
+
);
|
|
3611
|
+
} catch (staleError) {
|
|
3612
|
+
console.error(`[media-usage] Failed to mark ${collection} stale:`, staleError);
|
|
3613
|
+
}
|
|
3614
|
+
return [];
|
|
3615
|
+
}
|
|
3616
|
+
}
|
|
3617
|
+
|
|
3650
3618
|
private async refreshContentUsageAfterSuccessfulWrite(
|
|
3651
3619
|
collection: string,
|
|
3652
3620
|
contentIds: readonly string[],
|
|
@@ -4071,7 +4039,9 @@ export class EmDashRuntime {
|
|
|
4071
4039
|
content: Record<string, unknown>,
|
|
4072
4040
|
collection: string,
|
|
4073
4041
|
isNew: boolean,
|
|
4074
|
-
|
|
4042
|
+
contentId?: string,
|
|
4043
|
+
actor?: ActorInfo,
|
|
4044
|
+
) {
|
|
4075
4045
|
let result = content;
|
|
4076
4046
|
|
|
4077
4047
|
for (const [pluginKey, plugin] of this.sandboxedPlugins) {
|
|
@@ -4079,11 +4049,31 @@ export class EmDashRuntime {
|
|
|
4079
4049
|
if (!id || !this.isPluginEnabled(id)) continue;
|
|
4080
4050
|
|
|
4081
4051
|
try {
|
|
4082
|
-
const
|
|
4083
|
-
|
|
4084
|
-
|
|
4085
|
-
|
|
4086
|
-
|
|
4052
|
+
const event: ContentHookEvent = { content: result, collection, isNew };
|
|
4053
|
+
if (contentId !== undefined) event.id = contentId;
|
|
4054
|
+
if (actor !== undefined) event.actor = { ...actor };
|
|
4055
|
+
const hookResult = await plugin.invokeHook("content:beforeSave", event);
|
|
4056
|
+
const inspection = inspectSandboxHookResult(hookResult);
|
|
4057
|
+
if (inspection.kind === "error") {
|
|
4058
|
+
return {
|
|
4059
|
+
success: false as const,
|
|
4060
|
+
error: {
|
|
4061
|
+
code: ErrorCode.SAVE_REJECTED,
|
|
4062
|
+
message: "Save rejected by a sandboxed plugin",
|
|
4063
|
+
details: { pluginId: id, reason: inspection.error.reason },
|
|
4064
|
+
},
|
|
4065
|
+
};
|
|
4066
|
+
}
|
|
4067
|
+
if (inspection.kind === "malformed") {
|
|
4068
|
+
console.error(`EmDash: Sandboxed plugin ${id} returned an invalid hook result`);
|
|
4069
|
+
return {
|
|
4070
|
+
success: false as const,
|
|
4071
|
+
error: {
|
|
4072
|
+
code: ErrorCode.CONTENT_HOOK_ERROR,
|
|
4073
|
+
message: "A plugin hook failed while saving content",
|
|
4074
|
+
},
|
|
4075
|
+
};
|
|
4076
|
+
}
|
|
4087
4077
|
if (hookResult && typeof hookResult === "object" && !Array.isArray(hookResult)) {
|
|
4088
4078
|
// Sandbox returns unknown; convert to record by iterating own properties
|
|
4089
4079
|
const record: Record<string, unknown> = {};
|
|
@@ -4093,14 +4083,18 @@ export class EmDashRuntime {
|
|
|
4093
4083
|
result = record;
|
|
4094
4084
|
}
|
|
4095
4085
|
} catch (error) {
|
|
4096
|
-
console.error(
|
|
4097
|
-
|
|
4098
|
-
|
|
4099
|
-
|
|
4086
|
+
console.error(`EmDash: Sandboxed plugin ${id} beforeSave hook failed:`, error);
|
|
4087
|
+
return {
|
|
4088
|
+
success: false as const,
|
|
4089
|
+
error: {
|
|
4090
|
+
code: ErrorCode.CONTENT_HOOK_ERROR,
|
|
4091
|
+
message: "A plugin hook failed while saving content",
|
|
4092
|
+
},
|
|
4093
|
+
};
|
|
4100
4094
|
}
|
|
4101
4095
|
}
|
|
4102
4096
|
|
|
4103
|
-
return result;
|
|
4097
|
+
return { success: true as const, data: result };
|
|
4104
4098
|
}
|
|
4105
4099
|
|
|
4106
4100
|
private async runSandboxedBeforeDelete(id: string, collection: string): Promise<boolean> {
|
|
@@ -4128,12 +4122,13 @@ export class EmDashRuntime {
|
|
|
4128
4122
|
content: Record<string, unknown>,
|
|
4129
4123
|
collection: string,
|
|
4130
4124
|
isNew: boolean,
|
|
4125
|
+
actor?: ActorInfo,
|
|
4131
4126
|
): void {
|
|
4132
4127
|
after(async () => {
|
|
4133
4128
|
// Trusted plugins
|
|
4134
4129
|
if (this.hooks.hasHooks("content:afterSave")) {
|
|
4135
4130
|
try {
|
|
4136
|
-
await this.hooks.runContentAfterSave(content, collection, isNew);
|
|
4131
|
+
await this.hooks.runContentAfterSave(content, collection, isNew, actor);
|
|
4137
4132
|
} catch (err) {
|
|
4138
4133
|
console.error("EmDash afterSave hook error:", err);
|
|
4139
4134
|
}
|
|
@@ -4148,7 +4143,9 @@ export class EmDashRuntime {
|
|
|
4148
4143
|
tasks.push(
|
|
4149
4144
|
(async () => {
|
|
4150
4145
|
try {
|
|
4151
|
-
|
|
4146
|
+
const event: ContentHookEvent = { content, collection, isNew };
|
|
4147
|
+
if (actor !== undefined) event.actor = { ...actor };
|
|
4148
|
+
await plugin.invokeHook("content:afterSave", event);
|
|
4152
4149
|
} catch (err) {
|
|
4153
4150
|
console.error(`EmDash: Sandboxed plugin ${id} afterSave error:`, err);
|
|
4154
4151
|
}
|
package/src/fields/boolean.ts
CHANGED
|
@@ -15,7 +15,7 @@ export function boolean(options: BooleanOptions = {}): FieldDefinition<boolean>
|
|
|
15
15
|
const boolSchema = z.boolean();
|
|
16
16
|
|
|
17
17
|
// Apply default
|
|
18
|
-
const schema: z.
|
|
18
|
+
const schema: z.ZodType =
|
|
19
19
|
options.default !== undefined ? boolSchema.default(options.default) : boolSchema;
|
|
20
20
|
|
|
21
21
|
const ui: FieldUIHints = {
|
package/src/fields/datetime.ts
CHANGED
|
@@ -25,7 +25,7 @@ export function datetime(options: DatetimeOptions = {}): FieldDefinition<Date> {
|
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
// Optional vs required
|
|
28
|
-
const schema: z.
|
|
28
|
+
const schema: z.ZodType = options.required ? dateSchema : dateSchema.optional();
|
|
29
29
|
|
|
30
30
|
const ui: FieldUIHints = {
|
|
31
31
|
widget: "datetime",
|