Skip to content

Commit

Permalink
--copy-ignored flag added to CLI (#10887)
Browse files Browse the repository at this point in the history
* prevent ignored files in out dir

* added includeIgnore cli option

* Help text change

* Update packages/babel-cli/src/babel/options.js

Copy review.

Co-Authored-By: Brian Ng <[email protected]>

* review comments

* throw error if copyIgnored is used without ignore flag

* check for ignored files

* duplicate pathToPattern fn in babel/cli

* change implementation

* removed ignore option from cliOption

* added test case with ignore in config

* added test case with ignore in config

* review

Co-authored-by: Brian Ng <[email protected]>
  • Loading branch information
2 people authored and nicolo-ribaudo committed Jan 10, 2020
1 parent 3af02f6 commit 8415065
Show file tree
Hide file tree
Showing 70 changed files with 165 additions and 7 deletions.
27 changes: 20 additions & 7 deletions packages/babel-cli/src/babel/dir.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,13 @@ import fs from "fs";
import * as util from "./util";
import { type CmdOptions } from "./options";

const FILE_TYPE = Object.freeze({
NON_COMPILABLE: "NON_COMPILABLE",
COMPILED: "COMPILED",
IGNORED: "IGNORED",
ERR_COMPILATION: "ERR_COMPILATION",
});

function outputFileSync(filePath: string, data: string | Buffer): void {
makeDirSync(path.dirname(filePath));
fs.writeFileSync(filePath, data);
Expand All @@ -20,11 +27,14 @@ export default async function({
}: CmdOptions): Promise<void> {
const filenames = cliOptions.filenames;

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

if (!util.isCompilableExtension(relative, cliOptions.extensions)) {
return false;
return FILE_TYPE.NON_COMPILABLE;
}

relative = util.withExtension(
Expand All @@ -47,7 +57,7 @@ export default async function({
),
);

if (!res) return false;
if (!res) return FILE_TYPE.IGNORED;

// we've requested explicit sourcemaps to be written to disk
if (
Expand All @@ -68,11 +78,11 @@ export default async function({
console.log(src + " -> " + dest);
}

return true;
return FILE_TYPE.COMPILED;
} catch (err) {
if (cliOptions.watch) {
console.error(err);
return false;
return FILE_TYPE.ERR_COMPILATION;
}

throw err;
Expand All @@ -89,13 +99,16 @@ export default async function({
async function handleFile(src: string, base: string): Promise<boolean> {
const written = await write(src, base);

if (!written && cliOptions.copyFiles) {
if (
(cliOptions.copyFiles && written === FILE_TYPE.NON_COMPILABLE) ||
(cliOptions.copyIgnored && written === FILE_TYPE.IGNORED)
) {
const filename = path.relative(base, src);
const dest = getDest(filename, base);
outputFileSync(dest, fs.readFileSync(src));
util.chmod(src, dest);
}
return written;
return written === FILE_TYPE.COMPILED;
}

async function handle(filenameOrDir: string): Promise<number> {
Expand Down
6 changes: 6 additions & 0 deletions packages/babel-cli/src/babel/options.js
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,11 @@ commander.option(
"Use a specific extension for the output files",
);

commander.option(
"--copy-ignored",
"Include ignored files when copying non-compilable files.",
);

commander.version(pkg.version + " (@babel/core " + version + ")");
commander.usage("[options] <files ...>");
// register an empty action handler so that commander.js can throw on
Expand Down Expand Up @@ -315,6 +320,7 @@ export default function parseArgv(args: Array<string>): CmdOptions | null {
quiet: opts.quiet,
deleteDirOnStart: opts.deleteDirOnStart,
sourceMapTarget: opts.sourceMapTarget,
copyIgnored: opts.copyIgnored,
},
};
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"ignore": ["src/foo"]
}
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"args": [
"src",
"--out-dir",
"lib",
"--copy-files",
"--include-dotfiles",
"--verbose"
]
}
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
"use strict";

index;
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
src/index.js -> lib/index.js
Successfully compiled 1 file with Babel.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
src/foo
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"args": [
"src",
"--out-dir",
"lib",
"--copy-files",
"--copy-ignored",
"--verbose"
]
}
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
bar;
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
"use strict";

index;
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
src/index.js -> lib/index.js
Successfully compiled 1 file with Babel.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"ignore": ["src/foo"]
}
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
bar;
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
index;
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"args": [
"src",
"--out-dir",
"lib",
"--copy-files",
"--copy-ignored",
"--verbose"
]
}
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
bar;
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
"use strict";

index;
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
src/index.js -> lib/index.js
Successfully compiled 1 file with Babel.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
src/foo
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
bar;
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
index;
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"args": [
"src",
"--out-dir",
"lib",
"--copy-files",
"--verbose"
]
}
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
"use strict";

index;
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
src/index.js -> lib/index.js
Successfully compiled 1 file with Babel.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"ignore": ["src/foo"]
}
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
bar;
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
index;
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"args": [
"src",
"--out-dir",
"lib",
"--copy-files",
"--verbose"
]
}
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
"use strict";

index;
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
src/index.js -> lib/index.js
Successfully compiled 1 file with Babel.
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
bar;
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
index;
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"args": [
"src",
"--out-dir",
"lib",
"--copy-files",
"--ignore",
"src/foo",
"--copy-ignored",
"--verbose"
]
}
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
bar;
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
"use strict";

index;
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
src/index.js -> lib/index.js
Successfully compiled 1 file with Babel.
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
bar;
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
index;
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"args": [
"src",
"--out-dir",
"lib",
"--copy-files",
"--only",
"src/foo/*",
"--copy-ignored",
"--verbose"
]
}
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
"use strict";

bar;
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
index;
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
src/foo/bar.js -> lib/foo/bar.js
Successfully compiled 1 file with Babel.
7 changes: 7 additions & 0 deletions packages/babel-cli/test/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ const assertTest = function(stdout, stderr, opts, cwd) {
if (
// saveInFiles always creates an empty .babelrc, so lets exclude for now
filename !== ".babelrc" &&
filename !== ".babelignore" &&
!Object.prototype.hasOwnProperty.call(opts.inFiles, filename)
) {
const expected = opts.outFiles[filename];
Expand Down Expand Up @@ -239,9 +240,15 @@ fs.readdirSync(fixtureLoc).forEach(function(binName) {
opts.inFiles = readDir(path.join(testLoc, "in-files"), fileFilter);

const babelrcLoc = path.join(testLoc, ".babelrc");
const babelIgnoreLoc = path.join(testLoc, ".babelignore");
if (fs.existsSync(babelrcLoc)) {
// copy .babelrc file to tmp directory
opts.inFiles[".babelrc"] = helper.readFile(babelrcLoc);
opts.inFiles[".babelignore"] = helper.readFile(babelIgnoreLoc);
}
if (fs.existsSync(babelIgnoreLoc)) {
// copy .babelignore file to tmp directory
opts.inFiles[".babelignore"] = helper.readFile(babelIgnoreLoc);
}

it(testName, buildTest(binName, testName, opts), 20000);
Expand Down

0 comments on commit 8415065

Please sign in to comment.