diff --git a/.travis.yml b/.travis.yml index 1db41fec..42f06fbb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,6 +2,7 @@ language: node_js node_js: - node + - 14 - 12 - 10 diff --git a/esm-wrapper.mjs b/esm-wrapper.mjs new file mode 100644 index 00000000..3f2d0013 --- /dev/null +++ b/esm-wrapper.mjs @@ -0,0 +1,50 @@ +import semver from './index.js' + +export const { + re, + src, + tokens, + SEMVER_SPEC_VERSION, + SemVer, + compareIdentifiers, + rcompareIdentifiers, + parse, + valid, + clean, + inc, + diff, + major, + minor, + patch, + prerelease, + compare, + rcompare, + compareLoose, + compareBuild, + sort, + rsort, + gt, + lt, + eq, + neq, + gte, + lte, + cmp, + coerce, + Comparator, + Range, + satisfies, + toComparators, + maxSatisfying, + minSatisfying, + minVersion, + validRange, + outside, + gtr, + ltr, + intersects, + simplifyRange, + subset +} = semver; + +export default semver diff --git a/map.js b/map.js index 293f6b01..95930bd0 100644 --- a/map.js +++ b/map.js @@ -1 +1,4 @@ -module.exports = testFile => testFile.replace(/test\//, '') +module.exports = testFile => { + const base = testFile.replace(/test\//, '').replace(/\.m?js$/, '') + return [`${base}.js`, `${base}.mjs`] +} diff --git a/package.json b/package.json index 4e115419..7f770090 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,28 @@ "version": "7.3.5", "description": "The semantic version parser used by npm.", "main": "index.js", + "exports": { + ".": { + "require": "./index.js", + "import": "./esm-wrapper.mjs" + }, + "./bin/*": "./bin/*", + "./classes/*": "./classes/*", + "./functions/*": "./functions/*", + "./internal/*": "./internal/*", + "./ranges/*": "./ranges/*", + "./bin/": "./bin/", + "./classes/": "./classes/", + "./functions/": "./functions/", + "./internal/": "./internal/", + "./ranges/": "./ranges/", + "./index.js": "./index.js", + "./index": "./index.js", + "./preload.js": "./preload.js", + "./preload": "./preload.js", + "./package.json": "./package.json", + "./package": "./package.json" + }, "scripts": { "test": "tap", "snap": "tap", @@ -30,7 +52,8 @@ ], "tap": { "check-coverage": true, - "coverage-map": "map.js" + "coverage-map": "map.js", + "test-ignore": "test/esm-wrapper.mjs" }, "engines": { "node": ">=10" diff --git a/test/esm-wrapper.mjs b/test/esm-wrapper.mjs new file mode 100644 index 00000000..10b8601a --- /dev/null +++ b/test/esm-wrapper.mjs @@ -0,0 +1,12 @@ +// test/esm/test-exports.mjs +import {createRequire} from 'module' +import t from 'tap' + +import * as semver from 'semver' + +const require = createRequire(import.meta.url) + +const cjs = require('semver') + +t.equal(cjs, semver.default) +t.same(cjs, Object.fromEntries(Object.entries(semver).filter(nvp => nvp[0] !== 'default'))) diff --git a/test/index.js b/test/index.js index f22d86eb..3b6a6dec 100644 --- a/test/index.js +++ b/test/index.js @@ -9,3 +9,7 @@ t.match(Object.getOwnPropertyDescriptor(semver, 'SEMVER_SPEC_VERSION'), { configurable: true, enumerable: true }, 'just a normal value property') + +if (semver.gte(process.version, '14.0.0')) { + t.spawn(process.execPath, require.resolve('./esm-wrapper.mjs')) +}