UNPKG

@nodesecure/contact

Version:

Utilities to extract/fetch data on NPM contacts (author, maintainers ..)

72 lines 3.15 kB
// Import Internal Dependencies import { UnlitContact } from "./UnlitContact.class.js"; import { NsResolver } from "./NsResolver.class.js"; export class ContactExtractor { highlighted = []; constructor(options) { const { highlight } = options; this.highlighted = structuredClone(highlight); } async fromDependencies(dependencies) { const unlitContacts = this.highlighted .map((contact) => new UnlitContact(contact)); const resolver = new NsResolver(); for (const [packageName, metadata] of Object.entries(dependencies)) { const extractedContacts = extractMetadataContacts(metadata); extractedContacts.forEach((contact) => resolver.registerEmail(contact.email)); this.addDependencyToUnlitContacts(unlitContacts, extractedContacts, packageName); } return this.processIlluminatedAndExpired(unlitContacts, resolver); } async fromManifest(manifest) { const resolver = new NsResolver(); const unlitContacts = this.highlighted .map((contact) => new UnlitContact(contact)); const extractedContacts = extractMetadataContacts(manifest); extractedContacts.forEach((contact) => resolver.registerEmail(contact.email)); this.addDependencyToUnlitContacts(unlitContacts, extractedContacts, manifest.name); return this.processIlluminatedAndExpired(unlitContacts, resolver); } async fromPackument(packument) { const resolver = new NsResolver(); const unlitContacts = this.highlighted .map((contact) => new UnlitContact(contact)); const emails = new Set(); for (const packumentVersion of Object.values(packument.versions)) { const extractedContacts = extractMetadataContacts(packumentVersion); extractedContacts.forEach(({ email }) => { if (email) { emails.add(email); } }); this.addDependencyToUnlitContacts(unlitContacts, extractedContacts, packumentVersion.name); } for (const email of emails) { resolver.registerEmail(email); } return this.processIlluminatedAndExpired(unlitContacts, resolver); } addDependencyToUnlitContacts(unlitContacts, contacts, packageName) { for (const unlit of unlitContacts) { const isMaintainer = contacts.some((contact) => unlit.compareTo(contact)); if (isMaintainer) { unlit.dependencies.add(packageName); } } } async processIlluminatedAndExpired(unlitContacts, resolver) { const expired = await resolver.getExpired(); const illuminated = unlitContacts.flatMap((unlit) => (unlit.dependencies.size > 0 ? [unlit.illuminate()] : [])); return { expired, illuminated }; } } export function extractMetadataContacts(metadata) { return [ ...(metadata.author ? [metadata.author] : []), ...(metadata.maintainers ? metadata.maintainers : []) ]; } //# sourceMappingURL=ContactExtractor.class.js.map