Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

added flow to babel cli #10244

Merged
merged 2 commits into from Jul 25, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 2 additions & 2 deletions lib/third-party-libs.js.flow
Expand Up @@ -165,7 +165,7 @@ declare module "source-map" {
}

declare module "convert-source-map" {
import type { SourceMap } from "source-map";
import type { SourceMap, SourceMapGenerator } from "source-map";

declare class Converter {
toJSON(): string;
Expand All @@ -177,7 +177,7 @@ declare module "convert-source-map" {
declare module.exports: {
SourceMap: SourceMap,
Converter: Converter,
fromObject(obj: SourceMap): Converter,
fromObject(obj: SourceMap | SourceMapGenerator): Converter,
fromJSON(str: string): Converter,
fromBase64(str: string): Converter,
fromComment(str: string): Converter,
Expand Down
7 changes: 6 additions & 1 deletion packages/babel-cli/src/babel-external-helpers.js
@@ -1,7 +1,12 @@
// @flow

import commander from "commander";
import { buildExternalHelpers } from "@babel/core";

function collect(value, previousValue): Array<string> {
function collect(
value: string | any,
previousValue: Array<string>,
): Array<string> {
// If the user passed the option with no value, like "babel-external-helpers --whitelist", do nothing.
if (typeof value !== "string") return previousValue;

Expand Down
16 changes: 11 additions & 5 deletions packages/babel-cli/src/babel/dir.js
@@ -1,3 +1,5 @@
// @flow

import defaults from "lodash/defaults";
import outputFileSync from "output-file-sync";
import { sync as mkdirpSync } from "mkdirp";
Expand All @@ -6,11 +8,15 @@ import path from "path";
import fs from "fs";

import * as util from "./util";
import { type CmdOptions } from "./options";

export default async function({ cliOptions, babelOptions }) {
export default async function({
cliOptions,
babelOptions,
}: CmdOptions): Promise<void> {
const filenames = cliOptions.filenames;

async function write(src, base) {
async function write(src: string, base: string): Promise<boolean> {
let relative = path.relative(base, src);

if (!util.isCompilableExtension(relative, cliOptions.extensions)) {
Expand Down Expand Up @@ -65,14 +71,14 @@ export default async function({ cliOptions, babelOptions }) {
}
}

function getDest(filename, base) {
function getDest(filename: string, base: string): string {
if (cliOptions.relative) {
return path.join(base, cliOptions.outDir, filename);
}
return path.join(cliOptions.outDir, filename);
}

async function handleFile(src, base) {
async function handleFile(src: string, base: string): Promise<boolean> {
const written = await write(src, base);

if (!written && cliOptions.copyFiles) {
Expand All @@ -84,7 +90,7 @@ export default async function({ cliOptions, babelOptions }) {
return written;
}

async function handle(filenameOrDir) {
async function handle(filenameOrDir: string): Promise<number> {
if (!fs.existsSync(filenameOrDir)) return 0;

const stat = fs.statSync(filenameOrDir);
Expand Down
60 changes: 37 additions & 23 deletions packages/babel-cli/src/babel/file.js
@@ -1,3 +1,5 @@
// @flow

import convertSourceMap from "convert-source-map";
import defaults from "lodash/defaults";
import sourceMap from "source-map";
Expand All @@ -6,9 +8,18 @@ import path from "path";
import fs from "fs";

import * as util from "./util";

export default async function({ cliOptions, babelOptions }) {
function buildResult(fileResults) {
import { type CmdOptions } from "./options";

type CompilationOutput = {
code: string,
map: Object,
};

export default async function({
cliOptions,
babelOptions,
}: CmdOptions): Promise<void> {
function buildResult(fileResults: Array<Object>): CompilationOutput {
const map = new sourceMap.SourceMapGenerator({
file:
cliOptions.sourceMapTarget ||
Expand Down Expand Up @@ -74,7 +85,7 @@ export default async function({ cliOptions, babelOptions }) {
};
}

function output(fileResults) {
function output(fileResults: Array<string>): void {
const result = buildResult(fileResults);

if (cliOptions.outFile) {
Expand All @@ -91,25 +102,28 @@ export default async function({ cliOptions, babelOptions }) {
}
}

function readStdin() {
return new Promise((resolve, reject) => {
let code = "";
function readStdin(): Promise<string> {
return new Promise(
(resolve: Function, reject: Function): void => {
let code = "";

process.stdin.setEncoding("utf8");
process.stdin.setEncoding("utf8");

process.stdin.on("readable", function() {
const chunk = process.stdin.read();
if (chunk !== null) code += chunk;
});
process.stdin.on("readable", function() {
const chunk = process.stdin.read();
// $FlowIgnore
if (chunk !== null) code += chunk;
});

process.stdin.on("end", function() {
resolve(code);
});
process.stdin.on("error", reject);
});
process.stdin.on("end", function() {
resolve(code);
});
process.stdin.on("error", reject);
},
);
}

async function stdin() {
async function stdin(): Promise<void> {
const code = await readStdin();

const res = await util.transform(
Expand All @@ -126,7 +140,7 @@ export default async function({ cliOptions, babelOptions }) {
output([res]);
}

async function walk(filenames) {
async function walk(filenames: Array<string>): Promise<void> {
const _filenames = [];

filenames.forEach(function(filename) {
Expand All @@ -151,7 +165,7 @@ export default async function({ cliOptions, babelOptions }) {
});

const results = await Promise.all(
_filenames.map(async function(filename) {
_filenames.map(async function(filename: string): Promise<Object> {
let sourceFilename = filename;
if (cliOptions.outFile) {
sourceFilename = path.relative(
Expand All @@ -168,7 +182,7 @@ export default async function({ cliOptions, babelOptions }) {
{
sourceFileName: sourceFilename,
// Since we're compiling everything to be merged together,
// "inline" applies to the final output file, but to the individual
// "inline" applies to the final output file, but not to the individual
// files being concatenated.
sourceMaps:
babelOptions.sourceMaps === "inline"
Expand All @@ -192,7 +206,7 @@ export default async function({ cliOptions, babelOptions }) {
output(results);
}

async function files(filenames) {
async function files(filenames: Array<string>): Promise<void> {
if (!cliOptions.skipInitialBuild) {
await walk(filenames);
}
Expand All @@ -208,7 +222,7 @@ export default async function({ cliOptions, babelOptions }) {
pollInterval: 10,
},
})
.on("all", function(type, filename) {
.on("all", function(type: string, filename: string) {
if (!util.isCompilableExtension(filename, cliOptions.extensions)) {
return;
}
Expand Down
9 changes: 8 additions & 1 deletion packages/babel-cli/src/babel/options.js
@@ -1,3 +1,5 @@
// @flow

import fs from "fs";

import commander from "commander";
Expand Down Expand Up @@ -151,7 +153,12 @@ commander.option(
commander.version(pkg.version + " (@babel/core " + version + ")");
commander.usage("[options] <files ...>");

export default function parseArgv(args: Array<string>) {
export type CmdOptions = {
babelOptions: Object,
cliOptions: Object,
};

export default function parseArgv(args: Array<string>): CmdOptions {
//
commander.parse(args);

Expand Down
32 changes: 22 additions & 10 deletions packages/babel-cli/src/babel/util.js
@@ -1,10 +1,12 @@
// @flow

import readdirRecursive from "fs-readdir-recursive";
import * as babel from "@babel/core";
import includes from "lodash/includes";
import path from "path";
import fs from "fs";

export function chmod(src, dest) {
export function chmod(src: string, dest: string): void {
fs.chmodSync(dest, fs.statSync(src).mode);
}

Expand All @@ -13,8 +15,8 @@ type ReaddirFilter = (filename: string) => boolean;
export function readdir(
dirname: string,
includeDotfiles: boolean,
filter: ReaddirFilter,
) {
filter?: ReaddirFilter,
): Array<string> {
return readdirRecursive(dirname, (filename, _index, currentDirectory) => {
const stat = fs.statSync(path.join(currentDirectory, filename));

Expand All @@ -30,7 +32,7 @@ export function readdirForCompilable(
dirname: string,
includeDotfiles: boolean,
altExts?: Array<string>,
) {
): Array<string> {
return readdir(dirname, includeDotfiles, function(filename) {
return isCompilableExtension(filename, altExts);
});
Expand All @@ -48,15 +50,19 @@ export function isCompilableExtension(
return includes(exts, ext);
}

export function addSourceMappingUrl(code, loc) {
export function addSourceMappingUrl(code: string, loc: string): string {
return code + "\n//# sourceMappingURL=" + path.basename(loc);
}

const CALLER = {
name: "@babel/cli",
};

export function transform(filename, code, opts) {
export function transform(
filename: string,
code: string,
opts: Object,
): Promise<Object> {
opts = {
...opts,
caller: CALLER,
Expand All @@ -71,7 +77,10 @@ export function transform(filename, code, opts) {
});
}

export function compile(filename, opts) {
export function compile(
filename: string,
opts: Object | Function,
): Promise<Object> {
opts = {
...opts,
caller: CALLER,
Expand All @@ -85,7 +94,7 @@ export function compile(filename, opts) {
});
}

export function deleteDir(path) {
export function deleteDir(path: string): void {
if (fs.existsSync(path)) {
fs.readdirSync(path).forEach(function(file) {
const curPath = path + "/" + file;
Expand All @@ -106,7 +115,7 @@ process.on("uncaughtException", function(err) {
process.exit(1);
});

export function requireChokidar() {
export function requireChokidar(): Object {
try {
return require("chokidar");
} catch (err) {
Expand All @@ -118,7 +127,10 @@ export function requireChokidar() {
}
}

export function adjustRelative(relative, keepFileExtension) {
export function adjustRelative(
relative: string,
keepFileExtension: boolean,
): string {
if (keepFileExtension) {
return relative;
}
Expand Down