UNPKG

pages

Version:

AngularJS / Node.js sidekick.

92 lines (53 loc) 2.58 kB
express = require 'express' async = require 'async' readdirp = require 'readdirp' uuid = require 'node-uuid' connect = require 'connect' utils = require './utils' modulesAppPath = "#{process.cwd()}/server_modules" modulesRunner = files: [] fns: [] befores: [] afters: [] expressApp = undefined serverStarting = (app, cb) -> expressApp = app findModules () -> determineModuleTypes (indexModExists, indexMod) -> requireModules indexModExists, indexMod, () -> cb() serverStarted = () -> mod.after expressApp for mod in modulesRunner.afters findModules = (cb) -> utils.listFiles modulesAppPath, '.litcoffee', (files) -> Array::push.apply modulesRunner.files, files cb() determineModuleTypes = (cb) -> indexModExists = false for mod in modulesRunner.files if mod.indexOf('index.litcoffee') isnt -1 and mod.replace("#{process.cwd()}/server_modules/", '').indexOf('/') is -1 indexModExists = true indexMod = require mod modulesRunner.afters.push indexMod if typeof indexMod is 'object' and indexMod.after else if mod.replace("#{process.cwd()}/server_modules/", '').indexOf('/') is -1 requiredMod = require mod modulesRunner.fns.push requiredMod if typeof requiredMod is 'function' modulesRunner.befores.push requiredMod if typeof requiredMod is 'object' and requiredMod.before modulesRunner.afters.push requiredMod if typeof requiredMod is 'object' and requiredMod.after cb indexModExists, indexMod Run `index` module first (if available), then run modules alphabetically. Assume `index` is not a _function_, and has _both_ `before` and `after` declared. requireModules = (indexModExists, indexMod, cb) -> runner = (done) -> runFunctionModules () -> runBeforeModules () -> done() if indexModExists indexMod.before expressApp, () -> runner cb return runner cb `function` _Server Modules_. executeFnModule = (mod, cb) -> mod expressApp, cb runFunctionModules = (cb) -> async.every modulesRunner.fns, executeFnModule, () -> cb() `before` _Server Modules_. executeBeforeModule = (mod, cb) -> mod.before expressApp, cb runBeforeModules = (cb) -> async.every modulesRunner.befores, executeBeforeModule, () -> cb() ## Public API ## publicFns = serverStarting: serverStarting serverStarted: serverStarted module.exports = publicFns