Skip to content

Commit eaa58ae

Browse files
author
Vitaly Puzrin
committed
Reorganized files structure
1 parent f8aee6a commit eaa58ae

9 files changed

+180
-165
lines changed

http.js

+55
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
'use strict';
2+
3+
4+
var once = require('./lib/common').once;
5+
var request = require('request').defaults({
6+
timeout: 30000,
7+
maxRedirects: 2,
8+
rejectUnauthorized: false
9+
});
10+
11+
var probeStream = require('./stream');
12+
13+
14+
module.exports = function probeHttp(options, _callback) {
15+
var callback = once(_callback);
16+
var req;
17+
18+
try {
19+
req = request(options);
20+
} catch (err) {
21+
callback(err);
22+
return;
23+
}
24+
25+
req.on('response', function (res) {
26+
if (res.statusCode === 200) {
27+
probeStream(res, function (err, result) {
28+
req.abort();
29+
30+
if (result) {
31+
var length = res.headers['content-length'];
32+
33+
if (length && length.match(/^\d+$/)) {
34+
result.length = +length;
35+
}
36+
}
37+
38+
callback(err, result);
39+
});
40+
} else {
41+
var err = new Error('bad status code: ' + res.statusCode);
42+
43+
err.status = res.statusCode;
44+
req.abort();
45+
callback(err);
46+
}
47+
});
48+
49+
req.on('error', function (err) {
50+
callback(err);
51+
});
52+
};
53+
54+
55+
module.exports.parsers = require('./lib/parsers_stream');

index.js

+36-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,39 @@
11
'use strict';
22

33

4-
module.exports = require('./lib');
5-
module.exports.sync = require('./lib/sync');
4+
var probeStream = require('./stream');
5+
var probeHttp = require('./http');
6+
7+
8+
// Cache for promise implementation
9+
var P;
10+
11+
12+
/* eslint-disable consistent-return */
13+
14+
module.exports = function get_image_size(src, callback) {
15+
var prober;
16+
17+
if (typeof src.on === 'function' && typeof src.emit === 'function') {
18+
// looks like an EventEmitter, treating it as a stream
19+
prober = probeStream;
20+
} else {
21+
prober = probeHttp;
22+
}
23+
24+
if (!callback) {
25+
P = P || require('any-promise');
26+
27+
return new P(function (resolve, reject) {
28+
prober(src, function (err, data) {
29+
if (err) reject(err);
30+
else resolve(data);
31+
});
32+
});
33+
}
34+
35+
prober(src, callback);
36+
};
37+
38+
module.exports.parsers = require('./lib/parsers_stream');
39+
module.exports.sync = require('./sync');

lib/index.js

-125
This file was deleted.

lib/parsers_stream.js

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
'use strict';
2+
3+
4+
module.exports = {
5+
bmp: require('./parse_stream/bmp'),
6+
gif: require('./parse_stream/gif'),
7+
jpeg: require('./parse_stream/jpeg'),
8+
png: require('./parse_stream/png'),
9+
psd: require('./parse_stream/psd'),
10+
tiff: require('./parse_stream/tiff'),
11+
webp: require('./parse_stream/webp')
12+
};

lib/parsers_sync.js

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
'use strict';
2+
3+
4+
module.exports = {
5+
bmp: require('./parse_sync/bmp'),
6+
gif: require('./parse_sync/gif'),
7+
//jpeg: require('./parse_sync/jpeg'),
8+
png: require('./parse_sync/png'),
9+
psd: require('./parse_sync/psd'),
10+
tiff: require('./parse_sync/tiff'),
11+
webp: require('./parse_sync/webp')
12+
};

lib/sync.js

-37
This file was deleted.

package.json

+3
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@
1818
"license": "MIT",
1919
"files": [
2020
"index.js",
21+
"http.js",
22+
"stream.js",
23+
"sync.js",
2124
"lib/"
2225
],
2326
"scripts": {

stream.js

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
'use strict';
2+
3+
4+
var async = require('async');
5+
var parsers = require('./lib/parsers_stream');
6+
7+
8+
module.exports = function probeStream(stream, callback) {
9+
// prevent "possible EventEmitter memory leak" warnings
10+
stream.setMaxListeners(0);
11+
12+
async.map(parsers, function (parser, next) {
13+
parser(stream, next);
14+
}, function (err, results) {
15+
if (err) {
16+
callback(err);
17+
return;
18+
}
19+
20+
var result = Object.keys(results).map(function (type) {
21+
return results[type];
22+
}).filter(Boolean)[0];
23+
24+
if (!result) {
25+
var error = new Error('unrecognized file format');
26+
27+
error.code = 'ECONTENT';
28+
callback(error);
29+
return;
30+
}
31+
32+
callback(null, result);
33+
});
34+
};
35+
36+
37+
module.exports.parsers = parsers;

sync.js

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

33

4-
module.exports = require('./lib/sync');
4+
var parsers = require('./lib/parsers_sync');
5+
6+
7+
function probeBuffer(buffer) {
8+
var parser_names = Object.keys(parsers);
9+
10+
for (var i = 0; i < parser_names.length; i++) {
11+
var result = parsers[parser_names[i]](buffer);
12+
13+
if (result) return result;
14+
}
15+
16+
return null;
17+
}
18+
19+
20+
///////////////////////////////////////////////////////////////////////
21+
// Exports
22+
//
23+
24+
module.exports = function get_image_size(src) {
25+
return probeBuffer(src);
26+
};
27+
28+
module.exports.parsers = parsers;

0 commit comments

Comments
 (0)