emdash 0.40.0 → 0.41.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/action-token-CbKDcPJi.mjs +26 -0
- package/dist/action-token-CbKDcPJi.mjs.map +1 -0
- package/dist/activation-PtniBLt9.mjs +382 -0
- package/dist/activation-PtniBLt9.mjs.map +1 -0
- package/dist/adapters-C_Tf5x90.d.mts +171 -0
- package/dist/adapters-C_Tf5x90.d.mts.map +1 -0
- package/dist/allowed-origins-U1z4TdEZ.mjs +116 -0
- package/dist/allowed-origins-U1z4TdEZ.mjs.map +1 -0
- package/dist/api/route-utils.d.mts +4 -4
- package/dist/api/route-utils.mjs +46 -45
- package/dist/api/route-utils.mjs.map +1 -1
- package/dist/api/schemas/index.d.mts +2 -2
- package/dist/api/schemas/index.mjs +10 -10
- package/dist/api-CXwQkV_m.mjs +5122 -0
- package/dist/api-CXwQkV_m.mjs.map +1 -0
- package/dist/api-tokens-89WlohEN.mjs +166 -0
- package/dist/api-tokens-89WlohEN.mjs.map +1 -0
- package/dist/apply-Do3KNnUk.mjs +1659 -0
- package/dist/apply-Do3KNnUk.mjs.map +1 -0
- package/dist/approvals-CAX9Yw33.mjs +460 -0
- package/dist/approvals-CAX9Yw33.mjs.map +1 -0
- package/dist/artifact-fetch-B9W4CEST.mjs +659 -0
- package/dist/artifact-fetch-B9W4CEST.mjs.map +1 -0
- package/dist/astro/index.d.mts +14 -14
- package/dist/astro/index.mjs +26 -30
- package/dist/astro/index.mjs.map +1 -1
- package/dist/astro/middleware/auth.d.mts +12 -12
- package/dist/astro/middleware/auth.mjs +10 -10
- package/dist/astro/middleware/media-usage-write-fence.mjs +5 -5
- package/dist/astro/middleware/redirect.mjs +7 -7
- package/dist/astro/middleware/request-context.mjs +3 -3
- package/dist/astro/middleware/setup.mjs +1 -1
- package/dist/astro/middleware.d.mts +12 -12
- package/dist/astro/middleware.d.mts.map +1 -1
- package/dist/astro/middleware.mjs +110 -106
- package/dist/astro/middleware.mjs.map +1 -1
- package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +14 -14
- package/dist/astro/routes/api/admin/allowed-domains/index.mjs +14 -14
- package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +6 -6
- package/dist/astro/routes/api/admin/api-tokens/index.mjs +7 -7
- package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +7 -7
- package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +17 -17
- package/dist/astro/routes/api/admin/byline-fields/index.mjs +17 -17
- package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +17 -17
- package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +23 -23
- package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +23 -23
- package/dist/astro/routes/api/admin/bylines/index.mjs +23 -23
- package/dist/astro/routes/api/admin/comments/_id_/status.mjs +18 -18
- package/dist/astro/routes/api/admin/comments/_id_.mjs +7 -7
- package/dist/astro/routes/api/admin/comments/bulk.mjs +17 -17
- package/dist/astro/routes/api/admin/comments/counts.mjs +7 -7
- package/dist/astro/routes/api/admin/comments/index.mjs +17 -17
- package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +6 -6
- package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +5 -5
- package/dist/astro/routes/api/admin/media-usage/activation.mjs +20 -20
- package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs +22 -22
- package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs +22 -22
- package/dist/astro/routes/api/admin/media-usage/progress.mjs +25 -25
- package/dist/astro/routes/api/admin/media-usage/repair.mjs +31 -31
- package/dist/astro/routes/api/admin/media-usage/work/index.mjs +22 -22
- package/dist/astro/routes/api/admin/media-usage/work/retry.mjs +22 -22
- package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +6 -6
- package/dist/astro/routes/api/admin/oauth-clients/index.mjs +6 -6
- package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +8 -8
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +8 -8
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +72 -68
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/mcp.mjs +7 -7
- package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs +71 -67
- package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +72 -68
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +82 -78
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/index.mjs +72 -68
- package/dist/astro/routes/api/admin/plugins/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +5 -5
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +71 -67
- 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 +81 -77
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +71 -67
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +72 -68
- 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 +83 -79
- package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +9 -9
- package/dist/astro/routes/api/admin/plugins/registry/install.mjs +74 -70
- package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/registry/publisher-handle.mjs +7 -7
- package/dist/astro/routes/api/admin/plugins/registry/verify.mjs +72 -68
- package/dist/astro/routes/api/admin/plugins/registry/verify.mjs.map +1 -1
- package/dist/astro/routes/api/admin/plugins/updates.mjs +71 -67
- package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
- package/dist/astro/routes/api/admin/scheduled-policy-rejections/_collection_/_id_.mjs +6 -6
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +71 -67
- 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 +5 -5
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +71 -67
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -1
- package/dist/astro/routes/api/admin/transfer/_...path_.mjs +4 -4
- package/dist/astro/routes/api/admin/transfer/approvals/_id_/approve.mjs +40 -40
- package/dist/astro/routes/api/admin/transfer/approvals/_id_/deny.mjs +40 -40
- package/dist/astro/routes/api/admin/transfer/approvals/index.mjs +42 -42
- package/dist/astro/routes/api/admin/transfer/capabilities.mjs +42 -42
- package/dist/astro/routes/api/admin/transfer/exports/_id_/advance.mjs +42 -42
- package/dist/astro/routes/api/admin/transfer/exports/_id_/archive.mjs +43 -43
- package/dist/astro/routes/api/admin/transfer/exports/_id_/files/_...path_.mjs +43 -43
- package/dist/astro/routes/api/admin/transfer/exports/_id_/index.mjs +42 -42
- package/dist/astro/routes/api/admin/transfer/exports/_id_/manifest.mjs +43 -43
- package/dist/astro/routes/api/admin/transfer/exports/index.mjs +44 -44
- package/dist/astro/routes/api/admin/transfer/imports/_id_/abandon.mjs +42 -42
- package/dist/astro/routes/api/admin/transfer/imports/_id_/advance.mjs +42 -42
- package/dist/astro/routes/api/admin/transfer/imports/_id_/analyze.mjs +44 -44
- package/dist/astro/routes/api/admin/transfer/imports/_id_/cancel.mjs +42 -42
- package/dist/astro/routes/api/admin/transfer/imports/_id_/execute.mjs +44 -44
- package/dist/astro/routes/api/admin/transfer/imports/_id_/files/_...path_.mjs +42 -42
- package/dist/astro/routes/api/admin/transfer/imports/_id_/index.mjs +42 -42
- package/dist/astro/routes/api/admin/transfer/imports/_id_/missing.mjs +44 -44
- package/dist/astro/routes/api/admin/transfer/imports/_id_/plan.mjs +42 -42
- package/dist/astro/routes/api/admin/transfer/imports/_id_/receipt.mjs +42 -42
- package/dist/astro/routes/api/admin/transfer/imports/index.mjs +44 -44
- package/dist/astro/routes/api/admin/users/_id_/disable.mjs +5 -5
- package/dist/astro/routes/api/admin/users/_id_/enable.mjs +4 -4
- package/dist/astro/routes/api/admin/users/_id_/index.mjs +15 -15
- package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +6 -6
- package/dist/astro/routes/api/admin/users/index.mjs +14 -14
- package/dist/astro/routes/api/auth/dev-bypass.mjs +6 -6
- package/dist/astro/routes/api/auth/invite/accept.mjs +4 -4
- package/dist/astro/routes/api/auth/invite/complete.mjs +18 -18
- package/dist/astro/routes/api/auth/invite/index.mjs +16 -16
- package/dist/astro/routes/api/auth/invite/register-options.mjs +17 -17
- package/dist/astro/routes/api/auth/logout.mjs +5 -5
- package/dist/astro/routes/api/auth/magic-link/send.mjs +18 -18
- package/dist/astro/routes/api/auth/magic-link/verify.mjs +14 -14
- package/dist/astro/routes/api/auth/me.mjs +15 -15
- package/dist/astro/routes/api/auth/mode.mjs +5 -5
- 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 +14 -14
- package/dist/astro/routes/api/auth/passkey/index.mjs +4 -4
- package/dist/astro/routes/api/auth/passkey/options.mjs +19 -19
- package/dist/astro/routes/api/auth/passkey/register/options.mjs +17 -17
- package/dist/astro/routes/api/auth/passkey/register/verify.mjs +18 -18
- package/dist/astro/routes/api/auth/passkey/verify.mjs +18 -18
- package/dist/astro/routes/api/auth/signup/complete.mjs +18 -18
- package/dist/astro/routes/api/auth/signup/request.mjs +17 -17
- package/dist/astro/routes/api/auth/signup/verify.mjs +4 -4
- package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +12 -12
- package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +18 -18
- package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +5 -5
- package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +17 -17
- package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +5 -5
- package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs +17 -17
- package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +5 -5
- package/dist/astro/routes/api/content/_collection_/_id_/plugin-extensions/_pluginId_/_kind_/_extensionId_.mjs +11 -11
- package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +31 -31
- package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +17 -17
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.d.mts +1 -2
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.d.mts.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs +42 -53
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs +34 -29
- package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +5 -5
- package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +5 -5
- package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +17 -17
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +25 -24
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +5 -5
- package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +17 -17
- package/dist/astro/routes/api/content/_collection_/_id_.d.mts.map +1 -1
- package/dist/astro/routes/api/content/_collection_/_id_.mjs +18 -18
- package/dist/astro/routes/api/content/_collection_/_id_.mjs.map +1 -1
- package/dist/astro/routes/api/content/_collection_/authors.mjs +5 -5
- package/dist/astro/routes/api/content/_collection_/index.mjs +15 -15
- package/dist/astro/routes/api/content/_collection_/trash.mjs +15 -15
- package/dist/astro/routes/api/dashboard.mjs +10 -9
- package/dist/astro/routes/api/dashboard.mjs.map +1 -1
- package/dist/astro/routes/api/dev/emails.mjs +5 -5
- package/dist/astro/routes/api/health.mjs +6 -6
- package/dist/astro/routes/api/import/probe.d.mts +3 -3
- package/dist/astro/routes/api/import/probe.mjs +23 -23
- package/dist/astro/routes/api/import/wordpress/analyze.mjs +6 -6
- package/dist/astro/routes/api/import/wordpress/execute.d.mts +13 -13
- package/dist/astro/routes/api/import/wordpress/execute.mjs +16 -16
- package/dist/astro/routes/api/import/wordpress/media.d.mts +12 -12
- package/dist/astro/routes/api/import/wordpress/media.mjs +19 -19
- package/dist/astro/routes/api/import/wordpress/prepare.mjs +18 -18
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +13 -13
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +28 -28
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +23 -23
- package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +13 -13
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +34 -34
- package/dist/astro/routes/api/manifest.mjs +6 -6
- package/dist/astro/routes/api/mcp.mjs +98 -118
- package/dist/astro/routes/api/mcp.mjs.map +1 -1
- package/dist/astro/routes/api/media/_id_/confirm.mjs +19 -19
- package/dist/astro/routes/api/media/_id_/replace.mjs +16 -16
- package/dist/astro/routes/api/media/_id_/upload.mjs +9 -9
- package/dist/astro/routes/api/media/_id_/usage.mjs +33 -33
- package/dist/astro/routes/api/media/_id_.mjs +31 -31
- package/dist/astro/routes/api/media/asset/_id_/_filename_.mjs +6 -6
- package/dist/astro/routes/api/media/file/_...key_.mjs +9 -9
- package/dist/astro/routes/api/media/folders/_id_.mjs +16 -16
- package/dist/astro/routes/api/media/folders/index.mjs +16 -16
- package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +5 -5
- package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +5 -5
- package/dist/astro/routes/api/media/providers/index.mjs +5 -5
- package/dist/astro/routes/api/media/upload-url.mjs +18 -18
- package/dist/astro/routes/api/media.mjs +35 -35
- package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +17 -17
- package/dist/astro/routes/api/menus/_name_/items.mjs +17 -17
- package/dist/astro/routes/api/menus/_name_/reorder.mjs +17 -17
- package/dist/astro/routes/api/menus/_name_/translations.mjs +17 -17
- package/dist/astro/routes/api/menus/_name_.mjs +17 -17
- package/dist/astro/routes/api/menus/index.mjs +17 -17
- package/dist/astro/routes/api/oauth/authorize.mjs +6 -6
- package/dist/astro/routes/api/oauth/device/authorize.d.mts +2 -1
- package/dist/astro/routes/api/oauth/device/authorize.d.mts.map +1 -1
- package/dist/astro/routes/api/oauth/device/authorize.mjs +23 -9
- package/dist/astro/routes/api/oauth/device/authorize.mjs.map +1 -1
- package/dist/astro/routes/api/oauth/device/code.mjs +11 -11
- package/dist/astro/routes/api/oauth/device/token.mjs +10 -10
- package/dist/astro/routes/api/oauth/register.mjs +5 -5
- package/dist/astro/routes/api/oauth/token/refresh.mjs +8 -8
- package/dist/astro/routes/api/oauth/token/revoke.mjs +8 -8
- package/dist/astro/routes/api/oauth/token.mjs +8 -8
- package/dist/astro/routes/api/openapi.json.mjs +20 -20
- package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +11 -11
- package/dist/astro/routes/api/redirects/404s/index.mjs +19 -19
- package/dist/astro/routes/api/redirects/404s/summary.mjs +19 -19
- package/dist/astro/routes/api/redirects/_id_.mjs +19 -19
- package/dist/astro/routes/api/redirects/index.mjs +19 -19
- package/dist/astro/routes/api/relations/_id_/index.mjs +34 -29
- package/dist/astro/routes/api/relations/_id_/index.mjs.map +1 -1
- package/dist/astro/routes/api/relations/index.mjs +36 -31
- package/dist/astro/routes/api/relations/index.mjs.map +1 -1
- package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +5 -5
- package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +5 -5
- package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs +71 -67
- package/dist/astro/routes/api/schema/block-types/_slug_/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.mjs +71 -67
- package/dist/astro/routes/api/schema/block-types/_slug_/versions/_version_/activate.mjs.map +1 -1
- package/dist/astro/routes/api/schema/block-types/index.mjs +71 -67
- package/dist/astro/routes/api/schema/block-types/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +73 -69
- 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 +71 -67
- 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 +71 -67
- package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +71 -67
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/index.mjs +71 -67
- package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
- package/dist/astro/routes/api/schema/collections/reorder.mjs +71 -67
- package/dist/astro/routes/api/schema/collections/reorder.mjs.map +1 -1
- package/dist/astro/routes/api/schema/index.mjs +16 -16
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs +71 -67
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
- package/dist/astro/routes/api/schema/orphans/index.mjs +71 -67
- package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
- package/dist/astro/routes/api/search/enable.mjs +19 -19
- package/dist/astro/routes/api/search/index.mjs +18 -18
- package/dist/astro/routes/api/search/rebuild.mjs +19 -19
- package/dist/astro/routes/api/search/stats.mjs +9 -9
- package/dist/astro/routes/api/search/suggest.mjs +18 -18
- package/dist/astro/routes/api/sections/_slug_.mjs +18 -18
- package/dist/astro/routes/api/sections/index.mjs +18 -18
- package/dist/astro/routes/api/settings/backups/archives/_name_.mjs +7 -7
- package/dist/astro/routes/api/settings/backups/archives/index.mjs +7 -7
- package/dist/astro/routes/api/settings/backups/export.mjs +7 -7
- package/dist/astro/routes/api/settings/backups/index.mjs +8 -8
- package/dist/astro/routes/api/settings/email.mjs +6 -6
- package/dist/astro/routes/api/settings.mjs +21 -21
- package/dist/astro/routes/api/setup/admin-verify.mjs +19 -19
- package/dist/astro/routes/api/setup/admin.mjs +18 -18
- package/dist/astro/routes/api/setup/dev-bypass.mjs +45 -39
- package/dist/astro/routes/api/setup/dev-bypass.mjs.map +1 -1
- package/dist/astro/routes/api/setup/dev-reset.mjs +4 -4
- package/dist/astro/routes/api/setup/index.d.mts.map +1 -1
- package/dist/astro/routes/api/setup/index.mjs +80 -49
- package/dist/astro/routes/api/setup/index.mjs.map +1 -1
- package/dist/astro/routes/api/setup/status.mjs +6 -6
- package/dist/astro/routes/api/snapshot.mjs +9 -9
- package/dist/astro/routes/api/snapshot.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs +23 -23
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +23 -23
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +23 -23
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +23 -23
- package/dist/astro/routes/api/taxonomies/_name_/translations.mjs +22 -22
- package/dist/astro/routes/api/taxonomies/_name_.mjs +23 -23
- package/dist/astro/routes/api/taxonomies/bulk-tag.mjs +36 -35
- package/dist/astro/routes/api/taxonomies/bulk-tag.mjs.map +1 -1
- package/dist/astro/routes/api/taxonomies/index.mjs +23 -23
- package/dist/astro/routes/api/themes/preview.mjs +6 -6
- package/dist/astro/routes/api/typegen.mjs +8 -8
- package/dist/astro/routes/api/visual-editing/action-token.mjs +6 -6
- package/dist/astro/routes/api/visual-editing/content/_collection_/_id_/publish.mjs +19 -19
- package/dist/astro/routes/api/visual-editing/toolbar-labels.mjs +4 -4
- 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 +16 -16
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +19 -19
- package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +19 -19
- package/dist/astro/routes/api/widget-areas/_name_.mjs +9 -9
- package/dist/astro/routes/api/widget-areas/index.mjs +19 -19
- package/dist/astro/routes/api/widget-components.mjs +5 -5
- 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 +28 -18
- package/dist/astro/types.d.mts.map +1 -1
- package/dist/audit-CrgmE9LE.mjs +127 -0
- package/dist/audit-CrgmE9LE.mjs.map +1 -0
- package/dist/auth/providers/github.d.mts +1 -1
- package/dist/auth/providers/google.d.mts +1 -1
- package/dist/authoritative-records-C2YzIdbu.mjs +5172 -0
- package/dist/authoritative-records-C2YzIdbu.mjs.map +1 -0
- package/dist/authorize-WgdKF8QY.mjs +49 -0
- package/dist/authorize-WgdKF8QY.mjs.map +1 -0
- package/dist/backup-Ck8_lMO3.mjs +246 -0
- package/dist/backup-Ck8_lMO3.mjs.map +1 -0
- package/dist/block-types-BQ90asVI.mjs +132 -0
- package/dist/block-types-BQ90asVI.mjs.map +1 -0
- package/dist/block-values-ACFqgB1D.mjs +175 -0
- package/dist/block-values-ACFqgB1D.mjs.map +1 -0
- package/dist/bundle-Db1iNMv_.mjs +667 -0
- package/dist/bundle-Db1iNMv_.mjs.map +1 -0
- package/dist/byline-BayaYGoj.mjs +909 -0
- package/dist/byline-BayaYGoj.mjs.map +1 -0
- package/dist/byline-fields-B8HH-35f.mjs +254 -0
- package/dist/byline-fields-B8HH-35f.mjs.map +1 -0
- package/dist/byline-fields-hMPjf6Eu.mjs +123 -0
- package/dist/byline-fields-hMPjf6Eu.mjs.map +1 -0
- package/dist/byline-registry-B_EK_TQf.mjs +406 -0
- package/dist/byline-registry-B_EK_TQf.mjs.map +1 -0
- package/dist/bylines-DFAaFXWi.mjs +214 -0
- package/dist/bylines-DFAaFXWi.mjs.map +1 -0
- package/dist/bylines-DkIxUxmr.mjs +232 -0
- package/dist/bylines-DkIxUxmr.mjs.map +1 -0
- package/dist/cache-DkvhQ8XE.mjs +108 -0
- package/dist/cache-DkvhQ8XE.mjs.map +1 -0
- package/dist/canonical-CcSuuTlH.mjs +174 -0
- package/dist/canonical-CcSuuTlH.mjs.map +1 -0
- package/dist/capture-triggers-DJEoOTOq.mjs +362 -0
- package/dist/capture-triggers-DJEoOTOq.mjs.map +1 -0
- package/dist/challenge-store-CvBl81AQ.mjs +51 -0
- package/dist/challenge-store-CvBl81AQ.mjs.map +1 -0
- package/dist/checksum-CClweQzI.mjs +162 -0
- package/dist/checksum-CClweQzI.mjs.map +1 -0
- package/dist/chrome-tags-D5caJwwp.mjs +24 -0
- package/dist/chrome-tags-D5caJwwp.mjs.map +1 -0
- package/dist/chunks-DwBaj8aT.mjs +25 -0
- package/dist/chunks-DwBaj8aT.mjs.map +1 -0
- package/dist/cli/index.mjs +374 -761
- package/dist/cli/index.mjs.map +1 -1
- package/dist/client/cf-access.d.mts +1 -1
- package/dist/client/index.d.mts +18 -18
- package/dist/client/index.mjs +2 -2
- package/dist/collection-deletion-CLCdXsnV.mjs +436 -0
- package/dist/collection-deletion-CLCdXsnV.mjs.map +1 -0
- package/dist/collection-deletion-processor-hNw8x01F.mjs +217 -0
- package/dist/collection-deletion-processor-hNw8x01F.mjs.map +1 -0
- package/dist/collection-slugs-cache-CUuiduLq.mjs +85 -0
- package/dist/collection-slugs-cache-CUuiduLq.mjs.map +1 -0
- package/dist/comment-D2uvL63j.mjs +313 -0
- package/dist/comment-D2uvL63j.mjs.map +1 -0
- package/dist/comment-reaction-DevUuzg4.mjs +85 -0
- package/dist/comment-reaction-DevUuzg4.mjs.map +1 -0
- package/dist/comments-Cq0s7_hO.mjs +195 -0
- package/dist/comments-Cq0s7_hO.mjs.map +1 -0
- package/dist/comments-M4EDYAHw.mjs +99 -0
- package/dist/comments-M4EDYAHw.mjs.map +1 -0
- package/dist/components-CuIGwXMs.mjs +108 -0
- package/dist/components-CuIGwXMs.mjs.map +1 -0
- package/dist/config-52Ea5IWt.d.mts +39 -0
- package/dist/config-52Ea5IWt.d.mts.map +1 -0
- package/dist/config-CCz3xOLc.mjs +242 -0
- package/dist/config-CCz3xOLc.mjs.map +1 -0
- package/dist/config-D3d5Qudq.d.mts +6669 -0
- package/dist/config-D3d5Qudq.d.mts.map +1 -0
- package/dist/content-CbnufDsM.mjs +2018 -0
- package/dist/content-CbnufDsM.mjs.map +1 -0
- package/dist/content-list-query-D_7B1FE5.d.mts +26 -0
- package/dist/content-list-query-D_7B1FE5.d.mts.map +1 -0
- package/dist/content-policy-CYu6K1KB.mjs +46 -0
- package/dist/content-policy-CYu6K1KB.mjs.map +1 -0
- package/dist/content-repair-DlDUgFGp.mjs +442 -0
- package/dist/content-repair-DlDUgFGp.mjs.map +1 -0
- package/dist/context-CGQLA1-a.mjs +1922 -0
- package/dist/context-CGQLA1-a.mjs.map +1 -0
- package/dist/cron-c4D5C5Fx.mjs +284 -0
- package/dist/cron-c4D5C5Fx.mjs.map +1 -0
- package/dist/dashboard-CBq9kmOn.mjs +151 -0
- package/dist/dashboard-CBq9kmOn.mjs.map +1 -0
- package/dist/db/index.d.mts +3 -3
- package/dist/db/index.mjs +1 -1
- package/dist/db/libsql-migrations.d.mts +1 -1
- package/dist/db/libsql-migrations.mjs +4 -4
- package/dist/db/libsql.d.mts +1 -1
- package/dist/db/postgres-migrations.d.mts +1 -1
- package/dist/db/postgres-migrations.mjs +4 -4
- package/dist/db/postgres.d.mts +1 -1
- package/dist/db/sqlite-migrations.d.mts +1 -1
- package/dist/db/sqlite-migrations.mjs +4 -4
- package/dist/db/sqlite.d.mts +1 -1
- package/dist/db/sqlite.mjs +1 -1
- package/dist/default-DPsys51U.mjs +81 -0
- package/dist/default-DPsys51U.mjs.map +1 -0
- package/dist/deferred-tasks-CZ7rzBdo.d.mts +9 -0
- package/dist/deferred-tasks-CZ7rzBdo.d.mts.map +1 -0
- package/dist/dev-typegen-HRxwLRcT.mjs +29 -0
- package/dist/dev-typegen-HRxwLRcT.mjs.map +1 -0
- package/dist/device-flow-OcSqE9uY.mjs +521 -0
- package/dist/device-flow-OcSqE9uY.mjs.map +1 -0
- package/dist/digest-DVZ--cE9.mjs +194 -0
- package/dist/digest-DVZ--cE9.mjs.map +1 -0
- package/dist/direct-executor-DyjAqkpT.mjs +104 -0
- package/dist/direct-executor-DyjAqkpT.mjs.map +1 -0
- package/dist/dist-FPR93_xf.mjs +810 -0
- package/dist/dist-FPR93_xf.mjs.map +1 -0
- package/dist/email-console-DyQIgEnz.mjs +50 -0
- package/dist/email-console-DyQIgEnz.mjs.map +1 -0
- package/dist/email-locale-BYb16rVd.mjs +25 -0
- package/dist/email-locale-BYb16rVd.mjs.map +1 -0
- package/dist/emdash-runtime-CrzxJFmF.mjs +4214 -0
- package/dist/emdash-runtime-CrzxJFmF.mjs.map +1 -0
- package/dist/enrich-DBtCncE2.mjs +194 -0
- package/dist/enrich-DBtCncE2.mjs.map +1 -0
- package/dist/entry-lock-BN5y4YbO.d.mts +4481 -0
- package/dist/entry-lock-BN5y4YbO.d.mts.map +1 -0
- package/dist/entry-lock-BaRBHCsH.mjs +1173 -0
- package/dist/entry-lock-BaRBHCsH.mjs.map +1 -0
- package/dist/entry-lock-C6NcnZPV.mjs +163 -0
- package/dist/entry-lock-C6NcnZPV.mjs.map +1 -0
- package/dist/entry-locks-BTyQLdbC.mjs +167 -0
- package/dist/entry-locks-BTyQLdbC.mjs.map +1 -0
- package/dist/error-BfsNNrIE.mjs +90 -0
- package/dist/error-BfsNNrIE.mjs.map +1 -0
- package/dist/errors-BN1QAnEY.mjs +460 -0
- package/dist/errors-BN1QAnEY.mjs.map +1 -0
- package/dist/errors-Bt3goF8I.mjs +120 -0
- package/dist/errors-Bt3goF8I.mjs.map +1 -0
- package/dist/escape-BveidMa2.mjs +9 -0
- package/dist/escape-BveidMa2.mjs.map +1 -0
- package/dist/fence-Bb_IbCxI.mjs +162 -0
- package/dist/fence-Bb_IbCxI.mjs.map +1 -0
- package/dist/field-defs-cache-CsZctvbu.mjs +77 -0
- package/dist/field-defs-cache-CsZctvbu.mjs.map +1 -0
- package/dist/field-map-6m9rF49t.mjs +83 -0
- package/dist/field-map-6m9rF49t.mjs.map +1 -0
- package/dist/focal-point-CZ3d1wK5.mjs +23 -0
- package/dist/focal-point-CZ3d1wK5.mjs.map +1 -0
- package/dist/fts-manager-CCaZTp8y.mjs +443 -0
- package/dist/fts-manager-CCaZTp8y.mjs.map +1 -0
- package/dist/gc-xowRjczI.mjs +75 -0
- package/dist/gc-xowRjczI.mjs.map +1 -0
- package/dist/hash-COVK27Pc.mjs +37 -0
- package/dist/hash-COVK27Pc.mjs.map +1 -0
- package/dist/hook-result-CYSk0XFe.d.mts +31 -0
- package/dist/hook-result-CYSk0XFe.d.mts.map +1 -0
- package/dist/hreflang-CChPV7jx.mjs +105 -0
- package/dist/hreflang-CChPV7jx.mjs.map +1 -0
- package/dist/hreflang-DRslq3QI.d.mts +50 -0
- package/dist/hreflang-DRslq3QI.d.mts.map +1 -0
- package/dist/http-route-dispatch-CAdp2onn.mjs +339 -0
- package/dist/http-route-dispatch-CAdp2onn.mjs.map +1 -0
- package/dist/identity-NVTOOQyq.mjs +35 -0
- package/dist/identity-NVTOOQyq.mjs.map +1 -0
- package/dist/import-wpSO2N0x.mjs +2020 -0
- package/dist/import-wpSO2N0x.mjs.map +1 -0
- package/dist/index-CDs2wq4X.d.mts +623 -0
- package/dist/index-CDs2wq4X.d.mts.map +1 -0
- package/dist/index.d.mts +24 -24
- package/dist/index.mjs +103 -101
- package/dist/install-finalization-D9R9R-W8.mjs +58 -0
- package/dist/install-finalization-D9R9R-W8.mjs.map +1 -0
- package/dist/keys-Bck6LBfF.mjs +61 -0
- package/dist/keys-Bck6LBfF.mjs.map +1 -0
- package/dist/kinds-CYmRESWj.mjs +974 -0
- package/dist/kinds-CYmRESWj.mjs.map +1 -0
- package/dist/lifecycle-C815ZQfV.mjs +25 -0
- package/dist/lifecycle-C815ZQfV.mjs.map +1 -0
- package/dist/load-D99axixL.mjs +28 -0
- package/dist/load-D99axixL.mjs.map +1 -0
- package/dist/loader-CrRPfkHS.mjs +1197 -0
- package/dist/loader-CrRPfkHS.mjs.map +1 -0
- package/dist/loops-DMKlygqX.mjs +203 -0
- package/dist/loops-DMKlygqX.mjs.map +1 -0
- package/dist/manifest-builder-BQzCHNgB.mjs +189 -0
- package/dist/manifest-builder-BQzCHNgB.mjs.map +1 -0
- package/dist/manifest-schema-Ci2gmd0u.mjs +492 -0
- package/dist/manifest-schema-Ci2gmd0u.mjs.map +1 -0
- package/dist/media/image-endpoint.mjs +1 -1
- package/dist/media/index.d.mts +1 -1
- package/dist/media/index.mjs +4 -4
- package/dist/media/local-runtime.d.mts +14 -14
- package/dist/media/local-runtime.mjs +6 -6
- package/dist/media-BUQePMxP.mjs +373 -0
- package/dist/media-BUQePMxP.mjs.map +1 -0
- package/dist/media-DH8ibNlY.mjs +294 -0
- package/dist/media-DH8ibNlY.mjs.map +1 -0
- package/dist/media-OEIQ3bVc.mjs +408 -0
- package/dist/media-OEIQ3bVc.mjs.map +1 -0
- package/dist/media-allowlist-pYtaBA95.mjs +44 -0
- package/dist/media-allowlist-pYtaBA95.mjs.map +1 -0
- package/dist/media-folders-Bf8_s4de.mjs +210 -0
- package/dist/media-folders-Bf8_s4de.mjs.map +1 -0
- package/dist/media-url-C6klEuNd.mjs +43 -0
- package/dist/media-url-C6klEuNd.mjs.map +1 -0
- package/dist/media-usage-D7Y64m6v.mjs +1629 -0
- package/dist/media-usage-D7Y64m6v.mjs.map +1 -0
- package/dist/media-usage-activation-DrqbmgLA.mjs +78 -0
- package/dist/media-usage-activation-DrqbmgLA.mjs.map +1 -0
- package/dist/media-usage-work-DommYhYA.mjs +152 -0
- package/dist/media-usage-work-DommYhYA.mjs.map +1 -0
- package/dist/media-usage-work-HU63hNDu.mjs +586 -0
- package/dist/media-usage-work-HU63hNDu.mjs.map +1 -0
- package/dist/menus-BQfusWEC.mjs +3608 -0
- package/dist/menus-BQfusWEC.mjs.map +1 -0
- package/dist/menus-BtwjQt5s.mjs +753 -0
- package/dist/menus-BtwjQt5s.mjs.map +1 -0
- package/dist/menus-p_M1V7J_.mjs +139 -0
- package/dist/menus-p_M1V7J_.mjs.map +1 -0
- package/dist/migrations/index.d.mts +1 -1
- package/dist/migrations/index.mjs +3 -3
- package/dist/mime-C94qBG-P.mjs +36 -0
- package/dist/mime-C94qBG-P.mjs.map +1 -0
- package/dist/mode-DpYW3w6U.mjs +23 -0
- package/dist/mode-DpYW3w6U.mjs.map +1 -0
- package/dist/node-sqlite-compat-pWFw0lcc.mjs +46 -0
- package/dist/node-sqlite-compat-pWFw0lcc.mjs.map +1 -0
- package/dist/normalize-DduyxBjf.mjs +191 -0
- package/dist/normalize-DduyxBjf.mjs.map +1 -0
- package/dist/oauth-authorization-DAXsH1H9.mjs +274 -0
- package/dist/oauth-authorization-DAXsH1H9.mjs.map +1 -0
- package/dist/oauth-clients-DENiDQri.mjs +266 -0
- package/dist/oauth-clients-DENiDQri.mjs.map +1 -0
- package/dist/oauth-state-store-y8mEYVq9.mjs +50 -0
- package/dist/oauth-state-store-y8mEYVq9.mjs.map +1 -0
- package/dist/oauth-user-lookup-CtTYAy-O.mjs +26 -0
- package/dist/oauth-user-lookup-CtTYAy-O.mjs.map +1 -0
- package/dist/object-cache/memory.d.mts +1 -1
- package/dist/options-BYa1FgIM.d.mts +81 -0
- package/dist/options-BYa1FgIM.d.mts.map +1 -0
- package/dist/page/index.d.mts +2 -2
- package/dist/page/index.mjs +5 -5
- package/dist/parse-CORGGhHf.mjs +81 -0
- package/dist/parse-CORGGhHf.mjs.map +1 -0
- package/dist/parse-avNM1xWV.d.mts +168 -0
- package/dist/parse-avNM1xWV.d.mts.map +1 -0
- package/dist/passkey-config-Dih5YeIS.mjs +46 -0
- package/dist/passkey-config-Dih5YeIS.mjs.map +1 -0
- package/dist/paths-d51RFm8M.mjs +77 -0
- package/dist/paths-d51RFm8M.mjs.map +1 -0
- package/dist/patterns-CoqlXUvk.mjs +145 -0
- package/dist/patterns-CoqlXUvk.mjs.map +1 -0
- package/dist/placeholder-D2aksPMF.d.mts +306 -0
- package/dist/placeholder-D2aksPMF.d.mts.map +1 -0
- package/dist/plan-DqeZKuaR.mjs +135 -0
- package/dist/plan-DqeZKuaR.mjs.map +1 -0
- package/dist/plugin-test-runtime.d.mts +14 -14
- package/dist/plugin-test-runtime.mjs +110 -107
- package/dist/plugin-types.d.mts +2 -2
- package/dist/plugin-utils.d.mts +12 -12
- package/dist/plugins/adapt-sandbox-entry.d.mts +12 -12
- package/dist/plugins/adapt-sandbox-entry.mjs +3 -3
- package/dist/plugins/host.d.mts +5 -5
- package/dist/plugins/host.mjs +42 -41
- package/dist/plugins-Bb7oqjQA.mjs +277 -0
- package/dist/plugins-Bb7oqjQA.mjs.map +1 -0
- package/dist/policy-BcEqut3n.mjs +45 -0
- package/dist/policy-BcEqut3n.mjs.map +1 -0
- package/dist/portable-text-DXE8ymtD.mjs +307 -0
- package/dist/portable-text-DXE8ymtD.mjs.map +1 -0
- package/dist/preview-DEDWbwA_.mjs +107 -0
- package/dist/preview-DEDWbwA_.mjs.map +1 -0
- package/dist/protocol-BJbTzvwl.d.mts +61 -0
- package/dist/protocol-BJbTzvwl.d.mts.map +1 -0
- package/dist/public-submission-D9c9S14m.mjs +250 -0
- package/dist/public-submission-D9c9S14m.mjs.map +1 -0
- package/dist/public-url-CIRe-2T6.mjs +101 -0
- package/dist/public-url-CIRe-2T6.mjs.map +1 -0
- package/dist/query-BzifXlPS.mjs +1156 -0
- package/dist/query-BzifXlPS.mjs.map +1 -0
- package/dist/query-OzMJ6vJP.mjs +41 -0
- package/dist/query-OzMJ6vJP.mjs.map +1 -0
- package/dist/rate-limit-Csp60Vik.mjs +120 -0
- package/dist/rate-limit-Csp60Vik.mjs.map +1 -0
- package/dist/receipt-B-aU4hpJ.mjs +43 -0
- package/dist/receipt-B-aU4hpJ.mjs.map +1 -0
- package/dist/redirect-CDSw1sU3.mjs +17 -0
- package/dist/redirect-CDSw1sU3.mjs.map +1 -0
- package/dist/redirect-D1ArbO85.mjs +411 -0
- package/dist/redirect-D1ArbO85.mjs.map +1 -0
- package/dist/redirects-BjTwDTsV.mjs +148 -0
- package/dist/redirects-BjTwDTsV.mjs.map +1 -0
- package/dist/redirects-Ck50kH3n.mjs +446 -0
- package/dist/redirects-Ck50kH3n.mjs.map +1 -0
- package/dist/registry/testing.mjs +3 -3
- package/dist/registry-CFcNCayZ.mjs +6754 -0
- package/dist/registry-CFcNCayZ.mjs.map +1 -0
- package/dist/relations-Cfaa1fDl.mjs +776 -0
- package/dist/relations-Cfaa1fDl.mjs.map +1 -0
- package/dist/request-cache-iHRlHx1d.mjs +104 -0
- package/dist/request-cache-iHRlHx1d.mjs.map +1 -0
- package/dist/request-context.d.mts +1 -1
- package/dist/request-meta-D47mqyev.mjs +141 -0
- package/dist/request-meta-D47mqyev.mjs.map +1 -0
- package/dist/resolve-BPE8sMvx.mjs +99 -0
- package/dist/resolve-BPE8sMvx.mjs.map +1 -0
- package/dist/resolve-C0s1E_fH.mjs +199 -0
- package/dist/resolve-C0s1E_fH.mjs.map +1 -0
- package/dist/revision-j1p4-bOj.mjs +302 -0
- package/dist/revision-j1p4-bOj.mjs.map +1 -0
- package/dist/route-wire-C9PJV9aL.mjs +197 -0
- package/dist/route-wire-C9PJV9aL.mjs.map +1 -0
- package/dist/routes-lyYw0mMf.mjs +272 -0
- package/dist/routes-lyYw0mMf.mjs.map +1 -0
- package/dist/runner-B3eyB9Gb.mjs +6121 -0
- package/dist/runner-B3eyB9Gb.mjs.map +1 -0
- package/dist/runner-DoYH2Jcu.d.mts +68 -0
- package/dist/runner-DoYH2Jcu.d.mts.map +1 -0
- package/dist/runtime.d.mts +13 -13
- package/dist/runtime.mjs +3 -3
- package/dist/schema-BAayK46S.mjs +13 -0
- package/dist/schema-BAayK46S.mjs.map +1 -0
- package/dist/schema-Gqcl-8G4.mjs +815 -0
- package/dist/schema-Gqcl-8G4.mjs.map +1 -0
- package/dist/scopes-BqPOKoKf.mjs +34 -0
- package/dist/scopes-BqPOKoKf.mjs.map +1 -0
- package/dist/search-YJKPIEV6.mjs +448 -0
- package/dist/search-YJKPIEV6.mjs.map +1 -0
- package/dist/sections-BR_e-wK5.mjs +346 -0
- package/dist/sections-BR_e-wK5.mjs.map +1 -0
- package/dist/seed/index.d.mts +2 -2
- package/dist/seed/index.mjs +37 -31
- package/dist/seo/index.d.mts +3 -3
- package/dist/seo/index.mjs +22 -21
- package/dist/seo/index.mjs.map +1 -1
- package/dist/seo-Dsj8hy3j.mjs +114 -0
- package/dist/seo-Dsj8hy3j.mjs.map +1 -0
- package/dist/seo-XvH4LNNp.mjs +133 -0
- package/dist/seo-XvH4LNNp.mjs.map +1 -0
- package/dist/service-BsVG05gS.mjs +150 -0
- package/dist/service-BsVG05gS.mjs.map +1 -0
- package/dist/session-user-DgKbYrlj.mjs +51 -0
- package/dist/session-user-DgKbYrlj.mjs.map +1 -0
- package/dist/settings-CNPUntkh.mjs +51 -0
- package/dist/settings-CNPUntkh.mjs.map +1 -0
- package/dist/settings-D5EHi0Tk.mjs +439 -0
- package/dist/settings-D5EHi0Tk.mjs.map +1 -0
- package/dist/settings-DSfE7wOa.mjs +61 -0
- package/dist/settings-DSfE7wOa.mjs.map +1 -0
- package/dist/setup-complete-B8W8sJ9v.mjs +26 -0
- package/dist/setup-complete-B8W8sJ9v.mjs.map +1 -0
- package/dist/setup-nonce-DnSBP260.mjs +25 -0
- package/dist/setup-nonce-DnSBP260.mjs.map +1 -0
- package/dist/site-settings-NGzdrt7O.mjs +50 -0
- package/dist/site-settings-NGzdrt7O.mjs.map +1 -0
- package/dist/site-url-D6JB7tLW.mjs +16 -0
- package/dist/site-url-D6JB7tLW.mjs.map +1 -0
- package/dist/snapshot-CdcwwWAf.mjs +414 -0
- package/dist/snapshot-CdcwwWAf.mjs.map +1 -0
- package/dist/ssrf-Dv0_tRpo.mjs +406 -0
- package/dist/ssrf-Dv0_tRpo.mjs.map +1 -0
- package/dist/stage-CUjhED3P.mjs +662 -0
- package/dist/stage-CUjhED3P.mjs.map +1 -0
- package/dist/staged-C36IWXff.mjs +659 -0
- package/dist/staged-C36IWXff.mjs.map +1 -0
- package/dist/state-CKouMCSY.mjs +153 -0
- package/dist/state-CKouMCSY.mjs.map +1 -0
- package/dist/status-lzyj4Uu7.mjs +30 -0
- package/dist/status-lzyj4Uu7.mjs.map +1 -0
- 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/storage-query-B-cWcTjJ.d.mts +1594 -0
- package/dist/storage-query-B-cWcTjJ.d.mts.map +1 -0
- package/dist/tar-DsTXX6ch.mjs +449 -0
- package/dist/tar-DsTXX6ch.mjs.map +1 -0
- package/dist/target-DLQCwp_Z.mjs +27 -0
- package/dist/target-DLQCwp_Z.mjs.map +1 -0
- package/dist/taxonomies-BlAjr4BL.mjs +697 -0
- package/dist/taxonomies-BlAjr4BL.mjs.map +1 -0
- package/dist/taxonomies-Byyo7LOZ.mjs +939 -0
- package/dist/taxonomies-Byyo7LOZ.mjs.map +1 -0
- package/dist/taxonomy-CKDwM61Y.mjs +525 -0
- package/dist/taxonomy-CKDwM61Y.mjs.map +1 -0
- package/dist/tokens-BojXlk49.mjs +171 -0
- package/dist/tokens-BojXlk49.mjs.map +1 -0
- package/dist/transaction-DLPQWik1.mjs +29 -0
- package/dist/transaction-DLPQWik1.mjs.map +1 -0
- package/dist/transfer-XSTh2BCr.mjs +8706 -0
- package/dist/transfer-XSTh2BCr.mjs.map +1 -0
- package/dist/transfer-download-DkoCDA9d.mjs +33 -0
- package/dist/transfer-download-DkoCDA9d.mjs.map +1 -0
- package/dist/transfer-iQ26J-RT.mjs +166 -0
- package/dist/transfer-iQ26J-RT.mjs.map +1 -0
- package/dist/transformations-C7RQabKQ.mjs +196 -0
- package/dist/transformations-C7RQabKQ.mjs.map +1 -0
- package/dist/transport-D3RulfD6.mjs +136 -0
- package/dist/transport-D3RulfD6.mjs.map +1 -0
- package/dist/transport-DhlZlf4D.d.mts +42 -0
- package/dist/transport-DhlZlf4D.d.mts.map +1 -0
- package/dist/trusted-proxy-B6ECOZJc.mjs +51 -0
- package/dist/trusted-proxy-B6ECOZJc.mjs.map +1 -0
- package/dist/turnstile-lqUiY7lP.mjs +53 -0
- package/dist/turnstile-lqUiY7lP.mjs.map +1 -0
- package/dist/types-4Dn9bZhu.mjs +77 -0
- package/dist/types-4Dn9bZhu.mjs.map +1 -0
- package/dist/types-5LSo7PPx.d.mts +85 -0
- package/dist/types-5LSo7PPx.d.mts.map +1 -0
- package/dist/types-BQ3hwYJT.d.mts +896 -0
- package/dist/types-BQ3hwYJT.d.mts.map +1 -0
- package/dist/types-BYEk7qo3.d.mts +198 -0
- package/dist/types-BYEk7qo3.d.mts.map +1 -0
- package/dist/types-CJKsWVFR.mjs +199 -0
- package/dist/types-CJKsWVFR.mjs.map +1 -0
- package/dist/types-Ca_w8mmY.d.mts +363 -0
- package/dist/types-Ca_w8mmY.d.mts.map +1 -0
- package/dist/types-CkE41ZAG.mjs +18 -0
- package/dist/types-CkE41ZAG.mjs.map +1 -0
- package/dist/types-D0aJW2uR.d.mts +1641 -0
- package/dist/types-D0aJW2uR.d.mts.map +1 -0
- package/dist/types-DbpN4Qto.d.mts +372 -0
- package/dist/types-DbpN4Qto.d.mts.map +1 -0
- package/dist/types-ILDI1sdY.mjs +16 -0
- package/dist/types-ILDI1sdY.mjs.map +1 -0
- package/dist/types-OC5c-edM.mjs +22 -0
- package/dist/types-OC5c-edM.mjs.map +1 -0
- package/dist/types-aOOxRSx6.mjs +103 -0
- package/dist/types-aOOxRSx6.mjs.map +1 -0
- package/dist/types-m1WbUffD.d.mts +198 -0
- package/dist/types-m1WbUffD.d.mts.map +1 -0
- package/dist/types-uxLoPBio.d.mts +124 -0
- package/dist/types-uxLoPBio.d.mts.map +1 -0
- package/dist/types-we5uR-tV.d.mts +287 -0
- package/dist/types-we5uR-tV.d.mts.map +1 -0
- package/dist/upload-attempts-DduMy6B0.mjs +32 -0
- package/dist/upload-attempts-DduMy6B0.mjs.map +1 -0
- package/dist/url-pattern-B3EwxAAk.mjs +33 -0
- package/dist/url-pattern-B3EwxAAk.mjs.map +1 -0
- package/dist/user-ElwQjTQT.mjs +171 -0
- package/dist/user-ElwQjTQT.mjs.map +1 -0
- package/dist/utils-BlAXmfOG.mjs +439 -0
- package/dist/utils-BlAXmfOG.mjs.map +1 -0
- package/dist/validate-CH0X5b2c.d.mts +468 -0
- package/dist/validate-CH0X5b2c.d.mts.map +1 -0
- package/dist/validate-CfgRpcjA.mjs +492 -0
- package/dist/validate-CfgRpcjA.mjs.map +1 -0
- package/dist/validation-DvYJtv4k.mjs +218 -0
- package/dist/validation-DvYJtv4k.mjs.map +1 -0
- package/dist/version-DgYjhTud.mjs +9 -0
- package/dist/version-DgYjhTud.mjs.map +1 -0
- package/dist/version-Dq71scUb.mjs +7 -0
- package/dist/version-Dq71scUb.mjs.map +1 -0
- package/dist/widgets-ChFIj0be.mjs +126 -0
- package/dist/widgets-ChFIj0be.mjs.map +1 -0
- package/dist/wxr-taxonomies-CBZMp2YX.mjs +372 -0
- package/dist/wxr-taxonomies-CBZMp2YX.mjs.map +1 -0
- package/dist/wxr-taxonomies-DlKDpWN1.d.mts +34 -0
- package/dist/wxr-taxonomies-DlKDpWN1.d.mts.map +1 -0
- package/dist/zod-generator-DmTKI-Ig.mjs +426 -0
- package/dist/zod-generator-DmTKI-Ig.mjs.map +1 -0
- package/package.json +7 -6
- package/src/api/handlers/content.ts +593 -16
- package/src/api/handlers/device-flow.ts +74 -21
- package/src/api/handlers/index.ts +1 -0
- package/src/api/handlers/manifest.ts +79 -5
- package/src/api/handlers/media-upload.ts +17 -71
- package/src/api/handlers/media.ts +97 -3
- package/src/api/handlers/relations.ts +638 -157
- package/src/api/handlers/revision.ts +30 -0
- package/src/api/handlers/schema.ts +403 -1
- package/src/api/handlers/snapshot.ts +257 -3
- package/src/api/handlers/staged-references.ts +142 -0
- package/src/api/handlers/validate-references.ts +146 -0
- package/src/api/schemas/content.ts +13 -0
- package/src/api/schemas/relations.ts +54 -44
- package/src/api/schemas/schema.ts +14 -0
- package/src/astro/integration/routes.ts +15 -19
- package/src/astro/integration/vite-config.ts +10 -4
- package/src/astro/middleware.ts +1 -0
- package/src/astro/routes/api/content/[collection]/[id]/references/[relation]/children.ts +11 -54
- package/src/astro/routes/api/content/[collection]/[id].ts +3 -1
- package/src/astro/routes/api/oauth/device/authorize.ts +33 -4
- package/src/astro/routes/api/relations/index.ts +4 -4
- package/src/astro/routes/api/schema/collections/[slug]/fields/[fieldSlug].ts +6 -2
- package/src/astro/routes/api/setup/index.ts +66 -23
- package/src/astro/routes/api/snapshot.ts +2 -1
- package/src/astro/types.ts +10 -0
- package/src/cleanup.ts +10 -0
- package/src/cli/commands/export-seed.ts +510 -89
- package/src/components/Columns.astro +3 -1
- package/src/components/Cover.astro +3 -1
- package/src/components/WidgetArea.astro +3 -2
- package/src/database/migrations/086_relations_structural.ts +197 -0
- package/src/database/migrations/087_reference_field_relations.ts +407 -0
- package/src/database/migrations/runner.ts +4 -0
- package/src/database/reference-backfill.ts +141 -0
- package/src/database/repositories/content.ts +43 -8
- package/src/database/repositories/media.ts +40 -1
- package/src/database/repositories/redirect.ts +17 -34
- package/src/database/repositories/relation.ts +620 -208
- package/src/database/repositories/revision.ts +16 -0
- package/src/database/repositories/types.ts +38 -0
- package/src/database/transaction.ts +12 -1
- package/src/database/types.ts +14 -5
- package/src/emdash-runtime.ts +114 -11
- package/src/index.ts +11 -0
- package/src/loader.ts +169 -22
- package/src/mcp/server.ts +13 -48
- package/src/query.ts +455 -25
- package/src/references/field-map.ts +115 -0
- package/src/references/resolve.ts +160 -0
- package/src/references/staged.ts +117 -0
- package/src/references/types.ts +16 -0
- package/src/registry/artifact-fetch.ts +45 -271
- package/src/schema/registry.ts +99 -24
- package/src/schema/types.ts +58 -0
- package/src/schema/zod-generator.ts +67 -1
- package/src/seed/apply.ts +841 -103
- package/src/seed/types.ts +36 -2
- package/src/seed/validate.ts +78 -2
- package/src/transfer/analyze/unique-keys.ts +3 -12
- package/src/transfer/analyze/validate.ts +65 -39
- package/src/transfer/analyze/values.ts +12 -1
- package/src/transfer/export/readers.ts +12 -8
- package/src/transfer/format/columns.ts +26 -6
- package/src/transfer/format/kinds.ts +21 -5
- package/src/transfer/import/context.ts +8 -1
- package/src/transfer/ops/package-index.ts +1 -1
- package/dist/action-token-DYwe4Pk0.mjs +0 -26
- package/dist/action-token-DYwe4Pk0.mjs.map +0 -1
- package/dist/activation-LOkDM5WT.mjs +0 -382
- package/dist/activation-LOkDM5WT.mjs.map +0 -1
- package/dist/adapters-B64LbYcB.d.mts +0 -171
- package/dist/adapters-B64LbYcB.d.mts.map +0 -1
- package/dist/allowed-origins-CHB8oZNM.mjs +0 -116
- package/dist/allowed-origins-CHB8oZNM.mjs.map +0 -1
- package/dist/api-cFFZpyS0.mjs +0 -4718
- package/dist/api-cFFZpyS0.mjs.map +0 -1
- package/dist/api-tokens-s4i4aUp_.mjs +0 -166
- package/dist/api-tokens-s4i4aUp_.mjs.map +0 -1
- package/dist/apply-CoT603H3.mjs +0 -1163
- package/dist/apply-CoT603H3.mjs.map +0 -1
- package/dist/approvals-CqMfNxak.mjs +0 -460
- package/dist/approvals-CqMfNxak.mjs.map +0 -1
- package/dist/artifact-fetch-DZMOGZ3-.mjs +0 -818
- package/dist/artifact-fetch-DZMOGZ3-.mjs.map +0 -1
- package/dist/astro/routes/api/relations/_id_/translations.d.mts +0 -8
- package/dist/astro/routes/api/relations/_id_/translations.d.mts.map +0 -1
- package/dist/astro/routes/api/relations/_id_/translations.mjs +0 -47
- package/dist/astro/routes/api/relations/_id_/translations.mjs.map +0 -1
- package/dist/audit-RfCugiSB.mjs +0 -127
- package/dist/audit-RfCugiSB.mjs.map +0 -1
- package/dist/authoritative-records-CoJvBXAD.mjs +0 -5172
- package/dist/authoritative-records-CoJvBXAD.mjs.map +0 -1
- package/dist/authorize-seCifOMJ.mjs +0 -49
- package/dist/authorize-seCifOMJ.mjs.map +0 -1
- package/dist/backup-CBu0LrXf.mjs +0 -246
- package/dist/backup-CBu0LrXf.mjs.map +0 -1
- package/dist/block-type-registry-DUI_3KxT.mjs +0 -6709
- package/dist/block-type-registry-DUI_3KxT.mjs.map +0 -1
- package/dist/block-types-BmZmLmAD.mjs +0 -132
- package/dist/block-types-BmZmLmAD.mjs.map +0 -1
- package/dist/block-values-C_VIPr5t.mjs +0 -175
- package/dist/block-values-C_VIPr5t.mjs.map +0 -1
- package/dist/byline-DYmkXqvo.mjs +0 -909
- package/dist/byline-DYmkXqvo.mjs.map +0 -1
- package/dist/byline-fields-D28AT-Fh.mjs +0 -123
- package/dist/byline-fields-D28AT-Fh.mjs.map +0 -1
- package/dist/byline-registry-gnKscbQX.mjs +0 -406
- package/dist/byline-registry-gnKscbQX.mjs.map +0 -1
- package/dist/bylines-BPwJqoYH.mjs +0 -232
- package/dist/bylines-BPwJqoYH.mjs.map +0 -1
- package/dist/bylines-ukLaYpVZ.mjs +0 -214
- package/dist/bylines-ukLaYpVZ.mjs.map +0 -1
- package/dist/cache-m7UEkRFV.mjs +0 -108
- package/dist/cache-m7UEkRFV.mjs.map +0 -1
- package/dist/canonical-YhEQezjg.mjs +0 -174
- package/dist/canonical-YhEQezjg.mjs.map +0 -1
- package/dist/capture-triggers-kJyl_yyM.mjs +0 -362
- package/dist/capture-triggers-kJyl_yyM.mjs.map +0 -1
- package/dist/challenge-store-ppU6Uv13.mjs +0 -51
- package/dist/challenge-store-ppU6Uv13.mjs.map +0 -1
- package/dist/checksum-B2IINIlN.mjs +0 -162
- package/dist/checksum-B2IINIlN.mjs.map +0 -1
- package/dist/chrome-tags-DApCQSIk.mjs +0 -24
- package/dist/chrome-tags-DApCQSIk.mjs.map +0 -1
- package/dist/chunks-Dms7Uxbt.mjs +0 -25
- package/dist/chunks-Dms7Uxbt.mjs.map +0 -1
- package/dist/collection-deletion-BIm28mo3.mjs +0 -436
- package/dist/collection-deletion-BIm28mo3.mjs.map +0 -1
- package/dist/collection-deletion-processor-Br6rxs3u.mjs +0 -217
- package/dist/collection-deletion-processor-Br6rxs3u.mjs.map +0 -1
- package/dist/collection-slugs-cache-CjGk__zp.mjs +0 -85
- package/dist/collection-slugs-cache-CjGk__zp.mjs.map +0 -1
- package/dist/comment-CrBl22OF.mjs +0 -313
- package/dist/comment-CrBl22OF.mjs.map +0 -1
- package/dist/comment-reaction-JEQ2Fpd8.mjs +0 -85
- package/dist/comment-reaction-JEQ2Fpd8.mjs.map +0 -1
- package/dist/comments-2ah9du9y.mjs +0 -195
- package/dist/comments-2ah9du9y.mjs.map +0 -1
- package/dist/comments-fHZ8ON9O.mjs +0 -99
- package/dist/comments-fHZ8ON9O.mjs.map +0 -1
- package/dist/components-CXbq7CSM.mjs +0 -108
- package/dist/components-CXbq7CSM.mjs.map +0 -1
- package/dist/config-5ii2haYu.d.mts +0 -6528
- package/dist/config-5ii2haYu.d.mts.map +0 -1
- package/dist/config-IhybvkIQ.mjs +0 -242
- package/dist/config-IhybvkIQ.mjs.map +0 -1
- package/dist/config-Py43JK9r.d.mts +0 -39
- package/dist/config-Py43JK9r.d.mts.map +0 -1
- package/dist/content-DFaIEDj9.mjs +0 -2281
- package/dist/content-DFaIEDj9.mjs.map +0 -1
- package/dist/content-list-query-Dra4Dalc.d.mts +0 -26
- package/dist/content-list-query-Dra4Dalc.d.mts.map +0 -1
- package/dist/content-policy-DFNw91-d.mjs +0 -46
- package/dist/content-policy-DFNw91-d.mjs.map +0 -1
- package/dist/content-repair-Q8IUrpLL.mjs +0 -442
- package/dist/content-repair-Q8IUrpLL.mjs.map +0 -1
- package/dist/context-BeGccdUX.mjs +0 -1921
- package/dist/context-BeGccdUX.mjs.map +0 -1
- package/dist/cron-7DCJwPXq.mjs +0 -284
- package/dist/cron-7DCJwPXq.mjs.map +0 -1
- package/dist/dashboard-DjrB-xxZ.mjs +0 -151
- package/dist/dashboard-DjrB-xxZ.mjs.map +0 -1
- package/dist/default-DQ6vsviu.mjs +0 -81
- package/dist/default-DQ6vsviu.mjs.map +0 -1
- package/dist/deferred-tasks-BPxXUB4x.d.mts +0 -9
- package/dist/deferred-tasks-BPxXUB4x.d.mts.map +0 -1
- package/dist/dev-typegen-CZaPLl3V.mjs +0 -29
- package/dist/dev-typegen-CZaPLl3V.mjs.map +0 -1
- package/dist/device-flow-CRd6DXmW.mjs +0 -466
- package/dist/device-flow-CRd6DXmW.mjs.map +0 -1
- package/dist/digest-BarSh-pN.mjs +0 -194
- package/dist/digest-BarSh-pN.mjs.map +0 -1
- package/dist/direct-executor-BmuFJJZV.mjs +0 -104
- package/dist/direct-executor-BmuFJJZV.mjs.map +0 -1
- package/dist/dist-BNwANFJR.mjs +0 -810
- package/dist/dist-BNwANFJR.mjs.map +0 -1
- package/dist/email-console-bJn3ctqA.mjs +0 -50
- package/dist/email-console-bJn3ctqA.mjs.map +0 -1
- package/dist/email-locale-CN6WAMx0.mjs +0 -25
- package/dist/email-locale-CN6WAMx0.mjs.map +0 -1
- package/dist/emdash-runtime-DAjghyEG.mjs +0 -4186
- package/dist/emdash-runtime-DAjghyEG.mjs.map +0 -1
- package/dist/enrich-Dl3kZ-lP.mjs +0 -194
- package/dist/enrich-Dl3kZ-lP.mjs.map +0 -1
- package/dist/entry-lock-BJYdBfXb.mjs +0 -1097
- package/dist/entry-lock-BJYdBfXb.mjs.map +0 -1
- package/dist/entry-lock-DHQOxN7R.mjs +0 -163
- package/dist/entry-lock-DHQOxN7R.mjs.map +0 -1
- package/dist/entry-lock-DVhCt49A.d.mts +0 -4368
- package/dist/entry-lock-DVhCt49A.d.mts.map +0 -1
- package/dist/entry-locks-D0foLdjQ.mjs +0 -167
- package/dist/entry-locks-D0foLdjQ.mjs.map +0 -1
- package/dist/error-CfvOHP0M.mjs +0 -90
- package/dist/error-CfvOHP0M.mjs.map +0 -1
- package/dist/errors-BF0_LFhW.mjs +0 -460
- package/dist/errors-BF0_LFhW.mjs.map +0 -1
- package/dist/errors-DgE1zJGG.mjs +0 -120
- package/dist/errors-DgE1zJGG.mjs.map +0 -1
- package/dist/escape-CuaZhZvL.mjs +0 -9
- package/dist/escape-CuaZhZvL.mjs.map +0 -1
- package/dist/fence-CMDXJYc_.mjs +0 -162
- package/dist/fence-CMDXJYc_.mjs.map +0 -1
- package/dist/field-defs-cache-HIgBbqZZ.mjs +0 -77
- package/dist/field-defs-cache-HIgBbqZZ.mjs.map +0 -1
- package/dist/focal-point-Gr34o-4o.mjs +0 -23
- package/dist/focal-point-Gr34o-4o.mjs.map +0 -1
- package/dist/fts-manager-S-K0laoS.mjs +0 -443
- package/dist/fts-manager-S-K0laoS.mjs.map +0 -1
- package/dist/gc-DjKY0Ay1.mjs +0 -75
- package/dist/gc-DjKY0Ay1.mjs.map +0 -1
- package/dist/hash-SDAW6zC-.mjs +0 -37
- package/dist/hash-SDAW6zC-.mjs.map +0 -1
- package/dist/hook-result-B5bXDgS2.d.mts +0 -31
- package/dist/hook-result-B5bXDgS2.d.mts.map +0 -1
- package/dist/hreflang-D5uNnsGJ.d.mts +0 -50
- package/dist/hreflang-D5uNnsGJ.d.mts.map +0 -1
- package/dist/hreflang-DMFBL2eb.mjs +0 -105
- package/dist/hreflang-DMFBL2eb.mjs.map +0 -1
- package/dist/http-route-dispatch-BitqzwMy.mjs +0 -339
- package/dist/http-route-dispatch-BitqzwMy.mjs.map +0 -1
- package/dist/identity-IyNWwXr6.mjs +0 -35
- package/dist/identity-IyNWwXr6.mjs.map +0 -1
- package/dist/import-C3JZplWq.mjs +0 -2020
- package/dist/import-C3JZplWq.mjs.map +0 -1
- package/dist/index-D-hdtLe8.d.mts +0 -623
- package/dist/index-D-hdtLe8.d.mts.map +0 -1
- package/dist/install-finalization-DfM1fj5x.mjs +0 -58
- package/dist/install-finalization-DfM1fj5x.mjs.map +0 -1
- package/dist/keys-yxLm5l35.mjs +0 -61
- package/dist/keys-yxLm5l35.mjs.map +0 -1
- package/dist/kinds-CRu_T5T5.mjs +0 -961
- package/dist/kinds-CRu_T5T5.mjs.map +0 -1
- package/dist/lifecycle-BzeGPeQ-.mjs +0 -25
- package/dist/lifecycle-BzeGPeQ-.mjs.map +0 -1
- package/dist/load-XgJiE6_3.mjs +0 -28
- package/dist/load-XgJiE6_3.mjs.map +0 -1
- package/dist/loader-BzqeR1ZN.mjs +0 -1086
- package/dist/loader-BzqeR1ZN.mjs.map +0 -1
- package/dist/loops-BQSzv5Zn.mjs +0 -203
- package/dist/loops-BQSzv5Zn.mjs.map +0 -1
- package/dist/manifest-builder-B8zR-73J.mjs +0 -189
- package/dist/manifest-builder-B8zR-73J.mjs.map +0 -1
- package/dist/manifest-schema-CY3zng_M.mjs +0 -492
- package/dist/manifest-schema-CY3zng_M.mjs.map +0 -1
- package/dist/media-Pu1L6xir.mjs +0 -408
- package/dist/media-Pu1L6xir.mjs.map +0 -1
- package/dist/media-Qp5S3eH3.mjs +0 -355
- package/dist/media-Qp5S3eH3.mjs.map +0 -1
- package/dist/media-allowlist-BSoa9Vvm.mjs +0 -44
- package/dist/media-allowlist-BSoa9Vvm.mjs.map +0 -1
- package/dist/media-folders-BE0oo2eX.mjs +0 -210
- package/dist/media-folders-BE0oo2eX.mjs.map +0 -1
- package/dist/media-h7tOiDLj.mjs +0 -221
- package/dist/media-h7tOiDLj.mjs.map +0 -1
- package/dist/media-url-jArBpzIG.mjs +0 -43
- package/dist/media-url-jArBpzIG.mjs.map +0 -1
- package/dist/media-usage-My-Vi-ex.mjs +0 -1629
- package/dist/media-usage-My-Vi-ex.mjs.map +0 -1
- package/dist/media-usage-activation-HKp7zk7W.mjs +0 -78
- package/dist/media-usage-activation-HKp7zk7W.mjs.map +0 -1
- package/dist/media-usage-work-C2OZLCAd.mjs +0 -586
- package/dist/media-usage-work-C2OZLCAd.mjs.map +0 -1
- package/dist/media-usage-work-DwUNbgvS.mjs +0 -152
- package/dist/media-usage-work-DwUNbgvS.mjs.map +0 -1
- package/dist/menus-BM7BPLOb.mjs +0 -139
- package/dist/menus-BM7BPLOb.mjs.map +0 -1
- package/dist/menus-ITeAbcIF.mjs +0 -753
- package/dist/menus-ITeAbcIF.mjs.map +0 -1
- package/dist/menus-TsSGmSR4.mjs +0 -3608
- package/dist/menus-TsSGmSR4.mjs.map +0 -1
- package/dist/mime-ChLqYwDk.mjs +0 -36
- package/dist/mime-ChLqYwDk.mjs.map +0 -1
- package/dist/mode-CCuKXUci.mjs +0 -23
- package/dist/mode-CCuKXUci.mjs.map +0 -1
- package/dist/node-sqlite-compat-CONMsl-x.mjs +0 -46
- package/dist/node-sqlite-compat-CONMsl-x.mjs.map +0 -1
- package/dist/normalize-CO2P8-iE.mjs +0 -191
- package/dist/normalize-CO2P8-iE.mjs.map +0 -1
- package/dist/oauth-authorization-DlMIL5_h.mjs +0 -274
- package/dist/oauth-authorization-DlMIL5_h.mjs.map +0 -1
- package/dist/oauth-clients-Djq9r_KP.mjs +0 -266
- package/dist/oauth-clients-Djq9r_KP.mjs.map +0 -1
- package/dist/oauth-state-store-BbjnZXNC.mjs +0 -50
- package/dist/oauth-state-store-BbjnZXNC.mjs.map +0 -1
- package/dist/oauth-user-lookup-vue9a64A.mjs +0 -26
- package/dist/oauth-user-lookup-vue9a64A.mjs.map +0 -1
- package/dist/options-SQCHQCPH.d.mts +0 -81
- package/dist/options-SQCHQCPH.d.mts.map +0 -1
- package/dist/parse-CVgO-Qai.d.mts +0 -168
- package/dist/parse-CVgO-Qai.d.mts.map +0 -1
- package/dist/parse-DY6OD1j_.mjs +0 -81
- package/dist/parse-DY6OD1j_.mjs.map +0 -1
- package/dist/passkey-config-X_H8128a.mjs +0 -46
- package/dist/passkey-config-X_H8128a.mjs.map +0 -1
- package/dist/paths-JxokKIbr.mjs +0 -77
- package/dist/paths-JxokKIbr.mjs.map +0 -1
- package/dist/patterns-BhAvqO0S.mjs +0 -145
- package/dist/patterns-BhAvqO0S.mjs.map +0 -1
- package/dist/placeholder-MSEd8gty.d.mts +0 -306
- package/dist/placeholder-MSEd8gty.d.mts.map +0 -1
- package/dist/plan-xjcWrAah.mjs +0 -135
- package/dist/plan-xjcWrAah.mjs.map +0 -1
- package/dist/plugins-DUXUt8B9.mjs +0 -277
- package/dist/plugins-DUXUt8B9.mjs.map +0 -1
- package/dist/policy-CUvwAARc.mjs +0 -45
- package/dist/policy-CUvwAARc.mjs.map +0 -1
- package/dist/portable-text-5O_ZGUjB.mjs +0 -307
- package/dist/portable-text-5O_ZGUjB.mjs.map +0 -1
- package/dist/preview-CIUcPYr6.mjs +0 -107
- package/dist/preview-CIUcPYr6.mjs.map +0 -1
- package/dist/protocol-B97DZaFr.d.mts +0 -61
- package/dist/protocol-B97DZaFr.d.mts.map +0 -1
- package/dist/public-submission-BFBUrqst.mjs +0 -250
- package/dist/public-submission-BFBUrqst.mjs.map +0 -1
- package/dist/public-url-Bn7U0D7-.mjs +0 -101
- package/dist/public-url-Bn7U0D7-.mjs.map +0 -1
- package/dist/query-B48peoRT.mjs +0 -890
- package/dist/query-B48peoRT.mjs.map +0 -1
- package/dist/query-C4IH0uhR.mjs +0 -41
- package/dist/query-C4IH0uhR.mjs.map +0 -1
- package/dist/rate-limit-BZ6nybgc.mjs +0 -120
- package/dist/rate-limit-BZ6nybgc.mjs.map +0 -1
- package/dist/receipt-B4wJj5Jq.mjs +0 -43
- package/dist/receipt-B4wJj5Jq.mjs.map +0 -1
- package/dist/redirect-Cd1E7VUt.mjs +0 -17
- package/dist/redirect-Cd1E7VUt.mjs.map +0 -1
- package/dist/redirect-iJf5fltD.mjs +0 -415
- package/dist/redirect-iJf5fltD.mjs.map +0 -1
- package/dist/redirects-CYu1u1aK.mjs +0 -446
- package/dist/redirects-CYu1u1aK.mjs.map +0 -1
- package/dist/redirects-Cv9apQKj.mjs +0 -148
- package/dist/redirects-Cv9apQKj.mjs.map +0 -1
- package/dist/relation-M4NUCb0b.mjs +0 -334
- package/dist/relation-M4NUCb0b.mjs.map +0 -1
- package/dist/relations-CCif47Oq.mjs +0 -403
- package/dist/relations-CCif47Oq.mjs.map +0 -1
- package/dist/relations-CK9CYUyr.mjs +0 -310
- package/dist/relations-CK9CYUyr.mjs.map +0 -1
- package/dist/request-cache-DzLYKm_x.mjs +0 -104
- package/dist/request-cache-DzLYKm_x.mjs.map +0 -1
- package/dist/request-meta-sZXt3sRo.mjs +0 -141
- package/dist/request-meta-sZXt3sRo.mjs.map +0 -1
- package/dist/resolve-2WbQsCvT.mjs +0 -199
- package/dist/resolve-2WbQsCvT.mjs.map +0 -1
- package/dist/route-wire--1hLuACz.mjs +0 -197
- package/dist/route-wire--1hLuACz.mjs.map +0 -1
- package/dist/routes-CUsM40Cc.mjs +0 -272
- package/dist/routes-CUsM40Cc.mjs.map +0 -1
- package/dist/runner-1y4J9fJB.mjs +0 -5742
- package/dist/runner-1y4J9fJB.mjs.map +0 -1
- package/dist/runner-D5_LzKXI.d.mts +0 -68
- package/dist/runner-D5_LzKXI.d.mts.map +0 -1
- package/dist/schema-BABiRdsH.mjs +0 -13
- package/dist/schema-BABiRdsH.mjs.map +0 -1
- package/dist/schema-Du3MzCG0.mjs +0 -446
- package/dist/schema-Du3MzCG0.mjs.map +0 -1
- package/dist/scopes-Dbk-ElhT.mjs +0 -34
- package/dist/scopes-Dbk-ElhT.mjs.map +0 -1
- package/dist/search-Bt1PL1jf.mjs +0 -448
- package/dist/search-Bt1PL1jf.mjs.map +0 -1
- package/dist/sections-Ddptx_o9.mjs +0 -346
- package/dist/sections-Ddptx_o9.mjs.map +0 -1
- package/dist/seo-CZT2oLtT.mjs +0 -114
- package/dist/seo-CZT2oLtT.mjs.map +0 -1
- package/dist/seo-D5w3-Azy.mjs +0 -133
- package/dist/seo-D5w3-Azy.mjs.map +0 -1
- package/dist/service-DuykXPyW.mjs +0 -150
- package/dist/service-DuykXPyW.mjs.map +0 -1
- package/dist/session-user-BhaVp8w0.mjs +0 -51
- package/dist/session-user-BhaVp8w0.mjs.map +0 -1
- package/dist/settings-2xNYr90o.mjs +0 -51
- package/dist/settings-2xNYr90o.mjs.map +0 -1
- package/dist/settings-CgjRWGW9.mjs +0 -439
- package/dist/settings-CgjRWGW9.mjs.map +0 -1
- package/dist/settings-DYidIB26.mjs +0 -61
- package/dist/settings-DYidIB26.mjs.map +0 -1
- package/dist/setup-complete-bOogcHWG.mjs +0 -26
- package/dist/setup-complete-bOogcHWG.mjs.map +0 -1
- package/dist/setup-nonce-0EGuKM4s.mjs +0 -25
- package/dist/setup-nonce-0EGuKM4s.mjs.map +0 -1
- package/dist/site-settings-DOgRUoFX.mjs +0 -50
- package/dist/site-settings-DOgRUoFX.mjs.map +0 -1
- package/dist/site-url-BU_bbxwj.mjs +0 -16
- package/dist/site-url-BU_bbxwj.mjs.map +0 -1
- package/dist/snapshot-CugwUqKQ.mjs +0 -237
- package/dist/snapshot-CugwUqKQ.mjs.map +0 -1
- package/dist/ssrf-CJUnJymJ.mjs +0 -406
- package/dist/ssrf-CJUnJymJ.mjs.map +0 -1
- package/dist/stage-DgrBz_du.mjs +0 -662
- package/dist/stage-DgrBz_du.mjs.map +0 -1
- package/dist/state-DDiPySSG.mjs +0 -153
- package/dist/state-DDiPySSG.mjs.map +0 -1
- package/dist/status-DZKIG4a9.mjs +0 -30
- package/dist/status-DZKIG4a9.mjs.map +0 -1
- package/dist/storage-query-Bdv7A62k.d.mts +0 -1576
- package/dist/storage-query-Bdv7A62k.d.mts.map +0 -1
- package/dist/tar-_1AgTYFu.mjs +0 -449
- package/dist/tar-_1AgTYFu.mjs.map +0 -1
- package/dist/target-_7pn2Gbg.mjs +0 -27
- package/dist/target-_7pn2Gbg.mjs.map +0 -1
- package/dist/taxonomies-C1IwNe8Q.mjs +0 -697
- package/dist/taxonomies-C1IwNe8Q.mjs.map +0 -1
- package/dist/taxonomies-C_XMoRcX.mjs +0 -939
- package/dist/taxonomies-C_XMoRcX.mjs.map +0 -1
- package/dist/taxonomy-C3Fu1YeH.mjs +0 -525
- package/dist/taxonomy-C3Fu1YeH.mjs.map +0 -1
- package/dist/tokens-u78jETkX.mjs +0 -171
- package/dist/tokens-u78jETkX.mjs.map +0 -1
- package/dist/transaction-BcJO4Tmc.mjs +0 -29
- package/dist/transaction-BcJO4Tmc.mjs.map +0 -1
- package/dist/transfer-BhUCrgDc.mjs +0 -8675
- package/dist/transfer-BhUCrgDc.mjs.map +0 -1
- package/dist/transfer-DIGvR9Af.mjs +0 -166
- package/dist/transfer-DIGvR9Af.mjs.map +0 -1
- package/dist/transfer-download-Pml7RMio.mjs +0 -33
- package/dist/transfer-download-Pml7RMio.mjs.map +0 -1
- package/dist/transformations-9gfpwY65.mjs +0 -196
- package/dist/transformations-9gfpwY65.mjs.map +0 -1
- package/dist/transport-BIfH7_hx.d.mts +0 -42
- package/dist/transport-BIfH7_hx.d.mts.map +0 -1
- package/dist/transport-DKWIq53q.mjs +0 -136
- package/dist/transport-DKWIq53q.mjs.map +0 -1
- package/dist/trusted-proxy-tKiVtyTD.mjs +0 -51
- package/dist/trusted-proxy-tKiVtyTD.mjs.map +0 -1
- package/dist/turnstile-DpsoyOfg.mjs +0 -53
- package/dist/turnstile-DpsoyOfg.mjs.map +0 -1
- package/dist/types-B4sUC2p1.d.mts +0 -198
- package/dist/types-B4sUC2p1.d.mts.map +0 -1
- package/dist/types-B7Lmsh1E.d.mts +0 -887
- package/dist/types-B7Lmsh1E.d.mts.map +0 -1
- package/dist/types-BZakh7Ym.mjs +0 -22
- package/dist/types-BZakh7Ym.mjs.map +0 -1
- package/dist/types-B_CppEmv.d.mts +0 -264
- package/dist/types-B_CppEmv.d.mts.map +0 -1
- package/dist/types-BcrBrE6-.mjs +0 -159
- package/dist/types-BcrBrE6-.mjs.map +0 -1
- package/dist/types-BkUg2yHx.mjs +0 -92
- package/dist/types-BkUg2yHx.mjs.map +0 -1
- package/dist/types-CAZgq9fO.d.mts +0 -124
- package/dist/types-CAZgq9fO.d.mts.map +0 -1
- package/dist/types-Cd-O03VG.d.mts +0 -363
- package/dist/types-Cd-O03VG.d.mts.map +0 -1
- package/dist/types-Cr-Kg-3D.d.mts +0 -1641
- package/dist/types-Cr-Kg-3D.d.mts.map +0 -1
- package/dist/types-D2fvWd1i.d.mts +0 -359
- package/dist/types-D2fvWd1i.d.mts.map +0 -1
- package/dist/types-D7HUsguf.mjs +0 -77
- package/dist/types-D7HUsguf.mjs.map +0 -1
- package/dist/types-DA1Te3Oy.d.mts +0 -198
- package/dist/types-DA1Te3Oy.d.mts.map +0 -1
- package/dist/types-DhV6Q5bP.mjs +0 -18
- package/dist/types-DhV6Q5bP.mjs.map +0 -1
- package/dist/types-DnnVSl6Y.d.mts +0 -85
- package/dist/types-DnnVSl6Y.d.mts.map +0 -1
- package/dist/types-VT4-BugW.mjs +0 -16
- package/dist/types-VT4-BugW.mjs.map +0 -1
- package/dist/upload-attempts-B68ZGNu9.mjs +0 -32
- package/dist/upload-attempts-B68ZGNu9.mjs.map +0 -1
- package/dist/url-pattern-CCeZMGOh.mjs +0 -33
- package/dist/url-pattern-CCeZMGOh.mjs.map +0 -1
- package/dist/user-DDSL-sGw.mjs +0 -171
- package/dist/user-DDSL-sGw.mjs.map +0 -1
- package/dist/utils-DdhmO9w9.mjs +0 -439
- package/dist/utils-DdhmO9w9.mjs.map +0 -1
- package/dist/validate-CHosPEhs.mjs +0 -453
- package/dist/validate-CHosPEhs.mjs.map +0 -1
- package/dist/validate-CM79QXYE.d.mts +0 -432
- package/dist/validate-CM79QXYE.d.mts.map +0 -1
- package/dist/validation-BFecQczG.mjs +0 -218
- package/dist/validation-BFecQczG.mjs.map +0 -1
- package/dist/version-BRZXVifl.mjs +0 -9
- package/dist/version-BRZXVifl.mjs.map +0 -1
- package/dist/version-DUQDHgrf.mjs +0 -7
- package/dist/version-DUQDHgrf.mjs.map +0 -1
- package/dist/widgets-WdV72brA.mjs +0 -126
- package/dist/widgets-WdV72brA.mjs.map +0 -1
- package/dist/wxr-taxonomies-BHTdqkmZ.d.mts +0 -34
- package/dist/wxr-taxonomies-BHTdqkmZ.d.mts.map +0 -1
- package/dist/wxr-taxonomies-DP6ESgMN.mjs +0 -372
- package/dist/wxr-taxonomies-DP6ESgMN.mjs.map +0 -1
- package/dist/zod-generator-D6uE4WiS.mjs +0 -389
- package/dist/zod-generator-D6uE4WiS.mjs.map +0 -1
- package/src/astro/routes/api/relations/[id]/translations.ts +0 -33
- /package/dist/{api-tokens-CE1ECIg0.mjs → api-tokens-FaG1zPsj.mjs} +0 -0
- /package/dist/{ssrf-DpBH7aOt.mjs → ssrf-DZOt8Qof.mjs} +0 -0
|
@@ -33,10 +33,13 @@ import type {
|
|
|
33
33
|
SeedFile,
|
|
34
34
|
SeedCollection,
|
|
35
35
|
SeedField,
|
|
36
|
+
SeedRelation,
|
|
36
37
|
SeedTaxonomy,
|
|
37
38
|
SeedTaxonomyTerm,
|
|
38
39
|
SeedMenu,
|
|
39
40
|
SeedMenuItem,
|
|
41
|
+
SeedRedirect,
|
|
42
|
+
SeedSection,
|
|
40
43
|
SeedWidgetArea,
|
|
41
44
|
SeedWidget,
|
|
42
45
|
SeedContentEntry,
|
|
@@ -49,6 +52,8 @@ import { slugify } from "../../utils/slugify.js";
|
|
|
49
52
|
|
|
50
53
|
const SETTINGS_PREFIX = "site:";
|
|
51
54
|
|
|
55
|
+
const TRAILING_SLASHES = /\/+$/;
|
|
56
|
+
|
|
52
57
|
export const exportSeedCommand = defineCommand({
|
|
53
58
|
meta: {
|
|
54
59
|
name: "export-seed",
|
|
@@ -76,6 +81,11 @@ export const exportSeedCommand = defineCommand({
|
|
|
76
81
|
description: "Pretty print JSON output",
|
|
77
82
|
default: true,
|
|
78
83
|
},
|
|
84
|
+
"media-base-url": {
|
|
85
|
+
type: "string",
|
|
86
|
+
description: "Public URL of the site, used to write absolute media URLs",
|
|
87
|
+
required: false,
|
|
88
|
+
},
|
|
79
89
|
},
|
|
80
90
|
async run({ args }) {
|
|
81
91
|
const cwd = resolve(args.cwd);
|
|
@@ -108,7 +118,10 @@ export const exportSeedCommand = defineCommand({
|
|
|
108
118
|
}
|
|
109
119
|
|
|
110
120
|
try {
|
|
111
|
-
const seed = await exportSeed(db, args["with-content"]
|
|
121
|
+
const seed = await exportSeed(db, args["with-content"], {
|
|
122
|
+
mediaBaseUrl: args["media-base-url"],
|
|
123
|
+
warn: (message) => process.stderr.write(`Warning: ${message}\n`),
|
|
124
|
+
});
|
|
112
125
|
|
|
113
126
|
// Output to stdout
|
|
114
127
|
const output = args.pretty ? JSON.stringify(seed, null, "\t") : JSON.stringify(seed);
|
|
@@ -124,10 +137,28 @@ export const exportSeedCommand = defineCommand({
|
|
|
124
137
|
},
|
|
125
138
|
});
|
|
126
139
|
|
|
140
|
+
export interface ExportSeedOptions {
|
|
141
|
+
/**
|
|
142
|
+
* Public origin (optionally with a base path) of the site the database
|
|
143
|
+
* belongs to. `$media` URLs are written relative to it; without it they are
|
|
144
|
+
* site-relative paths, which `applySeed` cannot download.
|
|
145
|
+
*/
|
|
146
|
+
mediaBaseUrl?: string;
|
|
147
|
+
/** Receives messages about data the seed cannot carry. */
|
|
148
|
+
warn?: (message: string) => void;
|
|
149
|
+
}
|
|
150
|
+
|
|
127
151
|
/**
|
|
128
152
|
* Export database to seed file format
|
|
129
153
|
*/
|
|
130
|
-
export async function exportSeed(
|
|
154
|
+
export async function exportSeed(
|
|
155
|
+
db: Kysely<Database>,
|
|
156
|
+
withContent?: string,
|
|
157
|
+
options: ExportSeedOptions = {},
|
|
158
|
+
): Promise<SeedFile> {
|
|
159
|
+
const warn = options.warn ?? (() => {});
|
|
160
|
+
const mediaUrlPrefix = mediaFileUrlPrefix(options.mediaBaseUrl);
|
|
161
|
+
|
|
131
162
|
const seed: SeedFile = {
|
|
132
163
|
$schema: "https://emdashcms.com/seed.schema.json",
|
|
133
164
|
version: "1",
|
|
@@ -146,38 +177,38 @@ export async function exportSeed(db: Kysely<Database>, withContent?: string): Pr
|
|
|
146
177
|
// 3. Export collections and fields
|
|
147
178
|
seed.collections = await exportCollections(db);
|
|
148
179
|
|
|
180
|
+
// 3. Export the relations reference fields bind to. Emitted even when no
|
|
181
|
+
// field binds one: a relation outlives the fields that viewed it.
|
|
182
|
+
const relations = await exportRelations(db);
|
|
183
|
+
if (relations.length > 0) {
|
|
184
|
+
seed.relations = relations;
|
|
185
|
+
}
|
|
186
|
+
|
|
149
187
|
// Decide locale-awareness from the data. The runtime sets the i18n config via
|
|
150
188
|
// middleware, but the CLI never does, so `isI18nEnabled()` is always false
|
|
151
|
-
// under `emdash export-seed
|
|
189
|
+
// under `emdash export-seed`. Detecting multiple locales in the data
|
|
152
190
|
// keeps the export locale-aware without the runtime flag.
|
|
153
191
|
const { i18nEnabled, defaultLocale } = await detectLocaleInfo(db, seed.collections);
|
|
154
192
|
|
|
155
193
|
// Self-describe the default locale so a non-`en` single-locale project
|
|
156
194
|
// survives the round-trip: `emdash seed` runs outside the runtime and would
|
|
157
|
-
// otherwise backfill omitted locales as `en
|
|
195
|
+
// otherwise backfill omitted locales as `en`.
|
|
158
196
|
if (defaultLocale) seed.defaultLocale = defaultLocale;
|
|
159
197
|
|
|
160
|
-
//
|
|
198
|
+
// 4. Export taxonomy definitions and terms
|
|
161
199
|
seed.taxonomies = await exportTaxonomies(db, i18nEnabled);
|
|
162
200
|
|
|
163
|
-
//
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
// 5. Export widget areas
|
|
167
|
-
seed.widgetAreas = await exportWidgetAreas(db);
|
|
168
|
-
|
|
169
|
-
// 6. Export byline profiles. The returned map (translation_group -> seed-local
|
|
170
|
-
// id) lets content credits below reference the same ids the root list emits.
|
|
201
|
+
// Byline profiles. The returned map (translation_group -> seed-local id)
|
|
202
|
+
// lets content credits reference the same ids the root list emits.
|
|
171
203
|
const { bylines, groupToSeedId } = await exportBylines(db);
|
|
172
|
-
if (bylines.length > 0) {
|
|
173
|
-
seed.bylines = bylines;
|
|
174
|
-
}
|
|
175
204
|
|
|
176
|
-
//
|
|
205
|
+
// Content is read before menus so menu items can name their targets by
|
|
206
|
+
// seed id.
|
|
207
|
+
let exportedContent: ExportedContent | undefined;
|
|
177
208
|
if (withContent !== undefined) {
|
|
178
209
|
// Treat "all" as a synonym for the bare flag and "true". The args help
|
|
179
210
|
// text documents `all` as a valid value, but without this the literal
|
|
180
|
-
// string is read as a collection name and matches no collection
|
|
211
|
+
// string is read as a collection name and matches no collection.
|
|
181
212
|
const includeAll = withContent === "" || withContent === "true" || withContent === "all";
|
|
182
213
|
const collections = includeAll
|
|
183
214
|
? null // all collections
|
|
@@ -186,18 +217,66 @@ export async function exportSeed(db: Kysely<Database>, withContent?: string): Pr
|
|
|
186
217
|
.map((s) => s.trim())
|
|
187
218
|
.filter(Boolean);
|
|
188
219
|
|
|
189
|
-
|
|
220
|
+
exportedContent = await exportContent(
|
|
190
221
|
db,
|
|
191
222
|
seed.collections || [],
|
|
192
223
|
collections,
|
|
193
224
|
groupToSeedId,
|
|
194
225
|
i18nEnabled,
|
|
226
|
+
mediaUrlPrefix,
|
|
195
227
|
);
|
|
196
228
|
}
|
|
197
229
|
|
|
230
|
+
seed.menus = await exportMenus(db, i18nEnabled, exportedContent?.groupSeedIds ?? new Map());
|
|
231
|
+
|
|
232
|
+
const redirects = await exportRedirects(db, warn);
|
|
233
|
+
if (redirects.length > 0) {
|
|
234
|
+
seed.redirects = redirects;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
seed.widgetAreas = await exportWidgetAreas(db);
|
|
238
|
+
|
|
239
|
+
const sections = await exportSections(db, warn);
|
|
240
|
+
if (sections.length > 0) {
|
|
241
|
+
seed.sections = sections;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
if (bylines.length > 0) {
|
|
245
|
+
seed.bylines = bylines;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
if (exportedContent) {
|
|
249
|
+
seed.content = exportedContent.content;
|
|
250
|
+
if (exportedContent.mediaCount > 0 && !options.mediaBaseUrl) {
|
|
251
|
+
warn(
|
|
252
|
+
`${exportedContent.mediaCount} media reference(s) use site-relative URLs, which \`emdash seed\` cannot download. Pass --media-base-url with the site's public URL to make them importable.`,
|
|
253
|
+
);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
|
|
198
257
|
return seed;
|
|
199
258
|
}
|
|
200
259
|
|
|
260
|
+
const MEDIA_FILE_PATH = "/_emdash/api/media/file/";
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* Prefix for `$media` URLs: the site's base URL (without a trailing slash)
|
|
264
|
+
* plus the public media route, or the bare route when no base is given.
|
|
265
|
+
*/
|
|
266
|
+
function mediaFileUrlPrefix(mediaBaseUrl: string | undefined): string {
|
|
267
|
+
if (mediaBaseUrl === undefined) return MEDIA_FILE_PATH;
|
|
268
|
+
let base: URL;
|
|
269
|
+
try {
|
|
270
|
+
base = new URL(mediaBaseUrl);
|
|
271
|
+
} catch {
|
|
272
|
+
throw new Error(`Invalid media base URL: ${mediaBaseUrl}`);
|
|
273
|
+
}
|
|
274
|
+
if (base.protocol !== "http:" && base.protocol !== "https:") {
|
|
275
|
+
throw new Error(`Media base URL must use http or https: ${mediaBaseUrl}`);
|
|
276
|
+
}
|
|
277
|
+
return `${base.origin}${base.pathname.replace(TRAILING_SLASHES, "")}${MEDIA_FILE_PATH}`;
|
|
278
|
+
}
|
|
279
|
+
|
|
201
280
|
/**
|
|
202
281
|
* Export byline profiles as root-level `bylines[]`.
|
|
203
282
|
*
|
|
@@ -249,7 +328,7 @@ async function exportBylines(
|
|
|
249
328
|
* Determine locale-awareness and the data's default locale for the export.
|
|
250
329
|
*
|
|
251
330
|
* The runtime initializes the i18n config in middleware, but the CLI never does,
|
|
252
|
-
* so `isI18nEnabled()` is always false under `emdash export-seed
|
|
331
|
+
* so `isI18nEnabled()` is always false under `emdash export-seed`. When
|
|
253
332
|
* the flag is unset, fall back to the data: a project is multi-locale when its
|
|
254
333
|
* i18n-aware tables hold rows in more than one distinct locale. `locale` is
|
|
255
334
|
* NOT NULL (defaulting to the site's default locale), so a per-row presence
|
|
@@ -259,7 +338,7 @@ async function exportBylines(
|
|
|
259
338
|
* per-locale suffix they need to avoid duplicate seed ids.
|
|
260
339
|
*
|
|
261
340
|
* `defaultLocale` self-describes the single-locale case so a non-`en` default
|
|
262
|
-
* survives the round-trip
|
|
341
|
+
* survives the round-trip. When more than one locale is present every
|
|
263
342
|
* row already carries its own `locale`, so no fallback is needed and we leave it
|
|
264
343
|
* undefined rather than guess which locale is the "default" without the runtime
|
|
265
344
|
* config.
|
|
@@ -360,6 +439,9 @@ async function exportCollections(db: Kysely<Database>): Promise<SeedCollection[]
|
|
|
360
439
|
hidden: collection.hidden || undefined,
|
|
361
440
|
sortOrder: collection.sortOrder,
|
|
362
441
|
group: collection.group,
|
|
442
|
+
commentsEnabled: collection.commentsEnabled || undefined,
|
|
443
|
+
titleField: collection.titleField,
|
|
444
|
+
dateField: collection.dateField,
|
|
363
445
|
fields: fields.map(
|
|
364
446
|
(field): SeedField => ({
|
|
365
447
|
slug: field.slug,
|
|
@@ -369,6 +451,7 @@ async function exportCollections(db: Kysely<Database>): Promise<SeedCollection[]
|
|
|
369
451
|
unique: field.unique || undefined,
|
|
370
452
|
searchable: field.searchable || undefined,
|
|
371
453
|
indexed: field.indexed || undefined,
|
|
454
|
+
translatable: field.translatable === false ? false : undefined,
|
|
372
455
|
defaultValue: field.defaultValue,
|
|
373
456
|
validation: field.validation ? { ...field.validation } : undefined,
|
|
374
457
|
widget: field.widget || undefined,
|
|
@@ -383,6 +466,43 @@ async function exportCollections(db: Kysely<Database>): Promise<SeedCollection[]
|
|
|
383
466
|
return result;
|
|
384
467
|
}
|
|
385
468
|
|
|
469
|
+
/**
|
|
470
|
+
* Export relations as root-level `relations[]`.
|
|
471
|
+
*
|
|
472
|
+
* A reference field's `validation.relation` names a relation by slug, and the
|
|
473
|
+
* field's validation is exported verbatim, so re-applying the seed binds the
|
|
474
|
+
* field to this relation rather than creating another one.
|
|
475
|
+
*/
|
|
476
|
+
async function exportRelations(db: Kysely<Database>): Promise<SeedRelation[]> {
|
|
477
|
+
const rows = await db
|
|
478
|
+
.selectFrom("_emdash_relations")
|
|
479
|
+
.select([
|
|
480
|
+
"slug",
|
|
481
|
+
"parent_collection",
|
|
482
|
+
"child_collection",
|
|
483
|
+
"parent_label",
|
|
484
|
+
"parent_label_singular",
|
|
485
|
+
"child_label",
|
|
486
|
+
"child_label_singular",
|
|
487
|
+
"max_children_per_parent",
|
|
488
|
+
"max_parents_per_child",
|
|
489
|
+
])
|
|
490
|
+
.orderBy("slug", "asc")
|
|
491
|
+
.execute();
|
|
492
|
+
|
|
493
|
+
return rows.map((row) => ({
|
|
494
|
+
slug: row.slug,
|
|
495
|
+
parentCollection: row.parent_collection,
|
|
496
|
+
childCollection: row.child_collection,
|
|
497
|
+
parentLabel: row.parent_label,
|
|
498
|
+
parentLabelSingular: row.parent_label_singular ?? undefined,
|
|
499
|
+
childLabel: row.child_label,
|
|
500
|
+
childLabelSingular: row.child_label_singular ?? undefined,
|
|
501
|
+
maxChildrenPerParent: row.max_children_per_parent,
|
|
502
|
+
maxParentsPerChild: row.max_parents_per_child,
|
|
503
|
+
}));
|
|
504
|
+
}
|
|
505
|
+
|
|
386
506
|
/**
|
|
387
507
|
* Export taxonomy definitions and terms
|
|
388
508
|
*/
|
|
@@ -487,7 +607,11 @@ async function exportTaxonomies(
|
|
|
487
607
|
/**
|
|
488
608
|
* Export menus with their items
|
|
489
609
|
*/
|
|
490
|
-
async function exportMenus(
|
|
610
|
+
async function exportMenus(
|
|
611
|
+
db: Kysely<Database>,
|
|
612
|
+
i18nEnabled: boolean,
|
|
613
|
+
contentGroupSeedIds: ContentGroupSeedIds,
|
|
614
|
+
): Promise<SeedMenu[]> {
|
|
491
615
|
const menus = await db
|
|
492
616
|
.selectFrom("_emdash_menus")
|
|
493
617
|
.selectAll()
|
|
@@ -522,6 +646,7 @@ async function exportMenus(db: Kysely<Database>, i18nEnabled: boolean): Promise<
|
|
|
522
646
|
menuLocale: menu.locale ?? null,
|
|
523
647
|
itemGroupToSeedId,
|
|
524
648
|
usedItemSeedIds,
|
|
649
|
+
contentGroupSeedIds,
|
|
525
650
|
});
|
|
526
651
|
|
|
527
652
|
const seedMenu: SeedMenu = {
|
|
@@ -579,6 +704,7 @@ function buildMenuItemTree(
|
|
|
579
704
|
// translation_group -> seed-local id of the anchor item in that group.
|
|
580
705
|
itemGroupToSeedId: Map<string, string>;
|
|
581
706
|
usedItemSeedIds: Set<string>;
|
|
707
|
+
contentGroupSeedIds: ContentGroupSeedIds;
|
|
582
708
|
},
|
|
583
709
|
): SeedMenuItem[] {
|
|
584
710
|
// Build parent -> children map
|
|
@@ -622,7 +748,14 @@ function buildMenuItemTree(
|
|
|
622
748
|
if (item.type === "custom") {
|
|
623
749
|
seedItem.url = item.custom_url || undefined;
|
|
624
750
|
} else {
|
|
625
|
-
|
|
751
|
+
// `reference_id` holds the target's translation_group. Content
|
|
752
|
+
// targets are named by the seed id `applySeed` maps back to a row;
|
|
753
|
+
// anything this export did not include keeps the stored value.
|
|
754
|
+
const contentSeedId =
|
|
755
|
+
item.type !== "taxonomy" && item.reference_id
|
|
756
|
+
? i18nCtx.contentGroupSeedIds.get(item.reference_id)
|
|
757
|
+
: undefined;
|
|
758
|
+
seedItem.ref = contentSeedId ?? (item.reference_id || undefined);
|
|
626
759
|
seedItem.collection = item.reference_collection || undefined;
|
|
627
760
|
}
|
|
628
761
|
|
|
@@ -722,14 +855,128 @@ async function exportWidgetAreas(db: Kysely<Database>): Promise<SeedWidgetArea[]
|
|
|
722
855
|
return result;
|
|
723
856
|
}
|
|
724
857
|
|
|
858
|
+
function isSeedRedirectType(type: number): type is NonNullable<SeedRedirect["type"]> {
|
|
859
|
+
return type === 301 || type === 302 || type === 307 || type === 308;
|
|
860
|
+
}
|
|
861
|
+
|
|
862
|
+
/**
|
|
863
|
+
* Export redirect rules. Terminal rules (410/451) have no seed representation
|
|
864
|
+
* and are reported through `warn` instead.
|
|
865
|
+
*
|
|
866
|
+
* Databases migrated from before the source guard can hold several rows for
|
|
867
|
+
* one source; only the guarded row is exported, since a seed rejects duplicate
|
|
868
|
+
* sources.
|
|
869
|
+
*/
|
|
870
|
+
async function exportRedirects(
|
|
871
|
+
db: Kysely<Database>,
|
|
872
|
+
warn: (message: string) => void,
|
|
873
|
+
): Promise<SeedRedirect[]> {
|
|
874
|
+
const rows = await db
|
|
875
|
+
.selectFrom("_emdash_redirects")
|
|
876
|
+
.select(["source", "destination", "type", "enabled", "group_name", "source_guard"])
|
|
877
|
+
.orderBy("created_at")
|
|
878
|
+
.orderBy("id")
|
|
879
|
+
.execute();
|
|
880
|
+
|
|
881
|
+
const guardedRows = new Map<string, (typeof rows)[number]>();
|
|
882
|
+
for (const row of rows) {
|
|
883
|
+
const current = guardedRows.get(row.source);
|
|
884
|
+
if (!current || (row.source_guard === 1 && current.source_guard !== 1)) {
|
|
885
|
+
guardedRows.set(row.source, row);
|
|
886
|
+
}
|
|
887
|
+
}
|
|
888
|
+
|
|
889
|
+
const result: SeedRedirect[] = [];
|
|
890
|
+
for (const row of rows) {
|
|
891
|
+
if (guardedRows.get(row.source) !== row) {
|
|
892
|
+
warn(`Skipping duplicate rule for "${row.source}" -> "${row.destination}".`);
|
|
893
|
+
continue;
|
|
894
|
+
}
|
|
895
|
+
if (!isSeedRedirectType(row.type)) {
|
|
896
|
+
warn(`Skipping ${row.type} rule for "${row.source}": seeds only carry 301/302/307/308.`);
|
|
897
|
+
continue;
|
|
898
|
+
}
|
|
899
|
+
const redirect: SeedRedirect = {
|
|
900
|
+
source: row.source,
|
|
901
|
+
destination: row.destination,
|
|
902
|
+
type: row.type,
|
|
903
|
+
};
|
|
904
|
+
if (row.enabled === 0) redirect.enabled = false;
|
|
905
|
+
if (row.group_name) redirect.groupName = row.group_name;
|
|
906
|
+
result.push(redirect);
|
|
907
|
+
}
|
|
908
|
+
return result;
|
|
909
|
+
}
|
|
910
|
+
|
|
911
|
+
function isSeedSectionSource(source: string): source is NonNullable<SeedSection["source"]> {
|
|
912
|
+
return source === "theme" || source === "user" || source === "import";
|
|
913
|
+
}
|
|
914
|
+
|
|
915
|
+
/** Section slugs a seed accepts. The WordPress importer can store others. */
|
|
916
|
+
const SEED_SECTION_SLUG_PATTERN = /^[a-z0-9-]+$/;
|
|
917
|
+
|
|
918
|
+
async function exportSections(
|
|
919
|
+
db: Kysely<Database>,
|
|
920
|
+
warn: (message: string) => void,
|
|
921
|
+
): Promise<SeedSection[]> {
|
|
922
|
+
const rows = await db
|
|
923
|
+
.selectFrom("_emdash_sections")
|
|
924
|
+
.select(["slug", "title", "description", "keywords", "content", "source"])
|
|
925
|
+
.orderBy("slug")
|
|
926
|
+
.execute();
|
|
927
|
+
|
|
928
|
+
const result: SeedSection[] = [];
|
|
929
|
+
for (const row of rows) {
|
|
930
|
+
if (!SEED_SECTION_SLUG_PATTERN.test(row.slug)) {
|
|
931
|
+
warn(
|
|
932
|
+
`Skipping section "${row.slug}": seed section slugs may only contain lowercase letters, digits, and hyphens.`,
|
|
933
|
+
);
|
|
934
|
+
continue;
|
|
935
|
+
}
|
|
936
|
+
const section: SeedSection = {
|
|
937
|
+
slug: row.slug,
|
|
938
|
+
title: row.title,
|
|
939
|
+
content: JSON.parse(row.content),
|
|
940
|
+
};
|
|
941
|
+
if (row.description) section.description = row.description;
|
|
942
|
+
if (row.keywords) section.keywords = JSON.parse(row.keywords);
|
|
943
|
+
if (isSeedSectionSource(row.source)) section.source = row.source;
|
|
944
|
+
result.push(section);
|
|
945
|
+
}
|
|
946
|
+
return result;
|
|
947
|
+
}
|
|
948
|
+
|
|
725
949
|
/** An entry read for export, paired with the seed id it will be written under. */
|
|
726
950
|
interface CollectedEntry {
|
|
727
951
|
item: ContentItem;
|
|
728
952
|
seedId: string;
|
|
729
953
|
}
|
|
730
954
|
|
|
731
|
-
/** A
|
|
732
|
-
|
|
955
|
+
/** A relation, by the slug a reference field addresses it under. */
|
|
956
|
+
type RelationsBySlug = Map<
|
|
957
|
+
string,
|
|
958
|
+
{ id: string; childCollection: string; maxChildrenPerParent: number | null }
|
|
959
|
+
>;
|
|
960
|
+
|
|
961
|
+
async function loadRelations(db: Kysely<Database>): Promise<RelationsBySlug> {
|
|
962
|
+
const rows = await db
|
|
963
|
+
.selectFrom("_emdash_relations")
|
|
964
|
+
.select(["id", "slug", "child_collection", "max_children_per_parent"])
|
|
965
|
+
.execute();
|
|
966
|
+
return new Map(
|
|
967
|
+
rows.map((row) => [
|
|
968
|
+
row.slug,
|
|
969
|
+
{
|
|
970
|
+
id: row.id,
|
|
971
|
+
childCollection: row.child_collection,
|
|
972
|
+
maxChildrenPerParent: row.max_children_per_parent,
|
|
973
|
+
},
|
|
974
|
+
]),
|
|
975
|
+
);
|
|
976
|
+
}
|
|
977
|
+
|
|
978
|
+
/** A legacy reference column holds a single entry id or an array of them. */
|
|
979
|
+
function legacyReferenceValues(value: unknown): string[] {
|
|
733
980
|
if (typeof value === "string") return [value];
|
|
734
981
|
if (Array.isArray(value)) return value.filter((v): v is string => typeof v === "string");
|
|
735
982
|
return [];
|
|
@@ -737,31 +984,52 @@ function referenceValues(value: unknown): string[] {
|
|
|
737
984
|
|
|
738
985
|
/**
|
|
739
986
|
* For each exported collection, the other exported collections its entries
|
|
740
|
-
* point into.
|
|
741
|
-
*
|
|
987
|
+
* point into.
|
|
988
|
+
*
|
|
989
|
+
* A field bound to a relation names its target in the relation, and its links
|
|
990
|
+
* are not in `data` to be read. A field with no relation still holds entry ids
|
|
991
|
+
* in its own column; those are read from the values rather than from a declared
|
|
992
|
+
* target, so a field without `options.collection` is still accounted for.
|
|
742
993
|
*/
|
|
743
994
|
function referenceTargets(
|
|
744
995
|
collected: Map<string, CollectedEntry[]>,
|
|
745
996
|
collectionsBySlug: Map<string, SeedCollection>,
|
|
746
997
|
entryIdToCollection: Map<string, string>,
|
|
998
|
+
relations: RelationsBySlug,
|
|
747
999
|
): Map<string, Set<string>> {
|
|
748
1000
|
const targets = new Map<string, Set<string>>();
|
|
749
1001
|
|
|
750
1002
|
for (const [slug, items] of collected) {
|
|
751
|
-
const referenceFields = (collectionsBySlug.get(slug)?.fields ?? [])
|
|
752
|
-
|
|
753
|
-
|
|
1003
|
+
const referenceFields = (collectionsBySlug.get(slug)?.fields ?? []).filter(
|
|
1004
|
+
(field) => field.type === "reference",
|
|
1005
|
+
);
|
|
754
1006
|
if (referenceFields.length === 0) continue;
|
|
755
1007
|
|
|
756
1008
|
const found = new Set<string>();
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
1009
|
+
const add = (target: string | undefined): void => {
|
|
1010
|
+
if (target && target !== slug) found.add(target);
|
|
1011
|
+
};
|
|
1012
|
+
|
|
1013
|
+
for (const field of referenceFields) {
|
|
1014
|
+
const relationSlug = field.validation?.relation;
|
|
1015
|
+
if (typeof relationSlug !== "string") continue;
|
|
1016
|
+
if (field.validation?.relationSide === "child") continue;
|
|
1017
|
+
add(relations.get(relationSlug)?.childCollection);
|
|
1018
|
+
}
|
|
1019
|
+
|
|
1020
|
+
const columnFields = referenceFields
|
|
1021
|
+
.filter((field) => typeof field.validation?.relation !== "string")
|
|
1022
|
+
.map((field) => field.slug);
|
|
1023
|
+
if (columnFields.length > 0) {
|
|
1024
|
+
for (const { item } of items) {
|
|
1025
|
+
for (const fieldSlug of columnFields) {
|
|
1026
|
+
for (const value of legacyReferenceValues(item.data[fieldSlug])) {
|
|
1027
|
+
add(entryIdToCollection.get(value));
|
|
1028
|
+
}
|
|
762
1029
|
}
|
|
763
1030
|
}
|
|
764
1031
|
}
|
|
1032
|
+
|
|
765
1033
|
if (found.size > 0) targets.set(slug, found);
|
|
766
1034
|
}
|
|
767
1035
|
|
|
@@ -799,6 +1067,23 @@ function orderByReferenceTargets(slugs: string[], targets: Map<string, Set<strin
|
|
|
799
1067
|
return ordered;
|
|
800
1068
|
}
|
|
801
1069
|
|
|
1070
|
+
/** translation_group -> seed id of the entry anchoring that group */
|
|
1071
|
+
type ContentGroupSeedIds = Map<string, string>;
|
|
1072
|
+
|
|
1073
|
+
interface MediaInfo {
|
|
1074
|
+
url: string;
|
|
1075
|
+
filename: string;
|
|
1076
|
+
alt?: string;
|
|
1077
|
+
caption?: string;
|
|
1078
|
+
}
|
|
1079
|
+
|
|
1080
|
+
interface ExportedContent {
|
|
1081
|
+
content: Record<string, SeedContentEntry[]>;
|
|
1082
|
+
groupSeedIds: ContentGroupSeedIds;
|
|
1083
|
+
/** Number of `$media` references written. */
|
|
1084
|
+
mediaCount: number;
|
|
1085
|
+
}
|
|
1086
|
+
|
|
802
1087
|
/**
|
|
803
1088
|
* Export content from collections
|
|
804
1089
|
*/
|
|
@@ -808,17 +1093,16 @@ async function exportContent(
|
|
|
808
1093
|
includeCollections: string[] | null,
|
|
809
1094
|
bylineGroupToSeedId: Map<string, string>,
|
|
810
1095
|
i18nEnabled: boolean,
|
|
811
|
-
|
|
1096
|
+
mediaUrlPrefix: string,
|
|
1097
|
+
): Promise<ExportedContent> {
|
|
812
1098
|
const content: Record<string, SeedContentEntry[]> = {};
|
|
1099
|
+
const mediaCounter = { count: 0 };
|
|
813
1100
|
const contentRepo = new ContentRepository(db);
|
|
814
1101
|
const taxonomyRepo = new TaxonomyRepository(db);
|
|
815
1102
|
const mediaRepo = new MediaRepository(db);
|
|
816
1103
|
|
|
817
1104
|
// Build media id -> info map for $media conversion
|
|
818
|
-
const mediaMap = new Map<
|
|
819
|
-
string,
|
|
820
|
-
{ url: string; filename: string; alt?: string; caption?: string }
|
|
821
|
-
>();
|
|
1105
|
+
const mediaMap = new Map<string, MediaInfo>();
|
|
822
1106
|
try {
|
|
823
1107
|
let cursor: string | undefined;
|
|
824
1108
|
do {
|
|
@@ -829,7 +1113,7 @@ async function exportContent(
|
|
|
829
1113
|
});
|
|
830
1114
|
for (const media of result.items) {
|
|
831
1115
|
mediaMap.set(media.id, {
|
|
832
|
-
url:
|
|
1116
|
+
url: `${mediaUrlPrefix}${media.storageKey}`,
|
|
833
1117
|
filename: media.filename,
|
|
834
1118
|
alt: media.alt || undefined,
|
|
835
1119
|
caption: media.caption || undefined,
|
|
@@ -841,13 +1125,18 @@ async function exportContent(
|
|
|
841
1125
|
// Media table might not exist or be empty
|
|
842
1126
|
}
|
|
843
1127
|
|
|
844
|
-
// Read every entry and assign its seed id before
|
|
845
|
-
//
|
|
846
|
-
//
|
|
847
|
-
//
|
|
1128
|
+
// Read every entry and assign its seed id before emitting any of them. A
|
|
1129
|
+
// reference can point at a collection the emit loop has not reached yet, so
|
|
1130
|
+
// both seed-id maps have to be complete before the first conversion — and the
|
|
1131
|
+
// collection order itself is derived from what points where.
|
|
1132
|
+
//
|
|
1133
|
+
// Keyed two ways: links are keyed by translation group, while a legacy
|
|
1134
|
+
// reference column holding one entry id is not.
|
|
848
1135
|
const collected = new Map<string, CollectedEntry[]>();
|
|
849
1136
|
const entryIdToSeedId = new Map<string, string>();
|
|
850
1137
|
const entryIdToCollection = new Map<string, string>();
|
|
1138
|
+
const groupToSeedId = new Map<string, string>();
|
|
1139
|
+
const exported: ExportedEntry[] = [];
|
|
851
1140
|
|
|
852
1141
|
for (const collection of collections) {
|
|
853
1142
|
// Skip if not in include list
|
|
@@ -876,6 +1165,10 @@ async function exportContent(
|
|
|
876
1165
|
items.push({ item, seedId });
|
|
877
1166
|
entryIdToSeedId.set(item.id, seedId);
|
|
878
1167
|
entryIdToCollection.set(item.id, collection.slug);
|
|
1168
|
+
// The first entry of a group is the one written without
|
|
1169
|
+
// `translationOf`, so `applySeed` gives it the group's id.
|
|
1170
|
+
const group = item.translationGroup ?? item.id;
|
|
1171
|
+
if (!groupToSeedId.has(group)) groupToSeedId.set(group, seedId);
|
|
879
1172
|
}
|
|
880
1173
|
|
|
881
1174
|
cursor = result.nextCursor;
|
|
@@ -884,10 +1177,11 @@ async function exportContent(
|
|
|
884
1177
|
collected.set(collection.slug, items);
|
|
885
1178
|
}
|
|
886
1179
|
|
|
1180
|
+
const relations = await loadRelations(db);
|
|
887
1181
|
const collectionsBySlug = new Map(collections.map((c) => [c.slug, c]));
|
|
888
1182
|
const orderedSlugs = orderByReferenceTargets(
|
|
889
1183
|
[...collected.keys()],
|
|
890
|
-
referenceTargets(collected, collectionsBySlug, entryIdToCollection),
|
|
1184
|
+
referenceTargets(collected, collectionsBySlug, entryIdToCollection, relations),
|
|
891
1185
|
);
|
|
892
1186
|
|
|
893
1187
|
for (const slug of orderedSlugs) {
|
|
@@ -903,18 +1197,21 @@ async function exportContent(
|
|
|
903
1197
|
const translationGroupToSeedId = new Map<string, string>();
|
|
904
1198
|
|
|
905
1199
|
for (const { item, seedId } of items) {
|
|
906
|
-
// Process data fields for $media
|
|
1200
|
+
// Process data fields for $media conversion
|
|
907
1201
|
const processedData = processDataForExport(
|
|
908
1202
|
item.data,
|
|
909
1203
|
collection.fields,
|
|
910
1204
|
mediaMap,
|
|
911
|
-
|
|
1205
|
+
mediaCounter,
|
|
912
1206
|
);
|
|
913
1207
|
|
|
914
1208
|
const entry: SeedContentEntry = {
|
|
915
1209
|
id: seedId,
|
|
916
1210
|
slug: item.slug?.trim() ? item.slug : collection.routable === false ? undefined : item.id,
|
|
917
|
-
|
|
1211
|
+
// Seeds carry no schedule, and `applySeed` publishes an entry with
|
|
1212
|
+
// no status, so every unpublished state (including scheduled) is a
|
|
1213
|
+
// draft.
|
|
1214
|
+
status: item.status === "published" ? "published" : "draft",
|
|
918
1215
|
data: processedData,
|
|
919
1216
|
};
|
|
920
1217
|
|
|
@@ -950,6 +1247,13 @@ async function exportContent(
|
|
|
950
1247
|
entry.bylines = bylines;
|
|
951
1248
|
}
|
|
952
1249
|
|
|
1250
|
+
exported.push({
|
|
1251
|
+
collection,
|
|
1252
|
+
entry,
|
|
1253
|
+
translationGroup: item.translationGroup ?? null,
|
|
1254
|
+
referenceValues: item.data,
|
|
1255
|
+
});
|
|
1256
|
+
|
|
953
1257
|
entries.push(entry);
|
|
954
1258
|
}
|
|
955
1259
|
|
|
@@ -968,62 +1272,179 @@ async function exportContent(
|
|
|
968
1272
|
}
|
|
969
1273
|
}
|
|
970
1274
|
|
|
971
|
-
|
|
1275
|
+
await addReferenceLinks(db, exported, relations, groupToSeedId, entryIdToSeedId);
|
|
1276
|
+
|
|
1277
|
+
return { content, groupSeedIds: groupToSeedId, mediaCount: mediaCounter.count };
|
|
1278
|
+
}
|
|
1279
|
+
|
|
1280
|
+
interface ExportedEntry {
|
|
1281
|
+
collection: SeedCollection;
|
|
1282
|
+
entry: SeedContentEntry;
|
|
1283
|
+
translationGroup: string | null;
|
|
1284
|
+
/** The entry's stored `data`, which a reference field's column value is read from. */
|
|
1285
|
+
referenceValues: Record<string, unknown>;
|
|
1286
|
+
}
|
|
1287
|
+
|
|
1288
|
+
/**
|
|
1289
|
+
* Write each entry's reference selection into its `data` as `$ref:` values, which
|
|
1290
|
+
* the seed's own content ids resolve on apply.
|
|
1291
|
+
*
|
|
1292
|
+
* A field bound to a relation takes its selection from the link table. Only the
|
|
1293
|
+
* parent side is emitted: both sides view one link set, so a child-side field
|
|
1294
|
+
* would restate links the parent side already carries, and `setReferenceChildren`
|
|
1295
|
+
* accepts them only from the parent. A field with no relation takes the entry id
|
|
1296
|
+
* in its column instead.
|
|
1297
|
+
*
|
|
1298
|
+
* Runs after every collection has been emitted, so the seed id of any target is
|
|
1299
|
+
* known. A target that was not exported has none: a link is then dropped, since
|
|
1300
|
+
* nothing in the seed owns it, while a column value keeps its `$ref:` prefix
|
|
1301
|
+
* around the raw row id. Stripping the prefix there would write a row id that no
|
|
1302
|
+
* restored row carries into the column, and the restore would report success.
|
|
1303
|
+
*/
|
|
1304
|
+
async function addReferenceLinks(
|
|
1305
|
+
db: Kysely<Database>,
|
|
1306
|
+
exported: ExportedEntry[],
|
|
1307
|
+
relations: RelationsBySlug,
|
|
1308
|
+
groupToSeedId: Map<string, string>,
|
|
1309
|
+
entryIdToSeedId: Map<string, string>,
|
|
1310
|
+
): Promise<void> {
|
|
1311
|
+
if (exported.length === 0) return;
|
|
1312
|
+
|
|
1313
|
+
// Relation id -> parent group -> ordered child groups.
|
|
1314
|
+
const linksByRelation = new Map<string, Map<string, string[]>>();
|
|
1315
|
+
if (relations.size > 0) {
|
|
1316
|
+
const edges = await db
|
|
1317
|
+
.selectFrom("_emdash_content_references")
|
|
1318
|
+
.select(["relation_id", "parent_group", "child_group"])
|
|
1319
|
+
.orderBy("sort_order", "asc")
|
|
1320
|
+
.execute();
|
|
1321
|
+
for (const edge of edges) {
|
|
1322
|
+
const byParent = linksByRelation.get(edge.relation_id) ?? new Map<string, string[]>();
|
|
1323
|
+
const children = byParent.get(edge.parent_group) ?? [];
|
|
1324
|
+
children.push(edge.child_group);
|
|
1325
|
+
byParent.set(edge.parent_group, children);
|
|
1326
|
+
linksByRelation.set(edge.relation_id, byParent);
|
|
1327
|
+
}
|
|
1328
|
+
}
|
|
1329
|
+
|
|
1330
|
+
for (const { collection, entry, translationGroup, referenceValues } of exported) {
|
|
1331
|
+
for (const field of collection.fields) {
|
|
1332
|
+
if (field.type !== "reference") continue;
|
|
1333
|
+
const slug = field.validation?.relation;
|
|
1334
|
+
|
|
1335
|
+
if (typeof slug !== "string") {
|
|
1336
|
+
// No relation: the field keeps its own column, holding one entry id or
|
|
1337
|
+
// a JSON array of them.
|
|
1338
|
+
const stored = referenceValues[field.slug];
|
|
1339
|
+
const ids = (Array.isArray(stored) ? stored : [stored]).filter(
|
|
1340
|
+
(id): id is string => typeof id === "string" && id.length > 0,
|
|
1341
|
+
);
|
|
1342
|
+
const refs = ids.map((id) => `$ref:${entryIdToSeedId.get(id) ?? id}`);
|
|
1343
|
+
if (refs.length === 0) continue;
|
|
1344
|
+
entry.data[field.slug] = Array.isArray(stored) ? refs : refs[0];
|
|
1345
|
+
continue;
|
|
1346
|
+
}
|
|
1347
|
+
|
|
1348
|
+
if (field.validation?.relationSide === "child") continue;
|
|
1349
|
+
|
|
1350
|
+
const relation = relations.get(slug);
|
|
1351
|
+
if (!relation || !translationGroup) continue;
|
|
1352
|
+
|
|
1353
|
+
const childGroups = linksByRelation.get(relation.id)?.get(translationGroup) ?? [];
|
|
1354
|
+
const refs = childGroups
|
|
1355
|
+
.map((group) => groupToSeedId.get(group))
|
|
1356
|
+
.filter((seedId): seedId is string => seedId !== undefined)
|
|
1357
|
+
.map((seedId) => `$ref:${seedId}`);
|
|
1358
|
+
if (refs.length === 0) continue;
|
|
1359
|
+
|
|
1360
|
+
entry.data[field.slug] = relation.maxChildrenPerParent === 1 ? refs[0] : refs;
|
|
1361
|
+
}
|
|
1362
|
+
}
|
|
972
1363
|
}
|
|
973
1364
|
|
|
974
1365
|
/**
|
|
975
|
-
*
|
|
1366
|
+
* Convert a stored media value (image or file) to `$media` syntax. Values that
|
|
1367
|
+
* don't point at a known media row are kept as they are.
|
|
1368
|
+
*/
|
|
1369
|
+
function toSeedMedia(
|
|
1370
|
+
value: unknown,
|
|
1371
|
+
mediaMap: Map<string, MediaInfo>,
|
|
1372
|
+
mediaCounter: { count: number },
|
|
1373
|
+
): unknown {
|
|
1374
|
+
if (!value || typeof value !== "object") return value;
|
|
1375
|
+
const mediaValue = value as { id?: unknown; alt?: unknown };
|
|
1376
|
+
const mediaInfo = typeof mediaValue.id === "string" ? mediaMap.get(mediaValue.id) : undefined;
|
|
1377
|
+
if (!mediaInfo) return value;
|
|
1378
|
+
|
|
1379
|
+
mediaCounter.count++;
|
|
1380
|
+
return {
|
|
1381
|
+
$media: {
|
|
1382
|
+
url: mediaInfo.url,
|
|
1383
|
+
filename: mediaInfo.filename,
|
|
1384
|
+
alt: (typeof mediaValue.alt === "string" && mediaValue.alt) || mediaInfo.alt,
|
|
1385
|
+
caption: mediaInfo.caption,
|
|
1386
|
+
},
|
|
1387
|
+
};
|
|
1388
|
+
}
|
|
1389
|
+
|
|
1390
|
+
/** Slugs of a repeater field's `image` sub-fields. */
|
|
1391
|
+
function repeaterImageSubFields(field: SeedField): Set<string> {
|
|
1392
|
+
const subFields = field.validation?.subFields;
|
|
1393
|
+
const slugs = new Set<string>();
|
|
1394
|
+
if (!Array.isArray(subFields)) return slugs;
|
|
1395
|
+
for (const subField of subFields) {
|
|
1396
|
+
if (
|
|
1397
|
+
subField &&
|
|
1398
|
+
typeof subField === "object" &&
|
|
1399
|
+
subField.type === "image" &&
|
|
1400
|
+
typeof subField.slug === "string"
|
|
1401
|
+
) {
|
|
1402
|
+
slugs.add(subField.slug);
|
|
1403
|
+
}
|
|
1404
|
+
}
|
|
1405
|
+
return slugs;
|
|
1406
|
+
}
|
|
1407
|
+
|
|
1408
|
+
/**
|
|
1409
|
+
* Process content data for export: media values become `$media` references
|
|
1410
|
+
* and reference values become `$ref:` seed ids.
|
|
976
1411
|
*/
|
|
977
1412
|
function processDataForExport(
|
|
978
1413
|
data: Record<string, unknown>,
|
|
979
1414
|
fields: SeedField[],
|
|
980
|
-
mediaMap: Map<string,
|
|
981
|
-
|
|
1415
|
+
mediaMap: Map<string, MediaInfo>,
|
|
1416
|
+
mediaCounter: { count: number },
|
|
982
1417
|
): Record<string, unknown> {
|
|
983
1418
|
const result: Record<string, unknown> = {};
|
|
984
1419
|
|
|
985
|
-
|
|
986
|
-
const fieldTypes = new Map<string, FieldType>();
|
|
1420
|
+
const fieldsBySlug = new Map<string, SeedField>();
|
|
987
1421
|
for (const field of fields) {
|
|
988
|
-
|
|
1422
|
+
fieldsBySlug.set(field.slug, field);
|
|
989
1423
|
}
|
|
990
1424
|
|
|
991
1425
|
for (const [key, value] of Object.entries(data)) {
|
|
992
|
-
const
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
},
|
|
1007
|
-
};
|
|
1008
|
-
continue;
|
|
1426
|
+
const field = fieldsBySlug.get(key);
|
|
1427
|
+
const fieldType: FieldType | undefined = field?.type;
|
|
1428
|
+
|
|
1429
|
+
if (fieldType === "image" || fieldType === "file") {
|
|
1430
|
+
result[key] = toSeedMedia(value, mediaMap, mediaCounter);
|
|
1431
|
+
} else if (field && fieldType === "repeater" && Array.isArray(value)) {
|
|
1432
|
+
const imageSubFields = repeaterImageSubFields(field);
|
|
1433
|
+
result[key] = value.map((row: unknown) => {
|
|
1434
|
+
if (!row || typeof row !== "object" || Array.isArray(row)) return row;
|
|
1435
|
+
const exportedRow: Record<string, unknown> = {};
|
|
1436
|
+
for (const [subKey, subValue] of Object.entries(row)) {
|
|
1437
|
+
exportedRow[subKey] = imageSubFields.has(subKey)
|
|
1438
|
+
? toSeedMedia(subValue, mediaMap, mediaCounter)
|
|
1439
|
+
: subValue;
|
|
1009
1440
|
}
|
|
1010
|
-
|
|
1011
|
-
// Fallback: keep as-is if no media info found
|
|
1012
|
-
result[key] = value;
|
|
1013
|
-
} else if (fieldType === "reference" && typeof value === "string") {
|
|
1014
|
-
// Convert reference to $ref syntax, naming the target by the seed id
|
|
1015
|
-
// this export assigns it. The stored value is a row id, and `seed`
|
|
1016
|
-
// renumbers rows on insert, so a row id matches nothing in the
|
|
1017
|
-
// restored database and gets written to the column verbatim.
|
|
1018
|
-
result[key] = `$ref:${entryIdToSeedId.get(value) ?? value}`;
|
|
1019
|
-
} else if (Array.isArray(value)) {
|
|
1020
|
-
// Process arrays (could contain references or images)
|
|
1021
|
-
result[key] = value.map((item) => {
|
|
1022
|
-
if (typeof item === "string" && fieldType === "reference") {
|
|
1023
|
-
return `$ref:${entryIdToSeedId.get(item) ?? item}`;
|
|
1024
|
-
}
|
|
1025
|
-
return item;
|
|
1441
|
+
return exportedRow;
|
|
1026
1442
|
});
|
|
1443
|
+
} else if (fieldType === "reference") {
|
|
1444
|
+
// Left for `addReferenceLinks`, which knows the seed id each entry was
|
|
1445
|
+
// emitted under. A `$ref:` built here from a raw entry id resolves
|
|
1446
|
+
// against nothing on apply.
|
|
1447
|
+
continue;
|
|
1027
1448
|
} else {
|
|
1028
1449
|
result[key] = value;
|
|
1029
1450
|
}
|