@stackbit/cms-core 0.1.3-alpha.1 → 0.1.3

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.
Files changed (52) hide show
  1. package/dist/content-source-interface.d.ts +12 -7
  2. package/dist/content-source-interface.d.ts.map +1 -1
  3. package/dist/content-source-interface.js.map +1 -1
  4. package/dist/content-store-types.d.ts +24 -25
  5. package/dist/content-store-types.d.ts.map +1 -1
  6. package/dist/content-store.d.ts +4 -17
  7. package/dist/content-store.d.ts.map +1 -1
  8. package/dist/content-store.js +948 -146
  9. package/dist/content-store.js.map +1 -1
  10. package/dist/encoder.d.ts.map +1 -1
  11. package/dist/encoder.js +5 -1
  12. package/dist/encoder.js.map +1 -1
  13. package/dist/index.d.ts +0 -2
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +1 -3
  16. package/dist/index.js.map +1 -1
  17. package/package.json +5 -6
  18. package/src/content-source-interface.ts +14 -5
  19. package/src/content-store-types.ts +10 -23
  20. package/src/content-store.ts +1078 -136
  21. package/src/encoder.ts +6 -2
  22. package/src/index.ts +1 -3
  23. package/dist/content-store-utils.d.ts +0 -9
  24. package/dist/content-store-utils.d.ts.map +0 -1
  25. package/dist/content-store-utils.js +0 -139
  26. package/dist/content-store-utils.js.map +0 -1
  27. package/dist/types/search-filter.d.ts +0 -42
  28. package/dist/types/search-filter.d.ts.map +0 -1
  29. package/dist/types/search-filter.js +0 -3
  30. package/dist/types/search-filter.js.map +0 -1
  31. package/dist/utils/create-update-csi-docs.d.ts +0 -68
  32. package/dist/utils/create-update-csi-docs.d.ts.map +0 -1
  33. package/dist/utils/create-update-csi-docs.js +0 -376
  34. package/dist/utils/create-update-csi-docs.js.map +0 -1
  35. package/dist/utils/csi-to-store-docs-converter.d.ts +0 -15
  36. package/dist/utils/csi-to-store-docs-converter.d.ts.map +0 -1
  37. package/dist/utils/csi-to-store-docs-converter.js +0 -287
  38. package/dist/utils/csi-to-store-docs-converter.js.map +0 -1
  39. package/dist/utils/search-utils.d.ts +0 -21
  40. package/dist/utils/search-utils.d.ts.map +0 -1
  41. package/dist/utils/search-utils.js +0 -323
  42. package/dist/utils/search-utils.js.map +0 -1
  43. package/dist/utils/store-to-api-docs-converter.d.ts +0 -5
  44. package/dist/utils/store-to-api-docs-converter.d.ts.map +0 -1
  45. package/dist/utils/store-to-api-docs-converter.js +0 -247
  46. package/dist/utils/store-to-api-docs-converter.js.map +0 -1
  47. package/src/content-store-utils.ts +0 -149
  48. package/src/types/search-filter.ts +0 -53
  49. package/src/utils/create-update-csi-docs.ts +0 -440
  50. package/src/utils/csi-to-store-docs-converter.ts +0 -365
  51. package/src/utils/search-utils.ts +0 -436
  52. package/src/utils/store-to-api-docs-converter.ts +0 -246
