diff --git a/package.json b/package.json index 1b4599b..28d1db3 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,8 @@ }, "devDependencies": { "chai": "^3.5.0", + "chalk": "^1.1.1", + "moment": "^2.11.1", "pragmatist": "^3.0.3" }, "dependencies": { diff --git a/src/bin/create-index.js b/src/bin/create-index.js index e1a49bf..e02b411 100644 --- a/src/bin/create-index.js +++ b/src/bin/create-index.js @@ -2,7 +2,7 @@ import yargs from 'yargs'; import { - writeIndex + writeIndexCli } from './../utilities'; let argv; @@ -11,8 +11,4 @@ argv = yargs .demand(1) .argv; -writeIndex(argv._); - -/* eslint-disable no-console */ -console.log('OK!'); -/* eslint-enable no-console */ +writeIndexCli(argv._); diff --git a/src/utilities/index.js b/src/utilities/index.js index 355b256..66da76d 100644 --- a/src/utilities/index.js +++ b/src/utilities/index.js @@ -1,8 +1,10 @@ 'create index'; export createIndexCode from './createIndexCode.js'; +export log from './log.js'; export readDirectory from './readDirectory.js'; export sortByDepth from './sortByDepth.js'; export validateTargetDirectory from './validateTargetDirectory.js'; export writeIndex from './writeIndex.js'; +export writeIndexCli from './writeIndexCli.js'; diff --git a/src/utilities/log.js b/src/utilities/log.js new file mode 100644 index 0000000..3c9ffec --- /dev/null +++ b/src/utilities/log.js @@ -0,0 +1,8 @@ +import chalk from 'chalk'; +import moment from 'moment'; + +export default (...append) => { + /* eslint-disable no-console */ + console.log(chalk.dim('[' + moment().format('HH:mm:ss') + ']'), ...append); + /* eslint-enable no-console */ +}; diff --git a/src/utilities/writeIndexCli.js b/src/utilities/writeIndexCli.js new file mode 100644 index 0000000..ef5c566 --- /dev/null +++ b/src/utilities/writeIndexCli.js @@ -0,0 +1,54 @@ +import _ from 'lodash'; +import createIndexCode from './createIndexCode'; +import fs from 'fs'; +import path from 'path'; +import validateTargetDirectory from './validateTargetDirectory'; +import readDirectory from './readDirectory'; +import sortByDepth from './sortByDepth'; +import log from './log'; +import chalk from 'chalk'; + +export default (directoryPaths) => { + let sortedDirectoryPaths; + + sortedDirectoryPaths = sortByDepth(directoryPaths); + + log('Target directories', sortedDirectoryPaths); + + _.forEach(sortedDirectoryPaths, (directoryPath) => { + validateTargetDirectory(directoryPath); + }); + + _.forEach(sortedDirectoryPaths, (directoryPath) => { + let existingIndexCode, + indexCode, + indexFilePath, + siblings; + + siblings = readDirectory(directoryPath); + + indexCode = createIndexCode(siblings); + + indexFilePath = path.resolve(directoryPath, 'index.js'); + + try { + existingIndexCode = fs.readFileSync(indexFilePath, 'utf8'); + /* eslint-disable no-empty */ + } catch (error) { + + } + /* eslint-enable no-empty */ + + fs.writeFileSync(indexFilePath, indexCode); + + if (existingIndexCode && existingIndexCode === indexCode) { + log(indexFilePath, chalk.yellow('[index have not changed]')); + } else if (existingIndexCode && existingIndexCode !== indexCode) { + log(indexFilePath, chalk.green('[updated index]')); + } else { + log(indexFilePath, chalk.green('[created index]')); + } + }); + + log('Done'); +}; diff --git a/tests/writeIndex.js b/tests/writeIndex.js index 0a0dba3..825a850 100644 --- a/tests/writeIndex.js +++ b/tests/writeIndex.js @@ -19,9 +19,11 @@ describe('writeIndex()', () => { try { fs.unlinkSync(indexFilePath); + /* eslint-disable no-empty */ } catch (error) { } + /* eslint-enable no-empty */ writeIndex([path.resolve(fixturesPath, './mixed')]);