diff --git a/packages/providence-analytics/src/cli/cli-helpers.js b/packages/providence-analytics/src/cli/cli-helpers.js index 4a075600e..f113a088e 100644 --- a/packages/providence-analytics/src/cli/cli-helpers.js +++ b/packages/providence-analytics/src/cli/cli-helpers.js @@ -33,6 +33,10 @@ function setQueryMethod(m) { * @returns {string[]} */ function pathsArrayFromCs(t, cwd = process.cwd()) { + if (!t) { + return undefined; + } + return flatten( t.split(',').map(t => { if (t.startsWith('/')) { diff --git a/packages/providence-analytics/src/cli/cli.js b/packages/providence-analytics/src/cli/cli.js index 2c3c4d98d..25e3014b5 100755 --- a/packages/providence-analytics/src/cli/cli.js +++ b/packages/providence-analytics/src/cli/cli.js @@ -18,7 +18,7 @@ const { pathsArrayFromCollectionName, pathsArrayFromCs, } = require('./cli-helpers.js'); -const { launchProvidenceWithExtendDocs } = require('./generate-extend-docs-data.js'); +const extendDocsModule = require('./generate-extend-docs-data.js'); const { version } = require('../../package.json'); async function cli({ cwd, addProjectDependencyPaths } = {}) { @@ -111,12 +111,10 @@ async function cli({ cwd, addProjectDependencyPaths } = {}) { providenceModule.providence(queryConfig, { gatherFilesConfig: { extensions: commander.extensions, - // ...(commander.filteredTarget ? { excludeFolders: commander.filteredTarget } : {}), filter: commander.whitelist, }, gatherFilesConfigReference: { extensions: commander.extensions, - // ...(commander.filteredTarget ? { excludeFolders: commander.filteredTarget } : {}), filter: commander.whitelistReference, }, debugEnabled: commander.debug, @@ -275,7 +273,17 @@ async function cli({ cwd, addProjectDependencyPaths } = {}) { process.exit(1); } const prefixCfg = { from: options.prefixFrom, to: options.prefixTo }; - launchProvidenceWithExtendDocs(commander.referencePaths, prefixCfg, options.outputFolder); + extendDocsModule + .launchProvidenceWithExtendDocs({ + referenceProjectPaths: commander.referencePaths, + prefixCfg, + outputFolder: options.outputFolder, + extensions: commander.referencePaths, + whitelist: commander.whitelist, + whitelistReference: commander.whitelistReference, + }) + .then(() => resolveCli()) + .catch(() => rejectCli()); }); commander diff --git a/packages/providence-analytics/src/cli/generate-extend-docs-data.js b/packages/providence-analytics/src/cli/generate-extend-docs-data.js index 166ac09c1..f61782bbd 100644 --- a/packages/providence-analytics/src/cli/generate-extend-docs-data.js +++ b/packages/providence-analytics/src/cli/generate-extend-docs-data.js @@ -6,20 +6,31 @@ const { providence } = require('../program/providence.js'); const { QueryService } = require('../program/services/QueryService.js'); const { LogService } = require('../program/services/LogService.js'); -async function launchProvidenceWithExtendDocs(referencePaths, prefixObj, outputFolder) { +async function launchProvidenceWithExtendDocs({ + referenceProjectPaths, + prefixCfg, + outputFolder, + extensions, + whitelist, + whitelistReference, +}) { const t0 = performance.now(); const results = await providence( - QueryService.getQueryConfigFromAnalyzer('match-paths', { prefix: prefixObj }), + QueryService.getQueryConfigFromAnalyzer('match-paths', { prefix: prefixCfg }), { gatherFilesConfig: { - extensions: ['.js', '.html'], - excludeFolders: ['coverage', 'test'], + extensions: extensions || ['.js'], + filter: whitelist || ['!coverage', '!test'], + }, + gatherFilesConfigReference: { + extensions: extensions || ['.js'], + filter: whitelistReference || ['!coverage', '!test'], }, queryMethod: 'ast', report: false, targetProjectPaths: [pathLib.resolve(process.cwd())], - referenceProjectPaths: referencePaths, + referenceProjectPaths, }, ); diff --git a/packages/providence-analytics/src/program/analyzers/helpers/Analyzer.js b/packages/providence-analytics/src/program/analyzers/helpers/Analyzer.js index bc1144569..13e4fb0c8 100644 --- a/packages/providence-analytics/src/program/analyzers/helpers/Analyzer.js +++ b/packages/providence-analytics/src/program/analyzers/helpers/Analyzer.js @@ -165,7 +165,7 @@ class Analyzer { `skipping ${LogService.pad(this.name, 16)} for ${ this.identifier }: (${reason})\n${cfg.targetProjectPath.replace( - '/Users/hu84jr/git/providence/providence-input-data/search-targets/', + `${process.cwd()}/providence-input-data/search-targets/`, '', )}`, ); diff --git a/packages/providence-analytics/test-node/cli/cli.test.js b/packages/providence-analytics/test-node/cli/cli.test.js index 4ebbafe66..36405d453 100644 --- a/packages/providence-analytics/test-node/cli/cli.test.js +++ b/packages/providence-analytics/test-node/cli/cli.test.js @@ -15,9 +15,10 @@ const { } = require('../../test-helpers/mock-log-service-helpers.js'); const { QueryService } = require('../../src/program/services/QueryService.js'); -const { LogService } = require('../../src/program/services/LogService.js'); const providenceModule = require('../../src/program/providence.js'); +const extendDocsModule = require('../../src/cli/generate-extend-docs-data.js'); + const dummyAnalyzer = require('../../test-helpers/templates/analyzer-template.js'); const { cli } = require('../../src/cli/cli.js'); const { pathsArrayFromCs } = require('../../src/cli/cli-helpers.js'); @@ -27,7 +28,6 @@ const rootDir = pathLib.resolve(__dirname, '../../'); describe('Providence CLI', () => { before(() => { - LogService.debugEnabled = true; suppressNonCriticalLogs(); mockWriteToJson(queryResults); @@ -142,6 +142,47 @@ describe('Providence CLI', () => { describe('Query', () => {}); describe('Search', () => {}); describe('Manage', () => {}); + describe('Extend docs', () => { + let extendDocsStub; + beforeEach(() => { + extendDocsStub = sinon.stub(extendDocsModule, 'launchProvidenceWithExtendDocs').returns( + new Promise(resolve => { + resolve(); + }), + ); + }); + + afterEach(() => { + extendDocsStub.restore(); + }); + + it('allows configuration', async () => { + await runCli( + [ + 'extend-docs', + '-t /xyz', + '-r /xyz/x', + '--prefix-from pfrom --prefix-to pto', + '--output-folder /outp', + '--extensions bla', + '--whitelist wl --whitelist-reference wlr', + ].join(' '), + rootDir, + ); + expect(extendDocsStub.called).to.be.true; + expect(extendDocsStub.args[0][0]).to.eql({ + referenceProjectPaths: ['/xyz/x'], + prefixCfg: { + from: 'pfrom', + to: 'pto', + }, + outputFolder: '/outp', + extensions: ['/xyz/x'], + whitelist: [`${process.cwd()}/wl`], + whitelistReference: [`${process.cwd()}/wlr`], + }); + }); + }); }); });