@trap_stevo/legendarybuilderproreact-ui
Version:
The legendary UI & utility API that makes your application a legendary application. ~ Created by Steven Compton
155 lines • 4.75 kB
JavaScript
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
import _defineProperty from "@babel/runtime/helpers/defineProperty";
import _typeof from "@babel/runtime/helpers/typeof";
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
var anObject = function anObject(x) {
return x !== null && _typeof(x) === "object";
};
var clone = function clone(x) {
return Array.isArray(x) ? x.slice() : _objectSpread({}, x);
};
export function GetDataAtSegment(container, seg) {
if (!anObject(container)) {
return undefined;
}
return container[seg.key];
}
;
export function SetDataAtSegment(container, seg, val) {
if (seg.type === "array") {
var arr = Array.isArray(container) ? container.slice() : [];
arr[seg.key] = val;
return arr;
}
if (Array.isArray(container)) {
var _arr = container.slice();
_arr[seg.key] = val;
return _arr;
}
return _objectSpread(_objectSpread({}, container), {}, _defineProperty({}, seg.key, val));
}
;
export function ParsePath(path) {
if (Array.isArray(path)) {
return path.slice();
}
var s = String(path);
var out = [];
var buf = "";
var i = 0;
var pushBuf = function pushBuf() {
if (buf.length) {
out.push({
key: buf,
type: "object"
});
buf = "";
}
};
while (i < s.length) {
var ch = s[i];
if (ch === ".") {
pushBuf();
i++;
continue;
}
if (ch === "[") {
pushBuf();
i++;
var raw = "";
var quoted = false;
if (s[i] === '"' || s[i] === "'") {
quoted = true;
var quote = s[i++];
while (i < s.length && s[i] !== quote) {
if (s[i] === "\\") i++;
raw += s[i++];
}
i++;
} else {
while (i < s.length && s[i] !== "]") {
raw += s[i++];
}
}
if (s[i] === "]") {
i++;
}
if (!quoted && /^-?\d+$/.test(raw.trim())) {
out.push({
key: Number(raw.trim()),
type: "array"
});
} else {
out.push({
key: raw.trim(),
type: "object"
});
}
continue;
}
buf += ch;
i++;
}
pushBuf();
return out;
}
;
export function GetDataAtPath(obj, path) {
var segments = ParsePath(path);
var current = obj;
for (var i = 0; i < segments.length; i++) {
current = GetDataAtSegment(current, segments[i]);
if (current === undefined) {
return undefined;
}
}
return current;
}
;
export function DeleteDataAtPath(obj, path) {
if (!anObject(obj)) {
return obj;
}
var segs = ParsePath(path);
if (segs.length === 0) {
return obj;
}
var descend = function descend(container, i) {
var seg = segs[i];
var last = i === segs.length - 1;
if (!anObject(container)) {
return container;
}
var base = clone(container);
if (last) {
if (seg.type === "array" && Array.isArray(base)) {
var idx = seg.key;
if (idx >= 0 && idx < base.length) {
var out = base.slice();
out.splice(idx, 1);
return out;
}
return base;
} else {
if (Object.prototype.hasOwnProperty.call(base, seg.key)) {
var _seg$key = seg.key,
_ = base[_seg$key],
rest = _objectWithoutProperties(base, [_seg$key].map(_toPropertyKey));
return rest;
}
return base;
}
}
var child = GetDataAtSegment(base, seg);
if (!anObject(child)) {
return base;
}
var updatedChild = descend(child, i + 1);
return SetDataAtSegment(base, seg, updatedChild);
};
return descend(obj, 0);
}
;