mirror of https://github.com/ghostfolio/ghostfolio
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.5 KiB
47 lines
1.5 KiB
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.findByPointer = void 0;
|
|
const hasOwnProperty_1 = require("@jsonjoy.com/util/lib/hasOwnProperty");
|
|
const util_1 = require("../util");
|
|
const { isArray } = Array;
|
|
const findByPointer = (pointer, val) => {
|
|
if (!pointer)
|
|
return { val };
|
|
let obj;
|
|
let key;
|
|
let indexOfSlash = 0;
|
|
pointer = pointer.substr(1);
|
|
while (pointer) {
|
|
indexOfSlash = pointer.indexOf('/');
|
|
let component;
|
|
if (indexOfSlash > -1) {
|
|
component = pointer.substring(0, indexOfSlash);
|
|
pointer = pointer.substring(indexOfSlash + 1);
|
|
}
|
|
else {
|
|
component = pointer;
|
|
pointer = '';
|
|
}
|
|
key = (0, util_1.unescapeComponent)(component);
|
|
obj = val;
|
|
if (isArray(obj)) {
|
|
if (key === '-')
|
|
key = obj.length;
|
|
else {
|
|
if (!(0, util_1.isValidIndex)(key))
|
|
throw new Error('INVALID_INDEX');
|
|
key = Number(key);
|
|
if (key < 0)
|
|
throw new Error('INVALID_INDEX');
|
|
}
|
|
val = (0, hasOwnProperty_1.hasOwnProperty)(obj, String(key)) ? obj[key] : undefined;
|
|
}
|
|
else if (typeof obj === 'object' && !!obj) {
|
|
val = (0, hasOwnProperty_1.hasOwnProperty)(obj, String(key)) ? obj[key] : undefined;
|
|
}
|
|
else
|
|
throw new Error('NOT_FOUND');
|
|
}
|
|
return { val, obj, key };
|
|
};
|
|
exports.findByPointer = findByPointer;
|
|
|