Restore Native Prototypes To Their Full Glory
npm install @customcommander/macgyver
How it fits into your build or project is your own personal business but just know that it is an UMD module.
People or libraries monkey patching native prototypes with broken custom implementations that break other people's code.
Go to any website (with a decent browser), open the console and run this:
[1,2,3].reduce((tot, num) => tot + num, 0);
// 6 (Yay!)
Now find one using Prototype 1.6.0.2 (for instance) and run the same line:
[1,2,3].reduce((tot, num) => tot + num, 0);
// [1,2,3] (WTF?!)
If you know where to look you can immediately see the issue:
Array.prototype.reduce.toString();
// "function () {
// return this.length > 1 ? this : this[0];
// }"
Go to that same website using Prototype 1.6.0.2, drop MacGyver in the console and then run:
macgyver([1,2,3]).reduce((tot, num) => tot + num, 0);
// 6 (Yay!)
macgyver([1,2,3]).reduce.toString();
// "function reduce() { [native code] }"
Array.prototype.reduce.toString();
// "function () {
// return this.length > 1 ? this : this[0];
// }"
What MacGyver
did was to simply recreate your array using pristine native methods from a separate frame.
If you would rather not wrap your objects in some duct tape all the time, you can duct tape the current context permanently instead:
macgyver.ductTape();
Array.prototype.reduce.toString();
// "function reduce() { [native code] }"
MacGyver
only deals with arrays for now. If you need more from it just ask, or better: raise a pull request.