emdash 0.31.1 → 0.33.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{adapters-C0ONzkUP.d.mts → adapters-BMyNSSZi.d.mts} +9 -1
- package/dist/adapters-BMyNSSZi.d.mts.map +1 -0
- package/dist/after-CBU2vkoO.mjs +96 -0
- package/dist/after-CBU2vkoO.mjs.map +1 -0
- package/dist/{allowed-origins-CCEi9bPI.mjs → allowed-origins-CG1pACtS.mjs} +2 -2
- package/dist/{allowed-origins-CCEi9bPI.mjs.map → allowed-origins-CG1pACtS.mjs.map} +1 -1
- package/dist/api/route-utils.d.mts +3 -4
- package/dist/api/route-utils.d.mts.map +1 -1
- package/dist/api/route-utils.mjs +23 -21
- package/dist/api/route-utils.mjs.map +1 -1
- package/dist/api/schemas/index.d.mts +2 -2
- package/dist/api/schemas/index.mjs +5 -5
- package/dist/{api-BkqFzIu4.mjs → api-D2hunekQ.mjs} +254 -48
- package/dist/api-D2hunekQ.mjs.map +1 -0
- package/dist/{api-tokens-uPt8UDpx.mjs → api-tokens-CSND0i1z.mjs} +2 -2
- package/dist/{api-tokens-uPt8UDpx.mjs.map → api-tokens-CSND0i1z.mjs.map} +1 -1
- package/dist/{apply-DuXsqll7.mjs → apply-kwNEJW2l.mjs} +36 -23
- package/dist/apply-kwNEJW2l.mjs.map +1 -0
- package/dist/astro/index.d.mts +12 -12
- package/dist/astro/index.mjs +17 -3
- package/dist/astro/index.mjs.map +1 -1
- package/dist/astro/middleware/auth.d.mts +10 -10
- package/dist/astro/middleware/auth.mjs +8 -8
- package/dist/astro/middleware/redirect.d.mts.map +1 -1
- package/dist/astro/middleware/redirect.mjs +8 -8
- package/dist/astro/middleware/redirect.mjs.map +1 -1
- package/dist/astro/middleware/request-context.mjs +4 -4
- package/dist/astro/middleware/setup.mjs +1 -1
- package/dist/astro/middleware.d.mts +10 -10
- package/dist/astro/middleware.d.mts.map +1 -1
- package/dist/astro/middleware.mjs +370 -171
- package/dist/astro/middleware.mjs.map +1 -1
- package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +7 -7
- package/dist/astro/routes/api/admin/allowed-domains/index.mjs +7 -7
- package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +4 -4
- package/dist/astro/routes/api/admin/api-tokens/index.mjs +5 -5
- package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +5 -5
- package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +10 -10
- package/dist/astro/routes/api/admin/byline-fields/index.mjs +10 -10
- package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +10 -10
- package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +19 -18
- package/dist/astro/routes/api/admin/bylines/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +19 -18
- package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/admin/bylines/index.mjs +19 -19
- package/dist/astro/routes/api/admin/comments/_id_/status.mjs +16 -16
- package/dist/astro/routes/api/admin/comments/_id_/status.mjs.map +1 -1
- package/dist/astro/routes/api/admin/comments/_id_.mjs +7 -7
- package/dist/astro/routes/api/admin/comments/bulk.mjs +12 -12
- package/dist/astro/routes/api/admin/comments/counts.mjs +7 -7
- package/dist/astro/routes/api/admin/comments/index.mjs +12 -12
- package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +5 -5
- package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +4 -4
- package/dist/astro/routes/api/admin/media-usage/repair.mjs +13 -11
- package/dist/astro/routes/api/admin/media-usage/repair.mjs.map +1 -1
- package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +4 -4
- package/dist/astro/routes/api/admin/oauth-clients/index.mjs +4 -4
- package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +47 -44
- package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +47 -44
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +46 -43
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/mcp.mjs +5 -5
- package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs +46 -43
- package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +46 -43
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +46 -43
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/index.mjs +46 -43
- package/dist/astro/routes/api/admin/plugins/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +3 -3
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +46 -43
- 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 +46 -43
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +46 -43
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +46 -43
- 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 +47 -44
- package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +46 -43
- package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/install.mjs +47 -44
- package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/updates.mjs +46 -43
- package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +46 -43
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +3 -3
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +46 -43
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/users/_id_/disable.mjs +3 -3
- package/dist/astro/routes/api/admin/users/_id_/enable.mjs +2 -2
- package/dist/astro/routes/api/admin/users/_id_/index.mjs +8 -8
- package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +5 -5
- package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs.map +1 -1
- package/dist/astro/routes/api/admin/users/index.mjs +7 -7
- package/dist/astro/routes/api/auth/dev-bypass.mjs +7 -6
- package/dist/astro/routes/api/auth/dev-bypass.mjs.map +1 -1
- package/dist/astro/routes/api/auth/invite/accept.mjs +2 -2
- package/dist/astro/routes/api/auth/invite/complete.mjs +12 -12
- package/dist/astro/routes/api/auth/invite/index.mjs +10 -10
- package/dist/astro/routes/api/auth/invite/index.mjs.map +1 -1
- package/dist/astro/routes/api/auth/invite/register-options.mjs +11 -11
- package/dist/astro/routes/api/auth/logout.mjs +3 -3
- package/dist/astro/routes/api/auth/magic-link/send.mjs +12 -12
- package/dist/astro/routes/api/auth/magic-link/send.mjs.map +1 -1
- package/dist/astro/routes/api/auth/magic-link/verify.mjs +3 -3
- package/dist/astro/routes/api/auth/me.mjs +8 -8
- package/dist/astro/routes/api/auth/mode.mjs +3 -3
- 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 +7 -7
- package/dist/astro/routes/api/auth/passkey/index.mjs +2 -2
- package/dist/astro/routes/api/auth/passkey/options.mjs +13 -13
- package/dist/astro/routes/api/auth/passkey/register/options.mjs +11 -11
- package/dist/astro/routes/api/auth/passkey/register/verify.mjs +12 -12
- package/dist/astro/routes/api/auth/passkey/verify.mjs +12 -12
- package/dist/astro/routes/api/auth/signup/complete.mjs +12 -12
- package/dist/astro/routes/api/auth/signup/request.mjs +12 -12
- package/dist/astro/routes/api/auth/signup/request.mjs.map +1 -1
- package/dist/astro/routes/api/auth/signup/verify.mjs +2 -2
- package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +18 -18
- package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs.map +1 -1
- package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +15 -15
- package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +4 -4
- package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +4 -4
- package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +14 -14
- package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +9 -9
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs +19 -17
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs +19 -17
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +4 -4
- package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +9 -9
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +17 -16
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +4 -4
- package/dist/astro/routes/api/content/_collection_/_id_.d.mts.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_.mjs +10 -10
- package/dist/astro/routes/api/content/_collection_/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/authors.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/index.mjs +9 -9
- package/dist/astro/routes/api/content/_collection_/trash.mjs +8 -8
- package/dist/astro/routes/api/dashboard.mjs +9 -9
- package/dist/astro/routes/api/dev/emails.mjs +3 -3
- package/dist/astro/routes/api/import/probe.d.mts +3 -3
- package/dist/astro/routes/api/import/probe.mjs +19 -19
- package/dist/astro/routes/api/import/wordpress/analyze.mjs +4 -4
- package/dist/astro/routes/api/import/wordpress/execute.d.mts +11 -11
- package/dist/astro/routes/api/import/wordpress/execute.mjs +16 -15
- package/dist/astro/routes/api/import/wordpress/execute.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress/media.d.mts +10 -10
- package/dist/astro/routes/api/import/wordpress/media.mjs +10 -10
- package/dist/astro/routes/api/import/wordpress/prepare.mjs +11 -11
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +11 -11
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +13 -11
- 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 +19 -19
- package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +11 -11
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +28 -27
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs.map +1 -1
- package/dist/astro/routes/api/manifest.mjs +5 -5
- package/dist/astro/routes/api/mcp.mjs +42 -42
- package/dist/astro/routes/api/media/_id_/confirm.d.mts.map +1 -1
- package/dist/astro/routes/api/media/_id_/confirm.mjs +106 -37
- package/dist/astro/routes/api/media/_id_/confirm.mjs.map +1 -1
- package/dist/astro/routes/api/media/_id_/upload.d.mts +8 -0
- package/dist/astro/routes/api/media/_id_/upload.d.mts.map +1 -0
- package/dist/astro/routes/api/media/_id_/upload.mjs +168 -0
- package/dist/astro/routes/api/media/_id_/upload.mjs.map +1 -0
- package/dist/astro/routes/api/media/_id_/usage.mjs +15 -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 +22 -15
- package/dist/astro/routes/api/media/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/media/file/_...key_.mjs +2 -2
- package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +3 -3
- package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +3 -3
- package/dist/astro/routes/api/media/providers/index.mjs +3 -3
- package/dist/astro/routes/api/media/upload-url.d.mts.map +1 -1
- package/dist/astro/routes/api/media/upload-url.mjs +35 -24
- package/dist/astro/routes/api/media/upload-url.mjs.map +1 -1
- package/dist/astro/routes/api/media.mjs +14 -13
- package/dist/astro/routes/api/media.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +12 -11
- package/dist/astro/routes/api/menus/_name_/items/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/items.mjs +12 -11
- package/dist/astro/routes/api/menus/_name_/items.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/reorder.mjs +12 -11
- package/dist/astro/routes/api/menus/_name_/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/translations.mjs +12 -11
- package/dist/astro/routes/api/menus/_name_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_.mjs +12 -11
- package/dist/astro/routes/api/menus/_name_.mjs.map +1 -1
- package/dist/astro/routes/api/menus/index.mjs +12 -11
- package/dist/astro/routes/api/menus/index.mjs.map +1 -1
- package/dist/astro/routes/api/oauth/authorize.mjs +6 -6
- package/dist/astro/routes/api/oauth/device/authorize.mjs +6 -6
- package/dist/astro/routes/api/oauth/device/code.mjs +9 -9
- package/dist/astro/routes/api/oauth/device/token.mjs +8 -8
- package/dist/astro/routes/api/oauth/register.mjs +3 -3
- package/dist/astro/routes/api/oauth/token/refresh.mjs +6 -6
- package/dist/astro/routes/api/oauth/token/revoke.mjs +6 -6
- package/dist/astro/routes/api/oauth/token.mjs +6 -6
- package/dist/astro/routes/api/openapi.json.mjs +62 -9
- package/dist/astro/routes/api/openapi.json.mjs.map +1 -1
- package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +5 -5
- package/dist/astro/routes/api/redirects/404s/index.mjs +12 -12
- package/dist/astro/routes/api/redirects/404s/summary.mjs +12 -12
- package/dist/astro/routes/api/redirects/_id_.mjs +14 -13
- package/dist/astro/routes/api/redirects/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/redirects/index.mjs +14 -13
- package/dist/astro/routes/api/redirects/index.mjs.map +1 -1
- package/dist/astro/routes/api/relations/_id_/index.mjs +19 -17
- package/dist/astro/routes/api/relations/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/relations/_id_/translations.mjs +14 -12
- package/dist/astro/routes/api/relations/_id_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/relations/index.mjs +19 -17
- package/dist/astro/routes/api/relations/index.mjs.map +1 -1
- package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +3 -3
- package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +4 -4
- package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +46 -43
- 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 +46 -43
- 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 +46 -43
- package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +46 -43
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/index.mjs +46 -43
- package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/reorder.d.mts +8 -0
- package/dist/astro/routes/api/schema/collections/reorder.d.mts.map +1 -0
- package/dist/astro/routes/api/schema/collections/reorder.mjs +66 -0
- package/dist/astro/routes/api/schema/collections/reorder.mjs.map +1 -0
- package/dist/astro/routes/api/schema/index.mjs +12 -8
- package/dist/astro/routes/api/schema/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs +46 -43
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/schema/orphans/index.mjs +46 -43
- package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
- package/dist/astro/routes/api/search/enable.d.mts +1 -0
- package/dist/astro/routes/api/search/enable.d.mts.map +1 -1
- package/dist/astro/routes/api/search/enable.mjs +18 -13
- package/dist/astro/routes/api/search/enable.mjs.map +1 -1
- package/dist/astro/routes/api/search/index.mjs +12 -11
- package/dist/astro/routes/api/search/index.mjs.map +1 -1
- package/dist/astro/routes/api/search/rebuild.mjs +14 -13
- package/dist/astro/routes/api/search/rebuild.mjs.map +1 -1
- package/dist/astro/routes/api/search/stats.mjs +8 -7
- package/dist/astro/routes/api/search/stats.mjs.map +1 -1
- package/dist/astro/routes/api/search/suggest.mjs +12 -11
- package/dist/astro/routes/api/search/suggest.mjs.map +1 -1
- package/dist/astro/routes/api/sections/_slug_.mjs +11 -11
- package/dist/astro/routes/api/sections/index.mjs +11 -11
- package/dist/astro/routes/api/settings/backups/archives/_name_.mjs +7 -7
- package/dist/astro/routes/api/settings/backups/archives/index.mjs +6 -6
- package/dist/astro/routes/api/settings/backups/export.mjs +7 -7
- package/dist/astro/routes/api/settings/backups/index.mjs +8 -8
- package/dist/astro/routes/api/settings/email.mjs +5 -5
- package/dist/astro/routes/api/settings.mjs +16 -16
- package/dist/astro/routes/api/setup/admin-verify.mjs +13 -13
- package/dist/astro/routes/api/setup/admin.mjs +12 -12
- package/dist/astro/routes/api/setup/dev-bypass.mjs +31 -29
- package/dist/astro/routes/api/setup/dev-bypass.mjs.map +1 -1
- package/dist/astro/routes/api/setup/dev-reset.mjs +3 -3
- package/dist/astro/routes/api/setup/index.mjs +33 -31
- package/dist/astro/routes/api/setup/index.mjs.map +1 -1
- package/dist/astro/routes/api/setup/status.mjs +4 -4
- package/dist/astro/routes/api/snapshot.mjs +9 -9
- package/dist/astro/routes/api/taxonomies/_name_/reorder.d.mts +8 -0
- package/dist/astro/routes/api/taxonomies/_name_/reorder.d.mts.map +1 -0
- package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs +43 -0
- package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs.map +1 -0
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +17 -16
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +17 -16
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.d.mts.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +22 -18
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/index.mjs +17 -16
- package/dist/astro/routes/api/taxonomies/index.mjs.map +1 -1
- package/dist/astro/routes/api/themes/preview.mjs +7 -7
- package/dist/astro/routes/api/typegen.mjs +5 -5
- package/dist/astro/routes/api/well-known/auth.mjs +2 -2
- package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +2 -2
- package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +2 -2
- package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +8 -8
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +11 -11
- package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +11 -11
- package/dist/astro/routes/api/widget-areas/_name_.mjs +6 -6
- package/dist/astro/routes/api/widget-areas/index.mjs +11 -11
- package/dist/astro/routes/api/widget-components.mjs +3 -3
- package/dist/astro/routes/robots.txt.mjs +9 -9
- package/dist/astro/routes/sitemap-_collection_.xml.mjs +13 -13
- package/dist/astro/routes/sitemap.xml.mjs +10 -10
- package/dist/astro/types.d.mts +20 -13
- package/dist/astro/types.d.mts.map +1 -1
- package/dist/auth/providers/github.d.mts +1 -1
- package/dist/auth/providers/google.d.mts +1 -1
- package/dist/{authorize-6WPZa1xZ.mjs → authorize-qRhWQnel.mjs} +2 -2
- package/dist/{authorize-6WPZa1xZ.mjs.map → authorize-qRhWQnel.mjs.map} +1 -1
- package/dist/{backup-DoW-H0r4.mjs → backup-CtA6LDNw.mjs} +5 -5
- package/dist/{backup-DoW-H0r4.mjs.map → backup-CtA6LDNw.mjs.map} +1 -1
- package/dist/{byline-BTOxUlFF.mjs → byline-Cp6csL84.mjs} +9 -9
- package/dist/{byline-BTOxUlFF.mjs.map → byline-Cp6csL84.mjs.map} +1 -1
- package/dist/{byline-fields-CdU_LTF1.mjs → byline-fields-CNc0Yq5i.mjs} +2 -2
- package/dist/{byline-fields-CdU_LTF1.mjs.map → byline-fields-CNc0Yq5i.mjs.map} +1 -1
- package/dist/{byline-registry-BCuOp4UF.mjs → byline-registry-ZkPKqEwC.mjs} +4 -4
- package/dist/{byline-registry-BCuOp4UF.mjs.map → byline-registry-ZkPKqEwC.mjs.map} +1 -1
- package/dist/{bylines-Bc-3xtpz.mjs → bylines-CEj5CdT4.mjs} +7 -7
- package/dist/{bylines-Bc-3xtpz.mjs.map → bylines-CEj5CdT4.mjs.map} +1 -1
- package/dist/{bylines-oVN0iPwX.mjs → bylines-cf-C9lmF.mjs} +5 -5
- package/dist/{bylines-oVN0iPwX.mjs.map → bylines-cf-C9lmF.mjs.map} +1 -1
- package/dist/cache-C9FptTFR.mjs +108 -0
- package/dist/cache-C9FptTFR.mjs.map +1 -0
- package/dist/{challenge-store-BFzgFRog.mjs → challenge-store-D9VNKELo.mjs} +1 -1
- package/dist/{challenge-store-BFzgFRog.mjs.map → challenge-store-D9VNKELo.mjs.map} +1 -1
- package/dist/{chunks-Bq-5DPrD.mjs → chunks-DbYzib_k.mjs} +2 -2
- package/dist/{chunks-Bq-5DPrD.mjs.map → chunks-DbYzib_k.mjs.map} +1 -1
- package/dist/cli/index.mjs +41 -32
- package/dist/cli/index.mjs.map +1 -1
- package/dist/client/cf-access.d.mts +1 -1
- package/dist/client/index.d.mts +1 -1
- package/dist/client/index.mjs +2 -2
- package/dist/{comment-B9cUud8H.mjs → comment-BIkJ6Fil.mjs} +3 -3
- package/dist/{comment-B9cUud8H.mjs.map → comment-BIkJ6Fil.mjs.map} +1 -1
- package/dist/{comment-reaction-VUXO981F.mjs → comment-reaction-D-laEceb.mjs} +2 -2
- package/dist/{comment-reaction-VUXO981F.mjs.map → comment-reaction-D-laEceb.mjs.map} +1 -1
- package/dist/{comments-PXj1E9Si.mjs → comments-0_w6KChA.mjs} +3 -3
- package/dist/{comments-PXj1E9Si.mjs.map → comments-0_w6KChA.mjs.map} +1 -1
- package/dist/{components-DZkL4Fx0.mjs → components-BPxrRjpE.mjs} +1 -1
- package/dist/{components-DZkL4Fx0.mjs.map → components-BPxrRjpE.mjs.map} +1 -1
- package/dist/{config-B6b_BobR.mjs → config-DyF3OKg_.mjs} +15 -10
- package/dist/config-DyF3OKg_.mjs.map +1 -0
- package/dist/{content-BC43pICM.mjs → content-CJ94NEx5.mjs} +170 -117
- package/dist/content-CJ94NEx5.mjs.map +1 -0
- package/dist/{content-refresh-CPMSauD3.mjs → content-refresh-Xw7aKmou.mjs} +7 -7
- package/dist/{content-refresh-CPMSauD3.mjs.map → content-refresh-Xw7aKmou.mjs.map} +1 -1
- package/dist/{context-DOurRIrb.mjs → context-C_1nrqnW.mjs} +14 -14
- package/dist/{context-DOurRIrb.mjs.map → context-C_1nrqnW.mjs.map} +1 -1
- package/dist/{cron-BlKIMD_e.mjs → cron-DRV-UC4K.mjs} +1 -1
- package/dist/{cron-BlKIMD_e.mjs.map → cron-DRV-UC4K.mjs.map} +1 -1
- package/dist/{dashboard-CBm4zhc3.mjs → dashboard-DINnNVVU.mjs} +5 -5
- package/dist/{dashboard-CBm4zhc3.mjs.map → dashboard-DINnNVVU.mjs.map} +1 -1
- package/dist/db/index.d.mts +3 -3
- package/dist/db/index.mjs +3 -2
- package/dist/db/index.mjs.map +1 -1
- package/dist/db/libsql.d.mts +1 -1
- package/dist/db/postgres.d.mts +1 -1
- package/dist/db/sqlite.d.mts +1 -1
- package/dist/{default-C4v9KP56.mjs → default-BD2FG0xV.mjs} +1 -1
- package/dist/{default-C4v9KP56.mjs.map → default-BD2FG0xV.mjs.map} +1 -1
- package/dist/deferred-tasks-C-WRCcKo.d.mts +9 -0
- package/dist/deferred-tasks-C-WRCcKo.d.mts.map +1 -0
- package/dist/{device-flow-BeA6lUS1.mjs → device-flow-CTqd8mud.mjs} +5 -5
- package/dist/{device-flow-BeA6lUS1.mjs.map → device-flow-CTqd8mud.mjs.map} +1 -1
- package/dist/{dialect-helpers-BtOwo2us.mjs → dialect-helpers-BSbfaO3F.mjs} +43 -16
- package/dist/dialect-helpers-BSbfaO3F.mjs.map +1 -0
- package/dist/{email-console-C-9Ng8DM.mjs → email-console-C6WdcWbL.mjs} +1 -1
- package/dist/{email-console-C-9Ng8DM.mjs.map → email-console-C6WdcWbL.mjs.map} +1 -1
- package/dist/{error-DJ98TRbQ.mjs → error-oh_9i6bR.mjs} +3 -3
- package/dist/{error-DJ98TRbQ.mjs.map → error-oh_9i6bR.mjs.map} +1 -1
- package/dist/{errors-DtEXIQQV.mjs → errors-BucQ8VYz.mjs} +2 -1
- package/dist/errors-BucQ8VYz.mjs.map +1 -0
- package/dist/{escape-CFedIB1C.mjs → escape-CXps5F_v.mjs} +1 -1
- package/dist/{escape-CFedIB1C.mjs.map → escape-CXps5F_v.mjs.map} +1 -1
- package/dist/{field-defs-cache-KfNJ_qLQ.mjs → field-defs-cache-WD82dMQq.mjs} +4 -4
- package/dist/{field-defs-cache-KfNJ_qLQ.mjs.map → field-defs-cache-WD82dMQq.mjs.map} +1 -1
- package/dist/{fts-manager-hyCU9OOp.mjs → fts-manager-BITakW_R.mjs} +37 -13
- package/dist/fts-manager-BITakW_R.mjs.map +1 -0
- package/dist/{hash-DFFrkivP.mjs → hash-Cg0TXJPV.mjs} +8 -4
- package/dist/hash-Cg0TXJPV.mjs.map +1 -0
- package/dist/{hreflang-CIxH_LKz.d.mts → hreflang-BaLCNcDx.d.mts} +2 -2
- package/dist/{hreflang-CIxH_LKz.d.mts.map → hreflang-BaLCNcDx.d.mts.map} +1 -1
- package/dist/{hreflang-CbYeCzl9.mjs → hreflang-BdZuVBhL.mjs} +7 -7
- package/dist/{hreflang-CbYeCzl9.mjs.map → hreflang-BdZuVBhL.mjs.map} +1 -1
- package/dist/{import-oDYCgNYQ.mjs → import-C-9uqyT3.mjs} +6 -6
- package/dist/{import-oDYCgNYQ.mjs.map → import-C-9uqyT3.mjs.map} +1 -1
- package/dist/{index-BZJ_5FOX.d.mts → index-M37iz29I.d.mts} +112 -37
- package/dist/index-M37iz29I.d.mts.map +1 -0
- package/dist/{index-BEui-cRd.d.mts → index-MGw47uWq.d.mts} +3 -3
- package/dist/{index-BEui-cRd.d.mts.map → index-MGw47uWq.d.mts.map} +1 -1
- package/dist/index.d.mts +19 -19
- package/dist/index.mjs +69 -67
- package/dist/{load-Dg5gtWma.mjs → load-DV1DZuUJ.mjs} +2 -2
- package/dist/{load-Dg5gtWma.mjs.map → load-DV1DZuUJ.mjs.map} +1 -1
- package/dist/{loader-D4rigvjR.mjs → loader-CGugY7Zl.mjs} +29 -15
- package/dist/loader-CGugY7Zl.mjs.map +1 -0
- package/dist/{manifest-schema-bCq54i7F.mjs → manifest-schema-Da7kj23y.mjs} +1 -1
- package/dist/{manifest-schema-bCq54i7F.mjs.map → manifest-schema-Da7kj23y.mjs.map} +1 -1
- package/dist/media/index.d.mts +1 -1
- package/dist/media/local-runtime.d.mts +12 -12
- package/dist/media/local-runtime.mjs +8 -8
- package/dist/{media-its1WLYv.mjs → media-BP7S-nHT.mjs} +60 -15
- package/dist/media-BP7S-nHT.mjs.map +1 -0
- package/dist/{media-BJ6SRY3g.mjs → media-OhYL-7Io.mjs} +8 -4
- package/dist/{media-BJ6SRY3g.mjs.map → media-OhYL-7Io.mjs.map} +1 -1
- package/dist/{media-allowlist-jUppPWFy.mjs → media-allowlist-D-peH1H5.mjs} +1 -1
- package/dist/{media-allowlist-jUppPWFy.mjs.map → media-allowlist-D-peH1H5.mjs.map} +1 -1
- package/dist/{media-upload-DNu3QySc.mjs → media-upload-DtrwU2B0.mjs} +7 -7
- package/dist/{media-upload-DNu3QySc.mjs.map → media-upload-DtrwU2B0.mjs.map} +1 -1
- package/dist/{media-url-BCm5vBn6.mjs → media-url-DYs_YLOx.mjs} +1 -1
- package/dist/{media-url-BCm5vBn6.mjs.map → media-url-DYs_YLOx.mjs.map} +1 -1
- package/dist/{media-usage-DPQ3K4xB.mjs → media-usage-BlxfTkN0.mjs} +8 -8
- package/dist/{media-usage-DPQ3K4xB.mjs.map → media-usage-BlxfTkN0.mjs.map} +1 -1
- package/dist/{menus-BMGzWyWH.mjs → menus-BcQWxeXu.mjs} +5 -5
- package/dist/{menus-BMGzWyWH.mjs.map → menus-BcQWxeXu.mjs.map} +1 -1
- package/dist/{menus-CPf_SW7u.mjs → menus-Y54RDPIN.mjs} +215 -38
- package/dist/menus-Y54RDPIN.mjs.map +1 -0
- package/dist/{mode-fiXRMfeA.mjs → mode-BWyTBe3I.mjs} +1 -1
- package/dist/{mode-fiXRMfeA.mjs.map → mode-BWyTBe3I.mjs.map} +1 -1
- package/dist/{oauth-authorization-oqfbBuMH.mjs → oauth-authorization-ClvktmrL.mjs} +5 -5
- package/dist/{oauth-authorization-oqfbBuMH.mjs.map → oauth-authorization-ClvktmrL.mjs.map} +1 -1
- package/dist/{oauth-clients-BlrUHAsf.mjs → oauth-clients-8ao-U66l.mjs} +1 -1
- package/dist/{oauth-clients-BlrUHAsf.mjs.map → oauth-clients-8ao-U66l.mjs.map} +1 -1
- package/dist/{oauth-state-store-DnvjRMy6.mjs → oauth-state-store-B1ofdTiQ.mjs} +1 -1
- package/dist/{oauth-state-store-DnvjRMy6.mjs.map → oauth-state-store-B1ofdTiQ.mjs.map} +1 -1
- package/dist/{oauth-user-lookup-oUllxvAv.mjs → oauth-user-lookup-CscEuIiR.mjs} +1 -1
- package/dist/{oauth-user-lookup-oUllxvAv.mjs.map → oauth-user-lookup-CscEuIiR.mjs.map} +1 -1
- package/dist/object-cache/memory.d.mts +1 -1
- package/dist/{object-cache-Bok5j2ae.mjs → object-cache-71tPfV4A.mjs} +106 -5
- package/dist/object-cache-71tPfV4A.mjs.map +1 -0
- package/dist/{options-BqMkWfYa.d.mts → options-CA4eVX6P.d.mts} +3 -3
- package/dist/{options-BqMkWfYa.d.mts.map → options-CA4eVX6P.d.mts.map} +1 -1
- package/dist/{options-BlmBHTvX.mjs → options-CBXIHUoT.mjs} +1 -1
- package/dist/{options-BlmBHTvX.mjs.map → options-CBXIHUoT.mjs.map} +1 -1
- package/dist/page/index.d.mts +2 -2
- package/dist/{parse-53zyxlpv.mjs → parse-CJKNuewM.mjs} +2 -2
- package/dist/{parse-53zyxlpv.mjs.map → parse-CJKNuewM.mjs.map} +1 -1
- package/dist/{passkey-config-C-SKpc0-.mjs → passkey-config-D-zrzMJI.mjs} +1 -1
- package/dist/{passkey-config-C-SKpc0-.mjs.map → passkey-config-D-zrzMJI.mjs.map} +1 -1
- package/dist/{placeholder-Dop47JMM.d.mts → placeholder-DaeNS-VG.d.mts} +1 -1
- package/dist/{placeholder-Dop47JMM.d.mts.map → placeholder-DaeNS-VG.d.mts.map} +1 -1
- package/dist/plugin-types.d.mts +1 -1
- package/dist/plugin-utils.d.mts +10 -10
- package/dist/plugins/adapt-sandbox-entry.d.mts +10 -10
- package/dist/plugins/adapt-sandbox-entry.mjs +2 -2
- package/dist/{portable-text-sDj92Kxv.mjs → portable-text-B_kqBmXB.mjs} +1 -1
- package/dist/{portable-text-sDj92Kxv.mjs.map → portable-text-B_kqBmXB.mjs.map} +1 -1
- package/dist/{preview-D4Jnbfx7.mjs → preview-BU6PaLpM.mjs} +2 -2
- package/dist/{preview-D4Jnbfx7.mjs.map → preview-BU6PaLpM.mjs.map} +1 -1
- package/dist/{public-url-DSGTnJFw.mjs → public-url-Ox9oOlgp.mjs} +14 -3
- package/dist/public-url-Ox9oOlgp.mjs.map +1 -0
- package/dist/{query-Bz9bWZfm.mjs → query-C5w7PsRQ.mjs} +43 -44
- package/dist/query-C5w7PsRQ.mjs.map +1 -0
- package/dist/{query-DdFGHzQF.mjs → query-rC9HKv1N.mjs} +4 -4
- package/dist/{query-DdFGHzQF.mjs.map → query-rC9HKv1N.mjs.map} +1 -1
- package/dist/{rate-limit-D3IEiUi2.mjs → rate-limit-kug6q99V.mjs} +2 -2
- package/dist/{rate-limit-D3IEiUi2.mjs.map → rate-limit-kug6q99V.mjs.map} +1 -1
- package/dist/{redirect-BoUac4NT.mjs → redirect-DIJxXKOG.mjs} +3 -3
- package/dist/{redirect-BoUac4NT.mjs.map → redirect-DIJxXKOG.mjs.map} +1 -1
- package/dist/{redirect-Botom7X6.mjs → redirect-Egf2R9yP.mjs} +1 -1
- package/dist/{redirect-Botom7X6.mjs.map → redirect-Egf2R9yP.mjs.map} +1 -1
- package/dist/{redirects-ChbpqKiS.mjs → redirects-Bzm812bY.mjs} +5 -5
- package/dist/{redirects-ChbpqKiS.mjs.map → redirects-Bzm812bY.mjs.map} +1 -1
- package/dist/{redirects-D457qwt0.mjs → redirects-G8wAhWAf.mjs} +25 -7
- package/dist/redirects-G8wAhWAf.mjs.map +1 -0
- package/dist/{registry-y21kjhfG.mjs → registry-Dbodb4Uo.mjs} +59 -14
- package/dist/registry-Dbodb4Uo.mjs.map +1 -0
- package/dist/{relation-Du0r04E0.mjs → relation-Cbe3Sd3m.mjs} +3 -3
- package/dist/{relation-Du0r04E0.mjs.map → relation-Cbe3Sd3m.mjs.map} +1 -1
- package/dist/{relations-CZMpBqEd.mjs → relations-Bw_E1TXo.mjs} +3 -3
- package/dist/{relations-CZMpBqEd.mjs.map → relations-Bw_E1TXo.mjs.map} +1 -1
- package/dist/{relations-qKmSj9KM.d.mts → relations-G2ta7GIl.d.mts} +50 -12
- package/dist/relations-G2ta7GIl.d.mts.map +1 -0
- package/dist/{relations-DtX1UMBH.mjs → relations-qHwpUe66.mjs} +6 -6
- package/dist/{relations-DtX1UMBH.mjs.map → relations-qHwpUe66.mjs.map} +1 -1
- package/dist/request-context.d.mts +3 -0
- package/dist/request-context.d.mts.map +1 -1
- package/dist/request-context.mjs.map +1 -1
- package/dist/{request-meta-DzXYYI-n.mjs → request-meta-Df-jFbAd.mjs} +2 -2
- package/dist/{request-meta-DzXYYI-n.mjs.map → request-meta-Df-jFbAd.mjs.map} +1 -1
- package/dist/{resolve-DFr4kq72.mjs → resolve-DZzG4HqM.mjs} +2 -2
- package/dist/{resolve-DFr4kq72.mjs.map → resolve-DZzG4HqM.mjs.map} +1 -1
- package/dist/{runner-BdeLEgad.mjs → runner-BFTrkYhu.mjs} +497 -213
- package/dist/runner-BFTrkYhu.mjs.map +1 -0
- package/dist/{runner-Dd8m8k9F.d.mts → runner-BaADli8l.d.mts} +2 -2
- package/dist/{runner-Dd8m8k9F.d.mts.map → runner-BaADli8l.d.mts.map} +1 -1
- package/dist/runtime.d.mts +11 -11
- package/dist/runtime.mjs +3 -3
- package/dist/{schema-BH8P8vaC.mjs → schema-CiQXr6_F.mjs} +3 -3
- package/dist/{schema-BH8P8vaC.mjs.map → schema-CiQXr6_F.mjs.map} +1 -1
- package/dist/{scopes-DTIkIaGA.mjs → scopes-CNJVT5i5.mjs} +3 -3
- package/dist/{scopes-DTIkIaGA.mjs.map → scopes-CNJVT5i5.mjs.map} +1 -1
- package/dist/{search-D-Yhpmvs.mjs → search-FZhx5dDU.mjs} +7 -7
- package/dist/{search-D-Yhpmvs.mjs.map → search-FZhx5dDU.mjs.map} +1 -1
- package/dist/{secrets-CQ-69kF9.mjs → secrets-DLd8RXee.mjs} +4 -4
- package/dist/{secrets-CQ-69kF9.mjs.map → secrets-DLd8RXee.mjs.map} +1 -1
- package/dist/{sections-CzVBAKjw.mjs → sections-BrIrMUCn.mjs} +3 -3
- package/dist/{sections-CzVBAKjw.mjs.map → sections-BrIrMUCn.mjs.map} +1 -1
- package/dist/seed/index.d.mts +2 -2
- package/dist/seed/index.mjs +25 -23
- package/dist/seo/index.d.mts +3 -3
- package/dist/seo/index.mjs +18 -16
- package/dist/seo/index.mjs.map +1 -1
- package/dist/{seo-C3GDfT0V.mjs → seo-CobNfOvb.mjs} +2 -2
- package/dist/{seo-C3GDfT0V.mjs.map → seo-CobNfOvb.mjs.map} +1 -1
- package/dist/{seo-kJzVAmmu.mjs → seo-DTHRntNC.mjs} +3 -3
- package/dist/{seo-kJzVAmmu.mjs.map → seo-DTHRntNC.mjs.map} +1 -1
- package/dist/{service-CQnc276a.mjs → service-B-pYGPgR.mjs} +4 -4
- package/dist/{service-CQnc276a.mjs.map → service-B-pYGPgR.mjs.map} +1 -1
- package/dist/{session-user-DbHqKDKe.mjs → session-user-BvM9-zNl.mjs} +2 -2
- package/dist/{session-user-DbHqKDKe.mjs.map → session-user-BvM9-zNl.mjs.map} +1 -1
- package/dist/{settings-Dtc0DU31.mjs → settings-DPHau-WH.mjs} +3 -3
- package/dist/{settings-Dtc0DU31.mjs.map → settings-DPHau-WH.mjs.map} +1 -1
- package/dist/{settings-C2PaBS49.mjs → settings-kJhGiQ4z.mjs} +7 -7
- package/dist/{settings-C2PaBS49.mjs.map → settings-kJhGiQ4z.mjs.map} +1 -1
- package/dist/{setup-complete-CdIlqloh.mjs → setup-complete-u50Qm8rY.mjs} +2 -2
- package/dist/{setup-complete-CdIlqloh.mjs.map → setup-complete-u50Qm8rY.mjs.map} +1 -1
- package/dist/{setup-nonce-DqiIPr-J.mjs → setup-nonce-DCjiiOD2.mjs} +1 -1
- package/dist/{setup-nonce-DqiIPr-J.mjs.map → setup-nonce-DCjiiOD2.mjs.map} +1 -1
- package/dist/{single-flight-cache-C2exrGAi.mjs → single-flight-cache-DW3w11Pu.mjs} +1 -1
- package/dist/{single-flight-cache-C2exrGAi.mjs.map → single-flight-cache-DW3w11Pu.mjs.map} +1 -1
- package/dist/site-url-I-lJ5kma.mjs +16 -0
- package/dist/site-url-I-lJ5kma.mjs.map +1 -0
- package/dist/{snapshot-BdpUJKD-.mjs → snapshot-I_fjLDaD.mjs} +2 -2
- package/dist/{snapshot-BdpUJKD-.mjs.map → snapshot-I_fjLDaD.mjs.map} +1 -1
- package/dist/{ssrf-CviKqWmq.mjs → ssrf-CTa6v21i.mjs} +1 -1
- package/dist/{ssrf-CviKqWmq.mjs.map → ssrf-CTa6v21i.mjs.map} +1 -1
- package/dist/{state-xxv6ZTMv.mjs → state-CQvoefYP.mjs} +1 -1
- package/dist/{state-xxv6ZTMv.mjs.map → state-CQvoefYP.mjs.map} +1 -1
- package/dist/{status-COfycGIU.mjs → status-CIsmlC1E.mjs} +1 -1
- package/dist/{status-COfycGIU.mjs.map → status-CIsmlC1E.mjs.map} +1 -1
- package/dist/storage/local.d.mts +1 -1
- package/dist/storage/local.mjs +1 -1
- package/dist/storage/s3.d.mts +1 -1
- package/dist/storage/s3.mjs +2 -2
- package/dist/storage/s3.mjs.map +1 -1
- package/dist/{taxonomies-BN6M9Nrv.mjs → taxonomies-CKuaZER5.mjs} +90 -9
- package/dist/taxonomies-CKuaZER5.mjs.map +1 -0
- package/dist/{taxonomies-r7pqLBCn.mjs → taxonomies-CLN1N92E.mjs} +57 -32
- package/dist/taxonomies-CLN1N92E.mjs.map +1 -0
- package/dist/{taxonomy-0mCI25HN.mjs → taxonomy-pOrB2kZe.mjs} +142 -15
- package/dist/taxonomy-pOrB2kZe.mjs.map +1 -0
- package/dist/{tokens-DVltpO2D.mjs → tokens-DagaJGK8.mjs} +1 -1
- package/dist/{tokens-DVltpO2D.mjs.map → tokens-DagaJGK8.mjs.map} +1 -1
- package/dist/{transaction-D0FOsb3X.mjs → transaction-NQj4VJ7Z.mjs} +1 -1
- package/dist/{transaction-D0FOsb3X.mjs.map → transaction-NQj4VJ7Z.mjs.map} +1 -1
- package/dist/{transport-Vd7VdqHv.d.mts → transport-CAwTaTp_.d.mts} +1 -1
- package/dist/{transport-Vd7VdqHv.d.mts.map → transport-CAwTaTp_.d.mts.map} +1 -1
- package/dist/{transport-CKrlqSpD.mjs → transport-DVsa5YYo.mjs} +1 -1
- package/dist/{transport-CKrlqSpD.mjs.map → transport-DVsa5YYo.mjs.map} +1 -1
- package/dist/{trusted-proxy-CwjQj0YG.mjs → trusted-proxy-D20_7fyX.mjs} +1 -1
- package/dist/{trusted-proxy-CwjQj0YG.mjs.map → trusted-proxy-D20_7fyX.mjs.map} +1 -1
- package/dist/{types-BfYUPJdP.d.mts → types-BGWPMiBO.d.mts} +2 -2
- package/dist/{types-BfYUPJdP.d.mts.map → types-BGWPMiBO.d.mts.map} +1 -1
- package/dist/{types-iVeZ5g6N.d.mts → types-BK6U01Ro.d.mts} +1 -1
- package/dist/{types-iVeZ5g6N.d.mts.map → types-BK6U01Ro.d.mts.map} +1 -1
- package/dist/{types-BD40g7zz.mjs → types-BjxTKxrZ.mjs} +1 -1
- package/dist/{types-BD40g7zz.mjs.map → types-BjxTKxrZ.mjs.map} +1 -1
- package/dist/{types-Kmaxdarz.d.mts → types-BnFP1M3J.d.mts} +22 -1
- package/dist/types-BnFP1M3J.d.mts.map +1 -0
- package/dist/{types-C7U0HlEr.d.mts → types-C8oz_ayJ.d.mts} +1 -1
- package/dist/{types-C7U0HlEr.d.mts.map → types-C8oz_ayJ.d.mts.map} +1 -1
- package/dist/{types-B4vm81VH.d.mts → types-CbUcuxxc.d.mts} +1 -1
- package/dist/{types-B4vm81VH.d.mts.map → types-CbUcuxxc.d.mts.map} +1 -1
- package/dist/{types-CrRUFdej.mjs → types-Cd8iuS1J.mjs} +10 -3
- package/dist/{types-CrRUFdej.mjs.map → types-Cd8iuS1J.mjs.map} +1 -1
- package/dist/types-CtzytVXn.mjs +18 -0
- package/dist/types-CtzytVXn.mjs.map +1 -0
- package/dist/{types-BvB7gDOD.d.mts → types-Cz8hNch2.d.mts} +5 -5
- package/dist/{types-BvB7gDOD.d.mts.map → types-Cz8hNch2.d.mts.map} +1 -1
- package/dist/{types-B97jg3aW.d.mts → types-DLG4IFEQ.d.mts} +1 -1
- package/dist/{types-B97jg3aW.d.mts.map → types-DLG4IFEQ.d.mts.map} +1 -1
- package/dist/{types-DPKhI5ib.d.mts → types-Dc4ntQjQ.d.mts} +18 -1
- package/dist/types-Dc4ntQjQ.d.mts.map +1 -0
- package/dist/{types-BNfPHfay.d.mts → types-LoagAGzH.d.mts} +1 -1
- package/dist/{types-BNfPHfay.d.mts.map → types-LoagAGzH.d.mts.map} +1 -1
- package/dist/{types-o7xo7VgH.mjs → types-NBI3rF-_.mjs} +3 -2
- package/dist/types-NBI3rF-_.mjs.map +1 -0
- package/dist/upload-attempts-D8QAFLUJ.mjs +27 -0
- package/dist/upload-attempts-D8QAFLUJ.mjs.map +1 -0
- package/dist/{user-aTXqmXBz.mjs → user-DBrq4UVq.mjs} +3 -3
- package/dist/{user-aTXqmXBz.mjs.map → user-DBrq4UVq.mjs.map} +1 -1
- package/dist/{utils-BbUgmeZG.mjs → utils-hLzi_2Fn.mjs} +2 -2
- package/dist/{utils-BbUgmeZG.mjs.map → utils-hLzi_2Fn.mjs.map} +1 -1
- package/dist/{validate-VPnKoIzW.mjs → validate-BpwoDOgt.mjs} +25 -2
- package/dist/validate-BpwoDOgt.mjs.map +1 -0
- package/dist/{validate-DULfgpJP.d.mts → validate-C3oSmA7F.d.mts} +15 -5
- package/dist/validate-C3oSmA7F.d.mts.map +1 -0
- package/dist/{validate-CDT1jl6_.mjs → validate-mKo3RxBM.mjs} +4 -4
- package/dist/{validate-CDT1jl6_.mjs.map → validate-mKo3RxBM.mjs.map} +1 -1
- package/dist/{validation-DlD0E35W.mjs → validation-BgpucsvF.mjs} +11 -9
- package/dist/{validation-DlD0E35W.mjs.map → validation-BgpucsvF.mjs.map} +1 -1
- package/dist/version-C4PnpmoV.mjs +7 -0
- package/dist/{version-BRMngh9I.mjs.map → version-C4PnpmoV.mjs.map} +1 -1
- package/dist/{widgets-5fipNkMT.mjs → widgets-CJJtkiKh.mjs} +3 -3
- package/dist/{widgets-5fipNkMT.mjs.map → widgets-CJJtkiKh.mjs.map} +1 -1
- package/dist/{wxr-taxonomies-DrihupaC.mjs → wxr-taxonomies-9PPSy8X6.mjs} +4 -4
- package/dist/{wxr-taxonomies-DrihupaC.mjs.map → wxr-taxonomies-9PPSy8X6.mjs.map} +1 -1
- package/dist/{wxr-taxonomies-B4tMuN5T.d.mts → wxr-taxonomies-Bkpp_2tK.d.mts} +1 -1
- package/dist/{wxr-taxonomies-B4tMuN5T.d.mts.map → wxr-taxonomies-Bkpp_2tK.d.mts.map} +1 -1
- package/dist/{zod-generator-CwkHWz4f.mjs → zod-generator-CG64Hnbh.mjs} +3 -3
- package/dist/{zod-generator-CwkHWz4f.mjs.map → zod-generator-CG64Hnbh.mjs.map} +1 -1
- package/package.json +12 -8
- package/src/after.ts +6 -1
- package/src/api/errors.ts +1 -0
- package/src/api/handlers/content.ts +45 -4
- package/src/api/handlers/marketplace.ts +14 -0
- package/src/api/handlers/media.ts +4 -4
- package/src/api/handlers/registry.ts +14 -0
- package/src/api/handlers/revision.ts +19 -5
- package/src/api/handlers/schema.ts +37 -0
- package/src/api/handlers/snapshot.ts +1 -1
- package/src/api/handlers/taxonomies.ts +111 -10
- package/src/api/openapi/document.ts +84 -3
- package/src/api/public-url.ts +14 -2
- package/src/api/schemas/media.ts +9 -2
- package/src/api/schemas/schema.ts +13 -0
- package/src/api/schemas/search.ts +2 -0
- package/src/api/schemas/taxonomies.ts +34 -1
- package/src/api/site-url.ts +16 -6
- package/src/astro/integration/routes.ts +19 -0
- package/src/astro/integration/runtime.ts +13 -0
- package/src/astro/integration/virtual-modules.ts +2 -0
- package/src/astro/middleware/redirect.ts +2 -10
- package/src/astro/middleware/scoped-db.ts +35 -4
- package/src/astro/middleware.ts +56 -22
- package/src/astro/routes/api/admin/comments/[id]/status.ts +1 -1
- package/src/astro/routes/api/admin/users/[id]/send-recovery.ts +2 -2
- package/src/astro/routes/api/auth/invite/index.ts +2 -2
- package/src/astro/routes/api/auth/magic-link/send.ts +2 -2
- package/src/astro/routes/api/auth/signup/request.ts +2 -2
- package/src/astro/routes/api/comments/[collection]/[contentId]/index.ts +1 -1
- package/src/astro/routes/api/content/[collection]/[id].ts +3 -1
- package/src/astro/routes/api/media/[id]/confirm.ts +148 -59
- package/src/astro/routes/api/media/[id]/upload.ts +262 -0
- package/src/astro/routes/api/media/[id].ts +19 -10
- package/src/astro/routes/api/media/upload-url.ts +28 -31
- package/src/astro/routes/api/schema/collections/reorder.ts +31 -0
- package/src/astro/routes/api/schema/index.ts +2 -0
- package/src/astro/routes/api/search/enable.ts +5 -1
- package/src/astro/routes/api/search/rebuild.ts +6 -1
- package/src/astro/routes/api/taxonomies/[name]/reorder.ts +41 -0
- package/src/astro/routes/api/taxonomies/[name]/terms/index.ts +6 -3
- package/src/astro/types.ts +7 -0
- package/src/cleanup.ts +54 -26
- package/src/cli/commands/dev.ts +13 -3
- package/src/cli/commands/export-seed.ts +2 -0
- package/src/cli/index.ts +1 -1
- package/src/components/CommentForm.astro +1 -1
- package/src/components/Comments.astro +1 -1
- package/src/components/InlinePortableTextEditor.tsx +175 -31
- package/src/components/OrderedList.astro +14 -0
- package/src/components/PortableText.astro +26 -4
- package/src/components/code-mark.ts +11 -0
- package/src/components/index.ts +12 -1
- package/src/components/ordered-list.ts +549 -0
- package/src/content/converters/numbered-list.ts +148 -0
- package/src/content/converters/portable-text-to-prosemirror.ts +59 -9
- package/src/content/converters/prosemirror-to-portable-text.ts +23 -12
- package/src/content/converters/types.ts +2 -0
- package/src/content/portable-text-lists.ts +205 -0
- package/src/database/dialect-helpers.ts +41 -22
- package/src/database/migrations/054_media_upload_attempts.ts +41 -0
- package/src/database/migrations/055_content_translation_group_locale_index.ts +67 -0
- package/src/database/migrations/056_taxonomy_term_sort_order.ts +189 -0
- package/src/database/migrations/057_collection_hidden.ts +24 -0
- package/src/database/migrations/058_collection_sort_order.ts +20 -0
- package/src/database/migrations/059_revision_prune_queue.ts +36 -0
- package/src/database/migrations/runner.ts +12 -0
- package/src/database/repositories/content.ts +193 -183
- package/src/database/repositories/media.ts +158 -28
- package/src/database/repositories/revision.ts +82 -17
- package/src/database/repositories/taxonomy.ts +202 -7
- package/src/database/repositories/types.ts +7 -0
- package/src/database/types.ts +23 -1
- package/src/database/validate.ts +39 -0
- package/src/db/adapters.ts +8 -0
- package/src/deferred-tasks.ts +71 -0
- package/src/emdash-runtime.ts +277 -88
- package/src/i18n/config.ts +17 -10
- package/src/index.ts +3 -0
- package/src/loader.ts +46 -24
- package/src/media/upload-attempts.ts +33 -0
- package/src/media/usage/gc.ts +50 -0
- package/src/object-cache/index.ts +160 -3
- package/src/plugins/routes.ts +34 -0
- package/src/plugins/storage-indexes.ts +50 -11
- package/src/query.ts +50 -44
- package/src/redirects/cache.ts +79 -19
- package/src/request-context.ts +3 -0
- package/src/scheduled-publish.ts +6 -1
- package/src/schema/registry.ts +95 -3
- package/src/schema/types.ts +24 -0
- package/src/search/fts-manager.ts +50 -10
- package/src/search/index.ts +2 -0
- package/src/search/types.ts +6 -0
- package/src/seed/apply.ts +22 -2
- package/src/seed/types.ts +10 -0
- package/src/storage/s3.ts +1 -1
- package/src/taxonomies/index.ts +11 -7
- package/src/taxonomies/term-counts.ts +56 -28
- package/src/ui-comments.ts +19 -0
- package/src/ui.ts +11 -3
- package/src/utils/hash.ts +14 -3
- package/src/virtual-modules.d.ts +8 -0
- package/dist/adapters-C0ONzkUP.d.mts.map +0 -1
- package/dist/after-B1IIdH3Y.mjs +0 -29
- package/dist/after-B1IIdH3Y.mjs.map +0 -1
- package/dist/api-BkqFzIu4.mjs.map +0 -1
- package/dist/apply-DuXsqll7.mjs.map +0 -1
- package/dist/cache-DDwy3JDW.mjs +0 -65
- package/dist/cache-DDwy3JDW.mjs.map +0 -1
- package/dist/config-B6b_BobR.mjs.map +0 -1
- package/dist/content-BC43pICM.mjs.map +0 -1
- package/dist/dialect-helpers-BtOwo2us.mjs.map +0 -1
- package/dist/errors-DtEXIQQV.mjs.map +0 -1
- package/dist/fts-manager-hyCU9OOp.mjs.map +0 -1
- package/dist/hash-DFFrkivP.mjs.map +0 -1
- package/dist/index-BZJ_5FOX.d.mts.map +0 -1
- package/dist/loader-D4rigvjR.mjs.map +0 -1
- package/dist/media-its1WLYv.mjs.map +0 -1
- package/dist/menus-CPf_SW7u.mjs.map +0 -1
- package/dist/object-cache-Bok5j2ae.mjs.map +0 -1
- package/dist/public-url-DSGTnJFw.mjs.map +0 -1
- package/dist/query-Bz9bWZfm.mjs.map +0 -1
- package/dist/redirects-D457qwt0.mjs.map +0 -1
- package/dist/registry-y21kjhfG.mjs.map +0 -1
- package/dist/relations-qKmSj9KM.d.mts.map +0 -1
- package/dist/runner-BdeLEgad.mjs.map +0 -1
- package/dist/site-url-NGJT6NTU.mjs +0 -13
- package/dist/site-url-NGJT6NTU.mjs.map +0 -1
- package/dist/taxonomies-BN6M9Nrv.mjs.map +0 -1
- package/dist/taxonomies-r7pqLBCn.mjs.map +0 -1
- package/dist/taxonomy-0mCI25HN.mjs.map +0 -1
- package/dist/types-DPKhI5ib.d.mts.map +0 -1
- package/dist/types-Kmaxdarz.d.mts.map +0 -1
- package/dist/types-o7xo7VgH.mjs.map +0 -1
- package/dist/validate-DULfgpJP.d.mts.map +0 -1
- package/dist/validate-VPnKoIzW.mjs.map +0 -1
- package/dist/version-BRMngh9I.mjs +0 -7
- /package/dist/{api-tokens-Cvmixds7.mjs → api-tokens-Dai9dND0.mjs} +0 -0
- /package/dist/{ssrf-BB__xfNM.mjs → ssrf-Cj568Dgs.mjs} +0 -0
- /package/dist/{types-CK0LxPUQ.mjs → types-DKuWPYV5.mjs} +0 -0
|
@@ -10,7 +10,22 @@ import { sql } from "kysely";
|
|
|
10
10
|
import { isSqlite, tableExists as dialectTableExists } from "../database/dialect-helpers.js";
|
|
11
11
|
import type { Database } from "../database/types.js";
|
|
12
12
|
import { validateIdentifier } from "../database/validate.js";
|
|
13
|
-
import
|
|
13
|
+
import { SEARCH_TOKENIZERS } from "./types.js";
|
|
14
|
+
import type { SearchConfig, SearchTokenizer } from "./types.js";
|
|
15
|
+
|
|
16
|
+
const DEFAULT_SEARCH_TOKENIZER: SearchTokenizer = "porter unicode61";
|
|
17
|
+
|
|
18
|
+
function isSearchTokenizer(value: unknown): value is SearchTokenizer {
|
|
19
|
+
return SEARCH_TOKENIZERS.some((tokenizer) => tokenizer === value);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function resolveSearchTokenizer(tokenize?: SearchTokenizer): SearchTokenizer {
|
|
23
|
+
if (tokenize === undefined) return DEFAULT_SEARCH_TOKENIZER;
|
|
24
|
+
if (!isSearchTokenizer(tokenize)) {
|
|
25
|
+
throw new Error(`Unsupported FTS5 tokenizer: "${String(tokenize)}"`);
|
|
26
|
+
}
|
|
27
|
+
return tokenize;
|
|
28
|
+
}
|
|
14
29
|
|
|
15
30
|
/**
|
|
16
31
|
* FTS5 Manager
|
|
@@ -66,12 +81,15 @@ export class FTSManager {
|
|
|
66
81
|
* @param collectionSlug - The collection slug
|
|
67
82
|
* @param searchableFields - Array of field names to index
|
|
68
83
|
* @param weights - Optional field weights for ranking
|
|
84
|
+
* @param tokenize - Optional FTS5 tokenizer configuration
|
|
69
85
|
*/
|
|
70
86
|
async createFtsTable(
|
|
71
87
|
collectionSlug: string,
|
|
72
88
|
searchableFields: string[],
|
|
73
89
|
_weights?: Record<string, number>,
|
|
90
|
+
tokenize?: SearchTokenizer,
|
|
74
91
|
): Promise<void> {
|
|
92
|
+
const tokenizer = resolveSearchTokenizer(tokenize);
|
|
75
93
|
if (!isSqlite(this.db)) return;
|
|
76
94
|
this.validateInputs(collectionSlug, searchableFields);
|
|
77
95
|
const ftsTable = this.getFtsTableName(collectionSlug);
|
|
@@ -88,14 +106,13 @@ export class FTSManager {
|
|
|
88
106
|
// `createTriggers` keep the index in sync; they MUST use the
|
|
89
107
|
// external-content-safe `'delete'` command (see notes there) to
|
|
90
108
|
// avoid `SQLITE_CORRUPT_VTAB` on UPDATE/DELETE.
|
|
91
|
-
// tokenize='porter unicode61' enables stemming (run matches running, ran, etc.)
|
|
92
109
|
await sql
|
|
93
110
|
.raw(`
|
|
94
111
|
CREATE VIRTUAL TABLE IF NOT EXISTS "${ftsTable}" USING fts5(
|
|
95
112
|
${columns},
|
|
96
113
|
content='${contentTable}',
|
|
97
114
|
content_rowid='rowid',
|
|
98
|
-
tokenize='
|
|
115
|
+
tokenize='${tokenizer}'
|
|
99
116
|
)
|
|
100
117
|
`)
|
|
101
118
|
.execute(this.db);
|
|
@@ -247,13 +264,15 @@ export class FTSManager {
|
|
|
247
264
|
collectionSlug: string,
|
|
248
265
|
searchableFields: string[],
|
|
249
266
|
weights?: Record<string, number>,
|
|
267
|
+
tokenize?: SearchTokenizer,
|
|
250
268
|
): Promise<void> {
|
|
269
|
+
resolveSearchTokenizer(tokenize);
|
|
251
270
|
if (!isSqlite(this.db)) return;
|
|
252
271
|
// Drop existing table and triggers
|
|
253
272
|
await this.dropFtsTable(collectionSlug);
|
|
254
273
|
|
|
255
274
|
// Recreate table and triggers
|
|
256
|
-
await this.createFtsTable(collectionSlug, searchableFields, weights);
|
|
275
|
+
await this.createFtsTable(collectionSlug, searchableFields, weights, tokenize);
|
|
257
276
|
|
|
258
277
|
// Populate from existing content
|
|
259
278
|
await this.populateFromContent(collectionSlug, searchableFields);
|
|
@@ -314,6 +333,12 @@ export class FTSManager {
|
|
|
314
333
|
}
|
|
315
334
|
config.weights = weights;
|
|
316
335
|
}
|
|
336
|
+
if ("tokenize" in parsed) {
|
|
337
|
+
if (!isSearchTokenizer(parsed.tokenize)) {
|
|
338
|
+
return null;
|
|
339
|
+
}
|
|
340
|
+
config.tokenize = parsed.tokenize;
|
|
341
|
+
}
|
|
317
342
|
return config;
|
|
318
343
|
} catch {
|
|
319
344
|
return null;
|
|
@@ -324,6 +349,9 @@ export class FTSManager {
|
|
|
324
349
|
* Update the search configuration for a collection
|
|
325
350
|
*/
|
|
326
351
|
async setSearchConfig(collectionSlug: string, config: SearchConfig): Promise<void> {
|
|
352
|
+
if (config.tokenize !== undefined) {
|
|
353
|
+
resolveSearchTokenizer(config.tokenize);
|
|
354
|
+
}
|
|
327
355
|
await this.db
|
|
328
356
|
.updateTable("_emdash_collections")
|
|
329
357
|
.set({ search_config: JSON.stringify(config) })
|
|
@@ -399,8 +427,11 @@ export class FTSManager {
|
|
|
399
427
|
*/
|
|
400
428
|
async enableSearch(
|
|
401
429
|
collectionSlug: string,
|
|
402
|
-
options?: { weights?: Record<string, number
|
|
430
|
+
options?: { weights?: Record<string, number>; tokenize?: SearchTokenizer },
|
|
403
431
|
): Promise<void> {
|
|
432
|
+
if (options?.tokenize !== undefined) {
|
|
433
|
+
resolveSearchTokenizer(options.tokenize);
|
|
434
|
+
}
|
|
404
435
|
if (!isSqlite(this.db)) {
|
|
405
436
|
throw new Error("Full-text search is only available with SQLite databases");
|
|
406
437
|
}
|
|
@@ -414,13 +445,18 @@ export class FTSManager {
|
|
|
414
445
|
);
|
|
415
446
|
}
|
|
416
447
|
|
|
448
|
+
const existing = await this.getSearchConfig(collectionSlug);
|
|
449
|
+
const weights = options?.weights ?? existing?.weights;
|
|
450
|
+
const tokenize = options?.tokenize ?? existing?.tokenize;
|
|
451
|
+
|
|
417
452
|
// Rebuild from scratch to ensure clean state (no duplicate rows)
|
|
418
|
-
await this.rebuildIndex(collectionSlug, searchableFields,
|
|
453
|
+
await this.rebuildIndex(collectionSlug, searchableFields, weights, tokenize);
|
|
419
454
|
|
|
420
455
|
// Update search config
|
|
421
456
|
await this.setSearchConfig(collectionSlug, {
|
|
422
457
|
enabled: true,
|
|
423
|
-
weights
|
|
458
|
+
weights,
|
|
459
|
+
tokenize,
|
|
424
460
|
});
|
|
425
461
|
}
|
|
426
462
|
|
|
@@ -433,7 +469,11 @@ export class FTSManager {
|
|
|
433
469
|
if (!isSqlite(this.db)) return;
|
|
434
470
|
await this.dropFtsTable(collectionSlug);
|
|
435
471
|
const existing = await this.getSearchConfig(collectionSlug);
|
|
436
|
-
await this.setSearchConfig(collectionSlug, {
|
|
472
|
+
await this.setSearchConfig(collectionSlug, {
|
|
473
|
+
enabled: false,
|
|
474
|
+
weights: existing?.weights,
|
|
475
|
+
tokenize: existing?.tokenize,
|
|
476
|
+
});
|
|
437
477
|
}
|
|
438
478
|
|
|
439
479
|
/**
|
|
@@ -490,7 +530,7 @@ export class FTSManager {
|
|
|
490
530
|
}
|
|
491
531
|
|
|
492
532
|
console.warn(`FTS index for "${collectionSlug}" is missing. Rebuilding.`);
|
|
493
|
-
await this.rebuildIndex(collectionSlug, fields, config.weights);
|
|
533
|
+
await this.rebuildIndex(collectionSlug, fields, config.weights, config.tokenize);
|
|
494
534
|
return true;
|
|
495
535
|
}
|
|
496
536
|
|
|
@@ -515,7 +555,7 @@ export class FTSManager {
|
|
|
515
555
|
`FTS index for "${collectionSlug}" has ${ftsRows} rows but content table has ${contentRows}. Rebuilding.`,
|
|
516
556
|
);
|
|
517
557
|
if (fields.length > 0) {
|
|
518
|
-
await this.rebuildIndex(collectionSlug, fields, config?.weights);
|
|
558
|
+
await this.rebuildIndex(collectionSlug, fields, config?.weights, config?.tokenize);
|
|
519
559
|
}
|
|
520
560
|
return true;
|
|
521
561
|
}
|
package/src/search/index.ts
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
// Types
|
|
8
8
|
export type {
|
|
9
9
|
SearchConfig,
|
|
10
|
+
SearchTokenizer,
|
|
10
11
|
SearchOptions,
|
|
11
12
|
CollectionSearchOptions,
|
|
12
13
|
SearchResult,
|
|
@@ -15,6 +16,7 @@ export type {
|
|
|
15
16
|
Suggestion,
|
|
16
17
|
SearchStats,
|
|
17
18
|
} from "./types.js";
|
|
19
|
+
export { SEARCH_TOKENIZERS } from "./types.js";
|
|
18
20
|
|
|
19
21
|
// FTS Manager
|
|
20
22
|
export { FTSManager } from "./fts-manager.js";
|
package/src/search/types.ts
CHANGED
|
@@ -7,11 +7,17 @@
|
|
|
7
7
|
/**
|
|
8
8
|
* Search configuration for a collection
|
|
9
9
|
*/
|
|
10
|
+
export const SEARCH_TOKENIZERS = ["porter unicode61", "unicode61", "trigram"] as const;
|
|
11
|
+
|
|
12
|
+
export type SearchTokenizer = (typeof SEARCH_TOKENIZERS)[number];
|
|
13
|
+
|
|
10
14
|
export interface SearchConfig {
|
|
11
15
|
/** Whether search is enabled for this collection */
|
|
12
16
|
enabled: boolean;
|
|
13
17
|
/** Field weights for ranking (higher = more important) */
|
|
14
18
|
weights?: Record<string, number>;
|
|
19
|
+
/** FTS5 tokenizer configuration (defaults to English Porter stemming) */
|
|
20
|
+
tokenize?: SearchTokenizer;
|
|
15
21
|
}
|
|
16
22
|
|
|
17
23
|
/**
|
package/src/seed/apply.ts
CHANGED
|
@@ -179,6 +179,8 @@ export async function applySeed(
|
|
|
179
179
|
icon: collection.icon,
|
|
180
180
|
supports: collection.supports || [],
|
|
181
181
|
urlPattern: collection.urlPattern,
|
|
182
|
+
hidden: collection.hidden,
|
|
183
|
+
sortOrder: collection.sortOrder,
|
|
182
184
|
commentsEnabled: collection.commentsEnabled,
|
|
183
185
|
});
|
|
184
186
|
result.collections.updated++;
|
|
@@ -247,6 +249,8 @@ export async function applySeed(
|
|
|
247
249
|
icon: collection.icon,
|
|
248
250
|
supports: collection.supports || [],
|
|
249
251
|
urlPattern: collection.urlPattern,
|
|
252
|
+
hidden: collection.hidden,
|
|
253
|
+
sortOrder: collection.sortOrder,
|
|
250
254
|
commentsEnabled: collection.commentsEnabled,
|
|
251
255
|
},
|
|
252
256
|
fields,
|
|
@@ -523,8 +527,24 @@ export async function applySeed(
|
|
|
523
527
|
entryId: existing.id,
|
|
524
528
|
data: resolvedData,
|
|
525
529
|
});
|
|
526
|
-
|
|
527
|
-
|
|
530
|
+
try {
|
|
531
|
+
await trxContentRepo.setDraftRevision(collectionSlug, existing.id, draft.id);
|
|
532
|
+
await trxContentRepo.publish(collectionSlug, existing.id);
|
|
533
|
+
} catch (error) {
|
|
534
|
+
try {
|
|
535
|
+
await trxRevisionRepo.deleteIfUnreferenced(
|
|
536
|
+
collectionSlug,
|
|
537
|
+
existing.id,
|
|
538
|
+
draft.id,
|
|
539
|
+
);
|
|
540
|
+
} catch (cleanupError) {
|
|
541
|
+
console.error(
|
|
542
|
+
`[seed] Failed to clean up unstaged revision ${draft.id}:`,
|
|
543
|
+
cleanupError,
|
|
544
|
+
);
|
|
545
|
+
}
|
|
546
|
+
throw error;
|
|
547
|
+
}
|
|
528
548
|
}
|
|
529
549
|
});
|
|
530
550
|
} catch (error) {
|
package/src/seed/types.ts
CHANGED
|
@@ -74,6 +74,16 @@ export interface SeedCollection {
|
|
|
74
74
|
icon?: string;
|
|
75
75
|
supports?: ("drafts" | "revisions" | "preview" | "scheduling" | "search" | "seo")[];
|
|
76
76
|
urlPattern?: string;
|
|
77
|
+
/**
|
|
78
|
+
* Omit this collection from the admin sidebar. It stays reachable through
|
|
79
|
+
* the API, MCP, plugin hooks, and direct `/content/:collection` URLs.
|
|
80
|
+
*/
|
|
81
|
+
hidden?: boolean;
|
|
82
|
+
/**
|
|
83
|
+
* Explicit position in the admin sidebar (ascending). Collections without
|
|
84
|
+
* a `sortOrder` keep the alphabetical order and follow the ordered ones.
|
|
85
|
+
*/
|
|
86
|
+
sortOrder?: number;
|
|
77
87
|
/** Enable comments on this collection */
|
|
78
88
|
commentsEnabled?: boolean;
|
|
79
89
|
fields: SeedField[];
|
package/src/storage/s3.ts
CHANGED
|
@@ -306,7 +306,7 @@ export class S3Storage implements Storage {
|
|
|
306
306
|
method: "PUT",
|
|
307
307
|
headers: {
|
|
308
308
|
"Content-Type": options.contentType,
|
|
309
|
-
...(options.size ? { "Content-Length": String(options.size) } : {}),
|
|
309
|
+
...(options.size !== undefined ? { "Content-Length": String(options.size) } : {}),
|
|
310
310
|
},
|
|
311
311
|
expiresAt,
|
|
312
312
|
};
|
package/src/taxonomies/index.ts
CHANGED
|
@@ -16,7 +16,7 @@ import { getDb, resetTaxonomyNamesCache } from "../loader.js";
|
|
|
16
16
|
import {
|
|
17
17
|
cachedQuery,
|
|
18
18
|
CacheNamespace,
|
|
19
|
-
|
|
19
|
+
contentCacheNamespaces,
|
|
20
20
|
invalidateTaxonomyObjectCache,
|
|
21
21
|
isObjectCacheActive,
|
|
22
22
|
} from "../object-cache/index.js";
|
|
@@ -228,12 +228,14 @@ export async function getTaxonomyDef(
|
|
|
228
228
|
* Object-cache namespaces for values that embed visible term counts: the
|
|
229
229
|
* taxonomy epoch (term/assignment writes) plus each counted collection's
|
|
230
230
|
* content epoch, so publishing, unpublishing, or trashing an entry
|
|
231
|
-
* invalidates the cached count promptly.
|
|
232
|
-
*
|
|
233
|
-
* cache entry's TTL.
|
|
231
|
+
* invalidates the cached count promptly. Both content namespace generations
|
|
232
|
+
* participate so rolling deployments preserve invalidation in either direction.
|
|
234
233
|
*/
|
|
235
234
|
function termCountNamespaces(collections: string[]): string[] {
|
|
236
|
-
return [
|
|
235
|
+
return [
|
|
236
|
+
...[...new Set(collections)].flatMap((collection) => contentCacheNamespaces(collection)),
|
|
237
|
+
CacheNamespace.TAXONOMIES,
|
|
238
|
+
];
|
|
237
239
|
}
|
|
238
240
|
|
|
239
241
|
/**
|
|
@@ -299,6 +301,7 @@ async function loadTaxonomyTerms(
|
|
|
299
301
|
.selectFrom("taxonomies")
|
|
300
302
|
.selectAll()
|
|
301
303
|
.where("name", "=", def.name)
|
|
304
|
+
.orderBy("sort_order", "asc")
|
|
302
305
|
.orderBy("label", "asc");
|
|
303
306
|
if (locale !== undefined) termsQuery = termsQuery.where("locale", "=", locale);
|
|
304
307
|
|
|
@@ -417,6 +420,7 @@ async function loadTerm(
|
|
|
417
420
|
// Children store the parent's translation_group in parent_id (not a row
|
|
418
421
|
// id), so a translated parent still owns its children in its own locale.
|
|
419
422
|
.where("parent_id", "=", row.translation_group ?? row.id)
|
|
423
|
+
.orderBy("sort_order", "asc")
|
|
420
424
|
.orderBy("label", "asc");
|
|
421
425
|
const termLocale = row.locale;
|
|
422
426
|
if (termLocale) childrenQuery = childrenQuery.where("locale", "=", termLocale);
|
|
@@ -475,7 +479,7 @@ export function getEntryTerms(
|
|
|
475
479
|
`terms:${collection}:${entryId}:${taxonomyName ?? "*"}:${locale ?? "*"}`,
|
|
476
480
|
() =>
|
|
477
481
|
cachedQuery({
|
|
478
|
-
namespace: [
|
|
482
|
+
namespace: [...contentCacheNamespaces(collection), CacheNamespace.TAXONOMIES],
|
|
479
483
|
key: `entryTerms:${collection}:${entryId}:${taxonomyName ?? "*"}:${locale ?? "*"}`,
|
|
480
484
|
load: async () => {
|
|
481
485
|
const db = await getDb();
|
|
@@ -631,7 +635,7 @@ export async function getTermsForEntries(
|
|
|
631
635
|
const pairs =
|
|
632
636
|
idKey.length <= 256
|
|
633
637
|
? await cachedQuery({
|
|
634
|
-
namespace: [
|
|
638
|
+
namespace: [...contentCacheNamespaces(collection), CacheNamespace.TAXONOMIES],
|
|
635
639
|
key: `termsForEntries:${collection}:${taxonomyName}:${locale ?? "*"}:${idKey}`,
|
|
636
640
|
load,
|
|
637
641
|
})
|
|
@@ -5,22 +5,21 @@
|
|
|
5
5
|
* and are never pruned on unpublish/trash, so counting the pivot directly
|
|
6
6
|
* inflates counts with drafts and soft-deleted entries. Every user-facing
|
|
7
7
|
* count (public widget, single-term page, admin term list) must instead count
|
|
8
|
-
* only entries that
|
|
9
|
-
* `status = 'published'`
|
|
10
|
-
* `deleted_at IS NULL` — via `buildStatusCondition`, which computes scheduled
|
|
11
|
-
* visibility at query time rather than trusting a literal status value.
|
|
8
|
+
* only entries that have completed publication:
|
|
9
|
+
* `status = 'published'` AND `deleted_at IS NULL`.
|
|
12
10
|
*
|
|
13
11
|
* The public render path is latency-sensitive on D1, so per-collection counts
|
|
14
|
-
* are combined
|
|
15
|
-
*
|
|
12
|
+
* are combined with UNION ALL — one query per taxonomy, never one per
|
|
13
|
+
* collection, split only where the backend caps compound-SELECT terms.
|
|
16
14
|
*/
|
|
17
15
|
|
|
18
16
|
import type { Kysely } from "kysely";
|
|
19
17
|
import { sql } from "kysely";
|
|
20
18
|
|
|
21
|
-
import { buildStatusCondition } from "../database/dialect-helpers.js";
|
|
19
|
+
import { buildStatusCondition, compoundSelectLimit } from "../database/dialect-helpers.js";
|
|
22
20
|
import type { Database } from "../database/types.js";
|
|
23
21
|
import { validateIdentifier } from "../database/validate.js";
|
|
22
|
+
import { chunks } from "../utils/chunks.js";
|
|
24
23
|
import { isMissingTableError } from "../utils/db-errors.js";
|
|
25
24
|
|
|
26
25
|
interface CountRow {
|
|
@@ -37,6 +36,10 @@ interface CountRow {
|
|
|
37
36
|
* join on `taxonomies.id` — the anchor row (id == group) can be deleted while
|
|
38
37
|
* sibling translations survive, and a plain join on `translation_group` would
|
|
39
38
|
* multiply counts by the number of locales.
|
|
39
|
+
*
|
|
40
|
+
* CROSS JOIN with the join predicate in WHERE keeps stats-blind SQLite/D1 from
|
|
41
|
+
* reordering content_taxonomies out of the outer position; it touches ec_* only
|
|
42
|
+
* by primary key. Postgres treats this as an ordinary inner join and plans freely.
|
|
40
43
|
*/
|
|
41
44
|
function collectionBranch(
|
|
42
45
|
db: Kysely<Database>,
|
|
@@ -46,8 +49,9 @@ function collectionBranch(
|
|
|
46
49
|
return sql`
|
|
47
50
|
SELECT ct.taxonomy_id AS taxonomy_id, COUNT(*) AS count
|
|
48
51
|
FROM content_taxonomies AS ct
|
|
49
|
-
|
|
50
|
-
WHERE
|
|
52
|
+
CROSS JOIN ${sql.ref(`ec_${collection}`)} AS e
|
|
53
|
+
WHERE e.id = ct.entry_id
|
|
54
|
+
AND ct.collection = ${collection}
|
|
51
55
|
AND ct.taxonomy_id IN (SELECT translation_group FROM taxonomies WHERE name = ${taxonomyName})
|
|
52
56
|
AND ${buildStatusCondition(db, "published", "e")}
|
|
53
57
|
AND e.deleted_at IS NULL
|
|
@@ -71,6 +75,36 @@ async function runCounts(
|
|
|
71
75
|
return counts;
|
|
72
76
|
}
|
|
73
77
|
|
|
78
|
+
function addCounts(into: Map<string, number>, from: Map<string, number>): void {
|
|
79
|
+
for (const [group, count] of from) into.set(group, (into.get(group) ?? 0) + count);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Counts for one batch of collections, degrading to a query per collection
|
|
84
|
+
* when a declared collection has no ec_* table so the rest still contribute.
|
|
85
|
+
*/
|
|
86
|
+
async function runBatch(
|
|
87
|
+
db: Kysely<Database>,
|
|
88
|
+
taxonomyName: string,
|
|
89
|
+
collections: string[],
|
|
90
|
+
): Promise<Map<string, number>> {
|
|
91
|
+
try {
|
|
92
|
+
return await runCounts(db, taxonomyName, collections);
|
|
93
|
+
} catch (error) {
|
|
94
|
+
if (!isMissingTableError(error)) throw error;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
const counts = new Map<string, number>();
|
|
98
|
+
for (const collection of collections) {
|
|
99
|
+
try {
|
|
100
|
+
addCounts(counts, await runCounts(db, taxonomyName, [collection]));
|
|
101
|
+
} catch (error) {
|
|
102
|
+
if (!isMissingTableError(error)) throw error;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return counts;
|
|
106
|
+
}
|
|
107
|
+
|
|
74
108
|
/**
|
|
75
109
|
* Count publicly-visible term assignments for one taxonomy, keyed by the
|
|
76
110
|
* term's translation_group (what `content_taxonomies.taxonomy_id` stores).
|
|
@@ -82,9 +116,15 @@ async function runCounts(
|
|
|
82
116
|
* rather than a throw.
|
|
83
117
|
*
|
|
84
118
|
* One database round-trip for the whole taxonomy (UNION ALL across
|
|
85
|
-
* collections).
|
|
86
|
-
*
|
|
87
|
-
*
|
|
119
|
+
* collections). On a backend that caps compound-SELECT terms — D1 allows five
|
|
120
|
+
* — the branches are split into one statement per batch, since a taxonomy
|
|
121
|
+
* declaring more collections than that would otherwise take down every path
|
|
122
|
+
* that shows counts. Per-collection sums are commutative, so batching cannot
|
|
123
|
+
* change the total.
|
|
124
|
+
*
|
|
125
|
+
* Callers on the public render path should go through the request-cached
|
|
126
|
+
* wrapper in `taxonomies/index.ts` so a page rendering both the widget and a
|
|
127
|
+
* term detail shares one computation.
|
|
88
128
|
*/
|
|
89
129
|
export async function fetchVisibleTermCounts(
|
|
90
130
|
db: Kysely<Database>,
|
|
@@ -95,23 +135,11 @@ export async function fetchVisibleTermCounts(
|
|
|
95
135
|
for (const collection of unique) validateIdentifier(collection, "collection slug");
|
|
96
136
|
if (unique.length === 0) return new Map();
|
|
97
137
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
if (!isMissingTableError(error)) throw error;
|
|
102
|
-
}
|
|
138
|
+
const limit = compoundSelectLimit(db);
|
|
139
|
+
const batched = limit === null ? [unique] : chunks(unique, limit);
|
|
140
|
+
const batches = await Promise.all(batched.map((batch) => runBatch(db, taxonomyName, batch)));
|
|
103
141
|
|
|
104
|
-
// A declared collection has no ec_* table — retry per collection so the
|
|
105
|
-
// existing tables still contribute (still scheduled-aware + deleted_at).
|
|
106
142
|
const counts = new Map<string, number>();
|
|
107
|
-
for (const
|
|
108
|
-
try {
|
|
109
|
-
for (const [group, count] of await runCounts(db, taxonomyName, [collection])) {
|
|
110
|
-
counts.set(group, (counts.get(group) ?? 0) + count);
|
|
111
|
-
}
|
|
112
|
-
} catch (error) {
|
|
113
|
-
if (!isMissingTableError(error)) throw error;
|
|
114
|
-
}
|
|
115
|
-
}
|
|
143
|
+
for (const batch of batches) addCounts(counts, batch);
|
|
116
144
|
return counts;
|
|
117
145
|
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EmDash comment components
|
|
3
|
+
*
|
|
4
|
+
* Kept out of the main `emdash/ui` barrel so their styles are only loaded on
|
|
5
|
+
* pages that actually render comments. Importing from `emdash/ui` pulls the
|
|
6
|
+
* whole barrel into Astro's CSS module graph, which put comment CSS on every
|
|
7
|
+
* page that used e.g. `PortableText` (#2039).
|
|
8
|
+
*
|
|
9
|
+
* ```astro
|
|
10
|
+
* ---
|
|
11
|
+
* import { Comments, CommentForm } from "emdash/ui/comments";
|
|
12
|
+
* ---
|
|
13
|
+
* <Comments collection="posts" contentId={post.data.id} threaded />
|
|
14
|
+
* <CommentForm collection="posts" contentId={post.data.id} />
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
export { default as Comments } from "./components/Comments.astro";
|
|
19
|
+
export { default as CommentForm } from "./components/CommentForm.astro";
|
package/src/ui.ts
CHANGED
|
@@ -52,9 +52,6 @@ export {
|
|
|
52
52
|
// Shares the name with the `type Block` re-export above; the
|
|
53
53
|
// type and the component live in different namespaces.
|
|
54
54
|
Block,
|
|
55
|
-
// Comment components
|
|
56
|
-
Comments,
|
|
57
|
-
CommentForm,
|
|
58
55
|
// Widget components
|
|
59
56
|
WidgetArea,
|
|
60
57
|
// Components object for manual use
|
|
@@ -78,3 +75,14 @@ export {
|
|
|
78
75
|
EmDashBodyStart,
|
|
79
76
|
EmDashBodyEnd,
|
|
80
77
|
} from "./components/index.js";
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* @deprecated Import from `emdash/ui/comments` instead. Barrel re-exports pull
|
|
81
|
+
* comment CSS into every page that imports `emdash/ui` (#2039). Will be removed in 1.0.
|
|
82
|
+
*/
|
|
83
|
+
export { Comments } from "./components/index.js";
|
|
84
|
+
/**
|
|
85
|
+
* @deprecated Import from `emdash/ui/comments` instead. Barrel re-exports pull
|
|
86
|
+
* comment CSS into every page that imports `emdash/ui` (#2039). Will be removed in 1.0.
|
|
87
|
+
*/
|
|
88
|
+
export { CommentForm } from "./components/index.js";
|
package/src/utils/hash.ts
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
export const MAX_CONTENT_HASH_BYTES = 8 * 1024 * 1024;
|
|
2
|
+
|
|
3
|
+
function formatContentHash(hash: Uint8Array): string {
|
|
4
|
+
const hashHex = Array.from(hash, (byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
5
|
+
return `sha1:${hashHex}`;
|
|
6
|
+
}
|
|
7
|
+
|
|
1
8
|
/**
|
|
2
9
|
* SHA-256 hash of a string, truncated to 16 hex chars (64 bits).
|
|
3
10
|
* For cache invalidation / ETags — not for security.
|
|
@@ -25,12 +32,16 @@ export async function computeContentHash(content: Uint8Array | ArrayBuffer): Pro
|
|
|
25
32
|
let buf: ArrayBuffer;
|
|
26
33
|
if (content instanceof ArrayBuffer) {
|
|
27
34
|
buf = content;
|
|
35
|
+
} else if (
|
|
36
|
+
content.buffer instanceof ArrayBuffer &&
|
|
37
|
+
content.byteOffset === 0 &&
|
|
38
|
+
content.byteLength === content.buffer.byteLength
|
|
39
|
+
) {
|
|
40
|
+
buf = content.buffer;
|
|
28
41
|
} else {
|
|
29
42
|
buf = new ArrayBuffer(content.byteLength);
|
|
30
43
|
new Uint8Array(buf).set(content);
|
|
31
44
|
}
|
|
32
45
|
const hashBuffer = await crypto.subtle.digest("SHA-1", buf);
|
|
33
|
-
|
|
34
|
-
const hashHex = Array.from(hashArray, (b) => b.toString(16).padStart(2, "0")).join("");
|
|
35
|
-
return `sha1:${hashHex}`;
|
|
46
|
+
return formatContentHash(new Uint8Array(hashBuffer));
|
|
36
47
|
}
|
package/src/virtual-modules.d.ts
CHANGED
|
@@ -54,11 +54,19 @@ declare module "virtual:emdash/dialect" {
|
|
|
54
54
|
config: unknown;
|
|
55
55
|
isAuthenticated: boolean;
|
|
56
56
|
isWrite: boolean;
|
|
57
|
+
/** Whether core routing allows this request to use an anonymous public-read cache. */
|
|
58
|
+
canUseCachedBinding?: boolean;
|
|
57
59
|
cookies: {
|
|
58
60
|
get(name: string): { value: string } | undefined;
|
|
59
61
|
set(name: string, value: string, options: Record<string, unknown>): void;
|
|
60
62
|
};
|
|
61
63
|
url: URL;
|
|
64
|
+
/**
|
|
65
|
+
* ms-epoch of the last content-namespace object-cache invalidation.
|
|
66
|
+
* Hyperdrive uses this (with `preferUncachedAfterWriteMs`) to briefly
|
|
67
|
+
* prefer the primary uncached binding after a publish.
|
|
68
|
+
*/
|
|
69
|
+
lastContentWriteAt?: number;
|
|
62
70
|
}
|
|
63
71
|
export interface RequestScopedDb {
|
|
64
72
|
db: Kysely<unknown>;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"adapters-C0ONzkUP.d.mts","names":[],"sources":["../src/db/adapters.ts"],"mappings":";;AA0BA;;;;;AAKA;;;;;;;;;;;;AA8BA;;;;;AAOA;;KA1CY,mBAAA;;;AA+DZ;UA1DiB,kBAAA;EAChB,UAAA;EACA,MAAA;EACA,IAAA,EAAM,mBAAA;EAuDgB;;;;AAqBvB;;;;;;;;;AAWA;EAxEC,oBAAA;;;;;;;;;EASA,kBAAA;AAAA;AAAA,UAGgB,YAAA;EAoEO;;;EAhEvB,GAAA;AAAA;AAAA,UAGgB,YAAA;EA0EmD;;;EAtEnE,GAAA;EAsEmE;;;EAlEnE,SAAA;AAAA;;;;;;;;;;;iBAae,MAAA,CAAO,MAAA,EAAQ,YAAA,GAAe,kBAAA;;;;;;;;;;;;;;iBAqB9B,MAAA,CAAO,MAAA,EAAQ,YAAA,GAAe,kBAAA;;;;UAW7B,cAAA;EAChB,gBAAA;EACA,IAAA;EACA,IAAA;EACA,QAAA;EACA,IAAA;EACA,QAAA;EACA,GAAA;EACA,IAAA;IAAS,GAAA;IAAc,GAAA;EAAA;AAAA;;;;;;;;;;;iBAaR,QAAA,CAAS,MAAA,EAAQ,cAAA,GAAiB,kBAAA"}
|
package/dist/after-B1IIdH3Y.mjs
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
//#region src/after.ts
|
|
2
|
-
const waitUntilReady = (async () => {
|
|
3
|
-
try {
|
|
4
|
-
return (await import("virtual:emdash/wait-until")).waitUntil ?? null;
|
|
5
|
-
} catch {
|
|
6
|
-
return null;
|
|
7
|
-
}
|
|
8
|
-
})();
|
|
9
|
-
waitUntilReady.catch(() => {});
|
|
10
|
-
/**
|
|
11
|
-
* Schedule `fn` to run without blocking the response.
|
|
12
|
-
*
|
|
13
|
-
* Errors are caught and logged — a deferred task should never surface
|
|
14
|
-
* as an unhandled rejection because the response is long gone. Callers
|
|
15
|
-
* that care about errors should handle them inside `fn`.
|
|
16
|
-
*/
|
|
17
|
-
function after(fn) {
|
|
18
|
-
const promise = Promise.resolve().then(fn).catch((error) => {
|
|
19
|
-
console.error("[emdash] deferred task failed:", error);
|
|
20
|
-
});
|
|
21
|
-
waitUntilReady.then((waitUntil) => {
|
|
22
|
-
if (waitUntil) waitUntil(promise);
|
|
23
|
-
return null;
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
//#endregion
|
|
28
|
-
export { after as t };
|
|
29
|
-
//# sourceMappingURL=after-B1IIdH3Y.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"after-B1IIdH3Y.mjs","names":[],"sources":["../src/after.ts"],"sourcesContent":["/**\n * Defer work past the HTTP response.\n *\n * Use for bookkeeping that doesn't need to complete before the client\n * gets bytes — writes that record state, maintenance queries, cache\n * refreshes. `after()` hands the promise to the host's lifetime\n * extender when one is available (Cloudflare's `waitUntil` under\n * workerd), or fires-and-forgets on Node (the process lives for the\n * next request anyway).\n *\n * Host binding is resolved lazily via a dynamic import of the\n * `virtual:emdash/wait-until` virtual module. Lazy — rather than a\n * static top-level import — so tools that walk the dist in a plain\n * Node loader (`astro check`, Vitest, etc.) don't trip over the\n * `virtual:` scheme: they'd only fail if they actually called\n * `after()`, which they don't during type-checking.\n */\n\nexport type WaitUntilFn = (promise: Promise<unknown>) => void;\n\n// Resolves to the host's waitUntil if the adapter provided one, or\n// null otherwise. Kicked off once at module load; subsequent `after()`\n// calls see the cached result without re-importing.\nconst waitUntilReady: Promise<WaitUntilFn | null> = (async () => {\n\ttry {\n\t\t// @ts-ignore - virtual module, generated by the Astro integration\n\t\tconst mod = (await import(\"virtual:emdash/wait-until\")) as {\n\t\t\twaitUntil?: WaitUntilFn;\n\t\t};\n\t\treturn mod.waitUntil ?? null;\n\t} catch {\n\t\t// No virtual module available (Node-side tooling, tests without the\n\t\t// integration in scope). Fire-and-forget is the safe fallback.\n\t\treturn null;\n\t}\n})();\n// Surface rejections without making the module-load fail.\nwaitUntilReady.catch(() => {});\n\n/**\n * Schedule `fn` to run without blocking the response.\n *\n * Errors are caught and logged — a deferred task should never surface\n * as an unhandled rejection because the response is long gone. Callers\n * that care about errors should handle them inside `fn`.\n */\nexport function after(fn: () => void | Promise<void>): void {\n\tconst promise = Promise.resolve()\n\t\t.then(fn)\n\t\t.catch((error) => {\n\t\t\tconsole.error(\"[emdash] deferred task failed:\", error);\n\t\t});\n\n\t// Defer the lifetime-extender handoff to the microtask that resolves\n\t// waitUntilReady. On workerd this is effectively instant (the virtual\n\t// module is already loaded in the bundle); on Node the promise\n\t// resolves to null, so this is just one extra microtask and no-op.\n\tvoid waitUntilReady.then((waitUntil) => {\n\t\tif (waitUntil) waitUntil(promise);\n\t\treturn null;\n\t});\n}\n"],"mappings":";AAuBA,MAAM,kBAA+C,YAAY;AAChE,KAAI;AAKH,UAHa,MAAM,OAAO,8BAGf,aAAa;SACjB;AAGP,SAAO;;IAEL;AAEJ,eAAe,YAAY,GAAG;;;;;;;;AAS9B,SAAgB,MAAM,IAAsC;CAC3D,MAAM,UAAU,QAAQ,SAAS,CAC/B,KAAK,GAAG,CACR,OAAO,UAAU;AACjB,UAAQ,MAAM,kCAAkC,MAAM;GACrD;AAMH,CAAK,eAAe,MAAM,cAAc;AACvC,MAAI,UAAW,WAAU,QAAQ;AACjC,SAAO;GACN"}
|