]> gerrit.simantics Code Review - simantics/district.git/blob - org.simantics.maps.server/node/node-v4.8.0-win-x64/node_modules/npm/node_modules/request/node_modules/har-validator/node_modules/is-my-json-valid/node_modules/jsonpointer/jsonpointer.js
Adding integrated tile server
[simantics/district.git] / org.simantics.maps.server / node / node-v4.8.0-win-x64 / node_modules / npm / node_modules / request / node_modules / har-validator / node_modules / is-my-json-valid / node_modules / jsonpointer / jsonpointer.js
1 var untilde = function(str) {
2   return str.replace(/~./g, function(m) {
3     switch (m) {
4       case "~0":
5         return "~";
6       case "~1":
7         return "/";
8     }
9     throw new Error("Invalid tilde escape: " + m);
10   });
11 }
12
13 var traverse = function(obj, pointer, value) {
14   // assert(isArray(pointer))
15   var part = untilde(pointer.shift());
16   if(!obj.hasOwnProperty(part)) {
17     return null;
18   }
19   if(pointer.length !== 0) { // keep traversin!
20     return traverse(obj[part], pointer, value);
21   }
22   // we're done
23   if(typeof value === "undefined") {
24     // just reading
25     return obj[part];
26   }
27   // set new value, return old value
28   var old_value = obj[part];
29   if(value === null) {
30     delete obj[part];
31   } else {
32     obj[part] = value;
33   }
34   return old_value;
35 }
36
37 var validate_input = function(obj, pointer) {
38   if(typeof obj !== "object") {
39     throw new Error("Invalid input object.");
40   }
41
42   if(pointer === "") {
43     return [];
44   }
45
46   if(!pointer) {
47     throw new Error("Invalid JSON pointer.");
48   }
49
50   pointer = pointer.split("/");
51   var first = pointer.shift();
52   if (first !== "") {
53     throw new Error("Invalid JSON pointer.");
54   }
55
56   return pointer;
57 }
58
59 var get = function(obj, pointer) {
60   pointer = validate_input(obj, pointer);
61   if (pointer.length === 0) {
62     return obj;
63   }
64   return traverse(obj, pointer);
65 }
66
67 var set = function(obj, pointer, value) {
68   pointer = validate_input(obj, pointer);
69   if (pointer.length === 0) {
70     throw new Error("Invalid JSON pointer for set.")
71   }
72   return traverse(obj, pointer, value);
73 }
74
75 exports.get = get
76 exports.set = set