Skip to content

Commit

Permalink
revert to callbacks
Browse files Browse the repository at this point in the history
  • Loading branch information
gaspaonrocks committed Jan 23, 2018
1 parent 2a2bd37 commit f2c3e4e
Show file tree
Hide file tree
Showing 10 changed files with 63 additions and 111 deletions.
2 changes: 0 additions & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
dist: precise
sudo: required
language: node_js
services: mongodb
cache:
Expand Down
2 changes: 1 addition & 1 deletion dist/global-modules-indexer/index.d.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
declare let GlobalModulesIndexer: (context: string, dirName: string) => Promise<object>;
declare let GlobalModulesIndexer: (context: string, dirName: string) => object;
export default GlobalModulesIndexer;
67 changes: 25 additions & 42 deletions dist/global-modules-indexer/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
5 changes: 1 addition & 4 deletions dist/route-mapper/map.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
2 changes: 1 addition & 1 deletion dist/utils/utils.d.ts
Original file line number Diff line number Diff line change
@@ -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;
4 changes: 2 additions & 2 deletions dist/utils/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
};
78 changes: 28 additions & 50 deletions src/global-modules-indexer/index.ts
Original file line number Diff line number Diff line change
@@ -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<string> = [];
let dirQueue: Array<string> = [];

let getPathList = (inputDir: string): Promise<any> => {
return new Promise<any>((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<any> => {
return new Promise<any>((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<string>): Promise<any> => {
return Promise.all(pathList.map(path => getStat(path)));
}

let processItemList = (): Promise<any> | Array<string> => {
// if queue, process next item recursive
while (dirQueue.length > 0) return readDir(dirQueue.shift());

return fileQueue;
}

let StartIt = (inputDir): Promise<any> => {
return readDir(inputDir);
}

let readDir = (inputDir): Promise<any> => {
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<object> => {
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;
6 changes: 1 addition & 5 deletions src/route-mapper/map.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 => {
Expand Down
4 changes: 2 additions & 2 deletions src/utils/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
};
4 changes: 2 additions & 2 deletions test/indexer.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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');
});
});

0 comments on commit f2c3e4e

Please sign in to comment.