@webiny/api-headless-cms-ddb
Version:
DynamoDB storage operations plugin for Headless CMS API.
90 lines (88 loc) • 2.74 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.objectFilterCreate = void 0;
var _CmsEntryFieldFilterPlugin = require("../../../../plugins/CmsEntryFieldFilterPlugin");
var _where = require("../where");
var _error = _interopRequireDefault(require("@webiny/error"));
var _transform = require("../transform");
const objectFilterCreate = () => {
const plugin = new _CmsEntryFieldFilterPlugin.CmsEntryFieldFilterPlugin({
fieldType: "object",
create: params => {
const {
value: objectValue,
valueFilterPlugins,
transformValuePlugins,
getFilterCreatePlugin,
field: parentField,
fields
} = params;
const filters = [];
for (const key in objectValue) {
const value = objectValue[key];
if (value === undefined) {
continue;
}
const whereParams = (0, _where.extractWhereParams)(key);
if (!whereParams) {
continue;
}
const {
negate,
fieldId,
operation
} = whereParams;
const fieldPath = parentField.parents.map(p => p.fieldId).concat([parentField.fieldId, fieldId]).join(".");
const field = fields[fieldPath];
if (!field) {
throw new _error.default(`There is no field with the field path "${fieldPath}".`, "FIELD_ERROR", {
fieldId
});
}
const filterCreatePlugin = getFilterCreatePlugin(field.type);
const transformValuePlugin = transformValuePlugins[field.type];
const transformValueCallable = value => {
if (!transformValuePlugin) {
return value;
}
return transformValuePlugin.transform({
field,
value
});
};
const result = filterCreatePlugin.create({
key,
value,
valueFilterPlugins,
transformValuePlugins,
getFilterCreatePlugin,
operation,
negate,
field,
fields,
compareValue: (0, _transform.transformValue)({
value,
transform: transformValueCallable
}),
transformValue: transformValueCallable
});
if (!result) {
continue;
}
if (Array.isArray(result)) {
filters.push(...result);
continue;
}
filters.push(result);
}
return filters;
}
});
plugin.name = `headless-cms.ddb.filter.object`;
return plugin;
};
exports.objectFilterCreate = objectFilterCreate;
//# sourceMappingURL=objectFilterCreate.js.map