Typecscriptify the main process code (10/N)

Summary: Converted scripts/build-utils.js to typescript

Reviewed By: passy

Differential Revision: D20067220

fbshipit-source-id: 29c1a4aed11b9d682290daf57db5507736ad8c69
This commit is contained in:
Anton Nikolaev
2020-02-27 05:28:02 -08:00
committed by Facebook Github Bot
parent caf04e4e4a
commit 2d551f6b4a
4 changed files with 52 additions and 45 deletions

View File

@@ -12,20 +12,20 @@ import path from 'path';
import lineReplace from 'line-replace'; import lineReplace from 'line-replace';
import yazl from 'yazl'; import yazl from 'yazl';
const {exec: createBinary} = require('pkg'); const {exec: createBinary} = require('pkg');
const { import {
buildFolder, buildFolder,
compile, compile,
compileDefaultPlugins, compileDefaultPlugins,
getVersionNumber, getVersionNumber,
genMercurialRevision, genMercurialRevision,
} = require('./build-utils.js'); } from './build-utils';
const PLUGINS_FOLDER_NAME = 'plugins'; const PLUGINS_FOLDER_NAME = 'plugins';
function preludeBundle( function preludeBundle(
dir: string, dir: string,
versionNumber: string, versionNumber: string,
buildRevision: string, buildRevision: string | null,
) { ) {
const revisionStr = const revisionStr =
buildRevision == null ? '' : `global.__REVISION__="${buildRevision}";`; buildRevision == null ? '' : `global.__REVISION__="${buildRevision}";`;

View File

@@ -11,7 +11,7 @@ import path from 'path';
import fs from 'fs-extra'; import fs from 'fs-extra';
import {Platform, Arch, ElectronDownloadOptions, build} from 'electron-builder'; import {Platform, Arch, ElectronDownloadOptions, build} from 'electron-builder';
import {spawn} from 'promisify-child-process'; import {spawn} from 'promisify-child-process';
const { import {
buildFolder, buildFolder,
compile, compile,
compileMain, compileMain,
@@ -19,7 +19,7 @@ const {
compileDefaultPlugins, compileDefaultPlugins,
getVersionNumber, getVersionNumber,
genMercurialRevision, genMercurialRevision,
} = require('./build-utils.js'); } from './build-utils';
import fetch from 'node-fetch'; import fetch from 'node-fetch';
const { const {
ICONS, ICONS,
@@ -44,7 +44,7 @@ function generateManifest(versionNumber: string) {
function modifyPackageManifest( function modifyPackageManifest(
buildFolder: string, buildFolder: string,
versionNumber: string, versionNumber: string,
hgRevision: string, hgRevision: string | null,
) { ) {
// eslint-disable-next-line no-console // eslint-disable-next-line no-console
console.log('Creating package.json manifest'); console.log('Creating package.json manifest');

View File

@@ -9,29 +9,34 @@
const Metro = require('../static/node_modules/metro'); const Metro = require('../static/node_modules/metro');
const compilePlugins = require('../static/compilePlugins'); const compilePlugins = require('../static/compilePlugins');
const util = require('util'); import util from 'util';
const tmp = require('tmp'); import tmp from 'tmp';
const path = require('path'); import path from 'path';
const fs = require('fs-extra'); import fs from 'fs-extra';
const cp = require('promisify-child-process'); import {spawn} from 'promisify-child-process';
const recursiveReaddir = require('recursive-readdir'); import recursiveReaddir from 'recursive-readdir';
function mostRecentlyChanged(dir, ignores) { async function mostRecentlyChanged(
return util dir: string,
.promisify(recursiveReaddir)(dir, ignores) ignores: string[],
.then(files => ): Promise<Date> {
files const files = await util.promisify<string, string[], string[]>(
.map(f => fs.lstatSync(f).ctime) recursiveReaddir,
.reduce((a, b) => (a > b ? a : b), new Date(0)), )(dir, ignores);
); return files
.map(f => fs.lstatSync(f).ctime)
.reduce((a, b) => (a > b ? a : b), new Date(0));
} }
function die(err) { export function die(err: Error) {
console.error(err.stack); console.error(err.stack);
process.exit(1); process.exit(1);
} }
function compileDefaultPlugins(defaultPluginDir, skipAll = false) { export function compileDefaultPlugins(
defaultPluginDir: string,
skipAll: boolean = false,
) {
return compilePlugins( return compilePlugins(
null, null,
skipAll skipAll
@@ -43,7 +48,7 @@ function compileDefaultPlugins(defaultPluginDir, skipAll = false) {
defaultPluginDir, defaultPluginDir,
{force: true, failSilently: false, recompileOnChanges: false}, {force: true, failSilently: false, recompileOnChanges: false},
) )
.then(defaultPlugins => .then((defaultPlugins: any[]) =>
fs.writeFileSync( fs.writeFileSync(
path.join(defaultPluginDir, 'index.json'), path.join(defaultPluginDir, 'index.json'),
JSON.stringify( JSON.stringify(
@@ -57,7 +62,7 @@ function compileDefaultPlugins(defaultPluginDir, skipAll = false) {
.catch(die); .catch(die);
} }
function compile(buildFolder, entry) { export function compile(buildFolder: string, entry: string) {
console.log(`⚙️ Compiling renderer bundle...`); console.log(`⚙️ Compiling renderer bundle...`);
const projectRoots = path.join(__dirname, '..'); const projectRoots = path.join(__dirname, '..');
return Metro.runBuild( return Metro.runBuild(
@@ -92,7 +97,7 @@ function compile(buildFolder, entry) {
.catch(die); .catch(die);
} }
async function compileMain({dev}) { export async function compileMain({dev}: {dev: boolean}) {
const staticDir = path.resolve(__dirname, '..', 'static'); const staticDir = path.resolve(__dirname, '..', 'static');
const out = path.join(staticDir, 'main.bundle.js'); const out = path.join(staticDir, 'main.bundle.js');
// check if main needs to be compiled // check if main needs to be compiled
@@ -138,10 +143,10 @@ async function compileMain({dev}) {
die(err); die(err);
} }
} }
function buildFolder() { export function buildFolder(): Promise<string> {
// eslint-disable-next-line no-console // eslint-disable-next-line no-console
console.log('Creating build directory'); console.log('Creating build directory');
return new Promise((resolve, reject) => { return new Promise<string>((resolve, reject) => {
tmp.dir({prefix: 'flipper-build-'}, (err, buildFolder) => { tmp.dir({prefix: 'flipper-build-'}, (err, buildFolder) => {
if (err) { if (err) {
reject(err); reject(err);
@@ -149,28 +154,30 @@ function buildFolder() {
resolve(buildFolder); resolve(buildFolder);
} }
}); });
}).catch(die); }).catch(e => {
die(e);
return '';
});
} }
function getVersionNumber() { export function getVersionNumber() {
let {version} = require('../package.json'); let {version} = require('../package.json');
const buildNumber = process.argv.join(' ').match(/--version=(\d+)/); const buildNumber = process.argv.join(' ').match(/--version=(\d+)/);
if (buildNumber && buildNumber.length > 0) { if (buildNumber && buildNumber.length > 0) {
version = [...version.split('.').slice(0, 2), buildNumber[1]].join('.'); version = [...version.split('.').slice(0, 2), buildNumber[1]].join('.');
} }
return version; return version;
} // Asynchronously determine current mercurial revision as string or `null` in case of any error.
function genMercurialRevision() {
return cp
.spawn('hg', ['log', '-r', '.', '-T', '{node}'], {encoding: 'utf8'})
.catch(err => null)
.then(res => (res && res.stdout) || null);
} }
module.exports = {
buildFolder, // Asynchronously determine current mercurial revision as string or `null` in case of any error.
compile, export function genMercurialRevision(): Promise<string | null> {
compileMain, return spawn('hg', ['log', '-r', '.', '-T', '{node}'], {encoding: 'utf8'})
die, .then(
compileDefaultPlugins, res =>
getVersionNumber, (res &&
genMercurialRevision, (typeof res.stdout === 'string'
}; ? res.stdout
: res.stdout?.toString())) ||
null,
)
.catch(() => null);
}

View File

@@ -18,8 +18,8 @@ import chalk from 'chalk';
import http from 'http'; import http from 'http';
import path from 'path'; import path from 'path';
import fs from 'fs'; import fs from 'fs';
import {compileMain} from './build-utils';
const Watchman = require('../static/watchman'); const Watchman = require('../static/watchman');
const {compileMain} = require('./build-utils');
const Metro = require('../static/node_modules/metro'); const Metro = require('../static/node_modules/metro');
const MetroResolver = require('../static/node_modules/metro-resolver'); const MetroResolver = require('../static/node_modules/metro-resolver');