diff --git a/depinder-fe/src/app/all-systems/system-info/system-dashboard/licencing-issues/licencing-issues.component.html b/depinder-fe/src/app/all-systems/system-info/system-dashboard/licencing-issues/licencing-issues.component.html index eec0e27..742ce5e 100644 --- a/depinder-fe/src/app/all-systems/system-info/system-dashboard/licencing-issues/licencing-issues.component.html +++ b/depinder-fe/src/app/all-systems/system-info/system-dashboard/licencing-issues/licencing-issues.component.html @@ -74,7 +74,7 @@

Projects using this licence

@if (library.seeAllDirectLibraries) { } @@ -86,7 +86,7 @@

Projects using this licence

@if (library.seeAllIndirectLibraries) { } diff --git a/depinder-fe/src/app/all-systems/system-info/system-dashboard/licencing-issues/licencing-issues.component.ts b/depinder-fe/src/app/all-systems/system-info/system-dashboard/licencing-issues/licencing-issues.component.ts index 2de2421..7716bd6 100644 --- a/depinder-fe/src/app/all-systems/system-info/system-dashboard/licencing-issues/licencing-issues.component.ts +++ b/depinder-fe/src/app/all-systems/system-info/system-dashboard/licencing-issues/licencing-issues.component.ts @@ -2,10 +2,7 @@ import {Component, Input, OnInit} from '@angular/core'; import { CommonModule } from '@angular/common'; import {Dependency, Project} from "@core/project"; import {LibraryInfo} from "@core/library"; -import {Licence} from "@core/licence"; import {MatTableDataSource, MatTableModule} from "@angular/material/table"; -import {OperationalRiskDependencies} from "../old-dependencies-table/old-dependencies-table"; -import {LicenceRulesService} from "../../../../common/services/licence-rules.service"; import {animate, state, style, transition, trigger} from "@angular/animations"; import {OldDepDetailsComponent} from "../old-dependencies-table/old-dep-details/old-dep-details.component"; import {MatListModule} from "@angular/material/list"; @@ -49,10 +46,9 @@ export class LicencingIssuesComponent implements OnInit { @Input() dependencies: Dependency[] = []; @Input() licences: any[] = []; - constructor(private licenceRules: LicenceRulesService) { } + constructor() { } columns = ['licenceID', 'projects', 'libraries', 'conditions', 'limitations', 'permissions', 'issues']; - // columns = ['licenceID', 'projects', 'libraries', 'issues']; data: LicenceIssue[] = []; dataSource!: MatTableDataSource; projectIDs: string[] = []; @@ -61,46 +57,28 @@ export class LicencingIssuesComponent implements OnInit { ngOnInit() { this.projectIDs = this.projects.map(project => project._id); - this.data = this.licences - .filter(licence => (licence.permissions ?? []).length > 0 && (licence.conditions ?? []).length > 0 && (licence.limitations ?? []).length > 0) + this.data = (this.licences ?? []) + .filter(licence => this.hasDetailedInformation(licence)) .map(licence => { let licenceLibraries: LibraryDisplay[] = []; // Declare inside the map function this.projects.forEach(project => { - project.dependencies.forEach(dependency => { - let library = this.libraries?.get(dependency.name); - if (library !== undefined && library.licenses.some(libLicence => libLicence === licence._id)) { + for (let lib of licence.libraries) { + if (project.dependencies.find(dep => dep.name === lib.name)) { let libraryDisplay = licenceLibraries.find(libraryDisplay => libraryDisplay.projectId === project._id); - if (libraryDisplay) { - if (dependency.directDep) { - libraryDisplay.directLibraries?.push(library); - } - else { - libraryDisplay.indirectLibraries.push(library); - } + lib.directDep ? libraryDisplay.directLibraries?.push(lib) : libraryDisplay.indirectLibraries.push(lib); } else { - if (dependency.directDep) { - licenceLibraries.push({ - projectId: project._id, - directLibraries: [library], - indirectLibraries: [], - seeAllDirectLibraries: false, - seeAllIndirectLibraries: false - }); - } - else { - licenceLibraries.push({ - projectId: project._id, - directLibraries: [], - indirectLibraries: [library], - seeAllDirectLibraries: false, - seeAllIndirectLibraries: false - }); - } + licenceLibraries.push({ + projectId: project._id, + directLibraries: lib.directDep ? [lib] : [], + indirectLibraries: !lib.directDep ? [lib] : [], + seeAllDirectLibraries: false, + seeAllIndirectLibraries: false + }); } } - }); + } }); return { @@ -113,10 +91,32 @@ export class LicencingIssuesComponent implements OnInit { } }) + this.data = Object.values(this.data.reduce((acc: any, cur) => { + if (!acc[cur.licenceID]) { + acc[cur.licenceID] = cur; + } else { + acc[cur.licenceID] = { + ...acc[cur.licenceID], + projects: [...(acc[cur.licenceID].projects || []), ...(cur.projects || [])].filter((project, index, self) => + index === self.findIndex((t) => ( + t.projectId === project.projectId + )) + ), + libraries: [...(acc[cur.licenceID].libraries || []), ...(cur.libraries || [])].filter((library, index, self) => + index === self.findIndex((t) => ( + t.licenceID === library.licenceID + )) + ), + permissions: cur.permissions, + conditions: cur.conditions, + limitations: cur.limitations, + }; + } + return acc; + }, {})); + this.data = this.data.filter((licence, index, self) => - index === self.findIndex((t) => ( - t.licenceID === licence.licenceID - )) && this.isCopyleft(licence) + this.isCopyleft(licence) ); this.dataSource = new MatTableDataSource(this.data); @@ -128,5 +128,7 @@ export class LicencingIssuesComponent implements OnInit { licence.conditions?.includes('document-changes')) ?? false; } - protected readonly Array = Array; + hasDetailedInformation(licence: any) { + return (licence?.permissions ?? []).length > 0 && (licence?.conditions ?? []).length > 0 && (licence?.limitations ?? []).length > 0; + } } diff --git a/depinder-fe/src/app/all-systems/system-info/system-dashboard/old-dependencies-table/old-dependencies-table.ts b/depinder-fe/src/app/all-systems/system-info/system-dashboard/old-dependencies-table/old-dependencies-table.ts index 593946a..fda569e 100644 --- a/depinder-fe/src/app/all-systems/system-info/system-dashboard/old-dependencies-table/old-dependencies-table.ts +++ b/depinder-fe/src/app/all-systems/system-info/system-dashboard/old-dependencies-table/old-dependencies-table.ts @@ -72,10 +72,10 @@ export class OldDependenciesTable implements OnChanges, OnChanges, AfterViewInit } if (this.projects !== undefined && this.libraries !== undefined) { - this.getDependencies(); + this.filterDependencies(); if (this.dependencies.size > 0) { - this.dataSource = new MatTableDataSource(Array.from(this.dependencies.values())); + this.dataSource = new MatTableDataSource(Array.from(this.dependencies.values()).sort((a, b) => a.lastUpdated - b.lastUpdated)); } } } @@ -85,7 +85,7 @@ export class OldDependenciesTable implements OnChanges, OnChanges, AfterViewInit this.dataSource.sort = this.sort; } - getDependencies() { + filterDependencies() { let dependencies = new Map(); this.projects!.forEach(project => { project.dependencies.filter(dependency => { @@ -108,11 +108,9 @@ export class OldDependenciesTable implements OnChanges, OnChanges, AfterViewInit let savedDep = dependencies.get(dependency._id)!; let projectDependency = savedDep.projects.findIndex(value => { - if (value.projectId !== project._id) { - console.log(value.projectId, project._id); - } return value.projectId === project._id; }); + if (projectDependency != -1) { savedDep.projects[projectDependency].dependencyVersions.add(dependency.version) } diff --git a/depinder-fe/src/app/all-systems/system-info/system-dashboard/system-dashboard.component.ts b/depinder-fe/src/app/all-systems/system-info/system-dashboard/system-dashboard.component.ts index dbd6f68..eb8a47a 100644 --- a/depinder-fe/src/app/all-systems/system-info/system-dashboard/system-dashboard.component.ts +++ b/depinder-fe/src/app/all-systems/system-info/system-dashboard/system-dashboard.component.ts @@ -8,7 +8,7 @@ import {OUT_OF_SUPPORT_MONTHS, OUTDATED_MONTHS} from "@core/constants"; import {VulnerableLibraryVersionsComponent} from "./vulnerable-library-versions/vulnerable-library-versions.component"; import {MatProgressSpinnerModule} from "@angular/material/progress-spinner"; import {MatProgressBarModule} from "@angular/material/progress-bar"; -import {concatMap, delay, finalize, from, map, Observable} from "rxjs"; +import {bufferCount, concatMap, delay, finalize, forkJoin, from, map, Observable} from "rxjs"; import {LibraryInfo, LibraryVersion} from "@core/library"; import {LibrariesService} from "../../../common/services/libraries.service"; import {LicencingIssuesComponent} from "./licencing-issues/licencing-issues.component"; @@ -43,9 +43,7 @@ export class SystemDashboardComponent implements OnChanges { this.projects = changes['projects'].currentValue; this.projects.forEach(project => { - project.dependencies.forEach(dependency => { - this.dependencies.push(dependency); - }); + this.dependencies.push(...project.dependencies); }); this.totalDependencies = this.dependencies.length; @@ -81,22 +79,30 @@ export class SystemDashboardComponent implements OnChanges { getDependencies(): Observable> { let libraries = new Map(); - - let observables = this.dependencies.map(dependency => this.libraryService.find(dependency._id).pipe( - delay(1) - )); + let observables = this.dependencies.map(dependency => this.libraryService.find(dependency._id)); return from(observables).pipe( - concatMap(request => request), - map((lib: LibraryInfo) => { - try { - libraries.set(lib.name, lib); - } - catch (e: any) { - console.warn('Error adding library to map', e) - } - this.totalLoaded++; + // Group the observables into batches of 20 + bufferCount(20), + // Use the concatMap operator to handle these batches one by one + concatMap(batch => forkJoin(batch)), + // Use the map operator to process each fetched library + map((libs: LibraryInfo[]) => { + libs.forEach(lib => { + try { + // Add the library to the map with its name as the key + libraries.set(lib.name, lib); + } + catch (e: any) { + // Log a warning if there's an error adding the library to the map + console.warn('Error adding library to map', e) + } + // Increment the totalLoaded variable each time a library is successfully fetched + this.totalLoaded++; + // delay(1); + }); + // Return the updated libraries map return libraries; }) ); diff --git a/depinder-fe/src/app/all-systems/system-info/system-dashboard/vulnerable-library-versions/vulnerable-library-versions.component.css b/depinder-fe/src/app/all-systems/system-info/system-dashboard/vulnerable-library-versions/vulnerable-library-versions.component.css index 29c1eb3..2bbcf8e 100644 --- a/depinder-fe/src/app/all-systems/system-info/system-dashboard/vulnerable-library-versions/vulnerable-library-versions.component.css +++ b/depinder-fe/src/app/all-systems/system-info/system-dashboard/vulnerable-library-versions/vulnerable-library-versions.component.css @@ -1,3 +1,14 @@ tr.example-detail-row { height: 0; } + +table { + display: block; + overflow-x: auto; + white-space: nowrap; +} + +table tbody { + display: table; + width: 100%; +} diff --git a/depinder-fe/src/app/all-systems/system-info/system-dashboard/vulnerable-library-versions/vulnerable-library-versions.component.html b/depinder-fe/src/app/all-systems/system-info/system-dashboard/vulnerable-library-versions/vulnerable-library-versions.component.html index 575ad24..125f6fa 100644 --- a/depinder-fe/src/app/all-systems/system-info/system-dashboard/vulnerable-library-versions/vulnerable-library-versions.component.html +++ b/depinder-fe/src/app/all-systems/system-info/system-dashboard/vulnerable-library-versions/vulnerable-library-versions.component.html @@ -1,53 +1,55 @@ @if (tableData !== undefined) { - - - - - +
+
name {{element.name}}
+ + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - + + + - - - - -
name {{element.name}} type {{element.dependencyType}} type {{element.dependencyType}} version {{element.version}} version {{element.version}} severity {{getVulnerabilitySeverity(element.vulnerabilities)}} severity {{getVulnerabilitySeverity(element.vulnerabilities)}} suggestedVersion {{element.suggestedVersion}} suggestedVersion {{element.suggestedVersion}} upgradeType {{element.upgradeType}} upgradeType {{element.upgradeType}} -
- -
-
+
+ +
+
- - + + + + + + + + } diff --git a/depinder-fe/src/app/all-systems/system-info/system-dashboard/vulnerable-library-versions/vulnerable-library-versions.component.ts b/depinder-fe/src/app/all-systems/system-info/system-dashboard/vulnerable-library-versions/vulnerable-library-versions.component.ts index c62b89e..4e5e479 100644 --- a/depinder-fe/src/app/all-systems/system-info/system-dashboard/vulnerable-library-versions/vulnerable-library-versions.component.ts +++ b/depinder-fe/src/app/all-systems/system-info/system-dashboard/vulnerable-library-versions/vulnerable-library-versions.component.ts @@ -344,42 +344,6 @@ export class VulnerableLibraryVersionsComponent implements OnChanges, AfterViewI isVersionInRange(version: string, range: string): boolean { return semver.satisfies(version, range); - // const conditions = range.split(',').map((part) => part.trim()); - // - // return conditions.every((condition) => { - // const match = condition.match(/(<=|>=|<|>|=)?\s*(.*)/); - // if (!match) { - // console.warn('Invalid version range condition:', condition); - // return false; - // } - // - // const [, operator, versionRange] = match; - // - // semver.outside(version, versionRange, '<'); - // - // try { - // switch (operator) { - // case '<': - // return semver.lt(version, versionRange); - // case '<=': - // return semver.lte(version, versionRange); - // case '>': - // return semver.gt(version, versionRange); - // case '>=': - // return semver.gte(version, versionRange); - // case '=': - // case undefined: // Handle the case where no operator is specified, assuming equality - // return semver.eq(version, versionRange); - // default: - // console.warn('Unsupported operator:', operator); - // return false; - // } - // } - // catch (e) { - // console.warn('Error comparing versions:', version, versionRange, e); - // return false; - // } - // }); } getVulnerabilitySeverity(vulnerabilities: Vulnerability[]): string { diff --git a/depinder-fe/src/app/all-systems/system-info/system-info.component.html b/depinder-fe/src/app/all-systems/system-info/system-info.component.html index af59e98..bc1ce48 100644 --- a/depinder-fe/src/app/all-systems/system-info/system-info.component.html +++ b/depinder-fe/src/app/all-systems/system-info/system-info.component.html @@ -25,11 +25,17 @@ - + @if (projects.length > 0 && licences.length > 0) { + + } @else { +
+ +
+ }
@if (projects.length > 0) { -

Projects in this system

+

{{projects.length}} project{{projects.length == 1 ? '' : 's'}} in this system:

Projects in this system >
} + @else { +
+ +
+ }
@if (dependencies.length > 0) {

Dependencies

+

+ Direct dependencies: {{directDependencies.length}} | Transitive dependencies: {{transitiveDependencies.length}} +

} + @else { +
+ +
+ }
@if (dependencies.length > 0) { @@ -53,6 +72,11 @@

Dependencies

[dependencies]="dependencies" [systemId]="id!" [projectIds]="projectIds"> } + @else { +
+ +
+ }
diff --git a/depinder-fe/src/app/all-systems/system-info/system-info.component.ts b/depinder-fe/src/app/all-systems/system-info/system-info.component.ts index bb077dd..5b4d2b1 100644 --- a/depinder-fe/src/app/all-systems/system-info/system-info.component.ts +++ b/depinder-fe/src/app/all-systems/system-info/system-info.component.ts @@ -26,11 +26,12 @@ import {SystemDashboardComponent} from "./system-dashboard/system-dashboard.comp import {MatProgressSpinnerModule} from "@angular/material/progress-spinner"; import {LicencesService} from "../../common/services/licences.service"; import {Licence} from "@core/licence"; +import {MatListModule} from "@angular/material/list"; @Component({ selector: 'app-system-info', standalone: true, - imports: [CommonModule, ProjectsTableComponent, DependencyRecursiveComponent, DependenciesComponent, MatFormFieldModule, MatInputModule, FormsModule, MatIconModule, MatButtonModule, MatTabsModule, LicenceLabelComponent, SystemLicences2Component, MatToolbarModule, SystemDashboardComponent, MatProgressSpinnerModule], + imports: [CommonModule, ProjectsTableComponent, DependencyRecursiveComponent, DependenciesComponent, MatFormFieldModule, MatInputModule, FormsModule, MatIconModule, MatButtonModule, MatTabsModule, LicenceLabelComponent, SystemLicences2Component, MatToolbarModule, SystemDashboardComponent, MatProgressSpinnerModule, MatListModule], templateUrl: './system-info.component.html', styleUrl: './system-info.component.css' }) @@ -51,16 +52,22 @@ export class SystemInfoComponent implements OnInit { private licenceService: LicencesService) { } ngOnInit() { + // Subscribe to route parameters this.route.params.pipe( + // Store the system's ID from the route parameters tap(params => this.id = params['id']), + // Fetch the system's details if the system's ID is available switchMap(params => this.id ? this.systemService.find(this.id) : of(null)), + // Store the fetched system and select the date of the latest run if any runs are available tap(system => { this.system = system ?? undefined; if (this.system && this.system.runs.length > 0) { this.selectedRunDate = this.getLatestRunDate(); } }), + // Fetch the run data if a run date is selected switchMap(() => this.selectedRunDate ? this.getRunDataObservable(this.selectedRunDate) : of(null)), + // Handle any errors that occur during the fetching process catchError(error => { console.error('Error fetching data', error); return of(null); // Handle the error or return a default value @@ -134,6 +141,14 @@ export class SystemInfoComponent implements OnInit { return this.projects.map(project => project._id); } + get directDependencies() { + return this.dependencies.filter(dependency => dependency.directDep); + } + + get transitiveDependencies() { + return this.dependencies.filter(dependency => !dependency.directDep); + } + navigateToEdit() { this.router.navigate(['edit'], { relativeTo: this.route }); } diff --git a/depinder-fe/src/app/all-systems/system-info/system-licences-2/other-licences/other-licences.component.ts b/depinder-fe/src/app/all-systems/system-info/system-licences-2/other-licences/other-licences.component.ts index 249f716..2856a63 100644 --- a/depinder-fe/src/app/all-systems/system-info/system-licences-2/other-licences/other-licences.component.ts +++ b/depinder-fe/src/app/all-systems/system-info/system-licences-2/other-licences/other-licences.component.ts @@ -1,10 +1,8 @@ import { - ChangeDetectorRef, Component, EventEmitter, Input, OnChanges, - OnInit, Output, SimpleChanges } from '@angular/core'; diff --git a/depinder-fe/src/app/all-systems/system-info/system-licences-2/system-licences-2.component.html b/depinder-fe/src/app/all-systems/system-info/system-licences-2/system-licences-2.component.html index dead930..a94716f 100644 --- a/depinder-fe/src/app/all-systems/system-info/system-licences-2/system-licences-2.component.html +++ b/depinder-fe/src/app/all-systems/system-info/system-licences-2/system-licences-2.component.html @@ -1,4 +1,4 @@ -@if (this.licences.length > 0) { +@if (this.tableElements.length > 0) {

