@stackbit/cms-core 0.1.11 → 0.1.12-locale.1
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-types.d.ts +8 -2
- package/dist/content-store-types.d.ts.map +1 -1
- package/dist/content-store-utils.js +1 -1
- package/dist/content-store-utils.js.map +1 -1
- package/dist/content-store.d.ts +11 -4
- package/dist/content-store.d.ts.map +1 -1
- package/dist/content-store.js +141 -39
- package/dist/content-store.js.map +1 -1
- package/dist/utils/csi-to-store-docs-converter.d.ts.map +1 -1
- package/dist/utils/csi-to-store-docs-converter.js +11 -0
- package/dist/utils/csi-to-store-docs-converter.js.map +1 -1
- package/dist/utils/duplicate-document.d.ts +2 -2
- package/dist/utils/duplicate-document.d.ts.map +1 -1
- package/dist/utils/duplicate-document.js +7 -4
- package/dist/utils/duplicate-document.js.map +1 -1
- package/dist/utils/search-utils.d.ts +1 -0
- package/dist/utils/search-utils.d.ts.map +1 -1
- package/dist/utils/search-utils.js +7 -4
- package/dist/utils/search-utils.js.map +1 -1
- package/dist/utils/store-to-api-docs-converter.d.ts.map +1 -1
- package/dist/utils/store-to-api-docs-converter.js +48 -36
- package/dist/utils/store-to-api-docs-converter.js.map +1 -1
- package/package.json +4 -4
- package/src/content-store-types.ts +3 -2
- package/src/content-store-utils.ts +1 -1
- package/src/content-store.ts +150 -38
- package/src/utils/csi-to-store-docs-converter.ts +11 -0
- package/src/utils/duplicate-document.ts +14 -10
- package/src/utils/search-utils.ts +5 -2
- package/src/utils/store-to-api-docs-converter.ts +46 -37
|
@@ -22,16 +22,23 @@ function toLocalizedAPIFields(docFields: Record<string, ContentStoreTypes.Docume
|
|
|
22
22
|
|
|
23
23
|
function toLocalizedAPIField(docField: ContentStoreTypes.DocumentField, locale?: string, isListItem = false): ContentStoreTypes.DocumentFieldAPI {
|
|
24
24
|
type ToBoolean<T extends boolean | undefined> = T extends true ? true : false;
|
|
25
|
-
function localeFields<T extends boolean | undefined>(
|
|
26
|
-
localized
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
25
|
+
function localeFields<T extends boolean | undefined>(localized: T): null | { localized: false } | { localized: true; locale: string } {
|
|
26
|
+
const isLocalized = !!localized as ToBoolean<T>;
|
|
27
|
+
if (isListItem) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
if (!isLocalized) {
|
|
31
|
+
return {
|
|
32
|
+
localized: false
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
if (!locale) {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
return {
|
|
39
|
+
localized: isLocalized,
|
|
40
|
+
locale: locale
|
|
41
|
+
};
|
|
35
42
|
}
|
|
36
43
|
switch (docField.type) {
|
|
37
44
|
case 'string':
|
|
@@ -52,22 +59,22 @@ function toLocalizedAPIField(docField: ContentStoreTypes.DocumentField, locale?:
|
|
|
52
59
|
case 'richText':
|
|
53
60
|
if (docField.localized) {
|
|
54
61
|
const { localized, locales, ...base } = docField;
|
|
55
|
-
const localeProps = locale ? locales[locale] : undefined;
|
|
62
|
+
const localeProps = locales && locale ? locales[locale] : undefined;
|
|
56
63
|
return {
|
|
57
64
|
...base,
|
|
58
65
|
...(localeProps ?? { value: null }),
|
|
59
|
-
...localeFields(localized
|
|
66
|
+
...localeFields(localized),
|
|
60
67
|
...(['file', 'json', 'markdown', 'richText'].includes(docField.type) && !localeProps ? { isUnset: true } : null)
|
|
61
68
|
};
|
|
62
69
|
}
|
|
63
70
|
return {
|
|
64
71
|
...docField,
|
|
65
|
-
...localeFields(docField.localized
|
|
72
|
+
...localeFields(docField.localized)
|
|
66
73
|
};
|
|
67
74
|
case 'image':
|
|
68
75
|
if (docField.localized) {
|
|
69
76
|
const { localized, locales, ...base } = docField;
|
|
70
|
-
const localeProps = locale ? locales[locale] : undefined;
|
|
77
|
+
const localeProps = locales && locale ? locales[locale] : undefined;
|
|
71
78
|
return {
|
|
72
79
|
...base,
|
|
73
80
|
...(localeProps
|
|
@@ -76,7 +83,7 @@ function toLocalizedAPIField(docField: ContentStoreTypes.DocumentField, locale?:
|
|
|
76
83
|
fields: toLocalizedAPIFields(localeProps.fields, locale) as ContentStoreTypes.ImageFieldsAPI
|
|
77
84
|
}
|
|
78
85
|
: { isUnset: true }),
|
|
79
|
-
...localeFields(localized
|
|
86
|
+
...localeFields(localized)
|
|
80
87
|
};
|
|
81
88
|
}
|
|
82
89
|
return {
|
|
@@ -90,14 +97,14 @@ function toLocalizedAPIField(docField: ContentStoreTypes.DocumentField, locale?:
|
|
|
90
97
|
...docField,
|
|
91
98
|
type: 'image'
|
|
92
99
|
}),
|
|
93
|
-
...localeFields(docField.localized
|
|
100
|
+
...localeFields(docField.localized)
|
|
94
101
|
};
|
|
95
102
|
case 'object':
|
|
96
103
|
case 'model':
|
|
97
104
|
if (docField.localized) {
|
|
98
105
|
if (docField.type === 'object') {
|
|
99
106
|
const { localized, locales, ...base } = docField;
|
|
100
|
-
const localeProps = locale ? locales[locale] : undefined;
|
|
107
|
+
const localeProps = locales && locale ? locales[locale] : undefined;
|
|
101
108
|
return {
|
|
102
109
|
...base,
|
|
103
110
|
...(localeProps
|
|
@@ -106,11 +113,11 @@ function toLocalizedAPIField(docField: ContentStoreTypes.DocumentField, locale?:
|
|
|
106
113
|
fields: toLocalizedAPIFields(localeProps.fields, locale)
|
|
107
114
|
}
|
|
108
115
|
: { isUnset: true }),
|
|
109
|
-
...localeFields(localized
|
|
116
|
+
...localeFields(localized)
|
|
110
117
|
};
|
|
111
118
|
} else {
|
|
112
119
|
const { localized, locales, ...base } = docField;
|
|
113
|
-
const localeProps = locale ? locales[locale] : undefined;
|
|
120
|
+
const localeProps = locales && locale ? locales[locale] : undefined;
|
|
114
121
|
return {
|
|
115
122
|
...base,
|
|
116
123
|
type: 'object',
|
|
@@ -120,7 +127,7 @@ function toLocalizedAPIField(docField: ContentStoreTypes.DocumentField, locale?:
|
|
|
120
127
|
fields: toLocalizedAPIFields(localeProps.fields, locale)
|
|
121
128
|
}
|
|
122
129
|
: { isUnset: true }),
|
|
123
|
-
...localeFields(localized
|
|
130
|
+
...localeFields(localized)
|
|
124
131
|
};
|
|
125
132
|
}
|
|
126
133
|
}
|
|
@@ -135,19 +142,19 @@ function toLocalizedAPIField(docField: ContentStoreTypes.DocumentField, locale?:
|
|
|
135
142
|
...docField,
|
|
136
143
|
type: 'object'
|
|
137
144
|
}),
|
|
138
|
-
...localeFields(docField.localized
|
|
145
|
+
...localeFields(docField.localized)
|
|
139
146
|
};
|
|
140
147
|
case 'reference':
|
|
141
148
|
if (docField.localized) {
|
|
142
149
|
const { type, refType, localized, locales, ...base } = docField;
|
|
143
|
-
const localeProps = locale ? locales[locale] : undefined;
|
|
150
|
+
const localeProps = locales && locale ? locales[locale] : undefined;
|
|
144
151
|
// if reference field isUnset === true, it behaves like a regular object
|
|
145
152
|
if (!localeProps || localeProps.isUnset) {
|
|
146
153
|
return {
|
|
147
154
|
type: 'object',
|
|
148
155
|
isUnset: true,
|
|
149
156
|
...base,
|
|
150
|
-
...localeFields(localized
|
|
157
|
+
...localeFields(localized)
|
|
151
158
|
};
|
|
152
159
|
}
|
|
153
160
|
return {
|
|
@@ -155,7 +162,7 @@ function toLocalizedAPIField(docField: ContentStoreTypes.DocumentField, locale?:
|
|
|
155
162
|
refType: refType === 'asset' ? 'image' : 'object',
|
|
156
163
|
...base,
|
|
157
164
|
...localeProps,
|
|
158
|
-
...localeFields(localized
|
|
165
|
+
...localeFields(localized)
|
|
159
166
|
};
|
|
160
167
|
}
|
|
161
168
|
const { type, refType, ...base } = docField;
|
|
@@ -163,29 +170,29 @@ function toLocalizedAPIField(docField: ContentStoreTypes.DocumentField, locale?:
|
|
|
163
170
|
return {
|
|
164
171
|
type: 'object',
|
|
165
172
|
...base,
|
|
166
|
-
...localeFields(docField.localized
|
|
173
|
+
...localeFields(docField.localized)
|
|
167
174
|
};
|
|
168
175
|
}
|
|
169
176
|
return {
|
|
170
177
|
type: 'unresolved_reference',
|
|
171
178
|
refType: refType === 'asset' ? 'image' : 'object',
|
|
172
179
|
...base,
|
|
173
|
-
...localeFields(docField.localized
|
|
180
|
+
...localeFields(docField.localized)
|
|
174
181
|
};
|
|
175
182
|
case 'list':
|
|
176
183
|
if (docField.localized) {
|
|
177
184
|
const { localized, locales, ...base } = docField;
|
|
178
|
-
const localeProps = locale ? locales[locale] : undefined;
|
|
185
|
+
const localeProps = locales && locale ? locales[locale] : undefined;
|
|
179
186
|
return {
|
|
180
187
|
...base,
|
|
181
188
|
...localeProps,
|
|
182
189
|
items: (localeProps?.items ?? []).map((field) => toLocalizedAPIField(field, locale, true)),
|
|
183
|
-
...localeFields(localized
|
|
190
|
+
...localeFields(localized)
|
|
184
191
|
};
|
|
185
192
|
}
|
|
186
193
|
return {
|
|
187
194
|
...docField,
|
|
188
|
-
...localeFields(docField.localized
|
|
195
|
+
...localeFields(docField.localized),
|
|
189
196
|
items: docField.items.map((field) => toLocalizedAPIField(field, locale, true))
|
|
190
197
|
};
|
|
191
198
|
default:
|
|
@@ -221,35 +228,37 @@ function localizeAssetFields(assetFields: ContentStoreTypes.AssetFields, locale?
|
|
|
221
228
|
};
|
|
222
229
|
const titleFieldNonLocalized = getDocumentFieldForLocale(assetFields.title, locale);
|
|
223
230
|
fields.title.value = titleFieldNonLocalized?.value;
|
|
224
|
-
fields.title.locale = locale
|
|
231
|
+
fields.title.locale = locale;
|
|
225
232
|
const assetFileField = assetFields.file;
|
|
226
233
|
if (assetFileField.localized) {
|
|
227
234
|
if (locale) {
|
|
228
|
-
fields.url.value = assetFileField.locales[locale]?.url ?? null;
|
|
235
|
+
fields.url.value = assetFileField.locales?.[locale]?.url ?? null;
|
|
229
236
|
fields.url.locale = locale;
|
|
230
237
|
}
|
|
231
238
|
} else {
|
|
232
239
|
fields.url.value = assetFileField.url;
|
|
233
|
-
fields.url.locale = assetFileField.locale;
|
|
234
240
|
}
|
|
235
241
|
return fields;
|
|
236
242
|
}
|
|
237
243
|
|
|
238
244
|
export function mapStoreAssetsToAPIAssets(assets: ContentStoreTypes.Asset[], locale?: string): ContentStoreTypes.APIAsset[] {
|
|
239
|
-
return assets.map((asset) => storeAssetToAPIAsset(asset, locale));
|
|
245
|
+
return assets.map((asset) => storeAssetToAPIAsset(asset, locale)).filter((asset): asset is ContentStoreTypes.APIAsset => !!asset);
|
|
240
246
|
}
|
|
241
247
|
|
|
242
|
-
function storeAssetToAPIAsset(asset: ContentStoreTypes.Asset, locale?: string): ContentStoreTypes.APIAsset {
|
|
248
|
+
function storeAssetToAPIAsset(asset: ContentStoreTypes.Asset, locale?: string): ContentStoreTypes.APIAsset | null {
|
|
243
249
|
const assetTitleField = asset.fields.title;
|
|
244
|
-
const localizedTitleField = assetTitleField.localized ? assetTitleField.locales[locale!]
|
|
250
|
+
const localizedTitleField = assetTitleField.localized ? assetTitleField.locales?.[locale!] : assetTitleField;
|
|
245
251
|
const assetFileField = asset.fields.file;
|
|
246
|
-
const localizedFileField = assetFileField.localized ? assetFileField.locales[locale!]
|
|
252
|
+
const localizedFileField = assetFileField.localized ? assetFileField.locales?.[locale!] : assetFileField;
|
|
253
|
+
if (!localizedFileField) {
|
|
254
|
+
return null;
|
|
255
|
+
}
|
|
247
256
|
return {
|
|
248
257
|
objectId: asset.srcObjectId,
|
|
249
258
|
createdAt: asset.createdAt,
|
|
250
259
|
url: localizedFileField.url,
|
|
251
260
|
...omitByNil({
|
|
252
|
-
title: localizedTitleField
|
|
261
|
+
title: localizedTitleField?.value ?? null,
|
|
253
262
|
fileName: localizedFileField.fileName,
|
|
254
263
|
contentType: localizedFileField.contentType,
|
|
255
264
|
size: localizedFileField.size,
|