get-wild
Version:
Pluck nested properties from an object with support for wildcards
2 lines (1 loc) • 1.66 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:o,1:l,2:s,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 @ ${o}: ${JSON.stringify(e)}`);t=s.replace(n,((e,t)=>t===l?l:e))}r.push(t)}return r},{isArray:o}=Array,{defineProperty:l,values:s}=Object,i=Symbol(),f=Symbol(),a=(e={})=>{const{collect:t=s,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)=>o(e)?e:t(e,...n);return l((function e(t,r,...l){const s=l.length?l[0]:n,i=e=>void 0===e?s:e;let f;if(o(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 s;const r=f[n],o=r===d;if(o||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,s)}return o?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(),c=(e,t)=>(n,...r)=>{const o=((e,t)=>"string"==typeof e?t.parse(e):e)(n,e),l=r.length?r[0]:t;return t=>e(t,o,l)},u=c(p);e.get=u,e.getter=(e={})=>c(a(e),e.default),Object.defineProperty(e,"__esModule",{value:!0})}));