emdash 0.37.0 → 0.38.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 → activation-DyNTe_Tl.mjs} +3 -3
- package/dist/{activation-K0kGBWuJ.mjs.map → activation-DyNTe_Tl.mjs.map} +1 -1
- package/dist/{adapters-BDQwg236.d.mts → adapters-DCEgOBXi.d.mts} +1 -1
- package/dist/{adapters-BDQwg236.d.mts.map → adapters-DCEgOBXi.d.mts.map} +1 -1
- package/dist/{allowed-origins-BGglilcs.mjs → allowed-origins-GFUVavRj.mjs} +2 -2
- package/dist/{allowed-origins-BGglilcs.mjs.map → allowed-origins-GFUVavRj.mjs.map} +1 -1
- package/dist/api/route-utils.d.mts +3 -3
- package/dist/api/route-utils.mjs +23 -22
- 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 → api-BvxJmnFY.mjs} +141 -87
- package/dist/api-BvxJmnFY.mjs.map +1 -0
- package/dist/{api-tokens-BSsQACNe.mjs → api-tokens-xpGqMHrC.mjs} +2 -2
- package/dist/{api-tokens-BSsQACNe.mjs.map → api-tokens-xpGqMHrC.mjs.map} +1 -1
- package/dist/{apply-B4SIOxR1.mjs → apply-DLmM3R7f.mjs} +25 -21
- package/dist/apply-DLmM3R7f.mjs.map +1 -0
- package/dist/{config-it29yDLA.mjs → artifact-fetch-P2JXVwOq.mjs} +8 -199
- package/dist/artifact-fetch-P2JXVwOq.mjs.map +1 -0
- package/dist/astro/index.d.mts +12 -12
- package/dist/astro/index.d.mts.map +1 -1
- package/dist/astro/index.mjs +37 -11
- package/dist/astro/index.mjs.map +1 -1
- package/dist/astro/middleware/auth.d.mts +10 -10
- package/dist/astro/middleware/auth.mjs +6 -6
- package/dist/astro/middleware/media-usage-write-fence.mjs +3 -3
- package/dist/astro/middleware/redirect.mjs +7 -5
- package/dist/astro/middleware/redirect.mjs.map +1 -1
- package/dist/astro/middleware/request-context.mjs +3 -3
- package/dist/astro/middleware/setup.mjs +1 -1
- package/dist/astro/middleware.d.mts +10 -10
- package/dist/astro/middleware.d.mts.map +1 -1
- package/dist/astro/middleware.mjs +154 -125
- package/dist/astro/middleware.mjs.map +1 -1
- package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +6 -6
- package/dist/astro/routes/api/admin/allowed-domains/index.mjs +6 -6
- package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +3 -3
- package/dist/astro/routes/api/admin/api-tokens/index.mjs +4 -4
- package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +4 -4
- package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +9 -9
- package/dist/astro/routes/api/admin/byline-fields/index.mjs +9 -9
- package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +9 -9
- package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +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 +11 -11
- package/dist/astro/routes/api/admin/comments/_id_.mjs +3 -3
- package/dist/astro/routes/api/admin/comments/bulk.mjs +8 -8
- package/dist/astro/routes/api/admin/comments/counts.mjs +3 -3
- package/dist/astro/routes/api/admin/comments/index.mjs +8 -8
- 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.mjs +13 -13
- package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs +15 -15
- package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs +15 -15
- package/dist/astro/routes/api/admin/media-usage/progress.mjs +13 -13
- package/dist/astro/routes/api/admin/media-usage/repair.mjs +16 -16
- package/dist/astro/routes/api/admin/media-usage/work/index.mjs +15 -15
- package/dist/astro/routes/api/admin/media-usage/work/retry.mjs +15 -15
- package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +3 -3
- package/dist/astro/routes/api/admin/oauth-clients/index.mjs +3 -3
- package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +56 -53
- package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +56 -53
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +54 -51
- 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 +54 -51
- package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +55 -52
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +55 -52
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/index.mjs +54 -51
- 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 +54 -51
- 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 +55 -52
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +54 -51
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +55 -52
- package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs +56 -53
- package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +5 -4
- package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/install.mjs +56 -53
- package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/verify.mjs +55 -52
- package/dist/astro/routes/api/admin/plugins/registry/verify.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/updates.mjs +54 -51
- package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +54 -51
- 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 +54 -51
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/users/_id_/disable.mjs +1 -1
- package/dist/astro/routes/api/admin/users/_id_/enable.mjs +1 -1
- package/dist/astro/routes/api/admin/users/_id_/index.mjs +6 -6
- 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.mjs +7 -7
- 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 +12 -12
- package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +11 -11
- 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 +13 -8
- 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_/lock.d.mts +10 -0
- package/dist/astro/routes/api/content/_collection_/_id_/lock.d.mts.map +1 -0
- package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs +66 -0
- package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs.map +1 -0
- 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.d.mts.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +14 -9
- 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 +19 -17
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs +19 -17
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/_id_/schedule.d.mts.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +15 -8
- package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +15 -14
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs.map +1 -1
- 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 +13 -8
- package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_.d.mts.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_.mjs +23 -11
- package/dist/astro/routes/api/content/_collection_/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/authors.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/index.mjs +14 -9
- package/dist/astro/routes/api/content/_collection_/index.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/trash.mjs +7 -7
- package/dist/astro/routes/api/dashboard.mjs +6 -6
- package/dist/astro/routes/api/dev/emails.mjs +2 -2
- package/dist/astro/routes/api/import/probe.d.mts +3 -3
- package/dist/astro/routes/api/import/probe.mjs +16 -16
- package/dist/astro/routes/api/import/wordpress/analyze.mjs +3 -3
- package/dist/astro/routes/api/import/wordpress/execute.d.mts +11 -11
- package/dist/astro/routes/api/import/wordpress/execute.mjs +14 -13
- package/dist/astro/routes/api/import/wordpress/execute.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress/media.d.mts +10 -10
- package/dist/astro/routes/api/import/wordpress/media.mjs +11 -11
- package/dist/astro/routes/api/import/wordpress/prepare.mjs +10 -10
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +11 -11
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +13 -13
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +16 -16
- package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +11 -11
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +27 -26
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs.map +1 -1
- package/dist/astro/routes/api/manifest.mjs +4 -4
- package/dist/astro/routes/api/mcp.mjs +71 -55
- package/dist/astro/routes/api/mcp.mjs.map +1 -1
- package/dist/astro/routes/api/media/_id_/confirm.mjs +10 -10
- package/dist/astro/routes/api/media/_id_/replace.mjs +8 -8
- package/dist/astro/routes/api/media/_id_/upload.mjs +5 -5
- package/dist/astro/routes/api/media/_id_/usage.mjs +18 -18
- package/dist/astro/routes/api/media/_id_.mjs +17 -17
- package/dist/astro/routes/api/media/file/_...key_.mjs +1 -1
- package/dist/astro/routes/api/media/folders/_id_.mjs +8 -8
- package/dist/astro/routes/api/media/folders/index.mjs +8 -8
- package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +2 -2
- package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +2 -2
- package/dist/astro/routes/api/media/providers/index.mjs +2 -2
- package/dist/astro/routes/api/media/upload-url.mjs +9 -9
- package/dist/astro/routes/api/media.mjs +21 -21
- package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +9 -9
- package/dist/astro/routes/api/menus/_name_/items.mjs +9 -9
- package/dist/astro/routes/api/menus/_name_/reorder.mjs +9 -9
- package/dist/astro/routes/api/menus/_name_/translations.mjs +9 -9
- package/dist/astro/routes/api/menus/_name_.mjs +9 -9
- package/dist/astro/routes/api/menus/index.mjs +9 -9
- 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 +84 -18
- 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 +12 -11
- package/dist/astro/routes/api/redirects/404s/index.mjs.map +1 -1
- package/dist/astro/routes/api/redirects/404s/summary.mjs +12 -11
- package/dist/astro/routes/api/redirects/404s/summary.mjs.map +1 -1
- package/dist/astro/routes/api/redirects/_id_.mjs +13 -12
- package/dist/astro/routes/api/redirects/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/redirects/index.mjs +13 -12
- package/dist/astro/routes/api/redirects/index.mjs.map +1 -1
- package/dist/astro/routes/api/relations/_id_/index.mjs +19 -17
- package/dist/astro/routes/api/relations/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/relations/_id_/translations.mjs +14 -12
- package/dist/astro/routes/api/relations/_id_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/relations/index.mjs +19 -17
- package/dist/astro/routes/api/relations/index.mjs.map +1 -1
- package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +2 -2
- package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +3 -3
- package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +54 -51
- 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 +54 -51
- 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 +54 -51
- package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +54 -51
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/index.mjs +54 -51
- package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/reorder.mjs +54 -51
- package/dist/astro/routes/api/schema/collections/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/schema/index.mjs +13 -11
- package/dist/astro/routes/api/schema/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs +54 -51
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/schema/orphans/index.mjs +54 -51
- package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
- package/dist/astro/routes/api/search/enable.mjs +12 -11
- package/dist/astro/routes/api/search/enable.mjs.map +1 -1
- package/dist/astro/routes/api/search/index.mjs +11 -10
- package/dist/astro/routes/api/search/index.mjs.map +1 -1
- package/dist/astro/routes/api/search/rebuild.mjs +12 -11
- package/dist/astro/routes/api/search/rebuild.mjs.map +1 -1
- package/dist/astro/routes/api/search/stats.mjs +7 -6
- package/dist/astro/routes/api/search/stats.mjs.map +1 -1
- package/dist/astro/routes/api/search/suggest.mjs +11 -10
- package/dist/astro/routes/api/search/suggest.mjs.map +1 -1
- package/dist/astro/routes/api/sections/_slug_.mjs +11 -10
- package/dist/astro/routes/api/sections/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/sections/index.mjs +11 -10
- package/dist/astro/routes/api/sections/index.mjs.map +1 -1
- package/dist/astro/routes/api/settings/backups/archives/_name_.mjs +7 -6
- package/dist/astro/routes/api/settings/backups/archives/_name_.mjs.map +1 -1
- package/dist/astro/routes/api/settings/backups/archives/index.mjs +6 -5
- package/dist/astro/routes/api/settings/backups/archives/index.mjs.map +1 -1
- package/dist/astro/routes/api/settings/backups/export.mjs +7 -6
- package/dist/astro/routes/api/settings/backups/export.mjs.map +1 -1
- package/dist/astro/routes/api/settings/backups/index.mjs +8 -7
- package/dist/astro/routes/api/settings/backups/index.mjs.map +1 -1
- package/dist/astro/routes/api/settings/email.mjs +4 -4
- package/dist/astro/routes/api/settings.mjs +14 -14
- 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.mjs +33 -31
- package/dist/astro/routes/api/setup/dev-bypass.mjs.map +1 -1
- package/dist/astro/routes/api/setup/dev-reset.mjs +2 -2
- package/dist/astro/routes/api/setup/index.mjs +33 -31
- 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 +8 -7
- package/dist/astro/routes/api/snapshot.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs +16 -15
- package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +16 -15
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +16 -15
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +16 -15
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/translations.mjs +15 -14
- package/dist/astro/routes/api/taxonomies/_name_/translations.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_.mjs +16 -15
- package/dist/astro/routes/api/taxonomies/_name_.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/index.mjs +16 -15
- package/dist/astro/routes/api/taxonomies/index.mjs.map +1 -1
- package/dist/astro/routes/api/themes/preview.mjs +5 -5
- package/dist/astro/routes/api/typegen.mjs +4 -4
- package/dist/astro/routes/api/well-known/auth.mjs +2 -2
- package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +2 -2
- package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +2 -2
- package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +8 -8
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +12 -12
- package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +12 -12
- package/dist/astro/routes/api/widget-areas/_name_.mjs +7 -7
- package/dist/astro/routes/api/widget-areas/index.mjs +12 -12
- package/dist/astro/routes/api/widget-components.mjs +2 -2
- package/dist/astro/routes/robots.txt.mjs +6 -6
- package/dist/astro/routes/sitemap-_collection_.xml.mjs +11 -10
- package/dist/astro/routes/sitemap-_collection_.xml.mjs.map +1 -1
- package/dist/astro/routes/sitemap.xml.mjs +7 -7
- package/dist/astro/types.d.mts +32 -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-Bkf_UHhD.mjs → authorize-C2QHlWSS.mjs} +2 -2
- package/dist/{authorize-Bkf_UHhD.mjs.map → authorize-C2QHlWSS.mjs.map} +1 -1
- package/dist/{backup-rwVAl9NI.mjs → backup-oS8ft5Cm.mjs} +5 -5
- package/dist/{backup-rwVAl9NI.mjs.map → backup-oS8ft5Cm.mjs.map} +1 -1
- package/dist/{bundle-C8S2Zl6U.mjs → bundle-CL0JjIPx.mjs} +4 -4
- package/dist/{bundle-C8S2Zl6U.mjs.map → bundle-CL0JjIPx.mjs.map} +1 -1
- package/dist/{byline-DuhF7NWl.mjs → byline-Vdi85CsZ.mjs} +6 -6
- package/dist/{byline-DuhF7NWl.mjs.map → byline-Vdi85CsZ.mjs.map} +1 -1
- package/dist/{byline-fields-BovY4KYM.mjs → byline-fields-DPVRFMz2.mjs} +2 -2
- package/dist/{byline-fields-BovY4KYM.mjs.map → byline-fields-DPVRFMz2.mjs.map} +1 -1
- package/dist/{byline-registry-Bpu9-MVs.mjs → byline-registry-BxDGIO0I.mjs} +2 -2
- package/dist/{byline-registry-Bpu9-MVs.mjs.map → byline-registry-BxDGIO0I.mjs.map} +1 -1
- package/dist/{bylines-CJ5nd6Lw.mjs → bylines-BX8QhcTk.mjs} +7 -7
- package/dist/{bylines-CJ5nd6Lw.mjs.map → bylines-BX8QhcTk.mjs.map} +1 -1
- package/dist/{bylines-RwBAeOF1.mjs → bylines-w-E1IEQd.mjs} +3 -3
- package/dist/{bylines-RwBAeOF1.mjs.map → bylines-w-E1IEQd.mjs.map} +1 -1
- package/dist/{cache-BF5Kvn59.mjs → cache--7HKu5Xm.mjs} +4 -4
- package/dist/{cache-BF5Kvn59.mjs.map → cache--7HKu5Xm.mjs.map} +1 -1
- package/dist/{capture-triggers-CNW1q3HK.mjs → capture-triggers-CeAsC76Z.mjs} +2 -2
- package/dist/{capture-triggers-CNW1q3HK.mjs.map → capture-triggers-CeAsC76Z.mjs.map} +1 -1
- package/dist/{challenge-store-DQN_Yrck.mjs → challenge-store-BIOak-tp.mjs} +1 -1
- package/dist/{challenge-store-DQN_Yrck.mjs.map → challenge-store-BIOak-tp.mjs.map} +1 -1
- package/dist/{chrome-tags-D8fiZG94.mjs → chrome-tags-DzDQBCjX.mjs} +1 -1
- package/dist/{chrome-tags-D8fiZG94.mjs.map → chrome-tags-DzDQBCjX.mjs.map} +1 -1
- package/dist/{chunks-C4szrD8o.mjs → chunks-VG_tyqnP.mjs} +2 -2
- package/dist/{chunks-C4szrD8o.mjs.map → chunks-VG_tyqnP.mjs.map} +1 -1
- package/dist/cli/index.mjs +66 -38
- package/dist/cli/index.mjs.map +1 -1
- package/dist/client/cf-access.d.mts +1 -1
- package/dist/client/index.d.mts +17 -7
- package/dist/client/index.d.mts.map +1 -1
- package/dist/client/index.mjs +17 -12
- package/dist/client/index.mjs.map +1 -1
- package/dist/{collection-deletion-Bj07NHbj.mjs → collection-deletion-BCwaWTDw.mjs} +4 -4
- package/dist/{collection-deletion-Bj07NHbj.mjs.map → collection-deletion-BCwaWTDw.mjs.map} +1 -1
- package/dist/collection-slugs-cache-7lTmNzeA.mjs +85 -0
- package/dist/collection-slugs-cache-7lTmNzeA.mjs.map +1 -0
- package/dist/{comment-reaction-BhrvSHml.mjs → comment-reaction-CDyvPQRj.mjs} +2 -2
- package/dist/{comment-reaction-BhrvSHml.mjs.map → comment-reaction-CDyvPQRj.mjs.map} +1 -1
- package/dist/{comments-Ct4ensnf.mjs → comments-VzmVLyaC.mjs} +1 -1
- package/dist/{comments-Ct4ensnf.mjs.map → comments-VzmVLyaC.mjs.map} +1 -1
- package/dist/{components-DJbo1z0S.mjs → components-CL6Wkdk-.mjs} +1 -1
- package/dist/{components-DJbo1z0S.mjs.map → components-CL6Wkdk-.mjs.map} +1 -1
- package/dist/config--eWjQJE5.mjs +217 -0
- package/dist/config--eWjQJE5.mjs.map +1 -0
- package/dist/{index-BJNMCWmu.d.mts → config-CGAhyOjP.d.mts} +138 -47
- package/dist/config-CGAhyOjP.d.mts.map +1 -0
- package/dist/{config-B9eZ340f.d.mts → config-ChFzshGd.d.mts} +1 -1
- package/dist/{config-B9eZ340f.d.mts.map → config-ChFzshGd.d.mts.map} +1 -1
- package/dist/{content-DjvM0T92.mjs → content-CNfMWuhY.mjs} +121 -5
- package/dist/content-CNfMWuhY.mjs.map +1 -0
- package/dist/{content-list-query-Btqd4uV2.d.mts → content-list-query-B8d4UQp9.d.mts} +1 -1
- package/dist/{content-list-query-Btqd4uV2.d.mts.map → content-list-query-B8d4UQp9.d.mts.map} +1 -1
- package/dist/{content-refresh-Bwp-8yGy.mjs → content-refresh-GTMyi2Xy.mjs} +8 -8
- package/dist/{content-refresh-Bwp-8yGy.mjs.map → content-refresh-GTMyi2Xy.mjs.map} +1 -1
- package/dist/{content-repair-Czdp7jz5.mjs → content-repair-CIMt5C0U.mjs} +4 -4
- package/dist/{content-repair-Czdp7jz5.mjs.map → content-repair-CIMt5C0U.mjs.map} +1 -1
- package/dist/{context-CX6gxOLW.mjs → context-C9PB8vGd.mjs} +265 -25
- package/dist/context-C9PB8vGd.mjs.map +1 -0
- package/dist/{cron-C6o7VppJ.mjs → cron-DHAy9oyq.mjs} +1 -1
- package/dist/{cron-C6o7VppJ.mjs.map → cron-DHAy9oyq.mjs.map} +1 -1
- package/dist/{dashboard-C2kTeeRI.mjs → dashboard-BNSvAN8A.mjs} +4 -4
- package/dist/{dashboard-C2kTeeRI.mjs.map → dashboard-BNSvAN8A.mjs.map} +1 -1
- package/dist/db/index.d.mts +3 -3
- package/dist/db/index.mjs +2 -2
- package/dist/db/libsql-migrations.d.mts +1 -1
- package/dist/db/libsql-migrations.mjs +5 -5
- package/dist/db/libsql.d.mts +1 -1
- package/dist/db/postgres-migrations.d.mts +1 -1
- package/dist/db/postgres-migrations.mjs +5 -5
- package/dist/db/postgres.d.mts +1 -1
- package/dist/db/sqlite-migrations.d.mts +1 -1
- package/dist/db/sqlite-migrations.mjs +5 -5
- package/dist/db/sqlite.d.mts +1 -1
- package/dist/db/sqlite.mjs +1 -1
- package/dist/{default-Clra32mw.mjs → default-ByZ0JqZo.mjs} +1 -1
- package/dist/{default-Clra32mw.mjs.map → default-ByZ0JqZo.mjs.map} +1 -1
- package/dist/{deferred-tasks-CvDETTJO.d.mts → deferred-tasks-Cu4NSJpa.d.mts} +1 -1
- package/dist/{deferred-tasks-CvDETTJO.d.mts.map → deferred-tasks-Cu4NSJpa.d.mts.map} +1 -1
- package/dist/{dev-typegen-DzOPfsNj.mjs → dev-typegen-DHT7lcMU.mjs} +1 -1
- package/dist/{dev-typegen-DzOPfsNj.mjs.map → dev-typegen-DHT7lcMU.mjs.map} +1 -1
- package/dist/{device-flow-D2oCWvLJ.mjs → device-flow-Cf6bhCCT.mjs} +4 -4
- package/dist/{device-flow-D2oCWvLJ.mjs.map → device-flow-Cf6bhCCT.mjs.map} +1 -1
- package/dist/{dialect-helpers-BSbfaO3F.mjs → dialect-helpers-BcQvkHgn.mjs} +83 -2
- package/dist/dialect-helpers-BcQvkHgn.mjs.map +1 -0
- package/dist/{direct-executor-Bfa5_ToE.mjs → direct-executor-yAyUGSqB.mjs} +3 -3
- package/dist/{direct-executor-Bfa5_ToE.mjs.map → direct-executor-yAyUGSqB.mjs.map} +1 -1
- package/dist/{dist-89xCrGqi.mjs → dist-BAsh8dbf.mjs} +1 -1
- package/dist/{dist-89xCrGqi.mjs.map → dist-BAsh8dbf.mjs.map} +1 -1
- package/dist/{email-console-Dzb6uGYa.mjs → email-console-DNup1Fku.mjs} +1 -1
- package/dist/{email-console-Dzb6uGYa.mjs.map → email-console-DNup1Fku.mjs.map} +1 -1
- package/dist/{enrich-BX0IDp4z.mjs → enrich-t2Xvjdqa.mjs} +3 -3
- package/dist/{enrich-BX0IDp4z.mjs.map → enrich-t2Xvjdqa.mjs.map} +1 -1
- package/dist/entry-lock-BEr8gDkG.mjs +163 -0
- package/dist/entry-lock-BEr8gDkG.mjs.map +1 -0
- package/dist/{relations-DnRK4YIT.d.mts → entry-lock-CGAtrwAR.d.mts} +92 -37
- package/dist/entry-lock-CGAtrwAR.d.mts.map +1 -0
- package/dist/{redirects-BLNOWQTn.mjs → entry-lock-DIYHAaSw.mjs} +57 -14
- package/dist/entry-lock-DIYHAaSw.mjs.map +1 -0
- package/dist/entry-locks-BEcX7ET0.mjs +167 -0
- package/dist/entry-locks-BEcX7ET0.mjs.map +1 -0
- package/dist/{error-DFrQjppn.mjs → error-BDcFyoRt.mjs} +2 -2
- package/dist/{error-DFrQjppn.mjs.map → error-BDcFyoRt.mjs.map} +1 -1
- package/dist/{errors-DsVoDUjJ.mjs → errors-DvMdNrgf.mjs} +8 -1
- package/dist/errors-DvMdNrgf.mjs.map +1 -0
- package/dist/{escape-HmHTC1Is.mjs → escape-B3asJC6W.mjs} +1 -1
- package/dist/{escape-HmHTC1Is.mjs.map → escape-B3asJC6W.mjs.map} +1 -1
- package/dist/{field-defs-cache-BM4SIRqH.mjs → field-defs-cache-Cf5FHK0M.mjs} +5 -5
- package/dist/{field-defs-cache-BM4SIRqH.mjs.map → field-defs-cache-Cf5FHK0M.mjs.map} +1 -1
- package/dist/{fts-manager-Do1BlW2r.mjs → fts-manager-iddym8cd.mjs} +4 -4
- package/dist/{fts-manager-Do1BlW2r.mjs.map → fts-manager-iddym8cd.mjs.map} +1 -1
- package/dist/{hash-3JJPlHF2.mjs → hash-BRweX6jz.mjs} +1 -1
- package/dist/{hash-3JJPlHF2.mjs.map → hash-BRweX6jz.mjs.map} +1 -1
- package/dist/{hook-result-DCh2WUpe.d.mts → hook-result-BrshYHLx.d.mts} +1 -1
- package/dist/{hook-result-DCh2WUpe.d.mts.map → hook-result-BrshYHLx.d.mts.map} +1 -1
- package/dist/{hreflang-B6hbAuuO.d.mts → hreflang-CQpu5bMy.d.mts} +2 -2
- package/dist/{hreflang-B6hbAuuO.d.mts.map → hreflang-CQpu5bMy.d.mts.map} +1 -1
- package/dist/{hreflang-DQbPZliA.mjs → hreflang-DshnweTC.mjs} +9 -8
- package/dist/{hreflang-DQbPZliA.mjs.map → hreflang-DshnweTC.mjs.map} +1 -1
- package/dist/{identity-DksvEazf.mjs → identity-CjGKDq8J.mjs} +3 -3
- package/dist/{identity-DksvEazf.mjs.map → identity-CjGKDq8J.mjs.map} +1 -1
- package/dist/{import-CJpaBBBT.mjs → import-D96g2otw.mjs} +5 -5
- package/dist/{import-CJpaBBBT.mjs.map → import-D96g2otw.mjs.map} +1 -1
- package/dist/{index-Du8K7bWa.d.mts → index-1ECYpfiF.d.mts} +3 -3
- package/dist/{index-Du8K7bWa.d.mts.map → index-1ECYpfiF.d.mts.map} +1 -1
- package/dist/index.d.mts +22 -22
- package/dist/index.mjs +81 -78
- package/dist/{init-lock-DJkX6Hto.mjs → init-lock-CFNBe_iH.mjs} +1 -1
- package/dist/{init-lock-DJkX6Hto.mjs.map → init-lock-CFNBe_iH.mjs.map} +1 -1
- package/dist/{load-CawHjTOH.mjs → load-DPtY9cZo.mjs} +2 -2
- package/dist/{load-CawHjTOH.mjs.map → load-DPtY9cZo.mjs.map} +1 -1
- package/dist/{loader-Z8vl7zTq.mjs → loader-WJi6GFRn.mjs} +46 -8
- package/dist/loader-WJi6GFRn.mjs.map +1 -0
- package/dist/{manifest-builder-COtzuca2.mjs → manifest-builder-BfNlGQIA.mjs} +2 -2
- package/dist/{manifest-builder-COtzuca2.mjs.map → manifest-builder-BfNlGQIA.mjs.map} +1 -1
- package/dist/{manifest-schema-BNWwR8Vd.mjs → manifest-schema-CILooI5J.mjs} +1 -1
- package/dist/{manifest-schema-BNWwR8Vd.mjs.map → manifest-schema-CILooI5J.mjs.map} +1 -1
- package/dist/media/image-endpoint.mjs +1 -1
- package/dist/media/index.d.mts +1 -1
- package/dist/media/index.mjs +3 -3
- package/dist/media/local-runtime.d.mts +12 -12
- package/dist/media/local-runtime.mjs +5 -5
- package/dist/{media-BHjus86Y.mjs → media-C1EIZKh1.mjs} +1 -1
- package/dist/{media-BHjus86Y.mjs.map → media-C1EIZKh1.mjs.map} +1 -1
- package/dist/{media-allowlist-CoTBWoDp.mjs → media-allowlist-elXJgb_K.mjs} +2 -2
- package/dist/{media-allowlist-CoTBWoDp.mjs.map → media-allowlist-elXJgb_K.mjs.map} +1 -1
- package/dist/{media-folders-BGkATs8n.mjs → media-folders-DASfX_DH.mjs} +1 -1
- package/dist/{media-folders-BGkATs8n.mjs.map → media-folders-DASfX_DH.mjs.map} +1 -1
- package/dist/{media-upload-BCidR-EY.mjs → media-upload-C7_AQJ5v.mjs} +8 -8
- package/dist/{media-upload-BCidR-EY.mjs.map → media-upload-C7_AQJ5v.mjs.map} +1 -1
- package/dist/{media-url-DHoPr0hq.mjs → media-url-8dVl1loq.mjs} +19 -2
- package/dist/media-url-8dVl1loq.mjs.map +1 -0
- package/dist/{media-usage-CdY5jhSR.mjs → media-usage-C1EswMTq.mjs} +9 -9
- package/dist/{media-usage-CdY5jhSR.mjs.map → media-usage-C1EswMTq.mjs.map} +1 -1
- package/dist/{media-usage-activation-BgeMtK5C.mjs → media-usage-activation-CrHNltlL.mjs} +3 -3
- package/dist/{media-usage-activation-BgeMtK5C.mjs.map → media-usage-activation-CrHNltlL.mjs.map} +1 -1
- package/dist/{media-usage-work-D6D9sMCA.mjs → media-usage-work-C5B1zT1c.mjs} +2 -2
- package/dist/{media-usage-work-D6D9sMCA.mjs.map → media-usage-work-C5B1zT1c.mjs.map} +1 -1
- package/dist/{media-usage-work-CnGCdHxx.mjs → media-usage-work-IkQx_Yz6.mjs} +4 -4
- package/dist/{media-usage-work-CnGCdHxx.mjs.map → media-usage-work-IkQx_Yz6.mjs.map} +1 -1
- package/dist/{media-usage-write-fence-hjeD4u7s.mjs → media-usage-write-fence-B9anjOSg.mjs} +3 -3
- package/dist/{media-usage-write-fence-hjeD4u7s.mjs.map → media-usage-write-fence-B9anjOSg.mjs.map} +1 -1
- package/dist/{menus-6qSwTNxG.mjs → menus-D8mC4eaN.mjs} +115 -136
- package/dist/menus-D8mC4eaN.mjs.map +1 -0
- package/dist/{menus-uvPLXMZf.mjs → menus-UdwjHZJC.mjs} +11 -3
- package/dist/{menus-uvPLXMZf.mjs.map → menus-UdwjHZJC.mjs.map} +1 -1
- package/dist/migrations/index.d.mts +1 -1
- package/dist/migrations/index.mjs +4 -4
- package/dist/{mime-CUIG6x84.mjs → mime-DYpsOAny.mjs} +1 -1
- package/dist/{mime-CUIG6x84.mjs.map → mime-DYpsOAny.mjs.map} +1 -1
- package/dist/{mode-DN_WneRx.mjs → mode-Dm4BHhRH.mjs} +1 -1
- package/dist/{mode-DN_WneRx.mjs.map → mode-Dm4BHhRH.mjs.map} +1 -1
- package/dist/{node-sqlite-compat-BuJXIeMz.mjs → node-sqlite-compat-2sezm-Zd.mjs} +1 -1
- package/dist/{node-sqlite-compat-BuJXIeMz.mjs.map → node-sqlite-compat-2sezm-Zd.mjs.map} +1 -1
- package/dist/{normalize-C2xNjTSG.mjs → normalize-4nkKGsuW.mjs} +1 -1
- package/dist/{normalize-C2xNjTSG.mjs.map → normalize-4nkKGsuW.mjs.map} +1 -1
- package/dist/{oauth-authorization-Dj6Kwc21.mjs → oauth-authorization-BxE_lURD.mjs} +4 -4
- package/dist/{oauth-authorization-Dj6Kwc21.mjs.map → oauth-authorization-BxE_lURD.mjs.map} +1 -1
- package/dist/{oauth-clients-FD7I0J8m.mjs → oauth-clients-DJIdOdq0.mjs} +1 -1
- package/dist/{oauth-clients-FD7I0J8m.mjs.map → oauth-clients-DJIdOdq0.mjs.map} +1 -1
- package/dist/{oauth-state-store-DkmDOmHs.mjs → oauth-state-store-CsdxP57n.mjs} +1 -1
- package/dist/{oauth-state-store-DkmDOmHs.mjs.map → oauth-state-store-CsdxP57n.mjs.map} +1 -1
- package/dist/{oauth-user-lookup-CvIwGpYd.mjs → oauth-user-lookup-HzzW-dkF.mjs} +1 -1
- package/dist/{oauth-user-lookup-CvIwGpYd.mjs.map → oauth-user-lookup-HzzW-dkF.mjs.map} +1 -1
- package/dist/object-cache/memory.d.mts +1 -1
- package/dist/{options-BHPeIbBd.mjs → options-D1FBiAv1.mjs} +60 -5
- package/dist/options-D1FBiAv1.mjs.map +1 -0
- package/dist/{options-CYb4y7hM.d.mts → options-D8Y0VHc7.d.mts} +9 -3
- package/dist/options-D8Y0VHc7.d.mts.map +1 -0
- package/dist/page/index.d.mts +2 -2
- package/dist/page/index.d.mts.map +1 -1
- package/dist/page/index.mjs +12 -0
- package/dist/page/index.mjs.map +1 -1
- package/dist/{parse-Ckpg-Qfp.mjs → parse-WRg5C3NX.mjs} +2 -2
- package/dist/{parse-Ckpg-Qfp.mjs.map → parse-WRg5C3NX.mjs.map} +1 -1
- package/dist/{passkey-config-O_lj3y0k.mjs → passkey-config-qIdO-wF6.mjs} +1 -1
- package/dist/{passkey-config-O_lj3y0k.mjs.map → passkey-config-qIdO-wF6.mjs.map} +1 -1
- package/dist/{patterns-D9iDO3j8.mjs → patterns-DC8CLptu.mjs} +1 -1
- package/dist/{patterns-D9iDO3j8.mjs.map → patterns-DC8CLptu.mjs.map} +1 -1
- package/dist/{placeholder-4X9BrRrp.d.mts → placeholder-COrvARyD.d.mts} +1 -1
- package/dist/{placeholder-4X9BrRrp.d.mts.map → placeholder-COrvARyD.d.mts.map} +1 -1
- package/dist/plugin-types.d.mts +3 -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-Dhtwntrt.mjs → policy-XCfb-IE9.mjs} +2 -2
- package/dist/{policy-Dhtwntrt.mjs.map → policy-XCfb-IE9.mjs.map} +1 -1
- package/dist/{portable-text-U85hOafW.mjs → portable-text-BS3d5n-0.mjs} +1 -1
- package/dist/{portable-text-U85hOafW.mjs.map → portable-text-BS3d5n-0.mjs.map} +1 -1
- package/dist/{preview-B_vJLvf8.mjs → preview-BxwsGgGp.mjs} +2 -2
- package/dist/{preview-B_vJLvf8.mjs.map → preview-BxwsGgGp.mjs.map} +1 -1
- package/dist/{protocol-JdD2YhY9.d.mts → protocol-CLn58-nw.d.mts} +2 -2
- package/dist/{protocol-JdD2YhY9.d.mts.map → protocol-CLn58-nw.d.mts.map} +1 -1
- package/dist/{public-url-CarhZJgf.mjs → public-url-FWWAvnre.mjs} +1 -1
- package/dist/{public-url-CarhZJgf.mjs.map → public-url-FWWAvnre.mjs.map} +1 -1
- package/dist/{query-BZKZcG5b.mjs → query-DygOte9M.mjs} +25 -16
- package/dist/query-DygOte9M.mjs.map +1 -0
- package/dist/{query-BndaFxxp.mjs → query-gtXT03Wc.mjs} +4 -4
- package/dist/{query-BndaFxxp.mjs.map → query-gtXT03Wc.mjs.map} +1 -1
- package/dist/{rate-limit-BZmATC6W.mjs → rate-limit-CQUPm0dh.mjs} +2 -2
- package/dist/{rate-limit-BZmATC6W.mjs.map → rate-limit-CQUPm0dh.mjs.map} +1 -1
- package/dist/{redirect-CzqnLxK-.mjs → redirect-D1cWafi6.mjs} +1 -1
- package/dist/{redirect-CzqnLxK-.mjs.map → redirect-D1cWafi6.mjs.map} +1 -1
- package/dist/{redirect-CZkbozu9.mjs → redirect-DId44BS1.mjs} +19 -6
- package/dist/redirect-DId44BS1.mjs.map +1 -0
- package/dist/{redirects-CqzNM0KM.mjs → redirects-DN-ZE33W.mjs} +5 -5
- package/dist/{redirects-CqzNM0KM.mjs.map → redirects-DN-ZE33W.mjs.map} +1 -1
- package/dist/{registry-AZAsRsor.mjs → registry-DTqaqxed.mjs} +26 -10
- package/dist/registry-DTqaqxed.mjs.map +1 -0
- package/dist/{relation-04DfKRTO.mjs → relation-DxgCHOBw.mjs} +2 -2
- package/dist/{relation-04DfKRTO.mjs.map → relation-DxgCHOBw.mjs.map} +1 -1
- package/dist/{relations-CcFwDJdJ.mjs → relations-KKDSLUwS.mjs} +4 -4
- package/dist/{relations-CcFwDJdJ.mjs.map → relations-KKDSLUwS.mjs.map} +1 -1
- package/dist/{relations-C4htk5sb.mjs → relations-rOmbndUJ.mjs} +3 -3
- package/dist/{relations-C4htk5sb.mjs.map → relations-rOmbndUJ.mjs.map} +1 -1
- package/dist/{request-cache-DH9zdCOD.mjs → request-cache-DAZZmesc.mjs} +1 -1
- package/dist/{request-cache-DH9zdCOD.mjs.map → request-cache-DAZZmesc.mjs.map} +1 -1
- package/dist/request-context.d.mts +1 -1
- package/dist/{request-meta-DYxLlnmz.mjs → request-meta-BgjUQLQ-.mjs} +2 -2
- package/dist/{request-meta-DYxLlnmz.mjs.map → request-meta-BgjUQLQ-.mjs.map} +1 -1
- package/dist/{resolve-prZ3mP7l.mjs → resolve-Cy0aWSRj.mjs} +37 -4
- package/dist/resolve-Cy0aWSRj.mjs.map +1 -0
- package/dist/{runner-YKfIMnaF.d.mts → runner-CfwysRM0.d.mts} +2 -2
- package/dist/{runner-YKfIMnaF.d.mts.map → runner-CfwysRM0.d.mts.map} +1 -1
- package/dist/{runner-BLIDKpmA.mjs → runner-nEzvnogG.mjs} +419 -295
- package/dist/runner-nEzvnogG.mjs.map +1 -0
- package/dist/runtime.d.mts +11 -11
- package/dist/runtime.mjs +3 -2
- package/dist/runtime.mjs.map +1 -1
- package/dist/{schema-CGnBeLiW.mjs → schema-CRu38Pr5.mjs} +3 -3
- package/dist/{schema-CGnBeLiW.mjs.map → schema-CRu38Pr5.mjs.map} +1 -1
- package/dist/{schema-DYr-Vd-L.mjs → schema-DifxndJx.mjs} +4 -4
- package/dist/{schema-DYr-Vd-L.mjs.map → schema-DifxndJx.mjs.map} +1 -1
- package/dist/{scopes-BhWvBavj.mjs → scopes-D5A1OZbq.mjs} +3 -3
- package/dist/{scopes-BhWvBavj.mjs.map → scopes-D5A1OZbq.mjs.map} +1 -1
- package/dist/{search-C-qDk4kx.mjs → search-DEPFSBFq.mjs} +4 -4
- package/dist/{search-C-qDk4kx.mjs.map → search-DEPFSBFq.mjs.map} +1 -1
- package/dist/{secrets-rEtHt-6z.mjs → secrets-CdfzLdoO.mjs} +3 -3
- package/dist/{secrets-rEtHt-6z.mjs.map → secrets-CdfzLdoO.mjs.map} +1 -1
- package/dist/{sections-B_nYvlwn.mjs → sections-3X52kmIR.mjs} +2 -2
- package/dist/{sections-B_nYvlwn.mjs.map → sections-3X52kmIR.mjs.map} +1 -1
- package/dist/seed/index.d.mts +2 -2
- package/dist/seed/index.mjs +26 -24
- package/dist/seo/index.d.mts +3 -3
- package/dist/seo/index.d.mts.map +1 -1
- package/dist/seo/index.mjs +18 -19
- package/dist/seo/index.mjs.map +1 -1
- package/dist/{seo-926NRIgt.mjs → seo-Bw68KxRc.mjs} +2 -2
- package/dist/{seo-926NRIgt.mjs.map → seo-Bw68KxRc.mjs.map} +1 -1
- package/dist/{seo-CVWkdv6x.mjs → seo-C4AmbsMU.mjs} +3 -2
- package/dist/seo-C4AmbsMU.mjs.map +1 -0
- package/dist/{service-CJl3ZAYs.mjs → service-J_-Vgo7R.mjs} +2 -2
- package/dist/{service-CJl3ZAYs.mjs.map → service-J_-Vgo7R.mjs.map} +1 -1
- package/dist/{session-user-BlMgqCHS.mjs → session-user-CbnMMwk6.mjs} +1 -1
- package/dist/{session-user-BlMgqCHS.mjs.map → session-user-CbnMMwk6.mjs.map} +1 -1
- package/dist/{settings-Cwm6o2jY.mjs → settings-AnEFYICn.mjs} +3 -3
- package/dist/{settings-Cwm6o2jY.mjs.map → settings-AnEFYICn.mjs.map} +1 -1
- package/dist/{settings--wobrkkC.mjs → settings-DcMjREe5.mjs} +6 -6
- package/dist/{settings--wobrkkC.mjs.map → settings-DcMjREe5.mjs.map} +1 -1
- package/dist/{setup-complete-DQbClIN2.mjs → setup-complete-BClXXTvr.mjs} +2 -2
- package/dist/{setup-complete-DQbClIN2.mjs.map → setup-complete-BClXXTvr.mjs.map} +1 -1
- package/dist/{setup-nonce-DZCFS2sn.mjs → setup-nonce-BheRa4RG.mjs} +1 -1
- package/dist/{setup-nonce-DZCFS2sn.mjs.map → setup-nonce-BheRa4RG.mjs.map} +1 -1
- package/dist/{single-flight-cache-BPuGPdcN.mjs → single-flight-cache-jaswDzmQ.mjs} +2 -2
- package/dist/{single-flight-cache-BPuGPdcN.mjs.map → single-flight-cache-jaswDzmQ.mjs.map} +1 -1
- package/dist/{site-url-BrxA_E9H.mjs → site-url-Bqf-ea3N.mjs} +3 -3
- package/dist/{site-url-BrxA_E9H.mjs.map → site-url-Bqf-ea3N.mjs.map} +1 -1
- package/dist/{snapshot--OCDTqdb.mjs → snapshot-C4CtXntb.mjs} +51 -35
- package/dist/snapshot-C4CtXntb.mjs.map +1 -0
- package/dist/{ssrf-5sIM5jzl.mjs → ssrf-gl4gFNhw.mjs} +148 -91
- package/dist/ssrf-gl4gFNhw.mjs.map +1 -0
- package/dist/{state-BpFVsJZB.mjs → state-1F6IOhdQ.mjs} +1 -1
- package/dist/{state-BpFVsJZB.mjs.map → state-1F6IOhdQ.mjs.map} +1 -1
- package/dist/{status-B777-dXz.mjs → status-Cenfk_r5.mjs} +1 -1
- package/dist/{status-B777-dXz.mjs.map → status-Cenfk_r5.mjs.map} +1 -1
- package/dist/storage/local.d.mts +1 -1
- package/dist/storage/local.mjs +1 -1
- package/dist/storage/s3.d.mts +1 -1
- package/dist/storage/s3.mjs +1 -1
- package/dist/{target-BmR0iTwz.mjs → target-CRzeTs8G.mjs} +1 -1
- package/dist/{target-BmR0iTwz.mjs.map → target-CRzeTs8G.mjs.map} +1 -1
- package/dist/{taxonomies-DkAkMupr.mjs → taxonomies-BOdxuZpV.mjs} +11 -4
- package/dist/taxonomies-BOdxuZpV.mjs.map +1 -0
- package/dist/{taxonomies-Wfy_Lg12.mjs → taxonomies-NcFDq5Gg.mjs} +23 -14
- package/dist/taxonomies-NcFDq5Gg.mjs.map +1 -0
- package/dist/{taxonomy-tJepplLL.mjs → taxonomy-DP1vny4K.mjs} +11 -3
- package/dist/{taxonomy-tJepplLL.mjs.map → taxonomy-DP1vny4K.mjs.map} +1 -1
- package/dist/{tokens-BCO1oruF.mjs → tokens-CDk8ox9p.mjs} +1 -1
- package/dist/{tokens-BCO1oruF.mjs.map → tokens-CDk8ox9p.mjs.map} +1 -1
- package/dist/{transport-xh6YKW2G.d.mts → transport-BVn4tVb9.d.mts} +1 -1
- package/dist/{transport-xh6YKW2G.d.mts.map → transport-BVn4tVb9.d.mts.map} +1 -1
- package/dist/{transport-Dr3qtwXC.mjs → transport-DP0JI-8i.mjs} +1 -1
- package/dist/{transport-Dr3qtwXC.mjs.map → transport-DP0JI-8i.mjs.map} +1 -1
- package/dist/{trusted-proxy-BR5F1Otp.mjs → trusted-proxy-BTM6UxqD.mjs} +1 -1
- package/dist/{trusted-proxy-BR5F1Otp.mjs.map → trusted-proxy-BTM6UxqD.mjs.map} +1 -1
- package/dist/{types-CXFkwEGC.d.mts → types-2n848aVW.d.mts} +1 -1
- package/dist/{types-CXFkwEGC.d.mts.map → types-2n848aVW.d.mts.map} +1 -1
- package/dist/{types-75KIqzL9.mjs → types-BMXnRIrX.mjs} +4 -2
- package/dist/types-BMXnRIrX.mjs.map +1 -0
- package/dist/{types-B6GrPic4.d.mts → types-BouXpOsa.d.mts} +115 -4
- package/dist/types-BouXpOsa.d.mts.map +1 -0
- package/dist/{types-3qNFPlci.mjs → types-ByG2coLw.mjs} +1 -1
- package/dist/{types-3qNFPlci.mjs.map → types-ByG2coLw.mjs.map} +1 -1
- package/dist/types-CQPWhPxE.mjs.map +1 -1
- package/dist/{types-CDtkNSFQ.d.mts → types-DEfNJ__A.d.mts} +1 -1
- package/dist/{types-CDtkNSFQ.d.mts.map → types-DEfNJ__A.d.mts.map} +1 -1
- package/dist/{types-xDMtUFnO.d.mts → types-DKcKSbtB.d.mts} +23 -7
- package/dist/types-DKcKSbtB.d.mts.map +1 -0
- package/dist/{types-C00oyCZp.d.mts → types-DRYs7uTL.d.mts} +1 -1
- package/dist/{types-C00oyCZp.d.mts.map → types-DRYs7uTL.d.mts.map} +1 -1
- package/dist/{types-DczELMop.d.mts → types-DaEg7KX2.d.mts} +1 -1
- package/dist/{types-DczELMop.d.mts.map → types-DaEg7KX2.d.mts.map} +1 -1
- package/dist/{types-BuHW4xDE.d.mts → types-LU8utpP_.d.mts} +6 -3
- package/dist/types-LU8utpP_.d.mts.map +1 -0
- package/dist/{types-CPeXo1wF.d.mts → types-VpYfPUxN.d.mts} +1 -1
- package/dist/{types-CPeXo1wF.d.mts.map → types-VpYfPUxN.d.mts.map} +1 -1
- package/dist/{types-DM3vioBY.mjs → types-c9GP7Dj5.mjs} +1 -1
- package/dist/{types-DM3vioBY.mjs.map → types-c9GP7Dj5.mjs.map} +1 -1
- package/dist/{types-FV23hEoW.d.mts → types-tJWDK__M.d.mts} +14 -1
- package/dist/types-tJWDK__M.d.mts.map +1 -0
- package/dist/{upload-attempts-BsqoQ1fn.mjs → upload-attempts-C6S2y-lp.mjs} +1 -1
- package/dist/{upload-attempts-BsqoQ1fn.mjs.map → upload-attempts-C6S2y-lp.mjs.map} +1 -1
- package/dist/{url-pattern-D4c2czpJ.mjs → url-pattern-UYtxVTuj.mjs} +1 -1
- package/dist/{url-pattern-D4c2czpJ.mjs.map → url-pattern-UYtxVTuj.mjs.map} +1 -1
- package/dist/{user-BTZ40aq6.mjs → user-DIsIXogT.mjs} +2 -2
- package/dist/{user-BTZ40aq6.mjs.map → user-DIsIXogT.mjs.map} +1 -1
- package/dist/{utils-BKvNjjhY.mjs → utils-BicP5Qbg.mjs} +2 -2
- package/dist/{utils-BKvNjjhY.mjs.map → utils-BicP5Qbg.mjs.map} +1 -1
- package/dist/{validate-DE_LRwo9.mjs → validate-D8VPn4Hv.mjs} +8 -3
- package/dist/validate-D8VPn4Hv.mjs.map +1 -0
- package/dist/{validate-DUP27OYD.d.mts → validate-Df6Dvwbw.d.mts} +12 -7
- package/dist/validate-Df6Dvwbw.d.mts.map +1 -0
- package/dist/{validation-BMImFJ11.mjs → validation-CzMJn9Ku.mjs} +13 -11
- package/dist/{validation-BMImFJ11.mjs.map → validation-CzMJn9Ku.mjs.map} +1 -1
- package/dist/version-CK67_SXX.mjs +7 -0
- package/dist/{version-Bii3suaO.mjs.map → version-CK67_SXX.mjs.map} +1 -1
- package/dist/{widgets-D3gJ10xU.mjs → widgets-RFVAxQl3.mjs} +5 -5
- package/dist/{widgets-D3gJ10xU.mjs.map → widgets-RFVAxQl3.mjs.map} +1 -1
- package/dist/{wxr-taxonomies-B2Og_6rU.d.mts → wxr-taxonomies-BX4yQL9s.d.mts} +1 -1
- package/dist/{wxr-taxonomies-B2Og_6rU.d.mts.map → wxr-taxonomies-BX4yQL9s.d.mts.map} +1 -1
- package/dist/{wxr-taxonomies-Cxngsjwo.mjs → wxr-taxonomies-Csdp7yde.mjs} +4 -4
- package/dist/{wxr-taxonomies-Cxngsjwo.mjs.map → wxr-taxonomies-Csdp7yde.mjs.map} +1 -1
- package/dist/{zod-generator-BuYSQJB7.mjs → zod-generator-CNRGdnBY.mjs} +3 -3
- package/dist/{zod-generator-BuYSQJB7.mjs.map → zod-generator-CNRGdnBY.mjs.map} +1 -1
- package/package.json +12 -10
- package/src/api/errors.ts +7 -0
- package/src/api/handlers/content.ts +66 -79
- package/src/api/handlers/entry-lock.ts +206 -0
- package/src/api/handlers/manifest.ts +1 -0
- package/src/api/handlers/marketplace.ts +28 -20
- package/src/api/handlers/menus.ts +9 -0
- package/src/api/handlers/registry.ts +13 -8
- package/src/api/handlers/revision.ts +2 -1
- package/src/api/handlers/seo.ts +10 -1
- package/src/api/handlers/snapshot.ts +84 -72
- package/src/api/handlers/taxonomies.ts +9 -0
- package/src/api/openapi/document.ts +111 -6
- package/src/api/schemas/content.ts +8 -0
- package/src/api/schemas/entry-lock.ts +48 -0
- package/src/api/schemas/index.ts +1 -0
- package/src/api/schemas/schema.ts +10 -1
- package/src/api/types.ts +2 -0
- package/src/astro/integration/index.ts +9 -6
- package/src/astro/integration/routes.ts +5 -0
- package/src/astro/integration/runtime.ts +13 -5
- package/src/astro/integration/vite-config.ts +30 -0
- package/src/astro/middleware.ts +16 -0
- package/src/astro/routes/api/content/[collection]/[id]/discard-draft.ts +10 -0
- package/src/astro/routes/api/content/[collection]/[id]/lock.ts +133 -0
- package/src/astro/routes/api/content/[collection]/[id]/publish.ts +11 -1
- package/src/astro/routes/api/content/[collection]/[id]/schedule.ts +20 -0
- package/src/astro/routes/api/content/[collection]/[id]/unpublish.ts +10 -0
- package/src/astro/routes/api/content/[collection]/[id].ts +27 -2
- package/src/astro/routes/api/content/[collection]/index.ts +3 -0
- package/src/astro/routes/sitemap-[collection].xml.ts +4 -0
- package/src/astro/types.ts +13 -3
- package/src/cli/commands/content.ts +31 -5
- package/src/cli/commands/export-seed.ts +2 -0
- package/src/client/index.ts +34 -7
- package/src/components/EmDashBodyEnd.astro +4 -1
- package/src/components/EmDashBodyStart.astro +4 -1
- package/src/components/EmDashHead.astro +35 -16
- package/src/components/Gallery.astro +18 -4
- package/src/components/InlineEditor.astro +3 -1
- package/src/components/InlinePortableTextEditor.tsx +106 -11
- package/src/components/PortableText.astro +4 -0
- package/src/components/Table.astro +147 -62
- package/src/config/errors.ts +13 -0
- package/src/content/converters/portable-text-to-prosemirror.ts +26 -2
- package/src/content/converters/prosemirror-to-portable-text.ts +35 -6
- package/src/content/converters/types.ts +10 -0
- package/src/database/dialect-helpers.ts +125 -0
- package/src/database/migrations/075_entry_edit_locks.ts +44 -0
- package/src/database/migrations/076_collection_nav_group.ts +22 -0
- package/src/database/migrations/077_plugin_storage_revisions.ts +89 -0
- package/src/database/migrations/runner.ts +6 -0
- package/src/database/repositories/content.ts +170 -1
- package/src/database/repositories/entry-locks.ts +257 -0
- package/src/database/repositories/options.ts +69 -5
- package/src/database/repositories/plugin-storage.ts +159 -0
- package/src/database/repositories/redirect.ts +17 -6
- package/src/database/repositories/taxonomy.ts +8 -0
- package/src/database/repositories/types.ts +3 -0
- package/src/database/types.ts +15 -1
- package/src/emdash-runtime.ts +117 -50
- package/src/i18n/resolve.ts +44 -4
- package/src/index.ts +14 -0
- package/src/loader.ts +35 -4
- package/src/mcp/server.ts +23 -5
- package/src/media/responsive.ts +23 -0
- package/src/media/usage/content-refresh.ts +2 -1
- package/src/menus/index.ts +17 -21
- package/src/page/seo-contributions.ts +78 -1
- package/src/page/seo-panel.ts +47 -0
- package/src/plugin-types.ts +9 -0
- package/src/plugins/conditional-storage.ts +30 -0
- package/src/plugins/context.ts +49 -17
- package/src/plugins/hooks.ts +7 -1
- package/src/plugins/index.ts +9 -0
- package/src/plugins/manager.ts +5 -2
- package/src/plugins/sandbox/types.ts +16 -2
- package/src/plugins/storage-query.ts +45 -0
- package/src/plugins/storage-update.ts +96 -0
- package/src/plugins/types.ts +114 -0
- package/src/query.ts +29 -3
- package/src/registry/config.ts +130 -27
- package/src/registry/types.ts +5 -6
- package/src/schema/collection-slugs-cache.ts +157 -0
- package/src/schema/registry.ts +19 -0
- package/src/schema/types.ts +25 -6
- package/src/security/ssrf.ts +167 -141
- package/src/seed/apply.ts +4 -0
- package/src/seed/types.ts +7 -2
- package/src/seed/validate.ts +18 -1
- package/src/seo/hreflang.ts +1 -0
- package/src/seo/index.ts +5 -10
- package/src/seo/media-url.ts +26 -0
- package/src/taxonomies/term-counts.ts +22 -5
- package/dist/api-Dz6rgoa3.mjs.map +0 -1
- package/dist/apply-B4SIOxR1.mjs.map +0 -1
- package/dist/config-it29yDLA.mjs.map +0 -1
- package/dist/content-DjvM0T92.mjs.map +0 -1
- package/dist/context-CX6gxOLW.mjs.map +0 -1
- package/dist/dialect-helpers-BSbfaO3F.mjs.map +0 -1
- package/dist/errors-DsVoDUjJ.mjs.map +0 -1
- package/dist/index-BJNMCWmu.d.mts.map +0 -1
- package/dist/loader-Z8vl7zTq.mjs.map +0 -1
- package/dist/media-url-DHoPr0hq.mjs.map +0 -1
- package/dist/menus-6qSwTNxG.mjs.map +0 -1
- package/dist/options-BHPeIbBd.mjs.map +0 -1
- package/dist/options-CYb4y7hM.d.mts.map +0 -1
- package/dist/query-BZKZcG5b.mjs.map +0 -1
- package/dist/redirect-CZkbozu9.mjs.map +0 -1
- package/dist/redirects-BLNOWQTn.mjs.map +0 -1
- package/dist/registry-AZAsRsor.mjs.map +0 -1
- package/dist/relations-DnRK4YIT.d.mts.map +0 -1
- package/dist/resolve-prZ3mP7l.mjs.map +0 -1
- package/dist/runner-BLIDKpmA.mjs.map +0 -1
- package/dist/seo-CVWkdv6x.mjs.map +0 -1
- package/dist/snapshot--OCDTqdb.mjs.map +0 -1
- package/dist/ssrf-5sIM5jzl.mjs.map +0 -1
- package/dist/taxonomies-DkAkMupr.mjs.map +0 -1
- package/dist/taxonomies-Wfy_Lg12.mjs.map +0 -1
- package/dist/types-75KIqzL9.mjs.map +0 -1
- package/dist/types-B6GrPic4.d.mts.map +0 -1
- package/dist/types-BuHW4xDE.d.mts.map +0 -1
- package/dist/types-FV23hEoW.d.mts.map +0 -1
- package/dist/types-xDMtUFnO.d.mts.map +0 -1
- package/dist/validate-DE_LRwo9.mjs.map +0 -1
- package/dist/validate-DUP27OYD.d.mts.map +0 -1
- package/dist/version-Bii3suaO.mjs +0 -7
- /package/dist/{api-tokens-BfYts-sq.mjs → api-tokens-B_lfpmH3.mjs} +0 -0
- /package/dist/{ssrf-Dg3cIT-b.mjs → ssrf-TQhaljuI.mjs} +0 -0
- /package/dist/{types-DfuTR6dL.mjs → types-A2cN6a4a.mjs} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { MIGRATION_LOCK_BUSY_MESSAGE } from "./database/pg-migration-lock.mjs";
|
|
2
2
|
import { t as validateIdentifier } from "./validate-BpwoDOgt.mjs";
|
|
3
|
-
import { a as currentTimestamp, c as isSqlite,
|
|
3
|
+
import { a as currentTimestamp, c as isSqlite, d as listTablesLike, g as tableExists, o as currentTimestampValue, r as columnExists, s as isPostgres, t as binaryType } from "./dialect-helpers-BcQvkHgn.mjs";
|
|
4
4
|
import { r as getI18nConfig } from "./config-C3EBstHi.mjs";
|
|
5
5
|
import { createRequire } from "node:module";
|
|
6
6
|
import { sql } from "kysely";
|
|
@@ -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$75,
|
|
29
|
+
up: () => up$75
|
|
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$75(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$72(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$75(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$72(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$74,
|
|
72
|
+
up: () => up$74
|
|
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$74(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$74(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$73,
|
|
90
|
+
up: () => up$73
|
|
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$73(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$73(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$70(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$72,
|
|
114
|
+
up: () => up$72
|
|
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$72(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$69(db) {
|
|
|
139
139
|
"index_name"
|
|
140
140
|
]).execute();
|
|
141
141
|
}
|
|
142
|
-
async function down$
|
|
142
|
+
async function down$72(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$69(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$71,
|
|
152
|
+
up: () => up$71
|
|
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$71(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$71(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$68(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$70,
|
|
175
|
+
up: () => up$70
|
|
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$70(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$67(db) {
|
|
|
198
198
|
collections: JSON.stringify(["posts"])
|
|
199
199
|
}]).execute();
|
|
200
200
|
}
|
|
201
|
-
async function down$
|
|
201
|
+
async function down$70(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$69,
|
|
209
|
+
up: () => up$69
|
|
210
210
|
});
|
|
211
|
-
async function up$
|
|
211
|
+
async function up$69(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$69(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$66(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$68,
|
|
225
|
+
up: () => up$68
|
|
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$68(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$65(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$68(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$65(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$67,
|
|
306
|
+
up: () => up$67
|
|
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$67(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$67(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$66,
|
|
327
|
+
up: () => up$66
|
|
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$66(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$66(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$63(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$65,
|
|
353
|
+
up: () => up$65
|
|
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$65(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$65(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$62(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$64,
|
|
374
|
+
up: () => up$64
|
|
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$64(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$61(db) {
|
|
|
395
395
|
`.execute(db);
|
|
396
396
|
}
|
|
397
397
|
}
|
|
398
|
-
async function down$
|
|
398
|
+
async function down$64(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$61(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$63,
|
|
416
|
+
up: () => up$63
|
|
417
417
|
});
|
|
418
|
-
async function up$
|
|
418
|
+
async function up$63(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$60(db) {
|
|
|
437
437
|
`.execute(db);
|
|
438
438
|
}
|
|
439
439
|
}
|
|
440
|
-
async function down$
|
|
440
|
+
async function down$63(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$60(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$62,
|
|
465
|
+
up: () => up$62
|
|
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$62(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$59(db) {
|
|
|
495
495
|
`.execute(db);
|
|
496
496
|
}
|
|
497
497
|
}
|
|
498
|
-
async function down$
|
|
498
|
+
async function down$62(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$59(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$61,
|
|
517
|
+
up: () => up$61
|
|
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$61(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$58(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$61(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$58(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$60,
|
|
554
|
+
up: () => up$60
|
|
555
555
|
});
|
|
556
556
|
/**
|
|
557
557
|
* Authorization codes for OAuth 2.1 Authorization Code + PKCE flow.
|
|
@@ -568,20 +568,20 @@ var _017_authorization_codes_exports = /* @__PURE__ */ __exportAll({
|
|
|
568
568
|
* `CREATE TABLE` then fails on every retry and the database never finishes
|
|
569
569
|
* migrating.
|
|
570
570
|
*/
|
|
571
|
-
async function up$
|
|
571
|
+
async function up$60(db) {
|
|
572
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
573
|
await db.schema.createIndex("idx_auth_codes_expires").ifNotExists().on("_emdash_authorization_codes").column("expires_at").execute();
|
|
574
574
|
if (!await columnExists(db, "_emdash_oauth_tokens", "client_id")) await db.schema.alterTable("_emdash_oauth_tokens").addColumn("client_id", "text").execute();
|
|
575
575
|
}
|
|
576
|
-
async function down$
|
|
576
|
+
async function down$60(db) {
|
|
577
577
|
await db.schema.dropTable("_emdash_authorization_codes").ifExists().execute();
|
|
578
578
|
}
|
|
579
579
|
|
|
580
580
|
//#endregion
|
|
581
581
|
//#region src/database/migrations/018_seo.ts
|
|
582
582
|
var _018_seo_exports = /* @__PURE__ */ __exportAll({
|
|
583
|
-
down: () => down$
|
|
584
|
-
up: () => up$
|
|
583
|
+
down: () => down$59,
|
|
584
|
+
up: () => up$59
|
|
585
585
|
});
|
|
586
586
|
/**
|
|
587
587
|
* Migration: SEO support
|
|
@@ -594,7 +594,7 @@ var _018_seo_exports = /* @__PURE__ */ __exportAll({
|
|
|
594
594
|
* need it. The `has_seo` flag controls whether the admin shows SEO fields
|
|
595
595
|
* and whether the collection's content appears in sitemaps.
|
|
596
596
|
*/
|
|
597
|
-
async function up$
|
|
597
|
+
async function up$59(db) {
|
|
598
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();
|
|
599
599
|
await sql`
|
|
600
600
|
CREATE INDEX idx_emdash_seo_collection
|
|
@@ -605,7 +605,7 @@ async function up$56(db) {
|
|
|
605
605
|
ADD COLUMN has_seo INTEGER NOT NULL DEFAULT 0
|
|
606
606
|
`.execute(db);
|
|
607
607
|
}
|
|
608
|
-
async function down$
|
|
608
|
+
async function down$59(db) {
|
|
609
609
|
await sql`DROP TABLE IF EXISTS _emdash_seo`.execute(db);
|
|
610
610
|
await sql`
|
|
611
611
|
ALTER TABLE _emdash_collections
|
|
@@ -616,8 +616,8 @@ async function down$56(db) {
|
|
|
616
616
|
//#endregion
|
|
617
617
|
//#region src/database/migrations/019_i18n.ts
|
|
618
618
|
var _019_i18n_exports = /* @__PURE__ */ __exportAll({
|
|
619
|
-
down: () => down$
|
|
620
|
-
up: () => up$
|
|
619
|
+
down: () => down$58,
|
|
620
|
+
up: () => up$58
|
|
621
621
|
});
|
|
622
622
|
/**
|
|
623
623
|
* Quote an identifier for use in raw SQL. Escapes embedded double-quotes
|
|
@@ -730,7 +730,7 @@ async function upPostgres$1(db) {
|
|
|
730
730
|
ADD COLUMN translatable INTEGER NOT NULL DEFAULT 1
|
|
731
731
|
`.execute(db);
|
|
732
732
|
}
|
|
733
|
-
async function up$
|
|
733
|
+
async function up$58(db) {
|
|
734
734
|
if (!isSqlite(db)) return upPostgres$1(db);
|
|
735
735
|
const orphanedTmps = await listTablesLike(db, "ec_%_i18n_tmp");
|
|
736
736
|
for (const tmpName of orphanedTmps) {
|
|
@@ -847,7 +847,7 @@ async function downPostgres(db) {
|
|
|
847
847
|
await sql`ALTER TABLE ${sql.ref(t)} DROP COLUMN translation_group`.execute(db);
|
|
848
848
|
}
|
|
849
849
|
}
|
|
850
|
-
async function down$
|
|
850
|
+
async function down$58(db) {
|
|
851
851
|
if (!isSqlite(db)) return downPostgres(db);
|
|
852
852
|
await sql`
|
|
853
853
|
ALTER TABLE _emdash_fields
|
|
@@ -954,8 +954,8 @@ async function down$55(db) {
|
|
|
954
954
|
//#endregion
|
|
955
955
|
//#region src/database/migrations/020_collection_url_pattern.ts
|
|
956
956
|
var _020_collection_url_pattern_exports = /* @__PURE__ */ __exportAll({
|
|
957
|
-
down: () => down$
|
|
958
|
-
up: () => up$
|
|
957
|
+
down: () => down$57,
|
|
958
|
+
up: () => up$57
|
|
959
959
|
});
|
|
960
960
|
/**
|
|
961
961
|
* Migration: URL pattern for collections
|
|
@@ -964,13 +964,13 @@ var _020_collection_url_pattern_exports = /* @__PURE__ */ __exportAll({
|
|
|
964
964
|
* can declare its own URL structure (e.g. "/{slug}" for pages, "/blog/{slug}"
|
|
965
965
|
* for posts). Used for menu URL resolution, sitemaps, and path-based lookups.
|
|
966
966
|
*/
|
|
967
|
-
async function up$
|
|
967
|
+
async function up$57(db) {
|
|
968
968
|
await sql`
|
|
969
969
|
ALTER TABLE _emdash_collections
|
|
970
970
|
ADD COLUMN url_pattern TEXT
|
|
971
971
|
`.execute(db);
|
|
972
972
|
}
|
|
973
|
-
async function down$
|
|
973
|
+
async function down$57(db) {
|
|
974
974
|
await sql`
|
|
975
975
|
ALTER TABLE _emdash_collections
|
|
976
976
|
DROP COLUMN url_pattern
|
|
@@ -980,8 +980,8 @@ async function down$54(db) {
|
|
|
980
980
|
//#endregion
|
|
981
981
|
//#region src/database/migrations/021_remove_section_categories.ts
|
|
982
982
|
var _021_remove_section_categories_exports = /* @__PURE__ */ __exportAll({
|
|
983
|
-
down: () => down$
|
|
984
|
-
up: () => up$
|
|
983
|
+
down: () => down$56,
|
|
984
|
+
up: () => up$56
|
|
985
985
|
});
|
|
986
986
|
/**
|
|
987
987
|
* Migration: Remove section categories
|
|
@@ -990,12 +990,12 @@ var _021_remove_section_categories_exports = /* @__PURE__ */ __exportAll({
|
|
|
990
990
|
* Rather than building the missing UI for a feature with very little need at this stage,
|
|
991
991
|
* we're removing the feature entirely.
|
|
992
992
|
*/
|
|
993
|
-
async function up$
|
|
993
|
+
async function up$56(db) {
|
|
994
994
|
await db.schema.dropIndex("idx_sections_category").ifExists().execute();
|
|
995
995
|
await db.schema.alterTable("_emdash_sections").dropColumn("category_id").execute();
|
|
996
996
|
await db.schema.dropTable("_emdash_section_categories").execute();
|
|
997
997
|
}
|
|
998
|
-
async function down$
|
|
998
|
+
async function down$56(db) {
|
|
999
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();
|
|
1000
1000
|
await db.schema.alterTable("_emdash_sections").addColumn("category_id", "text", (col) => col.references("_emdash_section_categories.id").onDelete("set null")).execute();
|
|
1001
1001
|
await db.schema.createIndex("idx_sections_category").on("_emdash_sections").columns(["category_id"]).execute();
|
|
@@ -1004,8 +1004,8 @@ async function down$53(db) {
|
|
|
1004
1004
|
//#endregion
|
|
1005
1005
|
//#region src/database/migrations/022_marketplace_plugin_state.ts
|
|
1006
1006
|
var _022_marketplace_plugin_state_exports = /* @__PURE__ */ __exportAll({
|
|
1007
|
-
down: () => down$
|
|
1008
|
-
up: () => up$
|
|
1007
|
+
down: () => down$55,
|
|
1008
|
+
up: () => up$55
|
|
1009
1009
|
});
|
|
1010
1010
|
/**
|
|
1011
1011
|
* Migration: Add marketplace fields to _plugin_state
|
|
@@ -1014,7 +1014,7 @@ var _022_marketplace_plugin_state_exports = /* @__PURE__ */ __exportAll({
|
|
|
1014
1014
|
* whether a plugin was installed from config or marketplace,
|
|
1015
1015
|
* and which marketplace version is installed.
|
|
1016
1016
|
*/
|
|
1017
|
-
async function up$
|
|
1017
|
+
async function up$55(db) {
|
|
1018
1018
|
await sql`
|
|
1019
1019
|
ALTER TABLE _plugin_state
|
|
1020
1020
|
ADD COLUMN source TEXT NOT NULL DEFAULT 'config'
|
|
@@ -1029,7 +1029,7 @@ async function up$52(db) {
|
|
|
1029
1029
|
WHERE source = 'marketplace'
|
|
1030
1030
|
`.execute(db);
|
|
1031
1031
|
}
|
|
1032
|
-
async function down$
|
|
1032
|
+
async function down$55(db) {
|
|
1033
1033
|
await sql`
|
|
1034
1034
|
DROP INDEX IF EXISTS idx_plugin_state_source
|
|
1035
1035
|
`.execute(db);
|
|
@@ -1046,8 +1046,8 @@ async function down$52(db) {
|
|
|
1046
1046
|
//#endregion
|
|
1047
1047
|
//#region src/database/migrations/023_plugin_metadata.ts
|
|
1048
1048
|
var _023_plugin_metadata_exports = /* @__PURE__ */ __exportAll({
|
|
1049
|
-
down: () => down$
|
|
1050
|
-
up: () => up$
|
|
1049
|
+
down: () => down$54,
|
|
1050
|
+
up: () => up$54
|
|
1051
1051
|
});
|
|
1052
1052
|
/**
|
|
1053
1053
|
* Migration: Add display metadata to _plugin_state
|
|
@@ -1056,7 +1056,7 @@ var _023_plugin_metadata_exports = /* @__PURE__ */ __exportAll({
|
|
|
1056
1056
|
* so the admin UI can show meaningful info without re-fetching
|
|
1057
1057
|
* from the marketplace on every page load.
|
|
1058
1058
|
*/
|
|
1059
|
-
async function up$
|
|
1059
|
+
async function up$54(db) {
|
|
1060
1060
|
await sql`
|
|
1061
1061
|
ALTER TABLE _plugin_state
|
|
1062
1062
|
ADD COLUMN display_name TEXT
|
|
@@ -1066,7 +1066,7 @@ async function up$51(db) {
|
|
|
1066
1066
|
ADD COLUMN description TEXT
|
|
1067
1067
|
`.execute(db);
|
|
1068
1068
|
}
|
|
1069
|
-
async function down$
|
|
1069
|
+
async function down$54(db) {
|
|
1070
1070
|
await sql`
|
|
1071
1071
|
ALTER TABLE _plugin_state
|
|
1072
1072
|
DROP COLUMN description
|
|
@@ -1080,8 +1080,8 @@ async function down$51(db) {
|
|
|
1080
1080
|
//#endregion
|
|
1081
1081
|
//#region src/database/migrations/024_media_placeholders.ts
|
|
1082
1082
|
var _024_media_placeholders_exports = /* @__PURE__ */ __exportAll({
|
|
1083
|
-
down: () => down$
|
|
1084
|
-
up: () => up$
|
|
1083
|
+
down: () => down$53,
|
|
1084
|
+
up: () => up$53
|
|
1085
1085
|
});
|
|
1086
1086
|
/**
|
|
1087
1087
|
* Migration: Add placeholder columns to media table
|
|
@@ -1089,7 +1089,7 @@ var _024_media_placeholders_exports = /* @__PURE__ */ __exportAll({
|
|
|
1089
1089
|
* Stores blurhash and dominant_color for LQIP (Low Quality Image Placeholder)
|
|
1090
1090
|
* support. Generated at upload time from image pixel data.
|
|
1091
1091
|
*/
|
|
1092
|
-
async function up$
|
|
1092
|
+
async function up$53(db) {
|
|
1093
1093
|
await sql`
|
|
1094
1094
|
ALTER TABLE media
|
|
1095
1095
|
ADD COLUMN blurhash TEXT
|
|
@@ -1099,7 +1099,7 @@ async function up$50(db) {
|
|
|
1099
1099
|
ADD COLUMN dominant_color TEXT
|
|
1100
1100
|
`.execute(db);
|
|
1101
1101
|
}
|
|
1102
|
-
async function down$
|
|
1102
|
+
async function down$53(db) {
|
|
1103
1103
|
await sql`
|
|
1104
1104
|
ALTER TABLE media
|
|
1105
1105
|
DROP COLUMN dominant_color
|
|
@@ -1113,8 +1113,8 @@ async function down$50(db) {
|
|
|
1113
1113
|
//#endregion
|
|
1114
1114
|
//#region src/database/migrations/025_oauth_clients.ts
|
|
1115
1115
|
var _025_oauth_clients_exports = /* @__PURE__ */ __exportAll({
|
|
1116
|
-
down: () => down$
|
|
1117
|
-
up: () => up$
|
|
1116
|
+
down: () => down$52,
|
|
1117
|
+
up: () => up$52
|
|
1118
1118
|
});
|
|
1119
1119
|
/**
|
|
1120
1120
|
* Migration: Create OAuth clients table
|
|
@@ -1125,18 +1125,18 @@ var _025_oauth_clients_exports = /* @__PURE__ */ __exportAll({
|
|
|
1125
1125
|
* Each client has a set of pre-registered redirect URIs (JSON array).
|
|
1126
1126
|
* The authorize endpoint rejects any redirect_uri not in the client's list.
|
|
1127
1127
|
*/
|
|
1128
|
-
async function up$
|
|
1128
|
+
async function up$52(db) {
|
|
1129
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();
|
|
1130
1130
|
}
|
|
1131
|
-
async function down$
|
|
1131
|
+
async function down$52(db) {
|
|
1132
1132
|
await db.schema.dropTable("_emdash_oauth_clients").execute();
|
|
1133
1133
|
}
|
|
1134
1134
|
|
|
1135
1135
|
//#endregion
|
|
1136
1136
|
//#region src/database/migrations/026_cron_tasks.ts
|
|
1137
1137
|
var _026_cron_tasks_exports = /* @__PURE__ */ __exportAll({
|
|
1138
|
-
down: () => down$
|
|
1139
|
-
up: () => up$
|
|
1138
|
+
down: () => down$51,
|
|
1139
|
+
up: () => up$51
|
|
1140
1140
|
});
|
|
1141
1141
|
/**
|
|
1142
1142
|
* Migration: Create cron tasks table for plugin scheduled tasks.
|
|
@@ -1147,7 +1147,7 @@ var _026_cron_tasks_exports = /* @__PURE__ */ __exportAll({
|
|
|
1147
1147
|
* The `next_run_at` + `status` + `enabled` index drives the "find overdue
|
|
1148
1148
|
* tasks" query used by CronExecutor.tick().
|
|
1149
1149
|
*/
|
|
1150
|
-
async function up$
|
|
1150
|
+
async function up$51(db) {
|
|
1151
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();
|
|
1152
1152
|
await db.schema.createIndex("idx_cron_tasks_due").on("_emdash_cron_tasks").columns([
|
|
1153
1153
|
"enabled",
|
|
@@ -1156,17 +1156,17 @@ async function up$48(db) {
|
|
|
1156
1156
|
]).execute();
|
|
1157
1157
|
await db.schema.createIndex("idx_cron_tasks_plugin").on("_emdash_cron_tasks").column("plugin_id").execute();
|
|
1158
1158
|
}
|
|
1159
|
-
async function down$
|
|
1159
|
+
async function down$51(db) {
|
|
1160
1160
|
await db.schema.dropTable("_emdash_cron_tasks").execute();
|
|
1161
1161
|
}
|
|
1162
1162
|
|
|
1163
1163
|
//#endregion
|
|
1164
1164
|
//#region src/database/migrations/027_comments.ts
|
|
1165
1165
|
var _027_comments_exports = /* @__PURE__ */ __exportAll({
|
|
1166
|
-
down: () => down$
|
|
1167
|
-
up: () => up$
|
|
1166
|
+
down: () => down$50,
|
|
1167
|
+
up: () => up$50
|
|
1168
1168
|
});
|
|
1169
|
-
async function up$
|
|
1169
|
+
async function up$50(db) {
|
|
1170
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();
|
|
1171
1171
|
await db.schema.createIndex("idx_comments_content").on("_emdash_comments").columns([
|
|
1172
1172
|
"collection",
|
|
@@ -1182,30 +1182,30 @@ async function up$47(db) {
|
|
|
1182
1182
|
await db.schema.alterTable("_emdash_collections").addColumn("comments_closed_after_days", "integer", (col) => col.defaultTo(90)).execute();
|
|
1183
1183
|
await db.schema.alterTable("_emdash_collections").addColumn("comments_auto_approve_users", "integer", (col) => col.defaultTo(1)).execute();
|
|
1184
1184
|
}
|
|
1185
|
-
async function down$
|
|
1185
|
+
async function down$50(db) {
|
|
1186
1186
|
await db.schema.dropTable("_emdash_comments").execute();
|
|
1187
1187
|
}
|
|
1188
1188
|
|
|
1189
1189
|
//#endregion
|
|
1190
1190
|
//#region src/database/migrations/028_drop_author_url.ts
|
|
1191
1191
|
var _028_drop_author_url_exports = /* @__PURE__ */ __exportAll({
|
|
1192
|
-
down: () => down$
|
|
1193
|
-
up: () => up$
|
|
1192
|
+
down: () => down$49,
|
|
1193
|
+
up: () => up$49
|
|
1194
1194
|
});
|
|
1195
|
-
async function up$
|
|
1195
|
+
async function up$49(db) {
|
|
1196
1196
|
await sql`ALTER TABLE _emdash_comments DROP COLUMN author_url`.execute(db);
|
|
1197
1197
|
}
|
|
1198
|
-
async function down$
|
|
1198
|
+
async function down$49(db) {
|
|
1199
1199
|
await db.schema.alterTable("_emdash_comments").addColumn("author_url", "text").execute();
|
|
1200
1200
|
}
|
|
1201
1201
|
|
|
1202
1202
|
//#endregion
|
|
1203
1203
|
//#region src/database/migrations/029_redirects.ts
|
|
1204
1204
|
var _029_redirects_exports = /* @__PURE__ */ __exportAll({
|
|
1205
|
-
down: () => down$
|
|
1206
|
-
up: () => up$
|
|
1205
|
+
down: () => down$48,
|
|
1206
|
+
up: () => up$48
|
|
1207
1207
|
});
|
|
1208
|
-
async function up$
|
|
1208
|
+
async function up$48(db) {
|
|
1209
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();
|
|
1210
1210
|
await db.schema.createIndex("idx_redirects_source").on("_emdash_redirects").column("source").execute();
|
|
1211
1211
|
await db.schema.createIndex("idx_redirects_enabled").on("_emdash_redirects").column("enabled").execute();
|
|
@@ -1214,7 +1214,7 @@ async function up$45(db) {
|
|
|
1214
1214
|
await db.schema.createIndex("idx_404_log_path").on("_emdash_404_log").column("path").execute();
|
|
1215
1215
|
await db.schema.createIndex("idx_404_log_created").on("_emdash_404_log").column("created_at").execute();
|
|
1216
1216
|
}
|
|
1217
|
-
async function down$
|
|
1217
|
+
async function down$48(db) {
|
|
1218
1218
|
await db.schema.dropTable("_emdash_404_log").execute();
|
|
1219
1219
|
await db.schema.dropTable("_emdash_redirects").execute();
|
|
1220
1220
|
}
|
|
@@ -1222,8 +1222,8 @@ async function down$45(db) {
|
|
|
1222
1222
|
//#endregion
|
|
1223
1223
|
//#region src/database/migrations/030_widen_scheduled_index.ts
|
|
1224
1224
|
var _030_widen_scheduled_index_exports = /* @__PURE__ */ __exportAll({
|
|
1225
|
-
down: () => down$
|
|
1226
|
-
up: () => up$
|
|
1225
|
+
down: () => down$47,
|
|
1226
|
+
up: () => up$47
|
|
1227
1227
|
});
|
|
1228
1228
|
/**
|
|
1229
1229
|
* Migration: Widen scheduled publishing index
|
|
@@ -1232,7 +1232,7 @@ var _030_widen_scheduled_index_exports = /* @__PURE__ */ __exportAll({
|
|
|
1232
1232
|
* Published posts can now have scheduled draft changes, so widen the
|
|
1233
1233
|
* index to cover all rows where scheduled_at IS NOT NULL.
|
|
1234
1234
|
*/
|
|
1235
|
-
async function up$
|
|
1235
|
+
async function up$47(db) {
|
|
1236
1236
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
1237
1237
|
for (const tableName of tableNames) {
|
|
1238
1238
|
const table = { name: tableName };
|
|
@@ -1246,7 +1246,7 @@ async function up$44(db) {
|
|
|
1246
1246
|
`.execute(db);
|
|
1247
1247
|
}
|
|
1248
1248
|
}
|
|
1249
|
-
async function down$
|
|
1249
|
+
async function down$47(db) {
|
|
1250
1250
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
1251
1251
|
for (const tableName of tableNames) {
|
|
1252
1252
|
const table = { name: tableName };
|
|
@@ -1264,10 +1264,10 @@ async function down$44(db) {
|
|
|
1264
1264
|
//#endregion
|
|
1265
1265
|
//#region src/database/migrations/031_bylines.ts
|
|
1266
1266
|
var _031_bylines_exports = /* @__PURE__ */ __exportAll({
|
|
1267
|
-
down: () => down$
|
|
1268
|
-
up: () => up$
|
|
1267
|
+
down: () => down$46,
|
|
1268
|
+
up: () => up$46
|
|
1269
1269
|
});
|
|
1270
|
-
async function up$
|
|
1270
|
+
async function up$46(db) {
|
|
1271
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();
|
|
1272
1272
|
await sql`
|
|
1273
1273
|
CREATE UNIQUE INDEX ${sql.ref("idx_bylines_user_id_unique")}
|
|
@@ -1299,7 +1299,7 @@ async function up$43(db) {
|
|
|
1299
1299
|
`.execute(db);
|
|
1300
1300
|
}
|
|
1301
1301
|
}
|
|
1302
|
-
async function down$
|
|
1302
|
+
async function down$46(db) {
|
|
1303
1303
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
1304
1304
|
for (const tableName of tableNames) {
|
|
1305
1305
|
await sql`
|
|
@@ -1317,8 +1317,8 @@ async function down$43(db) {
|
|
|
1317
1317
|
//#endregion
|
|
1318
1318
|
//#region src/database/migrations/032_rate_limits.ts
|
|
1319
1319
|
var _032_rate_limits_exports = /* @__PURE__ */ __exportAll({
|
|
1320
|
-
down: () => down$
|
|
1321
|
-
up: () => up$
|
|
1320
|
+
down: () => down$45,
|
|
1321
|
+
up: () => up$45
|
|
1322
1322
|
});
|
|
1323
1323
|
/**
|
|
1324
1324
|
* Migration: Rate limits table + device code polling tracking.
|
|
@@ -1329,12 +1329,12 @@ var _032_rate_limits_exports = /* @__PURE__ */ __exportAll({
|
|
|
1329
1329
|
* 2. Add last_polled_at column to _emdash_device_codes for
|
|
1330
1330
|
* RFC 8628 slow_down enforcement.
|
|
1331
1331
|
*/
|
|
1332
|
-
async function up$
|
|
1332
|
+
async function up$45(db) {
|
|
1333
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();
|
|
1334
1334
|
await db.schema.createIndex("idx_rate_limits_window").on("_emdash_rate_limits").column("window").execute();
|
|
1335
1335
|
await db.schema.alterTable("_emdash_device_codes").addColumn("last_polled_at", "text").execute();
|
|
1336
1336
|
}
|
|
1337
|
-
async function down$
|
|
1337
|
+
async function down$45(db) {
|
|
1338
1338
|
await db.schema.dropTable("_emdash_rate_limits").execute();
|
|
1339
1339
|
await db.schema.alterTable("_emdash_device_codes").dropColumn("last_polled_at").execute();
|
|
1340
1340
|
}
|
|
@@ -1342,8 +1342,8 @@ async function down$42(db) {
|
|
|
1342
1342
|
//#endregion
|
|
1343
1343
|
//#region src/database/migrations/033_optimize_content_indexes.ts
|
|
1344
1344
|
var _033_optimize_content_indexes_exports = /* @__PURE__ */ __exportAll({
|
|
1345
|
-
down: () => down$
|
|
1346
|
-
up: () => up$
|
|
1345
|
+
down: () => down$44,
|
|
1346
|
+
up: () => up$44
|
|
1347
1347
|
});
|
|
1348
1348
|
/**
|
|
1349
1349
|
* Migration: Optimize content table indexes for D1 performance
|
|
@@ -1356,7 +1356,7 @@ var _033_optimize_content_indexes_exports = /* @__PURE__ */ __exportAll({
|
|
|
1356
1356
|
*
|
|
1357
1357
|
* Impact: Reduces D1 row reads by 90%+ for admin panel operations.
|
|
1358
1358
|
*/
|
|
1359
|
-
async function up$
|
|
1359
|
+
async function up$44(db) {
|
|
1360
1360
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
1361
1361
|
for (const tableName of tableNames) {
|
|
1362
1362
|
const table = { name: tableName };
|
|
@@ -1398,7 +1398,7 @@ async function up$41(db) {
|
|
|
1398
1398
|
WHERE status = 'trash'
|
|
1399
1399
|
`.execute(db);
|
|
1400
1400
|
}
|
|
1401
|
-
async function down$
|
|
1401
|
+
async function down$44(db) {
|
|
1402
1402
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
1403
1403
|
for (const tableName of tableNames) {
|
|
1404
1404
|
const table = { name: tableName };
|
|
@@ -1431,10 +1431,10 @@ async function down$41(db) {
|
|
|
1431
1431
|
//#endregion
|
|
1432
1432
|
//#region src/database/migrations/034_published_at_index.ts
|
|
1433
1433
|
var _034_published_at_index_exports = /* @__PURE__ */ __exportAll({
|
|
1434
|
-
down: () => down$
|
|
1435
|
-
up: () => up$
|
|
1434
|
+
down: () => down$43,
|
|
1435
|
+
up: () => up$43
|
|
1436
1436
|
});
|
|
1437
|
-
async function up$
|
|
1437
|
+
async function up$43(db) {
|
|
1438
1438
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
1439
1439
|
for (const tableName of tableNames) {
|
|
1440
1440
|
const table = { name: tableName };
|
|
@@ -1444,7 +1444,7 @@ async function up$40(db) {
|
|
|
1444
1444
|
`.execute(db);
|
|
1445
1445
|
}
|
|
1446
1446
|
}
|
|
1447
|
-
async function down$
|
|
1447
|
+
async function down$43(db) {
|
|
1448
1448
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
1449
1449
|
for (const tableName of tableNames) {
|
|
1450
1450
|
const table = { name: tableName };
|
|
@@ -1455,8 +1455,8 @@ async function down$40(db) {
|
|
|
1455
1455
|
//#endregion
|
|
1456
1456
|
//#region src/database/migrations/035_bounded_404_log.ts
|
|
1457
1457
|
var _035_bounded_404_log_exports = /* @__PURE__ */ __exportAll({
|
|
1458
|
-
down: () => down$
|
|
1459
|
-
up: () => up$
|
|
1458
|
+
down: () => down$42,
|
|
1459
|
+
up: () => up$42
|
|
1460
1460
|
});
|
|
1461
1461
|
/**
|
|
1462
1462
|
* Migration: Bounded 404 logging
|
|
@@ -1474,7 +1474,7 @@ var _035_bounded_404_log_exports = /* @__PURE__ */ __exportAll({
|
|
|
1474
1474
|
* path and summing hits
|
|
1475
1475
|
* - Adds a UNIQUE index on `path` so upsert semantics work
|
|
1476
1476
|
*/
|
|
1477
|
-
async function up$
|
|
1477
|
+
async function up$42(db) {
|
|
1478
1478
|
const hitsExists = await columnExists(db, "_emdash_404_log", "hits");
|
|
1479
1479
|
if (!hitsExists) await db.schema.alterTable("_emdash_404_log").addColumn("hits", "integer", (col) => col.notNull().defaultTo(1)).execute();
|
|
1480
1480
|
if (!await columnExists(db, "_emdash_404_log", "last_seen_at")) await db.schema.alterTable("_emdash_404_log").addColumn("last_seen_at", "text").execute();
|
|
@@ -1523,7 +1523,7 @@ async function up$39(db) {
|
|
|
1523
1523
|
await db.schema.dropIndex("idx_404_log_path").ifExists().execute();
|
|
1524
1524
|
await db.schema.createIndex("idx_404_log_last_seen").ifNotExists().on("_emdash_404_log").column("last_seen_at").execute();
|
|
1525
1525
|
}
|
|
1526
|
-
async function down$
|
|
1526
|
+
async function down$42(db) {
|
|
1527
1527
|
await db.schema.dropIndex("idx_404_log_last_seen").ifExists().execute();
|
|
1528
1528
|
await db.schema.dropIndex("idx_404_log_path_unique").ifExists().execute();
|
|
1529
1529
|
await db.schema.createIndex("idx_404_log_path").ifNotExists().on("_emdash_404_log").column("path").execute();
|
|
@@ -1534,8 +1534,8 @@ async function down$39(db) {
|
|
|
1534
1534
|
//#endregion
|
|
1535
1535
|
//#region src/database/migrations/036_i18n_menus_and_taxonomies.ts
|
|
1536
1536
|
var _036_i18n_menus_and_taxonomies_exports = /* @__PURE__ */ __exportAll({
|
|
1537
|
-
down: () => down$
|
|
1538
|
-
up: () => up$
|
|
1537
|
+
down: () => down$41,
|
|
1538
|
+
up: () => up$41
|
|
1539
1539
|
});
|
|
1540
1540
|
/**
|
|
1541
1541
|
* i18n for menus + taxonomies. Adds `locale` + `translation_group` to system
|
|
@@ -1546,7 +1546,7 @@ var _036_i18n_menus_and_taxonomies_exports = /* @__PURE__ */ __exportAll({
|
|
|
1546
1546
|
function getDefaultLocale$1() {
|
|
1547
1547
|
return getI18nConfig()?.defaultLocale ?? "en";
|
|
1548
1548
|
}
|
|
1549
|
-
async function up$
|
|
1549
|
+
async function up$41(db) {
|
|
1550
1550
|
const defaultLocale = getDefaultLocale$1();
|
|
1551
1551
|
if (isSqlite(db)) {
|
|
1552
1552
|
await rebuildContentTaxonomies(db);
|
|
@@ -1761,7 +1761,7 @@ async function assertSingleLocale$1(db, defaultLocale) {
|
|
|
1761
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.`);
|
|
1762
1762
|
}
|
|
1763
1763
|
}
|
|
1764
|
-
async function down$
|
|
1764
|
+
async function down$41(db) {
|
|
1765
1765
|
const defaultLocale = getDefaultLocale$1();
|
|
1766
1766
|
await assertSingleLocale$1(db, defaultLocale);
|
|
1767
1767
|
await assertContentTaxonomiesResolve(db, defaultLocale);
|
|
@@ -1859,21 +1859,21 @@ async function rebuildTaxonomyDefsDown(db) {
|
|
|
1859
1859
|
//#endregion
|
|
1860
1860
|
//#region src/database/migrations/037_credential_algorithm.ts
|
|
1861
1861
|
var _037_credential_algorithm_exports = /* @__PURE__ */ __exportAll({
|
|
1862
|
-
down: () => down$
|
|
1863
|
-
up: () => up$
|
|
1862
|
+
down: () => down$40,
|
|
1863
|
+
up: () => up$40
|
|
1864
1864
|
});
|
|
1865
|
-
async function up$
|
|
1865
|
+
async function up$40(db) {
|
|
1866
1866
|
if (!await columnExists(db, "credentials", "algorithm")) await db.schema.alterTable("credentials").addColumn("algorithm", "integer", (col) => col.notNull().defaultTo(-7)).execute();
|
|
1867
1867
|
}
|
|
1868
|
-
async function down$
|
|
1868
|
+
async function down$40(db) {
|
|
1869
1869
|
if (await columnExists(db, "credentials", "algorithm")) await db.schema.alterTable("credentials").dropColumn("algorithm").execute();
|
|
1870
1870
|
}
|
|
1871
1871
|
|
|
1872
1872
|
//#endregion
|
|
1873
1873
|
//#region src/database/migrations/038_registry_plugin_state.ts
|
|
1874
1874
|
var _038_registry_plugin_state_exports = /* @__PURE__ */ __exportAll({
|
|
1875
|
-
down: () => down$
|
|
1876
|
-
up: () => up$
|
|
1875
|
+
down: () => down$39,
|
|
1876
|
+
up: () => up$39
|
|
1877
1877
|
});
|
|
1878
1878
|
/**
|
|
1879
1879
|
* Migration: Add registry fields to _plugin_state
|
|
@@ -1901,7 +1901,7 @@ var _038_registry_plugin_state_exports = /* @__PURE__ */ __exportAll({
|
|
|
1901
1901
|
* checks before adding to keep the migration safe under partial
|
|
1902
1902
|
* re-application. The same pattern is used in 019_i18n.ts.
|
|
1903
1903
|
*/
|
|
1904
|
-
async function up$
|
|
1904
|
+
async function up$39(db) {
|
|
1905
1905
|
if (isSqlite(db)) await upSqlite(db);
|
|
1906
1906
|
else await upPostgres(db);
|
|
1907
1907
|
}
|
|
@@ -1944,7 +1944,7 @@ async function upPostgres(db) {
|
|
|
1944
1944
|
WHERE source = 'registry'
|
|
1945
1945
|
`.execute(db);
|
|
1946
1946
|
}
|
|
1947
|
-
async function down$
|
|
1947
|
+
async function down$39(db) {
|
|
1948
1948
|
await sql`
|
|
1949
1949
|
DROP INDEX IF EXISTS idx_plugin_state_registry
|
|
1950
1950
|
`.execute(db);
|
|
@@ -1961,10 +1961,10 @@ async function down$36(db) {
|
|
|
1961
1961
|
//#endregion
|
|
1962
1962
|
//#region src/database/migrations/039_fix_fts5_triggers.ts
|
|
1963
1963
|
var _039_fix_fts5_triggers_exports = /* @__PURE__ */ __exportAll({
|
|
1964
|
-
down: () => down$
|
|
1965
|
-
up: () => up$
|
|
1964
|
+
down: () => down$38,
|
|
1965
|
+
up: () => up$38
|
|
1966
1966
|
});
|
|
1967
|
-
async function up$
|
|
1967
|
+
async function up$38(db) {
|
|
1968
1968
|
if (!isSqlite(db)) return;
|
|
1969
1969
|
const collections = await sql`
|
|
1970
1970
|
SELECT slug, search_config FROM _emdash_collections
|
|
@@ -1998,7 +1998,7 @@ async function up$35(db) {
|
|
|
1998
1998
|
* at runtime, not by this migration, so leaving them in their
|
|
1999
1999
|
* corruption-safe state on rollback is correct.
|
|
2000
2000
|
*/
|
|
2001
|
-
async function down$
|
|
2001
|
+
async function down$38(_db) {}
|
|
2002
2002
|
function isSearchEnabled$1(searchConfig) {
|
|
2003
2003
|
if (!searchConfig) return false;
|
|
2004
2004
|
try {
|
|
@@ -2090,8 +2090,8 @@ async function dropFtsObjects(db, collectionSlug) {
|
|
|
2090
2090
|
//#endregion
|
|
2091
2091
|
//#region src/database/migrations/040_byline_i18n.ts
|
|
2092
2092
|
var _040_byline_i18n_exports = /* @__PURE__ */ __exportAll({
|
|
2093
|
-
down: () => down$
|
|
2094
|
-
up: () => up$
|
|
2093
|
+
down: () => down$37,
|
|
2094
|
+
up: () => up$37
|
|
2095
2095
|
});
|
|
2096
2096
|
/**
|
|
2097
2097
|
* i18n for bylines. Adds `locale` + `translation_group` to `_emdash_bylines`
|
|
@@ -2119,7 +2119,7 @@ var _040_byline_i18n_exports = /* @__PURE__ */ __exportAll({
|
|
|
2119
2119
|
function getDefaultLocale() {
|
|
2120
2120
|
return getI18nConfig()?.defaultLocale ?? "en";
|
|
2121
2121
|
}
|
|
2122
|
-
async function up$
|
|
2122
|
+
async function up$37(db) {
|
|
2123
2123
|
const defaultLocale = getDefaultLocale();
|
|
2124
2124
|
if (isSqlite(db)) {
|
|
2125
2125
|
await rebuildContentBylines(db);
|
|
@@ -2276,7 +2276,7 @@ async function assertSingleLocale(db, defaultLocale) {
|
|
|
2276
2276
|
const count = Number(result.rows[0]?.count ?? 0);
|
|
2277
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.`);
|
|
2278
2278
|
}
|
|
2279
|
-
async function down$
|
|
2279
|
+
async function down$37(db) {
|
|
2280
2280
|
const defaultLocale = getDefaultLocale();
|
|
2281
2281
|
await assertSingleLocale(db, defaultLocale);
|
|
2282
2282
|
await assertContentBylinesResolve(db, defaultLocale);
|
|
@@ -2395,8 +2395,8 @@ async function restoreContentBylinesFk(db) {
|
|
|
2395
2395
|
//#endregion
|
|
2396
2396
|
//#region src/database/migrations/041_content_locale_list_index.ts
|
|
2397
2397
|
var _041_content_locale_list_index_exports = /* @__PURE__ */ __exportAll({
|
|
2398
|
-
down: () => down$
|
|
2399
|
-
up: () => up$
|
|
2398
|
+
down: () => down$36,
|
|
2399
|
+
up: () => up$36
|
|
2400
2400
|
});
|
|
2401
2401
|
/**
|
|
2402
2402
|
* Migration: locale-aware composite indexes for content list queries.
|
|
@@ -2416,7 +2416,7 @@ var _041_content_locale_list_index_exports = /* @__PURE__ */ __exportAll({
|
|
|
2416
2416
|
* slugs as short as 40 chars, making both names truncate to the same string.
|
|
2417
2417
|
* Keep these identical to the names in `schema/registry.ts`.
|
|
2418
2418
|
*/
|
|
2419
|
-
async function up$
|
|
2419
|
+
async function up$36(db) {
|
|
2420
2420
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
2421
2421
|
for (const tableName of tableNames) {
|
|
2422
2422
|
await sql`
|
|
@@ -2429,7 +2429,7 @@ async function up$33(db) {
|
|
|
2429
2429
|
`.execute(db);
|
|
2430
2430
|
}
|
|
2431
2431
|
}
|
|
2432
|
-
async function down$
|
|
2432
|
+
async function down$36(db) {
|
|
2433
2433
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
2434
2434
|
for (const tableName of tableNames) {
|
|
2435
2435
|
await sql`DROP INDEX IF EXISTS ${sql.ref(`idx_${tableName}_loc_upd`)}`.execute(db);
|
|
@@ -2440,8 +2440,8 @@ async function down$33(db) {
|
|
|
2440
2440
|
//#endregion
|
|
2441
2441
|
//#region src/database/migrations/042_byline_fields.ts
|
|
2442
2442
|
var _042_byline_fields_exports = /* @__PURE__ */ __exportAll({
|
|
2443
|
-
down: () => down$
|
|
2444
|
-
up: () => up$
|
|
2443
|
+
down: () => down$35,
|
|
2444
|
+
up: () => up$35
|
|
2445
2445
|
});
|
|
2446
2446
|
/**
|
|
2447
2447
|
* Byline custom fields (Discussion #1174). Adds three tables and a
|
|
@@ -2486,7 +2486,7 @@ var _042_byline_fields_exports = /* @__PURE__ */ __exportAll({
|
|
|
2486
2486
|
* reference it. If `down()` runs after a partial `up()`, missing tables
|
|
2487
2487
|
* are tolerated (`DROP TABLE IF EXISTS`).
|
|
2488
2488
|
*/
|
|
2489
|
-
async function up$
|
|
2489
|
+
async function up$35(db) {
|
|
2490
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();
|
|
2491
2491
|
await db.schema.createIndex("idx__emdash_byline_fields_sort_order").ifNotExists().on("_emdash_byline_fields").column("sort_order").execute();
|
|
2492
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();
|
|
@@ -2509,7 +2509,7 @@ async function up$32(db) {
|
|
|
2509
2509
|
* `up()` (only one or two tables landed) still settles the database back
|
|
2510
2510
|
* to its pre-042 state.
|
|
2511
2511
|
*/
|
|
2512
|
-
async function down$
|
|
2512
|
+
async function down$35(db) {
|
|
2513
2513
|
await db.schema.dropTable("_emdash_byline_field_group_values").ifExists().execute();
|
|
2514
2514
|
await db.schema.dropTable("_emdash_byline_field_values").ifExists().execute();
|
|
2515
2515
|
await db.schema.dropTable("_emdash_byline_fields").ifExists().execute();
|
|
@@ -2519,8 +2519,8 @@ async function down$32(db) {
|
|
|
2519
2519
|
//#endregion
|
|
2520
2520
|
//#region src/database/migrations/043_content_references.ts
|
|
2521
2521
|
var _043_content_references_exports = /* @__PURE__ */ __exportAll({
|
|
2522
|
-
down: () => down$
|
|
2523
|
-
up: () => up$
|
|
2522
|
+
down: () => down$34,
|
|
2523
|
+
up: () => up$34
|
|
2524
2524
|
});
|
|
2525
2525
|
/**
|
|
2526
2526
|
* Content references.
|
|
@@ -2540,7 +2540,7 @@ var _043_content_references_exports = /* @__PURE__ */ __exportAll({
|
|
|
2540
2540
|
* race-recovery path) re-applies cleanly — including any indexes that landed in
|
|
2541
2541
|
* the failed pass after their table.
|
|
2542
2542
|
*/
|
|
2543
|
-
async function up$
|
|
2543
|
+
async function up$34(db) {
|
|
2544
2544
|
const defaultLocale = getI18nConfig()?.defaultLocale ?? "en";
|
|
2545
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();
|
|
2546
2546
|
await db.schema.createIndex("idx__emdash_relations_locale").ifNotExists().on("_emdash_relations").column("locale").execute();
|
|
@@ -2561,7 +2561,7 @@ async function up$31(db) {
|
|
|
2561
2561
|
await db.schema.createIndex("idx__emdash_content_references_child").ifNotExists().on("_emdash_content_references").columns(["child_group", "relation_group"]).execute();
|
|
2562
2562
|
await db.schema.createIndex("idx__emdash_content_references_relation").ifNotExists().on("_emdash_content_references").column("relation_group").execute();
|
|
2563
2563
|
}
|
|
2564
|
-
async function down$
|
|
2564
|
+
async function down$34(db) {
|
|
2565
2565
|
await db.schema.dropTable("_emdash_content_references").ifExists().execute();
|
|
2566
2566
|
await db.schema.dropTable("_emdash_relations").ifExists().execute();
|
|
2567
2567
|
}
|
|
@@ -2569,8 +2569,8 @@ async function down$31(db) {
|
|
|
2569
2569
|
//#endregion
|
|
2570
2570
|
//#region src/database/migrations/044_comment_reactions.ts
|
|
2571
2571
|
var _044_comment_reactions_exports = /* @__PURE__ */ __exportAll({
|
|
2572
|
-
down: () => down$
|
|
2573
|
-
up: () => up$
|
|
2572
|
+
down: () => down$33,
|
|
2573
|
+
up: () => up$33
|
|
2574
2574
|
});
|
|
2575
2575
|
/**
|
|
2576
2576
|
* Comment reactions (Tier 1 of the best-in-class comments RFC).
|
|
@@ -2582,7 +2582,7 @@ var _044_comment_reactions_exports = /* @__PURE__ */ __exportAll({
|
|
|
2582
2582
|
*
|
|
2583
2583
|
* Additive and backward-compatible: a new table, no change to existing schema.
|
|
2584
2584
|
*/
|
|
2585
|
-
async function up$
|
|
2585
|
+
async function up$33(db) {
|
|
2586
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();
|
|
2587
2587
|
await db.schema.createIndex("idx_comment_reactions_unique").ifNotExists().on("_emdash_comment_reactions").columns([
|
|
2588
2588
|
"comment_id",
|
|
@@ -2592,15 +2592,15 @@ async function up$30(db) {
|
|
|
2592
2592
|
await db.schema.createIndex("idx_comment_reactions_comment").ifNotExists().on("_emdash_comment_reactions").column("comment_id").execute();
|
|
2593
2593
|
await db.schema.createIndex("idx_comment_reactions_voter").ifNotExists().on("_emdash_comment_reactions").columns(["voter_hash", "created_at"]).execute();
|
|
2594
2594
|
}
|
|
2595
|
-
async function down$
|
|
2595
|
+
async function down$33(db) {
|
|
2596
2596
|
await db.schema.dropTable("_emdash_comment_reactions").execute();
|
|
2597
2597
|
}
|
|
2598
2598
|
|
|
2599
2599
|
//#endregion
|
|
2600
2600
|
//#region src/database/migrations/045_taxonomy_parent_group.ts
|
|
2601
2601
|
var _045_taxonomy_parent_group_exports = /* @__PURE__ */ __exportAll({
|
|
2602
|
-
down: () => down$
|
|
2603
|
-
up: () => up$
|
|
2602
|
+
down: () => down$32,
|
|
2603
|
+
up: () => up$32
|
|
2604
2604
|
});
|
|
2605
2605
|
/**
|
|
2606
2606
|
* Store the parent's `translation_group` in `taxonomies.parent_id` instead of a
|
|
@@ -2630,7 +2630,7 @@ var _045_taxonomy_parent_group_exports = /* @__PURE__ */ __exportAll({
|
|
|
2630
2630
|
* Dialect-independent: the correlated-subquery `UPDATE` runs on SQLite (incl.
|
|
2631
2631
|
* D1) and Postgres alike.
|
|
2632
2632
|
*/
|
|
2633
|
-
async function up$
|
|
2633
|
+
async function up$32(db) {
|
|
2634
2634
|
await sql`
|
|
2635
2635
|
UPDATE taxonomies
|
|
2636
2636
|
SET parent_id = (
|
|
@@ -2652,7 +2652,7 @@ async function up$29(db) {
|
|
|
2652
2652
|
* locale (the pre-migration shape). Rows with no same-locale parent are left as
|
|
2653
2653
|
* they are rather than nulled, so a rollback never silently detaches a subtree.
|
|
2654
2654
|
*/
|
|
2655
|
-
async function down$
|
|
2655
|
+
async function down$32(db) {
|
|
2656
2656
|
await sql`
|
|
2657
2657
|
UPDATE taxonomies
|
|
2658
2658
|
SET parent_id = COALESCE(
|
|
@@ -2670,8 +2670,8 @@ async function down$29(db) {
|
|
|
2670
2670
|
//#endregion
|
|
2671
2671
|
//#region src/database/migrations/046_media_usage_index.ts
|
|
2672
2672
|
var _046_media_usage_index_exports = /* @__PURE__ */ __exportAll({
|
|
2673
|
-
down: () => down$
|
|
2674
|
-
up: () => up$
|
|
2673
|
+
down: () => down$31,
|
|
2674
|
+
up: () => up$31
|
|
2675
2675
|
});
|
|
2676
2676
|
/**
|
|
2677
2677
|
* Internal media usage projection tables.
|
|
@@ -2680,7 +2680,7 @@ var _046_media_usage_index_exports = /* @__PURE__ */ __exportAll({
|
|
|
2680
2680
|
* imports, and no content-table scans. Production rows are introduced by later
|
|
2681
2681
|
* phases once the central snapshot/indexer path is reviewed.
|
|
2682
2682
|
*/
|
|
2683
|
-
async function up$
|
|
2683
|
+
async function up$31(db) {
|
|
2684
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();
|
|
2685
2685
|
await db.schema.createIndex("idx__emdash_media_usage_sources_content").ifNotExists().on("_emdash_media_usage_sources").columns([
|
|
2686
2686
|
"source_type",
|
|
@@ -2702,7 +2702,7 @@ async function up$28(db) {
|
|
|
2702
2702
|
await db.schema.createIndex("idx__emdash_media_usage_provider_asset").ifNotExists().on("_emdash_media_usage").columns(["provider", "provider_asset_id"]).execute();
|
|
2703
2703
|
await db.schema.createIndex("idx__emdash_media_usage_source_generation").ifNotExists().on("_emdash_media_usage").columns(["source_key", "generation"]).execute();
|
|
2704
2704
|
}
|
|
2705
|
-
async function down$
|
|
2705
|
+
async function down$31(db) {
|
|
2706
2706
|
await db.schema.dropTable("_emdash_media_usage").ifExists().execute();
|
|
2707
2707
|
await db.schema.dropTable("_emdash_media_usage_sources").ifExists().execute();
|
|
2708
2708
|
}
|
|
@@ -2710,8 +2710,8 @@ async function down$28(db) {
|
|
|
2710
2710
|
//#endregion
|
|
2711
2711
|
//#region src/database/migrations/047_restore_taxonomy_parent_index.ts
|
|
2712
2712
|
var _047_restore_taxonomy_parent_index_exports = /* @__PURE__ */ __exportAll({
|
|
2713
|
-
down: () => down$
|
|
2714
|
-
up: () => up$
|
|
2713
|
+
down: () => down$30,
|
|
2714
|
+
up: () => up$30
|
|
2715
2715
|
});
|
|
2716
2716
|
/**
|
|
2717
2717
|
* Restore `idx_taxonomies_parent` on `taxonomies(parent_id)` (#1665).
|
|
@@ -2728,18 +2728,18 @@ var _047_restore_taxonomy_parent_index_exports = /* @__PURE__ */ __exportAll({
|
|
|
2728
2728
|
* index here. Fresh installs also get it in 036's rebuild for parity with the
|
|
2729
2729
|
* other rebuilt tables, making this a no-op for them.
|
|
2730
2730
|
*/
|
|
2731
|
-
async function up$
|
|
2731
|
+
async function up$30(db) {
|
|
2732
2732
|
await db.schema.createIndex("idx_taxonomies_parent").ifNotExists().on("taxonomies").column("parent_id").execute();
|
|
2733
2733
|
}
|
|
2734
|
-
async function down$
|
|
2734
|
+
async function down$30(db) {
|
|
2735
2735
|
await db.schema.dropIndex("idx_taxonomies_parent").ifExists().execute();
|
|
2736
2736
|
}
|
|
2737
2737
|
|
|
2738
2738
|
//#endregion
|
|
2739
2739
|
//#region src/database/migrations/048_restore_content_taxonomies_term_index.ts
|
|
2740
2740
|
var _048_restore_content_taxonomies_term_index_exports = /* @__PURE__ */ __exportAll({
|
|
2741
|
-
down: () => down$
|
|
2742
|
-
up: () => up$
|
|
2741
|
+
down: () => down$29,
|
|
2742
|
+
up: () => up$29
|
|
2743
2743
|
});
|
|
2744
2744
|
/**
|
|
2745
2745
|
* Restore `idx_content_taxonomies_term` on `content_taxonomies(taxonomy_id)` (#1701).
|
|
@@ -2759,18 +2759,18 @@ var _048_restore_content_taxonomies_term_index_exports = /* @__PURE__ */ __expor
|
|
|
2759
2759
|
*
|
|
2760
2760
|
* Forward-only.
|
|
2761
2761
|
*/
|
|
2762
|
-
async function up$
|
|
2762
|
+
async function up$29(db) {
|
|
2763
2763
|
await db.schema.createIndex("idx_content_taxonomies_term").ifNotExists().on("content_taxonomies").column("taxonomy_id").execute();
|
|
2764
2764
|
}
|
|
2765
|
-
async function down$
|
|
2765
|
+
async function down$29(db) {
|
|
2766
2766
|
await db.schema.dropIndex("idx_content_taxonomies_term").ifExists().execute();
|
|
2767
2767
|
}
|
|
2768
2768
|
|
|
2769
2769
|
//#endregion
|
|
2770
2770
|
//#region src/database/migrations/049_taxonomies_name_locale_index.ts
|
|
2771
2771
|
var _049_taxonomies_name_locale_index_exports = /* @__PURE__ */ __exportAll({
|
|
2772
|
-
down: () => down$
|
|
2773
|
-
up: () => up$
|
|
2772
|
+
down: () => down$28,
|
|
2773
|
+
up: () => up$28
|
|
2774
2774
|
});
|
|
2775
2775
|
/**
|
|
2776
2776
|
* Add composite `idx_taxonomies_name_locale` on `taxonomies(name, locale)` (#1723).
|
|
@@ -2791,11 +2791,11 @@ var _049_taxonomies_name_locale_index_exports = /* @__PURE__ */ __exportAll({
|
|
|
2791
2791
|
* by the new composite's prefix. Create-before-drop keeps name lookups indexed
|
|
2792
2792
|
* at every point. Both statements are idempotent so a partial apply can retry.
|
|
2793
2793
|
*/
|
|
2794
|
-
async function up$
|
|
2794
|
+
async function up$28(db) {
|
|
2795
2795
|
await db.schema.createIndex("idx_taxonomies_name_locale").ifNotExists().on("taxonomies").columns(["name", "locale"]).execute();
|
|
2796
2796
|
await db.schema.dropIndex("idx_taxonomies_name").ifExists().execute();
|
|
2797
2797
|
}
|
|
2798
|
-
async function down$
|
|
2798
|
+
async function down$28(db) {
|
|
2799
2799
|
await db.schema.createIndex("idx_taxonomies_name").ifNotExists().on("taxonomies").column("name").execute();
|
|
2800
2800
|
await db.schema.dropIndex("idx_taxonomies_name_locale").ifExists().execute();
|
|
2801
2801
|
}
|
|
@@ -2803,8 +2803,8 @@ async function down$25(db) {
|
|
|
2803
2803
|
//#endregion
|
|
2804
2804
|
//#region src/database/migrations/050_media_usage_index_status.ts
|
|
2805
2805
|
var _050_media_usage_index_status_exports = /* @__PURE__ */ __exportAll({
|
|
2806
|
-
down: () => down$
|
|
2807
|
-
up: () => up$
|
|
2806
|
+
down: () => down$27,
|
|
2807
|
+
up: () => up$27
|
|
2808
2808
|
});
|
|
2809
2809
|
const SOURCE_TABLE = "_emdash_media_usage_sources";
|
|
2810
2810
|
const DUPLICATE_COLUMN_RE$3 = /(?:duplicate column|column .* already exists|already exists.*column)/i;
|
|
@@ -2815,7 +2815,7 @@ const DUPLICATE_COLUMN_RE$3 = /(?:duplicate column|column .* already exists|alre
|
|
|
2815
2815
|
* tracking for later reference-index reconciliation. No content scans, no
|
|
2816
2816
|
* runtime imports, and no backfill.
|
|
2817
2817
|
*/
|
|
2818
|
-
async function up$
|
|
2818
|
+
async function up$27(db) {
|
|
2819
2819
|
await addSourceMetadataColumns(db);
|
|
2820
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", [
|
|
2821
2821
|
"adapter_id",
|
|
@@ -2830,7 +2830,7 @@ async function up$24(db) {
|
|
|
2830
2830
|
await db.schema.createIndex("idx__emdash_media_usage_sources_fingerprint").ifNotExists().on("_emdash_media_usage_sources").column("source_fingerprint").execute();
|
|
2831
2831
|
await db.schema.createIndex("idx__emdash_media_usage_index_status_status").ifNotExists().on("_emdash_media_usage_index_status").columns(["adapter_id", "status"]).execute();
|
|
2832
2832
|
}
|
|
2833
|
-
async function down$
|
|
2833
|
+
async function down$27(db) {
|
|
2834
2834
|
await db.schema.dropIndex("idx__emdash_media_usage_index_status_status").ifExists().execute();
|
|
2835
2835
|
await db.schema.dropIndex("idx__emdash_media_usage_sources_fingerprint").ifExists().execute();
|
|
2836
2836
|
await db.schema.dropIndex("idx__emdash_media_usage_sources_completeness").ifExists().execute();
|
|
@@ -2886,8 +2886,8 @@ async function dropSourceMetadataColumns(db) {
|
|
|
2886
2886
|
//#endregion
|
|
2887
2887
|
//#region src/database/migrations/051_content_taxonomies_denorm.ts
|
|
2888
2888
|
var _051_content_taxonomies_denorm_exports = /* @__PURE__ */ __exportAll({
|
|
2889
|
-
down: () => down$
|
|
2890
|
-
up: () => up$
|
|
2889
|
+
down: () => down$26,
|
|
2890
|
+
up: () => up$26
|
|
2891
2891
|
});
|
|
2892
2892
|
/**
|
|
2893
2893
|
* Denormalize the filter + sort columns from `ec_*` onto `content_taxonomies`
|
|
@@ -2944,7 +2944,7 @@ const INDEXES = [
|
|
|
2944
2944
|
columns: "taxonomy_id, collection, deleted_at, locale, created_at DESC, entry_id DESC"
|
|
2945
2945
|
}
|
|
2946
2946
|
];
|
|
2947
|
-
async function up$
|
|
2947
|
+
async function up$26(db) {
|
|
2948
2948
|
for (const column of DENORM_COLUMNS) {
|
|
2949
2949
|
if (await columnExists(db, "content_taxonomies", column)) continue;
|
|
2950
2950
|
await sql`
|
|
@@ -2970,7 +2970,7 @@ async function up$23(db) {
|
|
|
2970
2970
|
ON content_taxonomies (${sql.raw(index.columns)})
|
|
2971
2971
|
`.execute(db);
|
|
2972
2972
|
}
|
|
2973
|
-
async function down$
|
|
2973
|
+
async function down$26(db) {
|
|
2974
2974
|
for (const index of INDEXES) await sql`DROP INDEX IF EXISTS ${sql.ref(index.name)}`.execute(db);
|
|
2975
2975
|
for (const column of DENORM_COLUMNS) await sql`
|
|
2976
2976
|
ALTER TABLE content_taxonomies DROP COLUMN ${sql.ref(column)}
|
|
@@ -2980,12 +2980,12 @@ async function down$23(db) {
|
|
|
2980
2980
|
//#endregion
|
|
2981
2981
|
//#region src/database/migrations/052_media_usage_read_index.ts
|
|
2982
2982
|
var _052_media_usage_read_index_exports = /* @__PURE__ */ __exportAll({
|
|
2983
|
-
down: () => down$
|
|
2984
|
-
up: () => up$
|
|
2983
|
+
down: () => down$25,
|
|
2984
|
+
up: () => up$25
|
|
2985
2985
|
});
|
|
2986
2986
|
const OLD_INDEX = "idx__emdash_media_usage_media_id";
|
|
2987
2987
|
const READ_INDEX = "idx__emdash_media_usage_media_source_generation";
|
|
2988
|
-
async function up$
|
|
2988
|
+
async function up$25(db) {
|
|
2989
2989
|
await db.schema.createIndex(READ_INDEX).ifNotExists().on("_emdash_media_usage").columns([
|
|
2990
2990
|
"media_id",
|
|
2991
2991
|
"source_key",
|
|
@@ -2993,7 +2993,7 @@ async function up$22(db) {
|
|
|
2993
2993
|
]).execute();
|
|
2994
2994
|
await db.schema.dropIndex(OLD_INDEX).ifExists().execute();
|
|
2995
2995
|
}
|
|
2996
|
-
async function down$
|
|
2996
|
+
async function down$25(db) {
|
|
2997
2997
|
await db.schema.createIndex(OLD_INDEX).ifNotExists().on("_emdash_media_usage").column("media_id").execute();
|
|
2998
2998
|
await db.schema.dropIndex(READ_INDEX).ifExists().execute();
|
|
2999
2999
|
}
|
|
@@ -3001,15 +3001,15 @@ async function down$22(db) {
|
|
|
3001
3001
|
//#endregion
|
|
3002
3002
|
//#region src/database/migrations/053_plugin_mcp_tools.ts
|
|
3003
3003
|
var _053_plugin_mcp_tools_exports = /* @__PURE__ */ __exportAll({
|
|
3004
|
-
down: () => down$
|
|
3005
|
-
up: () => up$
|
|
3004
|
+
down: () => down$24,
|
|
3005
|
+
up: () => up$24
|
|
3006
3006
|
});
|
|
3007
3007
|
/** Persist explicit per-plugin MCP enablement and the declaration consented to by an admin. */
|
|
3008
|
-
async function up$
|
|
3008
|
+
async function up$24(db) {
|
|
3009
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();
|
|
3010
3010
|
if (!await columnExists(db, "_plugin_state", "mcp_tools_consent")) await db.schema.alterTable("_plugin_state").addColumn("mcp_tools_consent", "text").execute();
|
|
3011
3011
|
}
|
|
3012
|
-
async function down$
|
|
3012
|
+
async function down$24(db) {
|
|
3013
3013
|
await db.schema.alterTable("_plugin_state").dropColumn("mcp_tools_consent").execute();
|
|
3014
3014
|
await db.schema.alterTable("_plugin_state").dropColumn("mcp_tools_enabled").execute();
|
|
3015
3015
|
}
|
|
@@ -3017,16 +3017,16 @@ async function down$21(db) {
|
|
|
3017
3017
|
//#endregion
|
|
3018
3018
|
//#region src/database/migrations/054_media_upload_attempts.ts
|
|
3019
3019
|
var _054_media_upload_attempts_exports = /* @__PURE__ */ __exportAll({
|
|
3020
|
-
down: () => down$
|
|
3021
|
-
up: () => up$
|
|
3020
|
+
down: () => down$23,
|
|
3021
|
+
up: () => up$23
|
|
3022
3022
|
});
|
|
3023
|
-
async function up$
|
|
3023
|
+
async function up$23(db) {
|
|
3024
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();
|
|
3025
3025
|
await db.schema.createIndex("idx_media_upload_attempts_media_id").ifNotExists().on("_emdash_media_upload_attempts").column("media_id").execute();
|
|
3026
3026
|
await db.schema.createIndex("idx_media_upload_attempts_status_created_at").ifNotExists().on("_emdash_media_upload_attempts").columns(["status", "created_at"]).execute();
|
|
3027
3027
|
await db.schema.createIndex("idx_media_storage_key").ifNotExists().on("media").column("storage_key").execute();
|
|
3028
3028
|
}
|
|
3029
|
-
async function down$
|
|
3029
|
+
async function down$23(db) {
|
|
3030
3030
|
await db.schema.dropIndex("idx_media_storage_key").ifExists().execute();
|
|
3031
3031
|
await db.schema.dropTable("_emdash_media_upload_attempts").ifExists().execute();
|
|
3032
3032
|
}
|
|
@@ -3034,8 +3034,8 @@ async function down$20(db) {
|
|
|
3034
3034
|
//#endregion
|
|
3035
3035
|
//#region src/database/migrations/055_content_translation_group_locale_index.ts
|
|
3036
3036
|
var _055_content_translation_group_locale_index_exports = /* @__PURE__ */ __exportAll({
|
|
3037
|
-
down: () => down$
|
|
3038
|
-
up: () => up$
|
|
3037
|
+
down: () => down$22,
|
|
3038
|
+
up: () => up$22
|
|
3039
3039
|
});
|
|
3040
3040
|
/**
|
|
3041
3041
|
* Migration: replace the single-column content `translation_group` index with
|
|
@@ -3065,7 +3065,7 @@ var _055_content_translation_group_locale_index_exports = /* @__PURE__ */ __expo
|
|
|
3065
3065
|
* and the longer forms truncate to the same value for long collection slugs.
|
|
3066
3066
|
* Keep these identical to the names in `schema/registry.ts`.
|
|
3067
3067
|
*/
|
|
3068
|
-
async function up$
|
|
3068
|
+
async function up$22(db) {
|
|
3069
3069
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
3070
3070
|
for (const tableName of tableNames) {
|
|
3071
3071
|
await sql`
|
|
@@ -3079,7 +3079,7 @@ async function up$19(db) {
|
|
|
3079
3079
|
await sql`DROP INDEX IF EXISTS ${sql.ref(`idx_${tableName}_translation_group`)}`.execute(db);
|
|
3080
3080
|
}
|
|
3081
3081
|
}
|
|
3082
|
-
async function down$
|
|
3082
|
+
async function down$22(db) {
|
|
3083
3083
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
3084
3084
|
for (const tableName of tableNames) {
|
|
3085
3085
|
await sql`
|
|
@@ -3094,8 +3094,8 @@ async function down$19(db) {
|
|
|
3094
3094
|
//#endregion
|
|
3095
3095
|
//#region src/database/migrations/056_taxonomy_term_sort_order.ts
|
|
3096
3096
|
var _056_taxonomy_term_sort_order_exports = /* @__PURE__ */ __exportAll({
|
|
3097
|
-
down: () => down$
|
|
3098
|
-
up: () => up$
|
|
3097
|
+
down: () => down$21,
|
|
3098
|
+
up: () => up$21
|
|
3099
3099
|
});
|
|
3100
3100
|
/**
|
|
3101
3101
|
* Add `taxonomies.sort_order` and mint a position for every existing term.
|
|
@@ -3123,7 +3123,7 @@ var _056_taxonomy_term_sort_order_exports = /* @__PURE__ */ __exportAll({
|
|
|
3123
3123
|
* Worker gets on the free plan before the migration finishes.
|
|
3124
3124
|
*/
|
|
3125
3125
|
const GROUPS_PER_UPDATE = 32;
|
|
3126
|
-
async function up$
|
|
3126
|
+
async function up$21(db) {
|
|
3127
3127
|
const fresh = !await columnExists(db, "taxonomies", "sort_order");
|
|
3128
3128
|
if (fresh) await db.schema.alterTable("taxonomies").addColumn("sort_order", "integer", (col) => col.notNull().defaultTo(0)).execute();
|
|
3129
3129
|
await sql`UPDATE taxonomies SET translation_group = id WHERE translation_group IS NULL`.execute(db);
|
|
@@ -3222,15 +3222,15 @@ async function applyByGroup(db, column, values) {
|
|
|
3222
3222
|
`.execute(db);
|
|
3223
3223
|
}
|
|
3224
3224
|
}
|
|
3225
|
-
async function down$
|
|
3225
|
+
async function down$21(db) {
|
|
3226
3226
|
if (await columnExists(db, "taxonomies", "sort_order")) await db.schema.alterTable("taxonomies").dropColumn("sort_order").execute();
|
|
3227
3227
|
}
|
|
3228
3228
|
|
|
3229
3229
|
//#endregion
|
|
3230
3230
|
//#region src/database/migrations/057_collection_hidden.ts
|
|
3231
3231
|
var _057_collection_hidden_exports = /* @__PURE__ */ __exportAll({
|
|
3232
|
-
down: () => down$
|
|
3233
|
-
up: () => up$
|
|
3232
|
+
down: () => down$20,
|
|
3233
|
+
up: () => up$20
|
|
3234
3234
|
});
|
|
3235
3235
|
/**
|
|
3236
3236
|
* Migration: hide a collection from the admin sidebar.
|
|
@@ -3240,18 +3240,18 @@ var _057_collection_hidden_exports = /* @__PURE__ */ __exportAll({
|
|
|
3240
3240
|
* URLs) — only its auto-generated sidebar entry is omitted, so plugins that
|
|
3241
3241
|
* own a collection end to end can steer editors to their own admin UI.
|
|
3242
3242
|
*/
|
|
3243
|
-
async function up$
|
|
3243
|
+
async function up$20(db) {
|
|
3244
3244
|
if (!await columnExists(db, "_emdash_collections", "hidden")) await db.schema.alterTable("_emdash_collections").addColumn("hidden", "integer", (col) => col.notNull().defaultTo(0)).execute();
|
|
3245
3245
|
}
|
|
3246
|
-
async function down$
|
|
3246
|
+
async function down$20(db) {
|
|
3247
3247
|
await db.schema.alterTable("_emdash_collections").dropColumn("hidden").execute();
|
|
3248
3248
|
}
|
|
3249
3249
|
|
|
3250
3250
|
//#endregion
|
|
3251
3251
|
//#region src/database/migrations/058_collection_sort_order.ts
|
|
3252
3252
|
var _058_collection_sort_order_exports = /* @__PURE__ */ __exportAll({
|
|
3253
|
-
down: () => down$
|
|
3254
|
-
up: () => up$
|
|
3253
|
+
down: () => down$19,
|
|
3254
|
+
up: () => up$19
|
|
3255
3255
|
});
|
|
3256
3256
|
/**
|
|
3257
3257
|
* Migration: explicit collection order in the admin sidebar.
|
|
@@ -3260,21 +3260,21 @@ var _058_collection_sort_order_exports = /* @__PURE__ */ __exportAll({
|
|
|
3260
3260
|
* explicit position: those collections sort after the ordered ones, keeping
|
|
3261
3261
|
* the alphabetical-by-slug order.
|
|
3262
3262
|
*/
|
|
3263
|
-
async function up$
|
|
3263
|
+
async function up$19(db) {
|
|
3264
3264
|
if (!await columnExists(db, "_emdash_collections", "sort_order")) await db.schema.alterTable("_emdash_collections").addColumn("sort_order", "integer").execute();
|
|
3265
3265
|
}
|
|
3266
|
-
async function down$
|
|
3266
|
+
async function down$19(db) {
|
|
3267
3267
|
await db.schema.alterTable("_emdash_collections").dropColumn("sort_order").execute();
|
|
3268
3268
|
}
|
|
3269
3269
|
|
|
3270
3270
|
//#endregion
|
|
3271
3271
|
//#region src/database/migrations/059_revision_prune_queue.ts
|
|
3272
3272
|
var _059_revision_prune_queue_exports = /* @__PURE__ */ __exportAll({
|
|
3273
|
-
down: () => down$
|
|
3274
|
-
up: () => up$
|
|
3273
|
+
down: () => down$18,
|
|
3274
|
+
up: () => up$18
|
|
3275
3275
|
});
|
|
3276
3276
|
const REVISION_KEEP_COUNT = 50;
|
|
3277
|
-
async function up$
|
|
3277
|
+
async function up$18(db) {
|
|
3278
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();
|
|
3279
3279
|
await db.schema.createIndex("idx_revision_prune_queue_revision_id").ifNotExists().on("_emdash_revision_prune_queue").column("revision_id").execute();
|
|
3280
3280
|
await sql`
|
|
@@ -3288,33 +3288,33 @@ async function up$15(db) {
|
|
|
3288
3288
|
DO UPDATE SET revision_id = excluded.revision_id
|
|
3289
3289
|
`.execute(db);
|
|
3290
3290
|
}
|
|
3291
|
-
async function down$
|
|
3291
|
+
async function down$18(db) {
|
|
3292
3292
|
await db.schema.dropTable("_emdash_revision_prune_queue").ifExists().execute();
|
|
3293
3293
|
}
|
|
3294
3294
|
|
|
3295
3295
|
//#endregion
|
|
3296
3296
|
//#region src/database/migrations/060_collection_admin_config.ts
|
|
3297
3297
|
var _060_collection_admin_config_exports = /* @__PURE__ */ __exportAll({
|
|
3298
|
-
down: () => down$
|
|
3299
|
-
up: () => up$
|
|
3298
|
+
down: () => down$17,
|
|
3299
|
+
up: () => up$17
|
|
3300
3300
|
});
|
|
3301
3301
|
/** Persist collection-level admin presentation options. */
|
|
3302
|
-
async function up$
|
|
3302
|
+
async function up$17(db) {
|
|
3303
3303
|
if (!await columnExists(db, "_emdash_collections", "admin_config")) await db.schema.alterTable("_emdash_collections").addColumn("admin_config", "text").execute();
|
|
3304
3304
|
}
|
|
3305
|
-
async function down$
|
|
3305
|
+
async function down$17(db) {
|
|
3306
3306
|
if (await columnExists(db, "_emdash_collections", "admin_config")) await db.schema.alterTable("_emdash_collections").dropColumn("admin_config").execute();
|
|
3307
3307
|
}
|
|
3308
3308
|
|
|
3309
3309
|
//#endregion
|
|
3310
3310
|
//#region src/database/migrations/061_media_usage_cleanup.ts
|
|
3311
3311
|
var _061_media_usage_cleanup_exports = /* @__PURE__ */ __exportAll({
|
|
3312
|
-
down: () => down$
|
|
3313
|
-
up: () => up$
|
|
3312
|
+
down: () => down$16,
|
|
3313
|
+
up: () => up$16
|
|
3314
3314
|
});
|
|
3315
3315
|
const CLEANUP_TASK_KEY = "projection_gc";
|
|
3316
3316
|
const INITIAL_ELIGIBLE_AT = "1970-01-01T00:00:00.000Z";
|
|
3317
|
-
async function up$
|
|
3317
|
+
async function up$16(db) {
|
|
3318
3318
|
await db.schema.createIndex("idx__emdash_media_usage_cleanup_scan").ifNotExists().on("_emdash_media_usage").columns([
|
|
3319
3319
|
"created_at",
|
|
3320
3320
|
"id",
|
|
@@ -3330,7 +3330,7 @@ async function up$13(db) {
|
|
|
3330
3330
|
ON CONFLICT (task_key) DO NOTHING
|
|
3331
3331
|
`.execute(db);
|
|
3332
3332
|
}
|
|
3333
|
-
async function down$
|
|
3333
|
+
async function down$16(db) {
|
|
3334
3334
|
await db.schema.dropIndex("idx__emdash_media_usage_generation_writes_expiry").ifExists().execute();
|
|
3335
3335
|
await db.schema.dropTable("_emdash_media_usage_generation_writes").ifExists().execute();
|
|
3336
3336
|
await db.schema.dropTable("_emdash_media_usage_cleanup").ifExists().execute();
|
|
@@ -3340,10 +3340,10 @@ async function down$13(db) {
|
|
|
3340
3340
|
//#endregion
|
|
3341
3341
|
//#region src/database/migrations/062_media_usage_cleanup_fence.ts
|
|
3342
3342
|
var _062_media_usage_cleanup_fence_exports = /* @__PURE__ */ __exportAll({
|
|
3343
|
-
down: () => down$
|
|
3344
|
-
up: () => up$
|
|
3343
|
+
down: () => down$15,
|
|
3344
|
+
up: () => up$15
|
|
3345
3345
|
});
|
|
3346
|
-
async function up$
|
|
3346
|
+
async function up$15(db) {
|
|
3347
3347
|
if (!await columnExists(db, "_emdash_media_usage", "cleanup_lease_token")) await db.schema.alterTable("_emdash_media_usage").addColumn("cleanup_lease_token", "text").execute();
|
|
3348
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();
|
|
3349
3349
|
if (isPostgres(db)) {
|
|
@@ -3525,7 +3525,7 @@ async function up$12(db) {
|
|
|
3525
3525
|
END
|
|
3526
3526
|
`).execute(db);
|
|
3527
3527
|
}
|
|
3528
|
-
async function down$
|
|
3528
|
+
async function down$15(db) {
|
|
3529
3529
|
if (isPostgres(db)) {
|
|
3530
3530
|
await sql.raw("DROP TRIGGER IF EXISTS emdash_media_usage_record_cleanup_fence ON _emdash_media_usage").execute(db);
|
|
3531
3531
|
await sql.raw("DROP TRIGGER IF EXISTS emdash_media_usage_fence_source_generation_update ON _emdash_media_usage_sources").execute(db);
|
|
@@ -3548,14 +3548,14 @@ async function down$12(db) {
|
|
|
3548
3548
|
//#endregion
|
|
3549
3549
|
//#region src/database/migrations/063_media_usage_incremental_work.ts
|
|
3550
3550
|
var _063_media_usage_incremental_work_exports = /* @__PURE__ */ __exportAll({
|
|
3551
|
-
down: () => down$
|
|
3552
|
-
up: () => up$
|
|
3551
|
+
down: () => down$14,
|
|
3552
|
+
up: () => up$14
|
|
3553
3553
|
});
|
|
3554
3554
|
const ACTIVATION_KEY$1 = "incremental_capture";
|
|
3555
3555
|
const CONTENT_ADAPTER_ID = "content-media";
|
|
3556
3556
|
const COLLECTION_SCOPE = "collection";
|
|
3557
3557
|
const DUPLICATE_COLUMN_RE$2 = /(?:duplicate column|column .* already exists|already exists.*column)/i;
|
|
3558
|
-
async function up$
|
|
3558
|
+
async function up$14(db) {
|
|
3559
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();
|
|
3560
3560
|
await sql`
|
|
3561
3561
|
INSERT INTO _emdash_media_usage_activation (task_key, state)
|
|
@@ -3652,7 +3652,7 @@ async function up$11(db) {
|
|
|
3652
3652
|
)
|
|
3653
3653
|
`.execute(db);
|
|
3654
3654
|
}
|
|
3655
|
-
async function down$
|
|
3655
|
+
async function down$14(db) {
|
|
3656
3656
|
await assertRollbackIsEmptyAndInactive(db);
|
|
3657
3657
|
await db.schema.dropIndex("idx__emdash_media_usage_sources_identity").ifExists().execute();
|
|
3658
3658
|
await db.schema.dropIndex("idx__emdash_media_usage_status_collection").ifExists().execute();
|
|
@@ -3799,10 +3799,10 @@ function deepErrorMessage$3(error) {
|
|
|
3799
3799
|
//#endregion
|
|
3800
3800
|
//#region src/database/migrations/064_fts_plain_text.ts
|
|
3801
3801
|
var _064_fts_plain_text_exports = /* @__PURE__ */ __exportAll({
|
|
3802
|
-
down: () => down$
|
|
3803
|
-
up: () => up$
|
|
3802
|
+
down: () => down$13,
|
|
3803
|
+
up: () => up$13
|
|
3804
3804
|
});
|
|
3805
|
-
async function up$
|
|
3805
|
+
async function up$13(db) {
|
|
3806
3806
|
if (!isSqlite(db)) return;
|
|
3807
3807
|
const collections = await sql`
|
|
3808
3808
|
SELECT slug, search_config FROM _emdash_collections
|
|
@@ -3826,7 +3826,7 @@ async function up$10(db) {
|
|
|
3826
3826
|
* at runtime and the self-contained shape remains fully functional for
|
|
3827
3827
|
* older code paths that only MATCH and join on id.
|
|
3828
3828
|
*/
|
|
3829
|
-
async function down$
|
|
3829
|
+
async function down$13(_db) {}
|
|
3830
3830
|
function isSearchEnabled(searchConfig) {
|
|
3831
3831
|
if (!searchConfig) return false;
|
|
3832
3832
|
try {
|
|
@@ -3949,10 +3949,10 @@ async function rebuildIndex(db, collectionSlug, fields, tokenizer) {
|
|
|
3949
3949
|
//#endregion
|
|
3950
3950
|
//#region src/database/migrations/065_media_usage_collection_deletion.ts
|
|
3951
3951
|
var _065_media_usage_collection_deletion_exports = /* @__PURE__ */ __exportAll({
|
|
3952
|
-
down: () => down$
|
|
3953
|
-
up: () => up$
|
|
3952
|
+
down: () => down$12,
|
|
3953
|
+
up: () => up$12
|
|
3954
3954
|
});
|
|
3955
|
-
async function up$
|
|
3955
|
+
async function up$12(db) {
|
|
3956
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();
|
|
3957
3957
|
await db.schema.createIndex("idx__emdash_media_usage_collection_deletions_due").ifNotExists().on("_emdash_media_usage_collection_deletions").columns([
|
|
3958
3958
|
"state",
|
|
@@ -3978,7 +3978,7 @@ async function up$9(db) {
|
|
|
3978
3978
|
]).execute();
|
|
3979
3979
|
await db.schema.createIndex("idx__emdash_media_usage_source_cursor").ifNotExists().on("_emdash_media_usage").columns(["source_key", "id"]).execute();
|
|
3980
3980
|
}
|
|
3981
|
-
async function down$
|
|
3981
|
+
async function down$12(db) {
|
|
3982
3982
|
if ((await sql`
|
|
3983
3983
|
SELECT 1 AS present
|
|
3984
3984
|
FROM _emdash_media_usage_collection_deletions
|
|
@@ -3996,11 +3996,11 @@ function sortableUtcTimestamp$1(db) {
|
|
|
3996
3996
|
//#endregion
|
|
3997
3997
|
//#region src/database/migrations/066_media_usage_reconciliation.ts
|
|
3998
3998
|
var _066_media_usage_reconciliation_exports = /* @__PURE__ */ __exportAll({
|
|
3999
|
-
down: () => down$
|
|
4000
|
-
up: () => up$
|
|
3999
|
+
down: () => down$11,
|
|
4000
|
+
up: () => up$11
|
|
4001
4001
|
});
|
|
4002
4002
|
const ACTIVATION_KEY = "incremental_capture";
|
|
4003
|
-
async function up$
|
|
4003
|
+
async function up$11(db) {
|
|
4004
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();
|
|
4005
4005
|
await db.schema.createIndex("idx__emdash_media_usage_reconciliations_due").ifNotExists().on("_emdash_media_usage_reconciliations").columns([
|
|
4006
4006
|
"state",
|
|
@@ -4028,7 +4028,7 @@ async function up$8(db) {
|
|
|
4028
4028
|
]).execute();
|
|
4029
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();
|
|
4030
4030
|
}
|
|
4031
|
-
async function down$
|
|
4031
|
+
async function down$11(db) {
|
|
4032
4032
|
if (await tableExists(db, "_emdash_media_usage_reconciliations")) {
|
|
4033
4033
|
if ((await sql`
|
|
4034
4034
|
SELECT 1 AS present
|
|
@@ -4056,15 +4056,15 @@ function sortableUtcTimestamp(db) {
|
|
|
4056
4056
|
//#endregion
|
|
4057
4057
|
//#region src/database/migrations/067_indexed_content_fields.ts
|
|
4058
4058
|
var _067_indexed_content_fields_exports = /* @__PURE__ */ __exportAll({
|
|
4059
|
-
down: () => down$
|
|
4060
|
-
up: () => up$
|
|
4059
|
+
down: () => down$10,
|
|
4060
|
+
up: () => up$10
|
|
4061
4061
|
});
|
|
4062
4062
|
const FIELD_ID_PATTERN = /^[0-9A-Z]{26}$/;
|
|
4063
4063
|
/** Mark custom fields whose structured list queries are backed by a physical index. */
|
|
4064
|
-
async function up$
|
|
4064
|
+
async function up$10(db) {
|
|
4065
4065
|
if (!await columnExists(db, "_emdash_fields", "indexed")) await db.schema.alterTable("_emdash_fields").addColumn("indexed", "integer", (column) => column.notNull().defaultTo(0)).execute();
|
|
4066
4066
|
}
|
|
4067
|
-
async function down$
|
|
4067
|
+
async function down$10(db) {
|
|
4068
4068
|
if (!await columnExists(db, "_emdash_fields", "indexed")) return;
|
|
4069
4069
|
const indexedFields = await sql`
|
|
4070
4070
|
SELECT id FROM _emdash_fields WHERE indexed = 1
|
|
@@ -4084,8 +4084,8 @@ async function down$7(db) {
|
|
|
4084
4084
|
//#endregion
|
|
4085
4085
|
//#region src/database/migrations/068_content_taxonomy_entry_groups.ts
|
|
4086
4086
|
var _068_content_taxonomy_entry_groups_exports = /* @__PURE__ */ __exportAll({
|
|
4087
|
-
down: () => down$
|
|
4088
|
-
up: () => up$
|
|
4087
|
+
down: () => down$9,
|
|
4088
|
+
up: () => up$9
|
|
4089
4089
|
});
|
|
4090
4090
|
const LEGACY_DENORM_INDEXES = [
|
|
4091
4091
|
"idx_content_taxonomies_pub",
|
|
@@ -4099,7 +4099,7 @@ const LEGACY_DENORM_INDEXES = [
|
|
|
4099
4099
|
* and term group. Rows whose content table or content entry no longer exists
|
|
4100
4100
|
* are left untouched.
|
|
4101
4101
|
*/
|
|
4102
|
-
async function up$
|
|
4102
|
+
async function up$9(db) {
|
|
4103
4103
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
4104
4104
|
for (const tableName of tableNames) {
|
|
4105
4105
|
validateIdentifier(tableName, "content table name");
|
|
@@ -4131,13 +4131,13 @@ async function up$6(db) {
|
|
|
4131
4131
|
]).execute();
|
|
4132
4132
|
}
|
|
4133
4133
|
/** The collapsed per-locale rows cannot be reconstructed. */
|
|
4134
|
-
async function down$
|
|
4134
|
+
async function down$9(_db) {}
|
|
4135
4135
|
|
|
4136
4136
|
//#endregion
|
|
4137
4137
|
//#region src/database/migrations/069_collection_title_date_fields.ts
|
|
4138
4138
|
var _069_collection_title_date_fields_exports = /* @__PURE__ */ __exportAll({
|
|
4139
|
-
down: () => down$
|
|
4140
|
-
up: () => up$
|
|
4139
|
+
down: () => down$8,
|
|
4140
|
+
up: () => up$8
|
|
4141
4141
|
});
|
|
4142
4142
|
/**
|
|
4143
4143
|
* Migration: configurable title and date fields for collections
|
|
@@ -4150,7 +4150,7 @@ var _069_collection_title_date_fields_exports = /* @__PURE__ */ __exportAll({
|
|
|
4150
4150
|
* Column adds/drops are guarded by `columnExists`: D1 has no transactions, so a
|
|
4151
4151
|
* migration can partially apply without being recorded and later re-run.
|
|
4152
4152
|
*/
|
|
4153
|
-
async function up$
|
|
4153
|
+
async function up$8(db) {
|
|
4154
4154
|
if (!await columnExists(db, "_emdash_collections", "title_field")) await sql`
|
|
4155
4155
|
ALTER TABLE _emdash_collections
|
|
4156
4156
|
ADD COLUMN title_field TEXT
|
|
@@ -4160,7 +4160,7 @@ async function up$5(db) {
|
|
|
4160
4160
|
ADD COLUMN date_field TEXT
|
|
4161
4161
|
`.execute(db);
|
|
4162
4162
|
}
|
|
4163
|
-
async function down$
|
|
4163
|
+
async function down$8(db) {
|
|
4164
4164
|
if (await columnExists(db, "_emdash_collections", "date_field")) await sql`
|
|
4165
4165
|
ALTER TABLE _emdash_collections
|
|
4166
4166
|
DROP COLUMN date_field
|
|
@@ -4174,21 +4174,21 @@ async function down$5(db) {
|
|
|
4174
4174
|
//#endregion
|
|
4175
4175
|
//#region src/database/migrations/070_collection_routable.ts
|
|
4176
4176
|
var _070_collection_routable_exports = /* @__PURE__ */ __exportAll({
|
|
4177
|
-
down: () => down$
|
|
4178
|
-
up: () => up$
|
|
4177
|
+
down: () => down$7,
|
|
4178
|
+
up: () => up$7
|
|
4179
4179
|
});
|
|
4180
|
-
async function up$
|
|
4180
|
+
async function up$7(db) {
|
|
4181
4181
|
if (!await columnExists(db, "_emdash_collections", "routable")) await db.schema.alterTable("_emdash_collections").addColumn("routable", "integer", (col) => col.notNull().defaultTo(1)).execute();
|
|
4182
4182
|
}
|
|
4183
|
-
async function down$
|
|
4183
|
+
async function down$7(db) {
|
|
4184
4184
|
if (await columnExists(db, "_emdash_collections", "routable")) await db.schema.alterTable("_emdash_collections").dropColumn("routable").execute();
|
|
4185
4185
|
}
|
|
4186
4186
|
|
|
4187
4187
|
//#endregion
|
|
4188
4188
|
//#region src/database/migrations/071_restore_content_bylines_table.ts
|
|
4189
4189
|
var _071_restore_content_bylines_table_exports = /* @__PURE__ */ __exportAll({
|
|
4190
|
-
down: () => down$
|
|
4191
|
-
up: () => up$
|
|
4190
|
+
down: () => down$6,
|
|
4191
|
+
up: () => up$6
|
|
4192
4192
|
});
|
|
4193
4193
|
/**
|
|
4194
4194
|
* Restore `_emdash_content_bylines` where migration 040's SQLite rebuild
|
|
@@ -4201,7 +4201,7 @@ var _071_restore_content_bylines_table_exports = /* @__PURE__ */ __exportAll({
|
|
|
4201
4201
|
*
|
|
4202
4202
|
* The Postgres path of 040 alters the table in place, so this is a no-op there.
|
|
4203
4203
|
*/
|
|
4204
|
-
async function up$
|
|
4204
|
+
async function up$6(db) {
|
|
4205
4205
|
if (!isSqlite(db)) return;
|
|
4206
4206
|
if (!await tableExists(db, "_emdash_content_bylines")) {
|
|
4207
4207
|
if (!await tableExists(db, "_emdash_content_bylines_new")) return;
|
|
@@ -4214,21 +4214,21 @@ async function up$3(db) {
|
|
|
4214
4214
|
]).execute();
|
|
4215
4215
|
await db.schema.createIndex("idx_content_bylines_byline").ifNotExists().on("_emdash_content_bylines").column("byline_id").execute();
|
|
4216
4216
|
}
|
|
4217
|
-
async function down$
|
|
4217
|
+
async function down$6(_db) {}
|
|
4218
4218
|
|
|
4219
4219
|
//#endregion
|
|
4220
4220
|
//#region src/database/migrations/072_media_folders.ts
|
|
4221
4221
|
var _072_media_folders_exports = /* @__PURE__ */ __exportAll({
|
|
4222
|
-
down: () => down$
|
|
4223
|
-
up: () => up$
|
|
4222
|
+
down: () => down$5,
|
|
4223
|
+
up: () => up$5
|
|
4224
4224
|
});
|
|
4225
4225
|
const DUPLICATE_COLUMN_RE$1 = /(?:duplicate column|column .* already exists|already exists.*column)/i;
|
|
4226
|
-
async function up$
|
|
4226
|
+
async function up$5(db) {
|
|
4227
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
4228
|
await addFolderColumnIfMissing(db, () => db.schema.alterTable("media").addColumn("folder_id", "text", (col) => col.references("media_folders.id").onDelete("set null")).execute());
|
|
4229
4229
|
await db.schema.createIndex("idx_media_folder_id").ifNotExists().on("media").column("folder_id").execute();
|
|
4230
4230
|
}
|
|
4231
|
-
async function down$
|
|
4231
|
+
async function down$5(db) {
|
|
4232
4232
|
await db.schema.dropIndex("idx_media_folder_id").ifExists().execute();
|
|
4233
4233
|
if (await columnExists(db, "media", "folder_id")) await db.schema.alterTable("media").dropColumn("folder_id").execute();
|
|
4234
4234
|
await db.schema.dropTable("media_folders").ifExists().execute();
|
|
@@ -4265,15 +4265,15 @@ function deepErrorMessage$2(error) {
|
|
|
4265
4265
|
//#region src/database/migrations/073_media_focal_point.ts
|
|
4266
4266
|
var _073_media_focal_point_exports = /* @__PURE__ */ __exportAll({
|
|
4267
4267
|
addFocalColumnIfMissing: () => addFocalColumnIfMissing,
|
|
4268
|
-
down: () => down$
|
|
4269
|
-
up: () => up$
|
|
4268
|
+
down: () => down$4,
|
|
4269
|
+
up: () => up$4
|
|
4270
4270
|
});
|
|
4271
4271
|
const DUPLICATE_COLUMN_RE = /(?:duplicate column|column .* already exists|already exists.*column)/i;
|
|
4272
|
-
async function up$
|
|
4272
|
+
async function up$4(db) {
|
|
4273
4273
|
await addFocalColumnIfMissing(db, "focal_x", () => db.schema.alterTable("media").addColumn("focal_x", "real").execute());
|
|
4274
4274
|
await addFocalColumnIfMissing(db, "focal_y", () => db.schema.alterTable("media").addColumn("focal_y", "real").execute());
|
|
4275
4275
|
}
|
|
4276
|
-
async function down$
|
|
4276
|
+
async function down$4(db) {
|
|
4277
4277
|
if (await columnExists(db, "media", "focal_y")) await db.schema.alterTable("media").dropColumn("focal_y").execute();
|
|
4278
4278
|
if (await columnExists(db, "media", "focal_x")) await db.schema.alterTable("media").dropColumn("focal_x").execute();
|
|
4279
4279
|
}
|
|
@@ -4308,8 +4308,8 @@ function deepErrorMessage$1(error) {
|
|
|
4308
4308
|
//#endregion
|
|
4309
4309
|
//#region src/database/migrations/074_content_deleted_scheduled_index.ts
|
|
4310
4310
|
var _074_content_deleted_scheduled_index_exports = /* @__PURE__ */ __exportAll({
|
|
4311
|
-
down: () => down,
|
|
4312
|
-
up: () => up
|
|
4311
|
+
down: () => down$3,
|
|
4312
|
+
up: () => up$3
|
|
4313
4313
|
});
|
|
4314
4314
|
/**
|
|
4315
4315
|
* Migration: replace the single-column partial `scheduled_at` index on content
|
|
@@ -4331,7 +4331,7 @@ var _074_content_deleted_scheduled_index_exports = /* @__PURE__ */ __exportAll({
|
|
|
4331
4331
|
* identifier limit for long collection slugs. Keep it identical to the name in
|
|
4332
4332
|
* `schema/registry.ts`.
|
|
4333
4333
|
*/
|
|
4334
|
-
async function up(db) {
|
|
4334
|
+
async function up$3(db) {
|
|
4335
4335
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
4336
4336
|
for (const tableName of tableNames) {
|
|
4337
4337
|
await sql`
|
|
@@ -4342,7 +4342,7 @@ async function up(db) {
|
|
|
4342
4342
|
await sql`DROP INDEX IF EXISTS ${sql.ref(`idx_${tableName}_scheduled`)}`.execute(db);
|
|
4343
4343
|
}
|
|
4344
4344
|
}
|
|
4345
|
-
async function down(db) {
|
|
4345
|
+
async function down$3(db) {
|
|
4346
4346
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
4347
4347
|
for (const tableName of tableNames) {
|
|
4348
4348
|
await sql`
|
|
@@ -4354,6 +4354,127 @@ async function down(db) {
|
|
|
4354
4354
|
}
|
|
4355
4355
|
}
|
|
4356
4356
|
|
|
4357
|
+
//#endregion
|
|
4358
|
+
//#region src/database/migrations/075_entry_edit_locks.ts
|
|
4359
|
+
var _075_entry_edit_locks_exports = /* @__PURE__ */ __exportAll({
|
|
4360
|
+
down: () => down$2,
|
|
4361
|
+
up: () => up$2
|
|
4362
|
+
});
|
|
4363
|
+
/**
|
|
4364
|
+
* Timestamps here carry no column default: `datetime('now')` renders a
|
|
4365
|
+
* space-separated shape that would not sort against the ISO-8601 values the
|
|
4366
|
+
* lease predicate compares as strings.
|
|
4367
|
+
*/
|
|
4368
|
+
async function up$2(db) {
|
|
4369
|
+
await db.schema.createTable("_emdash_entry_locks").ifNotExists().addColumn("collection", "text", (col) => col.notNull()).addColumn("entry_id", "text", (col) => col.notNull()).addColumn("user_id", "text", (col) => col.notNull().references("users.id").onDelete("cascade")).addColumn("token", "text", (col) => col.notNull()).addColumn("acquired_at", "text", (col) => col.notNull()).addColumn("expires_at", "text", (col) => col.notNull()).addPrimaryKeyConstraint("pk_emdash_entry_locks", ["collection", "entry_id"]).execute();
|
|
4370
|
+
await db.schema.createIndex("idx_emdash_entry_locks_user_id").ifNotExists().on("_emdash_entry_locks").column("user_id").execute();
|
|
4371
|
+
if (!await columnExists(db, "_emdash_collections", "edit_locking")) await db.schema.alterTable("_emdash_collections").addColumn("edit_locking", "integer", (col) => col.notNull().defaultTo(1)).execute();
|
|
4372
|
+
}
|
|
4373
|
+
async function down$2(db) {
|
|
4374
|
+
if (await columnExists(db, "_emdash_collections", "edit_locking")) await db.schema.alterTable("_emdash_collections").dropColumn("edit_locking").execute();
|
|
4375
|
+
await db.schema.dropIndex("idx_emdash_entry_locks_user_id").ifExists().execute();
|
|
4376
|
+
await db.schema.dropTable("_emdash_entry_locks").ifExists().execute();
|
|
4377
|
+
}
|
|
4378
|
+
|
|
4379
|
+
//#endregion
|
|
4380
|
+
//#region src/database/migrations/076_collection_nav_group.ts
|
|
4381
|
+
var _076_collection_nav_group_exports = /* @__PURE__ */ __exportAll({
|
|
4382
|
+
down: () => down$1,
|
|
4383
|
+
up: () => up$1
|
|
4384
|
+
});
|
|
4385
|
+
/**
|
|
4386
|
+
* Migration: group collections into admin sidebar folders.
|
|
4387
|
+
*
|
|
4388
|
+
* Adds `nav_group` to `_emdash_collections`. Collections sharing a group
|
|
4389
|
+
* render under one collapsible folder in the admin sidebar; NULL keeps the
|
|
4390
|
+
* collection inline.
|
|
4391
|
+
*/
|
|
4392
|
+
async function up$1(db) {
|
|
4393
|
+
if (!await columnExists(db, "_emdash_collections", "nav_group")) await db.schema.alterTable("_emdash_collections").addColumn("nav_group", "text").execute();
|
|
4394
|
+
}
|
|
4395
|
+
async function down$1(db) {
|
|
4396
|
+
if (await columnExists(db, "_emdash_collections", "nav_group")) await db.schema.alterTable("_emdash_collections").dropColumn("nav_group").execute();
|
|
4397
|
+
}
|
|
4398
|
+
|
|
4399
|
+
//#endregion
|
|
4400
|
+
//#region src/database/migrations/077_plugin_storage_revisions.ts
|
|
4401
|
+
var _077_plugin_storage_revisions_exports = /* @__PURE__ */ __exportAll({
|
|
4402
|
+
down: () => down,
|
|
4403
|
+
up: () => up
|
|
4404
|
+
});
|
|
4405
|
+
const TABLES = [{
|
|
4406
|
+
name: "options",
|
|
4407
|
+
keys: ["name"]
|
|
4408
|
+
}, {
|
|
4409
|
+
name: "_plugin_storage",
|
|
4410
|
+
keys: [
|
|
4411
|
+
"plugin_id",
|
|
4412
|
+
"collection",
|
|
4413
|
+
"id"
|
|
4414
|
+
]
|
|
4415
|
+
}];
|
|
4416
|
+
const DUPLICATE_COLUMN_REGEX = /(?:duplicate column|column .* already exists|already exists.*column)/i;
|
|
4417
|
+
async function up(db) {
|
|
4418
|
+
for (const table of TABLES) {
|
|
4419
|
+
if (await columnExists(db, table.name, "revision")) continue;
|
|
4420
|
+
try {
|
|
4421
|
+
await db.schema.alterTable(table.name).addColumn("revision", "text", (column) => column.notNull().defaultTo("0")).execute();
|
|
4422
|
+
} catch (error) {
|
|
4423
|
+
if (isDuplicateColumnError(error) && await columnExists(db, table.name, "revision")) continue;
|
|
4424
|
+
throw error;
|
|
4425
|
+
}
|
|
4426
|
+
}
|
|
4427
|
+
if (isPostgres(db)) {
|
|
4428
|
+
await sql`
|
|
4429
|
+
CREATE OR REPLACE FUNCTION emdash_plugin_storage_assign_revision()
|
|
4430
|
+
RETURNS trigger
|
|
4431
|
+
LANGUAGE plpgsql
|
|
4432
|
+
AS $$
|
|
4433
|
+
BEGIN
|
|
4434
|
+
IF TG_OP = 'INSERT' THEN
|
|
4435
|
+
IF NEW.revision = '0' THEN
|
|
4436
|
+
NEW.revision := gen_random_uuid()::text;
|
|
4437
|
+
END IF;
|
|
4438
|
+
ELSIF NEW.revision = '0' OR NEW.revision = OLD.revision THEN
|
|
4439
|
+
NEW.revision := gen_random_uuid()::text;
|
|
4440
|
+
END IF;
|
|
4441
|
+
RETURN NEW;
|
|
4442
|
+
END;
|
|
4443
|
+
$$
|
|
4444
|
+
`.execute(db);
|
|
4445
|
+
for (const table of TABLES) await sql`
|
|
4446
|
+
CREATE OR REPLACE TRIGGER ${sql.ref(`emdash_${table.name}_revision`)}
|
|
4447
|
+
BEFORE INSERT OR UPDATE ON ${sql.ref(table.name)}
|
|
4448
|
+
FOR EACH ROW EXECUTE FUNCTION emdash_plugin_storage_assign_revision()
|
|
4449
|
+
`.execute(db);
|
|
4450
|
+
} else for (const table of TABLES) {
|
|
4451
|
+
const rowKey = sql.join(table.keys.map((key) => sql`${sql.ref(key)} = ${sql.ref(`NEW.${key}`)}`), sql` AND `);
|
|
4452
|
+
await sql`
|
|
4453
|
+
CREATE TRIGGER IF NOT EXISTS ${sql.ref(`emdash_${table.name}_revision_insert`)}
|
|
4454
|
+
AFTER INSERT ON ${sql.ref(table.name)}
|
|
4455
|
+
WHEN NEW.revision = '0'
|
|
4456
|
+
BEGIN
|
|
4457
|
+
UPDATE ${sql.ref(table.name)} SET revision = lower(hex(randomblob(16)))
|
|
4458
|
+
WHERE ${rowKey} AND revision = NEW.revision;
|
|
4459
|
+
END
|
|
4460
|
+
`.execute(db);
|
|
4461
|
+
await sql`
|
|
4462
|
+
CREATE TRIGGER IF NOT EXISTS ${sql.ref(`emdash_${table.name}_revision_update`)}
|
|
4463
|
+
AFTER UPDATE ON ${sql.ref(table.name)}
|
|
4464
|
+
WHEN NEW.revision = '0' OR NEW.revision = OLD.revision
|
|
4465
|
+
BEGIN
|
|
4466
|
+
UPDATE ${sql.ref(table.name)} SET revision = lower(hex(randomblob(16)))
|
|
4467
|
+
WHERE ${rowKey} AND revision = NEW.revision;
|
|
4468
|
+
END
|
|
4469
|
+
`.execute(db);
|
|
4470
|
+
}
|
|
4471
|
+
}
|
|
4472
|
+
function isDuplicateColumnError(error) {
|
|
4473
|
+
if (!(error instanceof Error)) return false;
|
|
4474
|
+
return DUPLICATE_COLUMN_REGEX.test(error.message) || isDuplicateColumnError(error.cause);
|
|
4475
|
+
}
|
|
4476
|
+
async function down(_db) {}
|
|
4477
|
+
|
|
4357
4478
|
//#endregion
|
|
4358
4479
|
//#region src/database/migrations/runner.ts
|
|
4359
4480
|
const MIGRATIONS = Object.freeze({
|
|
@@ -4429,7 +4550,10 @@ const MIGRATIONS = Object.freeze({
|
|
|
4429
4550
|
"071_restore_content_bylines_table": _071_restore_content_bylines_table_exports,
|
|
4430
4551
|
"072_media_folders": _072_media_folders_exports,
|
|
4431
4552
|
"073_media_focal_point": _073_media_focal_point_exports,
|
|
4432
|
-
"074_content_deleted_scheduled_index": _074_content_deleted_scheduled_index_exports
|
|
4553
|
+
"074_content_deleted_scheduled_index": _074_content_deleted_scheduled_index_exports,
|
|
4554
|
+
"075_entry_edit_locks": _075_entry_edit_locks_exports,
|
|
4555
|
+
"076_collection_nav_group": _076_collection_nav_group_exports,
|
|
4556
|
+
"077_plugin_storage_revisions": _077_plugin_storage_revisions_exports
|
|
4433
4557
|
});
|
|
4434
4558
|
/** Ordered names from the statically registered migration set. */
|
|
4435
4559
|
const MIGRATION_NAMES = Object.freeze(Object.keys(MIGRATIONS));
|
|
@@ -4673,4 +4797,4 @@ async function rollbackMigration(db, options) {
|
|
|
4673
4797
|
|
|
4674
4798
|
//#endregion
|
|
4675
4799
|
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 };
|
|
4676
|
-
//# sourceMappingURL=runner-
|
|
4800
|
+
//# sourceMappingURL=runner-nEzvnogG.mjs.map
|