@opensumi/ide-process 2.12.1-next-079c1930
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/common/index.d.ts +59 -0
- package/lib/common/index.d.ts.map +1 -0
- package/lib/common/index.js +7 -0
- package/lib/common/index.js.map +1 -0
- package/lib/index.d.ts +3 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +6 -0
- package/lib/index.js.map +1 -0
- package/lib/node/dev-null-stream.d.ts +12 -0
- package/lib/node/dev-null-stream.d.ts.map +1 -0
- package/lib/node/dev-null-stream.js +19 -0
- package/lib/node/dev-null-stream.js.map +1 -0
- package/lib/node/index.d.ts +12 -0
- package/lib/node/index.d.ts.map +1 -0
- package/lib/node/index.js +29 -0
- package/lib/node/index.js.map +1 -0
- package/lib/node/process-manager.d.ts +14 -0
- package/lib/node/process-manager.d.ts.map +1 -0
- package/lib/node/process-manager.js +60 -0
- package/lib/node/process-manager.js.map +1 -0
- package/lib/node/process.d.ts +34 -0
- package/lib/node/process.d.ts.map +1 -0
- package/lib/node/process.js +113 -0
- package/lib/node/process.js.map +1 -0
- package/package.json +26 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { ChildProcess } from 'child_process';
|
|
3
|
+
import stream from 'stream';
|
|
4
|
+
import { Event } from '@opensumi/ide-core-common';
|
|
5
|
+
export declare const IProcessFactory: unique symbol;
|
|
6
|
+
export declare const IProcessManage: unique symbol;
|
|
7
|
+
export declare const processManageServicePath = "ProcessManageService";
|
|
8
|
+
export interface IProcess {
|
|
9
|
+
readonly process: ChildProcess | undefined;
|
|
10
|
+
readonly outputStream: stream.Readable;
|
|
11
|
+
readonly errorStream: stream.Readable;
|
|
12
|
+
readonly inputStream: stream.Writable;
|
|
13
|
+
readonly processManage: IProcessManage;
|
|
14
|
+
pid: number | null;
|
|
15
|
+
onStart: Event<{}>;
|
|
16
|
+
onExit: Event<IProcessExitEvent>;
|
|
17
|
+
onError: Event<ProcessErrorEvent>;
|
|
18
|
+
killed: boolean;
|
|
19
|
+
dispose(signal?: string): any;
|
|
20
|
+
}
|
|
21
|
+
export interface IProcessFactory {
|
|
22
|
+
create(options: ProcessOptions | ForkOptions): IProcess;
|
|
23
|
+
}
|
|
24
|
+
export interface IProcessManage {
|
|
25
|
+
register(process: IProcess): boolean;
|
|
26
|
+
unregister(process: IProcess): void;
|
|
27
|
+
get(id: number): IProcess | undefined;
|
|
28
|
+
onUnregister: Event<number>;
|
|
29
|
+
dispose(): void;
|
|
30
|
+
}
|
|
31
|
+
export interface ProcessOptions<T = string> {
|
|
32
|
+
readonly command: string;
|
|
33
|
+
args?: T[];
|
|
34
|
+
options?: {
|
|
35
|
+
[key: string]: any;
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
export interface ForkOptions {
|
|
39
|
+
readonly modulePath: string;
|
|
40
|
+
args?: string[];
|
|
41
|
+
options?: object;
|
|
42
|
+
}
|
|
43
|
+
export interface IProcessExitEvent {
|
|
44
|
+
readonly code?: number;
|
|
45
|
+
readonly signal?: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Data emitted when a process has been successfully started.
|
|
49
|
+
*/
|
|
50
|
+
export interface IProcessStartEvent {
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Data emitted when a process has failed to start.
|
|
54
|
+
*/
|
|
55
|
+
export interface ProcessErrorEvent extends Error {
|
|
56
|
+
/** An errno-like error string (e.g. ENOENT). */
|
|
57
|
+
code: string;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/common/index.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAElD,eAAO,MAAM,eAAe,eAA4B,CAAC;AACzD,eAAO,MAAM,cAAc,eAA2B,CAAC;AACvD,eAAO,MAAM,wBAAwB,yBAAyB,CAAC;AAE/D,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC;IACvC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC;IACtC,QAAQ,CAAC,aAAa,EAAE,cAAc,CAAC;IACvC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;IACnB,MAAM,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACjC,OAAO,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAClC,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,OAAE;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,OAAO,EAAE,cAAc,GAAG,WAAW,GAAG,QAAQ,CAAC;CACzD;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC;IACrC,UAAU,CAAC,OAAO,EAAE,QAAQ,GAAG,IAAI,CAAC;IACpC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;IACtC,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5B,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,MAAM;IACxC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;IACX,OAAO,CAAC,EAAE;QACR,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAEhC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AAEH,MAAM,WAAW,kBAAkB;CAAI;AAEvC;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,KAAK;IAC9C,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;CACd"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.processManageServicePath = exports.IProcessManage = exports.IProcessFactory = void 0;
|
|
4
|
+
exports.IProcessFactory = Symbol('IProcessFactory');
|
|
5
|
+
exports.IProcessManage = Symbol('IProcessManage');
|
|
6
|
+
exports.processManageServicePath = 'ProcessManageService';
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/common/index.ts"],"names":[],"mappings":";;;AAIa,QAAA,eAAe,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAC5C,QAAA,cAAc,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAC1C,QAAA,wBAAwB,GAAG,sBAAsB,CAAC"}
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC"}
|
package/lib/index.js
ADDED
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,wDAAyB;AACzB,sDAAuB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import stream = require('stream');
|
|
3
|
+
/**
|
|
4
|
+
* A Node stream like `/dev/null`.
|
|
5
|
+
*
|
|
6
|
+
* Writing goes to a black hole, reading returns `EOF`.
|
|
7
|
+
*/
|
|
8
|
+
export declare class DevNullStream extends stream.Duplex {
|
|
9
|
+
_write(chunk: any, encoding: string, callback: (err?: Error) => void): void;
|
|
10
|
+
_read(size: number): void;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=dev-null-stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-null-stream.d.ts","sourceRoot":"","sources":["../../src/node/dev-null-stream.ts"],"names":[],"mappings":";AAAA,OAAO,MAAM,GAAG,QAAQ,QAAQ,CAAC,CAAC;AAElC;;;;GAIG;AACH,qBAAa,aAAc,SAAQ,MAAM,CAAC,MAAM;IAC9C,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI;IAI3E,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;CAG1B"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DevNullStream = void 0;
|
|
4
|
+
const stream = require("stream");
|
|
5
|
+
/**
|
|
6
|
+
* A Node stream like `/dev/null`.
|
|
7
|
+
*
|
|
8
|
+
* Writing goes to a black hole, reading returns `EOF`.
|
|
9
|
+
*/
|
|
10
|
+
class DevNullStream extends stream.Duplex {
|
|
11
|
+
_write(chunk, encoding, callback) {
|
|
12
|
+
callback();
|
|
13
|
+
}
|
|
14
|
+
_read(size) {
|
|
15
|
+
this.push(null);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.DevNullStream = DevNullStream;
|
|
19
|
+
//# sourceMappingURL=dev-null-stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-null-stream.js","sourceRoot":"","sources":["../../src/node/dev-null-stream.ts"],"names":[],"mappings":";;;AAAA,iCAAkC;AAElC;;;;GAIG;AACH,MAAa,aAAc,SAAQ,MAAM,CAAC,MAAM;IAC9C,MAAM,CAAC,KAAU,EAAE,QAAgB,EAAE,QAA+B;QAClE,QAAQ,EAAE,CAAC;IACb,CAAC;IAED,KAAK,CAAC,IAAY;QAChB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC;CACF;AARD,sCAQC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Provider } from '@opensumi/di';
|
|
2
|
+
import { NodeModule } from '@opensumi/ide-core-node';
|
|
3
|
+
export declare class ProcessModule extends NodeModule {
|
|
4
|
+
providers: Provider[];
|
|
5
|
+
backServices: {
|
|
6
|
+
servicePath: string;
|
|
7
|
+
token: symbol;
|
|
8
|
+
}[];
|
|
9
|
+
}
|
|
10
|
+
export * from './process';
|
|
11
|
+
export * from './process-manager';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/node/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAc,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAKrD,qBACa,aAAc,SAAQ,UAAU;IAC3C,SAAS,EAAE,QAAQ,EAAE,CAGnB;IAEF,YAAY;;;QAGT;CACJ;AAED,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ProcessModule = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const di_1 = require("@opensumi/di");
|
|
6
|
+
const ide_core_node_1 = require("@opensumi/ide-core-node");
|
|
7
|
+
const process_manager_1 = require("./process-manager");
|
|
8
|
+
const process_1 = require("./process");
|
|
9
|
+
const common_1 = require("../common/");
|
|
10
|
+
let ProcessModule = class ProcessModule extends ide_core_node_1.NodeModule {
|
|
11
|
+
constructor() {
|
|
12
|
+
super(...arguments);
|
|
13
|
+
this.providers = [
|
|
14
|
+
{ token: common_1.IProcessManage, useClass: process_manager_1.ProcessManage },
|
|
15
|
+
{ token: common_1.IProcessFactory, useClass: process_1.ProcessFactory },
|
|
16
|
+
];
|
|
17
|
+
this.backServices = [{
|
|
18
|
+
servicePath: common_1.processManageServicePath,
|
|
19
|
+
token: common_1.IProcessManage,
|
|
20
|
+
}];
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
ProcessModule = (0, tslib_1.__decorate)([
|
|
24
|
+
(0, di_1.Injectable)()
|
|
25
|
+
], ProcessModule);
|
|
26
|
+
exports.ProcessModule = ProcessModule;
|
|
27
|
+
(0, tslib_1.__exportStar)(require("./process"), exports);
|
|
28
|
+
(0, tslib_1.__exportStar)(require("./process-manager"), exports);
|
|
29
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/node/index.ts"],"names":[],"mappings":";;;;AAAA,qCAAoD;AACpD,2DAAqD;AACrD,uDAAmD;AACnD,uCAA2C;AAC3C,uCAAuF;AAGvF,IAAa,aAAa,GAA1B,MAAa,aAAc,SAAQ,0BAAU;IAA7C;;QACE,cAAS,GAAe;YACtB,EAAE,KAAK,EAAE,uBAAc,EAAE,QAAQ,EAAE,+BAAa,EAAE;YAClD,EAAE,KAAK,EAAE,wBAAe,EAAG,QAAQ,EAAE,wBAAc,EAAE;SACtD,CAAC;QAEF,iBAAY,GAAG,CAAC;gBACd,WAAW,EAAE,iCAAwB;gBACrC,KAAK,EAAE,uBAAc;aACtB,CAAC,CAAC;IACL,CAAC;CAAA,CAAA;AAVY,aAAa;IADzB,IAAA,eAAU,GAAE;GACA,aAAa,CAUzB;AAVY,sCAAa;AAY1B,yDAA0B;AAC1B,iEAAkC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Disposable, Emitter, Event } from '@opensumi/ide-core-common';
|
|
2
|
+
import { Process } from './process';
|
|
3
|
+
import { IProcessManage } from '../common/index';
|
|
4
|
+
export declare class ProcessManage extends Disposable implements IProcessManage {
|
|
5
|
+
protected readonly processes: Map<number, Process>;
|
|
6
|
+
protected readonly unregisterEmitter: Emitter<number>;
|
|
7
|
+
constructor();
|
|
8
|
+
register(process: Process): boolean;
|
|
9
|
+
unregister(process: Process): void;
|
|
10
|
+
get(id: number): Process | undefined;
|
|
11
|
+
get onUnregister(): Event<number>;
|
|
12
|
+
dispose(): void;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=process-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-manager.d.ts","sourceRoot":"","sources":["../../src/node/process-manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAkB,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AACvF,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAIjD,qBACa,aAAc,SAAQ,UAAW,YAAW,cAAc;IAErE,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnD,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;;IAQtD,QAAQ,CAAC,OAAO,EAAE,OAAO;IAazB,UAAU,CAAC,OAAO,EAAE,OAAO;IAa3B,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAIpC,IAAI,YAAY,IAAI,KAAK,CAAC,MAAM,CAAC,CAEhC;IAED,OAAO;CASR"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ProcessManage = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const di_1 = require("@opensumi/di");
|
|
6
|
+
const ide_core_common_1 = require("@opensumi/ide-core-common");
|
|
7
|
+
const logger = (0, ide_core_common_1.getDebugLogger)();
|
|
8
|
+
let ProcessManage = class ProcessManage extends ide_core_common_1.Disposable {
|
|
9
|
+
constructor() {
|
|
10
|
+
super();
|
|
11
|
+
this.processes = new Map();
|
|
12
|
+
this.unregisterEmitter = new ide_core_common_1.Emitter();
|
|
13
|
+
}
|
|
14
|
+
register(process) {
|
|
15
|
+
const id = process.pid;
|
|
16
|
+
if (!id) {
|
|
17
|
+
logger.error('The Process launch failed!');
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
this.processes.set(id, process);
|
|
21
|
+
process.onExit(() => this.unregister(process));
|
|
22
|
+
process.onError(() => this.unregister(process));
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
unregister(process) {
|
|
26
|
+
const id = process.pid;
|
|
27
|
+
if (!process.killed) {
|
|
28
|
+
process.dispose();
|
|
29
|
+
}
|
|
30
|
+
if (id && this.processes.delete(id)) {
|
|
31
|
+
this.unregisterEmitter.fire(id);
|
|
32
|
+
// logger.log(`The process was successfully unregistered. ${id}`);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
logger.warn(`This process was not registered or was already unregistered. ${id || ''}`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
get(id) {
|
|
39
|
+
return this.processes.get(id);
|
|
40
|
+
}
|
|
41
|
+
get onUnregister() {
|
|
42
|
+
return this.unregisterEmitter.event;
|
|
43
|
+
}
|
|
44
|
+
dispose() {
|
|
45
|
+
this.processes.forEach((process, id) => {
|
|
46
|
+
try {
|
|
47
|
+
this.unregister(process);
|
|
48
|
+
}
|
|
49
|
+
catch (e) {
|
|
50
|
+
logger.error(`Error occurred when unregistering process. ${id}`, e);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
ProcessManage = (0, tslib_1.__decorate)([
|
|
56
|
+
(0, di_1.Injectable)(),
|
|
57
|
+
(0, tslib_1.__metadata)("design:paramtypes", [])
|
|
58
|
+
], ProcessManage);
|
|
59
|
+
exports.ProcessManage = ProcessManage;
|
|
60
|
+
//# sourceMappingURL=process-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-manager.js","sourceRoot":"","sources":["../../src/node/process-manager.ts"],"names":[],"mappings":";;;;AAAA,qCAA0C;AAC1C,+DAAuF;AAIvF,MAAM,MAAM,GAAG,IAAA,gCAAc,GAAE,CAAC;AAGhC,IAAa,aAAa,GAA1B,MAAa,aAAc,SAAQ,4BAAU;IAK3C;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,iBAAiB,GAAG,IAAI,yBAAO,EAAU,CAAC;IACjD,CAAC;IAED,QAAQ,CAAC,OAAgB;QACvB,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;QAEvB,IAAI,CAAC,EAAE,EAAE;YACP,MAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAC3C,OAAO,KAAK,CAAC;SACd;QACD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAChC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,UAAU,CAAC,OAAgB;QACzB,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;QACvB,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YACnB,OAAO,CAAC,OAAO,EAAE,CAAC;SACnB;QACD,IAAI,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;YACnC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChC,kEAAkE;SACnE;aAAM;YACL,MAAM,CAAC,IAAI,CAAC,gEAAgE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;SACzF;IACH,CAAC;IAED,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC;IACtC,CAAC;IAED,OAAO;QACL,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE;YACrC,IAAI;gBACF,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;aAC1B;YAAC,OAAO,CAAC,EAAE;gBACV,MAAM,CAAC,KAAK,CAAC,8CAA8C,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;aACrE;QACH,CAAC,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AAtDY,aAAa;IADzB,IAAA,eAAU,GAAE;;GACA,aAAa,CAsDzB;AAtDY,sCAAa"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { ChildProcess } from 'child_process';
|
|
3
|
+
import stream from 'stream';
|
|
4
|
+
import { Disposable, Emitter } from '@opensumi/ide-core-common';
|
|
5
|
+
import { ProcessManage } from './process-manager';
|
|
6
|
+
import { ProcessOptions, ForkOptions, IProcessStartEvent, IProcessExitEvent, ProcessErrorEvent, IProcess } from '../common/index';
|
|
7
|
+
export declare class ProcessFactory {
|
|
8
|
+
constructor();
|
|
9
|
+
private readonly processManage;
|
|
10
|
+
create(options: ProcessOptions | ForkOptions): IProcess;
|
|
11
|
+
}
|
|
12
|
+
export declare class Process extends Disposable implements IProcess {
|
|
13
|
+
readonly processManage: ProcessManage;
|
|
14
|
+
readonly process: ChildProcess | undefined;
|
|
15
|
+
readonly outputStream: stream.Readable;
|
|
16
|
+
readonly errorStream: stream.Readable;
|
|
17
|
+
readonly inputStream: stream.Writable;
|
|
18
|
+
protected _killed: boolean;
|
|
19
|
+
protected readonly startEmitter: Emitter<IProcessStartEvent>;
|
|
20
|
+
protected readonly exitEmitter: Emitter<IProcessExitEvent>;
|
|
21
|
+
protected readonly errorEmitter: Emitter<ProcessErrorEvent>;
|
|
22
|
+
constructor(options: ProcessOptions | ForkOptions, processManage: ProcessManage);
|
|
23
|
+
protected isForkOptions(options: any): options is ForkOptions;
|
|
24
|
+
protected emitOnStart(): void;
|
|
25
|
+
protected emitOnError(err: ProcessErrorEvent): void;
|
|
26
|
+
protected emitOnExit(event: IProcessExitEvent): void;
|
|
27
|
+
get pid(): number | null;
|
|
28
|
+
get onStart(): import("@opensumi/ide-core-common").Event<IProcessStartEvent>;
|
|
29
|
+
get onExit(): import("@opensumi/ide-core-common").Event<IProcessExitEvent>;
|
|
30
|
+
get onError(): import("@opensumi/ide-core-common").Event<ProcessErrorEvent>;
|
|
31
|
+
get killed(): boolean;
|
|
32
|
+
dispose(signal?: string): void;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=process.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../src/node/process.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAe,MAAM,eAAe,CAAC;AAC1D,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAEhE,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EACL,cAAc,EACd,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EAEjB,QAAQ,EACT,MAAM,iBAAiB,CAAC;AAEzB,qBACa,cAAc;;IAKzB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAE9C,MAAM,CAAC,OAAO,EAAE,cAAc,GAAG,WAAW,GAAG,QAAQ;CAGxD;AAED,qBAAa,OAAQ,SAAQ,UAAW,YAAW,QAAQ;IAcvD,QAAQ,CAAC,aAAa,EAAE,aAAa;IAZvC,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC;IACvC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC;IACtC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAS;IAEnC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAqC;IACjG,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAoC;IAC9F,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAoC;gBAG7F,OAAO,EAAE,cAAc,GAAG,WAAW,EAC5B,aAAa,EAAE,aAAa;IAsDvC,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,IAAI,WAAW;IAI7D,SAAS,CAAC,WAAW;IAIrB,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,iBAAiB;IAK5C,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,iBAAiB;IAK7C,IAAI,GAAG,IAAI,MAAM,GAAG,IAAI,CAEvB;IAED,IAAI,OAAO,kEAEV;IAED,IAAI,MAAM,iEAET;IAED,IAAI,OAAO,iEAEV;IAED,IAAI,MAAM,YAET;IAED,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM;CAMxB"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Process = exports.ProcessFactory = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const di_1 = require("@opensumi/di");
|
|
6
|
+
const child_process_1 = require("child_process");
|
|
7
|
+
const ide_core_common_1 = require("@opensumi/ide-core-common");
|
|
8
|
+
const dev_null_stream_1 = require("./dev-null-stream");
|
|
9
|
+
const process_manager_1 = require("./process-manager");
|
|
10
|
+
const index_1 = require("../common/index");
|
|
11
|
+
let ProcessFactory = class ProcessFactory {
|
|
12
|
+
constructor() { }
|
|
13
|
+
create(options) {
|
|
14
|
+
return new Process(options, this.processManage);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
(0, tslib_1.__decorate)([
|
|
18
|
+
(0, di_1.Autowired)(index_1.IProcessManage),
|
|
19
|
+
(0, tslib_1.__metadata)("design:type", process_manager_1.ProcessManage)
|
|
20
|
+
], ProcessFactory.prototype, "processManage", void 0);
|
|
21
|
+
ProcessFactory = (0, tslib_1.__decorate)([
|
|
22
|
+
(0, di_1.Injectable)(),
|
|
23
|
+
(0, tslib_1.__metadata)("design:paramtypes", [])
|
|
24
|
+
], ProcessFactory);
|
|
25
|
+
exports.ProcessFactory = ProcessFactory;
|
|
26
|
+
class Process extends ide_core_common_1.Disposable {
|
|
27
|
+
constructor(options, processManage) {
|
|
28
|
+
super();
|
|
29
|
+
this.processManage = processManage;
|
|
30
|
+
this._killed = false;
|
|
31
|
+
this.startEmitter = new ide_core_common_1.Emitter();
|
|
32
|
+
this.exitEmitter = new ide_core_common_1.Emitter();
|
|
33
|
+
this.errorEmitter = new ide_core_common_1.Emitter();
|
|
34
|
+
// About catching errors: spawn will sometimes throw directly
|
|
35
|
+
// (EACCES on Linux), sometimes return a Process object with the pid
|
|
36
|
+
// property undefined (ENOENT on Linux) and then emit an 'error' event.
|
|
37
|
+
// For now, we try to normalize that into always emitting an 'error'
|
|
38
|
+
// event.
|
|
39
|
+
try {
|
|
40
|
+
if (this.isForkOptions(options)) {
|
|
41
|
+
this.process = (0, child_process_1.fork)(options.modulePath, options.args, options.options);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
this.process = (0, child_process_1.spawn)(options.command, options.args, options.options);
|
|
45
|
+
}
|
|
46
|
+
this.process.on('error', (error) => {
|
|
47
|
+
error.code = error.code || 'Unknown error';
|
|
48
|
+
this.errorEmitter.fire(error);
|
|
49
|
+
});
|
|
50
|
+
this.process.on('exit', (exitCode, signal) => {
|
|
51
|
+
// node's child_process exit sets the unused parameter to null,
|
|
52
|
+
// but we want it to be undefined instead.
|
|
53
|
+
this.emitOnExit({
|
|
54
|
+
code: exitCode !== null ? exitCode : undefined,
|
|
55
|
+
signal: signal !== null ? signal : undefined,
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
this.outputStream = this.process.stdout || new dev_null_stream_1.DevNullStream();
|
|
59
|
+
this.inputStream = this.process.stdin || new dev_null_stream_1.DevNullStream();
|
|
60
|
+
this.errorStream = this.process.stderr || new dev_null_stream_1.DevNullStream();
|
|
61
|
+
if (this.process.pid !== undefined) {
|
|
62
|
+
this.processManage.register(this);
|
|
63
|
+
process.nextTick(this.emitOnStart.bind(this));
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
/* When an error is thrown, set up some fake streams, so the client
|
|
68
|
+
code doesn't break because these field are undefined. */
|
|
69
|
+
this.outputStream = new dev_null_stream_1.DevNullStream();
|
|
70
|
+
this.inputStream = new dev_null_stream_1.DevNullStream();
|
|
71
|
+
this.errorStream = new dev_null_stream_1.DevNullStream();
|
|
72
|
+
/* Call the client error handler, but first give them a chance to register it. */
|
|
73
|
+
process.nextTick(this.emitOnError.bind(this), error);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
isForkOptions(options) {
|
|
77
|
+
return !!options && !!options.modulePath;
|
|
78
|
+
}
|
|
79
|
+
emitOnStart() {
|
|
80
|
+
this.startEmitter.fire({});
|
|
81
|
+
}
|
|
82
|
+
emitOnError(err) {
|
|
83
|
+
this._killed = true;
|
|
84
|
+
this.errorEmitter.fire(err);
|
|
85
|
+
}
|
|
86
|
+
emitOnExit(event) {
|
|
87
|
+
this._killed = true;
|
|
88
|
+
this.exitEmitter.fire(event);
|
|
89
|
+
}
|
|
90
|
+
get pid() {
|
|
91
|
+
return this.process ? this.process.pid : null;
|
|
92
|
+
}
|
|
93
|
+
get onStart() {
|
|
94
|
+
return this.startEmitter.event;
|
|
95
|
+
}
|
|
96
|
+
get onExit() {
|
|
97
|
+
return this.exitEmitter.event;
|
|
98
|
+
}
|
|
99
|
+
get onError() {
|
|
100
|
+
return this.errorEmitter.event;
|
|
101
|
+
}
|
|
102
|
+
get killed() {
|
|
103
|
+
return this._killed;
|
|
104
|
+
}
|
|
105
|
+
dispose(signal) {
|
|
106
|
+
if (this.process && this.killed === false) {
|
|
107
|
+
// TODO test window is work
|
|
108
|
+
this.process.kill(signal);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
exports.Process = Process;
|
|
113
|
+
//# sourceMappingURL=process.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process.js","sourceRoot":"","sources":["../../src/node/process.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@opensumi/ide-process",
|
|
3
|
+
"version": "2.12.1-next-079c1930",
|
|
4
|
+
"files": [
|
|
5
|
+
"lib"
|
|
6
|
+
],
|
|
7
|
+
"license": "MIT",
|
|
8
|
+
"main": "lib/index.js",
|
|
9
|
+
"typings": "lib/index.d.ts",
|
|
10
|
+
"scripts": {
|
|
11
|
+
"prepublishOnly": "npm run build",
|
|
12
|
+
"build": "tsc --build ../../configs/ts/references/tsconfig.process.json"
|
|
13
|
+
},
|
|
14
|
+
"repository": {
|
|
15
|
+
"type": "git",
|
|
16
|
+
"url": "git@github.com:opensumi/core.git"
|
|
17
|
+
},
|
|
18
|
+
"dependencies": {
|
|
19
|
+
"@opensumi/ide-core-common": "2.12.1-next-079c1930",
|
|
20
|
+
"@opensumi/ide-core-node": "2.12.1-next-079c1930"
|
|
21
|
+
},
|
|
22
|
+
"devDependencies": {
|
|
23
|
+
"@opensumi/ide-core-browser": "2.12.1-next-079c1930",
|
|
24
|
+
"@opensumi/ide-dev-tool": "^1.3.1"
|
|
25
|
+
}
|
|
26
|
+
}
|