UNPKG

@snipsonian/core

Version:

Core/base reusable javascript code snippets

28 lines (27 loc) 1.22 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const isObject_1 = require("../../is/isObject"); const getPossiblyNestedObjectPropValue_1 = require("../filtering/getPossiblyNestedObjectPropValue"); function updateObjectField({ obj, fieldToUpdateRef, val, }) { if (!(0, isObject_1.default)(obj)) { return obj; } const lastArraySeparator = fieldToUpdateRef.lastIndexOf('['); const lastObjSeparator = fieldToUpdateRef.lastIndexOf('.'); const splitIndex = Math.max(lastArraySeparator, lastObjSeparator); if (splitIndex === -1) { obj[fieldToUpdateRef] = val; return obj; } const parentRef = fieldToUpdateRef.substring(0, splitIndex); const remainingRef = fieldToUpdateRef.substring(splitIndex + 1); const childKey = (splitIndex === lastArraySeparator) ? remainingRef.substring(0, remainingRef.indexOf(']')) : remainingRef; const getFieldsFromParentRefRegex = /([^.[\]]+)/g; const pathParts = parentRef.match(getFieldsFromParentRefRegex); const parent = (0, getPossiblyNestedObjectPropValue_1.default)(obj, ...pathParts); parent[childKey] = val; return obj; } exports.default = updateObjectField;