# add dist

This commit is contained in:
Mario Romano
2016-04-21 11:56:31 +01:00
parent 5914688467
commit 07807e7bc3
13499 changed files with 1808930 additions and 5 deletions

View File

@@ -0,0 +1,32 @@
# JSON Pointer for nodejs
This is an implementation of [JSON Pointer](http://tools.ietf.org/html/draft-ietf-appsawg-json-pointer-08).
## Usage
var jsonpointer = require("jsonpointer");
var obj = { foo: 1, bar: { baz: 2}, qux: [3, 4, 5]};
var one = jsonpointer.get(obj, "/foo");
var two = jsonpointer.get(obj, "/bar/baz");
var three = jsonpointer.get(obj, "/qux/0");
var four = jsonpointer.get(obj, "/qux/1");
var five = jsonpointer.get(obj, "/qux/2");
var notfound = jsonpointer.get(obj, "/quo"); // returns null
jsonpointer.set(obj, "/foo", 6); // obj.foo = 6;
## Testing
$ node test.js
All tests pass.
$
[![Build Status](https://travis-ci.org/janl/node-jsonpointer.png?branch=master)](https://travis-ci.org/janl/node-jsonpointer)
## Author
(c) 2011 Jan Lehnardt <jan@apache.org>
## License
MIT License.

View File

@@ -0,0 +1,76 @@
var untilde = function(str) {
return str.replace(/~./g, function(m) {
switch (m) {
case "~0":
return "~";
case "~1":
return "/";
}
throw new Error("Invalid tilde escape: " + m);
});
}
var traverse = function(obj, pointer, value) {
// assert(isArray(pointer))
var part = untilde(pointer.shift());
if(!obj.hasOwnProperty(part)) {
return null;
}
if(pointer.length !== 0) { // keep traversin!
return traverse(obj[part], pointer, value);
}
// we're done
if(typeof value === "undefined") {
// just reading
return obj[part];
}
// set new value, return old value
var old_value = obj[part];
if(value === null) {
delete obj[part];
} else {
obj[part] = value;
}
return old_value;
}
var validate_input = function(obj, pointer) {
if(typeof obj !== "object") {
throw new Error("Invalid input object.");
}
if(pointer === "") {
return [];
}
if(!pointer) {
throw new Error("Invalid JSON pointer.");
}
pointer = pointer.split("/");
var first = pointer.shift();
if (first !== "") {
throw new Error("Invalid JSON pointer.");
}
return pointer;
}
var get = function(obj, pointer) {
pointer = validate_input(obj, pointer);
if (pointer.length === 0) {
return obj;
}
return traverse(obj, pointer);
}
var set = function(obj, pointer, value) {
pointer = validate_input(obj, pointer);
if (pointer.length === 0) {
throw new Error("Invalid JSON pointer for set.")
}
return traverse(obj, pointer, value);
}
exports.get = get
exports.set = set

View File

@@ -0,0 +1,91 @@
{
"_args": [
[
"jsonpointer@2.0.0",
"/Users/mromano/dev/dev-platform-webcomponents/ng2-components/ng2-alfresco-documentslist/node_modules/is-my-json-valid"
]
],
"_from": "jsonpointer@2.0.0",
"_id": "jsonpointer@2.0.0",
"_inCache": true,
"_installable": true,
"_location": "/jsonpointer",
"_nodeVersion": "0.10.36",
"_npmUser": {
"email": "marc.brookman@gmail.com",
"name": "marcbachmann"
},
"_npmVersion": "2.10.1",
"_phantomChildren": {},
"_requested": {
"name": "jsonpointer",
"raw": "jsonpointer@2.0.0",
"rawSpec": "2.0.0",
"scope": null,
"spec": "2.0.0",
"type": "version"
},
"_requiredBy": [
"/is-my-json-valid"
],
"_resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-2.0.0.tgz",
"_shasum": "3af1dd20fe85463910d469a385e33017d2a030d9",
"_shrinkwrap": null,
"_spec": "jsonpointer@2.0.0",
"_where": "/Users/mromano/dev/dev-platform-webcomponents/ng2-components/ng2-alfresco-documentslist/node_modules/is-my-json-valid",
"author": {
"email": "jan@apache.org",
"name": "Jan Lehnardt"
},
"bugs": {
"url": "http://github.com/janl/node-jsonpointer/issues"
},
"contributors": [
{
"email": "joe-github@cursive.net",
"name": "Joe Hildebrand"
}
],
"dependencies": {},
"description": "Simple JSON Addressing.",
"devDependencies": {},
"directories": {},
"dist": {
"shasum": "3af1dd20fe85463910d469a385e33017d2a030d9",
"tarball": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-2.0.0.tgz"
},
"engines": {
"node": ">=0.6.0"
},
"gitHead": "26ea4a5c0fcb6d9a2e87f733403791dd05637af8",
"homepage": "https://github.com/janl/node-jsonpointer#readme",
"license": "MIT",
"main": "./jsonpointer",
"maintainers": [
{
"email": "jan@apache.org",
"name": "jan"
},
{
"email": "marc.brookman@gmail.com",
"name": "marcbachmann"
}
],
"name": "jsonpointer",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git+ssh://git@github.com/janl/node-jsonpointer.git"
},
"scripts": {
"test": "node test.js"
},
"tags": [
"util",
"simple",
"util",
"utility"
],
"version": "2.0.0"
}

View File

@@ -0,0 +1,98 @@
var assert = require("assert");
var jsonpointer = require("./jsonpointer");
var obj = {
a: 1,
b: {
c: 2
},
d: {
e: [{a:3}, {b:4}, {c:5}]
}
};
assert.equal(jsonpointer.get(obj, "/a"), 1);
assert.equal(jsonpointer.get(obj, "/b/c"), 2);
assert.equal(jsonpointer.get(obj, "/d/e/0/a"), 3);
assert.equal(jsonpointer.get(obj, "/d/e/1/b"), 4);
assert.equal(jsonpointer.get(obj, "/d/e/2/c"), 5);
// set returns old value
assert.equal(jsonpointer.set(obj, "/a", 2), 1);
assert.equal(jsonpointer.set(obj, "/b/c", 3), 2);
assert.equal(jsonpointer.set(obj, "/d/e/0/a", 4), 3);
assert.equal(jsonpointer.set(obj, "/d/e/1/b", 5), 4);
assert.equal(jsonpointer.set(obj, "/d/e/2/c", 6), 5);
assert.equal(jsonpointer.get(obj, "/a"), 2);
assert.equal(jsonpointer.get(obj, "/b/c"), 3);
assert.equal(jsonpointer.get(obj, "/d/e/0/a"), 4);
assert.equal(jsonpointer.get(obj, "/d/e/1/b"), 5);
assert.equal(jsonpointer.get(obj, "/d/e/2/c"), 6);
assert.equal(jsonpointer.get(obj, ""), obj);
assert.throws(function(){ jsonpointer.get(obj, "a"); }, validateError);
assert.throws(function(){ jsonpointer.get(obj, "a/"); }, validateError);
function validateError(err) {
if ( (err instanceof Error) && /Invalid JSON pointer/.test(err.message) ) {
return true;
}
}
var complexKeys = {
"a/b": {
c: 1
},
d: {
"e/f": 2
},
"~1": 3,
"01": 4
}
assert.equal(jsonpointer.get(complexKeys, "/a~1b/c"), 1);
assert.equal(jsonpointer.get(complexKeys, "/d/e~1f"), 2);
assert.equal(jsonpointer.get(complexKeys, "/~01"), 3);
assert.equal(jsonpointer.get(complexKeys, "/01"), 4);
assert.equal(jsonpointer.get(complexKeys, "/a/b/c"), null);
assert.equal(jsonpointer.get(complexKeys, "/~1"), null);
// draft-ietf-appsawg-json-pointer-08 has special array rules
var ary = [ "zero", "one", "two" ];
assert.equal(jsonpointer.get(ary, "/01"), null);
//assert.equal(jsonpointer.set(ary, "/-", "three"), null);
//assert.equal(ary[3], "three");
// Examples from the draft:
var example = {
"foo": ["bar", "baz"],
"": 0,
"a/b": 1,
"c%d": 2,
"e^f": 3,
"g|h": 4,
"i\\j": 5,
"k\"l": 6,
" ": 7,
"m~n": 8
};
assert.equal(jsonpointer.get(example, ""), example);
var ans = jsonpointer.get(example, "/foo");
assert.equal(ans.length, 2);
assert.equal(ans[0], "bar");
assert.equal(ans[1], "baz");
assert.equal(jsonpointer.get(example, "/foo/0"), "bar");
assert.equal(jsonpointer.get(example, "/"), 0);
assert.equal(jsonpointer.get(example, "/a~1b"), 1);
assert.equal(jsonpointer.get(example, "/c%d"), 2);
assert.equal(jsonpointer.get(example, "/e^f"), 3);
assert.equal(jsonpointer.get(example, "/g|h"), 4);
assert.equal(jsonpointer.get(example, "/i\\j"), 5);
assert.equal(jsonpointer.get(example, "/k\"l"), 6);
assert.equal(jsonpointer.get(example, "/ "), 7);
assert.equal(jsonpointer.get(example, "/m~0n"), 8);
console.log("All tests pass.");