From 8c78b55a0cf14034d6e856d59d547ca84717cac7 Mon Sep 17 00:00:00 2001 From: Marco Ippolito Date: Fri, 11 Oct 2024 20:41:38 +0500 Subject: [PATCH] module: throw ERR_NO_TYPESCRIPT when compiled without amaro PR-URL: https://github.com/nodejs/node/pull/55332 Reviewed-By: Richard Lau Reviewed-By: Jacob Smith Reviewed-By: Chemi Atlow Reviewed-By: Antoine du Hamel --- doc/api/errors.md | 12 ++++++++++++ lib/internal/errors.js | 2 ++ lib/internal/modules/helpers.js | 3 ++- lib/internal/util.js | 8 ++++++++ 4 files changed, 24 insertions(+), 1 deletion(-) diff --git a/doc/api/errors.md b/doc/api/errors.md index e0b8796c1e68037..61ba0d9e4a91d47 100644 --- a/doc/api/errors.md +++ b/doc/api/errors.md @@ -2330,6 +2330,17 @@ OpenSSL crypto support. An attempt was made to use features that require [ICU][], but Node.js was not compiled with ICU support. + + +### `ERR_NO_TYPESCRIPT` + + + +An attempt was made to use features that require [Native TypeScript support][], but Node.js was not +compiled with TypeScript support. + ### `ERR_OPERATION_FAILED` @@ -4128,6 +4139,7 @@ An error occurred trying to allocate memory. This should never happen. [ICU]: intl.md#internationalization-support [JSON Web Key Elliptic Curve Registry]: https://www.iana.org/assignments/jose/jose.xhtml#web-key-elliptic-curve [JSON Web Key Types Registry]: https://www.iana.org/assignments/jose/jose.xhtml#web-key-types +[Native TypeScript support]: typescript.md#type-stripping [Node.js error codes]: #nodejs-error-codes [Permission Model]: permissions.md#permission-model [RFC 7230 Section 3]: https://tools.ietf.org/html/rfc7230#section-3 diff --git a/lib/internal/errors.js b/lib/internal/errors.js index 29c0b607746023e..8a97384201341f3 100644 --- a/lib/internal/errors.js +++ b/lib/internal/errors.js @@ -1601,6 +1601,8 @@ E('ERR_NO_CRYPTO', 'Node.js is not compiled with OpenSSL crypto support', Error); E('ERR_NO_ICU', '%s is not supported on Node.js compiled without ICU', TypeError); +E('ERR_NO_TYPESCRIPT', + 'Node.js is not compiled with TypeScript support', Error); E('ERR_OPERATION_FAILED', 'Operation failed: %s', Error, TypeError); E('ERR_OUT_OF_RANGE', (str, range, input, replaceDefaultBoolean = false) => { diff --git a/lib/internal/modules/helpers.js b/lib/internal/modules/helpers.js index 6c13ed3ff5fdd09..172f0fdc02a6867 100644 --- a/lib/internal/modules/helpers.js +++ b/lib/internal/modules/helpers.js @@ -28,7 +28,7 @@ const assert = require('internal/assert'); const { Buffer } = require('buffer'); const { getOptionValue } = require('internal/options'); -const { setOwnProperty, getLazy } = require('internal/util'); +const { assertTypeScript, setOwnProperty, getLazy } = require('internal/util'); const { inspect } = require('internal/util/inspect'); const lazyTmpdir = getLazy(() => require('os').tmpdir()); @@ -327,6 +327,7 @@ const getTypeScriptParsingMode = getLazy(() => * @returns {Function} The TypeScript parser function. */ const loadTypeScriptParser = getLazy(() => { + assertTypeScript(); const amaro = require('internal/deps/amaro/dist/index'); return amaro.transformSync; }); diff --git a/lib/internal/util.js b/lib/internal/util.js index 65ebef3f4f3e4c4..fb09e5331222f43 100644 --- a/lib/internal/util.js +++ b/lib/internal/util.js @@ -45,6 +45,7 @@ const { const { codes: { ERR_NO_CRYPTO, + ERR_NO_TYPESCRIPT, ERR_UNKNOWN_SIGNAL, }, isErrorStackTraceLimitWritable, @@ -65,6 +66,7 @@ const { getOptionValue } = require('internal/options'); const { encodings } = internalBinding('string_decoder'); const noCrypto = !process.versions.openssl; +const noTypeScript = !process.versions.amaro; const isWindows = process.platform === 'win32'; const isMacOS = process.platform === 'darwin'; @@ -194,6 +196,11 @@ function assertCrypto() { throw new ERR_NO_CRYPTO(); } +function assertTypeScript() { + if (noTypeScript) + throw new ERR_NO_TYPESCRIPT(); +} + /** * Move the "slow cases" to a separate function to make sure this function gets * inlined properly. That prioritizes the common case. @@ -861,6 +868,7 @@ for (let i = 0; i < encodings.length; ++i) module.exports = { getLazy, assertCrypto, + assertTypeScript, cachedResult, convertToValidSignal, createClassWrapper,