@@ -220,9 +220,30 @@ namespace ts {
220
220
EmitAndSemanticDiagnosticsBuilderProgram
221
221
}
222
222
223
- export function createBuilderProgram ( newProgram : Program , host : BuilderProgramHost , oldProgram : BuilderProgram | undefined , kind : BuilderProgramKind . SemanticDiagnosticsBuilderProgram ) : SemanticDiagnosticsBuilderProgram ;
224
- export function createBuilderProgram ( newProgram : Program , host : BuilderProgramHost , oldProgram : BuilderProgram | undefined , kind : BuilderProgramKind . EmitAndSemanticDiagnosticsBuilderProgram ) : EmitAndSemanticDiagnosticsBuilderProgram ;
225
- export function createBuilderProgram ( newProgram : Program , host : BuilderProgramHost , oldProgram : BuilderProgram | undefined , kind : BuilderProgramKind ) {
223
+ export interface BuilderCreationParameters {
224
+ newProgram : Program ;
225
+ host : BuilderProgramHost ;
226
+ oldProgram : BuilderProgram | undefined ;
227
+ }
228
+
229
+ export function getBuilderCreationParameters ( newProgramOrRootNames : Program | ReadonlyArray < string > , hostOrOptions : BuilderProgramHost | CompilerOptions , oldProgramOrHost ?: CompilerHost | BuilderProgram , oldProgram ?: BuilderProgram ) : BuilderCreationParameters {
230
+ let host : BuilderProgramHost ;
231
+ let newProgram : Program ;
232
+ if ( isArray ( newProgramOrRootNames ) ) {
233
+ newProgram = createProgram ( newProgramOrRootNames , hostOrOptions as CompilerOptions , oldProgramOrHost as CompilerHost , oldProgram && oldProgram . getProgram ( ) ) ;
234
+ host = oldProgramOrHost as CompilerHost ;
235
+ }
236
+ else {
237
+ newProgram = newProgramOrRootNames as Program ;
238
+ host = hostOrOptions as BuilderProgramHost ;
239
+ oldProgram = oldProgramOrHost as BuilderProgram ;
240
+ }
241
+ return { host, newProgram, oldProgram } ;
242
+ }
243
+
244
+ export function createBuilderProgram ( kind : BuilderProgramKind . SemanticDiagnosticsBuilderProgram , builderCreationParameters : BuilderCreationParameters ) : SemanticDiagnosticsBuilderProgram ;
245
+ export function createBuilderProgram ( kind : BuilderProgramKind . EmitAndSemanticDiagnosticsBuilderProgram , builderCreationParameters : BuilderCreationParameters ) : EmitAndSemanticDiagnosticsBuilderProgram ;
246
+ export function createBuilderProgram ( kind : BuilderProgramKind , { newProgram, host, oldProgram } : BuilderCreationParameters ) {
226
247
// Return same program if underlying program doesnt change
227
248
let oldState = oldProgram && oldProgram . getState ( ) ;
228
249
if ( oldState && newProgram === oldState . program ) {
@@ -518,15 +539,43 @@ namespace ts {
518
539
/**
519
540
* Create the builder to manage semantic diagnostics and cache them
520
541
*/
521
- export function createSemanticDiagnosticsBuilderProgram ( newProgram : Program , host : BuilderProgramHost , oldProgram ?: SemanticDiagnosticsBuilderProgram ) : SemanticDiagnosticsBuilderProgram {
522
- return createBuilderProgram ( newProgram , host , oldProgram , BuilderProgramKind . SemanticDiagnosticsBuilderProgram ) ;
542
+ export function createSemanticDiagnosticsBuilderProgram ( newProgram : Program , host : BuilderProgramHost , oldProgram ?: SemanticDiagnosticsBuilderProgram ) : SemanticDiagnosticsBuilderProgram ;
543
+ export function createSemanticDiagnosticsBuilderProgram ( rootNames : ReadonlyArray < string > , options : CompilerOptions , host ?: CompilerHost , oldProgram ?: SemanticDiagnosticsBuilderProgram ) : SemanticDiagnosticsBuilderProgram ;
544
+ export function createSemanticDiagnosticsBuilderProgram ( newProgramOrRootNames : Program | ReadonlyArray < string > , hostOrOptions : BuilderProgramHost | CompilerOptions , oldProgramOrHost ?: CompilerHost | SemanticDiagnosticsBuilderProgram , oldProgram ?: SemanticDiagnosticsBuilderProgram ) {
545
+ return createBuilderProgram ( BuilderProgramKind . SemanticDiagnosticsBuilderProgram , getBuilderCreationParameters ( newProgramOrRootNames , hostOrOptions , oldProgramOrHost , oldProgram ) ) ;
523
546
}
524
547
525
548
/**
526
549
* Create the builder that can handle the changes in program and iterate through changed files
527
550
* to emit the those files and manage semantic diagnostics cache as well
528
551
*/
529
- export function createEmitAndSemanticDiagnosticsBuilderProgram ( newProgram : Program , host : BuilderProgramHost , oldProgram ?: EmitAndSemanticDiagnosticsBuilderProgram ) : EmitAndSemanticDiagnosticsBuilderProgram {
530
- return createBuilderProgram ( newProgram , host , oldProgram , BuilderProgramKind . EmitAndSemanticDiagnosticsBuilderProgram ) ;
552
+ export function createEmitAndSemanticDiagnosticsBuilderProgram ( newProgram : Program , host : BuilderProgramHost , oldProgram ?: EmitAndSemanticDiagnosticsBuilderProgram ) : EmitAndSemanticDiagnosticsBuilderProgram ;
553
+ export function createEmitAndSemanticDiagnosticsBuilderProgram ( rootNames : ReadonlyArray < string > , options : CompilerOptions , host ?: CompilerHost , oldProgram ?: EmitAndSemanticDiagnosticsBuilderProgram ) : EmitAndSemanticDiagnosticsBuilderProgram ;
554
+ export function createEmitAndSemanticDiagnosticsBuilderProgram ( newProgramOrRootNames : Program | ReadonlyArray < string > , hostOrOptions : BuilderProgramHost | CompilerOptions , oldProgramOrHost ?: CompilerHost | EmitAndSemanticDiagnosticsBuilderProgram , oldProgram ?: EmitAndSemanticDiagnosticsBuilderProgram ) {
555
+ return createBuilderProgram ( BuilderProgramKind . EmitAndSemanticDiagnosticsBuilderProgram , getBuilderCreationParameters ( newProgramOrRootNames , hostOrOptions , oldProgramOrHost , oldProgram ) ) ;
556
+ }
557
+
558
+ /**
559
+ * Creates a builder thats just abstraction over program and can be used with watch
560
+ */
561
+ export function createAbstractBuilder ( newProgram : Program , host : BuilderProgramHost , oldProgram ?: BuilderProgram ) : BuilderProgram ;
562
+ export function createAbstractBuilder ( rootNames : ReadonlyArray < string > , options : CompilerOptions , host ?: CompilerHost , oldProgram ?: BuilderProgram ) : BuilderProgram ;
563
+ export function createAbstractBuilder ( newProgramOrRootNames : Program | ReadonlyArray < string > , hostOrOptions : BuilderProgramHost | CompilerOptions , oldProgramOrHost ?: CompilerHost | BuilderProgram , oldProgram ?: BuilderProgram ) : BuilderProgram {
564
+ const { newProgram : program } = getBuilderCreationParameters ( newProgramOrRootNames , hostOrOptions , oldProgramOrHost , oldProgram ) ;
565
+ return {
566
+ // Only return program, all other methods are not implemented
567
+ getProgram : ( ) => program ,
568
+ getState : notImplemented ,
569
+ getCompilerOptions : notImplemented ,
570
+ getSourceFile : notImplemented ,
571
+ getSourceFiles : notImplemented ,
572
+ getOptionsDiagnostics : notImplemented ,
573
+ getGlobalDiagnostics : notImplemented ,
574
+ getSyntacticDiagnostics : notImplemented ,
575
+ getSemanticDiagnostics : notImplemented ,
576
+ emit : notImplemented ,
577
+ getAllDependencies : notImplemented ,
578
+ getCurrentDirectory : notImplemented
579
+ } ;
531
580
}
532
581
}
0 commit comments