https://github.com/danielroe/unplugin-purge-polyfills
A tiny plugin to replace package imports with better native code.
https://github.com/danielroe/unplugin-purge-polyfills
Last synced: about 1 year ago
JSON representation
A tiny plugin to replace package imports with better native code.
- Host: GitHub
- URL: https://github.com/danielroe/unplugin-purge-polyfills
- Owner: danielroe
- License: mit
- Created: 2024-06-27T08:00:31.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2025-03-31T10:06:04.000Z (about 1 year ago)
- Last Synced: 2025-03-31T20:56:59.517Z (about 1 year ago)
- Language: TypeScript
- Homepage:
- Size: 686 KB
- Stars: 212
- Watchers: 5
- Forks: 2
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# unplugin-purge-polyfills
[![npm version][npm-version-src]][npm-version-href]
[![npm downloads][npm-downloads-src]][npm-downloads-href]
[![Github Actions][github-actions-src]][github-actions-href]
[![Codecov][codecov-src]][codecov-href]
> A tiny plugin to replace package imports with better native code.
This package is an [unplugin](https://unplugin.unjs.io/) which provides support for a wide range of bundlers.
At build time, it removes usage of these packages, in favour of directly using native replacements:
- is-number
- is-plain-object
- is-primitve
- is-regexp
- is-travis
- is-npm
- clone-regexp
- split-lines
- is-windows
- is-whitespace
- is-string
- is-odd
- is-even
- object.entries
- date
- array.of
- number.isnan
- array.prototype.findindex
- array.from
- object-is
- array-map
- is-nan
- function-bind
- regexp.prototype.flags
- array.prototype.find
- object-keys
- define-properties
- left-pad
- pad-left
- filter-array
- array-every
- index-of
- last-index-of
- abort-controller
- array-flatten
- array-includes
- has-own
- has-proto
- has-symbols
- object-assign
- call-bind
- es-get-iterator
- es-set-tostringtag
- is-array-buffer
- is-boolean-object
- is-date-object
- is-negative-zero
- is-number-object
- is-primitive
It is under active development.
## Roadmap
- [ ] investigate tighter integration with https://github.com/SukkaW/nolyfill or https://github.com/es-tooling/module-replacements
- [ ] implement publish-on-demand infrastructure to apply this plugin to published packages
## Usage
Install package:
```sh
# npm
npm install --save-dev unplugin-purge-polyfills
```
```js
import { purgePolyfills } from 'unplugin-purge-polyfills'
// rollup.config.js
export default {
plugins: [
purgePolyfills.rollup({ /* options */ }),
],
}
```
## Configuration
By default this unplugin ships with a wide range of polyfills to get rid of, but you can disable these and add your own by providing a `replacements` object:
```js
// rollup.config.js
export default {
plugins: [
purgePolyfills.rollup({
replacements: {
'is-string': false, /** do not provide this polyfill */
/**
* provide a custom polyfill for this import in your codebase
* make sure this is correct for every usage
*/
'node.extend': {
default: '(obj1, obj2) => { ...obj2, ...obj1 }'
}
}
}),
],
}
```
The following polyfills are not purged, so you might want to add your own code to do so:
- node.extend
- extend-shallow
- xtend
- defaults
## Projects using or experimenting with `unplugin-purge-polyfill`
- [nuxt/cli](https://github.com/nuxt/cli/pull/439)
- [unjs/jiti](https://github.com/unjs/jiti/pull/261)
## Credits
Thanks to https://github.com/es-tooling/module-replacements and https://github.com/esm-dev/esm.sh for polyfill data. ❤️
Inspiration from https://github.com/SukkaW/nolyfill. ❤️
## 💻 Development
- Clone this repository
- Enable [Corepack](https://github.com/nodejs/corepack) using `corepack enable`
- Install dependencies using `pnpm install`
- Run interactive tests using `pnpm dev`
## License
Made with ❤️
Published under [MIT License](./LICENCE).
[npm-version-src]: https://img.shields.io/npm/v/unplugin-purge-polyfills?style=flat-square
[npm-version-href]: https://npmjs.com/package/unplugin-purge-polyfills
[npm-downloads-src]: https://img.shields.io/npm/dm/unplugin-purge-polyfills?style=flat-square
[npm-downloads-href]: https://npm.chart.dev/unplugin-purge-polyfills
[github-actions-src]: https://img.shields.io/github/actions/workflow/status/danielroe/unplugin-purge-polyfills/ci.yml?branch=main&style=flat-square
[github-actions-href]: https://github.com/danielroe/unplugin-purge-polyfills/actions/workflows/ci.yml
[codecov-src]: https://img.shields.io/codecov/c/gh/danielroe/unplugin-purge-polyfills/main?style=flat-square
[codecov-href]: https://codecov.io/gh/danielroe/unplugin-purge-polyfills