@nodesecure/scanner
Version:
A package API to run a static analysis of your module's dependencies.
42 lines • 1.93 kB
TypeScript
import { EventEmitter } from "node:events";
import type { Simplify } from "type-fest";
import * as Scanner from "../types.js";
type MergeDeep<T extends unknown[]> = T extends [a: infer A, ...rest: infer R] ? A & MergeDeep<R> : {};
export type ExtractProbeResult<T extends ProbeExtractor<any>[]> = {
[K in keyof T]: T[K] extends ProbeExtractor<any> ? ReturnType<T[K]["done"]> : never;
};
export type MergedExtractProbeResult<T extends ProbeExtractor<any>[]> = Simplify<MergeDeep<ExtractProbeResult<T>>>;
export type ProbeExtractorLevel = "packument" | "manifest";
export type ProbeExtractorManifestParent = {
name: string;
dependency: Scanner.Dependency;
};
export type PackumentProbeNextCallback = (name: string, dependency: Scanner.Dependency) => void;
export type ManifestProbeNextCallback = (spec: string, dependencyVersion: Scanner.DependencyVersion, parent: ProbeExtractorManifestParent) => void;
export interface ProbeExtractor<Defs> {
level: ProbeExtractorLevel;
next(...args: any[]): void;
done(): Defs;
}
export interface PackumentProbeExtractor<Defs> extends ProbeExtractor<Defs> {
level: "packument";
next: PackumentProbeNextCallback;
}
export interface ManifestProbeExtractor<Defs> extends ProbeExtractor<Defs> {
level: "manifest";
next: ManifestProbeNextCallback;
}
export declare class Payload<T extends ProbeExtractor<any>[]> extends EventEmitter {
private dependencies;
private probes;
private cachedResult;
constructor(data: Scanner.Payload | Scanner.Payload["dependencies"], probes: [...T]);
extract(): ExtractProbeResult<T>;
extractAndMerge(): MergedExtractProbeResult<T>;
}
export declare const Callbacks: {
readonly packument: (callback: PackumentProbeNextCallback) => PackumentProbeExtractor<void>;
readonly manifest: (callback: ManifestProbeNextCallback) => ManifestProbeExtractor<void>;
};
export {};
//# sourceMappingURL=payload.d.ts.map