UNPKG

@mvp-rockets/namma-generator

Version:

A generator to generate mvp-rockets projects

78 lines (68 loc) 2.38 kB
const { readdirSync, statSync, readFileSync } = require('fs'); const path = require('path'); module.exports = class AutoImportApis { includes = false; apiFiles = []; constructor(options = {}, socket = {}) { const { includes, toload = ['socket.js'] } = options; if (includes && Array.isArray(includes)) { this.includes = includes; } this.toLoad = toload; this.scanApp().forEach((source) => this.getAllApiFiles(source)); this.apiFiles.forEach((toRequire) => { if (readFileSync(toRequire).length === 0) { console.log('\x1b[33m%s\x1b[0m', `[Warning]: ${source} is empty. Please check!`); } else { console.log(`[Loading]: ${toRequire}`, socket.id) } require(toRequire)(socket); }); } checkFileToLoad(filename) { let toLoad = false; this.toLoad.forEach((item) => { if (filename.indexOf(item) !== -1) { toLoad = true; } }); return toLoad; } checkDirectoryToLoad(dirName) { let toLoad = false; if (Array.isArray(this.includes)) { this.includes.forEach((item) => { if (dirName.indexOf(item) !== -1) { toLoad = true; } }); } return toLoad; } scanApp() { const rootDirectories = []; readdirSync(path.resolve()) .forEach((item) => { item = path.join(path.resolve(), item); const stats = statSync(item); if (!stats.isDirectory() && this.checkFileToLoad(item)) { this.apiFiles.push(item); } else if (stats.isDirectory() && this.checkDirectoryToLoad(item)) { rootDirectories.push(item); } }); return rootDirectories; } getAllApiFiles(source) { const stats = statSync(source); if (!stats.isDirectory() && this.checkFileToLoad(source)) { this.apiFiles.push(source); } else if (stats.isDirectory() && this.checkDirectoryToLoad(source)) { readdirSync(source) .map((item) => `${source}/${item}`) .forEach((item) => this.getAllApiFiles(item)); } } };