emdash 0.33.0 → 0.35.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-Bb1vG41D.d.mts} +33 -2
- package/dist/adapters-Bb1vG41D.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-BeBglVxU.mjs} +98 -407
- package/dist/api-BeBglVxU.mjs.map +1 -0
- package/dist/{api-tokens-CSND0i1z.mjs → api-tokens-KO24G1Fd.mjs} +2 -2
- package/dist/{api-tokens-CSND0i1z.mjs.map → api-tokens-KO24G1Fd.mjs.map} +1 -1
- package/dist/{apply-kwNEJW2l.mjs → apply-kUDt80-G.mjs} +131 -107
- package/dist/apply-kUDt80-G.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 +163 -49
- 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 +1763 -173
- 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.d.mts.map +1 -1
- package/dist/astro/routes/api/auth/dev-bypass.mjs +5 -9
- package/dist/astro/routes/api/auth/dev-bypass.mjs.map +1 -1
- 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.d.mts.map +1 -1
- package/dist/astro/routes/api/setup/dev-bypass.mjs +30 -31
- 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.d.mts.map +1 -1
- package/dist/astro/routes/api/setup/index.mjs +31 -35
- 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-DUElxgOQ.mjs} +2 -2
- package/dist/{authorize-qRhWQnel.mjs.map → authorize-DUElxgOQ.mjs.map} +1 -1
- package/dist/{backup-CtA6LDNw.mjs → backup-DWYpJlLj.mjs} +4 -4
- package/dist/{backup-CtA6LDNw.mjs.map → backup-DWYpJlLj.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-vn56sLos.mjs +663 -0
- package/dist/bundle-vn56sLos.mjs.map +1 -0
- package/dist/{byline-fields-CNc0Yq5i.mjs → byline-fields-txaLGoME.mjs} +2 -2
- package/dist/{byline-fields-CNc0Yq5i.mjs.map → byline-fields-txaLGoME.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/{byline-Cp6csL84.mjs → byline-yjvWq4ip.mjs} +5 -5
- package/dist/{byline-Cp6csL84.mjs.map → byline-yjvWq4ip.mjs.map} +1 -1
- package/dist/{bylines-cf-C9lmF.mjs → bylines-Bu7pchQ4.mjs} +5 -5
- package/dist/{bylines-cf-C9lmF.mjs.map → bylines-Bu7pchQ4.mjs.map} +1 -1
- package/dist/{bylines-CEj5CdT4.mjs → bylines-DjXS5p0P.mjs} +7 -7
- package/dist/{bylines-CEj5CdT4.mjs.map → bylines-DjXS5p0P.mjs.map} +1 -1
- package/dist/{cache-C9FptTFR.mjs → cache-C46-3Irl.mjs} +3 -3
- package/dist/{cache-C9FptTFR.mjs.map → cache-C46-3Irl.mjs.map} +1 -1
- package/dist/{challenge-store-D9VNKELo.mjs → challenge-store-SIL5DsF2.mjs} +1 -1
- package/dist/{challenge-store-D9VNKELo.mjs.map → challenge-store-SIL5DsF2.mjs.map} +1 -1
- package/dist/{chunks-DbYzib_k.mjs → chunks-fiZ8G9RJ.mjs} +2 -2
- package/dist/{chunks-DbYzib_k.mjs.map → chunks-fiZ8G9RJ.mjs.map} +1 -1
- package/dist/cli/index.mjs +655 -677
- 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-DQPvMD8R.mjs +779 -0
- package/dist/collection-deletion-DQPvMD8R.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-D-2J84UE.mjs} +2 -2
- package/dist/{comment-reaction-D-laEceb.mjs.map → comment-reaction-D-2J84UE.mjs.map} +1 -1
- package/dist/{comments-0_w6KChA.mjs → comments-CTfZtLmM.mjs} +3 -3
- package/dist/{comments-0_w6KChA.mjs.map → comments-CTfZtLmM.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/config-COQzTe5Q.d.mts +34 -0
- package/dist/config-COQzTe5Q.d.mts.map +1 -0
- package/dist/{content-CJ94NEx5.mjs → content-ZHCc1ngN.mjs} +509 -78
- package/dist/content-ZHCc1ngN.mjs.map +1 -0
- package/dist/content-list-query-wJ2WN8Vp.d.mts +26 -0
- package/dist/content-list-query-wJ2WN8Vp.d.mts.map +1 -0
- package/dist/content-refresh-B_8SJzuU.mjs +2560 -0
- package/dist/content-refresh-B_8SJzuU.mjs.map +1 -0
- package/dist/{context-C_1nrqnW.mjs → context-ZldbZcle.mjs} +25 -17
- package/dist/context-ZldbZcle.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-DvHbk_cv.mjs} +44 -10
- package/dist/dashboard-DvHbk_cv.mjs.map +1 -0
- package/dist/db/index.d.mts +4 -4
- package/dist/db/index.mjs +31 -8
- package/dist/db/index.mjs.map +1 -1
- package/dist/db/libsql-migrations.d.mts +11 -0
- package/dist/db/libsql-migrations.d.mts.map +1 -0
- package/dist/db/libsql-migrations.mjs +57 -0
- package/dist/db/libsql-migrations.mjs.map +1 -0
- package/dist/db/libsql.d.mts +1 -1
- package/dist/db/postgres-migrations.d.mts +10 -0
- package/dist/db/postgres-migrations.d.mts.map +1 -0
- package/dist/db/postgres-migrations.mjs +47 -0
- package/dist/db/postgres-migrations.mjs.map +1 -0
- package/dist/db/postgres.d.mts +1 -1
- package/dist/db/sqlite-migrations.d.mts +10 -0
- package/dist/db/sqlite-migrations.d.mts.map +1 -0
- package/dist/db/sqlite-migrations.mjs +28 -0
- package/dist/db/sqlite-migrations.mjs.map +1 -0
- 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-SDWxrgzJ.d.mts} +1 -1
- package/dist/{deferred-tasks-C-WRCcKo.d.mts.map → deferred-tasks-SDWxrgzJ.d.mts.map} +1 -1
- package/dist/{device-flow-CTqd8mud.mjs → device-flow-C0GdD_z8.mjs} +4 -4
- package/dist/{device-flow-CTqd8mud.mjs.map → device-flow-C0GdD_z8.mjs.map} +1 -1
- package/dist/direct-executor-CDXeJCSs.mjs +85 -0
- package/dist/direct-executor-CDXeJCSs.mjs.map +1 -0
- 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-DUY2r2Zs.mjs} +1 -1
- package/dist/{escape-CXps5F_v.mjs.map → escape-DUY2r2Zs.mjs.map} +1 -1
- package/dist/{field-defs-cache-WD82dMQq.mjs → field-defs-cache-BzwBlJrR.mjs} +4 -4
- package/dist/{field-defs-cache-WD82dMQq.mjs.map → field-defs-cache-BzwBlJrR.mjs.map} +1 -1
- package/dist/{fts-manager-BITakW_R.mjs → fts-manager-DyZEohZC.mjs} +76 -50
- package/dist/fts-manager-DyZEohZC.mjs.map +1 -0
- package/dist/{hreflang-BdZuVBhL.mjs → hreflang-BBe83kKa.mjs} +7 -7
- package/dist/{hreflang-BdZuVBhL.mjs.map → hreflang-BBe83kKa.mjs.map} +1 -1
- package/dist/{hreflang-BaLCNcDx.d.mts → hreflang-DwT2E0Sa.d.mts} +2 -2
- package/dist/{hreflang-BaLCNcDx.d.mts.map → hreflang-DwT2E0Sa.d.mts.map} +1 -1
- package/dist/identity-Ys6Dlc9C.mjs +35 -0
- package/dist/identity-Ys6Dlc9C.mjs.map +1 -0
- package/dist/{import-C-9uqyT3.mjs → import-DPkLmeXO.mjs} +5 -5
- package/dist/{import-C-9uqyT3.mjs.map → import-DPkLmeXO.mjs.map} +1 -1
- package/dist/{index-M37iz29I.d.mts → index-BVBZj4-7.d.mts} +236 -104
- package/dist/index-BVBZj4-7.d.mts.map +1 -0
- package/dist/{index-MGw47uWq.d.mts → index-C9KuQyO-.d.mts} +5 -10
- package/dist/index-C9KuQyO-.d.mts.map +1 -0
- package/dist/index.d.mts +21 -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-YJ2xl3ra.mjs} +2 -2
- package/dist/{load-DV1DZuUJ.mjs.map → load-YJ2xl3ra.mjs.map} +1 -1
- package/dist/{loader-CGugY7Zl.mjs → loader-CdG_Ci3H.mjs} +95 -53
- package/dist/loader-CdG_Ci3H.mjs.map +1 -0
- package/dist/manifest-builder-B252yQUf.mjs +189 -0
- package/dist/manifest-builder-B252yQUf.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-D6x-Us02.mjs} +14 -3
- package/dist/media-allowlist-D6x-Us02.mjs.map +1 -0
- package/dist/{media-upload-DtrwU2B0.mjs → media-upload-CHBVn6m-.mjs} +10 -8
- package/dist/{media-upload-DtrwU2B0.mjs.map → media-upload-CHBVn6m-.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-BZCydfvu.mjs} +137 -60
- package/dist/media-usage-BZCydfvu.mjs.map +1 -0
- package/dist/media-usage-work-CLo_6tct.mjs +152 -0
- package/dist/media-usage-work-CLo_6tct.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-DSo5QeW0.mjs} +351 -95
- package/dist/menus-DSo5QeW0.mjs.map +1 -0
- package/dist/{menus-BcQWxeXu.mjs → menus-TCNSd2vp.mjs} +3 -3
- package/dist/{menus-BcQWxeXu.mjs.map → menus-TCNSd2vp.mjs.map} +1 -1
- package/dist/migrations/index.d.mts +22 -0
- package/dist/migrations/index.d.mts.map +1 -0
- package/dist/migrations/index.mjs +7 -0
- package/dist/{mode-BWyTBe3I.mjs → mode-BDoH_WcF.mjs} +1 -1
- package/dist/{mode-BWyTBe3I.mjs.map → mode-BDoH_WcF.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-iOikmrJd.mjs} +4 -4
- package/dist/{oauth-authorization-ClvktmrL.mjs.map → oauth-authorization-iOikmrJd.mjs.map} +1 -1
- package/dist/{oauth-clients-8ao-U66l.mjs → oauth-clients-CvI0nHMJ.mjs} +1 -1
- package/dist/{oauth-clients-8ao-U66l.mjs.map → oauth-clients-CvI0nHMJ.mjs.map} +1 -1
- package/dist/{oauth-state-store-B1ofdTiQ.mjs → oauth-state-store-Ba8KZlwW.mjs} +1 -1
- package/dist/{oauth-state-store-B1ofdTiQ.mjs.map → oauth-state-store-Ba8KZlwW.mjs.map} +1 -1
- package/dist/{oauth-user-lookup-CscEuIiR.mjs → oauth-user-lookup-C5SQwGYC.mjs} +1 -1
- package/dist/{oauth-user-lookup-CscEuIiR.mjs.map → oauth-user-lookup-C5SQwGYC.mjs.map} +1 -1
- package/dist/object-cache/memory.d.mts +1 -1
- package/dist/{options-CA4eVX6P.d.mts → options--hhz-jZ1.d.mts} +4 -3
- package/dist/options--hhz-jZ1.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-DFAmUyuE.mjs} +1 -1
- package/dist/{passkey-config-D-zrzMJI.mjs.map → passkey-config-DFAmUyuE.mjs.map} +1 -1
- package/dist/{placeholder-DaeNS-VG.d.mts → placeholder-Dp0K3RkD.d.mts} +1 -1
- package/dist/{placeholder-DaeNS-VG.d.mts.map → placeholder-Dp0K3RkD.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/policy-TluUIxuu.mjs +45 -0
- package/dist/policy-TluUIxuu.mjs.map +1 -0
- package/dist/{portable-text-B_kqBmXB.mjs → portable-text-imBW5cHK.mjs} +1 -1
- package/dist/{portable-text-B_kqBmXB.mjs.map → portable-text-imBW5cHK.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/protocol-DjsJHTlK.d.mts +52 -0
- package/dist/protocol-DjsJHTlK.d.mts.map +1 -0
- 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-rC9HKv1N.mjs → query-BWs7O5Il.mjs} +3 -3
- package/dist/{query-rC9HKv1N.mjs.map → query-BWs7O5Il.mjs.map} +1 -1
- package/dist/{query-C5w7PsRQ.mjs → query-zTVAR1Sl.mjs} +31 -49
- package/dist/query-zTVAR1Sl.mjs.map +1 -0
- package/dist/{rate-limit-kug6q99V.mjs → rate-limit-Bx4g9m3p.mjs} +2 -2
- package/dist/{rate-limit-kug6q99V.mjs.map → rate-limit-Bx4g9m3p.mjs.map} +1 -1
- package/dist/{redirect-Egf2R9yP.mjs → redirect-BgAOGHDq.mjs} +1 -1
- package/dist/{redirect-Egf2R9yP.mjs.map → redirect-BgAOGHDq.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/{redirects-G8wAhWAf.mjs → redirects-DTDHWH31.mjs} +133 -14
- package/dist/redirects-DTDHWH31.mjs.map +1 -0
- package/dist/{redirects-Bzm812bY.mjs → redirects-DyChwDkG.mjs} +4 -4
- package/dist/{redirects-Bzm812bY.mjs.map → redirects-DyChwDkG.mjs.map} +1 -1
- package/dist/registry-Cqa2I749.mjs +1275 -0
- package/dist/registry-Cqa2I749.mjs.map +1 -0
- package/dist/{relation-Cbe3Sd3m.mjs → relation-BnHB0T4J.mjs} +3 -3
- package/dist/{relation-Cbe3Sd3m.mjs.map → relation-BnHB0T4J.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-G2ta7GIl.d.mts → relations-BHo5A8Zf.d.mts} +367 -33
- package/dist/relations-BHo5A8Zf.d.mts.map +1 -0
- package/dist/{relations-qHwpUe66.mjs → relations-D5sM5fW0.mjs} +6 -6
- package/dist/{relations-qHwpUe66.mjs.map → relations-D5sM5fW0.mjs.map} +1 -1
- 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-BaADli8l.d.mts → runner-BYHZn3Jy.d.mts} +16 -3
- package/dist/runner-BYHZn3Jy.d.mts.map +1 -0
- package/dist/{runner-BFTrkYhu.mjs → runner-C1T11CfC.mjs} +1190 -257
- package/dist/runner-C1T11CfC.mjs.map +1 -0
- package/dist/runtime.d.mts +11 -11
- package/dist/runtime.mjs +4 -3
- package/dist/runtime.mjs.map +1 -1
- package/dist/schema-2AOsSn2v.mjs +390 -0
- package/dist/schema-2AOsSn2v.mjs.map +1 -0
- package/dist/{schema-CiQXr6_F.mjs → schema-DZ5YVVZj.mjs} +3 -3
- package/dist/{schema-CiQXr6_F.mjs.map → schema-DZ5YVVZj.mjs.map} +1 -1
- package/dist/{scopes-CNJVT5i5.mjs → scopes-8ClPF2bC.mjs} +3 -3
- package/dist/{scopes-CNJVT5i5.mjs.map → scopes-8ClPF2bC.mjs.map} +1 -1
- package/dist/{search-FZhx5dDU.mjs → search-u1QYdOCG.mjs} +25 -15
- package/dist/search-u1QYdOCG.mjs.map +1 -0
- package/dist/{secrets-DLd8RXee.mjs → secrets-BEgsAQEU.mjs} +3 -3
- package/dist/{secrets-DLd8RXee.mjs.map → secrets-BEgsAQEU.mjs.map} +1 -1
- package/dist/{sections-BrIrMUCn.mjs → sections-DmHviGyM.mjs} +3 -3
- package/dist/{sections-BrIrMUCn.mjs.map → sections-DmHviGyM.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-Dq4G-RrO.mjs} +2 -2
- package/dist/{seo-DTHRntNC.mjs.map → seo-Dq4G-RrO.mjs.map} +1 -1
- package/dist/{service-B-pYGPgR.mjs → service-BpArayPr.mjs} +3 -3
- package/dist/{service-B-pYGPgR.mjs.map → service-BpArayPr.mjs.map} +1 -1
- package/dist/{session-user-BvM9-zNl.mjs → session-user-BEorKVT-.mjs} +1 -1
- package/dist/{session-user-BvM9-zNl.mjs.map → session-user-BEorKVT-.mjs.map} +1 -1
- package/dist/{settings-DPHau-WH.mjs → settings-DE9xtzqd.mjs} +3 -3
- package/dist/{settings-DPHau-WH.mjs.map → settings-DE9xtzqd.mjs.map} +1 -1
- package/dist/{settings-kJhGiQ4z.mjs → settings-xRdoUZr0.mjs} +4 -4
- package/dist/{settings-kJhGiQ4z.mjs.map → settings-xRdoUZr0.mjs.map} +1 -1
- package/dist/{setup-complete-u50Qm8rY.mjs → setup-complete-BnT8pq_C.mjs} +1 -1
- package/dist/{setup-complete-u50Qm8rY.mjs.map → setup-complete-BnT8pq_C.mjs.map} +1 -1
- package/dist/{setup-nonce-DCjiiOD2.mjs → setup-nonce-CBitf_oQ.mjs} +1 -1
- package/dist/{setup-nonce-DCjiiOD2.mjs.map → setup-nonce-CBitf_oQ.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-DjpIXMXJ.mjs} +2 -2
- package/dist/{site-url-I-lJ5kma.mjs.map → site-url-DjpIXMXJ.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-BBlGkb2q.mjs} +1 -1
- package/dist/{snapshot-I_fjLDaD.mjs.map → snapshot-BBlGkb2q.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 +3 -3
- package/dist/storage/s3.d.mts +1 -1
- package/dist/storage/s3.mjs +1 -1
- package/dist/target-DixqqV5i.mjs +27 -0
- package/dist/target-DixqqV5i.mjs.map +1 -0
- package/dist/{taxonomies-CLN1N92E.mjs → taxonomies-BlrncHi9.mjs} +75 -64
- package/dist/taxonomies-BlrncHi9.mjs.map +1 -0
- package/dist/{taxonomies-CKuaZER5.mjs → taxonomies-OHUIiIpI.mjs} +280 -56
- package/dist/taxonomies-OHUIiIpI.mjs.map +1 -0
- package/dist/{taxonomy-pOrB2kZe.mjs → taxonomy-BqCZ1TdU.mjs} +131 -78
- package/dist/taxonomy-BqCZ1TdU.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-DBJwa-Si.mjs} +1 -1
- package/dist/{transport-DVsa5YYo.mjs.map → transport-DBJwa-Si.mjs.map} +1 -1
- package/dist/{transport-CAwTaTp_.d.mts → transport-RQE36APG.d.mts} +1 -1
- package/dist/{transport-CAwTaTp_.d.mts.map → transport-RQE36APG.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-BjxTKxrZ.mjs → types-BW1syrlw.mjs} +1 -1
- package/dist/{types-BjxTKxrZ.mjs.map → types-BW1syrlw.mjs.map} +1 -1
- package/dist/{types-DLG4IFEQ.d.mts → types-BcqdcT-r.d.mts} +1 -1
- package/dist/{types-DLG4IFEQ.d.mts.map → types-BcqdcT-r.d.mts.map} +1 -1
- package/dist/{types-LoagAGzH.d.mts → types-BntycPTF.d.mts} +1 -1
- package/dist/{types-LoagAGzH.d.mts.map → types-BntycPTF.d.mts.map} +1 -1
- package/dist/{types-BnFP1M3J.d.mts → types-C2pMvO62.d.mts} +32 -10
- package/dist/types-C2pMvO62.d.mts.map +1 -0
- package/dist/{types-Cd8iuS1J.mjs → types-CQPWhPxE.mjs} +9 -12
- package/dist/types-CQPWhPxE.mjs.map +1 -0
- package/dist/{types-C8oz_ayJ.d.mts → types-CXnOzDe1.d.mts} +1 -1
- package/dist/{types-C8oz_ayJ.d.mts.map → types-CXnOzDe1.d.mts.map} +1 -1
- package/dist/types-CtzytVXn.mjs.map +1 -1
- package/dist/{types-BGWPMiBO.d.mts → types-DN64_zzZ.d.mts} +44 -5
- package/dist/types-DN64_zzZ.d.mts.map +1 -0
- package/dist/{types-Dc4ntQjQ.d.mts → types-DQIDRKF2.d.mts} +124 -1
- package/dist/types-DQIDRKF2.d.mts.map +1 -0
- package/dist/{types-CbUcuxxc.d.mts → types-DWRhk9xZ.d.mts} +1 -1
- package/dist/{types-CbUcuxxc.d.mts.map → types-DWRhk9xZ.d.mts.map} +1 -1
- package/dist/{types-BK6U01Ro.d.mts → types-Dfk8KI5R.d.mts} +1 -1
- package/dist/{types-BK6U01Ro.d.mts.map → types-Dfk8KI5R.d.mts.map} +1 -1
- package/dist/{types-Cz8hNch2.d.mts → types-DrJrVCT1.d.mts} +25 -5
- package/dist/types-DrJrVCT1.d.mts.map +1 -0
- package/dist/{upload-attempts-D8QAFLUJ.mjs → upload-attempts-D4FS8LT6.mjs} +1 -1
- package/dist/{upload-attempts-D8QAFLUJ.mjs.map → upload-attempts-D4FS8LT6.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-DJZfUJVE.mjs} +3 -3
- package/dist/{user-DBrq4UVq.mjs.map → user-DJZfUJVE.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-BMLBvxOC.mjs} +24 -5
- package/dist/validate-BMLBvxOC.mjs.map +1 -0
- package/dist/{validate-C3oSmA7F.d.mts → validate-CTqt5nuE.d.mts} +15 -7
- package/dist/validate-CTqt5nuE.d.mts.map +1 -0
- package/dist/{validation-BgpucsvF.mjs → validation-npvENUCB.mjs} +11 -10
- package/dist/{validation-BgpucsvF.mjs.map → validation-npvENUCB.mjs.map} +1 -1
- package/dist/version-DB_fqCSI.mjs +7 -0
- package/dist/{version-C4PnpmoV.mjs.map → version-DB_fqCSI.mjs.map} +1 -1
- package/dist/{widgets-CJJtkiKh.mjs → widgets-BD3ho7Rq.mjs} +3 -3
- package/dist/{widgets-CJJtkiKh.mjs.map → widgets-BD3ho7Rq.mjs.map} +1 -1
- package/dist/{wxr-taxonomies-9PPSy8X6.mjs → wxr-taxonomies-B1R3vBoD.mjs} +13 -32
- package/dist/{wxr-taxonomies-9PPSy8X6.mjs.map → wxr-taxonomies-B1R3vBoD.mjs.map} +1 -1
- package/dist/{wxr-taxonomies-Bkpp_2tK.d.mts → wxr-taxonomies-Ca68766D.d.mts} +1 -1
- package/dist/{wxr-taxonomies-Bkpp_2tK.d.mts.map → wxr-taxonomies-Ca68766D.d.mts.map} +1 -1
- package/dist/{zod-generator-CG64Hnbh.mjs → zod-generator-LC-on_Vb.mjs} +52 -5
- package/dist/zod-generator-LC-on_Vb.mjs.map +1 -0
- package/package.json +32 -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 +101 -56
- package/src/astro/integration/routes.ts +34 -4
- package/src/astro/integration/runtime.ts +18 -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/scoped-db.ts +21 -0
- package/src/astro/middleware.ts +140 -16
- 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/auth/dev-bypass.ts +0 -4
- 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/setup/dev-bypass.ts +2 -7
- package/src/astro/routes/api/setup/index.ts +5 -13
- 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/cli/commands/migrate.ts +593 -0
- package/src/cli/index.ts +2 -23
- 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/index.ts +8 -2
- 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/policy.ts +70 -0
- package/src/database/migrations/runner.ts +71 -3
- 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 +78 -2
- package/src/db/index.ts +6 -1
- package/src/db/libsql-migrations.ts +72 -0
- package/src/db/postgres-migrations.ts +59 -0
- package/src/db/sqlite-migrations.ts +37 -0
- package/src/emdash-runtime.ts +271 -35
- 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/normalize.ts +31 -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 +32 -3
- 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/migrations/config-loader.ts +205 -0
- package/src/migrations/direct-executor.ts +141 -0
- package/src/migrations/identity.ts +46 -0
- package/src/migrations/index.ts +19 -0
- package/src/migrations/integration-metadata.ts +67 -0
- package/src/migrations/manifest-builder.ts +55 -0
- package/src/migrations/manifest-writer.ts +63 -0
- package/src/migrations/manifest.ts +197 -0
- package/src/migrations/protocol.ts +59 -0
- package/src/migrations/target.ts +35 -0
- 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 +24 -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/runner-BaADli8l.d.mts.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-rIXC6LdE.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,12 +23,17 @@ 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";
|
|
29
|
+
import {
|
|
30
|
+
enforceRuntimeMigrationPolicy,
|
|
31
|
+
PendingMigrationsError,
|
|
32
|
+
type RuntimeMigrationMode,
|
|
33
|
+
} from "./database/migrations/policy.js";
|
|
27
34
|
import {
|
|
28
35
|
ConcurrentMigrationTimeoutError,
|
|
29
36
|
MIGRATION_RACE_WAIT_MS,
|
|
30
|
-
runMigrations,
|
|
31
37
|
} from "./database/migrations/runner.js";
|
|
32
38
|
import { AuditRepository } from "./database/repositories/audit.js";
|
|
33
39
|
import { ContentRepository } from "./database/repositories/content.js";
|
|
@@ -39,15 +45,30 @@ import type {
|
|
|
39
45
|
} from "./database/repositories/types.js";
|
|
40
46
|
import { getI18nConfig } from "./i18n/config.js";
|
|
41
47
|
import { repairLocaleCasing } from "./i18n/repair-locale-casing.js";
|
|
48
|
+
import { warnAboutUnconfiguredTaxonomyLocales } from "./i18n/taxonomy-locale-diagnostic.js";
|
|
42
49
|
import { normalizeMediaValue } from "./media/normalize.js";
|
|
43
50
|
import type { MediaProvider, MediaProviderCapabilities } from "./media/types.js";
|
|
51
|
+
import {
|
|
52
|
+
MEDIA_USAGE_COLLECTION_DELETION_LIMITS,
|
|
53
|
+
processDueMediaUsageCollectionDeletions,
|
|
54
|
+
} from "./media/usage/collection-deletion-processor.js";
|
|
44
55
|
import {
|
|
45
56
|
deleteContentMediaUsage,
|
|
46
57
|
findNonTranslatableSiblingContentIds,
|
|
47
58
|
markContentMediaUsageCollectionStale,
|
|
48
59
|
refreshContentMediaUsageAfterWrite,
|
|
49
60
|
} from "./media/usage/content-refresh.js";
|
|
61
|
+
import {
|
|
62
|
+
MEDIA_USAGE_RECONCILIATION_LIMITS,
|
|
63
|
+
processDueMediaUsageReconciliation,
|
|
64
|
+
} from "./media/usage/reconciliation-processor.js";
|
|
65
|
+
import {
|
|
66
|
+
MEDIA_USAGE_WORK_PROCESSING_LIMITS,
|
|
67
|
+
processDueMediaUsageWork,
|
|
68
|
+
processMediaUsageWorkAfterWrite,
|
|
69
|
+
} from "./media/usage/work-processor.js";
|
|
50
70
|
import { createSandboxRunnerOptions } from "./plugins/sandbox/runner-options.js";
|
|
71
|
+
import { getSandboxRouteErrorDetails } from "./plugins/sandbox/types.js";
|
|
51
72
|
import type {
|
|
52
73
|
SandboxedPluginInstance,
|
|
53
74
|
SandboxRunner,
|
|
@@ -66,8 +87,11 @@ import type {
|
|
|
66
87
|
PortableTextBlockConfig,
|
|
67
88
|
FieldWidgetConfig,
|
|
68
89
|
SettingField,
|
|
90
|
+
UserInfo,
|
|
69
91
|
} from "./plugins/types.js";
|
|
70
|
-
import
|
|
92
|
+
import { recordSchedulerHeartbeatSafely } from "./scheduler-health.js";
|
|
93
|
+
import { MAX_COLLECTION_LIST_COLUMNS, type FieldType } from "./schema/types.js";
|
|
94
|
+
import { isMissingTableError } from "./utils/db-errors.js";
|
|
71
95
|
import { hashString } from "./utils/hash.js";
|
|
72
96
|
import { createInitLock, type InitLock, initWithLock } from "./utils/init-lock.js";
|
|
73
97
|
import { createSingleFlightCache, singleFlightCached } from "./utils/single-flight-cache.js";
|
|
@@ -199,6 +223,8 @@ import {
|
|
|
199
223
|
buildRouteMeta,
|
|
200
224
|
parseRouteInput,
|
|
201
225
|
PluginRouteRegistry,
|
|
226
|
+
toRouteCallerInfo,
|
|
227
|
+
type RouteCallerInput,
|
|
202
228
|
type RouteMeta,
|
|
203
229
|
} from "./plugins/routes.js";
|
|
204
230
|
import type { CronScheduler } from "./plugins/scheduler/types.js";
|
|
@@ -236,6 +262,16 @@ const FIELD_TYPE_TO_KIND: Record<FieldType, string> = {
|
|
|
236
262
|
const DRAFT_ONLY_UPDATE_KEYS = new Set(["data", "slug", "locale", "skipRevision"]);
|
|
237
263
|
const MAX_DRAFT_STAGE_ATTEMPTS = 32;
|
|
238
264
|
|
|
265
|
+
const LIST_COLUMN_FIELD_TYPES: ReadonlySet<FieldType> = new Set([
|
|
266
|
+
"string",
|
|
267
|
+
"number",
|
|
268
|
+
"integer",
|
|
269
|
+
"boolean",
|
|
270
|
+
"datetime",
|
|
271
|
+
"select",
|
|
272
|
+
"multiSelect",
|
|
273
|
+
]);
|
|
274
|
+
|
|
239
275
|
/**
|
|
240
276
|
* Sandboxed plugin entry from virtual module
|
|
241
277
|
*/
|
|
@@ -316,6 +352,8 @@ export type CreateSchedulerFn = (executor: CronExecutor) => CronScheduler;
|
|
|
316
352
|
*/
|
|
317
353
|
export interface RuntimeDependencies {
|
|
318
354
|
config: EmDashConfig;
|
|
355
|
+
/** Effective migration mode, resolved once by the runtime entrypoint. */
|
|
356
|
+
migrationMode?: RuntimeMigrationMode;
|
|
319
357
|
plugins: ResolvedPlugin[];
|
|
320
358
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
321
359
|
createDialect: (config: any) => Dialect;
|
|
@@ -383,6 +421,7 @@ export interface EmDashRuntimeParts {
|
|
|
383
421
|
pipelineFactoryOptions: {
|
|
384
422
|
db: Kysely<Database>;
|
|
385
423
|
getDb?: () => Kysely<Database>;
|
|
424
|
+
beforeContentWrite?: () => Promise<void>;
|
|
386
425
|
storage?: Storage;
|
|
387
426
|
siteInfo?: {
|
|
388
427
|
siteName?: string;
|
|
@@ -514,6 +553,62 @@ const marketplaceManifestCache = new Map<
|
|
|
514
553
|
const sandboxedRouteMetaCache = new Map<string, Map<string, RouteMeta>>();
|
|
515
554
|
let sandboxRunner: SandboxRunner | null = null;
|
|
516
555
|
|
|
556
|
+
export const MEDIA_USAGE_MAINTENANCE_QUERY_RESERVATIONS = Object.freeze({
|
|
557
|
+
entryWork: MEDIA_USAGE_WORK_PROCESSING_LIMITS.ordinaryStatementsPerJob,
|
|
558
|
+
collectionDeletion: MEDIA_USAGE_COLLECTION_DELETION_LIMITS.maxQueriesPerTick,
|
|
559
|
+
reconciliation: MEDIA_USAGE_RECONCILIATION_LIMITS.maxQueriesPerTick,
|
|
560
|
+
maxClassQueries: Math.max(
|
|
561
|
+
MEDIA_USAGE_WORK_PROCESSING_LIMITS.ordinaryStatementsPerJob,
|
|
562
|
+
MEDIA_USAGE_COLLECTION_DELETION_LIMITS.maxQueriesPerTick,
|
|
563
|
+
MEDIA_USAGE_RECONCILIATION_LIMITS.maxQueriesPerTick,
|
|
564
|
+
),
|
|
565
|
+
eventCeiling: 40,
|
|
566
|
+
});
|
|
567
|
+
|
|
568
|
+
export type MediaUsageMaintenanceTaskClass =
|
|
569
|
+
| "entry_work"
|
|
570
|
+
| "collection_deletion"
|
|
571
|
+
| "reconciliation";
|
|
572
|
+
|
|
573
|
+
export type MediaUsageMaintenanceResult =
|
|
574
|
+
| { outcome: "inactive" | "admission_closed"; taskClass: null; turn: null }
|
|
575
|
+
| { outcome: "processed"; taskClass: MediaUsageMaintenanceTaskClass; turn: number };
|
|
576
|
+
|
|
577
|
+
async function runScheduledMediaUsageLane(
|
|
578
|
+
db: Kysely<Database>,
|
|
579
|
+
): Promise<MediaUsageMaintenanceResult> {
|
|
580
|
+
const queriesAlreadySpent = getRequestContext()?.metrics?.dbCount ?? 0;
|
|
581
|
+
if (
|
|
582
|
+
queriesAlreadySpent + 1 + MEDIA_USAGE_MAINTENANCE_QUERY_RESERVATIONS.maxClassQueries >
|
|
583
|
+
MEDIA_USAGE_MAINTENANCE_QUERY_RESERVATIONS.eventCeiling
|
|
584
|
+
) {
|
|
585
|
+
return { outcome: "admission_closed", taskClass: null, turn: null };
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
const activation = await db
|
|
589
|
+
.updateTable("_emdash_media_usage_activation")
|
|
590
|
+
.set({
|
|
591
|
+
media_usage_maintenance_turn: sql<number>`(media_usage_maintenance_turn + 1) % 3`,
|
|
592
|
+
})
|
|
593
|
+
.where("task_key", "=", "incremental_capture")
|
|
594
|
+
.where("state", "=", "active")
|
|
595
|
+
.returning("media_usage_maintenance_turn")
|
|
596
|
+
.executeTakeFirst();
|
|
597
|
+
if (!activation) return { outcome: "inactive", taskClass: null, turn: null };
|
|
598
|
+
|
|
599
|
+
const turn = activation.media_usage_maintenance_turn;
|
|
600
|
+
if (turn === 0) {
|
|
601
|
+
await processDueMediaUsageWork(db);
|
|
602
|
+
return { outcome: "processed", taskClass: "entry_work", turn };
|
|
603
|
+
}
|
|
604
|
+
if (turn === 1) {
|
|
605
|
+
await processDueMediaUsageCollectionDeletions(db);
|
|
606
|
+
return { outcome: "processed", taskClass: "collection_deletion", turn };
|
|
607
|
+
}
|
|
608
|
+
await processDueMediaUsageReconciliation(db);
|
|
609
|
+
return { outcome: "processed", taskClass: "reconciliation", turn };
|
|
610
|
+
}
|
|
611
|
+
|
|
517
612
|
/**
|
|
518
613
|
* EmDashRuntime - singleton per worker
|
|
519
614
|
*/
|
|
@@ -575,6 +670,7 @@ export class EmDashRuntime {
|
|
|
575
670
|
private pipelineFactoryOptions: {
|
|
576
671
|
db: Kysely<Database>;
|
|
577
672
|
getDb?: () => Kysely<Database>;
|
|
673
|
+
beforeContentWrite?: () => Promise<void>;
|
|
578
674
|
storage?: Storage;
|
|
579
675
|
siteInfo?: {
|
|
580
676
|
siteName?: string;
|
|
@@ -647,8 +743,16 @@ export class EmDashRuntime {
|
|
|
647
743
|
* Returns the items promoted so callers can invalidate their cache tags.
|
|
648
744
|
*/
|
|
649
745
|
async publishScheduled(): Promise<PublishedRef[]> {
|
|
746
|
+
return this.publishScheduledWithFence();
|
|
747
|
+
}
|
|
748
|
+
|
|
749
|
+
private async publishScheduledWithFence(
|
|
750
|
+
onPublished?: (refs: PublishedRef[]) => Promise<void>,
|
|
751
|
+
): Promise<PublishedRef[]> {
|
|
752
|
+
await assertMediaUsageActivationWriteAllowed(this.db);
|
|
650
753
|
return publishDueContent(this.db, {
|
|
651
754
|
publish: (collection, id, options) => this.handleContentPublish(collection, id, options),
|
|
755
|
+
onPublished,
|
|
652
756
|
});
|
|
653
757
|
}
|
|
654
758
|
|
|
@@ -686,11 +790,7 @@ export class EmDashRuntime {
|
|
|
686
790
|
|
|
687
791
|
let published: PublishedRef[] = [];
|
|
688
792
|
try {
|
|
689
|
-
|
|
690
|
-
published = await publishDueContent(this.db, {
|
|
691
|
-
publish: (collection, id, opts) => this.handleContentPublish(collection, id, opts),
|
|
692
|
-
onPublished: options.onPublished,
|
|
693
|
-
});
|
|
793
|
+
published = await this.publishScheduledWithFence(options.onPublished);
|
|
694
794
|
} catch (error) {
|
|
695
795
|
console.error("[scheduled-publish] Sweep failed:", error);
|
|
696
796
|
}
|
|
@@ -709,10 +809,15 @@ export class EmDashRuntime {
|
|
|
709
809
|
|
|
710
810
|
// Never throws; no-op unless scheduled backups are enabled and due.
|
|
711
811
|
await maybeRunScheduledBackup(this.db, this.storage ?? undefined);
|
|
812
|
+
await recordSchedulerHeartbeatSafely(this.db);
|
|
712
813
|
|
|
713
814
|
return { published };
|
|
714
815
|
}
|
|
715
816
|
|
|
817
|
+
async runScheduledMediaUsageTasks(): Promise<MediaUsageMaintenanceResult> {
|
|
818
|
+
return runScheduledMediaUsageLane(this.db);
|
|
819
|
+
}
|
|
820
|
+
|
|
716
821
|
/**
|
|
717
822
|
* Materialize plugin-declared storage indexes, once per process.
|
|
718
823
|
*
|
|
@@ -1149,8 +1254,10 @@ export class EmDashRuntime {
|
|
|
1149
1254
|
}
|
|
1150
1255
|
};
|
|
1151
1256
|
|
|
1152
|
-
// Initialize database
|
|
1153
|
-
const db = await phase("rt.db", "DB init +
|
|
1257
|
+
// Initialize the database and enforce its configured migration policy.
|
|
1258
|
+
const db = await phase("rt.db", "DB init + migration policy", () =>
|
|
1259
|
+
EmDashRuntime.getDatabase(deps),
|
|
1260
|
+
);
|
|
1154
1261
|
|
|
1155
1262
|
// Resolver for the live connection, mirroring the `get db()` getter
|
|
1156
1263
|
// below (which can't be used here — the runtime instance doesn't exist
|
|
@@ -1213,6 +1320,16 @@ export class EmDashRuntime {
|
|
|
1213
1320
|
// fall back to the singleton, where serialization costs nothing.
|
|
1214
1321
|
let readDb = db;
|
|
1215
1322
|
let readDbDisposable: Kysely<Database> | undefined;
|
|
1323
|
+
const disposeReadDb = async () => {
|
|
1324
|
+
const disposable = readDbDisposable;
|
|
1325
|
+
readDbDisposable = undefined;
|
|
1326
|
+
if (!disposable) return;
|
|
1327
|
+
try {
|
|
1328
|
+
await disposable.destroy();
|
|
1329
|
+
} catch {
|
|
1330
|
+
// Non-fatal — the underlying binding is shared and needs no teardown.
|
|
1331
|
+
}
|
|
1332
|
+
};
|
|
1216
1333
|
if (ownsConfiguredDb && deps.createCoalescingDialect && deps.config.database) {
|
|
1217
1334
|
try {
|
|
1218
1335
|
const dialect = deps.createCoalescingDialect(deps.config.database.config);
|
|
@@ -1225,6 +1342,12 @@ export class EmDashRuntime {
|
|
|
1225
1342
|
}
|
|
1226
1343
|
}
|
|
1227
1344
|
const optionsRepo = new OptionsRepository(readDb);
|
|
1345
|
+
let missingManualSchemaError: unknown;
|
|
1346
|
+
const captureMissingManualSchema = (error: unknown) => {
|
|
1347
|
+
if ((deps.migrationMode ?? "auto") === "manual" && isMissingTableError(error)) {
|
|
1348
|
+
missingManualSchemaError ??= error;
|
|
1349
|
+
}
|
|
1350
|
+
};
|
|
1228
1351
|
|
|
1229
1352
|
const readSiteInfo = async () => {
|
|
1230
1353
|
const siteOpts = await optionsRepo.getMany<string>([
|
|
@@ -1253,14 +1376,16 @@ export class EmDashRuntime {
|
|
|
1253
1376
|
.select(["plugin_id", "status"])
|
|
1254
1377
|
.execute();
|
|
1255
1378
|
pluginStates = new Map(states.map((s) => [s.plugin_id, s.status]));
|
|
1256
|
-
} catch {
|
|
1379
|
+
} catch (error) {
|
|
1380
|
+
captureMissingManualSchema(error);
|
|
1257
1381
|
// _plugin_state may not exist yet on a pre-migration db.
|
|
1258
1382
|
}
|
|
1259
1383
|
}),
|
|
1260
1384
|
phase("rt.site", "Site info options", async () => {
|
|
1261
1385
|
try {
|
|
1262
1386
|
siteInfo = await readSiteInfo();
|
|
1263
|
-
} catch {
|
|
1387
|
+
} catch (error) {
|
|
1388
|
+
captureMissingManualSchema(error);
|
|
1264
1389
|
// options may not exist yet on a pre-migration db.
|
|
1265
1390
|
}
|
|
1266
1391
|
}),
|
|
@@ -1289,7 +1414,8 @@ export class EmDashRuntime {
|
|
|
1289
1414
|
}
|
|
1290
1415
|
})();
|
|
1291
1416
|
seedGate = { collectionCount: collectionCount.count, setupDone };
|
|
1292
|
-
} catch {
|
|
1417
|
+
} catch (error) {
|
|
1418
|
+
captureMissingManualSchema(error);
|
|
1293
1419
|
// Leave the "already set up" default so a read failure never
|
|
1294
1420
|
// triggers a seed onto a half-built db.
|
|
1295
1421
|
}
|
|
@@ -1298,6 +1424,10 @@ export class EmDashRuntime {
|
|
|
1298
1424
|
}
|
|
1299
1425
|
|
|
1300
1426
|
await Promise.all(coldStartReads);
|
|
1427
|
+
if (missingManualSchemaError) {
|
|
1428
|
+
await disposeReadDb();
|
|
1429
|
+
throw missingManualSchemaError;
|
|
1430
|
+
}
|
|
1301
1431
|
|
|
1302
1432
|
if (
|
|
1303
1433
|
localeCasingRepairVersion &&
|
|
@@ -1354,13 +1484,7 @@ export class EmDashRuntime {
|
|
|
1354
1484
|
}
|
|
1355
1485
|
|
|
1356
1486
|
// The read connection is single-use; everything below uses the singleton.
|
|
1357
|
-
|
|
1358
|
-
try {
|
|
1359
|
-
await readDbDisposable.destroy();
|
|
1360
|
-
} catch {
|
|
1361
|
-
// Non-fatal — the underlying binding is shared and needs no teardown.
|
|
1362
|
-
}
|
|
1363
|
-
}
|
|
1487
|
+
await disposeReadDb();
|
|
1364
1488
|
|
|
1365
1489
|
const enabledPlugins = new Set<string>();
|
|
1366
1490
|
for (const plugin of deps.plugins) {
|
|
@@ -1486,6 +1610,7 @@ export class EmDashRuntime {
|
|
|
1486
1610
|
const pipelineFactoryOptions = {
|
|
1487
1611
|
db,
|
|
1488
1612
|
getDb: resolveDb,
|
|
1613
|
+
beforeContentWrite: () => assertMediaUsageActivationWriteAllowed(resolveDb()),
|
|
1489
1614
|
storage: storage ?? undefined,
|
|
1490
1615
|
siteInfo,
|
|
1491
1616
|
};
|
|
@@ -1631,6 +1756,14 @@ export class EmDashRuntime {
|
|
|
1631
1756
|
if (deps.createScheduler) {
|
|
1632
1757
|
const scheduler = deps.createScheduler(cronExecutor);
|
|
1633
1758
|
cronScheduler = scheduler;
|
|
1759
|
+
const runMediaUsageMaintenance = async () => {
|
|
1760
|
+
const runtime = runtimeRef.current;
|
|
1761
|
+
if (runtime) {
|
|
1762
|
+
await runtime.runScheduledMediaUsageTasks();
|
|
1763
|
+
} else {
|
|
1764
|
+
await runScheduledMediaUsageLane(db);
|
|
1765
|
+
}
|
|
1766
|
+
};
|
|
1634
1767
|
|
|
1635
1768
|
// Run scheduled publishing and system cleanup alongside each tick.
|
|
1636
1769
|
// Pass storage so cleanupPendingUploads can delete orphaned files.
|
|
@@ -1640,12 +1773,12 @@ export class EmDashRuntime {
|
|
|
1640
1773
|
// Falls back to the raw handler if (improbably) the tick beats
|
|
1641
1774
|
// the post-construction ref assignment.
|
|
1642
1775
|
const runtime = runtimeRef.current;
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
|
|
1646
|
-
|
|
1647
|
-
|
|
1648
|
-
}
|
|
1776
|
+
if (runtime) {
|
|
1777
|
+
await runtime.publishScheduled();
|
|
1778
|
+
} else {
|
|
1779
|
+
await assertMediaUsageActivationWriteAllowed(db);
|
|
1780
|
+
await publishDueContent(db);
|
|
1781
|
+
}
|
|
1649
1782
|
} catch (error) {
|
|
1650
1783
|
console.error("[scheduled-publish] Sweep failed:", error);
|
|
1651
1784
|
}
|
|
@@ -1663,7 +1796,16 @@ export class EmDashRuntime {
|
|
|
1663
1796
|
}
|
|
1664
1797
|
// Never throws; no-op unless scheduled backups are enabled and due.
|
|
1665
1798
|
await maybeRunScheduledBackup(db, storage ?? undefined);
|
|
1799
|
+
await recordSchedulerHeartbeatSafely(db);
|
|
1800
|
+
if (!scheduler.setMediaUsageMaintenance) {
|
|
1801
|
+
try {
|
|
1802
|
+
await runMediaUsageMaintenance();
|
|
1803
|
+
} catch (error) {
|
|
1804
|
+
console.error("[media-usage] Scheduled maintenance failed:", error);
|
|
1805
|
+
}
|
|
1806
|
+
}
|
|
1666
1807
|
});
|
|
1808
|
+
scheduler.setMediaUsageMaintenance?.(runMediaUsageMaintenance);
|
|
1667
1809
|
|
|
1668
1810
|
// start() is void on the timer scheduler but the interface
|
|
1669
1811
|
// allows a promise (alarm-backed schedulers); we don't block on it.
|
|
@@ -1795,13 +1937,16 @@ export class EmDashRuntime {
|
|
|
1795
1937
|
const db = new Kysely<Database>({ dialect, log: kyselyLogOption() });
|
|
1796
1938
|
|
|
1797
1939
|
try {
|
|
1798
|
-
await
|
|
1940
|
+
await enforceRuntimeMigrationPolicy(db, deps.migrationMode ?? "auto");
|
|
1799
1941
|
} catch (error) {
|
|
1800
1942
|
// Timing out behind another instance's in-flight migrations
|
|
1801
1943
|
// is not a failure of OUR migration — the holder may just be
|
|
1802
1944
|
// slow. Don't back off for it: the next request waits again
|
|
1803
1945
|
// and init recovers the moment the holder finishes.
|
|
1804
|
-
if (
|
|
1946
|
+
if (
|
|
1947
|
+
!(error instanceof ConcurrentMigrationTimeoutError) &&
|
|
1948
|
+
!(error instanceof PendingMigrationsError)
|
|
1949
|
+
) {
|
|
1805
1950
|
holder.failures.set(cacheKey, {
|
|
1806
1951
|
at: Date.now(),
|
|
1807
1952
|
message: error instanceof Error ? error.message : String(error),
|
|
@@ -1967,6 +2112,7 @@ export class EmDashRuntime {
|
|
|
1967
2112
|
createSandboxRunnerOptions(
|
|
1968
2113
|
{
|
|
1969
2114
|
db,
|
|
2115
|
+
beforeContentWrite: () => assertMediaUsageActivationWriteAllowed(db),
|
|
1970
2116
|
mediaStorage: mediaStorage
|
|
1971
2117
|
? {
|
|
1972
2118
|
upload: (opts) =>
|
|
@@ -2090,6 +2236,7 @@ export class EmDashRuntime {
|
|
|
2090
2236
|
createSandboxRunnerOptions(
|
|
2091
2237
|
{
|
|
2092
2238
|
db,
|
|
2239
|
+
beforeContentWrite: () => assertMediaUsageActivationWriteAllowed(db),
|
|
2093
2240
|
mediaStorage: {
|
|
2094
2241
|
upload: (opts) =>
|
|
2095
2242
|
storage.upload({
|
|
@@ -2418,13 +2565,38 @@ export class EmDashRuntime {
|
|
|
2418
2565
|
fields[field.slug] = entry;
|
|
2419
2566
|
}
|
|
2420
2567
|
|
|
2568
|
+
const configuredListColumns = collection.admin?.listColumns ?? [];
|
|
2569
|
+
const fieldTypes = new Map(collection.fields.map((field) => [field.slug, field.type]));
|
|
2570
|
+
const listColumns: string[] = [];
|
|
2571
|
+
for (const slug of configuredListColumns) {
|
|
2572
|
+
if (listColumns.includes(slug)) continue;
|
|
2573
|
+
const fieldType = fieldTypes.get(slug);
|
|
2574
|
+
if (!fieldType || !LIST_COLUMN_FIELD_TYPES.has(fieldType)) {
|
|
2575
|
+
console.warn(
|
|
2576
|
+
`EmDash: Ignoring unsupported or unknown list column "${slug}" in collection "${collection.slug}".`,
|
|
2577
|
+
);
|
|
2578
|
+
continue;
|
|
2579
|
+
}
|
|
2580
|
+
if (listColumns.length >= MAX_COLLECTION_LIST_COLUMNS) {
|
|
2581
|
+
console.warn(
|
|
2582
|
+
`EmDash: Collection "${collection.slug}" declares more than ${MAX_COLLECTION_LIST_COLUMNS} list columns; extra columns are ignored.`,
|
|
2583
|
+
);
|
|
2584
|
+
break;
|
|
2585
|
+
}
|
|
2586
|
+
listColumns.push(slug);
|
|
2587
|
+
}
|
|
2588
|
+
|
|
2421
2589
|
manifestCollections[collection.slug] = {
|
|
2422
2590
|
label: collection.label,
|
|
2423
2591
|
labelSingular: collection.labelSingular || collection.label,
|
|
2424
2592
|
supports: collection.supports || [],
|
|
2425
2593
|
hasSeo: collection.hasSeo,
|
|
2426
2594
|
urlPattern: collection.urlPattern,
|
|
2595
|
+
routable: collection.routable !== false,
|
|
2596
|
+
titleField: collection.titleField,
|
|
2597
|
+
dateField: collection.dateField,
|
|
2427
2598
|
...(collection.hidden ? { hidden: true } : {}),
|
|
2599
|
+
listColumns: listColumns.length > 0 ? listColumns : undefined,
|
|
2428
2600
|
fields,
|
|
2429
2601
|
};
|
|
2430
2602
|
}
|
|
@@ -2539,29 +2711,48 @@ export class EmDashRuntime {
|
|
|
2539
2711
|
|
|
2540
2712
|
// Build taxonomies from database
|
|
2541
2713
|
let manifestTaxonomies: Array<{
|
|
2714
|
+
id: string;
|
|
2542
2715
|
name: string;
|
|
2543
2716
|
label: string;
|
|
2544
2717
|
labelSingular?: string;
|
|
2545
2718
|
hierarchical: boolean;
|
|
2546
2719
|
collections: string[];
|
|
2720
|
+
locale: string;
|
|
2721
|
+
translationGroup: string;
|
|
2547
2722
|
}> = [];
|
|
2723
|
+
let taxonomyDefinitionLocales: string[] = [];
|
|
2548
2724
|
try {
|
|
2549
2725
|
const rows = await this.db
|
|
2550
2726
|
.selectFrom("_emdash_taxonomy_defs")
|
|
2551
2727
|
.selectAll()
|
|
2552
2728
|
.orderBy("name")
|
|
2553
2729
|
.execute();
|
|
2730
|
+
taxonomyDefinitionLocales = rows.map((row) => row.locale);
|
|
2554
2731
|
manifestTaxonomies = rows.map((row) => ({
|
|
2732
|
+
id: row.id,
|
|
2555
2733
|
name: row.name,
|
|
2556
2734
|
label: row.label,
|
|
2557
2735
|
labelSingular: row.label_singular ?? undefined,
|
|
2558
2736
|
hierarchical: row.hierarchical === 1,
|
|
2559
2737
|
collections: parseStringArray(row.collections).toSorted(),
|
|
2738
|
+
locale: row.locale,
|
|
2739
|
+
translationGroup: row.translation_group ?? row.id,
|
|
2560
2740
|
}));
|
|
2561
2741
|
} catch (error) {
|
|
2562
2742
|
console.debug("EmDash: Could not load taxonomy definitions:", error);
|
|
2563
2743
|
}
|
|
2564
2744
|
|
|
2745
|
+
try {
|
|
2746
|
+
const configuredLocales = virtualConfig?.i18n?.locales ?? getI18nConfig()?.locales ?? [];
|
|
2747
|
+
await warnAboutUnconfiguredTaxonomyLocales(
|
|
2748
|
+
this.db,
|
|
2749
|
+
configuredLocales,
|
|
2750
|
+
taxonomyDefinitionLocales,
|
|
2751
|
+
);
|
|
2752
|
+
} catch (error) {
|
|
2753
|
+
console.warn("[i18n] taxonomy locale diagnostic failed:", error);
|
|
2754
|
+
}
|
|
2755
|
+
|
|
2565
2756
|
// Build manifest hash
|
|
2566
2757
|
const manifestHash = await hashString(
|
|
2567
2758
|
JSON.stringify(manifestCollections) +
|
|
@@ -2574,7 +2765,7 @@ export class EmDashRuntime {
|
|
|
2574
2765
|
const authModeValue = authMode.type === "external" ? authMode.providerType : "passkey";
|
|
2575
2766
|
|
|
2576
2767
|
// Include i18n config if enabled (read from virtual module to avoid SSR module singleton mismatch)
|
|
2577
|
-
const i18nConfig = virtualConfig?.i18n;
|
|
2768
|
+
const i18nConfig = virtualConfig?.i18n ?? getI18nConfig();
|
|
2578
2769
|
const i18n =
|
|
2579
2770
|
i18nConfig && i18nConfig.locales && i18nConfig.locales.length > 1
|
|
2580
2771
|
? { defaultLocale: i18nConfig.defaultLocale, locales: i18nConfig.locales }
|
|
@@ -2596,6 +2787,10 @@ export class EmDashRuntime {
|
|
|
2596
2787
|
taxonomies: manifestTaxonomies,
|
|
2597
2788
|
authMode: authModeValue,
|
|
2598
2789
|
i18n,
|
|
2790
|
+
contentLocale: {
|
|
2791
|
+
defaultLocale: i18nConfig?.defaultLocale ?? "en",
|
|
2792
|
+
implicit: i18nConfig === null,
|
|
2793
|
+
},
|
|
2599
2794
|
marketplace: !!this.config.marketplace,
|
|
2600
2795
|
registry,
|
|
2601
2796
|
};
|
|
@@ -2673,6 +2868,10 @@ export class EmDashRuntime {
|
|
|
2673
2868
|
dateField?: ContentDateField;
|
|
2674
2869
|
dateFrom?: string;
|
|
2675
2870
|
dateTo?: string;
|
|
2871
|
+
bylines?: string[];
|
|
2872
|
+
bylinesNone?: boolean;
|
|
2873
|
+
includeInferredBylines?: boolean;
|
|
2874
|
+
fieldFilters?: ContentFieldFilters;
|
|
2676
2875
|
},
|
|
2677
2876
|
) {
|
|
2678
2877
|
return handleContentList(this.db, collection, params);
|
|
@@ -2758,7 +2957,7 @@ export class EmDashRuntime {
|
|
|
2758
2957
|
collection: string,
|
|
2759
2958
|
body: {
|
|
2760
2959
|
data: Record<string, unknown>;
|
|
2761
|
-
slug?: string;
|
|
2960
|
+
slug?: string | null;
|
|
2762
2961
|
status?: string;
|
|
2763
2962
|
authorId?: string;
|
|
2764
2963
|
bylines?: Array<{ bylineId: string; roleLabel?: string | null }>;
|
|
@@ -2818,7 +3017,7 @@ export class EmDashRuntime {
|
|
|
2818
3017
|
id: string,
|
|
2819
3018
|
body: {
|
|
2820
3019
|
data?: Record<string, unknown>;
|
|
2821
|
-
slug?: string;
|
|
3020
|
+
slug?: string | null;
|
|
2822
3021
|
status?: string;
|
|
2823
3022
|
authorId?: string | null;
|
|
2824
3023
|
bylines?: Array<{ bylineId: string; roleLabel?: string | null }>;
|
|
@@ -3490,12 +3689,15 @@ export class EmDashRuntime {
|
|
|
3490
3689
|
): Promise<void> {
|
|
3491
3690
|
for (const contentId of new Set(contentIds)) {
|
|
3492
3691
|
try {
|
|
3692
|
+
const work = await processMediaUsageWorkAfterWrite(this.db, collection, contentId);
|
|
3693
|
+
if (work.outcome !== "inactive") return;
|
|
3493
3694
|
await refreshContentMediaUsageAfterWrite(this.db, collection, contentId);
|
|
3494
3695
|
} catch (error) {
|
|
3495
3696
|
console.error(
|
|
3496
3697
|
`[media-usage] Failed after content write ${collection}/${contentId}:`,
|
|
3497
3698
|
error,
|
|
3498
3699
|
);
|
|
3700
|
+
return;
|
|
3499
3701
|
}
|
|
3500
3702
|
}
|
|
3501
3703
|
}
|
|
@@ -3505,6 +3707,8 @@ export class EmDashRuntime {
|
|
|
3505
3707
|
contentId: string,
|
|
3506
3708
|
): Promise<void> {
|
|
3507
3709
|
try {
|
|
3710
|
+
const work = await processMediaUsageWorkAfterWrite(this.db, collection, contentId);
|
|
3711
|
+
if (work.outcome !== "inactive") return;
|
|
3508
3712
|
const result = await deleteContentMediaUsage(this.db, collection, contentId);
|
|
3509
3713
|
if (!result.success) {
|
|
3510
3714
|
console.error(
|
|
@@ -3584,7 +3788,13 @@ export class EmDashRuntime {
|
|
|
3584
3788
|
return meta.admin?.settingsSchema ?? {};
|
|
3585
3789
|
}
|
|
3586
3790
|
|
|
3587
|
-
async handlePluginApiRoute(
|
|
3791
|
+
async handlePluginApiRoute(
|
|
3792
|
+
pluginId: string,
|
|
3793
|
+
_method: string,
|
|
3794
|
+
path: string,
|
|
3795
|
+
request: Request,
|
|
3796
|
+
user?: RouteCallerInput | null,
|
|
3797
|
+
) {
|
|
3588
3798
|
if (!this.isPluginEnabled(pluginId)) {
|
|
3589
3799
|
return {
|
|
3590
3800
|
success: false,
|
|
@@ -3592,6 +3802,11 @@ export class EmDashRuntime {
|
|
|
3592
3802
|
};
|
|
3593
3803
|
}
|
|
3594
3804
|
|
|
3805
|
+
// Authenticated caller for `ctx.user`. Undefined for public routes
|
|
3806
|
+
// (the catch-all only forwards the caller after private-route auth)
|
|
3807
|
+
// and for machine tokens with no bound user.
|
|
3808
|
+
const caller = user ? toRouteCallerInfo(user) : undefined;
|
|
3809
|
+
|
|
3595
3810
|
// Check trusted (configured) plugins first — this must match the
|
|
3596
3811
|
// resolution order in getPluginRouteMeta to avoid auth/execution mismatches.
|
|
3597
3812
|
const trustedPlugin = this.configuredPlugins.find((p) => p.id === pluginId);
|
|
@@ -3609,13 +3824,13 @@ export class EmDashRuntime {
|
|
|
3609
3824
|
// Body methods parse JSON; GET/HEAD/DELETE parse the query string (#2146).
|
|
3610
3825
|
const body = await parseRouteInput(request);
|
|
3611
3826
|
|
|
3612
|
-
return routeRegistry.invoke(pluginId, routeKey, { request, body });
|
|
3827
|
+
return routeRegistry.invoke(pluginId, routeKey, { request, body, user: caller });
|
|
3613
3828
|
}
|
|
3614
3829
|
|
|
3615
3830
|
// Check sandboxed (marketplace) plugins second
|
|
3616
3831
|
const sandboxedPlugin = this.findSandboxedPlugin(pluginId);
|
|
3617
3832
|
if (sandboxedPlugin) {
|
|
3618
|
-
return this.handleSandboxedRoute(sandboxedPlugin, path, request);
|
|
3833
|
+
return this.handleSandboxedRoute(sandboxedPlugin, path, request, caller);
|
|
3619
3834
|
}
|
|
3620
3835
|
|
|
3621
3836
|
return {
|
|
@@ -3742,6 +3957,7 @@ export class EmDashRuntime {
|
|
|
3742
3957
|
input: unknown,
|
|
3743
3958
|
actorId: string,
|
|
3744
3959
|
request: Request,
|
|
3960
|
+
caller?: RouteCallerInput | null,
|
|
3745
3961
|
) {
|
|
3746
3962
|
const requestMeta = extractRequestMeta(request, getTrustedProxyHeaders(this.config));
|
|
3747
3963
|
const audit = new AuditRepository(this.db);
|
|
@@ -3753,7 +3969,13 @@ export class EmDashRuntime {
|
|
|
3753
3969
|
headers,
|
|
3754
3970
|
body: JSON.stringify(input),
|
|
3755
3971
|
});
|
|
3756
|
-
const result = await this.handlePluginApiRoute(
|
|
3972
|
+
const result = await this.handlePluginApiRoute(
|
|
3973
|
+
pluginId,
|
|
3974
|
+
"POST",
|
|
3975
|
+
route,
|
|
3976
|
+
internalRequest,
|
|
3977
|
+
caller,
|
|
3978
|
+
);
|
|
3757
3979
|
await audit.log({
|
|
3758
3980
|
actorId,
|
|
3759
3981
|
actorIp: requestMeta.ip ?? undefined,
|
|
@@ -4079,10 +4301,12 @@ export class EmDashRuntime {
|
|
|
4079
4301
|
plugin: SandboxedPluginInstance,
|
|
4080
4302
|
path: string,
|
|
4081
4303
|
request: Request,
|
|
4304
|
+
user?: UserInfo,
|
|
4082
4305
|
): Promise<{
|
|
4083
4306
|
success: boolean;
|
|
4084
4307
|
data?: unknown;
|
|
4085
4308
|
error?: { code: string; message: string };
|
|
4309
|
+
status?: number;
|
|
4086
4310
|
}> {
|
|
4087
4311
|
const routeName = path.replace(LEADING_SLASH_PATTERN, "");
|
|
4088
4312
|
|
|
@@ -4097,10 +4321,22 @@ export class EmDashRuntime {
|
|
|
4097
4321
|
method: request.method,
|
|
4098
4322
|
headers,
|
|
4099
4323
|
meta,
|
|
4324
|
+
user,
|
|
4100
4325
|
});
|
|
4101
4326
|
return { success: true, data: result };
|
|
4102
4327
|
} catch (error) {
|
|
4103
4328
|
console.error(`EmDash: Sandboxed plugin route error:`, error);
|
|
4329
|
+
const sandboxRouteError = getSandboxRouteErrorDetails(error);
|
|
4330
|
+
if (sandboxRouteError) {
|
|
4331
|
+
return {
|
|
4332
|
+
success: false,
|
|
4333
|
+
status: sandboxRouteError.status,
|
|
4334
|
+
error: {
|
|
4335
|
+
code: sandboxRouteError.code,
|
|
4336
|
+
message: sandboxRouteError.message,
|
|
4337
|
+
},
|
|
4338
|
+
};
|
|
4339
|
+
}
|
|
4104
4340
|
return {
|
|
4105
4341
|
success: false,
|
|
4106
4342
|
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();
|