Skip to content

Commit f9632d3

Browse files
committed
improving diagnostics messages
1 parent 9691aea commit f9632d3

10 files changed

+91
-57
lines changed

index.js

+10-5
Original file line numberDiff line numberDiff line change
@@ -65,12 +65,17 @@ module.exports = function (file) {
6565

6666
function write(buf) { content += buf; }
6767
function end() {
68-
resolveShims(file, function (err, config) {
69-
if (err) return console.error(err);
68+
var messages = [];
69+
resolveShims(file, messages, function (err, info) {
70+
if (err) {
71+
stream.emit('error', err);
72+
return stream.queue(null);
73+
}
74+
7075
debug('');
71-
debug.inspect({ file: file, shim: config });
76+
debug.inspect({ file: file, info: info, messages: messages });
7277

73-
var transformed = config ? wrap(content, config) : content;
78+
var transformed = info.shim ? wrap(content, info.shim) : content;
7479

7580
stream.queue(transformed);
7681
stream.queue(null);
@@ -86,5 +91,5 @@ if (!module.parent && typeof window === 'undefined') {
8691
browserify( { ignoreGlobals: true })
8792
.require(file)
8893
.bundle()
89-
.pipe(process.stdout);
94+
// .pipe(process.stdout);
9095
}

lib/debug.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
'use strict';
22

3-
var diagnostics = true // process.env.BROWSERIFYSHIM_DIAGNOSTICS
3+
var diagnostics = process.env.BROWSERIFYSHIM_DIAGNOSTICS;
44

55
function inspect(obj, depth) {
66
return require('util').inspect(obj, false, depth || 5, true);

lib/resolve-shims.js

+49-21
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ var path = require('path')
44
, util = require('util')
55
, parentDir = require('find-parent-dir')
66
, parseInlineShims = require('./parse-inline-shims')
7+
, format = require('util').format
78

89
var shimsCache = {}
910
, byPath = {};
@@ -36,25 +37,34 @@ function updateCache(packageDir, resolvedShims) {
3637
});
3738
}
3839

39-
function resolveDependsRelativeTo(dir, browser, depends) {
40+
function resolveDependsRelativeTo(dir, browser, depends, packDeps, messages) {
41+
var resolved;
42+
4043
if (!depends) return undefined;
44+
4145
return Object.keys(depends).reduce(function (acc, k) {
4246
if (browser[k]){
43-
// exposed -- lets keep referring to it under its alias
4447
acc[k] = depends[k];
48+
messages.push(format('Found depends "%s" exposed in browser field', k));
4549
} else if (!isPath(k)) {
46-
// if it's not a path it refers to a module that is exposed in another package
4750
acc[k] = depends[k];
51+
if (packDeps[k]) {
52+
messages.push(format('Found depends "%s" as an installed dependency of the package', k));
53+
} else {
54+
messages.push(format('WARNING, depends "%s" is not a path, nor is it exposed in the browser field, nor was it found in package dependencies.', k));
55+
}
4856
} else {
4957
// otherwise resolve the path
50-
acc[path.resolve(dir, k)] = depends[k];
58+
resolved = path.resolve(dir, k);
59+
acc[resolved] = depends[k];
60+
messages.push(format('Depends "%s" was resolved to be at [%s]', k, resolved));
5161
}
5262

5363
return acc;
5464
}, {})
5565
}
5666

57-
function resolvePaths (packageDir, shimFileDir, browser, shims) {
67+
function resolvePaths (packageDir, shimFileDir, browser, shims, packDeps, messages) {
5868
return Object.keys(shims)
5969
.reduce(function (acc, relPath) {
6070
var shim = shims[relPath];
@@ -66,56 +76,74 @@ function resolvePaths (packageDir, shimFileDir, browser, shims) {
6676
// and it is referred to by this alias in the shims (either external or in package.json)
6777
// i.e.: 'non-cjs': { ... } -> browser: { 'non-cjs': './vendor/non-cjs.js }
6878
shimPath = path.resolve(packageDir, exposed);
79+
messages.push(format('Found "%s" in browser field referencing "%s" and resolved it to "%s"', relPath, exposed, shimPath));
6980
} else if (shimFileDir) {
7081
// specified via relative path to shim file inside shim file
7182
// i.e. './vendor/non-cjs': { exports: .. }
7283
shimPath = path.resolve(shimFileDir, relPath);
84+
messages.push(format('Resolved "%s" found in shim file to "%s"', relPath, shimPath));
7385
} else {
7486
// specified via relative path in package.json browserify-shim config
7587
// i.e. 'browserify-shim': { './vendor/non-cjs': 'noncjs' }
7688
shimPath = path.resolve(packageDir, relPath);
89+
messages.push(format('Resolved "%s" found in package.json to "%s"', relPath, shimPath));
7790
}
78-
var depends = resolveDependsRelativeTo(shimFileDir || packageDir, browser, shim.depends);
91+
var depends = resolveDependsRelativeTo(shimFileDir || packageDir, browser, shim.depends, packDeps, messages);
7992

8093
acc[shimPath] = { exports: shim.exports, depends: depends };
8194
return acc;
8295
}, {});
8396
}
8497

85-
function resolveFromShimFile(packageDir, pack, shimField) {
98+
function resolveFromShimFile(packageDir, pack, shimField, messages) {
8699
var shimFile = path.join(packageDir, shimField)
87100
, shimFileDir = path.dirname(shimFile);
88101

89102
var shims = require(shimFile);
90103

91-
return resolvePaths(packageDir, shimFileDir, pack.browser || {}, shims);
104+
return resolvePaths(packageDir, shimFileDir, pack.browser || {}, shims, pack.dependencies || {}, messages);
92105
}
93106

94-
function resolveInlineShims(packageDir, pack, shimField) {
107+
function resolveInlineShims(packageDir, pack, shimField, messages) {
95108
var shims = parseInlineShims(shimField);
96-
97-
// shimFile is our package.json in this case
98-
return resolvePaths(packageDir, null, pack.browser || {}, shims);
109+
return resolvePaths(packageDir, null, pack.browser || {}, shims, pack.dependencies || {}, messages);
99110
}
100111

101-
var resolve = module.exports = function resolveShims (file, cb) {
112+
var resolve = module.exports = function resolveShims (file, messages, cb) {
102113
parentDir(file, 'package.json', function (err, packageDir) {
103114
if (err) return cb(err);
115+
116+
var packFile = path.join(packageDir, 'package.json');
104117
// we cached this before which means it was also grouped by file
105-
if (shimsCache[packageDir]) return cb(null, byPath[file]);
118+
if (shimsCache[packageDir]) {
119+
return cb(null, {
120+
package_json : packFile
121+
, resolvedPreviously : true
122+
, shim : byPath[file]
123+
});
124+
}
106125

107-
var pack = require(path.join(packageDir, 'package.json'));
126+
try {
127+
var pack = require(packFile);
108128

109-
var shimField = pack['browserify-shim'];
110-
if (!shimField) return cb();
129+
var shimField = pack['browserify-shim'];
130+
if (!shimField) return cb();
111131

112-
try {
113132
var resolvedShims = typeof shimField === 'string'
114-
? resolveFromShimFile(packageDir, pack, shimField)
115-
: resolveInlineShims(packageDir, pack, shimField);
133+
? resolveFromShimFile(packageDir, pack, shimField, messages)
134+
: resolveInlineShims(packageDir, pack, shimField, messages);
116135

136+
messages.push({ resolved: resolvedShims });
117137
updateCache(packageDir, resolvedShims);
118-
cb(null, byPath[file]);
138+
139+
cb(null, {
140+
package_json : packFile
141+
, shim : byPath[file]
142+
, browser : pack.browser
143+
, 'browserify-shim' : pack['browserify-shim']
144+
, dependencies : pack.dependencies
145+
});
146+
119147
} catch (err) {
120148
return cb(err);
121149
}

test/resolve-shims.js

+17-16
Original file line numberDiff line numberDiff line change
@@ -4,47 +4,48 @@
44
var test = require('tap').test
55
var path = require('path');
66
var resolve = require('../lib/resolve-shims');
7+
var msgs = [];
78

89
function inspect(obj, depth) {
910
console.error(require('util').inspect(obj, false, depth || 5, true));
1011
}
1112

1213
test('\nno dependencies, external shim file, no expose', function (t) {
13-
resolve(require.resolve('./nodeps/extshim/vendor/non-cjs'), function (err, res) {
14+
resolve(require.resolve('./nodeps/extshim/vendor/non-cjs'), msgs, function (err, res) {
1415
if (err) { t.fail(err); return t.end(); }
15-
t.deepEqual(res, { exports: 'noncjs', depends: undefined }, 'resolves noncjs shim correctly')
16+
t.deepEqual(res.shim, { exports: 'noncjs', depends: undefined }, 'resolves noncjs shim correctly')
1617
t.end();
1718
});
1819
})
1920

2021
test('\nno dependencies, external shim, exposed as non-cjs', function (t) {
21-
resolve(require.resolve('./nodeps/extshim-exposed/vendor/non-cjs'), function (err, res) {
22+
resolve(require.resolve('./nodeps/extshim-exposed/vendor/non-cjs'), msgs, function (err, res) {
2223
if (err) { t.fail(err); return t.end(); }
23-
t.deepEqual(res, { exports: 'noncjs', depends: undefined }, 'resolves noncjs shim correctly')
24+
t.deepEqual(res.shim, { exports: 'noncjs', depends: undefined }, 'resolves noncjs shim correctly')
2425
t.end();
2526
});
2627
})
2728

2829
test('\nno dependencies, inline shims, no expose', function (t) {
29-
resolve(require.resolve('./nodeps/inlineshim/vendor/non-cjs'), function (err, res) {
30+
resolve(require.resolve('./nodeps/inlineshim/vendor/non-cjs'), msgs, function (err, res) {
3031
if (err) { t.fail(err); return t.end(); }
31-
t.deepEqual(res, { exports: 'noncjs', depends: undefined }, 'resolves noncjs shim correctly')
32+
t.deepEqual(res.shim, { exports: 'noncjs', depends: undefined }, 'resolves noncjs shim correctly')
3233
t.end();
3334
});
3435
})
3536

3637
test('\nno dependencies, inline shims, exposed as non-cjs', function (t) {
37-
resolve(require.resolve('./nodeps/inlineshim-exposed/vendor/non-cjs'), function (err, res) {
38+
resolve(require.resolve('./nodeps/inlineshim-exposed/vendor/non-cjs'), msgs, function (err, res) {
3839
if (err) { t.fail(err); return t.end(); }
39-
t.deepEqual(res, { exports: 'noncjs', depends: undefined }, 'resolves noncjs shim correctly')
40+
t.deepEqual(res.shim, { exports: 'noncjs', depends: undefined }, 'resolves noncjs shim correctly')
4041
t.end();
4142
});
4243
})
4344

4445
test('\nnon-cjs-dep depends on non-cjs, external shim file, all exposed', function (t) {
45-
resolve(require.resolve('./deps/extshim/vendor/non-cjs-dep'), function (err, res) {
46+
resolve(require.resolve('./deps/extshim/vendor/non-cjs-dep'), msgs, function (err, res) {
4647
if (err) { t.fail(err); return t.end(); }
47-
t.deepEqual(res
48+
t.deepEqual(res.shim
4849
, { exports: 'noncjsdep', depends: { 'non-cjs': 'noncjs' } }
4950
, 'resolves noncjsdep shim correctly'
5051
)
@@ -53,9 +54,9 @@ test('\nnon-cjs-dep depends on non-cjs, external shim file, all exposed', functi
5354
})
5455

5556
test('\nnon-cjs-dep depends on non-cjs, inline shims, all exposed', function (t) {
56-
resolve(require.resolve('./deps/inlineshim/vendor/non-cjs-dep'), function (err, res) {
57+
resolve(require.resolve('./deps/inlineshim/vendor/non-cjs-dep'), msgs, function (err, res) {
5758
if (err) { t.fail(err); return t.end(); }
58-
t.deepEqual(res
59+
t.deepEqual(res.shim
5960
, { exports: 'noncjsdep', depends: { 'non-cjs': 'noncjs' } }
6061
, 'resolves noncjsdep shim correctly'
6162
)
@@ -64,13 +65,13 @@ test('\nnon-cjs-dep depends on non-cjs, inline shims, all exposed', function (t)
6465
})
6566

6667
test('\nnon-cjs-dep depends on non-cjs and non-cjs-core, external shim file, all exposed except non-cjs-core', function (t) {
67-
resolve(require.resolve('./multideps/extshim/vendor/non-cjs-dep'), function (err, res) {
68+
resolve(require.resolve('./multideps/extshim/vendor/non-cjs-dep'), msgs, function (err, res) {
6869
if (err) { t.fail(err); return t.end(); }
6970
var corePath = path.join(__dirname, 'multideps/extshim/vendor/non-cjs-core.js');
7071
var depends = { 'non-cjs': 'noncjs' }
7172
depends[corePath] = 'core';
7273
t.deepEqual(
73-
res
74+
res.shim
7475
, { exports: 'noncjsdep', depends: depends }
7576
, 'resolves noncjsdep shim correctly'
7677
)
@@ -79,13 +80,13 @@ test('\nnon-cjs-dep depends on non-cjs and non-cjs-core, external shim file, all
7980
})
8081

8182
test('\nnon-cjs-dep depends on non-cjs and non-cjs-core, inline shims, all exposed except non-cjs-core', function (t) {
82-
resolve(require.resolve('./multideps/inlineshim/vendor/non-cjs-dep'), function (err, res) {
83+
resolve(require.resolve('./multideps/inlineshim/vendor/non-cjs-dep'), msgs, function (err, res) {
8384
if (err) { t.fail(err); return t.end(); }
8485
var corePath = path.join(__dirname, 'multideps/inlineshim/vendor/non-cjs-core.js');
8586
var depends = { 'non-cjs': 'noncjs' }
8687
depends[corePath] = 'core';
8788
t.deepEqual(
88-
res
89+
res.shim
8990
, { exports: 'noncjsdep', depends: depends }
9091
, 'resolves noncjsdep shim correctly'
9192
)

test/shim/prebundle.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@ test('\n# when I shim "jquery"', function (t) {
99
var entry = require.resolve('./fixtures/entry-requires-jquery.js');
1010
var jqueryFullPath = require.resolve('./fixtures/shims/crippled-jquery')
1111

12-
function resolveShims (file_, cb) {
12+
function resolveShims (file_, msgs, cb) {
1313
var res = file_ === jqueryFullPath
1414
? { exports: '$' }
1515
: null;
1616

17-
setTimeout(cb.bind(null, null, res), 0)
17+
setTimeout(cb.bind(null, null, { shim: res }), 0)
1818
}
1919

2020
var shim = proxyquire('../../', {

test/shim/shim-depends.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,12 @@ function inspect(obj, depth) {
3434

3535
test('\nwhen I shim "jquery" and shim a lib that depends on it', function (t) {
3636

37-
function resolveShims (file_, cb) {
37+
function resolveShims (file_, msgs, cb) {
3838
var res;
3939
if (file_ === jqueryPath) res = jquery;
4040
if (file_ === dependentPath) res = dependent;
4141

42-
setTimeout(cb.bind(null, null, res), 0)
42+
setTimeout(cb.bind(null, null, { shim: res }), 0)
4343
}
4444

4545
var shim = proxyquire('../../', {
@@ -68,13 +68,13 @@ test('\nwhen I shim "jquery" and shim a lib that depends on it', function (t) {
6868

6969
test('\nwhen I shim "jquery" and _ lib in debug mode and shim a lib that depends on both', function (t) {
7070

71-
function resolveShims (file_, cb) {
71+
function resolveShims (file_, msgs, cb) {
7272
var res;
7373
if (file_ === jqueryPath) res = jquery;
7474
if (file_ === underscorePath) res = underscore;
7575
if (file_ === multidependentPath) res = multidependent;
7676

77-
setTimeout(cb.bind(null, null, res), 0)
77+
setTimeout(cb.bind(null, null, { shim: res }), 0)
7878
}
7979

8080
var shim = proxyquire('../../', {

test/shim/shim-exports-define-window.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@ test('when a module only attaches to the window after checking for module.export
1212
var file = require.resolve('./fixtures/shims/lib-with-exports-define-global-problem.js');
1313
var entry = require.resolve('./fixtures/entry-requires-lib-with-global-problem.js');
1414

15-
function resolveShims (file_, cb) {
15+
function resolveShims (file_, msgs, cb) {
1616
var res = file_ === file
1717
? { exports: 'eve' }
1818
: null;
1919

20-
setTimeout(cb.bind(null, null, res), 0)
20+
setTimeout(cb.bind(null, null, { shim: res }), 0)
2121
}
2222

2323
var shim = proxyquire('../../', {

test/shim/shim-root-level-var.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@ test('when I shim a module that declares its export as a var on the root level i
1010
var entry = require.resolve('./fixtures/entry-requires-root-level-var.js');
1111
var file = require.resolve('./fixtures/shims/root-level-var');
1212

13-
function resolveShims (file_, cb) {
13+
function resolveShims (file_, msgs, cb) {
1414
var res = file_ === file
1515
? { exports: 'nineties' }
1616
: null;
1717

18-
setTimeout(cb.bind(null, null, res), 0)
18+
setTimeout(cb.bind(null, null, { shim: res }), 0)
1919
}
2020

2121
var shim = proxyquire('../../', {

test/shim/shim.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,12 @@ test('when I shim "jquery" to a crippled jquery filerequire it inside the entry
1515
var entry = require.resolve('./fixtures/entry-requires-jquery.js');
1616
var file = require.resolve('./fixtures/shims/crippled-jquery')
1717

18-
function resolveShims (file_, cb) {
18+
function resolveShims (file_, msgs, cb) {
1919
var res = file_ === file
2020
? { exports: '$' }
2121
: null;
2222

23-
setTimeout(cb.bind(null, null, res), 0)
23+
setTimeout(cb.bind(null, null, { shim: res }), 0)
2424
}
2525

2626
var shim = proxyquire('../../', {

test/shim/utils/test-lib.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,12 @@ module.exports = function testLib(t, opts) {
5151

5252
var entry = require.resolve(entryFile);
5353

54-
function resolveShims (file_, cb) {
54+
function resolveShims (file_, msgs, cb) {
5555
var res = file_ === file
5656
? shimConfig
5757
: null;
5858

59-
setTimeout(cb.bind(null, null, res), 0)
59+
setTimeout(cb.bind(null, null, { shim: res }), 0)
6060
}
6161

6262
var shim = proxyquire('../../../', {

0 commit comments

Comments
 (0)