--copy-ignored flag added to CLI (#10887)
* 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 <bng412@gmail.com> * 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 <bng412@gmail.com>
This commit is contained in:
parent
3af02f63de
commit
8415065d99
@ -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);
|
||||
@ -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(
|
||||
@ -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 (
|
||||
@ -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;
|
||||
@ -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> {
|
||||
|
||||
@ -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
|
||||
@ -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,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
@ -0,0 +1,3 @@
|
||||
{
|
||||
"ignore": ["src/foo"]
|
||||
}
|
||||
@ -0,0 +1,10 @@
|
||||
{
|
||||
"args": [
|
||||
"src",
|
||||
"--out-dir",
|
||||
"lib",
|
||||
"--copy-files",
|
||||
"--include-dotfiles",
|
||||
"--verbose"
|
||||
]
|
||||
}
|
||||
@ -0,0 +1,3 @@
|
||||
"use strict";
|
||||
|
||||
index;
|
||||
@ -0,0 +1,2 @@
|
||||
src/index.js -> lib/index.js
|
||||
Successfully compiled 1 file with Babel.
|
||||
@ -0,0 +1 @@
|
||||
src/foo
|
||||
@ -0,0 +1,10 @@
|
||||
{
|
||||
"args": [
|
||||
"src",
|
||||
"--out-dir",
|
||||
"lib",
|
||||
"--copy-files",
|
||||
"--copy-ignored",
|
||||
"--verbose"
|
||||
]
|
||||
}
|
||||
@ -0,0 +1 @@
|
||||
bar;
|
||||
@ -0,0 +1,3 @@
|
||||
"use strict";
|
||||
|
||||
index;
|
||||
@ -0,0 +1,2 @@
|
||||
src/index.js -> lib/index.js
|
||||
Successfully compiled 1 file with Babel.
|
||||
@ -0,0 +1,3 @@
|
||||
{
|
||||
"ignore": ["src/foo"]
|
||||
}
|
||||
@ -0,0 +1 @@
|
||||
bar;
|
||||
@ -0,0 +1 @@
|
||||
index;
|
||||
@ -0,0 +1,10 @@
|
||||
{
|
||||
"args": [
|
||||
"src",
|
||||
"--out-dir",
|
||||
"lib",
|
||||
"--copy-files",
|
||||
"--copy-ignored",
|
||||
"--verbose"
|
||||
]
|
||||
}
|
||||
@ -0,0 +1 @@
|
||||
bar;
|
||||
@ -0,0 +1,3 @@
|
||||
"use strict";
|
||||
|
||||
index;
|
||||
@ -0,0 +1,2 @@
|
||||
src/index.js -> lib/index.js
|
||||
Successfully compiled 1 file with Babel.
|
||||
1
packages/babel-cli/test/fixtures/babel/--copy-files with ignore in babelignore/.babelignore
vendored
Normal file
1
packages/babel-cli/test/fixtures/babel/--copy-files with ignore in babelignore/.babelignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
src/foo
|
||||
@ -0,0 +1 @@
|
||||
bar;
|
||||
@ -0,0 +1 @@
|
||||
index;
|
||||
9
packages/babel-cli/test/fixtures/babel/--copy-files with ignore in babelignore/options.json
vendored
Normal file
9
packages/babel-cli/test/fixtures/babel/--copy-files with ignore in babelignore/options.json
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
{
|
||||
"args": [
|
||||
"src",
|
||||
"--out-dir",
|
||||
"lib",
|
||||
"--copy-files",
|
||||
"--verbose"
|
||||
]
|
||||
}
|
||||
@ -0,0 +1,3 @@
|
||||
"use strict";
|
||||
|
||||
index;
|
||||
2
packages/babel-cli/test/fixtures/babel/--copy-files with ignore in babelignore/stdout.txt
vendored
Normal file
2
packages/babel-cli/test/fixtures/babel/--copy-files with ignore in babelignore/stdout.txt
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
src/index.js -> lib/index.js
|
||||
Successfully compiled 1 file with Babel.
|
||||
3
packages/babel-cli/test/fixtures/babel/--copy-files with ignore in babelrc/.babelrc
vendored
Normal file
3
packages/babel-cli/test/fixtures/babel/--copy-files with ignore in babelrc/.babelrc
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"ignore": ["src/foo"]
|
||||
}
|
||||
@ -0,0 +1 @@
|
||||
bar;
|
||||
@ -0,0 +1 @@
|
||||
index;
|
||||
9
packages/babel-cli/test/fixtures/babel/--copy-files with ignore in babelrc/options.json
vendored
Normal file
9
packages/babel-cli/test/fixtures/babel/--copy-files with ignore in babelrc/options.json
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
{
|
||||
"args": [
|
||||
"src",
|
||||
"--out-dir",
|
||||
"lib",
|
||||
"--copy-files",
|
||||
"--verbose"
|
||||
]
|
||||
}
|
||||
@ -0,0 +1,3 @@
|
||||
"use strict";
|
||||
|
||||
index;
|
||||
2
packages/babel-cli/test/fixtures/babel/--copy-files with ignore in babelrc/stdout.txt
vendored
Normal file
2
packages/babel-cli/test/fixtures/babel/--copy-files with ignore in babelrc/stdout.txt
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
src/index.js -> lib/index.js
|
||||
Successfully compiled 1 file with Babel.
|
||||
@ -0,0 +1 @@
|
||||
bar;
|
||||
@ -0,0 +1 @@
|
||||
index;
|
||||
12
packages/babel-cli/test/fixtures/babel/--copy-files with ignore with copyIgnored/options.json
vendored
Normal file
12
packages/babel-cli/test/fixtures/babel/--copy-files with ignore with copyIgnored/options.json
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
{
|
||||
"args": [
|
||||
"src",
|
||||
"--out-dir",
|
||||
"lib",
|
||||
"--copy-files",
|
||||
"--ignore",
|
||||
"src/foo",
|
||||
"--copy-ignored",
|
||||
"--verbose"
|
||||
]
|
||||
}
|
||||
@ -0,0 +1 @@
|
||||
bar;
|
||||
@ -0,0 +1,3 @@
|
||||
"use strict";
|
||||
|
||||
index;
|
||||
2
packages/babel-cli/test/fixtures/babel/--copy-files with ignore with copyIgnored/stdout.txt
vendored
Normal file
2
packages/babel-cli/test/fixtures/babel/--copy-files with ignore with copyIgnored/stdout.txt
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
src/index.js -> lib/index.js
|
||||
Successfully compiled 1 file with Babel.
|
||||
@ -0,0 +1 @@
|
||||
bar;
|
||||
@ -0,0 +1 @@
|
||||
index;
|
||||
12
packages/babel-cli/test/fixtures/babel/--copy-files with only copy copyIgnored/options.json
vendored
Normal file
12
packages/babel-cli/test/fixtures/babel/--copy-files with only copy copyIgnored/options.json
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
{
|
||||
"args": [
|
||||
"src",
|
||||
"--out-dir",
|
||||
"lib",
|
||||
"--copy-files",
|
||||
"--only",
|
||||
"src/foo/*",
|
||||
"--copy-ignored",
|
||||
"--verbose"
|
||||
]
|
||||
}
|
||||
@ -0,0 +1,3 @@
|
||||
"use strict";
|
||||
|
||||
bar;
|
||||
@ -0,0 +1 @@
|
||||
index;
|
||||
2
packages/babel-cli/test/fixtures/babel/--copy-files with only copy copyIgnored/stdout.txt
vendored
Normal file
2
packages/babel-cli/test/fixtures/babel/--copy-files with only copy copyIgnored/stdout.txt
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
src/foo/bar.js -> lib/foo/bar.js
|
||||
Successfully compiled 1 file with Babel.
|
||||
@ -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];
|
||||
@ -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);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user