Skip to content

Commit

Permalink
Merge pull request #17 from iambumblehead/add-load-function-for-node-…
Browse files Browse the repository at this point in the history
…version-16-12-and-greater

add exported load definition to module loader
  • Loading branch information
iambumblehead authored Oct 28, 2021
2 parents a8412ee + 8cc538c commit b77380d
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 1 deletion.
5 changes: 4 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,11 @@ test('should mock modules and local files at same time', async t => {

### changelog

* 0.4.2 _Oct.27.2021_
* export 'load' hook from moduleLoader, required by node v16.12.0+
* 0.4.1 _Oct.10.2021_
* version bump, increment devDependencies
* version bump, increment devDependencies,
* major improvement to READE, thanks @swivelgames
* 0.4.0 _Sep.07.2021_
* do not runtime error when returuning type '[object Module]' default
* 0.3.9 _May.05.2021_
Expand Down
27 changes: 27 additions & 0 deletions src/esmockLoader.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ export async function resolve (specifier, context, defaultResolve) {
return resolved;
}

// supported by node version less than 16.12
export async function getSource (url, context, defaultGetSource) {
if (/#esmockModuleKeys/gi.test(url)) // parent of mocked modules
return defaultGetSource(url, context, defaultGetSource);
Expand All @@ -62,3 +63,29 @@ export async function getSource (url, context, defaultGetSource) {

return defaultGetSource(url, context, defaultGetSource);
}

export async function load (url, context, defaultGetSource) {
if (/#esmockModuleKeys/gi.test(url)) // parent of mocked modules
return defaultGetSource(url, context, defaultGetSource);

[ url ] = url.split('?esmockGlobals=');
if (url.startsWith(urlDummy)) {
url = url.replace(/[^#]*#/, '');
}

const exportedNames = /exportNames=/.test(url) &&
url.replace(/.*exportNames=(.*)/, '$1').split(',');
if (exportedNames) {
return {
format : 'module',
source : exportedNames.map(name => name === 'default'
? `export default global.esmockCacheGet("${url}").default`
: `export const ${name} = global.esmockCacheGet("${url}").${name}`
).join('\n')
};
}

return defaultGetSource(url, context, defaultGetSource);
}


0 comments on commit b77380d

Please sign in to comment.