@stackbit/cms-core 0.2.1 → 0.3.0-develop.0
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/content-store-utils.d.ts +5 -1
- package/dist/content-store-utils.d.ts.map +1 -1
- package/dist/content-store-utils.js +28 -3
- package/dist/content-store-utils.js.map +1 -1
- package/dist/content-store.d.ts +12 -1
- package/dist/content-store.d.ts.map +1 -1
- package/dist/content-store.js +399 -177
- package/dist/content-store.js.map +1 -1
- package/dist/types/content-store-document-fields.d.ts +26 -4
- package/dist/types/content-store-document-fields.d.ts.map +1 -1
- package/dist/types/content-store-documents.d.ts +14 -3
- package/dist/types/content-store-documents.d.ts.map +1 -1
- package/dist/types/content-store-types.d.ts +7 -1
- package/dist/types/content-store-types.d.ts.map +1 -1
- package/dist/utils/backward-compatibility.d.ts +184 -0
- package/dist/utils/backward-compatibility.d.ts.map +1 -0
- package/dist/utils/backward-compatibility.js +151 -0
- package/dist/utils/backward-compatibility.js.map +1 -0
- package/dist/utils/config-delegate.d.ts +11 -0
- package/dist/utils/config-delegate.d.ts.map +1 -0
- package/dist/utils/config-delegate.js +226 -0
- package/dist/utils/config-delegate.js.map +1 -0
- package/dist/utils/create-update-csi-docs.d.ts +7 -5
- package/dist/utils/create-update-csi-docs.d.ts.map +1 -1
- package/dist/utils/create-update-csi-docs.js +24 -24
- package/dist/utils/create-update-csi-docs.js.map +1 -1
- package/dist/utils/csi-to-store-docs-converter.d.ts +17 -3
- package/dist/utils/csi-to-store-docs-converter.d.ts.map +1 -1
- package/dist/utils/csi-to-store-docs-converter.js +187 -47
- package/dist/utils/csi-to-store-docs-converter.js.map +1 -1
- package/dist/utils/site-map.d.ts.map +1 -1
- package/dist/utils/site-map.js +4 -1
- package/dist/utils/site-map.js.map +1 -1
- package/dist/utils/store-to-api-docs-converter.d.ts +6 -1
- package/dist/utils/store-to-api-docs-converter.d.ts.map +1 -1
- package/dist/utils/store-to-api-docs-converter.js +140 -51
- package/dist/utils/store-to-api-docs-converter.js.map +1 -1
- package/dist/utils/store-to-csi-docs-converter.d.ts +1 -0
- package/dist/utils/store-to-csi-docs-converter.d.ts.map +1 -1
- package/dist/utils/store-to-csi-docs-converter.js +2 -1
- package/dist/utils/store-to-csi-docs-converter.js.map +1 -1
- package/package.json +5 -5
- package/src/content-store-utils.ts +40 -6
- package/src/content-store.ts +552 -299
- package/src/types/content-store-document-fields.ts +16 -4
- package/src/types/content-store-documents.ts +12 -3
- package/src/types/content-store-types.ts +4 -1
- package/src/utils/backward-compatibility.ts +269 -0
- package/src/utils/config-delegate.ts +277 -0
- package/src/utils/create-update-csi-docs.ts +47 -50
- package/src/utils/csi-to-store-docs-converter.ts +256 -43
- package/src/utils/site-map.ts +19 -7
- package/src/utils/store-to-api-docs-converter.ts +185 -52
- package/src/utils/store-to-csi-docs-converter.ts +1 -1
|
@@ -1,27 +1,74 @@
|
|
|
1
1
|
import _ from 'lodash';
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import { omitByNil } from '@stackbit/utils';
|
|
4
|
+
import * as CSITypes from '@stackbit/types';
|
|
4
5
|
import * as ContentStoreTypes from '../types';
|
|
5
|
-
import { DocumentStringLikeFieldAPI } from '../types';
|
|
6
6
|
|
|
7
|
-
export function mapDocumentsToLocalizedApiObjects(
|
|
8
|
-
|
|
7
|
+
export function mapDocumentsToLocalizedApiObjects({
|
|
8
|
+
documents,
|
|
9
|
+
locale,
|
|
10
|
+
delegate
|
|
11
|
+
}: {
|
|
12
|
+
documents: ContentStoreTypes.Document[];
|
|
13
|
+
locale?: string;
|
|
14
|
+
delegate: CSITypes.ConfigDelegate;
|
|
15
|
+
}): ContentStoreTypes.APIDocumentObject[] {
|
|
16
|
+
return documents.map((document) =>
|
|
17
|
+
documentToLocalizedApiObject({
|
|
18
|
+
document,
|
|
19
|
+
locale,
|
|
20
|
+
delegate
|
|
21
|
+
})
|
|
22
|
+
);
|
|
9
23
|
}
|
|
10
24
|
|
|
11
|
-
function documentToLocalizedApiObject(
|
|
12
|
-
|
|
25
|
+
function documentToLocalizedApiObject({
|
|
26
|
+
document,
|
|
27
|
+
locale,
|
|
28
|
+
delegate
|
|
29
|
+
}: {
|
|
30
|
+
document: ContentStoreTypes.Document;
|
|
31
|
+
locale?: string;
|
|
32
|
+
delegate: CSITypes.ConfigDelegate;
|
|
33
|
+
}): ContentStoreTypes.APIDocumentObject {
|
|
34
|
+
const { type, fields, getPreview, ...rest } = document;
|
|
13
35
|
return {
|
|
14
36
|
type: 'object',
|
|
15
37
|
...rest,
|
|
16
|
-
|
|
38
|
+
srcObjectLabel: getPreview({ delegate, locale }).previewTitle,
|
|
39
|
+
fields: toLocalizedAPIFields({ docFields: fields, delegate, locale })
|
|
17
40
|
};
|
|
18
41
|
}
|
|
19
42
|
|
|
20
|
-
function toLocalizedAPIFields(
|
|
21
|
-
|
|
43
|
+
function toLocalizedAPIFields({
|
|
44
|
+
docFields,
|
|
45
|
+
delegate,
|
|
46
|
+
locale
|
|
47
|
+
}: {
|
|
48
|
+
docFields: Record<string, ContentStoreTypes.DocumentField>;
|
|
49
|
+
delegate: CSITypes.ConfigDelegate;
|
|
50
|
+
locale?: string;
|
|
51
|
+
}): Record<string, ContentStoreTypes.DocumentFieldAPI> {
|
|
52
|
+
return _.mapValues(docFields, (docField) => {
|
|
53
|
+
return toLocalizedAPIField({
|
|
54
|
+
docField,
|
|
55
|
+
delegate,
|
|
56
|
+
locale
|
|
57
|
+
});
|
|
58
|
+
});
|
|
22
59
|
}
|
|
23
60
|
|
|
24
|
-
function toLocalizedAPIField(
|
|
61
|
+
function toLocalizedAPIField({
|
|
62
|
+
docField,
|
|
63
|
+
delegate,
|
|
64
|
+
locale,
|
|
65
|
+
isListItem = false
|
|
66
|
+
}: {
|
|
67
|
+
docField: ContentStoreTypes.DocumentField;
|
|
68
|
+
delegate: CSITypes.ConfigDelegate;
|
|
69
|
+
locale?: string;
|
|
70
|
+
isListItem?: boolean;
|
|
71
|
+
}): ContentStoreTypes.DocumentFieldAPI {
|
|
25
72
|
type ToBoolean<T extends boolean | undefined> = T extends true ? true : false;
|
|
26
73
|
function localeFields<T extends boolean | undefined>(localized: T): null | { localized: false } | { localized: true; locale: string } {
|
|
27
74
|
const isLocalized = !!localized as ToBoolean<T>;
|
|
@@ -93,13 +140,17 @@ function toLocalizedAPIField(docField: ContentStoreTypes.DocumentField, locale?:
|
|
|
93
140
|
...localeFields(docField.localized)
|
|
94
141
|
};
|
|
95
142
|
}
|
|
96
|
-
case 'image':
|
|
143
|
+
case 'image': {
|
|
97
144
|
let result: ContentStoreTypes.DocumentFieldAPI;
|
|
98
145
|
if (docField.localized) {
|
|
99
146
|
const { localized, locales, ...base } = docField;
|
|
100
147
|
const localeProps = locales && locale ? locales[locale] : undefined;
|
|
101
148
|
if (localeProps) {
|
|
102
|
-
const fields = toLocalizedAPIFields(
|
|
149
|
+
const fields = toLocalizedAPIFields({
|
|
150
|
+
docFields: localeProps.fields,
|
|
151
|
+
delegate,
|
|
152
|
+
locale
|
|
153
|
+
}) as ContentStoreTypes.ImageFieldsAPI;
|
|
103
154
|
result = {
|
|
104
155
|
...base,
|
|
105
156
|
...localeProps,
|
|
@@ -121,7 +172,11 @@ function toLocalizedAPIField(docField: ContentStoreTypes.DocumentField, locale?:
|
|
|
121
172
|
...localeFields(docField.localized)
|
|
122
173
|
};
|
|
123
174
|
} else {
|
|
124
|
-
const fields = toLocalizedAPIFields(
|
|
175
|
+
const fields = toLocalizedAPIFields({
|
|
176
|
+
docFields: docField.fields,
|
|
177
|
+
delegate,
|
|
178
|
+
locale
|
|
179
|
+
}) as ContentStoreTypes.ImageFieldsAPI;
|
|
125
180
|
result = {
|
|
126
181
|
...docField,
|
|
127
182
|
type: 'image',
|
|
@@ -131,51 +186,111 @@ function toLocalizedAPIField(docField: ContentStoreTypes.DocumentField, locale?:
|
|
|
131
186
|
}
|
|
132
187
|
}
|
|
133
188
|
return result;
|
|
134
|
-
|
|
135
|
-
case '
|
|
189
|
+
}
|
|
190
|
+
case 'object': {
|
|
136
191
|
if (docField.localized) {
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
...base,
|
|
142
|
-
...(localeProps
|
|
143
|
-
? {
|
|
144
|
-
...localeProps,
|
|
145
|
-
fields: toLocalizedAPIFields(localeProps.fields, locale)
|
|
146
|
-
}
|
|
147
|
-
: { isUnset: true }),
|
|
148
|
-
...localeFields(localized)
|
|
149
|
-
};
|
|
150
|
-
} else {
|
|
151
|
-
const { localized, locales, ...base } = docField;
|
|
152
|
-
const localeProps = locales && locale ? locales[locale] : undefined;
|
|
192
|
+
const { localized, locales, ...base } = docField;
|
|
193
|
+
const localeProps = locales && locale ? locales[locale] : undefined;
|
|
194
|
+
if (localeProps) {
|
|
195
|
+
const { fields, getPreview, locale } = localeProps;
|
|
153
196
|
return {
|
|
154
197
|
...base,
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
198
|
+
...localeFields(localized),
|
|
199
|
+
srcObjectLabel:
|
|
200
|
+
getPreview({
|
|
201
|
+
delegate,
|
|
202
|
+
locale
|
|
203
|
+
}).previewTitle ?? (isListItem ? 'Item' : 'Object'),
|
|
204
|
+
fields: toLocalizedAPIFields({
|
|
205
|
+
docFields: fields,
|
|
206
|
+
delegate,
|
|
207
|
+
locale
|
|
208
|
+
})
|
|
163
209
|
};
|
|
164
210
|
}
|
|
211
|
+
return {
|
|
212
|
+
...base,
|
|
213
|
+
...localeFields(localized),
|
|
214
|
+
isUnset: true
|
|
215
|
+
};
|
|
165
216
|
}
|
|
217
|
+
if (docField.isUnset) {
|
|
218
|
+
return {
|
|
219
|
+
...docField,
|
|
220
|
+
type: 'object',
|
|
221
|
+
...localeFields(docField.localized)
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
const { fields, getPreview, ...rest } = docField;
|
|
166
225
|
return {
|
|
167
|
-
...
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
:
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
226
|
+
...rest,
|
|
227
|
+
type: 'object',
|
|
228
|
+
srcObjectLabel:
|
|
229
|
+
getPreview({
|
|
230
|
+
delegate,
|
|
231
|
+
locale
|
|
232
|
+
}).previewTitle ?? (isListItem ? 'Item' : 'Object'),
|
|
233
|
+
fields: toLocalizedAPIFields({
|
|
234
|
+
docFields: fields,
|
|
235
|
+
delegate,
|
|
236
|
+
locale
|
|
237
|
+
}),
|
|
177
238
|
...localeFields(docField.localized)
|
|
178
239
|
};
|
|
240
|
+
}
|
|
241
|
+
case 'model': {
|
|
242
|
+
if (docField.localized) {
|
|
243
|
+
const { localized, locales, ...base } = docField;
|
|
244
|
+
const localeProps = locales && locale ? locales[locale] : undefined;
|
|
245
|
+
if (localeProps) {
|
|
246
|
+
const { fields, getPreview, ...rest } = localeProps;
|
|
247
|
+
return {
|
|
248
|
+
...base,
|
|
249
|
+
...rest,
|
|
250
|
+
type: 'object', // API uses 'object' not 'model'
|
|
251
|
+
...localeFields(localized),
|
|
252
|
+
srcObjectLabel: getPreview({
|
|
253
|
+
delegate,
|
|
254
|
+
locale
|
|
255
|
+
}).previewTitle,
|
|
256
|
+
fields: toLocalizedAPIFields({
|
|
257
|
+
docFields: fields,
|
|
258
|
+
delegate,
|
|
259
|
+
locale
|
|
260
|
+
})
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
return {
|
|
264
|
+
...base,
|
|
265
|
+
type: 'object', // API uses 'object' not 'model'
|
|
266
|
+
isUnset: true,
|
|
267
|
+
...localeFields(localized)
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
if (docField.isUnset) {
|
|
271
|
+
return {
|
|
272
|
+
...docField,
|
|
273
|
+
type: 'object', // API uses 'object' not 'model'
|
|
274
|
+
...localeFields(docField.localized)
|
|
275
|
+
};
|
|
276
|
+
} else {
|
|
277
|
+
const { fields, getPreview, ...rest } = docField;
|
|
278
|
+
return {
|
|
279
|
+
...rest,
|
|
280
|
+
type: 'object', // API uses 'object' not 'model'
|
|
281
|
+
...localeFields(docField.localized),
|
|
282
|
+
srcObjectLabel: getPreview({
|
|
283
|
+
delegate,
|
|
284
|
+
locale
|
|
285
|
+
}).previewTitle,
|
|
286
|
+
fields: toLocalizedAPIFields({
|
|
287
|
+
docFields: fields,
|
|
288
|
+
delegate,
|
|
289
|
+
locale
|
|
290
|
+
})
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
}
|
|
179
294
|
case 'reference': {
|
|
180
295
|
if (docField.localized) {
|
|
181
296
|
const { type, refType, localized, locales, ...base } = docField;
|
|
@@ -248,22 +363,40 @@ function toLocalizedAPIField(docField: ContentStoreTypes.DocumentField, locale?:
|
|
|
248
363
|
...localeFields(docField.localized)
|
|
249
364
|
};
|
|
250
365
|
}
|
|
251
|
-
case 'list':
|
|
366
|
+
case 'list': {
|
|
252
367
|
if (docField.localized) {
|
|
253
368
|
const { localized, locales, ...base } = docField;
|
|
254
369
|
const localeProps = locales && locale ? locales[locale] : undefined;
|
|
255
370
|
return {
|
|
256
371
|
...base,
|
|
257
372
|
...localeProps,
|
|
258
|
-
items: (localeProps?.items ?? []).map(
|
|
373
|
+
items: (localeProps?.items ?? []).map(
|
|
374
|
+
(field) =>
|
|
375
|
+
toLocalizedAPIField({
|
|
376
|
+
docField: field,
|
|
377
|
+
delegate,
|
|
378
|
+
locale,
|
|
379
|
+
isListItem: true
|
|
380
|
+
}) as ContentStoreTypes.DocumentListFieldItemsAPI
|
|
381
|
+
),
|
|
259
382
|
...localeFields(localized)
|
|
260
383
|
};
|
|
261
384
|
}
|
|
385
|
+
const { items, ...rest } = docField;
|
|
262
386
|
return {
|
|
263
|
-
...
|
|
387
|
+
...rest,
|
|
264
388
|
...localeFields(docField.localized),
|
|
265
|
-
items:
|
|
389
|
+
items: items.map(
|
|
390
|
+
(field) =>
|
|
391
|
+
toLocalizedAPIField({
|
|
392
|
+
docField: field,
|
|
393
|
+
delegate,
|
|
394
|
+
locale,
|
|
395
|
+
isListItem: true
|
|
396
|
+
}) as ContentStoreTypes.DocumentListFieldItemsAPI
|
|
397
|
+
)
|
|
266
398
|
};
|
|
399
|
+
}
|
|
267
400
|
default:
|
|
268
401
|
const _exhaustiveCheck: never = docField;
|
|
269
402
|
console.error(`toLocalizedAPIField _exhaustiveCheck failed, docField.type: ${docField['type']}`);
|
|
@@ -6,7 +6,7 @@ export function mapStoreDocumentsToCSIDocumentsWithSource(documents: ContentStor
|
|
|
6
6
|
return documents.map((document) => mapStoreDocumentToCSIDocumentWithSource(document));
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
-
function mapStoreDocumentToCSIDocumentWithSource(document: ContentStoreTypes.Document): CSITypes.DocumentWithSource {
|
|
9
|
+
export function mapStoreDocumentToCSIDocumentWithSource(document: ContentStoreTypes.Document): CSITypes.DocumentWithSource {
|
|
10
10
|
return {
|
|
11
11
|
type: document.type,
|
|
12
12
|
id: document.srcObjectId,
|