@prismicio/types-internal 4.0.0-pr.6.eb53f11 → 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/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.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 +20 -248
- package/dist/content/richText.d.ts.map +1 -1
- 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 +3 -2
- package/dist/helpers/documentContent.d.ts.map +1 -1
- package/dist/helpers/documentContent.js +14 -1
- 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 +15 -16
- package/dist/helpers/traverseContent.d.ts.map +1 -1
- package/dist/helpers/traverseContent.js +51 -19
- package/dist/helpers/traverseContent.js.map +1 -1
- package/dist/helpers/traverseContentWithModel.d.ts +14 -15
- package/dist/helpers/traverseContentWithModel.d.ts.map +1 -1
- package/dist/helpers/traverseContentWithModel.js +61 -35
- package/dist/helpers/traverseContentWithModel.js.map +1 -1
- package/dist/index.d.ts +25 -24
- package/dist/index.js +3 -1
- package/dist/io-ts.d.ts +3048 -71012
- package/dist/io-ts.d.ts.map +1 -1
- package/dist/io-ts.js +125 -124
- 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 +375 -376
- 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 +2 -2
- 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 +781 -3720
- 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 +6 -3331
- package/dist/model/widget.d.ts.map +1 -1
- package/dist/model/widget.js.map +1 -1
- package/dist/zod4.d.ts +1332 -34960
- package/dist/zod4.d.ts.map +1 -1
- package/dist/zod4.js +125 -124
- package/dist/zod4.js.map +1 -1
- package/package.json +3 -2
- 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 +37 -5
- 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 +19 -7
- 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 +32 -1
- package/src/helpers/sliceContent.ts +86 -0
- package/src/helpers/traverseContent.ts +93 -32
- package/src/helpers/traverseContentWithModel.ts +73 -48
- package/src/index.ts +4 -1
- package/src/io-ts.ts +164 -144
- package/src/model/group.ts +4 -1
- package/src/model/image.ts +1 -1
- package/src/model/link.ts +1 -1
- 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 +164 -144
|
@@ -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
|
+
}
|
|
145
|
+
|
|
146
|
+
// Non-migrated path, content and model are composite or legacy
|
|
147
|
+
if (!sliceContentModel && sliceModel && sliceModel.type !== "SharedSlice") {
|
|
148
|
+
sliceContentModel = sliceModel
|
|
149
|
+
}
|
|
111
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,7 +196,7 @@ export function traverseSlicesContent(
|
|
|
152
196
|
}
|
|
153
197
|
|
|
154
198
|
type TraverseSharedSliceContentConfig = {
|
|
155
|
-
model?:
|
|
199
|
+
model?: SharedSliceVariationContentModel
|
|
156
200
|
transformWidget?: TraverseWidgetContentFunction
|
|
157
201
|
transformSlice?: TraverseSliceContentFunction
|
|
158
202
|
}
|
|
@@ -206,7 +250,7 @@ export function traverseSharedSliceContent(
|
|
|
206
250
|
}
|
|
207
251
|
|
|
208
252
|
type TraverseCompositeSliceContentConfig = {
|
|
209
|
-
model?: CompositeSliceModel
|
|
253
|
+
model?: CompositeSliceModel | SharedSliceVariationContentModel
|
|
210
254
|
transformWidget?: TraverseWidgetContentFunction
|
|
211
255
|
transformSlice?: TraverseSliceContentFunction
|
|
212
256
|
}
|
|
@@ -217,20 +261,22 @@ export function traverseCompositeSliceContent(
|
|
|
217
261
|
apiID: string,
|
|
218
262
|
content: CompositeSliceItemContent,
|
|
219
263
|
config: TraverseCompositeSliceContentConfig,
|
|
220
|
-
): CompositeSliceItemContent | undefined {
|
|
264
|
+
): CompositeSliceItemContent | SharedSliceItemContent | undefined {
|
|
221
265
|
const { transformWidget = (args) => args.content, transformSlice = (args) => args.content } =
|
|
222
266
|
config
|
|
223
267
|
|
|
268
|
+
const primaryModel =
|
|
269
|
+
config.model?.type === "SharedSlice"
|
|
270
|
+
? config.model?.fields.primary
|
|
271
|
+
: config.model?.["non-repeat"]
|
|
224
272
|
const traversedPrimary: CompositeSliceContent["nonRepeat"] = {}
|
|
225
273
|
for (const [key, fieldContent] of Object.entries(content.widget.nonRepeat)) {
|
|
226
|
-
const model = config.model?.["non-repeat"]?.[key]
|
|
227
|
-
|
|
228
274
|
const traversedContent = traverseWidgetContent(
|
|
229
275
|
path.concat({ key: "non-repeat", type: "primary" }, { key, type: "Widget" }),
|
|
230
276
|
key,
|
|
231
277
|
apiID,
|
|
232
278
|
fieldContent,
|
|
233
|
-
{ model, transformWidget },
|
|
279
|
+
{ model: primaryModel?.[key], transformWidget },
|
|
234
280
|
)
|
|
235
281
|
|
|
236
282
|
if (traversedContent && isNestableContent(traversedContent)) {
|
|
@@ -238,10 +284,12 @@ export function traverseCompositeSliceContent(
|
|
|
238
284
|
}
|
|
239
285
|
}
|
|
240
286
|
|
|
287
|
+
const itemsModel =
|
|
288
|
+
config.model?.type === "SharedSlice" ? config.model?.fields.items : config.model?.repeat
|
|
241
289
|
const traversedItems = traverseGroupItemsContent(
|
|
242
290
|
path.concat({ key: "repeat", type: "items" }),
|
|
243
291
|
content.widget.repeat,
|
|
244
|
-
{ model:
|
|
292
|
+
{ model: itemsModel, transformWidget },
|
|
245
293
|
)
|
|
246
294
|
|
|
247
295
|
return transformSlice({
|
|
@@ -257,7 +305,7 @@ export function traverseCompositeSliceContent(
|
|
|
257
305
|
}
|
|
258
306
|
|
|
259
307
|
type TraverseLegacySliceContentConfig = {
|
|
260
|
-
model?: LegacySliceModel
|
|
308
|
+
model?: LegacySliceModel | SharedSliceVariationContentModel
|
|
261
309
|
transformWidget?: TraverseWidgetContentFunction
|
|
262
310
|
transformSlice?: TraverseSliceContentFunction
|
|
263
311
|
}
|
|
@@ -268,15 +316,30 @@ export function traverseLegacySliceContent(
|
|
|
268
316
|
apiID: string,
|
|
269
317
|
content: LegacySliceItemContent,
|
|
270
318
|
config: TraverseLegacySliceContentConfig,
|
|
271
|
-
): LegacySliceItemContent | undefined {
|
|
319
|
+
): LegacySliceItemContent | SharedSliceItemContent | undefined {
|
|
272
320
|
const {
|
|
273
321
|
model,
|
|
274
322
|
transformWidget = (args) => args.content,
|
|
275
323
|
transformSlice = (args) => args.content,
|
|
276
324
|
} = config
|
|
277
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
|
+
}
|
|
340
|
+
|
|
278
341
|
const traversedContent = traverseWidgetContent(path, key, apiID, content.widget, {
|
|
279
|
-
model,
|
|
342
|
+
model: legacySliceModel,
|
|
280
343
|
transformWidget,
|
|
281
344
|
transformSlice,
|
|
282
345
|
})
|
|
@@ -465,8 +528,8 @@ export type TraverseSliceContentFunction = <TContent extends SliceItemContent>(a
|
|
|
465
528
|
key: string
|
|
466
529
|
apiID: string
|
|
467
530
|
content: TContent
|
|
468
|
-
model?:
|
|
469
|
-
}) => TContent | undefined
|
|
531
|
+
model?: SliceContentModel
|
|
532
|
+
}) => TContent | SharedSliceItemContent | undefined
|
|
470
533
|
|
|
471
534
|
export type TraverseWidgetContentFunction<
|
|
472
535
|
TContentTransformMode extends "preserve" | "widen" = "preserve",
|
|
@@ -479,8 +542,6 @@ export type TraverseWidgetContentFunction<
|
|
|
479
542
|
}) => (TContentTransformMode extends "preserve" ? TContent : WidgetContent) | undefined
|
|
480
543
|
|
|
481
544
|
// Internals
|
|
482
|
-
type SliceModel = SharedSliceVariationModel | CompositeSliceModel | LegacySliceModel
|
|
483
|
-
|
|
484
545
|
type TraverseWidgetContentConfig = {
|
|
485
546
|
model?: StaticWidgetModel
|
|
486
547
|
transformWidget?: TraverseWidgetContentFunction
|
|
@@ -24,7 +24,8 @@ import type { NestableModel } from "../model/nestable"
|
|
|
24
24
|
import type {
|
|
25
25
|
CompositeSliceModel,
|
|
26
26
|
LegacySliceModel,
|
|
27
|
-
|
|
27
|
+
SharedSliceVariationContentModel,
|
|
28
|
+
SliceContentModel,
|
|
28
29
|
} from "../model/slice"
|
|
29
30
|
import type { StaticSlicesModel } from "../model/slices"
|
|
30
31
|
import { TableCellModel } from "../model/table"
|
|
@@ -95,49 +96,70 @@ export function traverseSlicesContentWithModel(
|
|
|
95
96
|
|
|
96
97
|
const traversed: SlicesContent["value"] = []
|
|
97
98
|
for (const sliceItemContent of content.value) {
|
|
98
|
-
const
|
|
99
|
+
const sliceModel = config.model.config?.choices?.[sliceItemContent.name]
|
|
99
100
|
|
|
100
101
|
let traversedSliceItemContent: SliceItemContent | undefined
|
|
101
|
-
if (
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
102
|
+
if (sliceModel?.type === "SharedSlice") {
|
|
103
|
+
if (sliceItemContent.widget.__TYPE__ === SharedSliceContentType) {
|
|
104
|
+
// Happy path, content and model are both shared slices
|
|
105
|
+
const variationID = sliceItemContent.widget.variation
|
|
106
|
+
const variationModel = sliceModel.variations.find(
|
|
107
|
+
(variation) => variation.id === variationID,
|
|
108
|
+
)
|
|
109
|
+
if (variationModel) {
|
|
110
|
+
const model: SharedSliceVariationContentModel = {
|
|
111
|
+
type: "SharedSlice",
|
|
112
|
+
sliceName: sliceModel.id,
|
|
113
|
+
variationID: variationModel.id,
|
|
114
|
+
fields: {
|
|
115
|
+
primary: variationModel.primary || {},
|
|
116
|
+
items: variationModel.items || {},
|
|
117
|
+
},
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
traversedSliceItemContent = traverseSharedSliceContentWithModel(
|
|
121
|
+
path.concat({ key: sliceItemContent.key, type: "SharedSlice" }),
|
|
122
|
+
sliceItemContent.key,
|
|
123
|
+
sliceItemContent.name,
|
|
124
|
+
sliceItemContent as SharedSliceItemContent,
|
|
125
|
+
{ model, transformWidget, transformSlice },
|
|
126
|
+
)
|
|
116
127
|
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
128
|
+
} else if (sliceItemContent.widget.__TYPE__ === CompositeSliceContentType) {
|
|
129
|
+
// Migrated path, content is composite, model is shared slice
|
|
130
|
+
const variationModel = sliceModel.variations[0]
|
|
131
|
+
if (variationModel) {
|
|
132
|
+
const model: SharedSliceVariationContentModel = {
|
|
133
|
+
type: "SharedSlice",
|
|
134
|
+
sliceName: sliceModel.id,
|
|
135
|
+
variationID: variationModel.id,
|
|
136
|
+
fields: {
|
|
137
|
+
primary: variationModel.primary || {},
|
|
138
|
+
items: variationModel.items || {},
|
|
139
|
+
},
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
traversedSliceItemContent = traverseCompositeSliceContentWithModel(
|
|
143
|
+
path.concat({ key: sliceItemContent.key, type: "Slice" }),
|
|
144
|
+
sliceItemContent.key,
|
|
145
|
+
sliceItemContent.name,
|
|
146
|
+
sliceItemContent as CompositeSliceItemContent,
|
|
147
|
+
{ model, transformWidget, transformSlice },
|
|
148
|
+
)
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
} else if (sliceModel?.type === "Slice") {
|
|
152
|
+
if (sliceItemContent.widget.__TYPE__ === CompositeSliceContentType) {
|
|
153
|
+
traversedSliceItemContent = traverseCompositeSliceContentWithModel(
|
|
154
|
+
path.concat({ key: sliceItemContent.key, type: "Slice" }),
|
|
120
155
|
sliceItemContent.key,
|
|
121
156
|
sliceItemContent.name,
|
|
122
|
-
sliceItemContent as
|
|
123
|
-
{ model:
|
|
157
|
+
sliceItemContent as CompositeSliceItemContent,
|
|
158
|
+
{ model: sliceModel, transformWidget, transformSlice },
|
|
124
159
|
)
|
|
125
160
|
}
|
|
126
161
|
} else if (
|
|
127
|
-
|
|
128
|
-
sliceItemContent.widget.__TYPE__ === CompositeSliceContentType
|
|
129
|
-
) {
|
|
130
|
-
traversedSliceItemContent = traverseCompositeSliceContentWithModel(
|
|
131
|
-
path.concat({ key: sliceItemContent.key, type: "Slice" }),
|
|
132
|
-
sliceItemContent.key,
|
|
133
|
-
sliceItemContent.name,
|
|
134
|
-
sliceItemContent as CompositeSliceItemContent,
|
|
135
|
-
{ model, transformWidget, transformSlice },
|
|
136
|
-
)
|
|
137
|
-
} else if (
|
|
138
|
-
model &&
|
|
139
|
-
model?.type !== "SharedSlice" &&
|
|
140
|
-
model?.type !== "Slice" &&
|
|
162
|
+
sliceModel &&
|
|
141
163
|
sliceItemContent.widget.__TYPE__ !== SharedSliceContentType &&
|
|
142
164
|
sliceItemContent.widget.__TYPE__ !== CompositeSliceContentType
|
|
143
165
|
) {
|
|
@@ -146,7 +168,7 @@ export function traverseSlicesContentWithModel(
|
|
|
146
168
|
sliceItemContent.key,
|
|
147
169
|
sliceItemContent.name,
|
|
148
170
|
sliceItemContent as LegacySliceItemContent,
|
|
149
|
-
{ model, transformWidget, transformSlice },
|
|
171
|
+
{ model: sliceModel, transformWidget, transformSlice },
|
|
150
172
|
)
|
|
151
173
|
}
|
|
152
174
|
|
|
@@ -165,7 +187,7 @@ export function traverseSlicesContentWithModel(
|
|
|
165
187
|
}
|
|
166
188
|
|
|
167
189
|
type TraverseSharedSliceContentWithModelConfig = {
|
|
168
|
-
model:
|
|
190
|
+
model: SharedSliceVariationContentModel
|
|
169
191
|
transformWidget?: TraverseWidgetContentWithModelFunction
|
|
170
192
|
transformSlice?: TraverseSliceContentWithModelFunction
|
|
171
193
|
}
|
|
@@ -221,7 +243,7 @@ export function traverseSharedSliceContentWithModel(
|
|
|
221
243
|
}
|
|
222
244
|
|
|
223
245
|
type TraverseCompositeSliceContentWithModelConfig = {
|
|
224
|
-
model: CompositeSliceModel
|
|
246
|
+
model: CompositeSliceModel | SharedSliceVariationContentModel
|
|
225
247
|
transformWidget?: TraverseWidgetContentWithModelFunction
|
|
226
248
|
transformSlice?: TraverseSliceContentWithModelFunction
|
|
227
249
|
}
|
|
@@ -232,7 +254,7 @@ export function traverseCompositeSliceContentWithModel(
|
|
|
232
254
|
apiID: string,
|
|
233
255
|
content: CompositeSliceItemContent | undefined,
|
|
234
256
|
config: TraverseCompositeSliceContentWithModelConfig,
|
|
235
|
-
): CompositeSliceItemContent | undefined {
|
|
257
|
+
): CompositeSliceItemContent | SharedSliceItemContent | undefined {
|
|
236
258
|
if (!content) {
|
|
237
259
|
return
|
|
238
260
|
}
|
|
@@ -240,8 +262,12 @@ export function traverseCompositeSliceContentWithModel(
|
|
|
240
262
|
const { transformWidget = (args) => args.content, transformSlice = (args) => args.content } =
|
|
241
263
|
config
|
|
242
264
|
|
|
265
|
+
const primaryModel =
|
|
266
|
+
config.model?.type === "SharedSlice"
|
|
267
|
+
? config.model?.fields.primary
|
|
268
|
+
: config.model?.["non-repeat"]
|
|
243
269
|
const traversedPrimary: CompositeSliceContent["nonRepeat"] = {}
|
|
244
|
-
for (const [key, model] of Object.entries(
|
|
270
|
+
for (const [key, model] of Object.entries(primaryModel ?? {})) {
|
|
245
271
|
const traversedContent = traverseWidgetContentWithModel(
|
|
246
272
|
path.concat({ key: "non-repeat", type: "primary" }, { key, type: "Widget" }),
|
|
247
273
|
key,
|
|
@@ -255,10 +281,12 @@ export function traverseCompositeSliceContentWithModel(
|
|
|
255
281
|
}
|
|
256
282
|
}
|
|
257
283
|
|
|
284
|
+
const itemsModel =
|
|
285
|
+
config.model?.type === "SharedSlice" ? config.model?.fields.items : config.model?.repeat
|
|
258
286
|
const traversedItems = traverseGroupItemsContentWithModel(
|
|
259
287
|
path.concat({ key: "repeat", type: "items" }),
|
|
260
288
|
content.widget.repeat,
|
|
261
|
-
{ model:
|
|
289
|
+
{ model: itemsModel ?? {}, transformWidget },
|
|
262
290
|
)
|
|
263
291
|
|
|
264
292
|
return transformSlice({
|
|
@@ -285,7 +313,7 @@ export function traverseLegacySliceContentWithModel(
|
|
|
285
313
|
apiID: string,
|
|
286
314
|
content: LegacySliceItemContent | undefined,
|
|
287
315
|
config: TraverseLegacySliceContentWithModelConfig,
|
|
288
|
-
): LegacySliceItemContent | undefined {
|
|
316
|
+
): LegacySliceItemContent | SharedSliceItemContent | undefined {
|
|
289
317
|
if (!content) {
|
|
290
318
|
return
|
|
291
319
|
}
|
|
@@ -513,16 +541,13 @@ export function traverseTableContentWithModel(
|
|
|
513
541
|
}
|
|
514
542
|
|
|
515
543
|
// Internals
|
|
516
|
-
|
|
517
|
-
type SliceModel = SharedSliceVariationModel | CompositeSliceModel | LegacySliceModel
|
|
518
|
-
|
|
519
544
|
export type TraverseSliceContentWithModelFunction = <TContent extends SliceItemContent>(args: {
|
|
520
545
|
path: contentPath.Path
|
|
521
546
|
key: string
|
|
522
547
|
apiID: string
|
|
523
548
|
content?: TContent
|
|
524
|
-
model:
|
|
525
|
-
}) => TContent | undefined
|
|
549
|
+
model: SliceContentModel
|
|
550
|
+
}) => TContent | SharedSliceItemContent | undefined
|
|
526
551
|
|
|
527
552
|
export type TraverseWidgetContentWithModelFunction<
|
|
528
553
|
TContentTransformMode extends "preserve" | "widen" = "preserve",
|
package/src/index.ts
CHANGED
|
@@ -69,13 +69,15 @@ export type {
|
|
|
69
69
|
CompositeSliceModel,
|
|
70
70
|
SharedSliceModel,
|
|
71
71
|
SharedSliceRefModel,
|
|
72
|
-
SharedSliceVariationModel,
|
|
72
|
+
SharedSliceVariationContentModel as SharedSliceVariationModel,
|
|
73
73
|
StaticSliceModel,
|
|
74
74
|
DynamicSliceModel,
|
|
75
|
+
SliceContentModel,
|
|
75
76
|
SliceModelType,
|
|
76
77
|
} from "./model/slice"
|
|
77
78
|
export type { DynamicSlicesModel, StaticSlicesModel } from "./model/slices"
|
|
78
79
|
export type { TableModel } from "./model/table"
|
|
80
|
+
export { TableCellModelNodeTypes } from "./model/table"
|
|
79
81
|
export type { TextModel } from "./model/text"
|
|
80
82
|
export type { TimestampModel } from "./model/timestamp"
|
|
81
83
|
export type { UIDModel } from "./model/uid"
|
|
@@ -88,6 +90,7 @@ export { LegacyContentCtx, getFieldCtx, defaultCtx } from "./content/codec/legac
|
|
|
88
90
|
export * as contentPath from "./helpers/contentPath"
|
|
89
91
|
export * as customTypeModel from "./helpers/customTypeModel"
|
|
90
92
|
export * as documentContent from "./helpers/documentContent"
|
|
93
|
+
export * as sliceContent from "./helpers/sliceContent"
|
|
91
94
|
export {
|
|
92
95
|
traverseDocumentContent,
|
|
93
96
|
traverseSlicesContent,
|