@@ -2,7 +2,7 @@ import * as path from 'path';
22
33import { createFilter } from '@rollup/pluginutils' ;
44
5- import type { Plugin , SourceDescription } from 'rollup' ;
5+ import type { Plugin , PluginContext , SourceDescription } from 'rollup' ;
66import type { Watch } from 'typescript' ;
77
88import type { RollupTypescriptOptions } from '../types' ;
@@ -37,6 +37,31 @@ export default function typescript(options: RollupTypescriptOptions = {}): Plugi
3737 tslib,
3838 typescript : ts
3939 } = getPluginOptions ( options ) ;
40+ const createProgram = ( context : PluginContext ) =>
41+ createWatchProgram ( ts , context , {
42+ formatHost,
43+ resolveModule,
44+ parsedOptions,
45+ writeFile ( fileName , data , _writeByteOrderMark , _onError , sourceFiles ) {
46+ if ( sourceFiles ) {
47+ for ( const sourceFile of sourceFiles ) {
48+ if ( ! parsedOptions . fileNames . includes ( sourceFile . fileName ) ) {
49+ parsedOptions . fileNames . push ( sourceFile . fileName ) ;
50+ }
51+ }
52+ }
53+
54+ if ( parsedOptions . options . composite || parsedOptions . options . incremental ) {
55+ tsCache . cacheCode ( fileName , data ) ;
56+ }
57+ emittedFiles . set ( fileName , data ) ;
58+ } ,
59+ status ( diagnostic ) {
60+ watchProgramHelper . handleStatus ( diagnostic ) ;
61+ } ,
62+ transformers
63+ } ) ;
64+
4065 const tsCache = new TSCache ( cacheDir ) ;
4166 const emittedFiles = new Map < string , string > ( ) ;
4267 const watchProgramHelper = new WatchProgramHelper ( ) ;
@@ -56,6 +81,14 @@ export default function typescript(options: RollupTypescriptOptions = {}): Plugi
5681 name : 'typescript' ,
5782
5883 buildStart ( rollupOptions ) {
84+ if ( typeof rollupOptions . input === 'string' ) {
85+ rollupOptions . input = [ rollupOptions . input ] ;
86+ }
87+
88+ if ( Array . isArray ( rollupOptions . input ) ) {
89+ parsedOptions . fileNames = rollupOptions . input . map ( ( fileName ) => path . resolve ( fileName ) ) ;
90+ }
91+
5992 emitParsedOptionsErrors ( ts , this , parsedOptions ) ;
6093
6194 preflight ( {
@@ -74,21 +107,7 @@ export default function typescript(options: RollupTypescriptOptions = {}): Plugi
74107 program = null ;
75108 }
76109 if ( ! program ) {
77- program = createWatchProgram ( ts , this , {
78- formatHost,
79- resolveModule,
80- parsedOptions,
81- writeFile ( fileName , data ) {
82- if ( parsedOptions . options . composite || parsedOptions . options . incremental ) {
83- tsCache . cacheCode ( fileName , data ) ;
84- }
85- emittedFiles . set ( fileName , data ) ;
86- } ,
87- status ( diagnostic ) {
88- watchProgramHelper . handleStatus ( diagnostic ) ;
89- } ,
90- transformers
91- } ) ;
110+ program = createProgram ( this ) ;
92111 }
93112 } ,
94113
@@ -139,7 +158,6 @@ export default function typescript(options: RollupTypescriptOptions = {}): Plugi
139158
140159 if ( resolved ) {
141160 if ( / \. d \. [ c m ] ? t s / . test ( resolved . extension ) ) return null ;
142- if ( ! filter ( resolved . resolvedFileName ) ) return null ;
143161 return path . normalize ( resolved . resolvedFileName ) ;
144162 }
145163
@@ -149,16 +167,20 @@ export default function typescript(options: RollupTypescriptOptions = {}): Plugi
149167 async load ( id ) {
150168 if ( ! filter ( id ) ) return null ;
151169
152- this . addWatchFile ( id ) ;
170+ const resolvedId = path . resolve ( id ) ;
171+
172+ this . addWatchFile ( resolvedId ) ;
153173 await watchProgramHelper . wait ( ) ;
154174
155- const fileName = normalizePath ( id ) ;
175+ const fileName = normalizePath ( resolvedId ) ;
156176 if ( ! parsedOptions . fileNames . includes ( fileName ) ) {
157177 // Discovered new file that was not known when originally parsing the TypeScript config
158- parsedOptions . fileNames . push ( fileName ) ;
178+ parsedOptions . fileNames . push ( path . resolve ( fileName ) ) ;
179+
180+ createProgram ( this ) . close ( ) ;
159181 }
160182
161- const output = findTypescriptOutput ( ts , parsedOptions , id , emittedFiles , tsCache ) ;
183+ const output = findTypescriptOutput ( ts , parsedOptions , resolvedId , emittedFiles , tsCache ) ;
162184
163185 return output . code != null ? ( output as SourceDescription ) : null ;
164186 } ,
0 commit comments