diff --git a/src/compiler/transformers/ts.ts b/src/compiler/transformers/ts.ts index bdd0f5efcc74d..d413a835d0d86 100644 --- a/src/compiler/transformers/ts.ts +++ b/src/compiler/transformers/ts.ts @@ -2452,7 +2452,12 @@ namespace ts { * * @param node The module declaration node. */ - function shouldEmitModuleDeclaration(node: ModuleDeclaration) { + function shouldEmitModuleDeclaration(nodeIn: ModuleDeclaration) { + const node = getParseTreeNode(nodeIn, isModuleDeclaration); + if (!node) { + // If we can't find a parse tree node, assume the node is instantiated. + return true; + } return isInstantiatedModule(node, !!compilerOptions.preserveConstEnums || !!compilerOptions.isolatedModules); } diff --git a/src/testRunner/unittests/transform.ts b/src/testRunner/unittests/transform.ts index ffd5ba7609f27..bcb0c93d1a8c6 100644 --- a/src/testRunner/unittests/transform.ts +++ b/src/testRunner/unittests/transform.ts @@ -447,6 +447,35 @@ namespace Foo { }).outputText; }); + testBaseline("transformUpdateModuleMember", () => { + return transpileModule(` +module MyModule { + const myVariable = 1; + function foo(param: string) {} +} +`, { + transformers: { + before: [renameVariable], + }, + compilerOptions: { + target: ScriptTarget.ES2015, + newLine: NewLineKind.CarriageReturnLineFeed, + } + }).outputText; + + function renameVariable(context: TransformationContext) { + return (sourceFile: SourceFile): SourceFile => { + return visitNode(sourceFile, rootTransform, isSourceFile); + }; + function rootTransform(node: T): Node { + if (isVariableDeclaration(node)) { + return updateVariableDeclaration(node, createIdentifier("newName"), /* type */ undefined, node.initializer); + } + return visitEachChild(node, rootTransform, context); + } + } + }); + // https://github.com/Microsoft/TypeScript/issues/24709 testBaseline("issue24709", () => { const fs = vfs.createFromFileSystem(Harness.IO, /*caseSensitive*/ true); diff --git a/tests/baselines/reference/transformApi/transformsCorrectly.transformUpdateModuleMember.js b/tests/baselines/reference/transformApi/transformsCorrectly.transformUpdateModuleMember.js new file mode 100644 index 0000000000000..4dad11f737cec --- /dev/null +++ b/tests/baselines/reference/transformApi/transformsCorrectly.transformUpdateModuleMember.js @@ -0,0 +1,5 @@ +var MyModule; +(function (MyModule) { + const newName = 1; + function foo(param) { } +})(MyModule || (MyModule = {}));