emdash 0.26.0 → 0.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{adapters-DAAjOID4.d.mts → adapters-hUy8vOB-.d.mts} +1 -1
- package/dist/{adapters-DAAjOID4.d.mts.map → adapters-hUy8vOB-.d.mts.map} +1 -1
- package/dist/{allowed-origins-D5FxMUo8.mjs → allowed-origins-CRsJ6BPM.mjs} +2 -2
- package/dist/{allowed-origins-D5FxMUo8.mjs.map → allowed-origins-CRsJ6BPM.mjs.map} +1 -1
- package/dist/api/route-utils.d.mts +3 -3
- package/dist/api/route-utils.mjs +17 -16
- package/dist/api/route-utils.mjs.map +1 -1
- package/dist/api/schemas/index.d.mts +1 -1
- package/dist/api/schemas/index.mjs +3 -3
- package/dist/{api-BMfveMoB.mjs → api-BFURZn1i.mjs} +104 -38
- package/dist/api-BFURZn1i.mjs.map +1 -0
- package/dist/{api-tokens-D6ppjIVi.mjs → api-tokens-DvqeZmVq.mjs} +2 -2
- package/dist/{api-tokens-D6ppjIVi.mjs.map → api-tokens-DvqeZmVq.mjs.map} +1 -1
- package/dist/{apply--IVNSdXn.mjs → apply-Bu-8nYHL.mjs} +113 -76
- package/dist/apply-Bu-8nYHL.mjs.map +1 -0
- package/dist/astro/index.d.mts +12 -11
- package/dist/astro/index.d.mts.map +1 -1
- package/dist/astro/index.mjs +13 -5
- package/dist/astro/index.mjs.map +1 -1
- package/dist/astro/middleware/auth.d.mts +10 -9
- package/dist/astro/middleware/auth.d.mts.map +1 -1
- package/dist/astro/middleware/auth.mjs +52 -12
- package/dist/astro/middleware/auth.mjs.map +1 -1
- package/dist/astro/middleware/redirect.mjs +5 -5
- package/dist/astro/middleware/request-context.mjs +2 -2
- package/dist/astro/middleware/setup.mjs +1 -1
- package/dist/astro/middleware.d.mts +2 -9
- package/dist/astro/middleware.d.mts.map +1 -1
- package/dist/astro/middleware.mjs +125 -71
- 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 +4 -4
- package/dist/astro/routes/api/admin/api-tokens/index.mjs +5 -5
- package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +4 -4
- package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +8 -8
- package/dist/astro/routes/api/admin/byline-fields/index.mjs +8 -8
- package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +8 -8
- package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +14 -14
- package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +14 -14
- package/dist/astro/routes/api/admin/bylines/index.mjs +14 -14
- package/dist/astro/routes/api/admin/comments/_id_/status.mjs +12 -12
- package/dist/astro/routes/api/admin/comments/_id_.mjs +6 -6
- package/dist/astro/routes/api/admin/comments/bulk.mjs +10 -10
- package/dist/astro/routes/api/admin/comments/counts.mjs +6 -6
- package/dist/astro/routes/api/admin/comments/index.mjs +10 -10
- package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +4 -4
- package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +3 -3
- package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +4 -4
- package/dist/astro/routes/api/admin/oauth-clients/index.mjs +4 -4
- package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +38 -37
- package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +38 -37
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +37 -36
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +36 -35
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +36 -35
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/index.mjs +37 -36
- package/dist/astro/routes/api/admin/plugins/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +3 -3
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +36 -35
- 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 +36 -35
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +36 -35
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +36 -35
- 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 +37 -36
- package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +36 -35
- package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/install.mjs +37 -36
- package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/updates.mjs +36 -35
- package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +36 -35
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +3 -3
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +36 -35
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/users/_id_/disable.mjs +2 -2
- package/dist/astro/routes/api/admin/users/_id_/enable.mjs +2 -2
- 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 +5 -5
- package/dist/astro/routes/api/auth/invite/accept.mjs +2 -2
- package/dist/astro/routes/api/auth/invite/complete.mjs +10 -10
- package/dist/astro/routes/api/auth/invite/index.mjs +7 -7
- package/dist/astro/routes/api/auth/invite/register-options.mjs +9 -9
- package/dist/astro/routes/api/auth/logout.mjs +3 -3
- package/dist/astro/routes/api/auth/magic-link/send.mjs +9 -9
- package/dist/astro/routes/api/auth/magic-link/verify.mjs +3 -3
- package/dist/astro/routes/api/auth/me.mjs +7 -7
- package/dist/astro/routes/api/auth/mode.mjs +1 -1
- package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +3 -3
- 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 +2 -2
- package/dist/astro/routes/api/auth/passkey/options.mjs +11 -11
- package/dist/astro/routes/api/auth/passkey/register/options.mjs +9 -9
- package/dist/astro/routes/api/auth/passkey/register/verify.mjs +10 -10
- package/dist/astro/routes/api/auth/passkey/verify.mjs +10 -10
- package/dist/astro/routes/api/auth/signup/complete.mjs +10 -10
- package/dist/astro/routes/api/auth/signup/request.mjs +9 -9
- package/dist/astro/routes/api/auth/signup/verify.mjs +2 -2
- package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +13 -13
- package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +12 -12
- package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +10 -10
- package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +7 -7
- package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +7 -7
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +13 -13
- package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/_id_.mjs +7 -7
- package/dist/astro/routes/api/content/_collection_/authors.mjs +3 -3
- package/dist/astro/routes/api/content/_collection_/index.mjs +7 -7
- package/dist/astro/routes/api/content/_collection_/trash.mjs +7 -7
- package/dist/astro/routes/api/dashboard.mjs +8 -8
- package/dist/astro/routes/api/dev/emails.mjs +3 -3
- package/dist/astro/routes/api/import/probe.d.mts +3 -3
- package/dist/astro/routes/api/import/probe.mjs +19 -11
- package/dist/astro/routes/api/import/probe.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress/analyze.mjs +3 -3
- package/dist/astro/routes/api/import/wordpress/execute.d.mts +11 -40
- package/dist/astro/routes/api/import/wordpress/execute.d.mts.map +1 -1
- package/dist/astro/routes/api/import/wordpress/execute.mjs +12 -407
- package/dist/astro/routes/api/import/wordpress/execute.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress/media.d.mts +10 -9
- package/dist/astro/routes/api/import/wordpress/media.d.mts.map +1 -1
- package/dist/astro/routes/api/import/wordpress/media.mjs +9 -9
- package/dist/astro/routes/api/import/wordpress/prepare.mjs +9 -9
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +19 -1
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts.map +1 -1
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +97 -79
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +19 -11
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs.map +1 -1
- package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +40 -2
- package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts.map +1 -1
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +519 -39
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs.map +1 -1
- package/dist/astro/routes/api/manifest.d.mts.map +1 -1
- package/dist/astro/routes/api/manifest.mjs +14 -5
- package/dist/astro/routes/api/manifest.mjs.map +1 -1
- package/dist/astro/routes/api/mcp.mjs +39 -39
- package/dist/astro/routes/api/media/_id_/confirm.mjs +7 -7
- package/dist/astro/routes/api/media/_id_.mjs +7 -7
- package/dist/astro/routes/api/media/file/_...key_.mjs +2 -2
- package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +3 -3
- package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +3 -3
- package/dist/astro/routes/api/media/providers/index.mjs +3 -3
- package/dist/astro/routes/api/media/upload-url.mjs +8 -8
- package/dist/astro/routes/api/media.mjs +9 -9
- 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 +6 -6
- package/dist/astro/routes/api/oauth/device/code.mjs +9 -9
- package/dist/astro/routes/api/oauth/device/token.mjs +8 -8
- package/dist/astro/routes/api/oauth/register.mjs +3 -3
- package/dist/astro/routes/api/oauth/token/refresh.mjs +6 -6
- package/dist/astro/routes/api/oauth/token/revoke.mjs +6 -6
- package/dist/astro/routes/api/oauth/token.mjs +6 -6
- package/dist/astro/routes/api/openapi.json.mjs +4 -4
- package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +4 -4
- package/dist/astro/routes/api/redirects/404s/index.mjs +9 -9
- package/dist/astro/routes/api/redirects/404s/summary.mjs +9 -9
- package/dist/astro/routes/api/redirects/_id_.mjs +10 -10
- package/dist/astro/routes/api/redirects/index.mjs +10 -10
- package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +3 -3
- package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +3 -3
- package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +36 -35
- 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 +36 -35
- 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 +36 -35
- package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +36 -35
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/index.mjs +36 -35
- package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/index.mjs +7 -6
- package/dist/astro/routes/api/schema/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs +36 -35
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/schema/orphans/index.mjs +36 -35
- package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
- package/dist/astro/routes/api/search/enable.mjs +10 -10
- package/dist/astro/routes/api/search/index.mjs +9 -9
- package/dist/astro/routes/api/search/rebuild.mjs +10 -10
- package/dist/astro/routes/api/search/stats.mjs +6 -6
- package/dist/astro/routes/api/search/suggest.mjs +9 -9
- package/dist/astro/routes/api/sections/_slug_.mjs +9 -9
- package/dist/astro/routes/api/sections/index.mjs +9 -9
- package/dist/astro/routes/api/settings/email.mjs +4 -4
- package/dist/astro/routes/api/settings.mjs +12 -12
- package/dist/astro/routes/api/setup/admin-verify.mjs +11 -11
- package/dist/astro/routes/api/setup/admin.mjs +10 -10
- package/dist/astro/routes/api/setup/dev-bypass.d.mts.map +1 -1
- package/dist/astro/routes/api/setup/dev-bypass.mjs +28 -25
- 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 +26 -25
- package/dist/astro/routes/api/setup/index.mjs.map +1 -1
- package/dist/astro/routes/api/setup/status.mjs +4 -4
- package/dist/astro/routes/api/snapshot.mjs +6 -6
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +13 -13
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +13 -13
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +13 -13
- package/dist/astro/routes/api/taxonomies/index.mjs +13 -13
- package/dist/astro/routes/api/themes/preview.mjs +5 -5
- package/dist/astro/routes/api/typegen.mjs +5 -5
- package/dist/astro/routes/api/well-known/auth.mjs +1 -1
- 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 +7 -7
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +9 -9
- package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +9 -9
- package/dist/astro/routes/api/widget-areas/_name_.mjs +5 -5
- package/dist/astro/routes/api/widget-areas/index.mjs +9 -9
- package/dist/astro/routes/api/widget-components.mjs +3 -3
- package/dist/astro/routes/robots.txt.mjs +6 -6
- package/dist/astro/routes/sitemap-_collection_.xml.mjs +9 -9
- package/dist/astro/routes/sitemap.xml.mjs +7 -7
- package/dist/astro/types.d.mts +14 -12
- 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-BZnOGJFo.mjs → authorize-Dz88F_Fw.mjs} +2 -2
- package/dist/{authorize-BZnOGJFo.mjs.map → authorize-Dz88F_Fw.mjs.map} +1 -1
- package/dist/{byline-LL8lyqdb.mjs → byline-Bm8ZgUP9.mjs} +6 -6
- package/dist/{byline-LL8lyqdb.mjs.map → byline-Bm8ZgUP9.mjs.map} +1 -1
- package/dist/{byline-fields-eyJMblSr.mjs → byline-fields-2Lp5Hbgf.mjs} +18 -3
- package/dist/byline-fields-2Lp5Hbgf.mjs.map +1 -0
- package/dist/{byline-fields-DaMKzkhO.mjs → byline-fields-CIx_GuN4.mjs} +1 -1
- package/dist/{byline-fields-DaMKzkhO.mjs.map → byline-fields-CIx_GuN4.mjs.map} +1 -1
- package/dist/{byline-fields-KD3JFRuH.d.mts → byline-fields-Cgrt9-aL.d.mts} +18 -3
- package/dist/{byline-fields-KD3JFRuH.d.mts.map → byline-fields-Cgrt9-aL.d.mts.map} +1 -1
- package/dist/{bylines-BmJ7Vg7J.mjs → bylines-6tm9mgQb.mjs} +4 -4
- package/dist/{bylines-BmJ7Vg7J.mjs.map → bylines-6tm9mgQb.mjs.map} +1 -1
- package/dist/{bylines-DE47vP8d.mjs → bylines-Woq87129.mjs} +6 -6
- package/dist/{bylines-DE47vP8d.mjs.map → bylines-Woq87129.mjs.map} +1 -1
- package/dist/{cache-D9jF5bYw.mjs → cache-CEBAZjir.mjs} +2 -2
- package/dist/{cache-D9jF5bYw.mjs.map → cache-CEBAZjir.mjs.map} +1 -1
- package/dist/{challenge-store-LhiqMccz.mjs → challenge-store-anhwVER0.mjs} +1 -1
- package/dist/{challenge-store-LhiqMccz.mjs.map → challenge-store-anhwVER0.mjs.map} +1 -1
- package/dist/{chunks-OCG163rN.mjs → chunks-B2isWQhr.mjs} +2 -2
- package/dist/{chunks-OCG163rN.mjs.map → chunks-B2isWQhr.mjs.map} +1 -1
- package/dist/cli/index.mjs +23 -22
- package/dist/cli/index.mjs.map +1 -1
- package/dist/client/cf-access.d.mts +1 -1
- package/dist/client/index.d.mts +1 -1
- package/dist/client/index.mjs +2 -2
- package/dist/{comment-D9BLDpZI.mjs → comment-CzeatwBV.mjs} +3 -3
- package/dist/{comment-D9BLDpZI.mjs.map → comment-CzeatwBV.mjs.map} +1 -1
- package/dist/{comment-reaction-Drl9SkNu.mjs → comment-reaction-Cj9QJY7I.mjs} +2 -2
- package/dist/{comment-reaction-Drl9SkNu.mjs.map → comment-reaction-Cj9QJY7I.mjs.map} +1 -1
- package/dist/{comments-BjJ9SKGU.mjs → comments-BLE-jv5k.mjs} +3 -3
- package/dist/{comments-BjJ9SKGU.mjs.map → comments-BLE-jv5k.mjs.map} +1 -1
- package/dist/{components-CYt4uVK9.mjs → components-B_sATNUc.mjs} +1 -1
- package/dist/{components-CYt4uVK9.mjs.map → components-B_sATNUc.mjs.map} +1 -1
- package/dist/{content-ncUWWjna.mjs → content-DhgEth4k.mjs} +4 -4
- package/dist/{content-ncUWWjna.mjs.map → content-DhgEth4k.mjs.map} +1 -1
- package/dist/content-refresh-CA4uKwzH.mjs +1531 -0
- package/dist/content-refresh-CA4uKwzH.mjs.map +1 -0
- package/dist/{context-C_g-iJVA.mjs → context-CUsR9dXL.mjs} +76 -54
- package/dist/context-CUsR9dXL.mjs.map +1 -0
- package/dist/{cron-C5LVoNmP.mjs → cron-v4FTEFR_.mjs} +1 -1
- package/dist/{cron-C5LVoNmP.mjs.map → cron-v4FTEFR_.mjs.map} +1 -1
- package/dist/{dashboard-CotyqQrW.mjs → dashboard-EvEKF5en.mjs} +4 -4
- package/dist/{dashboard-CotyqQrW.mjs.map → dashboard-EvEKF5en.mjs.map} +1 -1
- package/dist/db/index.d.mts +3 -3
- package/dist/db/index.mjs +1 -1
- package/dist/db/libsql.d.mts +1 -1
- package/dist/db/postgres.d.mts +1 -1
- package/dist/db/sqlite.d.mts +1 -1
- package/dist/{default-CeRG-Ot4.mjs → default-CM_D83Mg.mjs} +1 -1
- package/dist/{default-CeRG-Ot4.mjs.map → default-CM_D83Mg.mjs.map} +1 -1
- package/dist/{device-flow-DENDCQ9F.mjs → device-flow-CfGP18Uw.mjs} +4 -4
- package/dist/{device-flow-DENDCQ9F.mjs.map → device-flow-CfGP18Uw.mjs.map} +1 -1
- package/dist/{email-console-DJP32ucW.mjs → email-console-CIf4Lfvv.mjs} +1 -1
- package/dist/{email-console-DJP32ucW.mjs.map → email-console-CIf4Lfvv.mjs.map} +1 -1
- package/dist/{error-rVGiqWDt.mjs → error-CkAseSqZ.mjs} +2 -2
- package/dist/{error-rVGiqWDt.mjs.map → error-CkAseSqZ.mjs.map} +1 -1
- package/dist/{escape-Bjio4ZsM.mjs → escape-DqD0aCKu.mjs} +1 -1
- package/dist/{escape-Bjio4ZsM.mjs.map → escape-DqD0aCKu.mjs.map} +1 -1
- package/dist/{field-defs-cache-ljXzJCfc.mjs → field-defs-cache-WUI88LX5.mjs} +2 -2
- package/dist/{field-defs-cache-ljXzJCfc.mjs.map → field-defs-cache-WUI88LX5.mjs.map} +1 -1
- package/dist/{fts-manager-BbCCbEKA.mjs → fts-manager-BbFaF_V8.mjs} +2 -2
- package/dist/{fts-manager-BbCCbEKA.mjs.map → fts-manager-BbFaF_V8.mjs.map} +1 -1
- package/dist/{import-Bb1T9WJS.mjs → import-fYLf14Co.mjs} +514 -25
- package/dist/import-fYLf14Co.mjs.map +1 -0
- package/dist/{index-BRNabKrx.d.mts → index-B9sIxwe4.d.mts} +2420 -2379
- package/dist/index-B9sIxwe4.d.mts.map +1 -0
- package/dist/{index-Dt0OKJB4.d.mts → index-Bm-Gy8Mh.d.mts} +25 -4
- package/dist/index-Bm-Gy8Mh.d.mts.map +1 -0
- package/dist/index.d.mts +18 -17
- package/dist/index.mjs +54 -53
- package/dist/{load-DMjXghbZ.mjs → load-Djn3HWQS.mjs} +2 -2
- package/dist/{load-DMjXghbZ.mjs.map → load-Djn3HWQS.mjs.map} +1 -1
- package/dist/{loader-BA_zhkS_.mjs → loader-CB6YHeul.mjs} +6 -5
- package/dist/loader-CB6YHeul.mjs.map +1 -0
- package/dist/{manifest-schema-kPGX7VS-.mjs → manifest-schema-BHlgZM1W.mjs} +1 -1
- package/dist/{manifest-schema-kPGX7VS-.mjs.map → manifest-schema-BHlgZM1W.mjs.map} +1 -1
- package/dist/media/index.d.mts +1 -1
- package/dist/media/local-runtime.d.mts +12 -11
- package/dist/media/local-runtime.d.mts.map +1 -1
- package/dist/media/local-runtime.mjs +5 -5
- package/dist/{media-C5t_eCnk.mjs → media-BrXIaMFN.mjs} +2 -2
- package/dist/{media-C5t_eCnk.mjs.map → media-BrXIaMFN.mjs.map} +1 -1
- package/dist/{media-allowlist-Du8t1u6a.mjs → media-allowlist-CRHEeJ_i.mjs} +1 -1
- package/dist/{media-allowlist-Du8t1u6a.mjs.map → media-allowlist-CRHEeJ_i.mjs.map} +1 -1
- package/dist/{media-url-O4rm9-SQ.mjs → media-url-CKi5XSw4.mjs} +1 -1
- package/dist/{media-url-O4rm9-SQ.mjs.map → media-url-CKi5XSw4.mjs.map} +1 -1
- package/dist/{menus-CBb6UrMU.mjs → menus-Cfivc2Ad.mjs} +3 -3
- package/dist/{menus-CBb6UrMU.mjs.map → menus-Cfivc2Ad.mjs.map} +1 -1
- package/dist/{menus-CYH09a41.mjs → menus-CsZ2ZEK2.mjs} +16 -12
- package/dist/{menus-CYH09a41.mjs.map → menus-CsZ2ZEK2.mjs.map} +1 -1
- package/dist/{mode-BB0F8xTC.mjs → mode-BM9QgEmt.mjs} +1 -1
- package/dist/{mode-BB0F8xTC.mjs.map → mode-BM9QgEmt.mjs.map} +1 -1
- package/dist/{oauth-authorization-CsvzIp_F.mjs → oauth-authorization-CXWkIGT4.mjs} +4 -4
- package/dist/{oauth-authorization-CsvzIp_F.mjs.map → oauth-authorization-CXWkIGT4.mjs.map} +1 -1
- package/dist/{oauth-clients-C9SYwEbZ.mjs → oauth-clients-BmTI5rsl.mjs} +1 -1
- package/dist/{oauth-clients-C9SYwEbZ.mjs.map → oauth-clients-BmTI5rsl.mjs.map} +1 -1
- package/dist/{oauth-state-store---zrApfB.mjs → oauth-state-store-YLFLcH5F.mjs} +1 -1
- package/dist/{oauth-state-store---zrApfB.mjs.map → oauth-state-store-YLFLcH5F.mjs.map} +1 -1
- package/dist/{oauth-user-lookup-SHsWRlG9.mjs → oauth-user-lookup-Bsc_GsX-.mjs} +1 -1
- package/dist/{oauth-user-lookup-SHsWRlG9.mjs.map → oauth-user-lookup-Bsc_GsX-.mjs.map} +1 -1
- package/dist/object-cache/memory.d.mts +1 -1
- package/dist/{object-cache-CHbHv83-.mjs → object-cache-Bok5j2ae.mjs} +43 -3
- package/dist/object-cache-Bok5j2ae.mjs.map +1 -0
- package/dist/{options-41nCWqi9.d.mts → options-iMpRRxIe.d.mts} +3 -3
- package/dist/{options-41nCWqi9.d.mts.map → options-iMpRRxIe.d.mts.map} +1 -1
- package/dist/page/index.d.mts +2 -2
- package/dist/{parse-BwAdS7FZ.mjs → parse-GmjecGct.mjs} +2 -2
- package/dist/{parse-BwAdS7FZ.mjs.map → parse-GmjecGct.mjs.map} +1 -1
- package/dist/{passkey-config-C0YfSBko.mjs → passkey-config-De0ahnRg.mjs} +1 -1
- package/dist/{passkey-config-C0YfSBko.mjs.map → passkey-config-De0ahnRg.mjs.map} +1 -1
- package/dist/{placeholder-Cuce9U-m.d.mts → placeholder-BSKwzRe4.d.mts} +1 -1
- package/dist/{placeholder-Cuce9U-m.d.mts.map → placeholder-BSKwzRe4.d.mts.map} +1 -1
- package/dist/plugin-types.d.mts +1 -1
- package/dist/plugin-utils.d.mts +10 -9
- package/dist/plugin-utils.d.mts.map +1 -1
- package/dist/plugins/adapt-sandbox-entry.d.mts +10 -9
- package/dist/plugins/adapt-sandbox-entry.d.mts.map +1 -1
- package/dist/plugins/adapt-sandbox-entry.mjs +2 -2
- package/dist/{portable-text-BICg8bTk.mjs → portable-text-cCa0cGV6.mjs} +1 -1
- package/dist/{portable-text-BICg8bTk.mjs.map → portable-text-cCa0cGV6.mjs.map} +1 -1
- package/dist/{preview-DKGCt2_p.mjs → preview-SSXNVPAC.mjs} +2 -2
- package/dist/{preview-DKGCt2_p.mjs.map → preview-SSXNVPAC.mjs.map} +1 -1
- package/dist/{public-url-CTVqgMmg.mjs → public-url-Danv47cS.mjs} +1 -1
- package/dist/{public-url-CTVqgMmg.mjs.map → public-url-Danv47cS.mjs.map} +1 -1
- package/dist/{query-BpQb-blG.mjs → query-ByGq6ver.mjs} +14 -14
- package/dist/{query-BpQb-blG.mjs.map → query-ByGq6ver.mjs.map} +1 -1
- package/dist/{rate-limit-Dap6HMNM.mjs → rate-limit-C_Lf63Dd.mjs} +2 -2
- package/dist/{rate-limit-Dap6HMNM.mjs.map → rate-limit-C_Lf63Dd.mjs.map} +1 -1
- package/dist/{redirect-CS-PHtNh.mjs → redirect-CoW3G-0U.mjs} +1 -1
- package/dist/{redirect-CS-PHtNh.mjs.map → redirect-CoW3G-0U.mjs.map} +1 -1
- package/dist/{redirect-_M0trWoo.mjs → redirect-IyfNirgS.mjs} +2 -2
- package/dist/{redirect-_M0trWoo.mjs.map → redirect-IyfNirgS.mjs.map} +1 -1
- package/dist/{redirects-w0V9vj_j.mjs → redirects-Bs1g42Ri.mjs} +4 -4
- package/dist/{redirects-w0V9vj_j.mjs.map → redirects-Bs1g42Ri.mjs.map} +1 -1
- package/dist/{redirects-Dcbuisoj.mjs → redirects-DXEXBAII.mjs} +2 -2
- package/dist/{redirects-Dcbuisoj.mjs.map → redirects-DXEXBAII.mjs.map} +1 -1
- package/dist/{registry-g8yYt4cC.mjs → registry-B65mUtPa.mjs} +122 -79
- package/dist/registry-B65mUtPa.mjs.map +1 -0
- package/dist/{request-meta-CmS1tDFf.mjs → request-meta-DbvXaAvU.mjs} +2 -2
- package/dist/{request-meta-CmS1tDFf.mjs.map → request-meta-DbvXaAvU.mjs.map} +1 -1
- package/dist/{resolve-C7I0qiR0.mjs → resolve-DR3wqMTy.mjs} +1 -1
- package/dist/{resolve-C7I0qiR0.mjs.map → resolve-DR3wqMTy.mjs.map} +1 -1
- package/dist/{runner-BbR3DfrL.d.mts → runner-DvFWoz8-.d.mts} +2 -2
- package/dist/{runner-BbR3DfrL.d.mts.map → runner-DvFWoz8-.d.mts.map} +1 -1
- package/dist/{runner-DPdt_Wpa.mjs → runner-K8XK101B.mjs} +351 -199
- package/dist/runner-K8XK101B.mjs.map +1 -0
- package/dist/runtime.d.mts +11 -10
- package/dist/runtime.d.mts.map +1 -1
- package/dist/runtime.mjs +2 -2
- package/dist/scheduled-publish-Drffrf2a.d.mts +11 -0
- package/dist/scheduled-publish-Drffrf2a.d.mts.map +1 -0
- package/dist/{schema-DoLd3j2e.mjs → schema-Blhoxp3P.mjs} +5 -5
- package/dist/{schema-DoLd3j2e.mjs.map → schema-Blhoxp3P.mjs.map} +1 -1
- package/dist/{search-BR0ZeZmh.mjs → search-DZN2HZ-V.mjs} +6 -4
- package/dist/search-DZN2HZ-V.mjs.map +1 -0
- package/dist/{secrets-BSf9pRRY.mjs → secrets-kp760LlD.mjs} +2 -2
- package/dist/{secrets-BSf9pRRY.mjs.map → secrets-kp760LlD.mjs.map} +1 -1
- package/dist/{sections-5J2YJPqJ.mjs → sections-CpF5SaGr.mjs} +3 -3
- package/dist/{sections-5J2YJPqJ.mjs.map → sections-CpF5SaGr.mjs.map} +1 -1
- package/dist/seed/index.d.mts +2 -2
- package/dist/seed/index.mjs +19 -18
- package/dist/seo/index.d.mts +1 -1
- package/dist/seo/index.mjs +1 -1
- package/dist/{seo-BkhuuaaE.mjs → seo-89-53DDs.mjs} +1 -1
- package/dist/{seo-BkhuuaaE.mjs.map → seo-89-53DDs.mjs.map} +1 -1
- package/dist/{seo-DKeXHkzE.mjs → seo-DXu2UQnC.mjs} +3 -3
- package/dist/{seo-DKeXHkzE.mjs.map → seo-DXu2UQnC.mjs.map} +1 -1
- package/dist/{service-BbO2s8gT.mjs → service-DQmiBMzt.mjs} +3 -3
- package/dist/{service-BbO2s8gT.mjs.map → service-DQmiBMzt.mjs.map} +1 -1
- package/dist/{session-user-B8aLtKAH.mjs → session-user-Cascbax7.mjs} +1 -1
- package/dist/{session-user-B8aLtKAH.mjs.map → session-user-Cascbax7.mjs.map} +1 -1
- package/dist/{settings-BMNr9Dmi.mjs → settings-rZyHEcNT.mjs} +3 -3
- package/dist/{settings-BMNr9Dmi.mjs.map → settings-rZyHEcNT.mjs.map} +1 -1
- package/dist/{settings-DJeki-97.mjs → settings-zhmdKyJQ.mjs} +5 -5
- package/dist/{settings-DJeki-97.mjs.map → settings-zhmdKyJQ.mjs.map} +1 -1
- package/dist/{setup-complete-gEiySUc-.mjs → setup-complete-Cb3LRyzy.mjs} +1 -1
- package/dist/{setup-complete-gEiySUc-.mjs.map → setup-complete-Cb3LRyzy.mjs.map} +1 -1
- package/dist/{setup-nonce-DzS50zme.mjs → setup-nonce-Z8x0tHf8.mjs} +1 -1
- package/dist/{setup-nonce-DzS50zme.mjs.map → setup-nonce-Z8x0tHf8.mjs.map} +1 -1
- package/dist/{single-flight-cache-Cdfkic3t.mjs → single-flight-cache-BG3B_GhN.mjs} +1 -1
- package/dist/{single-flight-cache-Cdfkic3t.mjs.map → single-flight-cache-BG3B_GhN.mjs.map} +1 -1
- package/dist/{site-url-BLebyON8.mjs → site-url-BBfDTgZB.mjs} +1 -1
- package/dist/{site-url-BLebyON8.mjs.map → site-url-BBfDTgZB.mjs.map} +1 -1
- package/dist/{ssrf-BRKb343l.mjs → ssrf-1g7usGBg.mjs} +1 -1
- package/dist/{ssrf-BRKb343l.mjs.map → ssrf-1g7usGBg.mjs.map} +1 -1
- package/dist/{status-vUK0SA17.mjs → status-CqJQX1QN.mjs} +1 -1
- package/dist/{status-vUK0SA17.mjs.map → status-CqJQX1QN.mjs.map} +1 -1
- package/dist/storage/local.d.mts +1 -1
- package/dist/storage/local.mjs +1 -1
- package/dist/storage/s3.d.mts +1 -1
- package/dist/storage/s3.mjs +1 -1
- package/dist/{taxonomies-CM_fUqLU.mjs → taxonomies-BGBd16Eu.mjs} +4 -4
- package/dist/{taxonomies-CM_fUqLU.mjs.map → taxonomies-BGBd16Eu.mjs.map} +1 -1
- package/dist/{taxonomies-D13i2ctt.mjs → taxonomies-Cnb4F-Pb.mjs} +7 -7
- package/dist/{taxonomies-D13i2ctt.mjs.map → taxonomies-Cnb4F-Pb.mjs.map} +1 -1
- package/dist/{taxonomy-BU0LjdVb.mjs → taxonomy-BxGxZZdu.mjs} +4 -4
- package/dist/{taxonomy-BU0LjdVb.mjs.map → taxonomy-BxGxZZdu.mjs.map} +1 -1
- package/dist/{tokens-LeuXF9gG.mjs → tokens-BGT0TUUo.mjs} +1 -1
- package/dist/{tokens-LeuXF9gG.mjs.map → tokens-BGT0TUUo.mjs.map} +1 -1
- package/dist/{transport-BZ-03aFT.d.mts → transport-BMDWHSgZ.d.mts} +1 -1
- package/dist/{transport-BZ-03aFT.d.mts.map → transport-BMDWHSgZ.d.mts.map} +1 -1
- package/dist/{transport-_2nBz7e9.mjs → transport-DPefPMcz.mjs} +1 -1
- package/dist/{transport-_2nBz7e9.mjs.map → transport-DPefPMcz.mjs.map} +1 -1
- package/dist/{trusted-proxy-DZY5WCn2.mjs → trusted-proxy-VTPRiX2s.mjs} +1 -1
- package/dist/{trusted-proxy-DZY5WCn2.mjs.map → trusted-proxy-VTPRiX2s.mjs.map} +1 -1
- package/dist/{types-ETmO_jQr.d.mts → types-BcLUUbbR.d.mts} +2 -2
- package/dist/{types-ETmO_jQr.d.mts.map → types-BcLUUbbR.d.mts.map} +1 -1
- package/dist/{types-BYnDBVwe.d.mts → types-CGbYowGQ.d.mts} +2 -2
- package/dist/{types-BYnDBVwe.d.mts.map → types-CGbYowGQ.d.mts.map} +1 -1
- package/dist/{types-BWqGVhFn.d.mts → types-CgvhU-hF.d.mts} +1 -1
- package/dist/{types-BWqGVhFn.d.mts.map → types-CgvhU-hF.d.mts.map} +1 -1
- package/dist/{types-fS7-VTdR.d.mts → types-ClUkdbWb.d.mts} +1 -1
- package/dist/{types-fS7-VTdR.d.mts.map → types-ClUkdbWb.d.mts.map} +1 -1
- package/dist/{types-CZgK3EMW.mjs → types-CuW0zWDA.mjs} +2 -2
- package/dist/{types-CZgK3EMW.mjs.map → types-CuW0zWDA.mjs.map} +1 -1
- package/dist/{types-BG8_XTLj.d.mts → types-DmHk7vAt.d.mts} +1 -1
- package/dist/{types-BG8_XTLj.d.mts.map → types-DmHk7vAt.d.mts.map} +1 -1
- package/dist/{types-CQAugunJ.mjs → types-Jo3UYd6b.mjs} +1 -1
- package/dist/{types-CQAugunJ.mjs.map → types-Jo3UYd6b.mjs.map} +1 -1
- package/dist/{types-xIfVRNLp.d.mts → types-_HFLRzTn.d.mts} +22 -1
- package/dist/types-_HFLRzTn.d.mts.map +1 -0
- package/dist/{types-DrYMm9s5.d.mts → types-ea9sAPck.d.mts} +1 -1
- package/dist/{types-DrYMm9s5.d.mts.map → types-ea9sAPck.d.mts.map} +1 -1
- package/dist/{types-CNlaBFzx.d.mts → types-g_aFIdW0.d.mts} +1 -1
- package/dist/{types-CNlaBFzx.d.mts.map → types-g_aFIdW0.d.mts.map} +1 -1
- package/dist/{types-CUsXGRVj.d.mts → types-vgEWF18A.d.mts} +19 -1
- package/dist/{types-CUsXGRVj.d.mts.map → types-vgEWF18A.d.mts.map} +1 -1
- package/dist/{user-DkG2jKCp.mjs → user-BjAOvU3Z.mjs} +3 -3
- package/dist/{user-DkG2jKCp.mjs.map → user-BjAOvU3Z.mjs.map} +1 -1
- package/dist/{utils-B7A57fm9.mjs → utils-BJXElxdw.mjs} +156 -7
- package/dist/utils-BJXElxdw.mjs.map +1 -0
- package/dist/{validate-CuJ1Ps9j.mjs → validate-CWSnKVIJ.mjs} +2 -2
- package/dist/{validate-CuJ1Ps9j.mjs.map → validate-CWSnKVIJ.mjs.map} +1 -1
- package/dist/{validate-CG0V0wNR.d.mts → validate-Z1b86_3B.d.mts} +11 -6
- package/dist/{validate-CG0V0wNR.d.mts.map → validate-Z1b86_3B.d.mts.map} +1 -1
- package/dist/{validation-CwUfTdGF.mjs → validation-c8WjhH8z.mjs} +8 -5
- package/dist/{validation-CwUfTdGF.mjs.map → validation-c8WjhH8z.mjs.map} +1 -1
- package/dist/version-CaccU7DM.mjs +7 -0
- package/dist/{version-BoNBItP_.mjs.map → version-CaccU7DM.mjs.map} +1 -1
- package/dist/{widgets-BfOZ-ajY.mjs → widgets-hWcIicX8.mjs} +3 -3
- package/dist/{widgets-BfOZ-ajY.mjs.map → widgets-hWcIicX8.mjs.map} +1 -1
- package/dist/wxr-taxonomies-0_uxSrmf.d.mts +34 -0
- package/dist/wxr-taxonomies-0_uxSrmf.d.mts.map +1 -0
- package/dist/wxr-taxonomies-BC3OYpvx.mjs +425 -0
- package/dist/wxr-taxonomies-BC3OYpvx.mjs.map +1 -0
- package/dist/{zod-generator-gFsRuNNy.mjs → zod-generator-CacrR-i8.mjs} +2 -2
- package/dist/{zod-generator-gFsRuNNy.mjs.map → zod-generator-CacrR-i8.mjs.map} +1 -1
- package/package.json +6 -6
- package/src/api/handlers/content.ts +69 -23
- package/src/api/handlers/plugins.ts +77 -10
- package/src/api/schemas/import.ts +19 -0
- package/src/astro/integration/runtime.ts +3 -6
- package/src/astro/integration/vite-config.ts +19 -1
- package/src/astro/middleware/auth.ts +10 -3
- package/src/astro/middleware/csp.ts +54 -3
- package/src/astro/middleware.ts +1 -0
- package/src/astro/routes/admin.astro +9 -0
- package/src/astro/routes/api/admin/plugins/[id]/disable.ts +6 -1
- package/src/astro/routes/api/admin/plugins/[id]/enable.ts +6 -1
- package/src/astro/routes/api/admin/plugins/[id]/index.ts +1 -0
- package/src/astro/routes/api/admin/plugins/index.ts +1 -0
- package/src/astro/routes/api/import/wordpress/rewrite-urls.ts +122 -98
- package/src/astro/routes/api/import/wordpress-plugin/execute.ts +794 -44
- package/src/astro/routes/api/manifest.ts +20 -1
- package/src/astro/routes/api/setup/dev-bypass.ts +7 -2
- package/src/astro/types.ts +4 -0
- package/src/cli/commands/seed.ts +1 -1
- package/src/components/EmDashImage.astro +59 -23
- package/src/components/Image.astro +36 -35
- package/src/components/LiveSearch.astro +40 -4
- package/src/components/live-search-routing.ts +30 -0
- package/src/database/migrations/036_i18n_menus_and_taxonomies.ts +23 -18
- package/src/database/migrations/048_restore_content_taxonomies_term_index.ts +32 -0
- package/src/database/migrations/049_taxonomies_name_locale_index.ts +42 -0
- package/src/database/migrations/050_media_usage_index_status.ts +142 -0
- package/src/database/migrations/runner.ts +6 -0
- package/src/database/repositories/media-usage.ts +932 -58
- package/src/database/types.ts +22 -0
- package/src/emdash-runtime.ts +123 -3
- package/src/import/comments.ts +159 -0
- package/src/import/index.ts +8 -1
- package/src/import/settings.ts +65 -189
- package/src/import/sources/wordpress-plugin.ts +338 -42
- package/src/import/sources/wxr.ts +4 -1
- package/src/import/types.ts +12 -0
- package/src/import/utils.ts +207 -0
- package/src/import/wxr-taxonomies.ts +39 -0
- package/src/loader.ts +13 -2
- package/src/media/usage/content-fields.ts +119 -0
- package/src/media/usage/content-refresh.ts +524 -0
- package/src/media/usage/content-repair.ts +491 -0
- package/src/media/usage/content-snapshots.ts +435 -0
- package/src/media/usage/extractor.ts +4 -4
- package/src/media/usage/source-key.ts +22 -0
- package/src/menus/index.ts +17 -1
- package/src/object-cache/index.ts +82 -7
- package/src/plugins/context.ts +100 -71
- package/src/schema/registry.ts +240 -154
- package/src/search/query.ts +3 -0
- package/src/search/types.ts +2 -0
- package/src/seed/apply.ts +158 -101
- package/src/seed/types.ts +6 -1
- package/dist/api-BMfveMoB.mjs.map +0 -1
- package/dist/apply--IVNSdXn.mjs.map +0 -1
- package/dist/byline-fields-eyJMblSr.mjs.map +0 -1
- package/dist/context-C_g-iJVA.mjs.map +0 -1
- package/dist/import-Bb1T9WJS.mjs.map +0 -1
- package/dist/index-BRNabKrx.d.mts.map +0 -1
- package/dist/index-Dt0OKJB4.d.mts.map +0 -1
- package/dist/loader-BA_zhkS_.mjs.map +0 -1
- package/dist/object-cache-CHbHv83-.mjs.map +0 -1
- package/dist/registry-g8yYt4cC.mjs.map +0 -1
- package/dist/runner-DPdt_Wpa.mjs.map +0 -1
- package/dist/search-BR0ZeZmh.mjs.map +0 -1
- package/dist/types-xIfVRNLp.d.mts.map +0 -1
- package/dist/utils-B7A57fm9.mjs.map +0 -1
- package/dist/version-BoNBItP_.mjs +0 -7
- /package/dist/{api-tokens-B4BQybOp.mjs → api-tokens-DsvvCtdh.mjs} +0 -0
- /package/dist/{ssrf-CcX9zvMK.mjs → ssrf-CmuGgCq3.mjs} +0 -0
- /package/dist/{types-BvbeGEtr.mjs → types-DROWRxYV.mjs} +0 -0
|
@@ -24,8 +24,8 @@ var __exportAll = (all, no_symbols) => {
|
|
|
24
24
|
//#endregion
|
|
25
25
|
//#region src/database/migrations/001_initial.ts
|
|
26
26
|
var _001_initial_exports = /* @__PURE__ */ __exportAll({
|
|
27
|
-
down: () => down$
|
|
28
|
-
up: () => up$
|
|
27
|
+
down: () => down$48,
|
|
28
|
+
up: () => up$48
|
|
29
29
|
});
|
|
30
30
|
/**
|
|
31
31
|
* Initial schema migration
|
|
@@ -34,7 +34,7 @@ var _001_initial_exports = /* @__PURE__ */ __exportAll({
|
|
|
34
34
|
* by the SchemaRegistry when collections are added via the admin UI.
|
|
35
35
|
* This migration only creates system tables.
|
|
36
36
|
*/
|
|
37
|
-
async function up$
|
|
37
|
+
async function up$48(db) {
|
|
38
38
|
await db.schema.createTable("revisions").ifNotExists().addColumn("id", "text", (col) => col.primaryKey()).addColumn("collection", "text", (col) => col.notNull()).addColumn("entry_id", "text", (col) => col.notNull()).addColumn("data", "text", (col) => col.notNull()).addColumn("author_id", "text").addColumn("created_at", "text", (col) => col.defaultTo(currentTimestamp(db))).execute();
|
|
39
39
|
await db.schema.createIndex("idx_revisions_entry").ifNotExists().on("revisions").columns(["collection", "entry_id"]).execute();
|
|
40
40
|
await db.schema.createTable("taxonomies").ifNotExists().addColumn("id", "text", (col) => col.primaryKey()).addColumn("name", "text", (col) => col.notNull()).addColumn("slug", "text", (col) => col.notNull()).addColumn("label", "text", (col) => col.notNull()).addColumn("parent_id", "text").addColumn("data", "text").addUniqueConstraint("taxonomies_name_slug_unique", ["name", "slug"]).addForeignKeyConstraint("taxonomies_parent_fk", ["parent_id"], "taxonomies", ["id"], (cb) => cb.onDelete("set null")).execute();
|
|
@@ -54,7 +54,7 @@ async function up$45(db) {
|
|
|
54
54
|
await db.schema.createIndex("idx_audit_action").ifNotExists().on("audit_logs").column("action").execute();
|
|
55
55
|
await db.schema.createIndex("idx_audit_timestamp").ifNotExists().on("audit_logs").column("timestamp").execute();
|
|
56
56
|
}
|
|
57
|
-
async function down$
|
|
57
|
+
async function down$48(db) {
|
|
58
58
|
await db.schema.dropTable("audit_logs").execute();
|
|
59
59
|
await db.schema.dropTable("options").execute();
|
|
60
60
|
await db.schema.dropTable("users").execute();
|
|
@@ -67,26 +67,26 @@ async function down$45(db) {
|
|
|
67
67
|
//#endregion
|
|
68
68
|
//#region src/database/migrations/002_media_status.ts
|
|
69
69
|
var _002_media_status_exports = /* @__PURE__ */ __exportAll({
|
|
70
|
-
down: () => down$
|
|
71
|
-
up: () => up$
|
|
70
|
+
down: () => down$47,
|
|
71
|
+
up: () => up$47
|
|
72
72
|
});
|
|
73
73
|
/**
|
|
74
74
|
* Add status column to media table for tracking upload state.
|
|
75
75
|
* Status values: 'pending' | 'ready' | 'failed'
|
|
76
76
|
*/
|
|
77
|
-
async function up$
|
|
77
|
+
async function up$47(db) {
|
|
78
78
|
await db.schema.alterTable("media").addColumn("status", "text", (col) => col.notNull().defaultTo("ready")).execute();
|
|
79
79
|
await db.schema.createIndex("idx_media_status").on("media").column("status").execute();
|
|
80
80
|
}
|
|
81
|
-
async function down$
|
|
81
|
+
async function down$47(db) {
|
|
82
82
|
await db.schema.dropIndex("idx_media_status").execute();
|
|
83
83
|
}
|
|
84
84
|
|
|
85
85
|
//#endregion
|
|
86
86
|
//#region src/database/migrations/003_schema_registry.ts
|
|
87
87
|
var _003_schema_registry_exports = /* @__PURE__ */ __exportAll({
|
|
88
|
-
down: () => down$
|
|
89
|
-
up: () => up$
|
|
88
|
+
down: () => down$46,
|
|
89
|
+
up: () => up$46
|
|
90
90
|
});
|
|
91
91
|
/**
|
|
92
92
|
* Migration: Schema Registry Tables
|
|
@@ -94,14 +94,14 @@ var _003_schema_registry_exports = /* @__PURE__ */ __exportAll({
|
|
|
94
94
|
* Creates the schema registry tables that store collection and field definitions.
|
|
95
95
|
* This enables dynamic schema management where D1 is the source of truth.
|
|
96
96
|
*/
|
|
97
|
-
async function up$
|
|
97
|
+
async function up$46(db) {
|
|
98
98
|
await db.schema.createTable("_emdash_collections").addColumn("id", "text", (col) => col.primaryKey()).addColumn("slug", "text", (col) => col.notNull().unique()).addColumn("label", "text", (col) => col.notNull()).addColumn("label_singular", "text").addColumn("description", "text").addColumn("icon", "text").addColumn("supports", "text").addColumn("source", "text").addColumn("created_at", "text", (col) => col.defaultTo(currentTimestamp(db))).addColumn("updated_at", "text", (col) => col.defaultTo(currentTimestamp(db))).execute();
|
|
99
99
|
await db.schema.createTable("_emdash_fields").addColumn("id", "text", (col) => col.primaryKey()).addColumn("collection_id", "text", (col) => col.notNull()).addColumn("slug", "text", (col) => col.notNull()).addColumn("label", "text", (col) => col.notNull()).addColumn("type", "text", (col) => col.notNull()).addColumn("column_type", "text", (col) => col.notNull()).addColumn("required", "integer", (col) => col.defaultTo(0)).addColumn("unique", "integer", (col) => col.defaultTo(0)).addColumn("default_value", "text").addColumn("validation", "text").addColumn("widget", "text").addColumn("options", "text").addColumn("sort_order", "integer", (col) => col.defaultTo(0)).addColumn("created_at", "text", (col) => col.defaultTo(currentTimestamp(db))).addForeignKeyConstraint("fields_collection_fk", ["collection_id"], "_emdash_collections", ["id"], (cb) => cb.onDelete("cascade")).execute();
|
|
100
100
|
await db.schema.createIndex("idx_fields_collection_slug").on("_emdash_fields").columns(["collection_id", "slug"]).unique().execute();
|
|
101
101
|
await db.schema.createIndex("idx_fields_collection").on("_emdash_fields").column("collection_id").execute();
|
|
102
102
|
await db.schema.createIndex("idx_fields_sort").on("_emdash_fields").columns(["collection_id", "sort_order"]).execute();
|
|
103
103
|
}
|
|
104
|
-
async function down$
|
|
104
|
+
async function down$46(db) {
|
|
105
105
|
await db.schema.dropTable("_emdash_fields").execute();
|
|
106
106
|
await db.schema.dropTable("_emdash_collections").execute();
|
|
107
107
|
}
|
|
@@ -109,8 +109,8 @@ async function down$43(db) {
|
|
|
109
109
|
//#endregion
|
|
110
110
|
//#region src/database/migrations/004_plugins.ts
|
|
111
111
|
var _004_plugins_exports = /* @__PURE__ */ __exportAll({
|
|
112
|
-
down: () => down$
|
|
113
|
-
up: () => up$
|
|
112
|
+
down: () => down$45,
|
|
113
|
+
up: () => up$45
|
|
114
114
|
});
|
|
115
115
|
/**
|
|
116
116
|
* Migration: Plugin System Tables
|
|
@@ -120,7 +120,7 @@ var _004_plugins_exports = /* @__PURE__ */ __exportAll({
|
|
|
120
120
|
*
|
|
121
121
|
* @see PLUGIN-SYSTEM.md § Plugin Storage
|
|
122
122
|
*/
|
|
123
|
-
async function up$
|
|
123
|
+
async function up$45(db) {
|
|
124
124
|
await db.schema.createTable("_plugin_storage").addColumn("plugin_id", "text", (col) => col.notNull()).addColumn("collection", "text", (col) => col.notNull()).addColumn("id", "text", (col) => col.notNull()).addColumn("data", "text", (col) => col.notNull()).addColumn("created_at", "text", (col) => col.defaultTo(currentTimestamp(db))).addColumn("updated_at", "text", (col) => col.defaultTo(currentTimestamp(db))).addPrimaryKeyConstraint("pk_plugin_storage", [
|
|
125
125
|
"plugin_id",
|
|
126
126
|
"collection",
|
|
@@ -138,7 +138,7 @@ async function up$42(db) {
|
|
|
138
138
|
"index_name"
|
|
139
139
|
]).execute();
|
|
140
140
|
}
|
|
141
|
-
async function down$
|
|
141
|
+
async function down$45(db) {
|
|
142
142
|
await db.schema.dropTable("_plugin_indexes").execute();
|
|
143
143
|
await db.schema.dropTable("_plugin_state").execute();
|
|
144
144
|
await db.schema.dropTable("_plugin_storage").execute();
|
|
@@ -147,8 +147,8 @@ async function down$42(db) {
|
|
|
147
147
|
//#endregion
|
|
148
148
|
//#region src/database/migrations/005_menus.ts
|
|
149
149
|
var _005_menus_exports = /* @__PURE__ */ __exportAll({
|
|
150
|
-
down: () => down$
|
|
151
|
-
up: () => up$
|
|
150
|
+
down: () => down$44,
|
|
151
|
+
up: () => up$44
|
|
152
152
|
});
|
|
153
153
|
/**
|
|
154
154
|
* Navigation Menus migration
|
|
@@ -156,13 +156,13 @@ var _005_menus_exports = /* @__PURE__ */ __exportAll({
|
|
|
156
156
|
* Creates tables for admin-editable navigation menus.
|
|
157
157
|
* Menu items can reference content entries, taxonomy terms, or custom URLs.
|
|
158
158
|
*/
|
|
159
|
-
async function up$
|
|
159
|
+
async function up$44(db) {
|
|
160
160
|
await db.schema.createTable("_emdash_menus").addColumn("id", "text", (col) => col.primaryKey()).addColumn("name", "text", (col) => col.notNull().unique()).addColumn("label", "text", (col) => col.notNull()).addColumn("created_at", "text", (col) => col.defaultTo(currentTimestamp(db))).addColumn("updated_at", "text", (col) => col.defaultTo(currentTimestamp(db))).execute();
|
|
161
161
|
await db.schema.createTable("_emdash_menu_items").addColumn("id", "text", (col) => col.primaryKey()).addColumn("menu_id", "text", (col) => col.notNull()).addColumn("parent_id", "text").addColumn("sort_order", "integer", (col) => col.notNull().defaultTo(0)).addColumn("type", "text", (col) => col.notNull()).addColumn("reference_collection", "text").addColumn("reference_id", "text").addColumn("custom_url", "text").addColumn("label", "text", (col) => col.notNull()).addColumn("title_attr", "text").addColumn("target", "text").addColumn("css_classes", "text").addColumn("created_at", "text", (col) => col.defaultTo(currentTimestamp(db))).addForeignKeyConstraint("menu_items_menu_fk", ["menu_id"], "_emdash_menus", ["id"], (cb) => cb.onDelete("cascade")).addForeignKeyConstraint("menu_items_parent_fk", ["parent_id"], "_emdash_menu_items", ["id"], (cb) => cb.onDelete("cascade")).execute();
|
|
162
162
|
await db.schema.createIndex("idx_menu_items_menu").on("_emdash_menu_items").columns(["menu_id", "sort_order"]).execute();
|
|
163
163
|
await db.schema.createIndex("idx_menu_items_parent").on("_emdash_menu_items").column("parent_id").execute();
|
|
164
164
|
}
|
|
165
|
-
async function down$
|
|
165
|
+
async function down$44(db) {
|
|
166
166
|
await db.schema.dropTable("_emdash_menu_items").execute();
|
|
167
167
|
await db.schema.dropTable("_emdash_menus").execute();
|
|
168
168
|
}
|
|
@@ -170,8 +170,8 @@ async function down$41(db) {
|
|
|
170
170
|
//#endregion
|
|
171
171
|
//#region src/database/migrations/006_taxonomy_defs.ts
|
|
172
172
|
var _006_taxonomy_defs_exports = /* @__PURE__ */ __exportAll({
|
|
173
|
-
down: () => down$
|
|
174
|
-
up: () => up$
|
|
173
|
+
down: () => down$43,
|
|
174
|
+
up: () => up$43
|
|
175
175
|
});
|
|
176
176
|
/**
|
|
177
177
|
* Taxonomy definitions migration
|
|
@@ -179,7 +179,7 @@ var _006_taxonomy_defs_exports = /* @__PURE__ */ __exportAll({
|
|
|
179
179
|
* Adds _emdash_taxonomy_defs table to store taxonomy definitions (category, tag, custom)
|
|
180
180
|
* and seeds default category and tag taxonomies.
|
|
181
181
|
*/
|
|
182
|
-
async function up$
|
|
182
|
+
async function up$43(db) {
|
|
183
183
|
await db.schema.createTable("_emdash_taxonomy_defs").addColumn("id", "text", (col) => col.primaryKey()).addColumn("name", "text", (col) => col.notNull().unique()).addColumn("label", "text", (col) => col.notNull()).addColumn("label_singular", "text").addColumn("hierarchical", "integer", (col) => col.defaultTo(0)).addColumn("collections", "text").addColumn("created_at", "text", (col) => col.defaultTo(currentTimestamp(db))).execute();
|
|
184
184
|
await db.insertInto("_emdash_taxonomy_defs").values([{
|
|
185
185
|
id: "taxdef_category",
|
|
@@ -197,22 +197,22 @@ async function up$40(db) {
|
|
|
197
197
|
collections: JSON.stringify(["posts"])
|
|
198
198
|
}]).execute();
|
|
199
199
|
}
|
|
200
|
-
async function down$
|
|
200
|
+
async function down$43(db) {
|
|
201
201
|
await db.schema.dropTable("_emdash_taxonomy_defs").execute();
|
|
202
202
|
}
|
|
203
203
|
|
|
204
204
|
//#endregion
|
|
205
205
|
//#region src/database/migrations/007_widgets.ts
|
|
206
206
|
var _007_widgets_exports = /* @__PURE__ */ __exportAll({
|
|
207
|
-
down: () => down$
|
|
208
|
-
up: () => up$
|
|
207
|
+
down: () => down$42,
|
|
208
|
+
up: () => up$42
|
|
209
209
|
});
|
|
210
|
-
async function up$
|
|
210
|
+
async function up$42(db) {
|
|
211
211
|
await db.schema.createTable("_emdash_widget_areas").addColumn("id", "text", (col) => col.primaryKey()).addColumn("name", "text", (col) => col.notNull().unique()).addColumn("label", "text", (col) => col.notNull()).addColumn("description", "text").addColumn("created_at", "text", (col) => col.defaultTo(sql`CURRENT_TIMESTAMP`)).execute();
|
|
212
212
|
await db.schema.createTable("_emdash_widgets").addColumn("id", "text", (col) => col.primaryKey()).addColumn("area_id", "text", (col) => col.notNull().references("_emdash_widget_areas.id").onDelete("cascade")).addColumn("sort_order", "integer", (col) => col.notNull().defaultTo(0)).addColumn("type", "text", (col) => col.notNull()).addColumn("title", "text").addColumn("content", "text").addColumn("menu_name", "text").addColumn("component_id", "text").addColumn("component_props", "text").addColumn("created_at", "text", (col) => col.defaultTo(sql`CURRENT_TIMESTAMP`)).execute();
|
|
213
213
|
await db.schema.createIndex("idx_widgets_area").on("_emdash_widgets").columns(["area_id", "sort_order"]).execute();
|
|
214
214
|
}
|
|
215
|
-
async function down$
|
|
215
|
+
async function down$42(db) {
|
|
216
216
|
await db.schema.dropTable("_emdash_widgets").execute();
|
|
217
217
|
await db.schema.dropTable("_emdash_widget_areas").execute();
|
|
218
218
|
}
|
|
@@ -220,8 +220,8 @@ async function down$39(db) {
|
|
|
220
220
|
//#endregion
|
|
221
221
|
//#region src/database/migrations/008_auth.ts
|
|
222
222
|
var _008_auth_exports = /* @__PURE__ */ __exportAll({
|
|
223
|
-
down: () => down$
|
|
224
|
-
up: () => up$
|
|
223
|
+
down: () => down$41,
|
|
224
|
+
up: () => up$41
|
|
225
225
|
});
|
|
226
226
|
/**
|
|
227
227
|
* Auth migration - passkey-first authentication
|
|
@@ -235,7 +235,7 @@ var _008_auth_exports = /* @__PURE__ */ __exportAll({
|
|
|
235
235
|
* - Creates oauth_accounts table (external provider links)
|
|
236
236
|
* - Creates allowed_domains table (self-signup)
|
|
237
237
|
*/
|
|
238
|
-
async function up$
|
|
238
|
+
async function up$41(db) {
|
|
239
239
|
await db.schema.createTable("users_new").addColumn("id", "text", (col) => col.primaryKey()).addColumn("email", "text", (col) => col.notNull().unique()).addColumn("name", "text").addColumn("avatar_url", "text").addColumn("role", "integer", (col) => col.notNull().defaultTo(10)).addColumn("email_verified", "integer", (col) => col.notNull().defaultTo(0)).addColumn("data", "text").addColumn("created_at", "text", (col) => col.defaultTo(currentTimestamp(db))).addColumn("updated_at", "text", (col) => col.defaultTo(currentTimestamp(db))).execute();
|
|
240
240
|
await sql`
|
|
241
241
|
INSERT INTO users_new (id, email, name, role, data, created_at, updated_at)
|
|
@@ -268,7 +268,7 @@ async function up$38(db) {
|
|
|
268
268
|
await db.schema.createTable("auth_challenges").addColumn("challenge", "text", (col) => col.primaryKey()).addColumn("type", "text", (col) => col.notNull()).addColumn("user_id", "text").addColumn("data", "text").addColumn("expires_at", "text", (col) => col.notNull()).addColumn("created_at", "text", (col) => col.defaultTo(currentTimestamp(db))).execute();
|
|
269
269
|
await db.schema.createIndex("idx_auth_challenges_expires").on("auth_challenges").column("expires_at").execute();
|
|
270
270
|
}
|
|
271
|
-
async function down$
|
|
271
|
+
async function down$41(db) {
|
|
272
272
|
await db.schema.dropTable("auth_challenges").execute();
|
|
273
273
|
await db.schema.dropTable("allowed_domains").execute();
|
|
274
274
|
await db.schema.dropTable("oauth_accounts").execute();
|
|
@@ -301,8 +301,8 @@ async function down$38(db) {
|
|
|
301
301
|
//#endregion
|
|
302
302
|
//#region src/database/migrations/009_user_disabled.ts
|
|
303
303
|
var _009_user_disabled_exports = /* @__PURE__ */ __exportAll({
|
|
304
|
-
down: () => down$
|
|
305
|
-
up: () => up$
|
|
304
|
+
down: () => down$40,
|
|
305
|
+
up: () => up$40
|
|
306
306
|
});
|
|
307
307
|
/**
|
|
308
308
|
* User disabled column - for soft-disabling users
|
|
@@ -311,19 +311,19 @@ var _009_user_disabled_exports = /* @__PURE__ */ __exportAll({
|
|
|
311
311
|
* - Adds disabled column to users table (INTEGER, default 0)
|
|
312
312
|
* - Disabled users cannot log in
|
|
313
313
|
*/
|
|
314
|
-
async function up$
|
|
314
|
+
async function up$40(db) {
|
|
315
315
|
await sql`ALTER TABLE users ADD COLUMN disabled INTEGER NOT NULL DEFAULT 0`.execute(db);
|
|
316
316
|
await db.schema.createIndex("idx_users_disabled").on("users").column("disabled").execute();
|
|
317
317
|
}
|
|
318
|
-
async function down$
|
|
318
|
+
async function down$40(db) {
|
|
319
319
|
await db.schema.dropIndex("idx_users_disabled").execute();
|
|
320
320
|
}
|
|
321
321
|
|
|
322
322
|
//#endregion
|
|
323
323
|
//#region src/database/migrations/011_sections.ts
|
|
324
324
|
var _011_sections_exports = /* @__PURE__ */ __exportAll({
|
|
325
|
-
down: () => down$
|
|
326
|
-
up: () => up$
|
|
325
|
+
down: () => down$39,
|
|
326
|
+
up: () => up$39
|
|
327
327
|
});
|
|
328
328
|
/**
|
|
329
329
|
* Migration: Add sections tables and performance indexes
|
|
@@ -332,13 +332,13 @@ var _011_sections_exports = /* @__PURE__ */ __exportAll({
|
|
|
332
332
|
* They provide a library of pre-built page sections (heroes, CTAs, testimonials, etc.)
|
|
333
333
|
* that content authors can browse and insert with a single click.
|
|
334
334
|
*/
|
|
335
|
-
async function up$
|
|
335
|
+
async function up$39(db) {
|
|
336
336
|
await db.schema.createTable("_emdash_section_categories").addColumn("id", "text", (col) => col.primaryKey()).addColumn("slug", "text", (col) => col.notNull().unique()).addColumn("label", "text", (col) => col.notNull()).addColumn("sort_order", "integer", (col) => col.defaultTo(0)).addColumn("created_at", "text", (col) => col.defaultTo(sql`CURRENT_TIMESTAMP`)).execute();
|
|
337
337
|
await db.schema.createTable("_emdash_sections").addColumn("id", "text", (col) => col.primaryKey()).addColumn("slug", "text", (col) => col.notNull().unique()).addColumn("title", "text", (col) => col.notNull()).addColumn("description", "text").addColumn("category_id", "text", (col) => col.references("_emdash_section_categories.id").onDelete("set null")).addColumn("keywords", "text").addColumn("content", "text", (col) => col.notNull()).addColumn("preview_media_id", "text").addColumn("source", "text", (col) => col.notNull().defaultTo("user")).addColumn("theme_id", "text").addColumn("created_at", "text", (col) => col.defaultTo(sql`CURRENT_TIMESTAMP`)).addColumn("updated_at", "text", (col) => col.defaultTo(sql`CURRENT_TIMESTAMP`)).execute();
|
|
338
338
|
await db.schema.createIndex("idx_sections_category").on("_emdash_sections").columns(["category_id"]).execute();
|
|
339
339
|
await db.schema.createIndex("idx_sections_source").on("_emdash_sections").columns(["source"]).execute();
|
|
340
340
|
}
|
|
341
|
-
async function down$
|
|
341
|
+
async function down$39(db) {
|
|
342
342
|
await db.schema.dropIndex("idx_sections_source").execute();
|
|
343
343
|
await db.schema.dropIndex("idx_sections_category").execute();
|
|
344
344
|
await db.schema.dropTable("_emdash_sections").execute();
|
|
@@ -348,8 +348,8 @@ async function down$36(db) {
|
|
|
348
348
|
//#endregion
|
|
349
349
|
//#region src/database/migrations/012_search.ts
|
|
350
350
|
var _012_search_exports = /* @__PURE__ */ __exportAll({
|
|
351
|
-
down: () => down$
|
|
352
|
-
up: () => up$
|
|
351
|
+
down: () => down$38,
|
|
352
|
+
up: () => up$38
|
|
353
353
|
});
|
|
354
354
|
/**
|
|
355
355
|
* Migration: Search Support
|
|
@@ -357,11 +357,11 @@ var _012_search_exports = /* @__PURE__ */ __exportAll({
|
|
|
357
357
|
* Adds search configuration to collections and searchable flag to fields.
|
|
358
358
|
* FTS5 tables are created dynamically when search is enabled for a collection.
|
|
359
359
|
*/
|
|
360
|
-
async function up$
|
|
360
|
+
async function up$38(db) {
|
|
361
361
|
await db.schema.alterTable("_emdash_collections").addColumn("search_config", "text").execute();
|
|
362
362
|
await db.schema.alterTable("_emdash_fields").addColumn("searchable", "integer", (col) => col.defaultTo(0)).execute();
|
|
363
363
|
}
|
|
364
|
-
async function down$
|
|
364
|
+
async function down$38(db) {
|
|
365
365
|
await db.schema.alterTable("_emdash_fields").dropColumn("searchable").execute();
|
|
366
366
|
await db.schema.alterTable("_emdash_collections").dropColumn("search_config").execute();
|
|
367
367
|
}
|
|
@@ -369,8 +369,8 @@ async function down$35(db) {
|
|
|
369
369
|
//#endregion
|
|
370
370
|
//#region src/database/migrations/013_scheduled_publishing.ts
|
|
371
371
|
var _013_scheduled_publishing_exports = /* @__PURE__ */ __exportAll({
|
|
372
|
-
down: () => down$
|
|
373
|
-
up: () => up$
|
|
372
|
+
down: () => down$37,
|
|
373
|
+
up: () => up$37
|
|
374
374
|
});
|
|
375
375
|
/**
|
|
376
376
|
* Migration: Add scheduled publishing support
|
|
@@ -379,7 +379,7 @@ var _013_scheduled_publishing_exports = /* @__PURE__ */ __exportAll({
|
|
|
379
379
|
* When scheduled_at is set and status is 'scheduled', the content
|
|
380
380
|
* will be auto-published when the scheduled time is reached.
|
|
381
381
|
*/
|
|
382
|
-
async function up$
|
|
382
|
+
async function up$37(db) {
|
|
383
383
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
384
384
|
for (const tableName of tableNames) {
|
|
385
385
|
const table = { name: tableName };
|
|
@@ -394,7 +394,7 @@ async function up$34(db) {
|
|
|
394
394
|
`.execute(db);
|
|
395
395
|
}
|
|
396
396
|
}
|
|
397
|
-
async function down$
|
|
397
|
+
async function down$37(db) {
|
|
398
398
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
399
399
|
for (const tableName of tableNames) {
|
|
400
400
|
const table = { name: tableName };
|
|
@@ -411,10 +411,10 @@ async function down$34(db) {
|
|
|
411
411
|
//#endregion
|
|
412
412
|
//#region src/database/migrations/014_draft_revisions.ts
|
|
413
413
|
var _014_draft_revisions_exports = /* @__PURE__ */ __exportAll({
|
|
414
|
-
down: () => down$
|
|
415
|
-
up: () => up$
|
|
414
|
+
down: () => down$36,
|
|
415
|
+
up: () => up$36
|
|
416
416
|
});
|
|
417
|
-
async function up$
|
|
417
|
+
async function up$36(db) {
|
|
418
418
|
const tables = await db.selectFrom("_emdash_collections").select("slug").execute();
|
|
419
419
|
for (const row of tables) {
|
|
420
420
|
const tableName = `ec_${row.slug}`;
|
|
@@ -436,7 +436,7 @@ async function up$33(db) {
|
|
|
436
436
|
`.execute(db);
|
|
437
437
|
}
|
|
438
438
|
}
|
|
439
|
-
async function down$
|
|
439
|
+
async function down$36(db) {
|
|
440
440
|
const tables = await db.selectFrom("_emdash_collections").select("slug").execute();
|
|
441
441
|
for (const row of tables) {
|
|
442
442
|
const tableName = `ec_${row.slug}`;
|
|
@@ -460,8 +460,8 @@ async function down$33(db) {
|
|
|
460
460
|
//#endregion
|
|
461
461
|
//#region src/database/migrations/015_indexes.ts
|
|
462
462
|
var _015_indexes_exports = /* @__PURE__ */ __exportAll({
|
|
463
|
-
down: () => down$
|
|
464
|
-
up: () => up$
|
|
463
|
+
down: () => down$35,
|
|
464
|
+
up: () => up$35
|
|
465
465
|
});
|
|
466
466
|
/**
|
|
467
467
|
* Add performance indexes for common query patterns.
|
|
@@ -474,7 +474,7 @@ var _015_indexes_exports = /* @__PURE__ */ __exportAll({
|
|
|
474
474
|
* 5. Retroactive author_id + updated_at on existing ec_* content tables
|
|
475
475
|
* (new tables get these from createContentTable() in registry.ts)
|
|
476
476
|
*/
|
|
477
|
-
async function up$
|
|
477
|
+
async function up$35(db) {
|
|
478
478
|
await db.schema.createIndex("idx_media_mime_type").on("media").column("mime_type").execute();
|
|
479
479
|
await db.schema.createIndex("idx_media_filename").on("media").column("filename").execute();
|
|
480
480
|
await db.schema.createIndex("idx_media_created_at").on("media").column("created_at").execute();
|
|
@@ -494,7 +494,7 @@ async function up$32(db) {
|
|
|
494
494
|
`.execute(db);
|
|
495
495
|
}
|
|
496
496
|
}
|
|
497
|
-
async function down$
|
|
497
|
+
async function down$35(db) {
|
|
498
498
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
499
499
|
for (const tableName of tableNames) {
|
|
500
500
|
const table = { name: tableName };
|
|
@@ -512,8 +512,8 @@ async function down$32(db) {
|
|
|
512
512
|
//#endregion
|
|
513
513
|
//#region src/database/migrations/016_api_tokens.ts
|
|
514
514
|
var _016_api_tokens_exports = /* @__PURE__ */ __exportAll({
|
|
515
|
-
down: () => down$
|
|
516
|
-
up: () => up$
|
|
515
|
+
down: () => down$34,
|
|
516
|
+
up: () => up$34
|
|
517
517
|
});
|
|
518
518
|
/**
|
|
519
519
|
* API token tables for programmatic access.
|
|
@@ -531,7 +531,7 @@ var _016_api_tokens_exports = /* @__PURE__ */ __exportAll({
|
|
|
531
531
|
* top. Without these guards, the retry crashed with `table ... already
|
|
532
532
|
* exists` and blocked every subsequent boot of the Worker.
|
|
533
533
|
*/
|
|
534
|
-
async function up$
|
|
534
|
+
async function up$34(db) {
|
|
535
535
|
await db.schema.createTable("_emdash_api_tokens").ifNotExists().addColumn("id", "text", (col) => col.primaryKey()).addColumn("name", "text", (col) => col.notNull()).addColumn("token_hash", "text", (col) => col.notNull().unique()).addColumn("prefix", "text", (col) => col.notNull()).addColumn("user_id", "text", (col) => col.notNull()).addColumn("scopes", "text", (col) => col.notNull()).addColumn("expires_at", "text").addColumn("last_used_at", "text").addColumn("created_at", "text", (col) => col.defaultTo(currentTimestamp(db))).addForeignKeyConstraint("api_tokens_user_fk", ["user_id"], "users", ["id"], (cb) => cb.onDelete("cascade")).execute();
|
|
536
536
|
await db.schema.createIndex("idx_api_tokens_token_hash").ifNotExists().on("_emdash_api_tokens").column("token_hash").execute();
|
|
537
537
|
await db.schema.createIndex("idx_api_tokens_user_id").ifNotExists().on("_emdash_api_tokens").column("user_id").execute();
|
|
@@ -540,7 +540,7 @@ async function up$31(db) {
|
|
|
540
540
|
await db.schema.createIndex("idx_oauth_tokens_expires").ifNotExists().on("_emdash_oauth_tokens").column("expires_at").execute();
|
|
541
541
|
await db.schema.createTable("_emdash_device_codes").ifNotExists().addColumn("device_code", "text", (col) => col.primaryKey()).addColumn("user_code", "text", (col) => col.notNull().unique()).addColumn("scopes", "text", (col) => col.notNull()).addColumn("user_id", "text").addColumn("status", "text", (col) => col.notNull().defaultTo("pending")).addColumn("expires_at", "text", (col) => col.notNull()).addColumn("interval", "integer", (col) => col.notNull().defaultTo(5)).addColumn("created_at", "text", (col) => col.defaultTo(currentTimestamp(db))).execute();
|
|
542
542
|
}
|
|
543
|
-
async function down$
|
|
543
|
+
async function down$34(db) {
|
|
544
544
|
await db.schema.dropTable("_emdash_device_codes").ifExists().execute();
|
|
545
545
|
await db.schema.dropTable("_emdash_oauth_tokens").ifExists().execute();
|
|
546
546
|
await db.schema.dropTable("_emdash_api_tokens").ifExists().execute();
|
|
@@ -549,8 +549,8 @@ async function down$31(db) {
|
|
|
549
549
|
//#endregion
|
|
550
550
|
//#region src/database/migrations/017_authorization_codes.ts
|
|
551
551
|
var _017_authorization_codes_exports = /* @__PURE__ */ __exportAll({
|
|
552
|
-
down: () => down$
|
|
553
|
-
up: () => up$
|
|
552
|
+
down: () => down$33,
|
|
553
|
+
up: () => up$33
|
|
554
554
|
});
|
|
555
555
|
/**
|
|
556
556
|
* Authorization codes for OAuth 2.1 Authorization Code + PKCE flow.
|
|
@@ -560,20 +560,20 @@ var _017_authorization_codes_exports = /* @__PURE__ */ __exportAll({
|
|
|
560
560
|
*
|
|
561
561
|
* Also adds client_id tracking to oauth_tokens for per-client revocation.
|
|
562
562
|
*/
|
|
563
|
-
async function up$
|
|
563
|
+
async function up$33(db) {
|
|
564
564
|
await db.schema.createTable("_emdash_authorization_codes").addColumn("code_hash", "text", (col) => col.primaryKey()).addColumn("client_id", "text", (col) => col.notNull()).addColumn("redirect_uri", "text", (col) => col.notNull()).addColumn("user_id", "text", (col) => col.notNull()).addColumn("scopes", "text", (col) => col.notNull()).addColumn("code_challenge", "text", (col) => col.notNull()).addColumn("code_challenge_method", "text", (col) => col.notNull().defaultTo("S256")).addColumn("resource", "text").addColumn("expires_at", "text", (col) => col.notNull()).addColumn("created_at", "text", (col) => col.defaultTo(currentTimestamp(db))).addForeignKeyConstraint("auth_codes_user_fk", ["user_id"], "users", ["id"], (cb) => cb.onDelete("cascade")).execute();
|
|
565
565
|
await db.schema.createIndex("idx_auth_codes_expires").on("_emdash_authorization_codes").column("expires_at").execute();
|
|
566
566
|
await sql`ALTER TABLE _emdash_oauth_tokens ADD COLUMN client_id TEXT`.execute(db);
|
|
567
567
|
}
|
|
568
|
-
async function down$
|
|
568
|
+
async function down$33(db) {
|
|
569
569
|
await db.schema.dropTable("_emdash_authorization_codes").execute();
|
|
570
570
|
}
|
|
571
571
|
|
|
572
572
|
//#endregion
|
|
573
573
|
//#region src/database/migrations/018_seo.ts
|
|
574
574
|
var _018_seo_exports = /* @__PURE__ */ __exportAll({
|
|
575
|
-
down: () => down$
|
|
576
|
-
up: () => up$
|
|
575
|
+
down: () => down$32,
|
|
576
|
+
up: () => up$32
|
|
577
577
|
});
|
|
578
578
|
/**
|
|
579
579
|
* Migration: SEO support
|
|
@@ -586,7 +586,7 @@ var _018_seo_exports = /* @__PURE__ */ __exportAll({
|
|
|
586
586
|
* need it. The `has_seo` flag controls whether the admin shows SEO fields
|
|
587
587
|
* and whether the collection's content appears in sitemaps.
|
|
588
588
|
*/
|
|
589
|
-
async function up$
|
|
589
|
+
async function up$32(db) {
|
|
590
590
|
await db.schema.createTable("_emdash_seo").addColumn("collection", "text", (col) => col.notNull()).addColumn("content_id", "text", (col) => col.notNull()).addColumn("seo_title", "text").addColumn("seo_description", "text").addColumn("seo_image", "text").addColumn("seo_canonical", "text").addColumn("seo_no_index", "integer", (col) => col.notNull().defaultTo(0)).addColumn("created_at", "text", (col) => col.notNull().defaultTo(currentTimestamp(db))).addColumn("updated_at", "text", (col) => col.notNull().defaultTo(currentTimestamp(db))).addPrimaryKeyConstraint("_emdash_seo_pk", ["collection", "content_id"]).execute();
|
|
591
591
|
await sql`
|
|
592
592
|
CREATE INDEX idx_emdash_seo_collection
|
|
@@ -597,7 +597,7 @@ async function up$29(db) {
|
|
|
597
597
|
ADD COLUMN has_seo INTEGER NOT NULL DEFAULT 0
|
|
598
598
|
`.execute(db);
|
|
599
599
|
}
|
|
600
|
-
async function down$
|
|
600
|
+
async function down$32(db) {
|
|
601
601
|
await sql`DROP TABLE IF EXISTS _emdash_seo`.execute(db);
|
|
602
602
|
await sql`
|
|
603
603
|
ALTER TABLE _emdash_collections
|
|
@@ -608,8 +608,8 @@ async function down$29(db) {
|
|
|
608
608
|
//#endregion
|
|
609
609
|
//#region src/database/migrations/019_i18n.ts
|
|
610
610
|
var _019_i18n_exports = /* @__PURE__ */ __exportAll({
|
|
611
|
-
down: () => down$
|
|
612
|
-
up: () => up$
|
|
611
|
+
down: () => down$31,
|
|
612
|
+
up: () => up$31
|
|
613
613
|
});
|
|
614
614
|
/**
|
|
615
615
|
* Quote an identifier for use in raw SQL. Escapes embedded double-quotes
|
|
@@ -722,7 +722,7 @@ async function upPostgres$1(db) {
|
|
|
722
722
|
ADD COLUMN translatable INTEGER NOT NULL DEFAULT 1
|
|
723
723
|
`.execute(db);
|
|
724
724
|
}
|
|
725
|
-
async function up$
|
|
725
|
+
async function up$31(db) {
|
|
726
726
|
if (!isSqlite(db)) return upPostgres$1(db);
|
|
727
727
|
const orphanedTmps = await listTablesLike(db, "ec_%_i18n_tmp");
|
|
728
728
|
for (const tmpName of orphanedTmps) {
|
|
@@ -839,7 +839,7 @@ async function downPostgres(db) {
|
|
|
839
839
|
await sql`ALTER TABLE ${sql.ref(t)} DROP COLUMN translation_group`.execute(db);
|
|
840
840
|
}
|
|
841
841
|
}
|
|
842
|
-
async function down$
|
|
842
|
+
async function down$31(db) {
|
|
843
843
|
if (!isSqlite(db)) return downPostgres(db);
|
|
844
844
|
await sql`
|
|
845
845
|
ALTER TABLE _emdash_fields
|
|
@@ -946,8 +946,8 @@ async function down$28(db) {
|
|
|
946
946
|
//#endregion
|
|
947
947
|
//#region src/database/migrations/020_collection_url_pattern.ts
|
|
948
948
|
var _020_collection_url_pattern_exports = /* @__PURE__ */ __exportAll({
|
|
949
|
-
down: () => down$
|
|
950
|
-
up: () => up$
|
|
949
|
+
down: () => down$30,
|
|
950
|
+
up: () => up$30
|
|
951
951
|
});
|
|
952
952
|
/**
|
|
953
953
|
* Migration: URL pattern for collections
|
|
@@ -956,13 +956,13 @@ var _020_collection_url_pattern_exports = /* @__PURE__ */ __exportAll({
|
|
|
956
956
|
* can declare its own URL structure (e.g. "/{slug}" for pages, "/blog/{slug}"
|
|
957
957
|
* for posts). Used for menu URL resolution, sitemaps, and path-based lookups.
|
|
958
958
|
*/
|
|
959
|
-
async function up$
|
|
959
|
+
async function up$30(db) {
|
|
960
960
|
await sql`
|
|
961
961
|
ALTER TABLE _emdash_collections
|
|
962
962
|
ADD COLUMN url_pattern TEXT
|
|
963
963
|
`.execute(db);
|
|
964
964
|
}
|
|
965
|
-
async function down$
|
|
965
|
+
async function down$30(db) {
|
|
966
966
|
await sql`
|
|
967
967
|
ALTER TABLE _emdash_collections
|
|
968
968
|
DROP COLUMN url_pattern
|
|
@@ -972,8 +972,8 @@ async function down$27(db) {
|
|
|
972
972
|
//#endregion
|
|
973
973
|
//#region src/database/migrations/021_remove_section_categories.ts
|
|
974
974
|
var _021_remove_section_categories_exports = /* @__PURE__ */ __exportAll({
|
|
975
|
-
down: () => down$
|
|
976
|
-
up: () => up$
|
|
975
|
+
down: () => down$29,
|
|
976
|
+
up: () => up$29
|
|
977
977
|
});
|
|
978
978
|
/**
|
|
979
979
|
* Migration: Remove section categories
|
|
@@ -982,12 +982,12 @@ var _021_remove_section_categories_exports = /* @__PURE__ */ __exportAll({
|
|
|
982
982
|
* Rather than building the missing UI for a feature with very little need at this stage,
|
|
983
983
|
* we're removing the feature entirely.
|
|
984
984
|
*/
|
|
985
|
-
async function up$
|
|
985
|
+
async function up$29(db) {
|
|
986
986
|
await db.schema.dropIndex("idx_sections_category").ifExists().execute();
|
|
987
987
|
await db.schema.alterTable("_emdash_sections").dropColumn("category_id").execute();
|
|
988
988
|
await db.schema.dropTable("_emdash_section_categories").execute();
|
|
989
989
|
}
|
|
990
|
-
async function down$
|
|
990
|
+
async function down$29(db) {
|
|
991
991
|
await db.schema.createTable("_emdash_section_categories").addColumn("id", "text", (col) => col.primaryKey()).addColumn("slug", "text", (col) => col.notNull().unique()).addColumn("label", "text", (col) => col.notNull()).addColumn("sort_order", "integer", (col) => col.defaultTo(0)).addColumn("created_at", "text", (col) => col.defaultTo(sql`CURRENT_TIMESTAMP`)).execute();
|
|
992
992
|
await db.schema.alterTable("_emdash_sections").addColumn("category_id", "text", (col) => col.references("_emdash_section_categories.id").onDelete("set null")).execute();
|
|
993
993
|
await db.schema.createIndex("idx_sections_category").on("_emdash_sections").columns(["category_id"]).execute();
|
|
@@ -996,8 +996,8 @@ async function down$26(db) {
|
|
|
996
996
|
//#endregion
|
|
997
997
|
//#region src/database/migrations/022_marketplace_plugin_state.ts
|
|
998
998
|
var _022_marketplace_plugin_state_exports = /* @__PURE__ */ __exportAll({
|
|
999
|
-
down: () => down$
|
|
1000
|
-
up: () => up$
|
|
999
|
+
down: () => down$28,
|
|
1000
|
+
up: () => up$28
|
|
1001
1001
|
});
|
|
1002
1002
|
/**
|
|
1003
1003
|
* Migration: Add marketplace fields to _plugin_state
|
|
@@ -1006,7 +1006,7 @@ var _022_marketplace_plugin_state_exports = /* @__PURE__ */ __exportAll({
|
|
|
1006
1006
|
* whether a plugin was installed from config or marketplace,
|
|
1007
1007
|
* and which marketplace version is installed.
|
|
1008
1008
|
*/
|
|
1009
|
-
async function up$
|
|
1009
|
+
async function up$28(db) {
|
|
1010
1010
|
await sql`
|
|
1011
1011
|
ALTER TABLE _plugin_state
|
|
1012
1012
|
ADD COLUMN source TEXT NOT NULL DEFAULT 'config'
|
|
@@ -1021,7 +1021,7 @@ async function up$25(db) {
|
|
|
1021
1021
|
WHERE source = 'marketplace'
|
|
1022
1022
|
`.execute(db);
|
|
1023
1023
|
}
|
|
1024
|
-
async function down$
|
|
1024
|
+
async function down$28(db) {
|
|
1025
1025
|
await sql`
|
|
1026
1026
|
DROP INDEX IF EXISTS idx_plugin_state_source
|
|
1027
1027
|
`.execute(db);
|
|
@@ -1038,8 +1038,8 @@ async function down$25(db) {
|
|
|
1038
1038
|
//#endregion
|
|
1039
1039
|
//#region src/database/migrations/023_plugin_metadata.ts
|
|
1040
1040
|
var _023_plugin_metadata_exports = /* @__PURE__ */ __exportAll({
|
|
1041
|
-
down: () => down$
|
|
1042
|
-
up: () => up$
|
|
1041
|
+
down: () => down$27,
|
|
1042
|
+
up: () => up$27
|
|
1043
1043
|
});
|
|
1044
1044
|
/**
|
|
1045
1045
|
* Migration: Add display metadata to _plugin_state
|
|
@@ -1048,7 +1048,7 @@ var _023_plugin_metadata_exports = /* @__PURE__ */ __exportAll({
|
|
|
1048
1048
|
* so the admin UI can show meaningful info without re-fetching
|
|
1049
1049
|
* from the marketplace on every page load.
|
|
1050
1050
|
*/
|
|
1051
|
-
async function up$
|
|
1051
|
+
async function up$27(db) {
|
|
1052
1052
|
await sql`
|
|
1053
1053
|
ALTER TABLE _plugin_state
|
|
1054
1054
|
ADD COLUMN display_name TEXT
|
|
@@ -1058,7 +1058,7 @@ async function up$24(db) {
|
|
|
1058
1058
|
ADD COLUMN description TEXT
|
|
1059
1059
|
`.execute(db);
|
|
1060
1060
|
}
|
|
1061
|
-
async function down$
|
|
1061
|
+
async function down$27(db) {
|
|
1062
1062
|
await sql`
|
|
1063
1063
|
ALTER TABLE _plugin_state
|
|
1064
1064
|
DROP COLUMN description
|
|
@@ -1072,8 +1072,8 @@ async function down$24(db) {
|
|
|
1072
1072
|
//#endregion
|
|
1073
1073
|
//#region src/database/migrations/024_media_placeholders.ts
|
|
1074
1074
|
var _024_media_placeholders_exports = /* @__PURE__ */ __exportAll({
|
|
1075
|
-
down: () => down$
|
|
1076
|
-
up: () => up$
|
|
1075
|
+
down: () => down$26,
|
|
1076
|
+
up: () => up$26
|
|
1077
1077
|
});
|
|
1078
1078
|
/**
|
|
1079
1079
|
* Migration: Add placeholder columns to media table
|
|
@@ -1081,7 +1081,7 @@ var _024_media_placeholders_exports = /* @__PURE__ */ __exportAll({
|
|
|
1081
1081
|
* Stores blurhash and dominant_color for LQIP (Low Quality Image Placeholder)
|
|
1082
1082
|
* support. Generated at upload time from image pixel data.
|
|
1083
1083
|
*/
|
|
1084
|
-
async function up$
|
|
1084
|
+
async function up$26(db) {
|
|
1085
1085
|
await sql`
|
|
1086
1086
|
ALTER TABLE media
|
|
1087
1087
|
ADD COLUMN blurhash TEXT
|
|
@@ -1091,7 +1091,7 @@ async function up$23(db) {
|
|
|
1091
1091
|
ADD COLUMN dominant_color TEXT
|
|
1092
1092
|
`.execute(db);
|
|
1093
1093
|
}
|
|
1094
|
-
async function down$
|
|
1094
|
+
async function down$26(db) {
|
|
1095
1095
|
await sql`
|
|
1096
1096
|
ALTER TABLE media
|
|
1097
1097
|
DROP COLUMN dominant_color
|
|
@@ -1105,8 +1105,8 @@ async function down$23(db) {
|
|
|
1105
1105
|
//#endregion
|
|
1106
1106
|
//#region src/database/migrations/025_oauth_clients.ts
|
|
1107
1107
|
var _025_oauth_clients_exports = /* @__PURE__ */ __exportAll({
|
|
1108
|
-
down: () => down$
|
|
1109
|
-
up: () => up$
|
|
1108
|
+
down: () => down$25,
|
|
1109
|
+
up: () => up$25
|
|
1110
1110
|
});
|
|
1111
1111
|
/**
|
|
1112
1112
|
* Migration: Create OAuth clients table
|
|
@@ -1117,18 +1117,18 @@ var _025_oauth_clients_exports = /* @__PURE__ */ __exportAll({
|
|
|
1117
1117
|
* Each client has a set of pre-registered redirect URIs (JSON array).
|
|
1118
1118
|
* The authorize endpoint rejects any redirect_uri not in the client's list.
|
|
1119
1119
|
*/
|
|
1120
|
-
async function up$
|
|
1120
|
+
async function up$25(db) {
|
|
1121
1121
|
await db.schema.createTable("_emdash_oauth_clients").addColumn("id", "text", (col) => col.primaryKey()).addColumn("name", "text", (col) => col.notNull()).addColumn("redirect_uris", "text", (col) => col.notNull()).addColumn("scopes", "text").addColumn("created_at", "text", (col) => col.defaultTo(currentTimestamp(db))).addColumn("updated_at", "text", (col) => col.defaultTo(currentTimestamp(db))).execute();
|
|
1122
1122
|
}
|
|
1123
|
-
async function down$
|
|
1123
|
+
async function down$25(db) {
|
|
1124
1124
|
await db.schema.dropTable("_emdash_oauth_clients").execute();
|
|
1125
1125
|
}
|
|
1126
1126
|
|
|
1127
1127
|
//#endregion
|
|
1128
1128
|
//#region src/database/migrations/026_cron_tasks.ts
|
|
1129
1129
|
var _026_cron_tasks_exports = /* @__PURE__ */ __exportAll({
|
|
1130
|
-
down: () => down$
|
|
1131
|
-
up: () => up$
|
|
1130
|
+
down: () => down$24,
|
|
1131
|
+
up: () => up$24
|
|
1132
1132
|
});
|
|
1133
1133
|
/**
|
|
1134
1134
|
* Migration: Create cron tasks table for plugin scheduled tasks.
|
|
@@ -1139,7 +1139,7 @@ var _026_cron_tasks_exports = /* @__PURE__ */ __exportAll({
|
|
|
1139
1139
|
* The `next_run_at` + `status` + `enabled` index drives the "find overdue
|
|
1140
1140
|
* tasks" query used by CronExecutor.tick().
|
|
1141
1141
|
*/
|
|
1142
|
-
async function up$
|
|
1142
|
+
async function up$24(db) {
|
|
1143
1143
|
await db.schema.createTable("_emdash_cron_tasks").addColumn("id", "text", (col) => col.primaryKey()).addColumn("plugin_id", "text", (col) => col.notNull()).addColumn("task_name", "text", (col) => col.notNull()).addColumn("schedule", "text", (col) => col.notNull()).addColumn("is_oneshot", "integer", (col) => col.notNull().defaultTo(0)).addColumn("data", "text").addColumn("next_run_at", "text", (col) => col.notNull()).addColumn("last_run_at", "text").addColumn("status", "text", (col) => col.notNull().defaultTo("idle")).addColumn("locked_at", "text").addColumn("enabled", "integer", (col) => col.notNull().defaultTo(1)).addColumn("created_at", "text", (col) => col.defaultTo(currentTimestamp(db))).addUniqueConstraint("uq_cron_tasks_plugin_task", ["plugin_id", "task_name"]).execute();
|
|
1144
1144
|
await db.schema.createIndex("idx_cron_tasks_due").on("_emdash_cron_tasks").columns([
|
|
1145
1145
|
"enabled",
|
|
@@ -1148,17 +1148,17 @@ async function up$21(db) {
|
|
|
1148
1148
|
]).execute();
|
|
1149
1149
|
await db.schema.createIndex("idx_cron_tasks_plugin").on("_emdash_cron_tasks").column("plugin_id").execute();
|
|
1150
1150
|
}
|
|
1151
|
-
async function down$
|
|
1151
|
+
async function down$24(db) {
|
|
1152
1152
|
await db.schema.dropTable("_emdash_cron_tasks").execute();
|
|
1153
1153
|
}
|
|
1154
1154
|
|
|
1155
1155
|
//#endregion
|
|
1156
1156
|
//#region src/database/migrations/027_comments.ts
|
|
1157
1157
|
var _027_comments_exports = /* @__PURE__ */ __exportAll({
|
|
1158
|
-
down: () => down$
|
|
1159
|
-
up: () => up$
|
|
1158
|
+
down: () => down$23,
|
|
1159
|
+
up: () => up$23
|
|
1160
1160
|
});
|
|
1161
|
-
async function up$
|
|
1161
|
+
async function up$23(db) {
|
|
1162
1162
|
await db.schema.createTable("_emdash_comments").addColumn("id", "text", (col) => col.primaryKey()).addColumn("collection", "text", (col) => col.notNull()).addColumn("content_id", "text", (col) => col.notNull()).addColumn("parent_id", "text", (col) => col.references("_emdash_comments.id").onDelete("cascade")).addColumn("author_name", "text", (col) => col.notNull()).addColumn("author_email", "text", (col) => col.notNull()).addColumn("author_url", "text").addColumn("author_user_id", "text", (col) => col.references("users.id").onDelete("set null")).addColumn("body", "text", (col) => col.notNull()).addColumn("status", "text", (col) => col.notNull().defaultTo("pending")).addColumn("ip_hash", "text").addColumn("user_agent", "text").addColumn("moderation_metadata", "text").addColumn("created_at", "text", (col) => col.defaultTo(currentTimestamp(db))).addColumn("updated_at", "text", (col) => col.defaultTo(currentTimestamp(db))).execute();
|
|
1163
1163
|
await db.schema.createIndex("idx_comments_content").on("_emdash_comments").columns([
|
|
1164
1164
|
"collection",
|
|
@@ -1174,30 +1174,30 @@ async function up$20(db) {
|
|
|
1174
1174
|
await db.schema.alterTable("_emdash_collections").addColumn("comments_closed_after_days", "integer", (col) => col.defaultTo(90)).execute();
|
|
1175
1175
|
await db.schema.alterTable("_emdash_collections").addColumn("comments_auto_approve_users", "integer", (col) => col.defaultTo(1)).execute();
|
|
1176
1176
|
}
|
|
1177
|
-
async function down$
|
|
1177
|
+
async function down$23(db) {
|
|
1178
1178
|
await db.schema.dropTable("_emdash_comments").execute();
|
|
1179
1179
|
}
|
|
1180
1180
|
|
|
1181
1181
|
//#endregion
|
|
1182
1182
|
//#region src/database/migrations/028_drop_author_url.ts
|
|
1183
1183
|
var _028_drop_author_url_exports = /* @__PURE__ */ __exportAll({
|
|
1184
|
-
down: () => down$
|
|
1185
|
-
up: () => up$
|
|
1184
|
+
down: () => down$22,
|
|
1185
|
+
up: () => up$22
|
|
1186
1186
|
});
|
|
1187
|
-
async function up$
|
|
1187
|
+
async function up$22(db) {
|
|
1188
1188
|
await sql`ALTER TABLE _emdash_comments DROP COLUMN author_url`.execute(db);
|
|
1189
1189
|
}
|
|
1190
|
-
async function down$
|
|
1190
|
+
async function down$22(db) {
|
|
1191
1191
|
await db.schema.alterTable("_emdash_comments").addColumn("author_url", "text").execute();
|
|
1192
1192
|
}
|
|
1193
1193
|
|
|
1194
1194
|
//#endregion
|
|
1195
1195
|
//#region src/database/migrations/029_redirects.ts
|
|
1196
1196
|
var _029_redirects_exports = /* @__PURE__ */ __exportAll({
|
|
1197
|
-
down: () => down$
|
|
1198
|
-
up: () => up$
|
|
1197
|
+
down: () => down$21,
|
|
1198
|
+
up: () => up$21
|
|
1199
1199
|
});
|
|
1200
|
-
async function up$
|
|
1200
|
+
async function up$21(db) {
|
|
1201
1201
|
await db.schema.createTable("_emdash_redirects").addColumn("id", "text", (col) => col.primaryKey()).addColumn("source", "text", (col) => col.notNull()).addColumn("destination", "text", (col) => col.notNull()).addColumn("type", "integer", (col) => col.notNull().defaultTo(301)).addColumn("is_pattern", "integer", (col) => col.notNull().defaultTo(0)).addColumn("enabled", "integer", (col) => col.notNull().defaultTo(1)).addColumn("hits", "integer", (col) => col.notNull().defaultTo(0)).addColumn("last_hit_at", "text").addColumn("group_name", "text").addColumn("auto", "integer", (col) => col.notNull().defaultTo(0)).addColumn("created_at", "text", (col) => col.defaultTo(currentTimestamp(db))).addColumn("updated_at", "text", (col) => col.defaultTo(currentTimestamp(db))).execute();
|
|
1202
1202
|
await db.schema.createIndex("idx_redirects_source").on("_emdash_redirects").column("source").execute();
|
|
1203
1203
|
await db.schema.createIndex("idx_redirects_enabled").on("_emdash_redirects").column("enabled").execute();
|
|
@@ -1206,7 +1206,7 @@ async function up$18(db) {
|
|
|
1206
1206
|
await db.schema.createIndex("idx_404_log_path").on("_emdash_404_log").column("path").execute();
|
|
1207
1207
|
await db.schema.createIndex("idx_404_log_created").on("_emdash_404_log").column("created_at").execute();
|
|
1208
1208
|
}
|
|
1209
|
-
async function down$
|
|
1209
|
+
async function down$21(db) {
|
|
1210
1210
|
await db.schema.dropTable("_emdash_404_log").execute();
|
|
1211
1211
|
await db.schema.dropTable("_emdash_redirects").execute();
|
|
1212
1212
|
}
|
|
@@ -1214,8 +1214,8 @@ async function down$18(db) {
|
|
|
1214
1214
|
//#endregion
|
|
1215
1215
|
//#region src/database/migrations/030_widen_scheduled_index.ts
|
|
1216
1216
|
var _030_widen_scheduled_index_exports = /* @__PURE__ */ __exportAll({
|
|
1217
|
-
down: () => down$
|
|
1218
|
-
up: () => up$
|
|
1217
|
+
down: () => down$20,
|
|
1218
|
+
up: () => up$20
|
|
1219
1219
|
});
|
|
1220
1220
|
/**
|
|
1221
1221
|
* Migration: Widen scheduled publishing index
|
|
@@ -1224,7 +1224,7 @@ var _030_widen_scheduled_index_exports = /* @__PURE__ */ __exportAll({
|
|
|
1224
1224
|
* Published posts can now have scheduled draft changes, so widen the
|
|
1225
1225
|
* index to cover all rows where scheduled_at IS NOT NULL.
|
|
1226
1226
|
*/
|
|
1227
|
-
async function up$
|
|
1227
|
+
async function up$20(db) {
|
|
1228
1228
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
1229
1229
|
for (const tableName of tableNames) {
|
|
1230
1230
|
const table = { name: tableName };
|
|
@@ -1238,7 +1238,7 @@ async function up$17(db) {
|
|
|
1238
1238
|
`.execute(db);
|
|
1239
1239
|
}
|
|
1240
1240
|
}
|
|
1241
|
-
async function down$
|
|
1241
|
+
async function down$20(db) {
|
|
1242
1242
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
1243
1243
|
for (const tableName of tableNames) {
|
|
1244
1244
|
const table = { name: tableName };
|
|
@@ -1256,10 +1256,10 @@ async function down$17(db) {
|
|
|
1256
1256
|
//#endregion
|
|
1257
1257
|
//#region src/database/migrations/031_bylines.ts
|
|
1258
1258
|
var _031_bylines_exports = /* @__PURE__ */ __exportAll({
|
|
1259
|
-
down: () => down$
|
|
1260
|
-
up: () => up$
|
|
1259
|
+
down: () => down$19,
|
|
1260
|
+
up: () => up$19
|
|
1261
1261
|
});
|
|
1262
|
-
async function up$
|
|
1262
|
+
async function up$19(db) {
|
|
1263
1263
|
await db.schema.createTable("_emdash_bylines").addColumn("id", "text", (col) => col.primaryKey()).addColumn("slug", "text", (col) => col.notNull().unique()).addColumn("display_name", "text", (col) => col.notNull()).addColumn("bio", "text").addColumn("avatar_media_id", "text", (col) => col.references("media.id").onDelete("set null")).addColumn("website_url", "text").addColumn("user_id", "text", (col) => col.references("users.id").onDelete("set null")).addColumn("is_guest", "integer", (col) => col.notNull().defaultTo(0)).addColumn("created_at", "text", (col) => col.defaultTo(currentTimestamp(db))).addColumn("updated_at", "text", (col) => col.defaultTo(currentTimestamp(db))).execute();
|
|
1264
1264
|
await sql`
|
|
1265
1265
|
CREATE UNIQUE INDEX ${sql.ref("idx_bylines_user_id_unique")}
|
|
@@ -1291,7 +1291,7 @@ async function up$16(db) {
|
|
|
1291
1291
|
`.execute(db);
|
|
1292
1292
|
}
|
|
1293
1293
|
}
|
|
1294
|
-
async function down$
|
|
1294
|
+
async function down$19(db) {
|
|
1295
1295
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
1296
1296
|
for (const tableName of tableNames) {
|
|
1297
1297
|
await sql`
|
|
@@ -1309,8 +1309,8 @@ async function down$16(db) {
|
|
|
1309
1309
|
//#endregion
|
|
1310
1310
|
//#region src/database/migrations/032_rate_limits.ts
|
|
1311
1311
|
var _032_rate_limits_exports = /* @__PURE__ */ __exportAll({
|
|
1312
|
-
down: () => down$
|
|
1313
|
-
up: () => up$
|
|
1312
|
+
down: () => down$18,
|
|
1313
|
+
up: () => up$18
|
|
1314
1314
|
});
|
|
1315
1315
|
/**
|
|
1316
1316
|
* Migration: Rate limits table + device code polling tracking.
|
|
@@ -1321,12 +1321,12 @@ var _032_rate_limits_exports = /* @__PURE__ */ __exportAll({
|
|
|
1321
1321
|
* 2. Add last_polled_at column to _emdash_device_codes for
|
|
1322
1322
|
* RFC 8628 slow_down enforcement.
|
|
1323
1323
|
*/
|
|
1324
|
-
async function up$
|
|
1324
|
+
async function up$18(db) {
|
|
1325
1325
|
await db.schema.createTable("_emdash_rate_limits").addColumn("key", "text", (col) => col.notNull()).addColumn("window", "text", (col) => col.notNull()).addColumn("count", "integer", (col) => col.notNull().defaultTo(1)).addPrimaryKeyConstraint("pk_rate_limits", ["key", "window"]).execute();
|
|
1326
1326
|
await db.schema.createIndex("idx_rate_limits_window").on("_emdash_rate_limits").column("window").execute();
|
|
1327
1327
|
await db.schema.alterTable("_emdash_device_codes").addColumn("last_polled_at", "text").execute();
|
|
1328
1328
|
}
|
|
1329
|
-
async function down$
|
|
1329
|
+
async function down$18(db) {
|
|
1330
1330
|
await db.schema.dropTable("_emdash_rate_limits").execute();
|
|
1331
1331
|
await db.schema.alterTable("_emdash_device_codes").dropColumn("last_polled_at").execute();
|
|
1332
1332
|
}
|
|
@@ -1334,8 +1334,8 @@ async function down$15(db) {
|
|
|
1334
1334
|
//#endregion
|
|
1335
1335
|
//#region src/database/migrations/033_optimize_content_indexes.ts
|
|
1336
1336
|
var _033_optimize_content_indexes_exports = /* @__PURE__ */ __exportAll({
|
|
1337
|
-
down: () => down$
|
|
1338
|
-
up: () => up$
|
|
1337
|
+
down: () => down$17,
|
|
1338
|
+
up: () => up$17
|
|
1339
1339
|
});
|
|
1340
1340
|
/**
|
|
1341
1341
|
* Migration: Optimize content table indexes for D1 performance
|
|
@@ -1348,7 +1348,7 @@ var _033_optimize_content_indexes_exports = /* @__PURE__ */ __exportAll({
|
|
|
1348
1348
|
*
|
|
1349
1349
|
* Impact: Reduces D1 row reads by 90%+ for admin panel operations.
|
|
1350
1350
|
*/
|
|
1351
|
-
async function up$
|
|
1351
|
+
async function up$17(db) {
|
|
1352
1352
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
1353
1353
|
for (const tableName of tableNames) {
|
|
1354
1354
|
const table = { name: tableName };
|
|
@@ -1390,7 +1390,7 @@ async function up$14(db) {
|
|
|
1390
1390
|
WHERE status = 'trash'
|
|
1391
1391
|
`.execute(db);
|
|
1392
1392
|
}
|
|
1393
|
-
async function down$
|
|
1393
|
+
async function down$17(db) {
|
|
1394
1394
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
1395
1395
|
for (const tableName of tableNames) {
|
|
1396
1396
|
const table = { name: tableName };
|
|
@@ -1423,10 +1423,10 @@ async function down$14(db) {
|
|
|
1423
1423
|
//#endregion
|
|
1424
1424
|
//#region src/database/migrations/034_published_at_index.ts
|
|
1425
1425
|
var _034_published_at_index_exports = /* @__PURE__ */ __exportAll({
|
|
1426
|
-
down: () => down$
|
|
1427
|
-
up: () => up$
|
|
1426
|
+
down: () => down$16,
|
|
1427
|
+
up: () => up$16
|
|
1428
1428
|
});
|
|
1429
|
-
async function up$
|
|
1429
|
+
async function up$16(db) {
|
|
1430
1430
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
1431
1431
|
for (const tableName of tableNames) {
|
|
1432
1432
|
const table = { name: tableName };
|
|
@@ -1436,7 +1436,7 @@ async function up$13(db) {
|
|
|
1436
1436
|
`.execute(db);
|
|
1437
1437
|
}
|
|
1438
1438
|
}
|
|
1439
|
-
async function down$
|
|
1439
|
+
async function down$16(db) {
|
|
1440
1440
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
1441
1441
|
for (const tableName of tableNames) {
|
|
1442
1442
|
const table = { name: tableName };
|
|
@@ -1447,8 +1447,8 @@ async function down$13(db) {
|
|
|
1447
1447
|
//#endregion
|
|
1448
1448
|
//#region src/database/migrations/035_bounded_404_log.ts
|
|
1449
1449
|
var _035_bounded_404_log_exports = /* @__PURE__ */ __exportAll({
|
|
1450
|
-
down: () => down$
|
|
1451
|
-
up: () => up$
|
|
1450
|
+
down: () => down$15,
|
|
1451
|
+
up: () => up$15
|
|
1452
1452
|
});
|
|
1453
1453
|
/**
|
|
1454
1454
|
* Migration: Bounded 404 logging
|
|
@@ -1466,7 +1466,7 @@ var _035_bounded_404_log_exports = /* @__PURE__ */ __exportAll({
|
|
|
1466
1466
|
* path and summing hits
|
|
1467
1467
|
* - Adds a UNIQUE index on `path` so upsert semantics work
|
|
1468
1468
|
*/
|
|
1469
|
-
async function up$
|
|
1469
|
+
async function up$15(db) {
|
|
1470
1470
|
const hitsExists = await columnExists(db, "_emdash_404_log", "hits");
|
|
1471
1471
|
if (!hitsExists) await db.schema.alterTable("_emdash_404_log").addColumn("hits", "integer", (col) => col.notNull().defaultTo(1)).execute();
|
|
1472
1472
|
if (!await columnExists(db, "_emdash_404_log", "last_seen_at")) await db.schema.alterTable("_emdash_404_log").addColumn("last_seen_at", "text").execute();
|
|
@@ -1515,7 +1515,7 @@ async function up$12(db) {
|
|
|
1515
1515
|
await db.schema.dropIndex("idx_404_log_path").ifExists().execute();
|
|
1516
1516
|
await db.schema.createIndex("idx_404_log_last_seen").ifNotExists().on("_emdash_404_log").column("last_seen_at").execute();
|
|
1517
1517
|
}
|
|
1518
|
-
async function down$
|
|
1518
|
+
async function down$15(db) {
|
|
1519
1519
|
await db.schema.dropIndex("idx_404_log_last_seen").ifExists().execute();
|
|
1520
1520
|
await db.schema.dropIndex("idx_404_log_path_unique").ifExists().execute();
|
|
1521
1521
|
await db.schema.createIndex("idx_404_log_path").ifNotExists().on("_emdash_404_log").column("path").execute();
|
|
@@ -1526,8 +1526,8 @@ async function down$12(db) {
|
|
|
1526
1526
|
//#endregion
|
|
1527
1527
|
//#region src/database/migrations/036_i18n_menus_and_taxonomies.ts
|
|
1528
1528
|
var _036_i18n_menus_and_taxonomies_exports = /* @__PURE__ */ __exportAll({
|
|
1529
|
-
down: () => down$
|
|
1530
|
-
up: () => up$
|
|
1529
|
+
down: () => down$14,
|
|
1530
|
+
up: () => up$14
|
|
1531
1531
|
});
|
|
1532
1532
|
/**
|
|
1533
1533
|
* i18n for menus + taxonomies. Adds `locale` + `translation_group` to system
|
|
@@ -1538,7 +1538,7 @@ var _036_i18n_menus_and_taxonomies_exports = /* @__PURE__ */ __exportAll({
|
|
|
1538
1538
|
function getDefaultLocale$1() {
|
|
1539
1539
|
return getI18nConfig()?.defaultLocale ?? "en";
|
|
1540
1540
|
}
|
|
1541
|
-
async function up$
|
|
1541
|
+
async function up$14(db) {
|
|
1542
1542
|
const defaultLocale = getDefaultLocale$1();
|
|
1543
1543
|
if (isSqlite(db)) {
|
|
1544
1544
|
await rebuildContentTaxonomies(db);
|
|
@@ -1632,19 +1632,20 @@ async function rebuildTaxonomyDefs(db, defaultLocale) {
|
|
|
1632
1632
|
await db.schema.createIndex("idx__emdash_taxonomy_defs_translation_group").on("_emdash_taxonomy_defs").column("translation_group").execute();
|
|
1633
1633
|
}
|
|
1634
1634
|
async function rebuildContentTaxonomies(db) {
|
|
1635
|
-
if ((await sql`PRAGMA foreign_key_list(content_taxonomies)`.execute(db)).rows.length
|
|
1636
|
-
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
|
|
1641
|
-
|
|
1642
|
-
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
|
|
1646
|
-
|
|
1647
|
-
|
|
1635
|
+
if ((await sql`PRAGMA foreign_key_list(content_taxonomies)`.execute(db)).rows.length > 0) {
|
|
1636
|
+
await sql.raw(`DROP TABLE IF EXISTS "content_taxonomies_new"`).execute(db);
|
|
1637
|
+
await db.schema.createTable("content_taxonomies_new").addColumn("collection", "text", (c) => c.notNull()).addColumn("entry_id", "text", (c) => c.notNull()).addColumn("taxonomy_id", "text", (c) => c.notNull()).addPrimaryKeyConstraint("content_taxonomies_pk", [
|
|
1638
|
+
"collection",
|
|
1639
|
+
"entry_id",
|
|
1640
|
+
"taxonomy_id"
|
|
1641
|
+
]).execute();
|
|
1642
|
+
await sql`
|
|
1643
|
+
INSERT OR IGNORE INTO content_taxonomies_new (collection, entry_id, taxonomy_id)
|
|
1644
|
+
SELECT collection, entry_id, taxonomy_id FROM content_taxonomies
|
|
1645
|
+
`.execute(db);
|
|
1646
|
+
await db.schema.dropTable("content_taxonomies").execute();
|
|
1647
|
+
await sql`ALTER TABLE content_taxonomies_new RENAME TO content_taxonomies`.execute(db);
|
|
1648
|
+
}
|
|
1648
1649
|
await sql`CREATE INDEX IF NOT EXISTS idx_content_taxonomies_term ON content_taxonomies(taxonomy_id)`.execute(db);
|
|
1649
1650
|
}
|
|
1650
1651
|
async function remapMenuItemRefs(db) {
|
|
@@ -1752,7 +1753,7 @@ async function assertSingleLocale$1(db, defaultLocale) {
|
|
|
1752
1753
|
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.`);
|
|
1753
1754
|
}
|
|
1754
1755
|
}
|
|
1755
|
-
async function down$
|
|
1756
|
+
async function down$14(db) {
|
|
1756
1757
|
const defaultLocale = getDefaultLocale$1();
|
|
1757
1758
|
await assertSingleLocale$1(db, defaultLocale);
|
|
1758
1759
|
await assertContentTaxonomiesResolve(db, defaultLocale);
|
|
@@ -1850,21 +1851,21 @@ async function rebuildTaxonomyDefsDown(db) {
|
|
|
1850
1851
|
//#endregion
|
|
1851
1852
|
//#region src/database/migrations/037_credential_algorithm.ts
|
|
1852
1853
|
var _037_credential_algorithm_exports = /* @__PURE__ */ __exportAll({
|
|
1853
|
-
down: () => down$
|
|
1854
|
-
up: () => up$
|
|
1854
|
+
down: () => down$13,
|
|
1855
|
+
up: () => up$13
|
|
1855
1856
|
});
|
|
1856
|
-
async function up$
|
|
1857
|
+
async function up$13(db) {
|
|
1857
1858
|
if (!await columnExists(db, "credentials", "algorithm")) await db.schema.alterTable("credentials").addColumn("algorithm", "integer", (col) => col.notNull().defaultTo(-7)).execute();
|
|
1858
1859
|
}
|
|
1859
|
-
async function down$
|
|
1860
|
+
async function down$13(db) {
|
|
1860
1861
|
if (await columnExists(db, "credentials", "algorithm")) await db.schema.alterTable("credentials").dropColumn("algorithm").execute();
|
|
1861
1862
|
}
|
|
1862
1863
|
|
|
1863
1864
|
//#endregion
|
|
1864
1865
|
//#region src/database/migrations/038_registry_plugin_state.ts
|
|
1865
1866
|
var _038_registry_plugin_state_exports = /* @__PURE__ */ __exportAll({
|
|
1866
|
-
down: () => down$
|
|
1867
|
-
up: () => up$
|
|
1867
|
+
down: () => down$12,
|
|
1868
|
+
up: () => up$12
|
|
1868
1869
|
});
|
|
1869
1870
|
/**
|
|
1870
1871
|
* Migration: Add registry fields to _plugin_state
|
|
@@ -1892,7 +1893,7 @@ var _038_registry_plugin_state_exports = /* @__PURE__ */ __exportAll({
|
|
|
1892
1893
|
* checks before adding to keep the migration safe under partial
|
|
1893
1894
|
* re-application. The same pattern is used in 019_i18n.ts.
|
|
1894
1895
|
*/
|
|
1895
|
-
async function up$
|
|
1896
|
+
async function up$12(db) {
|
|
1896
1897
|
if (isSqlite(db)) await upSqlite(db);
|
|
1897
1898
|
else await upPostgres(db);
|
|
1898
1899
|
}
|
|
@@ -1935,7 +1936,7 @@ async function upPostgres(db) {
|
|
|
1935
1936
|
WHERE source = 'registry'
|
|
1936
1937
|
`.execute(db);
|
|
1937
1938
|
}
|
|
1938
|
-
async function down$
|
|
1939
|
+
async function down$12(db) {
|
|
1939
1940
|
await sql`
|
|
1940
1941
|
DROP INDEX IF EXISTS idx_plugin_state_registry
|
|
1941
1942
|
`.execute(db);
|
|
@@ -1952,10 +1953,10 @@ async function down$9(db) {
|
|
|
1952
1953
|
//#endregion
|
|
1953
1954
|
//#region src/database/migrations/039_fix_fts5_triggers.ts
|
|
1954
1955
|
var _039_fix_fts5_triggers_exports = /* @__PURE__ */ __exportAll({
|
|
1955
|
-
down: () => down$
|
|
1956
|
-
up: () => up$
|
|
1956
|
+
down: () => down$11,
|
|
1957
|
+
up: () => up$11
|
|
1957
1958
|
});
|
|
1958
|
-
async function up$
|
|
1959
|
+
async function up$11(db) {
|
|
1959
1960
|
if (!isSqlite(db)) return;
|
|
1960
1961
|
const collections = await sql`
|
|
1961
1962
|
SELECT slug, search_config FROM _emdash_collections
|
|
@@ -1989,7 +1990,7 @@ async function up$8(db) {
|
|
|
1989
1990
|
* at runtime, not by this migration, so leaving them in their
|
|
1990
1991
|
* corruption-safe state on rollback is correct.
|
|
1991
1992
|
*/
|
|
1992
|
-
async function down$
|
|
1993
|
+
async function down$11(_db) {}
|
|
1993
1994
|
function isSearchEnabled(searchConfig) {
|
|
1994
1995
|
if (!searchConfig) return false;
|
|
1995
1996
|
try {
|
|
@@ -2081,8 +2082,8 @@ async function dropFtsObjects(db, collectionSlug) {
|
|
|
2081
2082
|
//#endregion
|
|
2082
2083
|
//#region src/database/migrations/040_byline_i18n.ts
|
|
2083
2084
|
var _040_byline_i18n_exports = /* @__PURE__ */ __exportAll({
|
|
2084
|
-
down: () => down$
|
|
2085
|
-
up: () => up$
|
|
2085
|
+
down: () => down$10,
|
|
2086
|
+
up: () => up$10
|
|
2086
2087
|
});
|
|
2087
2088
|
/**
|
|
2088
2089
|
* i18n for bylines. Adds `locale` + `translation_group` to `_emdash_bylines`
|
|
@@ -2110,7 +2111,7 @@ var _040_byline_i18n_exports = /* @__PURE__ */ __exportAll({
|
|
|
2110
2111
|
function getDefaultLocale() {
|
|
2111
2112
|
return getI18nConfig()?.defaultLocale ?? "en";
|
|
2112
2113
|
}
|
|
2113
|
-
async function up$
|
|
2114
|
+
async function up$10(db) {
|
|
2114
2115
|
const defaultLocale = getDefaultLocale();
|
|
2115
2116
|
if (isSqlite(db)) {
|
|
2116
2117
|
await rebuildContentBylines(db);
|
|
@@ -2267,7 +2268,7 @@ async function assertSingleLocale(db, defaultLocale) {
|
|
|
2267
2268
|
const count = Number(result.rows[0]?.count ?? 0);
|
|
2268
2269
|
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.`);
|
|
2269
2270
|
}
|
|
2270
|
-
async function down$
|
|
2271
|
+
async function down$10(db) {
|
|
2271
2272
|
const defaultLocale = getDefaultLocale();
|
|
2272
2273
|
await assertSingleLocale(db, defaultLocale);
|
|
2273
2274
|
await assertContentBylinesResolve(db, defaultLocale);
|
|
@@ -2386,8 +2387,8 @@ async function restoreContentBylinesFk(db) {
|
|
|
2386
2387
|
//#endregion
|
|
2387
2388
|
//#region src/database/migrations/041_content_locale_list_index.ts
|
|
2388
2389
|
var _041_content_locale_list_index_exports = /* @__PURE__ */ __exportAll({
|
|
2389
|
-
down: () => down$
|
|
2390
|
-
up: () => up$
|
|
2390
|
+
down: () => down$9,
|
|
2391
|
+
up: () => up$9
|
|
2391
2392
|
});
|
|
2392
2393
|
/**
|
|
2393
2394
|
* Migration: locale-aware composite indexes for content list queries.
|
|
@@ -2407,7 +2408,7 @@ var _041_content_locale_list_index_exports = /* @__PURE__ */ __exportAll({
|
|
|
2407
2408
|
* slugs as short as 40 chars, making both names truncate to the same string.
|
|
2408
2409
|
* Keep these identical to the names in `schema/registry.ts`.
|
|
2409
2410
|
*/
|
|
2410
|
-
async function up$
|
|
2411
|
+
async function up$9(db) {
|
|
2411
2412
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
2412
2413
|
for (const tableName of tableNames) {
|
|
2413
2414
|
await sql`
|
|
@@ -2420,7 +2421,7 @@ async function up$6(db) {
|
|
|
2420
2421
|
`.execute(db);
|
|
2421
2422
|
}
|
|
2422
2423
|
}
|
|
2423
|
-
async function down$
|
|
2424
|
+
async function down$9(db) {
|
|
2424
2425
|
const tableNames = await listTablesLike(db, "ec_%");
|
|
2425
2426
|
for (const tableName of tableNames) {
|
|
2426
2427
|
await sql`DROP INDEX IF EXISTS ${sql.ref(`idx_${tableName}_loc_upd`)}`.execute(db);
|
|
@@ -2431,8 +2432,8 @@ async function down$6(db) {
|
|
|
2431
2432
|
//#endregion
|
|
2432
2433
|
//#region src/database/migrations/042_byline_fields.ts
|
|
2433
2434
|
var _042_byline_fields_exports = /* @__PURE__ */ __exportAll({
|
|
2434
|
-
down: () => down$
|
|
2435
|
-
up: () => up$
|
|
2435
|
+
down: () => down$8,
|
|
2436
|
+
up: () => up$8
|
|
2436
2437
|
});
|
|
2437
2438
|
/**
|
|
2438
2439
|
* Byline custom fields (Discussion #1174). Adds three tables and a
|
|
@@ -2477,7 +2478,7 @@ var _042_byline_fields_exports = /* @__PURE__ */ __exportAll({
|
|
|
2477
2478
|
* reference it. If `down()` runs after a partial `up()`, missing tables
|
|
2478
2479
|
* are tolerated (`DROP TABLE IF EXISTS`).
|
|
2479
2480
|
*/
|
|
2480
|
-
async function up$
|
|
2481
|
+
async function up$8(db) {
|
|
2481
2482
|
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();
|
|
2482
2483
|
await db.schema.createIndex("idx__emdash_byline_fields_sort_order").ifNotExists().on("_emdash_byline_fields").column("sort_order").execute();
|
|
2483
2484
|
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();
|
|
@@ -2500,7 +2501,7 @@ async function up$5(db) {
|
|
|
2500
2501
|
* `up()` (only one or two tables landed) still settles the database back
|
|
2501
2502
|
* to its pre-042 state.
|
|
2502
2503
|
*/
|
|
2503
|
-
async function down$
|
|
2504
|
+
async function down$8(db) {
|
|
2504
2505
|
await db.schema.dropTable("_emdash_byline_field_group_values").ifExists().execute();
|
|
2505
2506
|
await db.schema.dropTable("_emdash_byline_field_values").ifExists().execute();
|
|
2506
2507
|
await db.schema.dropTable("_emdash_byline_fields").ifExists().execute();
|
|
@@ -2510,8 +2511,8 @@ async function down$5(db) {
|
|
|
2510
2511
|
//#endregion
|
|
2511
2512
|
//#region src/database/migrations/043_content_references.ts
|
|
2512
2513
|
var _043_content_references_exports = /* @__PURE__ */ __exportAll({
|
|
2513
|
-
down: () => down$
|
|
2514
|
-
up: () => up$
|
|
2514
|
+
down: () => down$7,
|
|
2515
|
+
up: () => up$7
|
|
2515
2516
|
});
|
|
2516
2517
|
/**
|
|
2517
2518
|
* Content references.
|
|
@@ -2531,7 +2532,7 @@ var _043_content_references_exports = /* @__PURE__ */ __exportAll({
|
|
|
2531
2532
|
* race-recovery path) re-applies cleanly — including any indexes that landed in
|
|
2532
2533
|
* the failed pass after their table.
|
|
2533
2534
|
*/
|
|
2534
|
-
async function up$
|
|
2535
|
+
async function up$7(db) {
|
|
2535
2536
|
const defaultLocale = getI18nConfig()?.defaultLocale ?? "en";
|
|
2536
2537
|
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();
|
|
2537
2538
|
await db.schema.createIndex("idx__emdash_relations_locale").ifNotExists().on("_emdash_relations").column("locale").execute();
|
|
@@ -2552,7 +2553,7 @@ async function up$4(db) {
|
|
|
2552
2553
|
await db.schema.createIndex("idx__emdash_content_references_child").ifNotExists().on("_emdash_content_references").columns(["child_group", "relation_group"]).execute();
|
|
2553
2554
|
await db.schema.createIndex("idx__emdash_content_references_relation").ifNotExists().on("_emdash_content_references").column("relation_group").execute();
|
|
2554
2555
|
}
|
|
2555
|
-
async function down$
|
|
2556
|
+
async function down$7(db) {
|
|
2556
2557
|
await db.schema.dropTable("_emdash_content_references").ifExists().execute();
|
|
2557
2558
|
await db.schema.dropTable("_emdash_relations").ifExists().execute();
|
|
2558
2559
|
}
|
|
@@ -2560,8 +2561,8 @@ async function down$4(db) {
|
|
|
2560
2561
|
//#endregion
|
|
2561
2562
|
//#region src/database/migrations/044_comment_reactions.ts
|
|
2562
2563
|
var _044_comment_reactions_exports = /* @__PURE__ */ __exportAll({
|
|
2563
|
-
down: () => down$
|
|
2564
|
-
up: () => up$
|
|
2564
|
+
down: () => down$6,
|
|
2565
|
+
up: () => up$6
|
|
2565
2566
|
});
|
|
2566
2567
|
/**
|
|
2567
2568
|
* Comment reactions (Tier 1 of the best-in-class comments RFC).
|
|
@@ -2573,7 +2574,7 @@ var _044_comment_reactions_exports = /* @__PURE__ */ __exportAll({
|
|
|
2573
2574
|
*
|
|
2574
2575
|
* Additive and backward-compatible: a new table, no change to existing schema.
|
|
2575
2576
|
*/
|
|
2576
|
-
async function up$
|
|
2577
|
+
async function up$6(db) {
|
|
2577
2578
|
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();
|
|
2578
2579
|
await db.schema.createIndex("idx_comment_reactions_unique").ifNotExists().on("_emdash_comment_reactions").columns([
|
|
2579
2580
|
"comment_id",
|
|
@@ -2583,15 +2584,15 @@ async function up$3(db) {
|
|
|
2583
2584
|
await db.schema.createIndex("idx_comment_reactions_comment").ifNotExists().on("_emdash_comment_reactions").column("comment_id").execute();
|
|
2584
2585
|
await db.schema.createIndex("idx_comment_reactions_voter").ifNotExists().on("_emdash_comment_reactions").columns(["voter_hash", "created_at"]).execute();
|
|
2585
2586
|
}
|
|
2586
|
-
async function down$
|
|
2587
|
+
async function down$6(db) {
|
|
2587
2588
|
await db.schema.dropTable("_emdash_comment_reactions").execute();
|
|
2588
2589
|
}
|
|
2589
2590
|
|
|
2590
2591
|
//#endregion
|
|
2591
2592
|
//#region src/database/migrations/045_taxonomy_parent_group.ts
|
|
2592
2593
|
var _045_taxonomy_parent_group_exports = /* @__PURE__ */ __exportAll({
|
|
2593
|
-
down: () => down$
|
|
2594
|
-
up: () => up$
|
|
2594
|
+
down: () => down$5,
|
|
2595
|
+
up: () => up$5
|
|
2595
2596
|
});
|
|
2596
2597
|
/**
|
|
2597
2598
|
* Store the parent's `translation_group` in `taxonomies.parent_id` instead of a
|
|
@@ -2621,7 +2622,7 @@ var _045_taxonomy_parent_group_exports = /* @__PURE__ */ __exportAll({
|
|
|
2621
2622
|
* Dialect-independent: the correlated-subquery `UPDATE` runs on SQLite (incl.
|
|
2622
2623
|
* D1) and Postgres alike.
|
|
2623
2624
|
*/
|
|
2624
|
-
async function up$
|
|
2625
|
+
async function up$5(db) {
|
|
2625
2626
|
await sql`
|
|
2626
2627
|
UPDATE taxonomies
|
|
2627
2628
|
SET parent_id = (
|
|
@@ -2643,7 +2644,7 @@ async function up$2(db) {
|
|
|
2643
2644
|
* locale (the pre-migration shape). Rows with no same-locale parent are left as
|
|
2644
2645
|
* they are rather than nulled, so a rollback never silently detaches a subtree.
|
|
2645
2646
|
*/
|
|
2646
|
-
async function down$
|
|
2647
|
+
async function down$5(db) {
|
|
2647
2648
|
await sql`
|
|
2648
2649
|
UPDATE taxonomies
|
|
2649
2650
|
SET parent_id = COALESCE(
|
|
@@ -2661,8 +2662,8 @@ async function down$2(db) {
|
|
|
2661
2662
|
//#endregion
|
|
2662
2663
|
//#region src/database/migrations/046_media_usage_index.ts
|
|
2663
2664
|
var _046_media_usage_index_exports = /* @__PURE__ */ __exportAll({
|
|
2664
|
-
down: () => down$
|
|
2665
|
-
up: () => up$
|
|
2665
|
+
down: () => down$4,
|
|
2666
|
+
up: () => up$4
|
|
2666
2667
|
});
|
|
2667
2668
|
/**
|
|
2668
2669
|
* Internal media usage projection tables.
|
|
@@ -2671,7 +2672,7 @@ var _046_media_usage_index_exports = /* @__PURE__ */ __exportAll({
|
|
|
2671
2672
|
* imports, and no content-table scans. Production rows are introduced by later
|
|
2672
2673
|
* phases once the central snapshot/indexer path is reviewed.
|
|
2673
2674
|
*/
|
|
2674
|
-
async function up$
|
|
2675
|
+
async function up$4(db) {
|
|
2675
2676
|
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();
|
|
2676
2677
|
await db.schema.createIndex("idx__emdash_media_usage_sources_content").ifNotExists().on("_emdash_media_usage_sources").columns([
|
|
2677
2678
|
"source_type",
|
|
@@ -2693,7 +2694,7 @@ async function up$1(db) {
|
|
|
2693
2694
|
await db.schema.createIndex("idx__emdash_media_usage_provider_asset").ifNotExists().on("_emdash_media_usage").columns(["provider", "provider_asset_id"]).execute();
|
|
2694
2695
|
await db.schema.createIndex("idx__emdash_media_usage_source_generation").ifNotExists().on("_emdash_media_usage").columns(["source_key", "generation"]).execute();
|
|
2695
2696
|
}
|
|
2696
|
-
async function down$
|
|
2697
|
+
async function down$4(db) {
|
|
2697
2698
|
await db.schema.dropTable("_emdash_media_usage").ifExists().execute();
|
|
2698
2699
|
await db.schema.dropTable("_emdash_media_usage_sources").ifExists().execute();
|
|
2699
2700
|
}
|
|
@@ -2701,8 +2702,8 @@ async function down$1(db) {
|
|
|
2701
2702
|
//#endregion
|
|
2702
2703
|
//#region src/database/migrations/047_restore_taxonomy_parent_index.ts
|
|
2703
2704
|
var _047_restore_taxonomy_parent_index_exports = /* @__PURE__ */ __exportAll({
|
|
2704
|
-
down: () => down,
|
|
2705
|
-
up: () => up
|
|
2705
|
+
down: () => down$3,
|
|
2706
|
+
up: () => up$3
|
|
2706
2707
|
});
|
|
2707
2708
|
/**
|
|
2708
2709
|
* Restore `idx_taxonomies_parent` on `taxonomies(parent_id)` (#1665).
|
|
@@ -2719,13 +2720,161 @@ var _047_restore_taxonomy_parent_index_exports = /* @__PURE__ */ __exportAll({
|
|
|
2719
2720
|
* index here. Fresh installs also get it in 036's rebuild for parity with the
|
|
2720
2721
|
* other rebuilt tables, making this a no-op for them.
|
|
2721
2722
|
*/
|
|
2722
|
-
async function up(db) {
|
|
2723
|
+
async function up$3(db) {
|
|
2723
2724
|
await db.schema.createIndex("idx_taxonomies_parent").ifNotExists().on("taxonomies").column("parent_id").execute();
|
|
2724
2725
|
}
|
|
2725
|
-
async function down(db) {
|
|
2726
|
+
async function down$3(db) {
|
|
2726
2727
|
await db.schema.dropIndex("idx_taxonomies_parent").ifExists().execute();
|
|
2727
2728
|
}
|
|
2728
2729
|
|
|
2730
|
+
//#endregion
|
|
2731
|
+
//#region src/database/migrations/048_restore_content_taxonomies_term_index.ts
|
|
2732
|
+
var _048_restore_content_taxonomies_term_index_exports = /* @__PURE__ */ __exportAll({
|
|
2733
|
+
down: () => down$2,
|
|
2734
|
+
up: () => up$2
|
|
2735
|
+
});
|
|
2736
|
+
/**
|
|
2737
|
+
* Restore `idx_content_taxonomies_term` on `content_taxonomies(taxonomy_id)` (#1701).
|
|
2738
|
+
*
|
|
2739
|
+
* Migration 015 created this index. 036's SQLite/D1 table rebuild recreated it,
|
|
2740
|
+
* but the recreate was gated behind an FK-presence early-return: if a first run
|
|
2741
|
+
* committed the rebuild (stripping the FK and dropping the old index) and then
|
|
2742
|
+
* failed before the recreate, the retry saw zero FKs, skipped the whole body,
|
|
2743
|
+
* and never restored the index — while 036 was still recorded as applied. The
|
|
2744
|
+
* result was an install missing only this one index, with no forward migration
|
|
2745
|
+
* to recover it (the sibling `idx_taxonomies_parent` case was fixed by 047).
|
|
2746
|
+
*
|
|
2747
|
+
* 036 has since been fixed to recreate the index unconditionally, so fresh
|
|
2748
|
+
* installs are fine. This recovers the index on installs that hit the trap
|
|
2749
|
+
* before that fix. The Postgres path in 036 alters in place and keeps its
|
|
2750
|
+
* indexes, so it is unaffected; `ifNotExists` makes this a no-op there.
|
|
2751
|
+
*
|
|
2752
|
+
* Forward-only.
|
|
2753
|
+
*/
|
|
2754
|
+
async function up$2(db) {
|
|
2755
|
+
await db.schema.createIndex("idx_content_taxonomies_term").ifNotExists().on("content_taxonomies").column("taxonomy_id").execute();
|
|
2756
|
+
}
|
|
2757
|
+
async function down$2(db) {
|
|
2758
|
+
await db.schema.dropIndex("idx_content_taxonomies_term").ifExists().execute();
|
|
2759
|
+
}
|
|
2760
|
+
|
|
2761
|
+
//#endregion
|
|
2762
|
+
//#region src/database/migrations/049_taxonomies_name_locale_index.ts
|
|
2763
|
+
var _049_taxonomies_name_locale_index_exports = /* @__PURE__ */ __exportAll({
|
|
2764
|
+
down: () => down$1,
|
|
2765
|
+
up: () => up$1
|
|
2766
|
+
});
|
|
2767
|
+
/**
|
|
2768
|
+
* Add composite `idx_taxonomies_name_locale` on `taxonomies(name, locale)` (#1723).
|
|
2769
|
+
*
|
|
2770
|
+
* `TaxonomyRepository.findByName` filters `WHERE name = ? AND locale = ?`, but
|
|
2771
|
+
* the only indexes were the single-column `idx_taxonomies_name(name)` and
|
|
2772
|
+
* `idx_taxonomies_locale(locale)`. On SQLite/D1 with no `sqlite_stat1` the
|
|
2773
|
+
* planner picks `idx_taxonomies_locale` and reads *every* term in the locale,
|
|
2774
|
+
* filtering `name` in memory — once per facet rendered. On a site where one
|
|
2775
|
+
* taxonomy dominates a locale, each small facet still walks the whole locale.
|
|
2776
|
+
*
|
|
2777
|
+
* The composite resolves both equalities, so the planner searches only the one
|
|
2778
|
+
* taxonomy's terms. Its leftmost prefix (`name`) also serves every name-only
|
|
2779
|
+
* lookup, so it supersedes `idx_taxonomies_name`, which we drop. The
|
|
2780
|
+
* single-column `idx_taxonomies_locale` stays for locale-only lookups.
|
|
2781
|
+
*
|
|
2782
|
+
* Strictly additive: no query changes, and the dropped index is fully covered
|
|
2783
|
+
* by the new composite's prefix. Create-before-drop keeps name lookups indexed
|
|
2784
|
+
* at every point. Both statements are idempotent so a partial apply can retry.
|
|
2785
|
+
*/
|
|
2786
|
+
async function up$1(db) {
|
|
2787
|
+
await db.schema.createIndex("idx_taxonomies_name_locale").ifNotExists().on("taxonomies").columns(["name", "locale"]).execute();
|
|
2788
|
+
await db.schema.dropIndex("idx_taxonomies_name").ifExists().execute();
|
|
2789
|
+
}
|
|
2790
|
+
async function down$1(db) {
|
|
2791
|
+
await db.schema.createIndex("idx_taxonomies_name").ifNotExists().on("taxonomies").column("name").execute();
|
|
2792
|
+
await db.schema.dropIndex("idx_taxonomies_name_locale").ifExists().execute();
|
|
2793
|
+
}
|
|
2794
|
+
|
|
2795
|
+
//#endregion
|
|
2796
|
+
//#region src/database/migrations/050_media_usage_index_status.ts
|
|
2797
|
+
var _050_media_usage_index_status_exports = /* @__PURE__ */ __exportAll({
|
|
2798
|
+
down: () => down,
|
|
2799
|
+
up: () => up
|
|
2800
|
+
});
|
|
2801
|
+
const SOURCE_TABLE = "_emdash_media_usage_sources";
|
|
2802
|
+
const DUPLICATE_COLUMN_RE = /(?:duplicate column|column .* already exists|already exists.*column)/i;
|
|
2803
|
+
/**
|
|
2804
|
+
* Media usage index metadata.
|
|
2805
|
+
*
|
|
2806
|
+
* DDL-only by design: adds freshness/completeness metadata and scope status
|
|
2807
|
+
* tracking for later reference-index reconciliation. No content scans, no
|
|
2808
|
+
* runtime imports, and no backfill.
|
|
2809
|
+
*/
|
|
2810
|
+
async function up(db) {
|
|
2811
|
+
await addSourceMetadataColumns(db);
|
|
2812
|
+
await db.schema.createTable("_emdash_media_usage_index_status").ifNotExists().addColumn("adapter_id", "text", (c) => c.notNull()).addColumn("scope_type", "text", (c) => c.notNull()).addColumn("scope_key", "text", (c) => c.notNull()).addColumn("status", "text", (c) => c.notNull()).addColumn("schema_version", "integer", (c) => c.notNull().defaultTo(1)).addColumn("started_at", "text").addColumn("completed_at", "text").addColumn("cursor", "text").addColumn("indexed_source_count", "integer", (c) => c.notNull().defaultTo(0)).addColumn("failed_source_count", "integer", (c) => c.notNull().defaultTo(0)).addColumn("last_error_code", "text").addColumn("updated_at", "text", (c) => c.notNull().defaultTo(currentTimestamp(db))).addPrimaryKeyConstraint("_emdash_media_usage_index_status_pk", [
|
|
2813
|
+
"adapter_id",
|
|
2814
|
+
"scope_type",
|
|
2815
|
+
"scope_key"
|
|
2816
|
+
]).execute();
|
|
2817
|
+
await db.schema.createIndex("idx__emdash_media_usage_sources_completeness").ifNotExists().on("_emdash_media_usage_sources").columns([
|
|
2818
|
+
"source_type",
|
|
2819
|
+
"collection_slug",
|
|
2820
|
+
"source_completeness"
|
|
2821
|
+
]).execute();
|
|
2822
|
+
await db.schema.createIndex("idx__emdash_media_usage_sources_fingerprint").ifNotExists().on("_emdash_media_usage_sources").column("source_fingerprint").execute();
|
|
2823
|
+
await db.schema.createIndex("idx__emdash_media_usage_index_status_status").ifNotExists().on("_emdash_media_usage_index_status").columns(["adapter_id", "status"]).execute();
|
|
2824
|
+
}
|
|
2825
|
+
async function down(db) {
|
|
2826
|
+
await db.schema.dropIndex("idx__emdash_media_usage_index_status_status").ifExists().execute();
|
|
2827
|
+
await db.schema.dropIndex("idx__emdash_media_usage_sources_fingerprint").ifExists().execute();
|
|
2828
|
+
await db.schema.dropIndex("idx__emdash_media_usage_sources_completeness").ifExists().execute();
|
|
2829
|
+
await db.schema.dropTable("_emdash_media_usage_index_status").ifExists().execute();
|
|
2830
|
+
await dropSourceMetadataColumns(db);
|
|
2831
|
+
}
|
|
2832
|
+
async function addSourceMetadataColumns(db) {
|
|
2833
|
+
await addColumnIfMissing(db, "source_updated_at", () => db.schema.alterTable(SOURCE_TABLE).addColumn("source_updated_at", "text").execute());
|
|
2834
|
+
await addColumnIfMissing(db, "source_version", () => db.schema.alterTable(SOURCE_TABLE).addColumn("source_version", "integer").execute());
|
|
2835
|
+
await addColumnIfMissing(db, "source_fingerprint", () => db.schema.alterTable(SOURCE_TABLE).addColumn("source_fingerprint", "text").execute());
|
|
2836
|
+
await addColumnIfMissing(db, "source_completeness", () => db.schema.alterTable(SOURCE_TABLE).addColumn("source_completeness", "text", (c) => c.notNull().defaultTo("unknown")).execute());
|
|
2837
|
+
await addColumnIfMissing(db, "last_attempted_at", () => db.schema.alterTable(SOURCE_TABLE).addColumn("last_attempted_at", "text").execute());
|
|
2838
|
+
await addColumnIfMissing(db, "last_error_code", () => db.schema.alterTable(SOURCE_TABLE).addColumn("last_error_code", "text").execute());
|
|
2839
|
+
}
|
|
2840
|
+
async function addColumnIfMissing(db, columnName, addColumn) {
|
|
2841
|
+
if (await columnExists(db, SOURCE_TABLE, columnName)) return;
|
|
2842
|
+
try {
|
|
2843
|
+
await addColumn();
|
|
2844
|
+
} catch (error) {
|
|
2845
|
+
if (DUPLICATE_COLUMN_RE.test(deepErrorMessage$1(error))) {
|
|
2846
|
+
if (await columnExists(db, SOURCE_TABLE, columnName)) return;
|
|
2847
|
+
}
|
|
2848
|
+
throw error;
|
|
2849
|
+
}
|
|
2850
|
+
}
|
|
2851
|
+
function deepErrorMessage$1(error) {
|
|
2852
|
+
if (error instanceof Error) {
|
|
2853
|
+
const own = error.message ?? "";
|
|
2854
|
+
if (error.cause) {
|
|
2855
|
+
const causeMessage = deepErrorMessage$1(error.cause);
|
|
2856
|
+
return own ? `${own}: ${causeMessage}` : causeMessage;
|
|
2857
|
+
}
|
|
2858
|
+
return own;
|
|
2859
|
+
}
|
|
2860
|
+
if (typeof error === "string") return error;
|
|
2861
|
+
try {
|
|
2862
|
+
return JSON.stringify(error);
|
|
2863
|
+
} catch {
|
|
2864
|
+
return String(error);
|
|
2865
|
+
}
|
|
2866
|
+
}
|
|
2867
|
+
async function dropSourceMetadataColumns(db) {
|
|
2868
|
+
for (const columnName of [
|
|
2869
|
+
"last_error_code",
|
|
2870
|
+
"last_attempted_at",
|
|
2871
|
+
"source_completeness",
|
|
2872
|
+
"source_fingerprint",
|
|
2873
|
+
"source_version",
|
|
2874
|
+
"source_updated_at"
|
|
2875
|
+
]) if (await columnExists(db, SOURCE_TABLE, columnName)) await db.schema.alterTable(SOURCE_TABLE).dropColumn(columnName).execute();
|
|
2876
|
+
}
|
|
2877
|
+
|
|
2729
2878
|
//#endregion
|
|
2730
2879
|
//#region src/database/migrations/runner.ts
|
|
2731
2880
|
const MIGRATIONS = Object.freeze({
|
|
@@ -2774,7 +2923,10 @@ const MIGRATIONS = Object.freeze({
|
|
|
2774
2923
|
"044_comment_reactions": _044_comment_reactions_exports,
|
|
2775
2924
|
"045_taxonomy_parent_group": _045_taxonomy_parent_group_exports,
|
|
2776
2925
|
"046_media_usage_index": _046_media_usage_index_exports,
|
|
2777
|
-
"047_restore_taxonomy_parent_index": _047_restore_taxonomy_parent_index_exports
|
|
2926
|
+
"047_restore_taxonomy_parent_index": _047_restore_taxonomy_parent_index_exports,
|
|
2927
|
+
"048_restore_content_taxonomies_term_index": _048_restore_content_taxonomies_term_index_exports,
|
|
2928
|
+
"049_taxonomies_name_locale_index": _049_taxonomies_name_locale_index_exports,
|
|
2929
|
+
"050_media_usage_index_status": _050_media_usage_index_status_exports
|
|
2778
2930
|
});
|
|
2779
2931
|
/** Total number of registered migrations. Exported for use in tests. */
|
|
2780
2932
|
const MIGRATION_COUNT = Object.keys(MIGRATIONS).length;
|
|
@@ -2972,4 +3124,4 @@ async function rollbackMigration(db, options) {
|
|
|
2972
3124
|
|
|
2973
3125
|
//#endregion
|
|
2974
3126
|
export { __exportAll as a, runMigrations as i, getMigrationStatus as n, rollbackMigration as r, MIGRATION_RACE_WAIT_MS as t };
|
|
2975
|
-
//# sourceMappingURL=runner-
|
|
3127
|
+
//# sourceMappingURL=runner-K8XK101B.mjs.map
|