diff --git a/src/compiler/commandLineParser.ts b/src/compiler/commandLineParser.ts index d5bf95a6405..7d635c2aaf5 100644 --- a/src/compiler/commandLineParser.ts +++ b/src/compiler/commandLineParser.ts @@ -320,6 +320,11 @@ namespace ts { name: "allowSyntheticDefaultImports", type: "boolean", description: Diagnostics.Allow_default_imports_from_modules_with_no_default_export_This_does_not_affect_code_emit_just_typechecking + }, + { + name: "emitModulesInLooseMode", + type: "boolean", + description: Diagnostics.Do_not_emit_use_strict_directives_in_module_output } ]; diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index b8ae833e5ab..5b93f61bb90 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -1,4 +1,4 @@ - { +{ "Unterminated string literal.": { "category": "Error", "code": 1002 @@ -2187,6 +2187,7 @@ "category": "Error", "code": 5062 }, + "Concatenate and emit output to single file.": { "category": "Message", "code": 6001 @@ -2231,10 +2232,10 @@ "category": "Message", "code": 6011 }, - "Specify ECMAScript target version: 'ES3' (default), 'ES5', or 'ES2015' (experimental)": { - "category": "Message", - "code": 6015 - }, + "Specify ECMAScript target version: 'ES3' (default), 'ES5', or 'ES2015' (experimental)": { + "category": "Message", + "code": 6015 + }, "Specify module code generation: 'commonjs', 'amd', 'system', 'umd' or 'es2015'": { "category": "Message", "code": 6016 @@ -2571,6 +2572,11 @@ "category": "Message", "code": 6111 }, + "Do not emit 'use strict' directives in module output.": { + "category": "Message", + "code": 6112 + }, + "Variable '{0}' implicitly has an '{1}' type.": { "category": "Error", "code": 7005 @@ -2757,23 +2763,23 @@ "code": 17004 }, "A constructor cannot contain a 'super' call when its class extends 'null'": { - "category": "Error", - "code": 17005 + "category": "Error", + "code": 17005 }, "An unary expression with the '{0}' operator is not allowed in the left-hand side of an exponentiation expression. Consider enclosing the expression in parentheses.": { - "category": "Error", - "code": 17006 + "category": "Error", + "code": 17006 }, "A type assertion expression is not allowed in the left-hand side of an exponentiation expression. Consider enclosing the expression in parentheses.": { - "category": "Error", - "code": 17007 + "category": "Error", + "code": 17007 }, "JSX element '{0}' has no corresponding closing tag.": { - "category": "Error", - "code": 17008 + "category": "Error", + "code": 17008 }, "'super' must be called before accessing 'this' in the constructor of a derived class.": { - "category": "Error", - "code": 17009 + "category": "Error", + "code": 17009 } -} +} \ No newline at end of file diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index e86d86603b4..92cb3334f63 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -7179,7 +7179,7 @@ const _super = (function (geti, seti) { write(`], function(${exportFunctionForFile}, ${contextObjectForFile}) {`); writeLine(); increaseIndent(); - const startIndex = emitDirectivePrologues(node.statements, /*startWithNewLine*/ true, /*ensureUseStrict*/ true); + const startIndex = emitDirectivePrologues(node.statements, /*startWithNewLine*/ true, /*ensureUseStrict*/ !compilerOptions.emitModulesInLooseMode); writeLine(); write(`var __moduleName = ${contextObjectForFile} && ${contextObjectForFile}.id;`); writeLine(); @@ -7285,7 +7285,7 @@ const _super = (function (geti, seti) { writeModuleName(node, emitRelativePathAsModuleName); emitAMDDependencies(node, /*includeNonAmdDependencies*/ true, emitRelativePathAsModuleName); increaseIndent(); - const startIndex = emitDirectivePrologues(node.statements, /*startWithNewLine*/ true, /*ensureUseStrict*/ true); + const startIndex = emitDirectivePrologues(node.statements, /*startWithNewLine*/ true, /*ensureUseStrict*/!compilerOptions.emitModulesInLooseMode); emitExportStarHelper(); emitCaptureThisForNodeIfNecessary(node); emitLinesStartingAt(node.statements, startIndex); @@ -7297,7 +7297,7 @@ const _super = (function (geti, seti) { } function emitCommonJSModule(node: SourceFile) { - const startIndex = emitDirectivePrologues(node.statements, /*startWithNewLine*/ false, /*ensureUseStrict*/ true); + const startIndex = emitDirectivePrologues(node.statements, /*startWithNewLine*/ false, /*ensureUseStrict*/ !compilerOptions.emitModulesInLooseMode); emitEmitHelpers(node); collectExternalModuleInfo(node); emitExportStarHelper(); @@ -7326,7 +7326,7 @@ const _super = (function (geti, seti) { })(`); emitAMDFactoryHeader(dependencyNames); increaseIndent(); - const startIndex = emitDirectivePrologues(node.statements, /*startWithNewLine*/ true, /*ensureUseStrict*/ true); + const startIndex = emitDirectivePrologues(node.statements, /*startWithNewLine*/ true, /*ensureUseStrict*/ !compilerOptions.emitModulesInLooseMode); emitExportStarHelper(); emitCaptureThisForNodeIfNecessary(node); emitLinesStartingAt(node.statements, startIndex); diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 5545fbd162e..97cf2fff3b5 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -2422,6 +2422,7 @@ namespace ts { traceModuleResolution?: boolean; allowSyntheticDefaultImports?: boolean; allowJs?: boolean; + emitModulesInLooseMode?: boolean; /* @internal */ stripInternal?: boolean; // Skip checking lib.d.ts to help speed up tests. diff --git a/tests/baselines/reference/emitModulesInLooseMode_amd.js b/tests/baselines/reference/emitModulesInLooseMode_amd.js new file mode 100644 index 00000000000..a93ca62de0e --- /dev/null +++ b/tests/baselines/reference/emitModulesInLooseMode_amd.js @@ -0,0 +1,8 @@ +//// [emitModulesInLooseMode_amd.ts] + +export var x = 0; + +//// [emitModulesInLooseMode_amd.js] +define(["require", "exports"], function (require, exports) { + exports.x = 0; +}); diff --git a/tests/baselines/reference/emitModulesInLooseMode_amd.symbols b/tests/baselines/reference/emitModulesInLooseMode_amd.symbols new file mode 100644 index 00000000000..d76fea8b7b8 --- /dev/null +++ b/tests/baselines/reference/emitModulesInLooseMode_amd.symbols @@ -0,0 +1,5 @@ +=== tests/cases/compiler/emitModulesInLooseMode_amd.ts === + +export var x = 0; +>x : Symbol(x, Decl(emitModulesInLooseMode_amd.ts, 1, 10)) + diff --git a/tests/baselines/reference/emitModulesInLooseMode_amd.types b/tests/baselines/reference/emitModulesInLooseMode_amd.types new file mode 100644 index 00000000000..1c070cc95fa --- /dev/null +++ b/tests/baselines/reference/emitModulesInLooseMode_amd.types @@ -0,0 +1,6 @@ +=== tests/cases/compiler/emitModulesInLooseMode_amd.ts === + +export var x = 0; +>x : number +>0 : number + diff --git a/tests/baselines/reference/emitModulesInLooseMode_commonjs.js b/tests/baselines/reference/emitModulesInLooseMode_commonjs.js new file mode 100644 index 00000000000..be24cdf6b91 --- /dev/null +++ b/tests/baselines/reference/emitModulesInLooseMode_commonjs.js @@ -0,0 +1,6 @@ +//// [emitModulesInLooseMode_commonjs.ts] + +export var x = 0; + +//// [emitModulesInLooseMode_commonjs.js] +exports.x = 0; diff --git a/tests/baselines/reference/emitModulesInLooseMode_commonjs.symbols b/tests/baselines/reference/emitModulesInLooseMode_commonjs.symbols new file mode 100644 index 00000000000..225286c74de --- /dev/null +++ b/tests/baselines/reference/emitModulesInLooseMode_commonjs.symbols @@ -0,0 +1,5 @@ +=== tests/cases/compiler/emitModulesInLooseMode_commonjs.ts === + +export var x = 0; +>x : Symbol(x, Decl(emitModulesInLooseMode_commonjs.ts, 1, 10)) + diff --git a/tests/baselines/reference/emitModulesInLooseMode_commonjs.types b/tests/baselines/reference/emitModulesInLooseMode_commonjs.types new file mode 100644 index 00000000000..b37bb9667ab --- /dev/null +++ b/tests/baselines/reference/emitModulesInLooseMode_commonjs.types @@ -0,0 +1,6 @@ +=== tests/cases/compiler/emitModulesInLooseMode_commonjs.ts === + +export var x = 0; +>x : number +>0 : number + diff --git a/tests/baselines/reference/emitModulesInLooseMode_es6.js b/tests/baselines/reference/emitModulesInLooseMode_es6.js new file mode 100644 index 00000000000..95cc14ff609 --- /dev/null +++ b/tests/baselines/reference/emitModulesInLooseMode_es6.js @@ -0,0 +1,6 @@ +//// [emitModulesInLooseMode_es6.ts] + +export var x = 0; + +//// [emitModulesInLooseMode_es6.js] +export var x = 0; diff --git a/tests/baselines/reference/emitModulesInLooseMode_es6.symbols b/tests/baselines/reference/emitModulesInLooseMode_es6.symbols new file mode 100644 index 00000000000..4f3c073f7ee --- /dev/null +++ b/tests/baselines/reference/emitModulesInLooseMode_es6.symbols @@ -0,0 +1,5 @@ +=== tests/cases/compiler/emitModulesInLooseMode_es6.ts === + +export var x = 0; +>x : Symbol(x, Decl(emitModulesInLooseMode_es6.ts, 1, 10)) + diff --git a/tests/baselines/reference/emitModulesInLooseMode_es6.types b/tests/baselines/reference/emitModulesInLooseMode_es6.types new file mode 100644 index 00000000000..84631ede00f --- /dev/null +++ b/tests/baselines/reference/emitModulesInLooseMode_es6.types @@ -0,0 +1,6 @@ +=== tests/cases/compiler/emitModulesInLooseMode_es6.ts === + +export var x = 0; +>x : number +>0 : number + diff --git a/tests/baselines/reference/emitModulesInLooseMode_system.js b/tests/baselines/reference/emitModulesInLooseMode_system.js new file mode 100644 index 00000000000..4cf401a554d --- /dev/null +++ b/tests/baselines/reference/emitModulesInLooseMode_system.js @@ -0,0 +1,15 @@ +//// [emitModulesInLooseMode_system.ts] + +export var x = 0; + +//// [emitModulesInLooseMode_system.js] +System.register([], function(exports_1, context_1) { + var __moduleName = context_1 && context_1.id; + var x; + return { + setters:[], + execute: function() { + exports_1("x", x = 0); + } + } +}); diff --git a/tests/baselines/reference/emitModulesInLooseMode_system.symbols b/tests/baselines/reference/emitModulesInLooseMode_system.symbols new file mode 100644 index 00000000000..0682b2b648f --- /dev/null +++ b/tests/baselines/reference/emitModulesInLooseMode_system.symbols @@ -0,0 +1,5 @@ +=== tests/cases/compiler/emitModulesInLooseMode_system.ts === + +export var x = 0; +>x : Symbol(x, Decl(emitModulesInLooseMode_system.ts, 1, 10)) + diff --git a/tests/baselines/reference/emitModulesInLooseMode_system.types b/tests/baselines/reference/emitModulesInLooseMode_system.types new file mode 100644 index 00000000000..429908c1de4 --- /dev/null +++ b/tests/baselines/reference/emitModulesInLooseMode_system.types @@ -0,0 +1,6 @@ +=== tests/cases/compiler/emitModulesInLooseMode_system.ts === + +export var x = 0; +>x : number +>0 : number + diff --git a/tests/baselines/reference/emitModulesInLooseMode_umd.js b/tests/baselines/reference/emitModulesInLooseMode_umd.js new file mode 100644 index 00000000000..327962d18f2 --- /dev/null +++ b/tests/baselines/reference/emitModulesInLooseMode_umd.js @@ -0,0 +1,15 @@ +//// [emitModulesInLooseMode_umd.ts] + +export var x = 0; + +//// [emitModulesInLooseMode_umd.js] +(function (factory) { + if (typeof module === 'object' && typeof module.exports === 'object') { + var v = factory(require, exports); if (v !== undefined) module.exports = v; + } + else if (typeof define === 'function' && define.amd) { + define(["require", "exports"], factory); + } +})(function (require, exports) { + exports.x = 0; +}); diff --git a/tests/baselines/reference/emitModulesInLooseMode_umd.symbols b/tests/baselines/reference/emitModulesInLooseMode_umd.symbols new file mode 100644 index 00000000000..86c9e9b200c --- /dev/null +++ b/tests/baselines/reference/emitModulesInLooseMode_umd.symbols @@ -0,0 +1,5 @@ +=== tests/cases/compiler/emitModulesInLooseMode_umd.ts === + +export var x = 0; +>x : Symbol(x, Decl(emitModulesInLooseMode_umd.ts, 1, 10)) + diff --git a/tests/baselines/reference/emitModulesInLooseMode_umd.types b/tests/baselines/reference/emitModulesInLooseMode_umd.types new file mode 100644 index 00000000000..98a32838eb6 --- /dev/null +++ b/tests/baselines/reference/emitModulesInLooseMode_umd.types @@ -0,0 +1,6 @@ +=== tests/cases/compiler/emitModulesInLooseMode_umd.ts === + +export var x = 0; +>x : number +>0 : number + diff --git a/tests/cases/compiler/emitModulesInLooseMode_amd.ts b/tests/cases/compiler/emitModulesInLooseMode_amd.ts new file mode 100644 index 00000000000..7c3394bebae --- /dev/null +++ b/tests/cases/compiler/emitModulesInLooseMode_amd.ts @@ -0,0 +1,4 @@ +// @module: amd +// @emitModulesInLooseMode: true + +export var x = 0; \ No newline at end of file diff --git a/tests/cases/compiler/emitModulesInLooseMode_commonjs.ts b/tests/cases/compiler/emitModulesInLooseMode_commonjs.ts new file mode 100644 index 00000000000..761f1f6ea9f --- /dev/null +++ b/tests/cases/compiler/emitModulesInLooseMode_commonjs.ts @@ -0,0 +1,4 @@ +// @module: commonjs +// @emitModulesInLooseMode: true + +export var x = 0; \ No newline at end of file diff --git a/tests/cases/compiler/emitModulesInLooseMode_es6.ts b/tests/cases/compiler/emitModulesInLooseMode_es6.ts new file mode 100644 index 00000000000..22c4368629f --- /dev/null +++ b/tests/cases/compiler/emitModulesInLooseMode_es6.ts @@ -0,0 +1,5 @@ +// @module: es6 +// @target: es6 +// @emitModulesInLooseMode: true + +export var x = 0; \ No newline at end of file diff --git a/tests/cases/compiler/emitModulesInLooseMode_system.ts b/tests/cases/compiler/emitModulesInLooseMode_system.ts new file mode 100644 index 00000000000..0face8fabca --- /dev/null +++ b/tests/cases/compiler/emitModulesInLooseMode_system.ts @@ -0,0 +1,4 @@ +// @module: system +// @emitModulesInLooseMode: true + +export var x = 0; \ No newline at end of file diff --git a/tests/cases/compiler/emitModulesInLooseMode_umd.ts b/tests/cases/compiler/emitModulesInLooseMode_umd.ts new file mode 100644 index 00000000000..a6a3559986f --- /dev/null +++ b/tests/cases/compiler/emitModulesInLooseMode_umd.ts @@ -0,0 +1,4 @@ +// @module: umd +// @emitModulesInLooseMode: true + +export var x = 0; \ No newline at end of file