UNPKG

@nodesecure/scanner

Version:

A package API to run a static analysis of your module's dependencies.

67 lines 2.11 kB
// Import Node.js Dependencies import { EventEmitter } from "node:events"; // @ts-ignore import deepmerge from "@fastify/deepmerge"; // Import Internal Dependencies import * as Scanner from "../types.js"; import { isNodesecurePayload } from "../utils/index.js"; // CONSTANTS const kFastMerge = deepmerge({ all: true }); export class Payload extends EventEmitter { dependencies; probes; cachedResult; constructor(data, probes) { super(); this.dependencies = isNodesecurePayload(data) ? data.dependencies : data; this.probes = probes.reduce((data, probe) => { data[probe.level].push(probe); return data; }, { packument: [], manifest: [] }); } extract() { if (this.cachedResult) { return this.cachedResult; } for (const [name, dependency] of Object.entries(this.dependencies)) { this.probes.packument.forEach((probe) => probe.next(name, dependency)); this.emit("packument", name, dependency); if (this.probes.manifest.length > 0) { for (const [spec, depVersion] of Object.entries(dependency.versions)) { this.probes.manifest.forEach((probe) => probe.next(spec, depVersion, { name, dependency })); this.emit("manifest", spec, depVersion, { name, dependency }); } } } this.cachedResult = [ ...this.probes.packument.map((probe) => probe.done()), ...this.probes.manifest.map((probe) => probe.done()) ]; return this.cachedResult; } extractAndMerge() { return kFastMerge(...this.extract()); } } export const Callbacks = { packument(callback) { return { level: "packument", next: callback, done: noop }; }, manifest(callback) { return { level: "manifest", next: callback, done: noop }; } }; function noop() { return void 0; } //# sourceMappingURL=payload.js.map