Existing licences

@@ -8,5 +8,7 @@

Existing licences

} @else { -

Loading...

+
+ +
} diff --git a/depinder-fe/src/app/all-systems/system-info/system-licences-2/system-licences-2.component.ts b/depinder-fe/src/app/all-systems/system-info/system-licences-2/system-licences-2.component.ts index c1f2e93..0ba893a 100644 --- a/depinder-fe/src/app/all-systems/system-info/system-licences-2/system-licences-2.component.ts +++ b/depinder-fe/src/app/all-systems/system-info/system-licences-2/system-licences-2.component.ts @@ -10,6 +10,7 @@ import {from, mergeMap, toArray} from "rxjs"; import {OtherLicencesComponent} from "./other-licences/other-licences.component"; import {SuggestedLicence} from "@core/licence"; import {ExistingLicenceComponent} from "./existing-licence/existing-licence.component"; +import {MatProgressSpinnerModule} from "@angular/material/progress-spinner"; export interface TableElement { name: string; @@ -23,7 +24,7 @@ export interface TableElement { @Component({ selector: 'app-system-licences-2', standalone: true, - imports: [CommonModule, LicenceLabelComponent, MatTableModule, MatButtonModule, MatCheckboxModule, OtherLicencesComponent, ExistingLicenceComponent], + imports: [CommonModule, LicenceLabelComponent, MatTableModule, MatButtonModule, MatCheckboxModule, OtherLicencesComponent, ExistingLicenceComponent, MatProgressSpinnerModule], templateUrl: './system-licences-2.component.html', styleUrl: './system-licences-2.component.css' }) @@ -31,7 +32,7 @@ export class SystemLicences2Component implements OnInit { @Input() dependencies!: Dependency[]; @Input() projectIds!: string[]; @Input() systemId!: string; - licences: TableElement[] = []; + tableElements: TableElement[] = []; licenceData: any[] = []; constructor( @@ -54,18 +55,18 @@ export class SystemLicences2Component implements OnInit { for (let projectLicences of this.licenceData) { for (const licence of projectLicences) { - const existingEntryIndex = this.licences.findIndex((element) => element.name === (licence.name ?? licence._id)); + const existingEntryIndex = this.tableElements.findIndex((element) => element.name === (licence.name ?? licence._id)); if (existingEntryIndex !== -1) { - const existingLibraries = this.licences[existingEntryIndex].libraries; + const existingLibraries = this.tableElements[existingEntryIndex].libraries; const newLibraries = licence.libraries; - this.licences[existingEntryIndex] = { - ...this.licences[existingEntryIndex], + this.tableElements[existingEntryIndex] = { + ...this.tableElements[existingEntryIndex], libraries: new Set([...(existingLibraries ?? []), ...(newLibraries ?? [])]) } } else { - this.licences.push({ + this.tableElements.push({ // index: licence.index, name: licence.name ?? licence._id, libraries: new Set(licence.libraries), @@ -85,15 +86,15 @@ export class SystemLicences2Component implements OnInit { refreshLicence(ids: Array) { this.licenceData = []; - this.licences = []; + this.tableElements = []; this.loadLicences(); } otherLicences() { - return this.licences.filter(d => d.isCustom === undefined); + return this.tableElements.filter(d => d.isCustom === undefined); } existingLicences() { - return this.licences.filter(d => d.isCustom !== undefined); + return this.tableElements.filter(d => d.isCustom !== undefined); } } diff --git a/depinder-fe/src/app/app-routing.module.ts b/depinder-fe/src/app/app-routing.module.ts index 8092f6b..b26ecfb 100644 --- a/depinder-fe/src/app/app-routing.module.ts +++ b/depinder-fe/src/app/app-routing.module.ts @@ -9,9 +9,6 @@ import {SystemEditComponent} from "./all-systems/system-edit/system-edit.compone import {LicencesComponent} from "./all-licences/licences.component"; import {AddLicenceComponent} from "./all-licences/add-licence/add-licence.component"; import {LicenceInfoComponent} from "./all-licences/licence-info/licence-info.component"; -import { - DependencyDetailsComponent -} from "./common/standalone/dependencies/dependency-details/dependency-details.component"; import {DependencyDetails2Component} from "./common/standalone/dependency-details-2/dependency-details-2.component"; const routes: Routes = [ diff --git a/depinder-fe/src/app/common/models/tree.ts b/depinder-fe/src/app/common/models/tree.ts index d0acc19..5ee1e04 100644 --- a/depinder-fe/src/app/common/models/tree.ts +++ b/depinder-fe/src/app/common/models/tree.ts @@ -34,11 +34,3 @@ export class TreeNode { return false; } } - -export class Tree { - root: TreeNode | null; - - constructor() { - this.root = null; - } -} diff --git a/depinder-fe/src/app/common/standalone/dependencies/dependencies.component.html b/depinder-fe/src/app/common/standalone/dependencies/dependencies.component.html index d5f35eb..48d4c5a 100644 --- a/depinder-fe/src/app/common/standalone/dependencies/dependencies.component.html +++ b/depinder-fe/src/app/common/standalone/dependencies/dependencies.component.html @@ -5,9 +5,9 @@ (filterEmitter)="receiveFilter($event)" > - } @loading (minimum 1s) { diff --git a/depinder-fe/src/app/common/standalone/dependencies/dependencies.component.ts b/depinder-fe/src/app/common/standalone/dependencies/dependencies.component.ts index 5091055..68f9fce 100644 --- a/depinder-fe/src/app/common/standalone/dependencies/dependencies.component.ts +++ b/depinder-fe/src/app/common/standalone/dependencies/dependencies.component.ts @@ -31,111 +31,76 @@ export class DependenciesComponent implements OnInit, OnChanges { @Input() allDependencies: Dependency[] = []; treeNodes: TreeNode[] = []; selectedDependency?: Dependency; - selectedLibrary?: LibraryInfo; + // selectedLibrary?: LibraryInfo; filter: DependencyFilter = { searchField: undefined, filterByVulnerabilities: undefined, filterByOutdated: undefined, filterByOutOfSupport: undefined, }; - dialogRef?: MatDialogRef; - constructor(private projectsService: ProjectsService, - private librariesService: LibrariesService, - public dialog: MatDialog) { - this.openDialog = this.openDialog.bind(this); - } + constructor(private projectsService: ProjectsService) {} + ngOnInit(): void { - this.fetchProject(); + this.buildDirectDependencyNodes(); } ngOnChanges(changes: SimpleChanges) { if (changes["allDependencies"]) { - this.fetchProject(); + this.buildDirectDependencyNodes(); } } - fetchProject() { + buildDirectDependencyNodes() { this.treeNodes = []; // Convert the array into a Map, using _id as the key - const uniqueDependenciesMap = new Map(this.allDependencies.map(dep => [`${dep._id}@${dep.version}`, dep])); + const uniqueDependenciesMap = new Map(this.allDependencies.map(dependency => [`${dependency._id}@${dependency.version}`, dependency])); // Convert the Map back into an array this.allDependencies = Array.from(uniqueDependenciesMap.values()); for (let dependency of this.allDependencies) { if (dependency.directDep) { - let testDependencies = this.projectsService.getDependenciesByRequestedBy( + let directDependencies = this.projectsService.getDependenciesByRequestedBy( this.allDependencies, `${dependency.name}@${dependency.version}`); - let testTreeNode = new TreeNode(dependency); + let rootTreeNode = new TreeNode(dependency); - let testTreeNode2 = this.createTreeNode(testTreeNode, testDependencies, new Set()); + let treeNode = this.createTreeNode(rootTreeNode, directDependencies, new Set()); - this.treeNodes.push(testTreeNode2); + this.treeNodes.push(treeNode); } } } - createTreeNode(currentDependency: TreeNode, dependencies: Dependency[], path: Set): TreeNode { + createTreeNode(currentNode: TreeNode, dependencies: Dependency[], dependencyPath: Set): TreeNode { for (let dependency of dependencies) { // Check if the dependency is already in the path from root to current node - if (path.has(dependency._id)) { + if (dependencyPath.has(dependency._id)) { continue; } // Add the dependency to the path - path.add(dependency._id); + dependencyPath.add(dependency._id); - let currentTreeNode: TreeNode = new TreeNode(dependency); + let newTreeNode: TreeNode = new TreeNode(dependency); - let dependencies2 = this.projectsService.getDependenciesByRequestedBy(this.allDependencies, dependency.name + '@' + dependency.version); + let childDependencies = this.projectsService.getDependenciesByRequestedBy(this.allDependencies, dependency.name + '@' + dependency.version); // Recursive call with the updated path - this.createTreeNode(currentTreeNode, dependencies2, new Set(path)); + this.createTreeNode(newTreeNode, childDependencies, new Set(dependencyPath)); // Adding child to the current node - currentDependency.addChild(currentTreeNode); + currentNode.addChild(newTreeNode); // Remove the dependency from the path after processing - path.delete(dependency._id); + dependencyPath.delete(dependency._id); } - return currentDependency; + return currentNode; } - receiveInfo($event: any) { - this.selectedDependency = $event; - - if (this.selectedDependency !== undefined) { - this.librariesService.find(this.selectedDependency?._id).subscribe({ - next: (libraryInfo: LibraryInfo) => { - this.selectedLibrary = libraryInfo; - this.openDialog(); - }, - error: (err: any) => { - console.error(err); - } - } - ); - } - } receiveFilter($event: DependencyFilter) { this.filter = $event; } - - openDialog(): void { - this.dialogRef = this.dialog.open(DependencyDetailsComponent, { - width: '80vw', - height: '60vh', - data: { - selectedDependency: this.selectedDependency, - libraryInfo: this.selectedLibrary, - } - }); - - this.dialogRef.afterClosed().subscribe(() => { - this.selectedDependency = undefined; - }); - } } diff --git a/depinder-fe/src/app/common/standalone/dependency-recursive/dependency-recursive.component.html b/depinder-fe/src/app/common/standalone/dependency-recursive/dependency-recursive.component.html index 2aed83d..64c55a1 100644 --- a/depinder-fe/src/app/common/standalone/dependency-recursive/dependency-recursive.component.html +++ b/depinder-fe/src/app/common/standalone/dependency-recursive/dependency-recursive.component.html @@ -1,9 +1,9 @@
-
-@for(dependency of allDependencies; track $index) { +@for(dependency of children; track $index) { @if (showMore && (containsFilters($index) || ((this.filter | json) === '{}'))) {
@defer (on viewport){ a.data.name.localeCompare(b.data.name)); + this.children.sort((a, b) => a.data.name.localeCompare(b.data.name)); } containsFilters(index: number): boolean { @@ -67,7 +67,7 @@ export class DependencyRecursiveComponent implements OnInit { if (isSearchFieldEmpty && isFilterByVulnerabilitiesUndefined && isFilterByOutOfSupportUndefined && isFilterByOutdatedUndefined) return false; - return this.allDependencies[index].contains(searchFieldTrimmed, this.filter.filterByVulnerabilities, this.filter.filterByOutOfSupport, this.filter.filterByOutdated); + return this.children[index].contains(searchFieldTrimmed, this.filter.filterByVulnerabilities, this.filter.filterByOutOfSupport, this.filter.filterByOutdated); } toggle() { diff --git a/package-lock.json b/package-lock.json index 0e37c2f..e9703ce 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,8 +9,6 @@ "version": "0.1.0", "license": "Apache-2.0", "dependencies": { - "@dxworks/cli-common": "^0.0.20", - "@dxworks/ktextensions": "^0.1.0", "@dxworks/nuget-inspector": "^1.2.0", "@octokit/graphql": "^4.8.0", "@snyk/gemfile": "^1.2.0", @@ -39,7 +37,8 @@ "spdx-correct": "^3.1.1", "spdx-license-ids": "^3.0.10", "tmp": "^0.2.1", - "toml": "^3.0.0" + "toml": "^3.0.0", + "winston": "^3.11.0" }, "bin": { "depinder": "dist/index.js" @@ -915,9 +914,9 @@ "dev": true }, "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", "engines": { "node": ">=0.1.90" } @@ -954,30 +953,6 @@ "kuler": "^2.0.0" } }, - "node_modules/@dxworks/cli-common": { - "version": "0.0.20", - "resolved": "https://npm.pkg.github.com/download/@dxworks/cli-common/0.0.20/556eb5a29db389633daaf1526f6b885d2111aae1", - "integrity": "sha512-3GoJlOqi+Re9/SfR0ZMenVcUd7TuI5lJvNmdp1kIHg6K1hmiKzcsa+LbdE+Q/8C6rJKJ9JMLBgmBrPIemTZFRA==", - "license": "Apache-2.0", - "dependencies": { - "@dxworks/ktextensions": "^0.1.0", - "axios": "^0.24.0", - "cli-progress": "^3.9.1", - "isomorphic-git": "^1.10.1", - "octokit": "^1.6.2", - "unzipper": "^0.10.11", - "winston": "^3.3.3" - } - }, - "node_modules/@dxworks/ktextensions": { - "version": "0.1.0", - "resolved": "https://npm.pkg.github.com/download/@dxworks/ktextensions/0.1.0/e8f609926860556bbe6a93e6e4dceb5a71eae38c", - "integrity": "sha512-OmhBbC3D/IXcC47Dc8YmDD/LXYlmGxZ4/PX81KOL1eK90zYPXP7/JZn5zzNZVKfQZInpjZooWGG1TIK7ZrXfHA==", - "license": "Apache-2.0", - "dependencies": { - "typescript": "^4.4.3" - } - }, "node_modules/@dxworks/nuget-inspector": { "version": "1.2.0", "resolved": "https://npm.pkg.github.com/download/@dxworks/nuget-inspector/1.2.0/87bb8ca8d67f7e3675406e3245c54f7134fcfd8b", @@ -1478,306 +1453,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@octokit/app": { - "version": "12.0.7", - "resolved": "https://registry.npmjs.org/@octokit/app/-/app-12.0.7.tgz", - "integrity": "sha512-NqgLlaaf7Yy1s5ghhiiBRGzstICpBYnVX5ce3Klk3iKaGeXJDBLVyrJ6e6sYOiTXolFK56Nx5QWS6oUBgP6rSw==", - "dependencies": { - "@octokit/auth-app": "^3.3.0", - "@octokit/auth-unauthenticated": "^2.0.4", - "@octokit/core": "^3.4.0", - "@octokit/oauth-app": "^3.3.2", - "@octokit/plugin-paginate-rest": "^2.13.3", - "@octokit/types": "^6.27.1", - "@octokit/webhooks": "^9.0.1" - } - }, - "node_modules/@octokit/auth-app": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@octokit/auth-app/-/auth-app-3.6.1.tgz", - "integrity": "sha512-6oa6CFphIYI7NxxHrdVOzhG7hkcKyGyYocg7lNDSJVauVOLtylg8hNJzoUyPAYKKK0yUeoZamE/lMs2tG+S+JA==", - "dependencies": { - "@octokit/auth-oauth-app": "^4.3.0", - "@octokit/auth-oauth-user": "^1.2.3", - "@octokit/request": "^5.6.0", - "@octokit/request-error": "^2.1.0", - "@octokit/types": "^6.0.3", - "@types/lru-cache": "^5.1.0", - "deprecation": "^2.3.1", - "lru-cache": "^6.0.0", - "universal-github-app-jwt": "^1.0.1", - "universal-user-agent": "^6.0.0" - } - }, - "node_modules/@octokit/auth-app/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@octokit/auth-app/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/@octokit/auth-oauth-app": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-app/-/auth-oauth-app-4.3.4.tgz", - "integrity": "sha512-OYOTSSINeUAiLMk1uelaGB/dEkReBqHHr8+hBejzMG4z1vA4c7QSvDAS0RVZSr4oD4PEUPYFzEl34K7uNrXcWA==", - "dependencies": { - "@octokit/auth-oauth-device": "^3.1.1", - "@octokit/auth-oauth-user": "^2.0.0", - "@octokit/request": "^5.6.3", - "@octokit/types": "^6.0.3", - "@types/btoa-lite": "^1.0.0", - "btoa-lite": "^1.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "node_modules/@octokit/auth-oauth-app/node_modules/@octokit/auth-oauth-user": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-user/-/auth-oauth-user-2.1.2.tgz", - "integrity": "sha512-kkRqNmFe7s5GQcojE3nSlF+AzYPpPv7kvP/xYEnE57584pixaFBH8Vovt+w5Y3E4zWUEOxjdLItmBTFAWECPAg==", - "dependencies": { - "@octokit/auth-oauth-device": "^4.0.0", - "@octokit/oauth-methods": "^2.0.0", - "@octokit/request": "^6.0.0", - "@octokit/types": "^9.0.0", - "btoa-lite": "^1.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/auth-oauth-app/node_modules/@octokit/auth-oauth-user/node_modules/@octokit/auth-oauth-device": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-device/-/auth-oauth-device-4.0.5.tgz", - "integrity": "sha512-XyhoWRTzf2ZX0aZ52a6Ew5S5VBAfwwx1QnC2Np6Et3MWQpZjlREIcbcvVZtkNuXp6Z9EeiSLSDUqm3C+aMEHzQ==", - "dependencies": { - "@octokit/oauth-methods": "^2.0.0", - "@octokit/request": "^6.0.0", - "@octokit/types": "^9.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/auth-oauth-app/node_modules/@octokit/auth-oauth-user/node_modules/@octokit/request": { - "version": "6.2.8", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz", - "integrity": "sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==", - "dependencies": { - "@octokit/endpoint": "^7.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/auth-oauth-app/node_modules/@octokit/auth-oauth-user/node_modules/@octokit/types": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", - "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", - "dependencies": { - "@octokit/openapi-types": "^18.0.0" - } - }, - "node_modules/@octokit/auth-oauth-app/node_modules/@octokit/endpoint": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz", - "integrity": "sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==", - "dependencies": { - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/auth-oauth-app/node_modules/@octokit/endpoint/node_modules/@octokit/types": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", - "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", - "dependencies": { - "@octokit/openapi-types": "^18.0.0" - } - }, - "node_modules/@octokit/auth-oauth-app/node_modules/@octokit/openapi-types": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", - "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==" - }, - "node_modules/@octokit/auth-oauth-app/node_modules/@octokit/request-error": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", - "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", - "dependencies": { - "@octokit/types": "^9.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/auth-oauth-app/node_modules/@octokit/request-error/node_modules/@octokit/types": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", - "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", - "dependencies": { - "@octokit/openapi-types": "^18.0.0" - } - }, - "node_modules/@octokit/auth-oauth-device": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-device/-/auth-oauth-device-3.1.4.tgz", - "integrity": "sha512-6sHE/++r+aEFZ/BKXOGPJcH/nbgbBjS1A4CHfq/PbPEwb0kZEt43ykW98GBO/rYBPAYaNpCPvXfGwzgR9yMCXg==", - "dependencies": { - "@octokit/oauth-methods": "^2.0.0", - "@octokit/request": "^6.0.0", - "@octokit/types": "^6.10.0", - "universal-user-agent": "^6.0.0" - } - }, - "node_modules/@octokit/auth-oauth-device/node_modules/@octokit/endpoint": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz", - "integrity": "sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==", - "dependencies": { - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/auth-oauth-device/node_modules/@octokit/endpoint/node_modules/@octokit/types": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", - "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", - "dependencies": { - "@octokit/openapi-types": "^18.0.0" - } - }, - "node_modules/@octokit/auth-oauth-device/node_modules/@octokit/openapi-types": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", - "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==" - }, - "node_modules/@octokit/auth-oauth-device/node_modules/@octokit/request": { - "version": "6.2.8", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz", - "integrity": "sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==", - "dependencies": { - "@octokit/endpoint": "^7.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/auth-oauth-device/node_modules/@octokit/request-error": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", - "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", - "dependencies": { - "@octokit/types": "^9.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/auth-oauth-device/node_modules/@octokit/request-error/node_modules/@octokit/types": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", - "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", - "dependencies": { - "@octokit/openapi-types": "^18.0.0" - } - }, - "node_modules/@octokit/auth-oauth-device/node_modules/@octokit/request/node_modules/@octokit/types": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", - "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", - "dependencies": { - "@octokit/openapi-types": "^18.0.0" - } - }, - "node_modules/@octokit/auth-oauth-user": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-user/-/auth-oauth-user-1.3.0.tgz", - "integrity": "sha512-3QC/TAdk7onnxfyZ24BnJRfZv8TRzQK7SEFUS9vLng4Vv6Hv6I64ujdk/CUkREec8lhrwU764SZ/d+yrjjqhaQ==", - "dependencies": { - "@octokit/auth-oauth-device": "^3.1.1", - "@octokit/oauth-methods": "^1.1.0", - "@octokit/request": "^5.4.14", - "@octokit/types": "^6.12.2", - "btoa-lite": "^1.0.0", - "universal-user-agent": "^6.0.0" - } - }, - "node_modules/@octokit/auth-oauth-user/node_modules/@octokit/oauth-methods": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@octokit/oauth-methods/-/oauth-methods-1.2.6.tgz", - "integrity": "sha512-nImHQoOtKnSNn05uk2o76om1tJWiAo4lOu2xMAHYsNr0fwopP+Dv+2MlGvaMMlFjoqVd3fF3X5ZDTKCsqgmUaQ==", - "dependencies": { - "@octokit/oauth-authorization-url": "^4.3.1", - "@octokit/request": "^5.4.14", - "@octokit/request-error": "^2.0.5", - "@octokit/types": "^6.12.2", - "btoa-lite": "^1.0.0" - } - }, - "node_modules/@octokit/auth-token": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", - "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", - "dependencies": { - "@octokit/types": "^6.0.3" - } - }, - "node_modules/@octokit/auth-unauthenticated": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-unauthenticated/-/auth-unauthenticated-2.1.0.tgz", - "integrity": "sha512-+baofLfSL0CAv3CfGQ9rxiZZQEX8VNJMGuuS4PgrMRBUL52Ho5+hQYb63UJQshw7EXYMPDZxbXznc0y33cbPqw==", - "dependencies": { - "@octokit/request-error": "^2.1.0", - "@octokit/types": "^6.0.3" - } - }, - "node_modules/@octokit/core": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.6.0.tgz", - "integrity": "sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==", - "dependencies": { - "@octokit/auth-token": "^2.4.4", - "@octokit/graphql": "^4.5.8", - "@octokit/request": "^5.6.3", - "@octokit/request-error": "^2.0.5", - "@octokit/types": "^6.0.3", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - } - }, "node_modules/@octokit/endpoint": { "version": "6.0.12", "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", @@ -1798,169 +1473,11 @@ "universal-user-agent": "^6.0.0" } }, - "node_modules/@octokit/oauth-app": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@octokit/oauth-app/-/oauth-app-3.7.1.tgz", - "integrity": "sha512-NTmFuB4jcwnxj7xlipHuuX9DRprfb7vHGSBIizIygx2u8LlNYqGvHYWNgw3TpxRxYrFA+SMIfjoVgrtnYpdbrA==", - "dependencies": { - "@octokit/auth-oauth-app": "^4.0.0", - "@octokit/auth-oauth-user": "^1.3.0", - "@octokit/auth-unauthenticated": "^2.0.0", - "@octokit/core": "^3.3.2", - "@octokit/oauth-authorization-url": "^4.2.1", - "@octokit/oauth-methods": "^1.2.2", - "@types/aws-lambda": "^8.10.83", - "fromentries": "^1.3.1", - "universal-user-agent": "^6.0.0" - }, - "optionalDependencies": { - "aws-lambda": "^1.0.7" - } - }, - "node_modules/@octokit/oauth-app/node_modules/@octokit/oauth-methods": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@octokit/oauth-methods/-/oauth-methods-1.2.6.tgz", - "integrity": "sha512-nImHQoOtKnSNn05uk2o76om1tJWiAo4lOu2xMAHYsNr0fwopP+Dv+2MlGvaMMlFjoqVd3fF3X5ZDTKCsqgmUaQ==", - "dependencies": { - "@octokit/oauth-authorization-url": "^4.3.1", - "@octokit/request": "^5.4.14", - "@octokit/request-error": "^2.0.5", - "@octokit/types": "^6.12.2", - "btoa-lite": "^1.0.0" - } - }, - "node_modules/@octokit/oauth-authorization-url": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@octokit/oauth-authorization-url/-/oauth-authorization-url-4.3.3.tgz", - "integrity": "sha512-lhP/t0i8EwTmayHG4dqLXgU+uPVys4WD/qUNvC+HfB1S1dyqULm5Yx9uKc1x79aP66U1Cb4OZeW8QU/RA9A4XA==" - }, - "node_modules/@octokit/oauth-methods": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@octokit/oauth-methods/-/oauth-methods-2.0.6.tgz", - "integrity": "sha512-l9Uml2iGN2aTWLZcm8hV+neBiFXAQ9+3sKiQe/sgumHlL6HDg0AQ8/l16xX/5jJvfxueqTW5CWbzd0MjnlfHZw==", - "dependencies": { - "@octokit/oauth-authorization-url": "^5.0.0", - "@octokit/request": "^6.2.3", - "@octokit/request-error": "^3.0.3", - "@octokit/types": "^9.0.0", - "btoa-lite": "^1.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/oauth-methods/node_modules/@octokit/endpoint": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz", - "integrity": "sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==", - "dependencies": { - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/oauth-methods/node_modules/@octokit/oauth-authorization-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@octokit/oauth-authorization-url/-/oauth-authorization-url-5.0.0.tgz", - "integrity": "sha512-y1WhN+ERDZTh0qZ4SR+zotgsQUE1ysKnvBt1hvDRB2WRzYtVKQjn97HEPzoehh66Fj9LwNdlZh+p6TJatT0zzg==", - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/oauth-methods/node_modules/@octokit/openapi-types": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", - "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==" - }, - "node_modules/@octokit/oauth-methods/node_modules/@octokit/request": { - "version": "6.2.8", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz", - "integrity": "sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==", - "dependencies": { - "@octokit/endpoint": "^7.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/oauth-methods/node_modules/@octokit/request-error": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", - "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", - "dependencies": { - "@octokit/types": "^9.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/oauth-methods/node_modules/@octokit/types": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", - "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", - "dependencies": { - "@octokit/openapi-types": "^18.0.0" - } - }, "node_modules/@octokit/openapi-types": { "version": "12.11.0", "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-12.11.0.tgz", "integrity": "sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==" }, - "node_modules/@octokit/plugin-paginate-rest": { - "version": "2.21.3", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.21.3.tgz", - "integrity": "sha512-aCZTEf0y2h3OLbrgKkrfFdjRL6eSOo8komneVQJnYecAxIej7Bafor2xhuDJOIFau4pk0i/P28/XgtbyPF0ZHw==", - "dependencies": { - "@octokit/types": "^6.40.0" - }, - "peerDependencies": { - "@octokit/core": ">=2" - } - }, - "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "5.16.2", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.16.2.tgz", - "integrity": "sha512-8QFz29Fg5jDuTPXVtey05BLm7OB+M8fnvE64RNegzX7U+5NUXcOcnpTIK0YfSHBg8gYd0oxIq3IZTe9SfPZiRw==", - "dependencies": { - "@octokit/types": "^6.39.0", - "deprecation": "^2.3.1" - }, - "peerDependencies": { - "@octokit/core": ">=3" - } - }, - "node_modules/@octokit/plugin-retry": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-3.0.9.tgz", - "integrity": "sha512-r+fArdP5+TG6l1Rv/C9hVoty6tldw6cE2pRHNGmFPdyfrc696R6JjrQ3d7HdVqGwuzfyrcaLAKD7K8TX8aehUQ==", - "dependencies": { - "@octokit/types": "^6.0.3", - "bottleneck": "^2.15.3" - } - }, - "node_modules/@octokit/plugin-throttling": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-3.7.0.tgz", - "integrity": "sha512-qrKT1Yl/KuwGSC6/oHpLBot3ooC9rq0/ryDYBCpkRtoj+R8T47xTMDT6Tk2CxWopFota/8Pi/2SqArqwC0JPow==", - "dependencies": { - "@octokit/types": "^6.0.1", - "bottleneck": "^2.15.3" - }, - "peerDependencies": { - "@octokit/core": "^3.5.0" - } - }, "node_modules/@octokit/request": { "version": "5.6.3", "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz", @@ -1992,27 +1509,6 @@ "@octokit/openapi-types": "^12.11.0" } }, - "node_modules/@octokit/webhooks": { - "version": "9.26.0", - "resolved": "https://registry.npmjs.org/@octokit/webhooks/-/webhooks-9.26.0.tgz", - "integrity": "sha512-foZlsgrTDwAmD5j2Czn6ji10lbWjGDVsUxTIydjG9KTkAWKJrFapXJgO5SbGxRwfPd3OJdhK3nA2YPqVhxLXqA==", - "dependencies": { - "@octokit/request-error": "^2.0.2", - "@octokit/webhooks-methods": "^2.0.0", - "@octokit/webhooks-types": "5.8.0", - "aggregate-error": "^3.1.0" - } - }, - "node_modules/@octokit/webhooks-methods": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@octokit/webhooks-methods/-/webhooks-methods-2.0.0.tgz", - "integrity": "sha512-35cfQ4YWlnZnmZKmIxlGPUPLtbkF8lr/A/1Sk1eC0ddLMwQN06dOuLc+dI3YLQS+T+MoNt3DIQ0NynwgKPilig==" - }, - "node_modules/@octokit/webhooks-types": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/@octokit/webhooks-types/-/webhooks-types-5.8.0.tgz", - "integrity": "sha512-8adktjIb76A7viIdayQSFuBEwOzwhDC+9yxZpKNHjfzrlostHCw0/N7JWpWMObfElwvJMk2fY2l1noENCk9wmw==" - }, "node_modules/@sindresorhus/is": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", @@ -2161,11 +1657,6 @@ "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", "dev": true }, - "node_modules/@types/aws-lambda": { - "version": "8.10.119", - "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.119.tgz", - "integrity": "sha512-Vqm22aZrCvCd6I5g1SvpW151jfqwTzEZ7XJ3yZ6xaZG31nUEOEyzzVImjRcsN8Wi/QyPxId/x8GTtgIbsy8kEw==" - }, "node_modules/@types/babel__core": { "version": "7.20.1", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", @@ -2216,11 +1707,6 @@ "@types/node": "*" } }, - "node_modules/@types/btoa-lite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/btoa-lite/-/btoa-lite-1.0.0.tgz", - "integrity": "sha512-wJsiX1tosQ+J5+bY5LrSahHxr2wT+uME5UDwdN1kg4frt40euqA+wzECkmq4t5QbveHiJepfdThgQrPw6KiSlg==" - }, "node_modules/@types/cacheable-request": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", @@ -2397,14 +1883,6 @@ "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", "dev": true }, - "node_modules/@types/jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-drE6uz7QBKq1fYqqoFKTDRdFCPHd5TCub75BM+D+cMx7NU9hUz7SESLfC2fSCXVFMO5Yj8sOWHuGqPgjc+fz0Q==", - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/keyv": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", @@ -2419,11 +1897,6 @@ "integrity": "sha512-BMVOiWs0uNxHVlHBgzTIqJYmj+PgCo4euloGF+5m4okL3rEYzM2EEv78mw8zWSMM57dM7kVIgJ2QDvwHSoCI5g==", "dev": true }, - "node_modules/@types/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==" - }, "node_modules/@types/mime": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.4.tgz", @@ -2596,9 +2069,9 @@ "integrity": "sha512-ONpcZAEYlbPx4EtJwfTyCDQJGUpKf4sEcuySdCVjK5Fj/3vHp5HII1fqa1/+qrsLnpYELCQTfVW/awsGJePoIg==" }, "node_modules/@types/triple-beam": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.2.tgz", - "integrity": "sha512-txGIh+0eDFzKGC25zORnswy+br1Ha7hj5cMVwKIU7+s0U2AxxJru/jZSMU6OC9MJWP6+pc/hc6ZjyZShpsyY2g==" + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", + "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==" }, "node_modules/@types/webidl-conversions": { "version": "7.0.0", @@ -3213,71 +2686,12 @@ "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" }, - "node_modules/async-lock": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/async-lock/-/async-lock-1.4.0.tgz", - "integrity": "sha512-coglx5yIWuetakm3/1dsX9hxCNox22h7+V80RQOu2XUUMidtArxKoZoOtHUPuR84SycKTXzgGzAUR5hJxujyJQ==" - }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "dev": true }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "optional": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/aws-lambda": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/aws-lambda/-/aws-lambda-1.0.7.tgz", - "integrity": "sha512-9GNFMRrEMG5y3Jvv+V4azWvc+qNWdWLTjDdhf/zgMlz8haaaLWv0xeAIWxz9PuWUBawsVxy0zZotjCdR3Xq+2w==", - "optional": true, - "dependencies": { - "aws-sdk": "^2.814.0", - "commander": "^3.0.2", - "js-yaml": "^3.14.1", - "watchpack": "^2.0.0-beta.10" - }, - "bin": { - "lambda": "bin/lambda" - } - }, - "node_modules/aws-lambda/node_modules/commander": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", - "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", - "optional": true - }, - "node_modules/aws-sdk": { - "version": "2.1447.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1447.0.tgz", - "integrity": "sha512-7Z0VMwD679OCjZCgNbRnA0ZNxfpT8zSrI9PQXu9J0uwV7xAAfaRk3nKFpOgvobUkOXszlBiYdVubhbaHOzITtA==", - "optional": true, - "dependencies": { - "buffer": "4.9.2", - "events": "1.1.1", - "ieee754": "1.1.13", - "jmespath": "0.16.0", - "querystring": "0.2.0", - "sax": "1.2.1", - "url": "0.10.3", - "util": "^0.12.4", - "uuid": "8.0.0", - "xml2js": "0.5.0" - }, - "engines": { - "node": ">= 10.0.0" - } - }, "node_modules/axios": { "version": "0.24.0", "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz", @@ -3402,11 +2816,6 @@ } ] }, - "node_modules/before-after-hook": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", - "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==" - }, "node_modules/big-integer": { "version": "1.6.51", "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", @@ -3478,11 +2887,6 @@ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" }, - "node_modules/bottleneck": { - "version": "2.19.5", - "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", - "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" - }, "node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -3566,23 +2970,7 @@ "resolved": "https://registry.npmjs.org/bson/-/bson-5.4.0.tgz", "integrity": "sha512-WRZ5SQI5GfUuKnPTNmAYPiKIof3ORXAF4IRU5UcgmivNIon01rWQlw5RUH954dpu8yGL8T59YShVddIPaU/gFA==", "engines": { - "node": ">=14.20.1" - } - }, - "node_modules/btoa-lite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz", - "integrity": "sha512-gvW7InbIyF8AicrqWoptdW08pUxuhq8BEgowNajy9RhiE86fmGAGl+bLKo6oB8QP0CkqHLowfN0oJdKC/J6LbA==" - }, - "node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "optional": true, - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" + "node": ">=14.20.1" } }, "node_modules/buffer-crc32": { @@ -3593,11 +2981,6 @@ "node": "*" } }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" - }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -3850,11 +3233,6 @@ "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", "dev": true }, - "node_modules/clean-git-ref": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/clean-git-ref/-/clean-git-ref-2.0.1.tgz", - "integrity": "sha512-bLSptAy2P0s6hU4PzuIMKmMJJSE6gLXGH1cntDu7bWJUksvuM+7ReOK61mozULErYvP6a15rnYl0zFDef+pyPw==" - }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -4058,17 +3436,6 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, - "node_modules/crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "bin": { - "crc32": "bin/crc32.njs" - }, - "engines": { - "node": ">=0.8" - } - }, "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", @@ -4378,11 +3745,6 @@ "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/diff3": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/diff3/-/diff3-0.0.3.tgz", - "integrity": "sha512-iSq8ngPOt0K53A6eVr4d5Kn6GNrM2nQZtC740pzIriHtn4pOQ2lyzEXQMBeVcWERN0ye7fhBsk9PbLLQOnUx/g==" - }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -4524,14 +3886,6 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, "node_modules/electron-to-chromium": { "version": "1.4.505", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.505.tgz", @@ -4929,15 +4283,6 @@ "tslib": "^2.1.0" } }, - "node_modules/events": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", - "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==", - "optional": true, - "engines": { - "node": ">=0.4.x" - } - }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -5161,15 +4506,6 @@ } } }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "optional": true, - "dependencies": { - "is-callable": "^1.1.3" - } - }, "node_modules/form-data": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", @@ -5184,25 +4520,6 @@ "node": ">= 6" } }, - "node_modules/fromentries": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", - "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -5377,12 +4694,6 @@ "node": ">= 6" } }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "optional": true - }, "node_modules/glob/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -5437,18 +4748,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "optional": true, - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/got": { "version": "11.8.6", "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", @@ -5535,21 +4834,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "optional": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -5780,22 +5064,6 @@ "node": "*" } }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "optional": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -5850,21 +5118,6 @@ "node": ">=6" } }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "optional": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -5923,21 +5176,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", - "optional": true, - "dependencies": { - "which-typed-array": "^1.1.11" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -5954,30 +5192,6 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, - "node_modules/isomorphic-git": { - "version": "1.24.5", - "resolved": "https://registry.npmjs.org/isomorphic-git/-/isomorphic-git-1.24.5.tgz", - "integrity": "sha512-07M4YscftHZJIuw7xZhgWkdFvVjHSBJBsIwWXkxgFCivhb0l8mGNchM7nO2hU27EKSIf0sT4gJivEgLGohWbzA==", - "dependencies": { - "async-lock": "^1.1.0", - "clean-git-ref": "^2.0.1", - "crc-32": "^1.2.0", - "diff3": "0.0.3", - "ignore": "^5.1.4", - "minimisted": "^2.0.0", - "pako": "^1.0.10", - "pify": "^4.0.1", - "readable-stream": "^3.4.0", - "sha.js": "^2.4.9", - "simple-get": "^4.0.1" - }, - "bin": { - "isogit": "cli.cjs" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", @@ -6750,15 +5964,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/jmespath": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", - "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==", - "optional": true, - "engines": { - "node": ">= 0.6.0" - } - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -6917,46 +6122,6 @@ "node >= 0.2.0" ] }, - "node_modules/jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", - "dependencies": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=12", - "npm": ">=6" - } - }, - "node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "dependencies": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, "node_modules/kareem": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz", @@ -7072,16 +6237,6 @@ "resolved": "https://registry.npmjs.org/lodash.has/-/lodash.has-4.5.2.tgz", "integrity": "sha512-rnYUdIo6xRCJnQmbVFEwcxF144erlD+M3YcJUVesflU9paQaE8p+fJDcIQrlMYbxoANFL+AB9hZrzSBBk5PL+g==" }, - "node_modules/lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" - }, - "node_modules/lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" - }, "node_modules/lodash.isempty": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", @@ -7097,26 +6252,6 @@ "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==" }, - "node_modules/lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" - }, - "node_modules/lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" - }, "node_modules/lodash.isundefined": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz", @@ -7143,11 +6278,6 @@ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" }, - "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" - }, "node_modules/lodash.reduce": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", @@ -7185,16 +6315,19 @@ "integrity": "sha512-r0RwvdCv8id9TUblb/O7rYPwVy6lerCbcawrfdo9iC/1t1wsNMJknO79WNBgwkH0hIeJ08jmvvESbFpNb4jH0Q==" }, "node_modules/logform": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.5.1.tgz", - "integrity": "sha512-9FyqAm9o9NKKfiAKfZoYo9bGXXuwMkxQiQttkT4YjjVtQVIQtK6LmVtlxmCaFswo6N4AfEkHqZTV0taDtPotNg==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.6.0.tgz", + "integrity": "sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ==", "dependencies": { - "@colors/colors": "1.5.0", + "@colors/colors": "1.6.0", "@types/triple-beam": "^1.3.2", "fecha": "^4.2.0", "ms": "^2.1.1", "safe-stable-stringify": "^2.3.1", "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" } }, "node_modules/lowercase-keys": { @@ -7410,14 +6543,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/minimisted": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/minimisted/-/minimisted-2.0.1.tgz", - "integrity": "sha512-1oPjfuLQa2caorJUM8HV8lGgWCc0qqAO1MNv/k05G4qslmsndV/5WdNZrqCiyqiz3wohia2Ij2B7w2Dr7/IyrA==", - "dependencies": { - "minimist": "^1.2.5" - } - }, "node_modules/minipass": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", @@ -10801,21 +9926,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/octokit": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/octokit/-/octokit-1.8.1.tgz", - "integrity": "sha512-xBLKFIivbl7wnLwxzLYuDO/JDNYxdyxoSjFrl/QMrY/fwGGQYYklvKUDTUyGMU0aXPrQtJ0IZnG3BXpCkDQzWg==", - "dependencies": { - "@octokit/app": "^12.0.4", - "@octokit/core": "^3.5.1", - "@octokit/oauth-app": "^3.5.1", - "@octokit/plugin-paginate-rest": "^2.18.0", - "@octokit/plugin-rest-endpoint-methods": "^5.14.0", - "@octokit/plugin-retry": "^3.0.9", - "@octokit/plugin-throttling": "^3.5.1", - "@octokit/types": "^6.35.0" - } - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -10925,11 +10035,6 @@ "resolved": "https://registry.npmjs.org/packageurl-js/-/packageurl-js-0.0.5.tgz", "integrity": "sha512-BISQVKLiu7EsWF5Qhx8OvX6K5vOfFcYuQBggFfrF2dHu+/Z2snuabilb0EyLvHZH0XXqbEz20pqFRonTt8z6QA==" }, - "node_modules/pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -11033,14 +10138,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "engines": { - "node": ">=6" - } - }, "node_modules/pirates": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", @@ -11288,16 +10385,6 @@ } } }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "optional": true, - "engines": { - "node": ">=0.4.x" - } - }, "node_modules/querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", @@ -11607,18 +10694,6 @@ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -11660,49 +10735,6 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, "node_modules/simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", @@ -12726,6 +11758,7 @@ "version": "4.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -12788,15 +11821,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/universal-github-app-jwt": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/universal-github-app-jwt/-/universal-github-app-jwt-1.1.1.tgz", - "integrity": "sha512-G33RTLrIBMFmlDV4u4CBF7dh71eWwykck4XgaxaIVeZKOYZRAAxvcGMRFTUclVY6xoUPQvO4Ne5wKGxYm/Yy9w==", - "dependencies": { - "@types/jsonwebtoken": "^9.0.0", - "jsonwebtoken": "^9.0.0" - } - }, "node_modules/universal-user-agent": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", @@ -12903,16 +11927,6 @@ "punycode": "^2.1.0" } }, - "node_modules/url": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", - "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", - "optional": true, - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, "node_modules/url-parse": { "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", @@ -12923,39 +11937,11 @@ "requires-port": "^1.0.0" } }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", - "optional": true - }, - "node_modules/util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", - "optional": true, - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, - "node_modules/uuid": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", - "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==", - "optional": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/v8-compile-cache": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", @@ -13030,19 +12016,6 @@ "makeerror": "1.0.12" } }, - "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "optional": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/webidl-conversions": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", @@ -13107,31 +12080,12 @@ "node": ">= 8" } }, - "node_modules/which-typed-array": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", - "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", - "optional": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/winston": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.10.0.tgz", - "integrity": "sha512-nT6SIDaE9B7ZRO0u3UvdrimG0HkB7dSTAgInQnNR2SOPJ4bvq5q79+pXLftKmP52lJGW15+H5MCK0nM9D3KB/g==", + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.13.0.tgz", + "integrity": "sha512-rwidmA1w3SE4j0E5MuIufFhyJPBDG7Nu71RkZor1p2+qHvJSZ9GYDA81AyleQcZbh/+V6HjeBdfnTZJm9rSeQQ==", "dependencies": { - "@colors/colors": "1.5.0", + "@colors/colors": "^1.6.0", "@dabh/diagnostics": "^2.0.2", "async": "^3.2.3", "is-stream": "^2.0.0", @@ -13141,23 +12095,23 @@ "safe-stable-stringify": "^2.3.1", "stack-trace": "0.0.x", "triple-beam": "^1.3.0", - "winston-transport": "^4.5.0" + "winston-transport": "^4.7.0" }, "engines": { "node": ">= 12.0.0" } }, "node_modules/winston-transport": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz", - "integrity": "sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.7.0.tgz", + "integrity": "sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg==", "dependencies": { "logform": "^2.3.2", "readable-stream": "^3.6.0", "triple-beam": "^1.3.0" }, "engines": { - "node": ">= 6.4.0" + "node": ">= 12.0.0" } }, "node_modules/wrap-ansi": { @@ -13221,19 +12175,6 @@ "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", "dev": true }, - "node_modules/xml2js": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", - "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", - "optional": true, - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/xmlbuilder": { "version": "11.0.1", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", diff --git a/package.json b/package.json index 558320b..ff61fb0 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,13 @@ "test": "jest --passWithNoTests", "test:dev": "jest --watch", "start-fe": "cd ./depinder-fe && ng serve", - "start-be": "node ./server/src/server.js" + "start-be": "node ./server/src/server.js", + "start-docker": "docker-compose -f src/assets/depinder.docker-compose.yml up", + "start-all": "npm run start-fe & npm run start-be & npm run start-docker", + "stop-fe": "kill-port 4200", + "stop-be": "kill-port 3000", + "stop-docker": "docker-compose -f src/assets/depinder.docker-compose.yml down", + "stop-all": "npm run stop-fe & npm run stop-be & npm run stop-docker" }, "dependencies": { "@dxworks/nuget-inspector": "^1.2.0", diff --git a/server/controllers/libraryController.ts b/server/controllers/libraryController.ts index cac5e55..502b2d3 100644 --- a/server/controllers/libraryController.ts +++ b/server/controllers/libraryController.ts @@ -12,6 +12,7 @@ export const getAllLibraries = async (_req: Request, res: Response): Promise => { try { const id = _req.body.id diff --git a/server/controllers/licenceController.ts b/server/controllers/licenceController.ts index 48f61dc..e88a1a8 100644 --- a/server/controllers/licenceController.ts +++ b/server/controllers/licenceController.ts @@ -62,32 +62,51 @@ export const getLicenseById = async (_req: Request, res: Response): Promise } } +function filterWords(str: string, unwantedWords: string[]): string { + const words = str.split(' ') + const filteredWords = words.filter(word => !unwantedWords.includes(word.toLowerCase())) + return filteredWords.join(' ') +} + async function licenceSuggestions(id?: string) { mongoCacheLicense.load() - const mongoLicences = await mongoCacheLicense.getAll?.() - // const allLicenses = mongoLicences.map((licence: any) => licence._id).filter((licence: any) => licence !== null) - // const allLicenseNames = mongoLicences.map((licence: any) => licence.name).filter((licence: any) => licence !== null) - - const allLicenses = mongoLicences.filter((licence: any) => licence !== null) - - if (id !== null) { - const matchesWithId = allLicenses.map((license: any) => ({ - target: license._id, - rating: stringSimilarity.compareTwoStrings(id!, license._id) - })); - const matchesWithName = allLicenses.map((license: any) => ({ - target: license._id, - rating: stringSimilarity.compareTwoStrings(id!, license.name) - })); - - // at least 5 similar matches with a rating of 0.3 or higher - return matchesWithId.concat(matchesWithName) - .sort((a: { rating: number }, b: { rating: number }) => b.rating - a.rating) - .filter((match: { rating: number }) => { - return match.rating >= 0.3 - }) - .filter((match: { target: any }, index: any, self: any[]) => self.findIndex(m => m.target === match.target) === index) - .slice(0, 5) + + if (id === undefined) { + return [] + } + + try { + const filteredID = filterWords(id, ['license', 'the']); + + const mongoLicences = await mongoCacheLicense.getAll?.() + // const allLicenses = mongoLicences.map((licence: any) => licence._id).filter((licence: any) => licence !== null) + // const allLicenseNames = mongoLicences.map((licence: any) => licence.name).filter((licence: any) => licence !== null) + + const allLicenses = mongoLicences.filter((licence: any) => licence !== null) + + if (id !== null) { + const matchesWithId = allLicenses.map((license: any) => ({ + target: license._id, + rating: stringSimilarity.compareTwoStrings(id!, license._id) + })); + const matchesWithName = allLicenses.map((license: any) => ({ + target: license._id, + rating: stringSimilarity.compareTwoStrings(id!, license.name) + })); + + // at least 5 similar matches with a rating of 0.3 or higher + return matchesWithId.concat(matchesWithName) + .sort((a: { rating: number }, b: { rating: number }) => b.rating - a.rating) + .filter((match: { rating: number }) => { + return match.rating >= 0.3 + }) + .filter((match: { target: any }, index: any, self: any[]) => self.findIndex(m => m.target === match.target) === index) + .slice(0, 5) + } + } + catch (error) { + console.error(error) + return [] } return [] @@ -154,7 +173,7 @@ export const getLicenceByProjectId = async (_req: Request, res: Response): Promi for (const dep of dependencies) { const library = await mongoCacheLibrary.get?.(dep.id) if (library) { - for (const license of library.licenses) { + for (const license of library.licenses ?? []) { if (licenses.has(license)) { licenses.get(license).libraries.push(dep) } else { diff --git a/server/src/server.ts b/server/src/server.ts index ec5ccff..6a23936 100644 --- a/server/src/server.ts +++ b/server/src/server.ts @@ -23,5 +23,6 @@ app.use('/licence', licenceRoutes) app.listen(PORT, () => { console.log(process.env.LIBRARIES_IO_API_KEY) + console.log(process.env.GH_TOKEN) console.log(`Server is running on port ${PORT}`) }) diff --git a/src/commands/analyse.ts b/src/commands/analyse.ts index ce6536d..bffa244 100644 --- a/src/commands/analyse.ts +++ b/src/commands/analyse.ts @@ -297,23 +297,30 @@ async function processSingleProject(project: DepinderProject, plugin: any, cache }) let depsWithInfo = 0 - for (const dep of filteredDependencies) { - try { - dep.libraryInfo = await getLib( - cache, - plugin, - dep, - options, - refreshedLibs - ) - } catch (e: any) { - log.warn(`Exception getting remote info for ${dep.name}`) - log.error(e) - } - depProgressBar.increment() - depsWithInfo++ - log.info(`Got remote information on ${dep.name} (${depsWithInfo}/${filteredDependencies.length})`) + console.time('Execution Time'); + + const batchSize = 10; + for (let i = 0; i < filteredDependencies.length; i += batchSize) { + const batch = filteredDependencies.slice(i, i + batchSize); + const promises = batch.map(dep => + getLib(cache, plugin, dep, options, refreshedLibs) + .then(libraryInfo => { + dep.libraryInfo = libraryInfo; + log.info(`Got remote information on ${dep.name} (${i + batch.indexOf(dep) + 1}/${filteredDependencies.length})`); + }) + .catch(e => { + log.warn(`Exception getting remote info for ${dep.name}`); + log.error(e); + }) + .finally(() => { + depsWithInfo++; + log.info(`Got remote information on ${dep.name} (${depsWithInfo}/${filteredDependencies.length})`) + depProgressBar.increment(); + }) + ); + await Promise.all(promises); } + console.timeEnd('Execution Time'); depProgressBar.stop() @@ -415,8 +422,6 @@ export async function analyseFilesToCache(folders: string[], options: AnalyseOpt console.log('Projects in the system:', allProjects.length) - // await processSystem(allProjects, useCache) - log.info('Done') return projectIds diff --git a/src/extension-points/registrar.ts b/src/extension-points/registrar.ts index cb2ab59..c56948b 100644 --- a/src/extension-points/registrar.ts +++ b/src/extension-points/registrar.ts @@ -57,13 +57,16 @@ export class LibrariesIORegistrar extends AbstractRegistrar { timestamp: moment(it.published_at).valueOf(), latest: it.number === libIoData.latest_release_number, licenses: [], + // vulnerabilities: it. } }), - description: libIoData?.description ?? '', + description: libIoData.description, licenses: libIoData.licenses ? [libIoData.licenses] : [], homepageUrl: libIoData?.homepage ?? '', keywords: libIoData?.keywords ?? [], reposUrl: libIoData?.repository_url ? [libIoData.repository_url] : [], + downloads: libIoData.downloads, + //todo add platform } } } \ No newline at end of file