@@ -270,6 +270,105 @@ changes:
270270Register a module that exports [hooks][] that customize Node.js module
271271resolution and loading behavior. See [Customization hooks][].
272272
273+ ## ` module.stripTypeScriptTypes(code[, options])`
274+
275+ <!-- YAML
276+ added: REPLACEME
277+ -->
278+
279+ > Stability: 1.0 - Early development
280+
281+ * ` code ` {string} The code to strip type annotations from.
282+ * ` options` {Object}
283+ * ` mode` {string} **Default:** ` ' strip' ` . Possible values are:
284+ * ` ' strip' ` Only strip type annotations without performing the transformation of TypeScript features.
285+ * ` ' transform' ` Strip type annotations and transform TypeScript features to JavaScript.
286+ * ` sourceMap` {boolean} **Default:** ` false` . Only when ` mode` is ` ' transform' ` , if ` true` , a source map
287+ will be generated for the transformed code.
288+ * ` sourceUrl` {string} Specifies the source url used in the source map.
289+ * Returns: {string} The code with type annotations stripped.
290+ ` module .stripTypeScriptTypes ()` removes type annotations from TypeScript code. It
291+ can be used to strip type annotations from TypeScript code before running it
292+ with ` vm.runInContext()` or ` vm.compileFunction()` .
293+ By default, it will throw an error if the code contains TypeScript features
294+ that require transformation such as ` Enums` ,
295+ see [type-stripping][] for more information.
296+ When mode is ` ' transform' ` , it also transforms TypeScript features to JavaScript,
297+ see [transform TypeScript features][] for more information.
298+ When mode is ` ' strip' ` , source maps are not generated, because locations are preserved.
299+ If ` sourceMap` is provided, when mode is ` ' strip' ` , an error will be thrown.
300+
301+ _WARNING_: The output of this function should not be considered stable across Node.js versions,
302+ due to changes in the TypeScript parser.
303+
304+ ` ` ` mjs
305+ import { stripTypeScriptTypes } from ' node:module' ;
306+ const code = ' const a: number = 1;' ;
307+ const strippedCode = stripTypeScriptTypes (code);
308+ console .log (strippedCode);
309+ // Prints: const a = 1;
310+ ` ` `
311+
312+ ` ` ` cjs
313+ const { stripTypeScriptTypes } = require (' node:module' );
314+ const code = ' const a: number = 1;' ;
315+ const strippedCode = stripTypeScriptTypes (code);
316+ console .log (strippedCode);
317+ // Prints: const a = 1;
318+ ` ` `
319+
320+ If ` sourceUrl` is provided, it will be used appended as a comment at the end of the output:
321+
322+ ` ` ` mjs
323+ import { stripTypeScriptTypes } from ' node:module' ;
324+ const code = ' const a: number = 1;' ;
325+ const strippedCode = stripTypeScriptTypes (code, { mode: ' strip' , sourceUrl: ' source.ts' });
326+ console .log (strippedCode);
327+ // Prints: const a = 1\n\n//# sourceURL=source.ts;
328+ ` ` `
329+
330+ ` ` ` cjs
331+ const { stripTypeScriptTypes } = require (' node:module' );
332+ const code = ' const a: number = 1;' ;
333+ const strippedCode = stripTypeScriptTypes (code, { mode: ' strip' , sourceUrl: ' source.ts' });
334+ console .log (strippedCode);
335+ // Prints: const a = 1\n\n//# sourceURL=source.ts;
336+ ` ` `
337+
338+ When ` mode` is ` ' transform' ` , the code is transformed to JavaScript:
339+
340+ ` ` ` mjs
341+ import { stripTypeScriptTypes } from ' node:module' ;
342+ const code = `
343+ namespace MathUtil {
344+ export const add = (a: number, b: number) => a + b;
345+ }` ;
346+ const strippedCode = stripTypeScriptTypes (code, { mode: ' transform' , sourceMap: true });
347+ console .log (strippedCode);
348+ // Prints:
349+ // var MathUtil;
350+ // (function(MathUtil) {
351+ // MathUtil.add = (a, b)=>a + b;
352+ // })(MathUtil || (MathUtil = {}));
353+ // # sourceMappingURL=data:application/json;base64, ...
354+ ` ` `
355+
356+ ` ` ` cjs
357+ const { stripTypeScriptTypes } = require (' node:module' );
358+ const code = `
359+ namespace MathUtil {
360+ export const add = (a: number, b: number) => a + b;
361+ }` ;
362+ const strippedCode = stripTypeScriptTypes (code, { mode: ' transform' , sourceMap: true });
363+ console .log (strippedCode);
364+ // Prints:
365+ // var MathUtil;
366+ // (function(MathUtil) {
367+ // MathUtil.add = (a, b)=>a + b;
368+ // })(MathUtil || (MathUtil = {}));
369+ // # sourceMappingURL=data:application/json;base64, ...
370+ ` ` `
371+
273372### ` module .syncBuiltinESMExports ()`
274373
275374<!-- YAML
@@ -1252,3 +1351,5 @@ returned object contains the following keys:
12521351[realm]: https://tc39.es/ecma262/#realm
12531352[source map include directives]: https://sourcemaps.info/spec.html#h.lmz475t4mvbx
12541353[transferable objects]: worker_threads.md#portpostmessagevalue-transferlist
1354+ [transform TypeScript features]: typescript.md#typescript-features
1355+ [type-stripping]: typescript.md#type-stripping
0 commit comments