1+ /// <reference lib="dom" />
12// tslint:disable function-constructor no-eval no-duplicate-super max-classes-per-file
23
34import getCallsites , { CallSite } from "callsites"
@@ -6,7 +7,14 @@ import { cpus } from 'os'
67import * as path from "path"
78import { ThreadsWorkerOptions , WorkerImplementation } from "../types/master"
89
10+ interface WorkerGlobalScope {
11+ addEventListener ( eventName : string , listener : ( event : Event ) => void ) : void
12+ postMessage ( message : any , transferables ?: any [ ] ) : void
13+ removeEventListener ( eventName : string , listener : ( event : Event ) => void ) : void
14+ }
15+
916declare const __non_webpack_require__ : typeof require
17+ declare const self : WorkerGlobalScope
1018
1119type WorkerEventName = "error" | "message"
1220
@@ -191,12 +199,36 @@ function initTinyWorker(): typeof WorkerImplementation {
191199 return Worker as any
192200}
193201
194- export function selectWorkerImplementation ( ) : typeof WorkerImplementation {
202+ let implementation : typeof WorkerImplementation
203+ let isTinyWorker : boolean
204+
205+ function selectWorkerImplementation ( ) : typeof WorkerImplementation {
195206 try {
207+ isTinyWorker = false
196208 return initWorkerThreadsWorker ( )
197209 } catch ( error ) {
198210 // tslint:disable-next-line no-console
199211 console . debug ( "Node worker_threads not available. Trying to fall back to tiny-worker polyfill..." )
212+ isTinyWorker = true
200213 return initTinyWorker ( )
201214 }
202215}
216+
217+ export function getWorkerImplementation ( ) : typeof WorkerImplementation {
218+ if ( ! implementation ) {
219+ implementation = selectWorkerImplementation ( )
220+ }
221+ return implementation
222+ }
223+
224+ export function isWorkerRuntime ( ) {
225+ if ( isTinyWorker ) {
226+ return typeof self !== "undefined" && self . postMessage ? true : false
227+ } else {
228+ // Webpack hack
229+ const isMainThread = typeof __non_webpack_require__ === "function"
230+ ? __non_webpack_require__ ( "worker_threads" ) . isMainThread
231+ : eval ( "require" ) ( "worker_threads" ) . isMainThread
232+ return ! isMainThread
233+ }
234+ }
0 commit comments