121 lines
3.4 KiB
JavaScript
121 lines
3.4 KiB
JavaScript
/* eslint-disable import/no-extraneous-dependencies */
|
|
const fs = require('fs');
|
|
const pathLib = require('path');
|
|
const { performance } = require('perf_hooks');
|
|
const { providence } = require('../program/providence.js');
|
|
const { QueryService } = require('../program/services/QueryService.js');
|
|
const { InputDataService } = require('../program/services/InputDataService.js');
|
|
const { LogService } = require('../program/services/LogService.js');
|
|
const { flatten } = require('./cli-helpers.js');
|
|
|
|
async function getExtendDocsResults({
|
|
referenceProjectPaths,
|
|
prefixCfg,
|
|
extensions,
|
|
allowlist,
|
|
allowlistReference,
|
|
cwd,
|
|
}) {
|
|
const results = await providence(
|
|
QueryService.getQueryConfigFromAnalyzer('match-paths', { prefix: prefixCfg }),
|
|
{
|
|
gatherFilesConfig: {
|
|
extensions: extensions || ['.js'],
|
|
allowlist: allowlist || ['!coverage', '!test'],
|
|
},
|
|
gatherFilesConfigReference: {
|
|
extensions: extensions || ['.js'],
|
|
allowlist: allowlistReference || ['!coverage', '!test'],
|
|
},
|
|
queryMethod: 'ast',
|
|
report: false,
|
|
targetProjectPaths: [pathLib.resolve(cwd)],
|
|
referenceProjectPaths,
|
|
},
|
|
);
|
|
|
|
const queryOutputs = flatten(
|
|
results.map(result => result.queryOutput).filter(o => typeof o !== 'string'), // filter out '[no-dependency]' etc.
|
|
);
|
|
|
|
/**
|
|
* @param {string} pathStr ./packages/lea-tabs/lea-tabs.js
|
|
* @param {string[]} pkgs ['packages/lea-tabs', ...]
|
|
*/
|
|
function replaceToMonoRepoPath(pathStr, pkgs) {
|
|
let result = pathStr;
|
|
pkgs.some(({ path: p, name }) => {
|
|
// for instance ./packages/lea-tabs/lea-tabs.js starts with 'packages/lea-tabs'
|
|
const normalizedP = `./${p}`;
|
|
if (pathStr.startsWith(normalizedP)) {
|
|
const localPath = pathStr.replace(normalizedP, ''); // 'lea-tabs.js'
|
|
result = `${name}/${localPath}`; // 'lea-tabs/lea-tabs.js'
|
|
return true;
|
|
}
|
|
return false;
|
|
});
|
|
return result;
|
|
}
|
|
|
|
const pkgs = InputDataService.getMonoRepoPackages(cwd);
|
|
|
|
if (pkgs) {
|
|
queryOutputs.forEach(resultObj => {
|
|
if (resultObj.variable) {
|
|
resultObj.variable.paths.forEach(pathObj => {
|
|
// eslint-disable-next-line no-param-reassign
|
|
pathObj.to = replaceToMonoRepoPath(pathObj.to, pkgs);
|
|
});
|
|
}
|
|
if (resultObj.tag) {
|
|
resultObj.tag.paths.forEach(pathObj => {
|
|
// eslint-disable-next-line no-param-reassign
|
|
pathObj.to = replaceToMonoRepoPath(pathObj.to, pkgs);
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
return queryOutputs;
|
|
}
|
|
|
|
async function launchProvidenceWithExtendDocs({
|
|
referenceProjectPaths,
|
|
prefixCfg,
|
|
outputFolder,
|
|
extensions,
|
|
allowlist,
|
|
allowlistReference,
|
|
cwd = process.cwd(),
|
|
}) {
|
|
const t0 = performance.now();
|
|
|
|
const queryOutputs = await getExtendDocsResults({
|
|
referenceProjectPaths,
|
|
prefixCfg,
|
|
extensions,
|
|
allowlist,
|
|
allowlistReference,
|
|
cwd,
|
|
});
|
|
|
|
// Write results
|
|
const outputFilePath = pathLib.join(outputFolder, 'providence-extend-docs-data.json');
|
|
|
|
if (fs.existsSync(outputFilePath)) {
|
|
fs.unlinkSync(outputFilePath);
|
|
}
|
|
fs.writeFile(outputFilePath, JSON.stringify(queryOutputs, null, 2), err => {
|
|
if (err) {
|
|
throw err;
|
|
}
|
|
});
|
|
|
|
const t1 = performance.now();
|
|
LogService.info(`"extend-docs" completed in ${Math.round((t1 - t0) / 1000)} seconds`);
|
|
}
|
|
|
|
module.exports = {
|
|
launchProvidenceWithExtendDocs,
|
|
getExtendDocsResults,
|
|
};
|