{"version":3,"file":"packages-Cz0iBGWV.js","sources":["../../../../src/ts/projects/packages/main.ts"],"sourcesContent":["import { PackageTableData } from \"../../../models/tables\";\nimport { CommonFilterData, OptionItem } from \"../../../models/filters\";\nimport { Table, getFindingValueForSorting } from \"../../utils\";\n\nexport class PackageTable extends Table {\n // Store grouped packages to prevent duplication across pagination\n groupedByName: Record = {};\n allGroupedPackages: PackageTableData[] = [];\n\n constructor(data: PackageTableData[]) {\n super(data);\n this.groupPackagesByName();\n }\n\n // Group packages by name globally before pagination\n groupPackagesByName() {\n if (!this.tableData || !Array.isArray(this.tableData)) {\n this.groupedByName = {};\n this.allGroupedPackages = [];\n return;\n }\n\n // Clear existing grouped data\n this.groupedByName = {};\n\n // Group packages by name\n this.tableData.forEach((pkg) => {\n const name = pkg.name;\n if (!this.groupedByName[name]) {\n this.groupedByName[name] = [];\n }\n this.groupedByName[name].push(pkg);\n });\n\n // Convert to flat array with each package appearing only once\n this.allGroupedPackages = Object.keys(this.groupedByName).map(name => {\n // For simplicity, use the first package for each name\n // The template will still show all locations for that package\n return this.groupedByName[name][0];\n });\n }\n\n // Helper method to get the multiple versions text for a package group\n getVersionsText(packageName: string): string {\n if (!this.groupedByName[packageName] || this.groupedByName[packageName].length <= 1) {\n return \"\";\n }\n\n const uniqueVersions = new Set();\n\n this.groupedByName[packageName].forEach(pkg => {\n // Use type assertion to access possible undefined properties\n const versionText = (pkg as any).version || (pkg as any).specifier || 'unspecified';\n uniqueVersions.add(versionText);\n });\n\n if (uniqueVersions.size === 1) {\n return Array.from(uniqueVersions)[0];\n }\n\n return `${uniqueVersions.size} versions`;\n }\n\n // Override pagedTableData to use pre-grouped packages\n pagedTableData() {\n // Re-group packages if needed\n if (this.allGroupedPackages.length === 0 && this.tableData.length > 0) {\n this.groupPackagesByName();\n }\n\n return this.allGroupedPackages.filter((_row: any, index: number) => {\n let start = (this.curPage - 1) * this.pageSize;\n let end = this.curPage * this.pageSize;\n if (index >= start && index < end) return true;\n });\n }\n\n sort(col: string) {\n if (this.sortCol === col) this.sortAsc = !this.sortAsc;\n else this.sortAsc = false;\n this.sortCol = col;\n this.tableData.sort((a: PackageTableData, b: PackageTableData) => {\n if (col === \"risk\") {\n if (!a.risk) return 1;\n if (!b.risk) return -1;\n if (a.risk.score < b.risk.score) return this.sortAsc ? 1 : -1;\n if (a.risk.score > b.risk.score) return this.sortAsc ? -1 : 1;\n }\n if (col === \"findings\") {\n if (getFindingValueForSorting(a.findings) < getFindingValueForSorting(b.findings))\n return this.sortAsc ? 1 : -1;\n if (getFindingValueForSorting(a.findings) > getFindingValueForSorting(b.findings))\n return this.sortAsc ? -1 : 1;\n }\n if (\n a[this.sortCol as keyof PackageTableData]! <\n b[this.sortCol as keyof PackageTableData]!\n )\n return this.sortAsc ? 1 : -1;\n if (\n a[this.sortCol as keyof PackageTableData]! >\n b[this.sortCol as keyof PackageTableData]!\n )\n return this.sortAsc ? -1 : 1;\n\n return 0;\n });\n\n // Re-group after sorting\n this.groupPackagesByName();\n }\n\n filterTable(filterData: CommonFilterData[]) {\n let tableDataCopy: PackageTableData[] = [...this.constantTableData];\n\n tableDataCopy = tableDataCopy.filter((item: PackageTableData) => !item.archived_at);\n\n filterData.forEach((filterItem: CommonFilterData) => {\n const validOptions: OptionItem[] = filterItem.options.filter((optionItem: OptionItem) => optionItem.checked);\n\n if (validOptions.length === 0) return;\n\n tableDataCopy = tableDataCopy.filter((item: PackageTableData) => !!validOptions.find((option: OptionItem) => {\n if (filterItem.col === 'ecosystems') {\n return item.ecosystems.includes(option.value);\n }\n if (filterItem.col === 'risk') {\n return item.risk.label.toLowerCase() === option.value.toLowerCase();\n }\n }));\n });\n\n this.tableData = tableDataCopy;\n\n // Re-group after filtering\n this.groupPackagesByName();\n\n // Reset current page number if filtered table data length is smaller than page size\n if (this.allGroupedPackages.length < this.pageSize) {\n this.curPage = 1;\n }\n }\n\n searchTable(event: Event) {\n const inputElement = event.target as HTMLInputElement;\n const searchText = inputElement.value;\n\n if (searchText !== \"\") {\n this.tableData = this.constantTableData\n .filter((item: PackageTableData) => !item.archived_at)\n .filter((item: PackageTableData) =>\n item.name.toLowerCase().includes(searchText.toLowerCase())\n );\n } else {\n this.tableData = this.constantTableData.filter((item: PackageTableData) => !item.archived_at);\n }\n\n // Re-group after searching\n this.groupPackagesByName();\n }\n\n // Override loadData to re-group packages after loading data\n async loadData(repo: any, repoFn: string, repoFnArgs?: Array, filterFn?: string) {\n const result = await super.loadData(repo, repoFn, repoFnArgs, filterFn);\n this.groupPackagesByName();\n return result;\n }\n\n trimPaths(path: string, paths: string[]): string {\n if (!path) return '';\n\n for (const prefix of paths) {\n if (path.startsWith(prefix)) {\n // Remove the matching prefix and any leading slash\n return path.slice(prefix.length).replace(/^\\//, '');\n }\n }\n\n return path;\n }\n}\n"],"names":["PackageTable","Table","data","pkg","name","packageName","uniqueVersions","versionText","_row","index","start","end","col","a","b","getFindingValueForSorting","filterData","tableDataCopy","item","filterItem","validOptions","optionItem","option","event","searchText","repo","repoFn","repoFnArgs","filterFn","result","path","paths","prefix"],"mappings":"wXAIO,MAAMA,UAAqBC,CAAM,CAEtC,cAAoD,CAAC,EACrD,mBAAyC,CAAC,EAE1C,YAAYC,EAA0B,CACpC,MAAMA,CAAI,EACV,KAAK,oBAAoB,CAAA,CAI3B,qBAAsB,CAChB,GAAA,CAAC,KAAK,WAAa,CAAC,MAAM,QAAQ,KAAK,SAAS,EAAG,CACrD,KAAK,cAAgB,CAAC,EACtB,KAAK,mBAAqB,CAAC,EAC3B,MAAA,CAIF,KAAK,cAAgB,CAAC,EAGjB,KAAA,UAAU,QAASC,GAAQ,CAC9B,MAAMC,EAAOD,EAAI,KACZ,KAAK,cAAcC,CAAI,IACrB,KAAA,cAAcA,CAAI,EAAI,CAAC,GAE9B,KAAK,cAAcA,CAAI,EAAE,KAAKD,CAAG,CAAA,CAClC,EAGD,KAAK,mBAAqB,OAAO,KAAK,KAAK,aAAa,EAAE,IAAYC,GAG7D,KAAK,cAAcA,CAAI,EAAE,CAAC,CAClC,CAAA,CAIH,gBAAgBC,EAA6B,CACvC,GAAA,CAAC,KAAK,cAAcA,CAAW,GAAK,KAAK,cAAcA,CAAW,EAAE,QAAU,EACzE,MAAA,GAGH,MAAAC,MAAqB,IAQvB,OANJ,KAAK,cAAcD,CAAW,EAAE,QAAeF,GAAA,CAE7C,MAAMI,EAAeJ,EAAY,SAAYA,EAAY,WAAa,cACtEG,EAAe,IAAIC,CAAW,CAAA,CAC/B,EAEGD,EAAe,OAAS,EACnB,MAAM,KAAKA,CAAc,EAAE,CAAC,EAG9B,GAAGA,EAAe,IAAI,WAAA,CAI/B,gBAAiB,CAEf,OAAI,KAAK,mBAAmB,SAAW,GAAK,KAAK,UAAU,OAAS,GAClE,KAAK,oBAAoB,EAGpB,KAAK,mBAAmB,OAAO,CAACE,EAAWC,IAAkB,CAClE,IAAIC,GAAS,KAAK,QAAU,GAAK,KAAK,SAClCC,EAAM,KAAK,QAAU,KAAK,SAC9B,GAAIF,GAASC,GAASD,EAAQE,EAAY,MAAA,EAAA,CAC3C,CAAA,CAGH,KAAKC,EAAa,CACZ,KAAK,UAAYA,EAAU,KAAA,QAAU,CAAC,KAAK,aACrC,QAAU,GACpB,KAAK,QAAUA,EACf,KAAK,UAAU,KAAK,CAACC,EAAqBC,IAAwB,CAChE,GAAIF,IAAQ,OAAQ,CACd,GAAA,CAACC,EAAE,KAAa,MAAA,GAChB,GAAA,CAACC,EAAE,KAAa,MAAA,GAChB,GAAAD,EAAE,KAAK,MAAQC,EAAE,KAAK,MAAO,OAAO,KAAK,QAAU,EAAI,GACvD,GAAAD,EAAE,KAAK,MAAQC,EAAE,KAAK,MAAO,OAAO,KAAK,QAAU,GAAK,CAAA,CAE9D,GAAIF,IAAQ,WAAY,CACtB,GAAIG,EAA0BF,EAAE,QAAQ,EAAIE,EAA0BD,EAAE,QAAQ,EACvE,OAAA,KAAK,QAAU,EAAI,GAC5B,GAAIC,EAA0BF,EAAE,QAAQ,EAAIE,EAA0BD,EAAE,QAAQ,EACvE,OAAA,KAAK,QAAU,GAAK,CAAA,CAE/B,OACED,EAAE,KAAK,OAAiC,EACxCC,EAAE,KAAK,OAAiC,EAEjC,KAAK,QAAU,EAAI,GAE1BD,EAAE,KAAK,OAAiC,EACxCC,EAAE,KAAK,OAAiC,EAEjC,KAAK,QAAU,GAAK,EAEtB,CAAA,CACR,EAGD,KAAK,oBAAoB,CAAA,CAG3B,YAAYE,EAAgC,CAC1C,IAAIC,EAAoC,CAAC,GAAG,KAAK,iBAAiB,EAElEA,EAAgBA,EAAc,OAAQC,GAA2B,CAACA,EAAK,WAAW,EAEvEF,EAAA,QAASG,GAAiC,CACnD,MAAMC,EAA6BD,EAAW,QAAQ,OAAQE,GAA2BA,EAAW,OAAO,EAEvGD,EAAa,SAAW,IAEZH,EAAAA,EAAc,OAAQC,GAA2B,CAAC,CAACE,EAAa,KAAME,GAAuB,CACvG,GAAAH,EAAW,MAAQ,aACrB,OAAOD,EAAK,WAAW,SAASI,EAAO,KAAK,EAE1C,GAAAH,EAAW,MAAQ,OACrB,OAAOD,EAAK,KAAK,MAAM,gBAAkBI,EAAO,MAAM,YAAY,CACpE,CACD,CAAC,EAAA,CACH,EAED,KAAK,UAAYL,EAGjB,KAAK,oBAAoB,EAGrB,KAAK,mBAAmB,OAAS,KAAK,WACxC,KAAK,QAAU,EACjB,CAGF,YAAYM,EAAc,CAExB,MAAMC,EADeD,EAAM,OACK,MAE5BC,IAAe,GACZ,KAAA,UAAY,KAAK,kBACnB,OAAQN,GAA2B,CAACA,EAAK,WAAW,EACpD,OAAQA,GACPA,EAAK,KAAK,cAAc,SAASM,EAAW,YAAa,CAAA,CAC3D,EAEG,KAAA,UAAY,KAAK,kBAAkB,OAAQN,GAA2B,CAACA,EAAK,WAAW,EAI9F,KAAK,oBAAoB,CAAA,CAI3B,MAAM,SAASO,EAAWC,EAAgBC,EAAyBC,EAAmB,CACpF,MAAMC,EAAS,MAAM,MAAM,SAASJ,EAAMC,EAAQC,EAAYC,CAAQ,EACtE,YAAK,oBAAoB,EAClBC,CAAA,CAGT,UAAUC,EAAcC,EAAyB,CAC3C,GAAA,CAACD,EAAa,MAAA,GAElB,UAAWE,KAAUD,EACf,GAAAD,EAAK,WAAWE,CAAM,EAExB,OAAOF,EAAK,MAAME,EAAO,MAAM,EAAE,QAAQ,MAAO,EAAE,EAI/C,OAAAF,CAAA,CAEX"}