@atlaspack/workers 2.14.5-canary.24 → 2.14.5-canary.241
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 +276 -0
- package/dist/Handle.js +33 -0
- package/dist/Worker.js +180 -0
- package/dist/WorkerFarm.js +539 -0
- package/dist/backend.js +34 -0
- package/dist/bus.js +24 -0
- package/dist/child.js +290 -0
- package/dist/childState.js +11 -0
- package/dist/cpuCount.js +72 -0
- package/dist/index.js +44 -0
- package/dist/process/ProcessChild.js +48 -0
- package/dist/process/ProcessWorker.js +68 -0
- package/dist/threads/ThreadsChild.js +31 -0
- package/dist/threads/ThreadsWorker.js +47 -0
- package/dist/types.js +2 -0
- package/dist/web/WebChild.js +34 -0
- package/dist/web/WebWorker.js +70 -0
- package/index.d.ts +96 -3
- package/lib/Handle.js +0 -3
- package/lib/Worker.js +7 -1
- package/lib/WorkerFarm.js +12 -7
- package/lib/backend.js +5 -1
- package/lib/bus.js +1 -1
- package/lib/child.js +11 -4
- package/lib/cpuCount.js +6 -2
- package/lib/process/ProcessChild.js +6 -1
- package/lib/process/ProcessWorker.js +9 -2
- package/lib/threads/ThreadsChild.js +3 -0
- package/lib/threads/ThreadsWorker.js +10 -2
- package/lib/types/Handle.d.ts +19 -0
- package/lib/types/Worker.d.ts +40 -0
- package/lib/types/WorkerFarm.d.ts +93 -0
- package/lib/types/backend.d.ts +4 -0
- package/lib/types/bus.d.ts +6 -0
- package/lib/types/child.d.ts +43 -0
- package/lib/types/childState.d.ts +3 -0
- package/lib/types/cpuCount.d.ts +2 -0
- package/lib/types/index.d.ts +6 -0
- package/lib/types/process/ProcessChild.d.ts +9 -0
- package/lib/types/process/ProcessWorker.d.ts +16 -0
- package/lib/types/threads/ThreadsChild.d.ts +8 -0
- package/lib/types/threads/ThreadsWorker.d.ts +15 -0
- package/lib/types/types.d.ts +52 -0
- package/lib/types/web/WebChild.d.ts +8 -0
- package/lib/types/web/WebWorker.d.ts +15 -0
- package/lib/web/WebChild.js +6 -1
- package/lib/web/WebWorker.js +19 -4
- package/package.json +15 -19
- package/src/{Handle.js → Handle.ts} +11 -11
- package/src/{Worker.js → Worker.ts} +66 -54
- package/src/{WorkerFarm.js → WorkerFarm.ts} +195 -142
- package/src/{backend.js → backend.ts} +6 -3
- package/src/{bus.js → bus.ts} +2 -3
- package/src/{child.js → child.ts} +55 -43
- package/src/{childState.js → childState.ts} +1 -2
- package/src/{cpuCount.js → cpuCount.ts} +10 -7
- package/src/{index.js → index.ts} +0 -1
- package/src/process/{ProcessChild.js → ProcessChild.ts} +5 -3
- package/src/process/{ProcessWorker.js → ProcessWorker.ts} +10 -7
- package/src/threads/{ThreadsChild.js → ThreadsChild.ts} +2 -2
- package/src/threads/{ThreadsWorker.js → ThreadsWorker.ts} +14 -8
- package/src/{types.js → types.ts} +34 -35
- package/src/web/{WebChild.js → WebChild.ts} +6 -2
- package/src/web/{WebWorker.js → WebWorker.ts} +19 -7
- package/test/{cpuCount.test.js → cpuCount.test.ts} +0 -1
- package/test/{workerfarm.test.cjs → workerfarm.test.js} +9 -2
- package/tsconfig.json +27 -0
- package/tsconfig.tsbuildinfo +1 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import type { ErrorWithCode, FilePath } from '@atlaspack/types-internal';
|
|
2
|
+
import type { CallRequest, HandleCallRequest, WorkerRequest, BackendType } from './types';
|
|
3
|
+
import type { HandleFunction } from './Handle';
|
|
4
|
+
import EventEmitter from 'events';
|
|
5
|
+
import Worker, { WorkerCall } from './Worker';
|
|
6
|
+
import Handle from './Handle';
|
|
7
|
+
import { SamplingProfiler } from '@atlaspack/profiler';
|
|
8
|
+
export type SharedReference = number;
|
|
9
|
+
export type FarmOptions = {
|
|
10
|
+
maxConcurrentWorkers: number;
|
|
11
|
+
maxConcurrentCallsPerWorker: number;
|
|
12
|
+
forcedKillTime: number;
|
|
13
|
+
useLocalWorker: boolean;
|
|
14
|
+
warmWorkers: boolean;
|
|
15
|
+
workerPath?: FilePath;
|
|
16
|
+
backend: BackendType;
|
|
17
|
+
shouldPatchConsole?: boolean;
|
|
18
|
+
shouldTrace?: boolean;
|
|
19
|
+
};
|
|
20
|
+
type WorkerModule = {
|
|
21
|
+
readonly [key: string]: (...args: Array<unknown>) => Promise<unknown>;
|
|
22
|
+
};
|
|
23
|
+
export type WorkerApi = {
|
|
24
|
+
callMaster(arg1: CallRequest, arg2?: boolean | null | undefined): Promise<unknown>;
|
|
25
|
+
createReverseHandle(fn: HandleFunction): Handle;
|
|
26
|
+
getSharedReference(ref: SharedReference): unknown;
|
|
27
|
+
resolveSharedReference(value: unknown): SharedReference | null | undefined;
|
|
28
|
+
callChild?: (childId: number, request: HandleCallRequest) => Promise<unknown>;
|
|
29
|
+
};
|
|
30
|
+
export { Handle };
|
|
31
|
+
/**
|
|
32
|
+
* workerPath should always be defined inside farmOptions
|
|
33
|
+
*/
|
|
34
|
+
export default class WorkerFarm extends EventEmitter {
|
|
35
|
+
callQueue: Array<WorkerCall>;
|
|
36
|
+
ending: boolean;
|
|
37
|
+
localWorker: WorkerModule;
|
|
38
|
+
localWorkerInit: Promise<undefined> | null | undefined;
|
|
39
|
+
options: FarmOptions;
|
|
40
|
+
run: HandleFunction;
|
|
41
|
+
warmWorkers: number;
|
|
42
|
+
readyWorkers: number;
|
|
43
|
+
workers: Map<number, Worker>;
|
|
44
|
+
handles: Map<number, Handle>;
|
|
45
|
+
sharedReferences: Map<SharedReference, unknown>;
|
|
46
|
+
sharedReferencesByValue: Map<unknown, SharedReference>;
|
|
47
|
+
serializedSharedReferences: Map<SharedReference, ArrayBufferLike | null | undefined>;
|
|
48
|
+
profiler: SamplingProfiler | null | undefined;
|
|
49
|
+
constructor(farmOptions?: Partial<FarmOptions>);
|
|
50
|
+
workerApi: {
|
|
51
|
+
callChild: (childId: number, request: HandleCallRequest) => Promise<unknown>;
|
|
52
|
+
callMaster: (request: CallRequest, awaitResponse?: boolean | null | undefined) => Promise<unknown>;
|
|
53
|
+
createReverseHandle: (fn: HandleFunction) => Handle;
|
|
54
|
+
getSharedReference: (ref: SharedReference) => unknown;
|
|
55
|
+
resolveSharedReference: (value: unknown) => undefined | SharedReference;
|
|
56
|
+
runHandle: (handle: Handle, args: Array<any>) => Promise<unknown>;
|
|
57
|
+
};
|
|
58
|
+
warmupWorker(method: string, args: Array<any>): void;
|
|
59
|
+
shouldStartRemoteWorkers(): boolean;
|
|
60
|
+
createHandle(method: string, useMainThread?: boolean): HandleFunction;
|
|
61
|
+
onError(error: ErrorWithCode, worker: Worker): undefined | Promise<undefined>;
|
|
62
|
+
startChild(): void;
|
|
63
|
+
stopWorker(worker: Worker): Promise<void>;
|
|
64
|
+
processQueue(): void;
|
|
65
|
+
callWorker(worker: Worker, call: WorkerCall): Promise<void>;
|
|
66
|
+
processRequest(data: {
|
|
67
|
+
location: FilePath;
|
|
68
|
+
} & Partial<WorkerRequest>, worker?: Worker): Promise<string | null | undefined>;
|
|
69
|
+
addCall(method: string, args: Array<any>): Promise<any>;
|
|
70
|
+
end(): Promise<void>;
|
|
71
|
+
startMaxWorkers(): void;
|
|
72
|
+
shouldUseRemoteWorkers(): boolean;
|
|
73
|
+
createReverseHandle(fn: HandleFunction): Handle;
|
|
74
|
+
createSharedReference(value: unknown, isCacheable?: boolean): {
|
|
75
|
+
ref: SharedReference;
|
|
76
|
+
dispose(): Promise<unknown>;
|
|
77
|
+
};
|
|
78
|
+
getSerializedSharedReference(ref: SharedReference): ArrayBufferLike;
|
|
79
|
+
startProfile(): Promise<void>;
|
|
80
|
+
endProfile(): Promise<void>;
|
|
81
|
+
callAllWorkers(method: string, args: Array<any>): Promise<void>;
|
|
82
|
+
takeHeapSnapshot(): Promise<void>;
|
|
83
|
+
static getNumWorkers(): number;
|
|
84
|
+
static isWorker(): boolean;
|
|
85
|
+
static getWorkerApi(): {
|
|
86
|
+
callMaster: (request: CallRequest, awaitResponse?: boolean | null | undefined) => Promise<unknown>;
|
|
87
|
+
createReverseHandle: (fn: (...args: Array<any>) => unknown) => Handle;
|
|
88
|
+
getSharedReference: (ref: SharedReference) => unknown;
|
|
89
|
+
resolveSharedReference: (value: unknown) => undefined | SharedReference;
|
|
90
|
+
runHandle: (handle: Handle, args: Array<any>) => Promise<unknown>;
|
|
91
|
+
};
|
|
92
|
+
static getConcurrentCallsPerWorker(defaultValue?: number): number;
|
|
93
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { CallRequest, WorkerMessage, WorkerRequest, WorkerResponse, ChildImpl } from './types';
|
|
2
|
+
import type { Async, IDisposable } from '@atlaspack/types-internal';
|
|
3
|
+
import type { SharedReference } from './WorkerFarm';
|
|
4
|
+
import { SamplingProfiler } from '@atlaspack/profiler';
|
|
5
|
+
export type Class<T> = new (...args: any[]) => T;
|
|
6
|
+
type ChildCall = WorkerRequest & {
|
|
7
|
+
resolve: (result: Promise<any> | any) => void;
|
|
8
|
+
reject: (error?: any) => void;
|
|
9
|
+
};
|
|
10
|
+
export declare class Child {
|
|
11
|
+
callQueue: Array<ChildCall>;
|
|
12
|
+
childId: number | null | undefined;
|
|
13
|
+
maxConcurrentCalls: number;
|
|
14
|
+
module: any | null | undefined;
|
|
15
|
+
responseId: number;
|
|
16
|
+
responseQueue: Map<number, ChildCall>;
|
|
17
|
+
loggerDisposable: IDisposable;
|
|
18
|
+
tracerDisposable: IDisposable;
|
|
19
|
+
child: ChildImpl;
|
|
20
|
+
profiler: SamplingProfiler | null | undefined;
|
|
21
|
+
handles: Map<number, Handle>;
|
|
22
|
+
sharedReferences: Map<SharedReference, unknown>;
|
|
23
|
+
sharedReferencesByValue: Map<unknown, SharedReference>;
|
|
24
|
+
constructor(ChildBackend: Class<ChildImpl>);
|
|
25
|
+
workerApi: {
|
|
26
|
+
callMaster: (request: CallRequest, awaitResponse?: boolean | null | undefined) => Promise<unknown>;
|
|
27
|
+
createReverseHandle: (fn: (...args: Array<any>) => unknown) => Handle;
|
|
28
|
+
getSharedReference: (ref: SharedReference) => unknown;
|
|
29
|
+
resolveSharedReference: (value: unknown) => undefined | SharedReference;
|
|
30
|
+
runHandle: (handle: Handle, args: Array<any>) => Promise<unknown>;
|
|
31
|
+
};
|
|
32
|
+
messageListener(message: WorkerMessage): Async<void>;
|
|
33
|
+
send(data: WorkerMessage): void;
|
|
34
|
+
childInit(module: string, childId: number): Promise<void>;
|
|
35
|
+
handleRequest(data: WorkerRequest): Promise<void>;
|
|
36
|
+
handleResponse(data: WorkerResponse): void;
|
|
37
|
+
addCall(request: CallRequest, awaitResponse?: boolean | null): Promise<unknown>;
|
|
38
|
+
sendRequest(call: ChildCall): void;
|
|
39
|
+
processQueue(): void;
|
|
40
|
+
handleEnd(): void;
|
|
41
|
+
createReverseHandle(fn: (...args: Array<any>) => unknown): Handle;
|
|
42
|
+
}
|
|
43
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ChildImpl, MessageHandler, ExitHandler, WorkerMessage } from '../types';
|
|
2
|
+
export default class ProcessChild implements ChildImpl {
|
|
3
|
+
onMessage: MessageHandler;
|
|
4
|
+
onExit: ExitHandler;
|
|
5
|
+
constructor(onMessage: MessageHandler, onExit: ExitHandler);
|
|
6
|
+
handleMessage(data: string): void;
|
|
7
|
+
send(data: WorkerMessage): void;
|
|
8
|
+
stop(): void;
|
|
9
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { WorkerImpl, MessageHandler, ErrorHandler, ExitHandler, WorkerMessage } from '../types';
|
|
2
|
+
import { ChildProcess } from 'child_process';
|
|
3
|
+
export declare let WORKER_PATH: string;
|
|
4
|
+
export default class ProcessWorker implements WorkerImpl {
|
|
5
|
+
execArgv: any;
|
|
6
|
+
onMessage: MessageHandler;
|
|
7
|
+
onError: ErrorHandler;
|
|
8
|
+
onExit: ExitHandler;
|
|
9
|
+
child: ChildProcess;
|
|
10
|
+
processQueue: boolean;
|
|
11
|
+
sendQueue: Array<any>;
|
|
12
|
+
constructor(execArgv: any, onMessage: MessageHandler, onError: ErrorHandler, onExit: ExitHandler);
|
|
13
|
+
start(): Promise<void>;
|
|
14
|
+
stop(): Promise<void>;
|
|
15
|
+
send(data: WorkerMessage): void;
|
|
16
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ChildImpl, MessageHandler, ExitHandler, WorkerMessage } from '../types';
|
|
2
|
+
export default class ThreadsChild implements ChildImpl {
|
|
3
|
+
onMessage: MessageHandler;
|
|
4
|
+
onExit: ExitHandler;
|
|
5
|
+
constructor(onMessage: MessageHandler, onExit: ExitHandler);
|
|
6
|
+
handleMessage(data: WorkerMessage): void;
|
|
7
|
+
send(data: WorkerMessage): void;
|
|
8
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { WorkerImpl, MessageHandler, ErrorHandler, ExitHandler, WorkerMessage } from '../types';
|
|
2
|
+
import { Worker } from 'worker_threads';
|
|
3
|
+
export declare let WORKER_PATH: string;
|
|
4
|
+
export default class ThreadsWorker implements WorkerImpl {
|
|
5
|
+
execArgv: any;
|
|
6
|
+
onMessage: MessageHandler;
|
|
7
|
+
onError: ErrorHandler;
|
|
8
|
+
onExit: ExitHandler;
|
|
9
|
+
worker: Worker;
|
|
10
|
+
constructor(execArgv: any, onMessage: MessageHandler, onError: ErrorHandler, onExit: ExitHandler);
|
|
11
|
+
start(): Promise<void>;
|
|
12
|
+
stop(): Promise<void>;
|
|
13
|
+
handleMessage(data: WorkerMessage): void;
|
|
14
|
+
send(data: WorkerMessage): void;
|
|
15
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { Diagnostic } from '@atlaspack/diagnostic';
|
|
2
|
+
import type { FilePath } from '@atlaspack/types-internal';
|
|
3
|
+
export type LocationCallRequest = {
|
|
4
|
+
args: ReadonlyArray<unknown>;
|
|
5
|
+
location: string;
|
|
6
|
+
method?: string;
|
|
7
|
+
};
|
|
8
|
+
export type HandleCallRequest = {
|
|
9
|
+
args: ReadonlyArray<unknown>;
|
|
10
|
+
handle: number;
|
|
11
|
+
};
|
|
12
|
+
export type CallRequest = LocationCallRequest | HandleCallRequest;
|
|
13
|
+
export type WorkerRequest = {
|
|
14
|
+
args: ReadonlyArray<any>;
|
|
15
|
+
awaitResponse?: boolean;
|
|
16
|
+
child?: number | null | undefined;
|
|
17
|
+
idx?: number;
|
|
18
|
+
location?: FilePath;
|
|
19
|
+
method?: string | null | undefined;
|
|
20
|
+
type: 'request';
|
|
21
|
+
handle?: number;
|
|
22
|
+
};
|
|
23
|
+
export type WorkerDataResponse = {
|
|
24
|
+
idx?: number;
|
|
25
|
+
child?: number;
|
|
26
|
+
type: 'response';
|
|
27
|
+
contentType: 'data';
|
|
28
|
+
content: string;
|
|
29
|
+
};
|
|
30
|
+
export type WorkerErrorResponse = {
|
|
31
|
+
idx?: number;
|
|
32
|
+
child?: number;
|
|
33
|
+
type: 'response';
|
|
34
|
+
contentType: 'error';
|
|
35
|
+
content: Diagnostic | Array<Diagnostic>;
|
|
36
|
+
};
|
|
37
|
+
export type WorkerResponse = WorkerDataResponse | WorkerErrorResponse;
|
|
38
|
+
export type WorkerMessage = WorkerRequest | WorkerResponse;
|
|
39
|
+
export type MessageHandler = (data: WorkerMessage) => void;
|
|
40
|
+
export type ErrorHandler = (err: Error) => void;
|
|
41
|
+
export type ExitHandler = (code: number) => void;
|
|
42
|
+
export interface WorkerImpl {
|
|
43
|
+
constructor(execArgv: any, onMessage: MessageHandler, onError: ErrorHandler, onExit: ExitHandler): void;
|
|
44
|
+
start(): Promise<void>;
|
|
45
|
+
stop(): Promise<void>;
|
|
46
|
+
send(data: WorkerMessage): void;
|
|
47
|
+
}
|
|
48
|
+
export interface ChildImpl {
|
|
49
|
+
constructor(onMessage: MessageHandler, onExit: ExitHandler): void;
|
|
50
|
+
send(data: WorkerMessage): void;
|
|
51
|
+
}
|
|
52
|
+
export type BackendType = 'threads' | 'process' | 'web';
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ChildImpl, MessageHandler, ExitHandler, WorkerMessage } from '../types';
|
|
2
|
+
export default class WebChild implements ChildImpl {
|
|
3
|
+
onMessage: MessageHandler;
|
|
4
|
+
onExit: ExitHandler;
|
|
5
|
+
constructor(onMessage: MessageHandler, onExit: ExitHandler);
|
|
6
|
+
handleMessage(data: WorkerMessage): void;
|
|
7
|
+
send(data: WorkerMessage): void;
|
|
8
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { WorkerImpl, MessageHandler, ErrorHandler, ExitHandler, WorkerMessage } from '../types';
|
|
2
|
+
export declare let WORKER_PATH: URL;
|
|
3
|
+
export default class WebWorker implements WorkerImpl {
|
|
4
|
+
execArgv: any;
|
|
5
|
+
onMessage: MessageHandler;
|
|
6
|
+
onError: ErrorHandler;
|
|
7
|
+
onExit: ExitHandler;
|
|
8
|
+
worker: Worker;
|
|
9
|
+
stopping: Promise<undefined> | null | undefined;
|
|
10
|
+
constructor(execArgv: any, onMessage: MessageHandler, onError: ErrorHandler, onExit: ExitHandler);
|
|
11
|
+
start(): Promise<void>;
|
|
12
|
+
stop(): Promise<void>;
|
|
13
|
+
handleMessage(data: WorkerMessage): void;
|
|
14
|
+
send(data: WorkerMessage): void;
|
|
15
|
+
}
|
package/lib/web/WebChild.js
CHANGED
|
@@ -14,6 +14,10 @@ function _buildCache() {
|
|
|
14
14
|
var _child = require("../child");
|
|
15
15
|
var _childState = require("../childState");
|
|
16
16
|
/* eslint-env worker*/
|
|
17
|
+
|
|
18
|
+
// Type declarations for Web Worker environment
|
|
19
|
+
|
|
20
|
+
// @ts-expect-error TS2420
|
|
17
21
|
class WebChild {
|
|
18
22
|
constructor(onMessage, onExit) {
|
|
19
23
|
if (!(typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope)) {
|
|
@@ -28,7 +32,6 @@ class WebChild {
|
|
|
28
32
|
this.onExit(0);
|
|
29
33
|
self.postMessage('stopped');
|
|
30
34
|
}
|
|
31
|
-
// $FlowFixMe assume WorkerMessage as data
|
|
32
35
|
this.handleMessage(data);
|
|
33
36
|
});
|
|
34
37
|
self.postMessage('online');
|
|
@@ -40,5 +43,7 @@ class WebChild {
|
|
|
40
43
|
self.postMessage((0, _buildCache().prepareForSerialization)(data));
|
|
41
44
|
}
|
|
42
45
|
}
|
|
46
|
+
|
|
47
|
+
// @ts-expect-error TS2345
|
|
43
48
|
exports.default = WebChild;
|
|
44
49
|
(0, _childState.setChild)(new _child.Child(WebChild));
|
package/lib/web/WebWorker.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.default = void 0;
|
|
6
|
+
exports.default = exports.WORKER_PATH = void 0;
|
|
7
7
|
function _buildCache() {
|
|
8
8
|
const data = require("@atlaspack/build-cache");
|
|
9
9
|
_buildCache = function () {
|
|
@@ -19,7 +19,18 @@ function _utils() {
|
|
|
19
19
|
return data;
|
|
20
20
|
}
|
|
21
21
|
let id = 0;
|
|
22
|
+
|
|
23
|
+
// @ts-expect-error This is actually a module
|
|
24
|
+
let WORKER_PATH = exports.WORKER_PATH = new URL('./WebChild.js', import.meta.url);
|
|
25
|
+
if (process.env.ATLASPACK_REGISTER_USE_SRC === 'true') {
|
|
26
|
+
// @ts-expect-error This is actually a module
|
|
27
|
+
exports.WORKER_PATH = WORKER_PATH = new URL('./WebChild.ts', import.meta.url);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// @ts-expect-error TS2420
|
|
22
31
|
class WebWorker {
|
|
32
|
+
// @ts-expect-error TS2564
|
|
33
|
+
|
|
23
34
|
constructor(execArgv, onMessage, onError, onExit) {
|
|
24
35
|
this.execArgv = execArgv;
|
|
25
36
|
this.onMessage = onMessage;
|
|
@@ -27,7 +38,7 @@ class WebWorker {
|
|
|
27
38
|
this.onExit = onExit;
|
|
28
39
|
}
|
|
29
40
|
start() {
|
|
30
|
-
//
|
|
41
|
+
// @ts-expect-error TS1470
|
|
31
42
|
this.worker = new Worker(new URL('./WebChild.js', import.meta.url), {
|
|
32
43
|
name: `Parcel Worker ${id++}`,
|
|
33
44
|
type: 'module'
|
|
@@ -40,21 +51,23 @@ class WebWorker {
|
|
|
40
51
|
data
|
|
41
52
|
}) => {
|
|
42
53
|
if (data === 'online') {
|
|
54
|
+
// @ts-expect-error TS2554
|
|
43
55
|
deferred.resolve();
|
|
44
56
|
return;
|
|
45
57
|
}
|
|
46
|
-
|
|
47
|
-
// $FlowFixMe assume WorkerMessage as data
|
|
48
58
|
this.handleMessage(data);
|
|
49
59
|
};
|
|
60
|
+
// @ts-expect-error TS2322
|
|
50
61
|
this.worker.onerror = this.onError;
|
|
51
62
|
// Web workers can't crash or intentionally stop on their own, apart from stop() below
|
|
52
63
|
// this.worker.on('exit', this.onExit);
|
|
53
64
|
|
|
65
|
+
// @ts-expect-error TS2322
|
|
54
66
|
return promise;
|
|
55
67
|
}
|
|
56
68
|
stop() {
|
|
57
69
|
if (!this.stopping) {
|
|
70
|
+
// @ts-expect-error TS2322
|
|
58
71
|
this.stopping = (async () => {
|
|
59
72
|
this.worker.postMessage('stop');
|
|
60
73
|
let {
|
|
@@ -65,6 +78,7 @@ class WebWorker {
|
|
|
65
78
|
data
|
|
66
79
|
}) => {
|
|
67
80
|
if (data === 'stopped') {
|
|
81
|
+
// @ts-expect-error TS2554
|
|
68
82
|
deferred.resolve();
|
|
69
83
|
}
|
|
70
84
|
});
|
|
@@ -73,6 +87,7 @@ class WebWorker {
|
|
|
73
87
|
this.onExit(0);
|
|
74
88
|
})();
|
|
75
89
|
}
|
|
90
|
+
// @ts-expect-error TS2322
|
|
76
91
|
return this.stopping;
|
|
77
92
|
}
|
|
78
93
|
handleMessage(data) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaspack/workers",
|
|
3
|
-
"version": "2.14.5-canary.
|
|
3
|
+
"version": "2.14.5-canary.241+816fbf634",
|
|
4
4
|
"description": "Blazing fast, zero configuration web application bundler",
|
|
5
5
|
"license": "(MIT OR Apache-2.0)",
|
|
6
6
|
"publishConfig": {
|
|
@@ -10,26 +10,19 @@
|
|
|
10
10
|
"type": "git",
|
|
11
11
|
"url": "https://github.com/atlassian-labs/atlaspack.git"
|
|
12
12
|
},
|
|
13
|
-
"main": "lib/index.js",
|
|
14
|
-
"source": "src/index.
|
|
15
|
-
"types": "index.d.ts",
|
|
13
|
+
"main": "./lib/index.js",
|
|
14
|
+
"source": "./src/index.ts",
|
|
15
|
+
"types": "./lib/types/index.d.ts",
|
|
16
16
|
"engines": {
|
|
17
17
|
"node": ">= 16.0.0"
|
|
18
18
|
},
|
|
19
|
-
"exports": {
|
|
20
|
-
".": {
|
|
21
|
-
"types": "./index.d.ts",
|
|
22
|
-
"@atlaspack::sources": "./src/index.js",
|
|
23
|
-
"default": "./lib/index.js"
|
|
24
|
-
}
|
|
25
|
-
},
|
|
26
19
|
"dependencies": {
|
|
27
|
-
"@atlaspack/build-cache": "2.13.3-canary.
|
|
28
|
-
"@atlaspack/diagnostic": "2.14.1-canary.
|
|
29
|
-
"@atlaspack/logger": "2.14.5-canary.
|
|
30
|
-
"@atlaspack/profiler": "2.14.1-canary.
|
|
31
|
-
"@atlaspack/types-internal": "2.14.1-canary.
|
|
32
|
-
"@atlaspack/utils": "2.14.5-canary.
|
|
20
|
+
"@atlaspack/build-cache": "2.13.3-canary.309+816fbf634",
|
|
21
|
+
"@atlaspack/diagnostic": "2.14.1-canary.309+816fbf634",
|
|
22
|
+
"@atlaspack/logger": "2.14.5-canary.241+816fbf634",
|
|
23
|
+
"@atlaspack/profiler": "2.14.1-canary.309+816fbf634",
|
|
24
|
+
"@atlaspack/types-internal": "2.14.1-canary.309+816fbf634",
|
|
25
|
+
"@atlaspack/utils": "2.14.5-canary.241+816fbf634",
|
|
33
26
|
"nullthrows": "^1.1.1"
|
|
34
27
|
},
|
|
35
28
|
"browser": {
|
|
@@ -37,5 +30,8 @@
|
|
|
37
30
|
"./src/threads/ThreadsWorker.js": false
|
|
38
31
|
},
|
|
39
32
|
"type": "commonjs",
|
|
40
|
-
"
|
|
41
|
-
|
|
33
|
+
"scripts": {
|
|
34
|
+
"build:lib": "gulp build --gulpfile ../../../gulpfile.js --cwd ."
|
|
35
|
+
},
|
|
36
|
+
"gitHead": "816fbf634125215c3b4f2d79c0cd4a976648f1dc"
|
|
37
|
+
}
|
|
@@ -1,24 +1,21 @@
|
|
|
1
|
-
// @flow strict-local
|
|
2
1
|
import {registerSerializableClass} from '@atlaspack/build-cache';
|
|
3
|
-
// $FlowFixMe
|
|
4
2
|
import packageJson from '../package.json';
|
|
5
3
|
|
|
6
4
|
let HANDLE_ID = 0;
|
|
7
|
-
// $FlowFixMe
|
|
8
5
|
export type HandleFunction = (...args: Array<any>) => any;
|
|
9
6
|
|
|
10
|
-
type HandleOpts = {
|
|
11
|
-
fn?: HandleFunction
|
|
12
|
-
childId?:
|
|
13
|
-
id?: number
|
|
14
|
-
|
|
7
|
+
type HandleOpts = {
|
|
8
|
+
fn?: HandleFunction;
|
|
9
|
+
childId?: number | null | undefined;
|
|
10
|
+
id?: number;
|
|
11
|
+
};
|
|
15
12
|
|
|
16
13
|
const handleById: Map<number, Handle> = new Map();
|
|
17
14
|
|
|
18
15
|
export default class Handle {
|
|
19
16
|
id: number;
|
|
20
|
-
childId:
|
|
21
|
-
fn:
|
|
17
|
+
childId: number | null | undefined;
|
|
18
|
+
fn: HandleFunction | null | undefined;
|
|
22
19
|
|
|
23
20
|
constructor(opts: HandleOpts) {
|
|
24
21
|
this.id = opts.id ?? ++HANDLE_ID;
|
|
@@ -31,7 +28,10 @@ export default class Handle {
|
|
|
31
28
|
handleById.delete(this.id);
|
|
32
29
|
}
|
|
33
30
|
|
|
34
|
-
serialize(): {
|
|
31
|
+
serialize(): {
|
|
32
|
+
childId: number | null | undefined;
|
|
33
|
+
id: number;
|
|
34
|
+
} {
|
|
35
35
|
return {
|
|
36
36
|
id: this.id,
|
|
37
37
|
childId: this.childId,
|