diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 8947f98f8647b..2461d8562c6d3 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -2410,7 +2410,7 @@ namespace ts { if (!dontResolveAlias && symbol) { if (!(symbol.flags & (SymbolFlags.Module | SymbolFlags.Variable)) && !getDeclarationOfKind(symbol, SyntaxKind.SourceFile)) { - const compilerOptionName = moduleKind >= ModuleKind.ES2015 + const compilerOptionName = moduleKind >= ModuleKind.Hybrid ? "allowSyntheticDefaultImports" : "esModuleInterop"; @@ -26614,7 +26614,7 @@ namespace ts { */ function checkClassNameCollisionWithObject(name: Identifier): void { if (languageVersion === ScriptTarget.ES5 && name.escapedText === "Object" - && moduleKind !== ModuleKind.ES2015 && moduleKind !== ModuleKind.ESNext) { + && moduleKind !== ModuleKind.ES2015 && moduleKind !== ModuleKind.ESNext && moduleKind !== ModuleKind.Hybrid) { error(name, Diagnostics.Class_name_cannot_be_Object_when_targeting_ES5_with_module_0, ModuleKind[moduleKind]); // https://github.com/Microsoft/TypeScript/issues/17494 } } @@ -27723,7 +27723,7 @@ namespace ts { error(node.moduleSpecifier, Diagnostics.Module_0_uses_export_and_cannot_be_used_with_export_Asterisk, symbolToString(moduleSymbol)); } - if (moduleKind !== ModuleKind.System && moduleKind !== ModuleKind.ES2015 && moduleKind !== ModuleKind.ESNext) { + if (moduleKind !== ModuleKind.System && moduleKind !== ModuleKind.ES2015 && moduleKind !== ModuleKind.ESNext && moduleKind !== ModuleKind.Hybrid) { checkExternalEmitHelpers(node, ExternalEmitHelpers.ExportStar); } } @@ -30843,7 +30843,7 @@ namespace ts { return grammarErrorOnNode(node.exclamationToken, Diagnostics.A_definite_assignment_assertion_is_not_permitted_in_this_context); } - if (compilerOptions.module !== ModuleKind.ES2015 && compilerOptions.module !== ModuleKind.ESNext && compilerOptions.module !== ModuleKind.System && !compilerOptions.noEmit && + if (compilerOptions.module !== ModuleKind.ES2015 && compilerOptions.module !== ModuleKind.ESNext && compilerOptions.module !== ModuleKind.Hybrid && compilerOptions.module !== ModuleKind.System && !compilerOptions.noEmit && !(node.parent.parent.flags & NodeFlags.Ambient) && hasModifier(node.parent.parent, ModifierFlags.Export)) { checkESModuleMarker(node.name); } diff --git a/src/compiler/commandLineParser.ts b/src/compiler/commandLineParser.ts index 43275605e2390..aecf2315d825d 100644 --- a/src/compiler/commandLineParser.ts +++ b/src/compiler/commandLineParser.ts @@ -217,7 +217,8 @@ namespace ts { umd: ModuleKind.UMD, es6: ModuleKind.ES2015, es2015: ModuleKind.ES2015, - esnext: ModuleKind.ESNext + esnext: ModuleKind.ESNext, + hybrid: ModuleKind.Hybrid }), affectsModuleResolution: true, paramType: Diagnostics.KIND, diff --git a/src/compiler/factory.ts b/src/compiler/factory.ts index ec19d2c906c12..40c662970e87f 100644 --- a/src/compiler/factory.ts +++ b/src/compiler/factory.ts @@ -4541,7 +4541,8 @@ namespace ts { let create = (hasExportStarsToExportValues || (compilerOptions.esModuleInterop && hasImportStarOrImportDefault)) && moduleKind !== ModuleKind.System && moduleKind !== ModuleKind.ES2015 - && moduleKind !== ModuleKind.ESNext; + && moduleKind !== ModuleKind.ESNext + && moduleKind !== ModuleKind.Hybrid; if (!create) { const helpers = getEmitHelpers(node); if (helpers) { diff --git a/src/compiler/moduleNameResolver.ts b/src/compiler/moduleNameResolver.ts index b8aa9fa2df465..b146751e70688 100644 --- a/src/compiler/moduleNameResolver.ts +++ b/src/compiler/moduleNameResolver.ts @@ -614,7 +614,7 @@ namespace ts { else { let moduleResolution = compilerOptions.moduleResolution; if (moduleResolution === undefined) { - moduleResolution = getEmitModuleKind(compilerOptions) === ModuleKind.CommonJS ? ModuleResolutionKind.NodeJs : ModuleResolutionKind.Classic; + moduleResolution = getEmitModuleResolutionKind(compilerOptions); if (traceEnabled) { trace(host, Diagnostics.Module_resolution_kind_is_not_specified_using_0, ModuleResolutionKind[moduleResolution]); } diff --git a/src/compiler/transformer.ts b/src/compiler/transformer.ts index fdcaadb404011..a40cabf48149f 100644 --- a/src/compiler/transformer.ts +++ b/src/compiler/transformer.ts @@ -4,6 +4,7 @@ namespace ts { switch (moduleKind) { case ModuleKind.ESNext: case ModuleKind.ES2015: + case ModuleKind.Hybrid: return transformES2015Module; case ModuleKind.System: return transformSystemModule; diff --git a/src/compiler/transformers/module/es2015.ts b/src/compiler/transformers/module/es2015.ts index 792dd9445960f..e5d111d704684 100644 --- a/src/compiler/transformers/module/es2015.ts +++ b/src/compiler/transformers/module/es2015.ts @@ -47,8 +47,7 @@ namespace ts { function visitor(node: Node): VisitResult { switch (node.kind) { case SyntaxKind.ImportEqualsDeclaration: - // Elide `import=` as it is not legal with --module ES6 - return undefined; + return visitImportAssignment(node); case SyntaxKind.ExportAssignment: return visitExportAssignment(node); } @@ -56,9 +55,34 @@ namespace ts { return node; } - function visitExportAssignment(node: ExportAssignment): VisitResult { - // Elide `export=` as it is not legal with --module ES6 - return node.isExportEquals ? undefined : node; + function visitImportAssignment(node: ImportEqualsDeclaration): VisitResult { + if (isExternalModuleReference(node.moduleReference)) { + // We issue an error for an import= when targeting es6, however we will emit is as a cjs-style `require` for hybrid environments + return setOriginalNode(setTextRange(createVariableStatement( + /*modifiers*/ undefined, + createVariableDeclarationList([ + createVariableDeclaration( + node.name, + /*type*/ undefined, + createCall( + createIdentifier("require"), + /*typeArguments*/ undefined, + [node.moduleReference.expression] + ) + )], + getEmitScriptTarget(compilerOptions) >= ScriptTarget.ES2015 ? NodeFlags.Const : 0 + ) + ), node), node); + } + return undefined; // ts transformer should have handled namespacy import assignments + } + + function visitExportAssignment(node: ExportAssignment): VisitResult { + if (!node.isExportEquals) { + return node; + } + // We issue an error for an export= when targeting es6, however we will emit is as a cjs-style `module.export=` for hybrid environments + return setOriginalNode(setTextRange(createExpressionStatement(createAssignment(createPropertyAccess(createIdentifier("module"), "exports"), node.expression)), node), node); } // diff --git a/src/compiler/transformers/ts.ts b/src/compiler/transformers/ts.ts index a22c6df8d0671..40d8acd41379c 100644 --- a/src/compiler/transformers/ts.ts +++ b/src/compiler/transformers/ts.ts @@ -562,7 +562,7 @@ namespace ts { function visitSourceFile(node: SourceFile) { const alwaysStrict = getStrictOptionValue(compilerOptions, "alwaysStrict") && - !(isExternalModule(node) && moduleKind >= ModuleKind.ES2015) && + !(isExternalModule(node) && (moduleKind >= ModuleKind.ES2015 || moduleKind === ModuleKind.Hybrid)) && !isJsonSourceFile(node); return updateSourceFileNode( @@ -2847,6 +2847,7 @@ namespace ts { || (isExternalModuleExport(node) && moduleKind !== ModuleKind.ES2015 && moduleKind !== ModuleKind.ESNext + && moduleKind !== ModuleKind.Hybrid && moduleKind !== ModuleKind.System); } diff --git a/src/compiler/types.ts b/src/compiler/types.ts index d213e8622994f..02ab02aaa6328 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -4605,8 +4605,9 @@ namespace ts { AMD = 2, UMD = 3, System = 4, - ES2015 = 5, - ESNext = 6 + Hybrid = 5, + ES2015 = 6, + ESNext = 7, } export const enum JsxEmit { diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 33a902b803554..e5a10b77b6c2a 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -7165,7 +7165,8 @@ namespace ts { export function getEmitModuleResolutionKind(compilerOptions: CompilerOptions) { let moduleResolution = compilerOptions.moduleResolution; if (moduleResolution === undefined) { - moduleResolution = getEmitModuleKind(compilerOptions) === ModuleKind.CommonJS ? ModuleResolutionKind.NodeJs : ModuleResolutionKind.Classic; + const emitModuleKind = getEmitModuleKind(compilerOptions); + moduleResolution = emitModuleKind === ModuleKind.CommonJS || emitModuleKind === ModuleKind.Hybrid ? ModuleResolutionKind.NodeJs : ModuleResolutionKind.Classic; } return moduleResolution; } @@ -7176,6 +7177,7 @@ namespace ts { case ModuleKind.AMD: case ModuleKind.ES2015: case ModuleKind.ESNext: + case ModuleKind.Hybrid: return true; default: return false; diff --git a/src/services/codefixes/importFixes.ts b/src/services/codefixes/importFixes.ts index 8006d1a0cfd04..da7b88ee8cec3 100644 --- a/src/services/codefixes/importFixes.ts +++ b/src/services/codefixes/importFixes.ts @@ -357,6 +357,7 @@ namespace ts.codefix { case ModuleKind.AMD: case ModuleKind.CommonJS: case ModuleKind.UMD: + case ModuleKind.Hybrid: return ImportKind.Equals; case ModuleKind.System: case ModuleKind.ES2015: diff --git a/src/testRunner/unittests/config/commandLineParsing.ts b/src/testRunner/unittests/config/commandLineParsing.ts index 25fa3a45050f3..35ee8c288b27c 100644 --- a/src/testRunner/unittests/config/commandLineParsing.ts +++ b/src/testRunner/unittests/config/commandLineParsing.ts @@ -109,7 +109,7 @@ namespace ts { start: undefined, length: undefined, }, { - messageText: "Argument for '--module' option must be: 'none', 'commonjs', 'amd', 'system', 'umd', 'es6', 'es2015', 'esnext'.", + messageText: "Argument for '--module' option must be: 'none', 'commonjs', 'amd', 'system', 'umd', 'es6', 'es2015', 'esnext', 'hybrid'.", category: Diagnostics.Argument_for_0_option_must_be_Colon_1.category, code: Diagnostics.Argument_for_0_option_must_be_Colon_1.code, diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index 4353bbcd8fae0..41191791fb54c 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -2527,8 +2527,9 @@ declare namespace ts { AMD = 2, UMD = 3, System = 4, - ES2015 = 5, - ESNext = 6 + Hybrid = 5, + ES2015 = 6, + ESNext = 7 } enum JsxEmit { None = 0, diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index d8deb32c0efe8..13f25b6b7079c 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -2527,8 +2527,9 @@ declare namespace ts { AMD = 2, UMD = 3, System = 4, - ES2015 = 5, - ESNext = 6 + Hybrid = 5, + ES2015 = 6, + ESNext = 7 } enum JsxEmit { None = 0, diff --git a/tests/baselines/reference/es6ExportAssignment.js b/tests/baselines/reference/es6ExportAssignment.js index 3d0198901ef3c..0f6d47a25e29d 100644 --- a/tests/baselines/reference/es6ExportAssignment.js +++ b/tests/baselines/reference/es6ExportAssignment.js @@ -4,3 +4,4 @@ export = a; //// [es6ExportAssignment.js] var a = 10; +module.exports = a; diff --git a/tests/baselines/reference/es6ExportAssignment2.js b/tests/baselines/reference/es6ExportAssignment2.js index 531c9e5a5ba3d..05079fb90dacd 100644 --- a/tests/baselines/reference/es6ExportAssignment2.js +++ b/tests/baselines/reference/es6ExportAssignment2.js @@ -10,4 +10,5 @@ import * as a from "a"; //// [a.js] var a = 10; +module.exports = a; // Error: export = not allowed in ES6 //// [b.js] diff --git a/tests/baselines/reference/es6ExportEquals.js b/tests/baselines/reference/es6ExportEquals.js index 99cae1c5a7341..24b3e14c3b282 100644 --- a/tests/baselines/reference/es6ExportEquals.js +++ b/tests/baselines/reference/es6ExportEquals.js @@ -6,6 +6,7 @@ export = f; //// [es6ExportEquals.js] export function f() { } +module.exports = f; //// [es6ExportEquals.d.ts] diff --git a/tests/baselines/reference/es6ImportEqualsDeclaration.errors.txt b/tests/baselines/reference/es6ImportEqualsDeclaration.errors.txt index 696c71950cd87..e298e2361a57d 100644 --- a/tests/baselines/reference/es6ImportEqualsDeclaration.errors.txt +++ b/tests/baselines/reference/es6ImportEqualsDeclaration.errors.txt @@ -6,6 +6,8 @@ tests/cases/compiler/server.ts(2,1): error TS1203: Export assignment cannot be u import a = require("server"); ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ !!! error TS1202: Import assignment cannot be used when targeting ECMAScript modules. Consider using 'import * as ns from "mod"', 'import {a} from "mod"', 'import d from "mod"', or another module format instead. + void a; + ==== tests/cases/compiler/server.ts (1 errors) ==== var a = 10; export = a; diff --git a/tests/baselines/reference/es6ImportEqualsDeclaration.js b/tests/baselines/reference/es6ImportEqualsDeclaration.js index 1ca0e94cf8aa9..ff7d8676882fd 100644 --- a/tests/baselines/reference/es6ImportEqualsDeclaration.js +++ b/tests/baselines/reference/es6ImportEqualsDeclaration.js @@ -5,8 +5,13 @@ var a = 10; export = a; //// [client.ts] -import a = require("server"); +import a = require("server"); +void a; + //// [server.js] var a = 10; +module.exports = a; //// [client.js] +const a = require("server"); +void a; diff --git a/tests/baselines/reference/es6ImportEqualsDeclaration.symbols b/tests/baselines/reference/es6ImportEqualsDeclaration.symbols index 8526153790a53..bee423816557b 100644 --- a/tests/baselines/reference/es6ImportEqualsDeclaration.symbols +++ b/tests/baselines/reference/es6ImportEqualsDeclaration.symbols @@ -2,6 +2,9 @@ import a = require("server"); >a : Symbol(a, Decl(client.ts, 0, 0)) +void a; +>a : Symbol(a, Decl(client.ts, 0, 0)) + === tests/cases/compiler/server.ts === var a = 10; >a : Symbol(a, Decl(server.ts, 0, 3)) diff --git a/tests/baselines/reference/es6ImportEqualsDeclaration.types b/tests/baselines/reference/es6ImportEqualsDeclaration.types index 3d9acd022835e..c37e3e99985e0 100644 --- a/tests/baselines/reference/es6ImportEqualsDeclaration.types +++ b/tests/baselines/reference/es6ImportEqualsDeclaration.types @@ -2,6 +2,10 @@ import a = require("server"); >a : number +void a; +>void a : undefined +>a : number + === tests/cases/compiler/server.ts === var a = 10; >a : number diff --git a/tests/baselines/reference/es6ImportEqualsExportModuleEs2015Error.js b/tests/baselines/reference/es6ImportEqualsExportModuleEs2015Error.js index 603f158946e94..2faa232c927ae 100644 --- a/tests/baselines/reference/es6ImportEqualsExportModuleEs2015Error.js +++ b/tests/baselines/reference/es6ImportEqualsExportModuleEs2015Error.js @@ -17,6 +17,7 @@ var a = /** @class */ (function () { } return a; }()); +module.exports = a; //// [main.js] import * as a from "./a"; a; diff --git a/tests/baselines/reference/hybridModuleEmitNoImportEqualsError.js b/tests/baselines/reference/hybridModuleEmitNoImportEqualsError.js new file mode 100644 index 0000000000000..159d8465970a1 --- /dev/null +++ b/tests/baselines/reference/hybridModuleEmitNoImportEqualsError.js @@ -0,0 +1,31 @@ +//// [tests/cases/compiler/hybridModuleEmitNoImportEqualsError.ts] //// + +//// [cjsyexporter.ts] +function f(): void {} +export = f; +//// [esmyexporter.ts] +const x = 0; +const y = 0; +export {x, y} +//// [importer.ts] +import f = require("./cjsyexporter"); +f(); + +import {x, y} from "./esmyexporter"; +void x; +void y; + + +//// [cjsyexporter.js] +function f() { } +module.exports = f; +//// [esmyexporter.js] +const x = 0; +const y = 0; +export { x, y }; +//// [importer.js] +const f = require("./cjsyexporter"); +f(); +import { x, y } from "./esmyexporter"; +void x; +void y; diff --git a/tests/baselines/reference/hybridModuleEmitNoImportEqualsError.symbols b/tests/baselines/reference/hybridModuleEmitNoImportEqualsError.symbols new file mode 100644 index 0000000000000..20f6ca3fe7c92 --- /dev/null +++ b/tests/baselines/reference/hybridModuleEmitNoImportEqualsError.symbols @@ -0,0 +1,35 @@ +=== tests/cases/compiler/importer.ts === +import f = require("./cjsyexporter"); +>f : Symbol(f, Decl(importer.ts, 0, 0)) + +f(); +>f : Symbol(f, Decl(importer.ts, 0, 0)) + +import {x, y} from "./esmyexporter"; +>x : Symbol(x, Decl(importer.ts, 3, 8)) +>y : Symbol(y, Decl(importer.ts, 3, 10)) + +void x; +>x : Symbol(x, Decl(importer.ts, 3, 8)) + +void y; +>y : Symbol(y, Decl(importer.ts, 3, 10)) + +=== tests/cases/compiler/cjsyexporter.ts === +function f(): void {} +>f : Symbol(f, Decl(cjsyexporter.ts, 0, 0)) + +export = f; +>f : Symbol(f, Decl(cjsyexporter.ts, 0, 0)) + +=== tests/cases/compiler/esmyexporter.ts === +const x = 0; +>x : Symbol(x, Decl(esmyexporter.ts, 0, 5)) + +const y = 0; +>y : Symbol(y, Decl(esmyexporter.ts, 1, 5)) + +export {x, y} +>x : Symbol(x, Decl(esmyexporter.ts, 2, 8)) +>y : Symbol(y, Decl(esmyexporter.ts, 2, 10)) + diff --git a/tests/baselines/reference/hybridModuleEmitNoImportEqualsError.types b/tests/baselines/reference/hybridModuleEmitNoImportEqualsError.types new file mode 100644 index 0000000000000..a92f466292d64 --- /dev/null +++ b/tests/baselines/reference/hybridModuleEmitNoImportEqualsError.types @@ -0,0 +1,40 @@ +=== tests/cases/compiler/importer.ts === +import f = require("./cjsyexporter"); +>f : () => void + +f(); +>f() : void +>f : () => void + +import {x, y} from "./esmyexporter"; +>x : 0 +>y : 0 + +void x; +>void x : undefined +>x : 0 + +void y; +>void y : undefined +>y : 0 + +=== tests/cases/compiler/cjsyexporter.ts === +function f(): void {} +>f : () => void + +export = f; +>f : () => void + +=== tests/cases/compiler/esmyexporter.ts === +const x = 0; +>x : 0 +>0 : 0 + +const y = 0; +>y : 0 +>0 : 0 + +export {x, y} +>x : 0 +>y : 0 + diff --git a/tests/baselines/reference/hybridModuleEmitNoImportEqualsErrorCjsResolution.js b/tests/baselines/reference/hybridModuleEmitNoImportEqualsErrorCjsResolution.js new file mode 100644 index 0000000000000..1d9bda7f8dd3b --- /dev/null +++ b/tests/baselines/reference/hybridModuleEmitNoImportEqualsErrorCjsResolution.js @@ -0,0 +1,28 @@ +//// [tests/cases/compiler/hybridModuleEmitNoImportEqualsErrorCjsResolution.ts] //// + +//// [index.d.ts] +declare function f(): void; +export = f; +//// [esmyexporter.ts] +const x = 0; +const y = 0; +export {x, y} +//// [importer.ts] +import f = require("cjsyexporter"); +f(); + +import {x, y} from "./esmyexporter"; +void x; +void y; + + +//// [esmyexporter.js] +const x = 0; +const y = 0; +export { x, y }; +//// [importer.js] +const f = require("cjsyexporter"); +f(); +import { x, y } from "./esmyexporter"; +void x; +void y; diff --git a/tests/baselines/reference/hybridModuleEmitNoImportEqualsErrorCjsResolution.symbols b/tests/baselines/reference/hybridModuleEmitNoImportEqualsErrorCjsResolution.symbols new file mode 100644 index 0000000000000..39f7b9b867fff --- /dev/null +++ b/tests/baselines/reference/hybridModuleEmitNoImportEqualsErrorCjsResolution.symbols @@ -0,0 +1,35 @@ +=== tests/cases/compiler/importer.ts === +import f = require("cjsyexporter"); +>f : Symbol(f, Decl(importer.ts, 0, 0)) + +f(); +>f : Symbol(f, Decl(importer.ts, 0, 0)) + +import {x, y} from "./esmyexporter"; +>x : Symbol(x, Decl(importer.ts, 3, 8)) +>y : Symbol(y, Decl(importer.ts, 3, 10)) + +void x; +>x : Symbol(x, Decl(importer.ts, 3, 8)) + +void y; +>y : Symbol(y, Decl(importer.ts, 3, 10)) + +=== tests/cases/compiler/node_modules/cjsyexporter/index.d.ts === +declare function f(): void; +>f : Symbol(f, Decl(index.d.ts, 0, 0)) + +export = f; +>f : Symbol(f, Decl(index.d.ts, 0, 0)) + +=== tests/cases/compiler/esmyexporter.ts === +const x = 0; +>x : Symbol(x, Decl(esmyexporter.ts, 0, 5)) + +const y = 0; +>y : Symbol(y, Decl(esmyexporter.ts, 1, 5)) + +export {x, y} +>x : Symbol(x, Decl(esmyexporter.ts, 2, 8)) +>y : Symbol(y, Decl(esmyexporter.ts, 2, 10)) + diff --git a/tests/baselines/reference/hybridModuleEmitNoImportEqualsErrorCjsResolution.types b/tests/baselines/reference/hybridModuleEmitNoImportEqualsErrorCjsResolution.types new file mode 100644 index 0000000000000..918dbd2c825e0 --- /dev/null +++ b/tests/baselines/reference/hybridModuleEmitNoImportEqualsErrorCjsResolution.types @@ -0,0 +1,40 @@ +=== tests/cases/compiler/importer.ts === +import f = require("cjsyexporter"); +>f : () => void + +f(); +>f() : void +>f : () => void + +import {x, y} from "./esmyexporter"; +>x : 0 +>y : 0 + +void x; +>void x : undefined +>x : 0 + +void y; +>void y : undefined +>y : 0 + +=== tests/cases/compiler/node_modules/cjsyexporter/index.d.ts === +declare function f(): void; +>f : () => void + +export = f; +>f : () => void + +=== tests/cases/compiler/esmyexporter.ts === +const x = 0; +>x : 0 +>0 : 0 + +const y = 0; +>y : 0 +>0 : 0 + +export {x, y} +>x : 0 +>y : 0 + diff --git a/tests/baselines/reference/transpile/Report an error when compiler-options module-kind is out-of-range.errors.txt b/tests/baselines/reference/transpile/Report an error when compiler-options module-kind is out-of-range.errors.txt index f746915da7d5a..8aaceab71303d 100644 --- a/tests/baselines/reference/transpile/Report an error when compiler-options module-kind is out-of-range.errors.txt +++ b/tests/baselines/reference/transpile/Report an error when compiler-options module-kind is out-of-range.errors.txt @@ -1,6 +1,6 @@ -error TS6046: Argument for '--module' option must be: 'none', 'commonjs', 'amd', 'system', 'umd', 'es6', 'es2015', 'esnext'. +error TS6046: Argument for '--module' option must be: 'none', 'commonjs', 'amd', 'system', 'umd', 'es6', 'es2015', 'esnext', 'hybrid'. -!!! error TS6046: Argument for '--module' option must be: 'none', 'commonjs', 'amd', 'system', 'umd', 'es6', 'es2015', 'esnext'. +!!! error TS6046: Argument for '--module' option must be: 'none', 'commonjs', 'amd', 'system', 'umd', 'es6', 'es2015', 'esnext', 'hybrid'. ==== file.ts (0 errors) ==== \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Report an error when compiler-options module-kind is out-of-range.oldTranspile.errors.txt b/tests/baselines/reference/transpile/Report an error when compiler-options module-kind is out-of-range.oldTranspile.errors.txt index f746915da7d5a..8aaceab71303d 100644 --- a/tests/baselines/reference/transpile/Report an error when compiler-options module-kind is out-of-range.oldTranspile.errors.txt +++ b/tests/baselines/reference/transpile/Report an error when compiler-options module-kind is out-of-range.oldTranspile.errors.txt @@ -1,6 +1,6 @@ -error TS6046: Argument for '--module' option must be: 'none', 'commonjs', 'amd', 'system', 'umd', 'es6', 'es2015', 'esnext'. +error TS6046: Argument for '--module' option must be: 'none', 'commonjs', 'amd', 'system', 'umd', 'es6', 'es2015', 'esnext', 'hybrid'. -!!! error TS6046: Argument for '--module' option must be: 'none', 'commonjs', 'amd', 'system', 'umd', 'es6', 'es2015', 'esnext'. +!!! error TS6046: Argument for '--module' option must be: 'none', 'commonjs', 'amd', 'system', 'umd', 'es6', 'es2015', 'esnext', 'hybrid'. ==== file.ts (0 errors) ==== \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Report an error when compiler-options target-script is out-of-range.errors.txt b/tests/baselines/reference/transpile/Report an error when compiler-options target-script is out-of-range.errors.txt index f746915da7d5a..8aaceab71303d 100644 --- a/tests/baselines/reference/transpile/Report an error when compiler-options target-script is out-of-range.errors.txt +++ b/tests/baselines/reference/transpile/Report an error when compiler-options target-script is out-of-range.errors.txt @@ -1,6 +1,6 @@ -error TS6046: Argument for '--module' option must be: 'none', 'commonjs', 'amd', 'system', 'umd', 'es6', 'es2015', 'esnext'. +error TS6046: Argument for '--module' option must be: 'none', 'commonjs', 'amd', 'system', 'umd', 'es6', 'es2015', 'esnext', 'hybrid'. -!!! error TS6046: Argument for '--module' option must be: 'none', 'commonjs', 'amd', 'system', 'umd', 'es6', 'es2015', 'esnext'. +!!! error TS6046: Argument for '--module' option must be: 'none', 'commonjs', 'amd', 'system', 'umd', 'es6', 'es2015', 'esnext', 'hybrid'. ==== file.ts (0 errors) ==== \ No newline at end of file diff --git a/tests/baselines/reference/transpile/Report an error when compiler-options target-script is out-of-range.oldTranspile.errors.txt b/tests/baselines/reference/transpile/Report an error when compiler-options target-script is out-of-range.oldTranspile.errors.txt index f746915da7d5a..8aaceab71303d 100644 --- a/tests/baselines/reference/transpile/Report an error when compiler-options target-script is out-of-range.oldTranspile.errors.txt +++ b/tests/baselines/reference/transpile/Report an error when compiler-options target-script is out-of-range.oldTranspile.errors.txt @@ -1,6 +1,6 @@ -error TS6046: Argument for '--module' option must be: 'none', 'commonjs', 'amd', 'system', 'umd', 'es6', 'es2015', 'esnext'. +error TS6046: Argument for '--module' option must be: 'none', 'commonjs', 'amd', 'system', 'umd', 'es6', 'es2015', 'esnext', 'hybrid'. -!!! error TS6046: Argument for '--module' option must be: 'none', 'commonjs', 'amd', 'system', 'umd', 'es6', 'es2015', 'esnext'. +!!! error TS6046: Argument for '--module' option must be: 'none', 'commonjs', 'amd', 'system', 'umd', 'es6', 'es2015', 'esnext', 'hybrid'. ==== file.ts (0 errors) ==== \ No newline at end of file diff --git a/tests/cases/compiler/es6ImportEqualsDeclaration.ts b/tests/cases/compiler/es6ImportEqualsDeclaration.ts index 7df85a31d75cd..5e0f0f6d3aeca 100644 --- a/tests/cases/compiler/es6ImportEqualsDeclaration.ts +++ b/tests/cases/compiler/es6ImportEqualsDeclaration.ts @@ -5,4 +5,5 @@ var a = 10; export = a; // @filename: client.ts -import a = require("server"); \ No newline at end of file +import a = require("server"); +void a; diff --git a/tests/cases/compiler/hybridModuleEmitNoImportEqualsError.ts b/tests/cases/compiler/hybridModuleEmitNoImportEqualsError.ts new file mode 100644 index 0000000000000..fe19b648fbfeb --- /dev/null +++ b/tests/cases/compiler/hybridModuleEmitNoImportEqualsError.ts @@ -0,0 +1,16 @@ +// @target: es6 +// @module: hybrid +// @filename: cjsyexporter.ts +function f(): void {} +export = f; +// @filename: esmyexporter.ts +const x = 0; +const y = 0; +export {x, y} +// @filename: importer.ts +import f = require("./cjsyexporter"); +f(); + +import {x, y} from "./esmyexporter"; +void x; +void y; diff --git a/tests/cases/compiler/hybridModuleEmitNoImportEqualsErrorCjsResolution.ts b/tests/cases/compiler/hybridModuleEmitNoImportEqualsErrorCjsResolution.ts new file mode 100644 index 0000000000000..82329535b65b1 --- /dev/null +++ b/tests/cases/compiler/hybridModuleEmitNoImportEqualsErrorCjsResolution.ts @@ -0,0 +1,16 @@ +// @target: es6 +// @module: hybrid +// @filename: node_modules/cjsyexporter/index.d.ts +declare function f(): void; +export = f; +// @filename: esmyexporter.ts +const x = 0; +const y = 0; +export {x, y} +// @filename: importer.ts +import f = require("cjsyexporter"); +f(); + +import {x, y} from "./esmyexporter"; +void x; +void y;