From 4798e0547c0d24e401a7e5670b5f351334a25540 Mon Sep 17 00:00:00 2001 From: Antoine du Hamel Date: Fri, 11 Oct 2024 13:27:16 +0200 Subject: [PATCH] process: fix `process.features.typescript` when Amaro is unavailable PR-URL: https://github.com/nodejs/node/pull/55323 Reviewed-By: Marco Ippolito Reviewed-By: Richard Lau --- lib/internal/bootstrap/node.js | 2 +- test/es-module/test-typescript.mjs | 49 ++++++++++--------- .../echo-process-features-typescript.cjs | 2 + 3 files changed, 28 insertions(+), 25 deletions(-) create mode 100644 test/fixtures/typescript/echo-process-features-typescript.cjs diff --git a/lib/internal/bootstrap/node.js b/lib/internal/bootstrap/node.js index e06854deaba5a0..b8c47ee0f54bbd 100644 --- a/lib/internal/bootstrap/node.js +++ b/lib/internal/bootstrap/node.js @@ -315,7 +315,7 @@ ObjectDefineProperty(process, 'features', { const { emitWarning, emitWarningSync } = require('internal/process/warning'); const { getOptionValue } = require('internal/options'); -let kTypeStrippingMode = null; +let kTypeStrippingMode = process.config.variables.node_use_amaro ? null : false; // This must be a getter, as getOptionValue does not work // before bootstrapping. ObjectDefineProperty(process.features, 'typescript', { diff --git a/test/es-module/test-typescript.mjs b/test/es-module/test-typescript.mjs index d1314450436b7b..a7ca6d70dd5e10 100644 --- a/test/es-module/test-typescript.mjs +++ b/test/es-module/test-typescript.mjs @@ -3,6 +3,31 @@ import * as fixtures from '../common/fixtures.mjs'; import { match, strictEqual } from 'node:assert'; import { test } from 'node:test'; +test('expect process.features.typescript to be \'strip\' when --experimental-strip-types', async () => { + const result = await spawnPromisified(process.execPath, [ + '--no-warnings', + '--experimental-strip-types', + fixtures.path('typescript/echo-process-features-typescript.cjs'), + ]); + + strictEqual(result.stderr, ''); + strictEqual(result.stdout, process.config.variables.node_use_amaro ? 'strip\n' : 'false\n'); + strictEqual(result.code, 0); +}); + +test('expect process.features.typescript to be \'transform\' when --experimental-transform-types', async () => { + const result = await spawnPromisified(process.execPath, [ + '--no-warnings', + '--experimental-transform-types', + fixtures.path('typescript/echo-process-features-typescript.cjs'), + ]); + + strictEqual(result.stderr, ''); + strictEqual(result.stdout, process.config.variables.node_use_amaro ? 'transform\n' : 'false\n'); + strictEqual(result.code, 0); +}); + + if (!process.config.variables.node_use_amaro) skip('Requires Amaro'); test('execute a TypeScript file', async () => { @@ -353,30 +378,6 @@ test('execute a TypeScript test mocking module', { skip: isWindows && process.ar strictEqual(result.code, 0); }); -test('expect process.features.typescript to be \'strip\' when --experimental-strip-types', async () => { - const result = await spawnPromisified(process.execPath, [ - '--no-warnings', - '--experimental-strip-types', - '-p', 'process.features.typescript', - ]); - - strictEqual(result.stderr, ''); - strictEqual(result.stdout, 'strip\n'); - strictEqual(result.code, 0); -}); - -test('expect process.features.typescript to be \'transform\' when --experimental-transform-types', async () => { - const result = await spawnPromisified(process.execPath, [ - '--no-warnings', - '--experimental-transform-types', - '-p', 'process.features.typescript', - ]); - - strictEqual(result.stderr, ''); - strictEqual(result.stdout, 'transform\n'); - strictEqual(result.code, 0); -}); - test('expect process.features.typescript to be false without type-stripping', async () => { strictEqual(process.features.typescript, false); }); diff --git a/test/fixtures/typescript/echo-process-features-typescript.cjs b/test/fixtures/typescript/echo-process-features-typescript.cjs new file mode 100644 index 00000000000000..7f8b14e9e0440f --- /dev/null +++ b/test/fixtures/typescript/echo-process-features-typescript.cjs @@ -0,0 +1,2 @@ +'use strict'; +console.log(process.features.typescript);