mirror of
https://github.com/marko-js/marko.git
synced 2025-12-08 19:26:05 +00:00
Improved walking of Literal nodes
This commit is contained in:
parent
c4035fd49f
commit
c5f36b0576
@ -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;
|
||||
Loading…
x
Reference in New Issue
Block a user