diff --git a/.travis.yml b/.travis.yml index d45abfa..538fd12 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,3 @@ -dist: precise -sudo: required language: node_js services: mongodb cache: diff --git a/dist/global-modules-indexer/index.d.ts b/dist/global-modules-indexer/index.d.ts index 08cfe0e..86a6ba3 100644 --- a/dist/global-modules-indexer/index.d.ts +++ b/dist/global-modules-indexer/index.d.ts @@ -1,2 +1,2 @@ -declare let GlobalModulesIndexer: (context: string, dirName: string) => Promise; +declare let GlobalModulesIndexer: (context: string, dirName: string) => object; export default GlobalModulesIndexer; diff --git a/dist/global-modules-indexer/index.js b/dist/global-modules-indexer/index.js index b2e14bf..9cdab23 100644 --- a/dist/global-modules-indexer/index.js +++ b/dist/global-modules-indexer/index.js @@ -4,53 +4,36 @@ const fs = require("fs"); const path = require("path"); const utils_1 = require("../utils/utils"); let utils = utils_1.default; -let fileQueue = []; -let dirQueue = []; -let getPathList = (inputDir) => { - return new Promise((resolve, reject) => { - fs.readdir(inputDir, (err, content) => { - if (err) - reject(err); - resolve(content.map((item) => path.resolve(inputDir, item))); - }); +let modulesIndex = {}; +let startRecursiveCheck = (filePath) => { + fs.readdir(filePath, (err, content) => { + if (err) + throw new Error(err.message); + else + content.forEach(e => { + let name = e.replace(/.(j|t)s/, ''); + modulesIndex[name] = {}; + fs.stat(filePath + '/' + e, (err, result) => { + result.isFile() ? modulesIndex[name] = utils.requireMyTsFile(e, filePath) : nextChecks(name, filePath + '/' + e); + }); + }); }); }; -let getStat = (path) => { - return new Promise((resolve, reject) => { - fs.stat(path, (err, result) => { - if (err) - reject(err); - resolve(result.isFile() ? fileQueue.push(path) : dirQueue.push(path)); - }); +let nextChecks = (name, filePath) => { + fs.readdir(filePath, (err, content) => { + if (err) + throw new Error(err.message); + else + content.forEach(e => { + fs.stat(filePath + '/' + e, (err, result) => { + result.isFile() ? modulesIndex[name] = utils.requireMyTsFile(e, filePath) : nextChecks(name, filePath + '/' + e); + }); + }); }); }; -let getAllStat = (pathList) => { - return Promise.all(pathList.map(path => getStat(path))); -}; -let processItemList = () => { - // if queue, process next item recursive - while (dirQueue.length > 0) - return readDir(dirQueue.shift()); - return fileQueue; -}; -let StartIt = (inputDir) => { - return readDir(inputDir); -}; -let readDir = (inputDir) => { - return getPathList(inputDir) - .then(getAllStat) - .then(processItemList); -}; -let setUpModules = (fileList) => { - let modulesIndex2 = {}; - fileList.forEach(e => { - let name = e.split('\\').pop().replace(/.(j|t)s/, ''); - modulesIndex2[name] = utils.requireMyTsFile(e); - }); - return modulesIndex2; -}; let GlobalModulesIndexer = (context, dirName) => { let absolutePath = path.join(context, dirName); - return StartIt(absolutePath).then(setUpModules); + startRecursiveCheck(absolutePath); + return modulesIndex; }; exports.default = GlobalModulesIndexer; diff --git a/dist/route-mapper/map.js b/dist/route-mapper/map.js index f772640..43f0f7e 100644 --- a/dist/route-mapper/map.js +++ b/dist/route-mapper/map.js @@ -8,10 +8,7 @@ function default_1(context, config, dirName) { let router = express_1.Router(); let handler = new error_handler_1.default(); let utils = utils_1.default; - let modulesIndex; - index_1.default(context, dirName).then(result => { - modulesIndex = result; - }); + let modulesIndex = index_1.default(context, dirName); const RoutesMapping = { 'GET': (router, path) => { let options = utils.reqParamsOptions(path); diff --git a/dist/utils/utils.d.ts b/dist/utils/utils.d.ts index 405a751..cd83c9b 100644 --- a/dist/utils/utils.d.ts +++ b/dist/utils/utils.d.ts @@ -1,6 +1,6 @@ declare const _default: { hasReqParams: (path: string) => boolean; reqParamsOptions: (path: string) => any; - requireMyTsFile: (path: string) => Function; + requireMyTsFile: (fileName: string, filePath: string) => Function; }; export default _default; diff --git a/dist/utils/utils.js b/dist/utils/utils.js index a8d4382..408f110 100644 --- a/dist/utils/utils.js +++ b/dist/utils/utils.js @@ -18,7 +18,7 @@ exports.default = { } return config; }, - requireMyTsFile: (path) => { - return path.match(/.ts$/) ? require(path).default : require(path); + requireMyTsFile: (fileName, filePath) => { + return fileName.match(/.ts$/) ? require(filePath + '/' + fileName).default : require(filePath + '/' + fileName); } }; diff --git a/src/global-modules-indexer/index.ts b/src/global-modules-indexer/index.ts index 7b8b3c9..cbba667 100644 --- a/src/global-modules-indexer/index.ts +++ b/src/global-modules-indexer/index.ts @@ -1,63 +1,41 @@ -import fs = require('fs'); -import path = require('path'); -import Utils from '../utils/utils'; +import * as fs from 'fs'; +import * as path from 'path'; +import Utils from '../utils/utils'; let utils = Utils; -let fileQueue: Array = []; -let dirQueue: Array = []; - -let getPathList = (inputDir: string): Promise => { - return new Promise((resolve, reject) => { - fs.readdir(inputDir, (err, content) => { - if (err) reject(err); - resolve(content.map((item) => path.resolve(inputDir, item))); - }) +let modulesIndex: object = {}; + +let startRecursiveCheck = (filePath: string): void => { + fs.readdir(filePath, (err, content) => { + if (err) throw new Error(err.message); + else content.forEach(e => { + let name = e.replace(/.(j|t)s/, ''); + modulesIndex[name] = {}; + + fs.stat(filePath + '/' + e, (err, result) => { + result.isFile() ? modulesIndex[name] = utils.requireMyTsFile(e, filePath) : nextChecks(name, filePath + '/' + e); + }); + }); }) } -let getStat = (path: string): Promise => { - return new Promise((resolve, reject) => { - fs.stat(path, (err, result) => { - if (err) reject(err); - resolve(result.isFile() ? fileQueue.push(path) : dirQueue.push(path)) - }) +let nextChecks = (name: string, filePath: string): void => { + fs.readdir(filePath, (err, content) => { + if (err) throw new Error(err.message); + else content.forEach(e => { + fs.stat(filePath + '/' + e, (err, result) => { + result.isFile() ? modulesIndex[name] = utils.requireMyTsFile(e, filePath) : nextChecks(name, filePath + '/' + e); + }); + }); }) } -let getAllStat = (pathList: Array): Promise => { - return Promise.all(pathList.map(path => getStat(path))); -} - -let processItemList = (): Promise | Array => { - // if queue, process next item recursive - while (dirQueue.length > 0) return readDir(dirQueue.shift()); - - return fileQueue; -} - -let StartIt = (inputDir): Promise => { - return readDir(inputDir); -} - -let readDir = (inputDir): Promise => { - return getPathList(inputDir) - .then(getAllStat) - .then(processItemList) -} - -let setUpModules = (fileList): object => { - let modulesIndex2 = {} - fileList.forEach(e => { - let name = e.split('\\').pop().replace(/.(j|t)s/, ''); - modulesIndex2[name] = utils.requireMyTsFile(e); - }) - return modulesIndex2 -} - -let GlobalModulesIndexer = (context: string, dirName: string): Promise => { +let GlobalModulesIndexer = (context: string, dirName: string): object => { let absolutePath = path.join(context, dirName); - return StartIt(absolutePath).then(setUpModules) + startRecursiveCheck(absolutePath); + + return modulesIndex; } export default GlobalModulesIndexer; \ No newline at end of file diff --git a/src/route-mapper/map.ts b/src/route-mapper/map.ts index a0c8366..661d83a 100644 --- a/src/route-mapper/map.ts +++ b/src/route-mapper/map.ts @@ -8,11 +8,7 @@ export default function (context: string, config: any, dirName: string): Router let handler: ErrorHandler = new ErrorHandler(); let utils = Utils; - let modulesIndex: object; - - GlobalModulesIndexer(context, dirName).then(result => { - modulesIndex = result; - }); + let modulesIndex: object = GlobalModulesIndexer(context, dirName); const RoutesMapping = { 'GET': (router: Router, path: string): void => { diff --git a/src/utils/utils.ts b/src/utils/utils.ts index 5b69097..20eea54 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -19,7 +19,7 @@ export default { return config; }, - requireMyTsFile: (path: string): Function => { - return path.match(/.ts$/) ? require(path).default : require(path); + requireMyTsFile: (fileName: string, filePath: string): Function => { + return fileName.match(/.ts$/) ? require(filePath + '/' + fileName).default : require(filePath + '/' + fileName); } }; \ No newline at end of file diff --git a/test/indexer.spec.ts b/test/indexer.spec.ts index 12c717f..3dba886 100644 --- a/test/indexer.spec.ts +++ b/test/indexer.spec.ts @@ -9,8 +9,8 @@ describe('ModulesIndexer', () => { expect(typeof Indexer, 'function'); }); - it('Indexer should return a Promise object', () => { + it('Indexer should return a module object', () => { let useCase = Indexer(__dirname, './mocks'); - expect(useCase).to.be.a('promise'); + expect(useCase).to.be.a('object'); }); }); \ No newline at end of file