dineway 0.1.48 → 0.2.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/{activity-events-C9u37D5z.mjs → activity-events-y6eT8UW6.mjs} +6 -38
- package/dist/actor-CrObAPV0.mjs +37 -0
- package/dist/after-BfniwgIf.mjs +9 -0
- package/dist/{allowed-origins-DhipQNLb.mjs → allowed-origins-_oeyP6x-.mjs} +1 -1
- package/dist/api/route-utils.d.mts +10 -10
- package/dist/api/route-utils.mjs +17 -14
- package/dist/api/schemas/index.d.mts +2 -2
- package/dist/api/schemas/index.mjs +5 -4
- package/dist/{api-Eiy8_zVZ.mjs → api-ByrU2q-Z.mjs} +61 -37
- package/dist/{api-tokens-DtvdtIkm.mjs → api-tokens-CjVMQT-X.mjs} +6 -2
- package/dist/{apply-CX3no7XE.mjs → apply-bZswmZPm.mjs} +117 -77
- package/dist/astro/image-endpoint.d.mts +7 -0
- package/dist/astro/image-endpoint.mjs +54 -0
- package/dist/astro/index.d.mts +35 -11
- package/dist/astro/index.mjs +157 -23
- package/dist/astro/integration/shims/use-sync-external-store-with-selector.js +71 -0
- package/dist/astro/integration/shims/use-sync-external-store.js +1 -0
- package/dist/astro/middleware/auth.d.mts +10 -10
- package/dist/astro/middleware/auth.mjs +42 -24
- package/dist/astro/middleware/redirect.mjs +14 -5
- package/dist/astro/middleware/request-context.mjs +9 -6
- package/dist/astro/middleware/seed.d.mts +1 -1
- package/dist/astro/middleware/seed.mjs +2 -2
- package/dist/astro/middleware/setup.mjs +1 -1
- package/dist/astro/middleware.mjs +334 -193
- package/dist/astro/routes/admin.astro +6 -1
- package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +7 -6
- package/dist/astro/routes/api/admin/allowed-domains/index.mjs +7 -6
- package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +4 -4
- package/dist/astro/routes/api/admin/api-tokens/index.mjs +6 -6
- package/dist/astro/routes/api/admin/briefing.mjs +22 -18
- package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +4 -4
- package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +9 -8
- package/dist/astro/routes/api/admin/byline-fields/index.mjs +9 -8
- package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +9 -8
- package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +18 -15
- package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +18 -15
- package/dist/astro/routes/api/admin/bylines/index.mjs +18 -15
- package/dist/astro/routes/api/admin/comments/_id_/status.mjs +15 -13
- package/dist/astro/routes/api/admin/comments/_id_.mjs +7 -6
- package/dist/astro/routes/api/admin/comments/bulk.mjs +12 -10
- package/dist/astro/routes/api/admin/comments/counts.mjs +7 -6
- package/dist/astro/routes/api/admin/comments/index.mjs +12 -10
- package/dist/astro/routes/api/admin/context/_id_/history.mjs +27 -25
- package/dist/astro/routes/api/admin/context/_id_/index.mjs +27 -25
- package/dist/astro/routes/api/admin/context/_id_/review.mjs +32 -29
- package/dist/astro/routes/api/admin/context/_id_/supersede.mjs +32 -29
- package/dist/astro/routes/api/admin/context/diff.mjs +31 -28
- package/dist/astro/routes/api/admin/context/index.mjs +32 -29
- package/dist/astro/routes/api/admin/context/stale.mjs +31 -28
- package/dist/astro/routes/api/admin/hitl-requests/_id_/index.mjs +27 -25
- package/dist/astro/routes/api/admin/hitl-requests/_id_/resolve.mjs +31 -28
- package/dist/astro/routes/api/admin/hitl-requests/index.mjs +31 -28
- package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +28 -26
- package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +3 -3
- 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 +56 -52
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +56 -52
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +48 -44
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +54 -50
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +53 -49
- package/dist/astro/routes/api/admin/plugins/index.mjs +48 -44
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +2 -2
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +47 -43
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +53 -49
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +47 -43
- package/dist/astro/routes/api/admin/plugins/updates.mjs +47 -43
- package/dist/astro/routes/api/admin/review-requests/_id_/index.mjs +6 -6
- package/dist/astro/routes/api/admin/review-requests/_id_/resolve.mjs +32 -28
- package/dist/astro/routes/api/admin/review-requests/index.mjs +11 -10
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +47 -43
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +2 -2
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +47 -43
- package/dist/astro/routes/api/admin/users/_id_/disable.mjs +3 -3
- package/dist/astro/routes/api/admin/users/_id_/enable.mjs +2 -2
- package/dist/astro/routes/api/admin/users/_id_/index.mjs +8 -7
- package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +4 -4
- package/dist/astro/routes/api/admin/users/index.mjs +7 -6
- package/dist/astro/routes/api/auth/dev-bypass.mjs +4 -4
- package/dist/astro/routes/api/auth/invite/accept.mjs +2 -2
- package/dist/astro/routes/api/auth/invite/complete.mjs +12 -11
- package/dist/astro/routes/api/auth/invite/index.mjs +9 -8
- package/dist/astro/routes/api/auth/invite/register-options.mjs +11 -10
- package/dist/astro/routes/api/auth/logout.mjs +2 -2
- package/dist/astro/routes/api/auth/magic-link/send.mjs +11 -10
- package/dist/astro/routes/api/auth/magic-link/verify.mjs +3 -3
- package/dist/astro/routes/api/auth/me.mjs +10 -9
- package/dist/astro/routes/api/auth/mode.mjs +1 -1
- package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +3 -3
- package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
- package/dist/astro/routes/api/auth/passkey/_id_.mjs +6 -5
- package/dist/astro/routes/api/auth/passkey/index.mjs +1 -1
- package/dist/astro/routes/api/auth/passkey/options.mjs +12 -11
- package/dist/astro/routes/api/auth/passkey/register/options.mjs +10 -9
- package/dist/astro/routes/api/auth/passkey/register/verify.mjs +11 -10
- package/dist/astro/routes/api/auth/passkey/verify.mjs +11 -10
- package/dist/astro/routes/api/auth/setup-token/index.mjs +6 -6
- package/dist/astro/routes/api/auth/setup-token/verify.mjs +2 -2
- package/dist/astro/routes/api/auth/signup/complete.mjs +12 -11
- package/dist/astro/routes/api/auth/signup/request.mjs +11 -10
- package/dist/astro/routes/api/auth/signup/verify.mjs +2 -2
- package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +16 -14
- package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.d.mts +8 -0
- package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +160 -0
- package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +6 -6
- package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +6 -6
- package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +6 -6
- package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +12 -11
- package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +11 -10
- package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +6 -6
- package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +11 -10
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +17 -15
- package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +6 -6
- package/dist/astro/routes/api/content/_collection_/_id_.mjs +11 -10
- package/dist/astro/routes/api/content/_collection_/authors.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/index.mjs +11 -10
- package/dist/astro/routes/api/content/_collection_/trash.mjs +7 -6
- package/dist/astro/routes/api/dashboard.mjs +10 -9
- package/dist/astro/routes/api/dev/emails.mjs +2 -2
- package/dist/astro/routes/api/health.mjs +1 -1
- package/dist/astro/routes/api/import/probe.d.mts +3 -3
- package/dist/astro/routes/api/import/probe.mjs +23 -11
- package/dist/astro/routes/api/import/wordpress/analyze.mjs +9 -6
- package/dist/astro/routes/api/import/wordpress/execute.d.mts +19 -1
- package/dist/astro/routes/api/import/wordpress/execute.mjs +85 -38
- package/dist/astro/routes/api/import/wordpress/media.d.mts +13 -1
- package/dist/astro/routes/api/import/wordpress/media.mjs +20 -14
- package/dist/astro/routes/api/import/wordpress/prepare.mjs +36 -33
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +18 -1
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +121 -101
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +25 -13
- package/dist/astro/routes/api/import/wordpress-plugin/callback.mjs +1 -1
- package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +56 -2
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +284 -56
- package/dist/astro/routes/api/manifest.mjs +14 -5
- package/dist/astro/routes/api/mcp.mjs +266 -70
- package/dist/astro/routes/api/media/_id_/confirm.mjs +39 -11
- package/dist/astro/routes/api/media/_id_.mjs +11 -7
- package/dist/astro/routes/api/media/file/_...key_.mjs +1 -1
- package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +2 -2
- package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +2 -2
- package/dist/astro/routes/api/media/providers/index.mjs +2 -2
- package/dist/astro/routes/api/media/upload-url.mjs +12 -11
- package/dist/astro/routes/api/media.mjs +28 -35
- package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +32 -29
- package/dist/astro/routes/api/menus/_name_/items.mjs +32 -29
- package/dist/astro/routes/api/menus/_name_/reorder.mjs +32 -29
- package/dist/astro/routes/api/menus/_name_/translations.mjs +32 -29
- package/dist/astro/routes/api/menus/_name_.mjs +32 -29
- package/dist/astro/routes/api/menus/index.mjs +32 -29
- package/dist/astro/routes/api/oauth/authorize.mjs +7 -7
- package/dist/astro/routes/api/oauth/device/authorize.mjs +6 -6
- package/dist/astro/routes/api/oauth/device/code.mjs +9 -9
- package/dist/astro/routes/api/oauth/device/token.mjs +8 -8
- package/dist/astro/routes/api/oauth/register.mjs +4 -4
- package/dist/astro/routes/api/oauth/token/refresh.mjs +6 -6
- package/dist/astro/routes/api/oauth/token/revoke.mjs +6 -6
- package/dist/astro/routes/api/oauth/token.mjs +6 -6
- package/dist/astro/routes/api/openapi.json.mjs +4 -3
- package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +30 -30
- package/dist/astro/routes/api/redirects/404s/index.mjs +12 -11
- package/dist/astro/routes/api/redirects/404s/summary.mjs +12 -11
- package/dist/astro/routes/api/redirects/_id_.mjs +33 -30
- package/dist/astro/routes/api/redirects/index.mjs +33 -30
- package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +2 -2
- package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +2 -2
- package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +48 -44
- package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +48 -44
- package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +48 -44
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +48 -44
- package/dist/astro/routes/api/schema/collections/index.mjs +48 -44
- package/dist/astro/routes/api/schema/index.mjs +13 -14
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs +47 -43
- package/dist/astro/routes/api/schema/orphans/index.mjs +47 -43
- package/dist/astro/routes/api/search/enable.mjs +12 -11
- package/dist/astro/routes/api/search/index.mjs +11 -10
- package/dist/astro/routes/api/search/rebuild.mjs +12 -11
- package/dist/astro/routes/api/search/stats.mjs +7 -7
- package/dist/astro/routes/api/search/suggest.mjs +11 -10
- package/dist/astro/routes/api/sections/_slug_.mjs +32 -29
- package/dist/astro/routes/api/sections/index.mjs +32 -29
- package/dist/astro/routes/api/settings/email.mjs +4 -4
- package/dist/astro/routes/api/settings.mjs +32 -29
- package/dist/astro/routes/api/setup/admin-verify.mjs +14 -13
- package/dist/astro/routes/api/setup/admin.mjs +12 -11
- package/dist/astro/routes/api/setup/dev-bypass.mjs +32 -26
- package/dist/astro/routes/api/setup/dev-reset.mjs +2 -2
- package/dist/astro/routes/api/setup/index.mjs +30 -26
- package/dist/astro/routes/api/setup/status.mjs +3 -3
- package/dist/astro/routes/api/snapshot.mjs +9 -8
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +35 -32
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +35 -32
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +35 -32
- package/dist/astro/routes/api/taxonomies/index.mjs +35 -32
- package/dist/astro/routes/api/themes/preview.mjs +6 -6
- package/dist/astro/routes/api/typegen.mjs +4 -4
- package/dist/astro/routes/api/well-known/auth.mjs +3 -3
- package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +3 -3
- package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +3 -3
- package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +31 -28
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +32 -29
- package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +32 -29
- package/dist/astro/routes/api/widget-areas/_name_.mjs +29 -27
- package/dist/astro/routes/api/widget-areas/index.mjs +32 -29
- package/dist/astro/routes/api/widget-components.mjs +2 -2
- package/dist/astro/routes/robots.txt.mjs +9 -8
- package/dist/astro/routes/sitemap-_collection_.xml.mjs +24 -15
- package/dist/astro/routes/sitemap.xml.mjs +10 -9
- package/dist/astro/session-driver.d.mts +1 -1
- package/dist/astro/session-driver.mjs +3 -3
- package/dist/astro/types.d.mts +21 -13
- package/dist/{audit-D1cbG7xH.mjs → audit-ByVKIwWF.mjs} +1 -1
- package/dist/auth/providers/github.d.mts +1 -1
- package/dist/auth/providers/google.d.mts +1 -1
- package/dist/{auth-control-guard-Dr14I98m.mjs → auth-control-guard-CqeUmQsv.mjs} +1 -1
- package/dist/{authorize-BLO0m7fW.mjs → authorize-CcBxcHtz.mjs} +1 -1
- package/dist/{briefing-CObXGOGz.mjs → briefing-BJaJI8dm.mjs} +2 -1
- package/dist/{briefing-gKWiGLt1.mjs → briefing-CawZ59CY.mjs} +90 -28
- package/dist/bundle-7C_DpkEq.mjs +602 -0
- package/dist/{byline-1ntDwv8c.mjs → byline-e51-fWRs.mjs} +30 -62
- package/dist/{byline-fields-BX7rWKNU.d.mts → byline-fields-CUvbslGc.d.mts} +49 -6
- package/dist/{byline-fields-C9_iaPaM.mjs → byline-fields-D-N5qVIG.mjs} +1 -1
- package/dist/{byline-fields-B-ZkoVft.mjs → byline-fields-DOJO16Gm.mjs} +3 -3
- package/dist/{byline-registry-CUSvkasJ.mjs → byline-registry-87nNnYl4.mjs} +2 -2
- package/dist/{bylines-bC15ZqAv.mjs → bylines-CMQNCNFh.mjs} +9 -3
- package/dist/{bylines-DtxChhN_.mjs → bylines-y4LO-dTj.mjs} +5 -5
- package/dist/{cache-DbKyr60Q.mjs → cache-C-FNTFYK.mjs} +2 -2
- package/dist/{chunks-C5zp2xir.mjs → chunks-CxBt-GxR.mjs} +1 -1
- package/dist/cli/index.mjs +820 -1276
- package/dist/client/external-auth-headers.d.mts +1 -1
- package/dist/client/index.d.mts +1 -1
- package/dist/client/index.mjs +2 -1
- package/dist/{comment-CXDOQ93N.mjs → comment-DlA4iChg.mjs} +13 -3
- package/dist/comment-reaction-DfFao1ST.mjs +58 -0
- package/dist/{comments-hK-rdzJ9.mjs → comments-DApFGMsP.mjs} +1 -1
- package/dist/{content-QaryevFO.mjs → content-Bh4BDjv8.mjs} +51 -34
- package/dist/content-refresh-CgutSUfO.mjs +1576 -0
- package/dist/{context-CoYb_fvK.mjs → context-C5W3G18y.mjs} +111 -50
- package/dist/{context-DBL1ib4v.mjs → context-CK4ym2Sf.mjs} +2 -2
- package/dist/{context-route-helpers-CYQVmbIm.mjs → context-route-helpers-MASyGgWf.mjs} +2 -1
- package/dist/{cron-DxCAU_Sn.mjs → cron-cKcNTix_.mjs} +7 -3
- package/dist/{dashboard-DNlqsknJ.mjs → dashboard-DQkVT7Ei.mjs} +4 -4
- package/dist/db/index.d.mts +3 -3
- package/dist/db/index.mjs +1 -1
- package/dist/db/libsql.d.mts +1 -1
- package/dist/db/postgres.d.mts +1 -1
- package/dist/db/sqlite.d.mts +1 -1
- package/dist/{device-flow-DygsFPGL.mjs → device-flow-BnqRH-T9.mjs} +5 -5
- package/dist/{placeholder-BDo81Is5.mjs → enrich-DIFIFA8O.mjs} +36 -9
- package/dist/{error-DCSuUAZW.mjs → error-CytFlgcd.mjs} +5 -0
- package/dist/field-defs-cache-DRNdhBJv.mjs +49 -0
- package/dist/{fts-manager-CIZlScg5.mjs → fts-manager-Crzypjqu.mjs} +1 -1
- package/dist/hitl-Hw1RmWOq.mjs +677 -0
- package/dist/{hitl-requests-CGQwOEiq.mjs → hitl-requests-B4Vbcmaq.mjs} +2 -2
- package/dist/{hitl-route-helpers-GSDLNPpN.mjs → hitl-route-helpers-hEVzvP8l.mjs} +5 -4
- package/dist/import-Bh9biJfx.mjs +1354 -0
- package/dist/{index-CwRuZ-u8.d.mts → index-D4y6NGiy.d.mts} +75 -3
- package/dist/index.d.mts +17 -16
- package/dist/index.mjs +81 -69
- package/dist/{jsonld-DZ67souc.d.mts → jsonld-Dq0gsnOH.d.mts} +8 -4
- package/dist/{load-xE01Jm0V.mjs → load-DmYeniXl.mjs} +1 -1
- package/dist/{loader-tg63WSY2.mjs → loader-CjWqjweO.mjs} +117 -31
- package/dist/{manifest-schema-qh2P7RDX.mjs → manifest-schema-BxVPYMJR.mjs} +34 -1
- package/dist/mcp-reviewed-executor-TwVbMzG6.mjs +555 -0
- package/dist/media/image-endpoint.d.mts +32 -0
- package/dist/media/image-endpoint.mjs +111 -0
- package/dist/media/index.d.mts +27 -2
- package/dist/media/index.mjs +5 -3
- package/dist/media/local-runtime.d.mts +16 -11
- package/dist/media/local-runtime.mjs +10 -8
- package/dist/{media-DUAjMfvR.mjs → media-DMj0grzC.mjs} +3 -1
- package/dist/{media-allowlist-BsXkT9RK.mjs → media-allowlist-BlVCSzHx.mjs} +1 -1
- package/dist/media-url-lEKSrpr9.mjs +20 -0
- package/dist/{menus-WpFRMXjz.mjs → menus-TaW1gKnk.mjs} +19 -5
- package/dist/{menus-DU1eZqw_.mjs → menus-xvsnVZXw.mjs} +80 -15
- package/dist/{normalize-DUnoXAa9.mjs → normalize-5ek_z7de.mjs} +8 -1
- package/dist/{oauth-authorization-D-1p52Je.mjs → oauth-authorization-DiaGvRVz.mjs} +5 -5
- package/dist/{oauth-clients-CzeMGyUU.mjs → oauth-clients-Dl9E8dEM.mjs} +2 -2
- package/dist/object-cache/memory.d.mts +14 -0
- package/dist/object-cache/memory.mjs +55 -0
- package/dist/object-cache-D51qOseS.mjs +419 -0
- package/dist/page/index.d.mts +4 -3
- package/dist/page/index.mjs +2 -2
- package/dist/{parse-CneSgl7-.mjs → parse-CbymENaR.mjs} +1 -1
- package/dist/{parser-DxfsARXL.mjs → parser-C1nYd-81.mjs} +151 -9
- package/dist/{placeholder-CXfoCtCd.d.mts → placeholder-uvNRZBX9.d.mts} +12 -4
- package/dist/plugin-utils.d.mts +9 -9
- package/dist/plugins/adapt-sandbox-entry.d.mts +9 -9
- package/dist/plugins/adapt-sandbox-entry.mjs +11 -2
- package/dist/{plugins-C57YQi4l.mjs → plugins-BolVa-tl.mjs} +832 -64
- package/dist/{transport-LSdZVXHF.mjs → portable-text-dA_UlJwW.mjs} +1 -134
- package/dist/{preview-D5rvDhRt.mjs → preview-vSVg6fwG.mjs} +4 -3
- package/dist/process-cache-7xgAO9JY.mjs +106 -0
- package/dist/{provider-loader-9it4vd6L.d.mts → provider-loader-MD8zAbnH.d.mts} +1 -1
- package/dist/{public-url-DLUM5OOv.mjs → public-url-BEz_sM9n.mjs} +24 -18
- package/dist/{public-url-B5HaoGzj.d.mts → public-url-gsp3oUbu.d.mts} +5 -4
- package/dist/{query-BYc3oruA.mjs → query-CfRCdaL3.mjs} +281 -76
- package/dist/{query-DKEwzobh.mjs → query-jaAmw8E1.mjs} +11 -6
- package/dist/{rate-limit-i0G3IAOX.mjs → rate-limit-ZLdyWoZF.mjs} +2 -2
- package/dist/{redirect-C2zXRj3c.mjs → redirect-BAjt4Z6b.mjs} +2 -2
- package/dist/{redirects-YZo_znWG.mjs → redirects-BTdwpQtE.mjs} +47 -24
- package/dist/{redirects-ocRJmQHP.mjs → redirects-CA-xylPG.mjs} +19 -11
- package/dist/{registry-CTkbIDB9.mjs → registry-CtyVedcN.mjs} +130 -77
- package/dist/request-context.d.mts +2 -0
- package/dist/{request-meta-DAb6xaP9.mjs → request-meta-CUypToDJ.mjs} +1 -1
- package/dist/{review-requests-C0un5kdV.mjs → review-requests-C9Ff11Vq.mjs} +1 -1
- package/dist/{review-requests-gGMyYYhy.mjs → review-requests-DUyEmtmG.mjs} +1 -1
- package/dist/{runner-D4FL9usy.d.mts → runner-1tC2tIRV.d.mts} +1 -1
- package/dist/runner-DB7CRfOF.mjs +6740 -0
- package/dist/{runtime-DEWQpZ-4.d.mts → runtime-BOeiQsCv.d.mts} +2028 -1564
- package/dist/runtime.d.mts +10 -10
- package/dist/runtime.mjs +4 -4
- package/dist/schema-DXdYj4R3.mjs +8 -0
- package/dist/{search-axGQ1KY3.mjs → search-DSaLgEFI.mjs} +5 -3
- package/dist/{secrets-062Izo8i.mjs → secrets-CDZo2k8L.mjs} +15 -12
- package/dist/{sections-OLKgXL10.mjs → sections-PVVXHGfp.mjs} +2 -2
- package/dist/seed/index.d.mts +2 -2
- package/dist/seed/index.mjs +22 -19
- package/dist/seo/index.d.mts +1 -1
- package/dist/seo/index.mjs +3 -12
- package/dist/{seo-Cd45Po8L.mjs → seo-CQG3GCHQ.mjs} +5 -2
- package/dist/{seo-contributions-CqVvReEj.mjs → seo-contributions-C1EnikHB.mjs} +11 -3
- package/dist/{seo-5lJOtB5J.mjs → seo-qa7Dn0jK.mjs} +22 -4
- package/dist/{service-Bwad8s5h.mjs → service-DiN4ZuPp.mjs} +2 -2
- package/dist/session-user-CAKImna3.mjs +22 -0
- package/dist/{settings-yLjz_I4T.mjs → settings-BbqgHWpU.mjs} +28 -55
- package/dist/{settings-lAHjaUit.mjs → settings-i4VPP8bT.mjs} +2 -2
- package/dist/{setup-complete--PradA4R.mjs → setup-complete-B8fl-mjV.mjs} +1 -1
- package/dist/{site-activity-D7Xyropw.mjs → site-activity-Dy3FROs0.mjs} +1 -1
- package/dist/{site-context-DaN9Z91j.mjs → site-context-DQiL8Fl5.mjs} +23 -652
- package/dist/{site-url-DpGZo9Z6.mjs → site-url-BML3GQYm.mjs} +1 -1
- package/dist/status-DANd8ERo.mjs +21 -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/{taxonomies-uXVEoQso.mjs → taxonomies-9s-v03H-.mjs} +36 -29
- package/dist/taxonomies-DRiixp_E.mjs +443 -0
- package/dist/{taxonomy-CBmkmMuU.mjs → taxonomy-Dvsw6BOs.mjs} +44 -9
- package/dist/{tokens-CjSgb0AC.mjs → tokens-1RK1n6ED.mjs} +1 -1
- package/dist/transport-BNmCqLu7.mjs +134 -0
- package/dist/types-4garmdWa.mjs +66 -0
- package/dist/{types-DSPGWjxO.d.mts → types-C8XW6L19.d.mts} +225 -4
- package/dist/{types-GaCtZ1k9.d.mts → types-CDpH6MA4.d.mts} +18 -0
- package/dist/{types-DRIKLmJI.d.mts → types-C_ly5eTp.d.mts} +17 -2
- package/dist/types-DF7ZuGGk.d.mts +118 -0
- package/dist/types-DU0bU2Wu.d.mts +2392 -0
- package/dist/{types-CwawBUTa.d.mts → types-DW_-sFyz.d.mts} +2 -1
- package/dist/{types-DfuD0Afl.mjs → types-Dq1qT19x.mjs} +2 -2
- package/dist/ui/server-runtime.d.mts +15 -15
- package/dist/ui/server-runtime.mjs +25 -21
- package/dist/url-Cac7a9QZ.mjs +33 -0
- package/dist/{user-DtNmjNYt.mjs → user-BIZPzCb9.mjs} +2 -2
- package/dist/{utils-wv-zvC-Y.mjs → utils-CMDhr5Xd.mjs} +129 -7
- package/dist/{validate-BMs11tan.d.mts → validate-CZvb-BKB.d.mts} +10 -7
- package/dist/{validate-7SYRbz2f.mjs → validate-DNs0pTSc.mjs} +11 -6
- package/dist/version-BTvfRGc6.mjs +6 -0
- package/dist/{widgets-DR8EHuRO.mjs → widgets-f0ibZUIq.mjs} +46 -43
- package/dist/{wordpress-slugs-Dvhxh4cl.mjs → wordpress-slugs-BhHJX8XE.mjs} +1 -1
- package/dist/{zod-generator-BS9-umbk.mjs → zod-generator-B7TMjyFJ.mjs} +41 -13
- package/package.json +31 -8
- package/src/components/Block.astro +50 -0
- package/src/components/Comments.astro +143 -1
- package/src/components/DinewayHead.astro +19 -2
- package/src/components/DinewayImage.astro +66 -33
- package/src/components/DinewayMedia.astro +1 -2
- package/src/components/Image.astro +85 -40
- package/src/components/InlinePortableTextEditor.tsx +12 -2
- package/src/components/JsonLdScript.astro +9 -0
- package/src/components/LiveSearch.astro +40 -4
- package/src/components/index.ts +4 -0
- package/src/components/live-search-routing.ts +30 -0
- package/src/components/portable-text-text-align.ts +15 -0
- package/src/ui.ts +2 -0
- package/dist/entity-aliases-Egjmqc7I.mjs +0 -51
- package/dist/import-CvHY6sf5.mjs +0 -684
- package/dist/runner-B-tbV751.mjs +0 -2741
- package/dist/schema-B6zyB-Xn.mjs +0 -8
- package/dist/taxonomies-CNOGeC-3.mjs +0 -327
- package/dist/types-eu5UDgHN.d.mts +0 -652
- package/dist/version-xlzMSXF2.mjs +0 -6
- /package/dist/{adapters-OQCImOL7.d.mts → adapters-NVSs4UH7.d.mts} +0 -0
- /package/dist/{api-tokens-CYUoFGo7.mjs → api-tokens-2r7OWi_I.mjs} +0 -0
- /package/dist/{base64-C1Q9yr0B.mjs → base64-F8-DUraK.mjs} +0 -0
- /package/dist/{challenge-store-CRSz-Xim.mjs → challenge-store-Bjlepa2E.mjs} +0 -0
- /package/dist/{components--pg6zBvu.mjs → components-Bclf98Be.mjs} +0 -0
- /package/dist/{context-types-DQh_XKkn.mjs → context-types-DqTo6C79.mjs} +0 -0
- /package/dist/{default-B6iaLvP7.mjs → default--K40jqm0.mjs} +0 -0
- /package/dist/{email-console-BOVqIYpB.mjs → email-console-ChgKFO8-.mjs} +0 -0
- /package/dist/{escape-BDgouFFY.mjs → escape-Bd4P_xKg.mjs} +0 -0
- /package/dist/{experimental-workflows-Dh4DUoD_.mjs → experimental-workflows-BMsUnIAw.mjs} +0 -0
- /package/dist/{mime-8pAB8-77.mjs → mime-CA7Lgovc.mjs} +0 -0
- /package/dist/{mode-CpyEz8pe.mjs → mode-C4CIyjtR.mjs} +0 -0
- /package/dist/{oauth-state-store-qncPB_IU.mjs → oauth-state-store-CNoXafF7.mjs} +0 -0
- /package/dist/{oauth-user-lookup-BFjWF8wK.mjs → oauth-user-lookup-Ygw4bNyt.mjs} +0 -0
- /package/dist/{options-BvJoSSJR.mjs → options-DQPTH5n0.mjs} +0 -0
- /package/dist/{passkey-config-DzHQK90v.mjs → passkey-config-BUwu8BA3.mjs} +0 -0
- /package/dist/{patterns-r-0n824Y.mjs → patterns-BhAvqO0S.mjs} +0 -0
- /package/dist/{provider-loader-DzUxejk7.mjs → provider-loader-D0w9dqjm.mjs} +0 -0
- /package/dist/{redirect-BjIBtDWY.mjs → redirect-wphRBv4y.mjs} +0 -0
- /package/dist/{request-cache-CYMbwZc6.mjs → request-cache-D9GQBxMP.mjs} +0 -0
- /package/dist/{resolve-DTuDyYKs.mjs → resolve-Cb6Dbz-C.mjs} +0 -0
- /package/dist/{setup-nonce-pyGfc9hV.mjs → setup-nonce-CoyjILvW.mjs} +0 -0
- /package/dist/{sidecar-client-mJxwayYN.mjs → sidecar-client-C3mqXg4C.mjs} +0 -0
- /package/dist/{slugify-BzGxlOFx.mjs → slugify-KSsVD_D3.mjs} +0 -0
- /package/dist/{ssrf-DiKqWd3N.mjs → ssrf-DWe8jwAp.mjs} +0 -0
- /package/dist/{transaction-CShMWIej.mjs → transaction-C2EOMTJA.mjs} +0 -0
- /package/dist/{transport-BnsNxh2l.d.mts → transport-CcJu3Co8.d.mts} +0 -0
- /package/dist/{trusted-proxy-BgIIcbsN.mjs → trusted-proxy-DTXQ2IMv.mjs} +0 -0
- /package/dist/{types-BO8TGjS8.mjs → types-B3t5cxhU.mjs} +0 -0
- /package/dist/{types-nP9vGUFq.d.mts → types-C46EvNdc.d.mts} +0 -0
- /package/dist/{types-Cg276-3z.mjs → types-C5CVgwsV.mjs} +0 -0
- /package/dist/{types-DZpT-PnG.d.mts → types-POH8PQZh.d.mts} +0 -0
- /package/dist/{types-Dryvv7LH.d.mts → types-Rc3gQqqw.d.mts} +0 -0
- /package/dist/{url-w7Mp5qAD.mjs → url-CpyFDFpO.mjs} +0 -0
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { a as __exportAll } from "./runner-
|
|
1
|
+
import { a as __exportAll } from "./runner-DB7CRfOF.mjs";
|
|
2
2
|
import { n as getI18nConfig, r as isI18nEnabled, t as getFallbackChain } from "./config-CVssduLe.mjs";
|
|
3
|
-
import { i as encodeCursor } from "./types-DfuD0Afl.mjs";
|
|
4
3
|
import { getRequestContext } from "./request-context.mjs";
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
4
|
+
import { i as encodeCursor } from "./types-Dq1qT19x.mjs";
|
|
5
|
+
import { o as isMissingTableError, s as takeLiveCollectionMeta, t as CURSOR_RAW_VALUES } from "./loader-CjWqjweO.mjs";
|
|
6
|
+
import { i as contentNamespaces, n as cachedQuery, u as invalidateSchemaObjectCache } from "./object-cache-D51qOseS.mjs";
|
|
7
|
+
import { r as requestCached } from "./request-cache-D9GQBxMP.mjs";
|
|
7
8
|
|
|
8
9
|
//#region src/visual-editing/editable.ts
|
|
9
10
|
/**
|
|
@@ -84,6 +85,8 @@ var query_exports = /* @__PURE__ */ __exportAll({
|
|
|
84
85
|
resolveDinewayPath: () => resolveDinewayPath,
|
|
85
86
|
sliceCollectionResult: () => sliceCollectionResult
|
|
86
87
|
});
|
|
88
|
+
const FOLDED_TERMS = Symbol.for("dineway:foldedTerms");
|
|
89
|
+
const FOLDED_BYLINES = Symbol.for("dineway:foldedBylines");
|
|
87
90
|
const COLLECTION_NAME = "_dineway";
|
|
88
91
|
/** Symbol key for edit metadata on PT arrays — avoids collision with user data */
|
|
89
92
|
const DINEWAY_EDIT = Symbol.for("__dineway");
|
|
@@ -125,6 +128,14 @@ function dataStr(data, key, fallback = "") {
|
|
|
125
128
|
const val = data[key];
|
|
126
129
|
return typeof val === "string" ? val : fallback;
|
|
127
130
|
}
|
|
131
|
+
/** Safely read a date-like field from a Record */
|
|
132
|
+
function dataDate(data, key) {
|
|
133
|
+
const val = data[key];
|
|
134
|
+
if (val instanceof Date) return Number.isNaN(val.getTime()) ? void 0 : val;
|
|
135
|
+
if (typeof val !== "string" && typeof val !== "number") return void 0;
|
|
136
|
+
const date = new Date(val);
|
|
137
|
+
return Number.isNaN(date.getTime()) ? void 0 : date;
|
|
138
|
+
}
|
|
128
139
|
/** Type guard for Record<string, unknown> */
|
|
129
140
|
function isRecord(value) {
|
|
130
141
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
@@ -176,61 +187,105 @@ async function getDinewayCollection(type, filter) {
|
|
|
176
187
|
const i18nConfig = getI18nConfig();
|
|
177
188
|
const resolvedLocale = filter?.locale ?? ctx?.locale ?? (isI18nEnabled() ? i18nConfig.defaultLocale : void 0);
|
|
178
189
|
const bucketed = bucketFilter(filter);
|
|
179
|
-
const cached = await requestCached(collectionCacheKey(type, bucketed.fetchFilter, resolvedLocale),
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
const result = await getLiveCollection(COLLECTION_NAME, liveFilter);
|
|
195
|
-
const meta = takeLiveCollectionMeta(liveFilter);
|
|
196
|
-
const { entries, error, cacheHint } = result;
|
|
197
|
-
const rawCursor = Object.getOwnPropertyDescriptor(result, "nextCursor")?.value;
|
|
198
|
-
const nextCursor = typeof rawCursor === "string" ? rawCursor : meta?.nextCursor;
|
|
199
|
-
const rawTotal = Object.getOwnPropertyDescriptor(result, "total")?.value;
|
|
200
|
-
const total = typeof rawTotal === "number" ? rawTotal : meta?.total;
|
|
201
|
-
if (error) return {
|
|
202
|
-
entries: [],
|
|
203
|
-
error,
|
|
204
|
-
cacheHint: {},
|
|
205
|
-
total
|
|
206
|
-
};
|
|
207
|
-
const hasMore = requestedFetchLimit !== void 0 && requestedFetchLimit > 0 && entries.length > requestedFetchLimit;
|
|
208
|
-
const pageEntries = hasMore ? entries.slice(0, requestedFetchLimit) : entries;
|
|
209
|
-
const pageNextCursor = (hasMore ? encodeEntryCursor(pageEntries.at(-1), bucketed.fetchFilter?.orderBy) : void 0) ?? nextCursor;
|
|
210
|
-
const isEditMode = ctx?.editMode ?? false;
|
|
211
|
-
const entriesWithEdit = pageEntries.map((entry) => {
|
|
212
|
-
const dbId = entryDatabaseId(entry);
|
|
213
|
-
if (isEditMode) tagEditableFields(entryData(entry), type, dbId);
|
|
190
|
+
const cached = await requestCached(collectionCacheKey(type, bucketed.fetchFilter, resolvedLocale), () => loadCollectionCached(type, bucketed.fetchFilter, resolvedLocale));
|
|
191
|
+
return bucketed.requestedLimit === void 0 ? cached : sliceCollectionResult(cached, bucketed.requestedLimit, filter?.orderBy);
|
|
192
|
+
}
|
|
193
|
+
async function loadCollectionCached(type, filter, resolvedLocale) {
|
|
194
|
+
const snapshot = await cachedQuery({
|
|
195
|
+
namespace: contentNamespaces(type),
|
|
196
|
+
key: collectionCacheKey(type, filter, resolvedLocale),
|
|
197
|
+
load: async () => {
|
|
198
|
+
const result = await getDinewayCollectionUncached(type, filter, resolvedLocale);
|
|
199
|
+
if (result.error) return {
|
|
200
|
+
ok: false,
|
|
201
|
+
error: result.error,
|
|
202
|
+
cacheHint: result.cacheHint,
|
|
203
|
+
total: result.total
|
|
204
|
+
};
|
|
214
205
|
return {
|
|
215
|
-
|
|
216
|
-
|
|
206
|
+
ok: true,
|
|
207
|
+
value: {
|
|
208
|
+
entries: result.entries.map(entrySnapshot),
|
|
209
|
+
nextCursor: result.nextCursor,
|
|
210
|
+
hasMore: result.hasMore,
|
|
211
|
+
total: result.total,
|
|
212
|
+
cacheHint: result.cacheHint
|
|
213
|
+
}
|
|
217
214
|
};
|
|
218
|
-
}
|
|
219
|
-
|
|
215
|
+
},
|
|
216
|
+
cacheable: (snap) => snap.ok
|
|
217
|
+
});
|
|
218
|
+
if (!snapshot.ok) return {
|
|
219
|
+
entries: [],
|
|
220
|
+
error: snapshot.error,
|
|
221
|
+
cacheHint: snapshot.cacheHint,
|
|
222
|
+
total: snapshot.total
|
|
223
|
+
};
|
|
224
|
+
return {
|
|
225
|
+
entries: snapshot.value.entries.map((entry) => reviveEntry(entry)),
|
|
226
|
+
nextCursor: snapshot.value.nextCursor,
|
|
227
|
+
hasMore: snapshot.value.hasMore,
|
|
228
|
+
total: snapshot.value.total,
|
|
229
|
+
cacheHint: snapshot.value.cacheHint
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
async function getDinewayCollectionUncached(type, filter, resolvedLocale) {
|
|
233
|
+
const { getLiveCollection } = await import("astro:content");
|
|
234
|
+
const ctx = getRequestContext();
|
|
235
|
+
const requestedFetchLimit = filter?.limit;
|
|
236
|
+
const liveLimit = requestedFetchLimit !== void 0 && requestedFetchLimit > 0 ? requestedFetchLimit + 1 : requestedFetchLimit;
|
|
237
|
+
const pageParam = filter?.cursor !== void 0 ? { cursor: filter.cursor } : filter?.offset !== void 0 ? { offset: filter.offset } : {};
|
|
238
|
+
const liveFilter = {
|
|
239
|
+
type,
|
|
240
|
+
status: filter?.status,
|
|
241
|
+
limit: liveLimit,
|
|
242
|
+
...pageParam,
|
|
243
|
+
where: filter?.where,
|
|
244
|
+
q: filter?.q,
|
|
245
|
+
searchColumns: filter?.searchColumns,
|
|
246
|
+
orderBy: filter?.orderBy,
|
|
247
|
+
locale: resolvedLocale
|
|
248
|
+
};
|
|
249
|
+
const result = await getLiveCollection(COLLECTION_NAME, liveFilter);
|
|
250
|
+
const meta = takeLiveCollectionMeta(liveFilter);
|
|
251
|
+
const { entries, error, cacheHint } = result;
|
|
252
|
+
const rawCursor = Object.getOwnPropertyDescriptor(result, "nextCursor")?.value;
|
|
253
|
+
const nextCursor = typeof rawCursor === "string" ? rawCursor : meta?.nextCursor;
|
|
254
|
+
const rawTotal = Object.getOwnPropertyDescriptor(result, "total")?.value;
|
|
255
|
+
const total = typeof rawTotal === "number" ? rawTotal : meta?.total;
|
|
256
|
+
if (error) return {
|
|
257
|
+
entries: [],
|
|
258
|
+
error,
|
|
259
|
+
cacheHint: {},
|
|
260
|
+
total
|
|
261
|
+
};
|
|
262
|
+
const hasMore = requestedFetchLimit !== void 0 && requestedFetchLimit > 0 && entries.length > requestedFetchLimit;
|
|
263
|
+
const pageEntries = hasMore ? entries.slice(0, requestedFetchLimit) : entries;
|
|
264
|
+
const pageNextCursor = (hasMore ? encodeEntryCursor(pageEntries.at(-1), filter?.orderBy) : void 0) ?? nextCursor;
|
|
265
|
+
const hasMoreResult = requestedFetchLimit !== void 0 && requestedFetchLimit > 0 ? hasMore : meta?.hasMore;
|
|
266
|
+
const isEditMode = ctx?.editMode ?? false;
|
|
267
|
+
const entriesWithEdit = pageEntries.map((entry) => {
|
|
268
|
+
const dbId = entryDatabaseId(entry);
|
|
269
|
+
if (isEditMode) tagEditableFields(entryData(entry), type, dbId);
|
|
220
270
|
return {
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
total,
|
|
224
|
-
cacheHint: cacheHint ?? {}
|
|
271
|
+
...entry,
|
|
272
|
+
edit: isEditMode ? createEditable(type, dbId, entryEditOptions(entry)) : createNoop()
|
|
225
273
|
};
|
|
226
274
|
});
|
|
227
|
-
|
|
275
|
+
await Promise.all([hydrateEntryBylines(type, entriesWithEdit), hydrateEntryTerms(type, entriesWithEdit, resolvedLocale)]);
|
|
276
|
+
return {
|
|
277
|
+
entries: entriesWithEdit,
|
|
278
|
+
nextCursor: pageNextCursor,
|
|
279
|
+
hasMore: hasMoreResult,
|
|
280
|
+
total,
|
|
281
|
+
cacheHint: cacheHint ?? {}
|
|
282
|
+
};
|
|
228
283
|
}
|
|
229
284
|
const BUCKET_LIMIT_THRESHOLD = 10;
|
|
230
285
|
/** @internal exported for unit tests; not part of the public API. */
|
|
231
286
|
function bucketFilter(filter) {
|
|
232
287
|
const limit = filter?.limit;
|
|
233
|
-
if (limit === void 0 || limit >= BUCKET_LIMIT_THRESHOLD || limit <= 0 || filter?.cursor !== void 0) return {
|
|
288
|
+
if (limit === void 0 || limit >= BUCKET_LIMIT_THRESHOLD || limit <= 0 || filter?.cursor !== void 0 || filter?.offset !== void 0) return {
|
|
234
289
|
fetchFilter: filter,
|
|
235
290
|
requestedLimit: void 0
|
|
236
291
|
};
|
|
@@ -252,7 +307,8 @@ function sliceCollectionResult(cached, limit, orderBy) {
|
|
|
252
307
|
return {
|
|
253
308
|
...cached,
|
|
254
309
|
entries,
|
|
255
|
-
nextCursor
|
|
310
|
+
nextCursor,
|
|
311
|
+
hasMore: true
|
|
256
312
|
};
|
|
257
313
|
}
|
|
258
314
|
const ENTRY_DATA_KEY_MAP = {
|
|
@@ -292,6 +348,7 @@ function collectionCacheKey(type, filter, locale) {
|
|
|
292
348
|
filter?.status ?? "",
|
|
293
349
|
filter?.limit ?? "",
|
|
294
350
|
filter?.cursor ?? "",
|
|
351
|
+
filter?.offset ?? "",
|
|
295
352
|
filter?.where ? stableStringify(filter.where) : "",
|
|
296
353
|
filter?.q ?? "",
|
|
297
354
|
filter?.searchColumns ? JSON.stringify(filter.searchColumns) : "",
|
|
@@ -310,6 +367,36 @@ function stableOrder(value) {
|
|
|
310
367
|
}
|
|
311
368
|
return ordered;
|
|
312
369
|
}
|
|
370
|
+
const CURSOR_RAW_FIELD = "__dinewayCursorRaw";
|
|
371
|
+
function entrySnapshot(entry) {
|
|
372
|
+
const data = entryData(entry);
|
|
373
|
+
const rawCursor = Reflect.get(data, CURSOR_RAW_VALUES);
|
|
374
|
+
return {
|
|
375
|
+
id: entry.id,
|
|
376
|
+
data: {
|
|
377
|
+
...data,
|
|
378
|
+
[CURSOR_RAW_FIELD]: isRecord(rawCursor) ? rawCursor : {}
|
|
379
|
+
}
|
|
380
|
+
};
|
|
381
|
+
}
|
|
382
|
+
function reviveEntry(raw) {
|
|
383
|
+
const entry = isRecord(raw) ? raw : {};
|
|
384
|
+
const data = { ...isRecord(entry.data) ? entry.data : {} };
|
|
385
|
+
const rawCursorValue = data[CURSOR_RAW_FIELD];
|
|
386
|
+
const rawCursor = isRecord(rawCursorValue) ? rawCursorValue : {};
|
|
387
|
+
delete data[CURSOR_RAW_FIELD];
|
|
388
|
+
Object.defineProperty(data, CURSOR_RAW_VALUES, {
|
|
389
|
+
value: rawCursor,
|
|
390
|
+
enumerable: false,
|
|
391
|
+
configurable: false,
|
|
392
|
+
writable: false
|
|
393
|
+
});
|
|
394
|
+
return {
|
|
395
|
+
id: typeof entry.id === "string" ? entry.id : "",
|
|
396
|
+
data,
|
|
397
|
+
edit: createNoop()
|
|
398
|
+
};
|
|
399
|
+
}
|
|
313
400
|
/**
|
|
314
401
|
* Get a single entry by type and ID/slug
|
|
315
402
|
*
|
|
@@ -351,8 +438,16 @@ async function getDinewayEntry(type, id, options) {
|
|
|
351
438
|
function isVisible(entry) {
|
|
352
439
|
const data = entryData(entry);
|
|
353
440
|
const status = dataStr(data, "status");
|
|
354
|
-
const scheduledAt =
|
|
355
|
-
|
|
441
|
+
const scheduledAt = dataDate(data, "scheduledAt");
|
|
442
|
+
const isPublished = status === "published";
|
|
443
|
+
const isScheduledAndReady = status === "scheduled" && scheduledAt !== void 0 && scheduledAt.getTime() <= Date.now();
|
|
444
|
+
return isPublished || !!isScheduledAndReady;
|
|
445
|
+
}
|
|
446
|
+
function isPendingScheduled(entry) {
|
|
447
|
+
const data = entryData(entry);
|
|
448
|
+
if (dataStr(data, "status") !== "scheduled") return false;
|
|
449
|
+
const scheduledAt = dataDate(data, "scheduledAt");
|
|
450
|
+
return scheduledAt !== void 0 && scheduledAt.getTime() > Date.now();
|
|
356
451
|
}
|
|
357
452
|
const localeChain = requestedLocale && isI18nEnabled() ? getFallbackChain(requestedLocale) : [requestedLocale];
|
|
358
453
|
/** Return a successful EntryResult with runtime data hydrated */
|
|
@@ -419,30 +514,68 @@ async function getDinewayEntry(type, id, options) {
|
|
|
419
514
|
cacheHint: {}
|
|
420
515
|
};
|
|
421
516
|
}
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
517
|
+
let timeSensitive = false;
|
|
518
|
+
const resolveNormal = async () => {
|
|
519
|
+
for (let i = 0; i < localeChain.length; i++) {
|
|
520
|
+
const locale = localeChain[i];
|
|
521
|
+
const fallbackLocale = i > 0 ? locale : void 0;
|
|
522
|
+
const { entry, error, cacheHint } = await getLiveEntry(COLLECTION_NAME, {
|
|
523
|
+
type,
|
|
524
|
+
id,
|
|
525
|
+
locale
|
|
526
|
+
});
|
|
527
|
+
if (error) return {
|
|
528
|
+
entry: null,
|
|
529
|
+
error,
|
|
530
|
+
isPreview: false,
|
|
531
|
+
cacheHint: {}
|
|
532
|
+
};
|
|
533
|
+
if (entry && isVisible(entry)) return successResult(wrapEntry(entry), {
|
|
534
|
+
isPreview: false,
|
|
535
|
+
fallbackLocale,
|
|
536
|
+
cacheHint: cacheHint ?? {}
|
|
537
|
+
});
|
|
538
|
+
if (entry && isPendingScheduled(entry)) timeSensitive = true;
|
|
539
|
+
}
|
|
540
|
+
return {
|
|
431
541
|
entry: null,
|
|
432
|
-
error,
|
|
433
542
|
isPreview: false,
|
|
434
543
|
cacheHint: {}
|
|
435
544
|
};
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
545
|
+
};
|
|
546
|
+
const snapshot = await cachedQuery({
|
|
547
|
+
namespace: contentNamespaces(type),
|
|
548
|
+
key: `entry:${id}|loc=${requestedLocale ?? ""}`,
|
|
549
|
+
load: async () => {
|
|
550
|
+
const result = await resolveNormal();
|
|
551
|
+
if (result.error) return {
|
|
552
|
+
ok: false,
|
|
553
|
+
error: result.error,
|
|
554
|
+
cacheHint: result.cacheHint
|
|
555
|
+
};
|
|
556
|
+
return {
|
|
557
|
+
ok: true,
|
|
558
|
+
value: {
|
|
559
|
+
entry: result.entry ? entrySnapshot(result.entry) : null,
|
|
560
|
+
isPreview: result.isPreview,
|
|
561
|
+
fallbackLocale: result.fallbackLocale,
|
|
562
|
+
cacheHint: result.cacheHint
|
|
563
|
+
}
|
|
564
|
+
};
|
|
565
|
+
},
|
|
566
|
+
cacheable: (snap) => snap.ok && !timeSensitive
|
|
567
|
+
});
|
|
568
|
+
if (!snapshot.ok) return {
|
|
443
569
|
entry: null,
|
|
570
|
+
error: snapshot.error,
|
|
444
571
|
isPreview: false,
|
|
445
|
-
cacheHint:
|
|
572
|
+
cacheHint: snapshot.cacheHint
|
|
573
|
+
};
|
|
574
|
+
return {
|
|
575
|
+
entry: snapshot.value.entry ? reviveEntry(snapshot.value.entry) : null,
|
|
576
|
+
isPreview: snapshot.value.isPreview,
|
|
577
|
+
fallbackLocale: snapshot.value.fallbackLocale,
|
|
578
|
+
cacheHint: snapshot.value.cacheHint
|
|
446
579
|
};
|
|
447
580
|
}
|
|
448
581
|
/**
|
|
@@ -456,8 +589,47 @@ async function getDinewayEntry(type, id, options) {
|
|
|
456
589
|
*/
|
|
457
590
|
async function hydrateEntryBylines(type, entries) {
|
|
458
591
|
if (entries.length === 0) return;
|
|
592
|
+
if (entries.every((entry) => FOLDED_BYLINES in entryData(entry))) {
|
|
593
|
+
const parsed = entries.map((entry) => {
|
|
594
|
+
const data = entryData(entry);
|
|
595
|
+
const folded = Reflect.get(data, FOLDED_BYLINES);
|
|
596
|
+
return {
|
|
597
|
+
data,
|
|
598
|
+
credits: (Array.isArray(folded) ? folded : []).map((raw) => {
|
|
599
|
+
const byline = raw?.byline ?? {};
|
|
600
|
+
return {
|
|
601
|
+
roleLabel: raw?.roleLabel ?? null,
|
|
602
|
+
sortOrder: Number(raw?.sortOrder ?? 0),
|
|
603
|
+
source: "explicit",
|
|
604
|
+
byline: {
|
|
605
|
+
...byline,
|
|
606
|
+
isGuest: Boolean(byline.isGuest),
|
|
607
|
+
customFields: {}
|
|
608
|
+
}
|
|
609
|
+
};
|
|
610
|
+
}).toSorted((a, b) => a.sortOrder - b.sortOrder)
|
|
611
|
+
};
|
|
612
|
+
});
|
|
613
|
+
let needsQueryPath = parsed.some((item) => item.credits.length === 0 && (dataStr(item.data, "authorId") !== "" || dataStr(item.data, "primaryBylineId") !== ""));
|
|
614
|
+
let hasCustomFields = false;
|
|
615
|
+
if (!needsQueryPath) try {
|
|
616
|
+
const { getDb } = await import("./loader-CjWqjweO.mjs").then((n) => n.i);
|
|
617
|
+
const db = await getDb();
|
|
618
|
+
const { getBylineFieldDefs } = await import("./field-defs-cache-DRNdhBJv.mjs").then((n) => n.t);
|
|
619
|
+
hasCustomFields = (await getBylineFieldDefs(db)).length > 0;
|
|
620
|
+
} catch (error) {
|
|
621
|
+
if (!isMissingTableError(error)) needsQueryPath = true;
|
|
622
|
+
}
|
|
623
|
+
if (!needsQueryPath && !hasCustomFields) {
|
|
624
|
+
for (const item of parsed) {
|
|
625
|
+
item.data.bylines = item.credits;
|
|
626
|
+
item.data.byline = item.credits[0]?.byline ?? null;
|
|
627
|
+
}
|
|
628
|
+
return;
|
|
629
|
+
}
|
|
630
|
+
}
|
|
459
631
|
try {
|
|
460
|
-
const { getBylinesForEntries } = await import("./bylines-
|
|
632
|
+
const { getBylinesForEntries } = await import("./bylines-y4LO-dTj.mjs").then((n) => n.t);
|
|
461
633
|
const refs = entries.map((entry) => {
|
|
462
634
|
const data = entryData(entry);
|
|
463
635
|
const id = dataStr(data, "id");
|
|
@@ -487,8 +659,40 @@ async function hydrateEntryBylines(type, entries) {
|
|
|
487
659
|
}
|
|
488
660
|
async function hydrateEntryTerms(type, entries, locale) {
|
|
489
661
|
if (entries.length === 0) return;
|
|
662
|
+
if (entries.every((entry) => FOLDED_TERMS in entryData(entry))) {
|
|
663
|
+
const perEntry = [];
|
|
664
|
+
for (const entry of entries) {
|
|
665
|
+
const data = entryData(entry);
|
|
666
|
+
const folded = Reflect.get(data, FOLDED_TERMS);
|
|
667
|
+
const rows = Array.isArray(folded) ? folded : [];
|
|
668
|
+
const grouped = {};
|
|
669
|
+
for (const row of rows) {
|
|
670
|
+
const name = String(row?.name);
|
|
671
|
+
(grouped[name] ??= []).push({
|
|
672
|
+
id: row?.id,
|
|
673
|
+
name,
|
|
674
|
+
slug: row?.slug,
|
|
675
|
+
label: row?.label,
|
|
676
|
+
parentId: row?.parent_id ?? void 0,
|
|
677
|
+
children: [],
|
|
678
|
+
locale: row?.locale,
|
|
679
|
+
translationGroup: row?.translation_group
|
|
680
|
+
});
|
|
681
|
+
}
|
|
682
|
+
for (const [name, terms] of Object.entries(grouped)) grouped[name] = terms.toSorted((a, b) => String(a.label).localeCompare(String(b.label)));
|
|
683
|
+
data.terms = grouped;
|
|
684
|
+
const entryId = dataStr(data, "id");
|
|
685
|
+
if (entryId) perEntry.push({
|
|
686
|
+
entryId,
|
|
687
|
+
byTaxonomy: grouped
|
|
688
|
+
});
|
|
689
|
+
}
|
|
690
|
+
const { primeFoldedEntryTerms } = await import("./taxonomies-DRiixp_E.mjs").then((n) => n.u);
|
|
691
|
+
primeFoldedEntryTerms(type, perEntry, { locale });
|
|
692
|
+
return;
|
|
693
|
+
}
|
|
490
694
|
try {
|
|
491
|
-
const { getAllTermsForEntries } = await import("./taxonomies-
|
|
695
|
+
const { getAllTermsForEntries } = await import("./taxonomies-DRiixp_E.mjs").then((n) => n.u);
|
|
492
696
|
const ids = entries.map((entry) => dataStr(entryData(entry), "id")).filter(Boolean);
|
|
493
697
|
if (ids.length === 0) return;
|
|
494
698
|
const termsMap = await getAllTermsForEntries(type, ids, { locale });
|
|
@@ -522,9 +726,9 @@ async function hydrateEntryTerms(type, entries, locale) {
|
|
|
522
726
|
*/
|
|
523
727
|
async function getTranslations(type, id) {
|
|
524
728
|
try {
|
|
525
|
-
const db = (await import("./loader-
|
|
729
|
+
const db = (await import("./loader-CjWqjweO.mjs").then((n) => n.i)).getDb;
|
|
526
730
|
const dbInstance = await db();
|
|
527
|
-
const { ContentRepository } = await import("./content-
|
|
731
|
+
const { ContentRepository } = await import("./content-Bh4BDjv8.mjs").then((n) => n.n);
|
|
528
732
|
const repo = new ContentRepository(dbInstance);
|
|
529
733
|
const item = await repo.findByIdOrSlug(type, id);
|
|
530
734
|
if (!item) return {
|
|
@@ -567,6 +771,7 @@ function patternToRegex(pattern) {
|
|
|
567
771
|
let cachedUrlPatterns = null;
|
|
568
772
|
function invalidateUrlPatternCache() {
|
|
569
773
|
cachedUrlPatterns = null;
|
|
774
|
+
invalidateSchemaObjectCache();
|
|
570
775
|
}
|
|
571
776
|
/**
|
|
572
777
|
* Resolve a URL path to a content entry by matching against collection URL patterns.
|
|
@@ -591,8 +796,8 @@ async function resolveDinewayPath(path) {
|
|
|
591
796
|
const hasDbOverride = !!getRequestContext()?.db;
|
|
592
797
|
let patterns = !hasDbOverride ? cachedUrlPatterns : null;
|
|
593
798
|
if (!patterns) {
|
|
594
|
-
const { getDb } = await import("./loader-
|
|
595
|
-
const { SchemaRegistry } = await import("./registry-
|
|
799
|
+
const { getDb } = await import("./loader-CjWqjweO.mjs").then((n) => n.i);
|
|
800
|
+
const { SchemaRegistry } = await import("./registry-CtyVedcN.mjs").then((n) => n.r);
|
|
596
801
|
patterns = (await new SchemaRegistry(await getDb()).listCollections()).filter((collection) => collection.urlPattern).map((collection) => {
|
|
597
802
|
const { regex, paramNames } = patternToRegex(collection.urlPattern);
|
|
598
803
|
return {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { r as
|
|
2
|
-
import { n as
|
|
3
|
-
import { r as
|
|
1
|
+
import { r as getDb } from "./loader-CjWqjweO.mjs";
|
|
2
|
+
import { n as cachedQuery, t as CacheNamespace } from "./object-cache-D51qOseS.mjs";
|
|
3
|
+
import { r as requestCached } from "./request-cache-D9GQBxMP.mjs";
|
|
4
|
+
import { n as SchemaRegistry } from "./registry-CtyVedcN.mjs";
|
|
4
5
|
|
|
5
6
|
//#region src/schema/query.ts
|
|
6
7
|
/**
|
|
@@ -17,9 +18,13 @@ import { r as getDb } from "./loader-tg63WSY2.mjs";
|
|
|
17
18
|
* ```
|
|
18
19
|
*/
|
|
19
20
|
async function getCollectionInfo(slug) {
|
|
20
|
-
return requestCached(`collection-info:${slug}`,
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
return requestCached(`collection-info:${slug}`, () => cachedQuery({
|
|
22
|
+
namespace: CacheNamespace.SCHEMA,
|
|
23
|
+
key: `collection-info:${slug}`,
|
|
24
|
+
load: async () => {
|
|
25
|
+
return getCollectionInfoWithDb(await getDb(), slug);
|
|
26
|
+
}
|
|
27
|
+
}));
|
|
23
28
|
}
|
|
24
29
|
/**
|
|
25
30
|
* Get collection metadata with an explicit db handle.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { t as apiError } from "./error-
|
|
2
|
-
import { n as normalizeTrustedHeaders } from "./trusted-proxy-
|
|
1
|
+
import { t as apiError } from "./error-CytFlgcd.mjs";
|
|
2
|
+
import { n as normalizeTrustedHeaders } from "./trusted-proxy-DTXQ2IMv.mjs";
|
|
3
3
|
import { sql } from "kysely";
|
|
4
4
|
|
|
5
5
|
//#region src/auth/rate-limit.ts
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { a as currentTimestampValue } from "./dialect-helpers-fk43GbDb.mjs";
|
|
2
|
-
import { i as encodeCursor, r as decodeCursor } from "./types-
|
|
3
|
-
import { i as matchPattern, n as interpolateDestination, r as isPattern, t as compilePattern } from "./patterns-
|
|
2
|
+
import { i as encodeCursor, r as decodeCursor } from "./types-Dq1qT19x.mjs";
|
|
3
|
+
import { i as matchPattern, n as interpolateDestination, r as isPattern, t as compilePattern } from "./patterns-BhAvqO0S.mjs";
|
|
4
4
|
import { sql } from "kysely";
|
|
5
5
|
import { ulid } from "ulidx";
|
|
6
6
|
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { t as OptionsRepository } from "./options-
|
|
2
|
-
import { t as RedirectRepository } from "./redirect-
|
|
3
|
-
import { a as validateDestinationParams, i as matchPattern, n as interpolateDestination, o as validatePattern, r as isPattern, t as compilePattern } from "./patterns-
|
|
4
|
-
import { i as invalidateRedirectCache } from "./cache-
|
|
1
|
+
import { t as OptionsRepository } from "./options-DQPTH5n0.mjs";
|
|
2
|
+
import { t as RedirectRepository } from "./redirect-BAjt4Z6b.mjs";
|
|
3
|
+
import { a as validateDestinationParams, i as matchPattern, n as interpolateDestination, o as validatePattern, r as isPattern, t as compilePattern } from "./patterns-BhAvqO0S.mjs";
|
|
4
|
+
import { i as invalidateRedirectCache } from "./cache-C-FNTFYK.mjs";
|
|
5
|
+
import { n as isTerminalStatus } from "./status-DANd8ERo.mjs";
|
|
5
6
|
|
|
6
7
|
//#region src/redirects/loops.ts
|
|
7
8
|
/**
|
|
@@ -176,7 +177,17 @@ async function handleRedirectList(db, params) {
|
|
|
176
177
|
async function handleRedirectCreate(db, input) {
|
|
177
178
|
try {
|
|
178
179
|
const repo = new RedirectRepository(db);
|
|
179
|
-
|
|
180
|
+
const type = input.type ?? 301;
|
|
181
|
+
const terminal = isTerminalStatus(type);
|
|
182
|
+
const destination = terminal ? "" : input.destination ?? "";
|
|
183
|
+
if (!terminal && !destination) return {
|
|
184
|
+
success: false,
|
|
185
|
+
error: {
|
|
186
|
+
code: "VALIDATION_ERROR",
|
|
187
|
+
message: "destination is required for redirect types"
|
|
188
|
+
}
|
|
189
|
+
};
|
|
190
|
+
if (!terminal && input.source === destination) return {
|
|
180
191
|
success: false,
|
|
181
192
|
error: {
|
|
182
193
|
code: "VALIDATION_ERROR",
|
|
@@ -193,14 +204,16 @@ async function handleRedirectCreate(db, input) {
|
|
|
193
204
|
message: `Invalid source pattern: ${patternError}`
|
|
194
205
|
}
|
|
195
206
|
};
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
207
|
+
if (!terminal) {
|
|
208
|
+
const destError = validateDestinationParams(input.source, destination);
|
|
209
|
+
if (destError) return {
|
|
210
|
+
success: false,
|
|
211
|
+
error: {
|
|
212
|
+
code: "VALIDATION_ERROR",
|
|
213
|
+
message: destError
|
|
214
|
+
}
|
|
215
|
+
};
|
|
216
|
+
}
|
|
204
217
|
}
|
|
205
218
|
if (await repo.findBySource(input.source)) return {
|
|
206
219
|
success: false,
|
|
@@ -209,14 +222,14 @@ async function handleRedirectCreate(db, input) {
|
|
|
209
222
|
message: `A redirect from "${input.source}" already exists`
|
|
210
223
|
}
|
|
211
224
|
};
|
|
212
|
-
if (input.enabled !== false) {
|
|
213
|
-
const loopPath = wouldCreateLoop(input.source,
|
|
225
|
+
if (!terminal && input.enabled !== false) {
|
|
226
|
+
const loopPath = wouldCreateLoop(input.source, destination, toEdges(await repo.findAllEnabled()));
|
|
214
227
|
if (loopPath) return loopError(loopPath);
|
|
215
228
|
}
|
|
216
229
|
const redirect = await repo.create({
|
|
217
230
|
source: input.source,
|
|
218
|
-
destination
|
|
219
|
-
type
|
|
231
|
+
destination,
|
|
232
|
+
type,
|
|
220
233
|
isPattern: sourceIsPattern,
|
|
221
234
|
enabled: input.enabled ?? true,
|
|
222
235
|
groupName: input.groupName ?? null
|
|
@@ -279,8 +292,17 @@ async function handleRedirectUpdate(db, id, input) {
|
|
|
279
292
|
}
|
|
280
293
|
};
|
|
281
294
|
const newSource = input.source ?? existing.source;
|
|
282
|
-
const
|
|
283
|
-
|
|
295
|
+
const newType = input.type ?? existing.type;
|
|
296
|
+
const terminal = isTerminalStatus(newType);
|
|
297
|
+
const newDest = terminal ? "" : input.destination ?? existing.destination;
|
|
298
|
+
if (!terminal && !newDest) return {
|
|
299
|
+
success: false,
|
|
300
|
+
error: {
|
|
301
|
+
code: "VALIDATION_ERROR",
|
|
302
|
+
message: "destination is required for redirect types"
|
|
303
|
+
}
|
|
304
|
+
};
|
|
305
|
+
if (!terminal && newSource === newDest) return {
|
|
284
306
|
success: false,
|
|
285
307
|
error: {
|
|
286
308
|
code: "VALIDATION_ERROR",
|
|
@@ -307,7 +329,7 @@ async function handleRedirectUpdate(db, id, input) {
|
|
|
307
329
|
}
|
|
308
330
|
};
|
|
309
331
|
}
|
|
310
|
-
if (isPattern(newSource)) {
|
|
332
|
+
if (!terminal && isPattern(newSource)) {
|
|
311
333
|
const destError = validateDestinationParams(newSource, newDest);
|
|
312
334
|
if (destError) return {
|
|
313
335
|
success: false,
|
|
@@ -317,14 +339,15 @@ async function handleRedirectUpdate(db, id, input) {
|
|
|
317
339
|
}
|
|
318
340
|
};
|
|
319
341
|
}
|
|
320
|
-
|
|
342
|
+
const newEnabled = input.enabled ?? existing.enabled;
|
|
343
|
+
if (!terminal && newEnabled && (input.source !== void 0 || input.destination !== void 0 || input.type !== void 0 || input.enabled === true && !existing.enabled)) {
|
|
321
344
|
const loopPath = wouldCreateLoop(newSource, newDest, toEdges(await repo.findAllEnabled()), id);
|
|
322
345
|
if (loopPath) return loopError(loopPath);
|
|
323
346
|
}
|
|
324
347
|
const updated = await repo.update(id, {
|
|
325
348
|
source: input.source,
|
|
326
|
-
destination: input.destination,
|
|
327
|
-
type:
|
|
349
|
+
destination: terminal ? "" : input.destination,
|
|
350
|
+
type: newType,
|
|
328
351
|
enabled: input.enabled,
|
|
329
352
|
groupName: input.groupName
|
|
330
353
|
});
|
|
@@ -390,7 +413,7 @@ function loopError(loopPath) {
|
|
|
390
413
|
};
|
|
391
414
|
}
|
|
392
415
|
function toEdges(redirects) {
|
|
393
|
-
return redirects.map((redirect) => ({
|
|
416
|
+
return redirects.filter((redirect) => !isTerminalStatus(redirect.type)).map((redirect) => ({
|
|
394
417
|
id: redirect.id,
|
|
395
418
|
source: redirect.source,
|
|
396
419
|
destination: redirect.destination,
|