dineway 0.2.40 → 0.2.42
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-LXZdjKwI.mjs → activity-BuhkMdv8.mjs} +2 -2
- package/dist/{activity-events-DoqeOM8x.mjs → activity-events-DkHsy7Y0.mjs} +1 -1
- package/dist/{allowed-origins-B4zstd2d.mjs → allowed-origins-DASdFW-l.mjs} +1 -1
- package/dist/api/route-utils.d.mts +15 -12
- package/dist/api/route-utils.mjs +27 -20
- package/dist/api/schemas/index.d.mts +1 -1
- package/dist/api/schemas/index.mjs +10 -5
- package/dist/{api-CQishNjZ.mjs → api-BBXfpMJw.mjs} +41 -13
- package/dist/{api-tokens-CNHnKO57.mjs → api-tokens-ciHNTdN2.mjs} +1 -1
- package/dist/{apply-D4rZHDyg.mjs → apply-CZDKUvZ4.mjs} +62 -18
- package/dist/astro/index.d.mts +16 -13
- package/dist/astro/index.mjs +31 -5
- package/dist/astro/middleware/auth.d.mts +14 -11
- package/dist/astro/middleware/auth.mjs +8 -8
- package/dist/astro/middleware/redirect.mjs +10 -6
- package/dist/astro/middleware/request-context.mjs +5 -5
- 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.d.mts +2 -2
- package/dist/astro/middleware.mjs +266 -176
- package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +12 -7
- package/dist/astro/routes/api/admin/allowed-domains/index.mjs +12 -7
- package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +4 -4
- package/dist/astro/routes/api/admin/api-tokens/index.mjs +7 -7
- package/dist/astro/routes/api/admin/briefing.mjs +41 -22
- package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +4 -4
- package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +14 -10
- package/dist/astro/routes/api/admin/byline-fields/index.mjs +14 -10
- package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +14 -10
- package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +25 -19
- package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +25 -19
- package/dist/astro/routes/api/admin/bylines/index.mjs +25 -19
- package/dist/astro/routes/api/admin/comments/_id_/status.mjs +20 -16
- package/dist/astro/routes/api/admin/comments/_id_.mjs +10 -7
- package/dist/astro/routes/api/admin/comments/bulk.mjs +18 -13
- package/dist/astro/routes/api/admin/comments/counts.mjs +10 -7
- package/dist/astro/routes/api/admin/comments/index.mjs +18 -13
- package/dist/astro/routes/api/admin/context/_id_/history.mjs +51 -39
- package/dist/astro/routes/api/admin/context/_id_/index.mjs +51 -39
- package/dist/astro/routes/api/admin/context/_id_/review.mjs +57 -44
- package/dist/astro/routes/api/admin/context/_id_/supersede.mjs +57 -44
- package/dist/astro/routes/api/admin/context/diff.mjs +56 -43
- package/dist/astro/routes/api/admin/context/index.mjs +57 -44
- package/dist/astro/routes/api/admin/context/stale.mjs +56 -43
- package/dist/astro/routes/api/admin/hitl-requests/_id_/index.mjs +51 -39
- package/dist/astro/routes/api/admin/hitl-requests/_id_/resolve.mjs +56 -43
- package/dist/astro/routes/api/admin/hitl-requests/index.mjs +56 -43
- package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +52 -40
- package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +3 -3
- package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +7 -7
- package/dist/astro/routes/api/admin/oauth-clients/index.mjs +7 -7
- package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +78 -68
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +78 -68
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +71 -60
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +78 -67
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +78 -67
- package/dist/astro/routes/api/admin/plugins/index.mjs +71 -60
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +2 -2
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +71 -60
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +78 -67
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +71 -60
- package/dist/astro/routes/api/admin/plugins/updates.mjs +71 -60
- package/dist/astro/routes/api/admin/review-requests/_id_/image.mjs +38 -23
- package/dist/astro/routes/api/admin/review-requests/_id_/index.mjs +46 -36
- package/dist/astro/routes/api/admin/review-requests/_id_/resolve.mjs +63 -52
- package/dist/astro/routes/api/admin/review-requests/_id_/revoke.mjs +9 -9
- package/dist/astro/routes/api/admin/review-requests/index.mjs +61 -50
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +71 -60
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +2 -2
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +71 -60
- package/dist/astro/routes/api/admin/users/_id_/disable.mjs +1 -1
- package/dist/astro/routes/api/admin/users/_id_/enable.mjs +1 -1
- package/dist/astro/routes/api/admin/users/_id_/index.mjs +11 -7
- package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +3 -3
- package/dist/astro/routes/api/admin/users/index.mjs +12 -7
- package/dist/astro/routes/api/auth/dev-bypass.mjs +4 -4
- package/dist/astro/routes/api/auth/invite/accept.mjs +1 -1
- package/dist/astro/routes/api/auth/invite/complete.mjs +17 -12
- package/dist/astro/routes/api/auth/invite/index.mjs +14 -9
- package/dist/astro/routes/api/auth/invite/register-options.mjs +16 -11
- package/dist/astro/routes/api/auth/logout.mjs +2 -2
- package/dist/astro/routes/api/auth/magic-link/send.mjs +17 -12
- package/dist/astro/routes/api/auth/magic-link/verify.mjs +2 -2
- package/dist/astro/routes/api/auth/me.mjs +14 -11
- 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 +3 -3
- package/dist/astro/routes/api/auth/passkey/_id_.mjs +12 -7
- package/dist/astro/routes/api/auth/passkey/index.mjs +1 -1
- package/dist/astro/routes/api/auth/passkey/options.mjs +19 -14
- package/dist/astro/routes/api/auth/passkey/register/options.mjs +16 -11
- package/dist/astro/routes/api/auth/passkey/register/verify.mjs +17 -12
- package/dist/astro/routes/api/auth/passkey/verify.mjs +17 -12
- 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 +17 -12
- package/dist/astro/routes/api/auth/signup/request.mjs +17 -12
- package/dist/astro/routes/api/auth/signup/verify.mjs +1 -1
- package/dist/astro/routes/api/comments/_collection_/_contentId_/index.d.mts +14 -11
- package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +23 -19
- package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +23 -18
- package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +8 -8
- package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +8 -8
- package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +8 -8
- package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +25 -20
- package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +41 -31
- package/dist/astro/routes/api/content/_collection_/_id_/release-readiness.mjs +14 -9
- package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +8 -8
- package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +41 -31
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +30 -20
- package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +8 -8
- package/dist/astro/routes/api/content/_collection_/_id_.mjs +25 -14
- package/dist/astro/routes/api/content/_collection_/authors.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/index.mjs +25 -14
- package/dist/astro/routes/api/content/_collection_/trash.mjs +13 -8
- package/dist/astro/routes/api/dashboard.mjs +21 -13
- 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 +30 -23
- package/dist/astro/routes/api/import/wordpress/analyze.mjs +13 -10
- package/dist/astro/routes/api/import/wordpress/execute.d.mts +14 -11
- package/dist/astro/routes/api/import/wordpress/execute.mjs +58 -47
- package/dist/astro/routes/api/import/wordpress/media.d.mts +14 -11
- package/dist/astro/routes/api/import/wordpress/media.mjs +17 -14
- package/dist/astro/routes/api/import/wordpress/prepare.mjs +61 -48
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +15 -12
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +58 -45
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +32 -26
- package/dist/astro/routes/api/import/wordpress-plugin/callback.mjs +1 -1
- package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +14 -11
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +63 -52
- package/dist/astro/routes/api/integration/artifact.mjs +9 -9
- package/dist/astro/routes/api/integration/dispatch.mjs +14 -14
- package/dist/astro/routes/api/integrations/_provider_.mjs +9 -9
- package/dist/astro/routes/api/integrations/index.mjs +8 -8
- package/dist/astro/routes/api/manifest.mjs +5 -5
- package/dist/astro/routes/api/mcp.mjs +141 -93
- package/dist/astro/routes/api/media/_id_/confirm.mjs +15 -12
- package/dist/astro/routes/api/media/_id_.mjs +14 -9
- 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 +16 -13
- package/dist/astro/routes/api/media.mjs +19 -16
- package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +57 -44
- package/dist/astro/routes/api/menus/_name_/items.mjs +57 -44
- package/dist/astro/routes/api/menus/_name_/reorder.mjs +57 -44
- package/dist/astro/routes/api/menus/_name_/translations.mjs +57 -44
- package/dist/astro/routes/api/menus/_name_.mjs +57 -44
- package/dist/astro/routes/api/menus/index.mjs +57 -44
- package/dist/astro/routes/api/oauth/authorize.mjs +7 -7
- package/dist/astro/routes/api/oauth/device/authorize.mjs +5 -5
- 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 +5 -5
- package/dist/astro/routes/api/oauth/token/revoke.mjs +5 -5
- package/dist/astro/routes/api/oauth/token.mjs +6 -6
- package/dist/astro/routes/api/openapi.json.mjs +10 -5
- package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +4 -4
- package/dist/astro/routes/api/redirects/404s/index.mjs +15 -13
- package/dist/astro/routes/api/redirects/404s/summary.mjs +15 -13
- package/dist/astro/routes/api/redirects/_id_.mjs +57 -44
- package/dist/astro/routes/api/redirects/index.mjs +57 -44
- 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 +73 -62
- package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +73 -62
- package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +73 -62
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +73 -62
- package/dist/astro/routes/api/schema/collections/index.mjs +73 -62
- package/dist/astro/routes/api/schema/index.mjs +13 -10
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs +71 -60
- package/dist/astro/routes/api/schema/orphans/index.mjs +71 -60
- package/dist/astro/routes/api/search/enable.mjs +20 -13
- package/dist/astro/routes/api/search/index.mjs +19 -12
- package/dist/astro/routes/api/search/rebuild.mjs +20 -13
- package/dist/astro/routes/api/search/stats.mjs +12 -7
- package/dist/astro/routes/api/search/suggest.mjs +19 -12
- package/dist/astro/routes/api/sections/_slug_.mjs +57 -44
- package/dist/astro/routes/api/sections/index.mjs +57 -44
- package/dist/astro/routes/api/settings/email.mjs +5 -5
- package/dist/astro/routes/api/settings/reviews.mjs +11 -11
- package/dist/astro/routes/api/settings.mjs +57 -44
- package/dist/astro/routes/api/setup/admin-verify.mjs +19 -14
- package/dist/astro/routes/api/setup/admin.mjs +17 -12
- package/dist/astro/routes/api/setup/dev-bypass.mjs +44 -32
- package/dist/astro/routes/api/setup/dev-reset.mjs +2 -2
- package/dist/astro/routes/api/setup/index.mjs +47 -34
- package/dist/astro/routes/api/setup/status.mjs +3 -3
- package/dist/astro/routes/api/snapshot.mjs +9 -9
- package/dist/astro/routes/api/system/heartbeat.mjs +2 -2
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +60 -47
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +60 -47
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +60 -47
- package/dist/astro/routes/api/taxonomies/index.mjs +60 -47
- package/dist/astro/routes/api/themes/preview.mjs +7 -7
- 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 +56 -43
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +57 -44
- package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +57 -44
- package/dist/astro/routes/api/widget-areas/_name_.mjs +53 -41
- package/dist/astro/routes/api/widget-areas/index.mjs +57 -44
- package/dist/astro/routes/api/widget-components.mjs +2 -2
- package/dist/astro/routes/robots.txt.mjs +14 -9
- package/dist/astro/routes/sitemap-_collection_.xml.mjs +20 -16
- package/dist/astro/routes/sitemap.xml.mjs +19 -15
- package/dist/astro/session-driver.d.mts +1 -1
- package/dist/astro/session-driver.mjs +8 -3
- package/dist/astro/types.d.mts +21 -14
- package/dist/{atomic-authority-CnBQJ14T.mjs → atomic-authority-Bf5QZboB.mjs} +2 -2
- package/dist/{audit-Cl495Ze3.mjs → audit-hXJBTPY0.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-DbjgJdlo.mjs → auth-control-guard-DpUP6Fs_.mjs} +1 -1
- package/dist/{authorize-DDmgmnW-.mjs → authorize-DWNOqMKq.mjs} +1 -1
- package/dist/{briefing-DsD-Ouwc.mjs → briefing-BShyAm_Z.mjs} +1 -1
- package/dist/{briefing-COw-WcYz.mjs → briefing-CaeEFvkD.mjs} +995 -7
- package/dist/{bundle-bhiszAui.mjs → bundle-DWn5eFKz.mjs} +2 -2
- package/dist/{byline-fields-D-b9CWux.d.mts → byline-fields-B7pQ3LMi.d.mts} +14 -10
- package/dist/{byline-fields-BKj5f3Ub.mjs → byline-fields-DRMCc0V_.mjs} +1 -1
- package/dist/{byline-fields-DZ46DF10.mjs → byline-fields-wWu2Cb3l.mjs} +3 -3
- package/dist/{byline-registry-CJihchD1.mjs → byline-registry-Caj0_gbU.mjs} +1 -1
- package/dist/{byline-TYk2kad6.mjs → byline-uuVB2B3E.mjs} +65 -14
- package/dist/{bylines-6T9iVC9j.mjs → bylines-PLlsL31L.mjs} +3 -3
- package/dist/{bylines-CvTSCAw9.mjs → bylines-XGlNK0Lo.mjs} +5 -5
- package/dist/{patterns-Ay-4KImK.mjs → cache-DsEbwFVE.mjs} +51 -1
- package/dist/{chunks-C8vSD_5L.mjs → chunks-Bb56aCtB.mjs} +1 -1
- package/dist/cli/index.mjs +486 -48
- package/dist/cli/plugin-kit.d.mts +14 -11
- package/dist/cli/plugin-kit.mjs +2 -2
- package/dist/client/external-auth-headers.d.mts +1 -1
- package/dist/client/index.d.mts +16 -13
- package/dist/client/index.mjs +2 -2
- package/dist/{client-factory-C1ZQCMog.mjs → client-factory-BLbm250o.mjs} +1 -1
- package/dist/{comment-DAQfUjqt.mjs → comment-BWDG1nQm.mjs} +2 -2
- package/dist/{comment-reaction-Dp3G7UZc.mjs → comment-reaction-B7pLTlQ7.mjs} +1 -1
- package/dist/{comments-BrvIaRAx.mjs → comments-xkten8nV.mjs} +1 -1
- package/dist/config-6R0bchVE.mjs +125 -0
- package/dist/{content-CIKsrvU9.mjs → content-BNeuaVCS.mjs} +302 -45
- package/dist/content-Dr22fzA_.mjs +390 -0
- package/dist/{content-refresh-BilzqcLt.mjs → content-refresh-D7wpVFJ_.mjs} +14 -8
- package/dist/content-storage/index.d.mts +193 -0
- package/dist/content-storage/index.mjs +29 -0
- package/dist/content-storage/store.d.mts +3 -0
- package/dist/content-storage/store.mjs +5 -0
- package/dist/{review-payload-Bap86e75.mjs → content-write-43KZZ7dz.mjs} +838 -131
- package/dist/{context-DAs_MZjJ.mjs → context-Cjz0y4Al.mjs} +292 -23
- package/dist/{context-DVTvucNb.mjs → context-DuYXPlfZ.mjs} +2 -2
- package/dist/{context-route-helpers-BP-UJ4u8.mjs → context-route-helpers-TP3EqxRQ.mjs} +2 -2
- package/dist/{dashboard-BAjWCGCP.mjs → dashboard-BquGX1ue.mjs} +4 -4
- package/dist/database/batch.d.mts +1 -1
- package/dist/database/batch.mjs +1 -1
- package/dist/database/d1/index.d.mts +14 -11
- package/dist/database/d1/index.mjs +4 -4
- package/dist/database/instrumentation.mjs +3 -2
- 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-Dh0rNlh1.mjs → device-flow-SoZh-HvN.mjs} +3 -3
- package/dist/{discovery-V0e0Gg8j.mjs → discovery-BwCZFUXm.mjs} +4 -4
- package/dist/{enrich-B7PIJ8Iy.mjs → enrich-CAMsD1aT.mjs} +1 -1
- package/dist/{error-B5a45Tfb.mjs → error-sL4aemcW.mjs} +2 -0
- package/dist/{evidence-Vnp_fQbC.mjs → evidence-1Gr8TlTf.mjs} +7 -7
- package/dist/{field-defs-cache-aXUeXJdC.mjs → field-defs-cache-dn5Tw79A.mjs} +4 -4
- package/dist/{fts-manager-BrPpYtK0.mjs → fts-manager-Zu5ITic0.mjs} +1 -1
- package/dist/{hitl-requests-BxMMON3s.mjs → hitl-requests-Bdab4DhO.mjs} +2 -2
- package/dist/{hitl-route-helpers-sdnjpx2k.mjs → hitl-route-helpers-DGMLQajA.mjs} +5 -5
- package/dist/hook-events-BQw73jc7.d.mts +32 -0
- package/dist/{import-C2-v4FCs.mjs → import-DJFlvQey.mjs} +9 -9
- package/dist/{index-BVGe04wF.d.mts → index-CLj17kW9.d.mts} +12 -5
- package/dist/index.d.mts +19 -16
- package/dist/index.mjs +107 -98
- package/dist/{integration-credentials-DMEXZU2J.mjs → integration-credentials-DpuRw1kx.mjs} +2 -2
- package/dist/{jsonld-wRF85RXo.d.mts → jsonld-CPijKSUe.d.mts} +2 -2
- package/dist/{load-DvCVppOF.mjs → load-CiRTddkJ.mjs} +1 -1
- package/dist/{loader-Dp6zLmQm.mjs → loader-Bq1aW12P.mjs} +16 -5
- package/dist/{manifest-schema-CCvogfrP.mjs → manifest-schema-DaQpgyTB.mjs} +1 -1
- package/dist/{mcp-reviewed-executor-B8Gbin3T.mjs → mcp-reviewed-executor-DtTnFcqC.mjs} +6 -6
- package/dist/media/image-endpoint.mjs +1 -1
- package/dist/media/index.d.mts +1 -1
- package/dist/media/index.mjs +2 -2
- package/dist/media/local-runtime.d.mts +16 -13
- package/dist/media/local-runtime.mjs +3 -3
- package/dist/{media-C5ba8fvI.mjs → media-BjH5OD-A.mjs} +1 -1
- package/dist/{media-allowlist-DQvscVkS.mjs → media-allowlist-C8HJ2O61.mjs} +1 -1
- package/dist/{menus-w5xwT-f5.mjs → menus-BXkfzNR1.mjs} +7 -7
- package/dist/{menus-CyNpBQrX.mjs → menus-CbBi7Ad7.mjs} +2 -2
- package/dist/migration-D9OY6vI9.mjs +526 -0
- package/dist/{migrations-CLlX25HO.mjs → migrations-BAjF60cl.mjs} +1 -1
- package/dist/{oauth-authorization-CdqJZUMf.mjs → oauth-authorization-CSSRMOKn.mjs} +4 -4
- package/dist/{oauth-clients-CHNb9MAZ.mjs → oauth-clients-DX5HIJJv.mjs} +2 -2
- package/dist/object-cache/memory.d.mts +1 -1
- package/dist/{object-cache-mxCW-Rpt.mjs → object-cache-DyI1SOBK.mjs} +3 -1
- package/dist/owned-metadata-C99DzQuq.mjs +69 -0
- package/dist/page/index.d.mts +15 -12
- package/dist/page/index.mjs +1 -1
- package/dist/{parse-THHCpJLB.mjs → parse-C6kCR1OT.mjs} +1 -1
- package/dist/plugin-utils.d.mts +14 -11
- package/dist/plugins/adapt-sandbox-entry.d.mts +14 -11
- package/dist/plugins/adapt-sandbox-entry.mjs +1 -1
- package/dist/{plugins-pfraURNp.mjs → plugins-LtyuDuIb.mjs} +16 -962
- package/dist/{policy-D2USlibj.mjs → policy-Drg5yr1-.mjs} +2 -2
- package/dist/{preview-Bh7D7F27.mjs → preview-CWiIjMDi.mjs} +2 -2
- package/dist/{provider-loader-DT7vQ5FI.d.mts → provider-loader-oLKm1AU8.d.mts} +1 -1
- package/dist/{public-url-Ccv0Xmue.d.mts → public-url-CEC1vj02.d.mts} +2 -2
- package/dist/{public-url-CG5YbNqB.d.mts → public-url-cMnsBUZB.d.mts} +1 -1
- package/dist/{publication-authorization-B_HJSnzR.mjs → publication-authorization-CJ4Jr5Hg.mjs} +43 -17
- package/dist/{query-xspvw7Ui.mjs → query-CLWTwcTr.mjs} +14 -14
- package/dist/{query-DLeahg3x.mjs → query-CP9M8xxX.mjs} +4 -4
- package/dist/{rate-limit-BsBr_U9g.mjs → rate-limit-DeVLLe4z.mjs} +2 -2
- package/dist/{redirect-BQFa1THe.mjs → redirect-CJ-FAbNK.mjs} +2 -2
- package/dist/{redirects-DJcsgz_X.mjs → redirects-BKi6mek4.mjs} +4 -5
- package/dist/{redirects-CVfxefrz.mjs → redirects-I78-ZYLV.mjs} +5 -386
- package/dist/{registry-Dclv9iHv.mjs → registry-B-HULaJI.mjs} +7 -7
- package/dist/{release-Da2UFygt.mjs → release-D615eKav.mjs} +173 -22
- package/dist/request-context.d.mts +30 -0
- package/dist/{request-meta-CjORiJQ_.mjs → request-meta-DZYuLXx_.mjs} +1 -1
- package/dist/review-payload-Bhi52CbI.mjs +112 -0
- package/dist/{review-requests-CcSUTm_l.mjs → review-requests-CGQ1u7uY.mjs} +2 -2
- package/dist/{review-requests-CUVn0RBl.mjs → review-requests-DZYM51yI.mjs} +2 -2
- package/dist/{review-route-helpers-CKBfGKCi.mjs → review-route-helpers-DXNDyx_q.mjs} +2 -2
- package/dist/{revision-W6FDfDqx.mjs → revision-DlxUfOD5.mjs} +42 -7
- package/dist/revisions-qNkae-Dq.mjs +57 -0
- package/dist/{revocation-C_ZQvGRT.mjs → revocation-4we8kfBg.mjs} +2 -2
- package/dist/{runner-CRU7BXjr.mjs → runner-CuG8o1uW.mjs} +558 -487
- package/dist/{runner-SoP1rphP.d.mts → runner-DXQkyPeX.d.mts} +1 -1
- package/dist/{runs-BtaAiLTw.mjs → runs-BjgLfqCn.mjs} +5 -5
- package/dist/runtime-Bs2JMbb2.d.mts +45 -0
- package/dist/runtime-Ch5G-tnG.mjs +400 -0
- package/dist/runtime.d.mts +15 -12
- package/dist/runtime.mjs +9 -4
- package/dist/schema-DVeOJpqA.mjs +8 -0
- package/dist/{search-BI9uKr7U.mjs → search-zMoM2_uq.mjs} +4 -98
- package/dist/{secrets-D_pergcD.mjs → secrets-CIYcw9T9.mjs} +4 -4
- package/dist/{sections-BqqYq9RW.mjs → sections-BtO0Zdv5.mjs} +2 -2
- package/dist/seed/index.d.mts +2 -2
- package/dist/seed/index.mjs +38 -26
- package/dist/seo/index.d.mts +3 -3
- package/dist/seo/index.mjs +12 -9
- package/dist/{seo-B-5PsaJO.mjs → seo-DwcULb78.mjs} +1 -1
- package/dist/{seo-Bs_DUxJf.mjs → seo-uliFa7s-.mjs} +44 -5
- package/dist/{service-W2xuGLgw.mjs → service-BBJM08uD.mjs} +2 -2
- package/dist/{service-B65aJsN7.mjs → service-CkMuD5AE.mjs} +3 -3
- package/dist/{settings-CyJ2-MKx.mjs → settings-D31Y4msD.mjs} +2 -2
- package/dist/{settings-DsBzKeUQ.mjs → settings-DDOB3gW1.mjs} +7 -7
- package/dist/{setup-complete-t9yamqBb.mjs → setup-complete-5GxB7hiF.mjs} +1 -1
- package/dist/{site-activity-DU0UPDji.mjs → site-activity-hpfJkmxQ.mjs} +1 -1
- package/dist/{site-context-Dic2jHuw.mjs → site-context-D3AmDdpQ.mjs} +15 -15
- package/dist/{site-url-Tw6CfBB2.mjs → site-url-CYatfe3q.mjs} +1 -1
- package/dist/{state-jx6Yiwsm.mjs → state-ClG1I4wl.mjs} +1 -1
- package/dist/storage/local.d.mts +1 -1
- package/dist/storage/local.mjs +1 -1
- package/dist/storage/s3.d.mts +1 -1
- package/dist/storage/s3.mjs +2 -2
- package/dist/{store-32e6dfD-.mjs → store-BzaAtszy.mjs} +3 -3
- package/dist/submission-DgLES24O.mjs +205 -0
- package/dist/{taxonomies-BFsUR7kc.mjs → taxonomies-B4hE8Yb3.mjs} +3 -3
- package/dist/{taxonomies-lWGNLKgn.mjs → taxonomies-BI26Bk-M.mjs} +7 -7
- package/dist/{taxonomy-DN6i1upz.mjs → taxonomy-B8w8F2Cs.mjs} +53 -3
- package/dist/terms-EskuqbKE.mjs +104 -0
- package/dist/text-extraction-CdqMGYQK.mjs +96 -0
- package/dist/{tokens-D-StaTAQ.mjs → tokens-D8HEH277.mjs} +1 -1
- package/dist/{trusted-proxy-hYufGFPK.mjs → trusted-proxy-Dg3U9Lrv.mjs} +1 -1
- package/dist/{types-D5JfvPvx.d.mts → types-0gRlZbhN.d.mts} +88 -32
- package/dist/{types-RFzE_V1M.mjs → types-BI3ULB3A.mjs} +2 -2
- package/dist/{types-B--VyN3n.d.mts → types-Dpv_MvwZ.d.mts} +1 -1
- package/dist/{types-CgcOeaiQ.d.mts → types-ex-UrNlz.d.mts} +1 -1
- package/dist/types-qOEot0UQ.d.mts +83 -0
- package/dist/ui/server-runtime.d.mts +18 -15
- package/dist/ui/server-runtime.mjs +29 -25
- package/dist/{user-Btai9rl3.mjs → user-Bl2_8rhJ.mjs} +2 -2
- package/dist/{utils-CYxGuO_P.mjs → utils-CklSLz9F.mjs} +2 -2
- package/dist/{validate-C05z0m7M.mjs → validate-C-yk7mmX.mjs} +3 -3
- package/dist/{validate-kmN2lS8H.d.mts → validate-DUscf6VG.d.mts} +3 -3
- package/dist/version-Co258u70.mjs +6 -0
- package/dist/version-store-BXv2D0de.mjs +208 -0
- package/dist/version-store-B_THJCc0.d.mts +98 -0
- package/dist/{widgets-BOrDZdQ3.mjs → widgets-B99mnftw.mjs} +3 -3
- package/dist/{wordpress-slugs-ROzITIBK.mjs → wordpress-slugs-yaeD7cxn.mjs} +1 -1
- package/dist/{worker-CKU70ODm.mjs → worker-DdI-KtvF.mjs} +10 -10
- package/dist/write-intent-DuHVqks9.mjs +108 -0
- package/dist/{zod-generator-DkrWuID7.mjs → zod-generator-B5Pt8fv0.mjs} +2 -2
- package/package.json +16 -4
- package/dist/cache-B5NSHhxG.mjs +0 -52
- package/dist/cron-C7HCJPPl.mjs +0 -271
- package/dist/schema-CosVhHJt.mjs +0 -8
- package/dist/submission-DJmRejGR.mjs +0 -411
- package/dist/version-CISd4wX_.mjs +0 -6
- /package/dist/{actor-DxUAJgQX.mjs → actor-D0AW80ld.mjs} +0 -0
- /package/dist/{adapter-symbols-Bq3JsWGM.d.mts → adapter-symbols-B9mi-BUh.d.mts} +0 -0
- /package/dist/{adapters-C8nRpUuj.d.mts → adapters-lDnJjNDz.d.mts} +0 -0
- /package/dist/{api-tokens-0N3nafqZ.mjs → api-tokens-CdfsE9PL.mjs} +0 -0
- /package/dist/{base64-Cz-aU0X1.mjs → base64-qvSs0Gxy.mjs} +0 -0
- /package/dist/{challenge-store-DFGsDtCj.mjs → challenge-store-Dq5HiMO3.mjs} +0 -0
- /package/dist/{components-rFN8NH3N.mjs → components-JA6tFHmE.mjs} +0 -0
- /package/dist/{context-types-CPWAJRs5.mjs → context-types-DDIJhGLs.mjs} +0 -0
- /package/dist/{default-BS6VQRkB.mjs → default-C2azCFSB.mjs} +0 -0
- /package/dist/{email-console-GqK6hgMJ.mjs → email-console-BYQp_5Qr.mjs} +0 -0
- /package/dist/{escape-CE7xOWzJ.mjs → escape-4_NNa6GR.mjs} +0 -0
- /package/dist/{experimental-workflows-BbxpWwBy.mjs → experimental-workflows-CPNiI2EL.mjs} +0 -0
- /package/dist/{forgeway-account-DcTxh3Gw.mjs → forgeway-account-7N-3srH-.mjs} +0 -0
- /package/dist/{hash-D2Rqd2J2.mjs → hash-qSYPMJ8w.mjs} +0 -0
- /package/dist/{media-url-D9kdpoLS.mjs → media-url-D5E1a47B.mjs} +0 -0
- /package/dist/{mime-BnVhH671.mjs → mime-FkfazULS.mjs} +0 -0
- /package/dist/{mode-BJwb_MgK.mjs → mode-B_m1BGFh.mjs} +0 -0
- /package/dist/{normalize-aTwryvvi.mjs → normalize-DrmlLn40.mjs} +0 -0
- /package/dist/{oauth-authority-P5YMSk2z.mjs → oauth-authority-DVlLFhsZ.mjs} +0 -0
- /package/dist/{oauth-state-store-CMqLdo4I.mjs → oauth-state-store-nf-78RbK.mjs} +0 -0
- /package/dist/{options-JiLWB6Bt.mjs → options-yFkLUuTw.mjs} +0 -0
- /package/dist/{output-7HDrYTSQ.mjs → output-B1GiXeT8.mjs} +0 -0
- /package/dist/{parser-kettsjWc.mjs → parser-CTlxybRo.mjs} +0 -0
- /package/dist/{passkey-config-DVzQ3dv3.mjs → passkey-config-BLon3ct9.mjs} +0 -0
- /package/dist/{placeholder-DJLP_HY7.d.mts → placeholder-DdZV3I8x.d.mts} +0 -0
- /package/dist/{portable-text-BE7nszX6.d.mts → portable-text-HNmwL-7L.d.mts} +0 -0
- /package/dist/{portable-text-tQhvPLf1.mjs → portable-text-p0Ojfpfo.mjs} +0 -0
- /package/dist/{process-cache-C19OA3am.mjs → process-cache-CMy5M80h.mjs} +0 -0
- /package/dist/{provider-loader-DERzBMUz.mjs → provider-loader-DlaT1usE.mjs} +0 -0
- /package/dist/{public-discovery-BGyhuD5U.mjs → public-discovery-BnqYofSK.mjs} +0 -0
- /package/dist/{public-url-DFXUU6Wp.mjs → public-url-BHjYWuaN.mjs} +0 -0
- /package/dist/{public-url-sR8SVmTt.mjs → public-url-GQygrYmg.mjs} +0 -0
- /package/dist/{redirect-BxacnBYL.mjs → redirect-CokmLN5o.mjs} +0 -0
- /package/dist/{request-cache-8_ifFzVw.mjs → request-cache-CizvDoxV.mjs} +0 -0
- /package/dist/{resolve-DEKC4qVa.mjs → resolve-BxFGSKYu.mjs} +0 -0
- /package/dist/{runtime-env-CPTzh0mZ.mjs → runtime-env-DpYGy4pT.mjs} +0 -0
- /package/dist/{scheduled-publish-BxdShRGs.d.mts → scheduled-publish-eCNGpvNm.d.mts} +0 -0
- /package/dist/{seo-contributions-LEFs1d7w.mjs → seo-contributions-ZKqrqsdT.mjs} +0 -0
- /package/dist/{service-kQ5ljRzX.mjs → service-DeX1PRNt.mjs} +0 -0
- /package/dist/{session-user-B8yYh0g5.mjs → session-user-B0XMp1GC.mjs} +0 -0
- /package/dist/{setup-nonce-B6A5Y1ea.mjs → setup-nonce-B9IO7PbK.mjs} +0 -0
- /package/dist/{sidecar-client-BwPhhz-F.mjs → sidecar-client-2hx5G46s.mjs} +0 -0
- /package/dist/{slugify-kD31VIv2.mjs → slugify-DvoaEPtL.mjs} +0 -0
- /package/dist/{ssrf-C9dyjU8O.mjs → ssrf-DcD8vn3E.mjs} +0 -0
- /package/dist/{stable-hash-B9Tbb2f_.mjs → stable-hash-9RDJgfif.mjs} +0 -0
- /package/dist/{status-Bjf_uSrW.mjs → status-B2xUokyJ.mjs} +0 -0
- /package/dist/{transport-BrU1aDY5.mjs → transport-BK_me2MZ.mjs} +0 -0
- /package/dist/{transport-CZbtxgKZ.d.mts → transport-CVU5rp7W.d.mts} +0 -0
- /package/dist/{types-DNBL-4Sn.mjs → types-B3Uq7Czg.mjs} +0 -0
- /package/dist/{types-DsJTXStN.d.mts → types-BJztoTbF.d.mts} +0 -0
- /package/dist/{types-COvyXIp7.mjs → types-BgUxCuwu.mjs} +0 -0
- /package/dist/{types-KFzuijKE.d.mts → types-C0heD9oI.d.mts} +0 -0
- /package/dist/{types-B03h5jt_.d.mts → types-DheoByey.d.mts} +0 -0
- /package/dist/{types-SlLXjRpg.d.mts → types-I5LHzk_M.d.mts} +0 -0
- /package/dist/{types-PLJ9hlhh.mjs → types-Nm0cMxEh.mjs} +0 -0
- /package/dist/{types-CtGSEKEJ.d.mts → types-PxxPTFSl.d.mts} +0 -0
- /package/dist/{url-DGG3hw_h.mjs → url-Coamqvs4.mjs} +0 -0
- /package/dist/{url-DUz3LbCs.mjs → url-dn4mFfCI.mjs} +0 -0
- /package/dist/{workers-build-BkmPhclj.mjs → workers-build-XNBt1wGF.mjs} +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { c as __exportAll } from "./runner-
|
|
1
|
+
import { c as __exportAll } from "./runner-CuG8o1uW.mjs";
|
|
2
2
|
import { getRequestContext } from "./request-context.mjs";
|
|
3
|
-
import { a as resetTaxonomyNamesCache, o as isMissingTableError, r as getDb } from "./loader-
|
|
4
|
-
import {
|
|
5
|
-
import { n as
|
|
6
|
-
import {
|
|
7
|
-
import { n as resolveLocaleChain, t as resolveLocale } from "./resolve-
|
|
3
|
+
import { a as resetTaxonomyNamesCache, o as isMissingTableError, r as getDb } from "./loader-Bq1aW12P.mjs";
|
|
4
|
+
import { i as setRequestCacheEntry, n as peekRequestCache, r as requestCached } from "./request-cache-CizvDoxV.mjs";
|
|
5
|
+
import { d as invalidateTaxonomyObjectCache, f as isObjectCacheActive, n as cachedQuery, t as CacheNamespace } from "./object-cache-DyI1SOBK.mjs";
|
|
6
|
+
import { n as chunks, t as SQL_BATCH_SIZE } from "./chunks-Bb56aCtB.mjs";
|
|
7
|
+
import { n as resolveLocaleChain, t as resolveLocale } from "./resolve-BxFGSKYu.mjs";
|
|
8
8
|
|
|
9
9
|
//#region src/taxonomies/index.ts
|
|
10
10
|
/**
|
|
@@ -393,7 +393,7 @@ function primeFoldedEntryTerms(collection, perEntry, options = {}) {
|
|
|
393
393
|
* Get entries by term.
|
|
394
394
|
*/
|
|
395
395
|
async function getEntriesByTerm(collection, taxonomyName, termSlug, options = {}) {
|
|
396
|
-
const { getDinewayCollection } = await import("./query-
|
|
396
|
+
const { getDinewayCollection } = await import("./query-CLWTwcTr.mjs").then((n) => n.o);
|
|
397
397
|
const queryOptions = { where: { [taxonomyName]: termSlug } };
|
|
398
398
|
if (options.locale !== void 0) queryOptions.locale = options.locale;
|
|
399
399
|
const { entries } = await getDinewayCollection(collection, queryOptions);
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
import { c as __exportAll } from "./runner-
|
|
2
|
-
import {
|
|
1
|
+
import { c as __exportAll } from "./runner-CuG8o1uW.mjs";
|
|
2
|
+
import { atomicBatch } from "./database/batch.mjs";
|
|
3
|
+
import { r as getContentStorage } from "./runtime-Ch5G-tnG.mjs";
|
|
4
|
+
import { d as invalidateTaxonomyObjectCache } from "./object-cache-DyI1SOBK.mjs";
|
|
5
|
+
import { r as snapshotContentTermChanges } from "./terms-EskuqbKE.mjs";
|
|
6
|
+
import { sql } from "kysely";
|
|
3
7
|
import { ulid } from "ulidx";
|
|
4
8
|
|
|
5
9
|
//#region src/database/repositories/taxonomy.ts
|
|
@@ -120,9 +124,30 @@ var TaxonomyRepository = class {
|
|
|
120
124
|
if (deleted) invalidateTaxonomyObjectCache();
|
|
121
125
|
return deleted;
|
|
122
126
|
}
|
|
127
|
+
async writeRoutedTerms(collection, entryId, terms, checks = []) {
|
|
128
|
+
const { prepareContentWrite } = await import("./content-write-43KZZ7dz.mjs").then((n) => n.t);
|
|
129
|
+
const prepared = await prepareContentWrite(this.db, collection, {
|
|
130
|
+
id: entryId,
|
|
131
|
+
terms,
|
|
132
|
+
stageDraft: false
|
|
133
|
+
});
|
|
134
|
+
await atomicBatch(this.db, {
|
|
135
|
+
checks: [...prepared.batch.checks ?? [], ...checks],
|
|
136
|
+
statements: prepared.batch.statements
|
|
137
|
+
});
|
|
138
|
+
prepared.afterCommit();
|
|
139
|
+
invalidateTaxonomyObjectCache();
|
|
140
|
+
}
|
|
123
141
|
async attachToEntry(collection, entryId, taxonomyId) {
|
|
124
142
|
const group = await this.resolveTranslationGroup(taxonomyId);
|
|
125
143
|
if (!group) return;
|
|
144
|
+
if (getContentStorage(this.db, collection)) {
|
|
145
|
+
const source = await snapshotContentTermChanges(this.db, collection, entryId);
|
|
146
|
+
const term = (await this.findTranslations(group))[0];
|
|
147
|
+
if (!term || source.changes[term.name]?.includes(group)) return;
|
|
148
|
+
await this.writeRoutedTerms(collection, entryId, { [term.name]: [...source.changes[term.name] ?? [], group] }, source.checks);
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
126
151
|
const row = {
|
|
127
152
|
collection,
|
|
128
153
|
entry_id: entryId,
|
|
@@ -134,6 +159,13 @@ var TaxonomyRepository = class {
|
|
|
134
159
|
async detachFromEntry(collection, entryId, taxonomyId) {
|
|
135
160
|
const group = await this.resolveTranslationGroup(taxonomyId);
|
|
136
161
|
if (!group) return;
|
|
162
|
+
if (getContentStorage(this.db, collection)) {
|
|
163
|
+
const source = await snapshotContentTermChanges(this.db, collection, entryId);
|
|
164
|
+
const term = (await this.findTranslations(group))[0];
|
|
165
|
+
if (!term || !source.changes[term.name]?.includes(group)) return;
|
|
166
|
+
await this.writeRoutedTerms(collection, entryId, { [term.name]: source.changes[term.name].filter((id) => id !== group) }, source.checks);
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
137
169
|
await this.db.deleteFrom("content_taxonomies").where("collection", "=", collection).where("entry_id", "=", entryId).where("taxonomy_id", "=", group).execute();
|
|
138
170
|
invalidateTaxonomyObjectCache();
|
|
139
171
|
}
|
|
@@ -153,6 +185,10 @@ var TaxonomyRepository = class {
|
|
|
153
185
|
* Term ids OR translation_groups are accepted and normalised to groups.
|
|
154
186
|
*/
|
|
155
187
|
async setTermsForEntry(collection, entryId, taxonomyName, termIds) {
|
|
188
|
+
if (getContentStorage(this.db, collection)) {
|
|
189
|
+
await this.writeRoutedTerms(collection, entryId, { [taxonomyName]: termIds });
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
156
192
|
const groups = [];
|
|
157
193
|
for (const id of termIds) {
|
|
158
194
|
const group = await this.resolveTranslationGroup(id);
|
|
@@ -172,6 +208,12 @@ var TaxonomyRepository = class {
|
|
|
172
208
|
if (toRemove.length > 0 || toAdd.length > 0) invalidateTaxonomyObjectCache();
|
|
173
209
|
}
|
|
174
210
|
async clearEntryTerms(collection, entryId) {
|
|
211
|
+
if (getContentStorage(this.db, collection) && (await sql`SELECT id FROM ${sql.table(`ec_${collection}`)} WHERE id=${entryId}`.execute(this.db)).rows.length) {
|
|
212
|
+
const source = await snapshotContentTermChanges(this.db, collection, entryId);
|
|
213
|
+
const count = Object.values(source.changes).reduce((sum, ids) => sum + ids.length, 0);
|
|
214
|
+
if (count) await this.writeRoutedTerms(collection, entryId, Object.fromEntries(Object.keys(source.changes).map((name) => [name, []])), source.checks);
|
|
215
|
+
return count;
|
|
216
|
+
}
|
|
175
217
|
const result = await this.db.deleteFrom("content_taxonomies").where("collection", "=", collection).where("entry_id", "=", entryId).executeTakeFirst();
|
|
176
218
|
const removed = Number(result.numDeletedRows ?? 0);
|
|
177
219
|
if (removed > 0) invalidateTaxonomyObjectCache();
|
|
@@ -183,6 +225,14 @@ var TaxonomyRepository = class {
|
|
|
183
225
|
* source's term assignments. Safe to call when the source has no terms.
|
|
184
226
|
*/
|
|
185
227
|
async copyEntryTerms(collection, sourceEntryId, targetEntryId) {
|
|
228
|
+
if (getContentStorage(this.db, collection)) {
|
|
229
|
+
const source = await snapshotContentTermChanges(this.db, collection, sourceEntryId);
|
|
230
|
+
const target = await snapshotContentTermChanges(this.db, collection, targetEntryId);
|
|
231
|
+
const changed = Object.entries(source.changes).filter(([name, ids]) => ids.some((id) => !target.changes[name]?.includes(id)));
|
|
232
|
+
if (!changed.length) return;
|
|
233
|
+
await this.writeRoutedTerms(collection, targetEntryId, Object.fromEntries(changed.map(([name, ids]) => [name, [...new Set([...target.changes[name] ?? [], ...ids])]])), [...source.checks, ...target.checks]);
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
186
236
|
const rows = await this.db.selectFrom("content_taxonomies").select(["taxonomy_id"]).where("collection", "=", collection).where("entry_id", "=", sourceEntryId).execute();
|
|
187
237
|
if (rows.length === 0) return;
|
|
188
238
|
await this.db.insertInto("content_taxonomies").values(rows.map((r) => ({
|
|
@@ -226,7 +276,7 @@ var TaxonomyRepository = class {
|
|
|
226
276
|
*/
|
|
227
277
|
async countEntriesForTerms(translationGroups) {
|
|
228
278
|
if (translationGroups.length === 0) return /* @__PURE__ */ new Map();
|
|
229
|
-
const { chunks, SQL_BATCH_SIZE } = await import("./chunks-
|
|
279
|
+
const { chunks, SQL_BATCH_SIZE } = await import("./chunks-Bb56aCtB.mjs").then((n) => n.r);
|
|
230
280
|
const counts = /* @__PURE__ */ new Map();
|
|
231
281
|
for (const chunk of chunks(translationGroups, SQL_BATCH_SIZE)) {
|
|
232
282
|
const rows = await this.db.selectFrom("content_taxonomies").select(["taxonomy_id", (eb) => eb.fn.count("entry_id").as("count")]).where("taxonomy_id", "in", chunk).groupBy("taxonomy_id").execute();
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { rowUnchanged } from "./database/batch.mjs";
|
|
2
|
+
import { t as DinewayValidationError } from "./types-BI3ULB3A.mjs";
|
|
3
|
+
import { sql } from "kysely";
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
|
|
6
|
+
//#region src/content-storage/terms.ts
|
|
7
|
+
const contentTermChangesSchema = z.record(z.string().regex(/^[a-z][a-z0-9_]{0,62}$/), z.array(z.string().min(1).max(128)).max(100));
|
|
8
|
+
async function snapshotContentTermChanges(db, collection, entryId) {
|
|
9
|
+
const rows = await db.selectFrom("content_taxonomies").selectAll().where("collection", "=", collection).where("entry_id", "=", entryId).execute();
|
|
10
|
+
const checks = [...rows.map((row) => rowUnchanged("content_taxonomies", row)), sql`(SELECT COUNT(*) FROM content_taxonomies WHERE collection = ${collection} AND entry_id = ${entryId}) = ${rows.length}`];
|
|
11
|
+
const changes = {};
|
|
12
|
+
for (const row of rows) {
|
|
13
|
+
const term = await db.selectFrom("taxonomies").selectAll().where("translation_group", "=", row.taxonomy_id).orderBy("locale").executeTakeFirst();
|
|
14
|
+
if (!term) throw new DinewayValidationError("An assigned term is missing.");
|
|
15
|
+
checks.push(rowUnchanged("taxonomies", term));
|
|
16
|
+
(changes[term.name] ??= []).push(row.taxonomy_id);
|
|
17
|
+
}
|
|
18
|
+
return {
|
|
19
|
+
changes,
|
|
20
|
+
checks
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/** Prepare assignments together with content, so partition resolution sees the submitted terms. */
|
|
24
|
+
async function prepareContentTerms(db, collection, entryId, input, locale) {
|
|
25
|
+
const changes = contentTermChangesSchema.parse(input);
|
|
26
|
+
const checks = [];
|
|
27
|
+
const statements = [];
|
|
28
|
+
const replaced = [];
|
|
29
|
+
const assignments = [];
|
|
30
|
+
for (const [name, ids] of Object.entries(changes)) {
|
|
31
|
+
const definitions = await db.selectFrom("_dineway_taxonomy_defs").selectAll().where("name", "=", name).execute();
|
|
32
|
+
if (!definitions.some((definition) => definition.collections === null || z.array(z.string()).parse(JSON.parse(definition.collections)).includes(collection))) throw new DinewayValidationError(`Taxonomy ${name} is not assigned to ${collection}.`);
|
|
33
|
+
checks.push(...definitions.map((definition) => rowUnchanged("_dineway_taxonomy_defs", definition)));
|
|
34
|
+
const groups = /* @__PURE__ */ new Set();
|
|
35
|
+
for (const id of new Set(ids)) {
|
|
36
|
+
const rows = await db.selectFrom("taxonomies").selectAll().where("name", "=", name).where((eb) => eb.or([eb("id", "=", id), eb("translation_group", "=", id)])).execute();
|
|
37
|
+
const term = rows.find((row) => row.locale === locale) ?? rows.find((row) => row.id === id);
|
|
38
|
+
if (!term?.translation_group) throw new DinewayValidationError(`Term ${id} is unavailable in taxonomy ${name}.`);
|
|
39
|
+
checks.push(rowUnchanged("taxonomies", term));
|
|
40
|
+
groups.add(term.translation_group);
|
|
41
|
+
}
|
|
42
|
+
const current = await db.selectFrom("content_taxonomies").selectAll().where("collection", "=", collection).where("entry_id", "=", entryId).where("taxonomy_id", "in", db.selectFrom("taxonomies").select("translation_group").where("name", "=", name)).execute();
|
|
43
|
+
replaced.push(...current.map((row) => row.taxonomy_id));
|
|
44
|
+
assignments.push(...groups);
|
|
45
|
+
checks.push(...current.map((row) => rowUnchanged("content_taxonomies", row)), sql`(SELECT COUNT(*) FROM content_taxonomies WHERE collection = ${collection} AND entry_id = ${entryId} AND taxonomy_id IN (SELECT translation_group FROM taxonomies WHERE name = ${name})) = ${current.length}`);
|
|
46
|
+
statements.push(db.deleteFrom("content_taxonomies").where("collection", "=", collection).where("entry_id", "=", entryId).where("taxonomy_id", "in", db.selectFrom("taxonomies").select("translation_group").where("name", "=", name)).compile());
|
|
47
|
+
for (const group of groups) statements.push(db.insertInto("content_taxonomies").values({
|
|
48
|
+
collection,
|
|
49
|
+
entry_id: entryId,
|
|
50
|
+
taxonomy_id: group
|
|
51
|
+
}).onConflict((oc) => oc.doNothing()).compile());
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
checks,
|
|
55
|
+
statements,
|
|
56
|
+
replaced,
|
|
57
|
+
assignments
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
async function snapshotPartitionTerms(db, collection, entryId, name, locale, selected) {
|
|
61
|
+
const checks = [];
|
|
62
|
+
const assignments = await db.selectFrom("content_taxonomies").selectAll().where("collection", "=", collection).where("entry_id", "=", entryId).execute();
|
|
63
|
+
checks.push(...assignments.map((row) => rowUnchanged("content_taxonomies", row)), sql`(SELECT COUNT(*) FROM content_taxonomies WHERE collection = ${collection} AND entry_id = ${entryId}) = ${assignments.length}`);
|
|
64
|
+
const ids = selected ?? assignments.map((row) => row.taxonomy_id);
|
|
65
|
+
const terms = [];
|
|
66
|
+
const seen = /* @__PURE__ */ new Set();
|
|
67
|
+
const ancestors = /* @__PURE__ */ new Set();
|
|
68
|
+
const visit = async (id, isSelected) => {
|
|
69
|
+
const rows = await db.selectFrom("taxonomies").selectAll().where("name", "=", name).where((eb) => eb.or([eb("id", "=", id), eb("translation_group", "=", id)])).execute();
|
|
70
|
+
const term = rows.find((row) => row.locale === locale) ?? rows.find((row) => row.id === id) ?? rows.toSorted((a, b) => a.locale.localeCompare(b.locale))[0];
|
|
71
|
+
if (!term?.translation_group) {
|
|
72
|
+
if (selected) throw new DinewayValidationError(`Partition term ${id} is missing from ${name}.`);
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
if (ancestors.has(term.id)) throw new DinewayValidationError("Partition taxonomy contains a parent cycle.");
|
|
76
|
+
if (seen.has(term.id)) {
|
|
77
|
+
if (isSelected) terms.find((value) => value.id === term.id).selected = true;
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
if (seen.size >= 100) throw new DinewayValidationError("Partition taxonomy exceeds 100 terms and ancestors.");
|
|
81
|
+
seen.add(term.id);
|
|
82
|
+
checks.push(rowUnchanged("taxonomies", term));
|
|
83
|
+
terms.push({
|
|
84
|
+
id: term.id,
|
|
85
|
+
group: term.translation_group,
|
|
86
|
+
name: term.name,
|
|
87
|
+
slug: term.slug,
|
|
88
|
+
parentId: term.parent_id,
|
|
89
|
+
selected: isSelected,
|
|
90
|
+
data: term.data ? z.record(z.string(), z.json()).parse(JSON.parse(term.data)) : null
|
|
91
|
+
});
|
|
92
|
+
ancestors.add(term.id);
|
|
93
|
+
if (term.parent_id) await visit(term.parent_id, false);
|
|
94
|
+
ancestors.delete(term.id);
|
|
95
|
+
};
|
|
96
|
+
for (const id of [...ids].toSorted()) await visit(id, true);
|
|
97
|
+
return {
|
|
98
|
+
terms,
|
|
99
|
+
checks
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
//#endregion
|
|
104
|
+
export { snapshotPartitionTerms as i, prepareContentTerms as n, snapshotContentTermChanges as r, contentTermChangesSchema as t };
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { toPlainText } from "@portabletext/toolkit";
|
|
2
|
+
|
|
3
|
+
//#region src/search/text-extraction.ts
|
|
4
|
+
/**
|
|
5
|
+
* Text Extraction
|
|
6
|
+
*
|
|
7
|
+
* Extracts plain text from Portable Text blocks for FTS indexing.
|
|
8
|
+
* Uses @portabletext/toolkit as base with extensions for custom block types.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Validate that a value looks like a Portable Text block array.
|
|
12
|
+
* Each element must have at least a `_type` string property.
|
|
13
|
+
*/
|
|
14
|
+
function isPortableTextArray(value) {
|
|
15
|
+
return value.every((item) => typeof item === "object" && item !== null && "_type" in item && typeof item._type === "string");
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Extract additional text from custom block types that toPlainText doesn't handle
|
|
19
|
+
*/
|
|
20
|
+
function extractCustomBlockText(block) {
|
|
21
|
+
if (block._type === "code" && "code" in block && typeof block.code === "string") return block.code;
|
|
22
|
+
if (block._type === "image") {
|
|
23
|
+
const parts = [];
|
|
24
|
+
if ("alt" in block && typeof block.alt === "string" && block.alt) parts.push(block.alt);
|
|
25
|
+
if ("caption" in block && typeof block.caption === "string" && block.caption) parts.push(block.caption);
|
|
26
|
+
return parts.join(" ");
|
|
27
|
+
}
|
|
28
|
+
return "";
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Extract plain text from Portable Text blocks
|
|
32
|
+
*
|
|
33
|
+
* Uses @portabletext/toolkit's toPlainText for standard blocks,
|
|
34
|
+
* plus extracts text from custom block types (code, images with alt/caption).
|
|
35
|
+
*
|
|
36
|
+
* @param blocks - Array of Portable Text blocks (or a JSON string)
|
|
37
|
+
* @returns Plain text content
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```typescript
|
|
41
|
+
* const text = extractPlainText([
|
|
42
|
+
* {
|
|
43
|
+
* _type: "block",
|
|
44
|
+
* _key: "abc",
|
|
45
|
+
* children: [{ _type: "span", _key: "s1", text: "Hello World" }]
|
|
46
|
+
* }
|
|
47
|
+
* ]);
|
|
48
|
+
* // Returns: "Hello World"
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
function extractPlainText(blocks) {
|
|
52
|
+
if (!blocks) return "";
|
|
53
|
+
let parsedBlocks;
|
|
54
|
+
if (typeof blocks === "string") try {
|
|
55
|
+
parsedBlocks = JSON.parse(blocks);
|
|
56
|
+
} catch {
|
|
57
|
+
return blocks;
|
|
58
|
+
}
|
|
59
|
+
else parsedBlocks = blocks;
|
|
60
|
+
if (!Array.isArray(parsedBlocks)) return "";
|
|
61
|
+
return [toPlainText(parsedBlocks.map((b) => {
|
|
62
|
+
const obj = { _type: b._type };
|
|
63
|
+
for (const [key, val] of Object.entries(b)) obj[key] = val;
|
|
64
|
+
return obj;
|
|
65
|
+
})), ...parsedBlocks.map(extractCustomBlockText).filter((text) => text.length > 0)].filter((t) => t.length > 0).join("\n");
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Extract searchable text from a content entry
|
|
69
|
+
*
|
|
70
|
+
* Extracts text from specified fields, handling both plain text and Portable Text.
|
|
71
|
+
*
|
|
72
|
+
* @param entry - Content entry data
|
|
73
|
+
* @param fields - Field names to extract text from
|
|
74
|
+
* @returns Object mapping field names to extracted text
|
|
75
|
+
*/
|
|
76
|
+
function extractSearchableFields(entry, fields) {
|
|
77
|
+
const result = {};
|
|
78
|
+
for (const field of fields) {
|
|
79
|
+
const value = entry[field];
|
|
80
|
+
if (value === null || value === void 0) {
|
|
81
|
+
result[field] = "";
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
if (typeof value === "string") if (value.startsWith("[")) result[field] = extractPlainText(value);
|
|
85
|
+
else result[field] = value;
|
|
86
|
+
else if (Array.isArray(value)) if (isPortableTextArray(value)) result[field] = extractPlainText(value);
|
|
87
|
+
else result[field] = JSON.stringify(value);
|
|
88
|
+
else if (typeof value === "object") result[field] = JSON.stringify(value);
|
|
89
|
+
else if (typeof value === "number" || typeof value === "boolean") result[field] = `${value}`;
|
|
90
|
+
else result[field] = "";
|
|
91
|
+
}
|
|
92
|
+
return result;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
//#endregion
|
|
96
|
+
export { extractSearchableFields as n, extractPlainText as t };
|
|
@@ -1,21 +1,24 @@
|
|
|
1
|
-
import { _ as UpdateCollectionInput, d as FieldType, f as FieldValidation, i as CollectionWithFields, o as CreateCollectionInput, s as CreateFieldInput, t as Collection, u as Field, v as UpdateFieldInput } from "./types-
|
|
2
|
-
import { f as UpdateContentInput, i as ContentItem$1, l as FindManyOptions, o as ContentSeoInput, r as ContentDateField, s as CreateContentInput, t as BylineSummary, u as FindManyResult } from "./types-
|
|
3
|
-
import {
|
|
4
|
-
import { _ as MediaValue, f as MediaProvider, m as MediaProviderDescriptor, p as MediaProviderCapabilities } from "./placeholder-
|
|
1
|
+
import { _ as UpdateCollectionInput, d as FieldType, f as FieldValidation, i as CollectionWithFields, o as CreateCollectionInput, s as CreateFieldInput, t as Collection, u as Field, v as UpdateFieldInput } from "./types-I5LHzk_M.mjs";
|
|
2
|
+
import { f as UpdateContentInput, i as ContentItem$1, l as FindManyOptions, o as ContentSeoInput, r as ContentDateField, s as CreateContentInput, t as BylineSummary, u as FindManyResult } from "./types-ex-UrNlz.mjs";
|
|
3
|
+
import { kt as ReviewJobTable, n as Database } from "./types-Dpv_MvwZ.mjs";
|
|
4
|
+
import { _ as MediaValue, f as MediaProvider, m as MediaProviderDescriptor, p as MediaProviderCapabilities } from "./placeholder-DdZV3I8x.mjs";
|
|
5
5
|
import { AtomicBatch } from "./database/batch.mjs";
|
|
6
|
-
import { D as ContentBylineInput } from "./index-
|
|
7
|
-
import {
|
|
8
|
-
import { t as
|
|
9
|
-
import {
|
|
6
|
+
import { D as ContentBylineInput } from "./index-CLj17kW9.mjs";
|
|
7
|
+
import { s as ContentStorageConfig } from "./types-qOEot0UQ.mjs";
|
|
8
|
+
import { r as AuthProviderDescriptor, t as AuthDescriptor } from "./types-DheoByey.mjs";
|
|
9
|
+
import { t as DatabaseDescriptor } from "./adapters-lDnJjNDz.mjs";
|
|
10
|
+
import { r as ObjectCacheDescriptor } from "./types-PxxPTFSl.mjs";
|
|
11
|
+
import { t as ContentStorageRuntime } from "./runtime-Bs2JMbb2.mjs";
|
|
12
|
+
import { n as ContentStorageHookName, r as ContentStorageHookTarget, t as ContentStorageHookEvent } from "./hook-events-BQw73jc7.mjs";
|
|
10
13
|
import { ServerTimingMetric } from "./database/instrumentation.mjs";
|
|
11
|
-
import { d as Storage } from "./types-
|
|
12
|
-
import { t as PublishedRef } from "./scheduled-publish-
|
|
13
|
-
import { C as SiteSettingKey, w as SiteSettings } from "./validate-
|
|
14
|
+
import { d as Storage } from "./types-C0heD9oI.mjs";
|
|
15
|
+
import { t as PublishedRef } from "./scheduled-publish-eCNGpvNm.mjs";
|
|
16
|
+
import { C as SiteSettingKey, w as SiteSettings } from "./validate-DUscf6VG.mjs";
|
|
14
17
|
import { DinewayManifest, HandlerResponse } from "./astro/types.mjs";
|
|
15
18
|
import * as kysely from "kysely";
|
|
16
|
-
import { CompiledQuery, Dialect, Kysely, Migration, RawBuilder, Transaction } from "kysely";
|
|
17
|
-
import { Permission, RoleLevel } from "@dineway-ai/auth";
|
|
19
|
+
import { CompiledQuery, Dialect, Kysely, Migration, RawBuilder, Selectable, Transaction } from "kysely";
|
|
18
20
|
import { z } from "zod";
|
|
21
|
+
import { Permission, RoleLevel } from "@dineway-ai/auth";
|
|
19
22
|
import { z as z$1 } from "astro/zod";
|
|
20
23
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
21
24
|
import "@forgeway/sdk";
|
|
@@ -542,13 +545,20 @@ declare function dinewayLoader(): LiveLoader<EntryData, EntryFilter, CollectionF
|
|
|
542
545
|
*/
|
|
543
546
|
declare class ContentRepository {
|
|
544
547
|
private db;
|
|
545
|
-
|
|
548
|
+
private options;
|
|
549
|
+
constructor(db: Kysely<Database>, options?: {
|
|
550
|
+
prepareIndexWrites?: boolean;
|
|
551
|
+
});
|
|
552
|
+
private assertIndexWrite;
|
|
553
|
+
private writeChecks;
|
|
546
554
|
normalizePreparedData(type: string, data: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
547
555
|
/**
|
|
548
556
|
* Create a new content item
|
|
549
557
|
*/
|
|
550
558
|
prepareCreate(input: CreateContentInput, options?: {
|
|
551
559
|
captureDefaults?: boolean;
|
|
560
|
+
id?: string;
|
|
561
|
+
now?: string;
|
|
552
562
|
}): Promise<{
|
|
553
563
|
id: string;
|
|
554
564
|
batch: AtomicBatch;
|
|
@@ -628,6 +638,8 @@ declare class ContentRepository {
|
|
|
628
638
|
*/
|
|
629
639
|
prepareDelete(type: string, id: string): AtomicBatch;
|
|
630
640
|
delete(type: string, id: string): Promise<boolean>;
|
|
641
|
+
/** Compose a routed soft delete with primary business writes without dropping its event. */
|
|
642
|
+
prepareSoftDelete(type: string, id: string): Promise<AtomicBatch>;
|
|
631
643
|
/**
|
|
632
644
|
* Restore content from trash
|
|
633
645
|
*/
|
|
@@ -636,6 +648,7 @@ declare class ContentRepository {
|
|
|
636
648
|
* Permanently delete a soft-deleted content row.
|
|
637
649
|
*/
|
|
638
650
|
permanentDelete(type: string, id: string): Promise<boolean>;
|
|
651
|
+
preparePermanentDelete(type: string, id: string): Promise<AtomicBatch | null>;
|
|
639
652
|
/**
|
|
640
653
|
* Find trashed content items
|
|
641
654
|
*/
|
|
@@ -910,12 +923,19 @@ interface CreateRevisionInput {
|
|
|
910
923
|
*/
|
|
911
924
|
declare class RevisionRepository {
|
|
912
925
|
private db;
|
|
913
|
-
|
|
926
|
+
private options;
|
|
927
|
+
constructor(db: Kysely<Database>, options?: {
|
|
928
|
+
prepareIndexWrites?: boolean;
|
|
929
|
+
});
|
|
930
|
+
private assertIndexWrite;
|
|
914
931
|
/**
|
|
915
932
|
* Create a new revision
|
|
916
933
|
*/
|
|
917
934
|
prepareCreateSnapshot(input: Omit<CreateRevisionInput, "data"> & {
|
|
918
935
|
data: RawBuilder<string>;
|
|
936
|
+
}, options?: {
|
|
937
|
+
id?: string;
|
|
938
|
+
createdAt?: string;
|
|
919
939
|
}): {
|
|
920
940
|
id: string;
|
|
921
941
|
statement: kysely.CompiledQuery<kysely.InsertResult>;
|
|
@@ -1385,15 +1405,28 @@ declare function portableText(options?: {
|
|
|
1385
1405
|
required?: boolean;
|
|
1386
1406
|
}): FieldDefinition<PortableTextBlock$1[] | undefined>;
|
|
1387
1407
|
//#endregion
|
|
1408
|
+
//#region src/content-storage/terms.d.ts
|
|
1409
|
+
declare const contentTermChangesSchema: z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString>>;
|
|
1410
|
+
type ContentTermChanges = z.infer<typeof contentTermChangesSchema>;
|
|
1411
|
+
//#endregion
|
|
1388
1412
|
//#region src/api/handlers/content-write.d.ts
|
|
1389
1413
|
interface ContentWriteInput$1 {
|
|
1414
|
+
/** Reuse this identity when retrying an identical save after an unknown outcome. */
|
|
1415
|
+
operationId?: string;
|
|
1416
|
+
bylines?: ContentBylineInput[];
|
|
1417
|
+
seo?: ContentSeoInput;
|
|
1390
1418
|
id?: string;
|
|
1391
1419
|
data?: Record<string, unknown>;
|
|
1392
1420
|
draftData?: Record<string, unknown>;
|
|
1421
|
+
terms?: ContentTermChanges;
|
|
1393
1422
|
slug?: string;
|
|
1394
1423
|
status?: "draft";
|
|
1395
|
-
authorId?: string;
|
|
1424
|
+
authorId?: string | null;
|
|
1396
1425
|
locale?: string;
|
|
1426
|
+
translationOf?: string;
|
|
1427
|
+
createdAt?: string | null;
|
|
1428
|
+
publishedAt?: string | null;
|
|
1429
|
+
reuseDraftRevision?: boolean;
|
|
1397
1430
|
expectedRev?: string;
|
|
1398
1431
|
stageDraft?: boolean;
|
|
1399
1432
|
unpublish?: boolean;
|
|
@@ -1512,7 +1545,9 @@ declare function handleContentGetIncludingTrashed(db: Kysely<Database>, collecti
|
|
|
1512
1545
|
* API returns a validation error rather than silently dropping it.
|
|
1513
1546
|
*/
|
|
1514
1547
|
declare function handleContentCreate(db: Kysely<Database>, collection: string, body: {
|
|
1548
|
+
operationId?: string;
|
|
1515
1549
|
data: Record<string, unknown>;
|
|
1550
|
+
terms?: ContentTermChanges;
|
|
1516
1551
|
slug?: string;
|
|
1517
1552
|
status?: string;
|
|
1518
1553
|
authorId?: string;
|
|
@@ -1531,7 +1566,9 @@ declare function handleContentCreate(db: Kysely<Database>, collection: string, b
|
|
|
1531
1566
|
* Content + SEO writes are wrapped in a transaction for atomicity.
|
|
1532
1567
|
*/
|
|
1533
1568
|
declare function handleContentUpdate(db: Kysely<Database>, collection: string, id: string, body: {
|
|
1569
|
+
operationId?: string;
|
|
1534
1570
|
data?: Record<string, unknown>;
|
|
1571
|
+
terms?: ContentTermChanges;
|
|
1535
1572
|
slug?: string;
|
|
1536
1573
|
status?: string;
|
|
1537
1574
|
authorId?: string | null;
|
|
@@ -1829,6 +1866,8 @@ interface DinewayConfig {
|
|
|
1829
1866
|
* ```
|
|
1830
1867
|
*/
|
|
1831
1868
|
database?: DatabaseDescriptor;
|
|
1869
|
+
/** Optional Content type routing. Unconfigured types remain in the primary database. */
|
|
1870
|
+
contentStorage?: ContentStorageConfig;
|
|
1832
1871
|
/**
|
|
1833
1872
|
* Storage configuration (for media)
|
|
1834
1873
|
*/
|
|
@@ -2488,6 +2527,9 @@ declare class HookPipeline {
|
|
|
2488
2527
|
* should only run via invokeExclusiveHook(), not in the regular pipeline.
|
|
2489
2528
|
*/
|
|
2490
2529
|
private getTypedHooks;
|
|
2530
|
+
assertContentStorageHooks(): void;
|
|
2531
|
+
contentStorageTargets(names: readonly ContentStorageHookName[]): ContentStorageHookTarget[];
|
|
2532
|
+
deliverContentStorageHook(target: ContentStorageHookTarget, event: ContentStorageHookEvent): Promise<void>;
|
|
2491
2533
|
/**
|
|
2492
2534
|
* Register all hooks from plugins.
|
|
2493
2535
|
*
|
|
@@ -2980,6 +3022,7 @@ interface MediaProviderContext {
|
|
|
2980
3022
|
*/
|
|
2981
3023
|
interface RuntimeDependencies {
|
|
2982
3024
|
config: DinewayConfig;
|
|
3025
|
+
contentStorageRuntime?: ContentStorageRuntime | null;
|
|
2983
3026
|
plugins: ResolvedPlugin[];
|
|
2984
3027
|
createDialect: (config: any) => Dialect;
|
|
2985
3028
|
createCoalescingDialect?: (config: any) => Dialect;
|
|
@@ -3180,7 +3223,9 @@ declare class DinewayRuntime {
|
|
|
3180
3223
|
handleContentGet(collection: string, id: string, locale?: string): Promise<ApiResult<ContentResponse>>;
|
|
3181
3224
|
handleContentGetIncludingTrashed(collection: string, id: string, locale?: string): Promise<ApiResult<ContentResponse>>;
|
|
3182
3225
|
handleContentCreate(collection: string, body: {
|
|
3226
|
+
operationId?: string;
|
|
3183
3227
|
data: Record<string, unknown>;
|
|
3228
|
+
terms?: Record<string, string[]>;
|
|
3184
3229
|
slug?: string;
|
|
3185
3230
|
status?: string;
|
|
3186
3231
|
authorId?: string;
|
|
@@ -3192,7 +3237,9 @@ declare class DinewayRuntime {
|
|
|
3192
3237
|
translationOf?: string;
|
|
3193
3238
|
}): Promise<ApiResult<ContentResponse>>;
|
|
3194
3239
|
handleContentUpdate(collection: string, id: string, body: {
|
|
3240
|
+
operationId?: string;
|
|
3195
3241
|
data?: Record<string, unknown>;
|
|
3242
|
+
terms?: Record<string, string[]>;
|
|
3196
3243
|
slug?: string;
|
|
3197
3244
|
status?: string;
|
|
3198
3245
|
authorId?: string | null;
|
|
@@ -3342,6 +3389,7 @@ declare class DinewayRuntime {
|
|
|
3342
3389
|
private runSandboxedBeforeSave;
|
|
3343
3390
|
private runSandboxedBeforeDelete;
|
|
3344
3391
|
private previousContentForNotification;
|
|
3392
|
+
private drainContentHooks;
|
|
3345
3393
|
private runAfterSaveHooks;
|
|
3346
3394
|
private runAfterDeleteHooks;
|
|
3347
3395
|
private runAfterPublishHooks;
|
|
@@ -5027,19 +5075,19 @@ declare const pluginManifestSchema: z.ZodObject<{
|
|
|
5027
5075
|
uniqueIndexes: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>>>;
|
|
5028
5076
|
}, z.core.$strip>>;
|
|
5029
5077
|
hooks: z.ZodArray<z.ZodUnion<readonly [z.ZodEnum<{
|
|
5030
|
-
"plugin:install": "plugin:install";
|
|
5031
|
-
"plugin:activate": "plugin:activate";
|
|
5032
|
-
"plugin:deactivate": "plugin:deactivate";
|
|
5033
|
-
"plugin:uninstall": "plugin:uninstall";
|
|
5034
|
-
"content:beforeSave": "content:beforeSave";
|
|
5035
5078
|
"content:afterSave": "content:afterSave";
|
|
5036
|
-
"content:beforeDelete": "content:beforeDelete";
|
|
5037
|
-
"content:afterDelete": "content:afterDelete";
|
|
5038
5079
|
"content:afterPublish": "content:afterPublish";
|
|
5039
5080
|
"content:afterUnpublish": "content:afterUnpublish";
|
|
5081
|
+
"content:afterDelete": "content:afterDelete";
|
|
5040
5082
|
"content:afterRestore": "content:afterRestore";
|
|
5041
5083
|
"content:afterSchedule": "content:afterSchedule";
|
|
5042
5084
|
"content:afterUnschedule": "content:afterUnschedule";
|
|
5085
|
+
"plugin:install": "plugin:install";
|
|
5086
|
+
"plugin:activate": "plugin:activate";
|
|
5087
|
+
"plugin:deactivate": "plugin:deactivate";
|
|
5088
|
+
"plugin:uninstall": "plugin:uninstall";
|
|
5089
|
+
"content:beforeSave": "content:beforeSave";
|
|
5090
|
+
"content:beforeDelete": "content:beforeDelete";
|
|
5043
5091
|
"media:beforeUpload": "media:beforeUpload";
|
|
5044
5092
|
"media:afterUpload": "media:afterUpload";
|
|
5045
5093
|
cron: "cron";
|
|
@@ -5054,19 +5102,19 @@ declare const pluginManifestSchema: z.ZodObject<{
|
|
|
5054
5102
|
"page:fragments": "page:fragments";
|
|
5055
5103
|
}>, z.ZodObject<{
|
|
5056
5104
|
name: z.ZodEnum<{
|
|
5057
|
-
"plugin:install": "plugin:install";
|
|
5058
|
-
"plugin:activate": "plugin:activate";
|
|
5059
|
-
"plugin:deactivate": "plugin:deactivate";
|
|
5060
|
-
"plugin:uninstall": "plugin:uninstall";
|
|
5061
|
-
"content:beforeSave": "content:beforeSave";
|
|
5062
5105
|
"content:afterSave": "content:afterSave";
|
|
5063
|
-
"content:beforeDelete": "content:beforeDelete";
|
|
5064
|
-
"content:afterDelete": "content:afterDelete";
|
|
5065
5106
|
"content:afterPublish": "content:afterPublish";
|
|
5066
5107
|
"content:afterUnpublish": "content:afterUnpublish";
|
|
5108
|
+
"content:afterDelete": "content:afterDelete";
|
|
5067
5109
|
"content:afterRestore": "content:afterRestore";
|
|
5068
5110
|
"content:afterSchedule": "content:afterSchedule";
|
|
5069
5111
|
"content:afterUnschedule": "content:afterUnschedule";
|
|
5112
|
+
"plugin:install": "plugin:install";
|
|
5113
|
+
"plugin:activate": "plugin:activate";
|
|
5114
|
+
"plugin:deactivate": "plugin:deactivate";
|
|
5115
|
+
"plugin:uninstall": "plugin:uninstall";
|
|
5116
|
+
"content:beforeSave": "content:beforeSave";
|
|
5117
|
+
"content:beforeDelete": "content:beforeDelete";
|
|
5070
5118
|
"media:beforeUpload": "media:beforeUpload";
|
|
5071
5119
|
"media:afterUpload": "media:afterUpload";
|
|
5072
5120
|
cron: "cron";
|
|
@@ -5159,9 +5207,9 @@ declare const pluginManifestSchema: z.ZodObject<{
|
|
|
5159
5207
|
json: "json";
|
|
5160
5208
|
slug: "slug";
|
|
5161
5209
|
image: "image";
|
|
5162
|
-
datetime: "datetime";
|
|
5163
5210
|
text: "text";
|
|
5164
5211
|
integer: "integer";
|
|
5212
|
+
datetime: "datetime";
|
|
5165
5213
|
select: "select";
|
|
5166
5214
|
multiSelect: "multiSelect";
|
|
5167
5215
|
portableText: "portableText";
|
|
@@ -7086,7 +7134,9 @@ interface StorageCollection<T = unknown> {
|
|
|
7086
7134
|
putMany(items: Array<{
|
|
7087
7135
|
id: string;
|
|
7088
7136
|
data: T;
|
|
7089
|
-
}
|
|
7137
|
+
}>, options?: {
|
|
7138
|
+
ifAbsent?: boolean;
|
|
7139
|
+
}): Promise<void>;
|
|
7090
7140
|
deleteMany(ids: string[]): Promise<number>;
|
|
7091
7141
|
query(options?: QueryOptions): Promise<PaginatedResult<{
|
|
7092
7142
|
id: string;
|
|
@@ -7559,6 +7609,8 @@ type CommentAfterModerateHandler = (event: CommentAfterModerateEvent, ctx: Plugi
|
|
|
7559
7609
|
* Hook configuration
|
|
7560
7610
|
*/
|
|
7561
7611
|
interface HookConfig<THandler> {
|
|
7612
|
+
/** Required for durable delivery of routed content events; deduplicate with event.idempotencyKey. */
|
|
7613
|
+
idempotent?: boolean;
|
|
7562
7614
|
/** Explicit ordering - lower numbers run first (default: 100) */
|
|
7563
7615
|
priority?: number;
|
|
7564
7616
|
/** Max execution time in ms (default: 5000) */
|
|
@@ -7580,6 +7632,7 @@ interface HookConfig<THandler> {
|
|
|
7580
7632
|
* Content hook event
|
|
7581
7633
|
*/
|
|
7582
7634
|
interface ContentHookEvent {
|
|
7635
|
+
idempotencyKey?: string;
|
|
7583
7636
|
/** Persisted item before a successful mutation; absent for creations and before hooks. */
|
|
7584
7637
|
previousContent?: Record<string, unknown>;
|
|
7585
7638
|
content: Record<string, unknown>;
|
|
@@ -7590,6 +7643,7 @@ interface ContentHookEvent {
|
|
|
7590
7643
|
* Content delete hook event
|
|
7591
7644
|
*/
|
|
7592
7645
|
interface ContentDeleteEvent {
|
|
7646
|
+
idempotencyKey?: string;
|
|
7593
7647
|
/** Persisted item before a successful mutation; absent for creations and before hooks. */
|
|
7594
7648
|
previousContent?: Record<string, unknown>;
|
|
7595
7649
|
id: string;
|
|
@@ -7600,6 +7654,7 @@ interface ContentDeleteEvent {
|
|
|
7600
7654
|
* Content state change hook event.
|
|
7601
7655
|
*/
|
|
7602
7656
|
interface ContentStateChangeEvent {
|
|
7657
|
+
idempotencyKey?: string;
|
|
7603
7658
|
/** Persisted item before a successful mutation; absent for creations and before hooks. */
|
|
7604
7659
|
previousContent?: Record<string, unknown>;
|
|
7605
7660
|
content: Record<string, unknown>;
|
|
@@ -7852,6 +7907,7 @@ interface ManifestRouteEntry {
|
|
|
7852
7907
|
* Resolved hook with normalized config
|
|
7853
7908
|
*/
|
|
7854
7909
|
interface ResolvedHook<THandler> {
|
|
7910
|
+
idempotent?: boolean;
|
|
7855
7911
|
priority: number;
|
|
7856
7912
|
timeout: number;
|
|
7857
7913
|
dependencies: string[];
|