emdash 0.28.1 → 0.30.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-hUy8vOB-.d.mts → adapters-C0ONzkUP.d.mts} +10 -1
- package/dist/adapters-C0ONzkUP.d.mts.map +1 -0
- package/dist/{allowed-origins-CRsJ6BPM.mjs → allowed-origins-CCEi9bPI.mjs} +2 -2
- package/dist/{allowed-origins-CRsJ6BPM.mjs.map → allowed-origins-CCEi9bPI.mjs.map} +1 -1
- package/dist/api/route-utils.d.mts +3 -3
- package/dist/api/route-utils.d.mts.map +1 -1
- package/dist/api/route-utils.mjs +22 -21
- package/dist/api/route-utils.mjs.map +1 -1
- package/dist/api/schemas/index.d.mts +2 -2
- package/dist/api/schemas/index.mjs +5 -4
- package/dist/{api-DxFSorgk.mjs → api-b8WIiGU4.mjs} +306 -154
- package/dist/api-b8WIiGU4.mjs.map +1 -0
- package/dist/api-tokens-Cvmixds7.mjs +3 -0
- package/dist/{api-tokens-DvqeZmVq.mjs → api-tokens-uPt8UDpx.mjs} +2 -2
- package/dist/{api-tokens-DvqeZmVq.mjs.map → api-tokens-uPt8UDpx.mjs.map} +1 -1
- package/dist/{apply-CDJqIjPU.mjs → apply-CmIJK9j8.mjs} +35 -38
- package/dist/apply-CmIJK9j8.mjs.map +1 -0
- package/dist/astro/index.d.mts +12 -12
- package/dist/astro/index.d.mts.map +1 -1
- package/dist/astro/index.mjs +97 -13
- package/dist/astro/index.mjs.map +1 -1
- package/dist/astro/middleware/auth.d.mts +10 -10
- package/dist/astro/middleware/auth.d.mts.map +1 -1
- package/dist/astro/middleware/auth.mjs +56 -107
- package/dist/astro/middleware/auth.mjs.map +1 -1
- package/dist/astro/middleware/redirect.mjs +7 -7
- package/dist/astro/middleware/request-context.d.mts +3 -0
- package/dist/astro/middleware/request-context.d.mts.map +1 -1
- package/dist/astro/middleware/request-context.mjs +258 -31
- package/dist/astro/middleware/request-context.mjs.map +1 -1
- package/dist/astro/middleware/setup.mjs +1 -1
- package/dist/astro/middleware.d.mts +47 -3
- package/dist/astro/middleware.d.mts.map +1 -1
- package/dist/astro/middleware.mjs +379 -117
- package/dist/astro/middleware.mjs.map +1 -1
- package/dist/astro/routes/PluginRegistry.d.mts +5 -1
- package/dist/astro/routes/PluginRegistry.d.mts.map +1 -1
- package/dist/astro/routes/PluginRegistry.mjs +2 -1
- package/dist/astro/routes/PluginRegistry.mjs.map +1 -1
- package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +9 -8
- package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs.map +1 -1
- package/dist/astro/routes/api/admin/allowed-domains/index.mjs +9 -8
- package/dist/astro/routes/api/admin/allowed-domains/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +5 -5
- package/dist/astro/routes/api/admin/api-tokens/index.mjs +7 -7
- package/dist/astro/routes/api/admin/api-tokens/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +6 -6
- package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +11 -10
- package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/admin/byline-fields/index.mjs +11 -10
- package/dist/astro/routes/api/admin/byline-fields/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +11 -10
- package/dist/astro/routes/api/admin/byline-fields/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +18 -17
- package/dist/astro/routes/api/admin/bylines/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +19 -24
- package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/admin/bylines/index.mjs +18 -17
- package/dist/astro/routes/api/admin/bylines/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/comments/_id_/status.d.mts.map +1 -1
- package/dist/astro/routes/api/admin/comments/_id_/status.mjs +14 -13
- package/dist/astro/routes/api/admin/comments/_id_/status.mjs.map +1 -1
- package/dist/astro/routes/api/admin/comments/_id_.mjs +6 -6
- package/dist/astro/routes/api/admin/comments/bulk.mjs +11 -10
- package/dist/astro/routes/api/admin/comments/bulk.mjs.map +1 -1
- package/dist/astro/routes/api/admin/comments/counts.mjs +6 -6
- package/dist/astro/routes/api/admin/comments/index.d.mts.map +1 -1
- package/dist/astro/routes/api/admin/comments/index.mjs +11 -10
- package/dist/astro/routes/api/admin/comments/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +6 -6
- package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +5 -5
- package/dist/astro/routes/api/admin/media-usage/repair.d.mts +8 -0
- package/dist/astro/routes/api/admin/media-usage/repair.d.mts.map +1 -0
- package/dist/astro/routes/api/admin/media-usage/repair.mjs +30 -0
- package/dist/astro/routes/api/admin/media-usage/repair.mjs.map +1 -0
- package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +5 -5
- package/dist/astro/routes/api/admin/oauth-clients/index.mjs +5 -5
- package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +44 -41
- package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +44 -41
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +49 -41
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/mcp.d.mts +8 -0
- package/dist/astro/routes/api/admin/plugins/_id_/mcp.d.mts.map +1 -0
- package/dist/astro/routes/api/admin/plugins/_id_/mcp.mjs +39 -0
- package/dist/astro/routes/api/admin/plugins/_id_/mcp.mjs.map +1 -0
- package/dist/astro/routes/api/admin/plugins/_id_/settings.d.mts +9 -0
- package/dist/astro/routes/api/admin/plugins/_id_/settings.d.mts.map +1 -0
- package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs +78 -0
- package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs.map +1 -0
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +43 -40
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/update.d.mts.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +46 -41
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/index.mjs +49 -41
- package/dist/astro/routes/api/admin/plugins/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +4 -4
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +43 -40
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.d.mts.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +49 -42
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +43 -40
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +43 -40
- package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/_id_/update.d.mts.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs +47 -42
- package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +43 -40
- package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/install.d.mts.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/install.mjs +48 -43
- package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/updates.mjs +44 -41
- package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +43 -40
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +4 -4
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +43 -40
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/users/_id_/disable.mjs +5 -5
- package/dist/astro/routes/api/admin/users/_id_/enable.mjs +4 -4
- package/dist/astro/routes/api/admin/users/_id_/index.mjs +10 -9
- package/dist/astro/routes/api/admin/users/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +6 -6
- package/dist/astro/routes/api/admin/users/index.mjs +9 -8
- package/dist/astro/routes/api/admin/users/index.mjs.map +1 -1
- package/dist/astro/routes/api/auth/dev-bypass.mjs +7 -7
- package/dist/astro/routes/api/auth/invite/accept.mjs +4 -4
- package/dist/astro/routes/api/auth/invite/complete.mjs +14 -13
- package/dist/astro/routes/api/auth/invite/complete.mjs.map +1 -1
- package/dist/astro/routes/api/auth/invite/index.mjs +11 -10
- package/dist/astro/routes/api/auth/invite/index.mjs.map +1 -1
- package/dist/astro/routes/api/auth/invite/register-options.mjs +13 -12
- package/dist/astro/routes/api/auth/invite/register-options.mjs.map +1 -1
- package/dist/astro/routes/api/auth/logout.mjs +4 -4
- package/dist/astro/routes/api/auth/magic-link/send.mjs +13 -12
- package/dist/astro/routes/api/auth/magic-link/send.mjs.map +1 -1
- package/dist/astro/routes/api/auth/magic-link/verify.mjs +5 -5
- package/dist/astro/routes/api/auth/me.mjs +9 -8
- package/dist/astro/routes/api/auth/me.mjs.map +1 -1
- package/dist/astro/routes/api/auth/mode.d.mts.map +1 -1
- package/dist/astro/routes/api/auth/mode.mjs +6 -3
- package/dist/astro/routes/api/auth/mode.mjs.map +1 -1
- package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +16 -6
- package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs.map +1 -1
- package/dist/astro/routes/api/auth/oauth/_provider_.d.mts.map +1 -1
- package/dist/astro/routes/api/auth/oauth/_provider_.mjs +11 -5
- package/dist/astro/routes/api/auth/oauth/_provider_.mjs.map +1 -1
- package/dist/astro/routes/api/auth/passkey/_id_.mjs +8 -7
- package/dist/astro/routes/api/auth/passkey/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/auth/passkey/index.mjs +3 -3
- package/dist/astro/routes/api/auth/passkey/options.mjs +14 -13
- package/dist/astro/routes/api/auth/passkey/options.mjs.map +1 -1
- package/dist/astro/routes/api/auth/passkey/register/options.mjs +12 -11
- package/dist/astro/routes/api/auth/passkey/register/options.mjs.map +1 -1
- package/dist/astro/routes/api/auth/passkey/register/verify.mjs +13 -12
- package/dist/astro/routes/api/auth/passkey/register/verify.mjs.map +1 -1
- package/dist/astro/routes/api/auth/passkey/verify.mjs +13 -12
- package/dist/astro/routes/api/auth/passkey/verify.mjs.map +1 -1
- package/dist/astro/routes/api/auth/signup/complete.mjs +14 -13
- package/dist/astro/routes/api/auth/signup/complete.mjs.map +1 -1
- package/dist/astro/routes/api/auth/signup/request.mjs +13 -12
- package/dist/astro/routes/api/auth/signup/request.mjs.map +1 -1
- package/dist/astro/routes/api/auth/signup/verify.mjs +4 -4
- package/dist/astro/routes/api/comments/_collection_/_contentId_/index.d.mts.map +1 -1
- package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +70 -14
- package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs.map +1 -1
- package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +14 -13
- package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +5 -5
- package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +5 -4
- package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +6 -5
- package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +5 -5
- package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +14 -13
- package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +10 -8
- package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.d.mts +9 -0
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.d.mts.map +1 -0
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs +72 -0
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs.map +1 -0
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.d.mts +8 -0
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.d.mts.map +1 -0
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs +51 -0
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs.map +1 -0
- package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +5 -4
- package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +5 -5
- package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +10 -8
- package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.d.mts.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +20 -19
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +5 -5
- package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +5 -4
- package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_.d.mts.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_.mjs +11 -9
- package/dist/astro/routes/api/content/_collection_/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/authors.mjs +5 -5
- package/dist/astro/routes/api/content/_collection_/authors.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/index.d.mts.map +1 -1
- package/dist/astro/routes/api/content/_collection_/index.mjs +12 -10
- package/dist/astro/routes/api/content/_collection_/index.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/trash.mjs +10 -9
- package/dist/astro/routes/api/content/_collection_/trash.mjs.map +1 -1
- package/dist/astro/routes/api/dashboard.mjs +8 -8
- package/dist/astro/routes/api/dev/emails.mjs +4 -4
- package/dist/astro/routes/api/import/probe.d.mts +3 -3
- package/dist/astro/routes/api/import/probe.mjs +19 -18
- package/dist/astro/routes/api/import/probe.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress/analyze.mjs +5 -5
- package/dist/astro/routes/api/import/wordpress/execute.d.mts +11 -11
- package/dist/astro/routes/api/import/wordpress/execute.mjs +16 -16
- package/dist/astro/routes/api/import/wordpress/media.d.mts +10 -10
- package/dist/astro/routes/api/import/wordpress/media.mjs +12 -11
- package/dist/astro/routes/api/import/wordpress/media.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress/prepare.mjs +12 -11
- package/dist/astro/routes/api/import/wordpress/prepare.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +11 -16
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts.map +1 -1
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +12 -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 -18
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress-plugin/callback.mjs +1 -1
- package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +11 -11
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +29 -28
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs.map +1 -1
- package/dist/astro/routes/api/manifest.mjs +8 -9
- package/dist/astro/routes/api/manifest.mjs.map +1 -1
- package/dist/astro/routes/api/mcp.d.mts.map +1 -1
- package/dist/astro/routes/api/mcp.mjs +165 -52
- package/dist/astro/routes/api/mcp.mjs.map +1 -1
- package/dist/astro/routes/api/media/_id_/confirm.mjs +10 -9
- package/dist/astro/routes/api/media/_id_/confirm.mjs.map +1 -1
- package/dist/astro/routes/api/media/_id_/usage.d.mts +8 -0
- package/dist/astro/routes/api/media/_id_/usage.d.mts.map +1 -0
- package/dist/astro/routes/api/media/_id_/usage.mjs +37 -0
- package/dist/astro/routes/api/media/_id_/usage.mjs.map +1 -0
- package/dist/astro/routes/api/media/_id_.d.mts.map +1 -1
- package/dist/astro/routes/api/media/_id_.mjs +26 -10
- package/dist/astro/routes/api/media/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/media/file/_...key_.mjs +4 -3
- package/dist/astro/routes/api/media/file/_...key_.mjs.map +1 -1
- package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +4 -4
- package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +4 -4
- package/dist/astro/routes/api/media/providers/index.mjs +4 -4
- package/dist/astro/routes/api/media/upload-url.mjs +11 -10
- package/dist/astro/routes/api/media/upload-url.mjs.map +1 -1
- package/dist/astro/routes/api/media.d.mts.map +1 -1
- package/dist/astro/routes/api/media.mjs +34 -14
- package/dist/astro/routes/api/media.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +10 -9
- package/dist/astro/routes/api/menus/_name_/items/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/items.mjs +10 -9
- package/dist/astro/routes/api/menus/_name_/items.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/reorder.mjs +10 -9
- package/dist/astro/routes/api/menus/_name_/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/translations.mjs +10 -9
- package/dist/astro/routes/api/menus/_name_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_.mjs +10 -9
- package/dist/astro/routes/api/menus/_name_.mjs.map +1 -1
- package/dist/astro/routes/api/menus/index.mjs +10 -9
- package/dist/astro/routes/api/menus/index.mjs.map +1 -1
- package/dist/astro/routes/api/oauth/authorize.d.mts.map +1 -1
- package/dist/astro/routes/api/oauth/authorize.mjs +7 -8
- package/dist/astro/routes/api/oauth/authorize.mjs.map +1 -1
- package/dist/astro/routes/api/oauth/device/authorize.mjs +7 -7
- package/dist/astro/routes/api/oauth/device/code.mjs +10 -10
- package/dist/astro/routes/api/oauth/device/token.mjs +9 -9
- package/dist/astro/routes/api/oauth/register.mjs +4 -4
- package/dist/astro/routes/api/oauth/token/refresh.mjs +7 -7
- package/dist/astro/routes/api/oauth/token/revoke.mjs +7 -7
- package/dist/astro/routes/api/oauth/token.mjs +7 -7
- package/dist/astro/routes/api/openapi.json.mjs +71 -24
- package/dist/astro/routes/api/openapi.json.mjs.map +1 -1
- package/dist/astro/routes/api/plugins/_pluginId_/_...path_.d.mts.map +1 -1
- package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +20 -32
- package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs.map +1 -1
- package/dist/astro/routes/api/redirects/404s/index.mjs +13 -12
- package/dist/astro/routes/api/redirects/404s/index.mjs.map +1 -1
- package/dist/astro/routes/api/redirects/404s/summary.mjs +13 -12
- package/dist/astro/routes/api/redirects/404s/summary.mjs.map +1 -1
- 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.d.mts +10 -0
- package/dist/astro/routes/api/relations/_id_/index.d.mts.map +1 -0
- package/dist/astro/routes/api/relations/_id_/index.mjs +70 -0
- package/dist/astro/routes/api/relations/_id_/index.mjs.map +1 -0
- package/dist/astro/routes/api/relations/_id_/translations.d.mts +8 -0
- package/dist/astro/routes/api/relations/_id_/translations.d.mts.map +1 -0
- package/dist/astro/routes/api/relations/_id_/translations.mjs +34 -0
- package/dist/astro/routes/api/relations/_id_/translations.mjs.map +1 -0
- package/dist/astro/routes/api/relations/index.d.mts +9 -0
- package/dist/astro/routes/api/relations/index.d.mts.map +1 -0
- package/dist/astro/routes/api/relations/index.mjs +54 -0
- package/dist/astro/routes/api/relations/index.mjs.map +1 -0
- package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +4 -4
- package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +5 -4
- package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.d.mts.map +1 -1
- package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +43 -40
- package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/_slug_/fields/index.d.mts.map +1 -1
- package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +43 -40
- 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 +43 -40
- package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +43 -40
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/index.mjs +43 -40
- package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/index.mjs +9 -9
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs +43 -40
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/schema/orphans/index.mjs +43 -40
- package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
- package/dist/astro/routes/api/search/enable.mjs +13 -12
- package/dist/astro/routes/api/search/enable.mjs.map +1 -1
- package/dist/astro/routes/api/search/index.mjs +14 -12
- package/dist/astro/routes/api/search/index.mjs.map +1 -1
- package/dist/astro/routes/api/search/rebuild.mjs +13 -12
- package/dist/astro/routes/api/search/rebuild.mjs.map +1 -1
- package/dist/astro/routes/api/search/stats.mjs +8 -8
- 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 +12 -11
- package/dist/astro/routes/api/sections/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/sections/index.mjs +12 -11
- package/dist/astro/routes/api/sections/index.mjs.map +1 -1
- package/dist/astro/routes/api/settings/backups/archives/_name_.d.mts +9 -0
- package/dist/astro/routes/api/settings/backups/archives/_name_.d.mts.map +1 -0
- package/dist/astro/routes/api/settings/backups/archives/_name_.mjs +48 -0
- package/dist/astro/routes/api/settings/backups/archives/_name_.mjs.map +1 -0
- package/dist/astro/routes/api/settings/backups/archives/index.d.mts +8 -0
- package/dist/astro/routes/api/settings/backups/archives/index.d.mts.map +1 -0
- package/dist/astro/routes/api/settings/backups/archives/index.mjs +23 -0
- package/dist/astro/routes/api/settings/backups/archives/index.mjs.map +1 -0
- package/dist/astro/routes/api/settings/backups/export.d.mts +8 -0
- package/dist/astro/routes/api/settings/backups/export.d.mts.map +1 -0
- package/dist/astro/routes/api/settings/backups/export.mjs +35 -0
- package/dist/astro/routes/api/settings/backups/export.mjs.map +1 -0
- package/dist/astro/routes/api/settings/backups/index.d.mts +9 -0
- package/dist/astro/routes/api/settings/backups/index.d.mts.map +1 -0
- package/dist/astro/routes/api/settings/backups/index.mjs +52 -0
- package/dist/astro/routes/api/settings/backups/index.mjs.map +1 -0
- package/dist/astro/routes/api/settings/email.mjs +6 -6
- package/dist/astro/routes/api/settings.mjs +16 -15
- package/dist/astro/routes/api/settings.mjs.map +1 -1
- package/dist/astro/routes/api/setup/admin-verify.mjs +20 -16
- package/dist/astro/routes/api/setup/admin-verify.mjs.map +1 -1
- package/dist/astro/routes/api/setup/admin.mjs +19 -15
- package/dist/astro/routes/api/setup/admin.mjs.map +1 -1
- package/dist/astro/routes/api/setup/dev-bypass.mjs +29 -29
- package/dist/astro/routes/api/setup/dev-reset.mjs +4 -4
- package/dist/astro/routes/api/setup/index.mjs +31 -30
- package/dist/astro/routes/api/setup/index.mjs.map +1 -1
- package/dist/astro/routes/api/setup/status.mjs +5 -5
- package/dist/astro/routes/api/snapshot.mjs +9 -216
- package/dist/astro/routes/api/snapshot.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +16 -15
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +16 -15
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +16 -15
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/index.mjs +16 -15
- package/dist/astro/routes/api/taxonomies/index.mjs.map +1 -1
- package/dist/astro/routes/api/themes/preview.mjs +7 -7
- package/dist/astro/routes/api/typegen.mjs +6 -6
- package/dist/astro/routes/api/well-known/auth.mjs +2 -2
- package/dist/astro/routes/api/well-known/oauth-authorization-server.d.mts.map +1 -1
- package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +4 -3
- package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs.map +1 -1
- package/dist/astro/routes/api/well-known/oauth-protected-resource.d.mts.map +1 -1
- package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +4 -3
- package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +9 -8
- package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +13 -12
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +13 -12
- package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_.mjs +8 -8
- package/dist/astro/routes/api/widget-areas/index.mjs +13 -12
- package/dist/astro/routes/api/widget-areas/index.mjs.map +1 -1
- package/dist/astro/routes/api/widget-components.mjs +4 -4
- package/dist/astro/routes/robots.txt.mjs +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 +40 -16
- 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-Dz88F_Fw.mjs → authorize-WxsiePzy.mjs} +7 -4
- package/dist/authorize-WxsiePzy.mjs.map +1 -0
- package/dist/backup-S8kFWtwD.mjs +241 -0
- package/dist/backup-S8kFWtwD.mjs.map +1 -0
- package/dist/{base64-CmWvODNW.mjs → base64-B-PsqheR.mjs} +8 -4
- package/dist/base64-B-PsqheR.mjs.map +1 -0
- package/dist/{byline-Bm8ZgUP9.mjs → byline-XEjchwzZ.mjs} +8 -8
- package/dist/{byline-Bm8ZgUP9.mjs.map → byline-XEjchwzZ.mjs.map} +1 -1
- package/dist/{byline-fields-CIx_GuN4.mjs → byline-fields-CdU_LTF1.mjs} +2 -2
- package/dist/{byline-fields-CIx_GuN4.mjs.map → byline-fields-CdU_LTF1.mjs.map} +1 -1
- package/dist/{byline-registry-BOjqDOim.mjs → byline-registry-BCuOp4UF.mjs} +3 -3
- package/dist/{byline-registry-BOjqDOim.mjs.map → byline-registry-BCuOp4UF.mjs.map} +1 -1
- package/dist/{bylines-6tm9mgQb.mjs → bylines-BJbT4gKS.mjs} +4 -4
- package/dist/{bylines-6tm9mgQb.mjs.map → bylines-BJbT4gKS.mjs.map} +1 -1
- package/dist/{bylines-CAZxGSrm.mjs → bylines-czseViYo.mjs} +8 -8
- package/dist/{bylines-CAZxGSrm.mjs.map → bylines-czseViYo.mjs.map} +1 -1
- package/dist/{cache-CEBAZjir.mjs → cache-CGCd6AVM.mjs} +3 -3
- package/dist/{cache-CEBAZjir.mjs.map → cache-CGCd6AVM.mjs.map} +1 -1
- package/dist/{challenge-store-anhwVER0.mjs → challenge-store-BFzgFRog.mjs} +1 -1
- package/dist/{challenge-store-anhwVER0.mjs.map → challenge-store-BFzgFRog.mjs.map} +1 -1
- package/dist/{chunks-B2isWQhr.mjs → chunks-BxXyunY-.mjs} +2 -2
- package/dist/{chunks-B2isWQhr.mjs.map → chunks-BxXyunY-.mjs.map} +1 -1
- package/dist/cli/index.mjs +142 -35
- package/dist/cli/index.mjs.map +1 -1
- package/dist/client/cf-access.d.mts +1 -1
- package/dist/client/index.d.mts +86 -3
- package/dist/client/index.d.mts.map +1 -1
- package/dist/client/index.mjs +20 -4
- package/dist/client/index.mjs.map +1 -1
- package/dist/{comment-CzeatwBV.mjs → comment-DPT0WKyd.mjs} +2 -2
- package/dist/{comment-CzeatwBV.mjs.map → comment-DPT0WKyd.mjs.map} +1 -1
- package/dist/{comment-reaction-Cj9QJY7I.mjs → comment-reaction-C65MldIB.mjs} +2 -2
- package/dist/{comment-reaction-Cj9QJY7I.mjs.map → comment-reaction-C65MldIB.mjs.map} +1 -1
- package/dist/{comments-BLE-jv5k.mjs → comments-Bz6sCbgD.mjs} +3 -3
- package/dist/{comments-BLE-jv5k.mjs.map → comments-Bz6sCbgD.mjs.map} +1 -1
- package/dist/{components-B_sATNUc.mjs → components-DZkL4Fx0.mjs} +1 -1
- package/dist/{components-B_sATNUc.mjs.map → components-DZkL4Fx0.mjs.map} +1 -1
- package/dist/{content-DhgEth4k.mjs → content-Ci04z2z-.mjs} +227 -34
- package/dist/content-Ci04z2z-.mjs.map +1 -0
- package/dist/{content-refresh-Br4gMzh8.mjs → content-refresh-D4khvC0R.mjs} +100 -8
- package/dist/content-refresh-D4khvC0R.mjs.map +1 -0
- package/dist/{context-BRIpHARC.mjs → context-B6hc7zJL.mjs} +156 -76
- package/dist/context-B6hc7zJL.mjs.map +1 -0
- package/dist/{cron-v4FTEFR_.mjs → cron-BlKIMD_e.mjs} +1 -1
- package/dist/{cron-v4FTEFR_.mjs.map → cron-BlKIMD_e.mjs.map} +1 -1
- package/dist/{dashboard-EvEKF5en.mjs → dashboard-C5NkXFbi.mjs} +6 -5
- package/dist/dashboard-C5NkXFbi.mjs.map +1 -0
- package/dist/database/pg-migration-lock.d.mts +21 -0
- package/dist/database/pg-migration-lock.d.mts.map +1 -0
- package/dist/database/pg-migration-lock.mjs +45 -0
- package/dist/database/pg-migration-lock.mjs.map +1 -0
- 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/postgres.d.mts.map +1 -1
- package/dist/db/postgres.mjs +2 -8
- package/dist/db/postgres.mjs.map +1 -1
- package/dist/db/sqlite.d.mts +1 -1
- package/dist/{db-errors-CK46D-ly.mjs → db-errors-CcWLaRiR.mjs} +4 -2
- package/dist/db-errors-CcWLaRiR.mjs.map +1 -0
- package/dist/{default-CM_D83Mg.mjs → default-C4v9KP56.mjs} +1 -1
- package/dist/{default-CM_D83Mg.mjs.map → default-C4v9KP56.mjs.map} +1 -1
- package/dist/{device-flow-CfGP18Uw.mjs → device-flow-BeA6lUS1.mjs} +6 -7
- package/dist/device-flow-BeA6lUS1.mjs.map +1 -0
- package/dist/dialect-helpers-HxEQGl_1.mjs +175 -0
- package/dist/dialect-helpers-HxEQGl_1.mjs.map +1 -0
- package/dist/{email-console-CIf4Lfvv.mjs → email-console-C-9Ng8DM.mjs} +1 -1
- package/dist/{email-console-CIf4Lfvv.mjs.map → email-console-C-9Ng8DM.mjs.map} +1 -1
- package/dist/{enrich-BQ0mxJRs.mjs → enrich-CFJJgxs_.mjs} +2 -2
- package/dist/{enrich-BQ0mxJRs.mjs.map → enrich-CFJJgxs_.mjs.map} +1 -1
- package/dist/error-CEGF6UZb.mjs +90 -0
- package/dist/error-CEGF6UZb.mjs.map +1 -0
- package/dist/{error-CkAseSqZ.mjs → errors-DtEXIQQV.mjs} +24 -84
- package/dist/errors-DtEXIQQV.mjs.map +1 -0
- package/dist/{escape-DqD0aCKu.mjs → escape-CFedIB1C.mjs} +1 -1
- package/dist/{escape-DqD0aCKu.mjs.map → escape-CFedIB1C.mjs.map} +1 -1
- package/dist/{field-defs-cache-WUI88LX5.mjs → field-defs-cache-DvmlgP-D.mjs} +5 -5
- package/dist/{field-defs-cache-WUI88LX5.mjs.map → field-defs-cache-DvmlgP-D.mjs.map} +1 -1
- package/dist/{fts-manager-BbFaF_V8.mjs → fts-manager-DzqIBrrW.mjs} +27 -3
- package/dist/{fts-manager-BbFaF_V8.mjs.map → fts-manager-DzqIBrrW.mjs.map} +1 -1
- package/dist/{hash-DrvzIXcz.mjs → hash-DFFrkivP.mjs} +1 -1
- package/dist/{hash-DrvzIXcz.mjs.map → hash-DFFrkivP.mjs.map} +1 -1
- package/dist/hreflang-CIxH_LKz.d.mts +48 -0
- package/dist/hreflang-CIxH_LKz.d.mts.map +1 -0
- package/dist/hreflang-db2Tpb2o.mjs +102 -0
- package/dist/hreflang-db2Tpb2o.mjs.map +1 -0
- package/dist/{import-fYLf14Co.mjs → import-Dmkm8S1W.mjs} +6 -6
- package/dist/{import-fYLf14Co.mjs.map → import-Dmkm8S1W.mjs.map} +1 -1
- package/dist/{index-Bm-Gy8Mh.d.mts → index-BEui-cRd.d.mts} +3 -3
- package/dist/{index-Bm-Gy8Mh.d.mts.map → index-BEui-cRd.d.mts.map} +1 -1
- package/dist/{index-B9sIxwe4.d.mts → index-wYnC6u4o.d.mts} +881 -22
- package/dist/index-wYnC6u4o.d.mts.map +1 -0
- package/dist/index.d.mts +19 -19
- package/dist/index.mjs +69 -64
- package/dist/{init-lock-6b309ZrF.mjs → init-lock-DJkX6Hto.mjs} +1 -1
- package/dist/{init-lock-6b309ZrF.mjs.map → init-lock-DJkX6Hto.mjs.map} +1 -1
- package/dist/{load-Djn3HWQS.mjs → load-Cx27ki1l.mjs} +2 -2
- package/dist/{load-Djn3HWQS.mjs.map → load-Cx27ki1l.mjs.map} +1 -1
- package/dist/{loader-CB6YHeul.mjs → loader-Be3ouI5L.mjs} +170 -21
- package/dist/loader-Be3ouI5L.mjs.map +1 -0
- package/dist/{manifest-schema-BHlgZM1W.mjs → manifest-schema-bCq54i7F.mjs} +18 -2
- package/dist/manifest-schema-bCq54i7F.mjs.map +1 -0
- package/dist/media/image-endpoint.d.mts +30 -2
- package/dist/media/image-endpoint.d.mts.map +1 -1
- package/dist/media/image-endpoint.mjs +30 -4
- package/dist/media/image-endpoint.mjs.map +1 -1
- package/dist/media/index.d.mts +1 -1
- package/dist/media/index.mjs +2 -2
- package/dist/media/local-runtime.d.mts +12 -12
- package/dist/media/local-runtime.mjs +8 -8
- package/dist/{media-BrXIaMFN.mjs → media-BjhhENaJ.mjs} +2 -2
- package/dist/media-BjhhENaJ.mjs.map +1 -0
- package/dist/{media-allowlist-CRHEeJ_i.mjs → media-allowlist-jUppPWFy.mjs} +2 -2
- package/dist/{media-allowlist-CRHEeJ_i.mjs.map → media-allowlist-jUppPWFy.mjs.map} +1 -1
- package/dist/media-kIV1IxFf.mjs +243 -0
- package/dist/media-kIV1IxFf.mjs.map +1 -0
- package/dist/media-upload-D2wk3EIt.mjs +145 -0
- package/dist/media-upload-D2wk3EIt.mjs.map +1 -0
- package/dist/{media-url-CKi5XSw4.mjs → media-url-BCm5vBn6.mjs} +1 -1
- package/dist/{media-url-CKi5XSw4.mjs.map → media-url-BCm5vBn6.mjs.map} +1 -1
- package/dist/media-usage-CljdO1mc.mjs +554 -0
- package/dist/media-usage-CljdO1mc.mjs.map +1 -0
- package/dist/{menus-b2T4clbO.mjs → menus-BcyElFtI.mjs} +177 -15
- package/dist/menus-BcyElFtI.mjs.map +1 -0
- package/dist/{menus-Cfivc2Ad.mjs → menus-CZyG6rvx.mjs} +3 -3
- package/dist/{menus-Cfivc2Ad.mjs.map → menus-CZyG6rvx.mjs.map} +1 -1
- package/dist/{mime-CCEzze7W.mjs → mime-DfIVjNkr.mjs} +1 -1
- package/dist/{mime-CCEzze7W.mjs.map → mime-DfIVjNkr.mjs.map} +1 -1
- package/dist/{mode-BM9QgEmt.mjs → mode-fiXRMfeA.mjs} +1 -1
- package/dist/{mode-BM9QgEmt.mjs.map → mode-fiXRMfeA.mjs.map} +1 -1
- package/dist/{normalize-CeglrBT9.mjs → normalize-C-SHXmra.mjs} +1 -1
- package/dist/{normalize-CeglrBT9.mjs.map → normalize-C-SHXmra.mjs.map} +1 -1
- package/dist/{oauth-authorization-CXWkIGT4.mjs → oauth-authorization-oqfbBuMH.mjs} +6 -7
- package/dist/oauth-authorization-oqfbBuMH.mjs.map +1 -0
- package/dist/{oauth-clients-BmTI5rsl.mjs → oauth-clients-BlrUHAsf.mjs} +1 -1
- package/dist/{oauth-clients-BmTI5rsl.mjs.map → oauth-clients-BlrUHAsf.mjs.map} +1 -1
- package/dist/{oauth-state-store-YLFLcH5F.mjs → oauth-state-store-DnvjRMy6.mjs} +2 -1
- package/dist/{oauth-state-store-YLFLcH5F.mjs.map → oauth-state-store-DnvjRMy6.mjs.map} +1 -1
- package/dist/{oauth-user-lookup-Bsc_GsX-.mjs → oauth-user-lookup-oUllxvAv.mjs} +1 -1
- package/dist/{oauth-user-lookup-Bsc_GsX-.mjs.map → oauth-user-lookup-oUllxvAv.mjs.map} +1 -1
- package/dist/object-cache/memory.d.mts +1 -1
- package/dist/{options-DTTML-Tx.mjs → options-BlmBHTvX.mjs} +1 -1
- package/dist/{options-DTTML-Tx.mjs.map → options-BlmBHTvX.mjs.map} +1 -1
- package/dist/{options-iMpRRxIe.d.mts → options-BqMkWfYa.d.mts} +6 -6
- package/dist/{options-iMpRRxIe.d.mts.map → options-BqMkWfYa.d.mts.map} +1 -1
- package/dist/page/index.d.mts +2 -2
- package/dist/page/index.d.mts.map +1 -1
- package/dist/page/index.mjs.map +1 -1
- package/dist/{parse-GmjecGct.mjs → parse-C_-6klII.mjs} +4 -12
- package/dist/{parse-GmjecGct.mjs.map → parse-C_-6klII.mjs.map} +1 -1
- package/dist/{passkey-config-De0ahnRg.mjs → passkey-config-C-SKpc0-.mjs} +1 -1
- package/dist/{passkey-config-De0ahnRg.mjs.map → passkey-config-C-SKpc0-.mjs.map} +1 -1
- package/dist/{patterns-BKmjvM7K.mjs → patterns-CiyXeDgr.mjs} +1 -1
- package/dist/{patterns-BKmjvM7K.mjs.map → patterns-CiyXeDgr.mjs.map} +1 -1
- package/dist/{placeholder-BSKwzRe4.d.mts → placeholder-Dop47JMM.d.mts} +1 -1
- package/dist/{placeholder-BSKwzRe4.d.mts.map → placeholder-Dop47JMM.d.mts.map} +1 -1
- package/dist/plugin-types.d.mts +21 -2
- package/dist/plugin-types.d.mts.map +1 -1
- package/dist/plugin-utils.d.mts +18 -16
- package/dist/plugin-utils.d.mts.map +1 -1
- package/dist/plugin-utils.mjs +8 -6
- package/dist/plugin-utils.mjs.map +1 -1
- package/dist/plugins/adapt-sandbox-entry.d.mts +10 -10
- package/dist/plugins/adapt-sandbox-entry.d.mts.map +1 -1
- package/dist/plugins/adapt-sandbox-entry.mjs +15 -3
- package/dist/plugins/adapt-sandbox-entry.mjs.map +1 -1
- package/dist/{portable-text-cCa0cGV6.mjs → portable-text-sDj92Kxv.mjs} +1 -1
- package/dist/{portable-text-cCa0cGV6.mjs.map → portable-text-sDj92Kxv.mjs.map} +1 -1
- package/dist/{preview-SSXNVPAC.mjs → preview-D4Jnbfx7.mjs} +2 -2
- package/dist/{preview-SSXNVPAC.mjs.map → preview-D4Jnbfx7.mjs.map} +1 -1
- package/dist/{public-url-Danv47cS.mjs → public-url-DSGTnJFw.mjs} +5 -3
- package/dist/public-url-DSGTnJFw.mjs.map +1 -0
- package/dist/{query-1Cp6U9oo.mjs → query-DR73ZNfm.mjs} +15 -15
- package/dist/query-DR73ZNfm.mjs.map +1 -0
- package/dist/{schema-CX9cfNkZ.mjs → query-Di7DOmPV.mjs} +5 -10
- package/dist/query-Di7DOmPV.mjs.map +1 -0
- package/dist/{rate-limit-C_Lf63Dd.mjs → rate-limit-CMj83JNW.mjs} +2 -2
- package/dist/{rate-limit-C_Lf63Dd.mjs.map → rate-limit-CMj83JNW.mjs.map} +1 -1
- package/dist/{redirect-CoW3G-0U.mjs → redirect-Botom7X6.mjs} +1 -1
- package/dist/{redirect-CoW3G-0U.mjs.map → redirect-Botom7X6.mjs.map} +1 -1
- package/dist/{redirect-IyfNirgS.mjs → redirect-CgLPYflR.mjs} +11 -5
- package/dist/redirect-CgLPYflR.mjs.map +1 -0
- package/dist/{redirects-Bs1g42Ri.mjs → redirects-B7t9bKsL.mjs} +6 -6
- package/dist/{redirects-Bs1g42Ri.mjs.map → redirects-B7t9bKsL.mjs.map} +1 -1
- package/dist/{redirects-DXEXBAII.mjs → redirects-BBq3n2Rj.mjs} +10 -143
- package/dist/redirects-BBq3n2Rj.mjs.map +1 -0
- package/dist/{registry-B57vp_X9.mjs → registry-FV15nLge.mjs} +99 -10
- package/dist/registry-FV15nLge.mjs.map +1 -0
- package/dist/relation-9M9j_UWo.mjs +334 -0
- package/dist/relation-9M9j_UWo.mjs.map +1 -0
- package/dist/{byline-fields-2Lp5Hbgf.mjs → relations-5_avdrN_.mjs} +60 -4
- package/dist/relations-5_avdrN_.mjs.map +1 -0
- package/dist/relations-BKvO39-9.mjs +397 -0
- package/dist/relations-BKvO39-9.mjs.map +1 -0
- package/dist/{byline-fields-CHE8UStY.d.mts → relations-Bh8jlFsU.d.mts} +486 -31
- package/dist/relations-Bh8jlFsU.d.mts.map +1 -0
- package/dist/{request-cache-KCNHp_RJ.mjs → request-cache-BSUptuJR.mjs} +1 -1
- package/dist/{request-cache-KCNHp_RJ.mjs.map → request-cache-BSUptuJR.mjs.map} +1 -1
- package/dist/{request-meta-DbvXaAvU.mjs → request-meta-DzXYYI-n.mjs} +2 -2
- package/dist/{request-meta-DbvXaAvU.mjs.map → request-meta-DzXYYI-n.mjs.map} +1 -1
- package/dist/{resolve-DR3wqMTy.mjs → resolve-Cd9dzclN.mjs} +1 -1
- package/dist/{resolve-DR3wqMTy.mjs.map → resolve-Cd9dzclN.mjs.map} +1 -1
- package/dist/{runner-DvFWoz8-.d.mts → runner-Dd8m8k9F.d.mts} +8 -2
- package/dist/runner-Dd8m8k9F.d.mts.map +1 -0
- package/dist/{runner-K8XK101B.mjs → runner-DfnZ5eUr.mjs} +355 -204
- package/dist/runner-DfnZ5eUr.mjs.map +1 -0
- package/dist/runtime.d.mts +11 -11
- package/dist/runtime.mjs +4 -4
- package/dist/schema-BXxlHeAf.mjs +9 -0
- package/dist/schema-BXxlHeAf.mjs.map +1 -0
- package/dist/scopes-Bl4IwHA-.mjs +27 -0
- package/dist/scopes-Bl4IwHA-.mjs.map +1 -0
- package/dist/{search-DZN2HZ-V.mjs → search-Bff-7jFt.mjs} +62 -12
- package/dist/search-Bff-7jFt.mjs.map +1 -0
- package/dist/{secrets-kp760LlD.mjs → secrets-CSwQIl4q.mjs} +4 -4
- package/dist/{secrets-kp760LlD.mjs.map → secrets-CSwQIl4q.mjs.map} +1 -1
- package/dist/{sections-CpF5SaGr.mjs → sections-CwW4s1al.mjs} +3 -3
- package/dist/{sections-CpF5SaGr.mjs.map → sections-CwW4s1al.mjs.map} +1 -1
- package/dist/seed/index.d.mts +2 -2
- package/dist/seed/index.mjs +23 -23
- package/dist/seo/index.d.mts +15 -2
- package/dist/seo/index.d.mts.map +1 -1
- package/dist/seo/index.mjs +22 -5
- package/dist/seo/index.mjs.map +1 -1
- package/dist/{seo-DXu2UQnC.mjs → seo-2cmFHZns.mjs} +2 -2
- package/dist/{seo-DXu2UQnC.mjs.map → seo-2cmFHZns.mjs.map} +1 -1
- package/dist/{seo-89-53DDs.mjs → seo-C3GDfT0V.mjs} +1 -1
- package/dist/{seo-89-53DDs.mjs.map → seo-C3GDfT0V.mjs.map} +1 -1
- package/dist/{service-DQmiBMzt.mjs → service-DkGTWGIi.mjs} +3 -3
- package/dist/{service-DQmiBMzt.mjs.map → service-DkGTWGIi.mjs.map} +1 -1
- package/dist/{session-user-Cascbax7.mjs → session-user-DbHqKDKe.mjs} +1 -1
- package/dist/{session-user-Cascbax7.mjs.map → session-user-DbHqKDKe.mjs.map} +1 -1
- package/dist/{settings-rZyHEcNT.mjs → settings-C4s8hFQm.mjs} +3 -3
- package/dist/{settings-rZyHEcNT.mjs.map → settings-C4s8hFQm.mjs.map} +1 -1
- package/dist/{settings-zhmdKyJQ.mjs → settings-CpA4lQFt.mjs} +6 -6
- package/dist/{settings-zhmdKyJQ.mjs.map → settings-CpA4lQFt.mjs.map} +1 -1
- package/dist/{setup-complete-Cb3LRyzy.mjs → setup-complete-CdIlqloh.mjs} +2 -2
- package/dist/{setup-complete-Cb3LRyzy.mjs.map → setup-complete-CdIlqloh.mjs.map} +1 -1
- package/dist/{setup-nonce-Z8x0tHf8.mjs → setup-nonce-DqiIPr-J.mjs} +1 -1
- package/dist/{setup-nonce-Z8x0tHf8.mjs.map → setup-nonce-DqiIPr-J.mjs.map} +1 -1
- package/dist/{single-flight-cache-BG3B_GhN.mjs → single-flight-cache-C2exrGAi.mjs} +2 -2
- package/dist/{single-flight-cache-BG3B_GhN.mjs.map → single-flight-cache-C2exrGAi.mjs.map} +1 -1
- package/dist/{site-url-BBfDTgZB.mjs → site-url-NGJT6NTU.mjs} +2 -2
- package/dist/{site-url-BBfDTgZB.mjs.map → site-url-NGJT6NTU.mjs.map} +1 -1
- package/dist/{slugify-Cce3dTdg.mjs → slugify-C_tqlU4G.mjs} +1 -1
- package/dist/{slugify-Cce3dTdg.mjs.map → slugify-C_tqlU4G.mjs.map} +1 -1
- package/dist/snapshot-BdpUJKD-.mjs +216 -0
- package/dist/snapshot-BdpUJKD-.mjs.map +1 -0
- package/dist/{ssrf-1g7usGBg.mjs → ssrf-CviKqWmq.mjs} +1 -1
- package/dist/{ssrf-1g7usGBg.mjs.map → ssrf-CviKqWmq.mjs.map} +1 -1
- package/dist/state-xxv6ZTMv.mjs +128 -0
- package/dist/state-xxv6ZTMv.mjs.map +1 -0
- package/dist/{status-CqJQX1QN.mjs → status-COfycGIU.mjs} +1 -1
- package/dist/{status-CqJQX1QN.mjs.map → status-COfycGIU.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-Bs13SN-F.mjs → taxonomies-Ce49uIzY.mjs} +13 -9
- package/dist/taxonomies-Ce49uIzY.mjs.map +1 -0
- package/dist/{taxonomies-kH9ABDUF.mjs → taxonomies-DjSKBZpq.mjs} +115 -36
- package/dist/taxonomies-DjSKBZpq.mjs.map +1 -0
- package/dist/{taxonomy-BxGxZZdu.mjs → taxonomy-DfVooU4W.mjs} +60 -13
- package/dist/taxonomy-DfVooU4W.mjs.map +1 -0
- package/dist/{tokens-BGT0TUUo.mjs → tokens-DVltpO2D.mjs} +2 -2
- package/dist/{tokens-BGT0TUUo.mjs.map → tokens-DVltpO2D.mjs.map} +1 -1
- package/dist/{transaction-qfqpPVpu.mjs → transaction-D0FOsb3X.mjs} +1 -1
- package/dist/{transaction-qfqpPVpu.mjs.map → transaction-D0FOsb3X.mjs.map} +1 -1
- package/dist/{transport-DPefPMcz.mjs → transport-CKrlqSpD.mjs} +1 -1
- package/dist/{transport-DPefPMcz.mjs.map → transport-CKrlqSpD.mjs.map} +1 -1
- package/dist/{transport-BMDWHSgZ.d.mts → transport-Vd7VdqHv.d.mts} +1 -1
- package/dist/{transport-BMDWHSgZ.d.mts.map → transport-Vd7VdqHv.d.mts.map} +1 -1
- package/dist/{trusted-proxy-VTPRiX2s.mjs → trusted-proxy-CwjQj0YG.mjs} +1 -1
- package/dist/{trusted-proxy-VTPRiX2s.mjs.map → trusted-proxy-CwjQj0YG.mjs.map} +1 -1
- package/dist/{types-CgvhU-hF.d.mts → types-B4vm81VH.d.mts} +1 -1
- package/dist/{types-CgvhU-hF.d.mts.map → types-B4vm81VH.d.mts.map} +1 -1
- package/dist/{types-ea9sAPck.d.mts → types-B97jg3aW.d.mts} +6 -1
- package/dist/{types-ea9sAPck.d.mts.map → types-B97jg3aW.d.mts.map} +1 -1
- package/dist/{types-Jo3UYd6b.mjs → types-BD40g7zz.mjs} +1 -1
- package/dist/{types-Jo3UYd6b.mjs.map → types-BD40g7zz.mjs.map} +1 -1
- package/dist/{types-DmHk7vAt.d.mts → types-BNfPHfay.d.mts} +1 -1
- package/dist/{types-DmHk7vAt.d.mts.map → types-BNfPHfay.d.mts.map} +1 -1
- package/dist/{types-BcLUUbbR.d.mts → types-BfYUPJdP.d.mts} +11 -3
- package/dist/{types-BcLUUbbR.d.mts.map → types-BfYUPJdP.d.mts.map} +1 -1
- package/dist/{types-CGbYowGQ.d.mts → types-BvB7gDOD.d.mts} +90 -4
- package/dist/types-BvB7gDOD.d.mts.map +1 -0
- package/dist/{types-vgEWF18A.d.mts → types-C7U0HlEr.d.mts} +1 -1
- package/dist/{types-vgEWF18A.d.mts.map → types-C7U0HlEr.d.mts.map} +1 -1
- package/dist/{types-CuW0zWDA.mjs → types-D1iJ3DpO.mjs} +3 -3
- package/dist/{types-CuW0zWDA.mjs.map → types-D1iJ3DpO.mjs.map} +1 -1
- package/dist/{types-_HFLRzTn.d.mts → types-DPKhI5ib.d.mts} +9 -1
- package/dist/types-DPKhI5ib.d.mts.map +1 -0
- package/dist/{types-g_aFIdW0.d.mts → types-Kmaxdarz.d.mts} +1 -1
- package/dist/{types-g_aFIdW0.d.mts.map → types-Kmaxdarz.d.mts.map} +1 -1
- package/dist/{types-ClUkdbWb.d.mts → types-iVeZ5g6N.d.mts} +1 -1
- package/dist/{types-ClUkdbWb.d.mts.map → types-iVeZ5g6N.d.mts.map} +1 -1
- package/dist/{types-tM44hEcf.mjs → types-o7xo7VgH.mjs} +1 -1
- package/dist/{types-tM44hEcf.mjs.map → types-o7xo7VgH.mjs.map} +1 -1
- package/dist/{user-BjAOvU3Z.mjs → user-Bh-L1qo6.mjs} +3 -3
- package/dist/{user-BjAOvU3Z.mjs.map → user-Bh-L1qo6.mjs.map} +1 -1
- package/dist/{utils-BJXElxdw.mjs → utils-BbUgmeZG.mjs} +3 -3
- package/dist/{utils-BJXElxdw.mjs.map → utils-BbUgmeZG.mjs.map} +1 -1
- package/dist/{validate-Z1b86_3B.d.mts → validate-DULfgpJP.d.mts} +5 -5
- package/dist/{validate-Z1b86_3B.d.mts.map → validate-DULfgpJP.d.mts.map} +1 -1
- package/dist/{validate-CWSnKVIJ.mjs → validate-V9nCwq_-.mjs} +3 -3
- package/dist/{validate-CWSnKVIJ.mjs.map → validate-V9nCwq_-.mjs.map} +1 -1
- package/dist/{validation-0l8-RYj4.mjs → validation-BsVUJfsP.mjs} +10 -10
- package/dist/{validation-0l8-RYj4.mjs.map → validation-BsVUJfsP.mjs.map} +1 -1
- package/dist/version-907opKac.mjs +7 -0
- package/dist/{version-qmeO1XZY.mjs.map → version-907opKac.mjs.map} +1 -1
- package/dist/{widgets-hWcIicX8.mjs → widgets-DGv1Z04V.mjs} +4 -4
- package/dist/{widgets-hWcIicX8.mjs.map → widgets-DGv1Z04V.mjs.map} +1 -1
- package/dist/{wxr-taxonomies-0_uxSrmf.d.mts → wxr-taxonomies-B4tMuN5T.d.mts} +1 -1
- package/dist/{wxr-taxonomies-0_uxSrmf.d.mts.map → wxr-taxonomies-B4tMuN5T.d.mts.map} +1 -1
- package/dist/{wxr-taxonomies-CNFcsNCr.mjs → wxr-taxonomies-Cs1N6O8z.mjs} +4 -4
- package/dist/{wxr-taxonomies-CNFcsNCr.mjs.map → wxr-taxonomies-Cs1N6O8z.mjs.map} +1 -1
- package/dist/{zod-generator-CacrR-i8.mjs → zod-generator-B5prQ5M4.mjs} +3 -3
- package/dist/{zod-generator-CacrR-i8.mjs.map → zod-generator-B5prQ5M4.mjs.map} +1 -1
- package/package.json +12 -8
- package/src/api/authorize.ts +10 -1
- package/src/api/error.ts +5 -5
- package/src/api/errors.ts +25 -0
- package/src/api/handlers/backup.ts +312 -0
- package/src/api/handlers/content.ts +147 -3
- package/src/api/handlers/dashboard.ts +2 -0
- package/src/api/handlers/device-flow.ts +2 -3
- package/src/api/handlers/index.ts +22 -0
- package/src/api/handlers/marketplace.ts +38 -0
- package/src/api/handlers/media-upload.ts +210 -0
- package/src/api/handlers/media-usage.ts +289 -0
- package/src/api/handlers/oauth-authorization.ts +2 -6
- package/src/api/handlers/plugin-settings.ts +218 -0
- package/src/api/handlers/plugins.ts +41 -0
- package/src/api/handlers/registry.ts +39 -0
- package/src/api/handlers/relations.ts +474 -0
- package/src/api/handlers/snapshot.ts +21 -3
- package/src/api/handlers/taxonomies.ts +26 -4
- package/src/api/handlers/validate-media-fields.ts +1 -1
- package/src/api/openapi/document.ts +72 -5
- package/src/api/parse.ts +2 -16
- package/src/api/public-url.ts +4 -2
- package/src/api/schemas/comments.ts +6 -0
- package/src/api/schemas/common.ts +6 -2
- package/src/api/schemas/content.ts +8 -0
- package/src/api/schemas/index.ts +2 -0
- package/src/api/schemas/media-usage.ts +120 -0
- package/src/api/schemas/media.ts +32 -1
- package/src/api/schemas/relations.ts +109 -0
- package/src/api/schemas/search.ts +1 -0
- package/src/astro/integration/index.ts +39 -0
- package/src/astro/integration/routes.ts +40 -0
- package/src/astro/integration/runtime.ts +30 -0
- package/src/astro/integration/virtual-modules.ts +41 -7
- package/src/astro/integration/vite-config.ts +17 -1
- package/src/astro/middleware/auth.ts +70 -78
- package/src/astro/middleware/csp.ts +5 -2
- package/src/astro/middleware/request-context.ts +162 -20
- package/src/astro/middleware.ts +108 -40
- package/src/astro/public-plugin-api-routes.ts +2 -1
- package/src/astro/routes/PluginRegistry.tsx +5 -2
- package/src/astro/routes/admin.astro +56 -16
- package/src/astro/routes/api/admin/api-tokens/index.ts +2 -2
- package/src/astro/routes/api/admin/bylines/[id]/translations.ts +2 -5
- package/src/astro/routes/api/admin/comments/[id]/status.ts +1 -2
- package/src/astro/routes/api/admin/comments/index.ts +1 -2
- package/src/astro/routes/api/admin/media-usage/repair.ts +24 -0
- package/src/astro/routes/api/admin/plugins/[id]/index.ts +6 -0
- package/src/astro/routes/api/admin/plugins/[id]/mcp.ts +42 -0
- package/src/astro/routes/api/admin/plugins/[id]/settings.ts +80 -0
- package/src/astro/routes/api/admin/plugins/[id]/update.ts +2 -0
- package/src/astro/routes/api/admin/plugins/index.ts +9 -0
- package/src/astro/routes/api/admin/plugins/marketplace/[id]/install.ts +2 -0
- package/src/astro/routes/api/admin/plugins/registry/[id]/update.ts +2 -0
- package/src/astro/routes/api/admin/plugins/registry/install.ts +2 -0
- package/src/astro/routes/api/admin/plugins/updates.ts +2 -4
- package/src/astro/routes/api/auth/mode.ts +6 -14
- package/src/astro/routes/api/auth/oauth/[provider]/callback.ts +21 -5
- package/src/astro/routes/api/auth/oauth/[provider].ts +24 -7
- package/src/astro/routes/api/comments/[collection]/[contentId]/index.ts +13 -0
- package/src/astro/routes/api/content/[collection]/[id]/compare.ts +3 -4
- package/src/astro/routes/api/content/[collection]/[id]/duplicate.ts +2 -3
- package/src/astro/routes/api/content/[collection]/[id]/permanent.ts +2 -3
- package/src/astro/routes/api/content/[collection]/[id]/preview-url.ts +3 -4
- package/src/astro/routes/api/content/[collection]/[id]/references/[relation]/children.ts +95 -0
- package/src/astro/routes/api/content/[collection]/[id]/references/[relation]/parents.ts +47 -0
- package/src/astro/routes/api/content/[collection]/[id]/revisions.ts +3 -4
- package/src/astro/routes/api/content/[collection]/[id]/terms/[taxonomy].ts +4 -6
- package/src/astro/routes/api/content/[collection]/[id]/translations.ts +3 -4
- package/src/astro/routes/api/content/[collection]/[id].ts +3 -4
- package/src/astro/routes/api/content/[collection]/authors.ts +2 -3
- package/src/astro/routes/api/content/[collection]/index.ts +6 -8
- package/src/astro/routes/api/content/[collection]/trash.ts +2 -3
- package/src/astro/routes/api/manifest.ts +2 -9
- package/src/astro/routes/api/mcp.ts +2 -1
- package/src/astro/routes/api/media/[id]/usage.ts +30 -0
- package/src/astro/routes/api/media/[id].ts +17 -6
- package/src/astro/routes/api/media/file/[...key].ts +8 -0
- package/src/astro/routes/api/media.ts +21 -2
- package/src/astro/routes/api/oauth/authorize.ts +2 -6
- package/src/astro/routes/api/plugins/[pluginId]/[...path].ts +17 -3
- package/src/astro/routes/api/relations/[id]/index.ts +84 -0
- package/src/astro/routes/api/relations/[id]/translations.ts +33 -0
- package/src/astro/routes/api/relations/index.ts +56 -0
- package/src/astro/routes/api/schema/collections/[slug]/fields/[fieldSlug].ts +1 -7
- package/src/astro/routes/api/schema/collections/[slug]/fields/index.ts +1 -2
- package/src/astro/routes/api/search/index.ts +2 -0
- package/src/astro/routes/api/settings/backups/archives/[name].ts +78 -0
- package/src/astro/routes/api/settings/backups/archives/index.ts +33 -0
- package/src/astro/routes/api/settings/backups/export.ts +43 -0
- package/src/astro/routes/api/settings/backups/index.ts +76 -0
- package/src/astro/routes/api/setup/admin-verify.ts +8 -4
- package/src/astro/routes/api/setup/admin.ts +11 -4
- package/src/astro/routes/api/well-known/oauth-authorization-server.ts +4 -1
- package/src/astro/routes/api/well-known/oauth-protected-resource.ts +5 -1
- package/src/astro/types.ts +50 -2
- package/src/auth/api-tokens.ts +1 -0
- package/src/auth/oauth-state-store.ts +3 -0
- package/src/auth/providers/github-admin.tsx +5 -6
- package/src/auth/providers/google-admin.tsx +5 -6
- package/src/auth/scopes.ts +3 -9
- package/src/cli/client-factory.ts +0 -1
- package/src/cli/commands/bundle-utils.ts +50 -1
- package/src/cli/commands/bundle.ts +9 -2
- package/src/cli/commands/export-seed.ts +1 -10
- package/src/cli/commands/media.ts +127 -0
- package/src/client/index.ts +123 -2
- package/src/client/transport.ts +1 -1
- package/src/comments/service.ts +1 -1
- package/src/comments/turnstile.ts +64 -0
- package/src/components/BlockquoteGroup.astro +34 -0
- package/src/components/CommentForm.astro +12 -5
- package/src/components/EmDashHead.astro +31 -9
- package/src/components/InlinePortableTextEditor.tsx +88 -33
- package/src/components/PortableText.astro +7 -1
- package/src/components/index.ts +2 -0
- package/src/components/marks/Link.astro +5 -1
- package/src/components/portable-text-blockquote-group.ts +68 -0
- package/src/content/converters/portable-text-to-prosemirror.ts +32 -1
- package/src/database/dialect-helpers.ts +111 -3
- package/src/database/migrations/039_fix_fts5_triggers.ts +1 -1
- package/src/database/migrations/051_content_taxonomies_denorm.ts +120 -0
- package/src/database/migrations/052_media_usage_read_index.ts +26 -0
- package/src/database/migrations/053_plugin_mcp_tools.ts +21 -0
- package/src/database/migrations/runner.ts +52 -6
- package/src/database/pg-migration-lock.ts +72 -0
- package/src/database/repositories/audit.ts +2 -1
- package/src/database/repositories/comment.ts +1 -1
- package/src/database/repositories/content.ts +270 -37
- package/src/database/repositories/media-usage.ts +250 -1
- package/src/database/repositories/media.ts +1 -1
- package/src/database/repositories/plugin-storage.ts +29 -32
- package/src/database/repositories/redirect.ts +14 -2
- package/src/database/repositories/relation.ts +130 -5
- package/src/database/repositories/taxonomy.ts +66 -8
- package/src/database/repositories/types.ts +8 -0
- package/src/database/types.ts +23 -0
- package/src/db/adapters.ts +9 -0
- package/src/db/postgres.ts +5 -2
- package/src/emdash-runtime.ts +382 -70
- package/src/index.ts +6 -2
- package/src/loader.ts +293 -32
- package/src/mcp/server.ts +251 -8
- package/src/media/image-endpoint.ts +38 -2
- package/src/page/metadata.ts +27 -0
- package/src/plugin-types.ts +19 -0
- package/src/plugin-utils.ts +8 -6
- package/src/plugins/adapt-sandbox-entry.ts +30 -1
- package/src/plugins/context.ts +92 -0
- package/src/plugins/define-plugin.ts +17 -0
- package/src/plugins/index.ts +4 -0
- package/src/plugins/manifest-schema.ts +30 -1
- package/src/plugins/routes.ts +27 -1
- package/src/plugins/sandbox/runner-options.ts +16 -0
- package/src/plugins/sandbox/types.ts +6 -1
- package/src/plugins/state.ts +17 -1
- package/src/plugins/storage-query.ts +67 -33
- package/src/plugins/types.ts +100 -0
- package/src/schema/byline-registry.ts +1 -1
- package/src/schema/registry.ts +141 -5
- package/src/search/fts-manager.ts +34 -0
- package/src/search/match.ts +50 -0
- package/src/search/query.ts +94 -9
- package/src/seed/apply.ts +28 -29
- package/src/seo/hreflang.ts +192 -0
- package/src/seo/index.ts +22 -4
- package/src/storage/types.ts +6 -0
- package/src/taxonomies/index.ts +62 -45
- package/src/taxonomies/term-counts.ts +117 -0
- package/src/utils/base64.ts +7 -2
- package/src/utils/db-errors.ts +3 -1
- package/src/virtual-modules.d.ts +14 -0
- package/src/visual-editing/editable.ts +41 -35
- package/src/visual-editing/toolbar-bootstrap.ts +120 -0
- package/src/visual-editing/toolbar.ts +47 -1
- package/dist/adapters-hUy8vOB-.d.mts.map +0 -1
- package/dist/api-DxFSorgk.mjs.map +0 -1
- package/dist/api-tokens-DsvvCtdh.mjs +0 -3
- package/dist/apply-CDJqIjPU.mjs.map +0 -1
- package/dist/authorize-Dz88F_Fw.mjs.map +0 -1
- package/dist/base64-CmWvODNW.mjs.map +0 -1
- package/dist/byline-fields-2Lp5Hbgf.mjs.map +0 -1
- package/dist/byline-fields-CHE8UStY.d.mts.map +0 -1
- package/dist/content-DhgEth4k.mjs.map +0 -1
- package/dist/content-refresh-Br4gMzh8.mjs.map +0 -1
- package/dist/context-BRIpHARC.mjs.map +0 -1
- package/dist/dashboard-EvEKF5en.mjs.map +0 -1
- package/dist/db-errors-CK46D-ly.mjs.map +0 -1
- package/dist/device-flow-CfGP18Uw.mjs.map +0 -1
- package/dist/dialect-helpers-DRI5pyY3.mjs +0 -110
- package/dist/dialect-helpers-DRI5pyY3.mjs.map +0 -1
- package/dist/error-CkAseSqZ.mjs.map +0 -1
- package/dist/index-B9sIxwe4.d.mts.map +0 -1
- package/dist/loader-CB6YHeul.mjs.map +0 -1
- package/dist/manifest-schema-BHlgZM1W.mjs.map +0 -1
- package/dist/media-BrXIaMFN.mjs.map +0 -1
- package/dist/menus-b2T4clbO.mjs.map +0 -1
- package/dist/oauth-authorization-CXWkIGT4.mjs.map +0 -1
- package/dist/public-url-Danv47cS.mjs.map +0 -1
- package/dist/query-1Cp6U9oo.mjs.map +0 -1
- package/dist/redirect-IyfNirgS.mjs.map +0 -1
- package/dist/redirects-DXEXBAII.mjs.map +0 -1
- package/dist/registry-B57vp_X9.mjs.map +0 -1
- package/dist/runner-DvFWoz8-.d.mts.map +0 -1
- package/dist/runner-K8XK101B.mjs.map +0 -1
- package/dist/scheduled-publish-Drffrf2a.d.mts +0 -11
- package/dist/scheduled-publish-Drffrf2a.d.mts.map +0 -1
- package/dist/schema-CX9cfNkZ.mjs.map +0 -1
- package/dist/search-DZN2HZ-V.mjs.map +0 -1
- package/dist/taxonomies-Bs13SN-F.mjs.map +0 -1
- package/dist/taxonomies-kH9ABDUF.mjs.map +0 -1
- package/dist/taxonomy-BxGxZZdu.mjs.map +0 -1
- package/dist/types-CGbYowGQ.d.mts.map +0 -1
- package/dist/types-_HFLRzTn.d.mts.map +0 -1
- package/dist/version-qmeO1XZY.mjs +0 -7
- /package/dist/{ssrf-CmuGgCq3.mjs → ssrf-BB__xfNM.mjs} +0 -0
- /package/dist/{types-DROWRxYV.mjs → types-CK0LxPUQ.mjs} +0 -0
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { MIGRATION_LOCK_BUSY_MESSAGE } from "./database/pg-migration-lock.mjs";
|
|
1
2
|
import { t as validateIdentifier } from "./validate-VPnKoIzW.mjs";
|
|
2
|
-
import { c as listTablesLike, i as
|
|
3
|
+
import { a as currentTimestampValue, c as listTablesLike, i as currentTimestamp, r as columnExists, s as isSqlite, t as binaryType } from "./dialect-helpers-HxEQGl_1.mjs";
|
|
3
4
|
import { n as getI18nConfig } from "./config-CVssduLe.mjs";
|
|
4
5
|
import { createRequire } from "node:module";
|
|
5
6
|
import { sql } from "kysely";
|
|
@@ -24,8 +25,8 @@ var __exportAll = (all, no_symbols) => {
|
|
|
24
25
|
//#endregion
|
|
25
26
|
//#region src/database/migrations/001_initial.ts
|
|
26
27
|
var _001_initial_exports = /* @__PURE__ */ __exportAll({
|
|
27
|
-
down: () => down$
|
|
28
|
-
up: () => up$
|
|
28
|
+
down: () => down$51,
|
|
29
|
+
up: () => up$51
|
|
29
30
|
});
|
|
30
31
|
/**
|
|
31
32
|
* Initial schema migration
|
|
@@ -34,7 +35,7 @@ var _001_initial_exports = /* @__PURE__ */ __exportAll({
|
|
|
34
35
|
* by the SchemaRegistry when collections are added via the admin UI.
|
|
35
36
|
* This migration only creates system tables.
|
|
36
37
|
*/
|
|
37
|
-
async function up$
|
|
38
|
+
async function up$51(db) {
|
|
38
39
|
await db.schema.createTable("revisions").ifNotExists().addColumn("id", "text", (col) => col.primaryKey()).addColumn("collection", "text", (col) => col.notNull()).addColumn("entry_id", "text", (col) => col.notNull()).addColumn("data", "text", (col) => col.notNull()).addColumn("author_id", "text").addColumn("created_at", "text", (col) => col.defaultTo(currentTimestamp(db))).execute();
|
|
39
40
|
await db.schema.createIndex("idx_revisions_entry").ifNotExists().on("revisions").columns(["collection", "entry_id"]).execute();
|
|
40
41
|
await db.schema.createTable("taxonomies").ifNotExists().addColumn("id", "text", (col) => col.primaryKey()).addColumn("name", "text", (col) => col.notNull()).addColumn("slug", "text", (col) => col.notNull()).addColumn("label", "text", (col) => col.notNull()).addColumn("parent_id", "text").addColumn("data", "text").addUniqueConstraint("taxonomies_name_slug_unique", ["name", "slug"]).addForeignKeyConstraint("taxonomies_parent_fk", ["parent_id"], "taxonomies", ["id"], (cb) => cb.onDelete("set null")).execute();
|
|
@@ -54,7 +55,7 @@ async function up$48(db) {
|
|
|
54
55
|
await db.schema.createIndex("idx_audit_action").ifNotExists().on("audit_logs").column("action").execute();
|
|
55
56
|
await db.schema.createIndex("idx_audit_timestamp").ifNotExists().on("audit_logs").column("timestamp").execute();
|
|
56
57
|
}
|
|
57
|
-
async function down$
|
|
58
|
+
async function down$51(db) {
|
|
58
59
|
await db.schema.dropTable("audit_logs").execute();
|
|
59
60
|
await db.schema.dropTable("options").execute();
|
|
60
61
|
await db.schema.dropTable("users").execute();
|
|
@@ -67,26 +68,26 @@ async function down$48(db) {
|
|
|
67
68
|
//#endregion
|
|
68
69
|
//#region src/database/migrations/002_media_status.ts
|
|
69
70
|
var _002_media_status_exports = /* @__PURE__ */ __exportAll({
|
|
70
|
-
down: () => down$
|
|
71
|
-
up: () => up$
|
|
71
|
+
down: () => down$50,
|
|
72
|
+
up: () => up$50
|
|
72
73
|
});
|
|
73
74
|
/**
|
|
74
75
|
* Add status column to media table for tracking upload state.
|
|
75
76
|
* Status values: 'pending' | 'ready' | 'failed'
|
|
76
77
|
*/
|
|
77
|
-
async function up$
|
|
78
|
+
async function up$50(db) {
|
|
78
79
|
await db.schema.alterTable("media").addColumn("status", "text", (col) => col.notNull().defaultTo("ready")).execute();
|
|
79
80
|
await db.schema.createIndex("idx_media_status").on("media").column("status").execute();
|
|
80
81
|
}
|
|
81
|
-
async function down$
|
|
82
|
+
async function down$50(db) {
|
|
82
83
|
await db.schema.dropIndex("idx_media_status").execute();
|
|
83
84
|
}
|
|
84
85
|
|
|
85
86
|
//#endregion
|
|
86
87
|
//#region src/database/migrations/003_schema_registry.ts
|
|
87
88
|
var _003_schema_registry_exports = /* @__PURE__ */ __exportAll({
|
|
88
|
-
down: () => down$
|
|
89
|
-
up: () => up$
|
|
89
|
+
down: () => down$49,
|
|
90
|
+
up: () => up$49
|
|
90
91
|
});
|
|
91
92
|
/**
|
|
92
93
|
* Migration: Schema Registry Tables
|
|
@@ -94,14 +95,14 @@ var _003_schema_registry_exports = /* @__PURE__ */ __exportAll({
|
|
|
94
95
|
* Creates the schema registry tables that store collection and field definitions.
|
|
95
96
|
* This enables dynamic schema management where D1 is the source of truth.
|
|
96
97
|
*/
|
|
97
|
-
async function up$
|
|
98
|
+
async function up$49(db) {
|
|
98
99
|
await db.schema.createTable("_emdash_collections").addColumn("id", "text", (col) => col.primaryKey()).addColumn("slug", "text", (col) => col.notNull().unique()).addColumn("label", "text", (col) => col.notNull()).addColumn("label_singular", "text").addColumn("description", "text").addColumn("icon", "text").addColumn("supports", "text").addColumn("source", "text").addColumn("created_at", "text", (col) => col.defaultTo(currentTimestamp(db))).addColumn("updated_at", "text", (col) => col.defaultTo(currentTimestamp(db))).execute();
|
|
99
100
|
await db.schema.createTable("_emdash_fields").addColumn("id", "text", (col) => col.primaryKey()).addColumn("collection_id", "text", (col) => col.notNull()).addColumn("slug", "text", (col) => col.notNull()).addColumn("label", "text", (col) => col.notNull()).addColumn("type", "text", (col) => col.notNull()).addColumn("column_type", "text", (col) => col.notNull()).addColumn("required", "integer", (col) => col.defaultTo(0)).addColumn("unique", "integer", (col) => col.defaultTo(0)).addColumn("default_value", "text").addColumn("validation", "text").addColumn("widget", "text").addColumn("options", "text").addColumn("sort_order", "integer", (col) => col.defaultTo(0)).addColumn("created_at", "text", (col) => col.defaultTo(currentTimestamp(db))).addForeignKeyConstraint("fields_collection_fk", ["collection_id"], "_emdash_collections", ["id"], (cb) => cb.onDelete("cascade")).execute();
|
|
100
101
|
await db.schema.createIndex("idx_fields_collection_slug").on("_emdash_fields").columns(["collection_id", "slug"]).unique().execute();
|
|
101
102
|
await db.schema.createIndex("idx_fields_collection").on("_emdash_fields").column("collection_id").execute();
|
|
102
103
|
await db.schema.createIndex("idx_fields_sort").on("_emdash_fields").columns(["collection_id", "sort_order"]).execute();
|
|
103
104
|
}
|
|
104
|
-
async function down$
|
|
105
|
+
async function down$49(db) {
|
|
105
106
|
await db.schema.dropTable("_emdash_fields").execute();
|
|
106
107
|
await db.schema.dropTable("_emdash_collections").execute();
|
|
107
108
|
}
|
|
@@ -109,8 +110,8 @@ async function down$46(db) {
|
|
|
109
110
|
//#endregion
|
|
110
111
|
//#region src/database/migrations/004_plugins.ts
|
|
111
112
|
var _004_plugins_exports = /* @__PURE__ */ __exportAll({
|
|
112
|
-
down: () => down$
|
|
113
|
-
up: () => up$
|
|
113
|
+
down: () => down$48,
|
|
114
|
+
up: () => up$48
|
|
114
115
|
});
|
|
115
116
|
/**
|
|
116
117
|
* Migration: Plugin System Tables
|
|
@@ -120,7 +121,7 @@ var _004_plugins_exports = /* @__PURE__ */ __exportAll({
|
|
|
120
121
|
*
|
|
121
122
|
* @see PLUGIN-SYSTEM.md § Plugin Storage
|
|
122
123
|
*/
|
|
123
|
-
async function up$
|
|
124
|
+
async function up$48(db) {
|
|
124
125
|
await db.schema.createTable("_plugin_storage").addColumn("plugin_id", "text", (col) => col.notNull()).addColumn("collection", "text", (col) => col.notNull()).addColumn("id", "text", (col) => col.notNull()).addColumn("data", "text", (col) => col.notNull()).addColumn("created_at", "text", (col) => col.defaultTo(currentTimestamp(db))).addColumn("updated_at", "text", (col) => col.defaultTo(currentTimestamp(db))).addPrimaryKeyConstraint("pk_plugin_storage", [
|
|
125
126
|
"plugin_id",
|
|
126
127
|
"collection",
|
|
@@ -138,7 +139,7 @@ async function up$45(db) {
|
|
|
138
139
|
"index_name"
|
|
139
140
|
]).execute();
|
|
140
141
|
}
|
|
141
|
-
async function down$
|
|
142
|
+
async function down$48(db) {
|
|
142
143
|
await db.schema.dropTable("_plugin_indexes").execute();
|
|
143
144
|
await db.schema.dropTable("_plugin_state").execute();
|
|
144
145
|
await db.schema.dropTable("_plugin_storage").execute();
|
|
@@ -147,8 +148,8 @@ async function down$45(db) {
|
|
|
147
148
|
//#endregion
|
|
148
149
|
//#region src/database/migrations/005_menus.ts
|
|
149
150
|
var _005_menus_exports = /* @__PURE__ */ __exportAll({
|
|
150
|
-
down: () => down$
|
|
151
|
-
up: () => up$
|
|
151
|
+
down: () => down$47,
|
|
152
|
+
up: () => up$47
|
|
152
153
|
});
|
|
153
154
|
/**
|
|
154
155
|
* Navigation Menus migration
|
|
@@ -156,13 +157,13 @@ var _005_menus_exports = /* @__PURE__ */ __exportAll({
|
|
|
156
157
|
* Creates tables for admin-editable navigation menus.
|
|
157
158
|
* Menu items can reference content entries, taxonomy terms, or custom URLs.
|
|
158
159
|
*/
|
|
159
|
-
async function up$
|
|
160
|
+
async function up$47(db) {
|
|
160
161
|
await db.schema.createTable("_emdash_menus").addColumn("id", "text", (col) => col.primaryKey()).addColumn("name", "text", (col) => col.notNull().unique()).addColumn("label", "text", (col) => col.notNull()).addColumn("created_at", "text", (col) => col.defaultTo(currentTimestamp(db))).addColumn("updated_at", "text", (col) => col.defaultTo(currentTimestamp(db))).execute();
|
|
161
162
|
await db.schema.createTable("_emdash_menu_items").addColumn("id", "text", (col) => col.primaryKey()).addColumn("menu_id", "text", (col) => col.notNull()).addColumn("parent_id", "text").addColumn("sort_order", "integer", (col) => col.notNull().defaultTo(0)).addColumn("type", "text", (col) => col.notNull()).addColumn("reference_collection", "text").addColumn("reference_id", "text").addColumn("custom_url", "text").addColumn("label", "text", (col) => col.notNull()).addColumn("title_attr", "text").addColumn("target", "text").addColumn("css_classes", "text").addColumn("created_at", "text", (col) => col.defaultTo(currentTimestamp(db))).addForeignKeyConstraint("menu_items_menu_fk", ["menu_id"], "_emdash_menus", ["id"], (cb) => cb.onDelete("cascade")).addForeignKeyConstraint("menu_items_parent_fk", ["parent_id"], "_emdash_menu_items", ["id"], (cb) => cb.onDelete("cascade")).execute();
|
|
162
163
|
await db.schema.createIndex("idx_menu_items_menu").on("_emdash_menu_items").columns(["menu_id", "sort_order"]).execute();
|
|
163
164
|
await db.schema.createIndex("idx_menu_items_parent").on("_emdash_menu_items").column("parent_id").execute();
|
|
164
165
|
}
|
|
165
|
-
async function down$
|
|
166
|
+
async function down$47(db) {
|
|
166
167
|
await db.schema.dropTable("_emdash_menu_items").execute();
|
|
167
168
|
await db.schema.dropTable("_emdash_menus").execute();
|
|
168
169
|
}
|
|
@@ -170,8 +171,8 @@ async function down$44(db) {
|
|
|
170
171
|
//#endregion
|
|
171
172
|
//#region src/database/migrations/006_taxonomy_defs.ts
|
|
172
173
|
var _006_taxonomy_defs_exports = /* @__PURE__ */ __exportAll({
|
|
173
|
-
down: () => down$
|
|
174
|
-
up: () => up$
|
|
174
|
+
down: () => down$46,
|
|
175
|
+
up: () => up$46
|
|
175
176
|
});
|
|
176
177
|
/**
|
|
177
178
|
* Taxonomy definitions migration
|
|
@@ -179,7 +180,7 @@ var _006_taxonomy_defs_exports = /* @__PURE__ */ __exportAll({
|
|
|
179
180
|
* Adds _emdash_taxonomy_defs table to store taxonomy definitions (category, tag, custom)
|
|
180
181
|
* and seeds default category and tag taxonomies.
|
|
181
182
|
*/
|
|
182
|
-
async function up$
|
|
183
|
+
async function up$46(db) {
|
|
183
184
|
await db.schema.createTable("_emdash_taxonomy_defs").addColumn("id", "text", (col) => col.primaryKey()).addColumn("name", "text", (col) => col.notNull().unique()).addColumn("label", "text", (col) => col.notNull()).addColumn("label_singular", "text").addColumn("hierarchical", "integer", (col) => col.defaultTo(0)).addColumn("collections", "text").addColumn("created_at", "text", (col) => col.defaultTo(currentTimestamp(db))).execute();
|
|
184
185
|
await db.insertInto("_emdash_taxonomy_defs").values([{
|
|
185
186
|
id: "taxdef_category",
|
|
@@ -197,22 +198,22 @@ async function up$43(db) {
|
|
|
197
198
|
collections: JSON.stringify(["posts"])
|
|
198
199
|
}]).execute();
|
|
199
200
|
}
|
|
200
|
-
async function down$
|
|
201
|
+
async function down$46(db) {
|
|
201
202
|
await db.schema.dropTable("_emdash_taxonomy_defs").execute();
|
|
202
203
|
}
|
|
203
204
|
|
|
204
205
|
//#endregion
|
|
205
206
|
//#region src/database/migrations/007_widgets.ts
|
|
206
207
|
var _007_widgets_exports = /* @__PURE__ */ __exportAll({
|
|
207
|
-
down: () => down$
|
|
208
|
-
up: () => up$
|
|
208
|
+
down: () => down$45,
|
|
209
|
+
up: () => up$45
|
|
209
210
|
});
|
|
210
|
-
async function up$
|
|
211
|
+
async function up$45(db) {
|
|
211
212
|
await db.schema.createTable("_emdash_widget_areas").addColumn("id", "text", (col) => col.primaryKey()).addColumn("name", "text", (col) => col.notNull().unique()).addColumn("label", "text", (col) => col.notNull()).addColumn("description", "text").addColumn("created_at", "text", (col) => col.defaultTo(sql`CURRENT_TIMESTAMP`)).execute();
|
|
212
213
|
await db.schema.createTable("_emdash_widgets").addColumn("id", "text", (col) => col.primaryKey()).addColumn("area_id", "text", (col) => col.notNull().references("_emdash_widget_areas.id").onDelete("cascade")).addColumn("sort_order", "integer", (col) => col.notNull().defaultTo(0)).addColumn("type", "text", (col) => col.notNull()).addColumn("title", "text").addColumn("content", "text").addColumn("menu_name", "text").addColumn("component_id", "text").addColumn("component_props", "text").addColumn("created_at", "text", (col) => col.defaultTo(sql`CURRENT_TIMESTAMP`)).execute();
|
|
213
214
|
await db.schema.createIndex("idx_widgets_area").on("_emdash_widgets").columns(["area_id", "sort_order"]).execute();
|
|
214
215
|
}
|
|
215
|
-
async function down$
|
|
216
|
+
async function down$45(db) {
|
|
216
217
|
await db.schema.dropTable("_emdash_widgets").execute();
|
|
217
218
|
await db.schema.dropTable("_emdash_widget_areas").execute();
|
|
218
219
|
}
|
|
@@ -220,8 +221,8 @@ async function down$42(db) {
|
|
|
220
221
|
//#endregion
|
|
221
222
|
//#region src/database/migrations/008_auth.ts
|
|
222
223
|
var _008_auth_exports = /* @__PURE__ */ __exportAll({
|
|
223
|
-
down: () => down$
|
|
224
|
-
up: () => up$
|
|
224
|
+
down: () => down$44,
|
|
225
|
+
up: () => up$44
|
|
225
226
|
});
|
|
226
227
|
/**
|
|
227
228
|
* Auth migration - passkey-first authentication
|
|
@@ -235,7 +236,7 @@ var _008_auth_exports = /* @__PURE__ */ __exportAll({
|
|
|
235
236
|
* - Creates oauth_accounts table (external provider links)
|
|
236
237
|
* - Creates allowed_domains table (self-signup)
|
|
237
238
|
*/
|
|
238
|
-
async function up$
|
|
239
|
+
async function up$44(db) {
|
|
239
240
|
await db.schema.createTable("users_new").addColumn("id", "text", (col) => col.primaryKey()).addColumn("email", "text", (col) => col.notNull().unique()).addColumn("name", "text").addColumn("avatar_url", "text").addColumn("role", "integer", (col) => col.notNull().defaultTo(10)).addColumn("email_verified", "integer", (col) => col.notNull().defaultTo(0)).addColumn("data", "text").addColumn("created_at", "text", (col) => col.defaultTo(currentTimestamp(db))).addColumn("updated_at", "text", (col) => col.defaultTo(currentTimestamp(db))).execute();
|
|
240
241
|
await sql`
|
|
241
242
|
INSERT INTO users_new (id, email, name, role, data, created_at, updated_at)
|
|
@@ -268,7 +269,7 @@ async function up$41(db) {
|
|
|
268
269
|
await db.schema.createTable("auth_challenges").addColumn("challenge", "text", (col) => col.primaryKey()).addColumn("type", "text", (col) => col.notNull()).addColumn("user_id", "text").addColumn("data", "text").addColumn("expires_at", "text", (col) => col.notNull()).addColumn("created_at", "text", (col) => col.defaultTo(currentTimestamp(db))).execute();
|
|
269
270
|
await db.schema.createIndex("idx_auth_challenges_expires").on("auth_challenges").column("expires_at").execute();
|
|
270
271
|
}
|
|
271
|
-
async function down$
|
|
272
|
+
async function down$44(db) {
|
|
272
273
|
await db.schema.dropTable("auth_challenges").execute();
|
|
273
274
|
await db.schema.dropTable("allowed_domains").execute();
|
|
274
275
|
await db.schema.dropTable("oauth_accounts").execute();
|
|
@@ -301,8 +302,8 @@ async function down$41(db) {
|
|
|
301
302
|
//#endregion
|
|
302
303
|
//#region src/database/migrations/009_user_disabled.ts
|
|
303
304
|
var _009_user_disabled_exports = /* @__PURE__ */ __exportAll({
|
|
304
|
-
down: () => down$
|
|
305
|
-
up: () => up$
|
|
305
|
+
down: () => down$43,
|
|
306
|
+
up: () => up$43
|
|
306
307
|
});
|
|
307
308
|
/**
|
|
308
309
|
* User disabled column - for soft-disabling users
|
|
@@ -311,19 +312,19 @@ var _009_user_disabled_exports = /* @__PURE__ */ __exportAll({
|
|
|
311
312
|
* - Adds disabled column to users table (INTEGER, default 0)
|
|
312
313
|
* - Disabled users cannot log in
|
|
313
314
|
*/
|
|
314
|
-
async function up$
|
|
315
|
+
async function up$43(db) {
|
|
315
316
|
await sql`ALTER TABLE users ADD COLUMN disabled INTEGER NOT NULL DEFAULT 0`.execute(db);
|
|
316
317
|
await db.schema.createIndex("idx_users_disabled").on("users").column("disabled").execute();
|
|
317
318
|
}
|
|
318
|
-
async function down$
|
|
319
|
+
async function down$43(db) {
|
|
319
320
|
await db.schema.dropIndex("idx_users_disabled").execute();
|
|
320
321
|
}
|
|
321
322
|
|
|
322
323
|
//#endregion
|
|
323
324
|
//#region src/database/migrations/011_sections.ts
|
|
324
325
|
var _011_sections_exports = /* @__PURE__ */ __exportAll({
|
|
325
|
-
down: () => down$
|
|
326
|
-
up: () => up$
|
|
326
|
+
down: () => down$42,
|
|
327
|
+
up: () => up$42
|
|
327
328
|
});
|
|
328
329
|
/**
|
|
329
330
|
* Migration: Add sections tables and performance indexes
|
|
@@ -332,13 +333,13 @@ var _011_sections_exports = /* @__PURE__ */ __exportAll({
|
|
|
332
333
|
* They provide a library of pre-built page sections (heroes, CTAs, testimonials, etc.)
|
|
333
334
|
* that content authors can browse and insert with a single click.
|
|
334
335
|
*/
|
|
335
|
-
async function up$
|
|
336
|
+
async function up$42(db) {
|
|
336
337
|
await db.schema.createTable("_emdash_section_categories").addColumn("id", "text", (col) => col.primaryKey()).addColumn("slug", "text", (col) => col.notNull().unique()).addColumn("label", "text", (col) => col.notNull()).addColumn("sort_order", "integer", (col) => col.defaultTo(0)).addColumn("created_at", "text", (col) => col.defaultTo(sql`CURRENT_TIMESTAMP`)).execute();
|
|
337
338
|
await db.schema.createTable("_emdash_sections").addColumn("id", "text", (col) => col.primaryKey()).addColumn("slug", "text", (col) => col.notNull().unique()).addColumn("title", "text", (col) => col.notNull()).addColumn("description", "text").addColumn("category_id", "text", (col) => col.references("_emdash_section_categories.id").onDelete("set null")).addColumn("keywords", "text").addColumn("content", "text", (col) => col.notNull()).addColumn("preview_media_id", "text").addColumn("source", "text", (col) => col.notNull().defaultTo("user")).addColumn("theme_id", "text").addColumn("created_at", "text", (col) => col.defaultTo(sql`CURRENT_TIMESTAMP`)).addColumn("updated_at", "text", (col) => col.defaultTo(sql`CURRENT_TIMESTAMP`)).execute();
|
|
338
339
|
await db.schema.createIndex("idx_sections_category").on("_emdash_sections").columns(["category_id"]).execute();
|
|
339
340
|
await db.schema.createIndex("idx_sections_source").on("_emdash_sections").columns(["source"]).execute();
|
|
340
341
|
}
|
|
341
|
-
async function down$
|
|
342
|
+
async function down$42(db) {
|
|
342
343
|
await db.schema.dropIndex("idx_sections_source").execute();
|
|
343
344
|
await db.schema.dropIndex("idx_sections_category").execute();
|
|
344
345
|
await db.schema.dropTable("_emdash_sections").execute();
|
|
@@ -348,8 +349,8 @@ async function down$39(db) {
|
|
|
348
349
|
//#endregion
|
|
349
350
|
//#region src/database/migrations/012_search.ts
|
|
350
351
|
var _012_search_exports = /* @__PURE__ */ __exportAll({
|
|
351
|
-
down: () => down$
|
|
352
|
-
up: () => up$
|
|
352
|
+
down: () => down$41,
|
|
353
|
+
up: () => up$41
|
|
353
354
|
});
|
|
354
355
|
/**
|
|
355
356
|
* Migration: Search Support
|
|
@@ -357,11 +358,11 @@ var _012_search_exports = /* @__PURE__ */ __exportAll({
|
|
|
357
358
|
* Adds search configuration to collections and searchable flag to fields.
|
|
358
359
|
* FTS5 tables are created dynamically when search is enabled for a collection.
|
|
359
360
|
*/
|
|
360
|
-
async function up$
|
|
361
|
+
async function up$41(db) {
|
|
361
362
|
await db.schema.alterTable("_emdash_collections").addColumn("search_config", "text").execute();
|
|
362
363
|
await db.schema.alterTable("_emdash_fields").addColumn("searchable", "integer", (col) => col.defaultTo(0)).execute();
|
|
363
364
|
}
|
|
364
|
-
async function down$
|
|
365
|
+
async function down$41(db) {
|
|
365
366
|
await db.schema.alterTable("_emdash_fields").dropColumn("searchable").execute();
|
|
366
367
|
await db.schema.alterTable("_emdash_collections").dropColumn("search_config").execute();
|
|
367
368
|
}
|
|
@@ -369,8 +370,8 @@ async function down$38(db) {
|
|
|
369
370
|
//#endregion
|
|
370
371
|
//#region src/database/migrations/013_scheduled_publishing.ts
|
|
371
372
|
var _013_scheduled_publishing_exports = /* @__PURE__ */ __exportAll({
|
|
372
|
-
down: () => down$
|
|
373
|
-
up: () => up$
|
|
373
|
+
down: () => down$40,
|
|
374
|
+
up: () => up$40
|
|
374
375
|
});
|
|
375
376
|
/**
|
|
376
377
|
* Migration: Add scheduled publishing support
|
|
@@ -379,7 +380,7 @@ var _013_scheduled_publishing_exports = /* @__PURE__ */ __exportAll({
|
|
|
379
380
|
* When scheduled_at is set and status is 'scheduled', the content
|
|
380
381
|
* will be auto-published when the scheduled time is reached.
|
|
381
382
|
*/
|
|
382
|
-
async function up$
|
|
383
|
+
async function up$40(db) {
|
|
383
384
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
384
385
|
for (const tableName of tableNames) {
|
|
385
386
|
const table = { name: tableName };
|
|
@@ -394,7 +395,7 @@ async function up$37(db) {
|
|
|
394
395
|
`.execute(db);
|
|
395
396
|
}
|
|
396
397
|
}
|
|
397
|
-
async function down$
|
|
398
|
+
async function down$40(db) {
|
|
398
399
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
399
400
|
for (const tableName of tableNames) {
|
|
400
401
|
const table = { name: tableName };
|
|
@@ -411,10 +412,10 @@ async function down$37(db) {
|
|
|
411
412
|
//#endregion
|
|
412
413
|
//#region src/database/migrations/014_draft_revisions.ts
|
|
413
414
|
var _014_draft_revisions_exports = /* @__PURE__ */ __exportAll({
|
|
414
|
-
down: () => down$
|
|
415
|
-
up: () => up$
|
|
415
|
+
down: () => down$39,
|
|
416
|
+
up: () => up$39
|
|
416
417
|
});
|
|
417
|
-
async function up$
|
|
418
|
+
async function up$39(db) {
|
|
418
419
|
const tables = await db.selectFrom("_emdash_collections").select("slug").execute();
|
|
419
420
|
for (const row of tables) {
|
|
420
421
|
const tableName = `ec_${row.slug}`;
|
|
@@ -436,7 +437,7 @@ async function up$36(db) {
|
|
|
436
437
|
`.execute(db);
|
|
437
438
|
}
|
|
438
439
|
}
|
|
439
|
-
async function down$
|
|
440
|
+
async function down$39(db) {
|
|
440
441
|
const tables = await db.selectFrom("_emdash_collections").select("slug").execute();
|
|
441
442
|
for (const row of tables) {
|
|
442
443
|
const tableName = `ec_${row.slug}`;
|
|
@@ -460,8 +461,8 @@ async function down$36(db) {
|
|
|
460
461
|
//#endregion
|
|
461
462
|
//#region src/database/migrations/015_indexes.ts
|
|
462
463
|
var _015_indexes_exports = /* @__PURE__ */ __exportAll({
|
|
463
|
-
down: () => down$
|
|
464
|
-
up: () => up$
|
|
464
|
+
down: () => down$38,
|
|
465
|
+
up: () => up$38
|
|
465
466
|
});
|
|
466
467
|
/**
|
|
467
468
|
* Add performance indexes for common query patterns.
|
|
@@ -474,7 +475,7 @@ var _015_indexes_exports = /* @__PURE__ */ __exportAll({
|
|
|
474
475
|
* 5. Retroactive author_id + updated_at on existing ec_* content tables
|
|
475
476
|
* (new tables get these from createContentTable() in registry.ts)
|
|
476
477
|
*/
|
|
477
|
-
async function up$
|
|
478
|
+
async function up$38(db) {
|
|
478
479
|
await db.schema.createIndex("idx_media_mime_type").on("media").column("mime_type").execute();
|
|
479
480
|
await db.schema.createIndex("idx_media_filename").on("media").column("filename").execute();
|
|
480
481
|
await db.schema.createIndex("idx_media_created_at").on("media").column("created_at").execute();
|
|
@@ -494,7 +495,7 @@ async function up$35(db) {
|
|
|
494
495
|
`.execute(db);
|
|
495
496
|
}
|
|
496
497
|
}
|
|
497
|
-
async function down$
|
|
498
|
+
async function down$38(db) {
|
|
498
499
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
499
500
|
for (const tableName of tableNames) {
|
|
500
501
|
const table = { name: tableName };
|
|
@@ -512,8 +513,8 @@ async function down$35(db) {
|
|
|
512
513
|
//#endregion
|
|
513
514
|
//#region src/database/migrations/016_api_tokens.ts
|
|
514
515
|
var _016_api_tokens_exports = /* @__PURE__ */ __exportAll({
|
|
515
|
-
down: () => down$
|
|
516
|
-
up: () => up$
|
|
516
|
+
down: () => down$37,
|
|
517
|
+
up: () => up$37
|
|
517
518
|
});
|
|
518
519
|
/**
|
|
519
520
|
* API token tables for programmatic access.
|
|
@@ -531,7 +532,7 @@ var _016_api_tokens_exports = /* @__PURE__ */ __exportAll({
|
|
|
531
532
|
* top. Without these guards, the retry crashed with `table ... already
|
|
532
533
|
* exists` and blocked every subsequent boot of the Worker.
|
|
533
534
|
*/
|
|
534
|
-
async function up$
|
|
535
|
+
async function up$37(db) {
|
|
535
536
|
await db.schema.createTable("_emdash_api_tokens").ifNotExists().addColumn("id", "text", (col) => col.primaryKey()).addColumn("name", "text", (col) => col.notNull()).addColumn("token_hash", "text", (col) => col.notNull().unique()).addColumn("prefix", "text", (col) => col.notNull()).addColumn("user_id", "text", (col) => col.notNull()).addColumn("scopes", "text", (col) => col.notNull()).addColumn("expires_at", "text").addColumn("last_used_at", "text").addColumn("created_at", "text", (col) => col.defaultTo(currentTimestamp(db))).addForeignKeyConstraint("api_tokens_user_fk", ["user_id"], "users", ["id"], (cb) => cb.onDelete("cascade")).execute();
|
|
536
537
|
await db.schema.createIndex("idx_api_tokens_token_hash").ifNotExists().on("_emdash_api_tokens").column("token_hash").execute();
|
|
537
538
|
await db.schema.createIndex("idx_api_tokens_user_id").ifNotExists().on("_emdash_api_tokens").column("user_id").execute();
|
|
@@ -540,7 +541,7 @@ async function up$34(db) {
|
|
|
540
541
|
await db.schema.createIndex("idx_oauth_tokens_expires").ifNotExists().on("_emdash_oauth_tokens").column("expires_at").execute();
|
|
541
542
|
await db.schema.createTable("_emdash_device_codes").ifNotExists().addColumn("device_code", "text", (col) => col.primaryKey()).addColumn("user_code", "text", (col) => col.notNull().unique()).addColumn("scopes", "text", (col) => col.notNull()).addColumn("user_id", "text").addColumn("status", "text", (col) => col.notNull().defaultTo("pending")).addColumn("expires_at", "text", (col) => col.notNull()).addColumn("interval", "integer", (col) => col.notNull().defaultTo(5)).addColumn("created_at", "text", (col) => col.defaultTo(currentTimestamp(db))).execute();
|
|
542
543
|
}
|
|
543
|
-
async function down$
|
|
544
|
+
async function down$37(db) {
|
|
544
545
|
await db.schema.dropTable("_emdash_device_codes").ifExists().execute();
|
|
545
546
|
await db.schema.dropTable("_emdash_oauth_tokens").ifExists().execute();
|
|
546
547
|
await db.schema.dropTable("_emdash_api_tokens").ifExists().execute();
|
|
@@ -549,8 +550,8 @@ async function down$34(db) {
|
|
|
549
550
|
//#endregion
|
|
550
551
|
//#region src/database/migrations/017_authorization_codes.ts
|
|
551
552
|
var _017_authorization_codes_exports = /* @__PURE__ */ __exportAll({
|
|
552
|
-
down: () => down$
|
|
553
|
-
up: () => up$
|
|
553
|
+
down: () => down$36,
|
|
554
|
+
up: () => up$36
|
|
554
555
|
});
|
|
555
556
|
/**
|
|
556
557
|
* Authorization codes for OAuth 2.1 Authorization Code + PKCE flow.
|
|
@@ -560,20 +561,20 @@ var _017_authorization_codes_exports = /* @__PURE__ */ __exportAll({
|
|
|
560
561
|
*
|
|
561
562
|
* Also adds client_id tracking to oauth_tokens for per-client revocation.
|
|
562
563
|
*/
|
|
563
|
-
async function up$
|
|
564
|
+
async function up$36(db) {
|
|
564
565
|
await db.schema.createTable("_emdash_authorization_codes").addColumn("code_hash", "text", (col) => col.primaryKey()).addColumn("client_id", "text", (col) => col.notNull()).addColumn("redirect_uri", "text", (col) => col.notNull()).addColumn("user_id", "text", (col) => col.notNull()).addColumn("scopes", "text", (col) => col.notNull()).addColumn("code_challenge", "text", (col) => col.notNull()).addColumn("code_challenge_method", "text", (col) => col.notNull().defaultTo("S256")).addColumn("resource", "text").addColumn("expires_at", "text", (col) => col.notNull()).addColumn("created_at", "text", (col) => col.defaultTo(currentTimestamp(db))).addForeignKeyConstraint("auth_codes_user_fk", ["user_id"], "users", ["id"], (cb) => cb.onDelete("cascade")).execute();
|
|
565
566
|
await db.schema.createIndex("idx_auth_codes_expires").on("_emdash_authorization_codes").column("expires_at").execute();
|
|
566
567
|
await sql`ALTER TABLE _emdash_oauth_tokens ADD COLUMN client_id TEXT`.execute(db);
|
|
567
568
|
}
|
|
568
|
-
async function down$
|
|
569
|
+
async function down$36(db) {
|
|
569
570
|
await db.schema.dropTable("_emdash_authorization_codes").execute();
|
|
570
571
|
}
|
|
571
572
|
|
|
572
573
|
//#endregion
|
|
573
574
|
//#region src/database/migrations/018_seo.ts
|
|
574
575
|
var _018_seo_exports = /* @__PURE__ */ __exportAll({
|
|
575
|
-
down: () => down$
|
|
576
|
-
up: () => up$
|
|
576
|
+
down: () => down$35,
|
|
577
|
+
up: () => up$35
|
|
577
578
|
});
|
|
578
579
|
/**
|
|
579
580
|
* Migration: SEO support
|
|
@@ -586,7 +587,7 @@ var _018_seo_exports = /* @__PURE__ */ __exportAll({
|
|
|
586
587
|
* need it. The `has_seo` flag controls whether the admin shows SEO fields
|
|
587
588
|
* and whether the collection's content appears in sitemaps.
|
|
588
589
|
*/
|
|
589
|
-
async function up$
|
|
590
|
+
async function up$35(db) {
|
|
590
591
|
await db.schema.createTable("_emdash_seo").addColumn("collection", "text", (col) => col.notNull()).addColumn("content_id", "text", (col) => col.notNull()).addColumn("seo_title", "text").addColumn("seo_description", "text").addColumn("seo_image", "text").addColumn("seo_canonical", "text").addColumn("seo_no_index", "integer", (col) => col.notNull().defaultTo(0)).addColumn("created_at", "text", (col) => col.notNull().defaultTo(currentTimestamp(db))).addColumn("updated_at", "text", (col) => col.notNull().defaultTo(currentTimestamp(db))).addPrimaryKeyConstraint("_emdash_seo_pk", ["collection", "content_id"]).execute();
|
|
591
592
|
await sql`
|
|
592
593
|
CREATE INDEX idx_emdash_seo_collection
|
|
@@ -597,7 +598,7 @@ async function up$32(db) {
|
|
|
597
598
|
ADD COLUMN has_seo INTEGER NOT NULL DEFAULT 0
|
|
598
599
|
`.execute(db);
|
|
599
600
|
}
|
|
600
|
-
async function down$
|
|
601
|
+
async function down$35(db) {
|
|
601
602
|
await sql`DROP TABLE IF EXISTS _emdash_seo`.execute(db);
|
|
602
603
|
await sql`
|
|
603
604
|
ALTER TABLE _emdash_collections
|
|
@@ -608,8 +609,8 @@ async function down$32(db) {
|
|
|
608
609
|
//#endregion
|
|
609
610
|
//#region src/database/migrations/019_i18n.ts
|
|
610
611
|
var _019_i18n_exports = /* @__PURE__ */ __exportAll({
|
|
611
|
-
down: () => down$
|
|
612
|
-
up: () => up$
|
|
612
|
+
down: () => down$34,
|
|
613
|
+
up: () => up$34
|
|
613
614
|
});
|
|
614
615
|
/**
|
|
615
616
|
* Quote an identifier for use in raw SQL. Escapes embedded double-quotes
|
|
@@ -722,7 +723,7 @@ async function upPostgres$1(db) {
|
|
|
722
723
|
ADD COLUMN translatable INTEGER NOT NULL DEFAULT 1
|
|
723
724
|
`.execute(db);
|
|
724
725
|
}
|
|
725
|
-
async function up$
|
|
726
|
+
async function up$34(db) {
|
|
726
727
|
if (!isSqlite(db)) return upPostgres$1(db);
|
|
727
728
|
const orphanedTmps = await listTablesLike(db, "ec_%_i18n_tmp");
|
|
728
729
|
for (const tmpName of orphanedTmps) {
|
|
@@ -839,7 +840,7 @@ async function downPostgres(db) {
|
|
|
839
840
|
await sql`ALTER TABLE ${sql.ref(t)} DROP COLUMN translation_group`.execute(db);
|
|
840
841
|
}
|
|
841
842
|
}
|
|
842
|
-
async function down$
|
|
843
|
+
async function down$34(db) {
|
|
843
844
|
if (!isSqlite(db)) return downPostgres(db);
|
|
844
845
|
await sql`
|
|
845
846
|
ALTER TABLE _emdash_fields
|
|
@@ -946,8 +947,8 @@ async function down$31(db) {
|
|
|
946
947
|
//#endregion
|
|
947
948
|
//#region src/database/migrations/020_collection_url_pattern.ts
|
|
948
949
|
var _020_collection_url_pattern_exports = /* @__PURE__ */ __exportAll({
|
|
949
|
-
down: () => down$
|
|
950
|
-
up: () => up$
|
|
950
|
+
down: () => down$33,
|
|
951
|
+
up: () => up$33
|
|
951
952
|
});
|
|
952
953
|
/**
|
|
953
954
|
* Migration: URL pattern for collections
|
|
@@ -956,13 +957,13 @@ var _020_collection_url_pattern_exports = /* @__PURE__ */ __exportAll({
|
|
|
956
957
|
* can declare its own URL structure (e.g. "/{slug}" for pages, "/blog/{slug}"
|
|
957
958
|
* for posts). Used for menu URL resolution, sitemaps, and path-based lookups.
|
|
958
959
|
*/
|
|
959
|
-
async function up$
|
|
960
|
+
async function up$33(db) {
|
|
960
961
|
await sql`
|
|
961
962
|
ALTER TABLE _emdash_collections
|
|
962
963
|
ADD COLUMN url_pattern TEXT
|
|
963
964
|
`.execute(db);
|
|
964
965
|
}
|
|
965
|
-
async function down$
|
|
966
|
+
async function down$33(db) {
|
|
966
967
|
await sql`
|
|
967
968
|
ALTER TABLE _emdash_collections
|
|
968
969
|
DROP COLUMN url_pattern
|
|
@@ -972,8 +973,8 @@ async function down$30(db) {
|
|
|
972
973
|
//#endregion
|
|
973
974
|
//#region src/database/migrations/021_remove_section_categories.ts
|
|
974
975
|
var _021_remove_section_categories_exports = /* @__PURE__ */ __exportAll({
|
|
975
|
-
down: () => down$
|
|
976
|
-
up: () => up$
|
|
976
|
+
down: () => down$32,
|
|
977
|
+
up: () => up$32
|
|
977
978
|
});
|
|
978
979
|
/**
|
|
979
980
|
* Migration: Remove section categories
|
|
@@ -982,12 +983,12 @@ var _021_remove_section_categories_exports = /* @__PURE__ */ __exportAll({
|
|
|
982
983
|
* Rather than building the missing UI for a feature with very little need at this stage,
|
|
983
984
|
* we're removing the feature entirely.
|
|
984
985
|
*/
|
|
985
|
-
async function up$
|
|
986
|
+
async function up$32(db) {
|
|
986
987
|
await db.schema.dropIndex("idx_sections_category").ifExists().execute();
|
|
987
988
|
await db.schema.alterTable("_emdash_sections").dropColumn("category_id").execute();
|
|
988
989
|
await db.schema.dropTable("_emdash_section_categories").execute();
|
|
989
990
|
}
|
|
990
|
-
async function down$
|
|
991
|
+
async function down$32(db) {
|
|
991
992
|
await db.schema.createTable("_emdash_section_categories").addColumn("id", "text", (col) => col.primaryKey()).addColumn("slug", "text", (col) => col.notNull().unique()).addColumn("label", "text", (col) => col.notNull()).addColumn("sort_order", "integer", (col) => col.defaultTo(0)).addColumn("created_at", "text", (col) => col.defaultTo(sql`CURRENT_TIMESTAMP`)).execute();
|
|
992
993
|
await db.schema.alterTable("_emdash_sections").addColumn("category_id", "text", (col) => col.references("_emdash_section_categories.id").onDelete("set null")).execute();
|
|
993
994
|
await db.schema.createIndex("idx_sections_category").on("_emdash_sections").columns(["category_id"]).execute();
|
|
@@ -996,8 +997,8 @@ async function down$29(db) {
|
|
|
996
997
|
//#endregion
|
|
997
998
|
//#region src/database/migrations/022_marketplace_plugin_state.ts
|
|
998
999
|
var _022_marketplace_plugin_state_exports = /* @__PURE__ */ __exportAll({
|
|
999
|
-
down: () => down$
|
|
1000
|
-
up: () => up$
|
|
1000
|
+
down: () => down$31,
|
|
1001
|
+
up: () => up$31
|
|
1001
1002
|
});
|
|
1002
1003
|
/**
|
|
1003
1004
|
* Migration: Add marketplace fields to _plugin_state
|
|
@@ -1006,7 +1007,7 @@ var _022_marketplace_plugin_state_exports = /* @__PURE__ */ __exportAll({
|
|
|
1006
1007
|
* whether a plugin was installed from config or marketplace,
|
|
1007
1008
|
* and which marketplace version is installed.
|
|
1008
1009
|
*/
|
|
1009
|
-
async function up$
|
|
1010
|
+
async function up$31(db) {
|
|
1010
1011
|
await sql`
|
|
1011
1012
|
ALTER TABLE _plugin_state
|
|
1012
1013
|
ADD COLUMN source TEXT NOT NULL DEFAULT 'config'
|
|
@@ -1021,7 +1022,7 @@ async function up$28(db) {
|
|
|
1021
1022
|
WHERE source = 'marketplace'
|
|
1022
1023
|
`.execute(db);
|
|
1023
1024
|
}
|
|
1024
|
-
async function down$
|
|
1025
|
+
async function down$31(db) {
|
|
1025
1026
|
await sql`
|
|
1026
1027
|
DROP INDEX IF EXISTS idx_plugin_state_source
|
|
1027
1028
|
`.execute(db);
|
|
@@ -1038,8 +1039,8 @@ async function down$28(db) {
|
|
|
1038
1039
|
//#endregion
|
|
1039
1040
|
//#region src/database/migrations/023_plugin_metadata.ts
|
|
1040
1041
|
var _023_plugin_metadata_exports = /* @__PURE__ */ __exportAll({
|
|
1041
|
-
down: () => down$
|
|
1042
|
-
up: () => up$
|
|
1042
|
+
down: () => down$30,
|
|
1043
|
+
up: () => up$30
|
|
1043
1044
|
});
|
|
1044
1045
|
/**
|
|
1045
1046
|
* Migration: Add display metadata to _plugin_state
|
|
@@ -1048,7 +1049,7 @@ var _023_plugin_metadata_exports = /* @__PURE__ */ __exportAll({
|
|
|
1048
1049
|
* so the admin UI can show meaningful info without re-fetching
|
|
1049
1050
|
* from the marketplace on every page load.
|
|
1050
1051
|
*/
|
|
1051
|
-
async function up$
|
|
1052
|
+
async function up$30(db) {
|
|
1052
1053
|
await sql`
|
|
1053
1054
|
ALTER TABLE _plugin_state
|
|
1054
1055
|
ADD COLUMN display_name TEXT
|
|
@@ -1058,7 +1059,7 @@ async function up$27(db) {
|
|
|
1058
1059
|
ADD COLUMN description TEXT
|
|
1059
1060
|
`.execute(db);
|
|
1060
1061
|
}
|
|
1061
|
-
async function down$
|
|
1062
|
+
async function down$30(db) {
|
|
1062
1063
|
await sql`
|
|
1063
1064
|
ALTER TABLE _plugin_state
|
|
1064
1065
|
DROP COLUMN description
|
|
@@ -1072,8 +1073,8 @@ async function down$27(db) {
|
|
|
1072
1073
|
//#endregion
|
|
1073
1074
|
//#region src/database/migrations/024_media_placeholders.ts
|
|
1074
1075
|
var _024_media_placeholders_exports = /* @__PURE__ */ __exportAll({
|
|
1075
|
-
down: () => down$
|
|
1076
|
-
up: () => up$
|
|
1076
|
+
down: () => down$29,
|
|
1077
|
+
up: () => up$29
|
|
1077
1078
|
});
|
|
1078
1079
|
/**
|
|
1079
1080
|
* Migration: Add placeholder columns to media table
|
|
@@ -1081,7 +1082,7 @@ var _024_media_placeholders_exports = /* @__PURE__ */ __exportAll({
|
|
|
1081
1082
|
* Stores blurhash and dominant_color for LQIP (Low Quality Image Placeholder)
|
|
1082
1083
|
* support. Generated at upload time from image pixel data.
|
|
1083
1084
|
*/
|
|
1084
|
-
async function up$
|
|
1085
|
+
async function up$29(db) {
|
|
1085
1086
|
await sql`
|
|
1086
1087
|
ALTER TABLE media
|
|
1087
1088
|
ADD COLUMN blurhash TEXT
|
|
@@ -1091,7 +1092,7 @@ async function up$26(db) {
|
|
|
1091
1092
|
ADD COLUMN dominant_color TEXT
|
|
1092
1093
|
`.execute(db);
|
|
1093
1094
|
}
|
|
1094
|
-
async function down$
|
|
1095
|
+
async function down$29(db) {
|
|
1095
1096
|
await sql`
|
|
1096
1097
|
ALTER TABLE media
|
|
1097
1098
|
DROP COLUMN dominant_color
|
|
@@ -1105,8 +1106,8 @@ async function down$26(db) {
|
|
|
1105
1106
|
//#endregion
|
|
1106
1107
|
//#region src/database/migrations/025_oauth_clients.ts
|
|
1107
1108
|
var _025_oauth_clients_exports = /* @__PURE__ */ __exportAll({
|
|
1108
|
-
down: () => down$
|
|
1109
|
-
up: () => up$
|
|
1109
|
+
down: () => down$28,
|
|
1110
|
+
up: () => up$28
|
|
1110
1111
|
});
|
|
1111
1112
|
/**
|
|
1112
1113
|
* Migration: Create OAuth clients table
|
|
@@ -1117,18 +1118,18 @@ var _025_oauth_clients_exports = /* @__PURE__ */ __exportAll({
|
|
|
1117
1118
|
* Each client has a set of pre-registered redirect URIs (JSON array).
|
|
1118
1119
|
* The authorize endpoint rejects any redirect_uri not in the client's list.
|
|
1119
1120
|
*/
|
|
1120
|
-
async function up$
|
|
1121
|
+
async function up$28(db) {
|
|
1121
1122
|
await db.schema.createTable("_emdash_oauth_clients").addColumn("id", "text", (col) => col.primaryKey()).addColumn("name", "text", (col) => col.notNull()).addColumn("redirect_uris", "text", (col) => col.notNull()).addColumn("scopes", "text").addColumn("created_at", "text", (col) => col.defaultTo(currentTimestamp(db))).addColumn("updated_at", "text", (col) => col.defaultTo(currentTimestamp(db))).execute();
|
|
1122
1123
|
}
|
|
1123
|
-
async function down$
|
|
1124
|
+
async function down$28(db) {
|
|
1124
1125
|
await db.schema.dropTable("_emdash_oauth_clients").execute();
|
|
1125
1126
|
}
|
|
1126
1127
|
|
|
1127
1128
|
//#endregion
|
|
1128
1129
|
//#region src/database/migrations/026_cron_tasks.ts
|
|
1129
1130
|
var _026_cron_tasks_exports = /* @__PURE__ */ __exportAll({
|
|
1130
|
-
down: () => down$
|
|
1131
|
-
up: () => up$
|
|
1131
|
+
down: () => down$27,
|
|
1132
|
+
up: () => up$27
|
|
1132
1133
|
});
|
|
1133
1134
|
/**
|
|
1134
1135
|
* Migration: Create cron tasks table for plugin scheduled tasks.
|
|
@@ -1139,7 +1140,7 @@ var _026_cron_tasks_exports = /* @__PURE__ */ __exportAll({
|
|
|
1139
1140
|
* The `next_run_at` + `status` + `enabled` index drives the "find overdue
|
|
1140
1141
|
* tasks" query used by CronExecutor.tick().
|
|
1141
1142
|
*/
|
|
1142
|
-
async function up$
|
|
1143
|
+
async function up$27(db) {
|
|
1143
1144
|
await db.schema.createTable("_emdash_cron_tasks").addColumn("id", "text", (col) => col.primaryKey()).addColumn("plugin_id", "text", (col) => col.notNull()).addColumn("task_name", "text", (col) => col.notNull()).addColumn("schedule", "text", (col) => col.notNull()).addColumn("is_oneshot", "integer", (col) => col.notNull().defaultTo(0)).addColumn("data", "text").addColumn("next_run_at", "text", (col) => col.notNull()).addColumn("last_run_at", "text").addColumn("status", "text", (col) => col.notNull().defaultTo("idle")).addColumn("locked_at", "text").addColumn("enabled", "integer", (col) => col.notNull().defaultTo(1)).addColumn("created_at", "text", (col) => col.defaultTo(currentTimestamp(db))).addUniqueConstraint("uq_cron_tasks_plugin_task", ["plugin_id", "task_name"]).execute();
|
|
1144
1145
|
await db.schema.createIndex("idx_cron_tasks_due").on("_emdash_cron_tasks").columns([
|
|
1145
1146
|
"enabled",
|
|
@@ -1148,17 +1149,17 @@ async function up$24(db) {
|
|
|
1148
1149
|
]).execute();
|
|
1149
1150
|
await db.schema.createIndex("idx_cron_tasks_plugin").on("_emdash_cron_tasks").column("plugin_id").execute();
|
|
1150
1151
|
}
|
|
1151
|
-
async function down$
|
|
1152
|
+
async function down$27(db) {
|
|
1152
1153
|
await db.schema.dropTable("_emdash_cron_tasks").execute();
|
|
1153
1154
|
}
|
|
1154
1155
|
|
|
1155
1156
|
//#endregion
|
|
1156
1157
|
//#region src/database/migrations/027_comments.ts
|
|
1157
1158
|
var _027_comments_exports = /* @__PURE__ */ __exportAll({
|
|
1158
|
-
down: () => down$
|
|
1159
|
-
up: () => up$
|
|
1159
|
+
down: () => down$26,
|
|
1160
|
+
up: () => up$26
|
|
1160
1161
|
});
|
|
1161
|
-
async function up$
|
|
1162
|
+
async function up$26(db) {
|
|
1162
1163
|
await db.schema.createTable("_emdash_comments").addColumn("id", "text", (col) => col.primaryKey()).addColumn("collection", "text", (col) => col.notNull()).addColumn("content_id", "text", (col) => col.notNull()).addColumn("parent_id", "text", (col) => col.references("_emdash_comments.id").onDelete("cascade")).addColumn("author_name", "text", (col) => col.notNull()).addColumn("author_email", "text", (col) => col.notNull()).addColumn("author_url", "text").addColumn("author_user_id", "text", (col) => col.references("users.id").onDelete("set null")).addColumn("body", "text", (col) => col.notNull()).addColumn("status", "text", (col) => col.notNull().defaultTo("pending")).addColumn("ip_hash", "text").addColumn("user_agent", "text").addColumn("moderation_metadata", "text").addColumn("created_at", "text", (col) => col.defaultTo(currentTimestamp(db))).addColumn("updated_at", "text", (col) => col.defaultTo(currentTimestamp(db))).execute();
|
|
1163
1164
|
await db.schema.createIndex("idx_comments_content").on("_emdash_comments").columns([
|
|
1164
1165
|
"collection",
|
|
@@ -1174,30 +1175,30 @@ async function up$23(db) {
|
|
|
1174
1175
|
await db.schema.alterTable("_emdash_collections").addColumn("comments_closed_after_days", "integer", (col) => col.defaultTo(90)).execute();
|
|
1175
1176
|
await db.schema.alterTable("_emdash_collections").addColumn("comments_auto_approve_users", "integer", (col) => col.defaultTo(1)).execute();
|
|
1176
1177
|
}
|
|
1177
|
-
async function down$
|
|
1178
|
+
async function down$26(db) {
|
|
1178
1179
|
await db.schema.dropTable("_emdash_comments").execute();
|
|
1179
1180
|
}
|
|
1180
1181
|
|
|
1181
1182
|
//#endregion
|
|
1182
1183
|
//#region src/database/migrations/028_drop_author_url.ts
|
|
1183
1184
|
var _028_drop_author_url_exports = /* @__PURE__ */ __exportAll({
|
|
1184
|
-
down: () => down$
|
|
1185
|
-
up: () => up$
|
|
1185
|
+
down: () => down$25,
|
|
1186
|
+
up: () => up$25
|
|
1186
1187
|
});
|
|
1187
|
-
async function up$
|
|
1188
|
+
async function up$25(db) {
|
|
1188
1189
|
await sql`ALTER TABLE _emdash_comments DROP COLUMN author_url`.execute(db);
|
|
1189
1190
|
}
|
|
1190
|
-
async function down$
|
|
1191
|
+
async function down$25(db) {
|
|
1191
1192
|
await db.schema.alterTable("_emdash_comments").addColumn("author_url", "text").execute();
|
|
1192
1193
|
}
|
|
1193
1194
|
|
|
1194
1195
|
//#endregion
|
|
1195
1196
|
//#region src/database/migrations/029_redirects.ts
|
|
1196
1197
|
var _029_redirects_exports = /* @__PURE__ */ __exportAll({
|
|
1197
|
-
down: () => down$
|
|
1198
|
-
up: () => up$
|
|
1198
|
+
down: () => down$24,
|
|
1199
|
+
up: () => up$24
|
|
1199
1200
|
});
|
|
1200
|
-
async function up$
|
|
1201
|
+
async function up$24(db) {
|
|
1201
1202
|
await db.schema.createTable("_emdash_redirects").addColumn("id", "text", (col) => col.primaryKey()).addColumn("source", "text", (col) => col.notNull()).addColumn("destination", "text", (col) => col.notNull()).addColumn("type", "integer", (col) => col.notNull().defaultTo(301)).addColumn("is_pattern", "integer", (col) => col.notNull().defaultTo(0)).addColumn("enabled", "integer", (col) => col.notNull().defaultTo(1)).addColumn("hits", "integer", (col) => col.notNull().defaultTo(0)).addColumn("last_hit_at", "text").addColumn("group_name", "text").addColumn("auto", "integer", (col) => col.notNull().defaultTo(0)).addColumn("created_at", "text", (col) => col.defaultTo(currentTimestamp(db))).addColumn("updated_at", "text", (col) => col.defaultTo(currentTimestamp(db))).execute();
|
|
1202
1203
|
await db.schema.createIndex("idx_redirects_source").on("_emdash_redirects").column("source").execute();
|
|
1203
1204
|
await db.schema.createIndex("idx_redirects_enabled").on("_emdash_redirects").column("enabled").execute();
|
|
@@ -1206,7 +1207,7 @@ async function up$21(db) {
|
|
|
1206
1207
|
await db.schema.createIndex("idx_404_log_path").on("_emdash_404_log").column("path").execute();
|
|
1207
1208
|
await db.schema.createIndex("idx_404_log_created").on("_emdash_404_log").column("created_at").execute();
|
|
1208
1209
|
}
|
|
1209
|
-
async function down$
|
|
1210
|
+
async function down$24(db) {
|
|
1210
1211
|
await db.schema.dropTable("_emdash_404_log").execute();
|
|
1211
1212
|
await db.schema.dropTable("_emdash_redirects").execute();
|
|
1212
1213
|
}
|
|
@@ -1214,8 +1215,8 @@ async function down$21(db) {
|
|
|
1214
1215
|
//#endregion
|
|
1215
1216
|
//#region src/database/migrations/030_widen_scheduled_index.ts
|
|
1216
1217
|
var _030_widen_scheduled_index_exports = /* @__PURE__ */ __exportAll({
|
|
1217
|
-
down: () => down$
|
|
1218
|
-
up: () => up$
|
|
1218
|
+
down: () => down$23,
|
|
1219
|
+
up: () => up$23
|
|
1219
1220
|
});
|
|
1220
1221
|
/**
|
|
1221
1222
|
* Migration: Widen scheduled publishing index
|
|
@@ -1224,7 +1225,7 @@ var _030_widen_scheduled_index_exports = /* @__PURE__ */ __exportAll({
|
|
|
1224
1225
|
* Published posts can now have scheduled draft changes, so widen the
|
|
1225
1226
|
* index to cover all rows where scheduled_at IS NOT NULL.
|
|
1226
1227
|
*/
|
|
1227
|
-
async function up$
|
|
1228
|
+
async function up$23(db) {
|
|
1228
1229
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
1229
1230
|
for (const tableName of tableNames) {
|
|
1230
1231
|
const table = { name: tableName };
|
|
@@ -1238,7 +1239,7 @@ async function up$20(db) {
|
|
|
1238
1239
|
`.execute(db);
|
|
1239
1240
|
}
|
|
1240
1241
|
}
|
|
1241
|
-
async function down$
|
|
1242
|
+
async function down$23(db) {
|
|
1242
1243
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
1243
1244
|
for (const tableName of tableNames) {
|
|
1244
1245
|
const table = { name: tableName };
|
|
@@ -1256,10 +1257,10 @@ async function down$20(db) {
|
|
|
1256
1257
|
//#endregion
|
|
1257
1258
|
//#region src/database/migrations/031_bylines.ts
|
|
1258
1259
|
var _031_bylines_exports = /* @__PURE__ */ __exportAll({
|
|
1259
|
-
down: () => down$
|
|
1260
|
-
up: () => up$
|
|
1260
|
+
down: () => down$22,
|
|
1261
|
+
up: () => up$22
|
|
1261
1262
|
});
|
|
1262
|
-
async function up$
|
|
1263
|
+
async function up$22(db) {
|
|
1263
1264
|
await db.schema.createTable("_emdash_bylines").addColumn("id", "text", (col) => col.primaryKey()).addColumn("slug", "text", (col) => col.notNull().unique()).addColumn("display_name", "text", (col) => col.notNull()).addColumn("bio", "text").addColumn("avatar_media_id", "text", (col) => col.references("media.id").onDelete("set null")).addColumn("website_url", "text").addColumn("user_id", "text", (col) => col.references("users.id").onDelete("set null")).addColumn("is_guest", "integer", (col) => col.notNull().defaultTo(0)).addColumn("created_at", "text", (col) => col.defaultTo(currentTimestamp(db))).addColumn("updated_at", "text", (col) => col.defaultTo(currentTimestamp(db))).execute();
|
|
1264
1265
|
await sql`
|
|
1265
1266
|
CREATE UNIQUE INDEX ${sql.ref("idx_bylines_user_id_unique")}
|
|
@@ -1291,7 +1292,7 @@ async function up$19(db) {
|
|
|
1291
1292
|
`.execute(db);
|
|
1292
1293
|
}
|
|
1293
1294
|
}
|
|
1294
|
-
async function down$
|
|
1295
|
+
async function down$22(db) {
|
|
1295
1296
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
1296
1297
|
for (const tableName of tableNames) {
|
|
1297
1298
|
await sql`
|
|
@@ -1309,8 +1310,8 @@ async function down$19(db) {
|
|
|
1309
1310
|
//#endregion
|
|
1310
1311
|
//#region src/database/migrations/032_rate_limits.ts
|
|
1311
1312
|
var _032_rate_limits_exports = /* @__PURE__ */ __exportAll({
|
|
1312
|
-
down: () => down$
|
|
1313
|
-
up: () => up$
|
|
1313
|
+
down: () => down$21,
|
|
1314
|
+
up: () => up$21
|
|
1314
1315
|
});
|
|
1315
1316
|
/**
|
|
1316
1317
|
* Migration: Rate limits table + device code polling tracking.
|
|
@@ -1321,12 +1322,12 @@ var _032_rate_limits_exports = /* @__PURE__ */ __exportAll({
|
|
|
1321
1322
|
* 2. Add last_polled_at column to _emdash_device_codes for
|
|
1322
1323
|
* RFC 8628 slow_down enforcement.
|
|
1323
1324
|
*/
|
|
1324
|
-
async function up$
|
|
1325
|
+
async function up$21(db) {
|
|
1325
1326
|
await db.schema.createTable("_emdash_rate_limits").addColumn("key", "text", (col) => col.notNull()).addColumn("window", "text", (col) => col.notNull()).addColumn("count", "integer", (col) => col.notNull().defaultTo(1)).addPrimaryKeyConstraint("pk_rate_limits", ["key", "window"]).execute();
|
|
1326
1327
|
await db.schema.createIndex("idx_rate_limits_window").on("_emdash_rate_limits").column("window").execute();
|
|
1327
1328
|
await db.schema.alterTable("_emdash_device_codes").addColumn("last_polled_at", "text").execute();
|
|
1328
1329
|
}
|
|
1329
|
-
async function down$
|
|
1330
|
+
async function down$21(db) {
|
|
1330
1331
|
await db.schema.dropTable("_emdash_rate_limits").execute();
|
|
1331
1332
|
await db.schema.alterTable("_emdash_device_codes").dropColumn("last_polled_at").execute();
|
|
1332
1333
|
}
|
|
@@ -1334,8 +1335,8 @@ async function down$18(db) {
|
|
|
1334
1335
|
//#endregion
|
|
1335
1336
|
//#region src/database/migrations/033_optimize_content_indexes.ts
|
|
1336
1337
|
var _033_optimize_content_indexes_exports = /* @__PURE__ */ __exportAll({
|
|
1337
|
-
down: () => down$
|
|
1338
|
-
up: () => up$
|
|
1338
|
+
down: () => down$20,
|
|
1339
|
+
up: () => up$20
|
|
1339
1340
|
});
|
|
1340
1341
|
/**
|
|
1341
1342
|
* Migration: Optimize content table indexes for D1 performance
|
|
@@ -1348,7 +1349,7 @@ var _033_optimize_content_indexes_exports = /* @__PURE__ */ __exportAll({
|
|
|
1348
1349
|
*
|
|
1349
1350
|
* Impact: Reduces D1 row reads by 90%+ for admin panel operations.
|
|
1350
1351
|
*/
|
|
1351
|
-
async function up$
|
|
1352
|
+
async function up$20(db) {
|
|
1352
1353
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
1353
1354
|
for (const tableName of tableNames) {
|
|
1354
1355
|
const table = { name: tableName };
|
|
@@ -1390,7 +1391,7 @@ async function up$17(db) {
|
|
|
1390
1391
|
WHERE status = 'trash'
|
|
1391
1392
|
`.execute(db);
|
|
1392
1393
|
}
|
|
1393
|
-
async function down$
|
|
1394
|
+
async function down$20(db) {
|
|
1394
1395
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
1395
1396
|
for (const tableName of tableNames) {
|
|
1396
1397
|
const table = { name: tableName };
|
|
@@ -1423,10 +1424,10 @@ async function down$17(db) {
|
|
|
1423
1424
|
//#endregion
|
|
1424
1425
|
//#region src/database/migrations/034_published_at_index.ts
|
|
1425
1426
|
var _034_published_at_index_exports = /* @__PURE__ */ __exportAll({
|
|
1426
|
-
down: () => down$
|
|
1427
|
-
up: () => up$
|
|
1427
|
+
down: () => down$19,
|
|
1428
|
+
up: () => up$19
|
|
1428
1429
|
});
|
|
1429
|
-
async function up$
|
|
1430
|
+
async function up$19(db) {
|
|
1430
1431
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
1431
1432
|
for (const tableName of tableNames) {
|
|
1432
1433
|
const table = { name: tableName };
|
|
@@ -1436,7 +1437,7 @@ async function up$16(db) {
|
|
|
1436
1437
|
`.execute(db);
|
|
1437
1438
|
}
|
|
1438
1439
|
}
|
|
1439
|
-
async function down$
|
|
1440
|
+
async function down$19(db) {
|
|
1440
1441
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
1441
1442
|
for (const tableName of tableNames) {
|
|
1442
1443
|
const table = { name: tableName };
|
|
@@ -1447,8 +1448,8 @@ async function down$16(db) {
|
|
|
1447
1448
|
//#endregion
|
|
1448
1449
|
//#region src/database/migrations/035_bounded_404_log.ts
|
|
1449
1450
|
var _035_bounded_404_log_exports = /* @__PURE__ */ __exportAll({
|
|
1450
|
-
down: () => down$
|
|
1451
|
-
up: () => up$
|
|
1451
|
+
down: () => down$18,
|
|
1452
|
+
up: () => up$18
|
|
1452
1453
|
});
|
|
1453
1454
|
/**
|
|
1454
1455
|
* Migration: Bounded 404 logging
|
|
@@ -1466,7 +1467,7 @@ var _035_bounded_404_log_exports = /* @__PURE__ */ __exportAll({
|
|
|
1466
1467
|
* path and summing hits
|
|
1467
1468
|
* - Adds a UNIQUE index on `path` so upsert semantics work
|
|
1468
1469
|
*/
|
|
1469
|
-
async function up$
|
|
1470
|
+
async function up$18(db) {
|
|
1470
1471
|
const hitsExists = await columnExists(db, "_emdash_404_log", "hits");
|
|
1471
1472
|
if (!hitsExists) await db.schema.alterTable("_emdash_404_log").addColumn("hits", "integer", (col) => col.notNull().defaultTo(1)).execute();
|
|
1472
1473
|
if (!await columnExists(db, "_emdash_404_log", "last_seen_at")) await db.schema.alterTable("_emdash_404_log").addColumn("last_seen_at", "text").execute();
|
|
@@ -1515,7 +1516,7 @@ async function up$15(db) {
|
|
|
1515
1516
|
await db.schema.dropIndex("idx_404_log_path").ifExists().execute();
|
|
1516
1517
|
await db.schema.createIndex("idx_404_log_last_seen").ifNotExists().on("_emdash_404_log").column("last_seen_at").execute();
|
|
1517
1518
|
}
|
|
1518
|
-
async function down$
|
|
1519
|
+
async function down$18(db) {
|
|
1519
1520
|
await db.schema.dropIndex("idx_404_log_last_seen").ifExists().execute();
|
|
1520
1521
|
await db.schema.dropIndex("idx_404_log_path_unique").ifExists().execute();
|
|
1521
1522
|
await db.schema.createIndex("idx_404_log_path").ifNotExists().on("_emdash_404_log").column("path").execute();
|
|
@@ -1526,8 +1527,8 @@ async function down$15(db) {
|
|
|
1526
1527
|
//#endregion
|
|
1527
1528
|
//#region src/database/migrations/036_i18n_menus_and_taxonomies.ts
|
|
1528
1529
|
var _036_i18n_menus_and_taxonomies_exports = /* @__PURE__ */ __exportAll({
|
|
1529
|
-
down: () => down$
|
|
1530
|
-
up: () => up$
|
|
1530
|
+
down: () => down$17,
|
|
1531
|
+
up: () => up$17
|
|
1531
1532
|
});
|
|
1532
1533
|
/**
|
|
1533
1534
|
* i18n for menus + taxonomies. Adds `locale` + `translation_group` to system
|
|
@@ -1538,7 +1539,7 @@ var _036_i18n_menus_and_taxonomies_exports = /* @__PURE__ */ __exportAll({
|
|
|
1538
1539
|
function getDefaultLocale$1() {
|
|
1539
1540
|
return getI18nConfig()?.defaultLocale ?? "en";
|
|
1540
1541
|
}
|
|
1541
|
-
async function up$
|
|
1542
|
+
async function up$17(db) {
|
|
1542
1543
|
const defaultLocale = getDefaultLocale$1();
|
|
1543
1544
|
if (isSqlite(db)) {
|
|
1544
1545
|
await rebuildContentTaxonomies(db);
|
|
@@ -1753,7 +1754,7 @@ async function assertSingleLocale$1(db, defaultLocale) {
|
|
|
1753
1754
|
if (count > 0) throw new Error(`Cannot revert migration 036_i18n_menus_and_taxonomies: ${count} row(s) in "${table}" use a non-default locale (defaultLocale="${defaultLocale}"). Reverting would drop them silently. Export translations first (or delete them) and re-run the rollback. See packages/core/src/database/migrations/036_i18n_menus_and_taxonomies.ts.`);
|
|
1754
1755
|
}
|
|
1755
1756
|
}
|
|
1756
|
-
async function down$
|
|
1757
|
+
async function down$17(db) {
|
|
1757
1758
|
const defaultLocale = getDefaultLocale$1();
|
|
1758
1759
|
await assertSingleLocale$1(db, defaultLocale);
|
|
1759
1760
|
await assertContentTaxonomiesResolve(db, defaultLocale);
|
|
@@ -1851,21 +1852,21 @@ async function rebuildTaxonomyDefsDown(db) {
|
|
|
1851
1852
|
//#endregion
|
|
1852
1853
|
//#region src/database/migrations/037_credential_algorithm.ts
|
|
1853
1854
|
var _037_credential_algorithm_exports = /* @__PURE__ */ __exportAll({
|
|
1854
|
-
down: () => down$
|
|
1855
|
-
up: () => up$
|
|
1855
|
+
down: () => down$16,
|
|
1856
|
+
up: () => up$16
|
|
1856
1857
|
});
|
|
1857
|
-
async function up$
|
|
1858
|
+
async function up$16(db) {
|
|
1858
1859
|
if (!await columnExists(db, "credentials", "algorithm")) await db.schema.alterTable("credentials").addColumn("algorithm", "integer", (col) => col.notNull().defaultTo(-7)).execute();
|
|
1859
1860
|
}
|
|
1860
|
-
async function down$
|
|
1861
|
+
async function down$16(db) {
|
|
1861
1862
|
if (await columnExists(db, "credentials", "algorithm")) await db.schema.alterTable("credentials").dropColumn("algorithm").execute();
|
|
1862
1863
|
}
|
|
1863
1864
|
|
|
1864
1865
|
//#endregion
|
|
1865
1866
|
//#region src/database/migrations/038_registry_plugin_state.ts
|
|
1866
1867
|
var _038_registry_plugin_state_exports = /* @__PURE__ */ __exportAll({
|
|
1867
|
-
down: () => down$
|
|
1868
|
-
up: () => up$
|
|
1868
|
+
down: () => down$15,
|
|
1869
|
+
up: () => up$15
|
|
1869
1870
|
});
|
|
1870
1871
|
/**
|
|
1871
1872
|
* Migration: Add registry fields to _plugin_state
|
|
@@ -1893,7 +1894,7 @@ var _038_registry_plugin_state_exports = /* @__PURE__ */ __exportAll({
|
|
|
1893
1894
|
* checks before adding to keep the migration safe under partial
|
|
1894
1895
|
* re-application. The same pattern is used in 019_i18n.ts.
|
|
1895
1896
|
*/
|
|
1896
|
-
async function up$
|
|
1897
|
+
async function up$15(db) {
|
|
1897
1898
|
if (isSqlite(db)) await upSqlite(db);
|
|
1898
1899
|
else await upPostgres(db);
|
|
1899
1900
|
}
|
|
@@ -1936,7 +1937,7 @@ async function upPostgres(db) {
|
|
|
1936
1937
|
WHERE source = 'registry'
|
|
1937
1938
|
`.execute(db);
|
|
1938
1939
|
}
|
|
1939
|
-
async function down$
|
|
1940
|
+
async function down$15(db) {
|
|
1940
1941
|
await sql`
|
|
1941
1942
|
DROP INDEX IF EXISTS idx_plugin_state_registry
|
|
1942
1943
|
`.execute(db);
|
|
@@ -1953,10 +1954,10 @@ async function down$12(db) {
|
|
|
1953
1954
|
//#endregion
|
|
1954
1955
|
//#region src/database/migrations/039_fix_fts5_triggers.ts
|
|
1955
1956
|
var _039_fix_fts5_triggers_exports = /* @__PURE__ */ __exportAll({
|
|
1956
|
-
down: () => down$
|
|
1957
|
-
up: () => up$
|
|
1957
|
+
down: () => down$14,
|
|
1958
|
+
up: () => up$14
|
|
1958
1959
|
});
|
|
1959
|
-
async function up$
|
|
1960
|
+
async function up$14(db) {
|
|
1960
1961
|
if (!isSqlite(db)) return;
|
|
1961
1962
|
const collections = await sql`
|
|
1962
1963
|
SELECT slug, search_config FROM _emdash_collections
|
|
@@ -1990,7 +1991,7 @@ async function up$11(db) {
|
|
|
1990
1991
|
* at runtime, not by this migration, so leaving them in their
|
|
1991
1992
|
* corruption-safe state on rollback is correct.
|
|
1992
1993
|
*/
|
|
1993
|
-
async function down$
|
|
1994
|
+
async function down$14(_db) {}
|
|
1994
1995
|
function isSearchEnabled(searchConfig) {
|
|
1995
1996
|
if (!searchConfig) return false;
|
|
1996
1997
|
try {
|
|
@@ -2082,8 +2083,8 @@ async function dropFtsObjects(db, collectionSlug) {
|
|
|
2082
2083
|
//#endregion
|
|
2083
2084
|
//#region src/database/migrations/040_byline_i18n.ts
|
|
2084
2085
|
var _040_byline_i18n_exports = /* @__PURE__ */ __exportAll({
|
|
2085
|
-
down: () => down$
|
|
2086
|
-
up: () => up$
|
|
2086
|
+
down: () => down$13,
|
|
2087
|
+
up: () => up$13
|
|
2087
2088
|
});
|
|
2088
2089
|
/**
|
|
2089
2090
|
* i18n for bylines. Adds `locale` + `translation_group` to `_emdash_bylines`
|
|
@@ -2111,7 +2112,7 @@ var _040_byline_i18n_exports = /* @__PURE__ */ __exportAll({
|
|
|
2111
2112
|
function getDefaultLocale() {
|
|
2112
2113
|
return getI18nConfig()?.defaultLocale ?? "en";
|
|
2113
2114
|
}
|
|
2114
|
-
async function up$
|
|
2115
|
+
async function up$13(db) {
|
|
2115
2116
|
const defaultLocale = getDefaultLocale();
|
|
2116
2117
|
if (isSqlite(db)) {
|
|
2117
2118
|
await rebuildContentBylines(db);
|
|
@@ -2268,7 +2269,7 @@ async function assertSingleLocale(db, defaultLocale) {
|
|
|
2268
2269
|
const count = Number(result.rows[0]?.count ?? 0);
|
|
2269
2270
|
if (count > 0) throw new Error(`Cannot revert migration 040_byline_i18n: ${count} row(s) in "_emdash_bylines" use a non-default locale (defaultLocale="${defaultLocale}"). Reverting would drop them silently. Export translations first (or delete them) and re-run the rollback. See packages/core/src/database/migrations/040_byline_i18n.ts.`);
|
|
2270
2271
|
}
|
|
2271
|
-
async function down$
|
|
2272
|
+
async function down$13(db) {
|
|
2272
2273
|
const defaultLocale = getDefaultLocale();
|
|
2273
2274
|
await assertSingleLocale(db, defaultLocale);
|
|
2274
2275
|
await assertContentBylinesResolve(db, defaultLocale);
|
|
@@ -2387,8 +2388,8 @@ async function restoreContentBylinesFk(db) {
|
|
|
2387
2388
|
//#endregion
|
|
2388
2389
|
//#region src/database/migrations/041_content_locale_list_index.ts
|
|
2389
2390
|
var _041_content_locale_list_index_exports = /* @__PURE__ */ __exportAll({
|
|
2390
|
-
down: () => down$
|
|
2391
|
-
up: () => up$
|
|
2391
|
+
down: () => down$12,
|
|
2392
|
+
up: () => up$12
|
|
2392
2393
|
});
|
|
2393
2394
|
/**
|
|
2394
2395
|
* Migration: locale-aware composite indexes for content list queries.
|
|
@@ -2408,7 +2409,7 @@ var _041_content_locale_list_index_exports = /* @__PURE__ */ __exportAll({
|
|
|
2408
2409
|
* slugs as short as 40 chars, making both names truncate to the same string.
|
|
2409
2410
|
* Keep these identical to the names in `schema/registry.ts`.
|
|
2410
2411
|
*/
|
|
2411
|
-
async function up$
|
|
2412
|
+
async function up$12(db) {
|
|
2412
2413
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
2413
2414
|
for (const tableName of tableNames) {
|
|
2414
2415
|
await sql`
|
|
@@ -2421,7 +2422,7 @@ async function up$9(db) {
|
|
|
2421
2422
|
`.execute(db);
|
|
2422
2423
|
}
|
|
2423
2424
|
}
|
|
2424
|
-
async function down$
|
|
2425
|
+
async function down$12(db) {
|
|
2425
2426
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
2426
2427
|
for (const tableName of tableNames) {
|
|
2427
2428
|
await sql`DROP INDEX IF EXISTS ${sql.ref(`idx_${tableName}_loc_upd`)}`.execute(db);
|
|
@@ -2432,8 +2433,8 @@ async function down$9(db) {
|
|
|
2432
2433
|
//#endregion
|
|
2433
2434
|
//#region src/database/migrations/042_byline_fields.ts
|
|
2434
2435
|
var _042_byline_fields_exports = /* @__PURE__ */ __exportAll({
|
|
2435
|
-
down: () => down$
|
|
2436
|
-
up: () => up$
|
|
2436
|
+
down: () => down$11,
|
|
2437
|
+
up: () => up$11
|
|
2437
2438
|
});
|
|
2438
2439
|
/**
|
|
2439
2440
|
* Byline custom fields (Discussion #1174). Adds three tables and a
|
|
@@ -2478,7 +2479,7 @@ var _042_byline_fields_exports = /* @__PURE__ */ __exportAll({
|
|
|
2478
2479
|
* reference it. If `down()` runs after a partial `up()`, missing tables
|
|
2479
2480
|
* are tolerated (`DROP TABLE IF EXISTS`).
|
|
2480
2481
|
*/
|
|
2481
|
-
async function up$
|
|
2482
|
+
async function up$11(db) {
|
|
2482
2483
|
await db.schema.createTable("_emdash_byline_fields").ifNotExists().addColumn("id", "text", (col) => col.primaryKey()).addColumn("slug", "text", (col) => col.notNull().unique()).addColumn("label", "text", (col) => col.notNull()).addColumn("type", "text", (col) => col.notNull()).addColumn("required", "integer", (col) => col.notNull().defaultTo(0)).addColumn("translatable", "integer", (col) => col.notNull().defaultTo(1)).addColumn("validation", "text").addColumn("sort_order", "integer", (col) => col.notNull().defaultTo(0)).addColumn("created_at", "text", (col) => col.defaultTo(currentTimestamp(db))).addColumn("updated_at", "text", (col) => col.defaultTo(currentTimestamp(db))).execute();
|
|
2483
2484
|
await db.schema.createIndex("idx__emdash_byline_fields_sort_order").ifNotExists().on("_emdash_byline_fields").column("sort_order").execute();
|
|
2484
2485
|
await db.schema.createTable("_emdash_byline_field_values").ifNotExists().addColumn("byline_id", "text", (col) => col.notNull().references("_emdash_bylines.id").onDelete("cascade")).addColumn("field_id", "text", (col) => col.notNull().references("_emdash_byline_fields.id").onDelete("cascade")).addColumn("value", "text").addColumn("created_at", "text", (col) => col.defaultTo(currentTimestamp(db))).addColumn("updated_at", "text", (col) => col.defaultTo(currentTimestamp(db))).addPrimaryKeyConstraint("_emdash_byline_field_values_pk", ["byline_id", "field_id"]).execute();
|
|
@@ -2501,7 +2502,7 @@ async function up$8(db) {
|
|
|
2501
2502
|
* `up()` (only one or two tables landed) still settles the database back
|
|
2502
2503
|
* to its pre-042 state.
|
|
2503
2504
|
*/
|
|
2504
|
-
async function down$
|
|
2505
|
+
async function down$11(db) {
|
|
2505
2506
|
await db.schema.dropTable("_emdash_byline_field_group_values").ifExists().execute();
|
|
2506
2507
|
await db.schema.dropTable("_emdash_byline_field_values").ifExists().execute();
|
|
2507
2508
|
await db.schema.dropTable("_emdash_byline_fields").ifExists().execute();
|
|
@@ -2511,8 +2512,8 @@ async function down$8(db) {
|
|
|
2511
2512
|
//#endregion
|
|
2512
2513
|
//#region src/database/migrations/043_content_references.ts
|
|
2513
2514
|
var _043_content_references_exports = /* @__PURE__ */ __exportAll({
|
|
2514
|
-
down: () => down$
|
|
2515
|
-
up: () => up$
|
|
2515
|
+
down: () => down$10,
|
|
2516
|
+
up: () => up$10
|
|
2516
2517
|
});
|
|
2517
2518
|
/**
|
|
2518
2519
|
* Content references.
|
|
@@ -2532,7 +2533,7 @@ var _043_content_references_exports = /* @__PURE__ */ __exportAll({
|
|
|
2532
2533
|
* race-recovery path) re-applies cleanly — including any indexes that landed in
|
|
2533
2534
|
* the failed pass after their table.
|
|
2534
2535
|
*/
|
|
2535
|
-
async function up$
|
|
2536
|
+
async function up$10(db) {
|
|
2536
2537
|
const defaultLocale = getI18nConfig()?.defaultLocale ?? "en";
|
|
2537
2538
|
await db.schema.createTable("_emdash_relations").ifNotExists().addColumn("id", "text", (c) => c.primaryKey()).addColumn("name", "text", (c) => c.notNull()).addColumn("parent_collection", "text", (c) => c.notNull()).addColumn("child_collection", "text", (c) => c.notNull()).addColumn("parent_label", "text", (c) => c.notNull()).addColumn("child_label", "text", (c) => c.notNull()).addColumn("locale", "text", (c) => c.notNull().defaultTo(defaultLocale)).addColumn("translation_group", "text", (c) => c.notNull()).addColumn("created_at", "text", (c) => c.defaultTo(currentTimestamp(db))).addColumn("updated_at", "text", (c) => c.defaultTo(currentTimestamp(db))).addUniqueConstraint("_emdash_relations_name_locale_unique", ["name", "locale"]).execute();
|
|
2538
2539
|
await db.schema.createIndex("idx__emdash_relations_locale").ifNotExists().on("_emdash_relations").column("locale").execute();
|
|
@@ -2553,7 +2554,7 @@ async function up$7(db) {
|
|
|
2553
2554
|
await db.schema.createIndex("idx__emdash_content_references_child").ifNotExists().on("_emdash_content_references").columns(["child_group", "relation_group"]).execute();
|
|
2554
2555
|
await db.schema.createIndex("idx__emdash_content_references_relation").ifNotExists().on("_emdash_content_references").column("relation_group").execute();
|
|
2555
2556
|
}
|
|
2556
|
-
async function down$
|
|
2557
|
+
async function down$10(db) {
|
|
2557
2558
|
await db.schema.dropTable("_emdash_content_references").ifExists().execute();
|
|
2558
2559
|
await db.schema.dropTable("_emdash_relations").ifExists().execute();
|
|
2559
2560
|
}
|
|
@@ -2561,8 +2562,8 @@ async function down$7(db) {
|
|
|
2561
2562
|
//#endregion
|
|
2562
2563
|
//#region src/database/migrations/044_comment_reactions.ts
|
|
2563
2564
|
var _044_comment_reactions_exports = /* @__PURE__ */ __exportAll({
|
|
2564
|
-
down: () => down$
|
|
2565
|
-
up: () => up$
|
|
2565
|
+
down: () => down$9,
|
|
2566
|
+
up: () => up$9
|
|
2566
2567
|
});
|
|
2567
2568
|
/**
|
|
2568
2569
|
* Comment reactions (Tier 1 of the best-in-class comments RFC).
|
|
@@ -2574,7 +2575,7 @@ var _044_comment_reactions_exports = /* @__PURE__ */ __exportAll({
|
|
|
2574
2575
|
*
|
|
2575
2576
|
* Additive and backward-compatible: a new table, no change to existing schema.
|
|
2576
2577
|
*/
|
|
2577
|
-
async function up$
|
|
2578
|
+
async function up$9(db) {
|
|
2578
2579
|
await db.schema.createTable("_emdash_comment_reactions").ifNotExists().addColumn("id", "text", (col) => col.primaryKey()).addColumn("comment_id", "text", (col) => col.notNull().references("_emdash_comments.id").onDelete("cascade")).addColumn("reaction", "text", (col) => col.notNull().defaultTo("like")).addColumn("voter_hash", "text", (col) => col.notNull()).addColumn("created_at", "text", (col) => col.defaultTo(currentTimestamp(db))).execute();
|
|
2579
2580
|
await db.schema.createIndex("idx_comment_reactions_unique").ifNotExists().on("_emdash_comment_reactions").columns([
|
|
2580
2581
|
"comment_id",
|
|
@@ -2584,15 +2585,15 @@ async function up$6(db) {
|
|
|
2584
2585
|
await db.schema.createIndex("idx_comment_reactions_comment").ifNotExists().on("_emdash_comment_reactions").column("comment_id").execute();
|
|
2585
2586
|
await db.schema.createIndex("idx_comment_reactions_voter").ifNotExists().on("_emdash_comment_reactions").columns(["voter_hash", "created_at"]).execute();
|
|
2586
2587
|
}
|
|
2587
|
-
async function down$
|
|
2588
|
+
async function down$9(db) {
|
|
2588
2589
|
await db.schema.dropTable("_emdash_comment_reactions").execute();
|
|
2589
2590
|
}
|
|
2590
2591
|
|
|
2591
2592
|
//#endregion
|
|
2592
2593
|
//#region src/database/migrations/045_taxonomy_parent_group.ts
|
|
2593
2594
|
var _045_taxonomy_parent_group_exports = /* @__PURE__ */ __exportAll({
|
|
2594
|
-
down: () => down$
|
|
2595
|
-
up: () => up$
|
|
2595
|
+
down: () => down$8,
|
|
2596
|
+
up: () => up$8
|
|
2596
2597
|
});
|
|
2597
2598
|
/**
|
|
2598
2599
|
* Store the parent's `translation_group` in `taxonomies.parent_id` instead of a
|
|
@@ -2622,7 +2623,7 @@ var _045_taxonomy_parent_group_exports = /* @__PURE__ */ __exportAll({
|
|
|
2622
2623
|
* Dialect-independent: the correlated-subquery `UPDATE` runs on SQLite (incl.
|
|
2623
2624
|
* D1) and Postgres alike.
|
|
2624
2625
|
*/
|
|
2625
|
-
async function up$
|
|
2626
|
+
async function up$8(db) {
|
|
2626
2627
|
await sql`
|
|
2627
2628
|
UPDATE taxonomies
|
|
2628
2629
|
SET parent_id = (
|
|
@@ -2644,7 +2645,7 @@ async function up$5(db) {
|
|
|
2644
2645
|
* locale (the pre-migration shape). Rows with no same-locale parent are left as
|
|
2645
2646
|
* they are rather than nulled, so a rollback never silently detaches a subtree.
|
|
2646
2647
|
*/
|
|
2647
|
-
async function down$
|
|
2648
|
+
async function down$8(db) {
|
|
2648
2649
|
await sql`
|
|
2649
2650
|
UPDATE taxonomies
|
|
2650
2651
|
SET parent_id = COALESCE(
|
|
@@ -2662,8 +2663,8 @@ async function down$5(db) {
|
|
|
2662
2663
|
//#endregion
|
|
2663
2664
|
//#region src/database/migrations/046_media_usage_index.ts
|
|
2664
2665
|
var _046_media_usage_index_exports = /* @__PURE__ */ __exportAll({
|
|
2665
|
-
down: () => down$
|
|
2666
|
-
up: () => up$
|
|
2666
|
+
down: () => down$7,
|
|
2667
|
+
up: () => up$7
|
|
2667
2668
|
});
|
|
2668
2669
|
/**
|
|
2669
2670
|
* Internal media usage projection tables.
|
|
@@ -2672,7 +2673,7 @@ var _046_media_usage_index_exports = /* @__PURE__ */ __exportAll({
|
|
|
2672
2673
|
* imports, and no content-table scans. Production rows are introduced by later
|
|
2673
2674
|
* phases once the central snapshot/indexer path is reviewed.
|
|
2674
2675
|
*/
|
|
2675
|
-
async function up$
|
|
2676
|
+
async function up$7(db) {
|
|
2676
2677
|
await db.schema.createTable("_emdash_media_usage_sources").ifNotExists().addColumn("source_key", "text", (c) => c.primaryKey()).addColumn("source_type", "text", (c) => c.notNull()).addColumn("collection_slug", "text").addColumn("content_id", "text").addColumn("source_variant", "text", (c) => c.notNull()).addColumn("locale", "text").addColumn("translation_group", "text").addColumn("content_slug", "text").addColumn("content_title", "text").addColumn("content_status", "text").addColumn("content_scheduled_at", "text").addColumn("content_deleted_at", "text").addColumn("revision_id", "text").addColumn("current_generation", "text", (c) => c.notNull()).addColumn("schema_version", "integer", (c) => c.notNull().defaultTo(1)).addColumn("indexed_at", "text", (c) => c.notNull().defaultTo(currentTimestamp(db))).addColumn("created_at", "text", (c) => c.defaultTo(currentTimestamp(db))).addColumn("updated_at", "text", (c) => c.defaultTo(currentTimestamp(db))).execute();
|
|
2677
2678
|
await db.schema.createIndex("idx__emdash_media_usage_sources_content").ifNotExists().on("_emdash_media_usage_sources").columns([
|
|
2678
2679
|
"source_type",
|
|
@@ -2694,7 +2695,7 @@ async function up$4(db) {
|
|
|
2694
2695
|
await db.schema.createIndex("idx__emdash_media_usage_provider_asset").ifNotExists().on("_emdash_media_usage").columns(["provider", "provider_asset_id"]).execute();
|
|
2695
2696
|
await db.schema.createIndex("idx__emdash_media_usage_source_generation").ifNotExists().on("_emdash_media_usage").columns(["source_key", "generation"]).execute();
|
|
2696
2697
|
}
|
|
2697
|
-
async function down$
|
|
2698
|
+
async function down$7(db) {
|
|
2698
2699
|
await db.schema.dropTable("_emdash_media_usage").ifExists().execute();
|
|
2699
2700
|
await db.schema.dropTable("_emdash_media_usage_sources").ifExists().execute();
|
|
2700
2701
|
}
|
|
@@ -2702,8 +2703,8 @@ async function down$4(db) {
|
|
|
2702
2703
|
//#endregion
|
|
2703
2704
|
//#region src/database/migrations/047_restore_taxonomy_parent_index.ts
|
|
2704
2705
|
var _047_restore_taxonomy_parent_index_exports = /* @__PURE__ */ __exportAll({
|
|
2705
|
-
down: () => down$
|
|
2706
|
-
up: () => up$
|
|
2706
|
+
down: () => down$6,
|
|
2707
|
+
up: () => up$6
|
|
2707
2708
|
});
|
|
2708
2709
|
/**
|
|
2709
2710
|
* Restore `idx_taxonomies_parent` on `taxonomies(parent_id)` (#1665).
|
|
@@ -2720,18 +2721,18 @@ var _047_restore_taxonomy_parent_index_exports = /* @__PURE__ */ __exportAll({
|
|
|
2720
2721
|
* index here. Fresh installs also get it in 036's rebuild for parity with the
|
|
2721
2722
|
* other rebuilt tables, making this a no-op for them.
|
|
2722
2723
|
*/
|
|
2723
|
-
async function up$
|
|
2724
|
+
async function up$6(db) {
|
|
2724
2725
|
await db.schema.createIndex("idx_taxonomies_parent").ifNotExists().on("taxonomies").column("parent_id").execute();
|
|
2725
2726
|
}
|
|
2726
|
-
async function down$
|
|
2727
|
+
async function down$6(db) {
|
|
2727
2728
|
await db.schema.dropIndex("idx_taxonomies_parent").ifExists().execute();
|
|
2728
2729
|
}
|
|
2729
2730
|
|
|
2730
2731
|
//#endregion
|
|
2731
2732
|
//#region src/database/migrations/048_restore_content_taxonomies_term_index.ts
|
|
2732
2733
|
var _048_restore_content_taxonomies_term_index_exports = /* @__PURE__ */ __exportAll({
|
|
2733
|
-
down: () => down$
|
|
2734
|
-
up: () => up$
|
|
2734
|
+
down: () => down$5,
|
|
2735
|
+
up: () => up$5
|
|
2735
2736
|
});
|
|
2736
2737
|
/**
|
|
2737
2738
|
* Restore `idx_content_taxonomies_term` on `content_taxonomies(taxonomy_id)` (#1701).
|
|
@@ -2751,18 +2752,18 @@ var _048_restore_content_taxonomies_term_index_exports = /* @__PURE__ */ __expor
|
|
|
2751
2752
|
*
|
|
2752
2753
|
* Forward-only.
|
|
2753
2754
|
*/
|
|
2754
|
-
async function up$
|
|
2755
|
+
async function up$5(db) {
|
|
2755
2756
|
await db.schema.createIndex("idx_content_taxonomies_term").ifNotExists().on("content_taxonomies").column("taxonomy_id").execute();
|
|
2756
2757
|
}
|
|
2757
|
-
async function down$
|
|
2758
|
+
async function down$5(db) {
|
|
2758
2759
|
await db.schema.dropIndex("idx_content_taxonomies_term").ifExists().execute();
|
|
2759
2760
|
}
|
|
2760
2761
|
|
|
2761
2762
|
//#endregion
|
|
2762
2763
|
//#region src/database/migrations/049_taxonomies_name_locale_index.ts
|
|
2763
2764
|
var _049_taxonomies_name_locale_index_exports = /* @__PURE__ */ __exportAll({
|
|
2764
|
-
down: () => down$
|
|
2765
|
-
up: () => up$
|
|
2765
|
+
down: () => down$4,
|
|
2766
|
+
up: () => up$4
|
|
2766
2767
|
});
|
|
2767
2768
|
/**
|
|
2768
2769
|
* Add composite `idx_taxonomies_name_locale` on `taxonomies(name, locale)` (#1723).
|
|
@@ -2783,11 +2784,11 @@ var _049_taxonomies_name_locale_index_exports = /* @__PURE__ */ __exportAll({
|
|
|
2783
2784
|
* by the new composite's prefix. Create-before-drop keeps name lookups indexed
|
|
2784
2785
|
* at every point. Both statements are idempotent so a partial apply can retry.
|
|
2785
2786
|
*/
|
|
2786
|
-
async function up$
|
|
2787
|
+
async function up$4(db) {
|
|
2787
2788
|
await db.schema.createIndex("idx_taxonomies_name_locale").ifNotExists().on("taxonomies").columns(["name", "locale"]).execute();
|
|
2788
2789
|
await db.schema.dropIndex("idx_taxonomies_name").ifExists().execute();
|
|
2789
2790
|
}
|
|
2790
|
-
async function down$
|
|
2791
|
+
async function down$4(db) {
|
|
2791
2792
|
await db.schema.createIndex("idx_taxonomies_name").ifNotExists().on("taxonomies").column("name").execute();
|
|
2792
2793
|
await db.schema.dropIndex("idx_taxonomies_name_locale").ifExists().execute();
|
|
2793
2794
|
}
|
|
@@ -2795,8 +2796,8 @@ async function down$1(db) {
|
|
|
2795
2796
|
//#endregion
|
|
2796
2797
|
//#region src/database/migrations/050_media_usage_index_status.ts
|
|
2797
2798
|
var _050_media_usage_index_status_exports = /* @__PURE__ */ __exportAll({
|
|
2798
|
-
down: () => down,
|
|
2799
|
-
up: () => up
|
|
2799
|
+
down: () => down$3,
|
|
2800
|
+
up: () => up$3
|
|
2800
2801
|
});
|
|
2801
2802
|
const SOURCE_TABLE = "_emdash_media_usage_sources";
|
|
2802
2803
|
const DUPLICATE_COLUMN_RE = /(?:duplicate column|column .* already exists|already exists.*column)/i;
|
|
@@ -2807,7 +2808,7 @@ const DUPLICATE_COLUMN_RE = /(?:duplicate column|column .* already exists|alread
|
|
|
2807
2808
|
* tracking for later reference-index reconciliation. No content scans, no
|
|
2808
2809
|
* runtime imports, and no backfill.
|
|
2809
2810
|
*/
|
|
2810
|
-
async function up(db) {
|
|
2811
|
+
async function up$3(db) {
|
|
2811
2812
|
await addSourceMetadataColumns(db);
|
|
2812
2813
|
await db.schema.createTable("_emdash_media_usage_index_status").ifNotExists().addColumn("adapter_id", "text", (c) => c.notNull()).addColumn("scope_type", "text", (c) => c.notNull()).addColumn("scope_key", "text", (c) => c.notNull()).addColumn("status", "text", (c) => c.notNull()).addColumn("schema_version", "integer", (c) => c.notNull().defaultTo(1)).addColumn("started_at", "text").addColumn("completed_at", "text").addColumn("cursor", "text").addColumn("indexed_source_count", "integer", (c) => c.notNull().defaultTo(0)).addColumn("failed_source_count", "integer", (c) => c.notNull().defaultTo(0)).addColumn("last_error_code", "text").addColumn("updated_at", "text", (c) => c.notNull().defaultTo(currentTimestamp(db))).addPrimaryKeyConstraint("_emdash_media_usage_index_status_pk", [
|
|
2813
2814
|
"adapter_id",
|
|
@@ -2822,7 +2823,7 @@ async function up(db) {
|
|
|
2822
2823
|
await db.schema.createIndex("idx__emdash_media_usage_sources_fingerprint").ifNotExists().on("_emdash_media_usage_sources").column("source_fingerprint").execute();
|
|
2823
2824
|
await db.schema.createIndex("idx__emdash_media_usage_index_status_status").ifNotExists().on("_emdash_media_usage_index_status").columns(["adapter_id", "status"]).execute();
|
|
2824
2825
|
}
|
|
2825
|
-
async function down(db) {
|
|
2826
|
+
async function down$3(db) {
|
|
2826
2827
|
await db.schema.dropIndex("idx__emdash_media_usage_index_status_status").ifExists().execute();
|
|
2827
2828
|
await db.schema.dropIndex("idx__emdash_media_usage_sources_fingerprint").ifExists().execute();
|
|
2828
2829
|
await db.schema.dropIndex("idx__emdash_media_usage_sources_completeness").ifExists().execute();
|
|
@@ -2875,6 +2876,137 @@ async function dropSourceMetadataColumns(db) {
|
|
|
2875
2876
|
]) if (await columnExists(db, SOURCE_TABLE, columnName)) await db.schema.alterTable(SOURCE_TABLE).dropColumn(columnName).execute();
|
|
2876
2877
|
}
|
|
2877
2878
|
|
|
2879
|
+
//#endregion
|
|
2880
|
+
//#region src/database/migrations/051_content_taxonomies_denorm.ts
|
|
2881
|
+
var _051_content_taxonomies_denorm_exports = /* @__PURE__ */ __exportAll({
|
|
2882
|
+
down: () => down$2,
|
|
2883
|
+
up: () => up$2
|
|
2884
|
+
});
|
|
2885
|
+
/**
|
|
2886
|
+
* Denormalize the filter + sort columns from `ec_*` onto `content_taxonomies`
|
|
2887
|
+
* and mirror `ec_*`'s composite sort indexes onto the pivot (#1834).
|
|
2888
|
+
*
|
|
2889
|
+
* A taxonomy-filtered listing used to apply the term filter as a correlated
|
|
2890
|
+
* `EXISTS` on `SELECT * FROM ec_<collection> … ORDER BY … LIMIT ?`. The pivot
|
|
2891
|
+
* carried only `(collection, entry_id, taxonomy_id)`, so the filter
|
|
2892
|
+
* (`deleted_at`, `status`, `locale`) and the sort (`published_at`/`created_at`)
|
|
2893
|
+
* could only be evaluated on the `ec_*` row. On stats-blind SQLite/D1 a
|
|
2894
|
+
* selective term never fills the `LIMIT`, so the query walked the whole
|
|
2895
|
+
* collection (~75k D1 rows read for a one-row page).
|
|
2896
|
+
*
|
|
2897
|
+
* Copying those columns onto the pivot and indexing them keyed by
|
|
2898
|
+
* `(taxonomy_id, collection, …)` lets the loader seek the term and walk a
|
|
2899
|
+
* sort-ordered pivot index, short-circuiting on `LIMIT`, then touch `ec_*` only
|
|
2900
|
+
* by primary key to hydrate the page.
|
|
2901
|
+
*
|
|
2902
|
+
* The columns are advisory (D1 has no transactions; the write-path re-stamp is
|
|
2903
|
+
* non-atomic), so the read path re-checks the real predicates on the joined
|
|
2904
|
+
* `ec_*` row — see loader.ts. `updated_at` is deliberately not denormalized: it
|
|
2905
|
+
* moves on every edit and is seldom a public sort, so its write cost outweighs
|
|
2906
|
+
* its read value; `updated_at`-sorted taxonomy listings temp-sort instead.
|
|
2907
|
+
*
|
|
2908
|
+
* Order matters: add the columns, backfill, THEN build the indexes so each
|
|
2909
|
+
* index is built once over populated data rather than maintained through the
|
|
2910
|
+
* backfill `UPDATE`.
|
|
2911
|
+
*
|
|
2912
|
+
* Forward-only.
|
|
2913
|
+
*/
|
|
2914
|
+
const DENORM_COLUMNS = [
|
|
2915
|
+
"status",
|
|
2916
|
+
"scheduled_at",
|
|
2917
|
+
"deleted_at",
|
|
2918
|
+
"locale",
|
|
2919
|
+
"published_at",
|
|
2920
|
+
"created_at"
|
|
2921
|
+
];
|
|
2922
|
+
const INDEXES = [
|
|
2923
|
+
{
|
|
2924
|
+
name: "idx_content_taxonomies_pub",
|
|
2925
|
+
columns: "taxonomy_id, collection, deleted_at, published_at DESC, entry_id DESC"
|
|
2926
|
+
},
|
|
2927
|
+
{
|
|
2928
|
+
name: "idx_content_taxonomies_crt",
|
|
2929
|
+
columns: "taxonomy_id, collection, deleted_at, created_at DESC, entry_id DESC"
|
|
2930
|
+
},
|
|
2931
|
+
{
|
|
2932
|
+
name: "idx_content_taxonomies_loc_pub",
|
|
2933
|
+
columns: "taxonomy_id, collection, deleted_at, locale, published_at DESC, entry_id DESC"
|
|
2934
|
+
},
|
|
2935
|
+
{
|
|
2936
|
+
name: "idx_content_taxonomies_loc_crt",
|
|
2937
|
+
columns: "taxonomy_id, collection, deleted_at, locale, created_at DESC, entry_id DESC"
|
|
2938
|
+
}
|
|
2939
|
+
];
|
|
2940
|
+
async function up$2(db) {
|
|
2941
|
+
for (const column of DENORM_COLUMNS) {
|
|
2942
|
+
if (await columnExists(db, "content_taxonomies", column)) continue;
|
|
2943
|
+
await sql`
|
|
2944
|
+
ALTER TABLE content_taxonomies ADD COLUMN ${sql.ref(column)} TEXT
|
|
2945
|
+
`.execute(db);
|
|
2946
|
+
}
|
|
2947
|
+
const tableNames = await listTablesLike(db, "ec_%");
|
|
2948
|
+
for (const tableName of tableNames) {
|
|
2949
|
+
validateIdentifier(tableName, "content table name");
|
|
2950
|
+
const slug = tableName.slice(3);
|
|
2951
|
+
await sql`
|
|
2952
|
+
UPDATE content_taxonomies
|
|
2953
|
+
SET (status, scheduled_at, deleted_at, locale, published_at, created_at) = (
|
|
2954
|
+
SELECT status, scheduled_at, deleted_at, locale, published_at, created_at
|
|
2955
|
+
FROM ${sql.ref(tableName)}
|
|
2956
|
+
WHERE ${sql.ref(tableName)}.id = content_taxonomies.entry_id
|
|
2957
|
+
)
|
|
2958
|
+
WHERE collection = ${slug}
|
|
2959
|
+
`.execute(db);
|
|
2960
|
+
}
|
|
2961
|
+
for (const index of INDEXES) await sql`
|
|
2962
|
+
CREATE INDEX IF NOT EXISTS ${sql.ref(index.name)}
|
|
2963
|
+
ON content_taxonomies (${sql.raw(index.columns)})
|
|
2964
|
+
`.execute(db);
|
|
2965
|
+
}
|
|
2966
|
+
async function down$2(db) {
|
|
2967
|
+
for (const index of INDEXES) await sql`DROP INDEX IF EXISTS ${sql.ref(index.name)}`.execute(db);
|
|
2968
|
+
for (const column of DENORM_COLUMNS) await sql`
|
|
2969
|
+
ALTER TABLE content_taxonomies DROP COLUMN ${sql.ref(column)}
|
|
2970
|
+
`.execute(db);
|
|
2971
|
+
}
|
|
2972
|
+
|
|
2973
|
+
//#endregion
|
|
2974
|
+
//#region src/database/migrations/052_media_usage_read_index.ts
|
|
2975
|
+
var _052_media_usage_read_index_exports = /* @__PURE__ */ __exportAll({
|
|
2976
|
+
down: () => down$1,
|
|
2977
|
+
up: () => up$1
|
|
2978
|
+
});
|
|
2979
|
+
const OLD_INDEX = "idx__emdash_media_usage_media_id";
|
|
2980
|
+
const READ_INDEX = "idx__emdash_media_usage_media_source_generation";
|
|
2981
|
+
async function up$1(db) {
|
|
2982
|
+
await db.schema.createIndex(READ_INDEX).ifNotExists().on("_emdash_media_usage").columns([
|
|
2983
|
+
"media_id",
|
|
2984
|
+
"source_key",
|
|
2985
|
+
"generation"
|
|
2986
|
+
]).execute();
|
|
2987
|
+
await db.schema.dropIndex(OLD_INDEX).ifExists().execute();
|
|
2988
|
+
}
|
|
2989
|
+
async function down$1(db) {
|
|
2990
|
+
await db.schema.createIndex(OLD_INDEX).ifNotExists().on("_emdash_media_usage").column("media_id").execute();
|
|
2991
|
+
await db.schema.dropIndex(READ_INDEX).ifExists().execute();
|
|
2992
|
+
}
|
|
2993
|
+
|
|
2994
|
+
//#endregion
|
|
2995
|
+
//#region src/database/migrations/053_plugin_mcp_tools.ts
|
|
2996
|
+
var _053_plugin_mcp_tools_exports = /* @__PURE__ */ __exportAll({
|
|
2997
|
+
down: () => down,
|
|
2998
|
+
up: () => up
|
|
2999
|
+
});
|
|
3000
|
+
/** Persist explicit per-plugin MCP enablement and the declaration consented to by an admin. */
|
|
3001
|
+
async function up(db) {
|
|
3002
|
+
if (!await columnExists(db, "_plugin_state", "mcp_tools_enabled")) await db.schema.alterTable("_plugin_state").addColumn("mcp_tools_enabled", "integer", (col) => col.notNull().defaultTo(0)).execute();
|
|
3003
|
+
if (!await columnExists(db, "_plugin_state", "mcp_tools_consent")) await db.schema.alterTable("_plugin_state").addColumn("mcp_tools_consent", "text").execute();
|
|
3004
|
+
}
|
|
3005
|
+
async function down(db) {
|
|
3006
|
+
await db.schema.alterTable("_plugin_state").dropColumn("mcp_tools_consent").execute();
|
|
3007
|
+
await db.schema.alterTable("_plugin_state").dropColumn("mcp_tools_enabled").execute();
|
|
3008
|
+
}
|
|
3009
|
+
|
|
2878
3010
|
//#endregion
|
|
2879
3011
|
//#region src/database/migrations/runner.ts
|
|
2880
3012
|
const MIGRATIONS = Object.freeze({
|
|
@@ -2926,7 +3058,10 @@ const MIGRATIONS = Object.freeze({
|
|
|
2926
3058
|
"047_restore_taxonomy_parent_index": _047_restore_taxonomy_parent_index_exports,
|
|
2927
3059
|
"048_restore_content_taxonomies_term_index": _048_restore_content_taxonomies_term_index_exports,
|
|
2928
3060
|
"049_taxonomies_name_locale_index": _049_taxonomies_name_locale_index_exports,
|
|
2929
|
-
"050_media_usage_index_status": _050_media_usage_index_status_exports
|
|
3061
|
+
"050_media_usage_index_status": _050_media_usage_index_status_exports,
|
|
3062
|
+
"051_content_taxonomies_denorm": _051_content_taxonomies_denorm_exports,
|
|
3063
|
+
"052_media_usage_read_index": _052_media_usage_read_index_exports,
|
|
3064
|
+
"053_plugin_mcp_tools": _053_plugin_mcp_tools_exports
|
|
2930
3065
|
});
|
|
2931
3066
|
/** Total number of registered migrations. Exported for use in tests. */
|
|
2932
3067
|
const MIGRATION_COUNT = Object.keys(MIGRATIONS).length;
|
|
@@ -2939,6 +3074,20 @@ var StaticMigrationProvider = class {
|
|
|
2939
3074
|
return MIGRATIONS;
|
|
2940
3075
|
}
|
|
2941
3076
|
};
|
|
3077
|
+
/**
|
|
3078
|
+
* Thrown when another instance held the migration lock for the whole wait
|
|
3079
|
+
* window. This is NOT a migration failure — the holder may simply be slow
|
|
3080
|
+
* (e.g. many pending migrations over a remote Postgres connection) — so
|
|
3081
|
+
* callers with failure-backoff logic (`getDatabase` in emdash-runtime.ts)
|
|
3082
|
+
* exempt it: the next request waits again instead of backing off, and init
|
|
3083
|
+
* recovers as soon as the holder finishes.
|
|
3084
|
+
*/
|
|
3085
|
+
var ConcurrentMigrationTimeoutError = class extends Error {
|
|
3086
|
+
constructor(waitMs) {
|
|
3087
|
+
super(`Timed out waiting for another instance's migrations: the migration lock was still held after ${waitMs}ms. It may still be applying migrations, or its migration may be failing repeatedly.`);
|
|
3088
|
+
this.name = "ConcurrentMigrationTimeoutError";
|
|
3089
|
+
}
|
|
3090
|
+
};
|
|
2942
3091
|
/** Custom migration table name */
|
|
2943
3092
|
const MIGRATION_TABLE = "_emdash_migrations";
|
|
2944
3093
|
const MIGRATION_LOCK_TABLE = "_emdash_migrations_lock";
|
|
@@ -3044,8 +3193,8 @@ async function getAppliedMigrationCount(db) {
|
|
|
3044
3193
|
* been migrated by a newer build still treats the wait as settled instead
|
|
3045
3194
|
* of timing out.
|
|
3046
3195
|
*/
|
|
3047
|
-
async function waitForConcurrentMigrator(db) {
|
|
3048
|
-
const deadline = Date.now() +
|
|
3196
|
+
async function waitForConcurrentMigrator(db, waitMs = MIGRATION_RACE_WAIT_MS) {
|
|
3197
|
+
const deadline = Date.now() + waitMs;
|
|
3049
3198
|
while (Date.now() < deadline) {
|
|
3050
3199
|
const count = await getAppliedMigrationCount(db);
|
|
3051
3200
|
if (count !== null && count >= MIGRATION_COUNT) return true;
|
|
@@ -3101,8 +3250,10 @@ async function runMigrations(db, options) {
|
|
|
3101
3250
|
if (error) {
|
|
3102
3251
|
const msg = deepErrorMessage(error);
|
|
3103
3252
|
const failedMigration = results?.find((r) => r.status === "Error");
|
|
3104
|
-
|
|
3105
|
-
|
|
3253
|
+
const lockBusy = msg.includes(MIGRATION_LOCK_BUSY_MESSAGE);
|
|
3254
|
+
if (MIGRATION_RACE_PATTERN.test(msg) || lockBusy) {
|
|
3255
|
+
if (await waitForConcurrentMigrator(db, options?.raceWaitMs)) return { applied };
|
|
3256
|
+
if (lockBusy) throw new ConcurrentMigrationTimeoutError(options?.raceWaitMs ?? MIGRATION_RACE_WAIT_MS);
|
|
3106
3257
|
}
|
|
3107
3258
|
const failedSuffix = failedMigration ? ` (migration: ${failedMigration.migrationName})` : "";
|
|
3108
3259
|
throw new Error(`Migration failed: ${msg || "unknown error"}${failedSuffix}`);
|
|
@@ -3123,5 +3274,5 @@ async function rollbackMigration(db, options) {
|
|
|
3123
3274
|
}
|
|
3124
3275
|
|
|
3125
3276
|
//#endregion
|
|
3126
|
-
export {
|
|
3127
|
-
//# sourceMappingURL=runner-
|
|
3277
|
+
export { runMigrations as a, rollbackMigration as i, MIGRATION_RACE_WAIT_MS as n, __exportAll as o, getMigrationStatus as r, ConcurrentMigrationTimeoutError as t };
|
|
3278
|
+
//# sourceMappingURL=runner-DfnZ5eUr.mjs.map
|