emdash 0.31.0 → 0.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/route-utils.d.mts +3 -3
- package/dist/api/route-utils.mjs +16 -14
- package/dist/api/route-utils.mjs.map +1 -1
- package/dist/api/schemas/index.d.mts +2 -2
- package/dist/api/schemas/index.mjs +4 -4
- package/dist/{api-EibxGP-V.mjs → api-DgPbMlng.mjs} +24 -20
- package/dist/api-DgPbMlng.mjs.map +1 -0
- package/dist/{api-tokens-uPt8UDpx.mjs → api-tokens-p-iMzvXR.mjs} +2 -2
- package/dist/{api-tokens-uPt8UDpx.mjs.map → api-tokens-p-iMzvXR.mjs.map} +1 -1
- package/dist/{apply-fGHCAwWN.mjs → apply-1_6ra7NP.mjs} +19 -19
- package/dist/{apply-fGHCAwWN.mjs.map → apply-1_6ra7NP.mjs.map} +1 -1
- package/dist/astro/index.d.mts +12 -12
- package/dist/astro/index.mjs +5 -1
- package/dist/astro/index.mjs.map +1 -1
- package/dist/astro/middleware/auth.d.mts +10 -10
- package/dist/astro/middleware/auth.mjs +5 -5
- package/dist/astro/middleware/redirect.mjs +5 -5
- package/dist/astro/middleware/request-context.mjs +1 -1
- package/dist/astro/middleware.d.mts +10 -10
- package/dist/astro/middleware.mjs +94 -61
- package/dist/astro/middleware.mjs.map +1 -1
- package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +6 -6
- package/dist/astro/routes/api/admin/allowed-domains/index.mjs +6 -6
- package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +4 -4
- package/dist/astro/routes/api/admin/api-tokens/index.mjs +5 -5
- package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +4 -4
- package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +8 -8
- package/dist/astro/routes/api/admin/byline-fields/index.mjs +8 -8
- package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +8 -8
- package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +15 -14
- package/dist/astro/routes/api/admin/bylines/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +15 -14
- package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/admin/bylines/index.mjs +15 -15
- package/dist/astro/routes/api/admin/comments/_id_/status.mjs +11 -11
- package/dist/astro/routes/api/admin/comments/_id_.mjs +5 -5
- package/dist/astro/routes/api/admin/comments/bulk.mjs +9 -9
- package/dist/astro/routes/api/admin/comments/counts.mjs +5 -5
- package/dist/astro/routes/api/admin/comments/index.mjs +9 -9
- package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +4 -4
- package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +3 -3
- package/dist/astro/routes/api/admin/media-usage/repair.mjs +12 -10
- package/dist/astro/routes/api/admin/media-usage/repair.mjs.map +1 -1
- package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +4 -4
- package/dist/astro/routes/api/admin/oauth-clients/index.mjs +4 -4
- package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +36 -34
- package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +36 -34
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +36 -34
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/mcp.mjs +4 -4
- package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs +36 -34
- package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +36 -34
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +36 -34
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/index.mjs +36 -34
- package/dist/astro/routes/api/admin/plugins/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +3 -3
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +36 -34
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +36 -34
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +36 -34
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +36 -34
- package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs +37 -35
- package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +36 -34
- package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/install.mjs +37 -35
- package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/updates.mjs +36 -34
- package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +36 -34
- 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 +3 -3
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +36 -34
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/users/_id_/disable.mjs +2 -2
- package/dist/astro/routes/api/admin/users/_id_/enable.mjs +2 -2
- package/dist/astro/routes/api/admin/users/_id_/index.mjs +6 -6
- package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +3 -3
- package/dist/astro/routes/api/admin/users/index.mjs +6 -6
- package/dist/astro/routes/api/auth/dev-bypass.mjs +7 -6
- package/dist/astro/routes/api/auth/dev-bypass.mjs.map +1 -1
- package/dist/astro/routes/api/auth/invite/accept.mjs +2 -2
- package/dist/astro/routes/api/auth/invite/complete.mjs +7 -7
- package/dist/astro/routes/api/auth/invite/index.mjs +7 -7
- package/dist/astro/routes/api/auth/invite/register-options.mjs +7 -7
- package/dist/astro/routes/api/auth/logout.mjs +3 -3
- package/dist/astro/routes/api/auth/magic-link/send.mjs +8 -8
- package/dist/astro/routes/api/auth/magic-link/verify.mjs +3 -3
- package/dist/astro/routes/api/auth/me.mjs +7 -7
- package/dist/astro/routes/api/auth/mode.mjs +2 -2
- package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +2 -2
- package/dist/astro/routes/api/auth/oauth/_provider_.mjs +1 -1
- package/dist/astro/routes/api/auth/passkey/_id_.mjs +6 -6
- package/dist/astro/routes/api/auth/passkey/index.mjs +2 -2
- package/dist/astro/routes/api/auth/passkey/options.mjs +8 -8
- package/dist/astro/routes/api/auth/passkey/register/options.mjs +7 -7
- package/dist/astro/routes/api/auth/passkey/register/verify.mjs +7 -7
- package/dist/astro/routes/api/auth/passkey/verify.mjs +7 -7
- package/dist/astro/routes/api/auth/signup/complete.mjs +7 -7
- package/dist/astro/routes/api/auth/signup/request.mjs +8 -8
- package/dist/astro/routes/api/auth/signup/verify.mjs +2 -2
- package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +11 -11
- package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +10 -10
- package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +9 -9
- package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +7 -7
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs +16 -14
- 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 +16 -14
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +7 -7
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +14 -13
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_.d.mts.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_.mjs +8 -8
- package/dist/astro/routes/api/content/_collection_/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/authors.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/index.mjs +7 -7
- package/dist/astro/routes/api/content/_collection_/trash.mjs +7 -7
- package/dist/astro/routes/api/dashboard.mjs +7 -7
- package/dist/astro/routes/api/dev/emails.mjs +2 -2
- package/dist/astro/routes/api/import/probe.d.mts +3 -3
- package/dist/astro/routes/api/import/probe.mjs +12 -12
- package/dist/astro/routes/api/import/wordpress/analyze.mjs +3 -3
- package/dist/astro/routes/api/import/wordpress/execute.d.mts +11 -11
- package/dist/astro/routes/api/import/wordpress/execute.mjs +12 -11
- 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 +7 -7
- package/dist/astro/routes/api/import/wordpress/prepare.mjs +9 -9
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +11 -11
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +11 -9
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +12 -12
- package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +11 -11
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +20 -19
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs.map +1 -1
- package/dist/astro/routes/api/manifest.mjs +3 -3
- package/dist/astro/routes/api/mcp.mjs +41 -41
- package/dist/astro/routes/api/media/_id_/confirm.d.mts.map +1 -1
- package/dist/astro/routes/api/media/_id_/confirm.mjs +105 -36
- package/dist/astro/routes/api/media/_id_/confirm.mjs.map +1 -1
- package/dist/astro/routes/api/media/_id_/upload.d.mts +8 -0
- package/dist/astro/routes/api/media/_id_/upload.d.mts.map +1 -0
- package/dist/astro/routes/api/media/_id_/upload.mjs +168 -0
- package/dist/astro/routes/api/media/_id_/upload.mjs.map +1 -0
- package/dist/astro/routes/api/media/_id_/usage.mjs +14 -12
- package/dist/astro/routes/api/media/_id_/usage.mjs.map +1 -1
- package/dist/astro/routes/api/media/_id_.d.mts.map +1 -1
- package/dist/astro/routes/api/media/_id_.mjs +21 -14
- package/dist/astro/routes/api/media/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/media/file/_...key_.mjs +2 -2
- package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +3 -3
- package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +3 -3
- package/dist/astro/routes/api/media/providers/index.mjs +3 -3
- package/dist/astro/routes/api/media/upload-url.d.mts.map +1 -1
- package/dist/astro/routes/api/media/upload-url.mjs +34 -23
- package/dist/astro/routes/api/media/upload-url.mjs.map +1 -1
- package/dist/astro/routes/api/media.mjs +13 -12
- package/dist/astro/routes/api/media.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +9 -8
- package/dist/astro/routes/api/menus/_name_/items/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/items.mjs +9 -8
- package/dist/astro/routes/api/menus/_name_/items.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/reorder.mjs +9 -8
- package/dist/astro/routes/api/menus/_name_/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/translations.mjs +9 -8
- package/dist/astro/routes/api/menus/_name_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_.mjs +9 -8
- package/dist/astro/routes/api/menus/_name_.mjs.map +1 -1
- package/dist/astro/routes/api/menus/index.mjs +9 -8
- package/dist/astro/routes/api/menus/index.mjs.map +1 -1
- package/dist/astro/routes/api/oauth/authorize.mjs +5 -5
- package/dist/astro/routes/api/oauth/device/authorize.mjs +6 -6
- package/dist/astro/routes/api/oauth/device/code.mjs +7 -7
- package/dist/astro/routes/api/oauth/device/token.mjs +7 -7
- package/dist/astro/routes/api/oauth/register.mjs +3 -3
- package/dist/astro/routes/api/oauth/token/refresh.mjs +6 -6
- package/dist/astro/routes/api/oauth/token/revoke.mjs +6 -6
- package/dist/astro/routes/api/oauth/token.mjs +6 -6
- package/dist/astro/routes/api/openapi.json.mjs +30 -8
- package/dist/astro/routes/api/openapi.json.mjs.map +1 -1
- package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +5 -5
- package/dist/astro/routes/api/redirects/404s/index.mjs +10 -10
- package/dist/astro/routes/api/redirects/404s/summary.mjs +10 -10
- package/dist/astro/routes/api/redirects/_id_.mjs +11 -11
- package/dist/astro/routes/api/redirects/index.mjs +11 -11
- package/dist/astro/routes/api/relations/_id_/index.mjs +16 -14
- package/dist/astro/routes/api/relations/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/relations/_id_/translations.mjs +12 -10
- package/dist/astro/routes/api/relations/_id_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/relations/index.mjs +16 -14
- package/dist/astro/routes/api/relations/index.mjs.map +1 -1
- package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +3 -3
- package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +3 -3
- package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +36 -34
- 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 +36 -34
- 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 +36 -34
- package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +36 -34
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/index.mjs +36 -34
- package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/index.mjs +10 -8
- package/dist/astro/routes/api/schema/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs +36 -34
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/schema/orphans/index.mjs +36 -34
- package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
- package/dist/astro/routes/api/search/enable.mjs +12 -11
- package/dist/astro/routes/api/search/enable.mjs.map +1 -1
- package/dist/astro/routes/api/search/index.mjs +11 -10
- package/dist/astro/routes/api/search/index.mjs.map +1 -1
- package/dist/astro/routes/api/search/rebuild.mjs +12 -11
- package/dist/astro/routes/api/search/rebuild.mjs.map +1 -1
- package/dist/astro/routes/api/search/stats.mjs +8 -7
- package/dist/astro/routes/api/search/stats.mjs.map +1 -1
- package/dist/astro/routes/api/search/suggest.mjs +11 -10
- package/dist/astro/routes/api/search/suggest.mjs.map +1 -1
- package/dist/astro/routes/api/sections/_slug_.mjs +10 -10
- package/dist/astro/routes/api/sections/index.mjs +10 -10
- package/dist/astro/routes/api/settings/backups/archives/_name_.mjs +4 -4
- package/dist/astro/routes/api/settings/backups/archives/index.mjs +4 -4
- package/dist/astro/routes/api/settings/backups/export.mjs +4 -4
- package/dist/astro/routes/api/settings/backups/index.mjs +5 -5
- package/dist/astro/routes/api/settings/email.mjs +4 -4
- package/dist/astro/routes/api/settings.mjs +12 -12
- package/dist/astro/routes/api/setup/admin-verify.mjs +8 -8
- package/dist/astro/routes/api/setup/admin.mjs +8 -8
- package/dist/astro/routes/api/setup/dev-bypass.mjs +24 -22
- package/dist/astro/routes/api/setup/dev-bypass.mjs.map +1 -1
- package/dist/astro/routes/api/setup/dev-reset.mjs +2 -2
- package/dist/astro/routes/api/setup/index.mjs +24 -22
- package/dist/astro/routes/api/setup/index.mjs.map +1 -1
- package/dist/astro/routes/api/setup/status.mjs +3 -3
- package/dist/astro/routes/api/snapshot.mjs +5 -5
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +14 -13
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +14 -13
- 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 +19 -15
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/index.mjs +14 -13
- package/dist/astro/routes/api/taxonomies/index.mjs.map +1 -1
- package/dist/astro/routes/api/themes/preview.mjs +4 -4
- package/dist/astro/routes/api/typegen.mjs +5 -5
- package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +1 -1
- package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +1 -1
- package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +7 -7
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +10 -10
- package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +10 -10
- package/dist/astro/routes/api/widget-areas/_name_.mjs +6 -6
- package/dist/astro/routes/api/widget-areas/index.mjs +10 -10
- package/dist/astro/routes/api/widget-components.mjs +2 -2
- package/dist/astro/routes/robots.txt.mjs +5 -5
- package/dist/astro/routes/sitemap-_collection_.xml.mjs +7 -7
- package/dist/astro/routes/sitemap.xml.mjs +5 -5
- package/dist/astro/types.d.mts +14 -13
- 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-6WPZa1xZ.mjs → authorize-R5iYYrpa.mjs} +2 -2
- package/dist/{authorize-6WPZa1xZ.mjs.map → authorize-R5iYYrpa.mjs.map} +1 -1
- package/dist/{backup-Qr9PaGUo.mjs → backup-LpQ1V_sR.mjs} +2 -2
- package/dist/{backup-Qr9PaGUo.mjs.map → backup-LpQ1V_sR.mjs.map} +1 -1
- package/dist/{byline-BTOxUlFF.mjs → byline-C5TAqs8N.mjs} +6 -6
- package/dist/{byline-BTOxUlFF.mjs.map → byline-C5TAqs8N.mjs.map} +1 -1
- package/dist/{byline-fields-CdU_LTF1.mjs → byline-fields-T9ZLZMxJ.mjs} +1 -1
- package/dist/{byline-fields-CdU_LTF1.mjs.map → byline-fields-T9ZLZMxJ.mjs.map} +1 -1
- package/dist/{bylines-FyZu6TbJ.mjs → bylines-B8-WGdja.mjs} +6 -6
- package/dist/{bylines-FyZu6TbJ.mjs.map → bylines-B8-WGdja.mjs.map} +1 -1
- package/dist/{bylines-oVN0iPwX.mjs → bylines-DGuqBLjV.mjs} +5 -5
- package/dist/{bylines-oVN0iPwX.mjs.map → bylines-DGuqBLjV.mjs.map} +1 -1
- package/dist/{cache-DDwy3JDW.mjs → cache-B26cufFd.mjs} +2 -2
- package/dist/{cache-DDwy3JDW.mjs.map → cache-B26cufFd.mjs.map} +1 -1
- package/dist/{chunks-Bq-5DPrD.mjs → chunks-D5dlPeRb.mjs} +2 -2
- package/dist/{chunks-Bq-5DPrD.mjs.map → chunks-D5dlPeRb.mjs.map} +1 -1
- package/dist/cli/index.mjs +20 -19
- package/dist/cli/index.mjs.map +1 -1
- package/dist/client/cf-access.d.mts +1 -1
- package/dist/client/index.d.mts +1 -1
- package/dist/client/index.mjs +2 -2
- package/dist/{comment-B9cUud8H.mjs → comment-DnTxxVHv.mjs} +2 -2
- package/dist/{comment-B9cUud8H.mjs.map → comment-DnTxxVHv.mjs.map} +1 -1
- package/dist/{comment-reaction-VUXO981F.mjs → comment-reaction-BUlUz2bh.mjs} +2 -2
- package/dist/{comment-reaction-VUXO981F.mjs.map → comment-reaction-BUlUz2bh.mjs.map} +1 -1
- package/dist/{comments-PXj1E9Si.mjs → comments-QPKgK3nk.mjs} +3 -3
- package/dist/{comments-PXj1E9Si.mjs.map → comments-QPKgK3nk.mjs.map} +1 -1
- package/dist/{config-B6b_BobR.mjs → config-DyF3OKg_.mjs} +15 -10
- package/dist/config-DyF3OKg_.mjs.map +1 -0
- package/dist/{content-BC43pICM.mjs → content-CpfKV9QE.mjs} +9 -9
- package/dist/content-CpfKV9QE.mjs.map +1 -0
- package/dist/{content-refresh-CPMSauD3.mjs → content-refresh-DgqUBeTv.mjs} +5 -5
- package/dist/{content-refresh-CPMSauD3.mjs.map → content-refresh-DgqUBeTv.mjs.map} +1 -1
- package/dist/{context-DOurRIrb.mjs → context-kO4YZB03.mjs} +10 -10
- package/dist/{context-DOurRIrb.mjs.map → context-kO4YZB03.mjs.map} +1 -1
- package/dist/{dashboard-CBm4zhc3.mjs → dashboard-DoBwPnON.mjs} +4 -4
- package/dist/{dashboard-CBm4zhc3.mjs.map → dashboard-DoBwPnON.mjs.map} +1 -1
- package/dist/db/index.d.mts +2 -2
- package/dist/db/index.mjs +3 -2
- package/dist/db/index.mjs.map +1 -1
- package/dist/{device-flow-BeA6lUS1.mjs → device-flow-DhUsyJU6.mjs} +4 -4
- package/dist/{device-flow-BeA6lUS1.mjs.map → device-flow-DhUsyJU6.mjs.map} +1 -1
- package/dist/{dialect-helpers-BtOwo2us.mjs → dialect-helpers-DFwyWjTM.mjs} +21 -2
- package/dist/dialect-helpers-DFwyWjTM.mjs.map +1 -0
- package/dist/{error-DJ98TRbQ.mjs → error-DmmN74gW.mjs} +2 -2
- package/dist/{error-DJ98TRbQ.mjs.map → error-DmmN74gW.mjs.map} +1 -1
- package/dist/{escape-CFedIB1C.mjs → escape-CdW31WsG.mjs} +1 -1
- package/dist/{escape-CFedIB1C.mjs.map → escape-CdW31WsG.mjs.map} +1 -1
- package/dist/{field-defs-cache-KfNJ_qLQ.mjs → field-defs-cache-QMVnzTH6.mjs} +2 -2
- package/dist/{field-defs-cache-KfNJ_qLQ.mjs.map → field-defs-cache-QMVnzTH6.mjs.map} +1 -1
- package/dist/{fts-manager-hyCU9OOp.mjs → fts-manager-vncsZIJm.mjs} +3 -3
- package/dist/{fts-manager-hyCU9OOp.mjs.map → fts-manager-vncsZIJm.mjs.map} +1 -1
- package/dist/{hash-DFFrkivP.mjs → hash-Cb7U1b5M.mjs} +8 -4
- package/dist/hash-Cb7U1b5M.mjs.map +1 -0
- package/dist/{hreflang-CbYeCzl9.mjs → hreflang-Bg-zMpkr.mjs} +7 -7
- package/dist/{hreflang-CbYeCzl9.mjs.map → hreflang-Bg-zMpkr.mjs.map} +1 -1
- package/dist/{hreflang-CIxH_LKz.d.mts → hreflang-CZbSx6Bg.d.mts} +2 -2
- package/dist/{hreflang-CIxH_LKz.d.mts.map → hreflang-CZbSx6Bg.d.mts.map} +1 -1
- package/dist/{import-oDYCgNYQ.mjs → import-PKhLeXvn.mjs} +2 -2
- package/dist/{import-oDYCgNYQ.mjs.map → import-PKhLeXvn.mjs.map} +1 -1
- package/dist/{index-BEui-cRd.d.mts → index-BeNto_Vs.d.mts} +3 -3
- package/dist/{index-BEui-cRd.d.mts.map → index-BeNto_Vs.d.mts.map} +1 -1
- package/dist/{index-BcEH_FfS.d.mts → index-j9rTh3cp.d.mts} +68 -18
- package/dist/index-j9rTh3cp.d.mts.map +1 -0
- package/dist/index.d.mts +18 -18
- package/dist/index.mjs +49 -49
- package/dist/{load-Dg5gtWma.mjs → load-BwTdWE8B.mjs} +2 -2
- package/dist/{load-Dg5gtWma.mjs.map → load-BwTdWE8B.mjs.map} +1 -1
- package/dist/{loader-D4rigvjR.mjs → loader-C1XOLV5b.mjs} +4 -4
- package/dist/{loader-D4rigvjR.mjs.map → loader-C1XOLV5b.mjs.map} +1 -1
- package/dist/media/index.d.mts +1 -1
- package/dist/media/local-runtime.d.mts +12 -12
- package/dist/media/local-runtime.mjs +5 -5
- package/dist/{media-BJ6SRY3g.mjs → media-DWIzoVFL.mjs} +8 -4
- package/dist/{media-BJ6SRY3g.mjs.map → media-DWIzoVFL.mjs.map} +1 -1
- package/dist/{media-allowlist-jUppPWFy.mjs → media-allowlist-B7TPD6aq.mjs} +1 -1
- package/dist/{media-allowlist-jUppPWFy.mjs.map → media-allowlist-B7TPD6aq.mjs.map} +1 -1
- package/dist/{media-its1WLYv.mjs → media-tQDZEdu7.mjs} +60 -15
- package/dist/media-tQDZEdu7.mjs.map +1 -0
- package/dist/{media-upload-DNu3QySc.mjs → media-upload-Bc9Nc5Zf.mjs} +6 -6
- package/dist/{media-upload-DNu3QySc.mjs.map → media-upload-Bc9Nc5Zf.mjs.map} +1 -1
- package/dist/{media-usage-DPQ3K4xB.mjs → media-usage-DPJcNaAq.mjs} +6 -6
- package/dist/{media-usage-DPQ3K4xB.mjs.map → media-usage-DPJcNaAq.mjs.map} +1 -1
- package/dist/{menus-BMGzWyWH.mjs → menus-BxPLFfIc.mjs} +3 -3
- package/dist/{menus-BMGzWyWH.mjs.map → menus-BxPLFfIc.mjs.map} +1 -1
- package/dist/{menus-CPf_SW7u.mjs → menus-C6qhqP4X.mjs} +8 -8
- package/dist/{menus-CPf_SW7u.mjs.map → menus-C6qhqP4X.mjs.map} +1 -1
- package/dist/{oauth-authorization-oqfbBuMH.mjs → oauth-authorization-C9tFinly.mjs} +4 -4
- package/dist/{oauth-authorization-oqfbBuMH.mjs.map → oauth-authorization-C9tFinly.mjs.map} +1 -1
- package/dist/{oauth-clients-BlrUHAsf.mjs → oauth-clients-BwTxE1aE.mjs} +1 -1
- package/dist/{oauth-clients-BlrUHAsf.mjs.map → oauth-clients-BwTxE1aE.mjs.map} +1 -1
- package/dist/{oauth-state-store-DnvjRMy6.mjs → oauth-state-store-DaRUwPWO.mjs} +1 -1
- package/dist/{oauth-state-store-DnvjRMy6.mjs.map → oauth-state-store-DaRUwPWO.mjs.map} +1 -1
- package/dist/{oauth-user-lookup-oUllxvAv.mjs → oauth-user-lookup-CzuzOSlF.mjs} +1 -1
- package/dist/{oauth-user-lookup-oUllxvAv.mjs.map → oauth-user-lookup-CzuzOSlF.mjs.map} +1 -1
- package/dist/object-cache/memory.d.mts +1 -1
- package/dist/{options-BqMkWfYa.d.mts → options-aeIs8WFu.d.mts} +3 -3
- package/dist/{options-BqMkWfYa.d.mts.map → options-aeIs8WFu.d.mts.map} +1 -1
- package/dist/page/index.d.mts +2 -2
- package/dist/{parse-53zyxlpv.mjs → parse-BL49yb9D.mjs} +2 -2
- package/dist/{parse-53zyxlpv.mjs.map → parse-BL49yb9D.mjs.map} +1 -1
- package/dist/{passkey-config-C-SKpc0-.mjs → passkey-config-KMhgFjdQ.mjs} +1 -1
- package/dist/{passkey-config-C-SKpc0-.mjs.map → passkey-config-KMhgFjdQ.mjs.map} +1 -1
- package/dist/{placeholder-Dop47JMM.d.mts → placeholder-Dxo5Zt58.d.mts} +1 -1
- package/dist/{placeholder-Dop47JMM.d.mts.map → placeholder-Dxo5Zt58.d.mts.map} +1 -1
- package/dist/plugin-types.d.mts +1 -1
- package/dist/plugin-utils.d.mts +10 -10
- package/dist/plugins/adapt-sandbox-entry.d.mts +10 -10
- package/dist/{portable-text-sDj92Kxv.mjs → portable-text-CNahFfj6.mjs} +1 -1
- package/dist/{portable-text-sDj92Kxv.mjs.map → portable-text-CNahFfj6.mjs.map} +1 -1
- package/dist/{query-DdFGHzQF.mjs → query-1xOcEy18.mjs} +3 -3
- package/dist/{query-DdFGHzQF.mjs.map → query-1xOcEy18.mjs.map} +1 -1
- package/dist/{query-BbJQ-dGg.mjs → query-DCiXI7OZ.mjs} +36 -16
- package/dist/query-DCiXI7OZ.mjs.map +1 -0
- package/dist/{rate-limit-D3IEiUi2.mjs → rate-limit-Vkp9gQ1Y.mjs} +2 -2
- package/dist/{rate-limit-D3IEiUi2.mjs.map → rate-limit-Vkp9gQ1Y.mjs.map} +1 -1
- package/dist/{redirect-BoUac4NT.mjs → redirect-BJ6d1yHh.mjs} +3 -3
- package/dist/{redirect-BoUac4NT.mjs.map → redirect-BJ6d1yHh.mjs.map} +1 -1
- package/dist/{redirect-Botom7X6.mjs → redirect-CDgfv9vh.mjs} +1 -1
- package/dist/{redirect-Botom7X6.mjs.map → redirect-CDgfv9vh.mjs.map} +1 -1
- package/dist/{redirects-D457qwt0.mjs → redirects-BOn2DIUs.mjs} +8 -4
- package/dist/redirects-BOn2DIUs.mjs.map +1 -0
- package/dist/{redirects-ChbpqKiS.mjs → redirects-Cwkq2H-G.mjs} +3 -3
- package/dist/{redirects-ChbpqKiS.mjs.map → redirects-Cwkq2H-G.mjs.map} +1 -1
- package/dist/{registry-y21kjhfG.mjs → registry-BP1JK2xh.mjs} +6 -6
- package/dist/{registry-y21kjhfG.mjs.map → registry-BP1JK2xh.mjs.map} +1 -1
- package/dist/{relation-Du0r04E0.mjs → relation-DJ5DZh7B.mjs} +3 -3
- package/dist/{relation-Du0r04E0.mjs.map → relation-DJ5DZh7B.mjs.map} +1 -1
- package/dist/{relations-CZMpBqEd.mjs → relations-C4duJnwI.mjs} +2 -2
- package/dist/{relations-CZMpBqEd.mjs.map → relations-C4duJnwI.mjs.map} +1 -1
- package/dist/{relations-BKybBoOX.d.mts → relations-DHFQGX0h.d.mts} +19 -8
- package/dist/relations-DHFQGX0h.d.mts.map +1 -0
- package/dist/{relations-DtX1UMBH.mjs → relations-DpTjftCl.mjs} +6 -6
- package/dist/{relations-DtX1UMBH.mjs.map → relations-DpTjftCl.mjs.map} +1 -1
- package/dist/{resolve-DFr4kq72.mjs → resolve-BUvFE0Lr.mjs} +2 -2
- package/dist/{resolve-DFr4kq72.mjs.map → resolve-BUvFE0Lr.mjs.map} +1 -1
- package/dist/{runner-BdeLEgad.mjs → runner-BsI18UgP.mjs} +230 -212
- package/dist/runner-BsI18UgP.mjs.map +1 -0
- package/dist/{runner-Dd8m8k9F.d.mts → runner-CHdkERbt.d.mts} +2 -2
- package/dist/{runner-Dd8m8k9F.d.mts.map → runner-CHdkERbt.d.mts.map} +1 -1
- package/dist/runtime.d.mts +11 -11
- package/dist/runtime.mjs +3 -3
- package/dist/{schema-BH8P8vaC.mjs → schema-eqZhkR0S.mjs} +3 -3
- package/dist/{schema-BH8P8vaC.mjs.map → schema-eqZhkR0S.mjs.map} +1 -1
- package/dist/{scopes-DTIkIaGA.mjs → scopes-Be2d8bSb.mjs} +3 -3
- package/dist/{scopes-DTIkIaGA.mjs.map → scopes-Be2d8bSb.mjs.map} +1 -1
- package/dist/{search-D-Yhpmvs.mjs → search-CeO678cp.mjs} +6 -6
- package/dist/{search-D-Yhpmvs.mjs.map → search-CeO678cp.mjs.map} +1 -1
- package/dist/{secrets-CQ-69kF9.mjs → secrets-870d-7yA.mjs} +1 -1
- package/dist/{secrets-CQ-69kF9.mjs.map → secrets-870d-7yA.mjs.map} +1 -1
- package/dist/{sections-CzVBAKjw.mjs → sections-DSuEfirn.mjs} +3 -3
- package/dist/{sections-CzVBAKjw.mjs.map → sections-DSuEfirn.mjs.map} +1 -1
- package/dist/seed/index.d.mts +2 -2
- package/dist/seed/index.mjs +18 -16
- package/dist/seo/index.d.mts +3 -3
- package/dist/seo/index.mjs +14 -12
- package/dist/seo/index.mjs.map +1 -1
- package/dist/{seo-kJzVAmmu.mjs → seo-BAPKiED8.mjs} +2 -2
- package/dist/{seo-kJzVAmmu.mjs.map → seo-BAPKiED8.mjs.map} +1 -1
- package/dist/{service-CQnc276a.mjs → service-DyFT-k-R.mjs} +3 -3
- package/dist/{service-CQnc276a.mjs.map → service-DyFT-k-R.mjs.map} +1 -1
- package/dist/{session-user-DbHqKDKe.mjs → session-user-BrK2zz7S.mjs} +1 -1
- package/dist/{session-user-DbHqKDKe.mjs.map → session-user-BrK2zz7S.mjs.map} +1 -1
- package/dist/{settings-Dtc0DU31.mjs → settings-CREKyj8I.mjs} +3 -3
- package/dist/{settings-Dtc0DU31.mjs.map → settings-CREKyj8I.mjs.map} +1 -1
- package/dist/{settings-C2PaBS49.mjs → settings-DgKouY2S.mjs} +3 -3
- package/dist/{settings-C2PaBS49.mjs.map → settings-DgKouY2S.mjs.map} +1 -1
- package/dist/{setup-complete-CdIlqloh.mjs → setup-complete-L7bMK2VI.mjs} +1 -1
- package/dist/{setup-complete-CdIlqloh.mjs.map → setup-complete-L7bMK2VI.mjs.map} +1 -1
- package/dist/{setup-nonce-DqiIPr-J.mjs → setup-nonce-Ct5tjWcq.mjs} +1 -1
- package/dist/{setup-nonce-DqiIPr-J.mjs.map → setup-nonce-Ct5tjWcq.mjs.map} +1 -1
- package/dist/{site-url-NGJT6NTU.mjs → site-url-8N3kSyVZ.mjs} +1 -1
- package/dist/{site-url-NGJT6NTU.mjs.map → site-url-8N3kSyVZ.mjs.map} +1 -1
- package/dist/storage/local.d.mts +1 -1
- package/dist/storage/s3.d.mts +1 -1
- package/dist/storage/s3.mjs +1 -1
- package/dist/storage/s3.mjs.map +1 -1
- package/dist/{taxonomies-HI9fnTdp.mjs → taxonomies-B61CRSha.mjs} +94 -39
- package/dist/taxonomies-B61CRSha.mjs.map +1 -0
- package/dist/{taxonomies-rMeBzOjX.mjs → taxonomies-Dbdki3Un.mjs} +9 -8
- package/dist/taxonomies-Dbdki3Un.mjs.map +1 -0
- package/dist/{taxonomy-0mCI25HN.mjs → taxonomy-DvwWAPvA.mjs} +3 -3
- package/dist/{taxonomy-0mCI25HN.mjs.map → taxonomy-DvwWAPvA.mjs.map} +1 -1
- package/dist/{transport-CKrlqSpD.mjs → transport-BWQo0Foy.mjs} +1 -1
- package/dist/{transport-CKrlqSpD.mjs.map → transport-BWQo0Foy.mjs.map} +1 -1
- package/dist/{transport-Vd7VdqHv.d.mts → transport-DokJOScS.d.mts} +1 -1
- package/dist/{transport-Vd7VdqHv.d.mts.map → transport-DokJOScS.d.mts.map} +1 -1
- package/dist/{types-DPKhI5ib.d.mts → types-84Bque3-.d.mts} +9 -1
- package/dist/types-84Bque3-.d.mts.map +1 -0
- package/dist/{types-BvB7gDOD.d.mts → types-BQY7VYw6.d.mts} +2 -2
- package/dist/{types-BvB7gDOD.d.mts.map → types-BQY7VYw6.d.mts.map} +1 -1
- package/dist/{types-B4vm81VH.d.mts → types-C9P3ysxq.d.mts} +1 -1
- package/dist/{types-B4vm81VH.d.mts.map → types-C9P3ysxq.d.mts.map} +1 -1
- package/dist/{types-B97jg3aW.d.mts → types-CcSZCcF1.d.mts} +1 -1
- package/dist/{types-B97jg3aW.d.mts.map → types-CcSZCcF1.d.mts.map} +1 -1
- package/dist/{types-BNfPHfay.d.mts → types-DQLZ58GV.d.mts} +1 -1
- package/dist/{types-BNfPHfay.d.mts.map → types-DQLZ58GV.d.mts.map} +1 -1
- package/dist/{types-BfYUPJdP.d.mts → types-DqZVPILm.d.mts} +2 -2
- package/dist/{types-BfYUPJdP.d.mts.map → types-DqZVPILm.d.mts.map} +1 -1
- package/dist/{types-C7U0HlEr.d.mts → types-Dr2GLlwu.d.mts} +1 -1
- package/dist/{types-C7U0HlEr.d.mts.map → types-Dr2GLlwu.d.mts.map} +1 -1
- package/dist/{types-iVeZ5g6N.d.mts → types-DsAMyD_o.d.mts} +1 -1
- package/dist/{types-iVeZ5g6N.d.mts.map → types-DsAMyD_o.d.mts.map} +1 -1
- package/dist/{types-CrRUFdej.mjs → types-XrQQ-Aex.mjs} +2 -2
- package/dist/{types-CrRUFdej.mjs.map → types-XrQQ-Aex.mjs.map} +1 -1
- package/dist/{types-Kmaxdarz.d.mts → types-jISEalTX.d.mts} +1 -1
- package/dist/{types-Kmaxdarz.d.mts.map → types-jISEalTX.d.mts.map} +1 -1
- package/dist/upload-attempts-C5yd6Gae.mjs +27 -0
- package/dist/upload-attempts-C5yd6Gae.mjs.map +1 -0
- package/dist/{user-aTXqmXBz.mjs → user-BAumEmpA.mjs} +3 -3
- package/dist/{user-aTXqmXBz.mjs.map → user-BAumEmpA.mjs.map} +1 -1
- package/dist/{validate-CDT1jl6_.mjs → validate-Bs_wT2ul.mjs} +3 -3
- package/dist/{validate-CDT1jl6_.mjs.map → validate-Bs_wT2ul.mjs.map} +1 -1
- package/dist/{validate-DULfgpJP.d.mts → validate-CdYcY-Ln.d.mts} +5 -5
- package/dist/{validate-DULfgpJP.d.mts.map → validate-CdYcY-Ln.d.mts.map} +1 -1
- package/dist/{validation-DlD0E35W.mjs → validation-BngR0nit.mjs} +10 -8
- package/dist/{validation-DlD0E35W.mjs.map → validation-BngR0nit.mjs.map} +1 -1
- package/dist/version-Bdfb34kk.mjs +7 -0
- package/dist/{version-Ci6bw6YK.mjs.map → version-Bdfb34kk.mjs.map} +1 -1
- package/dist/{widgets-5fipNkMT.mjs → widgets-L-VndTKD.mjs} +2 -2
- package/dist/{widgets-5fipNkMT.mjs.map → widgets-L-VndTKD.mjs.map} +1 -1
- package/dist/{wxr-taxonomies-BmUnBNgz.mjs → wxr-taxonomies-BexjtNid.mjs} +4 -4
- package/dist/{wxr-taxonomies-BmUnBNgz.mjs.map → wxr-taxonomies-BexjtNid.mjs.map} +1 -1
- package/dist/{wxr-taxonomies-B4tMuN5T.d.mts → wxr-taxonomies-DueaLFd9.d.mts} +1 -1
- package/dist/{wxr-taxonomies-B4tMuN5T.d.mts.map → wxr-taxonomies-DueaLFd9.d.mts.map} +1 -1
- package/dist/{zod-generator-CwkHWz4f.mjs → zod-generator-DMzfga3g.mjs} +3 -3
- package/dist/{zod-generator-CwkHWz4f.mjs.map → zod-generator-DMzfga3g.mjs.map} +1 -1
- package/package.json +8 -7
- package/src/api/handlers/media.ts +4 -4
- package/src/api/handlers/taxonomies.ts +10 -9
- package/src/api/openapi/document.ts +36 -3
- package/src/api/schemas/media.ts +9 -2
- package/src/api/schemas/taxonomies.ts +16 -1
- package/src/astro/integration/routes.ts +5 -0
- package/src/astro/prefetch.ts +7 -2
- package/src/astro/routes/api/content/[collection]/[id].ts +3 -1
- package/src/astro/routes/api/media/[id]/confirm.ts +148 -59
- package/src/astro/routes/api/media/[id]/upload.ts +262 -0
- package/src/astro/routes/api/media/[id].ts +19 -10
- package/src/astro/routes/api/media/upload-url.ts +28 -31
- package/src/astro/routes/api/taxonomies/[name]/terms/index.ts +6 -3
- package/src/astro/types.ts +1 -0
- package/src/cleanup.ts +24 -1
- package/src/components/InlinePortableTextEditor.tsx +4 -0
- package/src/components/code-mark.ts +11 -0
- package/src/components/widgets/Categories.astro +1 -1
- package/src/components/widgets/Tags.astro +1 -1
- package/src/database/dialect-helpers.ts +38 -0
- package/src/database/migrations/054_media_upload_attempts.ts +41 -0
- package/src/database/migrations/runner.ts +2 -0
- package/src/database/repositories/content.ts +2 -5
- package/src/database/repositories/media.ts +158 -28
- package/src/database/types.ts +10 -0
- package/src/emdash-runtime.ts +13 -0
- package/src/i18n/config.ts +17 -10
- package/src/index.ts +1 -0
- package/src/media/upload-attempts.ts +33 -0
- package/src/query.ts +29 -2
- package/src/storage/s3.ts +1 -1
- package/src/taxonomies/index.ts +64 -23
- package/src/taxonomies/term-counts.ts +54 -24
- package/src/utils/hash.ts +14 -3
- package/dist/api-EibxGP-V.mjs.map +0 -1
- package/dist/config-B6b_BobR.mjs.map +0 -1
- package/dist/content-BC43pICM.mjs.map +0 -1
- package/dist/dialect-helpers-BtOwo2us.mjs.map +0 -1
- package/dist/hash-DFFrkivP.mjs.map +0 -1
- package/dist/index-BcEH_FfS.d.mts.map +0 -1
- package/dist/media-its1WLYv.mjs.map +0 -1
- package/dist/query-BbJQ-dGg.mjs.map +0 -1
- package/dist/redirects-D457qwt0.mjs.map +0 -1
- package/dist/relations-BKybBoOX.d.mts.map +0 -1
- package/dist/runner-BdeLEgad.mjs.map +0 -1
- package/dist/taxonomies-HI9fnTdp.mjs.map +0 -1
- package/dist/taxonomies-rMeBzOjX.mjs.map +0 -1
- package/dist/types-DPKhI5ib.d.mts.map +0 -1
- package/dist/version-Ci6bw6YK.mjs +0 -7
- /package/dist/{api-tokens-Cvmixds7.mjs → api-tokens-CEsW_jCg.mjs} +0 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { MediaRepository } from "../database/repositories/media.js";
|
|
2
|
+
import type { Storage } from "../storage/types.js";
|
|
3
|
+
|
|
4
|
+
export async function removeUploadAttempt(
|
|
5
|
+
storage: Storage,
|
|
6
|
+
repo: MediaRepository,
|
|
7
|
+
storageKey: string,
|
|
8
|
+
options: { allowUntracked?: boolean } = {},
|
|
9
|
+
): Promise<boolean> {
|
|
10
|
+
try {
|
|
11
|
+
if (!(await repo.claimUploadAttemptForCleanup(storageKey))) {
|
|
12
|
+
const tracked = await repo.hasUploadAttempt(storageKey);
|
|
13
|
+
if (tracked || !options.allowUntracked) return false;
|
|
14
|
+
}
|
|
15
|
+
} catch (error) {
|
|
16
|
+
console.error("[media] upload cleanup claim failed:", error);
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
try {
|
|
21
|
+
await storage.delete(storageKey);
|
|
22
|
+
} catch (error) {
|
|
23
|
+
console.error("[media] upload cleanup failed:", error);
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
try {
|
|
28
|
+
await repo.deleteUploadAttempt(storageKey);
|
|
29
|
+
} catch (error) {
|
|
30
|
+
console.error("[media] upload cleanup record deletion failed:", error);
|
|
31
|
+
}
|
|
32
|
+
return true;
|
|
33
|
+
}
|
package/src/query.ts
CHANGED
|
@@ -347,6 +347,23 @@ function entryEditOptions(entry: { data?: unknown }): EditableOptions {
|
|
|
347
347
|
return { status, hasDraft };
|
|
348
348
|
}
|
|
349
349
|
|
|
350
|
+
function stripRevisionMetadata(entry: { data?: unknown }): void {
|
|
351
|
+
const data = entryData(entry);
|
|
352
|
+
delete data.draftRevisionId;
|
|
353
|
+
delete data.liveRevisionId;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
function canExposeRevisionMetadata(
|
|
357
|
+
entry: { id: string; data?: unknown },
|
|
358
|
+
collection: string,
|
|
359
|
+
): boolean {
|
|
360
|
+
const ctx = getRequestContext();
|
|
361
|
+
if (ctx?.editMode) return true;
|
|
362
|
+
if (ctx?.preview?.collection !== collection) return false;
|
|
363
|
+
const dbId = entryDatabaseId(entry);
|
|
364
|
+
return ctx.preview.id === dbId || ctx.preview.id === entry.id;
|
|
365
|
+
}
|
|
366
|
+
|
|
350
367
|
/**
|
|
351
368
|
* Get all entries of a content type
|
|
352
369
|
*
|
|
@@ -441,7 +458,11 @@ async function loadCollectionCached<T extends string, D = InferCollectionData<T>
|
|
|
441
458
|
return { entries: [], error: snapshot.error, cacheHint: snapshot.cacheHint };
|
|
442
459
|
}
|
|
443
460
|
return {
|
|
444
|
-
entries: snapshot.value.entries.map((entry) =>
|
|
461
|
+
entries: snapshot.value.entries.map((entry) => {
|
|
462
|
+
const revived = reviveEntry<D>(entry);
|
|
463
|
+
if (!canExposeRevisionMetadata(revived, type)) stripRevisionMetadata(revived);
|
|
464
|
+
return revived;
|
|
465
|
+
}),
|
|
445
466
|
nextCursor: snapshot.value.nextCursor,
|
|
446
467
|
hasMore: snapshot.value.hasMore,
|
|
447
468
|
cacheHint: snapshot.value.cacheHint,
|
|
@@ -729,6 +750,9 @@ async function getEmDashCollectionUncached<T extends string, D = InferCollection
|
|
|
729
750
|
if (isEditMode) {
|
|
730
751
|
tagEditableFields(entryData(entry), type, dbId);
|
|
731
752
|
}
|
|
753
|
+
if (!canExposeRevisionMetadata(entry, type)) {
|
|
754
|
+
stripRevisionMetadata(entry);
|
|
755
|
+
}
|
|
732
756
|
return {
|
|
733
757
|
...entry,
|
|
734
758
|
edit: isEditMode ? createEditable(type, dbId, entryEditOptions(entry)) : createNoop(),
|
|
@@ -833,6 +857,7 @@ export async function getEmDashEntry<T extends string, D = InferCollectionData<T
|
|
|
833
857
|
wrapped: ContentEntry<D>,
|
|
834
858
|
opts: { isPreview: boolean; fallbackLocale?: string; cacheHint: CacheHint },
|
|
835
859
|
): Promise<EntryResult<D>> {
|
|
860
|
+
if (!opts.isPreview) stripRevisionMetadata(wrapped);
|
|
836
861
|
// Hydrate terms in the entry's resolved locale (fallback-aware) so a
|
|
837
862
|
// localized entry never picks up default-locale taxonomy terms (#1441).
|
|
838
863
|
// When i18n is disabled we leave the locale unset to preserve the
|
|
@@ -984,8 +1009,10 @@ export async function getEmDashEntry<T extends string, D = InferCollectionData<T
|
|
|
984
1009
|
if (!snapshot.ok) {
|
|
985
1010
|
return { entry: null, error: snapshot.error, isPreview: false, cacheHint: snapshot.cacheHint };
|
|
986
1011
|
}
|
|
1012
|
+
const revived = snapshot.value.entry ? reviveEntry<D>(snapshot.value.entry) : null;
|
|
1013
|
+
if (revived && !canExposeRevisionMetadata(revived, type)) stripRevisionMetadata(revived);
|
|
987
1014
|
return {
|
|
988
|
-
entry:
|
|
1015
|
+
entry: revived,
|
|
989
1016
|
isPreview: snapshot.value.isPreview,
|
|
990
1017
|
fallbackLocale: snapshot.value.fallbackLocale,
|
|
991
1018
|
cacheHint: snapshot.value.cacheHint,
|
package/src/storage/s3.ts
CHANGED
|
@@ -306,7 +306,7 @@ export class S3Storage implements Storage {
|
|
|
306
306
|
method: "PUT",
|
|
307
307
|
headers: {
|
|
308
308
|
"Content-Type": options.contentType,
|
|
309
|
-
...(options.size ? { "Content-Length": String(options.size) } : {}),
|
|
309
|
+
...(options.size !== undefined ? { "Content-Length": String(options.size) } : {}),
|
|
310
310
|
},
|
|
311
311
|
expiresAt,
|
|
312
312
|
};
|
package/src/taxonomies/index.ts
CHANGED
|
@@ -31,6 +31,15 @@ export interface TaxonomyQueryOptions {
|
|
|
31
31
|
locale?: string;
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
+
export interface TaxonomyTermsOptions extends TaxonomyQueryOptions {
|
|
35
|
+
/**
|
|
36
|
+
* Populate each term's `count`. Counts aggregate the whole
|
|
37
|
+
* `content_taxonomies` pivot against every declared collection, so callers
|
|
38
|
+
* that don't render a count should opt out. Defaults to `true`.
|
|
39
|
+
*/
|
|
40
|
+
includeCounts?: boolean;
|
|
41
|
+
}
|
|
42
|
+
|
|
34
43
|
/** Invalidate cached taxonomy term data and any content that hydrates terms. */
|
|
35
44
|
export function invalidateTermCache(): void {
|
|
36
45
|
invalidateTaxonomyObjectCache();
|
|
@@ -230,21 +239,54 @@ function termCountNamespaces(collections: string[]): string[] {
|
|
|
230
239
|
/**
|
|
231
240
|
* All terms of a taxonomy in a specific locale (flat for non-hierarchical,
|
|
232
241
|
* tree for hierarchical).
|
|
242
|
+
*
|
|
243
|
+
* The term list and the visible-entry counts are loaded and cached separately:
|
|
244
|
+
* the list depends only on the taxonomy epoch, while the counts additionally
|
|
245
|
+
* depend on every counted collection's content epoch and cost an aggregate over
|
|
246
|
+
* the whole assignment pivot. Callers that don't render counts pass
|
|
247
|
+
* `includeCounts: false` and skip that aggregate entirely, while still sharing
|
|
248
|
+
* the term list with callers that do.
|
|
233
249
|
*/
|
|
234
250
|
export async function getTaxonomyTerms(
|
|
235
251
|
taxonomyName: string,
|
|
236
|
-
options:
|
|
252
|
+
options: TaxonomyTermsOptions = {},
|
|
237
253
|
): Promise<TaxonomyTerm[]> {
|
|
238
254
|
const locale = resolveLocale(options.locale);
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
255
|
+
const def = await getTaxonomyDef(taxonomyName, options);
|
|
256
|
+
if (!def) return [];
|
|
257
|
+
if (options.includeCounts === false) return getTermList(def, locale);
|
|
258
|
+
|
|
259
|
+
// The two are independent, so run them concurrently to save a round trip.
|
|
260
|
+
const [terms, counts] = await Promise.all([
|
|
261
|
+
getTermList(def, locale),
|
|
262
|
+
getVisibleTermCounts(def.name, def.collections),
|
|
263
|
+
]);
|
|
264
|
+
return withCounts(terms, counts);
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
/** Terms without counts, under the cache keys the layout prefetch warms. */
|
|
268
|
+
function getTermList(def: TaxonomyDef, locale: string | undefined): Promise<TaxonomyTerm[]> {
|
|
269
|
+
const localeKey = locale ?? "*";
|
|
270
|
+
return requestCached(`taxonomy-terms:${def.name}:${localeKey}`, () =>
|
|
271
|
+
cachedQuery({
|
|
272
|
+
namespace: CacheNamespace.TAXONOMIES,
|
|
273
|
+
key: `termList:${def.name}:${localeKey}`,
|
|
245
274
|
load: () => loadTaxonomyTerms(def, locale),
|
|
246
|
-
})
|
|
247
|
-
|
|
275
|
+
}),
|
|
276
|
+
);
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* Copy a term list with counts attached. Counts are keyed by translation_group
|
|
281
|
+
* (what the pivot stores) and are locale-independent. Rebuilds every node so
|
|
282
|
+
* the shared, cached count-free list is never mutated.
|
|
283
|
+
*/
|
|
284
|
+
function withCounts(terms: TaxonomyTerm[], counts: Map<string, number>): TaxonomyTerm[] {
|
|
285
|
+
return terms.map((term) => ({
|
|
286
|
+
...term,
|
|
287
|
+
count: counts.get(term.translationGroup ?? term.id) ?? 0,
|
|
288
|
+
children: withCounts(term.children, counts),
|
|
289
|
+
}));
|
|
248
290
|
}
|
|
249
291
|
|
|
250
292
|
async function loadTaxonomyTerms(
|
|
@@ -260,14 +302,7 @@ async function loadTaxonomyTerms(
|
|
|
260
302
|
.orderBy("label", "asc");
|
|
261
303
|
if (locale !== undefined) termsQuery = termsQuery.where("locale", "=", locale);
|
|
262
304
|
|
|
263
|
-
|
|
264
|
-
// locale-independent. Only publicly visible entries are counted (#581);
|
|
265
|
-
// the map is request-cached so a term detail rendered on the same page
|
|
266
|
-
// reuses it. Independent of the terms query, so run both concurrently.
|
|
267
|
-
const [rows, counts] = await Promise.all([
|
|
268
|
-
termsQuery.execute(),
|
|
269
|
-
getVisibleTermCounts(def.name, def.collections),
|
|
270
|
-
]);
|
|
305
|
+
const rows = await termsQuery.execute();
|
|
271
306
|
|
|
272
307
|
const flatTerms: TaxonomyTermRow[] = rows.map((row) => ({
|
|
273
308
|
id: row.id,
|
|
@@ -280,7 +315,7 @@ async function loadTaxonomyTerms(
|
|
|
280
315
|
translation_group: row.translation_group,
|
|
281
316
|
}));
|
|
282
317
|
|
|
283
|
-
if (def.hierarchical) return buildTree(flatTerms
|
|
318
|
+
if (def.hierarchical) return buildTree(flatTerms);
|
|
284
319
|
|
|
285
320
|
return flatTerms.map((term) => ({
|
|
286
321
|
id: term.id,
|
|
@@ -289,7 +324,6 @@ async function loadTaxonomyTerms(
|
|
|
289
324
|
label: term.label,
|
|
290
325
|
description: term.data ? JSON.parse(term.data).description : undefined,
|
|
291
326
|
children: [],
|
|
292
|
-
count: counts.get(term.translation_group ?? term.id) ?? 0,
|
|
293
327
|
locale: term.locale,
|
|
294
328
|
translationGroup: term.translation_group,
|
|
295
329
|
}));
|
|
@@ -312,8 +346,16 @@ function getVisibleTermCounts(
|
|
|
312
346
|
// entry.
|
|
313
347
|
const scope = [...new Set(collections)].toSorted().join(",");
|
|
314
348
|
return requestCached(`taxonomy-term-counts:${taxonomyName}:${scope}`, async () => {
|
|
315
|
-
|
|
316
|
-
|
|
349
|
+
// A Map is not JSON-representable — cache the entries, rebuild on read.
|
|
350
|
+
const entries = await cachedQuery({
|
|
351
|
+
namespace: termCountNamespaces(collections),
|
|
352
|
+
key: `termCounts:${taxonomyName}:${scope}`,
|
|
353
|
+
load: async (): Promise<Array<[string, number]>> => {
|
|
354
|
+
const db = await getDb();
|
|
355
|
+
return [...(await fetchVisibleTermCounts(db, taxonomyName, collections))];
|
|
356
|
+
},
|
|
357
|
+
});
|
|
358
|
+
return new Map(entries);
|
|
317
359
|
});
|
|
318
360
|
}
|
|
319
361
|
|
|
@@ -796,7 +838,7 @@ function rowToTaxonomyDef(row: {
|
|
|
796
838
|
/**
|
|
797
839
|
* Build tree structure from flat terms
|
|
798
840
|
*/
|
|
799
|
-
function buildTree(flatTerms: TaxonomyTermRow[]
|
|
841
|
+
function buildTree(flatTerms: TaxonomyTermRow[]): TaxonomyTerm[] {
|
|
800
842
|
// parent_id holds the parent's translation_group, so link children by it.
|
|
801
843
|
// Key by (locale, group): a child's parent lives in the same locale, and an
|
|
802
844
|
// unfiltered set mixes locales whose translated siblings share a group —
|
|
@@ -814,7 +856,6 @@ function buildTree(flatTerms: TaxonomyTermRow[], counts: Map<string, number>): T
|
|
|
814
856
|
parentId: term.parent_id ?? undefined,
|
|
815
857
|
description: term.data ? JSON.parse(term.data).description : undefined,
|
|
816
858
|
children: [],
|
|
817
|
-
count: counts.get(term.translation_group ?? term.id) ?? 0,
|
|
818
859
|
locale: term.locale,
|
|
819
860
|
translationGroup: term.translation_group,
|
|
820
861
|
};
|
|
@@ -11,16 +11,17 @@
|
|
|
11
11
|
* visibility at query time rather than trusting a literal status value.
|
|
12
12
|
*
|
|
13
13
|
* The public render path is latency-sensitive on D1, so per-collection counts
|
|
14
|
-
* are combined
|
|
15
|
-
*
|
|
14
|
+
* are combined with UNION ALL — one query per taxonomy, never one per
|
|
15
|
+
* collection, split only where the backend caps compound-SELECT terms.
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
18
|
import type { Kysely } from "kysely";
|
|
19
19
|
import { sql } from "kysely";
|
|
20
20
|
|
|
21
|
-
import { buildStatusCondition } from "../database/dialect-helpers.js";
|
|
21
|
+
import { buildStatusCondition, compoundSelectLimit } from "../database/dialect-helpers.js";
|
|
22
22
|
import type { Database } from "../database/types.js";
|
|
23
23
|
import { validateIdentifier } from "../database/validate.js";
|
|
24
|
+
import { chunks } from "../utils/chunks.js";
|
|
24
25
|
import { isMissingTableError } from "../utils/db-errors.js";
|
|
25
26
|
|
|
26
27
|
interface CountRow {
|
|
@@ -37,6 +38,10 @@ interface CountRow {
|
|
|
37
38
|
* join on `taxonomies.id` — the anchor row (id == group) can be deleted while
|
|
38
39
|
* sibling translations survive, and a plain join on `translation_group` would
|
|
39
40
|
* multiply counts by the number of locales.
|
|
41
|
+
*
|
|
42
|
+
* CROSS JOIN with the join predicate in WHERE keeps stats-blind SQLite/D1 from
|
|
43
|
+
* reordering content_taxonomies out of the outer position; it touches ec_* only
|
|
44
|
+
* by primary key. Postgres treats this as an ordinary inner join and plans freely.
|
|
40
45
|
*/
|
|
41
46
|
function collectionBranch(
|
|
42
47
|
db: Kysely<Database>,
|
|
@@ -46,8 +51,9 @@ function collectionBranch(
|
|
|
46
51
|
return sql`
|
|
47
52
|
SELECT ct.taxonomy_id AS taxonomy_id, COUNT(*) AS count
|
|
48
53
|
FROM content_taxonomies AS ct
|
|
49
|
-
|
|
50
|
-
WHERE
|
|
54
|
+
CROSS JOIN ${sql.ref(`ec_${collection}`)} AS e
|
|
55
|
+
WHERE e.id = ct.entry_id
|
|
56
|
+
AND ct.collection = ${collection}
|
|
51
57
|
AND ct.taxonomy_id IN (SELECT translation_group FROM taxonomies WHERE name = ${taxonomyName})
|
|
52
58
|
AND ${buildStatusCondition(db, "published", "e")}
|
|
53
59
|
AND e.deleted_at IS NULL
|
|
@@ -71,6 +77,36 @@ async function runCounts(
|
|
|
71
77
|
return counts;
|
|
72
78
|
}
|
|
73
79
|
|
|
80
|
+
function addCounts(into: Map<string, number>, from: Map<string, number>): void {
|
|
81
|
+
for (const [group, count] of from) into.set(group, (into.get(group) ?? 0) + count);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Counts for one batch of collections, degrading to a query per collection
|
|
86
|
+
* when a declared collection has no ec_* table so the rest still contribute.
|
|
87
|
+
*/
|
|
88
|
+
async function runBatch(
|
|
89
|
+
db: Kysely<Database>,
|
|
90
|
+
taxonomyName: string,
|
|
91
|
+
collections: string[],
|
|
92
|
+
): Promise<Map<string, number>> {
|
|
93
|
+
try {
|
|
94
|
+
return await runCounts(db, taxonomyName, collections);
|
|
95
|
+
} catch (error) {
|
|
96
|
+
if (!isMissingTableError(error)) throw error;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
const counts = new Map<string, number>();
|
|
100
|
+
for (const collection of collections) {
|
|
101
|
+
try {
|
|
102
|
+
addCounts(counts, await runCounts(db, taxonomyName, [collection]));
|
|
103
|
+
} catch (error) {
|
|
104
|
+
if (!isMissingTableError(error)) throw error;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return counts;
|
|
108
|
+
}
|
|
109
|
+
|
|
74
110
|
/**
|
|
75
111
|
* Count publicly-visible term assignments for one taxonomy, keyed by the
|
|
76
112
|
* term's translation_group (what `content_taxonomies.taxonomy_id` stores).
|
|
@@ -82,9 +118,15 @@ async function runCounts(
|
|
|
82
118
|
* rather than a throw.
|
|
83
119
|
*
|
|
84
120
|
* One database round-trip for the whole taxonomy (UNION ALL across
|
|
85
|
-
* collections).
|
|
86
|
-
*
|
|
87
|
-
*
|
|
121
|
+
* collections). On a backend that caps compound-SELECT terms — D1 allows five
|
|
122
|
+
* — the branches are split into one statement per batch, since a taxonomy
|
|
123
|
+
* declaring more collections than that would otherwise take down every path
|
|
124
|
+
* that shows counts. Per-collection sums are commutative, so batching cannot
|
|
125
|
+
* change the total.
|
|
126
|
+
*
|
|
127
|
+
* Callers on the public render path should go through the request-cached
|
|
128
|
+
* wrapper in `taxonomies/index.ts` so a page rendering both the widget and a
|
|
129
|
+
* term detail shares one computation.
|
|
88
130
|
*/
|
|
89
131
|
export async function fetchVisibleTermCounts(
|
|
90
132
|
db: Kysely<Database>,
|
|
@@ -95,23 +137,11 @@ export async function fetchVisibleTermCounts(
|
|
|
95
137
|
for (const collection of unique) validateIdentifier(collection, "collection slug");
|
|
96
138
|
if (unique.length === 0) return new Map();
|
|
97
139
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
if (!isMissingTableError(error)) throw error;
|
|
102
|
-
}
|
|
140
|
+
const limit = compoundSelectLimit(db);
|
|
141
|
+
const batched = limit === null ? [unique] : chunks(unique, limit);
|
|
142
|
+
const batches = await Promise.all(batched.map((batch) => runBatch(db, taxonomyName, batch)));
|
|
103
143
|
|
|
104
|
-
// A declared collection has no ec_* table — retry per collection so the
|
|
105
|
-
// existing tables still contribute (still scheduled-aware + deleted_at).
|
|
106
144
|
const counts = new Map<string, number>();
|
|
107
|
-
for (const
|
|
108
|
-
try {
|
|
109
|
-
for (const [group, count] of await runCounts(db, taxonomyName, [collection])) {
|
|
110
|
-
counts.set(group, (counts.get(group) ?? 0) + count);
|
|
111
|
-
}
|
|
112
|
-
} catch (error) {
|
|
113
|
-
if (!isMissingTableError(error)) throw error;
|
|
114
|
-
}
|
|
115
|
-
}
|
|
145
|
+
for (const batch of batches) addCounts(counts, batch);
|
|
116
146
|
return counts;
|
|
117
147
|
}
|
package/src/utils/hash.ts
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
export const MAX_CONTENT_HASH_BYTES = 8 * 1024 * 1024;
|
|
2
|
+
|
|
3
|
+
function formatContentHash(hash: Uint8Array): string {
|
|
4
|
+
const hashHex = Array.from(hash, (byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
5
|
+
return `sha1:${hashHex}`;
|
|
6
|
+
}
|
|
7
|
+
|
|
1
8
|
/**
|
|
2
9
|
* SHA-256 hash of a string, truncated to 16 hex chars (64 bits).
|
|
3
10
|
* For cache invalidation / ETags — not for security.
|
|
@@ -25,12 +32,16 @@ export async function computeContentHash(content: Uint8Array | ArrayBuffer): Pro
|
|
|
25
32
|
let buf: ArrayBuffer;
|
|
26
33
|
if (content instanceof ArrayBuffer) {
|
|
27
34
|
buf = content;
|
|
35
|
+
} else if (
|
|
36
|
+
content.buffer instanceof ArrayBuffer &&
|
|
37
|
+
content.byteOffset === 0 &&
|
|
38
|
+
content.byteLength === content.buffer.byteLength
|
|
39
|
+
) {
|
|
40
|
+
buf = content.buffer;
|
|
28
41
|
} else {
|
|
29
42
|
buf = new ArrayBuffer(content.byteLength);
|
|
30
43
|
new Uint8Array(buf).set(content);
|
|
31
44
|
}
|
|
32
45
|
const hashBuffer = await crypto.subtle.digest("SHA-1", buf);
|
|
33
|
-
|
|
34
|
-
const hashHex = Array.from(hashArray, (b) => b.toString(16).padStart(2, "0")).join("");
|
|
35
|
-
return `sha1:${hashHex}`;
|
|
46
|
+
return formatContentHash(new Uint8Array(hashBuffer));
|
|
36
47
|
}
|