ttsc 0.18.2 → 0.18.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/cmd/ttscgraph/main.go +18 -12
  2. package/cmd/ttscgraph/run_help_version_and_bad_flags_exit_codes_test.go +23 -5
  3. package/cmd/ttscgraph/serve.go +863 -0
  4. package/cmd/ttscgraph/serve_protocol_rejects_invalid_request_line_test.go +43 -0
  5. package/cmd/ttscgraph/serve_protocol_retries_session_creation_test.go +83 -0
  6. package/cmd/ttscgraph/serve_protocol_reuses_session_test.go +35 -0
  7. package/cmd/ttscgraph/serve_session_applies_source_edit_incrementally_test.go +55 -0
  8. package/cmd/ttscgraph/serve_session_fails_closed_on_deleted_config_test.go +68 -0
  9. package/cmd/ttscgraph/serve_session_fails_closed_on_invalid_config_test.go +50 -0
  10. package/cmd/ttscgraph/serve_session_keeps_missing_literal_root_unchanged_test.go +46 -0
  11. package/cmd/ttscgraph/serve_session_rebuilds_import_graph_change_test.go +60 -0
  12. package/cmd/ttscgraph/serve_session_reloads_created_literal_root_test.go +44 -0
  13. package/cmd/ttscgraph/serve_session_reloads_extended_config_change_test.go +45 -0
  14. package/cmd/ttscgraph/serve_session_reloads_newly_resolved_conditional_export_test.go +60 -0
  15. package/cmd/ttscgraph/serve_session_reloads_newly_resolved_config_types_test.go +44 -0
  16. package/cmd/ttscgraph/serve_session_reloads_newly_resolved_excluded_import_test.go +62 -0
  17. package/cmd/ttscgraph/serve_session_reloads_newly_resolved_package_export_test.go +46 -0
  18. package/cmd/ttscgraph/serve_session_reloads_newly_resolved_package_import_test.go +46 -0
  19. package/cmd/ttscgraph/serve_session_reloads_newly_resolved_path_alias_test.go +47 -0
  20. package/cmd/ttscgraph/serve_session_reloads_newly_resolved_reference_path_test.go +42 -0
  21. package/cmd/ttscgraph/serve_session_reloads_newly_resolved_root_dirs_target_test.go +46 -0
  22. package/cmd/ttscgraph/serve_session_reloads_newly_resolved_type_reference_test.go +42 -0
  23. package/cmd/ttscgraph/serve_session_reloads_root_file_set_test.go +52 -0
  24. package/cmd/ttscgraph/serve_session_reloads_source_deleted_during_load_test.go +60 -0
  25. package/cmd/ttscgraph/serve_session_reloads_transitive_project_reference_test.go +55 -0
  26. package/cmd/ttscgraph/serve_session_reloads_when_program_plugin_linked_test.go +53 -0
  27. package/cmd/ttscgraph/serve_session_reuses_unchanged_preamble_source_test.go +45 -0
  28. package/cmd/ttscgraph/serve_session_reuses_unchanged_snapshot_test.go +52 -0
  29. package/cmd/ttscgraph/serve_session_revisits_source_edited_during_load_test.go +61 -0
  30. package/cmd/ttscgraph/serve_session_tolerates_os_invalid_resolution_candidate_test.go +56 -0
  31. package/cmd/ttscgraph/serve_session_tracks_all_module_specifier_forms_test.go +41 -0
  32. package/cmd/ttscgraph/serve_session_tracks_diamond_project_references_once_test.go +61 -0
  33. package/driver/emit_plugin.go +27 -12
  34. package/driver/plugins.go +21 -5
  35. package/driver/program.go +43 -14
  36. package/driver/session.go +11 -3
  37. package/lib/TtscCompiler.d.ts +3 -2
  38. package/lib/TtscCompiler.js +6 -14
  39. package/lib/TtscCompiler.js.map +1 -1
  40. package/lib/compiler/internal/compileProjectInMemory.js +14 -1
  41. package/lib/compiler/internal/compileProjectInMemory.js.map +1 -1
  42. package/lib/compiler/internal/runBuild.d.ts +7 -0
  43. package/lib/compiler/internal/runBuild.js +176 -16
  44. package/lib/compiler/internal/runBuild.js.map +1 -1
  45. package/lib/structures/ITtscCompilerResult.d.ts +8 -5
  46. package/package.json +8 -8
  47. package/shim/printer/shim.go +22 -4
  48. package/src/TtscCompiler.ts +4 -16
  49. package/src/compiler/internal/compileProjectInMemory.ts +17 -1
  50. package/src/compiler/internal/runBuild.ts +237 -23
  51. package/src/structures/ITtscCompilerResult.ts +8 -5
