From c87d0d03a72e341ca462ebb6fd0066ec59a424db Mon Sep 17 00:00:00 2001 From: samreid Date: Mon, 21 Jun 2021 07:52:58 -0600 Subject: [PATCH] Add script to generate tsconfig files for all repos, see https://github.com/phetsims/chipper/issues/1055 --- tsconfig/generate.js | 81 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 tsconfig/generate.js diff --git a/tsconfig/generate.js b/tsconfig/generate.js new file mode 100644 index 000000000..aaa7d6ceb --- /dev/null +++ b/tsconfig/generate.js @@ -0,0 +1,81 @@ +// Copyright 2021, University of Colorado Boulder +const fs = require( 'fs' ); // eslint-disable-line +const activeRunnables = fs.readFileSync( '../../perennial/data/active-runnables' ).toString().trim().split( '\n' ); +const allDependencies = []; +activeRunnables.forEach( activeRunnable => { + console.log( activeRunnable ); + const packageJSON = fs.readFileSync( `../../${activeRunnable}/package.json` ).toString(); + const json = JSON.parse( packageJSON ); + console.log( json.phet.phetLibs ); + if ( json.phet.phetLibs ) { + json.phet.phetLibs.forEach( lib => { + if ( !allDependencies.includes( lib ) ) { + allDependencies.push( lib ); + } + } ); + } +} ); + +console.log( allDependencies ); + +const toVisit = []; +activeRunnables.forEach( r => { + if ( !toVisit.includes( r ) ) { + toVisit.push( r ); + } +} ); + +allDependencies.forEach( r => { + if ( !toVisit.includes( r ) ) { + toVisit.push( r ); + } +} ); + +console.log( toVisit.join( ', ' ) ); + +toVisit.forEach( repo => { + console.log( repo ); + + const packageJSON = fs.readFileSync( `../../${repo}/package.json` ).toString(); + const json = JSON.parse( packageJSON ); + console.log( json.phet.phetLibs ); + let references = '[{"path":"../joist"}]'; + if ( json.phet.phetLibs ) { + references = `[${json.phet.phetLibs.concat( 'joist' ).map( lib => { + return `{"path":"../${lib}"}`; + } )}]`; + } + + const template = `{ + "extends": "../../tsconfig-core.json", + "references": ${references}, + "include": [ + "../../../${repo}/js/**/*", + "../../../${repo}/sounds/**/*", + "../../../${repo}/mipmaps/**/*", + "../../../${repo}/images/**/*" + ] +}`; + console.log( template ); + + const writeToDisk = false; + if ( writeToDisk ) { + try { + fs.mkdirSync( `../../chipper/tsconfig/${repo}/` ); + } + catch( e ) { + // + } + fs.writeFileSync( `../../chipper/tsconfig/${repo}/tsconfig.json`, template ); + } +} ); + +const allReferences = `[${toVisit.map( lib => { + return `{"path":"../${lib}"}`; +} )}]`; +const all = `{ + "extends": "../../tsconfig-core.json", + "references": ${allReferences} +}`; + +console.log( all ); \ No newline at end of file