UNPKG

@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
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); } ;