@prismicio/types-internal 4.0.0-pr.6.e3136c3 → 4.0.0-pr.7.9dec8db
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/README.md +5 -5
- package/dist/content/codec/link.js +8 -8
- package/dist/content/codec/link.js.map +1 -1
- package/dist/content/codec/richText.js +2 -2
- package/dist/content/codec/richText.js.map +1 -1
- package/dist/content/document.d.ts +2 -3019
- package/dist/content/document.d.ts.map +1 -1
- package/dist/content/field.d.ts +1 -30
- package/dist/content/field.d.ts.map +1 -1
- package/dist/content/field.js.map +1 -1
- package/dist/content/group.d.ts +2 -1
- package/dist/content/group.d.ts.map +1 -1
- package/dist/content/group.js.map +1 -1
- package/dist/content/legacy/boolean.d.ts +1 -0
- package/dist/content/legacy/embed.d.ts +1 -0
- package/dist/content/legacy/empty.d.ts +1 -0
- package/dist/content/legacy/field.d.ts +1 -0
- package/dist/content/legacy/geopoint.d.ts +1 -0
- package/dist/content/legacy/group.d.ts +9 -0
- package/dist/content/legacy/group.d.ts.map +1 -0
- package/dist/content/legacy/group.js.map +1 -1
- package/dist/content/legacy/integrationField.d.ts +1 -0
- package/dist/content/legacy/link.d.ts +41 -0
- package/dist/content/legacy/link.d.ts.map +1 -0
- package/dist/content/legacy/link.js.map +1 -1
- package/dist/content/legacy/nestable.d.ts +1 -0
- package/dist/content/legacy/nestable.js.map +1 -1
- package/dist/content/legacy/repeatable.d.ts +1 -0
- package/dist/content/legacy/repeatable.js +2 -8
- package/dist/content/legacy/repeatable.js.map +1 -1
- package/dist/content/legacy/richText.d.ts +109 -0
- package/dist/content/legacy/richText.d.ts.map +1 -0
- package/dist/content/legacy/richText.js +3 -3
- package/dist/content/legacy/richText.js.map +1 -1
- package/dist/content/legacy/separator.d.ts +1 -0
- package/dist/content/legacy/slice.js +2 -3
- package/dist/content/legacy/slice.js.map +1 -1
- package/dist/content/legacy/table.d.ts +1 -0
- package/dist/content/link.d.ts +74 -99
- package/dist/content/link.d.ts.map +1 -1
- package/dist/content/link.js +2 -2
- package/dist/content/link.js.map +1 -1
- package/dist/content/nestable.d.ts +13 -749
- package/dist/content/nestable.d.ts.map +1 -1
- package/dist/content/nestable.js +1 -0
- package/dist/content/nestable.js.map +1 -1
- package/dist/content/repeatable.d.ts +3 -98
- package/dist/content/repeatable.d.ts.map +1 -1
- package/dist/content/richText.d.ts +81 -131
- package/dist/content/richText.d.ts.map +1 -1
- package/dist/content/richText.js +5 -4
- package/dist/content/richText.js.map +1 -1
- package/dist/content/slice.d.ts +6 -4509
- package/dist/content/slice.d.ts.map +1 -1
- package/dist/content/slice.js.map +1 -1
- package/dist/content/slices.d.ts +8 -6765
- package/dist/content/slices.d.ts.map +1 -1
- package/dist/content/table.d.ts +2 -134
- package/dist/content/table.d.ts.map +1 -1
- package/dist/content/widget.d.ts +5 -3020
- package/dist/content/widget.d.ts.map +1 -1
- package/dist/content/widget.js.map +1 -1
- package/dist/helpers/contentPath.js +1 -1
- package/dist/helpers/customTypeModel.d.ts +3 -2
- package/dist/helpers/customTypeModel.d.ts.map +1 -1
- package/dist/helpers/customTypeModel.js +31 -1
- package/dist/helpers/customTypeModel.js.map +1 -1
- package/dist/helpers/documentContent.d.ts +5 -10
- package/dist/helpers/documentContent.d.ts.map +1 -1
- package/dist/helpers/documentContent.js +18 -5
- package/dist/helpers/documentContent.js.map +1 -1
- package/dist/helpers/sliceContent.d.ts +12 -0
- package/dist/helpers/sliceContent.d.ts.map +1 -0
- package/dist/helpers/sliceContent.js +60 -0
- package/dist/helpers/sliceContent.js.map +1 -0
- package/dist/helpers/traverseContent.d.ts +21 -22
- package/dist/helpers/traverseContent.d.ts.map +1 -1
- package/dist/helpers/traverseContent.js +54 -22
- package/dist/helpers/traverseContent.js.map +1 -1
- package/dist/helpers/traverseContentWithModel.d.ts +20 -21
- package/dist/helpers/traverseContentWithModel.d.ts.map +1 -1
- package/dist/helpers/traverseContentWithModel.js +64 -38
- package/dist/helpers/traverseContentWithModel.js.map +1 -1
- package/dist/index.d.ts +26 -25
- package/dist/index.js +3 -1
- package/dist/io-ts.d.ts +3304 -70918
- package/dist/io-ts.d.ts.map +1 -1
- package/dist/io-ts.js +125 -122
- package/dist/io-ts.js.map +1 -1
- package/dist/model/customType.d.ts +3 -3329
- package/dist/model/customType.d.ts.map +1 -1
- package/dist/model/group.d.ts +391 -392
- package/dist/model/group.d.ts.map +1 -1
- package/dist/model/group.js.map +1 -1
- package/dist/model/image.d.ts +4 -4
- package/dist/model/image.js.map +1 -1
- package/dist/model/link.d.ts +18 -18
- package/dist/model/link.d.ts.map +1 -1
- package/dist/model/link.js +7 -7
- package/dist/model/link.js.map +1 -1
- package/dist/model/nestable.d.ts +17 -178
- package/dist/model/nestable.d.ts.map +1 -1
- package/dist/model/nestable.js +3 -3
- package/dist/model/nestable.js.map +1 -1
- package/dist/model/richText.d.ts +3 -7
- package/dist/model/richText.d.ts.map +1 -1
- package/dist/model/richText.js +4 -3
- package/dist/model/richText.js.map +1 -1
- package/dist/model/section.d.ts +3 -3329
- package/dist/model/section.d.ts.map +1 -1
- package/dist/model/select.d.ts +1 -1
- package/dist/model/select.js +1 -1
- package/dist/model/select.js.map +1 -1
- package/dist/model/slice.d.ts +861 -3800
- package/dist/model/slice.d.ts.map +1 -1
- package/dist/model/slice.js +7 -2
- package/dist/model/slice.js.map +1 -1
- package/dist/model/slices.d.ts +3 -2195
- package/dist/model/slices.d.ts.map +1 -1
- package/dist/model/table.d.ts +2 -1
- package/dist/model/table.d.ts.map +1 -1
- package/dist/model/table.js +9 -7
- package/dist/model/table.js.map +1 -1
- package/dist/model/widget.d.ts +14 -3339
- package/dist/model/widget.d.ts.map +1 -1
- package/dist/model/widget.js.map +1 -1
- package/dist/zod4.d.ts +1345 -34797
- package/dist/zod4.d.ts.map +1 -1
- package/dist/zod4.js +125 -122
- package/dist/zod4.js.map +1 -1
- package/package.json +3 -2
- package/src/content/codec/link.ts +8 -8
- package/src/content/codec/richText.ts +10 -6
- package/src/content/field.ts +9 -2
- package/src/content/group.ts +5 -2
- package/src/content/legacy/group.ts +12 -4
- package/src/content/legacy/link.ts +32 -9
- package/src/content/legacy/nestable.ts +26 -2
- package/src/content/legacy/repeatable.ts +3 -16
- package/src/content/legacy/richText.ts +40 -7
- package/src/content/legacy/slice.ts +8 -7
- package/src/content/legacy/widget.ts +6 -2
- package/src/content/link.ts +32 -9
- package/src/content/nestable.ts +42 -2
- package/src/content/richText.ts +31 -9
- package/src/content/slice.ts +2 -2
- package/src/content/widget.ts +6 -2
- package/src/helpers/customTypeModel.ts +44 -0
- package/src/helpers/documentContent.ts +45 -17
- package/src/helpers/sliceContent.ts +86 -0
- package/src/helpers/traverseContent.ts +108 -41
- package/src/helpers/traverseContentWithModel.ts +91 -60
- package/src/index.ts +5 -2
- package/src/io-ts.ts +166 -140
- package/src/model/group.ts +4 -1
- package/src/model/image.ts +1 -1
- package/src/model/link.ts +39 -45
- package/src/model/nestable.ts +33 -1
- package/src/model/richText.ts +2 -2
- package/src/model/select.ts +2 -2
- package/src/model/slice.ts +36 -9
- package/src/model/table.ts +11 -2
- package/src/model/widget.ts +8 -4
- package/src/zod4.ts +166 -140
|
@@ -5,42 +5,47 @@ import { defaultCtx } from "../content/codec/legacyContentCtx"
|
|
|
5
5
|
import type { DocumentContent } from "../content/document"
|
|
6
6
|
import type { DocumentLegacy } from "../content/legacy/document"
|
|
7
7
|
import { DocumentLegacySchema } from "../content/legacy/document"
|
|
8
|
+
import { isNestableContent } from "../content/nestable"
|
|
9
|
+
import type { CompositeSliceItemContent, LegacySliceItemContent } from "../content/slices"
|
|
8
10
|
import type { WidgetContent } from "../content/widget"
|
|
11
|
+
import type { StaticCustomTypeModel } from "../model/customType"
|
|
9
12
|
import type { FieldOrSliceType } from "../model/widget"
|
|
10
13
|
import { FieldOrSliceTypeSchema } from "../model/widget"
|
|
11
14
|
import * as contentPath from "./contentPath"
|
|
15
|
+
import * as customTypeModel from "./customTypeModel"
|
|
16
|
+
import * as sliceContent from "./sliceContent"
|
|
12
17
|
import { traverseDocumentContent } from "./traverseContent"
|
|
13
18
|
|
|
14
19
|
export function collectWidgets<TWidgetContent extends WidgetContent>(
|
|
15
20
|
document: DocumentContent,
|
|
16
|
-
test: (
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
apiID: string
|
|
25
|
-
content: TWidgetContent
|
|
26
|
-
},
|
|
21
|
+
test: (
|
|
22
|
+
content: WidgetContent,
|
|
23
|
+
args: {
|
|
24
|
+
path: contentPath.Path
|
|
25
|
+
key: string
|
|
26
|
+
apiID: string
|
|
27
|
+
},
|
|
28
|
+
) => content is TWidgetContent,
|
|
27
29
|
): Record<string, TWidgetContent> {
|
|
28
30
|
const collected: Record<string, TWidgetContent> = {}
|
|
29
31
|
|
|
30
32
|
traverseDocumentContent(document, {
|
|
31
|
-
transformWidget: (args) => {
|
|
32
|
-
if (test(args)) {
|
|
33
|
-
collected[contentPath.serialize(args.path)] =
|
|
33
|
+
transformWidget: ({ content, ...args }) => {
|
|
34
|
+
if (test(content, args)) {
|
|
35
|
+
collected[contentPath.serialize(args.path)] = content
|
|
34
36
|
}
|
|
35
37
|
|
|
36
|
-
return
|
|
38
|
+
return content
|
|
37
39
|
},
|
|
38
40
|
})
|
|
39
41
|
|
|
40
42
|
return collected
|
|
41
43
|
}
|
|
42
44
|
|
|
43
|
-
export function fromLegacy(
|
|
45
|
+
export function fromLegacy(
|
|
46
|
+
legacy: DocumentLegacy,
|
|
47
|
+
model: StaticCustomTypeModel,
|
|
48
|
+
): DocumentContent | undefined {
|
|
44
49
|
const parsed = DocumentLegacySchema.safeParse(legacy)
|
|
45
50
|
if (!parsed.success) {
|
|
46
51
|
return
|
|
@@ -65,11 +70,34 @@ export function fromLegacy(legacy: DocumentLegacy): DocumentContent | undefined
|
|
|
65
70
|
}
|
|
66
71
|
}
|
|
67
72
|
|
|
68
|
-
const result = DocumentLegacyCodec(defaultCtx("", types, keys)).toContent(
|
|
73
|
+
const result = DocumentLegacyCodec(defaultCtx("", types, keys)).toContent(widgets)
|
|
69
74
|
if (!result.success) {
|
|
70
75
|
return
|
|
71
76
|
}
|
|
72
77
|
|
|
78
|
+
const needsMigration = Object.values(customTypeModel.collectSharedSlices(model)).some((slice) =>
|
|
79
|
+
Boolean(slice.legacyPaths),
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
if (needsMigration) {
|
|
83
|
+
return traverseDocumentContent(result.data, {
|
|
84
|
+
model,
|
|
85
|
+
transformSlice: ({ content, model }) => {
|
|
86
|
+
if (model?.type === "SharedSlice") {
|
|
87
|
+
if (content.widget.__TYPE__ === "CompositeSliceContent") {
|
|
88
|
+
return sliceContent.compositeToShared(content as CompositeSliceItemContent, model)
|
|
89
|
+
} else if (
|
|
90
|
+
content.widget.__TYPE__ === "GroupContentType" ||
|
|
91
|
+
isNestableContent(content.widget)
|
|
92
|
+
) {
|
|
93
|
+
return sliceContent.legacyToShared(content as LegacySliceItemContent, model)
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return content
|
|
97
|
+
},
|
|
98
|
+
})
|
|
99
|
+
}
|
|
100
|
+
|
|
73
101
|
return result.data
|
|
74
102
|
}
|
|
75
103
|
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import type { GroupItemContent } from "../content/group"
|
|
2
|
+
import type { SharedSliceContent } from "../content/slice"
|
|
3
|
+
import type {
|
|
4
|
+
CompositeSliceItemContent,
|
|
5
|
+
LegacySliceItemContent,
|
|
6
|
+
SharedSliceItemContent,
|
|
7
|
+
} from "../content/slices"
|
|
8
|
+
import type { SharedSliceVariationContentModel } from "../model/slice"
|
|
9
|
+
|
|
10
|
+
export const legacyToShared = (
|
|
11
|
+
content: LegacySliceItemContent,
|
|
12
|
+
model: SharedSliceVariationContentModel,
|
|
13
|
+
): SharedSliceItemContent => {
|
|
14
|
+
const sliceUUID = content.key.split("$")[1]
|
|
15
|
+
|
|
16
|
+
const primary: SharedSliceContent["primary"] = {}
|
|
17
|
+
const items: SharedSliceContent["items"] = []
|
|
18
|
+
if (content.widget.__TYPE__ === "GroupContentType") {
|
|
19
|
+
// Group content
|
|
20
|
+
for (const item of content.widget.value) {
|
|
21
|
+
const value: GroupItemContent["value"] = []
|
|
22
|
+
|
|
23
|
+
for (const [key, nestable] of item.value) {
|
|
24
|
+
if (model.fields.items?.[key]) {
|
|
25
|
+
value.push([key, nestable])
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
items.push({ ...item, value })
|
|
30
|
+
}
|
|
31
|
+
} else if (model.fields.primary?.[content.name]) {
|
|
32
|
+
// Nestable content
|
|
33
|
+
primary[content.name] = content.widget
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return {
|
|
37
|
+
key: `${model.sliceName}$${sliceUUID}`,
|
|
38
|
+
name: model.sliceName,
|
|
39
|
+
maybeLabel: content.maybeLabel,
|
|
40
|
+
widget: {
|
|
41
|
+
__TYPE__: "SharedSliceContent",
|
|
42
|
+
variation: model.variationID,
|
|
43
|
+
primary,
|
|
44
|
+
items,
|
|
45
|
+
},
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export const compositeToShared = (
|
|
50
|
+
content: CompositeSliceItemContent,
|
|
51
|
+
model: SharedSliceVariationContentModel,
|
|
52
|
+
): SharedSliceItemContent => {
|
|
53
|
+
const sliceUUID = content.key.split("$")[1]
|
|
54
|
+
|
|
55
|
+
const primary: SharedSliceContent["primary"] = {}
|
|
56
|
+
for (const [key, value] of Object.entries(content.widget.nonRepeat)) {
|
|
57
|
+
if (model.fields.primary?.[key]) {
|
|
58
|
+
primary[key] = value
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const items: SharedSliceContent["items"] = []
|
|
63
|
+
for (const item of content.widget.repeat) {
|
|
64
|
+
const value: GroupItemContent["value"] = []
|
|
65
|
+
|
|
66
|
+
for (const [key, nestable] of item.value) {
|
|
67
|
+
if (model.fields.items?.[key]) {
|
|
68
|
+
value.push([key, nestable])
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
items.push({ ...item, value })
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
return {
|
|
76
|
+
key: `${model.sliceName}$${sliceUUID}`,
|
|
77
|
+
name: model.sliceName,
|
|
78
|
+
maybeLabel: content.maybeLabel,
|
|
79
|
+
widget: {
|
|
80
|
+
__TYPE__: "SharedSliceContent",
|
|
81
|
+
variation: model.variationID,
|
|
82
|
+
primary,
|
|
83
|
+
items,
|
|
84
|
+
},
|
|
85
|
+
}
|
|
86
|
+
}
|
|
@@ -24,7 +24,9 @@ import type { NestableModel } from "../model/nestable"
|
|
|
24
24
|
import type {
|
|
25
25
|
CompositeSliceModel,
|
|
26
26
|
LegacySliceModel,
|
|
27
|
-
|
|
27
|
+
SharedSliceModel,
|
|
28
|
+
SharedSliceVariationContentModel,
|
|
29
|
+
SliceContentModel,
|
|
28
30
|
} from "../model/slice"
|
|
29
31
|
import type { StaticSlicesModel } from "../model/slices"
|
|
30
32
|
import { TableCellModel } from "../model/table"
|
|
@@ -88,27 +90,67 @@ export function traverseSlicesContent(
|
|
|
88
90
|
for (const sliceItemContent of content.value) {
|
|
89
91
|
const sliceModel = config.model?.config?.choices?.[sliceItemContent.name]
|
|
90
92
|
|
|
91
|
-
let
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
93
|
+
let sliceContentModel: SliceContentModel | undefined
|
|
94
|
+
|
|
95
|
+
// Happy path, content and model are both shared slices
|
|
96
|
+
if (
|
|
97
|
+
sliceItemContent.widget.__TYPE__ === SharedSliceContentType &&
|
|
98
|
+
sliceModel?.type === "SharedSlice"
|
|
99
|
+
) {
|
|
100
|
+
const variationID = sliceItemContent.widget.variation
|
|
101
|
+
const variationModel = sliceModel.variations.find((variation) => variation.id === variationID)
|
|
102
|
+
if (variationModel) {
|
|
103
|
+
sliceContentModel = {
|
|
104
|
+
type: "SharedSlice",
|
|
105
|
+
sliceName: sliceModel.id,
|
|
106
|
+
variationID: variationModel.id,
|
|
107
|
+
fields: {
|
|
108
|
+
primary: variationModel.primary || {},
|
|
109
|
+
items: variationModel.items || {},
|
|
110
|
+
},
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// Migrated path, content is composite or legacy, model is shared slice
|
|
116
|
+
if (!sliceContentModel) {
|
|
117
|
+
const legacyPath = contentPath.append(contentPath.serialize(path), sliceItemContent.name)
|
|
118
|
+
|
|
119
|
+
// Find the migrated slice model who's legacy path matches the content path
|
|
120
|
+
const migratedSliceModel = Object.values(config.model?.config?.choices || {}).find(
|
|
121
|
+
(model): model is SharedSliceModel => {
|
|
122
|
+
return model.type === "SharedSlice" && Boolean(model.legacyPaths?.[legacyPath])
|
|
123
|
+
},
|
|
124
|
+
)
|
|
125
|
+
|
|
126
|
+
if (migratedSliceModel) {
|
|
127
|
+
// Find the variation that matches the legacy path
|
|
128
|
+
const variation = migratedSliceModel.variations.find((variation) => {
|
|
129
|
+
return variation.id === migratedSliceModel.legacyPaths?.[legacyPath]
|
|
130
|
+
})
|
|
131
|
+
|
|
132
|
+
if (variation) {
|
|
133
|
+
sliceContentModel = {
|
|
101
134
|
type: "SharedSlice",
|
|
102
|
-
sliceName:
|
|
103
|
-
variationID,
|
|
135
|
+
sliceName: migratedSliceModel.id,
|
|
136
|
+
variationID: variation.id,
|
|
104
137
|
fields: {
|
|
105
|
-
primary:
|
|
106
|
-
items:
|
|
138
|
+
primary: variation.primary || {},
|
|
139
|
+
items: variation.items || {},
|
|
107
140
|
},
|
|
108
141
|
}
|
|
109
142
|
}
|
|
110
143
|
}
|
|
144
|
+
}
|
|
111
145
|
|
|
146
|
+
// Non-migrated path, content and model are composite or legacy
|
|
147
|
+
if (!sliceContentModel && sliceModel && sliceModel.type !== "SharedSlice") {
|
|
148
|
+
sliceContentModel = sliceModel
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
let traversedSliceItemContent: SliceItemContent | undefined
|
|
152
|
+
if (sliceItemContent.widget.__TYPE__ === SharedSliceContentType) {
|
|
153
|
+
const model = sliceContentModel?.type === "SharedSlice" ? sliceContentModel : undefined
|
|
112
154
|
traversedSliceItemContent = traverseSharedSliceContent(
|
|
113
155
|
path.concat({ key: sliceItemContent.key, type: "SharedSlice" }),
|
|
114
156
|
sliceItemContent.key,
|
|
@@ -117,7 +159,10 @@ export function traverseSlicesContent(
|
|
|
117
159
|
{ model, transformWidget, transformSlice },
|
|
118
160
|
)
|
|
119
161
|
} else if (sliceItemContent.widget.__TYPE__ === CompositeSliceContentType) {
|
|
120
|
-
const model =
|
|
162
|
+
const model =
|
|
163
|
+
sliceContentModel?.type === "Slice" || sliceContentModel?.type === "SharedSlice"
|
|
164
|
+
? sliceContentModel
|
|
165
|
+
: undefined
|
|
121
166
|
traversedSliceItemContent = traverseCompositeSliceContent(
|
|
122
167
|
path.concat({ key: sliceItemContent.key, type: "Slice" }),
|
|
123
168
|
sliceItemContent.key,
|
|
@@ -126,8 +171,7 @@ export function traverseSlicesContent(
|
|
|
126
171
|
{ model, transformWidget, transformSlice },
|
|
127
172
|
)
|
|
128
173
|
} else {
|
|
129
|
-
const model =
|
|
130
|
-
sliceModel?.type !== "SharedSlice" && sliceModel?.type !== "Slice" ? sliceModel : undefined
|
|
174
|
+
const model = sliceContentModel?.type !== "Slice" ? sliceContentModel : undefined
|
|
131
175
|
traversedSliceItemContent = traverseLegacySliceContent(
|
|
132
176
|
path.concat({ key: sliceItemContent.key, type: "LegacySlice" }),
|
|
133
177
|
sliceItemContent.key,
|
|
@@ -152,9 +196,9 @@ export function traverseSlicesContent(
|
|
|
152
196
|
}
|
|
153
197
|
|
|
154
198
|
type TraverseSharedSliceContentConfig = {
|
|
155
|
-
model?:
|
|
156
|
-
transformWidget
|
|
157
|
-
transformSlice
|
|
199
|
+
model?: SharedSliceVariationContentModel
|
|
200
|
+
transformWidget?: TraverseWidgetContentFunction
|
|
201
|
+
transformSlice?: TraverseSliceContentFunction
|
|
158
202
|
}
|
|
159
203
|
|
|
160
204
|
export function traverseSharedSliceContent(
|
|
@@ -164,7 +208,8 @@ export function traverseSharedSliceContent(
|
|
|
164
208
|
content: SharedSliceItemContent,
|
|
165
209
|
config: TraverseSharedSliceContentConfig,
|
|
166
210
|
): SharedSliceItemContent | undefined {
|
|
167
|
-
const { transformWidget, transformSlice } =
|
|
211
|
+
const { transformWidget = (args) => args.content, transformSlice = (args) => args.content } =
|
|
212
|
+
config
|
|
168
213
|
|
|
169
214
|
const traversedPrimary: SharedSliceContent["primary"] = {}
|
|
170
215
|
for (const [key, fieldContent] of Object.entries(content.widget.primary)) {
|
|
@@ -205,9 +250,9 @@ export function traverseSharedSliceContent(
|
|
|
205
250
|
}
|
|
206
251
|
|
|
207
252
|
type TraverseCompositeSliceContentConfig = {
|
|
208
|
-
model?: CompositeSliceModel
|
|
209
|
-
transformWidget
|
|
210
|
-
transformSlice
|
|
253
|
+
model?: CompositeSliceModel | SharedSliceVariationContentModel
|
|
254
|
+
transformWidget?: TraverseWidgetContentFunction
|
|
255
|
+
transformSlice?: TraverseSliceContentFunction
|
|
211
256
|
}
|
|
212
257
|
|
|
213
258
|
export function traverseCompositeSliceContent(
|
|
@@ -216,19 +261,22 @@ export function traverseCompositeSliceContent(
|
|
|
216
261
|
apiID: string,
|
|
217
262
|
content: CompositeSliceItemContent,
|
|
218
263
|
config: TraverseCompositeSliceContentConfig,
|
|
219
|
-
): CompositeSliceItemContent | undefined {
|
|
220
|
-
const { transformWidget, transformSlice } =
|
|
264
|
+
): CompositeSliceItemContent | SharedSliceItemContent | undefined {
|
|
265
|
+
const { transformWidget = (args) => args.content, transformSlice = (args) => args.content } =
|
|
266
|
+
config
|
|
221
267
|
|
|
268
|
+
const primaryModel =
|
|
269
|
+
config.model?.type === "SharedSlice"
|
|
270
|
+
? config.model?.fields.primary
|
|
271
|
+
: config.model?.["non-repeat"]
|
|
222
272
|
const traversedPrimary: CompositeSliceContent["nonRepeat"] = {}
|
|
223
273
|
for (const [key, fieldContent] of Object.entries(content.widget.nonRepeat)) {
|
|
224
|
-
const model = config.model?.["non-repeat"]?.[key]
|
|
225
|
-
|
|
226
274
|
const traversedContent = traverseWidgetContent(
|
|
227
275
|
path.concat({ key: "non-repeat", type: "primary" }, { key, type: "Widget" }),
|
|
228
276
|
key,
|
|
229
277
|
apiID,
|
|
230
278
|
fieldContent,
|
|
231
|
-
{ model, transformWidget },
|
|
279
|
+
{ model: primaryModel?.[key], transformWidget },
|
|
232
280
|
)
|
|
233
281
|
|
|
234
282
|
if (traversedContent && isNestableContent(traversedContent)) {
|
|
@@ -236,10 +284,12 @@ export function traverseCompositeSliceContent(
|
|
|
236
284
|
}
|
|
237
285
|
}
|
|
238
286
|
|
|
287
|
+
const itemsModel =
|
|
288
|
+
config.model?.type === "SharedSlice" ? config.model?.fields.items : config.model?.repeat
|
|
239
289
|
const traversedItems = traverseGroupItemsContent(
|
|
240
290
|
path.concat({ key: "repeat", type: "items" }),
|
|
241
291
|
content.widget.repeat,
|
|
242
|
-
{ model:
|
|
292
|
+
{ model: itemsModel, transformWidget },
|
|
243
293
|
)
|
|
244
294
|
|
|
245
295
|
return transformSlice({
|
|
@@ -255,9 +305,9 @@ export function traverseCompositeSliceContent(
|
|
|
255
305
|
}
|
|
256
306
|
|
|
257
307
|
type TraverseLegacySliceContentConfig = {
|
|
258
|
-
model?: LegacySliceModel
|
|
259
|
-
transformWidget
|
|
260
|
-
transformSlice
|
|
308
|
+
model?: LegacySliceModel | SharedSliceVariationContentModel
|
|
309
|
+
transformWidget?: TraverseWidgetContentFunction
|
|
310
|
+
transformSlice?: TraverseSliceContentFunction
|
|
261
311
|
}
|
|
262
312
|
|
|
263
313
|
export function traverseLegacySliceContent(
|
|
@@ -266,11 +316,30 @@ export function traverseLegacySliceContent(
|
|
|
266
316
|
apiID: string,
|
|
267
317
|
content: LegacySliceItemContent,
|
|
268
318
|
config: TraverseLegacySliceContentConfig,
|
|
269
|
-
): LegacySliceItemContent | undefined {
|
|
270
|
-
const {
|
|
319
|
+
): LegacySliceItemContent | SharedSliceItemContent | undefined {
|
|
320
|
+
const {
|
|
321
|
+
model,
|
|
322
|
+
transformWidget = (args) => args.content,
|
|
323
|
+
transformSlice = (args) => args.content,
|
|
324
|
+
} = config
|
|
325
|
+
|
|
326
|
+
let legacySliceModel: LegacySliceModel | undefined
|
|
327
|
+
if (content.widget.__TYPE__ === "GroupContentType") {
|
|
328
|
+
if (model?.type === "Group") {
|
|
329
|
+
legacySliceModel = model
|
|
330
|
+
} else if (model?.type === "SharedSlice") {
|
|
331
|
+
legacySliceModel = { type: "Group", config: { fields: model.fields.items } }
|
|
332
|
+
}
|
|
333
|
+
} else {
|
|
334
|
+
if (model?.type === "SharedSlice") {
|
|
335
|
+
legacySliceModel = model.fields.primary?.[content.name]
|
|
336
|
+
} else if (model?.type !== "Group") {
|
|
337
|
+
legacySliceModel = model
|
|
338
|
+
}
|
|
339
|
+
}
|
|
271
340
|
|
|
272
341
|
const traversedContent = traverseWidgetContent(path, key, apiID, content.widget, {
|
|
273
|
-
model,
|
|
342
|
+
model: legacySliceModel,
|
|
274
343
|
transformWidget,
|
|
275
344
|
transformSlice,
|
|
276
345
|
})
|
|
@@ -459,8 +528,8 @@ export type TraverseSliceContentFunction = <TContent extends SliceItemContent>(a
|
|
|
459
528
|
key: string
|
|
460
529
|
apiID: string
|
|
461
530
|
content: TContent
|
|
462
|
-
model?:
|
|
463
|
-
}) => TContent | undefined
|
|
531
|
+
model?: SliceContentModel
|
|
532
|
+
}) => TContent | SharedSliceItemContent | undefined
|
|
464
533
|
|
|
465
534
|
export type TraverseWidgetContentFunction<
|
|
466
535
|
TContentTransformMode extends "preserve" | "widen" = "preserve",
|
|
@@ -473,8 +542,6 @@ export type TraverseWidgetContentFunction<
|
|
|
473
542
|
}) => (TContentTransformMode extends "preserve" ? TContent : WidgetContent) | undefined
|
|
474
543
|
|
|
475
544
|
// Internals
|
|
476
|
-
type SliceModel = SharedSliceVariationModel | CompositeSliceModel | LegacySliceModel
|
|
477
|
-
|
|
478
545
|
type TraverseWidgetContentConfig = {
|
|
479
546
|
model?: StaticWidgetModel
|
|
480
547
|
transformWidget?: TraverseWidgetContentFunction
|