@@ -0,0 +1,61 @@
1
+ package main
2
+
3
+ import (
4
+ "os"
5
+ "path/filepath"
6
+ "testing"
7
+
8
+ "github.com/samchon/ttsc/packages/ttsc/driver"
9
+ )
10
+
11
+ // TestServeSessionRevisitsSourceEditedDuringLoad verifies a source edited
12
+ // between compiler load and state capture is refreshed on the next snapshot.
13
+ //
14
+ // Hashing the raw disk bytes at capture time would bless content the resident
15
+ // program never parsed: disk and graph would disagree until an unrelated
16
+ // change. The capture must hash the resident text instead, so the next
17
+ // snapshot sees the disk mismatch and applies the missed edit.
18
+ //
19
+ // 1. Load a session, then rewrite the source before capturing state.
20
+ // 2. Take a snapshot and assert it refreshes to the on-disk declaration.
21
+ // 3. Take another snapshot and assert the session has converged (unchanged).
22
+ func TestServeSessionRevisitsSourceEditedDuringLoad(t *testing.T) {
23
+ root := graphSessionFixture(t)
24
+ compiler, diags, err := driver.NewSession(root, "tsconfig.json", driver.LoadProgramOptions{})
25
+ if err != nil {
26
+ t.Fatal(err)
27
+ }
28
+ if compiler == nil {
29
+ t.Fatalf("NewSession returned nil session (diagnostics: %v)", diags)
30
+ }
31
+ file := filepath.Join(root, "src", "index.ts")
32
+ if err := os.WriteFile(file, []byte("export class EditedDuringLoad {}\n"), 0o644); err != nil {
33
+ t.Fatal(err)
34
+ }
35
+ session := &graphSession{
36
+ cwd: root,
37
+ tsconfig: "tsconfig.json",
38
+ compiler: compiler,
39
+ initialized: true,
40
+ }
41
+ defer session.Close()
42
+ if err := session.captureState(); err != nil {
43
+ t.Fatal(err)
44
+ }
45
+
46
+ dump, _, changed, err := session.Snapshot()
47
+ if err != nil {
48
+ t.Fatal(err)
49
+ }
50
+ if dump == nil || !changed || !hasDumpNode(*dump, "EditedDuringLoad") || hasDumpNode(*dump, "BeforeEdit") {
51
+ t.Fatalf("edited-during-load source was not refreshed: dump:%v changed:%v", dump != nil, changed)
52
+ }
53
+
54
+ dump, mode, changed, err := session.Snapshot()
55
+ if err != nil {
56
+ t.Fatal(err)
57
+ }
58
+ if dump != nil || mode != "unchanged" || changed {
59
+ t.Fatalf("session did not converge after the missed edit: dump:%v mode:%q changed:%v", dump != nil, mode, changed)
60
+ }
61
+ }
@@ -0,0 +1,56 @@
1
+ package main
2
+
3
+ import (
4
+ "path/filepath"
5
+ "testing"
6
+ )
7
+
8
+ // TestServeSessionToleratesOsInvalidResolutionCandidate verifies unresolved
9
+ // module specifiers that name OS-unparseable paths never break the session.
10
+ //
11
+ // Bundler-style specifiers (`./style.css?inline`) and URL imports (`data:`)
12
+ // stay unresolved in tsgo and become freshness candidates. On Windows those
13
+ // candidate paths fail os.ReadFile with ERROR_INVALID_NAME, which is neither
14
+ // ErrNotExist nor ErrInvalid; treating that as a snapshot error would make
15
+ // every graph request fail forever on such a project.
16
+ //
17
+ // 1. Open a session whose only root imports a query-suffixed CSS path and a
18
+ // data: URL.
19
+ // 2. Assert the session initializes and serves its initial dump.
20
+ // 3. Assert an untouched second snapshot reports unchanged.
21
+ func TestServeSessionToleratesOsInvalidResolutionCandidate(t *testing.T) {
22
+ root := t.TempDir()
23
+ writeGraphFile(t, filepath.Join(root, "tsconfig.json"), `{
24
+ "compilerOptions": { "target": "ES2022", "module": "commonjs" },
25
+ "files": ["src/index.ts"]
26
+ }`)
27
+ writeGraphFile(t, filepath.Join(root, "src", "index.ts"), `
28
+ // @ts-expect-error bundler-only specifier stays unresolved for tsgo
29
+ import styles from "./style.css?inline";
30
+ // @ts-expect-error data: URLs resolve at runtime, not through the compiler
31
+ import remote from "data:text/plain,hello";
32
+ export const value: unknown[] = [styles, remote];
33
+ `)
34
+
35
+ session, err := newGraphSession(root, "tsconfig.json")
36
+ if err != nil {
37
+ t.Fatal(err)
38
+ }
39
+ defer session.Close()
40
+
41
+ dump, mode, changed, err := session.Snapshot()
42
+ if err != nil {
43
+ t.Fatal(err)
44
+ }
45
+ if dump == nil || mode != "initial" || !changed {
46
+ t.Fatalf("initial snapshot = dump:%v mode:%q changed:%v", dump != nil, mode, changed)
47
+ }
48
+
49
+ dump, mode, changed, err = session.Snapshot()
50
+ if err != nil {
51
+ t.Fatal(err)
52
+ }
53
+ if dump != nil || mode != "unchanged" || changed {
54
+ t.Fatalf("untouched snapshot = dump:%v mode:%q changed:%v", dump != nil, mode, changed)
55
+ }
56
+ }
@@ -0,0 +1,41 @@
1
+ package main
2
+
3
+ import (
4
+ "path/filepath"
5
+ "testing"
6
+ )
7
+
8
+ // TestServeSessionTracksAllModuleSpecifierForms verifies that every TypeScript
9
+ // syntax which can trigger module resolution contributes missing-file
10
+ // candidates to the freshness snapshot.
11
+ func TestServeSessionTracksAllModuleSpecifierForms(t *testing.T) {
12
+ root := t.TempDir()
13
+ writeGraphFile(t, filepath.Join(root, "tsconfig.json"), `{
14
+ "compilerOptions": { "target": "ES2022", "module": "commonjs", "strict": true },
15
+ "files": ["src/index.ts"]
16
+ }`)
17
+ writeGraphFile(t, filepath.Join(root, "src", "index.ts"), `
18
+ import legacy = require("./legacy");
19
+ export { exported } from "./exported";
20
+ export type Deferred = import("./types").Deferred;
21
+ export const lazy = import("./lazy");
22
+ export const common = require("./common");
23
+ export const result = legacy();
24
+ `)
25
+
26
+ session, err := newGraphSession(root, "tsconfig.json")
27
+ if err != nil {
28
+ t.Fatal(err)
29
+ }
30
+ defer session.Close()
31
+
32
+ for _, name := range []string{"legacy.ts", "exported.ts", "types.ts", "lazy.ts", "common.ts"} {
33
+ candidate := filepath.Join(root, "src", name)
34
+ state, ok := session.auxStates[candidate]
35
+ if !ok {
36
+ t.Errorf("module candidate %s was not tracked", name)
37
+ } else if state.Exists {
38
+ t.Errorf("missing module candidate %s unexpectedly exists", name)
39
+ }
40
+ }
41
+ }
@@ -0,0 +1,61 @@
1
+ package main
2
+
3
+ import (
4
+ "path/filepath"
5
+ "testing"
6
+ )
7
+
8
+ // TestServeSessionTracksDiamondProjectReferencesOnce verifies the config
9
+ // traversal terminates and deduplicates when two references share a child.
10
+ //
11
+ // A diamond (root -> left, root -> right, both -> shared) visits the shared
12
+ // config twice; without the seen-set the traversal would duplicate tracked
13
+ // state, and on a reference cycle it would never terminate. The shared leaf
14
+ // must appear in the freshness state exactly once and the session must stay
15
+ // stable across untouched snapshots.
16
+ //
17
+ // 1. Open a session over a diamond of project references.
18
+ // 2. Assert the shared leaf config is hash-tracked.
19
+ // 3. Assert an untouched snapshot reports unchanged.
20
+ func TestServeSessionTracksDiamondProjectReferencesOnce(t *testing.T) {
21
+ root := t.TempDir()
22
+ writeGraphFile(t, filepath.Join(root, "tsconfig.json"), `{
23
+ "files": ["src/index.ts"],
24
+ "references": [{ "path": "./left" }, { "path": "./right" }]
25
+ }`)
26
+ writeGraphFile(t, filepath.Join(root, "src", "index.ts"), "export const root = 1;\n")
27
+ for _, side := range []string{"left", "right"} {
28
+ writeGraphFile(t, filepath.Join(root, side, "tsconfig.json"), `{
29
+ "compilerOptions": { "composite": true },
30
+ "files": ["src/index.ts"],
31
+ "references": [{ "path": "../shared" }]
32
+ }`)
33
+ writeGraphFile(t, filepath.Join(root, side, "src", "index.ts"), "export const side = 1;\n")
34
+ }
35
+ writeGraphFile(t, filepath.Join(root, "shared", "tsconfig.json"), `{
36
+ "compilerOptions": { "composite": true },
37
+ "files": ["src/index.ts"]
38
+ }`)
39
+ writeGraphFile(t, filepath.Join(root, "shared", "src", "index.ts"), "export const shared = 1;\n")
40
+
41
+ session, err := newGraphSession(root, "tsconfig.json")
42
+ if err != nil {
43
+ t.Fatal(err)
44
+ }
45
+ defer session.Close()
46
+ sharedConfig := filepath.ToSlash(filepath.Join(root, "shared", "tsconfig.json"))
47
+ if _, ok := session.configHashes[sharedConfig]; !ok {
48
+ t.Fatalf("shared diamond config was not tracked: %s; got %#v", sharedConfig, session.configHashes)
49
+ }
50
+ if _, _, _, err := session.Snapshot(); err != nil {
51
+ t.Fatal(err)
52
+ }
53
+
54
+ dump, mode, changed, err := session.Snapshot()
55
+ if err != nil {
56
+ t.Fatal(err)
57
+ }
58
+ if dump != nil || mode != "unchanged" || changed {
59
+ t.Fatalf("diamond references churned: dump:%v mode:%q changed:%v", dump != nil, mode, changed)
60
+ }
61
+ }
@@ -80,19 +80,12 @@ func (p *Program) EmitWithPluginTransformer(transform PluginTransform, writeFile
80
80
  return p.EmitWithPluginTransformers([]PluginTransform{transform}, writeFile)
81
81
  }
