File tree Expand file tree Collapse file tree 5 files changed +70
-0
lines changed Expand file tree Collapse file tree 5 files changed +70
-0
lines changed Original file line number Diff line number Diff line change 1+ ---
2+ " @nodesecure/scanner " : minor
3+ ---
4+
5+ feat(extractors): add node dependencies extractor
Original file line number Diff line number Diff line change @@ -38,6 +38,7 @@ Available probes include:
3838| Vulnerabilities | packument |
3939| Warnings | manifest |
4040| Extentions | manifest |
41+ | NodeDependencies | manifest |
4142
4243All probes follow the same ` ProbeExtractor ` interface, which acts as an iterator-like contract:
4344
Original file line number Diff line number Diff line change 1+
2+ // Import Internal Dependencies
3+ import type {
4+ ManifestProbeExtractor
5+ } from "../payload.js" ;
6+ import type { DependencyVersion } from "../../types.js" ;
7+
8+ export type NodeDependenciesResult = {
9+ nodeDeps : string [ ] ;
10+ } ;
11+
12+ export class NodeDependencies implements ManifestProbeExtractor < NodeDependenciesResult > {
13+ level = "manifest" as const ;
14+
15+ #nodeDeps = new Set < string > ( ) ;
16+
17+ next (
18+ _ : string ,
19+ version : DependencyVersion
20+ ) {
21+ const { composition } = version ;
22+
23+ composition . required_nodejs . forEach ( ( dep ) => {
24+ this . #nodeDeps. add ( dep ) ;
25+ } ) ;
26+ }
27+
28+ done ( ) {
29+ return {
30+ nodeDeps : [ ...this . #nodeDeps]
31+ } ;
32+ }
33+ }
Original file line number Diff line number Diff line change @@ -5,3 +5,4 @@ export * from "./WarningsExtractor.class.js";
55export * from "./VulnerabilitiesExtractor.class.js" ;
66export * from "./FlagsExtractor.class.js" ;
77export * from "./ExtensionsExtractor.class.js" ;
8+ export * from "./NodeDependenciesExtractor.class.js" ;
Original file line number Diff line number Diff line change @@ -416,4 +416,34 @@ describe("Extractors.Callbacks", () => {
416416 } ) ;
417417 } ) ;
418418 } ) ;
419+
420+ describe ( "NodeDependencies" , ( ) => {
421+ const extractor = new Extractors . Payload (
422+ expressNodesecurePayload ,
423+ [
424+ new Extractors . Probes . NodeDependencies ( )
425+ ]
426+ ) ;
427+
428+ const { nodeDeps } = extractor . extractAndMerge ( ) ;
429+
430+ assert . deepEqual ( nodeDeps . sort ( ) , [
431+ "stream" ,
432+ "tty" ,
433+ "util" ,
434+ "fs" ,
435+ "net" ,
436+ "crypto" ,
437+ "assert" ,
438+ "http" ,
439+ "path" ,
440+ "buffer" ,
441+ "url" ,
442+ "async_hooks" ,
443+ "events" ,
444+ "zlib" ,
445+ "string_decoder" ,
446+ "querystring"
447+ ] . sort ( ) ) ;
448+ } ) ;
419449} ) ;
You can’t perform that action at this time.
0 commit comments