UNPKG

hem

Version:

stitches CommonJS, and ties up other lose ends of web-app development.

66 lines (52 loc) 1.46 kB
{extname} = require('path') fs = require('fs') detective = require('fast-detective') resolve = require('./resolve') compilers = require('./compilers') mtime = (path) -> fs.statSync(path).mtime.valueOf() class Module @walk: ['js', 'coffee'] constructor: (request, parent) -> [@id, @filename] = resolve(request, parent) @ext = extname(@filename).slice(1) @mtime = mtime(@filename) @paths = resolve.paths(@filename) compile: -> if not @_compile or @changed() @mtime = mtime(@filename) @_compile = compilers[@ext](@filename) @_compile modules: -> if not @_modules or @changed() @_modules = @resolve() @_modules changed: -> @mtime isnt mtime(@filename) resolve: -> for path in @calls() new @constructor(path, @) # Find calls to require() calls: -> if @ext in @constructor.walk detective(@compile()) else [] class Dependency constructor: (paths = []) -> @paths = paths resolve: -> @modules or= (new Module(path) for path in @paths) @deepResolve(@modules) # Private deepResolve: (modules = [], result = [], search = {}) -> for module in modules when not search[module.filename] search[module.filename] = true result.push(module) @deepResolve( module.modules(), result search ) result module.exports = Dependency module.exports.Module = Module