@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
package/dist/server/config.mjs
CHANGED
|
@@ -44,7 +44,7 @@ function fallbackBinding(...sources) {
|
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
// src/config/validation.ts
|
|
47
|
-
import { z as
|
|
47
|
+
import { z as z65 } from "zod";
|
|
48
48
|
|
|
49
49
|
// ../api/src/cache-tags.ts
|
|
50
50
|
var TAG_TEMPLATES = {
|
|
@@ -898,13 +898,150 @@ var ENDPOINT_DEFINITIONS = {
|
|
|
898
898
|
"server:internal_error"
|
|
899
899
|
]
|
|
900
900
|
},
|
|
901
|
-
|
|
901
|
+
removeAppointmentResource: {
|
|
902
902
|
path: "/sites/{siteId}/bookings/resources/{resourceId}",
|
|
903
903
|
method: "DELETE",
|
|
904
904
|
auth: "user",
|
|
905
905
|
responseKind: "json",
|
|
906
906
|
errors: ["resource:not_found", "server:internal_error"]
|
|
907
907
|
},
|
|
908
|
+
createTeamMemberProfile: {
|
|
909
|
+
path: "/sites/{siteId}/bookings/resources/{resourceId}/profile",
|
|
910
|
+
method: "POST",
|
|
911
|
+
auth: "user",
|
|
912
|
+
responseKind: "json",
|
|
913
|
+
errors: [
|
|
914
|
+
"validation:invalid_input",
|
|
915
|
+
"resource:not_found",
|
|
916
|
+
"resource:conflict",
|
|
917
|
+
"server:internal_error"
|
|
918
|
+
]
|
|
919
|
+
},
|
|
920
|
+
updateTeamMemberProfilePolicy: {
|
|
921
|
+
path: "/sites/{siteId}/bookings/resources/profile-policy",
|
|
922
|
+
method: "PUT",
|
|
923
|
+
auth: "user",
|
|
924
|
+
responseKind: "json",
|
|
925
|
+
errors: ["validation:invalid_input", "server:internal_error"]
|
|
926
|
+
},
|
|
927
|
+
updateTeamMemberProfileContent: {
|
|
928
|
+
path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/content",
|
|
929
|
+
method: "PUT",
|
|
930
|
+
tags: [
|
|
931
|
+
"site-{siteId}",
|
|
932
|
+
"content-{siteId}-team-member",
|
|
933
|
+
"content-entry-{entryId}"
|
|
934
|
+
],
|
|
935
|
+
auth: "user",
|
|
936
|
+
responseKind: "json",
|
|
937
|
+
errors: [
|
|
938
|
+
"validation:invalid_input",
|
|
939
|
+
"resource:not_found",
|
|
940
|
+
"resource:conflict",
|
|
941
|
+
"server:internal_error"
|
|
942
|
+
]
|
|
943
|
+
},
|
|
944
|
+
publishTeamMemberProfile: {
|
|
945
|
+
path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/publish",
|
|
946
|
+
method: "POST",
|
|
947
|
+
tags: [
|
|
948
|
+
"site-{siteId}",
|
|
949
|
+
"content-{siteId}-team-member",
|
|
950
|
+
"content-entry-{entryId}"
|
|
951
|
+
],
|
|
952
|
+
auth: "user",
|
|
953
|
+
responseKind: "json",
|
|
954
|
+
errors: [
|
|
955
|
+
"validation:invalid_input",
|
|
956
|
+
"resource:not_found",
|
|
957
|
+
"server:internal_error"
|
|
958
|
+
]
|
|
959
|
+
},
|
|
960
|
+
discardTeamMemberProfileDraft: {
|
|
961
|
+
path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/discard",
|
|
962
|
+
method: "POST",
|
|
963
|
+
tags: [
|
|
964
|
+
"site-{siteId}",
|
|
965
|
+
"content-{siteId}-team-member",
|
|
966
|
+
"content-entry-{entryId}"
|
|
967
|
+
],
|
|
968
|
+
auth: "user",
|
|
969
|
+
responseKind: "json",
|
|
970
|
+
errors: [
|
|
971
|
+
"validation:invalid_input",
|
|
972
|
+
"resource:not_found",
|
|
973
|
+
"resource:conflict",
|
|
974
|
+
"server:internal_error"
|
|
975
|
+
]
|
|
976
|
+
},
|
|
977
|
+
unpublishTeamMemberProfile: {
|
|
978
|
+
path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/unpublish",
|
|
979
|
+
method: "POST",
|
|
980
|
+
tags: [
|
|
981
|
+
"site-{siteId}",
|
|
982
|
+
"content-{siteId}-team-member",
|
|
983
|
+
"content-entry-{entryId}"
|
|
984
|
+
],
|
|
985
|
+
auth: "user",
|
|
986
|
+
responseKind: "json",
|
|
987
|
+
errors: [
|
|
988
|
+
"validation:invalid_input",
|
|
989
|
+
"resource:not_found",
|
|
990
|
+
"resource:conflict",
|
|
991
|
+
"server:internal_error"
|
|
992
|
+
]
|
|
993
|
+
},
|
|
994
|
+
scheduleTeamMemberProfile: {
|
|
995
|
+
path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/schedule",
|
|
996
|
+
method: "POST",
|
|
997
|
+
tags: [
|
|
998
|
+
"site-{siteId}",
|
|
999
|
+
"content-{siteId}-team-member",
|
|
1000
|
+
"content-entry-{entryId}"
|
|
1001
|
+
],
|
|
1002
|
+
auth: "user",
|
|
1003
|
+
responseKind: "json",
|
|
1004
|
+
errors: [
|
|
1005
|
+
"validation:invalid_input",
|
|
1006
|
+
"resource:not_found",
|
|
1007
|
+
"resource:conflict",
|
|
1008
|
+
"server:internal_error"
|
|
1009
|
+
]
|
|
1010
|
+
},
|
|
1011
|
+
cancelScheduledTeamMemberProfile: {
|
|
1012
|
+
path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/{entryId}/schedule",
|
|
1013
|
+
method: "DELETE",
|
|
1014
|
+
tags: [
|
|
1015
|
+
"site-{siteId}",
|
|
1016
|
+
"content-{siteId}-team-member",
|
|
1017
|
+
"content-entry-{entryId}"
|
|
1018
|
+
],
|
|
1019
|
+
auth: "user",
|
|
1020
|
+
responseKind: "json",
|
|
1021
|
+
errors: [
|
|
1022
|
+
"validation:invalid_input",
|
|
1023
|
+
"resource:not_found",
|
|
1024
|
+
"resource:conflict",
|
|
1025
|
+
"server:internal_error"
|
|
1026
|
+
]
|
|
1027
|
+
},
|
|
1028
|
+
updateTeamMemberProfileRouteMetadata: {
|
|
1029
|
+
path: "/sites/{siteId}/bookings/resources/{resourceId}/profile/routes/{routeId}/metadata",
|
|
1030
|
+
method: "PATCH",
|
|
1031
|
+
tags: [
|
|
1032
|
+
TAG_TEMPLATES.siteCollection,
|
|
1033
|
+
TAG_TEMPLATES.siteRoutableContent,
|
|
1034
|
+
TAG_TEMPLATES.routeById
|
|
1035
|
+
],
|
|
1036
|
+
auth: "user",
|
|
1037
|
+
responseKind: "json",
|
|
1038
|
+
errors: [
|
|
1039
|
+
"validation:invalid_input",
|
|
1040
|
+
"resource:not_found",
|
|
1041
|
+
"resource:conflict",
|
|
1042
|
+
"server:internal_error"
|
|
1043
|
+
]
|
|
1044
|
+
},
|
|
908
1045
|
listAppointmentServices: {
|
|
909
1046
|
path: "/sites/{siteId}/bookings/services",
|
|
910
1047
|
method: "GET",
|
|
@@ -3278,6 +3415,15 @@ var ENDPOINT_DEFINITIONS = {
|
|
|
3278
3415
|
auth: "public",
|
|
3279
3416
|
responseKind: "json"
|
|
3280
3417
|
},
|
|
3418
|
+
listPublicTeamMembers: {
|
|
3419
|
+
path: "/public/sites/{siteId}/team-members",
|
|
3420
|
+
method: "GET",
|
|
3421
|
+
revalidate: 60,
|
|
3422
|
+
tags: ["public-team-members-{siteId}"],
|
|
3423
|
+
errors: [],
|
|
3424
|
+
auth: "public",
|
|
3425
|
+
responseKind: "json"
|
|
3426
|
+
},
|
|
3281
3427
|
getPublicCourse: {
|
|
3282
3428
|
path: "/public/sites/{siteId}/courses/{courseId}",
|
|
3283
3429
|
method: "GET",
|
|
@@ -6572,6 +6718,7 @@ var SUPPORTED_LOADER_ENDPOINTS = [
|
|
|
6572
6718
|
"listPublicEvents",
|
|
6573
6719
|
"getPublicEventDetails",
|
|
6574
6720
|
"listPublicCourses",
|
|
6721
|
+
"listPublicTeamMembers",
|
|
6575
6722
|
"listPublicProducts",
|
|
6576
6723
|
"listPublicPasses",
|
|
6577
6724
|
"listPublicMemberships",
|
|
@@ -15477,7 +15624,19 @@ var teamMemberFragment = defineFragment({
|
|
|
15477
15624
|
bind("photo")
|
|
15478
15625
|
)
|
|
15479
15626
|
]),
|
|
15480
|
-
|
|
15627
|
+
link(
|
|
15628
|
+
{
|
|
15629
|
+
href: { $bind: { from: "profilePath" } },
|
|
15630
|
+
className: "rb-team-member-name-link"
|
|
15631
|
+
},
|
|
15632
|
+
[text({ as: "h3" }, bind("name"))],
|
|
15633
|
+
when("profilePath")
|
|
15634
|
+
),
|
|
15635
|
+
text(
|
|
15636
|
+
{ as: "h3" },
|
|
15637
|
+
when("profilePath", { not: true }),
|
|
15638
|
+
bind("name")
|
|
15639
|
+
),
|
|
15481
15640
|
text({ as: "p", className: "rb-team-member-role" }, when("role"), bind("role")),
|
|
15482
15641
|
richText(
|
|
15483
15642
|
{ className: "rb-prose rb-max-w-none" },
|
|
@@ -19771,7 +19930,9 @@ var courseSessionSchema = z42.object({
|
|
|
19771
19930
|
var courseTeamMemberSummarySchema = z42.object({
|
|
19772
19931
|
id: z42.string(),
|
|
19773
19932
|
name: z42.string(),
|
|
19774
|
-
|
|
19933
|
+
roleLabel: z42.string().nullable(),
|
|
19934
|
+
summary: z42.string().nullable(),
|
|
19935
|
+
profilePath: z42.string().nullable()
|
|
19775
19936
|
});
|
|
19776
19937
|
var coursePricingOptionSchema = z42.object({
|
|
19777
19938
|
id: z42.string(),
|
|
@@ -19876,7 +20037,9 @@ var publicEventTicketTypeSchema = z43.object({
|
|
|
19876
20037
|
var publicTeamMemberSummarySchema = z43.object({
|
|
19877
20038
|
id: z43.string(),
|
|
19878
20039
|
name: z43.string(),
|
|
19879
|
-
|
|
20040
|
+
roleLabel: z43.string().nullable(),
|
|
20041
|
+
summary: z43.string().nullable(),
|
|
20042
|
+
profilePath: z43.string().nullable()
|
|
19880
20043
|
});
|
|
19881
20044
|
var publicEventSchema = z43.object({
|
|
19882
20045
|
kind: z43.enum(["event", "course_session"]).optional(),
|
|
@@ -25723,7 +25886,25 @@ var newsletterSignupBlockDefinition = {
|
|
|
25723
25886
|
};
|
|
25724
25887
|
|
|
25725
25888
|
// ../blocks/src/system/blocks/team-members.ts
|
|
25889
|
+
import { z as z61 } from "zod";
|
|
25726
25890
|
var ITEM_NAME2 = "member";
|
|
25891
|
+
var teamMemberPhotoSchema = mediaSchema2.refine((media2) => media2.type === "image", {
|
|
25892
|
+
message: "Team member photos must be image media"
|
|
25893
|
+
}).nullable();
|
|
25894
|
+
var teamMemberDataSchema = z61.object({
|
|
25895
|
+
_type: z61.literal("teamMember"),
|
|
25896
|
+
id: z61.string(),
|
|
25897
|
+
name: z61.string(),
|
|
25898
|
+
role: z61.string().nullable(),
|
|
25899
|
+
roleLabel: z61.string().nullable(),
|
|
25900
|
+
bio: z61.string().nullable(),
|
|
25901
|
+
summary: z61.string().nullable(),
|
|
25902
|
+
photo: teamMemberPhotoSchema,
|
|
25903
|
+
profilePath: z61.string().nullable()
|
|
25904
|
+
});
|
|
25905
|
+
var teamMembersDataSchema = z61.array(teamMemberDataSchema);
|
|
25906
|
+
var dynamicSourceWhen = { equals: "site_staff" };
|
|
25907
|
+
var manualSourceWhen = { equals: "site_staff", not: true };
|
|
25727
25908
|
var headingNode = text(
|
|
25728
25909
|
{ as: "h2" },
|
|
25729
25910
|
bind("content.heading"),
|
|
@@ -25813,7 +25994,15 @@ var teamMemberStackLayout = el(
|
|
|
25813
25994
|
]
|
|
25814
25995
|
),
|
|
25815
25996
|
stack({ gap: "sm", className: "rb-team-member-body rb-flex-1 rb-min-w-0" }, [
|
|
25816
|
-
|
|
25997
|
+
link(
|
|
25998
|
+
{
|
|
25999
|
+
href: { $bind: { from: "profilePath" } },
|
|
26000
|
+
className: "rb-team-member-name-link"
|
|
26001
|
+
},
|
|
26002
|
+
[text({ as: "h3" }, bind("name"))],
|
|
26003
|
+
when("profilePath")
|
|
26004
|
+
),
|
|
26005
|
+
text({ as: "h3" }, when("profilePath", { not: true }), bind("name")),
|
|
25817
26006
|
text(
|
|
25818
26007
|
{ as: "p", className: "rb-team-member-role" },
|
|
25819
26008
|
when("role"),
|
|
@@ -25827,12 +26016,18 @@ var teamMemberStackLayout = el(
|
|
|
25827
26016
|
])
|
|
25828
26017
|
]
|
|
25829
26018
|
);
|
|
25830
|
-
var
|
|
26019
|
+
var manualGridMembersNode = when("content.source", manualSourceWhen)(repeaterFragmentLayout({
|
|
25831
26020
|
collectionPath: "content.members",
|
|
25832
26021
|
itemName: ITEM_NAME2,
|
|
25833
26022
|
fragments: { teamMember: teamMemberFragment },
|
|
25834
26023
|
itemGap: "sm"
|
|
25835
|
-
});
|
|
26024
|
+
}));
|
|
26025
|
+
var dynamicGridMembersNode = when("content.source", dynamicSourceWhen)(repeaterFragmentLayout({
|
|
26026
|
+
collectionPath: "data.members",
|
|
26027
|
+
itemName: ITEM_NAME2,
|
|
26028
|
+
fragments: { teamMember: teamMemberFragment },
|
|
26029
|
+
itemGap: "sm"
|
|
26030
|
+
}));
|
|
25836
26031
|
var gridVariant = wrapVariant3(
|
|
25837
26032
|
el(
|
|
25838
26033
|
"grid",
|
|
@@ -25846,22 +26041,29 @@ var gridVariant = wrapVariant3(
|
|
|
25846
26041
|
},
|
|
25847
26042
|
gap: { $bind: { from: "content.gap", fallback: "medium" } }
|
|
25848
26043
|
},
|
|
25849
|
-
[
|
|
26044
|
+
[manualGridMembersNode, dynamicGridMembersNode]
|
|
25850
26045
|
)
|
|
25851
26046
|
);
|
|
25852
|
-
var
|
|
26047
|
+
var manualStackMembersNode = when("content.source", manualSourceWhen)(repeaterFragmentLayout({
|
|
25853
26048
|
collectionPath: "content.members",
|
|
25854
26049
|
itemName: ITEM_NAME2,
|
|
25855
26050
|
fragments: { teamMember: teamMemberFragment },
|
|
25856
26051
|
layoutOverrides: { teamMember: teamMemberStackLayout },
|
|
25857
26052
|
itemGap: "sm"
|
|
25858
|
-
});
|
|
26053
|
+
}));
|
|
26054
|
+
var dynamicStackMembersNode = when("content.source", dynamicSourceWhen)(repeaterFragmentLayout({
|
|
26055
|
+
collectionPath: "data.members",
|
|
26056
|
+
itemName: ITEM_NAME2,
|
|
26057
|
+
fragments: { teamMember: teamMemberFragment },
|
|
26058
|
+
layoutOverrides: { teamMember: teamMemberStackLayout },
|
|
26059
|
+
itemGap: "sm"
|
|
26060
|
+
}));
|
|
25859
26061
|
var stackVariant = wrapVariant3({
|
|
25860
26062
|
type: "stack",
|
|
25861
26063
|
props: {
|
|
25862
26064
|
gap: { $bind: { from: "content.gap", fallback: "medium" } }
|
|
25863
26065
|
},
|
|
25864
|
-
children: [
|
|
26066
|
+
children: [manualStackMembersNode, dynamicStackMembersNode]
|
|
25865
26067
|
});
|
|
25866
26068
|
var teamMembersManifest = createBlockManifest({
|
|
25867
26069
|
id: "block.team-members",
|
|
@@ -25876,6 +26078,18 @@ var teamMembersManifest = createBlockManifest({
|
|
|
25876
26078
|
required: false,
|
|
25877
26079
|
maxLength: 120
|
|
25878
26080
|
}),
|
|
26081
|
+
parseFieldDefinition({
|
|
26082
|
+
id: "source",
|
|
26083
|
+
type: "select",
|
|
26084
|
+
label: "Team members",
|
|
26085
|
+
description: "Choose whether to use the site-wide team or a hand-picked list.",
|
|
26086
|
+
defaultValue: "manual",
|
|
26087
|
+
options: [
|
|
26088
|
+
{ value: "manual", label: "Choose manually" },
|
|
26089
|
+
{ value: "site_staff", label: "Use all site team members" }
|
|
26090
|
+
],
|
|
26091
|
+
ui: { intent: "behavior" }
|
|
26092
|
+
}),
|
|
25879
26093
|
parseFieldDefinition({
|
|
25880
26094
|
id: "layoutAlign",
|
|
25881
26095
|
type: "select",
|
|
@@ -25978,18 +26192,24 @@ var teamMembersManifest = createBlockManifest({
|
|
|
25978
26192
|
],
|
|
25979
26193
|
ui: { intent: "display" }
|
|
25980
26194
|
}),
|
|
25981
|
-
|
|
25982
|
-
|
|
25983
|
-
|
|
25984
|
-
|
|
25985
|
-
|
|
25986
|
-
|
|
25987
|
-
|
|
25988
|
-
|
|
25989
|
-
|
|
25990
|
-
|
|
26195
|
+
{
|
|
26196
|
+
...fragmentsToRepeaterField(
|
|
26197
|
+
"members",
|
|
26198
|
+
"Team members",
|
|
26199
|
+
{ teamMember: teamMemberFragment },
|
|
26200
|
+
{
|
|
26201
|
+
minItems: 0,
|
|
26202
|
+
maxItems: 50,
|
|
26203
|
+
itemLabel: "Team member",
|
|
26204
|
+
itemLabelSource: "name",
|
|
26205
|
+
description: "Add people to this section."
|
|
26206
|
+
}
|
|
26207
|
+
),
|
|
26208
|
+
ui: {
|
|
26209
|
+
intent: "content",
|
|
26210
|
+
visibleWhen: { field: "source", equals: "manual" }
|
|
25991
26211
|
}
|
|
25992
|
-
|
|
26212
|
+
}
|
|
25993
26213
|
],
|
|
25994
26214
|
layout: gridVariant,
|
|
25995
26215
|
variants: {
|
|
@@ -26015,7 +26235,20 @@ var teamMembersManifest = createBlockManifest({
|
|
|
26015
26235
|
styleTokens: { spacing: "lg" }
|
|
26016
26236
|
});
|
|
26017
26237
|
var teamMembersBlockDefinition = {
|
|
26018
|
-
manifest: teamMembersManifest
|
|
26238
|
+
manifest: teamMembersManifest,
|
|
26239
|
+
dataSchemas: {
|
|
26240
|
+
members: teamMembersDataSchema
|
|
26241
|
+
},
|
|
26242
|
+
dataLoaders: {
|
|
26243
|
+
members: {
|
|
26244
|
+
endpoint: "listPublicTeamMembers",
|
|
26245
|
+
params: {
|
|
26246
|
+
siteId: { $bind: { from: "$root.siteId" } },
|
|
26247
|
+
stage: { $bind: { from: "$root.previewStage", fallback: "published" } }
|
|
26248
|
+
},
|
|
26249
|
+
mode: "server"
|
|
26250
|
+
}
|
|
26251
|
+
}
|
|
26019
26252
|
};
|
|
26020
26253
|
|
|
26021
26254
|
// ../blocks/src/system/runtime/nodes/location-map.shared.ts
|
|
@@ -27226,7 +27459,7 @@ var builtinTransformDefinitions = [
|
|
|
27226
27459
|
var defaultTransforms = createTransformRegistry(builtinTransformDefinitions);
|
|
27227
27460
|
|
|
27228
27461
|
// src/config/content-validation.ts
|
|
27229
|
-
import { z as
|
|
27462
|
+
import { z as z62 } from "zod";
|
|
27230
27463
|
|
|
27231
27464
|
// src/types/block-kinds.ts
|
|
27232
27465
|
var SYSTEM_BLOCK_KINDS = [
|
|
@@ -27366,32 +27599,32 @@ function describeInvalidBindingTransform(transform) {
|
|
|
27366
27599
|
}
|
|
27367
27600
|
|
|
27368
27601
|
// src/config/content-validation.ts
|
|
27369
|
-
var jsonDataSchema =
|
|
27370
|
-
var contentTypeKeySchema =
|
|
27602
|
+
var jsonDataSchema = z62.record(z62.string(), z62.any());
|
|
27603
|
+
var contentTypeKeySchema = z62.string().min(1).regex(
|
|
27371
27604
|
/^[a-z][a-z0-9-]*$/,
|
|
27372
27605
|
"Key must be lowercase, start with a letter, and contain only letters, numbers, and hyphens"
|
|
27373
27606
|
);
|
|
27374
|
-
var templateConfigSchemaForward =
|
|
27375
|
-
blocks:
|
|
27376
|
-
|
|
27377
|
-
identifier:
|
|
27378
|
-
kind:
|
|
27379
|
-
scope:
|
|
27380
|
-
bindings:
|
|
27381
|
-
content:
|
|
27607
|
+
var templateConfigSchemaForward = z62.object({
|
|
27608
|
+
blocks: z62.array(
|
|
27609
|
+
z62.object({
|
|
27610
|
+
identifier: z62.string().min(1),
|
|
27611
|
+
kind: z62.string(),
|
|
27612
|
+
scope: z62.enum(["entry", "template"]),
|
|
27613
|
+
bindings: z62.record(z62.string(), z62.any()).optional(),
|
|
27614
|
+
content: z62.record(z62.string(), z62.any()).optional()
|
|
27382
27615
|
})
|
|
27383
27616
|
)
|
|
27384
27617
|
}).optional();
|
|
27385
|
-
var contentTypeConfigSchema =
|
|
27618
|
+
var contentTypeConfigSchema = z62.object({
|
|
27386
27619
|
key: contentTypeKeySchema,
|
|
27387
|
-
name:
|
|
27388
|
-
description:
|
|
27389
|
-
hasPages:
|
|
27390
|
-
routePattern:
|
|
27620
|
+
name: z62.string().min(1),
|
|
27621
|
+
description: z62.string().optional(),
|
|
27622
|
+
hasPages: z62.boolean(),
|
|
27623
|
+
routePattern: z62.string().optional(),
|
|
27391
27624
|
// Fields are validated as unknown[] here - deep field validation happens in @riverbankcms/blocks
|
|
27392
|
-
fields:
|
|
27393
|
-
titleField:
|
|
27394
|
-
isSingleton:
|
|
27625
|
+
fields: z62.array(z62.any()).min(1, "At least one field is required"),
|
|
27626
|
+
titleField: z62.string().optional(),
|
|
27627
|
+
isSingleton: z62.boolean().optional().default(false),
|
|
27395
27628
|
template: templateConfigSchemaForward
|
|
27396
27629
|
}).refine(
|
|
27397
27630
|
(data) => {
|
|
@@ -27413,7 +27646,7 @@ var contentTypeConfigSchema = z61.object({
|
|
|
27413
27646
|
}
|
|
27414
27647
|
if (!data.routePattern) {
|
|
27415
27648
|
ctx.addIssue({
|
|
27416
|
-
code:
|
|
27649
|
+
code: z62.ZodIssueCode.custom,
|
|
27417
27650
|
path: ["routePattern"],
|
|
27418
27651
|
message: "routePattern is required when hasPages is true. Non-singleton types must include {slug} placeholder."
|
|
27419
27652
|
});
|
|
@@ -27422,7 +27655,7 @@ var contentTypeConfigSchema = z61.object({
|
|
|
27422
27655
|
const parseResult = safeParseRouteTemplate(data.routePattern);
|
|
27423
27656
|
if (!parseResult.success) {
|
|
27424
27657
|
ctx.addIssue({
|
|
27425
|
-
code:
|
|
27658
|
+
code: z62.ZodIssueCode.custom,
|
|
27426
27659
|
path: ["routePattern"],
|
|
27427
27660
|
message: describeRouteTemplateParseError(parseResult.error)
|
|
27428
27661
|
});
|
|
@@ -27430,44 +27663,44 @@ var contentTypeConfigSchema = z61.object({
|
|
|
27430
27663
|
}
|
|
27431
27664
|
if (!data.isSingleton && parseResult.routeTemplate.kind !== "slug-template") {
|
|
27432
27665
|
ctx.addIssue({
|
|
27433
|
-
code:
|
|
27666
|
+
code: z62.ZodIssueCode.custom,
|
|
27434
27667
|
path: ["routePattern"],
|
|
27435
27668
|
message: "routePattern is required when hasPages is true. Non-singleton types must include {slug} placeholder."
|
|
27436
27669
|
});
|
|
27437
27670
|
}
|
|
27438
27671
|
});
|
|
27439
|
-
var fieldBindingSchema =
|
|
27440
|
-
source:
|
|
27441
|
-
path:
|
|
27672
|
+
var fieldBindingSchema = z62.object({
|
|
27673
|
+
source: z62.literal("field"),
|
|
27674
|
+
path: z62.string().min(1, "Field path is required")
|
|
27442
27675
|
});
|
|
27443
|
-
var metaBindingSchema =
|
|
27444
|
-
source:
|
|
27445
|
-
path:
|
|
27676
|
+
var metaBindingSchema = z62.object({
|
|
27677
|
+
source: z62.literal("meta"),
|
|
27678
|
+
path: z62.enum(TEMPLATE_BINDING_META_PATHS, {
|
|
27446
27679
|
error: (issue) => describeInvalidTemplateBindingMetaPath(String(issue.input))
|
|
27447
27680
|
})
|
|
27448
27681
|
});
|
|
27449
|
-
var literalBindingSchema =
|
|
27450
|
-
source:
|
|
27451
|
-
value:
|
|
27682
|
+
var literalBindingSchema = z62.object({
|
|
27683
|
+
source: z62.literal("literal"),
|
|
27684
|
+
value: z62.unknown()
|
|
27452
27685
|
});
|
|
27453
|
-
var transformBindingSchema =
|
|
27454
|
-
source:
|
|
27455
|
-
path:
|
|
27456
|
-
transform:
|
|
27686
|
+
var transformBindingSchema = z62.object({
|
|
27687
|
+
source: z62.literal("transform"),
|
|
27688
|
+
path: z62.string().min(1, "Transform path is required"),
|
|
27689
|
+
transform: z62.enum(BINDING_TRANSFORM_VALUES, {
|
|
27457
27690
|
error: (issue) => describeInvalidBindingTransform(String(issue.input))
|
|
27458
27691
|
})
|
|
27459
27692
|
});
|
|
27460
|
-
var baseBindingSchema =
|
|
27693
|
+
var baseBindingSchema = z62.discriminatedUnion("source", [
|
|
27461
27694
|
fieldBindingSchema,
|
|
27462
27695
|
metaBindingSchema,
|
|
27463
27696
|
literalBindingSchema,
|
|
27464
27697
|
transformBindingSchema
|
|
27465
27698
|
]);
|
|
27466
|
-
var fallbackBindingSchema =
|
|
27467
|
-
source:
|
|
27468
|
-
sources:
|
|
27699
|
+
var fallbackBindingSchema = z62.object({
|
|
27700
|
+
source: z62.literal("fallback"),
|
|
27701
|
+
sources: z62.array(z62.lazy(() => bindingSourceSchema)).min(1, "Fallback must have at least one source")
|
|
27469
27702
|
});
|
|
27470
|
-
var bindingSourceSchema =
|
|
27703
|
+
var bindingSourceSchema = z62.union([
|
|
27471
27704
|
baseBindingSchema,
|
|
27472
27705
|
fallbackBindingSchema
|
|
27473
27706
|
]);
|
|
@@ -27481,12 +27714,12 @@ function isValidBlockKind(kind) {
|
|
|
27481
27714
|
return false;
|
|
27482
27715
|
}
|
|
27483
27716
|
var BLOCK_KIND_ERROR_MESSAGE = 'Block kind must be a system block (e.g., "block.hero") or a custom block (e.g., "custom.myBlock")';
|
|
27484
|
-
var blockKindSchema =
|
|
27485
|
-
var templateBlockConfigSchema =
|
|
27486
|
-
identifier:
|
|
27717
|
+
var blockKindSchema = z62.string().refine(isValidBlockKind, { message: BLOCK_KIND_ERROR_MESSAGE });
|
|
27718
|
+
var templateBlockConfigSchema = z62.object({
|
|
27719
|
+
identifier: z62.string().min(1, "Block identifier is required"),
|
|
27487
27720
|
kind: blockKindSchema,
|
|
27488
|
-
scope:
|
|
27489
|
-
bindings:
|
|
27721
|
+
scope: z62.enum(["entry", "template"]),
|
|
27722
|
+
bindings: z62.record(z62.string(), bindingSourceSchema).optional(),
|
|
27490
27723
|
content: jsonDataSchema.optional()
|
|
27491
27724
|
}).refine(
|
|
27492
27725
|
(data) => {
|
|
@@ -27505,8 +27738,8 @@ var templateBlockConfigSchema = z61.object({
|
|
|
27505
27738
|
},
|
|
27506
27739
|
{ message: "Template-scoped blocks should define static content, not bindings" }
|
|
27507
27740
|
);
|
|
27508
|
-
var templateConfigSchema =
|
|
27509
|
-
blocks:
|
|
27741
|
+
var templateConfigSchema = z62.object({
|
|
27742
|
+
blocks: z62.array(templateBlockConfigSchema).min(1, "Template must have at least one block")
|
|
27510
27743
|
}).refine(
|
|
27511
27744
|
(data) => {
|
|
27512
27745
|
const identifiers = data.blocks.map((b) => b.identifier);
|
|
@@ -27515,77 +27748,77 @@ var templateConfigSchema = z61.object({
|
|
|
27515
27748
|
},
|
|
27516
27749
|
{ message: "Template block identifiers must be unique" }
|
|
27517
27750
|
);
|
|
27518
|
-
var blockConfigSchema =
|
|
27751
|
+
var blockConfigSchema = z62.object({
|
|
27519
27752
|
kind: blockKindSchema,
|
|
27520
27753
|
content: jsonDataSchema,
|
|
27521
|
-
orderIndex:
|
|
27522
|
-
});
|
|
27523
|
-
var pageConfigSchema =
|
|
27524
|
-
identifier:
|
|
27525
|
-
title:
|
|
27526
|
-
path:
|
|
27527
|
-
purpose:
|
|
27528
|
-
blocks:
|
|
27529
|
-
status:
|
|
27530
|
-
metaTitle:
|
|
27531
|
-
metaDescription:
|
|
27532
|
-
});
|
|
27533
|
-
var entryConfigSchema =
|
|
27534
|
-
identifier:
|
|
27535
|
-
contentType:
|
|
27754
|
+
orderIndex: z62.number().optional()
|
|
27755
|
+
});
|
|
27756
|
+
var pageConfigSchema = z62.object({
|
|
27757
|
+
identifier: z62.string().min(1, "Identifier is required"),
|
|
27758
|
+
title: z62.string().min(1, "Title is required"),
|
|
27759
|
+
path: z62.string().regex(/^\//, "Path must start with /"),
|
|
27760
|
+
purpose: z62.string().default("content"),
|
|
27761
|
+
blocks: z62.array(blockConfigSchema).optional(),
|
|
27762
|
+
status: z62.enum(["draft", "published"]).default("draft"),
|
|
27763
|
+
metaTitle: z62.string().optional(),
|
|
27764
|
+
metaDescription: z62.string().optional()
|
|
27765
|
+
});
|
|
27766
|
+
var entryConfigSchema = z62.object({
|
|
27767
|
+
identifier: z62.string().min(1, "Identifier is required"),
|
|
27768
|
+
contentType: z62.string().min(1, "Content type is required"),
|
|
27536
27769
|
data: jsonDataSchema,
|
|
27537
|
-
status:
|
|
27538
|
-
slug:
|
|
27539
|
-
summary:
|
|
27770
|
+
status: z62.enum(["draft", "published"]).default("draft"),
|
|
27771
|
+
slug: z62.string().optional(),
|
|
27772
|
+
summary: z62.string().optional(),
|
|
27540
27773
|
// Hard remove legacy config-only titles: titles must live in entry `data`.
|
|
27541
|
-
title:
|
|
27774
|
+
title: z62.any().optional().refine((value) => value === void 0, {
|
|
27542
27775
|
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."
|
|
27543
27776
|
}),
|
|
27544
|
-
metaTitle:
|
|
27545
|
-
metaDescription:
|
|
27777
|
+
metaTitle: z62.string().optional(),
|
|
27778
|
+
metaDescription: z62.string().optional()
|
|
27546
27779
|
});
|
|
27547
|
-
var dropdownLinkSchema =
|
|
27548
|
-
kind:
|
|
27780
|
+
var dropdownLinkSchema = z62.object({
|
|
27781
|
+
kind: z62.literal("dropdown")
|
|
27549
27782
|
});
|
|
27550
|
-
var navigationLinkSchema =
|
|
27783
|
+
var navigationLinkSchema = z62.discriminatedUnion("kind", [
|
|
27551
27784
|
...navigationLinkInputSchemaOptions,
|
|
27552
27785
|
dropdownLinkSchema
|
|
27553
27786
|
]);
|
|
27554
|
-
var baseNavigationItemSchema =
|
|
27555
|
-
label:
|
|
27787
|
+
var baseNavigationItemSchema = z62.object({
|
|
27788
|
+
label: z62.string().min(1, "Label is required"),
|
|
27556
27789
|
link: navigationLinkSchema,
|
|
27557
|
-
isCta:
|
|
27790
|
+
isCta: z62.boolean().optional()
|
|
27558
27791
|
});
|
|
27559
27792
|
var navigationItemConfigSchema = baseNavigationItemSchema.extend({
|
|
27560
|
-
children:
|
|
27561
|
-
});
|
|
27562
|
-
var navigationMenuConfigSchema =
|
|
27563
|
-
identifier:
|
|
27564
|
-
name:
|
|
27565
|
-
isPrimary:
|
|
27566
|
-
isFooter:
|
|
27567
|
-
items:
|
|
27793
|
+
children: z62.lazy(() => z62.array(navigationItemConfigSchema)).optional()
|
|
27794
|
+
});
|
|
27795
|
+
var navigationMenuConfigSchema = z62.object({
|
|
27796
|
+
identifier: z62.string().min(1, "Identifier is required"),
|
|
27797
|
+
name: z62.string().min(1, "Name is required"),
|
|
27798
|
+
isPrimary: z62.boolean().optional(),
|
|
27799
|
+
isFooter: z62.boolean().optional(),
|
|
27800
|
+
items: z62.array(navigationItemConfigSchema)
|
|
27568
27801
|
}).superRefine((menu, ctx) => {
|
|
27569
27802
|
const portalStats = collectPortalLinkStats(
|
|
27570
27803
|
menu.items
|
|
27571
27804
|
);
|
|
27572
27805
|
if (portalStats.count > 1) {
|
|
27573
27806
|
ctx.addIssue({
|
|
27574
|
-
code:
|
|
27807
|
+
code: z62.ZodIssueCode.custom,
|
|
27575
27808
|
message: "Only one portal link is allowed per navigation menu",
|
|
27576
27809
|
path: ["items"]
|
|
27577
27810
|
});
|
|
27578
27811
|
}
|
|
27579
27812
|
if (portalStats.nestedLabels.length > 0) {
|
|
27580
27813
|
ctx.addIssue({
|
|
27581
|
-
code:
|
|
27814
|
+
code: z62.ZodIssueCode.custom,
|
|
27582
27815
|
message: `Portal links must be root-level items: ${portalStats.nestedLabels.join(", ")}`,
|
|
27583
27816
|
path: ["items"]
|
|
27584
27817
|
});
|
|
27585
27818
|
}
|
|
27586
27819
|
if (portalStats.withChildrenLabels.length > 0) {
|
|
27587
27820
|
ctx.addIssue({
|
|
27588
|
-
code:
|
|
27821
|
+
code: z62.ZodIssueCode.custom,
|
|
27589
27822
|
message: `Portal links cannot contain child items: ${portalStats.withChildrenLabels.join(", ")}`,
|
|
27590
27823
|
path: ["items"]
|
|
27591
27824
|
});
|
|
@@ -27595,44 +27828,44 @@ var navigationMenuConfigSchema = z61.object({
|
|
|
27595
27828
|
);
|
|
27596
27829
|
if (cartStats.nestedLabels.length > 0) {
|
|
27597
27830
|
ctx.addIssue({
|
|
27598
|
-
code:
|
|
27831
|
+
code: z62.ZodIssueCode.custom,
|
|
27599
27832
|
message: `Cart links must be root-level items: ${cartStats.nestedLabels.join(", ")}`,
|
|
27600
27833
|
path: ["items"]
|
|
27601
27834
|
});
|
|
27602
27835
|
}
|
|
27603
27836
|
if (cartStats.withChildrenLabels.length > 0) {
|
|
27604
27837
|
ctx.addIssue({
|
|
27605
|
-
code:
|
|
27838
|
+
code: z62.ZodIssueCode.custom,
|
|
27606
27839
|
message: `Cart links cannot contain child items: ${cartStats.withChildrenLabels.join(", ")}`,
|
|
27607
27840
|
path: ["items"]
|
|
27608
27841
|
});
|
|
27609
27842
|
}
|
|
27610
27843
|
if (cartStats.ctaLabels.length > 0) {
|
|
27611
27844
|
ctx.addIssue({
|
|
27612
|
-
code:
|
|
27845
|
+
code: z62.ZodIssueCode.custom,
|
|
27613
27846
|
message: `Cart links cannot be marked as CTA: ${cartStats.ctaLabels.join(", ")}`,
|
|
27614
27847
|
path: ["items"]
|
|
27615
27848
|
});
|
|
27616
27849
|
}
|
|
27617
27850
|
if (cartStats.missingVisibleTextLabels.length > 0) {
|
|
27618
27851
|
ctx.addIssue({
|
|
27619
|
-
code:
|
|
27852
|
+
code: z62.ZodIssueCode.custom,
|
|
27620
27853
|
message: `Cart links with icon-with-label must provide a visible label: ${cartStats.missingVisibleTextLabels.join(", ")}`,
|
|
27621
27854
|
path: ["items"]
|
|
27622
27855
|
});
|
|
27623
27856
|
}
|
|
27624
27857
|
});
|
|
27625
|
-
var siteSettingsConfigSchema =
|
|
27626
|
-
homepagePath:
|
|
27627
|
-
siteTitle:
|
|
27628
|
-
siteDescription:
|
|
27629
|
-
defaultTemplates:
|
|
27858
|
+
var siteSettingsConfigSchema = z62.object({
|
|
27859
|
+
homepagePath: z62.string().optional(),
|
|
27860
|
+
siteTitle: z62.string().optional(),
|
|
27861
|
+
siteDescription: z62.string().optional(),
|
|
27862
|
+
defaultTemplates: z62.record(z62.string(), z62.string()).optional()
|
|
27630
27863
|
});
|
|
27631
|
-
var contentConfigBaseSchema =
|
|
27632
|
-
contentTypes:
|
|
27633
|
-
entries:
|
|
27634
|
-
pages:
|
|
27635
|
-
navigationMenus:
|
|
27864
|
+
var contentConfigBaseSchema = z62.object({
|
|
27865
|
+
contentTypes: z62.array(contentTypeConfigSchema).optional(),
|
|
27866
|
+
entries: z62.array(entryConfigSchema).optional(),
|
|
27867
|
+
pages: z62.array(pageConfigSchema).optional(),
|
|
27868
|
+
navigationMenus: z62.array(navigationMenuConfigSchema).optional(),
|
|
27636
27869
|
settings: siteSettingsConfigSchema.optional()
|
|
27637
27870
|
});
|
|
27638
27871
|
var contentConfigSchema = contentConfigBaseSchema.superRefine((data, ctx) => {
|
|
@@ -27641,7 +27874,7 @@ var contentConfigSchema = contentConfigBaseSchema.superRefine((data, ctx) => {
|
|
|
27641
27874
|
const duplicateKeys = keys.filter((key, i) => keys.indexOf(key) !== i);
|
|
27642
27875
|
if (duplicateKeys.length > 0) {
|
|
27643
27876
|
ctx.addIssue({
|
|
27644
|
-
code:
|
|
27877
|
+
code: z62.ZodIssueCode.custom,
|
|
27645
27878
|
message: `Content type keys must be unique. Duplicates: ${duplicateKeys.join(", ")}`,
|
|
27646
27879
|
path: ["contentTypes"]
|
|
27647
27880
|
});
|
|
@@ -27652,7 +27885,7 @@ var contentConfigSchema = contentConfigBaseSchema.superRefine((data, ctx) => {
|
|
|
27652
27885
|
const duplicateIds = identifiers.filter((id, i) => identifiers.indexOf(id) !== i);
|
|
27653
27886
|
if (duplicateIds.length > 0) {
|
|
27654
27887
|
ctx.addIssue({
|
|
27655
|
-
code:
|
|
27888
|
+
code: z62.ZodIssueCode.custom,
|
|
27656
27889
|
message: `Page identifiers must be unique. Duplicates: ${duplicateIds.join(", ")}`,
|
|
27657
27890
|
path: ["pages"]
|
|
27658
27891
|
});
|
|
@@ -27661,7 +27894,7 @@ var contentConfigSchema = contentConfigBaseSchema.superRefine((data, ctx) => {
|
|
|
27661
27894
|
const duplicatePaths = paths.filter((path, i) => paths.indexOf(path) !== i);
|
|
27662
27895
|
if (duplicatePaths.length > 0) {
|
|
27663
27896
|
ctx.addIssue({
|
|
27664
|
-
code:
|
|
27897
|
+
code: z62.ZodIssueCode.custom,
|
|
27665
27898
|
message: `Page paths must be unique. Duplicates: ${duplicatePaths.join(", ")}`,
|
|
27666
27899
|
path: ["pages"]
|
|
27667
27900
|
});
|
|
@@ -27672,7 +27905,7 @@ var contentConfigSchema = contentConfigBaseSchema.superRefine((data, ctx) => {
|
|
|
27672
27905
|
const duplicateIds = identifiers.filter((id, i) => identifiers.indexOf(id) !== i);
|
|
27673
27906
|
if (duplicateIds.length > 0) {
|
|
27674
27907
|
ctx.addIssue({
|
|
27675
|
-
code:
|
|
27908
|
+
code: z62.ZodIssueCode.custom,
|
|
27676
27909
|
message: `Entry identifiers must be unique. Duplicates: ${duplicateIds.join(", ")}`,
|
|
27677
27910
|
path: ["entries"]
|
|
27678
27911
|
});
|
|
@@ -27683,7 +27916,7 @@ var contentConfigSchema = contentConfigBaseSchema.superRefine((data, ctx) => {
|
|
|
27683
27916
|
const duplicateIds = identifiers.filter((id, i) => identifiers.indexOf(id) !== i);
|
|
27684
27917
|
if (duplicateIds.length > 0) {
|
|
27685
27918
|
ctx.addIssue({
|
|
27686
|
-
code:
|
|
27919
|
+
code: z62.ZodIssueCode.custom,
|
|
27687
27920
|
message: `Navigation menu identifiers must be unique. Duplicates: ${duplicateIds.join(", ")}`,
|
|
27688
27921
|
path: ["navigationMenus"]
|
|
27689
27922
|
});
|
|
@@ -27697,7 +27930,7 @@ var contentConfigSchema = contentConfigBaseSchema.superRefine((data, ctx) => {
|
|
|
27697
27930
|
const entriesForType = data.entries.filter((e) => e.contentType === singletonKey);
|
|
27698
27931
|
if (entriesForType.length > 1) {
|
|
27699
27932
|
ctx.addIssue({
|
|
27700
|
-
code:
|
|
27933
|
+
code: z62.ZodIssueCode.custom,
|
|
27701
27934
|
message: `Singleton content type "${singletonKey}" cannot have more than one entry. Found ${entriesForType.length} entries.`,
|
|
27702
27935
|
path: ["entries"]
|
|
27703
27936
|
});
|
|
@@ -27810,18 +28043,18 @@ function validateLayout(layout) {
|
|
|
27810
28043
|
}
|
|
27811
28044
|
|
|
27812
28045
|
// src/config/dashboard-validation.ts
|
|
27813
|
-
import { z as
|
|
27814
|
-
var navIdListSchema2 =
|
|
28046
|
+
import { z as z63 } from "zod";
|
|
28047
|
+
var navIdListSchema2 = z63.preprocess((value) => {
|
|
27815
28048
|
if (!Array.isArray(value)) return void 0;
|
|
27816
28049
|
const filtered = value.filter((v) => typeof v === "string" && v.trim().length > 0);
|
|
27817
28050
|
return filtered.length > 0 ? filtered : void 0;
|
|
27818
|
-
},
|
|
27819
|
-
var dashboardNavVisibilityBaseSchema2 =
|
|
27820
|
-
mode:
|
|
28051
|
+
}, z63.array(z63.string()).max(200, "Maximum 200 nav IDs").optional());
|
|
28052
|
+
var dashboardNavVisibilityBaseSchema2 = z63.object({
|
|
28053
|
+
mode: z63.enum(["augment", "restrict"]).optional(),
|
|
27821
28054
|
allowIds: navIdListSchema2,
|
|
27822
28055
|
denyIds: navIdListSchema2
|
|
27823
28056
|
}).strip();
|
|
27824
|
-
var dashboardNavVisibilityRolesSchema2 =
|
|
28057
|
+
var dashboardNavVisibilityRolesSchema2 = z63.object({
|
|
27825
28058
|
administrator: dashboardNavVisibilityBaseSchema2.optional(),
|
|
27826
28059
|
editor: dashboardNavVisibilityBaseSchema2.optional(),
|
|
27827
28060
|
team_member: dashboardNavVisibilityBaseSchema2.optional(),
|
|
@@ -27830,20 +28063,20 @@ var dashboardNavVisibilityRolesSchema2 = z62.object({
|
|
|
27830
28063
|
var dashboardNavVisibilitySchema2 = dashboardNavVisibilityBaseSchema2.extend({
|
|
27831
28064
|
roles: dashboardNavVisibilityRolesSchema2
|
|
27832
28065
|
}).strip();
|
|
27833
|
-
var dashboardNavigationConfigSchema2 =
|
|
28066
|
+
var dashboardNavigationConfigSchema2 = z63.object({
|
|
27834
28067
|
siteNav: dashboardNavVisibilitySchema2.optional(),
|
|
27835
28068
|
settingsNav: dashboardNavVisibilitySchema2.optional()
|
|
27836
28069
|
}).strip();
|
|
27837
|
-
var dashboardConfigSchema2 =
|
|
27838
|
-
previewEditingEnabled:
|
|
28070
|
+
var dashboardConfigSchema2 = z63.object({
|
|
28071
|
+
previewEditingEnabled: z63.boolean().optional(),
|
|
27839
28072
|
navigation: dashboardNavigationConfigSchema2.optional()
|
|
27840
28073
|
}).strip();
|
|
27841
28074
|
|
|
27842
28075
|
// src/zod/titleSourceSchema.ts
|
|
27843
|
-
import { z as
|
|
27844
|
-
var titleSourceValueSchema =
|
|
27845
|
-
|
|
27846
|
-
|
|
28076
|
+
import { z as z64 } from "zod";
|
|
28077
|
+
var titleSourceValueSchema = z64.union([
|
|
28078
|
+
z64.string().min(1),
|
|
28079
|
+
z64.array(z64.string().min(1)).min(1)
|
|
27847
28080
|
]);
|
|
27848
28081
|
|
|
27849
28082
|
// src/data/prefetchBlockData.ts
|
|
@@ -27852,6 +28085,7 @@ var SUPPORTED_LOADER_ENDPOINTS2 = [
|
|
|
27852
28085
|
"getPublishedEntryPreview",
|
|
27853
28086
|
"listPublicEvents",
|
|
27854
28087
|
"listPublicCourses",
|
|
28088
|
+
"listPublicTeamMembers",
|
|
27855
28089
|
"listPublicProducts",
|
|
27856
28090
|
"listPublicPasses",
|
|
27857
28091
|
"listPublicMemberships",
|
|
@@ -27861,11 +28095,11 @@ var SUPPORTED_LOADER_ENDPOINTS2 = [
|
|
|
27861
28095
|
];
|
|
27862
28096
|
|
|
27863
28097
|
// src/config/validation.ts
|
|
27864
|
-
var sdkThemePaletteSchema2 =
|
|
27865
|
-
var sdkThemeConfigSchema2 =
|
|
28098
|
+
var sdkThemePaletteSchema2 = z65.record(z65.string(), z65.string());
|
|
28099
|
+
var sdkThemeConfigSchema2 = z65.object({
|
|
27866
28100
|
palette: sdkThemePaletteSchema2
|
|
27867
28101
|
});
|
|
27868
|
-
var sdkSiteUrlSchema =
|
|
28102
|
+
var sdkSiteUrlSchema = z65.string().url("Must be a valid URL").refine((url) => {
|
|
27869
28103
|
try {
|
|
27870
28104
|
const parsed = new URL(url);
|
|
27871
28105
|
const isLocal = parsed.hostname === "localhost" || parsed.hostname.endsWith(".localhost") || parsed.hostname.endsWith(".local") || parsed.hostname.endsWith(".test");
|
|
@@ -27874,97 +28108,97 @@ var sdkSiteUrlSchema = z64.string().url("Must be a valid URL").refine((url) => {
|
|
|
27874
28108
|
return false;
|
|
27875
28109
|
}
|
|
27876
28110
|
}, { message: "Production URLs must use HTTPS" }).transform((url) => url.replace(/\/$/, ""));
|
|
27877
|
-
var sectionBackgroundSchema =
|
|
27878
|
-
id:
|
|
27879
|
-
label:
|
|
27880
|
-
token:
|
|
28111
|
+
var sectionBackgroundSchema = z65.object({
|
|
28112
|
+
id: z65.string(),
|
|
28113
|
+
label: z65.string(),
|
|
28114
|
+
token: z65.string()
|
|
27881
28115
|
// Reference to theme palette token
|
|
27882
28116
|
});
|
|
27883
|
-
var sectionSpacingSchema =
|
|
27884
|
-
var containerMaxWidthSchema =
|
|
27885
|
-
var containerAlignmentSchema =
|
|
27886
|
-
var sectionOptionsSchema =
|
|
27887
|
-
backgroundColor:
|
|
27888
|
-
backgroundImage:
|
|
27889
|
-
backgroundGradient:
|
|
27890
|
-
spacing:
|
|
27891
|
-
|
|
27892
|
-
|
|
28117
|
+
var sectionSpacingSchema = z65.enum(["compact", "default", "spacious"]);
|
|
28118
|
+
var containerMaxWidthSchema = z65.enum(["narrow", "default", "wide", "full"]);
|
|
28119
|
+
var containerAlignmentSchema = z65.enum(["left", "center", "right"]);
|
|
28120
|
+
var sectionOptionsSchema = z65.object({
|
|
28121
|
+
backgroundColor: z65.boolean().optional(),
|
|
28122
|
+
backgroundImage: z65.boolean().optional(),
|
|
28123
|
+
backgroundGradient: z65.boolean().optional(),
|
|
28124
|
+
spacing: z65.union([
|
|
28125
|
+
z65.array(sectionSpacingSchema),
|
|
28126
|
+
z65.boolean()
|
|
27893
28127
|
]).optional(),
|
|
27894
|
-
textColor:
|
|
28128
|
+
textColor: z65.boolean().optional()
|
|
27895
28129
|
}).optional();
|
|
27896
|
-
var containerOptionsSchema =
|
|
27897
|
-
maxWidth:
|
|
27898
|
-
|
|
27899
|
-
|
|
28130
|
+
var containerOptionsSchema = z65.object({
|
|
28131
|
+
maxWidth: z65.union([
|
|
28132
|
+
z65.array(containerMaxWidthSchema),
|
|
28133
|
+
z65.boolean()
|
|
27900
28134
|
]).optional(),
|
|
27901
|
-
alignment:
|
|
27902
|
-
|
|
27903
|
-
|
|
28135
|
+
alignment: z65.union([
|
|
28136
|
+
z65.array(containerAlignmentSchema),
|
|
28137
|
+
z65.boolean()
|
|
27904
28138
|
]).optional()
|
|
27905
28139
|
}).optional();
|
|
27906
|
-
var siteStyleConfigSchema =
|
|
27907
|
-
sectionBackgrounds:
|
|
28140
|
+
var siteStyleConfigSchema = z65.object({
|
|
28141
|
+
sectionBackgrounds: z65.array(sectionBackgroundSchema).optional(),
|
|
27908
28142
|
sectionOptions: sectionOptionsSchema,
|
|
27909
28143
|
containerOptions: containerOptionsSchema
|
|
27910
28144
|
}).optional();
|
|
27911
|
-
var sdkLoaderEndpointSchema2 =
|
|
28145
|
+
var sdkLoaderEndpointSchema2 = z65.enum(SUPPORTED_LOADER_ENDPOINTS2);
|
|
27912
28146
|
var allowedTransformIds = new Set(builtinTransformDefinitions.map((transform) => transform.id));
|
|
27913
|
-
var loaderTransformStepSchema =
|
|
27914
|
-
id:
|
|
28147
|
+
var loaderTransformStepSchema = z65.object({
|
|
28148
|
+
id: z65.string().refine((id) => allowedTransformIds.has(id), {
|
|
27915
28149
|
message: "Unknown transform id"
|
|
27916
28150
|
}),
|
|
27917
|
-
options:
|
|
28151
|
+
options: z65.record(z65.string(), z65.unknown()).optional()
|
|
27918
28152
|
});
|
|
27919
|
-
var loaderParamBindingSchema2 =
|
|
27920
|
-
$bind:
|
|
27921
|
-
from:
|
|
28153
|
+
var loaderParamBindingSchema2 = z65.object({
|
|
28154
|
+
$bind: z65.object({
|
|
28155
|
+
from: z65.string().min(1, "Binding path is required"),
|
|
27922
28156
|
// Loader params are ultimately string-normalized for query strings, so fallbacks should
|
|
27923
28157
|
// stay scalar. Use transforms (e.g. `value.jsonArray`) when you need to serialize
|
|
27924
28158
|
// more complex values into a string.
|
|
27925
|
-
fallback:
|
|
27926
|
-
transforms:
|
|
27927
|
-
pick:
|
|
27928
|
-
coerce:
|
|
28159
|
+
fallback: z65.union([z65.string(), z65.number(), z65.boolean(), z65.null()]).optional(),
|
|
28160
|
+
transforms: z65.array(loaderTransformStepSchema).default([]),
|
|
28161
|
+
pick: z65.enum(["value", "collection", "context"]).default("value"),
|
|
28162
|
+
coerce: z65.enum(["number", "boolean", "string"]).optional()
|
|
27929
28163
|
})
|
|
27930
28164
|
});
|
|
27931
|
-
var loaderParamValueSchema2 =
|
|
27932
|
-
|
|
27933
|
-
|
|
27934
|
-
|
|
28165
|
+
var loaderParamValueSchema2 = z65.union([
|
|
28166
|
+
z65.string(),
|
|
28167
|
+
z65.number(),
|
|
28168
|
+
z65.boolean(),
|
|
27935
28169
|
loaderParamBindingSchema2
|
|
27936
28170
|
]);
|
|
27937
|
-
var loaderWhenValueSchema =
|
|
27938
|
-
|
|
28171
|
+
var loaderWhenValueSchema = z65.union([
|
|
28172
|
+
z65.boolean(),
|
|
27939
28173
|
loaderParamBindingSchema2
|
|
27940
28174
|
]);
|
|
27941
|
-
var sdkConfigLoaderSchema2 =
|
|
28175
|
+
var sdkConfigLoaderSchema2 = z65.object({
|
|
27942
28176
|
endpoint: sdkLoaderEndpointSchema2,
|
|
27943
|
-
params:
|
|
27944
|
-
mode:
|
|
28177
|
+
params: z65.record(z65.string(), loaderParamValueSchema2),
|
|
28178
|
+
mode: z65.enum(["server", "client"]).default("server"),
|
|
27945
28179
|
when: loaderWhenValueSchema.optional()
|
|
27946
28180
|
});
|
|
27947
|
-
var sdkDataLoadersSchema2 =
|
|
28181
|
+
var sdkDataLoadersSchema2 = z65.record(z65.string(), sdkConfigLoaderSchema2).refine(
|
|
27948
28182
|
(loaders) => Object.keys(loaders).length <= 5,
|
|
27949
28183
|
{ message: "Maximum 5 data loaders per block" }
|
|
27950
28184
|
).optional();
|
|
27951
|
-
var fieldSelectOptionSchema =
|
|
27952
|
-
value:
|
|
27953
|
-
label:
|
|
28185
|
+
var fieldSelectOptionSchema = z65.object({
|
|
28186
|
+
value: z65.string().min(1, "Option value is required"),
|
|
28187
|
+
label: z65.string().min(1, "Option label is required")
|
|
27954
28188
|
});
|
|
27955
|
-
var blockFieldConfigSchema =
|
|
27956
|
-
options:
|
|
28189
|
+
var blockFieldConfigSchema = z65.object({
|
|
28190
|
+
options: z65.array(fieldSelectOptionSchema).min(1, "At least one option is required").optional()
|
|
27957
28191
|
});
|
|
27958
|
-
var blockFieldOptionsSchema =
|
|
27959
|
-
|
|
28192
|
+
var blockFieldOptionsSchema = z65.record(
|
|
28193
|
+
z65.string().regex(/^(block\.|custom\.)[a-z][a-z0-9-]*$/, {
|
|
27960
28194
|
message: "Block ID must be 'block.*' or 'custom.*' format"
|
|
27961
28195
|
}),
|
|
27962
|
-
|
|
27963
|
-
|
|
28196
|
+
z65.record(
|
|
28197
|
+
z65.string().min(1, "Field ID is required"),
|
|
27964
28198
|
blockFieldConfigSchema
|
|
27965
28199
|
)
|
|
27966
28200
|
).optional();
|
|
27967
|
-
var blockFieldExtensionSchema =
|
|
28201
|
+
var blockFieldExtensionSchema = z65.object({
|
|
27968
28202
|
fields: fieldSchema.array().min(1, "At least one field is required")
|
|
27969
28203
|
}).refine(
|
|
27970
28204
|
(data) => {
|
|
@@ -27978,32 +28212,32 @@ var blockFieldExtensionSchema = z64.object({
|
|
|
27978
28212
|
message: "Required fields must have a defaultValue to support existing blocks"
|
|
27979
28213
|
}
|
|
27980
28214
|
);
|
|
27981
|
-
var blockFieldExtensionsSchema =
|
|
28215
|
+
var blockFieldExtensionsSchema = z65.record(
|
|
27982
28216
|
// System blocks are kebab-case: block.body-text, block.event-calendar, ...
|
|
27983
28217
|
// Enforce: lowercase alphanumerics with single hyphens (no trailing hyphen, no consecutive hyphens).
|
|
27984
|
-
|
|
28218
|
+
z65.string().regex(/^block\.[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/, {
|
|
27985
28219
|
message: "Block ID must be 'block.*' format (system blocks only)"
|
|
27986
28220
|
}),
|
|
27987
28221
|
blockFieldExtensionSchema
|
|
27988
28222
|
).optional();
|
|
27989
|
-
var syncConfigSchema =
|
|
27990
|
-
existingEntries:
|
|
28223
|
+
var syncConfigSchema = z65.object({
|
|
28224
|
+
existingEntries: z65.enum(["skip", "update"]).optional()
|
|
27991
28225
|
}).optional();
|
|
27992
|
-
var deployConfigSchema =
|
|
27993
|
-
verifyCommand:
|
|
27994
|
-
prebuildOutput:
|
|
28226
|
+
var deployConfigSchema = z65.object({
|
|
28227
|
+
verifyCommand: z65.string().optional(),
|
|
28228
|
+
prebuildOutput: z65.string().optional()
|
|
27995
28229
|
}).optional();
|
|
27996
|
-
var sdkCustomBlockSchema =
|
|
28230
|
+
var sdkCustomBlockSchema = z65.object({
|
|
27997
28231
|
// Block ID must start with 'custom.'
|
|
27998
|
-
id:
|
|
28232
|
+
id: z65.string().min(8).regex(/^custom\.[a-z][a-z0-9-]*$/, {
|
|
27999
28233
|
message: "Block ID must start with 'custom.' followed by lowercase letters, numbers, or hyphens"
|
|
28000
28234
|
}),
|
|
28001
|
-
title:
|
|
28235
|
+
title: z65.string().min(1, "Title is required"),
|
|
28002
28236
|
titleSource: titleSourceValueSchema.optional(),
|
|
28003
|
-
description:
|
|
28237
|
+
description: z65.string().optional(),
|
|
28004
28238
|
category: blockCategoryEnum,
|
|
28005
|
-
icon:
|
|
28006
|
-
tags:
|
|
28239
|
+
icon: z65.string().optional(),
|
|
28240
|
+
tags: z65.array(z65.string()).optional(),
|
|
28007
28241
|
// Reuse the exact field schema from @riverbankcms/blocks - all field types supported
|
|
28008
28242
|
fields: fieldSchema.array().min(1, "Custom blocks must have at least one field"),
|
|
28009
28243
|
// Data loaders for CMS endpoints
|
|
@@ -28011,14 +28245,14 @@ var sdkCustomBlockSchema = z64.object({
|
|
|
28011
28245
|
// Optional declarative layout - when present, block can render without React override
|
|
28012
28246
|
layout: NodeSchema.optional(),
|
|
28013
28247
|
// Optional variants system (preferred when a block has multiple structural layouts)
|
|
28014
|
-
variants:
|
|
28015
|
-
defaultVariant:
|
|
28016
|
-
variantOptions:
|
|
28017
|
-
|
|
28018
|
-
|
|
28019
|
-
label:
|
|
28020
|
-
description:
|
|
28021
|
-
icon:
|
|
28248
|
+
variants: z65.record(z65.string().min(1), NodeSchema).optional(),
|
|
28249
|
+
defaultVariant: z65.string().min(1).optional(),
|
|
28250
|
+
variantOptions: z65.record(
|
|
28251
|
+
z65.string().min(1),
|
|
28252
|
+
z65.object({
|
|
28253
|
+
label: z65.string().min(1).optional(),
|
|
28254
|
+
description: z65.string().min(1).optional(),
|
|
28255
|
+
icon: z65.string().min(1).optional()
|
|
28022
28256
|
})
|
|
28023
28257
|
).optional()
|
|
28024
28258
|
}).superRefine((data, ctx) => {
|
|
@@ -28029,7 +28263,7 @@ var sdkCustomBlockSchema = z64.object({
|
|
|
28029
28263
|
const exists = fields3.some((field) => field.id === source);
|
|
28030
28264
|
if (!exists) {
|
|
28031
28265
|
ctx.addIssue({
|
|
28032
|
-
code:
|
|
28266
|
+
code: z65.ZodIssueCode.custom,
|
|
28033
28267
|
message: `titleSource must reference a valid field ID (got "${source}")`,
|
|
28034
28268
|
path: Array.isArray(data.titleSource) ? ["titleSource", index] : ["titleSource"]
|
|
28035
28269
|
});
|
|
@@ -28038,7 +28272,7 @@ var sdkCustomBlockSchema = z64.object({
|
|
|
28038
28272
|
}
|
|
28039
28273
|
if (data.layout && data.variants) {
|
|
28040
28274
|
ctx.addIssue({
|
|
28041
|
-
code:
|
|
28275
|
+
code: z65.ZodIssueCode.custom,
|
|
28042
28276
|
message: "Custom block must define either `layout` or `variants`, not both",
|
|
28043
28277
|
path: ["variants"]
|
|
28044
28278
|
});
|
|
@@ -28048,7 +28282,7 @@ var sdkCustomBlockSchema = z64.object({
|
|
|
28048
28282
|
if (!result.valid) {
|
|
28049
28283
|
for (const error of result.errors) {
|
|
28050
28284
|
ctx.addIssue({
|
|
28051
|
-
code:
|
|
28285
|
+
code: z65.ZodIssueCode.custom,
|
|
28052
28286
|
message: error.message,
|
|
28053
28287
|
path: ["layout"]
|
|
28054
28288
|
});
|
|
@@ -28059,14 +28293,14 @@ var sdkCustomBlockSchema = z64.object({
|
|
|
28059
28293
|
const keys = Object.keys(data.variants);
|
|
28060
28294
|
if (keys.length === 0) {
|
|
28061
28295
|
ctx.addIssue({
|
|
28062
|
-
code:
|
|
28296
|
+
code: z65.ZodIssueCode.custom,
|
|
28063
28297
|
message: "`variants` must contain at least one variant key",
|
|
28064
28298
|
path: ["variants"]
|
|
28065
28299
|
});
|
|
28066
28300
|
}
|
|
28067
28301
|
if (data.defaultVariant && !Object.prototype.hasOwnProperty.call(data.variants, data.defaultVariant)) {
|
|
28068
28302
|
ctx.addIssue({
|
|
28069
|
-
code:
|
|
28303
|
+
code: z65.ZodIssueCode.custom,
|
|
28070
28304
|
message: "`defaultVariant` must be a key present in `variants`",
|
|
28071
28305
|
path: ["defaultVariant"]
|
|
28072
28306
|
});
|
|
@@ -28076,7 +28310,7 @@ var sdkCustomBlockSchema = z64.object({
|
|
|
28076
28310
|
if (!result.valid) {
|
|
28077
28311
|
for (const error of result.errors) {
|
|
28078
28312
|
ctx.addIssue({
|
|
28079
|
-
code:
|
|
28313
|
+
code: z65.ZodIssueCode.custom,
|
|
28080
28314
|
message: `${key}: ${error.message}`,
|
|
28081
28315
|
path: ["variants", key]
|
|
28082
28316
|
});
|
|
@@ -28087,7 +28321,7 @@ var sdkCustomBlockSchema = z64.object({
|
|
|
28087
28321
|
for (const key of Object.keys(data.variantOptions)) {
|
|
28088
28322
|
if (!Object.prototype.hasOwnProperty.call(data.variants, key)) {
|
|
28089
28323
|
ctx.addIssue({
|
|
28090
|
-
code:
|
|
28324
|
+
code: z65.ZodIssueCode.custom,
|
|
28091
28325
|
message: "`variantOptions` key must exist in `variants`",
|
|
28092
28326
|
path: ["variantOptions", key]
|
|
28093
28327
|
});
|
|
@@ -28096,58 +28330,58 @@ var sdkCustomBlockSchema = z64.object({
|
|
|
28096
28330
|
}
|
|
28097
28331
|
}
|
|
28098
28332
|
});
|
|
28099
|
-
var themeSourceSchema =
|
|
28100
|
-
var activeThemeSchema =
|
|
28333
|
+
var themeSourceSchema = z65.enum(["local", "cms"]).optional();
|
|
28334
|
+
var activeThemeSchema = z65.string().regex(/^[a-z0-9][a-z0-9-_]*$/, {
|
|
28101
28335
|
message: "Theme name must be lowercase alphanumeric with hyphens/underscores"
|
|
28102
28336
|
}).max(64, "Theme name too long").optional();
|
|
28103
28337
|
function isValidConfigBlockKind(kind) {
|
|
28104
28338
|
if (getBlockDefinition(kind)) return true;
|
|
28105
28339
|
return /^custom\.[a-z][a-z0-9-]*$/.test(kind);
|
|
28106
28340
|
}
|
|
28107
|
-
var layoutBlockKindSchema =
|
|
28341
|
+
var layoutBlockKindSchema = z65.string().refine(isValidConfigBlockKind, {
|
|
28108
28342
|
message: 'Block kind must be a system block (e.g., "block.hero") or a custom block (e.g., "custom.my-block")'
|
|
28109
28343
|
});
|
|
28110
|
-
var layoutFooterBlockSchema =
|
|
28111
|
-
id:
|
|
28344
|
+
var layoutFooterBlockSchema = z65.object({
|
|
28345
|
+
id: z65.string().min(1).optional(),
|
|
28112
28346
|
kind: layoutBlockKindSchema,
|
|
28113
28347
|
// Allow omitted content for blocks that rely on defaults.
|
|
28114
|
-
content:
|
|
28348
|
+
content: z65.record(z65.string(), z65.unknown()).optional()
|
|
28115
28349
|
}).strict();
|
|
28116
|
-
var layoutConfigSchema =
|
|
28117
|
-
footerBlocks:
|
|
28350
|
+
var layoutConfigSchema = z65.object({
|
|
28351
|
+
footerBlocks: z65.array(layoutFooterBlockSchema).optional()
|
|
28118
28352
|
}).strict();
|
|
28119
|
-
var sdkWorkflowIdSchema2 =
|
|
28353
|
+
var sdkWorkflowIdSchema2 = z65.string().min(1).max(SDK_WORKFLOW_ID_MAX_LENGTH).regex(SDK_WORKFLOW_ID_PATTERN, {
|
|
28120
28354
|
message: "Workflow ID must start with a lowercase letter and use lowercase letters, numbers, dots, underscores, or hyphens"
|
|
28121
28355
|
});
|
|
28122
|
-
var sdkWorkflowEndpointSchema2 =
|
|
28123
|
-
var sdkWorkflowTriggerSchema2 =
|
|
28124
|
-
|
|
28356
|
+
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 "/"' });
|
|
28357
|
+
var sdkWorkflowTriggerSchema2 = z65.discriminatedUnion("type", [
|
|
28358
|
+
z65.object({ type: z65.literal("manual") }).strict()
|
|
28125
28359
|
]);
|
|
28126
|
-
var sdkWorkflowConfirmationSchema2 =
|
|
28127
|
-
title:
|
|
28128
|
-
body:
|
|
28360
|
+
var sdkWorkflowConfirmationSchema2 = z65.object({
|
|
28361
|
+
title: z65.string().trim().min(1).max(SDK_WORKFLOW_CONFIRMATION_TITLE_MAX_LENGTH),
|
|
28362
|
+
body: z65.string().trim().min(1).max(SDK_WORKFLOW_CONFIRMATION_BODY_MAX_LENGTH).optional()
|
|
28129
28363
|
}).strict();
|
|
28130
|
-
var sdkWorkflowConfigSchema2 =
|
|
28364
|
+
var sdkWorkflowConfigSchema2 = z65.object({
|
|
28131
28365
|
id: sdkWorkflowIdSchema2,
|
|
28132
|
-
title:
|
|
28133
|
-
description:
|
|
28134
|
-
contentType:
|
|
28366
|
+
title: z65.string().trim().min(1).max(SDK_WORKFLOW_TITLE_MAX_LENGTH),
|
|
28367
|
+
description: z65.string().trim().min(1).max(SDK_WORKFLOW_DESCRIPTION_MAX_LENGTH).optional(),
|
|
28368
|
+
contentType: z65.string().trim().min(1).max(SDK_WORKFLOW_CONTENT_TYPE_MAX_LENGTH),
|
|
28135
28369
|
endpoint: sdkWorkflowEndpointSchema2,
|
|
28136
|
-
triggers:
|
|
28370
|
+
triggers: z65.array(sdkWorkflowTriggerSchema2).min(1).max(SDK_WORKFLOW_TRIGGER_MAX_COUNT),
|
|
28137
28371
|
confirmation: sdkWorkflowConfirmationSchema2.optional()
|
|
28138
28372
|
}).strict();
|
|
28139
|
-
var sdkWorkflowsSchema2 =
|
|
28373
|
+
var sdkWorkflowsSchema2 = z65.array(sdkWorkflowConfigSchema2).max(SDK_WORKFLOW_MAX_COUNT, "Maximum 50 workflows per site").refine((workflows) => {
|
|
28140
28374
|
const ids = workflows.map((workflow) => workflow.id);
|
|
28141
28375
|
return ids.length === new Set(ids).size;
|
|
28142
28376
|
}, { message: "Workflow IDs must be unique" }).optional();
|
|
28143
|
-
var riverbankSiteConfigSchema =
|
|
28144
|
-
siteId:
|
|
28377
|
+
var riverbankSiteConfigSchema = z65.object({
|
|
28378
|
+
siteId: z65.string().uuid(),
|
|
28145
28379
|
previewUrl: sdkSiteUrlSchema.optional(),
|
|
28146
28380
|
liveUrl: sdkSiteUrlSchema.optional(),
|
|
28147
28381
|
theme: sdkThemeConfigSchema2.optional(),
|
|
28148
28382
|
styles: siteStyleConfigSchema,
|
|
28149
28383
|
layout: layoutConfigSchema.optional(),
|
|
28150
|
-
customBlocks:
|
|
28384
|
+
customBlocks: z65.array(sdkCustomBlockSchema).max(100, "Maximum 100 custom blocks per site").refine(
|
|
28151
28385
|
// Ensure unique block IDs
|
|
28152
28386
|
(blocks) => {
|
|
28153
28387
|
const ids = blocks.map((b) => b.id);
|
|
@@ -28160,7 +28394,7 @@ var riverbankSiteConfigSchema = z64.object({
|
|
|
28160
28394
|
workflows: sdkWorkflowsSchema2,
|
|
28161
28395
|
content: contentConfigSchema.optional(),
|
|
28162
28396
|
// CLI-related configuration (Phase 4)
|
|
28163
|
-
contentDir:
|
|
28397
|
+
contentDir: z65.string().optional(),
|
|
28164
28398
|
sync: syncConfigSchema,
|
|
28165
28399
|
deploy: deployConfigSchema,
|
|
28166
28400
|
// Theme sync configuration (Phase 5)
|