emdash 0.32.0 → 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 +22 -22
- package/dist/api/schemas/index.d.mts +2 -2
- package/dist/api/schemas/index.mjs +5 -5
- package/dist/{api-DgPbMlng.mjs → api-D2hunekQ.mjs} +247 -45
- package/dist/api-D2hunekQ.mjs.map +1 -0
- package/dist/{api-tokens-p-iMzvXR.mjs → api-tokens-CSND0i1z.mjs} +2 -2
- package/dist/{api-tokens-p-iMzvXR.mjs.map → api-tokens-CSND0i1z.mjs.map} +1 -1
- package/dist/{apply-1_6ra7NP.mjs → apply-kwNEJW2l.mjs} +35 -22
- package/dist/apply-kwNEJW2l.mjs.map +1 -0
- package/dist/astro/index.d.mts +12 -12
- package/dist/astro/index.mjs +13 -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 +344 -173
- 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 +18 -18
- package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +18 -18
- package/dist/astro/routes/api/admin/bylines/index.mjs +18 -18
- 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 +12 -12
- 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 +46 -45
- package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +46 -45
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +45 -44
- 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 +45 -44
- package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +45 -44
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +45 -44
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/index.mjs +45 -44
- 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 +45 -44
- 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 +45 -44
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +45 -44
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +45 -44
- 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 +46 -45
- package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +45 -44
- package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/install.mjs +46 -45
- package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/updates.mjs +45 -44
- package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +45 -44
- 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 +45 -44
- 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 +6 -6
- 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 +13 -13
- package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +9 -9
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs +18 -18
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs +18 -18
- 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 +16 -16
- 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_.mjs +9 -9
- 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 +15 -15
- 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 +12 -12
- 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 +27 -27
- 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.mjs +10 -10
- package/dist/astro/routes/api/media/_id_/upload.mjs +6 -6
- package/dist/astro/routes/api/media/_id_/usage.mjs +14 -14
- package/dist/astro/routes/api/media/_id_.mjs +13 -13
- 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.mjs +9 -9
- package/dist/astro/routes/api/media.mjs +13 -13
- package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +11 -11
- package/dist/astro/routes/api/menus/_name_/items.mjs +11 -11
- package/dist/astro/routes/api/menus/_name_/reorder.mjs +11 -11
- package/dist/astro/routes/api/menus/_name_/translations.mjs +11 -11
- package/dist/astro/routes/api/menus/_name_.mjs +11 -11
- package/dist/astro/routes/api/menus/index.mjs +11 -11
- package/dist/astro/routes/api/oauth/authorize.mjs +6 -6
- package/dist/astro/routes/api/oauth/device/authorize.mjs +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 +36 -5
- 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 +18 -18
- package/dist/astro/routes/api/relations/_id_/translations.mjs +13 -13
- package/dist/astro/routes/api/relations/index.mjs +18 -18
- 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 +45 -44
- 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 +45 -44
- 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 +45 -44
- package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +45 -44
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/index.mjs +45 -44
- 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 +11 -9
- package/dist/astro/routes/api/schema/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs +45 -44
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/schema/orphans/index.mjs +45 -44
- 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 +17 -13
- package/dist/astro/routes/api/search/enable.mjs.map +1 -1
- package/dist/astro/routes/api/search/index.mjs +11 -11
- package/dist/astro/routes/api/search/rebuild.mjs +13 -13
- package/dist/astro/routes/api/search/rebuild.mjs.map +1 -1
- package/dist/astro/routes/api/search/stats.mjs +7 -7
- package/dist/astro/routes/api/search/suggest.mjs +11 -11
- 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 +30 -30
- package/dist/astro/routes/api/setup/dev-reset.mjs +3 -3
- package/dist/astro/routes/api/setup/index.mjs +32 -32
- 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 +16 -16
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +16 -16
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +16 -16
- package/dist/astro/routes/api/taxonomies/index.mjs +16 -16
- 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 +12 -12
- package/dist/astro/routes/sitemap.xml.mjs +10 -10
- package/dist/astro/types.d.mts +19 -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-R5iYYrpa.mjs → authorize-qRhWQnel.mjs} +2 -2
- package/dist/{authorize-R5iYYrpa.mjs.map → authorize-qRhWQnel.mjs.map} +1 -1
- package/dist/{backup-LpQ1V_sR.mjs → backup-CtA6LDNw.mjs} +5 -5
- package/dist/{backup-LpQ1V_sR.mjs.map → backup-CtA6LDNw.mjs.map} +1 -1
- package/dist/{byline-C5TAqs8N.mjs → byline-Cp6csL84.mjs} +9 -9
- package/dist/{byline-C5TAqs8N.mjs.map → byline-Cp6csL84.mjs.map} +1 -1
- package/dist/{byline-fields-T9ZLZMxJ.mjs → byline-fields-CNc0Yq5i.mjs} +2 -2
- package/dist/{byline-fields-T9ZLZMxJ.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-B8-WGdja.mjs → bylines-CEj5CdT4.mjs} +7 -7
- package/dist/{bylines-B8-WGdja.mjs.map → bylines-CEj5CdT4.mjs.map} +1 -1
- package/dist/{bylines-DGuqBLjV.mjs → bylines-cf-C9lmF.mjs} +4 -4
- package/dist/{bylines-DGuqBLjV.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-D5dlPeRb.mjs → chunks-DbYzib_k.mjs} +2 -2
- package/dist/{chunks-D5dlPeRb.mjs.map → chunks-DbYzib_k.mjs.map} +1 -1
- package/dist/cli/index.mjs +40 -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-DnTxxVHv.mjs → comment-BIkJ6Fil.mjs} +3 -3
- package/dist/{comment-DnTxxVHv.mjs.map → comment-BIkJ6Fil.mjs.map} +1 -1
- package/dist/{comment-reaction-BUlUz2bh.mjs → comment-reaction-D-laEceb.mjs} +2 -2
- package/dist/{comment-reaction-BUlUz2bh.mjs.map → comment-reaction-D-laEceb.mjs.map} +1 -1
- package/dist/{comments-QPKgK3nk.mjs → comments-0_w6KChA.mjs} +3 -3
- package/dist/{comments-QPKgK3nk.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/{content-CpfKV9QE.mjs → content-CJ94NEx5.mjs} +165 -112
- package/dist/content-CJ94NEx5.mjs.map +1 -0
- package/dist/{content-refresh-DgqUBeTv.mjs → content-refresh-Xw7aKmou.mjs} +6 -6
- package/dist/{content-refresh-DgqUBeTv.mjs.map → content-refresh-Xw7aKmou.mjs.map} +1 -1
- package/dist/{context-kO4YZB03.mjs → context-C_1nrqnW.mjs} +14 -14
- package/dist/{context-kO4YZB03.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-DoBwPnON.mjs → dashboard-DINnNVVU.mjs} +5 -5
- package/dist/{dashboard-DoBwPnON.mjs.map → dashboard-DINnNVVU.mjs.map} +1 -1
- package/dist/db/index.d.mts +3 -3
- package/dist/db/index.mjs +2 -2
- package/dist/db/index.mjs.map +1 -1
- package/dist/db/libsql.d.mts +1 -1
- package/dist/db/postgres.d.mts +1 -1
- package/dist/db/sqlite.d.mts +1 -1
- package/dist/{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-DhUsyJU6.mjs → device-flow-CTqd8mud.mjs} +5 -5
- package/dist/{device-flow-DhUsyJU6.mjs.map → device-flow-CTqd8mud.mjs.map} +1 -1
- package/dist/{dialect-helpers-DFwyWjTM.mjs → dialect-helpers-BSbfaO3F.mjs} +24 -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-DmmN74gW.mjs → error-oh_9i6bR.mjs} +3 -3
- package/dist/{error-DmmN74gW.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-CdW31WsG.mjs → escape-CXps5F_v.mjs} +1 -1
- package/dist/{escape-CdW31WsG.mjs.map → escape-CXps5F_v.mjs.map} +1 -1
- package/dist/{field-defs-cache-QMVnzTH6.mjs → field-defs-cache-WD82dMQq.mjs} +4 -4
- package/dist/{field-defs-cache-QMVnzTH6.mjs.map → field-defs-cache-WD82dMQq.mjs.map} +1 -1
- package/dist/{fts-manager-vncsZIJm.mjs → fts-manager-BITakW_R.mjs} +37 -13
- package/dist/fts-manager-BITakW_R.mjs.map +1 -0
- package/dist/{hash-Cb7U1b5M.mjs → hash-Cg0TXJPV.mjs} +1 -1
- package/dist/{hash-Cb7U1b5M.mjs.map → hash-Cg0TXJPV.mjs.map} +1 -1
- package/dist/{hreflang-CZbSx6Bg.d.mts → hreflang-BaLCNcDx.d.mts} +2 -2
- package/dist/{hreflang-CZbSx6Bg.d.mts.map → hreflang-BaLCNcDx.d.mts.map} +1 -1
- package/dist/{hreflang-Bg-zMpkr.mjs → hreflang-BdZuVBhL.mjs} +6 -6
- package/dist/{hreflang-Bg-zMpkr.mjs.map → hreflang-BdZuVBhL.mjs.map} +1 -1
- package/dist/{import-PKhLeXvn.mjs → import-C-9uqyT3.mjs} +6 -6
- package/dist/{import-PKhLeXvn.mjs.map → import-C-9uqyT3.mjs.map} +1 -1
- package/dist/{index-j9rTh3cp.d.mts → index-M37iz29I.d.mts} +75 -35
- package/dist/index-M37iz29I.d.mts.map +1 -0
- package/dist/{index-BeNto_Vs.d.mts → index-MGw47uWq.d.mts} +3 -3
- package/dist/{index-BeNto_Vs.d.mts.map → index-MGw47uWq.d.mts.map} +1 -1
- package/dist/index.d.mts +19 -19
- package/dist/index.mjs +68 -66
- package/dist/{load-BwTdWE8B.mjs → load-DV1DZuUJ.mjs} +2 -2
- package/dist/{load-BwTdWE8B.mjs.map → load-DV1DZuUJ.mjs.map} +1 -1
- package/dist/{loader-C1XOLV5b.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-tQDZEdu7.mjs → media-BP7S-nHT.mjs} +2 -2
- package/dist/{media-tQDZEdu7.mjs.map → media-BP7S-nHT.mjs.map} +1 -1
- package/dist/{media-DWIzoVFL.mjs → media-OhYL-7Io.mjs} +1 -1
- package/dist/{media-DWIzoVFL.mjs.map → media-OhYL-7Io.mjs.map} +1 -1
- package/dist/{media-allowlist-B7TPD6aq.mjs → media-allowlist-D-peH1H5.mjs} +1 -1
- package/dist/{media-allowlist-B7TPD6aq.mjs.map → media-allowlist-D-peH1H5.mjs.map} +1 -1
- package/dist/{media-upload-Bc9Nc5Zf.mjs → media-upload-DtrwU2B0.mjs} +7 -7
- package/dist/{media-upload-Bc9Nc5Zf.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-DPJcNaAq.mjs → media-usage-BlxfTkN0.mjs} +8 -8
- package/dist/{media-usage-DPJcNaAq.mjs.map → media-usage-BlxfTkN0.mjs.map} +1 -1
- package/dist/{menus-BxPLFfIc.mjs → menus-BcQWxeXu.mjs} +4 -4
- package/dist/{menus-BxPLFfIc.mjs.map → menus-BcQWxeXu.mjs.map} +1 -1
- package/dist/{menus-C6qhqP4X.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-C9tFinly.mjs → oauth-authorization-ClvktmrL.mjs} +5 -5
- package/dist/{oauth-authorization-C9tFinly.mjs.map → oauth-authorization-ClvktmrL.mjs.map} +1 -1
- package/dist/{oauth-clients-BwTxE1aE.mjs → oauth-clients-8ao-U66l.mjs} +1 -1
- package/dist/{oauth-clients-BwTxE1aE.mjs.map → oauth-clients-8ao-U66l.mjs.map} +1 -1
- package/dist/{oauth-state-store-DaRUwPWO.mjs → oauth-state-store-B1ofdTiQ.mjs} +1 -1
- package/dist/{oauth-state-store-DaRUwPWO.mjs.map → oauth-state-store-B1ofdTiQ.mjs.map} +1 -1
- package/dist/{oauth-user-lookup-CzuzOSlF.mjs → oauth-user-lookup-CscEuIiR.mjs} +1 -1
- package/dist/{oauth-user-lookup-CzuzOSlF.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-aeIs8WFu.d.mts → options-CA4eVX6P.d.mts} +3 -3
- package/dist/{options-aeIs8WFu.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-BL49yb9D.mjs → parse-CJKNuewM.mjs} +2 -2
- package/dist/{parse-BL49yb9D.mjs.map → parse-CJKNuewM.mjs.map} +1 -1
- package/dist/{passkey-config-KMhgFjdQ.mjs → passkey-config-D-zrzMJI.mjs} +1 -1
- package/dist/{passkey-config-KMhgFjdQ.mjs.map → passkey-config-D-zrzMJI.mjs.map} +1 -1
- package/dist/{placeholder-Dxo5Zt58.d.mts → placeholder-DaeNS-VG.d.mts} +1 -1
- package/dist/{placeholder-Dxo5Zt58.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-CNahFfj6.mjs → portable-text-B_kqBmXB.mjs} +1 -1
- package/dist/{portable-text-CNahFfj6.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-DCiXI7OZ.mjs → query-C5w7PsRQ.mjs} +20 -41
- package/dist/query-C5w7PsRQ.mjs.map +1 -0
- package/dist/{query-1xOcEy18.mjs → query-rC9HKv1N.mjs} +4 -4
- package/dist/{query-1xOcEy18.mjs.map → query-rC9HKv1N.mjs.map} +1 -1
- package/dist/{rate-limit-Vkp9gQ1Y.mjs → rate-limit-kug6q99V.mjs} +2 -2
- package/dist/{rate-limit-Vkp9gQ1Y.mjs.map → rate-limit-kug6q99V.mjs.map} +1 -1
- package/dist/{redirect-BJ6d1yHh.mjs → redirect-DIJxXKOG.mjs} +3 -3
- package/dist/{redirect-BJ6d1yHh.mjs.map → redirect-DIJxXKOG.mjs.map} +1 -1
- package/dist/{redirect-CDgfv9vh.mjs → redirect-Egf2R9yP.mjs} +1 -1
- package/dist/{redirect-CDgfv9vh.mjs.map → redirect-Egf2R9yP.mjs.map} +1 -1
- package/dist/{redirects-Cwkq2H-G.mjs → redirects-Bzm812bY.mjs} +5 -5
- package/dist/{redirects-Cwkq2H-G.mjs.map → redirects-Bzm812bY.mjs.map} +1 -1
- package/dist/{redirects-BOn2DIUs.mjs → redirects-G8wAhWAf.mjs} +20 -6
- package/dist/redirects-G8wAhWAf.mjs.map +1 -0
- package/dist/{registry-BP1JK2xh.mjs → registry-Dbodb4Uo.mjs} +59 -14
- package/dist/registry-Dbodb4Uo.mjs.map +1 -0
- package/dist/{relation-DJ5DZh7B.mjs → relation-Cbe3Sd3m.mjs} +3 -3
- package/dist/{relation-DJ5DZh7B.mjs.map → relation-Cbe3Sd3m.mjs.map} +1 -1
- package/dist/{relations-C4duJnwI.mjs → relations-Bw_E1TXo.mjs} +3 -3
- package/dist/{relations-C4duJnwI.mjs.map → relations-Bw_E1TXo.mjs.map} +1 -1
- package/dist/{relations-DHFQGX0h.d.mts → relations-G2ta7GIl.d.mts} +36 -9
- package/dist/relations-G2ta7GIl.d.mts.map +1 -0
- package/dist/{relations-DpTjftCl.mjs → relations-qHwpUe66.mjs} +5 -5
- package/dist/{relations-DpTjftCl.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-BUvFE0Lr.mjs → resolve-DZzG4HqM.mjs} +1 -1
- package/dist/{resolve-BUvFE0Lr.mjs.map → resolve-DZzG4HqM.mjs.map} +1 -1
- package/dist/{runner-BsI18UgP.mjs → runner-BFTrkYhu.mjs} +482 -216
- package/dist/runner-BFTrkYhu.mjs.map +1 -0
- package/dist/{runner-CHdkERbt.d.mts → runner-BaADli8l.d.mts} +2 -2
- package/dist/{runner-CHdkERbt.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-eqZhkR0S.mjs → schema-CiQXr6_F.mjs} +3 -3
- package/dist/{schema-eqZhkR0S.mjs.map → schema-CiQXr6_F.mjs.map} +1 -1
- package/dist/{scopes-Be2d8bSb.mjs → scopes-CNJVT5i5.mjs} +3 -3
- package/dist/{scopes-Be2d8bSb.mjs.map → scopes-CNJVT5i5.mjs.map} +1 -1
- package/dist/{search-CeO678cp.mjs → search-FZhx5dDU.mjs} +6 -6
- package/dist/{search-CeO678cp.mjs.map → search-FZhx5dDU.mjs.map} +1 -1
- package/dist/{secrets-870d-7yA.mjs → secrets-DLd8RXee.mjs} +4 -4
- package/dist/{secrets-870d-7yA.mjs.map → secrets-DLd8RXee.mjs.map} +1 -1
- package/dist/{sections-DSuEfirn.mjs → sections-BrIrMUCn.mjs} +3 -3
- package/dist/{sections-DSuEfirn.mjs.map → sections-BrIrMUCn.mjs.map} +1 -1
- package/dist/seed/index.d.mts +2 -2
- package/dist/seed/index.mjs +24 -24
- package/dist/seo/index.d.mts +3 -3
- package/dist/seo/index.mjs +17 -17
- 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-BAPKiED8.mjs → seo-DTHRntNC.mjs} +3 -3
- package/dist/{seo-BAPKiED8.mjs.map → seo-DTHRntNC.mjs.map} +1 -1
- package/dist/{service-DyFT-k-R.mjs → service-B-pYGPgR.mjs} +4 -4
- package/dist/{service-DyFT-k-R.mjs.map → service-B-pYGPgR.mjs.map} +1 -1
- package/dist/{session-user-BrK2zz7S.mjs → session-user-BvM9-zNl.mjs} +2 -2
- package/dist/{session-user-BrK2zz7S.mjs.map → session-user-BvM9-zNl.mjs.map} +1 -1
- package/dist/{settings-CREKyj8I.mjs → settings-DPHau-WH.mjs} +3 -3
- package/dist/{settings-CREKyj8I.mjs.map → settings-DPHau-WH.mjs.map} +1 -1
- package/dist/{settings-DgKouY2S.mjs → settings-kJhGiQ4z.mjs} +7 -7
- package/dist/{settings-DgKouY2S.mjs.map → settings-kJhGiQ4z.mjs.map} +1 -1
- package/dist/{setup-complete-L7bMK2VI.mjs → setup-complete-u50Qm8rY.mjs} +2 -2
- package/dist/{setup-complete-L7bMK2VI.mjs.map → setup-complete-u50Qm8rY.mjs.map} +1 -1
- package/dist/{setup-nonce-Ct5tjWcq.mjs → setup-nonce-DCjiiOD2.mjs} +1 -1
- package/dist/{setup-nonce-Ct5tjWcq.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 +1 -1
- package/dist/{taxonomies-Dbdki3Un.mjs → taxonomies-CKuaZER5.mjs} +85 -5
- package/dist/taxonomies-CKuaZER5.mjs.map +1 -0
- package/dist/{taxonomies-B61CRSha.mjs → taxonomies-CLN1N92E.mjs} +16 -17
- package/dist/taxonomies-CLN1N92E.mjs.map +1 -0
- package/dist/{taxonomy-DvwWAPvA.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-DokJOScS.d.mts → transport-CAwTaTp_.d.mts} +1 -1
- package/dist/{transport-DokJOScS.d.mts.map → transport-CAwTaTp_.d.mts.map} +1 -1
- package/dist/{transport-BWQo0Foy.mjs → transport-DVsa5YYo.mjs} +1 -1
- package/dist/{transport-BWQo0Foy.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-DqZVPILm.d.mts → types-BGWPMiBO.d.mts} +2 -2
- package/dist/{types-DqZVPILm.d.mts.map → types-BGWPMiBO.d.mts.map} +1 -1
- package/dist/{types-DsAMyD_o.d.mts → types-BK6U01Ro.d.mts} +1 -1
- package/dist/{types-DsAMyD_o.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-jISEalTX.d.mts → types-BnFP1M3J.d.mts} +22 -1
- package/dist/types-BnFP1M3J.d.mts.map +1 -0
- package/dist/{types-Dr2GLlwu.d.mts → types-C8oz_ayJ.d.mts} +1 -1
- package/dist/{types-Dr2GLlwu.d.mts.map → types-C8oz_ayJ.d.mts.map} +1 -1
- package/dist/{types-C9P3ysxq.d.mts → types-CbUcuxxc.d.mts} +1 -1
- package/dist/{types-C9P3ysxq.d.mts.map → types-CbUcuxxc.d.mts.map} +1 -1
- package/dist/{types-XrQQ-Aex.mjs → types-Cd8iuS1J.mjs} +10 -3
- package/dist/{types-XrQQ-Aex.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-BQY7VYw6.d.mts → types-Cz8hNch2.d.mts} +5 -5
- package/dist/{types-BQY7VYw6.d.mts.map → types-Cz8hNch2.d.mts.map} +1 -1
- package/dist/{types-CcSZCcF1.d.mts → types-DLG4IFEQ.d.mts} +1 -1
- package/dist/{types-CcSZCcF1.d.mts.map → types-DLG4IFEQ.d.mts.map} +1 -1
- package/dist/{types-84Bque3-.d.mts → types-Dc4ntQjQ.d.mts} +10 -1
- package/dist/types-Dc4ntQjQ.d.mts.map +1 -0
- package/dist/{types-DQLZ58GV.d.mts → types-LoagAGzH.d.mts} +1 -1
- package/dist/{types-DQLZ58GV.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-C5yd6Gae.mjs → upload-attempts-D8QAFLUJ.mjs} +1 -1
- package/dist/{upload-attempts-C5yd6Gae.mjs.map → upload-attempts-D8QAFLUJ.mjs.map} +1 -1
- package/dist/{user-BAumEmpA.mjs → user-DBrq4UVq.mjs} +3 -3
- package/dist/{user-BAumEmpA.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-CdYcY-Ln.d.mts → validate-C3oSmA7F.d.mts} +15 -5
- package/dist/validate-C3oSmA7F.d.mts.map +1 -0
- package/dist/{validate-Bs_wT2ul.mjs → validate-mKo3RxBM.mjs} +3 -3
- package/dist/{validate-Bs_wT2ul.mjs.map → validate-mKo3RxBM.mjs.map} +1 -1
- package/dist/{validation-BngR0nit.mjs → validation-BgpucsvF.mjs} +10 -10
- package/dist/{validation-BngR0nit.mjs.map → validation-BgpucsvF.mjs.map} +1 -1
- package/dist/version-C4PnpmoV.mjs +7 -0
- package/dist/{version-Bdfb34kk.mjs.map → version-C4PnpmoV.mjs.map} +1 -1
- package/dist/{widgets-L-VndTKD.mjs → widgets-CJJtkiKh.mjs} +3 -3
- package/dist/{widgets-L-VndTKD.mjs.map → widgets-CJJtkiKh.mjs.map} +1 -1
- package/dist/{wxr-taxonomies-BexjtNid.mjs → wxr-taxonomies-9PPSy8X6.mjs} +4 -4
- package/dist/{wxr-taxonomies-BexjtNid.mjs.map → wxr-taxonomies-9PPSy8X6.mjs.map} +1 -1
- package/dist/{wxr-taxonomies-DueaLFd9.d.mts → wxr-taxonomies-Bkpp_2tK.d.mts} +1 -1
- package/dist/{wxr-taxonomies-DueaLFd9.d.mts.map → wxr-taxonomies-Bkpp_2tK.d.mts.map} +1 -1
- package/dist/{zod-generator-DMzfga3g.mjs → zod-generator-CG64Hnbh.mjs} +3 -3
- package/dist/{zod-generator-DMzfga3g.mjs.map → zod-generator-CG64Hnbh.mjs.map} +1 -1
- package/package.json +11 -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/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 +101 -1
- package/src/api/openapi/document.ts +48 -0
- package/src/api/public-url.ts +14 -2
- package/src/api/schemas/schema.ts +13 -0
- package/src/api/schemas/search.ts +2 -0
- package/src/api/schemas/taxonomies.ts +18 -0
- package/src/api/site-url.ts +16 -6
- package/src/astro/integration/routes.ts +14 -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/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/types.ts +6 -0
- package/src/cleanup.ts +31 -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 +171 -31
- package/src/components/OrderedList.astro +14 -0
- package/src/components/PortableText.astro +26 -4
- 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 +3 -22
- 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 +10 -0
- package/src/database/repositories/content.ts +191 -178
- 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 +13 -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 +268 -92
- package/src/index.ts +2 -0
- package/src/loader.ts +46 -24
- 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 +21 -42
- 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/taxonomies/index.ts +11 -7
- package/src/taxonomies/term-counts.ts +2 -4
- package/src/ui-comments.ts +19 -0
- package/src/ui.ts +11 -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-DgPbMlng.mjs.map +0 -1
- package/dist/apply-1_6ra7NP.mjs.map +0 -1
- package/dist/cache-B26cufFd.mjs +0 -65
- package/dist/cache-B26cufFd.mjs.map +0 -1
- package/dist/content-CpfKV9QE.mjs.map +0 -1
- package/dist/dialect-helpers-DFwyWjTM.mjs.map +0 -1
- package/dist/errors-DtEXIQQV.mjs.map +0 -1
- package/dist/fts-manager-vncsZIJm.mjs.map +0 -1
- package/dist/index-j9rTh3cp.d.mts.map +0 -1
- package/dist/loader-C1XOLV5b.mjs.map +0 -1
- package/dist/menus-C6qhqP4X.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-DCiXI7OZ.mjs.map +0 -1
- package/dist/redirects-BOn2DIUs.mjs.map +0 -1
- package/dist/registry-BP1JK2xh.mjs.map +0 -1
- package/dist/relations-DHFQGX0h.d.mts.map +0 -1
- package/dist/runner-BsI18UgP.mjs.map +0 -1
- package/dist/site-url-8N3kSyVZ.mjs +0 -13
- package/dist/site-url-8N3kSyVZ.mjs.map +0 -1
- package/dist/taxonomies-B61CRSha.mjs.map +0 -1
- package/dist/taxonomies-Dbdki3Un.mjs.map +0 -1
- package/dist/taxonomy-DvwWAPvA.mjs.map +0 -1
- package/dist/types-84Bque3-.d.mts.map +0 -1
- package/dist/types-jISEalTX.d.mts.map +0 -1
- package/dist/types-o7xo7VgH.mjs.map +0 -1
- package/dist/validate-CdYcY-Ln.d.mts.map +0 -1
- package/dist/validate-VPnKoIzW.mjs.map +0 -1
- package/dist/version-Bdfb34kk.mjs +0 -7
- /package/dist/{api-tokens-CEsW_jCg.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
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collection reorder endpoint
|
|
3
|
+
*
|
|
4
|
+
* POST /_emdash/api/schema/collections/reorder - Set the admin sidebar order
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import type { APIRoute } from "astro";
|
|
8
|
+
|
|
9
|
+
import { requirePerm } from "#api/authorize.js";
|
|
10
|
+
import { requireDb, unwrapResult } from "#api/error.js";
|
|
11
|
+
import { handleSchemaCollectionReorder } from "#api/index.js";
|
|
12
|
+
import { parseBody, isParseError } from "#api/parse.js";
|
|
13
|
+
import { collectionReorderBody } from "#api/schemas.js";
|
|
14
|
+
|
|
15
|
+
export const prerender = false;
|
|
16
|
+
|
|
17
|
+
export const POST: APIRoute = async ({ request, locals }) => {
|
|
18
|
+
const { emdash, user } = locals;
|
|
19
|
+
|
|
20
|
+
const dbErr = requireDb(emdash?.db);
|
|
21
|
+
if (dbErr) return dbErr;
|
|
22
|
+
|
|
23
|
+
const denied = requirePerm(user, "schema:manage");
|
|
24
|
+
if (denied) return denied;
|
|
25
|
+
|
|
26
|
+
const body = await parseBody(request, collectionReorderBody);
|
|
27
|
+
if (isParseError(body)) return body;
|
|
28
|
+
|
|
29
|
+
const result = await handleSchemaCollectionReorder(emdash.db, body.slugs);
|
|
30
|
+
return unwrapResult(result);
|
|
31
|
+
};
|
|
@@ -21,6 +21,7 @@ export const prerender = false;
|
|
|
21
21
|
* - collection: Collection slug (required)
|
|
22
22
|
* - enabled: boolean (required)
|
|
23
23
|
* - weights: Optional field weights for ranking
|
|
24
|
+
* - tokenize: Optional FTS5 tokenizer configuration
|
|
24
25
|
*/
|
|
25
26
|
export const POST: APIRoute = async ({ request, locals }) => {
|
|
26
27
|
const { emdash, user } = locals;
|
|
@@ -40,7 +41,10 @@ export const POST: APIRoute = async ({ request, locals }) => {
|
|
|
40
41
|
try {
|
|
41
42
|
if (body.enabled) {
|
|
42
43
|
// Enable search - creates FTS table, triggers, and populates index
|
|
43
|
-
await ftsManager.enableSearch(body.collection, {
|
|
44
|
+
await ftsManager.enableSearch(body.collection, {
|
|
45
|
+
weights: body.weights,
|
|
46
|
+
tokenize: body.tokenize,
|
|
47
|
+
});
|
|
44
48
|
|
|
45
49
|
const stats = await ftsManager.getIndexStats(body.collection);
|
|
46
50
|
|
|
@@ -57,7 +57,12 @@ export const POST: APIRoute = async ({ request, locals }) => {
|
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
// Rebuild the index
|
|
60
|
-
await ftsManager.rebuildIndex(
|
|
60
|
+
await ftsManager.rebuildIndex(
|
|
61
|
+
body.collection,
|
|
62
|
+
searchableFields,
|
|
63
|
+
config.weights,
|
|
64
|
+
config.tokenize,
|
|
65
|
+
);
|
|
61
66
|
|
|
62
67
|
// Get stats after rebuild
|
|
63
68
|
const stats = await ftsManager.getIndexStats(body.collection);
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Taxonomy term reorder endpoint
|
|
3
|
+
*
|
|
4
|
+
* POST /_emdash/api/taxonomies/:name/reorder
|
|
5
|
+
* body: { parentId?, ids }
|
|
6
|
+
*
|
|
7
|
+
* Sets the manual order of one sibling group. There is no `locale`: a term
|
|
8
|
+
* holds one position across every locale it is translated into.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import type { APIRoute } from "astro";
|
|
12
|
+
|
|
13
|
+
import { requirePerm } from "#api/authorize.js";
|
|
14
|
+
import { apiError, handleError, requireDb, unwrapResult } from "#api/error.js";
|
|
15
|
+
import { handleTermReorder } from "#api/handlers/taxonomies.js";
|
|
16
|
+
import { isParseError, parseBody } from "#api/parse.js";
|
|
17
|
+
import { reorderTermsBody } from "#api/schemas.js";
|
|
18
|
+
|
|
19
|
+
export const prerender = false;
|
|
20
|
+
|
|
21
|
+
export const POST: APIRoute = async ({ params, request, locals }) => {
|
|
22
|
+
const { emdash, user } = locals;
|
|
23
|
+
const { name } = params;
|
|
24
|
+
if (!name) return apiError("VALIDATION_ERROR", "Taxonomy name required", 400);
|
|
25
|
+
|
|
26
|
+
const dbErr = requireDb(emdash?.db);
|
|
27
|
+
if (dbErr) return dbErr;
|
|
28
|
+
|
|
29
|
+
const denied = requirePerm(user, "taxonomies:manage");
|
|
30
|
+
if (denied) return denied;
|
|
31
|
+
|
|
32
|
+
try {
|
|
33
|
+
const body = await parseBody(request, reorderTermsBody);
|
|
34
|
+
if (isParseError(body)) return body;
|
|
35
|
+
|
|
36
|
+
const result = await handleTermReorder(emdash.db, name, body);
|
|
37
|
+
return unwrapResult(result);
|
|
38
|
+
} catch (error) {
|
|
39
|
+
return handleError(error, "Failed to reorder terms", "TERM_REORDER_ERROR");
|
|
40
|
+
}
|
|
41
|
+
};
|
package/src/astro/types.ts
CHANGED
|
@@ -31,6 +31,12 @@ export interface ManifestCollection {
|
|
|
31
31
|
supports: string[];
|
|
32
32
|
hasSeo: boolean;
|
|
33
33
|
urlPattern?: string;
|
|
34
|
+
/**
|
|
35
|
+
* Omit the auto-generated sidebar entry in the admin. The collection is
|
|
36
|
+
* still listed in the manifest so its routes, editor, and API keep working
|
|
37
|
+
* — only the navigation link is dropped.
|
|
38
|
+
*/
|
|
39
|
+
hidden?: boolean;
|
|
34
40
|
fields: Record<
|
|
35
41
|
string,
|
|
36
42
|
{
|
package/src/cleanup.ts
CHANGED
|
@@ -10,13 +10,14 @@
|
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
12
|
import { createKyselyAdapter, type AuthTables } from "@emdash-cms/auth/adapters/kysely";
|
|
13
|
-
import {
|
|
13
|
+
import type { Kysely } from "kysely";
|
|
14
14
|
|
|
15
15
|
import { cleanupExpiredChallenges } from "./auth/challenge-store.js";
|
|
16
16
|
import { MediaRepository } from "./database/repositories/media.js";
|
|
17
17
|
import { RevisionRepository } from "./database/repositories/revision.js";
|
|
18
18
|
import type { Database } from "./database/types.js";
|
|
19
19
|
import { removeUploadAttempt } from "./media/upload-attempts.js";
|
|
20
|
+
import { cleanupMediaUsageGenerations } from "./media/usage/gc.js";
|
|
20
21
|
import type { Storage } from "./storage/types.js";
|
|
21
22
|
|
|
22
23
|
/**
|
|
@@ -30,19 +31,19 @@ export interface CleanupResult {
|
|
|
30
31
|
pendingUploadFiles: number;
|
|
31
32
|
uploadAttempts: number;
|
|
32
33
|
revisionsPruned: number;
|
|
34
|
+
mediaUsageStaleGenerations: number;
|
|
35
|
+
mediaUsageAbandonedGenerations: number;
|
|
36
|
+
mediaUsageOrphanOccurrences: number;
|
|
33
37
|
}
|
|
34
38
|
|
|
35
|
-
/** Max revisions to keep per entry during periodic pruning */
|
|
36
39
|
const REVISION_KEEP_COUNT = 50;
|
|
37
|
-
|
|
38
|
-
/** Only prune entries that exceed this threshold */
|
|
39
|
-
const REVISION_PRUNE_THRESHOLD = REVISION_KEEP_COUNT;
|
|
40
|
+
const REVISION_PRUNE_BATCH_SIZE = 10;
|
|
40
41
|
|
|
41
42
|
/**
|
|
42
43
|
* Run all system cleanup tasks.
|
|
43
44
|
*
|
|
44
|
-
* Safe to call frequently -- each
|
|
45
|
-
*
|
|
45
|
+
* Safe to call frequently -- each subsystem tolerates repeated calls, and
|
|
46
|
+
* repeated calls with nothing to clean are cheap.
|
|
46
47
|
*
|
|
47
48
|
* @param db - The database instance
|
|
48
49
|
* @param storage - Optional storage backend for deleting orphaned files.
|
|
@@ -60,6 +61,9 @@ export async function runSystemCleanup(
|
|
|
60
61
|
pendingUploadFiles: -1,
|
|
61
62
|
uploadAttempts: -1,
|
|
62
63
|
revisionsPruned: -1,
|
|
64
|
+
mediaUsageStaleGenerations: -1,
|
|
65
|
+
mediaUsageAbandonedGenerations: -1,
|
|
66
|
+
mediaUsageOrphanOccurrences: -1,
|
|
63
67
|
};
|
|
64
68
|
|
|
65
69
|
// 1. Passkey challenges (expire after 60s, clean anything past 5 min)
|
|
@@ -129,41 +133,42 @@ export async function runSystemCleanup(
|
|
|
129
133
|
console.error("[cleanup] Failed to clean media upload attempts:", error);
|
|
130
134
|
}
|
|
131
135
|
|
|
132
|
-
// 5. Revision pruning -- trim entries with excessive revision counts
|
|
133
136
|
try {
|
|
134
|
-
result.revisionsPruned = await
|
|
137
|
+
result.revisionsPruned = await pruneQueuedRevisions(db);
|
|
135
138
|
} catch (error) {
|
|
136
139
|
console.error("[cleanup] Failed to prune revisions:", error);
|
|
137
140
|
}
|
|
138
141
|
|
|
142
|
+
try {
|
|
143
|
+
const usage = await cleanupMediaUsageGenerations(db);
|
|
144
|
+
result.mediaUsageStaleGenerations = usage.staleGenerations;
|
|
145
|
+
result.mediaUsageAbandonedGenerations = usage.abandonedGenerations;
|
|
146
|
+
result.mediaUsageOrphanOccurrences = usage.orphanOccurrences;
|
|
147
|
+
} catch (error) {
|
|
148
|
+
console.error("[cleanup] Failed to clean media-usage generations:", error);
|
|
149
|
+
}
|
|
150
|
+
|
|
139
151
|
return result;
|
|
140
152
|
}
|
|
141
153
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
FROM revisions
|
|
150
|
-
GROUP BY collection, entry_id
|
|
151
|
-
HAVING COUNT(*) > ${REVISION_PRUNE_THRESHOLD}
|
|
152
|
-
`.execute(db);
|
|
153
|
-
|
|
154
|
-
if (entries.rows.length === 0) return 0;
|
|
155
|
-
|
|
154
|
+
async function pruneQueuedRevisions(db: Kysely<Database>): Promise<number> {
|
|
155
|
+
const queued = await db
|
|
156
|
+
.selectFrom("_emdash_revision_prune_queue")
|
|
157
|
+
.selectAll()
|
|
158
|
+
.orderBy("revision_id")
|
|
159
|
+
.limit(REVISION_PRUNE_BATCH_SIZE)
|
|
160
|
+
.execute();
|
|
156
161
|
const revisionRepo = new RevisionRepository(db);
|
|
157
162
|
let totalPruned = 0;
|
|
158
163
|
|
|
159
|
-
for (const row of
|
|
164
|
+
for (const row of queued) {
|
|
160
165
|
try {
|
|
161
|
-
|
|
166
|
+
totalPruned += await revisionRepo.pruneQueuedEntry(
|
|
162
167
|
row.collection,
|
|
163
168
|
row.entry_id,
|
|
169
|
+
row.revision_id,
|
|
164
170
|
REVISION_KEEP_COUNT,
|
|
165
171
|
);
|
|
166
|
-
totalPruned += pruned;
|
|
167
172
|
} catch (error) {
|
|
168
173
|
console.error(
|
|
169
174
|
`[cleanup] Failed to prune revisions for ${row.collection}/${row.entry_id}:`,
|
package/src/cli/commands/dev.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import { spawn } from "node:child_process";
|
|
8
|
-
import {
|
|
8
|
+
import { access, readFile } from "node:fs/promises";
|
|
9
9
|
import { resolve } from "node:path";
|
|
10
10
|
|
|
11
11
|
import { defineCommand } from "citty";
|
|
@@ -42,10 +42,15 @@ async function fileExists(path: string): Promise<boolean> {
|
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
+
export const DEV_DEPRECATION_MESSAGE =
|
|
46
|
+
"`emdash dev` is deprecated and will be removed in a future release.\n\n" +
|
|
47
|
+
"Use your project's dev script instead (for example, `pnpm dev`), or run `astro dev` directly.";
|
|
48
|
+
|
|
45
49
|
export const devCommand = defineCommand({
|
|
46
50
|
meta: {
|
|
47
51
|
name: "dev",
|
|
48
52
|
description: "Start dev server with local database",
|
|
53
|
+
hidden: true,
|
|
49
54
|
},
|
|
50
55
|
args: {
|
|
51
56
|
database: {
|
|
@@ -73,6 +78,11 @@ export const devCommand = defineCommand({
|
|
|
73
78
|
},
|
|
74
79
|
},
|
|
75
80
|
async run({ args }) {
|
|
81
|
+
consola.box({
|
|
82
|
+
title: "DEPRECATED COMMAND",
|
|
83
|
+
message: DEV_DEPRECATION_MESSAGE,
|
|
84
|
+
});
|
|
85
|
+
|
|
76
86
|
const cwd = resolve(args.cwd);
|
|
77
87
|
const pkg = await readPackageJson(cwd);
|
|
78
88
|
|
|
@@ -119,8 +129,8 @@ export const devCommand = defineCommand({
|
|
|
119
129
|
const schema = await client.schemaExport();
|
|
120
130
|
const types = await client.schemaTypes();
|
|
121
131
|
|
|
122
|
-
const {
|
|
123
|
-
const { resolve: resolvePath
|
|
132
|
+
const { mkdir, writeFile } = await import("node:fs/promises");
|
|
133
|
+
const { dirname, resolve: resolvePath } = await import("node:path");
|
|
124
134
|
const outputPath = resolvePath(cwd, ".emdash/types.ts");
|
|
125
135
|
await mkdir(dirname(outputPath), { recursive: true });
|
|
126
136
|
await writeFile(outputPath, types, "utf-8");
|
|
@@ -316,6 +316,8 @@ async function exportCollections(db: Kysely<Database>): Promise<SeedCollection[]
|
|
|
316
316
|
icon: collection.icon || undefined,
|
|
317
317
|
supports: collection.supports.length > 0 ? collection.supports : undefined,
|
|
318
318
|
urlPattern: collection.urlPattern || undefined,
|
|
319
|
+
hidden: collection.hidden || undefined,
|
|
320
|
+
sortOrder: collection.sortOrder,
|
|
319
321
|
fields: fields.map(
|
|
320
322
|
(field): SeedField => ({
|
|
321
323
|
slug: field.slug,
|
package/src/cli/index.ts
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* Commands:
|
|
9
9
|
* - init: Bootstrap database from template config, or interactive setup
|
|
10
10
|
* - types: Generate TypeScript types from schema
|
|
11
|
-
* - dev: Run dev server with local
|
|
11
|
+
* - dev: [DEPRECATED, hidden] Run dev server with a local SQLite database
|
|
12
12
|
* - seed: Apply a seed file to the database
|
|
13
13
|
* - export-seed: Export database schema and content as a seed file
|
|
14
14
|
* - secrets: Generate and inspect EmDash secrets (encryption keys, etc.)
|
|
@@ -25,9 +25,17 @@ import Suggestion from "@tiptap/suggestion";
|
|
|
25
25
|
import * as React from "react";
|
|
26
26
|
import { createPortal } from "react-dom";
|
|
27
27
|
|
|
28
|
+
import {
|
|
29
|
+
deriveLegacyListId,
|
|
30
|
+
normalizeProseMirrorOrderedListJson,
|
|
31
|
+
normalizeListId,
|
|
32
|
+
normalizeListStart,
|
|
33
|
+
readOrderedListMetadata,
|
|
34
|
+
} from "../content/converters/numbered-list.js";
|
|
28
35
|
import { computeThumbnailSize } from "../media/thumbnail.js";
|
|
29
36
|
import { CodeMarkExtension } from "./code-mark.js";
|
|
30
37
|
import { InlineCodeBlockExtension } from "./inline-code-block.js";
|
|
38
|
+
import { EmDashOrderedList } from "./ordered-list.js";
|
|
31
39
|
|
|
32
40
|
// ── Portable Text types ────────────────────────────────────────────
|
|
33
41
|
|
|
@@ -50,6 +58,8 @@ interface PTTextBlock {
|
|
|
50
58
|
style?: "normal" | "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "blockquote";
|
|
51
59
|
listItem?: "bullet" | "number";
|
|
52
60
|
level?: number;
|
|
61
|
+
listId?: string;
|
|
62
|
+
listStart?: number;
|
|
53
63
|
children: PTSpan[];
|
|
54
64
|
markDefs?: PTMarkDef[];
|
|
55
65
|
textAlign?: "left" | "center" | "right" | "justify";
|
|
@@ -106,8 +116,8 @@ function attrNum(attrs: Record<string, unknown> | undefined, key: string): numbe
|
|
|
106
116
|
function pmToPortableText(doc: PMNode): PTBlock[] {
|
|
107
117
|
if (!doc || doc.type !== "doc" || !doc.content) return [];
|
|
108
118
|
const blocks: PTBlock[] = [];
|
|
109
|
-
for (
|
|
110
|
-
const r = convertPMNode(
|
|
119
|
+
for (let i = 0; i < doc.content.length; i++) {
|
|
120
|
+
const r = convertPMNode(doc.content[i]!, `root:${i}`);
|
|
111
121
|
if (r) {
|
|
112
122
|
if (Array.isArray(r)) blocks.push(...r);
|
|
113
123
|
else blocks.push(r);
|
|
@@ -116,7 +126,7 @@ function pmToPortableText(doc: PMNode): PTBlock[] {
|
|
|
116
126
|
return blocks;
|
|
117
127
|
}
|
|
118
128
|
|
|
119
|
-
function convertPMNode(node: PMNode): PTBlock | PTBlock[] | null {
|
|
129
|
+
function convertPMNode(node: PMNode, path: string): PTBlock | PTBlock[] | null {
|
|
120
130
|
switch (node.type) {
|
|
121
131
|
case "paragraph": {
|
|
122
132
|
const { children, markDefs } = convertInline(node.content || []);
|
|
@@ -157,9 +167,9 @@ function convertPMNode(node: PMNode): PTBlock | PTBlock[] | null {
|
|
|
157
167
|
};
|
|
158
168
|
}
|
|
159
169
|
case "bulletList":
|
|
160
|
-
return convertPMList(node.content || [], "bullet");
|
|
170
|
+
return convertPMList(node.content || [], "bullet", 1, node.attrs, path);
|
|
161
171
|
case "orderedList":
|
|
162
|
-
return convertPMList(node.content || [], "number");
|
|
172
|
+
return convertPMList(node.content || [], "number", 1, node.attrs, path);
|
|
163
173
|
case "blockquote": {
|
|
164
174
|
const blocks: PTTextBlock[] = [];
|
|
165
175
|
for (const child of node.content || []) {
|
|
@@ -245,11 +255,20 @@ function convertPMNode(node: PMNode): PTBlock | PTBlock[] | null {
|
|
|
245
255
|
}
|
|
246
256
|
}
|
|
247
257
|
|
|
248
|
-
function convertPMList(
|
|
258
|
+
function convertPMList(
|
|
259
|
+
items: PMNode[],
|
|
260
|
+
listItem: "bullet" | "number",
|
|
261
|
+
level: number,
|
|
262
|
+
attrs: Record<string, unknown> | undefined,
|
|
263
|
+
path: string,
|
|
264
|
+
): PTTextBlock[] {
|
|
249
265
|
const blocks: PTTextBlock[] = [];
|
|
250
|
-
|
|
266
|
+
const metadata = listItem === "number" ? readOrderedListMetadata(attrs, path) : undefined;
|
|
267
|
+
for (let itemIndex = 0; itemIndex < items.length; itemIndex++) {
|
|
268
|
+
const item = items[itemIndex]!;
|
|
251
269
|
if (item.type === "listItem") {
|
|
252
|
-
for (
|
|
270
|
+
for (let childIndex = 0; childIndex < (item.content?.length ?? 0); childIndex++) {
|
|
271
|
+
const child = item.content![childIndex]!;
|
|
253
272
|
if (child.type === "paragraph") {
|
|
254
273
|
const { children, markDefs } = convertInline(child.content || []);
|
|
255
274
|
if (children.length > 0) {
|
|
@@ -258,11 +277,23 @@ function convertPMList(items: PMNode[], listItem: "bullet" | "number"): PTTextBl
|
|
|
258
277
|
_key: k(),
|
|
259
278
|
style: "normal",
|
|
260
279
|
listItem,
|
|
261
|
-
level
|
|
280
|
+
level,
|
|
281
|
+
...metadata,
|
|
262
282
|
children,
|
|
263
283
|
markDefs: markDefs.length > 0 ? markDefs : undefined,
|
|
264
284
|
});
|
|
265
285
|
}
|
|
286
|
+
} else if (child.type === "bulletList" || child.type === "orderedList") {
|
|
287
|
+
const childListItem = child.type === "bulletList" ? "bullet" : "number";
|
|
288
|
+
blocks.push(
|
|
289
|
+
...convertPMList(
|
|
290
|
+
child.content || [],
|
|
291
|
+
childListItem,
|
|
292
|
+
level + 1,
|
|
293
|
+
child.attrs,
|
|
294
|
+
`${path}:${itemIndex}:${childIndex}`,
|
|
295
|
+
),
|
|
296
|
+
);
|
|
266
297
|
}
|
|
267
298
|
}
|
|
268
299
|
}
|
|
@@ -346,7 +377,7 @@ function convertPMMark(
|
|
|
346
377
|
function portableTextToPM(blocks: PTBlock[]): JSONContent {
|
|
347
378
|
if (!blocks || blocks.length === 0) return { type: "doc", content: [{ type: "paragraph" }] };
|
|
348
379
|
|
|
349
|
-
const content:
|
|
380
|
+
const content: PMNode[] = [];
|
|
350
381
|
let i = 0;
|
|
351
382
|
|
|
352
383
|
while (i < blocks.length) {
|
|
@@ -358,14 +389,23 @@ function portableTextToPM(blocks: PTBlock[]): JSONContent {
|
|
|
358
389
|
if (isPTTextBlock(block) && block.listItem) {
|
|
359
390
|
const listBlocks: PTTextBlock[] = [];
|
|
360
391
|
const listType = block.listItem;
|
|
392
|
+
const runStart = i;
|
|
393
|
+
const rootId = listType === "number" ? normalizeListId(block.listId) : undefined;
|
|
361
394
|
while (i < blocks.length) {
|
|
362
395
|
const cur = blocks[i];
|
|
363
|
-
if (cur
|
|
396
|
+
if (!cur || !isPTTextBlock(cur) || !cur.listItem) break;
|
|
397
|
+
const level = cur.level || 1;
|
|
398
|
+
const currentId = cur.listItem === "number" ? normalizeListId(cur.listId) : undefined;
|
|
399
|
+
const sameIdentity =
|
|
400
|
+
listType !== "number" ||
|
|
401
|
+
level > 1 ||
|
|
402
|
+
(rootId ? currentId === rootId : currentId === undefined);
|
|
403
|
+
if (level > 1 || (cur.listItem === listType && sameIdentity)) {
|
|
364
404
|
listBlocks.push(cur);
|
|
365
405
|
i++;
|
|
366
406
|
} else break;
|
|
367
407
|
}
|
|
368
|
-
content.push(convertPTList(listBlocks, listType));
|
|
408
|
+
content.push(convertPTList(listBlocks, listType, `root:${runStart}`));
|
|
369
409
|
} else if (
|
|
370
410
|
isPTTextBlock(block) &&
|
|
371
411
|
block.style === "blockquote" &&
|
|
@@ -375,7 +415,7 @@ function portableTextToPM(blocks: PTBlock[]): JSONContent {
|
|
|
375
415
|
// PT is flat, so a multi-paragraph quote is stored as a run of
|
|
376
416
|
// blockquote-styled blocks. Mirrors the grouping in
|
|
377
417
|
// content/converters/portable-text-to-prosemirror.ts; without it
|
|
378
|
-
// merges revert on reload in the inline editor too
|
|
418
|
+
// merges revert on reload in the inline editor too.
|
|
379
419
|
const quoteBlocks: PTTextBlock[] = [];
|
|
380
420
|
while (i < blocks.length) {
|
|
381
421
|
const cur = blocks[i];
|
|
@@ -407,10 +447,13 @@ function portableTextToPM(blocks: PTBlock[]): JSONContent {
|
|
|
407
447
|
}
|
|
408
448
|
}
|
|
409
449
|
|
|
410
|
-
return {
|
|
450
|
+
return normalizeProseMirrorOrderedListJson({
|
|
451
|
+
type: "doc",
|
|
452
|
+
content: content.length > 0 ? content : [{ type: "paragraph" }],
|
|
453
|
+
});
|
|
411
454
|
}
|
|
412
455
|
|
|
413
|
-
function convertPTBlock(block: PTBlock):
|
|
456
|
+
function convertPTBlock(block: PTBlock): PMNode | null {
|
|
414
457
|
if (isPTTextBlock(block)) {
|
|
415
458
|
const { style = "normal", children, markDefs = [], textAlign } = block;
|
|
416
459
|
const pmContent = convertPTSpans(children, markDefs);
|
|
@@ -530,23 +573,118 @@ function convertPTBlock(block: PTBlock): JSONContent | null {
|
|
|
530
573
|
};
|
|
531
574
|
}
|
|
532
575
|
|
|
533
|
-
function convertPTList(
|
|
576
|
+
function convertPTList(
|
|
577
|
+
items: PTTextBlock[],
|
|
578
|
+
listType: "bullet" | "number",
|
|
579
|
+
context: string,
|
|
580
|
+
): PMNode {
|
|
581
|
+
const rootItems: PMNode[] = [];
|
|
582
|
+
let index = 0;
|
|
583
|
+
|
|
584
|
+
while (index < items.length) {
|
|
585
|
+
const item = items[index]!;
|
|
586
|
+
const level = item.level || 1;
|
|
587
|
+
if (level === 1) {
|
|
588
|
+
const nestedItems: PTTextBlock[] = [];
|
|
589
|
+
index++;
|
|
590
|
+
while (index < items.length && (items[index]!.level || 1) > 1) {
|
|
591
|
+
nestedItems.push(items[index]!);
|
|
592
|
+
index++;
|
|
593
|
+
}
|
|
594
|
+
rootItems.push(
|
|
595
|
+
convertPTListItem(item, nestedItems, listType, `${context}:${rootItems.length}`),
|
|
596
|
+
);
|
|
597
|
+
} else {
|
|
598
|
+
rootItems.push(convertPTListItem(item, [], listType, `${context}:${rootItems.length}`));
|
|
599
|
+
index++;
|
|
600
|
+
}
|
|
601
|
+
}
|
|
602
|
+
|
|
603
|
+
const firstItem = items[0]!;
|
|
604
|
+
const listId =
|
|
605
|
+
normalizeListId(firstItem.listId) ?? deriveLegacyListId(`${context}:${firstItem._key}`);
|
|
606
|
+
const listStart = normalizeListStart(firstItem.listStart);
|
|
607
|
+
const metadata =
|
|
608
|
+
listType === "number"
|
|
609
|
+
? {
|
|
610
|
+
listId,
|
|
611
|
+
...(listStart === undefined ? {} : { listStart }),
|
|
612
|
+
}
|
|
613
|
+
: undefined;
|
|
534
614
|
return {
|
|
535
615
|
type: listType === "bullet" ? "bulletList" : "orderedList",
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
content: [
|
|
539
|
-
{
|
|
540
|
-
type: "paragraph",
|
|
541
|
-
content: convertPTSpans(item.children, item.markDefs || []),
|
|
542
|
-
},
|
|
543
|
-
],
|
|
544
|
-
})),
|
|
616
|
+
attrs: metadata ? { ...metadata, start: metadata.listStart ?? 1 } : undefined,
|
|
617
|
+
content: rootItems,
|
|
545
618
|
};
|
|
546
619
|
}
|
|
547
620
|
|
|
548
|
-
function
|
|
549
|
-
|
|
621
|
+
function belongsToNestedPTGroup(
|
|
622
|
+
item: PTTextBlock,
|
|
623
|
+
minLevel: number,
|
|
624
|
+
parentListType: "bullet" | "number",
|
|
625
|
+
anchorType: "bullet" | "number",
|
|
626
|
+
anchorId: string | undefined,
|
|
627
|
+
): boolean {
|
|
628
|
+
if ((item.level || 2) > minLevel) return true;
|
|
629
|
+
if ((item.listItem || parentListType) !== anchorType) return false;
|
|
630
|
+
if (anchorType !== "number") return true;
|
|
631
|
+
const itemId = normalizeListId(item.listId);
|
|
632
|
+
return anchorId ? itemId === anchorId : itemId === undefined;
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
function convertPTListItem(
|
|
636
|
+
item: PTTextBlock,
|
|
637
|
+
nestedItems: PTTextBlock[],
|
|
638
|
+
parentListType: "bullet" | "number",
|
|
639
|
+
context: string,
|
|
640
|
+
): PMNode {
|
|
641
|
+
const content: PMNode[] = [
|
|
642
|
+
{
|
|
643
|
+
type: "paragraph",
|
|
644
|
+
content: convertPTSpans(item.children, item.markDefs || []),
|
|
645
|
+
},
|
|
646
|
+
];
|
|
647
|
+
|
|
648
|
+
if (nestedItems.length > 0) {
|
|
649
|
+
let minLevel = Infinity;
|
|
650
|
+
for (const nestedItem of nestedItems) {
|
|
651
|
+
const level = nestedItem.level || 2;
|
|
652
|
+
if (level < minLevel) minLevel = level;
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
let index = 0;
|
|
656
|
+
while (index < nestedItems.length) {
|
|
657
|
+
const groupStart = index;
|
|
658
|
+
const anchorType = nestedItems[index]!.listItem || parentListType;
|
|
659
|
+
const anchorId =
|
|
660
|
+
anchorType === "number" ? normalizeListId(nestedItems[index]!.listId) : undefined;
|
|
661
|
+
const nestedGroup: PTTextBlock[] = [];
|
|
662
|
+
do {
|
|
663
|
+
nestedGroup.push(nestedItems[index]!);
|
|
664
|
+
index++;
|
|
665
|
+
} while (
|
|
666
|
+
index < nestedItems.length &&
|
|
667
|
+
belongsToNestedPTGroup(nestedItems[index]!, minLevel, parentListType, anchorType, anchorId)
|
|
668
|
+
);
|
|
669
|
+
|
|
670
|
+
content.push(
|
|
671
|
+
convertPTList(
|
|
672
|
+
nestedGroup.map((nestedItem) => ({
|
|
673
|
+
...nestedItem,
|
|
674
|
+
level: (nestedItem.level || 2) - 1,
|
|
675
|
+
})),
|
|
676
|
+
anchorType,
|
|
677
|
+
`${context}:nested:${groupStart}`,
|
|
678
|
+
),
|
|
679
|
+
);
|
|
680
|
+
}
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
return { type: "listItem", content };
|
|
684
|
+
}
|
|
685
|
+
|
|
686
|
+
function convertPTSpans(spans: PTSpan[], markDefs: PTMarkDef[]): PMNode[] {
|
|
687
|
+
const nodes: PMNode[] = [];
|
|
550
688
|
const mdMap = new Map(markDefs.map((md) => [md._key, md]));
|
|
551
689
|
|
|
552
690
|
for (const span of spans) {
|
|
@@ -556,7 +694,7 @@ function convertPTSpans(spans: PTSpan[], markDefs: PTMarkDef[]): JSONContent[] {
|
|
|
556
694
|
const text = parts[i];
|
|
557
695
|
if (text && text.length > 0) {
|
|
558
696
|
const marks = convertPTMarks(span.marks || [], mdMap);
|
|
559
|
-
const node:
|
|
697
|
+
const node: PMNode = {
|
|
560
698
|
type: "text",
|
|
561
699
|
text,
|
|
562
700
|
};
|
|
@@ -1869,7 +2007,7 @@ export function InlinePortableTextEditor({
|
|
|
1869
2007
|
async (options?: { keepalive?: boolean }) => {
|
|
1870
2008
|
// A pagehide flush must not be skipped: an in-flight blur save is
|
|
1871
2009
|
// cancelled by the navigation, so the keepalive request is the only
|
|
1872
|
-
// one that can still land
|
|
2010
|
+
// one that can still land.
|
|
1873
2011
|
if (savingRef.current && !options?.keepalive) return;
|
|
1874
2012
|
|
|
1875
2013
|
const current = JSON.stringify(getBlocks());
|
|
@@ -1914,8 +2052,8 @@ export function InlinePortableTextEditor({
|
|
|
1914
2052
|
// Flush unsaved edits when the page goes away (browser back/forward,
|
|
1915
2053
|
// link click, tab close). The blur handler doesn't cover this: unload
|
|
1916
2054
|
// doesn't reliably fire React blur, and a plain fetch started during
|
|
1917
|
-
// unload is cancelled by the navigation — edits were silently lost
|
|
1918
|
-
//
|
|
2055
|
+
// unload is cancelled by the navigation — edits were silently lost.
|
|
2056
|
+
// `keepalive` lets the PUT outlive the page.
|
|
1919
2057
|
// Caveat: keepalive caps the body at 64KB — a very long document
|
|
1920
2058
|
// can still be lost on unload. Upgrade path: debounced autosave
|
|
1921
2059
|
// while typing (like the admin editor) so unload flushes are rare.
|
|
@@ -1945,7 +2083,9 @@ export function InlinePortableTextEditor({
|
|
|
1945
2083
|
codeBlock: false,
|
|
1946
2084
|
// Replaced with CodeMarkExtension so inline code can combine with link/etc.
|
|
1947
2085
|
code: false,
|
|
2086
|
+
orderedList: false,
|
|
1948
2087
|
}),
|
|
2088
|
+
EmDashOrderedList,
|
|
1949
2089
|
CodeMarkExtension,
|
|
1950
2090
|
InlineCodeBlockExtension,
|
|
1951
2091
|
Image.extend({
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
import type { List, Props as ComponentProps } from "astro-portabletext/types";
|
|
3
|
+
import { normalizeListStart } from "../content/converters/numbered-list.js";
|
|
4
|
+
|
|
5
|
+
type OrderedListNode = List & { start?: unknown };
|
|
6
|
+
type Props = ComponentProps<OrderedListNode>;
|
|
7
|
+
|
|
8
|
+
const { node, index: _index, isInline: _isInline, ...attrs } = Astro.props;
|
|
9
|
+
const start = normalizeListStart(node.start) ?? 1;
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
<ol {...attrs} start={start === 1 ? undefined : start}>
|
|
13
|
+
<slot />
|
|
14
|
+
</ol>
|