@nodesecure/scanner
Version:
A package API to run a static analysis of your module's dependencies.
67 lines • 2.11 kB
JavaScript
// 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