From 29eac1be2aade1f2f1e0650649e3ebce402fec0e Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Thu, 4 May 2023 13:58:29 -0700 Subject: [PATCH 1/7] Test for checkJs --- .../unittests/tscWatch/programUpdates.ts | 36 ++++ .../when-changing-`checkJs`-of-config-file.js | 172 ++++++++++++++++++ 2 files changed, 208 insertions(+) create mode 100644 tests/baselines/reference/tscWatch/programUpdates/when-changing-`checkJs`-of-config-file.js diff --git a/src/testRunner/unittests/tscWatch/programUpdates.ts b/src/testRunner/unittests/tscWatch/programUpdates.ts index 229aadd9e1501..f5c5c35507197 100644 --- a/src/testRunner/unittests/tscWatch/programUpdates.ts +++ b/src/testRunner/unittests/tscWatch/programUpdates.ts @@ -2047,4 +2047,40 @@ import { x } from "../b";`), }, ] }); + + verifyTscWatch({ + scenario, + subScenario: "when changing `checkJs` of config file", + commandLineArgs: ["-w", "-p", ".", "--extendedDiagnostics"], + sys: () => { + const module1: File = { + path: `/user/username/projects/myproject/a.js`, + content: `export const aNumber: number = "string"` + }; + const module2: File = { + path: `/user/username/projects/myproject/b.ts`, + content: `import { aNumber } from "./a.js";` + }; + const config: File = { + path: `/user/username/projects/myproject/tsconfig.json`, + content: JSON.stringify({ + compilerOptions: { + checkJs: false + } + }), + }; + return createWatchedSystem([module1, module2, config, libFile], { currentDirectory: "/user/username/projects/myproject" }); + }, + edits: [ + { + caption: "Change checkJs to true", + edit: sys => sys.writeFile(`/user/username/projects/myproject/tsconfig.json`, JSON.stringify({ + compilerOptions: { + checkJs: true + } + })), + timeouts: sys => sys.runQueuedTimeoutCallbacks(), + }, + ] + }); }); diff --git a/tests/baselines/reference/tscWatch/programUpdates/when-changing-`checkJs`-of-config-file.js b/tests/baselines/reference/tscWatch/programUpdates/when-changing-`checkJs`-of-config-file.js new file mode 100644 index 0000000000000..0fad28c4e73e5 --- /dev/null +++ b/tests/baselines/reference/tscWatch/programUpdates/when-changing-`checkJs`-of-config-file.js @@ -0,0 +1,172 @@ +currentDirectory:: /user/username/projects/myproject useCaseSensitiveFileNames: false +Input:: +//// [/user/username/projects/myproject/a.js] +export const aNumber: number = "string" + +//// [/user/username/projects/myproject/b.ts] +import { aNumber } from "./a.js"; + +//// [/user/username/projects/myproject/tsconfig.json] +{"compilerOptions":{"checkJs":false}} + +//// [/a/lib/lib.d.ts] +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } + + +/a/lib/tsc.js -w -p . --extendedDiagnostics +Output:: +[12:00:23 AM] Starting compilation in watch mode... + +Current directory: /user/username/projects/myproject CaseSensitiveFileNames: false +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Config file +Synchronizing program +CreatingProgramWith:: + roots: ["/user/username/projects/myproject/b.ts"] + options: {"checkJs":false,"watch":true,"project":"/user/username/projects/myproject","extendedDiagnostics":true,"configFilePath":"/user/username/projects/myproject/tsconfig.json"} +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/b.ts 250 undefined Source file +DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/a.js 1 undefined Failed Lookup Locations +Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/a.js 1 undefined Failed Lookup Locations +DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 0 undefined Failed Lookup Locations +Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 0 undefined Failed Lookup Locations +FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 250 undefined Source file +DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Type roots +Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Type roots +DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Type roots +Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Type roots +DirectoryWatcher:: Triggered with /user/username/projects/myproject/b.js :: WatchInfo: /user/username/projects/myproject 0 undefined Failed Lookup Locations +Elapsed:: *ms DirectoryWatcher:: Triggered with /user/username/projects/myproject/b.js :: WatchInfo: /user/username/projects/myproject 0 undefined Failed Lookup Locations +[12:00:26 AM] Found 0 errors. Watching for file changes. + +DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Wild card directory +Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Wild card directory + + +Program root files: ["/user/username/projects/myproject/b.ts"] +Program options: {"checkJs":false,"watch":true,"project":"/user/username/projects/myproject","extendedDiagnostics":true,"configFilePath":"/user/username/projects/myproject/tsconfig.json"} +Program structureReused: Not +Program files:: +/a/lib/lib.d.ts +/user/username/projects/myproject/b.ts + +Semantic diagnostics in builder refreshed for:: +/a/lib/lib.d.ts +/user/username/projects/myproject/b.ts + +Shape signatures in builder refreshed for:: +/a/lib/lib.d.ts (used version) +/user/username/projects/myproject/b.ts (used version) + +PolledWatches:: +/user/username/projects/myproject/a.js: *new* + {"pollingInterval":500} +/user/username/projects/myproject/node_modules/@types: *new* + {"pollingInterval":500} +/user/username/projects/node_modules/@types: *new* + {"pollingInterval":500} + +FsWatches:: +/user/username/projects/myproject/tsconfig.json: *new* + {} +/user/username/projects/myproject/b.ts: *new* + {} +/user/username/projects/myproject: *new* + {} +/a/lib/lib.d.ts: *new* + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: *new* + {} + +exitCode:: ExitStatus.undefined + +//// [/user/username/projects/myproject/b.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); + + + +Change:: Change checkJs to true + +Input:: +//// [/user/username/projects/myproject/tsconfig.json] +{"compilerOptions":{"checkJs":true}} + + +Before running Timeout callback:: count: 1 +1: timerToUpdateProgram +After running Timeout callback:: count: 0 +Output:: +FileWatcher:: Triggered with /user/username/projects/myproject/tsconfig.json 1:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Config file +Scheduling update +Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/tsconfig.json 1:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Config file +Reloading config file: /user/username/projects/myproject/tsconfig.json +Synchronizing program +[12:00:30 AM] File change detected. Starting incremental compilation... + +CreatingProgramWith:: + roots: ["/user/username/projects/myproject/a.js","/user/username/projects/myproject/b.ts"] + options: {"checkJs":true,"watch":true,"project":"/user/username/projects/myproject","extendedDiagnostics":true,"configFilePath":"/user/username/projects/myproject/tsconfig.json"} +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/a.js 250 undefined Source file +a.js:1:23 - error TS8010: Type annotations can only be used in TypeScript files. + +1 export const aNumber: number = "string" +   ~~~~~~ + +[12:00:34 AM] Found 1 error. Watching for file changes. + + + +Program root files: ["/user/username/projects/myproject/a.js","/user/username/projects/myproject/b.ts"] +Program options: {"checkJs":true,"watch":true,"project":"/user/username/projects/myproject","extendedDiagnostics":true,"configFilePath":"/user/username/projects/myproject/tsconfig.json"} +Program structureReused: Not +Program files:: +/a/lib/lib.d.ts +/user/username/projects/myproject/a.js +/user/username/projects/myproject/b.ts + +Semantic diagnostics in builder refreshed for:: +/user/username/projects/myproject/a.js +/user/username/projects/myproject/b.ts + +Shape signatures in builder refreshed for:: +/user/username/projects/myproject/a.js (computed .d.ts) +/user/username/projects/myproject/b.ts (computed .d.ts) + +PolledWatches:: +/user/username/projects/myproject/a.js: + {"pollingInterval":500} +/user/username/projects/myproject/node_modules/@types: + {"pollingInterval":500} +/user/username/projects/node_modules/@types: + {"pollingInterval":500} + +FsWatches:: +/user/username/projects/myproject/tsconfig.json: + {} +/user/username/projects/myproject/b.ts: + {} +/user/username/projects/myproject: + {} +/a/lib/lib.d.ts: + {} +/user/username/projects/myproject/a.js: *new* + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: + {} + +exitCode:: ExitStatus.undefined + +//// [/user/username/projects/myproject/b.js] file written with same contents From 7dc8f01aeb32ce926f787173a9898d964a327a3f Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Mon, 20 Mar 2023 18:38:56 -0700 Subject: [PATCH 2/7] Mark more options as affecting errors/resolution --- src/compiler/commandLineParser.ts | 4 +++ ...based-projects-and-emits-them-correctly.js | 10 +++++--- ...ved-json-files-and-emits-them-correctly.js | 15 ++++++----- ...rojects-and-concatenates-them-correctly.js | 25 +++++++++++-------- .../updates-emit-on-jsx-option-change.js | 2 ++ .../when-changing-`checkJs`-of-config-file.js | 4 +-- 6 files changed, 37 insertions(+), 23 deletions(-) diff --git a/src/compiler/commandLineParser.ts b/src/compiler/commandLineParser.ts index 3b2120d258c8c..b30d9c9cf3e77 100644 --- a/src/compiler/commandLineParser.ts +++ b/src/compiler/commandLineParser.ts @@ -652,6 +652,9 @@ const commandOptionsWithoutBuild: CommandLineOption[] = [ { name: "checkJs", type: "boolean", + affectsBuildInfo: true, + affectsModuleResolution: true, + affectsSemanticDiagnostics: true, showInSimplifiedHelpView: true, category: Diagnostics.JavaScript_Support, description: Diagnostics.Enable_error_reporting_in_type_checked_JavaScript_files, @@ -664,6 +667,7 @@ const commandOptionsWithoutBuild: CommandLineOption[] = [ affectsEmit: true, affectsBuildInfo: true, affectsModuleResolution: true, + affectsSemanticDiagnostics: true, paramType: Diagnostics.KIND, showInSimplifiedHelpView: true, category: Diagnostics.Language_and_Environment, diff --git a/tests/baselines/reference/tsbuild/javascriptProjectEmit/loads-js-based-projects-and-emits-them-correctly.js b/tests/baselines/reference/tsbuild/javascriptProjectEmit/loads-js-based-projects-and-emits-them-correctly.js index e667e5d5af14b..f4a3548418df0 100644 --- a/tests/baselines/reference/tsbuild/javascriptProjectEmit/loads-js-based-projects-and-emits-them-correctly.js +++ b/tests/baselines/reference/tsbuild/javascriptProjectEmit/loads-js-based-projects-and-emits-them-correctly.js @@ -142,7 +142,7 @@ module.exports = {}; //// [/lib/common/tsconfig.tsbuildinfo] -{"program":{"fileNames":["../lib.d.ts","../../src/common/nominal.js"],"fileInfos":[{"version":"-32082413277-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };\ninterface SymbolConstructor {\n readonly species: symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\n","affectsGlobalScope":true},{"version":"-9003723607-/**\n * @template T, Name\n * @typedef {T & {[Symbol.species]: Name}} Nominal\n */\nmodule.exports = {};\n","signature":"-13020584488-export type Nominal = T & {\n [Symbol.species]: Name;\n};\n"}],"root":[2],"options":{"composite":true,"declaration":true,"outDir":"..","rootDir":"../../src","skipLibCheck":true},"referencedMap":[],"exportedModulesMap":[],"semanticDiagnosticsPerFile":[1,2],"latestChangedDtsFile":"./nominal.d.ts"},"version":"FakeTSVersion"} +{"program":{"fileNames":["../lib.d.ts","../../src/common/nominal.js"],"fileInfos":[{"version":"-32082413277-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };\ninterface SymbolConstructor {\n readonly species: symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\n","affectsGlobalScope":true},{"version":"-9003723607-/**\n * @template T, Name\n * @typedef {T & {[Symbol.species]: Name}} Nominal\n */\nmodule.exports = {};\n","signature":"-13020584488-export type Nominal = T & {\n [Symbol.species]: Name;\n};\n"}],"root":[2],"options":{"checkJs":true,"composite":true,"declaration":true,"outDir":"..","rootDir":"../../src","skipLibCheck":true},"referencedMap":[],"exportedModulesMap":[],"semanticDiagnosticsPerFile":[1,2],"latestChangedDtsFile":"./nominal.d.ts"},"version":"FakeTSVersion"} //// [/lib/common/tsconfig.tsbuildinfo.readable.baseline.txt] { @@ -177,6 +177,7 @@ module.exports = {}; ] ], "options": { + "checkJs": true, "composite": true, "declaration": true, "outDir": "..", @@ -192,11 +193,11 @@ module.exports = {}; "latestChangedDtsFile": "./nominal.d.ts" }, "version": "FakeTSVersion", - "size": 1266 + "size": 1281 } //// [/lib/sub-project/tsconfig.tsbuildinfo] -{"program":{"fileNames":["../lib.d.ts","../common/nominal.d.ts","../../src/sub-project/index.js"],"fileInfos":[{"version":"-32082413277-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };\ninterface SymbolConstructor {\n readonly species: symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\n","affectsGlobalScope":true},"-13020584488-export type Nominal = T & {\n [Symbol.species]: Name;\n};\n","-23375763082-import { Nominal } from '../common/nominal';\n\n/**\n * @typedef {Nominal} MyNominal\n */\n"],"root":[3],"options":{"composite":true,"declaration":true,"outDir":"..","rootDir":"../../src","skipLibCheck":true},"fileIdsList":[[2]],"referencedMap":[[3,1]],"exportedModulesMap":[[3,1]],"semanticDiagnosticsPerFile":[2,1,[3,[{"file":"../../src/sub-project/index.js","start":9,"length":7,"messageText":"'Nominal' is a type and cannot be imported in JavaScript files. Use 'import(\"../common/nominal\").Nominal' in a JSDoc type annotation.","category":1,"code":18042}]]],"affectedFilesPendingEmit":[3],"emitSignatures":[3]},"version":"FakeTSVersion"} +{"program":{"fileNames":["../lib.d.ts","../common/nominal.d.ts","../../src/sub-project/index.js"],"fileInfos":[{"version":"-32082413277-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };\ninterface SymbolConstructor {\n readonly species: symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\n","affectsGlobalScope":true},"-13020584488-export type Nominal = T & {\n [Symbol.species]: Name;\n};\n","-23375763082-import { Nominal } from '../common/nominal';\n\n/**\n * @typedef {Nominal} MyNominal\n */\n"],"root":[3],"options":{"checkJs":true,"composite":true,"declaration":true,"outDir":"..","rootDir":"../../src","skipLibCheck":true},"fileIdsList":[[2]],"referencedMap":[[3,1]],"exportedModulesMap":[[3,1]],"semanticDiagnosticsPerFile":[2,1,[3,[{"file":"../../src/sub-project/index.js","start":9,"length":7,"messageText":"'Nominal' is a type and cannot be imported in JavaScript files. Use 'import(\"../common/nominal\").Nominal' in a JSDoc type annotation.","category":1,"code":18042}]]],"affectedFilesPendingEmit":[3],"emitSignatures":[3]},"version":"FakeTSVersion"} //// [/lib/sub-project/tsconfig.tsbuildinfo.readable.baseline.txt] { @@ -237,6 +238,7 @@ module.exports = {}; ] ], "options": { + "checkJs": true, "composite": true, "declaration": true, "outDir": "..", @@ -281,6 +283,6 @@ module.exports = {}; ] }, "version": "FakeTSVersion", - "size": 1566 + "size": 1581 } diff --git a/tests/baselines/reference/tsbuild/javascriptProjectEmit/loads-js-based-projects-with-non-moved-json-files-and-emits-them-correctly.js b/tests/baselines/reference/tsbuild/javascriptProjectEmit/loads-js-based-projects-with-non-moved-json-files-and-emits-them-correctly.js index a97837dfd3c76..a17dd129a7a20 100644 --- a/tests/baselines/reference/tsbuild/javascriptProjectEmit/loads-js-based-projects-with-non-moved-json-files-and-emits-them-correctly.js +++ b/tests/baselines/reference/tsbuild/javascriptProjectEmit/loads-js-based-projects-with-non-moved-json-files-and-emits-them-correctly.js @@ -137,7 +137,7 @@ exports.m = common_1.default; //// [/out/sub-project/tsconfig.tsbuildinfo] -{"program":{"fileNames":["../../lib/lib.d.ts","../../src/common/obj.json","../../src/common/index.d.ts","../../src/sub-project/index.js"],"fileInfos":[{"version":"-32082413277-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };\ninterface SymbolConstructor {\n readonly species: symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\n","affectsGlobalScope":true},"2151907832-{\n \"val\": 42\n}","-5032674136-import x = require(\"./obj.json\");\nexport = x;\n",{"version":"-14684157955-import mod from '../common';\n\nexport const m = mod;\n","signature":"-12566182521-export const m: {\n val: number;\n};\n"}],"root":[4],"options":{"composite":true,"declaration":true,"esModuleInterop":true,"outDir":"..","rootDir":"../../src","skipLibCheck":true},"fileIdsList":[[2],[3]],"referencedMap":[[3,1],[4,2]],"exportedModulesMap":[[3,1]],"semanticDiagnosticsPerFile":[1,3,2,4],"latestChangedDtsFile":"./index.d.ts"},"version":"FakeTSVersion"} +{"program":{"fileNames":["../../lib/lib.d.ts","../../src/common/obj.json","../../src/common/index.d.ts","../../src/sub-project/index.js"],"fileInfos":[{"version":"-32082413277-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };\ninterface SymbolConstructor {\n readonly species: symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\n","affectsGlobalScope":true},"2151907832-{\n \"val\": 42\n}","-5032674136-import x = require(\"./obj.json\");\nexport = x;\n",{"version":"-14684157955-import mod from '../common';\n\nexport const m = mod;\n","signature":"-12566182521-export const m: {\n val: number;\n};\n"}],"root":[4],"options":{"checkJs":true,"composite":true,"declaration":true,"esModuleInterop":true,"outDir":"..","rootDir":"../../src","skipLibCheck":true},"fileIdsList":[[2],[3]],"referencedMap":[[3,1],[4,2]],"exportedModulesMap":[[3,1]],"semanticDiagnosticsPerFile":[1,3,2,4],"latestChangedDtsFile":"./index.d.ts"},"version":"FakeTSVersion"} //// [/out/sub-project/tsconfig.tsbuildinfo.readable.baseline.txt] { @@ -190,6 +190,7 @@ exports.m = common_1.default; ] ], "options": { + "checkJs": true, "composite": true, "declaration": true, "esModuleInterop": true, @@ -219,7 +220,7 @@ exports.m = common_1.default; "latestChangedDtsFile": "./index.d.ts" }, "version": "FakeTSVersion", - "size": 1419 + "size": 1434 } //// [/out/sub-project-2/index.d.ts] @@ -245,7 +246,7 @@ exports.getVar = getVar; //// [/out/sub-project-2/tsconfig.tsbuildinfo] -{"program":{"fileNames":["../../lib/lib.d.ts","../sub-project/index.d.ts","../../src/sub-project-2/index.js"],"fileInfos":[{"version":"-32082413277-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };\ninterface SymbolConstructor {\n readonly species: symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\n","affectsGlobalScope":true},"-12566182521-export const m: {\n val: number;\n};\n",{"version":"13545386800-import { m } from '../sub-project/index';\n\nconst variable = {\n key: m,\n};\n\nexport function getVar() {\n return variable;\n}\n","signature":"2403991005-export function getVar(): {\n key: {\n val: number;\n };\n};\n"}],"root":[3],"options":{"composite":true,"declaration":true,"esModuleInterop":true,"outDir":"..","rootDir":"../../src","skipLibCheck":true},"fileIdsList":[[2]],"referencedMap":[[3,1]],"exportedModulesMap":[],"semanticDiagnosticsPerFile":[1,2,3],"latestChangedDtsFile":"./index.d.ts"},"version":"FakeTSVersion"} +{"program":{"fileNames":["../../lib/lib.d.ts","../sub-project/index.d.ts","../../src/sub-project-2/index.js"],"fileInfos":[{"version":"-32082413277-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };\ninterface SymbolConstructor {\n readonly species: symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\n","affectsGlobalScope":true},"-12566182521-export const m: {\n val: number;\n};\n",{"version":"13545386800-import { m } from '../sub-project/index';\n\nconst variable = {\n key: m,\n};\n\nexport function getVar() {\n return variable;\n}\n","signature":"2403991005-export function getVar(): {\n key: {\n val: number;\n };\n};\n"}],"root":[3],"options":{"checkJs":true,"composite":true,"declaration":true,"esModuleInterop":true,"outDir":"..","rootDir":"../../src","skipLibCheck":true},"fileIdsList":[[2]],"referencedMap":[[3,1]],"exportedModulesMap":[],"semanticDiagnosticsPerFile":[1,2,3],"latestChangedDtsFile":"./index.d.ts"},"version":"FakeTSVersion"} //// [/out/sub-project-2/tsconfig.tsbuildinfo.readable.baseline.txt] { @@ -290,6 +291,7 @@ exports.getVar = getVar; ] ], "options": { + "checkJs": true, "composite": true, "declaration": true, "esModuleInterop": true, @@ -311,7 +313,7 @@ exports.getVar = getVar; "latestChangedDtsFile": "./index.d.ts" }, "version": "FakeTSVersion", - "size": 1444 + "size": 1459 } //// [/src/common/index.d.ts] @@ -326,7 +328,7 @@ module.exports = x; //// [/src/common/tsconfig.tsbuildinfo] -{"program":{"fileNames":["../../lib/lib.d.ts","./obj.json","./index.ts"],"fileInfos":[{"version":"-32082413277-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };\ninterface SymbolConstructor {\n readonly species: symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\n","affectsGlobalScope":true},"2151907832-{\n \"val\": 42\n}","-5032674136-import x = require(\"./obj.json\");\nexport = x;\n"],"root":[2,3],"options":{"composite":true,"declaration":true,"esModuleInterop":true,"outDir":"../..","rootDir":"..","skipLibCheck":true},"fileIdsList":[[2]],"referencedMap":[[3,1]],"exportedModulesMap":[[3,1]],"semanticDiagnosticsPerFile":[1,3,2],"latestChangedDtsFile":"./index.d.ts"},"version":"FakeTSVersion"} +{"program":{"fileNames":["../../lib/lib.d.ts","./obj.json","./index.ts"],"fileInfos":[{"version":"-32082413277-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };\ninterface SymbolConstructor {\n readonly species: symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\n","affectsGlobalScope":true},"2151907832-{\n \"val\": 42\n}","-5032674136-import x = require(\"./obj.json\");\nexport = x;\n"],"root":[2,3],"options":{"checkJs":true,"composite":true,"declaration":true,"esModuleInterop":true,"outDir":"../..","rootDir":"..","skipLibCheck":true},"fileIdsList":[[2]],"referencedMap":[[3,1]],"exportedModulesMap":[[3,1]],"semanticDiagnosticsPerFile":[1,3,2],"latestChangedDtsFile":"./index.d.ts"},"version":"FakeTSVersion"} //// [/src/common/tsconfig.tsbuildinfo.readable.baseline.txt] { @@ -371,6 +373,7 @@ module.exports = x; ] ], "options": { + "checkJs": true, "composite": true, "declaration": true, "esModuleInterop": true, @@ -396,6 +399,6 @@ module.exports = x; "latestChangedDtsFile": "./index.d.ts" }, "version": "FakeTSVersion", - "size": 1188 + "size": 1203 } diff --git a/tests/baselines/reference/tsbuild/javascriptProjectEmit/modifies-outfile-js-projects-and-concatenates-them-correctly.js b/tests/baselines/reference/tsbuild/javascriptProjectEmit/modifies-outfile-js-projects-and-concatenates-them-correctly.js index 278911c047efd..bbb375c9a58d6 100644 --- a/tests/baselines/reference/tsbuild/javascriptProjectEmit/modifies-outfile-js-projects-and-concatenates-them-correctly.js +++ b/tests/baselines/reference/tsbuild/javascriptProjectEmit/modifies-outfile-js-projects-and-concatenates-them-correctly.js @@ -138,7 +138,7 @@ type Nominal = T & { //// [/src/common/common.tsbuildinfo] -{"bundle":{"commonSourceDirectory":"..","sourceFiles":["./nominal.js"],"js":{"sections":[{"pos":0,"end":80,"kind":"text"}],"hash":"-1932521178-/**\n * @template T, Name\n * @typedef {T & {[Symbol.species]: Name}} Nominal\n */\n"},"dts":{"sections":[{"pos":0,"end":61,"kind":"text"}],"hash":"-12106547178-type Nominal = T & {\n [Symbol.species]: Name;\n};\n"}},"program":{"fileNames":["../../lib/lib.d.ts","./nominal.js"],"fileInfos":["-32082413277-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };\ninterface SymbolConstructor {\n readonly species: symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\n","-1932521178-/**\n * @template T, Name\n * @typedef {T & {[Symbol.species]: Name}} Nominal\n */\n"],"root":[2],"options":{"composite":true,"declaration":true,"outFile":"./common.js","rootDir":"..","skipLibCheck":true},"outSignature":"-12106547178-type Nominal = T & {\n [Symbol.species]: Name;\n};\n","latestChangedDtsFile":"./common.d.ts"},"version":"FakeTSVersion"} +{"bundle":{"commonSourceDirectory":"..","sourceFiles":["./nominal.js"],"js":{"sections":[{"pos":0,"end":80,"kind":"text"}],"hash":"-1932521178-/**\n * @template T, Name\n * @typedef {T & {[Symbol.species]: Name}} Nominal\n */\n"},"dts":{"sections":[{"pos":0,"end":61,"kind":"text"}],"hash":"-12106547178-type Nominal = T & {\n [Symbol.species]: Name;\n};\n"}},"program":{"fileNames":["../../lib/lib.d.ts","./nominal.js"],"fileInfos":["-32082413277-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };\ninterface SymbolConstructor {\n readonly species: symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\n","-1932521178-/**\n * @template T, Name\n * @typedef {T & {[Symbol.species]: Name}} Nominal\n */\n"],"root":[2],"options":{"checkJs":true,"composite":true,"declaration":true,"outFile":"./common.js","rootDir":"..","skipLibCheck":true},"outSignature":"-12106547178-type Nominal = T & {\n [Symbol.species]: Name;\n};\n","latestChangedDtsFile":"./common.d.ts"},"version":"FakeTSVersion"} //// [/src/common/common.tsbuildinfo.baseline.txt] ====================================================================== @@ -205,6 +205,7 @@ type Nominal = T & { ] ], "options": { + "checkJs": true, "composite": true, "declaration": true, "outFile": "./common.js", @@ -215,7 +216,7 @@ type Nominal = T & { "latestChangedDtsFile": "./common.d.ts" }, "version": "FakeTSVersion", - "size": 1477 + "size": 1492 } //// [/src/sub-project/sub-project.d.ts] @@ -241,7 +242,7 @@ var c = /** @type {*} */ (null); //// [/src/sub-project/sub-project.tsbuildinfo] -{"bundle":{"commonSourceDirectory":"..","sourceFiles":["./index.js"],"js":{"sections":[{"pos":0,"end":80,"kind":"prepend","data":"../common/common.js","texts":[{"pos":0,"end":80,"kind":"text"}]},{"pos":80,"end":174,"kind":"text"}],"hash":"-7871970258-/**\n * @template T, Name\n * @typedef {T & {[Symbol.species]: Name}} Nominal\n */\n/**\n * @typedef {Nominal} MyNominal\n */\nvar c = /** @type {*} */ (null);\n"},"dts":{"sections":[{"pos":0,"end":61,"kind":"prepend","data":"../common/common.d.ts","texts":[{"pos":0,"end":61,"kind":"text"}]},{"pos":61,"end":191,"kind":"text"}],"hash":"-9550245654-type Nominal = T & {\n [Symbol.species]: Name;\n};\n/**\n * @typedef {Nominal} MyNominal\n */\ndeclare const c: any;\ntype MyNominal = Nominal;\n"}},"program":{"fileNames":["../../lib/lib.d.ts","../common/common.d.ts","./index.js"],"fileInfos":["-32082413277-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };\ninterface SymbolConstructor {\n readonly species: symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\n","-12106547178-type Nominal = T & {\n [Symbol.species]: Name;\n};\n","2691219051-/**\n * @typedef {Nominal} MyNominal\n */\nconst c = /** @type {*} */(null);\n"],"root":[3],"options":{"composite":true,"declaration":true,"outFile":"./sub-project.js","rootDir":"..","skipLibCheck":true},"outSignature":"-9550245654-type Nominal = T & {\n [Symbol.species]: Name;\n};\n/**\n * @typedef {Nominal} MyNominal\n */\ndeclare const c: any;\ntype MyNominal = Nominal;\n","latestChangedDtsFile":"./sub-project.d.ts"},"version":"FakeTSVersion"} +{"bundle":{"commonSourceDirectory":"..","sourceFiles":["./index.js"],"js":{"sections":[{"pos":0,"end":80,"kind":"prepend","data":"../common/common.js","texts":[{"pos":0,"end":80,"kind":"text"}]},{"pos":80,"end":174,"kind":"text"}],"hash":"-7871970258-/**\n * @template T, Name\n * @typedef {T & {[Symbol.species]: Name}} Nominal\n */\n/**\n * @typedef {Nominal} MyNominal\n */\nvar c = /** @type {*} */ (null);\n"},"dts":{"sections":[{"pos":0,"end":61,"kind":"prepend","data":"../common/common.d.ts","texts":[{"pos":0,"end":61,"kind":"text"}]},{"pos":61,"end":191,"kind":"text"}],"hash":"-9550245654-type Nominal = T & {\n [Symbol.species]: Name;\n};\n/**\n * @typedef {Nominal} MyNominal\n */\ndeclare const c: any;\ntype MyNominal = Nominal;\n"}},"program":{"fileNames":["../../lib/lib.d.ts","../common/common.d.ts","./index.js"],"fileInfos":["-32082413277-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };\ninterface SymbolConstructor {\n readonly species: symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\n","-12106547178-type Nominal = T & {\n [Symbol.species]: Name;\n};\n","2691219051-/**\n * @typedef {Nominal} MyNominal\n */\nconst c = /** @type {*} */(null);\n"],"root":[3],"options":{"checkJs":true,"composite":true,"declaration":true,"outFile":"./sub-project.js","rootDir":"..","skipLibCheck":true},"outSignature":"-9550245654-type Nominal = T & {\n [Symbol.species]: Name;\n};\n/**\n * @typedef {Nominal} MyNominal\n */\ndeclare const c: any;\ntype MyNominal = Nominal;\n","latestChangedDtsFile":"./sub-project.d.ts"},"version":"FakeTSVersion"} //// [/src/sub-project/sub-project.tsbuildinfo.baseline.txt] ====================================================================== @@ -355,6 +356,7 @@ type MyNominal = Nominal; ] ], "options": { + "checkJs": true, "composite": true, "declaration": true, "outFile": "./sub-project.js", @@ -365,7 +367,7 @@ type MyNominal = Nominal; "latestChangedDtsFile": "./sub-project.d.ts" }, "version": "FakeTSVersion", - "size": 2189 + "size": 2204 } //// [/src/sub-project-2/sub-project-2.d.ts] @@ -407,7 +409,7 @@ function getVar() { //// [/src/sub-project-2/sub-project-2.tsbuildinfo] -{"bundle":{"commonSourceDirectory":"..","sourceFiles":["./index.js"],"js":{"sections":[{"pos":0,"end":174,"kind":"prepend","data":"../sub-project/sub-project.js","texts":[{"pos":0,"end":174,"kind":"text"}]},{"pos":174,"end":322,"kind":"text"}],"hash":"-4809651809-/**\n * @template T, Name\n * @typedef {T & {[Symbol.species]: Name}} Nominal\n */\n/**\n * @typedef {Nominal} MyNominal\n */\nvar c = /** @type {*} */ (null);\nvar variable = {\n key: /** @type {MyNominal} */ ('value'),\n};\n/**\n * @return {keyof typeof variable}\n */\nfunction getVar() {\n return 'key';\n}\n"},"dts":{"sections":[{"pos":0,"end":191,"kind":"prepend","data":"../sub-project/sub-project.d.ts","texts":[{"pos":0,"end":191,"kind":"text"}]},{"pos":191,"end":339,"kind":"text"}],"hash":"-308335141-type Nominal = T & {\n [Symbol.species]: Name;\n};\n/**\n * @typedef {Nominal} MyNominal\n */\ndeclare const c: any;\ntype MyNominal = Nominal;\n/**\n * @return {keyof typeof variable}\n */\ndeclare function getVar(): keyof typeof variable;\ndeclare namespace variable {\n let key: MyNominal;\n}\n"}},"program":{"fileNames":["../../lib/lib.d.ts","../sub-project/sub-project.d.ts","./index.js"],"fileInfos":["-32082413277-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };\ninterface SymbolConstructor {\n readonly species: symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\n","-9550245654-type Nominal = T & {\n [Symbol.species]: Name;\n};\n/**\n * @typedef {Nominal} MyNominal\n */\ndeclare const c: any;\ntype MyNominal = Nominal;\n","2078909278-const variable = {\n key: /** @type {MyNominal} */('value'),\n};\n\n/**\n * @return {keyof typeof variable}\n */\nfunction getVar() {\n return 'key';\n}\n"],"root":[3],"options":{"composite":true,"declaration":true,"outFile":"./sub-project-2.js","rootDir":"..","skipLibCheck":true},"outSignature":"-308335141-type Nominal = T & {\n [Symbol.species]: Name;\n};\n/**\n * @typedef {Nominal} MyNominal\n */\ndeclare const c: any;\ntype MyNominal = Nominal;\n/**\n * @return {keyof typeof variable}\n */\ndeclare function getVar(): keyof typeof variable;\ndeclare namespace variable {\n let key: MyNominal;\n}\n","latestChangedDtsFile":"./sub-project-2.d.ts"},"version":"FakeTSVersion"} +{"bundle":{"commonSourceDirectory":"..","sourceFiles":["./index.js"],"js":{"sections":[{"pos":0,"end":174,"kind":"prepend","data":"../sub-project/sub-project.js","texts":[{"pos":0,"end":174,"kind":"text"}]},{"pos":174,"end":322,"kind":"text"}],"hash":"-4809651809-/**\n * @template T, Name\n * @typedef {T & {[Symbol.species]: Name}} Nominal\n */\n/**\n * @typedef {Nominal} MyNominal\n */\nvar c = /** @type {*} */ (null);\nvar variable = {\n key: /** @type {MyNominal} */ ('value'),\n};\n/**\n * @return {keyof typeof variable}\n */\nfunction getVar() {\n return 'key';\n}\n"},"dts":{"sections":[{"pos":0,"end":191,"kind":"prepend","data":"../sub-project/sub-project.d.ts","texts":[{"pos":0,"end":191,"kind":"text"}]},{"pos":191,"end":339,"kind":"text"}],"hash":"-308335141-type Nominal = T & {\n [Symbol.species]: Name;\n};\n/**\n * @typedef {Nominal} MyNominal\n */\ndeclare const c: any;\ntype MyNominal = Nominal;\n/**\n * @return {keyof typeof variable}\n */\ndeclare function getVar(): keyof typeof variable;\ndeclare namespace variable {\n let key: MyNominal;\n}\n"}},"program":{"fileNames":["../../lib/lib.d.ts","../sub-project/sub-project.d.ts","./index.js"],"fileInfos":["-32082413277-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };\ninterface SymbolConstructor {\n readonly species: symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\n","-9550245654-type Nominal = T & {\n [Symbol.species]: Name;\n};\n/**\n * @typedef {Nominal} MyNominal\n */\ndeclare const c: any;\ntype MyNominal = Nominal;\n","2078909278-const variable = {\n key: /** @type {MyNominal} */('value'),\n};\n\n/**\n * @return {keyof typeof variable}\n */\nfunction getVar() {\n return 'key';\n}\n"],"root":[3],"options":{"checkJs":true,"composite":true,"declaration":true,"outFile":"./sub-project-2.js","rootDir":"..","skipLibCheck":true},"outSignature":"-308335141-type Nominal = T & {\n [Symbol.species]: Name;\n};\n/**\n * @typedef {Nominal} MyNominal\n */\ndeclare const c: any;\ntype MyNominal = Nominal;\n/**\n * @return {keyof typeof variable}\n */\ndeclare function getVar(): keyof typeof variable;\ndeclare namespace variable {\n let key: MyNominal;\n}\n","latestChangedDtsFile":"./sub-project-2.d.ts"},"version":"FakeTSVersion"} //// [/src/sub-project-2/sub-project-2.tsbuildinfo.baseline.txt] ====================================================================== @@ -537,6 +539,7 @@ declare namespace variable { ] ], "options": { + "checkJs": true, "composite": true, "declaration": true, "outFile": "./sub-project-2.js", @@ -547,7 +550,7 @@ declare namespace variable { "latestChangedDtsFile": "./sub-project-2.d.ts" }, "version": "FakeTSVersion", - "size": 2889 + "size": 2904 } @@ -580,7 +583,7 @@ var c = /** @type {*} */ (undefined); //// [/src/sub-project/sub-project.tsbuildinfo] -{"bundle":{"commonSourceDirectory":"..","sourceFiles":["./index.js"],"js":{"sections":[{"pos":0,"end":80,"kind":"prepend","data":"../common/common.js","texts":[{"pos":0,"end":80,"kind":"text"}]},{"pos":80,"end":179,"kind":"text"}],"hash":"-8079555643-/**\n * @template T, Name\n * @typedef {T & {[Symbol.species]: Name}} Nominal\n */\n/**\n * @typedef {Nominal} MyNominal\n */\nvar c = /** @type {*} */ (undefined);\n"},"dts":{"sections":[{"pos":0,"end":61,"kind":"prepend","data":"../common/common.d.ts","texts":[{"pos":0,"end":61,"kind":"text"}]},{"pos":61,"end":191,"kind":"text"}],"hash":"-9550245654-type Nominal = T & {\n [Symbol.species]: Name;\n};\n/**\n * @typedef {Nominal} MyNominal\n */\ndeclare const c: any;\ntype MyNominal = Nominal;\n"}},"program":{"fileNames":["../../lib/lib.d.ts","../common/common.d.ts","./index.js"],"fileInfos":["-32082413277-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };\ninterface SymbolConstructor {\n readonly species: symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\n","-12106547178-type Nominal = T & {\n [Symbol.species]: Name;\n};\n","7546612770-/**\n * @typedef {Nominal} MyNominal\n */\nconst c = /** @type {*} */(undefined);\n"],"root":[3],"options":{"composite":true,"declaration":true,"outFile":"./sub-project.js","rootDir":"..","skipLibCheck":true},"outSignature":"-9550245654-type Nominal = T & {\n [Symbol.species]: Name;\n};\n/**\n * @typedef {Nominal} MyNominal\n */\ndeclare const c: any;\ntype MyNominal = Nominal;\n","latestChangedDtsFile":"./sub-project.d.ts"},"version":"FakeTSVersion"} +{"bundle":{"commonSourceDirectory":"..","sourceFiles":["./index.js"],"js":{"sections":[{"pos":0,"end":80,"kind":"prepend","data":"../common/common.js","texts":[{"pos":0,"end":80,"kind":"text"}]},{"pos":80,"end":179,"kind":"text"}],"hash":"-8079555643-/**\n * @template T, Name\n * @typedef {T & {[Symbol.species]: Name}} Nominal\n */\n/**\n * @typedef {Nominal} MyNominal\n */\nvar c = /** @type {*} */ (undefined);\n"},"dts":{"sections":[{"pos":0,"end":61,"kind":"prepend","data":"../common/common.d.ts","texts":[{"pos":0,"end":61,"kind":"text"}]},{"pos":61,"end":191,"kind":"text"}],"hash":"-9550245654-type Nominal = T & {\n [Symbol.species]: Name;\n};\n/**\n * @typedef {Nominal} MyNominal\n */\ndeclare const c: any;\ntype MyNominal = Nominal;\n"}},"program":{"fileNames":["../../lib/lib.d.ts","../common/common.d.ts","./index.js"],"fileInfos":["-32082413277-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };\ninterface SymbolConstructor {\n readonly species: symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\n","-12106547178-type Nominal = T & {\n [Symbol.species]: Name;\n};\n","7546612770-/**\n * @typedef {Nominal} MyNominal\n */\nconst c = /** @type {*} */(undefined);\n"],"root":[3],"options":{"checkJs":true,"composite":true,"declaration":true,"outFile":"./sub-project.js","rootDir":"..","skipLibCheck":true},"outSignature":"-9550245654-type Nominal = T & {\n [Symbol.species]: Name;\n};\n/**\n * @typedef {Nominal} MyNominal\n */\ndeclare const c: any;\ntype MyNominal = Nominal;\n","latestChangedDtsFile":"./sub-project.d.ts"},"version":"FakeTSVersion"} //// [/src/sub-project/sub-project.tsbuildinfo.baseline.txt] ====================================================================== @@ -694,6 +697,7 @@ type MyNominal = Nominal; ] ], "options": { + "checkJs": true, "composite": true, "declaration": true, "outFile": "./sub-project.js", @@ -704,7 +708,7 @@ type MyNominal = Nominal; "latestChangedDtsFile": "./sub-project.d.ts" }, "version": "FakeTSVersion", - "size": 2199 + "size": 2214 } //// [/src/sub-project-2/sub-project-2.js] @@ -728,7 +732,7 @@ function getVar() { //// [/src/sub-project-2/sub-project-2.tsbuildinfo] -{"bundle":{"commonSourceDirectory":"..","sourceFiles":["./index.js"],"js":{"sections":[{"pos":0,"end":179,"kind":"prepend","data":"../sub-project/sub-project.js","texts":[{"pos":0,"end":179,"kind":"text"}]},{"pos":179,"end":327,"kind":"text"}],"hash":"-26783073610-/**\n * @template T, Name\n * @typedef {T & {[Symbol.species]: Name}} Nominal\n */\n/**\n * @typedef {Nominal} MyNominal\n */\nvar c = /** @type {*} */ (undefined);\nvar variable = {\n key: /** @type {MyNominal} */ ('value'),\n};\n/**\n * @return {keyof typeof variable}\n */\nfunction getVar() {\n return 'key';\n}\n"},"dts":{"sections":[{"pos":0,"end":191,"kind":"prepend","data":"../sub-project/sub-project.d.ts","texts":[{"pos":0,"end":191,"kind":"text"}]},{"pos":191,"end":339,"kind":"text"}],"hash":"-308335141-type Nominal = T & {\n [Symbol.species]: Name;\n};\n/**\n * @typedef {Nominal} MyNominal\n */\ndeclare const c: any;\ntype MyNominal = Nominal;\n/**\n * @return {keyof typeof variable}\n */\ndeclare function getVar(): keyof typeof variable;\ndeclare namespace variable {\n let key: MyNominal;\n}\n"}},"program":{"fileNames":["../../lib/lib.d.ts","../sub-project/sub-project.d.ts","./index.js"],"fileInfos":["-32082413277-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };\ninterface SymbolConstructor {\n readonly species: symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\n","-9550245654-type Nominal = T & {\n [Symbol.species]: Name;\n};\n/**\n * @typedef {Nominal} MyNominal\n */\ndeclare const c: any;\ntype MyNominal = Nominal;\n","2078909278-const variable = {\n key: /** @type {MyNominal} */('value'),\n};\n\n/**\n * @return {keyof typeof variable}\n */\nfunction getVar() {\n return 'key';\n}\n"],"root":[3],"options":{"composite":true,"declaration":true,"outFile":"./sub-project-2.js","rootDir":"..","skipLibCheck":true},"outSignature":"-308335141-type Nominal = T & {\n [Symbol.species]: Name;\n};\n/**\n * @typedef {Nominal} MyNominal\n */\ndeclare const c: any;\ntype MyNominal = Nominal;\n/**\n * @return {keyof typeof variable}\n */\ndeclare function getVar(): keyof typeof variable;\ndeclare namespace variable {\n let key: MyNominal;\n}\n","latestChangedDtsFile":"./sub-project-2.d.ts"},"version":"FakeTSVersion"} +{"bundle":{"commonSourceDirectory":"..","sourceFiles":["./index.js"],"js":{"sections":[{"pos":0,"end":179,"kind":"prepend","data":"../sub-project/sub-project.js","texts":[{"pos":0,"end":179,"kind":"text"}]},{"pos":179,"end":327,"kind":"text"}],"hash":"-26783073610-/**\n * @template T, Name\n * @typedef {T & {[Symbol.species]: Name}} Nominal\n */\n/**\n * @typedef {Nominal} MyNominal\n */\nvar c = /** @type {*} */ (undefined);\nvar variable = {\n key: /** @type {MyNominal} */ ('value'),\n};\n/**\n * @return {keyof typeof variable}\n */\nfunction getVar() {\n return 'key';\n}\n"},"dts":{"sections":[{"pos":0,"end":191,"kind":"prepend","data":"../sub-project/sub-project.d.ts","texts":[{"pos":0,"end":191,"kind":"text"}]},{"pos":191,"end":339,"kind":"text"}],"hash":"-308335141-type Nominal = T & {\n [Symbol.species]: Name;\n};\n/**\n * @typedef {Nominal} MyNominal\n */\ndeclare const c: any;\ntype MyNominal = Nominal;\n/**\n * @return {keyof typeof variable}\n */\ndeclare function getVar(): keyof typeof variable;\ndeclare namespace variable {\n let key: MyNominal;\n}\n"}},"program":{"fileNames":["../../lib/lib.d.ts","../sub-project/sub-project.d.ts","./index.js"],"fileInfos":["-32082413277-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };\ninterface SymbolConstructor {\n readonly species: symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\n","-9550245654-type Nominal = T & {\n [Symbol.species]: Name;\n};\n/**\n * @typedef {Nominal} MyNominal\n */\ndeclare const c: any;\ntype MyNominal = Nominal;\n","2078909278-const variable = {\n key: /** @type {MyNominal} */('value'),\n};\n\n/**\n * @return {keyof typeof variable}\n */\nfunction getVar() {\n return 'key';\n}\n"],"root":[3],"options":{"checkJs":true,"composite":true,"declaration":true,"outFile":"./sub-project-2.js","rootDir":"..","skipLibCheck":true},"outSignature":"-308335141-type Nominal = T & {\n [Symbol.species]: Name;\n};\n/**\n * @typedef {Nominal} MyNominal\n */\ndeclare const c: any;\ntype MyNominal = Nominal;\n/**\n * @return {keyof typeof variable}\n */\ndeclare function getVar(): keyof typeof variable;\ndeclare namespace variable {\n let key: MyNominal;\n}\n","latestChangedDtsFile":"./sub-project-2.d.ts"},"version":"FakeTSVersion"} //// [/src/sub-project-2/sub-project-2.tsbuildinfo.baseline.txt] ====================================================================== @@ -858,6 +862,7 @@ declare namespace variable { ] ], "options": { + "checkJs": true, "composite": true, "declaration": true, "outFile": "./sub-project-2.js", @@ -868,6 +873,6 @@ declare namespace variable { "latestChangedDtsFile": "./sub-project-2.d.ts" }, "version": "FakeTSVersion", - "size": 2895 + "size": 2910 } diff --git a/tests/baselines/reference/tscWatch/programUpdates/updates-emit-on-jsx-option-change.js b/tests/baselines/reference/tscWatch/programUpdates/updates-emit-on-jsx-option-change.js index 647886b443209..804393abf0537 100644 --- a/tests/baselines/reference/tscWatch/programUpdates/updates-emit-on-jsx-option-change.js +++ b/tests/baselines/reference/tscWatch/programUpdates/updates-emit-on-jsx-option-change.js @@ -96,6 +96,8 @@ Program files:: /user/username/projects/myproject/index.tsx Semantic diagnostics in builder refreshed for:: +/a/lib/lib.d.ts +/user/username/projects/myproject/index.tsx No shapes updated in the builder:: diff --git a/tests/baselines/reference/tscWatch/programUpdates/when-changing-`checkJs`-of-config-file.js b/tests/baselines/reference/tscWatch/programUpdates/when-changing-`checkJs`-of-config-file.js index 0fad28c4e73e5..ca2598b3a46a1 100644 --- a/tests/baselines/reference/tscWatch/programUpdates/when-changing-`checkJs`-of-config-file.js +++ b/tests/baselines/reference/tscWatch/programUpdates/when-changing-`checkJs`-of-config-file.js @@ -135,9 +135,7 @@ Program files:: /user/username/projects/myproject/a.js /user/username/projects/myproject/b.ts -Semantic diagnostics in builder refreshed for:: -/user/username/projects/myproject/a.js -/user/username/projects/myproject/b.ts +No cached semantic diagnostics in the builder:: Shape signatures in builder refreshed for:: /user/username/projects/myproject/a.js (computed .d.ts) From e195a0a25a569ca915f91d04466c82cc70620ff7 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 5 May 2023 10:57:34 -0700 Subject: [PATCH 3/7] Drop some unused options --- src/compiler/commandLineParser.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/compiler/commandLineParser.ts b/src/compiler/commandLineParser.ts index b30d9c9cf3e77..ca9ef126641c2 100644 --- a/src/compiler/commandLineParser.ts +++ b/src/compiler/commandLineParser.ts @@ -643,7 +643,6 @@ const commandOptionsWithoutBuild: CommandLineOption[] = [ { name: "allowJs", type: "boolean", - affectsModuleResolution: true, showInSimplifiedHelpView: true, category: Diagnostics.JavaScript_Support, description: Diagnostics.Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJS_option_to_get_errors_from_these_files, @@ -653,7 +652,6 @@ const commandOptionsWithoutBuild: CommandLineOption[] = [ name: "checkJs", type: "boolean", affectsBuildInfo: true, - affectsModuleResolution: true, affectsSemanticDiagnostics: true, showInSimplifiedHelpView: true, category: Diagnostics.JavaScript_Support, From 79fc5015e93e45b9b3029ea575f4d64496c2dbaf Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Tue, 12 Sep 2023 13:07:26 -0700 Subject: [PATCH 4/7] checkJsValue --- src/compiler/commandLineParser.ts | 6 +- src/compiler/types.ts | 1 + src/compiler/utilities.ts | 4 +- .../unittests/tscWatch/programUpdates.ts | 26 +-- ...based-projects-and-emits-them-correctly.js | 10 +- ...ved-json-files-and-emits-them-correctly.js | 15 +- ...rojects-and-concatenates-them-correctly.js | 25 +-- ...n-no-files-are-emitted-with-incremental.js | 14 +- .../when-changing-checkJs-of-config-file.js | 170 ++++++++++++++++++ 9 files changed, 233 insertions(+), 38 deletions(-) create mode 100644 tests/baselines/reference/tscWatch/programUpdates/when-changing-checkJs-of-config-file.js diff --git a/src/compiler/commandLineParser.ts b/src/compiler/commandLineParser.ts index f2b8797dcbab8..eeb347eaf5df9 100644 --- a/src/compiler/commandLineParser.ts +++ b/src/compiler/commandLineParser.ts @@ -647,6 +647,8 @@ const commandOptionsWithoutBuild: CommandLineOption[] = [ { name: "allowJs", type: "boolean", + allowJsFlag: true, + affectsBuildInfo: true, showInSimplifiedHelpView: true, category: Diagnostics.JavaScript_Support, description: Diagnostics.Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJS_option_to_get_errors_from_these_files, @@ -655,9 +657,9 @@ const commandOptionsWithoutBuild: CommandLineOption[] = [ { name: "checkJs", type: "boolean", - affectsBuildInfo: true, - affectsSemanticDiagnostics: true, affectsModuleResolution: true, + affectsSemanticDiagnostics: true, + affectsBuildInfo: true, showInSimplifiedHelpView: true, category: Diagnostics.JavaScript_Support, description: Diagnostics.Enable_error_reporting_in_type_checked_JavaScript_files, diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 56b0009e53a9f..3bc7537601477 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -7349,6 +7349,7 @@ export interface CommandLineOptionBase { showInSimplifiedHelpView?: boolean; category?: DiagnosticMessage; strictFlag?: true; // true if the option is one of the flag under strict + allowJsFlag?: true; affectsSourceFile?: true; // true if we should recreate SourceFiles after this option changes affectsModuleResolution?: true; // currently same effect as `affectsSourceFile` affectsBindDiagnostics?: true; // true if this affects binding (currently same effect as `affectsSourceFile`) diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 4d63c9124a7ac..209d9fd49d8e1 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -8784,7 +8784,9 @@ export function compilerOptionsAffectDeclarationPath(newOptions: CompilerOptions /** @internal */ export function getCompilerOptionValue(options: CompilerOptions, option: CommandLineOption): unknown { - return option.strictFlag ? getStrictOptionValue(options, option.name as StrictOptionName) : options[option.name]; + return option.strictFlag ? getStrictOptionValue(options, option.name as StrictOptionName) : + option.allowJsFlag ? getAllowJSCompilerOption(options) : + options[option.name]; } /** @internal */ diff --git a/src/testRunner/unittests/tscWatch/programUpdates.ts b/src/testRunner/unittests/tscWatch/programUpdates.ts index 4dd07cbc6d9d3..b1fe56c06b324 100644 --- a/src/testRunner/unittests/tscWatch/programUpdates.ts +++ b/src/testRunner/unittests/tscWatch/programUpdates.ts @@ -2141,23 +2141,23 @@ import { x } from "../b";`, verifyTscWatch({ scenario, - subScenario: "when changing `checkJs` of config file", + subScenario: "when changing checkJs of config file", commandLineArgs: ["-w", "-p", ".", "--extendedDiagnostics"], sys: () => { const module1: File = { path: `/user/username/projects/myproject/a.js`, - content: `export const aNumber: number = "string"` + content: `export const aNumber: number = "string"`, }; const module2: File = { path: `/user/username/projects/myproject/b.ts`, - content: `import { aNumber } from "./a.js";` + content: `import { aNumber } from "./a.js";`, }; const config: File = { path: `/user/username/projects/myproject/tsconfig.json`, content: JSON.stringify({ compilerOptions: { - checkJs: false - } + checkJs: false, + }, }), }; return createWatchedSystem([module1, module2, config, libFile], { currentDirectory: "/user/username/projects/myproject" }); @@ -2165,13 +2165,17 @@ import { x } from "../b";`, edits: [ { caption: "Change checkJs to true", - edit: sys => sys.writeFile(`/user/username/projects/myproject/tsconfig.json`, JSON.stringify({ - compilerOptions: { - checkJs: true - } - })), + edit: sys => + sys.writeFile( + `/user/username/projects/myproject/tsconfig.json`, + JSON.stringify({ + compilerOptions: { + checkJs: true, + }, + }), + ), timeouts: sys => sys.runQueuedTimeoutCallbacks(), }, - ] + ], }); }); diff --git a/tests/baselines/reference/tsbuild/javascriptProjectEmit/loads-js-based-projects-and-emits-them-correctly.js b/tests/baselines/reference/tsbuild/javascriptProjectEmit/loads-js-based-projects-and-emits-them-correctly.js index f4a3548418df0..8475891dde8d8 100644 --- a/tests/baselines/reference/tsbuild/javascriptProjectEmit/loads-js-based-projects-and-emits-them-correctly.js +++ b/tests/baselines/reference/tsbuild/javascriptProjectEmit/loads-js-based-projects-and-emits-them-correctly.js @@ -142,7 +142,7 @@ module.exports = {}; //// [/lib/common/tsconfig.tsbuildinfo] -{"program":{"fileNames":["../lib.d.ts","../../src/common/nominal.js"],"fileInfos":[{"version":"-32082413277-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };\ninterface SymbolConstructor {\n readonly species: symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\n","affectsGlobalScope":true},{"version":"-9003723607-/**\n * @template T, Name\n * @typedef {T & {[Symbol.species]: Name}} Nominal\n */\nmodule.exports = {};\n","signature":"-13020584488-export type Nominal = T & {\n [Symbol.species]: Name;\n};\n"}],"root":[2],"options":{"checkJs":true,"composite":true,"declaration":true,"outDir":"..","rootDir":"../../src","skipLibCheck":true},"referencedMap":[],"exportedModulesMap":[],"semanticDiagnosticsPerFile":[1,2],"latestChangedDtsFile":"./nominal.d.ts"},"version":"FakeTSVersion"} +{"program":{"fileNames":["../lib.d.ts","../../src/common/nominal.js"],"fileInfos":[{"version":"-32082413277-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };\ninterface SymbolConstructor {\n readonly species: symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\n","affectsGlobalScope":true},{"version":"-9003723607-/**\n * @template T, Name\n * @typedef {T & {[Symbol.species]: Name}} Nominal\n */\nmodule.exports = {};\n","signature":"-13020584488-export type Nominal = T & {\n [Symbol.species]: Name;\n};\n"}],"root":[2],"options":{"allowJs":true,"checkJs":true,"composite":true,"declaration":true,"outDir":"..","rootDir":"../../src","skipLibCheck":true},"referencedMap":[],"exportedModulesMap":[],"semanticDiagnosticsPerFile":[1,2],"latestChangedDtsFile":"./nominal.d.ts"},"version":"FakeTSVersion"} //// [/lib/common/tsconfig.tsbuildinfo.readable.baseline.txt] { @@ -177,6 +177,7 @@ module.exports = {}; ] ], "options": { + "allowJs": true, "checkJs": true, "composite": true, "declaration": true, @@ -193,11 +194,11 @@ module.exports = {}; "latestChangedDtsFile": "./nominal.d.ts" }, "version": "FakeTSVersion", - "size": 1281 + "size": 1296 } //// [/lib/sub-project/tsconfig.tsbuildinfo] -{"program":{"fileNames":["../lib.d.ts","../common/nominal.d.ts","../../src/sub-project/index.js"],"fileInfos":[{"version":"-32082413277-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };\ninterface SymbolConstructor {\n readonly species: symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\n","affectsGlobalScope":true},"-13020584488-export type Nominal = T & {\n [Symbol.species]: Name;\n};\n","-23375763082-import { Nominal } from '../common/nominal';\n\n/**\n * @typedef {Nominal} MyNominal\n */\n"],"root":[3],"options":{"checkJs":true,"composite":true,"declaration":true,"outDir":"..","rootDir":"../../src","skipLibCheck":true},"fileIdsList":[[2]],"referencedMap":[[3,1]],"exportedModulesMap":[[3,1]],"semanticDiagnosticsPerFile":[2,1,[3,[{"file":"../../src/sub-project/index.js","start":9,"length":7,"messageText":"'Nominal' is a type and cannot be imported in JavaScript files. Use 'import(\"../common/nominal\").Nominal' in a JSDoc type annotation.","category":1,"code":18042}]]],"affectedFilesPendingEmit":[3],"emitSignatures":[3]},"version":"FakeTSVersion"} +{"program":{"fileNames":["../lib.d.ts","../common/nominal.d.ts","../../src/sub-project/index.js"],"fileInfos":[{"version":"-32082413277-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };\ninterface SymbolConstructor {\n readonly species: symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\n","affectsGlobalScope":true},"-13020584488-export type Nominal = T & {\n [Symbol.species]: Name;\n};\n","-23375763082-import { Nominal } from '../common/nominal';\n\n/**\n * @typedef {Nominal} MyNominal\n */\n"],"root":[3],"options":{"allowJs":true,"checkJs":true,"composite":true,"declaration":true,"outDir":"..","rootDir":"../../src","skipLibCheck":true},"fileIdsList":[[2]],"referencedMap":[[3,1]],"exportedModulesMap":[[3,1]],"semanticDiagnosticsPerFile":[2,1,[3,[{"file":"../../src/sub-project/index.js","start":9,"length":7,"messageText":"'Nominal' is a type and cannot be imported in JavaScript files. Use 'import(\"../common/nominal\").Nominal' in a JSDoc type annotation.","category":1,"code":18042}]]],"affectedFilesPendingEmit":[3],"emitSignatures":[3]},"version":"FakeTSVersion"} //// [/lib/sub-project/tsconfig.tsbuildinfo.readable.baseline.txt] { @@ -238,6 +239,7 @@ module.exports = {}; ] ], "options": { + "allowJs": true, "checkJs": true, "composite": true, "declaration": true, @@ -283,6 +285,6 @@ module.exports = {}; ] }, "version": "FakeTSVersion", - "size": 1581 + "size": 1596 } diff --git a/tests/baselines/reference/tsbuild/javascriptProjectEmit/loads-js-based-projects-with-non-moved-json-files-and-emits-them-correctly.js b/tests/baselines/reference/tsbuild/javascriptProjectEmit/loads-js-based-projects-with-non-moved-json-files-and-emits-them-correctly.js index a17dd129a7a20..37b4cbf53c862 100644 --- a/tests/baselines/reference/tsbuild/javascriptProjectEmit/loads-js-based-projects-with-non-moved-json-files-and-emits-them-correctly.js +++ b/tests/baselines/reference/tsbuild/javascriptProjectEmit/loads-js-based-projects-with-non-moved-json-files-and-emits-them-correctly.js @@ -137,7 +137,7 @@ exports.m = common_1.default; //// [/out/sub-project/tsconfig.tsbuildinfo] -{"program":{"fileNames":["../../lib/lib.d.ts","../../src/common/obj.json","../../src/common/index.d.ts","../../src/sub-project/index.js"],"fileInfos":[{"version":"-32082413277-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };\ninterface SymbolConstructor {\n readonly species: symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\n","affectsGlobalScope":true},"2151907832-{\n \"val\": 42\n}","-5032674136-import x = require(\"./obj.json\");\nexport = x;\n",{"version":"-14684157955-import mod from '../common';\n\nexport const m = mod;\n","signature":"-12566182521-export const m: {\n val: number;\n};\n"}],"root":[4],"options":{"checkJs":true,"composite":true,"declaration":true,"esModuleInterop":true,"outDir":"..","rootDir":"../../src","skipLibCheck":true},"fileIdsList":[[2],[3]],"referencedMap":[[3,1],[4,2]],"exportedModulesMap":[[3,1]],"semanticDiagnosticsPerFile":[1,3,2,4],"latestChangedDtsFile":"./index.d.ts"},"version":"FakeTSVersion"} +{"program":{"fileNames":["../../lib/lib.d.ts","../../src/common/obj.json","../../src/common/index.d.ts","../../src/sub-project/index.js"],"fileInfos":[{"version":"-32082413277-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };\ninterface SymbolConstructor {\n readonly species: symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\n","affectsGlobalScope":true},"2151907832-{\n \"val\": 42\n}","-5032674136-import x = require(\"./obj.json\");\nexport = x;\n",{"version":"-14684157955-import mod from '../common';\n\nexport const m = mod;\n","signature":"-12566182521-export const m: {\n val: number;\n};\n"}],"root":[4],"options":{"allowJs":true,"checkJs":true,"composite":true,"declaration":true,"esModuleInterop":true,"outDir":"..","rootDir":"../../src","skipLibCheck":true},"fileIdsList":[[2],[3]],"referencedMap":[[3,1],[4,2]],"exportedModulesMap":[[3,1]],"semanticDiagnosticsPerFile":[1,3,2,4],"latestChangedDtsFile":"./index.d.ts"},"version":"FakeTSVersion"} //// [/out/sub-project/tsconfig.tsbuildinfo.readable.baseline.txt] { @@ -190,6 +190,7 @@ exports.m = common_1.default; ] ], "options": { + "allowJs": true, "checkJs": true, "composite": true, "declaration": true, @@ -220,7 +221,7 @@ exports.m = common_1.default; "latestChangedDtsFile": "./index.d.ts" }, "version": "FakeTSVersion", - "size": 1434 + "size": 1449 } //// [/out/sub-project-2/index.d.ts] @@ -246,7 +247,7 @@ exports.getVar = getVar; //// [/out/sub-project-2/tsconfig.tsbuildinfo] -{"program":{"fileNames":["../../lib/lib.d.ts","../sub-project/index.d.ts","../../src/sub-project-2/index.js"],"fileInfos":[{"version":"-32082413277-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };\ninterface SymbolConstructor {\n readonly species: symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\n","affectsGlobalScope":true},"-12566182521-export const m: {\n val: number;\n};\n",{"version":"13545386800-import { m } from '../sub-project/index';\n\nconst variable = {\n key: m,\n};\n\nexport function getVar() {\n return variable;\n}\n","signature":"2403991005-export function getVar(): {\n key: {\n val: number;\n };\n};\n"}],"root":[3],"options":{"checkJs":true,"composite":true,"declaration":true,"esModuleInterop":true,"outDir":"..","rootDir":"../../src","skipLibCheck":true},"fileIdsList":[[2]],"referencedMap":[[3,1]],"exportedModulesMap":[],"semanticDiagnosticsPerFile":[1,2,3],"latestChangedDtsFile":"./index.d.ts"},"version":"FakeTSVersion"} +{"program":{"fileNames":["../../lib/lib.d.ts","../sub-project/index.d.ts","../../src/sub-project-2/index.js"],"fileInfos":[{"version":"-32082413277-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };\ninterface SymbolConstructor {\n readonly species: symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\n","affectsGlobalScope":true},"-12566182521-export const m: {\n val: number;\n};\n",{"version":"13545386800-import { m } from '../sub-project/index';\n\nconst variable = {\n key: m,\n};\n\nexport function getVar() {\n return variable;\n}\n","signature":"2403991005-export function getVar(): {\n key: {\n val: number;\n };\n};\n"}],"root":[3],"options":{"allowJs":true,"checkJs":true,"composite":true,"declaration":true,"esModuleInterop":true,"outDir":"..","rootDir":"../../src","skipLibCheck":true},"fileIdsList":[[2]],"referencedMap":[[3,1]],"exportedModulesMap":[],"semanticDiagnosticsPerFile":[1,2,3],"latestChangedDtsFile":"./index.d.ts"},"version":"FakeTSVersion"} //// [/out/sub-project-2/tsconfig.tsbuildinfo.readable.baseline.txt] { @@ -291,6 +292,7 @@ exports.getVar = getVar; ] ], "options": { + "allowJs": true, "checkJs": true, "composite": true, "declaration": true, @@ -313,7 +315,7 @@ exports.getVar = getVar; "latestChangedDtsFile": "./index.d.ts" }, "version": "FakeTSVersion", - "size": 1459 + "size": 1474 } //// [/src/common/index.d.ts] @@ -328,7 +330,7 @@ module.exports = x; //// [/src/common/tsconfig.tsbuildinfo] -{"program":{"fileNames":["../../lib/lib.d.ts","./obj.json","./index.ts"],"fileInfos":[{"version":"-32082413277-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };\ninterface SymbolConstructor {\n readonly species: symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\n","affectsGlobalScope":true},"2151907832-{\n \"val\": 42\n}","-5032674136-import x = require(\"./obj.json\");\nexport = x;\n"],"root":[2,3],"options":{"checkJs":true,"composite":true,"declaration":true,"esModuleInterop":true,"outDir":"../..","rootDir":"..","skipLibCheck":true},"fileIdsList":[[2]],"referencedMap":[[3,1]],"exportedModulesMap":[[3,1]],"semanticDiagnosticsPerFile":[1,3,2],"latestChangedDtsFile":"./index.d.ts"},"version":"FakeTSVersion"} +{"program":{"fileNames":["../../lib/lib.d.ts","./obj.json","./index.ts"],"fileInfos":[{"version":"-32082413277-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };\ninterface SymbolConstructor {\n readonly species: symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\n","affectsGlobalScope":true},"2151907832-{\n \"val\": 42\n}","-5032674136-import x = require(\"./obj.json\");\nexport = x;\n"],"root":[2,3],"options":{"allowJs":true,"checkJs":true,"composite":true,"declaration":true,"esModuleInterop":true,"outDir":"../..","rootDir":"..","skipLibCheck":true},"fileIdsList":[[2]],"referencedMap":[[3,1]],"exportedModulesMap":[[3,1]],"semanticDiagnosticsPerFile":[1,3,2],"latestChangedDtsFile":"./index.d.ts"},"version":"FakeTSVersion"} //// [/src/common/tsconfig.tsbuildinfo.readable.baseline.txt] { @@ -373,6 +375,7 @@ module.exports = x; ] ], "options": { + "allowJs": true, "checkJs": true, "composite": true, "declaration": true, @@ -399,6 +402,6 @@ module.exports = x; "latestChangedDtsFile": "./index.d.ts" }, "version": "FakeTSVersion", - "size": 1203 + "size": 1218 } diff --git a/tests/baselines/reference/tsbuild/javascriptProjectEmit/modifies-outfile-js-projects-and-concatenates-them-correctly.js b/tests/baselines/reference/tsbuild/javascriptProjectEmit/modifies-outfile-js-projects-and-concatenates-them-correctly.js index bbb375c9a58d6..cf5493e1d4669 100644 --- a/tests/baselines/reference/tsbuild/javascriptProjectEmit/modifies-outfile-js-projects-and-concatenates-them-correctly.js +++ b/tests/baselines/reference/tsbuild/javascriptProjectEmit/modifies-outfile-js-projects-and-concatenates-them-correctly.js @@ -138,7 +138,7 @@ type Nominal = T & { //// [/src/common/common.tsbuildinfo] -{"bundle":{"commonSourceDirectory":"..","sourceFiles":["./nominal.js"],"js":{"sections":[{"pos":0,"end":80,"kind":"text"}],"hash":"-1932521178-/**\n * @template T, Name\n * @typedef {T & {[Symbol.species]: Name}} Nominal\n */\n"},"dts":{"sections":[{"pos":0,"end":61,"kind":"text"}],"hash":"-12106547178-type Nominal = T & {\n [Symbol.species]: Name;\n};\n"}},"program":{"fileNames":["../../lib/lib.d.ts","./nominal.js"],"fileInfos":["-32082413277-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };\ninterface SymbolConstructor {\n readonly species: symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\n","-1932521178-/**\n * @template T, Name\n * @typedef {T & {[Symbol.species]: Name}} Nominal\n */\n"],"root":[2],"options":{"checkJs":true,"composite":true,"declaration":true,"outFile":"./common.js","rootDir":"..","skipLibCheck":true},"outSignature":"-12106547178-type Nominal = T & {\n [Symbol.species]: Name;\n};\n","latestChangedDtsFile":"./common.d.ts"},"version":"FakeTSVersion"} +{"bundle":{"commonSourceDirectory":"..","sourceFiles":["./nominal.js"],"js":{"sections":[{"pos":0,"end":80,"kind":"text"}],"hash":"-1932521178-/**\n * @template T, Name\n * @typedef {T & {[Symbol.species]: Name}} Nominal\n */\n"},"dts":{"sections":[{"pos":0,"end":61,"kind":"text"}],"hash":"-12106547178-type Nominal = T & {\n [Symbol.species]: Name;\n};\n"}},"program":{"fileNames":["../../lib/lib.d.ts","./nominal.js"],"fileInfos":["-32082413277-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };\ninterface SymbolConstructor {\n readonly species: symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\n","-1932521178-/**\n * @template T, Name\n * @typedef {T & {[Symbol.species]: Name}} Nominal\n */\n"],"root":[2],"options":{"allowJs":true,"checkJs":true,"composite":true,"declaration":true,"outFile":"./common.js","rootDir":"..","skipLibCheck":true},"outSignature":"-12106547178-type Nominal = T & {\n [Symbol.species]: Name;\n};\n","latestChangedDtsFile":"./common.d.ts"},"version":"FakeTSVersion"} //// [/src/common/common.tsbuildinfo.baseline.txt] ====================================================================== @@ -205,6 +205,7 @@ type Nominal = T & { ] ], "options": { + "allowJs": true, "checkJs": true, "composite": true, "declaration": true, @@ -216,7 +217,7 @@ type Nominal = T & { "latestChangedDtsFile": "./common.d.ts" }, "version": "FakeTSVersion", - "size": 1492 + "size": 1507 } //// [/src/sub-project/sub-project.d.ts] @@ -242,7 +243,7 @@ var c = /** @type {*} */ (null); //// [/src/sub-project/sub-project.tsbuildinfo] -{"bundle":{"commonSourceDirectory":"..","sourceFiles":["./index.js"],"js":{"sections":[{"pos":0,"end":80,"kind":"prepend","data":"../common/common.js","texts":[{"pos":0,"end":80,"kind":"text"}]},{"pos":80,"end":174,"kind":"text"}],"hash":"-7871970258-/**\n * @template T, Name\n * @typedef {T & {[Symbol.species]: Name}} Nominal\n */\n/**\n * @typedef {Nominal} MyNominal\n */\nvar c = /** @type {*} */ (null);\n"},"dts":{"sections":[{"pos":0,"end":61,"kind":"prepend","data":"../common/common.d.ts","texts":[{"pos":0,"end":61,"kind":"text"}]},{"pos":61,"end":191,"kind":"text"}],"hash":"-9550245654-type Nominal = T & {\n [Symbol.species]: Name;\n};\n/**\n * @typedef {Nominal} MyNominal\n */\ndeclare const c: any;\ntype MyNominal = Nominal;\n"}},"program":{"fileNames":["../../lib/lib.d.ts","../common/common.d.ts","./index.js"],"fileInfos":["-32082413277-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };\ninterface SymbolConstructor {\n readonly species: symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\n","-12106547178-type Nominal = T & {\n [Symbol.species]: Name;\n};\n","2691219051-/**\n * @typedef {Nominal} MyNominal\n */\nconst c = /** @type {*} */(null);\n"],"root":[3],"options":{"checkJs":true,"composite":true,"declaration":true,"outFile":"./sub-project.js","rootDir":"..","skipLibCheck":true},"outSignature":"-9550245654-type Nominal = T & {\n [Symbol.species]: Name;\n};\n/**\n * @typedef {Nominal} MyNominal\n */\ndeclare const c: any;\ntype MyNominal = Nominal;\n","latestChangedDtsFile":"./sub-project.d.ts"},"version":"FakeTSVersion"} +{"bundle":{"commonSourceDirectory":"..","sourceFiles":["./index.js"],"js":{"sections":[{"pos":0,"end":80,"kind":"prepend","data":"../common/common.js","texts":[{"pos":0,"end":80,"kind":"text"}]},{"pos":80,"end":174,"kind":"text"}],"hash":"-7871970258-/**\n * @template T, Name\n * @typedef {T & {[Symbol.species]: Name}} Nominal\n */\n/**\n * @typedef {Nominal} MyNominal\n */\nvar c = /** @type {*} */ (null);\n"},"dts":{"sections":[{"pos":0,"end":61,"kind":"prepend","data":"../common/common.d.ts","texts":[{"pos":0,"end":61,"kind":"text"}]},{"pos":61,"end":191,"kind":"text"}],"hash":"-9550245654-type Nominal = T & {\n [Symbol.species]: Name;\n};\n/**\n * @typedef {Nominal} MyNominal\n */\ndeclare const c: any;\ntype MyNominal = Nominal;\n"}},"program":{"fileNames":["../../lib/lib.d.ts","../common/common.d.ts","./index.js"],"fileInfos":["-32082413277-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };\ninterface SymbolConstructor {\n readonly species: symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\n","-12106547178-type Nominal = T & {\n [Symbol.species]: Name;\n};\n","2691219051-/**\n * @typedef {Nominal} MyNominal\n */\nconst c = /** @type {*} */(null);\n"],"root":[3],"options":{"allowJs":true,"checkJs":true,"composite":true,"declaration":true,"outFile":"./sub-project.js","rootDir":"..","skipLibCheck":true},"outSignature":"-9550245654-type Nominal = T & {\n [Symbol.species]: Name;\n};\n/**\n * @typedef {Nominal} MyNominal\n */\ndeclare const c: any;\ntype MyNominal = Nominal;\n","latestChangedDtsFile":"./sub-project.d.ts"},"version":"FakeTSVersion"} //// [/src/sub-project/sub-project.tsbuildinfo.baseline.txt] ====================================================================== @@ -356,6 +357,7 @@ type MyNominal = Nominal; ] ], "options": { + "allowJs": true, "checkJs": true, "composite": true, "declaration": true, @@ -367,7 +369,7 @@ type MyNominal = Nominal; "latestChangedDtsFile": "./sub-project.d.ts" }, "version": "FakeTSVersion", - "size": 2204 + "size": 2219 } //// [/src/sub-project-2/sub-project-2.d.ts] @@ -409,7 +411,7 @@ function getVar() { //// [/src/sub-project-2/sub-project-2.tsbuildinfo] -{"bundle":{"commonSourceDirectory":"..","sourceFiles":["./index.js"],"js":{"sections":[{"pos":0,"end":174,"kind":"prepend","data":"../sub-project/sub-project.js","texts":[{"pos":0,"end":174,"kind":"text"}]},{"pos":174,"end":322,"kind":"text"}],"hash":"-4809651809-/**\n * @template T, Name\n * @typedef {T & {[Symbol.species]: Name}} Nominal\n */\n/**\n * @typedef {Nominal} MyNominal\n */\nvar c = /** @type {*} */ (null);\nvar variable = {\n key: /** @type {MyNominal} */ ('value'),\n};\n/**\n * @return {keyof typeof variable}\n */\nfunction getVar() {\n return 'key';\n}\n"},"dts":{"sections":[{"pos":0,"end":191,"kind":"prepend","data":"../sub-project/sub-project.d.ts","texts":[{"pos":0,"end":191,"kind":"text"}]},{"pos":191,"end":339,"kind":"text"}],"hash":"-308335141-type Nominal = T & {\n [Symbol.species]: Name;\n};\n/**\n * @typedef {Nominal} MyNominal\n */\ndeclare const c: any;\ntype MyNominal = Nominal;\n/**\n * @return {keyof typeof variable}\n */\ndeclare function getVar(): keyof typeof variable;\ndeclare namespace variable {\n let key: MyNominal;\n}\n"}},"program":{"fileNames":["../../lib/lib.d.ts","../sub-project/sub-project.d.ts","./index.js"],"fileInfos":["-32082413277-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };\ninterface SymbolConstructor {\n readonly species: symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\n","-9550245654-type Nominal = T & {\n [Symbol.species]: Name;\n};\n/**\n * @typedef {Nominal} MyNominal\n */\ndeclare const c: any;\ntype MyNominal = Nominal;\n","2078909278-const variable = {\n key: /** @type {MyNominal} */('value'),\n};\n\n/**\n * @return {keyof typeof variable}\n */\nfunction getVar() {\n return 'key';\n}\n"],"root":[3],"options":{"checkJs":true,"composite":true,"declaration":true,"outFile":"./sub-project-2.js","rootDir":"..","skipLibCheck":true},"outSignature":"-308335141-type Nominal = T & {\n [Symbol.species]: Name;\n};\n/**\n * @typedef {Nominal} MyNominal\n */\ndeclare const c: any;\ntype MyNominal = Nominal;\n/**\n * @return {keyof typeof variable}\n */\ndeclare function getVar(): keyof typeof variable;\ndeclare namespace variable {\n let key: MyNominal;\n}\n","latestChangedDtsFile":"./sub-project-2.d.ts"},"version":"FakeTSVersion"} +{"bundle":{"commonSourceDirectory":"..","sourceFiles":["./index.js"],"js":{"sections":[{"pos":0,"end":174,"kind":"prepend","data":"../sub-project/sub-project.js","texts":[{"pos":0,"end":174,"kind":"text"}]},{"pos":174,"end":322,"kind":"text"}],"hash":"-4809651809-/**\n * @template T, Name\n * @typedef {T & {[Symbol.species]: Name}} Nominal\n */\n/**\n * @typedef {Nominal} MyNominal\n */\nvar c = /** @type {*} */ (null);\nvar variable = {\n key: /** @type {MyNominal} */ ('value'),\n};\n/**\n * @return {keyof typeof variable}\n */\nfunction getVar() {\n return 'key';\n}\n"},"dts":{"sections":[{"pos":0,"end":191,"kind":"prepend","data":"../sub-project/sub-project.d.ts","texts":[{"pos":0,"end":191,"kind":"text"}]},{"pos":191,"end":339,"kind":"text"}],"hash":"-308335141-type Nominal = T & {\n [Symbol.species]: Name;\n};\n/**\n * @typedef {Nominal} MyNominal\n */\ndeclare const c: any;\ntype MyNominal = Nominal;\n/**\n * @return {keyof typeof variable}\n */\ndeclare function getVar(): keyof typeof variable;\ndeclare namespace variable {\n let key: MyNominal;\n}\n"}},"program":{"fileNames":["../../lib/lib.d.ts","../sub-project/sub-project.d.ts","./index.js"],"fileInfos":["-32082413277-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };\ninterface SymbolConstructor {\n readonly species: symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\n","-9550245654-type Nominal = T & {\n [Symbol.species]: Name;\n};\n/**\n * @typedef {Nominal} MyNominal\n */\ndeclare const c: any;\ntype MyNominal = Nominal;\n","2078909278-const variable = {\n key: /** @type {MyNominal} */('value'),\n};\n\n/**\n * @return {keyof typeof variable}\n */\nfunction getVar() {\n return 'key';\n}\n"],"root":[3],"options":{"allowJs":true,"checkJs":true,"composite":true,"declaration":true,"outFile":"./sub-project-2.js","rootDir":"..","skipLibCheck":true},"outSignature":"-308335141-type Nominal = T & {\n [Symbol.species]: Name;\n};\n/**\n * @typedef {Nominal} MyNominal\n */\ndeclare const c: any;\ntype MyNominal = Nominal;\n/**\n * @return {keyof typeof variable}\n */\ndeclare function getVar(): keyof typeof variable;\ndeclare namespace variable {\n let key: MyNominal;\n}\n","latestChangedDtsFile":"./sub-project-2.d.ts"},"version":"FakeTSVersion"} //// [/src/sub-project-2/sub-project-2.tsbuildinfo.baseline.txt] ====================================================================== @@ -539,6 +541,7 @@ declare namespace variable { ] ], "options": { + "allowJs": true, "checkJs": true, "composite": true, "declaration": true, @@ -550,7 +553,7 @@ declare namespace variable { "latestChangedDtsFile": "./sub-project-2.d.ts" }, "version": "FakeTSVersion", - "size": 2904 + "size": 2919 } @@ -583,7 +586,7 @@ var c = /** @type {*} */ (undefined); //// [/src/sub-project/sub-project.tsbuildinfo] -{"bundle":{"commonSourceDirectory":"..","sourceFiles":["./index.js"],"js":{"sections":[{"pos":0,"end":80,"kind":"prepend","data":"../common/common.js","texts":[{"pos":0,"end":80,"kind":"text"}]},{"pos":80,"end":179,"kind":"text"}],"hash":"-8079555643-/**\n * @template T, Name\n * @typedef {T & {[Symbol.species]: Name}} Nominal\n */\n/**\n * @typedef {Nominal} MyNominal\n */\nvar c = /** @type {*} */ (undefined);\n"},"dts":{"sections":[{"pos":0,"end":61,"kind":"prepend","data":"../common/common.d.ts","texts":[{"pos":0,"end":61,"kind":"text"}]},{"pos":61,"end":191,"kind":"text"}],"hash":"-9550245654-type Nominal = T & {\n [Symbol.species]: Name;\n};\n/**\n * @typedef {Nominal} MyNominal\n */\ndeclare const c: any;\ntype MyNominal = Nominal;\n"}},"program":{"fileNames":["../../lib/lib.d.ts","../common/common.d.ts","./index.js"],"fileInfos":["-32082413277-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };\ninterface SymbolConstructor {\n readonly species: symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\n","-12106547178-type Nominal = T & {\n [Symbol.species]: Name;\n};\n","7546612770-/**\n * @typedef {Nominal} MyNominal\n */\nconst c = /** @type {*} */(undefined);\n"],"root":[3],"options":{"checkJs":true,"composite":true,"declaration":true,"outFile":"./sub-project.js","rootDir":"..","skipLibCheck":true},"outSignature":"-9550245654-type Nominal = T & {\n [Symbol.species]: Name;\n};\n/**\n * @typedef {Nominal} MyNominal\n */\ndeclare const c: any;\ntype MyNominal = Nominal;\n","latestChangedDtsFile":"./sub-project.d.ts"},"version":"FakeTSVersion"} +{"bundle":{"commonSourceDirectory":"..","sourceFiles":["./index.js"],"js":{"sections":[{"pos":0,"end":80,"kind":"prepend","data":"../common/common.js","texts":[{"pos":0,"end":80,"kind":"text"}]},{"pos":80,"end":179,"kind":"text"}],"hash":"-8079555643-/**\n * @template T, Name\n * @typedef {T & {[Symbol.species]: Name}} Nominal\n */\n/**\n * @typedef {Nominal} MyNominal\n */\nvar c = /** @type {*} */ (undefined);\n"},"dts":{"sections":[{"pos":0,"end":61,"kind":"prepend","data":"../common/common.d.ts","texts":[{"pos":0,"end":61,"kind":"text"}]},{"pos":61,"end":191,"kind":"text"}],"hash":"-9550245654-type Nominal = T & {\n [Symbol.species]: Name;\n};\n/**\n * @typedef {Nominal} MyNominal\n */\ndeclare const c: any;\ntype MyNominal = Nominal;\n"}},"program":{"fileNames":["../../lib/lib.d.ts","../common/common.d.ts","./index.js"],"fileInfos":["-32082413277-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };\ninterface SymbolConstructor {\n readonly species: symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\n","-12106547178-type Nominal = T & {\n [Symbol.species]: Name;\n};\n","7546612770-/**\n * @typedef {Nominal} MyNominal\n */\nconst c = /** @type {*} */(undefined);\n"],"root":[3],"options":{"allowJs":true,"checkJs":true,"composite":true,"declaration":true,"outFile":"./sub-project.js","rootDir":"..","skipLibCheck":true},"outSignature":"-9550245654-type Nominal = T & {\n [Symbol.species]: Name;\n};\n/**\n * @typedef {Nominal} MyNominal\n */\ndeclare const c: any;\ntype MyNominal = Nominal;\n","latestChangedDtsFile":"./sub-project.d.ts"},"version":"FakeTSVersion"} //// [/src/sub-project/sub-project.tsbuildinfo.baseline.txt] ====================================================================== @@ -697,6 +700,7 @@ type MyNominal = Nominal; ] ], "options": { + "allowJs": true, "checkJs": true, "composite": true, "declaration": true, @@ -708,7 +712,7 @@ type MyNominal = Nominal; "latestChangedDtsFile": "./sub-project.d.ts" }, "version": "FakeTSVersion", - "size": 2214 + "size": 2229 } //// [/src/sub-project-2/sub-project-2.js] @@ -732,7 +736,7 @@ function getVar() { //// [/src/sub-project-2/sub-project-2.tsbuildinfo] -{"bundle":{"commonSourceDirectory":"..","sourceFiles":["./index.js"],"js":{"sections":[{"pos":0,"end":179,"kind":"prepend","data":"../sub-project/sub-project.js","texts":[{"pos":0,"end":179,"kind":"text"}]},{"pos":179,"end":327,"kind":"text"}],"hash":"-26783073610-/**\n * @template T, Name\n * @typedef {T & {[Symbol.species]: Name}} Nominal\n */\n/**\n * @typedef {Nominal} MyNominal\n */\nvar c = /** @type {*} */ (undefined);\nvar variable = {\n key: /** @type {MyNominal} */ ('value'),\n};\n/**\n * @return {keyof typeof variable}\n */\nfunction getVar() {\n return 'key';\n}\n"},"dts":{"sections":[{"pos":0,"end":191,"kind":"prepend","data":"../sub-project/sub-project.d.ts","texts":[{"pos":0,"end":191,"kind":"text"}]},{"pos":191,"end":339,"kind":"text"}],"hash":"-308335141-type Nominal = T & {\n [Symbol.species]: Name;\n};\n/**\n * @typedef {Nominal} MyNominal\n */\ndeclare const c: any;\ntype MyNominal = Nominal;\n/**\n * @return {keyof typeof variable}\n */\ndeclare function getVar(): keyof typeof variable;\ndeclare namespace variable {\n let key: MyNominal;\n}\n"}},"program":{"fileNames":["../../lib/lib.d.ts","../sub-project/sub-project.d.ts","./index.js"],"fileInfos":["-32082413277-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };\ninterface SymbolConstructor {\n readonly species: symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\n","-9550245654-type Nominal = T & {\n [Symbol.species]: Name;\n};\n/**\n * @typedef {Nominal} MyNominal\n */\ndeclare const c: any;\ntype MyNominal = Nominal;\n","2078909278-const variable = {\n key: /** @type {MyNominal} */('value'),\n};\n\n/**\n * @return {keyof typeof variable}\n */\nfunction getVar() {\n return 'key';\n}\n"],"root":[3],"options":{"checkJs":true,"composite":true,"declaration":true,"outFile":"./sub-project-2.js","rootDir":"..","skipLibCheck":true},"outSignature":"-308335141-type Nominal = T & {\n [Symbol.species]: Name;\n};\n/**\n * @typedef {Nominal} MyNominal\n */\ndeclare const c: any;\ntype MyNominal = Nominal;\n/**\n * @return {keyof typeof variable}\n */\ndeclare function getVar(): keyof typeof variable;\ndeclare namespace variable {\n let key: MyNominal;\n}\n","latestChangedDtsFile":"./sub-project-2.d.ts"},"version":"FakeTSVersion"} +{"bundle":{"commonSourceDirectory":"..","sourceFiles":["./index.js"],"js":{"sections":[{"pos":0,"end":179,"kind":"prepend","data":"../sub-project/sub-project.js","texts":[{"pos":0,"end":179,"kind":"text"}]},{"pos":179,"end":327,"kind":"text"}],"hash":"-26783073610-/**\n * @template T, Name\n * @typedef {T & {[Symbol.species]: Name}} Nominal\n */\n/**\n * @typedef {Nominal} MyNominal\n */\nvar c = /** @type {*} */ (undefined);\nvar variable = {\n key: /** @type {MyNominal} */ ('value'),\n};\n/**\n * @return {keyof typeof variable}\n */\nfunction getVar() {\n return 'key';\n}\n"},"dts":{"sections":[{"pos":0,"end":191,"kind":"prepend","data":"../sub-project/sub-project.d.ts","texts":[{"pos":0,"end":191,"kind":"text"}]},{"pos":191,"end":339,"kind":"text"}],"hash":"-308335141-type Nominal = T & {\n [Symbol.species]: Name;\n};\n/**\n * @typedef {Nominal} MyNominal\n */\ndeclare const c: any;\ntype MyNominal = Nominal;\n/**\n * @return {keyof typeof variable}\n */\ndeclare function getVar(): keyof typeof variable;\ndeclare namespace variable {\n let key: MyNominal;\n}\n"}},"program":{"fileNames":["../../lib/lib.d.ts","../sub-project/sub-project.d.ts","./index.js"],"fileInfos":["-32082413277-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };\ninterface SymbolConstructor {\n readonly species: symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\n","-9550245654-type Nominal = T & {\n [Symbol.species]: Name;\n};\n/**\n * @typedef {Nominal} MyNominal\n */\ndeclare const c: any;\ntype MyNominal = Nominal;\n","2078909278-const variable = {\n key: /** @type {MyNominal} */('value'),\n};\n\n/**\n * @return {keyof typeof variable}\n */\nfunction getVar() {\n return 'key';\n}\n"],"root":[3],"options":{"allowJs":true,"checkJs":true,"composite":true,"declaration":true,"outFile":"./sub-project-2.js","rootDir":"..","skipLibCheck":true},"outSignature":"-308335141-type Nominal = T & {\n [Symbol.species]: Name;\n};\n/**\n * @typedef {Nominal} MyNominal\n */\ndeclare const c: any;\ntype MyNominal = Nominal;\n/**\n * @return {keyof typeof variable}\n */\ndeclare function getVar(): keyof typeof variable;\ndeclare namespace variable {\n let key: MyNominal;\n}\n","latestChangedDtsFile":"./sub-project-2.d.ts"},"version":"FakeTSVersion"} //// [/src/sub-project-2/sub-project-2.tsbuildinfo.baseline.txt] ====================================================================== @@ -862,6 +866,7 @@ declare namespace variable { ] ], "options": { + "allowJs": true, "checkJs": true, "composite": true, "declaration": true, @@ -873,6 +878,6 @@ declare namespace variable { "latestChangedDtsFile": "./sub-project-2.d.ts" }, "version": "FakeTSVersion", - "size": 2910 + "size": 2925 } diff --git a/tests/baselines/reference/tsbuildWatch/noEmit/does-not-go-in-loop-when-watching-when-no-files-are-emitted-with-incremental.js b/tests/baselines/reference/tsbuildWatch/noEmit/does-not-go-in-loop-when-watching-when-no-files-are-emitted-with-incremental.js index 4bd0b18a3de1d..e9c1e45eeaf31 100644 --- a/tests/baselines/reference/tsbuildWatch/noEmit/does-not-go-in-loop-when-watching-when-no-files-are-emitted-with-incremental.js +++ b/tests/baselines/reference/tsbuildWatch/noEmit/does-not-go-in-loop-when-watching-when-no-files-are-emitted-with-incremental.js @@ -74,7 +74,7 @@ FsWatchesRecursive:: exitCode:: ExitStatus.undefined //// [/user/username/projects/myproject/tsconfig.tsbuildinfo] -{"program":{"fileNames":["../../../../a/lib/lib.d.ts","./a.js","./b.ts"],"fileInfos":[{"version":"3858781397-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true},"5381-","5381-"],"root":[2,3],"referencedMap":[],"exportedModulesMap":[],"semanticDiagnosticsPerFile":[1,2,3],"affectedFilesPendingEmit":[2,3]},"version":"FakeTSVersion"} +{"program":{"fileNames":["../../../../a/lib/lib.d.ts","./a.js","./b.ts"],"fileInfos":[{"version":"3858781397-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true},"5381-","5381-"],"root":[2,3],"options":{"allowJs":true},"referencedMap":[],"exportedModulesMap":[],"semanticDiagnosticsPerFile":[1,2,3],"affectedFilesPendingEmit":[2,3]},"version":"FakeTSVersion"} //// [/user/username/projects/myproject/tsconfig.tsbuildinfo.readable.baseline.txt] { @@ -113,6 +113,9 @@ exitCode:: ExitStatus.undefined "./b.ts" ] ], + "options": { + "allowJs": true + }, "referencedMap": {}, "exportedModulesMap": {}, "semanticDiagnosticsPerFile": [ @@ -132,7 +135,7 @@ exitCode:: ExitStatus.undefined ] }, "version": "FakeTSVersion", - "size": 735 + "size": 762 } @@ -199,7 +202,7 @@ Shape signatures in builder refreshed for:: exitCode:: ExitStatus.undefined //// [/user/username/projects/myproject/tsconfig.tsbuildinfo] -{"program":{"fileNames":["../../../../a/lib/lib.d.ts","./a.js","./b.ts"],"fileInfos":[{"version":"3858781397-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true},{"version":"5029505981-const x = 10;","signature":"-3042032780-declare const x: 10;\n","affectsGlobalScope":true},"5381-"],"root":[2,3],"referencedMap":[],"exportedModulesMap":[],"semanticDiagnosticsPerFile":[1,2,3],"affectedFilesPendingEmit":[2,3]},"version":"FakeTSVersion"} +{"program":{"fileNames":["../../../../a/lib/lib.d.ts","./a.js","./b.ts"],"fileInfos":[{"version":"3858781397-/// \ninterface Boolean {}\ninterface Function {}\ninterface CallableFunction {}\ninterface NewableFunction {}\ninterface IArguments {}\ninterface Number { toExponential: any; }\ninterface Object {}\ninterface RegExp {}\ninterface String { charAt: any; }\ninterface Array { length: number; [n: number]: T; }\ninterface ReadonlyArray {}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true},{"version":"5029505981-const x = 10;","signature":"-3042032780-declare const x: 10;\n","affectsGlobalScope":true},"5381-"],"root":[2,3],"options":{"allowJs":true},"referencedMap":[],"exportedModulesMap":[],"semanticDiagnosticsPerFile":[1,2,3],"affectedFilesPendingEmit":[2,3]},"version":"FakeTSVersion"} //// [/user/username/projects/myproject/tsconfig.tsbuildinfo.readable.baseline.txt] { @@ -244,6 +247,9 @@ exitCode:: ExitStatus.undefined "./b.ts" ] ], + "options": { + "allowJs": true + }, "referencedMap": {}, "exportedModulesMap": {}, "semanticDiagnosticsPerFile": [ @@ -263,6 +269,6 @@ exitCode:: ExitStatus.undefined ] }, "version": "FakeTSVersion", - "size": 841 + "size": 868 } diff --git a/tests/baselines/reference/tscWatch/programUpdates/when-changing-checkJs-of-config-file.js b/tests/baselines/reference/tscWatch/programUpdates/when-changing-checkJs-of-config-file.js new file mode 100644 index 0000000000000..4de6d59a17785 --- /dev/null +++ b/tests/baselines/reference/tscWatch/programUpdates/when-changing-checkJs-of-config-file.js @@ -0,0 +1,170 @@ +currentDirectory:: /user/username/projects/myproject useCaseSensitiveFileNames: false +Input:: +//// [/user/username/projects/myproject/a.js] +export const aNumber: number = "string" + +//// [/user/username/projects/myproject/b.ts] +import { aNumber } from "./a.js"; + +//// [/user/username/projects/myproject/tsconfig.json] +{"compilerOptions":{"checkJs":false}} + +//// [/a/lib/lib.d.ts] +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } + + +/a/lib/tsc.js -w -p . --extendedDiagnostics +Output:: +[12:00:23 AM] Starting compilation in watch mode... + +Current directory: /user/username/projects/myproject CaseSensitiveFileNames: false +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Config file +Synchronizing program +CreatingProgramWith:: + roots: ["/user/username/projects/myproject/b.ts"] + options: {"checkJs":false,"watch":true,"project":"/user/username/projects/myproject","extendedDiagnostics":true,"configFilePath":"/user/username/projects/myproject/tsconfig.json"} +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/b.ts 250 undefined Source file +DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/a.js 1 undefined Failed Lookup Locations +Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/a.js 1 undefined Failed Lookup Locations +DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 0 undefined Failed Lookup Locations +Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 0 undefined Failed Lookup Locations +FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 250 undefined Source file +DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Type roots +Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Type roots +DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Type roots +Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Type roots +DirectoryWatcher:: Triggered with /user/username/projects/myproject/b.js :: WatchInfo: /user/username/projects/myproject 0 undefined Failed Lookup Locations +Elapsed:: *ms DirectoryWatcher:: Triggered with /user/username/projects/myproject/b.js :: WatchInfo: /user/username/projects/myproject 0 undefined Failed Lookup Locations +[12:00:26 AM] Found 0 errors. Watching for file changes. + +DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Wild card directory +Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Wild card directory + + +Program root files: ["/user/username/projects/myproject/b.ts"] +Program options: {"checkJs":false,"watch":true,"project":"/user/username/projects/myproject","extendedDiagnostics":true,"configFilePath":"/user/username/projects/myproject/tsconfig.json"} +Program structureReused: Not +Program files:: +/a/lib/lib.d.ts +/user/username/projects/myproject/b.ts + +Semantic diagnostics in builder refreshed for:: +/a/lib/lib.d.ts +/user/username/projects/myproject/b.ts + +Shape signatures in builder refreshed for:: +/a/lib/lib.d.ts (used version) +/user/username/projects/myproject/b.ts (used version) + +PolledWatches:: +/user/username/projects/myproject/a.js: *new* + {"pollingInterval":500} +/user/username/projects/myproject/node_modules/@types: *new* + {"pollingInterval":500} +/user/username/projects/node_modules/@types: *new* + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: *new* + {} +/user/username/projects/myproject: *new* + {} +/user/username/projects/myproject/b.ts: *new* + {} +/user/username/projects/myproject/tsconfig.json: *new* + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: *new* + {} + +exitCode:: ExitStatus.undefined + +//// [/user/username/projects/myproject/b.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); + + + +Change:: Change checkJs to true + +Input:: +//// [/user/username/projects/myproject/tsconfig.json] +{"compilerOptions":{"checkJs":true}} + + +Before running Timeout callback:: count: 1 +1: timerToUpdateProgram +After running Timeout callback:: count: 0 +Output:: +FileWatcher:: Triggered with /user/username/projects/myproject/tsconfig.json 1:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Config file +Scheduling update +Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/tsconfig.json 1:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Config file +Reloading config file: /user/username/projects/myproject/tsconfig.json +Synchronizing program +[12:00:30 AM] File change detected. Starting incremental compilation... + +CreatingProgramWith:: + roots: ["/user/username/projects/myproject/a.js","/user/username/projects/myproject/b.ts"] + options: {"checkJs":true,"watch":true,"project":"/user/username/projects/myproject","extendedDiagnostics":true,"configFilePath":"/user/username/projects/myproject/tsconfig.json"} +FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/a.js 250 undefined Source file +a.js:1:23 - error TS8010: Type annotations can only be used in TypeScript files. + +1 export const aNumber: number = "string" +   ~~~~~~ + +[12:00:34 AM] Found 1 error. Watching for file changes. + + + +Program root files: ["/user/username/projects/myproject/a.js","/user/username/projects/myproject/b.ts"] +Program options: {"checkJs":true,"watch":true,"project":"/user/username/projects/myproject","extendedDiagnostics":true,"configFilePath":"/user/username/projects/myproject/tsconfig.json"} +Program structureReused: Not +Program files:: +/a/lib/lib.d.ts +/user/username/projects/myproject/a.js +/user/username/projects/myproject/b.ts + +No cached semantic diagnostics in the builder:: + +Shape signatures in builder refreshed for:: +/user/username/projects/myproject/a.js (computed .d.ts) +/user/username/projects/myproject/b.ts (computed .d.ts) + +PolledWatches:: +/user/username/projects/myproject/a.js: + {"pollingInterval":500} +/user/username/projects/myproject/node_modules/@types: + {"pollingInterval":500} +/user/username/projects/node_modules/@types: + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: + {} +/user/username/projects/myproject: + {} +/user/username/projects/myproject/a.js: *new* + {} +/user/username/projects/myproject/b.ts: + {} +/user/username/projects/myproject/tsconfig.json: + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: + {} + +exitCode:: ExitStatus.undefined + +//// [/user/username/projects/myproject/b.js] file written with same contents From 7cd94203360ae0e423a5734e4efe62f9b4068a9a Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Mon, 18 Sep 2023 16:46:53 -0700 Subject: [PATCH 5/7] Add jsx test --- .../unittests/tscWatch/programUpdates.ts | 26 ++++ .../updates-emit-on-jsx-option-add.js | 114 ++++++++++++++++++ 2 files changed, 140 insertions(+) create mode 100644 tests/baselines/reference/tscWatch/programUpdates/updates-emit-on-jsx-option-add.js diff --git a/src/testRunner/unittests/tscWatch/programUpdates.ts b/src/testRunner/unittests/tscWatch/programUpdates.ts index b1fe56c06b324..09b66e5ae9194 100644 --- a/src/testRunner/unittests/tscWatch/programUpdates.ts +++ b/src/testRunner/unittests/tscWatch/programUpdates.ts @@ -1873,6 +1873,32 @@ import { x } from "../b";`, ], }); + verifyTscWatch({ + scenario, + subScenario: "updates emit on jsx option add", + commandLineArgs: ["-w"], + sys: () => { + const index: File = { + path: `/user/username/projects/myproject/index.tsx`, + content: `declare var React: any;\nconst d =
;`, + }; + const configFile: File = { + path: `/user/username/projects/myproject/tsconfig.json`, + content: JSON.stringify({ + compilerOptions: {}, + }), + }; + return createWatchedSystem([index, configFile, libFile], { currentDirectory: "/user/username/projects/myproject" }); + }, + edits: [ + { + caption: "Update 'jsx' to 'preserve'", + edit: sys => sys.writeFile(`/user/username/projects/myproject/tsconfig.json`, '{ "compilerOptions": { "jsx": "preserve" } }'), + timeouts: sys => sys.runQueuedTimeoutCallbacks(), + }, + ], + }); + verifyTscWatch({ scenario, subScenario: "extended source files are watched", diff --git a/tests/baselines/reference/tscWatch/programUpdates/updates-emit-on-jsx-option-add.js b/tests/baselines/reference/tscWatch/programUpdates/updates-emit-on-jsx-option-add.js new file mode 100644 index 0000000000000..1fb5c9e54feb6 --- /dev/null +++ b/tests/baselines/reference/tscWatch/programUpdates/updates-emit-on-jsx-option-add.js @@ -0,0 +1,114 @@ +currentDirectory:: /user/username/projects/myproject useCaseSensitiveFileNames: false +Input:: +//// [/user/username/projects/myproject/index.tsx] +declare var React: any; +const d =
; + +//// [/user/username/projects/myproject/tsconfig.json] +{"compilerOptions":{}} + +//// [/a/lib/lib.d.ts] +/// +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } + + +/a/lib/tsc.js -w +Output:: +>> Screen clear +[12:00:21 AM] Starting compilation in watch mode... + +index.tsx:2:11 - error TS17004: Cannot use JSX unless the '--jsx' flag is provided. + +2 const d =
; +   ~~~~~~~ + +[12:00:24 AM] Found 1 error. Watching for file changes. + + + +Program root files: ["/user/username/projects/myproject/index.tsx"] +Program options: {"watch":true,"configFilePath":"/user/username/projects/myproject/tsconfig.json"} +Program structureReused: Not +Program files:: +/a/lib/lib.d.ts +/user/username/projects/myproject/index.tsx + +Semantic diagnostics in builder refreshed for:: +/a/lib/lib.d.ts +/user/username/projects/myproject/index.tsx + +Shape signatures in builder refreshed for:: +/a/lib/lib.d.ts (used version) +/user/username/projects/myproject/index.tsx (used version) + +PolledWatches:: +/user/username/projects/myproject/node_modules/@types: *new* + {"pollingInterval":500} +/user/username/projects/node_modules/@types: *new* + {"pollingInterval":500} + +FsWatches:: +/a/lib/lib.d.ts: *new* + {} +/user/username/projects/myproject/index.tsx: *new* + {} +/user/username/projects/myproject/tsconfig.json: *new* + {} + +FsWatchesRecursive:: +/user/username/projects/myproject: *new* + {} + +exitCode:: ExitStatus.undefined + +//// [/user/username/projects/myproject/index.js] +var d =
; + + + +Change:: Update 'jsx' to 'preserve' + +Input:: +//// [/user/username/projects/myproject/tsconfig.json] +{ "compilerOptions": { "jsx": "preserve" } } + + +Before running Timeout callback:: count: 1 +1: timerToUpdateProgram +After running Timeout callback:: count: 0 +Output:: +>> Screen clear +[12:00:28 AM] File change detected. Starting incremental compilation... + +[12:00:31 AM] Found 0 errors. Watching for file changes. + + + +Program root files: ["/user/username/projects/myproject/index.tsx"] +Program options: {"jsx":1,"watch":true,"configFilePath":"/user/username/projects/myproject/tsconfig.json"} +Program structureReused: Not +Program files:: +/a/lib/lib.d.ts +/user/username/projects/myproject/index.tsx + +Semantic diagnostics in builder refreshed for:: +/a/lib/lib.d.ts +/user/username/projects/myproject/index.tsx + +No shapes updated in the builder:: + +exitCode:: ExitStatus.undefined + +//// [/user/username/projects/myproject/index.jsx] +var d =
; + + From f7175d471e023f031eed0adc7b34f7c4e8bc2b27 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Tue, 19 Sep 2023 13:55:53 -0700 Subject: [PATCH 6/7] Remove unused baseline --- .../when-changing-`checkJs`-of-config-file.js | 170 ------------------ 1 file changed, 170 deletions(-) delete mode 100644 tests/baselines/reference/tscWatch/programUpdates/when-changing-`checkJs`-of-config-file.js diff --git a/tests/baselines/reference/tscWatch/programUpdates/when-changing-`checkJs`-of-config-file.js b/tests/baselines/reference/tscWatch/programUpdates/when-changing-`checkJs`-of-config-file.js deleted file mode 100644 index 4de6d59a17785..0000000000000 --- a/tests/baselines/reference/tscWatch/programUpdates/when-changing-`checkJs`-of-config-file.js +++ /dev/null @@ -1,170 +0,0 @@ -currentDirectory:: /user/username/projects/myproject useCaseSensitiveFileNames: false -Input:: -//// [/user/username/projects/myproject/a.js] -export const aNumber: number = "string" - -//// [/user/username/projects/myproject/b.ts] -import { aNumber } from "./a.js"; - -//// [/user/username/projects/myproject/tsconfig.json] -{"compilerOptions":{"checkJs":false}} - -//// [/a/lib/lib.d.ts] -/// -interface Boolean {} -interface Function {} -interface CallableFunction {} -interface NewableFunction {} -interface IArguments {} -interface Number { toExponential: any; } -interface Object {} -interface RegExp {} -interface String { charAt: any; } -interface Array { length: number; [n: number]: T; } - - -/a/lib/tsc.js -w -p . --extendedDiagnostics -Output:: -[12:00:23 AM] Starting compilation in watch mode... - -Current directory: /user/username/projects/myproject CaseSensitiveFileNames: false -FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Config file -Synchronizing program -CreatingProgramWith:: - roots: ["/user/username/projects/myproject/b.ts"] - options: {"checkJs":false,"watch":true,"project":"/user/username/projects/myproject","extendedDiagnostics":true,"configFilePath":"/user/username/projects/myproject/tsconfig.json"} -FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/b.ts 250 undefined Source file -DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/a.js 1 undefined Failed Lookup Locations -Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/a.js 1 undefined Failed Lookup Locations -DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 0 undefined Failed Lookup Locations -Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 0 undefined Failed Lookup Locations -FileWatcher:: Added:: WatchInfo: /a/lib/lib.d.ts 250 undefined Source file -DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Type roots -Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject/node_modules/@types 1 undefined Type roots -DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Type roots -Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/node_modules/@types 1 undefined Type roots -DirectoryWatcher:: Triggered with /user/username/projects/myproject/b.js :: WatchInfo: /user/username/projects/myproject 0 undefined Failed Lookup Locations -Elapsed:: *ms DirectoryWatcher:: Triggered with /user/username/projects/myproject/b.js :: WatchInfo: /user/username/projects/myproject 0 undefined Failed Lookup Locations -[12:00:26 AM] Found 0 errors. Watching for file changes. - -DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Wild card directory -Elapsed:: *ms DirectoryWatcher:: Added:: WatchInfo: /user/username/projects/myproject 1 undefined Wild card directory - - -Program root files: ["/user/username/projects/myproject/b.ts"] -Program options: {"checkJs":false,"watch":true,"project":"/user/username/projects/myproject","extendedDiagnostics":true,"configFilePath":"/user/username/projects/myproject/tsconfig.json"} -Program structureReused: Not -Program files:: -/a/lib/lib.d.ts -/user/username/projects/myproject/b.ts - -Semantic diagnostics in builder refreshed for:: -/a/lib/lib.d.ts -/user/username/projects/myproject/b.ts - -Shape signatures in builder refreshed for:: -/a/lib/lib.d.ts (used version) -/user/username/projects/myproject/b.ts (used version) - -PolledWatches:: -/user/username/projects/myproject/a.js: *new* - {"pollingInterval":500} -/user/username/projects/myproject/node_modules/@types: *new* - {"pollingInterval":500} -/user/username/projects/node_modules/@types: *new* - {"pollingInterval":500} - -FsWatches:: -/a/lib/lib.d.ts: *new* - {} -/user/username/projects/myproject: *new* - {} -/user/username/projects/myproject/b.ts: *new* - {} -/user/username/projects/myproject/tsconfig.json: *new* - {} - -FsWatchesRecursive:: -/user/username/projects/myproject: *new* - {} - -exitCode:: ExitStatus.undefined - -//// [/user/username/projects/myproject/b.js] -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); - - - -Change:: Change checkJs to true - -Input:: -//// [/user/username/projects/myproject/tsconfig.json] -{"compilerOptions":{"checkJs":true}} - - -Before running Timeout callback:: count: 1 -1: timerToUpdateProgram -After running Timeout callback:: count: 0 -Output:: -FileWatcher:: Triggered with /user/username/projects/myproject/tsconfig.json 1:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Config file -Scheduling update -Elapsed:: *ms FileWatcher:: Triggered with /user/username/projects/myproject/tsconfig.json 1:: WatchInfo: /user/username/projects/myproject/tsconfig.json 2000 undefined Config file -Reloading config file: /user/username/projects/myproject/tsconfig.json -Synchronizing program -[12:00:30 AM] File change detected. Starting incremental compilation... - -CreatingProgramWith:: - roots: ["/user/username/projects/myproject/a.js","/user/username/projects/myproject/b.ts"] - options: {"checkJs":true,"watch":true,"project":"/user/username/projects/myproject","extendedDiagnostics":true,"configFilePath":"/user/username/projects/myproject/tsconfig.json"} -FileWatcher:: Added:: WatchInfo: /user/username/projects/myproject/a.js 250 undefined Source file -a.js:1:23 - error TS8010: Type annotations can only be used in TypeScript files. - -1 export const aNumber: number = "string" -   ~~~~~~ - -[12:00:34 AM] Found 1 error. Watching for file changes. - - - -Program root files: ["/user/username/projects/myproject/a.js","/user/username/projects/myproject/b.ts"] -Program options: {"checkJs":true,"watch":true,"project":"/user/username/projects/myproject","extendedDiagnostics":true,"configFilePath":"/user/username/projects/myproject/tsconfig.json"} -Program structureReused: Not -Program files:: -/a/lib/lib.d.ts -/user/username/projects/myproject/a.js -/user/username/projects/myproject/b.ts - -No cached semantic diagnostics in the builder:: - -Shape signatures in builder refreshed for:: -/user/username/projects/myproject/a.js (computed .d.ts) -/user/username/projects/myproject/b.ts (computed .d.ts) - -PolledWatches:: -/user/username/projects/myproject/a.js: - {"pollingInterval":500} -/user/username/projects/myproject/node_modules/@types: - {"pollingInterval":500} -/user/username/projects/node_modules/@types: - {"pollingInterval":500} - -FsWatches:: -/a/lib/lib.d.ts: - {} -/user/username/projects/myproject: - {} -/user/username/projects/myproject/a.js: *new* - {} -/user/username/projects/myproject/b.ts: - {} -/user/username/projects/myproject/tsconfig.json: - {} - -FsWatchesRecursive:: -/user/username/projects/myproject: - {} - -exitCode:: ExitStatus.undefined - -//// [/user/username/projects/myproject/b.js] file written with same contents From bf107bc0da667512ad3efaa2563f7ddbd9ed8a5f Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Tue, 19 Sep 2023 14:12:53 -0700 Subject: [PATCH 7/7] Add comment --- src/compiler/commandLineParser.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/compiler/commandLineParser.ts b/src/compiler/commandLineParser.ts index eeb347eaf5df9..0b8a038233d2f 100644 --- a/src/compiler/commandLineParser.ts +++ b/src/compiler/commandLineParser.ts @@ -672,6 +672,9 @@ const commandOptionsWithoutBuild: CommandLineOption[] = [ affectsEmit: true, affectsBuildInfo: true, affectsModuleResolution: true, + // The checker emits an error when it sees JSX but this option is not set in compilerOptions. + // This is effectively a semantic error, so mark this option as affecting semantic diagnostics + // so we know to refresh errors when this option is changed. affectsSemanticDiagnostics: true, paramType: Diagnostics.KIND, showInSimplifiedHelpView: true,