7
7
"github.com/microsoft/typescript-go/internal/collections"
8
8
"github.com/microsoft/typescript-go/internal/core"
9
9
"github.com/microsoft/typescript-go/internal/diagnostics"
10
+ "github.com/microsoft/typescript-go/internal/tsoptions"
10
11
"github.com/microsoft/typescript-go/internal/tspath"
11
12
)
12
13
@@ -23,35 +24,35 @@ type (
23
24
// * for non incremental program buildinfo
24
25
// * - string that is the root file name
25
26
// */
26
- // type buildInfoRoot struct {
27
- // incrementalStartEnd *[2]incrementalBuildInfoFileId
28
- // incrementalSingle incrementalBuildInfoFileId
27
+ // type BuildInfoRoot struct {
28
+ // StartEnd *[2]BuildInfoFileId
29
+ // Single BuildInfoFileId
29
30
// nonIncremental string
30
31
// }
31
32
32
- // func (o buildInfoRoot ) MarshalJSON() ([]byte, error) {
33
- // if o.incrementalStartEnd != nil {
34
- // return json.Marshal(o.incrementalStartEnd )
33
+ // func (o BuildInfoRoot ) MarshalJSON() ([]byte, error) {
34
+ // if o.StartEnd != nil {
35
+ // return json.Marshal(o.StartEnd )
35
36
// }
36
- // if o.incrementalSingle != 0 {
37
- // return json.Marshal(o.incrementalSingle )
37
+ // if o.Single != 0 {
38
+ // return json.Marshal(o.Single )
38
39
// }
39
40
// if o.nonIncremental != "" {
40
41
// return json.Marshal(o.nonIncremental)
41
42
// }
42
43
// panic("unknown BuildInfoRoot type")
43
44
// }
44
45
45
- // func (o *buildInfoRoot ) UnmarshalJSON(data []byte) error {
46
- // *o = buildInfoRoot {}
47
- // var vIncrementalStartEnd [2]incrementalBuildInfoFileId
48
- // if err := json.Unmarshal(data, &vIncrementalStartEnd ); err == nil {
49
- // o.incrementalStartEnd = &vIncrementalStartEnd
46
+ // func (o *BuildInfoRoot ) UnmarshalJSON(data []byte) error {
47
+ // *o = BuildInfoRoot {}
48
+ // var vStartEnd [2]BuildInfoFileId
49
+ // if err := json.Unmarshal(data, &vStartEnd ); err == nil {
50
+ // o.StartEnd = &vStartEnd
50
51
// return nil
51
52
// }
52
- // var vIncrementalSingle incrementalBuildInfoFileId
53
- // if err := json.Unmarshal(data, &vIncrementalSingle ); err == nil {
54
- // o.incrementalSingle = vIncrementalSingle
53
+ // var vSingle BuildInfoFileId
54
+ // if err := json.Unmarshal(data, &vSingle ); err == nil {
55
+ // o.Single = vSingle
55
56
// return nil
56
57
// }
57
58
// var vNonIncremental string
@@ -158,7 +159,7 @@ func (b *BuildInfoFileInfo) UnmarshalJSON(data []byte) error {
158
159
}
159
160
var fileInfo buildInfoFileInfoWithSignature
160
161
if err := json .Unmarshal (data , & fileInfo ); err != nil {
161
- return fmt .Errorf ("invalid incrementalBuildInfoFileInfo : %s" , data )
162
+ return fmt .Errorf ("invalid BuildInfoFileInfo : %s" , data )
162
163
}
163
164
* b = BuildInfoFileInfo {fileInfo : & fileInfo }
164
165
return nil
@@ -186,7 +187,7 @@ func (b *BuildInfoReferenceMapEntry) UnmarshalJSON(data []byte) error {
186
187
}
187
188
188
189
type BuildInfoDiagnostic struct {
189
- // incrementalBuildInfoFileId if it is for a File thats other than its stored for
190
+ // BuildInfoFileId if it is for a File thats other than its stored for
190
191
File BuildInfoFileId `json:"file,omitzero"`
191
192
NoFile bool `json:"noFile,omitzero"`
192
193
Pos int `json:"pos,omitzero"`
@@ -273,77 +274,76 @@ func (b *BuildInfoSemanticDiagnostic) UnmarshalJSON(data []byte) error {
273
274
* [fileId, emitKind] if any other type emit is pending
274
275
*/
275
276
type BuildInfoFilePendingEmit struct {
276
- fileId BuildInfoFileId
277
- emitKind fileEmitKind
277
+ FileId BuildInfoFileId
278
+ EmitKind FileEmitKind
278
279
}
279
280
280
281
func (b * BuildInfoFilePendingEmit ) MarshalJSON () ([]byte , error ) {
281
- if b .emitKind == 0 {
282
- return json .Marshal (b .fileId )
282
+ if b .EmitKind == 0 {
283
+ return json .Marshal (b .FileId )
283
284
}
284
- if b .emitKind == fileEmitKindDts {
285
- fileListIds := []BuildInfoFileId {b .fileId }
285
+ if b .EmitKind == fileEmitKindDts {
286
+ fileListIds := []BuildInfoFileId {b .FileId }
286
287
return json .Marshal (fileListIds )
287
288
}
288
- fileAndEmitKind := []int {int (b .fileId ), int (b .emitKind )}
289
+ fileAndEmitKind := []int {int (b .FileId ), int (b .EmitKind )}
289
290
return json .Marshal (fileAndEmitKind )
290
291
}
291
292
292
293
func (b * BuildInfoFilePendingEmit ) UnmarshalJSON (data []byte ) error {
293
294
var fileId BuildInfoFileId
294
295
if err := json .Unmarshal (data , & fileId ); err == nil {
295
296
* b = BuildInfoFilePendingEmit {
296
- fileId : fileId ,
297
+ FileId : fileId ,
297
298
}
298
299
return nil
299
300
}
300
301
var intTuple []int
301
302
if err := json .Unmarshal (data , & intTuple ); err == nil {
302
303
if len (intTuple ) == 1 {
303
304
* b = BuildInfoFilePendingEmit {
304
- fileId : BuildInfoFileId (intTuple [0 ]),
305
- emitKind : fileEmitKindDts ,
305
+ FileId : BuildInfoFileId (intTuple [0 ]),
306
+ EmitKind : fileEmitKindDts ,
306
307
}
307
308
return nil
308
309
} else if len (intTuple ) == 2 {
309
310
* b = BuildInfoFilePendingEmit {
310
- fileId : BuildInfoFileId (intTuple [0 ]),
311
- emitKind : fileEmitKind (intTuple [1 ]),
311
+ FileId : BuildInfoFileId (intTuple [0 ]),
312
+ EmitKind : FileEmitKind (intTuple [1 ]),
312
313
}
313
314
return nil
314
315
}
315
- return fmt .Errorf ("invalid incrementalBuildInfoFilePendingEmit : expected 1 or 2 integers, got %d" , len (intTuple ))
316
+ return fmt .Errorf ("invalid BuildInfoFilePendingEmit : expected 1 or 2 integers, got %d" , len (intTuple ))
316
317
}
317
- return fmt .Errorf ("invalid IncrementalBuildInfoDiagnostic : %s" , data )
318
+ return fmt .Errorf ("invalid BuildInfoFilePendingEmit : %s" , data )
318
319
}
319
320
320
321
/**
321
322
* [fileId, signature] if different from file's signature
322
323
* fileId if file wasnt emitted
323
324
*/
324
325
type BuildInfoEmitSignature struct {
325
- fileId BuildInfoFileId
326
- // Signature if it is different from file's signature
327
- signature string
328
- differsOnlyInDtsMap bool // true if signature is different only in dtsMap value
329
- differsInOptions bool // true if signature is different in options used to emit file
326
+ FileId BuildInfoFileId
327
+ Signature string // Signature if it is different from file's Signature
328
+ DiffersOnlyInDtsMap bool // true if signature is different only in dtsMap value
329
+ DiffersInOptions bool // true if signature is different in options used to emit file
330
330
}
331
331
332
332
func (b * BuildInfoEmitSignature ) noEmitSignature () bool {
333
- return b .signature == "" && ! b .differsOnlyInDtsMap && ! b .differsInOptions
333
+ return b .Signature == "" && ! b .DiffersOnlyInDtsMap && ! b .DiffersInOptions
334
334
}
335
335
336
336
func (b * BuildInfoEmitSignature ) toEmitSignature (path tspath.Path , emitSignatures map [tspath.Path ]* emitSignature ) * emitSignature {
337
337
var signature string
338
338
var signatureWithDifferentOptions []string
339
- if b .differsOnlyInDtsMap {
339
+ if b .DiffersOnlyInDtsMap {
340
340
signatureWithDifferentOptions = make ([]string , 0 , 1 )
341
341
signatureWithDifferentOptions = append (signatureWithDifferentOptions , emitSignatures [path ].signature )
342
- } else if b .differsInOptions {
342
+ } else if b .DiffersInOptions {
343
343
signatureWithDifferentOptions = make ([]string , 0 , 1 )
344
- signatureWithDifferentOptions = append (signatureWithDifferentOptions , b .signature )
344
+ signatureWithDifferentOptions = append (signatureWithDifferentOptions , b .Signature )
345
345
} else {
346
- signature = b .signature
346
+ signature = b .Signature
347
347
}
348
348
return & emitSignature {
349
349
signature : signature ,
@@ -353,17 +353,17 @@ func (b *BuildInfoEmitSignature) toEmitSignature(path tspath.Path, emitSignature
353
353
354
354
func (b * BuildInfoEmitSignature ) MarshalJSON () ([]byte , error ) {
355
355
if b .noEmitSignature () {
356
- return json .Marshal (b .fileId )
356
+ return json .Marshal (b .FileId )
357
357
}
358
358
fileIdAndSignature := make ([]any , 2 )
359
- fileIdAndSignature [0 ] = b .fileId
359
+ fileIdAndSignature [0 ] = b .FileId
360
360
var signature any
361
- if b .differsOnlyInDtsMap {
361
+ if b .DiffersOnlyInDtsMap {
362
362
signature = []string {}
363
- } else if b .differsInOptions {
364
- signature = []string {b .signature }
363
+ } else if b .DiffersInOptions {
364
+ signature = []string {b .Signature }
365
365
} else {
366
- signature = b .signature
366
+ signature = b .Signature
367
367
}
368
368
fileIdAndSignature [1 ] = signature
369
369
return json .Marshal (fileIdAndSignature )
@@ -373,7 +373,7 @@ func (b *BuildInfoEmitSignature) UnmarshalJSON(data []byte) error {
373
373
var fileId BuildInfoFileId
374
374
if err := json .Unmarshal (data , & fileId ); err == nil {
375
375
* b = BuildInfoEmitSignature {
376
- fileId : fileId ,
376
+ FileId : fileId ,
377
377
}
378
378
return nil
379
379
}
@@ -384,7 +384,7 @@ func (b *BuildInfoEmitSignature) UnmarshalJSON(data []byte) error {
384
384
if id , ok := fileIdAndSignature [0 ].(float64 ); ok {
385
385
fileId = BuildInfoFileId (id )
386
386
} else {
387
- return fmt .Errorf ("invalid fileId in incrementalBuildInfoEmitSignature : expected float64, got %T" , fileIdAndSignature [0 ])
387
+ return fmt .Errorf ("invalid fileId in BuildInfoEmitSignature : expected float64, got %T" , fileIdAndSignature [0 ])
388
388
}
389
389
var signature string
390
390
var differsOnlyInDtsMap , differsInOptions bool
@@ -396,25 +396,25 @@ func (b *BuildInfoEmitSignature) UnmarshalJSON(data []byte) error {
396
396
signature = signatureList [0 ]
397
397
differsInOptions = true
398
398
} else {
399
- return fmt .Errorf ("invalid signature in incrementalBuildInfoEmitSignature : expected string or []string with 0 or 1 element, got %d elements" , len (signatureList ))
399
+ return fmt .Errorf ("invalid signature in BuildInfoEmitSignature : expected string or []string with 0 or 1 element, got %d elements" , len (signatureList ))
400
400
}
401
401
} else {
402
- return fmt .Errorf ("invalid signature in incrementalBuildInfoEmitSignature : expected string or []string, got %T" , fileIdAndSignature [1 ])
402
+ return fmt .Errorf ("invalid signature in BuildInfoEmitSignature : expected string or []string, got %T" , fileIdAndSignature [1 ])
403
403
}
404
404
} else {
405
405
signature = signatureV
406
406
}
407
407
* b = BuildInfoEmitSignature {
408
- fileId : fileId ,
409
- signature : signature ,
410
- differsOnlyInDtsMap : differsOnlyInDtsMap ,
411
- differsInOptions : differsInOptions ,
408
+ FileId : fileId ,
409
+ Signature : signature ,
410
+ DiffersOnlyInDtsMap : differsOnlyInDtsMap ,
411
+ DiffersInOptions : differsInOptions ,
412
412
}
413
413
return nil
414
414
}
415
- return fmt .Errorf ("invalid incrementalBuildInfoEmitSignature : expected 2 elements, got %d" , len (fileIdAndSignature ))
415
+ return fmt .Errorf ("invalid BuildInfoEmitSignature : expected 2 elements, got %d" , len (fileIdAndSignature ))
416
416
}
417
- return fmt .Errorf ("invalid IncrementalBuildInfoDiagnostic : %s" , data )
417
+ return fmt .Errorf ("invalid BuildInfoEmitSignature : %s" , data )
418
418
}
419
419
420
420
type BuildInfo struct {
@@ -437,7 +437,7 @@ type BuildInfo struct {
437
437
AffectedFilesPendingEmit []* BuildInfoFilePendingEmit `json:"affectedFilesPendingEmit,omitzero"`
438
438
LatestChangedDtsFile string `json:"latestChangedDtsFile,omitzero"` // Because this is only output file in the program, we dont need fileId to deduplicate name
439
439
EmitSignatures []* BuildInfoEmitSignature `json:"emitSignatures,omitzero"`
440
- // resolvedRoot: readonly IncrementalBuildInfoResolvedRoot [] | undefined;
440
+ // resolvedRoot: readonly BuildInfoResolvedRoot [] | undefined;
441
441
}
442
442
443
443
func (b * BuildInfo ) IsValidVersion () bool {
@@ -447,3 +447,19 @@ func (b *BuildInfo) IsValidVersion() bool {
447
447
func (b * BuildInfo ) IsIncremental () bool {
448
448
return b != nil && len (b .FileNames ) != 0
449
449
}
450
+
451
+ func (b * BuildInfo ) GetCompilerOptions (buildInfoDirectory string ) * core.CompilerOptions {
452
+ options := & core.CompilerOptions {}
453
+ for option , value := range b .Options .Entries () {
454
+ if buildInfoDirectory != "" {
455
+ result , ok := tsoptions .ConvertOptionToAbsolutePath (option , value , tsoptions .CommandLineCompilerOptionsMap , buildInfoDirectory )
456
+ if ok {
457
+ tsoptions .ParseCompilerOptions (option , result , options )
458
+ continue
459
+ }
460
+ }
461
+ tsoptions .ParseCompilerOptions (option , value , options )
462
+
463
+ }
464
+ return options
465
+ }
0 commit comments