Skip to content

Commit

Permalink
Adjust resolution extensions based on asserted type
Browse files Browse the repository at this point in the history
  • Loading branch information
kasperisager committed Oct 11, 2024
1 parent 7f47553 commit 16568ec
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 16 deletions.
5 changes: 4 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -212,11 +212,14 @@ Options include:
{
isImport = false,
referrer = null,
type,
extensions,
protocol,
imports,
resolutions,
builtins,
conditions
conditions,
attributes
}
```
Expand Down
49 changes: 34 additions & 15 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -252,7 +252,7 @@ const Module = module.exports = exports = class Module {
throw errors.MODULE_NOT_FOUND(msg)
}

const url = this.resolve(href, referrer._url, { isImport: true, referrer })
const url = this.resolve(href, referrer._url, { isImport: true, referrer, attributes })

const module = this.load(url, { isImport: true, isDynamicImport, referrer, attributes })

Expand Down Expand Up @@ -392,10 +392,10 @@ const Module = module.exports = exports = class Module {
module._builtins = builtins
module._conditions = conditions

let extension = extensionForType(type) || path.extname(url.pathname)
let extension = canonicalExtensionForType(type) || path.extname(url.pathname)

if (extension in self._extensions === false) {
if (defaultType) extension = extensionForType(defaultType) || '.js'
if (defaultType) extension = canonicalExtensionForType(defaultType) || '.js'
else extension = '.js'
}

Expand All @@ -422,6 +422,9 @@ const Module = module.exports = exports = class Module {
isImport = false,

referrer = null,
attributes,
type = typeForAttributes(attributes),
extensions = extensionsForType(type),
protocol = referrer ? referrer._protocol : self._protocol,
imports = referrer ? referrer._imports : null,
resolutions = referrer ? referrer._resolutions : null,
Expand All @@ -439,18 +442,11 @@ const Module = module.exports = exports = class Module {
conditions: isImport ? ['import', ...conditions] : ['require', ...conditions],
imports,
resolutions,
extensions,
builtins: builtins ? Object.keys(builtins) : [],
engines: {
...Bare.versions
},
extensions: [
'.js',
'.cjs',
'.mjs',
'.json',
'.bare',
'.node'
]
}
}, readPackage)) {
switch (resolution.protocol) {
case 'builtin:': return resolution
Expand Down Expand Up @@ -517,7 +513,28 @@ const Module = module.exports = exports = class Module {
}
}

function extensionForType (type) {
function extensionsForType (type) {
switch (type) {
case constants.types.SCRIPT:
return ['.js', '.cjs']
case constants.types.MODULE:
return ['.js', '.mjs']
case constants.types.JSON:
return ['.json']
case constants.types.BUNDLE:
return ['.json']
case constants.types.ADDON:
return ['.bare', '.node']
case constants.types.BINARY:
return ['.bin']
case constants.types.TEXT:
return ['.txt']
default:
return ['.js', '.cjs', '.mjs', '.json', '.bare', '.node']
}
}

function canonicalExtensionForType (type) {
switch (type) {
case constants.types.SCRIPT:
return '.cjs'
Expand Down Expand Up @@ -619,9 +636,11 @@ const createRequire = exports.createRequire = function createRequire (parentURL,
return require

function require (specifier, opts = {}) {
const resolved = self.resolve(specifier, referrer._url, { referrer })
const attributes = opts && opts.with

const resolved = self.resolve(specifier, referrer._url, { referrer, attributes })

const module = self.load(resolved, { referrer, attributes: opts.with })
const module = self.load(resolved, { referrer, attributes })

return module._exports
}
Expand Down

0 comments on commit 16568ec

Please sign in to comment.