Skip to content

Commit d4ffcf3

Browse files
authored
Merge pull request #89 from vinomanick/ignore-options-support
2 parents 1e08083 + b978f7f commit d4ffcf3

3 files changed

Lines changed: 96 additions & 9 deletions

File tree

src/bin-support.js

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ async function runJsTransform(root, transformName, args, extensions = DEFAULT_JS
1010
const { parseTransformArgs } = require('./options-support');
1111
const { getTransformPath } = require('./transform-support');
1212

13-
let { paths, options } = parseTransformArgs(args);
13+
let { paths, options, transformerOptions } = parseTransformArgs(args);
1414

1515
try {
1616
let foundPaths = await globby(paths, {
@@ -22,7 +22,14 @@ async function runJsTransform(root, transformName, args, extensions = DEFAULT_JS
2222
let jscodeshiftPath = path.dirname(require.resolve('jscodeshift/package'));
2323
let binPath = path.join(jscodeshiftPath, jscodeshiftPkg.bin.jscodeshift);
2424

25-
let binOptions = ['-t', transformPath, '--extensions', extensions, ...foundPaths];
25+
let binOptions = [
26+
'-t',
27+
transformPath,
28+
'--extensions',
29+
extensions,
30+
...transformerOptions,
31+
...foundPaths,
32+
];
2633

2734
return execa(binPath, binOptions, {
2835
stdio: 'inherit',

src/options-support.js

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,31 @@
11
const yargs = require('yargs');
22

3-
function parseTransformArgs(args) {
3+
const jsCodeShiftOptions = ['ignore-config', 'ignore-pattern'];
4+
5+
function parseTransformArgs(args, codeShiftOptions = jsCodeShiftOptions) {
46
let parsedArgs = yargs.parse(args);
57
let paths = parsedArgs._;
6-
let options = Object.keys(parsedArgs).reduce((acc, key) => {
7-
if (!['_', '$0', 'help', 'version'].includes(key)) {
8-
acc[key] = parsedArgs[key];
8+
let { options, transformerOptions } = Object.keys(parsedArgs).reduce(
9+
(acc, key) => {
10+
if (!['_', '$0', 'help', 'version'].includes(key)) {
11+
let KeyInkebabCase = key.replace(
12+
/([a-z])([A-Z])/g,
13+
(_, $1, $2) => `${$1}-${$2.toLowerCase()}`
14+
);
15+
if (codeShiftOptions.includes(key)) {
16+
acc.transformerOptions.push(`--${key}`, parsedArgs[key]);
17+
} else if (!codeShiftOptions.includes(KeyInkebabCase)) {
18+
acc.options[key] = parsedArgs[key];
19+
}
20+
}
21+
return acc;
22+
},
23+
{
24+
options: {},
25+
transformerOptions: [],
926
}
10-
return acc;
11-
}, {});
12-
return { paths, options };
27+
);
28+
return { paths, options, transformerOptions };
1329
}
1430

1531
function getOptions() {

tests/cli-test.js

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -485,6 +485,70 @@ QUnit.module('codemod-cli', function(hooks) {
485485
});
486486
});
487487

488+
QUnit.test('should ignore patterns from configuration option', async function(assert) {
489+
codemodProject.write({
490+
transforms: {
491+
main: {
492+
'index.js': `
493+
module.exports = function transformer(file, api) {
494+
return file.source.toUpperCase();
495+
}
496+
`,
497+
},
498+
},
499+
});
500+
501+
userProject.write({
502+
foo: { 'something.hbs': `<Foo />` },
503+
bar: { 'something.hbs': `<Foo />` },
504+
});
505+
506+
await CodemodCLI.runTransform(
507+
codemodProject.path('bin'),
508+
'main',
509+
['foo/**', 'bar/**', '--ignore-pattern', 'foo/'],
510+
'hbs'
511+
);
512+
513+
assert.deepEqual(userProject.read(), {
514+
foo: { 'something.hbs': `<Foo />` },
515+
bar: { 'something.hbs': `<FOO />` },
516+
});
517+
});
518+
519+
QUnit.test('should ignore patterns from configuration file', async function(assert) {
520+
codemodProject.write({
521+
transforms: {
522+
main: {
523+
'index.js': `
524+
module.exports = function transformer(file, api) {
525+
return file.source.toUpperCase();
526+
}
527+
`,
528+
},
529+
},
530+
});
531+
532+
userProject.write({
533+
config: { '.gitignore': `foo/` },
534+
foo: { 'something.hbs': `<Foo />` },
535+
bar: { 'something.hbs': `<Foo />` },
536+
});
537+
538+
await CodemodCLI.runTransform(
539+
codemodProject.path('bin'),
540+
'main',
541+
['foo/**', 'bar/**', '--ignore-config', 'config/.gitignore'],
542+
'hbs'
543+
);
544+
545+
assert.deepEqual(userProject.read(), {
546+
config: { '.gitignore': `foo/` },
547+
foo: { 'something.hbs': `<Foo />` },
548+
bar: { 'something.hbs': `<FOO />` },
549+
});
550+
});
551+
488552
QUnit.test('runs transform against class syntax', async function(assert) {
489553
userProject.write({
490554
foo: {

0 commit comments

Comments
 (0)