Spaces:
Sleeping
Sleeping
| exports.set = function (target, path, value) { | |
| const fields = path.split('.') | |
| let obj = target | |
| const l = fields.length | |
| for (let i = 0; i < l - 1; i++) { | |
| const key = fields[i] | |
| if (!obj[key]) { | |
| obj[key] = {} | |
| } | |
| obj = obj[key] | |
| } | |
| obj[fields[l - 1]] = value | |
| } | |
| exports.get = function (target, path) { | |
| const fields = path.split('.') | |
| let obj = target | |
| const l = fields.length | |
| for (let i = 0; i < l - 1; i++) { | |
| const key = fields[i] | |
| if (!obj[key]) { | |
| return undefined | |
| } | |
| obj = obj[key] | |
| } | |
| return obj[fields[l - 1]] | |
| } | |
| exports.unset = function (target, path) { | |
| const fields = path.split('.') | |
| let obj = target | |
| const l = fields.length | |
| const objs = [] | |
| for (let i = 0; i < l - 1; i++) { | |
| const key = fields[i] | |
| if (!obj[key]) { | |
| return | |
| } | |
| objs.unshift({ parent: obj, key, value: obj[key] }) | |
| obj = obj[key] | |
| } | |
| delete obj[fields[l - 1]] | |
| // Clear empty objects | |
| for (const { parent, key, value } of objs) { | |
| if (!Object.keys(value).length) { | |
| delete parent[key] | |
| } | |
| } | |
| } | |