closeheat-builder
Version:
A builder for closeheat
53 lines (41 loc) • 1.35 kB
text/coffeescript
Promise = require 'bluebird'
_ = require 'lodash'
path = require 'path'
through = require 'through2'
gulp = require 'gulp'
acorn = require 'acorn/dist/acorn_loose'
module.exports =
class RequireScanner
constructor: () ->
= {}
register: (name, version) ->
[name] = version
getRequires: ->
new Promise (resolve, reject) =>
gulp
.src(path.join(, '**/*.js'))
.pipe((resolve, reject).on('error', reject))
finish: (resolve, _done) =>
resolve()
scan: (resolve, reject) ->
through.obj((file, enc, cb) =>
try
if (file.isNull())
cb(null, file)
return
ast = acorn.parse_dammit(file.contents.toString(), {})
walk = require('acorn/dist/walk')
walkall = require('walkall')
walk.simple(ast, walkall.makeVisitors((node) =>
return unless node.type == 'CallExpression'
return unless node.callee.name == 'require'
module_name = node.arguments[0].value
return unless module_name?.match(/^[a-zA-Z]/)
[module, submodules...] = module_name.split('/')
[name, version] = module.split('@')
(name, version)
), walkall.traversers)
cb()
catch e
reject(e.stack)
, _.partial(, resolve))