emdash 0.35.0 → 0.37.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/activation-K0kGBWuJ.mjs +382 -0
- package/dist/activation-K0kGBWuJ.mjs.map +1 -0
- package/dist/{adapters-Bb1vG41D.d.mts → adapters-BDQwg236.d.mts} +6 -4
- package/dist/{adapters-Bb1vG41D.d.mts.map → adapters-BDQwg236.d.mts.map} +1 -1
- package/dist/{allowed-origins-DW7sYyqg.mjs → allowed-origins-BGglilcs.mjs} +2 -2
- package/dist/{allowed-origins-DW7sYyqg.mjs.map → allowed-origins-BGglilcs.mjs.map} +1 -1
- package/dist/api/route-utils.d.mts +3 -3
- package/dist/api/route-utils.mjs +23 -21
- package/dist/api/route-utils.mjs.map +1 -1
- package/dist/api/schemas/index.d.mts +2 -2
- package/dist/api/schemas/index.mjs +5 -5
- package/dist/api-Dz6rgoa3.mjs +10040 -0
- package/dist/api-Dz6rgoa3.mjs.map +1 -0
- package/dist/{api-tokens-KO24G1Fd.mjs → api-tokens-BSsQACNe.mjs} +2 -2
- package/dist/{api-tokens-KO24G1Fd.mjs.map → api-tokens-BSsQACNe.mjs.map} +1 -1
- package/dist/{apply-kUDt80-G.mjs → apply-B4SIOxR1.mjs} +34 -35
- package/dist/{apply-kUDt80-G.mjs.map → apply-B4SIOxR1.mjs.map} +1 -1
- package/dist/astro/image-endpoint.mjs +2 -2
- package/dist/astro/image-endpoint.mjs.map +1 -1
- package/dist/astro/index.d.mts +12 -12
- package/dist/astro/index.d.mts.map +1 -1
- package/dist/astro/index.mjs +128 -44
- package/dist/astro/index.mjs.map +1 -1
- package/dist/astro/middleware/auth.d.mts +10 -10
- package/dist/astro/middleware/auth.d.mts.map +1 -1
- package/dist/astro/middleware/auth.mjs +10 -7
- package/dist/astro/middleware/auth.mjs.map +1 -1
- package/dist/astro/middleware/media-usage-write-fence.mjs +2 -2
- package/dist/astro/middleware/redirect.mjs +4 -4
- package/dist/astro/middleware/request-context.mjs +3 -3
- package/dist/astro/middleware/setup.mjs +1 -1
- package/dist/astro/middleware.d.mts +11 -12
- package/dist/astro/middleware.d.mts.map +1 -1
- package/dist/astro/middleware.mjs +237 -1412
- package/dist/astro/middleware.mjs.map +1 -1
- package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +6 -6
- package/dist/astro/routes/api/admin/allowed-domains/index.mjs +6 -6
- package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +3 -3
- package/dist/astro/routes/api/admin/api-tokens/index.d.mts.map +1 -1
- package/dist/astro/routes/api/admin/api-tokens/index.mjs +5 -5
- package/dist/astro/routes/api/admin/api-tokens/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +4 -4
- package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +9 -9
- package/dist/astro/routes/api/admin/byline-fields/index.mjs +9 -9
- package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +9 -9
- package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +16 -16
- package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +16 -16
- package/dist/astro/routes/api/admin/bylines/index.mjs +16 -16
- package/dist/astro/routes/api/admin/comments/_id_/status.mjs +13 -13
- package/dist/astro/routes/api/admin/comments/_id_.mjs +5 -5
- package/dist/astro/routes/api/admin/comments/bulk.mjs +10 -10
- package/dist/astro/routes/api/admin/comments/counts.mjs +5 -5
- package/dist/astro/routes/api/admin/comments/index.mjs +10 -10
- package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +4 -4
- package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +3 -3
- package/dist/astro/routes/api/admin/media-usage/activation.d.mts +9 -0
- package/dist/astro/routes/api/admin/media-usage/activation.d.mts.map +1 -0
- package/dist/astro/routes/api/admin/media-usage/activation.mjs +46 -0
- package/dist/astro/routes/api/admin/media-usage/activation.mjs.map +1 -0
- package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs +14 -13
- package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs +14 -13
- package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs.map +1 -1
- package/dist/astro/routes/api/admin/media-usage/progress.d.mts +9 -0
- package/dist/astro/routes/api/admin/media-usage/progress.d.mts.map +1 -0
- package/dist/astro/routes/api/admin/media-usage/progress.mjs +44 -0
- package/dist/astro/routes/api/admin/media-usage/progress.mjs.map +1 -0
- package/dist/astro/routes/api/admin/media-usage/repair.mjs +16 -11
- package/dist/astro/routes/api/admin/media-usage/repair.mjs.map +1 -1
- package/dist/astro/routes/api/admin/media-usage/work/index.mjs +14 -13
- package/dist/astro/routes/api/admin/media-usage/work/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/media-usage/work/retry.mjs +14 -13
- package/dist/astro/routes/api/admin/media-usage/work/retry.mjs.map +1 -1
- package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +4 -4
- package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/admin/oauth-clients/index.mjs +4 -4
- package/dist/astro/routes/api/admin/oauth-clients/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +55 -49
- package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +55 -49
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +53 -47
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/mcp.mjs +4 -4
- package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs +53 -47
- package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +54 -48
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +54 -48
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/index.mjs +53 -47
- package/dist/astro/routes/api/admin/plugins/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +2 -2
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +53 -47
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +54 -48
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +53 -47
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +54 -48
- 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 +60 -50
- package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/artifact.d.mts.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +179 -139
- 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 +61 -51
- package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/verify.d.mts +8 -0
- package/dist/astro/routes/api/admin/plugins/registry/verify.d.mts.map +1 -0
- package/dist/astro/routes/api/admin/plugins/registry/verify.mjs +93 -0
- package/dist/astro/routes/api/admin/plugins/registry/verify.mjs.map +1 -0
- package/dist/astro/routes/api/admin/plugins/updates.mjs +53 -47
- package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +53 -47
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +2 -2
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +53 -47
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/users/_id_/disable.mjs +2 -2
- package/dist/astro/routes/api/admin/users/_id_/enable.mjs +1 -1
- package/dist/astro/routes/api/admin/users/_id_/index.mjs +7 -7
- package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +3 -3
- package/dist/astro/routes/api/admin/users/index.mjs +6 -6
- package/dist/astro/routes/api/auth/dev-bypass.mjs +3 -3
- package/dist/astro/routes/api/auth/invite/accept.mjs +1 -1
- package/dist/astro/routes/api/auth/invite/complete.mjs +11 -11
- package/dist/astro/routes/api/auth/invite/index.mjs +8 -8
- package/dist/astro/routes/api/auth/invite/register-options.mjs +10 -10
- package/dist/astro/routes/api/auth/logout.mjs +2 -2
- package/dist/astro/routes/api/auth/magic-link/send.mjs +10 -10
- package/dist/astro/routes/api/auth/magic-link/verify.mjs +2 -2
- package/dist/astro/routes/api/auth/me.d.mts.map +1 -1
- package/dist/astro/routes/api/auth/me.mjs +19 -9
- package/dist/astro/routes/api/auth/me.mjs.map +1 -1
- package/dist/astro/routes/api/auth/mode.mjs +2 -2
- package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +4 -4
- package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
- package/dist/astro/routes/api/auth/passkey/_id_.mjs +6 -6
- package/dist/astro/routes/api/auth/passkey/index.mjs +1 -1
- package/dist/astro/routes/api/auth/passkey/options.mjs +12 -12
- package/dist/astro/routes/api/auth/passkey/register/options.mjs +10 -10
- package/dist/astro/routes/api/auth/passkey/register/verify.mjs +11 -11
- package/dist/astro/routes/api/auth/passkey/verify.mjs +11 -11
- package/dist/astro/routes/api/auth/signup/complete.mjs +11 -11
- package/dist/astro/routes/api/auth/signup/request.mjs +10 -10
- package/dist/astro/routes/api/auth/signup/verify.mjs +1 -1
- package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +14 -14
- package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +13 -13
- package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.d.mts.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +14 -5
- package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +11 -11
- package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +13 -10
- package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs +17 -15
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs +17 -15
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +8 -8
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +14 -14
- package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/_id_/unpublish.d.mts.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +14 -5
- package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_.mjs +8 -8
- package/dist/astro/routes/api/content/_collection_/authors.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/index.mjs +8 -8
- package/dist/astro/routes/api/content/_collection_/trash.mjs +7 -7
- package/dist/astro/routes/api/dashboard.mjs +8 -8
- package/dist/astro/routes/api/dev/emails.mjs +2 -2
- package/dist/astro/routes/api/import/probe.d.mts +3 -3
- package/dist/astro/routes/api/import/probe.mjs +17 -17
- package/dist/astro/routes/api/import/wordpress/analyze.mjs +2 -2
- package/dist/astro/routes/api/import/wordpress/execute.d.mts +11 -11
- package/dist/astro/routes/api/import/wordpress/execute.mjs +13 -13
- package/dist/astro/routes/api/import/wordpress/media.d.mts +10 -10
- package/dist/astro/routes/api/import/wordpress/media.mjs +11 -11
- package/dist/astro/routes/api/import/wordpress/prepare.mjs +9 -9
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +11 -11
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +12 -10
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +17 -17
- package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +11 -11
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +27 -27
- package/dist/astro/routes/api/manifest.mjs +4 -4
- package/dist/astro/routes/api/manifest.mjs.map +1 -1
- package/dist/astro/routes/api/mcp.mjs +188 -65
- package/dist/astro/routes/api/mcp.mjs.map +1 -1
- package/dist/astro/routes/api/media/_id_/confirm.mjs +11 -11
- package/dist/astro/routes/api/media/_id_/replace.d.mts +8 -0
- package/dist/astro/routes/api/media/_id_/replace.d.mts.map +1 -0
- package/dist/astro/routes/api/media/_id_/replace.mjs +91 -0
- package/dist/astro/routes/api/media/_id_/replace.mjs.map +1 -0
- package/dist/astro/routes/api/media/_id_/upload.mjs +6 -6
- package/dist/astro/routes/api/media/_id_/usage.mjs +18 -13
- package/dist/astro/routes/api/media/_id_/usage.mjs.map +1 -1
- package/dist/astro/routes/api/media/_id_.d.mts.map +1 -1
- package/dist/astro/routes/api/media/_id_.mjs +21 -13
- package/dist/astro/routes/api/media/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/media/file/_...key_.d.mts.map +1 -1
- package/dist/astro/routes/api/media/file/_...key_.mjs +3 -2
- package/dist/astro/routes/api/media/file/_...key_.mjs.map +1 -1
- package/dist/astro/routes/api/media/folders/_id_.d.mts +10 -0
- package/dist/astro/routes/api/media/folders/_id_.d.mts.map +1 -0
- package/dist/astro/routes/api/media/folders/_id_.mjs +52 -0
- package/dist/astro/routes/api/media/folders/_id_.mjs.map +1 -0
- package/dist/astro/routes/api/media/folders/index.d.mts +9 -0
- package/dist/astro/routes/api/media/folders/index.d.mts.map +1 -0
- package/dist/astro/routes/api/media/folders/index.mjs +41 -0
- package/dist/astro/routes/api/media/folders/index.mjs.map +1 -0
- package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +2 -2
- package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +2 -2
- package/dist/astro/routes/api/media/providers/index.mjs +2 -2
- package/dist/astro/routes/api/media/upload-url.mjs +16 -14
- 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 +59 -27
- package/dist/astro/routes/api/media.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/items/_id_.d.mts.map +1 -1
- package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +20 -13
- package/dist/astro/routes/api/menus/_name_/items/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/items.d.mts.map +1 -1
- package/dist/astro/routes/api/menus/_name_/items.mjs +15 -11
- package/dist/astro/routes/api/menus/_name_/items.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/reorder.d.mts.map +1 -1
- package/dist/astro/routes/api/menus/_name_/reorder.mjs +15 -11
- package/dist/astro/routes/api/menus/_name_/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_/translations.d.mts.map +1 -1
- package/dist/astro/routes/api/menus/_name_/translations.mjs +16 -12
- package/dist/astro/routes/api/menus/_name_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/menus/_name_.d.mts.map +1 -1
- package/dist/astro/routes/api/menus/_name_.mjs +21 -14
- package/dist/astro/routes/api/menus/_name_.mjs.map +1 -1
- package/dist/astro/routes/api/menus/index.d.mts.map +1 -1
- package/dist/astro/routes/api/menus/index.mjs +15 -11
- package/dist/astro/routes/api/menus/index.mjs.map +1 -1
- package/dist/astro/routes/api/oauth/authorize.mjs +6 -6
- package/dist/astro/routes/api/oauth/device/authorize.mjs +5 -5
- package/dist/astro/routes/api/oauth/device/code.mjs +8 -8
- package/dist/astro/routes/api/oauth/device/token.mjs +7 -7
- package/dist/astro/routes/api/oauth/register.mjs +2 -2
- package/dist/astro/routes/api/oauth/token/refresh.mjs +5 -5
- package/dist/astro/routes/api/oauth/token/revoke.mjs +5 -5
- package/dist/astro/routes/api/oauth/token.mjs +5 -5
- package/dist/astro/routes/api/openapi.json.mjs +253 -40
- package/dist/astro/routes/api/openapi.json.mjs.map +1 -1
- package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +4 -4
- package/dist/astro/routes/api/redirects/404s/index.mjs +10 -10
- package/dist/astro/routes/api/redirects/404s/summary.mjs +10 -10
- package/dist/astro/routes/api/redirects/_id_.mjs +11 -11
- package/dist/astro/routes/api/redirects/index.mjs +11 -11
- package/dist/astro/routes/api/relations/_id_/index.mjs +17 -15
- package/dist/astro/routes/api/relations/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/relations/_id_/translations.mjs +12 -10
- package/dist/astro/routes/api/relations/_id_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/relations/index.mjs +17 -15
- package/dist/astro/routes/api/relations/index.mjs.map +1 -1
- package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +2 -2
- package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +3 -3
- package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +53 -47
- package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +53 -47
- 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 +53 -47
- package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +53 -47
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/index.mjs +53 -47
- package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/reorder.mjs +53 -47
- package/dist/astro/routes/api/schema/collections/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/schema/index.mjs +10 -8
- package/dist/astro/routes/api/schema/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs +53 -47
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/schema/orphans/index.mjs +53 -47
- package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
- package/dist/astro/routes/api/search/enable.mjs +10 -10
- package/dist/astro/routes/api/search/index.mjs +9 -9
- package/dist/astro/routes/api/search/rebuild.mjs +10 -10
- package/dist/astro/routes/api/search/stats.mjs +5 -5
- package/dist/astro/routes/api/search/suggest.mjs +9 -9
- package/dist/astro/routes/api/sections/_slug_.mjs +9 -9
- package/dist/astro/routes/api/sections/index.mjs +9 -9
- package/dist/astro/routes/api/settings/backups/archives/_name_.mjs +6 -6
- package/dist/astro/routes/api/settings/backups/archives/index.mjs +5 -5
- package/dist/astro/routes/api/settings/backups/export.mjs +6 -6
- package/dist/astro/routes/api/settings/backups/index.mjs +7 -7
- package/dist/astro/routes/api/settings/email.mjs +5 -5
- package/dist/astro/routes/api/settings/email.mjs.map +1 -1
- package/dist/astro/routes/api/settings.d.mts.map +1 -1
- package/dist/astro/routes/api/settings.mjs +20 -16
- package/dist/astro/routes/api/settings.mjs.map +1 -1
- package/dist/astro/routes/api/setup/admin-verify.mjs +12 -12
- package/dist/astro/routes/api/setup/admin.mjs +11 -11
- package/dist/astro/routes/api/setup/dev-bypass.d.mts.map +1 -1
- package/dist/astro/routes/api/setup/dev-bypass.mjs +35 -28
- package/dist/astro/routes/api/setup/dev-bypass.mjs.map +1 -1
- package/dist/astro/routes/api/setup/dev-reset.mjs +2 -2
- package/dist/astro/routes/api/setup/index.mjs +32 -30
- package/dist/astro/routes/api/setup/index.mjs.map +1 -1
- package/dist/astro/routes/api/setup/status.mjs +3 -3
- package/dist/astro/routes/api/snapshot.mjs +7 -7
- package/dist/astro/routes/api/taxonomies/_name_/reorder.d.mts.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs +20 -16
- package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.d.mts.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +21 -17
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.d.mts.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +25 -18
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.d.mts.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +20 -16
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/translations.mjs +14 -14
- package/dist/astro/routes/api/taxonomies/_name_.d.mts.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_.mjs +26 -19
- package/dist/astro/routes/api/taxonomies/_name_.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/index.d.mts.map +1 -1
- package/dist/astro/routes/api/taxonomies/index.mjs +20 -16
- package/dist/astro/routes/api/taxonomies/index.mjs.map +1 -1
- package/dist/astro/routes/api/themes/preview.mjs +5 -5
- package/dist/astro/routes/api/typegen.mjs +4 -4
- package/dist/astro/routes/api/well-known/auth.mjs +2 -2
- package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +2 -2
- package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +2 -2
- package/dist/astro/routes/api/widget-areas/_name_/reorder.d.mts.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +10 -8
- package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.d.mts.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +17 -13
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_/widgets.d.mts.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +15 -12
- package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_.d.mts.map +1 -1
- package/dist/astro/routes/api/widget-areas/_name_.mjs +8 -6
- package/dist/astro/routes/api/widget-areas/_name_.mjs.map +1 -1
- package/dist/astro/routes/api/widget-areas/index.d.mts.map +1 -1
- package/dist/astro/routes/api/widget-areas/index.mjs +15 -12
- package/dist/astro/routes/api/widget-areas/index.mjs.map +1 -1
- package/dist/astro/routes/api/widget-components.mjs +2 -2
- package/dist/astro/routes/robots.txt.mjs +7 -7
- package/dist/astro/routes/sitemap-_collection_.xml.mjs +10 -10
- package/dist/astro/routes/sitemap.xml.mjs +8 -8
- package/dist/astro/types.d.mts +37 -17
- 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-DUElxgOQ.mjs → authorize-Bkf_UHhD.mjs} +2 -2
- package/dist/{authorize-DUElxgOQ.mjs.map → authorize-Bkf_UHhD.mjs.map} +1 -1
- package/dist/{backup-DWYpJlLj.mjs → backup-rwVAl9NI.mjs} +5 -5
- package/dist/{backup-DWYpJlLj.mjs.map → backup-rwVAl9NI.mjs.map} +1 -1
- package/dist/{bundle-vn56sLos.mjs → bundle-C8S2Zl6U.mjs} +4 -4
- package/dist/{bundle-vn56sLos.mjs.map → bundle-C8S2Zl6U.mjs.map} +1 -1
- package/dist/{byline-yjvWq4ip.mjs → byline-DuhF7NWl.mjs} +27 -14
- package/dist/byline-DuhF7NWl.mjs.map +1 -0
- package/dist/{byline-fields-txaLGoME.mjs → byline-fields-BovY4KYM.mjs} +2 -2
- package/dist/{byline-fields-txaLGoME.mjs.map → byline-fields-BovY4KYM.mjs.map} +1 -1
- package/dist/{byline-registry-DDun8sxh.mjs → byline-registry-Bpu9-MVs.mjs} +2 -2
- package/dist/{byline-registry-DDun8sxh.mjs.map → byline-registry-Bpu9-MVs.mjs.map} +1 -1
- package/dist/{bylines-DjXS5p0P.mjs → bylines-CJ5nd6Lw.mjs} +7 -7
- package/dist/{bylines-DjXS5p0P.mjs.map → bylines-CJ5nd6Lw.mjs.map} +1 -1
- package/dist/{bylines-Bu7pchQ4.mjs → bylines-RwBAeOF1.mjs} +3 -3
- package/dist/{bylines-Bu7pchQ4.mjs.map → bylines-RwBAeOF1.mjs.map} +1 -1
- package/dist/{cache-C46-3Irl.mjs → cache-BF5Kvn59.mjs} +4 -4
- package/dist/{cache-C46-3Irl.mjs.map → cache-BF5Kvn59.mjs.map} +1 -1
- package/dist/capture-triggers-CNW1q3HK.mjs +362 -0
- package/dist/capture-triggers-CNW1q3HK.mjs.map +1 -0
- package/dist/{challenge-store-SIL5DsF2.mjs → challenge-store-DQN_Yrck.mjs} +5 -3
- package/dist/challenge-store-DQN_Yrck.mjs.map +1 -0
- package/dist/chrome-tags-D8fiZG94.mjs +24 -0
- package/dist/chrome-tags-D8fiZG94.mjs.map +1 -0
- package/dist/{chunks-fiZ8G9RJ.mjs → chunks-C4szrD8o.mjs} +2 -2
- package/dist/{chunks-fiZ8G9RJ.mjs.map → chunks-C4szrD8o.mjs.map} +1 -1
- package/dist/cli/index.mjs +37 -53
- package/dist/cli/index.mjs.map +1 -1
- package/dist/client/cf-access.d.mts +1 -1
- package/dist/client/index.d.mts +74 -4
- package/dist/client/index.d.mts.map +1 -1
- package/dist/client/index.mjs +54 -2
- package/dist/client/index.mjs.map +1 -1
- package/dist/{collection-deletion-DQPvMD8R.mjs → collection-deletion-Bj07NHbj.mjs} +13 -356
- package/dist/collection-deletion-Bj07NHbj.mjs.map +1 -0
- package/dist/{comment-reaction-D-2J84UE.mjs → comment-reaction-BhrvSHml.mjs} +2 -2
- package/dist/{comment-reaction-D-2J84UE.mjs.map → comment-reaction-BhrvSHml.mjs.map} +1 -1
- package/dist/{comment-Dxlep6cE.mjs → comment-vxOzWbZN.mjs} +2 -2
- package/dist/{comment-Dxlep6cE.mjs.map → comment-vxOzWbZN.mjs.map} +1 -1
- package/dist/{comments-CTfZtLmM.mjs → comments-Ct4ensnf.mjs} +2 -2
- package/dist/{comments-CTfZtLmM.mjs.map → comments-Ct4ensnf.mjs.map} +1 -1
- package/dist/{components-CQy3lh9x.mjs → components-DJbo1z0S.mjs} +1 -1
- package/dist/{components-CQy3lh9x.mjs.map → components-DJbo1z0S.mjs.map} +1 -1
- package/dist/{config-COQzTe5Q.d.mts → config-B9eZ340f.d.mts} +1 -1
- package/dist/{config-COQzTe5Q.d.mts.map → config-B9eZ340f.d.mts.map} +1 -1
- package/dist/config-it29yDLA.mjs +1163 -0
- package/dist/config-it29yDLA.mjs.map +1 -0
- package/dist/{content-ZHCc1ngN.mjs → content-DjvM0T92.mjs} +86 -45
- package/dist/content-DjvM0T92.mjs.map +1 -0
- package/dist/{content-list-query-wJ2WN8Vp.d.mts → content-list-query-Btqd4uV2.d.mts} +1 -1
- package/dist/{content-list-query-wJ2WN8Vp.d.mts.map → content-list-query-Btqd4uV2.d.mts.map} +1 -1
- package/dist/{content-refresh-B_8SJzuU.mjs → content-refresh-Bwp-8yGy.mjs} +1139 -111
- package/dist/content-refresh-Bwp-8yGy.mjs.map +1 -0
- package/dist/{media-usage-BZCydfvu.mjs → content-repair-Czdp7jz5.mjs} +5 -196
- package/dist/content-repair-Czdp7jz5.mjs.map +1 -0
- package/dist/{context-ZldbZcle.mjs → context-CX6gxOLW.mjs} +55 -20
- package/dist/context-CX6gxOLW.mjs.map +1 -0
- package/dist/{cron-Y9aLtgrA.mjs → cron-C6o7VppJ.mjs} +1 -1
- package/dist/{cron-Y9aLtgrA.mjs.map → cron-C6o7VppJ.mjs.map} +1 -1
- package/dist/{dashboard-DvHbk_cv.mjs → dashboard-C2kTeeRI.mjs} +5 -5
- package/dist/{dashboard-DvHbk_cv.mjs.map → dashboard-C2kTeeRI.mjs.map} +1 -1
- package/dist/db/index.d.mts +3 -3
- package/dist/db/index.mjs +3 -3
- package/dist/db/index.mjs.map +1 -1
- package/dist/db/libsql-migrations.d.mts +1 -1
- package/dist/db/libsql-migrations.mjs +4 -4
- package/dist/db/libsql.d.mts +1 -1
- package/dist/db/postgres-migrations.d.mts +1 -1
- package/dist/db/postgres-migrations.mjs +4 -4
- package/dist/db/postgres.d.mts +1 -1
- package/dist/db/postgres.d.mts.map +1 -1
- package/dist/db/postgres.mjs +19 -3
- package/dist/db/postgres.mjs.map +1 -1
- package/dist/db/sqlite-migrations.d.mts +1 -1
- package/dist/db/sqlite-migrations.mjs +4 -4
- package/dist/db/sqlite.d.mts +1 -1
- package/dist/db/sqlite.mjs +3 -3
- package/dist/db/sqlite.mjs.map +1 -1
- package/dist/{default-DdDl3fxv.mjs → default-Clra32mw.mjs} +1 -1
- package/dist/{default-DdDl3fxv.mjs.map → default-Clra32mw.mjs.map} +1 -1
- package/dist/{deferred-tasks-SDWxrgzJ.d.mts → deferred-tasks-CvDETTJO.d.mts} +1 -1
- package/dist/{deferred-tasks-SDWxrgzJ.d.mts.map → deferred-tasks-CvDETTJO.d.mts.map} +1 -1
- package/dist/dev-typegen-DzOPfsNj.mjs +29 -0
- package/dist/dev-typegen-DzOPfsNj.mjs.map +1 -0
- package/dist/{device-flow-C0GdD_z8.mjs → device-flow-D2oCWvLJ.mjs} +5 -5
- package/dist/{device-flow-C0GdD_z8.mjs.map → device-flow-D2oCWvLJ.mjs.map} +1 -1
- package/dist/{direct-executor-CDXeJCSs.mjs → direct-executor-Bfa5_ToE.mjs} +3 -3
- package/dist/{direct-executor-CDXeJCSs.mjs.map → direct-executor-Bfa5_ToE.mjs.map} +1 -1
- package/dist/{dist-D_6CKR8z.mjs → dist-89xCrGqi.mjs} +1 -1
- package/dist/{dist-D_6CKR8z.mjs.map → dist-89xCrGqi.mjs.map} +1 -1
- package/dist/{email-console-BHNjIwiB.mjs → email-console-Dzb6uGYa.mjs} +1 -1
- package/dist/{email-console-BHNjIwiB.mjs.map → email-console-Dzb6uGYa.mjs.map} +1 -1
- package/dist/{enrich-_ySMEvEE.mjs → enrich-BX0IDp4z.mjs} +3 -3
- package/dist/{enrich-_ySMEvEE.mjs.map → enrich-BX0IDp4z.mjs.map} +1 -1
- package/dist/{error-DupyJZE2.mjs → error-DFrQjppn.mjs} +2 -2
- package/dist/{error-DupyJZE2.mjs.map → error-DFrQjppn.mjs.map} +1 -1
- package/dist/{errors-CLUPm7aD.mjs → errors-DsVoDUjJ.mjs} +24 -2
- package/dist/errors-DsVoDUjJ.mjs.map +1 -0
- package/dist/{escape-DUY2r2Zs.mjs → escape-HmHTC1Is.mjs} +1 -1
- package/dist/{escape-DUY2r2Zs.mjs.map → escape-HmHTC1Is.mjs.map} +1 -1
- package/dist/{field-defs-cache-BzwBlJrR.mjs → field-defs-cache-BM4SIRqH.mjs} +5 -5
- package/dist/{field-defs-cache-BzwBlJrR.mjs.map → field-defs-cache-BM4SIRqH.mjs.map} +1 -1
- package/dist/focal-point-BeWFo6Xx.mjs +23 -0
- package/dist/focal-point-BeWFo6Xx.mjs.map +1 -0
- package/dist/{fts-manager-DyZEohZC.mjs → fts-manager-Do1BlW2r.mjs} +3 -3
- package/dist/{fts-manager-DyZEohZC.mjs.map → fts-manager-Do1BlW2r.mjs.map} +1 -1
- package/dist/{hash-Cg0TXJPV.mjs → hash-3JJPlHF2.mjs} +1 -1
- package/dist/{hash-Cg0TXJPV.mjs.map → hash-3JJPlHF2.mjs.map} +1 -1
- package/dist/hook-result-DCh2WUpe.d.mts +31 -0
- package/dist/hook-result-DCh2WUpe.d.mts.map +1 -0
- package/dist/{hreflang-DwT2E0Sa.d.mts → hreflang-B6hbAuuO.d.mts} +2 -2
- package/dist/{hreflang-DwT2E0Sa.d.mts.map → hreflang-B6hbAuuO.d.mts.map} +1 -1
- package/dist/{hreflang-BBe83kKa.mjs → hreflang-DQbPZliA.mjs} +7 -7
- package/dist/{hreflang-BBe83kKa.mjs.map → hreflang-DQbPZliA.mjs.map} +1 -1
- package/dist/{identity-Ys6Dlc9C.mjs → identity-DksvEazf.mjs} +3 -3
- package/dist/{identity-Ys6Dlc9C.mjs.map → identity-DksvEazf.mjs.map} +1 -1
- package/dist/{import-DPkLmeXO.mjs → import-CJpaBBBT.mjs} +6 -6
- package/dist/{import-DPkLmeXO.mjs.map → import-CJpaBBBT.mjs.map} +1 -1
- package/dist/{index-BVBZj4-7.d.mts → index-BJNMCWmu.d.mts} +267 -82
- package/dist/index-BJNMCWmu.d.mts.map +1 -0
- package/dist/{index-C9KuQyO-.d.mts → index-Du8K7bWa.d.mts} +3 -3
- package/dist/{index-C9KuQyO-.d.mts.map → index-Du8K7bWa.d.mts.map} +1 -1
- package/dist/index.d.mts +22 -21
- package/dist/index.mjs +79 -73
- 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-YJ2xl3ra.mjs → load-CawHjTOH.mjs} +2 -2
- package/dist/{load-YJ2xl3ra.mjs.map → load-CawHjTOH.mjs.map} +1 -1
- package/dist/{loader-CdG_Ci3H.mjs → loader-Z8vl7zTq.mjs} +48 -13
- package/dist/loader-Z8vl7zTq.mjs.map +1 -0
- package/dist/{manifest-builder-B252yQUf.mjs → manifest-builder-COtzuca2.mjs} +2 -2
- package/dist/{manifest-builder-B252yQUf.mjs.map → manifest-builder-COtzuca2.mjs.map} +1 -1
- package/dist/{manifest-schema-BXbUAHod.mjs → manifest-schema-BNWwR8Vd.mjs} +5 -5
- package/dist/manifest-schema-BNWwR8Vd.mjs.map +1 -0
- package/dist/media/image-endpoint.d.mts +4 -2
- package/dist/media/image-endpoint.d.mts.map +1 -1
- package/dist/media/image-endpoint.mjs +6 -4
- package/dist/media/image-endpoint.mjs.map +1 -1
- package/dist/media/index.d.mts +1 -1
- package/dist/media/index.mjs +13 -3
- package/dist/media/index.mjs.map +1 -1
- package/dist/media/local-runtime.d.mts +14 -12
- package/dist/media/local-runtime.d.mts.map +1 -1
- package/dist/media/local-runtime.mjs +12 -6
- package/dist/media/local-runtime.mjs.map +1 -1
- package/dist/{media-CzhAn2--.mjs → media-BBm8Wg3f.mjs} +69 -12
- package/dist/media-BBm8Wg3f.mjs.map +1 -0
- package/dist/{media-BWWWb8kg.mjs → media-BHjus86Y.mjs} +133 -9
- package/dist/media-BHjus86Y.mjs.map +1 -0
- package/dist/{media-allowlist-D6x-Us02.mjs → media-allowlist-CoTBWoDp.mjs} +3 -2
- package/dist/media-allowlist-CoTBWoDp.mjs.map +1 -0
- package/dist/media-folders-BGkATs8n.mjs +210 -0
- package/dist/media-folders-BGkATs8n.mjs.map +1 -0
- package/dist/{media-upload-CHBVn6m-.mjs → media-upload-BCidR-EY.mjs} +9 -9
- package/dist/{media-upload-CHBVn6m-.mjs.map → media-upload-BCidR-EY.mjs.map} +1 -1
- package/dist/{media-url-BvoX88FA.mjs → media-url-DHoPr0hq.mjs} +1 -1
- package/dist/{media-url-BvoX88FA.mjs.map → media-url-DHoPr0hq.mjs.map} +1 -1
- package/dist/media-usage-CdY5jhSR.mjs +1833 -0
- package/dist/media-usage-CdY5jhSR.mjs.map +1 -0
- package/dist/media-usage-activation-BgeMtK5C.mjs +78 -0
- package/dist/media-usage-activation-BgeMtK5C.mjs.map +1 -0
- package/dist/{media-usage-work-CLo_6tct.mjs → media-usage-work-CnGCdHxx.mjs} +4 -4
- package/dist/{media-usage-work-CLo_6tct.mjs.map → media-usage-work-CnGCdHxx.mjs.map} +1 -1
- package/dist/{media-usage-work-DrCbqBcl.mjs → media-usage-work-D6D9sMCA.mjs} +221 -59
- package/dist/media-usage-work-D6D9sMCA.mjs.map +1 -0
- package/dist/{media-usage-write-fence-aHEgN1zB.mjs → media-usage-write-fence-hjeD4u7s.mjs} +2 -2
- package/dist/{media-usage-write-fence-aHEgN1zB.mjs.map → media-usage-write-fence-hjeD4u7s.mjs.map} +1 -1
- package/dist/{menus-DSo5QeW0.mjs → menus-6qSwTNxG.mjs} +375 -107
- package/dist/menus-6qSwTNxG.mjs.map +1 -0
- package/dist/{menus-TCNSd2vp.mjs → menus-uvPLXMZf.mjs} +4 -4
- package/dist/{menus-TCNSd2vp.mjs.map → menus-uvPLXMZf.mjs.map} +1 -1
- package/dist/migrations/index.d.mts +1 -1
- package/dist/migrations/index.mjs +3 -3
- package/dist/{mime-DfIVjNkr.mjs → mime-CUIG6x84.mjs} +1 -1
- package/dist/mime-CUIG6x84.mjs.map +1 -0
- package/dist/{mode-BDoH_WcF.mjs → mode-DN_WneRx.mjs} +1 -1
- package/dist/{mode-BDoH_WcF.mjs.map → mode-DN_WneRx.mjs.map} +1 -1
- package/dist/node-sqlite-compat-BuJXIeMz.mjs +46 -0
- package/dist/node-sqlite-compat-BuJXIeMz.mjs.map +1 -0
- package/dist/{normalize-Bc-s_r-a.mjs → normalize-C2xNjTSG.mjs} +36 -5
- package/dist/normalize-C2xNjTSG.mjs.map +1 -0
- package/dist/{oauth-authorization-iOikmrJd.mjs → oauth-authorization-Dj6Kwc21.mjs} +5 -5
- package/dist/{oauth-authorization-iOikmrJd.mjs.map → oauth-authorization-Dj6Kwc21.mjs.map} +1 -1
- package/dist/{oauth-clients-CvI0nHMJ.mjs → oauth-clients-FD7I0J8m.mjs} +1 -1
- package/dist/{oauth-clients-CvI0nHMJ.mjs.map → oauth-clients-FD7I0J8m.mjs.map} +1 -1
- package/dist/{oauth-state-store-Ba8KZlwW.mjs → oauth-state-store-DkmDOmHs.mjs} +1 -1
- package/dist/{oauth-state-store-Ba8KZlwW.mjs.map → oauth-state-store-DkmDOmHs.mjs.map} +1 -1
- package/dist/{oauth-user-lookup-C5SQwGYC.mjs → oauth-user-lookup-CvIwGpYd.mjs} +1 -1
- package/dist/{oauth-user-lookup-C5SQwGYC.mjs.map → oauth-user-lookup-CvIwGpYd.mjs.map} +1 -1
- package/dist/object-cache/memory.d.mts +1 -1
- package/dist/{object-cache-71tPfV4A.mjs → object-cache-DVKnyOfy.mjs} +19 -3
- package/dist/object-cache-DVKnyOfy.mjs.map +1 -0
- package/dist/{options-CBXIHUoT.mjs → options-BHPeIbBd.mjs} +1 -1
- package/dist/{options-CBXIHUoT.mjs.map → options-BHPeIbBd.mjs.map} +1 -1
- package/dist/{options--hhz-jZ1.d.mts → options-CYb4y7hM.d.mts} +24 -11
- package/dist/options-CYb4y7hM.d.mts.map +1 -0
- package/dist/page/index.d.mts +2 -2
- package/dist/{parse-DFbuc-Fh.mjs → parse-Ckpg-Qfp.mjs} +2 -2
- package/dist/{parse-DFbuc-Fh.mjs.map → parse-Ckpg-Qfp.mjs.map} +1 -1
- package/dist/{passkey-config-DFAmUyuE.mjs → passkey-config-O_lj3y0k.mjs} +1 -1
- package/dist/{passkey-config-DFAmUyuE.mjs.map → passkey-config-O_lj3y0k.mjs.map} +1 -1
- package/dist/{patterns-CiyXeDgr.mjs → patterns-D9iDO3j8.mjs} +1 -1
- package/dist/{patterns-CiyXeDgr.mjs.map → patterns-D9iDO3j8.mjs.map} +1 -1
- package/dist/{placeholder-Dp0K3RkD.d.mts → placeholder-4X9BrRrp.d.mts} +7 -1
- package/dist/placeholder-4X9BrRrp.d.mts.map +1 -0
- package/dist/plugin-types.d.mts +8 -3
- package/dist/plugin-types.d.mts.map +1 -1
- package/dist/plugin-utils.d.mts +10 -10
- package/dist/plugins/adapt-sandbox-entry.d.mts +10 -10
- package/dist/plugins/adapt-sandbox-entry.mjs +2 -2
- package/dist/{policy-TluUIxuu.mjs → policy-Dhtwntrt.mjs} +2 -2
- package/dist/{policy-TluUIxuu.mjs.map → policy-Dhtwntrt.mjs.map} +1 -1
- package/dist/{portable-text-imBW5cHK.mjs → portable-text-U85hOafW.mjs} +1 -1
- package/dist/{portable-text-imBW5cHK.mjs.map → portable-text-U85hOafW.mjs.map} +1 -1
- package/dist/{preview-PW-nOnq4.mjs → preview-B_vJLvf8.mjs} +2 -2
- package/dist/{preview-PW-nOnq4.mjs.map → preview-B_vJLvf8.mjs.map} +1 -1
- package/dist/{protocol-DjsJHTlK.d.mts → protocol-JdD2YhY9.d.mts} +2 -2
- package/dist/{protocol-DjsJHTlK.d.mts.map → protocol-JdD2YhY9.d.mts.map} +1 -1
- package/dist/{public-url-CWoFhQT8.mjs → public-url-CarhZJgf.mjs} +1 -1
- package/dist/{public-url-CWoFhQT8.mjs.map → public-url-CarhZJgf.mjs.map} +1 -1
- package/dist/{query-zTVAR1Sl.mjs → query-BZKZcG5b.mjs} +15 -15
- package/dist/{query-zTVAR1Sl.mjs.map → query-BZKZcG5b.mjs.map} +1 -1
- package/dist/{query-BWs7O5Il.mjs → query-BndaFxxp.mjs} +5 -5
- package/dist/{query-BWs7O5Il.mjs.map → query-BndaFxxp.mjs.map} +1 -1
- package/dist/{rate-limit-Bx4g9m3p.mjs → rate-limit-BZmATC6W.mjs} +2 -2
- package/dist/{rate-limit-Bx4g9m3p.mjs.map → rate-limit-BZmATC6W.mjs.map} +1 -1
- package/dist/{redirect-COsS6SWJ.mjs → redirect-CZkbozu9.mjs} +2 -2
- package/dist/{redirect-COsS6SWJ.mjs.map → redirect-CZkbozu9.mjs.map} +1 -1
- package/dist/{redirect-BgAOGHDq.mjs → redirect-CzqnLxK-.mjs} +1 -1
- package/dist/{redirect-BgAOGHDq.mjs.map → redirect-CzqnLxK-.mjs.map} +1 -1
- package/dist/{redirects-DTDHWH31.mjs → redirects-BLNOWQTn.mjs} +64 -29
- package/dist/redirects-BLNOWQTn.mjs.map +1 -0
- package/dist/{redirects-DyChwDkG.mjs → redirects-CqzNM0KM.mjs} +5 -5
- package/dist/{redirects-DyChwDkG.mjs.map → redirects-CqzNM0KM.mjs.map} +1 -1
- package/dist/{registry-Cqa2I749.mjs → registry-AZAsRsor.mjs} +30 -126
- package/dist/registry-AZAsRsor.mjs.map +1 -0
- package/dist/{relation-BnHB0T4J.mjs → relation-04DfKRTO.mjs} +2 -2
- package/dist/{relation-BnHB0T4J.mjs.map → relation-04DfKRTO.mjs.map} +1 -1
- package/dist/{relations-BBApI4e2.mjs → relations-C4htk5sb.mjs} +7 -7
- package/dist/relations-C4htk5sb.mjs.map +1 -0
- package/dist/{relations-D5sM5fW0.mjs → relations-CcFwDJdJ.mjs} +4 -4
- package/dist/{relations-D5sM5fW0.mjs.map → relations-CcFwDJdJ.mjs.map} +1 -1
- package/dist/{relations-BHo5A8Zf.d.mts → relations-DnRK4YIT.d.mts} +347 -54
- package/dist/relations-DnRK4YIT.d.mts.map +1 -0
- package/dist/{request-cache-BSUptuJR.mjs → request-cache-DH9zdCOD.mjs} +1 -1
- package/dist/{request-cache-BSUptuJR.mjs.map → request-cache-DH9zdCOD.mjs.map} +1 -1
- package/dist/request-context.d.mts +1 -1
- package/dist/{request-meta-DgZJh3zG.mjs → request-meta-DYxLlnmz.mjs} +2 -2
- package/dist/{request-meta-DgZJh3zG.mjs.map → request-meta-DYxLlnmz.mjs.map} +1 -1
- package/dist/{resolve-DOhVEvty.mjs → resolve-prZ3mP7l.mjs} +1 -1
- package/dist/{resolve-DOhVEvty.mjs.map → resolve-prZ3mP7l.mjs.map} +1 -1
- package/dist/{runner-C1T11CfC.mjs → runner-BLIDKpmA.mjs} +471 -290
- package/dist/runner-BLIDKpmA.mjs.map +1 -0
- package/dist/{runner-BYHZn3Jy.d.mts → runner-YKfIMnaF.d.mts} +3 -2
- package/dist/runner-YKfIMnaF.d.mts.map +1 -0
- package/dist/runtime.d.mts +11 -11
- package/dist/runtime.mjs +1 -1
- package/dist/{schema-DZ5YVVZj.mjs → schema-CGnBeLiW.mjs} +3 -3
- package/dist/{schema-DZ5YVVZj.mjs.map → schema-CGnBeLiW.mjs.map} +1 -1
- package/dist/{schema-2AOsSn2v.mjs → schema-DYr-Vd-L.mjs} +36 -6
- package/dist/{schema-2AOsSn2v.mjs.map → schema-DYr-Vd-L.mjs.map} +1 -1
- package/dist/{scopes-8ClPF2bC.mjs → scopes-BhWvBavj.mjs} +3 -3
- package/dist/{scopes-8ClPF2bC.mjs.map → scopes-BhWvBavj.mjs.map} +1 -1
- package/dist/{search-u1QYdOCG.mjs → search-C-qDk4kx.mjs} +4 -4
- package/dist/{search-u1QYdOCG.mjs.map → search-C-qDk4kx.mjs.map} +1 -1
- package/dist/{secrets-BEgsAQEU.mjs → secrets-rEtHt-6z.mjs} +3 -3
- package/dist/{secrets-BEgsAQEU.mjs.map → secrets-rEtHt-6z.mjs.map} +1 -1
- package/dist/{sections-DmHviGyM.mjs → sections-B_nYvlwn.mjs} +2 -2
- package/dist/{sections-DmHviGyM.mjs.map → sections-B_nYvlwn.mjs.map} +1 -1
- package/dist/seed/index.d.mts +2 -2
- package/dist/seed/index.mjs +25 -23
- package/dist/seo/index.d.mts +3 -3
- package/dist/seo/index.mjs +17 -15
- package/dist/seo/index.mjs.map +1 -1
- package/dist/{seo-Dq4G-RrO.mjs → seo-926NRIgt.mjs} +3 -3
- package/dist/{seo-Dq4G-RrO.mjs.map → seo-926NRIgt.mjs.map} +1 -1
- package/dist/{seo-AFpVvTqr.mjs → seo-CVWkdv6x.mjs} +1 -1
- package/dist/{seo-AFpVvTqr.mjs.map → seo-CVWkdv6x.mjs.map} +1 -1
- package/dist/{service-BpArayPr.mjs → service-CJl3ZAYs.mjs} +3 -3
- package/dist/{service-BpArayPr.mjs.map → service-CJl3ZAYs.mjs.map} +1 -1
- package/dist/{session-user-BEorKVT-.mjs → session-user-BlMgqCHS.mjs} +1 -1
- package/dist/{session-user-BEorKVT-.mjs.map → session-user-BlMgqCHS.mjs.map} +1 -1
- package/dist/{settings-xRdoUZr0.mjs → settings--wobrkkC.mjs} +21 -8
- package/dist/settings--wobrkkC.mjs.map +1 -0
- package/dist/{settings-DE9xtzqd.mjs → settings-Cwm6o2jY.mjs} +3 -3
- package/dist/{settings-DE9xtzqd.mjs.map → settings-Cwm6o2jY.mjs.map} +1 -1
- package/dist/{setup-complete-BnT8pq_C.mjs → setup-complete-DQbClIN2.mjs} +2 -2
- package/dist/{setup-complete-BnT8pq_C.mjs.map → setup-complete-DQbClIN2.mjs.map} +1 -1
- package/dist/{setup-nonce-CBitf_oQ.mjs → setup-nonce-DZCFS2sn.mjs} +1 -1
- package/dist/{setup-nonce-CBitf_oQ.mjs.map → setup-nonce-DZCFS2sn.mjs.map} +1 -1
- package/dist/{single-flight-cache-B0eLKS6K.mjs → single-flight-cache-BPuGPdcN.mjs} +2 -2
- package/dist/{single-flight-cache-B0eLKS6K.mjs.map → single-flight-cache-BPuGPdcN.mjs.map} +1 -1
- package/dist/{site-url-DjpIXMXJ.mjs → site-url-BrxA_E9H.mjs} +3 -3
- package/dist/{site-url-DjpIXMXJ.mjs.map → site-url-BrxA_E9H.mjs.map} +1 -1
- package/dist/{snapshot-BBlGkb2q.mjs → snapshot--OCDTqdb.mjs} +1 -1
- package/dist/{snapshot-BBlGkb2q.mjs.map → snapshot--OCDTqdb.mjs.map} +1 -1
- package/dist/{ssrf-Cpvg_n3A.mjs → ssrf-5sIM5jzl.mjs} +23 -6
- package/dist/{ssrf-Cpvg_n3A.mjs.map → ssrf-5sIM5jzl.mjs.map} +1 -1
- package/dist/{state-DYwPue40.mjs → state-BpFVsJZB.mjs} +12 -4
- package/dist/state-BpFVsJZB.mjs.map +1 -0
- package/dist/{status-CWVYpbD8.mjs → status-B777-dXz.mjs} +1 -1
- package/dist/{status-CWVYpbD8.mjs.map → status-B777-dXz.mjs.map} +1 -1
- package/dist/storage/local.d.mts +2 -1
- package/dist/storage/local.d.mts.map +1 -1
- package/dist/storage/local.mjs +1 -1
- package/dist/storage/local.mjs.map +1 -1
- package/dist/storage/s3.d.mts +2 -1
- package/dist/storage/s3.d.mts.map +1 -1
- package/dist/storage/s3.mjs +3 -2
- package/dist/storage/s3.mjs.map +1 -1
- package/dist/{target-DixqqV5i.mjs → target-BmR0iTwz.mjs} +1 -1
- package/dist/{target-DixqqV5i.mjs.map → target-BmR0iTwz.mjs.map} +1 -1
- package/dist/{taxonomies-OHUIiIpI.mjs → taxonomies-DkAkMupr.mjs} +17 -14
- package/dist/taxonomies-DkAkMupr.mjs.map +1 -0
- package/dist/{taxonomies-BlrncHi9.mjs → taxonomies-Wfy_Lg12.mjs} +43 -17
- package/dist/taxonomies-Wfy_Lg12.mjs.map +1 -0
- package/dist/{taxonomy-BqCZ1TdU.mjs → taxonomy-tJepplLL.mjs} +5 -5
- package/dist/{taxonomy-BqCZ1TdU.mjs.map → taxonomy-tJepplLL.mjs.map} +1 -1
- package/dist/{tokens-C39klX8R.mjs → tokens-BCO1oruF.mjs} +1 -1
- package/dist/{tokens-C39klX8R.mjs.map → tokens-BCO1oruF.mjs.map} +1 -1
- package/dist/{transaction-NQj4VJ7Z.mjs → transaction-0KOpOyMu.mjs} +2 -1
- package/dist/{transaction-NQj4VJ7Z.mjs.map → transaction-0KOpOyMu.mjs.map} +1 -1
- package/dist/{transport-DBJwa-Si.mjs → transport-Dr3qtwXC.mjs} +4 -3
- package/dist/{transport-DBJwa-Si.mjs.map → transport-Dr3qtwXC.mjs.map} +1 -1
- package/dist/{transport-RQE36APG.d.mts → transport-xh6YKW2G.d.mts} +1 -1
- package/dist/{transport-RQE36APG.d.mts.map → transport-xh6YKW2G.d.mts.map} +1 -1
- package/dist/{trusted-proxy-CEVekpby.mjs → trusted-proxy-BR5F1Otp.mjs} +1 -1
- package/dist/{trusted-proxy-CEVekpby.mjs.map → trusted-proxy-BR5F1Otp.mjs.map} +1 -1
- package/dist/{types-BW1syrlw.mjs → types-3qNFPlci.mjs} +1 -1
- package/dist/{types-BW1syrlw.mjs.map → types-3qNFPlci.mjs.map} +1 -1
- package/dist/types-75KIqzL9.mjs.map +1 -1
- package/dist/{types-DrJrVCT1.d.mts → types-B6GrPic4.d.mts} +9 -3
- package/dist/{types-DrJrVCT1.d.mts.map → types-B6GrPic4.d.mts.map} +1 -1
- package/dist/{types-DN64_zzZ.d.mts → types-BuHW4xDE.d.mts} +11 -10
- package/dist/types-BuHW4xDE.d.mts.map +1 -0
- package/dist/{types-DWRhk9xZ.d.mts → types-C00oyCZp.d.mts} +1 -1
- package/dist/{types-DWRhk9xZ.d.mts.map → types-C00oyCZp.d.mts.map} +1 -1
- package/dist/{types-BntycPTF.d.mts → types-CDtkNSFQ.d.mts} +1 -1
- package/dist/{types-BntycPTF.d.mts.map → types-CDtkNSFQ.d.mts.map} +1 -1
- package/dist/{types-Dfk8KI5R.d.mts → types-CPeXo1wF.d.mts} +1 -1
- package/dist/{types-Dfk8KI5R.d.mts.map → types-CPeXo1wF.d.mts.map} +1 -1
- package/dist/types-CQPWhPxE.mjs.map +1 -1
- package/dist/{types-BcqdcT-r.d.mts → types-CXFkwEGC.d.mts} +3 -2
- package/dist/types-CXFkwEGC.d.mts.map +1 -0
- package/dist/{types-CtzytVXn.mjs → types-DM3vioBY.mjs} +1 -1
- package/dist/{types-CtzytVXn.mjs.map → types-DM3vioBY.mjs.map} +1 -1
- package/dist/{types-CXnOzDe1.d.mts → types-DczELMop.d.mts} +1 -1
- package/dist/{types-CXnOzDe1.d.mts.map → types-DczELMop.d.mts.map} +1 -1
- package/dist/types-DfuTR6dL.mjs +3 -0
- package/dist/{types-DQIDRKF2.d.mts → types-FV23hEoW.d.mts} +10 -1
- package/dist/types-FV23hEoW.d.mts.map +1 -0
- package/dist/{types-C2pMvO62.d.mts → types-xDMtUFnO.d.mts} +2 -1
- package/dist/types-xDMtUFnO.d.mts.map +1 -0
- package/dist/{upload-attempts-D4FS8LT6.mjs → upload-attempts-BsqoQ1fn.mjs} +1 -1
- package/dist/{upload-attempts-D4FS8LT6.mjs.map → upload-attempts-BsqoQ1fn.mjs.map} +1 -1
- package/dist/{url-pattern-BHS0V5Ng.mjs → url-pattern-D4c2czpJ.mjs} +1 -1
- package/dist/{url-pattern-BHS0V5Ng.mjs.map → url-pattern-D4c2czpJ.mjs.map} +1 -1
- package/dist/{user-DJZfUJVE.mjs → user-BTZ40aq6.mjs} +2 -2
- package/dist/{user-DJZfUJVE.mjs.map → user-BTZ40aq6.mjs.map} +1 -1
- package/dist/{utils-D4vD_Y98.mjs → utils-BKvNjjhY.mjs} +1 -1
- package/dist/{utils-D4vD_Y98.mjs.map → utils-BKvNjjhY.mjs.map} +1 -1
- package/dist/{validate-BMLBvxOC.mjs → validate-DE_LRwo9.mjs} +2 -2
- package/dist/{validate-BMLBvxOC.mjs.map → validate-DE_LRwo9.mjs.map} +1 -1
- package/dist/{validate-CTqt5nuE.d.mts → validate-DUP27OYD.d.mts} +5 -5
- package/dist/{validate-CTqt5nuE.d.mts.map → validate-DUP27OYD.d.mts.map} +1 -1
- package/dist/{validation-npvENUCB.mjs → validation-BMImFJ11.mjs} +10 -8
- package/dist/{validation-npvENUCB.mjs.map → validation-BMImFJ11.mjs.map} +1 -1
- package/dist/version-Bii3suaO.mjs +7 -0
- package/dist/{version-DB_fqCSI.mjs.map → version-Bii3suaO.mjs.map} +1 -1
- package/dist/{widgets-BD3ho7Rq.mjs → widgets-D3gJ10xU.mjs} +18 -5
- package/dist/widgets-D3gJ10xU.mjs.map +1 -0
- package/dist/{wxr-taxonomies-Ca68766D.d.mts → wxr-taxonomies-B2Og_6rU.d.mts} +1 -1
- package/dist/{wxr-taxonomies-Ca68766D.d.mts.map → wxr-taxonomies-B2Og_6rU.d.mts.map} +1 -1
- package/dist/{wxr-taxonomies-B1R3vBoD.mjs → wxr-taxonomies-Cxngsjwo.mjs} +4 -4
- package/dist/{wxr-taxonomies-B1R3vBoD.mjs.map → wxr-taxonomies-Cxngsjwo.mjs.map} +1 -1
- package/dist/{zod-generator-LC-on_Vb.mjs → zod-generator-BuYSQJB7.mjs} +32 -22
- package/dist/zod-generator-BuYSQJB7.mjs.map +1 -0
- package/package.json +20 -9
- package/src/api/errors.ts +22 -0
- package/src/api/handlers/content.ts +49 -11
- package/src/api/handlers/index.ts +18 -0
- package/src/api/handlers/manifest.ts +161 -12
- package/src/api/handlers/media-allowlist.ts +1 -0
- package/src/api/handlers/media-folders.ts +130 -0
- package/src/api/handlers/media-usage-activation.ts +102 -0
- package/src/api/handlers/media-usage.ts +108 -0
- package/src/api/handlers/media.ts +92 -2
- package/src/api/handlers/registry.ts +483 -561
- package/src/api/handlers/taxonomies.ts +16 -9
- package/src/api/openapi/document.ts +277 -7
- package/src/api/parse.ts +1 -1
- package/src/api/schemas/auth.ts +4 -4
- package/src/api/schemas/bylines.ts +3 -3
- package/src/api/schemas/comments.ts +1 -1
- package/src/api/schemas/common.ts +3 -2
- package/src/api/schemas/content.ts +78 -22
- package/src/api/schemas/media-usage.ts +77 -0
- package/src/api/schemas/media.ts +121 -0
- package/src/api/schemas/redirects.ts +6 -1
- package/src/api/schemas/schema.ts +4 -0
- package/src/api/schemas/setup.ts +1 -1
- package/src/api/schemas/taxonomies.ts +2 -2
- package/src/api/schemas/users.ts +1 -1
- package/src/api/types.ts +23 -10
- package/src/astro/dev-typegen.ts +35 -0
- package/src/astro/image-endpoint.ts +2 -2
- package/src/astro/integration/dev-typegen.ts +91 -0
- package/src/astro/integration/index.ts +9 -44
- package/src/astro/integration/routes.ts +23 -0
- package/src/astro/integration/vite-config.ts +23 -9
- package/src/astro/middleware/auth.ts +4 -0
- package/src/astro/middleware.ts +5 -7
- package/src/astro/routes/api/admin/api-tokens/index.ts +4 -1
- package/src/astro/routes/api/admin/media-usage/activation.ts +42 -0
- package/src/astro/routes/api/admin/media-usage/progress.ts +37 -0
- package/src/astro/routes/api/admin/oauth-clients/[id].ts +1 -1
- package/src/astro/routes/api/admin/oauth-clients/index.ts +1 -1
- package/src/astro/routes/api/admin/plugins/registry/[id]/update.ts +4 -0
- package/src/astro/routes/api/admin/plugins/registry/artifact.ts +247 -101
- package/src/astro/routes/api/admin/plugins/registry/install.ts +4 -0
- package/src/astro/routes/api/admin/plugins/registry/verify.ts +60 -0
- package/src/astro/routes/api/auth/me.ts +14 -2
- package/src/astro/routes/api/content/[collection]/[id]/discard-draft.ts +8 -2
- package/src/astro/routes/api/content/[collection]/[id]/publish.ts +2 -1
- package/src/astro/routes/api/content/[collection]/[id]/unpublish.ts +6 -2
- package/src/astro/routes/api/manifest.ts +1 -1
- package/src/astro/routes/api/media/[id]/replace.ts +114 -0
- package/src/astro/routes/api/media/[id].ts +3 -0
- package/src/astro/routes/api/media/file/[...key].ts +4 -1
- package/src/astro/routes/api/media/folders/[id].ts +55 -0
- package/src/astro/routes/api/media/folders/index.ts +37 -0
- package/src/astro/routes/api/media/upload-url.ts +8 -4
- package/src/astro/routes/api/media.ts +66 -10
- package/src/astro/routes/api/menus/[name]/items/[id].ts +7 -2
- package/src/astro/routes/api/menus/[name]/items.ts +4 -1
- package/src/astro/routes/api/menus/[name]/reorder.ts +4 -1
- package/src/astro/routes/api/menus/[name]/translations.ts +4 -1
- package/src/astro/routes/api/menus/[name].ts +7 -2
- package/src/astro/routes/api/menus/index.ts +4 -1
- package/src/astro/routes/api/settings/email.ts +1 -1
- package/src/astro/routes/api/settings.ts +4 -1
- package/src/astro/routes/api/setup/dev-bypass.ts +12 -0
- package/src/astro/routes/api/taxonomies/[name]/reorder.ts +4 -1
- package/src/astro/routes/api/taxonomies/[name]/terms/[slug]/translations.ts +4 -1
- package/src/astro/routes/api/taxonomies/[name]/terms/[slug].ts +7 -2
- package/src/astro/routes/api/taxonomies/[name]/terms/index.ts +4 -1
- package/src/astro/routes/api/taxonomies/[name].ts +7 -2
- package/src/astro/routes/api/taxonomies/index.ts +4 -1
- package/src/astro/routes/api/widget-areas/[name]/reorder.ts +3 -1
- package/src/astro/routes/api/widget-areas/[name]/widgets/[id].ts +5 -2
- package/src/astro/routes/api/widget-areas/[name]/widgets.ts +3 -1
- package/src/astro/routes/api/widget-areas/[name].ts +3 -1
- package/src/astro/routes/api/widget-areas/index.ts +3 -1
- package/src/astro/types.ts +34 -6
- package/src/auth/challenge-store.ts +3 -1
- package/src/aws-sdk.d.ts +1 -0
- package/src/cache/chrome-tags.ts +24 -0
- package/src/client/index.ts +140 -2
- package/src/client/transport.ts +6 -2
- package/src/components/EmDashImage.astro +156 -51
- package/src/components/EmDashMedia.astro +2 -1
- package/src/components/Gallery.astro +7 -0
- package/src/components/InlinePortableTextEditor.tsx +136 -2
- package/src/components/LiveSearch.astro +23 -0
- package/src/components/inline-code-block.tsx +180 -49
- package/src/components/widgets/Archives.astro +2 -37
- package/src/content/converters/gallery.ts +2 -0
- package/src/content/converters/index.ts +2 -0
- package/src/content/converters/mark-safety.ts +1 -0
- package/src/content/converters/portable-text-identity.ts +139 -0
- package/src/content/converters/portable-text-to-prosemirror.ts +202 -69
- package/src/content/converters/prosemirror-to-portable-text.ts +96 -25
- package/src/content/converters/types.ts +3 -0
- package/src/database/connection.ts +2 -31
- package/src/database/index.ts +1 -1
- package/src/database/json-recordset.ts +16 -0
- package/src/database/migrations/017_authorization_codes.ts +14 -4
- package/src/database/migrations/019_i18n.ts +1 -1
- package/src/database/migrations/071_restore_content_bylines_table.ts +43 -0
- package/src/database/migrations/072_media_folders.ts +72 -0
- package/src/database/migrations/073_media_focal_point.ts +57 -0
- package/src/database/migrations/074_content_deleted_scheduled_index.ts +55 -0
- package/src/database/migrations/runner.ts +11 -3
- package/src/database/repositories/byline.ts +32 -16
- package/src/database/repositories/content.ts +119 -51
- package/src/database/repositories/media-folders.ts +115 -0
- package/src/database/repositories/media-usage-work.ts +395 -111
- package/src/database/repositories/media-usage.ts +1104 -47
- package/src/database/repositories/media.ts +156 -29
- package/src/database/repositories/plugin-storage.ts +74 -9
- package/src/database/repositories/types.ts +8 -7
- package/src/database/transaction.ts +1 -0
- package/src/database/types.ts +13 -0
- package/src/db/adapters.ts +10 -3
- package/src/db/node-sqlite-compat.ts +78 -0
- package/src/db/postgres.ts +23 -0
- package/src/db/sqlite.ts +3 -3
- package/src/emdash-runtime.ts +186 -251
- package/src/fields/boolean.ts +1 -1
- package/src/fields/datetime.ts +1 -1
- package/src/fields/file.ts +1 -1
- package/src/fields/image.ts +7 -1
- package/src/fields/integer.ts +1 -1
- package/src/fields/json.ts +1 -1
- package/src/fields/multiselect.ts +1 -1
- package/src/fields/number.ts +1 -1
- package/src/fields/portable-text.ts +1 -1
- package/src/fields/richtext.ts +1 -1
- package/src/fields/select.ts +1 -1
- package/src/fields/slug.ts +1 -1
- package/src/fields/text.ts +1 -1
- package/src/fields/textarea.ts +1 -1
- package/src/fields/types.ts +8 -4
- package/src/index.ts +30 -3
- package/src/loader.ts +63 -10
- package/src/mcp/server.ts +228 -24
- package/src/media/focal-point.ts +37 -0
- package/src/media/image-endpoint.ts +5 -2
- package/src/media/local-runtime.ts +8 -0
- package/src/media/mime.ts +1 -0
- package/src/media/normalize.ts +25 -4
- package/src/media/types.ts +10 -0
- package/src/media/usage/activation.ts +162 -35
- package/src/media/usage/capture-triggers.ts +19 -3
- package/src/media/usage/cleanup.ts +9 -8
- package/src/media/usage/collection-deletion-processor.ts +7 -3
- package/src/media/usage/collection-deletion.ts +10 -0
- package/src/media/usage/content-refresh.ts +258 -39
- package/src/media/usage/content-snapshots.ts +128 -31
- package/src/media/usage/extractor.ts +32 -13
- package/src/media/usage/maintenance-engine.ts +166 -0
- package/src/media/usage/reconciliation-processor.ts +106 -29
- package/src/media/usage/reconciliation.ts +90 -7
- package/src/media/usage/work-processor.ts +342 -101
- package/src/menus/index.ts +16 -0
- package/src/object-cache/index.ts +44 -2
- package/src/plugin-types.ts +18 -1
- package/src/plugins/hooks.ts +4 -1
- package/src/plugins/index.ts +7 -0
- package/src/plugins/manager.ts +2 -1
- package/src/plugins/manifest-schema.ts +1 -1
- package/src/plugins/routes.ts +3 -1
- package/src/plugins/sandbox/hook-result.ts +52 -0
- package/src/plugins/sandbox/index.ts +10 -0
- package/src/plugins/save-rejection.ts +20 -0
- package/src/plugins/scheduler/node.ts +1 -13
- package/src/plugins/scheduler/types.ts +0 -2
- package/src/plugins/state.ts +13 -3
- package/src/plugins/types.ts +6 -0
- package/src/registry/artifact-checksum.ts +15 -0
- package/src/registry/artifact-fetch.ts +530 -0
- package/src/registry/artifact-verification.ts +85 -0
- package/src/registry/authoritative-records.ts +180 -0
- package/src/registry/config.ts +24 -6
- package/src/registry/record-labels.ts +28 -0
- package/src/registry/types.ts +12 -15
- package/src/schema/registry.ts +26 -3
- package/src/schema/types.ts +1 -0
- package/src/schema/zod-generator.ts +28 -17
- package/src/security/ssrf.ts +26 -4
- package/src/seed/apply.ts +4 -4
- package/src/settings/index.ts +16 -0
- package/src/storage/local.ts +1 -0
- package/src/storage/s3.ts +2 -0
- package/src/storage/types.ts +2 -0
- package/src/taxonomies/index.ts +40 -20
- package/src/ui.ts +2 -0
- package/src/widgets/archives.ts +67 -0
- package/src/widgets/index.ts +16 -0
- package/dist/api-BeBglVxU.mjs +0 -4695
- package/dist/api-BeBglVxU.mjs.map +0 -1
- package/dist/byline-yjvWq4ip.mjs.map +0 -1
- package/dist/challenge-store-SIL5DsF2.mjs.map +0 -1
- package/dist/collection-deletion-DQPvMD8R.mjs.map +0 -1
- package/dist/content-ZHCc1ngN.mjs.map +0 -1
- package/dist/content-refresh-B_8SJzuU.mjs.map +0 -1
- package/dist/context-ZldbZcle.mjs.map +0 -1
- package/dist/errors-CLUPm7aD.mjs.map +0 -1
- package/dist/index-BVBZj4-7.d.mts.map +0 -1
- package/dist/loader-CdG_Ci3H.mjs.map +0 -1
- package/dist/manifest-schema-BXbUAHod.mjs.map +0 -1
- package/dist/media-BWWWb8kg.mjs.map +0 -1
- package/dist/media-CzhAn2--.mjs.map +0 -1
- package/dist/media-allowlist-D6x-Us02.mjs.map +0 -1
- package/dist/media-usage-BZCydfvu.mjs.map +0 -1
- package/dist/media-usage-work-DrCbqBcl.mjs.map +0 -1
- package/dist/menus-DSo5QeW0.mjs.map +0 -1
- package/dist/mime-DfIVjNkr.mjs.map +0 -1
- package/dist/normalize-Bc-s_r-a.mjs.map +0 -1
- package/dist/object-cache-71tPfV4A.mjs.map +0 -1
- package/dist/options--hhz-jZ1.d.mts.map +0 -1
- package/dist/placeholder-Dp0K3RkD.d.mts.map +0 -1
- package/dist/redirects-DTDHWH31.mjs.map +0 -1
- package/dist/registry-Cqa2I749.mjs.map +0 -1
- package/dist/relations-BBApI4e2.mjs.map +0 -1
- package/dist/relations-BHo5A8Zf.d.mts.map +0 -1
- package/dist/runner-BYHZn3Jy.d.mts.map +0 -1
- package/dist/runner-C1T11CfC.mjs.map +0 -1
- package/dist/settings-xRdoUZr0.mjs.map +0 -1
- package/dist/state-DYwPue40.mjs.map +0 -1
- package/dist/taxonomies-BlrncHi9.mjs.map +0 -1
- package/dist/taxonomies-OHUIiIpI.mjs.map +0 -1
- package/dist/types-BcqdcT-r.d.mts.map +0 -1
- package/dist/types-C2pMvO62.d.mts.map +0 -1
- package/dist/types-CP1CflWf.mjs +0 -3
- package/dist/types-DN64_zzZ.d.mts.map +0 -1
- package/dist/types-DQIDRKF2.d.mts.map +0 -1
- package/dist/version-DB_fqCSI.mjs +0 -7
- package/dist/widgets-BD3ho7Rq.mjs.map +0 -1
- package/dist/zod-generator-LC-on_Vb.mjs.map +0 -1
- /package/dist/{api-tokens-rIXC6LdE.mjs → api-tokens-BfYts-sq.mjs} +0 -0
- /package/dist/{ssrf-DpXgKsna.mjs → ssrf-Dg3cIT-b.mjs} +0 -0
|
@@ -25,8 +25,8 @@ var __exportAll = (all, no_symbols) => {
|
|
|
25
25
|
//#endregion
|
|
26
26
|
//#region src/database/migrations/001_initial.ts
|
|
27
27
|
var _001_initial_exports = /* @__PURE__ */ __exportAll({
|
|
28
|
-
down: () => down$
|
|
29
|
-
up: () => up$
|
|
28
|
+
down: () => down$72,
|
|
29
|
+
up: () => up$72
|
|
30
30
|
});
|
|
31
31
|
/**
|
|
32
32
|
* Initial schema migration
|
|
@@ -35,7 +35,7 @@ var _001_initial_exports = /* @__PURE__ */ __exportAll({
|
|
|
35
35
|
* by the SchemaRegistry when collections are added via the admin UI.
|
|
36
36
|
* This migration only creates system tables.
|
|
37
37
|
*/
|
|
38
|
-
async function up$
|
|
38
|
+
async function up$72(db) {
|
|
39
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();
|
|
40
40
|
await db.schema.createIndex("idx_revisions_entry").ifNotExists().on("revisions").columns(["collection", "entry_id"]).execute();
|
|
41
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();
|
|
@@ -55,7 +55,7 @@ async function up$68(db) {
|
|
|
55
55
|
await db.schema.createIndex("idx_audit_action").ifNotExists().on("audit_logs").column("action").execute();
|
|
56
56
|
await db.schema.createIndex("idx_audit_timestamp").ifNotExists().on("audit_logs").column("timestamp").execute();
|
|
57
57
|
}
|
|
58
|
-
async function down$
|
|
58
|
+
async function down$72(db) {
|
|
59
59
|
await db.schema.dropTable("audit_logs").execute();
|
|
60
60
|
await db.schema.dropTable("options").execute();
|
|
61
61
|
await db.schema.dropTable("users").execute();
|
|
@@ -68,26 +68,26 @@ async function down$68(db) {
|
|
|
68
68
|
//#endregion
|
|
69
69
|
//#region src/database/migrations/002_media_status.ts
|
|
70
70
|
var _002_media_status_exports = /* @__PURE__ */ __exportAll({
|
|
71
|
-
down: () => down$
|
|
72
|
-
up: () => up$
|
|
71
|
+
down: () => down$71,
|
|
72
|
+
up: () => up$71
|
|
73
73
|
});
|
|
74
74
|
/**
|
|
75
75
|
* Add status column to media table for tracking upload state.
|
|
76
76
|
* Status values: 'pending' | 'ready' | 'failed'
|
|
77
77
|
*/
|
|
78
|
-
async function up$
|
|
78
|
+
async function up$71(db) {
|
|
79
79
|
await db.schema.alterTable("media").addColumn("status", "text", (col) => col.notNull().defaultTo("ready")).execute();
|
|
80
80
|
await db.schema.createIndex("idx_media_status").on("media").column("status").execute();
|
|
81
81
|
}
|
|
82
|
-
async function down$
|
|
82
|
+
async function down$71(db) {
|
|
83
83
|
await db.schema.dropIndex("idx_media_status").execute();
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
//#endregion
|
|
87
87
|
//#region src/database/migrations/003_schema_registry.ts
|
|
88
88
|
var _003_schema_registry_exports = /* @__PURE__ */ __exportAll({
|
|
89
|
-
down: () => down$
|
|
90
|
-
up: () => up$
|
|
89
|
+
down: () => down$70,
|
|
90
|
+
up: () => up$70
|
|
91
91
|
});
|
|
92
92
|
/**
|
|
93
93
|
* Migration: Schema Registry Tables
|
|
@@ -95,14 +95,14 @@ var _003_schema_registry_exports = /* @__PURE__ */ __exportAll({
|
|
|
95
95
|
* Creates the schema registry tables that store collection and field definitions.
|
|
96
96
|
* This enables dynamic schema management where D1 is the source of truth.
|
|
97
97
|
*/
|
|
98
|
-
async function up$
|
|
98
|
+
async function up$70(db) {
|
|
99
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();
|
|
100
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();
|
|
101
101
|
await db.schema.createIndex("idx_fields_collection_slug").on("_emdash_fields").columns(["collection_id", "slug"]).unique().execute();
|
|
102
102
|
await db.schema.createIndex("idx_fields_collection").on("_emdash_fields").column("collection_id").execute();
|
|
103
103
|
await db.schema.createIndex("idx_fields_sort").on("_emdash_fields").columns(["collection_id", "sort_order"]).execute();
|
|
104
104
|
}
|
|
105
|
-
async function down$
|
|
105
|
+
async function down$70(db) {
|
|
106
106
|
await db.schema.dropTable("_emdash_fields").execute();
|
|
107
107
|
await db.schema.dropTable("_emdash_collections").execute();
|
|
108
108
|
}
|
|
@@ -110,8 +110,8 @@ async function down$66(db) {
|
|
|
110
110
|
//#endregion
|
|
111
111
|
//#region src/database/migrations/004_plugins.ts
|
|
112
112
|
var _004_plugins_exports = /* @__PURE__ */ __exportAll({
|
|
113
|
-
down: () => down$
|
|
114
|
-
up: () => up$
|
|
113
|
+
down: () => down$69,
|
|
114
|
+
up: () => up$69
|
|
115
115
|
});
|
|
116
116
|
/**
|
|
117
117
|
* Migration: Plugin System Tables
|
|
@@ -121,7 +121,7 @@ var _004_plugins_exports = /* @__PURE__ */ __exportAll({
|
|
|
121
121
|
*
|
|
122
122
|
* @see PLUGIN-SYSTEM.md § Plugin Storage
|
|
123
123
|
*/
|
|
124
|
-
async function up$
|
|
124
|
+
async function up$69(db) {
|
|
125
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", [
|
|
126
126
|
"plugin_id",
|
|
127
127
|
"collection",
|
|
@@ -139,7 +139,7 @@ async function up$65(db) {
|
|
|
139
139
|
"index_name"
|
|
140
140
|
]).execute();
|
|
141
141
|
}
|
|
142
|
-
async function down$
|
|
142
|
+
async function down$69(db) {
|
|
143
143
|
await db.schema.dropTable("_plugin_indexes").execute();
|
|
144
144
|
await db.schema.dropTable("_plugin_state").execute();
|
|
145
145
|
await db.schema.dropTable("_plugin_storage").execute();
|
|
@@ -148,8 +148,8 @@ async function down$65(db) {
|
|
|
148
148
|
//#endregion
|
|
149
149
|
//#region src/database/migrations/005_menus.ts
|
|
150
150
|
var _005_menus_exports = /* @__PURE__ */ __exportAll({
|
|
151
|
-
down: () => down$
|
|
152
|
-
up: () => up$
|
|
151
|
+
down: () => down$68,
|
|
152
|
+
up: () => up$68
|
|
153
153
|
});
|
|
154
154
|
/**
|
|
155
155
|
* Navigation Menus migration
|
|
@@ -157,13 +157,13 @@ var _005_menus_exports = /* @__PURE__ */ __exportAll({
|
|
|
157
157
|
* Creates tables for admin-editable navigation menus.
|
|
158
158
|
* Menu items can reference content entries, taxonomy terms, or custom URLs.
|
|
159
159
|
*/
|
|
160
|
-
async function up$
|
|
160
|
+
async function up$68(db) {
|
|
161
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();
|
|
162
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();
|
|
163
163
|
await db.schema.createIndex("idx_menu_items_menu").on("_emdash_menu_items").columns(["menu_id", "sort_order"]).execute();
|
|
164
164
|
await db.schema.createIndex("idx_menu_items_parent").on("_emdash_menu_items").column("parent_id").execute();
|
|
165
165
|
}
|
|
166
|
-
async function down$
|
|
166
|
+
async function down$68(db) {
|
|
167
167
|
await db.schema.dropTable("_emdash_menu_items").execute();
|
|
168
168
|
await db.schema.dropTable("_emdash_menus").execute();
|
|
169
169
|
}
|
|
@@ -171,8 +171,8 @@ async function down$64(db) {
|
|
|
171
171
|
//#endregion
|
|
172
172
|
//#region src/database/migrations/006_taxonomy_defs.ts
|
|
173
173
|
var _006_taxonomy_defs_exports = /* @__PURE__ */ __exportAll({
|
|
174
|
-
down: () => down$
|
|
175
|
-
up: () => up$
|
|
174
|
+
down: () => down$67,
|
|
175
|
+
up: () => up$67
|
|
176
176
|
});
|
|
177
177
|
/**
|
|
178
178
|
* Taxonomy definitions migration
|
|
@@ -180,7 +180,7 @@ var _006_taxonomy_defs_exports = /* @__PURE__ */ __exportAll({
|
|
|
180
180
|
* Adds _emdash_taxonomy_defs table to store taxonomy definitions (category, tag, custom)
|
|
181
181
|
* and seeds default category and tag taxonomies.
|
|
182
182
|
*/
|
|
183
|
-
async function up$
|
|
183
|
+
async function up$67(db) {
|
|
184
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();
|
|
185
185
|
await db.insertInto("_emdash_taxonomy_defs").values([{
|
|
186
186
|
id: "taxdef_category",
|
|
@@ -198,22 +198,22 @@ async function up$63(db) {
|
|
|
198
198
|
collections: JSON.stringify(["posts"])
|
|
199
199
|
}]).execute();
|
|
200
200
|
}
|
|
201
|
-
async function down$
|
|
201
|
+
async function down$67(db) {
|
|
202
202
|
await db.schema.dropTable("_emdash_taxonomy_defs").execute();
|
|
203
203
|
}
|
|
204
204
|
|
|
205
205
|
//#endregion
|
|
206
206
|
//#region src/database/migrations/007_widgets.ts
|
|
207
207
|
var _007_widgets_exports = /* @__PURE__ */ __exportAll({
|
|
208
|
-
down: () => down$
|
|
209
|
-
up: () => up$
|
|
208
|
+
down: () => down$66,
|
|
209
|
+
up: () => up$66
|
|
210
210
|
});
|
|
211
|
-
async function up$
|
|
211
|
+
async function up$66(db) {
|
|
212
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();
|
|
213
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();
|
|
214
214
|
await db.schema.createIndex("idx_widgets_area").on("_emdash_widgets").columns(["area_id", "sort_order"]).execute();
|
|
215
215
|
}
|
|
216
|
-
async function down$
|
|
216
|
+
async function down$66(db) {
|
|
217
217
|
await db.schema.dropTable("_emdash_widgets").execute();
|
|
218
218
|
await db.schema.dropTable("_emdash_widget_areas").execute();
|
|
219
219
|
}
|
|
@@ -221,8 +221,8 @@ async function down$62(db) {
|
|
|
221
221
|
//#endregion
|
|
222
222
|
//#region src/database/migrations/008_auth.ts
|
|
223
223
|
var _008_auth_exports = /* @__PURE__ */ __exportAll({
|
|
224
|
-
down: () => down$
|
|
225
|
-
up: () => up$
|
|
224
|
+
down: () => down$65,
|
|
225
|
+
up: () => up$65
|
|
226
226
|
});
|
|
227
227
|
/**
|
|
228
228
|
* Auth migration - passkey-first authentication
|
|
@@ -236,7 +236,7 @@ var _008_auth_exports = /* @__PURE__ */ __exportAll({
|
|
|
236
236
|
* - Creates oauth_accounts table (external provider links)
|
|
237
237
|
* - Creates allowed_domains table (self-signup)
|
|
238
238
|
*/
|
|
239
|
-
async function up$
|
|
239
|
+
async function up$65(db) {
|
|
240
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();
|
|
241
241
|
await sql`
|
|
242
242
|
INSERT INTO users_new (id, email, name, role, data, created_at, updated_at)
|
|
@@ -269,7 +269,7 @@ async function up$61(db) {
|
|
|
269
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();
|
|
270
270
|
await db.schema.createIndex("idx_auth_challenges_expires").on("auth_challenges").column("expires_at").execute();
|
|
271
271
|
}
|
|
272
|
-
async function down$
|
|
272
|
+
async function down$65(db) {
|
|
273
273
|
await db.schema.dropTable("auth_challenges").execute();
|
|
274
274
|
await db.schema.dropTable("allowed_domains").execute();
|
|
275
275
|
await db.schema.dropTable("oauth_accounts").execute();
|
|
@@ -302,8 +302,8 @@ async function down$61(db) {
|
|
|
302
302
|
//#endregion
|
|
303
303
|
//#region src/database/migrations/009_user_disabled.ts
|
|
304
304
|
var _009_user_disabled_exports = /* @__PURE__ */ __exportAll({
|
|
305
|
-
down: () => down$
|
|
306
|
-
up: () => up$
|
|
305
|
+
down: () => down$64,
|
|
306
|
+
up: () => up$64
|
|
307
307
|
});
|
|
308
308
|
/**
|
|
309
309
|
* User disabled column - for soft-disabling users
|
|
@@ -312,19 +312,19 @@ var _009_user_disabled_exports = /* @__PURE__ */ __exportAll({
|
|
|
312
312
|
* - Adds disabled column to users table (INTEGER, default 0)
|
|
313
313
|
* - Disabled users cannot log in
|
|
314
314
|
*/
|
|
315
|
-
async function up$
|
|
315
|
+
async function up$64(db) {
|
|
316
316
|
await sql`ALTER TABLE users ADD COLUMN disabled INTEGER NOT NULL DEFAULT 0`.execute(db);
|
|
317
317
|
await db.schema.createIndex("idx_users_disabled").on("users").column("disabled").execute();
|
|
318
318
|
}
|
|
319
|
-
async function down$
|
|
319
|
+
async function down$64(db) {
|
|
320
320
|
await db.schema.dropIndex("idx_users_disabled").execute();
|
|
321
321
|
}
|
|
322
322
|
|
|
323
323
|
//#endregion
|
|
324
324
|
//#region src/database/migrations/011_sections.ts
|
|
325
325
|
var _011_sections_exports = /* @__PURE__ */ __exportAll({
|
|
326
|
-
down: () => down$
|
|
327
|
-
up: () => up$
|
|
326
|
+
down: () => down$63,
|
|
327
|
+
up: () => up$63
|
|
328
328
|
});
|
|
329
329
|
/**
|
|
330
330
|
* Migration: Add sections tables and performance indexes
|
|
@@ -333,13 +333,13 @@ var _011_sections_exports = /* @__PURE__ */ __exportAll({
|
|
|
333
333
|
* They provide a library of pre-built page sections (heroes, CTAs, testimonials, etc.)
|
|
334
334
|
* that content authors can browse and insert with a single click.
|
|
335
335
|
*/
|
|
336
|
-
async function up$
|
|
336
|
+
async function up$63(db) {
|
|
337
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();
|
|
338
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();
|
|
339
339
|
await db.schema.createIndex("idx_sections_category").on("_emdash_sections").columns(["category_id"]).execute();
|
|
340
340
|
await db.schema.createIndex("idx_sections_source").on("_emdash_sections").columns(["source"]).execute();
|
|
341
341
|
}
|
|
342
|
-
async function down$
|
|
342
|
+
async function down$63(db) {
|
|
343
343
|
await db.schema.dropIndex("idx_sections_source").execute();
|
|
344
344
|
await db.schema.dropIndex("idx_sections_category").execute();
|
|
345
345
|
await db.schema.dropTable("_emdash_sections").execute();
|
|
@@ -349,8 +349,8 @@ async function down$59(db) {
|
|
|
349
349
|
//#endregion
|
|
350
350
|
//#region src/database/migrations/012_search.ts
|
|
351
351
|
var _012_search_exports = /* @__PURE__ */ __exportAll({
|
|
352
|
-
down: () => down$
|
|
353
|
-
up: () => up$
|
|
352
|
+
down: () => down$62,
|
|
353
|
+
up: () => up$62
|
|
354
354
|
});
|
|
355
355
|
/**
|
|
356
356
|
* Migration: Search Support
|
|
@@ -358,11 +358,11 @@ var _012_search_exports = /* @__PURE__ */ __exportAll({
|
|
|
358
358
|
* Adds search configuration to collections and searchable flag to fields.
|
|
359
359
|
* FTS5 tables are created dynamically when search is enabled for a collection.
|
|
360
360
|
*/
|
|
361
|
-
async function up$
|
|
361
|
+
async function up$62(db) {
|
|
362
362
|
await db.schema.alterTable("_emdash_collections").addColumn("search_config", "text").execute();
|
|
363
363
|
await db.schema.alterTable("_emdash_fields").addColumn("searchable", "integer", (col) => col.defaultTo(0)).execute();
|
|
364
364
|
}
|
|
365
|
-
async function down$
|
|
365
|
+
async function down$62(db) {
|
|
366
366
|
await db.schema.alterTable("_emdash_fields").dropColumn("searchable").execute();
|
|
367
367
|
await db.schema.alterTable("_emdash_collections").dropColumn("search_config").execute();
|
|
368
368
|
}
|
|
@@ -370,8 +370,8 @@ async function down$58(db) {
|
|
|
370
370
|
//#endregion
|
|
371
371
|
//#region src/database/migrations/013_scheduled_publishing.ts
|
|
372
372
|
var _013_scheduled_publishing_exports = /* @__PURE__ */ __exportAll({
|
|
373
|
-
down: () => down$
|
|
374
|
-
up: () => up$
|
|
373
|
+
down: () => down$61,
|
|
374
|
+
up: () => up$61
|
|
375
375
|
});
|
|
376
376
|
/**
|
|
377
377
|
* Migration: Add scheduled publishing support
|
|
@@ -380,7 +380,7 @@ var _013_scheduled_publishing_exports = /* @__PURE__ */ __exportAll({
|
|
|
380
380
|
* When scheduled_at is set and status is 'scheduled', the content
|
|
381
381
|
* will be auto-published when the scheduled time is reached.
|
|
382
382
|
*/
|
|
383
|
-
async function up$
|
|
383
|
+
async function up$61(db) {
|
|
384
384
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
385
385
|
for (const tableName of tableNames) {
|
|
386
386
|
const table = { name: tableName };
|
|
@@ -395,7 +395,7 @@ async function up$57(db) {
|
|
|
395
395
|
`.execute(db);
|
|
396
396
|
}
|
|
397
397
|
}
|
|
398
|
-
async function down$
|
|
398
|
+
async function down$61(db) {
|
|
399
399
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
400
400
|
for (const tableName of tableNames) {
|
|
401
401
|
const table = { name: tableName };
|
|
@@ -412,10 +412,10 @@ async function down$57(db) {
|
|
|
412
412
|
//#endregion
|
|
413
413
|
//#region src/database/migrations/014_draft_revisions.ts
|
|
414
414
|
var _014_draft_revisions_exports = /* @__PURE__ */ __exportAll({
|
|
415
|
-
down: () => down$
|
|
416
|
-
up: () => up$
|
|
415
|
+
down: () => down$60,
|
|
416
|
+
up: () => up$60
|
|
417
417
|
});
|
|
418
|
-
async function up$
|
|
418
|
+
async function up$60(db) {
|
|
419
419
|
const tables = await db.selectFrom("_emdash_collections").select("slug").execute();
|
|
420
420
|
for (const row of tables) {
|
|
421
421
|
const tableName = `ec_${row.slug}`;
|
|
@@ -437,7 +437,7 @@ async function up$56(db) {
|
|
|
437
437
|
`.execute(db);
|
|
438
438
|
}
|
|
439
439
|
}
|
|
440
|
-
async function down$
|
|
440
|
+
async function down$60(db) {
|
|
441
441
|
const tables = await db.selectFrom("_emdash_collections").select("slug").execute();
|
|
442
442
|
for (const row of tables) {
|
|
443
443
|
const tableName = `ec_${row.slug}`;
|
|
@@ -461,8 +461,8 @@ async function down$56(db) {
|
|
|
461
461
|
//#endregion
|
|
462
462
|
//#region src/database/migrations/015_indexes.ts
|
|
463
463
|
var _015_indexes_exports = /* @__PURE__ */ __exportAll({
|
|
464
|
-
down: () => down$
|
|
465
|
-
up: () => up$
|
|
464
|
+
down: () => down$59,
|
|
465
|
+
up: () => up$59
|
|
466
466
|
});
|
|
467
467
|
/**
|
|
468
468
|
* Add performance indexes for common query patterns.
|
|
@@ -475,7 +475,7 @@ var _015_indexes_exports = /* @__PURE__ */ __exportAll({
|
|
|
475
475
|
* 5. Retroactive author_id + updated_at on existing ec_* content tables
|
|
476
476
|
* (new tables get these from createContentTable() in registry.ts)
|
|
477
477
|
*/
|
|
478
|
-
async function up$
|
|
478
|
+
async function up$59(db) {
|
|
479
479
|
await db.schema.createIndex("idx_media_mime_type").on("media").column("mime_type").execute();
|
|
480
480
|
await db.schema.createIndex("idx_media_filename").on("media").column("filename").execute();
|
|
481
481
|
await db.schema.createIndex("idx_media_created_at").on("media").column("created_at").execute();
|
|
@@ -495,7 +495,7 @@ async function up$55(db) {
|
|
|
495
495
|
`.execute(db);
|
|
496
496
|
}
|
|
497
497
|
}
|
|
498
|
-
async function down$
|
|
498
|
+
async function down$59(db) {
|
|
499
499
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
500
500
|
for (const tableName of tableNames) {
|
|
501
501
|
const table = { name: tableName };
|
|
@@ -513,8 +513,8 @@ async function down$55(db) {
|
|
|
513
513
|
//#endregion
|
|
514
514
|
//#region src/database/migrations/016_api_tokens.ts
|
|
515
515
|
var _016_api_tokens_exports = /* @__PURE__ */ __exportAll({
|
|
516
|
-
down: () => down$
|
|
517
|
-
up: () => up$
|
|
516
|
+
down: () => down$58,
|
|
517
|
+
up: () => up$58
|
|
518
518
|
});
|
|
519
519
|
/**
|
|
520
520
|
* API token tables for programmatic access.
|
|
@@ -532,7 +532,7 @@ var _016_api_tokens_exports = /* @__PURE__ */ __exportAll({
|
|
|
532
532
|
* top. Without these guards, the retry crashed with `table ... already
|
|
533
533
|
* exists` and blocked every subsequent boot of the Worker.
|
|
534
534
|
*/
|
|
535
|
-
async function up$
|
|
535
|
+
async function up$58(db) {
|
|
536
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();
|
|
537
537
|
await db.schema.createIndex("idx_api_tokens_token_hash").ifNotExists().on("_emdash_api_tokens").column("token_hash").execute();
|
|
538
538
|
await db.schema.createIndex("idx_api_tokens_user_id").ifNotExists().on("_emdash_api_tokens").column("user_id").execute();
|
|
@@ -541,7 +541,7 @@ async function up$54(db) {
|
|
|
541
541
|
await db.schema.createIndex("idx_oauth_tokens_expires").ifNotExists().on("_emdash_oauth_tokens").column("expires_at").execute();
|
|
542
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();
|
|
543
543
|
}
|
|
544
|
-
async function down$
|
|
544
|
+
async function down$58(db) {
|
|
545
545
|
await db.schema.dropTable("_emdash_device_codes").ifExists().execute();
|
|
546
546
|
await db.schema.dropTable("_emdash_oauth_tokens").ifExists().execute();
|
|
547
547
|
await db.schema.dropTable("_emdash_api_tokens").ifExists().execute();
|
|
@@ -550,8 +550,8 @@ async function down$54(db) {
|
|
|
550
550
|
//#endregion
|
|
551
551
|
//#region src/database/migrations/017_authorization_codes.ts
|
|
552
552
|
var _017_authorization_codes_exports = /* @__PURE__ */ __exportAll({
|
|
553
|
-
down: () => down$
|
|
554
|
-
up: () => up$
|
|
553
|
+
down: () => down$57,
|
|
554
|
+
up: () => up$57
|
|
555
555
|
});
|
|
556
556
|
/**
|
|
557
557
|
* Authorization codes for OAuth 2.1 Authorization Code + PKCE flow.
|
|
@@ -560,21 +560,28 @@ var _017_authorization_codes_exports = /* @__PURE__ */ __exportAll({
|
|
|
560
560
|
* via the standard OAuth authorization code grant.
|
|
561
561
|
*
|
|
562
562
|
* Also adds client_id tracking to oauth_tokens for per-client revocation.
|
|
563
|
+
*
|
|
564
|
+
* Every statement is guarded so the migration can restart after any one of
|
|
565
|
+
* them has committed. D1 commits each DDL statement on its own and the
|
|
566
|
+
* migrator records the migration only once `up` returns, so an interrupted
|
|
567
|
+
* run leaves the table created and the migration pending; an unguarded
|
|
568
|
+
* `CREATE TABLE` then fails on every retry and the database never finishes
|
|
569
|
+
* migrating.
|
|
563
570
|
*/
|
|
564
|
-
async function up$
|
|
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();
|
|
566
|
-
await db.schema.createIndex("idx_auth_codes_expires").on("_emdash_authorization_codes").column("expires_at").execute();
|
|
567
|
-
await
|
|
571
|
+
async function up$57(db) {
|
|
572
|
+
await db.schema.createTable("_emdash_authorization_codes").ifNotExists().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();
|
|
573
|
+
await db.schema.createIndex("idx_auth_codes_expires").ifNotExists().on("_emdash_authorization_codes").column("expires_at").execute();
|
|
574
|
+
if (!await columnExists(db, "_emdash_oauth_tokens", "client_id")) await db.schema.alterTable("_emdash_oauth_tokens").addColumn("client_id", "text").execute();
|
|
568
575
|
}
|
|
569
|
-
async function down$
|
|
570
|
-
await db.schema.dropTable("_emdash_authorization_codes").execute();
|
|
576
|
+
async function down$57(db) {
|
|
577
|
+
await db.schema.dropTable("_emdash_authorization_codes").ifExists().execute();
|
|
571
578
|
}
|
|
572
579
|
|
|
573
580
|
//#endregion
|
|
574
581
|
//#region src/database/migrations/018_seo.ts
|
|
575
582
|
var _018_seo_exports = /* @__PURE__ */ __exportAll({
|
|
576
|
-
down: () => down$
|
|
577
|
-
up: () => up$
|
|
583
|
+
down: () => down$56,
|
|
584
|
+
up: () => up$56
|
|
578
585
|
});
|
|
579
586
|
/**
|
|
580
587
|
* Migration: SEO support
|
|
@@ -587,7 +594,7 @@ var _018_seo_exports = /* @__PURE__ */ __exportAll({
|
|
|
587
594
|
* need it. The `has_seo` flag controls whether the admin shows SEO fields
|
|
588
595
|
* and whether the collection's content appears in sitemaps.
|
|
589
596
|
*/
|
|
590
|
-
async function up$
|
|
597
|
+
async function up$56(db) {
|
|
591
598
|
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();
|
|
592
599
|
await sql`
|
|
593
600
|
CREATE INDEX idx_emdash_seo_collection
|
|
@@ -598,7 +605,7 @@ async function up$52(db) {
|
|
|
598
605
|
ADD COLUMN has_seo INTEGER NOT NULL DEFAULT 0
|
|
599
606
|
`.execute(db);
|
|
600
607
|
}
|
|
601
|
-
async function down$
|
|
608
|
+
async function down$56(db) {
|
|
602
609
|
await sql`DROP TABLE IF EXISTS _emdash_seo`.execute(db);
|
|
603
610
|
await sql`
|
|
604
611
|
ALTER TABLE _emdash_collections
|
|
@@ -609,8 +616,8 @@ async function down$52(db) {
|
|
|
609
616
|
//#endregion
|
|
610
617
|
//#region src/database/migrations/019_i18n.ts
|
|
611
618
|
var _019_i18n_exports = /* @__PURE__ */ __exportAll({
|
|
612
|
-
down: () => down$
|
|
613
|
-
up: () => up$
|
|
619
|
+
down: () => down$55,
|
|
620
|
+
up: () => up$55
|
|
614
621
|
});
|
|
615
622
|
/**
|
|
616
623
|
* Quote an identifier for use in raw SQL. Escapes embedded double-quotes
|
|
@@ -723,7 +730,7 @@ async function upPostgres$1(db) {
|
|
|
723
730
|
ADD COLUMN translatable INTEGER NOT NULL DEFAULT 1
|
|
724
731
|
`.execute(db);
|
|
725
732
|
}
|
|
726
|
-
async function up$
|
|
733
|
+
async function up$55(db) {
|
|
727
734
|
if (!isSqlite(db)) return upPostgres$1(db);
|
|
728
735
|
const orphanedTmps = await listTablesLike(db, "ec_%_i18n_tmp");
|
|
729
736
|
for (const tmpName of orphanedTmps) {
|
|
@@ -840,7 +847,7 @@ async function downPostgres(db) {
|
|
|
840
847
|
await sql`ALTER TABLE ${sql.ref(t)} DROP COLUMN translation_group`.execute(db);
|
|
841
848
|
}
|
|
842
849
|
}
|
|
843
|
-
async function down$
|
|
850
|
+
async function down$55(db) {
|
|
844
851
|
if (!isSqlite(db)) return downPostgres(db);
|
|
845
852
|
await sql`
|
|
846
853
|
ALTER TABLE _emdash_fields
|
|
@@ -947,8 +954,8 @@ async function down$51(db) {
|
|
|
947
954
|
//#endregion
|
|
948
955
|
//#region src/database/migrations/020_collection_url_pattern.ts
|
|
949
956
|
var _020_collection_url_pattern_exports = /* @__PURE__ */ __exportAll({
|
|
950
|
-
down: () => down$
|
|
951
|
-
up: () => up$
|
|
957
|
+
down: () => down$54,
|
|
958
|
+
up: () => up$54
|
|
952
959
|
});
|
|
953
960
|
/**
|
|
954
961
|
* Migration: URL pattern for collections
|
|
@@ -957,13 +964,13 @@ var _020_collection_url_pattern_exports = /* @__PURE__ */ __exportAll({
|
|
|
957
964
|
* can declare its own URL structure (e.g. "/{slug}" for pages, "/blog/{slug}"
|
|
958
965
|
* for posts). Used for menu URL resolution, sitemaps, and path-based lookups.
|
|
959
966
|
*/
|
|
960
|
-
async function up$
|
|
967
|
+
async function up$54(db) {
|
|
961
968
|
await sql`
|
|
962
969
|
ALTER TABLE _emdash_collections
|
|
963
970
|
ADD COLUMN url_pattern TEXT
|
|
964
971
|
`.execute(db);
|
|
965
972
|
}
|
|
966
|
-
async function down$
|
|
973
|
+
async function down$54(db) {
|
|
967
974
|
await sql`
|
|
968
975
|
ALTER TABLE _emdash_collections
|
|
969
976
|
DROP COLUMN url_pattern
|
|
@@ -973,8 +980,8 @@ async function down$50(db) {
|
|
|
973
980
|
//#endregion
|
|
974
981
|
//#region src/database/migrations/021_remove_section_categories.ts
|
|
975
982
|
var _021_remove_section_categories_exports = /* @__PURE__ */ __exportAll({
|
|
976
|
-
down: () => down$
|
|
977
|
-
up: () => up$
|
|
983
|
+
down: () => down$53,
|
|
984
|
+
up: () => up$53
|
|
978
985
|
});
|
|
979
986
|
/**
|
|
980
987
|
* Migration: Remove section categories
|
|
@@ -983,12 +990,12 @@ var _021_remove_section_categories_exports = /* @__PURE__ */ __exportAll({
|
|
|
983
990
|
* Rather than building the missing UI for a feature with very little need at this stage,
|
|
984
991
|
* we're removing the feature entirely.
|
|
985
992
|
*/
|
|
986
|
-
async function up$
|
|
993
|
+
async function up$53(db) {
|
|
987
994
|
await db.schema.dropIndex("idx_sections_category").ifExists().execute();
|
|
988
995
|
await db.schema.alterTable("_emdash_sections").dropColumn("category_id").execute();
|
|
989
996
|
await db.schema.dropTable("_emdash_section_categories").execute();
|
|
990
997
|
}
|
|
991
|
-
async function down$
|
|
998
|
+
async function down$53(db) {
|
|
992
999
|
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();
|
|
993
1000
|
await db.schema.alterTable("_emdash_sections").addColumn("category_id", "text", (col) => col.references("_emdash_section_categories.id").onDelete("set null")).execute();
|
|
994
1001
|
await db.schema.createIndex("idx_sections_category").on("_emdash_sections").columns(["category_id"]).execute();
|
|
@@ -997,8 +1004,8 @@ async function down$49(db) {
|
|
|
997
1004
|
//#endregion
|
|
998
1005
|
//#region src/database/migrations/022_marketplace_plugin_state.ts
|
|
999
1006
|
var _022_marketplace_plugin_state_exports = /* @__PURE__ */ __exportAll({
|
|
1000
|
-
down: () => down$
|
|
1001
|
-
up: () => up$
|
|
1007
|
+
down: () => down$52,
|
|
1008
|
+
up: () => up$52
|
|
1002
1009
|
});
|
|
1003
1010
|
/**
|
|
1004
1011
|
* Migration: Add marketplace fields to _plugin_state
|
|
@@ -1007,7 +1014,7 @@ var _022_marketplace_plugin_state_exports = /* @__PURE__ */ __exportAll({
|
|
|
1007
1014
|
* whether a plugin was installed from config or marketplace,
|
|
1008
1015
|
* and which marketplace version is installed.
|
|
1009
1016
|
*/
|
|
1010
|
-
async function up$
|
|
1017
|
+
async function up$52(db) {
|
|
1011
1018
|
await sql`
|
|
1012
1019
|
ALTER TABLE _plugin_state
|
|
1013
1020
|
ADD COLUMN source TEXT NOT NULL DEFAULT 'config'
|
|
@@ -1022,7 +1029,7 @@ async function up$48(db) {
|
|
|
1022
1029
|
WHERE source = 'marketplace'
|
|
1023
1030
|
`.execute(db);
|
|
1024
1031
|
}
|
|
1025
|
-
async function down$
|
|
1032
|
+
async function down$52(db) {
|
|
1026
1033
|
await sql`
|
|
1027
1034
|
DROP INDEX IF EXISTS idx_plugin_state_source
|
|
1028
1035
|
`.execute(db);
|
|
@@ -1039,8 +1046,8 @@ async function down$48(db) {
|
|
|
1039
1046
|
//#endregion
|
|
1040
1047
|
//#region src/database/migrations/023_plugin_metadata.ts
|
|
1041
1048
|
var _023_plugin_metadata_exports = /* @__PURE__ */ __exportAll({
|
|
1042
|
-
down: () => down$
|
|
1043
|
-
up: () => up$
|
|
1049
|
+
down: () => down$51,
|
|
1050
|
+
up: () => up$51
|
|
1044
1051
|
});
|
|
1045
1052
|
/**
|
|
1046
1053
|
* Migration: Add display metadata to _plugin_state
|
|
@@ -1049,7 +1056,7 @@ var _023_plugin_metadata_exports = /* @__PURE__ */ __exportAll({
|
|
|
1049
1056
|
* so the admin UI can show meaningful info without re-fetching
|
|
1050
1057
|
* from the marketplace on every page load.
|
|
1051
1058
|
*/
|
|
1052
|
-
async function up$
|
|
1059
|
+
async function up$51(db) {
|
|
1053
1060
|
await sql`
|
|
1054
1061
|
ALTER TABLE _plugin_state
|
|
1055
1062
|
ADD COLUMN display_name TEXT
|
|
@@ -1059,7 +1066,7 @@ async function up$47(db) {
|
|
|
1059
1066
|
ADD COLUMN description TEXT
|
|
1060
1067
|
`.execute(db);
|
|
1061
1068
|
}
|
|
1062
|
-
async function down$
|
|
1069
|
+
async function down$51(db) {
|
|
1063
1070
|
await sql`
|
|
1064
1071
|
ALTER TABLE _plugin_state
|
|
1065
1072
|
DROP COLUMN description
|
|
@@ -1073,8 +1080,8 @@ async function down$47(db) {
|
|
|
1073
1080
|
//#endregion
|
|
1074
1081
|
//#region src/database/migrations/024_media_placeholders.ts
|
|
1075
1082
|
var _024_media_placeholders_exports = /* @__PURE__ */ __exportAll({
|
|
1076
|
-
down: () => down$
|
|
1077
|
-
up: () => up$
|
|
1083
|
+
down: () => down$50,
|
|
1084
|
+
up: () => up$50
|
|
1078
1085
|
});
|
|
1079
1086
|
/**
|
|
1080
1087
|
* Migration: Add placeholder columns to media table
|
|
@@ -1082,7 +1089,7 @@ var _024_media_placeholders_exports = /* @__PURE__ */ __exportAll({
|
|
|
1082
1089
|
* Stores blurhash and dominant_color for LQIP (Low Quality Image Placeholder)
|
|
1083
1090
|
* support. Generated at upload time from image pixel data.
|
|
1084
1091
|
*/
|
|
1085
|
-
async function up$
|
|
1092
|
+
async function up$50(db) {
|
|
1086
1093
|
await sql`
|
|
1087
1094
|
ALTER TABLE media
|
|
1088
1095
|
ADD COLUMN blurhash TEXT
|
|
@@ -1092,7 +1099,7 @@ async function up$46(db) {
|
|
|
1092
1099
|
ADD COLUMN dominant_color TEXT
|
|
1093
1100
|
`.execute(db);
|
|
1094
1101
|
}
|
|
1095
|
-
async function down$
|
|
1102
|
+
async function down$50(db) {
|
|
1096
1103
|
await sql`
|
|
1097
1104
|
ALTER TABLE media
|
|
1098
1105
|
DROP COLUMN dominant_color
|
|
@@ -1106,8 +1113,8 @@ async function down$46(db) {
|
|
|
1106
1113
|
//#endregion
|
|
1107
1114
|
//#region src/database/migrations/025_oauth_clients.ts
|
|
1108
1115
|
var _025_oauth_clients_exports = /* @__PURE__ */ __exportAll({
|
|
1109
|
-
down: () => down$
|
|
1110
|
-
up: () => up$
|
|
1116
|
+
down: () => down$49,
|
|
1117
|
+
up: () => up$49
|
|
1111
1118
|
});
|
|
1112
1119
|
/**
|
|
1113
1120
|
* Migration: Create OAuth clients table
|
|
@@ -1118,18 +1125,18 @@ var _025_oauth_clients_exports = /* @__PURE__ */ __exportAll({
|
|
|
1118
1125
|
* Each client has a set of pre-registered redirect URIs (JSON array).
|
|
1119
1126
|
* The authorize endpoint rejects any redirect_uri not in the client's list.
|
|
1120
1127
|
*/
|
|
1121
|
-
async function up$
|
|
1128
|
+
async function up$49(db) {
|
|
1122
1129
|
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();
|
|
1123
1130
|
}
|
|
1124
|
-
async function down$
|
|
1131
|
+
async function down$49(db) {
|
|
1125
1132
|
await db.schema.dropTable("_emdash_oauth_clients").execute();
|
|
1126
1133
|
}
|
|
1127
1134
|
|
|
1128
1135
|
//#endregion
|
|
1129
1136
|
//#region src/database/migrations/026_cron_tasks.ts
|
|
1130
1137
|
var _026_cron_tasks_exports = /* @__PURE__ */ __exportAll({
|
|
1131
|
-
down: () => down$
|
|
1132
|
-
up: () => up$
|
|
1138
|
+
down: () => down$48,
|
|
1139
|
+
up: () => up$48
|
|
1133
1140
|
});
|
|
1134
1141
|
/**
|
|
1135
1142
|
* Migration: Create cron tasks table for plugin scheduled tasks.
|
|
@@ -1140,7 +1147,7 @@ var _026_cron_tasks_exports = /* @__PURE__ */ __exportAll({
|
|
|
1140
1147
|
* The `next_run_at` + `status` + `enabled` index drives the "find overdue
|
|
1141
1148
|
* tasks" query used by CronExecutor.tick().
|
|
1142
1149
|
*/
|
|
1143
|
-
async function up$
|
|
1150
|
+
async function up$48(db) {
|
|
1144
1151
|
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();
|
|
1145
1152
|
await db.schema.createIndex("idx_cron_tasks_due").on("_emdash_cron_tasks").columns([
|
|
1146
1153
|
"enabled",
|
|
@@ -1149,17 +1156,17 @@ async function up$44(db) {
|
|
|
1149
1156
|
]).execute();
|
|
1150
1157
|
await db.schema.createIndex("idx_cron_tasks_plugin").on("_emdash_cron_tasks").column("plugin_id").execute();
|
|
1151
1158
|
}
|
|
1152
|
-
async function down$
|
|
1159
|
+
async function down$48(db) {
|
|
1153
1160
|
await db.schema.dropTable("_emdash_cron_tasks").execute();
|
|
1154
1161
|
}
|
|
1155
1162
|
|
|
1156
1163
|
//#endregion
|
|
1157
1164
|
//#region src/database/migrations/027_comments.ts
|
|
1158
1165
|
var _027_comments_exports = /* @__PURE__ */ __exportAll({
|
|
1159
|
-
down: () => down$
|
|
1160
|
-
up: () => up$
|
|
1166
|
+
down: () => down$47,
|
|
1167
|
+
up: () => up$47
|
|
1161
1168
|
});
|
|
1162
|
-
async function up$
|
|
1169
|
+
async function up$47(db) {
|
|
1163
1170
|
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();
|
|
1164
1171
|
await db.schema.createIndex("idx_comments_content").on("_emdash_comments").columns([
|
|
1165
1172
|
"collection",
|
|
@@ -1175,30 +1182,30 @@ async function up$43(db) {
|
|
|
1175
1182
|
await db.schema.alterTable("_emdash_collections").addColumn("comments_closed_after_days", "integer", (col) => col.defaultTo(90)).execute();
|
|
1176
1183
|
await db.schema.alterTable("_emdash_collections").addColumn("comments_auto_approve_users", "integer", (col) => col.defaultTo(1)).execute();
|
|
1177
1184
|
}
|
|
1178
|
-
async function down$
|
|
1185
|
+
async function down$47(db) {
|
|
1179
1186
|
await db.schema.dropTable("_emdash_comments").execute();
|
|
1180
1187
|
}
|
|
1181
1188
|
|
|
1182
1189
|
//#endregion
|
|
1183
1190
|
//#region src/database/migrations/028_drop_author_url.ts
|
|
1184
1191
|
var _028_drop_author_url_exports = /* @__PURE__ */ __exportAll({
|
|
1185
|
-
down: () => down$
|
|
1186
|
-
up: () => up$
|
|
1192
|
+
down: () => down$46,
|
|
1193
|
+
up: () => up$46
|
|
1187
1194
|
});
|
|
1188
|
-
async function up$
|
|
1195
|
+
async function up$46(db) {
|
|
1189
1196
|
await sql`ALTER TABLE _emdash_comments DROP COLUMN author_url`.execute(db);
|
|
1190
1197
|
}
|
|
1191
|
-
async function down$
|
|
1198
|
+
async function down$46(db) {
|
|
1192
1199
|
await db.schema.alterTable("_emdash_comments").addColumn("author_url", "text").execute();
|
|
1193
1200
|
}
|
|
1194
1201
|
|
|
1195
1202
|
//#endregion
|
|
1196
1203
|
//#region src/database/migrations/029_redirects.ts
|
|
1197
1204
|
var _029_redirects_exports = /* @__PURE__ */ __exportAll({
|
|
1198
|
-
down: () => down$
|
|
1199
|
-
up: () => up$
|
|
1205
|
+
down: () => down$45,
|
|
1206
|
+
up: () => up$45
|
|
1200
1207
|
});
|
|
1201
|
-
async function up$
|
|
1208
|
+
async function up$45(db) {
|
|
1202
1209
|
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();
|
|
1203
1210
|
await db.schema.createIndex("idx_redirects_source").on("_emdash_redirects").column("source").execute();
|
|
1204
1211
|
await db.schema.createIndex("idx_redirects_enabled").on("_emdash_redirects").column("enabled").execute();
|
|
@@ -1207,7 +1214,7 @@ async function up$41(db) {
|
|
|
1207
1214
|
await db.schema.createIndex("idx_404_log_path").on("_emdash_404_log").column("path").execute();
|
|
1208
1215
|
await db.schema.createIndex("idx_404_log_created").on("_emdash_404_log").column("created_at").execute();
|
|
1209
1216
|
}
|
|
1210
|
-
async function down$
|
|
1217
|
+
async function down$45(db) {
|
|
1211
1218
|
await db.schema.dropTable("_emdash_404_log").execute();
|
|
1212
1219
|
await db.schema.dropTable("_emdash_redirects").execute();
|
|
1213
1220
|
}
|
|
@@ -1215,8 +1222,8 @@ async function down$41(db) {
|
|
|
1215
1222
|
//#endregion
|
|
1216
1223
|
//#region src/database/migrations/030_widen_scheduled_index.ts
|
|
1217
1224
|
var _030_widen_scheduled_index_exports = /* @__PURE__ */ __exportAll({
|
|
1218
|
-
down: () => down$
|
|
1219
|
-
up: () => up$
|
|
1225
|
+
down: () => down$44,
|
|
1226
|
+
up: () => up$44
|
|
1220
1227
|
});
|
|
1221
1228
|
/**
|
|
1222
1229
|
* Migration: Widen scheduled publishing index
|
|
@@ -1225,7 +1232,7 @@ var _030_widen_scheduled_index_exports = /* @__PURE__ */ __exportAll({
|
|
|
1225
1232
|
* Published posts can now have scheduled draft changes, so widen the
|
|
1226
1233
|
* index to cover all rows where scheduled_at IS NOT NULL.
|
|
1227
1234
|
*/
|
|
1228
|
-
async function up$
|
|
1235
|
+
async function up$44(db) {
|
|
1229
1236
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
1230
1237
|
for (const tableName of tableNames) {
|
|
1231
1238
|
const table = { name: tableName };
|
|
@@ -1239,7 +1246,7 @@ async function up$40(db) {
|
|
|
1239
1246
|
`.execute(db);
|
|
1240
1247
|
}
|
|
1241
1248
|
}
|
|
1242
|
-
async function down$
|
|
1249
|
+
async function down$44(db) {
|
|
1243
1250
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
1244
1251
|
for (const tableName of tableNames) {
|
|
1245
1252
|
const table = { name: tableName };
|
|
@@ -1257,10 +1264,10 @@ async function down$40(db) {
|
|
|
1257
1264
|
//#endregion
|
|
1258
1265
|
//#region src/database/migrations/031_bylines.ts
|
|
1259
1266
|
var _031_bylines_exports = /* @__PURE__ */ __exportAll({
|
|
1260
|
-
down: () => down$
|
|
1261
|
-
up: () => up$
|
|
1267
|
+
down: () => down$43,
|
|
1268
|
+
up: () => up$43
|
|
1262
1269
|
});
|
|
1263
|
-
async function up$
|
|
1270
|
+
async function up$43(db) {
|
|
1264
1271
|
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();
|
|
1265
1272
|
await sql`
|
|
1266
1273
|
CREATE UNIQUE INDEX ${sql.ref("idx_bylines_user_id_unique")}
|
|
@@ -1292,7 +1299,7 @@ async function up$39(db) {
|
|
|
1292
1299
|
`.execute(db);
|
|
1293
1300
|
}
|
|
1294
1301
|
}
|
|
1295
|
-
async function down$
|
|
1302
|
+
async function down$43(db) {
|
|
1296
1303
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
1297
1304
|
for (const tableName of tableNames) {
|
|
1298
1305
|
await sql`
|
|
@@ -1310,8 +1317,8 @@ async function down$39(db) {
|
|
|
1310
1317
|
//#endregion
|
|
1311
1318
|
//#region src/database/migrations/032_rate_limits.ts
|
|
1312
1319
|
var _032_rate_limits_exports = /* @__PURE__ */ __exportAll({
|
|
1313
|
-
down: () => down$
|
|
1314
|
-
up: () => up$
|
|
1320
|
+
down: () => down$42,
|
|
1321
|
+
up: () => up$42
|
|
1315
1322
|
});
|
|
1316
1323
|
/**
|
|
1317
1324
|
* Migration: Rate limits table + device code polling tracking.
|
|
@@ -1322,12 +1329,12 @@ var _032_rate_limits_exports = /* @__PURE__ */ __exportAll({
|
|
|
1322
1329
|
* 2. Add last_polled_at column to _emdash_device_codes for
|
|
1323
1330
|
* RFC 8628 slow_down enforcement.
|
|
1324
1331
|
*/
|
|
1325
|
-
async function up$
|
|
1332
|
+
async function up$42(db) {
|
|
1326
1333
|
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();
|
|
1327
1334
|
await db.schema.createIndex("idx_rate_limits_window").on("_emdash_rate_limits").column("window").execute();
|
|
1328
1335
|
await db.schema.alterTable("_emdash_device_codes").addColumn("last_polled_at", "text").execute();
|
|
1329
1336
|
}
|
|
1330
|
-
async function down$
|
|
1337
|
+
async function down$42(db) {
|
|
1331
1338
|
await db.schema.dropTable("_emdash_rate_limits").execute();
|
|
1332
1339
|
await db.schema.alterTable("_emdash_device_codes").dropColumn("last_polled_at").execute();
|
|
1333
1340
|
}
|
|
@@ -1335,8 +1342,8 @@ async function down$38(db) {
|
|
|
1335
1342
|
//#endregion
|
|
1336
1343
|
//#region src/database/migrations/033_optimize_content_indexes.ts
|
|
1337
1344
|
var _033_optimize_content_indexes_exports = /* @__PURE__ */ __exportAll({
|
|
1338
|
-
down: () => down$
|
|
1339
|
-
up: () => up$
|
|
1345
|
+
down: () => down$41,
|
|
1346
|
+
up: () => up$41
|
|
1340
1347
|
});
|
|
1341
1348
|
/**
|
|
1342
1349
|
* Migration: Optimize content table indexes for D1 performance
|
|
@@ -1349,7 +1356,7 @@ var _033_optimize_content_indexes_exports = /* @__PURE__ */ __exportAll({
|
|
|
1349
1356
|
*
|
|
1350
1357
|
* Impact: Reduces D1 row reads by 90%+ for admin panel operations.
|
|
1351
1358
|
*/
|
|
1352
|
-
async function up$
|
|
1359
|
+
async function up$41(db) {
|
|
1353
1360
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
1354
1361
|
for (const tableName of tableNames) {
|
|
1355
1362
|
const table = { name: tableName };
|
|
@@ -1391,7 +1398,7 @@ async function up$37(db) {
|
|
|
1391
1398
|
WHERE status = 'trash'
|
|
1392
1399
|
`.execute(db);
|
|
1393
1400
|
}
|
|
1394
|
-
async function down$
|
|
1401
|
+
async function down$41(db) {
|
|
1395
1402
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
1396
1403
|
for (const tableName of tableNames) {
|
|
1397
1404
|
const table = { name: tableName };
|
|
@@ -1424,10 +1431,10 @@ async function down$37(db) {
|
|
|
1424
1431
|
//#endregion
|
|
1425
1432
|
//#region src/database/migrations/034_published_at_index.ts
|
|
1426
1433
|
var _034_published_at_index_exports = /* @__PURE__ */ __exportAll({
|
|
1427
|
-
down: () => down$
|
|
1428
|
-
up: () => up$
|
|
1434
|
+
down: () => down$40,
|
|
1435
|
+
up: () => up$40
|
|
1429
1436
|
});
|
|
1430
|
-
async function up$
|
|
1437
|
+
async function up$40(db) {
|
|
1431
1438
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
1432
1439
|
for (const tableName of tableNames) {
|
|
1433
1440
|
const table = { name: tableName };
|
|
@@ -1437,7 +1444,7 @@ async function up$36(db) {
|
|
|
1437
1444
|
`.execute(db);
|
|
1438
1445
|
}
|
|
1439
1446
|
}
|
|
1440
|
-
async function down$
|
|
1447
|
+
async function down$40(db) {
|
|
1441
1448
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
1442
1449
|
for (const tableName of tableNames) {
|
|
1443
1450
|
const table = { name: tableName };
|
|
@@ -1448,8 +1455,8 @@ async function down$36(db) {
|
|
|
1448
1455
|
//#endregion
|
|
1449
1456
|
//#region src/database/migrations/035_bounded_404_log.ts
|
|
1450
1457
|
var _035_bounded_404_log_exports = /* @__PURE__ */ __exportAll({
|
|
1451
|
-
down: () => down$
|
|
1452
|
-
up: () => up$
|
|
1458
|
+
down: () => down$39,
|
|
1459
|
+
up: () => up$39
|
|
1453
1460
|
});
|
|
1454
1461
|
/**
|
|
1455
1462
|
* Migration: Bounded 404 logging
|
|
@@ -1467,7 +1474,7 @@ var _035_bounded_404_log_exports = /* @__PURE__ */ __exportAll({
|
|
|
1467
1474
|
* path and summing hits
|
|
1468
1475
|
* - Adds a UNIQUE index on `path` so upsert semantics work
|
|
1469
1476
|
*/
|
|
1470
|
-
async function up$
|
|
1477
|
+
async function up$39(db) {
|
|
1471
1478
|
const hitsExists = await columnExists(db, "_emdash_404_log", "hits");
|
|
1472
1479
|
if (!hitsExists) await db.schema.alterTable("_emdash_404_log").addColumn("hits", "integer", (col) => col.notNull().defaultTo(1)).execute();
|
|
1473
1480
|
if (!await columnExists(db, "_emdash_404_log", "last_seen_at")) await db.schema.alterTable("_emdash_404_log").addColumn("last_seen_at", "text").execute();
|
|
@@ -1516,7 +1523,7 @@ async function up$35(db) {
|
|
|
1516
1523
|
await db.schema.dropIndex("idx_404_log_path").ifExists().execute();
|
|
1517
1524
|
await db.schema.createIndex("idx_404_log_last_seen").ifNotExists().on("_emdash_404_log").column("last_seen_at").execute();
|
|
1518
1525
|
}
|
|
1519
|
-
async function down$
|
|
1526
|
+
async function down$39(db) {
|
|
1520
1527
|
await db.schema.dropIndex("idx_404_log_last_seen").ifExists().execute();
|
|
1521
1528
|
await db.schema.dropIndex("idx_404_log_path_unique").ifExists().execute();
|
|
1522
1529
|
await db.schema.createIndex("idx_404_log_path").ifNotExists().on("_emdash_404_log").column("path").execute();
|
|
@@ -1527,8 +1534,8 @@ async function down$35(db) {
|
|
|
1527
1534
|
//#endregion
|
|
1528
1535
|
//#region src/database/migrations/036_i18n_menus_and_taxonomies.ts
|
|
1529
1536
|
var _036_i18n_menus_and_taxonomies_exports = /* @__PURE__ */ __exportAll({
|
|
1530
|
-
down: () => down$
|
|
1531
|
-
up: () => up$
|
|
1537
|
+
down: () => down$38,
|
|
1538
|
+
up: () => up$38
|
|
1532
1539
|
});
|
|
1533
1540
|
/**
|
|
1534
1541
|
* i18n for menus + taxonomies. Adds `locale` + `translation_group` to system
|
|
@@ -1539,7 +1546,7 @@ var _036_i18n_menus_and_taxonomies_exports = /* @__PURE__ */ __exportAll({
|
|
|
1539
1546
|
function getDefaultLocale$1() {
|
|
1540
1547
|
return getI18nConfig()?.defaultLocale ?? "en";
|
|
1541
1548
|
}
|
|
1542
|
-
async function up$
|
|
1549
|
+
async function up$38(db) {
|
|
1543
1550
|
const defaultLocale = getDefaultLocale$1();
|
|
1544
1551
|
if (isSqlite(db)) {
|
|
1545
1552
|
await rebuildContentTaxonomies(db);
|
|
@@ -1754,7 +1761,7 @@ async function assertSingleLocale$1(db, defaultLocale) {
|
|
|
1754
1761
|
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.`);
|
|
1755
1762
|
}
|
|
1756
1763
|
}
|
|
1757
|
-
async function down$
|
|
1764
|
+
async function down$38(db) {
|
|
1758
1765
|
const defaultLocale = getDefaultLocale$1();
|
|
1759
1766
|
await assertSingleLocale$1(db, defaultLocale);
|
|
1760
1767
|
await assertContentTaxonomiesResolve(db, defaultLocale);
|
|
@@ -1852,21 +1859,21 @@ async function rebuildTaxonomyDefsDown(db) {
|
|
|
1852
1859
|
//#endregion
|
|
1853
1860
|
//#region src/database/migrations/037_credential_algorithm.ts
|
|
1854
1861
|
var _037_credential_algorithm_exports = /* @__PURE__ */ __exportAll({
|
|
1855
|
-
down: () => down$
|
|
1856
|
-
up: () => up$
|
|
1862
|
+
down: () => down$37,
|
|
1863
|
+
up: () => up$37
|
|
1857
1864
|
});
|
|
1858
|
-
async function up$
|
|
1865
|
+
async function up$37(db) {
|
|
1859
1866
|
if (!await columnExists(db, "credentials", "algorithm")) await db.schema.alterTable("credentials").addColumn("algorithm", "integer", (col) => col.notNull().defaultTo(-7)).execute();
|
|
1860
1867
|
}
|
|
1861
|
-
async function down$
|
|
1868
|
+
async function down$37(db) {
|
|
1862
1869
|
if (await columnExists(db, "credentials", "algorithm")) await db.schema.alterTable("credentials").dropColumn("algorithm").execute();
|
|
1863
1870
|
}
|
|
1864
1871
|
|
|
1865
1872
|
//#endregion
|
|
1866
1873
|
//#region src/database/migrations/038_registry_plugin_state.ts
|
|
1867
1874
|
var _038_registry_plugin_state_exports = /* @__PURE__ */ __exportAll({
|
|
1868
|
-
down: () => down$
|
|
1869
|
-
up: () => up$
|
|
1875
|
+
down: () => down$36,
|
|
1876
|
+
up: () => up$36
|
|
1870
1877
|
});
|
|
1871
1878
|
/**
|
|
1872
1879
|
* Migration: Add registry fields to _plugin_state
|
|
@@ -1894,7 +1901,7 @@ var _038_registry_plugin_state_exports = /* @__PURE__ */ __exportAll({
|
|
|
1894
1901
|
* checks before adding to keep the migration safe under partial
|
|
1895
1902
|
* re-application. The same pattern is used in 019_i18n.ts.
|
|
1896
1903
|
*/
|
|
1897
|
-
async function up$
|
|
1904
|
+
async function up$36(db) {
|
|
1898
1905
|
if (isSqlite(db)) await upSqlite(db);
|
|
1899
1906
|
else await upPostgres(db);
|
|
1900
1907
|
}
|
|
@@ -1937,7 +1944,7 @@ async function upPostgres(db) {
|
|
|
1937
1944
|
WHERE source = 'registry'
|
|
1938
1945
|
`.execute(db);
|
|
1939
1946
|
}
|
|
1940
|
-
async function down$
|
|
1947
|
+
async function down$36(db) {
|
|
1941
1948
|
await sql`
|
|
1942
1949
|
DROP INDEX IF EXISTS idx_plugin_state_registry
|
|
1943
1950
|
`.execute(db);
|
|
@@ -1954,10 +1961,10 @@ async function down$32(db) {
|
|
|
1954
1961
|
//#endregion
|
|
1955
1962
|
//#region src/database/migrations/039_fix_fts5_triggers.ts
|
|
1956
1963
|
var _039_fix_fts5_triggers_exports = /* @__PURE__ */ __exportAll({
|
|
1957
|
-
down: () => down$
|
|
1958
|
-
up: () => up$
|
|
1964
|
+
down: () => down$35,
|
|
1965
|
+
up: () => up$35
|
|
1959
1966
|
});
|
|
1960
|
-
async function up$
|
|
1967
|
+
async function up$35(db) {
|
|
1961
1968
|
if (!isSqlite(db)) return;
|
|
1962
1969
|
const collections = await sql`
|
|
1963
1970
|
SELECT slug, search_config FROM _emdash_collections
|
|
@@ -1991,7 +1998,7 @@ async function up$31(db) {
|
|
|
1991
1998
|
* at runtime, not by this migration, so leaving them in their
|
|
1992
1999
|
* corruption-safe state on rollback is correct.
|
|
1993
2000
|
*/
|
|
1994
|
-
async function down$
|
|
2001
|
+
async function down$35(_db) {}
|
|
1995
2002
|
function isSearchEnabled$1(searchConfig) {
|
|
1996
2003
|
if (!searchConfig) return false;
|
|
1997
2004
|
try {
|
|
@@ -2083,8 +2090,8 @@ async function dropFtsObjects(db, collectionSlug) {
|
|
|
2083
2090
|
//#endregion
|
|
2084
2091
|
//#region src/database/migrations/040_byline_i18n.ts
|
|
2085
2092
|
var _040_byline_i18n_exports = /* @__PURE__ */ __exportAll({
|
|
2086
|
-
down: () => down$
|
|
2087
|
-
up: () => up$
|
|
2093
|
+
down: () => down$34,
|
|
2094
|
+
up: () => up$34
|
|
2088
2095
|
});
|
|
2089
2096
|
/**
|
|
2090
2097
|
* i18n for bylines. Adds `locale` + `translation_group` to `_emdash_bylines`
|
|
@@ -2112,7 +2119,7 @@ var _040_byline_i18n_exports = /* @__PURE__ */ __exportAll({
|
|
|
2112
2119
|
function getDefaultLocale() {
|
|
2113
2120
|
return getI18nConfig()?.defaultLocale ?? "en";
|
|
2114
2121
|
}
|
|
2115
|
-
async function up$
|
|
2122
|
+
async function up$34(db) {
|
|
2116
2123
|
const defaultLocale = getDefaultLocale();
|
|
2117
2124
|
if (isSqlite(db)) {
|
|
2118
2125
|
await rebuildContentBylines(db);
|
|
@@ -2269,7 +2276,7 @@ async function assertSingleLocale(db, defaultLocale) {
|
|
|
2269
2276
|
const count = Number(result.rows[0]?.count ?? 0);
|
|
2270
2277
|
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.`);
|
|
2271
2278
|
}
|
|
2272
|
-
async function down$
|
|
2279
|
+
async function down$34(db) {
|
|
2273
2280
|
const defaultLocale = getDefaultLocale();
|
|
2274
2281
|
await assertSingleLocale(db, defaultLocale);
|
|
2275
2282
|
await assertContentBylinesResolve(db, defaultLocale);
|
|
@@ -2388,8 +2395,8 @@ async function restoreContentBylinesFk(db) {
|
|
|
2388
2395
|
//#endregion
|
|
2389
2396
|
//#region src/database/migrations/041_content_locale_list_index.ts
|
|
2390
2397
|
var _041_content_locale_list_index_exports = /* @__PURE__ */ __exportAll({
|
|
2391
|
-
down: () => down$
|
|
2392
|
-
up: () => up$
|
|
2398
|
+
down: () => down$33,
|
|
2399
|
+
up: () => up$33
|
|
2393
2400
|
});
|
|
2394
2401
|
/**
|
|
2395
2402
|
* Migration: locale-aware composite indexes for content list queries.
|
|
@@ -2409,7 +2416,7 @@ var _041_content_locale_list_index_exports = /* @__PURE__ */ __exportAll({
|
|
|
2409
2416
|
* slugs as short as 40 chars, making both names truncate to the same string.
|
|
2410
2417
|
* Keep these identical to the names in `schema/registry.ts`.
|
|
2411
2418
|
*/
|
|
2412
|
-
async function up$
|
|
2419
|
+
async function up$33(db) {
|
|
2413
2420
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
2414
2421
|
for (const tableName of tableNames) {
|
|
2415
2422
|
await sql`
|
|
@@ -2422,7 +2429,7 @@ async function up$29(db) {
|
|
|
2422
2429
|
`.execute(db);
|
|
2423
2430
|
}
|
|
2424
2431
|
}
|
|
2425
|
-
async function down$
|
|
2432
|
+
async function down$33(db) {
|
|
2426
2433
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
2427
2434
|
for (const tableName of tableNames) {
|
|
2428
2435
|
await sql`DROP INDEX IF EXISTS ${sql.ref(`idx_${tableName}_loc_upd`)}`.execute(db);
|
|
@@ -2433,8 +2440,8 @@ async function down$29(db) {
|
|
|
2433
2440
|
//#endregion
|
|
2434
2441
|
//#region src/database/migrations/042_byline_fields.ts
|
|
2435
2442
|
var _042_byline_fields_exports = /* @__PURE__ */ __exportAll({
|
|
2436
|
-
down: () => down$
|
|
2437
|
-
up: () => up$
|
|
2443
|
+
down: () => down$32,
|
|
2444
|
+
up: () => up$32
|
|
2438
2445
|
});
|
|
2439
2446
|
/**
|
|
2440
2447
|
* Byline custom fields (Discussion #1174). Adds three tables and a
|
|
@@ -2479,7 +2486,7 @@ var _042_byline_fields_exports = /* @__PURE__ */ __exportAll({
|
|
|
2479
2486
|
* reference it. If `down()` runs after a partial `up()`, missing tables
|
|
2480
2487
|
* are tolerated (`DROP TABLE IF EXISTS`).
|
|
2481
2488
|
*/
|
|
2482
|
-
async function up$
|
|
2489
|
+
async function up$32(db) {
|
|
2483
2490
|
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();
|
|
2484
2491
|
await db.schema.createIndex("idx__emdash_byline_fields_sort_order").ifNotExists().on("_emdash_byline_fields").column("sort_order").execute();
|
|
2485
2492
|
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();
|
|
@@ -2502,7 +2509,7 @@ async function up$28(db) {
|
|
|
2502
2509
|
* `up()` (only one or two tables landed) still settles the database back
|
|
2503
2510
|
* to its pre-042 state.
|
|
2504
2511
|
*/
|
|
2505
|
-
async function down$
|
|
2512
|
+
async function down$32(db) {
|
|
2506
2513
|
await db.schema.dropTable("_emdash_byline_field_group_values").ifExists().execute();
|
|
2507
2514
|
await db.schema.dropTable("_emdash_byline_field_values").ifExists().execute();
|
|
2508
2515
|
await db.schema.dropTable("_emdash_byline_fields").ifExists().execute();
|
|
@@ -2512,8 +2519,8 @@ async function down$28(db) {
|
|
|
2512
2519
|
//#endregion
|
|
2513
2520
|
//#region src/database/migrations/043_content_references.ts
|
|
2514
2521
|
var _043_content_references_exports = /* @__PURE__ */ __exportAll({
|
|
2515
|
-
down: () => down$
|
|
2516
|
-
up: () => up$
|
|
2522
|
+
down: () => down$31,
|
|
2523
|
+
up: () => up$31
|
|
2517
2524
|
});
|
|
2518
2525
|
/**
|
|
2519
2526
|
* Content references.
|
|
@@ -2533,7 +2540,7 @@ var _043_content_references_exports = /* @__PURE__ */ __exportAll({
|
|
|
2533
2540
|
* race-recovery path) re-applies cleanly — including any indexes that landed in
|
|
2534
2541
|
* the failed pass after their table.
|
|
2535
2542
|
*/
|
|
2536
|
-
async function up$
|
|
2543
|
+
async function up$31(db) {
|
|
2537
2544
|
const defaultLocale = getI18nConfig()?.defaultLocale ?? "en";
|
|
2538
2545
|
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();
|
|
2539
2546
|
await db.schema.createIndex("idx__emdash_relations_locale").ifNotExists().on("_emdash_relations").column("locale").execute();
|
|
@@ -2554,7 +2561,7 @@ async function up$27(db) {
|
|
|
2554
2561
|
await db.schema.createIndex("idx__emdash_content_references_child").ifNotExists().on("_emdash_content_references").columns(["child_group", "relation_group"]).execute();
|
|
2555
2562
|
await db.schema.createIndex("idx__emdash_content_references_relation").ifNotExists().on("_emdash_content_references").column("relation_group").execute();
|
|
2556
2563
|
}
|
|
2557
|
-
async function down$
|
|
2564
|
+
async function down$31(db) {
|
|
2558
2565
|
await db.schema.dropTable("_emdash_content_references").ifExists().execute();
|
|
2559
2566
|
await db.schema.dropTable("_emdash_relations").ifExists().execute();
|
|
2560
2567
|
}
|
|
@@ -2562,8 +2569,8 @@ async function down$27(db) {
|
|
|
2562
2569
|
//#endregion
|
|
2563
2570
|
//#region src/database/migrations/044_comment_reactions.ts
|
|
2564
2571
|
var _044_comment_reactions_exports = /* @__PURE__ */ __exportAll({
|
|
2565
|
-
down: () => down$
|
|
2566
|
-
up: () => up$
|
|
2572
|
+
down: () => down$30,
|
|
2573
|
+
up: () => up$30
|
|
2567
2574
|
});
|
|
2568
2575
|
/**
|
|
2569
2576
|
* Comment reactions (Tier 1 of the best-in-class comments RFC).
|
|
@@ -2575,7 +2582,7 @@ var _044_comment_reactions_exports = /* @__PURE__ */ __exportAll({
|
|
|
2575
2582
|
*
|
|
2576
2583
|
* Additive and backward-compatible: a new table, no change to existing schema.
|
|
2577
2584
|
*/
|
|
2578
|
-
async function up$
|
|
2585
|
+
async function up$30(db) {
|
|
2579
2586
|
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();
|
|
2580
2587
|
await db.schema.createIndex("idx_comment_reactions_unique").ifNotExists().on("_emdash_comment_reactions").columns([
|
|
2581
2588
|
"comment_id",
|
|
@@ -2585,15 +2592,15 @@ async function up$26(db) {
|
|
|
2585
2592
|
await db.schema.createIndex("idx_comment_reactions_comment").ifNotExists().on("_emdash_comment_reactions").column("comment_id").execute();
|
|
2586
2593
|
await db.schema.createIndex("idx_comment_reactions_voter").ifNotExists().on("_emdash_comment_reactions").columns(["voter_hash", "created_at"]).execute();
|
|
2587
2594
|
}
|
|
2588
|
-
async function down$
|
|
2595
|
+
async function down$30(db) {
|
|
2589
2596
|
await db.schema.dropTable("_emdash_comment_reactions").execute();
|
|
2590
2597
|
}
|
|
2591
2598
|
|
|
2592
2599
|
//#endregion
|
|
2593
2600
|
//#region src/database/migrations/045_taxonomy_parent_group.ts
|
|
2594
2601
|
var _045_taxonomy_parent_group_exports = /* @__PURE__ */ __exportAll({
|
|
2595
|
-
down: () => down$
|
|
2596
|
-
up: () => up$
|
|
2602
|
+
down: () => down$29,
|
|
2603
|
+
up: () => up$29
|
|
2597
2604
|
});
|
|
2598
2605
|
/**
|
|
2599
2606
|
* Store the parent's `translation_group` in `taxonomies.parent_id` instead of a
|
|
@@ -2623,7 +2630,7 @@ var _045_taxonomy_parent_group_exports = /* @__PURE__ */ __exportAll({
|
|
|
2623
2630
|
* Dialect-independent: the correlated-subquery `UPDATE` runs on SQLite (incl.
|
|
2624
2631
|
* D1) and Postgres alike.
|
|
2625
2632
|
*/
|
|
2626
|
-
async function up$
|
|
2633
|
+
async function up$29(db) {
|
|
2627
2634
|
await sql`
|
|
2628
2635
|
UPDATE taxonomies
|
|
2629
2636
|
SET parent_id = (
|
|
@@ -2645,7 +2652,7 @@ async function up$25(db) {
|
|
|
2645
2652
|
* locale (the pre-migration shape). Rows with no same-locale parent are left as
|
|
2646
2653
|
* they are rather than nulled, so a rollback never silently detaches a subtree.
|
|
2647
2654
|
*/
|
|
2648
|
-
async function down$
|
|
2655
|
+
async function down$29(db) {
|
|
2649
2656
|
await sql`
|
|
2650
2657
|
UPDATE taxonomies
|
|
2651
2658
|
SET parent_id = COALESCE(
|
|
@@ -2663,8 +2670,8 @@ async function down$25(db) {
|
|
|
2663
2670
|
//#endregion
|
|
2664
2671
|
//#region src/database/migrations/046_media_usage_index.ts
|
|
2665
2672
|
var _046_media_usage_index_exports = /* @__PURE__ */ __exportAll({
|
|
2666
|
-
down: () => down$
|
|
2667
|
-
up: () => up$
|
|
2673
|
+
down: () => down$28,
|
|
2674
|
+
up: () => up$28
|
|
2668
2675
|
});
|
|
2669
2676
|
/**
|
|
2670
2677
|
* Internal media usage projection tables.
|
|
@@ -2673,7 +2680,7 @@ var _046_media_usage_index_exports = /* @__PURE__ */ __exportAll({
|
|
|
2673
2680
|
* imports, and no content-table scans. Production rows are introduced by later
|
|
2674
2681
|
* phases once the central snapshot/indexer path is reviewed.
|
|
2675
2682
|
*/
|
|
2676
|
-
async function up$
|
|
2683
|
+
async function up$28(db) {
|
|
2677
2684
|
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();
|
|
2678
2685
|
await db.schema.createIndex("idx__emdash_media_usage_sources_content").ifNotExists().on("_emdash_media_usage_sources").columns([
|
|
2679
2686
|
"source_type",
|
|
@@ -2695,7 +2702,7 @@ async function up$24(db) {
|
|
|
2695
2702
|
await db.schema.createIndex("idx__emdash_media_usage_provider_asset").ifNotExists().on("_emdash_media_usage").columns(["provider", "provider_asset_id"]).execute();
|
|
2696
2703
|
await db.schema.createIndex("idx__emdash_media_usage_source_generation").ifNotExists().on("_emdash_media_usage").columns(["source_key", "generation"]).execute();
|
|
2697
2704
|
}
|
|
2698
|
-
async function down$
|
|
2705
|
+
async function down$28(db) {
|
|
2699
2706
|
await db.schema.dropTable("_emdash_media_usage").ifExists().execute();
|
|
2700
2707
|
await db.schema.dropTable("_emdash_media_usage_sources").ifExists().execute();
|
|
2701
2708
|
}
|
|
@@ -2703,8 +2710,8 @@ async function down$24(db) {
|
|
|
2703
2710
|
//#endregion
|
|
2704
2711
|
//#region src/database/migrations/047_restore_taxonomy_parent_index.ts
|
|
2705
2712
|
var _047_restore_taxonomy_parent_index_exports = /* @__PURE__ */ __exportAll({
|
|
2706
|
-
down: () => down$
|
|
2707
|
-
up: () => up$
|
|
2713
|
+
down: () => down$27,
|
|
2714
|
+
up: () => up$27
|
|
2708
2715
|
});
|
|
2709
2716
|
/**
|
|
2710
2717
|
* Restore `idx_taxonomies_parent` on `taxonomies(parent_id)` (#1665).
|
|
@@ -2721,18 +2728,18 @@ var _047_restore_taxonomy_parent_index_exports = /* @__PURE__ */ __exportAll({
|
|
|
2721
2728
|
* index here. Fresh installs also get it in 036's rebuild for parity with the
|
|
2722
2729
|
* other rebuilt tables, making this a no-op for them.
|
|
2723
2730
|
*/
|
|
2724
|
-
async function up$
|
|
2731
|
+
async function up$27(db) {
|
|
2725
2732
|
await db.schema.createIndex("idx_taxonomies_parent").ifNotExists().on("taxonomies").column("parent_id").execute();
|
|
2726
2733
|
}
|
|
2727
|
-
async function down$
|
|
2734
|
+
async function down$27(db) {
|
|
2728
2735
|
await db.schema.dropIndex("idx_taxonomies_parent").ifExists().execute();
|
|
2729
2736
|
}
|
|
2730
2737
|
|
|
2731
2738
|
//#endregion
|
|
2732
2739
|
//#region src/database/migrations/048_restore_content_taxonomies_term_index.ts
|
|
2733
2740
|
var _048_restore_content_taxonomies_term_index_exports = /* @__PURE__ */ __exportAll({
|
|
2734
|
-
down: () => down$
|
|
2735
|
-
up: () => up$
|
|
2741
|
+
down: () => down$26,
|
|
2742
|
+
up: () => up$26
|
|
2736
2743
|
});
|
|
2737
2744
|
/**
|
|
2738
2745
|
* Restore `idx_content_taxonomies_term` on `content_taxonomies(taxonomy_id)` (#1701).
|
|
@@ -2752,18 +2759,18 @@ var _048_restore_content_taxonomies_term_index_exports = /* @__PURE__ */ __expor
|
|
|
2752
2759
|
*
|
|
2753
2760
|
* Forward-only.
|
|
2754
2761
|
*/
|
|
2755
|
-
async function up$
|
|
2762
|
+
async function up$26(db) {
|
|
2756
2763
|
await db.schema.createIndex("idx_content_taxonomies_term").ifNotExists().on("content_taxonomies").column("taxonomy_id").execute();
|
|
2757
2764
|
}
|
|
2758
|
-
async function down$
|
|
2765
|
+
async function down$26(db) {
|
|
2759
2766
|
await db.schema.dropIndex("idx_content_taxonomies_term").ifExists().execute();
|
|
2760
2767
|
}
|
|
2761
2768
|
|
|
2762
2769
|
//#endregion
|
|
2763
2770
|
//#region src/database/migrations/049_taxonomies_name_locale_index.ts
|
|
2764
2771
|
var _049_taxonomies_name_locale_index_exports = /* @__PURE__ */ __exportAll({
|
|
2765
|
-
down: () => down$
|
|
2766
|
-
up: () => up$
|
|
2772
|
+
down: () => down$25,
|
|
2773
|
+
up: () => up$25
|
|
2767
2774
|
});
|
|
2768
2775
|
/**
|
|
2769
2776
|
* Add composite `idx_taxonomies_name_locale` on `taxonomies(name, locale)` (#1723).
|
|
@@ -2784,11 +2791,11 @@ var _049_taxonomies_name_locale_index_exports = /* @__PURE__ */ __exportAll({
|
|
|
2784
2791
|
* by the new composite's prefix. Create-before-drop keeps name lookups indexed
|
|
2785
2792
|
* at every point. Both statements are idempotent so a partial apply can retry.
|
|
2786
2793
|
*/
|
|
2787
|
-
async function up$
|
|
2794
|
+
async function up$25(db) {
|
|
2788
2795
|
await db.schema.createIndex("idx_taxonomies_name_locale").ifNotExists().on("taxonomies").columns(["name", "locale"]).execute();
|
|
2789
2796
|
await db.schema.dropIndex("idx_taxonomies_name").ifExists().execute();
|
|
2790
2797
|
}
|
|
2791
|
-
async function down$
|
|
2798
|
+
async function down$25(db) {
|
|
2792
2799
|
await db.schema.createIndex("idx_taxonomies_name").ifNotExists().on("taxonomies").column("name").execute();
|
|
2793
2800
|
await db.schema.dropIndex("idx_taxonomies_name_locale").ifExists().execute();
|
|
2794
2801
|
}
|
|
@@ -2796,11 +2803,11 @@ async function down$21(db) {
|
|
|
2796
2803
|
//#endregion
|
|
2797
2804
|
//#region src/database/migrations/050_media_usage_index_status.ts
|
|
2798
2805
|
var _050_media_usage_index_status_exports = /* @__PURE__ */ __exportAll({
|
|
2799
|
-
down: () => down$
|
|
2800
|
-
up: () => up$
|
|
2806
|
+
down: () => down$24,
|
|
2807
|
+
up: () => up$24
|
|
2801
2808
|
});
|
|
2802
2809
|
const SOURCE_TABLE = "_emdash_media_usage_sources";
|
|
2803
|
-
const DUPLICATE_COLUMN_RE$
|
|
2810
|
+
const DUPLICATE_COLUMN_RE$3 = /(?:duplicate column|column .* already exists|already exists.*column)/i;
|
|
2804
2811
|
/**
|
|
2805
2812
|
* Media usage index metadata.
|
|
2806
2813
|
*
|
|
@@ -2808,7 +2815,7 @@ const DUPLICATE_COLUMN_RE$1 = /(?:duplicate column|column .* already exists|alre
|
|
|
2808
2815
|
* tracking for later reference-index reconciliation. No content scans, no
|
|
2809
2816
|
* runtime imports, and no backfill.
|
|
2810
2817
|
*/
|
|
2811
|
-
async function up$
|
|
2818
|
+
async function up$24(db) {
|
|
2812
2819
|
await addSourceMetadataColumns(db);
|
|
2813
2820
|
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", [
|
|
2814
2821
|
"adapter_id",
|
|
@@ -2823,7 +2830,7 @@ async function up$20(db) {
|
|
|
2823
2830
|
await db.schema.createIndex("idx__emdash_media_usage_sources_fingerprint").ifNotExists().on("_emdash_media_usage_sources").column("source_fingerprint").execute();
|
|
2824
2831
|
await db.schema.createIndex("idx__emdash_media_usage_index_status_status").ifNotExists().on("_emdash_media_usage_index_status").columns(["adapter_id", "status"]).execute();
|
|
2825
2832
|
}
|
|
2826
|
-
async function down$
|
|
2833
|
+
async function down$24(db) {
|
|
2827
2834
|
await db.schema.dropIndex("idx__emdash_media_usage_index_status_status").ifExists().execute();
|
|
2828
2835
|
await db.schema.dropIndex("idx__emdash_media_usage_sources_fingerprint").ifExists().execute();
|
|
2829
2836
|
await db.schema.dropIndex("idx__emdash_media_usage_sources_completeness").ifExists().execute();
|
|
@@ -2843,17 +2850,17 @@ async function addColumnIfMissing$1(db, columnName, addColumn) {
|
|
|
2843
2850
|
try {
|
|
2844
2851
|
await addColumn();
|
|
2845
2852
|
} catch (error) {
|
|
2846
|
-
if (DUPLICATE_COLUMN_RE$
|
|
2853
|
+
if (DUPLICATE_COLUMN_RE$3.test(deepErrorMessage$4(error))) {
|
|
2847
2854
|
if (await columnExists(db, SOURCE_TABLE, columnName)) return;
|
|
2848
2855
|
}
|
|
2849
2856
|
throw error;
|
|
2850
2857
|
}
|
|
2851
2858
|
}
|
|
2852
|
-
function deepErrorMessage$
|
|
2859
|
+
function deepErrorMessage$4(error) {
|
|
2853
2860
|
if (error instanceof Error) {
|
|
2854
2861
|
const own = error.message ?? "";
|
|
2855
2862
|
if (error.cause) {
|
|
2856
|
-
const causeMessage = deepErrorMessage$
|
|
2863
|
+
const causeMessage = deepErrorMessage$4(error.cause);
|
|
2857
2864
|
return own ? `${own}: ${causeMessage}` : causeMessage;
|
|
2858
2865
|
}
|
|
2859
2866
|
return own;
|
|
@@ -2879,8 +2886,8 @@ async function dropSourceMetadataColumns(db) {
|
|
|
2879
2886
|
//#endregion
|
|
2880
2887
|
//#region src/database/migrations/051_content_taxonomies_denorm.ts
|
|
2881
2888
|
var _051_content_taxonomies_denorm_exports = /* @__PURE__ */ __exportAll({
|
|
2882
|
-
down: () => down$
|
|
2883
|
-
up: () => up$
|
|
2889
|
+
down: () => down$23,
|
|
2890
|
+
up: () => up$23
|
|
2884
2891
|
});
|
|
2885
2892
|
/**
|
|
2886
2893
|
* Denormalize the filter + sort columns from `ec_*` onto `content_taxonomies`
|
|
@@ -2937,7 +2944,7 @@ const INDEXES = [
|
|
|
2937
2944
|
columns: "taxonomy_id, collection, deleted_at, locale, created_at DESC, entry_id DESC"
|
|
2938
2945
|
}
|
|
2939
2946
|
];
|
|
2940
|
-
async function up$
|
|
2947
|
+
async function up$23(db) {
|
|
2941
2948
|
for (const column of DENORM_COLUMNS) {
|
|
2942
2949
|
if (await columnExists(db, "content_taxonomies", column)) continue;
|
|
2943
2950
|
await sql`
|
|
@@ -2963,7 +2970,7 @@ async function up$19(db) {
|
|
|
2963
2970
|
ON content_taxonomies (${sql.raw(index.columns)})
|
|
2964
2971
|
`.execute(db);
|
|
2965
2972
|
}
|
|
2966
|
-
async function down$
|
|
2973
|
+
async function down$23(db) {
|
|
2967
2974
|
for (const index of INDEXES) await sql`DROP INDEX IF EXISTS ${sql.ref(index.name)}`.execute(db);
|
|
2968
2975
|
for (const column of DENORM_COLUMNS) await sql`
|
|
2969
2976
|
ALTER TABLE content_taxonomies DROP COLUMN ${sql.ref(column)}
|
|
@@ -2973,12 +2980,12 @@ async function down$19(db) {
|
|
|
2973
2980
|
//#endregion
|
|
2974
2981
|
//#region src/database/migrations/052_media_usage_read_index.ts
|
|
2975
2982
|
var _052_media_usage_read_index_exports = /* @__PURE__ */ __exportAll({
|
|
2976
|
-
down: () => down$
|
|
2977
|
-
up: () => up$
|
|
2983
|
+
down: () => down$22,
|
|
2984
|
+
up: () => up$22
|
|
2978
2985
|
});
|
|
2979
2986
|
const OLD_INDEX = "idx__emdash_media_usage_media_id";
|
|
2980
2987
|
const READ_INDEX = "idx__emdash_media_usage_media_source_generation";
|
|
2981
|
-
async function up$
|
|
2988
|
+
async function up$22(db) {
|
|
2982
2989
|
await db.schema.createIndex(READ_INDEX).ifNotExists().on("_emdash_media_usage").columns([
|
|
2983
2990
|
"media_id",
|
|
2984
2991
|
"source_key",
|
|
@@ -2986,7 +2993,7 @@ async function up$18(db) {
|
|
|
2986
2993
|
]).execute();
|
|
2987
2994
|
await db.schema.dropIndex(OLD_INDEX).ifExists().execute();
|
|
2988
2995
|
}
|
|
2989
|
-
async function down$
|
|
2996
|
+
async function down$22(db) {
|
|
2990
2997
|
await db.schema.createIndex(OLD_INDEX).ifNotExists().on("_emdash_media_usage").column("media_id").execute();
|
|
2991
2998
|
await db.schema.dropIndex(READ_INDEX).ifExists().execute();
|
|
2992
2999
|
}
|
|
@@ -2994,15 +3001,15 @@ async function down$18(db) {
|
|
|
2994
3001
|
//#endregion
|
|
2995
3002
|
//#region src/database/migrations/053_plugin_mcp_tools.ts
|
|
2996
3003
|
var _053_plugin_mcp_tools_exports = /* @__PURE__ */ __exportAll({
|
|
2997
|
-
down: () => down$
|
|
2998
|
-
up: () => up$
|
|
3004
|
+
down: () => down$21,
|
|
3005
|
+
up: () => up$21
|
|
2999
3006
|
});
|
|
3000
3007
|
/** Persist explicit per-plugin MCP enablement and the declaration consented to by an admin. */
|
|
3001
|
-
async function up$
|
|
3008
|
+
async function up$21(db) {
|
|
3002
3009
|
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
3010
|
if (!await columnExists(db, "_plugin_state", "mcp_tools_consent")) await db.schema.alterTable("_plugin_state").addColumn("mcp_tools_consent", "text").execute();
|
|
3004
3011
|
}
|
|
3005
|
-
async function down$
|
|
3012
|
+
async function down$21(db) {
|
|
3006
3013
|
await db.schema.alterTable("_plugin_state").dropColumn("mcp_tools_consent").execute();
|
|
3007
3014
|
await db.schema.alterTable("_plugin_state").dropColumn("mcp_tools_enabled").execute();
|
|
3008
3015
|
}
|
|
@@ -3010,16 +3017,16 @@ async function down$17(db) {
|
|
|
3010
3017
|
//#endregion
|
|
3011
3018
|
//#region src/database/migrations/054_media_upload_attempts.ts
|
|
3012
3019
|
var _054_media_upload_attempts_exports = /* @__PURE__ */ __exportAll({
|
|
3013
|
-
down: () => down$
|
|
3014
|
-
up: () => up$
|
|
3020
|
+
down: () => down$20,
|
|
3021
|
+
up: () => up$20
|
|
3015
3022
|
});
|
|
3016
|
-
async function up$
|
|
3023
|
+
async function up$20(db) {
|
|
3017
3024
|
await db.schema.createTable("_emdash_media_upload_attempts").ifNotExists().addColumn("storage_key", "text", (col) => col.primaryKey()).addColumn("media_id", "text", (col) => col.notNull()).addColumn("status", "text", (col) => col.notNull().defaultTo("active")).addColumn("created_at", "text", (col) => col.notNull().defaultTo(currentTimestamp(db))).addColumn("updated_at", "text", (col) => col.notNull().defaultTo(currentTimestamp(db))).execute();
|
|
3018
3025
|
await db.schema.createIndex("idx_media_upload_attempts_media_id").ifNotExists().on("_emdash_media_upload_attempts").column("media_id").execute();
|
|
3019
3026
|
await db.schema.createIndex("idx_media_upload_attempts_status_created_at").ifNotExists().on("_emdash_media_upload_attempts").columns(["status", "created_at"]).execute();
|
|
3020
3027
|
await db.schema.createIndex("idx_media_storage_key").ifNotExists().on("media").column("storage_key").execute();
|
|
3021
3028
|
}
|
|
3022
|
-
async function down$
|
|
3029
|
+
async function down$20(db) {
|
|
3023
3030
|
await db.schema.dropIndex("idx_media_storage_key").ifExists().execute();
|
|
3024
3031
|
await db.schema.dropTable("_emdash_media_upload_attempts").ifExists().execute();
|
|
3025
3032
|
}
|
|
@@ -3027,8 +3034,8 @@ async function down$16(db) {
|
|
|
3027
3034
|
//#endregion
|
|
3028
3035
|
//#region src/database/migrations/055_content_translation_group_locale_index.ts
|
|
3029
3036
|
var _055_content_translation_group_locale_index_exports = /* @__PURE__ */ __exportAll({
|
|
3030
|
-
down: () => down$
|
|
3031
|
-
up: () => up$
|
|
3037
|
+
down: () => down$19,
|
|
3038
|
+
up: () => up$19
|
|
3032
3039
|
});
|
|
3033
3040
|
/**
|
|
3034
3041
|
* Migration: replace the single-column content `translation_group` index with
|
|
@@ -3058,7 +3065,7 @@ var _055_content_translation_group_locale_index_exports = /* @__PURE__ */ __expo
|
|
|
3058
3065
|
* and the longer forms truncate to the same value for long collection slugs.
|
|
3059
3066
|
* Keep these identical to the names in `schema/registry.ts`.
|
|
3060
3067
|
*/
|
|
3061
|
-
async function up$
|
|
3068
|
+
async function up$19(db) {
|
|
3062
3069
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
3063
3070
|
for (const tableName of tableNames) {
|
|
3064
3071
|
await sql`
|
|
@@ -3072,7 +3079,7 @@ async function up$15(db) {
|
|
|
3072
3079
|
await sql`DROP INDEX IF EXISTS ${sql.ref(`idx_${tableName}_translation_group`)}`.execute(db);
|
|
3073
3080
|
}
|
|
3074
3081
|
}
|
|
3075
|
-
async function down$
|
|
3082
|
+
async function down$19(db) {
|
|
3076
3083
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
3077
3084
|
for (const tableName of tableNames) {
|
|
3078
3085
|
await sql`
|
|
@@ -3087,8 +3094,8 @@ async function down$15(db) {
|
|
|
3087
3094
|
//#endregion
|
|
3088
3095
|
//#region src/database/migrations/056_taxonomy_term_sort_order.ts
|
|
3089
3096
|
var _056_taxonomy_term_sort_order_exports = /* @__PURE__ */ __exportAll({
|
|
3090
|
-
down: () => down$
|
|
3091
|
-
up: () => up$
|
|
3097
|
+
down: () => down$18,
|
|
3098
|
+
up: () => up$18
|
|
3092
3099
|
});
|
|
3093
3100
|
/**
|
|
3094
3101
|
* Add `taxonomies.sort_order` and mint a position for every existing term.
|
|
@@ -3116,7 +3123,7 @@ var _056_taxonomy_term_sort_order_exports = /* @__PURE__ */ __exportAll({
|
|
|
3116
3123
|
* Worker gets on the free plan before the migration finishes.
|
|
3117
3124
|
*/
|
|
3118
3125
|
const GROUPS_PER_UPDATE = 32;
|
|
3119
|
-
async function up$
|
|
3126
|
+
async function up$18(db) {
|
|
3120
3127
|
const fresh = !await columnExists(db, "taxonomies", "sort_order");
|
|
3121
3128
|
if (fresh) await db.schema.alterTable("taxonomies").addColumn("sort_order", "integer", (col) => col.notNull().defaultTo(0)).execute();
|
|
3122
3129
|
await sql`UPDATE taxonomies SET translation_group = id WHERE translation_group IS NULL`.execute(db);
|
|
@@ -3215,15 +3222,15 @@ async function applyByGroup(db, column, values) {
|
|
|
3215
3222
|
`.execute(db);
|
|
3216
3223
|
}
|
|
3217
3224
|
}
|
|
3218
|
-
async function down$
|
|
3225
|
+
async function down$18(db) {
|
|
3219
3226
|
if (await columnExists(db, "taxonomies", "sort_order")) await db.schema.alterTable("taxonomies").dropColumn("sort_order").execute();
|
|
3220
3227
|
}
|
|
3221
3228
|
|
|
3222
3229
|
//#endregion
|
|
3223
3230
|
//#region src/database/migrations/057_collection_hidden.ts
|
|
3224
3231
|
var _057_collection_hidden_exports = /* @__PURE__ */ __exportAll({
|
|
3225
|
-
down: () => down$
|
|
3226
|
-
up: () => up$
|
|
3232
|
+
down: () => down$17,
|
|
3233
|
+
up: () => up$17
|
|
3227
3234
|
});
|
|
3228
3235
|
/**
|
|
3229
3236
|
* Migration: hide a collection from the admin sidebar.
|
|
@@ -3233,18 +3240,18 @@ var _057_collection_hidden_exports = /* @__PURE__ */ __exportAll({
|
|
|
3233
3240
|
* URLs) — only its auto-generated sidebar entry is omitted, so plugins that
|
|
3234
3241
|
* own a collection end to end can steer editors to their own admin UI.
|
|
3235
3242
|
*/
|
|
3236
|
-
async function up$
|
|
3243
|
+
async function up$17(db) {
|
|
3237
3244
|
if (!await columnExists(db, "_emdash_collections", "hidden")) await db.schema.alterTable("_emdash_collections").addColumn("hidden", "integer", (col) => col.notNull().defaultTo(0)).execute();
|
|
3238
3245
|
}
|
|
3239
|
-
async function down$
|
|
3246
|
+
async function down$17(db) {
|
|
3240
3247
|
await db.schema.alterTable("_emdash_collections").dropColumn("hidden").execute();
|
|
3241
3248
|
}
|
|
3242
3249
|
|
|
3243
3250
|
//#endregion
|
|
3244
3251
|
//#region src/database/migrations/058_collection_sort_order.ts
|
|
3245
3252
|
var _058_collection_sort_order_exports = /* @__PURE__ */ __exportAll({
|
|
3246
|
-
down: () => down$
|
|
3247
|
-
up: () => up$
|
|
3253
|
+
down: () => down$16,
|
|
3254
|
+
up: () => up$16
|
|
3248
3255
|
});
|
|
3249
3256
|
/**
|
|
3250
3257
|
* Migration: explicit collection order in the admin sidebar.
|
|
@@ -3253,21 +3260,21 @@ var _058_collection_sort_order_exports = /* @__PURE__ */ __exportAll({
|
|
|
3253
3260
|
* explicit position: those collections sort after the ordered ones, keeping
|
|
3254
3261
|
* the alphabetical-by-slug order.
|
|
3255
3262
|
*/
|
|
3256
|
-
async function up$
|
|
3263
|
+
async function up$16(db) {
|
|
3257
3264
|
if (!await columnExists(db, "_emdash_collections", "sort_order")) await db.schema.alterTable("_emdash_collections").addColumn("sort_order", "integer").execute();
|
|
3258
3265
|
}
|
|
3259
|
-
async function down$
|
|
3266
|
+
async function down$16(db) {
|
|
3260
3267
|
await db.schema.alterTable("_emdash_collections").dropColumn("sort_order").execute();
|
|
3261
3268
|
}
|
|
3262
3269
|
|
|
3263
3270
|
//#endregion
|
|
3264
3271
|
//#region src/database/migrations/059_revision_prune_queue.ts
|
|
3265
3272
|
var _059_revision_prune_queue_exports = /* @__PURE__ */ __exportAll({
|
|
3266
|
-
down: () => down$
|
|
3267
|
-
up: () => up$
|
|
3273
|
+
down: () => down$15,
|
|
3274
|
+
up: () => up$15
|
|
3268
3275
|
});
|
|
3269
3276
|
const REVISION_KEEP_COUNT = 50;
|
|
3270
|
-
async function up$
|
|
3277
|
+
async function up$15(db) {
|
|
3271
3278
|
await db.schema.createTable("_emdash_revision_prune_queue").ifNotExists().addColumn("collection", "text", (column) => column.notNull()).addColumn("entry_id", "text", (column) => column.notNull()).addColumn("revision_id", "text", (column) => column.notNull()).addPrimaryKeyConstraint("revision_prune_queue_pk", ["collection", "entry_id"]).execute();
|
|
3272
3279
|
await db.schema.createIndex("idx_revision_prune_queue_revision_id").ifNotExists().on("_emdash_revision_prune_queue").column("revision_id").execute();
|
|
3273
3280
|
await sql`
|
|
@@ -3281,33 +3288,33 @@ async function up$11(db) {
|
|
|
3281
3288
|
DO UPDATE SET revision_id = excluded.revision_id
|
|
3282
3289
|
`.execute(db);
|
|
3283
3290
|
}
|
|
3284
|
-
async function down$
|
|
3291
|
+
async function down$15(db) {
|
|
3285
3292
|
await db.schema.dropTable("_emdash_revision_prune_queue").ifExists().execute();
|
|
3286
3293
|
}
|
|
3287
3294
|
|
|
3288
3295
|
//#endregion
|
|
3289
3296
|
//#region src/database/migrations/060_collection_admin_config.ts
|
|
3290
3297
|
var _060_collection_admin_config_exports = /* @__PURE__ */ __exportAll({
|
|
3291
|
-
down: () => down$
|
|
3292
|
-
up: () => up$
|
|
3298
|
+
down: () => down$14,
|
|
3299
|
+
up: () => up$14
|
|
3293
3300
|
});
|
|
3294
3301
|
/** Persist collection-level admin presentation options. */
|
|
3295
|
-
async function up$
|
|
3302
|
+
async function up$14(db) {
|
|
3296
3303
|
if (!await columnExists(db, "_emdash_collections", "admin_config")) await db.schema.alterTable("_emdash_collections").addColumn("admin_config", "text").execute();
|
|
3297
3304
|
}
|
|
3298
|
-
async function down$
|
|
3305
|
+
async function down$14(db) {
|
|
3299
3306
|
if (await columnExists(db, "_emdash_collections", "admin_config")) await db.schema.alterTable("_emdash_collections").dropColumn("admin_config").execute();
|
|
3300
3307
|
}
|
|
3301
3308
|
|
|
3302
3309
|
//#endregion
|
|
3303
3310
|
//#region src/database/migrations/061_media_usage_cleanup.ts
|
|
3304
3311
|
var _061_media_usage_cleanup_exports = /* @__PURE__ */ __exportAll({
|
|
3305
|
-
down: () => down$
|
|
3306
|
-
up: () => up$
|
|
3312
|
+
down: () => down$13,
|
|
3313
|
+
up: () => up$13
|
|
3307
3314
|
});
|
|
3308
3315
|
const CLEANUP_TASK_KEY = "projection_gc";
|
|
3309
3316
|
const INITIAL_ELIGIBLE_AT = "1970-01-01T00:00:00.000Z";
|
|
3310
|
-
async function up$
|
|
3317
|
+
async function up$13(db) {
|
|
3311
3318
|
await db.schema.createIndex("idx__emdash_media_usage_cleanup_scan").ifNotExists().on("_emdash_media_usage").columns([
|
|
3312
3319
|
"created_at",
|
|
3313
3320
|
"id",
|
|
@@ -3323,7 +3330,7 @@ async function up$9(db) {
|
|
|
3323
3330
|
ON CONFLICT (task_key) DO NOTHING
|
|
3324
3331
|
`.execute(db);
|
|
3325
3332
|
}
|
|
3326
|
-
async function down$
|
|
3333
|
+
async function down$13(db) {
|
|
3327
3334
|
await db.schema.dropIndex("idx__emdash_media_usage_generation_writes_expiry").ifExists().execute();
|
|
3328
3335
|
await db.schema.dropTable("_emdash_media_usage_generation_writes").ifExists().execute();
|
|
3329
3336
|
await db.schema.dropTable("_emdash_media_usage_cleanup").ifExists().execute();
|
|
@@ -3333,10 +3340,10 @@ async function down$9(db) {
|
|
|
3333
3340
|
//#endregion
|
|
3334
3341
|
//#region src/database/migrations/062_media_usage_cleanup_fence.ts
|
|
3335
3342
|
var _062_media_usage_cleanup_fence_exports = /* @__PURE__ */ __exportAll({
|
|
3336
|
-
down: () => down$
|
|
3337
|
-
up: () => up$
|
|
3343
|
+
down: () => down$12,
|
|
3344
|
+
up: () => up$12
|
|
3338
3345
|
});
|
|
3339
|
-
async function up$
|
|
3346
|
+
async function up$12(db) {
|
|
3340
3347
|
if (!await columnExists(db, "_emdash_media_usage", "cleanup_lease_token")) await db.schema.alterTable("_emdash_media_usage").addColumn("cleanup_lease_token", "text").execute();
|
|
3341
3348
|
await db.schema.createTable("_emdash_media_usage_cleanup_fence").ifNotExists().addColumn("task_key", "text", (c) => c.primaryKey()).addColumn("generation_floor", "text", (c) => c.notNull()).addColumn("updated_at", "text", (c) => c.notNull().defaultTo(currentTimestamp(db))).execute();
|
|
3342
3349
|
if (isPostgres(db)) {
|
|
@@ -3518,7 +3525,7 @@ async function up$8(db) {
|
|
|
3518
3525
|
END
|
|
3519
3526
|
`).execute(db);
|
|
3520
3527
|
}
|
|
3521
|
-
async function down$
|
|
3528
|
+
async function down$12(db) {
|
|
3522
3529
|
if (isPostgres(db)) {
|
|
3523
3530
|
await sql.raw("DROP TRIGGER IF EXISTS emdash_media_usage_record_cleanup_fence ON _emdash_media_usage").execute(db);
|
|
3524
3531
|
await sql.raw("DROP TRIGGER IF EXISTS emdash_media_usage_fence_source_generation_update ON _emdash_media_usage_sources").execute(db);
|
|
@@ -3541,14 +3548,14 @@ async function down$8(db) {
|
|
|
3541
3548
|
//#endregion
|
|
3542
3549
|
//#region src/database/migrations/063_media_usage_incremental_work.ts
|
|
3543
3550
|
var _063_media_usage_incremental_work_exports = /* @__PURE__ */ __exportAll({
|
|
3544
|
-
down: () => down$
|
|
3545
|
-
up: () => up$
|
|
3551
|
+
down: () => down$11,
|
|
3552
|
+
up: () => up$11
|
|
3546
3553
|
});
|
|
3547
3554
|
const ACTIVATION_KEY$1 = "incremental_capture";
|
|
3548
3555
|
const CONTENT_ADAPTER_ID = "content-media";
|
|
3549
3556
|
const COLLECTION_SCOPE = "collection";
|
|
3550
|
-
const DUPLICATE_COLUMN_RE = /(?:duplicate column|column .* already exists|already exists.*column)/i;
|
|
3551
|
-
async function up$
|
|
3557
|
+
const DUPLICATE_COLUMN_RE$2 = /(?:duplicate column|column .* already exists|already exists.*column)/i;
|
|
3558
|
+
async function up$11(db) {
|
|
3552
3559
|
await db.schema.createTable("_emdash_media_usage_activation").ifNotExists().addColumn("task_key", "text", (column) => column.primaryKey()).addColumn("state", "text", (column) => column.notNull().defaultTo("expanded")).addColumn("runtime_generation", "integer", (column) => column.notNull().defaultTo(1)).addColumn("collection_cursor", "text").addColumn("drain_confirmed_at", "text").addColumn("lease_token", "text").addColumn("lease_expires_at", "text").addColumn("attempt_count", "integer", (column) => column.notNull().defaultTo(0)).addColumn("last_attempted_at", "text").addColumn("last_error_code", "text").addColumn("activated_at", "text").addColumn("created_at", "text", (column) => column.notNull().defaultTo(sortableUtcTimestamp$2(db))).addColumn("updated_at", "text", (column) => column.notNull().defaultTo(sortableUtcTimestamp$2(db))).execute();
|
|
3553
3560
|
await sql`
|
|
3554
3561
|
INSERT INTO _emdash_media_usage_activation (task_key, state)
|
|
@@ -3645,7 +3652,7 @@ async function up$7(db) {
|
|
|
3645
3652
|
)
|
|
3646
3653
|
`.execute(db);
|
|
3647
3654
|
}
|
|
3648
|
-
async function down$
|
|
3655
|
+
async function down$11(db) {
|
|
3649
3656
|
await assertRollbackIsEmptyAndInactive(db);
|
|
3650
3657
|
await db.schema.dropIndex("idx__emdash_media_usage_sources_identity").ifExists().execute();
|
|
3651
3658
|
await db.schema.dropIndex("idx__emdash_media_usage_status_collection").ifExists().execute();
|
|
@@ -3762,7 +3769,7 @@ async function addColumnIfMissing(db, tableName, columnName, addColumn) {
|
|
|
3762
3769
|
try {
|
|
3763
3770
|
await addColumn();
|
|
3764
3771
|
} catch (error) {
|
|
3765
|
-
if (DUPLICATE_COLUMN_RE.test(deepErrorMessage$
|
|
3772
|
+
if (DUPLICATE_COLUMN_RE$2.test(deepErrorMessage$3(error))) {
|
|
3766
3773
|
if (await columnExists(db, tableName, columnName)) return;
|
|
3767
3774
|
}
|
|
3768
3775
|
throw error;
|
|
@@ -3772,11 +3779,11 @@ function sortableUtcTimestamp$2(db) {
|
|
|
3772
3779
|
if (isPostgres(db)) return sql`to_char(clock_timestamp() AT TIME ZONE 'UTC', 'YYYY-MM-DD"T"HH24:MI:SS.MS"Z"')`;
|
|
3773
3780
|
return sql`(strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))`;
|
|
3774
3781
|
}
|
|
3775
|
-
function deepErrorMessage$
|
|
3782
|
+
function deepErrorMessage$3(error) {
|
|
3776
3783
|
if (error instanceof Error) {
|
|
3777
3784
|
const own = error.message ?? "";
|
|
3778
3785
|
if (error.cause) {
|
|
3779
|
-
const causeMessage = deepErrorMessage$
|
|
3786
|
+
const causeMessage = deepErrorMessage$3(error.cause);
|
|
3780
3787
|
return own ? `${own}: ${causeMessage}` : causeMessage;
|
|
3781
3788
|
}
|
|
3782
3789
|
return own;
|
|
@@ -3792,10 +3799,10 @@ function deepErrorMessage$1(error) {
|
|
|
3792
3799
|
//#endregion
|
|
3793
3800
|
//#region src/database/migrations/064_fts_plain_text.ts
|
|
3794
3801
|
var _064_fts_plain_text_exports = /* @__PURE__ */ __exportAll({
|
|
3795
|
-
down: () => down$
|
|
3796
|
-
up: () => up$
|
|
3802
|
+
down: () => down$10,
|
|
3803
|
+
up: () => up$10
|
|
3797
3804
|
});
|
|
3798
|
-
async function up$
|
|
3805
|
+
async function up$10(db) {
|
|
3799
3806
|
if (!isSqlite(db)) return;
|
|
3800
3807
|
const collections = await sql`
|
|
3801
3808
|
SELECT slug, search_config FROM _emdash_collections
|
|
@@ -3819,7 +3826,7 @@ async function up$6(db) {
|
|
|
3819
3826
|
* at runtime and the self-contained shape remains fully functional for
|
|
3820
3827
|
* older code paths that only MATCH and join on id.
|
|
3821
3828
|
*/
|
|
3822
|
-
async function down$
|
|
3829
|
+
async function down$10(_db) {}
|
|
3823
3830
|
function isSearchEnabled(searchConfig) {
|
|
3824
3831
|
if (!searchConfig) return false;
|
|
3825
3832
|
try {
|
|
@@ -3942,10 +3949,10 @@ async function rebuildIndex(db, collectionSlug, fields, tokenizer) {
|
|
|
3942
3949
|
//#endregion
|
|
3943
3950
|
//#region src/database/migrations/065_media_usage_collection_deletion.ts
|
|
3944
3951
|
var _065_media_usage_collection_deletion_exports = /* @__PURE__ */ __exportAll({
|
|
3945
|
-
down: () => down$
|
|
3946
|
-
up: () => up$
|
|
3952
|
+
down: () => down$9,
|
|
3953
|
+
up: () => up$9
|
|
3947
3954
|
});
|
|
3948
|
-
async function up$
|
|
3955
|
+
async function up$9(db) {
|
|
3949
3956
|
await db.schema.createTable("_emdash_media_usage_collection_deletions").ifNotExists().addColumn("collection_id", "text", (column) => column.notNull().primaryKey()).addColumn("collection_slug", "text", (column) => column.notNull().unique()).addColumn("force_delete", "integer", (column) => column.notNull()).addColumn("state", "text", (column) => column.notNull().defaultTo("pending")).addColumn("phase", "text", (column) => column.notNull().defaultTo("fence")).addColumn("work_cursor", "text").addColumn("source_key", "text").addColumn("occurrence_cursor", "text").addColumn("attempt_count", "integer", (column) => column.notNull().defaultTo(0)).addColumn("next_attempt_at", "text", (column) => column.notNull()).addColumn("lease_token", "text").addColumn("lease_expires_at", "text").addColumn("last_error_code", "text").addColumn("created_at", "text", (column) => column.notNull().defaultTo(sortableUtcTimestamp$1(db))).addColumn("updated_at", "text", (column) => column.notNull().defaultTo(sortableUtcTimestamp$1(db))).execute();
|
|
3950
3957
|
await db.schema.createIndex("idx__emdash_media_usage_collection_deletions_due").ifNotExists().on("_emdash_media_usage_collection_deletions").columns([
|
|
3951
3958
|
"state",
|
|
@@ -3971,7 +3978,7 @@ async function up$5(db) {
|
|
|
3971
3978
|
]).execute();
|
|
3972
3979
|
await db.schema.createIndex("idx__emdash_media_usage_source_cursor").ifNotExists().on("_emdash_media_usage").columns(["source_key", "id"]).execute();
|
|
3973
3980
|
}
|
|
3974
|
-
async function down$
|
|
3981
|
+
async function down$9(db) {
|
|
3975
3982
|
if ((await sql`
|
|
3976
3983
|
SELECT 1 AS present
|
|
3977
3984
|
FROM _emdash_media_usage_collection_deletions
|
|
@@ -3989,11 +3996,11 @@ function sortableUtcTimestamp$1(db) {
|
|
|
3989
3996
|
//#endregion
|
|
3990
3997
|
//#region src/database/migrations/066_media_usage_reconciliation.ts
|
|
3991
3998
|
var _066_media_usage_reconciliation_exports = /* @__PURE__ */ __exportAll({
|
|
3992
|
-
down: () => down$
|
|
3993
|
-
up: () => up$
|
|
3999
|
+
down: () => down$8,
|
|
4000
|
+
up: () => up$8
|
|
3994
4001
|
});
|
|
3995
4002
|
const ACTIVATION_KEY = "incremental_capture";
|
|
3996
|
-
async function up$
|
|
4003
|
+
async function up$8(db) {
|
|
3997
4004
|
await db.schema.createTable("_emdash_media_usage_reconciliations").ifNotExists().addColumn("collection_id", "text", (column) => column.notNull().primaryKey()).addColumn("collection_slug", "text", (column) => column.notNull()).addColumn("run_token", "text", (column) => column.notNull()).addColumn("target_epoch", "bigint").addColumn("field_fingerprint", "text").addColumn("state", "text", (column) => column.notNull().defaultTo("pending")).addColumn("phase", "text", (column) => column.notNull().defaultTo("scan")).addColumn("scan_cursor", "text").addColumn("scan_upper_id", "text").addColumn("source_cursor", "text").addColumn("source_upper_key", "text").addColumn("attempt_count", "integer", (column) => column.notNull().defaultTo(0)).addColumn("next_attempt_at", "text", (column) => column.notNull()).addColumn("lease_token", "text").addColumn("lease_expires_at", "text").addColumn("last_error_code", "text").addColumn("created_at", "text", (column) => column.notNull().defaultTo(sortableUtcTimestamp(db))).addColumn("updated_at", "text", (column) => column.notNull().defaultTo(sortableUtcTimestamp(db))).execute();
|
|
3998
4005
|
await db.schema.createIndex("idx__emdash_media_usage_reconciliations_due").ifNotExists().on("_emdash_media_usage_reconciliations").columns([
|
|
3999
4006
|
"state",
|
|
@@ -4021,7 +4028,7 @@ async function up$4(db) {
|
|
|
4021
4028
|
]).execute();
|
|
4022
4029
|
if (!await columnExists(db, "_emdash_media_usage_activation", "media_usage_maintenance_turn")) await db.schema.alterTable("_emdash_media_usage_activation").addColumn("media_usage_maintenance_turn", "integer", (column) => column.notNull().defaultTo(2)).execute();
|
|
4023
4030
|
}
|
|
4024
|
-
async function down$
|
|
4031
|
+
async function down$8(db) {
|
|
4025
4032
|
if (await tableExists(db, "_emdash_media_usage_reconciliations")) {
|
|
4026
4033
|
if ((await sql`
|
|
4027
4034
|
SELECT 1 AS present
|
|
@@ -4049,15 +4056,15 @@ function sortableUtcTimestamp(db) {
|
|
|
4049
4056
|
//#endregion
|
|
4050
4057
|
//#region src/database/migrations/067_indexed_content_fields.ts
|
|
4051
4058
|
var _067_indexed_content_fields_exports = /* @__PURE__ */ __exportAll({
|
|
4052
|
-
down: () => down$
|
|
4053
|
-
up: () => up$
|
|
4059
|
+
down: () => down$7,
|
|
4060
|
+
up: () => up$7
|
|
4054
4061
|
});
|
|
4055
4062
|
const FIELD_ID_PATTERN = /^[0-9A-Z]{26}$/;
|
|
4056
4063
|
/** Mark custom fields whose structured list queries are backed by a physical index. */
|
|
4057
|
-
async function up$
|
|
4064
|
+
async function up$7(db) {
|
|
4058
4065
|
if (!await columnExists(db, "_emdash_fields", "indexed")) await db.schema.alterTable("_emdash_fields").addColumn("indexed", "integer", (column) => column.notNull().defaultTo(0)).execute();
|
|
4059
4066
|
}
|
|
4060
|
-
async function down$
|
|
4067
|
+
async function down$7(db) {
|
|
4061
4068
|
if (!await columnExists(db, "_emdash_fields", "indexed")) return;
|
|
4062
4069
|
const indexedFields = await sql`
|
|
4063
4070
|
SELECT id FROM _emdash_fields WHERE indexed = 1
|
|
@@ -4077,8 +4084,8 @@ async function down$3(db) {
|
|
|
4077
4084
|
//#endregion
|
|
4078
4085
|
//#region src/database/migrations/068_content_taxonomy_entry_groups.ts
|
|
4079
4086
|
var _068_content_taxonomy_entry_groups_exports = /* @__PURE__ */ __exportAll({
|
|
4080
|
-
down: () => down$
|
|
4081
|
-
up: () => up$
|
|
4087
|
+
down: () => down$6,
|
|
4088
|
+
up: () => up$6
|
|
4082
4089
|
});
|
|
4083
4090
|
const LEGACY_DENORM_INDEXES = [
|
|
4084
4091
|
"idx_content_taxonomies_pub",
|
|
@@ -4092,7 +4099,7 @@ const LEGACY_DENORM_INDEXES = [
|
|
|
4092
4099
|
* and term group. Rows whose content table or content entry no longer exists
|
|
4093
4100
|
* are left untouched.
|
|
4094
4101
|
*/
|
|
4095
|
-
async function up$
|
|
4102
|
+
async function up$6(db) {
|
|
4096
4103
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
4097
4104
|
for (const tableName of tableNames) {
|
|
4098
4105
|
validateIdentifier(tableName, "content table name");
|
|
@@ -4124,13 +4131,13 @@ async function up$2(db) {
|
|
|
4124
4131
|
]).execute();
|
|
4125
4132
|
}
|
|
4126
4133
|
/** The collapsed per-locale rows cannot be reconstructed. */
|
|
4127
|
-
async function down$
|
|
4134
|
+
async function down$6(_db) {}
|
|
4128
4135
|
|
|
4129
4136
|
//#endregion
|
|
4130
4137
|
//#region src/database/migrations/069_collection_title_date_fields.ts
|
|
4131
4138
|
var _069_collection_title_date_fields_exports = /* @__PURE__ */ __exportAll({
|
|
4132
|
-
down: () => down$
|
|
4133
|
-
up: () => up$
|
|
4139
|
+
down: () => down$5,
|
|
4140
|
+
up: () => up$5
|
|
4134
4141
|
});
|
|
4135
4142
|
/**
|
|
4136
4143
|
* Migration: configurable title and date fields for collections
|
|
@@ -4143,7 +4150,7 @@ var _069_collection_title_date_fields_exports = /* @__PURE__ */ __exportAll({
|
|
|
4143
4150
|
* Column adds/drops are guarded by `columnExists`: D1 has no transactions, so a
|
|
4144
4151
|
* migration can partially apply without being recorded and later re-run.
|
|
4145
4152
|
*/
|
|
4146
|
-
async function up$
|
|
4153
|
+
async function up$5(db) {
|
|
4147
4154
|
if (!await columnExists(db, "_emdash_collections", "title_field")) await sql`
|
|
4148
4155
|
ALTER TABLE _emdash_collections
|
|
4149
4156
|
ADD COLUMN title_field TEXT
|
|
@@ -4153,7 +4160,7 @@ async function up$1(db) {
|
|
|
4153
4160
|
ADD COLUMN date_field TEXT
|
|
4154
4161
|
`.execute(db);
|
|
4155
4162
|
}
|
|
4156
|
-
async function down$
|
|
4163
|
+
async function down$5(db) {
|
|
4157
4164
|
if (await columnExists(db, "_emdash_collections", "date_field")) await sql`
|
|
4158
4165
|
ALTER TABLE _emdash_collections
|
|
4159
4166
|
DROP COLUMN date_field
|
|
@@ -4167,14 +4174,184 @@ async function down$1(db) {
|
|
|
4167
4174
|
//#endregion
|
|
4168
4175
|
//#region src/database/migrations/070_collection_routable.ts
|
|
4169
4176
|
var _070_collection_routable_exports = /* @__PURE__ */ __exportAll({
|
|
4177
|
+
down: () => down$4,
|
|
4178
|
+
up: () => up$4
|
|
4179
|
+
});
|
|
4180
|
+
async function up$4(db) {
|
|
4181
|
+
if (!await columnExists(db, "_emdash_collections", "routable")) await db.schema.alterTable("_emdash_collections").addColumn("routable", "integer", (col) => col.notNull().defaultTo(1)).execute();
|
|
4182
|
+
}
|
|
4183
|
+
async function down$4(db) {
|
|
4184
|
+
if (await columnExists(db, "_emdash_collections", "routable")) await db.schema.alterTable("_emdash_collections").dropColumn("routable").execute();
|
|
4185
|
+
}
|
|
4186
|
+
|
|
4187
|
+
//#endregion
|
|
4188
|
+
//#region src/database/migrations/071_restore_content_bylines_table.ts
|
|
4189
|
+
var _071_restore_content_bylines_table_exports = /* @__PURE__ */ __exportAll({
|
|
4190
|
+
down: () => down$3,
|
|
4191
|
+
up: () => up$3
|
|
4192
|
+
});
|
|
4193
|
+
/**
|
|
4194
|
+
* Restore `_emdash_content_bylines` where migration 040's SQLite rebuild
|
|
4195
|
+
* stopped between dropping the old table and renaming the staged copy.
|
|
4196
|
+
*
|
|
4197
|
+
* 040 guards its rebuild on `PRAGMA foreign_key_list`, which returns no rows
|
|
4198
|
+
* for a missing table, so a retry after that partial run skips the rename and
|
|
4199
|
+
* leaves `_emdash_content_bylines_new` behind with the credits inside. The
|
|
4200
|
+
* indexes went with the dropped table.
|
|
4201
|
+
*
|
|
4202
|
+
* The Postgres path of 040 alters the table in place, so this is a no-op there.
|
|
4203
|
+
*/
|
|
4204
|
+
async function up$3(db) {
|
|
4205
|
+
if (!isSqlite(db)) return;
|
|
4206
|
+
if (!await tableExists(db, "_emdash_content_bylines")) {
|
|
4207
|
+
if (!await tableExists(db, "_emdash_content_bylines_new")) return;
|
|
4208
|
+
await sql`ALTER TABLE _emdash_content_bylines_new RENAME TO _emdash_content_bylines`.execute(db);
|
|
4209
|
+
}
|
|
4210
|
+
await db.schema.createIndex("idx_content_bylines_content").ifNotExists().on("_emdash_content_bylines").columns([
|
|
4211
|
+
"collection_slug",
|
|
4212
|
+
"content_id",
|
|
4213
|
+
"sort_order"
|
|
4214
|
+
]).execute();
|
|
4215
|
+
await db.schema.createIndex("idx_content_bylines_byline").ifNotExists().on("_emdash_content_bylines").column("byline_id").execute();
|
|
4216
|
+
}
|
|
4217
|
+
async function down$3(_db) {}
|
|
4218
|
+
|
|
4219
|
+
//#endregion
|
|
4220
|
+
//#region src/database/migrations/072_media_folders.ts
|
|
4221
|
+
var _072_media_folders_exports = /* @__PURE__ */ __exportAll({
|
|
4222
|
+
down: () => down$2,
|
|
4223
|
+
up: () => up$2
|
|
4224
|
+
});
|
|
4225
|
+
const DUPLICATE_COLUMN_RE$1 = /(?:duplicate column|column .* already exists|already exists.*column)/i;
|
|
4226
|
+
async function up$2(db) {
|
|
4227
|
+
await db.schema.createTable("media_folders").ifNotExists().addColumn("id", "text", (col) => col.primaryKey()).addColumn("name", "text", (col) => col.notNull()).addColumn("name_key", "text", (col) => col.notNull().unique()).execute();
|
|
4228
|
+
await addFolderColumnIfMissing(db, () => db.schema.alterTable("media").addColumn("folder_id", "text", (col) => col.references("media_folders.id").onDelete("set null")).execute());
|
|
4229
|
+
await db.schema.createIndex("idx_media_folder_id").ifNotExists().on("media").column("folder_id").execute();
|
|
4230
|
+
}
|
|
4231
|
+
async function down$2(db) {
|
|
4232
|
+
await db.schema.dropIndex("idx_media_folder_id").ifExists().execute();
|
|
4233
|
+
if (await columnExists(db, "media", "folder_id")) await db.schema.alterTable("media").dropColumn("folder_id").execute();
|
|
4234
|
+
await db.schema.dropTable("media_folders").ifExists().execute();
|
|
4235
|
+
}
|
|
4236
|
+
async function addFolderColumnIfMissing(db, addColumn) {
|
|
4237
|
+
if (await columnExists(db, "media", "folder_id")) return;
|
|
4238
|
+
try {
|
|
4239
|
+
await addColumn();
|
|
4240
|
+
} catch (error) {
|
|
4241
|
+
if (DUPLICATE_COLUMN_RE$1.test(deepErrorMessage$2(error))) {
|
|
4242
|
+
if (await columnExists(db, "media", "folder_id")) return;
|
|
4243
|
+
}
|
|
4244
|
+
throw error;
|
|
4245
|
+
}
|
|
4246
|
+
}
|
|
4247
|
+
function deepErrorMessage$2(error) {
|
|
4248
|
+
if (error instanceof Error) {
|
|
4249
|
+
const own = error.message ?? "";
|
|
4250
|
+
if (error.cause) {
|
|
4251
|
+
const causeMessage = deepErrorMessage$2(error.cause);
|
|
4252
|
+
return own ? `${own}: ${causeMessage}` : causeMessage;
|
|
4253
|
+
}
|
|
4254
|
+
return own;
|
|
4255
|
+
}
|
|
4256
|
+
if (typeof error === "string") return error;
|
|
4257
|
+
try {
|
|
4258
|
+
return JSON.stringify(error);
|
|
4259
|
+
} catch {
|
|
4260
|
+
return String(error);
|
|
4261
|
+
}
|
|
4262
|
+
}
|
|
4263
|
+
|
|
4264
|
+
//#endregion
|
|
4265
|
+
//#region src/database/migrations/073_media_focal_point.ts
|
|
4266
|
+
var _073_media_focal_point_exports = /* @__PURE__ */ __exportAll({
|
|
4267
|
+
addFocalColumnIfMissing: () => addFocalColumnIfMissing,
|
|
4268
|
+
down: () => down$1,
|
|
4269
|
+
up: () => up$1
|
|
4270
|
+
});
|
|
4271
|
+
const DUPLICATE_COLUMN_RE = /(?:duplicate column|column .* already exists|already exists.*column)/i;
|
|
4272
|
+
async function up$1(db) {
|
|
4273
|
+
await addFocalColumnIfMissing(db, "focal_x", () => db.schema.alterTable("media").addColumn("focal_x", "real").execute());
|
|
4274
|
+
await addFocalColumnIfMissing(db, "focal_y", () => db.schema.alterTable("media").addColumn("focal_y", "real").execute());
|
|
4275
|
+
}
|
|
4276
|
+
async function down$1(db) {
|
|
4277
|
+
if (await columnExists(db, "media", "focal_y")) await db.schema.alterTable("media").dropColumn("focal_y").execute();
|
|
4278
|
+
if (await columnExists(db, "media", "focal_x")) await db.schema.alterTable("media").dropColumn("focal_x").execute();
|
|
4279
|
+
}
|
|
4280
|
+
async function addFocalColumnIfMissing(db, column, addColumn) {
|
|
4281
|
+
if (await columnExists(db, "media", column)) return;
|
|
4282
|
+
try {
|
|
4283
|
+
await addColumn();
|
|
4284
|
+
} catch (error) {
|
|
4285
|
+
if (DUPLICATE_COLUMN_RE.test(deepErrorMessage$1(error))) {
|
|
4286
|
+
if (await columnExists(db, "media", column)) return;
|
|
4287
|
+
}
|
|
4288
|
+
throw error;
|
|
4289
|
+
}
|
|
4290
|
+
}
|
|
4291
|
+
function deepErrorMessage$1(error) {
|
|
4292
|
+
if (error instanceof Error) {
|
|
4293
|
+
const own = error.message ?? "";
|
|
4294
|
+
if (error.cause) {
|
|
4295
|
+
const causeMessage = deepErrorMessage$1(error.cause);
|
|
4296
|
+
return own ? `${own}: ${causeMessage}` : causeMessage;
|
|
4297
|
+
}
|
|
4298
|
+
return own;
|
|
4299
|
+
}
|
|
4300
|
+
if (typeof error === "string") return error;
|
|
4301
|
+
try {
|
|
4302
|
+
return JSON.stringify(error);
|
|
4303
|
+
} catch {
|
|
4304
|
+
return String(error);
|
|
4305
|
+
}
|
|
4306
|
+
}
|
|
4307
|
+
|
|
4308
|
+
//#endregion
|
|
4309
|
+
//#region src/database/migrations/074_content_deleted_scheduled_index.ts
|
|
4310
|
+
var _074_content_deleted_scheduled_index_exports = /* @__PURE__ */ __exportAll({
|
|
4170
4311
|
down: () => down,
|
|
4171
4312
|
up: () => up
|
|
4172
4313
|
});
|
|
4314
|
+
/**
|
|
4315
|
+
* Migration: replace the single-column partial `scheduled_at` index on content
|
|
4316
|
+
* tables with a `(deleted_at, scheduled_at)` composite.
|
|
4317
|
+
*
|
|
4318
|
+
* The scheduled-publishing sweep filters `scheduled_at` by range and
|
|
4319
|
+
* `deleted_at IS NULL`, ordered by `scheduled_at`. A `scheduled_at`-only index
|
|
4320
|
+
* cannot satisfy the soft-delete term, so a stats-blind planner seeks a
|
|
4321
|
+
* `deleted_at`-leading composite instead and reads every live row. Leading with
|
|
4322
|
+
* `deleted_at` lets one index serve the equality, the range, and the ORDER BY.
|
|
4323
|
+
* D1 never has `sqlite_stat1`, so the index shape is the only lever.
|
|
4324
|
+
*
|
|
4325
|
+
* The partial predicate from migration 030 is kept so the index stays
|
|
4326
|
+
* proportional to scheduled content rather than to the table.
|
|
4327
|
+
*
|
|
4328
|
+
* Forward-only and idempotent (`IF NOT EXISTS`).
|
|
4329
|
+
*
|
|
4330
|
+
* The short `del_sched` suffix keeps the name inside Postgres's 63-byte
|
|
4331
|
+
* identifier limit for long collection slugs. Keep it identical to the name in
|
|
4332
|
+
* `schema/registry.ts`.
|
|
4333
|
+
*/
|
|
4173
4334
|
async function up(db) {
|
|
4174
|
-
|
|
4335
|
+
const tableNames = await listTablesLike(db, "ec_%");
|
|
4336
|
+
for (const tableName of tableNames) {
|
|
4337
|
+
await sql`
|
|
4338
|
+
CREATE INDEX IF NOT EXISTS ${sql.ref(`idx_${tableName}_del_sched`)}
|
|
4339
|
+
ON ${sql.ref(tableName)} (deleted_at, scheduled_at)
|
|
4340
|
+
WHERE scheduled_at IS NOT NULL
|
|
4341
|
+
`.execute(db);
|
|
4342
|
+
await sql`DROP INDEX IF EXISTS ${sql.ref(`idx_${tableName}_scheduled`)}`.execute(db);
|
|
4343
|
+
}
|
|
4175
4344
|
}
|
|
4176
4345
|
async function down(db) {
|
|
4177
|
-
|
|
4346
|
+
const tableNames = await listTablesLike(db, "ec_%");
|
|
4347
|
+
for (const tableName of tableNames) {
|
|
4348
|
+
await sql`
|
|
4349
|
+
CREATE INDEX IF NOT EXISTS ${sql.ref(`idx_${tableName}_scheduled`)}
|
|
4350
|
+
ON ${sql.ref(tableName)} (scheduled_at)
|
|
4351
|
+
WHERE scheduled_at IS NOT NULL
|
|
4352
|
+
`.execute(db);
|
|
4353
|
+
await sql`DROP INDEX IF EXISTS ${sql.ref(`idx_${tableName}_del_sched`)}`.execute(db);
|
|
4354
|
+
}
|
|
4178
4355
|
}
|
|
4179
4356
|
|
|
4180
4357
|
//#endregion
|
|
@@ -4248,7 +4425,11 @@ const MIGRATIONS = Object.freeze({
|
|
|
4248
4425
|
"067_indexed_content_fields": _067_indexed_content_fields_exports,
|
|
4249
4426
|
"068_content_taxonomy_entry_groups": _068_content_taxonomy_entry_groups_exports,
|
|
4250
4427
|
"069_collection_title_date_fields": _069_collection_title_date_fields_exports,
|
|
4251
|
-
"070_collection_routable": _070_collection_routable_exports
|
|
4428
|
+
"070_collection_routable": _070_collection_routable_exports,
|
|
4429
|
+
"071_restore_content_bylines_table": _071_restore_content_bylines_table_exports,
|
|
4430
|
+
"072_media_folders": _072_media_folders_exports,
|
|
4431
|
+
"073_media_focal_point": _073_media_focal_point_exports,
|
|
4432
|
+
"074_content_deleted_scheduled_index": _074_content_deleted_scheduled_index_exports
|
|
4252
4433
|
});
|
|
4253
4434
|
/** Ordered names from the statically registered migration set. */
|
|
4254
4435
|
const MIGRATION_NAMES = Object.freeze(Object.keys(MIGRATIONS));
|
|
@@ -4319,7 +4500,7 @@ function escapeRegExp(value) {
|
|
|
4319
4500
|
*
|
|
4320
4501
|
* We match on the table name (not the full error text) because different
|
|
4321
4502
|
* SQLite drivers phrase the message differently
|
|
4322
|
-
* (`UNIQUE constraint failed: _emdash_migrations.name` for
|
|
4503
|
+
* (`UNIQUE constraint failed: _emdash_migrations.name` for file-backed SQLite,
|
|
4323
4504
|
* `D1_ERROR: UNIQUE constraint failed: _emdash_migrations.name: SQLITE_CONSTRAINT`
|
|
4324
4505
|
* for D1, etc.). The pattern is built from `MIGRATION_TABLE` so a rename
|
|
4325
4506
|
* cannot silently disable race detection.
|
|
@@ -4338,7 +4519,7 @@ const MIGRATION_RACE_POLL_MS = 100;
|
|
|
4338
4519
|
* Pattern used to detect "table does not exist" errors across the dialects
|
|
4339
4520
|
* EmDash supports. The phrasing differs by driver:
|
|
4340
4521
|
*
|
|
4341
|
-
* -
|
|
4522
|
+
* - SQLite: `no such table: _emdash_migrations`
|
|
4342
4523
|
* - D1: `D1_ERROR: no such table: _emdash_migrations: SQLITE_ERROR`
|
|
4343
4524
|
* - PostgreSQL: `relation "_emdash_migrations" does not exist`
|
|
4344
4525
|
* (also occasionally `table "_emdash_migrations" does not exist`)
|
|
@@ -4492,4 +4673,4 @@ async function rollbackMigration(db, options) {
|
|
|
4492
4673
|
|
|
4493
4674
|
//#endregion
|
|
4494
4675
|
export { getMigrationStatus as a, __exportAll as c, getExactMigrationStatus as i, MIGRATION_NAMES as n, rollbackMigration as o, MIGRATION_RACE_WAIT_MS as r, runMigrations as s, ConcurrentMigrationTimeoutError as t };
|
|
4495
|
-
//# sourceMappingURL=runner-
|
|
4676
|
+
//# sourceMappingURL=runner-BLIDKpmA.mjs.map
|