UNPKG

hem

Version:

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

129 lines (105 loc) 3.23 kB
// Generated by CoffeeScript 1.12.7 (function() { var Dependency, Module, compilers, detective, extname, fs, mtime, resolve, indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; extname = require('path').extname; fs = require('fs'); detective = require('fast-detective'); resolve = require('./resolve'); compilers = require('./compilers'); mtime = function(path) { return fs.statSync(path).mtime.valueOf(); }; Module = (function() { Module.walk = ['js', 'coffee']; function Module(request, parent) { var ref; ref = resolve(request, parent), this.id = ref[0], this.filename = ref[1]; this.ext = extname(this.filename).slice(1); this.mtime = mtime(this.filename); this.paths = resolve.paths(this.filename); } Module.prototype.compile = function() { if (!this._compile || this.changed()) { this.mtime = mtime(this.filename); this._compile = compilers[this.ext](this.filename); } return this._compile; }; Module.prototype.modules = function() { if (!this._modules || this.changed()) { this._modules = this.resolve(); } return this._modules; }; Module.prototype.changed = function() { return this.mtime !== mtime(this.filename); }; Module.prototype.resolve = function() { var i, len, path, ref, results; ref = this.calls(); results = []; for (i = 0, len = ref.length; i < len; i++) { path = ref[i]; results.push(new this.constructor(path, this)); } return results; }; Module.prototype.calls = function() { var ref; if (ref = this.ext, indexOf.call(this.constructor.walk, ref) >= 0) { return detective(this.compile()); } else { return []; } }; return Module; })(); Dependency = (function() { function Dependency(paths) { if (paths == null) { paths = []; } this.paths = paths; } Dependency.prototype.resolve = function() { var path; this.modules || (this.modules = (function() { var i, len, ref, results; ref = this.paths; results = []; for (i = 0, len = ref.length; i < len; i++) { path = ref[i]; results.push(new Module(path)); } return results; }).call(this)); return this.deepResolve(this.modules); }; Dependency.prototype.deepResolve = function(modules, result, search) { var i, len, module; if (modules == null) { modules = []; } if (result == null) { result = []; } if (search == null) { search = {}; } for (i = 0, len = modules.length; i < len; i++) { module = modules[i]; if (!(!search[module.filename])) { continue; } search[module.filename] = true; result.push(module); this.deepResolve(module.modules(), result, search); } return result; }; return Dependency; })(); module.exports = Dependency; module.exports.Module = Module; }).call(this);