82
82
 
83
- // EmitLinkedTransforms emits using the emit-phase transformers contributed by
84
- // every registered EmitTransformPlugin (in registration order). This is the
85
- // AST-integration emit path that replaces the ProgramPlugin + RewriteSet
86
- // text-splice path.
83
+ // EmitLinkedTransforms emits using only the linked plugins' hooks, with no
84
+ // host-owned transformer. It is the no-transform convenience form of
85
+ // EmitWithPluginTransformers, which honors linked plugins on every emit it
86
+ // runs.
87
87
  func (p *Program) EmitLinkedTransforms(writeFile shimcompiler.WriteFile) ([]Diagnostic, error) {
88
- if p == nil || p.TSProgram == nil {
89
- return nil, errors.New("driver: nil program")
90
- }
91
- transforms, err := p.plugins.emitTransforms()
92
- if err != nil {
93
- return nil, err
94
- }
95
- return p.EmitWithPluginTransformers(transforms, writeFile)
88
+ return p.EmitWithPluginTransformers(nil, writeFile)
96
89
  }
97
90
 
98
91
  // restoreOriginalDeclarationSymbols copies the binder symbol from each original
@@ -135,6 +128,11 @@ func restoreOriginalDeclarationSymbols(ec *shimprinter.EmitContext, node *shimas
135
128
  // import aliasing: tsgo's module-transform aliases the plugins' injected
136
129
  // imports itself.
137
130
  //
131
+ // Linked plugins are honored on every call: registered ProgramPlugins apply
132
+ // to the program before emit (once per Program), and registered
133
+ // EmitTransformPlugins are chained after the caller's transforms in
134
+ // registration order.
135
+ //
138
136
  // Because the JavaScript side bypasses tsgo's own emitter, it reproduces the
139
137
  // emitter's source-map step via PrintFileWithSourceMap: a `sourceMap` /
140
138
  // `inlineSourceMap` build emits a `.js.map` (and `//# sourceMappingURL=`
@@ -146,6 +144,23 @@ func (p *Program) EmitWithPluginTransformers(transforms []PluginTransform, write
146
144
  if p == nil || p.TSProgram == nil {
147
145
  return nil, errors.New("driver: nil program")
148
146
  }
147
+ // Linked plugins ride inside whichever host binary owns the emit pass, and
148
+ // the host does not know which linked packages ttsc compiled into it. Honor
149
+ // them at the funnel every host emits through: linked ProgramPlugins mutate
150
+ // the program before the per-file loop below, and linked EmitTransformPlugins
151
+ // join the per-file chain after the host's own transforms. A host that only
152
+ // passes its own transform would otherwise link, register, and silently never
153
+ // run the linked hooks.
154
+ if err := p.ApplyLinkedPlugins(); err != nil {
155
+ return nil, err
156
+ }
157
+ linked, err := p.plugins.emitTransforms()
158
+ if err != nil {
159
+ return nil, err
160
+ }
161
+ if len(linked) != 0 {
162
+ transforms = append(append([]PluginTransform{}, transforms...), linked...)
163
+ }
149
164
  host := &pluginEmitHost{program: p.TSProgram, emitResolver: p.Checker.GetEmitResolver()}
150
165
  options := p.TSProgram.Options()
151
166
  for _, sf := range shimcompiler.GetSourceFilesToEmit(host, nil, false) {
package/driver/plugins.go CHANGED
@@ -42,11 +42,14 @@ type ProgramPlugin interface {
42
42
  // EmitTransformPlugin contributes an emit-phase AST transformer. The returned
43
43
  // PluginTransform runs first in tsgo's per-file emit chain, sharing the emit
44
44
  // EmitContext with the builtin transformers, so a plugin returns AST instead of
45
- // spliced text: it injects its own imports with ec.Factory and references them
46
- // via NewGeneratedNameForNode, and tsgo's module-transform emits the require and
47
- // aliases the references itself. This is the AST-integration replacement for the
48
- // ProgramPlugin + RewriteSet text-splice model. A plugin whose returned
49
- // transform is nil contributes nothing.
45
+ // spliced text. For an injected import, allocate its binding once with
46
+ // ec.Factory.NewUniqueNameEx and the Optimistic | FileLevel flags, then reuse
47
+ // that identifier for every reference. NewGeneratedNameForNode on a string
48
+ // literal uses tsgo's temp-name channel and can be shadowed by downlevel temps.
49
+ // Tsgo's module-transform emits the require and aliases the references itself.
50
+ // This is the AST-integration replacement for the ProgramPlugin + RewriteSet
51
+ // text-splice model. A plugin whose returned transform is nil contributes
52
+ // nothing.
50
53
  type EmitTransformPlugin interface {
51
54
  EmitTransform(PluginContext) (PluginTransform, error)
52
55
  }
@@ -130,6 +133,19 @@ func (state linkedPluginState) apply(prog *Program) error {
130
133
  return nil
131
134
  }
132
135
 
136
+ func (state linkedPluginState) hasProgramPlugins() bool {
137
+ for index := range state.entries {
138
+ plugin, ok := registeredPlugin(index)
139
+ if !ok {
140
+ continue
141
+ }
142
+ if _, ok := plugin.(ProgramPlugin); ok {
143
+ return true
144
+ }
145
+ }
146
+ return false
147
+ }
148
+
133
149
  // emitTransforms collects an emit-phase PluginTransform from every registered
134
150
  // EmitTransformPlugin, in registration order. Entries that do not implement
135
151
  // EmitTransformPlugin, or whose transform is nil, are skipped.
package/driver/program.go CHANGED
@@ -94,11 +94,15 @@ func NewLintDiagnostic(
94
94
  return d
95
95
  }
96
96
 
97
- // SourceFile returns the program source file matching filename.
97
+ // SourceFile returns the program source file matching filename. Like
98
+ // SourceFiles, it applies linked ProgramPlugins first so a single-file
99
+ // consumer (e.g. a host's --file transform lane) sees the same mutated tree
100
+ // as a whole-project walk.
98
101
  func (p *Program) SourceFile(filename string) *ast.SourceFile {
99
102
  if p == nil || p.TSProgram == nil {
100
103
  return nil
101
104
  }
105
+ _ = p.ApplyLinkedPlugins()
102
106
  normalized := filepath.ToSlash(filename)
103
107
  for _, file := range p.TSProgram.SourceFiles() {
104
108
  if filepath.ToSlash(file.FileName()) == normalized {
@@ -185,15 +189,16 @@ func CountErrors(diagnostics []Diagnostic) int {
185
189
 
186
190
  // Program is the shim-agnostic facade the rest of the engine sees.
187
191
  type Program struct {
188
- TSProgram *shimcompiler.Program
189
- ParsedConfig *tsoptions.ParsedCommandLine
190
- Checker *shimchecker.Checker
191
- checkerRelease func()
192
- Host shimcompiler.CompilerHost
193
- FS vfs.FS
194
- SourcePreamble string
195
- plugins linkedPluginState
196
- pluginsApplied bool
192
+ TSProgram *shimcompiler.Program
193
+ ParsedConfig *tsoptions.ParsedCommandLine
194
+ Checker *shimchecker.Checker
195
+ checkerRelease func()
196
+ Host shimcompiler.CompilerHost
197
+ FS vfs.FS
198
+ SourcePreamble string
199
+ plugins linkedPluginState
200
+ pluginsApplied bool
201
+ pluginsApplyErr error
197
202
  }
198
203
 
199
204
  // LoadProgramOptions controls tsconfig overrides applied before tsgo creates
@@ -451,10 +456,10 @@ type sourcePreambleFS struct {
451
456
 
452
457
  func (fs sourcePreambleFS) ReadFile(filePath string) (string, bool) {
453
458
  contents, ok := fs.FS.ReadFile(filePath)
454
- if !ok || !isSourcePreambleTarget(filePath) {
459
+ if !ok {
455
460
  return contents, ok
456
461
  }
457
- return ApplySourcePreamble(contents, fs.preamble), true
462
+ return ApplySourcePreambleToFile(filePath, contents, fs.preamble), true
458
463
  }
459
464
 
460
465
  // isSourcePreambleTarget reports whether the preamble should be injected into
@@ -475,6 +480,15 @@ func isSourcePreambleTarget(filePath string) bool {
475
480
  return false
476
481
  }
477
482
 
483
+ // ApplySourcePreambleToFile applies a generated preamble only when filePath is
484
+ // a non-declaration TypeScript or JavaScript source, matching sourcePreambleFS.
485
+ func ApplySourcePreambleToFile(filePath string, text string, preamble string) string {
486
+ if !isSourcePreambleTarget(filePath) {
487
+ return text
488
+ }
489
+ return ApplySourcePreamble(text, preamble)
490
+ }
491
+
478
492
  // ApplySourcePreamble inserts a generated source preamble without moving the
479
493
  // file's BOM or hashbang away from the first bytes of the physical output.
480
494
  func ApplySourcePreamble(text string, preamble string) string {
@@ -521,12 +535,27 @@ func (p *Program) sourceFilesRaw() []*ast.SourceFile {
521
535
  }
522
536
 
523
537
  // ApplyLinkedPlugins runs registered linked ProgramPlugin hooks exactly once.
538
+ // A hook failure is latched and returned on every subsequent call: SourceFiles
539
+ // swallows the error by contract, so without the latch a lookup that happened
540
+ // to run first would consume the only report and let a later emit proceed over
541
+ // the half-applied program as if nothing failed.
524
542
  func (p *Program) ApplyLinkedPlugins() error {
525
- if p == nil || p.pluginsApplied {
543
+ if p == nil {
526
544
  return nil
527
545
  }
546
+ if p.pluginsApplied {
547
+ return p.pluginsApplyErr
548
+ }
528
549
  p.pluginsApplied = true
529
- return p.plugins.apply(p)
550
+ p.pluginsApplyErr = p.plugins.apply(p)
551
+ return p.pluginsApplyErr
552
+ }
553
+
554
+ // HasLinkedProgramPlugins reports whether the loaded project has an active
555
+ // ProgramPlugin. Those hooks mutate parsed ASTs in place and therefore require
556
+ // a fresh Program rather than Session's incremental source replacement.
557
+ func (p *Program) HasLinkedProgramPlugins() bool {
558
+ return p != nil && p.plugins.hasProgramPlugins()
530
559
  }
531
560
 
532
561
  // Diagnostics returns project diagnostics that must block compilation or
package/driver/session.go CHANGED
@@ -1,13 +1,15 @@
1
1
  package driver
2
2
 
3
3
  import (
4
+ "context"
5
+
4
6
  shimtspath "github.com/microsoft/typescript-go/shim/tspath"
5
7
  )
6
8
 
7
9
  // Session is a resident compiler host for incremental type-checking: it keeps a
8
10
  // loaded program alive and re-parses only the changed file on each edit (reusing
9
- // the unchanged ASTs and the pinned checker through UpdateProgram), instead of
10
- // recompiling the whole project per request.
11
+ // the unchanged ASTs and refreshing the checker for the updated Program),
12
+ // instead of recompiling the whole project per request.
11
13
  //
12
14
  // It is the driver-level incremental type-check primitive. The resident
13
15
  // transform path (utility-host `serve`) deliberately does not use it: the
@@ -50,10 +52,16 @@ func (s *Session) Apply(absPath, content string) bool {
50
52
  name = file.FileName()
51
53
  }
52
54
  changed := shimtspath.ToPath(name, s.cwd, s.overlay.caseSensitive)
53
- newHost := DefaultHost(s.cwd, s.overlay)
55
+ newHost := DefaultHost(s.cwd, s.prog.FS)
54
56
  newProg, reused := s.prog.TSProgram.UpdateProgram(changed, newHost, nil)
55
57
  if newProg != nil {
58
+ if s.prog.checkerRelease != nil {
59
+ s.prog.checkerRelease()
60
+ }
61
+ checker, release := newProg.GetTypeChecker(context.Background())
56
62
  s.prog.TSProgram = newProg
63
+ s.prog.Checker = checker
64
+ s.prog.checkerRelease = release
57
65
  s.prog.Host = newHost
58
66
  }
59
67
  return reused
@@ -70,8 +70,9 @@ export declare class TtscCompiler {
70
70
  * directory before returning.
71
71
  *
72
72
  * The result uses an `embed-typescript`-style discriminated union: `success`
73
- * for clean compiles, `failure` for normal compiler diagnostics, and
74
- * `exception` for host setup or process failures.
73
+ * for clean compiles, `failure` for compiler diagnostics or plugin failures
74
+ * that reached the build pipeline, and `exception` for host failures that
75
+ * prevent any project check from running.
75
76
  *
76
77
  * @returns Structured compilation result containing diagnostics or output.
77
78
  */
@@ -9,6 +9,7 @@ const node_path_1 = __importDefault(require("node:path"));
9
9
  const compileProjectInMemory_1 = require("./compiler/internal/compileProjectInMemory");
10
10
  const resolveProjectConfig_1 = require("./compiler/internal/project/resolveProjectConfig");
11
11
  const resolveBinary_1 = require("./compiler/internal/resolveBinary");
12
+ const runBuild_1 = require("./compiler/internal/runBuild");
12
13
  const transformProjectInMemory_1 = require("./compiler/internal/transformProjectInMemory");
13
14
  const buildSourcePlugin_1 = require("./plugin/internal/buildSourcePlugin");
14
15
  const loadProjectPlugins_1 = require("./plugin/internal/loadProjectPlugins");
@@ -121,8 +122,9 @@ class TtscCompiler {
121
122
  * directory before returning.
122
123
  *
123
124
  * The result uses an `embed-typescript`-style discriminated union: `success`
124
- * for clean compiles, `failure` for normal compiler diagnostics, and
125
- * `exception` for host setup or process failures.
125
+ * for clean compiles, `failure` for compiler diagnostics or plugin failures
126
+ * that reached the build pipeline, and `exception` for host failures that
127
+ * prevent any project check from running.
126
128
  *
127
129
  * @returns Structured compilation result containing diagnostics or output.
128
130
  */
@@ -293,22 +295,12 @@ function toCompilerResult(project) {
293
295
  }
294
296
  return {
295
297
  diagnostics: result.diagnostics.length === 0
296
- ? [createProcessDiagnostic(result)]
298
+ ? [(0, runBuild_1.createProcessDiagnostic)(result)]
297
299
  : result.diagnostics,
298
300
  output,
299
301
  type: "failure",
300
302
  };
301
303
  }
302
- function createProcessDiagnostic(result) {
303
- const messageText = (result.stderr || result.stdout).trim() ||
304
- `ttsc exited with status ${result.status}`;
305
- return {
306
- category: "error",
307
- code: "TTSC_PROCESS",
308
- file: null,
309
- messageText,
310
- };
311
- }
312
304
  function toCompilerTransformation(project) {
313
305
  const { dependencies, result, typescript } = project;
314
306
  const dependencyField = dependencies === undefined ? {} : { dependencies };
@@ -325,7 +317,7 @@ function toCompilerTransformation(project) {
325
317
  return {
326
318
  ...dependencyField,
327
319
  diagnostics: result.diagnostics.length === 0
328
- ? [createProcessDiagnostic(result)]
320
+ ? [(0, runBuild_1.createProcessDiagnostic)(result)]
329
321
  : result.diagnostics,
330
322
  type: "failure",
331
323
  typescript,
@@ -1 +1 @@
1
- {"version":3,"file":"TtscCompiler.js","sourceRoot":"","sources":["../src/TtscCompiler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TtscCompiler.js","sourceRoot":"","sources":["../src/TtscCompiler.ts"],"names":[],"mappings":"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"}
@@ -33,7 +33,7 @@ function compileProjectInMemory(options) {
33
33
  projectRoot: options.projectRoot,
34
34
  tsconfig: options.tsconfig,
35
35
  });
36
- if (hasConfiguredPlugins(options, project)) {
36
+ if (shouldUsePluginBuild(options, project)) {
37
37
  return compileProjectWithPlugins(options, cwd, project);
38
38
  }
39
39
  const tsconfig = project.path;
@@ -67,6 +67,19 @@ function compileProjectInMemory(options) {
67
67
  function hasConfiguredPlugins(options, project) {
68
68
  return (0, loadProjectPlugins_1.hasProjectPluginEntries)(project, options.plugins);
69
69
  }
70
+ /**
71
+ * Route plugin discovery failures through runBuild's recoverable setup path.
72
+ * The fast native-host lane cannot surface the plugin error or run the
73
+ * post-failure TypeScript check, while the plugin-backed lane can do both.
74
+ */
75
+ function shouldUsePluginBuild(options, project) {
76
+ try {
77
+ return hasConfiguredPlugins(options, project);
78
+ }
79
+ catch {
80
+ return true;
81
+ }
82
+ }
70
83
  /**
71
84
  * Plugin-backed compilation: emit into a temp directory via `runBuild`, then
72
85
  * read back every file the build wrote so they can be returned as strings.
@@ -1 +1 @@
1
- {"version":3,"file":"compileProjectInMemory.js","sourceRoot":"","sources":["../../../src/compiler/internal/compileProjectInMemory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compileProjectInMemory.js","sourceRoot":"","sources":["../../../src/compiler/internal/compileProjectInMemory.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,13 @@ export declare function runBuild(options?: RunBuildOptions): TtscBuildResult;
19
19
  * - `stdout`/`stderr`: concatenated left then right.
20
20
  */
21
21
  export declare function appendBuildOutput(left: TtscBuildResult, right: TtscBuildResult): TtscBuildResult;
22
+ /**
23
+ * Synthesize one structured diagnostic from a non-zero process result that
24
+ * produced no parsable diagnostics, carrying the captured stderr/stdout as the
25
+ * message. Shared by the public API result mapping and the plugin-failure
26
+ * recovery pass so the failure text is never dropped from structured output.
27
+ */
28
+ export declare function createProcessDiagnostic(result: TtscBuildResult): ITtscCompilerDiagnostic;
22
29
  /**
23
30
  * `TtscBuildResult` with `diagnostics` made optional. Used internally when
24
31
  * diagnostics are parsed lazily from stdout/stderr by `normalizeBuildOutput`.