emdash 0.34.0 → 0.36.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/activation-K0kGBWuJ.mjs +382 -0
- package/dist/activation-K0kGBWuJ.mjs.map +1 -0
- package/dist/{adapters-34EN2eXO.d.mts → adapters-CzL3H752.d.mts} +10 -3
- package/dist/adapters-CzL3H752.d.mts.map +1 -0
- package/dist/{allowed-origins-DW7sYyqg.mjs → allowed-origins-maylGaHv.mjs} +2 -2
- package/dist/{allowed-origins-DW7sYyqg.mjs.map → allowed-origins-maylGaHv.mjs.map} +1 -1
- package/dist/api/route-utils.d.mts +3 -3
- package/dist/api/route-utils.mjs +22 -20
- package/dist/api/route-utils.mjs.map +1 -1
- package/dist/api/schemas/index.d.mts +2 -2
- package/dist/api/schemas/index.mjs +5 -5
- package/dist/api-B0w3uBiG.mjs +2269 -0
- package/dist/api-B0w3uBiG.mjs.map +1 -0
- package/dist/{api-tokens-CFXu8F_2.mjs → api-tokens-9YrrCoE6.mjs} +2 -2
- package/dist/{api-tokens-CFXu8F_2.mjs.map → api-tokens-9YrrCoE6.mjs.map} +1 -1
- package/dist/{apply-D5zfeD09.mjs → apply-B_VMpJ2P.mjs} +34 -35
- package/dist/{apply-D5zfeD09.mjs.map → apply-B_VMpJ2P.mjs.map} +1 -1
- package/dist/astro/index.d.mts +12 -12
- package/dist/astro/index.d.mts.map +1 -1
- package/dist/astro/index.mjs +92 -25
- package/dist/astro/index.mjs.map +1 -1
- package/dist/astro/middleware/auth.d.mts +10 -10
- package/dist/astro/middleware/auth.d.mts.map +1 -1
- package/dist/astro/middleware/auth.mjs +10 -7
- package/dist/astro/middleware/auth.mjs.map +1 -1
- package/dist/astro/middleware/media-usage-write-fence.mjs +2 -2
- package/dist/astro/middleware/redirect.mjs +4 -4
- package/dist/astro/middleware/request-context.mjs +3 -3
- package/dist/astro/middleware/setup.mjs +1 -1
- package/dist/astro/middleware.d.mts +11 -12
- package/dist/astro/middleware.d.mts.map +1 -1
- package/dist/astro/middleware.mjs +255 -1323
- package/dist/astro/middleware.mjs.map +1 -1
- package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +6 -6
- package/dist/astro/routes/api/admin/allowed-domains/index.mjs +6 -6
- package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +3 -3
- package/dist/astro/routes/api/admin/api-tokens/index.mjs +4 -4
- package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +4 -4
- package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +9 -9
- package/dist/astro/routes/api/admin/byline-fields/index.mjs +9 -9
- package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +9 -9
- package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +15 -15
- package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +15 -15
- package/dist/astro/routes/api/admin/bylines/index.mjs +15 -15
- package/dist/astro/routes/api/admin/comments/_id_/status.mjs +12 -12
- package/dist/astro/routes/api/admin/comments/_id_.mjs +4 -4
- package/dist/astro/routes/api/admin/comments/bulk.mjs +9 -9
- package/dist/astro/routes/api/admin/comments/counts.mjs +4 -4
- 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/activation.d.mts +9 -0
- package/dist/astro/routes/api/admin/media-usage/activation.d.mts.map +1 -0
- package/dist/astro/routes/api/admin/media-usage/activation.mjs +46 -0
- package/dist/astro/routes/api/admin/media-usage/activation.mjs.map +1 -0
- package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs +14 -13
- package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs +14 -13
- package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs.map +1 -1
- package/dist/astro/routes/api/admin/media-usage/progress.d.mts +9 -0
- package/dist/astro/routes/api/admin/media-usage/progress.d.mts.map +1 -0
- package/dist/astro/routes/api/admin/media-usage/progress.mjs +44 -0
- package/dist/astro/routes/api/admin/media-usage/progress.mjs.map +1 -0
- package/dist/astro/routes/api/admin/media-usage/repair.mjs +16 -11
- package/dist/astro/routes/api/admin/media-usage/repair.mjs.map +1 -1
- package/dist/astro/routes/api/admin/media-usage/work/index.mjs +14 -13
- package/dist/astro/routes/api/admin/media-usage/work/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/media-usage/work/retry.mjs +14 -13
- package/dist/astro/routes/api/admin/media-usage/work/retry.mjs.map +1 -1
- package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +3 -3
- package/dist/astro/routes/api/admin/oauth-clients/index.mjs +3 -3
- package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +54 -48
- package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +54 -48
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +52 -46
- 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 +52 -46
- package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +53 -47
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +53 -47
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/index.mjs +52 -46
- package/dist/astro/routes/api/admin/plugins/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +2 -2
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +52 -46
- 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 +53 -47
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +52 -46
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +53 -47
- 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 +54 -48
- package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/artifact.d.mts.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +172 -133
- package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/install.mjs +54 -48
- package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/updates.mjs +52 -46
- package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +52 -46
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +2 -2
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +52 -46
- 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 +1 -1
- package/dist/astro/routes/api/admin/users/_id_/index.mjs +7 -7
- 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.d.mts.map +1 -1
- package/dist/astro/routes/api/auth/dev-bypass.mjs +3 -7
- package/dist/astro/routes/api/auth/dev-bypass.mjs.map +1 -1
- package/dist/astro/routes/api/auth/invite/accept.mjs +1 -1
- package/dist/astro/routes/api/auth/invite/complete.mjs +11 -11
- package/dist/astro/routes/api/auth/invite/index.mjs +8 -8
- package/dist/astro/routes/api/auth/invite/register-options.mjs +10 -10
- package/dist/astro/routes/api/auth/logout.mjs +2 -2
- package/dist/astro/routes/api/auth/magic-link/send.mjs +10 -10
- package/dist/astro/routes/api/auth/magic-link/verify.mjs +2 -2
- package/dist/astro/routes/api/auth/me.d.mts.map +1 -1
- package/dist/astro/routes/api/auth/me.mjs +19 -9
- package/dist/astro/routes/api/auth/me.mjs.map +1 -1
- package/dist/astro/routes/api/auth/mode.mjs +2 -2
- package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +4 -4
- package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
- package/dist/astro/routes/api/auth/passkey/_id_.mjs +6 -6
- package/dist/astro/routes/api/auth/passkey/index.mjs +1 -1
- package/dist/astro/routes/api/auth/passkey/options.mjs +12 -12
- package/dist/astro/routes/api/auth/passkey/register/options.mjs +10 -10
- package/dist/astro/routes/api/auth/passkey/register/verify.mjs +11 -11
- package/dist/astro/routes/api/auth/passkey/verify.mjs +11 -11
- package/dist/astro/routes/api/auth/signup/complete.mjs +11 -11
- package/dist/astro/routes/api/auth/signup/request.mjs +10 -10
- package/dist/astro/routes/api/auth/signup/verify.mjs +1 -1
- package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +13 -13
- package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +12 -12
- package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +2 -2
- 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 +2 -2
- package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +11 -11
- package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +8 -8
- 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 +2 -2
- package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +8 -8
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +13 -13
- package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_.mjs +8 -8
- package/dist/astro/routes/api/content/_collection_/authors.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/index.mjs +8 -8
- 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 +16 -16
- package/dist/astro/routes/api/import/wordpress/analyze.mjs +2 -2
- package/dist/astro/routes/api/import/wordpress/execute.d.mts +11 -11
- package/dist/astro/routes/api/import/wordpress/execute.mjs +12 -12
- package/dist/astro/routes/api/import/wordpress/media.d.mts +10 -10
- package/dist/astro/routes/api/import/wordpress/media.mjs +11 -11
- package/dist/astro/routes/api/import/wordpress/prepare.mjs +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 +12 -10
- 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 +16 -16
- package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +11 -11
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +26 -26
- package/dist/astro/routes/api/manifest.mjs +4 -4
- package/dist/astro/routes/api/mcp.mjs +42 -42
- package/dist/astro/routes/api/media/_id_/confirm.mjs +11 -11
- package/dist/astro/routes/api/media/_id_/upload.mjs +6 -6
- package/dist/astro/routes/api/media/_id_/usage.mjs +18 -13
- 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 -13
- package/dist/astro/routes/api/media/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/media/file/_...key_.mjs +1 -1
- package/dist/astro/routes/api/media/folders/_id_.d.mts +10 -0
- package/dist/astro/routes/api/media/folders/_id_.d.mts.map +1 -0
- package/dist/astro/routes/api/media/folders/_id_.mjs +52 -0
- package/dist/astro/routes/api/media/folders/_id_.mjs.map +1 -0
- package/dist/astro/routes/api/media/folders/index.d.mts +9 -0
- package/dist/astro/routes/api/media/folders/index.d.mts.map +1 -0
- package/dist/astro/routes/api/media/folders/index.mjs +41 -0
- package/dist/astro/routes/api/media/folders/index.mjs.map +1 -0
- package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +2 -2
- package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +2 -2
- package/dist/astro/routes/api/media/providers/index.mjs +2 -2
- package/dist/astro/routes/api/media/upload-url.mjs +9 -9
- package/dist/astro/routes/api/media.d.mts.map +1 -1
- package/dist/astro/routes/api/media.mjs +28 -19
- package/dist/astro/routes/api/media.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +8 -8
- package/dist/astro/routes/api/menus/_name_/items.mjs +8 -8
- package/dist/astro/routes/api/menus/_name_/reorder.mjs +8 -8
- package/dist/astro/routes/api/menus/_name_/translations.mjs +8 -8
- package/dist/astro/routes/api/menus/_name_.mjs +8 -8
- package/dist/astro/routes/api/menus/index.mjs +8 -8
- package/dist/astro/routes/api/oauth/authorize.mjs +6 -6
- package/dist/astro/routes/api/oauth/device/authorize.mjs +5 -5
- package/dist/astro/routes/api/oauth/device/code.mjs +8 -8
- package/dist/astro/routes/api/oauth/device/token.mjs +7 -7
- package/dist/astro/routes/api/oauth/register.mjs +2 -2
- package/dist/astro/routes/api/oauth/token/refresh.mjs +5 -5
- package/dist/astro/routes/api/oauth/token/revoke.mjs +5 -5
- package/dist/astro/routes/api/oauth/token.mjs +5 -5
- package/dist/astro/routes/api/openapi.json.mjs +153 -6
- package/dist/astro/routes/api/openapi.json.mjs.map +1 -1
- package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +4 -4
- package/dist/astro/routes/api/redirects/404s/index.mjs +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 +11 -9
- 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 +2 -2
- package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +3 -3
- package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +52 -46
- 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 +52 -46
- 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 +52 -46
- package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +52 -46
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/index.mjs +52 -46
- package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/reorder.mjs +52 -46
- package/dist/astro/routes/api/schema/collections/reorder.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 +52 -46
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/schema/orphans/index.mjs +52 -46
- package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
- package/dist/astro/routes/api/search/enable.mjs +10 -10
- package/dist/astro/routes/api/search/index.mjs +9 -9
- package/dist/astro/routes/api/search/rebuild.mjs +10 -10
- package/dist/astro/routes/api/search/stats.mjs +5 -5
- package/dist/astro/routes/api/search/suggest.mjs +9 -9
- package/dist/astro/routes/api/sections/_slug_.mjs +9 -9
- package/dist/astro/routes/api/sections/index.mjs +9 -9
- package/dist/astro/routes/api/settings/backups/archives/_name_.mjs +6 -6
- package/dist/astro/routes/api/settings/backups/archives/index.mjs +5 -5
- package/dist/astro/routes/api/settings/backups/export.mjs +6 -6
- package/dist/astro/routes/api/settings/backups/index.mjs +7 -7
- package/dist/astro/routes/api/settings/email.mjs +4 -4
- package/dist/astro/routes/api/settings.mjs +13 -13
- package/dist/astro/routes/api/setup/admin-verify.mjs +12 -12
- package/dist/astro/routes/api/setup/admin.mjs +11 -11
- package/dist/astro/routes/api/setup/dev-bypass.d.mts.map +1 -1
- package/dist/astro/routes/api/setup/dev-bypass.mjs +35 -31
- package/dist/astro/routes/api/setup/dev-bypass.mjs.map +1 -1
- package/dist/astro/routes/api/setup/dev-reset.mjs +2 -2
- package/dist/astro/routes/api/setup/index.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 +3 -3
- package/dist/astro/routes/api/snapshot.mjs +7 -7
- package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs +13 -13
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +13 -13
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +13 -13
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +13 -13
- package/dist/astro/routes/api/taxonomies/_name_/translations.mjs +13 -13
- package/dist/astro/routes/api/taxonomies/_name_.mjs +13 -13
- package/dist/astro/routes/api/taxonomies/index.mjs +13 -13
- package/dist/astro/routes/api/themes/preview.mjs +5 -5
- package/dist/astro/routes/api/typegen.mjs +4 -4
- package/dist/astro/routes/api/well-known/auth.mjs +2 -2
- package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +2 -2
- package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +2 -2
- package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +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 +5 -5
- 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 +6 -6
- package/dist/astro/routes/sitemap-_collection_.xml.mjs +9 -9
- package/dist/astro/routes/sitemap.xml.mjs +7 -7
- package/dist/astro/types.d.mts +19 -14
- 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-1iFJzPaZ.mjs → authorize-ByYs-Uxs.mjs} +2 -2
- package/dist/{authorize-1iFJzPaZ.mjs.map → authorize-ByYs-Uxs.mjs.map} +1 -1
- package/dist/{backup-LHjIAVNP.mjs → backup-ChyHfIoX.mjs} +5 -5
- package/dist/{backup-LHjIAVNP.mjs.map → backup-ChyHfIoX.mjs.map} +1 -1
- package/dist/{bundle-CBEXrBnb.mjs → bundle-DZFhFurR.mjs} +7 -7
- package/dist/{bundle-CBEXrBnb.mjs.map → bundle-DZFhFurR.mjs.map} +1 -1
- package/dist/{byline-pEcoDps8.mjs → byline-Cpnwrje1.mjs} +6 -6
- package/dist/{byline-pEcoDps8.mjs.map → byline-Cpnwrje1.mjs.map} +1 -1
- package/dist/{byline-fields-C5S8wygO.mjs → byline-fields-CAyA_Umd.mjs} +2 -2
- package/dist/{byline-fields-C5S8wygO.mjs.map → byline-fields-CAyA_Umd.mjs.map} +1 -1
- package/dist/{byline-registry-DDun8sxh.mjs → byline-registry-Bpu9-MVs.mjs} +2 -2
- package/dist/{byline-registry-DDun8sxh.mjs.map → byline-registry-Bpu9-MVs.mjs.map} +1 -1
- package/dist/{bylines-BWemdX2k.mjs → bylines-BSo9B9RX.mjs} +7 -7
- package/dist/{bylines-BWemdX2k.mjs.map → bylines-BSo9B9RX.mjs.map} +1 -1
- package/dist/{bylines-DJfSfXCL.mjs → bylines-CHjvehVX.mjs} +3 -3
- package/dist/{bylines-DJfSfXCL.mjs.map → bylines-CHjvehVX.mjs.map} +1 -1
- package/dist/{cache-CBJaDy_E.mjs → cache-5VirJ2Cn.mjs} +4 -4
- package/dist/{cache-CBJaDy_E.mjs.map → cache-5VirJ2Cn.mjs.map} +1 -1
- package/dist/capture-triggers-CNW1q3HK.mjs +362 -0
- package/dist/capture-triggers-CNW1q3HK.mjs.map +1 -0
- package/dist/{challenge-store-CZyFVaad.mjs → challenge-store-D5pSY2S1.mjs} +1 -1
- package/dist/{challenge-store-CZyFVaad.mjs.map → challenge-store-D5pSY2S1.mjs.map} +1 -1
- package/dist/{chunks-DfPax1I0.mjs → chunks-bNiX6_DR.mjs} +2 -2
- package/dist/{chunks-DfPax1I0.mjs.map → chunks-bNiX6_DR.mjs.map} +1 -1
- package/dist/cli/index.mjs +568 -84
- 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 +54 -2
- package/dist/client/index.mjs.map +1 -1
- package/dist/{collection-deletion-C8BugSGz.mjs → collection-deletion-m_oi2c0N.mjs} +13 -356
- package/dist/collection-deletion-m_oi2c0N.mjs.map +1 -0
- package/dist/{comment-Dxlep6cE.mjs → comment-DhvLEdhQ.mjs} +1 -1
- package/dist/{comment-Dxlep6cE.mjs.map → comment-DhvLEdhQ.mjs.map} +1 -1
- package/dist/{comment-reaction-D6qfHKBc.mjs → comment-reaction-CRuItEjt.mjs} +2 -2
- package/dist/{comment-reaction-D6qfHKBc.mjs.map → comment-reaction-CRuItEjt.mjs.map} +1 -1
- package/dist/{comments-CTOuhTSX.mjs → comments-CLj4bi8I.mjs} +2 -2
- package/dist/{comments-CTOuhTSX.mjs.map → comments-CLj4bi8I.mjs.map} +1 -1
- package/dist/{components-CQy3lh9x.mjs → components-v4U4DT2y.mjs} +1 -1
- package/dist/{components-CQy3lh9x.mjs.map → components-v4U4DT2y.mjs.map} +1 -1
- package/dist/config-DrfghTPe.d.mts +34 -0
- package/dist/config-DrfghTPe.d.mts.map +1 -0
- package/dist/{content-BNfwh7xX.mjs → content-CP-SeXNa.mjs} +5 -4
- package/dist/content-CP-SeXNa.mjs.map +1 -0
- package/dist/{content-list-query-DhQ84eVV.d.mts → content-list-query-BhejKVqb.d.mts} +1 -1
- package/dist/{content-list-query-DhQ84eVV.d.mts.map → content-list-query-BhejKVqb.d.mts.map} +1 -1
- package/dist/{content-refresh-DNERP4-f.mjs → content-refresh-DLOfIhYc.mjs} +1094 -93
- package/dist/content-refresh-DLOfIhYc.mjs.map +1 -0
- package/dist/{media-usage-De3qvwjc.mjs → content-repair-BCxzy0r4.mjs} +5 -196
- package/dist/content-repair-BCxzy0r4.mjs.map +1 -0
- package/dist/{context-DRgOvSnW.mjs → context-BR5hRWiK.mjs} +13 -13
- package/dist/{context-DRgOvSnW.mjs.map → context-BR5hRWiK.mjs.map} +1 -1
- package/dist/{cron-Y9aLtgrA.mjs → cron-CWfWrWKG.mjs} +1 -1
- package/dist/{cron-Y9aLtgrA.mjs.map → cron-CWfWrWKG.mjs.map} +1 -1
- package/dist/{dashboard-CB8J89rJ.mjs → dashboard-CkIV2rnQ.mjs} +5 -5
- package/dist/{dashboard-CB8J89rJ.mjs.map → dashboard-CkIV2rnQ.mjs.map} +1 -1
- package/dist/db/index.d.mts +4 -4
- package/dist/db/index.mjs +32 -9
- 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/sqlite.mjs +3 -3
- package/dist/db/sqlite.mjs.map +1 -1
- package/dist/{default-DdDl3fxv.mjs → default-YMEfcQUx.mjs} +1 -1
- package/dist/{default-DdDl3fxv.mjs.map → default-YMEfcQUx.mjs.map} +1 -1
- package/dist/{deferred-tasks-BMsa9F64.d.mts → deferred-tasks-DfqxH5Xf.d.mts} +1 -1
- package/dist/{deferred-tasks-BMsa9F64.d.mts.map → deferred-tasks-DfqxH5Xf.d.mts.map} +1 -1
- package/dist/{device-flow-CaioYGK3.mjs → device-flow-CojjSBwb.mjs} +5 -5
- package/dist/{device-flow-CaioYGK3.mjs.map → device-flow-CojjSBwb.mjs.map} +1 -1
- package/dist/direct-executor-BWeWiRYB.mjs +85 -0
- package/dist/direct-executor-BWeWiRYB.mjs.map +1 -0
- package/dist/{dist-D_6CKR8z.mjs → dist-89xCrGqi.mjs} +1 -1
- package/dist/{dist-D_6CKR8z.mjs.map → dist-89xCrGqi.mjs.map} +1 -1
- package/dist/{email-console-BHNjIwiB.mjs → email-console-CEJgR_LB.mjs} +1 -1
- package/dist/{email-console-BHNjIwiB.mjs.map → email-console-CEJgR_LB.mjs.map} +1 -1
- package/dist/{enrich-_ySMEvEE.mjs → enrich-BX0IDp4z.mjs} +3 -3
- package/dist/{enrich-_ySMEvEE.mjs.map → enrich-BX0IDp4z.mjs.map} +1 -1
- package/dist/{error-DupyJZE2.mjs → error-D9w94fjV.mjs} +2 -2
- package/dist/{error-DupyJZE2.mjs.map → error-D9w94fjV.mjs.map} +1 -1
- package/dist/{errors-CLUPm7aD.mjs → errors-n2j49uNf.mjs} +22 -2
- package/dist/errors-n2j49uNf.mjs.map +1 -0
- package/dist/{escape-C_aLKP3H.mjs → escape-DN4Qmjsl.mjs} +1 -1
- package/dist/{escape-C_aLKP3H.mjs.map → escape-DN4Qmjsl.mjs.map} +1 -1
- package/dist/{field-defs-cache-hg6QkjV9.mjs → field-defs-cache-Bh4q6oar.mjs} +5 -5
- package/dist/{field-defs-cache-hg6QkjV9.mjs.map → field-defs-cache-Bh4q6oar.mjs.map} +1 -1
- package/dist/focal-point-BeWFo6Xx.mjs +23 -0
- package/dist/focal-point-BeWFo6Xx.mjs.map +1 -0
- package/dist/{fts-manager-CZ-5dVwJ.mjs → fts-manager-BhOdW0bi.mjs} +3 -3
- package/dist/{fts-manager-CZ-5dVwJ.mjs.map → fts-manager-BhOdW0bi.mjs.map} +1 -1
- package/dist/{hash-Cg0TXJPV.mjs → hash-CTcngWvj.mjs} +1 -1
- package/dist/{hash-Cg0TXJPV.mjs.map → hash-CTcngWvj.mjs.map} +1 -1
- package/dist/{hreflang-D3Uehfv2.d.mts → hreflang-7pTHsLZJ.d.mts} +2 -2
- package/dist/{hreflang-D3Uehfv2.d.mts.map → hreflang-7pTHsLZJ.d.mts.map} +1 -1
- package/dist/{hreflang-DNswoYsi.mjs → hreflang-Huc6O5wa.mjs} +7 -7
- package/dist/{hreflang-DNswoYsi.mjs.map → hreflang-Huc6O5wa.mjs.map} +1 -1
- package/dist/identity-DXmb4aVp.mjs +35 -0
- package/dist/identity-DXmb4aVp.mjs.map +1 -0
- package/dist/{import-B41u8Rot.mjs → import-C4_O3KXU.mjs} +5 -5
- package/dist/{import-B41u8Rot.mjs.map → import-C4_O3KXU.mjs.map} +1 -1
- package/dist/{index-Cof4-Fab.d.mts → index-6bRee8zb.d.mts} +3 -3
- package/dist/{index-Cof4-Fab.d.mts.map → index-6bRee8zb.d.mts.map} +1 -1
- package/dist/{index-C3Y-rsyN.d.mts → index-DWbJrsAg.d.mts} +138 -83
- package/dist/index-DWbJrsAg.d.mts.map +1 -0
- package/dist/index.d.mts +21 -20
- package/dist/index.mjs +78 -72
- package/dist/{init-lock-6b309ZrF.mjs → init-lock-DJkX6Hto.mjs} +1 -1
- package/dist/{init-lock-6b309ZrF.mjs.map → init-lock-DJkX6Hto.mjs.map} +1 -1
- package/dist/{load-DmvJrtxS.mjs → load-Bo7fZAbg.mjs} +2 -2
- package/dist/{load-DmvJrtxS.mjs.map → load-Bo7fZAbg.mjs.map} +1 -1
- package/dist/{loader-DLBqRiGP.mjs → loader-ZsjE4paL.mjs} +2 -2
- package/dist/{loader-DLBqRiGP.mjs.map → loader-ZsjE4paL.mjs.map} +1 -1
- package/dist/manifest-builder-QXuqvVMP.mjs +189 -0
- package/dist/manifest-builder-QXuqvVMP.mjs.map +1 -0
- package/dist/{manifest-schema-BXbUAHod.mjs → manifest-schema-CUYPfCEH.mjs} +1 -1
- package/dist/{manifest-schema-BXbUAHod.mjs.map → manifest-schema-CUYPfCEH.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 +13 -3
- package/dist/media/index.mjs.map +1 -1
- package/dist/media/local-runtime.d.mts +14 -12
- package/dist/media/local-runtime.d.mts.map +1 -1
- package/dist/media/local-runtime.mjs +11 -5
- package/dist/media/local-runtime.mjs.map +1 -1
- package/dist/{media-BWWWb8kg.mjs → media-BjwNuLEu.mjs} +100 -6
- package/dist/media-BjwNuLEu.mjs.map +1 -0
- package/dist/{media-CzhAn2--.mjs → media-D6SeAfBl.mjs} +41 -12
- package/dist/media-D6SeAfBl.mjs.map +1 -0
- package/dist/{media-allowlist-BD6HhgXA.mjs → media-allowlist-D35v7bmL.mjs} +3 -2
- package/dist/media-allowlist-D35v7bmL.mjs.map +1 -0
- package/dist/media-folders-D-0CmRZj.mjs +210 -0
- package/dist/media-folders-D-0CmRZj.mjs.map +1 -0
- package/dist/{media-upload-9yas9zGH.mjs → media-upload-C7bLXGcI.mjs} +9 -9
- package/dist/{media-upload-9yas9zGH.mjs.map → media-upload-C7bLXGcI.mjs.map} +1 -1
- package/dist/{media-url-BvoX88FA.mjs → media-url-DH7giMx_.mjs} +1 -1
- package/dist/{media-url-BvoX88FA.mjs.map → media-url-DH7giMx_.mjs.map} +1 -1
- package/dist/media-usage-BTRJvS6V.mjs +1833 -0
- package/dist/media-usage-BTRJvS6V.mjs.map +1 -0
- package/dist/media-usage-activation-Dx0kPV6b.mjs +78 -0
- package/dist/media-usage-activation-Dx0kPV6b.mjs.map +1 -0
- package/dist/{media-usage-work-DrCbqBcl.mjs → media-usage-work-C-fhM30c.mjs} +221 -59
- package/dist/media-usage-work-C-fhM30c.mjs.map +1 -0
- package/dist/{media-usage-work-B9Bksh_b.mjs → media-usage-work-DWb2XPMI.mjs} +4 -4
- package/dist/{media-usage-work-B9Bksh_b.mjs.map → media-usage-work-DWb2XPMI.mjs.map} +1 -1
- package/dist/{media-usage-write-fence-aHEgN1zB.mjs → media-usage-write-fence-BwoJVRDC.mjs} +2 -2
- package/dist/{media-usage-write-fence-aHEgN1zB.mjs.map → media-usage-write-fence-BwoJVRDC.mjs.map} +1 -1
- package/dist/{menus-fxvEDYE6.mjs → menus-CD7EFLwz.mjs} +3 -3
- package/dist/{menus-fxvEDYE6.mjs.map → menus-CD7EFLwz.mjs.map} +1 -1
- package/dist/{menus-CC-yn1F9.mjs → menus-CNg0QlDt.mjs} +42 -26
- package/dist/menus-CNg0QlDt.mjs.map +1 -0
- 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/{mime-DfIVjNkr.mjs → mime-CUIG6x84.mjs} +1 -1
- package/dist/mime-CUIG6x84.mjs.map +1 -0
- package/dist/{mode-Bpe-tNNy.mjs → mode-DaUM_MB2.mjs} +1 -1
- package/dist/{mode-Bpe-tNNy.mjs.map → mode-DaUM_MB2.mjs.map} +1 -1
- package/dist/node-sqlite-compat-Udb4Y-rs.mjs +46 -0
- package/dist/node-sqlite-compat-Udb4Y-rs.mjs.map +1 -0
- package/dist/{normalize-Bc-s_r-a.mjs → normalize-CSxdKBVa.mjs} +22 -1
- package/dist/normalize-CSxdKBVa.mjs.map +1 -0
- package/dist/{oauth-authorization-BXO1MKej.mjs → oauth-authorization-Dpsb-fMJ.mjs} +5 -5
- package/dist/{oauth-authorization-BXO1MKej.mjs.map → oauth-authorization-Dpsb-fMJ.mjs.map} +1 -1
- package/dist/{oauth-clients-C_DNqtRu.mjs → oauth-clients-Bxnoe_67.mjs} +1 -1
- package/dist/{oauth-clients-C_DNqtRu.mjs.map → oauth-clients-Bxnoe_67.mjs.map} +1 -1
- package/dist/{oauth-state-store-DwAxMtk4.mjs → oauth-state-store-0C4s0K6w.mjs} +1 -1
- package/dist/{oauth-state-store-DwAxMtk4.mjs.map → oauth-state-store-0C4s0K6w.mjs.map} +1 -1
- package/dist/{oauth-user-lookup-BxfZizdk.mjs → oauth-user-lookup-wlGYSeqX.mjs} +1 -1
- package/dist/{oauth-user-lookup-BxfZizdk.mjs.map → oauth-user-lookup-wlGYSeqX.mjs.map} +1 -1
- package/dist/object-cache/memory.d.mts +1 -1
- package/dist/{options-CBXIHUoT.mjs → options-BHPeIbBd.mjs} +1 -1
- package/dist/{options-CBXIHUoT.mjs.map → options-BHPeIbBd.mjs.map} +1 -1
- package/dist/{options-DRe1pIBL.d.mts → options-BhZIeFY1.d.mts} +3 -3
- package/dist/{options-DRe1pIBL.d.mts.map → options-BhZIeFY1.d.mts.map} +1 -1
- package/dist/page/index.d.mts +2 -2
- package/dist/{parse-DFbuc-Fh.mjs → parse-BRJg1kz8.mjs} +2 -2
- package/dist/{parse-DFbuc-Fh.mjs.map → parse-BRJg1kz8.mjs.map} +1 -1
- package/dist/{passkey-config-_2GOwwK8.mjs → passkey-config-B3P0nHRR.mjs} +1 -1
- package/dist/{passkey-config-_2GOwwK8.mjs.map → passkey-config-B3P0nHRR.mjs.map} +1 -1
- package/dist/{patterns-CiyXeDgr.mjs → patterns-D9iDO3j8.mjs} +1 -1
- package/dist/{patterns-CiyXeDgr.mjs.map → patterns-D9iDO3j8.mjs.map} +1 -1
- package/dist/{placeholder-CzW7Lshs.d.mts → placeholder-BR4ZhVJl.d.mts} +7 -1
- package/dist/placeholder-BR4ZhVJl.d.mts.map +1 -0
- 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/plugins/adapt-sandbox-entry.mjs +2 -2
- package/dist/policy-BVRganJQ.mjs +45 -0
- package/dist/policy-BVRganJQ.mjs.map +1 -0
- package/dist/{portable-text-DhKbDAGr.mjs → portable-text-C8Tvp4_g.mjs} +1 -1
- package/dist/{portable-text-DhKbDAGr.mjs.map → portable-text-C8Tvp4_g.mjs.map} +1 -1
- package/dist/{preview-PW-nOnq4.mjs → preview-dn2dUyM0.mjs} +2 -2
- package/dist/{preview-PW-nOnq4.mjs.map → preview-dn2dUyM0.mjs.map} +1 -1
- package/dist/protocol-CuBEsqgE.d.mts +52 -0
- package/dist/protocol-CuBEsqgE.d.mts.map +1 -0
- package/dist/{public-url-CWoFhQT8.mjs → public-url-DRz_AinV.mjs} +1 -1
- package/dist/{public-url-CWoFhQT8.mjs.map → public-url-DRz_AinV.mjs.map} +1 -1
- package/dist/{query-BgjfiLUQ.mjs → query-D18vTdha.mjs} +14 -14
- package/dist/{query-BgjfiLUQ.mjs.map → query-D18vTdha.mjs.map} +1 -1
- package/dist/{query-vgZNwIhh.mjs → query-tZDEdtCN.mjs} +4 -4
- package/dist/{query-vgZNwIhh.mjs.map → query-tZDEdtCN.mjs.map} +1 -1
- package/dist/{rate-limit-L5anykgo.mjs → rate-limit-on7KPo-v.mjs} +2 -2
- package/dist/{rate-limit-L5anykgo.mjs.map → rate-limit-on7KPo-v.mjs.map} +1 -1
- package/dist/{redirect-COsS6SWJ.mjs → redirect-CZkbozu9.mjs} +2 -2
- package/dist/{redirect-COsS6SWJ.mjs.map → redirect-CZkbozu9.mjs.map} +1 -1
- package/dist/{redirect-KBNE3UEs.mjs → redirect-DrbEmU9a.mjs} +1 -1
- package/dist/{redirect-KBNE3UEs.mjs.map → redirect-DrbEmU9a.mjs.map} +1 -1
- package/dist/{redirects-CufRQt0Q.mjs → redirects-BahWiu8Z.mjs} +5 -5
- package/dist/{redirects-CufRQt0Q.mjs.map → redirects-BahWiu8Z.mjs.map} +1 -1
- package/dist/{redirects-cV9g7V-0.mjs → redirects-CRIM55KH.mjs} +6 -6
- package/dist/{redirects-cV9g7V-0.mjs.map → redirects-CRIM55KH.mjs.map} +1 -1
- package/dist/{api-DdAsirBe.mjs → registry-BiO5WwPq.mjs} +483 -2462
- package/dist/registry-BiO5WwPq.mjs.map +1 -0
- package/dist/{registry-C581V4TP.mjs → registry-Cx-jEJOS.mjs} +9 -123
- package/dist/registry-Cx-jEJOS.mjs.map +1 -0
- package/dist/{relation-DtmAQH7s.mjs → relation-A6wLF_DS.mjs} +2 -2
- package/dist/{relation-DtmAQH7s.mjs.map → relation-A6wLF_DS.mjs.map} +1 -1
- package/dist/{relations-BBApI4e2.mjs → relations-BTPM2saV.mjs} +2 -2
- package/dist/{relations-BBApI4e2.mjs.map → relations-BTPM2saV.mjs.map} +1 -1
- package/dist/{relations-DItI3MN9.d.mts → relations-C7B46bcU.d.mts} +189 -30
- package/dist/relations-C7B46bcU.d.mts.map +1 -0
- package/dist/{relations-DICSyfsh.mjs → relations-Cj5hZ6Zg.mjs} +4 -4
- package/dist/{relations-DICSyfsh.mjs.map → relations-Cj5hZ6Zg.mjs.map} +1 -1
- package/dist/{request-cache-BSUptuJR.mjs → request-cache-DH9zdCOD.mjs} +1 -1
- package/dist/{request-cache-BSUptuJR.mjs.map → request-cache-DH9zdCOD.mjs.map} +1 -1
- package/dist/request-context.d.mts +1 -1
- package/dist/{request-meta-DgZJh3zG.mjs → request-meta-DRp5ENd_.mjs} +2 -2
- package/dist/{request-meta-DgZJh3zG.mjs.map → request-meta-DRp5ENd_.mjs.map} +1 -1
- package/dist/{resolve-DOhVEvty.mjs → resolve-DxUpTMmE.mjs} +1 -1
- package/dist/{resolve-DOhVEvty.mjs.map → resolve-DxUpTMmE.mjs.map} +1 -1
- package/dist/{runner-BiDvq5dv.mjs → runner-77GOZCnH.mjs} +443 -289
- package/dist/runner-77GOZCnH.mjs.map +1 -0
- package/dist/{runner-CgQbELYC.d.mts → runner-zgqA_CqP.d.mts} +16 -3
- package/dist/runner-zgqA_CqP.d.mts.map +1 -0
- package/dist/runtime.d.mts +11 -11
- package/dist/runtime.mjs +1 -1
- package/dist/{schema-BFyTg38T.mjs → schema-BY-oVntF.mjs} +3 -3
- package/dist/{schema-BFyTg38T.mjs.map → schema-BY-oVntF.mjs.map} +1 -1
- package/dist/{schema-CeQSNwB3.mjs → schema-Cw9kVK0I.mjs} +35 -5
- package/dist/{schema-CeQSNwB3.mjs.map → schema-Cw9kVK0I.mjs.map} +1 -1
- package/dist/{scopes-BVeuhGBE.mjs → scopes-vMR1uIbt.mjs} +3 -3
- package/dist/{scopes-BVeuhGBE.mjs.map → scopes-vMR1uIbt.mjs.map} +1 -1
- package/dist/{search-BpuPKZb0.mjs → search-CfT3KxO5.mjs} +4 -4
- package/dist/{search-BpuPKZb0.mjs.map → search-CfT3KxO5.mjs.map} +1 -1
- package/dist/{secrets-dtYs2hDo.mjs → secrets-BH2Qow1-.mjs} +3 -3
- package/dist/{secrets-dtYs2hDo.mjs.map → secrets-BH2Qow1-.mjs.map} +1 -1
- package/dist/{sections-COctk6hf.mjs → sections-DTfjyf1z.mjs} +2 -2
- package/dist/{sections-COctk6hf.mjs.map → sections-DTfjyf1z.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 -14
- package/dist/seo/index.mjs.map +1 -1
- package/dist/{seo-AFpVvTqr.mjs → seo-BSiTIXzd.mjs} +1 -1
- package/dist/{seo-AFpVvTqr.mjs.map → seo-BSiTIXzd.mjs.map} +1 -1
- package/dist/{seo-CvDxfvFb.mjs → seo-Cm-dtvgk.mjs} +2 -2
- package/dist/{seo-CvDxfvFb.mjs.map → seo-Cm-dtvgk.mjs.map} +1 -1
- package/dist/{service-xMiMSTsR.mjs → service-DYsDHEKe.mjs} +3 -3
- package/dist/{service-xMiMSTsR.mjs.map → service-DYsDHEKe.mjs.map} +1 -1
- package/dist/{session-user-BzVemLkw.mjs → session-user-CNAfvsdw.mjs} +1 -1
- package/dist/{session-user-BzVemLkw.mjs.map → session-user-CNAfvsdw.mjs.map} +1 -1
- package/dist/{settings-B372MV0p.mjs → settings-BgN-0DT-.mjs} +6 -6
- package/dist/{settings-B372MV0p.mjs.map → settings-BgN-0DT-.mjs.map} +1 -1
- package/dist/{settings-BE9aqn_9.mjs → settings-DjtkUo__.mjs} +3 -3
- package/dist/{settings-BE9aqn_9.mjs.map → settings-DjtkUo__.mjs.map} +1 -1
- package/dist/{setup-complete-DF7TAfD5.mjs → setup-complete-CcpXaPU7.mjs} +2 -2
- package/dist/{setup-complete-DF7TAfD5.mjs.map → setup-complete-CcpXaPU7.mjs.map} +1 -1
- package/dist/{setup-nonce-Do-U_cg9.mjs → setup-nonce-Reyw30jg.mjs} +1 -1
- package/dist/{setup-nonce-Do-U_cg9.mjs.map → setup-nonce-Reyw30jg.mjs.map} +1 -1
- package/dist/{single-flight-cache-B0eLKS6K.mjs → single-flight-cache-BPuGPdcN.mjs} +2 -2
- package/dist/{single-flight-cache-B0eLKS6K.mjs.map → single-flight-cache-BPuGPdcN.mjs.map} +1 -1
- package/dist/{site-url-Bowsi9T-.mjs → site-url-Cs_V9n3V.mjs} +3 -3
- package/dist/{site-url-Bowsi9T-.mjs.map → site-url-Cs_V9n3V.mjs.map} +1 -1
- package/dist/{snapshot-B5h6aPMh.mjs → snapshot-DSB8P7Lm.mjs} +1 -1
- package/dist/{snapshot-B5h6aPMh.mjs.map → snapshot-DSB8P7Lm.mjs.map} +1 -1
- package/dist/{ssrf-Cpvg_n3A.mjs → ssrf-DqebVE34.mjs} +21 -5
- package/dist/{ssrf-Cpvg_n3A.mjs.map → ssrf-DqebVE34.mjs.map} +1 -1
- package/dist/{state-DYwPue40.mjs → state-BJfU9Uzw.mjs} +12 -4
- package/dist/state-BJfU9Uzw.mjs.map +1 -0
- package/dist/{status-CWVYpbD8.mjs → status-DDu8HIQl.mjs} +1 -1
- package/dist/{status-CWVYpbD8.mjs.map → status-DDu8HIQl.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-D0o26Azo.mjs +27 -0
- package/dist/target-D0o26Azo.mjs.map +1 -0
- package/dist/{taxonomies-Dk3MAklL.mjs → taxonomies-CPGxo-bn.mjs} +5 -5
- package/dist/{taxonomies-Dk3MAklL.mjs.map → taxonomies-CPGxo-bn.mjs.map} +1 -1
- package/dist/{taxonomies-B0o9ExNV.mjs → taxonomies-kmyudNGP.mjs} +7 -7
- package/dist/{taxonomies-B0o9ExNV.mjs.map → taxonomies-kmyudNGP.mjs.map} +1 -1
- package/dist/{taxonomy-CPeM8d2o.mjs → taxonomy-8X09dLN5.mjs} +4 -4
- package/dist/{taxonomy-CPeM8d2o.mjs.map → taxonomy-8X09dLN5.mjs.map} +1 -1
- package/dist/{tokens-C39klX8R.mjs → tokens-gTS-IVUp.mjs} +1 -1
- package/dist/{tokens-C39klX8R.mjs.map → tokens-gTS-IVUp.mjs.map} +1 -1
- package/dist/{transaction-NQj4VJ7Z.mjs → transaction-0KOpOyMu.mjs} +2 -1
- package/dist/{transaction-NQj4VJ7Z.mjs.map → transaction-0KOpOyMu.mjs.map} +1 -1
- package/dist/{transport-B_rfeU-a.d.mts → transport-_6R1ub7t.d.mts} +1 -1
- package/dist/{transport-B_rfeU-a.d.mts.map → transport-_6R1ub7t.d.mts.map} +1 -1
- package/dist/{transport--CfOflrp.mjs → transport-fX59xaJz.mjs} +4 -3
- package/dist/{transport--CfOflrp.mjs.map → transport-fX59xaJz.mjs.map} +1 -1
- package/dist/{trusted-proxy-CEVekpby.mjs → trusted-proxy-fe6nEgR4.mjs} +1 -1
- package/dist/{trusted-proxy-CEVekpby.mjs.map → trusted-proxy-fe6nEgR4.mjs.map} +1 -1
- package/dist/types-75KIqzL9.mjs.map +1 -1
- package/dist/{types-BW1syrlw.mjs → types-BXUmsINL.mjs} +1 -1
- package/dist/{types-BW1syrlw.mjs.map → types-BXUmsINL.mjs.map} +1 -1
- package/dist/{types-CPx2lIGo.d.mts → types-Blb-MRC3.d.mts} +1 -1
- package/dist/{types-CPx2lIGo.d.mts.map → types-Blb-MRC3.d.mts.map} +1 -1
- package/dist/{types-C3_AbkDP.d.mts → types-Br-ERaxh.d.mts} +2 -1
- package/dist/types-Br-ERaxh.d.mts.map +1 -0
- package/dist/{types-BPuloofb.d.mts → types-BzBd3PeX.d.mts} +1 -1
- package/dist/{types-BPuloofb.d.mts.map → types-BzBd3PeX.d.mts.map} +1 -1
- package/dist/{types-DefV3OiO.d.mts → types-CLqvnd05.d.mts} +1 -1
- package/dist/{types-DefV3OiO.d.mts.map → types-CLqvnd05.d.mts.map} +1 -1
- package/dist/{types-X0MThr7x.d.mts → types-D5VVLr7J.d.mts} +1 -1
- package/dist/{types-X0MThr7x.d.mts.map → types-D5VVLr7J.d.mts.map} +1 -1
- package/dist/{types-CAGdePf3.d.mts → types-DHxzBjbD.d.mts} +10 -1
- package/dist/types-DHxzBjbD.d.mts.map +1 -0
- package/dist/{types-D4_1Ga4L.d.mts → types-DJQxln7q.d.mts} +3 -3
- package/dist/{types-D4_1Ga4L.d.mts.map → types-DJQxln7q.d.mts.map} +1 -1
- package/dist/{types-CtzytVXn.mjs → types-DM3vioBY.mjs} +1 -1
- package/dist/{types-CtzytVXn.mjs.map → types-DM3vioBY.mjs.map} +1 -1
- package/dist/{types-CFUfyt1s.d.mts → types-D_DWe7k9.d.mts} +1 -1
- package/dist/{types-CFUfyt1s.d.mts.map → types-D_DWe7k9.d.mts.map} +1 -1
- package/dist/{types-Cs-TFLNf.d.mts → types-Vg6f5i3s.d.mts} +3 -3
- package/dist/{types-Cs-TFLNf.d.mts.map → types-Vg6f5i3s.d.mts.map} +1 -1
- package/dist/{upload-attempts-hlne3iA1.mjs → upload-attempts-CNyGSepg.mjs} +1 -1
- package/dist/{upload-attempts-hlne3iA1.mjs.map → upload-attempts-CNyGSepg.mjs.map} +1 -1
- package/dist/{url-pattern-BHS0V5Ng.mjs → url-pattern-K-KdXcSe.mjs} +1 -1
- package/dist/{url-pattern-BHS0V5Ng.mjs.map → url-pattern-K-KdXcSe.mjs.map} +1 -1
- package/dist/{user-sHgJ62SP.mjs → user-CtYY0tp2.mjs} +2 -2
- package/dist/{user-sHgJ62SP.mjs.map → user-CtYY0tp2.mjs.map} +1 -1
- package/dist/{utils-D4vD_Y98.mjs → utils-HztC73hq.mjs} +1 -1
- package/dist/{utils-D4vD_Y98.mjs.map → utils-HztC73hq.mjs.map} +1 -1
- package/dist/{validate-BkqIG_Uj.mjs → validate-Dd-IUjnZ.mjs} +2 -2
- package/dist/{validate-BkqIG_Uj.mjs.map → validate-Dd-IUjnZ.mjs.map} +1 -1
- package/dist/{validate-DeGtBN84.d.mts → validate-DlqdOZXB.d.mts} +5 -5
- package/dist/{validate-DeGtBN84.d.mts.map → validate-DlqdOZXB.d.mts.map} +1 -1
- package/dist/{validation-CiJb_X5o.mjs → validation-D83n7Npi.mjs} +10 -8
- package/dist/{validation-CiJb_X5o.mjs.map → validation-D83n7Npi.mjs.map} +1 -1
- package/dist/version-ri-sCyAp.mjs +7 -0
- package/dist/{version-x0NjTScG.mjs.map → version-ri-sCyAp.mjs.map} +1 -1
- package/dist/{widgets-Cwzvww0W.mjs → widgets-CpmZd9Q-.mjs} +4 -4
- package/dist/{widgets-Cwzvww0W.mjs.map → widgets-CpmZd9Q-.mjs.map} +1 -1
- package/dist/{wxr-taxonomies-CmC0ZsDr.d.mts → wxr-taxonomies-BFd0y72_.d.mts} +1 -1
- package/dist/{wxr-taxonomies-CmC0ZsDr.d.mts.map → wxr-taxonomies-BFd0y72_.d.mts.map} +1 -1
- package/dist/{wxr-taxonomies-QZjWxjyk.mjs → wxr-taxonomies-Df4vxWcU.mjs} +4 -4
- package/dist/{wxr-taxonomies-QZjWxjyk.mjs.map → wxr-taxonomies-Df4vxWcU.mjs.map} +1 -1
- package/dist/{zod-generator-D11MhxG4.mjs → zod-generator-DylzusHh.mjs} +24 -18
- package/dist/zod-generator-DylzusHh.mjs.map +1 -0
- package/package.json +32 -8
- package/src/api/errors.ts +20 -0
- package/src/api/handlers/index.ts +17 -0
- package/src/api/handlers/media-allowlist.ts +1 -0
- package/src/api/handlers/media-folders.ts +130 -0
- package/src/api/handlers/media-usage-activation.ts +102 -0
- package/src/api/handlers/media-usage.ts +108 -0
- package/src/api/handlers/media.ts +62 -2
- package/src/api/handlers/registry.ts +134 -316
- package/src/api/openapi/document.ts +192 -2
- package/src/api/schemas/media-usage.ts +77 -0
- package/src/api/schemas/media.ts +69 -0
- package/src/astro/integration/index.ts +46 -14
- package/src/astro/integration/routes.ts +18 -0
- package/src/astro/integration/runtime.ts +3 -0
- package/src/astro/integration/vite-config.ts +2 -7
- package/src/astro/middleware/auth.ts +4 -0
- package/src/astro/middleware/scoped-db.ts +21 -0
- package/src/astro/middleware.ts +67 -17
- package/src/astro/routes/api/admin/media-usage/activation.ts +42 -0
- package/src/astro/routes/api/admin/media-usage/progress.ts +37 -0
- package/src/astro/routes/api/admin/plugins/registry/artifact.ts +246 -96
- package/src/astro/routes/api/auth/dev-bypass.ts +0 -4
- package/src/astro/routes/api/auth/me.ts +14 -2
- package/src/astro/routes/api/media/[id].ts +3 -0
- package/src/astro/routes/api/media/folders/[id].ts +55 -0
- package/src/astro/routes/api/media/folders/index.ts +37 -0
- package/src/astro/routes/api/media.ts +12 -2
- package/src/astro/routes/api/setup/dev-bypass.ts +14 -7
- package/src/astro/routes/api/setup/index.ts +5 -13
- package/src/astro/types.ts +11 -1
- package/src/cli/commands/migrate.ts +593 -0
- package/src/cli/index.ts +2 -23
- package/src/client/index.ts +140 -2
- package/src/client/transport.ts +6 -2
- package/src/components/EmDashImage.astro +154 -50
- package/src/components/Gallery.astro +7 -0
- package/src/components/InlinePortableTextEditor.tsx +130 -1
- package/src/components/LiveSearch.astro +23 -0
- package/src/components/inline-code-block.tsx +180 -49
- package/src/content/converters/gallery.ts +2 -0
- package/src/content/converters/types.ts +2 -0
- package/src/database/connection.ts +2 -31
- package/src/database/index.ts +9 -3
- package/src/database/json-recordset.ts +16 -0
- package/src/database/migrations/019_i18n.ts +1 -1
- package/src/database/migrations/071_restore_content_bylines_table.ts +43 -0
- package/src/database/migrations/072_media_folders.ts +72 -0
- package/src/database/migrations/073_media_focal_point.ts +57 -0
- package/src/database/migrations/policy.ts +70 -0
- package/src/database/migrations/runner.ts +57 -5
- package/src/database/repositories/content.ts +5 -4
- package/src/database/repositories/media-folders.ts +115 -0
- package/src/database/repositories/media-usage-work.ts +395 -111
- package/src/database/repositories/media-usage.ts +1038 -10
- package/src/database/repositories/media.ts +97 -29
- package/src/database/transaction.ts +1 -0
- package/src/database/types.ts +13 -0
- package/src/db/adapters.ts +52 -4
- package/src/db/index.ts +3 -1
- package/src/db/libsql-migrations.ts +72 -0
- package/src/db/node-sqlite-compat.ts +78 -0
- package/src/db/postgres-migrations.ts +59 -0
- package/src/db/sqlite-migrations.ts +37 -0
- package/src/db/sqlite.ts +3 -3
- package/src/emdash-runtime.ts +154 -120
- package/src/fields/image.ts +7 -1
- package/src/fields/types.ts +6 -2
- package/src/i18n/normalize.ts +31 -0
- package/src/index.ts +12 -1
- package/src/media/focal-point.ts +37 -0
- package/src/media/local-runtime.ts +8 -0
- package/src/media/mime.ts +1 -0
- package/src/media/normalize.ts +10 -0
- package/src/media/types.ts +10 -0
- package/src/media/usage/activation.ts +162 -35
- package/src/media/usage/capture-triggers.ts +19 -3
- package/src/media/usage/collection-deletion-processor.ts +7 -3
- package/src/media/usage/collection-deletion.ts +10 -0
- package/src/media/usage/content-refresh.ts +258 -39
- package/src/media/usage/content-snapshots.ts +128 -31
- package/src/media/usage/extractor.ts +32 -13
- package/src/media/usage/maintenance-engine.ts +166 -0
- package/src/media/usage/reconciliation-processor.ts +106 -29
- package/src/media/usage/reconciliation.ts +90 -7
- package/src/media/usage/work-processor.ts +342 -101
- 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/plugins/index.ts +1 -0
- package/src/plugins/save-rejection.ts +20 -0
- package/src/plugins/scheduler/node.ts +1 -13
- package/src/plugins/scheduler/types.ts +0 -2
- package/src/plugins/state.ts +13 -3
- package/src/registry/artifact-fetch.ts +530 -0
- package/src/registry/config.ts +24 -6
- package/src/registry/types.ts +12 -15
- package/src/schema/types.ts +1 -0
- package/src/schema/zod-generator.ts +12 -4
- package/src/security/ssrf.ts +21 -2
- package/src/seed/apply.ts +4 -4
- package/src/ui.ts +2 -0
- package/src/virtual-modules.d.ts +8 -0
- package/dist/adapters-34EN2eXO.d.mts.map +0 -1
- package/dist/api-DdAsirBe.mjs.map +0 -1
- package/dist/collection-deletion-C8BugSGz.mjs.map +0 -1
- package/dist/content-BNfwh7xX.mjs.map +0 -1
- package/dist/content-refresh-DNERP4-f.mjs.map +0 -1
- package/dist/errors-CLUPm7aD.mjs.map +0 -1
- package/dist/index-C3Y-rsyN.d.mts.map +0 -1
- package/dist/media-BWWWb8kg.mjs.map +0 -1
- package/dist/media-CzhAn2--.mjs.map +0 -1
- package/dist/media-allowlist-BD6HhgXA.mjs.map +0 -1
- package/dist/media-usage-De3qvwjc.mjs.map +0 -1
- package/dist/media-usage-work-DrCbqBcl.mjs.map +0 -1
- package/dist/menus-CC-yn1F9.mjs.map +0 -1
- package/dist/mime-DfIVjNkr.mjs.map +0 -1
- package/dist/normalize-Bc-s_r-a.mjs.map +0 -1
- package/dist/placeholder-CzW7Lshs.d.mts.map +0 -1
- package/dist/registry-C581V4TP.mjs.map +0 -1
- package/dist/relations-DItI3MN9.d.mts.map +0 -1
- package/dist/runner-BiDvq5dv.mjs.map +0 -1
- package/dist/runner-CgQbELYC.d.mts.map +0 -1
- package/dist/state-DYwPue40.mjs.map +0 -1
- package/dist/types-C3_AbkDP.d.mts.map +0 -1
- package/dist/types-CAGdePf3.d.mts.map +0 -1
- package/dist/version-x0NjTScG.mjs +0 -7
- package/dist/zod-generator-D11MhxG4.mjs.map +0 -1
- /package/dist/{api-tokens-CyTsLszZ.mjs → api-tokens-B5NHLNUN.mjs} +0 -0
- /package/dist/{ssrf-DpXgKsna.mjs → ssrf-BPKzkm6O.mjs} +0 -0
- /package/dist/{types-CP1CflWf.mjs → types-D6OcIp2P.mjs} +0 -0
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { i as getExactMigrationStatus, s as runMigrations } from "./runner-77GOZCnH.mjs";
|
|
2
|
+
import { r as getI18nConfig, s as setI18nConfig } from "./config-C3EBstHi.mjs";
|
|
3
|
+
import { r as getCoreMigrationIdentity } from "./identity-DXmb4aVp.mjs";
|
|
4
|
+
import { Kysely } from "kysely";
|
|
5
|
+
|
|
6
|
+
//#region src/migrations/direct-executor.ts
|
|
7
|
+
function createReport(target, status, executed) {
|
|
8
|
+
return {
|
|
9
|
+
target,
|
|
10
|
+
knownApplied: [...status.knownApplied],
|
|
11
|
+
pending: [...status.pending],
|
|
12
|
+
unknownApplied: [...status.unknownApplied],
|
|
13
|
+
executed: [...executed]
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
async function verifyRequest(request) {
|
|
17
|
+
const identity = await getCoreMigrationIdentity();
|
|
18
|
+
if (request.artifact.emdashVersion !== identity.emdashVersion || request.artifact.migrationSetFingerprint !== identity.fingerprint) throw new Error("Migration artifact does not match the loaded EmDash version and migration registry.");
|
|
19
|
+
}
|
|
20
|
+
async function executeRequest(db, target, request) {
|
|
21
|
+
const initialStatus = await getExactMigrationStatus(db);
|
|
22
|
+
if (request.action === "check") return createReport(target, initialStatus, []);
|
|
23
|
+
if (initialStatus.unknownApplied.length > 0) throw new Error(`Cannot apply migrations with unknown applied migrations: ${initialStatus.unknownApplied.join(", ")}`);
|
|
24
|
+
if (initialStatus.pending.length === 0) return createReport(target, initialStatus, []);
|
|
25
|
+
const result = await runMigrations(db);
|
|
26
|
+
return createReport(target, await getExactMigrationStatus(db), result.applied);
|
|
27
|
+
}
|
|
28
|
+
function createDirectMigrationExecutor(options) {
|
|
29
|
+
const target = Object.freeze({ ...options.target });
|
|
30
|
+
let used = false;
|
|
31
|
+
let disposed = false;
|
|
32
|
+
let activeDb;
|
|
33
|
+
let closePromise;
|
|
34
|
+
const closeActiveDb = () => {
|
|
35
|
+
if (!activeDb) return Promise.resolve();
|
|
36
|
+
closePromise ??= activeDb.destroy();
|
|
37
|
+
return closePromise;
|
|
38
|
+
};
|
|
39
|
+
return {
|
|
40
|
+
target,
|
|
41
|
+
async execute(request) {
|
|
42
|
+
if (disposed) throw new Error("Migration executor has been disposed.");
|
|
43
|
+
if (used) throw new Error("Migration executors are single-use.");
|
|
44
|
+
used = true;
|
|
45
|
+
if (request.action !== "check" && request.action !== "apply") throw new Error("Unsupported migration action.");
|
|
46
|
+
await verifyRequest(request);
|
|
47
|
+
const db = new Kysely({ dialect: await options.createDialect() });
|
|
48
|
+
activeDb = db;
|
|
49
|
+
if (disposed) {
|
|
50
|
+
await closeActiveDb();
|
|
51
|
+
throw new Error("Migration executor has been disposed.");
|
|
52
|
+
}
|
|
53
|
+
const previousI18n = getI18nConfig();
|
|
54
|
+
let executionFailed = false;
|
|
55
|
+
let executionError;
|
|
56
|
+
let report;
|
|
57
|
+
setI18nConfig(request.i18n);
|
|
58
|
+
try {
|
|
59
|
+
report = await executeRequest(db, target, request);
|
|
60
|
+
} catch (error) {
|
|
61
|
+
executionFailed = true;
|
|
62
|
+
executionError = error;
|
|
63
|
+
} finally {
|
|
64
|
+
setI18nConfig(previousI18n);
|
|
65
|
+
try {
|
|
66
|
+
await closeActiveDb();
|
|
67
|
+
} catch {
|
|
68
|
+
console.error("[migrations] Database close failed.");
|
|
69
|
+
closePromise = Promise.resolve();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
if (executionFailed) throw executionError;
|
|
73
|
+
if (!report) throw new Error("Migration execution did not produce a report.");
|
|
74
|
+
return report;
|
|
75
|
+
},
|
|
76
|
+
dispose() {
|
|
77
|
+
disposed = true;
|
|
78
|
+
return closeActiveDb();
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
//#endregion
|
|
84
|
+
export { createDirectMigrationExecutor as t };
|
|
85
|
+
//# sourceMappingURL=direct-executor-BWeWiRYB.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"direct-executor-BWeWiRYB.mjs","names":[],"sources":["../src/migrations/direct-executor.ts"],"sourcesContent":["import { type Dialect, Kysely } from \"kysely\";\n\nimport {\n\tgetExactMigrationStatus,\n\trunMigrations,\n\ttype ExactMigrationStatus,\n} from \"../database/migrations/runner.js\";\nimport type { Database } from \"../database/types.js\";\nimport { getI18nConfig, setI18nConfig } from \"../i18n/config.js\";\nimport { getCoreMigrationIdentity } from \"./identity.js\";\nimport type {\n\tMigrationExecutor,\n\tMigrationReport,\n\tMigrationRequest,\n\tMigrationTarget,\n} from \"./protocol.js\";\n\nexport interface DirectMigrationExecutorOptions {\n\ttarget: MigrationTarget;\n\tcreateDialect: () => Dialect | Promise<Dialect>;\n}\n\nfunction createReport(\n\ttarget: MigrationTarget,\n\tstatus: ExactMigrationStatus,\n\texecuted: readonly string[],\n): MigrationReport {\n\treturn {\n\t\ttarget,\n\t\tknownApplied: [...status.knownApplied],\n\t\tpending: [...status.pending],\n\t\tunknownApplied: [...status.unknownApplied],\n\t\texecuted: [...executed],\n\t};\n}\n\nasync function verifyRequest(request: MigrationRequest): Promise<void> {\n\tconst identity = await getCoreMigrationIdentity();\n\tif (\n\t\trequest.artifact.emdashVersion !== identity.emdashVersion ||\n\t\trequest.artifact.migrationSetFingerprint !== identity.fingerprint\n\t) {\n\t\tthrow new Error(\n\t\t\t\"Migration artifact does not match the loaded EmDash version and migration registry.\",\n\t\t);\n\t}\n}\n\nasync function executeRequest(\n\tdb: Kysely<Database>,\n\ttarget: MigrationTarget,\n\trequest: MigrationRequest,\n): Promise<MigrationReport> {\n\tconst initialStatus = await getExactMigrationStatus(db);\n\tif (request.action === \"check\") {\n\t\treturn createReport(target, initialStatus, []);\n\t}\n\n\tif (initialStatus.unknownApplied.length > 0) {\n\t\tthrow new Error(\n\t\t\t`Cannot apply migrations with unknown applied migrations: ${initialStatus.unknownApplied.join(\", \")}`,\n\t\t);\n\t}\n\tif (initialStatus.pending.length === 0) {\n\t\treturn createReport(target, initialStatus, []);\n\t}\n\n\tconst result = await runMigrations(db);\n\tconst finalStatus = await getExactMigrationStatus(db);\n\treturn createReport(target, finalStatus, result.applied);\n}\n\nexport function createDirectMigrationExecutor(\n\toptions: DirectMigrationExecutorOptions,\n): MigrationExecutor {\n\tconst target = Object.freeze({ ...options.target });\n\tlet used = false;\n\tlet disposed = false;\n\tlet activeDb: Kysely<Database> | undefined;\n\tlet closePromise: Promise<void> | undefined;\n\n\tconst closeActiveDb = (): Promise<void> => {\n\t\tif (!activeDb) return Promise.resolve();\n\t\tclosePromise ??= activeDb.destroy();\n\t\treturn closePromise;\n\t};\n\n\treturn {\n\t\ttarget,\n\t\tasync execute(request) {\n\t\t\tif (disposed) {\n\t\t\t\tthrow new Error(\"Migration executor has been disposed.\");\n\t\t\t}\n\t\t\tif (used) {\n\t\t\t\tthrow new Error(\"Migration executors are single-use.\");\n\t\t\t}\n\t\t\tused = true;\n\n\t\t\tif (request.action !== \"check\" && request.action !== \"apply\") {\n\t\t\t\tthrow new Error(\"Unsupported migration action.\");\n\t\t\t}\n\t\t\tawait verifyRequest(request);\n\n\t\t\tconst dialect = await options.createDialect();\n\t\t\tconst db = new Kysely<Database>({ dialect });\n\t\t\tactiveDb = db;\n\t\t\tif (disposed) {\n\t\t\t\tawait closeActiveDb();\n\t\t\t\tthrow new Error(\"Migration executor has been disposed.\");\n\t\t\t}\n\t\t\tconst previousI18n = getI18nConfig();\n\t\t\tlet executionFailed = false;\n\t\t\tlet executionError: unknown;\n\t\t\tlet report: MigrationReport | undefined;\n\t\t\tsetI18nConfig(request.i18n);\n\n\t\t\ttry {\n\t\t\t\treport = await executeRequest(db, target, request);\n\t\t\t} catch (error) {\n\t\t\t\texecutionFailed = true;\n\t\t\t\texecutionError = error;\n\t\t\t} finally {\n\t\t\t\tsetI18nConfig(previousI18n);\n\t\t\t\ttry {\n\t\t\t\t\tawait closeActiveDb();\n\t\t\t\t} catch {\n\t\t\t\t\tconsole.error(\"[migrations] Database close failed.\");\n\t\t\t\t\tclosePromise = Promise.resolve();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (executionFailed) throw executionError;\n\t\t\tif (!report) throw new Error(\"Migration execution did not produce a report.\");\n\t\t\treturn report;\n\t\t},\n\t\tdispose() {\n\t\t\tdisposed = true;\n\t\t\treturn closeActiveDb();\n\t\t},\n\t};\n}\n"],"mappings":";;;;;;AAsBA,SAAS,aACR,QACA,QACA,UACkB;AAClB,QAAO;EACN;EACA,cAAc,CAAC,GAAG,OAAO,aAAa;EACtC,SAAS,CAAC,GAAG,OAAO,QAAQ;EAC5B,gBAAgB,CAAC,GAAG,OAAO,eAAe;EAC1C,UAAU,CAAC,GAAG,SAAS;EACvB;;AAGF,eAAe,cAAc,SAA0C;CACtE,MAAM,WAAW,MAAM,0BAA0B;AACjD,KACC,QAAQ,SAAS,kBAAkB,SAAS,iBAC5C,QAAQ,SAAS,4BAA4B,SAAS,YAEtD,OAAM,IAAI,MACT,sFACA;;AAIH,eAAe,eACd,IACA,QACA,SAC2B;CAC3B,MAAM,gBAAgB,MAAM,wBAAwB,GAAG;AACvD,KAAI,QAAQ,WAAW,QACtB,QAAO,aAAa,QAAQ,eAAe,EAAE,CAAC;AAG/C,KAAI,cAAc,eAAe,SAAS,EACzC,OAAM,IAAI,MACT,4DAA4D,cAAc,eAAe,KAAK,KAAK,GACnG;AAEF,KAAI,cAAc,QAAQ,WAAW,EACpC,QAAO,aAAa,QAAQ,eAAe,EAAE,CAAC;CAG/C,MAAM,SAAS,MAAM,cAAc,GAAG;AAEtC,QAAO,aAAa,QADA,MAAM,wBAAwB,GAAG,EACZ,OAAO,QAAQ;;AAGzD,SAAgB,8BACf,SACoB;CACpB,MAAM,SAAS,OAAO,OAAO,EAAE,GAAG,QAAQ,QAAQ,CAAC;CACnD,IAAI,OAAO;CACX,IAAI,WAAW;CACf,IAAI;CACJ,IAAI;CAEJ,MAAM,sBAAqC;AAC1C,MAAI,CAAC,SAAU,QAAO,QAAQ,SAAS;AACvC,mBAAiB,SAAS,SAAS;AACnC,SAAO;;AAGR,QAAO;EACN;EACA,MAAM,QAAQ,SAAS;AACtB,OAAI,SACH,OAAM,IAAI,MAAM,wCAAwC;AAEzD,OAAI,KACH,OAAM,IAAI,MAAM,sCAAsC;AAEvD,UAAO;AAEP,OAAI,QAAQ,WAAW,WAAW,QAAQ,WAAW,QACpD,OAAM,IAAI,MAAM,gCAAgC;AAEjD,SAAM,cAAc,QAAQ;GAG5B,MAAM,KAAK,IAAI,OAAiB,EAAE,SADlB,MAAM,QAAQ,eAAe,EACF,CAAC;AAC5C,cAAW;AACX,OAAI,UAAU;AACb,UAAM,eAAe;AACrB,UAAM,IAAI,MAAM,wCAAwC;;GAEzD,MAAM,eAAe,eAAe;GACpC,IAAI,kBAAkB;GACtB,IAAI;GACJ,IAAI;AACJ,iBAAc,QAAQ,KAAK;AAE3B,OAAI;AACH,aAAS,MAAM,eAAe,IAAI,QAAQ,QAAQ;YAC1C,OAAO;AACf,sBAAkB;AAClB,qBAAiB;aACR;AACT,kBAAc,aAAa;AAC3B,QAAI;AACH,WAAM,eAAe;YACd;AACP,aAAQ,MAAM,sCAAsC;AACpD,oBAAe,QAAQ,SAAS;;;AAIlC,OAAI,gBAAiB,OAAM;AAC3B,OAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,gDAAgD;AAC7E,UAAO;;EAER,UAAU;AACT,cAAW;AACX,UAAO,eAAe;;EAEvB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dist-D_6CKR8z.mjs","names":[],"sources":["../../../node_modules/.pnpm/image-size@2.0.2_patch_hash=77c12533e3a635c4066c55da8952f4912e8210416539dc1249550fa639271595/node_modules/image-size/dist/index.mjs"],"sourcesContent":["// lib/types/utils.ts\nvar decoder = new TextDecoder();\nvar toUTF8String = (input, start = 0, end = input.length) => decoder.decode(input.slice(start, end));\nvar toHexString = (input, start = 0, end = input.length) => input.slice(start, end).reduce((memo, i) => memo + `0${i.toString(16)}`.slice(-2), \"\");\nvar getView = (input, offset) => new DataView(input.buffer, input.byteOffset + offset);\nvar readInt16LE = (input, offset = 0) => getView(input, offset).getInt16(0, true);\nvar readUInt16BE = (input, offset = 0) => getView(input, offset).getUint16(0, false);\nvar readUInt16LE = (input, offset = 0) => getView(input, offset).getUint16(0, true);\nvar readUInt24LE = (input, offset = 0) => {\n const view = getView(input, offset);\n return view.getUint16(0, true) + (view.getUint8(2) << 16);\n};\nvar readInt32LE = (input, offset = 0) => getView(input, offset).getInt32(0, true);\nvar readUInt32BE = (input, offset = 0) => getView(input, offset).getUint32(0, false);\nvar readUInt32LE = (input, offset = 0) => getView(input, offset).getUint32(0, true);\nvar readUInt64 = (input, offset, isBigEndian) => getView(input, offset).getBigUint64(0, !isBigEndian);\nvar methods = {\n readUInt16BE,\n readUInt16LE,\n readUInt32BE,\n readUInt32LE\n};\nfunction readUInt(input, bits, offset = 0, isBigEndian = false) {\n const endian = isBigEndian ? \"BE\" : \"LE\";\n const methodName = `readUInt${bits}${endian}`;\n return methods[methodName](input, offset);\n}\nfunction readBox(input, offset) {\n if (input.length - offset < 4) return;\n const boxSize = readUInt32BE(input, offset);\n if (input.length - offset < boxSize) return;\n return {\n name: toUTF8String(input, 4 + offset, 8 + offset),\n offset,\n size: boxSize\n };\n}\nfunction findBox(input, boxName, currentOffset) {\n while (currentOffset < input.length) {\n const box = readBox(input, currentOffset);\n if (!box) break;\n if (box.name === boxName) return box;\n currentOffset += box.size > 0 ? box.size : 8;\n }\n}\n\n// lib/types/bmp.ts\nvar BMP = {\n validate: (input) => toUTF8String(input, 0, 2) === \"BM\",\n calculate: (input) => ({\n height: Math.abs(readInt32LE(input, 22)),\n width: readUInt32LE(input, 18)\n })\n};\n\n// lib/types/ico.ts\nvar TYPE_ICON = 1;\nvar SIZE_HEADER = 2 + 2 + 2;\nvar SIZE_IMAGE_ENTRY = 1 + 1 + 1 + 1 + 2 + 2 + 4 + 4;\nfunction getSizeFromOffset(input, offset) {\n const value = input[offset];\n return value === 0 ? 256 : value;\n}\nfunction getImageSize(input, imageIndex) {\n const offset = SIZE_HEADER + imageIndex * SIZE_IMAGE_ENTRY;\n return {\n height: getSizeFromOffset(input, offset + 1),\n width: getSizeFromOffset(input, offset)\n };\n}\nvar ICO = {\n validate(input) {\n const reserved = readUInt16LE(input, 0);\n const imageCount = readUInt16LE(input, 4);\n if (reserved !== 0 || imageCount === 0) return false;\n const imageType = readUInt16LE(input, 2);\n return imageType === TYPE_ICON;\n },\n calculate(input) {\n const nbImages = readUInt16LE(input, 4);\n const imageSize2 = getImageSize(input, 0);\n if (nbImages === 1) return imageSize2;\n const images = [];\n for (let imageIndex = 0; imageIndex < nbImages; imageIndex += 1) {\n images.push(getImageSize(input, imageIndex));\n }\n return {\n width: imageSize2.width,\n height: imageSize2.height,\n images\n };\n }\n};\n\n// lib/types/cur.ts\nvar TYPE_CURSOR = 2;\nvar CUR = {\n validate(input) {\n const reserved = readUInt16LE(input, 0);\n const imageCount = readUInt16LE(input, 4);\n if (reserved !== 0 || imageCount === 0) return false;\n const imageType = readUInt16LE(input, 2);\n return imageType === TYPE_CURSOR;\n },\n calculate: (input) => ICO.calculate(input)\n};\n\n// lib/types/dds.ts\nvar DDS = {\n validate: (input) => readUInt32LE(input, 0) === 542327876,\n calculate: (input) => ({\n height: readUInt32LE(input, 12),\n width: readUInt32LE(input, 16)\n })\n};\n\n// lib/types/gif.ts\nvar gifRegexp = /^GIF8[79]a/;\nvar GIF = {\n validate: (input) => gifRegexp.test(toUTF8String(input, 0, 6)),\n calculate: (input) => ({\n height: readUInt16LE(input, 8),\n width: readUInt16LE(input, 6)\n })\n};\n\n// lib/types/heif.ts\nvar brandMap = {\n avif: \"avif\",\n mif1: \"heif\",\n msf1: \"heif\",\n // heif-sequence\n heic: \"heic\",\n heix: \"heic\",\n hevc: \"heic\",\n // heic-sequence\n hevx: \"heic\"\n // heic-sequence\n};\nvar HEIF = {\n validate(input) {\n const boxType = toUTF8String(input, 4, 8);\n if (boxType !== \"ftyp\") return false;\n const ftypBox = findBox(input, \"ftyp\", 0);\n if (!ftypBox) return false;\n const brand = toUTF8String(input, ftypBox.offset + 8, ftypBox.offset + 12);\n return brand in brandMap;\n },\n calculate(input) {\n const metaBox = findBox(input, \"meta\", 0);\n const iprpBox = metaBox && findBox(input, \"iprp\", metaBox.offset + 12);\n const ipcoBox = iprpBox && findBox(input, \"ipco\", iprpBox.offset + 8);\n if (!ipcoBox) {\n throw new TypeError(\"Invalid HEIF, no ipco box found\");\n }\n const type = toUTF8String(input, 8, 12);\n const images = [];\n let currentOffset = ipcoBox.offset + 8;\n while (currentOffset < ipcoBox.offset + ipcoBox.size) {\n const ispeBox = findBox(input, \"ispe\", currentOffset);\n if (!ispeBox) break;\n const rawWidth = readUInt32BE(input, ispeBox.offset + 12);\n const rawHeight = readUInt32BE(input, ispeBox.offset + 16);\n const clapBox = findBox(input, \"clap\", currentOffset);\n let width = rawWidth;\n let height = rawHeight;\n if (clapBox && clapBox.offset < ipcoBox.offset + ipcoBox.size) {\n const cropRight = readUInt32BE(input, clapBox.offset + 12);\n width = rawWidth - cropRight;\n }\n images.push({ height, width });\n currentOffset = ispeBox.offset + (ispeBox.size > 0 ? ispeBox.size : 8);\n }\n if (images.length === 0) {\n throw new TypeError(\"Invalid HEIF, no sizes found\");\n }\n return {\n width: images[0].width,\n height: images[0].height,\n type,\n ...images.length > 1 ? { images } : {}\n };\n }\n};\n\n// lib/types/icns.ts\nvar SIZE_HEADER2 = 4 + 4;\nvar FILE_LENGTH_OFFSET = 4;\nvar ENTRY_LENGTH_OFFSET = 4;\nvar ICON_TYPE_SIZE = {\n ICON: 32,\n \"ICN#\": 32,\n // m => 16 x 16\n \"icm#\": 16,\n icm4: 16,\n icm8: 16,\n // s => 16 x 16\n \"ics#\": 16,\n ics4: 16,\n ics8: 16,\n is32: 16,\n s8mk: 16,\n icp4: 16,\n // l => 32 x 32\n icl4: 32,\n icl8: 32,\n il32: 32,\n l8mk: 32,\n icp5: 32,\n ic11: 32,\n // h => 48 x 48\n ich4: 48,\n ich8: 48,\n ih32: 48,\n h8mk: 48,\n // . => 64 x 64\n icp6: 64,\n ic12: 32,\n // t => 128 x 128\n it32: 128,\n t8mk: 128,\n ic07: 128,\n // . => 256 x 256\n ic08: 256,\n ic13: 256,\n // . => 512 x 512\n ic09: 512,\n ic14: 512,\n // . => 1024 x 1024\n ic10: 1024\n};\nfunction readImageHeader(input, imageOffset) {\n const imageLengthOffset = imageOffset + ENTRY_LENGTH_OFFSET;\n return [\n toUTF8String(input, imageOffset, imageLengthOffset),\n readUInt32BE(input, imageLengthOffset)\n ];\n}\nfunction getImageSize2(type) {\n const size = ICON_TYPE_SIZE[type];\n return { width: size, height: size, type };\n}\nvar ICNS = {\n validate: (input) => toUTF8String(input, 0, 4) === \"icns\",\n calculate(input) {\n const inputLength = input.length;\n const fileLength = readUInt32BE(input, FILE_LENGTH_OFFSET);\n let imageOffset = SIZE_HEADER2;\n const images = [];\n while (imageOffset < fileLength && imageOffset < inputLength) {\n const imageHeader = readImageHeader(input, imageOffset);\n const imageSize2 = getImageSize2(imageHeader[0]);\n images.push(imageSize2);\n imageOffset += imageHeader[1] > 0 ? imageHeader[1] : 8;\n }\n if (images.length === 0) {\n throw new TypeError(\"Invalid ICNS, no sizes found\");\n }\n return {\n width: images[0].width,\n height: images[0].height,\n ...images.length > 1 ? { images } : {}\n };\n }\n};\n\n// lib/types/j2c.ts\nvar J2C = {\n // TODO: this doesn't seem right. SIZ marker doesn't have to be right after the SOC\n validate: (input) => readUInt32BE(input, 0) === 4283432785,\n calculate: (input) => ({\n height: readUInt32BE(input, 12),\n width: readUInt32BE(input, 8)\n })\n};\n\n// lib/types/jp2.ts\nvar JP2 = {\n validate(input) {\n const boxType = toUTF8String(input, 4, 8);\n if (boxType !== \"jP \") return false;\n const ftypBox = findBox(input, \"ftyp\", 0);\n if (!ftypBox) return false;\n const brand = toUTF8String(input, ftypBox.offset + 8, ftypBox.offset + 12);\n return brand === \"jp2 \";\n },\n calculate(input) {\n const jp2hBox = findBox(input, \"jp2h\", 0);\n const ihdrBox = jp2hBox && findBox(input, \"ihdr\", jp2hBox.offset + 8);\n if (ihdrBox) {\n return {\n height: readUInt32BE(input, ihdrBox.offset + 8),\n width: readUInt32BE(input, ihdrBox.offset + 12)\n };\n }\n throw new TypeError(\"Unsupported JPEG 2000 format\");\n }\n};\n\n// lib/types/jpg.ts\nvar EXIF_MARKER = \"45786966\";\nvar APP1_DATA_SIZE_BYTES = 2;\nvar EXIF_HEADER_BYTES = 6;\nvar TIFF_BYTE_ALIGN_BYTES = 2;\nvar BIG_ENDIAN_BYTE_ALIGN = \"4d4d\";\nvar LITTLE_ENDIAN_BYTE_ALIGN = \"4949\";\nvar IDF_ENTRY_BYTES = 12;\nvar NUM_DIRECTORY_ENTRIES_BYTES = 2;\nfunction isEXIF(input) {\n return toHexString(input, 2, 6) === EXIF_MARKER;\n}\nfunction extractSize(input, index) {\n return {\n height: readUInt16BE(input, index),\n width: readUInt16BE(input, index + 2)\n };\n}\nfunction extractOrientation(exifBlock, isBigEndian) {\n const idfOffset = 8;\n const offset = EXIF_HEADER_BYTES + idfOffset;\n const idfDirectoryEntries = readUInt(exifBlock, 16, offset, isBigEndian);\n for (let directoryEntryNumber = 0; directoryEntryNumber < idfDirectoryEntries; directoryEntryNumber++) {\n const start = offset + NUM_DIRECTORY_ENTRIES_BYTES + directoryEntryNumber * IDF_ENTRY_BYTES;\n const end = start + IDF_ENTRY_BYTES;\n if (start > exifBlock.length) {\n return;\n }\n const block = exifBlock.slice(start, end);\n const tagNumber = readUInt(block, 16, 0, isBigEndian);\n if (tagNumber === 274) {\n const dataFormat = readUInt(block, 16, 2, isBigEndian);\n if (dataFormat !== 3) {\n return;\n }\n const numberOfComponents = readUInt(block, 32, 4, isBigEndian);\n if (numberOfComponents !== 1) {\n return;\n }\n return readUInt(block, 16, 8, isBigEndian);\n }\n }\n}\nfunction validateExifBlock(input, index) {\n const exifBlock = input.slice(APP1_DATA_SIZE_BYTES, index);\n const byteAlign = toHexString(\n exifBlock,\n EXIF_HEADER_BYTES,\n EXIF_HEADER_BYTES + TIFF_BYTE_ALIGN_BYTES\n );\n const isBigEndian = byteAlign === BIG_ENDIAN_BYTE_ALIGN;\n const isLittleEndian = byteAlign === LITTLE_ENDIAN_BYTE_ALIGN;\n if (isBigEndian || isLittleEndian) {\n return extractOrientation(exifBlock, isBigEndian);\n }\n}\nfunction validateInput(input, index) {\n if (index > input.length) {\n throw new TypeError(\"Corrupt JPG, exceeded buffer limits\");\n }\n}\nvar JPG = {\n validate: (input) => toHexString(input, 0, 2) === \"ffd8\",\n calculate(_input) {\n let input = _input.slice(4);\n let orientation;\n let next;\n while (input.length) {\n const i = readUInt16BE(input, 0);\n validateInput(input, i);\n if (input[i] !== 255) {\n input = input.slice(1);\n continue;\n }\n if (isEXIF(input)) {\n orientation = validateExifBlock(input, i);\n }\n next = input[i + 1];\n if (next === 192 || next === 193 || next === 194) {\n const size = extractSize(input, i + 5);\n if (!orientation) {\n return size;\n }\n return {\n height: size.height,\n orientation,\n width: size.width\n };\n }\n input = input.slice(i + 2);\n }\n throw new TypeError(\"Invalid JPG, no size found\");\n }\n};\n\n// lib/utils/bit-reader.ts\nvar BitReader = class {\n constructor(input, endianness) {\n this.input = input;\n this.endianness = endianness;\n // Skip the first 16 bits (2 bytes) of signature\n this.byteOffset = 2;\n this.bitOffset = 0;\n }\n /** Reads a specified number of bits, and move the offset */\n getBits(length = 1) {\n let result = 0;\n let bitsRead = 0;\n while (bitsRead < length) {\n if (this.byteOffset >= this.input.length) {\n throw new Error(\"Reached end of input\");\n }\n const currentByte = this.input[this.byteOffset];\n const bitsLeft = 8 - this.bitOffset;\n const bitsToRead = Math.min(length - bitsRead, bitsLeft);\n if (this.endianness === \"little-endian\") {\n const mask = (1 << bitsToRead) - 1;\n const bits = currentByte >> this.bitOffset & mask;\n result |= bits << bitsRead;\n } else {\n const mask = (1 << bitsToRead) - 1 << 8 - this.bitOffset - bitsToRead;\n const bits = (currentByte & mask) >> 8 - this.bitOffset - bitsToRead;\n result = result << bitsToRead | bits;\n }\n bitsRead += bitsToRead;\n this.bitOffset += bitsToRead;\n if (this.bitOffset === 8) {\n this.byteOffset++;\n this.bitOffset = 0;\n }\n }\n return result;\n }\n};\n\n// lib/types/jxl-stream.ts\nfunction calculateImageDimension(reader, isSmallImage) {\n if (isSmallImage) {\n return 8 * (1 + reader.getBits(5));\n }\n const sizeClass = reader.getBits(2);\n const extraBits = [9, 13, 18, 30][sizeClass];\n return 1 + reader.getBits(extraBits);\n}\nfunction calculateImageWidth(reader, isSmallImage, widthMode, height) {\n if (isSmallImage && widthMode === 0) {\n return 8 * (1 + reader.getBits(5));\n }\n if (widthMode === 0) {\n return calculateImageDimension(reader, false);\n }\n const aspectRatios = [1, 1.2, 4 / 3, 1.5, 16 / 9, 5 / 4, 2];\n return Math.floor(height * aspectRatios[widthMode - 1]);\n}\nvar JXLStream = {\n validate: (input) => {\n return toHexString(input, 0, 2) === \"ff0a\";\n },\n calculate(input) {\n const reader = new BitReader(input, \"little-endian\");\n const isSmallImage = reader.getBits(1) === 1;\n const height = calculateImageDimension(reader, isSmallImage);\n const widthMode = reader.getBits(3);\n const width = calculateImageWidth(reader, isSmallImage, widthMode, height);\n return { width, height };\n }\n};\n\n// lib/types/jxl.ts\nfunction extractCodestream(input) {\n const jxlcBox = findBox(input, \"jxlc\", 0);\n if (jxlcBox) {\n return input.slice(jxlcBox.offset + 8, jxlcBox.offset + jxlcBox.size);\n }\n const partialStreams = extractPartialStreams(input);\n if (partialStreams.length > 0) {\n return concatenateCodestreams(partialStreams);\n }\n return void 0;\n}\nfunction extractPartialStreams(input) {\n const partialStreams = [];\n let offset = 0;\n while (offset < input.length) {\n const jxlpBox = findBox(input, \"jxlp\", offset);\n if (!jxlpBox) break;\n partialStreams.push(\n input.slice(jxlpBox.offset + 12, jxlpBox.offset + jxlpBox.size)\n );\n offset = jxlpBox.offset + (jxlpBox.size > 0 ? jxlpBox.size : 8);\n }\n return partialStreams;\n}\nfunction concatenateCodestreams(partialCodestreams) {\n const totalLength = partialCodestreams.reduce(\n (acc, curr) => acc + curr.length,\n 0\n );\n const codestream = new Uint8Array(totalLength);\n let position = 0;\n for (const partial of partialCodestreams) {\n codestream.set(partial, position);\n position += partial.length;\n }\n return codestream;\n}\nvar JXL = {\n validate: (input) => {\n const boxType = toUTF8String(input, 4, 8);\n if (boxType !== \"JXL \") return false;\n const ftypBox = findBox(input, \"ftyp\", 0);\n if (!ftypBox) return false;\n const brand = toUTF8String(input, ftypBox.offset + 8, ftypBox.offset + 12);\n return brand === \"jxl \";\n },\n calculate(input) {\n const codestream = extractCodestream(input);\n if (codestream) return JXLStream.calculate(codestream);\n throw new Error(\"No codestream found in JXL container\");\n }\n};\n\n// lib/types/ktx.ts\nvar KTX = {\n validate: (input) => {\n const signature = toUTF8String(input, 1, 7);\n return [\"KTX 11\", \"KTX 20\"].includes(signature);\n },\n calculate: (input) => {\n const type = input[5] === 49 ? \"ktx\" : \"ktx2\";\n const offset = type === \"ktx\" ? 36 : 20;\n return {\n height: readUInt32LE(input, offset + 4),\n width: readUInt32LE(input, offset),\n type\n };\n }\n};\n\n// lib/types/png.ts\nvar pngSignature = \"PNG\\r\\n\u001a\\n\";\nvar pngImageHeaderChunkName = \"IHDR\";\nvar pngFriedChunkName = \"CgBI\";\nvar PNG = {\n validate(input) {\n if (pngSignature === toUTF8String(input, 1, 8)) {\n let chunkName = toUTF8String(input, 12, 16);\n if (chunkName === pngFriedChunkName) {\n chunkName = toUTF8String(input, 28, 32);\n }\n if (chunkName !== pngImageHeaderChunkName) {\n throw new TypeError(\"Invalid PNG\");\n }\n return true;\n }\n return false;\n },\n calculate(input) {\n if (toUTF8String(input, 12, 16) === pngFriedChunkName) {\n return {\n height: readUInt32BE(input, 36),\n width: readUInt32BE(input, 32)\n };\n }\n return {\n height: readUInt32BE(input, 20),\n width: readUInt32BE(input, 16)\n };\n }\n};\n\n// lib/types/pnm.ts\nvar PNMTypes = {\n P1: \"pbm/ascii\",\n P2: \"pgm/ascii\",\n P3: \"ppm/ascii\",\n P4: \"pbm\",\n P5: \"pgm\",\n P6: \"ppm\",\n P7: \"pam\",\n PF: \"pfm\"\n};\nvar handlers = {\n default: (lines) => {\n let dimensions = [];\n while (lines.length > 0) {\n const line = lines.shift();\n if (line[0] === \"#\") {\n continue;\n }\n dimensions = line.split(\" \");\n break;\n }\n if (dimensions.length === 2) {\n return {\n height: Number.parseInt(dimensions[1], 10),\n width: Number.parseInt(dimensions[0], 10)\n };\n }\n throw new TypeError(\"Invalid PNM\");\n },\n pam: (lines) => {\n const size = {};\n while (lines.length > 0) {\n const line = lines.shift();\n if (line.length > 16 || line.charCodeAt(0) > 128) {\n continue;\n }\n const [key, value] = line.split(\" \");\n if (key && value) {\n size[key.toLowerCase()] = Number.parseInt(value, 10);\n }\n if (size.height && size.width) {\n break;\n }\n }\n if (size.height && size.width) {\n return {\n height: size.height,\n width: size.width\n };\n }\n throw new TypeError(\"Invalid PAM\");\n }\n};\nvar PNM = {\n validate: (input) => toUTF8String(input, 0, 2) in PNMTypes,\n calculate(input) {\n const signature = toUTF8String(input, 0, 2);\n const type = PNMTypes[signature];\n const lines = toUTF8String(input, 3).split(/[\\r\\n]+/);\n const handler = handlers[type] || handlers.default;\n return handler(lines);\n }\n};\n\n// lib/types/psd.ts\nvar PSD = {\n validate: (input) => toUTF8String(input, 0, 4) === \"8BPS\",\n calculate: (input) => ({\n height: readUInt32BE(input, 14),\n width: readUInt32BE(input, 18)\n })\n};\n\n// lib/types/svg.ts\nvar svgReg = /<svg\\s([^>\"']|\"[^\"]*\"|'[^']*')*>/;\nvar extractorRegExps = {\n height: /\\sheight=(['\"])([^%]+?)\\1/,\n root: svgReg,\n viewbox: /\\sviewBox=(['\"])(.+?)\\1/i,\n width: /\\swidth=(['\"])([^%]+?)\\1/\n};\nvar INCH_CM = 2.54;\nvar units = {\n in: 96,\n cm: 96 / INCH_CM,\n em: 16,\n ex: 8,\n m: 96 / INCH_CM * 100,\n mm: 96 / INCH_CM / 10,\n pc: 96 / 72 / 12,\n pt: 96 / 72,\n px: 1\n};\nvar unitsReg = new RegExp(\n `^([0-9.]+(?:e\\\\d+)?)(${Object.keys(units).join(\"|\")})?$`\n);\nfunction parseLength(len) {\n const m = unitsReg.exec(len);\n if (!m) {\n return void 0;\n }\n return Math.round(Number(m[1]) * (units[m[2]] || 1));\n}\nfunction parseViewbox(viewbox) {\n const bounds = viewbox.split(\" \");\n return {\n height: parseLength(bounds[3]),\n width: parseLength(bounds[2])\n };\n}\nfunction parseAttributes(root) {\n const width = root.match(extractorRegExps.width);\n const height = root.match(extractorRegExps.height);\n const viewbox = root.match(extractorRegExps.viewbox);\n return {\n height: height && parseLength(height[2]),\n viewbox: viewbox && parseViewbox(viewbox[2]),\n width: width && parseLength(width[2])\n };\n}\nfunction calculateByDimensions(attrs) {\n return {\n height: attrs.height,\n width: attrs.width\n };\n}\nfunction calculateByViewbox(attrs, viewbox) {\n const ratio = viewbox.width / viewbox.height;\n if (attrs.width) {\n return {\n height: Math.floor(attrs.width / ratio),\n width: attrs.width\n };\n }\n if (attrs.height) {\n return {\n height: attrs.height,\n width: Math.floor(attrs.height * ratio)\n };\n }\n return {\n height: viewbox.height,\n width: viewbox.width\n };\n}\nvar SVG = {\n // Scan only the first kilo-byte to speed up the check on larger files\n validate: (input) => svgReg.test(toUTF8String(input, 0, 1e3)),\n calculate(input) {\n const root = toUTF8String(input).match(extractorRegExps.root);\n if (root) {\n const attrs = parseAttributes(root[0]);\n if (attrs.width && attrs.height) {\n return calculateByDimensions(attrs);\n }\n if (attrs.viewbox) {\n return calculateByViewbox(attrs, attrs.viewbox);\n }\n }\n throw new TypeError(\"Invalid SVG\");\n }\n};\n\n// lib/types/tga.ts\nvar TGA = {\n validate(input) {\n return readUInt16LE(input, 0) === 0 && readUInt16LE(input, 4) === 0;\n },\n calculate(input) {\n return {\n height: readUInt16LE(input, 14),\n width: readUInt16LE(input, 12)\n };\n }\n};\n\n// lib/types/tiff.ts\nvar CONSTANTS = {\n TAG: {\n WIDTH: 256,\n HEIGHT: 257,\n COMPRESSION: 259\n },\n TYPE: {\n SHORT: 3,\n LONG: 4,\n LONG8: 16\n },\n ENTRY_SIZE: {\n STANDARD: 12,\n BIG: 20\n },\n COUNT_SIZE: {\n STANDARD: 2,\n BIG: 8\n }\n};\nfunction readIFD(input, { isBigEndian, isBigTiff }) {\n const ifdOffset = isBigTiff ? Number(readUInt64(input, 8, isBigEndian)) : readUInt(input, 32, 4, isBigEndian);\n const entryCountSize = isBigTiff ? CONSTANTS.COUNT_SIZE.BIG : CONSTANTS.COUNT_SIZE.STANDARD;\n return input.slice(ifdOffset + entryCountSize);\n}\nfunction readTagValue(input, type, offset, isBigEndian) {\n switch (type) {\n case CONSTANTS.TYPE.SHORT:\n return readUInt(input, 16, offset, isBigEndian);\n case CONSTANTS.TYPE.LONG:\n return readUInt(input, 32, offset, isBigEndian);\n case CONSTANTS.TYPE.LONG8: {\n const value = Number(readUInt64(input, offset, isBigEndian));\n if (value > Number.MAX_SAFE_INTEGER) {\n throw new TypeError(\"Value too large\");\n }\n return value;\n }\n default:\n return 0;\n }\n}\nfunction nextTag(input, isBigTiff) {\n const entrySize = isBigTiff ? CONSTANTS.ENTRY_SIZE.BIG : CONSTANTS.ENTRY_SIZE.STANDARD;\n if (input.length > entrySize) {\n return input.slice(entrySize);\n }\n}\nfunction extractTags(input, { isBigEndian, isBigTiff }) {\n const tags = {};\n let temp = input;\n while (temp?.length) {\n const code = readUInt(temp, 16, 0, isBigEndian);\n const type = readUInt(temp, 16, 2, isBigEndian);\n const length = isBigTiff ? Number(readUInt64(temp, 4, isBigEndian)) : readUInt(temp, 32, 4, isBigEndian);\n if (code === 0) break;\n if (length === 1 && (type === CONSTANTS.TYPE.SHORT || type === CONSTANTS.TYPE.LONG || isBigTiff && type === CONSTANTS.TYPE.LONG8)) {\n const valueOffset = isBigTiff ? 12 : 8;\n tags[code] = readTagValue(temp, type, valueOffset, isBigEndian);\n }\n temp = nextTag(temp, isBigTiff);\n }\n return tags;\n}\nfunction determineFormat(input) {\n const signature = toUTF8String(input, 0, 2);\n const version = readUInt(input, 16, 2, signature === \"MM\");\n return {\n isBigEndian: signature === \"MM\",\n isBigTiff: version === 43\n };\n}\nfunction validateBigTIFFHeader(input, isBigEndian) {\n const byteSize = readUInt(input, 16, 4, isBigEndian);\n const reserved = readUInt(input, 16, 6, isBigEndian);\n if (byteSize !== 8 || reserved !== 0) {\n throw new TypeError(\"Invalid BigTIFF header\");\n }\n}\nvar signatures = /* @__PURE__ */ new Set([\n \"49492a00\",\n // Little Endian\n \"4d4d002a\",\n // Big Endian\n \"49492b00\",\n // BigTIFF Little Endian\n \"4d4d002b\"\n // BigTIFF Big Endian\n]);\nvar TIFF = {\n validate: (input) => {\n const signature = toHexString(input, 0, 4);\n return signatures.has(signature);\n },\n calculate(input) {\n const format = determineFormat(input);\n if (format.isBigTiff) {\n validateBigTIFFHeader(input, format.isBigEndian);\n }\n const ifdBuffer = readIFD(input, format);\n const tags = extractTags(ifdBuffer, format);\n const info = {\n height: tags[CONSTANTS.TAG.HEIGHT],\n width: tags[CONSTANTS.TAG.WIDTH],\n type: format.isBigTiff ? \"bigtiff\" : \"tiff\"\n };\n if (tags[CONSTANTS.TAG.COMPRESSION]) {\n info.compression = tags[CONSTANTS.TAG.COMPRESSION];\n }\n if (!info.width || !info.height) {\n throw new TypeError(\"Invalid Tiff. Missing tags\");\n }\n return info;\n }\n};\n\n// lib/types/webp.ts\nfunction calculateExtended(input) {\n return {\n height: 1 + readUInt24LE(input, 7),\n width: 1 + readUInt24LE(input, 4)\n };\n}\nfunction calculateLossless(input) {\n return {\n height: 1 + ((input[4] & 15) << 10 | input[3] << 2 | (input[2] & 192) >> 6),\n width: 1 + ((input[2] & 63) << 8 | input[1])\n };\n}\nfunction calculateLossy(input) {\n return {\n height: readInt16LE(input, 8) & 16383,\n width: readInt16LE(input, 6) & 16383\n };\n}\nvar WEBP = {\n validate(input) {\n const riffHeader = \"RIFF\" === toUTF8String(input, 0, 4);\n const webpHeader = \"WEBP\" === toUTF8String(input, 8, 12);\n const vp8Header = \"VP8\" === toUTF8String(input, 12, 15);\n return riffHeader && webpHeader && vp8Header;\n },\n calculate(_input) {\n const chunkHeader = toUTF8String(_input, 12, 16);\n const input = _input.slice(20, 30);\n if (chunkHeader === \"VP8X\") {\n const extendedHeader = input[0];\n const validStart = (extendedHeader & 192) === 0;\n const validEnd = (extendedHeader & 1) === 0;\n if (validStart && validEnd) {\n return calculateExtended(input);\n }\n throw new TypeError(\"Invalid WebP\");\n }\n if (chunkHeader === \"VP8 \" && input[0] !== 47) {\n return calculateLossy(input);\n }\n const signature = toHexString(input, 3, 6);\n if (chunkHeader === \"VP8L\" && signature !== \"9d012a\") {\n return calculateLossless(input);\n }\n throw new TypeError(\"Invalid WebP\");\n }\n};\n\n// lib/types/index.ts\nvar typeHandlers = /* @__PURE__ */ new Map([\n [\"bmp\", BMP],\n [\"cur\", CUR],\n [\"dds\", DDS],\n [\"gif\", GIF],\n [\"heif\", HEIF],\n [\"icns\", ICNS],\n [\"ico\", ICO],\n [\"j2c\", J2C],\n [\"jp2\", JP2],\n [\"jpg\", JPG],\n [\"jxl\", JXL],\n [\"jxl-stream\", JXLStream],\n [\"ktx\", KTX],\n [\"png\", PNG],\n [\"pnm\", PNM],\n [\"psd\", PSD],\n [\"svg\", SVG],\n [\"tga\", TGA],\n [\"tiff\", TIFF],\n [\"webp\", WEBP]\n]);\nvar types = Array.from(typeHandlers.keys());\n\n// lib/detector.ts\nvar firstBytes = /* @__PURE__ */ new Map([\n [0, \"heif\"],\n [56, \"psd\"],\n [66, \"bmp\"],\n [68, \"dds\"],\n [71, \"gif\"],\n [73, \"tiff\"],\n [77, \"tiff\"],\n [82, \"webp\"],\n [105, \"icns\"],\n [137, \"png\"],\n [255, \"jpg\"]\n]);\nfunction detector(input) {\n const byte = input[0];\n const type = firstBytes.get(byte);\n if (type && typeHandlers.get(type).validate(input)) {\n return type;\n }\n return types.find((type2) => typeHandlers.get(type2).validate(input));\n}\n\n// lib/lookup.ts\nvar globalOptions = {\n disabledTypes: []\n};\nfunction imageSize(input) {\n const type = detector(input);\n if (typeof type !== \"undefined\") {\n if (globalOptions.disabledTypes.indexOf(type) > -1) {\n throw new TypeError(`disabled file type: ${type}`);\n }\n const size = typeHandlers.get(type).calculate(input);\n if (size !== void 0) {\n size.type = size.type ?? type;\n if (size.images && size.images.length > 1) {\n const largestImage = size.images.reduce((largest, current) => {\n return current.width * current.height > largest.width * largest.height ? current : largest;\n }, size.images[0]);\n size.width = largestImage.width;\n size.height = largestImage.height;\n }\n return size;\n }\n }\n throw new TypeError(`unsupported file type: ${type}`);\n}\nvar disableTypes = (types2) => {\n globalOptions.disabledTypes = types2;\n};\n\nexport { imageSize as default, disableTypes, imageSize, types };\n"],"x_google_ignoreList":[0],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dist-89xCrGqi.mjs","names":[],"sources":["../../../node_modules/.pnpm/image-size@2.0.2_patch_hash=77c12533e3a635c4066c55da8952f4912e8210416539dc1249550fa639271595/node_modules/image-size/dist/index.mjs"],"sourcesContent":["// lib/types/utils.ts\nvar decoder = new TextDecoder();\nvar toUTF8String = (input, start = 0, end = input.length) => decoder.decode(input.slice(start, end));\nvar toHexString = (input, start = 0, end = input.length) => input.slice(start, end).reduce((memo, i) => memo + `0${i.toString(16)}`.slice(-2), \"\");\nvar getView = (input, offset) => new DataView(input.buffer, input.byteOffset + offset);\nvar readInt16LE = (input, offset = 0) => getView(input, offset).getInt16(0, true);\nvar readUInt16BE = (input, offset = 0) => getView(input, offset).getUint16(0, false);\nvar readUInt16LE = (input, offset = 0) => getView(input, offset).getUint16(0, true);\nvar readUInt24LE = (input, offset = 0) => {\n const view = getView(input, offset);\n return view.getUint16(0, true) + (view.getUint8(2) << 16);\n};\nvar readInt32LE = (input, offset = 0) => getView(input, offset).getInt32(0, true);\nvar readUInt32BE = (input, offset = 0) => getView(input, offset).getUint32(0, false);\nvar readUInt32LE = (input, offset = 0) => getView(input, offset).getUint32(0, true);\nvar readUInt64 = (input, offset, isBigEndian) => getView(input, offset).getBigUint64(0, !isBigEndian);\nvar methods = {\n readUInt16BE,\n readUInt16LE,\n readUInt32BE,\n readUInt32LE\n};\nfunction readUInt(input, bits, offset = 0, isBigEndian = false) {\n const endian = isBigEndian ? \"BE\" : \"LE\";\n const methodName = `readUInt${bits}${endian}`;\n return methods[methodName](input, offset);\n}\nfunction readBox(input, offset) {\n if (input.length - offset < 4) return;\n const boxSize = readUInt32BE(input, offset);\n if (input.length - offset < boxSize) return;\n return {\n name: toUTF8String(input, 4 + offset, 8 + offset),\n offset,\n size: boxSize\n };\n}\nfunction findBox(input, boxName, currentOffset) {\n while (currentOffset < input.length) {\n const box = readBox(input, currentOffset);\n if (!box) break;\n if (box.name === boxName) return box;\n currentOffset += box.size > 0 ? box.size : 8;\n }\n}\n\n// lib/types/bmp.ts\nvar BMP = {\n validate: (input) => toUTF8String(input, 0, 2) === \"BM\",\n calculate: (input) => ({\n height: Math.abs(readInt32LE(input, 22)),\n width: readUInt32LE(input, 18)\n })\n};\n\n// lib/types/ico.ts\nvar TYPE_ICON = 1;\nvar SIZE_HEADER = 2 + 2 + 2;\nvar SIZE_IMAGE_ENTRY = 1 + 1 + 1 + 1 + 2 + 2 + 4 + 4;\nfunction getSizeFromOffset(input, offset) {\n const value = input[offset];\n return value === 0 ? 256 : value;\n}\nfunction getImageSize(input, imageIndex) {\n const offset = SIZE_HEADER + imageIndex * SIZE_IMAGE_ENTRY;\n return {\n height: getSizeFromOffset(input, offset + 1),\n width: getSizeFromOffset(input, offset)\n };\n}\nvar ICO = {\n validate(input) {\n const reserved = readUInt16LE(input, 0);\n const imageCount = readUInt16LE(input, 4);\n if (reserved !== 0 || imageCount === 0) return false;\n const imageType = readUInt16LE(input, 2);\n return imageType === TYPE_ICON;\n },\n calculate(input) {\n const nbImages = readUInt16LE(input, 4);\n const imageSize2 = getImageSize(input, 0);\n if (nbImages === 1) return imageSize2;\n const images = [];\n for (let imageIndex = 0; imageIndex < nbImages; imageIndex += 1) {\n images.push(getImageSize(input, imageIndex));\n }\n return {\n width: imageSize2.width,\n height: imageSize2.height,\n images\n };\n }\n};\n\n// lib/types/cur.ts\nvar TYPE_CURSOR = 2;\nvar CUR = {\n validate(input) {\n const reserved = readUInt16LE(input, 0);\n const imageCount = readUInt16LE(input, 4);\n if (reserved !== 0 || imageCount === 0) return false;\n const imageType = readUInt16LE(input, 2);\n return imageType === TYPE_CURSOR;\n },\n calculate: (input) => ICO.calculate(input)\n};\n\n// lib/types/dds.ts\nvar DDS = {\n validate: (input) => readUInt32LE(input, 0) === 542327876,\n calculate: (input) => ({\n height: readUInt32LE(input, 12),\n width: readUInt32LE(input, 16)\n })\n};\n\n// lib/types/gif.ts\nvar gifRegexp = /^GIF8[79]a/;\nvar GIF = {\n validate: (input) => gifRegexp.test(toUTF8String(input, 0, 6)),\n calculate: (input) => ({\n height: readUInt16LE(input, 8),\n width: readUInt16LE(input, 6)\n })\n};\n\n// lib/types/heif.ts\nvar brandMap = {\n avif: \"avif\",\n mif1: \"heif\",\n msf1: \"heif\",\n // heif-sequence\n heic: \"heic\",\n heix: \"heic\",\n hevc: \"heic\",\n // heic-sequence\n hevx: \"heic\"\n // heic-sequence\n};\nvar HEIF = {\n validate(input) {\n const boxType = toUTF8String(input, 4, 8);\n if (boxType !== \"ftyp\") return false;\n const ftypBox = findBox(input, \"ftyp\", 0);\n if (!ftypBox) return false;\n const brand = toUTF8String(input, ftypBox.offset + 8, ftypBox.offset + 12);\n return brand in brandMap;\n },\n calculate(input) {\n const metaBox = findBox(input, \"meta\", 0);\n const iprpBox = metaBox && findBox(input, \"iprp\", metaBox.offset + 12);\n const ipcoBox = iprpBox && findBox(input, \"ipco\", iprpBox.offset + 8);\n if (!ipcoBox) {\n throw new TypeError(\"Invalid HEIF, no ipco box found\");\n }\n const type = toUTF8String(input, 8, 12);\n const images = [];\n let currentOffset = ipcoBox.offset + 8;\n while (currentOffset < ipcoBox.offset + ipcoBox.size) {\n const ispeBox = findBox(input, \"ispe\", currentOffset);\n if (!ispeBox) break;\n const rawWidth = readUInt32BE(input, ispeBox.offset + 12);\n const rawHeight = readUInt32BE(input, ispeBox.offset + 16);\n const clapBox = findBox(input, \"clap\", currentOffset);\n let width = rawWidth;\n let height = rawHeight;\n if (clapBox && clapBox.offset < ipcoBox.offset + ipcoBox.size) {\n const cropRight = readUInt32BE(input, clapBox.offset + 12);\n width = rawWidth - cropRight;\n }\n images.push({ height, width });\n currentOffset = ispeBox.offset + (ispeBox.size > 0 ? ispeBox.size : 8);\n }\n if (images.length === 0) {\n throw new TypeError(\"Invalid HEIF, no sizes found\");\n }\n return {\n width: images[0].width,\n height: images[0].height,\n type,\n ...images.length > 1 ? { images } : {}\n };\n }\n};\n\n// lib/types/icns.ts\nvar SIZE_HEADER2 = 4 + 4;\nvar FILE_LENGTH_OFFSET = 4;\nvar ENTRY_LENGTH_OFFSET = 4;\nvar ICON_TYPE_SIZE = {\n ICON: 32,\n \"ICN#\": 32,\n // m => 16 x 16\n \"icm#\": 16,\n icm4: 16,\n icm8: 16,\n // s => 16 x 16\n \"ics#\": 16,\n ics4: 16,\n ics8: 16,\n is32: 16,\n s8mk: 16,\n icp4: 16,\n // l => 32 x 32\n icl4: 32,\n icl8: 32,\n il32: 32,\n l8mk: 32,\n icp5: 32,\n ic11: 32,\n // h => 48 x 48\n ich4: 48,\n ich8: 48,\n ih32: 48,\n h8mk: 48,\n // . => 64 x 64\n icp6: 64,\n ic12: 32,\n // t => 128 x 128\n it32: 128,\n t8mk: 128,\n ic07: 128,\n // . => 256 x 256\n ic08: 256,\n ic13: 256,\n // . => 512 x 512\n ic09: 512,\n ic14: 512,\n // . => 1024 x 1024\n ic10: 1024\n};\nfunction readImageHeader(input, imageOffset) {\n const imageLengthOffset = imageOffset + ENTRY_LENGTH_OFFSET;\n return [\n toUTF8String(input, imageOffset, imageLengthOffset),\n readUInt32BE(input, imageLengthOffset)\n ];\n}\nfunction getImageSize2(type) {\n const size = ICON_TYPE_SIZE[type];\n return { width: size, height: size, type };\n}\nvar ICNS = {\n validate: (input) => toUTF8String(input, 0, 4) === \"icns\",\n calculate(input) {\n const inputLength = input.length;\n const fileLength = readUInt32BE(input, FILE_LENGTH_OFFSET);\n let imageOffset = SIZE_HEADER2;\n const images = [];\n while (imageOffset < fileLength && imageOffset < inputLength) {\n const imageHeader = readImageHeader(input, imageOffset);\n const imageSize2 = getImageSize2(imageHeader[0]);\n images.push(imageSize2);\n imageOffset += imageHeader[1] > 0 ? imageHeader[1] : 8;\n }\n if (images.length === 0) {\n throw new TypeError(\"Invalid ICNS, no sizes found\");\n }\n return {\n width: images[0].width,\n height: images[0].height,\n ...images.length > 1 ? { images } : {}\n };\n }\n};\n\n// lib/types/j2c.ts\nvar J2C = {\n // TODO: this doesn't seem right. SIZ marker doesn't have to be right after the SOC\n validate: (input) => readUInt32BE(input, 0) === 4283432785,\n calculate: (input) => ({\n height: readUInt32BE(input, 12),\n width: readUInt32BE(input, 8)\n })\n};\n\n// lib/types/jp2.ts\nvar JP2 = {\n validate(input) {\n const boxType = toUTF8String(input, 4, 8);\n if (boxType !== \"jP \") return false;\n const ftypBox = findBox(input, \"ftyp\", 0);\n if (!ftypBox) return false;\n const brand = toUTF8String(input, ftypBox.offset + 8, ftypBox.offset + 12);\n return brand === \"jp2 \";\n },\n calculate(input) {\n const jp2hBox = findBox(input, \"jp2h\", 0);\n const ihdrBox = jp2hBox && findBox(input, \"ihdr\", jp2hBox.offset + 8);\n if (ihdrBox) {\n return {\n height: readUInt32BE(input, ihdrBox.offset + 8),\n width: readUInt32BE(input, ihdrBox.offset + 12)\n };\n }\n throw new TypeError(\"Unsupported JPEG 2000 format\");\n }\n};\n\n// lib/types/jpg.ts\nvar EXIF_MARKER = \"45786966\";\nvar APP1_DATA_SIZE_BYTES = 2;\nvar EXIF_HEADER_BYTES = 6;\nvar TIFF_BYTE_ALIGN_BYTES = 2;\nvar BIG_ENDIAN_BYTE_ALIGN = \"4d4d\";\nvar LITTLE_ENDIAN_BYTE_ALIGN = \"4949\";\nvar IDF_ENTRY_BYTES = 12;\nvar NUM_DIRECTORY_ENTRIES_BYTES = 2;\nfunction isEXIF(input) {\n return toHexString(input, 2, 6) === EXIF_MARKER;\n}\nfunction extractSize(input, index) {\n return {\n height: readUInt16BE(input, index),\n width: readUInt16BE(input, index + 2)\n };\n}\nfunction extractOrientation(exifBlock, isBigEndian) {\n const idfOffset = 8;\n const offset = EXIF_HEADER_BYTES + idfOffset;\n const idfDirectoryEntries = readUInt(exifBlock, 16, offset, isBigEndian);\n for (let directoryEntryNumber = 0; directoryEntryNumber < idfDirectoryEntries; directoryEntryNumber++) {\n const start = offset + NUM_DIRECTORY_ENTRIES_BYTES + directoryEntryNumber * IDF_ENTRY_BYTES;\n const end = start + IDF_ENTRY_BYTES;\n if (start > exifBlock.length) {\n return;\n }\n const block = exifBlock.slice(start, end);\n const tagNumber = readUInt(block, 16, 0, isBigEndian);\n if (tagNumber === 274) {\n const dataFormat = readUInt(block, 16, 2, isBigEndian);\n if (dataFormat !== 3) {\n return;\n }\n const numberOfComponents = readUInt(block, 32, 4, isBigEndian);\n if (numberOfComponents !== 1) {\n return;\n }\n return readUInt(block, 16, 8, isBigEndian);\n }\n }\n}\nfunction validateExifBlock(input, index) {\n const exifBlock = input.slice(APP1_DATA_SIZE_BYTES, index);\n const byteAlign = toHexString(\n exifBlock,\n EXIF_HEADER_BYTES,\n EXIF_HEADER_BYTES + TIFF_BYTE_ALIGN_BYTES\n );\n const isBigEndian = byteAlign === BIG_ENDIAN_BYTE_ALIGN;\n const isLittleEndian = byteAlign === LITTLE_ENDIAN_BYTE_ALIGN;\n if (isBigEndian || isLittleEndian) {\n return extractOrientation(exifBlock, isBigEndian);\n }\n}\nfunction validateInput(input, index) {\n if (index > input.length) {\n throw new TypeError(\"Corrupt JPG, exceeded buffer limits\");\n }\n}\nvar JPG = {\n validate: (input) => toHexString(input, 0, 2) === \"ffd8\",\n calculate(_input) {\n let input = _input.slice(4);\n let orientation;\n let next;\n while (input.length) {\n const i = readUInt16BE(input, 0);\n validateInput(input, i);\n if (input[i] !== 255) {\n input = input.slice(1);\n continue;\n }\n if (isEXIF(input)) {\n orientation = validateExifBlock(input, i);\n }\n next = input[i + 1];\n if (next === 192 || next === 193 || next === 194) {\n const size = extractSize(input, i + 5);\n if (!orientation) {\n return size;\n }\n return {\n height: size.height,\n orientation,\n width: size.width\n };\n }\n input = input.slice(i + 2);\n }\n throw new TypeError(\"Invalid JPG, no size found\");\n }\n};\n\n// lib/utils/bit-reader.ts\nvar BitReader = class {\n constructor(input, endianness) {\n this.input = input;\n this.endianness = endianness;\n // Skip the first 16 bits (2 bytes) of signature\n this.byteOffset = 2;\n this.bitOffset = 0;\n }\n /** Reads a specified number of bits, and move the offset */\n getBits(length = 1) {\n let result = 0;\n let bitsRead = 0;\n while (bitsRead < length) {\n if (this.byteOffset >= this.input.length) {\n throw new Error(\"Reached end of input\");\n }\n const currentByte = this.input[this.byteOffset];\n const bitsLeft = 8 - this.bitOffset;\n const bitsToRead = Math.min(length - bitsRead, bitsLeft);\n if (this.endianness === \"little-endian\") {\n const mask = (1 << bitsToRead) - 1;\n const bits = currentByte >> this.bitOffset & mask;\n result |= bits << bitsRead;\n } else {\n const mask = (1 << bitsToRead) - 1 << 8 - this.bitOffset - bitsToRead;\n const bits = (currentByte & mask) >> 8 - this.bitOffset - bitsToRead;\n result = result << bitsToRead | bits;\n }\n bitsRead += bitsToRead;\n this.bitOffset += bitsToRead;\n if (this.bitOffset === 8) {\n this.byteOffset++;\n this.bitOffset = 0;\n }\n }\n return result;\n }\n};\n\n// lib/types/jxl-stream.ts\nfunction calculateImageDimension(reader, isSmallImage) {\n if (isSmallImage) {\n return 8 * (1 + reader.getBits(5));\n }\n const sizeClass = reader.getBits(2);\n const extraBits = [9, 13, 18, 30][sizeClass];\n return 1 + reader.getBits(extraBits);\n}\nfunction calculateImageWidth(reader, isSmallImage, widthMode, height) {\n if (isSmallImage && widthMode === 0) {\n return 8 * (1 + reader.getBits(5));\n }\n if (widthMode === 0) {\n return calculateImageDimension(reader, false);\n }\n const aspectRatios = [1, 1.2, 4 / 3, 1.5, 16 / 9, 5 / 4, 2];\n return Math.floor(height * aspectRatios[widthMode - 1]);\n}\nvar JXLStream = {\n validate: (input) => {\n return toHexString(input, 0, 2) === \"ff0a\";\n },\n calculate(input) {\n const reader = new BitReader(input, \"little-endian\");\n const isSmallImage = reader.getBits(1) === 1;\n const height = calculateImageDimension(reader, isSmallImage);\n const widthMode = reader.getBits(3);\n const width = calculateImageWidth(reader, isSmallImage, widthMode, height);\n return { width, height };\n }\n};\n\n// lib/types/jxl.ts\nfunction extractCodestream(input) {\n const jxlcBox = findBox(input, \"jxlc\", 0);\n if (jxlcBox) {\n return input.slice(jxlcBox.offset + 8, jxlcBox.offset + jxlcBox.size);\n }\n const partialStreams = extractPartialStreams(input);\n if (partialStreams.length > 0) {\n return concatenateCodestreams(partialStreams);\n }\n return void 0;\n}\nfunction extractPartialStreams(input) {\n const partialStreams = [];\n let offset = 0;\n while (offset < input.length) {\n const jxlpBox = findBox(input, \"jxlp\", offset);\n if (!jxlpBox) break;\n partialStreams.push(\n input.slice(jxlpBox.offset + 12, jxlpBox.offset + jxlpBox.size)\n );\n offset = jxlpBox.offset + (jxlpBox.size > 0 ? jxlpBox.size : 8);\n }\n return partialStreams;\n}\nfunction concatenateCodestreams(partialCodestreams) {\n const totalLength = partialCodestreams.reduce(\n (acc, curr) => acc + curr.length,\n 0\n );\n const codestream = new Uint8Array(totalLength);\n let position = 0;\n for (const partial of partialCodestreams) {\n codestream.set(partial, position);\n position += partial.length;\n }\n return codestream;\n}\nvar JXL = {\n validate: (input) => {\n const boxType = toUTF8String(input, 4, 8);\n if (boxType !== \"JXL \") return false;\n const ftypBox = findBox(input, \"ftyp\", 0);\n if (!ftypBox) return false;\n const brand = toUTF8String(input, ftypBox.offset + 8, ftypBox.offset + 12);\n return brand === \"jxl \";\n },\n calculate(input) {\n const codestream = extractCodestream(input);\n if (codestream) return JXLStream.calculate(codestream);\n throw new Error(\"No codestream found in JXL container\");\n }\n};\n\n// lib/types/ktx.ts\nvar KTX = {\n validate: (input) => {\n const signature = toUTF8String(input, 1, 7);\n return [\"KTX 11\", \"KTX 20\"].includes(signature);\n },\n calculate: (input) => {\n const type = input[5] === 49 ? \"ktx\" : \"ktx2\";\n const offset = type === \"ktx\" ? 36 : 20;\n return {\n height: readUInt32LE(input, offset + 4),\n width: readUInt32LE(input, offset),\n type\n };\n }\n};\n\n// lib/types/png.ts\nvar pngSignature = \"PNG\\r\\n\u001a\\n\";\nvar pngImageHeaderChunkName = \"IHDR\";\nvar pngFriedChunkName = \"CgBI\";\nvar PNG = {\n validate(input) {\n if (pngSignature === toUTF8String(input, 1, 8)) {\n let chunkName = toUTF8String(input, 12, 16);\n if (chunkName === pngFriedChunkName) {\n chunkName = toUTF8String(input, 28, 32);\n }\n if (chunkName !== pngImageHeaderChunkName) {\n throw new TypeError(\"Invalid PNG\");\n }\n return true;\n }\n return false;\n },\n calculate(input) {\n if (toUTF8String(input, 12, 16) === pngFriedChunkName) {\n return {\n height: readUInt32BE(input, 36),\n width: readUInt32BE(input, 32)\n };\n }\n return {\n height: readUInt32BE(input, 20),\n width: readUInt32BE(input, 16)\n };\n }\n};\n\n// lib/types/pnm.ts\nvar PNMTypes = {\n P1: \"pbm/ascii\",\n P2: \"pgm/ascii\",\n P3: \"ppm/ascii\",\n P4: \"pbm\",\n P5: \"pgm\",\n P6: \"ppm\",\n P7: \"pam\",\n PF: \"pfm\"\n};\nvar handlers = {\n default: (lines) => {\n let dimensions = [];\n while (lines.length > 0) {\n const line = lines.shift();\n if (line[0] === \"#\") {\n continue;\n }\n dimensions = line.split(\" \");\n break;\n }\n if (dimensions.length === 2) {\n return {\n height: Number.parseInt(dimensions[1], 10),\n width: Number.parseInt(dimensions[0], 10)\n };\n }\n throw new TypeError(\"Invalid PNM\");\n },\n pam: (lines) => {\n const size = {};\n while (lines.length > 0) {\n const line = lines.shift();\n if (line.length > 16 || line.charCodeAt(0) > 128) {\n continue;\n }\n const [key, value] = line.split(\" \");\n if (key && value) {\n size[key.toLowerCase()] = Number.parseInt(value, 10);\n }\n if (size.height && size.width) {\n break;\n }\n }\n if (size.height && size.width) {\n return {\n height: size.height,\n width: size.width\n };\n }\n throw new TypeError(\"Invalid PAM\");\n }\n};\nvar PNM = {\n validate: (input) => toUTF8String(input, 0, 2) in PNMTypes,\n calculate(input) {\n const signature = toUTF8String(input, 0, 2);\n const type = PNMTypes[signature];\n const lines = toUTF8String(input, 3).split(/[\\r\\n]+/);\n const handler = handlers[type] || handlers.default;\n return handler(lines);\n }\n};\n\n// lib/types/psd.ts\nvar PSD = {\n validate: (input) => toUTF8String(input, 0, 4) === \"8BPS\",\n calculate: (input) => ({\n height: readUInt32BE(input, 14),\n width: readUInt32BE(input, 18)\n })\n};\n\n// lib/types/svg.ts\nvar svgReg = /<svg\\s([^>\"']|\"[^\"]*\"|'[^']*')*>/;\nvar extractorRegExps = {\n height: /\\sheight=(['\"])([^%]+?)\\1/,\n root: svgReg,\n viewbox: /\\sviewBox=(['\"])(.+?)\\1/i,\n width: /\\swidth=(['\"])([^%]+?)\\1/\n};\nvar INCH_CM = 2.54;\nvar units = {\n in: 96,\n cm: 96 / INCH_CM,\n em: 16,\n ex: 8,\n m: 96 / INCH_CM * 100,\n mm: 96 / INCH_CM / 10,\n pc: 96 / 72 / 12,\n pt: 96 / 72,\n px: 1\n};\nvar unitsReg = new RegExp(\n `^([0-9.]+(?:e\\\\d+)?)(${Object.keys(units).join(\"|\")})?$`\n);\nfunction parseLength(len) {\n const m = unitsReg.exec(len);\n if (!m) {\n return void 0;\n }\n return Math.round(Number(m[1]) * (units[m[2]] || 1));\n}\nfunction parseViewbox(viewbox) {\n const bounds = viewbox.split(\" \");\n return {\n height: parseLength(bounds[3]),\n width: parseLength(bounds[2])\n };\n}\nfunction parseAttributes(root) {\n const width = root.match(extractorRegExps.width);\n const height = root.match(extractorRegExps.height);\n const viewbox = root.match(extractorRegExps.viewbox);\n return {\n height: height && parseLength(height[2]),\n viewbox: viewbox && parseViewbox(viewbox[2]),\n width: width && parseLength(width[2])\n };\n}\nfunction calculateByDimensions(attrs) {\n return {\n height: attrs.height,\n width: attrs.width\n };\n}\nfunction calculateByViewbox(attrs, viewbox) {\n const ratio = viewbox.width / viewbox.height;\n if (attrs.width) {\n return {\n height: Math.floor(attrs.width / ratio),\n width: attrs.width\n };\n }\n if (attrs.height) {\n return {\n height: attrs.height,\n width: Math.floor(attrs.height * ratio)\n };\n }\n return {\n height: viewbox.height,\n width: viewbox.width\n };\n}\nvar SVG = {\n // Scan only the first kilo-byte to speed up the check on larger files\n validate: (input) => svgReg.test(toUTF8String(input, 0, 1e3)),\n calculate(input) {\n const root = toUTF8String(input).match(extractorRegExps.root);\n if (root) {\n const attrs = parseAttributes(root[0]);\n if (attrs.width && attrs.height) {\n return calculateByDimensions(attrs);\n }\n if (attrs.viewbox) {\n return calculateByViewbox(attrs, attrs.viewbox);\n }\n }\n throw new TypeError(\"Invalid SVG\");\n }\n};\n\n// lib/types/tga.ts\nvar TGA = {\n validate(input) {\n return readUInt16LE(input, 0) === 0 && readUInt16LE(input, 4) === 0;\n },\n calculate(input) {\n return {\n height: readUInt16LE(input, 14),\n width: readUInt16LE(input, 12)\n };\n }\n};\n\n// lib/types/tiff.ts\nvar CONSTANTS = {\n TAG: {\n WIDTH: 256,\n HEIGHT: 257,\n COMPRESSION: 259\n },\n TYPE: {\n SHORT: 3,\n LONG: 4,\n LONG8: 16\n },\n ENTRY_SIZE: {\n STANDARD: 12,\n BIG: 20\n },\n COUNT_SIZE: {\n STANDARD: 2,\n BIG: 8\n }\n};\nfunction readIFD(input, { isBigEndian, isBigTiff }) {\n const ifdOffset = isBigTiff ? Number(readUInt64(input, 8, isBigEndian)) : readUInt(input, 32, 4, isBigEndian);\n const entryCountSize = isBigTiff ? CONSTANTS.COUNT_SIZE.BIG : CONSTANTS.COUNT_SIZE.STANDARD;\n return input.slice(ifdOffset + entryCountSize);\n}\nfunction readTagValue(input, type, offset, isBigEndian) {\n switch (type) {\n case CONSTANTS.TYPE.SHORT:\n return readUInt(input, 16, offset, isBigEndian);\n case CONSTANTS.TYPE.LONG:\n return readUInt(input, 32, offset, isBigEndian);\n case CONSTANTS.TYPE.LONG8: {\n const value = Number(readUInt64(input, offset, isBigEndian));\n if (value > Number.MAX_SAFE_INTEGER) {\n throw new TypeError(\"Value too large\");\n }\n return value;\n }\n default:\n return 0;\n }\n}\nfunction nextTag(input, isBigTiff) {\n const entrySize = isBigTiff ? CONSTANTS.ENTRY_SIZE.BIG : CONSTANTS.ENTRY_SIZE.STANDARD;\n if (input.length > entrySize) {\n return input.slice(entrySize);\n }\n}\nfunction extractTags(input, { isBigEndian, isBigTiff }) {\n const tags = {};\n let temp = input;\n while (temp?.length) {\n const code = readUInt(temp, 16, 0, isBigEndian);\n const type = readUInt(temp, 16, 2, isBigEndian);\n const length = isBigTiff ? Number(readUInt64(temp, 4, isBigEndian)) : readUInt(temp, 32, 4, isBigEndian);\n if (code === 0) break;\n if (length === 1 && (type === CONSTANTS.TYPE.SHORT || type === CONSTANTS.TYPE.LONG || isBigTiff && type === CONSTANTS.TYPE.LONG8)) {\n const valueOffset = isBigTiff ? 12 : 8;\n tags[code] = readTagValue(temp, type, valueOffset, isBigEndian);\n }\n temp = nextTag(temp, isBigTiff);\n }\n return tags;\n}\nfunction determineFormat(input) {\n const signature = toUTF8String(input, 0, 2);\n const version = readUInt(input, 16, 2, signature === \"MM\");\n return {\n isBigEndian: signature === \"MM\",\n isBigTiff: version === 43\n };\n}\nfunction validateBigTIFFHeader(input, isBigEndian) {\n const byteSize = readUInt(input, 16, 4, isBigEndian);\n const reserved = readUInt(input, 16, 6, isBigEndian);\n if (byteSize !== 8 || reserved !== 0) {\n throw new TypeError(\"Invalid BigTIFF header\");\n }\n}\nvar signatures = /* @__PURE__ */ new Set([\n \"49492a00\",\n // Little Endian\n \"4d4d002a\",\n // Big Endian\n \"49492b00\",\n // BigTIFF Little Endian\n \"4d4d002b\"\n // BigTIFF Big Endian\n]);\nvar TIFF = {\n validate: (input) => {\n const signature = toHexString(input, 0, 4);\n return signatures.has(signature);\n },\n calculate(input) {\n const format = determineFormat(input);\n if (format.isBigTiff) {\n validateBigTIFFHeader(input, format.isBigEndian);\n }\n const ifdBuffer = readIFD(input, format);\n const tags = extractTags(ifdBuffer, format);\n const info = {\n height: tags[CONSTANTS.TAG.HEIGHT],\n width: tags[CONSTANTS.TAG.WIDTH],\n type: format.isBigTiff ? \"bigtiff\" : \"tiff\"\n };\n if (tags[CONSTANTS.TAG.COMPRESSION]) {\n info.compression = tags[CONSTANTS.TAG.COMPRESSION];\n }\n if (!info.width || !info.height) {\n throw new TypeError(\"Invalid Tiff. Missing tags\");\n }\n return info;\n }\n};\n\n// lib/types/webp.ts\nfunction calculateExtended(input) {\n return {\n height: 1 + readUInt24LE(input, 7),\n width: 1 + readUInt24LE(input, 4)\n };\n}\nfunction calculateLossless(input) {\n return {\n height: 1 + ((input[4] & 15) << 10 | input[3] << 2 | (input[2] & 192) >> 6),\n width: 1 + ((input[2] & 63) << 8 | input[1])\n };\n}\nfunction calculateLossy(input) {\n return {\n height: readInt16LE(input, 8) & 16383,\n width: readInt16LE(input, 6) & 16383\n };\n}\nvar WEBP = {\n validate(input) {\n const riffHeader = \"RIFF\" === toUTF8String(input, 0, 4);\n const webpHeader = \"WEBP\" === toUTF8String(input, 8, 12);\n const vp8Header = \"VP8\" === toUTF8String(input, 12, 15);\n return riffHeader && webpHeader && vp8Header;\n },\n calculate(_input) {\n const chunkHeader = toUTF8String(_input, 12, 16);\n const input = _input.slice(20, 30);\n if (chunkHeader === \"VP8X\") {\n const extendedHeader = input[0];\n const validStart = (extendedHeader & 192) === 0;\n const validEnd = (extendedHeader & 1) === 0;\n if (validStart && validEnd) {\n return calculateExtended(input);\n }\n throw new TypeError(\"Invalid WebP\");\n }\n if (chunkHeader === \"VP8 \" && input[0] !== 47) {\n return calculateLossy(input);\n }\n const signature = toHexString(input, 3, 6);\n if (chunkHeader === \"VP8L\" && signature !== \"9d012a\") {\n return calculateLossless(input);\n }\n throw new TypeError(\"Invalid WebP\");\n }\n};\n\n// lib/types/index.ts\nvar typeHandlers = /* @__PURE__ */ new Map([\n [\"bmp\", BMP],\n [\"cur\", CUR],\n [\"dds\", DDS],\n [\"gif\", GIF],\n [\"heif\", HEIF],\n [\"icns\", ICNS],\n [\"ico\", ICO],\n [\"j2c\", J2C],\n [\"jp2\", JP2],\n [\"jpg\", JPG],\n [\"jxl\", JXL],\n [\"jxl-stream\", JXLStream],\n [\"ktx\", KTX],\n [\"png\", PNG],\n [\"pnm\", PNM],\n [\"psd\", PSD],\n [\"svg\", SVG],\n [\"tga\", TGA],\n [\"tiff\", TIFF],\n [\"webp\", WEBP]\n]);\nvar types = Array.from(typeHandlers.keys());\n\n// lib/detector.ts\nvar firstBytes = /* @__PURE__ */ new Map([\n [0, \"heif\"],\n [56, \"psd\"],\n [66, \"bmp\"],\n [68, \"dds\"],\n [71, \"gif\"],\n [73, \"tiff\"],\n [77, \"tiff\"],\n [82, \"webp\"],\n [105, \"icns\"],\n [137, \"png\"],\n [255, \"jpg\"]\n]);\nfunction detector(input) {\n const byte = input[0];\n const type = firstBytes.get(byte);\n if (type && typeHandlers.get(type).validate(input)) {\n return type;\n }\n return types.find((type2) => typeHandlers.get(type2).validate(input));\n}\n\n// lib/lookup.ts\nvar globalOptions = {\n disabledTypes: []\n};\nfunction imageSize(input) {\n const type = detector(input);\n if (typeof type !== \"undefined\") {\n if (globalOptions.disabledTypes.indexOf(type) > -1) {\n throw new TypeError(`disabled file type: ${type}`);\n }\n const size = typeHandlers.get(type).calculate(input);\n if (size !== void 0) {\n size.type = size.type ?? type;\n if (size.images && size.images.length > 1) {\n const largestImage = size.images.reduce((largest, current) => {\n return current.width * current.height > largest.width * largest.height ? current : largest;\n }, size.images[0]);\n size.width = largestImage.width;\n size.height = largestImage.height;\n }\n return size;\n }\n }\n throw new TypeError(`unsupported file type: ${type}`);\n}\nvar disableTypes = (types2) => {\n globalOptions.disabledTypes = types2;\n};\n\nexport { imageSize as default, disableTypes, imageSize, types };\n"],"x_google_ignoreList":[0],"mappings":"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"}
|
|
@@ -47,4 +47,4 @@ async function devConsoleEmailDeliver(event, _ctx) {
|
|
|
47
47
|
|
|
48
48
|
//#endregion
|
|
49
49
|
export { getDevEmails as i, clearDevEmails as n, devConsoleEmailDeliver as r, DEV_CONSOLE_EMAIL_PLUGIN_ID as t };
|
|
50
|
-
//# sourceMappingURL=email-console-
|
|
50
|
+
//# sourceMappingURL=email-console-CEJgR_LB.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email-console-
|
|
1
|
+
{"version":3,"file":"email-console-CEJgR_LB.mjs","names":[],"sources":["../src/plugins/email-console.ts"],"sourcesContent":["/**\n * Dev Console Email Provider\n *\n * Built-in plugin that registers email:deliver as an exclusive hook.\n * Logs emails to console and stores them in memory (capped at 100).\n * Auto-activated when import.meta.env.DEV is true and no other provider is selected.\n *\n */\n\nimport type { EmailDeliverEvent, EmailMessage, PluginContext } from \"./types.js\";\n\n/** Plugin ID for the dev console email provider */\nexport const DEV_CONSOLE_EMAIL_PLUGIN_ID = \"emdash-console-email\";\n\n/** Maximum number of emails to keep in memory */\nconst MAX_STORED_EMAILS = 100;\n\n/**\n * Stored email record (in-memory only)\n */\nexport interface StoredEmail {\n\tmessage: EmailMessage;\n\tsource: string;\n\tsentAt: string;\n}\n\n/**\n * In-memory store for dev emails.\n * Uses globalThis so the same array is shared across Vite SSR module\n * instances (the runtime and the route handler may load separate copies\n * of this module, but globalThis is always the same object).\n */\nconst GLOBAL_KEY = Symbol.for(\"emdash:dev-emails\");\nconst g = globalThis as Record<symbol, unknown>;\nconst storedEmails: StoredEmail[] = (() => {\n\t// eslint-disable-next-line typescript/no-unsafe-type-assertion -- globalThis singleton pattern (see request-context.ts)\n\tconst existing = g[GLOBAL_KEY] as StoredEmail[] | undefined;\n\tif (existing) return existing;\n\tconst fresh: StoredEmail[] = [];\n\tg[GLOBAL_KEY] = fresh;\n\treturn fresh;\n})();\n\n/**\n * Get all stored dev emails (most recent first).\n */\nexport function getDevEmails(): StoredEmail[] {\n\treturn storedEmails.toReversed();\n}\n\n/**\n * Clear all stored dev emails.\n */\nexport function clearDevEmails(): void {\n\tstoredEmails.length = 0;\n}\n\n/**\n * The email:deliver handler for the dev console provider.\n * Logs to console and stores in memory.\n */\nexport async function devConsoleEmailDeliver(\n\tevent: EmailDeliverEvent,\n\t_ctx: PluginContext,\n): Promise<void> {\n\tconst { message, source } = event;\n\n\tconsole.log(\n\t\t`\\n📧 [dev-email] Email sent\\n` +\n\t\t\t` From: ${source}\\n` +\n\t\t\t` To: ${message.to}\\n` +\n\t\t\t` Subject: ${message.subject}\\n` +\n\t\t\t` Text: ${message.text.slice(0, 200)}${message.text.length > 200 ? \"...\" : \"\"}\\n`,\n\t);\n\n\t// Store the email\n\tstoredEmails.push({\n\t\tmessage,\n\t\tsource,\n\t\tsentAt: new Date().toISOString(),\n\t});\n\n\t// Cap at MAX_STORED_EMAILS\n\twhile (storedEmails.length > MAX_STORED_EMAILS) {\n\t\tstoredEmails.shift();\n\t}\n}\n"],"mappings":";;AAYA,MAAa,8BAA8B;;AAG3C,MAAM,oBAAoB;;;;;;;AAiB1B,MAAM,aAAa,OAAO,IAAI,oBAAoB;AAClD,MAAM,IAAI;AACV,MAAM,sBAAqC;CAE1C,MAAM,WAAW,EAAE;AACnB,KAAI,SAAU,QAAO;CACrB,MAAM,QAAuB,EAAE;AAC/B,GAAE,cAAc;AAChB,QAAO;IACJ;;;;AAKJ,SAAgB,eAA8B;AAC7C,QAAO,aAAa,YAAY;;;;;AAMjC,SAAgB,iBAAuB;AACtC,cAAa,SAAS;;;;;;AAOvB,eAAsB,uBACrB,OACA,MACgB;CAChB,MAAM,EAAE,SAAS,WAAW;AAE5B,SAAQ,IACP,yCACa,OAAO,WACT,QAAQ,GAAG,gBACN,QAAQ,QAAQ,aACnB,QAAQ,KAAK,MAAM,GAAG,IAAI,GAAG,QAAQ,KAAK,SAAS,MAAM,QAAQ,GAAG,IACjF;AAGD,cAAa,KAAK;EACjB;EACA;EACA,yBAAQ,IAAI,MAAM,EAAC,aAAa;EAChC,CAAC;AAGF,QAAO,aAAa,SAAS,kBAC5B,cAAa,OAAO"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { t as imageSize } from "./dist-
|
|
2
|
-
import { n as normalizeMime } from "./mime-
|
|
1
|
+
import { t as imageSize } from "./dist-89xCrGqi.mjs";
|
|
2
|
+
import { n as normalizeMime } from "./mime-CUIG6x84.mjs";
|
|
3
3
|
import { encode } from "blurhash";
|
|
4
4
|
|
|
5
5
|
//#region src/media/placeholder.ts
|
|
@@ -191,4 +191,4 @@ async function enrichImageMetadata(bytes, contentType, opts) {
|
|
|
191
191
|
|
|
192
192
|
//#endregion
|
|
193
193
|
export { generatePlaceholder as n, enrichImageMetadata as t };
|
|
194
|
-
//# sourceMappingURL=enrich-
|
|
194
|
+
//# sourceMappingURL=enrich-BX0IDp4z.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enrich-_ySMEvEE.mjs","names":[],"sources":["../src/media/placeholder.ts","../src/media/enrich.ts"],"sourcesContent":["/**\n * Image Placeholder Generation\n *\n * Generates blurhash and dominant color from image buffers for LQIP support.\n * Decodes images via jpeg-js (pure JS) and upng-js (pure JS, uses pako for\n * deflate). No Node-specific dependencies — works in Workers and Node SSR.\n */\n\nimport { encode } from \"blurhash\";\nimport { imageSize } from \"image-size\";\n\nimport { normalizeMime } from \"./mime.js\";\n\nexport interface PlaceholderData {\n\tblurhash: string;\n\tdominantColor: string;\n}\n\nconst SUPPORTED_TYPES: Record<string, \"jpeg\" | \"png\"> = {\n\t\"image/jpeg\": \"jpeg\",\n\t\"image/jpg\": \"jpeg\",\n\t\"image/png\": \"png\",\n};\n\n/** Max width for blurhash input. Encode is O(w*h*components), so downsample first. */\nconst MAX_ENCODE_WIDTH = 32;\n\n/** Max decoded RGBA size (32 MB). Images exceeding this skip placeholder generation. */\nconst MAX_DECODED_BYTES = 32 * 1024 * 1024;\n\ninterface DecodedImage {\n\twidth: number;\n\theight: number;\n\tdata: Uint8Array;\n}\n\n/**\n * Decode a JPEG buffer into raw RGBA pixel data.\n */\nasync function decodeJpeg(buffer: Uint8Array): Promise<DecodedImage> {\n\tconst { decode } = await import(\"jpeg-js\");\n\tconst result = decode(buffer, { useTArray: true });\n\treturn { width: result.width, height: result.height, data: result.data };\n}\n\n/**\n * Decode a PNG buffer into raw RGBA pixel data.\n * Uses upng-js (pure JS with pako deflate) — no Node zlib dependency.\n */\nasync function decodePng(buffer: Uint8Array): Promise<DecodedImage> {\n\t// @ts-expect-error -- upng-js has no type declarations\n\tconst UPNG = (await import(\"upng-js\")).default;\n\tconst img = UPNG.decode(buffer.buffer);\n\t// toRGBA8 returns an array of frames; take the first frame\n\tconst frames: ArrayBuffer[] = UPNG.toRGBA8(img);\n\tconst rgba = new Uint8Array(frames[0]);\n\treturn { width: img.width, height: img.height, data: rgba };\n}\n\n/**\n * Extract the dominant color from RGBA pixel data.\n * Simple average of all non-transparent pixels.\n */\nfunction extractDominantColor(data: Uint8Array, width: number, height: number): string {\n\tlet r = 0;\n\tlet g = 0;\n\tlet b = 0;\n\tlet count = 0;\n\n\tconst len = width * height * 4;\n\tfor (let i = 0; i < len; i += 4) {\n\t\tconst a = data[i + 3];\n\t\tif (a < 128) continue; // skip mostly-transparent pixels\n\t\tr += data[i];\n\t\tg += data[i + 1];\n\t\tb += data[i + 2];\n\t\tcount++;\n\t}\n\n\tif (count === 0) return \"rgb(0,0,0)\";\n\n\tconst avgR = Math.round(r / count);\n\tconst avgG = Math.round(g / count);\n\tconst avgB = Math.round(b / count);\n\treturn `rgb(${avgR},${avgG},${avgB})`;\n}\n\n/**\n * Read image dimensions from headers without decoding pixel data.\n * Returns null when the header cannot be parsed.\n *\n * Shared by every caller that needs pixel dimensions so the header is parsed\n * once per buffer, not re-read inside generatePlaceholder.\n */\nexport function readDimensions(buffer: Uint8Array): { width: number; height: number } | null {\n\ttry {\n\t\tconst result = imageSize(buffer);\n\t\tif (result.width != null && result.height != null) {\n\t\t\treturn { width: result.width, height: result.height };\n\t\t}\n\t\treturn null;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\n/**\n * Generate blurhash and dominant color from an image buffer.\n * Returns null for non-image MIME types or on failure.\n *\n * @param dimensions - Optional pre-known dimensions. When present they are\n * trusted verbatim (the caller has typically already read them via\n * readDimensions); otherwise dimensions are read from this buffer's header.\n * Generation is skipped (returns null) when no dimensions are available at\n * all, or when the decoded size (width * height * 4) exceeds\n * MAX_DECODED_BYTES — both guards avoid OOM from unbounded decodes on\n * memory-constrained runtimes.\n */\nexport async function generatePlaceholder(\n\tbuffer: Uint8Array,\n\tmimeType: string,\n\tdimensions?: { width: number; height: number },\n): Promise<PlaceholderData | null> {\n\tconst format = SUPPORTED_TYPES[normalizeMime(mimeType)];\n\tif (!format) return null;\n\n\ttry {\n\t\t// Trust caller-supplied dimensions when present (the caller has usually\n\t\t// already read them via readDimensions); otherwise read them from this\n\t\t// buffer. The header is parsed at most once per call.\n\t\tconst dims = dimensions ?? readDimensions(buffer);\n\n\t\t// Safety net: the decoders allocate the full RGBA buffer with no internal\n\t\t// cap, so refuse to decode unless we can bound the output size. When we\n\t\t// have no parseable header AND no known dimensions, the decoded size is\n\t\t// unbounded — a crafted/truncated PNG whose header image-size can't read\n\t\t// could still be decodable by upng-js, so we must bail to avoid OOM on\n\t\t// memory-constrained runtimes. LQIP is progressive enhancement; missing\n\t\t// it is preferable to crashing the request.\n\t\tif (!dims) return null;\n\t\tif (dims.width * dims.height * 4 > MAX_DECODED_BYTES) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst imageData = format === \"jpeg\" ? await decodeJpeg(buffer) : await decodePng(buffer);\n\t\tconst { width, height, data } = imageData;\n\n\t\tif (width === 0 || height === 0) return null;\n\n\t\t// Downsample for blurhash encoding if needed\n\t\tlet encodePixels: Uint8ClampedArray;\n\t\tlet encodeWidth: number;\n\t\tlet encodeHeight: number;\n\n\t\tif (width > MAX_ENCODE_WIDTH) {\n\t\t\tconst scale = MAX_ENCODE_WIDTH / width;\n\t\t\tencodeWidth = MAX_ENCODE_WIDTH;\n\t\t\tencodeHeight = Math.max(1, Math.round(height * scale));\n\t\t\tencodePixels = downsample(data, width, height, encodeWidth, encodeHeight);\n\t\t} else {\n\t\t\tencodeWidth = width;\n\t\t\tencodeHeight = height;\n\t\t\tencodePixels = new Uint8ClampedArray(data.buffer, data.byteOffset, data.byteLength);\n\t\t}\n\n\t\tconst blurhash = encode(encodePixels, encodeWidth, encodeHeight, 4, 3);\n\t\tconst dominantColor = extractDominantColor(data, width, height);\n\n\t\treturn { blurhash, dominantColor };\n\t} catch {\n\t\treturn null;\n\t}\n}\n\n/**\n * Nearest-neighbor downsample of RGBA pixel data.\n */\nfunction downsample(\n\tsrc: Uint8Array,\n\tsrcW: number,\n\tsrcH: number,\n\tdstW: number,\n\tdstH: number,\n): Uint8ClampedArray {\n\tconst dst = new Uint8ClampedArray(dstW * dstH * 4);\n\n\tfor (let y = 0; y < dstH; y++) {\n\t\tconst srcY = Math.floor((y * srcH) / dstH);\n\t\tfor (let x = 0; x < dstW; x++) {\n\t\t\tconst srcX = Math.floor((x * srcW) / dstW);\n\t\t\tconst srcIdx = (srcY * srcW + srcX) * 4;\n\t\t\tconst dstIdx = (y * dstW + x) * 4;\n\t\t\tdst[dstIdx] = src[srcIdx]!;\n\t\t\tdst[dstIdx + 1] = src[srcIdx + 1]!;\n\t\t\tdst[dstIdx + 2] = src[srcIdx + 2]!;\n\t\t\tdst[dstIdx + 3] = src[srcIdx + 3]!;\n\t\t}\n\t}\n\n\treturn dst;\n}\n","/**\n * Image Metadata Enrichment\n *\n * Single seam that derives image dimensions and LQIP placeholders (blurhash,\n * dominant color) from raw image bytes. Every server-side media-creation path\n * routes through this so records are populated consistently. Pure-JS and\n * Workers-safe (image-size reads headers only; generatePlaceholder guards\n * decode size).\n */\n\nimport { normalizeMime } from \"./mime.js\";\nimport { generatePlaceholder, readDimensions } from \"./placeholder.js\";\n\nexport interface EnrichedImageMetadata {\n\twidth?: number;\n\theight?: number;\n\tblurhash?: string;\n\tdominantColor?: string;\n}\n\n/**\n * Derive dimensions + LQIP placeholders from image bytes.\n *\n * - Non-image content types return `{}`.\n * - `knownDimensions` (e.g. browser `naturalWidth/Height`) win over `image-size`\n * for the *stored record* because the browser applies EXIF orientation;\n * `image-size` reports raw header dimensions, which are swapped for\n * 90°/270°-rotated JPEGs. They are NOT used for the decode OOM guard — see below.\n * - The placeholder OOM guard uses only header dimensions read from the bytes\n * actually decoded. Caller-supplied `knownDimensions` are untrusted for the\n * guard: a client could claim a tiny size for a huge image to bypass the cap.\n * - `placeholder` lets a caller decode a smaller thumbnail for the blurhash to\n * avoid OOM on large originals; dimensions still come from `bytes`.\n * - Placeholders are jpeg/png only (the generator's supported formats); other\n * image types still get dimensions.\n */\nexport async function enrichImageMetadata(\n\tbytes: Uint8Array,\n\tcontentType: string,\n\topts?: {\n\t\tknownDimensions?: { width: number; height: number };\n\t\tplaceholder?: { bytes: Uint8Array; contentType: string };\n\t},\n): Promise<EnrichedImageMetadata> {\n\tconst normalizedContentType = normalizeMime(contentType);\n\tif (!normalizedContentType.startsWith(\"image/\")) return {};\n\n\t// Header dimensions are read once from the actual bytes. They feed the\n\t// placeholder OOM guard, which must never trust caller-supplied dimensions:\n\t// `knownDimensions` is decoupled from the buffer, so a client could claim a\n\t// tiny size for a huge image and slip past the decoded-size cap, making the\n\t// decoder allocate an unbounded RGBA buffer and OOM the runtime. Only dims\n\t// read from the buffer that actually gets decoded can bound the decode.\n\tconst headerDims = readDimensions(bytes) ?? undefined;\n\n\t// Dimensions published on the record prefer the caller's knownDimensions\n\t// (e.g. browser naturalWidth/Height, which apply EXIF orientation) over the\n\t// raw header dims, which are swapped for 90°/270°-rotated JPEGs.\n\tconst recordDims = opts?.knownDimensions ?? headerDims;\n\n\t// When a smaller thumbnail override is supplied, decode that for the blurhash\n\t// and let generatePlaceholder read the thumbnail's own header for the OOM\n\t// guard (the override buffer is what actually gets decoded). On the common\n\t// no-override path pass the header dims already read from this same buffer.\n\tconst override = opts?.placeholder;\n\tconst placeholder = await generatePlaceholder(\n\t\toverride ? override.bytes : bytes,\n\t\toverride ? normalizeMime(override.contentType) : normalizedContentType,\n\t\toverride ? undefined : headerDims,\n\t);\n\n\treturn {\n\t\twidth: recordDims?.width,\n\t\theight: recordDims?.height,\n\t\tblurhash: placeholder?.blurhash,\n\t\tdominantColor: placeholder?.dominantColor,\n\t};\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"enrich-BX0IDp4z.mjs","names":[],"sources":["../src/media/placeholder.ts","../src/media/enrich.ts"],"sourcesContent":["/**\n * Image Placeholder Generation\n *\n * Generates blurhash and dominant color from image buffers for LQIP support.\n * Decodes images via jpeg-js (pure JS) and upng-js (pure JS, uses pako for\n * deflate). No Node-specific dependencies — works in Workers and Node SSR.\n */\n\nimport { encode } from \"blurhash\";\nimport { imageSize } from \"image-size\";\n\nimport { normalizeMime } from \"./mime.js\";\n\nexport interface PlaceholderData {\n\tblurhash: string;\n\tdominantColor: string;\n}\n\nconst SUPPORTED_TYPES: Record<string, \"jpeg\" | \"png\"> = {\n\t\"image/jpeg\": \"jpeg\",\n\t\"image/jpg\": \"jpeg\",\n\t\"image/png\": \"png\",\n};\n\n/** Max width for blurhash input. Encode is O(w*h*components), so downsample first. */\nconst MAX_ENCODE_WIDTH = 32;\n\n/** Max decoded RGBA size (32 MB). Images exceeding this skip placeholder generation. */\nconst MAX_DECODED_BYTES = 32 * 1024 * 1024;\n\ninterface DecodedImage {\n\twidth: number;\n\theight: number;\n\tdata: Uint8Array;\n}\n\n/**\n * Decode a JPEG buffer into raw RGBA pixel data.\n */\nasync function decodeJpeg(buffer: Uint8Array): Promise<DecodedImage> {\n\tconst { decode } = await import(\"jpeg-js\");\n\tconst result = decode(buffer, { useTArray: true });\n\treturn { width: result.width, height: result.height, data: result.data };\n}\n\n/**\n * Decode a PNG buffer into raw RGBA pixel data.\n * Uses upng-js (pure JS with pako deflate) — no Node zlib dependency.\n */\nasync function decodePng(buffer: Uint8Array): Promise<DecodedImage> {\n\t// @ts-expect-error -- upng-js has no type declarations\n\tconst UPNG = (await import(\"upng-js\")).default;\n\tconst img = UPNG.decode(buffer.buffer);\n\t// toRGBA8 returns an array of frames; take the first frame\n\tconst frames: ArrayBuffer[] = UPNG.toRGBA8(img);\n\tconst rgba = new Uint8Array(frames[0]);\n\treturn { width: img.width, height: img.height, data: rgba };\n}\n\n/**\n * Extract the dominant color from RGBA pixel data.\n * Simple average of all non-transparent pixels.\n */\nfunction extractDominantColor(data: Uint8Array, width: number, height: number): string {\n\tlet r = 0;\n\tlet g = 0;\n\tlet b = 0;\n\tlet count = 0;\n\n\tconst len = width * height * 4;\n\tfor (let i = 0; i < len; i += 4) {\n\t\tconst a = data[i + 3];\n\t\tif (a < 128) continue; // skip mostly-transparent pixels\n\t\tr += data[i];\n\t\tg += data[i + 1];\n\t\tb += data[i + 2];\n\t\tcount++;\n\t}\n\n\tif (count === 0) return \"rgb(0,0,0)\";\n\n\tconst avgR = Math.round(r / count);\n\tconst avgG = Math.round(g / count);\n\tconst avgB = Math.round(b / count);\n\treturn `rgb(${avgR},${avgG},${avgB})`;\n}\n\n/**\n * Read image dimensions from headers without decoding pixel data.\n * Returns null when the header cannot be parsed.\n *\n * Shared by every caller that needs pixel dimensions so the header is parsed\n * once per buffer, not re-read inside generatePlaceholder.\n */\nexport function readDimensions(buffer: Uint8Array): { width: number; height: number } | null {\n\ttry {\n\t\tconst result = imageSize(buffer);\n\t\tif (result.width != null && result.height != null) {\n\t\t\treturn { width: result.width, height: result.height };\n\t\t}\n\t\treturn null;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\n/**\n * Generate blurhash and dominant color from an image buffer.\n * Returns null for non-image MIME types or on failure.\n *\n * @param dimensions - Optional pre-known dimensions. When present they are\n * trusted verbatim (the caller has typically already read them via\n * readDimensions); otherwise dimensions are read from this buffer's header.\n * Generation is skipped (returns null) when no dimensions are available at\n * all, or when the decoded size (width * height * 4) exceeds\n * MAX_DECODED_BYTES — both guards avoid OOM from unbounded decodes on\n * memory-constrained runtimes.\n */\nexport async function generatePlaceholder(\n\tbuffer: Uint8Array,\n\tmimeType: string,\n\tdimensions?: { width: number; height: number },\n): Promise<PlaceholderData | null> {\n\tconst format = SUPPORTED_TYPES[normalizeMime(mimeType)];\n\tif (!format) return null;\n\n\ttry {\n\t\t// Trust caller-supplied dimensions when present (the caller has usually\n\t\t// already read them via readDimensions); otherwise read them from this\n\t\t// buffer. The header is parsed at most once per call.\n\t\tconst dims = dimensions ?? readDimensions(buffer);\n\n\t\t// Safety net: the decoders allocate the full RGBA buffer with no internal\n\t\t// cap, so refuse to decode unless we can bound the output size. When we\n\t\t// have no parseable header AND no known dimensions, the decoded size is\n\t\t// unbounded — a crafted/truncated PNG whose header image-size can't read\n\t\t// could still be decodable by upng-js, so we must bail to avoid OOM on\n\t\t// memory-constrained runtimes. LQIP is progressive enhancement; missing\n\t\t// it is preferable to crashing the request.\n\t\tif (!dims) return null;\n\t\tif (dims.width * dims.height * 4 > MAX_DECODED_BYTES) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst imageData = format === \"jpeg\" ? await decodeJpeg(buffer) : await decodePng(buffer);\n\t\tconst { width, height, data } = imageData;\n\n\t\tif (width === 0 || height === 0) return null;\n\n\t\t// Downsample for blurhash encoding if needed\n\t\tlet encodePixels: Uint8ClampedArray;\n\t\tlet encodeWidth: number;\n\t\tlet encodeHeight: number;\n\n\t\tif (width > MAX_ENCODE_WIDTH) {\n\t\t\tconst scale = MAX_ENCODE_WIDTH / width;\n\t\t\tencodeWidth = MAX_ENCODE_WIDTH;\n\t\t\tencodeHeight = Math.max(1, Math.round(height * scale));\n\t\t\tencodePixels = downsample(data, width, height, encodeWidth, encodeHeight);\n\t\t} else {\n\t\t\tencodeWidth = width;\n\t\t\tencodeHeight = height;\n\t\t\tencodePixels = new Uint8ClampedArray(data.buffer, data.byteOffset, data.byteLength);\n\t\t}\n\n\t\tconst blurhash = encode(encodePixels, encodeWidth, encodeHeight, 4, 3);\n\t\tconst dominantColor = extractDominantColor(data, width, height);\n\n\t\treturn { blurhash, dominantColor };\n\t} catch {\n\t\treturn null;\n\t}\n}\n\n/**\n * Nearest-neighbor downsample of RGBA pixel data.\n */\nfunction downsample(\n\tsrc: Uint8Array,\n\tsrcW: number,\n\tsrcH: number,\n\tdstW: number,\n\tdstH: number,\n): Uint8ClampedArray {\n\tconst dst = new Uint8ClampedArray(dstW * dstH * 4);\n\n\tfor (let y = 0; y < dstH; y++) {\n\t\tconst srcY = Math.floor((y * srcH) / dstH);\n\t\tfor (let x = 0; x < dstW; x++) {\n\t\t\tconst srcX = Math.floor((x * srcW) / dstW);\n\t\t\tconst srcIdx = (srcY * srcW + srcX) * 4;\n\t\t\tconst dstIdx = (y * dstW + x) * 4;\n\t\t\tdst[dstIdx] = src[srcIdx]!;\n\t\t\tdst[dstIdx + 1] = src[srcIdx + 1]!;\n\t\t\tdst[dstIdx + 2] = src[srcIdx + 2]!;\n\t\t\tdst[dstIdx + 3] = src[srcIdx + 3]!;\n\t\t}\n\t}\n\n\treturn dst;\n}\n","/**\n * Image Metadata Enrichment\n *\n * Single seam that derives image dimensions and LQIP placeholders (blurhash,\n * dominant color) from raw image bytes. Every server-side media-creation path\n * routes through this so records are populated consistently. Pure-JS and\n * Workers-safe (image-size reads headers only; generatePlaceholder guards\n * decode size).\n */\n\nimport { normalizeMime } from \"./mime.js\";\nimport { generatePlaceholder, readDimensions } from \"./placeholder.js\";\n\nexport interface EnrichedImageMetadata {\n\twidth?: number;\n\theight?: number;\n\tblurhash?: string;\n\tdominantColor?: string;\n}\n\n/**\n * Derive dimensions + LQIP placeholders from image bytes.\n *\n * - Non-image content types return `{}`.\n * - `knownDimensions` (e.g. browser `naturalWidth/Height`) win over `image-size`\n * for the *stored record* because the browser applies EXIF orientation;\n * `image-size` reports raw header dimensions, which are swapped for\n * 90°/270°-rotated JPEGs. They are NOT used for the decode OOM guard — see below.\n * - The placeholder OOM guard uses only header dimensions read from the bytes\n * actually decoded. Caller-supplied `knownDimensions` are untrusted for the\n * guard: a client could claim a tiny size for a huge image to bypass the cap.\n * - `placeholder` lets a caller decode a smaller thumbnail for the blurhash to\n * avoid OOM on large originals; dimensions still come from `bytes`.\n * - Placeholders are jpeg/png only (the generator's supported formats); other\n * image types still get dimensions.\n */\nexport async function enrichImageMetadata(\n\tbytes: Uint8Array,\n\tcontentType: string,\n\topts?: {\n\t\tknownDimensions?: { width: number; height: number };\n\t\tplaceholder?: { bytes: Uint8Array; contentType: string };\n\t},\n): Promise<EnrichedImageMetadata> {\n\tconst normalizedContentType = normalizeMime(contentType);\n\tif (!normalizedContentType.startsWith(\"image/\")) return {};\n\n\t// Header dimensions are read once from the actual bytes. They feed the\n\t// placeholder OOM guard, which must never trust caller-supplied dimensions:\n\t// `knownDimensions` is decoupled from the buffer, so a client could claim a\n\t// tiny size for a huge image and slip past the decoded-size cap, making the\n\t// decoder allocate an unbounded RGBA buffer and OOM the runtime. Only dims\n\t// read from the buffer that actually gets decoded can bound the decode.\n\tconst headerDims = readDimensions(bytes) ?? undefined;\n\n\t// Dimensions published on the record prefer the caller's knownDimensions\n\t// (e.g. browser naturalWidth/Height, which apply EXIF orientation) over the\n\t// raw header dims, which are swapped for 90°/270°-rotated JPEGs.\n\tconst recordDims = opts?.knownDimensions ?? headerDims;\n\n\t// When a smaller thumbnail override is supplied, decode that for the blurhash\n\t// and let generatePlaceholder read the thumbnail's own header for the OOM\n\t// guard (the override buffer is what actually gets decoded). On the common\n\t// no-override path pass the header dims already read from this same buffer.\n\tconst override = opts?.placeholder;\n\tconst placeholder = await generatePlaceholder(\n\t\toverride ? override.bytes : bytes,\n\t\toverride ? normalizeMime(override.contentType) : normalizedContentType,\n\t\toverride ? undefined : headerDims,\n\t);\n\n\treturn {\n\t\twidth: recordDims?.width,\n\t\theight: recordDims?.height,\n\t\tblurhash: placeholder?.blurhash,\n\t\tdominantColor: placeholder?.dominantColor,\n\t};\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { i as InvalidCursorError } from "./types-CQPWhPxE.mjs";
|
|
2
|
-
import { n as mapErrorStatus } from "./errors-
|
|
2
|
+
import { n as mapErrorStatus } from "./errors-n2j49uNf.mjs";
|
|
3
3
|
|
|
4
4
|
//#region src/api/error.ts
|
|
5
5
|
/**
|
|
@@ -87,4 +87,4 @@ function unwrapResult(result, successStatus = 200) {
|
|
|
87
87
|
|
|
88
88
|
//#endregion
|
|
89
89
|
export { unwrapResult as a, requireDb as i, apiSuccess as n, handleError as r, apiError as t };
|
|
90
|
-
//# sourceMappingURL=error-
|
|
90
|
+
//# sourceMappingURL=error-D9w94fjV.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-
|
|
1
|
+
{"version":3,"file":"error-D9w94fjV.mjs","names":[],"sources":["../src/api/error.ts"],"sourcesContent":["/**\n * Standardized API error responses.\n *\n * All API routes should use these utilities instead of inline\n * `new Response(JSON.stringify({ error: ... }), ...)` patterns.\n */\n\nimport { InvalidCursorError } from \"../database/repositories/types.js\";\nimport { mapErrorStatus } from \"./errors.js\";\nimport type { ApiResult } from \"./types.js\";\n\n// Re-export everything from errors.ts so existing `import { mapErrorStatus } from \"./error.js\"` still works\nexport * from \"./errors.js\";\n\n/**\n * Standard cache headers for all API responses.\n *\n * Cache-Control: private, no-store -- prevents CDN/proxy caching of authenticated data.\n * no-store already tells caches not to store the response, so Vary is unnecessary.\n */\nconst API_CACHE_HEADERS: HeadersInit = {\n\t\"Cache-Control\": \"private, no-store\",\n};\n\n/**\n * Create a standardized error response.\n *\n * Always returns `{ success: false, error: { code, message } }` with correct\n * Content-Type. Use this for all error responses in API routes.\n */\nexport function apiError(\n\tcode: string,\n\tmessage: string,\n\tstatus: number,\n\tdetails?: Record<string, unknown>,\n): Response {\n\tconst error: { code: string; message: string; details?: Record<string, unknown> } = {\n\t\tcode,\n\t\tmessage,\n\t};\n\tif (details !== undefined) error.details = details;\n\treturn Response.json({ success: false, error }, { status, headers: API_CACHE_HEADERS });\n}\n\n/**\n * Create a standardized success response.\n *\n * Always returns `{ success: true, data: T }` with correct status code.\n * Use this for all success responses in API routes.\n */\nexport function apiSuccess<T>(data: T, status = 200): Response {\n\treturn Response.json({ success: true, data }, { status, headers: API_CACHE_HEADERS });\n}\n\n/**\n * Handle an unknown error in a catch block.\n *\n * - Logs the full error server-side\n * - Returns a generic message to the client (never leaks error.message)\n * - Use `fallbackMessage` for the public-facing message\n * - Use `fallbackCode` for the error code\n */\nexport function handleError(\n\terror: unknown,\n\tfallbackMessage: string,\n\tfallbackCode: string,\n): Response {\n\t// Bubble malformed-cursor errors as a structured 400 instead of a\n\t// generic 500.\n\tif (error instanceof InvalidCursorError) {\n\t\treturn apiError(\"INVALID_CURSOR\", error.message, 400);\n\t}\n\tconsole.error(`[${fallbackCode}]`, error);\n\treturn apiError(fallbackCode, fallbackMessage, 500);\n}\n\n/**\n * Standard initialization check.\n *\n * Returns an error response if EmDash is not initialized, or null if OK.\n * Usage: `const err = requireInit(emdash); if (err) return err;`\n */\nexport function requireInit(emdash: unknown): Response | null {\n\tif (!emdash || typeof emdash !== \"object\") {\n\t\treturn apiError(\"NOT_CONFIGURED\", \"EmDash is not initialized\", 500);\n\t}\n\treturn null;\n}\n\n/**\n * Standard database check.\n *\n * Returns an error response if the database is not available, or null if OK.\n * Usage: `const err = requireDb(emdash?.db); if (err) return err;`\n */\nexport function requireDb(db: unknown): Response | null {\n\tif (!db) {\n\t\treturn apiError(\"NOT_CONFIGURED\", \"EmDash is not initialized\", 500);\n\t}\n\treturn null;\n}\n\n/**\n * Convert an ApiResult into an HTTP Response.\n *\n * Collapses the handler-to-response boilerplate:\n * - Success: returns `apiSuccess(result.data, successStatus)`\n * - Error: returns `apiError(code, message, mapErrorStatus(code))`\n */\nexport function unwrapResult<T>(result: ApiResult<T>, successStatus = 200): Response {\n\tif (!result.success) {\n\t\treturn apiError(\n\t\t\tresult.error.code,\n\t\t\tresult.error.message,\n\t\t\tmapErrorStatus(result.error.code),\n\t\t\tresult.error.details,\n\t\t);\n\t}\n\treturn apiSuccess(result.data, successStatus);\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAoBA,MAAM,oBAAiC,EACtC,iBAAiB,qBACjB;;;;;;;AAQD,SAAgB,SACf,MACA,SACA,QACA,SACW;CACX,MAAM,QAA8E;EACnF;EACA;EACA;AACD,KAAI,YAAY,OAAW,OAAM,UAAU;AAC3C,QAAO,SAAS,KAAK;EAAE,SAAS;EAAO;EAAO,EAAE;EAAE;EAAQ,SAAS;EAAmB,CAAC;;;;;;;;AASxF,SAAgB,WAAc,MAAS,SAAS,KAAe;AAC9D,QAAO,SAAS,KAAK;EAAE,SAAS;EAAM;EAAM,EAAE;EAAE;EAAQ,SAAS;EAAmB,CAAC;;;;;;;;;;AAWtF,SAAgB,YACf,OACA,iBACA,cACW;AAGX,KAAI,iBAAiB,mBACpB,QAAO,SAAS,kBAAkB,MAAM,SAAS,IAAI;AAEtD,SAAQ,MAAM,IAAI,aAAa,IAAI,MAAM;AACzC,QAAO,SAAS,cAAc,iBAAiB,IAAI;;;;;;;;AAsBpD,SAAgB,UAAU,IAA8B;AACvD,KAAI,CAAC,GACJ,QAAO,SAAS,kBAAkB,6BAA6B,IAAI;AAEpE,QAAO;;;;;;;;;AAUR,SAAgB,aAAgB,QAAsB,gBAAgB,KAAe;AACpF,KAAI,CAAC,OAAO,QACX,QAAO,SACN,OAAO,MAAM,MACb,OAAO,MAAM,SACb,eAAe,OAAO,MAAM,KAAK,EACjC,OAAO,MAAM,QACb;AAEF,QAAO,WAAW,OAAO,MAAM,cAAc"}
|
|
@@ -25,6 +25,8 @@ const ErrorCode = {
|
|
|
25
25
|
CSRF_REJECTED: "CSRF_REJECTED",
|
|
26
26
|
CONTENT_CREATE_ERROR: "CONTENT_CREATE_ERROR",
|
|
27
27
|
CONTENT_UPDATE_ERROR: "CONTENT_UPDATE_ERROR",
|
|
28
|
+
SAVE_REJECTED: "SAVE_REJECTED",
|
|
29
|
+
CONTENT_HOOK_ERROR: "CONTENT_HOOK_ERROR",
|
|
28
30
|
CONTENT_DELETE_ERROR: "CONTENT_DELETE_ERROR",
|
|
29
31
|
CONTENT_LIST_ERROR: "CONTENT_LIST_ERROR",
|
|
30
32
|
CONTENT_GET_ERROR: "CONTENT_GET_ERROR",
|
|
@@ -74,12 +76,25 @@ const ErrorCode = {
|
|
|
74
76
|
MEDIA_CREATE_ERROR: "MEDIA_CREATE_ERROR",
|
|
75
77
|
MEDIA_UPDATE_ERROR: "MEDIA_UPDATE_ERROR",
|
|
76
78
|
MEDIA_DELETE_ERROR: "MEDIA_DELETE_ERROR",
|
|
79
|
+
MEDIA_FOLDER_LIST_ERROR: "MEDIA_FOLDER_LIST_ERROR",
|
|
80
|
+
MEDIA_FOLDER_GET_ERROR: "MEDIA_FOLDER_GET_ERROR",
|
|
81
|
+
MEDIA_FOLDER_CREATE_ERROR: "MEDIA_FOLDER_CREATE_ERROR",
|
|
82
|
+
MEDIA_FOLDER_UPDATE_ERROR: "MEDIA_FOLDER_UPDATE_ERROR",
|
|
83
|
+
MEDIA_FOLDER_DELETE_ERROR: "MEDIA_FOLDER_DELETE_ERROR",
|
|
77
84
|
MEDIA_USAGE_READ_ERROR: "MEDIA_USAGE_READ_ERROR",
|
|
78
85
|
MEDIA_USAGE_REPAIR_ERROR: "MEDIA_USAGE_REPAIR_ERROR",
|
|
86
|
+
MEDIA_USAGE_PROGRESS_READ_ERROR: "MEDIA_USAGE_PROGRESS_READ_ERROR",
|
|
87
|
+
MEDIA_USAGE_PROGRESS_ADVANCE_ERROR: "MEDIA_USAGE_PROGRESS_ADVANCE_ERROR",
|
|
88
|
+
MEDIA_USAGE_PROGRESS_NOT_ACTIVE: "MEDIA_USAGE_PROGRESS_NOT_ACTIVE",
|
|
79
89
|
MEDIA_USAGE_WORK_LIST_ERROR: "MEDIA_USAGE_WORK_LIST_ERROR",
|
|
80
90
|
MEDIA_USAGE_WORK_RETRY_ERROR: "MEDIA_USAGE_WORK_RETRY_ERROR",
|
|
81
91
|
MEDIA_USAGE_COLLECTION_DELETION_LIST_ERROR: "MEDIA_USAGE_COLLECTION_DELETION_LIST_ERROR",
|
|
82
92
|
MEDIA_USAGE_COLLECTION_DELETION_RETRY_ERROR: "MEDIA_USAGE_COLLECTION_DELETION_RETRY_ERROR",
|
|
93
|
+
MEDIA_USAGE_ACTIVATION_VERSION_MISMATCH: "MEDIA_USAGE_ACTIVATION_VERSION_MISMATCH",
|
|
94
|
+
MEDIA_USAGE_ACTIVATION_READ_ERROR: "MEDIA_USAGE_ACTIVATION_READ_ERROR",
|
|
95
|
+
MEDIA_USAGE_ACTIVATION_BUSY: "MEDIA_USAGE_ACTIVATION_BUSY",
|
|
96
|
+
MEDIA_USAGE_ACTIVATION_CONFLICT: "MEDIA_USAGE_ACTIVATION_CONFLICT",
|
|
97
|
+
MEDIA_USAGE_ACTIVATION_ADVANCE_ERROR: "MEDIA_USAGE_ACTIVATION_ADVANCE_ERROR",
|
|
83
98
|
WORK_LEASE_ACTIVE: "WORK_LEASE_ACTIVE",
|
|
84
99
|
WORK_CHANGED: "WORK_CHANGED",
|
|
85
100
|
NO_STORAGE: "NO_STORAGE",
|
|
@@ -377,8 +392,13 @@ function mapErrorStatus(code) {
|
|
|
377
392
|
case ErrorCode.TRANSLATABLE_LOCKED:
|
|
378
393
|
case ErrorCode.ENV_INCOMPATIBLE:
|
|
379
394
|
case ErrorCode.WORK_LEASE_ACTIVE:
|
|
380
|
-
case ErrorCode.WORK_CHANGED:
|
|
395
|
+
case ErrorCode.WORK_CHANGED:
|
|
396
|
+
case ErrorCode.MEDIA_USAGE_ACTIVATION_VERSION_MISMATCH:
|
|
397
|
+
case ErrorCode.MEDIA_USAGE_ACTIVATION_BUSY:
|
|
398
|
+
case ErrorCode.MEDIA_USAGE_ACTIVATION_CONFLICT:
|
|
399
|
+
case ErrorCode.MEDIA_USAGE_PROGRESS_NOT_ACTIVE: return 409;
|
|
381
400
|
case ErrorCode.TOKEN_EXPIRED: return 410;
|
|
401
|
+
case ErrorCode.SAVE_REJECTED:
|
|
382
402
|
case ErrorCode.CHECKSUM_MISMATCH:
|
|
383
403
|
case ErrorCode.INVALID_BUNDLE:
|
|
384
404
|
case ErrorCode.BUNDLE_EXTRACT_FAILED: return 422;
|
|
@@ -402,4 +422,4 @@ function mapErrorStatus(code) {
|
|
|
402
422
|
|
|
403
423
|
//#endregion
|
|
404
424
|
export { mapErrorStatus as n, ErrorCode as t };
|
|
405
|
-
//# sourceMappingURL=errors-
|
|
425
|
+
//# sourceMappingURL=errors-n2j49uNf.mjs.map
|