Skip to content

Instantly share code, notes, and snippets.

@pmoelgaard
Created February 25, 2016 11:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pmoelgaard/155a43a7e40c22ba00bf to your computer and use it in GitHub Desktop.
Save pmoelgaard/155a43a7e40c22ba00bf to your computer and use it in GitHub Desktop.
/// <reference path='../../typings/tsd.d.ts' />
/// <reference path='../../typings/main.d.ts' />
/// <reference path='../tsd.d.ts' />
import path = require('path');
import async = require('async');
import glob = require("glob");
import _ = require("lodash");
import hooks = require("../loopback-hooks/loopback-hooks");
function ModuleFn(app:any, next:Function):void {
glob('**/hooks/*/*/*.js', function (err:Error, hookRelativePaths:Array<string>):void {
async.waterfall(
[
function (stepCallback:Function):void {
async.mapSeries(
hookRelativePaths,
function (hookRelativePath:string, hookCallback:Function):void {
var hookPath = path.join(__dirname, '../../', hookRelativePath);
var hookAction:Function = require(hookPath);
var hookHierachy:Array<string> = hookPath.split(path.sep);
var hookName:string = hookHierachy.pop();
hookName = path.basename(hookName, 'js');
hookName = _.camelCase(hookName);
var hookTrigger:string = hookHierachy.pop();
hookTrigger = hookTrigger.replace('-', ' ');
var hookContext:string = hookHierachy.pop();
hookContext = _.capitalize(_.camelCase(hookContext));
var hook:loopback.IHook = new hooks.Hook({
action: hookAction,
path: hookPath,
name: hookName,
triggerName: hookTrigger,
contextName: hookContext
});
hookCallback(null, hook);
},
function (err:Error, hooks:Array<any>):void {
stepCallback(err, hooks);
}
)
},
function (hooks:Array<any>, stepCallback:Function):void {
async.eachSeries(
hooks,
function (hook:any, hookCallback:Function):void {
var context:any = app.models[hook.contextName];
context.observe(hook.triggerName, function (instance:any, next:Function):void {
hook.action.apply(context, [instance, next, context, hook]);
});
hookCallback();
},
function (err:Error):void {
stepCallback(err);
}
);
}
],
function (err:Error):void {
next(err);
}
);
})
}
module.exports = ModuleFn;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment