brighterscript 0.68.4 → 0.69.0
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/CHANGELOG.md +12 -0
- package/dist/BusyStatusTracker.d.ts +37 -7
- package/dist/BusyStatusTracker.js +73 -8
- package/dist/BusyStatusTracker.js.map +1 -1
- package/dist/DiagnosticCollection.d.ts +19 -5
- package/dist/DiagnosticCollection.js +67 -16
- package/dist/DiagnosticCollection.js.map +1 -1
- package/dist/LanguageServer.d.ts +82 -132
- package/dist/LanguageServer.js +403 -940
- package/dist/LanguageServer.js.map +1 -1
- package/dist/Logger.d.ts +9 -4
- package/dist/Logger.js +30 -6
- package/dist/Logger.js.map +1 -1
- package/dist/PluginInterface.d.ts +1 -1
- package/dist/PluginInterface.js.map +1 -1
- package/dist/Program.d.ts +20 -2
- package/dist/Program.js +124 -49
- package/dist/Program.js.map +1 -1
- package/dist/ProgramBuilder.d.ts +21 -7
- package/dist/ProgramBuilder.js +45 -22
- package/dist/ProgramBuilder.js.map +1 -1
- package/dist/Scope.js +6 -3
- package/dist/Scope.js.map +1 -1
- package/dist/SemanticTokenUtils.js +1 -1
- package/dist/SemanticTokenUtils.js.map +1 -1
- package/dist/bscPlugin/CallExpressionInfo.js +2 -1
- package/dist/bscPlugin/CallExpressionInfo.js.map +1 -1
- package/dist/bscPlugin/completions/CompletionsProcessor.js +14 -4
- package/dist/bscPlugin/completions/CompletionsProcessor.js.map +1 -1
- package/dist/bscPlugin/hover/HoverProcessor.js +1 -1
- package/dist/bscPlugin/hover/HoverProcessor.js.map +1 -1
- package/dist/bscPlugin/validation/ScopeValidator.js +9 -9
- package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -1
- package/dist/common/Sequencer.d.ts +27 -0
- package/dist/common/Sequencer.js +113 -0
- package/dist/common/Sequencer.js.map +1 -0
- package/dist/common/Sequencer.spec.d.ts +1 -0
- package/dist/common/Sequencer.spec.js +75 -0
- package/dist/common/Sequencer.spec.js.map +1 -0
- package/dist/deferred.d.ts +2 -0
- package/dist/deferred.js +10 -0
- package/dist/deferred.js.map +1 -1
- package/dist/files/BrsFile.d.ts +1 -1
- package/dist/files/BrsFile.js +10 -15
- package/dist/files/BrsFile.js.map +1 -1
- package/dist/files/BrsFile.spec.js +8 -0
- package/dist/files/BrsFile.spec.js.map +1 -1
- package/dist/interfaces.d.ts +22 -2
- package/dist/lexer/Lexer.js +1 -1
- package/dist/lexer/Lexer.js.map +1 -1
- package/dist/logging.d.ts +6 -1
- package/dist/logging.js +14 -1
- package/dist/logging.js.map +1 -1
- package/dist/lsp/ActionQueue.d.ts +35 -0
- package/dist/lsp/ActionQueue.js +115 -0
- package/dist/lsp/ActionQueue.js.map +1 -0
- package/dist/lsp/ActionQueue.spec.d.ts +1 -0
- package/dist/lsp/ActionQueue.spec.js +80 -0
- package/dist/lsp/ActionQueue.spec.js.map +1 -0
- package/dist/lsp/DocumentManager.d.ts +63 -0
- package/dist/lsp/DocumentManager.js +122 -0
- package/dist/lsp/DocumentManager.js.map +1 -0
- package/dist/lsp/DocumentManager.spec.d.ts +1 -0
- package/dist/lsp/DocumentManager.spec.js +103 -0
- package/dist/lsp/DocumentManager.spec.js.map +1 -0
- package/dist/lsp/LspProject.d.ts +231 -0
- package/dist/lsp/LspProject.js +3 -0
- package/dist/lsp/LspProject.js.map +1 -0
- package/dist/lsp/PathFilterer.d.ts +75 -0
- package/dist/lsp/PathFilterer.js +196 -0
- package/dist/lsp/PathFilterer.js.map +1 -0
- package/dist/lsp/PathFilterer.spec.d.ts +1 -0
- package/dist/lsp/PathFilterer.spec.js +182 -0
- package/dist/lsp/PathFilterer.spec.js.map +1 -0
- package/dist/lsp/Project.d.ts +178 -0
- package/dist/lsp/Project.js +438 -0
- package/dist/lsp/Project.js.map +1 -0
- package/dist/lsp/Project.spec.d.ts +1 -0
- package/dist/lsp/Project.spec.js +236 -0
- package/dist/lsp/Project.spec.js.map +1 -0
- package/dist/lsp/ProjectManager.d.ts +221 -0
- package/dist/lsp/ProjectManager.js +735 -0
- package/dist/lsp/ProjectManager.js.map +1 -0
- package/dist/lsp/ProjectManager.spec.d.ts +1 -0
- package/dist/lsp/ProjectManager.spec.js +756 -0
- package/dist/lsp/ProjectManager.spec.js.map +1 -0
- package/dist/lsp/ReaderWriterManager.d.ts +21 -0
- package/dist/lsp/ReaderWriterManager.js +60 -0
- package/dist/lsp/ReaderWriterManager.js.map +1 -0
- package/dist/lsp/worker/MessageHandler.d.ts +99 -0
- package/dist/lsp/worker/MessageHandler.js +138 -0
- package/dist/lsp/worker/MessageHandler.js.map +1 -0
- package/dist/lsp/worker/MessageHandler.spec.d.ts +1 -0
- package/dist/lsp/worker/MessageHandler.spec.js +64 -0
- package/dist/lsp/worker/MessageHandler.spec.js.map +1 -0
- package/dist/lsp/worker/WorkerPool.d.ts +38 -0
- package/dist/lsp/worker/WorkerPool.js +78 -0
- package/dist/lsp/worker/WorkerPool.js.map +1 -0
- package/dist/lsp/worker/WorkerPool.spec.d.ts +1 -0
- package/dist/lsp/worker/WorkerPool.spec.js +59 -0
- package/dist/lsp/worker/WorkerPool.spec.js.map +1 -0
- package/dist/lsp/worker/WorkerThreadProject.d.ts +144 -0
- package/dist/lsp/worker/WorkerThreadProject.js +181 -0
- package/dist/lsp/worker/WorkerThreadProject.js.map +1 -0
- package/dist/lsp/worker/WorkerThreadProject.spec.d.ts +2 -0
- package/dist/lsp/worker/WorkerThreadProject.spec.js +68 -0
- package/dist/lsp/worker/WorkerThreadProject.spec.js.map +1 -0
- package/dist/lsp/worker/WorkerThreadProjectRunner.d.ts +15 -0
- package/dist/lsp/worker/WorkerThreadProjectRunner.js +58 -0
- package/dist/lsp/worker/WorkerThreadProjectRunner.js.map +1 -0
- package/dist/util.d.ts +31 -5
- package/dist/util.js +117 -19
- package/dist/util.js.map +1 -1
- package/package.json +11 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProjectManager.spec.js","sourceRoot":"","sources":["../../src/lsp/ProjectManager.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { MaybePromise } from '../interfaces';
|
|
2
|
+
/**
|
|
3
|
+
* Manages multiple readers and writers, and ensures that no readers are reading while a writer is writing.
|
|
4
|
+
* This is useful when multiple file changes show up but we also got a completions request, so we need to wait
|
|
5
|
+
* until the files have been written and the program is validated before executing the completions request
|
|
6
|
+
*/
|
|
7
|
+
export declare class ReaderWriterManager {
|
|
8
|
+
private readers;
|
|
9
|
+
private writers;
|
|
10
|
+
/**
|
|
11
|
+
* Register a read action
|
|
12
|
+
*/
|
|
13
|
+
read(action: Action): Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
* Register a write action
|
|
16
|
+
*/
|
|
17
|
+
write(action: Action): Promise<void>;
|
|
18
|
+
private execute;
|
|
19
|
+
}
|
|
20
|
+
declare type Action = () => MaybePromise<any>;
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ReaderWriterManager = void 0;
|
|
4
|
+
const deferred_1 = require("../deferred");
|
|
5
|
+
/**
|
|
6
|
+
* Manages multiple readers and writers, and ensures that no readers are reading while a writer is writing.
|
|
7
|
+
* This is useful when multiple file changes show up but we also got a completions request, so we need to wait
|
|
8
|
+
* until the files have been written and the program is validated before executing the completions request
|
|
9
|
+
*/
|
|
10
|
+
class ReaderWriterManager {
|
|
11
|
+
/**
|
|
12
|
+
* Register a read action
|
|
13
|
+
*/
|
|
14
|
+
read(action) {
|
|
15
|
+
const reader = {
|
|
16
|
+
action: action,
|
|
17
|
+
deferred: new deferred_1.Deferred()
|
|
18
|
+
};
|
|
19
|
+
this.readers.push(reader);
|
|
20
|
+
void this.execute();
|
|
21
|
+
return reader.deferred.promise;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Register a write action
|
|
25
|
+
*/
|
|
26
|
+
write(action) {
|
|
27
|
+
const writer = {
|
|
28
|
+
action: action,
|
|
29
|
+
deferred: new deferred_1.Deferred()
|
|
30
|
+
};
|
|
31
|
+
this.writers.push(writer);
|
|
32
|
+
void this.execute();
|
|
33
|
+
return writer.deferred.promise;
|
|
34
|
+
}
|
|
35
|
+
async execute() {
|
|
36
|
+
let item;
|
|
37
|
+
if (this.writers.length > 0) {
|
|
38
|
+
item = this.writers.pop();
|
|
39
|
+
}
|
|
40
|
+
else if (this.readers.length > 0) {
|
|
41
|
+
item = this.readers.pop();
|
|
42
|
+
//there are no more readers or writers, so quit.
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
//execute the item
|
|
48
|
+
try {
|
|
49
|
+
const result = await Promise.resolve(item.action());
|
|
50
|
+
item.deferred.resolve(result);
|
|
51
|
+
}
|
|
52
|
+
catch (e) {
|
|
53
|
+
item.deferred.reject(e);
|
|
54
|
+
}
|
|
55
|
+
//execute the next action (if there is one)
|
|
56
|
+
void this.execute();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
exports.ReaderWriterManager = ReaderWriterManager;
|
|
60
|
+
//# sourceMappingURL=ReaderWriterManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReaderWriterManager.js","sourceRoot":"","sources":["../../src/lsp/ReaderWriterManager.ts"],"names":[],"mappings":";;;AAAA,0CAAuC;AAGvC;;;;GAIG;AACH,MAAa,mBAAmB;IAM5B;;OAEG;IACI,IAAI,CAAC,MAAc;QACtB,MAAM,MAAM,GAAG;YACX,MAAM,EAAE,MAAM;YACd,QAAQ,EAAE,IAAI,mBAAQ,EAAE;SAC3B,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1B,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;IACnC,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,MAAc;QACvB,MAAM,MAAM,GAAG;YACX,MAAM,EAAE,MAAM;YACd,QAAQ,EAAE,IAAI,mBAAQ,EAAE;SAC3B,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1B,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;IACnC,CAAC;IAEO,KAAK,CAAC,OAAO;QACjB,IAAI,IAAkB,CAAC;QACvB,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YACzB,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;SAC7B;aAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YAChC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YAE1B,gDAAgD;SACnD;aAAM;YACH,OAAO;SACV;QACD,kBAAkB;QAClB,IAAI;YACA,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAChC,IAAI,CAAC,MAAM,EAAE,CAChB,CAAC;YACF,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;SACjC;QAAC,OAAO,CAAC,EAAE;YACR,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SAC3B;QACD,2CAA2C;QAC3C,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;CACJ;AAvDD,kDAuDC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import type { parentPort } from 'worker_threads';
|
|
3
|
+
interface PseudoMessagePort {
|
|
4
|
+
on: (name: 'message', cb: (message: any) => any) => any;
|
|
5
|
+
postMessage: typeof parentPort['postMessage'];
|
|
6
|
+
}
|
|
7
|
+
export declare class MessageHandler<T, TRequestName = MethodNames<T>> {
|
|
8
|
+
constructor(options: {
|
|
9
|
+
name?: string;
|
|
10
|
+
port: PseudoMessagePort;
|
|
11
|
+
onRequest?: (message: WorkerRequest) => any;
|
|
12
|
+
onResponse?: (message: WorkerResponse) => any;
|
|
13
|
+
onUpdate?: (message: WorkerUpdate) => any;
|
|
14
|
+
});
|
|
15
|
+
/**
|
|
16
|
+
* An optional name to help with debugging this handler
|
|
17
|
+
*/
|
|
18
|
+
readonly name: string;
|
|
19
|
+
private port;
|
|
20
|
+
private disposables;
|
|
21
|
+
private emitter;
|
|
22
|
+
private activeRequests;
|
|
23
|
+
/**
|
|
24
|
+
* Get the response with this ID
|
|
25
|
+
* @param id the ID of the response
|
|
26
|
+
* @returns the message
|
|
27
|
+
*/
|
|
28
|
+
private onResponse;
|
|
29
|
+
/**
|
|
30
|
+
* A unique sequence for identifying messages
|
|
31
|
+
*/
|
|
32
|
+
private idSequence;
|
|
33
|
+
/**
|
|
34
|
+
* Send a request to the worker, and wait for a response.
|
|
35
|
+
* @param name the name of the request
|
|
36
|
+
* @param options the request options
|
|
37
|
+
* @param options.data an array of data that will be passed in as params to the target function
|
|
38
|
+
* @param options.id an id for this request
|
|
39
|
+
*/
|
|
40
|
+
sendRequest<R>(name: TRequestName, options?: {
|
|
41
|
+
data: any[];
|
|
42
|
+
id?: number;
|
|
43
|
+
}): Promise<WorkerResponse<R>>;
|
|
44
|
+
/**
|
|
45
|
+
* Send a request to the worker, and wait for a response.
|
|
46
|
+
* @param request the request we are responding to
|
|
47
|
+
* @param options options for this request
|
|
48
|
+
*/
|
|
49
|
+
sendResponse(request: WorkerMessage, options?: {
|
|
50
|
+
data: any;
|
|
51
|
+
} | {
|
|
52
|
+
error: Error;
|
|
53
|
+
} | undefined): void;
|
|
54
|
+
/**
|
|
55
|
+
* Send a request to the worker, and wait for a response.
|
|
56
|
+
* @param name the name of the request
|
|
57
|
+
* @param options options for the update
|
|
58
|
+
* @param options.data an array of data that will be passed in as params to the target function
|
|
59
|
+
* @param options.id an id for this update
|
|
60
|
+
*/
|
|
61
|
+
sendUpdate<T>(name: string, options?: {
|
|
62
|
+
data?: any[];
|
|
63
|
+
id?: number;
|
|
64
|
+
}): void;
|
|
65
|
+
/**
|
|
66
|
+
* Convert an Error object into a plain object so it can be serialized
|
|
67
|
+
* @param error the error to object-ify
|
|
68
|
+
* @returns an object version of an error
|
|
69
|
+
*/
|
|
70
|
+
private errorToObject;
|
|
71
|
+
dispose(): void;
|
|
72
|
+
}
|
|
73
|
+
export interface WorkerRequest<TData = any> {
|
|
74
|
+
id: number;
|
|
75
|
+
type: 'request';
|
|
76
|
+
name: string;
|
|
77
|
+
data?: TData;
|
|
78
|
+
}
|
|
79
|
+
export interface WorkerResponse<TData = any> {
|
|
80
|
+
id: number;
|
|
81
|
+
type: 'response';
|
|
82
|
+
name: string;
|
|
83
|
+
data?: TData;
|
|
84
|
+
/**
|
|
85
|
+
* An error occurred on the remote side. There will be no `.data` value
|
|
86
|
+
*/
|
|
87
|
+
error?: Error;
|
|
88
|
+
}
|
|
89
|
+
export interface WorkerUpdate<TData = any> {
|
|
90
|
+
id: number;
|
|
91
|
+
type: 'update';
|
|
92
|
+
name: string;
|
|
93
|
+
data?: TData;
|
|
94
|
+
}
|
|
95
|
+
export declare type WorkerMessage<T = any> = WorkerRequest<T> | WorkerResponse<T> | WorkerUpdate<T>;
|
|
96
|
+
export declare type MethodNames<T> = {
|
|
97
|
+
[K in keyof T]: T[K] extends (...args: any[]) => any ? K : never;
|
|
98
|
+
}[keyof T];
|
|
99
|
+
export {};
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MessageHandler = void 0;
|
|
4
|
+
const EventEmitter = require("eventemitter3");
|
|
5
|
+
const util_1 = require("../../util");
|
|
6
|
+
const deferred_1 = require("../../deferred");
|
|
7
|
+
class MessageHandler {
|
|
8
|
+
constructor(options) {
|
|
9
|
+
this.disposables = [];
|
|
10
|
+
this.emitter = new EventEmitter();
|
|
11
|
+
this.activeRequests = new Map();
|
|
12
|
+
/**
|
|
13
|
+
* A unique sequence for identifying messages
|
|
14
|
+
*/
|
|
15
|
+
this.idSequence = 0;
|
|
16
|
+
this.name = options === null || options === void 0 ? void 0 : options.name;
|
|
17
|
+
this.port = options === null || options === void 0 ? void 0 : options.port;
|
|
18
|
+
const listener = (message) => {
|
|
19
|
+
var _a, _b, _c;
|
|
20
|
+
switch (message.type) {
|
|
21
|
+
case 'request':
|
|
22
|
+
(_a = options === null || options === void 0 ? void 0 : options.onRequest) === null || _a === void 0 ? void 0 : _a.call(options, message);
|
|
23
|
+
break;
|
|
24
|
+
case 'response':
|
|
25
|
+
(_b = options === null || options === void 0 ? void 0 : options.onResponse) === null || _b === void 0 ? void 0 : _b.call(options, message);
|
|
26
|
+
this.emitter.emit(`${message.type}-${message.id}`, message);
|
|
27
|
+
break;
|
|
28
|
+
case 'update':
|
|
29
|
+
(_c = options === null || options === void 0 ? void 0 : options.onUpdate) === null || _c === void 0 ? void 0 : _c.call(options, message);
|
|
30
|
+
break;
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
options === null || options === void 0 ? void 0 : options.port.on('message', listener);
|
|
34
|
+
this.disposables.push(this.emitter.removeAllListeners.bind(this.emitter), () => (options === null || options === void 0 ? void 0 : options.port).off('message', listener));
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Get the response with this ID
|
|
38
|
+
* @param id the ID of the response
|
|
39
|
+
* @returns the message
|
|
40
|
+
*/
|
|
41
|
+
onResponse(id) {
|
|
42
|
+
const deferred = new deferred_1.Deferred();
|
|
43
|
+
//store this request so we can resolve it later, or reject if this class is disposed
|
|
44
|
+
this.activeRequests.set(id, {
|
|
45
|
+
id: id,
|
|
46
|
+
deferred: deferred
|
|
47
|
+
});
|
|
48
|
+
this.emitter.once(`response-${id}`, (response) => {
|
|
49
|
+
deferred.resolve(response);
|
|
50
|
+
this.activeRequests.delete(id);
|
|
51
|
+
});
|
|
52
|
+
return deferred.promise;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Send a request to the worker, and wait for a response.
|
|
56
|
+
* @param name the name of the request
|
|
57
|
+
* @param options the request options
|
|
58
|
+
* @param options.data an array of data that will be passed in as params to the target function
|
|
59
|
+
* @param options.id an id for this request
|
|
60
|
+
*/
|
|
61
|
+
async sendRequest(name, options) {
|
|
62
|
+
var _a, _b;
|
|
63
|
+
const request = {
|
|
64
|
+
type: 'request',
|
|
65
|
+
name: name,
|
|
66
|
+
data: (_a = options === null || options === void 0 ? void 0 : options.data) !== null && _a !== void 0 ? _a : [],
|
|
67
|
+
id: (_b = options === null || options === void 0 ? void 0 : options.id) !== null && _b !== void 0 ? _b : this.idSequence++
|
|
68
|
+
};
|
|
69
|
+
const responsePromise = this.onResponse(request.id);
|
|
70
|
+
this.port.postMessage(request);
|
|
71
|
+
const response = await responsePromise;
|
|
72
|
+
if ('error' in response) {
|
|
73
|
+
//throw the error so it causes a rejected promise (like we'd expect)
|
|
74
|
+
throw new Error(`Worker thread encountered an error: ${JSON.stringify(response.error.stack)}`);
|
|
75
|
+
}
|
|
76
|
+
return response;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Send a request to the worker, and wait for a response.
|
|
80
|
+
* @param request the request we are responding to
|
|
81
|
+
* @param options options for this request
|
|
82
|
+
*/
|
|
83
|
+
sendResponse(request, options) {
|
|
84
|
+
const response = {
|
|
85
|
+
type: 'response',
|
|
86
|
+
name: request.name,
|
|
87
|
+
id: request.id
|
|
88
|
+
};
|
|
89
|
+
if ('error' in options) {
|
|
90
|
+
//hack: turn the error into a plain json object
|
|
91
|
+
response.error = this.errorToObject(options.error);
|
|
92
|
+
}
|
|
93
|
+
else if ('data' in options) {
|
|
94
|
+
response.data = options.data;
|
|
95
|
+
}
|
|
96
|
+
this.port.postMessage(response);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Send a request to the worker, and wait for a response.
|
|
100
|
+
* @param name the name of the request
|
|
101
|
+
* @param options options for the update
|
|
102
|
+
* @param options.data an array of data that will be passed in as params to the target function
|
|
103
|
+
* @param options.id an id for this update
|
|
104
|
+
*/
|
|
105
|
+
sendUpdate(name, options) {
|
|
106
|
+
var _a, _b;
|
|
107
|
+
let update = {
|
|
108
|
+
type: 'update',
|
|
109
|
+
name: name,
|
|
110
|
+
data: (_a = options === null || options === void 0 ? void 0 : options.data) !== null && _a !== void 0 ? _a : [],
|
|
111
|
+
id: (_b = options === null || options === void 0 ? void 0 : options.id) !== null && _b !== void 0 ? _b : this.idSequence++
|
|
112
|
+
};
|
|
113
|
+
this.port.postMessage(update);
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Convert an Error object into a plain object so it can be serialized
|
|
117
|
+
* @param error the error to object-ify
|
|
118
|
+
* @returns an object version of an error
|
|
119
|
+
*/
|
|
120
|
+
errorToObject(error) {
|
|
121
|
+
var _a, _b;
|
|
122
|
+
return {
|
|
123
|
+
name: error.name,
|
|
124
|
+
message: error.message,
|
|
125
|
+
stack: error.stack,
|
|
126
|
+
cause: ((_a = error.cause) === null || _a === void 0 ? void 0 : _a.message) && ((_b = error.cause) === null || _b === void 0 ? void 0 : _b.stack) ? this.errorToObject(error.cause) : error.cause
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
dispose() {
|
|
130
|
+
util_1.default.applyDispose(this.disposables);
|
|
131
|
+
//reject all active requests
|
|
132
|
+
for (const request of this.activeRequests.values()) {
|
|
133
|
+
request.deferred.reject(new Error(`Request ${request.id} has been rejected because MessageHandler is now disposed`));
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
exports.MessageHandler = MessageHandler;
|
|
138
|
+
//# sourceMappingURL=MessageHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageHandler.js","sourceRoot":"","sources":["../../../src/lsp/worker/MessageHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const worker_threads_1 = require("worker_threads");
|
|
4
|
+
const MessageHandler_1 = require("./MessageHandler");
|
|
5
|
+
const chai_config_spec_1 = require("../../chai-config.spec");
|
|
6
|
+
const util_1 = require("../../util");
|
|
7
|
+
describe('MessageHandler', () => {
|
|
8
|
+
let server;
|
|
9
|
+
let client;
|
|
10
|
+
let channel;
|
|
11
|
+
beforeEach(() => {
|
|
12
|
+
channel = new worker_threads_1.MessageChannel();
|
|
13
|
+
});
|
|
14
|
+
afterEach(() => {
|
|
15
|
+
server === null || server === void 0 ? void 0 : server.dispose();
|
|
16
|
+
client === null || client === void 0 ? void 0 : client.dispose();
|
|
17
|
+
channel.port1.close();
|
|
18
|
+
channel.port2.close();
|
|
19
|
+
});
|
|
20
|
+
it('serializes an error when present', async () => {
|
|
21
|
+
let server = new MessageHandler_1.MessageHandler({
|
|
22
|
+
port: channel.port1,
|
|
23
|
+
onRequest: (request) => {
|
|
24
|
+
server.sendResponse(request, {
|
|
25
|
+
error: new Error('Crash')
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
let client = new MessageHandler_1.MessageHandler({ port: channel.port2 });
|
|
30
|
+
let error;
|
|
31
|
+
try {
|
|
32
|
+
await client.sendRequest('activate');
|
|
33
|
+
}
|
|
34
|
+
catch (e) {
|
|
35
|
+
error = e;
|
|
36
|
+
}
|
|
37
|
+
(0, chai_config_spec_1.expect)(error).to.exist;
|
|
38
|
+
(0, chai_config_spec_1.expect)(error).instanceof(Error);
|
|
39
|
+
});
|
|
40
|
+
it('terminates pending request promises when disposed', async () => {
|
|
41
|
+
let server = new MessageHandler_1.MessageHandler({
|
|
42
|
+
port: channel.port1,
|
|
43
|
+
onRequest: (request) => {
|
|
44
|
+
//never respond to any requests
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
let client = new MessageHandler_1.MessageHandler({ port: channel.port2 });
|
|
48
|
+
let error;
|
|
49
|
+
//send a request that will never be responded to
|
|
50
|
+
let responsePromise = client.sendRequest('activate');
|
|
51
|
+
//sleep a bit to settle
|
|
52
|
+
await util_1.default.sleep(10);
|
|
53
|
+
server.dispose();
|
|
54
|
+
client.dispose();
|
|
55
|
+
try {
|
|
56
|
+
await responsePromise;
|
|
57
|
+
}
|
|
58
|
+
catch (e) {
|
|
59
|
+
error = e;
|
|
60
|
+
}
|
|
61
|
+
(0, chai_config_spec_1.expect)(error === null || error === void 0 ? void 0 : error.message).to.eql('Request 0 has been rejected because MessageHandler is now disposed');
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
//# sourceMappingURL=MessageHandler.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageHandler.spec.js","sourceRoot":"","sources":["../../../src/lsp/worker/MessageHandler.spec.ts"],"names":[],"mappings":";;AAAA,mDAAgD;AAChD,qDAAkD;AAClD,6DAAgD;AAEhD,qCAA8B;AAE9B,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC5B,IAAI,MAAkC,CAAC;IACvC,IAAI,MAAkC,CAAC;IACvC,IAAI,OAAuB,CAAC;IAE5B,UAAU,CAAC,GAAG,EAAE;QACZ,OAAO,GAAG,IAAI,+BAAc,EAAE,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACX,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,EAAE,CAAC;QAClB,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,OAAO,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAC9C,IAAI,MAAM,GAAG,IAAI,+BAAc,CAAC;YAC5B,IAAI,EAAE,OAAO,CAAC,KAAK;YACnB,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE;gBACnB,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE;oBACzB,KAAK,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC;iBAC5B,CAAC,CAAC;YACP,CAAC;SACJ,CAAC,CAAC;QACH,IAAI,MAAM,GAAG,IAAI,+BAAc,CAAa,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QACrE,IAAI,KAAY,CAAC;QACjB,IAAI;YACA,MAAM,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;SACxC;QAAC,OAAO,CAAC,EAAE;YACR,KAAK,GAAG,CAAQ,CAAC;SACpB;QACD,IAAA,yBAAM,EAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;QACvB,IAAA,yBAAM,EAAC,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QAC/D,IAAI,MAAM,GAAG,IAAI,+BAAc,CAAC;YAC5B,IAAI,EAAE,OAAO,CAAC,KAAK;YACnB,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE;gBACnB,+BAA+B;YACnC,CAAC;SACJ,CAAC,CAAC;QACH,IAAI,MAAM,GAAG,IAAI,+BAAc,CAAa,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QACrE,IAAI,KAAY,CAAC;QACjB,gDAAgD;QAChD,IAAI,eAAe,GAAG,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QACrD,uBAAuB;QACvB,MAAM,cAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACrB,MAAM,CAAC,OAAO,EAAE,CAAC;QACjB,MAAM,CAAC,OAAO,EAAE,CAAC;QACjB,IAAI;YACA,MAAM,eAAe,CAAC;SACzB;QAAC,OAAO,CAAC,EAAE;YACR,KAAK,GAAG,CAAQ,CAAC;SACpB;QACD,IAAA,yBAAM,EAAC,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC;IACxG,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import type { Worker } from 'worker_threads';
|
|
3
|
+
export declare class WorkerPool {
|
|
4
|
+
private factory;
|
|
5
|
+
constructor(factory: () => Worker);
|
|
6
|
+
logger: import("@rokucommunity/logger/dist/Logger").Logger;
|
|
7
|
+
/**
|
|
8
|
+
* List of workers that are free to be used by a new task
|
|
9
|
+
*/
|
|
10
|
+
private freeWorkers;
|
|
11
|
+
/**
|
|
12
|
+
* List of all workers that we've ever created
|
|
13
|
+
*/
|
|
14
|
+
private allWorkers;
|
|
15
|
+
/**
|
|
16
|
+
* Ensure that there are ${count} workers available in the pool
|
|
17
|
+
* @param count the number of total free workers that should exist when this function exits
|
|
18
|
+
*/
|
|
19
|
+
preload(count: number): void;
|
|
20
|
+
/**
|
|
21
|
+
* Create a new worker
|
|
22
|
+
*/
|
|
23
|
+
private createWorker;
|
|
24
|
+
/**
|
|
25
|
+
* Get a worker from the pool, or create a new one if none are available
|
|
26
|
+
* @returns a worker
|
|
27
|
+
*/
|
|
28
|
+
getWorker(): Worker;
|
|
29
|
+
/**
|
|
30
|
+
* Give the worker back to the pool so it can be used by someone else
|
|
31
|
+
* @param worker the worker
|
|
32
|
+
*/
|
|
33
|
+
releaseWorker(worker: Worker): void;
|
|
34
|
+
/**
|
|
35
|
+
* Shut down all active worker pools
|
|
36
|
+
*/
|
|
37
|
+
dispose(): void;
|
|
38
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WorkerPool = void 0;
|
|
4
|
+
const logging_1 = require("../../logging");
|
|
5
|
+
class WorkerPool {
|
|
6
|
+
constructor(factory) {
|
|
7
|
+
this.factory = factory;
|
|
8
|
+
this.logger = (0, logging_1.createLogger)();
|
|
9
|
+
/**
|
|
10
|
+
* List of workers that are free to be used by a new task
|
|
11
|
+
*/
|
|
12
|
+
this.freeWorkers = [];
|
|
13
|
+
/**
|
|
14
|
+
* List of all workers that we've ever created
|
|
15
|
+
*/
|
|
16
|
+
this.allWorkers = [];
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Ensure that there are ${count} workers available in the pool
|
|
20
|
+
* @param count the number of total free workers that should exist when this function exits
|
|
21
|
+
*/
|
|
22
|
+
preload(count) {
|
|
23
|
+
while (this.freeWorkers.length < count) {
|
|
24
|
+
this.freeWorkers.push(this.createWorker());
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Create a new worker
|
|
29
|
+
*/
|
|
30
|
+
createWorker() {
|
|
31
|
+
const worker = this.factory();
|
|
32
|
+
this.allWorkers.push(worker);
|
|
33
|
+
return worker;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Get a worker from the pool, or create a new one if none are available
|
|
37
|
+
* @returns a worker
|
|
38
|
+
*/
|
|
39
|
+
getWorker() {
|
|
40
|
+
//we have no free workers. spin up a new one
|
|
41
|
+
if (this.freeWorkers.length === 0) {
|
|
42
|
+
this.logger.log('Creating new worker thread');
|
|
43
|
+
return this.createWorker();
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
//return an existing free worker
|
|
47
|
+
this.logger.log('Reusing existing worker thread');
|
|
48
|
+
return this.freeWorkers.pop();
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Give the worker back to the pool so it can be used by someone else
|
|
53
|
+
* @param worker the worker
|
|
54
|
+
*/
|
|
55
|
+
releaseWorker(worker) {
|
|
56
|
+
//add this worker back to the free workers list (if it's not already in there)
|
|
57
|
+
if (!this.freeWorkers.includes(worker)) {
|
|
58
|
+
this.freeWorkers.push(worker);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Shut down all active worker pools
|
|
63
|
+
*/
|
|
64
|
+
dispose() {
|
|
65
|
+
for (const worker of this.allWorkers) {
|
|
66
|
+
try {
|
|
67
|
+
worker.terminate();
|
|
68
|
+
}
|
|
69
|
+
catch (e) {
|
|
70
|
+
console.error(e);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
this.allWorkers = [];
|
|
74
|
+
this.freeWorkers = [];
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
exports.WorkerPool = WorkerPool;
|
|
78
|
+
//# sourceMappingURL=WorkerPool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkerPool.js","sourceRoot":"","sources":["../../../src/lsp/worker/WorkerPool.ts"],"names":[],"mappings":";;;AACA,2CAA6C;AAE7C,MAAa,UAAU;IACnB,YACY,OAAqB;QAArB,YAAO,GAAP,OAAO,CAAc;QAK1B,WAAM,GAAG,IAAA,sBAAY,GAAE,CAAC;QAE/B;;WAEG;QACK,gBAAW,GAAa,EAAE,CAAC;QACnC;;WAEG;QACK,eAAU,GAAa,EAAE,CAAC;IAXlC,CAAC;IAaD;;;OAGG;IACI,OAAO,CAAC,KAAa;QACxB,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,KAAK,EAAE;YACpC,IAAI,CAAC,WAAW,CAAC,IAAI,CACjB,IAAI,CAAC,YAAY,EAAE,CACtB,CAAC;SACL;IACL,CAAC;IAED;;OAEG;IACK,YAAY;QAChB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC9B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7B,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;OAGG;IACI,SAAS;QACZ,4CAA4C;QAC5C,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE;YAC/B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;YAC9C,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;SAC9B;aAAM;YACH,gCAAgC;YAChC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;YAClD,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;SACjC;IACL,CAAC;IAED;;;OAGG;IACI,aAAa,CAAC,MAAc;QAC/B,8EAA8E;QAC9E,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YACpC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACjC;IACL,CAAC;IAED;;OAEG;IACI,OAAO;QACV,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,UAAU,EAAE;YAClC,IAAI;gBACA,MAAM,CAAC,SAAS,EAAE,CAAC;aACtB;YAAC,OAAO,CAAC,EAAE;gBACR,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aACpB;SACJ;QACD,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;IAC1B,CAAC;CACJ;AAhFD,gCAgFC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const chai_1 = require("chai");
|
|
4
|
+
const WorkerPool_1 = require("./WorkerPool");
|
|
5
|
+
describe('WorkerPool', () => {
|
|
6
|
+
let pool;
|
|
7
|
+
let workers = [];
|
|
8
|
+
beforeEach(() => {
|
|
9
|
+
workers = [];
|
|
10
|
+
//our factory will create empty objects. This prevents us from having to actually run threads.
|
|
11
|
+
pool = new WorkerPool_1.WorkerPool(() => {
|
|
12
|
+
const worker = {};
|
|
13
|
+
workers.push(worker);
|
|
14
|
+
return worker;
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
describe('preload', () => {
|
|
18
|
+
it('ensures enough free workers have been created', () => {
|
|
19
|
+
(0, chai_1.expect)(workers.length).to.eql(0);
|
|
20
|
+
pool.preload(5);
|
|
21
|
+
(0, chai_1.expect)(workers.length).to.eql(5);
|
|
22
|
+
pool.preload(7);
|
|
23
|
+
(0, chai_1.expect)(workers.length).to.eql(7);
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
describe('releaseWorker', () => {
|
|
27
|
+
it('releases a worker back to the pool', () => {
|
|
28
|
+
const worker = pool.getWorker();
|
|
29
|
+
(0, chai_1.expect)(pool['freeWorkers']).lengthOf(0);
|
|
30
|
+
pool.releaseWorker(worker);
|
|
31
|
+
(0, chai_1.expect)(pool['freeWorkers']).lengthOf(1);
|
|
32
|
+
//doesn't crash if we do the same thing again
|
|
33
|
+
pool.releaseWorker(worker);
|
|
34
|
+
(0, chai_1.expect)(pool['freeWorkers']).lengthOf(1);
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
describe('getWorker', () => {
|
|
38
|
+
it('creates a new worker when none exist', () => {
|
|
39
|
+
(0, chai_1.expect)(pool['allWorkers']).to.be.empty;
|
|
40
|
+
(0, chai_1.expect)(pool['freeWorkers']).to.be.empty;
|
|
41
|
+
const worker = pool.getWorker();
|
|
42
|
+
(0, chai_1.expect)(worker).to.eql(workers[0]);
|
|
43
|
+
(0, chai_1.expect)(pool['allWorkers']).to.be.lengthOf(1);
|
|
44
|
+
//should be same instance
|
|
45
|
+
(0, chai_1.expect)(pool['allWorkers'][0]).equals(workers[0]);
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
describe('dispose', () => {
|
|
49
|
+
it('does not crash when worker.terminate() fails', () => {
|
|
50
|
+
const worker = pool.getWorker();
|
|
51
|
+
worker['terminate'] = () => {
|
|
52
|
+
throw new Error('Test crash');
|
|
53
|
+
};
|
|
54
|
+
//should not throw error
|
|
55
|
+
pool.dispose();
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
//# sourceMappingURL=WorkerPool.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkerPool.spec.js","sourceRoot":"","sources":["../../../src/lsp/worker/WorkerPool.spec.ts"],"names":[],"mappings":"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"}
|