Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
80529 views
1
var assert = require('assert');
2
var resolve = require('../');
3
4
var fixtures_dir = __dirname + '/fixtures-coffee/node_modules';
5
6
// no package.json, load index.js
7
test('index.js of module dir', function(done) {
8
var parent = {
9
paths: [ fixtures_dir ],
10
extensions: ['.js', '.coffee']
11
};
12
resolve('module-a', parent, function(err, path) {
13
assert.ifError(err);
14
assert.equal(path, require.resolve('./fixtures-coffee/node_modules/module-a/index.coffee'));
15
done();
16
});
17
});
18
19
// package.json main field specifies other location
20
test('alternate main', function(done) {
21
var parent = {
22
paths: [ fixtures_dir ],
23
extensions: ['.js', '.coffee']
24
};
25
resolve('module-b', parent, function(err, path) {
26
assert.ifError(err);
27
assert.equal(path, require.resolve('./fixtures-coffee/node_modules/module-b/main.coffee'));
28
done();
29
}, {extensions: ['.js', '.coffee']});
30
});
31
32
// package.json has 'browser' field which is a string
33
test('string browser field as main', function(done) {
34
var parent = {
35
paths: [ fixtures_dir ],
36
extensions: ['.js', '.coffee']
37
};
38
resolve('module-c', parent, function(err, path) {
39
assert.ifError(err);
40
assert.equal(path, require.resolve('./fixtures-coffee/node_modules/module-c/browser.coffee'));
41
done();
42
}, {extensions: ['.js', '.coffee']});
43
});
44
45
// package.json has 'browser' field which is a string
46
test('string browser field as main - require subfile', function(done) {
47
var parent = {
48
filename: fixtures_dir + '/module-c/browser.js',
49
paths: [ fixtures_dir + '/module-c/node_modules' ],
50
extensions: ['.js', '.coffee']
51
};
52
53
resolve('./bar', parent, function(err, path) {
54
assert.ifError(err);
55
assert.equal(path, require.resolve('./fixtures-coffee/node_modules/module-c/bar.coffee'));
56
done();
57
});
58
});
59
60
// package.json has browser field as object
61
// one of the keys replaces the main file
62
// this would be done if the user needed to replace main and some other module
63
test('object browser field as main', function(done) {
64
var parent = {
65
paths: [ fixtures_dir ],
66
extensions: ['.js', '.coffee']
67
};
68
resolve('module-d', parent, function(err, path) {
69
assert.ifError(err);
70
assert.equal(path, require.resolve('./fixtures-coffee/node_modules/module-d/browser.coffee'));
71
done();
72
});
73
});
74
75
// browser field in package.json maps ./foo.js -> ./browser.js
76
// when we resolve ./foo while in module-e, this mapping should take effect
77
// the result is that ./foo resolves to ./browser
78
test('object browser field replace file', function(done) {
79
var parent = {
80
filename: fixtures_dir + '/module-e/main.coffee',
81
extensions: ['.js', '.coffee']
82
};
83
84
resolve('./foo', parent, function(err, path) {
85
assert.ifError(err);
86
assert.equal(path, require.resolve('./fixtures-coffee/node_modules/module-e/browser.coffee'));
87
done();
88
});
89
});
90
91
// same as above, but without a paths field in parent
92
// should still checks paths on the filename of parent
93
test('object browser field replace file - no paths', function(done) {
94
var parent = {
95
filename: fixtures_dir + '/module-f/lib/main.coffee',
96
extensions: ['.js', '.coffee']
97
};
98
99
resolve('./foo', parent, function(err, path) {
100
assert.ifError(err);
101
assert.equal(path, require.resolve('./fixtures-coffee/node_modules/module-f/lib/browser.coffee'));
102
done();
103
});
104
});
105
106
test('replace module in browser field object', function(done) {
107
var parent = {
108
filename: fixtures_dir + '/module-g/index.js',
109
extensions: ['.js', '.coffee']
110
};
111
112
resolve('foobar', parent, function(err, path) {
113
assert.ifError(err);
114
assert.equal(path, require.resolve('./fixtures-coffee/node_modules/module-g/foobar-browser.coffee'));
115
done();
116
});
117
});
118
119