From a8eb28f941155087d85f99e0190690721f859215 Mon Sep 17 00:00:00 2001 From: Ayideyia <150233177+Ayideyia@users.noreply.github.com> Date: Wed, 13 Nov 2024 11:14:59 +0800 Subject: [PATCH] lite ruleset --- .github/workflows/update_index.yml | 8 +++-- generate.mjs => generate-full.mjs | 4 +-- generate-lite.mjs | 56 ++++++++++++++++++++++++++++++ 3 files changed, 64 insertions(+), 4 deletions(-) rename generate.mjs => generate-full.mjs (92%) create mode 100644 generate-lite.mjs diff --git a/.github/workflows/update_index.yml b/.github/workflows/update_index.yml index 6bfc567..7808ebe 100644 --- a/.github/workflows/update_index.yml +++ b/.github/workflows/update_index.yml @@ -18,15 +18,19 @@ jobs: run: | git clone -b meta --depth=1 https://github.com/MetaCubeX/meta-rules-dat.git meta git clone -b sing --depth=1 https://github.com/MetaCubeX/meta-rules-dat.git sing - node generate.mjs + node generate-lite.mjs openssl dgst -sha256 meta.json | sed 's/([^)]*)//g' > meta-version.txt openssl dgst -sha256 sing.json | sed 's/([^)]*)//g' > sing-version.txt + node generate-full.mjs + openssl dgst -sha256 meta-full.json | sed 's/([^)]*)//g' > meta-full-version.txt + openssl dgst -sha256 sing-full.json | sed 's/([^)]*)//g' > sing-full-version.txt + - name: Create Release and Upload Assets uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} - file: ./{meta.json,sing.json,meta-version.txt,sing-version.txt} + file: ./{*.json,*.txt} file_glob: true tag: latest release_name: latest diff --git a/generate.mjs b/generate-full.mjs similarity index 92% rename from generate.mjs rename to generate-full.mjs index 336b68c..0078283 100644 --- a/generate.mjs +++ b/generate-full.mjs @@ -43,7 +43,7 @@ function generateMeta() { list: geosite.concat(geoip), }); - fs.writeFileSync("./meta.json", content, { encoding: "utf-8" }); + fs.writeFileSync("./meta-full.json", content, { encoding: "utf-8" }); } function generateSing() { @@ -57,7 +57,7 @@ function generateSing() { list: geosite.concat(geoip), }); - fs.writeFileSync("./sing.json", content, { encoding: "utf-8" }); + fs.writeFileSync("./sing-full.json", content, { encoding: "utf-8" }); } generateMeta(); diff --git a/generate-lite.mjs b/generate-lite.mjs new file mode 100644 index 0000000..b75b508 --- /dev/null +++ b/generate-lite.mjs @@ -0,0 +1,56 @@ +import fs from 'fs'; +import DescriptionMap from './description-map.mjs'; + +function generate(path, geodata, ext) { + const dirs = fs.readdirSync(path, { encoding: 'utf-8' }); + const files = dirs.filter((file) => file.endsWith(ext)); + const list = files.map((item) => { + const name = item.substring(0, item.length - ext.length); + const content = fs.readFileSync(path + item, { encoding: 'utf-8' }); + let count = 0; + + if (ext === '.list') { + count = content.split('\n').length; + } else if (ext === '.json') { + count = JSON.parse(content).rules.reduce( + (p, c) => Object.values(c).reduce((p, c) => (Array.isArray(c) ? p + c.length : p + 1), 0) + p, + 0 + ); + } + + return { + name, + description: DescriptionMap[name], + type: geodata, + count, + }; + }); + return list; +} + +function generateMeta() { + const geosite = generate('./meta/geo-lite/geosite/', 'geosite', '.list'); + const geoip = generate('./meta/geo-lite/geoip/', 'geoip', '.list'); + const content = JSON.stringify({ + geosite: 'https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@meta/geo-lite/geosite/', + geoip: 'https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@meta/geo-lite/geoip/', + list: geosite.concat(geoip), + }); + + fs.writeFileSync('./meta.json', content, { encoding: 'utf-8' }); +} + +function generateSing() { + const geosite = generate('./sing/geo-lite/geosite/', 'geosite', '.json'); + const geoip = generate('./sing/geo-lite/geoip/', 'geoip', '.json'); + const content = JSON.stringify({ + geosite: 'https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@sing/geo-lite/geosite/', + geoip: 'https://testingcf.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@sing/geo-lite/geoip/', + list: geosite.concat(geoip), + }); + + fs.writeFileSync('./sing.json', content, { encoding: 'utf-8' }); +} + +generateMeta(); +generateSing();