From 49616b6fe687cbbd3b8a14434ee84fe4e18313ea Mon Sep 17 00:00:00 2001 From: Gadzhi Gadzhiev <168296+resure@users.noreply.github.com> Date: Tue, 6 Oct 2026 22:12:03 +0300 Subject: [PATCH 1/5] Compute signatures of dependent files in parallel After a shared dependency changes, the incremental builder computed the declaration signatures of the files referencing it one at a time. Each referencing file now gets its own task in the work group, with at most GOMAXPROCS signatures in flight so peak memory stays where it was. The cached path of updateShapeSignature returned false when another traversal had already computed the file's signature, which made the result depend on which changed file was processed first: a changed file that affects the global scope could fail to invalidate every file. It now reports whether that signature changed. --- .../incremental/affectedfileshandler.go | 59 +- .../affectedfileshandler_internal_test.go | 65 + .../incremental/affectedfileshandler_test.go | 61 + tsc/internal/execute/tsctests/tsc_test.go | 53 + .../shared-dependency-with-inferred-types.js | 1450 ++++++++++++++++ .../shared-dependency-with-inferred-types.js | 1504 +++++++++++++++++ 6 files changed, 3165 insertions(+), 27 deletions(-) create mode 100644 tsc/internal/execute/incremental/affectedfileshandler_internal_test.go create mode 100644 tsc/internal/execute/incremental/affectedfileshandler_test.go create mode 100644 tsc/testdata/baselines/reference/tsc/incremental/shared-dependency-with-inferred-types.js create mode 100644 tsc/testdata/baselines/reference/tscWatch/incremental/shared-dependency-with-inferred-types.js diff --git a/tsc/internal/execute/incremental/affectedfileshandler.go b/tsc/internal/execute/incremental/affectedfileshandler.go index 5f8d918ceea9f..6ddb9ce712f88 100644 --- a/tsc/internal/execute/incremental/affectedfileshandler.go +++ b/tsc/internal/execute/incremental/affectedfileshandler.go @@ -2,7 +2,7 @@ package incremental import ( "context" - "maps" + "runtime" "slices" "sync" "sync/atomic" @@ -15,6 +15,9 @@ import ( "github.com/microsoft/TypeScript/tsc/internal/tspath" ) +// Starting every signature at once raises peak memory without finishing sooner. +var signatureSemaphore = core.NewLimitedSemaphore(runtime.GOMAXPROCS(0)) + type dtsMayChange map[tspath.PathKey]FileEmitKind func (c dtsMayChange) addFileToAffectedFilesPendingEmit(filePath tspath.PathKey, emitKind FileEmitKind) { @@ -88,12 +91,11 @@ func (h *affectedFilesHandler) updateShapeSignature(file *ast.SourceFile, useFil update := &updatedSignature{} update.mu.Lock() defer update.mu.Unlock() - // If we have cached the result for this file, that means hence forth we should assume file shape is uptodate if existing, ok := h.updatedSignatures.LoadOrStore(file.PathKey(), update); ok { // Ensure calculations for existing ones are complete before using the value existing.mu.Lock() defer existing.mu.Unlock() - return false + return h.isChangedSignature(file.PathKey()) } info, _ := h.program.snapshot.fileInfos.Load(file.PathKey()) @@ -111,42 +113,47 @@ func (h *affectedFilesHandler) updateShapeSignature(file *ast.SourceFile, useFil return update.signature != prevSignature } -func (h *affectedFilesHandler) getFilesAffectedBy(path tspath.PathKey) []*ast.SourceFile { +func (h *affectedFilesHandler) collectFilesAffectedBy(path tspath.PathKey, wg core.WorkGroup, result *collections.SyncSet[*ast.SourceFile]) { file := h.program.program.GetSourceFileByPath(path) if file == nil { - return nil + return } + result.Add(file) if !h.updateShapeSignature(file, false) { - return []*ast.SourceFile{file} + return } if info, _ := h.program.snapshot.fileInfos.Load(file.PathKey()); info.affectsGlobalScope { h.hasAllFilesExcludingDefaultLibraryFile.Store(true) - return h.program.snapshot.getAllFilesExcludingDefaultLibraryFile(h.program.program, file) + for _, affectedFile := range h.program.snapshot.getAllFilesExcludingDefaultLibraryFile(h.program.program, file) { + result.Add(affectedFile) + } + return } if h.program.snapshot.options.IsolatedModules.IsTrue() { - return []*ast.SourceFile{file} + return } - // Now we need to if each file in the referencedBy list has a shape change as well. - // Because if so, its own referencedBy files need to be saved as well to make the - // emitting result consistent with files on disk. - seenFileNamesMap := h.forEachFileReferencedBy( - file, - func(currentFile *ast.SourceFile, currentPath tspath.PathKey) (queueForFile bool, fastReturn bool) { - // If the current file is not nil and has a shape change, we need to queue it for processing - if currentFile != nil && h.updateShapeSignature(currentFile, false) { - return true, false + h.collectReferencingFiles(file, wg, result) +} + +func (h *affectedFilesHandler) collectReferencingFiles(file *ast.SourceFile, wg core.WorkGroup, result *collections.SyncSet[*ast.SourceFile]) { + for path := range h.program.snapshot.referencedMap.getReferencedBy(file.PathKey()) { + currentFile := h.program.program.GetSourceFileByPath(path) + if currentFile == nil || !result.AddIfAbsent(currentFile) { + continue + } + wg.Queue(func() { + release := signatureSemaphore.Acquire() + changed := h.updateShapeSignature(currentFile, false) + release() + if changed { + h.collectReferencingFiles(currentFile, wg, result) } - return false, false - }, - ) - // Return array of values that needs emit - return core.Filter(slices.Collect(maps.Values(seenFileNamesMap)), func(file *ast.SourceFile) bool { - return file != nil - }) + }) + } } func (h *affectedFilesHandler) forEachFileReferencedBy(file *ast.SourceFile, fn func(currentFile *ast.SourceFile, currentPath tspath.PathKey) (queueForFile bool, fastReturn bool)) map[tspath.PathKey]*ast.SourceFile { @@ -366,9 +373,7 @@ func collectAllAffectedFiles(ctx context.Context, program *Program) { var result collections.SyncSet[*ast.SourceFile] program.snapshot.changedFilesSet.Range(func(file tspath.PathKey) bool { wg.Queue(func() { - for _, affectedFile := range handler.getFilesAffectedBy(file) { - result.Add(affectedFile) - } + handler.collectFilesAffectedBy(file, wg, &result) }) return true }) diff --git a/tsc/internal/execute/incremental/affectedfileshandler_internal_test.go b/tsc/internal/execute/incremental/affectedfileshandler_internal_test.go new file mode 100644 index 0000000000000..7e1de0bf9ec92 --- /dev/null +++ b/tsc/internal/execute/incremental/affectedfileshandler_internal_test.go @@ -0,0 +1,65 @@ +package incremental + +import ( + "testing" + + "github.com/microsoft/TypeScript/tsc/internal/ast" + "github.com/microsoft/TypeScript/tsc/internal/bundled" + "github.com/microsoft/TypeScript/tsc/internal/collections" + "github.com/microsoft/TypeScript/tsc/internal/compiler" + "github.com/microsoft/TypeScript/tsc/internal/core" + "github.com/microsoft/TypeScript/tsc/internal/tsoptions" + "github.com/microsoft/TypeScript/tsc/internal/tspath" + "github.com/microsoft/TypeScript/tsc/internal/vfs/vfstest" + "gotest.tools/v3/assert" +) + +func TestUpdateShapeSignatureCachedResult(t *testing.T) { + t.Parallel() + if !bundled.Embedded { + t.Skip("bundled files are not embedded") + } + fs := bundled.WrapFS(vfstest.FromMap(map[string]string{ + "/tsconfig.json": `{"compilerOptions":{"strict":true,"noEmit":true,"incremental":true,"skipLibCheck":true}}`, + "/a.ts": `export const a = 1;`, + "/b.ts": `import { a } from "./a"; export const b = a; declare global { interface Window { fromB: string; } }`, + "/c.ts": `export const c = window.fromB;`, + "/d.ts": `import { b } from "./b"; export const d = 2;`, + }, tspath.CaseSensitive)) + build := func() *Program { + host := compiler.NewCompilerHost(fs, bundled.LibPath(), nil, nil, nil) + config, diagnostics := tsoptions.GetParsedCommandLineOfConfigFile("/tsconfig.json", &core.CompilerOptions{}, nil, fs, nil) + assert.Equal(t, len(diagnostics), 0) + old := ReadBuildInfoProgram(config, NewBuildInfoReader(host), host) + return NewProgram(compiler.NewProgram(compiler.ProgramOptions{Config: config, Host: host}), old, CreateHost(host), nil, false) + } + check := func() { + program := build() + assert.Equal(t, len(program.GetSemanticDiagnostics(t.Context(), nil)), 0) + assert.Equal(t, len(program.Emit(t.Context(), compiler.EmitOptions{}).Diagnostics), 0) + } + check() + // A rebuild replaces the version-based signatures of a, b and d with computed ones. + assert.NilError(t, fs.AppendFile("/a.ts", "\n// edit\n")) + check() + + assert.NilError(t, fs.WriteFile("/a.ts", `export const a = "changed";`)) + assert.NilError(t, fs.AppendFile("/b.ts", "\n// edit\n")) + program := build() + h := affectedFilesHandler{ctx: t.Context(), program: program} + b := program.program.GetSourceFile("/b.ts") + c := program.program.GetSourceFile("/c.ts") + d := program.program.GetSourceFile("/d.ts") + + assert.Assert(t, h.updateShapeSignature(b, false)) + assert.Assert(t, h.updateShapeSignature(b, false), "cached result must still report the changed signature") + assert.Assert(t, !h.updateShapeSignature(d, false)) + assert.Assert(t, !h.updateShapeSignature(d, false)) + + wg := core.NewWorkGroup(true) + var result collections.SyncSet[*ast.SourceFile] + wg.Queue(func() { h.collectFilesAffectedBy(b.PathKey(), wg, &result) }) + wg.RunAndWait() + assert.Assert(t, h.hasAllFilesExcludingDefaultLibraryFile.Load(), "global-scope invalidation must not depend on which traversal computed the signature") + assert.Assert(t, result.Has(c)) +} diff --git a/tsc/internal/execute/incremental/affectedfileshandler_test.go b/tsc/internal/execute/incremental/affectedfileshandler_test.go new file mode 100644 index 0000000000000..dca71d53101cc --- /dev/null +++ b/tsc/internal/execute/incremental/affectedfileshandler_test.go @@ -0,0 +1,61 @@ +package incremental_test + +import ( + "fmt" + "strings" + "testing" + + "github.com/microsoft/TypeScript/tsc/internal/bundled" + "github.com/microsoft/TypeScript/tsc/internal/compiler" + "github.com/microsoft/TypeScript/tsc/internal/core" + "github.com/microsoft/TypeScript/tsc/internal/execute/incremental" + "github.com/microsoft/TypeScript/tsc/internal/tsoptions" + "github.com/microsoft/TypeScript/tsc/internal/tspath" + "github.com/microsoft/TypeScript/tsc/internal/vfs/vfstest" + "gotest.tools/v3/assert" +) + +func BenchmarkFirstIncrementalRebuild(b *testing.B) { + if !bundled.Embedded { + b.Skip("bundled files are not embedded") + } + for _, leaves := range []int{200, 1000} { + b.Run(fmt.Sprintf("leaves=%d", leaves), func(b *testing.B) { + files := map[string]string{ + "/src/hub.ts": `export const prefix = "hub";`, + "/tsconfig.json": `{"compilerOptions":{"strict":true,"noEmit":true,"incremental":true,"skipLibCheck":true,"module":"esnext","moduleResolution":"bundler"}}`, + } + var factories, exports strings.Builder + for i := range leaves / 2 { + files[fmt.Sprintf("/src/types/t%d.ts", i)] = fmt.Sprintf(`export interface Model%d { id: string; value%d: number; } export function make%d(id: string): Model%d { return { id, value%d: %d }; }`, i, i, i, i, i, i) + fmt.Fprintf(&factories, "export { make%d } from './t%d';\n", i, i) + } + files["/src/types/index.ts"] = factories.String() + for i := range leaves { + a, other := i%(leaves/2), (i*7+3)%(leaves/2) + files[fmt.Sprintf("/src/leaves/l%d.ts", i)] = fmt.Sprintf(`import { prefix } from "../hub"; import { make%d, make%d } from "../types"; export const leaf%d = { first: make%d(prefix), second: make%d("%d") };`, a, other, i, a, other, i) + fmt.Fprintf(&exports, "export * from './leaves/l%d';\n", i) + } + files["/src/index.ts"] = exports.String() + fs := bundled.WrapFS(vfstest.FromMap(files, tspath.CaseSensitive)) + newHost := func() compiler.CompilerHost { + return compiler.NewCompilerHost(fs, bundled.LibPath(), nil, nil, nil) + } + host := newHost() + config, diagnostics := tsoptions.GetParsedCommandLineOfConfigFile("/tsconfig.json", &core.CompilerOptions{}, nil, fs, nil) + assert.Equal(b, len(diagnostics), 0) + program := incremental.NewProgram(compiler.NewProgram(compiler.ProgramOptions{Config: config, Host: host}), nil, incremental.CreateHost(host), nil, false) + assert.Equal(b, len(program.GetSemanticDiagnostics(b.Context(), nil)), 0) + assert.Equal(b, len(program.Emit(b.Context(), compiler.EmitOptions{}).Diagnostics), 0) + assert.NilError(b, fs.AppendFile("/src/hub.ts", "\n// comment only edit\n")) + b.ReportAllocs() + for b.Loop() { + host := newHost() + oldProgram := incremental.ReadBuildInfoProgram(config, incremental.NewBuildInfoReader(host), host) + assert.Assert(b, oldProgram != nil) + program := incremental.NewProgram(compiler.NewProgram(compiler.ProgramOptions{Config: config, Host: host}), oldProgram, incremental.CreateHost(host), nil, false) + assert.Equal(b, len(program.GetSemanticDiagnostics(b.Context(), nil)), 0) + } + }) + } +} diff --git a/tsc/internal/execute/tsctests/tsc_test.go b/tsc/internal/execute/tsctests/tsc_test.go index aff5f93620582..e1abef9d9d542 100644 --- a/tsc/internal/execute/tsctests/tsc_test.go +++ b/tsc/internal/execute/tsctests/tsc_test.go @@ -1429,6 +1429,57 @@ func TestTscIncremental(t *testing.T) { }, } } + getSharedDependencyTest := func(commandLineArgs []string) *tscInput { + const project = "/home/src/workspaces/project/" + return &tscInput{ + subScenario: "shared dependency with inferred types", + commandLineArgs: commandLineArgs, + files: FileMap{ + project + "tsconfig.json": `{"compilerOptions":{"strict":true,"noEmit":true,"incremental":true}}`, + project + "hub.ts": `export const prefix = "hub";`, + project + "model.ts": `export interface Model { id: string; } export function make(id: string): Model { return { id }; }`, + project + "factory.ts": `export { make } from "./model";`, + project + "left.ts": `import { prefix } from "./hub"; import { make } from "./factory"; export const left = make(prefix); export { right } from "./right";`, + project + "right.ts": `import { prefix } from "./hub"; import { make } from "./factory"; export const right = make(prefix); export { left } from "./left";`, + project + "barrel.ts": `export { left } from "./left"; export { right } from "./right";`, + project + "index.ts": `import { left, right } from "./barrel"; export const ids: string[] = [left.id, right.id];`, + }, + edits: []*tscEdit{ + noChange, + { + caption: "first comment only edit", + edit: func(sys *TestSys) { + sys.appendFile(project+"hub.ts", "\n// first edit\n") + }, + }, + { + caption: "second comment only edit", + edit: func(sys *TestSys) { + sys.appendFile(project+"hub.ts", "\n// second edit\n") + }, + }, + { + caption: "change the shared value type", + edit: func(sys *TestSys) { + sys.replaceFileText(project+"hub.ts", `"hub"`, "10") + }, + }, + { + caption: "change the inferred type through the barrel", + edit: func(sys *TestSys) { + sys.writeFileNoError(project+"model.ts", `export interface Model { id: number; } export function make(id: number): Model { return { id }; }`) + }, + }, + { + caption: "restore both shared dependencies", + edit: func(sys *TestSys) { + sys.replaceFileText(project+"hub.ts", "10", `"hub"`) + sys.writeFileNoError(project+"model.ts", `export interface Model { id: string; } export function make(id: string): Model { return { id }; }`) + }, + }, + }, + } + } testCases := []*tscInput{ { subScenario: "serializing error chain", @@ -2519,6 +2570,8 @@ func TestTscIncremental(t *testing.T) { }, }, }, + getSharedDependencyTest(nil), + getSharedDependencyTest([]string{"--watch"}), } for _, test := range testCases { diff --git a/tsc/testdata/baselines/reference/tsc/incremental/shared-dependency-with-inferred-types.js b/tsc/testdata/baselines/reference/tsc/incremental/shared-dependency-with-inferred-types.js new file mode 100644 index 0000000000000..bfd9f33a62dfa --- /dev/null +++ b/tsc/testdata/baselines/reference/tsc/incremental/shared-dependency-with-inferred-types.js @@ -0,0 +1,1450 @@ +currentDirectory::/home/src/workspaces/project +useCaseSensitiveFileNames::true +Input:: +//// [/home/src/workspaces/project/barrel.ts] *new* +export { left } from "./left"; export { right } from "./right"; +//// [/home/src/workspaces/project/factory.ts] *new* +export { make } from "./model"; +//// [/home/src/workspaces/project/hub.ts] *new* +export const prefix = "hub"; +//// [/home/src/workspaces/project/index.ts] *new* +import { left, right } from "./barrel"; export const ids: string[] = [left.id, right.id]; +//// [/home/src/workspaces/project/left.ts] *new* +import { prefix } from "./hub"; import { make } from "./factory"; export const left = make(prefix); export { right } from "./right"; +//// [/home/src/workspaces/project/model.ts] *new* +export interface Model { id: string; } export function make(id: string): Model { return { id }; } +//// [/home/src/workspaces/project/right.ts] *new* +import { prefix } from "./hub"; import { make } from "./factory"; export const right = make(prefix); export { left } from "./left"; +//// [/home/src/workspaces/project/tsconfig.json] *new* +{"compilerOptions":{"strict":true,"noEmit":true,"incremental":true}} + +tsgo +ExitStatus:: Success +Output:: +//// [/home/src/tslibs/TS/Lib/lib.es2026.full.d.ts] *Lib* +/// +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; } +interface ReadonlyArray {} +interface SymbolConstructor { + (desc?: string | number): symbol; + for(name: string): symbol; + readonly toStringTag: symbol; +} +declare var Symbol: SymbolConstructor; +interface Symbol { + readonly [Symbol.toStringTag]: string; +} +declare const console: { log(msg: any): void; }; +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[[2,8]],"fileNames":["lib.es2026.full.d.ts","./hub.ts","./model.ts","./factory.ts","./right.ts","./left.ts","./barrel.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"e69fd43859d508fe2d52ada7fe216c06-export const prefix = \"hub\";","c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }","8c035626178906db4f73ee993640fecd-export { make } from \"./model\";","07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";","8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";","0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";","3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];"],"fileIdsList":[[5,6],[3],[7],[2,4,5],[2,4,6]],"options":{"strict":true},"referencedMap":[[7,1],[4,2],[8,3],[6,4],[5,5]],"affectedFilesPendingEmit":[7,4,2,8,6,3,5]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./hub.ts", + "./model.ts", + "./factory.ts", + "./right.ts", + "./left.ts", + "./barrel.ts", + "./index.ts" + ], + "original": [ + 2, + 8 + ] + } + ], + "fileNames": [ + "lib.es2026.full.d.ts", + "./hub.ts", + "./model.ts", + "./factory.ts", + "./right.ts", + "./left.ts", + "./barrel.ts", + "./index.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2026.full.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./hub.ts", + "version": "e69fd43859d508fe2d52ada7fe216c06-export const prefix = \"hub\";", + "signature": "e69fd43859d508fe2d52ada7fe216c06-export const prefix = \"hub\";", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./model.ts", + "version": "c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }", + "signature": "c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./factory.ts", + "version": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", + "signature": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./right.ts", + "version": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", + "signature": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./left.ts", + "version": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", + "signature": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./barrel.ts", + "version": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", + "signature": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./index.ts", + "version": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", + "signature": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", + "impliedNodeFormat": "CommonJS" + } + ], + "fileIdsList": [ + [ + "./right.ts", + "./left.ts" + ], + [ + "./model.ts" + ], + [ + "./barrel.ts" + ], + [ + "./hub.ts", + "./factory.ts", + "./right.ts" + ], + [ + "./hub.ts", + "./factory.ts", + "./left.ts" + ] + ], + "options": { + "strict": true + }, + "referencedMap": { + "./barrel.ts": [ + "./right.ts", + "./left.ts" + ], + "./factory.ts": [ + "./model.ts" + ], + "./index.ts": [ + "./barrel.ts" + ], + "./left.ts": [ + "./hub.ts", + "./factory.ts", + "./right.ts" + ], + "./right.ts": [ + "./hub.ts", + "./factory.ts", + "./left.ts" + ] + }, + "affectedFilesPendingEmit": [ + [ + "./barrel.ts", + "Js", + 7 + ], + [ + "./factory.ts", + "Js", + 4 + ], + [ + "./hub.ts", + "Js", + 2 + ], + [ + "./index.ts", + "Js", + 8 + ], + [ + "./left.ts", + "Js", + 6 + ], + [ + "./model.ts", + "Js", + 3 + ], + [ + "./right.ts", + "Js", + 5 + ] + ], + "size": 1962 +} + +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/tslibs/TS/Lib/lib.es2026.full.d.ts +*refresh* /home/src/workspaces/project/hub.ts +*refresh* /home/src/workspaces/project/model.ts +*refresh* /home/src/workspaces/project/factory.ts +*refresh* /home/src/workspaces/project/right.ts +*refresh* /home/src/workspaces/project/left.ts +*refresh* /home/src/workspaces/project/barrel.ts +*refresh* /home/src/workspaces/project/index.ts +Signatures:: + + +Edit [0]:: no change + +tsgo +ExitStatus:: Success +Output:: + +tsconfig.json:: +SemanticDiagnostics:: +Signatures:: + + +Edit [1]:: first comment only edit +//// [/home/src/workspaces/project/hub.ts] *modified* +export const prefix = "hub"; +// first edit + + +tsgo +ExitStatus:: Success +Output:: +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* +{"version":"FakeTSVersion","root":[[2,8]],"fileNames":["lib.es2026.full.d.ts","./hub.ts","./model.ts","./factory.ts","./right.ts","./left.ts","./barrel.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"0cc5c48d027554ce2074931a1f2ea370-export const prefix = \"hub\";\n// first edit\n","signature":"eee9e59e027e6765a0d5610b039f5e8a-export declare const prefix = \"hub\";\n","impliedNodeFormat":1},"c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }","8c035626178906db4f73ee993640fecd-export { make } from \"./model\";",{"version":"07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";","signature":"5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n","impliedNodeFormat":1},{"version":"8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";","signature":"4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n","impliedNodeFormat":1},{"version":"0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";","signature":"f614ffe60290b2d15ae0fd0b4ce7ba1d-export { left } from \"./left\";\nexport { right } from \"./right\";\n","impliedNodeFormat":1},{"version":"3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];","signature":"17897b95b5d22b2e69f98a20dfe4df48-export declare const ids: string[];\n","impliedNodeFormat":1}],"fileIdsList":[[5,6],[3],[7],[2,4,5],[2,4,6]],"options":{"strict":true},"referencedMap":[[7,1],[4,2],[8,3],[6,4],[5,5]],"affectedFilesPendingEmit":[7,4,2,8,6,3,5]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./hub.ts", + "./model.ts", + "./factory.ts", + "./right.ts", + "./left.ts", + "./barrel.ts", + "./index.ts" + ], + "original": [ + 2, + 8 + ] + } + ], + "fileNames": [ + "lib.es2026.full.d.ts", + "./hub.ts", + "./model.ts", + "./factory.ts", + "./right.ts", + "./left.ts", + "./barrel.ts", + "./index.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2026.full.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./hub.ts", + "version": "0cc5c48d027554ce2074931a1f2ea370-export const prefix = \"hub\";\n// first edit\n", + "signature": "eee9e59e027e6765a0d5610b039f5e8a-export declare const prefix = \"hub\";\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "0cc5c48d027554ce2074931a1f2ea370-export const prefix = \"hub\";\n// first edit\n", + "signature": "eee9e59e027e6765a0d5610b039f5e8a-export declare const prefix = \"hub\";\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./model.ts", + "version": "c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }", + "signature": "c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./factory.ts", + "version": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", + "signature": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./right.ts", + "version": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", + "signature": "5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", + "signature": "5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./left.ts", + "version": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", + "signature": "4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", + "signature": "4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./barrel.ts", + "version": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", + "signature": "f614ffe60290b2d15ae0fd0b4ce7ba1d-export { left } from \"./left\";\nexport { right } from \"./right\";\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", + "signature": "f614ffe60290b2d15ae0fd0b4ce7ba1d-export { left } from \"./left\";\nexport { right } from \"./right\";\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./index.ts", + "version": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", + "signature": "17897b95b5d22b2e69f98a20dfe4df48-export declare const ids: string[];\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", + "signature": "17897b95b5d22b2e69f98a20dfe4df48-export declare const ids: string[];\n", + "impliedNodeFormat": 1 + } + } + ], + "fileIdsList": [ + [ + "./right.ts", + "./left.ts" + ], + [ + "./model.ts" + ], + [ + "./barrel.ts" + ], + [ + "./hub.ts", + "./factory.ts", + "./right.ts" + ], + [ + "./hub.ts", + "./factory.ts", + "./left.ts" + ] + ], + "options": { + "strict": true + }, + "referencedMap": { + "./barrel.ts": [ + "./right.ts", + "./left.ts" + ], + "./factory.ts": [ + "./model.ts" + ], + "./index.ts": [ + "./barrel.ts" + ], + "./left.ts": [ + "./hub.ts", + "./factory.ts", + "./right.ts" + ], + "./right.ts": [ + "./hub.ts", + "./factory.ts", + "./left.ts" + ] + }, + "affectedFilesPendingEmit": [ + [ + "./barrel.ts", + "Js", + 7 + ], + [ + "./factory.ts", + "Js", + 4 + ], + [ + "./hub.ts", + "Js", + 2 + ], + [ + "./index.ts", + "Js", + 8 + ], + [ + "./left.ts", + "Js", + 6 + ], + [ + "./model.ts", + "Js", + 3 + ], + [ + "./right.ts", + "Js", + 5 + ] + ], + "size": 2717 +} + +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/workspaces/project/hub.ts +*refresh* /home/src/workspaces/project/right.ts +*refresh* /home/src/workspaces/project/left.ts +*refresh* /home/src/workspaces/project/barrel.ts +*refresh* /home/src/workspaces/project/index.ts +Signatures:: +(computed .d.ts) /home/src/workspaces/project/hub.ts +(computed .d.ts) /home/src/workspaces/project/right.ts +(computed .d.ts) /home/src/workspaces/project/left.ts +(computed .d.ts) /home/src/workspaces/project/barrel.ts +(computed .d.ts) /home/src/workspaces/project/index.ts + + +Edit [2]:: second comment only edit +//// [/home/src/workspaces/project/hub.ts] *modified* +export const prefix = "hub"; +// first edit + +// second edit + + +tsgo +ExitStatus:: Success +Output:: +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* +{"version":"FakeTSVersion","root":[[2,8]],"fileNames":["lib.es2026.full.d.ts","./hub.ts","./model.ts","./factory.ts","./right.ts","./left.ts","./barrel.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"df41fd128159de07c8cd657d90367a14-export const prefix = \"hub\";\n// first edit\n\n// second edit\n","signature":"eee9e59e027e6765a0d5610b039f5e8a-export declare const prefix = \"hub\";\n","impliedNodeFormat":1},"c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }","8c035626178906db4f73ee993640fecd-export { make } from \"./model\";",{"version":"07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";","signature":"5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n","impliedNodeFormat":1},{"version":"8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";","signature":"4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n","impliedNodeFormat":1},{"version":"0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";","signature":"f614ffe60290b2d15ae0fd0b4ce7ba1d-export { left } from \"./left\";\nexport { right } from \"./right\";\n","impliedNodeFormat":1},{"version":"3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];","signature":"17897b95b5d22b2e69f98a20dfe4df48-export declare const ids: string[];\n","impliedNodeFormat":1}],"fileIdsList":[[5,6],[3],[7],[2,4,5],[2,4,6]],"options":{"strict":true},"referencedMap":[[7,1],[4,2],[8,3],[6,4],[5,5]],"affectedFilesPendingEmit":[7,4,2,8,6,3,5]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./hub.ts", + "./model.ts", + "./factory.ts", + "./right.ts", + "./left.ts", + "./barrel.ts", + "./index.ts" + ], + "original": [ + 2, + 8 + ] + } + ], + "fileNames": [ + "lib.es2026.full.d.ts", + "./hub.ts", + "./model.ts", + "./factory.ts", + "./right.ts", + "./left.ts", + "./barrel.ts", + "./index.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2026.full.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./hub.ts", + "version": "df41fd128159de07c8cd657d90367a14-export const prefix = \"hub\";\n// first edit\n\n// second edit\n", + "signature": "eee9e59e027e6765a0d5610b039f5e8a-export declare const prefix = \"hub\";\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "df41fd128159de07c8cd657d90367a14-export const prefix = \"hub\";\n// first edit\n\n// second edit\n", + "signature": "eee9e59e027e6765a0d5610b039f5e8a-export declare const prefix = \"hub\";\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./model.ts", + "version": "c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }", + "signature": "c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./factory.ts", + "version": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", + "signature": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./right.ts", + "version": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", + "signature": "5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", + "signature": "5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./left.ts", + "version": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", + "signature": "4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", + "signature": "4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./barrel.ts", + "version": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", + "signature": "f614ffe60290b2d15ae0fd0b4ce7ba1d-export { left } from \"./left\";\nexport { right } from \"./right\";\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", + "signature": "f614ffe60290b2d15ae0fd0b4ce7ba1d-export { left } from \"./left\";\nexport { right } from \"./right\";\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./index.ts", + "version": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", + "signature": "17897b95b5d22b2e69f98a20dfe4df48-export declare const ids: string[];\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", + "signature": "17897b95b5d22b2e69f98a20dfe4df48-export declare const ids: string[];\n", + "impliedNodeFormat": 1 + } + } + ], + "fileIdsList": [ + [ + "./right.ts", + "./left.ts" + ], + [ + "./model.ts" + ], + [ + "./barrel.ts" + ], + [ + "./hub.ts", + "./factory.ts", + "./right.ts" + ], + [ + "./hub.ts", + "./factory.ts", + "./left.ts" + ] + ], + "options": { + "strict": true + }, + "referencedMap": { + "./barrel.ts": [ + "./right.ts", + "./left.ts" + ], + "./factory.ts": [ + "./model.ts" + ], + "./index.ts": [ + "./barrel.ts" + ], + "./left.ts": [ + "./hub.ts", + "./factory.ts", + "./right.ts" + ], + "./right.ts": [ + "./hub.ts", + "./factory.ts", + "./left.ts" + ] + }, + "affectedFilesPendingEmit": [ + [ + "./barrel.ts", + "Js", + 7 + ], + [ + "./factory.ts", + "Js", + 4 + ], + [ + "./hub.ts", + "Js", + 2 + ], + [ + "./index.ts", + "Js", + 8 + ], + [ + "./left.ts", + "Js", + 6 + ], + [ + "./model.ts", + "Js", + 3 + ], + [ + "./right.ts", + "Js", + 5 + ] + ], + "size": 2735 +} + +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/workspaces/project/hub.ts +Signatures:: +(computed .d.ts) /home/src/workspaces/project/hub.ts + + +Edit [3]:: change the shared value type +//// [/home/src/workspaces/project/hub.ts] *modified* +export const prefix = 10; +// first edit + +// second edit + + +tsgo +ExitStatus:: DiagnosticsPresent_OutputsGenerated +Output:: +left.ts:1:92 - error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. + +1 import { prefix } from "./hub"; import { make } from "./factory"; export const left = make(prefix); export { right } from "./right"; +   ~~~~~~ + +right.ts:1:93 - error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. + +1 import { prefix } from "./hub"; import { make } from "./factory"; export const right = make(prefix); export { left } from "./left"; +   ~~~~~~ + + +Found 2 errors in 2 files. + +Errors Files + 1 left.ts:1 + 1 right.ts:1 + +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* +{"version":"FakeTSVersion","root":[[2,8]],"fileNames":["lib.es2026.full.d.ts","./hub.ts","./model.ts","./factory.ts","./right.ts","./left.ts","./barrel.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"7a581f3c32763bd712056d8cf58fc0b0-export const prefix = 10;\n// first edit\n\n// second edit\n","signature":"a434d648ec62f01f82ba7bc6df302f43-export declare const prefix = 10;\n","impliedNodeFormat":1},"c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }","8c035626178906db4f73ee993640fecd-export { make } from \"./model\";",{"version":"07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";","signature":"5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n","impliedNodeFormat":1},{"version":"8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";","signature":"4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n","impliedNodeFormat":1},"0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";","3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];"],"fileIdsList":[[5,6],[3],[7],[2,4,5],[2,4,6]],"options":{"strict":true},"referencedMap":[[7,1],[4,2],[8,3],[6,4],[5,5]],"semanticDiagnosticsPerFile":[[5,[{"pos":92,"end":98,"code":2345,"category":1,"messageKey":"Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345","messageArgs":["number","string"]}]],[6,[{"pos":91,"end":97,"code":2345,"category":1,"messageKey":"Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345","messageArgs":["number","string"]}]]],"affectedFilesPendingEmit":[7,4,2,8,6,3,5]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./hub.ts", + "./model.ts", + "./factory.ts", + "./right.ts", + "./left.ts", + "./barrel.ts", + "./index.ts" + ], + "original": [ + 2, + 8 + ] + } + ], + "fileNames": [ + "lib.es2026.full.d.ts", + "./hub.ts", + "./model.ts", + "./factory.ts", + "./right.ts", + "./left.ts", + "./barrel.ts", + "./index.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2026.full.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./hub.ts", + "version": "7a581f3c32763bd712056d8cf58fc0b0-export const prefix = 10;\n// first edit\n\n// second edit\n", + "signature": "a434d648ec62f01f82ba7bc6df302f43-export declare const prefix = 10;\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "7a581f3c32763bd712056d8cf58fc0b0-export const prefix = 10;\n// first edit\n\n// second edit\n", + "signature": "a434d648ec62f01f82ba7bc6df302f43-export declare const prefix = 10;\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./model.ts", + "version": "c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }", + "signature": "c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./factory.ts", + "version": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", + "signature": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./right.ts", + "version": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", + "signature": "5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", + "signature": "5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./left.ts", + "version": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", + "signature": "4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", + "signature": "4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./barrel.ts", + "version": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", + "signature": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./index.ts", + "version": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", + "signature": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", + "impliedNodeFormat": "CommonJS" + } + ], + "fileIdsList": [ + [ + "./right.ts", + "./left.ts" + ], + [ + "./model.ts" + ], + [ + "./barrel.ts" + ], + [ + "./hub.ts", + "./factory.ts", + "./right.ts" + ], + [ + "./hub.ts", + "./factory.ts", + "./left.ts" + ] + ], + "options": { + "strict": true + }, + "referencedMap": { + "./barrel.ts": [ + "./right.ts", + "./left.ts" + ], + "./factory.ts": [ + "./model.ts" + ], + "./index.ts": [ + "./barrel.ts" + ], + "./left.ts": [ + "./hub.ts", + "./factory.ts", + "./right.ts" + ], + "./right.ts": [ + "./hub.ts", + "./factory.ts", + "./left.ts" + ] + }, + "semanticDiagnosticsPerFile": [ + [ + "./right.ts", + [ + { + "pos": 92, + "end": 98, + "code": 2345, + "category": 1, + "messageKey": "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345", + "messageArgs": [ + "number", + "string" + ] + } + ] + ], + [ + "./left.ts", + [ + { + "pos": 91, + "end": 97, + "code": 2345, + "category": 1, + "messageKey": "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345", + "messageArgs": [ + "number", + "string" + ] + } + ] + ] + ], + "affectedFilesPendingEmit": [ + [ + "./barrel.ts", + "Js", + 7 + ], + [ + "./factory.ts", + "Js", + 4 + ], + [ + "./hub.ts", + "Js", + 2 + ], + [ + "./index.ts", + "Js", + 8 + ], + [ + "./left.ts", + "Js", + 6 + ], + [ + "./model.ts", + "Js", + 3 + ], + [ + "./right.ts", + "Js", + 5 + ] + ], + "size": 2815 +} + +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/workspaces/project/hub.ts +*refresh* /home/src/workspaces/project/right.ts +*refresh* /home/src/workspaces/project/left.ts +*refresh* /home/src/workspaces/project/barrel.ts +*refresh* /home/src/workspaces/project/index.ts +Signatures:: +(computed .d.ts) /home/src/workspaces/project/hub.ts +(computed .d.ts) /home/src/workspaces/project/right.ts +(computed .d.ts) /home/src/workspaces/project/left.ts +(used version) /home/src/workspaces/project/barrel.ts +(used version) /home/src/workspaces/project/index.ts + + +Edit [4]:: change the inferred type through the barrel +//// [/home/src/workspaces/project/model.ts] *modified* +export interface Model { id: number; } export function make(id: number): Model { return { id }; } + +tsgo +ExitStatus:: DiagnosticsPresent_OutputsGenerated +Output:: +index.ts:1:71 - error TS2322: Type 'number' is not assignable to type 'string'. + +1 import { left, right } from "./barrel"; export const ids: string[] = [left.id, right.id]; +   ~~~~~~~ + +index.ts:1:80 - error TS2322: Type 'number' is not assignable to type 'string'. + +1 import { left, right } from "./barrel"; export const ids: string[] = [left.id, right.id]; +   ~~~~~~~~ + + +Found 2 errors in the same file, starting at: index.ts:1 + +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* +{"version":"FakeTSVersion","root":[[2,8]],"fileNames":["lib.es2026.full.d.ts","./hub.ts","./model.ts","./factory.ts","./right.ts","./left.ts","./barrel.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"7a581f3c32763bd712056d8cf58fc0b0-export const prefix = 10;\n// first edit\n\n// second edit\n","signature":"a434d648ec62f01f82ba7bc6df302f43-export declare const prefix = 10;\n","impliedNodeFormat":1},{"version":"a5bcf1db41c7b2b195764099f803185d-export interface Model { id: number; } export function make(id: number): Model { return { id }; }","signature":"755c74df06b876a52b12daa9bd085134-export interface Model {\n id: number;\n}\nexport declare function make(id: number): Model;\n","impliedNodeFormat":1},{"version":"8c035626178906db4f73ee993640fecd-export { make } from \"./model\";","signature":"8bc5b2140b7efd4a238218fee9ed0bed-export { make } from \"./model\";\n","impliedNodeFormat":1},{"version":"07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";","signature":"5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n","impliedNodeFormat":1},{"version":"8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";","signature":"4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n","impliedNodeFormat":1},"0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";","3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];"],"fileIdsList":[[5,6],[3],[7],[2,4,5],[2,4,6]],"options":{"strict":true},"referencedMap":[[7,1],[4,2],[8,3],[6,4],[5,5]],"semanticDiagnosticsPerFile":[[8,[{"pos":70,"end":77,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["number","string"]},{"pos":79,"end":87,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["number","string"]}]]],"affectedFilesPendingEmit":[7,4,2,8,6,3,5]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./hub.ts", + "./model.ts", + "./factory.ts", + "./right.ts", + "./left.ts", + "./barrel.ts", + "./index.ts" + ], + "original": [ + 2, + 8 + ] + } + ], + "fileNames": [ + "lib.es2026.full.d.ts", + "./hub.ts", + "./model.ts", + "./factory.ts", + "./right.ts", + "./left.ts", + "./barrel.ts", + "./index.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2026.full.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./hub.ts", + "version": "7a581f3c32763bd712056d8cf58fc0b0-export const prefix = 10;\n// first edit\n\n// second edit\n", + "signature": "a434d648ec62f01f82ba7bc6df302f43-export declare const prefix = 10;\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "7a581f3c32763bd712056d8cf58fc0b0-export const prefix = 10;\n// first edit\n\n// second edit\n", + "signature": "a434d648ec62f01f82ba7bc6df302f43-export declare const prefix = 10;\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./model.ts", + "version": "a5bcf1db41c7b2b195764099f803185d-export interface Model { id: number; } export function make(id: number): Model { return { id }; }", + "signature": "755c74df06b876a52b12daa9bd085134-export interface Model {\n id: number;\n}\nexport declare function make(id: number): Model;\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "a5bcf1db41c7b2b195764099f803185d-export interface Model { id: number; } export function make(id: number): Model { return { id }; }", + "signature": "755c74df06b876a52b12daa9bd085134-export interface Model {\n id: number;\n}\nexport declare function make(id: number): Model;\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./factory.ts", + "version": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", + "signature": "8bc5b2140b7efd4a238218fee9ed0bed-export { make } from \"./model\";\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", + "signature": "8bc5b2140b7efd4a238218fee9ed0bed-export { make } from \"./model\";\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./right.ts", + "version": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", + "signature": "5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", + "signature": "5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./left.ts", + "version": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", + "signature": "4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", + "signature": "4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./barrel.ts", + "version": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", + "signature": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./index.ts", + "version": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", + "signature": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", + "impliedNodeFormat": "CommonJS" + } + ], + "fileIdsList": [ + [ + "./right.ts", + "./left.ts" + ], + [ + "./model.ts" + ], + [ + "./barrel.ts" + ], + [ + "./hub.ts", + "./factory.ts", + "./right.ts" + ], + [ + "./hub.ts", + "./factory.ts", + "./left.ts" + ] + ], + "options": { + "strict": true + }, + "referencedMap": { + "./barrel.ts": [ + "./right.ts", + "./left.ts" + ], + "./factory.ts": [ + "./model.ts" + ], + "./index.ts": [ + "./barrel.ts" + ], + "./left.ts": [ + "./hub.ts", + "./factory.ts", + "./right.ts" + ], + "./right.ts": [ + "./hub.ts", + "./factory.ts", + "./left.ts" + ] + }, + "semanticDiagnosticsPerFile": [ + [ + "./index.ts", + [ + { + "pos": 70, + "end": 77, + "code": 2322, + "category": 1, + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "number", + "string" + ] + }, + { + "pos": 79, + "end": 87, + "code": 2322, + "category": 1, + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "number", + "string" + ] + } + ] + ] + ], + "affectedFilesPendingEmit": [ + [ + "./barrel.ts", + "Js", + 7 + ], + [ + "./factory.ts", + "Js", + 4 + ], + [ + "./hub.ts", + "Js", + 2 + ], + [ + "./index.ts", + "Js", + 8 + ], + [ + "./left.ts", + "Js", + 6 + ], + [ + "./model.ts", + "Js", + 3 + ], + [ + "./right.ts", + "Js", + 5 + ] + ], + "size": 3054 +} + +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/workspaces/project/model.ts +*refresh* /home/src/workspaces/project/factory.ts +*refresh* /home/src/workspaces/project/right.ts +*refresh* /home/src/workspaces/project/left.ts +*refresh* /home/src/workspaces/project/barrel.ts +*refresh* /home/src/workspaces/project/index.ts +Signatures:: +(computed .d.ts) /home/src/workspaces/project/model.ts +(computed .d.ts) /home/src/workspaces/project/factory.ts +(computed .d.ts) /home/src/workspaces/project/right.ts +(computed .d.ts) /home/src/workspaces/project/left.ts +(used version) /home/src/workspaces/project/barrel.ts +(used version) /home/src/workspaces/project/index.ts + + +Edit [5]:: restore both shared dependencies +//// [/home/src/workspaces/project/hub.ts] *modified* +export const prefix = "hub"; +// first edit + +// second edit + +//// [/home/src/workspaces/project/model.ts] *modified* +export interface Model { id: string; } export function make(id: string): Model { return { id }; } + +tsgo +ExitStatus:: Success +Output:: +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* +{"version":"FakeTSVersion","root":[[2,8]],"fileNames":["lib.es2026.full.d.ts","./hub.ts","./model.ts","./factory.ts","./right.ts","./left.ts","./barrel.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"df41fd128159de07c8cd657d90367a14-export const prefix = \"hub\";\n// first edit\n\n// second edit\n","signature":"eee9e59e027e6765a0d5610b039f5e8a-export declare const prefix = \"hub\";\n","impliedNodeFormat":1},{"version":"c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }","signature":"c7653311ee886021d70d18d464ff2d71-export interface Model {\n id: string;\n}\nexport declare function make(id: string): Model;\n","impliedNodeFormat":1},{"version":"8c035626178906db4f73ee993640fecd-export { make } from \"./model\";","signature":"8bc5b2140b7efd4a238218fee9ed0bed-export { make } from \"./model\";\n","impliedNodeFormat":1},{"version":"07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";","signature":"5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n","impliedNodeFormat":1},{"version":"8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";","signature":"4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n","impliedNodeFormat":1},"0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";","3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];"],"fileIdsList":[[5,6],[3],[7],[2,4,5],[2,4,6]],"options":{"strict":true},"referencedMap":[[7,1],[4,2],[8,3],[6,4],[5,5]],"affectedFilesPendingEmit":[7,4,2,8,6,3,5]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./hub.ts", + "./model.ts", + "./factory.ts", + "./right.ts", + "./left.ts", + "./barrel.ts", + "./index.ts" + ], + "original": [ + 2, + 8 + ] + } + ], + "fileNames": [ + "lib.es2026.full.d.ts", + "./hub.ts", + "./model.ts", + "./factory.ts", + "./right.ts", + "./left.ts", + "./barrel.ts", + "./index.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2026.full.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./hub.ts", + "version": "df41fd128159de07c8cd657d90367a14-export const prefix = \"hub\";\n// first edit\n\n// second edit\n", + "signature": "eee9e59e027e6765a0d5610b039f5e8a-export declare const prefix = \"hub\";\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "df41fd128159de07c8cd657d90367a14-export const prefix = \"hub\";\n// first edit\n\n// second edit\n", + "signature": "eee9e59e027e6765a0d5610b039f5e8a-export declare const prefix = \"hub\";\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./model.ts", + "version": "c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }", + "signature": "c7653311ee886021d70d18d464ff2d71-export interface Model {\n id: string;\n}\nexport declare function make(id: string): Model;\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }", + "signature": "c7653311ee886021d70d18d464ff2d71-export interface Model {\n id: string;\n}\nexport declare function make(id: string): Model;\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./factory.ts", + "version": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", + "signature": "8bc5b2140b7efd4a238218fee9ed0bed-export { make } from \"./model\";\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", + "signature": "8bc5b2140b7efd4a238218fee9ed0bed-export { make } from \"./model\";\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./right.ts", + "version": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", + "signature": "5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", + "signature": "5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./left.ts", + "version": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", + "signature": "4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", + "signature": "4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./barrel.ts", + "version": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", + "signature": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./index.ts", + "version": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", + "signature": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", + "impliedNodeFormat": "CommonJS" + } + ], + "fileIdsList": [ + [ + "./right.ts", + "./left.ts" + ], + [ + "./model.ts" + ], + [ + "./barrel.ts" + ], + [ + "./hub.ts", + "./factory.ts", + "./right.ts" + ], + [ + "./hub.ts", + "./factory.ts", + "./left.ts" + ] + ], + "options": { + "strict": true + }, + "referencedMap": { + "./barrel.ts": [ + "./right.ts", + "./left.ts" + ], + "./factory.ts": [ + "./model.ts" + ], + "./index.ts": [ + "./barrel.ts" + ], + "./left.ts": [ + "./hub.ts", + "./factory.ts", + "./right.ts" + ], + "./right.ts": [ + "./hub.ts", + "./factory.ts", + "./left.ts" + ] + }, + "affectedFilesPendingEmit": [ + [ + "./barrel.ts", + "Js", + 7 + ], + [ + "./factory.ts", + "Js", + 4 + ], + [ + "./hub.ts", + "Js", + 2 + ], + [ + "./index.ts", + "Js", + 8 + ], + [ + "./left.ts", + "Js", + 6 + ], + [ + "./model.ts", + "Js", + 3 + ], + [ + "./right.ts", + "Js", + 5 + ] + ], + "size": 2759 +} + +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/workspaces/project/hub.ts +*refresh* /home/src/workspaces/project/model.ts +*refresh* /home/src/workspaces/project/factory.ts +*refresh* /home/src/workspaces/project/right.ts +*refresh* /home/src/workspaces/project/left.ts +*refresh* /home/src/workspaces/project/barrel.ts +*refresh* /home/src/workspaces/project/index.ts +Signatures:: +(computed .d.ts) /home/src/workspaces/project/hub.ts +(computed .d.ts) /home/src/workspaces/project/model.ts +(computed .d.ts) /home/src/workspaces/project/factory.ts +(computed .d.ts) /home/src/workspaces/project/right.ts +(computed .d.ts) /home/src/workspaces/project/left.ts +(used version) /home/src/workspaces/project/barrel.ts +(used version) /home/src/workspaces/project/index.ts diff --git a/tsc/testdata/baselines/reference/tscWatch/incremental/shared-dependency-with-inferred-types.js b/tsc/testdata/baselines/reference/tscWatch/incremental/shared-dependency-with-inferred-types.js new file mode 100644 index 0000000000000..cb9b7468cd73c --- /dev/null +++ b/tsc/testdata/baselines/reference/tscWatch/incremental/shared-dependency-with-inferred-types.js @@ -0,0 +1,1504 @@ +currentDirectory::/home/src/workspaces/project +useCaseSensitiveFileNames::true +Input:: +//// [/home/src/workspaces/project/barrel.ts] *new* +export { left } from "./left"; export { right } from "./right"; +//// [/home/src/workspaces/project/factory.ts] *new* +export { make } from "./model"; +//// [/home/src/workspaces/project/hub.ts] *new* +export const prefix = "hub"; +//// [/home/src/workspaces/project/index.ts] *new* +import { left, right } from "./barrel"; export const ids: string[] = [left.id, right.id]; +//// [/home/src/workspaces/project/left.ts] *new* +import { prefix } from "./hub"; import { make } from "./factory"; export const left = make(prefix); export { right } from "./right"; +//// [/home/src/workspaces/project/model.ts] *new* +export interface Model { id: string; } export function make(id: string): Model { return { id }; } +//// [/home/src/workspaces/project/right.ts] *new* +import { prefix } from "./hub"; import { make } from "./factory"; export const right = make(prefix); export { left } from "./left"; +//// [/home/src/workspaces/project/tsconfig.json] *new* +{"compilerOptions":{"strict":true,"noEmit":true,"incremental":true}} + +tsgo --watch +ExitStatus:: Success +Output:: +[HH:MM:SS AM] Starting compilation in watch mode... + +[HH:MM:SS AM] Found 0 errors. Watching for file changes. + +//// [/home/src/tslibs/TS/Lib/lib.es2026.full.d.ts] *Lib* +/// +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; } +interface ReadonlyArray {} +interface SymbolConstructor { + (desc?: string | number): symbol; + for(name: string): symbol; + readonly toStringTag: symbol; +} +declare var Symbol: SymbolConstructor; +interface Symbol { + readonly [Symbol.toStringTag]: string; +} +declare const console: { log(msg: any): void; }; +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *new* +{"version":"FakeTSVersion","root":[[2,8]],"fileNames":["lib.es2026.full.d.ts","./hub.ts","./model.ts","./factory.ts","./right.ts","./left.ts","./barrel.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"e69fd43859d508fe2d52ada7fe216c06-export const prefix = \"hub\";","c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }","8c035626178906db4f73ee993640fecd-export { make } from \"./model\";","07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";","8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";","0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";","3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];"],"fileIdsList":[[5,6],[3],[7],[2,4,5],[2,4,6]],"options":{"strict":true},"referencedMap":[[7,1],[4,2],[8,3],[6,4],[5,5]],"affectedFilesPendingEmit":[7,4,2,8,6,3,5]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *new* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./hub.ts", + "./model.ts", + "./factory.ts", + "./right.ts", + "./left.ts", + "./barrel.ts", + "./index.ts" + ], + "original": [ + 2, + 8 + ] + } + ], + "fileNames": [ + "lib.es2026.full.d.ts", + "./hub.ts", + "./model.ts", + "./factory.ts", + "./right.ts", + "./left.ts", + "./barrel.ts", + "./index.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2026.full.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./hub.ts", + "version": "e69fd43859d508fe2d52ada7fe216c06-export const prefix = \"hub\";", + "signature": "e69fd43859d508fe2d52ada7fe216c06-export const prefix = \"hub\";", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./model.ts", + "version": "c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }", + "signature": "c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./factory.ts", + "version": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", + "signature": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./right.ts", + "version": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", + "signature": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./left.ts", + "version": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", + "signature": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./barrel.ts", + "version": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", + "signature": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./index.ts", + "version": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", + "signature": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", + "impliedNodeFormat": "CommonJS" + } + ], + "fileIdsList": [ + [ + "./right.ts", + "./left.ts" + ], + [ + "./model.ts" + ], + [ + "./barrel.ts" + ], + [ + "./hub.ts", + "./factory.ts", + "./right.ts" + ], + [ + "./hub.ts", + "./factory.ts", + "./left.ts" + ] + ], + "options": { + "strict": true + }, + "referencedMap": { + "./barrel.ts": [ + "./right.ts", + "./left.ts" + ], + "./factory.ts": [ + "./model.ts" + ], + "./index.ts": [ + "./barrel.ts" + ], + "./left.ts": [ + "./hub.ts", + "./factory.ts", + "./right.ts" + ], + "./right.ts": [ + "./hub.ts", + "./factory.ts", + "./left.ts" + ] + }, + "affectedFilesPendingEmit": [ + [ + "./barrel.ts", + "Js", + 7 + ], + [ + "./factory.ts", + "Js", + 4 + ], + [ + "./hub.ts", + "Js", + 2 + ], + [ + "./index.ts", + "Js", + 8 + ], + [ + "./left.ts", + "Js", + 6 + ], + [ + "./model.ts", + "Js", + 3 + ], + [ + "./right.ts", + "Js", + 5 + ] + ], + "size": 1962 +} + +Watch Registrations:: +Directory watches:: + /home/src/tslibs/TS/Lib + /home/src/workspaces/project (recursive) +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/tslibs/TS/Lib/lib.es2026.full.d.ts +*refresh* /home/src/workspaces/project/hub.ts +*refresh* /home/src/workspaces/project/model.ts +*refresh* /home/src/workspaces/project/factory.ts +*refresh* /home/src/workspaces/project/right.ts +*refresh* /home/src/workspaces/project/left.ts +*refresh* /home/src/workspaces/project/barrel.ts +*refresh* /home/src/workspaces/project/index.ts +Signatures:: + + +Edit [0]:: no change + + +Output:: + +Watch Registrations:: +Directory watches:: + /home/src/tslibs/TS/Lib + /home/src/workspaces/project (recursive) +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/tslibs/TS/Lib/lib.es2026.full.d.ts +*refresh* /home/src/workspaces/project/hub.ts +*refresh* /home/src/workspaces/project/model.ts +*refresh* /home/src/workspaces/project/factory.ts +*refresh* /home/src/workspaces/project/right.ts +*refresh* /home/src/workspaces/project/left.ts +*refresh* /home/src/workspaces/project/barrel.ts +*refresh* /home/src/workspaces/project/index.ts +Signatures:: + + +Edit [1]:: first comment only edit +//// [/home/src/workspaces/project/hub.ts] *modified* +export const prefix = "hub"; +// first edit + + + +Output:: +[HH:MM:SS AM] File change detected. Starting incremental compilation... + +[HH:MM:SS AM] Found 0 errors. Watching for file changes. + +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* +{"version":"FakeTSVersion","root":[[2,8]],"fileNames":["lib.es2026.full.d.ts","./hub.ts","./model.ts","./factory.ts","./right.ts","./left.ts","./barrel.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"0cc5c48d027554ce2074931a1f2ea370-export const prefix = \"hub\";\n// first edit\n","signature":"eee9e59e027e6765a0d5610b039f5e8a-export declare const prefix = \"hub\";\n","impliedNodeFormat":1},"c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }","8c035626178906db4f73ee993640fecd-export { make } from \"./model\";",{"version":"07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";","signature":"5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n","impliedNodeFormat":1},{"version":"8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";","signature":"4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n","impliedNodeFormat":1},{"version":"0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";","signature":"f614ffe60290b2d15ae0fd0b4ce7ba1d-export { left } from \"./left\";\nexport { right } from \"./right\";\n","impliedNodeFormat":1},{"version":"3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];","signature":"17897b95b5d22b2e69f98a20dfe4df48-export declare const ids: string[];\n","impliedNodeFormat":1}],"fileIdsList":[[5,6],[3],[7],[2,4,5],[2,4,6]],"options":{"strict":true},"referencedMap":[[7,1],[4,2],[8,3],[6,4],[5,5]],"affectedFilesPendingEmit":[7,4,2,8,6,3,5]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./hub.ts", + "./model.ts", + "./factory.ts", + "./right.ts", + "./left.ts", + "./barrel.ts", + "./index.ts" + ], + "original": [ + 2, + 8 + ] + } + ], + "fileNames": [ + "lib.es2026.full.d.ts", + "./hub.ts", + "./model.ts", + "./factory.ts", + "./right.ts", + "./left.ts", + "./barrel.ts", + "./index.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2026.full.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./hub.ts", + "version": "0cc5c48d027554ce2074931a1f2ea370-export const prefix = \"hub\";\n// first edit\n", + "signature": "eee9e59e027e6765a0d5610b039f5e8a-export declare const prefix = \"hub\";\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "0cc5c48d027554ce2074931a1f2ea370-export const prefix = \"hub\";\n// first edit\n", + "signature": "eee9e59e027e6765a0d5610b039f5e8a-export declare const prefix = \"hub\";\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./model.ts", + "version": "c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }", + "signature": "c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./factory.ts", + "version": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", + "signature": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./right.ts", + "version": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", + "signature": "5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", + "signature": "5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./left.ts", + "version": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", + "signature": "4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", + "signature": "4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./barrel.ts", + "version": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", + "signature": "f614ffe60290b2d15ae0fd0b4ce7ba1d-export { left } from \"./left\";\nexport { right } from \"./right\";\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", + "signature": "f614ffe60290b2d15ae0fd0b4ce7ba1d-export { left } from \"./left\";\nexport { right } from \"./right\";\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./index.ts", + "version": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", + "signature": "17897b95b5d22b2e69f98a20dfe4df48-export declare const ids: string[];\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", + "signature": "17897b95b5d22b2e69f98a20dfe4df48-export declare const ids: string[];\n", + "impliedNodeFormat": 1 + } + } + ], + "fileIdsList": [ + [ + "./right.ts", + "./left.ts" + ], + [ + "./model.ts" + ], + [ + "./barrel.ts" + ], + [ + "./hub.ts", + "./factory.ts", + "./right.ts" + ], + [ + "./hub.ts", + "./factory.ts", + "./left.ts" + ] + ], + "options": { + "strict": true + }, + "referencedMap": { + "./barrel.ts": [ + "./right.ts", + "./left.ts" + ], + "./factory.ts": [ + "./model.ts" + ], + "./index.ts": [ + "./barrel.ts" + ], + "./left.ts": [ + "./hub.ts", + "./factory.ts", + "./right.ts" + ], + "./right.ts": [ + "./hub.ts", + "./factory.ts", + "./left.ts" + ] + }, + "affectedFilesPendingEmit": [ + [ + "./barrel.ts", + "Js", + 7 + ], + [ + "./factory.ts", + "Js", + 4 + ], + [ + "./hub.ts", + "Js", + 2 + ], + [ + "./index.ts", + "Js", + 8 + ], + [ + "./left.ts", + "Js", + 6 + ], + [ + "./model.ts", + "Js", + 3 + ], + [ + "./right.ts", + "Js", + 5 + ] + ], + "size": 2717 +} + +Watch Registrations:: +Directory watches:: + /home/src/tslibs/TS/Lib + /home/src/workspaces/project (recursive) +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/workspaces/project/hub.ts +*refresh* /home/src/workspaces/project/right.ts +*refresh* /home/src/workspaces/project/left.ts +*refresh* /home/src/workspaces/project/barrel.ts +*refresh* /home/src/workspaces/project/index.ts +Signatures:: +(computed .d.ts) /home/src/workspaces/project/hub.ts +(computed .d.ts) /home/src/workspaces/project/right.ts +(computed .d.ts) /home/src/workspaces/project/left.ts +(computed .d.ts) /home/src/workspaces/project/barrel.ts +(computed .d.ts) /home/src/workspaces/project/index.ts + + +Edit [2]:: second comment only edit +//// [/home/src/workspaces/project/hub.ts] *modified* +export const prefix = "hub"; +// first edit + +// second edit + + + +Output:: +[HH:MM:SS AM] File change detected. Starting incremental compilation... + +[HH:MM:SS AM] Found 0 errors. Watching for file changes. + +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* +{"version":"FakeTSVersion","root":[[2,8]],"fileNames":["lib.es2026.full.d.ts","./hub.ts","./model.ts","./factory.ts","./right.ts","./left.ts","./barrel.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"df41fd128159de07c8cd657d90367a14-export const prefix = \"hub\";\n// first edit\n\n// second edit\n","signature":"eee9e59e027e6765a0d5610b039f5e8a-export declare const prefix = \"hub\";\n","impliedNodeFormat":1},"c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }","8c035626178906db4f73ee993640fecd-export { make } from \"./model\";",{"version":"07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";","signature":"5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n","impliedNodeFormat":1},{"version":"8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";","signature":"4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n","impliedNodeFormat":1},{"version":"0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";","signature":"f614ffe60290b2d15ae0fd0b4ce7ba1d-export { left } from \"./left\";\nexport { right } from \"./right\";\n","impliedNodeFormat":1},{"version":"3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];","signature":"17897b95b5d22b2e69f98a20dfe4df48-export declare const ids: string[];\n","impliedNodeFormat":1}],"fileIdsList":[[5,6],[3],[7],[2,4,5],[2,4,6]],"options":{"strict":true},"referencedMap":[[7,1],[4,2],[8,3],[6,4],[5,5]],"affectedFilesPendingEmit":[7,4,2,8,6,3,5]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./hub.ts", + "./model.ts", + "./factory.ts", + "./right.ts", + "./left.ts", + "./barrel.ts", + "./index.ts" + ], + "original": [ + 2, + 8 + ] + } + ], + "fileNames": [ + "lib.es2026.full.d.ts", + "./hub.ts", + "./model.ts", + "./factory.ts", + "./right.ts", + "./left.ts", + "./barrel.ts", + "./index.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2026.full.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./hub.ts", + "version": "df41fd128159de07c8cd657d90367a14-export const prefix = \"hub\";\n// first edit\n\n// second edit\n", + "signature": "eee9e59e027e6765a0d5610b039f5e8a-export declare const prefix = \"hub\";\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "df41fd128159de07c8cd657d90367a14-export const prefix = \"hub\";\n// first edit\n\n// second edit\n", + "signature": "eee9e59e027e6765a0d5610b039f5e8a-export declare const prefix = \"hub\";\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./model.ts", + "version": "c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }", + "signature": "c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./factory.ts", + "version": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", + "signature": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./right.ts", + "version": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", + "signature": "5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", + "signature": "5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./left.ts", + "version": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", + "signature": "4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", + "signature": "4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./barrel.ts", + "version": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", + "signature": "f614ffe60290b2d15ae0fd0b4ce7ba1d-export { left } from \"./left\";\nexport { right } from \"./right\";\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", + "signature": "f614ffe60290b2d15ae0fd0b4ce7ba1d-export { left } from \"./left\";\nexport { right } from \"./right\";\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./index.ts", + "version": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", + "signature": "17897b95b5d22b2e69f98a20dfe4df48-export declare const ids: string[];\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", + "signature": "17897b95b5d22b2e69f98a20dfe4df48-export declare const ids: string[];\n", + "impliedNodeFormat": 1 + } + } + ], + "fileIdsList": [ + [ + "./right.ts", + "./left.ts" + ], + [ + "./model.ts" + ], + [ + "./barrel.ts" + ], + [ + "./hub.ts", + "./factory.ts", + "./right.ts" + ], + [ + "./hub.ts", + "./factory.ts", + "./left.ts" + ] + ], + "options": { + "strict": true + }, + "referencedMap": { + "./barrel.ts": [ + "./right.ts", + "./left.ts" + ], + "./factory.ts": [ + "./model.ts" + ], + "./index.ts": [ + "./barrel.ts" + ], + "./left.ts": [ + "./hub.ts", + "./factory.ts", + "./right.ts" + ], + "./right.ts": [ + "./hub.ts", + "./factory.ts", + "./left.ts" + ] + }, + "affectedFilesPendingEmit": [ + [ + "./barrel.ts", + "Js", + 7 + ], + [ + "./factory.ts", + "Js", + 4 + ], + [ + "./hub.ts", + "Js", + 2 + ], + [ + "./index.ts", + "Js", + 8 + ], + [ + "./left.ts", + "Js", + 6 + ], + [ + "./model.ts", + "Js", + 3 + ], + [ + "./right.ts", + "Js", + 5 + ] + ], + "size": 2735 +} + +Watch Registrations:: +Directory watches:: + /home/src/tslibs/TS/Lib + /home/src/workspaces/project (recursive) +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/workspaces/project/hub.ts +Signatures:: +(computed .d.ts) /home/src/workspaces/project/hub.ts + + +Edit [3]:: change the shared value type +//// [/home/src/workspaces/project/hub.ts] *modified* +export const prefix = 10; +// first edit + +// second edit + + + +Output:: +[HH:MM:SS AM] File change detected. Starting incremental compilation... + +left.ts:1:92 - error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. + +1 import { prefix } from "./hub"; import { make } from "./factory"; export const left = make(prefix); export { right } from "./right"; +   ~~~~~~ + +right.ts:1:93 - error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. + +1 import { prefix } from "./hub"; import { make } from "./factory"; export const right = make(prefix); export { left } from "./left"; +   ~~~~~~ + + +Found 2 errors in 2 files. + +Errors Files + 1 left.ts:1 + 1 right.ts:1 + +[HH:MM:SS AM] Found 2 errors. Watching for file changes. + +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* +{"version":"FakeTSVersion","root":[[2,8]],"fileNames":["lib.es2026.full.d.ts","./hub.ts","./model.ts","./factory.ts","./right.ts","./left.ts","./barrel.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"7a581f3c32763bd712056d8cf58fc0b0-export const prefix = 10;\n// first edit\n\n// second edit\n","signature":"a434d648ec62f01f82ba7bc6df302f43-export declare const prefix = 10;\n","impliedNodeFormat":1},"c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }","8c035626178906db4f73ee993640fecd-export { make } from \"./model\";",{"version":"07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";","signature":"5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n","impliedNodeFormat":1},{"version":"8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";","signature":"4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n","impliedNodeFormat":1},"0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";","3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];"],"fileIdsList":[[5,6],[3],[7],[2,4,5],[2,4,6]],"options":{"strict":true},"referencedMap":[[7,1],[4,2],[8,3],[6,4],[5,5]],"semanticDiagnosticsPerFile":[[5,[{"pos":92,"end":98,"code":2345,"category":1,"messageKey":"Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345","messageArgs":["number","string"]}]],[6,[{"pos":91,"end":97,"code":2345,"category":1,"messageKey":"Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345","messageArgs":["number","string"]}]]],"affectedFilesPendingEmit":[7,4,2,8,6,3,5]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./hub.ts", + "./model.ts", + "./factory.ts", + "./right.ts", + "./left.ts", + "./barrel.ts", + "./index.ts" + ], + "original": [ + 2, + 8 + ] + } + ], + "fileNames": [ + "lib.es2026.full.d.ts", + "./hub.ts", + "./model.ts", + "./factory.ts", + "./right.ts", + "./left.ts", + "./barrel.ts", + "./index.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2026.full.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./hub.ts", + "version": "7a581f3c32763bd712056d8cf58fc0b0-export const prefix = 10;\n// first edit\n\n// second edit\n", + "signature": "a434d648ec62f01f82ba7bc6df302f43-export declare const prefix = 10;\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "7a581f3c32763bd712056d8cf58fc0b0-export const prefix = 10;\n// first edit\n\n// second edit\n", + "signature": "a434d648ec62f01f82ba7bc6df302f43-export declare const prefix = 10;\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./model.ts", + "version": "c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }", + "signature": "c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./factory.ts", + "version": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", + "signature": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./right.ts", + "version": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", + "signature": "5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", + "signature": "5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./left.ts", + "version": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", + "signature": "4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", + "signature": "4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./barrel.ts", + "version": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", + "signature": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./index.ts", + "version": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", + "signature": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", + "impliedNodeFormat": "CommonJS" + } + ], + "fileIdsList": [ + [ + "./right.ts", + "./left.ts" + ], + [ + "./model.ts" + ], + [ + "./barrel.ts" + ], + [ + "./hub.ts", + "./factory.ts", + "./right.ts" + ], + [ + "./hub.ts", + "./factory.ts", + "./left.ts" + ] + ], + "options": { + "strict": true + }, + "referencedMap": { + "./barrel.ts": [ + "./right.ts", + "./left.ts" + ], + "./factory.ts": [ + "./model.ts" + ], + "./index.ts": [ + "./barrel.ts" + ], + "./left.ts": [ + "./hub.ts", + "./factory.ts", + "./right.ts" + ], + "./right.ts": [ + "./hub.ts", + "./factory.ts", + "./left.ts" + ] + }, + "semanticDiagnosticsPerFile": [ + [ + "./right.ts", + [ + { + "pos": 92, + "end": 98, + "code": 2345, + "category": 1, + "messageKey": "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345", + "messageArgs": [ + "number", + "string" + ] + } + ] + ], + [ + "./left.ts", + [ + { + "pos": 91, + "end": 97, + "code": 2345, + "category": 1, + "messageKey": "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345", + "messageArgs": [ + "number", + "string" + ] + } + ] + ] + ], + "affectedFilesPendingEmit": [ + [ + "./barrel.ts", + "Js", + 7 + ], + [ + "./factory.ts", + "Js", + 4 + ], + [ + "./hub.ts", + "Js", + 2 + ], + [ + "./index.ts", + "Js", + 8 + ], + [ + "./left.ts", + "Js", + 6 + ], + [ + "./model.ts", + "Js", + 3 + ], + [ + "./right.ts", + "Js", + 5 + ] + ], + "size": 2815 +} + +Watch Registrations:: +Directory watches:: + /home/src/tslibs/TS/Lib + /home/src/workspaces/project (recursive) +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/workspaces/project/hub.ts +*refresh* /home/src/workspaces/project/right.ts +*refresh* /home/src/workspaces/project/left.ts +*refresh* /home/src/workspaces/project/barrel.ts +*refresh* /home/src/workspaces/project/index.ts +Signatures:: +(computed .d.ts) /home/src/workspaces/project/hub.ts +(computed .d.ts) /home/src/workspaces/project/right.ts +(computed .d.ts) /home/src/workspaces/project/left.ts +(used version) /home/src/workspaces/project/barrel.ts +(used version) /home/src/workspaces/project/index.ts + + +Edit [4]:: change the inferred type through the barrel +//// [/home/src/workspaces/project/model.ts] *modified* +export interface Model { id: number; } export function make(id: number): Model { return { id }; } + + +Output:: +[HH:MM:SS AM] File change detected. Starting incremental compilation... + +index.ts:1:71 - error TS2322: Type 'number' is not assignable to type 'string'. + +1 import { left, right } from "./barrel"; export const ids: string[] = [left.id, right.id]; +   ~~~~~~~ + +index.ts:1:80 - error TS2322: Type 'number' is not assignable to type 'string'. + +1 import { left, right } from "./barrel"; export const ids: string[] = [left.id, right.id]; +   ~~~~~~~~ + + +Found 2 errors in the same file, starting at: index.ts:1 + +[HH:MM:SS AM] Found 2 errors. Watching for file changes. + +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* +{"version":"FakeTSVersion","root":[[2,8]],"fileNames":["lib.es2026.full.d.ts","./hub.ts","./model.ts","./factory.ts","./right.ts","./left.ts","./barrel.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"7a581f3c32763bd712056d8cf58fc0b0-export const prefix = 10;\n// first edit\n\n// second edit\n","signature":"a434d648ec62f01f82ba7bc6df302f43-export declare const prefix = 10;\n","impliedNodeFormat":1},{"version":"a5bcf1db41c7b2b195764099f803185d-export interface Model { id: number; } export function make(id: number): Model { return { id }; }","signature":"755c74df06b876a52b12daa9bd085134-export interface Model {\n id: number;\n}\nexport declare function make(id: number): Model;\n","impliedNodeFormat":1},{"version":"8c035626178906db4f73ee993640fecd-export { make } from \"./model\";","signature":"8bc5b2140b7efd4a238218fee9ed0bed-export { make } from \"./model\";\n","impliedNodeFormat":1},{"version":"07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";","signature":"5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n","impliedNodeFormat":1},{"version":"8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";","signature":"4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n","impliedNodeFormat":1},"0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";","3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];"],"fileIdsList":[[5,6],[3],[7],[2,4,5],[2,4,6]],"options":{"strict":true},"referencedMap":[[7,1],[4,2],[8,3],[6,4],[5,5]],"semanticDiagnosticsPerFile":[[8,[{"pos":70,"end":77,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["number","string"]},{"pos":79,"end":87,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["number","string"]}]]],"affectedFilesPendingEmit":[7,4,2,8,6,3,5]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./hub.ts", + "./model.ts", + "./factory.ts", + "./right.ts", + "./left.ts", + "./barrel.ts", + "./index.ts" + ], + "original": [ + 2, + 8 + ] + } + ], + "fileNames": [ + "lib.es2026.full.d.ts", + "./hub.ts", + "./model.ts", + "./factory.ts", + "./right.ts", + "./left.ts", + "./barrel.ts", + "./index.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2026.full.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./hub.ts", + "version": "7a581f3c32763bd712056d8cf58fc0b0-export const prefix = 10;\n// first edit\n\n// second edit\n", + "signature": "a434d648ec62f01f82ba7bc6df302f43-export declare const prefix = 10;\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "7a581f3c32763bd712056d8cf58fc0b0-export const prefix = 10;\n// first edit\n\n// second edit\n", + "signature": "a434d648ec62f01f82ba7bc6df302f43-export declare const prefix = 10;\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./model.ts", + "version": "a5bcf1db41c7b2b195764099f803185d-export interface Model { id: number; } export function make(id: number): Model { return { id }; }", + "signature": "755c74df06b876a52b12daa9bd085134-export interface Model {\n id: number;\n}\nexport declare function make(id: number): Model;\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "a5bcf1db41c7b2b195764099f803185d-export interface Model { id: number; } export function make(id: number): Model { return { id }; }", + "signature": "755c74df06b876a52b12daa9bd085134-export interface Model {\n id: number;\n}\nexport declare function make(id: number): Model;\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./factory.ts", + "version": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", + "signature": "8bc5b2140b7efd4a238218fee9ed0bed-export { make } from \"./model\";\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", + "signature": "8bc5b2140b7efd4a238218fee9ed0bed-export { make } from \"./model\";\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./right.ts", + "version": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", + "signature": "5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", + "signature": "5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./left.ts", + "version": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", + "signature": "4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", + "signature": "4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./barrel.ts", + "version": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", + "signature": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./index.ts", + "version": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", + "signature": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", + "impliedNodeFormat": "CommonJS" + } + ], + "fileIdsList": [ + [ + "./right.ts", + "./left.ts" + ], + [ + "./model.ts" + ], + [ + "./barrel.ts" + ], + [ + "./hub.ts", + "./factory.ts", + "./right.ts" + ], + [ + "./hub.ts", + "./factory.ts", + "./left.ts" + ] + ], + "options": { + "strict": true + }, + "referencedMap": { + "./barrel.ts": [ + "./right.ts", + "./left.ts" + ], + "./factory.ts": [ + "./model.ts" + ], + "./index.ts": [ + "./barrel.ts" + ], + "./left.ts": [ + "./hub.ts", + "./factory.ts", + "./right.ts" + ], + "./right.ts": [ + "./hub.ts", + "./factory.ts", + "./left.ts" + ] + }, + "semanticDiagnosticsPerFile": [ + [ + "./index.ts", + [ + { + "pos": 70, + "end": 77, + "code": 2322, + "category": 1, + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "number", + "string" + ] + }, + { + "pos": 79, + "end": 87, + "code": 2322, + "category": 1, + "messageKey": "Type_0_is_not_assignable_to_type_1_2322", + "messageArgs": [ + "number", + "string" + ] + } + ] + ] + ], + "affectedFilesPendingEmit": [ + [ + "./barrel.ts", + "Js", + 7 + ], + [ + "./factory.ts", + "Js", + 4 + ], + [ + "./hub.ts", + "Js", + 2 + ], + [ + "./index.ts", + "Js", + 8 + ], + [ + "./left.ts", + "Js", + 6 + ], + [ + "./model.ts", + "Js", + 3 + ], + [ + "./right.ts", + "Js", + 5 + ] + ], + "size": 3054 +} + +Watch Registrations:: +Directory watches:: + /home/src/tslibs/TS/Lib + /home/src/workspaces/project (recursive) +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/workspaces/project/model.ts +*refresh* /home/src/workspaces/project/factory.ts +*refresh* /home/src/workspaces/project/right.ts +*refresh* /home/src/workspaces/project/left.ts +*refresh* /home/src/workspaces/project/barrel.ts +*refresh* /home/src/workspaces/project/index.ts +Signatures:: +(computed .d.ts) /home/src/workspaces/project/model.ts +(computed .d.ts) /home/src/workspaces/project/factory.ts +(computed .d.ts) /home/src/workspaces/project/right.ts +(computed .d.ts) /home/src/workspaces/project/left.ts +(used version) /home/src/workspaces/project/barrel.ts +(used version) /home/src/workspaces/project/index.ts + + +Edit [5]:: restore both shared dependencies +//// [/home/src/workspaces/project/hub.ts] *modified* +export const prefix = "hub"; +// first edit + +// second edit + +//// [/home/src/workspaces/project/model.ts] *modified* +export interface Model { id: string; } export function make(id: string): Model { return { id }; } + + +Output:: +[HH:MM:SS AM] File change detected. Starting incremental compilation... + +[HH:MM:SS AM] Found 0 errors. Watching for file changes. + +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* +{"version":"FakeTSVersion","root":[[2,8]],"fileNames":["lib.es2026.full.d.ts","./hub.ts","./model.ts","./factory.ts","./right.ts","./left.ts","./barrel.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"df41fd128159de07c8cd657d90367a14-export const prefix = \"hub\";\n// first edit\n\n// second edit\n","signature":"eee9e59e027e6765a0d5610b039f5e8a-export declare const prefix = \"hub\";\n","impliedNodeFormat":1},{"version":"c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }","signature":"c7653311ee886021d70d18d464ff2d71-export interface Model {\n id: string;\n}\nexport declare function make(id: string): Model;\n","impliedNodeFormat":1},{"version":"8c035626178906db4f73ee993640fecd-export { make } from \"./model\";","signature":"8bc5b2140b7efd4a238218fee9ed0bed-export { make } from \"./model\";\n","impliedNodeFormat":1},{"version":"07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";","signature":"5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n","impliedNodeFormat":1},{"version":"8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";","signature":"4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n","impliedNodeFormat":1},"0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";","3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];"],"fileIdsList":[[5,6],[3],[7],[2,4,5],[2,4,6]],"options":{"strict":true},"referencedMap":[[7,1],[4,2],[8,3],[6,4],[5,5]],"affectedFilesPendingEmit":[7,4,2,8,6,3,5]} +//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* +{ + "version": "FakeTSVersion", + "root": [ + { + "files": [ + "./hub.ts", + "./model.ts", + "./factory.ts", + "./right.ts", + "./left.ts", + "./barrel.ts", + "./index.ts" + ], + "original": [ + 2, + 8 + ] + } + ], + "fileNames": [ + "lib.es2026.full.d.ts", + "./hub.ts", + "./model.ts", + "./factory.ts", + "./right.ts", + "./left.ts", + "./barrel.ts", + "./index.ts" + ], + "fileInfos": [ + { + "fileName": "lib.es2026.full.d.ts", + "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "signature": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", + "affectsGlobalScope": true, + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./hub.ts", + "version": "df41fd128159de07c8cd657d90367a14-export const prefix = \"hub\";\n// first edit\n\n// second edit\n", + "signature": "eee9e59e027e6765a0d5610b039f5e8a-export declare const prefix = \"hub\";\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "df41fd128159de07c8cd657d90367a14-export const prefix = \"hub\";\n// first edit\n\n// second edit\n", + "signature": "eee9e59e027e6765a0d5610b039f5e8a-export declare const prefix = \"hub\";\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./model.ts", + "version": "c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }", + "signature": "c7653311ee886021d70d18d464ff2d71-export interface Model {\n id: string;\n}\nexport declare function make(id: string): Model;\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }", + "signature": "c7653311ee886021d70d18d464ff2d71-export interface Model {\n id: string;\n}\nexport declare function make(id: string): Model;\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./factory.ts", + "version": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", + "signature": "8bc5b2140b7efd4a238218fee9ed0bed-export { make } from \"./model\";\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", + "signature": "8bc5b2140b7efd4a238218fee9ed0bed-export { make } from \"./model\";\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./right.ts", + "version": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", + "signature": "5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", + "signature": "5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./left.ts", + "version": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", + "signature": "4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n", + "impliedNodeFormat": "CommonJS", + "original": { + "version": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", + "signature": "4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n", + "impliedNodeFormat": 1 + } + }, + { + "fileName": "./barrel.ts", + "version": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", + "signature": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", + "impliedNodeFormat": "CommonJS" + }, + { + "fileName": "./index.ts", + "version": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", + "signature": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", + "impliedNodeFormat": "CommonJS" + } + ], + "fileIdsList": [ + [ + "./right.ts", + "./left.ts" + ], + [ + "./model.ts" + ], + [ + "./barrel.ts" + ], + [ + "./hub.ts", + "./factory.ts", + "./right.ts" + ], + [ + "./hub.ts", + "./factory.ts", + "./left.ts" + ] + ], + "options": { + "strict": true + }, + "referencedMap": { + "./barrel.ts": [ + "./right.ts", + "./left.ts" + ], + "./factory.ts": [ + "./model.ts" + ], + "./index.ts": [ + "./barrel.ts" + ], + "./left.ts": [ + "./hub.ts", + "./factory.ts", + "./right.ts" + ], + "./right.ts": [ + "./hub.ts", + "./factory.ts", + "./left.ts" + ] + }, + "affectedFilesPendingEmit": [ + [ + "./barrel.ts", + "Js", + 7 + ], + [ + "./factory.ts", + "Js", + 4 + ], + [ + "./hub.ts", + "Js", + 2 + ], + [ + "./index.ts", + "Js", + 8 + ], + [ + "./left.ts", + "Js", + 6 + ], + [ + "./model.ts", + "Js", + 3 + ], + [ + "./right.ts", + "Js", + 5 + ] + ], + "size": 2759 +} + +Watch Registrations:: +Directory watches:: + /home/src/tslibs/TS/Lib + /home/src/workspaces/project (recursive) +tsconfig.json:: +SemanticDiagnostics:: +*refresh* /home/src/workspaces/project/hub.ts +*refresh* /home/src/workspaces/project/model.ts +*refresh* /home/src/workspaces/project/factory.ts +*refresh* /home/src/workspaces/project/right.ts +*refresh* /home/src/workspaces/project/left.ts +*refresh* /home/src/workspaces/project/barrel.ts +*refresh* /home/src/workspaces/project/index.ts +Signatures:: +(computed .d.ts) /home/src/workspaces/project/hub.ts +(computed .d.ts) /home/src/workspaces/project/model.ts +(computed .d.ts) /home/src/workspaces/project/factory.ts +(computed .d.ts) /home/src/workspaces/project/right.ts +(computed .d.ts) /home/src/workspaces/project/left.ts +(used version) /home/src/workspaces/project/barrel.ts +(used version) /home/src/workspaces/project/index.ts From a975ba5d70b4e832723bc4ab21a596affffdf09c Mon Sep 17 00:00:00 2001 From: Gadzhi Gadzhiev <168296+resure@users.noreply.github.com> Date: Tue, 6 Oct 2026 23:53:46 +0300 Subject: [PATCH 2/5] Bound signature computation for changed files too The limit only covered files reached through references, so a rebuild with many directly changed files still started all of their declaration emits at once. Take the semaphore inside computeDtsSignature instead. --- tsc/internal/execute/incremental/affectedfileshandler.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/tsc/internal/execute/incremental/affectedfileshandler.go b/tsc/internal/execute/incremental/affectedfileshandler.go index 6ddb9ce712f88..caa7ed75a344c 100644 --- a/tsc/internal/execute/incremental/affectedfileshandler.go +++ b/tsc/internal/execute/incremental/affectedfileshandler.go @@ -70,6 +70,7 @@ func (h *affectedFilesHandler) removeDiagnosticsOfLibraryFiles() { } func (h *affectedFilesHandler) computeDtsSignature(file *ast.SourceFile) string { + defer signatureSemaphore.Acquire()() var signature string done := h.program.beginNestedEmit() defer done() @@ -146,10 +147,7 @@ func (h *affectedFilesHandler) collectReferencingFiles(file *ast.SourceFile, wg continue } wg.Queue(func() { - release := signatureSemaphore.Acquire() - changed := h.updateShapeSignature(currentFile, false) - release() - if changed { + if h.updateShapeSignature(currentFile, false) { h.collectReferencingFiles(currentFile, wg, result) } }) From 7f0e5e100e7a56b786dee12ffca78b93f1e45da7 Mon Sep 17 00:00:00 2001 From: Gadzhi Gadzhiev <168296+resure@users.noreply.github.com> Date: Thu, 8 Oct 2026 13:53:08 +0300 Subject: [PATCH 3/5] Limit signature concurrency in the work group --- tsc/internal/compiler/checkerpool.go | 6 +-- tsc/internal/compiler/fileloader.go | 4 +- tsc/internal/compiler/program.go | 8 +-- tsc/internal/core/workgroup.go | 24 +++++++-- tsc/internal/core/workgroup_test.go | 52 +++++++++++++++++++ tsc/internal/execute/build/orchestrator.go | 4 +- .../incremental/affectedfileshandler.go | 10 ++-- .../affectedfileshandler_internal_test.go | 2 +- .../execute/incremental/emitfileshandler.go | 2 +- .../execute/incremental/programtosnapshot.go | 2 +- tsc/internal/execute/tsctests/runner.go | 2 +- tsc/internal/ls/crossproject.go | 4 +- .../project/projectcollectionbuilder.go | 2 +- tsc/internal/project/snapshotfs.go | 2 +- .../tstransforms/importelision_test.go | 2 +- 15 files changed, 95 insertions(+), 31 deletions(-) create mode 100644 tsc/internal/core/workgroup_test.go diff --git a/tsc/internal/compiler/checkerpool.go b/tsc/internal/compiler/checkerpool.go index e129951e423df..bc1c087dbec6b 100644 --- a/tsc/internal/compiler/checkerpool.go +++ b/tsc/internal/compiler/checkerpool.go @@ -367,7 +367,7 @@ func (p *checkerPool) getCheckerNonExclusive() (*checker.Checker, func()) { func (p *checkerPool) createCheckers() { p.createCheckersOnce.Do(func() { checkerCount := len(p.checkers) - wg := core.NewWorkGroup(p.program.SingleThreaded()) + wg := core.NewWorkGroup(core.WorkGroupConcurrency(p.program.SingleThreaded())) for i := range checkerCount { wg.Queue(func() { var tracer *checker.Tracer @@ -450,7 +450,7 @@ func (p *checkerPool) getImportAdjacency() [][]int { // making it safe to call `forEachCheckerParallel` from many threads simultaneously. func (p *checkerPool) forEachCheckerParallel(cb func(idx int, c *checker.Checker)) { p.createCheckers() - wg := core.NewWorkGroup(p.program.SingleThreaded()) + wg := core.NewWorkGroup(core.WorkGroupConcurrency(p.program.SingleThreaded())) for idx, checker := range p.checkers { wg.Queue(func() { p.locks[idx].Lock() @@ -477,7 +477,7 @@ func (p *checkerPool) forEachCheckerGroupDo(ctx context.Context, files []*ast.So p.createCheckers() checkerCount := len(p.checkers) - wg := core.NewWorkGroup(singleThreaded) + wg := core.NewWorkGroup(core.WorkGroupConcurrency(singleThreaded)) for checkerIdx := range checkerCount { wg.Queue(func() { p.locks[checkerIdx].Lock() diff --git a/tsc/internal/compiler/fileloader.go b/tsc/internal/compiler/fileloader.go index d4e159246c6ca..dd79d7ffe11e7 100644 --- a/tsc/internal/compiler/fileloader.go +++ b/tsc/internal/compiler/fileloader.go @@ -182,7 +182,7 @@ func processAllProgramFiles( defaultLibraryPath: opts.Host.DefaultLibraryPath(), caseSensitivity: opts.Host.FS().CaseSensitivity(), filesParser: &filesParser{ - wg: core.NewWorkGroup(singleThreaded), + wg: core.NewWorkGroup(core.WorkGroupConcurrency(singleThreaded)), maxDepth: maxNodeModuleJsDepth, }, rootTasks: make([]*parseTask, 0, len(rootFiles)+len(compilerOptions.Lib)), @@ -352,7 +352,7 @@ func (p *fileLoader) addProjectReferenceTasks(singleThreaded bool) { parser := &projectReferenceParser{ loader: p, - wg: core.NewWorkGroup(singleThreaded), + wg: core.NewWorkGroup(core.WorkGroupConcurrency(singleThreaded)), } rootTasks := createProjectReferenceParseTasks(projectReferences) parser.parse(rootTasks) diff --git a/tsc/internal/compiler/program.go b/tsc/internal/compiler/program.go index 31363f95afc88..81c40c8fc8e76 100644 --- a/tsc/internal/compiler/program.go +++ b/tsc/internal/compiler/program.go @@ -593,7 +593,7 @@ func (p *Program) SingleThreaded() bool { } func (p *Program) BindSourceFiles() { - wg := core.NewWorkGroup(p.SingleThreaded()) + wg := core.NewWorkGroup(core.WorkGroupConcurrency(p.SingleThreaded())) for _, file := range p.files { if !file.IsBound() { wg.Queue(func() { @@ -701,7 +701,7 @@ func (p *Program) collectDiagnostics(ctx context.Context, sourceFile *ast.Source func (p *Program) collectDiagnosticsFromFiles(ctx context.Context, sourceFiles []*ast.SourceFile, concurrent bool, collect func(context.Context, *ast.SourceFile) []*ast.Diagnostic) [][]*ast.Diagnostic { diagnostics := make([][]*ast.Diagnostic, len(sourceFiles)) - wg := core.NewWorkGroup(!concurrent || p.SingleThreaded()) + wg := core.NewWorkGroup(core.WorkGroupConcurrency(!concurrent || p.SingleThreaded())) for i, file := range sourceFiles { wg.Queue(func() { diagnostics[i] = collect(ctx, file) @@ -748,7 +748,7 @@ func (p *Program) collectCheckerDiagnosticsFromFiles(ctx context.Context, source diagnostics[fileIndex] = collect(ctx, c, file) }) } else { - wg := core.NewWorkGroup(p.SingleThreaded()) + wg := core.NewWorkGroup(core.WorkGroupConcurrency(p.SingleThreaded())) for i, file := range sourceFiles { if p.SkipTypeChecking(file, false) { continue @@ -1910,7 +1910,7 @@ func (p *Program) Emit(ctx context.Context, options EmitOptions) *EmitResult { return printer.NewTextWriter(newLine, 0) }, } - wg := core.NewWorkGroup(p.SingleThreaded()) + wg := core.NewWorkGroup(core.WorkGroupConcurrency(p.SingleThreaded())) var emitters []*emitter forceDtsEmit := options.EmitOnly == EmitOnlyBuilderSignature || options.ForceEmit && options.EmitOnly == EmitOnlyDts forceJsEmit := options.ForceEmit && options.EmitOnly == EmitOnlyJs diff --git a/tsc/internal/core/workgroup.go b/tsc/internal/core/workgroup.go index 73618a1a19fc1..dc3b27f2adf3b 100644 --- a/tsc/internal/core/workgroup.go +++ b/tsc/internal/core/workgroup.go @@ -17,16 +17,28 @@ type WorkGroup interface { RunAndWait() } -func NewWorkGroup(singleThreaded bool) WorkGroup { - if singleThreaded { +// A concurrency of 1 runs the functions on the goroutine that calls RunAndWait; 0 means no limit. +func NewWorkGroup(concurrency int) WorkGroup { + switch concurrency { + case 0: + return ¶llelWorkGroup{semaphore: UnlimitedSemaphore{}} + case 1: return &singleThreadedWorkGroup{} } - return ¶llelWorkGroup{} + return ¶llelWorkGroup{semaphore: NewLimitedSemaphore(concurrency)} +} + +func WorkGroupConcurrency(singleThreaded bool) int { + if singleThreaded { + return 1 + } + return 0 } type parallelWorkGroup struct { - done atomic.Bool - wg sync.WaitGroup + done atomic.Bool + wg sync.WaitGroup + semaphore Semaphore } var _ WorkGroup = (*parallelWorkGroup)(nil) @@ -37,6 +49,8 @@ func (w *parallelWorkGroup) Queue(fn func()) { } w.wg.Go(func() { + // Running functions call Queue, so waiting for a slot there would deadlock at the limit. + defer w.semaphore.Acquire()() fn() }) } diff --git a/tsc/internal/core/workgroup_test.go b/tsc/internal/core/workgroup_test.go new file mode 100644 index 0000000000000..f436b493c1a4a --- /dev/null +++ b/tsc/internal/core/workgroup_test.go @@ -0,0 +1,52 @@ +package core_test + +import ( + "runtime" + "sync" + "sync/atomic" + "testing" + + "github.com/microsoft/TypeScript/tsc/internal/core" + "gotest.tools/v3/assert" +) + +func TestWorkGroupConcurrencyLimit(t *testing.T) { + t.Parallel() + const limit = 3 + const depth = 2 + const children = 4 + wg := core.NewWorkGroup(limit) + var running, maxRunning, completed atomic.Int32 + var allRootsRunning sync.WaitGroup + allRootsRunning.Add(limit) + var queue func(remaining int) + queue = func(remaining int) { + wg.Queue(func() { + now := running.Add(1) + for { + seen := maxRunning.Load() + if now <= seen || maxRunning.CompareAndSwap(seen, now) { + break + } + } + if remaining == depth { + allRootsRunning.Done() + allRootsRunning.Wait() + } + if remaining > 0 { + for range children { + queue(remaining - 1) + } + } + runtime.Gosched() + running.Add(-1) + completed.Add(1) + }) + } + for range limit { + queue(depth) + } + wg.RunAndWait() + assert.Equal(t, completed.Load(), int32(limit*(1+children+children*children))) + assert.Equal(t, maxRunning.Load(), int32(limit)) +} diff --git a/tsc/internal/execute/build/orchestrator.go b/tsc/internal/execute/build/orchestrator.go index db33676e55597..fd78c7ec7c28e 100644 --- a/tsc/internal/execute/build/orchestrator.go +++ b/tsc/internal/execute/build/orchestrator.go @@ -260,7 +260,7 @@ func (o *Orchestrator) GenerateGraphReusingOldTasks() { func (o *Orchestrator) GenerateGraph(oldTasks *collections.SyncMap[tspath.PathKey, *BuildTask]) { projects := o.opts.Command.ResolvedProjectPaths() // Parse all config files in parallel - wg := core.NewWorkGroup(o.opts.Command.CompilerOptions.SingleThreaded.IsTrue()) + wg := core.NewWorkGroup(core.WorkGroupConcurrency(o.opts.Command.CompilerOptions.SingleThreaded.IsTrue())) o.createBuildTasks(oldTasks, projects, wg) wg.RunAndWait() @@ -940,7 +940,7 @@ func (o *Orchestrator) rangeTasks(order []*BuildTask, f func(path tspath.PathKey if numRoutines == 1 { runTask() } else { - wg := core.NewWorkGroup(false) + wg := core.NewWorkGroup(0) for range numRoutines { wg.Queue(runTask) } diff --git a/tsc/internal/execute/incremental/affectedfileshandler.go b/tsc/internal/execute/incremental/affectedfileshandler.go index caa7ed75a344c..12e7e03bc5f0a 100644 --- a/tsc/internal/execute/incremental/affectedfileshandler.go +++ b/tsc/internal/execute/incremental/affectedfileshandler.go @@ -15,9 +15,6 @@ import ( "github.com/microsoft/TypeScript/tsc/internal/tspath" ) -// Starting every signature at once raises peak memory without finishing sooner. -var signatureSemaphore = core.NewLimitedSemaphore(runtime.GOMAXPROCS(0)) - type dtsMayChange map[tspath.PathKey]FileEmitKind func (c dtsMayChange) addFileToAffectedFilesPendingEmit(filePath tspath.PathKey, emitKind FileEmitKind) { @@ -70,7 +67,6 @@ func (h *affectedFilesHandler) removeDiagnosticsOfLibraryFiles() { } func (h *affectedFilesHandler) computeDtsSignature(file *ast.SourceFile) string { - defer signatureSemaphore.Acquire()() var signature string done := h.program.beginNestedEmit() defer done() @@ -367,7 +363,9 @@ func collectAllAffectedFiles(ctx context.Context, program *Program) { } handler := affectedFilesHandler{ctx: ctx, program: program} - wg := core.NewWorkGroup(handler.program.program.SingleThreaded()) + // Starting every signature at once raises peak memory without finishing sooner. + concurrency := core.IfElse(program.program.SingleThreaded(), 1, runtime.GOMAXPROCS(0)) + wg := core.NewWorkGroup(concurrency) var result collections.SyncSet[*ast.SourceFile] program.snapshot.changedFilesSet.Range(func(file tspath.PathKey) bool { wg.Queue(func() { @@ -383,7 +381,7 @@ func collectAllAffectedFiles(ctx context.Context, program *Program) { // For all the affected files, get all the files that would need to change their dts or js files, // update their diagnostics - wg = core.NewWorkGroup(program.program.SingleThreaded()) + wg = core.NewWorkGroup(concurrency) emitKind := GetFileEmitKind(program.snapshot.options) result.Range(func(file *ast.SourceFile) bool { // remove the cached semantic diagnostics and handle dts emit and js emit if needed diff --git a/tsc/internal/execute/incremental/affectedfileshandler_internal_test.go b/tsc/internal/execute/incremental/affectedfileshandler_internal_test.go index 7e1de0bf9ec92..b2d13109dbaab 100644 --- a/tsc/internal/execute/incremental/affectedfileshandler_internal_test.go +++ b/tsc/internal/execute/incremental/affectedfileshandler_internal_test.go @@ -56,7 +56,7 @@ func TestUpdateShapeSignatureCachedResult(t *testing.T) { assert.Assert(t, !h.updateShapeSignature(d, false)) assert.Assert(t, !h.updateShapeSignature(d, false)) - wg := core.NewWorkGroup(true) + wg := core.NewWorkGroup(1) var result collections.SyncSet[*ast.SourceFile] wg.Queue(func() { h.collectFilesAffectedBy(b.PathKey(), wg, &result) }) wg.RunAndWait() diff --git a/tsc/internal/execute/incremental/emitfileshandler.go b/tsc/internal/execute/incremental/emitfileshandler.go index 36711a652bbe3..a1a0164a587b5 100644 --- a/tsc/internal/execute/incremental/emitfileshandler.go +++ b/tsc/internal/execute/incremental/emitfileshandler.go @@ -121,7 +121,7 @@ func (h *emitFilesHandler) emitFilesIncremental(options compiler.EmitOptions) [] return nil } - wg := core.NewWorkGroup(h.program.program.SingleThreaded()) + wg := core.NewWorkGroup(core.WorkGroupConcurrency(h.program.program.SingleThreaded())) h.program.snapshot.affectedFilesPendingEmit.Range(func(path tspath.PathKey, emitKind FileEmitKind) bool { affectedFile := h.program.program.GetSourceFileByPath(path) if affectedFile == nil || !h.program.program.SourceFileMayBeEmitted(affectedFile, false) { diff --git a/tsc/internal/execute/incremental/programtosnapshot.go b/tsc/internal/execute/incremental/programtosnapshot.go index 3470c2dc41082..6773ccfa6aa51 100644 --- a/tsc/internal/execute/incremental/programtosnapshot.go +++ b/tsc/internal/execute/incremental/programtosnapshot.go @@ -88,7 +88,7 @@ func (t *toProgramSnapshot) computeProgramFileChanges() { t.snapshot.options.SkipDefaultLibCheck.IsTrue() == t.oldProgram.snapshot.options.SkipDefaultLibCheck.IsTrue() files := t.program.GetSourceFiles() - wg := core.NewWorkGroup(t.program.SingleThreaded()) + wg := core.NewWorkGroup(core.WorkGroupConcurrency(t.program.SingleThreaded())) for _, file := range files { wg.Queue(func() { versionText := file.Text() diff --git a/tsc/internal/execute/tsctests/runner.go b/tsc/internal/execute/tsctests/runner.go index 2e65925135e82..55d0de9392fb9 100644 --- a/tsc/internal/execute/tsctests/runner.go +++ b/tsc/internal/execute/tsctests/runner.go @@ -92,7 +92,7 @@ func (test *tscInput) run(t *testing.T, scenario string) { for index, do := range test.edits { sys.clearOutput() - wg := core.NewWorkGroup(false) + wg := core.NewWorkGroup(0) var nonIncrementalSys *TestSys commandLineArgs := core.IfElse(do.commandLineArgs == nil, test.commandLineArgs, do.commandLineArgs) wg.Queue(func() { diff --git a/tsc/internal/ls/crossproject.go b/tsc/internal/ls/crossproject.go index 82fb86321f1a5..1e3b79b636cc6 100644 --- a/tsc/internal/ls/crossproject.go +++ b/tsc/internal/ls/crossproject.go @@ -76,7 +76,7 @@ func (defaultLs *LanguageService) handleCrossProject[Req lsproto.HasTextDocument _, searched := results.Load(project.Id()) return !searched } - wg := core.NewWorkGroup(false) + wg := core.NewWorkGroup(0) var errMu sync.Mutex var enqueueItem func(item projectAndTextDocumentPosition) var panicsOccurred []string @@ -231,7 +231,7 @@ func (defaultLs *LanguageService) handleCrossProject[Req lsproto.HasTextDocument return resp, err } - wg = core.NewWorkGroup(false) + wg = core.NewWorkGroup(0) hasMoreWork := false if defaultDefinition != nil { var requestedProjectTrees collections.Set[tspath.PathKey] diff --git a/tsc/internal/project/projectcollectionbuilder.go b/tsc/internal/project/projectcollectionbuilder.go index 2a190503e8468..0765f24b2c0d9 100644 --- a/tsc/internal/project/projectcollectionbuilder.go +++ b/tsc/internal/project/projectcollectionbuilder.go @@ -745,7 +745,7 @@ func (b *ProjectCollectionBuilder) DidRequestProjectTrees(projectTreeRequest *Pr }) var seenProjects collections.SyncSet[ConfiguredProjectID] - wg := core.NewWorkGroup(false) + wg := core.NewWorkGroup(0) for _, projectId := range currentProjects { wg.Queue(func() { if entry, ok := b.configuredProjects.Load(projectId); ok { diff --git a/tsc/internal/project/snapshotfs.go b/tsc/internal/project/snapshotfs.go index 3e95fb3709231..64ef21181a061 100644 --- a/tsc/internal/project/snapshotfs.go +++ b/tsc/internal/project/snapshotfs.go @@ -514,7 +514,7 @@ func (s *snapshotFSBuilder) invalidateNodeModulesCache() { func (s *snapshotFSBuilder) markDirtyFiles(change FileChangeSummary) FileChangeSummary { if change.Changed.Len() > 0 { var filteredChanged collections.SyncSet[lsproto.DocumentUri] - wg := core.NewWorkGroup(false) + wg := core.NewWorkGroup(0) for uri := range change.Changed.Keys() { path := s.caseSensitivity.PathKey(uri.FileName().AsPath()) if file := s.fs.GetFileByPath(uri.FileName(), path); file != nil && file.IsOverlay() { diff --git a/tsc/internal/transformers/tstransforms/importelision_test.go b/tsc/internal/transformers/tstransforms/importelision_test.go index 259db833bcec4..a32dc3cc4b61f 100644 --- a/tsc/internal/transformers/tstransforms/importelision_test.go +++ b/tsc/internal/transformers/tstransforms/importelision_test.go @@ -123,7 +123,7 @@ func (p *fakeProgram) SourceFiles() []*ast.SourceFile { } func (p *fakeProgram) BindSourceFiles() { - wg := core.NewWorkGroup(p.singleThreaded) + wg := core.NewWorkGroup(core.WorkGroupConcurrency(p.singleThreaded)) for _, file := range p.files { if !file.IsBound() { wg.Queue(func() { From 8eb7a75bd8256c9229722c5efaa2fb0dc322617b Mon Sep 17 00:00:00 2001 From: Gadzhi Gadzhiev <168296+resure@users.noreply.github.com> Date: Thu, 8 Oct 2026 19:46:45 +0300 Subject: [PATCH 4/5] Keep a changed default library file out of the affected set --- .../incremental/affectedfileshandler.go | 3 +- .../affectedfileshandler_internal_test.go | 63 ++++++++++++++----- 2 files changed, 50 insertions(+), 16 deletions(-) diff --git a/tsc/internal/execute/incremental/affectedfileshandler.go b/tsc/internal/execute/incremental/affectedfileshandler.go index 12e7e03bc5f0a..dab11844849ca 100644 --- a/tsc/internal/execute/incremental/affectedfileshandler.go +++ b/tsc/internal/execute/incremental/affectedfileshandler.go @@ -116,8 +116,8 @@ func (h *affectedFilesHandler) collectFilesAffectedBy(path tspath.PathKey, wg co return } - result.Add(file) if !h.updateShapeSignature(file, false) { + result.Add(file) return } @@ -129,6 +129,7 @@ func (h *affectedFilesHandler) collectFilesAffectedBy(path tspath.PathKey, wg co return } + result.Add(file) if h.program.snapshot.options.IsolatedModules.IsTrue() { return } diff --git a/tsc/internal/execute/incremental/affectedfileshandler_internal_test.go b/tsc/internal/execute/incremental/affectedfileshandler_internal_test.go index b2d13109dbaab..84dc7a6b570a0 100644 --- a/tsc/internal/execute/incremental/affectedfileshandler_internal_test.go +++ b/tsc/internal/execute/incremental/affectedfileshandler_internal_test.go @@ -10,10 +10,27 @@ import ( "github.com/microsoft/TypeScript/tsc/internal/core" "github.com/microsoft/TypeScript/tsc/internal/tsoptions" "github.com/microsoft/TypeScript/tsc/internal/tspath" + "github.com/microsoft/TypeScript/tsc/internal/vfs" "github.com/microsoft/TypeScript/tsc/internal/vfs/vfstest" "gotest.tools/v3/assert" ) +func buildTestProgram(t *testing.T, fs vfs.FS) *Program { + t.Helper() + host := compiler.NewCompilerHost(fs, bundled.LibPath(), nil, nil, nil) + config, diagnostics := tsoptions.GetParsedCommandLineOfConfigFile("/tsconfig.json", &core.CompilerOptions{}, nil, fs, nil) + assert.Equal(t, len(diagnostics), 0) + old := ReadBuildInfoProgram(config, NewBuildInfoReader(host), host) + return NewProgram(compiler.NewProgram(compiler.ProgramOptions{Config: config, Host: host}), old, CreateHost(host), nil, false) +} + +func buildAndEmitTestProgram(t *testing.T, fs vfs.FS) { + t.Helper() + program := buildTestProgram(t, fs) + assert.Equal(t, len(program.GetSemanticDiagnostics(t.Context(), nil)), 0) + assert.Equal(t, len(program.Emit(t.Context(), compiler.EmitOptions{}).Diagnostics), 0) +} + func TestUpdateShapeSignatureCachedResult(t *testing.T) { t.Parallel() if !bundled.Embedded { @@ -26,26 +43,14 @@ func TestUpdateShapeSignatureCachedResult(t *testing.T) { "/c.ts": `export const c = window.fromB;`, "/d.ts": `import { b } from "./b"; export const d = 2;`, }, tspath.CaseSensitive)) - build := func() *Program { - host := compiler.NewCompilerHost(fs, bundled.LibPath(), nil, nil, nil) - config, diagnostics := tsoptions.GetParsedCommandLineOfConfigFile("/tsconfig.json", &core.CompilerOptions{}, nil, fs, nil) - assert.Equal(t, len(diagnostics), 0) - old := ReadBuildInfoProgram(config, NewBuildInfoReader(host), host) - return NewProgram(compiler.NewProgram(compiler.ProgramOptions{Config: config, Host: host}), old, CreateHost(host), nil, false) - } - check := func() { - program := build() - assert.Equal(t, len(program.GetSemanticDiagnostics(t.Context(), nil)), 0) - assert.Equal(t, len(program.Emit(t.Context(), compiler.EmitOptions{}).Diagnostics), 0) - } - check() + buildAndEmitTestProgram(t, fs) // A rebuild replaces the version-based signatures of a, b and d with computed ones. assert.NilError(t, fs.AppendFile("/a.ts", "\n// edit\n")) - check() + buildAndEmitTestProgram(t, fs) assert.NilError(t, fs.WriteFile("/a.ts", `export const a = "changed";`)) assert.NilError(t, fs.AppendFile("/b.ts", "\n// edit\n")) - program := build() + program := buildTestProgram(t, fs) h := affectedFilesHandler{ctx: t.Context(), program: program} b := program.program.GetSourceFile("/b.ts") c := program.program.GetSourceFile("/c.ts") @@ -63,3 +68,31 @@ func TestUpdateShapeSignatureCachedResult(t *testing.T) { assert.Assert(t, h.hasAllFilesExcludingDefaultLibraryFile.Load(), "global-scope invalidation must not depend on which traversal computed the signature") assert.Assert(t, result.Has(c)) } + +func TestCollectFilesAffectedByChangedDefaultLibrary(t *testing.T) { + t.Parallel() + if !bundled.Embedded { + t.Skip("bundled files are not embedded") + } + const libPath = "/node_modules/@typescript/lib-dom/index.d.ts" + fs := bundled.WrapFS(vfstest.FromMap(map[string]string{ + "/tsconfig.json": `{"compilerOptions":{"strict":true,"noEmit":true,"incremental":true,"lib":["es5","dom"],"libReplacement":true}}`, + libPath: `interface DOMInterface { value: string; }`, + "/a.ts": `export const a = 1;`, + }, tspath.CaseSensitive)) + buildAndEmitTestProgram(t, fs) + + assert.NilError(t, fs.WriteFile(libPath, `interface DOMInterface { value: number; }`)) + program := buildTestProgram(t, fs) + h := affectedFilesHandler{ctx: t.Context(), program: program} + lib := program.program.GetSourceFile(libPath) + assert.Assert(t, program.program.IsSourceFileDefaultLibrary(lib.PathKey())) + + wg := core.NewWorkGroup(1) + var result collections.SyncSet[*ast.SourceFile] + wg.Queue(func() { h.collectFilesAffectedBy(lib.PathKey(), wg, &result) }) + wg.RunAndWait() + assert.Assert(t, h.hasAllFilesExcludingDefaultLibraryFile.Load()) + assert.Assert(t, result.Has(program.program.GetSourceFile("/a.ts"))) + assert.Assert(t, !result.Has(lib)) +} From d0741eb1682b47fd1e26ca8f60feb0e04c5fe0ed Mon Sep 17 00:00:00 2001 From: Gadzhi Gadzhiev <168296+resure@users.noreply.github.com> Date: Thu, 8 Oct 2026 21:28:43 +0300 Subject: [PATCH 5/5] Drop the scenario and benchmark that existing tests already cover --- .../incremental/affectedfileshandler_test.go | 61 - tsc/internal/execute/tsctests/tsc_test.go | 53 - .../shared-dependency-with-inferred-types.js | 1450 ---------------- .../shared-dependency-with-inferred-types.js | 1504 ----------------- 4 files changed, 3068 deletions(-) delete mode 100644 tsc/internal/execute/incremental/affectedfileshandler_test.go delete mode 100644 tsc/testdata/baselines/reference/tsc/incremental/shared-dependency-with-inferred-types.js delete mode 100644 tsc/testdata/baselines/reference/tscWatch/incremental/shared-dependency-with-inferred-types.js diff --git a/tsc/internal/execute/incremental/affectedfileshandler_test.go b/tsc/internal/execute/incremental/affectedfileshandler_test.go deleted file mode 100644 index dca71d53101cc..0000000000000 --- a/tsc/internal/execute/incremental/affectedfileshandler_test.go +++ /dev/null @@ -1,61 +0,0 @@ -package incremental_test - -import ( - "fmt" - "strings" - "testing" - - "github.com/microsoft/TypeScript/tsc/internal/bundled" - "github.com/microsoft/TypeScript/tsc/internal/compiler" - "github.com/microsoft/TypeScript/tsc/internal/core" - "github.com/microsoft/TypeScript/tsc/internal/execute/incremental" - "github.com/microsoft/TypeScript/tsc/internal/tsoptions" - "github.com/microsoft/TypeScript/tsc/internal/tspath" - "github.com/microsoft/TypeScript/tsc/internal/vfs/vfstest" - "gotest.tools/v3/assert" -) - -func BenchmarkFirstIncrementalRebuild(b *testing.B) { - if !bundled.Embedded { - b.Skip("bundled files are not embedded") - } - for _, leaves := range []int{200, 1000} { - b.Run(fmt.Sprintf("leaves=%d", leaves), func(b *testing.B) { - files := map[string]string{ - "/src/hub.ts": `export const prefix = "hub";`, - "/tsconfig.json": `{"compilerOptions":{"strict":true,"noEmit":true,"incremental":true,"skipLibCheck":true,"module":"esnext","moduleResolution":"bundler"}}`, - } - var factories, exports strings.Builder - for i := range leaves / 2 { - files[fmt.Sprintf("/src/types/t%d.ts", i)] = fmt.Sprintf(`export interface Model%d { id: string; value%d: number; } export function make%d(id: string): Model%d { return { id, value%d: %d }; }`, i, i, i, i, i, i) - fmt.Fprintf(&factories, "export { make%d } from './t%d';\n", i, i) - } - files["/src/types/index.ts"] = factories.String() - for i := range leaves { - a, other := i%(leaves/2), (i*7+3)%(leaves/2) - files[fmt.Sprintf("/src/leaves/l%d.ts", i)] = fmt.Sprintf(`import { prefix } from "../hub"; import { make%d, make%d } from "../types"; export const leaf%d = { first: make%d(prefix), second: make%d("%d") };`, a, other, i, a, other, i) - fmt.Fprintf(&exports, "export * from './leaves/l%d';\n", i) - } - files["/src/index.ts"] = exports.String() - fs := bundled.WrapFS(vfstest.FromMap(files, tspath.CaseSensitive)) - newHost := func() compiler.CompilerHost { - return compiler.NewCompilerHost(fs, bundled.LibPath(), nil, nil, nil) - } - host := newHost() - config, diagnostics := tsoptions.GetParsedCommandLineOfConfigFile("/tsconfig.json", &core.CompilerOptions{}, nil, fs, nil) - assert.Equal(b, len(diagnostics), 0) - program := incremental.NewProgram(compiler.NewProgram(compiler.ProgramOptions{Config: config, Host: host}), nil, incremental.CreateHost(host), nil, false) - assert.Equal(b, len(program.GetSemanticDiagnostics(b.Context(), nil)), 0) - assert.Equal(b, len(program.Emit(b.Context(), compiler.EmitOptions{}).Diagnostics), 0) - assert.NilError(b, fs.AppendFile("/src/hub.ts", "\n// comment only edit\n")) - b.ReportAllocs() - for b.Loop() { - host := newHost() - oldProgram := incremental.ReadBuildInfoProgram(config, incremental.NewBuildInfoReader(host), host) - assert.Assert(b, oldProgram != nil) - program := incremental.NewProgram(compiler.NewProgram(compiler.ProgramOptions{Config: config, Host: host}), oldProgram, incremental.CreateHost(host), nil, false) - assert.Equal(b, len(program.GetSemanticDiagnostics(b.Context(), nil)), 0) - } - }) - } -} diff --git a/tsc/internal/execute/tsctests/tsc_test.go b/tsc/internal/execute/tsctests/tsc_test.go index e1abef9d9d542..aff5f93620582 100644 --- a/tsc/internal/execute/tsctests/tsc_test.go +++ b/tsc/internal/execute/tsctests/tsc_test.go @@ -1429,57 +1429,6 @@ func TestTscIncremental(t *testing.T) { }, } } - getSharedDependencyTest := func(commandLineArgs []string) *tscInput { - const project = "/home/src/workspaces/project/" - return &tscInput{ - subScenario: "shared dependency with inferred types", - commandLineArgs: commandLineArgs, - files: FileMap{ - project + "tsconfig.json": `{"compilerOptions":{"strict":true,"noEmit":true,"incremental":true}}`, - project + "hub.ts": `export const prefix = "hub";`, - project + "model.ts": `export interface Model { id: string; } export function make(id: string): Model { return { id }; }`, - project + "factory.ts": `export { make } from "./model";`, - project + "left.ts": `import { prefix } from "./hub"; import { make } from "./factory"; export const left = make(prefix); export { right } from "./right";`, - project + "right.ts": `import { prefix } from "./hub"; import { make } from "./factory"; export const right = make(prefix); export { left } from "./left";`, - project + "barrel.ts": `export { left } from "./left"; export { right } from "./right";`, - project + "index.ts": `import { left, right } from "./barrel"; export const ids: string[] = [left.id, right.id];`, - }, - edits: []*tscEdit{ - noChange, - { - caption: "first comment only edit", - edit: func(sys *TestSys) { - sys.appendFile(project+"hub.ts", "\n// first edit\n") - }, - }, - { - caption: "second comment only edit", - edit: func(sys *TestSys) { - sys.appendFile(project+"hub.ts", "\n// second edit\n") - }, - }, - { - caption: "change the shared value type", - edit: func(sys *TestSys) { - sys.replaceFileText(project+"hub.ts", `"hub"`, "10") - }, - }, - { - caption: "change the inferred type through the barrel", - edit: func(sys *TestSys) { - sys.writeFileNoError(project+"model.ts", `export interface Model { id: number; } export function make(id: number): Model { return { id }; }`) - }, - }, - { - caption: "restore both shared dependencies", - edit: func(sys *TestSys) { - sys.replaceFileText(project+"hub.ts", "10", `"hub"`) - sys.writeFileNoError(project+"model.ts", `export interface Model { id: string; } export function make(id: string): Model { return { id }; }`) - }, - }, - }, - } - } testCases := []*tscInput{ { subScenario: "serializing error chain", @@ -2570,8 +2519,6 @@ func TestTscIncremental(t *testing.T) { }, }, }, - getSharedDependencyTest(nil), - getSharedDependencyTest([]string{"--watch"}), } for _, test := range testCases { diff --git a/tsc/testdata/baselines/reference/tsc/incremental/shared-dependency-with-inferred-types.js b/tsc/testdata/baselines/reference/tsc/incremental/shared-dependency-with-inferred-types.js deleted file mode 100644 index bfd9f33a62dfa..0000000000000 --- a/tsc/testdata/baselines/reference/tsc/incremental/shared-dependency-with-inferred-types.js +++ /dev/null @@ -1,1450 +0,0 @@ -currentDirectory::/home/src/workspaces/project -useCaseSensitiveFileNames::true -Input:: -//// [/home/src/workspaces/project/barrel.ts] *new* -export { left } from "./left"; export { right } from "./right"; -//// [/home/src/workspaces/project/factory.ts] *new* -export { make } from "./model"; -//// [/home/src/workspaces/project/hub.ts] *new* -export const prefix = "hub"; -//// [/home/src/workspaces/project/index.ts] *new* -import { left, right } from "./barrel"; export const ids: string[] = [left.id, right.id]; -//// [/home/src/workspaces/project/left.ts] *new* -import { prefix } from "./hub"; import { make } from "./factory"; export const left = make(prefix); export { right } from "./right"; -//// [/home/src/workspaces/project/model.ts] *new* -export interface Model { id: string; } export function make(id: string): Model { return { id }; } -//// [/home/src/workspaces/project/right.ts] *new* -import { prefix } from "./hub"; import { make } from "./factory"; export const right = make(prefix); export { left } from "./left"; -//// [/home/src/workspaces/project/tsconfig.json] *new* -{"compilerOptions":{"strict":true,"noEmit":true,"incremental":true}} - -tsgo -ExitStatus:: Success -Output:: -//// [/home/src/tslibs/TS/Lib/lib.es2026.full.d.ts] *Lib* -/// -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; } -interface ReadonlyArray {} -interface SymbolConstructor { - (desc?: string | number): symbol; - for(name: string): symbol; - readonly toStringTag: symbol; -} -declare var Symbol: SymbolConstructor; -interface Symbol { - readonly [Symbol.toStringTag]: string; -} -declare const console: { log(msg: any): void; }; -//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[[2,8]],"fileNames":["lib.es2026.full.d.ts","./hub.ts","./model.ts","./factory.ts","./right.ts","./left.ts","./barrel.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"e69fd43859d508fe2d52ada7fe216c06-export const prefix = \"hub\";","c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }","8c035626178906db4f73ee993640fecd-export { make } from \"./model\";","07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";","8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";","0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";","3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];"],"fileIdsList":[[5,6],[3],[7],[2,4,5],[2,4,6]],"options":{"strict":true},"referencedMap":[[7,1],[4,2],[8,3],[6,4],[5,5]],"affectedFilesPendingEmit":[7,4,2,8,6,3,5]} -//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *new* -{ - "version": "FakeTSVersion", - "root": [ - { - "files": [ - "./hub.ts", - "./model.ts", - "./factory.ts", - "./right.ts", - "./left.ts", - "./barrel.ts", - "./index.ts" - ], - "original": [ - 2, - 8 - ] - } - ], - "fileNames": [ - "lib.es2026.full.d.ts", - "./hub.ts", - "./model.ts", - "./factory.ts", - "./right.ts", - "./left.ts", - "./barrel.ts", - "./index.ts" - ], - "fileInfos": [ - { - "fileName": "lib.es2026.full.d.ts", - "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "signature": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "affectsGlobalScope": true, - "impliedNodeFormat": "CommonJS", - "original": { - "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "affectsGlobalScope": true, - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./hub.ts", - "version": "e69fd43859d508fe2d52ada7fe216c06-export const prefix = \"hub\";", - "signature": "e69fd43859d508fe2d52ada7fe216c06-export const prefix = \"hub\";", - "impliedNodeFormat": "CommonJS" - }, - { - "fileName": "./model.ts", - "version": "c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }", - "signature": "c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }", - "impliedNodeFormat": "CommonJS" - }, - { - "fileName": "./factory.ts", - "version": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", - "signature": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", - "impliedNodeFormat": "CommonJS" - }, - { - "fileName": "./right.ts", - "version": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", - "signature": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", - "impliedNodeFormat": "CommonJS" - }, - { - "fileName": "./left.ts", - "version": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", - "signature": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", - "impliedNodeFormat": "CommonJS" - }, - { - "fileName": "./barrel.ts", - "version": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", - "signature": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", - "impliedNodeFormat": "CommonJS" - }, - { - "fileName": "./index.ts", - "version": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", - "signature": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", - "impliedNodeFormat": "CommonJS" - } - ], - "fileIdsList": [ - [ - "./right.ts", - "./left.ts" - ], - [ - "./model.ts" - ], - [ - "./barrel.ts" - ], - [ - "./hub.ts", - "./factory.ts", - "./right.ts" - ], - [ - "./hub.ts", - "./factory.ts", - "./left.ts" - ] - ], - "options": { - "strict": true - }, - "referencedMap": { - "./barrel.ts": [ - "./right.ts", - "./left.ts" - ], - "./factory.ts": [ - "./model.ts" - ], - "./index.ts": [ - "./barrel.ts" - ], - "./left.ts": [ - "./hub.ts", - "./factory.ts", - "./right.ts" - ], - "./right.ts": [ - "./hub.ts", - "./factory.ts", - "./left.ts" - ] - }, - "affectedFilesPendingEmit": [ - [ - "./barrel.ts", - "Js", - 7 - ], - [ - "./factory.ts", - "Js", - 4 - ], - [ - "./hub.ts", - "Js", - 2 - ], - [ - "./index.ts", - "Js", - 8 - ], - [ - "./left.ts", - "Js", - 6 - ], - [ - "./model.ts", - "Js", - 3 - ], - [ - "./right.ts", - "Js", - 5 - ] - ], - "size": 1962 -} - -tsconfig.json:: -SemanticDiagnostics:: -*refresh* /home/src/tslibs/TS/Lib/lib.es2026.full.d.ts -*refresh* /home/src/workspaces/project/hub.ts -*refresh* /home/src/workspaces/project/model.ts -*refresh* /home/src/workspaces/project/factory.ts -*refresh* /home/src/workspaces/project/right.ts -*refresh* /home/src/workspaces/project/left.ts -*refresh* /home/src/workspaces/project/barrel.ts -*refresh* /home/src/workspaces/project/index.ts -Signatures:: - - -Edit [0]:: no change - -tsgo -ExitStatus:: Success -Output:: - -tsconfig.json:: -SemanticDiagnostics:: -Signatures:: - - -Edit [1]:: first comment only edit -//// [/home/src/workspaces/project/hub.ts] *modified* -export const prefix = "hub"; -// first edit - - -tsgo -ExitStatus:: Success -Output:: -//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,8]],"fileNames":["lib.es2026.full.d.ts","./hub.ts","./model.ts","./factory.ts","./right.ts","./left.ts","./barrel.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"0cc5c48d027554ce2074931a1f2ea370-export const prefix = \"hub\";\n// first edit\n","signature":"eee9e59e027e6765a0d5610b039f5e8a-export declare const prefix = \"hub\";\n","impliedNodeFormat":1},"c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }","8c035626178906db4f73ee993640fecd-export { make } from \"./model\";",{"version":"07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";","signature":"5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n","impliedNodeFormat":1},{"version":"8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";","signature":"4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n","impliedNodeFormat":1},{"version":"0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";","signature":"f614ffe60290b2d15ae0fd0b4ce7ba1d-export { left } from \"./left\";\nexport { right } from \"./right\";\n","impliedNodeFormat":1},{"version":"3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];","signature":"17897b95b5d22b2e69f98a20dfe4df48-export declare const ids: string[];\n","impliedNodeFormat":1}],"fileIdsList":[[5,6],[3],[7],[2,4,5],[2,4,6]],"options":{"strict":true},"referencedMap":[[7,1],[4,2],[8,3],[6,4],[5,5]],"affectedFilesPendingEmit":[7,4,2,8,6,3,5]} -//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* -{ - "version": "FakeTSVersion", - "root": [ - { - "files": [ - "./hub.ts", - "./model.ts", - "./factory.ts", - "./right.ts", - "./left.ts", - "./barrel.ts", - "./index.ts" - ], - "original": [ - 2, - 8 - ] - } - ], - "fileNames": [ - "lib.es2026.full.d.ts", - "./hub.ts", - "./model.ts", - "./factory.ts", - "./right.ts", - "./left.ts", - "./barrel.ts", - "./index.ts" - ], - "fileInfos": [ - { - "fileName": "lib.es2026.full.d.ts", - "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "signature": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "affectsGlobalScope": true, - "impliedNodeFormat": "CommonJS", - "original": { - "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "affectsGlobalScope": true, - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./hub.ts", - "version": "0cc5c48d027554ce2074931a1f2ea370-export const prefix = \"hub\";\n// first edit\n", - "signature": "eee9e59e027e6765a0d5610b039f5e8a-export declare const prefix = \"hub\";\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "0cc5c48d027554ce2074931a1f2ea370-export const prefix = \"hub\";\n// first edit\n", - "signature": "eee9e59e027e6765a0d5610b039f5e8a-export declare const prefix = \"hub\";\n", - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./model.ts", - "version": "c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }", - "signature": "c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }", - "impliedNodeFormat": "CommonJS" - }, - { - "fileName": "./factory.ts", - "version": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", - "signature": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", - "impliedNodeFormat": "CommonJS" - }, - { - "fileName": "./right.ts", - "version": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", - "signature": "5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", - "signature": "5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n", - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./left.ts", - "version": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", - "signature": "4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", - "signature": "4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n", - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./barrel.ts", - "version": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", - "signature": "f614ffe60290b2d15ae0fd0b4ce7ba1d-export { left } from \"./left\";\nexport { right } from \"./right\";\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", - "signature": "f614ffe60290b2d15ae0fd0b4ce7ba1d-export { left } from \"./left\";\nexport { right } from \"./right\";\n", - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./index.ts", - "version": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", - "signature": "17897b95b5d22b2e69f98a20dfe4df48-export declare const ids: string[];\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", - "signature": "17897b95b5d22b2e69f98a20dfe4df48-export declare const ids: string[];\n", - "impliedNodeFormat": 1 - } - } - ], - "fileIdsList": [ - [ - "./right.ts", - "./left.ts" - ], - [ - "./model.ts" - ], - [ - "./barrel.ts" - ], - [ - "./hub.ts", - "./factory.ts", - "./right.ts" - ], - [ - "./hub.ts", - "./factory.ts", - "./left.ts" - ] - ], - "options": { - "strict": true - }, - "referencedMap": { - "./barrel.ts": [ - "./right.ts", - "./left.ts" - ], - "./factory.ts": [ - "./model.ts" - ], - "./index.ts": [ - "./barrel.ts" - ], - "./left.ts": [ - "./hub.ts", - "./factory.ts", - "./right.ts" - ], - "./right.ts": [ - "./hub.ts", - "./factory.ts", - "./left.ts" - ] - }, - "affectedFilesPendingEmit": [ - [ - "./barrel.ts", - "Js", - 7 - ], - [ - "./factory.ts", - "Js", - 4 - ], - [ - "./hub.ts", - "Js", - 2 - ], - [ - "./index.ts", - "Js", - 8 - ], - [ - "./left.ts", - "Js", - 6 - ], - [ - "./model.ts", - "Js", - 3 - ], - [ - "./right.ts", - "Js", - 5 - ] - ], - "size": 2717 -} - -tsconfig.json:: -SemanticDiagnostics:: -*refresh* /home/src/workspaces/project/hub.ts -*refresh* /home/src/workspaces/project/right.ts -*refresh* /home/src/workspaces/project/left.ts -*refresh* /home/src/workspaces/project/barrel.ts -*refresh* /home/src/workspaces/project/index.ts -Signatures:: -(computed .d.ts) /home/src/workspaces/project/hub.ts -(computed .d.ts) /home/src/workspaces/project/right.ts -(computed .d.ts) /home/src/workspaces/project/left.ts -(computed .d.ts) /home/src/workspaces/project/barrel.ts -(computed .d.ts) /home/src/workspaces/project/index.ts - - -Edit [2]:: second comment only edit -//// [/home/src/workspaces/project/hub.ts] *modified* -export const prefix = "hub"; -// first edit - -// second edit - - -tsgo -ExitStatus:: Success -Output:: -//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,8]],"fileNames":["lib.es2026.full.d.ts","./hub.ts","./model.ts","./factory.ts","./right.ts","./left.ts","./barrel.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"df41fd128159de07c8cd657d90367a14-export const prefix = \"hub\";\n// first edit\n\n// second edit\n","signature":"eee9e59e027e6765a0d5610b039f5e8a-export declare const prefix = \"hub\";\n","impliedNodeFormat":1},"c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }","8c035626178906db4f73ee993640fecd-export { make } from \"./model\";",{"version":"07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";","signature":"5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n","impliedNodeFormat":1},{"version":"8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";","signature":"4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n","impliedNodeFormat":1},{"version":"0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";","signature":"f614ffe60290b2d15ae0fd0b4ce7ba1d-export { left } from \"./left\";\nexport { right } from \"./right\";\n","impliedNodeFormat":1},{"version":"3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];","signature":"17897b95b5d22b2e69f98a20dfe4df48-export declare const ids: string[];\n","impliedNodeFormat":1}],"fileIdsList":[[5,6],[3],[7],[2,4,5],[2,4,6]],"options":{"strict":true},"referencedMap":[[7,1],[4,2],[8,3],[6,4],[5,5]],"affectedFilesPendingEmit":[7,4,2,8,6,3,5]} -//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* -{ - "version": "FakeTSVersion", - "root": [ - { - "files": [ - "./hub.ts", - "./model.ts", - "./factory.ts", - "./right.ts", - "./left.ts", - "./barrel.ts", - "./index.ts" - ], - "original": [ - 2, - 8 - ] - } - ], - "fileNames": [ - "lib.es2026.full.d.ts", - "./hub.ts", - "./model.ts", - "./factory.ts", - "./right.ts", - "./left.ts", - "./barrel.ts", - "./index.ts" - ], - "fileInfos": [ - { - "fileName": "lib.es2026.full.d.ts", - "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "signature": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "affectsGlobalScope": true, - "impliedNodeFormat": "CommonJS", - "original": { - "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "affectsGlobalScope": true, - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./hub.ts", - "version": "df41fd128159de07c8cd657d90367a14-export const prefix = \"hub\";\n// first edit\n\n// second edit\n", - "signature": "eee9e59e027e6765a0d5610b039f5e8a-export declare const prefix = \"hub\";\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "df41fd128159de07c8cd657d90367a14-export const prefix = \"hub\";\n// first edit\n\n// second edit\n", - "signature": "eee9e59e027e6765a0d5610b039f5e8a-export declare const prefix = \"hub\";\n", - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./model.ts", - "version": "c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }", - "signature": "c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }", - "impliedNodeFormat": "CommonJS" - }, - { - "fileName": "./factory.ts", - "version": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", - "signature": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", - "impliedNodeFormat": "CommonJS" - }, - { - "fileName": "./right.ts", - "version": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", - "signature": "5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", - "signature": "5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n", - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./left.ts", - "version": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", - "signature": "4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", - "signature": "4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n", - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./barrel.ts", - "version": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", - "signature": "f614ffe60290b2d15ae0fd0b4ce7ba1d-export { left } from \"./left\";\nexport { right } from \"./right\";\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", - "signature": "f614ffe60290b2d15ae0fd0b4ce7ba1d-export { left } from \"./left\";\nexport { right } from \"./right\";\n", - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./index.ts", - "version": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", - "signature": "17897b95b5d22b2e69f98a20dfe4df48-export declare const ids: string[];\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", - "signature": "17897b95b5d22b2e69f98a20dfe4df48-export declare const ids: string[];\n", - "impliedNodeFormat": 1 - } - } - ], - "fileIdsList": [ - [ - "./right.ts", - "./left.ts" - ], - [ - "./model.ts" - ], - [ - "./barrel.ts" - ], - [ - "./hub.ts", - "./factory.ts", - "./right.ts" - ], - [ - "./hub.ts", - "./factory.ts", - "./left.ts" - ] - ], - "options": { - "strict": true - }, - "referencedMap": { - "./barrel.ts": [ - "./right.ts", - "./left.ts" - ], - "./factory.ts": [ - "./model.ts" - ], - "./index.ts": [ - "./barrel.ts" - ], - "./left.ts": [ - "./hub.ts", - "./factory.ts", - "./right.ts" - ], - "./right.ts": [ - "./hub.ts", - "./factory.ts", - "./left.ts" - ] - }, - "affectedFilesPendingEmit": [ - [ - "./barrel.ts", - "Js", - 7 - ], - [ - "./factory.ts", - "Js", - 4 - ], - [ - "./hub.ts", - "Js", - 2 - ], - [ - "./index.ts", - "Js", - 8 - ], - [ - "./left.ts", - "Js", - 6 - ], - [ - "./model.ts", - "Js", - 3 - ], - [ - "./right.ts", - "Js", - 5 - ] - ], - "size": 2735 -} - -tsconfig.json:: -SemanticDiagnostics:: -*refresh* /home/src/workspaces/project/hub.ts -Signatures:: -(computed .d.ts) /home/src/workspaces/project/hub.ts - - -Edit [3]:: change the shared value type -//// [/home/src/workspaces/project/hub.ts] *modified* -export const prefix = 10; -// first edit - -// second edit - - -tsgo -ExitStatus:: DiagnosticsPresent_OutputsGenerated -Output:: -left.ts:1:92 - error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. - -1 import { prefix } from "./hub"; import { make } from "./factory"; export const left = make(prefix); export { right } from "./right"; -   ~~~~~~ - -right.ts:1:93 - error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. - -1 import { prefix } from "./hub"; import { make } from "./factory"; export const right = make(prefix); export { left } from "./left"; -   ~~~~~~ - - -Found 2 errors in 2 files. - -Errors Files - 1 left.ts:1 - 1 right.ts:1 - -//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,8]],"fileNames":["lib.es2026.full.d.ts","./hub.ts","./model.ts","./factory.ts","./right.ts","./left.ts","./barrel.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"7a581f3c32763bd712056d8cf58fc0b0-export const prefix = 10;\n// first edit\n\n// second edit\n","signature":"a434d648ec62f01f82ba7bc6df302f43-export declare const prefix = 10;\n","impliedNodeFormat":1},"c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }","8c035626178906db4f73ee993640fecd-export { make } from \"./model\";",{"version":"07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";","signature":"5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n","impliedNodeFormat":1},{"version":"8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";","signature":"4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n","impliedNodeFormat":1},"0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";","3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];"],"fileIdsList":[[5,6],[3],[7],[2,4,5],[2,4,6]],"options":{"strict":true},"referencedMap":[[7,1],[4,2],[8,3],[6,4],[5,5]],"semanticDiagnosticsPerFile":[[5,[{"pos":92,"end":98,"code":2345,"category":1,"messageKey":"Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345","messageArgs":["number","string"]}]],[6,[{"pos":91,"end":97,"code":2345,"category":1,"messageKey":"Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345","messageArgs":["number","string"]}]]],"affectedFilesPendingEmit":[7,4,2,8,6,3,5]} -//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* -{ - "version": "FakeTSVersion", - "root": [ - { - "files": [ - "./hub.ts", - "./model.ts", - "./factory.ts", - "./right.ts", - "./left.ts", - "./barrel.ts", - "./index.ts" - ], - "original": [ - 2, - 8 - ] - } - ], - "fileNames": [ - "lib.es2026.full.d.ts", - "./hub.ts", - "./model.ts", - "./factory.ts", - "./right.ts", - "./left.ts", - "./barrel.ts", - "./index.ts" - ], - "fileInfos": [ - { - "fileName": "lib.es2026.full.d.ts", - "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "signature": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "affectsGlobalScope": true, - "impliedNodeFormat": "CommonJS", - "original": { - "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "affectsGlobalScope": true, - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./hub.ts", - "version": "7a581f3c32763bd712056d8cf58fc0b0-export const prefix = 10;\n// first edit\n\n// second edit\n", - "signature": "a434d648ec62f01f82ba7bc6df302f43-export declare const prefix = 10;\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "7a581f3c32763bd712056d8cf58fc0b0-export const prefix = 10;\n// first edit\n\n// second edit\n", - "signature": "a434d648ec62f01f82ba7bc6df302f43-export declare const prefix = 10;\n", - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./model.ts", - "version": "c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }", - "signature": "c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }", - "impliedNodeFormat": "CommonJS" - }, - { - "fileName": "./factory.ts", - "version": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", - "signature": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", - "impliedNodeFormat": "CommonJS" - }, - { - "fileName": "./right.ts", - "version": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", - "signature": "5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", - "signature": "5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n", - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./left.ts", - "version": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", - "signature": "4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", - "signature": "4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n", - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./barrel.ts", - "version": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", - "signature": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", - "impliedNodeFormat": "CommonJS" - }, - { - "fileName": "./index.ts", - "version": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", - "signature": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", - "impliedNodeFormat": "CommonJS" - } - ], - "fileIdsList": [ - [ - "./right.ts", - "./left.ts" - ], - [ - "./model.ts" - ], - [ - "./barrel.ts" - ], - [ - "./hub.ts", - "./factory.ts", - "./right.ts" - ], - [ - "./hub.ts", - "./factory.ts", - "./left.ts" - ] - ], - "options": { - "strict": true - }, - "referencedMap": { - "./barrel.ts": [ - "./right.ts", - "./left.ts" - ], - "./factory.ts": [ - "./model.ts" - ], - "./index.ts": [ - "./barrel.ts" - ], - "./left.ts": [ - "./hub.ts", - "./factory.ts", - "./right.ts" - ], - "./right.ts": [ - "./hub.ts", - "./factory.ts", - "./left.ts" - ] - }, - "semanticDiagnosticsPerFile": [ - [ - "./right.ts", - [ - { - "pos": 92, - "end": 98, - "code": 2345, - "category": 1, - "messageKey": "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345", - "messageArgs": [ - "number", - "string" - ] - } - ] - ], - [ - "./left.ts", - [ - { - "pos": 91, - "end": 97, - "code": 2345, - "category": 1, - "messageKey": "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345", - "messageArgs": [ - "number", - "string" - ] - } - ] - ] - ], - "affectedFilesPendingEmit": [ - [ - "./barrel.ts", - "Js", - 7 - ], - [ - "./factory.ts", - "Js", - 4 - ], - [ - "./hub.ts", - "Js", - 2 - ], - [ - "./index.ts", - "Js", - 8 - ], - [ - "./left.ts", - "Js", - 6 - ], - [ - "./model.ts", - "Js", - 3 - ], - [ - "./right.ts", - "Js", - 5 - ] - ], - "size": 2815 -} - -tsconfig.json:: -SemanticDiagnostics:: -*refresh* /home/src/workspaces/project/hub.ts -*refresh* /home/src/workspaces/project/right.ts -*refresh* /home/src/workspaces/project/left.ts -*refresh* /home/src/workspaces/project/barrel.ts -*refresh* /home/src/workspaces/project/index.ts -Signatures:: -(computed .d.ts) /home/src/workspaces/project/hub.ts -(computed .d.ts) /home/src/workspaces/project/right.ts -(computed .d.ts) /home/src/workspaces/project/left.ts -(used version) /home/src/workspaces/project/barrel.ts -(used version) /home/src/workspaces/project/index.ts - - -Edit [4]:: change the inferred type through the barrel -//// [/home/src/workspaces/project/model.ts] *modified* -export interface Model { id: number; } export function make(id: number): Model { return { id }; } - -tsgo -ExitStatus:: DiagnosticsPresent_OutputsGenerated -Output:: -index.ts:1:71 - error TS2322: Type 'number' is not assignable to type 'string'. - -1 import { left, right } from "./barrel"; export const ids: string[] = [left.id, right.id]; -   ~~~~~~~ - -index.ts:1:80 - error TS2322: Type 'number' is not assignable to type 'string'. - -1 import { left, right } from "./barrel"; export const ids: string[] = [left.id, right.id]; -   ~~~~~~~~ - - -Found 2 errors in the same file, starting at: index.ts:1 - -//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,8]],"fileNames":["lib.es2026.full.d.ts","./hub.ts","./model.ts","./factory.ts","./right.ts","./left.ts","./barrel.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"7a581f3c32763bd712056d8cf58fc0b0-export const prefix = 10;\n// first edit\n\n// second edit\n","signature":"a434d648ec62f01f82ba7bc6df302f43-export declare const prefix = 10;\n","impliedNodeFormat":1},{"version":"a5bcf1db41c7b2b195764099f803185d-export interface Model { id: number; } export function make(id: number): Model { return { id }; }","signature":"755c74df06b876a52b12daa9bd085134-export interface Model {\n id: number;\n}\nexport declare function make(id: number): Model;\n","impliedNodeFormat":1},{"version":"8c035626178906db4f73ee993640fecd-export { make } from \"./model\";","signature":"8bc5b2140b7efd4a238218fee9ed0bed-export { make } from \"./model\";\n","impliedNodeFormat":1},{"version":"07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";","signature":"5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n","impliedNodeFormat":1},{"version":"8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";","signature":"4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n","impliedNodeFormat":1},"0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";","3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];"],"fileIdsList":[[5,6],[3],[7],[2,4,5],[2,4,6]],"options":{"strict":true},"referencedMap":[[7,1],[4,2],[8,3],[6,4],[5,5]],"semanticDiagnosticsPerFile":[[8,[{"pos":70,"end":77,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["number","string"]},{"pos":79,"end":87,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["number","string"]}]]],"affectedFilesPendingEmit":[7,4,2,8,6,3,5]} -//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* -{ - "version": "FakeTSVersion", - "root": [ - { - "files": [ - "./hub.ts", - "./model.ts", - "./factory.ts", - "./right.ts", - "./left.ts", - "./barrel.ts", - "./index.ts" - ], - "original": [ - 2, - 8 - ] - } - ], - "fileNames": [ - "lib.es2026.full.d.ts", - "./hub.ts", - "./model.ts", - "./factory.ts", - "./right.ts", - "./left.ts", - "./barrel.ts", - "./index.ts" - ], - "fileInfos": [ - { - "fileName": "lib.es2026.full.d.ts", - "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "signature": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "affectsGlobalScope": true, - "impliedNodeFormat": "CommonJS", - "original": { - "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "affectsGlobalScope": true, - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./hub.ts", - "version": "7a581f3c32763bd712056d8cf58fc0b0-export const prefix = 10;\n// first edit\n\n// second edit\n", - "signature": "a434d648ec62f01f82ba7bc6df302f43-export declare const prefix = 10;\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "7a581f3c32763bd712056d8cf58fc0b0-export const prefix = 10;\n// first edit\n\n// second edit\n", - "signature": "a434d648ec62f01f82ba7bc6df302f43-export declare const prefix = 10;\n", - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./model.ts", - "version": "a5bcf1db41c7b2b195764099f803185d-export interface Model { id: number; } export function make(id: number): Model { return { id }; }", - "signature": "755c74df06b876a52b12daa9bd085134-export interface Model {\n id: number;\n}\nexport declare function make(id: number): Model;\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "a5bcf1db41c7b2b195764099f803185d-export interface Model { id: number; } export function make(id: number): Model { return { id }; }", - "signature": "755c74df06b876a52b12daa9bd085134-export interface Model {\n id: number;\n}\nexport declare function make(id: number): Model;\n", - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./factory.ts", - "version": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", - "signature": "8bc5b2140b7efd4a238218fee9ed0bed-export { make } from \"./model\";\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", - "signature": "8bc5b2140b7efd4a238218fee9ed0bed-export { make } from \"./model\";\n", - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./right.ts", - "version": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", - "signature": "5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", - "signature": "5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n", - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./left.ts", - "version": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", - "signature": "4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", - "signature": "4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n", - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./barrel.ts", - "version": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", - "signature": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", - "impliedNodeFormat": "CommonJS" - }, - { - "fileName": "./index.ts", - "version": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", - "signature": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", - "impliedNodeFormat": "CommonJS" - } - ], - "fileIdsList": [ - [ - "./right.ts", - "./left.ts" - ], - [ - "./model.ts" - ], - [ - "./barrel.ts" - ], - [ - "./hub.ts", - "./factory.ts", - "./right.ts" - ], - [ - "./hub.ts", - "./factory.ts", - "./left.ts" - ] - ], - "options": { - "strict": true - }, - "referencedMap": { - "./barrel.ts": [ - "./right.ts", - "./left.ts" - ], - "./factory.ts": [ - "./model.ts" - ], - "./index.ts": [ - "./barrel.ts" - ], - "./left.ts": [ - "./hub.ts", - "./factory.ts", - "./right.ts" - ], - "./right.ts": [ - "./hub.ts", - "./factory.ts", - "./left.ts" - ] - }, - "semanticDiagnosticsPerFile": [ - [ - "./index.ts", - [ - { - "pos": 70, - "end": 77, - "code": 2322, - "category": 1, - "messageKey": "Type_0_is_not_assignable_to_type_1_2322", - "messageArgs": [ - "number", - "string" - ] - }, - { - "pos": 79, - "end": 87, - "code": 2322, - "category": 1, - "messageKey": "Type_0_is_not_assignable_to_type_1_2322", - "messageArgs": [ - "number", - "string" - ] - } - ] - ] - ], - "affectedFilesPendingEmit": [ - [ - "./barrel.ts", - "Js", - 7 - ], - [ - "./factory.ts", - "Js", - 4 - ], - [ - "./hub.ts", - "Js", - 2 - ], - [ - "./index.ts", - "Js", - 8 - ], - [ - "./left.ts", - "Js", - 6 - ], - [ - "./model.ts", - "Js", - 3 - ], - [ - "./right.ts", - "Js", - 5 - ] - ], - "size": 3054 -} - -tsconfig.json:: -SemanticDiagnostics:: -*refresh* /home/src/workspaces/project/model.ts -*refresh* /home/src/workspaces/project/factory.ts -*refresh* /home/src/workspaces/project/right.ts -*refresh* /home/src/workspaces/project/left.ts -*refresh* /home/src/workspaces/project/barrel.ts -*refresh* /home/src/workspaces/project/index.ts -Signatures:: -(computed .d.ts) /home/src/workspaces/project/model.ts -(computed .d.ts) /home/src/workspaces/project/factory.ts -(computed .d.ts) /home/src/workspaces/project/right.ts -(computed .d.ts) /home/src/workspaces/project/left.ts -(used version) /home/src/workspaces/project/barrel.ts -(used version) /home/src/workspaces/project/index.ts - - -Edit [5]:: restore both shared dependencies -//// [/home/src/workspaces/project/hub.ts] *modified* -export const prefix = "hub"; -// first edit - -// second edit - -//// [/home/src/workspaces/project/model.ts] *modified* -export interface Model { id: string; } export function make(id: string): Model { return { id }; } - -tsgo -ExitStatus:: Success -Output:: -//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,8]],"fileNames":["lib.es2026.full.d.ts","./hub.ts","./model.ts","./factory.ts","./right.ts","./left.ts","./barrel.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"df41fd128159de07c8cd657d90367a14-export const prefix = \"hub\";\n// first edit\n\n// second edit\n","signature":"eee9e59e027e6765a0d5610b039f5e8a-export declare const prefix = \"hub\";\n","impliedNodeFormat":1},{"version":"c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }","signature":"c7653311ee886021d70d18d464ff2d71-export interface Model {\n id: string;\n}\nexport declare function make(id: string): Model;\n","impliedNodeFormat":1},{"version":"8c035626178906db4f73ee993640fecd-export { make } from \"./model\";","signature":"8bc5b2140b7efd4a238218fee9ed0bed-export { make } from \"./model\";\n","impliedNodeFormat":1},{"version":"07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";","signature":"5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n","impliedNodeFormat":1},{"version":"8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";","signature":"4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n","impliedNodeFormat":1},"0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";","3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];"],"fileIdsList":[[5,6],[3],[7],[2,4,5],[2,4,6]],"options":{"strict":true},"referencedMap":[[7,1],[4,2],[8,3],[6,4],[5,5]],"affectedFilesPendingEmit":[7,4,2,8,6,3,5]} -//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* -{ - "version": "FakeTSVersion", - "root": [ - { - "files": [ - "./hub.ts", - "./model.ts", - "./factory.ts", - "./right.ts", - "./left.ts", - "./barrel.ts", - "./index.ts" - ], - "original": [ - 2, - 8 - ] - } - ], - "fileNames": [ - "lib.es2026.full.d.ts", - "./hub.ts", - "./model.ts", - "./factory.ts", - "./right.ts", - "./left.ts", - "./barrel.ts", - "./index.ts" - ], - "fileInfos": [ - { - "fileName": "lib.es2026.full.d.ts", - "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "signature": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "affectsGlobalScope": true, - "impliedNodeFormat": "CommonJS", - "original": { - "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "affectsGlobalScope": true, - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./hub.ts", - "version": "df41fd128159de07c8cd657d90367a14-export const prefix = \"hub\";\n// first edit\n\n// second edit\n", - "signature": "eee9e59e027e6765a0d5610b039f5e8a-export declare const prefix = \"hub\";\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "df41fd128159de07c8cd657d90367a14-export const prefix = \"hub\";\n// first edit\n\n// second edit\n", - "signature": "eee9e59e027e6765a0d5610b039f5e8a-export declare const prefix = \"hub\";\n", - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./model.ts", - "version": "c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }", - "signature": "c7653311ee886021d70d18d464ff2d71-export interface Model {\n id: string;\n}\nexport declare function make(id: string): Model;\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }", - "signature": "c7653311ee886021d70d18d464ff2d71-export interface Model {\n id: string;\n}\nexport declare function make(id: string): Model;\n", - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./factory.ts", - "version": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", - "signature": "8bc5b2140b7efd4a238218fee9ed0bed-export { make } from \"./model\";\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", - "signature": "8bc5b2140b7efd4a238218fee9ed0bed-export { make } from \"./model\";\n", - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./right.ts", - "version": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", - "signature": "5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", - "signature": "5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n", - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./left.ts", - "version": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", - "signature": "4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", - "signature": "4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n", - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./barrel.ts", - "version": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", - "signature": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", - "impliedNodeFormat": "CommonJS" - }, - { - "fileName": "./index.ts", - "version": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", - "signature": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", - "impliedNodeFormat": "CommonJS" - } - ], - "fileIdsList": [ - [ - "./right.ts", - "./left.ts" - ], - [ - "./model.ts" - ], - [ - "./barrel.ts" - ], - [ - "./hub.ts", - "./factory.ts", - "./right.ts" - ], - [ - "./hub.ts", - "./factory.ts", - "./left.ts" - ] - ], - "options": { - "strict": true - }, - "referencedMap": { - "./barrel.ts": [ - "./right.ts", - "./left.ts" - ], - "./factory.ts": [ - "./model.ts" - ], - "./index.ts": [ - "./barrel.ts" - ], - "./left.ts": [ - "./hub.ts", - "./factory.ts", - "./right.ts" - ], - "./right.ts": [ - "./hub.ts", - "./factory.ts", - "./left.ts" - ] - }, - "affectedFilesPendingEmit": [ - [ - "./barrel.ts", - "Js", - 7 - ], - [ - "./factory.ts", - "Js", - 4 - ], - [ - "./hub.ts", - "Js", - 2 - ], - [ - "./index.ts", - "Js", - 8 - ], - [ - "./left.ts", - "Js", - 6 - ], - [ - "./model.ts", - "Js", - 3 - ], - [ - "./right.ts", - "Js", - 5 - ] - ], - "size": 2759 -} - -tsconfig.json:: -SemanticDiagnostics:: -*refresh* /home/src/workspaces/project/hub.ts -*refresh* /home/src/workspaces/project/model.ts -*refresh* /home/src/workspaces/project/factory.ts -*refresh* /home/src/workspaces/project/right.ts -*refresh* /home/src/workspaces/project/left.ts -*refresh* /home/src/workspaces/project/barrel.ts -*refresh* /home/src/workspaces/project/index.ts -Signatures:: -(computed .d.ts) /home/src/workspaces/project/hub.ts -(computed .d.ts) /home/src/workspaces/project/model.ts -(computed .d.ts) /home/src/workspaces/project/factory.ts -(computed .d.ts) /home/src/workspaces/project/right.ts -(computed .d.ts) /home/src/workspaces/project/left.ts -(used version) /home/src/workspaces/project/barrel.ts -(used version) /home/src/workspaces/project/index.ts diff --git a/tsc/testdata/baselines/reference/tscWatch/incremental/shared-dependency-with-inferred-types.js b/tsc/testdata/baselines/reference/tscWatch/incremental/shared-dependency-with-inferred-types.js deleted file mode 100644 index cb9b7468cd73c..0000000000000 --- a/tsc/testdata/baselines/reference/tscWatch/incremental/shared-dependency-with-inferred-types.js +++ /dev/null @@ -1,1504 +0,0 @@ -currentDirectory::/home/src/workspaces/project -useCaseSensitiveFileNames::true -Input:: -//// [/home/src/workspaces/project/barrel.ts] *new* -export { left } from "./left"; export { right } from "./right"; -//// [/home/src/workspaces/project/factory.ts] *new* -export { make } from "./model"; -//// [/home/src/workspaces/project/hub.ts] *new* -export const prefix = "hub"; -//// [/home/src/workspaces/project/index.ts] *new* -import { left, right } from "./barrel"; export const ids: string[] = [left.id, right.id]; -//// [/home/src/workspaces/project/left.ts] *new* -import { prefix } from "./hub"; import { make } from "./factory"; export const left = make(prefix); export { right } from "./right"; -//// [/home/src/workspaces/project/model.ts] *new* -export interface Model { id: string; } export function make(id: string): Model { return { id }; } -//// [/home/src/workspaces/project/right.ts] *new* -import { prefix } from "./hub"; import { make } from "./factory"; export const right = make(prefix); export { left } from "./left"; -//// [/home/src/workspaces/project/tsconfig.json] *new* -{"compilerOptions":{"strict":true,"noEmit":true,"incremental":true}} - -tsgo --watch -ExitStatus:: Success -Output:: -[HH:MM:SS AM] Starting compilation in watch mode... - -[HH:MM:SS AM] Found 0 errors. Watching for file changes. - -//// [/home/src/tslibs/TS/Lib/lib.es2026.full.d.ts] *Lib* -/// -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; } -interface ReadonlyArray {} -interface SymbolConstructor { - (desc?: string | number): symbol; - for(name: string): symbol; - readonly toStringTag: symbol; -} -declare var Symbol: SymbolConstructor; -interface Symbol { - readonly [Symbol.toStringTag]: string; -} -declare const console: { log(msg: any): void; }; -//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *new* -{"version":"FakeTSVersion","root":[[2,8]],"fileNames":["lib.es2026.full.d.ts","./hub.ts","./model.ts","./factory.ts","./right.ts","./left.ts","./barrel.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},"e69fd43859d508fe2d52ada7fe216c06-export const prefix = \"hub\";","c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }","8c035626178906db4f73ee993640fecd-export { make } from \"./model\";","07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";","8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";","0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";","3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];"],"fileIdsList":[[5,6],[3],[7],[2,4,5],[2,4,6]],"options":{"strict":true},"referencedMap":[[7,1],[4,2],[8,3],[6,4],[5,5]],"affectedFilesPendingEmit":[7,4,2,8,6,3,5]} -//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *new* -{ - "version": "FakeTSVersion", - "root": [ - { - "files": [ - "./hub.ts", - "./model.ts", - "./factory.ts", - "./right.ts", - "./left.ts", - "./barrel.ts", - "./index.ts" - ], - "original": [ - 2, - 8 - ] - } - ], - "fileNames": [ - "lib.es2026.full.d.ts", - "./hub.ts", - "./model.ts", - "./factory.ts", - "./right.ts", - "./left.ts", - "./barrel.ts", - "./index.ts" - ], - "fileInfos": [ - { - "fileName": "lib.es2026.full.d.ts", - "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "signature": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "affectsGlobalScope": true, - "impliedNodeFormat": "CommonJS", - "original": { - "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "affectsGlobalScope": true, - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./hub.ts", - "version": "e69fd43859d508fe2d52ada7fe216c06-export const prefix = \"hub\";", - "signature": "e69fd43859d508fe2d52ada7fe216c06-export const prefix = \"hub\";", - "impliedNodeFormat": "CommonJS" - }, - { - "fileName": "./model.ts", - "version": "c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }", - "signature": "c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }", - "impliedNodeFormat": "CommonJS" - }, - { - "fileName": "./factory.ts", - "version": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", - "signature": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", - "impliedNodeFormat": "CommonJS" - }, - { - "fileName": "./right.ts", - "version": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", - "signature": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", - "impliedNodeFormat": "CommonJS" - }, - { - "fileName": "./left.ts", - "version": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", - "signature": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", - "impliedNodeFormat": "CommonJS" - }, - { - "fileName": "./barrel.ts", - "version": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", - "signature": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", - "impliedNodeFormat": "CommonJS" - }, - { - "fileName": "./index.ts", - "version": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", - "signature": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", - "impliedNodeFormat": "CommonJS" - } - ], - "fileIdsList": [ - [ - "./right.ts", - "./left.ts" - ], - [ - "./model.ts" - ], - [ - "./barrel.ts" - ], - [ - "./hub.ts", - "./factory.ts", - "./right.ts" - ], - [ - "./hub.ts", - "./factory.ts", - "./left.ts" - ] - ], - "options": { - "strict": true - }, - "referencedMap": { - "./barrel.ts": [ - "./right.ts", - "./left.ts" - ], - "./factory.ts": [ - "./model.ts" - ], - "./index.ts": [ - "./barrel.ts" - ], - "./left.ts": [ - "./hub.ts", - "./factory.ts", - "./right.ts" - ], - "./right.ts": [ - "./hub.ts", - "./factory.ts", - "./left.ts" - ] - }, - "affectedFilesPendingEmit": [ - [ - "./barrel.ts", - "Js", - 7 - ], - [ - "./factory.ts", - "Js", - 4 - ], - [ - "./hub.ts", - "Js", - 2 - ], - [ - "./index.ts", - "Js", - 8 - ], - [ - "./left.ts", - "Js", - 6 - ], - [ - "./model.ts", - "Js", - 3 - ], - [ - "./right.ts", - "Js", - 5 - ] - ], - "size": 1962 -} - -Watch Registrations:: -Directory watches:: - /home/src/tslibs/TS/Lib - /home/src/workspaces/project (recursive) -tsconfig.json:: -SemanticDiagnostics:: -*refresh* /home/src/tslibs/TS/Lib/lib.es2026.full.d.ts -*refresh* /home/src/workspaces/project/hub.ts -*refresh* /home/src/workspaces/project/model.ts -*refresh* /home/src/workspaces/project/factory.ts -*refresh* /home/src/workspaces/project/right.ts -*refresh* /home/src/workspaces/project/left.ts -*refresh* /home/src/workspaces/project/barrel.ts -*refresh* /home/src/workspaces/project/index.ts -Signatures:: - - -Edit [0]:: no change - - -Output:: - -Watch Registrations:: -Directory watches:: - /home/src/tslibs/TS/Lib - /home/src/workspaces/project (recursive) -tsconfig.json:: -SemanticDiagnostics:: -*refresh* /home/src/tslibs/TS/Lib/lib.es2026.full.d.ts -*refresh* /home/src/workspaces/project/hub.ts -*refresh* /home/src/workspaces/project/model.ts -*refresh* /home/src/workspaces/project/factory.ts -*refresh* /home/src/workspaces/project/right.ts -*refresh* /home/src/workspaces/project/left.ts -*refresh* /home/src/workspaces/project/barrel.ts -*refresh* /home/src/workspaces/project/index.ts -Signatures:: - - -Edit [1]:: first comment only edit -//// [/home/src/workspaces/project/hub.ts] *modified* -export const prefix = "hub"; -// first edit - - - -Output:: -[HH:MM:SS AM] File change detected. Starting incremental compilation... - -[HH:MM:SS AM] Found 0 errors. Watching for file changes. - -//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,8]],"fileNames":["lib.es2026.full.d.ts","./hub.ts","./model.ts","./factory.ts","./right.ts","./left.ts","./barrel.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"0cc5c48d027554ce2074931a1f2ea370-export const prefix = \"hub\";\n// first edit\n","signature":"eee9e59e027e6765a0d5610b039f5e8a-export declare const prefix = \"hub\";\n","impliedNodeFormat":1},"c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }","8c035626178906db4f73ee993640fecd-export { make } from \"./model\";",{"version":"07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";","signature":"5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n","impliedNodeFormat":1},{"version":"8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";","signature":"4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n","impliedNodeFormat":1},{"version":"0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";","signature":"f614ffe60290b2d15ae0fd0b4ce7ba1d-export { left } from \"./left\";\nexport { right } from \"./right\";\n","impliedNodeFormat":1},{"version":"3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];","signature":"17897b95b5d22b2e69f98a20dfe4df48-export declare const ids: string[];\n","impliedNodeFormat":1}],"fileIdsList":[[5,6],[3],[7],[2,4,5],[2,4,6]],"options":{"strict":true},"referencedMap":[[7,1],[4,2],[8,3],[6,4],[5,5]],"affectedFilesPendingEmit":[7,4,2,8,6,3,5]} -//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* -{ - "version": "FakeTSVersion", - "root": [ - { - "files": [ - "./hub.ts", - "./model.ts", - "./factory.ts", - "./right.ts", - "./left.ts", - "./barrel.ts", - "./index.ts" - ], - "original": [ - 2, - 8 - ] - } - ], - "fileNames": [ - "lib.es2026.full.d.ts", - "./hub.ts", - "./model.ts", - "./factory.ts", - "./right.ts", - "./left.ts", - "./barrel.ts", - "./index.ts" - ], - "fileInfos": [ - { - "fileName": "lib.es2026.full.d.ts", - "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "signature": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "affectsGlobalScope": true, - "impliedNodeFormat": "CommonJS", - "original": { - "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "affectsGlobalScope": true, - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./hub.ts", - "version": "0cc5c48d027554ce2074931a1f2ea370-export const prefix = \"hub\";\n// first edit\n", - "signature": "eee9e59e027e6765a0d5610b039f5e8a-export declare const prefix = \"hub\";\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "0cc5c48d027554ce2074931a1f2ea370-export const prefix = \"hub\";\n// first edit\n", - "signature": "eee9e59e027e6765a0d5610b039f5e8a-export declare const prefix = \"hub\";\n", - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./model.ts", - "version": "c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }", - "signature": "c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }", - "impliedNodeFormat": "CommonJS" - }, - { - "fileName": "./factory.ts", - "version": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", - "signature": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", - "impliedNodeFormat": "CommonJS" - }, - { - "fileName": "./right.ts", - "version": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", - "signature": "5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", - "signature": "5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n", - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./left.ts", - "version": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", - "signature": "4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", - "signature": "4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n", - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./barrel.ts", - "version": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", - "signature": "f614ffe60290b2d15ae0fd0b4ce7ba1d-export { left } from \"./left\";\nexport { right } from \"./right\";\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", - "signature": "f614ffe60290b2d15ae0fd0b4ce7ba1d-export { left } from \"./left\";\nexport { right } from \"./right\";\n", - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./index.ts", - "version": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", - "signature": "17897b95b5d22b2e69f98a20dfe4df48-export declare const ids: string[];\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", - "signature": "17897b95b5d22b2e69f98a20dfe4df48-export declare const ids: string[];\n", - "impliedNodeFormat": 1 - } - } - ], - "fileIdsList": [ - [ - "./right.ts", - "./left.ts" - ], - [ - "./model.ts" - ], - [ - "./barrel.ts" - ], - [ - "./hub.ts", - "./factory.ts", - "./right.ts" - ], - [ - "./hub.ts", - "./factory.ts", - "./left.ts" - ] - ], - "options": { - "strict": true - }, - "referencedMap": { - "./barrel.ts": [ - "./right.ts", - "./left.ts" - ], - "./factory.ts": [ - "./model.ts" - ], - "./index.ts": [ - "./barrel.ts" - ], - "./left.ts": [ - "./hub.ts", - "./factory.ts", - "./right.ts" - ], - "./right.ts": [ - "./hub.ts", - "./factory.ts", - "./left.ts" - ] - }, - "affectedFilesPendingEmit": [ - [ - "./barrel.ts", - "Js", - 7 - ], - [ - "./factory.ts", - "Js", - 4 - ], - [ - "./hub.ts", - "Js", - 2 - ], - [ - "./index.ts", - "Js", - 8 - ], - [ - "./left.ts", - "Js", - 6 - ], - [ - "./model.ts", - "Js", - 3 - ], - [ - "./right.ts", - "Js", - 5 - ] - ], - "size": 2717 -} - -Watch Registrations:: -Directory watches:: - /home/src/tslibs/TS/Lib - /home/src/workspaces/project (recursive) -tsconfig.json:: -SemanticDiagnostics:: -*refresh* /home/src/workspaces/project/hub.ts -*refresh* /home/src/workspaces/project/right.ts -*refresh* /home/src/workspaces/project/left.ts -*refresh* /home/src/workspaces/project/barrel.ts -*refresh* /home/src/workspaces/project/index.ts -Signatures:: -(computed .d.ts) /home/src/workspaces/project/hub.ts -(computed .d.ts) /home/src/workspaces/project/right.ts -(computed .d.ts) /home/src/workspaces/project/left.ts -(computed .d.ts) /home/src/workspaces/project/barrel.ts -(computed .d.ts) /home/src/workspaces/project/index.ts - - -Edit [2]:: second comment only edit -//// [/home/src/workspaces/project/hub.ts] *modified* -export const prefix = "hub"; -// first edit - -// second edit - - - -Output:: -[HH:MM:SS AM] File change detected. Starting incremental compilation... - -[HH:MM:SS AM] Found 0 errors. Watching for file changes. - -//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,8]],"fileNames":["lib.es2026.full.d.ts","./hub.ts","./model.ts","./factory.ts","./right.ts","./left.ts","./barrel.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"df41fd128159de07c8cd657d90367a14-export const prefix = \"hub\";\n// first edit\n\n// second edit\n","signature":"eee9e59e027e6765a0d5610b039f5e8a-export declare const prefix = \"hub\";\n","impliedNodeFormat":1},"c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }","8c035626178906db4f73ee993640fecd-export { make } from \"./model\";",{"version":"07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";","signature":"5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n","impliedNodeFormat":1},{"version":"8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";","signature":"4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n","impliedNodeFormat":1},{"version":"0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";","signature":"f614ffe60290b2d15ae0fd0b4ce7ba1d-export { left } from \"./left\";\nexport { right } from \"./right\";\n","impliedNodeFormat":1},{"version":"3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];","signature":"17897b95b5d22b2e69f98a20dfe4df48-export declare const ids: string[];\n","impliedNodeFormat":1}],"fileIdsList":[[5,6],[3],[7],[2,4,5],[2,4,6]],"options":{"strict":true},"referencedMap":[[7,1],[4,2],[8,3],[6,4],[5,5]],"affectedFilesPendingEmit":[7,4,2,8,6,3,5]} -//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* -{ - "version": "FakeTSVersion", - "root": [ - { - "files": [ - "./hub.ts", - "./model.ts", - "./factory.ts", - "./right.ts", - "./left.ts", - "./barrel.ts", - "./index.ts" - ], - "original": [ - 2, - 8 - ] - } - ], - "fileNames": [ - "lib.es2026.full.d.ts", - "./hub.ts", - "./model.ts", - "./factory.ts", - "./right.ts", - "./left.ts", - "./barrel.ts", - "./index.ts" - ], - "fileInfos": [ - { - "fileName": "lib.es2026.full.d.ts", - "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "signature": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "affectsGlobalScope": true, - "impliedNodeFormat": "CommonJS", - "original": { - "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "affectsGlobalScope": true, - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./hub.ts", - "version": "df41fd128159de07c8cd657d90367a14-export const prefix = \"hub\";\n// first edit\n\n// second edit\n", - "signature": "eee9e59e027e6765a0d5610b039f5e8a-export declare const prefix = \"hub\";\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "df41fd128159de07c8cd657d90367a14-export const prefix = \"hub\";\n// first edit\n\n// second edit\n", - "signature": "eee9e59e027e6765a0d5610b039f5e8a-export declare const prefix = \"hub\";\n", - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./model.ts", - "version": "c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }", - "signature": "c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }", - "impliedNodeFormat": "CommonJS" - }, - { - "fileName": "./factory.ts", - "version": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", - "signature": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", - "impliedNodeFormat": "CommonJS" - }, - { - "fileName": "./right.ts", - "version": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", - "signature": "5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", - "signature": "5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n", - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./left.ts", - "version": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", - "signature": "4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", - "signature": "4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n", - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./barrel.ts", - "version": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", - "signature": "f614ffe60290b2d15ae0fd0b4ce7ba1d-export { left } from \"./left\";\nexport { right } from \"./right\";\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", - "signature": "f614ffe60290b2d15ae0fd0b4ce7ba1d-export { left } from \"./left\";\nexport { right } from \"./right\";\n", - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./index.ts", - "version": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", - "signature": "17897b95b5d22b2e69f98a20dfe4df48-export declare const ids: string[];\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", - "signature": "17897b95b5d22b2e69f98a20dfe4df48-export declare const ids: string[];\n", - "impliedNodeFormat": 1 - } - } - ], - "fileIdsList": [ - [ - "./right.ts", - "./left.ts" - ], - [ - "./model.ts" - ], - [ - "./barrel.ts" - ], - [ - "./hub.ts", - "./factory.ts", - "./right.ts" - ], - [ - "./hub.ts", - "./factory.ts", - "./left.ts" - ] - ], - "options": { - "strict": true - }, - "referencedMap": { - "./barrel.ts": [ - "./right.ts", - "./left.ts" - ], - "./factory.ts": [ - "./model.ts" - ], - "./index.ts": [ - "./barrel.ts" - ], - "./left.ts": [ - "./hub.ts", - "./factory.ts", - "./right.ts" - ], - "./right.ts": [ - "./hub.ts", - "./factory.ts", - "./left.ts" - ] - }, - "affectedFilesPendingEmit": [ - [ - "./barrel.ts", - "Js", - 7 - ], - [ - "./factory.ts", - "Js", - 4 - ], - [ - "./hub.ts", - "Js", - 2 - ], - [ - "./index.ts", - "Js", - 8 - ], - [ - "./left.ts", - "Js", - 6 - ], - [ - "./model.ts", - "Js", - 3 - ], - [ - "./right.ts", - "Js", - 5 - ] - ], - "size": 2735 -} - -Watch Registrations:: -Directory watches:: - /home/src/tslibs/TS/Lib - /home/src/workspaces/project (recursive) -tsconfig.json:: -SemanticDiagnostics:: -*refresh* /home/src/workspaces/project/hub.ts -Signatures:: -(computed .d.ts) /home/src/workspaces/project/hub.ts - - -Edit [3]:: change the shared value type -//// [/home/src/workspaces/project/hub.ts] *modified* -export const prefix = 10; -// first edit - -// second edit - - - -Output:: -[HH:MM:SS AM] File change detected. Starting incremental compilation... - -left.ts:1:92 - error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. - -1 import { prefix } from "./hub"; import { make } from "./factory"; export const left = make(prefix); export { right } from "./right"; -   ~~~~~~ - -right.ts:1:93 - error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. - -1 import { prefix } from "./hub"; import { make } from "./factory"; export const right = make(prefix); export { left } from "./left"; -   ~~~~~~ - - -Found 2 errors in 2 files. - -Errors Files - 1 left.ts:1 - 1 right.ts:1 - -[HH:MM:SS AM] Found 2 errors. Watching for file changes. - -//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,8]],"fileNames":["lib.es2026.full.d.ts","./hub.ts","./model.ts","./factory.ts","./right.ts","./left.ts","./barrel.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"7a581f3c32763bd712056d8cf58fc0b0-export const prefix = 10;\n// first edit\n\n// second edit\n","signature":"a434d648ec62f01f82ba7bc6df302f43-export declare const prefix = 10;\n","impliedNodeFormat":1},"c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }","8c035626178906db4f73ee993640fecd-export { make } from \"./model\";",{"version":"07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";","signature":"5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n","impliedNodeFormat":1},{"version":"8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";","signature":"4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n","impliedNodeFormat":1},"0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";","3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];"],"fileIdsList":[[5,6],[3],[7],[2,4,5],[2,4,6]],"options":{"strict":true},"referencedMap":[[7,1],[4,2],[8,3],[6,4],[5,5]],"semanticDiagnosticsPerFile":[[5,[{"pos":92,"end":98,"code":2345,"category":1,"messageKey":"Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345","messageArgs":["number","string"]}]],[6,[{"pos":91,"end":97,"code":2345,"category":1,"messageKey":"Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345","messageArgs":["number","string"]}]]],"affectedFilesPendingEmit":[7,4,2,8,6,3,5]} -//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* -{ - "version": "FakeTSVersion", - "root": [ - { - "files": [ - "./hub.ts", - "./model.ts", - "./factory.ts", - "./right.ts", - "./left.ts", - "./barrel.ts", - "./index.ts" - ], - "original": [ - 2, - 8 - ] - } - ], - "fileNames": [ - "lib.es2026.full.d.ts", - "./hub.ts", - "./model.ts", - "./factory.ts", - "./right.ts", - "./left.ts", - "./barrel.ts", - "./index.ts" - ], - "fileInfos": [ - { - "fileName": "lib.es2026.full.d.ts", - "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "signature": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "affectsGlobalScope": true, - "impliedNodeFormat": "CommonJS", - "original": { - "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "affectsGlobalScope": true, - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./hub.ts", - "version": "7a581f3c32763bd712056d8cf58fc0b0-export const prefix = 10;\n// first edit\n\n// second edit\n", - "signature": "a434d648ec62f01f82ba7bc6df302f43-export declare const prefix = 10;\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "7a581f3c32763bd712056d8cf58fc0b0-export const prefix = 10;\n// first edit\n\n// second edit\n", - "signature": "a434d648ec62f01f82ba7bc6df302f43-export declare const prefix = 10;\n", - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./model.ts", - "version": "c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }", - "signature": "c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }", - "impliedNodeFormat": "CommonJS" - }, - { - "fileName": "./factory.ts", - "version": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", - "signature": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", - "impliedNodeFormat": "CommonJS" - }, - { - "fileName": "./right.ts", - "version": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", - "signature": "5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", - "signature": "5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n", - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./left.ts", - "version": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", - "signature": "4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", - "signature": "4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n", - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./barrel.ts", - "version": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", - "signature": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", - "impliedNodeFormat": "CommonJS" - }, - { - "fileName": "./index.ts", - "version": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", - "signature": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", - "impliedNodeFormat": "CommonJS" - } - ], - "fileIdsList": [ - [ - "./right.ts", - "./left.ts" - ], - [ - "./model.ts" - ], - [ - "./barrel.ts" - ], - [ - "./hub.ts", - "./factory.ts", - "./right.ts" - ], - [ - "./hub.ts", - "./factory.ts", - "./left.ts" - ] - ], - "options": { - "strict": true - }, - "referencedMap": { - "./barrel.ts": [ - "./right.ts", - "./left.ts" - ], - "./factory.ts": [ - "./model.ts" - ], - "./index.ts": [ - "./barrel.ts" - ], - "./left.ts": [ - "./hub.ts", - "./factory.ts", - "./right.ts" - ], - "./right.ts": [ - "./hub.ts", - "./factory.ts", - "./left.ts" - ] - }, - "semanticDiagnosticsPerFile": [ - [ - "./right.ts", - [ - { - "pos": 92, - "end": 98, - "code": 2345, - "category": 1, - "messageKey": "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345", - "messageArgs": [ - "number", - "string" - ] - } - ] - ], - [ - "./left.ts", - [ - { - "pos": 91, - "end": 97, - "code": 2345, - "category": 1, - "messageKey": "Argument_of_type_0_is_not_assignable_to_parameter_of_type_1_2345", - "messageArgs": [ - "number", - "string" - ] - } - ] - ] - ], - "affectedFilesPendingEmit": [ - [ - "./barrel.ts", - "Js", - 7 - ], - [ - "./factory.ts", - "Js", - 4 - ], - [ - "./hub.ts", - "Js", - 2 - ], - [ - "./index.ts", - "Js", - 8 - ], - [ - "./left.ts", - "Js", - 6 - ], - [ - "./model.ts", - "Js", - 3 - ], - [ - "./right.ts", - "Js", - 5 - ] - ], - "size": 2815 -} - -Watch Registrations:: -Directory watches:: - /home/src/tslibs/TS/Lib - /home/src/workspaces/project (recursive) -tsconfig.json:: -SemanticDiagnostics:: -*refresh* /home/src/workspaces/project/hub.ts -*refresh* /home/src/workspaces/project/right.ts -*refresh* /home/src/workspaces/project/left.ts -*refresh* /home/src/workspaces/project/barrel.ts -*refresh* /home/src/workspaces/project/index.ts -Signatures:: -(computed .d.ts) /home/src/workspaces/project/hub.ts -(computed .d.ts) /home/src/workspaces/project/right.ts -(computed .d.ts) /home/src/workspaces/project/left.ts -(used version) /home/src/workspaces/project/barrel.ts -(used version) /home/src/workspaces/project/index.ts - - -Edit [4]:: change the inferred type through the barrel -//// [/home/src/workspaces/project/model.ts] *modified* -export interface Model { id: number; } export function make(id: number): Model { return { id }; } - - -Output:: -[HH:MM:SS AM] File change detected. Starting incremental compilation... - -index.ts:1:71 - error TS2322: Type 'number' is not assignable to type 'string'. - -1 import { left, right } from "./barrel"; export const ids: string[] = [left.id, right.id]; -   ~~~~~~~ - -index.ts:1:80 - error TS2322: Type 'number' is not assignable to type 'string'. - -1 import { left, right } from "./barrel"; export const ids: string[] = [left.id, right.id]; -   ~~~~~~~~ - - -Found 2 errors in the same file, starting at: index.ts:1 - -[HH:MM:SS AM] Found 2 errors. Watching for file changes. - -//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,8]],"fileNames":["lib.es2026.full.d.ts","./hub.ts","./model.ts","./factory.ts","./right.ts","./left.ts","./barrel.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"7a581f3c32763bd712056d8cf58fc0b0-export const prefix = 10;\n// first edit\n\n// second edit\n","signature":"a434d648ec62f01f82ba7bc6df302f43-export declare const prefix = 10;\n","impliedNodeFormat":1},{"version":"a5bcf1db41c7b2b195764099f803185d-export interface Model { id: number; } export function make(id: number): Model { return { id }; }","signature":"755c74df06b876a52b12daa9bd085134-export interface Model {\n id: number;\n}\nexport declare function make(id: number): Model;\n","impliedNodeFormat":1},{"version":"8c035626178906db4f73ee993640fecd-export { make } from \"./model\";","signature":"8bc5b2140b7efd4a238218fee9ed0bed-export { make } from \"./model\";\n","impliedNodeFormat":1},{"version":"07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";","signature":"5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n","impliedNodeFormat":1},{"version":"8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";","signature":"4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n","impliedNodeFormat":1},"0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";","3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];"],"fileIdsList":[[5,6],[3],[7],[2,4,5],[2,4,6]],"options":{"strict":true},"referencedMap":[[7,1],[4,2],[8,3],[6,4],[5,5]],"semanticDiagnosticsPerFile":[[8,[{"pos":70,"end":77,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["number","string"]},{"pos":79,"end":87,"code":2322,"category":1,"messageKey":"Type_0_is_not_assignable_to_type_1_2322","messageArgs":["number","string"]}]]],"affectedFilesPendingEmit":[7,4,2,8,6,3,5]} -//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* -{ - "version": "FakeTSVersion", - "root": [ - { - "files": [ - "./hub.ts", - "./model.ts", - "./factory.ts", - "./right.ts", - "./left.ts", - "./barrel.ts", - "./index.ts" - ], - "original": [ - 2, - 8 - ] - } - ], - "fileNames": [ - "lib.es2026.full.d.ts", - "./hub.ts", - "./model.ts", - "./factory.ts", - "./right.ts", - "./left.ts", - "./barrel.ts", - "./index.ts" - ], - "fileInfos": [ - { - "fileName": "lib.es2026.full.d.ts", - "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "signature": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "affectsGlobalScope": true, - "impliedNodeFormat": "CommonJS", - "original": { - "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "affectsGlobalScope": true, - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./hub.ts", - "version": "7a581f3c32763bd712056d8cf58fc0b0-export const prefix = 10;\n// first edit\n\n// second edit\n", - "signature": "a434d648ec62f01f82ba7bc6df302f43-export declare const prefix = 10;\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "7a581f3c32763bd712056d8cf58fc0b0-export const prefix = 10;\n// first edit\n\n// second edit\n", - "signature": "a434d648ec62f01f82ba7bc6df302f43-export declare const prefix = 10;\n", - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./model.ts", - "version": "a5bcf1db41c7b2b195764099f803185d-export interface Model { id: number; } export function make(id: number): Model { return { id }; }", - "signature": "755c74df06b876a52b12daa9bd085134-export interface Model {\n id: number;\n}\nexport declare function make(id: number): Model;\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "a5bcf1db41c7b2b195764099f803185d-export interface Model { id: number; } export function make(id: number): Model { return { id }; }", - "signature": "755c74df06b876a52b12daa9bd085134-export interface Model {\n id: number;\n}\nexport declare function make(id: number): Model;\n", - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./factory.ts", - "version": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", - "signature": "8bc5b2140b7efd4a238218fee9ed0bed-export { make } from \"./model\";\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", - "signature": "8bc5b2140b7efd4a238218fee9ed0bed-export { make } from \"./model\";\n", - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./right.ts", - "version": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", - "signature": "5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", - "signature": "5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n", - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./left.ts", - "version": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", - "signature": "4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", - "signature": "4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n", - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./barrel.ts", - "version": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", - "signature": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", - "impliedNodeFormat": "CommonJS" - }, - { - "fileName": "./index.ts", - "version": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", - "signature": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", - "impliedNodeFormat": "CommonJS" - } - ], - "fileIdsList": [ - [ - "./right.ts", - "./left.ts" - ], - [ - "./model.ts" - ], - [ - "./barrel.ts" - ], - [ - "./hub.ts", - "./factory.ts", - "./right.ts" - ], - [ - "./hub.ts", - "./factory.ts", - "./left.ts" - ] - ], - "options": { - "strict": true - }, - "referencedMap": { - "./barrel.ts": [ - "./right.ts", - "./left.ts" - ], - "./factory.ts": [ - "./model.ts" - ], - "./index.ts": [ - "./barrel.ts" - ], - "./left.ts": [ - "./hub.ts", - "./factory.ts", - "./right.ts" - ], - "./right.ts": [ - "./hub.ts", - "./factory.ts", - "./left.ts" - ] - }, - "semanticDiagnosticsPerFile": [ - [ - "./index.ts", - [ - { - "pos": 70, - "end": 77, - "code": 2322, - "category": 1, - "messageKey": "Type_0_is_not_assignable_to_type_1_2322", - "messageArgs": [ - "number", - "string" - ] - }, - { - "pos": 79, - "end": 87, - "code": 2322, - "category": 1, - "messageKey": "Type_0_is_not_assignable_to_type_1_2322", - "messageArgs": [ - "number", - "string" - ] - } - ] - ] - ], - "affectedFilesPendingEmit": [ - [ - "./barrel.ts", - "Js", - 7 - ], - [ - "./factory.ts", - "Js", - 4 - ], - [ - "./hub.ts", - "Js", - 2 - ], - [ - "./index.ts", - "Js", - 8 - ], - [ - "./left.ts", - "Js", - 6 - ], - [ - "./model.ts", - "Js", - 3 - ], - [ - "./right.ts", - "Js", - 5 - ] - ], - "size": 3054 -} - -Watch Registrations:: -Directory watches:: - /home/src/tslibs/TS/Lib - /home/src/workspaces/project (recursive) -tsconfig.json:: -SemanticDiagnostics:: -*refresh* /home/src/workspaces/project/model.ts -*refresh* /home/src/workspaces/project/factory.ts -*refresh* /home/src/workspaces/project/right.ts -*refresh* /home/src/workspaces/project/left.ts -*refresh* /home/src/workspaces/project/barrel.ts -*refresh* /home/src/workspaces/project/index.ts -Signatures:: -(computed .d.ts) /home/src/workspaces/project/model.ts -(computed .d.ts) /home/src/workspaces/project/factory.ts -(computed .d.ts) /home/src/workspaces/project/right.ts -(computed .d.ts) /home/src/workspaces/project/left.ts -(used version) /home/src/workspaces/project/barrel.ts -(used version) /home/src/workspaces/project/index.ts - - -Edit [5]:: restore both shared dependencies -//// [/home/src/workspaces/project/hub.ts] *modified* -export const prefix = "hub"; -// first edit - -// second edit - -//// [/home/src/workspaces/project/model.ts] *modified* -export interface Model { id: string; } export function make(id: string): Model { return { id }; } - - -Output:: -[HH:MM:SS AM] File change detected. Starting incremental compilation... - -[HH:MM:SS AM] Found 0 errors. Watching for file changes. - -//// [/home/src/workspaces/project/tsconfig.tsbuildinfo] *modified* -{"version":"FakeTSVersion","root":[[2,8]],"fileNames":["lib.es2026.full.d.ts","./hub.ts","./model.ts","./factory.ts","./right.ts","./left.ts","./barrel.ts","./index.ts"],"fileInfos":[{"version":"8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"df41fd128159de07c8cd657d90367a14-export const prefix = \"hub\";\n// first edit\n\n// second edit\n","signature":"eee9e59e027e6765a0d5610b039f5e8a-export declare const prefix = \"hub\";\n","impliedNodeFormat":1},{"version":"c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }","signature":"c7653311ee886021d70d18d464ff2d71-export interface Model {\n id: string;\n}\nexport declare function make(id: string): Model;\n","impliedNodeFormat":1},{"version":"8c035626178906db4f73ee993640fecd-export { make } from \"./model\";","signature":"8bc5b2140b7efd4a238218fee9ed0bed-export { make } from \"./model\";\n","impliedNodeFormat":1},{"version":"07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";","signature":"5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n","impliedNodeFormat":1},{"version":"8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";","signature":"4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n","impliedNodeFormat":1},"0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";","3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];"],"fileIdsList":[[5,6],[3],[7],[2,4,5],[2,4,6]],"options":{"strict":true},"referencedMap":[[7,1],[4,2],[8,3],[6,4],[5,5]],"affectedFilesPendingEmit":[7,4,2,8,6,3,5]} -//// [/home/src/workspaces/project/tsconfig.tsbuildinfo.readable.baseline.txt] *modified* -{ - "version": "FakeTSVersion", - "root": [ - { - "files": [ - "./hub.ts", - "./model.ts", - "./factory.ts", - "./right.ts", - "./left.ts", - "./barrel.ts", - "./index.ts" - ], - "original": [ - 2, - 8 - ] - } - ], - "fileNames": [ - "lib.es2026.full.d.ts", - "./hub.ts", - "./model.ts", - "./factory.ts", - "./right.ts", - "./left.ts", - "./barrel.ts", - "./index.ts" - ], - "fileInfos": [ - { - "fileName": "lib.es2026.full.d.ts", - "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "signature": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "affectsGlobalScope": true, - "impliedNodeFormat": "CommonJS", - "original": { - "version": "8859c12c614ce56ba9a18e58384a198f-/// \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 {}\ninterface SymbolConstructor {\n (desc?: string | number): symbol;\n for(name: string): symbol;\n readonly toStringTag: symbol;\n}\ndeclare var Symbol: SymbolConstructor;\ninterface Symbol {\n readonly [Symbol.toStringTag]: string;\n}\ndeclare const console: { log(msg: any): void; };", - "affectsGlobalScope": true, - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./hub.ts", - "version": "df41fd128159de07c8cd657d90367a14-export const prefix = \"hub\";\n// first edit\n\n// second edit\n", - "signature": "eee9e59e027e6765a0d5610b039f5e8a-export declare const prefix = \"hub\";\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "df41fd128159de07c8cd657d90367a14-export const prefix = \"hub\";\n// first edit\n\n// second edit\n", - "signature": "eee9e59e027e6765a0d5610b039f5e8a-export declare const prefix = \"hub\";\n", - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./model.ts", - "version": "c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }", - "signature": "c7653311ee886021d70d18d464ff2d71-export interface Model {\n id: string;\n}\nexport declare function make(id: string): Model;\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "c3a0075202bda4cd9036e02a547ec2c5-export interface Model { id: string; } export function make(id: string): Model { return { id }; }", - "signature": "c7653311ee886021d70d18d464ff2d71-export interface Model {\n id: string;\n}\nexport declare function make(id: string): Model;\n", - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./factory.ts", - "version": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", - "signature": "8bc5b2140b7efd4a238218fee9ed0bed-export { make } from \"./model\";\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "8c035626178906db4f73ee993640fecd-export { make } from \"./model\";", - "signature": "8bc5b2140b7efd4a238218fee9ed0bed-export { make } from \"./model\";\n", - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./right.ts", - "version": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", - "signature": "5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "07e82acbe36641a8ce675b19260fa5a2-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const right = make(prefix); export { left } from \"./left\";", - "signature": "5384af1820c5ff2c360cadd81ece6963-export declare const right: import(\"./model\").Model;\nexport { left } from \"./left\";\n", - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./left.ts", - "version": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", - "signature": "4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n", - "impliedNodeFormat": "CommonJS", - "original": { - "version": "8787d0bbf1b6fc034a8dddf15a994040-import { prefix } from \"./hub\"; import { make } from \"./factory\"; export const left = make(prefix); export { right } from \"./right\";", - "signature": "4cb928914cdf7892b933ea43a96add55-export declare const left: import(\"./model\").Model;\nexport { right } from \"./right\";\n", - "impliedNodeFormat": 1 - } - }, - { - "fileName": "./barrel.ts", - "version": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", - "signature": "0b617de94256baa3cd1e090732042a0a-export { left } from \"./left\"; export { right } from \"./right\";", - "impliedNodeFormat": "CommonJS" - }, - { - "fileName": "./index.ts", - "version": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", - "signature": "3f3b96b60ee7fcf8db28c5a0509c1d85-import { left, right } from \"./barrel\"; export const ids: string[] = [left.id, right.id];", - "impliedNodeFormat": "CommonJS" - } - ], - "fileIdsList": [ - [ - "./right.ts", - "./left.ts" - ], - [ - "./model.ts" - ], - [ - "./barrel.ts" - ], - [ - "./hub.ts", - "./factory.ts", - "./right.ts" - ], - [ - "./hub.ts", - "./factory.ts", - "./left.ts" - ] - ], - "options": { - "strict": true - }, - "referencedMap": { - "./barrel.ts": [ - "./right.ts", - "./left.ts" - ], - "./factory.ts": [ - "./model.ts" - ], - "./index.ts": [ - "./barrel.ts" - ], - "./left.ts": [ - "./hub.ts", - "./factory.ts", - "./right.ts" - ], - "./right.ts": [ - "./hub.ts", - "./factory.ts", - "./left.ts" - ] - }, - "affectedFilesPendingEmit": [ - [ - "./barrel.ts", - "Js", - 7 - ], - [ - "./factory.ts", - "Js", - 4 - ], - [ - "./hub.ts", - "Js", - 2 - ], - [ - "./index.ts", - "Js", - 8 - ], - [ - "./left.ts", - "Js", - 6 - ], - [ - "./model.ts", - "Js", - 3 - ], - [ - "./right.ts", - "Js", - 5 - ] - ], - "size": 2759 -} - -Watch Registrations:: -Directory watches:: - /home/src/tslibs/TS/Lib - /home/src/workspaces/project (recursive) -tsconfig.json:: -SemanticDiagnostics:: -*refresh* /home/src/workspaces/project/hub.ts -*refresh* /home/src/workspaces/project/model.ts -*refresh* /home/src/workspaces/project/factory.ts -*refresh* /home/src/workspaces/project/right.ts -*refresh* /home/src/workspaces/project/left.ts -*refresh* /home/src/workspaces/project/barrel.ts -*refresh* /home/src/workspaces/project/index.ts -Signatures:: -(computed .d.ts) /home/src/workspaces/project/hub.ts -(computed .d.ts) /home/src/workspaces/project/model.ts -(computed .d.ts) /home/src/workspaces/project/factory.ts -(computed .d.ts) /home/src/workspaces/project/right.ts -(computed .d.ts) /home/src/workspaces/project/left.ts -(used version) /home/src/workspaces/project/barrel.ts -(used version) /home/src/workspaces/project/index.ts