@nodesecure/contact
Version:
Utilities to extract/fetch data on NPM contacts (author, maintainers ..)
72 lines • 3.15 kB
JavaScript
// 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