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/node_modules';
5
6
// no package.json, load index.js
7
test('index.js of module dir', function(done) {
8
resolve('module-a', { paths: [ fixtures_dir ], package: { main: 'fixtures' } }, function(err, path, pkg) {
9
assert.ifError(err);
10
assert.equal(path, require.resolve('./fixtures/node_modules/module-a/index'));
11
assert.strictEqual(pkg, undefined);
12
done();
13
});
14
});
15
16
// package.json main field specifies other location
17
test('alternate main', function(done) {
18
resolve('module-b', { paths: [ fixtures_dir ], package: { main: 'fixtures' } }, function(err, path, pkg) {
19
assert.ifError(err);
20
assert.equal(path, require.resolve('./fixtures/node_modules/module-b/main'));
21
assert.strictEqual(pkg.main, './main.js');
22
done();
23
});
24
});
25
26
// package.json has 'browser' field which is a string
27
test('string browser field as main', function(done) {
28
resolve('module-c', { paths: [ fixtures_dir ], package: { main: 'fixtures' } }, function(err, path, pkg) {
29
assert.ifError(err);
30
assert.equal(path, require.resolve('./fixtures/node_modules/module-c/browser'));
31
assert.equal(pkg.main, './browser.js');
32
done();
33
});
34
});
35
36
// package.json has 'browser' field which is a string
37
test('string browser field as main - require subfile', function(done) {
38
var parent = {
39
filename: fixtures_dir + '/module-c/browser.js',
40
paths: [ fixtures_dir + '/module-c/node_modules' ],
41
package: { main: './browser.js' }
42
};
43
44
resolve('./bar', parent, function(err, path, pkg) {
45
assert.ifError(err);
46
assert.equal(path, require.resolve('./fixtures/node_modules/module-c/bar'));
47
assert.equal(pkg.main, './browser.js');
48
done();
49
});
50
});
51
52
// package.json has an alternative 'browser' field which is a string
53
test('string alt browser field as main - require subfile', function(done) {
54
var parent = {
55
filename: fixtures_dir + '/module-c/chromeapp.js',
56
paths: [ fixtures_dir + '/module-c/node_modules' ],
57
package: { main: './chromeapp.js' },
58
browser: 'chromeapp'
59
};
60
61
resolve('./foo', parent, function(err, path, pkg) {
62
assert.ifError(err);
63
assert.equal(path, require.resolve('./fixtures/node_modules/module-c/foo'));
64
assert.equal(pkg.main, './chromeapp.js');
65
done();
66
});
67
});
68
69
// package.json has browser field as object
70
// one of the keys replaces the main file
71
// this would be done if the user needed to replace main and some other module
72
test('object browser field as main', function(done) {
73
resolve('module-d', { paths: [ fixtures_dir ], package: { main: 'fixtures' } }, function(err, path, pkg) {
74
assert.ifError(err);
75
assert.equal(path, require.resolve('./fixtures/node_modules/module-d/browser'));
76
assert.equal(pkg.main, './browser.js');
77
done();
78
});
79
});
80
81
// package.json has browser field as object
82
// one of the keys replaces the main file
83
// however the main has no prefix and browser uses ./ prefix for the same file
84
test('object browser field as main', function(done) {
85
resolve('module-k', { paths: [ fixtures_dir ], package: { main: 'fixtures' } }, function(err, path, pkg) {
86
assert.ifError(err);
87
assert.equal(path, require.resolve('./fixtures/node_modules/module-k/browser'));
88
assert.equal(pkg.main, './browser.js');
89
done();
90
});
91
});
92
93
test('deep module reference mapping', function(done) {
94
resolve('module-l/direct', { basedir: __dirname + '/fixtures', package: { main: 'fixtures' } }, function(err, path, pkg) {
95
assert.ifError(err);
96
assert.equal(path, require.resolve('./fixtures/node_modules/module-l/browser-direct'));
97
assert.equal(pkg.main, './browser.js');
98
done();
99
});
100
});
101
102
// browser field in package.json maps ./foo.js -> ./browser.js
103
// when we resolve ./foo while in module-e, this mapping should take effect
104
// the result is that ./foo resolves to ./browser
105
test('object browser field replace file', function(done) {
106
var parent = {
107
filename: fixtures_dir + '/module-e/main.js',
108
package: { main: './main.js' }
109
};
110
111
resolve('./foo', parent, function(err, path, pkg) {
112
assert.ifError(err);
113
assert.equal(path, require.resolve('./fixtures/node_modules/module-e/browser'));
114
assert.equal(pkg.main, './main.js');
115
done();
116
});
117
});
118
119
// browser field in package.json maps "module" -> "alternate module"
120
test('test foobar -> module-b replacement', function(done) {
121
var parent = {
122
filename: fixtures_dir + '/module-h/index.js',
123
package: { main: './index.js' }
124
};
125
126
resolve('foobar', parent, function(err, path, pkg) {
127
assert.ifError(err);
128
assert.equal(path, require.resolve('./fixtures/node_modules/module-b/main'));
129
assert.equal(pkg.main, './main.js');
130
done();
131
});
132
});
133
134
// same as above but replacing core
135
test('test core -> module-c replacement', function(done) {
136
var parent = {
137
filename: fixtures_dir + '/module-h/index.js',
138
package: { main: './index.js' }
139
};
140
141
resolve('querystring', parent, function(err, path, pkg) {
142
assert.ifError(err);
143
assert.equal(path, require.resolve('./fixtures/node_modules/module-c/browser'));
144
assert.equal(pkg.main, './browser.js');
145
done();
146
});
147
});
148
149
// same as above but with alt browser
150
test('test core -> module-c replacement with alt browser', function(done) {
151
var parent = {
152
filename: fixtures_dir + '/module-h/index.js',
153
package: { main: './index.js' },
154
browser: 'chromeapp'
155
};
156
157
resolve('querystring', parent, function(err, path, pkg) {
158
assert.ifError(err);
159
assert.equal(path, require.resolve('./fixtures/node_modules/module-c/chromeapp'));
160
assert.equal(pkg.main, './chromeapp.js');
161
done();
162
});
163
});
164
165
// browser field in package.json maps "module" -> "alternate module"
166
test('test foobar -> module-b replacement with transform', function(done) {
167
var parent = {
168
filename: fixtures_dir + '/module-i/index.js',
169
package: { main: './index.js' }
170
};
171
172
resolve('foobar', parent, function(err, path, pkg) {
173
assert.ifError(err);
174
assert.equal(path, require.resolve('./fixtures/node_modules/module-b/main'));
175
assert.equal(pkg.main, './main.js');
176
done();
177
});
178
});
179
180
test('test foobar -> module-i replacement with transform in replacement', function(done) {
181
var parent = {
182
filename: fixtures_dir + '/module-j/index.js',
183
package: { main: './index.js' }
184
};
185
186
resolve('foobar', parent, function(err, path, pkg) {
187
assert.ifError(err);
188
assert.equal(path, require.resolve('./fixtures/node_modules/module-i/index'));
189
assert.equal(pkg.main, './index.js');
190
assert.equal(pkg.browser['foobar'], 'module-b');
191
assert.equal(pkg.browserify.transform, 'deamdify');
192
done();
193
});
194
});
195
196
// same as above, but without a paths field in parent
197
// should still checks paths on the filename of parent
198
test('object browser field replace file - no paths', function(done) {
199
var parent = {
200
filename: fixtures_dir + '/module-f/lib/main.js',
201
package: { main: './lib/main.js' }
202
};
203
204
resolve('./foo', parent, function(err, path, pkg) {
205
assert.ifError(err);
206
assert.equal(path, require.resolve('./fixtures/node_modules/module-f/lib/browser'));
207
assert.equal(pkg.main, './lib/main.js');
208
done();
209
});
210
});
211
212
test('replace module in browser field object', function(done) {
213
var parent = {
214
filename: fixtures_dir + '/module-g/index.js',
215
package: { main: './index.js' }
216
};
217
218
resolve('foobar', parent, function(err, path, pkg) {
219
assert.ifError(err);
220
assert.equal(path, require.resolve('./fixtures/node_modules/module-g/foobar-browser'));
221
assert.equal(pkg.main, './index.js');
222
done();
223
});
224
});
225
226
test('override engine shim', function(done) {
227
var parent = {
228
filename: fixtures_dir + '/override-engine-shim/index.js',
229
package: { main: './index.js' },
230
modules: { url: 'wonderland' }
231
};
232
resolve('url', parent, function(err, path, pkg) {
233
assert.ifError(err);
234
assert.equal(path, require.resolve('./fixtures/node_modules/override-engine-shim/url-browser'));
235
done();
236
});
237
});
238
239
test('alt-browser field', function(done) {
240
var parent = {
241
filename: fixtures_dir + '/alt-browser-field/index.js',
242
package: { main: './index.js' },
243
browser: 'chromeapp'
244
};
245
246
resolve('url', parent, function(err, path, pkg) {
247
assert.ifError(err);
248
assert.equal(path, require.resolve('./fixtures/node_modules/alt-browser-field/url-chromeapp'));
249
assert.equal(pkg.main, './index.js');
250
done();
251
});
252
});
253
254
test('alt-browser deep module reference mapping', function(done) {
255
resolve('alt-browser-field/direct', {
256
basedir: __dirname + '/fixtures',
257
package: { main: 'fixtures' },
258
browser: 'chromeapp'
259
}, function(err, path, pkg) {
260
assert.ifError(err);
261
assert.equal(path, require.resolve('./fixtures/node_modules/alt-browser-field/chromeapp-direct'));
262
assert.equal(pkg.main, './chromeapp.js');
263
done();
264
});
265
});
266
267
test('alt-browser fallback to "browser" on deps of deps', function(done) {
268
var parent = {
269
filename: fixtures_dir + '/alt-browser-field/foo.js',
270
package: { main: './index.js' },
271
browser: 'chromeapp'
272
};
273
274
resolve('foobar', parent, function(err, path, pkg) {
275
assert.ifError(err);
276
assert.equal(path, require.resolve('./fixtures/node_modules/module-k/browser'));
277
assert.equal(pkg.main, './browser.js');
278
assert.equal(pkg.browser['./index.js'], './browser.js');
279
done();
280
});
281
});
282
283