Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Socket
Sign inDemoInstall

jest-webpack-alias

Package Overview
Dependencies
Maintainers
1
Versions
21
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

jest-webpack-alias - npm Package Compare versions

Comparing version 2.1.0 to 2.2.0

3

lib/dirHas.js

@@ -12,3 +12,4 @@ var _ = require('lodash');

} else {
var dirList = fs.readdirSync(dirname);
var dirList;
try { dirList = fs.readdirSync(dirname); } catch(e) { dirList = []; }
var dirTree = cache[dirname] = cacheize(dirList);

@@ -15,0 +16,0 @@ return dirTree;

var _ = require('lodash');
var dirHas = require('./dirHas');
var find = _.find;
var fs = require('fs');

@@ -20,3 +19,2 @@ var path = require('path');

var webpackSettings;
var nodeModulesDirs;

@@ -45,6 +43,2 @@ function ensureWebpackInfo(filename) {

});
nodeModulesDirs = moduleDirs.filter(function(dir) {
return path.basename(dir) === 'node_modules';
});
}

@@ -72,3 +66,3 @@

var dirname = path.dirname(absMatch);
var ext = find(fileExtensions, function(ext) {
var ext = _.find(fileExtensions, function(ext) {
return dirHas(dirname, path.basename(absMatch + ext));

@@ -79,15 +73,9 @@ });

function resolveFirstDir(dirname, rest) {
var matchingDir, matchingExt;
function locate(dirname) {
var matchingExt;
if (rest) {
matchingDir = find(moduleDirs, function(aliasDir) {
return dirHas(aliasDir, dirname);
});
} else {
matchingDir = find(moduleDirs, function(aliasDir) {
matchingExt = resolveExtension(aliasDir, dirname);
return matchingExt !== undefined;
});
}
var matchingDir = _.find(moduleDirs, function(candidate) {
matchingExt = resolveExtension(candidate, dirname);
return matchingExt !== undefined;
});

@@ -137,11 +125,15 @@ return {

var matchingFirstDir = resolveFirstDir(dirname, rest);
if (!matchingFirstDir.dir || _.contains(nodeModulesDirs, matchingFirstDir.dir)) {
var match = locate(dependency);
if (!match.dir) {
return dependency;
}
var matchingDir = path.join(matchingFirstDir.dir, dirname) + matchingFirstDir.ext;
var matchingDir = path.join(match.dir, dirname);
var relative = resolveDependencyToMatch(matchingDir, rest, filename);
var ext = rest ? (resolveExtension(matchingDir, rest) || '') : '';
var ext = match.ext || '';
if (_.includes(relative, '/node_modules/')) {
return dependency;
}
return relative + ext;

@@ -148,0 +140,0 @@ }

{
"name": "jest-webpack-alias",
"version": "2.1.0",
"version": "2.2.0",
"description": "Preprocessor for Jest that is able to resolve require() statements using webpack aliases.",

@@ -5,0 +5,0 @@ "main": "lib/preprocessor.js",

@@ -73,10 +73,9 @@ # jest-webpack-alias

## Missing features
## Known issues
This module does not yet support:
- `resolve.alias` settings whose values are absolute paths might not work
- `resolve.modulesDirectories` only searches the directory containing your package.json file, not all ancestors of current file
- `resolve.alias` settings whose values are absolute paths
## License
MIT

@@ -29,2 +29,14 @@ var expect = require('./lib/expect');

});
describe('with nonexistent directory', function() {
it('returns false without throwing error', function() {
var firstDir = '/top/src/bogus/directory';
var output = dirHas(firstDir, 'dir1');
expect(fs.readdirSync).to.be.calledOnce;
expect(fs.readdirSync.args[0][0]).to.eq('/top/src/bogus/directory');
expect(cache[firstDir]).to.eql(cacheize([]));
expect(output).to.not.be.ok;
});
});
});

@@ -14,3 +14,8 @@ var Setup = require('./setup');

'/top/src/dir2': ['lib2a.js', 'lib1b-2b.js'],
'/top/test': ['file1.test.js', 'file2.test.js']
'/top/src/dir3': ['dir3-1'],
'/top/src/dir3/dir3-1': ['mocked.js'],
'/top/test': ['file1.test.js', 'file2.test.js', '__mocks__'],
'/top/test/__mocks__': ['dir3'],
'/top/test/__mocks__/dir3': ['dir3-1'],
'/top/test/__mocks__/dir3/dir3-1': ['mocked.js']
};

@@ -30,3 +35,3 @@

resolve: {
root: ['/top/src', '/top/bogus_dir'],
root: ['/top/test/__mocks__', '/top/src', '/top/bogus_dir'],
extensions: ["", ".js", ".jsx"],

@@ -33,0 +38,0 @@ // omitted: fallback

@@ -53,6 +53,8 @@ var expect = require('./lib/expect');

verifyExistsSync([
['/top/src'], ['/top/bogus_dir'], ['/top/node_modules'], ['/top/web_modules']
['/top/test/__mocks__'], ['/top/src'], ['/top/bogus_dir'], ['/top/node_modules'], ['/top/web_modules']
]);
verifyDirHas([
['/top/src', 'dir1'],
['/top/test/__mocks__/dir1', 'lib1a'],
['/top/test/__mocks__/dir1', 'lib1a.js'],
['/top/test/__mocks__/dir1', 'lib1a.jsx'],
['/top/src/dir1', 'lib1a'],

@@ -65,3 +67,3 @@ ['/top/src/dir1', 'lib1a.js']

it('falls back to no extension if no exact match found', function() {
it('if no exact match found, does not modify dependency', function() {
var src = "var lib1a = require('dir1/lib1a.noext');";

@@ -71,8 +73,16 @@ var output = webpackAlias.process(src, filename);

verifyDirHas([
['/top/src', 'dir1'],
['/top/test/__mocks__/dir1', 'lib1a.noext'],
['/top/test/__mocks__/dir1', 'lib1a.noext.js'],
['/top/test/__mocks__/dir1', 'lib1a.noext.jsx'],
['/top/src/dir1', 'lib1a.noext'],
['/top/src/dir1', 'lib1a.noext.js'],
['/top/src/dir1', 'lib1a.noext.jsx']
['/top/src/dir1', 'lib1a.noext.jsx'],
['/top/node_modules/dir1', 'lib1a.noext'],
['/top/node_modules/dir1', 'lib1a.noext.js'],
['/top/node_modules/dir1', 'lib1a.noext.jsx'],
['/top/web_modules/dir1', 'lib1a.noext'],
['/top/web_modules/dir1', 'lib1a.noext.js'],
['/top/web_modules/dir1', 'lib1a.noext.jsx']
]);
expect(output).to.eq("var lib1a = require('../src/dir1/lib1a.noext');");
expect(output).to.eq("var lib1a = require('dir1/lib1a.noext');");
});

@@ -84,7 +94,6 @@

verifyExistsSync([
['/top/src'], ['/top/bogus_dir'], ['/top/node_modules'], ['/top/web_modules']
]);
verifyDirHas([
['/top/src', 'dir1'],
['/top/test/__mocks__/dir1', 'lib1a'],
['/top/test/__mocks__/dir1', 'lib1a.js'],
['/top/test/__mocks__/dir1', 'lib1a.jsx'],
['/top/src/dir1', 'lib1a'],

@@ -108,3 +117,5 @@ ['/top/src/dir1', 'lib1a.js']

verifyDirHas([
['/top/src', 'dir1'],
['/top/test/__mocks__/dir1', 'lib1a'],
['/top/test/__mocks__/dir1', 'lib1a.js'],
['/top/test/__mocks__/dir1', 'lib1a.jsx'],
['/top/src/dir1', 'lib1a'],

@@ -127,2 +138,5 @@ ['/top/src/dir1', 'lib1a.js']

verifyDirHas([
['/top/test/__mocks__', 'node1'],
['/top/test/__mocks__', 'node1.js'],
['/top/test/__mocks__', 'node1.jsx'],
['/top/src', 'node1'],

@@ -136,3 +150,3 @@ ['/top/src', 'node1.js'],

it('resolves submodule, but leaves dependency alone', function() {
it('resolves submodule, trying first at file level, but leaves dependency alone', function() {
var src = "var lib1a = require('node1/lib/submodule');";

@@ -142,4 +156,10 @@ var output = webpackAlias.process(src, filename);

verifyDirHas([
['/top/src', 'node1'],
['/top/node_modules', 'node1']
['/top/test/__mocks__/node1/lib', 'submodule'],
['/top/test/__mocks__/node1/lib', 'submodule.js'],
['/top/test/__mocks__/node1/lib', 'submodule.jsx'],
['/top/src/node1/lib', 'submodule'],
['/top/src/node1/lib', 'submodule.js'],
['/top/src/node1/lib', 'submodule.jsx'],
['/top/node_modules/node1/lib', 'submodule'],
['/top/node_modules/node1/lib', 'submodule.js']
]);

@@ -160,2 +180,5 @@ expect(output).to.eq("var lib1a = require('node1/lib/submodule');");

verifyDirHas([
['/top/test/__mocks__', 'web2'],
['/top/test/__mocks__', 'web2.js'],
['/top/test/__mocks__', 'web2.jsx'],
['/top/src', 'web2'],

@@ -185,2 +208,5 @@ ['/top/src', 'web2.js'],

verifyDirHas([
['/top/test/__mocks__', 'bogus1'],
['/top/test/__mocks__', 'bogus1.js'],
['/top/test/__mocks__', 'bogus1.jsx'],
['/top/src', 'bogus1'],

@@ -247,3 +273,3 @@ ['/top/src', 'bogus1.js'],

describe('with destination of node_modules', function() {
it('applies alias to simple paths with no extension change', function() {
it('applies alias to top-level paths with no extension change', function() {
var src = "var lib1a = require('aliasNodeFileSrc');";

@@ -253,2 +279,5 @@ var output = webpackAlias.process(src, filename);

verifyDirHas([
['/top/test/__mocks__', 'aliasNodeFileDest'],
['/top/test/__mocks__', 'aliasNodeFileDest.js'],
['/top/test/__mocks__', 'aliasNodeFileDest.jsx'],
['/top/src', 'aliasNodeFileDest'],

@@ -268,4 +297,10 @@ ['/top/src', 'aliasNodeFileDest.js'],

verifyDirHas([
['/top/src', 'node1'],
['/top/node_modules', 'node1']
['/top/test/__mocks__/node1/lib', 'submodule'],
['/top/test/__mocks__/node1/lib', 'submodule.js'],
['/top/test/__mocks__/node1/lib', 'submodule.jsx'],
['/top/src/node1/lib', 'submodule'],
['/top/src/node1/lib', 'submodule.js'],
['/top/src/node1/lib', 'submodule.jsx'],
['/top/node_modules/node1/lib', 'submodule'],
['/top/node_modules/node1/lib', 'submodule.js']
]);

@@ -275,9 +310,15 @@ expect(output).to.eq("var lib1a = require('node1/lib/submodule');");

it('replaces subdir paths with alias destination', function() {
var src = "var lib1a = require('aliasNodeSubdir2Src/ignore/this');";
it('applies alias definitions that contain subdirs', function() {
var src = "var lib1a = require('aliasNodeSubdir2Src');";
var output = webpackAlias.process(src, filename);
verifyDirHas([
['/top/src', 'node1'],
['/top/node_modules', 'node1']
['/top/test/__mocks__/node1/lib', 'submodule'],
['/top/test/__mocks__/node1/lib', 'submodule.js'],
['/top/test/__mocks__/node1/lib', 'submodule.jsx'],
['/top/src/node1/lib', 'submodule'],
['/top/src/node1/lib', 'submodule.js'],
['/top/src/node1/lib', 'submodule.jsx'],
['/top/node_modules/node1/lib', 'submodule'],
['/top/node_modules/node1/lib', 'submodule.js']
]);

@@ -293,3 +334,5 @@ expect(output).to.eq("var lib1a = require('node1/lib/submodule');");

verifyDirHas([
['/top/src', 'dir1'],
['/top/test/__mocks__/dir1', 'lib1a'],
['/top/test/__mocks__/dir1', 'lib1a.js'],
['/top/test/__mocks__/dir1', 'lib1a.jsx'],
['/top/src/dir1', 'lib1a'],

@@ -311,16 +354,26 @@ ['/top/src/dir1', 'lib1a.js']

});
});
describe('resolve', function() {
it('applies alias to subdir paths', function() {
var resolved = webpackAlias.resolve('aliasPlainSubdirSrc', filename);
describe('resolve', function() {
beforeEach(function() {
filename = '/top/test/file1.test.js';
});
verifyDirHas([
['/top/src', 'dir1'],
['/top/src/dir1', 'lib1a'],
['/top/src/dir1', 'lib1a.js']
]);
expect(resolved).to.eq('../src/dir1/lib1a.js');
});
it('resolves with file extension', function() {
var resolved = webpackAlias.resolve('dir1/lib1a', filename);
verifyExistsSync([
['/top/test/__mocks__'], ['/top/src'], ['/top/bogus_dir'], ['/top/node_modules'], ['/top/web_modules']
]);
verifyDirHas([
['/top/test/__mocks__/dir1', 'lib1a'],
['/top/test/__mocks__/dir1', 'lib1a.js'],
['/top/test/__mocks__/dir1', 'lib1a.jsx'],
['/top/src/dir1', 'lib1a'],
['/top/src/dir1', 'lib1a.js']
]);
expect(webpackInfo.read).to.be.calledOnce;
expect(resolved).to.eq('../src/dir1/lib1a.js');
});
});
});
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc