get-wild
Version:
Pluck nested properties from an object with support for wildcards
2 lines (1 loc) • 1.55 kB
JavaScript
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).GetWild={})}(this,(function(e){"use strict";const t=/(?:(?:\[(?:(?:(["'])((?:\\.|(?:(?!\1).))*)\1)|([-+]?\d+))\])|(?:(?:^|(?:(?!^)\.))([^\s"'\`\[\].\\]+))|(.))/g,n=/\\(.)/g,r=e=>{const r=[];for(const{index:s,1:l,2:o,3:i,4:f}of e.matchAll(t)){let t;if(f)t=f;else if(i)t=+i;else{if(!l)throw new SyntaxError(`Invalid step @ ${s}: ${JSON.stringify(e)}`);t=o.replace(n,((e,t)=>t===l?l:e))}r.push(t)}return r},{isArray:s}=Array,{defineProperty:l,values:o}=Object,i=Symbol(),f=Symbol(),a=(e={})=>{const{collect:t=o,default:n,flatMap:a="*",map:p="**",parser:c=r,split:u=c}=e,d=!1===a?f:a,y=!1===p?i:p,g="string"==typeof u?e=>e.split(u):u,b=(e,...n)=>s(e)?e:t(e,...n);return l((function e(t,r,...l){const o=l.length?l[0]:n,i=e=>void 0===e?o:e;let f;if(s(r))f=r;else{const e=null===r?"null":typeof r;if("string"===e)f=g(r);else{if("number"!==e&&"symbol"!==e)throw new TypeError(`Invalid path: expected a string, array, number, or symbol, got: ${e}`);f=[r]}}const a=f.length-1;for(let n=0;n<=a;++n){if(!t)return o;const r=f[n],s=r===d;if(s||r===y){const r=b(t);let l;if(n===a)l=i;else{const t=f.slice(n+1);l=n=>e(n,t,o)}return s?r.flatMap(l):r.map(l)}if(Number.isInteger(r)){const e=b(t,r);t=e[r<0?e.length+r:r]}else t=t[r]}return i(t)}),"parse",{value:g})},p=a();e.get=p,e.getter=a,e.parse=r,e.parser=r,e.split=r,Object.defineProperty(e,"__esModule",{value:!0})}));