@revoloo/cypress6
Version:
Cypress.io end to end testing tool
70 lines (51 loc) • 1.64 kB
text/typescript
// this is designed to run as its own thread, managed by `threads.ts`
// WARNING: take care to not over-import modules here - the upfront
// mem/CPU cost is paid up to threads.MAX_WORKER_THREADS times
import { parentPort, isMainThread, threadId } from 'worker_threads'
if (isMainThread) {
throw new Error(`${__filename} should only be run as a worker thread`)
}
import { rewriteJs, rewriteJsSourceMap } from '../js'
import { rewriteHtmlJs } from '../html'
import { RewriteRequest, RewriteResponse } from './types'
parentPort!.postMessage(true)
let _idCounter = 0
parentPort!.on('message', async (req: RewriteRequest) => {
if (req.shutdown) {
return process.exit()
}
const startedAt = Date.now()
function _deferSourceMapRewrite (deferredSourceMap) {
const uniqueId = [threadId, _idCounter++].join('.')
_reply({
threadMs: _getThreadMs(),
deferredSourceMap: {
uniqueId,
...deferredSourceMap,
},
})
return uniqueId
}
function _reply (res: RewriteResponse) {
req.port.postMessage(res)
}
function _getThreadMs () {
return Date.now() - startedAt
}
function _getOutput () {
if (req.isHtml) {
return rewriteHtmlJs(req.url, req.source, _deferSourceMapRewrite)
}
if (req.sourceMap) {
return rewriteJsSourceMap(req.url, req.source, req.inputSourceMap)
}
return rewriteJs(req.url, req.source, _deferSourceMapRewrite)
}
try {
const output = await _getOutput()
_reply({ output, threadMs: _getThreadMs() })
} catch (error) {
_reply({ error, threadMs: _getThreadMs() })
}
return req.port.close()
})