๐Ÿ“ฆ robhogan / forks-vs-threads

๐Ÿ“„ worker.js ยท 58 lines
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58const hermesParser = require('hermes-parser');
const {transformFromAstSync} = require('@babel/core');
const fs = require('fs');

module.exports = {
    transform,
    setup,
}

let hasSetup = false;

function setup() {
    hasSetup = true;
    const sourceAst = hermesParser.parse("'use strict';", {
        babel: true,
        sourceType: 'unambiguous',
    })
    transformFromAstSync(sourceAst, null, {
        configFile: false,
        presets: ['@babel/preset-env']
    });
}

async function transform(filename) {
    if (!hasSetup) {
        throw new Error('Not set up');
    }
    const start = performance.now();
    const src = await fs.promises.readFile(filename, 'utf8');
    const readFileTime = performance.now() - start;

    try {
    const sourceAst = hermesParser.parse(src, {
        babel: true,
        sourceType: 'unambiguous',
    })
    const parseTime = performance.now() - readFileTime - start;
    const result = transformFromAstSync(sourceAst, null, {
        configFile: false,
        presets: ['@babel/preset-env']
    });
    const transformTime = performance.now() - (parseTime + readFileTime + start);

    return {
        result: result?.code,
        extra: {
            parseTime,
            readFileTime,
            transformTime,
            workerTime: performance.now() - start,
        }
    };
    } catch (error) {
        return {
            error: error.message
        }
    }
}