Socket
Socket
Sign inDemoInstall

express-hooks

Package Overview
Dependencies
Maintainers
1
Versions
7
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

express-hooks - npm Package Compare versions

Comparing version 1.0.4 to 1.0.5

test/.expressrc

167

index.js

@@ -8,38 +8,93 @@ 'use strict';

//console.log(process.mainModule);
const HOOK_PREFIX = 'express-hook-';
const MAIN_MODULE_FOLDER = path.dirname(module.parent.filename);
let mainModulePath = path.join(MAIN_MODULE_FOLDER, 'package.json');
let rcFilePath = path.join(MAIN_MODULE_FOLDER, '.expressrc');
let mainModulePath = path.join(MAIN_MODULE_FOLDER, 'package.json');
let currentPackage = require(mainModulePath);
const injector = require("lightject");
const _ = require('lodash');
const ini = require('ini');
let HOOKS = {};
const stripJsonComments = require('strip-json-comments');
let HOOKS_MAP = new Map();
function addHook(hookName, realHookInfo) {
function getMetaInformation(realHookInfo) {
let hookInfo = {
name : realHookInfo._name.length ? realHookInfo._name : hookName,
hooks : {
let metaInformation = {};
if (utils.isFunction(realHookInfo)) {
let tempMeta = {};
for (let keyName in realHookInfo) {
if (keyName[0] !== '_' || utils.isFunction(metaInformation[keyName])) continue;
metaInformation[keyName] = realHookInfo[keyName];
}
for (let keyName in realHookInfo.prototype) {
if (keyName[0] !== '_' || utils.isFunction(metaInformation[keyName])) continue;
metaInformation[keyName] = realHookInfo.prototype[keyName];
}
return metaInformation;
}
if (!utils.isObject(realHookInfo)) return metaInformation;
for (let keyName in metaInformation) {
if (keyName[0] !== '_' || utils.isFunction(metaInformation[keyName])) continue;
metaInformation[keyName] = realHookInfo[keyName];
}
return metaInformation;
}
function getModuleHooks (realHookInfo) {
let hooks = {
'preinit' : null,
'run' : null,
};
if (utils.isFunction(realHookInfo)) {
hookInfo.hooks.run = realHookInfo;
if (utils.isFunction(realHookInfo)) {
hooks.run = realHookInfo;
}
if (utils.isObject(hookInfo)) {
hookInfo = utils.extendSettings(realHookInfo, hookInfo);
HOOKS[hookName] = hookInfo;
if (utils.isObject(realHookInfo)) {
for (let hookName in realHookInfo) {
if (hookName[0] === '_' || !utils.isFunction(realHookInfo[hookName]) || !(hookName in hooks)) continue;
hooks[hookName] = realHookInfo[hookName];
}
}
return hooks;
}
if ('dependencies' in currentPackage) {
function addHook(hookName, realHookInfo) {
let metaInformation = getMetaInformation(realHookInfo);
let hooks = getModuleHooks(realHookInfo);
let defaultHookInfo = {
_name : hookName,
hooks : hooks,
'_weight' : 0,
'_enable' : true
};
let hookInfo = _.assign({}, defaultHookInfo, metaInformation);
HOOKS_MAP.set(hookName, hookInfo);
}
if ('dependencies' in currentPackage && utils.isObject(currentPackage.dependencies) && Object.keys(currentPackage.dependencies).length) {
for (let depName in currentPackage.dependencies) {
if (depName.indexOf(HOOK_PREFIX) === 0) {

@@ -55,5 +110,43 @@ let hookName = depName.replace(HOOK_PREFIX, '').replace(/^[-]+/, '');

let rcFileContent = '';
let rcHooksConfig = {};
try {
rcFileContent = fs.readFileSync(rcFilePath, 'UTF-8');
} catch (e) { }
let testEmptyRc = rcFileContent.replace(/[\n ]+/gim, '');
if (testEmptyRc.length) {
let isParsed = false;
try {
rcHooksConfig = JSON.parse(stripJsonComments(rcFileContent));
isParsed = true;
} catch (error) {}
if (!isParsed) {
try {
rcHooksConfig = ini.parse(rcFileContent);
isParsed = true;
} catch (error) {}
}
}
/*
TODO
Продумать что должно быть в rc файле (скорее всего настройки и метанастройки хуков)
Проверить чтобы у всех хуков была единые имена в инжекторе
*/
for (let hookName in rcHooksConfig) {
let hookInfo = HOOKS_MAP.get(hookName);
let metaHookInfo = getMetaInformation(rcHooksConfig[hookName]);
}
/**

@@ -76,34 +169,37 @@ * Hooks

*/
module.exports = function (app, globalSettings) {
module.exports.initApp = module.exports = function executeRunHooks(app, globalSettings) {
if (app) app.hooks = HOOKS;
injector.value("$hooks_implementations", HOOKS_MAP);
injector.value("$app", app);
injector.value("$settings", globalSettings);
injector.value("$injector", injector);
let promiseStack = [];
for (let hookName in HOOKS) {
if('hooks' in HOOKS[hookName] && 'run' in HOOKS[hookName].hooks && utils.isFunction(HOOKS[hookName].hooks.run)) {
let hookInfo = HOOKS[hookName];
promiseStack.push(HOOKS[hookName].hooks.run.apply(hookInfo, [app, globalSettings]));
}
}
let hooksResultList = Array.from(HOOKS_MAP.values())
.filter(hookInfo => hookInfo._enable === true)
.sort((hookInfoPrev, hookInfoNext) => hookInfoPrev._weight === hookInfoNext._weight ? 0 : hookInfoPrev._weight > hookInfoNext._weight ? 1 : -1)
.map(hookInfo => 'hooks' in hookInfo && 'preinit' in hookInfo.hooks && utils.isFunction(hookInfo.hooks.preinit) ? injector.run(hookInfo.hooks.preinit) : null);
Promise.all(promiseStack).then(result => AppEvents.trigger('ready'), error => AppEvents.trigger('error'));
}
Promise.all(hooksResultList).then(result => {
let PromisedList = Array.from(HOOKS_MAP.values())
.filter(hookInfo => hookInfo._enable === true)
.sort((hookInfoPrev, hookInfoNext) => hookInfoPrev._weight === hookInfoNext._weight ? 0 : hookInfoPrev._weight > hookInfoNext._weight ? 1 : -1)
.map(hookInfo => 'run' in hookInfo.hooks && utils.isFunction(hookInfo.hooks.run) ? injector.run(hookInfo.hooks.run) : null);
return Promise.all(PromisedList);
})
.then(result => AppEvents.emit('ready', injector), error => { AppEvents.trigger('error', error)});
return module.exports;
}
for (let utilName in utils) module.exports[utilName] = utils[utilName];
//console.log(module.exports);
let isReady = false;
AppEvents.on('ready', result => { isReady = true; });
AppEvents.on('ready', event => { isReady = true; });
module.exports.ready = function () {
return new Promise(resolve => {
if (isReady) return resolve();
else AppEvents.on('ready', event => { isReady = true; resovle() }).on('error', e => reject(e));
});
return new Promise((resolve, reject) => isReady ? resolve() : AppEvents.on('ready', resolve).on('error', reject));
}

@@ -116,3 +212,4 @@

let hoookName = path.basename(hookPath);
addHook(hoookName, hookInfo);
addHook(hoookName, hookInfo);
return module.exports;
}
{
"name": "express-hooks",
"version": "1.0.4",
"version": "1.0.5",
"description": "Hooks for Express defined in npm modlues",

@@ -22,3 +22,9 @@ "main": "index.js",

},
"homepage": "https://github.com/westtrade/express-hooks#readme"
"homepage": "https://github.com/westtrade/express-hooks#readme",
"dependencies": {
"ini": "^1.3.4",
"lightject": "0.0.13",
"lodash": "^4.7.0",
"strip-json-comments": "^2.0.1"
}
}

@@ -16,13 +16,14 @@ 'use strict';

let hookExpress = require('../index.js');
hookExpress
.addCustomHook('./test_custom_hook')
.initApp(app)
.ready()
hookExpress.addCustomHook('./test_custom_hook');
hookExpress(app, {});
.then((injector) => { console.log('hi'); })
.catch((err) => { console.log(err) })
;
// view engine setup

@@ -29,0 +30,0 @@ app.set('views', path.join(__dirname, 'views'));

'use strict';
module.exports.run = function ($app, $settings) {
module.exports = function (app, settings) {
}
console.log('test custom hooks');
module.exports.preinit = function ($hooks_implementations) {
$hooks_implementations.get('test_custom_hook')._enable = true;
}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc