spawn-rx 2.0.12 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- package/.travis.yml +24 -24
- package/CODE_OF_CONDUCT.md +50 -50
- package/COPYING +7 -7
- package/README.md +187 -187
- package/appveyor.yml +21 -21
- package/build.cmd +1 -1
- package/build.sh +2 -2
- package/esdoc.json +26 -26
- package/lib/src/index.d.ts +84 -88
- package/lib/src/index.js +306 -316
- package/lib/src/index.js.map +1 -1
- package/package.json +5 -4
- package/src/index.ts +334 -341
- package/test/asserttest.ts +15 -15
- package/test/spawn.ts +102 -102
- package/test/support.ts +14 -14
- package/tsconfig.json +28 -28
- package/tslint.json +39 -37
- package/.npmignore +0 -3
- package/lib/index.js +0 -352
package/test/asserttest.ts
CHANGED
@@ -1,15 +1,15 @@
|
|
1
|
-
import { expect } from 'chai';
|
2
|
-
import './support';
|
3
|
-
|
4
|
-
function delay(ms: number) {
|
5
|
-
return new Promise((resolve) => {
|
6
|
-
setTimeout(resolve, ms);
|
7
|
-
});
|
8
|
-
}
|
9
|
-
|
10
|
-
describe('The test runner', function () {
|
11
|
-
it('should pass this test', async function () {
|
12
|
-
await delay(1000);
|
13
|
-
expect(true).to.be.ok;
|
14
|
-
});
|
15
|
-
});
|
1
|
+
import { expect } from 'chai';
|
2
|
+
import './support';
|
3
|
+
|
4
|
+
function delay(ms: number) {
|
5
|
+
return new Promise((resolve) => {
|
6
|
+
setTimeout(resolve, ms);
|
7
|
+
});
|
8
|
+
}
|
9
|
+
|
10
|
+
describe('The test runner', function () {
|
11
|
+
it('should pass this test', async function () {
|
12
|
+
await delay(1000);
|
13
|
+
expect(true).to.be.ok;
|
14
|
+
});
|
15
|
+
});
|
package/test/spawn.ts
CHANGED
@@ -1,102 +1,102 @@
|
|
1
|
-
import { expect } from 'chai';
|
2
|
-
import './support';
|
3
|
-
|
4
|
-
import { spawn, spawnPromise, spawnDetachedPromise } from '../src/index';
|
5
|
-
|
6
|
-
import { Observable } from 'rxjs';
|
7
|
-
|
8
|
-
const uuidRegex = /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i;
|
9
|
-
|
10
|
-
describe('The spawnPromise method', function() {
|
11
|
-
it('should return a uuid when we call uuid', async function() {
|
12
|
-
// NB: Since we get run via npm run test, we know that npm bins are in our
|
13
|
-
// PATH.
|
14
|
-
let result = await spawnPromise('uuid', []);
|
15
|
-
expect(result.match(uuidRegex)).to.be.ok;
|
16
|
-
});
|
17
|
-
});
|
18
|
-
|
19
|
-
describe('The spawnDetachedPromise method', function() {
|
20
|
-
it('should return a uuid when we call uuid', async function() {
|
21
|
-
// NB: Since we get run via npm run test, we know that npm bins are in our
|
22
|
-
// PATH.
|
23
|
-
let result = await spawnDetachedPromise('uuid', ['--help']);
|
24
|
-
expect(result.length > 10).to.be.ok;
|
25
|
-
});
|
26
|
-
});
|
27
|
-
|
28
|
-
function wrapSplitObservableInPromise(obs: Observable<{
|
29
|
-
source: any,
|
30
|
-
text: any
|
31
|
-
}>): Promise<{
|
32
|
-
stderr: string,
|
33
|
-
stdout: string,
|
34
|
-
error: Error | undefined
|
35
|
-
}> {
|
36
|
-
return new Promise((res) => {
|
37
|
-
let out = {stderr: '', stdout: '', error: undefined };
|
38
|
-
|
39
|
-
obs.subscribe(
|
40
|
-
(x) => {
|
41
|
-
if (x.source === 'stdout') {
|
42
|
-
out.stdout += x.text;
|
43
|
-
} else {
|
44
|
-
out.stderr += x.text;
|
45
|
-
}
|
46
|
-
},
|
47
|
-
(e) => { out.error = e; res(out); },
|
48
|
-
() => res(out));
|
49
|
-
});
|
50
|
-
}
|
51
|
-
|
52
|
-
describe('The spawn method', function() {
|
53
|
-
it('should return a disposable subscription', async function() {
|
54
|
-
// this only check the unsubscribe goes w/o error, not that the spawned process is killed
|
55
|
-
// (difficult to do that, maybe iterate through child processes and check ?)
|
56
|
-
spawn('sleep', ['2']).subscribe().unsubscribe();
|
57
|
-
});
|
58
|
-
|
59
|
-
it('should return split stderr in a inner tag when called with split', async function() {
|
60
|
-
// provide an invalid param to uuid so it complains on stderr
|
61
|
-
let rxSpawn: Observable<{ source: any, text: any }> = spawn('uuid', ['foo'], {split: true}) as any;
|
62
|
-
let result = await wrapSplitObservableInPromise(rxSpawn);
|
63
|
-
expect(result.stderr.length > 10).to.be.ok;
|
64
|
-
expect(result.stdout).to.be.empty;
|
65
|
-
expect(result.error).to.be.an('error');
|
66
|
-
});
|
67
|
-
|
68
|
-
it('should return split stdout in a inner tag when called with split', async function() {
|
69
|
-
let rxSpawn: Observable<{ source: any, text: any }> = spawn('uuid', [], {split: true});
|
70
|
-
let result = await wrapSplitObservableInPromise(rxSpawn);
|
71
|
-
expect(result.stdout.match(uuidRegex)).to.be.ok;
|
72
|
-
expect(result.stderr).to.be.empty;
|
73
|
-
expect(result.error).to.be.undefined;
|
74
|
-
});
|
75
|
-
|
76
|
-
it('should ignore stderr if options.stdio = ignore', async function() {
|
77
|
-
let rxSpawn: Observable<{ source: any, text: any }> = spawn('uuid', ['foo'], {split: true, stdio: [null, null, 'ignore']});
|
78
|
-
let result = await wrapSplitObservableInPromise(rxSpawn);
|
79
|
-
expect(result.stderr).to.be.empty;
|
80
|
-
});
|
81
|
-
|
82
|
-
it('should ignore stdout if options.stdio = inherit', async function() {
|
83
|
-
let rxSpawn: Observable<{ source: any, text: any }> = spawn('uuid', [], {split: true, stdio: [null, 'inherit', null]});
|
84
|
-
let result = await wrapSplitObservableInPromise(rxSpawn);
|
85
|
-
expect(result.stdout).to.be.empty;
|
86
|
-
});
|
87
|
-
|
88
|
-
it('should croak if stdin is provided but stdio.stdin is disabled', async function() {
|
89
|
-
let stdin =
|
90
|
-
let rxSpawn: Observable<{ source: any, text: any }> = spawn('marked', [], {split: true, stdin: stdin, stdio: ['ignore', null, null]});
|
91
|
-
let result = await wrapSplitObservableInPromise(rxSpawn);
|
92
|
-
expect(result.error).to.be.an('error');
|
93
|
-
});
|
94
|
-
|
95
|
-
it('should subscribe to provided stdin', async function() {
|
96
|
-
let stdin =
|
97
|
-
let rxSpawn: Observable<{ source: any, text: any }> = spawn('marked', [], {split: true, stdin: stdin});
|
98
|
-
let result = await wrapSplitObservableInPromise(rxSpawn);
|
99
|
-
expect(result.stdout.trim()).to.be.equal('<p>a</p>');
|
100
|
-
});
|
101
|
-
|
102
|
-
});
|
1
|
+
import { expect } from 'chai';
|
2
|
+
import './support';
|
3
|
+
|
4
|
+
import { spawn, spawnPromise, spawnDetachedPromise } from '../src/index';
|
5
|
+
|
6
|
+
import { Observable, of } from 'rxjs';
|
7
|
+
|
8
|
+
const uuidRegex = /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i;
|
9
|
+
|
10
|
+
describe('The spawnPromise method', function() {
|
11
|
+
it('should return a uuid when we call uuid', async function() {
|
12
|
+
// NB: Since we get run via npm run test, we know that npm bins are in our
|
13
|
+
// PATH.
|
14
|
+
let result = await spawnPromise('uuid', []);
|
15
|
+
expect(result.match(uuidRegex)).to.be.ok;
|
16
|
+
});
|
17
|
+
});
|
18
|
+
|
19
|
+
describe('The spawnDetachedPromise method', function() {
|
20
|
+
it('should return a uuid when we call uuid', async function() {
|
21
|
+
// NB: Since we get run via npm run test, we know that npm bins are in our
|
22
|
+
// PATH.
|
23
|
+
let result = await spawnDetachedPromise('uuid', ['--help']);
|
24
|
+
expect(result.length > 10).to.be.ok;
|
25
|
+
});
|
26
|
+
});
|
27
|
+
|
28
|
+
function wrapSplitObservableInPromise(obs: Observable<{
|
29
|
+
source: any,
|
30
|
+
text: any
|
31
|
+
}>): Promise<{
|
32
|
+
stderr: string,
|
33
|
+
stdout: string,
|
34
|
+
error: Error | undefined
|
35
|
+
}> {
|
36
|
+
return new Promise((res) => {
|
37
|
+
let out = {stderr: '', stdout: '', error: undefined };
|
38
|
+
|
39
|
+
obs.subscribe(
|
40
|
+
(x) => {
|
41
|
+
if (x.source === 'stdout') {
|
42
|
+
out.stdout += x.text;
|
43
|
+
} else {
|
44
|
+
out.stderr += x.text;
|
45
|
+
}
|
46
|
+
},
|
47
|
+
(e) => { out.error = e; res(out); },
|
48
|
+
() => res(out));
|
49
|
+
});
|
50
|
+
}
|
51
|
+
|
52
|
+
describe('The spawn method', function() {
|
53
|
+
it('should return a disposable subscription', async function() {
|
54
|
+
// this only check the unsubscribe goes w/o error, not that the spawned process is killed
|
55
|
+
// (difficult to do that, maybe iterate through child processes and check ?)
|
56
|
+
spawn('sleep', ['2']).subscribe().unsubscribe();
|
57
|
+
});
|
58
|
+
|
59
|
+
it('should return split stderr in a inner tag when called with split', async function() {
|
60
|
+
// provide an invalid param to uuid so it complains on stderr
|
61
|
+
let rxSpawn: Observable<{ source: any, text: any }> = spawn('uuid', ['foo'], {split: true}) as any;
|
62
|
+
let result = await wrapSplitObservableInPromise(rxSpawn);
|
63
|
+
expect(result.stderr.length > 10).to.be.ok;
|
64
|
+
expect(result.stdout).to.be.empty;
|
65
|
+
expect(result.error).to.be.an('error');
|
66
|
+
});
|
67
|
+
|
68
|
+
it('should return split stdout in a inner tag when called with split', async function() {
|
69
|
+
let rxSpawn: Observable<{ source: any, text: any }> = spawn('uuid', [], {split: true});
|
70
|
+
let result = await wrapSplitObservableInPromise(rxSpawn);
|
71
|
+
expect(result.stdout.match(uuidRegex)).to.be.ok;
|
72
|
+
expect(result.stderr).to.be.empty;
|
73
|
+
expect(result.error).to.be.undefined;
|
74
|
+
});
|
75
|
+
|
76
|
+
it('should ignore stderr if options.stdio = ignore', async function() {
|
77
|
+
let rxSpawn: Observable<{ source: any, text: any }> = spawn('uuid', ['foo'], {split: true, stdio: [null, null, 'ignore']});
|
78
|
+
let result = await wrapSplitObservableInPromise(rxSpawn);
|
79
|
+
expect(result.stderr).to.be.empty;
|
80
|
+
});
|
81
|
+
|
82
|
+
it('should ignore stdout if options.stdio = inherit', async function() {
|
83
|
+
let rxSpawn: Observable<{ source: any, text: any }> = spawn('uuid', [], {split: true, stdio: [null, 'inherit', null]});
|
84
|
+
let result = await wrapSplitObservableInPromise(rxSpawn);
|
85
|
+
expect(result.stdout).to.be.empty;
|
86
|
+
});
|
87
|
+
|
88
|
+
it('should croak if stdin is provided but stdio.stdin is disabled', async function() {
|
89
|
+
let stdin = of('a');
|
90
|
+
let rxSpawn: Observable<{ source: any, text: any }> = spawn('marked', [], {split: true, stdin: stdin, stdio: ['ignore', null, null]});
|
91
|
+
let result = await wrapSplitObservableInPromise(rxSpawn);
|
92
|
+
expect(result.error).to.be.an('error');
|
93
|
+
});
|
94
|
+
|
95
|
+
it('should subscribe to provided stdin', async function() {
|
96
|
+
let stdin = of('a');
|
97
|
+
let rxSpawn: Observable<{ source: any, text: any }> = spawn('marked', [], {split: true, stdin: stdin});
|
98
|
+
let result = await wrapSplitObservableInPromise(rxSpawn);
|
99
|
+
expect(result.stdout.trim()).to.be.equal('<p>a</p>');
|
100
|
+
});
|
101
|
+
|
102
|
+
});
|
package/test/support.ts
CHANGED
@@ -1,14 +1,14 @@
|
|
1
|
-
import * as chai from 'chai';
|
2
|
-
import * as chaiAsPromised from 'chai-as-promised';
|
3
|
-
|
4
|
-
declare const global: any;
|
5
|
-
|
6
|
-
chai.should();
|
7
|
-
chai.use(chaiAsPromised);
|
8
|
-
|
9
|
-
global.chai = chai;
|
10
|
-
global.chaiAsPromised = chaiAsPromised;
|
11
|
-
global.expect = chai.expect;
|
12
|
-
global.AssertionError = chai.AssertionError;
|
13
|
-
global.assert = chai.assert;
|
14
|
-
global.Assertion = (chai as any).Assertion; //'Assertion' is not existing?
|
1
|
+
import * as chai from 'chai';
|
2
|
+
import * as chaiAsPromised from 'chai-as-promised';
|
3
|
+
|
4
|
+
declare const global: any;
|
5
|
+
|
6
|
+
chai.should();
|
7
|
+
chai.use(chaiAsPromised);
|
8
|
+
|
9
|
+
global.chai = chai;
|
10
|
+
global.chaiAsPromised = chaiAsPromised;
|
11
|
+
global.expect = chai.expect;
|
12
|
+
global.AssertionError = chai.AssertionError;
|
13
|
+
global.assert = chai.assert;
|
14
|
+
global.Assertion = (chai as any).Assertion; //'Assertion' is not existing?
|
package/tsconfig.json
CHANGED
@@ -1,29 +1,29 @@
|
|
1
|
-
{
|
2
|
-
"compilerOptions": {
|
3
|
-
"removeComments": false,
|
4
|
-
"preserveConstEnums": true,
|
5
|
-
"sourceMap": true,
|
6
|
-
"declaration": true,
|
7
|
-
"noImplicitAny": true,
|
8
|
-
"noImplicitReturns": true,
|
9
|
-
"suppressImplicitAnyIndexErrors": true,
|
10
|
-
"strictNullChecks": true,
|
11
|
-
"noUnusedLocals": true,
|
12
|
-
"noImplicitThis": true,
|
13
|
-
"noUnusedParameters": true,
|
14
|
-
"module": "commonjs",
|
15
|
-
"moduleResolution": "node",
|
16
|
-
"pretty": true,
|
17
|
-
"target": "es5",
|
18
|
-
"outDir": "lib",
|
19
|
-
"lib": ["dom", "es2015"]
|
20
|
-
},
|
21
|
-
"formatCodeOptions": {
|
22
|
-
"indentSize": 2,
|
23
|
-
"tabSize": 2
|
24
|
-
},
|
25
|
-
"exclude": [
|
26
|
-
"node_modules",
|
27
|
-
"lib"
|
28
|
-
]
|
1
|
+
{
|
2
|
+
"compilerOptions": {
|
3
|
+
"removeComments": false,
|
4
|
+
"preserveConstEnums": true,
|
5
|
+
"sourceMap": true,
|
6
|
+
"declaration": true,
|
7
|
+
"noImplicitAny": true,
|
8
|
+
"noImplicitReturns": true,
|
9
|
+
"suppressImplicitAnyIndexErrors": true,
|
10
|
+
"strictNullChecks": true,
|
11
|
+
"noUnusedLocals": true,
|
12
|
+
"noImplicitThis": true,
|
13
|
+
"noUnusedParameters": true,
|
14
|
+
"module": "commonjs",
|
15
|
+
"moduleResolution": "node",
|
16
|
+
"pretty": true,
|
17
|
+
"target": "es5",
|
18
|
+
"outDir": "lib",
|
19
|
+
"lib": ["dom", "es2015"]
|
20
|
+
},
|
21
|
+
"formatCodeOptions": {
|
22
|
+
"indentSize": 2,
|
23
|
+
"tabSize": 2
|
24
|
+
},
|
25
|
+
"exclude": [
|
26
|
+
"node_modules",
|
27
|
+
"lib"
|
28
|
+
]
|
29
29
|
}
|
package/tslint.json
CHANGED
@@ -1,38 +1,40 @@
|
|
1
|
-
{
|
2
|
-
"rules": {
|
3
|
-
"curly": true,
|
4
|
-
"eofline": false,
|
5
|
-
"align": [true, "parameters"],
|
6
|
-
"class-name": true,
|
7
|
-
"indent": [true, "spaces"],
|
8
|
-
"max-line-length": [true, 150],
|
9
|
-
"no-consecutive-blank-lines": [true],
|
10
|
-
"no-trailing-whitespace": true,
|
11
|
-
"no-duplicate-variable": true,
|
12
|
-
"no-var-keyword": true,
|
13
|
-
"no-empty": true,
|
14
|
-
"no-unused-expression": true,
|
15
|
-
"no-use-before-declare": true,
|
16
|
-
"no-var-requires": true,
|
17
|
-
"one-line": [true,
|
18
|
-
"check-else",
|
19
|
-
"check-whitespace",
|
20
|
-
"check-open-brace"],
|
21
|
-
"quotemark": [true,
|
22
|
-
"single",
|
23
|
-
"avoid-escape"],
|
24
|
-
"semicolon": [true, "always"],
|
25
|
-
"typedef-whitespace": [true, {
|
26
|
-
"call-signature": "nospace",
|
27
|
-
"index-signature": "nospace",
|
28
|
-
"parameter": "nospace",
|
29
|
-
"property-declaration": "nospace",
|
30
|
-
"variable-declaration": "nospace"
|
31
|
-
}],
|
32
|
-
"whitespace": [true,
|
33
|
-
"check-branch",
|
34
|
-
"check-decl",
|
35
|
-
"check-operator",
|
36
|
-
"check-type"]
|
37
|
-
}
|
1
|
+
{
|
2
|
+
"rules": {
|
3
|
+
"curly": true,
|
4
|
+
"eofline": false,
|
5
|
+
"align": [true, "parameters"],
|
6
|
+
"class-name": true,
|
7
|
+
"indent": [true, "spaces"],
|
8
|
+
"max-line-length": [true, 150],
|
9
|
+
"no-consecutive-blank-lines": [true],
|
10
|
+
"no-trailing-whitespace": true,
|
11
|
+
"no-duplicate-variable": true,
|
12
|
+
"no-var-keyword": true,
|
13
|
+
"no-empty": true,
|
14
|
+
"no-unused-expression-chai": true,
|
15
|
+
"no-use-before-declare": true,
|
16
|
+
"no-var-requires": true,
|
17
|
+
"one-line": [true,
|
18
|
+
"check-else",
|
19
|
+
"check-whitespace",
|
20
|
+
"check-open-brace"],
|
21
|
+
"quotemark": [true,
|
22
|
+
"single",
|
23
|
+
"avoid-escape"],
|
24
|
+
"semicolon": [true, "always"],
|
25
|
+
"typedef-whitespace": [true, {
|
26
|
+
"call-signature": "nospace",
|
27
|
+
"index-signature": "nospace",
|
28
|
+
"parameter": "nospace",
|
29
|
+
"property-declaration": "nospace",
|
30
|
+
"variable-declaration": "nospace"
|
31
|
+
}],
|
32
|
+
"whitespace": [true,
|
33
|
+
"check-branch",
|
34
|
+
"check-decl",
|
35
|
+
"check-operator",
|
36
|
+
"check-type"]
|
37
|
+
}, "rulesDirectory": [
|
38
|
+
"tslint-no-unused-expression-chai"
|
39
|
+
]
|
38
40
|
}
|
package/.npmignore
DELETED