UNPKG

@stryke/json

Version:

A package containing JSON parsing/stringify utilities used by Storm Software.

55 lines (54 loc) 1.66 kB
"use strict"; 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;