Improved walking of Literal nodes

This commit is contained in:
Patrick Steele-Idem 2016-10-25 15:29:03 -06:00
parent c4035fd49f
commit c5f36b0576

View File

@ -4,6 +4,37 @@ var Node = require('./Node');
var isArray = Array.isArray;
const isValidJavaScriptVarName = require('../util/isValidJavaScriptVarName');
function walkValue(value, walker) {
if (!value) {
return value;
} else if (value instanceof Node) {
return walker.walk(value);
} else if (isArray(value)) {
let array = value;
for (let i=0; i<array.length; i++) {
let el = array[i];
array[i] = walkValue(el, walker);
}
return array;
} else if (typeof value === 'object') {
let object = value;
let keys = Object.keys(object);
for (let i=0; i<keys.length; i++) {
let key = keys[i];
let oldValue = object[key];
let newValue = walkValue(oldValue, walker);
if (newValue !== oldValue) {
object[key] = newValue;
}
}
return object;
} else {
return value;
}
}
class Literal extends Node {
constructor(def) {
super('Literal');
@ -81,6 +112,10 @@ class Literal extends Node {
return result + ' }';
}
}
walk(walker) {
walkValue(this.value, walker);
}
}
module.exports = Literal;