fix(core): update

This commit is contained in:
Philipp Kunz 2018-10-28 19:28:08 +01:00
parent 9c7f351998
commit 4b8bb062c7
6 changed files with 43 additions and 22 deletions

7
package-lock.json generated
View File

@ -103,7 +103,6 @@
"version": "2.0.2", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/@pushrocks/smartdelay/-/smartdelay-2.0.2.tgz", "resolved": "https://registry.npmjs.org/@pushrocks/smartdelay/-/smartdelay-2.0.2.tgz",
"integrity": "sha512-4xf6tMKwZcxBynKgXrM4SQKgeASfRvx43LUmR5DkStp26ZHAsarCXUdKJS6y8QIPygEOTOCP8we97JAcCzBuMg==", "integrity": "sha512-4xf6tMKwZcxBynKgXrM4SQKgeASfRvx43LUmR5DkStp26ZHAsarCXUdKJS6y8QIPygEOTOCP8we97JAcCzBuMg==",
"dev": true,
"requires": { "requires": {
"@pushrocks/smartpromise": "^2.0.5" "@pushrocks/smartpromise": "^2.0.5"
} }
@ -168,9 +167,9 @@
} }
}, },
"@pushrocks/smartshell": { "@pushrocks/smartshell": {
"version": "2.0.6", "version": "2.0.8",
"resolved": "https://registry.npmjs.org/@pushrocks/smartshell/-/smartshell-2.0.6.tgz", "resolved": "https://registry.npmjs.org/@pushrocks/smartshell/-/smartshell-2.0.8.tgz",
"integrity": "sha512-D48KB3DDqLfMjOXGEutqJi+v3Z4RcWacu5BJXxUwrecvd6oetbKobfmNGxeHSQPmNGb7U3ISfKwV6c5T5EZkJg==", "integrity": "sha512-OeGrJez0vSHe/E0auHNUqf7r0B3yS+pkVe6BuxdJemJx5LBRtcHuZnJCxU5pSLL8igzlTfR+jVpjKJXUMzCsrA==",
"requires": { "requires": {
"@pushrocks/smartpromise": "^2.0.5", "@pushrocks/smartpromise": "^2.0.5",
"@types/which": "^1.3.1", "@types/which": "^1.3.1",

View File

@ -8,7 +8,7 @@
"author": "Lossless GmbH", "author": "Lossless GmbH",
"license": "MIT", "license": "MIT",
"scripts": { "scripts": {
"test": "node ./cli.ts.js test", "test": "node ./cli.ts.js test --timeout 10000",
"test2": "(tstest test/)", "test2": "(tstest test/)",
"build": "(tsbuild)", "build": "(tsbuild)",
"format": "(gitzone format)" "format": "(gitzone format)"
@ -24,7 +24,8 @@
"dependencies": { "dependencies": {
"@gitzone/tsrun": "^1.1.13", "@gitzone/tsrun": "^1.1.13",
"@pushrocks/smartcli": "^3.0.6", "@pushrocks/smartcli": "^3.0.6",
"@pushrocks/smartshell": "^2.0.6", "@pushrocks/smartdelay": "^2.0.2",
"@pushrocks/smartshell": "^2.0.8",
"filewatcher": "^3.0.1" "filewatcher": "^3.0.1"
} }
} }

View File

@ -6,16 +6,18 @@ let testTsWatchInstance: tswatch.TsWatch;
tap.test('should create a valid TsWatch instance', async () => { tap.test('should create a valid TsWatch instance', async () => {
testTsWatchInstance = new tswatch.TsWatch({ testTsWatchInstance = new tswatch.TsWatch({
filePathToWatch: process.cwd(), filePathToWatch: process.cwd(),
commandToExecute: 'npm -v' commandToExecute: 'npm -v',
timeout: 1000
}); });
}); });
tap.test('should start the tswatch instance', async () => { tap.test('should start the tswatch instance', async () => {
testTsWatchInstance.start();
console.log('test executed'); console.log('test executed');
}); });
tap.test('should run abitrary commands', async () => { tap.test('should run abitrary commands', async () => {
}); });
tap.start(); tap.start();

View File

@ -1,5 +1,11 @@
import * as plugins from './tswatch.plugins'; import * as plugins from './tswatch.plugins';
export interface ITsWatchConstructorOptions {
filePathToWatch: string;
commandToExecute: string;
timeout?: number;
}
/** /**
* handles the management of watching for foes * handles the management of watching for foes
*/ */
@ -9,15 +15,10 @@ export class TsWatch {
}); });
private currentExecution: plugins.smartshell.IExecResultStreaming; private currentExecution: plugins.smartshell.IExecResultStreaming;
private watcher = plugins.fileWatcher(); private watcher = plugins.fileWatcher();
private filePathToWatch: string; private options: ITsWatchConstructorOptions;
private commandToExecute: string;
constructor(optionsArg: { constructor(optionsArg: ITsWatchConstructorOptions) {
filePathToWatch: string, this.options = optionsArg;
commandToExecute: string
}) {
this.filePathToWatch = optionsArg.filePathToWatch;
this.commandToExecute = optionsArg.commandToExecute;
} }
/** /**
@ -25,8 +26,8 @@ export class TsWatch {
*/ */
public async start() { public async start() {
this.setupCleanup(); this.setupCleanup();
console.log(`Looking at ${this.filePathToWatch} for changes`); console.log(`Looking at ${this.options.filePathToWatch} for changes`);
this.watcher.add(this.filePathToWatch); // __dirname refers to the directory of this very file this.watcher.add(this.options.filePathToWatch); // __dirname refers to the directory of this very file
this.watcher.on('change', async (file, stat) => { this.watcher.on('change', async (file, stat) => {
console.log('Noticed change!'); console.log('Noticed change!');
if (!stat) { if (!stat) {
@ -41,14 +42,14 @@ export class TsWatch {
if (this.currentExecution) { if (this.currentExecution) {
process.kill(-this.currentExecution.childProcess.pid); process.kill(-this.currentExecution.childProcess.pid);
} }
this.currentExecution = await this.smartshellInstance.execStreaming(this.commandToExecute); this.currentExecution = await this.smartshellInstance.execStreaming(this.options.commandToExecute);
this.currentExecution = null; this.currentExecution = null;
} }
/** /**
* this method sets up a clean exit strategy * this method sets up a clean exit strategy
*/ */
private setupCleanup() { private async setupCleanup() {
const cleanup = () => { const cleanup = () => {
if (this.currentExecution) { if (this.currentExecution) {
process.kill(-this.currentExecution.childProcess.pid); process.kill(-this.currentExecution.childProcess.pid);
@ -66,5 +67,14 @@ export class TsWatch {
cleanup(); cleanup();
process.exit(0); process.exit(0);
}); });
// handle timeout
if (this.options.timeout) {
plugins.smartdelay.delayFor(this.options.timeout).then(() => {
console.log(`timed out afer ${this.options.timeout} milliseconds! exiting!`);
cleanup();
process.exit(0);
});
}
} }
} }

View File

@ -8,7 +8,15 @@ const tswatchCli = new plugins.smartcli.Smartcli();
tswatchCli.addCommand('test').subscribe(argvArg => { tswatchCli.addCommand('test').subscribe(argvArg => {
const tsWatch = new TsWatch({ const tsWatch = new TsWatch({
filePathToWatch: paths.cwd, filePathToWatch: paths.cwd,
commandToExecute: 'npm run test2' commandToExecute: 'npm run test2',
timeout: (() => {
if (argvArg.timeout) {
console.log(`timeing out after ${argvArg.timeout}`);
return argvArg.timeout;
} else {
return null;
}
})()
}); });
tsWatch.start(); tsWatch.start();
}); });

View File

@ -3,9 +3,10 @@ export { path };
// @pushrocks scope // @pushrocks scope
import * as smartcli from '@pushrocks/smartcli'; import * as smartcli from '@pushrocks/smartcli';
import * as smartdelay from '@pushrocks/smartdelay';
import * as smartshell from '@pushrocks/smartshell'; import * as smartshell from '@pushrocks/smartshell';
export { smartshell, smartcli }; export { smartdelay, smartshell, smartcli };
// Third Pary // Third Pary
import * as fileWatcher from 'filewatcher'; import * as fileWatcher from 'filewatcher';