Skip to content

Commit c9b54af

Browse files
committed
Add jsonpointer.compile(pointer) support
1 parent cabb37d commit c9b54af

File tree

2 files changed

+26
-0
lines changed

2 files changed

+26
-0
lines changed

jsonpointer.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,11 @@ var compilePointer = function (pointer) {
6565
if (!(pointer instanceof Array)) {
6666
pointer = pointer.split('/')
6767
if (pointer.shift() !== '') throw new Error('Invalid JSON pointer.')
68+
} else {
69+
// Clone the pointer array
70+
var newPointer = []
71+
for (var i = 0; i < pointer.length; i++) newPointer[i] = pointer[i]
72+
pointer = newPointer
6873
}
6974

7075
return pointer
@@ -94,5 +99,18 @@ var set = function (obj, pointer, value) {
9499
return traverse(obj, pointer, value)
95100
}
96101

102+
var compile = function (pointer) {
103+
var compiled = compilePointer(pointer)
104+
return {
105+
get: function (object) {
106+
return get(object, compiled)
107+
},
108+
set: function (object, value) {
109+
return set(object, compiled, value)
110+
}
111+
}
112+
}
113+
97114
exports.get = get
98115
exports.set = set
116+
exports.compile = compile

test.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,4 +105,12 @@ assert.equal(jsonpointer.get(example, '/k\'l'), 6)
105105
assert.equal(jsonpointer.get(example, '/ '), 7)
106106
assert.equal(jsonpointer.get(example, '/m~0n'), 8)
107107

108+
// jsonpointer.compile(path)
109+
var a = {foo: 'bar'}
110+
var pointer = jsonpointer.compile('/foo')
111+
assert.equal(pointer.get(a), 'bar')
112+
assert.equal(pointer.set(a, 'test'), 'bar')
113+
assert.equal(pointer.get(a), 'test')
114+
assert.deepEqual(a, {foo: 'test'})
115+
108116
console.log('All tests pass.')

0 commit comments

Comments
 (0)