From b4ec2fe884fd3a97c3424dc6a83bf4246fa8ad78 Mon Sep 17 00:00:00 2001 From: Thijs Louisse Date: Fri, 22 Jan 2021 11:06:27 +0100 Subject: [PATCH] fix(providence-analytics): pass globs via cli --- .changeset/proud-waves-kick.md | 5 ++++ .../providence-analytics/src/cli/cli.js | 8 +++--- .../test-node/cli/cli.test.js | 28 ++++++++++--------- .../program/services/InputDataService.test.js | 25 +++++++++++++++++ 4 files changed, 49 insertions(+), 17 deletions(-) create mode 100644 .changeset/proud-waves-kick.md diff --git a/.changeset/proud-waves-kick.md b/.changeset/proud-waves-kick.md new file mode 100644 index 000000000..f96246ae9 --- /dev/null +++ b/.changeset/proud-waves-kick.md @@ -0,0 +1,5 @@ +--- +'providence-analytics': patch +--- + +- allowlist does not preprocess globs in cli before handing them over to the program diff --git a/packages-node/providence-analytics/src/cli/cli.js b/packages-node/providence-analytics/src/cli/cli.js index 36c7a3147..2a050a803 100755 --- a/packages-node/providence-analytics/src/cli/cli.js +++ b/packages-node/providence-analytics/src/cli/cli.js @@ -175,13 +175,13 @@ async function cli({ cwd } = {}) { v => cliHelpers.pathsArrayFromCs(v, cwd), InputDataService.referenceProjectPaths, ) - .option('-a, --allowlist [allowlist]', `allowlisted paths, like './src, ./packages/*'`, v => - cliHelpers.pathsArrayFromCs(v, cwd), + .option('-a, --allowlist [allowlist]', `allowlisted paths, like 'src/**/*, packages/**/*'`, v => + cliHelpers.csToArray(v, cwd), ) .option( '--allowlist-reference [allowlist-reference]', - `allowed paths for reference, like './src, ./packages/*'`, - v => cliHelpers.pathsArrayFromCs(v, cwd), + `allowed paths for reference, like 'src/**/*, packages/**/*'`, + v => cliHelpers.csToArray(v, cwd), ) .option( '--search-target-collection [collection-name]', diff --git a/packages-node/providence-analytics/test-node/cli/cli.test.js b/packages-node/providence-analytics/test-node/cli/cli.test.js index 68bf1ff3f..6d39c1092 100644 --- a/packages-node/providence-analytics/test-node/cli/cli.test.js +++ b/packages-node/providence-analytics/test-node/cli/cli.test.js @@ -52,7 +52,10 @@ const externalCfgMock = { }; async function runCli(args, cwd) { - process.argv = [...process.argv.slice(0, 2), ...args.split(' ')]; + process.argv = [ + ...process.argv.slice(0, 2), + ...args.split(' ').map(a => a.replace(/^("|')?(.*)("|')?$/, '$2')), + ]; await cli({ cwd }); } @@ -231,27 +234,26 @@ describe('Providence CLI', () => { }); it('"-a --allowlist"', async () => { - await runCli(`${analyzeCmd} -a /mocked/path/example-project`, rootDir); - expect(pathsArrayFromCsStub.args[0][0]).to.equal('/mocked/path/example-project'); + await runCli(`${analyzeCmd} -a mocked/**/*,rocked/*`, rootDir); expect(providenceStub.args[0][1].gatherFilesConfig.allowlist).to.eql([ - '/mocked/path/example-project', + 'mocked/**/*', + 'rocked/*', ]); - pathsArrayFromCsStub.resetHistory(); providenceStub.resetHistory(); - await runCli(`${analyzeCmd} --allowlist /mocked/path/example-project`, rootDir); - expect(pathsArrayFromCsStub.args[0][0]).to.equal('/mocked/path/example-project'); + await runCli(`${analyzeCmd} --allowlist mocked/**/*,rocked/*`, rootDir); expect(providenceStub.args[0][1].gatherFilesConfig.allowlist).to.eql([ - '/mocked/path/example-project', + 'mocked/**/*', + 'rocked/*', ]); }); it('"--allowlist-reference"', async () => { - await runCli(`${analyzeCmd} --allowlist-reference /mocked/path/example-project`, rootDir); - expect(pathsArrayFromCsStub.args[0][0]).to.equal('/mocked/path/example-project'); + await runCli(`${analyzeCmd} --allowlist-reference mocked/**/*,rocked/*`, rootDir); expect(providenceStub.args[0][1].gatherFilesConfigReference.allowlist).to.eql([ - '/mocked/path/example-project', + 'mocked/**/*', + 'rocked/*', ]); }); @@ -383,8 +385,8 @@ describe('Providence CLI', () => { }, outputFolder: '/outp', extensions: ['.bla'], - allowlist: [`${rootDir}/al`], - allowlistReference: [`${rootDir}/alr`], + allowlist: ['al'], + allowlistReference: ['alr'], cwd: undefined, }); }); diff --git a/packages-node/providence-analytics/test-node/program/services/InputDataService.test.js b/packages-node/providence-analytics/test-node/program/services/InputDataService.test.js index 3643a159d..37200ac37 100644 --- a/packages-node/providence-analytics/test-node/program/services/InputDataService.test.js +++ b/packages-node/providence-analytics/test-node/program/services/InputDataService.test.js @@ -197,6 +197,14 @@ describe('InputDataService', () => { ]); }); + it('does not support non globs in "allowlist"', async () => { + const globOutput = InputDataService.gatherFilesFromDir('/fictional/project', { + extensions: ['.html', '.js'], + allowlist: ['nested'], + }); + expect(globOutput).to.eql([]); + }); + it('omits node_modules and bower_components at root level by default', async () => { mockProject({ './index.js': '', @@ -229,6 +237,23 @@ describe('InputDataService', () => { ]); }); + it('allows deeper globs', async () => { + mockProject({ + './root-lvl.js': '', + './deeper/glob/structure/file.js': '', + './deeper/glob/file.js': '', + './deeper/file.js': '', + }); + const globOutput = InputDataService.gatherFilesFromDir('/fictional/project', { + allowlist: ['deeper/**/*'], + }); + expect(globOutput).to.eql([ + '/fictional/project/deeper/file.js', + '/fictional/project/deeper/glob/file.js', + '/fictional/project/deeper/glob/structure/file.js', + ]); + }); + describe('Default config', () => { it('omits config files by default', async () => { mockProject({