Skip to content

Commit edc061a

Browse files
authored
Fix create resource validation (#50)
1 parent 9d8e321 commit edc061a

6 files changed

Lines changed: 13 additions & 13 deletions

File tree

‎src/application/api/workspace.ts‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,8 @@ export type ExperienceCriteria = WorkspacePath & {
6767
export type SegmentedContentDefinition = Omit<SegmentedContent, 'id'>;
6868

6969
export type PersonalizedContentDefinition = {
70-
default: SlotContentMap,
71-
segmented: SegmentedContentDefinition[],
70+
default?: SlotContentMap,
71+
segmented?: SegmentedContentDefinition[],
7272
};
7373

7474
export type SlotDefinition = {

‎src/application/template/resourceMatcher.ts‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -257,12 +257,12 @@ export class ResourceMatcher {
257257
left: PersonalizedContentDefinition,
258258
right: PersonalizedContentDefinition,
259259
): boolean {
260-
if (ResourceMatcher.isSimilarSlotContent(left.default, right.default)) {
260+
if (ResourceMatcher.isSimilarSlotContent(left.default ?? {}, right.default ?? {})) {
261261
return true;
262262
}
263263

264-
for (const segmentedContent of left.segmented) {
265-
for (const otherSegmentedContent of right.segmented) {
264+
for (const segmentedContent of left.segmented ?? []) {
265+
for (const otherSegmentedContent of right.segmented ?? []) {
266266
if (
267267
deepEqual(segmentedContent.audiences, otherSegmentedContent.audiences)
268268
&& ResourceMatcher.isSimilarSlotContent(segmentedContent.content, otherSegmentedContent.content)

‎src/application/template/resourceRefactor.ts‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,8 +146,8 @@ export class ResourceRefactor {
146146
audiences: string[],
147147
): PersonalizedContentDefinition {
148148
return {
149-
default: this.refactorSlotContentMap(content.default),
150-
segmented: content.segmented.flatMap(segmentedContent => {
149+
default: this.refactorSlotContentMap(content.default ?? {}),
150+
segmented: (content.segmented ?? []).flatMap(segmentedContent => {
151151
const filteredAudiences = segmentedContent.audiences.filter(slug => audiences.includes(slug));
152152

153153
if (filteredAudiences.length === 0) {

‎src/application/template/resources.ts‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ export namespace WorkspaceResources {
9292

9393
let dynamicAttributePerContent = 0;
9494

95-
for (const [slotSlug, contentMap] of Object.entries(content.default)) {
95+
for (const [slotSlug, contentMap] of Object.entries(content.default ?? {})) {
9696
referencedSlots.add(slotSlug);
9797

9898
for (const [locale, slotContent] of Object.entries(contentMap)) {
@@ -106,7 +106,7 @@ export namespace WorkspaceResources {
106106

107107
let audiencesPerExperience = 0;
108108

109-
for (const segmentedContent of content.segmented) {
109+
for (const segmentedContent of content.segmented ?? []) {
110110
for (const audience of segmentedContent.audiences) {
111111
referencedAudiences.add(audience);
112112
}

‎src/infrastructure/application/api/graphql/workspace.ts‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -796,9 +796,9 @@ export class GraphqlWorkspaceApi implements WorkspaceApi {
796796
return {
797797
default: {
798798
id: randomUUID(),
799-
contents: GraphqlWorkspaceApi.createSlotContentMap(content.default),
799+
contents: GraphqlWorkspaceApi.createSlotContentMap(content.default ?? {}),
800800
},
801-
segmented: content.segmented.map(
801+
segmented: (content.segmented ?? []).map(
802802
segmentedContent => ({
803803
id: randomUUID(),
804804
audiences: segmentedContent.audiences,

‎src/infrastructure/application/validation/actions/createResourceOptionsValidator.ts‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -249,8 +249,8 @@ const segmentedContentSchema: ZodType<SegmentedContentDefinition> = z.strictObje
249249
});
250250

251251
const personalizedContentSchema: ZodType<PersonalizedContentDefinition> = z.strictObject({
252-
default: slotContentMap,
253-
segmented: z.array(segmentedContentSchema),
252+
default: slotContentMap.optional(),
253+
segmented: z.array(segmentedContentSchema).optional(),
254254
});
255255

256256
const experimentVariantSchema: ZodType<VariantDefinition> = z.strictObject({

0 commit comments

Comments
 (0)