@stryke/json
Version:
A package containing JSON parsing/stringify utilities used by Storm Software.
55 lines (54 loc) • 1.66 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.escapePointerSegment = escapePointerSegment;
exports.formatJsonPointer = formatJsonPointer;
exports.isRoot = exports.isInteger = void 0;
exports.isValidIndex = isValidIndex;
exports.parent = parent;
exports.parseJsonPointer = parseJsonPointer;
exports.unescapePointerSegment = unescapePointerSegment;
var _isNumber = require("@stryke/type-checks/is-number");
var _isString = require("@stryke/type-checks/is-string");
const s = /~1/g,
u = /~0/g,
c = /~/g,
l = /\//g;
function escapePointerSegment(r) {
return !r.includes("/") && !r.includes("~") ? r : r.replace(c, "~0").replace(l, "~1");
}
function unescapePointerSegment(r) {
return r.includes("~") ? r.replace(s, "/").replace(u, "~") : r;
}
function parseJsonPointer(r) {
return r ? r.slice(1).split("/").map(n => unescapePointerSegment(n)) : [];
}
function formatJsonPointer(r) {
return isRoot(r) ? "" : `/${r.map(n => escapePointerSegment(String(n))).join("/")}`;
}
const isRoot = r => (0, _isString.isString)(r) ? r === "" : (0, _isNumber.isNumber)(r) ? r === 0 : Array.isArray(r) && r.length === 0;
exports.isRoot = isRoot;
function parent(r) {
if (r.length === 0) throw new Error("NO_PARENT");
return r.slice(0, -1);
}
function isValidIndex(r) {
if ((0, _isNumber.isNumber)(r)) return !0;
const n = Number.parseInt(r, 10);
return String(n) === r && n >= 0;
}
const isInteger = r => {
const n = r.length;
let t = 0,
e;
for (; t < n;) {
if (e = r.codePointAt(t), e >= 48 && e <= 57) {
t++;
continue;
}
return !1;
}
return !0;
};
exports.isInteger = isInteger;