diff --git a/doc/api/errors.md b/doc/api/errors.md index e0b8796c1e6803..61ba0d9e4a91d4 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 29c0b607746023..8a97384201341f 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 6c13ed3ff5fdd0..172f0fdc02a686 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 65ebef3f4f3e4c..fb09e5331222f4 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,