From 02af91c814c2e98f4dfab38abddf7b197eb85ae7 Mon Sep 17 00:00:00 2001 From: metowolf Date: Thu, 13 Feb 2025 11:55:57 +0800 Subject: [PATCH] replace cidr-tools with fast-cidr-tools for improved CIDR merging functionality --- README.md | 2 +- package.json | 2 +- pnpm-lock.yaml | 103 ++++----------------------------------- src/plugins/china.js | 4 +- src/plugins/cidrmerge.js | 17 +------ 5 files changed, 15 insertions(+), 113 deletions(-) diff --git a/README.md b/README.md index 2b609bbf..9f672d7f 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,7 @@ - 感谢 [IPIP.net](https://www.ipip.net/) 设计的 ipdb 数据库格式 - 感谢 ipdb 项目提供 ipdb 数据库格式的读取工具 - 感谢 @ipdb/range 项目提供 ipdb 数据库格式的分段工具 - - 感谢 [cidr-tools](https://github.com/silverwind/cidr-tools) 项目提供可靠的 CIDR 合并工具 + - 感谢 [fast-cidr-tools](https://github.com/SukkaW/fast-cidr-tools) 项目提供高效、可靠的 CIDR 合并工具 - 感谢专注于 IP 数据库收集整理工作的公司和热心网友们 diff --git a/package.json b/package.json index beeb9c31..85ae944e 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "private": true, "dependencies": { "@ipdb/range": "^0.1.1", - "cidr-tools": "^3.0.5", + "fast-cidr-tools": "^0.3.1", "glob": "^7.2.3", "gulp": "^4.0.2", "ipdb": "^0.3.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 553f7386..13339d71 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,9 +11,9 @@ importers: '@ipdb/range': specifier: ^0.1.1 version: 0.1.1 - cidr-tools: - specifier: ^3.0.5 - version: 3.0.6 + fast-cidr-tools: + specifier: ^0.3.1 + version: 0.3.1 glob: specifier: ^7.2.3 version: 7.2.3 @@ -183,14 +183,6 @@ packages: chokidar@2.1.8: resolution: {integrity: sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==} - cidr-regex@3.1.1: - resolution: {integrity: sha512-RBqYd32aDwbCMFJRL6wHOlDNYJsPNTt8vC82ErHF5vKt8QQzxm1FrkW8s/R5pVrXMf17sba09Uoy91PKiddAsw==} - engines: {node: '>=10'} - - cidr-tools@3.0.6: - resolution: {integrity: sha512-6PvVezFGMdoaPkTJFvFlz1S61SeE+3SI+6jj+lAufPXtsyxyj9LnlhQkBuNNu004RuFPkkwKLX3/w4eOQqMaVg==} - engines: {node: '>=10'} - class-utils@0.3.6: resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==} engines: {node: '>=0.10.0'} @@ -382,6 +374,10 @@ packages: resolution: {integrity: sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==} engines: {node: '>= 0.10'} + fast-cidr-tools@0.3.1: + resolution: {integrity: sha512-CixbR87xxUYpoZBR6xyFmOkhoOnd8YtmSW956evigw+AOc20fXAn3FXGL5eFAPpGcrs7qzOOEjEPxVMnvRJ87Q==} + engines: {node: '>=16'} + fast-levenshtein@1.1.4: resolution: {integrity: sha512-Ia0sQNrMPXXkqVFt6w6M1n1oKo3NfKs+mvaV811Jwir7vAk9a6PVV9VPYf6X3BU97QiLEmuW3uXH9u87zDFfdw==} @@ -558,29 +554,10 @@ packages: resolution: {integrity: sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==} engines: {node: '>=0.10.0'} - ip-address@7.1.0: - resolution: {integrity: sha512-V9pWC/VJf2lsXqP7IWJ+pe3P1/HCYGBMZrrnT62niLGjAfCbeiwXMUxaeHvnVlz19O27pvXP4azs+Pj/A0x+SQ==} - engines: {node: '>= 10'} - - ip-address@8.1.0: - resolution: {integrity: sha512-Wz91gZKpNKoXtqvY8ScarKYwhXoK4r/b5QuT+uywe/azv0/nUCo7Bh0IRRI7F9DHR06kJNWtzMGLIbXavngbKA==} - engines: {node: '>= 12'} - - ip-cidr@3.1.0: - resolution: {integrity: sha512-HUCn4snshEX1P8cja/IyU3qk8FVDW8T5zZcegDFbu4w7NojmAhk5NcOgj3M8+0fmumo1afJTPDtJlzsxLdOjtg==} - engines: {node: '>=10.0.0'} - - ip-regex@4.3.0: - resolution: {integrity: sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==} - engines: {node: '>=8'} - ipdb@0.3.3: resolution: {integrity: sha512-lQIa/I5mQ7WbT0h1MCkbixgZslJeEdjBN0a+ElDV2XDfdc0bgGWxUq6+QmMmcx3epu95xBGstmbR+1mX9m4EZQ==} engines: {node: '>=6'} - ipv6-normalize@1.0.1: - resolution: {integrity: sha512-Bm6H79i01DjgGTCWjUuCjJ6QDo1HB96PT/xCYuyJUP9WFbVDrLSbG4EZCvOCun2rNswZb0c3e4Jt/ws795esHA==} - is-absolute@1.0.0: resolution: {integrity: sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==} engines: {node: '>=0.10.0'} @@ -599,10 +576,6 @@ packages: is-buffer@1.1.6: resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} - is-cidr@4.0.2: - resolution: {integrity: sha512-z4a1ENUajDbEl/Q6/pVBpTR1nBjjEE1X7qb7bmWYanNnPoKAvUCPFKeXV6Fe4mgTkWKBqiHIcwsI3SndiO5FeA==} - engines: {node: '>=10'} - is-core-module@2.16.1: resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} engines: {node: '>= 0.4'} @@ -643,10 +616,6 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} - is-ip@3.1.0: - resolution: {integrity: sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==} - engines: {node: '>=8'} - is-negated-glob@1.0.0: resolution: {integrity: sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==} engines: {node: '>=0.10.0'} @@ -700,9 +669,6 @@ packages: resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} engines: {node: '>=0.10.0'} - jsbn@1.1.0: - resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} - json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} @@ -1091,9 +1057,6 @@ packages: resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==} engines: {node: '>=0.10.0'} - sprintf-js@1.1.2: - resolution: {integrity: sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==} - stack-trace@0.0.10: resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} @@ -1107,9 +1070,6 @@ packages: stream-shift@1.0.3: resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} - string-natural-compare@3.0.1: - resolution: {integrity: sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==} - string-width@1.0.2: resolution: {integrity: sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==} engines: {node: '>=0.10.0'} @@ -1451,20 +1411,6 @@ snapshots: transitivePeerDependencies: - supports-color - cidr-regex@3.1.1: - dependencies: - ip-regex: 4.3.0 - - cidr-tools@3.0.6: - dependencies: - ip-address: 8.1.0 - ip-cidr: 3.1.0 - ipv6-normalize: 1.0.1 - is-cidr: 4.0.2 - is-ip: 3.1.0 - jsbn: 1.1.0 - string-natural-compare: 3.0.1 - class-utils@0.3.6: dependencies: arr-union: 3.1.0 @@ -1695,6 +1641,8 @@ snapshots: parse-node-version: 1.0.1 time-stamp: 1.1.0 + fast-cidr-tools@0.3.1: {} + fast-levenshtein@1.1.4: {} file-uri-to-path@1.0.0: @@ -1937,27 +1885,8 @@ snapshots: invert-kv@1.0.0: {} - ip-address@7.1.0: - dependencies: - jsbn: 1.1.0 - sprintf-js: 1.1.2 - - ip-address@8.1.0: - dependencies: - jsbn: 1.1.0 - sprintf-js: 1.1.2 - - ip-cidr@3.1.0: - dependencies: - ip-address: 7.1.0 - jsbn: 1.1.0 - - ip-regex@4.3.0: {} - ipdb@0.3.3: {} - ipv6-normalize@1.0.1: {} - is-absolute@1.0.0: dependencies: is-relative: 1.0.0 @@ -1975,10 +1904,6 @@ snapshots: is-buffer@1.1.6: {} - is-cidr@4.0.2: - dependencies: - cidr-regex: 3.1.1 - is-core-module@2.16.1: dependencies: hasown: 2.0.2 @@ -2017,10 +1942,6 @@ snapshots: dependencies: is-extglob: 2.1.1 - is-ip@3.1.0: - dependencies: - ip-regex: 4.3.0 - is-negated-glob@1.0.0: {} is-number@3.0.0: @@ -2059,8 +1980,6 @@ snapshots: isobject@3.0.1: {} - jsbn@1.1.0: {} - json-stable-stringify-without-jsonify@1.0.1: {} just-debounce@1.1.0: {} @@ -2505,8 +2424,6 @@ snapshots: dependencies: extend-shallow: 3.0.2 - sprintf-js@1.1.2: {} - stack-trace@0.0.10: {} static-extend@0.1.2: @@ -2518,8 +2435,6 @@ snapshots: stream-shift@1.0.3: {} - string-natural-compare@3.0.1: {} - string-width@1.0.2: dependencies: code-point-at: 1.1.0 diff --git a/src/plugins/china.js b/src/plugins/china.js index 7a739749..63dd5571 100644 --- a/src/plugins/china.js +++ b/src/plugins/china.js @@ -1,4 +1,4 @@ -const cidrTools = require('cidr-tools') +const { merge } = require('fast-cidr-tools') const plugin = (through2, file, cb) => { @@ -28,7 +28,7 @@ const plugin = (through2, file, cb) => { 223.120.0.0/13 ` white = white.trim().split('\n') - data = cidrTools.merge([...data, ...white]) + data = merge([...data, ...white], true) file.contents = Buffer.from(data.join('\n')) file.path = file.path.replace('CN.txt', 'china.txt') diff --git a/src/plugins/cidrmerge.js b/src/plugins/cidrmerge.js index 2d205a4a..379a8d69 100644 --- a/src/plugins/cidrmerge.js +++ b/src/plugins/cidrmerge.js @@ -1,5 +1,4 @@ -const cidrTools = require('cidr-tools') -const ProgressBar = require('progress') +const { merge } = require('fast-cidr-tools') const plugin = (file, _, cb) => { let cidrs = file.contents.toString().split('\n') @@ -7,19 +6,7 @@ const plugin = (file, _, cb) => { console.log(file.path) if (cidrs.length) { - let result = [cidrs[0]] - let bar = new ProgressBar(':bar :current/:total', { total: cidrs.length }) - for (let i = 1; i < cidrs.length; i += 1) { - let t = cidrTools.merge([result[result.length - 1], cidrs[i]]) - if (t.length === 1) { - result[result.length - 1] = t[0] - } else { - result.push(cidrs[i]) - } - bar.tick() - } - cidrs = result - console.log() + cidrs = merge(cidrs, true) } file.contents = Buffer.from(cidrs.join('\n'))