|
1 | 1 | // Import Third-party Dependencies
|
2 |
| -import { getFlagsEmojisInlined } from "@nodesecure/vis-network"; |
| 2 | +import { getFlagsEmojisInlined, FLAGS_EMOJIS } from "@nodesecure/vis-network"; |
3 | 3 |
|
4 | 4 | // Import Internal Dependencies
|
5 | 5 | import * as utils from "../../../common/utils.js";
|
@@ -109,6 +109,11 @@ export class PackageHeader {
|
109 | 109 | flagsDomElement.appendChild(flagFragment);
|
110 | 110 | }
|
111 | 111 |
|
| 112 | + // Has Duplicate Button |
| 113 | + if (this.#hasDuplicate()) { |
| 114 | + this.#renderHasDuplicateBtn(clone); |
| 115 | + } |
| 116 | + |
112 | 117 | return links;
|
113 | 118 | }
|
114 | 119 |
|
@@ -244,6 +249,29 @@ export class PackageHeader {
|
244 | 249 |
|
245 | 250 | return fragment;
|
246 | 251 | }
|
| 252 | + |
| 253 | + #hasDuplicate() { |
| 254 | + return this.package.dependencyVersion.flags.some((title) => title === "hasDuplicate") && |
| 255 | + !window.settings.config.ignore.warnings.has("hasDuplicate") && |
| 256 | + "isDuplicated" in FLAGS_EMOJIS; |
| 257 | + } |
| 258 | + |
| 259 | + #renderHasDuplicateBtn(clone) { |
| 260 | + const hasDuplicateBtn = utils.createDOMElement("button", |
| 261 | + { classList: ["has-duplicate"], text: FLAGS_EMOJIS.isDuplicated }); |
| 262 | + |
| 263 | + const packagesList = this.nsn.secureDataSet.findPackagesByName(this.package.dependencyVersion.name) |
| 264 | + .map(({ name, version }) => `${name}@${version}`); |
| 265 | + |
| 266 | + hasDuplicateBtn.addEventListener("click", () => { |
| 267 | + const nodeIds = [...this.nsn.findNodeIds(new Set(packagesList))]; |
| 268 | + this.nsn.highlightMultipleNodes(nodeIds); |
| 269 | + window.locker.lock(); |
| 270 | + }); |
| 271 | + |
| 272 | + const packageDescDiv = clone.querySelector(".package-description"); |
| 273 | + packageDescDiv.appendChild(hasDuplicateBtn); |
| 274 | + } |
247 | 275 | }
|
248 | 276 |
|
249 | 277 | function createFlagInfoBulle(text, description) {
|
|
0 commit comments