You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
34 lines
585 B
JavaScript
34 lines
585 B
JavaScript
10 months ago
|
'use strict';
|
||
|
|
||
|
const specialProperties = require('../specialProperties');
|
||
|
|
||
|
|
||
|
module.exports = function setDottedPath(obj, path, val) {
|
||
|
if (path.indexOf('.') === -1) {
|
||
|
if (specialProperties.has(path)) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
obj[path] = val;
|
||
|
return;
|
||
|
}
|
||
|
const parts = path.split('.');
|
||
|
|
||
|
const last = parts.pop();
|
||
|
let cur = obj;
|
||
|
for (const part of parts) {
|
||
|
if (specialProperties.has(part)) {
|
||
|
continue;
|
||
|
}
|
||
|
if (cur[part] == null) {
|
||
|
cur[part] = {};
|
||
|
}
|
||
|
|
||
|
cur = cur[part];
|
||
|
}
|
||
|
|
||
|
if (!specialProperties.has(last)) {
|
||
|
cur[last] = val;
|
||
|
}
|
||
|
};
|