@stackbit/cms-core 0.1.26-gitcms.3 → 0.1.26-gitcms.5
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 -5
- package/dist/content-store-utils.d.ts.map +1 -1
- package/dist/content-store-utils.js +8 -6
- package/dist/content-store-utils.js.map +1 -1
- package/dist/content-store.d.ts +9 -6
- package/dist/content-store.d.ts.map +1 -1
- package/dist/content-store.js +7 -7
- package/dist/content-store.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/services/git.d.ts +6 -6
- package/dist/services/git.d.ts.map +1 -1
- package/dist/services/git.js +34 -29
- package/dist/services/git.js.map +1 -1
- package/dist/services/run.d.ts +5 -15
- package/dist/services/run.d.ts.map +1 -1
- package/dist/services/run.js +12 -13
- package/dist/services/run.js.map +1 -1
- package/dist/types/content-store-document-fields.d.ts +600 -0
- package/dist/types/content-store-document-fields.d.ts.map +1 -0
- package/dist/types/content-store-document-fields.js +3 -0
- package/dist/types/content-store-document-fields.js.map +1 -0
- package/dist/types/content-store-documents.d.ts +99 -0
- package/dist/types/content-store-documents.d.ts.map +1 -0
- package/dist/types/content-store-documents.js +3 -0
- package/dist/types/content-store-documents.js.map +1 -0
- package/dist/types/content-store-types.d.ts +75 -0
- package/dist/types/content-store-types.d.ts.map +1 -0
- package/dist/types/content-store-types.js.map +1 -0
- package/dist/types/content-store-update-operation.d.ts +61 -0
- package/dist/types/content-store-update-operation.d.ts.map +1 -0
- package/dist/types/content-store-update-operation.js +3 -0
- package/dist/types/content-store-update-operation.js.map +1 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +18 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/search-filter.d.ts +1 -1
- package/dist/types/search-filter.d.ts.map +1 -1
- package/dist/utils/create-update-csi-docs.d.ts +1 -1
- package/dist/utils/create-update-csi-docs.d.ts.map +1 -1
- package/dist/utils/create-update-csi-docs.js +11 -10
- package/dist/utils/create-update-csi-docs.js.map +1 -1
- package/dist/utils/csi-to-store-docs-converter.d.ts +1 -1
- package/dist/utils/csi-to-store-docs-converter.d.ts.map +1 -1
- package/dist/utils/csi-to-store-docs-converter.js +20 -4
- package/dist/utils/csi-to-store-docs-converter.js.map +1 -1
- package/dist/utils/duplicate-document.d.ts +1 -1
- package/dist/utils/duplicate-document.d.ts.map +1 -1
- package/dist/utils/duplicate-document.js +7 -0
- package/dist/utils/duplicate-document.js.map +1 -1
- package/dist/utils/search-utils.d.ts +1 -1
- package/dist/utils/search-utils.d.ts.map +1 -1
- package/dist/utils/search-utils.js +16 -16
- package/dist/utils/search-utils.js.map +1 -1
- package/dist/utils/site-map.d.ts +1 -1
- package/dist/utils/site-map.d.ts.map +1 -1
- package/dist/utils/site-map.js +9 -0
- package/dist/utils/site-map.js.map +1 -1
- package/dist/utils/store-to-api-docs-converter.d.ts +3 -3
- package/dist/utils/store-to-api-docs-converter.d.ts.map +1 -1
- package/dist/utils/store-to-api-docs-converter.js +60 -32
- package/dist/utils/store-to-api-docs-converter.js.map +1 -1
- package/dist/utils/store-to-csi-docs-converter.d.ts +1 -1
- package/dist/utils/store-to-csi-docs-converter.d.ts.map +1 -1
- package/dist/utils/store-to-csi-docs-converter.js +4 -0
- package/dist/utils/store-to-csi-docs-converter.js.map +1 -1
- package/dist/utils/timer.d.ts +1 -1
- package/dist/utils/timer.d.ts.map +1 -1
- package/package.json +5 -5
- package/src/content-store-utils.ts +12 -11
- package/src/content-store.ts +22 -19
- package/src/index.ts +1 -1
- package/src/services/git.ts +44 -43
- package/src/services/run.ts +10 -15
- package/src/types/content-store-document-fields.ts +658 -0
- package/src/types/content-store-documents.ts +113 -0
- package/src/types/content-store-types.ts +96 -0
- package/src/types/content-store-update-operation.ts +85 -0
- package/src/types/index.ts +5 -0
- package/src/types/search-filter.ts +26 -19
- package/src/utils/create-update-csi-docs.ts +16 -12
- package/src/utils/csi-to-store-docs-converter.ts +33 -14
- package/src/utils/duplicate-document.ts +8 -1
- package/src/utils/search-utils.ts +18 -19
- package/src/utils/site-map.ts +10 -1
- package/src/utils/store-to-api-docs-converter.ts +67 -38
- package/src/utils/store-to-csi-docs-converter.ts +5 -1
- package/src/utils/timer.ts +1 -1
- package/dist/content-store-types.d.ts +0 -411
- package/dist/content-store-types.d.ts.map +0 -1
- package/dist/content-store-types.js.map +0 -1
- package/src/content-store-types.ts +0 -527
- /package/dist/{content-store-types.js → types/content-store-types.js} +0 -0
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
import _ from 'lodash';
|
|
2
2
|
import { ImageModel, Model } from '@stackbit/sdk';
|
|
3
|
-
import * as ContentSourceInterface from '@stackbit/types';
|
|
4
|
-
import { getLocalizedFieldForLocale } from '@stackbit/types';
|
|
5
3
|
|
|
4
|
+
import * as ContentStoreTypes from '../types';
|
|
6
5
|
import { SearchFilter, SearchFilterItem } from '../types/search-filter';
|
|
7
|
-
import {
|
|
8
|
-
import { getContentSourceId } from '../content-store-utils';
|
|
6
|
+
import { getContentSourceId, getDocumentFieldForLocale } from '../content-store-utils';
|
|
9
7
|
|
|
10
8
|
const META_FIELD = {
|
|
11
9
|
createdAt: {
|
|
@@ -91,7 +89,7 @@ const isDocumentMatchesPattern = (document: ContentStoreTypes.Document, query: s
|
|
|
91
89
|
case 'text':
|
|
92
90
|
case 'markdown':
|
|
93
91
|
case 'html':
|
|
94
|
-
value =
|
|
92
|
+
value = getDocumentFieldForLocale(field, locale)?.value;
|
|
95
93
|
break;
|
|
96
94
|
}
|
|
97
95
|
|
|
@@ -105,13 +103,14 @@ const isDocumentMatchesPattern = (document: ContentStoreTypes.Document, query: s
|
|
|
105
103
|
|
|
106
104
|
const getFieldForFilter = (document: ContentStoreTypes.Document, filter: SearchFilterItem): ContentStoreTypes.DocumentField => {
|
|
107
105
|
if (filter.isMeta) {
|
|
108
|
-
|
|
109
|
-
if (!fieldDef) {
|
|
106
|
+
if (filter.field !== 'createdAt' && filter.field !== 'updatedAt') {
|
|
110
107
|
throw new Error(`Unsupported meta field ${filter.field}`);
|
|
111
108
|
}
|
|
109
|
+
const fieldDef = META_FIELD[filter.field];
|
|
110
|
+
const dateValue = document[filter.field];
|
|
112
111
|
return {
|
|
113
112
|
...fieldDef,
|
|
114
|
-
value:
|
|
113
|
+
value: dateValue
|
|
115
114
|
};
|
|
116
115
|
} else {
|
|
117
116
|
const documentField = document.fields[filter.field];
|
|
@@ -180,7 +179,7 @@ const isStringFieldMatches = ({
|
|
|
180
179
|
locale?: string;
|
|
181
180
|
}) => {
|
|
182
181
|
// ignoring case
|
|
183
|
-
const fieldValue =
|
|
182
|
+
const fieldValue = getDocumentFieldForLocale(field, locale)?.value?.toLowerCase();
|
|
184
183
|
|
|
185
184
|
switch (filter.operator) {
|
|
186
185
|
case 'is-undefined': return fieldValue === undefined;
|
|
@@ -202,9 +201,9 @@ const isStringFieldMatches = ({
|
|
|
202
201
|
case 'neq':
|
|
203
202
|
return fieldValue !== filterValue;
|
|
204
203
|
case 'includes':
|
|
205
|
-
return fieldValue
|
|
204
|
+
return Boolean(fieldValue?.includes(filterValue));
|
|
206
205
|
case 'not-includes':
|
|
207
|
-
return !fieldValue
|
|
206
|
+
return !Boolean(fieldValue?.includes(filterValue));
|
|
208
207
|
}
|
|
209
208
|
}
|
|
210
209
|
}
|
|
@@ -213,7 +212,7 @@ const isStringFieldMatches = ({
|
|
|
213
212
|
};
|
|
214
213
|
|
|
215
214
|
const isNumberFieldMatches = ({ field, filter, locale }: { field: ContentStoreTypes.DocumentFieldForType<'number'>; filter: SearchFilterItem; locale?: string }) => {
|
|
216
|
-
const fieldValue =
|
|
215
|
+
const fieldValue = getDocumentFieldForLocale(field, locale)?.value;
|
|
217
216
|
|
|
218
217
|
switch (filter.operator) {
|
|
219
218
|
case 'is-undefined': return fieldValue === undefined;
|
|
@@ -234,9 +233,9 @@ const isNumberFieldMatches = ({ field, filter, locale }: { field: ContentStoreTy
|
|
|
234
233
|
case 'neq':
|
|
235
234
|
return fieldValue !== filter.value;
|
|
236
235
|
case 'gte':
|
|
237
|
-
return fieldValue >= filter.value;
|
|
236
|
+
return Boolean(fieldValue && fieldValue >= filter.value);
|
|
238
237
|
case 'lte':
|
|
239
|
-
return fieldValue <= filter.value;
|
|
238
|
+
return Boolean(fieldValue && fieldValue <= filter.value);
|
|
240
239
|
}
|
|
241
240
|
}
|
|
242
241
|
|
|
@@ -246,7 +245,7 @@ const isNumberFieldMatches = ({ field, filter, locale }: { field: ContentStoreTy
|
|
|
246
245
|
throw new Error(`Filter startValue and endValue should be number for field ${filter.field}`);
|
|
247
246
|
}
|
|
248
247
|
|
|
249
|
-
return fieldValue >= filter.startValue && fieldValue <= filter.endValue;
|
|
248
|
+
return Boolean(fieldValue && fieldValue >= filter.startValue && fieldValue <= filter.endValue);
|
|
250
249
|
}
|
|
251
250
|
}
|
|
252
251
|
|
|
@@ -262,7 +261,7 @@ const isBooleanFieldMatches = ({
|
|
|
262
261
|
filter: SearchFilterItem;
|
|
263
262
|
locale?: string;
|
|
264
263
|
}) => {
|
|
265
|
-
const fieldValue =
|
|
264
|
+
const fieldValue = getDocumentFieldForLocale(field, locale)?.value;
|
|
266
265
|
|
|
267
266
|
switch (filter.operator) {
|
|
268
267
|
case 'is-undefined': return fieldValue === undefined;
|
|
@@ -311,7 +310,7 @@ const isDateFieldMatches = ({
|
|
|
311
310
|
filter: SearchFilterItem;
|
|
312
311
|
locale?: string;
|
|
313
312
|
}) => {
|
|
314
|
-
const origValue =
|
|
313
|
+
const origValue = getDocumentFieldForLocale(field, locale)?.value;
|
|
315
314
|
const fieldValue = parseDateValue(origValue);
|
|
316
315
|
if (origValue && !fieldValue) {
|
|
317
316
|
throw new Error(`Can't parse value ${origValue} for field ${filter.field}`);
|
|
@@ -374,7 +373,7 @@ const isDateFieldMatches = ({
|
|
|
374
373
|
};
|
|
375
374
|
|
|
376
375
|
const isEnumFieldMatches = ({ field, filter, locale }: { field: ContentStoreTypes.DocumentFieldForType<'enum'>; filter: SearchFilterItem; locale?: string }) => {
|
|
377
|
-
const fieldValue =
|
|
376
|
+
const fieldValue = getDocumentFieldForLocale(field, locale)?.value;
|
|
378
377
|
|
|
379
378
|
switch (filter.operator) {
|
|
380
379
|
case 'is-undefined': return fieldValue === undefined;
|
|
@@ -415,7 +414,7 @@ const isListFieldMatches = ({
|
|
|
415
414
|
throw new Error(`Unsupported filter for list field ${filter.field} with children ${listItemsType}`);
|
|
416
415
|
}
|
|
417
416
|
|
|
418
|
-
const fieldValue =
|
|
417
|
+
const fieldValue = getDocumentFieldForLocale(field, locale)?.items?.map((item) =>
|
|
419
418
|
'value' in item ? item.value : undefined
|
|
420
419
|
);
|
|
421
420
|
|
package/src/utils/site-map.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { Config } from '@stackbit/sdk';
|
|
|
3
3
|
import { append } from '@stackbit/utils';
|
|
4
4
|
import { SiteMapEntry } from '@stackbit/types';
|
|
5
5
|
import * as CSITypes from '@stackbit/types';
|
|
6
|
-
import * as ContentStoreTypes from '../
|
|
6
|
+
import * as ContentStoreTypes from '../types';
|
|
7
7
|
import { mapStoreDocumentsToCSIDocumentsWithSource } from './store-to-csi-docs-converter';
|
|
8
8
|
import { getContentSourceId, getDocumentFieldForLocale } from '../content-store-utils';
|
|
9
9
|
|
|
@@ -169,6 +169,15 @@ function sanitizeAndGroupSiteMapEntries(siteMapEntries: SiteMapEntry[]): SiteMap
|
|
|
169
169
|
if (!doc.srcType || !doc.srcProjectId || !doc.modelName || !doc.id) {
|
|
170
170
|
return accum;
|
|
171
171
|
}
|
|
172
|
+
siteMapEntry = {
|
|
173
|
+
...siteMapEntry,
|
|
174
|
+
document: {
|
|
175
|
+
id: doc.id,
|
|
176
|
+
modelName: doc.modelName,
|
|
177
|
+
srcType: doc.srcType,
|
|
178
|
+
srcProjectId: doc.srcProjectId
|
|
179
|
+
}
|
|
180
|
+
}
|
|
172
181
|
}
|
|
173
182
|
|
|
174
183
|
if (!siteMapEntry.stableId) {
|
|
@@ -1,26 +1,27 @@
|
|
|
1
1
|
import _ from 'lodash';
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import { omitByNil } from '@stackbit/utils';
|
|
4
|
-
import * as ContentStoreTypes from '../
|
|
4
|
+
import * as ContentStoreTypes from '../types';
|
|
5
|
+
import { DocumentStringLikeFieldAPI } from '../types';
|
|
5
6
|
|
|
6
|
-
export function mapDocumentsToLocalizedApiObjects(documents: ContentStoreTypes.Document[],
|
|
7
|
-
return documents.map((document) => documentToLocalizedApiObject(document,
|
|
7
|
+
export function mapDocumentsToLocalizedApiObjects(documents: ContentStoreTypes.Document[], locale?: string): ContentStoreTypes.APIDocumentObject[] {
|
|
8
|
+
return documents.map((document) => documentToLocalizedApiObject(document, locale));
|
|
8
9
|
}
|
|
9
10
|
|
|
10
|
-
function documentToLocalizedApiObject(document: ContentStoreTypes.Document,
|
|
11
|
+
function documentToLocalizedApiObject(document: ContentStoreTypes.Document, locale?: string): ContentStoreTypes.APIDocumentObject {
|
|
11
12
|
const { type, fields, ...rest } = document;
|
|
12
13
|
return {
|
|
13
14
|
type: 'object',
|
|
14
15
|
...rest,
|
|
15
|
-
fields: toLocalizedAPIFields(fields,
|
|
16
|
+
fields: toLocalizedAPIFields(fields, locale)
|
|
16
17
|
};
|
|
17
18
|
}
|
|
18
19
|
|
|
19
|
-
function toLocalizedAPIFields(docFields: Record<string, ContentStoreTypes.DocumentField>,
|
|
20
|
-
return _.mapValues(docFields, (docField) => toLocalizedAPIField(docField,
|
|
20
|
+
function toLocalizedAPIFields(docFields: Record<string, ContentStoreTypes.DocumentField>, locale?: string): Record<string, ContentStoreTypes.DocumentFieldAPI> {
|
|
21
|
+
return _.mapValues(docFields, (docField) => toLocalizedAPIField(docField, locale));
|
|
21
22
|
}
|
|
22
23
|
|
|
23
|
-
function toLocalizedAPIField(docField: ContentStoreTypes.DocumentField,
|
|
24
|
+
function toLocalizedAPIField(docField: ContentStoreTypes.DocumentField, locale?: string, isListItem = false): ContentStoreTypes.DocumentFieldAPI {
|
|
24
25
|
type ToBoolean<T extends boolean | undefined> = T extends true ? true : false;
|
|
25
26
|
function localeFields<T extends boolean | undefined>(localized: T): null | { localized: false } | { localized: true; locale: string } {
|
|
26
27
|
const isLocalized = !!localized as ToBoolean<T>;
|
|
@@ -52,32 +53,53 @@ function toLocalizedAPIField(docField: ContentStoreTypes.DocumentField, staticAs
|
|
|
52
53
|
case 'date':
|
|
53
54
|
case 'datetime':
|
|
54
55
|
case 'color':
|
|
55
|
-
case 'style':
|
|
56
|
+
case 'style': {
|
|
57
|
+
if (docField.localized) {
|
|
58
|
+
const { localized, locales, ...base } = docField;
|
|
59
|
+
const localeProps = locales && locale ? locales[locale] : undefined;
|
|
60
|
+
return {
|
|
61
|
+
...base,
|
|
62
|
+
...localeProps,
|
|
63
|
+
...localeFields(localized)
|
|
64
|
+
} as ContentStoreTypes.DocumentStringLikeFieldAPI;
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
...docField,
|
|
68
|
+
...localeFields(docField.localized)
|
|
69
|
+
};
|
|
70
|
+
}
|
|
56
71
|
case 'file':
|
|
57
72
|
case 'json':
|
|
58
73
|
case 'markdown':
|
|
59
|
-
case 'richText':
|
|
74
|
+
case 'richText': {
|
|
60
75
|
if (docField.localized) {
|
|
61
76
|
const { localized, locales, ...base } = docField;
|
|
62
77
|
const localeProps = locales && locale ? locales[locale] : undefined;
|
|
78
|
+
if (localeProps) {
|
|
79
|
+
return {
|
|
80
|
+
...base,
|
|
81
|
+
...localeProps,
|
|
82
|
+
...localeFields(localized)
|
|
83
|
+
};
|
|
84
|
+
}
|
|
63
85
|
return {
|
|
64
86
|
...base,
|
|
65
|
-
|
|
66
|
-
...localeFields(localized)
|
|
67
|
-
...(['file', 'json', 'markdown', 'richText'].includes(docField.type) && !localeProps ? { isUnset: true } : null)
|
|
87
|
+
isUnset: true,
|
|
88
|
+
...localeFields(localized)
|
|
68
89
|
};
|
|
69
90
|
}
|
|
70
91
|
return {
|
|
71
92
|
...docField,
|
|
72
93
|
...localeFields(docField.localized)
|
|
73
94
|
};
|
|
95
|
+
}
|
|
74
96
|
case 'image':
|
|
75
97
|
let result: ContentStoreTypes.DocumentFieldAPI;
|
|
76
98
|
if (docField.localized) {
|
|
77
99
|
const { localized, locales, ...base } = docField;
|
|
78
100
|
const localeProps = locales && locale ? locales[locale] : undefined;
|
|
79
101
|
if (localeProps) {
|
|
80
|
-
const fields = toLocalizedAPIFields(localeProps.fields,
|
|
102
|
+
const fields = toLocalizedAPIFields(localeProps.fields, locale) as ContentStoreTypes.ImageFieldsAPI;
|
|
81
103
|
result = {
|
|
82
104
|
...base,
|
|
83
105
|
...localeProps,
|
|
@@ -89,7 +111,7 @@ function toLocalizedAPIField(docField: ContentStoreTypes.DocumentField, staticAs
|
|
|
89
111
|
...base,
|
|
90
112
|
isUnset: true,
|
|
91
113
|
...localeFields(localized)
|
|
92
|
-
}
|
|
114
|
+
};
|
|
93
115
|
}
|
|
94
116
|
} else {
|
|
95
117
|
if (docField.isUnset) {
|
|
@@ -97,15 +119,15 @@ function toLocalizedAPIField(docField: ContentStoreTypes.DocumentField, staticAs
|
|
|
97
119
|
...docField,
|
|
98
120
|
type: 'image',
|
|
99
121
|
...localeFields(docField.localized)
|
|
100
|
-
}
|
|
122
|
+
};
|
|
101
123
|
} else {
|
|
102
|
-
const fields = toLocalizedAPIFields(docField.fields,
|
|
124
|
+
const fields = toLocalizedAPIFields(docField.fields, locale) as ContentStoreTypes.ImageFieldsAPI;
|
|
103
125
|
result = {
|
|
104
126
|
...docField,
|
|
105
127
|
type: 'image',
|
|
106
128
|
fields,
|
|
107
129
|
...localeFields(docField.localized)
|
|
108
|
-
}
|
|
130
|
+
};
|
|
109
131
|
}
|
|
110
132
|
}
|
|
111
133
|
return result;
|
|
@@ -120,7 +142,7 @@ function toLocalizedAPIField(docField: ContentStoreTypes.DocumentField, staticAs
|
|
|
120
142
|
...(localeProps
|
|
121
143
|
? {
|
|
122
144
|
...localeProps,
|
|
123
|
-
fields: toLocalizedAPIFields(localeProps.fields,
|
|
145
|
+
fields: toLocalizedAPIFields(localeProps.fields, locale)
|
|
124
146
|
}
|
|
125
147
|
: { isUnset: true }),
|
|
126
148
|
...localeFields(localized)
|
|
@@ -134,7 +156,7 @@ function toLocalizedAPIField(docField: ContentStoreTypes.DocumentField, staticAs
|
|
|
134
156
|
...(localeProps
|
|
135
157
|
? {
|
|
136
158
|
...localeProps,
|
|
137
|
-
fields: toLocalizedAPIFields(localeProps.fields,
|
|
159
|
+
fields: toLocalizedAPIFields(localeProps.fields, locale)
|
|
138
160
|
}
|
|
139
161
|
: { isUnset: true }),
|
|
140
162
|
...localeFields(localized)
|
|
@@ -146,7 +168,7 @@ function toLocalizedAPIField(docField: ContentStoreTypes.DocumentField, staticAs
|
|
|
146
168
|
? {
|
|
147
169
|
...docField,
|
|
148
170
|
type: 'object',
|
|
149
|
-
fields: toLocalizedAPIFields(docField.fields,
|
|
171
|
+
fields: toLocalizedAPIFields(docField.fields, locale)
|
|
150
172
|
}
|
|
151
173
|
: {
|
|
152
174
|
...docField,
|
|
@@ -233,14 +255,14 @@ function toLocalizedAPIField(docField: ContentStoreTypes.DocumentField, staticAs
|
|
|
233
255
|
return {
|
|
234
256
|
...base,
|
|
235
257
|
...localeProps,
|
|
236
|
-
items: (localeProps?.items ?? []).map((field) => toLocalizedAPIField(field,
|
|
258
|
+
items: (localeProps?.items ?? []).map((field) => toLocalizedAPIField(field, locale, true) as ContentStoreTypes.DocumentListFieldItemsAPI),
|
|
237
259
|
...localeFields(localized)
|
|
238
260
|
};
|
|
239
261
|
}
|
|
240
262
|
return {
|
|
241
263
|
...docField,
|
|
242
264
|
...localeFields(docField.localized),
|
|
243
|
-
items: docField.items.map((field) => toLocalizedAPIField(field,
|
|
265
|
+
items: docField.items.map((field) => toLocalizedAPIField(field, locale, true) as ContentStoreTypes.DocumentListFieldItemsAPI)
|
|
244
266
|
};
|
|
245
267
|
default:
|
|
246
268
|
const _exhaustiveCheck: never = docField;
|
|
@@ -249,20 +271,20 @@ function toLocalizedAPIField(docField: ContentStoreTypes.DocumentField, staticAs
|
|
|
249
271
|
}
|
|
250
272
|
}
|
|
251
273
|
|
|
252
|
-
export function mapAssetsToLocalizedApiImages(assets: ContentStoreTypes.Asset[],
|
|
253
|
-
return assets.map((asset) => assetToLocalizedApiImage(asset,
|
|
274
|
+
export function mapAssetsToLocalizedApiImages(assets: ContentStoreTypes.Asset[], locale?: string): ContentStoreTypes.APIImageObject[] {
|
|
275
|
+
return assets.map((asset) => assetToLocalizedApiImage(asset, locale));
|
|
254
276
|
}
|
|
255
277
|
|
|
256
|
-
function assetToLocalizedApiImage(asset: ContentStoreTypes.Asset,
|
|
278
|
+
function assetToLocalizedApiImage(asset: ContentStoreTypes.Asset, locale?: string): ContentStoreTypes.APIImageObject {
|
|
257
279
|
const { type, fields, ...rest } = asset;
|
|
258
280
|
return {
|
|
259
281
|
type: 'image',
|
|
260
282
|
...rest,
|
|
261
|
-
fields: localizeAssetFields(fields,
|
|
283
|
+
fields: localizeAssetFields(fields, locale)
|
|
262
284
|
};
|
|
263
285
|
}
|
|
264
286
|
|
|
265
|
-
function localizeAssetFields(assetFields: ContentStoreTypes.AssetFields,
|
|
287
|
+
function localizeAssetFields(assetFields: ContentStoreTypes.AssetFields, locale?: string): ContentStoreTypes.AssetFieldsAPI {
|
|
266
288
|
const fields: ContentStoreTypes.AssetFieldsAPI = {
|
|
267
289
|
title: {
|
|
268
290
|
type: 'string' as const,
|
|
@@ -276,9 +298,12 @@ function localizeAssetFields(assetFields: ContentStoreTypes.AssetFields, staticA
|
|
|
276
298
|
const titleField = assetFields.title;
|
|
277
299
|
if (titleField.localized) {
|
|
278
300
|
if (locale) {
|
|
279
|
-
fields.title
|
|
280
|
-
|
|
281
|
-
|
|
301
|
+
fields.title = {
|
|
302
|
+
type: 'string',
|
|
303
|
+
value: titleField.locales?.[locale]?.value ?? null,
|
|
304
|
+
localized: true,
|
|
305
|
+
locale: locale
|
|
306
|
+
};
|
|
282
307
|
}
|
|
283
308
|
} else {
|
|
284
309
|
fields.title.value = titleField.value;
|
|
@@ -286,9 +311,12 @@ function localizeAssetFields(assetFields: ContentStoreTypes.AssetFields, staticA
|
|
|
286
311
|
const assetFileField = assetFields.file;
|
|
287
312
|
if (assetFileField.localized) {
|
|
288
313
|
if (locale) {
|
|
289
|
-
fields.url
|
|
290
|
-
|
|
291
|
-
|
|
314
|
+
fields.url = {
|
|
315
|
+
type: 'string',
|
|
316
|
+
value: assetFileField.locales?.[locale]?.url ?? null,
|
|
317
|
+
localized: true,
|
|
318
|
+
locale: locale
|
|
319
|
+
};
|
|
292
320
|
}
|
|
293
321
|
} else {
|
|
294
322
|
fields.url.value = assetFileField.url;
|
|
@@ -313,7 +341,7 @@ function storeAssetToAPIAsset(asset: ContentStoreTypes.Asset, staticAssetsPublic
|
|
|
313
341
|
createdAt: asset.createdAt,
|
|
314
342
|
url: replaceAssetUrlIfNeeded(staticAssetsPublicPath, localizedFileField.url) ?? staticAssetsPublicPath,
|
|
315
343
|
...omitByNil({
|
|
316
|
-
title: localizedTitleField?.value ??
|
|
344
|
+
title: localizedTitleField?.value ?? undefined,
|
|
317
345
|
fileName: localizedFileField.fileName,
|
|
318
346
|
contentType: localizedFileField.contentType,
|
|
319
347
|
size: localizedFileField.size,
|
|
@@ -325,8 +353,9 @@ function storeAssetToAPIAsset(asset: ContentStoreTypes.Asset, staticAssetsPublic
|
|
|
325
353
|
|
|
326
354
|
function replaceAssetUrlIfNeeded(staticAssetsPublicPath: string, value: string | undefined) {
|
|
327
355
|
let url = value;
|
|
328
|
-
|
|
329
|
-
|
|
356
|
+
let normalizedUrl = url?.toLowerCase();
|
|
357
|
+
if (normalizedUrl && !normalizedUrl.startsWith('http:') && !normalizedUrl.startsWith('https:') && !normalizedUrl.startsWith('//')) {
|
|
358
|
+
url = path.join(staticAssetsPublicPath, url!);
|
|
330
359
|
}
|
|
331
360
|
return url;
|
|
332
|
-
}
|
|
361
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import _ from 'lodash';
|
|
2
2
|
import * as CSITypes from '@stackbit/types';
|
|
3
|
-
import * as ContentStoreTypes from '../
|
|
3
|
+
import * as ContentStoreTypes from '../types';
|
|
4
4
|
|
|
5
5
|
export function mapStoreDocumentsToCSIDocumentsWithSource(documents: ContentStoreTypes.Document[]): CSITypes.DocumentWithSource[] {
|
|
6
6
|
return documents.map((document) => mapStoreDocumentToCSIDocumentWithSource(document));
|
|
@@ -95,6 +95,8 @@ function mapStoreFieldToCSIField(documentField: ContentStoreTypes.DocumentField)
|
|
|
95
95
|
return {
|
|
96
96
|
type: 'image',
|
|
97
97
|
localized: true,
|
|
98
|
+
source: documentField.source,
|
|
99
|
+
sourceData: documentField.sourceData,
|
|
98
100
|
locales: _.mapValues(documentField.locales, (locale) => ({
|
|
99
101
|
locale: locale.locale,
|
|
100
102
|
fields: mapStoreFieldsToCSIFields(locale.fields)
|
|
@@ -106,6 +108,8 @@ function mapStoreFieldToCSIField(documentField: ContentStoreTypes.DocumentField)
|
|
|
106
108
|
}
|
|
107
109
|
return {
|
|
108
110
|
type: 'image',
|
|
111
|
+
source: documentField.source,
|
|
112
|
+
sourceData: documentField.sourceData,
|
|
109
113
|
fields: mapStoreFieldsToCSIFields(documentField.fields)
|
|
110
114
|
} as CSITypes.DocumentImageFieldNonLocalized;
|
|
111
115
|
}
|
package/src/utils/timer.ts
CHANGED