@commonpub/server 2.55.0 → 2.57.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -29,7 +29,12 @@ export { createRateLimitStore, createRedisClient, createRealtimePubSub, createRe
29
29
  export type { RealtimePubSub, RedisClient, FailOpenHook } from '@commonpub/infra';
30
30
  export { publishSseEvent, subscribeSseEvents, realtimeChannel, resetRealtimeForTests } from './realtime/index.js';
31
31
  export type { SseEventPayload } from './realtime/index.js';
32
- export { resolveTheme, getCustomTokenOverrides, setUserTheme } from './theme.js';
32
+ export { resolveTheme, getCustomTokenOverrides, setUserTheme, listCustomThemes, getCustomTheme, saveCustomTheme, deleteCustomTheme, customThemeDataAttr, parseCustomThemeId, CUSTOM_THEME_PREFIX, } from './theme.js';
33
+ export type { CustomThemeRecord } from './theme.js';
34
+ export { listLayouts, getLayoutByScope, getLayoutById, saveLayout, deleteLayout, publishLayout, listLayoutVersions, revertToVersion, } from './layout/layout.js';
35
+ export type { LayoutScope, LayoutInput, LayoutRecord, LayoutZone, LayoutZoneInput, LayoutRowInput, LayoutRowResolved, LayoutSectionInput, LayoutSectionResolved, LayoutVersionRecord, LayoutPageMeta, } from './layout/layout.js';
36
+ export { seedHomepageLayout } from './layout/seed.js';
37
+ export type { SeedHomepageResult } from './layout/seed.js';
33
38
  export { getOrCreateActorKeypair, getOrCreateInstanceKeypair, buildInstanceActor, resolveRemoteActor, searchRemoteActor, getRemoteActorProfile, sendFollow, acceptFollow, rejectFollow, unfollowRemote, federateContent, federateUpdate, federateDelete, federateLike, federateUnlike, buildContentUri, resolveContentObjectUri, getContentSlugById, getFollowers, getFollowing, listFederationActivity, createInboxHandlers, deliverPendingActivities, listFederatedTimeline, getFederatedContent, likeRemoteContent, boostRemoteContent, federateReply, listRemoteReplies, incrementFederatedViewCount, searchFederatedContent, getHubActorUri, getOrCreateHubKeypair, buildHubGroupActor, handleHubFollow, handleHubUnfollow, getHubFederatedFollowers, federateHubActor, federateHubPost, federateHubShare, federateHubPostDelete, federateHubPostUpdate, federateHubPostLike, federateHubPostUnlike, federateHubPostReply, federateHubUpdate, sendPostToRemoteHub, getHubPostNoteUri, createMirror, activateMirror, pauseMirror, resumeMirror, cancelMirror, listMirrors, getMirror, type MirrorConfig, processAuthorize, processTokenExchange, registerOAuthClient, linkFederatedAccount, findUserByFederatedAccount, listOAuthClients, resolveRemoteHandle, federateDirectMessage, isFederatedHandle, processDynamicRegistration, storeOAuthState, consumeOAuthState, exchangeCodeForToken, createFederatedSession, storePendingLink, consumePendingLink, getStoredTrustedInstances, addTrustedInstance, removeTrustedInstance, isDomainTrusted, type AuthorizeResult, type TokenResult, type OAuthLoginState, type FederatedSessionResult, type PendingLinkData, type RemoteActorProfile, type FederatedContentItem, type FederatedTimelineOptions, repairFederatedContentTypes, type InboxHandlerOptions, type DeliveryResult, type DeliveryOptions, cleanupDeliveredActivities, backfillFromOutbox, type BackfillResult, countOutboxItems, countInstanceOutboxItems, getOutboxPage, getInstanceOutboxPage, countHubOutboxItems, getHubOutboxPage, isCircuitOpen, recordDeliverySuccess, recordDeliveryFailure, getDeliveryHealth, listFederatedHubs, getFederatedHub, getFederatedHubByActorUri, followRemoteHub, sendHubFollow, acceptHubFollow, unfollowRemoteHub, autoDiscoverHub, ingestFederatedHubPost, getFederatedHubPost, listFederatedHubPosts, listFederatedHubMembers, upsertFederatedHubMember, deleteFederatedHubPost, likeFederatedHubPost, unlikeFederatedHubPost, createFederatedHubPostReply, listFederatedHubPostReplies, backfillHubFromOutbox, fetchRemoteHubFollowers, repairFederatedHubPostActors, refreshFederatedHubMetadata, toggleFederatedHubPostLike, joinFederatedHub, getFederatedHubFollowStatus, getLikedFederatedHubPostIds, } from './federation/index.js';
34
39
  export { storeAuthCode, consumeAuthCode, cleanupExpiredCodes } from './oauthCodes.js';
35
40
  export { listContests, getContestBySlug, createContest, updateContest, listContestEntries, submitContestEntry, judgeContestEntry, deleteContest, transitionContestStatus, calculateContestRanks, withdrawContestEntry, } from './contest/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -30,7 +30,11 @@ export { createRateLimitStore, createRedisClient, createRealtimePubSub, createRe
30
30
  // Realtime pub/sub singleton for SSE fanout
31
31
  export { publishSseEvent, subscribeSseEvents, realtimeChannel, resetRealtimeForTests } from './realtime/index.js';
32
32
  // Theme
33
- export { resolveTheme, getCustomTokenOverrides, setUserTheme } from './theme.js';
33
+ export { resolveTheme, getCustomTokenOverrides, setUserTheme, listCustomThemes, getCustomTheme, saveCustomTheme, deleteCustomTheme, customThemeDataAttr, parseCustomThemeId, CUSTOM_THEME_PREFIX, } from './theme.js';
34
+ // Layout engine (Phase 1 — session 157)
35
+ export { listLayouts, getLayoutByScope, getLayoutById, saveLayout, deleteLayout, publishLayout, listLayoutVersions, revertToVersion, } from './layout/layout.js';
36
+ // Layout engine — homepage seed helper (Phase 1c — session 158)
37
+ export { seedHomepageLayout } from './layout/seed.js';
34
38
  // Federation
35
39
  export { getOrCreateActorKeypair, getOrCreateInstanceKeypair, buildInstanceActor, resolveRemoteActor, searchRemoteActor, getRemoteActorProfile, sendFollow, acceptFollow, rejectFollow, unfollowRemote, federateContent, federateUpdate, federateDelete, federateLike, federateUnlike, buildContentUri, resolveContentObjectUri, getContentSlugById, getFollowers, getFollowing, listFederationActivity, createInboxHandlers, deliverPendingActivities, listFederatedTimeline, getFederatedContent, likeRemoteContent, boostRemoteContent, federateReply, listRemoteReplies, incrementFederatedViewCount, searchFederatedContent, getHubActorUri, getOrCreateHubKeypair, buildHubGroupActor, handleHubFollow, handleHubUnfollow, getHubFederatedFollowers, federateHubActor, federateHubPost, federateHubShare, federateHubPostDelete, federateHubPostUpdate, federateHubPostLike, federateHubPostUnlike, federateHubPostReply, federateHubUpdate, sendPostToRemoteHub, getHubPostNoteUri, createMirror, activateMirror, pauseMirror, resumeMirror, cancelMirror, listMirrors, getMirror, processAuthorize, processTokenExchange, registerOAuthClient, linkFederatedAccount, findUserByFederatedAccount, listOAuthClients, resolveRemoteHandle, federateDirectMessage, isFederatedHandle, processDynamicRegistration, storeOAuthState, consumeOAuthState, exchangeCodeForToken, createFederatedSession, storePendingLink, consumePendingLink, getStoredTrustedInstances, addTrustedInstance, removeTrustedInstance, isDomainTrusted, repairFederatedContentTypes, cleanupDeliveredActivities, backfillFromOutbox, countOutboxItems, countInstanceOutboxItems, getOutboxPage, getInstanceOutboxPage, countHubOutboxItems, getHubOutboxPage, isCircuitOpen, recordDeliverySuccess, recordDeliveryFailure, getDeliveryHealth,
36
40
  // Hub mirroring
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AA2ErE,YAAY;AACZ,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAExE,gBAAgB;AAChB,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,wBAAwB,EACxB,6BAA6B,EAC7B,mBAAmB,EACnB,SAAS,EACT,mBAAmB,EACnB,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAGpB,UAAU;AACV,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,WAAW,EACX,oBAAoB,EACpB,eAAe,EACf,wBAAwB,EACxB,aAAa,EACb,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAG5B,qBAAqB;AACrB,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,wBAAwB,EACxB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAG5B,OAAO;AACP,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,SAAS,EACT,SAAS,EACT,SAAS,EACT,OAAO,EACP,QAAQ,EACR,SAAS,EACT,WAAW,EACX,iBAAiB,EACjB,UAAU,EACV,UAAU,EACV,UAAU,EACV,QAAQ,EACR,SAAS,EACT,UAAU,EACV,aAAa,EACb,cAAc,EACd,WAAW,EACX,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,WAAW,EACX,WAAW,EACX,WAAW,EACX,OAAO,EACP,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,oBAAoB,EACpB,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,cAAc,EACd,UAAU,GACX,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AAExB,WAAW;AACX,OAAO,EACL,aAAa,EACb,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,GACf,MAAM,oBAAoB,CAAC;AAQ5B,SAAS;AACT,OAAO,EACL,UAAU,EACV,OAAO,EACT,YAAY,EACV,YAAY,EACZ,aAAa,EACb,aAAa,EACb,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,UAAU,EACV,YAAY,EACZ,WAAW,EACX,aAAa,EACb,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAG3B,WAAW;AACX,OAAO,EACL,SAAS,EACT,aAAa,EACb,UAAU,EACV,UAAU,EACV,UAAU,EACV,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,MAAM,EACN,QAAQ,EACR,kBAAkB,EAClB,aAAa,EACb,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,eAAe,EACf,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAE7B,OAAO;AACP,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,cAAc,EACd,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAEzB,yBAAyB;AACzB,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAChB,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,UAAU,EACV,aAAa,EACb,sBAAsB,GACvB,MAAM,kBAAkB,CAAC;AAY1B,UAAU;AACV,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAG1G,WAAW;AACX,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,qBAAqB,EACrB,aAAa,EACb,oBAAoB,EACpB,cAAc,EACd,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,WAAW,GACZ,MAAM,eAAe,CAAC;AAGvB,2DAA2D;AAC3D,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,kBAAkB,CAAC;AAG1B,4CAA4C;AAC5C,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAGlH,QAAQ;AACR,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEjF,aAAa;AACb,OAAO,EACL,uBAAuB,EACvB,0BAA0B,EAC1B,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,eAAe,EACf,cAAc,EACd,cAAc,EACd,YAAY,EACZ,cAAc,EACd,eAAe,EACf,uBAAuB,EACvB,kBAAkB,EAClB,YAAY,EACZ,YAAY,EACZ,sBAAsB,EACtB,mBAAmB,EACnB,wBAAwB,EACxB,qBAAqB,EACrB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,2BAA2B,EAC3B,sBAAsB,EACtB,cAAc,EACd,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,wBAAwB,EACxB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,SAAS,EAET,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,0BAA0B,EAC1B,gBAAgB,EAChB,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,0BAA0B,EAC1B,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EACtB,gBAAgB,EAChB,kBAAkB,EAClB,yBAAyB,EACzB,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EASf,2BAA2B,EAI3B,0BAA0B,EAC1B,kBAAkB,EAElB,gBAAgB,EAChB,wBAAwB,EACxB,aAAa,EACb,qBAAqB,EACrB,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,EACb,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB;AACjB,gBAAgB;AAChB,iBAAiB,EACjB,eAAe,EACf,yBAAyB,EACzB,eAAe,EACf,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,EACtB,oBAAoB,EACpB,sBAAsB,EACtB,2BAA2B,EAC3B,2BAA2B,EAC3B,qBAAqB,EACrB,uBAAuB,EACvB,4BAA4B,EAC5B,2BAA2B,EAC3B,0BAA0B,EAC1B,gBAAgB,EAChB,2BAA2B,EAC3B,2BAA2B,GAC5B,MAAM,uBAAuB,CAAC;AAE/B,cAAc;AACd,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtF,UAAU;AACV,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,uBAAuB,EACvB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAQ5B,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,cAAc,GACf,MAAM,qBAAqB,CAAC;AAM7B,eAAe;AACf,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,oBAAoB,EACpB,wBAAwB,EACxB,kBAAkB,EAClB,kBAAkB,EAClB,uBAAuB,EACvB,0BAA0B,EAC1B,0BAA0B,GAC3B,MAAM,yBAAyB,CAAC;AAGjC,YAAY;AACZ,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,kBAAkB,EAClB,wBAAwB,EACxB,WAAW,EACX,gBAAgB,EAChB,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,sBAAsB,CAAC;AAG9B,QAAQ;AACR,OAAO,EACL,UAAU,EACV,YAAY,EACZ,WAAW,EACX,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAQ1B,OAAO;AACP,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,UAAU;AACV,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAGtB,mBAAmB;AACnB,OAAO,EACL,YAAY,EACZ,cAAc,EACd,cAAc,GACf,MAAM,YAAY,CAAC;AAGpB,WAAW;AACX,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAGhC,SAAS;AACT,OAAO,EACL,UAAU,EACV,cAAc,EACd,WAAW,EACX,WAAW,EACX,WAAW,EACX,kBAAkB,EAClB,SAAS,EACT,UAAU,EACV,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAa5B,SAAS;AACT,OAAO,EACL,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,UAAU,EACV,eAAe,EACf,kBAAkB,EAClB,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAQ5B,aAAa;AACb,OAAO,EACL,WAAW,EACX,WAAW,EACX,aAAa,EACb,iBAAiB,GAClB,MAAM,4BAA4B,CAAC;AAGpC,SAAS;AACT,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,kBAAkB,EAClB,YAAY,EACZ,eAAe,EACf,qBAAqB,GACtB,MAAM,2BAA2B,CAAC;AAOnC,SAAS;AACT,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAGhH,QAAQ;AACR,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,cAAc,GACf,MAAM,YAAY,CAAC;AAGpB,+DAA+D;AAC/D,cAAc,sBAAsB,CAAC;AAerC,OAAO,EACL,GAAG,EACH,aAAa,EACb,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,+BAA+B,GAChC,MAAM,qBAAqB,CAAC;AAI7B,OAAO,EACL,uBAAuB,EACvB,2BAA2B,GAC5B,MAAM,uBAAuB,CAAC;AAS/B,OAAO,EACL,WAAW,EACX,yBAAyB,EACzB,iBAAiB,EACjB,uBAAuB,EACvB,yBAAyB,EACzB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,+BAA+B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,147 @@
1
+ import type { DB } from '../types.js';
2
+ /** Scope of a layout — what the layout is FOR. Discriminated union. */
3
+ export type LayoutScope = {
4
+ type: 'route';
5
+ path: string;
6
+ } | {
7
+ type: 'virtual';
8
+ key: '__footer' | '__not-found' | '__error';
9
+ } | {
10
+ type: 'custom-page';
11
+ path: string;
12
+ };
13
+ export interface LayoutPageMeta {
14
+ title: string;
15
+ description?: string;
16
+ ogImage?: string;
17
+ noindex?: boolean;
18
+ ogType?: 'website' | 'article' | 'profile';
19
+ access?: 'public' | 'members' | 'admin';
20
+ frame?: 'narrow' | 'wide' | 'two-column' | 'three-column' | 'sidebar-left' | 'sidebar-right';
21
+ }
22
+ export interface LayoutSectionInput {
23
+ id?: string;
24
+ order: number;
25
+ type: string;
26
+ config: Record<string, unknown>;
27
+ colSpan?: number;
28
+ responsive?: {
29
+ sm?: number;
30
+ md?: number;
31
+ lg?: number;
32
+ };
33
+ enabled?: boolean;
34
+ visibility?: {
35
+ roles?: string[];
36
+ features?: string[];
37
+ hideAt?: ('sm' | 'md' | 'lg')[];
38
+ };
39
+ schemaVersion?: number;
40
+ }
41
+ export interface LayoutRowInput {
42
+ id?: string;
43
+ order: number;
44
+ config?: {
45
+ gap?: 'none' | 'sm' | 'md' | 'lg';
46
+ align?: 'start' | 'center' | 'stretch';
47
+ background?: string;
48
+ paddingY?: 'none' | 'sm' | 'md' | 'lg' | 'xl';
49
+ };
50
+ sections: LayoutSectionInput[];
51
+ }
52
+ export interface LayoutZoneInput {
53
+ zone: string;
54
+ rows: LayoutRowInput[];
55
+ }
56
+ export interface LayoutInput {
57
+ scope: LayoutScope;
58
+ name: string;
59
+ pageMeta?: LayoutPageMeta;
60
+ zones: LayoutZoneInput[];
61
+ state?: 'draft' | 'published';
62
+ }
63
+ export interface LayoutRecord {
64
+ id: string;
65
+ scope: LayoutScope;
66
+ name: string;
67
+ pageMeta: LayoutPageMeta | null;
68
+ state: 'draft' | 'published';
69
+ publishedVersionId: string | null;
70
+ zones: LayoutZone[];
71
+ createdAt: string;
72
+ updatedAt: string;
73
+ }
74
+ export interface LayoutZone {
75
+ zone: string;
76
+ rows: LayoutRowResolved[];
77
+ }
78
+ export interface LayoutRowResolved {
79
+ id: string;
80
+ order: number;
81
+ config: LayoutRowInput['config'] | null;
82
+ sections: LayoutSectionResolved[];
83
+ }
84
+ export interface LayoutSectionResolved {
85
+ id: string;
86
+ order: number;
87
+ type: string;
88
+ config: Record<string, unknown>;
89
+ colSpan: number;
90
+ responsive: {
91
+ sm?: number;
92
+ md?: number;
93
+ lg?: number;
94
+ } | null;
95
+ enabled: boolean;
96
+ visibility: LayoutSectionInput['visibility'] | null;
97
+ schemaVersion: number;
98
+ }
99
+ export interface LayoutVersionRecord {
100
+ id: string;
101
+ layoutId: string;
102
+ version: number;
103
+ snapshot: LayoutRecord;
104
+ publishedBy: string | null;
105
+ publishedAt: string;
106
+ }
107
+ /** Fetch a layout by scope. Returns the FULL nested shape (zones → rows → sections). */
108
+ export declare function getLayoutByScope(db: DB, scope: LayoutScope): Promise<LayoutRecord | null>;
109
+ /** Fetch a layout by its uuid. */
110
+ export declare function getLayoutById(db: DB, id: string): Promise<LayoutRecord | null>;
111
+ /** List all layouts, optionally filtered by scope type. */
112
+ export declare function listLayouts(db: DB, opts?: {
113
+ scopeType?: 'route' | 'virtual' | 'custom-page';
114
+ }): Promise<LayoutRecord[]>;
115
+ /**
116
+ * Save a layout — atomic "replace whole layout" semantics. Accepts the
117
+ * full nested zones → rows → sections payload, normalizes positions to
118
+ * {0..n}, and rewrites the children in a single transaction.
119
+ *
120
+ * Returns the saved layout in resolved form. Server-generates UUIDs for
121
+ * any row/section without an `id` (treats them as new). Existing rows
122
+ * with the same `id` are preserved (stable across reorders).
123
+ */
124
+ export declare function saveLayout(db: DB, input: LayoutInput, opts?: {
125
+ id?: string;
126
+ userId?: string;
127
+ }): Promise<LayoutRecord>;
128
+ /** Delete a layout. Cascades through rows + sections + versions via FK. */
129
+ export declare function deleteLayout(db: DB, id: string): Promise<void>;
130
+ /**
131
+ * Snapshot the current layout into `layout_versions`, set the layout's
132
+ * `published_version_id`, transition state → 'published'. The snapshot is
133
+ * the full nested record at the moment of publish.
134
+ */
135
+ export declare function publishLayout(db: DB, id: string, opts?: {
136
+ publishedBy?: string;
137
+ }): Promise<LayoutVersionRecord>;
138
+ /** List versions for a layout, newest first. */
139
+ export declare function listLayoutVersions(db: DB, layoutId: string): Promise<LayoutVersionRecord[]>;
140
+ /**
141
+ * Revert: rewrite the current layout's rows + sections from a snapshot.
142
+ * The original version row is NOT touched — snapshots are immutable.
143
+ */
144
+ export declare function revertToVersion(db: DB, layoutId: string, versionId: string, opts?: {
145
+ userId?: string;
146
+ }): Promise<LayoutRecord>;
147
+ //# sourceMappingURL=layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../src/layout/layout.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,360 @@
1
+ /**
2
+ * Layout engine — server CRUD.
3
+ *
4
+ * Spec: `docs/plans/layout-and-pages.md` §3, §4, §5.
5
+ *
6
+ * Storage: 4 normalized tables (layouts → layout_rows → layout_sections,
7
+ * layout_versions for snapshots). Defined in `@commonpub/schema`'s
8
+ * `layout.ts` (session 155). Migration 0005 creates them; this module
9
+ * is the only thing that reads/writes.
10
+ *
11
+ * Behaviour summary:
12
+ * - `listLayouts`, `getLayoutByScope`, `getLayoutById` are reads
13
+ * - `saveLayout` does atomic "replace whole layout" — accepts the
14
+ * entire nested zones→rows→sections payload, diffs against current
15
+ * state in a transaction, issues minimal inserts/updates/deletes,
16
+ * re-numbers positions to {0..n}
17
+ * - `publishLayout` snapshots current draft into layout_versions,
18
+ * sets `layouts.published_version_id`, transitions state to 'published'
19
+ * - `revertToVersion` copies a version's snapshot into the layout's
20
+ * current rows/sections (replacing them); does NOT delete the version
21
+ * - `deleteLayout` cascades through rows + sections + versions via FK
22
+ *
23
+ * Caching: callers cache the `getLayoutByScope` result (60s server-side,
24
+ * 5min client-side). Cache invalidation: the SSR layer middleware calls
25
+ * `invalidateLayoutCache()` after any write — see `instanceLayouts.ts`
26
+ * in `layers/base/server/utils/` (next phase).
27
+ */
28
+ import { and, asc, desc, eq } from 'drizzle-orm';
29
+ import { layouts, layoutRows, layoutSections, layoutVersions, } from '@commonpub/schema';
30
+ // ---- Helpers ------------------------------------------------------------
31
+ function unpackScope(scopeType, scopeKey) {
32
+ if (scopeType === 'route')
33
+ return { type: 'route', path: scopeKey };
34
+ if (scopeType === 'virtual') {
35
+ return { type: 'virtual', key: scopeKey };
36
+ }
37
+ return { type: 'custom-page', path: scopeKey };
38
+ }
39
+ function packScope(scope) {
40
+ return {
41
+ scopeType: scope.type,
42
+ scopeKey: scope.type === 'virtual' ? scope.key : scope.path,
43
+ };
44
+ }
45
+ /** Convert DB section row → resolved shape (typed JSON columns). */
46
+ function rowToSection(s) {
47
+ return {
48
+ id: s.id,
49
+ order: s.position,
50
+ type: s.type,
51
+ config: (s.config ?? {}),
52
+ colSpan: s.colSpan,
53
+ responsive: (s.responsive ?? null),
54
+ enabled: s.enabled,
55
+ visibility: (s.visibility ?? null),
56
+ schemaVersion: s.schemaVersion,
57
+ };
58
+ }
59
+ // ---- Reads --------------------------------------------------------------
60
+ /** Fetch a layout by scope. Returns the FULL nested shape (zones → rows → sections). */
61
+ export async function getLayoutByScope(db, scope) {
62
+ const { scopeType, scopeKey } = packScope(scope);
63
+ const [row] = await db
64
+ .select()
65
+ .from(layouts)
66
+ .where(and(eq(layouts.scopeType, scopeType), eq(layouts.scopeKey, scopeKey)));
67
+ if (!row)
68
+ return null;
69
+ return assembleLayout(db, row);
70
+ }
71
+ /** Fetch a layout by its uuid. */
72
+ export async function getLayoutById(db, id) {
73
+ const [row] = await db.select().from(layouts).where(eq(layouts.id, id));
74
+ if (!row)
75
+ return null;
76
+ return assembleLayout(db, row);
77
+ }
78
+ /** List all layouts, optionally filtered by scope type. */
79
+ export async function listLayouts(db, opts = {}) {
80
+ const rows = opts.scopeType
81
+ ? await db.select().from(layouts).where(eq(layouts.scopeType, opts.scopeType))
82
+ : await db.select().from(layouts);
83
+ return Promise.all(rows.map((r) => assembleLayout(db, r)));
84
+ }
85
+ /** Inner helper: take a layout-table row + fetch its rows + sections, return assembled record. */
86
+ async function assembleLayout(db, row) {
87
+ const rowsForLayout = await db
88
+ .select()
89
+ .from(layoutRows)
90
+ .where(eq(layoutRows.layoutId, row.id))
91
+ .orderBy(asc(layoutRows.zone), asc(layoutRows.position));
92
+ const sectionRowIds = rowsForLayout.map((r) => r.id);
93
+ const allSections = sectionRowIds.length > 0
94
+ ? await db
95
+ .select()
96
+ .from(layoutSections)
97
+ .orderBy(asc(layoutSections.position))
98
+ : [];
99
+ const sectionsByRow = new Map();
100
+ for (const s of allSections) {
101
+ if (!sectionRowIds.includes(s.rowId))
102
+ continue;
103
+ const arr = sectionsByRow.get(s.rowId) ?? [];
104
+ arr.push(rowToSection(s));
105
+ sectionsByRow.set(s.rowId, arr);
106
+ }
107
+ // Group rows by zone preserving order
108
+ const zoneMap = new Map();
109
+ for (const r of rowsForLayout) {
110
+ const list = zoneMap.get(r.zone) ?? [];
111
+ list.push({
112
+ id: r.id,
113
+ order: r.position,
114
+ config: (r.config ?? null),
115
+ sections: sectionsByRow.get(r.id) ?? [],
116
+ });
117
+ zoneMap.set(r.zone, list);
118
+ }
119
+ const zones = [...zoneMap.entries()].map(([zone, rs]) => ({ zone, rows: rs }));
120
+ return {
121
+ id: row.id,
122
+ scope: unpackScope(row.scopeType, row.scopeKey),
123
+ name: row.name,
124
+ pageMeta: (row.pageMeta ?? null),
125
+ state: row.state,
126
+ publishedVersionId: row.publishedVersionId,
127
+ zones,
128
+ createdAt: row.createdAt.toISOString(),
129
+ updatedAt: row.updatedAt.toISOString(),
130
+ };
131
+ }
132
+ // ---- Writes -------------------------------------------------------------
133
+ /**
134
+ * Save a layout — atomic "replace whole layout" semantics. Accepts the
135
+ * full nested zones → rows → sections payload, normalizes positions to
136
+ * {0..n}, and rewrites the children in a single transaction.
137
+ *
138
+ * Returns the saved layout in resolved form. Server-generates UUIDs for
139
+ * any row/section without an `id` (treats them as new). Existing rows
140
+ * with the same `id` are preserved (stable across reorders).
141
+ */
142
+ export async function saveLayout(db, input, opts = {}) {
143
+ const { scopeType, scopeKey } = packScope(input.scope);
144
+ const now = new Date();
145
+ // Wrap the whole upsert + child rewrite in a single transaction so two
146
+ // admins saving the same layout simultaneously can't interleave their
147
+ // delete + insert calls (which would either lose data silently OR hit
148
+ // the unique-(layout_id,zone,position) constraint and 500). Last-writer-
149
+ // wins semantics still apply at the transaction boundary, but the
150
+ // partial-state failure mode is impossible inside the tx.
151
+ //
152
+ // PGlite (used by tests) supports db.transaction; real Postgres ditto.
153
+ const layoutId = await db.transaction(async (tx) => {
154
+ let id = opts.id ?? null;
155
+ if (!id) {
156
+ // Look up by scope first — one layout per scope is the invariant.
157
+ const [existing] = await tx
158
+ .select({ id: layouts.id })
159
+ .from(layouts)
160
+ .where(and(eq(layouts.scopeType, scopeType), eq(layouts.scopeKey, scopeKey)));
161
+ id = existing?.id ?? null;
162
+ }
163
+ // Upsert the layouts row first (need its id for FK).
164
+ if (id) {
165
+ await tx
166
+ .update(layouts)
167
+ .set({
168
+ name: input.name,
169
+ pageMeta: input.pageMeta ?? null,
170
+ state: input.state ?? 'draft',
171
+ updatedBy: opts.userId ?? null,
172
+ updatedAt: now,
173
+ })
174
+ .where(eq(layouts.id, id));
175
+ }
176
+ else {
177
+ const [created] = await tx
178
+ .insert(layouts)
179
+ .values({
180
+ scopeType,
181
+ scopeKey,
182
+ name: input.name,
183
+ pageMeta: input.pageMeta ?? null,
184
+ state: input.state ?? 'draft',
185
+ createdBy: opts.userId ?? null,
186
+ updatedBy: opts.userId ?? null,
187
+ })
188
+ .returning({ id: layouts.id });
189
+ id = created.id;
190
+ }
191
+ // Children rewrite — delete all rows for this layout (sections cascade),
192
+ // then re-insert from input. Position-stable IDs are preserved when the
193
+ // input row has an `id` field.
194
+ await tx.delete(layoutRows).where(eq(layoutRows.layoutId, id));
195
+ // Normalize positions {0..n} per zone for rows, {0..n} per row for sections
196
+ // (ignore caller-provided values to enforce canonical order).
197
+ const zoneRowsToInsert = [];
198
+ for (const z of input.zones) {
199
+ const sorted = [...z.rows].sort((a, b) => a.order - b.order);
200
+ sorted.forEach((r, i) => {
201
+ zoneRowsToInsert.push({
202
+ id: r.id,
203
+ zone: z.zone,
204
+ position: i,
205
+ config: r.config ?? null,
206
+ sections: r.sections,
207
+ });
208
+ });
209
+ }
210
+ if (zoneRowsToInsert.length === 0) {
211
+ // Empty layout — children already cleared by the delete above
212
+ return id;
213
+ }
214
+ // Insert rows + capture their final IDs
215
+ const insertedRows = await tx
216
+ .insert(layoutRows)
217
+ .values(zoneRowsToInsert.map((r) => ({
218
+ ...(r.id ? { id: r.id } : {}),
219
+ layoutId: id,
220
+ zone: r.zone,
221
+ position: r.position,
222
+ config: r.config,
223
+ })))
224
+ .returning({ id: layoutRows.id, zone: layoutRows.zone, position: layoutRows.position });
225
+ // Build {zone, position} → rowId map so we know where to attach sections
226
+ const rowIdMap = new Map();
227
+ for (const r of insertedRows) {
228
+ rowIdMap.set(`${r.zone}|${r.position}`, r.id);
229
+ }
230
+ // Insert sections per row
231
+ const sectionsToInsert = [];
232
+ for (const r of zoneRowsToInsert) {
233
+ const rowId = rowIdMap.get(`${r.zone}|${r.position}`);
234
+ const sortedSections = [...r.sections].sort((a, b) => a.order - b.order);
235
+ sortedSections.forEach((s, i) => {
236
+ sectionsToInsert.push({
237
+ ...(s.id ? { id: s.id } : {}),
238
+ rowId,
239
+ position: i,
240
+ enabled: s.enabled ?? true,
241
+ type: s.type,
242
+ config: s.config,
243
+ colSpan: s.colSpan ?? 12,
244
+ responsive: s.responsive ?? null,
245
+ visibility: s.visibility ?? null,
246
+ schemaVersion: s.schemaVersion ?? 1,
247
+ });
248
+ });
249
+ }
250
+ if (sectionsToInsert.length > 0) {
251
+ await tx.insert(layoutSections).values(sectionsToInsert);
252
+ }
253
+ return id;
254
+ });
255
+ // Re-fetch outside the transaction so the returned shape uses the post-
256
+ // commit state. (assembleLayout makes multiple selects; running them
257
+ // inside the tx works too but isn't necessary.)
258
+ return (await getLayoutById(db, layoutId));
259
+ }
260
+ /** Delete a layout. Cascades through rows + sections + versions via FK. */
261
+ export async function deleteLayout(db, id) {
262
+ await db.delete(layouts).where(eq(layouts.id, id));
263
+ }
264
+ // ---- Versioning ---------------------------------------------------------
265
+ /**
266
+ * Snapshot the current layout into `layout_versions`, set the layout's
267
+ * `published_version_id`, transition state → 'published'. The snapshot is
268
+ * the full nested record at the moment of publish.
269
+ */
270
+ export async function publishLayout(db, id, opts = {}) {
271
+ const current = await getLayoutById(db, id);
272
+ if (!current)
273
+ throw new Error(`Layout not found: ${id}`);
274
+ // Compute next version number
275
+ const [latest] = await db
276
+ .select({ version: layoutVersions.version })
277
+ .from(layoutVersions)
278
+ .where(eq(layoutVersions.layoutId, id))
279
+ .orderBy(desc(layoutVersions.version))
280
+ .limit(1);
281
+ const nextVersion = (latest?.version ?? 0) + 1;
282
+ const [inserted] = await db
283
+ .insert(layoutVersions)
284
+ .values({
285
+ layoutId: id,
286
+ version: nextVersion,
287
+ snapshot: current,
288
+ publishedBy: opts.publishedBy ?? null,
289
+ })
290
+ .returning();
291
+ await db
292
+ .update(layouts)
293
+ .set({ publishedVersionId: inserted.id, state: 'published', updatedAt: new Date() })
294
+ .where(eq(layouts.id, id));
295
+ return {
296
+ id: inserted.id,
297
+ layoutId: id,
298
+ version: nextVersion,
299
+ snapshot: current,
300
+ publishedBy: inserted.publishedBy,
301
+ publishedAt: inserted.publishedAt.toISOString(),
302
+ };
303
+ }
304
+ /** List versions for a layout, newest first. */
305
+ export async function listLayoutVersions(db, layoutId) {
306
+ const rows = await db
307
+ .select()
308
+ .from(layoutVersions)
309
+ .where(eq(layoutVersions.layoutId, layoutId))
310
+ .orderBy(desc(layoutVersions.version));
311
+ return rows.map((r) => ({
312
+ id: r.id,
313
+ layoutId: r.layoutId,
314
+ version: r.version,
315
+ snapshot: r.snapshot,
316
+ publishedBy: r.publishedBy,
317
+ publishedAt: r.publishedAt.toISOString(),
318
+ }));
319
+ }
320
+ /**
321
+ * Revert: rewrite the current layout's rows + sections from a snapshot.
322
+ * The original version row is NOT touched — snapshots are immutable.
323
+ */
324
+ export async function revertToVersion(db, layoutId, versionId, opts = {}) {
325
+ const [v] = await db
326
+ .select()
327
+ .from(layoutVersions)
328
+ .where(and(eq(layoutVersions.layoutId, layoutId), eq(layoutVersions.id, versionId)));
329
+ if (!v)
330
+ throw new Error(`Version not found: layout=${layoutId} version=${versionId}`);
331
+ const snap = v.snapshot;
332
+ // Re-write via saveLayout with the snapshot's zones — preserves IDs so
333
+ // any pinned section ids in URL bookmarks etc still resolve.
334
+ return saveLayout(db, {
335
+ scope: snap.scope,
336
+ name: snap.name,
337
+ pageMeta: snap.pageMeta ?? undefined,
338
+ zones: snap.zones.map((z) => ({
339
+ zone: z.zone,
340
+ rows: z.rows.map((r) => ({
341
+ id: r.id,
342
+ order: r.order,
343
+ config: r.config ?? undefined,
344
+ sections: r.sections.map((s) => ({
345
+ id: s.id,
346
+ order: s.order,
347
+ type: s.type,
348
+ config: s.config,
349
+ colSpan: s.colSpan,
350
+ responsive: s.responsive ?? undefined,
351
+ enabled: s.enabled,
352
+ visibility: s.visibility ?? undefined,
353
+ schemaVersion: s.schemaVersion,
354
+ })),
355
+ })),
356
+ })),
357
+ state: 'draft',
358
+ }, { id: layoutId, userId: opts.userId });
359
+ }
360
+ //# sourceMappingURL=layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/layout/layout.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { DB } from '../types.js';
2
+ export interface SeedHomepageResult {
3
+ /** True if a new layout was inserted; false if one already existed. */
4
+ created: boolean;
5
+ /** Layout id (the existing one or the newly created one). */
6
+ layoutId: string;
7
+ }
8
+ /**
9
+ * Idempotent: safe to call repeatedly. Concurrency: the unique
10
+ * `(scope_type, scope_key)` constraint in migration 0005 prevents two
11
+ * simultaneous calls from inserting twice — we catch the race
12
+ * implicitly via the pre-check, but the constraint is the real
13
+ * guarantee.
14
+ */
15
+ export declare function seedHomepageLayout(db: DB, opts?: {
16
+ adminId?: string;
17
+ }): Promise<SeedHomepageResult>;
18
+ //# sourceMappingURL=seed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed.d.ts","sourceRoot":"","sources":["../../src/layout/seed.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAEtC,MAAM,WAAW,kBAAkB;IACjC,uEAAuE;IACvE,OAAO,EAAE,OAAO,CAAC;IACjB,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,EAAE,EAAE,EAAE,EACN,IAAI,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GAC9B,OAAO,CAAC,kBAAkB,CAAC,CA+E7B"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Layout engine — homepage seed helper.
3
+ *
4
+ * One-shot bootstrap: if the layout for `('route', '/')` doesn't exist
5
+ * yet, create + publish a minimal default using the Phase 1c starter
6
+ * sections (hero + content-feed). Returns `{ created: false }` if a
7
+ * layout already exists at that scope — operator can call this safely
8
+ * before flipping `features.layoutEngine` ON.
9
+ *
10
+ * Why this exists (not a full legacy `homepage.sections` migration):
11
+ * - The legacy renderer dispatches to 9 section types (hero,
12
+ * editorial, content-grid, content-carousel, contests, hubs,
13
+ * learning, stats, custom-html). Phase 1c only ships 5 of those
14
+ * (hero + 4 content/data sections). A real migration must wait
15
+ * until Phase 6b adds the remaining 20 sections.
16
+ * - This seed lets the operator flip `features.layoutEngine` on and
17
+ * immediately see a non-empty homepage (hero + feed), which is
18
+ * enough to validate the LayoutSlot render path end-to-end.
19
+ * - Doc'd in `docs/reference/guides/layout-engine.md` as the
20
+ * "enabling layoutEngine on the homepage" procedure.
21
+ */
22
+ import { saveLayout, publishLayout, getLayoutByScope } from './layout.js';
23
+ /**
24
+ * Idempotent: safe to call repeatedly. Concurrency: the unique
25
+ * `(scope_type, scope_key)` constraint in migration 0005 prevents two
26
+ * simultaneous calls from inserting twice — we catch the race
27
+ * implicitly via the pre-check, but the constraint is the real
28
+ * guarantee.
29
+ */
30
+ export async function seedHomepageLayout(db, opts = {}) {
31
+ const existing = await getLayoutByScope(db, { type: 'route', path: '/' });
32
+ if (existing) {
33
+ return { created: false, layoutId: existing.id };
34
+ }
35
+ const input = {
36
+ scope: { type: 'route', path: '/' },
37
+ name: 'Homepage',
38
+ pageMeta: {
39
+ title: 'Homepage',
40
+ access: 'public',
41
+ },
42
+ state: 'draft', // saveLayout creates as draft; publishLayout flips to published below
43
+ zones: [
44
+ {
45
+ zone: 'full-width',
46
+ rows: [
47
+ {
48
+ order: 0,
49
+ config: { gap: 'none' },
50
+ sections: [
51
+ {
52
+ order: 0,
53
+ type: 'hero',
54
+ config: {
55
+ variant: 'default',
56
+ eyebrow: 'Open Source',
57
+ title: 'Build. Document. Share.',
58
+ subtitle: 'CommonPub is an open platform for maker communities. Document your builds with rich editors, join hubs, learn with structured paths, and share with the world.',
59
+ ctas: [
60
+ { label: 'Start building', href: '/create', variant: 'primary' },
61
+ { label: 'Explore', href: '/explore', variant: 'secondary' },
62
+ ],
63
+ },
64
+ colSpan: 12,
65
+ enabled: true,
66
+ schemaVersion: 1,
67
+ },
68
+ ],
69
+ },
70
+ ],
71
+ },
72
+ {
73
+ zone: 'main',
74
+ rows: [
75
+ {
76
+ order: 0,
77
+ sections: [
78
+ {
79
+ order: 0,
80
+ type: 'content-feed',
81
+ config: {
82
+ heading: 'Latest',
83
+ contentType: '',
84
+ sort: 'recent',
85
+ limit: 9,
86
+ columns: 3,
87
+ tag: '',
88
+ featured: false,
89
+ },
90
+ colSpan: 12,
91
+ enabled: true,
92
+ schemaVersion: 1,
93
+ },
94
+ ],
95
+ },
96
+ ],
97
+ },
98
+ ],
99
+ };
100
+ const saved = await saveLayout(db, input, { userId: opts.adminId });
101
+ // Publish immediately so SSR's getLayoutByScope returns it (state filter
102
+ // in the public endpoint surfaces published over draft).
103
+ await publishLayout(db, saved.id, { publishedBy: opts.adminId });
104
+ return { created: true, layoutId: saved.id };
105
+ }
106
+ //# sourceMappingURL=seed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed.js","sourceRoot":"","sources":["../../src/layout/seed.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAW1E;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,EAAM,EACN,OAA6B,EAAE;IAE/B,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;IAC1E,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC;IACnD,CAAC;IAED,MAAM,KAAK,GAAgB;QACzB,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE;QACnC,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE;YACR,KAAK,EAAE,UAAU;YACjB,MAAM,EAAE,QAAQ;SACjB;QACD,KAAK,EAAE,OAAO,EAAG,sEAAsE;QACvF,KAAK,EAAE;YACL;gBACE,IAAI,EAAE,YAAY;gBAClB,IAAI,EAAE;oBACJ;wBACE,KAAK,EAAE,CAAC;wBACR,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE;wBACvB,QAAQ,EAAE;4BACR;gCACE,KAAK,EAAE,CAAC;gCACR,IAAI,EAAE,MAAM;gCACZ,MAAM,EAAE;oCACN,OAAO,EAAE,SAAS;oCAClB,OAAO,EAAE,aAAa;oCACtB,KAAK,EAAE,yBAAyB;oCAChC,QAAQ,EACN,gKAAgK;oCAClK,IAAI,EAAE;wCACJ,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE;wCAChE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE;qCAC7D;iCACF;gCACD,OAAO,EAAE,EAAE;gCACX,OAAO,EAAE,IAAI;gCACb,aAAa,EAAE,CAAC;6BACjB;yBACF;qBACF;iBACF;aACF;YACD;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE;oBACJ;wBACE,KAAK,EAAE,CAAC;wBACR,QAAQ,EAAE;4BACR;gCACE,KAAK,EAAE,CAAC;gCACR,IAAI,EAAE,cAAc;gCACpB,MAAM,EAAE;oCACN,OAAO,EAAE,QAAQ;oCACjB,WAAW,EAAE,EAAE;oCACf,IAAI,EAAE,QAAQ;oCACd,KAAK,EAAE,CAAC;oCACR,OAAO,EAAE,CAAC;oCACV,GAAG,EAAE,EAAE;oCACP,QAAQ,EAAE,KAAK;iCAChB;gCACD,OAAO,EAAE,EAAE;gCACX,OAAO,EAAE,IAAI;gCACb,aAAa,EAAE,CAAC;6BACjB;yBACF;qBACF;iBACF;aACF;SACF;KACF,CAAC;IAEF,MAAM,KAAK,GAAiB,MAAM,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAClF,yEAAyE;IACzE,yDAAyD;IACzD,MAAM,aAAa,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAEjE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;AAC/C,CAAC"}
package/dist/theme.d.ts CHANGED
@@ -1,12 +1,50 @@
1
1
  import type { DB } from './types.js';
2
+ /** Custom-theme ID prefix used in `data-theme` attribute + DB lookup. */
3
+ export declare const CUSTOM_THEME_PREFIX = "cpub-custom-";
4
+ /**
5
+ * A custom theme record persisted in `instance_settings.theme.custom`.
6
+ * Mirrors `customThemeSchema` in @commonpub/schema validators.
7
+ */
8
+ export interface CustomThemeRecord {
9
+ id: string;
10
+ name: string;
11
+ description?: string;
12
+ family: string;
13
+ isDark: boolean;
14
+ pairId?: string;
15
+ parentTheme: string;
16
+ tokens: Record<string, string>;
17
+ createdAt: string;
18
+ updatedAt: string;
19
+ }
20
+ /** Slug used in `data-theme` for a DB-stored custom theme. */
21
+ export declare function customThemeDataAttr(id: string): string;
22
+ /** Reverse of customThemeDataAttr — returns the raw custom theme ID or null. */
23
+ export declare function parseCustomThemeId(themeId: string): string | null;
2
24
  /**
3
25
  * Resolve the active theme for a request.
4
26
  * Priority: user preference > instance default > 'base' fallback.
5
27
  * Framework-agnostic — cookie checking should be done by the caller.
6
28
  */
7
29
  export declare function resolveTheme(db: DB, userId?: string): Promise<string>;
8
- /** Get custom CSS token overrides configured at the instance level */
30
+ /** Get custom CSS token overrides configured at the instance level. These
31
+ * apply on top of whatever theme is active (built-in, custom, or code). */
9
32
  export declare function getCustomTokenOverrides(db: DB): Promise<Record<string, string>>;
10
33
  /** Update a user's theme preference */
11
34
  export declare function setUserTheme(db: DB, userId: string, themeId: string): Promise<void>;
35
+ /** List all DB-stored custom themes. Returns an empty array if none exist. */
36
+ export declare function listCustomThemes(db: DB): Promise<CustomThemeRecord[]>;
37
+ /** Fetch a single custom theme by ID. */
38
+ export declare function getCustomTheme(db: DB, id: string): Promise<CustomThemeRecord | null>;
39
+ /**
40
+ * Upsert a custom theme. The whole `theme.custom` array is rewritten on each
41
+ * save — fine because the array is small (admins manage a handful of themes)
42
+ * and gives us atomic consistency without a separate table.
43
+ */
44
+ export declare function saveCustomTheme(db: DB, theme: Omit<CustomThemeRecord, 'createdAt' | 'updatedAt'> & {
45
+ createdAt?: string;
46
+ updatedAt?: string;
47
+ }, adminId: string): Promise<CustomThemeRecord>;
48
+ /** Delete a custom theme. No-op if not found. */
49
+ export declare function deleteCustomTheme(db: DB, id: string, adminId: string): Promise<void>;
12
50
  //# sourceMappingURL=theme.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,YAAY,CAAC;AAQrC;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAuB3E;AAED,sEAAsE;AACtE,wBAAsB,uBAAuB,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAWrF;AAED,uCAAuC;AACvC,wBAAsB,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASzF"}
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,YAAY,CAAC;AAIrC,yEAAyE;AACzE,eAAO,MAAM,mBAAmB,iBAAiB,CAAC;AAKlD;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,8DAA8D;AAC9D,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,gFAAgF;AAChF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKjE;AA0BD;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAuB3E;AAED;4EAC4E;AAC5E,wBAAsB,uBAAuB,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAgBrF;AAED,uCAAuC;AACvC,wBAAsB,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASzF;AAID,8EAA8E;AAC9E,wBAAsB,gBAAgB,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAsB3E;AAED,yCAAyC;AACzC,wBAAsB,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAG1F;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,EAAE,EAAE,EAAE,EACN,KAAK,EAAE,IAAI,CAAC,iBAAiB,EAAE,WAAW,GAAG,WAAW,CAAC,GAAG;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,EACD,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,iBAAiB,CAAC,CAuB5B;AAED,iDAAiD;AACjD,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAK1F"}
package/dist/theme.js CHANGED
@@ -1,8 +1,44 @@
1
1
  import { eq } from 'drizzle-orm';
2
2
  import { users, instanceSettings } from '@commonpub/schema';
3
- const VALID_THEME_IDS = new Set(['base', 'dark', 'generics', 'agora', 'agora-dark']);
4
- function isValidThemeId(id) {
5
- return VALID_THEME_IDS.has(id);
3
+ const BUILT_IN_THEME_IDS = new Set(['base', 'dark', 'generics', 'agora', 'agora-dark']);
4
+ /** Custom-theme ID prefix used in `data-theme` attribute + DB lookup. */
5
+ export const CUSTOM_THEME_PREFIX = 'cpub-custom-';
6
+ /** Storage key in `instance_settings` holding the custom-themes array. */
7
+ const CUSTOM_THEMES_KEY = 'theme.custom';
8
+ /** Slug used in `data-theme` for a DB-stored custom theme. */
9
+ export function customThemeDataAttr(id) {
10
+ return `${CUSTOM_THEME_PREFIX}${id}`;
11
+ }
12
+ /** Reverse of customThemeDataAttr — returns the raw custom theme ID or null. */
13
+ export function parseCustomThemeId(themeId) {
14
+ if (themeId.startsWith(CUSTOM_THEME_PREFIX)) {
15
+ return themeId.slice(CUSTOM_THEME_PREFIX.length);
16
+ }
17
+ return null;
18
+ }
19
+ function isBuiltInThemeId(id) {
20
+ return BUILT_IN_THEME_IDS.has(id);
21
+ }
22
+ /**
23
+ * Whether a theme ID is structurally valid (sanity check only — defends
24
+ * against path traversal / injection in the data attribute). Accepts:
25
+ * - built-in IDs
26
+ * - DB custom IDs (`cpub-custom-*`)
27
+ * - any slug-shaped string (covers code-registered themes from the
28
+ * thin layer app's `commonpub.config.ts`)
29
+ *
30
+ * Cross-checking against the actual list of available themes happens at
31
+ * the route-handler layer (`api/admin/themes/*` and the SSR middleware,
32
+ * which both see the runtime config). On read, unknown values fall back
33
+ * to `base` silently rather than throwing — the user shouldn't see a
34
+ * broken theme just because an admin deleted a custom one.
35
+ */
36
+ function isAcceptableThemeId(id) {
37
+ if (isBuiltInThemeId(id))
38
+ return true;
39
+ if (parseCustomThemeId(id) !== null)
40
+ return true;
41
+ return /^[a-z0-9][a-z0-9_-]{0,63}$/i.test(id);
6
42
  }
7
43
  /**
8
44
  * Resolve the active theme for a request.
@@ -16,7 +52,7 @@ export async function resolveTheme(db, userId) {
16
52
  .select({ theme: users.theme })
17
53
  .from(users)
18
54
  .where(eq(users.id, userId));
19
- if (user?.theme && isValidThemeId(user.theme)) {
55
+ if (user?.theme && isAcceptableThemeId(user.theme)) {
20
56
  return user.theme;
21
57
  }
22
58
  }
@@ -25,26 +61,33 @@ export async function resolveTheme(db, userId) {
25
61
  .select({ value: instanceSettings.value })
26
62
  .from(instanceSettings)
27
63
  .where(eq(instanceSettings.key, 'theme.default'));
28
- if (setting?.value && typeof setting.value === 'string' && isValidThemeId(setting.value)) {
64
+ if (setting?.value && typeof setting.value === 'string' && isAcceptableThemeId(setting.value)) {
29
65
  return setting.value;
30
66
  }
31
67
  // 3. Fallback
32
68
  return 'base';
33
69
  }
34
- /** Get custom CSS token overrides configured at the instance level */
70
+ /** Get custom CSS token overrides configured at the instance level. These
71
+ * apply on top of whatever theme is active (built-in, custom, or code). */
35
72
  export async function getCustomTokenOverrides(db) {
36
73
  const [setting] = await db
37
74
  .select({ value: instanceSettings.value })
38
75
  .from(instanceSettings)
39
76
  .where(eq(instanceSettings.key, 'theme.token_overrides'));
40
- if (setting?.value && typeof setting.value === 'object' && setting.value !== null) {
41
- return setting.value;
77
+ if (setting?.value && typeof setting.value === 'object' && setting.value !== null && !Array.isArray(setting.value)) {
78
+ // Filter only string values so malformed rows can't break SSR
79
+ const out = {};
80
+ for (const [k, v] of Object.entries(setting.value)) {
81
+ if (typeof v === 'string')
82
+ out[k] = v;
83
+ }
84
+ return out;
42
85
  }
43
86
  return {};
44
87
  }
45
88
  /** Update a user's theme preference */
46
89
  export async function setUserTheme(db, userId, themeId) {
47
- if (!isValidThemeId(themeId)) {
90
+ if (!isAcceptableThemeId(themeId)) {
48
91
  throw new Error(`Invalid theme ID: ${themeId}`);
49
92
  }
50
93
  await db
@@ -52,4 +95,87 @@ export async function setUserTheme(db, userId, themeId) {
52
95
  .set({ theme: themeId, updatedAt: new Date() })
53
96
  .where(eq(users.id, userId));
54
97
  }
98
+ // --- Custom (DB-stored) themes -------------------------------------------
99
+ /** List all DB-stored custom themes. Returns an empty array if none exist. */
100
+ export async function listCustomThemes(db) {
101
+ const [setting] = await db
102
+ .select({ value: instanceSettings.value })
103
+ .from(instanceSettings)
104
+ .where(eq(instanceSettings.key, CUSTOM_THEMES_KEY));
105
+ if (!setting?.value || !Array.isArray(setting.value))
106
+ return [];
107
+ // Defensive: filter to records that have the required shape so a partial
108
+ // write (or future schema change) can't crash SSR.
109
+ return setting.value.filter((row) => {
110
+ if (!row || typeof row !== 'object')
111
+ return false;
112
+ const r = row;
113
+ return (typeof r.id === 'string' &&
114
+ typeof r.name === 'string' &&
115
+ typeof r.family === 'string' &&
116
+ typeof r.isDark === 'boolean' &&
117
+ typeof r.tokens === 'object' &&
118
+ r.tokens !== null);
119
+ });
120
+ }
121
+ /** Fetch a single custom theme by ID. */
122
+ export async function getCustomTheme(db, id) {
123
+ const all = await listCustomThemes(db);
124
+ return all.find((t) => t.id === id) ?? null;
125
+ }
126
+ /**
127
+ * Upsert a custom theme. The whole `theme.custom` array is rewritten on each
128
+ * save — fine because the array is small (admins manage a handful of themes)
129
+ * and gives us atomic consistency without a separate table.
130
+ */
131
+ export async function saveCustomTheme(db, theme, adminId) {
132
+ const all = await listCustomThemes(db);
133
+ const now = new Date().toISOString();
134
+ const existing = all.find((t) => t.id === theme.id);
135
+ const next = {
136
+ id: theme.id,
137
+ name: theme.name,
138
+ description: theme.description ?? '',
139
+ family: theme.family,
140
+ isDark: theme.isDark,
141
+ pairId: theme.pairId,
142
+ parentTheme: theme.parentTheme,
143
+ tokens: theme.tokens,
144
+ createdAt: existing?.createdAt ?? theme.createdAt ?? now,
145
+ updatedAt: now,
146
+ };
147
+ const newList = existing
148
+ ? all.map((t) => (t.id === theme.id ? next : t))
149
+ : [...all, next];
150
+ await writeCustomThemes(db, newList, adminId);
151
+ return next;
152
+ }
153
+ /** Delete a custom theme. No-op if not found. */
154
+ export async function deleteCustomTheme(db, id, adminId) {
155
+ const all = await listCustomThemes(db);
156
+ if (!all.some((t) => t.id === id))
157
+ return;
158
+ const next = all.filter((t) => t.id !== id);
159
+ await writeCustomThemes(db, next, adminId);
160
+ }
161
+ async function writeCustomThemes(db, next, adminId) {
162
+ const existing = await db
163
+ .select({ id: instanceSettings.id })
164
+ .from(instanceSettings)
165
+ .where(eq(instanceSettings.key, CUSTOM_THEMES_KEY));
166
+ if (existing.length > 0) {
167
+ await db
168
+ .update(instanceSettings)
169
+ .set({ value: next, updatedBy: adminId, updatedAt: new Date() })
170
+ .where(eq(instanceSettings.key, CUSTOM_THEMES_KEY));
171
+ }
172
+ else {
173
+ await db.insert(instanceSettings).values({
174
+ key: CUSTOM_THEMES_KEY,
175
+ value: next,
176
+ updatedBy: adminId,
177
+ updatedAt: new Date(),
178
+ });
179
+ }
180
+ }
55
181
  //# sourceMappingURL=theme.js.map
package/dist/theme.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"theme.js","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAG5D,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;AAErF,SAAS,cAAc,CAAC,EAAU;IAChC,OAAO,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACjC,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,EAAM,EAAE,MAAe;IACxD,qBAAqB;IACrB,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,EAAE;aACpB,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;aAC9B,IAAI,CAAC,KAAK,CAAC;aACX,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;QAC/B,IAAI,IAAI,EAAE,KAAK,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9C,OAAO,IAAI,CAAC,KAAK,CAAC;QACpB,CAAC;IACH,CAAC;IAED,sBAAsB;IACtB,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,EAAE;SACvB,MAAM,CAAC,EAAE,KAAK,EAAE,gBAAgB,CAAC,KAAK,EAAE,CAAC;SACzC,IAAI,CAAC,gBAAgB,CAAC;SACtB,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC,CAAC;IACpD,IAAI,OAAO,EAAE,KAAK,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,IAAI,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzF,OAAO,OAAO,CAAC,KAAK,CAAC;IACvB,CAAC;IAED,cAAc;IACd,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,sEAAsE;AACtE,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,EAAM;IAClD,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,EAAE;SACvB,MAAM,CAAC,EAAE,KAAK,EAAE,gBAAgB,CAAC,KAAK,EAAE,CAAC;SACzC,IAAI,CAAC,gBAAgB,CAAC;SACtB,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,GAAG,EAAE,uBAAuB,CAAC,CAAC,CAAC;IAE5D,IAAI,OAAO,EAAE,KAAK,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QAClF,OAAO,OAAO,CAAC,KAA+B,CAAC;IACjD,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,uCAAuC;AACvC,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,EAAM,EAAE,MAAc,EAAE,OAAe;IACxE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,qBAAqB,OAAO,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,EAAE;SACL,MAAM,CAAC,KAAK,CAAC;SACb,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC;SAC9C,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@commonpub/server",
3
- "version": "2.55.0",
3
+ "version": "2.57.0",
4
4
  "type": "module",
5
5
  "description": "Framework-agnostic business logic for CommonPub instances",
6
6
  "license": "AGPL-3.0-or-later",
@@ -110,13 +110,13 @@
110
110
  "linkedom": "^0.18.12",
111
111
  "megalodon": "^10.3.0",
112
112
  "turndown": "^7.2.4",
113
+ "@commonpub/auth": "0.6.0",
113
114
  "@commonpub/docs": "0.6.3",
115
+ "@commonpub/config": "0.15.0",
114
116
  "@commonpub/learning": "0.5.2",
117
+ "@commonpub/editor": "0.7.11",
115
118
  "@commonpub/protocol": "0.12.0",
116
- "@commonpub/auth": "0.6.0",
117
- "@commonpub/config": "0.13.0",
118
- "@commonpub/schema": "0.16.0",
119
- "@commonpub/editor": "0.7.10",
119
+ "@commonpub/schema": "0.17.0",
120
120
  "@commonpub/infra": "0.8.0"
121
121
  },
122
122
  "peerDependencies": {