tswatch/ts/tswatch.classes.tswatch.ts

117 lines
3.3 KiB
TypeScript
Raw Normal View History

2018-10-28 00:48:43 +00:00
import * as plugins from './tswatch.plugins';
2019-05-08 22:08:40 +00:00
import * as paths from './tswatch.paths';
import * as interfaces from './interfaces';
2018-10-28 00:48:43 +00:00
2019-05-08 22:08:40 +00:00
import { Watcher } from './tswatch.classes.watcher';
2018-10-28 18:28:08 +00:00
2018-10-28 00:48:43 +00:00
export class TsWatch {
2019-05-08 22:08:40 +00:00
public watchmode: interfaces.TWatchModes;
public watcherMap = new plugins.lik.Objectmap<Watcher>();
2019-10-14 12:53:55 +00:00
public smartserve: plugins.smartserve.SmartServe;
2018-10-28 00:48:43 +00:00
2019-05-08 22:08:40 +00:00
constructor(watchmodeArg: interfaces.TWatchModes) {
2019-05-13 07:48:35 +00:00
this.watchmode = watchmodeArg;
2018-10-28 00:48:43 +00:00
}
/**
2019-05-08 22:08:40 +00:00
* starts the TsWatch instance
2018-10-28 00:48:43 +00:00
*/
2019-05-13 07:48:35 +00:00
public async start() {
2019-05-08 22:08:40 +00:00
switch (this.watchmode) {
case 'test':
2019-10-12 13:07:44 +00:00
this.watcherMap.add(
new Watcher({
filePathToWatch: paths.cwd,
commandToExecute: 'npm run test2',
timeout: null
})
);
2019-05-08 22:08:40 +00:00
break;
case 'gitzone_npm':
2019-10-12 13:07:44 +00:00
this.watcherMap.add(
new Watcher({
filePathToWatch: paths.cwd,
commandToExecute: 'npm run test',
timeout: null
})
);
break;
case 'gitzone_element':
2019-10-12 16:09:41 +00:00
// lets create a standard server
2019-10-14 12:53:55 +00:00
this.smartserve = new plugins.smartserve.SmartServe({
2019-10-12 15:43:43 +00:00
port: 3001,
2019-10-12 15:12:50 +00:00
injectReload: true,
2019-10-12 16:09:41 +00:00
serveDir: plugins.path.join(paths.cwd, './dist_web/')
2019-10-12 15:12:50 +00:00
});
2019-10-12 13:07:44 +00:00
this.watcherMap.add(
new Watcher({
2019-10-12 14:54:03 +00:00
filePathToWatch: plugins.path.join(paths.cwd, './ts_web/'),
commandToExecute: async () => {
const tsbundle = new plugins.tsbundle.TsBundle();
const htmlHandler = new plugins.tsbundle.HtmlHandler();
2019-10-12 15:31:25 +00:00
await tsbundle.buildProduction('./ts_web/index.ts', './dist_web/bundle.js');
2019-10-12 14:54:03 +00:00
await htmlHandler.copyHtml();
},
2019-10-12 13:07:44 +00:00
timeout: null
})
);
2019-05-08 22:08:40 +00:00
break;
case 'gitzone_website':
2019-05-13 07:48:35 +00:00
this.watcherMap.add(
new Watcher({
filePathToWatch: plugins.path.join(paths.cwd, './ts/'),
2019-10-12 13:07:44 +00:00
commandToExecute: 'npm run startTs',
2019-05-13 07:48:35 +00:00
timeout: null
})
);
2019-10-12 13:07:44 +00:00
2019-05-13 07:48:35 +00:00
// client directory
2019-10-12 13:07:44 +00:00
this.watcherMap.add(
new Watcher({
filePathToWatch: plugins.path.join(paths.cwd, './ts_web/'),
commandToExecute: 'npm run build',
timeout: null
})
);
2019-05-13 07:48:35 +00:00
break;
2019-10-14 12:57:43 +00:00
case 'gitzone_service':
this.watcherMap.add(
new Watcher({
filePathToWatch: plugins.path.join(paths.cwd, './ts/'),
commandToExecute: 'npm run startTs',
timeout: null
})
);
break;
2019-05-13 07:48:35 +00:00
case 'echoSomething':
const tsWatchInstanceEchoSomething = new Watcher({
2019-10-12 15:34:05 +00:00
filePathToWatch: plugins.path.join(paths.cwd, './ts'),
2019-05-13 07:48:35 +00:00
commandToExecute: 'npm -v',
2019-05-08 22:08:40 +00:00
timeout: null
});
2019-05-13 07:48:35 +00:00
this.watcherMap.add(tsWatchInstanceEchoSomething);
2019-05-08 22:08:40 +00:00
break;
default:
break;
2018-10-28 00:48:43 +00:00
}
2019-05-08 22:08:40 +00:00
this.watcherMap.forEach(async watcher => {
await watcher.start();
});
2019-10-14 12:53:55 +00:00
if (this.smartserve) {
await this.smartserve.start();
}
2018-10-28 00:48:43 +00:00
}
/**
2019-05-08 22:08:40 +00:00
* stops the execution of any active Watchers
2018-10-28 00:48:43 +00:00
*/
2019-05-13 07:48:35 +00:00
public async stop() {
2019-10-14 12:53:55 +00:00
if (this.smartserve) {
await this.smartserve.stop();
}
2019-05-08 22:08:40 +00:00
this.watcherMap.forEach(async watcher => {
await watcher.stop();
2019-05-13 07:48:35 +00:00
});
2018-10-28 00:48:43 +00:00
}
}