Skip to content

Instantly share code, notes, and snippets.

@lencioni
Last active February 17, 2020 14:01
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lencioni/6bccd9e5071271da4175776de29f25d0 to your computer and use it in GitHub Desktop.
Save lencioni/6bccd9e5071271da4175776de29f25d0 to your computer and use it in GitHub Desktop.
Webpack module replacements for shims/polyfill packages
module.exports = function arrayIncludes(arr, search, fromIndex) {
return arr.includes(search, fromIndex);
};
module.exports = function arrayPrototypeFlat(arr, depth) {
return arr.flat(depth);
};
module.exports = function arrayProtoptypeFlatmap(arr, cb) {
return arr.flatMap(cb);
};
module.exports = Function.prototype.bind;
module.exports = function functionPrototypeName(fn) {
return fn.name;
};
module.exports = Function.call.bind(Object.prototype.hasOwnProperty);
module.exports = Array.isArray;
/**
* https://twitter.com/lencioni/status/1199719613509980160
* https://webpack.js.org/plugins/normal-module-replacement-plugin/
*
* Usage:
*
* plugins: [
* ...moduleReplacementsPlugins().map(
* ([regex, filePath]) => new webpack.NormalModuleReplacementPlugin(regex, filePath),
* ),
* ]
*/
function moduleReplacementsPlugins() {
// Avoid unnecessary shims packages nested in our dependencies.
const moduleReplacements = [
[/^object[-.]assign$/, require.resolve('./object.assign')],
[/^array-includes$/, require.resolve('./array.includes')],
[/^array\.prototype\.flat(ten)?$/, require.resolve('./array.prototype.flat')],
[/^array\.prototype\.flatmap$/, require.resolve('./array.prototype.flatmap')],
[/^function-bind$/, require.resolve('./function-bind')],
[/^function\.prototype\.name$/, require.resolve('./function.prototype.name')],
[/^has$/, require.resolve('./has')],
[/^is-?array$/, require.resolve('./isarray')],
[/^promise\.prototype\.finally$/, require.resolve('./promise.prototype.finally')],
[/^object-keys$/, require.resolve('./object.keys')],
[/^object\.entries$/, require.resolve('./object.entries')],
[/^object\.values$/, require.resolve('./object.values')],
[/^object\.fromentries$/, require.resolve('./object.fromentries')],
[/^object\.getownpropertydescriptors$/, require.resolve('./object.getownpropertydescriptors')],
[/^raf$/, require.resolve('./raf')],
[/^regexp\.prototype\.flags$/, require.resolve('./regexp.prototype.flags')],
[/^string\.prototype\.matchall$/, require.resolve('./string.prototype.matchall')],
[/^string\.prototype\.padstart$/, require.resolve('./string.prototype.padstart')],
[/^string\.prototype\.padend$/, require.resolve('./string.prototype.padend')],
[/^string\.prototype\.trim$/, require.resolve('./string.prototype.trim')],
[/^symbol\.prototype\.description$/, require.resolve('./symbol.prototype.description')],
];
return moduleReplacements;
}
module.exports = moduleReplacementsPlugins;
module.exports = Object.assign;
module.exports = Object.entries;
module.exports = Object.fromEntries;
module.exports = Object.getOwnPropertyDescriptors;
module.exports = Object.keys;
module.exports = Object.values;
module.exports = function promisePrototypeFinally(promise, cb) {
return promise.finally(cb);
};
module.exports = window.requestAnimationFrame.bind(window);
module.exports.cancel = window.cancelAnimationFrame.bind(window);
module.exports.polyfill = function polyfill() {};
module.exports = function regexpPrototypeFlags(regexp) {
return regexp.flags;
};
module.exports = function stringPrototypeMatchall(str, regex) {
return String(str).matchAll(regex);
};
module.exports = function stringPrototypePadEnd(x, length, padStr) {
return String(x).padEnd(length, padStr);
};
module.exports = function stringPrototypePadStart(x, length, padStr) {
return String(x).padStart(length, padStr);
};
module.exports = function stringPrototypeTrim(x) {
return String(x).trim();
};
module.exports = function symbolPrototypeDescription(symbol) {
return symbol.description;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment