emdash 0.33.0 → 0.34.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/{adapters-BMyNSSZi.d.mts → adapters-34EN2eXO.d.mts} +26 -2
- package/dist/adapters-34EN2eXO.d.mts.map +1 -0
- package/dist/{allowed-origins-CG1pACtS.mjs → allowed-origins-DW7sYyqg.mjs} +2 -2
- package/dist/{allowed-origins-CG1pACtS.mjs.map → allowed-origins-DW7sYyqg.mjs.map} +1 -1
- package/dist/api/route-utils.d.mts +3 -3
- package/dist/api/route-utils.mjs +22 -21
- package/dist/api/route-utils.mjs.map +1 -1
- package/dist/api/schemas/index.d.mts +2 -2
- package/dist/api/schemas/index.mjs +6 -5
- package/dist/{api-D2hunekQ.mjs → api-DdAsirBe.mjs} +98 -407
- package/dist/api-DdAsirBe.mjs.map +1 -0
- package/dist/{api-tokens-CSND0i1z.mjs → api-tokens-CFXu8F_2.mjs} +2 -2
- package/dist/{api-tokens-CSND0i1z.mjs.map → api-tokens-CFXu8F_2.mjs.map} +1 -1
- package/dist/{apply-kwNEJW2l.mjs → apply-D5zfeD09.mjs} +131 -107
- package/dist/apply-D5zfeD09.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 +93 -35
- package/dist/astro/index.mjs.map +1 -1
- package/dist/astro/middleware/auth.d.mts +10 -10
- package/dist/astro/middleware/auth.mjs +8 -8
- package/dist/astro/middleware/media-usage-write-fence.d.mts +7 -0
- package/dist/astro/middleware/media-usage-write-fence.d.mts.map +1 -0
- package/dist/astro/middleware/media-usage-write-fence.mjs +35 -0
- package/dist/astro/middleware/media-usage-write-fence.mjs.map +1 -0
- package/dist/astro/middleware/redirect.d.mts.map +1 -1
- package/dist/astro/middleware/redirect.mjs +10 -7
- 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 +12 -11
- package/dist/astro/middleware.d.mts.map +1 -1
- package/dist/astro/middleware.mjs +1677 -156
- package/dist/astro/middleware.mjs.map +1 -1
- package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +9 -8
- package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs.map +1 -1
- package/dist/astro/routes/api/admin/allowed-domains/index.mjs +9 -8
- package/dist/astro/routes/api/admin/allowed-domains/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +5 -5
- package/dist/astro/routes/api/admin/api-tokens/index.mjs +6 -6
- package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +6 -6
- package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +12 -11
- package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/admin/byline-fields/index.mjs +12 -11
- package/dist/astro/routes/api/admin/byline-fields/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +12 -11
- package/dist/astro/routes/api/admin/byline-fields/reorder.mjs.map +1 -1
- 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 +14 -13
- package/dist/astro/routes/api/admin/comments/_id_/status.mjs.map +1 -1
- package/dist/astro/routes/api/admin/comments/_id_.mjs +6 -6
- package/dist/astro/routes/api/admin/comments/bulk.mjs +12 -11
- package/dist/astro/routes/api/admin/comments/bulk.mjs.map +1 -1
- package/dist/astro/routes/api/admin/comments/counts.mjs +6 -6
- package/dist/astro/routes/api/admin/comments/index.mjs +12 -11
- package/dist/astro/routes/api/admin/comments/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +5 -5
- package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +4 -4
- package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.d.mts +8 -0
- package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.d.mts.map +1 -0
- package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs +36 -0
- package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs.map +1 -0
- package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.d.mts +8 -0
- package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.d.mts.map +1 -0
- package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs +36 -0
- package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs.map +1 -0
- package/dist/astro/routes/api/admin/media-usage/repair.mjs +15 -14
- package/dist/astro/routes/api/admin/media-usage/repair.mjs.map +1 -1
- package/dist/astro/routes/api/admin/media-usage/work/index.d.mts +8 -0
- package/dist/astro/routes/api/admin/media-usage/work/index.d.mts.map +1 -0
- package/dist/astro/routes/api/admin/media-usage/work/index.mjs +37 -0
- package/dist/astro/routes/api/admin/media-usage/work/index.mjs.map +1 -0
- package/dist/astro/routes/api/admin/media-usage/work/retry.d.mts +8 -0
- package/dist/astro/routes/api/admin/media-usage/work/retry.d.mts.map +1 -0
- package/dist/astro/routes/api/admin/media-usage/work/retry.mjs +37 -0
- package/dist/astro/routes/api/admin/media-usage/work/retry.mjs.map +1 -0
- package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +5 -5
- package/dist/astro/routes/api/admin/oauth-clients/index.mjs +5 -5
- package/dist/astro/routes/api/admin/plugins/_id_/disable.d.mts.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +51 -43
- package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/enable.d.mts.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +51 -43
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +47 -42
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/mcp.mjs +6 -6
- package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs +47 -42
- package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.d.mts.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +50 -42
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/update.d.mts.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +50 -42
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/index.mjs +47 -42
- package/dist/astro/routes/api/admin/plugins/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +4 -4
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +47 -42
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.d.mts.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +50 -42
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +47 -42
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.d.mts.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +50 -42
- 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 +51 -43
- package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +47 -42
- 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 +51 -43
- package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/updates.mjs +47 -42
- package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +47 -42
- 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 +4 -4
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +47 -42
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/users/_id_/disable.mjs +3 -3
- package/dist/astro/routes/api/admin/users/_id_/enable.mjs +3 -3
- package/dist/astro/routes/api/admin/users/_id_/index.mjs +9 -8
- package/dist/astro/routes/api/admin/users/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +4 -4
- package/dist/astro/routes/api/admin/users/index.mjs +9 -8
- package/dist/astro/routes/api/admin/users/index.mjs.map +1 -1
- package/dist/astro/routes/api/auth/dev-bypass.mjs +7 -7
- package/dist/astro/routes/api/auth/invite/accept.mjs +3 -3
- package/dist/astro/routes/api/auth/invite/complete.mjs +13 -12
- package/dist/astro/routes/api/auth/invite/complete.mjs.map +1 -1
- package/dist/astro/routes/api/auth/invite/index.mjs +10 -9
- package/dist/astro/routes/api/auth/invite/index.mjs.map +1 -1
- package/dist/astro/routes/api/auth/invite/register-options.mjs +12 -11
- package/dist/astro/routes/api/auth/invite/register-options.mjs.map +1 -1
- package/dist/astro/routes/api/auth/logout.mjs +4 -4
- package/dist/astro/routes/api/auth/magic-link/send.mjs +12 -11
- package/dist/astro/routes/api/auth/magic-link/send.mjs.map +1 -1
- package/dist/astro/routes/api/auth/magic-link/verify.mjs +4 -4
- package/dist/astro/routes/api/auth/me.mjs +10 -9
- package/dist/astro/routes/api/auth/me.mjs.map +1 -1
- package/dist/astro/routes/api/auth/mode.mjs +4 -4
- package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +3 -3
- package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
- package/dist/astro/routes/api/auth/passkey/_id_.mjs +9 -8
- package/dist/astro/routes/api/auth/passkey/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/auth/passkey/index.mjs +3 -3
- package/dist/astro/routes/api/auth/passkey/options.mjs +14 -13
- package/dist/astro/routes/api/auth/passkey/options.mjs.map +1 -1
- package/dist/astro/routes/api/auth/passkey/register/options.mjs +12 -11
- package/dist/astro/routes/api/auth/passkey/register/options.mjs.map +1 -1
- package/dist/astro/routes/api/auth/passkey/register/verify.mjs +13 -12
- package/dist/astro/routes/api/auth/passkey/register/verify.mjs.map +1 -1
- package/dist/astro/routes/api/auth/passkey/verify.mjs +13 -12
- package/dist/astro/routes/api/auth/passkey/verify.mjs.map +1 -1
- package/dist/astro/routes/api/auth/signup/complete.mjs +13 -12
- package/dist/astro/routes/api/auth/signup/complete.mjs.map +1 -1
- package/dist/astro/routes/api/auth/signup/request.mjs +12 -11
- package/dist/astro/routes/api/auth/signup/request.mjs.map +1 -1
- package/dist/astro/routes/api/auth/signup/verify.mjs +3 -3
- package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +15 -14
- package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs.map +1 -1
- package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +14 -13
- package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +4 -4
- package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +5 -5
- package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +5 -5
- package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +4 -4
- package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +13 -13
- package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +11 -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 +18 -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 +18 -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 +5 -5
- package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +4 -4
- package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +11 -10
- package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.d.mts.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +44 -31
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +4 -4
- package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +5 -5
- package/dist/astro/routes/api/content/_collection_/_id_.mjs +11 -10
- package/dist/astro/routes/api/content/_collection_/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/authors.mjs +4 -4
- package/dist/astro/routes/api/content/_collection_/index.mjs +11 -10
- package/dist/astro/routes/api/content/_collection_/index.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/trash.mjs +10 -9
- package/dist/astro/routes/api/content/_collection_/trash.mjs.map +1 -1
- package/dist/astro/routes/api/dashboard.mjs +10 -8
- package/dist/astro/routes/api/dashboard.mjs.map +1 -1
- package/dist/astro/routes/api/dev/emails.mjs +4 -4
- package/dist/astro/routes/api/import/probe.d.mts +3 -3
- package/dist/astro/routes/api/import/probe.mjs +18 -16
- package/dist/astro/routes/api/import/probe.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress/analyze.mjs +5 -5
- package/dist/astro/routes/api/import/wordpress/execute.d.mts +11 -11
- package/dist/astro/routes/api/import/wordpress/execute.mjs +15 -15
- 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 +14 -12
- package/dist/astro/routes/api/import/wordpress/media.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress/prepare.mjs +13 -12
- package/dist/astro/routes/api/import/wordpress/prepare.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +11 -11
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +14 -14
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +18 -16
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress-plugin/callback.mjs +1 -1
- package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +11 -11
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +28 -27
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs.map +1 -1
- package/dist/astro/routes/api/manifest.mjs +5 -5
- package/dist/astro/routes/api/mcp.d.mts.map +1 -1
- package/dist/astro/routes/api/mcp.mjs +174 -72
- package/dist/astro/routes/api/mcp.mjs.map +1 -1
- package/dist/astro/routes/api/media/_id_/confirm.mjs +13 -11
- package/dist/astro/routes/api/media/_id_/confirm.mjs.map +1 -1
- package/dist/astro/routes/api/media/_id_/upload.mjs +6 -6
- package/dist/astro/routes/api/media/_id_/usage.mjs +17 -16
- package/dist/astro/routes/api/media/_id_/usage.mjs.map +1 -1
- package/dist/astro/routes/api/media/_id_.mjs +16 -15
- package/dist/astro/routes/api/media/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/media/file/_...key_.mjs +3 -3
- package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +4 -4
- package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +4 -4
- package/dist/astro/routes/api/media/providers/index.mjs +4 -4
- package/dist/astro/routes/api/media/upload-url.mjs +11 -10
- package/dist/astro/routes/api/media/upload-url.mjs.map +1 -1
- package/dist/astro/routes/api/media.mjs +18 -15
- package/dist/astro/routes/api/media.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +11 -11
- package/dist/astro/routes/api/menus/_name_/items.mjs +11 -11
- package/dist/astro/routes/api/menus/_name_/reorder.mjs +11 -11
- package/dist/astro/routes/api/menus/_name_/translations.mjs +11 -11
- package/dist/astro/routes/api/menus/_name_.mjs +11 -11
- package/dist/astro/routes/api/menus/index.mjs +11 -11
- package/dist/astro/routes/api/oauth/authorize.mjs +6 -6
- package/dist/astro/routes/api/oauth/device/authorize.mjs +7 -7
- package/dist/astro/routes/api/oauth/device/code.mjs +10 -10
- package/dist/astro/routes/api/oauth/device/token.mjs +9 -9
- package/dist/astro/routes/api/oauth/register.mjs +4 -4
- package/dist/astro/routes/api/oauth/token/refresh.mjs +7 -7
- package/dist/astro/routes/api/oauth/token/revoke.mjs +7 -7
- package/dist/astro/routes/api/oauth/token.mjs +7 -7
- package/dist/astro/routes/api/openapi.json.mjs +152 -6
- package/dist/astro/routes/api/openapi.json.mjs.map +1 -1
- package/dist/astro/routes/api/plugins/_pluginId_/_...path_.d.mts.map +1 -1
- package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +8 -7
- package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs.map +1 -1
- 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 +18 -17
- package/dist/astro/routes/api/relations/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/relations/_id_/translations.mjs +13 -12
- package/dist/astro/routes/api/relations/_id_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/relations/index.mjs +18 -17
- package/dist/astro/routes/api/relations/index.mjs.map +1 -1
- package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +4 -4
- package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +5 -5
- package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +47 -42
- 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 +47 -42
- 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 +47 -42
- package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/_slug_/index.d.mts.map +1 -1
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +47 -42
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/index.mjs +47 -42
- package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/reorder.mjs +47 -42
- package/dist/astro/routes/api/schema/collections/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/schema/index.mjs +10 -9
- package/dist/astro/routes/api/schema/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs +47 -42
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/schema/orphans/index.mjs +47 -42
- package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
- package/dist/astro/routes/api/search/enable.mjs +13 -13
- package/dist/astro/routes/api/search/index.mjs +12 -12
- package/dist/astro/routes/api/search/rebuild.mjs +13 -13
- package/dist/astro/routes/api/search/stats.mjs +8 -8
- package/dist/astro/routes/api/search/suggest.mjs +12 -12
- package/dist/astro/routes/api/sections/_slug_.mjs +12 -11
- package/dist/astro/routes/api/sections/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/sections/index.mjs +12 -11
- package/dist/astro/routes/api/sections/index.mjs.map +1 -1
- package/dist/astro/routes/api/settings/backups/archives/_name_.mjs +7 -7
- package/dist/astro/routes/api/settings/backups/archives/index.mjs +6 -6
- package/dist/astro/routes/api/settings/backups/export.mjs +7 -7
- package/dist/astro/routes/api/settings/backups/index.mjs +8 -8
- package/dist/astro/routes/api/settings/email.mjs +5 -5
- package/dist/astro/routes/api/settings.mjs +14 -13
- package/dist/astro/routes/api/settings.mjs.map +1 -1
- package/dist/astro/routes/api/setup/admin-verify.mjs +14 -13
- package/dist/astro/routes/api/setup/admin-verify.mjs.map +1 -1
- package/dist/astro/routes/api/setup/admin.mjs +13 -12
- package/dist/astro/routes/api/setup/admin.mjs.map +1 -1
- package/dist/astro/routes/api/setup/dev-bypass.mjs +30 -28
- package/dist/astro/routes/api/setup/dev-bypass.mjs.map +1 -1
- package/dist/astro/routes/api/setup/dev-reset.mjs +3 -3
- package/dist/astro/routes/api/setup/index.mjs +32 -30
- package/dist/astro/routes/api/setup/index.mjs.map +1 -1
- package/dist/astro/routes/api/setup/status.mjs +5 -5
- package/dist/astro/routes/api/snapshot.mjs +8 -8
- 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.d.mts.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +18 -16
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/translations.d.mts +8 -0
- package/dist/astro/routes/api/taxonomies/_name_/translations.d.mts.map +1 -0
- package/dist/astro/routes/api/taxonomies/_name_/translations.mjs +46 -0
- package/dist/astro/routes/api/taxonomies/_name_/translations.mjs.map +1 -0
- package/dist/astro/routes/api/taxonomies/_name_.d.mts +19 -0
- package/dist/astro/routes/api/taxonomies/_name_.d.mts.map +1 -0
- package/dist/astro/routes/api/taxonomies/_name_.mjs +88 -0
- package/dist/astro/routes/api/taxonomies/_name_.mjs.map +1 -0
- 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 +6 -6
- package/dist/astro/routes/api/typegen.mjs +6 -6
- package/dist/astro/routes/api/well-known/auth.mjs +1 -1
- 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 +10 -9
- package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +12 -11
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +12 -11
- package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_.mjs +7 -6
- package/dist/astro/routes/api/widget-areas/_name_.mjs.map +1 -1
- package/dist/astro/routes/api/widget-areas/index.mjs +12 -11
- package/dist/astro/routes/api/widget-areas/index.mjs.map +1 -1
- package/dist/astro/routes/api/widget-components.mjs +4 -4
- package/dist/astro/routes/robots.txt.mjs +7 -6
- package/dist/astro/routes/robots.txt.mjs.map +1 -1
- package/dist/astro/routes/sitemap-_collection_.xml.mjs +10 -10
- package/dist/astro/routes/sitemap.xml.mjs +8 -7
- package/dist/astro/routes/sitemap.xml.mjs.map +1 -1
- package/dist/astro/types.d.mts +35 -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-qRhWQnel.mjs → authorize-1iFJzPaZ.mjs} +2 -2
- package/dist/{authorize-qRhWQnel.mjs.map → authorize-1iFJzPaZ.mjs.map} +1 -1
- package/dist/{backup-CtA6LDNw.mjs → backup-LHjIAVNP.mjs} +4 -4
- package/dist/{backup-CtA6LDNw.mjs.map → backup-LHjIAVNP.mjs.map} +1 -1
- package/dist/{base64-B-PsqheR.mjs → base64-CvLhUKQv.mjs} +1 -1
- package/dist/{base64-B-PsqheR.mjs.map → base64-CvLhUKQv.mjs.map} +1 -1
- package/dist/bundle-CBEXrBnb.mjs +663 -0
- package/dist/bundle-CBEXrBnb.mjs.map +1 -0
- package/dist/{byline-fields-CNc0Yq5i.mjs → byline-fields-C5S8wygO.mjs} +2 -2
- package/dist/{byline-fields-CNc0Yq5i.mjs.map → byline-fields-C5S8wygO.mjs.map} +1 -1
- package/dist/{byline-Cp6csL84.mjs → byline-pEcoDps8.mjs} +5 -5
- package/dist/{byline-Cp6csL84.mjs.map → byline-pEcoDps8.mjs.map} +1 -1
- package/dist/{byline-registry-ZkPKqEwC.mjs → byline-registry-DDun8sxh.mjs} +2 -2
- package/dist/{byline-registry-ZkPKqEwC.mjs.map → byline-registry-DDun8sxh.mjs.map} +1 -1
- package/dist/{bylines-CEj5CdT4.mjs → bylines-BWemdX2k.mjs} +7 -7
- package/dist/{bylines-CEj5CdT4.mjs.map → bylines-BWemdX2k.mjs.map} +1 -1
- package/dist/{bylines-cf-C9lmF.mjs → bylines-DJfSfXCL.mjs} +5 -5
- package/dist/{bylines-cf-C9lmF.mjs.map → bylines-DJfSfXCL.mjs.map} +1 -1
- package/dist/{cache-C9FptTFR.mjs → cache-CBJaDy_E.mjs} +3 -3
- package/dist/{cache-C9FptTFR.mjs.map → cache-CBJaDy_E.mjs.map} +1 -1
- package/dist/{challenge-store-D9VNKELo.mjs → challenge-store-CZyFVaad.mjs} +1 -1
- package/dist/{challenge-store-D9VNKELo.mjs.map → challenge-store-CZyFVaad.mjs.map} +1 -1
- package/dist/{chunks-DbYzib_k.mjs → chunks-DfPax1I0.mjs} +2 -2
- package/dist/{chunks-DbYzib_k.mjs.map → chunks-DfPax1I0.mjs.map} +1 -1
- package/dist/cli/index.mjs +176 -698
- package/dist/cli/index.mjs.map +1 -1
- package/dist/client/cf-access.d.mts +1 -1
- package/dist/client/index.d.mts +74 -4
- package/dist/client/index.d.mts.map +1 -1
- package/dist/client/index.mjs +25 -2
- package/dist/client/index.mjs.map +1 -1
- package/dist/collection-deletion-C8BugSGz.mjs +779 -0
- package/dist/collection-deletion-C8BugSGz.mjs.map +1 -0
- package/dist/{comment-BIkJ6Fil.mjs → comment-Dxlep6cE.mjs} +2 -2
- package/dist/{comment-BIkJ6Fil.mjs.map → comment-Dxlep6cE.mjs.map} +1 -1
- package/dist/{comment-reaction-D-laEceb.mjs → comment-reaction-D6qfHKBc.mjs} +2 -2
- package/dist/{comment-reaction-D-laEceb.mjs.map → comment-reaction-D6qfHKBc.mjs.map} +1 -1
- package/dist/{comments-0_w6KChA.mjs → comments-CTOuhTSX.mjs} +3 -3
- package/dist/{comments-0_w6KChA.mjs.map → comments-CTOuhTSX.mjs.map} +1 -1
- package/dist/{components-BPxrRjpE.mjs → components-CQy3lh9x.mjs} +1 -1
- package/dist/{components-BPxrRjpE.mjs.map → components-CQy3lh9x.mjs.map} +1 -1
- package/dist/{config-DyF3OKg_.mjs → config-C3EBstHi.mjs} +18 -2
- package/dist/config-C3EBstHi.mjs.map +1 -0
- package/dist/{content-CJ94NEx5.mjs → content-BNfwh7xX.mjs} +509 -78
- package/dist/content-BNfwh7xX.mjs.map +1 -0
- package/dist/content-list-query-DhQ84eVV.d.mts +26 -0
- package/dist/content-list-query-DhQ84eVV.d.mts.map +1 -0
- package/dist/content-refresh-DNERP4-f.mjs +2560 -0
- package/dist/content-refresh-DNERP4-f.mjs.map +1 -0
- package/dist/{context-C_1nrqnW.mjs → context-DRgOvSnW.mjs} +25 -17
- package/dist/context-DRgOvSnW.mjs.map +1 -0
- package/dist/{cron-DRV-UC4K.mjs → cron-Y9aLtgrA.mjs} +1 -1
- package/dist/{cron-DRV-UC4K.mjs.map → cron-Y9aLtgrA.mjs.map} +1 -1
- package/dist/{dashboard-DINnNVVU.mjs → dashboard-CB8J89rJ.mjs} +44 -10
- package/dist/dashboard-CB8J89rJ.mjs.map +1 -0
- package/dist/db/index.d.mts +4 -4
- package/dist/db/index.mjs +2 -2
- package/dist/db/index.mjs.map +1 -1
- package/dist/db/libsql.d.mts +1 -1
- package/dist/db/postgres.d.mts +1 -1
- package/dist/db/sqlite.d.mts +1 -1
- package/dist/{db-errors-CcWLaRiR.mjs → db-errors-Cl-sKYTm.mjs} +1 -1
- package/dist/{db-errors-CcWLaRiR.mjs.map → db-errors-Cl-sKYTm.mjs.map} +1 -1
- package/dist/{default-BD2FG0xV.mjs → default-DdDl3fxv.mjs} +1 -1
- package/dist/{default-BD2FG0xV.mjs.map → default-DdDl3fxv.mjs.map} +1 -1
- package/dist/{deferred-tasks-C-WRCcKo.d.mts → deferred-tasks-BMsa9F64.d.mts} +1 -1
- package/dist/{deferred-tasks-C-WRCcKo.d.mts.map → deferred-tasks-BMsa9F64.d.mts.map} +1 -1
- package/dist/{device-flow-CTqd8mud.mjs → device-flow-CaioYGK3.mjs} +4 -4
- package/dist/{device-flow-CTqd8mud.mjs.map → device-flow-CaioYGK3.mjs.map} +1 -1
- package/dist/dist-D_6CKR8z.mjs +810 -0
- package/dist/dist-D_6CKR8z.mjs.map +1 -0
- package/dist/{email-console-C6WdcWbL.mjs → email-console-BHNjIwiB.mjs} +1 -1
- package/dist/{email-console-C6WdcWbL.mjs.map → email-console-BHNjIwiB.mjs.map} +1 -1
- package/dist/{enrich-CFJJgxs_.mjs → enrich-_ySMEvEE.mjs} +2 -2
- package/dist/{enrich-CFJJgxs_.mjs.map → enrich-_ySMEvEE.mjs.map} +1 -1
- package/dist/{error-oh_9i6bR.mjs → error-DupyJZE2.mjs} +3 -3
- package/dist/{error-oh_9i6bR.mjs.map → error-DupyJZE2.mjs.map} +1 -1
- package/dist/{errors-BucQ8VYz.mjs → errors-CLUPm7aD.mjs} +14 -2
- package/dist/errors-CLUPm7aD.mjs.map +1 -0
- package/dist/{escape-CXps5F_v.mjs → escape-C_aLKP3H.mjs} +1 -1
- package/dist/{escape-CXps5F_v.mjs.map → escape-C_aLKP3H.mjs.map} +1 -1
- package/dist/{field-defs-cache-WD82dMQq.mjs → field-defs-cache-hg6QkjV9.mjs} +4 -4
- package/dist/{field-defs-cache-WD82dMQq.mjs.map → field-defs-cache-hg6QkjV9.mjs.map} +1 -1
- package/dist/{fts-manager-BITakW_R.mjs → fts-manager-CZ-5dVwJ.mjs} +76 -50
- package/dist/fts-manager-CZ-5dVwJ.mjs.map +1 -0
- package/dist/{hreflang-BaLCNcDx.d.mts → hreflang-D3Uehfv2.d.mts} +2 -2
- package/dist/{hreflang-BaLCNcDx.d.mts.map → hreflang-D3Uehfv2.d.mts.map} +1 -1
- package/dist/{hreflang-BdZuVBhL.mjs → hreflang-DNswoYsi.mjs} +7 -7
- package/dist/{hreflang-BdZuVBhL.mjs.map → hreflang-DNswoYsi.mjs.map} +1 -1
- package/dist/{import-C-9uqyT3.mjs → import-B41u8Rot.mjs} +5 -5
- package/dist/{import-C-9uqyT3.mjs.map → import-B41u8Rot.mjs.map} +1 -1
- package/dist/{index-M37iz29I.d.mts → index-C3Y-rsyN.d.mts} +226 -73
- package/dist/index-C3Y-rsyN.d.mts.map +1 -0
- package/dist/{index-MGw47uWq.d.mts → index-Cof4-Fab.d.mts} +5 -10
- package/dist/index-Cof4-Fab.d.mts.map +1 -0
- package/dist/index.d.mts +20 -19
- package/dist/index.mjs +73 -67
- package/dist/{init-lock-DJkX6Hto.mjs → init-lock-6b309ZrF.mjs} +1 -1
- package/dist/{init-lock-DJkX6Hto.mjs.map → init-lock-6b309ZrF.mjs.map} +1 -1
- package/dist/{load-DV1DZuUJ.mjs → load-DmvJrtxS.mjs} +2 -2
- package/dist/{load-DV1DZuUJ.mjs.map → load-DmvJrtxS.mjs.map} +1 -1
- package/dist/{loader-CGugY7Zl.mjs → loader-DLBqRiGP.mjs} +95 -53
- package/dist/loader-DLBqRiGP.mjs.map +1 -0
- package/dist/{manifest-schema-Da7kj23y.mjs → manifest-schema-BXbUAHod.mjs} +1 -1
- package/dist/{manifest-schema-Da7kj23y.mjs.map → manifest-schema-BXbUAHod.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 -2
- package/dist/media/index.mjs.map +1 -1
- package/dist/media/local-runtime.d.mts +12 -12
- package/dist/media/local-runtime.mjs +6 -5
- package/dist/media/local-runtime.mjs.map +1 -1
- package/dist/{media-OhYL-7Io.mjs → media-BWWWb8kg.mjs} +92 -3
- package/dist/media-BWWWb8kg.mjs.map +1 -0
- package/dist/{media-BP7S-nHT.mjs → media-CzhAn2--.mjs} +2 -2
- package/dist/{media-BP7S-nHT.mjs.map → media-CzhAn2--.mjs.map} +1 -1
- package/dist/{media-allowlist-D-peH1H5.mjs → media-allowlist-BD6HhgXA.mjs} +14 -3
- package/dist/media-allowlist-BD6HhgXA.mjs.map +1 -0
- package/dist/{media-upload-DtrwU2B0.mjs → media-upload-9yas9zGH.mjs} +10 -8
- package/dist/{media-upload-DtrwU2B0.mjs.map → media-upload-9yas9zGH.mjs.map} +1 -1
- package/dist/{media-url-DYs_YLOx.mjs → media-url-BvoX88FA.mjs} +1 -1
- package/dist/{media-url-DYs_YLOx.mjs.map → media-url-BvoX88FA.mjs.map} +1 -1
- package/dist/{media-usage-BlxfTkN0.mjs → media-usage-De3qvwjc.mjs} +137 -60
- package/dist/media-usage-De3qvwjc.mjs.map +1 -0
- package/dist/media-usage-work-B9Bksh_b.mjs +152 -0
- package/dist/media-usage-work-B9Bksh_b.mjs.map +1 -0
- package/dist/media-usage-work-DrCbqBcl.mjs +424 -0
- package/dist/media-usage-work-DrCbqBcl.mjs.map +1 -0
- package/dist/media-usage-write-fence-aHEgN1zB.mjs +42 -0
- package/dist/media-usage-write-fence-aHEgN1zB.mjs.map +1 -0
- package/dist/{menus-Y54RDPIN.mjs → menus-CC-yn1F9.mjs} +351 -95
- package/dist/menus-CC-yn1F9.mjs.map +1 -0
- package/dist/{menus-BcQWxeXu.mjs → menus-fxvEDYE6.mjs} +3 -3
- package/dist/{menus-BcQWxeXu.mjs.map → menus-fxvEDYE6.mjs.map} +1 -1
- package/dist/{mode-BWyTBe3I.mjs → mode-Bpe-tNNy.mjs} +1 -1
- package/dist/{mode-BWyTBe3I.mjs.map → mode-Bpe-tNNy.mjs.map} +1 -1
- package/dist/{normalize-C-SHXmra.mjs → normalize-Bc-s_r-a.mjs} +1 -1
- package/dist/{normalize-C-SHXmra.mjs.map → normalize-Bc-s_r-a.mjs.map} +1 -1
- package/dist/{oauth-authorization-ClvktmrL.mjs → oauth-authorization-BXO1MKej.mjs} +4 -4
- package/dist/{oauth-authorization-ClvktmrL.mjs.map → oauth-authorization-BXO1MKej.mjs.map} +1 -1
- package/dist/{oauth-clients-8ao-U66l.mjs → oauth-clients-C_DNqtRu.mjs} +1 -1
- package/dist/{oauth-clients-8ao-U66l.mjs.map → oauth-clients-C_DNqtRu.mjs.map} +1 -1
- package/dist/{oauth-state-store-B1ofdTiQ.mjs → oauth-state-store-DwAxMtk4.mjs} +1 -1
- package/dist/{oauth-state-store-B1ofdTiQ.mjs.map → oauth-state-store-DwAxMtk4.mjs.map} +1 -1
- package/dist/{oauth-user-lookup-CscEuIiR.mjs → oauth-user-lookup-BxfZizdk.mjs} +1 -1
- package/dist/{oauth-user-lookup-CscEuIiR.mjs.map → oauth-user-lookup-BxfZizdk.mjs.map} +1 -1
- package/dist/object-cache/memory.d.mts +1 -1
- package/dist/{options-CA4eVX6P.d.mts → options-DRe1pIBL.d.mts} +4 -3
- package/dist/options-DRe1pIBL.d.mts.map +1 -0
- package/dist/page/index.d.mts +2 -2
- package/dist/{parse-CJKNuewM.mjs → parse-DFbuc-Fh.mjs} +2 -2
- package/dist/{parse-CJKNuewM.mjs.map → parse-DFbuc-Fh.mjs.map} +1 -1
- package/dist/{passkey-config-D-zrzMJI.mjs → passkey-config-_2GOwwK8.mjs} +1 -1
- package/dist/{passkey-config-D-zrzMJI.mjs.map → passkey-config-_2GOwwK8.mjs.map} +1 -1
- package/dist/{placeholder-DaeNS-VG.d.mts → placeholder-CzW7Lshs.d.mts} +1 -1
- package/dist/{placeholder-DaeNS-VG.d.mts.map → placeholder-CzW7Lshs.d.mts.map} +1 -1
- package/dist/plugin-types.d.mts +8 -1
- 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 +7 -4
- package/dist/plugins/adapt-sandbox-entry.mjs.map +1 -1
- package/dist/{portable-text-B_kqBmXB.mjs → portable-text-DhKbDAGr.mjs} +1 -1
- package/dist/{portable-text-B_kqBmXB.mjs.map → portable-text-DhKbDAGr.mjs.map} +1 -1
- package/dist/{preview-BU6PaLpM.mjs → preview-PW-nOnq4.mjs} +2 -2
- package/dist/{preview-BU6PaLpM.mjs.map → preview-PW-nOnq4.mjs.map} +1 -1
- package/dist/{public-url-Ox9oOlgp.mjs → public-url-CWoFhQT8.mjs} +1 -1
- package/dist/{public-url-Ox9oOlgp.mjs.map → public-url-CWoFhQT8.mjs.map} +1 -1
- package/dist/{query-C5w7PsRQ.mjs → query-BgjfiLUQ.mjs} +31 -49
- package/dist/query-BgjfiLUQ.mjs.map +1 -0
- package/dist/{query-rC9HKv1N.mjs → query-vgZNwIhh.mjs} +3 -3
- package/dist/{query-rC9HKv1N.mjs.map → query-vgZNwIhh.mjs.map} +1 -1
- package/dist/{rate-limit-kug6q99V.mjs → rate-limit-L5anykgo.mjs} +2 -2
- package/dist/{rate-limit-kug6q99V.mjs.map → rate-limit-L5anykgo.mjs.map} +1 -1
- package/dist/{redirect-DIJxXKOG.mjs → redirect-COsS6SWJ.mjs} +2 -2
- package/dist/{redirect-DIJxXKOG.mjs.map → redirect-COsS6SWJ.mjs.map} +1 -1
- package/dist/{redirect-Egf2R9yP.mjs → redirect-KBNE3UEs.mjs} +1 -1
- package/dist/{redirect-Egf2R9yP.mjs.map → redirect-KBNE3UEs.mjs.map} +1 -1
- package/dist/{redirects-Bzm812bY.mjs → redirects-CufRQt0Q.mjs} +4 -4
- package/dist/{redirects-Bzm812bY.mjs.map → redirects-CufRQt0Q.mjs.map} +1 -1
- package/dist/{redirects-G8wAhWAf.mjs → redirects-cV9g7V-0.mjs} +133 -14
- package/dist/redirects-cV9g7V-0.mjs.map +1 -0
- package/dist/registry-C581V4TP.mjs +1275 -0
- package/dist/registry-C581V4TP.mjs.map +1 -0
- package/dist/{relation-Cbe3Sd3m.mjs → relation-DtmAQH7s.mjs} +3 -3
- package/dist/{relation-Cbe3Sd3m.mjs.map → relation-DtmAQH7s.mjs.map} +1 -1
- package/dist/{relations-Bw_E1TXo.mjs → relations-BBApI4e2.mjs} +3 -3
- package/dist/{relations-Bw_E1TXo.mjs.map → relations-BBApI4e2.mjs.map} +1 -1
- package/dist/{relations-qHwpUe66.mjs → relations-DICSyfsh.mjs} +6 -6
- package/dist/{relations-qHwpUe66.mjs.map → relations-DICSyfsh.mjs.map} +1 -1
- package/dist/{relations-G2ta7GIl.d.mts → relations-DItI3MN9.d.mts} +369 -35
- package/dist/relations-DItI3MN9.d.mts.map +1 -0
- package/dist/request-context.d.mts +1 -1
- package/dist/{request-meta-Df-jFbAd.mjs → request-meta-DgZJh3zG.mjs} +2 -2
- package/dist/{request-meta-Df-jFbAd.mjs.map → request-meta-DgZJh3zG.mjs.map} +1 -1
- package/dist/{resolve-DZzG4HqM.mjs → resolve-DOhVEvty.mjs} +2 -2
- package/dist/{resolve-DZzG4HqM.mjs.map → resolve-DOhVEvty.mjs.map} +1 -1
- package/dist/{runner-BFTrkYhu.mjs → runner-BiDvq5dv.mjs} +1157 -254
- package/dist/runner-BiDvq5dv.mjs.map +1 -0
- package/dist/{runner-BaADli8l.d.mts → runner-CgQbELYC.d.mts} +2 -2
- package/dist/{runner-BaADli8l.d.mts.map → runner-CgQbELYC.d.mts.map} +1 -1
- package/dist/runtime.d.mts +11 -11
- package/dist/runtime.mjs +4 -3
- package/dist/runtime.mjs.map +1 -1
- package/dist/{schema-CiQXr6_F.mjs → schema-BFyTg38T.mjs} +3 -3
- package/dist/{schema-CiQXr6_F.mjs.map → schema-BFyTg38T.mjs.map} +1 -1
- package/dist/schema-CeQSNwB3.mjs +390 -0
- package/dist/schema-CeQSNwB3.mjs.map +1 -0
- package/dist/{scopes-CNJVT5i5.mjs → scopes-BVeuhGBE.mjs} +3 -3
- package/dist/{scopes-CNJVT5i5.mjs.map → scopes-BVeuhGBE.mjs.map} +1 -1
- package/dist/{search-FZhx5dDU.mjs → search-BpuPKZb0.mjs} +25 -15
- package/dist/search-BpuPKZb0.mjs.map +1 -0
- package/dist/{secrets-DLd8RXee.mjs → secrets-dtYs2hDo.mjs} +3 -3
- package/dist/{secrets-DLd8RXee.mjs.map → secrets-dtYs2hDo.mjs.map} +1 -1
- package/dist/{sections-BrIrMUCn.mjs → sections-COctk6hf.mjs} +3 -3
- package/dist/{sections-BrIrMUCn.mjs.map → sections-COctk6hf.mjs.map} +1 -1
- package/dist/seed/index.d.mts +2 -2
- package/dist/seed/index.mjs +24 -22
- package/dist/seo/index.d.mts +3 -3
- package/dist/seo/index.mjs +16 -15
- package/dist/seo/index.mjs.map +1 -1
- package/dist/{seo-CobNfOvb.mjs → seo-AFpVvTqr.mjs} +5 -3
- package/dist/seo-AFpVvTqr.mjs.map +1 -0
- package/dist/{seo-DTHRntNC.mjs → seo-CvDxfvFb.mjs} +2 -2
- package/dist/{seo-DTHRntNC.mjs.map → seo-CvDxfvFb.mjs.map} +1 -1
- package/dist/{service-B-pYGPgR.mjs → service-xMiMSTsR.mjs} +3 -3
- package/dist/{service-B-pYGPgR.mjs.map → service-xMiMSTsR.mjs.map} +1 -1
- package/dist/{session-user-BvM9-zNl.mjs → session-user-BzVemLkw.mjs} +1 -1
- package/dist/{session-user-BvM9-zNl.mjs.map → session-user-BzVemLkw.mjs.map} +1 -1
- package/dist/{settings-kJhGiQ4z.mjs → settings-B372MV0p.mjs} +4 -4
- package/dist/{settings-kJhGiQ4z.mjs.map → settings-B372MV0p.mjs.map} +1 -1
- package/dist/{settings-DPHau-WH.mjs → settings-BE9aqn_9.mjs} +3 -3
- package/dist/{settings-DPHau-WH.mjs.map → settings-BE9aqn_9.mjs.map} +1 -1
- package/dist/{setup-complete-u50Qm8rY.mjs → setup-complete-DF7TAfD5.mjs} +1 -1
- package/dist/{setup-complete-u50Qm8rY.mjs.map → setup-complete-DF7TAfD5.mjs.map} +1 -1
- package/dist/{setup-nonce-DCjiiOD2.mjs → setup-nonce-Do-U_cg9.mjs} +1 -1
- package/dist/{setup-nonce-DCjiiOD2.mjs.map → setup-nonce-Do-U_cg9.mjs.map} +1 -1
- package/dist/{single-flight-cache-DW3w11Pu.mjs → single-flight-cache-B0eLKS6K.mjs} +2 -2
- package/dist/{single-flight-cache-DW3w11Pu.mjs.map → single-flight-cache-B0eLKS6K.mjs.map} +1 -1
- package/dist/{site-url-I-lJ5kma.mjs → site-url-Bowsi9T-.mjs} +2 -2
- package/dist/{site-url-I-lJ5kma.mjs.map → site-url-Bowsi9T-.mjs.map} +1 -1
- package/dist/slugify-B994zkXC.mjs +17 -0
- package/dist/slugify-B994zkXC.mjs.map +1 -0
- package/dist/{snapshot-I_fjLDaD.mjs → snapshot-B5h6aPMh.mjs} +1 -1
- package/dist/{snapshot-I_fjLDaD.mjs.map → snapshot-B5h6aPMh.mjs.map} +1 -1
- package/dist/{ssrf-CTa6v21i.mjs → ssrf-Cpvg_n3A.mjs} +1 -1
- package/dist/{ssrf-CTa6v21i.mjs.map → ssrf-Cpvg_n3A.mjs.map} +1 -1
- package/dist/{state-CQvoefYP.mjs → state-DYwPue40.mjs} +1 -1
- package/dist/{state-CQvoefYP.mjs.map → state-DYwPue40.mjs.map} +1 -1
- package/dist/{status-CIsmlC1E.mjs → status-CWVYpbD8.mjs} +1 -1
- package/dist/{status-CIsmlC1E.mjs.map → status-CWVYpbD8.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/{taxonomies-CLN1N92E.mjs → taxonomies-B0o9ExNV.mjs} +75 -64
- package/dist/taxonomies-B0o9ExNV.mjs.map +1 -0
- package/dist/{taxonomies-CKuaZER5.mjs → taxonomies-Dk3MAklL.mjs} +280 -56
- package/dist/taxonomies-Dk3MAklL.mjs.map +1 -0
- package/dist/{taxonomy-pOrB2kZe.mjs → taxonomy-CPeM8d2o.mjs} +131 -78
- package/dist/taxonomy-CPeM8d2o.mjs.map +1 -0
- package/dist/{tokens-DagaJGK8.mjs → tokens-C39klX8R.mjs} +2 -2
- package/dist/{tokens-DagaJGK8.mjs.map → tokens-C39klX8R.mjs.map} +1 -1
- package/dist/{transport-DVsa5YYo.mjs → transport--CfOflrp.mjs} +1 -1
- package/dist/{transport-DVsa5YYo.mjs.map → transport--CfOflrp.mjs.map} +1 -1
- package/dist/{transport-CAwTaTp_.d.mts → transport-B_rfeU-a.d.mts} +1 -1
- package/dist/{transport-CAwTaTp_.d.mts.map → transport-B_rfeU-a.d.mts.map} +1 -1
- package/dist/{trusted-proxy-D20_7fyX.mjs → trusted-proxy-CEVekpby.mjs} +1 -1
- package/dist/{trusted-proxy-D20_7fyX.mjs.map → trusted-proxy-CEVekpby.mjs.map} +1 -1
- package/dist/{types-NBI3rF-_.mjs → types-75KIqzL9.mjs} +18 -2
- package/dist/types-75KIqzL9.mjs.map +1 -0
- package/dist/{types-CbUcuxxc.d.mts → types-BPuloofb.d.mts} +1 -1
- package/dist/{types-CbUcuxxc.d.mts.map → types-BPuloofb.d.mts.map} +1 -1
- package/dist/{types-BjxTKxrZ.mjs → types-BW1syrlw.mjs} +1 -1
- package/dist/{types-BjxTKxrZ.mjs.map → types-BW1syrlw.mjs.map} +1 -1
- package/dist/{types-BnFP1M3J.d.mts → types-C3_AbkDP.d.mts} +32 -10
- package/dist/types-C3_AbkDP.d.mts.map +1 -0
- package/dist/{types-Dc4ntQjQ.d.mts → types-CAGdePf3.d.mts} +124 -1
- package/dist/types-CAGdePf3.d.mts.map +1 -0
- package/dist/{types-DLG4IFEQ.d.mts → types-CFUfyt1s.d.mts} +1 -1
- package/dist/{types-DLG4IFEQ.d.mts.map → types-CFUfyt1s.d.mts.map} +1 -1
- package/dist/{types-LoagAGzH.d.mts → types-CPx2lIGo.d.mts} +1 -1
- package/dist/{types-LoagAGzH.d.mts.map → types-CPx2lIGo.d.mts.map} +1 -1
- package/dist/{types-Cd8iuS1J.mjs → types-CQPWhPxE.mjs} +9 -12
- package/dist/types-CQPWhPxE.mjs.map +1 -0
- package/dist/{types-Cz8hNch2.d.mts → types-Cs-TFLNf.d.mts} +25 -5
- package/dist/types-Cs-TFLNf.d.mts.map +1 -0
- package/dist/types-CtzytVXn.mjs.map +1 -1
- package/dist/{types-BGWPMiBO.d.mts → types-D4_1Ga4L.d.mts} +44 -5
- package/dist/types-D4_1Ga4L.d.mts.map +1 -0
- package/dist/{types-C8oz_ayJ.d.mts → types-DefV3OiO.d.mts} +1 -1
- package/dist/{types-C8oz_ayJ.d.mts.map → types-DefV3OiO.d.mts.map} +1 -1
- package/dist/{types-BK6U01Ro.d.mts → types-X0MThr7x.d.mts} +1 -1
- package/dist/{types-BK6U01Ro.d.mts.map → types-X0MThr7x.d.mts.map} +1 -1
- package/dist/{upload-attempts-D8QAFLUJ.mjs → upload-attempts-hlne3iA1.mjs} +1 -1
- package/dist/{upload-attempts-D8QAFLUJ.mjs.map → upload-attempts-hlne3iA1.mjs.map} +1 -1
- package/dist/url-pattern-BHS0V5Ng.mjs +33 -0
- package/dist/url-pattern-BHS0V5Ng.mjs.map +1 -0
- package/dist/{user-DBrq4UVq.mjs → user-sHgJ62SP.mjs} +3 -3
- package/dist/{user-DBrq4UVq.mjs.map → user-sHgJ62SP.mjs.map} +1 -1
- package/dist/{utils-hLzi_2Fn.mjs → utils-D4vD_Y98.mjs} +3 -3
- package/dist/{utils-hLzi_2Fn.mjs.map → utils-D4vD_Y98.mjs.map} +1 -1
- package/dist/{validate-mKo3RxBM.mjs → validate-BkqIG_Uj.mjs} +24 -5
- package/dist/validate-BkqIG_Uj.mjs.map +1 -0
- package/dist/{validate-C3oSmA7F.d.mts → validate-DeGtBN84.d.mts} +15 -7
- package/dist/validate-DeGtBN84.d.mts.map +1 -0
- package/dist/{validation-BgpucsvF.mjs → validation-CiJb_X5o.mjs} +11 -10
- package/dist/{validation-BgpucsvF.mjs.map → validation-CiJb_X5o.mjs.map} +1 -1
- package/dist/version-x0NjTScG.mjs +7 -0
- package/dist/{version-C4PnpmoV.mjs.map → version-x0NjTScG.mjs.map} +1 -1
- package/dist/{widgets-CJJtkiKh.mjs → widgets-Cwzvww0W.mjs} +3 -3
- package/dist/{widgets-CJJtkiKh.mjs.map → widgets-Cwzvww0W.mjs.map} +1 -1
- package/dist/{wxr-taxonomies-Bkpp_2tK.d.mts → wxr-taxonomies-CmC0ZsDr.d.mts} +1 -1
- package/dist/{wxr-taxonomies-Bkpp_2tK.d.mts.map → wxr-taxonomies-CmC0ZsDr.d.mts.map} +1 -1
- package/dist/{wxr-taxonomies-9PPSy8X6.mjs → wxr-taxonomies-QZjWxjyk.mjs} +13 -32
- package/dist/{wxr-taxonomies-9PPSy8X6.mjs.map → wxr-taxonomies-QZjWxjyk.mjs.map} +1 -1
- package/dist/{zod-generator-CG64Hnbh.mjs → zod-generator-D11MhxG4.mjs} +52 -5
- package/dist/zod-generator-D11MhxG4.mjs.map +1 -0
- package/package.json +16 -8
- package/src/api/errors.ts +12 -0
- package/src/api/handlers/content.ts +127 -29
- package/src/api/handlers/dashboard.ts +12 -2
- package/src/api/handlers/index.ts +16 -0
- package/src/api/handlers/manifest.ts +2 -0
- package/src/api/handlers/media-allowlist.ts +13 -2
- package/src/api/handlers/media-usage-work.ts +188 -0
- package/src/api/handlers/media-usage.ts +5 -3
- package/src/api/handlers/schema.ts +9 -3
- package/src/api/handlers/seo.ts +5 -2
- package/src/api/handlers/taxonomies.ts +345 -82
- package/src/api/media-usage-write-fence.ts +64 -0
- package/src/api/openapi/document.ts +199 -0
- package/src/api/schemas/common.ts +3 -1
- package/src/api/schemas/content.ts +122 -1
- package/src/api/schemas/media-usage.ts +133 -0
- package/src/api/schemas/schema.ts +78 -3
- package/src/api/schemas/taxonomies.ts +40 -8
- package/src/api/types.ts +1 -0
- package/src/astro/integration/index.ts +55 -42
- package/src/astro/integration/routes.ts +34 -4
- package/src/astro/integration/runtime.ts +15 -0
- package/src/astro/integration/virtual-modules.ts +25 -1
- package/src/astro/integration/vite-config.ts +16 -1
- package/src/astro/middleware/media-usage-write-fence.ts +30 -0
- package/src/astro/middleware/redirect.ts +12 -2
- package/src/astro/middleware.ts +75 -8
- package/src/astro/routes/api/admin/media-usage/collection-deletions/index.ts +22 -0
- package/src/astro/routes/api/admin/media-usage/collection-deletions/retry.ts +22 -0
- package/src/astro/routes/api/admin/media-usage/work/index.ts +26 -0
- package/src/astro/routes/api/admin/media-usage/work/retry.ts +26 -0
- package/src/astro/routes/api/admin/plugins/[id]/disable.ts +4 -0
- package/src/astro/routes/api/admin/plugins/[id]/enable.ts +4 -0
- package/src/astro/routes/api/admin/plugins/[id]/uninstall.ts +4 -0
- package/src/astro/routes/api/admin/plugins/[id]/update.ts +4 -0
- package/src/astro/routes/api/admin/plugins/marketplace/[id]/install.ts +4 -0
- package/src/astro/routes/api/admin/plugins/registry/[id]/uninstall.ts +4 -0
- package/src/astro/routes/api/admin/plugins/registry/[id]/update.ts +4 -0
- package/src/astro/routes/api/admin/plugins/registry/install.ts +4 -0
- package/src/astro/routes/api/content/[collection]/[id]/terms/[taxonomy].ts +67 -31
- package/src/astro/routes/api/import/wordpress/execute.ts +3 -10
- package/src/astro/routes/api/mcp.ts +1 -0
- package/src/astro/routes/api/plugins/[pluginId]/[...path].ts +7 -1
- package/src/astro/routes/api/schema/collections/[slug]/index.ts +1 -7
- package/src/astro/routes/api/taxonomies/[name]/terms/index.ts +1 -0
- package/src/astro/routes/api/taxonomies/[name]/translations.ts +48 -0
- package/src/astro/routes/api/taxonomies/[name].ts +102 -0
- package/src/astro/types.ts +25 -4
- package/src/cleanup.ts +6 -12
- package/src/cli/commands/doctor.ts +193 -6
- package/src/cli/commands/export-seed.ts +4 -1
- package/src/client/index.ts +119 -0
- package/src/components/Block.astro +12 -0
- package/src/components/InlinePortableTextEditor.tsx +89 -1
- package/src/content/converters/mark-safety.ts +120 -0
- package/src/content/converters/portable-text-to-prosemirror.ts +25 -16
- package/src/content/converters/prosemirror-to-portable-text.ts +12 -2
- package/src/content-list-query.ts +29 -0
- package/src/database/migrations/060_collection_admin_config.ts +16 -0
- package/src/database/migrations/061_media_usage_cleanup.ts +77 -0
- package/src/database/migrations/062_media_usage_cleanup_fence.ts +295 -0
- package/src/database/migrations/063_media_usage_incremental_work.ts +397 -0
- package/src/database/migrations/064_fts_plain_text.ts +253 -0
- package/src/database/migrations/065_media_usage_collection_deletion.ts +85 -0
- package/src/database/migrations/066_media_usage_reconciliation.ts +115 -0
- package/src/database/migrations/067_indexed_content_fields.ts +39 -0
- package/src/database/migrations/068_content_taxonomy_entry_groups.ts +61 -0
- package/src/database/migrations/069_collection_title_date_fields.ts +45 -0
- package/src/database/migrations/070_collection_routable.ts +18 -0
- package/src/database/migrations/runner.ts +22 -0
- package/src/database/repositories/content.ts +861 -96
- package/src/database/repositories/media-usage-work.ts +848 -0
- package/src/database/repositories/media-usage.ts +1502 -138
- package/src/database/repositories/revision.ts +17 -6
- package/src/database/repositories/taxonomy.ts +234 -103
- package/src/database/repositories/types.ts +51 -2
- package/src/database/types.ts +134 -16
- package/src/db/adapters.ts +28 -0
- package/src/db/index.ts +3 -0
- package/src/emdash-runtime.ts +227 -20
- package/src/fields/file.ts +7 -4
- package/src/fields/image.ts +8 -1
- package/src/fields/types.ts +18 -5
- package/src/i18n/config.ts +32 -0
- package/src/i18n/repair-locale-casing.ts +0 -14
- package/src/i18n/taxonomy-locale-diagnostic.ts +47 -0
- package/src/import/wxr-taxonomies.ts +7 -47
- package/src/index.ts +25 -2
- package/src/loader.ts +119 -65
- package/src/mcp/server.ts +242 -34
- package/src/media/usage/activation.ts +626 -0
- package/src/media/usage/capture-triggers.ts +543 -0
- package/src/media/usage/cleanup.ts +305 -0
- package/src/media/usage/collection-deletion-processor.ts +356 -0
- package/src/media/usage/collection-deletion.ts +836 -0
- package/src/media/usage/content-fields.ts +40 -3
- package/src/media/usage/content-refresh.ts +356 -47
- package/src/media/usage/content-repair.ts +180 -61
- package/src/media/usage/content-snapshots.ts +85 -105
- package/src/media/usage/projection-fingerprint.ts +129 -0
- package/src/media/usage/reconciliation-processor.ts +372 -0
- package/src/media/usage/reconciliation.ts +1117 -0
- package/src/media/usage/source-key.ts +4 -0
- package/src/media/usage/types.ts +2 -0
- package/src/media/usage/work-processor.ts +248 -0
- package/src/menus/index.ts +246 -141
- package/src/plugin-types.ts +8 -0
- package/src/plugins/adapt-sandbox-entry.ts +24 -5
- package/src/plugins/context.ts +24 -7
- package/src/plugins/index.ts +9 -0
- package/src/plugins/routes.ts +43 -1
- package/src/plugins/sandbox/index.ts +10 -1
- package/src/plugins/sandbox/types.ts +78 -1
- package/src/plugins/scheduler/node.ts +13 -1
- package/src/plugins/scheduler/types.ts +2 -0
- package/src/plugins/types.ts +39 -2
- package/src/query.ts +29 -37
- package/src/scheduler-health.ts +46 -0
- package/src/schema/registry.ts +777 -255
- package/src/schema/types.ts +50 -8
- package/src/schema/url-pattern.ts +33 -0
- package/src/schema/zod-generator.ts +77 -5
- package/src/search/fts-manager.ts +117 -76
- package/src/search/query.ts +32 -11
- package/src/search/types.ts +2 -0
- package/src/seed/apply.ts +68 -15
- package/src/seed/types.ts +11 -3
- package/src/seed/validate.ts +52 -2
- package/src/taxonomies/index.ts +77 -75
- package/src/taxonomies/term-counts.ts +21 -8
- package/src/utils/slugify.ts +1 -29
- package/src/virtual-modules.d.ts +16 -0
- package/dist/adapters-BMyNSSZi.d.mts.map +0 -1
- package/dist/api-D2hunekQ.mjs.map +0 -1
- package/dist/apply-kwNEJW2l.mjs.map +0 -1
- package/dist/config-DyF3OKg_.mjs.map +0 -1
- package/dist/content-CJ94NEx5.mjs.map +0 -1
- package/dist/content-refresh-Xw7aKmou.mjs +0 -1629
- package/dist/content-refresh-Xw7aKmou.mjs.map +0 -1
- package/dist/context-C_1nrqnW.mjs.map +0 -1
- package/dist/dashboard-DINnNVVU.mjs.map +0 -1
- package/dist/errors-BucQ8VYz.mjs.map +0 -1
- package/dist/fts-manager-BITakW_R.mjs.map +0 -1
- package/dist/index-M37iz29I.d.mts.map +0 -1
- package/dist/index-MGw47uWq.d.mts.map +0 -1
- package/dist/loader-CGugY7Zl.mjs.map +0 -1
- package/dist/media-OhYL-7Io.mjs.map +0 -1
- package/dist/media-allowlist-D-peH1H5.mjs.map +0 -1
- package/dist/media-usage-BlxfTkN0.mjs.map +0 -1
- package/dist/menus-Y54RDPIN.mjs.map +0 -1
- package/dist/options-CA4eVX6P.d.mts.map +0 -1
- package/dist/query-C5w7PsRQ.mjs.map +0 -1
- package/dist/redirects-G8wAhWAf.mjs.map +0 -1
- package/dist/registry-Dbodb4Uo.mjs +0 -840
- package/dist/registry-Dbodb4Uo.mjs.map +0 -1
- package/dist/relations-G2ta7GIl.d.mts.map +0 -1
- package/dist/runner-BFTrkYhu.mjs.map +0 -1
- package/dist/search-FZhx5dDU.mjs.map +0 -1
- package/dist/seo-CobNfOvb.mjs.map +0 -1
- package/dist/slugify-C_tqlU4G.mjs +0 -30
- package/dist/slugify-C_tqlU4G.mjs.map +0 -1
- package/dist/taxonomies-CKuaZER5.mjs.map +0 -1
- package/dist/taxonomies-CLN1N92E.mjs.map +0 -1
- package/dist/taxonomy-pOrB2kZe.mjs.map +0 -1
- package/dist/types-BGWPMiBO.d.mts.map +0 -1
- package/dist/types-BnFP1M3J.d.mts.map +0 -1
- package/dist/types-Cd8iuS1J.mjs.map +0 -1
- package/dist/types-Cz8hNch2.d.mts.map +0 -1
- package/dist/types-Dc4ntQjQ.d.mts.map +0 -1
- package/dist/types-NBI3rF-_.mjs.map +0 -1
- package/dist/validate-C3oSmA7F.d.mts.map +0 -1
- package/dist/validate-mKo3RxBM.mjs.map +0 -1
- package/dist/version-C4PnpmoV.mjs +0 -7
- package/dist/zod-generator-CG64Hnbh.mjs.map +0 -1
- /package/dist/{api-tokens-Dai9dND0.mjs → api-tokens-CyTsLszZ.mjs} +0 -0
- /package/dist/{ssrf-Cj568Dgs.mjs → ssrf-DpXgKsna.mjs} +0 -0
- /package/dist/{types-DKuWPYV5.mjs → types-CP1CflWf.mjs} +0 -0
package/src/emdash-runtime.ts
CHANGED
|
@@ -9,10 +9,11 @@
|
|
|
9
9
|
|
|
10
10
|
import { Permissions } from "@emdash-cms/auth";
|
|
11
11
|
import type { Element } from "@emdash-cms/blocks";
|
|
12
|
-
import { Kysely, type Dialect } from "kysely";
|
|
12
|
+
import { Kysely, sql, type Dialect } from "kysely";
|
|
13
13
|
import virtualConfig from "virtual:emdash/config";
|
|
14
14
|
import { z } from "zod";
|
|
15
15
|
|
|
16
|
+
import { assertMediaUsageActivationWriteAllowed } from "./api/media-usage-write-fence.js";
|
|
16
17
|
import { validateRev } from "./api/rev.js";
|
|
17
18
|
import type {
|
|
18
19
|
EmDashConfig,
|
|
@@ -22,6 +23,7 @@ import type {
|
|
|
22
23
|
import type { EmDashManifest, ManifestCollection } from "./astro/types.js";
|
|
23
24
|
import { getAuthMode } from "./auth/mode.js";
|
|
24
25
|
import { getTrustedProxyHeaders } from "./auth/trusted-proxy.js";
|
|
26
|
+
import type { ContentFieldFilters } from "./content-list-query.js";
|
|
25
27
|
import { isSqlite } from "./database/dialect-helpers.js";
|
|
26
28
|
import { kyselyLogOption } from "./database/instrumentation.js";
|
|
27
29
|
import {
|
|
@@ -39,15 +41,30 @@ import type {
|
|
|
39
41
|
} from "./database/repositories/types.js";
|
|
40
42
|
import { getI18nConfig } from "./i18n/config.js";
|
|
41
43
|
import { repairLocaleCasing } from "./i18n/repair-locale-casing.js";
|
|
44
|
+
import { warnAboutUnconfiguredTaxonomyLocales } from "./i18n/taxonomy-locale-diagnostic.js";
|
|
42
45
|
import { normalizeMediaValue } from "./media/normalize.js";
|
|
43
46
|
import type { MediaProvider, MediaProviderCapabilities } from "./media/types.js";
|
|
47
|
+
import {
|
|
48
|
+
MEDIA_USAGE_COLLECTION_DELETION_LIMITS,
|
|
49
|
+
processDueMediaUsageCollectionDeletions,
|
|
50
|
+
} from "./media/usage/collection-deletion-processor.js";
|
|
44
51
|
import {
|
|
45
52
|
deleteContentMediaUsage,
|
|
46
53
|
findNonTranslatableSiblingContentIds,
|
|
47
54
|
markContentMediaUsageCollectionStale,
|
|
48
55
|
refreshContentMediaUsageAfterWrite,
|
|
49
56
|
} from "./media/usage/content-refresh.js";
|
|
57
|
+
import {
|
|
58
|
+
MEDIA_USAGE_RECONCILIATION_LIMITS,
|
|
59
|
+
processDueMediaUsageReconciliation,
|
|
60
|
+
} from "./media/usage/reconciliation-processor.js";
|
|
61
|
+
import {
|
|
62
|
+
MEDIA_USAGE_WORK_PROCESSING_LIMITS,
|
|
63
|
+
processDueMediaUsageWork,
|
|
64
|
+
processMediaUsageWorkAfterWrite,
|
|
65
|
+
} from "./media/usage/work-processor.js";
|
|
50
66
|
import { createSandboxRunnerOptions } from "./plugins/sandbox/runner-options.js";
|
|
67
|
+
import { getSandboxRouteErrorDetails } from "./plugins/sandbox/types.js";
|
|
51
68
|
import type {
|
|
52
69
|
SandboxedPluginInstance,
|
|
53
70
|
SandboxRunner,
|
|
@@ -66,8 +83,10 @@ import type {
|
|
|
66
83
|
PortableTextBlockConfig,
|
|
67
84
|
FieldWidgetConfig,
|
|
68
85
|
SettingField,
|
|
86
|
+
UserInfo,
|
|
69
87
|
} from "./plugins/types.js";
|
|
70
|
-
import
|
|
88
|
+
import { recordSchedulerHeartbeatSafely } from "./scheduler-health.js";
|
|
89
|
+
import { MAX_COLLECTION_LIST_COLUMNS, type FieldType } from "./schema/types.js";
|
|
71
90
|
import { hashString } from "./utils/hash.js";
|
|
72
91
|
import { createInitLock, type InitLock, initWithLock } from "./utils/init-lock.js";
|
|
73
92
|
import { createSingleFlightCache, singleFlightCached } from "./utils/single-flight-cache.js";
|
|
@@ -199,6 +218,8 @@ import {
|
|
|
199
218
|
buildRouteMeta,
|
|
200
219
|
parseRouteInput,
|
|
201
220
|
PluginRouteRegistry,
|
|
221
|
+
toRouteCallerInfo,
|
|
222
|
+
type RouteCallerInput,
|
|
202
223
|
type RouteMeta,
|
|
203
224
|
} from "./plugins/routes.js";
|
|
204
225
|
import type { CronScheduler } from "./plugins/scheduler/types.js";
|
|
@@ -236,6 +257,16 @@ const FIELD_TYPE_TO_KIND: Record<FieldType, string> = {
|
|
|
236
257
|
const DRAFT_ONLY_UPDATE_KEYS = new Set(["data", "slug", "locale", "skipRevision"]);
|
|
237
258
|
const MAX_DRAFT_STAGE_ATTEMPTS = 32;
|
|
238
259
|
|
|
260
|
+
const LIST_COLUMN_FIELD_TYPES: ReadonlySet<FieldType> = new Set([
|
|
261
|
+
"string",
|
|
262
|
+
"number",
|
|
263
|
+
"integer",
|
|
264
|
+
"boolean",
|
|
265
|
+
"datetime",
|
|
266
|
+
"select",
|
|
267
|
+
"multiSelect",
|
|
268
|
+
]);
|
|
269
|
+
|
|
239
270
|
/**
|
|
240
271
|
* Sandboxed plugin entry from virtual module
|
|
241
272
|
*/
|
|
@@ -383,6 +414,7 @@ export interface EmDashRuntimeParts {
|
|
|
383
414
|
pipelineFactoryOptions: {
|
|
384
415
|
db: Kysely<Database>;
|
|
385
416
|
getDb?: () => Kysely<Database>;
|
|
417
|
+
beforeContentWrite?: () => Promise<void>;
|
|
386
418
|
storage?: Storage;
|
|
387
419
|
siteInfo?: {
|
|
388
420
|
siteName?: string;
|
|
@@ -514,6 +546,62 @@ const marketplaceManifestCache = new Map<
|
|
|
514
546
|
const sandboxedRouteMetaCache = new Map<string, Map<string, RouteMeta>>();
|
|
515
547
|
let sandboxRunner: SandboxRunner | null = null;
|
|
516
548
|
|
|
549
|
+
export const MEDIA_USAGE_MAINTENANCE_QUERY_RESERVATIONS = Object.freeze({
|
|
550
|
+
entryWork: MEDIA_USAGE_WORK_PROCESSING_LIMITS.ordinaryStatementsPerJob,
|
|
551
|
+
collectionDeletion: MEDIA_USAGE_COLLECTION_DELETION_LIMITS.maxQueriesPerTick,
|
|
552
|
+
reconciliation: MEDIA_USAGE_RECONCILIATION_LIMITS.maxQueriesPerTick,
|
|
553
|
+
maxClassQueries: Math.max(
|
|
554
|
+
MEDIA_USAGE_WORK_PROCESSING_LIMITS.ordinaryStatementsPerJob,
|
|
555
|
+
MEDIA_USAGE_COLLECTION_DELETION_LIMITS.maxQueriesPerTick,
|
|
556
|
+
MEDIA_USAGE_RECONCILIATION_LIMITS.maxQueriesPerTick,
|
|
557
|
+
),
|
|
558
|
+
eventCeiling: 40,
|
|
559
|
+
});
|
|
560
|
+
|
|
561
|
+
export type MediaUsageMaintenanceTaskClass =
|
|
562
|
+
| "entry_work"
|
|
563
|
+
| "collection_deletion"
|
|
564
|
+
| "reconciliation";
|
|
565
|
+
|
|
566
|
+
export type MediaUsageMaintenanceResult =
|
|
567
|
+
| { outcome: "inactive" | "admission_closed"; taskClass: null; turn: null }
|
|
568
|
+
| { outcome: "processed"; taskClass: MediaUsageMaintenanceTaskClass; turn: number };
|
|
569
|
+
|
|
570
|
+
async function runScheduledMediaUsageLane(
|
|
571
|
+
db: Kysely<Database>,
|
|
572
|
+
): Promise<MediaUsageMaintenanceResult> {
|
|
573
|
+
const queriesAlreadySpent = getRequestContext()?.metrics?.dbCount ?? 0;
|
|
574
|
+
if (
|
|
575
|
+
queriesAlreadySpent + 1 + MEDIA_USAGE_MAINTENANCE_QUERY_RESERVATIONS.maxClassQueries >
|
|
576
|
+
MEDIA_USAGE_MAINTENANCE_QUERY_RESERVATIONS.eventCeiling
|
|
577
|
+
) {
|
|
578
|
+
return { outcome: "admission_closed", taskClass: null, turn: null };
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
const activation = await db
|
|
582
|
+
.updateTable("_emdash_media_usage_activation")
|
|
583
|
+
.set({
|
|
584
|
+
media_usage_maintenance_turn: sql<number>`(media_usage_maintenance_turn + 1) % 3`,
|
|
585
|
+
})
|
|
586
|
+
.where("task_key", "=", "incremental_capture")
|
|
587
|
+
.where("state", "=", "active")
|
|
588
|
+
.returning("media_usage_maintenance_turn")
|
|
589
|
+
.executeTakeFirst();
|
|
590
|
+
if (!activation) return { outcome: "inactive", taskClass: null, turn: null };
|
|
591
|
+
|
|
592
|
+
const turn = activation.media_usage_maintenance_turn;
|
|
593
|
+
if (turn === 0) {
|
|
594
|
+
await processDueMediaUsageWork(db);
|
|
595
|
+
return { outcome: "processed", taskClass: "entry_work", turn };
|
|
596
|
+
}
|
|
597
|
+
if (turn === 1) {
|
|
598
|
+
await processDueMediaUsageCollectionDeletions(db);
|
|
599
|
+
return { outcome: "processed", taskClass: "collection_deletion", turn };
|
|
600
|
+
}
|
|
601
|
+
await processDueMediaUsageReconciliation(db);
|
|
602
|
+
return { outcome: "processed", taskClass: "reconciliation", turn };
|
|
603
|
+
}
|
|
604
|
+
|
|
517
605
|
/**
|
|
518
606
|
* EmDashRuntime - singleton per worker
|
|
519
607
|
*/
|
|
@@ -575,6 +663,7 @@ export class EmDashRuntime {
|
|
|
575
663
|
private pipelineFactoryOptions: {
|
|
576
664
|
db: Kysely<Database>;
|
|
577
665
|
getDb?: () => Kysely<Database>;
|
|
666
|
+
beforeContentWrite?: () => Promise<void>;
|
|
578
667
|
storage?: Storage;
|
|
579
668
|
siteInfo?: {
|
|
580
669
|
siteName?: string;
|
|
@@ -647,8 +736,16 @@ export class EmDashRuntime {
|
|
|
647
736
|
* Returns the items promoted so callers can invalidate their cache tags.
|
|
648
737
|
*/
|
|
649
738
|
async publishScheduled(): Promise<PublishedRef[]> {
|
|
739
|
+
return this.publishScheduledWithFence();
|
|
740
|
+
}
|
|
741
|
+
|
|
742
|
+
private async publishScheduledWithFence(
|
|
743
|
+
onPublished?: (refs: PublishedRef[]) => Promise<void>,
|
|
744
|
+
): Promise<PublishedRef[]> {
|
|
745
|
+
await assertMediaUsageActivationWriteAllowed(this.db);
|
|
650
746
|
return publishDueContent(this.db, {
|
|
651
747
|
publish: (collection, id, options) => this.handleContentPublish(collection, id, options),
|
|
748
|
+
onPublished,
|
|
652
749
|
});
|
|
653
750
|
}
|
|
654
751
|
|
|
@@ -686,11 +783,7 @@ export class EmDashRuntime {
|
|
|
686
783
|
|
|
687
784
|
let published: PublishedRef[] = [];
|
|
688
785
|
try {
|
|
689
|
-
|
|
690
|
-
published = await publishDueContent(this.db, {
|
|
691
|
-
publish: (collection, id, opts) => this.handleContentPublish(collection, id, opts),
|
|
692
|
-
onPublished: options.onPublished,
|
|
693
|
-
});
|
|
786
|
+
published = await this.publishScheduledWithFence(options.onPublished);
|
|
694
787
|
} catch (error) {
|
|
695
788
|
console.error("[scheduled-publish] Sweep failed:", error);
|
|
696
789
|
}
|
|
@@ -709,10 +802,15 @@ export class EmDashRuntime {
|
|
|
709
802
|
|
|
710
803
|
// Never throws; no-op unless scheduled backups are enabled and due.
|
|
711
804
|
await maybeRunScheduledBackup(this.db, this.storage ?? undefined);
|
|
805
|
+
await recordSchedulerHeartbeatSafely(this.db);
|
|
712
806
|
|
|
713
807
|
return { published };
|
|
714
808
|
}
|
|
715
809
|
|
|
810
|
+
async runScheduledMediaUsageTasks(): Promise<MediaUsageMaintenanceResult> {
|
|
811
|
+
return runScheduledMediaUsageLane(this.db);
|
|
812
|
+
}
|
|
813
|
+
|
|
716
814
|
/**
|
|
717
815
|
* Materialize plugin-declared storage indexes, once per process.
|
|
718
816
|
*
|
|
@@ -1486,6 +1584,7 @@ export class EmDashRuntime {
|
|
|
1486
1584
|
const pipelineFactoryOptions = {
|
|
1487
1585
|
db,
|
|
1488
1586
|
getDb: resolveDb,
|
|
1587
|
+
beforeContentWrite: () => assertMediaUsageActivationWriteAllowed(resolveDb()),
|
|
1489
1588
|
storage: storage ?? undefined,
|
|
1490
1589
|
siteInfo,
|
|
1491
1590
|
};
|
|
@@ -1631,6 +1730,14 @@ export class EmDashRuntime {
|
|
|
1631
1730
|
if (deps.createScheduler) {
|
|
1632
1731
|
const scheduler = deps.createScheduler(cronExecutor);
|
|
1633
1732
|
cronScheduler = scheduler;
|
|
1733
|
+
const runMediaUsageMaintenance = async () => {
|
|
1734
|
+
const runtime = runtimeRef.current;
|
|
1735
|
+
if (runtime) {
|
|
1736
|
+
await runtime.runScheduledMediaUsageTasks();
|
|
1737
|
+
} else {
|
|
1738
|
+
await runScheduledMediaUsageLane(db);
|
|
1739
|
+
}
|
|
1740
|
+
};
|
|
1634
1741
|
|
|
1635
1742
|
// Run scheduled publishing and system cleanup alongside each tick.
|
|
1636
1743
|
// Pass storage so cleanupPendingUploads can delete orphaned files.
|
|
@@ -1640,12 +1747,12 @@ export class EmDashRuntime {
|
|
|
1640
1747
|
// Falls back to the raw handler if (improbably) the tick beats
|
|
1641
1748
|
// the post-construction ref assignment.
|
|
1642
1749
|
const runtime = runtimeRef.current;
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
|
|
1646
|
-
|
|
1647
|
-
|
|
1648
|
-
}
|
|
1750
|
+
if (runtime) {
|
|
1751
|
+
await runtime.publishScheduled();
|
|
1752
|
+
} else {
|
|
1753
|
+
await assertMediaUsageActivationWriteAllowed(db);
|
|
1754
|
+
await publishDueContent(db);
|
|
1755
|
+
}
|
|
1649
1756
|
} catch (error) {
|
|
1650
1757
|
console.error("[scheduled-publish] Sweep failed:", error);
|
|
1651
1758
|
}
|
|
@@ -1663,7 +1770,16 @@ export class EmDashRuntime {
|
|
|
1663
1770
|
}
|
|
1664
1771
|
// Never throws; no-op unless scheduled backups are enabled and due.
|
|
1665
1772
|
await maybeRunScheduledBackup(db, storage ?? undefined);
|
|
1773
|
+
await recordSchedulerHeartbeatSafely(db);
|
|
1774
|
+
if (!scheduler.setMediaUsageMaintenance) {
|
|
1775
|
+
try {
|
|
1776
|
+
await runMediaUsageMaintenance();
|
|
1777
|
+
} catch (error) {
|
|
1778
|
+
console.error("[media-usage] Scheduled maintenance failed:", error);
|
|
1779
|
+
}
|
|
1780
|
+
}
|
|
1666
1781
|
});
|
|
1782
|
+
scheduler.setMediaUsageMaintenance?.(runMediaUsageMaintenance);
|
|
1667
1783
|
|
|
1668
1784
|
// start() is void on the timer scheduler but the interface
|
|
1669
1785
|
// allows a promise (alarm-backed schedulers); we don't block on it.
|
|
@@ -1967,6 +2083,7 @@ export class EmDashRuntime {
|
|
|
1967
2083
|
createSandboxRunnerOptions(
|
|
1968
2084
|
{
|
|
1969
2085
|
db,
|
|
2086
|
+
beforeContentWrite: () => assertMediaUsageActivationWriteAllowed(db),
|
|
1970
2087
|
mediaStorage: mediaStorage
|
|
1971
2088
|
? {
|
|
1972
2089
|
upload: (opts) =>
|
|
@@ -2090,6 +2207,7 @@ export class EmDashRuntime {
|
|
|
2090
2207
|
createSandboxRunnerOptions(
|
|
2091
2208
|
{
|
|
2092
2209
|
db,
|
|
2210
|
+
beforeContentWrite: () => assertMediaUsageActivationWriteAllowed(db),
|
|
2093
2211
|
mediaStorage: {
|
|
2094
2212
|
upload: (opts) =>
|
|
2095
2213
|
storage.upload({
|
|
@@ -2418,13 +2536,38 @@ export class EmDashRuntime {
|
|
|
2418
2536
|
fields[field.slug] = entry;
|
|
2419
2537
|
}
|
|
2420
2538
|
|
|
2539
|
+
const configuredListColumns = collection.admin?.listColumns ?? [];
|
|
2540
|
+
const fieldTypes = new Map(collection.fields.map((field) => [field.slug, field.type]));
|
|
2541
|
+
const listColumns: string[] = [];
|
|
2542
|
+
for (const slug of configuredListColumns) {
|
|
2543
|
+
if (listColumns.includes(slug)) continue;
|
|
2544
|
+
const fieldType = fieldTypes.get(slug);
|
|
2545
|
+
if (!fieldType || !LIST_COLUMN_FIELD_TYPES.has(fieldType)) {
|
|
2546
|
+
console.warn(
|
|
2547
|
+
`EmDash: Ignoring unsupported or unknown list column "${slug}" in collection "${collection.slug}".`,
|
|
2548
|
+
);
|
|
2549
|
+
continue;
|
|
2550
|
+
}
|
|
2551
|
+
if (listColumns.length >= MAX_COLLECTION_LIST_COLUMNS) {
|
|
2552
|
+
console.warn(
|
|
2553
|
+
`EmDash: Collection "${collection.slug}" declares more than ${MAX_COLLECTION_LIST_COLUMNS} list columns; extra columns are ignored.`,
|
|
2554
|
+
);
|
|
2555
|
+
break;
|
|
2556
|
+
}
|
|
2557
|
+
listColumns.push(slug);
|
|
2558
|
+
}
|
|
2559
|
+
|
|
2421
2560
|
manifestCollections[collection.slug] = {
|
|
2422
2561
|
label: collection.label,
|
|
2423
2562
|
labelSingular: collection.labelSingular || collection.label,
|
|
2424
2563
|
supports: collection.supports || [],
|
|
2425
2564
|
hasSeo: collection.hasSeo,
|
|
2426
2565
|
urlPattern: collection.urlPattern,
|
|
2566
|
+
routable: collection.routable !== false,
|
|
2567
|
+
titleField: collection.titleField,
|
|
2568
|
+
dateField: collection.dateField,
|
|
2427
2569
|
...(collection.hidden ? { hidden: true } : {}),
|
|
2570
|
+
listColumns: listColumns.length > 0 ? listColumns : undefined,
|
|
2428
2571
|
fields,
|
|
2429
2572
|
};
|
|
2430
2573
|
}
|
|
@@ -2539,29 +2682,48 @@ export class EmDashRuntime {
|
|
|
2539
2682
|
|
|
2540
2683
|
// Build taxonomies from database
|
|
2541
2684
|
let manifestTaxonomies: Array<{
|
|
2685
|
+
id: string;
|
|
2542
2686
|
name: string;
|
|
2543
2687
|
label: string;
|
|
2544
2688
|
labelSingular?: string;
|
|
2545
2689
|
hierarchical: boolean;
|
|
2546
2690
|
collections: string[];
|
|
2691
|
+
locale: string;
|
|
2692
|
+
translationGroup: string;
|
|
2547
2693
|
}> = [];
|
|
2694
|
+
let taxonomyDefinitionLocales: string[] = [];
|
|
2548
2695
|
try {
|
|
2549
2696
|
const rows = await this.db
|
|
2550
2697
|
.selectFrom("_emdash_taxonomy_defs")
|
|
2551
2698
|
.selectAll()
|
|
2552
2699
|
.orderBy("name")
|
|
2553
2700
|
.execute();
|
|
2701
|
+
taxonomyDefinitionLocales = rows.map((row) => row.locale);
|
|
2554
2702
|
manifestTaxonomies = rows.map((row) => ({
|
|
2703
|
+
id: row.id,
|
|
2555
2704
|
name: row.name,
|
|
2556
2705
|
label: row.label,
|
|
2557
2706
|
labelSingular: row.label_singular ?? undefined,
|
|
2558
2707
|
hierarchical: row.hierarchical === 1,
|
|
2559
2708
|
collections: parseStringArray(row.collections).toSorted(),
|
|
2709
|
+
locale: row.locale,
|
|
2710
|
+
translationGroup: row.translation_group ?? row.id,
|
|
2560
2711
|
}));
|
|
2561
2712
|
} catch (error) {
|
|
2562
2713
|
console.debug("EmDash: Could not load taxonomy definitions:", error);
|
|
2563
2714
|
}
|
|
2564
2715
|
|
|
2716
|
+
try {
|
|
2717
|
+
const configuredLocales = virtualConfig?.i18n?.locales ?? getI18nConfig()?.locales ?? [];
|
|
2718
|
+
await warnAboutUnconfiguredTaxonomyLocales(
|
|
2719
|
+
this.db,
|
|
2720
|
+
configuredLocales,
|
|
2721
|
+
taxonomyDefinitionLocales,
|
|
2722
|
+
);
|
|
2723
|
+
} catch (error) {
|
|
2724
|
+
console.warn("[i18n] taxonomy locale diagnostic failed:", error);
|
|
2725
|
+
}
|
|
2726
|
+
|
|
2565
2727
|
// Build manifest hash
|
|
2566
2728
|
const manifestHash = await hashString(
|
|
2567
2729
|
JSON.stringify(manifestCollections) +
|
|
@@ -2574,7 +2736,7 @@ export class EmDashRuntime {
|
|
|
2574
2736
|
const authModeValue = authMode.type === "external" ? authMode.providerType : "passkey";
|
|
2575
2737
|
|
|
2576
2738
|
// Include i18n config if enabled (read from virtual module to avoid SSR module singleton mismatch)
|
|
2577
|
-
const i18nConfig = virtualConfig?.i18n;
|
|
2739
|
+
const i18nConfig = virtualConfig?.i18n ?? getI18nConfig();
|
|
2578
2740
|
const i18n =
|
|
2579
2741
|
i18nConfig && i18nConfig.locales && i18nConfig.locales.length > 1
|
|
2580
2742
|
? { defaultLocale: i18nConfig.defaultLocale, locales: i18nConfig.locales }
|
|
@@ -2596,6 +2758,10 @@ export class EmDashRuntime {
|
|
|
2596
2758
|
taxonomies: manifestTaxonomies,
|
|
2597
2759
|
authMode: authModeValue,
|
|
2598
2760
|
i18n,
|
|
2761
|
+
contentLocale: {
|
|
2762
|
+
defaultLocale: i18nConfig?.defaultLocale ?? "en",
|
|
2763
|
+
implicit: i18nConfig === null,
|
|
2764
|
+
},
|
|
2599
2765
|
marketplace: !!this.config.marketplace,
|
|
2600
2766
|
registry,
|
|
2601
2767
|
};
|
|
@@ -2673,6 +2839,10 @@ export class EmDashRuntime {
|
|
|
2673
2839
|
dateField?: ContentDateField;
|
|
2674
2840
|
dateFrom?: string;
|
|
2675
2841
|
dateTo?: string;
|
|
2842
|
+
bylines?: string[];
|
|
2843
|
+
bylinesNone?: boolean;
|
|
2844
|
+
includeInferredBylines?: boolean;
|
|
2845
|
+
fieldFilters?: ContentFieldFilters;
|
|
2676
2846
|
},
|
|
2677
2847
|
) {
|
|
2678
2848
|
return handleContentList(this.db, collection, params);
|
|
@@ -2758,7 +2928,7 @@ export class EmDashRuntime {
|
|
|
2758
2928
|
collection: string,
|
|
2759
2929
|
body: {
|
|
2760
2930
|
data: Record<string, unknown>;
|
|
2761
|
-
slug?: string;
|
|
2931
|
+
slug?: string | null;
|
|
2762
2932
|
status?: string;
|
|
2763
2933
|
authorId?: string;
|
|
2764
2934
|
bylines?: Array<{ bylineId: string; roleLabel?: string | null }>;
|
|
@@ -2818,7 +2988,7 @@ export class EmDashRuntime {
|
|
|
2818
2988
|
id: string,
|
|
2819
2989
|
body: {
|
|
2820
2990
|
data?: Record<string, unknown>;
|
|
2821
|
-
slug?: string;
|
|
2991
|
+
slug?: string | null;
|
|
2822
2992
|
status?: string;
|
|
2823
2993
|
authorId?: string | null;
|
|
2824
2994
|
bylines?: Array<{ bylineId: string; roleLabel?: string | null }>;
|
|
@@ -3490,12 +3660,15 @@ export class EmDashRuntime {
|
|
|
3490
3660
|
): Promise<void> {
|
|
3491
3661
|
for (const contentId of new Set(contentIds)) {
|
|
3492
3662
|
try {
|
|
3663
|
+
const work = await processMediaUsageWorkAfterWrite(this.db, collection, contentId);
|
|
3664
|
+
if (work.outcome !== "inactive") return;
|
|
3493
3665
|
await refreshContentMediaUsageAfterWrite(this.db, collection, contentId);
|
|
3494
3666
|
} catch (error) {
|
|
3495
3667
|
console.error(
|
|
3496
3668
|
`[media-usage] Failed after content write ${collection}/${contentId}:`,
|
|
3497
3669
|
error,
|
|
3498
3670
|
);
|
|
3671
|
+
return;
|
|
3499
3672
|
}
|
|
3500
3673
|
}
|
|
3501
3674
|
}
|
|
@@ -3505,6 +3678,8 @@ export class EmDashRuntime {
|
|
|
3505
3678
|
contentId: string,
|
|
3506
3679
|
): Promise<void> {
|
|
3507
3680
|
try {
|
|
3681
|
+
const work = await processMediaUsageWorkAfterWrite(this.db, collection, contentId);
|
|
3682
|
+
if (work.outcome !== "inactive") return;
|
|
3508
3683
|
const result = await deleteContentMediaUsage(this.db, collection, contentId);
|
|
3509
3684
|
if (!result.success) {
|
|
3510
3685
|
console.error(
|
|
@@ -3584,7 +3759,13 @@ export class EmDashRuntime {
|
|
|
3584
3759
|
return meta.admin?.settingsSchema ?? {};
|
|
3585
3760
|
}
|
|
3586
3761
|
|
|
3587
|
-
async handlePluginApiRoute(
|
|
3762
|
+
async handlePluginApiRoute(
|
|
3763
|
+
pluginId: string,
|
|
3764
|
+
_method: string,
|
|
3765
|
+
path: string,
|
|
3766
|
+
request: Request,
|
|
3767
|
+
user?: RouteCallerInput | null,
|
|
3768
|
+
) {
|
|
3588
3769
|
if (!this.isPluginEnabled(pluginId)) {
|
|
3589
3770
|
return {
|
|
3590
3771
|
success: false,
|
|
@@ -3592,6 +3773,11 @@ export class EmDashRuntime {
|
|
|
3592
3773
|
};
|
|
3593
3774
|
}
|
|
3594
3775
|
|
|
3776
|
+
// Authenticated caller for `ctx.user`. Undefined for public routes
|
|
3777
|
+
// (the catch-all only forwards the caller after private-route auth)
|
|
3778
|
+
// and for machine tokens with no bound user.
|
|
3779
|
+
const caller = user ? toRouteCallerInfo(user) : undefined;
|
|
3780
|
+
|
|
3595
3781
|
// Check trusted (configured) plugins first — this must match the
|
|
3596
3782
|
// resolution order in getPluginRouteMeta to avoid auth/execution mismatches.
|
|
3597
3783
|
const trustedPlugin = this.configuredPlugins.find((p) => p.id === pluginId);
|
|
@@ -3609,13 +3795,13 @@ export class EmDashRuntime {
|
|
|
3609
3795
|
// Body methods parse JSON; GET/HEAD/DELETE parse the query string (#2146).
|
|
3610
3796
|
const body = await parseRouteInput(request);
|
|
3611
3797
|
|
|
3612
|
-
return routeRegistry.invoke(pluginId, routeKey, { request, body });
|
|
3798
|
+
return routeRegistry.invoke(pluginId, routeKey, { request, body, user: caller });
|
|
3613
3799
|
}
|
|
3614
3800
|
|
|
3615
3801
|
// Check sandboxed (marketplace) plugins second
|
|
3616
3802
|
const sandboxedPlugin = this.findSandboxedPlugin(pluginId);
|
|
3617
3803
|
if (sandboxedPlugin) {
|
|
3618
|
-
return this.handleSandboxedRoute(sandboxedPlugin, path, request);
|
|
3804
|
+
return this.handleSandboxedRoute(sandboxedPlugin, path, request, caller);
|
|
3619
3805
|
}
|
|
3620
3806
|
|
|
3621
3807
|
return {
|
|
@@ -3742,6 +3928,7 @@ export class EmDashRuntime {
|
|
|
3742
3928
|
input: unknown,
|
|
3743
3929
|
actorId: string,
|
|
3744
3930
|
request: Request,
|
|
3931
|
+
caller?: RouteCallerInput | null,
|
|
3745
3932
|
) {
|
|
3746
3933
|
const requestMeta = extractRequestMeta(request, getTrustedProxyHeaders(this.config));
|
|
3747
3934
|
const audit = new AuditRepository(this.db);
|
|
@@ -3753,7 +3940,13 @@ export class EmDashRuntime {
|
|
|
3753
3940
|
headers,
|
|
3754
3941
|
body: JSON.stringify(input),
|
|
3755
3942
|
});
|
|
3756
|
-
const result = await this.handlePluginApiRoute(
|
|
3943
|
+
const result = await this.handlePluginApiRoute(
|
|
3944
|
+
pluginId,
|
|
3945
|
+
"POST",
|
|
3946
|
+
route,
|
|
3947
|
+
internalRequest,
|
|
3948
|
+
caller,
|
|
3949
|
+
);
|
|
3757
3950
|
await audit.log({
|
|
3758
3951
|
actorId,
|
|
3759
3952
|
actorIp: requestMeta.ip ?? undefined,
|
|
@@ -4079,10 +4272,12 @@ export class EmDashRuntime {
|
|
|
4079
4272
|
plugin: SandboxedPluginInstance,
|
|
4080
4273
|
path: string,
|
|
4081
4274
|
request: Request,
|
|
4275
|
+
user?: UserInfo,
|
|
4082
4276
|
): Promise<{
|
|
4083
4277
|
success: boolean;
|
|
4084
4278
|
data?: unknown;
|
|
4085
4279
|
error?: { code: string; message: string };
|
|
4280
|
+
status?: number;
|
|
4086
4281
|
}> {
|
|
4087
4282
|
const routeName = path.replace(LEADING_SLASH_PATTERN, "");
|
|
4088
4283
|
|
|
@@ -4097,10 +4292,22 @@ export class EmDashRuntime {
|
|
|
4097
4292
|
method: request.method,
|
|
4098
4293
|
headers,
|
|
4099
4294
|
meta,
|
|
4295
|
+
user,
|
|
4100
4296
|
});
|
|
4101
4297
|
return { success: true, data: result };
|
|
4102
4298
|
} catch (error) {
|
|
4103
4299
|
console.error(`EmDash: Sandboxed plugin route error:`, error);
|
|
4300
|
+
const sandboxRouteError = getSandboxRouteErrorDetails(error);
|
|
4301
|
+
if (sandboxRouteError) {
|
|
4302
|
+
return {
|
|
4303
|
+
success: false,
|
|
4304
|
+
status: sandboxRouteError.status,
|
|
4305
|
+
error: {
|
|
4306
|
+
code: sandboxRouteError.code,
|
|
4307
|
+
message: sandboxRouteError.message,
|
|
4308
|
+
},
|
|
4309
|
+
};
|
|
4310
|
+
}
|
|
4104
4311
|
return {
|
|
4105
4312
|
success: false,
|
|
4106
4313
|
error: {
|
package/src/fields/file.ts
CHANGED
|
@@ -12,10 +12,13 @@ export interface FileOptions {
|
|
|
12
12
|
export function file(options: FileOptions = {}): FieldDefinition<FileValue> {
|
|
13
13
|
const fileObjSchema = z.object({
|
|
14
14
|
id: z.string(),
|
|
15
|
-
url: z.string(),
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
url: z.string().optional(),
|
|
16
|
+
src: z.string().optional(),
|
|
17
|
+
filename: z.string().optional(),
|
|
18
|
+
mimeType: z.string().optional(),
|
|
19
|
+
size: z.number().optional(),
|
|
20
|
+
provider: z.string().optional(),
|
|
21
|
+
meta: z.record(z.string(), z.unknown()).optional(),
|
|
19
22
|
});
|
|
20
23
|
|
|
21
24
|
const schema: z.ZodTypeAny = options.required ? fileObjSchema : fileObjSchema.optional();
|
package/src/fields/image.ts
CHANGED
|
@@ -4,10 +4,17 @@ import type { FieldDefinition, ImageValue } from "./types.js";
|
|
|
4
4
|
|
|
5
5
|
const imageSchema = z.object({
|
|
6
6
|
id: z.string(),
|
|
7
|
-
src: z.string(),
|
|
7
|
+
src: z.string().optional(),
|
|
8
8
|
alt: z.string().optional(),
|
|
9
9
|
width: z.number().optional(),
|
|
10
10
|
height: z.number().optional(),
|
|
11
|
+
filename: z.string().optional(),
|
|
12
|
+
mimeType: z.string().optional(),
|
|
13
|
+
blurhash: z.string().optional(),
|
|
14
|
+
dominantColor: z.string().optional(),
|
|
15
|
+
provider: z.string().optional(),
|
|
16
|
+
previewUrl: z.string().optional(),
|
|
17
|
+
meta: z.record(z.string(), z.unknown()).optional(),
|
|
11
18
|
});
|
|
12
19
|
|
|
13
20
|
export interface ImageOptions {
|
package/src/fields/types.ts
CHANGED
|
@@ -56,12 +56,25 @@ import type { MediaValue } from "../media/types.js";
|
|
|
56
56
|
export type ImageValue = MediaValue;
|
|
57
57
|
|
|
58
58
|
/**
|
|
59
|
-
*
|
|
59
|
+
* Persisted file field value.
|
|
60
|
+
*
|
|
61
|
+
* File values are references with cached metadata, not implicitly hydrated
|
|
62
|
+
* media records. Use the media provider API when current metadata is needed.
|
|
60
63
|
*/
|
|
61
64
|
export interface FileValue {
|
|
62
65
|
id: string;
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
66
|
+
/** Legacy cached URL. Provider-backed values commonly omit this. */
|
|
67
|
+
url?: string;
|
|
68
|
+
/** Direct URL used by external media providers. */
|
|
69
|
+
src?: string;
|
|
70
|
+
/** Cached original filename, when available. */
|
|
71
|
+
filename?: string;
|
|
72
|
+
/** Cached MIME type, when available. */
|
|
73
|
+
mimeType?: string;
|
|
74
|
+
/** Cached file size in bytes, when persisted with the value. */
|
|
75
|
+
size?: number;
|
|
76
|
+
/** Media provider ID. Defaults to `local` when omitted. */
|
|
77
|
+
provider?: string;
|
|
78
|
+
/** Provider-specific data needed to resolve or render the file. */
|
|
79
|
+
meta?: Record<string, unknown>;
|
|
67
80
|
}
|
package/src/i18n/config.ts
CHANGED
|
@@ -12,6 +12,8 @@ export interface I18nConfig {
|
|
|
12
12
|
prefixDefaultLocale?: boolean;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
+
export const LOCALE_CODE_PATTERN = /^[a-z]{2,3}(-[a-z0-9]{2,8})*$/i;
|
|
16
|
+
|
|
15
17
|
const I18N_CONFIG_KEY = Symbol.for("emdash:i18n-config");
|
|
16
18
|
|
|
17
19
|
function configStore(): Record<symbol, I18nConfig | null | undefined> {
|
|
@@ -43,6 +45,36 @@ export function resolveConfiguredLocale(locale: string): string {
|
|
|
43
45
|
);
|
|
44
46
|
}
|
|
45
47
|
|
|
48
|
+
/** Whether a string matches the locale-code subset accepted by EmDash. */
|
|
49
|
+
export function isValidLocaleCode(locale: string): boolean {
|
|
50
|
+
return LOCALE_CODE_PATTERN.test(locale);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/** Resolve the locale for a new content row. */
|
|
54
|
+
export function resolveContentCreateLocale(
|
|
55
|
+
locale: unknown,
|
|
56
|
+
config: I18nConfig | null = getI18nConfig(),
|
|
57
|
+
): string {
|
|
58
|
+
if (locale !== undefined) {
|
|
59
|
+
if (typeof locale !== "string") {
|
|
60
|
+
throw new Error("Invalid locale code: expected a string");
|
|
61
|
+
}
|
|
62
|
+
if (!isValidLocaleCode(locale)) {
|
|
63
|
+
throw new Error(`Invalid locale code: "${locale}"`);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const configured = config?.locales.find(
|
|
67
|
+
(candidate) => candidate.toLowerCase() === locale.toLowerCase(),
|
|
68
|
+
);
|
|
69
|
+
if (config && !configured) {
|
|
70
|
+
throw new Error(`Locale "${locale}" is not configured for this site`);
|
|
71
|
+
}
|
|
72
|
+
return configured ?? locale;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
return config?.defaultLocale ?? "en";
|
|
76
|
+
}
|
|
77
|
+
|
|
46
78
|
/**
|
|
47
79
|
* Check if i18n is enabled.
|
|
48
80
|
* Returns true when multiple locales are configured.
|
|
@@ -13,7 +13,6 @@ export async function repairLocaleCasing(
|
|
|
13
13
|
|
|
14
14
|
for (const tableName of tableNames) {
|
|
15
15
|
const table = sql.ref(tableName);
|
|
16
|
-
const slug = tableName.slice("ec_".length);
|
|
17
16
|
for (const locale of configuredLocales) {
|
|
18
17
|
await sql`
|
|
19
18
|
UPDATE ${table} AS target
|
|
@@ -33,19 +32,6 @@ export async function repairLocaleCasing(
|
|
|
33
32
|
AND candidate.locale != ${locale}
|
|
34
33
|
)
|
|
35
34
|
`.execute(db);
|
|
36
|
-
|
|
37
|
-
await sql`
|
|
38
|
-
UPDATE content_taxonomies AS pivot
|
|
39
|
-
SET locale = ${locale}
|
|
40
|
-
WHERE pivot.collection = ${slug}
|
|
41
|
-
AND lower(pivot.locale) = lower(${locale})
|
|
42
|
-
AND pivot.locale != ${locale}
|
|
43
|
-
AND EXISTS (
|
|
44
|
-
SELECT 1
|
|
45
|
-
FROM ${table} AS content
|
|
46
|
-
WHERE content.id = pivot.entry_id AND content.locale = ${locale}
|
|
47
|
-
)
|
|
48
|
-
`.execute(db);
|
|
49
35
|
}
|
|
50
36
|
}
|
|
51
37
|
}
|