UNPKG

ufilesync

Version:
70 lines (57 loc) 1.97 kB
'use strict'; const _ = require('lodash'); const rimraf = require('rimraf'); class DecoratorFactory { constructor(uSync, config, logger) { this.config = config; this.uSync = uSync; this.logger = logger; this.initDecorators(); } initDecorators() { this.decorators = { mkdirp: require('./decorator/mkdirp'), copy: require('./decorator/copy'), createWriteStream: require('./decorator/create_write_stream'), }; this.decorator = require('./decorator'); } isSupportedMethod(methodName) { if (this.config.wrapMethods.indexOf(methodName) !== -1 || this.config.supportedMethods.indexOf(methodName) !== -1) { return true; } else { return false; } } /** * Обернуть функции модуля fs в декораторы * @param fs */ wrapFs(fs) { const me = this; // "Копируем" все методы, чтобы их потом переопределить и не тронуть в самом модуле fs let fsExt = _.extend({}, fs); // Запрещаем вызов не поддерживаемых функций _.each(fsExt, function(item, functionName) { if (typeof item === 'function') { if (me.isSupportedMethod(functionName) === false) { fsExt[functionName] = function() { throw new me.uSync.exceptions.DeprecatedSyncFunctions(functionName); }; } } }); // Расширяем функции для отправки в очередь синхронизации _.each(_.uniq(me.config.wrapMethods), funcName => { if (me.decorators[funcName]) { fsExt[funcName] = new me.decorators[funcName](me.uSync, me.config, me.logger).wrap(fsExt[funcName]); } else { fsExt[funcName] = new me.decorator(funcName, me.uSync, me.config, me.logger).wrap(fsExt[funcName]); } }); fsExt.rimraf = new me.decorator('rimraf', me.uSync, me.config).wrap(rimraf); fsExt.mkdirs = fsExt.mkdirp; return fsExt; } } module.exports = DecoratorFactory;