You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
126 lines
3.2 KiB
126 lines
3.2 KiB
'use strict'; |
|
|
|
var $RangeError = require('es-errors/range'); |
|
var $TypeError = require('es-errors/type'); |
|
|
|
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) { |
|
if (!isCategory(category)) { |
|
throw new $RangeError('invalid category ' + category); |
|
} |
|
|
|
var moduleSystem = arguments.length > 1 ? arguments[1] : null; |
|
if (arguments.length > 1 && moduleSystem !== 'import' && moduleSystem !== 'require') { |
|
throw new $TypeError('invalid moduleSystem: must be `\'require\'` or `\'import\'` if provided, got' + moduleSystem); |
|
} |
|
|
|
if (category === 'experimental') { |
|
return ['default']; |
|
} |
|
if (category === 'broken' || category === 'pre-exports') { |
|
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; |
|
};
|
|
|