Repository: nodejs/node
File: test/parallel/test-worker-eval-typescript.js (JavaScript)

Code before:
'use strict';
require('../common');
const assert = require('assert');
const { Worker } = require('worker_threads');
const { test } = require('node:test');
const { once } = require('events');

const esmHelloWorld = `
    import worker from 'worker_threads';
    const foo: string = 'Hello, World!';
    worker.parentPort.postMessage(foo);
`;

const cjsHelloWorld = `
    const { parentPort } = require('worker_threads');
    const foo: string = 'Hello, World!';
    parentPort.postMessage(foo);
`;

const disableTypeScriptWarningFlag = '--disable-warning=ExperimentalWarning';

test('Worker eval module typescript without input-type',
     { skip: !process.config.variables.node_use_amaro },
     async () => {
       const w = new Worker(esmHelloWorld, { eval: true, execArgv: [disableTypeScriptWarningFlag] });
       assert.deepStrictEqual(await once(w, 'message'), ['Hello, World!']);
     });

test('Worker eval module typescript with --input-type=module-typescript',
     { skip: !process.config.variables.node_use_amaro },
     async () => {
       const w = new Worker(esmHelloWorld, { eval: true, execArgv: ['--input-type=module-typescript',
                                                                    disableTypeScriptWarningFlag] });
       assert.deepStrictEqual(await once(w, 'message'), ['Hello, World!']);
     });

test('Worker eval module typescript with --input-type=commonjs-typescript',
     { skip: !process.config.variables.node_use_amaro },
     async () => {
       const w = new Worker(esmHelloWorld, { eval: true, execArgv: ['--input-type=commonjs-typescript',
                                                                    disableTypeScriptWarningFlag] });

       const [err] = await once(w, 'error');
       assert.strictEqual(err.name, 'SyntaxError');
       assert.match(err.message, /Cannot use import statement outside a module/);
     });

test('Worker eval module typescript with --input-type=module', async () => {
  const w = new Worker(esmHelloWorld, { eval: true, execArgv: ['--input-type=module',

Review comment (suggestion):
You could make the diff more readable by using a variable
```suggestion
const onlyWithAmaro = { skip: !process.config.variables.node_use_amaro };

test('Worker eval module typescript without input-type', onlyWithAmaro, async () => {
```

Code after:
'use strict';
require('../common');
const assert = require('assert');
const { Worker } = require('worker_threads');
const { test } = require('node:test');
const { once } = require('events');

const esmHelloWorld = `
    import worker from 'worker_threads';
    const foo: string = 'Hello, World!';
    worker.parentPort.postMessage(foo);
`;

const cjsHelloWorld = `
    const { parentPort } = require('worker_threads');
    const foo: string = 'Hello, World!';
    parentPort.postMessage(foo);
`;

const disableTypeScriptWarningFlag = '--disable-warning=ExperimentalWarning';

const onlyWithAmaro = { skip: !process.config.variables.node_use_amaro };

test('Worker eval module typescript without input-type', onlyWithAmaro, async () => {
  const w = new Worker(esmHelloWorld, { eval: true, execArgv: [disableTypeScriptWarningFlag] });
  assert.deepStrictEqual(await once(w, 'message'), ['Hello, World!']);
});

test('Worker eval module typescript with --input-type=module-typescript', onlyWithAmaro, async () => {
  const w = new Worker(esmHelloWorld, { eval: true, execArgv: ['--input-type=module-typescript',
                                                               disableTypeScriptWarningFlag] });
  assert.deepStrictEqual(await once(w, 'message'), ['Hello, World!']);
});

test('Worker eval module typescript with --input-type=commonjs-typescript', onlyWithAmaro, async () => {
  const w = new Worker(esmHelloWorld, { eval: true, execArgv: ['--input-type=commonjs-typescript',
                                                               disableTypeScriptWarningFlag] });

  const [err] = await once(w, 'error');
  assert.strictEqual(err.name, 'SyntaxError');
  assert.match(err.message, /Cannot use import statement outside a module/);
});

test('Worker eval module typescript with --input-type=module', async () => {
  const w = new Worker(esmHelloWorld, { eval: true, execArgv: ['--input-type=module',
                                                               disableTypeScriptWarningFlag] });
  const [err] = await once(w, 'error');
  assert.strictEqual(err.name, 'SyntaxError');
  assert.match(err.message, /Missing initializer in const declaration/);