fix(providence): make sure all cached asts are retrieved
This commit is contained in:
parent
73ff11990b
commit
344ffa9046
5 changed files with 48 additions and 26 deletions
5
.changeset/healthy-starfishes-impress.md
Normal file
5
.changeset/healthy-starfishes-impress.md
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
'providence-analytics': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
make sure all cached asts are retrieved
|
||||||
|
|
@ -37,11 +37,10 @@
|
||||||
"test:node:unit": "mocha './{test-node,src}/**/*.test.js'"
|
"test:node:unit": "mocha './{test-node,src}/**/*.test.js'"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@babel/traverse": "^7.25.7",
|
|
||||||
"@rollup/plugin-node-resolve": "^15.3.0",
|
"@rollup/plugin-node-resolve": "^15.3.0",
|
||||||
"commander": "^2.20.3",
|
"commander": "^2.20.3",
|
||||||
"oxc-parser": "^0.34.0",
|
"oxc-parser": "^0.39.0",
|
||||||
"parse5": "^7.2.0",
|
"parse5": "^7.2.1",
|
||||||
"semver": "^7.6.3"
|
"semver": "^7.6.3"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
|
|
@ -50,16 +49,17 @@
|
||||||
"@swc/core": "^1.7.36"
|
"@swc/core": "^1.7.36"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/parser": "^7.25.8",
|
"@babel/parser": "^7.26.3",
|
||||||
"@babel/plugin-syntax-import-assertions": "^7.25.7",
|
"@babel/plugin-syntax-import-assertions": "^7.26.0",
|
||||||
|
"@babel/traverse": "^7.26.3",
|
||||||
"@swc/core": "^1.7.36",
|
"@swc/core": "^1.7.36",
|
||||||
"@types/inquirer": "^9.0.7",
|
"@types/inquirer": "^9.0.7",
|
||||||
"@types/mocha": "^10.0.9",
|
"@types/mocha": "^10.0.10",
|
||||||
"@web/dev-server": "^0.4.6",
|
"@web/dev-server": "^0.4.6",
|
||||||
"@web/dev-server-core": "^0.7.3",
|
"@web/dev-server-core": "^0.7.4",
|
||||||
"globby": "^14.0.2",
|
"globby": "^14.0.2",
|
||||||
"lit-element": "^4.1.1",
|
"lit-element": "^4.1.1",
|
||||||
"mock-fs": "^5.4.0"
|
"mock-fs": "^5.4.1"
|
||||||
},
|
},
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"analysis",
|
"analysis",
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
/* eslint-disable no-param-reassign */
|
/* eslint-disable no-param-reassign */
|
||||||
import path from 'path';
|
|
||||||
|
|
||||||
import semver from 'semver';
|
import semver from 'semver';
|
||||||
|
import path from 'path';
|
||||||
|
|
||||||
import { getFilePathRelativeFromRoot } from '../utils/get-file-path-relative-from-root.js';
|
import { getFilePathRelativeFromRoot } from '../utils/get-file-path-relative-from-root.js';
|
||||||
import { InputDataService } from './InputDataService.js';
|
import { InputDataService } from './InputDataService.js';
|
||||||
|
|
|
||||||
|
|
@ -1,30 +1,30 @@
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
|
|
||||||
|
import { getCurrentDir } from '../utils/get-current-dir.js';
|
||||||
import { AstService } from './AstService.js';
|
import { AstService } from './AstService.js';
|
||||||
import { LogService } from './LogService.js';
|
import { LogService } from './LogService.js';
|
||||||
import { getCurrentDir } from '../utils/get-current-dir.js';
|
|
||||||
// import { memoize } from '../utils/memoize.js';
|
// import { memoize } from '../utils/memoize.js';
|
||||||
|
|
||||||
const memoize = fn => fn;
|
const memoize = fn => fn;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef {import('./Analyzer.js').Analyzer} Analyzer
|
* @typedef {import('../../../types/index.js').PathRelativeFromProjectRoot} PathRelativeFromProjectRoot
|
||||||
* @typedef {import('../../../types/index.js').FindImportsAnalyzerResult} FindImportsAnalyzerResult
|
* @typedef {import('../../../types/index.js').FindImportsAnalyzerResult} FindImportsAnalyzerResult
|
||||||
* @typedef {import('../../../types/index.js').FindImportsAnalyzerEntry} FindImportsAnalyzerEntry
|
* @typedef {import('../../../types/index.js').FindImportsAnalyzerEntry} FindImportsAnalyzerEntry
|
||||||
* @typedef {import('../../../types/index.js').PathRelativeFromProjectRoot} PathRelativeFromProjectRoot
|
|
||||||
* @typedef {import('../../../types/index.js').QueryConfig} QueryConfig
|
|
||||||
* @typedef {import('../../../types/index.js').QueryResult} QueryResult
|
|
||||||
* @typedef {import('../../../types/index.js').FeatureQueryConfig} FeatureQueryConfig
|
|
||||||
* @typedef {import('../../../types/index.js').SearchQueryConfig} SearchQueryConfig
|
|
||||||
* @typedef {import('../../../types/index.js').AnalyzerQueryConfig} AnalyzerQueryConfig
|
* @typedef {import('../../../types/index.js').AnalyzerQueryConfig} AnalyzerQueryConfig
|
||||||
* @typedef {import('../../../types/index.js').Feature} Feature
|
* @typedef {import('../../../types/index.js').AnalyzerQueryResult} AnalyzerQueryResult
|
||||||
|
* @typedef {import('../../../types/index.js').PathFromSystemRoot} PathFromSystemRoot
|
||||||
|
* @typedef {import('../../../types/index.js').FeatureQueryConfig} FeatureQueryConfig
|
||||||
|
* @typedef {import('../../../types/index.js').GatherFilesConfig} GatherFilesConfig
|
||||||
|
* @typedef {import('../../../types/index.js').SearchQueryConfig} SearchQueryConfig
|
||||||
* @typedef {import('../../../types/index.js').ProjectInputData} ProjectInputData
|
* @typedef {import('../../../types/index.js').ProjectInputData} ProjectInputData
|
||||||
* @typedef {import('../../../types/index.js').AnalyzerConfig} AnalyzerConfig
|
* @typedef {import('../../../types/index.js').AnalyzerConfig} AnalyzerConfig
|
||||||
* @typedef {import('../../../types/index.js').AnalyzerName} AnalyzerName
|
* @typedef {import('../../../types/index.js').AnalyzerName} AnalyzerName
|
||||||
* @typedef {import('../../../types/index.js').AnalyzerAst} AnalyzerAst
|
* @typedef {import('../../../types/index.js').AnalyzerAst} AnalyzerAst
|
||||||
* @typedef {import('../../../types/index.js').PathFromSystemRoot} PathFromSystemRoot
|
* @typedef {import('../../../types/index.js').QueryConfig} QueryConfig
|
||||||
* @typedef {import('../../../types/index.js').GatherFilesConfig} GatherFilesConfig
|
* @typedef {import('../../../types/index.js').QueryResult} QueryResult
|
||||||
* @typedef {import('../../../types/index.js').AnalyzerQueryResult} AnalyzerQueryResult
|
* @typedef {import('../../../types/index.js').Feature} Feature
|
||||||
|
* @typedef {import('./Analyzer.js').Analyzer} Analyzer
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const astProjectsDataCache = new Map();
|
const astProjectsDataCache = new Map();
|
||||||
|
|
@ -32,7 +32,7 @@ const astProjectsDataCache = new Map();
|
||||||
export class QueryService {
|
export class QueryService {
|
||||||
/**
|
/**
|
||||||
* Retrieves the default export found in ./program/analyzers/find-import.js
|
* Retrieves the default export found in ./program/analyzers/find-import.js
|
||||||
* @param {typeof Analyzer} analyzerCtor
|
* @param {typeof Analyzer} analyzerObjectOrString
|
||||||
* @param {AnalyzerConfig} [analyzerConfig]
|
* @param {AnalyzerConfig} [analyzerConfig]
|
||||||
* @returns {Promise<AnalyzerQueryConfig>}
|
* @returns {Promise<AnalyzerQueryConfig>}
|
||||||
*/
|
*/
|
||||||
|
|
@ -112,7 +112,8 @@ export class QueryService {
|
||||||
for (const projectData of projectsData) {
|
for (const projectData of projectsData) {
|
||||||
const cachedData = astProjectsDataCache.get(projectData.project.path);
|
const cachedData = astProjectsDataCache.get(projectData.project.path);
|
||||||
if (cachedData) {
|
if (cachedData) {
|
||||||
return cachedData;
|
resultWithAsts.push(cachedData);
|
||||||
|
continue; // eslint-disable-line no-continue
|
||||||
}
|
}
|
||||||
|
|
||||||
const resultEntries = [];
|
const resultEntries = [];
|
||||||
|
|
|
||||||
|
|
@ -72,7 +72,17 @@ function getPackageRootFromNodeModulesPath(resolvedPath, dynamicImport) {
|
||||||
return resolvedPath.slice(0, lio + tailOfRootPath.length);
|
return resolvedPath.slice(0, lio + tailOfRootPath.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
function incorporateDynamicImports(
|
/**
|
||||||
|
* @example
|
||||||
|
* ```js
|
||||||
|
* const importablePaths = resolveDynamicImportsForMockFs();
|
||||||
|
* mockFs({...Object.fromEntries(importablePaths.map(p => [p, mockFs.load(p)])), ...rest });
|
||||||
|
* ```
|
||||||
|
*
|
||||||
|
* @param {{name:string;siblings?:string[]}[]} dynamicImports
|
||||||
|
* @returns {string[]}
|
||||||
|
*/
|
||||||
|
export function resolveDynamicImportsForMockFs(
|
||||||
dynamicImports = [
|
dynamicImports = [
|
||||||
{
|
{
|
||||||
name: 'oxc-parser',
|
name: 'oxc-parser',
|
||||||
|
|
@ -88,7 +98,14 @@ function incorporateDynamicImports(
|
||||||
const require = module.createRequire(import.meta.url);
|
const require = module.createRequire(import.meta.url);
|
||||||
const importablePaths = [];
|
const importablePaths = [];
|
||||||
for (const dynamicImport of dynamicImports) {
|
for (const dynamicImport of dynamicImports) {
|
||||||
const resolvedPath = require.resolve(dynamicImport.name);
|
/** @type {string} */
|
||||||
|
let resolvedPath;
|
||||||
|
try {
|
||||||
|
resolvedPath = require.resolve(dynamicImport.name);
|
||||||
|
} catch {
|
||||||
|
console.warn(`[resolveDynamicImportsForMockFs] Did not find ${dynamicImport.name}`);
|
||||||
|
continue; // eslint-disable-line no-continue
|
||||||
|
}
|
||||||
const rootPath = getPackageRootFromNodeModulesPath(resolvedPath, dynamicImport.name);
|
const rootPath = getPackageRootFromNodeModulesPath(resolvedPath, dynamicImport.name);
|
||||||
importablePaths.push(rootPath);
|
importablePaths.push(rootPath);
|
||||||
for (const sibling of dynamicImport.siblings || []) {
|
for (const sibling of dynamicImport.siblings || []) {
|
||||||
|
|
@ -98,7 +115,7 @@ function incorporateDynamicImports(
|
||||||
}
|
}
|
||||||
return importablePaths;
|
return importablePaths;
|
||||||
}
|
}
|
||||||
const importablePaths = incorporateDynamicImports();
|
const importablePaths = resolveDynamicImportsForMockFs();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Makes sure that, whenever the main program (providence) calls
|
* Makes sure that, whenever the main program (providence) calls
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue