UNPKG

937 Btext/coffeescriptView Raw
1_ = require 'lodash'
2request = require 'request'
3
4class NodeRegistryDownloader
5 constructor: ->
6 @cached = false
7 @etag = null
8 @data = null
9 @_checkEtag = _.throttle @_checkEtagImmediately, 60*1000*5, leading: true, trailing: false
10
11 setOptions: ({@registryUrl}) =>
12
13 update: (callback) =>
14 @_checkEtag()
15 return callback null, @data if @cached
16
17 request.get @registryUrl, json: true, (error, response, @data) =>
18 return callback error if error?
19 return callback new Error "invalid response code: #{response.statusCode}" if response.statusCode > 300
20 @etag = response.headers.etag
21 @cached = true
22 callback null, @data
23
24 _checkEtagImmediately: =>
25 request.head @registryUrl, json: true, (error, response) =>
26 return if error?
27 return if @etag == response.headers.etag
28 @etag = response.headers.etag
29 @cached = false
30
31module.exports = NodeRegistryDownloader