node-exports-info
Advanced tools
+8
-0
@@ -8,2 +8,10 @@ # Changelog | ||
| ## [v1.5.0](https://github.com/inspect-js/node-exports-info/compare/v1.4.0...v1.5.0) - 2026-01-16 | ||
| ### Commits | ||
| - [New] add `node-addons` condition support [`fd11809`](https://github.com/inspect-js/node-exports-info/commit/fd118093e55e8fcb1b3b1c90779e277a6806bc73) | ||
| - [New] add `module-sync` condition support [`6cc5123`](https://github.com/inspect-js/node-exports-info/commit/6cc51230673a8846d5b1d2ec4124e35c9d6f077f) | ||
| - [New] add `subpath-imports-slash` category for `#/` subpath imports [`547f4ef`](https://github.com/inspect-js/node-exports-info/commit/547f4ef3f62e05032cb7b4d7e4f541eea380fcbf) | ||
| ## [v1.4.0](https://github.com/inspect-js/node-exports-info/compare/v1.3.1...v1.4.0) - 2026-01-12 | ||
@@ -10,0 +18,0 @@ |
@@ -11,2 +11,8 @@ import type { Category, Condition } from './types'; | ||
| | ['import', 'node', 'require', 'default'] | ||
| | ['import', 'node-addons', 'node', 'default'] | ||
| | ['node-addons', 'node', 'require', 'default'] | ||
| | ['import', 'node-addons', 'node', 'require', 'default'] | ||
| | ['import', 'node-addons', 'node', 'module-sync', 'default'] | ||
| | ['node-addons', 'node', 'require', 'module-sync', 'default'] | ||
| | ['import', 'node-addons', 'node', 'require', 'module-sync', 'default'] | ||
| | null | ||
@@ -13,0 +19,0 @@ ); |
+105
-31
@@ -5,15 +5,98 @@ 'use strict'; | ||
| var $TypeError = require('es-errors/type'); | ||
| var entries = require('object.entries'); | ||
| var ranges = require('./ranges'); | ||
| var isCategory = require('./isCategory'); | ||
| // pre-computed condition sets | ||
| /** @type {['import', 'node', 'require', 'default']} */ | ||
| var base = [ | ||
| 'import', | ||
| 'node', | ||
| 'require', | ||
| 'default' | ||
| ]; | ||
| /** @type {['import', 'node', 'default']} */ | ||
| var baseImport = [ | ||
| 'import', | ||
| 'node', | ||
| 'default' | ||
| ]; | ||
| /** @type {['node', 'require', 'default']} */ | ||
| var baseRequire = [ | ||
| 'node', | ||
| 'require', | ||
| 'default' | ||
| ]; | ||
| /** @type {['import', 'node-addons', 'node', 'require', 'default']} */ | ||
| var withAddons = [ | ||
| 'import', | ||
| 'node-addons', | ||
| 'node', | ||
| 'require', | ||
| 'default' | ||
| ]; | ||
| /** @type {['import', 'node-addons', 'node', 'default']} */ | ||
| var withAddonsImport = [ | ||
| 'import', | ||
| 'node-addons', | ||
| 'node', | ||
| 'default' | ||
| ]; | ||
| /** @type {['node-addons', 'node', 'require', 'default']} */ | ||
| var withAddonsRequire = [ | ||
| 'node-addons', | ||
| 'node', | ||
| 'require', | ||
| 'default' | ||
| ]; | ||
| /** @type {['import', 'node-addons', 'node', 'require', 'module-sync', 'default']} */ | ||
| var withAddonsModuleSync = [ | ||
| 'import', | ||
| 'node-addons', | ||
| 'node', | ||
| 'require', | ||
| 'module-sync', | ||
| 'default' | ||
| ]; | ||
| /** @type {['import', 'node-addons', 'node', 'module-sync', 'default']} */ | ||
| var withAddonsModuleSyncImport = [ | ||
| 'import', | ||
| 'node-addons', | ||
| 'node', | ||
| 'module-sync', | ||
| 'default' | ||
| ]; | ||
| /** @type {['node-addons', 'node', 'require', 'module-sync', 'default']} */ | ||
| var withAddonsModuleSyncRequire = [ | ||
| 'node-addons', | ||
| 'node', | ||
| 'require', | ||
| 'module-sync', | ||
| 'default' | ||
| ]; | ||
| // categories that support node-addons condition (added in v14.19/v16.10) | ||
| /** @type {{ [k: string]: boolean | null | undefined }} */ | ||
| var nodeAddonsCategories = { | ||
| __proto__: null, | ||
| 'pattern-trailers': true, | ||
| 'pattern-trailers+json-imports': true, | ||
| 'pattern-trailers-no-dir-slash': true, | ||
| 'pattern-trailers-no-dir-slash+json-imports': true, | ||
| 'require-esm': true, | ||
| 'strips-types': true, | ||
| 'subpath-imports-slash': true | ||
| }; | ||
| // categories that support module-sync condition (added in v22.12) | ||
| /** @type {{ [k: string]: boolean | null | undefined }} */ | ||
| var moduleSyncCategories = { | ||
| __proto__: null, | ||
| 'require-esm': true, | ||
| 'strips-types': true, | ||
| 'subpath-imports-slash': true | ||
| }; | ||
| /** @type {import('./getConditionsForCategory')} */ | ||
| module.exports = function getConditionsForCategory(category) { | ||
| var rangeEntries = entries(ranges); | ||
| var found = false; | ||
| for (var i = 0; !found && i < rangeEntries.length; i++) { | ||
| var entry = rangeEntries[i]; | ||
| found = entry[1] === category; | ||
| } | ||
| if (!found) { | ||
| if (!isCategory(category)) { | ||
| throw new $RangeError('invalid category ' + category); | ||
@@ -30,25 +113,16 @@ } | ||
| } | ||
| if (category !== 'broken' && category !== 'pre-exports') { | ||
| if (moduleSystem === 'import') { | ||
| return [ | ||
| 'import', | ||
| 'node', | ||
| 'default' | ||
| ]; | ||
| } | ||
| if (moduleSystem === 'require') { | ||
| return [ | ||
| 'node', | ||
| 'require', | ||
| 'default' | ||
| ]; | ||
| } | ||
| return [ | ||
| 'import', | ||
| 'node', | ||
| 'require', | ||
| 'default' | ||
| ]; | ||
| if (category === 'broken' || category === 'pre-exports') { | ||
| return null; | ||
| } | ||
| return null; | ||
| var hasAddons = !!nodeAddonsCategories[category]; | ||
| var hasModuleSync = !!moduleSyncCategories[category]; | ||
| if (hasAddons && hasModuleSync) { | ||
| return moduleSystem === 'import' ? withAddonsModuleSyncImport : moduleSystem === 'require' ? withAddonsModuleSyncRequire : withAddonsModuleSync; | ||
| } | ||
| if (hasAddons) { | ||
| return moduleSystem === 'import' ? withAddonsImport : moduleSystem === 'require' ? withAddonsRequire : withAddons; | ||
| } | ||
| return moduleSystem === 'import' ? baseImport : moduleSystem === 'require' ? baseRequire : base; | ||
| }; |
+1
-1
| { | ||
| "name": "node-exports-info", | ||
| "version": "1.4.0", | ||
| "version": "1.5.0", | ||
| "description": "Info about node `exports` field support: version ranges, categories, etc.", | ||
@@ -5,0 +5,0 @@ "main": false, |
+2
-1
@@ -6,3 +6,4 @@ 'use strict'; | ||
| __proto__: null, | ||
| '>= 23.6 || ^22.18': 'strips-types', // added in 23.6, backported to 22.18 | ||
| '>= 25.4': 'subpath-imports-slash', // added in 25.4 | ||
| '23.6 - 25.3 || ^22.18': 'strips-types', // added in 23.6, backported to 22.18 | ||
| '23 - 23.5 || 22.12 - 22.17 || ^20.19': 'require-esm', // added in 23.0, 22.12, 20.19 | ||
@@ -9,0 +10,0 @@ '17.1 - 19 || 20 - 20.18 || ^21 || 22 - 22.11': 'pattern-trailers-no-dir-slash+json-imports', |
+2
-1
@@ -24,3 +24,4 @@ # node-exports-info <sup>[![Version Badge][npm-version-svg]][package-url]</sup> | ||
| - `require-esm`: ESM files can be `require`d (`23 - 23.5 || 22.12 - 22.17 || ^20.19`) | ||
| - `strips-types`: these versions also automatically strip types from typescript files, for both `require` and `import` (`>= 23.6 || ^22.18`) | ||
| - `strips-types`: these versions also automatically strip types from typescript files, for both `require` and `import` (`23.6 - 25.3 || ^22.18`) | ||
| - `subpath-imports-slash`: these versions support `#/` subpath imports patterns in the `imports` field, e.g. `"#/*": "./src/*.js"` (`>= 25.4`) | ||
@@ -27,0 +28,0 @@ ## Entry points |
+17
-1
@@ -24,4 +24,20 @@ 'use strict'; | ||
| 'v16.9.0', | ||
| 'v16.13.999', | ||
| 'v16.14.0', | ||
| 'v16.999.999', | ||
| 'v17.0.0' | ||
| 'v17.0.0', | ||
| 'v17.0.999', | ||
| 'v17.1.0', | ||
| 'v20.18.999', | ||
| 'v20.19.0', | ||
| 'v22.11.999', | ||
| 'v22.12.0', | ||
| 'v22.17.999', | ||
| 'v22.18.0', | ||
| 'v22.999.999', | ||
| 'v23.0.0', | ||
| 'v23.5.999', | ||
| 'v23.6.0', | ||
| 'v25.3.999', | ||
| 'v25.4.0' | ||
| ]; |
+1
-1
@@ -9,2 +9,2 @@ import ranges from './ranges'; | ||
| export type Condition = 'node' | 'import' | 'require' | 'default'; | ||
| export type Condition = 'node' | 'node-addons' | 'import' | 'require' | 'module-sync' | 'default'; |
33503
11.62%484
23.47%56
1.82%