diff --git a/.changeset/cute-ghosts-rescue.md b/.changeset/cute-ghosts-rescue.md new file mode 100644 index 00000000..7bff7869 --- /dev/null +++ b/.changeset/cute-ghosts-rescue.md @@ -0,0 +1,5 @@ +--- +"@nodesecure/scanner": minor +--- + +feat(scanner): depWalker add stats on tarball.scanDirOrArchive diff --git a/workspaces/scanner/src/depWalker.ts b/workspaces/scanner/src/depWalker.ts index 426e0be7..dd45d8cb 100644 --- a/workspaces/scanner/src/depWalker.ts +++ b/workspaces/scanner/src/depWalker.ts @@ -264,7 +264,8 @@ export async function depWalker( ref: dependency.versions[version] as any, location, isRootNode: scanRootNode && name === manifest.name, - registry + registry, + statsCollector }; operationsQueue.push( scanDirOrArchiveEx(name, version, locker, tempDir, logger, scanDirOptions) @@ -392,31 +393,35 @@ async function scanDirOrArchiveEx( isRootNode: boolean; location: string | undefined; ref: any; + statsCollector: StatsCollector; } ) { using _ = await locker.acquire(); + const spec = `${name}@${version}`; + try { const { registry, location = process.cwd(), isRootNode, - ref + ref, + statsCollector } = options; const mama = await (isRootNode ? ManifestManager.fromPackageJSON(location) : extractAndResolve(tempDir.location, { - spec: `${name}@${version}`, + spec, registry }) ); - await scanDirOrArchive(mama, ref, { + await statsCollector.track(`tarball.scanDirOrArchive ${spec}`, () => scanDirOrArchive(mama, ref, { astAnalyserOptions: { optionalWarnings: typeof location !== "undefined" } - }); + })); } catch (error: any) { logger.emit(ScannerLoggerEvents.error, error, "tarball-scan"); diff --git a/workspaces/scanner/test/depWalker.spec.ts b/workspaces/scanner/test/depWalker.spec.ts index 1be9a17f..b37e042a 100644 --- a/workspaces/scanner/test/depWalker.spec.ts +++ b/workspaces/scanner/test/depWalker.spec.ts @@ -171,7 +171,7 @@ test("execute depWalker on pkg.gitdeps", async(test) => { assert.strictEqual(typeof metadata.startedAt, "number"); assert.strictEqual(typeof metadata.executionTime, "number"); assert.strictEqual(Array.isArray(metadata.apiCalls), true); - assert.strictEqual(metadata.apiCallsCount, 25); + assert.strictEqual(metadata.apiCallsCount, 37); }); test("execute depWalker on typo-squatting (with location)", async(test) => {