diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d7a9975..c584c56 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,6 +20,7 @@ jobs: node-version: ${{ matrix.node }} - run: npm install - run: npm test + - run: npm run test-esm - uses: coverallsapp/github-action@1.1.3 if: matrix.node == 18 with: diff --git a/.gitignore b/.gitignore index 66275fe..eec701f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ node_modules/ coverage/ -umd/ +dist/ .tern-port diff --git a/index.d.ts b/index.d.ts index 118f68b..fab37fd 100644 --- a/index.d.ts +++ b/index.d.ts @@ -131,4 +131,5 @@ declare namespace EventEmitter { export const EventEmitter: EventEmitterStatic; } -export = EventEmitter; +export { EventEmitter } +export default EventEmitter; diff --git a/index.mjs b/index.mjs new file mode 100644 index 0000000..89bb405 --- /dev/null +++ b/index.mjs @@ -0,0 +1,4 @@ +import EventEmitter from './index.js' + +export { EventEmitter } +export default EventEmitter diff --git a/package.json b/package.json index 726b6da..6549fdc 100644 --- a/package.json +++ b/package.json @@ -2,20 +2,29 @@ "name": "eventemitter3", "version": "4.0.7", "description": "EventEmitter3 focuses on performance while maintaining a Node.js AND browser compatible interface.", + "exports": { + ".": { + "import": "./index.mjs", + "require": "./index.js", + "types": "./index.d.ts" + }, + "./package.json": "./package.json" + }, "main": "index.js", - "typings": "index.d.ts", + "types": "index.d.ts", "scripts": { - "browserify": "rm -rf umd && mkdir umd && browserify index.js -s EventEmitter3 -o umd/eventemitter3.js", - "minify": "uglifyjs umd/eventemitter3.js --source-map -cm -o umd/eventemitter3.min.js", + "rollup": "rimraf dist umd && rollup -c", "benchmark": "find benchmarks/run -name '*.js' -exec benchmarks/start.sh {} \\;", "test": "c8 --reporter=lcov --reporter=text mocha test/test.js", - "prepublishOnly": "npm run browserify && npm run minify", + "test-esm": "mocha test/test.mjs", + "prepublishOnly": "npm run rollup", "test-browser": "node test/browser.js" }, "files": [ "index.js", + "index.mjs", "index.d.ts", - "umd" + "dist" ], "repository": { "type": "git", @@ -44,13 +53,15 @@ "url": "https://github.com/primus/eventemitter3/issues" }, "devDependencies": { + "@rollup/plugin-commonjs": "^23.0.2", + "@rollup/plugin-terser": "^0.1.0", "assume": "^2.2.0", - "browserify": "^17.0.0", "c8": "^7.3.1", "mocha": "^10.0.0", "pre-commit": "^1.2.0", + "rimraf": "^3.0.2", + "rollup": "^3.4.0", "sauce-browsers": "^3.0.0", - "sauce-test": "^1.3.3", - "uglify-js": "^3.9.0" + "sauce-test": "^1.3.3" } } diff --git a/rollup.config.mjs b/rollup.config.mjs new file mode 100644 index 0000000..64ce462 --- /dev/null +++ b/rollup.config.mjs @@ -0,0 +1,36 @@ +import commonjs from '@rollup/plugin-commonjs'; +import terser from '@rollup/plugin-terser'; + +export default [{ + input: './index.mjs', + output: { + file: 'dist/eventemitter3.esm.js', + format: 'es' + }, + plugins: [commonjs()] +}, { + input: './index.mjs', + output: { + compact: true, + file: 'dist/eventemitter3.esm.min.js', + format: 'es' + }, + plugins: [commonjs(), terser()] +}, { + input: './index.js', + output: { + file: 'dist/eventemitter3.umd.js', + format: 'umd', + name: 'EventEmitter3' + }, + plugins: [commonjs()] +}, { + input: './index.js', + output: { + compact: true, + file: 'dist/eventemitter3.umd.min.js', + format: 'umd', + name: 'EventEmitter3' + }, + plugins: [commonjs(), terser()] +}]; diff --git a/test/test.mjs b/test/test.mjs new file mode 100644 index 0000000..7b50c82 --- /dev/null +++ b/test/test.mjs @@ -0,0 +1,9 @@ +import EventEmitterDefault, { EventEmitter } from '../index.mjs'; + +it('exports `EventEmitter` as default export', () => { + new EventEmitterDefault(); +}) + +it('exports `EventEmitter` as a named export', () => { + new EventEmitter(); +})