dineway 0.2.46 → 0.2.48
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/api/route-utils.d.mts +5 -5
- package/dist/api/route-utils.mjs +12 -12
- package/dist/api/schemas/index.d.mts +1 -1
- package/dist/api/schemas/index.mjs +4 -4
- package/dist/{api-BSmjb74C.mjs → api-p58_ypd8.mjs} +9 -9
- package/dist/{apply-Caad3Uh7.mjs → apply-BlVVbjbz.mjs} +15 -15
- package/dist/astro/index.d.mts +4 -4
- package/dist/astro/index.mjs +5 -5
- package/dist/astro/middleware/auth.d.mts +4 -4
- package/dist/astro/middleware/auth.mjs +2 -2
- package/dist/astro/middleware/redirect.mjs +4 -4
- package/dist/astro/middleware/setup.mjs +1 -1
- package/dist/astro/middleware.mjs +63 -63
- package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +4 -4
- package/dist/astro/routes/api/admin/allowed-domains/index.mjs +4 -4
- package/dist/astro/routes/api/admin/briefing.mjs +20 -20
- package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +4 -4
- package/dist/astro/routes/api/admin/byline-fields/index.mjs +4 -4
- package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +4 -4
- package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +12 -12
- package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +12 -12
- package/dist/astro/routes/api/admin/bylines/index.mjs +12 -12
- package/dist/astro/routes/api/admin/comments/_id_/status.mjs +10 -10
- package/dist/astro/routes/api/admin/comments/_id_.mjs +5 -5
- package/dist/astro/routes/api/admin/comments/bulk.mjs +9 -9
- package/dist/astro/routes/api/admin/comments/counts.mjs +5 -5
- package/dist/astro/routes/api/admin/comments/index.mjs +9 -9
- package/dist/astro/routes/api/admin/context/_id_/history.mjs +25 -25
- package/dist/astro/routes/api/admin/context/_id_/index.mjs +25 -25
- package/dist/astro/routes/api/admin/context/_id_/review.mjs +28 -28
- package/dist/astro/routes/api/admin/context/_id_/supersede.mjs +28 -28
- package/dist/astro/routes/api/admin/context/diff.mjs +28 -28
- package/dist/astro/routes/api/admin/context/index.mjs +28 -28
- package/dist/astro/routes/api/admin/context/stale.mjs +28 -28
- package/dist/astro/routes/api/admin/hitl-requests/_id_/index.mjs +26 -26
- package/dist/astro/routes/api/admin/hitl-requests/_id_/resolve.mjs +29 -29
- package/dist/astro/routes/api/admin/hitl-requests/index.mjs +29 -29
- package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +25 -25
- package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +43 -43
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +43 -43
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +39 -39
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +43 -43
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +43 -43
- package/dist/astro/routes/api/admin/plugins/index.mjs +39 -39
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +39 -39
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +43 -43
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +39 -39
- package/dist/astro/routes/api/admin/plugins/updates.mjs +39 -39
- package/dist/astro/routes/api/admin/review-requests/_id_/image.mjs +16 -16
- package/dist/astro/routes/api/admin/review-requests/_id_/index.mjs +22 -22
- package/dist/astro/routes/api/admin/review-requests/_id_/resolve.mjs +32 -32
- package/dist/astro/routes/api/admin/review-requests/index.mjs +30 -30
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +39 -39
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +39 -39
- package/dist/astro/routes/api/admin/users/_id_/index.mjs +4 -4
- package/dist/astro/routes/api/admin/users/index.mjs +4 -4
- package/dist/astro/routes/api/auth/invite/complete.mjs +6 -6
- package/dist/astro/routes/api/auth/invite/index.mjs +4 -4
- package/dist/astro/routes/api/auth/invite/register-options.mjs +5 -5
- package/dist/astro/routes/api/auth/magic-link/send.mjs +4 -4
- package/dist/astro/routes/api/auth/me.mjs +4 -4
- package/dist/astro/routes/api/auth/mode.mjs +1 -1
- package/dist/astro/routes/api/auth/passkey/_id_.mjs +4 -4
- package/dist/astro/routes/api/auth/passkey/options.mjs +5 -5
- package/dist/astro/routes/api/auth/passkey/register/options.mjs +5 -5
- package/dist/astro/routes/api/auth/passkey/register/verify.mjs +6 -6
- package/dist/astro/routes/api/auth/passkey/verify.mjs +6 -6
- package/dist/astro/routes/api/auth/signup/complete.mjs +6 -6
- package/dist/astro/routes/api/auth/signup/request.mjs +4 -4
- package/dist/astro/routes/api/comments/_collection_/_contentId_/index.d.mts +4 -4
- package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +10 -10
- package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +9 -9
- package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +10 -10
- package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +19 -19
- package/dist/astro/routes/api/content/_collection_/_id_/release-readiness.mjs +4 -4
- package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +19 -19
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +15 -15
- package/dist/astro/routes/api/content/_collection_/_id_.mjs +8 -8
- package/dist/astro/routes/api/content/_collection_/index.mjs +8 -8
- package/dist/astro/routes/api/content/_collection_/trash.mjs +4 -4
- package/dist/astro/routes/api/dashboard.mjs +9 -9
- package/dist/astro/routes/api/health.mjs +1 -1
- package/dist/astro/routes/api/import/probe.mjs +13 -13
- package/dist/astro/routes/api/import/wordpress/analyze.mjs +5 -5
- package/dist/astro/routes/api/import/wordpress/execute.d.mts +4 -4
- package/dist/astro/routes/api/import/wordpress/execute.mjs +28 -28
- package/dist/astro/routes/api/import/wordpress/media.d.mts +4 -4
- package/dist/astro/routes/api/import/wordpress/media.mjs +4 -4
- package/dist/astro/routes/api/import/wordpress/prepare.mjs +29 -29
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +4 -4
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +29 -29
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +15 -15
- package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +4 -4
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +32 -32
- package/dist/astro/routes/api/manifest.mjs +2 -2
- package/dist/astro/routes/api/mcp.mjs +64 -64
- package/dist/astro/routes/api/media/_id_/confirm.mjs +4 -4
- package/dist/astro/routes/api/media/_id_.mjs +4 -4
- package/dist/astro/routes/api/media/upload-url.mjs +4 -4
- package/dist/astro/routes/api/media.mjs +4 -4
- package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +29 -29
- package/dist/astro/routes/api/menus/_name_/items.mjs +29 -29
- package/dist/astro/routes/api/menus/_name_/reorder.mjs +29 -29
- package/dist/astro/routes/api/menus/_name_/translations.mjs +29 -29
- package/dist/astro/routes/api/menus/_name_.mjs +29 -29
- package/dist/astro/routes/api/menus/index.mjs +29 -29
- package/dist/astro/routes/api/openapi.json.mjs +4 -4
- package/dist/astro/routes/api/redirects/404s/index.mjs +4 -4
- package/dist/astro/routes/api/redirects/404s/summary.mjs +4 -4
- package/dist/astro/routes/api/redirects/_id_.mjs +28 -28
- package/dist/astro/routes/api/redirects/index.mjs +28 -28
- package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +39 -39
- package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +39 -39
- package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +39 -39
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +39 -39
- package/dist/astro/routes/api/schema/collections/index.mjs +39 -39
- package/dist/astro/routes/api/schema/index.mjs +5 -5
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs +39 -39
- package/dist/astro/routes/api/schema/orphans/index.mjs +39 -39
- package/dist/astro/routes/api/search/enable.mjs +9 -9
- package/dist/astro/routes/api/search/index.mjs +9 -9
- package/dist/astro/routes/api/search/rebuild.mjs +9 -9
- package/dist/astro/routes/api/search/stats.mjs +5 -5
- package/dist/astro/routes/api/search/suggest.mjs +9 -9
- package/dist/astro/routes/api/sections/_slug_.mjs +29 -29
- package/dist/astro/routes/api/sections/index.mjs +29 -29
- package/dist/astro/routes/api/settings/reviews.mjs +1 -1
- package/dist/astro/routes/api/settings.mjs +29 -29
- package/dist/astro/routes/api/setup/admin-verify.mjs +7 -7
- package/dist/astro/routes/api/setup/admin.mjs +5 -5
- package/dist/astro/routes/api/setup/dev-bypass.mjs +19 -19
- package/dist/astro/routes/api/setup/index.mjs +23 -23
- package/dist/astro/routes/api/setup/status.mjs +1 -1
- package/dist/astro/routes/api/snapshot.mjs +1 -1
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +31 -31
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +31 -31
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +31 -31
- package/dist/astro/routes/api/taxonomies/index.mjs +31 -31
- package/dist/astro/routes/api/typegen.mjs +2 -2
- package/dist/astro/routes/api/well-known/auth.mjs +2 -2
- package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +28 -28
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +29 -29
- package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +29 -29
- package/dist/astro/routes/api/widget-areas/_name_.mjs +26 -26
- package/dist/astro/routes/api/widget-areas/index.mjs +29 -29
- package/dist/astro/routes/robots.txt.mjs +6 -6
- package/dist/astro/routes/sitemap-_collection_.xml.mjs +10 -10
- package/dist/astro/routes/sitemap.xml.mjs +10 -10
- package/dist/astro/session-driver.mjs +4 -4
- package/dist/astro/types.d.mts +4 -4
- package/dist/{briefing-CbsLoDJS.mjs → briefing-BAtarnPm.mjs} +1 -1
- package/dist/{briefing-yQgD73g4.mjs → briefing-DoFv4isE.mjs} +5 -5
- package/dist/{byline-BS25s1R-.mjs → byline-CYc3Hn1i.mjs} +5 -5
- package/dist/{byline-fields-D6EXp7_j.d.mts → byline-fields-B117F62r.d.mts} +23 -23
- package/dist/{byline-fields-Bnw5NflJ.mjs → byline-fields-BHVmleIi.mjs} +1 -1
- package/dist/{bylines-CLBeFLdo.mjs → bylines-DGdYDqGq.mjs} +1 -1
- package/dist/{bylines-ZRvo3-j0.mjs → bylines-DrSccNgg.mjs} +3 -3
- package/dist/cli/index.mjs +47 -33
- package/dist/cli/plugin-kit.d.mts +4 -4
- package/dist/client/index.d.mts +4 -4
- package/dist/{comment-BTt78k0n.mjs → comment-BnrzhX9M.mjs} +1 -1
- package/dist/{comments-Do2zF3as.mjs → comments-B4Tym6oF.mjs} +1 -1
- package/dist/{config---A7Bg68.mjs → config-BhQacL9l.mjs} +2 -1
- package/dist/{content-BZBomTNV.mjs → content-CIWw08LO.mjs} +5 -5
- package/dist/{content-C8i4DyTt.mjs → content-CghEEm3k.mjs} +1 -1
- package/dist/{content-refresh-DbGFLB3p.mjs → content-refresh-lqCnhHGP.mjs} +2 -2
- package/dist/content-storage/index.d.mts +25 -4
- package/dist/content-storage/index.mjs +16 -16
- package/dist/content-storage/store.d.mts +3 -3
- package/dist/content-storage/store.mjs +3 -3
- package/dist/{content-write-Bt_eiX9o.mjs → content-write-BjTJiZhK.mjs} +74 -18
- package/dist/{context-RtLnM2-Z.mjs → context-PK-5ygok.mjs} +4 -4
- package/dist/{context-VxiTIEQa.mjs → context-caX3OQVz.mjs} +2 -2
- package/dist/{dashboard-C_x53TcC.mjs → dashboard-DBHqEUXC.mjs} +1 -1
- package/dist/database/d1/index.d.mts +4 -4
- package/dist/database/d1/index.mjs +2 -2
- package/dist/{discovery-DNwLsQqJ.mjs → discovery-DLzhlF9z.mjs} +1 -1
- package/dist/{evidence-D3Tqm_ik.mjs → evidence-CG6khLd9.mjs} +2 -2
- package/dist/{hitl-requests-ysSO7eqS.mjs → hitl-requests-SRfiaD3V.mjs} +1 -1
- package/dist/{hitl-route-helpers-BLJYI67Y.mjs → hitl-route-helpers-B0h7RXw1.mjs} +1 -1
- package/dist/{import-BkBVo6UM.mjs → import-DpVbSU4T.mjs} +3 -3
- package/dist/index.d.mts +4 -4
- package/dist/index.mjs +51 -51
- package/dist/{jsonld-BObNyc22.d.mts → jsonld-DaZdgstn.d.mts} +1 -1
- package/dist/{loader--zFg6meV.mjs → loader-CrVkVaD6.mjs} +7 -2
- package/dist/{mcp-reviewed-executor-CiuVfiL_.mjs → mcp-reviewed-executor-C93EXLSQ.mjs} +2 -2
- package/dist/media/local-runtime.d.mts +4 -4
- package/dist/{menus-Dq323Wka.mjs → menus-DRpTzW6g.mjs} +3 -3
- package/dist/{menus-BoNLPIAK.mjs → menus-X0eJuILT.mjs} +1 -1
- package/dist/{object-cache-Ue6kAfzf.mjs → object-cache-DRx6IjWR.mjs} +1 -1
- package/dist/{owned-metadata-bXhDX1WW.mjs → owned-metadata-DFODPEuj.mjs} +1 -1
- package/dist/page/index.d.mts +5 -5
- package/dist/plugin-utils.d.mts +4 -4
- package/dist/plugins/adapt-sandbox-entry.d.mts +4 -4
- package/dist/{plugins-C10hTI65.mjs → plugins-D4TRcqTV.mjs} +2 -2
- package/dist/{public-url-JnHtmWfz.d.mts → public-url-b6l0vmiE.d.mts} +1 -1
- package/dist/{publication-authorization-DBNXaGgH.mjs → publication-authorization-C2X-Qj7L.mjs} +4 -4
- package/dist/{query-5edkcMYz.mjs → query-BTXfe7AE.mjs} +3 -3
- package/dist/{query-CNXVFYWz.mjs → query-BfIz2W0n.mjs} +10 -10
- package/dist/{redirects-BwnvcNyN.mjs → redirects-DAKRmX6R.mjs} +1 -1
- package/dist/{registry-DEKqjKIM.mjs → registry-CdeSHG0k.mjs} +1 -1
- package/dist/{release-CIYyinzY.mjs → release-Bk-UaI2C.mjs} +1 -1
- package/dist/request-context.d.mts +1 -11
- package/dist/{migration-BhVzGnj0.mjs → retention-gks1TiDo.mjs} +100 -10
- package/dist/{review-requests-B7UdAl1r.mjs → review-requests-05w-uj_e.mjs} +1 -1
- package/dist/{revision-BtgwJxxa.mjs → revision-DX_AHhhE.mjs} +2 -2
- package/dist/{revisions-CQZI886L.mjs → revisions-DG2-WBDb.mjs} +2 -2
- package/dist/{runtime-ecsN2xL9.d.mts → runtime-BEiDcRPk.d.mts} +1 -1
- package/dist/{runtime-BLoyGKUx.mjs → runtime-CeGWfwh3.mjs} +76 -59
- package/dist/runtime.d.mts +4 -4
- package/dist/runtime.mjs +4 -4
- package/dist/{schema-DIXUswIX.mjs → schema-fU3y2MMH.mjs} +1 -1
- package/dist/{search-TXLzVROW.mjs → search-kRXT1_11.mjs} +1 -1
- package/dist/{sections-zaZhTZqa.mjs → sections-DzoY2Hvx.mjs} +1 -1
- package/dist/seed/index.mjs +19 -19
- package/dist/seo/index.mjs +6 -6
- package/dist/{seo-BQ7R2a1z.mjs → seo-DYjDvLHM.mjs} +5 -5
- package/dist/{seo-DdczIQvk.mjs → seo-DuHOFc2a.mjs} +1 -1
- package/dist/{service-CUlcOLZj.mjs → service-DlJ5BeF2.mjs} +2 -2
- package/dist/{settings-CoCGUtE6.mjs → settings-BU33hxhH.mjs} +1 -1
- package/dist/{settings-Bc2eQPR6.mjs → settings-opr6BnNM.mjs} +2 -2
- package/dist/{site-context-DkxgOnQl.mjs → site-context-94-KanDT.mjs} +6 -6
- package/dist/{submission-BNP2Sc3O.mjs → submission-_6ZXKy3N.mjs} +5 -5
- package/dist/{taxonomies-CVe1PGaO.mjs → taxonomies--FALWfoI.mjs} +3 -3
- package/dist/{taxonomies-zgZ2HG_z.mjs → taxonomies-DgiHNOZJ.mjs} +2 -2
- package/dist/{taxonomy-CcyZD5jQ.mjs → taxonomy-CKv3RKf1.mjs} +9 -8
- package/dist/{terms-EskuqbKE.mjs → terms-D4OJs0Zh.mjs} +3 -0
- package/dist/{types-CeFGasN8.d.mts → types-BafdCfKt.d.mts} +1 -0
- package/dist/{types-jtUocGnQ.d.mts → types-CTbitmIM.d.mts} +6 -4
- package/dist/ui/server-runtime.d.mts +6 -6
- package/dist/ui/server-runtime.mjs +14 -14
- package/dist/version-Bkbf_9nG.mjs +6 -0
- package/dist/{version-store-B6i81L9W.d.mts → version-store-BLGuq3wB.d.mts} +2 -37
- package/dist/{version-store-DyYULGd3.mjs → version-store-xhBmPoC-.mjs} +3 -11
- package/dist/{widgets-CJBk8bm7.mjs → widgets-hPqK6Aut.mjs} +1 -1
- package/dist/{worker-D82vT5OV.mjs → worker-CMiDP358.mjs} +4 -4
- package/dist/{write-intent-CjTERf3N.mjs → write-intent-ChTUctBF.mjs} +5 -5
- package/package.json +3 -3
- package/dist/version-BJwTlK4L.mjs +0 -6
- /package/dist/{allowed-origins-SQbPK6WG.mjs → allowed-origins-CQyKpMbJ.mjs} +0 -0
- /package/dist/{challenge-store-7IZ_NqWg.mjs → challenge-store-BImHCJvl.mjs} +0 -0
- /package/dist/{mode-C3RI5Z5t.mjs → mode-BoM5FjH7.mjs} +0 -0
- /package/dist/{policy-DbceGc4P.mjs → policy-BL8yj6uD.mjs} +0 -0
- /package/dist/{session-user-D36BRaZY.mjs → session-user-j7I8GMvK.mjs} +0 -0
- /package/dist/{setup-complete-eTV6C0-E.mjs → setup-complete-Cn-Ho9RX.mjs} +0 -0
- /package/dist/{state-CKkqoA6i.mjs → state-LzJZ7qpq.mjs} +0 -0
- /package/dist/{workers-build-4926MPc0.mjs → workers-build-Bd4w1aw9.mjs} +0 -0
|
@@ -1,27 +1,78 @@
|
|
|
1
1
|
import { atomicBatch, rowUnchanged } from "./database/batch.mjs";
|
|
2
|
-
import { a as validateContentStorage, i as resolveContentPartition, n as contentDigest, o as ContentStorageError, t as canonicalContentJson } from "./config
|
|
3
|
-
import {
|
|
4
|
-
import { n as readRevisionDataBatch, r as storedRevisionIndex } from "./revisions-
|
|
5
|
-
import { t as ContentRepository } from "./content-
|
|
6
|
-
import { o as invalidateCollectionCache } from "./object-cache-
|
|
7
|
-
import { i as contentWriteConfiguration, k as snapshotPartitionDependencies } from "./content-write-
|
|
8
|
-
import {
|
|
9
|
-
import { a as contentItemSchema } from "./content-
|
|
2
|
+
import { a as validateContentStorage, i as resolveContentPartition, n as contentDigest, o as ContentStorageError, t as canonicalContentJson } from "./config-BhQacL9l.mjs";
|
|
3
|
+
import { _ as prepareContentProjection, b as contentChangeSequence, d as cancelContentMigration, g as contentProjectionValues, h as assertContentIndexFields, i as getContentStorage, m as readContentPartitionRoute, x as prepareContentChangeJournal } from "./runtime-CeGWfwh3.mjs";
|
|
4
|
+
import { n as readRevisionDataBatch, r as storedRevisionIndex } from "./revisions-DG2-WBDb.mjs";
|
|
5
|
+
import { t as ContentRepository } from "./content-CIWw08LO.mjs";
|
|
6
|
+
import { o as invalidateCollectionCache } from "./object-cache-DRx6IjWR.mjs";
|
|
7
|
+
import { i as contentWriteConfiguration, k as snapshotPartitionDependencies } from "./content-write-BjTJiZhK.mjs";
|
|
8
|
+
import { a as contentVersionSchema } from "./version-store-xhBmPoC-.mjs";
|
|
9
|
+
import { a as contentItemSchema } from "./content-CghEEm3k.mjs";
|
|
10
10
|
import { sql } from "kysely";
|
|
11
11
|
import { z } from "zod";
|
|
12
12
|
|
|
13
13
|
//#region src/content-storage/config-migration.ts
|
|
14
|
+
function referenceLayout(config) {
|
|
15
|
+
return Object.fromEntries(Object.entries(config.rules).map(([collection, rule]) => {
|
|
16
|
+
const key = rule.partitionBy;
|
|
17
|
+
if (!("references" in key) || !key.references) return [collection, rule];
|
|
18
|
+
const references = Object.fromEntries(Object.entries(key.references).map(([name, reference]) => {
|
|
19
|
+
const { fields: _fields, ...dependency } = reference;
|
|
20
|
+
return [name, dependency];
|
|
21
|
+
}));
|
|
22
|
+
return [collection, {
|
|
23
|
+
...rule,
|
|
24
|
+
partitionBy: {
|
|
25
|
+
...key,
|
|
26
|
+
references
|
|
27
|
+
}
|
|
28
|
+
}];
|
|
29
|
+
}));
|
|
30
|
+
}
|
|
31
|
+
function dataLayout(config) {
|
|
32
|
+
return canonicalContentJson({
|
|
33
|
+
version: config.version,
|
|
34
|
+
rules: referenceLayout(config),
|
|
35
|
+
stores: Object.fromEntries(Object.entries(config.stores).map(([name, { provider, identity }]) => [name, {
|
|
36
|
+
provider,
|
|
37
|
+
identity
|
|
38
|
+
}]))
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
/** Explicitly stage compatible bindings or a resolver input projection with the same routing contract. */
|
|
42
|
+
async function stageContentStorageBindings(db, previous, next) {
|
|
43
|
+
validateContentStorage(previous);
|
|
44
|
+
validateContentStorage(next);
|
|
45
|
+
if (dataLayout(previous) !== dataLayout(next)) throw new ContentStorageError("INVALID_CONFIG", "Changing database bindings must preserve the Content type rules, physical stores and routing version.");
|
|
46
|
+
const before = await contentDigest(previous), after = await contentDigest(next);
|
|
47
|
+
await atomicBatch(db, {
|
|
48
|
+
checks: [
|
|
49
|
+
sql`EXISTS (SELECT 1 FROM _dineway_content_storage_config WHERE id='active' AND version=${previous.version} AND digest IN (${before},${after}))`,
|
|
50
|
+
sql`NOT EXISTS (SELECT 1 FROM _dineway_content_storage_config WHERE id='bindings' AND digest<>${after})`,
|
|
51
|
+
...canonicalContentJson(previous.rules) === canonicalContentJson(next.rules) ? [] : [sql`NOT EXISTS (SELECT 1 FROM _dineway_content_partitions WHERE state<>'active')`, sql`NOT EXISTS (SELECT 1 FROM _dineway_content_operations WHERE state='pending')`]
|
|
52
|
+
],
|
|
53
|
+
statements: [sql`INSERT INTO _dineway_content_storage_config (id,version,digest) SELECT 'bindings',version,${after} FROM _dineway_content_storage_config WHERE id='active' AND digest<>${after} ON CONFLICT(id) DO NOTHING`.compile(db)]
|
|
54
|
+
});
|
|
55
|
+
}
|
|
14
56
|
/** Explicit deployment step. Mapping changes retain the source until its data migration completes. */
|
|
15
57
|
async function migrateContentStorageConfig(db, previous, next) {
|
|
16
58
|
validateContentStorage(previous);
|
|
17
59
|
validateContentStorage(next);
|
|
18
60
|
await assertContentIndexFields(db, next);
|
|
19
|
-
if (previous.version === next.version)
|
|
61
|
+
if (previous.version === next.version) {
|
|
62
|
+
await stageContentStorageBindings(db, previous, next);
|
|
63
|
+
const before = await contentDigest(previous), after = await contentDigest(next);
|
|
64
|
+
await atomicBatch(db, {
|
|
65
|
+
checks: [sql`EXISTS (SELECT 1 FROM _dineway_content_storage_config WHERE id='active' AND version=${next.version} AND (digest=${after} OR (digest=${before} AND EXISTS (SELECT 1 FROM _dineway_content_storage_config WHERE id='bindings' AND digest=${after}))))`],
|
|
66
|
+
statements: [sql`UPDATE _dineway_content_storage_config SET digest=${after} WHERE id='active'`.compile(db), sql`DELETE FROM _dineway_content_storage_config WHERE id='bindings' AND digest=${after}`.compile(db)]
|
|
67
|
+
});
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
20
70
|
const oldDigest = await contentDigest(previous);
|
|
21
71
|
const digest = await contentDigest(next);
|
|
22
72
|
const installed = (await sql`SELECT version,digest FROM _dineway_content_storage_config WHERE id='active'`.execute(db)).rows[0];
|
|
23
73
|
if (installed?.version === next.version && installed.digest === digest) return;
|
|
24
74
|
const checks = [
|
|
75
|
+
sql`NOT EXISTS (SELECT 1 FROM _dineway_content_storage_config WHERE id='bindings')`,
|
|
25
76
|
sql`NOT EXISTS (SELECT 1 FROM _dineway_content_hook_deliveries WHERE delivered_at IS NULL)`,
|
|
26
77
|
sql`EXISTS (SELECT 1 FROM _dineway_content_storage_config WHERE id='active' AND version=${previous.version} AND digest=${oldDigest})`,
|
|
27
78
|
sql`NOT EXISTS (SELECT 1 FROM _dineway_content_partitions WHERE state<>'active')`
|
|
@@ -564,4 +615,43 @@ async function rollbackContentMigration(db, migration, archive) {
|
|
|
564
615
|
}
|
|
565
616
|
|
|
566
617
|
//#endregion
|
|
567
|
-
|
|
618
|
+
//#region src/content-storage/retention.ts
|
|
619
|
+
/** Read-only inventory. A page is an observation, never a deletion authorization. */
|
|
620
|
+
async function inventoryContentVersions(primary, physical, store, collection, after = 0, limit = 50, now = /* @__PURE__ */ new Date()) {
|
|
621
|
+
if (!Number.isSafeInteger(after) || after < 0 || !Number.isInteger(limit) || limit < 1 || limit > 100) throw new ContentStorageError("INVALID_CONFIG", "Select a valid version inventory page.");
|
|
622
|
+
if (!(await sql`SELECT physical_schema FROM _dineway_content_store_collections WHERE collection=${collection}`.execute(physical)).rows[0]) throw new ContentStorageError("INVALID_CONFIG", "Unknown physical content type.");
|
|
623
|
+
const sizes = [...(await sql`SELECT name FROM pragma_table_info(${"ec_" + collection})`.execute(physical)).rows.map(({ name }) => sql`coalesce(length(CAST(${sql.ref("c." + name)} AS BLOB)),0)`), ...[
|
|
624
|
+
"collection",
|
|
625
|
+
"entry_id",
|
|
626
|
+
"version",
|
|
627
|
+
"operation_id",
|
|
628
|
+
"digest",
|
|
629
|
+
"command",
|
|
630
|
+
"data",
|
|
631
|
+
"created_at"
|
|
632
|
+
].map((key) => sql`length(CAST(${sql.ref("v." + key)} AS BLOB))`)];
|
|
633
|
+
const groups = Array.from({ length: Math.ceil(sizes.length / 12) }, (_, i) => sql`(${sql.join(sizes.slice(i * 12, i * 12 + 12), sql` + `)})`);
|
|
634
|
+
const rows = (await sql`SELECT v.rowid AS cursor,v.entry_id,v.version,json_extract(v.command,'$.partition') AS partition,v.created_at,
|
|
635
|
+
${sql.join(groups, sql` + `)} AS payload_bytes FROM _dineway_content_versions v
|
|
636
|
+
JOIN ${sql.table("ec_" + collection)} c ON c.id=v.entry_id AND c._dineway_storage_version=v.version
|
|
637
|
+
WHERE v.collection=${collection} AND v.rowid>${after} ORDER BY v.rowid LIMIT ${limit}`.execute(physical)).rows;
|
|
638
|
+
const cutoff = (/* @__PURE__ */ new Date(now.getTime() - 7 * 864e5)).toISOString();
|
|
639
|
+
return {
|
|
640
|
+
store,
|
|
641
|
+
collection,
|
|
642
|
+
versions: (await sql`
|
|
643
|
+
WITH candidate AS (SELECT value AS v FROM json_each(${JSON.stringify(rows)})),
|
|
644
|
+
page AS (SELECT json_extract(v,'$.cursor') AS cursor,json_extract(v,'$.entry_id') AS entry_id,json_extract(v,'$.version') AS version,
|
|
645
|
+
json_extract(v,'$.partition') AS partition,json_extract(v,'$.created_at') AS created_at,json_extract(v,'$.payload_bytes') AS payload_bytes FROM candidate)
|
|
646
|
+
SELECT p.*,CASE WHEN EXISTS(SELECT 1 FROM _dineway_content_locations l WHERE l.collection=${collection} AND l.entry_id=p.entry_id AND l.store=${store} AND l.version=p.version)
|
|
647
|
+
OR EXISTS(SELECT 1 FROM revisions r WHERE r.collection=${collection} AND r.entry_id=p.entry_id AND json_extract(r.data,'$.__dineway_content_storage__.store')=${store} AND json_extract(r.data,'$.__dineway_content_storage__.version')=p.version) THEN 'referenced'
|
|
648
|
+
WHEN p.created_at>=${cutoff} OR EXISTS(SELECT 1 FROM _dineway_content_changes j WHERE j.collection=${collection} AND j.entry_id=p.entry_id AND j.changed_at>=${cutoff})
|
|
649
|
+
OR EXISTS(SELECT 1 FROM _dineway_content_operations o WHERE o.collection=${collection} AND o.entry_id=p.entry_id AND o.state='pending')
|
|
650
|
+
OR EXISTS(SELECT 1 FROM _dineway_content_migrations m WHERE m.collection=${collection} AND m.partition=p.partition AND (m.state NOT IN ('complete','cancelled') OR m.retain_until>=${now.toISOString()} OR m.updated_at>=${cutoff}))
|
|
651
|
+
THEN 'retained' ELSE 'review' END AS disposition FROM page p ORDER BY p.cursor`.execute(primary)).rows,
|
|
652
|
+
nextCursor: rows.length === limit ? rows.at(-1).cursor : null
|
|
653
|
+
};
|
|
654
|
+
}
|
|
655
|
+
|
|
656
|
+
//#endregion
|
|
657
|
+
export { stageContentMigrationEntry as a, bootstrapContentDirectoryPage as c, migrateContentStorageConfig as d, stageContentStorageBindings as f, rollbackContentMigration as i, captureContentMigrationSnapshot as l, activateContentMigrationEntry as n, verifyContentMigration as o, completeContentMigration as r, verifyContentMigrationPage as s, inventoryContentVersions as t, contentMigrationSnapshotSchema as u };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { n as RejectedReviewContentError, r as ReviewRequestRepository } from "./review-requests-DZYM51yI.mjs";
|
|
2
|
-
import { r as submitAutomatedReview, t as ReviewSubmissionError } from "./submission-
|
|
2
|
+
import { r as submitAutomatedReview, t as ReviewSubmissionError } from "./submission-_6ZXKy3N.mjs";
|
|
3
3
|
|
|
4
4
|
//#region src/api/handlers/review-requests.ts
|
|
5
5
|
async function handleReviewRequestCreate(db, handlers, input) {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { atomicBatch } from "./database/batch.mjs";
|
|
2
2
|
import { t as validateIdentifier } from "./validate-Co3j6T_K.mjs";
|
|
3
|
-
import {
|
|
4
|
-
import { n as readRevisionDataBatch, t as readRevisionData } from "./revisions-
|
|
3
|
+
import { f as contentPartitionWritable, i as getContentStorage } from "./runtime-CeGWfwh3.mjs";
|
|
4
|
+
import { n as readRevisionDataBatch, t as readRevisionData } from "./revisions-DG2-WBDb.mjs";
|
|
5
5
|
import { t as DinewayValidationError } from "./types-BI3ULB3A.mjs";
|
|
6
6
|
import { sql } from "kysely";
|
|
7
7
|
import { monotonicFactory } from "ulidx";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { o as ContentStorageError } from "./config
|
|
2
|
-
import {
|
|
1
|
+
import { o as ContentStorageError } from "./config-BhQacL9l.mjs";
|
|
2
|
+
import { i as getContentStorage } from "./runtime-CeGWfwh3.mjs";
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
|
|
5
5
|
//#region src/content-storage/revisions.ts
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AtomicBatch } from "./database/batch.mjs";
|
|
2
|
-
import { a as ContentStorageActivation, d as ContentStore, p as PreparedContentVersion, r as ContentPartitionResolver, s as ContentStorageConfig, t as ContentLocation } from "./types-
|
|
2
|
+
import { a as ContentStorageActivation, d as ContentStore, p as PreparedContentVersion, r as ContentPartitionResolver, s as ContentStorageConfig, t as ContentLocation } from "./types-BafdCfKt.mjs";
|
|
3
3
|
import { n as ContentStorageHookName, r as ContentStorageHookTarget } from "./hook-events-lN-kz-4_.mjs";
|
|
4
4
|
import { Kysely } from "kysely";
|
|
5
5
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { getRequestContext } from "./request-context.mjs";
|
|
2
2
|
import { atomicBatch, rowUnchanged } from "./database/batch.mjs";
|
|
3
|
-
import { a as validateContentStorage, i as resolveContentPartition, n as contentDigest, o as ContentStorageError, s as ContentStorageReplay, t as canonicalContentJson } from "./config
|
|
3
|
+
import { a as validateContentStorage, i as resolveContentPartition, n as contentDigest, o as ContentStorageError, s as ContentStorageReplay, t as canonicalContentJson } from "./config-BhQacL9l.mjs";
|
|
4
4
|
import { sql } from "kysely";
|
|
5
5
|
import { toPlainText } from "@portabletext/toolkit";
|
|
6
6
|
|
|
@@ -56,59 +56,6 @@ function contentChangeSequence(collection, entryId) {
|
|
|
56
56
|
return sql`(SELECT COALESCE(MAX(sequence),0) FROM _dineway_content_changes WHERE collection=${collection} AND entry_id=${entryId})`;
|
|
57
57
|
}
|
|
58
58
|
|
|
59
|
-
//#endregion
|
|
60
|
-
//#region src/content-storage/routing.ts
|
|
61
|
-
const MIGRATION_ID = /^[a-zA-Z0-9_-]{1,128}$/;
|
|
62
|
-
async function readContentPartitionRoute(db, collection, partition) {
|
|
63
|
-
const row = (await sql`SELECT * FROM _dineway_content_partitions WHERE collection = ${collection} AND partition = ${partition}`.execute(db)).rows[0];
|
|
64
|
-
if (!row) throw new ContentStorageError("ROUTE_CHANGED", "The content partition has not been installed.");
|
|
65
|
-
return {
|
|
66
|
-
route: row,
|
|
67
|
-
check: rowUnchanged("_dineway_content_partitions", { ...row })
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
/** Also fences metadata-only operations, such as trash, scheduling and review activation. */
|
|
71
|
-
function contentPartitionWritable(collection, id) {
|
|
72
|
-
return sql`NOT EXISTS (SELECT 1 FROM _dineway_content_locations l JOIN _dineway_content_partitions p ON p.collection = l.collection AND p.partition = l.partition WHERE l.collection = ${collection} AND l.entry_id = ${id} AND p.state = 'frozen')`;
|
|
73
|
-
}
|
|
74
|
-
/** Starts copying while the partition remains writable on its current store. */
|
|
75
|
-
async function beginContentMigration(db, config, migration) {
|
|
76
|
-
if (!MIGRATION_ID.test(migration.id)) throw new ContentStorageError("CONFLICT", "A stable migration identifier is required.");
|
|
77
|
-
const current = await readContentPartitionRoute(db, migration.collection, migration.partition);
|
|
78
|
-
if (current.route.migration_id === migration.id && current.route.state !== "active") return current.route;
|
|
79
|
-
const target = config.rules[migration.collection]?.stores[migration.partition];
|
|
80
|
-
if (!target || current.route.store === target || current.route.state !== "active" || current.route.migration_id) throw new ContentStorageError("CONFLICT", "The partition cannot start this migration.");
|
|
81
|
-
await atomicBatch(db, {
|
|
82
|
-
checks: [current.check, sql`EXISTS (SELECT 1 FROM _dineway_content_storage_config WHERE id='active' AND version=${config.version} AND digest=${await contentDigest(config)})`],
|
|
83
|
-
statements: [sql`INSERT INTO _dineway_content_migrations (id, collection, partition, source_store, target_store, routing_version, state, created_at, updated_at, retain_until) VALUES (${migration.id}, ${migration.collection}, ${migration.partition}, ${current.route.store}, ${target}, ${config.version}, 'copying', ${(/* @__PURE__ */ new Date()).toISOString()}, ${(/* @__PURE__ */ new Date()).toISOString()}, ${new Date(Date.now() + 7 * 864e5).toISOString()})`.compile(db), sql`UPDATE _dineway_content_partitions SET state='copying', migration_id=${migration.id}, target_store=${target}, epoch=epoch+1, updated_at=${(/* @__PURE__ */ new Date()).toISOString()} WHERE collection=${migration.collection} AND partition=${migration.partition}`.compile(db)]
|
|
84
|
-
});
|
|
85
|
-
return (await readContentPartitionRoute(db, migration.collection, migration.partition)).route;
|
|
86
|
-
}
|
|
87
|
-
/** Epoch fencing makes all previously prepared writes fail before primary activation. */
|
|
88
|
-
async function freezeContentPartition(db, migration) {
|
|
89
|
-
const current = await readContentPartitionRoute(db, migration.collection, migration.partition);
|
|
90
|
-
if (current.route.migration_id !== migration.id || !["copying", "frozen"].includes(current.route.state)) throw new ContentStorageError("CONFLICT", "The migration does not own this partition.");
|
|
91
|
-
if (current.route.state === "frozen") return current.route;
|
|
92
|
-
await atomicBatch(db, {
|
|
93
|
-
checks: [current.check, sql`NOT EXISTS (SELECT 1 FROM ${sql.table(`ec_${migration.collection}`)} c WHERE NOT EXISTS (SELECT 1 FROM _dineway_content_locations l WHERE l.collection=${migration.collection} AND l.entry_id=c.id))`],
|
|
94
|
-
statements: [
|
|
95
|
-
sql`UPDATE _dineway_content_migrations SET state='frozen', updated_at=${(/* @__PURE__ */ new Date()).toISOString()} WHERE id=${migration.id}`.compile(db),
|
|
96
|
-
sql`UPDATE _dineway_content_partitions SET state='frozen', epoch=epoch+1, updated_at=${(/* @__PURE__ */ new Date()).toISOString()} WHERE collection=${migration.collection} AND partition=${migration.partition}`.compile(db),
|
|
97
|
-
sql`UPDATE _dineway_content_operations SET state='aborted', updated_at=${(/* @__PURE__ */ new Date()).toISOString()} WHERE collection=${migration.collection} AND state='pending' AND json_extract(command, '$.partition')=${migration.partition}`.compile(db)
|
|
98
|
-
]
|
|
99
|
-
});
|
|
100
|
-
return (await readContentPartitionRoute(db, migration.collection, migration.partition)).route;
|
|
101
|
-
}
|
|
102
|
-
/** Resume the old store only while every entry still points to it. */
|
|
103
|
-
async function cancelContentMigration(db, migration) {
|
|
104
|
-
const current = await readContentPartitionRoute(db, migration.collection, migration.partition);
|
|
105
|
-
if (current.route.migration_id !== migration.id || current.route.state === "active") throw new ContentStorageError("CONFLICT", "The migration does not own this partition.");
|
|
106
|
-
await atomicBatch(db, {
|
|
107
|
-
checks: [current.check, sql`NOT EXISTS (SELECT 1 FROM _dineway_content_locations WHERE collection=${migration.collection} AND partition=${migration.partition} AND store<>${current.route.store})`],
|
|
108
|
-
statements: [sql`UPDATE _dineway_content_migrations SET state='cancelled', updated_at=${(/* @__PURE__ */ new Date()).toISOString()} WHERE id=${migration.id}`.compile(db), sql`UPDATE _dineway_content_partitions SET state='active', migration_id=NULL, epoch=epoch+1, updated_at=${(/* @__PURE__ */ new Date()).toISOString()} WHERE collection=${migration.collection} AND partition=${migration.partition}`.compile(db)]
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
|
|
112
59
|
//#endregion
|
|
113
60
|
//#region src/search/text-extraction.ts
|
|
114
61
|
/**
|
|
@@ -246,6 +193,59 @@ function prepareContentProjection(db, collection, item, fields, create, full = f
|
|
|
246
193
|
return create ? sql`INSERT INTO ${sql.table(`ec_${collection}`)} (${sql.join(columns.map((column) => sql.ref(column)))}) VALUES (${sql.join(columns.map((column) => values[column] === null ? sql`NULL` : sql`${values[column]}`))})`.compile(db) : sql`UPDATE ${sql.table(`ec_${collection}`)} SET ${sql.join(columns.filter((column) => column !== "id").map((column) => sql`${sql.ref(column)} = ${values[column] === null ? sql`NULL` : sql`${values[column]}`} `))} WHERE id = ${item.id}`.compile(db);
|
|
247
194
|
}
|
|
248
195
|
|
|
196
|
+
//#endregion
|
|
197
|
+
//#region src/content-storage/routing.ts
|
|
198
|
+
const MIGRATION_ID = /^[a-zA-Z0-9_-]{1,128}$/;
|
|
199
|
+
async function readContentPartitionRoute(db, collection, partition) {
|
|
200
|
+
const row = (await sql`SELECT * FROM _dineway_content_partitions WHERE collection = ${collection} AND partition = ${partition}`.execute(db)).rows[0];
|
|
201
|
+
if (!row) throw new ContentStorageError("ROUTE_CHANGED", "The content partition has not been installed.");
|
|
202
|
+
return {
|
|
203
|
+
route: row,
|
|
204
|
+
check: rowUnchanged("_dineway_content_partitions", { ...row })
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
/** Also fences metadata-only operations, such as trash, scheduling and review activation. */
|
|
208
|
+
function contentPartitionWritable(collection, id) {
|
|
209
|
+
return sql`NOT EXISTS (SELECT 1 FROM _dineway_content_locations l JOIN _dineway_content_partitions p ON p.collection = l.collection AND p.partition = l.partition WHERE l.collection = ${collection} AND l.entry_id = ${id} AND p.state = 'frozen')`;
|
|
210
|
+
}
|
|
211
|
+
/** Starts copying while the partition remains writable on its current store. */
|
|
212
|
+
async function beginContentMigration(db, config, migration) {
|
|
213
|
+
if (!MIGRATION_ID.test(migration.id)) throw new ContentStorageError("CONFLICT", "A stable migration identifier is required.");
|
|
214
|
+
const current = await readContentPartitionRoute(db, migration.collection, migration.partition);
|
|
215
|
+
if (current.route.migration_id === migration.id && current.route.state !== "active") return current.route;
|
|
216
|
+
const target = config.rules[migration.collection]?.stores[migration.partition];
|
|
217
|
+
if (!target || current.route.store === target || current.route.state !== "active" || current.route.migration_id) throw new ContentStorageError("CONFLICT", "The partition cannot start this migration.");
|
|
218
|
+
await atomicBatch(db, {
|
|
219
|
+
checks: [current.check, sql`EXISTS (SELECT 1 FROM _dineway_content_storage_config WHERE id IN ('active','bindings') AND version=${config.version} AND digest=${await contentDigest(config)})`],
|
|
220
|
+
statements: [sql`INSERT INTO _dineway_content_migrations (id, collection, partition, source_store, target_store, routing_version, state, created_at, updated_at, retain_until) VALUES (${migration.id}, ${migration.collection}, ${migration.partition}, ${current.route.store}, ${target}, ${config.version}, 'copying', ${(/* @__PURE__ */ new Date()).toISOString()}, ${(/* @__PURE__ */ new Date()).toISOString()}, ${new Date(Date.now() + 7 * 864e5).toISOString()})`.compile(db), sql`UPDATE _dineway_content_partitions SET state='copying', migration_id=${migration.id}, target_store=${target}, epoch=epoch+1, updated_at=${(/* @__PURE__ */ new Date()).toISOString()} WHERE collection=${migration.collection} AND partition=${migration.partition}`.compile(db)]
|
|
221
|
+
});
|
|
222
|
+
return (await readContentPartitionRoute(db, migration.collection, migration.partition)).route;
|
|
223
|
+
}
|
|
224
|
+
/** Epoch fencing makes all previously prepared writes fail before primary activation. */
|
|
225
|
+
async function freezeContentPartition(db, migration) {
|
|
226
|
+
const current = await readContentPartitionRoute(db, migration.collection, migration.partition);
|
|
227
|
+
if (current.route.migration_id !== migration.id || !["copying", "frozen"].includes(current.route.state)) throw new ContentStorageError("CONFLICT", "The migration does not own this partition.");
|
|
228
|
+
if (current.route.state === "frozen") return current.route;
|
|
229
|
+
await atomicBatch(db, {
|
|
230
|
+
checks: [current.check, sql`NOT EXISTS (SELECT 1 FROM ${sql.table(`ec_${migration.collection}`)} c WHERE NOT EXISTS (SELECT 1 FROM _dineway_content_locations l WHERE l.collection=${migration.collection} AND l.entry_id=c.id))`],
|
|
231
|
+
statements: [
|
|
232
|
+
sql`UPDATE _dineway_content_migrations SET state='frozen', updated_at=${(/* @__PURE__ */ new Date()).toISOString()} WHERE id=${migration.id}`.compile(db),
|
|
233
|
+
sql`UPDATE _dineway_content_partitions SET state='frozen', epoch=epoch+1, updated_at=${(/* @__PURE__ */ new Date()).toISOString()} WHERE collection=${migration.collection} AND partition=${migration.partition}`.compile(db),
|
|
234
|
+
sql`UPDATE _dineway_content_operations SET state='aborted', updated_at=${(/* @__PURE__ */ new Date()).toISOString()} WHERE collection=${migration.collection} AND state='pending' AND json_extract(command, '$.partition')=${migration.partition}`.compile(db)
|
|
235
|
+
]
|
|
236
|
+
});
|
|
237
|
+
return (await readContentPartitionRoute(db, migration.collection, migration.partition)).route;
|
|
238
|
+
}
|
|
239
|
+
/** Resume the old store only while every entry still points to it. */
|
|
240
|
+
async function cancelContentMigration(db, migration) {
|
|
241
|
+
const current = await readContentPartitionRoute(db, migration.collection, migration.partition);
|
|
242
|
+
if (current.route.migration_id !== migration.id || current.route.state === "active") throw new ContentStorageError("CONFLICT", "The migration does not own this partition.");
|
|
243
|
+
await atomicBatch(db, {
|
|
244
|
+
checks: [current.check, sql`NOT EXISTS (SELECT 1 FROM _dineway_content_locations WHERE collection=${migration.collection} AND partition=${migration.partition} AND store<>${current.route.store})`],
|
|
245
|
+
statements: [sql`UPDATE _dineway_content_migrations SET state='cancelled', updated_at=${(/* @__PURE__ */ new Date()).toISOString()} WHERE id=${migration.id}`.compile(db), sql`UPDATE _dineway_content_partitions SET state='active', migration_id=NULL, epoch=epoch+1, updated_at=${(/* @__PURE__ */ new Date()).toISOString()} WHERE collection=${migration.collection} AND partition=${migration.partition}`.compile(db)]
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
|
|
249
249
|
//#endregion
|
|
250
250
|
//#region src/content-storage/coordinator.ts
|
|
251
251
|
const locationKey = (location) => JSON.stringify([
|
|
@@ -367,7 +367,7 @@ var ContentStorageCoordinator = class {
|
|
|
367
367
|
const serialized = canonicalContentJson(command);
|
|
368
368
|
const existing = await this.operation(command.operationId);
|
|
369
369
|
if (existing && existing.command !== serialized) throw new ContentStorageError("CONFLICT", "An operation identifier cannot be reused for different content or authority.");
|
|
370
|
-
const routeCheck = sql`(${partition.check}) AND EXISTS (SELECT 1 FROM _dineway_content_storage_config WHERE id
|
|
370
|
+
const routeCheck = sql`(${partition.check}) AND EXISTS (SELECT 1 FROM _dineway_content_storage_config WHERE id IN ('active','bindings') AND version = ${this.config.version} AND digest = ${await this.configDigest})`;
|
|
371
371
|
const authority = await activation.authorize(command);
|
|
372
372
|
if (existing?.state === "committed") {
|
|
373
373
|
await atomicBatch(this.db, {
|
|
@@ -491,9 +491,11 @@ function contentStorageCacheScope() {
|
|
|
491
491
|
});
|
|
492
492
|
}
|
|
493
493
|
async function assertContentStorageConfiguration(db, config) {
|
|
494
|
-
const
|
|
495
|
-
|
|
496
|
-
|
|
494
|
+
const { rows } = await sql`SELECT id,version,digest FROM _dineway_content_storage_config WHERE id IN ('active','bindings')`.execute(db);
|
|
495
|
+
const digest = config && await contentDigest(config);
|
|
496
|
+
const active = rows.find((row) => row.id === "active");
|
|
497
|
+
if (!config && !rows.length) return;
|
|
498
|
+
if (!config || active?.version !== config.version || !rows.some((row) => row.version === config.version && row.digest === digest)) throw new ContentStorageError("UNAVAILABLE", "Content routing configuration does not match the installed database configuration. Apply the explicit content storage migration before serving requests.");
|
|
497
499
|
}
|
|
498
500
|
function getContentStorageRuntime(db) {
|
|
499
501
|
const context = getRequestContext();
|
|
@@ -523,6 +525,17 @@ function getContentStorage(db, collection) {
|
|
|
523
525
|
coordinator: new ContentStorageCoordinator(db, runtime.config, stores, runtime.resolvers)
|
|
524
526
|
};
|
|
525
527
|
}
|
|
528
|
+
/** Predicates run on the primary index before stored bodies are hydrated. */
|
|
529
|
+
async function assertContentQueryFields(db, collection, fields) {
|
|
530
|
+
const rule = getContentStorageRuntime(db)?.config.rules[collection];
|
|
531
|
+
if (!rule) return;
|
|
532
|
+
const candidates = [...new Set(fields)].filter((field) => !CONTENT_SYSTEM_FIELDS.has(field) && !rule.indexFields?.includes(field));
|
|
533
|
+
if (!candidates.length) return;
|
|
534
|
+
const { rows } = await sql`SELECT f.slug FROM _dineway_fields f JOIN _dineway_collections c ON c.id=f.collection_id
|
|
535
|
+
WHERE c.slug=${collection} AND f.column_type='JSON' AND coalesce(f."unique",0)=0 AND coalesce(f.searchable,0)=0
|
|
536
|
+
AND f.slug IN (SELECT value FROM json_each(${JSON.stringify(candidates)})) LIMIT 1`.execute(db);
|
|
537
|
+
if (rows[0]) throw new ContentStorageError("INVALID_CONFIG", `Querying ${collection}.${rows[0].slug} requires a primary index field.`);
|
|
538
|
+
}
|
|
526
539
|
/** Resolve a bounded primary-index page in bulk, retaining the selected metadata and order. */
|
|
527
540
|
async function hydrateContentRows(db, collection, rows, fields, publicLoaderRead = false) {
|
|
528
541
|
const storage = getContentStorage(db, collection);
|
|
@@ -532,6 +545,10 @@ async function hydrateContentRows(db, collection, rows, fields, publicLoaderRead
|
|
|
532
545
|
const locations = [];
|
|
533
546
|
for (let offset = 0; offset < ids.length; offset += 80) {
|
|
534
547
|
const result = await sql`SELECT l.collection, l.entry_id, l.store, l.partition, l.routing_version, l.version, l.digest, c.version AS _entry_version, c.updated_at AS _entry_updated_at, c.status AS _entry_status, c.deleted_at AS _entry_deleted_at FROM _dineway_content_locations l JOIN ${sql.table(`ec_${collection}`)} c ON c.id = l.entry_id WHERE l.collection = ${collection} AND l.entry_id IN (${sql.join(ids.slice(offset, offset + 80))})`.execute(db);
|
|
548
|
+
if (result.rows.length !== ids.slice(offset, offset + 80).length) {
|
|
549
|
+
const { rows: routed } = await sql`SELECT 1 FROM _dineway_content_partitions WHERE collection=${collection} AND (store<>'primary' OR state='frozen') LIMIT 1`.execute(db);
|
|
550
|
+
if (routed.length) throw new ContentStorageError("UNAVAILABLE", "The content directory is missing a routed entry. Verify its location before retrying.");
|
|
551
|
+
}
|
|
535
552
|
for (const location of result.rows) {
|
|
536
553
|
const previous = byId.get(location.entry_id);
|
|
537
554
|
if (previous.version !== location._entry_version || [
|
|
@@ -597,4 +614,4 @@ async function hydrateContentRows(db, collection, rows, fields, publicLoaderRead
|
|
|
597
614
|
}
|
|
598
615
|
|
|
599
616
|
//#endregion
|
|
600
|
-
export {
|
|
617
|
+
export { prepareContentProjection as _, getContentStorageRuntime as a, contentChangeSequence as b, ContentStorageCoordinator as c, cancelContentMigration as d, contentPartitionWritable as f, contentProjectionValues as g, assertContentIndexFields as h, getContentStorage as i, installContentStorageConfig as l, readContentPartitionRoute as m, assertContentStorageConfiguration as n, hydrateContentRows as o, freezeContentPartition as p, contentStorageCacheScope as r, registerContentStorage as s, assertContentQueryFields as t, beginContentMigration as u, extractPlainText as v, prepareContentChangeJournal as x, extractSearchableFields as y };
|
package/dist/runtime.d.mts
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { $s as getDb, Js as EntryData, Qs as dinewayLoader, Ys as EntryFilter, qs as CollectionFilter } from "./types-
|
|
1
|
+
import { $s as getDb, Js as EntryData, Qs as dinewayLoader, Ys as EntryFilter, qs as CollectionFilter } from "./types-CTbitmIM.mjs";
|
|
2
2
|
import "./types-CG9uGPBL.mjs";
|
|
3
3
|
import "./runner-DlkOiguI.mjs";
|
|
4
4
|
import "./index-_fCUsJx9.mjs";
|
|
5
|
-
import "./types-
|
|
5
|
+
import "./types-BafdCfKt.mjs";
|
|
6
6
|
import "./types-DLwh1QkC.mjs";
|
|
7
7
|
import "./adapters-cL325h6c.mjs";
|
|
8
|
-
import "./runtime-
|
|
8
|
+
import "./runtime-BEiDcRPk.mjs";
|
|
9
9
|
import "./hook-events-lN-kz-4_.mjs";
|
|
10
10
|
import "./scheduled-publish-7kZkKw7t.mjs";
|
|
11
11
|
import "./public-url-CvNSyMJJ.mjs";
|
|
12
12
|
import "./validate-CleBZbkv.mjs";
|
|
13
|
-
import "./byline-fields-
|
|
13
|
+
import "./byline-fields-B117F62r.mjs";
|
|
14
14
|
import { withPrimaryDatabase } from "./request-context.mjs";
|
|
15
15
|
import "./types-BuplUVZ4.mjs";
|
|
16
16
|
import { t as getMediaProvider } from "./provider-loader-Dl8SscrT.mjs";
|
package/dist/runtime.mjs
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { withPrimaryDatabase } from "./request-context.mjs";
|
|
2
2
|
import "./d1-binding-DrLMBUxu.mjs";
|
|
3
3
|
import "./dialect-helpers-C6xtO-Ui.mjs";
|
|
4
|
-
import "./config
|
|
5
|
-
import "./runtime-
|
|
6
|
-
import "./revisions-
|
|
4
|
+
import "./config-BhQacL9l.mjs";
|
|
5
|
+
import "./runtime-CeGWfwh3.mjs";
|
|
6
|
+
import "./revisions-DG2-WBDb.mjs";
|
|
7
7
|
import "./runtime-env-DpYGy4pT.mjs";
|
|
8
8
|
import "./base64-qvSs0Gxy.mjs";
|
|
9
9
|
import "./types-BI3ULB3A.mjs";
|
|
10
|
-
import { n as dinewayLoader, r as getDb } from "./loader
|
|
10
|
+
import { n as dinewayLoader, r as getDb } from "./loader-CrVkVaD6.mjs";
|
|
11
11
|
import { t as getMediaProvider } from "./provider-loader-BWu5kGxR.mjs";
|
|
12
12
|
|
|
13
13
|
export { dinewayLoader, getDb, getMediaProvider, withPrimaryDatabase };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { c as __exportAll } from "./runner-CuG8o1uW.mjs";
|
|
2
|
-
import { n as SchemaRegistry } from "./registry-
|
|
2
|
+
import { n as SchemaRegistry } from "./registry-CdeSHG0k.mjs";
|
|
3
3
|
|
|
4
4
|
//#region src/schema/index.ts
|
|
5
5
|
var schema_exports = /* @__PURE__ */ __exportAll({ SchemaRegistry: () => SchemaRegistry });
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { c as __exportAll } from "./runner-CuG8o1uW.mjs";
|
|
2
2
|
import { t as validateIdentifier } from "./validate-Co3j6T_K.mjs";
|
|
3
|
-
import { r as getDb } from "./loader
|
|
3
|
+
import { r as getDb } from "./loader-CrVkVaD6.mjs";
|
|
4
4
|
import { t as FTSManager } from "./fts-manager-BHwhq1lC.mjs";
|
|
5
5
|
import { sql } from "kysely";
|
|
6
6
|
|
package/dist/seed/index.mjs
CHANGED
|
@@ -1,40 +1,40 @@
|
|
|
1
1
|
import "../d1-binding-DrLMBUxu.mjs";
|
|
2
2
|
import "../dialect-helpers-C6xtO-Ui.mjs";
|
|
3
|
-
import "../config
|
|
4
|
-
import "../runtime-
|
|
5
|
-
import "../revisions-
|
|
3
|
+
import "../config-BhQacL9l.mjs";
|
|
4
|
+
import "../runtime-CeGWfwh3.mjs";
|
|
5
|
+
import "../revisions-DG2-WBDb.mjs";
|
|
6
6
|
import "../runtime-env-DpYGy4pT.mjs";
|
|
7
7
|
import "../base64-qvSs0Gxy.mjs";
|
|
8
8
|
import "../types-BI3ULB3A.mjs";
|
|
9
|
-
import "../loader
|
|
9
|
+
import "../loader-CrVkVaD6.mjs";
|
|
10
10
|
import "../actor-D0AW80ld.mjs";
|
|
11
11
|
import "../atomic-authority-Bf5QZboB.mjs";
|
|
12
|
-
import "../content-
|
|
12
|
+
import "../content-CIWw08LO.mjs";
|
|
13
13
|
import "../request-cache-CizvDoxV.mjs";
|
|
14
14
|
import "../byline-registry-Caj0_gbU.mjs";
|
|
15
15
|
import "../field-defs-cache-dn5Tw79A.mjs";
|
|
16
|
-
import "../object-cache-
|
|
17
|
-
import "../byline-
|
|
18
|
-
import "../owned-metadata-
|
|
19
|
-
import "../revision-
|
|
16
|
+
import "../object-cache-DRx6IjWR.mjs";
|
|
17
|
+
import "../byline-CYc3Hn1i.mjs";
|
|
18
|
+
import "../owned-metadata-DFODPEuj.mjs";
|
|
19
|
+
import "../revision-DX_AHhhE.mjs";
|
|
20
20
|
import "../media-BjH5OD-A.mjs";
|
|
21
21
|
import "../user-Bl2_8rhJ.mjs";
|
|
22
|
-
import "../terms-
|
|
23
|
-
import "../taxonomy-
|
|
22
|
+
import "../terms-D4OJs0Zh.mjs";
|
|
23
|
+
import "../taxonomy-CKv3RKf1.mjs";
|
|
24
24
|
import "../options-yFkLUuTw.mjs";
|
|
25
25
|
import "../redirect-CJ-FAbNK.mjs";
|
|
26
|
-
import "../content-write-
|
|
27
|
-
import "../version-store-
|
|
28
|
-
import "../write-intent-
|
|
29
|
-
import "../seo-
|
|
30
|
-
import "../content-refresh-
|
|
26
|
+
import "../content-write-BjTJiZhK.mjs";
|
|
27
|
+
import "../version-store-xhBmPoC-.mjs";
|
|
28
|
+
import "../write-intent-ChTUctBF.mjs";
|
|
29
|
+
import "../seo-DYjDvLHM.mjs";
|
|
30
|
+
import "../content-refresh-lqCnhHGP.mjs";
|
|
31
31
|
import "../ssrf-C7tTSD1r.mjs";
|
|
32
32
|
import "../fts-manager-BHwhq1lC.mjs";
|
|
33
33
|
import "../public-discovery-CGRirTJH.mjs";
|
|
34
|
-
import "../registry-
|
|
35
|
-
import "../settings-
|
|
34
|
+
import "../registry-CdeSHG0k.mjs";
|
|
35
|
+
import "../settings-opr6BnNM.mjs";
|
|
36
36
|
import { t as validateSeed } from "../validate-WOW5vZz_.mjs";
|
|
37
|
-
import { t as applySeed } from "../apply-
|
|
37
|
+
import { t as applySeed } from "../apply-BlVVbjbz.mjs";
|
|
38
38
|
import { t as defaultSeed } from "../default-BxRRjN_x.mjs";
|
|
39
39
|
import { n as loadUserSeed, t as loadSeed } from "../load-XTcFS1Dp.mjs";
|
|
40
40
|
|
package/dist/seo/index.mjs
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import "../d1-binding-DrLMBUxu.mjs";
|
|
2
2
|
import "../dialect-helpers-C6xtO-Ui.mjs";
|
|
3
|
-
import "../config
|
|
4
|
-
import "../runtime-
|
|
5
|
-
import "../revisions-
|
|
3
|
+
import "../config-BhQacL9l.mjs";
|
|
4
|
+
import "../runtime-CeGWfwh3.mjs";
|
|
5
|
+
import "../revisions-DG2-WBDb.mjs";
|
|
6
6
|
import "../base64-qvSs0Gxy.mjs";
|
|
7
7
|
import "../types-BI3ULB3A.mjs";
|
|
8
|
-
import "../content-refresh-
|
|
8
|
+
import "../content-refresh-lqCnhHGP.mjs";
|
|
9
9
|
import "../fts-manager-BHwhq1lC.mjs";
|
|
10
10
|
import { i as satisfiesPublicDiscoveryRules } from "../public-discovery-CGRirTJH.mjs";
|
|
11
|
-
import "../registry-
|
|
12
|
-
import { n as resolveCanonicalUrl, t as listPublicContent } from "../discovery-
|
|
11
|
+
import "../registry-CdeSHG0k.mjs";
|
|
12
|
+
import { n as resolveCanonicalUrl, t as listPublicContent } from "../discovery-DLzhlF9z.mjs";
|
|
13
13
|
import { t as resolveContentUrl } from "../public-url-NCefkiXz.mjs";
|
|
14
14
|
import { t as buildSeoImageUrl } from "../media-url-VHHHoHGL.mjs";
|
|
15
15
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { atomicBatch } from "./database/batch.mjs";
|
|
2
|
-
import {
|
|
3
|
-
import { o as invalidateCollectionCache } from "./object-cache-
|
|
2
|
+
import { i as getContentStorage } from "./runtime-CeGWfwh3.mjs";
|
|
3
|
+
import { o as invalidateCollectionCache } from "./object-cache-DRx6IjWR.mjs";
|
|
4
4
|
import { n as chunks, t as SQL_BATCH_SIZE } from "./chunks-Bb56aCtB.mjs";
|
|
5
5
|
import { sql } from "kysely";
|
|
6
6
|
|
|
@@ -108,7 +108,7 @@ var SeoRepository = class {
|
|
|
108
108
|
}
|
|
109
109
|
async upsert(collection, contentId, input) {
|
|
110
110
|
if (getContentStorage(this.db, collection)) {
|
|
111
|
-
const { prepareContentWrite } = await import("./content-write-
|
|
111
|
+
const { prepareContentWrite } = await import("./content-write-BjTJiZhK.mjs").then((n) => n.t);
|
|
112
112
|
const write = await prepareContentWrite(this.db, collection, {
|
|
113
113
|
id: contentId,
|
|
114
114
|
seo: input,
|
|
@@ -153,8 +153,8 @@ var SeoRepository = class {
|
|
|
153
153
|
}
|
|
154
154
|
async copyForDuplicate(collection, sourceId, targetId) {
|
|
155
155
|
if (getContentStorage(this.db, collection)) {
|
|
156
|
-
const { snapshotOwnedContentMetadata } = await import("./owned-metadata-
|
|
157
|
-
const { prepareContentWrite } = await import("./content-write-
|
|
156
|
+
const { snapshotOwnedContentMetadata } = await import("./owned-metadata-DFODPEuj.mjs").then((n) => n.n);
|
|
157
|
+
const { prepareContentWrite } = await import("./content-write-BjTJiZhK.mjs").then((n) => n.t);
|
|
158
158
|
const source = await snapshotOwnedContentMetadata(this.db, collection, sourceId);
|
|
159
159
|
const seo = await this.get(collection, sourceId);
|
|
160
160
|
const write = await prepareContentWrite(this.db, collection, {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as validateIdentifier } from "./validate-Co3j6T_K.mjs";
|
|
2
|
-
import { s as invalidateCommentObjectCache } from "./object-cache-
|
|
3
|
-
import { t as CommentRepository } from "./comment-
|
|
2
|
+
import { s as invalidateCommentObjectCache } from "./object-cache-DRx6IjWR.mjs";
|
|
3
|
+
import { t as CommentRepository } from "./comment-BnrzhX9M.mjs";
|
|
4
4
|
import { t as escapeHtml } from "./escape-BfbDyuQ-.mjs";
|
|
5
5
|
import { sql } from "kysely";
|
|
6
6
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { c as __exportAll } from "./runner-CuG8o1uW.mjs";
|
|
2
|
-
import { a as getSiteSettingsWithDb, s as setSiteSettings } from "./settings-
|
|
2
|
+
import { a as getSiteSettingsWithDb, s as setSiteSettings } from "./settings-opr6BnNM.mjs";
|
|
3
3
|
|
|
4
4
|
//#region src/api/handlers/settings.ts
|
|
5
5
|
var settings_exports = /* @__PURE__ */ __exportAll({
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { getRequestContext } from "./request-context.mjs";
|
|
2
2
|
import { after } from "./after.mjs";
|
|
3
|
-
import { r as getDb } from "./loader
|
|
3
|
+
import { r as getDb } from "./loader-CrVkVaD6.mjs";
|
|
4
4
|
import { n as peekRequestCache, r as requestCached } from "./request-cache-CizvDoxV.mjs";
|
|
5
5
|
import { n as invalidateProcessCache, r as processCachedAsync, t as createProcessCache } from "./process-cache-CMy5M80h.mjs";
|
|
6
|
-
import { l as invalidateObjectCache, n as cachedQuery, t as CacheNamespace } from "./object-cache-
|
|
6
|
+
import { l as invalidateObjectCache, n as cachedQuery, t as CacheNamespace } from "./object-cache-DRx6IjWR.mjs";
|
|
7
7
|
import { t as MediaRepository } from "./media-BjH5OD-A.mjs";
|
|
8
8
|
import { t as OptionsRepository } from "./options-yFkLUuTw.mjs";
|
|
9
9
|
import { i as resolvePublicMediaUrl } from "./url-RhtABurq.mjs";
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
import { atomicBatch, rowUnchanged } from "./database/batch.mjs";
|
|
2
2
|
import { t as validateIdentifier } from "./validate-Co3j6T_K.mjs";
|
|
3
3
|
import { i as encodeCursor, r as decodeCursor } from "./types-BI3ULB3A.mjs";
|
|
4
|
-
import { t as ContentRepository } from "./content-
|
|
4
|
+
import { t as ContentRepository } from "./content-CIWw08LO.mjs";
|
|
5
5
|
import { t as SiteActivityRepository } from "./site-activity-hpfJkmxQ.mjs";
|
|
6
6
|
import { r as ReviewRequestRepository } from "./review-requests-DZYM51yI.mjs";
|
|
7
|
-
import { o as HitlRequestRepository } from "./publication-authorization-
|
|
7
|
+
import { o as HitlRequestRepository } from "./publication-authorization-C2X-Qj7L.mjs";
|
|
8
8
|
import { l as isPattern } from "./cache-DsEbwFVE.mjs";
|
|
9
9
|
import { n as buildStableActionHash, t as ReviewPayloadBuilder } from "./review-payload-mDJIgcFy.mjs";
|
|
10
|
-
import { i as parseSiteBriefingScope, l as handlePluginList, m as ContextRepository } from "./briefing-
|
|
10
|
+
import { i as parseSiteBriefingScope, l as handlePluginList, m as ContextRepository } from "./briefing-DoFv4isE.mjs";
|
|
11
11
|
import { t as FTSManager } from "./fts-manager-BHwhq1lC.mjs";
|
|
12
|
-
import { n as SchemaRegistry } from "./registry-
|
|
13
|
-
import { a as getSiteSettingsWithDb } from "./settings-
|
|
12
|
+
import { n as SchemaRegistry } from "./registry-CdeSHG0k.mjs";
|
|
13
|
+
import { a as getSiteSettingsWithDb } from "./settings-opr6BnNM.mjs";
|
|
14
14
|
import { n as assertExperimentalSiteContextWorkflowsEnabled } from "./experimental-workflows-BtKXzyIH.mjs";
|
|
15
15
|
import { m as normalizeUrl } from "./utils-WY63JOPB.mjs";
|
|
16
16
|
import { t as sanitizeWordPressImportSlug } from "./wordpress-slugs-qNcYNJGj.mjs";
|
|
17
|
-
import { a as searchCollection } from "./search-
|
|
17
|
+
import { a as searchCollection } from "./search-kRXT1_11.mjs";
|
|
18
18
|
import { sql } from "kysely";
|
|
19
19
|
import { ulid } from "ulidx";
|
|
20
20
|
import { Role } from "@dineway-ai/auth";
|