@stryke/json
Version:
A package containing JSON parsing/stringify utilities used by Storm Software.
39 lines (38 loc) • 1.29 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.isObjectReference = exports.isArrayReference = exports.isArrayEnd = exports.find = void 0;
var _isSetObject = require("@stryke/type-checks/is-set-object");
var _isString = require("@stryke/type-checks/is-string");
const {
isArray: i
} = Array;
const find = (e, t) => {
const f = t.length;
if (!f) return {
val: e
};
let r, n;
for (let o = 0; o < f; o++) if (r = e, n = t[o], i(r)) {
const y = r.length;
if (n === "-") n = y;else if ((0, _isString.isString)(n)) {
const c = Math.trunc(n);
if (String(c) !== n) throw new Error("INVALID_INDEX");
if (n = c, n < 0) throw new Error("INVALID_INDEX");
}
n && (e = r[n]);
} else if ((0, _isSetObject.isSetObject)(r)) e = n in r ? r[n] : void 0;else throw new Error("NOT_FOUND");
return {
val: e,
obj: r,
key: n
};
},
isArrayReference = e => i(e.obj) && typeof e.key == "number",
isArrayEnd = e => e.obj.length === e.key,
isObjectReference = e => typeof e.obj == "object" && typeof e.key == "string";
exports.isObjectReference = isObjectReference;
exports.isArrayEnd = isArrayEnd;
exports.isArrayReference = isArrayReference;
exports.find = find;