emdash 0.37.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-BDQwg236.d.mts → adapters-DCEgOBXi.d.mts} +1 -1
- package/dist/{adapters-BDQwg236.d.mts.map → adapters-DCEgOBXi.d.mts.map} +1 -1
- package/dist/{allowed-origins-BGglilcs.mjs → allowed-origins-GFUVavRj.mjs} +2 -2
- package/dist/{allowed-origins-BGglilcs.mjs.map → allowed-origins-GFUVavRj.mjs.map} +1 -1
- package/dist/api/route-utils.d.mts +3 -3
- package/dist/api/route-utils.mjs +23 -22
- 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-Dz6rgoa3.mjs → api-BvxJmnFY.mjs} +141 -87
- package/dist/api-BvxJmnFY.mjs.map +1 -0
- package/dist/{api-tokens-BSsQACNe.mjs → api-tokens-xpGqMHrC.mjs} +2 -2
- package/dist/{api-tokens-BSsQACNe.mjs.map → api-tokens-xpGqMHrC.mjs.map} +1 -1
- package/dist/{apply-B4SIOxR1.mjs → apply-DLmM3R7f.mjs} +25 -21
- package/dist/apply-DLmM3R7f.mjs.map +1 -0
- package/dist/{config-it29yDLA.mjs → artifact-fetch-P2JXVwOq.mjs} +8 -199
- package/dist/artifact-fetch-P2JXVwOq.mjs.map +1 -0
- package/dist/astro/index.d.mts +12 -12
- package/dist/astro/index.d.mts.map +1 -1
- package/dist/astro/index.mjs +37 -11
- 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 +154 -125
- 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.mjs +4 -4
- 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 +16 -16
- package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +16 -16
- package/dist/astro/routes/api/admin/bylines/index.mjs +16 -16
- package/dist/astro/routes/api/admin/comments/_id_/status.mjs +11 -11
- package/dist/astro/routes/api/admin/comments/_id_.mjs +3 -3
- package/dist/astro/routes/api/admin/comments/bulk.mjs +8 -8
- package/dist/astro/routes/api/admin/comments/counts.mjs +3 -3
- package/dist/astro/routes/api/admin/comments/index.mjs +8 -8
- 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 +13 -13
- package/dist/astro/routes/api/admin/media-usage/repair.mjs +16 -16
- 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 +3 -3
- package/dist/astro/routes/api/admin/oauth-clients/index.mjs +3 -3
- package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +56 -53
- package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +56 -53
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +54 -51
- 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 +54 -51
- package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +55 -52
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +55 -52
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/index.mjs +54 -51
- 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 +54 -51
- 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 +55 -52
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +54 -51
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +55 -52
- package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs +56 -53
- package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +5 -4
- package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/install.mjs +56 -53
- package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/verify.mjs +55 -52
- package/dist/astro/routes/api/admin/plugins/registry/verify.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/updates.mjs +54 -51
- package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +54 -51
- 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 +54 -51
- 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 +12 -12
- package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +11 -11
- 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 +13 -8
- 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 +14 -9
- 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 +19 -17
- 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 +19 -17
- 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 +15 -14
- 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 +13 -8
- 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 +6 -6
- 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 +16 -16
- 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 +14 -13
- 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 +16 -16
- package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +11 -11
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +27 -26
- 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/mcp.mjs +71 -55
- package/dist/astro/routes/api/mcp.mjs.map +1 -1
- package/dist/astro/routes/api/media/_id_/confirm.mjs +10 -10
- package/dist/astro/routes/api/media/_id_/replace.mjs +8 -8
- package/dist/astro/routes/api/media/_id_/upload.mjs +5 -5
- package/dist/astro/routes/api/media/_id_/usage.mjs +18 -18
- package/dist/astro/routes/api/media/_id_.mjs +17 -17
- package/dist/astro/routes/api/media/file/_...key_.mjs +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 +9 -9
- package/dist/astro/routes/api/media.mjs +21 -21
- package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +9 -9
- package/dist/astro/routes/api/menus/_name_/items.mjs +9 -9
- package/dist/astro/routes/api/menus/_name_/reorder.mjs +9 -9
- package/dist/astro/routes/api/menus/_name_/translations.mjs +9 -9
- package/dist/astro/routes/api/menus/_name_.mjs +9 -9
- package/dist/astro/routes/api/menus/index.mjs +9 -9
- 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 +84 -18
- 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 +19 -17
- package/dist/astro/routes/api/relations/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/relations/_id_/translations.mjs +14 -12
- package/dist/astro/routes/api/relations/_id_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/relations/index.mjs +19 -17
- 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 +54 -51
- 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 +54 -51
- 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 +54 -51
- package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +54 -51
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/index.mjs +54 -51
- package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/reorder.mjs +54 -51
- 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 +54 -51
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/schema/orphans/index.mjs +54 -51
- 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 +4 -4
- package/dist/astro/routes/api/settings.mjs +14 -14
- 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 +33 -31
- 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 +33 -31
- 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.mjs +16 -15
- package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +16 -15
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +16 -15
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +16 -15
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/translations.mjs +15 -14
- package/dist/astro/routes/api/taxonomies/_name_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_.mjs +16 -15
- package/dist/astro/routes/api/taxonomies/_name_.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/index.mjs +16 -15
- 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.mjs +8 -8
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +12 -12
- package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +12 -12
- package/dist/astro/routes/api/widget-areas/_name_.mjs +7 -7
- package/dist/astro/routes/api/widget-areas/index.mjs +12 -12
- package/dist/astro/routes/api/widget-components.mjs +2 -2
- package/dist/astro/routes/robots.txt.mjs +6 -6
- package/dist/astro/routes/sitemap-_collection_.xml.mjs +11 -10
- package/dist/astro/routes/sitemap-_collection_.xml.mjs.map +1 -1
- package/dist/astro/routes/sitemap.xml.mjs +7 -7
- package/dist/astro/types.d.mts +32 -17
- 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-Bkf_UHhD.mjs → authorize-C2QHlWSS.mjs} +2 -2
- package/dist/{authorize-Bkf_UHhD.mjs.map → authorize-C2QHlWSS.mjs.map} +1 -1
- package/dist/{backup-rwVAl9NI.mjs → backup-oS8ft5Cm.mjs} +5 -5
- package/dist/{backup-rwVAl9NI.mjs.map → backup-oS8ft5Cm.mjs.map} +1 -1
- package/dist/{bundle-C8S2Zl6U.mjs → bundle-CL0JjIPx.mjs} +4 -4
- package/dist/{bundle-C8S2Zl6U.mjs.map → bundle-CL0JjIPx.mjs.map} +1 -1
- package/dist/{byline-DuhF7NWl.mjs → byline-Vdi85CsZ.mjs} +6 -6
- package/dist/{byline-DuhF7NWl.mjs.map → byline-Vdi85CsZ.mjs.map} +1 -1
- package/dist/{byline-fields-BovY4KYM.mjs → byline-fields-DPVRFMz2.mjs} +2 -2
- package/dist/{byline-fields-BovY4KYM.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-CJ5nd6Lw.mjs → bylines-BX8QhcTk.mjs} +7 -7
- package/dist/{bylines-CJ5nd6Lw.mjs.map → bylines-BX8QhcTk.mjs.map} +1 -1
- package/dist/{bylines-RwBAeOF1.mjs → bylines-w-E1IEQd.mjs} +3 -3
- package/dist/{bylines-RwBAeOF1.mjs.map → bylines-w-E1IEQd.mjs.map} +1 -1
- package/dist/{cache-BF5Kvn59.mjs → cache--7HKu5Xm.mjs} +4 -4
- package/dist/{cache-BF5Kvn59.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-DQN_Yrck.mjs → challenge-store-BIOak-tp.mjs} +1 -1
- package/dist/{challenge-store-DQN_Yrck.mjs.map → challenge-store-BIOak-tp.mjs.map} +1 -1
- package/dist/{chrome-tags-D8fiZG94.mjs → chrome-tags-DzDQBCjX.mjs} +1 -1
- package/dist/{chrome-tags-D8fiZG94.mjs.map → chrome-tags-DzDQBCjX.mjs.map} +1 -1
- package/dist/{chunks-C4szrD8o.mjs → chunks-VG_tyqnP.mjs} +2 -2
- package/dist/{chunks-C4szrD8o.mjs.map → chunks-VG_tyqnP.mjs.map} +1 -1
- package/dist/cli/index.mjs +66 -38
- 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-Bj07NHbj.mjs → collection-deletion-BCwaWTDw.mjs} +4 -4
- package/dist/{collection-deletion-Bj07NHbj.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-BhrvSHml.mjs → comment-reaction-CDyvPQRj.mjs} +2 -2
- package/dist/{comment-reaction-BhrvSHml.mjs.map → comment-reaction-CDyvPQRj.mjs.map} +1 -1
- package/dist/{comments-Ct4ensnf.mjs → comments-VzmVLyaC.mjs} +1 -1
- package/dist/{comments-Ct4ensnf.mjs.map → comments-VzmVLyaC.mjs.map} +1 -1
- package/dist/{components-DJbo1z0S.mjs → components-CL6Wkdk-.mjs} +1 -1
- package/dist/{components-DJbo1z0S.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-BJNMCWmu.d.mts → config-CGAhyOjP.d.mts} +138 -47
- package/dist/config-CGAhyOjP.d.mts.map +1 -0
- package/dist/{config-B9eZ340f.d.mts → config-ChFzshGd.d.mts} +1 -1
- package/dist/{config-B9eZ340f.d.mts.map → config-ChFzshGd.d.mts.map} +1 -1
- package/dist/{content-DjvM0T92.mjs → content-CNfMWuhY.mjs} +121 -5
- package/dist/content-CNfMWuhY.mjs.map +1 -0
- package/dist/{content-list-query-Btqd4uV2.d.mts → content-list-query-B8d4UQp9.d.mts} +1 -1
- package/dist/{content-list-query-Btqd4uV2.d.mts.map → content-list-query-B8d4UQp9.d.mts.map} +1 -1
- package/dist/{content-refresh-Bwp-8yGy.mjs → content-refresh-GTMyi2Xy.mjs} +8 -8
- package/dist/{content-refresh-Bwp-8yGy.mjs.map → content-refresh-GTMyi2Xy.mjs.map} +1 -1
- package/dist/{content-repair-Czdp7jz5.mjs → content-repair-CIMt5C0U.mjs} +4 -4
- package/dist/{content-repair-Czdp7jz5.mjs.map → content-repair-CIMt5C0U.mjs.map} +1 -1
- package/dist/{context-CX6gxOLW.mjs → context-C9PB8vGd.mjs} +265 -25
- package/dist/context-C9PB8vGd.mjs.map +1 -0
- package/dist/{cron-C6o7VppJ.mjs → cron-DHAy9oyq.mjs} +1 -1
- package/dist/{cron-C6o7VppJ.mjs.map → cron-DHAy9oyq.mjs.map} +1 -1
- package/dist/{dashboard-C2kTeeRI.mjs → dashboard-BNSvAN8A.mjs} +4 -4
- package/dist/{dashboard-C2kTeeRI.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/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/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-Clra32mw.mjs → default-ByZ0JqZo.mjs} +1 -1
- package/dist/{default-Clra32mw.mjs.map → default-ByZ0JqZo.mjs.map} +1 -1
- package/dist/{deferred-tasks-CvDETTJO.d.mts → deferred-tasks-Cu4NSJpa.d.mts} +1 -1
- package/dist/{deferred-tasks-CvDETTJO.d.mts.map → deferred-tasks-Cu4NSJpa.d.mts.map} +1 -1
- package/dist/{dev-typegen-DzOPfsNj.mjs → dev-typegen-DHT7lcMU.mjs} +1 -1
- package/dist/{dev-typegen-DzOPfsNj.mjs.map → dev-typegen-DHT7lcMU.mjs.map} +1 -1
- package/dist/{device-flow-D2oCWvLJ.mjs → device-flow-Cf6bhCCT.mjs} +4 -4
- package/dist/{device-flow-D2oCWvLJ.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-Bfa5_ToE.mjs → direct-executor-yAyUGSqB.mjs} +3 -3
- package/dist/{direct-executor-Bfa5_ToE.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-Dzb6uGYa.mjs → email-console-DNup1Fku.mjs} +1 -1
- package/dist/{email-console-Dzb6uGYa.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-DnRK4YIT.d.mts → entry-lock-CGAtrwAR.d.mts} +92 -37
- package/dist/entry-lock-CGAtrwAR.d.mts.map +1 -0
- package/dist/{redirects-BLNOWQTn.mjs → entry-lock-DIYHAaSw.mjs} +57 -14
- 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-DFrQjppn.mjs → error-BDcFyoRt.mjs} +2 -2
- package/dist/{error-DFrQjppn.mjs.map → error-BDcFyoRt.mjs.map} +1 -1
- package/dist/{errors-DsVoDUjJ.mjs → errors-DvMdNrgf.mjs} +8 -1
- package/dist/errors-DvMdNrgf.mjs.map +1 -0
- package/dist/{escape-HmHTC1Is.mjs → escape-B3asJC6W.mjs} +1 -1
- package/dist/{escape-HmHTC1Is.mjs.map → escape-B3asJC6W.mjs.map} +1 -1
- package/dist/{field-defs-cache-BM4SIRqH.mjs → field-defs-cache-Cf5FHK0M.mjs} +5 -5
- package/dist/{field-defs-cache-BM4SIRqH.mjs.map → field-defs-cache-Cf5FHK0M.mjs.map} +1 -1
- package/dist/{fts-manager-Do1BlW2r.mjs → fts-manager-iddym8cd.mjs} +4 -4
- package/dist/{fts-manager-Do1BlW2r.mjs.map → fts-manager-iddym8cd.mjs.map} +1 -1
- package/dist/{hash-3JJPlHF2.mjs → hash-BRweX6jz.mjs} +1 -1
- package/dist/{hash-3JJPlHF2.mjs.map → hash-BRweX6jz.mjs.map} +1 -1
- package/dist/{hook-result-DCh2WUpe.d.mts → hook-result-BrshYHLx.d.mts} +1 -1
- package/dist/{hook-result-DCh2WUpe.d.mts.map → hook-result-BrshYHLx.d.mts.map} +1 -1
- package/dist/{hreflang-B6hbAuuO.d.mts → hreflang-CQpu5bMy.d.mts} +2 -2
- package/dist/{hreflang-B6hbAuuO.d.mts.map → hreflang-CQpu5bMy.d.mts.map} +1 -1
- package/dist/{hreflang-DQbPZliA.mjs → hreflang-DshnweTC.mjs} +9 -8
- package/dist/{hreflang-DQbPZliA.mjs.map → hreflang-DshnweTC.mjs.map} +1 -1
- package/dist/{identity-DksvEazf.mjs → identity-CjGKDq8J.mjs} +3 -3
- package/dist/{identity-DksvEazf.mjs.map → identity-CjGKDq8J.mjs.map} +1 -1
- package/dist/{import-CJpaBBBT.mjs → import-D96g2otw.mjs} +5 -5
- package/dist/{import-CJpaBBBT.mjs.map → import-D96g2otw.mjs.map} +1 -1
- package/dist/{index-Du8K7bWa.d.mts → index-1ECYpfiF.d.mts} +3 -3
- package/dist/{index-Du8K7bWa.d.mts.map → index-1ECYpfiF.d.mts.map} +1 -1
- package/dist/index.d.mts +22 -22
- package/dist/index.mjs +81 -78
- 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-CawHjTOH.mjs → load-DPtY9cZo.mjs} +2 -2
- package/dist/{load-CawHjTOH.mjs.map → load-DPtY9cZo.mjs.map} +1 -1
- package/dist/{loader-Z8vl7zTq.mjs → loader-WJi6GFRn.mjs} +46 -8
- package/dist/loader-WJi6GFRn.mjs.map +1 -0
- package/dist/{manifest-builder-COtzuca2.mjs → manifest-builder-BfNlGQIA.mjs} +2 -2
- package/dist/{manifest-builder-COtzuca2.mjs.map → manifest-builder-BfNlGQIA.mjs.map} +1 -1
- package/dist/{manifest-schema-BNWwR8Vd.mjs → manifest-schema-CILooI5J.mjs} +1 -1
- package/dist/{manifest-schema-BNWwR8Vd.mjs.map → manifest-schema-CILooI5J.mjs.map} +1 -1
- package/dist/media/image-endpoint.mjs +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 +5 -5
- package/dist/{media-BHjus86Y.mjs → media-C1EIZKh1.mjs} +1 -1
- package/dist/{media-BHjus86Y.mjs.map → media-C1EIZKh1.mjs.map} +1 -1
- package/dist/{media-allowlist-CoTBWoDp.mjs → media-allowlist-elXJgb_K.mjs} +2 -2
- package/dist/{media-allowlist-CoTBWoDp.mjs.map → media-allowlist-elXJgb_K.mjs.map} +1 -1
- package/dist/{media-folders-BGkATs8n.mjs → media-folders-DASfX_DH.mjs} +1 -1
- package/dist/{media-folders-BGkATs8n.mjs.map → media-folders-DASfX_DH.mjs.map} +1 -1
- package/dist/{media-upload-BCidR-EY.mjs → media-upload-C7_AQJ5v.mjs} +8 -8
- package/dist/{media-upload-BCidR-EY.mjs.map → media-upload-C7_AQJ5v.mjs.map} +1 -1
- package/dist/{media-url-DHoPr0hq.mjs → media-url-8dVl1loq.mjs} +19 -2
- package/dist/media-url-8dVl1loq.mjs.map +1 -0
- package/dist/{media-usage-CdY5jhSR.mjs → media-usage-C1EswMTq.mjs} +9 -9
- package/dist/{media-usage-CdY5jhSR.mjs.map → media-usage-C1EswMTq.mjs.map} +1 -1
- package/dist/{media-usage-activation-BgeMtK5C.mjs → media-usage-activation-CrHNltlL.mjs} +3 -3
- package/dist/{media-usage-activation-BgeMtK5C.mjs.map → media-usage-activation-CrHNltlL.mjs.map} +1 -1
- package/dist/{media-usage-work-D6D9sMCA.mjs → media-usage-work-C5B1zT1c.mjs} +2 -2
- package/dist/{media-usage-work-D6D9sMCA.mjs.map → media-usage-work-C5B1zT1c.mjs.map} +1 -1
- package/dist/{media-usage-work-CnGCdHxx.mjs → media-usage-work-IkQx_Yz6.mjs} +4 -4
- package/dist/{media-usage-work-CnGCdHxx.mjs.map → media-usage-work-IkQx_Yz6.mjs.map} +1 -1
- package/dist/{media-usage-write-fence-hjeD4u7s.mjs → media-usage-write-fence-B9anjOSg.mjs} +3 -3
- package/dist/{media-usage-write-fence-hjeD4u7s.mjs.map → media-usage-write-fence-B9anjOSg.mjs.map} +1 -1
- package/dist/{menus-6qSwTNxG.mjs → menus-D8mC4eaN.mjs} +115 -136
- package/dist/menus-D8mC4eaN.mjs.map +1 -0
- package/dist/{menus-uvPLXMZf.mjs → menus-UdwjHZJC.mjs} +11 -3
- package/dist/{menus-uvPLXMZf.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-DN_WneRx.mjs → mode-Dm4BHhRH.mjs} +1 -1
- package/dist/{mode-DN_WneRx.mjs.map → mode-Dm4BHhRH.mjs.map} +1 -1
- package/dist/{node-sqlite-compat-BuJXIeMz.mjs → node-sqlite-compat-2sezm-Zd.mjs} +1 -1
- package/dist/{node-sqlite-compat-BuJXIeMz.mjs.map → node-sqlite-compat-2sezm-Zd.mjs.map} +1 -1
- package/dist/{normalize-C2xNjTSG.mjs → normalize-4nkKGsuW.mjs} +1 -1
- package/dist/{normalize-C2xNjTSG.mjs.map → normalize-4nkKGsuW.mjs.map} +1 -1
- package/dist/{oauth-authorization-Dj6Kwc21.mjs → oauth-authorization-BxE_lURD.mjs} +4 -4
- package/dist/{oauth-authorization-Dj6Kwc21.mjs.map → oauth-authorization-BxE_lURD.mjs.map} +1 -1
- package/dist/{oauth-clients-FD7I0J8m.mjs → oauth-clients-DJIdOdq0.mjs} +1 -1
- package/dist/{oauth-clients-FD7I0J8m.mjs.map → oauth-clients-DJIdOdq0.mjs.map} +1 -1
- package/dist/{oauth-state-store-DkmDOmHs.mjs → oauth-state-store-CsdxP57n.mjs} +1 -1
- package/dist/{oauth-state-store-DkmDOmHs.mjs.map → oauth-state-store-CsdxP57n.mjs.map} +1 -1
- package/dist/{oauth-user-lookup-CvIwGpYd.mjs → oauth-user-lookup-HzzW-dkF.mjs} +1 -1
- package/dist/{oauth-user-lookup-CvIwGpYd.mjs.map → oauth-user-lookup-HzzW-dkF.mjs.map} +1 -1
- package/dist/object-cache/memory.d.mts +1 -1
- package/dist/{options-BHPeIbBd.mjs → options-D1FBiAv1.mjs} +60 -5
- package/dist/options-D1FBiAv1.mjs.map +1 -0
- package/dist/{options-CYb4y7hM.d.mts → options-D8Y0VHc7.d.mts} +9 -3
- 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-Ckpg-Qfp.mjs → parse-WRg5C3NX.mjs} +2 -2
- package/dist/{parse-Ckpg-Qfp.mjs.map → parse-WRg5C3NX.mjs.map} +1 -1
- package/dist/{passkey-config-O_lj3y0k.mjs → passkey-config-qIdO-wF6.mjs} +1 -1
- package/dist/{passkey-config-O_lj3y0k.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-4X9BrRrp.d.mts → placeholder-COrvARyD.d.mts} +1 -1
- package/dist/{placeholder-4X9BrRrp.d.mts.map → placeholder-COrvARyD.d.mts.map} +1 -1
- package/dist/plugin-types.d.mts +3 -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-Dhtwntrt.mjs → policy-XCfb-IE9.mjs} +2 -2
- package/dist/{policy-Dhtwntrt.mjs.map → policy-XCfb-IE9.mjs.map} +1 -1
- package/dist/{portable-text-U85hOafW.mjs → portable-text-BS3d5n-0.mjs} +1 -1
- package/dist/{portable-text-U85hOafW.mjs.map → portable-text-BS3d5n-0.mjs.map} +1 -1
- package/dist/{preview-B_vJLvf8.mjs → preview-BxwsGgGp.mjs} +2 -2
- package/dist/{preview-B_vJLvf8.mjs.map → preview-BxwsGgGp.mjs.map} +1 -1
- package/dist/{protocol-JdD2YhY9.d.mts → protocol-CLn58-nw.d.mts} +2 -2
- package/dist/{protocol-JdD2YhY9.d.mts.map → protocol-CLn58-nw.d.mts.map} +1 -1
- package/dist/{public-url-CarhZJgf.mjs → public-url-FWWAvnre.mjs} +1 -1
- package/dist/{public-url-CarhZJgf.mjs.map → public-url-FWWAvnre.mjs.map} +1 -1
- package/dist/{query-BZKZcG5b.mjs → query-DygOte9M.mjs} +25 -16
- package/dist/query-DygOte9M.mjs.map +1 -0
- package/dist/{query-BndaFxxp.mjs → query-gtXT03Wc.mjs} +4 -4
- package/dist/{query-BndaFxxp.mjs.map → query-gtXT03Wc.mjs.map} +1 -1
- package/dist/{rate-limit-BZmATC6W.mjs → rate-limit-CQUPm0dh.mjs} +2 -2
- package/dist/{rate-limit-BZmATC6W.mjs.map → rate-limit-CQUPm0dh.mjs.map} +1 -1
- package/dist/{redirect-CzqnLxK-.mjs → redirect-D1cWafi6.mjs} +1 -1
- package/dist/{redirect-CzqnLxK-.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-CqzNM0KM.mjs → redirects-DN-ZE33W.mjs} +5 -5
- package/dist/{redirects-CqzNM0KM.mjs.map → redirects-DN-ZE33W.mjs.map} +1 -1
- package/dist/{registry-AZAsRsor.mjs → registry-DTqaqxed.mjs} +26 -10
- package/dist/registry-DTqaqxed.mjs.map +1 -0
- package/dist/{relation-04DfKRTO.mjs → relation-DxgCHOBw.mjs} +2 -2
- package/dist/{relation-04DfKRTO.mjs.map → relation-DxgCHOBw.mjs.map} +1 -1
- package/dist/{relations-CcFwDJdJ.mjs → relations-KKDSLUwS.mjs} +4 -4
- package/dist/{relations-CcFwDJdJ.mjs.map → relations-KKDSLUwS.mjs.map} +1 -1
- package/dist/{relations-C4htk5sb.mjs → relations-rOmbndUJ.mjs} +3 -3
- package/dist/{relations-C4htk5sb.mjs.map → relations-rOmbndUJ.mjs.map} +1 -1
- 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-DYxLlnmz.mjs → request-meta-BgjUQLQ-.mjs} +2 -2
- package/dist/{request-meta-DYxLlnmz.mjs.map → request-meta-BgjUQLQ-.mjs.map} +1 -1
- package/dist/{resolve-prZ3mP7l.mjs → resolve-Cy0aWSRj.mjs} +37 -4
- package/dist/resolve-Cy0aWSRj.mjs.map +1 -0
- package/dist/{runner-YKfIMnaF.d.mts → runner-CfwysRM0.d.mts} +2 -2
- package/dist/{runner-YKfIMnaF.d.mts.map → runner-CfwysRM0.d.mts.map} +1 -1
- package/dist/{runner-BLIDKpmA.mjs → runner-nEzvnogG.mjs} +419 -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-CGnBeLiW.mjs → schema-CRu38Pr5.mjs} +3 -3
- package/dist/{schema-CGnBeLiW.mjs.map → schema-CRu38Pr5.mjs.map} +1 -1
- package/dist/{schema-DYr-Vd-L.mjs → schema-DifxndJx.mjs} +4 -4
- package/dist/{schema-DYr-Vd-L.mjs.map → schema-DifxndJx.mjs.map} +1 -1
- package/dist/{scopes-BhWvBavj.mjs → scopes-D5A1OZbq.mjs} +3 -3
- package/dist/{scopes-BhWvBavj.mjs.map → scopes-D5A1OZbq.mjs.map} +1 -1
- package/dist/{search-C-qDk4kx.mjs → search-DEPFSBFq.mjs} +4 -4
- package/dist/{search-C-qDk4kx.mjs.map → search-DEPFSBFq.mjs.map} +1 -1
- package/dist/{secrets-rEtHt-6z.mjs → secrets-CdfzLdoO.mjs} +3 -3
- package/dist/{secrets-rEtHt-6z.mjs.map → secrets-CdfzLdoO.mjs.map} +1 -1
- package/dist/{sections-B_nYvlwn.mjs → sections-3X52kmIR.mjs} +2 -2
- package/dist/{sections-B_nYvlwn.mjs.map → sections-3X52kmIR.mjs.map} +1 -1
- package/dist/seed/index.d.mts +2 -2
- package/dist/seed/index.mjs +26 -24
- package/dist/seo/index.d.mts +3 -3
- package/dist/seo/index.d.mts.map +1 -1
- package/dist/seo/index.mjs +18 -19
- package/dist/seo/index.mjs.map +1 -1
- package/dist/{seo-926NRIgt.mjs → seo-Bw68KxRc.mjs} +2 -2
- package/dist/{seo-926NRIgt.mjs.map → seo-Bw68KxRc.mjs.map} +1 -1
- package/dist/{seo-CVWkdv6x.mjs → seo-C4AmbsMU.mjs} +3 -2
- package/dist/seo-C4AmbsMU.mjs.map +1 -0
- package/dist/{service-CJl3ZAYs.mjs → service-J_-Vgo7R.mjs} +2 -2
- package/dist/{service-CJl3ZAYs.mjs.map → service-J_-Vgo7R.mjs.map} +1 -1
- package/dist/{session-user-BlMgqCHS.mjs → session-user-CbnMMwk6.mjs} +1 -1
- package/dist/{session-user-BlMgqCHS.mjs.map → session-user-CbnMMwk6.mjs.map} +1 -1
- package/dist/{settings-Cwm6o2jY.mjs → settings-AnEFYICn.mjs} +3 -3
- package/dist/{settings-Cwm6o2jY.mjs.map → settings-AnEFYICn.mjs.map} +1 -1
- package/dist/{settings--wobrkkC.mjs → settings-DcMjREe5.mjs} +6 -6
- package/dist/{settings--wobrkkC.mjs.map → settings-DcMjREe5.mjs.map} +1 -1
- package/dist/{setup-complete-DQbClIN2.mjs → setup-complete-BClXXTvr.mjs} +2 -2
- package/dist/{setup-complete-DQbClIN2.mjs.map → setup-complete-BClXXTvr.mjs.map} +1 -1
- package/dist/{setup-nonce-DZCFS2sn.mjs → setup-nonce-BheRa4RG.mjs} +1 -1
- package/dist/{setup-nonce-DZCFS2sn.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-BrxA_E9H.mjs → site-url-Bqf-ea3N.mjs} +3 -3
- package/dist/{site-url-BrxA_E9H.mjs.map → site-url-Bqf-ea3N.mjs.map} +1 -1
- package/dist/{snapshot--OCDTqdb.mjs → snapshot-C4CtXntb.mjs} +51 -35
- package/dist/snapshot-C4CtXntb.mjs.map +1 -0
- package/dist/{ssrf-5sIM5jzl.mjs → ssrf-gl4gFNhw.mjs} +148 -91
- package/dist/ssrf-gl4gFNhw.mjs.map +1 -0
- package/dist/{state-BpFVsJZB.mjs → state-1F6IOhdQ.mjs} +1 -1
- package/dist/{state-BpFVsJZB.mjs.map → state-1F6IOhdQ.mjs.map} +1 -1
- package/dist/{status-B777-dXz.mjs → status-Cenfk_r5.mjs} +1 -1
- package/dist/{status-B777-dXz.mjs.map → status-Cenfk_r5.mjs.map} +1 -1
- package/dist/storage/local.d.mts +1 -1
- package/dist/storage/local.mjs +1 -1
- package/dist/storage/s3.d.mts +1 -1
- package/dist/storage/s3.mjs +1 -1
- package/dist/{target-BmR0iTwz.mjs → target-CRzeTs8G.mjs} +1 -1
- package/dist/{target-BmR0iTwz.mjs.map → target-CRzeTs8G.mjs.map} +1 -1
- package/dist/{taxonomies-DkAkMupr.mjs → taxonomies-BOdxuZpV.mjs} +11 -4
- package/dist/taxonomies-BOdxuZpV.mjs.map +1 -0
- package/dist/{taxonomies-Wfy_Lg12.mjs → taxonomies-NcFDq5Gg.mjs} +23 -14
- package/dist/taxonomies-NcFDq5Gg.mjs.map +1 -0
- package/dist/{taxonomy-tJepplLL.mjs → taxonomy-DP1vny4K.mjs} +11 -3
- package/dist/{taxonomy-tJepplLL.mjs.map → taxonomy-DP1vny4K.mjs.map} +1 -1
- package/dist/{tokens-BCO1oruF.mjs → tokens-CDk8ox9p.mjs} +1 -1
- package/dist/{tokens-BCO1oruF.mjs.map → tokens-CDk8ox9p.mjs.map} +1 -1
- package/dist/{transport-xh6YKW2G.d.mts → transport-BVn4tVb9.d.mts} +1 -1
- package/dist/{transport-xh6YKW2G.d.mts.map → transport-BVn4tVb9.d.mts.map} +1 -1
- package/dist/{transport-Dr3qtwXC.mjs → transport-DP0JI-8i.mjs} +1 -1
- package/dist/{transport-Dr3qtwXC.mjs.map → transport-DP0JI-8i.mjs.map} +1 -1
- package/dist/{trusted-proxy-BR5F1Otp.mjs → trusted-proxy-BTM6UxqD.mjs} +1 -1
- package/dist/{trusted-proxy-BR5F1Otp.mjs.map → trusted-proxy-BTM6UxqD.mjs.map} +1 -1
- package/dist/{types-CXFkwEGC.d.mts → types-2n848aVW.d.mts} +1 -1
- package/dist/{types-CXFkwEGC.d.mts.map → types-2n848aVW.d.mts.map} +1 -1
- package/dist/{types-75KIqzL9.mjs → types-BMXnRIrX.mjs} +4 -2
- package/dist/types-BMXnRIrX.mjs.map +1 -0
- package/dist/{types-B6GrPic4.d.mts → types-BouXpOsa.d.mts} +115 -4
- package/dist/types-BouXpOsa.d.mts.map +1 -0
- package/dist/{types-3qNFPlci.mjs → types-ByG2coLw.mjs} +1 -1
- package/dist/{types-3qNFPlci.mjs.map → types-ByG2coLw.mjs.map} +1 -1
- package/dist/types-CQPWhPxE.mjs.map +1 -1
- package/dist/{types-CDtkNSFQ.d.mts → types-DEfNJ__A.d.mts} +1 -1
- package/dist/{types-CDtkNSFQ.d.mts.map → types-DEfNJ__A.d.mts.map} +1 -1
- package/dist/{types-xDMtUFnO.d.mts → types-DKcKSbtB.d.mts} +23 -7
- package/dist/types-DKcKSbtB.d.mts.map +1 -0
- package/dist/{types-C00oyCZp.d.mts → types-DRYs7uTL.d.mts} +1 -1
- package/dist/{types-C00oyCZp.d.mts.map → types-DRYs7uTL.d.mts.map} +1 -1
- package/dist/{types-DczELMop.d.mts → types-DaEg7KX2.d.mts} +1 -1
- package/dist/{types-DczELMop.d.mts.map → types-DaEg7KX2.d.mts.map} +1 -1
- package/dist/{types-BuHW4xDE.d.mts → types-LU8utpP_.d.mts} +6 -3
- package/dist/types-LU8utpP_.d.mts.map +1 -0
- package/dist/{types-CPeXo1wF.d.mts → types-VpYfPUxN.d.mts} +1 -1
- package/dist/{types-CPeXo1wF.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-FV23hEoW.d.mts → types-tJWDK__M.d.mts} +14 -1
- package/dist/types-tJWDK__M.d.mts.map +1 -0
- package/dist/{upload-attempts-BsqoQ1fn.mjs → upload-attempts-C6S2y-lp.mjs} +1 -1
- package/dist/{upload-attempts-BsqoQ1fn.mjs.map → upload-attempts-C6S2y-lp.mjs.map} +1 -1
- package/dist/{url-pattern-D4c2czpJ.mjs → url-pattern-UYtxVTuj.mjs} +1 -1
- package/dist/{url-pattern-D4c2czpJ.mjs.map → url-pattern-UYtxVTuj.mjs.map} +1 -1
- package/dist/{user-BTZ40aq6.mjs → user-DIsIXogT.mjs} +2 -2
- package/dist/{user-BTZ40aq6.mjs.map → user-DIsIXogT.mjs.map} +1 -1
- package/dist/{utils-BKvNjjhY.mjs → utils-BicP5Qbg.mjs} +2 -2
- package/dist/{utils-BKvNjjhY.mjs.map → utils-BicP5Qbg.mjs.map} +1 -1
- package/dist/{validate-DE_LRwo9.mjs → validate-D8VPn4Hv.mjs} +8 -3
- package/dist/validate-D8VPn4Hv.mjs.map +1 -0
- package/dist/{validate-DUP27OYD.d.mts → validate-Df6Dvwbw.d.mts} +12 -7
- package/dist/validate-Df6Dvwbw.d.mts.map +1 -0
- package/dist/{validation-BMImFJ11.mjs → validation-CzMJn9Ku.mjs} +13 -11
- package/dist/{validation-BMImFJ11.mjs.map → validation-CzMJn9Ku.mjs.map} +1 -1
- package/dist/version-CK67_SXX.mjs +7 -0
- package/dist/{version-Bii3suaO.mjs.map → version-CK67_SXX.mjs.map} +1 -1
- package/dist/{widgets-D3gJ10xU.mjs → widgets-RFVAxQl3.mjs} +5 -5
- package/dist/{widgets-D3gJ10xU.mjs.map → widgets-RFVAxQl3.mjs.map} +1 -1
- package/dist/{wxr-taxonomies-B2Og_6rU.d.mts → wxr-taxonomies-BX4yQL9s.d.mts} +1 -1
- package/dist/{wxr-taxonomies-B2Og_6rU.d.mts.map → wxr-taxonomies-BX4yQL9s.d.mts.map} +1 -1
- package/dist/{wxr-taxonomies-Cxngsjwo.mjs → wxr-taxonomies-Csdp7yde.mjs} +4 -4
- package/dist/{wxr-taxonomies-Cxngsjwo.mjs.map → wxr-taxonomies-Csdp7yde.mjs.map} +1 -1
- package/dist/{zod-generator-BuYSQJB7.mjs → zod-generator-CNRGdnBY.mjs} +3 -3
- package/dist/{zod-generator-BuYSQJB7.mjs.map → zod-generator-CNRGdnBY.mjs.map} +1 -1
- package/package.json +12 -10
- package/src/api/errors.ts +7 -0
- package/src/api/handlers/content.ts +66 -79
- package/src/api/handlers/entry-lock.ts +206 -0
- package/src/api/handlers/manifest.ts +1 -0
- package/src/api/handlers/marketplace.ts +28 -20
- package/src/api/handlers/menus.ts +9 -0
- package/src/api/handlers/registry.ts +13 -8
- 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 +9 -0
- package/src/api/openapi/document.ts +111 -6
- package/src/api/schemas/content.ts +8 -0
- package/src/api/schemas/entry-lock.ts +48 -0
- package/src/api/schemas/index.ts +1 -0
- package/src/api/schemas/schema.ts +10 -1
- package/src/api/types.ts +2 -0
- package/src/astro/integration/index.ts +9 -6
- package/src/astro/integration/routes.ts +5 -0
- package/src/astro/integration/runtime.ts +13 -5
- package/src/astro/integration/vite-config.ts +30 -0
- package/src/astro/middleware.ts +16 -0
- package/src/astro/routes/api/content/[collection]/[id]/discard-draft.ts +10 -0
- package/src/astro/routes/api/content/[collection]/[id]/lock.ts +133 -0
- package/src/astro/routes/api/content/[collection]/[id]/publish.ts +11 -1
- package/src/astro/routes/api/content/[collection]/[id]/schedule.ts +20 -0
- package/src/astro/routes/api/content/[collection]/[id]/unpublish.ts +10 -0
- 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/sitemap-[collection].xml.ts +4 -0
- package/src/astro/types.ts +13 -3
- 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/Gallery.astro +18 -4
- package/src/components/InlineEditor.astro +3 -1
- package/src/components/InlinePortableTextEditor.tsx +106 -11
- package/src/components/PortableText.astro +4 -0
- package/src/components/Table.astro +147 -62
- package/src/config/errors.ts +13 -0
- package/src/content/converters/portable-text-to-prosemirror.ts +26 -2
- package/src/content/converters/prosemirror-to-portable-text.ts +35 -6
- package/src/content/converters/types.ts +10 -0
- package/src/database/dialect-helpers.ts +125 -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 +6 -0
- package/src/database/repositories/content.ts +170 -1
- package/src/database/repositories/entry-locks.ts +257 -0
- package/src/database/repositories/options.ts +69 -5
- package/src/database/repositories/plugin-storage.ts +159 -0
- package/src/database/repositories/redirect.ts +17 -6
- package/src/database/repositories/taxonomy.ts +8 -0
- package/src/database/repositories/types.ts +3 -0
- package/src/database/types.ts +15 -1
- package/src/emdash-runtime.ts +117 -50
- package/src/i18n/resolve.ts +44 -4
- package/src/index.ts +14 -0
- package/src/loader.ts +35 -4
- package/src/mcp/server.ts +23 -5
- package/src/media/responsive.ts +23 -0
- package/src/media/usage/content-refresh.ts +2 -1
- package/src/menus/index.ts +17 -21
- package/src/page/seo-contributions.ts +78 -1
- package/src/page/seo-panel.ts +47 -0
- package/src/plugin-types.ts +9 -0
- package/src/plugins/conditional-storage.ts +30 -0
- package/src/plugins/context.ts +49 -17
- package/src/plugins/hooks.ts +7 -1
- package/src/plugins/index.ts +9 -0
- package/src/plugins/manager.ts +5 -2
- 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 +114 -0
- package/src/query.ts +29 -3
- package/src/registry/config.ts +130 -27
- package/src/registry/types.ts +5 -6
- package/src/schema/collection-slugs-cache.ts +157 -0
- package/src/schema/registry.ts +19 -0
- package/src/schema/types.ts +25 -6
- package/src/security/ssrf.ts +167 -141
- 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/taxonomies/term-counts.ts +22 -5
- package/dist/api-Dz6rgoa3.mjs.map +0 -1
- package/dist/apply-B4SIOxR1.mjs.map +0 -1
- package/dist/config-it29yDLA.mjs.map +0 -1
- package/dist/content-DjvM0T92.mjs.map +0 -1
- package/dist/context-CX6gxOLW.mjs.map +0 -1
- package/dist/dialect-helpers-BSbfaO3F.mjs.map +0 -1
- package/dist/errors-DsVoDUjJ.mjs.map +0 -1
- package/dist/index-BJNMCWmu.d.mts.map +0 -1
- package/dist/loader-Z8vl7zTq.mjs.map +0 -1
- package/dist/media-url-DHoPr0hq.mjs.map +0 -1
- package/dist/menus-6qSwTNxG.mjs.map +0 -1
- package/dist/options-BHPeIbBd.mjs.map +0 -1
- package/dist/options-CYb4y7hM.d.mts.map +0 -1
- package/dist/query-BZKZcG5b.mjs.map +0 -1
- package/dist/redirect-CZkbozu9.mjs.map +0 -1
- package/dist/redirects-BLNOWQTn.mjs.map +0 -1
- package/dist/registry-AZAsRsor.mjs.map +0 -1
- package/dist/relations-DnRK4YIT.d.mts.map +0 -1
- package/dist/resolve-prZ3mP7l.mjs.map +0 -1
- package/dist/runner-BLIDKpmA.mjs.map +0 -1
- package/dist/seo-CVWkdv6x.mjs.map +0 -1
- package/dist/snapshot--OCDTqdb.mjs.map +0 -1
- package/dist/ssrf-5sIM5jzl.mjs.map +0 -1
- package/dist/taxonomies-DkAkMupr.mjs.map +0 -1
- package/dist/taxonomies-Wfy_Lg12.mjs.map +0 -1
- package/dist/types-75KIqzL9.mjs.map +0 -1
- package/dist/types-B6GrPic4.d.mts.map +0 -1
- package/dist/types-BuHW4xDE.d.mts.map +0 -1
- package/dist/types-FV23hEoW.d.mts.map +0 -1
- package/dist/types-xDMtUFnO.d.mts.map +0 -1
- package/dist/validate-DE_LRwo9.mjs.map +0 -1
- package/dist/validate-DUP27OYD.d.mts.map +0 -1
- package/dist/version-Bii3suaO.mjs +0 -7
- /package/dist/{api-tokens-BfYts-sq.mjs → api-tokens-B_lfpmH3.mjs} +0 -0
- /package/dist/{ssrf-Dg3cIT-b.mjs → ssrf-TQhaljuI.mjs} +0 -0
- /package/dist/{types-DfuTR6dL.mjs → types-A2cN6a4a.mjs} +0 -0
|
@@ -400,6 +400,12 @@ export function createViteConfig(
|
|
|
400
400
|
const useSyncExternalStoreWithSelectorShimPath = resolveIntegrationShim(
|
|
401
401
|
"use-sync-external-store-with-selector.js",
|
|
402
402
|
);
|
|
403
|
+
const configuredWatchIgnored = options.astroConfig.vite?.server?.watch?.ignored;
|
|
404
|
+
const watchIgnored = Array.isArray(configuredWatchIgnored)
|
|
405
|
+
? configuredWatchIgnored
|
|
406
|
+
: configuredWatchIgnored
|
|
407
|
+
? [configuredWatchIgnored]
|
|
408
|
+
: [];
|
|
403
409
|
|
|
404
410
|
return {
|
|
405
411
|
// Astro SSR routes resolve version.ts from source (not tsdown dist),
|
|
@@ -463,6 +469,11 @@ export function createViteConfig(
|
|
|
463
469
|
// In production, macros are pre-compiled by tsdown in the admin package.
|
|
464
470
|
...(useSource ? [linguiMacroPlugin(adminSourcePath, adminDistPath)] : []),
|
|
465
471
|
] as NonNullable<AstroConfig["vite"]>["plugins"],
|
|
472
|
+
server: {
|
|
473
|
+
watch: {
|
|
474
|
+
ignored: [...watchIgnored, "**/.wrangler/**"],
|
|
475
|
+
},
|
|
476
|
+
},
|
|
466
477
|
// Handle native modules for SSR.
|
|
467
478
|
// On Node: external keeps native addons out of the SSR bundle.
|
|
468
479
|
// On Cloudflare: skip — the adapter handles externalization, and setting
|
|
@@ -496,6 +507,9 @@ export function createViteConfig(
|
|
|
496
507
|
// EmDash direct deps
|
|
497
508
|
"emdash > @portabletext/toolkit",
|
|
498
509
|
"emdash > @unpic/placeholder",
|
|
510
|
+
"emdash > @atcute/client",
|
|
511
|
+
"emdash > @atcute/lexicons/syntax",
|
|
512
|
+
"emdash > @atcute/lexicons/validations",
|
|
499
513
|
"emdash > blurhash",
|
|
500
514
|
"emdash > croner",
|
|
501
515
|
"emdash > jose",
|
|
@@ -507,6 +521,7 @@ export function createViteConfig(
|
|
|
507
521
|
"emdash > mime/lite",
|
|
508
522
|
"emdash > modern-tar",
|
|
509
523
|
"emdash > sanitize-html",
|
|
524
|
+
"emdash > @tiptap/core",
|
|
510
525
|
"emdash > ulidx",
|
|
511
526
|
"emdash > upng-js",
|
|
512
527
|
"emdash > astro-portabletext",
|
|
@@ -517,6 +532,21 @@ export function createViteConfig(
|
|
|
517
532
|
"emdash > @emdash-cms/auth > @oslojs/crypto/ecdsa",
|
|
518
533
|
"emdash > @emdash-cms/auth > @oslojs/crypto/sha2",
|
|
519
534
|
"emdash > @emdash-cms/auth > @oslojs/webauthn",
|
|
535
|
+
// Registry routes are lazy, so their AT Protocol graph is not
|
|
536
|
+
// present during Vite's initial dependency scan.
|
|
537
|
+
"emdash > @emdash-cms/registry-lexicons > @atcute/atproto/types/label/defs",
|
|
538
|
+
"emdash > @emdash-cms/registry-client > @atcute/client",
|
|
539
|
+
"emdash > @emdash-cms/registry-client > @atcute/crypto",
|
|
540
|
+
"emdash > @emdash-cms/registry-client > @atcute/identity",
|
|
541
|
+
"emdash > @emdash-cms/registry-client > @atcute/identity-resolver",
|
|
542
|
+
"emdash > @emdash-cms/registry-client > @atcute/lexicons/syntax",
|
|
543
|
+
"emdash > @emdash-cms/registry-client > @atcute/lexicons/validations",
|
|
544
|
+
"emdash > @emdash-cms/registry-client > @atcute/multibase",
|
|
545
|
+
"emdash > @emdash-cms/registry-client > @atcute/repo",
|
|
546
|
+
"emdash > @emdash-cms/registry-client > @emdash-cms/registry-moderation > @atcute/cbor",
|
|
547
|
+
"emdash > @emdash-cms/registry-client > @emdash-cms/registry-moderation > @atcute/cid",
|
|
548
|
+
"emdash > @emdash-cms/registry-client > @emdash-cms/registry-moderation > @atcute/crypto",
|
|
549
|
+
"emdash > @emdash-cms/registry-client > @emdash-cms/registry-moderation > @atcute/multibase",
|
|
520
550
|
// Auth deps imported only on auth/login/callback routes, so
|
|
521
551
|
// the initial page scan misses them. Pre-bundle to avoid a
|
|
522
552
|
// re-optimize + reload cascade on first authenticated request.
|
package/src/astro/middleware.ts
CHANGED
|
@@ -34,6 +34,8 @@ import { createScheduler as virtualCreateScheduler } from "virtual:emdash/schedu
|
|
|
34
34
|
import { createStorage as virtualCreateStorage } from "virtual:emdash/storage";
|
|
35
35
|
|
|
36
36
|
import { after } from "../after.js";
|
|
37
|
+
import { apiError } from "../api/error.js";
|
|
38
|
+
import { EmDashConfigurationError } from "../config/errors.js";
|
|
37
39
|
import {
|
|
38
40
|
createRecorder,
|
|
39
41
|
flushRecorder,
|
|
@@ -67,6 +69,7 @@ import {
|
|
|
67
69
|
runWithContext,
|
|
68
70
|
} from "../request-context.js";
|
|
69
71
|
import type { PublishedRef } from "../scheduled-publish.js";
|
|
72
|
+
import { EmDashStorageError } from "../storage/types.js";
|
|
70
73
|
import { isMissingTableError } from "../utils/db-errors.js";
|
|
71
74
|
import { createInitLock, type InitLock, initWithLock } from "../utils/init-lock.js";
|
|
72
75
|
import type { EmDashConfig } from "./integration/runtime.js";
|
|
@@ -482,6 +485,17 @@ function migrationRequiredResponse(): Response {
|
|
|
482
485
|
);
|
|
483
486
|
}
|
|
484
487
|
|
|
488
|
+
function runtimeConfigurationErrorResponse(error: unknown, pathname: string): Response | null {
|
|
489
|
+
if (!pathname.startsWith("/_emdash/api/")) return null;
|
|
490
|
+
if (error instanceof EmDashConfigurationError) {
|
|
491
|
+
return apiError(error.code, error.message, 500);
|
|
492
|
+
}
|
|
493
|
+
if (error instanceof EmDashStorageError && error.code === "BINDING_NOT_FOUND") {
|
|
494
|
+
return apiError(error.code, error.message, 500);
|
|
495
|
+
}
|
|
496
|
+
return null;
|
|
497
|
+
}
|
|
498
|
+
|
|
485
499
|
/**
|
|
486
500
|
* Baseline security headers applied to all responses.
|
|
487
501
|
* Admin routes get additional headers (strict CSP) from auth middleware.
|
|
@@ -997,6 +1011,8 @@ export const onRequest = defineMiddleware(async (context, next) => {
|
|
|
997
1011
|
return migrationRequiredResponse();
|
|
998
1012
|
}
|
|
999
1013
|
console.error("EmDash middleware error:", error);
|
|
1014
|
+
const configurationError = runtimeConfigurationErrorResponse(error, url.pathname);
|
|
1015
|
+
if (configurationError) return configurationError;
|
|
1000
1016
|
}
|
|
1001
1017
|
|
|
1002
1018
|
// Ask the adapter for a request-scoped db. When it returns one, we stash
|
|
@@ -8,6 +8,7 @@ import type { APIRoute } from "astro";
|
|
|
8
8
|
|
|
9
9
|
import { requireOwnerPerm } from "#api/authorize.js";
|
|
10
10
|
import { apiError, mapErrorStatus, unwrapResult } from "#api/error.js";
|
|
11
|
+
import { claimEntryLockForWrite } from "#api/handlers/entry-lock.js";
|
|
11
12
|
import { isParseError, parseOptionalBody } from "#api/parse.js";
|
|
12
13
|
import { contentRevisionConditionBody } from "#api/schemas.js";
|
|
13
14
|
|
|
@@ -52,6 +53,15 @@ export const POST: APIRoute = async ({ params, request, locals, url, cache }) =>
|
|
|
52
53
|
|
|
53
54
|
const resolvedId = typeof existingItem?.id === "string" ? existingItem.id : id;
|
|
54
55
|
|
|
56
|
+
const refusal = await claimEntryLockForWrite(emdash.db, collection, resolvedId, user!.id, {
|
|
57
|
+
override: body?.overrideLock,
|
|
58
|
+
});
|
|
59
|
+
if (refusal) {
|
|
60
|
+
return apiError(refusal.code, refusal.message, mapErrorStatus(refusal.code), {
|
|
61
|
+
...refusal.details,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
|
|
55
65
|
const result = await emdash.handleContentDiscardDraft(collection, resolvedId, {
|
|
56
66
|
_rev: body?._rev,
|
|
57
67
|
});
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Entry edit lock
|
|
3
|
+
*
|
|
4
|
+
* GET /_emdash/api/content/{collection}/{id}/lock - Read the current holder
|
|
5
|
+
* POST /_emdash/api/content/{collection}/{id}/lock - Take or refresh the lock
|
|
6
|
+
* DELETE /_emdash/api/content/{collection}/{id}/lock - Release the caller's lock
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import type { APIRoute } from "astro";
|
|
10
|
+
|
|
11
|
+
import { requireOwnerPerm } from "#api/authorize.js";
|
|
12
|
+
import { apiError, mapErrorStatus, unwrapResult } from "#api/error.js";
|
|
13
|
+
import {
|
|
14
|
+
handleEntryLockAcquire,
|
|
15
|
+
handleEntryLockRead,
|
|
16
|
+
handleEntryLockRelease,
|
|
17
|
+
} from "#api/handlers/entry-lock.js";
|
|
18
|
+
import { isParseError, parseOptionalBody } from "#api/parse.js";
|
|
19
|
+
import { entryLockAcquireBody } from "#api/schemas.js";
|
|
20
|
+
|
|
21
|
+
export const prerender = false;
|
|
22
|
+
|
|
23
|
+
interface ResolvedEntry {
|
|
24
|
+
resolvedId: string;
|
|
25
|
+
userId: string;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Resolves the entry the way every other single-entry route does, and applies
|
|
30
|
+
* the same edit permission, since holding a lock is the prelude to a write.
|
|
31
|
+
*/
|
|
32
|
+
async function resolveEntry(
|
|
33
|
+
locals: App.Locals,
|
|
34
|
+
collection: string,
|
|
35
|
+
id: string,
|
|
36
|
+
locale: string | undefined,
|
|
37
|
+
): Promise<ResolvedEntry | Response> {
|
|
38
|
+
const { emdash, user } = locals;
|
|
39
|
+
if (!emdash?.handleContentGet) {
|
|
40
|
+
return apiError("NOT_CONFIGURED", "EmDash is not initialized", 500);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
const existing = await emdash.handleContentGet(collection, id, locale);
|
|
44
|
+
if (!existing.success) {
|
|
45
|
+
return apiError(
|
|
46
|
+
existing.error?.code ?? "UNKNOWN_ERROR",
|
|
47
|
+
existing.error?.message ?? "Unknown error",
|
|
48
|
+
mapErrorStatus(existing.error?.code),
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const existingData =
|
|
53
|
+
existing.data && typeof existing.data === "object"
|
|
54
|
+
? // eslint-disable-next-line typescript/no-unsafe-type-assertion -- handler returns unknown data; narrowed by typeof check above
|
|
55
|
+
(existing.data as Record<string, unknown>)
|
|
56
|
+
: undefined;
|
|
57
|
+
const existingItem =
|
|
58
|
+
existingData?.item && typeof existingData.item === "object"
|
|
59
|
+
? // eslint-disable-next-line typescript/no-unsafe-type-assertion -- narrowed by typeof check above
|
|
60
|
+
(existingData.item as Record<string, unknown>)
|
|
61
|
+
: existingData;
|
|
62
|
+
const authorId = typeof existingItem?.authorId === "string" ? existingItem.authorId : "";
|
|
63
|
+
const denied = requireOwnerPerm(user, authorId, "content:edit_own", "content:edit_any");
|
|
64
|
+
if (denied) return denied;
|
|
65
|
+
|
|
66
|
+
return {
|
|
67
|
+
resolvedId: typeof existingItem?.id === "string" ? existingItem.id : id,
|
|
68
|
+
userId: user!.id,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export const GET: APIRoute = async ({ params, locals, url }) => {
|
|
73
|
+
const collection = params.collection!;
|
|
74
|
+
const id = params.id!;
|
|
75
|
+
const resolved = await resolveEntry(
|
|
76
|
+
locals,
|
|
77
|
+
collection,
|
|
78
|
+
id,
|
|
79
|
+
url.searchParams.get("locale") || undefined,
|
|
80
|
+
);
|
|
81
|
+
if (resolved instanceof Response) return resolved;
|
|
82
|
+
|
|
83
|
+
return unwrapResult(
|
|
84
|
+
await handleEntryLockRead(locals.emdash.db, collection, resolved.resolvedId, resolved.userId),
|
|
85
|
+
);
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
export const POST: APIRoute = async ({ params, request, locals, url }) => {
|
|
89
|
+
const collection = params.collection!;
|
|
90
|
+
const id = params.id!;
|
|
91
|
+
const body = await parseOptionalBody(request, entryLockAcquireBody, {});
|
|
92
|
+
if (isParseError(body)) return body;
|
|
93
|
+
|
|
94
|
+
const resolved = await resolveEntry(
|
|
95
|
+
locals,
|
|
96
|
+
collection,
|
|
97
|
+
id,
|
|
98
|
+
url.searchParams.get("locale") || undefined,
|
|
99
|
+
);
|
|
100
|
+
if (resolved instanceof Response) return resolved;
|
|
101
|
+
|
|
102
|
+
return unwrapResult(
|
|
103
|
+
await handleEntryLockAcquire(
|
|
104
|
+
locals.emdash.db,
|
|
105
|
+
collection,
|
|
106
|
+
resolved.resolvedId,
|
|
107
|
+
resolved.userId,
|
|
108
|
+
{ takeover: body?.takeover, token: body?.token },
|
|
109
|
+
),
|
|
110
|
+
);
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
export const DELETE: APIRoute = async ({ params, locals, url }) => {
|
|
114
|
+
const collection = params.collection!;
|
|
115
|
+
const id = params.id!;
|
|
116
|
+
const resolved = await resolveEntry(
|
|
117
|
+
locals,
|
|
118
|
+
collection,
|
|
119
|
+
id,
|
|
120
|
+
url.searchParams.get("locale") || undefined,
|
|
121
|
+
);
|
|
122
|
+
if (resolved instanceof Response) return resolved;
|
|
123
|
+
|
|
124
|
+
return unwrapResult(
|
|
125
|
+
await handleEntryLockRelease(
|
|
126
|
+
locals.emdash.db,
|
|
127
|
+
collection,
|
|
128
|
+
resolved.resolvedId,
|
|
129
|
+
resolved.userId,
|
|
130
|
+
{ token: url.searchParams.get("token") ?? undefined },
|
|
131
|
+
),
|
|
132
|
+
);
|
|
133
|
+
};
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* POST /_emdash/api/content/{collection}/{id}/publish
|
|
5
5
|
*
|
|
6
|
-
* Optional JSON body: { publishedAt?: string, _rev?: string }
|
|
6
|
+
* Optional JSON body: { publishedAt?: string, _rev?: string, overrideLock?: boolean }
|
|
7
7
|
* publishedAt — ISO 8601 datetime to backdate the publish (e.g. when
|
|
8
8
|
* migrating content). Writing publishedAt requires content:publish_any.
|
|
9
9
|
* Without it, the existing published_at is preserved on re-publish and
|
|
@@ -15,6 +15,7 @@ import type { APIRoute } from "astro";
|
|
|
15
15
|
|
|
16
16
|
import { requireOwnerPerm } from "#api/authorize.js";
|
|
17
17
|
import { apiError, mapErrorStatus, unwrapResult } from "#api/error.js";
|
|
18
|
+
import { claimEntryLockForWrite } from "#api/handlers/entry-lock.js";
|
|
18
19
|
import { isParseError, parseOptionalBody } from "#api/parse.js";
|
|
19
20
|
import { contentPublishBody } from "#api/schemas.js";
|
|
20
21
|
|
|
@@ -76,6 +77,15 @@ export const POST: APIRoute = async ({ params, request, locals, url, cache }) =>
|
|
|
76
77
|
|
|
77
78
|
const resolvedId = typeof existingItem?.id === "string" ? existingItem.id : id;
|
|
78
79
|
|
|
80
|
+
const refusal = await claimEntryLockForWrite(emdash.db, collection, resolvedId, user!.id, {
|
|
81
|
+
override: body?.overrideLock,
|
|
82
|
+
});
|
|
83
|
+
if (refusal) {
|
|
84
|
+
return apiError(refusal.code, refusal.message, mapErrorStatus(refusal.code), {
|
|
85
|
+
...refusal.details,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
|
|
79
89
|
const result = await emdash.handleContentPublish(collection, resolvedId, {
|
|
80
90
|
publishedAt,
|
|
81
91
|
_rev: body?._rev,
|
|
@@ -9,6 +9,7 @@ import type { APIRoute } from "astro";
|
|
|
9
9
|
|
|
10
10
|
import { requireOwnerPerm } from "#api/authorize.js";
|
|
11
11
|
import { apiError, mapErrorStatus, unwrapResult } from "#api/error.js";
|
|
12
|
+
import { claimEntryLockForWrite } from "#api/handlers/entry-lock.js";
|
|
12
13
|
import { parseBody, isParseError } from "#api/parse.js";
|
|
13
14
|
import { contentScheduleBody } from "#api/schemas.js";
|
|
14
15
|
|
|
@@ -61,6 +62,15 @@ export const POST: APIRoute = async ({ params, request, locals, url, cache }) =>
|
|
|
61
62
|
const denied = requireOwnerPerm(user, authorId, "content:publish_own", "content:publish_any");
|
|
62
63
|
if (denied) return denied;
|
|
63
64
|
|
|
65
|
+
const refusal = await claimEntryLockForWrite(emdash.db, collection, resolvedId ?? id, user!.id, {
|
|
66
|
+
override: body.overrideLock,
|
|
67
|
+
});
|
|
68
|
+
if (refusal) {
|
|
69
|
+
return apiError(refusal.code, refusal.message, mapErrorStatus(refusal.code), {
|
|
70
|
+
...refusal.details,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
|
|
64
74
|
const result = await emdash.handleContentSchedule(collection, resolvedId ?? id, body.scheduledAt);
|
|
65
75
|
|
|
66
76
|
if (!result.success) return unwrapResult(result);
|
|
@@ -95,6 +105,16 @@ export const DELETE: APIRoute = async ({ params, locals, url, cache }) => {
|
|
|
95
105
|
const denied = requireOwnerPerm(user, authorId, "content:publish_own", "content:publish_any");
|
|
96
106
|
if (denied) return denied;
|
|
97
107
|
|
|
108
|
+
// DELETE carries no body, so the lock opt-out rides on the query string.
|
|
109
|
+
const refusal = await claimEntryLockForWrite(emdash.db, collection, resolvedId ?? id, user!.id, {
|
|
110
|
+
override: url.searchParams.get("overrideLock") === "true",
|
|
111
|
+
});
|
|
112
|
+
if (refusal) {
|
|
113
|
+
return apiError(refusal.code, refusal.message, mapErrorStatus(refusal.code), {
|
|
114
|
+
...refusal.details,
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
|
|
98
118
|
const result = await emdash.handleContentUnschedule(collection, resolvedId ?? id);
|
|
99
119
|
|
|
100
120
|
if (!result.success) return unwrapResult(result);
|
|
@@ -8,6 +8,7 @@ import type { APIRoute } from "astro";
|
|
|
8
8
|
|
|
9
9
|
import { requireOwnerPerm } from "#api/authorize.js";
|
|
10
10
|
import { apiError, mapErrorStatus, unwrapResult } from "#api/error.js";
|
|
11
|
+
import { claimEntryLockForWrite } from "#api/handlers/entry-lock.js";
|
|
11
12
|
import { isParseError, parseOptionalBody } from "#api/parse.js";
|
|
12
13
|
import { contentRevisionConditionBody } from "#api/schemas.js";
|
|
13
14
|
|
|
@@ -52,6 +53,15 @@ export const POST: APIRoute = async ({ params, request, locals, url, cache }) =>
|
|
|
52
53
|
|
|
53
54
|
const resolvedId = typeof existingItem?.id === "string" ? existingItem.id : id;
|
|
54
55
|
|
|
56
|
+
const refusal = await claimEntryLockForWrite(emdash.db, collection, resolvedId, user!.id, {
|
|
57
|
+
override: body?.overrideLock,
|
|
58
|
+
});
|
|
59
|
+
if (refusal) {
|
|
60
|
+
return apiError(refusal.code, refusal.message, mapErrorStatus(refusal.code), {
|
|
61
|
+
...refusal.details,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
|
|
55
65
|
const result = await emdash.handleContentUnpublish(collection, resolvedId, { _rev: body?._rev });
|
|
56
66
|
|
|
57
67
|
if (!result.success) return unwrapResult(result);
|
|
@@ -11,6 +11,7 @@ import type { APIRoute } from "astro";
|
|
|
11
11
|
|
|
12
12
|
import { requirePerm, requireOwnerPerm } from "#api/authorize.js";
|
|
13
13
|
import { apiError, mapErrorStatus, unwrapResult } from "#api/error.js";
|
|
14
|
+
import { claimEntryLockForWrite } from "#api/handlers/entry-lock.js";
|
|
14
15
|
import { parseBody, isParseError } from "#api/parse.js";
|
|
15
16
|
import { contentUpdateBody } from "#api/schemas.js";
|
|
16
17
|
|
|
@@ -112,16 +113,30 @@ export const PUT: APIRoute = async ({ params, request, locals, cache }) => {
|
|
|
112
113
|
// Use the resolved ID (handles slug → ID resolution)
|
|
113
114
|
const resolvedId = typeof existingItem?.id === "string" ? existingItem.id : id;
|
|
114
115
|
|
|
116
|
+
const refusal = await claimEntryLockForWrite(emdash.db, collection, resolvedId, user!.id, {
|
|
117
|
+
override: body.overrideLock,
|
|
118
|
+
});
|
|
119
|
+
if (refusal) {
|
|
120
|
+
return apiError(refusal.code, refusal.message, mapErrorStatus(refusal.code), {
|
|
121
|
+
...refusal.details,
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
|
|
115
125
|
// Only allow authorId changes if user has content:edit_any permission (editor+)
|
|
116
126
|
const canChangeAuthor =
|
|
117
127
|
body.authorId !== undefined && user && hasPermission(user, "content:edit_any");
|
|
118
|
-
const
|
|
128
|
+
const { overrideLock: _overrideLock, ...writeBody } = canChangeAuthor
|
|
129
|
+
? body
|
|
130
|
+
: { ...body, authorId: undefined };
|
|
131
|
+
|
|
132
|
+
const actor = user ? { id: user.id, role: user.role } : undefined;
|
|
119
133
|
|
|
120
134
|
// Pass _rev through for optimistic concurrency validation
|
|
121
135
|
const result = await emdash.handleContentUpdate(collection, resolvedId, {
|
|
122
|
-
...
|
|
136
|
+
...writeBody,
|
|
123
137
|
locale,
|
|
124
138
|
_rev: body._rev,
|
|
139
|
+
actor,
|
|
125
140
|
});
|
|
126
141
|
|
|
127
142
|
if (!result.success) return unwrapResult(result);
|
|
@@ -172,6 +187,16 @@ export const DELETE: APIRoute = async ({ params, locals, url, cache }) => {
|
|
|
172
187
|
// Use the resolved ID (handles slug → ID resolution)
|
|
173
188
|
const resolvedId = typeof deleteItem?.id === "string" ? deleteItem.id : id;
|
|
174
189
|
|
|
190
|
+
// DELETE carries no body, so the lock opt-out rides on the query string.
|
|
191
|
+
const refusal = await claimEntryLockForWrite(emdash.db, collection, resolvedId, user!.id, {
|
|
192
|
+
override: url.searchParams.get("overrideLock") === "true",
|
|
193
|
+
});
|
|
194
|
+
if (refusal) {
|
|
195
|
+
return apiError(refusal.code, refusal.message, mapErrorStatus(refusal.code), {
|
|
196
|
+
...refusal.details,
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
|
|
175
200
|
const result = await emdash.handleContentDelete(collection, resolvedId);
|
|
176
201
|
|
|
177
202
|
if (!result.success) return unwrapResult(result);
|
|
@@ -79,12 +79,15 @@ export const POST: APIRoute = async ({ params, request, locals, cache }) => {
|
|
|
79
79
|
);
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
+
const actor = user ? { id: user.id, role: user.role } : undefined;
|
|
83
|
+
|
|
82
84
|
// Auto-set authorId to current user when creating content
|
|
83
85
|
const result = await emdash.handleContentCreate(collection, {
|
|
84
86
|
...body,
|
|
85
87
|
authorId: user?.id,
|
|
86
88
|
locale: body.locale,
|
|
87
89
|
translationOf: body.translationOf,
|
|
90
|
+
actor,
|
|
88
91
|
});
|
|
89
92
|
|
|
90
93
|
if (!result.success) return unwrapResult(result);
|
|
@@ -102,6 +102,10 @@ export const GET: APIRoute = async ({ params, locals, url }) => {
|
|
|
102
102
|
collection: col.collection,
|
|
103
103
|
slug: entry.slug || entry.id,
|
|
104
104
|
id: entry.id,
|
|
105
|
+
// Published date keeps date-token permalinks stable across edits;
|
|
106
|
+
// no updatedAt fallback — tokens stay literal without a publish
|
|
107
|
+
// date, consistent with the resolver's documented behavior.
|
|
108
|
+
date: entry.publishedAt,
|
|
105
109
|
});
|
|
106
110
|
const localized = await localizePath(path, entry.locale);
|
|
107
111
|
const absolute = localized === null ? null : `${siteUrl}${localized}`;
|
package/src/astro/types.ts
CHANGED
|
@@ -10,6 +10,7 @@ import type { Kysely } from "kysely";
|
|
|
10
10
|
|
|
11
11
|
import type { ContentFieldFilters } from "../content-list-query.js";
|
|
12
12
|
import type { RouteCallerInput, RouteMeta } from "../plugins/routes.js";
|
|
13
|
+
import type { ManifestRegistryConfigurationError } from "../registry/config.js";
|
|
13
14
|
|
|
14
15
|
// Re-export core types
|
|
15
16
|
export type {
|
|
@@ -37,11 +38,16 @@ export interface ManifestCollection {
|
|
|
37
38
|
titleField?: string;
|
|
38
39
|
dateField?: string;
|
|
39
40
|
/**
|
|
40
|
-
* Omit the auto-generated sidebar entry
|
|
41
|
-
* still listed in the manifest so its routes,
|
|
42
|
-
*
|
|
41
|
+
* Omit the auto-generated sidebar entry and dashboard quick action in the
|
|
42
|
+
* admin. The collection is still listed in the manifest so its routes,
|
|
43
|
+
* editor, and API keep working.
|
|
43
44
|
*/
|
|
44
45
|
hidden?: boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Sidebar folder. Collections sharing a group render under one collapsible
|
|
48
|
+
* entry labelled with the group.
|
|
49
|
+
*/
|
|
50
|
+
group?: string;
|
|
45
51
|
/** Valid custom field slugs to render in the admin content list. */
|
|
46
52
|
listColumns?: string[];
|
|
47
53
|
fields: Record<
|
|
@@ -209,6 +215,8 @@ export interface EmDashManifest {
|
|
|
209
215
|
minimumReleaseAgeExclude?: string[];
|
|
210
216
|
};
|
|
211
217
|
};
|
|
218
|
+
/** Safe field-level diagnostic when the registry configuration cannot be normalized. */
|
|
219
|
+
registryConfigurationError?: ManifestRegistryConfigurationError;
|
|
212
220
|
/**
|
|
213
221
|
* Admin branding overrides for white-labeling.
|
|
214
222
|
* Set via the `admin` config in `astro.config.mjs`.
|
|
@@ -298,6 +306,7 @@ export interface EmDashHandlers {
|
|
|
298
306
|
taxonomies?: Record<string, string[]>;
|
|
299
307
|
createdAt?: string | null;
|
|
300
308
|
publishedAt?: string | null;
|
|
309
|
+
actor?: { id: string; role: number };
|
|
301
310
|
},
|
|
302
311
|
) => Promise<HandlerResponse>;
|
|
303
312
|
|
|
@@ -321,6 +330,7 @@ export interface EmDashHandlers {
|
|
|
321
330
|
taxonomies?: Record<string, string[]>;
|
|
322
331
|
publishedAt?: string | null;
|
|
323
332
|
_rev?: string;
|
|
333
|
+
actor?: { id: string; role: number };
|
|
324
334
|
},
|
|
325
335
|
) => Promise<HandlerResponse>;
|
|
326
336
|
|
|
@@ -238,6 +238,10 @@ const updateCommand = defineCommand({
|
|
|
238
238
|
type: "boolean",
|
|
239
239
|
description: "Keep as draft instead of auto-publishing",
|
|
240
240
|
},
|
|
241
|
+
"override-lock": {
|
|
242
|
+
type: "boolean",
|
|
243
|
+
description: "Write even though another editor holds this entry's edit lock",
|
|
244
|
+
},
|
|
241
245
|
...connectionArgs,
|
|
242
246
|
},
|
|
243
247
|
async run({ args }) {
|
|
@@ -249,13 +253,16 @@ const updateCommand = defineCommand({
|
|
|
249
253
|
data,
|
|
250
254
|
_rev: args.rev,
|
|
251
255
|
locale: args.locale,
|
|
256
|
+
overrideLock: args["override-lock"],
|
|
252
257
|
});
|
|
253
258
|
|
|
254
259
|
// Auto-publish unless --draft is set.
|
|
255
260
|
// Only publish if the update created a draft revision (i.e. the
|
|
256
261
|
// collection supports revisions and data went to a draft).
|
|
257
262
|
if (!args.draft && updated.draftRevisionId) {
|
|
258
|
-
await client.publish(args.collection, updated.id
|
|
263
|
+
await client.publish(args.collection, updated.id, {
|
|
264
|
+
overrideLock: args["override-lock"],
|
|
265
|
+
});
|
|
259
266
|
}
|
|
260
267
|
|
|
261
268
|
// Re-fetch to return the current state
|
|
@@ -281,13 +288,17 @@ const deleteCommand = defineCommand({
|
|
|
281
288
|
description: "Content item ID or slug",
|
|
282
289
|
required: true,
|
|
283
290
|
},
|
|
291
|
+
"override-lock": {
|
|
292
|
+
type: "boolean",
|
|
293
|
+
description: "Write even though another editor holds this entry's edit lock",
|
|
294
|
+
},
|
|
284
295
|
...connectionArgs,
|
|
285
296
|
},
|
|
286
297
|
async run({ args }) {
|
|
287
298
|
configureOutputMode(args);
|
|
288
299
|
try {
|
|
289
300
|
const client = createClientFromArgs(args);
|
|
290
|
-
await client.delete(args.collection, args.id);
|
|
301
|
+
await client.delete(args.collection, args.id, { overrideLock: args["override-lock"] });
|
|
291
302
|
output({ success: true }, args);
|
|
292
303
|
consola.success(`Deleted ${args.collection}/${args.id}`);
|
|
293
304
|
} catch (error) {
|
|
@@ -310,13 +321,17 @@ const publishCommand = defineCommand({
|
|
|
310
321
|
description: "Content item ID or slug",
|
|
311
322
|
required: true,
|
|
312
323
|
},
|
|
324
|
+
"override-lock": {
|
|
325
|
+
type: "boolean",
|
|
326
|
+
description: "Write even though another editor holds this entry's edit lock",
|
|
327
|
+
},
|
|
313
328
|
...connectionArgs,
|
|
314
329
|
},
|
|
315
330
|
async run({ args }) {
|
|
316
331
|
configureOutputMode(args);
|
|
317
332
|
try {
|
|
318
333
|
const client = createClientFromArgs(args);
|
|
319
|
-
await client.publish(args.collection, args.id);
|
|
334
|
+
await client.publish(args.collection, args.id, { overrideLock: args["override-lock"] });
|
|
320
335
|
output({ success: true }, args);
|
|
321
336
|
consola.success(`Published ${args.collection}/${args.id}`);
|
|
322
337
|
} catch (error) {
|
|
@@ -339,13 +354,17 @@ const unpublishCommand = defineCommand({
|
|
|
339
354
|
description: "Content item ID or slug",
|
|
340
355
|
required: true,
|
|
341
356
|
},
|
|
357
|
+
"override-lock": {
|
|
358
|
+
type: "boolean",
|
|
359
|
+
description: "Write even though another editor holds this entry's edit lock",
|
|
360
|
+
},
|
|
342
361
|
...connectionArgs,
|
|
343
362
|
},
|
|
344
363
|
async run({ args }) {
|
|
345
364
|
configureOutputMode(args);
|
|
346
365
|
try {
|
|
347
366
|
const client = createClientFromArgs(args);
|
|
348
|
-
await client.unpublish(args.collection, args.id);
|
|
367
|
+
await client.unpublish(args.collection, args.id, { overrideLock: args["override-lock"] });
|
|
349
368
|
output({ success: true }, args);
|
|
350
369
|
consola.success(`Unpublished ${args.collection}/${args.id}`);
|
|
351
370
|
} catch (error) {
|
|
@@ -373,13 +392,20 @@ const scheduleCommand = defineCommand({
|
|
|
373
392
|
description: "ISO 8601 datetime to publish at",
|
|
374
393
|
required: true,
|
|
375
394
|
},
|
|
395
|
+
"override-lock": {
|
|
396
|
+
type: "boolean",
|
|
397
|
+
description: "Write even though another editor holds this entry's edit lock",
|
|
398
|
+
},
|
|
376
399
|
...connectionArgs,
|
|
377
400
|
},
|
|
378
401
|
async run({ args }) {
|
|
379
402
|
configureOutputMode(args);
|
|
380
403
|
try {
|
|
381
404
|
const client = createClientFromArgs(args);
|
|
382
|
-
await client.schedule(args.collection, args.id, {
|
|
405
|
+
await client.schedule(args.collection, args.id, {
|
|
406
|
+
at: args.at,
|
|
407
|
+
overrideLock: args["override-lock"],
|
|
408
|
+
});
|
|
383
409
|
output({ success: true }, args);
|
|
384
410
|
consola.success(`Scheduled ${args.collection}/${args.id} for ${args.at}`);
|
|
385
411
|
} catch (error) {
|
|
@@ -318,8 +318,10 @@ async function exportCollections(db: Kysely<Database>): Promise<SeedCollection[]
|
|
|
318
318
|
supports: collection.supports.length > 0 ? collection.supports : undefined,
|
|
319
319
|
urlPattern: collection.urlPattern || undefined,
|
|
320
320
|
routable: collection.routable === false ? false : undefined,
|
|
321
|
+
editLocking: collection.editLocking === false ? false : undefined,
|
|
321
322
|
hidden: collection.hidden || undefined,
|
|
322
323
|
sortOrder: collection.sortOrder,
|
|
324
|
+
group: collection.group,
|
|
323
325
|
fields: fields.map(
|
|
324
326
|
(field): SeedField => ({
|
|
325
327
|
slug: field.slug,
|