import * as q from 'smartq'; import * as smartchok from 'smartchok'; import * as plugins from './npmts.plugins'; import * as cli from './npmts.cli'; import { INpmtsConfig } from './npmts.config'; let npmtsSmartchok: smartchok.Smartchok = null; export let run = (configArg: INpmtsConfig) => { let done = q.defer(); if (configArg.watch && npmtsSmartchok === null) { let pathsToWatch: string[] = []; for (let key in configArg.ts) { pathsToWatch.push(key); } for (let key in configArg.testTs) { pathsToWatch.push(key); } npmtsSmartchok = new smartchok.Smartchok(pathsToWatch); npmtsSmartchok.getObservableFor('change').then(changeObservableArg => { plugins.beautylog.info('now watching...'); changeObservableArg.subscribe(() => { cli.run(); }); }); npmtsSmartchok.start(); done.resolve(configArg); } else { plugins.beautylog.info('not watching'); done.resolve(configArg); } return done.promise; };