示例#1
0
 getPdf = Q.promise(function(resolve) {
   var pdf = file + '.pdf';
   Q.nfcall(tool.office2pdf, file, pdf).then(function() {
     resolve(pdf);
   });
 });
示例#2
0
文件: make.js 项目: kwangkim/CindyJS
 .fcall(function() {
     if (!doClean) return;
     console.log("Deleting build directory");
     return Q.nfcall(rimraf, "build");
 })
 }).map(function (file) {
     return Q.nfcall(fs.readFile, repositoryDir + '/' + file, "utf-8").then(function (content) {
         return {fileName: file, content: content};
     })
 })
示例#4
0
 .then(function () {
     return Q.nfcall(fs.readFile, metaFile);
 })
示例#5
0
文件: bin.js 项目: n6g7/node-cpdf
function cpdf(action, args) {
  let command = `${cpdfBinPath} ${args}`;
  debug(`${action} with command ${command}`);

  return Q.nfcall(childProcess.exec, command);
}
示例#6
0
文件: pfs.js 项目: gbevan/partout
Pfs.prototype.pReadFile = function (file, options) {
  return Q.nfcall(fs.readFile, file, options);
};
示例#7
0
 Q.allSettled(queries.map(function (query) {
     return Q.nfcall(db.query, query);
 })).then(function () {
function Project(e,n){this._config=defaultConfig(e),this._logger=n||new Logger,this._manager=new Manager(this._config,this._logger),this._options={}}var glob=require("glob"),path=require("path"),fs=require("graceful-fs"),Q=require("q"),mout=require("mout"),rimraf=require("rimraf"),endpointParser=require("bower-endpoint-parser"),Logger=require("bower-logger"),Manager=require("./Manager"),defaultConfig=require("../config"),semver=require("../util/semver"),md5=require("../util/md5"),createError=require("../util/createError"),readJson=require("../util/readJson"),validLink=require("../util/validLink"),scripts=require("./scripts");Project.prototype.install=function(e,n,t){var r=this,o=[],i={},s=[];return this._working?Q.reject(createError("Already working","EWORKING")):(this._options=n||{},this._config=t||{},this._working=!0,this._analyse().spread(function(n,t){if(!r._jsonFile&&0===e.length)throw createError("No bower.json present","ENOENT");return r.walkTree(t,function(e,n){e.incompatible?s.push(e):e.missing||e.different||r._config.force?o.push(e):i[n]=e},!0),e=e||[],e.forEach(function(e){e.newly=!0,o.push(e)}),r._bootstrap(o,i,s)}).then(function(){return r._manager.preinstall(r._json)}).then(function(){return r._manager.install(r._json)}).then(function(n){return(r._options.save||r._options.saveDev)&&e.forEach(function(e){var n;n=endpointParser.decomposed2json(e),r._options.save&&(r._json.dependencies=mout.object.mixIn(r._json.dependencies||{},n)),r._options.saveDev&&(r._json.devDependencies=mout.object.mixIn(r._json.devDependencies||{},n))}),r.saveJson().then(function(){return r._manager.postinstall(r._json).then(function(){return n})})}).fin(function(){r._installed=null,r._working=!1}))},Project.prototype.update=function(e,n){var t=this,r=[],o={},i=[];return this._working?Q.reject(createError("Already working","EWORKING")):(this._options=n||{},this._working=!0,this._analyse().spread(function(n,s,a){return e?(e.forEach(function(e){if(!a[e])throw createError("Package "+e+" is not installed","ENOTINS",{name:e})}),t.walkTree(s,function(n,t){return-1!==e.indexOf(t)?(n.linked?r.push.apply(r,mout.object.values(n.dependencies)):r.push(n),!1):void 0},!0),t.walkTree(s,function(e,n){e.missing||e.different?r.push(e):e.incompatible?i.push(e):o[n]=e},!0)):t.walkTree(s,function(e){return e.linked?r.push.apply(r,mout.object.values(e.dependencies)):r.push(e),!1},!0),t._bootstrap(r,o,i).then(function(){return t._manager.preinstall(t._json)}).then(function(){return t._manager.install(t._json)}).then(function(e){return t.saveJson().then(function(){return t._manager.postinstall(t._json).then(function(){return e})})})}).fin(function(){t._installed=null,t._working=!1}))},Project.prototype.uninstall=function(e,n){var t=this,r={};return this._working?Q.reject(createError("Already working","EWORKING")):(this._options=n||{},this._working=!0,this._analyse().spread(function(n,o,i){var s=Q.resolve();return e.forEach(function(n){var a=i[n];return!a||a.missing?void(r[n]=null):void(s=s.then(function(){var i,s,u,c=[];if(t.walkTree(o,function(e,t){n===t&&c.push.apply(c,mout.object.values(e.dependants))},!0),c=mout.array.unique(c),c=c.filter(function(n){return!n.root&&-1===e.indexOf(n.name)}),!c.length||t._config.force)return void(r[n]=a.canonicalDir);if(u=c.map(function(e){return e.name}),u.sort(function(e,n){return e.localeCompare(n)}),u=mout.array.unique(u),c=c.map(function(e){return t._manager.toData(e)}),i=u.join(", ")+" depends on "+a.name,s={name:a.name,dependants:c},!t._config.interactive)throw createError(i,"ECONFLICT",{data:s});return t._logger.conflict("mutual",i,s),Q.nfcall(t._logger.prompt.bind(t._logger),{type:"confirm",message:"Continue anyway?","default":!0}).then(function(t){t?r[n]=a.canonicalDir:mout.array.remove(e,n)})}))}),s}).then(function(){return t._removePackages(r)}).fin(function(){t._installed=null,t._working=!1}))},Project.prototype.getTree=function(e){return this._options=e||{},this._analyse().spread(function(e,n,t){var r=[],o=["missing","extraneous","different","linked"];return n=this._manager.toData(n,o),this.walkTree(n,function(e){var n,t=e.endpoint.target;if(e.pkgMeta&&semver.validRange(t)){if(n=e.pkgMeta.version,!n&&"*"===t)return;n&&semver.satisfies(n,t)||(e.incompatible=!0)}},!0),mout.object.forOwn(t,function(e){e.extraneous&&r.push(this._manager.toData(e,o))},this),t=mout.object.map(t,function(e){return this._manager.toData(e,o)},this),[n,t,r]}.bind(this))},Project.prototype.walkTree=function(e,n,t){var r,o,i=mout.object.values(e.dependencies);for(t===!0&&(t=[]);i.length;)e=i.shift(),r=n(e,e.endpoint?e.endpoint.name:e.name),r!==!1&&(o=mout.object.values(e.dependencies),t&&(o=o.filter(function(e){return!mout.array.find(t,function(n){return e.endpoint?mout.object.equals(e.endpoint,n.endpoint):e.name===n.name&&e.source===n.source&&e.target===n.target})}),t.push.apply(t,o)),i.unshift.apply(i,o))},Project.prototype.saveJson=function(e){var n,t=JSON.stringify(this._json,null,"  ")+"\n",r=md5(t);return r===this._jsonHash?Q.resolve():this._jsonFile||e?(n=this._jsonFile||path.join(this._config.cwd,"bower.json"),Q.nfcall(fs.writeFile,n,t).then(function(){return this._jsonHash=r,this._jsonFile=n,this._json}.bind(this))):(this._logger.warn("no-json","No bower.json file to save to, use bower init to create one"),Q.resolve())},Project.prototype.hasJson=function(){return this._readJson().then(function(e){return e?this._jsonFile:!1}.bind(this))},Project.prototype.getJson=function(){return this._readJson()},Project.prototype.getManager=function(){return this._manager},Project.prototype.getPackageRepository=function(){return this._manager.getPackageRepository()},Project.prototype._analyse=function(){return Q.all([this._readJson(),this._readInstalled(),this._readLinks()]).spread(function(e,n,t){var r,o=mout.lang.deepClone(e);return r={name:e.name,source:this._config.cwd,target:e.version||"*",pkgMeta:o,canonicalDir:this._config.cwd,root:!0},mout.object.mixIn(n,t),o.dependencies=o.dependencies||{},o.devDependencies=o.devDependencies||{},mout.object.forOwn(n,function(e,n){var t=e.pkgMeta,r=o.dependencies[n]||o.devDependencies[n];!r&&t&&t._direct&&(e.extraneous=!0,o.dependencies[n]=e.linked?t.version||"*":(t._originalSource||t._source)+"#"+t._target)}),this._restoreNode(r,n,"dependencies"),this._options.production||this._restoreNode(r,n,"devDependencies"),mout.object.forOwn(n,function(e,t){e.dependants||(e.extraneous=!0,this._restoreNode(e,n,"dependencies"),r.dependencies[t]=e)},this),delete n[e.name],[e,r,n]}.bind(this))},Project.prototype._bootstrap=function(e,n,t){var r=mout.object.map(this._installed,function(e){return e.pkgMeta});return this._json.resolutions=this._json.resolutions||{},this._manager.configure({targets:e,resolved:n,incompatibles:t,resolutions:this._json.resolutions,installed:r,forceLatest:this._options.forceLatest}).resolve().then(function(){mout.object.size(this._json.resolutions)||delete this._json.resolutions}.bind(this))},Project.prototype._readJson=function(){var e=this;return this._json?Q.resolve(this._json):this._json=readJson(this._config.cwd,{assume:{name:path.basename(this._config.cwd)||"root"}}).spread(function(n,t,r){var o;return t&&e._logger.warn("deprecated","You are using the deprecated "+t+" file"),r||(e._jsonFile=path.join(e._config.cwd,t?t:"bower.json")),o=JSON.stringify(n,null,"  ")+"\n",e._jsonHash=md5(o),e._json=n})},Project.prototype._readInstalled=function(){var e,n=this;return this._installed?Q.resolve(this._installed):(e=path.join(this._config.cwd,this._config.directory),this._installed=Q.nfcall(glob,"*/.bower.json",{cwd:e,dot:!0}).then(function(t){var r,o={};return r=t.map(function(n){var t=path.dirname(n),r=path.join(e,n);return readJson(r).spread(function(e){o[t]={name:t,source:e._originalSource||e._source,target:e._target,canonicalDir:path.dirname(r),pkgMeta:e}})}),Q.all(r).then(function(){return n._installed=o})}))},Project.prototype._readLinks=function(){var e,n=this;return e=path.join(this._config.cwd,this._config.directory),Q.nfcall(fs.readdir,e).then(function(t){var r,o={};return r=t.map(function(t){var r=path.join(e,t);return validLink(r).spread(function(e,t){var i;if(!e)return void(t&&n._logger.debug("read-link","Link "+r+" is invalid",{filename:r,error:t}));if(e.isDirectory())return i=path.basename(r),readJson(r,{assume:{name:i}}).spread(function(e,t){t&&n._logger.warn("deprecated","Package "+i+" is using the deprecated "+t),e._direct=!0,o[i]={name:i,source:r,target:"*",canonicalDir:r,pkgMeta:e,linked:!0}})})}),Q.all(r).then(function(){return o})},function(e){if("ENOENT"!==e.code)throw e;return{}})},Project.prototype._removePackages=function(e){var n=this,t=[];return scripts.preuninstall(n._config,n._logger,e,n._installed,n._json).then(function(){return mout.object.forOwn(e,function(e,r){var o;e?(o=Q.nfcall(rimraf,e),n._logger.action("uninstall",r,{name:r,dir:e})):(o=Q.resolve(),n._logger.warn("not-installed","'"+r+"' cannot be uninstalled as it is not currently installed",{name:r})),n._options.save&&n._json.dependencies&&(o=o.then(function(){delete n._json.dependencies[r]})),n._options.saveDev&&n._json.devDependencies&&(o=o.then(function(){delete n._json.devDependencies[r]})),t.push(o)}),Q.all(t)}).then(function(){return n.saveJson()}).then(function(){return mout.object.filter(e,function(e){return!!e})})},Project.prototype._restoreNode=function(e,n,t,r){var o;e.missing||(e.dependencies=e.dependencies||{},e.dependants=e.dependants||{},r=r||{},o=mout.object.filter(e.pkgMeta[t],function(n,t){return!r[e.name+":"+t]}),mout.object.forOwn(o,function(t,o){var i,s,a,u=n[o],c=endpointParser.json2decomposed(o,t);u?(s=u.linked||!u.missing&&c.target===u.pkgMeta._target,s?(i=u,mout.object.mixIn(u,c)):(i=c,u.missing?i.missing=!0:(i.pkgMeta=u.pkgMeta,i.canonicalDir=u.canonicalDir,i.incompatible=!0)),e.root&&s&&(a=mout.object.get(u,"pkgMeta._originalSource"),a&&a!==c.source&&(i.different=!0))):(n[o]=i=c,i.missing=!0),e.dependencies[o]=i,r[e.name+":"+o]=!0,i.dependants=i.dependants||{},i.dependants[e.name]=mout.object.mixIn({},e),this._restoreNode(i,n,"dependencies",r),u&&i!==u&&this._restoreNode(u,n,"dependencies",r)},this))},module.exports=Project;
示例#9
0
 return Q.all(files.map(f => {
   return Q.nfcall(fs.readFile, f, { encoding: "utf8" });
 })).then(sources => {
示例#10
0
 this.unlink = function() {
     return Q.nfcall(fs.unlink, this.root);
 };
示例#11
0
 this.isSymlink = function() {
     return Q.nfcall(fs.lstat, this.root).then(function(stats) {
         return stats.isSymbolicLink();
     });
 };
示例#12
0
    this.optimizeClient = function(force) {
        var that = this;
        var d = Q.defer();

        if (!this.isClientside()
        || (this.isOptmized() && !force)) {
            return Q(this);
        }

        // R.js bin
        var rjs = path.resolve(__dirname, "../../node_modules/.bin/r.js");

        // Base directory for the addon
        var addonPath = this.root;

        // Path to the require-tools
        var requiretoolsPath = path.resolve(__dirname, "../../client/build/static/require-tools");

        // Base main
        var main = this.infos.client.main;

        // Output file
        var output = path.resolve(addonPath, "addon-built.js");

        // Build config (todo: use this config for the command)
        var optconfig = {
            'baseUrl': addonPath,
            'name': main,
            'out': output,
            'paths': {
                'require-tools': requiretoolsPath
            },
            'optimize': "none",
            'map': {
                '*': {
                    'css': "require-tools/css/css",
                    'less': "require-tools/less/less",
                    'text': "require-tools/text/text"
                }
            }
        };

        var command = rjs+" -o baseUrl="+addonPath+" paths.require-tools="+requiretoolsPath+" name="+main+" map.*.css=require-tools/css/css map.*.less=require-tools/less/less map.*.text=require-tools/text/text out="+output;

        // Run optimization
        logger.log("Optimizing", this.infos.name);
        return Q.nfcall(fs.unlink, output).fail(function() {
            return Q();
        }).then(function() {
            return exec(command)
        }).then(function() {
            logger.log("Finished", that.infos.name, "optimization");
            return Q(that);
        }, function(err) {
            logger.error("error for optimization of", that.infos.name);
            logger.error("command=",command);
            logger.error(err.stdout);
            logger.exception(err, false);
            return Q.reject(err);
        });
    };
PackageRepository.prototype.clear = function () {
    return Q.all([
        this._resolveCache.clear(),
        Q.nfcall(this._registryClient.clearCache.bind(this._registryClient))
    ]);
};
PackageRepository.prototype.eliminate = function (pkgMeta) {
    return Q.all([
        this._resolveCache.eliminate(pkgMeta),
        Q.nfcall(this._registryClient.clearCache.bind(this._registryClient), pkgMeta.name)
    ]);
};
示例#15
0
文件: pfs.js 项目: gbevan/partout
Pfs.prototype.pChmod = function (path, mode) {
  return Q.nfcall(fs.chmod, path, mode);
};
示例#16
0
文件: pfs.js 项目: gbevan/partout
Pfs.prototype.pHashFile = function (f) {
  return Q.nfcall(this.hashFile, f, true);
};
示例#17
0
文件: pfs.js 项目: gbevan/partout
Pfs.prototype.pReadDir = function (path) {
  return Q.nfcall(fs.readdir, path);
};
示例#18
0
文件: pfs.js 项目: gbevan/partout
Pfs.prototype.pOpen = function (path, flags, mode) {
  return Q.nfcall(fs.open, path, flags, mode);
};
示例#19
0
文件: pfs.js 项目: gbevan/partout
Pfs.prototype.pWriteFile = function (file, data, options) {
  return Q.nfcall(fs.writeFile, file, data, options);
};
示例#20
0
文件: pfs.js 项目: gbevan/partout
Pfs.prototype.pClose = function (fd) {
  return Q.nfcall(fs.close, fd);
};
示例#21
0
    init: function(resourceTemplate) {
        var swaggerFile = './swagger.json';

        packageJson = JSON.parse(fs.readFileSync('package.json', 'utf8'));
        /*
            - If "swagger-lamba" node is null, create it.
            - If "swagger-lamba.gatewayName" is null, prompt the user for a name, default to the name in package.json
            - If "swagger-lambda.restApi" is null, create an API for the gateway name, store the restApi value in this key

        */
        if (packageJson['swagger-lamba'] == null) {
            packageJson['swagger-lamba'] = {};
        }

        if (packageJson['swagger-lamba'].stages == null) {
            packageJson['swagger-lamba'].stages = {};
        }

        if (packageJson['swagger-lamba'].stages.local == null) {
            packageJson['swagger-lamba'].stages.local = {
                apiKey: '1234567890'
            };
        }



        fs.writeFileSync('package.json', JSON.stringify(packageJson, null, '\t', 'utf8'));

        var promise = Q();

        if (packageJson['swagger-lamba'].name == null || packageJson['swagger-lamba'].restApiId == null) {
            var schema = {
                properties: {
                    apiName: {
                        pattern: /^[a-zA-Z\s\-]+$/,
                        message: 'Name must be only letters, spaces, or dashes',
                        required: true,
                        default: packageJson.name
                    },
                    apiDescription: {
                        message: 'Describe the purpose of the API.',
                        required: true,
                        default: packageJson.name
                    },
                    bucket: {
                        message: 'S3 Bucket Name',
                        required: true,
                        default: process.env.BUCKET_NAME
                    },
                    awsCustomerId: {
                        message: 'AWS Customer Id',
                        required: true,
                        default: process.env.AWS_CUSTOMER_ID
                    },
                    "lambda-role": {
                        message: 'AWS lambda role',
                        required: false
                    }
                }
            };

            prompt.start();

            //
            // Get two properties from the user: email, password
            //
            promise = Q.nfcall(prompt.get, schema).then(function(result) {
                packageJson['swagger-lamba'].name = result.apiName;
                packageJson['swagger-lamba'].description = result.apiDescription;
                packageJson['swagger-lamba'].bucket = result.bucket;
                packageJson['swagger-lamba'].customerId = result.awsCustomerId;


                var rolePromise;
                if (result['lambda-role'] == null || result['lambda-role'] == '') {
                    rolePromise = lambda.createRole('swaggy-lambda-basic')
                } else {
                    rolePromise = Q(result['lambda-role'])
                }

                return rolePromise.then(function(roleArn) {

                    packageJson['swagger-lamba']['lambda-role'] = roleArn;



                    return apiGateway.initializeGateway(result.apiName, result.apiDescription)

                });


            }).then(function(result) {
                console.log('API Gateway Created');
                packageJson['swagger-lamba'].restApiId = result.id;
                fs.writeFileSync('package.json', JSON.stringify(packageJson, null, '\t', 'utf8'));
            }).catch(function(err) {
                console.log('API Gateway Created error', err);
            });


        }

        promise.done(function(lastItem) {
            try {
                var swaggerAccess = fs.accessSync(swaggerFile);
                //           console.log('Using existing swagger file');
            } catch (err) {
                // file dows not exist, put a placeholder file there
                //        console.log('Initializing swagger file');

                fs.writeFileSync(swaggerFile, JSON.stringify(sampleSwagger, null, '\t') + '\n', 'utf8');
            }

            try {
                var swaggerAccess = fs.accessSync('api/');

                //   console.log('Using api folder');
            } catch (err) {
                // file dows not exist, put a placeholder file there
                //  console.log('Initializing api folder');
                fs.mkdirSync('api');
            }

            wrench.rmdirSyncRecursive('swagger-ui', true);

            // copy the swagger-ui folder
            wrench.copyDirSyncRecursive(__dirname + '/swagger-ui', 'swagger-ui', {
                forceDelete: false
            });

            var utilJs = fs.readFileSync(__dirname + '/util.js', 'utf8');

            fs.writeFileSync('util.js', utilJs, 'utf8');

            var lambdaInvokeJs = fs.readFileSync(__dirname + '/lambda-invoke.js', 'utf8');

            fs.writeFileSync('lambda-invoke.js', lambdaInvokeJs, 'utf8');

            var expressApp = fs.readFileSync(__dirname + '/app.template.js', 'utf8');

            fs.writeFileSync('app.js', expressApp, 'utf8');

            var indexApp = fs.readFileSync(__dirname + '/index.template.js', 'utf8');

            fs.writeFileSync('index.js', indexApp, 'utf8');

            var swaggerDef = util.parseSwaggerFile('swagger.json');
            var resources = swaggerDef.resources;




            for (var resource in resources) {

                try {
                    stats = fs.statSync('api/' + resource + '.js');
                } catch (e) {



                    var resourceJs = fs.readFileSync(__dirname + '/' + resourceTemplate + '.js', 'utf8');

                    var template = Handlebars.compile(resourceJs);

                    var path = swaggerDef.paths

                    var data = {
                        "resourceName": resource,
                        "methods": resources[resource].methods
                    };

                    for (var item in data.methods) {
                        var p = data.methods[item];
                        var m = (item == 'list') ? 'get' : item;

                        data.methods[item] = path[p][m]
                    }

                    console.log('data:', data);

                    var result = template(data);
                    fs.writeFileSync('api/' + resource + '.js', result, 'utf8');
                }
            }


            try {
                stats = fs.statSync('contextExtensions.js');
            } catch (e) {
                var contextExtensions = fs.readFileSync(__dirname + '/contextExtensions.js', 'utf8');
                fs.writeFileSync('contextExtensions.js', contextExtensions, 'utf8');
            }

        });
    }
示例#22
0
文件: pfs.js 项目: gbevan/partout
Pfs.prototype.pMkdir = function (path, mode) {
  return Q.nfcall(fs.mkdir, path, mode);
};
示例#23
0
 .then(function () {
     return Q.nfcall(fs.readFile, path.join(tempDir, '.bower.json'));
 }, null)
示例#24
0
文件: pfs.js 项目: gbevan/partout
Pfs.prototype.pRmdir = function (path) {
  return Q.nfcall(fs.rmdir, path);
};
示例#25
0
 function execPromise(cmd) {
     var cmd_ = cmd.cmd + ' ' + cmd.args.join(' ');
     var r = Q.nfcall(child_process.exec, cmd_);
     return r;
 }
示例#26
0
文件: pfs.js 项目: gbevan/partout
Pfs.prototype.pUnlink = function (path) {
  return Q.nfcall(fs.unlink, path);
};
 service.cloneRepo = function (repoUrl, repoDir) {
     return Q.nfcall(childProcess.exec, 'git clone ' + repoUrl + ' ' + repoDir, {cwd: process.cwd, timeout: 30000})
 };
示例#28
0
文件: pfs.js 项目: gbevan/partout
Pfs.prototype.pSymlink = function (target, path, type) {
  return Q.nfcall(fs.symlink, target, path, type);
};
 service.loadFileFromRepo = function (fileName) {
     checkRepoInitialized();
     return Q.nfcall(fs.readFile, repositoryDir + '/' + fileName, "utf-8");
 };
示例#30
0
/**
 * Boot up the framework with the models found in basedir.
 * @param app the application server.
 * @param basedir the base directory for the models.
 * @param completeFn a function to be executed when booting is complete.
 **/
function bootModels(app, plugin, config, completeFn) {
    var bootModelsDefer = Q.defer();
    var basedir = plugin.baseDir;
    logger.log('trace', 'booting models for ' + basedir);
    Q.nfcall(fs.readdir, basedir + '/models')
        .then(function(files) {
            if (_.isNull(files) || _.isUndefined(files)) {
                logger.log('warning', "No models were found.");
                bootModelsDefer.resolve();
            } else if (files.length <= 0) {
                logger.log('warning', "No models were found.");
                // completeFn();            
                bootModelsDefer.resolve();    
            } else {
                var filesIndex = files.length;
                files.forEach(function(file) {
                    fs.stat(basedir + '/models/' + file, function(err, stats) {
                        if (err) {
                            logger.log('trace', "error stating file " + file + ": " + err);
                            bootModelsDefer.resolve();
                        }
                        if (stats.isFile()) {
                            logger.log('trace', "model: " + file);
                            bootModel(app, basedir, file, function() {
                                filesIndex--;
                                if (filesIndex <= 0) {
                                    bootModelsDefer.resolve();
                                }
                            });
                        } else {
                            filesIndex--;
                            if (filesIndex <= 0) {
                                bootModelsDefer.resolve();
                            }
                        }
                    });
                });
                logger.log("trace", "files = " + files.join());
            }
        }, function(err) {
            logger.log('warning', err);
            bootModelsDefer.resolve();
        });
    // fs.readdir(basedir + '/models', function(err, files) {
    //     if (err) { 
    //         logger.log('warning', err);
    //         bootModelsDefer.resolve(err);
    //     } else if (_.isNull(files) || _.isUndefined(files)) {
    //         logger.log('warning', "No models were found.");
    //         bootModelsDefer.resolve();
    //         // completeFn();            
    //     } else if (files.length <= 0) {
    //         logger.log('warning', "No models were found.");
    //         // completeFn();            
    //         bootModelsDefer.resolve();
    //     } else {
    //         var filesIndex = files.length;
    //         files.forEach(function(file) {
    //             fs.stat(basedir + '/models/' + file, function(err, stats) {
    //                 if (stats.isFile()) {
    //                     logger.log('trace', "model: " + file);
    //                     bootModel(app, basedir, file, function() {
    //                         filesIndex--;
    //                         if (filesIndex <= 0) {
    //                             bootModelsDefer.resolve();
    //                         }
    //                     });
    //                 } else {
    //                     filesIndex--;
    //                     if (filesIndex <= 0) {
    //                         bootModelsDefer.resolve();
    //                     }
    //                 }
    //             });
    //         });
    //     }
    // });
    return bootModelsDefer.promise;
}