UNPKG

2.85 kBJavaScriptView Raw
1(function() {
2 var compress, exports, querystring, request;
3 var __indexOf = Array.prototype.indexOf || function(item) {
4 for (var i = 0, l = this.length; i < l; i++) {
5 if (this[i] === item) return i;
6 }
7 return -1;
8 }, __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
9 querystring = require('querystring');
10 request = require('request');
11 compress = require('compress');
12 exports = module.exports = function(config) {
13 var discogsRequest, getUrl, gunzip, params, responseHandler, _config;
14 _config = {};
15 _config.api_key = config.api_key;
16 _config.f = config.f || 'json';
17 params = querystring.stringify(_config);
18 gunzip = new compress.Gunzip();
19 gunzip.init();
20 getUrl = function(url) {
21 var sep;
22 if (url.substr(0, 7) !== 'http://') {
23 url = "http://www.discogs.com/" + (encodeURIComponent(url));
24 }
25 sep = __indexOf.call(url, "?") >= 0 ? "&" : "?";
26 return "" + url + sep + params;
27 };
28 discogsRequest = function(url, next) {
29 return request({
30 uri: getUrl(url),
31 headers: {
32 'accept-encoding': 'gzip'
33 },
34 encoding: 'binary'
35 }, __bind(function(error, res, body) {
36 var _ref;
37 if (!error && (200 <= (_ref = res.statusCode) && _ref < 400)) {
38 if (body) {
39 if (__indexOf.call(res.headers['content-type'], 'gzip') >= 0) {
40 body = gunzip.inflate(body);
41 }
42 if (__indexOf.call(res.headers['content-type'], 'json') >= 0 || _config.f === 'json') {
43 body = JSON.parse(body);
44 }
45 }
46 return next(null, body);
47 } else {
48 return next(error);
49 }
50 }, this));
51 };
52 responseHandler = function(type, next) {
53 return function(err, res) {
54 if (err || !(res instanceof Object) || !(type in (res != null ? res.resp : void 0))) {
55 return next(err, res);
56 }
57 return next(null, res.resp[type]);
58 };
59 };
60 return {
61 get: function(url, next) {
62 return discogsRequest(url, next);
63 },
64 release: function(id, next) {
65 return discogsRequest('release/' + id, responseHandler('release', next));
66 },
67 artist: function(name, next) {
68 return discogsRequest('artist/' + name, responseHandler('artist', next));
69 },
70 label: function(name, next) {
71 return discogsRequest('label/' + name, responseHandler('label', next));
72 },
73 search: function(query, type, next) {
74 if (type instanceof Function) {
75 next = type;
76 type = 'all';
77 }
78 return discogsRequest('search?' + querystring.stringify({
79 type: type,
80 q: query
81 }), responseHandler('search', next));
82 }
83 };
84 };
85}).call(this);