@@ -8,6 +8,8 @@ import * as ts from 'typescript';
88import * as path from 'path' ;
99import * as util from 'gulp-util' ;
1010
11+ const dtsv = '1' ;
12+
1113const tsfmt = require ( '../../tsfmt.json' ) ;
1214
1315function log ( message : any , ...rest : any [ ] ) : void {
@@ -24,6 +26,9 @@ function logErr(message: any, ...rest: any[]): void {
2426 util . log ( util . colors . red ( '[monaco.d.ts]' ) , 'WHILE HANDLING RULE: ' , CURRENT_PROCESSING_RULE ) ;
2527 util . log ( util . colors . red ( '[monaco.d.ts]' ) , message , ...rest ) ;
2628}
29+ function _logErr ( message : any , ...rest : any [ ] ) : void {
30+ util . log ( util . colors . red ( `[monaco.d.ts]` ) , message , ...rest ) ;
31+ }
2732
2833function moduleIdToPath ( out : string , moduleId : string ) : string {
2934 if ( / \. d \. t s / . test ( moduleId ) ) {
@@ -362,7 +367,13 @@ function createReplacer(data: string): (str: string) => string {
362367 } ;
363368}
364369
365- function generateDeclarationFile ( recipe : string , sourceFileGetter : SourceFileGetter ) : [ string , string , string ] {
370+ interface ITempResult {
371+ result : string ;
372+ usageContent : string ;
373+ enums : string ;
374+ }
375+
376+ function generateDeclarationFile ( recipe : string , sourceFileGetter : SourceFileGetter ) : ITempResult | null {
366377 const endl = / \r \n / . test ( recipe ) ? '\r\n' : '\n' ;
367378
368379 let lines = recipe . split ( endl ) ;
@@ -372,6 +383,8 @@ function generateDeclarationFile(recipe: string, sourceFileGetter: SourceFileGet
372383 let usageImports : string [ ] = [ ] ;
373384 let usage : string [ ] = [ ] ;
374385
386+ let failed = false ;
387+
375388 usage . push ( `var a;` ) ;
376389 usage . push ( `var b;` ) ;
377390
@@ -382,15 +395,27 @@ function generateDeclarationFile(recipe: string, sourceFileGetter: SourceFileGet
382395 } ;
383396
384397 let enums : string [ ] = [ ] ;
398+ let version : string | null = null ;
385399
386400 lines . forEach ( line => {
387401
402+ if ( failed ) {
403+ return ;
404+ }
405+
406+ let m0 = line . match ( / ^ \/ \/ d t s v = ( \d + ) $ / ) ;
407+ if ( m0 ) {
408+ version = m0 [ 1 ] ;
409+ }
410+
388411 let m1 = line . match ( / ^ \s * # i n c l u d e \( ( [ ^ ; ) ] * ) ( ; [ ^ ) ] * ) ? \) \: ( .* ) $ / ) ;
389412 if ( m1 ) {
390413 CURRENT_PROCESSING_RULE = line ;
391414 let moduleId = m1 [ 1 ] ;
392415 const sourceFile = sourceFileGetter ( moduleId ) ;
393416 if ( ! sourceFile ) {
417+ _logErr ( `gulp watch restart required. ${ moduleId } was added to 'monaco.d.ts.recipe'.` ) ;
418+ failed = true ;
394419 return ;
395420 }
396421
@@ -420,6 +445,8 @@ function generateDeclarationFile(recipe: string, sourceFileGetter: SourceFileGet
420445 let moduleId = m2 [ 1 ] ;
421446 const sourceFile = sourceFileGetter ( moduleId ) ;
422447 if ( ! sourceFile ) {
448+ _logErr ( `gulp watch restart required. ${ moduleId } was added to 'monaco.d.ts.recipe'.` ) ;
449+ failed = true ;
423450 return ;
424451 }
425452
@@ -461,6 +488,19 @@ function generateDeclarationFile(recipe: string, sourceFileGetter: SourceFileGet
461488 result . push ( line ) ;
462489 } ) ;
463490
491+ if ( failed ) {
492+ return null ;
493+ }
494+
495+ if ( version !== dtsv ) {
496+ if ( ! version ) {
497+ _logErr ( `gulp watch restart required. 'monaco.d.ts.recipe' is written before versioning was introduced.` ) ;
498+ } else {
499+ _logErr ( `gulp watch restart required. 'monaco.d.ts.recipe' v${ version } does not match runtime v${ dtsv } .` ) ;
500+ }
501+ return null ;
502+ }
503+
464504 let resultTxt = result . join ( endl ) ;
465505 resultTxt = resultTxt . replace ( / \b U R I \b / g, 'Uri' ) ;
466506 resultTxt = resultTxt . replace ( / \b E v e n t < / g, 'IEvent<' ) ;
@@ -477,11 +517,11 @@ function generateDeclarationFile(recipe: string, sourceFileGetter: SourceFileGet
477517 ] . concat ( enums ) . join ( endl ) ;
478518 resultEnums = format ( resultEnums , endl ) ;
479519
480- return [
481- resultTxt ,
482- `${ usageImports . join ( '\n' ) } \n\n${ usage . join ( '\n' ) } ` ,
483- resultEnums
484- ] ;
520+ return {
521+ result : resultTxt ,
522+ usageContent : `${ usageImports . join ( '\n' ) } \n\n${ usage . join ( '\n' ) } ` ,
523+ enums : resultEnums
524+ } ;
485525}
486526
487527export function getIncludesInRecipe ( ) : string [ ] {
@@ -521,11 +561,18 @@ export interface IMonacoDeclarationResult {
521561 isTheSame : boolean ;
522562}
523563
524- function _run ( sourceFileGetter : SourceFileGetter ) : IMonacoDeclarationResult {
564+ function _run ( sourceFileGetter : SourceFileGetter ) : IMonacoDeclarationResult | null {
525565 log ( 'Starting monaco.d.ts generation' ) ;
526566
527567 const recipe = fs . readFileSync ( RECIPE_PATH ) . toString ( ) ;
528- const [ result , usageContent , enums ] = generateDeclarationFile ( recipe , sourceFileGetter ) ;
568+ const t = generateDeclarationFile ( recipe , sourceFileGetter ) ;
569+ if ( ! t ) {
570+ return null ;
571+ }
572+
573+ const result = t . result ;
574+ const usageContent = t . usageContent ;
575+ const enums = t . enums ;
529576
530577 const currentContent = fs . readFileSync ( DECLARATION_PATH ) . toString ( ) ;
531578 const one = currentContent . replace ( / \r \n / gm, '\n' ) ;
@@ -543,7 +590,7 @@ function _run(sourceFileGetter: SourceFileGetter): IMonacoDeclarationResult {
543590 } ;
544591}
545592
546- export function run ( out : string , inputFiles : { [ file : string ] : string ; } ) : IMonacoDeclarationResult {
593+ function run ( out : string , inputFiles : { [ file : string ] : string ; } ) : IMonacoDeclarationResult | null {
547594
548595 let SOURCE_FILE_MAP : { [ moduleId : string ] : ts . SourceFile ; } = { } ;
549596 const sourceFileGetter = ( moduleId : string ) : ts . SourceFile | null => {
@@ -566,7 +613,7 @@ export function run(out: string, inputFiles: { [file: string]: string; }): IMona
566613 return _run ( sourceFileGetter ) ;
567614}
568615
569- export function run2 ( out : string , sourceFileMap : ISourceFileMap ) : IMonacoDeclarationResult {
616+ export function run2 ( out : string , sourceFileMap : ISourceFileMap ) : IMonacoDeclarationResult | null {
570617 const sourceFileGetter = ( moduleId : string ) : ts . SourceFile | null => {
571618 let filePath = path . normalize ( moduleIdToPath ( out , moduleId ) ) ;
572619 return sourceFileMap [ filePath ] ;
@@ -663,5 +710,9 @@ export function execute(): IMonacoDeclarationResult {
663710 } ) ;
664711 console . log ( `Generating .d.ts took ${ Date . now ( ) - t1 } ms` ) ;
665712
666- return run ( 'src' , OUTPUT_FILES ) ;
713+ let r = run ( 'src' , OUTPUT_FILES ) ;
714+ if ( ! r ) {
715+ throw new Error ( `monaco.d.ts genration error - Cannot continue` ) ;
716+ }
717+ return r ;
667718}
0 commit comments