docs: function leaf(node, layers, payload, feat, handler) {
  	var ret = {};
  
  	if (handler && typeof handler != "function") {
  		ret.err = "handler should be a function";
  		return ret; // error
  	}
  
  	// remove empty layer
  	var tmp_next_layer_name = layers[0];
  	if (tmp_next_layer_name) {
  		tmp_next_layer_name = tmp_next_layer_name.replace(/^:+/, "");
  	}
  	while (tmp_next_layer_name === "") {
  		layers.shift();
  
  		tmp_next_layer_name = layers[0];
  		if (tmp_next_layer_name) {
  			tmp_next_layer_name = tmp_next_layer_name.replace(/^:+/, "");
  		}
  	}
  
  	// Entered Node
  
  	if (layers.length === 0) {
  		// leaf node
  
  		if (handler) {
  			// .set
  			if (typeof node.handler === "undefined") {
  				node.handler = {};
  			}
  			node.handler[feat] = handler;
  		} else {
  			// .get
  			if (feat === "all") {
  				if (typeof node.handler === "undefined") {
  					ret.err = "not found";
  				}
  			} else {
  				if (!node.handler || typeof node.handler[feat] != "function") {
  					ret.err = "not found";
  					if (node.handler && node.handler["default"]) {
  						feat = "default";
  					}
  				}
  			}
  		}
  
  		if (node.handler) {
  			// has handler for current path
  			if (feat === "all") {
  				ret.handler = node.handler;
  			} else {
  				ret.handler = node.handler[feat];
  			}
  		}
  
  		ret.payload = payload;
  
  	} else {
  		// recurring
  		let next_layer = layers.shift();
  
  		if (next_layer.match(/^:/) && handler) {
  			// PLACEHOLDER in .set
  			next_layer = next_layer.replace(/^:+/, "");
  			node["var_name"] = next_layer;
  			next_layer = "PLACEHOLDER";
  			//~ console.log('Set PLACEHOLDER');
  		}
  
  		if (node.hasOwnProperty(next_layer)) {
  			ret = leaf(node[next_layer], layers, payload, feat, handler); 
  		} else {
  			//~ console.log('No Path Matched!');
  			if (handler) {
  				// .set
  				//~ console.log('Create new Node');
  				node[next_layer] = {};
  				ret = leaf(node[next_layer], layers, payload, feat, handler);
  			} else if (node.hasOwnProperty("PLACEHOLDER")) {
  				// .get and set value to placeholder var
  				payload[node.var_name] = next_layer;
  				next_layer = "PLACEHOLDER";
  				//~ console.log('Get PLACEHOLDER');
  				ret = leaf(node[next_layer], layers, payload, feat, handler);
  			} else {
  				ret.err = "not found";
  			}
  		}
  
  		
  		if (!ret.handler) {
  			// .get and fallback
  			// console.log('FALLBACK!');
  			if (node.handler) {
  				ret.handler = node.handler[feat] ? node.handler[feat] : node.handler["default"];
  			} else if (node.PLACEHOLDER && node.PLACEHOLDER.handler) {
  				ret.handler = node.PLACEHOLDER.handler[feat] ? node.PLACEHOLDER.handler[feat] : node.PLACEHOLDER.handler["default"];
  			}
  
  			ret.payload = ret.payload ? ret.payload : payload ;
  		}
  	}
  
  	// console.log(ret);
  	return ret;
  }