UNPKG

@webiny/api-headless-cms-ddb-es

Version:

DynamoDB and Elasticsearch storage operations plugin for Headless CMS API.

158 lines (157 loc) 4.06 kB
import { getFieldIdentifiers } from "../../../helpers/index.js"; import { CmsEntryOpenSearchFieldIndex } from "../abstractions/CmsEntryOpenSearchFieldIndex.js"; const processToIndex = params => { const { fields, value: sourceValue, rawValue: sourceRawValue, getFieldIndex, fieldRegistry, model } = params; return fields.reduce((values, field) => { const plugin = getFieldIndex(field.type); const identifiers = getFieldIdentifiers(sourceValue, sourceRawValue, field); if (!identifiers) { return values; } const { value, rawValue } = plugin.toIndex({ model, field, value: sourceValue[identifiers.valueIdentifier || identifiers.rawValueIdentifier], rawValue: sourceRawValue[identifiers.rawValueIdentifier || identifiers.valueIdentifier], getFieldIndex, fieldRegistry }); if (value !== undefined) { values.value[identifiers.valueIdentifier || identifiers.rawValueIdentifier] = value; } if (rawValue !== undefined) { values.rawValue[identifiers.rawValueIdentifier || identifiers.valueIdentifier] = rawValue; } return values; }, { value: {}, rawValue: {} }); }; const processFromIndex = params => { const { fields, value: sourceValue, rawValue: sourceRawValue, getFieldIndex, fieldRegistry, model } = params; return fields.reduce((values, field) => { const plugin = getFieldIndex(field.type); const identifiers = getFieldIdentifiers(sourceValue, sourceRawValue, field); if (!identifiers) { return values; } const value = plugin.fromIndex({ fieldRegistry, model, field, value: sourceValue[identifiers.valueIdentifier || identifiers.rawValueIdentifier], rawValue: sourceRawValue ? sourceRawValue[identifiers.rawValueIdentifier || identifiers.valueIdentifier] : null, getFieldIndex }); if (value !== undefined) { values[identifiers.valueIdentifier || identifiers.rawValueIdentifier] = value; } return values; }, {}); }; class ObjectFieldIndexImpl { fieldType = "object"; toIndex({ fieldRegistry, model, field, value: initialValue, rawValue: initialRawValue, getFieldIndex }) { if (!initialValue) { return { value: null }; } const fields = field.settings?.fields || []; if (field.list) { const result = { value: [], rawValue: [] }; for (const key in initialValue) { const { value, rawValue } = processToIndex({ value: initialValue[key], rawValue: initialRawValue[key], getFieldIndex, model, fieldRegistry, fields }); result.value.push(value); result.rawValue.push(rawValue); } return { value: result.value.length > 0 ? result.value : undefined, rawValue: result.rawValue.length > 0 ? result.rawValue : undefined }; } return processToIndex({ value: initialValue, rawValue: initialRawValue, getFieldIndex, model, fieldRegistry, fields }); } fromIndex({ field, value, rawValue, model, getFieldIndex, fieldRegistry }) { if (!value) { return null; } const fields = field.settings?.fields || []; if (field.list) { const source = value || rawValue || []; return source.map((_, index) => processFromIndex({ value: value ? value[index] || {} : {}, rawValue: rawValue ? rawValue[index] || {} : {}, getFieldIndex, model, fieldRegistry, fields })); } return processFromIndex({ value, rawValue, getFieldIndex, model, fieldRegistry, fields }); } } export const ObjectFieldIndex = CmsEntryOpenSearchFieldIndex.createImplementation({ implementation: ObjectFieldIndexImpl, dependencies: [] }); //# sourceMappingURL=ObjectFieldIndex.js.map