UNPKG

@opra/elastic

Version:

Opra Elastic Search adapter package

33 lines (32 loc) 970 B
export default function preparePatch(doc) { const script = []; const params = {}; _preparePatch(doc, script, params, ''); return { source: script.join('\n'), params, lang: 'painless', }; } function _preparePatch(src, script, params, path) { let f; let field; for (const [k, v] of Object.entries(src)) { f = k.startsWith('*') ? k.substring(1) : k; field = path ? path + '.' + f : f; if (v == null) { script.push(`ctx._source.remove('${field}');`); continue; } if (v && typeof v === 'object' && !Array.isArray(v) && /** If field name starts with "*", do "replace" operation except "merge" */ !k.startsWith('*')) { _preparePatch(v, script, params, field); continue; } script.push(`ctx._source['${field}'] = params['${field}'];`); params[field] = v; } }