From 705ca3a5dcff6b8d2ec073a3f2567167230bde47 Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Mon, 23 May 2022 16:40:59 -0700 Subject: [PATCH] Key validity of import=require in module: node off of module and not target --- .../transformers/module/esnextAnd2015.ts | 2 +- ...uleNodeImportRequireEmit(target=es2016).js | 21 +++++++++++++++++++ ...deImportRequireEmit(target=es2016).symbols | 13 ++++++++++++ ...NodeImportRequireEmit(target=es2016).types | 13 ++++++++++++ ...uleNodeImportRequireEmit(target=es2020).js | 21 +++++++++++++++++++ ...deImportRequireEmit(target=es2020).symbols | 13 ++++++++++++ ...NodeImportRequireEmit(target=es2020).types | 13 ++++++++++++ ...moduleNodeImportRequireEmit(target=es5).js | 21 +++++++++++++++++++ ...eNodeImportRequireEmit(target=es5).symbols | 13 ++++++++++++ ...uleNodeImportRequireEmit(target=es5).types | 13 ++++++++++++ ...uleNodeImportRequireEmit(target=esnext).js | 21 +++++++++++++++++++ ...deImportRequireEmit(target=esnext).symbols | 13 ++++++++++++ ...NodeImportRequireEmit(target=esnext).types | 13 ++++++++++++ .../compiler/moduleNodeImportRequireEmit.ts | 13 ++++++++++++ 14 files changed, 202 insertions(+), 1 deletion(-) create mode 100644 tests/baselines/reference/moduleNodeImportRequireEmit(target=es2016).js create mode 100644 tests/baselines/reference/moduleNodeImportRequireEmit(target=es2016).symbols create mode 100644 tests/baselines/reference/moduleNodeImportRequireEmit(target=es2016).types create mode 100644 tests/baselines/reference/moduleNodeImportRequireEmit(target=es2020).js create mode 100644 tests/baselines/reference/moduleNodeImportRequireEmit(target=es2020).symbols create mode 100644 tests/baselines/reference/moduleNodeImportRequireEmit(target=es2020).types create mode 100644 tests/baselines/reference/moduleNodeImportRequireEmit(target=es5).js create mode 100644 tests/baselines/reference/moduleNodeImportRequireEmit(target=es5).symbols create mode 100644 tests/baselines/reference/moduleNodeImportRequireEmit(target=es5).types create mode 100644 tests/baselines/reference/moduleNodeImportRequireEmit(target=esnext).js create mode 100644 tests/baselines/reference/moduleNodeImportRequireEmit(target=esnext).symbols create mode 100644 tests/baselines/reference/moduleNodeImportRequireEmit(target=esnext).types create mode 100644 tests/cases/compiler/moduleNodeImportRequireEmit.ts diff --git a/src/compiler/transformers/module/esnextAnd2015.ts b/src/compiler/transformers/module/esnextAnd2015.ts index 5e755e5083cb3..d0f3d41366f1a 100644 --- a/src/compiler/transformers/module/esnextAnd2015.ts +++ b/src/compiler/transformers/module/esnextAnd2015.ts @@ -72,7 +72,7 @@ namespace ts { // Though an error in es2020 modules, in node-flavor es2020 modules, we can helpfully transform this to a synthetic `require` call // To give easy access to a synchronous `require` in node-flavor esm. We do the transform even in scenarios where we error, but `import.meta.url` // is available, just because the output is reasonable for a node-like runtime. - return getEmitScriptTarget(compilerOptions) >= ModuleKind.ES2020 ? visitImportEqualsDeclaration(node as ImportEqualsDeclaration) : undefined; + return getEmitModuleKind(compilerOptions) >= ModuleKind.Node16 ? visitImportEqualsDeclaration(node as ImportEqualsDeclaration) : undefined; case SyntaxKind.ExportAssignment: return visitExportAssignment(node as ExportAssignment); case SyntaxKind.ExportDeclaration: diff --git a/tests/baselines/reference/moduleNodeImportRequireEmit(target=es2016).js b/tests/baselines/reference/moduleNodeImportRequireEmit(target=es2016).js new file mode 100644 index 0000000000000..88039269e3c9d --- /dev/null +++ b/tests/baselines/reference/moduleNodeImportRequireEmit(target=es2016).js @@ -0,0 +1,21 @@ +//// [tests/cases/compiler/moduleNodeImportRequireEmit.ts] //// + +//// [package.json] +{ + "type": "module" +} +//// [mod.d.ts] +declare module "foo"; +//// [index.ts] +/// +// This should emit a call to createRequire(import.meta.url) +import foo = require("foo"); +foo; + +//// [index.js] +import { createRequire as _createRequire } from "module"; +const __require = _createRequire(import.meta.url); +/// +// This should emit a call to createRequire(import.meta.url) +const foo = __require("foo"); +foo; diff --git a/tests/baselines/reference/moduleNodeImportRequireEmit(target=es2016).symbols b/tests/baselines/reference/moduleNodeImportRequireEmit(target=es2016).symbols new file mode 100644 index 0000000000000..2e268ad6c1eb9 --- /dev/null +++ b/tests/baselines/reference/moduleNodeImportRequireEmit(target=es2016).symbols @@ -0,0 +1,13 @@ +=== tests/cases/compiler/index.ts === +/// +// This should emit a call to createRequire(import.meta.url) +import foo = require("foo"); +>foo : Symbol(foo, Decl(index.ts, 0, 0)) + +foo; +>foo : Symbol(foo, Decl(index.ts, 0, 0)) + +=== tests/cases/compiler/mod.d.ts === +declare module "foo"; +>"foo" : Symbol("foo", Decl(mod.d.ts, 0, 0)) + diff --git a/tests/baselines/reference/moduleNodeImportRequireEmit(target=es2016).types b/tests/baselines/reference/moduleNodeImportRequireEmit(target=es2016).types new file mode 100644 index 0000000000000..1e48fb60be700 --- /dev/null +++ b/tests/baselines/reference/moduleNodeImportRequireEmit(target=es2016).types @@ -0,0 +1,13 @@ +=== tests/cases/compiler/index.ts === +/// +// This should emit a call to createRequire(import.meta.url) +import foo = require("foo"); +>foo : any + +foo; +>foo : any + +=== tests/cases/compiler/mod.d.ts === +declare module "foo"; +>"foo" : any + diff --git a/tests/baselines/reference/moduleNodeImportRequireEmit(target=es2020).js b/tests/baselines/reference/moduleNodeImportRequireEmit(target=es2020).js new file mode 100644 index 0000000000000..88039269e3c9d --- /dev/null +++ b/tests/baselines/reference/moduleNodeImportRequireEmit(target=es2020).js @@ -0,0 +1,21 @@ +//// [tests/cases/compiler/moduleNodeImportRequireEmit.ts] //// + +//// [package.json] +{ + "type": "module" +} +//// [mod.d.ts] +declare module "foo"; +//// [index.ts] +/// +// This should emit a call to createRequire(import.meta.url) +import foo = require("foo"); +foo; + +//// [index.js] +import { createRequire as _createRequire } from "module"; +const __require = _createRequire(import.meta.url); +/// +// This should emit a call to createRequire(import.meta.url) +const foo = __require("foo"); +foo; diff --git a/tests/baselines/reference/moduleNodeImportRequireEmit(target=es2020).symbols b/tests/baselines/reference/moduleNodeImportRequireEmit(target=es2020).symbols new file mode 100644 index 0000000000000..2e268ad6c1eb9 --- /dev/null +++ b/tests/baselines/reference/moduleNodeImportRequireEmit(target=es2020).symbols @@ -0,0 +1,13 @@ +=== tests/cases/compiler/index.ts === +/// +// This should emit a call to createRequire(import.meta.url) +import foo = require("foo"); +>foo : Symbol(foo, Decl(index.ts, 0, 0)) + +foo; +>foo : Symbol(foo, Decl(index.ts, 0, 0)) + +=== tests/cases/compiler/mod.d.ts === +declare module "foo"; +>"foo" : Symbol("foo", Decl(mod.d.ts, 0, 0)) + diff --git a/tests/baselines/reference/moduleNodeImportRequireEmit(target=es2020).types b/tests/baselines/reference/moduleNodeImportRequireEmit(target=es2020).types new file mode 100644 index 0000000000000..1e48fb60be700 --- /dev/null +++ b/tests/baselines/reference/moduleNodeImportRequireEmit(target=es2020).types @@ -0,0 +1,13 @@ +=== tests/cases/compiler/index.ts === +/// +// This should emit a call to createRequire(import.meta.url) +import foo = require("foo"); +>foo : any + +foo; +>foo : any + +=== tests/cases/compiler/mod.d.ts === +declare module "foo"; +>"foo" : any + diff --git a/tests/baselines/reference/moduleNodeImportRequireEmit(target=es5).js b/tests/baselines/reference/moduleNodeImportRequireEmit(target=es5).js new file mode 100644 index 0000000000000..dd4ca3864fd48 --- /dev/null +++ b/tests/baselines/reference/moduleNodeImportRequireEmit(target=es5).js @@ -0,0 +1,21 @@ +//// [tests/cases/compiler/moduleNodeImportRequireEmit.ts] //// + +//// [package.json] +{ + "type": "module" +} +//// [mod.d.ts] +declare module "foo"; +//// [index.ts] +/// +// This should emit a call to createRequire(import.meta.url) +import foo = require("foo"); +foo; + +//// [index.js] +import { createRequire as _createRequire } from "module"; +var __require = _createRequire(import.meta.url); +/// +// This should emit a call to createRequire(import.meta.url) +var foo = __require("foo"); +foo; diff --git a/tests/baselines/reference/moduleNodeImportRequireEmit(target=es5).symbols b/tests/baselines/reference/moduleNodeImportRequireEmit(target=es5).symbols new file mode 100644 index 0000000000000..2e268ad6c1eb9 --- /dev/null +++ b/tests/baselines/reference/moduleNodeImportRequireEmit(target=es5).symbols @@ -0,0 +1,13 @@ +=== tests/cases/compiler/index.ts === +/// +// This should emit a call to createRequire(import.meta.url) +import foo = require("foo"); +>foo : Symbol(foo, Decl(index.ts, 0, 0)) + +foo; +>foo : Symbol(foo, Decl(index.ts, 0, 0)) + +=== tests/cases/compiler/mod.d.ts === +declare module "foo"; +>"foo" : Symbol("foo", Decl(mod.d.ts, 0, 0)) + diff --git a/tests/baselines/reference/moduleNodeImportRequireEmit(target=es5).types b/tests/baselines/reference/moduleNodeImportRequireEmit(target=es5).types new file mode 100644 index 0000000000000..1e48fb60be700 --- /dev/null +++ b/tests/baselines/reference/moduleNodeImportRequireEmit(target=es5).types @@ -0,0 +1,13 @@ +=== tests/cases/compiler/index.ts === +/// +// This should emit a call to createRequire(import.meta.url) +import foo = require("foo"); +>foo : any + +foo; +>foo : any + +=== tests/cases/compiler/mod.d.ts === +declare module "foo"; +>"foo" : any + diff --git a/tests/baselines/reference/moduleNodeImportRequireEmit(target=esnext).js b/tests/baselines/reference/moduleNodeImportRequireEmit(target=esnext).js new file mode 100644 index 0000000000000..88039269e3c9d --- /dev/null +++ b/tests/baselines/reference/moduleNodeImportRequireEmit(target=esnext).js @@ -0,0 +1,21 @@ +//// [tests/cases/compiler/moduleNodeImportRequireEmit.ts] //// + +//// [package.json] +{ + "type": "module" +} +//// [mod.d.ts] +declare module "foo"; +//// [index.ts] +/// +// This should emit a call to createRequire(import.meta.url) +import foo = require("foo"); +foo; + +//// [index.js] +import { createRequire as _createRequire } from "module"; +const __require = _createRequire(import.meta.url); +/// +// This should emit a call to createRequire(import.meta.url) +const foo = __require("foo"); +foo; diff --git a/tests/baselines/reference/moduleNodeImportRequireEmit(target=esnext).symbols b/tests/baselines/reference/moduleNodeImportRequireEmit(target=esnext).symbols new file mode 100644 index 0000000000000..2e268ad6c1eb9 --- /dev/null +++ b/tests/baselines/reference/moduleNodeImportRequireEmit(target=esnext).symbols @@ -0,0 +1,13 @@ +=== tests/cases/compiler/index.ts === +/// +// This should emit a call to createRequire(import.meta.url) +import foo = require("foo"); +>foo : Symbol(foo, Decl(index.ts, 0, 0)) + +foo; +>foo : Symbol(foo, Decl(index.ts, 0, 0)) + +=== tests/cases/compiler/mod.d.ts === +declare module "foo"; +>"foo" : Symbol("foo", Decl(mod.d.ts, 0, 0)) + diff --git a/tests/baselines/reference/moduleNodeImportRequireEmit(target=esnext).types b/tests/baselines/reference/moduleNodeImportRequireEmit(target=esnext).types new file mode 100644 index 0000000000000..1e48fb60be700 --- /dev/null +++ b/tests/baselines/reference/moduleNodeImportRequireEmit(target=esnext).types @@ -0,0 +1,13 @@ +=== tests/cases/compiler/index.ts === +/// +// This should emit a call to createRequire(import.meta.url) +import foo = require("foo"); +>foo : any + +foo; +>foo : any + +=== tests/cases/compiler/mod.d.ts === +declare module "foo"; +>"foo" : any + diff --git a/tests/cases/compiler/moduleNodeImportRequireEmit.ts b/tests/cases/compiler/moduleNodeImportRequireEmit.ts new file mode 100644 index 0000000000000..8687a9db8fd1f --- /dev/null +++ b/tests/cases/compiler/moduleNodeImportRequireEmit.ts @@ -0,0 +1,13 @@ +// @target: es5,es2016,es2020,esnext +// @module: nodenext +// @filename: package.json +{ + "type": "module" +} +// @filename: mod.d.ts +declare module "foo"; +// @filename: index.ts +/// +// This should emit a call to createRequire(import.meta.url) +import foo = require("foo"); +foo; \ No newline at end of file