From f9f46fdbdda67978bde8683d8453ebd765754969 Mon Sep 17 00:00:00 2001 From: Andrew Branch Date: Thu, 21 Mar 2024 11:46:24 -0700 Subject: [PATCH] Update existing tests --- tests/baselines/reference/api/typescript.d.ts | 111 ++++++++++++++---- .../bundlerImportESM(module=esnext).js | 6 +- ...dlerNodeModules1(module=esnext).errors.txt | 6 +- .../bundlerNodeModules1(module=esnext).js | 3 +- .../bundlerNodeModules1(module=esnext).types | 4 +- ...erNodeModules1(module=preserve).errors.txt | 6 +- ...bundlerNodeModules1(module=preserve).types | 4 +- ...lback(moduleresolution=bundler).errors.txt | 29 ----- ...esolvepackagejsonexports=false).errors.txt | 31 ----- ...itions(resolvepackagejsonexports=false).js | 2 - ...resolvepackagejsonexports=true).errors.txt | 31 ----- ...ditions(resolvepackagejsonexports=true).js | 2 - ...lesExportsSpecifierGenerationConditions.js | 8 +- ...uleDetectionIsolatedModulesCjsFileScope.js | 3 +- .../reference/modulePreserve4.errors.txt | 41 ++++++- tests/baselines/reference/modulePreserve4.js | 7 ++ .../reference/modulePreserve4.symbols | 8 ++ .../baselines/reference/modulePreserve4.types | 14 ++- ...tionEmitDynamicImportWithPackageExports.js | 4 +- .../reference/nodeNextModuleResolution1.js | 3 +- .../reference/nodeNextModuleResolution2.js | 3 +- ...stic1(moduleresolution=bundler).errors.txt | 2 - tests/cases/compiler/modulePreserve4.ts | 3 + .../conditionalExportsResolutionFallback.ts | 1 + .../moduleResolution/customConditions.ts | 1 + .../resolvesWithoutExportsDiagnostic1.ts | 1 + 26 files changed, 183 insertions(+), 151 deletions(-) delete mode 100644 tests/baselines/reference/conditionalExportsResolutionFallback(moduleresolution=bundler).errors.txt delete mode 100644 tests/baselines/reference/customConditions(resolvepackagejsonexports=false).errors.txt delete mode 100644 tests/baselines/reference/customConditions(resolvepackagejsonexports=true).errors.txt diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index 1601e677d29d5..54a8ce152aa39 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -6006,19 +6006,67 @@ declare namespace ts { isSourceFileFromExternalLibrary(file: SourceFile): boolean; isSourceFileDefaultLibrary(file: SourceFile): boolean; /** - * Calculates the final resolution mode for a given module reference node. This is the resolution mode explicitly provided via import - * attributes, if present, or the syntax the usage would have if emitted to JavaScript. In `--module node16` or `nodenext`, this may - * depend on the file's `impliedNodeFormat`. In `--module preserve`, it depends only on the input syntax of the reference. In other - * `module` modes, when overriding import attributes are not provided, this function returns `undefined`, as the result would have no - * impact on module resolution, emit, or type checking. + * Calculates the final resolution mode for a given module reference node. This function only returns a result when module resolution + * settings allow differing resolution between ESM imports and CJS requires, or when a mode is explicitly provided via import attributes, + * which cause an `import` or `require` condition to be used during resolution regardless of module resolution settings. In absence of + * overriding attributes, and in modes that support differing resolution, the result indicates the syntax the usage would emit to JavaScript. + * Some examples: + * + * ```ts + * // tsc foo.mts --module nodenext + * import {} from "mod"; + * // Result: ESNext - the import emits as ESM due to `impliedNodeFormat` set by .mts file extension + * + * // tsc foo.cts --module nodenext + * import {} from "mod"; + * // Result: CommonJS - the import emits as CJS due to `impliedNodeFormat` set by .cts file extension + * + * // tsc foo.ts --module preserve --moduleResolution bundler + * import {} from "mod"; + * // Result: ESNext - the import emits as ESM due to `--module preserve` and `--moduleResolution bundler` + * // supports conditional imports/exports + * + * // tsc foo.ts --module preserve --moduleResolution node10 + * import {} from "mod"; + * // Result: undefined - the import emits as ESM due to `--module preserve`, but `--moduleResolution node10` + * // does not support conditional imports/exports + * + * // tsc foo.ts --module commonjs --moduleResolution node10 + * import type {} from "mod" with { "resolution-mode": "import" }; + * // Result: ESNext - conditional imports/exports always supported with "resolution-mode" attribute + * ``` */ getModeForUsageLocation(file: SourceFile, usage: StringLiteralLike): ResolutionMode; /** - * Calculates the final resolution mode for an import at some index within a file's `imports` list. This is the resolution mode - * explicitly provided via import attributes, if present, or the syntax the usage would have if emitted to JavaScript. In - * `--module node16` or `nodenext`, this may depend on the file's `impliedNodeFormat`. In `--module preserve`, it depends only on the - * input syntax of the reference. In other `module` modes, when overriding import attributes are not provided, this function returns - * `undefined`, as the result would have no impact on module resolution, emit, or type checking. + * Calculates the final resolution mode for an import at some index within a file's `imports` list. This function only returns a result + * when module resolution settings allow differing resolution between ESM imports and CJS requires, or when a mode is explicitly provided + * via import attributes, which cause an `import` or `require` condition to be used during resolution regardless of module resolution + * settings. In absence of overriding attributes, and in modes that support differing resolution, the result indicates the syntax the + * usage would emit to JavaScript. Some examples: + * + * ```ts + * // tsc foo.mts --module nodenext + * import {} from "mod"; + * // Result: ESNext - the import emits as ESM due to `impliedNodeFormat` set by .mts file extension + * + * // tsc foo.cts --module nodenext + * import {} from "mod"; + * // Result: CommonJS - the import emits as CJS due to `impliedNodeFormat` set by .cts file extension + * + * // tsc foo.ts --module preserve --moduleResolution bundler + * import {} from "mod"; + * // Result: ESNext - the import emits as ESM due to `--module preserve` and `--moduleResolution bundler` + * // supports conditional imports/exports + * + * // tsc foo.ts --module preserve --moduleResolution node10 + * import {} from "mod"; + * // Result: undefined - the import emits as ESM due to `--module preserve`, but `--moduleResolution node10` + * // does not support conditional imports/exports + * + * // tsc foo.ts --module commonjs --moduleResolution node10 + * import type {} from "mod" with { "resolution-mode": "import" }; + * // Result: ESNext - conditional imports/exports always supported with "resolution-mode" attribute + * ``` */ getModeForResolutionAtIndex(file: SourceFile, index: number): ResolutionMode; getProjectReferences(): readonly ProjectReference[] | undefined; @@ -9366,24 +9414,43 @@ declare namespace ts { function getModeForResolutionAtIndex(file: SourceFile, index: number, compilerOptions: CompilerOptions): ResolutionMode; /** * Use `program.getModeForUsageLocation`, which retrieves the correct `compilerOptions`, instead of this function whenever possible. - * Calculates the final resolution mode for a given module reference node. This is the resolution mode explicitly provided via import - * attributes, if present, or the syntax the usage would have if emitted to JavaScript. In `--module node16` or `nodenext`, this may - * depend on the file's `impliedNodeFormat`. In `--module preserve`, it depends only on the input syntax of the reference. In other - * `module` modes, when overriding import attributes are not provided, this function returns `undefined`, as the result would have no - * impact on module resolution, emit, or type checking. + * Calculates the final resolution mode for a given module reference node. This function only returns a result when module resolution + * settings allow differing resolution between ESM imports and CJS requires, or when a mode is explicitly provided via import attributes, + * which cause an `import` or `require` condition to be used during resolution regardless of module resolution settings. In absence of + * overriding attributes, and in modes that support differing resolution, the result indicates the syntax the usage would emit to JavaScript. + * Some examples: + * + * ```ts + * // tsc foo.mts --module nodenext + * import {} from "mod"; + * // Result: ESNext - the import emits as ESM due to `impliedNodeFormat` set by .mts file extension + * + * // tsc foo.cts --module nodenext + * import {} from "mod"; + * // Result: CommonJS - the import emits as CJS due to `impliedNodeFormat` set by .cts file extension + * + * // tsc foo.ts --module preserve --moduleResolution bundler + * import {} from "mod"; + * // Result: ESNext - the import emits as ESM due to `--module preserve` and `--moduleResolution bundler` + * // supports conditional imports/exports + * + * // tsc foo.ts --module preserve --moduleResolution node10 + * import {} from "mod"; + * // Result: undefined - the import emits as ESM due to `--module preserve`, but `--moduleResolution node10` + * // does not support conditional imports/exports + * + * // tsc foo.ts --module commonjs --moduleResolution node10 + * import type {} from "mod" with { "resolution-mode": "import" }; + * // Result: ESNext - conditional imports/exports always supported with "resolution-mode" attribute + * ``` + * * @param file The file the import or import-like reference is contained within * @param usage The module reference string * @param compilerOptions The compiler options for the program that owns the file. If the file belongs to a referenced project, the compiler options * should be the options of the referenced project, not the referencing project. * @returns The final resolution mode of the import */ - function getModeForUsageLocation( - file: { - impliedNodeFormat?: ResolutionMode; - }, - usage: StringLiteralLike, - compilerOptions: CompilerOptions, - ): ModuleKind.CommonJS | ModuleKind.ESNext | undefined; + function getModeForUsageLocation(file: SourceFile, usage: StringLiteralLike, compilerOptions: CompilerOptions): ResolutionMode; function getConfigFileParsingDiagnostics(configFileParseResult: ParsedCommandLine): readonly Diagnostic[]; /** * A function for determining if a given file is esm or cjs format, assuming modern node module resolution rules, as configured by the diff --git a/tests/baselines/reference/bundlerImportESM(module=esnext).js b/tests/baselines/reference/bundlerImportESM(module=esnext).js index 48e483322c215..486ca757bd2e3 100644 --- a/tests/baselines/reference/bundlerImportESM(module=esnext).js +++ b/tests/baselines/reference/bundlerImportESM(module=esnext).js @@ -16,6 +16,8 @@ import { esm } from "./esm.mjs"; //// [esm.mjs] export var esm = 0; //// [not-actually-cjs.cjs] -export {}; +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); //// [still-not-cjs.js] -export {}; +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/tests/baselines/reference/bundlerNodeModules1(module=esnext).errors.txt b/tests/baselines/reference/bundlerNodeModules1(module=esnext).errors.txt index 69921a8ce1425..b25d226dacf5f 100644 --- a/tests/baselines/reference/bundlerNodeModules1(module=esnext).errors.txt +++ b/tests/baselines/reference/bundlerNodeModules1(module=esnext).errors.txt @@ -4,7 +4,7 @@ error TS6504: File '/node_modules/dual/index.cjs' is a JavaScript file. Did you error TS6504: File '/node_modules/dual/index.js' is a JavaScript file. Did you mean to enable the 'allowJs' option? The file is in the program because: Root file specified for compilation -/main.cts(1,15): error TS2305: Module '"dual"' has no exported member 'cjs'. +/main.cts(1,10): error TS2305: Module '"dual"' has no exported member 'esm'. /main.mts(1,15): error TS2305: Module '"dual"' has no exported member 'cjs'. /main.ts(1,15): error TS2305: Module '"dual"' has no exported member 'cjs'. @@ -54,6 +54,6 @@ error TS6504: File '/node_modules/dual/index.js' is a JavaScript file. Did you m ==== /main.cts (1 errors) ==== import { esm, cjs } from "dual"; - ~~~ -!!! error TS2305: Module '"dual"' has no exported member 'cjs'. + ~~~ +!!! error TS2305: Module '"dual"' has no exported member 'esm'. \ No newline at end of file diff --git a/tests/baselines/reference/bundlerNodeModules1(module=esnext).js b/tests/baselines/reference/bundlerNodeModules1(module=esnext).js index 1272b9f38f865..c870e2e452261 100644 --- a/tests/baselines/reference/bundlerNodeModules1(module=esnext).js +++ b/tests/baselines/reference/bundlerNodeModules1(module=esnext).js @@ -42,4 +42,5 @@ export {}; //// [main.mjs] export {}; //// [main.cjs] -export {}; +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/tests/baselines/reference/bundlerNodeModules1(module=esnext).types b/tests/baselines/reference/bundlerNodeModules1(module=esnext).types index 4fd828baaa40b..2154e18069292 100644 --- a/tests/baselines/reference/bundlerNodeModules1(module=esnext).types +++ b/tests/baselines/reference/bundlerNodeModules1(module=esnext).types @@ -20,6 +20,6 @@ import { esm, cjs } from "dual"; === /main.cts === import { esm, cjs } from "dual"; ->esm : number ->cjs : any +>esm : any +>cjs : number diff --git a/tests/baselines/reference/bundlerNodeModules1(module=preserve).errors.txt b/tests/baselines/reference/bundlerNodeModules1(module=preserve).errors.txt index 69921a8ce1425..b25d226dacf5f 100644 --- a/tests/baselines/reference/bundlerNodeModules1(module=preserve).errors.txt +++ b/tests/baselines/reference/bundlerNodeModules1(module=preserve).errors.txt @@ -4,7 +4,7 @@ error TS6504: File '/node_modules/dual/index.cjs' is a JavaScript file. Did you error TS6504: File '/node_modules/dual/index.js' is a JavaScript file. Did you mean to enable the 'allowJs' option? The file is in the program because: Root file specified for compilation -/main.cts(1,15): error TS2305: Module '"dual"' has no exported member 'cjs'. +/main.cts(1,10): error TS2305: Module '"dual"' has no exported member 'esm'. /main.mts(1,15): error TS2305: Module '"dual"' has no exported member 'cjs'. /main.ts(1,15): error TS2305: Module '"dual"' has no exported member 'cjs'. @@ -54,6 +54,6 @@ error TS6504: File '/node_modules/dual/index.js' is a JavaScript file. Did you m ==== /main.cts (1 errors) ==== import { esm, cjs } from "dual"; - ~~~ -!!! error TS2305: Module '"dual"' has no exported member 'cjs'. + ~~~ +!!! error TS2305: Module '"dual"' has no exported member 'esm'. \ No newline at end of file diff --git a/tests/baselines/reference/bundlerNodeModules1(module=preserve).types b/tests/baselines/reference/bundlerNodeModules1(module=preserve).types index 4fd828baaa40b..2154e18069292 100644 --- a/tests/baselines/reference/bundlerNodeModules1(module=preserve).types +++ b/tests/baselines/reference/bundlerNodeModules1(module=preserve).types @@ -20,6 +20,6 @@ import { esm, cjs } from "dual"; === /main.cts === import { esm, cjs } from "dual"; ->esm : number ->cjs : any +>esm : any +>cjs : number diff --git a/tests/baselines/reference/conditionalExportsResolutionFallback(moduleresolution=bundler).errors.txt b/tests/baselines/reference/conditionalExportsResolutionFallback(moduleresolution=bundler).errors.txt deleted file mode 100644 index e66a5c3ddddfc..0000000000000 --- a/tests/baselines/reference/conditionalExportsResolutionFallback(moduleresolution=bundler).errors.txt +++ /dev/null @@ -1,29 +0,0 @@ -error TS5095: Option 'bundler' can only be used when 'module' is set to 'preserve' or to 'es2015' or later. - - -!!! error TS5095: Option 'bundler' can only be used when 'module' is set to 'preserve' or to 'es2015' or later. -==== /node_modules/dep/package.json (0 errors) ==== - { - "name": "dep", - "version": "1.0.0", - "exports": { - ".": { - "import": "./dist/index.mjs", - "require": "./dist/index.js", - "types": "./dist/index.d.ts", - } - } - } - -==== /node_modules/dep/dist/index.d.ts (0 errors) ==== - export {}; - -==== /node_modules/dep/dist/index.mjs (0 errors) ==== - export {}; - -==== /index.mts (0 errors) ==== - import {} from "dep"; - // Should be an untyped resolution to dep/dist/index.mjs, - // but the first search is only for TS files, and when - // there's no dist/index.d.mts, it continues looking for - // matching conditions and resolves via `types`. \ No newline at end of file diff --git a/tests/baselines/reference/customConditions(resolvepackagejsonexports=false).errors.txt b/tests/baselines/reference/customConditions(resolvepackagejsonexports=false).errors.txt deleted file mode 100644 index 9e462a35eaf70..0000000000000 --- a/tests/baselines/reference/customConditions(resolvepackagejsonexports=false).errors.txt +++ /dev/null @@ -1,31 +0,0 @@ -error TS5095: Option 'bundler' can only be used when 'module' is set to 'preserve' or to 'es2015' or later. - - -!!! error TS5095: Option 'bundler' can only be used when 'module' is set to 'preserve' or to 'es2015' or later. -==== /node_modules/lodash/package.json (0 errors) ==== - { - "name": "lodash", - "version": "1.0.0", - "main": "index.js", - "exports": { - "browser": "./browser.js", - "webpack": "./webpack.js", - "default": "./index.js" - } - } - -==== /node_modules/lodash/index.d.ts (0 errors) ==== - declare const _: "index"; - export = _; - -==== /node_modules/lodash/browser.d.ts (0 errors) ==== - declare const _: "browser"; - export default _; - -==== /node_modules/lodash/webpack.d.ts (0 errors) ==== - declare const _: "webpack"; - export = _; - -==== /index.ts (0 errors) ==== - import _ from "lodash"; - \ No newline at end of file diff --git a/tests/baselines/reference/customConditions(resolvepackagejsonexports=false).js b/tests/baselines/reference/customConditions(resolvepackagejsonexports=false).js index 1ac29a4a032d3..2d484ff74b5d3 100644 --- a/tests/baselines/reference/customConditions(resolvepackagejsonexports=false).js +++ b/tests/baselines/reference/customConditions(resolvepackagejsonexports=false).js @@ -29,5 +29,3 @@ import _ from "lodash"; //// [index.js] -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/tests/baselines/reference/customConditions(resolvepackagejsonexports=true).errors.txt b/tests/baselines/reference/customConditions(resolvepackagejsonexports=true).errors.txt deleted file mode 100644 index 9e462a35eaf70..0000000000000 --- a/tests/baselines/reference/customConditions(resolvepackagejsonexports=true).errors.txt +++ /dev/null @@ -1,31 +0,0 @@ -error TS5095: Option 'bundler' can only be used when 'module' is set to 'preserve' or to 'es2015' or later. - - -!!! error TS5095: Option 'bundler' can only be used when 'module' is set to 'preserve' or to 'es2015' or later. -==== /node_modules/lodash/package.json (0 errors) ==== - { - "name": "lodash", - "version": "1.0.0", - "main": "index.js", - "exports": { - "browser": "./browser.js", - "webpack": "./webpack.js", - "default": "./index.js" - } - } - -==== /node_modules/lodash/index.d.ts (0 errors) ==== - declare const _: "index"; - export = _; - -==== /node_modules/lodash/browser.d.ts (0 errors) ==== - declare const _: "browser"; - export default _; - -==== /node_modules/lodash/webpack.d.ts (0 errors) ==== - declare const _: "webpack"; - export = _; - -==== /index.ts (0 errors) ==== - import _ from "lodash"; - \ No newline at end of file diff --git a/tests/baselines/reference/customConditions(resolvepackagejsonexports=true).js b/tests/baselines/reference/customConditions(resolvepackagejsonexports=true).js index 1ac29a4a032d3..2d484ff74b5d3 100644 --- a/tests/baselines/reference/customConditions(resolvepackagejsonexports=true).js +++ b/tests/baselines/reference/customConditions(resolvepackagejsonexports=true).js @@ -29,5 +29,3 @@ import _ from "lodash"; //// [index.js] -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/tests/baselines/reference/legacyNodeModulesExportsSpecifierGenerationConditions.js b/tests/baselines/reference/legacyNodeModulesExportsSpecifierGenerationConditions.js index b78501533ba4c..287c6556e46f5 100644 --- a/tests/baselines/reference/legacyNodeModulesExportsSpecifierGenerationConditions.js +++ b/tests/baselines/reference/legacyNodeModulesExportsSpecifierGenerationConditions.js @@ -32,7 +32,6 @@ export interface Thing {} // not exported in export map, inaccessible under new } //// [index.js] -"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { @@ -69,15 +68,12 @@ var __generator = (this && this.__generator) || function (thisArg, body) { if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.a = void 0; -var a = function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) { +export var a = function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) { switch (_a.label) { - case 0: return [4 /*yield*/, Promise.resolve().then(function () { return require("inner"); })]; + case 0: return [4 /*yield*/, import("inner")]; case 1: return [2 /*return*/, (_a.sent()).x()]; } }); }); }; -exports.a = a; //// [index.d.ts] diff --git a/tests/baselines/reference/moduleDetectionIsolatedModulesCjsFileScope.js b/tests/baselines/reference/moduleDetectionIsolatedModulesCjsFileScope.js index 5718d67611ead..8d948790c9e6e 100644 --- a/tests/baselines/reference/moduleDetectionIsolatedModulesCjsFileScope.js +++ b/tests/baselines/reference/moduleDetectionIsolatedModulesCjsFileScope.js @@ -6,8 +6,9 @@ const a = 2; const a = 2; //// [filename.cjs] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); const a = 2; -export {}; //// [filename.mjs] const a = 2; export {}; diff --git a/tests/baselines/reference/modulePreserve4.errors.txt b/tests/baselines/reference/modulePreserve4.errors.txt index fa8baeb0c390d..65e21aa749b3c 100644 --- a/tests/baselines/reference/modulePreserve4.errors.txt +++ b/tests/baselines/reference/modulePreserve4.errors.txt @@ -1,12 +1,22 @@ /a.js(2,1): error TS2580: Cannot find name 'module'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. +/f.cts(1,1): error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. /main1.ts(1,13): error TS2305: Module '"./a"' has no exported member 'y'. /main1.ts(3,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. /main1.ts(19,4): error TS2339: Property 'default' does not exist on type '() => void'. +/main1.ts(23,8): error TS1192: Module '"/e"' has no default export. /main2.mts(1,13): error TS2305: Module '"./a"' has no exported member 'y'. /main2.mts(4,4): error TS2339: Property 'default' does not exist on type 'typeof import("/a")'. /main2.mts(5,12): error TS2580: Cannot find name 'require'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`. +/main2.mts(14,8): error TS1192: Module '"/e"' has no default export. +/main3.cjs(1,10): error TS1293: ESM syntax is not allowed in a CommonJS module when 'module' is set to 'preserve'. /main3.cjs(1,13): error TS2305: Module '"./a"' has no exported member 'y'. /main3.cjs(2,1): error TS8002: 'import ... =' can only be used in TypeScript files. +/main3.cjs(5,8): error TS1293: ESM syntax is not allowed in a CommonJS module when 'module' is set to 'preserve'. +/main3.cjs(8,8): error TS1293: ESM syntax is not allowed in a CommonJS module when 'module' is set to 'preserve'. +/main3.cjs(10,8): error TS1293: ESM syntax is not allowed in a CommonJS module when 'module' is set to 'preserve'. +/main3.cjs(12,8): error TS1293: ESM syntax is not allowed in a CommonJS module when 'module' is set to 'preserve'. +/main3.cjs(14,8): error TS1293: ESM syntax is not allowed in a CommonJS module when 'module' is set to 'preserve'. +/main3.cjs(17,8): error TS1293: ESM syntax is not allowed in a CommonJS module when 'module' is set to 'preserve'. ==== /a.js (1 errors) ==== @@ -29,13 +39,15 @@ ==== /e.mts (0 errors) ==== export = 0; -==== /f.cts (0 errors) ==== +==== /f.cts (1 errors) ==== export default 0; + ~~~~~~~~~~~~~~~~~ +!!! error TS1286: ESM syntax is not allowed in a CommonJS module when 'verbatimModuleSyntax' is enabled. ==== /g.js (0 errors) ==== exports.default = 0; -==== /main1.ts (3 errors) ==== +==== /main1.ts (4 errors) ==== import { x, y } from "./a"; // No y ~ !!! error TS2305: Module '"./a"' has no exported member 'y'. @@ -65,6 +77,8 @@ d3.default(); import e1 from "./e.mjs"; // 0 + ~~ +!!! error TS1192: Module '"/e"' has no default export. import e2 = require("./e.mjs"); // 0 import f1 from "./f.cjs"; // 0 import f2 = require("./f.cjs"); // { default: 0 } @@ -75,7 +89,7 @@ import g2 = require("./g"); // { default: 0 } g2.default; -==== /main2.mts (3 errors) ==== +==== /main2.mts (4 errors) ==== import { x, y } from "./a"; // No y ~ !!! error TS2305: Module '"./a"' has no exported member 'y'. @@ -96,6 +110,8 @@ import d1 from "./d"; // [Function: default] import d2 = require("./d"); // [Function: default] import e1 from "./e.mjs"; // 0 + ~~ +!!! error TS1192: Module '"/e"' has no default export. import e2 = require("./e.mjs"); // 0 import f1 from "./f.cjs"; // 0 import f2 = require("./f.cjs"); // { default: 0 } @@ -103,8 +119,10 @@ import g1 from "./g"; // { default: 0 } import g2 = require("./g"); // { default: 0 } -==== /main3.cjs (2 errors) ==== +==== /main3.cjs (9 errors) ==== import { x, y } from "./a"; // No y + ~ +!!! error TS1293: ESM syntax is not allowed in a CommonJS module when 'module' is set to 'preserve'. ~ !!! error TS2305: Module '"./a"' has no exported member 'y'. import a1 = require("./a"); // Error in JS @@ -113,20 +131,35 @@ const a2 = require("./a"); // { x: 0 } import b1 from "./b"; // 0 + ~~ +!!! error TS1293: ESM syntax is not allowed in a CommonJS module when 'module' is set to 'preserve'. const b2 = require("./b"); // { default: 0 } import c1 from "./c"; // { default: [Function: default] } + ~~ +!!! error TS1293: ESM syntax is not allowed in a CommonJS module when 'module' is set to 'preserve'. const c2 = require("./c"); // { default: [Function: default] } import d1 from "./d"; // [Function: default] + ~~ +!!! error TS1293: ESM syntax is not allowed in a CommonJS module when 'module' is set to 'preserve'. const d2 = require("./d"); // [Function: default] import e1 from "./e.mjs"; // 0 + ~~ +!!! error TS1293: ESM syntax is not allowed in a CommonJS module when 'module' is set to 'preserve'. const e2 = require("./e.mjs"); // 0 import f1 from "./f.cjs"; // 0 + ~~ +!!! error TS1293: ESM syntax is not allowed in a CommonJS module when 'module' is set to 'preserve'. const f2 = require("./f.cjs"); // { default: 0 } import g1 from "./g"; // { default: 0 } + ~~ +!!! error TS1293: ESM syntax is not allowed in a CommonJS module when 'module' is set to 'preserve'. const g2 = require("./g"); // { default: 0 } +==== /main4.cjs (0 errors) ==== + exports.x = require("./g"); + ==== /dummy.ts (0 errors) ==== export {}; // Silly test harness \ No newline at end of file diff --git a/tests/baselines/reference/modulePreserve4.js b/tests/baselines/reference/modulePreserve4.js index e5e009d628b0c..536f52f3a4897 100644 --- a/tests/baselines/reference/modulePreserve4.js +++ b/tests/baselines/reference/modulePreserve4.js @@ -100,6 +100,9 @@ const f2 = require("./f.cjs"); // { default: 0 } import g1 from "./g"; // { default: 0 } const g2 = require("./g"); // { default: 0 } +//// [main4.cjs] +exports.x = require("./g"); + //// [dummy.ts] export {}; // Silly test harness @@ -185,6 +188,8 @@ import f1 from "./f.cjs"; // 0 const f2 = require("./f.cjs"); // { default: 0 } import g1 from "./g"; // { default: 0 } const g2 = require("./g"); // { default: 0 } +//// [main4.cjs] +exports.x = require("./g"); //// [dummy.js] export {}; // Silly test harness @@ -217,5 +222,7 @@ export {}; export {}; //// [main3.d.cts] export {}; +//// [main4.d.cts] +export const x: typeof import("./g"); //// [dummy.d.ts] export {}; diff --git a/tests/baselines/reference/modulePreserve4.symbols b/tests/baselines/reference/modulePreserve4.symbols index 05a7671af0235..e9b29a585d546 100644 --- a/tests/baselines/reference/modulePreserve4.symbols +++ b/tests/baselines/reference/modulePreserve4.symbols @@ -256,6 +256,14 @@ const g2 = require("./g"); // { default: 0 } >require : Symbol(require) >"./g" : Symbol(g1, Decl(g.js, 0, 0)) +=== /main4.cjs === +exports.x = require("./g"); +>exports.x : Symbol(x, Decl(main4.cjs, 0, 0)) +>exports : Symbol(x, Decl(main4.cjs, 0, 0)) +>x : Symbol(x, Decl(main4.cjs, 0, 0)) +>require : Symbol(require) +>"./g" : Symbol("/g", Decl(g.js, 0, 0)) + === /dummy.ts === export {}; // Silly test harness diff --git a/tests/baselines/reference/modulePreserve4.types b/tests/baselines/reference/modulePreserve4.types index 04872a9dde255..b626c4ca79518 100644 --- a/tests/baselines/reference/modulePreserve4.types +++ b/tests/baselines/reference/modulePreserve4.types @@ -135,7 +135,7 @@ d3.default(); >default : () => void import e1 from "./e.mjs"; // 0 ->e1 : 0 +>e1 : any import e2 = require("./e.mjs"); // 0 >e2 : 0 @@ -212,7 +212,7 @@ import d2 = require("./d"); // [Function: default] >d2 : () => void import e1 from "./e.mjs"; // 0 ->e1 : 0 +>e1 : any import e2 = require("./e.mjs"); // 0 >e2 : 0 @@ -297,6 +297,16 @@ const g2 = require("./g"); // { default: 0 } >require : any >"./g" : "./g" +=== /main4.cjs === +exports.x = require("./g"); +>exports.x = require("./g") : typeof import("/g") +>exports.x : typeof import("/g") +>exports : typeof import("/main4") +>x : typeof import("/g") +>require("./g") : typeof import("/g") +>require : any +>"./g" : "./g" + === /dummy.ts === export {}; // Silly test harness diff --git a/tests/baselines/reference/nodeModulesDeclarationEmitDynamicImportWithPackageExports.js b/tests/baselines/reference/nodeModulesDeclarationEmitDynamicImportWithPackageExports.js index e790961aa706e..3afe5f2a3f639 100644 --- a/tests/baselines/reference/nodeModulesDeclarationEmitDynamicImportWithPackageExports.js +++ b/tests/baselines/reference/nodeModulesDeclarationEmitDynamicImportWithPackageExports.js @@ -157,8 +157,8 @@ export declare const e: typeof import("inner/mjs"); export declare const a: Promise<{ default: typeof import("./index.cjs"); }>; -export declare const b: Promise; -export declare const c: Promise; +export declare const b: Promise; +export declare const c: Promise; export declare const f: Promise<{ default: typeof import("inner"); cjsMain: true; diff --git a/tests/baselines/reference/nodeNextModuleResolution1.js b/tests/baselines/reference/nodeNextModuleResolution1.js index d76bd3acd7fb6..a006d7840c307 100644 --- a/tests/baselines/reference/nodeNextModuleResolution1.js +++ b/tests/baselines/reference/nodeNextModuleResolution1.js @@ -15,5 +15,4 @@ import {x} from "foo"; //// [app.js] -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); +export {}; diff --git a/tests/baselines/reference/nodeNextModuleResolution2.js b/tests/baselines/reference/nodeNextModuleResolution2.js index 19475675a566b..e57c0f2575603 100644 --- a/tests/baselines/reference/nodeNextModuleResolution2.js +++ b/tests/baselines/reference/nodeNextModuleResolution2.js @@ -16,5 +16,4 @@ import {x} from "foo"; //// [app.mjs] -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); +export {}; diff --git a/tests/baselines/reference/resolvesWithoutExportsDiagnostic1(moduleresolution=bundler).errors.txt b/tests/baselines/reference/resolvesWithoutExportsDiagnostic1(moduleresolution=bundler).errors.txt index befdfb5cd9df7..fe904ca69530b 100644 --- a/tests/baselines/reference/resolvesWithoutExportsDiagnostic1(moduleresolution=bundler).errors.txt +++ b/tests/baselines/reference/resolvesWithoutExportsDiagnostic1(moduleresolution=bundler).errors.txt @@ -1,4 +1,3 @@ -error TS5095: Option 'bundler' can only be used when 'module' is set to 'preserve' or to 'es2015' or later. error TS6504: File '/node_modules/bar/index.js' is a JavaScript file. Did you mean to enable the 'allowJs' option? The file is in the program because: Root file specified for compilation @@ -17,7 +16,6 @@ error TS6504: File '/node_modules/foo/index.mjs' is a JavaScript file. Did you m There are types at '/node_modules/@types/bar/index.d.ts', but this result could not be resolved when respecting package.json "exports". The '@types/bar' library may need to update its package.json or typings. -!!! error TS5095: Option 'bundler' can only be used when 'module' is set to 'preserve' or to 'es2015' or later. !!! error TS6504: File '/node_modules/bar/index.js' is a JavaScript file. Did you mean to enable the 'allowJs' option? !!! error TS6504: The file is in the program because: !!! error TS6504: Root file specified for compilation diff --git a/tests/cases/compiler/modulePreserve4.ts b/tests/cases/compiler/modulePreserve4.ts index 9eabe664bb88c..9a7014852eefa 100644 --- a/tests/cases/compiler/modulePreserve4.ts +++ b/tests/cases/compiler/modulePreserve4.ts @@ -106,5 +106,8 @@ const f2 = require("./f.cjs"); // { default: 0 } import g1 from "./g"; // { default: 0 } const g2 = require("./g"); // { default: 0 } +// @Filename: /main4.cjs +exports.x = require("./g"); + // @Filename: /dummy.ts export {}; // Silly test harness diff --git a/tests/cases/conformance/moduleResolution/conditionalExportsResolutionFallback.ts b/tests/cases/conformance/moduleResolution/conditionalExportsResolutionFallback.ts index d9a1d480b8ef3..26fe08e88fb11 100644 --- a/tests/cases/conformance/moduleResolution/conditionalExportsResolutionFallback.ts +++ b/tests/cases/conformance/moduleResolution/conditionalExportsResolutionFallback.ts @@ -1,3 +1,4 @@ +// @module: esnext // @moduleResolution: node16,nodenext,bundler // @traceResolution: true // @allowJs: true diff --git a/tests/cases/conformance/moduleResolution/customConditions.ts b/tests/cases/conformance/moduleResolution/customConditions.ts index 47fb048ac28bf..0533574c6c230 100644 --- a/tests/cases/conformance/moduleResolution/customConditions.ts +++ b/tests/cases/conformance/moduleResolution/customConditions.ts @@ -1,3 +1,4 @@ +// @module: preserve // @moduleResolution: bundler // @customConditions: webpack, browser // @resolvePackageJsonExports: true, false diff --git a/tests/cases/conformance/moduleResolution/resolvesWithoutExportsDiagnostic1.ts b/tests/cases/conformance/moduleResolution/resolvesWithoutExportsDiagnostic1.ts index d01bb47a75ca8..57430c902655d 100644 --- a/tests/cases/conformance/moduleResolution/resolvesWithoutExportsDiagnostic1.ts +++ b/tests/cases/conformance/moduleResolution/resolvesWithoutExportsDiagnostic1.ts @@ -1,3 +1,4 @@ +// @module: preserve // @moduleResolution: bundler,node16 // @strict: true // @noTypesAndSymbols: true