UNPKG

typescript-assistant

Version:

Combines and integrates professional Typescript tools into your project

62 lines (52 loc) 1.98 kB
import { execSync, spawn } from 'child_process'; import { writeFileSync } from 'fs'; export let findChangedFiles = (refA?: string, refB?: string) => { if (refA === undefined) { refA = 'HEAD'; } if (refB === undefined) { refB = ''; } let output = execSync(`git diff --name-only --diff-filter=ACMR ${refA} ${refB}`, { encoding: 'utf8' }); return output.split('\n').filter(fileName => fileName.length > 0); }; export let npmInstall = () => { let scriptPath = `${process.cwd()}/build/npm-install.js`; let currentDir = process.cwd().replace(/\\/g, '\\\\'); writeFileSync(scriptPath, ` var fs = require('fs'); var tryNpmInstall = function() { if (fs.existsSync('.git/index.lock')) { return false; } console.log('Updating dependencies, please wait...'); const child_process = require('child_process'); try { try { child_process.execSync('npm install', { encoding: 'UTF-8', stdio: [0, 1, 2] }); } catch (installError) { console.error('Retrying npm install'); child_process.execSync('npm install', { encoding: 'UTF-8', stdio: [0, 1, 2] }); } child_process.execSync('npm dedupe', { encoding: 'UTF-8', stdio: [0, 1, 2] }); } catch (secondError) { console.error('npm install failed'); console.log('Press enter to continue'); process.stdin.once('data', function(){ process.exit(1); }); } process.exit(0); } fs.watch('.git', {persistent: true}, tryNpmInstall); if (!tryNpmInstall()) { console.log('waiting for git before running npm install'); } `); let install = spawn('node', ['./build/npm-install.js'], { stdio: 'ignore', shell: true, detached: true, cwd: currentDir }); install.unref(); }; export let packageJsonChanged = (refA: string, refB: string) => findChangedFiles(refA, refB).filter(f => f.indexOf('package.json') !== -1).length >= 1; export let filterTsFiles = (files: string[]) => { return files.filter(f => f.slice(-3) === '.ts' && f.slice(-5) !== '.d.ts'); };