cride
Version:
Create isomorphic destructurables.
18 lines (16 loc) • 572 B
JavaScript
const isNumber = (s) => !Number.isNaN(Number(s));
const SUPPORTED_SYMBOLS = [Symbol.iterator, Symbol.asyncIterator];
const cride = (obj, arr) => new Proxy(obj, {
get(target, prop) {
if (typeof prop === "symbol" && SUPPORTED_SYMBOLS.includes(prop) && prop in arr) {
return arr[prop].bind(arr);
}
if (Object.prototype.hasOwnProperty.call(target, prop)) {
return Reflect.get(target, prop);
}
if (typeof prop === "string" && isNumber(prop) && Number(prop) < arr.length) {
return Reflect.get(arr, prop);
}
}
});
export { cride };