diff --git a/doc/api/errors.md b/doc/api/errors.md index 5a613a1422dc07..c62f70f51ceb51 100644 --- a/doc/api/errors.md +++ b/doc/api/errors.md @@ -2343,6 +2343,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` @@ -4112,6 +4123,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 f31bac27e3fd40..be5ce9fc24bc5d 100644 --- a/lib/internal/errors.js +++ b/lib/internal/errors.js @@ -1605,6 +1605,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 11adec360cc98c..85bc51635a13d6 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()); @@ -328,6 +328,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 d7b5642ad0ce82..809e9697a29990 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'; @@ -196,9 +198,17 @@ function assertCrypto() { throw new ERR_NO_CRYPTO(); } -// Return undefined if there is no match. -// Move the "slow cases" to a separate function to make sure this function gets -// inlined properly. That prioritizes the common case. +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. + * @param {unknown} enc + * @returns {string | undefined} Returns undefined if there is no match. + */ function normalizeEncoding(enc) { if (enc == null || enc === 'utf8' || enc === 'utf-8') return 'utf8'; return slowCases(enc); @@ -862,6 +872,7 @@ for (let i = 0; i < encodings.length; ++i) module.exports = { getLazy, assertCrypto, + assertTypeScript, cachedResult, convertToValidSignal, createClassWrapper,