react / wstein / node_modules / jest-cli / node_modules / jsdom / node_modules / request / node_modules / har-validator / node_modules / is-my-json-valid / node_modules / jsonpointer / jsonpointer.js
81159 viewsvar console = require("console");12var untilde = function(str) {3return str.replace(/~./g, function(m) {4switch (m) {5case "~0":6return "~";7case "~1":8return "/";9}10throw("Invalid tilde escape: " + m);11});12}1314var traverse = function(obj, pointer, value) {15// assert(isArray(pointer))16var part = untilde(pointer.shift());17if(typeof obj[part] === "undefined") {18throw("Value for pointer '" + pointer + "' not found.");19return;20}21if(pointer.length !== 0) { // keep traversin!22return traverse(obj[part], pointer, value);23}24// we're done25if(typeof value === "undefined") {26// just reading27return obj[part];28}29// set new value, return old value30var old_value = obj[part];31if(value === null) {32delete obj[part];33} else {34obj[part] = value;35}36return old_value;37}3839var validate_input = function(obj, pointer) {40if(typeof obj !== "object") {41throw("Invalid input object.");42}4344if(pointer === "") {45return [];46}4748if(!pointer) {49throw("Invalid JSON pointer.");50}5152pointer = pointer.split("/");53var first = pointer.shift();54if (first !== "") {55throw("Invalid JSON pointer.");56}5758return pointer;59}6061var get = function(obj, pointer) {62pointer = validate_input(obj, pointer);63if (pointer.length === 0) {64return obj;65}66return traverse(obj, pointer);67}6869var set = function(obj, pointer, value) {70pointer = validate_input(obj, pointer);71if (pointer.length === 0) {72throw("Invalid JSON pointer for set.")73}74return traverse(obj, pointer, value);75}7677exports.get = get78exports.set = set798081