From 12b66085160cdae833b2c4bf9d5b6b6875f36bea Mon Sep 17 00:00:00 2001 From: Thijs Louisse Date: Tue, 21 Jul 2020 23:35:55 +0200 Subject: [PATCH 1/3] fix(providence-analytics): allow dashboard to run within package --- .../dashboard/src/server.js | 28 ++++++++++++++++--- packages/providence-analytics/package.json | 2 +- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/packages/providence-analytics/dashboard/src/server.js b/packages/providence-analytics/dashboard/src/server.js index d53a2d3c5..e3540142f 100644 --- a/packages/providence-analytics/dashboard/src/server.js +++ b/packages/providence-analytics/dashboard/src/server.js @@ -6,6 +6,7 @@ const { LogService } = require('../../src/program/services/LogService.js'); // eslint-disable-next-line import/no-dynamic-require const providenceConf = require(`${pathLib.join(process.cwd(), 'providence.conf.js')}`); + let outputFilePaths; try { outputFilePaths = fs.readdirSync(ReportService.outputPath); @@ -38,23 +39,42 @@ outputFilePaths.forEach(fileName => { } }); +function getPackageJson(projectPath) { + let pkgJson; + try { + const file = pathLib.resolve(projectPath, 'package.json'); + pkgJson = JSON.parse(fs.readFileSync(file, 'utf8')); + } catch (_) { + // eslint-disable-next-line no-empty + } + return pkgJson; +} + function transformToProjectNames(collections) { const res = {}; // eslint-disable-next-line array-callback-return Object.entries(collections).map(([key, val]) => { - res[key] = val.map(c => pathLib.basename(c)); + res[key] = val.map(c => { + const pkg = getPackageJson(c); + return pkg && pkg.name; + }); }); return res; } const pathFromServerRootToHere = `/${pathLib.relative(process.cwd(), __dirname)}`; +// Needed for dev purposes (we call it from ./packages/providence-analytics/ instead of ./) +// Allows es-dev-server to find the right moduleDirs +const fromPackageRoot = process.argv.includes('--serve-from-package-root'); +const moduleRoot = fromPackageRoot ? pathLib.resolve(process.cwd(), '../../') : process.cwd(); + const config = createConfig({ port: 8080, - // appIndex: './dashboard/index.html', - // rootDir: process.cwd(), + appIndex: pathLib.resolve(__dirname, 'index.html'), + rootDir: moduleRoot, nodeResolve: true, - // moduleDirs: pathLib.resolve(process.cwd(), 'node_modules'), + moduleDirs: pathLib.resolve(moduleRoot, 'node_modules'), watch: false, open: true, middlewares: [ diff --git a/packages/providence-analytics/package.json b/packages/providence-analytics/package.json index 100268170..3ded48d03 100644 --- a/packages/providence-analytics/package.json +++ b/packages/providence-analytics/package.json @@ -19,7 +19,7 @@ "src" ], "scripts": { - "dashboard": "node ./dashboard/src/server.js", + "dashboard": "node ./dashboard/src/server.js --serve-from-package-root", "providence": "node --max-old-space-size=8192 ./src/cli/index.js", "test:node": "mocha './test-node/**/*.test.js'", "test:node:e2e": "mocha './test-node/program/**/*.e2e.js' --timeout 60000", From b78116091929407b304b5ecc7523f2a899e63802 Mon Sep 17 00:00:00 2001 From: Thijs Louisse Date: Tue, 21 Jul 2020 23:50:26 +0200 Subject: [PATCH 2/3] chore(providence-analytics): add match-import example content --- packages/providence-analytics/package.json | 1 + .../providence-analytics/providence.conf.js | 46 ++++++++++++++----- .../src/program/services/InputDataService.js | 2 +- 3 files changed, 37 insertions(+), 12 deletions(-) diff --git a/packages/providence-analytics/package.json b/packages/providence-analytics/package.json index 3ded48d03..b7fae15c6 100644 --- a/packages/providence-analytics/package.json +++ b/packages/providence-analytics/package.json @@ -20,6 +20,7 @@ ], "scripts": { "dashboard": "node ./dashboard/src/server.js --serve-from-package-root", + "match-lion-imports": "npm run providence analyze match-imports --search-target-collection @lion-targets --reference-collection @lion-references", "providence": "node --max-old-space-size=8192 ./src/cli/index.js", "test:node": "mocha './test-node/**/*.test.js'", "test:node:e2e": "mocha './test-node/program/**/*.e2e.js' --timeout 60000", diff --git a/packages/providence-analytics/providence.conf.js b/packages/providence-analytics/providence.conf.js index 356a94291..e59652ac0 100644 --- a/packages/providence-analytics/providence.conf.js +++ b/packages/providence-analytics/providence.conf.js @@ -1,13 +1,41 @@ +const pathLib = require('path'); +const fs = require('fs'); + // This file is read by dashboard and cli and needs to be present under process.cwd() // It mainly serves as an example and it allows to run the dashboard locally // from within this repo. +/** + * @returns {string[]} + */ +function getAllLionScopedPackagePaths() { + const rootPath = pathLib.resolve(__dirname, '../../packages'); + const filesAndDirs = fs.readdirSync(rootPath); + const packages = filesAndDirs.filter(f => { + const filePath = pathLib.join(rootPath, f); + if (fs.lstatSync(filePath).isDirectory()) { + let pkgJson; + try { + pkgJson = JSON.parse(fs.readFileSync(pathLib.resolve(filePath, './package.json'))); + // eslint-disable-next-line no-empty + } catch (_) { + return false; + } + return pkgJson.name && pkgJson.name.startsWith('@lion/'); + } + return false; + }); + return packages.map(p => pathLib.join(rootPath, p)); +} + +const lionScopedPackagePaths = getAllLionScopedPackagePaths(); + const providenceConfig = { metaConfig: { categoryConfig: [ { // This is the name found in package.json - project: 'lion-based-ui', + project: '@lion/overlays', majorVersion: 1, // These conditions will be run on overy filePath categories: { @@ -25,20 +53,16 @@ const providenceConfig = { ], }, // By predefening groups, we can do a query for programs/collections... - // Select via " providence analyze -t 'exampleCollection' " + // Select via " providence analyze --search-target-collection 'exampleCollection' " searchTargetCollections: { - exampleCollection: [ - './providence-input-data/search-targets/example-project-a', - './providence-input-data/search-targets/example-project-b', - ], + '@lion-targets': lionScopedPackagePaths, // ... }, referenceCollections: { - // Our products - 'lion-based-ui': [ - './providence-input-data/references/lion-based-ui', - './providence-input-data/references/lion-based-ui-labs', - ], + // Usually the references are different from the targets. + // In this demo file, we test @lion usage amongst itself + // Select via " providence analyze --reference-collection 'exampleCollection' " + '@lion-references': lionScopedPackagePaths, }, }; diff --git a/packages/providence-analytics/src/program/services/InputDataService.js b/packages/providence-analytics/src/program/services/InputDataService.js index 21bb38479..d29799275 100644 --- a/packages/providence-analytics/src/program/services/InputDataService.js +++ b/packages/providence-analytics/src/program/services/InputDataService.js @@ -337,7 +337,7 @@ class InputDataService { try { // eslint-disable-next-line import/no-dynamic-require, global-require return require(`${process.cwd()}/providence.conf.js`); - } catch (_) { + } catch (e) { return null; } } From 9dea01831055cfc6011825ae57b152490f86e7f4 Mon Sep 17 00:00:00 2001 From: Thijs Louisse Date: Wed, 22 Jul 2020 00:04:15 +0200 Subject: [PATCH 3/3] fix(providence-analytics): allow scoped package refs dashboard --- .../providence-analytics/dashboard/src/app/p-board.js | 11 +++++++---- packages/providence-analytics/src/cli/cli.js | 1 + 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/providence-analytics/dashboard/src/app/p-board.js b/packages/providence-analytics/dashboard/src/app/p-board.js index c14f064a5..70980d72b 100644 --- a/packages/providence-analytics/dashboard/src/app/p-board.js +++ b/packages/providence-analytics/dashboard/src/app/p-board.js @@ -304,14 +304,17 @@ class PBoard extends DecorateMixin(LitElement) { const refSearch = `_${ref.replace('#', '_')}_`; activeRepos.forEach(dep => { const depSearch = `_${dep.replace('#', '_')}_`; - const found = this.__resultFiles[activeAnalyzer].find( - ({ fileName }) => fileName.includes(refSearch) && fileName.includes(depSearch), - ); + const found = this.__resultFiles[activeAnalyzer].find(({ fileName }) => { + return ( + fileName.includes(encodeURIComponent(refSearch)) && + fileName.includes(encodeURIComponent(depSearch)) + ); + }); if (found) { jsonResultsActiveFilter.push(found.content); } else { // eslint-disable-next-line no-console - console.warn(`No result output json for ${refSearch} and ${depSearch}`); + console.info(`No result output json for ${refSearch} and ${depSearch}`); } }); }); diff --git a/packages/providence-analytics/src/cli/cli.js b/packages/providence-analytics/src/cli/cli.js index 8e5e53b13..8b6871df0 100755 --- a/packages/providence-analytics/src/cli/cli.js +++ b/packages/providence-analytics/src/cli/cli.js @@ -39,6 +39,7 @@ async function cli({ cwd, addProjectDependencyPaths } = {}) { let regexSearchOptions; const externalConfig = InputDataService.getExternalConfig(); + console.log('externalConfig', externalConfig); async function getQueryInputData( /* eslint-disable no-shadow */