@@ -1,287 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.mapCSIDocumentsToStoreDocuments = exports.mapCSIAssetsToStoreAssets = void 0;
7
- const lodash_1 = __importDefault(require("lodash"));
8
- const content_source_interface_1 = require("../content-source-interface");
9
- const common_schema_1 = require("../common/common-schema");
10
- function mapCSIAssetsToStoreAssets({ csiAssets, contentSourceInstance, defaultLocaleCode }) {
11
- const extra = getMetadataFromContentStore({ contentSourceInstance });
12
- return csiAssets.map((csiAsset) => sourceAssetToStoreAsset({
13
- csiAsset,
14
- defaultLocaleCode,
15
- extra
16
- }));
17
- }
18
- exports.mapCSIAssetsToStoreAssets = mapCSIAssetsToStoreAssets;
19
- function sourceAssetToStoreAsset({ csiAsset, defaultLocaleCode, extra }) {
20
- return {
21
- type: 'asset',
22
- ...extra,
23
- srcObjectId: csiAsset.id,
24
- srcObjectUrl: csiAsset.manageUrl,
25
- srcObjectLabel: getObjectLabel(csiAsset.fields, common_schema_1.IMAGE_MODEL, defaultLocaleCode),
26
- srcModelName: common_schema_1.IMAGE_MODEL.name,
27
- srcModelLabel: common_schema_1.IMAGE_MODEL.label,
28
- isChanged: csiAsset.status === 'added' || csiAsset.status === 'modified',
29
- status: csiAsset.status,
30
- createdAt: csiAsset.createdAt,
31
- createdBy: csiAsset.createdBy,
32
- updatedAt: csiAsset.updatedAt,
33
- updatedBy: csiAsset.updatedBy,
34
- fields: {
35
- title: {
36
- label: 'Title',
37
- ...csiAsset.fields.title
38
- },
39
- file: {
40
- label: 'File',
41
- ...csiAsset.fields.file
42
- }
43
- }
44
- };
45
- }
46
- function mapCSIDocumentsToStoreDocuments({ csiDocuments, contentSourceInstance, modelMap, defaultLocaleCode }) {
47
- const extra = getMetadataFromContentStore({ contentSourceInstance });
48
- return csiDocuments.map((csiDocument) => mapCSIDocumentToStoreDocument({
49
- csiDocument,
50
- model: modelMap[csiDocument.modelName],
51
- modelMap,
52
- defaultLocaleCode,
53
- extra
54
- }));
55
- }
56
- exports.mapCSIDocumentsToStoreDocuments = mapCSIDocumentsToStoreDocuments;
57
- function mapCSIDocumentToStoreDocument({ csiDocument, model, modelMap, defaultLocaleCode, extra }) {
58
- var _a, _b;
59
- return {
60
- type: 'document',
61
- ...extra,
62
- srcObjectId: csiDocument.id,
63
- srcObjectUrl: csiDocument.manageUrl,
64
- srcObjectLabel: getObjectLabel(csiDocument.fields, model, defaultLocaleCode),
65
- srcModelLabel: (_a = model.label) !== null && _a !== void 0 ? _a : lodash_1.default.startCase(csiDocument.modelName),
66
- srcModelName: csiDocument.modelName,
67
- isChanged: csiDocument.status === 'added' || csiDocument.status === 'modified',
68
- status: csiDocument.status,
69
- createdAt: csiDocument.createdAt,
70
- createdBy: csiDocument.createdBy,
71
- updatedAt: csiDocument.updatedAt,
72
- updatedBy: csiDocument.updatedBy,
73
- fields: mapCSIFieldsToStoreFields({
74
- csiDocumentFields: csiDocument.fields,
75
- modelFields: (_b = model.fields) !== null && _b !== void 0 ? _b : [],
76
- context: {
77
- modelMap,
78
- defaultLocaleCode
79
- }
80
- })
81
- };
82
- }
83
- function mapCSIFieldsToStoreFields({ csiDocumentFields, modelFields, context }) {
84
- return modelFields.reduce((result, modelField) => {
85
- const csiDocumentField = csiDocumentFields[modelField.name];
86
- const docField = mapCSIFieldToStoreField({
87
- csiDocumentField,
88
- modelField,
89
- context
90
- });
91
- docField.label = modelField.label;
92
- result[modelField.name] = docField;
93
- return result;
94
- }, {});
95
- }
96
- function mapCSIFieldToStoreField({ csiDocumentField, modelField, context }) {
97
- if (!csiDocumentField) {
98
- const isUnset = ['object', 'model', 'reference', 'richText', 'markdown', 'image', 'file', 'json'].includes(modelField.type);
99
- return {
100
- type: modelField.type,
101
- ...(isUnset ? { isUnset } : null),
102
- ...(modelField.type === 'list' ? { items: [] } : null)
103
- };
104
- }
105
- // TODO: check if need to add "options" to "enum" and subtype/min/max to "number"
106
- switch (modelField.type) {
107
- case 'object':
108
- return mapObjectField(csiDocumentField, modelField, context);
109
- case 'model':
110
- return mapModelField(csiDocumentField, modelField, context);
111
- case 'list':
112
- return mapListField(csiDocumentField, modelField, context);
113
- case 'richText':
114
- return mapRichTextField(csiDocumentField);
115
- case 'markdown':
116
- return mapMarkdownField(csiDocumentField);
117
- default:
118
- return csiDocumentField;
119
- }
120
- }
121
- function mapObjectField(csiDocumentField, modelField, context) {
122
- var _a, _b, _c;
123
- if (!(0, content_source_interface_1.isLocalizedField)(csiDocumentField)) {
124
- return {
125
- type: csiDocumentField.type,
126
- srcObjectLabel: getObjectLabel((_a = csiDocumentField.fields) !== null && _a !== void 0 ? _a : {}, modelField !== null && modelField !== void 0 ? modelField : [], context.defaultLocaleCode),
127
- fields: mapCSIFieldsToStoreFields({
128
- csiDocumentFields: (_b = csiDocumentField.fields) !== null && _b !== void 0 ? _b : {},
129
- modelFields: (_c = modelField.fields) !== null && _c !== void 0 ? _c : [],
130
- context
131
- })
132
- };
133
- }
134
- return {
135
- type: csiDocumentField.type,
136
- localized: true,
137
- locales: lodash_1.default.mapValues(csiDocumentField.locales, (locale) => {
138
- var _a, _b, _c;
139
- return {
140
- locale: locale.locale,
141
- srcObjectLabel: getObjectLabel((_a = locale.fields) !== null && _a !== void 0 ? _a : {}, modelField, locale.locale),
142
- fields: mapCSIFieldsToStoreFields({
143
- csiDocumentFields: (_b = locale.fields) !== null && _b !== void 0 ? _b : {},
144
- modelFields: (_c = modelField.fields) !== null && _c !== void 0 ? _c : [],
145
- context
146
- })
147
- };
148
- })
149
- };
150
- }
151
- function mapModelField(csiDocumentField, modelField, context) {
152
- var _a, _b, _c, _d;
153
- if (!(0, content_source_interface_1.isLocalizedField)(csiDocumentField)) {
154
- const model = context.modelMap[csiDocumentField.modelName];
155
- return {
156
- type: csiDocumentField.type,
157
- srcObjectLabel: getObjectLabel((_a = csiDocumentField.fields) !== null && _a !== void 0 ? _a : {}, model, context.defaultLocaleCode),
158
- srcModelName: csiDocumentField.modelName,
159
- srcModelLabel: (_b = model.label) !== null && _b !== void 0 ? _b : lodash_1.default.startCase(model.name),
160
- fields: mapCSIFieldsToStoreFields({
161
- csiDocumentFields: (_c = csiDocumentField.fields) !== null && _c !== void 0 ? _c : {},
162
- modelFields: (_d = model.fields) !== null && _d !== void 0 ? _d : [],
163
- context
164
- })
165
- };
166
- }
167
- return {
168
- type: csiDocumentField.type,
169
- localized: true,
170
- locales: lodash_1.default.mapValues(csiDocumentField.locales, (locale) => {
171
- var _a, _b, _c, _d;
172
- const model = context.modelMap[locale.modelName];
173
- return {
174
- locale: locale.locale,
175
- srcObjectLabel: getObjectLabel((_a = locale.fields) !== null && _a !== void 0 ? _a : {}, model, locale.locale),
176
- srcModelName: locale.modelName,
177
- srcModelLabel: (_b = model.label) !== null && _b !== void 0 ? _b : lodash_1.default.startCase(model.name),
178
- fields: mapCSIFieldsToStoreFields({
179
- csiDocumentFields: (_c = locale.fields) !== null && _c !== void 0 ? _c : {},
180
- modelFields: (_d = model.fields) !== null && _d !== void 0 ? _d : [],
181
- context
182
- })
183
- };
184
- })
185
- };
186
- }
187
- function mapListField(csiDocumentField, modelField, context) {
188
- if (!(0, content_source_interface_1.isLocalizedField)(csiDocumentField)) {
189
- return {
190
- type: csiDocumentField.type,
191
- items: csiDocumentField.items.map((item) => {
192
- var _a;
193
- return mapCSIFieldToStoreField({
194
- csiDocumentField: item,
195
- modelField: (_a = modelField.items) !== null && _a !== void 0 ? _a : { type: 'string' },
196
- context
197
- });
198
- })
199
- };
200
- }
201
- return {
202
- type: csiDocumentField.type,
203
- localized: true,
204
- locales: lodash_1.default.mapValues(csiDocumentField.locales, (locale) => {
205
- var _a;
206
- return {
207
- locale: locale.locale,
208
- items: ((_a = locale.items) !== null && _a !== void 0 ? _a : []).map((item) => {
209
- var _a;
210
- return mapCSIFieldToStoreField({
211
- csiDocumentField: item,
212
- modelField: (_a = modelField.items) !== null && _a !== void 0 ? _a : { type: 'string' },
213
- context
214
- });
215
- })
216
- };
217
- })
218
- };
219
- }
220
- function mapRichTextField(csiDocumentField) {
221
- if (!(0, content_source_interface_1.isLocalizedField)(csiDocumentField)) {
222
- return {
223
- ...csiDocumentField,
224
- multiElement: true
225
- };
226
- }
227
- return {
228
- type: csiDocumentField.type,
229
- localized: true,
230
- locales: lodash_1.default.mapValues(csiDocumentField.locales, (locale) => {
231
- return {
232
- ...locale,
233
- multiElement: true
234
- };
235
- })
236
- };
237
- }
238
- function mapMarkdownField(csiDocumentField) {
239
- if (!(0, content_source_interface_1.isLocalizedField)(csiDocumentField)) {
240
- return {
241
- type: 'markdown',
242
- value: csiDocumentField.value,
243
- multiElement: true
244
- };
245
- }
246
- return {
247
- type: 'markdown',
248
- localized: true,
249
- locales: lodash_1.default.mapValues(csiDocumentField.locales, (locale) => {
250
- return {
251
- ...locale,
252
- multiElement: true
253
- };
254
- })
255
- };
256
- }
257
- function getMetadataFromContentStore({ contentSourceInstance }) {
258
- return {
259
- srcType: contentSourceInstance.getContentSourceType(),
260
- srcProjectId: contentSourceInstance.getProjectId(),
261
- srcProjectUrl: contentSourceInstance.getProjectManageUrl(),
262
- srcEnvironment: contentSourceInstance.getProjectEnvironment()
263
- };
264
- }
265
- function getObjectLabel(documentFields, modelOrObjectField, locale) {
266
- const labelField = modelOrObjectField.labelField;
267
- let label = null;
268
- if (labelField) {
269
- const field = lodash_1.default.get(documentFields, labelField, null);
270
- if (field && ['string', 'url', 'slug', 'text', 'markdown', 'number', 'enum', 'date', 'datetime', 'color', 'image', 'file'].includes(field.type)) {
271
- if ((0, content_source_interface_1.isLocalizedField)(field) && locale) {
272
- label = lodash_1.default.get(field, ['locales', locale, 'value'], null);
273
- }
274
- else if (!(0, content_source_interface_1.isLocalizedField)(field)) {
275
- label = lodash_1.default.get(field, 'value', null);
276
- }
277
- }
278
- }
279
- if (!label) {
280
- label = lodash_1.default.get(modelOrObjectField, 'label');
281
- }
282
- if (!label && lodash_1.default.has(modelOrObjectField, 'name')) {
283
- label = lodash_1.default.startCase(lodash_1.default.get(modelOrObjectField, 'name'));
284
- }
285
- return label;
286
- }
287
- //# sourceMappingURL=csi-to-store-docs-converter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"csi-to-store-docs-converter.js","sourceRoot":"","sources":["../../src/utils/csi-to-store-docs-converter.ts"],"names":[],"mappings":"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"}
@@ -1,21 +0,0 @@
1
- import { Model } from '@stackbit/sdk';
2
- import { SearchFilter } from '../types/search-filter';
3
- import { ContentStoreTypes } from '..';
4
- declare type Schema = Record<string, Record<string, Record<string, Model>>>;
5
- export declare const searchDocuments: (data: {
6
- query?: string;
7
- filter?: SearchFilter;
8
- models: Array<{
9
- srcProjectId: string;
10
- srcType: string;
11
- modelName: string;
12
- }>;
13
- documents: ContentStoreTypes.Document[];
14
- schema: Schema;
15
- locale?: string;
16
- }) => {
17
- total: number;
18
- items: ContentStoreTypes.Document[];
19
- };
20
- export {};
21
- //# sourceMappingURL=search-utils.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"search-utils.d.ts","sourceRoot":"","sources":["../../src/utils/search-utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,YAAY,EAAoB,MAAM,wBAAwB,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,IAAI,CAAC;AAavC,aAAK,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAEpE,eAAO,MAAM,eAAe,SAAU;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE,MAAM;QACV,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;IACH,SAAS,EAAE,kBAAkB,QAAQ,EAAE,CAAC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB,KAAG;IACA,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,kBAAkB,QAAQ,EAAE,CAAC;CA8CvC,CAAC"}
@@ -1,323 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.searchDocuments = void 0;
7
- const lodash_1 = __importDefault(require("lodash"));
8
- const content_source_interface_1 = require("../content-source-interface");
9
- const META_FIELD = {
10
- createdAt: {
11
- type: 'date'
12
- },
13
- updatedAt: {
14
- type: 'date'
15
- }
16
- };
17
- const searchDocuments = (data) => {
18
- var _a;
19
- const query = (_a = data.query) === null || _a === void 0 ? void 0 : _a.toLowerCase();
20
- const { documents, schema } = data;
21
- let allDocuments = 0;
22
- const matchedDocuments = documents.filter((document) => {
23
- var _a;
24
- const isIncludedModel = lodash_1.default.find(data.models, {
25
- srcType: document.srcType,
26
- srcProjectId: document.srcProjectId,
27
- modelName: document.srcModelName
28
- });
29
- if (!isIncludedModel) {
30
- return false;
31
- }
32
- allDocuments += 1;
33
- if (query) {
34
- const matches = isDocumentMatchesPattern(document, query, data.locale);
35
- if (!matches) {
36
- return false;
37
- }
38
- }
39
- if ((_a = data.filter) === null || _a === void 0 ? void 0 : _a.and) {
40
- // only 'and' supported for now; later we can add e.g. 'or'
41
- const matches = data.filter.and.every((filter) => {
42
- const field = getFieldForFilter(document, filter);
43
- return isFieldMatchesFilter({ field, filter, document, schema, locale: data.locale });
44
- });
45
- if (!matches) {
46
- return false;
47
- }
48
- }
49
- return true;
50
- });
51
- return {
52
- items: matchedDocuments,
53
- total: allDocuments
54
- };
55
- };
56
- exports.searchDocuments = searchDocuments;
57
- const isDocumentMatchesPattern = (document, query, locale) => {
58
- return lodash_1.default.some(document.fields, (field) => {
59
- var _a;
60
- let value;
61
- switch (field.type) {
62
- case 'string':
63
- case 'slug':
64
- case 'url':
65
- case 'text':
66
- case 'markdown':
67
- case 'html':
68
- value = (_a = (0, content_source_interface_1.getLocalizedFieldForLocale)(field, locale)) === null || _a === void 0 ? void 0 : _a.value;
69
- break;
70
- }
71
- if (value) {
72
- return value === null || value === void 0 ? void 0 : value.toString().toLowerCase().includes(query);
73
- }
74
- return false;
75
- });
76
- };
77
- const getFieldForFilter = (document, filter) => {
78
- if (filter.isMeta) {
79
- const fieldDef = META_FIELD[filter.field];
80
- if (!fieldDef) {
81
- throw new Error(`Unsupported meta field ${filter.field}`);
82
- }
83
- return {
84
- ...fieldDef,
85
- value: document[filter.field]
86
- };
87
- }
88
- else {
89
- const documentField = document.fields[filter.field];
90
- if (!documentField) {
91
- throw new Error(`Field not found ${filter.field}`);
92
- }
93
- return documentField;
94
- }
95
- };
96
- const isFieldMatchesFilter = ({ document, field, filter, locale, schema }) => {
97
- var _a, _b;
98
- switch (field === null || field === void 0 ? void 0 : field.type) {
99
- case 'string':
100
- case 'slug':
101
- case 'url':
102
- case 'text':
103
- case 'markdown':
104
- case 'html':
105
- return isStringFieldMatches({ field, filter, locale });
106
- case 'number':
107
- return isNumberFieldMatches({ field, filter, locale });
108
- case 'boolean':
109
- return isBooleanFieldMatches({ field, filter, locale });
110
- case 'date':
111
- case 'datetime':
112
- return isDateFieldMatches({ field, filter, locale });
113
- case 'enum':
114
- return isEnumFieldMatches({ field, filter, locale });
115
- case 'list': {
116
- const model = (_b = (_a = schema === null || schema === void 0 ? void 0 : schema[document.srcType]) === null || _a === void 0 ? void 0 : _a[document.srcProjectId]) === null || _b === void 0 ? void 0 : _b[document.srcModelName];
117
- if (!model) {
118
- throw new Error(`Can't find model for the ${filter.field}`);
119
- }
120
- return isListFieldMatches({ field, filter, model, locale });
121
- }
122
- default:
123
- throw new Error(`Unsupported filter for field ${filter.field} with type ${field === null || field === void 0 ? void 0 : field.type}`);
124
- }
125
- };
126
- const isStringFieldMatches = ({ field, filter, locale }) => {
127
- var _a, _b, _c;
128
- // ignoring case
129
- const fieldValue = (_b = (_a = (0, content_source_interface_1.getLocalizedFieldForLocale)(field, locale)) === null || _a === void 0 ? void 0 : _a.value) === null || _b === void 0 ? void 0 : _b.toLowerCase();
130
- switch (filter.operator) {
131
- case 'is-undefined': return fieldValue === undefined;
132
- case 'is-not-undefined': return fieldValue !== undefined;
133
- case 'eq': // ===
134
- case 'neq': // !==
135
- case 'includes':
136
- case 'not-includes': {
137
- if (typeof filter.value !== 'string') {
138
- throw new Error(`Filter value should be string for field ${filter.field}`);
139
- }
140
- const filterValue = (_c = filter.value) === null || _c === void 0 ? void 0 : _c.toString().toLowerCase();
141
- switch (filter.operator) {
142
- case 'eq':
143
- return fieldValue === filterValue;
144
- case 'neq':
145
- return fieldValue !== filterValue;
146
- case 'includes':
147
- return fieldValue.includes(filterValue);
148
- case 'not-includes':
149
- return !fieldValue.includes(filterValue);
150
- }
151
- }
152
- }
153
- throw new Error(`Not supported operator ${filter.operator} for field ${filter.field}`);
154
- };
155
- const isNumberFieldMatches = ({ field, filter, locale }) => {
156
- var _a;
157
- const fieldValue = (_a = (0, content_source_interface_1.getLocalizedFieldForLocale)(field, locale)) === null || _a === void 0 ? void 0 : _a.value;
158
- switch (filter.operator) {
159
- case 'is-undefined': return fieldValue === undefined;
160
- case 'is-not-undefined': return fieldValue !== undefined;
161
- case 'eq': // ===
162
- case 'neq': // !==
163
- case 'gte': // >=
164
- case 'lte': {
165
- // <=
166
- if (typeof filter.value !== 'number') {
167
- throw new Error(`Filter value should be number for field ${filter.field}`);
168
- }
169
- switch (filter.operator) {
170
- case 'eq':
171
- return fieldValue === filter.value;
172
- case 'neq':
173
- return fieldValue !== filter.value;
174
- case 'gte':
175
- return fieldValue >= filter.value;
176
- case 'lte':
177
- return fieldValue <= filter.value;
178
- }
179
- }
180
- case 'between': {
181
- // ..N..
182
- if (typeof filter.startValue !== 'number' || typeof filter.endValue !== 'number') {
183
- throw new Error(`Filter startValue and endValue should be number for field ${filter.field}`);
184
- }
185
- return fieldValue >= filter.startValue && fieldValue <= filter.endValue;
186
- }
187
- }
188
- throw new Error(`Not supported operator ${filter.operator} for field ${filter.field}`);
189
- };
190
- const isBooleanFieldMatches = ({ field, filter, locale }) => {
191
- var _a;
192
- const fieldValue = (_a = (0, content_source_interface_1.getLocalizedFieldForLocale)(field, locale)) === null || _a === void 0 ? void 0 : _a.value;
193
- switch (filter.operator) {
194
- case 'is-undefined': return fieldValue === undefined;
195
- case 'is-not-undefined': return fieldValue !== undefined;
196
- case 'eq':
197
- case 'neq': {
198
- if (typeof filter.value !== 'boolean') {
199
- throw new Error(`Filter value should be boolean for field ${filter.field}`);
200
- }
201
- switch (filter.operator) {
202
- case 'eq':
203
- return fieldValue === filter.value;
204
- case 'neq':
205
- return fieldValue !== filter.value;
206
- }
207
- }
208
- }
209
- throw new Error(`Not supported operator ${filter.operator} for field ${filter.field}`);
210
- };
211
- const parseDateValue = (value) => {
212
- let dateValue;
213
- if (value === null || value === void 0 ? void 0 : value.endsWith('Z')) {
214
- dateValue = new Date(value);
215
- }
216
- else if (value === null || value === void 0 ? void 0 : value.match(/\d{1,4}-\d{1,2}-\d{1,2}$/)) {
217
- // try to parse it as a date
218
- // when use '-' in js dates constructor, it make the date with TZ offset
219
- // 2022-10-04 => 03 Oct 2022 20:00 GMT-4
220
- // 2022/10/04 => 04 Oct 2022 00:00 GMT-4
221
- dateValue = new Date(value.replace(/-/g, '/'));
222
- }
223
- if (dateValue && !Number.isNaN(dateValue)) {
224
- return dateValue;
225
- }
226
- };
227
- const isDateFieldMatches = ({ field, filter, locale }) => {
228
- var _a, _b, _c, _d, _e;
229
- const origValue = (_a = (0, content_source_interface_1.getLocalizedFieldForLocale)(field, locale)) === null || _a === void 0 ? void 0 : _a.value;
230
- const fieldValue = parseDateValue(origValue);
231
- if (origValue && !fieldValue) {
232
- throw new Error(`Can't parse value ${origValue} for field ${filter.field}`);
233
- }
234
- switch (filter.operator) {
235
- case 'is-undefined': return fieldValue === undefined;
236
- case 'is-not-undefined': return fieldValue !== undefined;
237
- case 'eq': // ===
238
- case 'neq': // !==
239
- case 'gte': // >=
240
- case 'lte': {
241
- // <=
242
- if (typeof filter.value !== 'string') {
243
- throw new Error(`Filter value should be in string date format for field ${filter.field}`);
244
- }
245
- const filterValue = parseDateValue(filter.value);
246
- if (!filterValue) {
247
- throw new Error(`Filter value should be in date format for field ${filter.field}`);
248
- }
249
- switch (filter.operator) {
250
- case 'eq':
251
- case 'neq': { // check if day is the same
252
- const result = ((fieldValue === null || fieldValue === void 0 ? void 0 : fieldValue.getFullYear()) === filterValue.getFullYear() &&
253
- (fieldValue === null || fieldValue === void 0 ? void 0 : fieldValue.getMonth()) === filterValue.getMonth() &&
254
- (fieldValue === null || fieldValue === void 0 ? void 0 : fieldValue.getDate()) === filterValue.getDate());
255
- return filter.operator === 'eq' ? result : !result;
256
- }
257
- case 'gte':
258
- return ((_b = fieldValue === null || fieldValue === void 0 ? void 0 : fieldValue.getTime()) !== null && _b !== void 0 ? _b : 0) >= filterValue.getTime();
259
- case 'lte':
260
- return ((_c = fieldValue === null || fieldValue === void 0 ? void 0 : fieldValue.getTime()) !== null && _c !== void 0 ? _c : 0) <= filterValue.getTime();
261
- }
262
- }
263
- case 'between': {
264
- // ..N..
265
- if (typeof filter.startValue !== 'string' || typeof filter.endValue !== 'string') {
266
- throw new Error(`Filter startValue and endValue should be in string date format for field ${filter.field}`);
267
- }
268
- const startDate = parseDateValue(filter.startValue);
269
- const endDate = parseDateValue(filter.endValue);
270
- if (!startDate || !endDate) {
271
- throw new Error(`Filter startValue and endValue should be in date format for field ${filter.field}`);
272
- }
273
- return ((_d = fieldValue === null || fieldValue === void 0 ? void 0 : fieldValue.getTime()) !== null && _d !== void 0 ? _d : 0) >= startDate.getTime() && ((_e = fieldValue === null || fieldValue === void 0 ? void 0 : fieldValue.getTime()) !== null && _e !== void 0 ? _e : 0) <= endDate.getTime();
274
- }
275
- }
276
- throw new Error(`Not supported operator ${filter.operator} for field ${filter.field}`);
277
- };
278
- const isEnumFieldMatches = ({ field, filter, locale }) => {
279
- var _a;
280
- const fieldValue = (_a = (0, content_source_interface_1.getLocalizedFieldForLocale)(field, locale)) === null || _a === void 0 ? void 0 : _a.value;
281
- switch (filter.operator) {
282
- case 'is-undefined': return fieldValue === undefined;
283
- case 'is-not-undefined': return fieldValue !== undefined;
284
- case 'in': // one of
285
- case 'nin': { // none of
286
- const filterValues = filter.values;
287
- switch (filter.operator) {
288
- case 'in':
289
- return filterValues.includes(fieldValue);
290
- case 'nin':
291
- return !filterValues.includes(fieldValue);
292
- }
293
- }
294
- }
295
- throw new Error(`Not supported operator ${filter.operator} for field ${filter.field}`);
296
- };
297
- const isListFieldMatches = ({ field, filter, locale, model }) => {
298
- var _a, _b, _c, _d, _e;
299
- const fieldModel = (_a = model === null || model === void 0 ? void 0 : model.fields) === null || _a === void 0 ? void 0 : _a.find((field) => field.name === filter.field);
300
- const listItemsType = (fieldModel === null || fieldModel === void 0 ? void 0 : fieldModel.type) === 'list' && ((_b = fieldModel.items) === null || _b === void 0 ? void 0 : _b.type);
301
- const isPrimitiveList = listItemsType && ['string', 'slug', 'url', 'text', 'markdown', 'boolean', 'date', 'datetime', 'number', 'enum'].includes(listItemsType);
302
- if (!isPrimitiveList) {
303
- throw new Error(`Unsupported filter for list field ${filter.field} with children ${listItemsType}`);
304
- }
305
- const fieldValue = (_d = (_c = (0, content_source_interface_1.getLocalizedFieldForLocale)(field, locale)) === null || _c === void 0 ? void 0 : _c.items) === null || _d === void 0 ? void 0 : _d.map((item) => 'value' in item ? item.value : undefined);
306
- switch (filter.operator) {
307
- case 'in': // one of
308
- case 'nin': // none of
309
- case 'all': { // all of
310
- const filterValues = filter.values;
311
- switch (filter.operator) {
312
- case 'in':
313
- return (_e = fieldValue === null || fieldValue === void 0 ? void 0 : fieldValue.some((value) => filterValues.includes(value))) !== null && _e !== void 0 ? _e : false;
314
- case 'nin':
315
- return !(fieldValue === null || fieldValue === void 0 ? void 0 : fieldValue.some((value) => filterValues.includes(value)));
316
- case 'all':
317
- return filterValues.every((value) => fieldValue === null || fieldValue === void 0 ? void 0 : fieldValue.includes(value));
318
- }
319
- }
320
- }
321
- throw new Error(`Not supported operator ${filter.operator} for field ${filter.field}`);
322
- };
323
- //# sourceMappingURL=search-utils.js.map