@riverbankcms/sdk 0.60.6 → 0.60.7
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/_dts/api/src/appointmentSetup.d.ts +2 -2
- package/dist/_dts/api/src/bookingConfig.d.ts +6 -0
- package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +45 -3
- package/dist/_dts/api/src/bookingOperations.d.ts +40 -3
- package/dist/_dts/api/src/courses.d.ts +1 -5
- package/dist/_dts/api/src/endpoints.d.ts +80 -1
- package/dist/_dts/api/src/index.d.ts +3 -2
- package/dist/_dts/api/src/navigation/contracts.d.ts +9 -9
- package/dist/_dts/api/src/public/endpoints.d.ts +1 -1
- package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +15 -1
- package/dist/_dts/api/src/resources.d.ts +1 -1
- package/dist/_dts/api/src/siteBanner.d.ts +8 -8
- package/dist/_dts/api/src/siteOnboarding.d.ts +1 -0
- package/dist/_dts/api/src/teamMembers.d.ts +27 -0
- package/dist/_dts/blocks/src/system/blocks/courses/shared/schemas.d.ts +35 -29
- package/dist/_dts/blocks/src/system/blocks/courses/shared/types.d.ts +1 -5
- package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +40 -34
- package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +1 -5
- package/dist/_dts/blocks/src/system/blocks/product-list.d.ts +1 -1
- package/dist/_dts/blocks/src/system/blocks/products/shared.d.ts +2 -2
- package/dist/_dts/blocks/src/system/blocks/shared/bookingPaymentTerms.d.ts +9 -9
- package/dist/_dts/blocks/src/system/blocks/shared/teamMembers.d.ts +24 -0
- package/dist/_dts/blocks/src/system/blocks/team-members.d.ts +18 -8
- package/dist/_dts/blocks/src/system/constants/background.d.ts +1 -1
- package/dist/_dts/blocks/src/system/data/loaderEndpoints.d.ts +1 -1
- package/dist/_dts/blocks/src/system/data/utils.d.ts +1 -1
- package/dist/_dts/blocks/src/system/manifest/schema.d.ts +201 -201
- package/dist/_dts/blocks/src/system/manifest/validation.d.ts +2 -2
- package/dist/_dts/blocks/src/system/node/schema.d.ts +5 -5
- package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +1 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/shared/contract-schemas.d.ts +4 -4
- package/dist/_dts/blocks/src/system/transforms/registry/ui.d.ts +1 -1
- package/dist/_dts/blocks/src/system/transforms/typed.d.ts +3 -3
- package/dist/_dts/content-model/src/content-types/schema.d.ts +8 -8
- package/dist/_dts/content-model/src/metadataConfig.d.ts +1 -0
- package/dist/_dts/core/src/branded.d.ts +2 -0
- package/dist/_dts/db/src/generated/supabase/database.types.d.ts +124 -8
- package/dist/_dts/db/src/schemas/forms.d.ts +61 -61
- package/dist/_dts/sdk/src/client/types.d.ts +9 -2
- package/dist/_dts/sdk/src/config/types.d.ts +1 -1
- package/dist/_dts/sdk/src/config/validation.d.ts +40 -37
- package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +17 -8
- package/dist/_dts/sdk/src/data/prefetchBlockData.d.ts +1 -1
- package/dist/_dts/sdk/src/manifest/passes/pass1-fields.d.ts +19 -19
- package/dist/_dts/sdk/src/public-api/contracts.d.ts +87 -69
- package/dist/_dts/sdk/src/public-api/runtime.d.ts +1 -1
- package/dist/_dts/sdk/src/rendering/islands/types.d.ts +2 -5
- package/dist/_dts/sdk/src/version.d.ts +1 -1
- package/dist/_dts/theme-core/src/accordions/types.d.ts +11 -11
- package/dist/_dts/theme-core/src/buttons/personalities/types.d.ts +10 -10
- package/dist/_dts/theme-core/src/buttons/types.d.ts +27 -27
- package/dist/_dts/theme-core/src/cards/types.d.ts +17 -17
- package/dist/_dts/theme-core/src/inputs/types.d.ts +14 -14
- package/dist/_dts/theme-core/src/interactive/baseSchema.d.ts +2 -2
- package/dist/_dts/theme-core/src/mock-themes/all.d.ts +438 -438
- package/dist/_dts/theme-core/src/navigation/types.d.ts +16 -16
- package/dist/_dts/theme-core/src/palette/variants/types.d.ts +15 -15
- package/dist/_dts/theme-core/src/schema.d.ts +662 -662
- package/dist/_dts/theme-core/src/shared/componentStyles.d.ts +4 -4
- package/dist/_dts/theme-core/src/site-styles/designState.d.ts +15 -15
- package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +7 -7
- package/dist/_dts/theme-core/src/site-styles/styleTags.d.ts +1 -1
- package/dist/_dts/theme-core/src/site-styles/tokenRecipes.d.ts +5 -5
- package/dist/_dts/ui/src/badge.d.ts +1 -1
- package/dist/_dts/ui/src/button-group.d.ts +1 -1
- package/dist/_dts/ui/src/button.d.ts +2 -2
- package/dist/_dts/ui/src/callout.d.ts +1 -1
- package/dist/_dts/ui/src/card.d.ts +1 -1
- package/dist/_dts/ui/src/surface.d.ts +2 -2
- package/dist/_dts/ui/src/toggle.d.ts +4 -4
- package/dist/cli/index.mjs +276 -24
- package/dist/client/client.mjs +607 -306
- package/dist/client/hooks.mjs +272 -23
- package/dist/client/rendering/client.mjs +179 -130
- package/dist/client/rendering/islands.mjs +68 -43
- package/dist/client/rendering.mjs +646 -363
- package/dist/preview-next/before-render.mjs +147 -1
- package/dist/preview-next/client/runtime.mjs +338 -43
- package/dist/preview-next/middleware.mjs +147 -1
- package/dist/server/components.mjs +727 -470
- package/dist/server/config-validation.mjs +488 -254
- package/dist/server/config.mjs +488 -254
- package/dist/server/data.mjs +272 -23
- package/dist/server/index.mjs +168 -2
- package/dist/server/next.mjs +476 -185
- package/dist/server/page-converter.mjs +335 -249
- package/dist/server/prebuild.mjs +1 -1
- package/dist/server/rendering/server.mjs +742 -469
- package/dist/server/rendering.mjs +742 -469
- package/dist/server/routing.mjs +274 -24
- package/dist/server/server.mjs +291 -24
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// src/config/validation.ts
|
|
2
|
-
import { z as
|
|
2
|
+
import { z as z65 } from "zod";
|
|
3
3
|
|
|
4
4
|
// ../api/src/cache-tags.ts
|
|
5
5
|
var TAG_TEMPLATES = {
|
|
@@ -853,13 +853,150 @@ var ENDPOINT_DEFINITIONS = {
|
|
|
853
853
|
"server:internal_error"
|
|
854
854
|
]
|
|
855
855
|
},
|
|
856
|
-
|
|
856
|
+
removeAppointmentResource: {
|
|
857
857
|
path: "/sites/{siteId}/bookings/resources/{resourceId}",
|
|
858
858
|
method: "DELETE",
|
|
859
859
|
auth: "user",
|
|
860
860
|
responseKind: "json",
|
|
861
861
|
errors: ["resource:not_found", "server:internal_error"]
|
|
862
862
|
},
|
|
863
|
+
createTeamMemberProfile: {
|
|
864
|
+
path: "/sites/{siteId}/bookings/resources/{resourceId}/profile",
|
|
865
|
+
method: "POST",
|
|
866
|
+
auth: "user",
|
|
867
|
+
responseKind: "json",
|
|
868
|
+
errors: [
|
|
869
|
+
"validation:invalid_input",
|
|
870
|
+
"resource:not_found",
|
|
871
|
+
"resource:conflict",
|
|
872
|
+
"server:internal_error"
|
|
873
|
+
]
|
|
874
|
+
},
|
|
875
|
+
updateTeamMemberProfilePolicy: {
|
|
876
|
+
path: "/sites/{siteId}/bookings/resources/profile-policy",
|
|
877
|
+
method: "PUT",
|
|
878
|
+
auth: "user",
|
|
879
|
+
responseKind: "json",
|
|
880
|
+
errors: ["validation:invalid_input", "server:internal_error"]
|
|
881
|
+
},
|
|
882
|
+
updateTeamMemberProfileContent: {
|
|
883
|
+
path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/content",
|
|
884
|
+
method: "PUT",
|
|
885
|
+
tags: [
|
|
886
|
+
"site-{siteId}",
|
|
887
|
+
"content-{siteId}-team-member",
|
|
888
|
+
"content-entry-{entryId}"
|
|
889
|
+
],
|
|
890
|
+
auth: "user",
|
|
891
|
+
responseKind: "json",
|
|
892
|
+
errors: [
|
|
893
|
+
"validation:invalid_input",
|
|
894
|
+
"resource:not_found",
|
|
895
|
+
"resource:conflict",
|
|
896
|
+
"server:internal_error"
|
|
897
|
+
]
|
|
898
|
+
},
|
|
899
|
+
publishTeamMemberProfile: {
|
|
900
|
+
path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/publish",
|
|
901
|
+
method: "POST",
|
|
902
|
+
tags: [
|
|
903
|
+
"site-{siteId}",
|
|
904
|
+
"content-{siteId}-team-member",
|
|
905
|
+
"content-entry-{entryId}"
|
|
906
|
+
],
|
|
907
|
+
auth: "user",
|
|
908
|
+
responseKind: "json",
|
|
909
|
+
errors: [
|
|
910
|
+
"validation:invalid_input",
|
|
911
|
+
"resource:not_found",
|
|
912
|
+
"server:internal_error"
|
|
913
|
+
]
|
|
914
|
+
},
|
|
915
|
+
discardTeamMemberProfileDraft: {
|
|
916
|
+
path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/discard",
|
|
917
|
+
method: "POST",
|
|
918
|
+
tags: [
|
|
919
|
+
"site-{siteId}",
|
|
920
|
+
"content-{siteId}-team-member",
|
|
921
|
+
"content-entry-{entryId}"
|
|
922
|
+
],
|
|
923
|
+
auth: "user",
|
|
924
|
+
responseKind: "json",
|
|
925
|
+
errors: [
|
|
926
|
+
"validation:invalid_input",
|
|
927
|
+
"resource:not_found",
|
|
928
|
+
"resource:conflict",
|
|
929
|
+
"server:internal_error"
|
|
930
|
+
]
|
|
931
|
+
},
|
|
932
|
+
unpublishTeamMemberProfile: {
|
|
933
|
+
path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/unpublish",
|
|
934
|
+
method: "POST",
|
|
935
|
+
tags: [
|
|
936
|
+
"site-{siteId}",
|
|
937
|
+
"content-{siteId}-team-member",
|
|
938
|
+
"content-entry-{entryId}"
|
|
939
|
+
],
|
|
940
|
+
auth: "user",
|
|
941
|
+
responseKind: "json",
|
|
942
|
+
errors: [
|
|
943
|
+
"validation:invalid_input",
|
|
944
|
+
"resource:not_found",
|
|
945
|
+
"resource:conflict",
|
|
946
|
+
"server:internal_error"
|
|
947
|
+
]
|
|
948
|
+
},
|
|
949
|
+
scheduleTeamMemberProfile: {
|
|
950
|
+
path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/schedule",
|
|
951
|
+
method: "POST",
|
|
952
|
+
tags: [
|
|
953
|
+
"site-{siteId}",
|
|
954
|
+
"content-{siteId}-team-member",
|
|
955
|
+
"content-entry-{entryId}"
|
|
956
|
+
],
|
|
957
|
+
auth: "user",
|
|
958
|
+
responseKind: "json",
|
|
959
|
+
errors: [
|
|
960
|
+
"validation:invalid_input",
|
|
961
|
+
"resource:not_found",
|
|
962
|
+
"resource:conflict",
|
|
963
|
+
"server:internal_error"
|
|
964
|
+
]
|
|
965
|
+
},
|
|
966
|
+
cancelScheduledTeamMemberProfile: {
|
|
967
|
+
path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/schedule",
|
|
968
|
+
method: "DELETE",
|
|
969
|
+
tags: [
|
|
970
|
+
"site-{siteId}",
|
|
971
|
+
"content-{siteId}-team-member",
|
|
972
|
+
"content-entry-{entryId}"
|
|
973
|
+
],
|
|
974
|
+
auth: "user",
|
|
975
|
+
responseKind: "json",
|
|
976
|
+
errors: [
|
|
977
|
+
"validation:invalid_input",
|
|
978
|
+
"resource:not_found",
|
|
979
|
+
"resource:conflict",
|
|
980
|
+
"server:internal_error"
|
|
981
|
+
]
|
|
982
|
+
},
|
|
983
|
+
updateTeamMemberProfileRouteMetadata: {
|
|
984
|
+
path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/routes/{routeId}/metadata",
|
|
985
|
+
method: "PATCH",
|
|
986
|
+
tags: [
|
|
987
|
+
TAG_TEMPLATES.siteCollection,
|
|
988
|
+
TAG_TEMPLATES.siteRoutableContent,
|
|
989
|
+
TAG_TEMPLATES.routeById
|
|
990
|
+
],
|
|
991
|
+
auth: "user",
|
|
992
|
+
responseKind: "json",
|
|
993
|
+
errors: [
|
|
994
|
+
"validation:invalid_input",
|
|
995
|
+
"resource:not_found",
|
|
996
|
+
"resource:conflict",
|
|
997
|
+
"server:internal_error"
|
|
998
|
+
]
|
|
999
|
+
},
|
|
863
1000
|
listAppointmentServices: {
|
|
864
1001
|
path: "/sites/{siteId}/bookings/services",
|
|
865
1002
|
method: "GET",
|
|
@@ -3233,6 +3370,15 @@ var ENDPOINT_DEFINITIONS = {
|
|
|
3233
3370
|
auth: "public",
|
|
3234
3371
|
responseKind: "json"
|
|
3235
3372
|
},
|
|
3373
|
+
listPublicTeamMembers: {
|
|
3374
|
+
path: "/public/sites/{siteId}/team-members",
|
|
3375
|
+
method: "GET",
|
|
3376
|
+
revalidate: 60,
|
|
3377
|
+
tags: ["public-team-members-{siteId}"],
|
|
3378
|
+
errors: [],
|
|
3379
|
+
auth: "public",
|
|
3380
|
+
responseKind: "json"
|
|
3381
|
+
},
|
|
3236
3382
|
getPublicCourse: {
|
|
3237
3383
|
path: "/public/sites/{siteId}/courses/{courseId}",
|
|
3238
3384
|
method: "GET",
|
|
@@ -6527,6 +6673,7 @@ var SUPPORTED_LOADER_ENDPOINTS = [
|
|
|
6527
6673
|
"listPublicEvents",
|
|
6528
6674
|
"getPublicEventDetails",
|
|
6529
6675
|
"listPublicCourses",
|
|
6676
|
+
"listPublicTeamMembers",
|
|
6530
6677
|
"listPublicProducts",
|
|
6531
6678
|
"listPublicPasses",
|
|
6532
6679
|
"listPublicMemberships",
|
|
@@ -15432,7 +15579,19 @@ var teamMemberFragment = defineFragment({
|
|
|
15432
15579
|
bind("photo")
|
|
15433
15580
|
)
|
|
15434
15581
|
]),
|
|
15435
|
-
|
|
15582
|
+
link(
|
|
15583
|
+
{
|
|
15584
|
+
href: { $bind: { from: "profilePath" } },
|
|
15585
|
+
className: "rb-team-member-name-link"
|
|
15586
|
+
},
|
|
15587
|
+
[text({ as: "h3" }, bind("name"))],
|
|
15588
|
+
when("profilePath")
|
|
15589
|
+
),
|
|
15590
|
+
text(
|
|
15591
|
+
{ as: "h3" },
|
|
15592
|
+
when("profilePath", { not: true }),
|
|
15593
|
+
bind("name")
|
|
15594
|
+
),
|
|
15436
15595
|
text({ as: "p", className: "rb-team-member-role" }, when("role"), bind("role")),
|
|
15437
15596
|
richText(
|
|
15438
15597
|
{ className: "rb-prose rb-max-w-none" },
|
|
@@ -19726,7 +19885,9 @@ var courseSessionSchema = z42.object({
|
|
|
19726
19885
|
var courseTeamMemberSummarySchema = z42.object({
|
|
19727
19886
|
id: z42.string(),
|
|
19728
19887
|
name: z42.string(),
|
|
19729
|
-
|
|
19888
|
+
roleLabel: z42.string().nullable(),
|
|
19889
|
+
summary: z42.string().nullable(),
|
|
19890
|
+
profilePath: z42.string().nullable()
|
|
19730
19891
|
});
|
|
19731
19892
|
var coursePricingOptionSchema = z42.object({
|
|
19732
19893
|
id: z42.string(),
|
|
@@ -19831,7 +19992,9 @@ var publicEventTicketTypeSchema = z43.object({
|
|
|
19831
19992
|
var publicTeamMemberSummarySchema = z43.object({
|
|
19832
19993
|
id: z43.string(),
|
|
19833
19994
|
name: z43.string(),
|
|
19834
|
-
|
|
19995
|
+
roleLabel: z43.string().nullable(),
|
|
19996
|
+
summary: z43.string().nullable(),
|
|
19997
|
+
profilePath: z43.string().nullable()
|
|
19835
19998
|
});
|
|
19836
19999
|
var publicEventSchema = z43.object({
|
|
19837
20000
|
kind: z43.enum(["event", "course_session"]).optional(),
|
|
@@ -25678,7 +25841,25 @@ var newsletterSignupBlockDefinition = {
|
|
|
25678
25841
|
};
|
|
25679
25842
|
|
|
25680
25843
|
// ../blocks/src/system/blocks/team-members.ts
|
|
25844
|
+
import { z as z61 } from "zod";
|
|
25681
25845
|
var ITEM_NAME2 = "member";
|
|
25846
|
+
var teamMemberPhotoSchema = mediaSchema2.refine((media2) => media2.type === "image", {
|
|
25847
|
+
message: "Team member photos must be image media"
|
|
25848
|
+
}).nullable();
|
|
25849
|
+
var teamMemberDataSchema = z61.object({
|
|
25850
|
+
_type: z61.literal("teamMember"),
|
|
25851
|
+
id: z61.string(),
|
|
25852
|
+
name: z61.string(),
|
|
25853
|
+
role: z61.string().nullable(),
|
|
25854
|
+
roleLabel: z61.string().nullable(),
|
|
25855
|
+
bio: z61.string().nullable(),
|
|
25856
|
+
summary: z61.string().nullable(),
|
|
25857
|
+
photo: teamMemberPhotoSchema,
|
|
25858
|
+
profilePath: z61.string().nullable()
|
|
25859
|
+
});
|
|
25860
|
+
var teamMembersDataSchema = z61.array(teamMemberDataSchema);
|
|
25861
|
+
var dynamicSourceWhen = { equals: "site_staff" };
|
|
25862
|
+
var manualSourceWhen = { equals: "site_staff", not: true };
|
|
25682
25863
|
var headingNode = text(
|
|
25683
25864
|
{ as: "h2" },
|
|
25684
25865
|
bind("content.heading"),
|
|
@@ -25768,7 +25949,15 @@ var teamMemberStackLayout = el(
|
|
|
25768
25949
|
]
|
|
25769
25950
|
),
|
|
25770
25951
|
stack({ gap: "sm", className: "rb-team-member-body rb-flex-1 rb-min-w-0" }, [
|
|
25771
|
-
|
|
25952
|
+
link(
|
|
25953
|
+
{
|
|
25954
|
+
href: { $bind: { from: "profilePath" } },
|
|
25955
|
+
className: "rb-team-member-name-link"
|
|
25956
|
+
},
|
|
25957
|
+
[text({ as: "h3" }, bind("name"))],
|
|
25958
|
+
when("profilePath")
|
|
25959
|
+
),
|
|
25960
|
+
text({ as: "h3" }, when("profilePath", { not: true }), bind("name")),
|
|
25772
25961
|
text(
|
|
25773
25962
|
{ as: "p", className: "rb-team-member-role" },
|
|
25774
25963
|
when("role"),
|
|
@@ -25782,12 +25971,18 @@ var teamMemberStackLayout = el(
|
|
|
25782
25971
|
])
|
|
25783
25972
|
]
|
|
25784
25973
|
);
|
|
25785
|
-
var
|
|
25974
|
+
var manualGridMembersNode = when("content.source", manualSourceWhen)(repeaterFragmentLayout({
|
|
25786
25975
|
collectionPath: "content.members",
|
|
25787
25976
|
itemName: ITEM_NAME2,
|
|
25788
25977
|
fragments: { teamMember: teamMemberFragment },
|
|
25789
25978
|
itemGap: "sm"
|
|
25790
|
-
});
|
|
25979
|
+
}));
|
|
25980
|
+
var dynamicGridMembersNode = when("content.source", dynamicSourceWhen)(repeaterFragmentLayout({
|
|
25981
|
+
collectionPath: "data.members",
|
|
25982
|
+
itemName: ITEM_NAME2,
|
|
25983
|
+
fragments: { teamMember: teamMemberFragment },
|
|
25984
|
+
itemGap: "sm"
|
|
25985
|
+
}));
|
|
25791
25986
|
var gridVariant = wrapVariant3(
|
|
25792
25987
|
el(
|
|
25793
25988
|
"grid",
|
|
@@ -25801,22 +25996,29 @@ var gridVariant = wrapVariant3(
|
|
|
25801
25996
|
},
|
|
25802
25997
|
gap: { $bind: { from: "content.gap", fallback: "medium" } }
|
|
25803
25998
|
},
|
|
25804
|
-
[
|
|
25999
|
+
[manualGridMembersNode, dynamicGridMembersNode]
|
|
25805
26000
|
)
|
|
25806
26001
|
);
|
|
25807
|
-
var
|
|
26002
|
+
var manualStackMembersNode = when("content.source", manualSourceWhen)(repeaterFragmentLayout({
|
|
25808
26003
|
collectionPath: "content.members",
|
|
25809
26004
|
itemName: ITEM_NAME2,
|
|
25810
26005
|
fragments: { teamMember: teamMemberFragment },
|
|
25811
26006
|
layoutOverrides: { teamMember: teamMemberStackLayout },
|
|
25812
26007
|
itemGap: "sm"
|
|
25813
|
-
});
|
|
26008
|
+
}));
|
|
26009
|
+
var dynamicStackMembersNode = when("content.source", dynamicSourceWhen)(repeaterFragmentLayout({
|
|
26010
|
+
collectionPath: "data.members",
|
|
26011
|
+
itemName: ITEM_NAME2,
|
|
26012
|
+
fragments: { teamMember: teamMemberFragment },
|
|
26013
|
+
layoutOverrides: { teamMember: teamMemberStackLayout },
|
|
26014
|
+
itemGap: "sm"
|
|
26015
|
+
}));
|
|
25814
26016
|
var stackVariant = wrapVariant3({
|
|
25815
26017
|
type: "stack",
|
|
25816
26018
|
props: {
|
|
25817
26019
|
gap: { $bind: { from: "content.gap", fallback: "medium" } }
|
|
25818
26020
|
},
|
|
25819
|
-
children: [
|
|
26021
|
+
children: [manualStackMembersNode, dynamicStackMembersNode]
|
|
25820
26022
|
});
|
|
25821
26023
|
var teamMembersManifest = createBlockManifest({
|
|
25822
26024
|
id: "block.team-members",
|
|
@@ -25831,6 +26033,18 @@ var teamMembersManifest = createBlockManifest({
|
|
|
25831
26033
|
required: false,
|
|
25832
26034
|
maxLength: 120
|
|
25833
26035
|
}),
|
|
26036
|
+
parseFieldDefinition({
|
|
26037
|
+
id: "source",
|
|
26038
|
+
type: "select",
|
|
26039
|
+
label: "Team members",
|
|
26040
|
+
description: "Choose whether to use the site-wide team or a hand-picked list.",
|
|
26041
|
+
defaultValue: "manual",
|
|
26042
|
+
options: [
|
|
26043
|
+
{ value: "manual", label: "Choose manually" },
|
|
26044
|
+
{ value: "site_staff", label: "Use all site team members" }
|
|
26045
|
+
],
|
|
26046
|
+
ui: { intent: "behavior" }
|
|
26047
|
+
}),
|
|
25834
26048
|
parseFieldDefinition({
|
|
25835
26049
|
id: "layoutAlign",
|
|
25836
26050
|
type: "select",
|
|
@@ -25933,18 +26147,24 @@ var teamMembersManifest = createBlockManifest({
|
|
|
25933
26147
|
],
|
|
25934
26148
|
ui: { intent: "display" }
|
|
25935
26149
|
}),
|
|
25936
|
-
|
|
25937
|
-
|
|
25938
|
-
|
|
25939
|
-
|
|
25940
|
-
|
|
25941
|
-
|
|
25942
|
-
|
|
25943
|
-
|
|
25944
|
-
|
|
25945
|
-
|
|
26150
|
+
{
|
|
26151
|
+
...fragmentsToRepeaterField(
|
|
26152
|
+
"members",
|
|
26153
|
+
"Team members",
|
|
26154
|
+
{ teamMember: teamMemberFragment },
|
|
26155
|
+
{
|
|
26156
|
+
minItems: 0,
|
|
26157
|
+
maxItems: 50,
|
|
26158
|
+
itemLabel: "Team member",
|
|
26159
|
+
itemLabelSource: "name",
|
|
26160
|
+
description: "Add people to this section."
|
|
26161
|
+
}
|
|
26162
|
+
),
|
|
26163
|
+
ui: {
|
|
26164
|
+
intent: "content",
|
|
26165
|
+
visibleWhen: { field: "source", equals: "manual" }
|
|
25946
26166
|
}
|
|
25947
|
-
|
|
26167
|
+
}
|
|
25948
26168
|
],
|
|
25949
26169
|
layout: gridVariant,
|
|
25950
26170
|
variants: {
|
|
@@ -25970,7 +26190,20 @@ var teamMembersManifest = createBlockManifest({
|
|
|
25970
26190
|
styleTokens: { spacing: "lg" }
|
|
25971
26191
|
});
|
|
25972
26192
|
var teamMembersBlockDefinition = {
|
|
25973
|
-
manifest: teamMembersManifest
|
|
26193
|
+
manifest: teamMembersManifest,
|
|
26194
|
+
dataSchemas: {
|
|
26195
|
+
members: teamMembersDataSchema
|
|
26196
|
+
},
|
|
26197
|
+
dataLoaders: {
|
|
26198
|
+
members: {
|
|
26199
|
+
endpoint: "listPublicTeamMembers",
|
|
26200
|
+
params: {
|
|
26201
|
+
siteId: { $bind: { from: "$root.siteId" } },
|
|
26202
|
+
stage: { $bind: { from: "$root.previewStage", fallback: "published" } }
|
|
26203
|
+
},
|
|
26204
|
+
mode: "server"
|
|
26205
|
+
}
|
|
26206
|
+
}
|
|
25974
26207
|
};
|
|
25975
26208
|
|
|
25976
26209
|
// ../blocks/src/system/runtime/nodes/location-map.shared.ts
|
|
@@ -27181,7 +27414,7 @@ var builtinTransformDefinitions = [
|
|
|
27181
27414
|
var defaultTransforms = createTransformRegistry(builtinTransformDefinitions);
|
|
27182
27415
|
|
|
27183
27416
|
// src/config/content-validation.ts
|
|
27184
|
-
import { z as
|
|
27417
|
+
import { z as z62 } from "zod";
|
|
27185
27418
|
|
|
27186
27419
|
// src/types/block-kinds.ts
|
|
27187
27420
|
var SYSTEM_BLOCK_KINDS = [
|
|
@@ -27333,32 +27566,32 @@ function describeInvalidBindingTransform(transform) {
|
|
|
27333
27566
|
}
|
|
27334
27567
|
|
|
27335
27568
|
// src/config/content-validation.ts
|
|
27336
|
-
var jsonDataSchema =
|
|
27337
|
-
var contentTypeKeySchema =
|
|
27569
|
+
var jsonDataSchema = z62.record(z62.string(), z62.any());
|
|
27570
|
+
var contentTypeKeySchema = z62.string().min(1).regex(
|
|
27338
27571
|
/^[a-z][a-z0-9-]*$/,
|
|
27339
27572
|
"Key must be lowercase, start with a letter, and contain only letters, numbers, and hyphens"
|
|
27340
27573
|
);
|
|
27341
|
-
var templateConfigSchemaForward =
|
|
27342
|
-
blocks:
|
|
27343
|
-
|
|
27344
|
-
identifier:
|
|
27345
|
-
kind:
|
|
27346
|
-
scope:
|
|
27347
|
-
bindings:
|
|
27348
|
-
content:
|
|
27574
|
+
var templateConfigSchemaForward = z62.object({
|
|
27575
|
+
blocks: z62.array(
|
|
27576
|
+
z62.object({
|
|
27577
|
+
identifier: z62.string().min(1),
|
|
27578
|
+
kind: z62.string(),
|
|
27579
|
+
scope: z62.enum(["entry", "template"]),
|
|
27580
|
+
bindings: z62.record(z62.string(), z62.any()).optional(),
|
|
27581
|
+
content: z62.record(z62.string(), z62.any()).optional()
|
|
27349
27582
|
})
|
|
27350
27583
|
)
|
|
27351
27584
|
}).optional();
|
|
27352
|
-
var contentTypeConfigSchema =
|
|
27585
|
+
var contentTypeConfigSchema = z62.object({
|
|
27353
27586
|
key: contentTypeKeySchema,
|
|
27354
|
-
name:
|
|
27355
|
-
description:
|
|
27356
|
-
hasPages:
|
|
27357
|
-
routePattern:
|
|
27587
|
+
name: z62.string().min(1),
|
|
27588
|
+
description: z62.string().optional(),
|
|
27589
|
+
hasPages: z62.boolean(),
|
|
27590
|
+
routePattern: z62.string().optional(),
|
|
27358
27591
|
// Fields are validated as unknown[] here - deep field validation happens in @riverbankcms/blocks
|
|
27359
|
-
fields:
|
|
27360
|
-
titleField:
|
|
27361
|
-
isSingleton:
|
|
27592
|
+
fields: z62.array(z62.any()).min(1, "At least one field is required"),
|
|
27593
|
+
titleField: z62.string().optional(),
|
|
27594
|
+
isSingleton: z62.boolean().optional().default(false),
|
|
27362
27595
|
template: templateConfigSchemaForward
|
|
27363
27596
|
}).refine(
|
|
27364
27597
|
(data) => {
|
|
@@ -27380,7 +27613,7 @@ var contentTypeConfigSchema = z61.object({
|
|
|
27380
27613
|
}
|
|
27381
27614
|
if (!data.routePattern) {
|
|
27382
27615
|
ctx.addIssue({
|
|
27383
|
-
code:
|
|
27616
|
+
code: z62.ZodIssueCode.custom,
|
|
27384
27617
|
path: ["routePattern"],
|
|
27385
27618
|
message: "routePattern is required when hasPages is true. Non-singleton types must include {slug} placeholder."
|
|
27386
27619
|
});
|
|
@@ -27389,7 +27622,7 @@ var contentTypeConfigSchema = z61.object({
|
|
|
27389
27622
|
const parseResult = safeParseRouteTemplate(data.routePattern);
|
|
27390
27623
|
if (!parseResult.success) {
|
|
27391
27624
|
ctx.addIssue({
|
|
27392
|
-
code:
|
|
27625
|
+
code: z62.ZodIssueCode.custom,
|
|
27393
27626
|
path: ["routePattern"],
|
|
27394
27627
|
message: describeRouteTemplateParseError(parseResult.error)
|
|
27395
27628
|
});
|
|
@@ -27397,44 +27630,44 @@ var contentTypeConfigSchema = z61.object({
|
|
|
27397
27630
|
}
|
|
27398
27631
|
if (!data.isSingleton && parseResult.routeTemplate.kind !== "slug-template") {
|
|
27399
27632
|
ctx.addIssue({
|
|
27400
|
-
code:
|
|
27633
|
+
code: z62.ZodIssueCode.custom,
|
|
27401
27634
|
path: ["routePattern"],
|
|
27402
27635
|
message: "routePattern is required when hasPages is true. Non-singleton types must include {slug} placeholder."
|
|
27403
27636
|
});
|
|
27404
27637
|
}
|
|
27405
27638
|
});
|
|
27406
|
-
var fieldBindingSchema =
|
|
27407
|
-
source:
|
|
27408
|
-
path:
|
|
27639
|
+
var fieldBindingSchema = z62.object({
|
|
27640
|
+
source: z62.literal("field"),
|
|
27641
|
+
path: z62.string().min(1, "Field path is required")
|
|
27409
27642
|
});
|
|
27410
|
-
var metaBindingSchema =
|
|
27411
|
-
source:
|
|
27412
|
-
path:
|
|
27643
|
+
var metaBindingSchema = z62.object({
|
|
27644
|
+
source: z62.literal("meta"),
|
|
27645
|
+
path: z62.enum(TEMPLATE_BINDING_META_PATHS, {
|
|
27413
27646
|
error: (issue) => describeInvalidTemplateBindingMetaPath(String(issue.input))
|
|
27414
27647
|
})
|
|
27415
27648
|
});
|
|
27416
|
-
var literalBindingSchema =
|
|
27417
|
-
source:
|
|
27418
|
-
value:
|
|
27649
|
+
var literalBindingSchema = z62.object({
|
|
27650
|
+
source: z62.literal("literal"),
|
|
27651
|
+
value: z62.unknown()
|
|
27419
27652
|
});
|
|
27420
|
-
var transformBindingSchema =
|
|
27421
|
-
source:
|
|
27422
|
-
path:
|
|
27423
|
-
transform:
|
|
27653
|
+
var transformBindingSchema = z62.object({
|
|
27654
|
+
source: z62.literal("transform"),
|
|
27655
|
+
path: z62.string().min(1, "Transform path is required"),
|
|
27656
|
+
transform: z62.enum(BINDING_TRANSFORM_VALUES, {
|
|
27424
27657
|
error: (issue) => describeInvalidBindingTransform(String(issue.input))
|
|
27425
27658
|
})
|
|
27426
27659
|
});
|
|
27427
|
-
var baseBindingSchema =
|
|
27660
|
+
var baseBindingSchema = z62.discriminatedUnion("source", [
|
|
27428
27661
|
fieldBindingSchema,
|
|
27429
27662
|
metaBindingSchema,
|
|
27430
27663
|
literalBindingSchema,
|
|
27431
27664
|
transformBindingSchema
|
|
27432
27665
|
]);
|
|
27433
|
-
var fallbackBindingSchema =
|
|
27434
|
-
source:
|
|
27435
|
-
sources:
|
|
27666
|
+
var fallbackBindingSchema = z62.object({
|
|
27667
|
+
source: z62.literal("fallback"),
|
|
27668
|
+
sources: z62.array(z62.lazy(() => bindingSourceSchema)).min(1, "Fallback must have at least one source")
|
|
27436
27669
|
});
|
|
27437
|
-
var bindingSourceSchema =
|
|
27670
|
+
var bindingSourceSchema = z62.union([
|
|
27438
27671
|
baseBindingSchema,
|
|
27439
27672
|
fallbackBindingSchema
|
|
27440
27673
|
]);
|
|
@@ -27448,12 +27681,12 @@ function isValidBlockKind(kind) {
|
|
|
27448
27681
|
return false;
|
|
27449
27682
|
}
|
|
27450
27683
|
var BLOCK_KIND_ERROR_MESSAGE = 'Block kind must be a system block (e.g., "block.hero") or a custom block (e.g., "custom.myBlock")';
|
|
27451
|
-
var blockKindSchema =
|
|
27452
|
-
var templateBlockConfigSchema =
|
|
27453
|
-
identifier:
|
|
27684
|
+
var blockKindSchema = z62.string().refine(isValidBlockKind, { message: BLOCK_KIND_ERROR_MESSAGE });
|
|
27685
|
+
var templateBlockConfigSchema = z62.object({
|
|
27686
|
+
identifier: z62.string().min(1, "Block identifier is required"),
|
|
27454
27687
|
kind: blockKindSchema,
|
|
27455
|
-
scope:
|
|
27456
|
-
bindings:
|
|
27688
|
+
scope: z62.enum(["entry", "template"]),
|
|
27689
|
+
bindings: z62.record(z62.string(), bindingSourceSchema).optional(),
|
|
27457
27690
|
content: jsonDataSchema.optional()
|
|
27458
27691
|
}).refine(
|
|
27459
27692
|
(data) => {
|
|
@@ -27472,8 +27705,8 @@ var templateBlockConfigSchema = z61.object({
|
|
|
27472
27705
|
},
|
|
27473
27706
|
{ message: "Template-scoped blocks should define static content, not bindings" }
|
|
27474
27707
|
);
|
|
27475
|
-
var templateConfigSchema =
|
|
27476
|
-
blocks:
|
|
27708
|
+
var templateConfigSchema = z62.object({
|
|
27709
|
+
blocks: z62.array(templateBlockConfigSchema).min(1, "Template must have at least one block")
|
|
27477
27710
|
}).refine(
|
|
27478
27711
|
(data) => {
|
|
27479
27712
|
const identifiers = data.blocks.map((b) => b.identifier);
|
|
@@ -27482,77 +27715,77 @@ var templateConfigSchema = z61.object({
|
|
|
27482
27715
|
},
|
|
27483
27716
|
{ message: "Template block identifiers must be unique" }
|
|
27484
27717
|
);
|
|
27485
|
-
var blockConfigSchema =
|
|
27718
|
+
var blockConfigSchema = z62.object({
|
|
27486
27719
|
kind: blockKindSchema,
|
|
27487
27720
|
content: jsonDataSchema,
|
|
27488
|
-
orderIndex:
|
|
27489
|
-
});
|
|
27490
|
-
var pageConfigSchema =
|
|
27491
|
-
identifier:
|
|
27492
|
-
title:
|
|
27493
|
-
path:
|
|
27494
|
-
purpose:
|
|
27495
|
-
blocks:
|
|
27496
|
-
status:
|
|
27497
|
-
metaTitle:
|
|
27498
|
-
metaDescription:
|
|
27499
|
-
});
|
|
27500
|
-
var entryConfigSchema =
|
|
27501
|
-
identifier:
|
|
27502
|
-
contentType:
|
|
27721
|
+
orderIndex: z62.number().optional()
|
|
27722
|
+
});
|
|
27723
|
+
var pageConfigSchema = z62.object({
|
|
27724
|
+
identifier: z62.string().min(1, "Identifier is required"),
|
|
27725
|
+
title: z62.string().min(1, "Title is required"),
|
|
27726
|
+
path: z62.string().regex(/^\//, "Path must start with /"),
|
|
27727
|
+
purpose: z62.string().default("content"),
|
|
27728
|
+
blocks: z62.array(blockConfigSchema).optional(),
|
|
27729
|
+
status: z62.enum(["draft", "published"]).default("draft"),
|
|
27730
|
+
metaTitle: z62.string().optional(),
|
|
27731
|
+
metaDescription: z62.string().optional()
|
|
27732
|
+
});
|
|
27733
|
+
var entryConfigSchema = z62.object({
|
|
27734
|
+
identifier: z62.string().min(1, "Identifier is required"),
|
|
27735
|
+
contentType: z62.string().min(1, "Content type is required"),
|
|
27503
27736
|
data: jsonDataSchema,
|
|
27504
|
-
status:
|
|
27505
|
-
slug:
|
|
27506
|
-
summary:
|
|
27737
|
+
status: z62.enum(["draft", "published"]).default("draft"),
|
|
27738
|
+
slug: z62.string().optional(),
|
|
27739
|
+
summary: z62.string().optional(),
|
|
27507
27740
|
// Hard remove legacy config-only titles: titles must live in entry `data`.
|
|
27508
|
-
title:
|
|
27741
|
+
title: z62.any().optional().refine((value) => value === void 0, {
|
|
27509
27742
|
message: "Entry titles are now derived from entry data. Remove `title` and move it into `data` (e.g. `data.title`, or your configured `titleField`). Run `riverbankcms migrate entries` for guided migration."
|
|
27510
27743
|
}),
|
|
27511
|
-
metaTitle:
|
|
27512
|
-
metaDescription:
|
|
27744
|
+
metaTitle: z62.string().optional(),
|
|
27745
|
+
metaDescription: z62.string().optional()
|
|
27513
27746
|
});
|
|
27514
|
-
var dropdownLinkSchema =
|
|
27515
|
-
kind:
|
|
27747
|
+
var dropdownLinkSchema = z62.object({
|
|
27748
|
+
kind: z62.literal("dropdown")
|
|
27516
27749
|
});
|
|
27517
|
-
var navigationLinkSchema =
|
|
27750
|
+
var navigationLinkSchema = z62.discriminatedUnion("kind", [
|
|
27518
27751
|
...navigationLinkInputSchemaOptions,
|
|
27519
27752
|
dropdownLinkSchema
|
|
27520
27753
|
]);
|
|
27521
|
-
var baseNavigationItemSchema =
|
|
27522
|
-
label:
|
|
27754
|
+
var baseNavigationItemSchema = z62.object({
|
|
27755
|
+
label: z62.string().min(1, "Label is required"),
|
|
27523
27756
|
link: navigationLinkSchema,
|
|
27524
|
-
isCta:
|
|
27757
|
+
isCta: z62.boolean().optional()
|
|
27525
27758
|
});
|
|
27526
27759
|
var navigationItemConfigSchema = baseNavigationItemSchema.extend({
|
|
27527
|
-
children:
|
|
27528
|
-
});
|
|
27529
|
-
var navigationMenuConfigSchema =
|
|
27530
|
-
identifier:
|
|
27531
|
-
name:
|
|
27532
|
-
isPrimary:
|
|
27533
|
-
isFooter:
|
|
27534
|
-
items:
|
|
27760
|
+
children: z62.lazy(() => z62.array(navigationItemConfigSchema)).optional()
|
|
27761
|
+
});
|
|
27762
|
+
var navigationMenuConfigSchema = z62.object({
|
|
27763
|
+
identifier: z62.string().min(1, "Identifier is required"),
|
|
27764
|
+
name: z62.string().min(1, "Name is required"),
|
|
27765
|
+
isPrimary: z62.boolean().optional(),
|
|
27766
|
+
isFooter: z62.boolean().optional(),
|
|
27767
|
+
items: z62.array(navigationItemConfigSchema)
|
|
27535
27768
|
}).superRefine((menu, ctx) => {
|
|
27536
27769
|
const portalStats = collectPortalLinkStats(
|
|
27537
27770
|
menu.items
|
|
27538
27771
|
);
|
|
27539
27772
|
if (portalStats.count > 1) {
|
|
27540
27773
|
ctx.addIssue({
|
|
27541
|
-
code:
|
|
27774
|
+
code: z62.ZodIssueCode.custom,
|
|
27542
27775
|
message: "Only one portal link is allowed per navigation menu",
|
|
27543
27776
|
path: ["items"]
|
|
27544
27777
|
});
|
|
27545
27778
|
}
|
|
27546
27779
|
if (portalStats.nestedLabels.length > 0) {
|
|
27547
27780
|
ctx.addIssue({
|
|
27548
|
-
code:
|
|
27781
|
+
code: z62.ZodIssueCode.custom,
|
|
27549
27782
|
message: `Portal links must be root-level items: ${portalStats.nestedLabels.join(", ")}`,
|
|
27550
27783
|
path: ["items"]
|
|
27551
27784
|
});
|
|
27552
27785
|
}
|
|
27553
27786
|
if (portalStats.withChildrenLabels.length > 0) {
|
|
27554
27787
|
ctx.addIssue({
|
|
27555
|
-
code:
|
|
27788
|
+
code: z62.ZodIssueCode.custom,
|
|
27556
27789
|
message: `Portal links cannot contain child items: ${portalStats.withChildrenLabels.join(", ")}`,
|
|
27557
27790
|
path: ["items"]
|
|
27558
27791
|
});
|
|
@@ -27562,44 +27795,44 @@ var navigationMenuConfigSchema = z61.object({
|
|
|
27562
27795
|
);
|
|
27563
27796
|
if (cartStats.nestedLabels.length > 0) {
|
|
27564
27797
|
ctx.addIssue({
|
|
27565
|
-
code:
|
|
27798
|
+
code: z62.ZodIssueCode.custom,
|
|
27566
27799
|
message: `Cart links must be root-level items: ${cartStats.nestedLabels.join(", ")}`,
|
|
27567
27800
|
path: ["items"]
|
|
27568
27801
|
});
|
|
27569
27802
|
}
|
|
27570
27803
|
if (cartStats.withChildrenLabels.length > 0) {
|
|
27571
27804
|
ctx.addIssue({
|
|
27572
|
-
code:
|
|
27805
|
+
code: z62.ZodIssueCode.custom,
|
|
27573
27806
|
message: `Cart links cannot contain child items: ${cartStats.withChildrenLabels.join(", ")}`,
|
|
27574
27807
|
path: ["items"]
|
|
27575
27808
|
});
|
|
27576
27809
|
}
|
|
27577
27810
|
if (cartStats.ctaLabels.length > 0) {
|
|
27578
27811
|
ctx.addIssue({
|
|
27579
|
-
code:
|
|
27812
|
+
code: z62.ZodIssueCode.custom,
|
|
27580
27813
|
message: `Cart links cannot be marked as CTA: ${cartStats.ctaLabels.join(", ")}`,
|
|
27581
27814
|
path: ["items"]
|
|
27582
27815
|
});
|
|
27583
27816
|
}
|
|
27584
27817
|
if (cartStats.missingVisibleTextLabels.length > 0) {
|
|
27585
27818
|
ctx.addIssue({
|
|
27586
|
-
code:
|
|
27819
|
+
code: z62.ZodIssueCode.custom,
|
|
27587
27820
|
message: `Cart links with icon-with-label must provide a visible label: ${cartStats.missingVisibleTextLabels.join(", ")}`,
|
|
27588
27821
|
path: ["items"]
|
|
27589
27822
|
});
|
|
27590
27823
|
}
|
|
27591
27824
|
});
|
|
27592
|
-
var siteSettingsConfigSchema =
|
|
27593
|
-
homepagePath:
|
|
27594
|
-
siteTitle:
|
|
27595
|
-
siteDescription:
|
|
27596
|
-
defaultTemplates:
|
|
27825
|
+
var siteSettingsConfigSchema = z62.object({
|
|
27826
|
+
homepagePath: z62.string().optional(),
|
|
27827
|
+
siteTitle: z62.string().optional(),
|
|
27828
|
+
siteDescription: z62.string().optional(),
|
|
27829
|
+
defaultTemplates: z62.record(z62.string(), z62.string()).optional()
|
|
27597
27830
|
});
|
|
27598
|
-
var contentConfigBaseSchema =
|
|
27599
|
-
contentTypes:
|
|
27600
|
-
entries:
|
|
27601
|
-
pages:
|
|
27602
|
-
navigationMenus:
|
|
27831
|
+
var contentConfigBaseSchema = z62.object({
|
|
27832
|
+
contentTypes: z62.array(contentTypeConfigSchema).optional(),
|
|
27833
|
+
entries: z62.array(entryConfigSchema).optional(),
|
|
27834
|
+
pages: z62.array(pageConfigSchema).optional(),
|
|
27835
|
+
navigationMenus: z62.array(navigationMenuConfigSchema).optional(),
|
|
27603
27836
|
settings: siteSettingsConfigSchema.optional()
|
|
27604
27837
|
});
|
|
27605
27838
|
var contentConfigSchema = contentConfigBaseSchema.superRefine((data, ctx) => {
|
|
@@ -27608,7 +27841,7 @@ var contentConfigSchema = contentConfigBaseSchema.superRefine((data, ctx) => {
|
|
|
27608
27841
|
const duplicateKeys = keys.filter((key, i) => keys.indexOf(key) !== i);
|
|
27609
27842
|
if (duplicateKeys.length > 0) {
|
|
27610
27843
|
ctx.addIssue({
|
|
27611
|
-
code:
|
|
27844
|
+
code: z62.ZodIssueCode.custom,
|
|
27612
27845
|
message: `Content type keys must be unique. Duplicates: ${duplicateKeys.join(", ")}`,
|
|
27613
27846
|
path: ["contentTypes"]
|
|
27614
27847
|
});
|
|
@@ -27619,7 +27852,7 @@ var contentConfigSchema = contentConfigBaseSchema.superRefine((data, ctx) => {
|
|
|
27619
27852
|
const duplicateIds = identifiers.filter((id, i) => identifiers.indexOf(id) !== i);
|
|
27620
27853
|
if (duplicateIds.length > 0) {
|
|
27621
27854
|
ctx.addIssue({
|
|
27622
|
-
code:
|
|
27855
|
+
code: z62.ZodIssueCode.custom,
|
|
27623
27856
|
message: `Page identifiers must be unique. Duplicates: ${duplicateIds.join(", ")}`,
|
|
27624
27857
|
path: ["pages"]
|
|
27625
27858
|
});
|
|
@@ -27628,7 +27861,7 @@ var contentConfigSchema = contentConfigBaseSchema.superRefine((data, ctx) => {
|
|
|
27628
27861
|
const duplicatePaths = paths.filter((path, i) => paths.indexOf(path) !== i);
|
|
27629
27862
|
if (duplicatePaths.length > 0) {
|
|
27630
27863
|
ctx.addIssue({
|
|
27631
|
-
code:
|
|
27864
|
+
code: z62.ZodIssueCode.custom,
|
|
27632
27865
|
message: `Page paths must be unique. Duplicates: ${duplicatePaths.join(", ")}`,
|
|
27633
27866
|
path: ["pages"]
|
|
27634
27867
|
});
|
|
@@ -27639,7 +27872,7 @@ var contentConfigSchema = contentConfigBaseSchema.superRefine((data, ctx) => {
|
|
|
27639
27872
|
const duplicateIds = identifiers.filter((id, i) => identifiers.indexOf(id) !== i);
|
|
27640
27873
|
if (duplicateIds.length > 0) {
|
|
27641
27874
|
ctx.addIssue({
|
|
27642
|
-
code:
|
|
27875
|
+
code: z62.ZodIssueCode.custom,
|
|
27643
27876
|
message: `Entry identifiers must be unique. Duplicates: ${duplicateIds.join(", ")}`,
|
|
27644
27877
|
path: ["entries"]
|
|
27645
27878
|
});
|
|
@@ -27650,7 +27883,7 @@ var contentConfigSchema = contentConfigBaseSchema.superRefine((data, ctx) => {
|
|
|
27650
27883
|
const duplicateIds = identifiers.filter((id, i) => identifiers.indexOf(id) !== i);
|
|
27651
27884
|
if (duplicateIds.length > 0) {
|
|
27652
27885
|
ctx.addIssue({
|
|
27653
|
-
code:
|
|
27886
|
+
code: z62.ZodIssueCode.custom,
|
|
27654
27887
|
message: `Navigation menu identifiers must be unique. Duplicates: ${duplicateIds.join(", ")}`,
|
|
27655
27888
|
path: ["navigationMenus"]
|
|
27656
27889
|
});
|
|
@@ -27664,7 +27897,7 @@ var contentConfigSchema = contentConfigBaseSchema.superRefine((data, ctx) => {
|
|
|
27664
27897
|
const entriesForType = data.entries.filter((e) => e.contentType === singletonKey);
|
|
27665
27898
|
if (entriesForType.length > 1) {
|
|
27666
27899
|
ctx.addIssue({
|
|
27667
|
-
code:
|
|
27900
|
+
code: z62.ZodIssueCode.custom,
|
|
27668
27901
|
message: `Singleton content type "${singletonKey}" cannot have more than one entry. Found ${entriesForType.length} entries.`,
|
|
27669
27902
|
path: ["entries"]
|
|
27670
27903
|
});
|
|
@@ -27777,18 +28010,18 @@ function validateLayout(layout) {
|
|
|
27777
28010
|
}
|
|
27778
28011
|
|
|
27779
28012
|
// src/config/dashboard-validation.ts
|
|
27780
|
-
import { z as
|
|
27781
|
-
var navIdListSchema2 =
|
|
28013
|
+
import { z as z63 } from "zod";
|
|
28014
|
+
var navIdListSchema2 = z63.preprocess((value) => {
|
|
27782
28015
|
if (!Array.isArray(value)) return void 0;
|
|
27783
28016
|
const filtered = value.filter((v) => typeof v === "string" && v.trim().length > 0);
|
|
27784
28017
|
return filtered.length > 0 ? filtered : void 0;
|
|
27785
|
-
},
|
|
27786
|
-
var dashboardNavVisibilityBaseSchema2 =
|
|
27787
|
-
mode:
|
|
28018
|
+
}, z63.array(z63.string()).max(200, "Maximum 200 nav IDs").optional());
|
|
28019
|
+
var dashboardNavVisibilityBaseSchema2 = z63.object({
|
|
28020
|
+
mode: z63.enum(["augment", "restrict"]).optional(),
|
|
27788
28021
|
allowIds: navIdListSchema2,
|
|
27789
28022
|
denyIds: navIdListSchema2
|
|
27790
28023
|
}).strip();
|
|
27791
|
-
var dashboardNavVisibilityRolesSchema2 =
|
|
28024
|
+
var dashboardNavVisibilityRolesSchema2 = z63.object({
|
|
27792
28025
|
administrator: dashboardNavVisibilityBaseSchema2.optional(),
|
|
27793
28026
|
editor: dashboardNavVisibilityBaseSchema2.optional(),
|
|
27794
28027
|
team_member: dashboardNavVisibilityBaseSchema2.optional(),
|
|
@@ -27797,20 +28030,20 @@ var dashboardNavVisibilityRolesSchema2 = z62.object({
|
|
|
27797
28030
|
var dashboardNavVisibilitySchema2 = dashboardNavVisibilityBaseSchema2.extend({
|
|
27798
28031
|
roles: dashboardNavVisibilityRolesSchema2
|
|
27799
28032
|
}).strip();
|
|
27800
|
-
var dashboardNavigationConfigSchema2 =
|
|
28033
|
+
var dashboardNavigationConfigSchema2 = z63.object({
|
|
27801
28034
|
siteNav: dashboardNavVisibilitySchema2.optional(),
|
|
27802
28035
|
settingsNav: dashboardNavVisibilitySchema2.optional()
|
|
27803
28036
|
}).strip();
|
|
27804
|
-
var dashboardConfigSchema2 =
|
|
27805
|
-
previewEditingEnabled:
|
|
28037
|
+
var dashboardConfigSchema2 = z63.object({
|
|
28038
|
+
previewEditingEnabled: z63.boolean().optional(),
|
|
27806
28039
|
navigation: dashboardNavigationConfigSchema2.optional()
|
|
27807
28040
|
}).strip();
|
|
27808
28041
|
|
|
27809
28042
|
// src/zod/titleSourceSchema.ts
|
|
27810
|
-
import { z as
|
|
27811
|
-
var titleSourceValueSchema =
|
|
27812
|
-
|
|
27813
|
-
|
|
28043
|
+
import { z as z64 } from "zod";
|
|
28044
|
+
var titleSourceValueSchema = z64.union([
|
|
28045
|
+
z64.string().min(1),
|
|
28046
|
+
z64.array(z64.string().min(1)).min(1)
|
|
27814
28047
|
]);
|
|
27815
28048
|
|
|
27816
28049
|
// src/data/prefetchBlockData.ts
|
|
@@ -27819,6 +28052,7 @@ var SUPPORTED_LOADER_ENDPOINTS2 = [
|
|
|
27819
28052
|
"getPublishedEntryPreview",
|
|
27820
28053
|
"listPublicEvents",
|
|
27821
28054
|
"listPublicCourses",
|
|
28055
|
+
"listPublicTeamMembers",
|
|
27822
28056
|
"listPublicProducts",
|
|
27823
28057
|
"listPublicPasses",
|
|
27824
28058
|
"listPublicMemberships",
|
|
@@ -27828,11 +28062,11 @@ var SUPPORTED_LOADER_ENDPOINTS2 = [
|
|
|
27828
28062
|
];
|
|
27829
28063
|
|
|
27830
28064
|
// src/config/validation.ts
|
|
27831
|
-
var sdkThemePaletteSchema2 =
|
|
27832
|
-
var sdkThemeConfigSchema2 =
|
|
28065
|
+
var sdkThemePaletteSchema2 = z65.record(z65.string(), z65.string());
|
|
28066
|
+
var sdkThemeConfigSchema2 = z65.object({
|
|
27833
28067
|
palette: sdkThemePaletteSchema2
|
|
27834
28068
|
});
|
|
27835
|
-
var sdkSiteUrlSchema =
|
|
28069
|
+
var sdkSiteUrlSchema = z65.string().url("Must be a valid URL").refine((url) => {
|
|
27836
28070
|
try {
|
|
27837
28071
|
const parsed = new URL(url);
|
|
27838
28072
|
const isLocal = parsed.hostname === "localhost" || parsed.hostname.endsWith(".localhost") || parsed.hostname.endsWith(".local") || parsed.hostname.endsWith(".test");
|
|
@@ -27841,97 +28075,97 @@ var sdkSiteUrlSchema = z64.string().url("Must be a valid URL").refine((url) => {
|
|
|
27841
28075
|
return false;
|
|
27842
28076
|
}
|
|
27843
28077
|
}, { message: "Production URLs must use HTTPS" }).transform((url) => url.replace(/\/$/, ""));
|
|
27844
|
-
var sectionBackgroundSchema =
|
|
27845
|
-
id:
|
|
27846
|
-
label:
|
|
27847
|
-
token:
|
|
28078
|
+
var sectionBackgroundSchema = z65.object({
|
|
28079
|
+
id: z65.string(),
|
|
28080
|
+
label: z65.string(),
|
|
28081
|
+
token: z65.string()
|
|
27848
28082
|
// Reference to theme palette token
|
|
27849
28083
|
});
|
|
27850
|
-
var sectionSpacingSchema =
|
|
27851
|
-
var containerMaxWidthSchema =
|
|
27852
|
-
var containerAlignmentSchema =
|
|
27853
|
-
var sectionOptionsSchema =
|
|
27854
|
-
backgroundColor:
|
|
27855
|
-
backgroundImage:
|
|
27856
|
-
backgroundGradient:
|
|
27857
|
-
spacing:
|
|
27858
|
-
|
|
27859
|
-
|
|
28084
|
+
var sectionSpacingSchema = z65.enum(["compact", "default", "spacious"]);
|
|
28085
|
+
var containerMaxWidthSchema = z65.enum(["narrow", "default", "wide", "full"]);
|
|
28086
|
+
var containerAlignmentSchema = z65.enum(["left", "center", "right"]);
|
|
28087
|
+
var sectionOptionsSchema = z65.object({
|
|
28088
|
+
backgroundColor: z65.boolean().optional(),
|
|
28089
|
+
backgroundImage: z65.boolean().optional(),
|
|
28090
|
+
backgroundGradient: z65.boolean().optional(),
|
|
28091
|
+
spacing: z65.union([
|
|
28092
|
+
z65.array(sectionSpacingSchema),
|
|
28093
|
+
z65.boolean()
|
|
27860
28094
|
]).optional(),
|
|
27861
|
-
textColor:
|
|
28095
|
+
textColor: z65.boolean().optional()
|
|
27862
28096
|
}).optional();
|
|
27863
|
-
var containerOptionsSchema =
|
|
27864
|
-
maxWidth:
|
|
27865
|
-
|
|
27866
|
-
|
|
28097
|
+
var containerOptionsSchema = z65.object({
|
|
28098
|
+
maxWidth: z65.union([
|
|
28099
|
+
z65.array(containerMaxWidthSchema),
|
|
28100
|
+
z65.boolean()
|
|
27867
28101
|
]).optional(),
|
|
27868
|
-
alignment:
|
|
27869
|
-
|
|
27870
|
-
|
|
28102
|
+
alignment: z65.union([
|
|
28103
|
+
z65.array(containerAlignmentSchema),
|
|
28104
|
+
z65.boolean()
|
|
27871
28105
|
]).optional()
|
|
27872
28106
|
}).optional();
|
|
27873
|
-
var siteStyleConfigSchema =
|
|
27874
|
-
sectionBackgrounds:
|
|
28107
|
+
var siteStyleConfigSchema = z65.object({
|
|
28108
|
+
sectionBackgrounds: z65.array(sectionBackgroundSchema).optional(),
|
|
27875
28109
|
sectionOptions: sectionOptionsSchema,
|
|
27876
28110
|
containerOptions: containerOptionsSchema
|
|
27877
28111
|
}).optional();
|
|
27878
|
-
var sdkLoaderEndpointSchema2 =
|
|
28112
|
+
var sdkLoaderEndpointSchema2 = z65.enum(SUPPORTED_LOADER_ENDPOINTS2);
|
|
27879
28113
|
var allowedTransformIds = new Set(builtinTransformDefinitions.map((transform) => transform.id));
|
|
27880
|
-
var loaderTransformStepSchema =
|
|
27881
|
-
id:
|
|
28114
|
+
var loaderTransformStepSchema = z65.object({
|
|
28115
|
+
id: z65.string().refine((id) => allowedTransformIds.has(id), {
|
|
27882
28116
|
message: "Unknown transform id"
|
|
27883
28117
|
}),
|
|
27884
|
-
options:
|
|
28118
|
+
options: z65.record(z65.string(), z65.unknown()).optional()
|
|
27885
28119
|
});
|
|
27886
|
-
var loaderParamBindingSchema2 =
|
|
27887
|
-
$bind:
|
|
27888
|
-
from:
|
|
28120
|
+
var loaderParamBindingSchema2 = z65.object({
|
|
28121
|
+
$bind: z65.object({
|
|
28122
|
+
from: z65.string().min(1, "Binding path is required"),
|
|
27889
28123
|
// Loader params are ultimately string-normalized for query strings, so fallbacks should
|
|
27890
28124
|
// stay scalar. Use transforms (e.g. `value.jsonArray`) when you need to serialize
|
|
27891
28125
|
// more complex values into a string.
|
|
27892
|
-
fallback:
|
|
27893
|
-
transforms:
|
|
27894
|
-
pick:
|
|
27895
|
-
coerce:
|
|
28126
|
+
fallback: z65.union([z65.string(), z65.number(), z65.boolean(), z65.null()]).optional(),
|
|
28127
|
+
transforms: z65.array(loaderTransformStepSchema).default([]),
|
|
28128
|
+
pick: z65.enum(["value", "collection", "context"]).default("value"),
|
|
28129
|
+
coerce: z65.enum(["number", "boolean", "string"]).optional()
|
|
27896
28130
|
})
|
|
27897
28131
|
});
|
|
27898
|
-
var loaderParamValueSchema2 =
|
|
27899
|
-
|
|
27900
|
-
|
|
27901
|
-
|
|
28132
|
+
var loaderParamValueSchema2 = z65.union([
|
|
28133
|
+
z65.string(),
|
|
28134
|
+
z65.number(),
|
|
28135
|
+
z65.boolean(),
|
|
27902
28136
|
loaderParamBindingSchema2
|
|
27903
28137
|
]);
|
|
27904
|
-
var loaderWhenValueSchema =
|
|
27905
|
-
|
|
28138
|
+
var loaderWhenValueSchema = z65.union([
|
|
28139
|
+
z65.boolean(),
|
|
27906
28140
|
loaderParamBindingSchema2
|
|
27907
28141
|
]);
|
|
27908
|
-
var sdkConfigLoaderSchema2 =
|
|
28142
|
+
var sdkConfigLoaderSchema2 = z65.object({
|
|
27909
28143
|
endpoint: sdkLoaderEndpointSchema2,
|
|
27910
|
-
params:
|
|
27911
|
-
mode:
|
|
28144
|
+
params: z65.record(z65.string(), loaderParamValueSchema2),
|
|
28145
|
+
mode: z65.enum(["server", "client"]).default("server"),
|
|
27912
28146
|
when: loaderWhenValueSchema.optional()
|
|
27913
28147
|
});
|
|
27914
|
-
var sdkDataLoadersSchema2 =
|
|
28148
|
+
var sdkDataLoadersSchema2 = z65.record(z65.string(), sdkConfigLoaderSchema2).refine(
|
|
27915
28149
|
(loaders) => Object.keys(loaders).length <= 5,
|
|
27916
28150
|
{ message: "Maximum 5 data loaders per block" }
|
|
27917
28151
|
).optional();
|
|
27918
|
-
var fieldSelectOptionSchema =
|
|
27919
|
-
value:
|
|
27920
|
-
label:
|
|
28152
|
+
var fieldSelectOptionSchema = z65.object({
|
|
28153
|
+
value: z65.string().min(1, "Option value is required"),
|
|
28154
|
+
label: z65.string().min(1, "Option label is required")
|
|
27921
28155
|
});
|
|
27922
|
-
var blockFieldConfigSchema =
|
|
27923
|
-
options:
|
|
28156
|
+
var blockFieldConfigSchema = z65.object({
|
|
28157
|
+
options: z65.array(fieldSelectOptionSchema).min(1, "At least one option is required").optional()
|
|
27924
28158
|
});
|
|
27925
|
-
var blockFieldOptionsSchema =
|
|
27926
|
-
|
|
28159
|
+
var blockFieldOptionsSchema = z65.record(
|
|
28160
|
+
z65.string().regex(/^(block\.|custom\.)[a-z][a-z0-9-]*$/, {
|
|
27927
28161
|
message: "Block ID must be 'block.*' or 'custom.*' format"
|
|
27928
28162
|
}),
|
|
27929
|
-
|
|
27930
|
-
|
|
28163
|
+
z65.record(
|
|
28164
|
+
z65.string().min(1, "Field ID is required"),
|
|
27931
28165
|
blockFieldConfigSchema
|
|
27932
28166
|
)
|
|
27933
28167
|
).optional();
|
|
27934
|
-
var blockFieldExtensionSchema =
|
|
28168
|
+
var blockFieldExtensionSchema = z65.object({
|
|
27935
28169
|
fields: fieldSchema.array().min(1, "At least one field is required")
|
|
27936
28170
|
}).refine(
|
|
27937
28171
|
(data) => {
|
|
@@ -27945,10 +28179,10 @@ var blockFieldExtensionSchema = z64.object({
|
|
|
27945
28179
|
message: "Required fields must have a defaultValue to support existing blocks"
|
|
27946
28180
|
}
|
|
27947
28181
|
);
|
|
27948
|
-
var blockFieldExtensionsSchema =
|
|
28182
|
+
var blockFieldExtensionsSchema = z65.record(
|
|
27949
28183
|
// System blocks are kebab-case: block.body-text, block.event-calendar, ...
|
|
27950
28184
|
// Enforce: lowercase alphanumerics with single hyphens (no trailing hyphen, no consecutive hyphens).
|
|
27951
|
-
|
|
28185
|
+
z65.string().regex(/^block\.[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/, {
|
|
27952
28186
|
message: "Block ID must be 'block.*' format (system blocks only)"
|
|
27953
28187
|
}),
|
|
27954
28188
|
blockFieldExtensionSchema
|
|
@@ -27995,24 +28229,24 @@ function validateFieldIdConflicts(blockFieldExtensions) {
|
|
|
27995
28229
|
}
|
|
27996
28230
|
return conflicts;
|
|
27997
28231
|
}
|
|
27998
|
-
var syncConfigSchema =
|
|
27999
|
-
existingEntries:
|
|
28232
|
+
var syncConfigSchema = z65.object({
|
|
28233
|
+
existingEntries: z65.enum(["skip", "update"]).optional()
|
|
28000
28234
|
}).optional();
|
|
28001
|
-
var deployConfigSchema =
|
|
28002
|
-
verifyCommand:
|
|
28003
|
-
prebuildOutput:
|
|
28235
|
+
var deployConfigSchema = z65.object({
|
|
28236
|
+
verifyCommand: z65.string().optional(),
|
|
28237
|
+
prebuildOutput: z65.string().optional()
|
|
28004
28238
|
}).optional();
|
|
28005
|
-
var sdkCustomBlockSchema =
|
|
28239
|
+
var sdkCustomBlockSchema = z65.object({
|
|
28006
28240
|
// Block ID must start with 'custom.'
|
|
28007
|
-
id:
|
|
28241
|
+
id: z65.string().min(8).regex(/^custom\.[a-z][a-z0-9-]*$/, {
|
|
28008
28242
|
message: "Block ID must start with 'custom.' followed by lowercase letters, numbers, or hyphens"
|
|
28009
28243
|
}),
|
|
28010
|
-
title:
|
|
28244
|
+
title: z65.string().min(1, "Title is required"),
|
|
28011
28245
|
titleSource: titleSourceValueSchema.optional(),
|
|
28012
|
-
description:
|
|
28246
|
+
description: z65.string().optional(),
|
|
28013
28247
|
category: blockCategoryEnum,
|
|
28014
|
-
icon:
|
|
28015
|
-
tags:
|
|
28248
|
+
icon: z65.string().optional(),
|
|
28249
|
+
tags: z65.array(z65.string()).optional(),
|
|
28016
28250
|
// Reuse the exact field schema from @riverbankcms/blocks - all field types supported
|
|
28017
28251
|
fields: fieldSchema.array().min(1, "Custom blocks must have at least one field"),
|
|
28018
28252
|
// Data loaders for CMS endpoints
|
|
@@ -28020,14 +28254,14 @@ var sdkCustomBlockSchema = z64.object({
|
|
|
28020
28254
|
// Optional declarative layout - when present, block can render without React override
|
|
28021
28255
|
layout: NodeSchema.optional(),
|
|
28022
28256
|
// Optional variants system (preferred when a block has multiple structural layouts)
|
|
28023
|
-
variants:
|
|
28024
|
-
defaultVariant:
|
|
28025
|
-
variantOptions:
|
|
28026
|
-
|
|
28027
|
-
|
|
28028
|
-
label:
|
|
28029
|
-
description:
|
|
28030
|
-
icon:
|
|
28257
|
+
variants: z65.record(z65.string().min(1), NodeSchema).optional(),
|
|
28258
|
+
defaultVariant: z65.string().min(1).optional(),
|
|
28259
|
+
variantOptions: z65.record(
|
|
28260
|
+
z65.string().min(1),
|
|
28261
|
+
z65.object({
|
|
28262
|
+
label: z65.string().min(1).optional(),
|
|
28263
|
+
description: z65.string().min(1).optional(),
|
|
28264
|
+
icon: z65.string().min(1).optional()
|
|
28031
28265
|
})
|
|
28032
28266
|
).optional()
|
|
28033
28267
|
}).superRefine((data, ctx) => {
|
|
@@ -28038,7 +28272,7 @@ var sdkCustomBlockSchema = z64.object({
|
|
|
28038
28272
|
const exists = fields3.some((field) => field.id === source);
|
|
28039
28273
|
if (!exists) {
|
|
28040
28274
|
ctx.addIssue({
|
|
28041
|
-
code:
|
|
28275
|
+
code: z65.ZodIssueCode.custom,
|
|
28042
28276
|
message: `titleSource must reference a valid field ID (got "${source}")`,
|
|
28043
28277
|
path: Array.isArray(data.titleSource) ? ["titleSource", index] : ["titleSource"]
|
|
28044
28278
|
});
|
|
@@ -28047,7 +28281,7 @@ var sdkCustomBlockSchema = z64.object({
|
|
|
28047
28281
|
}
|
|
28048
28282
|
if (data.layout && data.variants) {
|
|
28049
28283
|
ctx.addIssue({
|
|
28050
|
-
code:
|
|
28284
|
+
code: z65.ZodIssueCode.custom,
|
|
28051
28285
|
message: "Custom block must define either `layout` or `variants`, not both",
|
|
28052
28286
|
path: ["variants"]
|
|
28053
28287
|
});
|
|
@@ -28057,7 +28291,7 @@ var sdkCustomBlockSchema = z64.object({
|
|
|
28057
28291
|
if (!result.valid) {
|
|
28058
28292
|
for (const error of result.errors) {
|
|
28059
28293
|
ctx.addIssue({
|
|
28060
|
-
code:
|
|
28294
|
+
code: z65.ZodIssueCode.custom,
|
|
28061
28295
|
message: error.message,
|
|
28062
28296
|
path: ["layout"]
|
|
28063
28297
|
});
|
|
@@ -28068,14 +28302,14 @@ var sdkCustomBlockSchema = z64.object({
|
|
|
28068
28302
|
const keys = Object.keys(data.variants);
|
|
28069
28303
|
if (keys.length === 0) {
|
|
28070
28304
|
ctx.addIssue({
|
|
28071
|
-
code:
|
|
28305
|
+
code: z65.ZodIssueCode.custom,
|
|
28072
28306
|
message: "`variants` must contain at least one variant key",
|
|
28073
28307
|
path: ["variants"]
|
|
28074
28308
|
});
|
|
28075
28309
|
}
|
|
28076
28310
|
if (data.defaultVariant && !Object.prototype.hasOwnProperty.call(data.variants, data.defaultVariant)) {
|
|
28077
28311
|
ctx.addIssue({
|
|
28078
|
-
code:
|
|
28312
|
+
code: z65.ZodIssueCode.custom,
|
|
28079
28313
|
message: "`defaultVariant` must be a key present in `variants`",
|
|
28080
28314
|
path: ["defaultVariant"]
|
|
28081
28315
|
});
|
|
@@ -28085,7 +28319,7 @@ var sdkCustomBlockSchema = z64.object({
|
|
|
28085
28319
|
if (!result.valid) {
|
|
28086
28320
|
for (const error of result.errors) {
|
|
28087
28321
|
ctx.addIssue({
|
|
28088
|
-
code:
|
|
28322
|
+
code: z65.ZodIssueCode.custom,
|
|
28089
28323
|
message: `${key}: ${error.message}`,
|
|
28090
28324
|
path: ["variants", key]
|
|
28091
28325
|
});
|
|
@@ -28096,7 +28330,7 @@ var sdkCustomBlockSchema = z64.object({
|
|
|
28096
28330
|
for (const key of Object.keys(data.variantOptions)) {
|
|
28097
28331
|
if (!Object.prototype.hasOwnProperty.call(data.variants, key)) {
|
|
28098
28332
|
ctx.addIssue({
|
|
28099
|
-
code:
|
|
28333
|
+
code: z65.ZodIssueCode.custom,
|
|
28100
28334
|
message: "`variantOptions` key must exist in `variants`",
|
|
28101
28335
|
path: ["variantOptions", key]
|
|
28102
28336
|
});
|
|
@@ -28105,58 +28339,58 @@ var sdkCustomBlockSchema = z64.object({
|
|
|
28105
28339
|
}
|
|
28106
28340
|
}
|
|
28107
28341
|
});
|
|
28108
|
-
var themeSourceSchema =
|
|
28109
|
-
var activeThemeSchema =
|
|
28342
|
+
var themeSourceSchema = z65.enum(["local", "cms"]).optional();
|
|
28343
|
+
var activeThemeSchema = z65.string().regex(/^[a-z0-9][a-z0-9-_]*$/, {
|
|
28110
28344
|
message: "Theme name must be lowercase alphanumeric with hyphens/underscores"
|
|
28111
28345
|
}).max(64, "Theme name too long").optional();
|
|
28112
28346
|
function isValidConfigBlockKind(kind) {
|
|
28113
28347
|
if (getBlockDefinition(kind)) return true;
|
|
28114
28348
|
return /^custom\.[a-z][a-z0-9-]*$/.test(kind);
|
|
28115
28349
|
}
|
|
28116
|
-
var layoutBlockKindSchema =
|
|
28350
|
+
var layoutBlockKindSchema = z65.string().refine(isValidConfigBlockKind, {
|
|
28117
28351
|
message: 'Block kind must be a system block (e.g., "block.hero") or a custom block (e.g., "custom.my-block")'
|
|
28118
28352
|
});
|
|
28119
|
-
var layoutFooterBlockSchema =
|
|
28120
|
-
id:
|
|
28353
|
+
var layoutFooterBlockSchema = z65.object({
|
|
28354
|
+
id: z65.string().min(1).optional(),
|
|
28121
28355
|
kind: layoutBlockKindSchema,
|
|
28122
28356
|
// Allow omitted content for blocks that rely on defaults.
|
|
28123
|
-
content:
|
|
28357
|
+
content: z65.record(z65.string(), z65.unknown()).optional()
|
|
28124
28358
|
}).strict();
|
|
28125
|
-
var layoutConfigSchema =
|
|
28126
|
-
footerBlocks:
|
|
28359
|
+
var layoutConfigSchema = z65.object({
|
|
28360
|
+
footerBlocks: z65.array(layoutFooterBlockSchema).optional()
|
|
28127
28361
|
}).strict();
|
|
28128
|
-
var sdkWorkflowIdSchema2 =
|
|
28362
|
+
var sdkWorkflowIdSchema2 = z65.string().min(1).max(SDK_WORKFLOW_ID_MAX_LENGTH).regex(SDK_WORKFLOW_ID_PATTERN, {
|
|
28129
28363
|
message: "Workflow ID must start with a lowercase letter and use lowercase letters, numbers, dots, underscores, or hyphens"
|
|
28130
28364
|
});
|
|
28131
|
-
var sdkWorkflowEndpointSchema2 =
|
|
28132
|
-
var sdkWorkflowTriggerSchema2 =
|
|
28133
|
-
|
|
28365
|
+
var sdkWorkflowEndpointSchema2 = z65.string().min(1).max(SDK_WORKFLOW_ENDPOINT_MAX_LENGTH).regex(SDK_WORKFLOW_ENDPOINT_PATTERN, { message: 'Workflow endpoint must be a site-relative path starting with "/"' });
|
|
28366
|
+
var sdkWorkflowTriggerSchema2 = z65.discriminatedUnion("type", [
|
|
28367
|
+
z65.object({ type: z65.literal("manual") }).strict()
|
|
28134
28368
|
]);
|
|
28135
|
-
var sdkWorkflowConfirmationSchema2 =
|
|
28136
|
-
title:
|
|
28137
|
-
body:
|
|
28369
|
+
var sdkWorkflowConfirmationSchema2 = z65.object({
|
|
28370
|
+
title: z65.string().trim().min(1).max(SDK_WORKFLOW_CONFIRMATION_TITLE_MAX_LENGTH),
|
|
28371
|
+
body: z65.string().trim().min(1).max(SDK_WORKFLOW_CONFIRMATION_BODY_MAX_LENGTH).optional()
|
|
28138
28372
|
}).strict();
|
|
28139
|
-
var sdkWorkflowConfigSchema2 =
|
|
28373
|
+
var sdkWorkflowConfigSchema2 = z65.object({
|
|
28140
28374
|
id: sdkWorkflowIdSchema2,
|
|
28141
|
-
title:
|
|
28142
|
-
description:
|
|
28143
|
-
contentType:
|
|
28375
|
+
title: z65.string().trim().min(1).max(SDK_WORKFLOW_TITLE_MAX_LENGTH),
|
|
28376
|
+
description: z65.string().trim().min(1).max(SDK_WORKFLOW_DESCRIPTION_MAX_LENGTH).optional(),
|
|
28377
|
+
contentType: z65.string().trim().min(1).max(SDK_WORKFLOW_CONTENT_TYPE_MAX_LENGTH),
|
|
28144
28378
|
endpoint: sdkWorkflowEndpointSchema2,
|
|
28145
|
-
triggers:
|
|
28379
|
+
triggers: z65.array(sdkWorkflowTriggerSchema2).min(1).max(SDK_WORKFLOW_TRIGGER_MAX_COUNT),
|
|
28146
28380
|
confirmation: sdkWorkflowConfirmationSchema2.optional()
|
|
28147
28381
|
}).strict();
|
|
28148
|
-
var sdkWorkflowsSchema2 =
|
|
28382
|
+
var sdkWorkflowsSchema2 = z65.array(sdkWorkflowConfigSchema2).max(SDK_WORKFLOW_MAX_COUNT, "Maximum 50 workflows per site").refine((workflows) => {
|
|
28149
28383
|
const ids = workflows.map((workflow) => workflow.id);
|
|
28150
28384
|
return ids.length === new Set(ids).size;
|
|
28151
28385
|
}, { message: "Workflow IDs must be unique" }).optional();
|
|
28152
|
-
var riverbankSiteConfigSchema =
|
|
28153
|
-
siteId:
|
|
28386
|
+
var riverbankSiteConfigSchema = z65.object({
|
|
28387
|
+
siteId: z65.string().uuid(),
|
|
28154
28388
|
previewUrl: sdkSiteUrlSchema.optional(),
|
|
28155
28389
|
liveUrl: sdkSiteUrlSchema.optional(),
|
|
28156
28390
|
theme: sdkThemeConfigSchema2.optional(),
|
|
28157
28391
|
styles: siteStyleConfigSchema,
|
|
28158
28392
|
layout: layoutConfigSchema.optional(),
|
|
28159
|
-
customBlocks:
|
|
28393
|
+
customBlocks: z65.array(sdkCustomBlockSchema).max(100, "Maximum 100 custom blocks per site").refine(
|
|
28160
28394
|
// Ensure unique block IDs
|
|
28161
28395
|
(blocks) => {
|
|
28162
28396
|
const ids = blocks.map((b) => b.id);
|
|
@@ -28169,7 +28403,7 @@ var riverbankSiteConfigSchema = z64.object({
|
|
|
28169
28403
|
workflows: sdkWorkflowsSchema2,
|
|
28170
28404
|
content: contentConfigSchema.optional(),
|
|
28171
28405
|
// CLI-related configuration (Phase 4)
|
|
28172
|
-
contentDir:
|
|
28406
|
+
contentDir: z65.string().optional(),
|
|
28173
28407
|
sync: syncConfigSchema,
|
|
28174
28408
|
deploy: deployConfigSchema,
|
|
28175
28409
|
// Theme sync configuration (Phase 5)
|