@lavamoat/aa
Advanced tools
Comparing version 2.0.0 to 2.0.1
{ | ||
"name": "@lavamoat/aa", | ||
"version": "2.0.0", | ||
"version": "2.0.1", | ||
"main": "src/index.js", | ||
@@ -28,3 +28,3 @@ "license": "MIT", | ||
"author": "kumavis", | ||
"gitHead": "efefc17dd7df5a94e90585c426fd06be4473a58d" | ||
"gitHead": "dabfe6850e3e2668a148c10307d441f6fe24b199" | ||
} |
@@ -1,2 +0,2 @@ | ||
const { promises: fs } = require('fs') | ||
const { readFileSync } = require('fs') | ||
const path = require('path') | ||
@@ -55,2 +55,39 @@ const nodeResolve = require('resolve') | ||
const depPackageJsonPathCache = new Map(); | ||
function memoResolveSync (resolve, depName, packageDir) { | ||
const key = depName + '!' + packageDir; | ||
if (depPackageJsonPathCache.has(key)) { | ||
return depPackageJsonPathCache.get(key) | ||
} else { | ||
const depRelativePackageJsonPath = path.join(depName, 'package.json') | ||
let depPackageJsonPath | ||
// If this function used async, it'd have to be awaited, which would mean cache lookup | ||
// would need to happen outside the function to save on performance of spawning a promise | ||
// for each cache lookup. | ||
depPackageJsonPath = resolve.sync(depRelativePackageJsonPath, { basedir: packageDir }) | ||
depPackageJsonPathCache.set(key, depPackageJsonPath) | ||
return depPackageJsonPath | ||
} | ||
} | ||
const depsToWalkCache = new Map(); | ||
function memoListDependencies (packageDir, includeDevDeps) { | ||
const key = packageDir + (includeDevDeps ? '-D' : '') | ||
if (depsToWalkCache.has(key)) { | ||
return depsToWalkCache.get(key) | ||
} else { | ||
const packageJsonPath = path.join(packageDir, 'package.json') | ||
// If this function used async, it'd have to be awaited, which would mean cache lookup | ||
// would need to happen outside the function to save on performance of spawning a promise | ||
// for each cache lookup. | ||
const rawPackageJson = readFileSync(packageJsonPath, 'utf8') | ||
const packageJson = JSON.parse(rawPackageJson) | ||
const depsToWalk = [ | ||
...Object.keys(packageJson.dependencies || {}), | ||
...Object.keys(includeDevDeps ? packageJson.devDependencies || {} : {}), | ||
] | ||
depsToWalkCache.set(key, depsToWalk) | ||
return depsToWalk | ||
} | ||
} | ||
/** | ||
@@ -62,15 +99,6 @@ * @param {object} options | ||
async function * eachPackageInLogicalTree ({ packageDir, logicalPath = [], includeDevDeps = false, visited = new Set(), resolve = nodeResolve }) { | ||
const packageJsonPath = path.join(packageDir, 'package.json') | ||
const rawPackageJson = await fs.readFile(packageJsonPath, 'utf8') | ||
const packageJson = JSON.parse(rawPackageJson) | ||
const depsToWalk = [ | ||
...Object.keys(packageJson.dependencies || {}), | ||
...Object.keys(includeDevDeps ? packageJson.devDependencies || {} : {}), | ||
] | ||
const depsToWalk = memoListDependencies(packageDir, includeDevDeps) | ||
for (const depName of depsToWalk) { | ||
const depRelativePackageJsonPath = path.join(depName, 'package.json') | ||
let depPackageJsonPath | ||
// sync seems slightly faster | ||
// depPackageJsonPath = await resolveAsync(depRelativePackageJsonPath, { basedir: packageDir }) | ||
depPackageJsonPath = resolve.sync(depRelativePackageJsonPath, { basedir: packageDir }) | ||
depPackageJsonPath = memoResolveSync(resolve, depName, packageDir) | ||
const childPackageDir = path.dirname(depPackageJsonPath) | ||
@@ -77,0 +105,0 @@ // avoid cycles, but still visit the same package |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
14814
217